Ë Š? RûÛ·ãó—ddlZddlZddlZddlmZddlmZmZmZm Z m Z m Z m Z m Z mZddlmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZddlm Z m!Z"m#Z#m$Z$ddl%m&Z&d „Z'd „Z(d „Z)d „Z*dd „Z+d„Z, dd„Z-Gd„d«Z.y)éNé)Ú_é) Ú ErrorResponseÚHTTP_SERVER_ERRORÚ cspvaluesÚ get_contactÚ get_mtimeÚismemberÚ paritygenÚ staticfileÚ statusmessage)Ú configitemsÚencodingÚerrorÚ extensionsÚhgÚpathutilÚ profilingÚpycompatÚrcutilÚ registrarÚscmutilÚ templaterÚ templateutilÚuiÚutil)Ú hgweb_modÚrequestÚwebutilÚwsgicgi)Údateutilcó€—|D��cgc]+\}}tj|«jd«|f‘Œ-c}}Scc}}w)Nó/)rÚpconvertÚstrip)ÚitemsÚnameÚpaths ú@usr/lib/python3.12/site-packages/mercurial/hgweb/hgwebdir_mod.pyÚ cleannamesr+7s7€ÙFKÔ LÁe¹ ¸¸dŒT�]‰]˜4Ó × &Ñ & tÓ ,¨dÒ 3ÀeÒ LÐLùÓ Ls†0:có–—g}t|«D]–\}}tjj|«\}} dddœ|}tjj tj|««}tj|d|¬«}|jt|||««Œ˜|S#t$r|j ||f«YŒ¹wxYw)NFT)ó*s**)Ú followsymÚrecurse) r+Úosr)ÚsplitÚKeyErrorÚappendÚnormpathrÚabspathrÚ walkreposÚextendÚurlrepos)ÚpathsÚreposÚprefixÚrootÚrootheadÚroottailr/s r*Ú findreposr?;s¸€Ø €EÜ" 5Ö)‰ ˆ�ÜŸW™WŸ]™]¨4Ó0ш�(ð  Ø"¨4Ñ0°Ñ:ˆGô—7‘7×#Ñ#¤D§L¡L°Ó$:Ó;ˆÜ×!Ñ! (°dÀGÔLˆØ � ‰ ”X˜f h°Ó6Õ7ð*ð €Løô ò Ø �L‰L˜& $˜Ô (Ù ð ús·B)Â)CÃCc#óêK—|D]j}tjj|«}|dztj|t |«d«j d«zjd«|f–—Œly­w)a’yield url paths and filesystem paths from a list of repo paths >>> conv = lambda seq: [(v, util.pconvert(p)) for v,p in seq] >>> conv(urlrepos(b'hg', b'/opt', [b'/opt/r', b'/opt/r/r', b'/opt'])) [('hg/r', '/opt/r'), ('hg/r/r', '/opt/r/r'), ('hg', '/opt')] >>> conv(urlrepos(b'', b'/opt', [b'/opt/r', b'/opt/r/r', b'/opt'])) [('r', '/opt/r'), ('r/r', '/opt/r/r'), ('', '/opt')] r$N)r0r)r4rr%ÚlenÚlstripr&)r;r=r9r)s r*r8r8Nsfèø€óˆÜ�w‰w×Ñ Ó%ˆà �T‰MœDŸM™M¨$¬s°8«}¨Ð*?Ó@×GÑGÈÓMÑ Mß ‰%�‹+�tðó ñùs‚A1A3có°—|j}|jddd¬«}|r|r t|||«ry|jddd¬«}|r t|||«ryy)aðCheck allow_read and deny_read config options of a repo's ui object to determine user permissions. By default, with neither option set (or both empty), allow all users to read the repo. There are two ways a user can be denied read access: (1) deny_read is not empty, and the user is unauthenticated or deny_read contains user (or *), and (2) allow_read is not empty and the user is not in allow_read. Return True if user is allowed to read the repo, else return False.ówebs deny_readT©Ú untrustedFs allow_read)Ú remoteuserÚ configlistr )rÚreqÚuserÚ deny_readÚ allow_reads r*Ú readallowedrM^s\€ð �>‰>€Dà— ‘ ˜f l¸d� ÓC€IÙ™$¤(¨2¨t°YÔ"?Øà—‘˜v }À�ÓE€Já œ " d¨JÔ7Øà óc#ó‡K—|jdd«}|jdd«}t«}t«}|D�]õ\}} |j|«sŒ|t|«d}d} d|vri|sŒ0|j d«} | d} |snM| |vrŒN| |vrnCd} | }dj | dd«} | dt| « dz } t j|| «d} |jjd«|jd«|jd«g}ddj d „|D««zdz}| r} t| «tj«df}d d |dz||d d ||d|dz t#j$g«dt#j&gd ¬ «d œ }|j)|«|–—�Œo|j+«Št-j.«r1 ‰j1t2j4j | dd««t<j>fˆfd„ }‰jddd¬«r�ŒïtA‰|«s�Œý t j|| «} t|jB«tj«df}tE|«}|dd«}|j)|«|dd|«}‰jGddd¬«}|xsd|jI«xsd||||xsd|jI«xsd||d|dz tKjL‰d|«dt#j&|d ¬ «d œ }|–—�Œøy#ttjf$rY�Œ€wxYw#t $rY�Œ&wxYw#t6$r*}‰j9t;d«| |fz«Yd}~�ŒXd}~wwxYw#t$r!‰j9t;d«| z«Y�Œ‰tj$r!‰j9t;d«| z«Y�Œ»wxYw#t $rY�ŒËwxYw­w)NrDsdescendscollapseFr$rTrc3ó&K—|] }|sŒ|–—Œ y­w©N©)Ú.0Úps r*Ú z"rawindexentries..£sèø€Ð5©% Q²1œq©%ùs‚ŠrNslabel)r() ócontacts contact_sortónames name_sortóurló descriptionsdescription_sortó lastchangeslastchange_sortsarchivess isdirectoryólabelss.hgshgrcserror reading %s/.hg/hgrc: %s có.•—‰j|||d¬«S)NTrE)Úconfig)Úsectionr(ÚdefaultÚus €r*Úgetzrawindexentries..getÊsø€Ø—8‘8˜G T¨7¸d�8ÓCÐ CrNshiddenrEs!error accessing repository at %s rYrWr[sunknownstip)'Ú configboolÚsetÚ startswithrAr1ÚjoinrÚ repositoryÚIOErrorrÚ RepoErrorÚapppathr&r r"ÚmakedateÚOSErrorrÚ mappinglistÚ hybridlistÚaddÚcopyrÚ use_repo_hgrcÚ readconfigr0r)Ú ExceptionÚwarnrÚuimodÚ_unsetrMÚspathr rHÚupperr Ú archivelist)rr:rIÚsubdirÚdescendÚcollapseÚ seenreposÚseendirsr(r)Ú directoryÚ namepartsÚrootnameÚ discardedÚpartsÚurlÚdÚrowÚeraÚrÚcontactÚ descriptionÚlabelsr`s @r*Úrawindexentriesr‹us øèø€Ø�m‰m˜F JÓ/€GØ�}‰}˜V [Ó1€HÜ“€IÜ‹u€H܉ ˆˆdà�‰˜vÔ&Ø Ø”C˜“K�MÐ"ˆØˆ à �4‰<ÙØàŸ ™  4Ó(ˆIØ  ‘|ˆHáØØ˜XÑ%ØØ˜YÑ&Øà � Ø�ð!ŸI™I i°° mÓ4� ðÐ1œs 9›~˜o°Ñ1Ð2�ðÜ—M‘M " dÔ+Ø %�Ið �K‰K× Ñ ˜dÓ #Ø �L‰L˜Ó Ø �J‰J�tÓ ð ˆð �T—Y‘YÑ5©%Ó5Ó5Ñ5¸Ñ<ˆñ ð ܘt“_¤h×&7Ñ&7Ó&9¸!Ñ&<Ð=�ð Ø!$Ø ™Ø"ØØ #Ø%(Ø Ø$% a¡D¨1¨Q©4¡KÜ)×5Ñ5°bÓ9Ø $Ü'×2Ñ2°2¸HÔEñ ˆCð �L‰L˜Ô ØŠIÙ à �G‰G‹IˆÜ × Ñ Ô !ð Ø— ‘ œRŸW™WŸ\™\¨$°¸Ó@ÔAô (-§|¡|õ Dð �<‰<˜  °Tˆ<Ô :Ù ä˜1˜cÔ"Ù ð Ü— ‘ ˜b $Ó'ˆAð ܘ1Ÿ7™7Ó#¤X×%6Ñ%6Ó%8¸Ñ%;Ð<ˆAô˜cÓ"ˆÙ˜& .Ó1ˆ Ø� ‰ �dÔÙ�6˜7 DÓ)ˆØ—‘˜f i¸4�Ó@ˆàÒ- :Ø$Ÿ]™]›_Ò:° ØØØØ'Ò5¨:Ø!,×!2Ñ!2Ó!4Ò!B¸ ØØ ! !¡ q¨¡t¡ Ü ×,Ñ,¨Q°¸Ó<Ø Ü#×.Ñ.¨v¸HÔEñ  ˆðŒ ñwøôB ¤§¡Ð1òÚðûôò Úð ûô8ò Ø—‘”qÐ;Ó<ÀÀa¸yÑHÔIÝûð ûô ò Ø �F‰F”1Ð:Ó;¸dÑBÔ CÚ Ü�‰ò Ø �F‰F”1Ð:Ó;¸dÑBÔ CÚ ð ûô ò Ú ð üsɃB8P Â<L8ÃAP Ä1"MÅA>P Ç0M(È9P È<NÉ,O=É?B9P Ì8MÍP ÍMÍP Í M%Í!P Í$M%Í%P Í( NÍ1NÎP ÎNÎP Î&O:ÏP Ï/O:Ï6P Ï9O:Ï:P Ï= P ÐP Ð P Ð P c#óº‡ K—t||||¬«}d} |r| ||fk7rd|zŠ t|ˆ fd„|¬«}t|t|««D]\} } | | d<| –—Œy­w)N)ry©NFs%s_sortcó•—|‰SrQrR)ÚxÚsortkeys €r*Úz"_indexentriesgen..s ø€¨!¨Gª*rN)ÚkeyÚreversesparity)r‹ÚsortedÚzipr ) Úcontextrr:rIÚ stripecountÚ sortcolumnÚ descendingryÚrowsÚ sortdefaultr…Úparityr�s @r*Ú_indexentriesgenr�øsnøèø€ô ˜2˜u c°&Ô 9€Dà€Ká�k j°*Ð%=Ò=ؘzÑ)ˆÜ�dÓ 4¸jÔIˆä˜4¤¨;Ó!7Ö8‰ ˆˆV؈ˆI‰Ø‹ ñ9ùsƒAAcóJ—|||||||f}tjt|¬«S)N)Úargs)rÚmappinggeneratorr�)rr:rIr—r˜r™ryrŸs r*Ú indexentriesr¡s,€ð ��s˜K¨°ZÀÐ H€DÜ × (Ñ (Ô)9ÀÔ EÐErNcóD—eZdZdZd d„Zd„Zd„Zd„Zd„Zd„Z d d „Z d „Z y) ÚhgwebdirzÈHTTP server for multiple repositories. Given a configuration, different repositories will be served depending on the request path. Instances are typically used as WSGI applications. Ncóú—||_||_d|_d|_d|_|j «d|_|s?tj|j«tj|j«yy)Nr) ÚconfÚbaseuirÚ lastrefreshÚmotdÚrefreshÚrequests_countrÚloadallÚ populateui)Úselfr¥r¦s r*Ú__init__zhgwebdir.__init__sc€ØˆŒ ؈Œ ؈ŒØˆÔ؈Œ Ø � ‰ ŒØˆÔÙä × Ñ ˜tŸw™wÔ 'Ü × !Ñ ! $§'¡'Õ *ðrNcóΗ|jr|jjdd«}n"tjdd}|j}|dkDr%|j |zt j «kDry|jr|jj«}nZtjj«}|jdddd«|jddd d«|jd d d d «t|jttt f«s¼d di}t"j$j'|j«s+t)j*t-d«|jz«‚|j/|j|d¬«g}|jd«D]/\}}|j1d|«D]}|j3||f«ŒŒ1nat|jtt f«r |j}n4t|jt«r|jj5«}t7j8|«t;«} |jd«D]«\} } t=j>| «} tAjB| d¬«D]w}t"j$jE|«} t=j>| «}|jG| «r|tI| «d}| j3|jKd«| f«ŒyŒ­| |_&||_|jjdd«|_'d|_(|jjSdd«tT_*|jjSdd«|_+|jjSddd¬«|_,|jjSdd«|_-|jZrt]|jZ«|_-|jjSdd«} | jGd«r| dd} | j_d«r| dd} | |_0t j «|_y) NrDsrefreshintervalrsuisreport_untrustedsoffshgwebdirsnonttystruesprogresssdisableshgwebspathss hgweb-pathssconfig file %s not found!T)ÚremapÚtrusts collections)r.r$s experimentals web.full-garbage-collection-rateóencodingóstyles templatesFrEsstripessprefixréÿÿÿÿ)1rÚ configintrÚ coreitemsr_r§Útimer¦rortÚloadÚ setconfigÚ isinstancer¥ÚdictÚlistÚtupler0r)ÚexistsrÚAbortrrqrHr3r'rr¬r?rr%rr6r4rdrArBr:Úgc_full_collect_rateÚgc_full_collections_doner]rÚstyleÚ templatepathr—ÚintÚendswithr;) r­ÚrefreshintervalÚitemr`Úmapr9r(Úignoredr)r:r;r<Úrepos r*r©zhgwebdir.refresh%si€Ø �7Š7Ø"Ÿg™g×/Ñ/°Ð8JÓK‰Oä×(Ñ(¨Ñ0Ð1CÑDˆDØ"Ÿl™lˆOð ˜aÒ Ø× Ñ  ?Ñ2´T·Y±Y³[Ò@à à �;Š;Ø— ‘ × Ñ Ó"‰Aä—‘— ‘ “ˆAØ �K‰K˜Ð2°F¸KÔ HØ �K‰K˜˜y¨'°;Ô ?ð �K‰K˜  Z°¸(Ô Cä˜$Ÿ)™)¤d¬D´%Ð%8Ô9ؘ^Ð,ˆCÜ—7‘7—>‘> $§)¡)Ô,Ü—k‘k¤!Ð$@Ó"AÀDÇIÁIÑ"MÓNÐNØ �L‰L˜Ÿ™¨#°TˆLÔ :؈EØ!"§¡¨~Ö!>‘ ��gØŸL™L¨¸Ö>�DØ—L‘L $¨ Õ.ñ?ñ"?ô˜Ÿ ™ ¤D¬% =Ô 1Ø—I‘I‰EÜ ˜Ÿ ™ ¤4Ô (Ø—I‘I—O‘OÓ%ˆEÜ×јaÔ ä˜%Ó ˆØŸM™M¨.Ö9‰LˆF�DÜ—]‘] 6Ó*ˆFÜ×)Ñ)¨$¸$×?�Ü—w‘w×'Ñ'¨Ó-�Ü—}‘} TÓ*�Ø—?‘? 6Ô*ؤ F£   Ð.�DØ— ‘ ˜dŸk™k¨$Ó/°Ð6Õ7ñ @ð:ðˆŒ ØˆŒØ$(§G¡G×$5Ñ$5Ø Ð@ó% ˆÔ!ð)*ˆÔ%Ø ŸG™GŸN™N¨6°;Ó?ŒÔØ—W‘W—^‘^ F¨HÓ5ˆŒ Ø ŸG™GŸN™NØ �L¨Eð+ó ˆÔð Ÿ7™7Ÿ>™>¨&°*Ó=ˆÔØ × Ò Ü" 4×#3Ñ#3Ó4ˆDÔ Ø—‘—‘ ¨ Ó2ˆØ × Ñ ˜TÔ "ؘA˜B�ZˆFØ �?‰?˜4Ô Ø˜C˜R�[ˆF؈Œ ÜŸ9™9›;ˆÕrNcó¢—tjjdd«jd«s t d«‚t j |«y)NsGATEWAY_INTERFACErNsCGI/1.sJThis function is only intended to be called while running as a CGI script.)rÚenvironrardÚ RuntimeErrorr!Úlaunch)r­s r*Úrunz hgwebdir.runlsI€Ü×Ñ×#Ñ#Ð$8¸#Ó>×IÑIØ ô ôð9óð ô �‰�tÕrNcó¸—|jjdd«}tj||¬«}tj||«}|j ||«S)NrDóbaseurl)Ú altbaseurl)rr]Ú requestmodÚparserequestfromenvÚ wsgiresponseÚrun_wsgi)r­ÚenvÚrespondÚbaseurlrIÚress r*Ú__call__zhgwebdir.__call__vsK€Ø—'‘'—.‘. ¨Ó4ˆÜ×,Ñ,¨S¸WÔEˆÜ×%Ñ% c¨7Ó3ˆà�}‰}˜S #Ó&Ð&rNc#óÖK—|jjdd«}tj|j|¬«5 |j ||«D]}|–—Œ |j }|xj dz c_|dkDr<|j |zdk(r*tj«|xjdz c_ ntjd¬« ddd«y#|j }|xj dz c_|dkDr<|j |zdk(r*tj«|xjdz c_ wtjd¬«wxYw#1swYyxYw­w)Ns profilingsenabled)Úenabledrr)Ú generation) rrbrÚprofileÚ_runwsgirÀrªÚgcÚcollectrÁ)r­rIrÚrßr‡Úrates r*rÖzhgwebdir.run_wsgi}sèø€Ø—'‘'×$Ñ$ \°:Ó>ˆÜ × Ñ ˜tŸw™w°Ö 8ð -ØŸ™ s¨CÖ0�AØ“Gñ1ð×0Ñ0�ð ×#Ò# qÑ(Õ#ؘ!’8 × 3Ñ 3°dÑ :¸aÒ ?Ü—J‘J”LØ×1Ò1°QÑ6Ö1ä—J‘J¨!Ö,÷79Ð 8øð ×0Ñ0�ð ×#Ò# qÑ(Õ#ؘ!’8 × 3Ñ 3°dÑ :¸aÒ ?Ü—J‘J”LØ×1Ò1°QÑ6Ö1ä—J‘J¨!Ö,ú÷79Ð 8üs7‚>E)ÁEÁC ÁA9Eà E)à A:EÅEÅE&Å"E)c ó@‡‡— |j«t|j«\}}|r||jd<|jj d«Š|j ||«}|jddtji«}d|_ ||jd<‰jd«sd|jvrm‰jd«r‰d d}n|jd}|jjd dd ¬ «}t|j|||«|j«~St!|j"«} ‰r‰d k(r‰| vr|j%|||«~S‰j'd«r<‰| vr8‰dt)d « Št+ˆfd„| D««r|j%|||‰«~Sˆfd„} | «D]å} | j-| «} | sŒ|j.j1«D� �cic]\} }| j3d«|“Œ}} }t5j6|| |jjd d«|j8¬«} t;j<|jj?«| «}tAjB|«jE||«c~S‰dzŠ| D�cgc]}|j‰«sŒ|‘Œc}r|j%|||‰«~Sd|_ |jW|jYdd‰i««|j«~Scc}} w#tF$r4}tjH|jJ«}tMtN|«‚d}~wtPjR$r}tMtNtU|««‚d}~wwxYwcc}w#tL$rz}t[|j\t_j`|««|_ |jWjYdd|jbxsdi««|j«cYd}~~Sd}~wwxYw#~wxYw)NsContent-Security-Policyr$smimetyper²s200 Script output followss Content-Typesstatic/sstaticérDFrEóindexs/indexc3ó@•K—|]}|j‰«–—Œy­wrQ)rd)rSr‡rys €r*rUz$hgwebdir._runwsgi..Ásøèø€Ð;±U°�q—|‘| F×+±Uùsƒc3óR•K—‰–—tj‰«D]}|–—Œy­wrQ)rÚfinddirs)rTÚvirtuals €r*Ú _virtualdirsz'hgwebdir._runwsgi.._virtualdirsÄs&øèø€à’ Ü!×*Ñ*¨7Ö3�AØ“Gñ4ùsƒ$'Úlatin1rÑ)ÚreponamerÒÚbodyfhs 404 Not FoundsnotfoundsreposerrorrN)2r©rrÚheadersÚ dispatchpathr&rÚrenderrÚstatusrdÚqsparamsr]r rÃÚ sendresponser»r:Ú makeindexrÅrAÚanyraÚrawenvr'ÚdecoderÓrÔrîrrfrorÚhgwebrÖrgÚ strtolocalÚstrerrorrrrrhÚbytesÚ setbodygenÚgeneraterÚcoderÚbytestrÚmessage)r­rIrÚÚcspÚnonceÚtmplÚctypeÚfnameÚstaticr:rëÚ virtualrepoÚrealÚkÚvÚuenvrÊÚinstÚmsgr‡r†ryrês @@r*ràzhgwebdir._runwsgiœsµù€ðX Ø �L‰LŒNä" 4§7¡7Ó+‰JˆC�ÙØ:=�— ‘ Ð6Ñ7à×&Ñ&×,Ñ,¨TÓ2ˆGØ—>‘> # uÓ-ˆDØ—K‘K  ¨k¼8×;LÑ;LÐ-MÓNˆEð6ˆCŒJØ+0ˆC�K‰K˜Ñ (ð×!Ñ! *Ô-°¸c¿l¹lÑ1JØ×%Ñ% jÔ1Ø# A B˜K‘EàŸL™L¨Ñ3�EØŸ™Ÿ™¨° ÀU˜ÓK�ܘ4×,Ñ,¨f°e¸SÔAØ×'Ñ'Ó)ñBô{˜Ÿ™Ó$ˆEá˜w¨(Ò2¸ÀuÑ8LØ—~‘~ c¨3°Ó5ñtðm×Ñ  Ô*¨w¸eÑ/CØ Ð!1¤C¨£M >Ð2�ÜÓ;±UÓ;Ô;ØŸ>™>¨#¨s°D¸&ÓAñfôc ñ ,ž~� Ø—y‘y Ó-�Úð;>¿*¹*×:JÑ:JÔ:LôÙ:L±$°!°Q˜Ÿ™ Ó*¨AÑ-Ð:Lðñô%×8Ñ8ØØ!,Ø#'§7¡7§>¡>°&¸*Ó#Eð #Ÿz™zô �CðLä!Ÿ}™}¨T¯W©W¯\©\«^¸TÓB˜Ü(Ÿ™¨tÓ4×=Ñ=¸cÀ3ÓGÑGñ0ðW .ð6˜t‘^ˆFÙ Ó9™5�a A§L¡L°Õ$8’˜5Ò9Ø—~‘~ c¨3°°fÓ=ñð*ˆCŒJØ �N‰N˜4Ÿ=™=¨°wÀÐ6HÓIÔ JØ×#Ñ#Ó%ñùóMøô#òDÜ&×1Ñ1°$·-±-Ó@˜Ü+Ô,=¸sÓCÐCûÜ Ÿ?™?òLÜ+Ô,=¼uÀT»{ÓKÐKûðLüò :øôò &Ü& q§v¡v¬x×/?Ñ/?ÀÓ/BÓCˆCŒJØ �N‰NØ— ‘ ˜h¨°1·9±9Ò3CÀÐ(DÓEô ð×#Ñ#Ó%Ô %áûð &ûñús¬„D(NÄ.2NÅ"A NÆ/"NÇNÇ/LÈ ANÉ AL ÊNÊ" NÊ,NËNËNË9NÌNÌ N Ì)/MÍN Í.NÎN Î NÎ PÎA.PÐ PÐ PÐPÐPÐPc ó\—|j«gd¢}d\}}d|jvr-|jd}|jd«}|r|dd}||vrd}|D�cgc]}d|zd| xr||k(xrdxsd|fzf‘Œ } }|j«t|j|j ||j |||¬ «} | |tjd |z|j«||d œ} | j| «|j|jd | ««|j«Scc}w) N)rWrYrVrZr�ssortó-rrNssort_%ss%s%s)r˜r™ryr$)sentriesssubdirspathdefs sortcolumns descendingræ)r©rórdr¡rr:r—rÚmakebreadcrumbr;Úupdaterýrþrô) r­rIrÚrryÚsortabler˜r™ÚcolumnÚsortÚentriesÚmappings r*rõzhgwebdir.makeindex÷sW€Ø � ‰ ŒÚGˆØ!,ш �JØ �c—l‘lÑ "ØŸ™ gÑ.ˆJØ#×.Ñ.¨tÓ4ˆJÙØ'¨¨˜^� Ø Ñ)Ø � ñ#ó  ñ#�ð˜VÑ#Øà#�^Ò<¨°*Ñ(<ÒFÀ$ÒMÈ#Øðñò ð#ð ð  ð � ‰ ŒäØ �G‰GØ �J‰JØ Ø × Ñ Ø!Ø!Øô ˆð ØÜ!×0Ñ0°¸±ÀÇ Á ÓLØ%Ø%ñ  ˆð �‰�tÔØ �‰�t—}‘} X¨wÓ7Ô8Ø×ÑÓ!Ð!ùòC  sÁ#D)c ó,‡‡—ˆfd„Ši}tj|‰‰j«\}\}}}||dk(r||d<tj|d«}‰dd«} ‰dd«} ‰dd«xs|j j d «d z} | jd «s| d z } tj|j d z| | | |||d œ} tj| «} | d d ¬«ˆˆfd„«}tjj||| ¬«S)Ncó`•—|jdd«‰jj|i|¤ŽS)NrFT)Ú setdefaultrr])rŸÚkwargsr­s €r*r]z"hgwebdir.templater..config's-ø€Ø × Ñ ˜k¨4Ô 0Ø!�4—7‘7—>‘> 4Ð2¨6Ñ2Ð 2rNrr³ó?rDólogourlólogoimgó staticurlr$s/static/)r²rXrrrs sessionvarsr³snonceómotdrR)Úrequiresc3óZ•K—‰j�‰j–—y‰dd«–—y­w)NrDr )r¨)r–rr]r­s €€r*r¨z hgwebdir.templater..motdHs'øèø€à�y‰yÐ$Ø—i‘i“á˜V WÓ-Ó-ùsƒ(+)ÚfpÚdefaults) rÚgetstylerÃr Ú sessionvarsriÚrstriprÅrrÚtemplatekeywordrÚ frommapfile)r­rIrÚvarsÚstylesrÂÚmapfiler#r&ÚlogourlÚlogoimgÚ staticurlr$r(r¨r]s` @r*rzhgwebdir.templater&s@ù€ô 3ðˆÜ'0×'9Ñ'9Ø �˜×*Ñ*ó( Ñ$ˆÑ$�˜ ð �F˜1‘IÒ Ø"ˆD�‰Nä×)Ñ)¨$°Ó5ˆ Ù˜ Ó,ˆÙ˜ Ó,ˆá �6˜<Ó (ò 6Ø�{‰{×!Ñ! $Ó'¨+Ñ5ð ð×!Ñ! $Ô'Ø ˜Ñ ˆIô"×*Ñ*Ø—K‘K $Ñ&ØØØ#Ø'ØØñ  ˆô$×3Ñ3°HÓ=ˆá ˜¨2Ô .ô .ó /ð .ô ×"Ñ"×.Ñ.Ø ˜ Xð/ó ð rNrQ©rN) Ú__name__Ú __module__Ú __qualname__Ú__doc__r®r©rÏrÛrÖràrõrrRrNr*r£r£s4„ñó +òE'òNò'ò-ò>Yóv-"ó^+ rNr£r0)rNFrN)/rár0r·Úi18nrÚcommonrrrr r r r r rÚrrrrrrrrrrrrrrrtrrrrÓr r!Úutilsr"r+r?r8rMr‹r�r¡r£rRrNr*Úr9s„ðó Û Û å÷ ÷ õ ÷÷÷÷ñ÷$óõ òMòò& ò ó.@òF ð"KNóF÷B òB rN