ÿØÿà JFIF    ÿÛ „ !.%+&8&+/1555$;@;4?.451 4,$,44444444444414444444444444444444444444444444444444ÿÀ  á á" ÿÄ     ÿÄ ?    !1AQaq"2‘¡±ÁðBRbrÑá#‚’¢²3S CñÿÄ   ÿÄ !    !1QAa‘2ÿÚ   ? 5˜Z¯V¦cø)›t/? z¨±>Õ5€¶‹Á¤·¼z¼Ü¬+ñ®v¤¨_ˆR­BFn©—˜ý®ç̝P8gýt·ÉSTŦˆìät?þé¼íìN/Þa)ì–í6ô… Ï¿øÃj´¿KÇü]ÿ ªô¹-eKànëÕHTx}ýSÜ›ÿ ”7Ø×&µ<¦  ¥ÑO¶[Ù¯ä¨ÞÃÿ PZ-¬;#õ|•oaÿ ©CìÞz3˜öː/¤­ñTûIØ}š^ mÓ%ªxˆ¥ÉŸu=Z+ISe¿45™¼u;ú&WØ÷€æßQ™®{|íx*TC“#ZŠìZ§²‹ 6pv…³¿¡äª*áZÐ%ÒOáˆo"x«OHk w±æ+¬V(kMúŸ5Vö«$ ÁrÏbàb57/luR ¸ÑÛj Òµì`Мq­û žICÀÊ•©4€Âcà¨Ï€O´<èÐ:›ù(Ë^L8þ‘ÍÌ#¸Ð_Ì©ÙK(Öz 4¬û+¸;ü’V’84‘¬ÃŽ:[â‡ÔÌáõp¢~§ªlæ£ö{®G>J¼"°‡7¯ÆÉèßû ‹É‹§ÁòÃýâßî ^ƾÙõ‹×óH#«LP½ïX=xÑÍ$|W?•~• îëÔ©ª‹ {ÝT…Kÿ ”hûâá)J*ö˜–ÔU;iÇ€/ ÆþjóZ\ýwØ=Ìm ºèËL9 ýèÆð/¨’¥öo=nË.%Îì ŽÕ¯È|{Oj²ƒE6e/ßdÄõ²Ìâ1O®ò×TsəԸhOMýíMˆ¿¼H˜l²,7Â¥#MF/Úf°Ö½± ¸–dr‹NýÊ íjqx{œÉ ä-È ¦ øÄër¨q°ð †nцýÑÄÆ’mä…n<0È™;ÁÝá¯ÁZƒ7FÀmì­ É&9ˆîéi¶ùN§Y• ÃZãAâ?•‡©‰ , ó¾IŸŠc1 4â&y­&pŠ­6;M À 0¹qç»p.á …ŸÅáK@%6·y6ƒ‰3?”úºŽ‰éX5ªPT §µ!=Mž«Ú½‹ÅgÂSâÉaþÓoö–¯ÁÔìR>5éÿ üs¶ÆUcÌ kÇR ]ÿ ù¬¼«VŽ;Â|‡~¢¦”ÏŰæ {L™Õ°Óv¹ò¸írޡעCÃ!íVÕ {¶»sŒNPg/ "uÕbkm²“$ďå¿é¹§°½æz¯6 †s¿!s–wÚÝ“™Œ °.ûj>·+™Òa…©Œ&rÝÎtÛë긪Ît’LAVp%c Úý[ÄzJ¾ÇàXXç@˜ó<êL]·T˜¾¥1Ó©V‡g´æ½¦Ý@¹óø!_@´ÞâSÁ —S3™•& ]@JHÚý©ZŽ €×æÔr»Áf!‡yÞ4Mv*èÓã_{‘åóUuљØ«Oïé*®EvÑ Œ÷‡U \"㪒ÍK+À 4“M¡ï:0¥5í!'<@î´”>Ç»&Z–ïCCV˜Ì5Šo&îhè.žû |ÓK©h$s6KìŒëã)¹hI¦GïOåóI;ììü#É$Š0…Ææ¥TØ.5­¾gn´ “ÂÖ\:hœ89G)J@„}œ:’Ò{/Š"¦_Æ×7Æ3VÇŠÊa]ÚŒÙ€Ä–=®uÁßâACZƒ§§£ Qnâ:«,×{tyø¬iÛcœÜÄ€H½ÄÍCk´÷šß .W'b¤Íåh]÷€=,Žv×cÚEÚHXJX¶îo¨FÒtèöŸ>ªª6[J®Fµ£sGÁeqõfe\íjÒÐïÄÐGˆe1Ø‹.Ø”‘Ëuø Y­ˆÜ ŽG|zùªüMpDnQWÄ”%JŠ™)â*p@Örš«ÕT2Ð%ˆG#ª„ ·¤!°ŸOTÂT¸aÚ%4&h™LµšØüÐ.F¿²ÐÞ_Ç‚¾ÅÃaÜ÷09Æ q€öy˜v‡85õN÷]¬äѼóS{°_MެúÔ#°Ç¸0åÞè2ëôPcvÆw9®ií1Ä8F™˜à‰´+‰Ik1òÝ7“Ñ×ÒsÝ\x‚h`ÞÑ`ó"|µEcý£n˜h`}GÞ !±ù²Ápü²ß6 0ïi󜵩SÈÇ7˜-ÕURO˜¦´f$ªž-Í6(œ}<„ éc øs]ŽŽ„*—¾ ìdŽ„)méª\¿êÎIg¾ØÞ~I#C/¼¼´EÁÈŽi8“©õådô·>euä ƒ'Ê×लR1ÉJE1ÐAát`t;ÇР%Ý<‡¥„ÍÆ`×Oyó)õiI€ñQaŸ4Ûù\áàaÃÔ¹HÃu¹*k€¦<„e S‡&õÏ B!ŽhüÞ`yj}mªf×\¿ Ç~æ­9‡û\՞Ǖg²1Žû5V7 !àöšm° c`ܬøÇìµÒ'P"?…´Ö,"§^•õލsÔ)6˜sæéÍR¼ ò|Sl”‹7 nPW Gòú÷½§O¯‡„l¡kSÞŒr½PÊ@æ¢pŽ-mÿ #Ÿ˜Àº¶Áä¦;ïÔæ$1££`“Õ>„—·ž)ßð³ñ#Ï Ô$¶œ‰ÊE‹À;÷º ¯«P:Ñ”8–IÊtpÞ3ª“>ê“þës4ò2OÏÕ­±zô†Õ§‰.÷ä¸;¿˜“'œ›žª}«Œ{ª±Ì 9ÔóÞÕ‡0 $íWV3Üì¬ —@kÝ4@¿r¼±½¬™›?øØæ´'Áé®CË3-g$˜ö‡×auÚi´Žp/êÛ æF›Ú2v‹ã¿¿,nB1̨ƃqÞa5͝@&Æû“él÷ \C²½UÍc ¯k×¢U ÖéQå™—-r wô ÞÏ<Ò=&=ÿ Ôê Òêˈt,i—;LîÜ á¸*ÚÃ1$êL•LÍ <É)ýÐà’ ;F™{ƒ™˜€&'}‚ãÄK`¡ÞT@I;®žZóè‚s’7®°›+§O­Åq©é»²9<Ô J ¼9O’HL»Ùïì¸rk¼Ž_ý‘TŸu[²ßÚŒ·ü÷B%¯E ŸÔX5êO´ Ç•€’I0 ÉJX` ñ¹õ%;µŸD‘«´€àwÒ™U ûئžÖö\×®×´8 ½‡ºÐÆÓ§?Àkmœ=;d5*@-ì0F Rªýš[Ü6âö̃ڸr*KA9· u*µæ£?U¸Âêí†8@¦X4 e-ò„0s{ HâUpU?¼mñRa°®a%Ð'tÉ×’\¾ÊÉ]t›h>·(Ë@R¼¡Ãt h}’O÷au<+nT…Ö…MӐ??Óe95 q>í/;&JSû °¯ÊéÞ øƒ*Ã2½Ài&:nôUl=¾¿5eˆ3”ñc|Ú2V”>„»&eE;«ÚäC p¢Û úy 9š[ŒÌx¼擼A&DåÒ¯ˆ¤ÀÌ;"˜ ÏQä¸åhÊ}Ûq«Û0WžÒ|»€ø®öCm5•\ÇÀ§Pe3£]0ÃàLDÉ‰1øªxjgwT‚÷¿LΨK‹›ùs—xˆÜ±µ kæ¸f‰‰ÜGk/LÛØ6d9ò¶ùA{ƒA3š/¬D¬khÓk‰`˜"㯒r¿±Óã jx‡°e}<Ñø\3y:'À•/h½Í€Ç4~g ?Û(¼]v‘ªlKÎâ~?O‚W%{Ì:“'©úNq¾›úo(X’¥¯ˆ nFê{Ç€ü?º'ë ø‹ì Þ09ŒÌç9Æ —ËC`j@ÓÄ(+a‹un¸#ÂꟋ{K`‘ÑÍÍ'à´»/Û,KW;Þ4²þð ï Nm|~fGÏ(…³Ã)«1ö­Õ ¥‡¨©ƒÃ™ü-s=à=U66Ï«Ýc蓦W¹íž®›nÔ%êÇìŒ<#Ü×84ån®Ð ÒåOC` ñânÑs‡¢ç 1õ%Îhì½Ã½® e:ݼUZo™`  ÅZŸŒÊ«ê1ÏÄo$q¹Þ€©ˆhÐÉä¯ñ[!…Ú˜àJ:x2$Íß&PåT£6ç— ‡Í*4Ýšçjÿ ‰É nófÐ ó(L5C•åÆ\rMÒ@ò }y-W}™üýVù—ú¢=Ù”c®‘< M ž ´Phr ¦©TD ‘ù.$´÷O‡‘V2Æò.=IUŒ=ž‡â¬i™aþÓåÙ?òUø'ØÖ•.~* šTŒ!•-×áºTâ®ä#õü'´ eýlYÅÓeÕKÂrT"CÚ@u!Óxƒ{š3€}1¿(r}%«nËamjÑ%ÑNEò v ˜à  σöK³,*º.àzù¨™Ó ÚçâU¦*¿ 9{%Ö¹ njûdaXöb) kÛÆ±ûÓ\°M7ˆÂ=û›ç¿Ã‚­V»Cg–8ÙêE- j)k$º`Ã-ùEýeBÆÇ]c¡°ñty&Òd0nõ'¡W+ƒ*|–øµFa\GQªEAÔp5\Ǽ·¼Ç8·õ -â§Ú[ ‡ uZeÖ 3}×d'+¹:ð+K†Û®s!Ï$úe€<Û”x)1»a­¡LC]¸µík…ÚàA»AYº{†ªS[¦5HÒ7ù --,ísòDØ€èk ÞÀîÜ ò@â( ËNˆë›4ô½•/¦o‡€Û7 ê•ÆêòðÜy'Án½µ á˜ݦ ndeo…[ì¶Ê,¥R³Ä=À±—–ß;£™´ñSâ*g§”ïaið‘Jå~™ÓÞ ß³Õ¢»8x埒²52>AÊb&-÷\7´éÄù€T˜,w;3{ï˜k…à¹ÄqÀ«œ{€\ ˆ¾[´¨јr &Úé„Ívˆ±8†¿]|¬ņ4I×pÞS1ÈÖz‰#Ìv‡G!YNògñ:màTz¢Ý1ô©^O=~ë|5Bã™ç•¼µõ•bÆ@úÕS¬ÈŒ#¬zünrŸ û” Z²•èðV"ÁHÚý©wÝ €7¼Ìu1hÑa3Éä û f$o¿É ™Ú›ÝçnpÒ3äÌ3†Í§,Äï]$‰/pê †«À¼¸e9­Æê_C]žƒ·ý·frÁN«, E=›Çq -‰öŒ:aÏ¿±í&£Í:-} 84‘ÿ eƒQÑeëSsuiA ³g㟥ú£?ÿ ʼn*”“÷aühe:ÊWa@ÒÞk±eØ] F Ô—r.åä˜ @ö¥ªZoÐýYL·¥S²G/‡ñ <~*ZÆ´è>JlòàÛÆ½ÿ 窘ìGN¢:I®KšJp/`íIÁÀõ#Ä-€ö­šµŒoF4|ÆQØÆ@Ì|£Ô…¢À{9˜è½Üó›€ôYÒÎYsið;ís¤€à²ˆ‚4qÉVŒI$ ‰"° æµ8cXGjœˏ¡Aâý•ËÜ¢ûï e·çLx']á"oÅÎê3¯Ç—¹”ó0nå‚âg{Œñ> S´˜îè°g238‚ãköÝfÚd´6Ò€;ò÷±¢™¼›º ¢Æ'¥Ðx'e¬ç ]bÈÆV¢ó‹kýBO ðÊâ$Ÿ!×T 3Mýמ žìٍàÌü‘8÷€àæØ8æ©6‰©L´«…oãpð„~Çk‰!ñ;‹”ÛžÍ àž±z Ÿôû øŸÝužÏ;ÿ #|u6™Þ¬ÚˆÐõA4¶â|ôl|Ê2ŽÇ¤ÝÅÇY.<#Aí.k§hóF‚”Y; M½Ö4hŸ4&›­¿tès´%FìL¥£Ãk‰ÇT¤haÁ¤ÚxfÉ`ÑìË›>i 3t‚:,–+^÷´–{Û–Nxi"x‘Ûg î¨>¥Õ܁ùZH,2Û“:8xÊ¢Çí9.É-Ìâã-=çjwµS˜dütžçwýGòú®®ûº_ˆýx$–¡ãøO EÚÛÏ÷R„×w+3£Á£öUMyR²¹âŒ°š›¸Ñãò9§Ó_Dl+Ùßc›úšGÅÌc†Ž!Ko=¶.‘Îÿ c²(2®V mª.ÿ ¹B›¹å ù„öŸSV>™ü¯$y:G¢Z×àøúdî¹û­·ýÇ´:•c LÍõi_‹ö+ÎæGÊè>OŠ•äž´§Þ{X}¨1ÚTc›»Qþ•êô°t¿OP?eæ~É{5]•ÙR£r5†nZ\ã@ &îJõ ¾àC°þV>fé¥/ü5ñÊIº_é5 ;e­h<@ Ä&æÃëE%;X,ÒãÆÞ`Oò¦kŸm#˜!ÀyÄ¢| óLšò¥Ä` ¶R=|ÈCâh5ò3DˆïF†ðÒ#ÅìÛœ?¸yhBãœí ZxßÎÄhºRK„`Þödvײ™ÀÈÑÒgŒuY w³%†ƒÓzõ ÖÏp‚dH®¦A´ù§»ÓÇMæ~)ˆð‡û:ù&Ä •vGD´À n ݇¼Ö8Fö óáà£~Ë¥x`oK|Ä?fxiØü%pìR>éò+Û±éÎ>núlFŤ'tq8LZÏvÃ?„¡ß±È⽆¯³íü@x|PöUäèØã¡ð‚ŒAìÏ"vÍwóŸÍ{ ý0.z È•Ö{,N¡£¡ŸKÕÙž>Ýœþ ÍÀ°<×EA!Å‚D™IúOÍ¡>ôG}Â` ÍßkÜL™Ž Þð™ {IøF²¹òQ3&!ÃÂÞz.d&Ï-sH¸,Ôõ˜ŽP€ 77ˆÝ¼ÊëÜw =cÕ Ú,ØÐ5ÎYÐ)ì´öœgŒ[¤ßv㙑8心>h]§µháYš£²ºÑ.{Ï7Sð•?´~×SÃKýJÛ˜ ™Íäiúu<µX¶1õ^kâçIÑ£sZ4h>j*ÔšD:4­¿_ ÷¸ Õxæÿ ¸?Mù _•­ÊÐ ä ÷ý ÑwL œ­ïnTkÛUÍN©ë:¦fV ¶ÜÔÜMªÅâA½–¿R×TXš-%iTÊT•‡Ù‚JôϐZxWÑè‰f‰òG º ×Õû2aZ7OU3[“×AT–ÞŒ…-‘¤”Ì ì&(ˆ¿­•ƒkï’:ðY¦W‘ Å)“†‘˜³Åtcø˜ñTÂwÚÇ4|üLÇªí–v- qˆèU qPE.†â‘˜µ Æ,ÐÅs]8¾„oúÑ i>ÜxxÈó)ƒ ´æÁâØ$À‰vžŸf$Ž |ãw;ÀÁIJ»b` {¦Ó¤Ú$©YÀ‘n@Óïž«9J¼êG m¤ ܯ¹ÌW4€ÐÒÅÛ‡#褕Ÿn-?í|с¥÷Ú¹¬'´ÞÜ9ÓK `hê£SÄSà?7—Wí_´…óB›»:=Ãïq`<8ñÓŒÑlú2d¬ê³£hÖ[l|$vÝro~'R®‰§°ñmY ͧäP |PUª¹·:3Œ[Û{Xÿ ºâ@‚W–Äé u‚ ¯´*=íή.pûÒdt @G‰¬ s¸ ëÉücr ÞæÑ¨Ê@>¤¢Ö±. Þ'¯°ÌME[YéïĵÂCå½ Ué©Áû'Ê9%eÔðNU”ë‘ÌsD3/®+UI˜9h.WC”빓$#:pz:YÓ ¿xž* ³$Í +$kñAŠ‹†¢ Uê>¸)_š¬÷©ßAÂÔb9ÇU ¯¾á•9¯ÏÏ÷O÷¼¼Fähal1‰3Ì[Ïr•´UCksNÐ] R‘¸¥H+§Šé†c©vÖÞ0iÓ76s†î!§=ß ¼~Ô'°Ãmäoäš³ªøi1úÉ)³yV8 CLÄØÁ‘WYïi€H6ÖÑiámø^ÈY´°Ñ7¥Û*—Ñ©L«Qƒï—Ùrÿ ›£Ð*š¸ˆL©ˆ$ˆ ÷¾D§9È®«qbqC)–ˆïv´çñsÑVT­Ø, <àïºÀO«Jý·õ àfPìð .wFšir´þ’2_Y *Æ€x\« ì€9š@ Ž|F⇥ˆkZ@hÖÄ0t¿-<“‹qµ¾*ZL¤Ú)&BJpÓF5=$„at*Zš$’ÑtdûÝRI1 2މ$€$I$#‰SÞ’Hë¬ï;Á$¡t$’`<(ñÇt)$‡Ð.Êf¢X’Kt=Éé$‚ˆªè¢oÝëòI%Rgcª÷ŠyI%¡‰ÿ !ñ)´õ $¤ Ô’IIGÿÙ )uyc%HdZddlZ ddlmZmZmZmZmZmZddlm Z n #e $rYnwxYwddl Z dZ e jdgdZGdd eZGd d ZdS) aarchitecture matching This leverages code from dpkg's Dpkg::Arch as well as python rewrites from other people. Copyright years imported from the sources. @copyright: 2006-2015 Guillem Jover @copyright: 2014, Ansgar Burchardt @copyright: 2014-2017, Johannes Schauer Marin Rodrigues @copyright: 2022, Niels Thykier @license: GPL-2+ N)IterableOptionalIOListDictUnion)PathLikec#K|D]D}|}|r|dr.|VEdS)N#)rstrip startswithsplit)fdlines 4/usr/lib/python3/dist-packages/debian/_arch_table.py_parse_table_filer%sa{{}} ts++  jjll  _QuadTuple)api_name libc_nameos_namecpu_namec8eZdZdZfdZedZxZS)QuadTupleDpkgArchitecturez"Implementation detail of ArchTablect|tr@|jd|jfvo/|jd|jfvo|jd|jfvo|jd|jfvSt |SNany) isinstancerrrrrsuper __contains__)selfitem __class__s rr z&QuadTupleDpkgArchitecture.__contains__4s d5 6 6 ?=UDM$::?~%)@@?|t|'<<?} (>> ?ww##D)))rc4td|DS)Nc3"K|] }|dkV dS)rN.0xs r z8QuadTupleDpkgArchitecture.is_wildcard..As&,,!1:,,,,,,r)r)r!s r is_wildcardz%QuadTupleDpkgArchitecture.is_wildcard>s!,,t,,,,,,r)__name__ __module__ __qualname____doc__r propertyr+ __classcell__)r#s@rrr1sY,,*****--X-----rrcleZdZdZed dZeddZdZdZdZ d Z dd Z d Z d S) DpkgArchTablecF||_dtddddi|_dSr) _arch2tabler_wildcard_cache)r! arch2tuples r__init__zDpkgArchTable.__init__Fs.% ,UE5%HH r/usr/share/dpkgc<tj|d}tj|d}d}tj|sCtj|d}tj|rd}|}t |d5}t |d5}||||cd d d cd d d S#1swxYwYd d d d S#1swxYwYd S) a?Load the Dpkg Architecture Table This class method loads the architecture table from dpkg, so it can be used. >>> arch_table = DpkgArchTable.load_arch_table() >>> arch_table.matches_architecture("amd64", "any") True The method assumes the dpkg "tuple arch" format version 1.0 or the older triplet format. :param path: Choose a different directory for loading the architecture data. The provided directory must contain the architecture data files from dpkg (such as "tupletable" and "cputable") tupletablecputableF triplettableTzutf-8)encoding)triplet_compatN)ospathjoinexistsopen _from_file)clsrAtupletable_path cputable_pathr?triplettable_pathtuple_fdcpu_fds rload_arch_tablezDpkgArchTable.load_arch_tableMs&',,t\:: T:66 w~~o.. 4 " T> B B w||-.. 4!%"3 /G 4 4 4 S]W555 S9?>>(F>>RR S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S Ss66DC9 D9C= =DC= DDDFci}dt|D}t|D]}|d}|d}|rd|z}d|vrR|D]N} |d| } |d| } t| dd|| <Oot|dd||<t |S)Ncg|] }|d S)rr&r's r z,DpkgArchTable._from_file..qsBBBQAaDBBBrrzbase-z-)rreplacerrr3) rFtuple_table_fd cpu_table_fdr?r7cpu_listrow dpkg_tuple dpkg_archr debtuple_cpu dpkg_arch_cpus rrEzDpkgArchTable._from_filems BB"3L"A"ABBB$^44 ] ]CQJAI 2$z1 *$$ (H#-#5#5gx#H#HL$-$5$5gx$H$HM0I%++C331J}--)B:CSCSTWYZC[C[(\ 9%%Z(((rc@ |j|S#t$rYnwxYw|dd}d|vrFt|dkr)|ddt|dk)t |}n||}||j|<|S)NrQrRrr)r6KeyErrorrleninsertr_dpkg_arch_to_tuple)r!arch arch_tupleresults r_dpkg_wildcard_to_tuplez%DpkgArchTable._dpkg_wildcard_to_tuples '- -    D ZZQ'' J  j//A%%!!!U+++j//A%%. ;FF--d33F%+T" s  cZ|dr |dd}|j|S)Nzlinux-)r r5)r!rYs rraz!DpkgArchTable._dpkg_arch_to_tuples3    ) ) &!!"" I **rc|d|fvrdS ||}||}n#t$rYdSwxYw||vS)a Determine if a dpkg architecture matches another architecture or a wildcard [debarch_is] This method is the closest match to dpkg's Dpkg::Arch::debarch_is function. >>> arch_table = DpkgArchTable.load_arch_table() >>> arch_table.matches_architecture("amd64", "linux-any") True >>> arch_table.matches_architecture("i386", "linux-any") True >>> arch_table.matches_architecture("amd64", "amd64") True >>> arch_table.matches_architecture("i386", "amd64") False >>> arch_table.matches_architecture("all", "amd64") False >>> arch_table.matches_architecture("all", "all") True >>> # i386 is the short form of linux-i386. Therefore, it does not match kfreebsd-i386 >>> arch_table.matches_architecture("i386", "kfreebsd-i386") False >>> # Note that "armel" and "armhf" are "arm" CPUs, so it is matched by "any-arm" >>> # (similar holds for some other architecture <-> CPU name combinations) >>> all(arch_table.matches_architecture(n, 'any-arm') for n in ['armel', 'armhf']) True >>> # Since "armel" is not a valid CPU name, this returns False (the correct would be >>> # any-arm as noted above) >>> arch_table.matches_architecture("armel", "any-armel") False >>> # Wildcards used as architecture always fail (except for special cases noted in the >>> # compatibility notes below) >>> arch_table.matches_architecture("any-i386", "i386") False >>> # any-i386 is not a subset of linux-any (they only have i386/linux-i386 as overlap) >>> arch_table.matches_architecture("any-i386", "linux-any") False >>> # Compatibility with dpkg - if alias is `any` then it always returns True >>> # even if the input otherwise would not make sense. >>> arch_table.matches_architecture("any-unknown", "any") True >>> # Another side effect of the dpkg compatibility >>> arch_table.matches_architecture("all", "any") True Compatibility note: The method emulates Dpkg::Arch::debarch_is function and therefore returns True if both parameters are the same even though they are wildcards or not known to be architectures. Additionally, if `alias` is `any`, then this method always returns True as `any` is the "match-everything-wildcard". :param architecture: A string representing a dpkg architecture. :param alias: A string representing a dpkg architecture or wildcard to match with. :returns: True if the `architecture` parameter is (logically) the same as the `alias` parameter OR, if `alias` is a wildcard, the `architecture` parameter is a subset of the wildcard. The method returns False if `architecture` is not a known dpkg architecture, or it is a wildcard. rTF)rarer^)r! architecturealiasrY dpkg_wildcards rmatches_architecturez"DpkgArchTable.matches_architecturesvv UL) ) )4 00>>I 88??MM   55 M))*5 AAc||krdS ||}||}n#t$rYdSwxYw||kS)aDetermine whether two dpkg architecture are exactly the same [debarch_eq] Unlike Python's `==` operator, this method also accounts for things like `linux-amd64` is a valid spelling of the dpkg architecture `amd64` (i.e., `architecture_equals("linux-amd64", "amd64")` is True). This method is the closest match to dpkg's Dpkg::Arch::debarch_eq function. >>> arch_table = DpkgArchTable.load_arch_table() >>> arch_table.architecture_equals("linux-amd64", "amd64") True >>> arch_table.architecture_equals("amd64", "linux-i386") False >>> arch_table.architecture_equals("i386", "linux-amd64") False >>> arch_table.architecture_equals("amd64", "amd64") True >>> arch_table.architecture_equals("i386", "amd64") False >>> # Compatibility with dpkg: if the parameters are equal, then it always return True >>> arch_table.architecture_equals("unknown", "unknown") True Compatibility note: The method emulates Dpkg::Arch::debarch_eq function and therefore returns True if both parameters are the same even though they are wildcards or not known to be architectures. :param arch1: A string representing a dpkg architecture. :param arch2: A string representing a dpkg architecture. :returns: True if the dpkg architecture parameters are (logically) the exact same. TF)rar^)r!arch1arch2 dpkg_arch1 dpkg_arch2s rarchitecture_equalsz!DpkgArchTable.architecture_equalssoB E>>4 11%88J11%88JJ   55 Z''rmcd}d}d}t|} ||}n#t$rYdSwxYw|D]n} | dkr | ddkrd}nd}|| } d} | } | ddkr d} | dd} || } || vr| }|r|cSo|s|r|rt d||}|S) a Determine if a dpkg architecture is part of a list of restrictions [debarch_is_concerned] This method is the closest match to dpkg's Dpkg::Arch::debarch_is_concerned function. Compatibility notes: * The Dpkg::Arch::debarch_is_concerned function allow matching of negative and positive restrictions by default. Often, this behaviour is not allowed nor recommended and the Debian Policy does not allow this practice in e.g., Build-Depends. Therefore, this implementation defaults to raising ValueError when this occurs. If the original behaviour is needed, set `allow_mixing_positive_and_negative` to True. * The Dpkg::Arch::debarch_is_concerned function is lazy and exits as soon as it finds a match. This means that if negative and positive restrictions are mixed, then order of the matches are important. This adaption matches that behaviour (provided that `allow_mixing_positive_and_negative` is set to True) >>> arch_table = DpkgArchTable.load_arch_table() >>> arch_table.architecture_is_concerned("linux-amd64", ["amd64", "i386"]) True >>> arch_table.architecture_is_concerned("amd64", ["!amd64", "!i386"]) False >>> # This is False because the "!amd64" is matched first. >>> arch_table.architecture_is_concerned("linux-amd64", ["!linux-amd64", "linux-any"], ... allow_mixing_positive_and_negative=True) False >>> # This is True because the "linux-any" is matched first. >>> arch_table.architecture_is_concerned("linux-amd64", ["linux-any", "!linux-amd64"], ... allow_mixing_positive_and_negative=True) True :param architecture: A string representing a dpkg architecture/wildcard. :param architecture_restrictions: A list of positive (amd64) or negative (!amd64) dpkg architectures or/and wildcards. :param allow_mixing_positive_and_negative: If True, the `architecture_restrictions` list can mix positive and negative (e.g., ["!any-amd64", "any"]) restrictions. If False, mixing will trigger a ValueError. :returns: True if `architecture` is accepted by the `architecture_restrictions`. NFr!TrPzarchitecture_restrictions contained mixed positive and negativerestrictions (and allow_mixing_positive_and_negative was not True))iterrar^lowerre ValueError) r!riarchitecture_restrictions"allow_mixing_positive_and_negativeverdictpositive_match_seennegative_match_seenarch_restriction_iterrYarch_restrictionverdict_if_matchedarch_restriction_positiverks rarchitecture_is_concernedz'DpkgArchTable.architecture_is_concernedss\## $%> ? ? 00>>II   55 !6! #! #  2%%"c))&*##&*#" 05577 !% (8 %"c))%*",>> arch_table = DpkgArchTable.load_arch_table() >>> arch_table.is_wildcard("linux-any") True >>> arch_table.is_wildcard("amd64") False >>> arch_table.is_wildcard("unknown") False >>> # Compatibility with the dpkg version of the function. >>> arch_table.is_wildcard("unknown-any") True Compatibility note: The original dpkg function does not ensure that the wildcard matches any supported architecture and this re-implementation matches that behaviour. Therefore, this method can return True for a wildcard that can never match anything in practice. :param wildcard: A string that might represent a dpkg architecture or wildcard. :returns: True the parameter is a known dpkg wildcard. F)rer+r^)r!wildcardrYs rr+zDpkgArchTable.is_wildcardwsI0 )44X>>I ( (    55 s  ,,N)r9)F) r,r-r.r8 classmethodrLrErerarlrsrr+r&rrr3r3Ds   SSS[S>)))[).&+++D*D*D*L*(*(*(ZFKddddL)))))rr3)r/r@typingrrrrrrr ImportErrorcollections.abc collectionsr namedtuplerrr3r&rrrs$  2  @@@@@@@@@@@@@@@@   D $[ #L2b2b2b c c ----- ---&Q)Q)Q)Q)Q)Q)Q)Q)Q)Q)s ''