Ë a+kŸÈý~šãóÚ—dZddlZddlZddlmZddlmZmZddlm Z m Z m Z m Z mZm Z mZmZmZddlmZmZidd “d d “d d “dd“dd“dd“dd“dd“dd“dd“dd“dd“d d!“d"d#“d$d%“d&d“Zdad'„Zdbd(„Zdcd)„Zddd*„Zd+„Zd,„Zd-„Zd.„Zd/„Zd0„Zd1„Zd2„Z d3„Z!d4„Z"d5„Z#d6„Z$d7„Z%d8„Z&d9„Z'd:„Z(d;„Z)d<„Z*d=„Z+d>„Z,d?„Z-idd@„“d"dA„“d dB„“d$e$“dCdD„“d e'“de%“d e&“dEe*“dFe,“dGe-“ddH„“ddI„“dJe(“ddK„“ddL„“Z.e.j_«Z0e.d e0d<GdM„dNe jb«Z2dO„Z3dP„Z4GdQ„dR«Z5GdS„dTe5«Z6GdU„dV«Z7dW„Z8dX„Z9dY„Z:GdZ„d[«Z;Gd\„d]«Zdad`„Z?y)ea›Slightly complicated template engine for commands and hgweb This module provides low-level interface to the template engine. See the formatter and cmdutil modules if you are looking for high-level functions such as ``cmdutil.rendertemplate(ctx, tmpl)``. Internal Data Types ------------------- Template keywords and functions take a dictionary of current symbols and resources (a "mapping") and return result. Inputs and outputs must be one of the following data types: bytes a byte string, which is generally a human-readable text in local encoding. generator a lazily-evaluated byte string, which is a possibly nested generator of values of any printable types, and will be folded by ``stringify()`` or ``flatten()``. None sometimes represents an empty value, which can be stringified to ''. True, False, int, float can be stringified as such. wrappedbytes, wrappedvalue a wrapper for the above printable types. date represents a (unixtime, offset) tuple. hybrid represents a list/dict of printable values, which can also be converted to mappings by % operator. hybriditem represents a scalar printable value, also supports % operator. revslist represents a list of revision numbers. mappinggenerator, mappinglist represents mappings (i.e. a list of dicts), which may have default output format. mappingdict represents a single mapping (i.e. a dict), which may have default output format. mappingnone represents None of Optional[mappable], which will be mapped to an empty string by % operation. mappedgenerator a lazily-evaluated list of byte strings, which is e.g. a result of % operation. éNé)Ú_)ÚFileNotFoundErrorÚgetattr) ÚconfigÚencodingÚerrorÚparserÚpycompatÚtemplatefiltersÚ templatefuncsÚ templateutilÚutil)Ú resourceutilÚ stringutiló()éN)ógroupró))ófuncrrNó.)éNN)rrNó%)éNN)rrNó|)rNN)rrNó*)éNN)rrNó/)rNN)rrNó+)éNN)rr Nó-)r N)ónegateé)r!r Nó=)éNN)ókeyvaluer%Nó,)éNN)ólistr(Nr)rNNNNóinteger)rr*NNNósymbol)rr+NNNóstring)rr,NNNótemplate)rr-NNNóendc#ópK—|}tj|«}||k�rm||}|j«r�nJ|dvr |d|f–—�n=|dvr$|dz}t||||«\}}d||f–—|dz}�n|dk(ri|||dzdvr_||dz}|dzx}}||kr,||}|d k(r|dz }Œ||k(r d ||||f–—�nÑ|dz }||krŒ,t j t d «|«‚|j«r9|}||kr!||}|j«sn |dz }||krŒ!d ||||f–—|dz}�n^|d k(r |||dzd vs|dk(rÆ|||dzdvr¼|dk(r|dz }d } nd} |||dz} |dzx}}||krz|jd||«r|dz }Œ|j| ||«rCtj|||«}| dk(rt|dt|««d}| ||f–—|dz }n®|dz }||krŒzt j t d «|«‚|j«s|dvrD|}|dz }||kr&||}|j«s|dk(sn |dz }||krŒ&|||} d| |f–—|dz}n,||k(rdd|f–—yt j t d«|«‚|dz }||kr�Œm|rt j t d«|«‚dd|f–—y­w)z^Parse a template expression into a stream of tokens, which must end with term if specifieds (=,).%|+-*/Ns"'rr-órr()sr'sr"ó\r,óunterminated stringr*)s\'s\"r%)sr\'sr\"s\\\r ró_r+r.s syntax errorsunterminated template expansion) r ÚbytestrÚisspaceÚ_parsetemplater Ú ParseErrorrÚisdigitÚ startswithr Ú unescapestrÚlenÚisalnum) ÚprogramÚstartÚendÚtermÚposÚcÚsÚdataÚdÚtokenÚquoteÚsyms ú7usr/lib/python3.12/site-packages/mercurial/templater.pyÚtokenizerJts‹èø€ð €CÜ×јwÓ'€GØ �‹)Ø �C‰LˆØ �9‰9Œ;Ù Ø �.Ñ Ø�d˜C�.Ô Ø �&‰[Ø�a‘ˆAÜ& w°°3¸Ó:‰IˆD�#Ø  aÐ(Ò (Ø �1‰HŠCØ �$ŠY˜7 3¨¨q©Ð1°^ÑCà˜˜a™Ñ ˆAؘA‘gÐ ˆA�ؘ’)ؘC‘L�ؘ’:ؘ1‘H�CØØ˜’6Ø$ g¨a° n°aÐ8Ò8ÙØ�q‘�ð˜“)ô×&Ñ&¤qÐ)?Ó'@À!ÓDÐDØ �Y‰YŒ[؈Aؘ’)ؘC‘L�Ø—y‘y”{ØØ�q‘�𠘓)ð ˜w q¨˜~¨qÐ1Ò 1Ø �1‰HŠCà �ŠJؘ˜c A™gÐ&Ð*:Ñ:Ø�DŠyؘ˜c A™gÐ&Ð*<Ñ<ð�DŠyØ�q‘�Ø!‘à#�ؘC #¨¡'Ð*ˆEؘA‘gÐ ˆA�ؘ’)ð ×%Ñ% i°°cÔ:ؘ1‘H�CØØ×%Ñ% e¨S°#Ô6ô"×-Ñ-¨g°a¸¨nÓ=�DØ  Ò+Ü-¨d°A´s¸4³yÓAÀ!ÑD˜Ø  $¨Ð*Ò*ؘ1‘H�CØØ�q‘�ð'˜“)ô*×&Ñ&¤qÐ)?Ó'@À!ÓDÐDØ �Y‰YŒ[˜A ™I؈AØ �1‰HˆCؘ’)ؘC‘L�ØŸ ™ œ  q¨D¢yØØ�q‘�𠘓)ð ˜!˜C�.ˆCؘc 1Ð%Ò %Ø �1‰H‰CØ �$ŠYؘ4 Ð%Ò %Ø ä×"Ñ"¤1 _Ó#5°sÓ;Ð ;Ø ˆq‰ˆðA �Œ)ñB Ü×ÑœqÐ!CÓDÀeÓLÐLØ �4˜Ð Óùs(‚B8J6Â;AJ6ÄC J6ÇA$J6ÉAJ6Ê )J6có—g}t||||«D]X\}}}|dk(r|j||f«Œ |dk(r|j|«Œ7|dk(r||fcStjd|z«‚tjd«‚)aý >>> _parsetemplate(b'foo{bar}"baz', 0, 12) ([('string', 'foo'), ('symbol', 'bar'), ('string', '"baz')], 12) >>> _parsetemplate(b'foo{bar}"baz', 0, 12, quote=b'"') ([('string', 'foo'), ('symbol', 'bar')], 9) >>> _parsetemplate(b'foo"{bar}', 0, 9, quote=b'"') ([('string', 'foo')], 4) >>> _parsetemplate(br'foo\"bar"baz', 0, 12, quote=b'"') ([('string', 'foo"'), ('string', 'bar')], 9) >>> _parsetemplate(br'foo\\"bar', 0, 10, quote=b'"') ([('string', 'foo\\')], 6) r,r-r.sunexpected type: %só!unterminated scanning of template)Ú _scantemplateÚappendr ÚProgrammingError)Útmplr>ÚstoprGÚparsedÚtypÚvalrAs rIr6r6ßs�€ð€FÜ& t¨U°D¸%Ö@‰ ˆˆS�#Ø �)Ò Ø �M‰M˜3 ˜*Õ %Ø �KÒ Ø �M‰M˜#Õ Ø �FŠ]ؘ3�;Ò ä×(Ñ(Ð)?À#Ñ)EÓFÐ FðAô × Ñ Ð!EÓ FÐFóc#ó¤K—d}t|dt|«|¬«D]\}}}|r||fz–—|dk(ry||f}Œtjd«‚­w)aScan (type, start, end) positions of outermost elements in template If raw=True, a backslash is not taken as an escape character just like r'' string in Python. Note that this is different from r'' literal in template in that no template fragment can appear in r'', e.g. r'{foo}' is a literal '{foo}', but ('{foo}', raw=True) is a template expression 'foo'. >>> list(scantemplate(b'foo{bar}"baz')) [('string', 0, 3), ('template', 3, 8), ('string', 8, 12)] >>> list(scantemplate(b'outer{"inner"}outer')) [('string', 0, 5), ('template', 5, 14), ('string', 14, 19)] >>> list(scantemplate(b'foo\\{escaped}')) [('string', 0, 5), ('string', 5, 13)] >>> list(scantemplate(b'foo\\{escaped}', raw=True)) [('string', 0, 4), ('template', 4, 13)] Nr)Úrawr.rL)rMr;r rO)rPrWÚlastrSrTrAs rIÚ scantemplaterYùscèø€ð$ €DÜ& t¨Q´°D³ ¸s×C‰ ˆˆS�#٠ؘ#˜‘-Ò Ø �&Š=Ù à˜�:‰Dð Dô × Ñ Ð!EÓ FÐFùs‚AAc#󎇇‡ K—d|z}tjtjg|}|Š tjt«} ‰ ‰k�r#t ˆ ˆˆfd„tj |«D«d„¬«}|dkrd|‰‰ ‰«‰ f–—‰Š n߉||dz} d} |s#|‰ z t‰‰ |jd««z } | d zdk(rd|‰‰ |dz «| z‰ f–—|dzŠ Œ�|‰ kDrd|‰‰ |«‰ f–—| |k(r d d |dzf–—y |jt‰|dz‰d ««\} Š ‰jd ‰ «stjtd «‰ «‚d| |f–—‰ dz Š ‰ ‰kr�Œ#|rtjtd«|«‚ d d ‰ f–—y #tj$r} t| ‰«‚d } ~ wwxYw­w)zEParse template string into chunks of strings and template expressionsó{c3óD•K—|]}‰j|‰‰«–—Œy­w©N)Úfind)Ú.0rBrArQrPs €€€rIÚ z _scantemplate..s!øèø€ÐMÑ2L¨Q�—‘˜1˜c 4×(Ñ2Lùsƒ có—|dk|fS)Nr©)Úns rIÚz_scantemplate.. s €˜q 1™u a™jrU)Úkeyrr,rr1r(r.Nó}ó invalid tokenr-r2)r r:r ÚidentityÚelementsÚminr4r;ÚrstripÚparserJr9r r7rÚ_addparseerrorhint)rPr>rQrGrWÚsepcharsÚunescapeÚprcrBÚbsÚparseresÚinstrAs` ` @rIrMrMsúèø€à�e‰|€HÜ×"Ñ"¤H×$5Ñ$5Ð6°sÑ;€HØ €CÜ� ‰ ”hÓ€Að*Ø�D‹jÜÝM´(×2BÑ2BÀ8Ô2LÓMÙ(ôˆAð�1ŠuØ ¡(¨4°°D¨>Ó":¸CÐ@Ò@Ø�ØØ�Q˜˜Q™�ˆA؈BÙØ˜#‘g¤ T¨#¨a [×%7Ñ%7¸Ó%>Ó!?Ñ?�Ø�A‰v˜Š{à ¡(¨4°°a¸!±eÐ+<Ó"=ÀÑ"AÀ3ÐGÒGؘ!‘e�ØØ�3ŠwØ ¡(¨4°°A¨;Ó"7¸Ð=Ò=Ø�EŠzؘt Q¨¡UÐ+Ò+ØàŸG™G¤H¨T°1°q±5¸$ÀÓ$EÓF‰MˆH�cð—?‘? 4¨Ô-ä×&Ñ&¤qÐ)9Ó':¸CÓ@Ð@Ø ¨!Ð,Ò ,Ø �1‰HˆCðG�DŒjñJ Ü×"Ñ"¤1Ð%;Ó#<¸eÓDÐ Dð ð �4˜Ð Óøô × Ñ òܘ4 Ô&Ø ûðüs>…AGÁ CFÄ GÄ A%FÅ3!FÆ GÆGÆ0 F=Æ=GÇGcóÌ—|j€y|j}|d|jd«}|jdd«}|dzd|dz|zzzdztd«z|_y)Nó s\nó rs^ shere)ÚlocationÚcountÚreplacerÚhint)rsrPÚlocÚoffsets rIrmrmJsn€Ø ‡}�}ÐØØ �-‰-€Cð�$�3ˆZ× Ñ ˜eÓ $€FØ �<‰<˜˜vÓ &€Dð �u‘ ˜t s¨Q¡w°Ñ'7Ñ8Ñ8¸5Ñ@Ä1ÀWÃ:ÑM€D…IrUcó—t|t«s|S|d}|dk7r|ftd„|ddD««zSt|«dk(sJ‚td„|dD««}|syt|«dk(r|ddd k(r|dS|f|zS) a;Expand list of templates to node tuple >>> def f(tree): ... print(pycompat.sysstr(prettyformat(_unnesttemplatelist(tree)))) >>> f((b'template', [])) (string '') >>> f((b'template', [(b'string', b'foo')])) (string 'foo') >>> f((b'template', [(b'string', b'foo'), (b'symbol', b'rev')])) (template (string 'foo') (symbol 'rev')) >>> f((b'template', [(b'symbol', b'rev')])) # template(rev) -> str (template (symbol 'rev')) >>> f((b'template', [(b'template', [(b'string', b'foo')])])) (string 'foo') rr-c3ó2K—|]}t|«–—Œy­wr]©Ú_unnesttemplatelist©r_Úxs rIr`z&_unnesttemplatelist..qsèø€ÐF¹X¸Ô0°×3¹Xùó‚rNr(c3ó2K—|]}t|«–—Œy­wr]rr�s rIr`z&_unnesttemplatelist..tsèø€Ð7©w¨!Ô" 1×%©wùrƒ)r,rUr,)Ú isinstanceÚtupler;)ÚtreeÚopÚxss rIr€r€Zs›€ô& �dœEÔ "؈ Ø ˆa‰€BØ ˆ[ÒØˆu”uÑF¸TÀ!À"¹XÓFÓFÑFÐFä ˆt‹9˜Š>Ј>Ü Ñ7¨t°AªwÓ7Ó 7€BÙ ØÜ ˆR‹�AŠ˜"˜Q™% ™( iÒ/Ø�!‰uˆ àˆu�r‰zÐrUcóx—t|dt|««\}}|t|«k(sJd«‚td|f«S)zParse template string into treers$unquoted template should be consumedr-)r6r;r€)rPrRrAs rIrlrl}s@€ä   q¬#¨d«)Ó4�K€FˆCØ ”#�d“)Ò ÐDÐDÓDÐ Ü   ¨VÐ4Ó 5Ð5rUcój— t|«S#tj$r}t||«‚d}~wwxYw)a=Parse a template expression into tree >>> parseexpr(b'"foo"') ('string', 'foo') >>> parseexpr(b'foo(bar)') ('func', ('symbol', 'foo'), ('symbol', 'bar')) >>> from . import error >>> from . import pycompat >>> try: ... parseexpr(b'foo(') ... except error.ParseError as e: ... pycompat.sysstr(e.message) ... e.location 'not a prefix: end' 4 >>> try: ... parseexpr(b'"foo" "bar"') ... except error.ParseError as e: ... pycompat.sysstr(e.message) ... e.location 'invalid token' 7 N)Ú _parseexprr r7rm)Úexprrss rIÚ parseexprrŽ„s5€ð0ܘ$ÓÐøÜ × Ñ òܘ4 Ô&Ø ûðús‚ �2  -­2c óô—tjt«}|jt|dt |«««\}}|t |«k7rt j td«|«‚t|«S)Nrrg) r rirlrJr;r r7rr€)r�rpr‡rAs rIrŒrŒ£s_€Ü� ‰ ”hÓ€AØ—‘œ  q¬#¨d«)Ó4Ó5�I€Dˆ#Ø Œc�$‹iÒÜ×ÑœqÐ!1Ó2°CÓ8Ð8Ü ˜tÓ $Ð$rUcó.—tj|d«S)N)r*r,r+)r Ú prettyformat©r‡s rIr‘r‘«s€Ü × Ñ ˜tÐ%GÓ HÐHrUcód—|stjtd««‚|d}||||«S)z1Compile parsed template tree to (func, data) pairsmissing argumentr©r r7r)ÚexpÚcontextÚ curmethodsÚts rIÚ compileexpr™¯s8€á Ü×ÑœqÐ!4Ó5Ó6Ð6Ø ˆA‰€AØ ˆ:�a‰=˜˜gÓ &Ð&rUcód—|ddk(r|dStjtd«|dz«‚)Nrr+rsexpected a symbol, got '%s'r”)r•s rIÚ getsymbolr›ºs7€Ø ˆ1�v�ÒØ�1‰vˆ Ü × Ñ œ1Ð;Ó<¸sÀ1¹vÑEÓ FÐFrUcóJ—|sgS|ddk(rt|d«|dgzS|gS)Nrr)rr(©Úgetlist)r‚s rIržržÀs5€Ù ؈ ؈�tˆw‚Ü�q˜‘t‹}  !¡˜vÑ%Ð%Ø ˆ3€JrUcó¦—|ddvrt||t«S|ddk(r|j|d«Stjt d««‚)z_Compile given template tree or load named template from map file; returns (func, data) pairr)r-r,r+rsexpected template specifier)r™ÚmethodsÚ_loadr r7r©r•r–s rIÚ gettemplater£ÈsX€ð ˆ1�vÐ)Ñ)ܘ#˜w¬Ó0Ð0Ø ˆ1�v�Òð�}‰}˜S ™VÓ$Ð$Ü × Ñ œ1Ð;Ó<Ó =Ð=rUcóD—tjtd«|z«‚)Ns$recursive reference '%s' in template)r Ú InputErrorr)r–Úmappingres rIÚ_runrecursivesymbolr§Õs€Ü × Ñ œ1ÐDÓEÈÑKÓ LÐLrUcór—|ddD�cgc]}t||t«‘Œ}}tj|fScc}w©Nr)r™r rÚ runtemplate)r•r–ÚeÚctmpls rIÚ buildtemplater­Ùs;€Ø69¸!¸"±gÓ >±g°ŒZ˜˜7¤GÕ ,°g€EÐ >Ü × $Ñ $ eÐ ,Ð,ùò ?sˆ4cól—t|d«}||jvr7|j|}t|d|t«}tj ||ffS||j vr3|j |}t|d|t||j«}||fStjtd«|z«‚)Nr(róunknown function '%s') r›Ú_filtersr™r rÚ runfilterÚ_funcsÚ_buildfuncargsÚ_argspecr r7r)r•r–rcÚfiltÚargÚfÚargss rIÚ buildfilterr¹Þs¯€Ü�#�a‘&Ó€A؈G× Ñ ÑØ×Ñ Ñ"ˆÜ˜˜Q™ ¬'Ó2ˆÜ×&Ñ&¨¨d¨ Ð4Ð4؈G�N‰NÑØ �N‰N˜1Ñ ˆÜ˜c !™f g¬w¸¸1¿:¹:ÓFˆØ�4ˆyÐÜ × Ñ œ1Ð5Ó6¸Ñ:Ó ;Ð;rUcóp—t|d|t«}t|d|«}tj||ffS©Nrr()r™r r£rÚrunmap)r•r–ÚdargÚtargs rIÚbuildmapr¿ës9€Ü �c˜!‘f˜g¤wÓ /€DÜ �s˜1‘v˜wÓ '€DÜ × Ñ  $¨ Ð .Ð.rUcón—t|d|t«}t|d«}tj||ffSr»)r™r r›rÚ runmember)r•r–r½Úmembs rIÚ buildmemberrÃñs7€Ü �c˜!‘f˜g¤wÓ /€DÜ �S˜‘VÓ €DÜ × "Ñ " T¨4 LÐ 1Ð1rUcóN—t|d|t«}tj|fSr©)r™Ú exprmethodsrÚ runnegate)r•r–r¶s rIÚ buildnegaterÇ÷s%€Ü �S˜‘V˜W¤kÓ 2€CÜ × "Ñ " CÐ (Ð(rUcó|—t|d|t«}t|d|t«}tj|||ffSr»)r™rÅrÚ runarithmetic)r•r–ÚfuncÚleftÚrights rIÚbuildarithmeticrÍüs>€Ü �c˜!‘f˜g¤{Ó 3€DÜ �s˜1‘v˜w¬ Ó 4€EÜ × &Ñ &¨¨t°UÐ(;Ð <ÐÜ×"Ñ"¤1Ð%FÓ#GÈ!Ñ#KÓLÐ LØ × Ñ ˜QÑ ˆÜ×&Ñ&¨¨a©°!¨ Ð5Ð5Ü × Ñ œ1Ð5Ó6¸Ñ:Ó ;Ð;rUc󌇇—ˆˆfd„}ˆˆfd„}|s|t|««Stj|«x\}}} } }tjt|«||dd¬«} t j «} |r|| j |««| |<| r|| j | ««| | <| j|| ««| S)aCompile parsed tree of function arguments into list or dict of (func, data) pairs >>> context = engine(lambda t: (templateutil.runsymbol, t)) >>> def fargs(expr, argspec): ... x = _parseexpr(expr) ... n = getsymbol(x[1]) ... return _buildfuncargs(x[2], context, exprmethods, n, argspec) >>> list(fargs(b'a(l=1, k=2)', b'k l m').keys()) ['l', 'k'] >>> args = fargs(b'a(opts=1, k=2)', b'**opts') >>> list(args.keys()), list(args[b'opts'].keys()) (['opts'], ['opts', 'k']) có^•—tjˆˆfd„|j«D««S)Nc3óB•K—|]\}}|t|‰‰«f–—Œy­wr]©r™)r_Úkr‚r–r—s €€rIr`z6_buildfuncargs..compiledict.."s'øèø€ð Ù@J¹¸¸1ˆQ” ˜1˜g zÓ2Ô 3Á ùsƒ)rÚsortdictÚitems)r‰r–r—s €€rIÚ compiledictz#_buildfuncargs..compiledict!s'ø€Ü�}‰}ô Ø@BÇÁÄ ó ó ð rUcóD•—|D�cgc]}t|‰‰«‘Œc}Scc}wr]rÔ)r‰r‚r–r—s €€rIÚ compilelistz#_buildfuncargs..compilelist&s$ø€Ù<>Ó?¹B°q” ˜1˜g zÕ2¸BÑ?Ð?ùÒ?s†r&r+)Ú keyvaluenodeÚkeynode)ržr Ú splitargspecÚ buildargsdictrrÖÚpopÚupdate) r•r–r—ÚfuncnamerÏrØrÚÚ_poskeysÚvarkeyÚ_keysÚoptkeyÚtreeargsÚcompargss `` rIr³r³s¾ù€õ  õ @ñ áœ7 3›<Ó(Ð(ô17×0CÑ0CÀGÓ0LÐLÑ#€Hˆf�e˜V gÜ×#Ñ#Ü�‹ ØØØ Øô €Hô�}‰}‹€HÙ Ù& x§|¡|°FÓ';Ó<ˆ�ÑÙ Ù& x§|¡|°FÓ';Ó<ˆ�ÑØ ‡O�O‘K Ó)Ô*Ø €OrUcó>—tjtd««‚)Ns*can't use a key-value pair in this contextr”)r•Úcontents rIÚbuildkeyvaluepairrê?s€Ü × Ñ œ1ÐJÓKÓ LÐLrUcóT—tjtd«td«¬«‚)Ns can't use a list in this contextscheck place of comma and parens©rzr”r¢s rIÚ buildlistríCs'€Ü × Ñ Ü Ð -Ó.Ü Ð1Ó 2ô ðrUcó,—tj|dfSr©)rÚ runinteger©r«rBs rIrdrdLs€œl×5Ñ5°q¸±tÑ..Wó€¸!¸aº%rU©rÍrðs rIrdrdWó€” q¨!Ñ-?Ô@rUcó—t||d„«S)Ncó —||z Sr]rbrùs rIrdz..XrürUrýrðs rIrdrdXrþrUr"có—t||d„«S)Ncó —||zSr]rbrùs rIrdz..ZrürUrýrðs rIrdrdZrþrUcó—t||d„«S)Ncó —||zSr]rbrùs rIrdz..[s€¸!¸qº&rUrýrðs rIrdrd[s€” q¨!Ñ-@ÔArUcó@—eZdZdZed«Zee«Zed„«Z y)Ú _aliasrulesz2Parsing and expansion rule set of template aliasesstemplate aliascóš—|ddk(r!|dddk(r|ddt|d«fS|ddk(r|dddk(r|dd|dgfSyy)zNReturn (name, args) if tree is func(...) or ...|filter; otherwise Nonerrrr+r(rNr�r’s rIÚ _trygetfuncz_aliasrules._trygetfuncisu€ð �‰7�gÒ  $ q¡'¨!¡*° Ò"9ؘ‘7˜1‘:œw t¨A¡wÓ/Ð/Ð /Ø �‰7�dŠ?˜t A™w q™z¨YÒ6ؘ‘7˜1‘:  Q¡˜yÐ(Ð (ð 7ˆ?rUN) Ú__name__Ú __module__Ú __qualname__Ú__doc__rÚ_sectionÚ staticmethodrŒÚ_parserrbrUrIrrcs,„Ù<áÐ"Ó#€HÙ ˜*Ó %€Fàñ)óñ)rUrcóX—tj|«}tj||«S)z'Return new tree of aliases are expanded)rr¿Úexpand)r‡ÚaliasesÚaliasmaps rIÚ expandaliasesrss%€ä×#Ñ# GÓ,€HÜ × Ñ ˜h¨Ó -Ð-rUcóP—t|«dks|ddvs |d|dk7r|S|ddS)z9unwrap quotes if any; otherwise returns unmodified stringr(ró'"éÿÿÿÿr)r;)rCs rIÚ unquotestringr|s6€ä ˆ1ƒv�‚z�Q�q‘T Ñ'¨1¨Q©4°1°R±5ª=ØˆØ ˆQˆrˆ7€NrUcó¸—eZdZdZej Zejd„«Zejd„«Z ejd„«Z ejd„«Z y)Úresourcemapperz%Mapper of internal template resourcescó—y)úBReturn a set of available resource keys based on the given mappingNrb©Úselfr¦s rIÚ availablekeyszresourcemapper.availablekeysˆó�rUcó—y)ú'Return a set of supported resource keysNrb©rs rIÚ knownkeyszresourcemapper.knownkeysŒr rUcó—y)z:Return a resource for the key if available; otherwise NoneNrb©rr¦res rIÚlookupzresourcemapper.lookup�r rUcó—y)zcReturn a dict of additional mapping items which should be paired with the given new mappingNrb©rr–Ú origmappingÚ newmappings rIÚ populatemapzresourcemapper.populatemap”r rUN) r r r r ÚabcÚABCMetaÚ __metaclass__Úabstractmethodrr$r'r,rbrUrIrrƒsx„Ù/à—K‘K€Mà×ÑñQóðQð ×Ññ6óð6ð ×ÑñIóðIð ×Ññ&óñ&rUrcó$—eZdZd„Zd„Zd„Zd„Zy)Únullresourcemappercó—t«Sr]©Úsetrs rIrz nullresourcemapper.availablekeys›ó €Ü‹uˆ rUcó—t«Sr]r4r#s rIr$znullresourcemapper.knownkeysžr6rUcó—yr]rbr&s rIr'znullresourcemapper.lookup¡s€ØrUcó—iSr]rbr)s rIr,znullresourcemapper.populatemap¤s€Øˆ rUN)r r r rr$r'r,rbrUrIr2r2šs„òòòórUr2có`—eZdZdZdd„Zd„Zd„Zd„Zd„Zd„Z d „Z d „Z d „Z d „Z d „Zd„Zd„Zy)Úenginea¨template expansion engine. template expansion works like this. a map file contains key=value pairs. if value is quoted, it is treated as string. otherwise, it is treated as name of template file. templater is asked to expand a key in map. it looks up key, and looks for strings like this: {foo}. it expands {foo} by looking up foo in map, and substituting it. expansion is recursive: it stops when there is no more {foo} to replace. expansion also allows formatting and filtering. format uses key to expand each item in list. syntax is {key%format}. filter uses function to transform value. syntax is {key|filter1|filter2|...}.Ncóª—||_|€i}||_tj|_|€i}|€ t «}||_||_i|_i|_ yr]) Ú_loaderr°r Úfuncsr²r2Ú _defaultsÚ _resourcesÚ_cacheÚ _tmplcache)rÚloaderÚfiltersÚdefaultsÚ resourcess rIÚ__init__zengine.__init__¼s\€ØˆŒ Ø ˆ?؈G؈Œ Ü#×)Ñ)ˆŒ Ø Ð ØˆHØ Ð Ü*Ó,ˆIØ!ˆŒØ#ˆŒØˆŒ ؈�rUc ó„—|jj«}|jj|«}|j«D��cic],\}}||vs |j |j |««r||“Œ.}}}|j |«|j |jj|||««|Scc}}w)zfCreate combined mapping from the original mapping and partial mapping to override the original)r@r$rr×Ú isdisjointÚ_defaultrequiresràr,)rr*r+ÚknownresÚnewresrÕÚvr¦s rIÚ overlaymapzengine.overlaymapËs¹€ð —?‘?×,Ñ,Ó.ˆØ—‘×.Ñ.¨zÓ:ˆð$×)Ñ)Ô+ô á+‘��1à�X‘ Ø×$Ñ$ T×%:Ñ%:¸1Ó%=Ô>ð ˆq‰DØ+ð ñ ð �‰�zÔ"Ø�‰Ø �O‰O× 'Ñ '¨¨k¸:Ó Fô ðˆùó sÁ 1B<cón—|jj|«}|� t|«syt|dd«S)z?Resource keys required by the specified default symbol functionrbÚ _requires)r?ÚgetÚcallabler)rrerMs rIrJzengine._defaultrequiresàs3€à �N‰N× Ñ ˜sÓ #ˆØ ˆ9œH QœKØÜ�q˜+ rÓ*Ð*rUcóž—d}||jj«vr|j|«}|€|jj|«}|S)z:Resolve symbol to value or function; None if nothing foundN)r@r$rQr?©rr¦rerMs rIÚsymbolz engine.symbolçsH€à ˆØ �d—o‘o×/Ñ/Ó1Ñ 1Ø— ‘ ˜CÓ ˆAØ ˆ9Ø—‘×"Ñ" 3Ó'ˆA؈rUcó8—|jj|«S)r)r@rrs rIÚavailableresourcekeyszengine.availableresourcekeysðs€à�‰×,Ñ,¨WÓ5Ð5rUcó6—|jj«S)r")r@r$r#s rIÚknownresourcekeyszengine.knownresourcekeysôs€à�‰×(Ñ(Ó*Ð*rUcó„—|jj||«}|€!tjt d«|z«‚|S)zNReturn internal data (e.g. cache) used for keyword/function evaluations#template resource not available: %s)r@r'rÚResourceUnavailablerrTs rIÚresourcezengine.resourceøsG€ð �O‰O× "Ñ " 7¨CÓ 0ˆØ ˆ9Ü×2Ñ2ÜÐ8Ó9¸CÑ?óð ðˆrUcóì—||jvrE|j|«}t|f|j|< t||t«|j|<|j|S#|j|=‚xYw)z!load, parse, and cache a template)rAr=r§r™r )rr˜r‚s rIr¡z engine._loadsm€à �D—K‘KÑ Ø— ‘ ˜Q“ˆAä1°1Ð5ˆD�K‰K˜‰Nð Ü!+¨A¨t´WÓ!=�— ‘ ˜A‘ð�{‰{˜1‰~Ðøð Ø—K‘K �NØús ¶A#Á#A3cóŽ—||jvr)t|«}t||t«|j|<|j|S)z"Parse and cache a literal template)rBrlr™r ©rrPr‚s rIrz engine._parses=€à �t—‘Ñ &Ü�d“ ˆAÜ$.¨q°$¼Ó$@ˆD�O‰O˜DÑ !Ø�‰˜tÑ$Ð$rUcóZ— |j|«y#tj$rYywxYw)z:Load, parse, and cache the specified template if availableTF)r¡rÚTemplateNotFound©rr˜s rIÚpreloadzengine.preloads-€ð Ø �J‰J�qŒMØøÜ×,Ñ,ò Ùð ús ‚”*©*cóP—|j|«\}}|j|||«S)z�Perform expansion. t is name of map element to expand. mapping contains added elements for use during expansion. Is a generator.)r¡Ú_expand)rr˜r¦rÊrDs rIÚprocesszengine.processs(€ð—Z‘Z “]‰ ˆˆdØ�|‰|˜D $¨Ó0Ð0rUcóP—|j|«\}}|j|||«S)zªPerform expansion over a literal template No user aliases will be expanded since this is supposed to be called with an internal template string. )rre)rrPr¦rÊrDs rIrz engine.expand%s)€ð —[‘[ Ó&‰ ˆˆdØ�|‰|˜D $¨Ó0Ð0rUc ó¤—|jj|i|«}|r|j|«|}tj||||||««Sr])r@r,ràrÚflatten)rrÊrDr¦Ú extramappings rIrezengine._expand.sP€ð—‘×2Ñ2°4¸¸WÓEˆ Ù Ø × Ñ  Ô (Ø"ˆGÜ×#Ñ# D¨'±4¸¸gÀtÓ3LÓMÐMrU)NNN)r r r r rGrNrJrUrWrYr\r¡rrcrfrrerbrUrIr;r;¨sI„ñ"ó& òò*+òò6ò+òò ò%òò1ò1óNrUr;có —t«}|s td«Stj|«}g}|D]8}|j d«}|ddvrŒ|ddk(sŒ%|j |d«Œ:dj t|««S) Ns7no templates found, try `hg debuginstall` for more inforr)sorigsrejrs map-cmdliners, )Ú templatedirrÚosÚlistdirÚsplitrNÚjoinÚsorted)ÚpathÚdirlistÚ stylelistÚfileros rIrtrt9s‡€Ü ‹=€DÙ ÜÐKÓLÐLÜ�j‰j˜Ó€GØ€Iۈؗ ‘ ˜4Ó ˆØ �‰9Ð)Ñ )Ø Ø �‰8�~Ó %Ø × Ñ ˜U 1™XÕ &ð ð �:‰:”f˜YÓ'Ó (Ð(rUcóÚ—tjj|«rtj|d«St j td«|ztd«t«z¬«‚)Nórbsstyle '%s' not foundsavailable styles: %srì) rmrrÚexistsrÚ posixfiler ÚAbortrrt)Úmapfiles rIÚ _open_mapfiler|HsR€Ü ‡w�w‡~�~�gÔÜ�~‰~˜g uÓ-Ð-Ü �+‰+Ü Ð !Ó" WÑ,Ü Ð&Ó '¬)«+Ñ 5ô ðrUcóà‡ ‡‡—tjr0|jtj«}dj |«}t j j|«Š tj«Šˆ ˆˆfd„Š|j«}‰j||ddi‰¬«i}i}g}‰jdd«}|�rH|ddv�r@t j jt j j ‰ |««}t j j|«sÉt«} | �½t j jt j j | |««} t j j| «r| }n^t j jt j j | d ««} t j j| «r| }t!|«}t#||«\}}}‰j%d«D]¯\} }|s/t'j(t+d «‰j-d| ««‚|ddvrI|d|d k7r/t'j(t+d «‰j-d| ««‚t/|«|| <Œ‡| dk7sŒ�t j j ‰ |«|| <Œ±|j1‰j%d ««|||fS)z.Load template elements from the given map filerc󾕗d}‰rrtjjtjj‰|««}tjj |«rt j |d«}|sªtj|vr|} tjd|«}n~t«}|rrtjjtjj||««}tjj |«rt j |d«}|r'|j«}‰j|||‰ ¬«yy#t$rd}YŒ7wxYw)Nrwsmercurial.templates)ÚsectionsÚremapÚinclude)rmrrÚnormpathrpÚisfilerryr ÚosseprÚ open_resourcerrlÚreadrl) Úrelr€rÚ subresourceÚabsÚdirrDÚbaseÚconfr�s €€€rIr�z_readmapfile..include]sø€Øˆ Ù Ü—'‘'×"Ñ"¤2§7¡7§<¡<°°cÓ#:Ó;ˆCÜ�w‰w�~‰~˜cÔ"Ü"Ÿn™n¨S°%Ó8� ÙÜ�~‰~ SÑ(Ø�ð'Ü".×"<Ñ"<Ø.°ó#‘Kô "“m�ÙÜŸ'™'×*Ñ*¬2¯7©7¯<©<¸¸SÓ+AÓB�CÜ—w‘w—~‘~ cÔ*Ü&*§n¡n°S¸%Ó&@˜ Ù Ø×#Ñ#Ó%ˆDØ �J‰JØØØ!ØØð õ ð øô)ò'Ø"&’Kð'úsÂEÅ EÅErUó templates)r€r�s__base__rrsmaps missing valuersunmatched quotess templatealias)r Ú iswindowsror„rprmrrÚdirnamerr†rlrQr‚rxrlrƒr|Ú _readmapfiler×r r7rÚsourcerÚextend)Úfpr{Ú name_pathsrDÚcacheÚtmaprrTrrrŠÚp2Úp3rer‹rŒr�s @@@rIr�r�QsPú€ä×Òð —]‘]¤8§>¡>Ó2ˆ Ø—)‘)˜JÓ'ˆÜ �7‰7�?‰?˜7Ó #€DÜ �=‰=‹?€Döð> �7‰7‹9€D؇J�Jˆw˜ S¨,Ð$7À€JÔIà €EØ €DØ€Gà �(‰(�< Ó -€CÚ ˆs�1‰v˜VÒ#ä�w‰w×Ѥ§¡§ ¡ ¨T°3Ó 7Ó8ˆô�w‰w�~‰~˜dÔ#Ü“-ˆC؈ܗW‘W×%Ñ%¤b§g¡g§l¡l°3¸Ó&<Ó=�Ü—7‘7—>‘> "Ô%Ø‘D䟙×)Ñ)¬"¯'©'¯,©,°r¸6Ó*BÓC�BÜ—w‘w—~‘~ bÔ)Ø!˜ä ˜4Ó ˆÜ+¨B°Ó5шˆt�Wà—J‘J˜|Ö,‰ˆˆSÙÜ×"Ñ"ÜÐ"Ó# T§[¡[°¸sÓ%Cóð ð ˆq‰6�VÑ Ø�1‰v˜˜R™Ò Ü×&Ñ&ÜÐ)Ó*¨D¯K©K¸ ÀcÓ,Jóðô' sÓ+ˆE�#ŠJØ �KÓ ÜŸ™Ÿ ™  T¨3Ó/ˆD�ŠIð-ð ‡N�N�4—:‘:Ð.Ó/Ô0Ø �$˜Ð ÐrUcó4—eZdZdZd„Zd„Zd„Zd„Zd„Zd„Z y) rCz2Load template fragments optionally from a map filecóx—|€i}|j«|_i|_tj |«|_yr])Úcopyr•Ú_maprr¿Ú _aliasmap)rr•rs rIrGzloader.__init__«s2€Ø ˆ=؈EØ—Z‘Z“\ˆŒ ؈Œ Ü$×-Ñ-¨gÓ6ˆ�rUcó>—||jvxs||jvSr])r•rœ©rres rIÚ __contains__zloader.__contains__²s€Ø�d—j‘jÐ Ò4 C¨4¯9©9Ð$4Ð4rUcó4—||jvr9 t|j|«\}}|j«|j|<|j|j|«S#t$r3}t j td«|jdz«‚d}~wt$rn}td«|j|tj|jd«fz}t|jdtj|««‚d}~wwxYw)ú?Get parsed tree for the given template name. Use a local cache.s"%s" not in template maprNstemplate file %s: %sr)r•Ú open_templaterœr†ÚKeyErrorrrarr¸ÚIOErrorrÚ forcebytestrrÚ strfromlocalr)rr˜r{r“rsÚreasons rIÚloadz loader.loadµsö€à �D—J‘JÑ ð KÜ+¨D¯I©I°a©LÓ9‘ �˜Ø "§¡£ �— ‘ ˜1‘ ð�{‰{˜4Ÿ:™: a™=Ó)Ð)øôò Ü"×3Ñ3ÜÐ1Ó2°T·Y±Y¸q±\ÑAóðûôò KÜÐ2Ó3Ø—I‘I˜a‘LÜ×+Ñ+¨D¯I©I°a©LÓ9ð7ñ�ô˜dŸi™i¨™l¬H×,AÑ,AÀ&Ó,IÓJÐJûð  Kús$�8A&Á& DÁ/.B DÂ)A)DÄDcót—t|«}|jr tj|j|«}|Sr])rlr�rrr_s rIrz loader._parseÇs-€Ü �$‹KˆØ �>Š>Ü×"Ñ" 4§>¡>°1Ó5ˆA؈rUcó —|sy|d}|dk(r_|d}||dvry|dj|«||jvs||jvr!|j|j |«|«y|dvry|dk(r6|djt |d««|j|d|«y|dk(r6|djt |d««|j|d|«y|ddD]}|j||«Œy)Nrr+r>r,r*rr(r)Úaddr•rœÚ_findsymbolsusedr©r›)rr‡ÚsymsrˆrCr‚s rIr­zloader._findsymbolsusedÍs€ÙØ Ø �!‰WˆØ �Š?Ø�Q‘ˆAØ�D˜‘G‰|ØØ �‰G�K‰K˜ŒNØ�D—J‘J‰ ! t§y¡y¡.à×%Ñ% d§i¡i°£l°DÔ9Ø Ø Ð(Ñ (Ø à �Š:Ø �‰G�K‰Kœ  $ q¡'Ó*Ô +Ø × !Ñ ! $ q¡'¨4Ô 0Ø Ø �Š=Ø �‰G�K‰Kœ  $ q¡'Ó*Ô +Ø × !Ñ ! $ q¡'¨4Ô 0Ø Ø�a�b“ˆAØ × !Ñ ! ! TÕ *ñrUcóp—t«t«f}|j|j|«|«|S©z›Look up (keywords, filters/functions) referenced from the name template 't' This may load additional templates from the map file. )r5r­r©)rr˜r®s rIÚ symbolsusedzloader.symbolsusedès.€ô “”s“uˆ~ˆØ ×јdŸi™i¨›l¨DÔ1؈ rUN) r r r r rGr r©rr­r±rbrUrIrCrC¨s#„Ù<ò7ò5ò*ò$ò +ó6rUrCcóœ—eZdZ dd„Ze dd„«Zd„Zed„«Zed„«Z ed„«Z d„Z d „Z d „Z d „Zd „Zd „Zy)Ú templaterNcóô—tjj«}|r|j|«t ||«|_t |j j|||«|_||c|_ |_ y)agCreate template engine optionally with preloaded template fragments - ``filters``: a dict of functions to transform a value into another. - ``defaults``: a dict of symbol values/functions; may be overridden by a ``mapping`` dict. - ``resources``: a resourcemapper object to look up internal data (e.g. cache), inaccessible from user template. - ``cache``: a dict of preloaded template fragments. - ``aliases``: a list of alias (name, replacement) pairs. self.cache may be updated later to register additional template fragments. N) r rDr›ràrCr=r;r©Ú_procÚ _minchunkÚ _maxchunk) rrDrErFr•rÚminchunkÚmaxchunkÚ allfilterss rIrGztemplater.__init__ôsc€ô.%×,Ñ,×1Ñ1Ó3ˆ Ù Ø × Ñ ˜gÔ &ܘe WÓ-ˆŒ ܘDŸL™L×-Ñ-¨z¸8ÀYÓOˆŒ Ø)1°8Ð&ˆŒ˜�rUc ó—|||||g||«} |s t|«}t||«\}} } | jjj |«| | j_t j| «| j_| S)z,Create templater from the specified map file) r|r�r=r•ràrœrr¿r�) Úclsr{r“rDrErFr•r¸r¹r˜r–rs rIÚ frommapfileztemplater.frommapfilesw€ñ �˜ 9¨e°R¸À8Ó LˆÙܘwÓ'ˆBÜ+¨B°Ó8шˆt�WØ � ‰ �‰×јuÔ%؈� ‰ ŒÜ)×2Ñ2°7Ó;ˆ� ‰ ÔØˆrUcó—||jvSr])r=rŸs rIr ztemplater.__contains__(s€Ø�d—l‘lÐ"Ð"rUcó.—|jjSr])r=r•r#s rIr•ztemplater.cache+s€à�|‰|×!Ñ!Ð!rUcó.—|jjSr])rµr°r#s rIr°ztemplater._filters0s€à�z‰z×"Ñ"Ð"rUcó.—|jjSr])rµr?r#s rIrEztemplater.defaults4s€à�z‰z×#Ñ#Ð#rUcó8—|jj|«S)r¢)r=r©rbs rIr©ztemplater.load8s€à�|‰|× Ñ  Ó#Ð#rUcó$—|jd«S)z¢Look up (keywords, filters/functions) referenced from the default unnamed template This may load additional templates from the map file. rU)r±r#s rIÚsymbolsuseddefaultztemplater.symbolsuseddefault<s€ð ×Ñ Ó$Ð$rUcó8—|jj|«Sr°)r=r±rbs rIr±ztemplater.symbolsusedDs€ð �|‰|×'Ñ'¨Ó*Ð*rUcó&—|jd|«S)z?Render the default unnamed template and return result as stringrU)Úrenderrs rIÚ renderdefaultztemplater.renderdefaultLs€à�{‰{˜3 Ó(Ð(rUcóD—dj|j||««S)z?Render the specified named template and return result as stringrU)rpÚgenerate)rr˜r¦s rIrÇztemplater.renderPs€à�x‰x˜Ÿ ™  a¨Ó1Ó2Ð2rUcó®—|jj||«}|jr,tj||j|j ¬«}|S)zVReturn a generator that renders the specified named template and yields chunks)rjÚmax)rµrfr¶rÚincreasingchunksr·)rr˜r¦Ústreams rIrÊztemplater.generateTsG€ð—‘×#Ñ# A wÓ/ˆØ �>Š>Ü×*Ñ*ؘDŸN™N°·±ôˆFðˆ rU)NNNNrbéé)NNNNNrÏrÐ)r r r rGÚ classmethodr½r Úpropertyr•r°rEr©rÄr±rÈrÇrÊrbrUrIr³r³ós¨„ðØØØØØØó<ð<ð ØØØØØØòóðò*#ðñ"óð"ðñ#óð#ðñ$óð$ò$ò%ò+ò)ò3órUr³cóÞ—tjjtjjtj d««}tjj |«r|SdS)z6return the directory used for template files, or None.r�N)rmrrr‚rprÚdatapathÚisdir)rrs rIrlrl_sE€ä �7‰7× Ñ œBŸG™GŸL™L¬×)>Ñ)>À ÓMÓ N€DÜ—7‘7—=‘= Ô&ˆ4Ð0¨DÐ0rUcó —tjj|«stjj|«r|t |d¬«fS|€ t «}|�/tjj ||«}|t |d¬«fStjr0|jtj«}dj |«}|jd«}dj ddg|ddz«}|tj||d«fS) a returns a file-like object for the given template, and its full path If the name is a relative path and we're in a frozen binary, the template will be read from the mercurial.templates package instead. The returned path will then be the relative path. Úrb)ÚmodeNrrs mercurialr�r) rmrrrƒÚisabsÚopenrlrpr rŽror„rr…)ÚnameÚ templatepathr·r”Ú name_partsÚ package_names rIr£r£esê€ô ‡w�w‡~�~�dÔœrŸw™wŸ}™}¨TÔ2Ø”T˜$ TÔ*Ð*Ð*ðÐÜ"“}ˆ ØÐÜ �G‰G�L‰L˜ tÓ ,ˆØ”$�q˜tÔ$Ð$Ð$ô×Òð —Z‘Z¤§¡Ó/ˆ Ø�y‰y˜Ó$ˆØ—‘˜DÓ!€JØ—9‘9˜l¨LÐ9¸JÀsȸOÑKÓL€Là Ü×"Ñ" <°¸B±Ó@ð ðrUcóF— t||«S#ttf$rYywxYw)N)NN)r£ÚEnvironmentErrorÚ ImportError)rÛrÜs rIÚtry_open_templaterâˆs+€ðܘT <Ó0Ð0øÜ œkÐ *òÙðús ‚ Ž Ÿ r])rU)F)rUF)@r r-rmÚi18nrr rrÚrrr r r r rrÚutilsrrrirJr6rYrMrmr€rlrŽrŒr‘r™r›ržr£r§r­r¹r¿rÃrÇrÍrÐr³rêrírÅr›r Úbasealiasrulesrrrrr2r;rtr|r�rCr³rlr£rârbrUrIÚrçsôðñ:óz Û å÷÷ ÷ õ ÷ð àÐ Cð ð Ð ,ð ð Ð ,ð  ð  Ð ,ð  ð  Ð *ð  ð Ð *ð ð Ð *ð ð Ð 5ð ð Ð 1ð ð Ð -ð ð Ð %ð ðÐ1ð ðÐ/ð ðÐ/ð ð Ð3ð! ð" Ð 'ð# €ó*hóVGó4Gó:1òh Nò òF6òò>%òIò'òGò ò >òMò-ò <ò/ò 2ò )ò =ò <ò+ò\MòðØÑ<ðà Ñ:ððÑ:ðð�ð ð  Ñ;ð ð  ˆ+ð ð ˆ+ðð ˆ(ðð ˆYððÐ"ðð ˆYðð Ñ @ðð Ñ @ððˆ{ðð Ñ @ðð  Ñ Að!€ ð( × Ñ Ó €Ø! )Ñ,€ˆ Ñô )�&×'Ñ'ô )ò .ò÷&ñ&ô. ˜ô ÷NNñNNòb )òòT ÷nHñH÷ViñiòX1ó ôFrU