Ë ¢NÜòß�‰ãó´—dZddlZddlZddlZddlZddlZ ddlmcmZddl m Z mZddlmZddlmZddlmZddlZddlZd„Zd„Zd Zd Zd Zd Zd ZdZGd„d«Z Gd„d«Z!Gd„d«Z"Gd„d«Z#Gd„d«Z$Gd„d«Z%Gd„d«Z&d\Z'Z(d„Z)d„Z*d „Z+d!„Z,Gd"„d#e-«Z.Gd$„d%«Z/d'd&„Z0y#e $r ddl mcm ZYŒµwxYw)(a· Implementation of the XDG Menu Specification http://standards.freedesktop.org/menu-spec/ Example code: from xdg.Menu import parse, Menu, MenuEntry def print_menu(menu, tab=0): for submenu in menu.Entries: if isinstance(submenu, Menu): print (" " * tab) + unicode(submenu) print_menu(submenu, tab+1) elif isinstance(submenu, MenuEntry): print (" " * tab) + unicode(submenu.DesktopEntry) print_menu(parse()) éN)Ú xdg_data_dirsÚxdg_config_dirs)Ú DesktopEntry)Ú ParsingError)ÚPY3có—tjdk\rRtj|«}tjdk\rtj|«Stj |«Stj |tj«¬«S)N)éé)r é©ÚidÚctx)ÚsysÚ version_infoÚastÚ literal_evalÚConstantÚ NameConstantÚNameÚLoad)Únames ú-/usr/lib/python3.12/site-packages/xdg/Menu.pyÚ _ast_constr'se€Ü ×ј6Ò!Ü×Ñ Ó%ˆÜ × Ñ ˜vÒ %Ü—<‘< Ó%Ð %ä×#Ñ# DÓ)Ð )ä�x‰x˜4¤S§X¡X£ZÔ0Ð0ócóz—ts!t|t«r|jd«}t j |«S)zgWrapper around locale.strxfrm that accepts unicode strings on Python 2. See Python bug #2481. zutf-8)rÚ isinstanceÚunicodeÚencodeÚlocaleÚstrxfrm)Úss rÚ_strxfrmr"2s-€õ ”Z ¤7Ô+Ø �H‰H�WÓ ˆÜ �>‰>˜!Ó ÐrÚDeletedÚ NoDisplayÚHiddenÚEmptyÚ NotShowInÚNoExeccó†—eZdZdZd„Zd„Zd„Zd„Zd„Zd„Z d„Z dd „Z dd „Z d „Z dd „Zd „Zd„Zd„Zd„Zd„Z d„Zd„Zy)ÚMenuz^Menu containing sub menus under menu.Entries Contains both Menu and MenuEntry items. có*—d|_d|_g|_d|_d|_d|_d|_d|_d|_d|_ g|_ d|_ d|_ g|_ g|_d|_g|_g|_d|_g|_g|_y)NÚrFT)rÚ DirectoryÚEntriesÚDocÚFilenameÚDepthÚParentÚNotInXmlÚShowÚVisibleÚAppDirsÚ DefaultLayoutr#Ú DirectoriesÚ DirectoryDirsÚLayoutÚ MenuEntriesÚMovesÚOnlyUnallocatedÚRulesÚSubmenus©Úselfs rÚ__init__z Menu.__init__Isž€àˆŒ ؈ŒØˆŒ ؈ŒØˆŒ ؈Œ ؈Œ ؈Œ ðˆŒ ØˆŒ ðˆŒ Ø!ˆÔ؈Œ ØˆÔØˆÔ؈Œ ØˆÔØˆŒ Ø#ˆÔ؈Œ ؈� rcó—|jS©N©rr@s rÚ__str__z Menu.__str__eó €Ø�y‰yÐrcóê—|jD]}|jj|«Œ|jD]}|jj|«Œ|jD]}|jj|«Œ|j�|j|_|j �|j |_|j r|j |_|jr|j|_|jD]}|jj|«Œ|jD]}|jj|«Œ|jD]}|j|«Œ|SrD) r6Úappendr9r8r#r=r:r7r>r<r?Ú addSubmenu)rAÚotherÚdirÚ directoryÚruleÚmoveÚsubmenus rÚ__add__z Menu.__add__hs-€Ø—=”=ˆCØ �L‰L× Ñ  Õ $ð!ð×&Ô&ˆCØ × Ñ × %Ñ % cÕ *ð'ð×*Ô*ˆIØ × Ñ × #Ñ # IÕ .ð+ð �=‰=Ð $Ø Ÿ=™=ˆDŒLà × Ñ Ð ,Ø#(×#8Ñ#8ˆDÔ à �<Š<ØŸ,™,ˆDŒKà × Ò Ø!&×!4Ñ!4ˆDÔ à—K”KˆDØ �J‰J× Ñ ˜dÕ #ð ð—K”KˆDØ �J‰J× Ñ ˜dÕ #ð ð—~”~ˆGØ �O‰O˜GÕ $ð&ðˆ rcóf—tj|j«|j««SrD)rÚstrcollÚgetName©rArKs rÚ__cmp__z Menu.__cmp__Šs€Ü�~‰~˜dŸl™l›n¨e¯m©m«oÓ>Ð>rcó4—t|j««S©z&Key function for locale-aware sorting.)r"rTr@s rÚ_keyz Menu._key�s€ä˜Ÿ ™ ›Ó'Ð'rcóh— |j«}|j«|kS#t$rYŒwxYwrD©rYÚAttributeErrorrUs rÚ__lt__z Menu.__lt__‘ó9€ð Ø—J‘J“LˆEð�y‰y‹{˜UÑ"Ð"øôò Ù ð úó ‚%¥ 1°1có‚— |jt|«k(S#t$r|jt|«k(cYSwxYwrD)rrÚ NameErrorÚstrrUs rÚ__eq__z Menu.__eq__˜s<€ð +Ø—9‘9¤¨£Ñ.Ð .øÜò +Ø—9‘9¤ E£ Ñ*Ò *ð +ús ‚š!>½>c#óbK—|jD]}|r|–—Œ |jdusŒ|–—Œy­w)z4Interator for a list of Entries visible to the user.TN)r.r4)rAÚ show_hiddenÚentrys rÚ getEntrieszMenu.getEntriesŸs-èø€à—\”\ˆEÙØ“ Ø—‘˜tÒ#Ø“ ñ "ùs‚%/¨/có˜—|jD]}|j|k(sŒ|cS|r$|jD]}|j||«Œyy)z4Searches for a MenuEntry with a given DesktopFileID.N)r;Ú DesktopFileIDr?Ú getMenuEntry)rAÚ desktopfileidÚdeepÚ menuentryrPs rrjzMenu.getMenuEntry«sN€à×)Ô)ˆIØ×&Ñ&¨-Ó7Ø Ò ð*ñ ØŸ=œ=�Ø×$Ñ$ ]°DÕ9ñ)ð rcó¾—|jdd«}|jD]<}|j|dk(sŒt|«dkDr|j |d«cS|cSy)z&Searches for a Menu with a given path.Ú/érN)Úsplitr?rÚlenÚgetMenu)rAÚpathÚarrayrPs rrsz Menu.getMenu´sS€à— ‘ ˜3 Ó"ˆØ—}”}ˆGØ�|‰|˜u Q™xÓ'Ü�u“: ’>Ø"Ÿ?™?¨5°©8Ó4Ò4à"’Nñ %rcó^—|}g} |r|j|j«n|j|j««|jdkDr |j}nnŒ[|j «d}|s|j d«|D]"}tjj||«}Œ$|S)z/Returns this menu's path in the menu structure.rr,) rIrrTr1r2ÚreverseÚpopÚosrtÚjoin)rAÚorgÚtoplevelÚparentÚnamesrtrs rÚgetPathz Menu.getPath¾s“€àˆØˆØÙØ— ‘ ˜VŸ[™[Õ)à— ‘ ˜VŸ^™^Ó-Ô.Ø�|‰|˜aÒØŸ™‘àðð � ‰ ŒØˆÙØ �I‰I�aŒLÛˆDÜ—7‘7—<‘<  dÓ+‰Dðàˆ rcó‚— |jjj«S#t$r|jcYSwxYw)z"Returns the menu's localised name.)r-rrTr\rr@s rrTz Menu.getNameÓs9€ð Ø—>‘>×.Ñ.×6Ñ6Ó8Ð 8øÜò Ø—9‘9Ò ð ús ‚#&¦>½>cój— |jjj«S#t$rYywxYw)z Returns the menu's generic name.r,)r-rÚgetGenericNamer\r@s rr‚zMenu.getGenericNameÚs2€ð Ø—>‘>×.Ñ.×=Ñ=Ó?Ð ?øÜò Ùð úó ‚#&¦ 2±2cój— |jjj«S#t$rYywxYw)z Returns the menu's comment text.r,)r-rÚ getCommentr\r@s rr…zMenu.getCommentás2€ð Ø—>‘>×.Ñ.×9Ñ9Ó;Ð ;øÜò Ùð úrƒcój— |jjj«S#t$rYywxYw)z0Returns the menu's icon, filename or simple namer,)r-rÚgetIconr\r@s rr‡z Menu.getIconès2€ð Ø—>‘>×.Ñ.×6Ñ6Ó8Ð 8øÜò Ùð úrƒcó’ —g|_d|_|jD]}|j«Œt «}t «}|j j D]<}|ddk(r|j|d«Œ |ddk(sŒ)|j|d«Œ>|j j D�] }|ddk(rct|«}t|j«dkDr$t|jdt«rd|_ |jj|«Œo|ddk(r3|j|d«}|sŒŽ|jj|«Œª|ddk(r\|j|d«}|sŒÉ|j jr|j!|«Œñ|jj|«�Œ|ddk(s�Œ|dd k(s|dd k(rW|j"j«|j"D],}|j$|vsŒ|jj|«Œ.�Œ|dd k(s |dd k(s�Œ‘|jj«|jD]T}|j&|vsŒ|j jr|j!|«Œ:|jj|«ŒV�Œ|jD�]Ð}d |_ |xjdz c_t|t(«rÖ|j*d ur!t,|_ |xjdzc_Œ_t|j.t0«sŒz|j.j2j5«r!t6|_ |xjdzc_Œ¿|j.j2j9«sŒät:|_ |xjdzc_�Œt|t0«�r“|j2j5«r"t6|_ |xjdzc_�ŒS|j2j9«r"t:|_ |xjdzc_�Œ�|j2j=«r<|j2j?«s"t@|_ |xjdzc_�ŒåtBjDjFs�Œ|j2jI«gk7r4tBjDjF|j2jI«vs6tBjDjF|j2jK«vs�ŒˆtL|_ |xjdzc_�Œªt|t«s�Œ¼|xjdzc_�ŒÓt|j«dkDr1t|jdt«rd|jd_ t|j«dkDr1t|jdt«rd|jd_ |jddD]„}t|t(«sŒ|j jNrŒ+|jdk(sŒ;tP|_ |xjdzc_|jRd usŒj|jjU|«Œ†y) Nrr0rpÚMenunameÚ SeparatoréÿÿÿÿFÚMergeÚfilesÚallÚmenusT)+r.r5r?ÚsortÚsetr:ÚorderÚaddrŠrrrr4rIrjrsÚinlineÚ merge_inliner;rirr*r#ÚDELETEDr-Ú MenuEntryrÚ getNoDisplayÚ NO_DISPLAYÚ getHiddenÚHIDDENÚ getTryExecÚ findTryExecÚNO_EXECÚxdgÚConfigÚ windowmanagerÚ getOnlyShowInÚ getNotShowInÚ NOT_SHOW_INÚ show_emptyÚEMPTYr3Úremove)rArPÚ _submenusÚ_entriesr’Ú separatorrmrfs rr�z Menu.sortïsñ€ØˆŒ ؈Œ à—}”}ˆGØ �L‰L�Nð%ô“Eˆ Ü“5ˆà—[‘[×&Ô&ˆEØ�Q‰x˜:Ò%Ø— ‘ ˜U 1™XÕ&Ø�q‘˜ZÓ'Ø— ‘ ˜e A™hÕ'ð 'ð —[‘[×&Õ&ˆEØ�Q‰x˜;Ò&Ü% d›O� Ü�t—|‘|Ó$ qÒ(¬Z¸¿ ¹ ÀRÑ8HÌ)Ô-TØ%*�I”NØ— ‘ ×#Ñ# IÕ.Ø�q‘˜ZÒ'Ø ×-Ñ-¨e°A©hÓ7� ÚØ—L‘L×'Ñ'¨ Õ2Ø�q‘˜ZÒ'ØŸ,™, u¨Q¡xÓ0�ÚØ—~‘~×,Ò,Ø×)Ñ)¨'Õ2àŸ ™ ×+Ñ+¨GÖ4Ø�q‘˜WÔ$ؘ‘8˜wÒ&¨%°©(°eÒ*;Ø×$Ñ$×)Ñ)Ô+Ø%)×%5Ô%5˜ Ø$×2Ñ2¸(ÒBØ ŸL™L×/Ñ/° Õ:ò&6ð˜1‘X Ò(¨E°!©H¸Ô,=Ø—M‘M×&Ñ&Ô(Ø#'§=¤=˜Ø"Ÿ<™<¨yÒ8Ø&Ÿ~™~×4Ò4Ø $× 1Ñ 1°'Õ :à $§ ¡ × 3Ñ 3°GÕ <ò $1ð3'ðB—\•\ˆE؈EŒJØ �LŠL˜AÑ �Lܘ%¤Ô&Ø—=‘= DÑ(Ü!(�E”JØ—L’L AÑ%–LÜ §¡´Õ;Ø—‘×3Ñ3×@Ñ@ÔBÜ%/˜œ ØŸ š ¨Ñ)ž ØŸ™×5Ñ5×?Ñ?ÕAÜ%+˜œ ØŸ š ¨Ñ)Ÿ ܘE¤9Õ-Ø×%Ñ%×2Ñ2Ô4Ü!+�E”JØ—L’L AÑ%—LØ×'Ñ'×1Ñ1Ô3Ü!'�E”JØ—L’L AÑ%—LØ×'Ñ'×2Ñ2Ô4¸U×=OÑ=O×=[Ñ=[Ô=]Ü!(�E”JØ—L’L AÑ%—LÜ—Z‘Z×-Ô-Ø×*Ñ*×8Ñ8Ó:¸bÒ@ÜŸJ™J×4Ñ4¸Eב> TÒ)Ø—L‘L×'Ñ'¨Õ.ñ %rcóª—|jD]}||k(sŒ ||z }y|jj|«||_|jdz|_y)Nrp)r?rIr2r1)rAÚnewmenurPs rrJzMenu.addSubmenuTsO€Ø—}”}ˆGؘ'Ó!ؘ7Ñ"�Ùð%ð �M‰M× Ñ  Ô )Ø!ˆGŒNØ ŸJ™J¨™NˆG�Mrcó¨—t|j«dk(rÅ|jjr¯|jd}|jj d|j «d¬«|jj d|j«d¬«|jj d|j«d¬«|jj|«yt|j«|jjks|jjdk(r•|jjrRt|j «|j«|j««}|jj|«|jD]}|jj|«Œy|jj|«y) z}Appends a submenu's entries to this menu See the section of the spec about the "inline" attribute rprrT)rÚ GenericNameÚCommentN) rrr.r:Ú inline_aliasrr‘rTr‚r…rIÚ inline_limitÚ inline_headerÚHeader)rArPrmÚheaderrfs rr•zMenu.merge_inline_sS€ô ˆw�‰Ó  1Ò $¨¯©×)DÒ)DØŸ™¨Ñ*ˆIØ × "Ñ "× &Ñ & v¨w¯©Ó/@ÈÐ &Ô NØ × "Ñ "× &Ñ & }°g×6LÑ6LÓ6NÐW[Ð &Ô \Ø × "Ñ "× &Ñ & y°'×2DÑ2DÓ2FÈtÐ &Ô TØ �L‰L× Ñ   Õ *Ü �—‘Ó ! W§^¡^×%@Ñ%@Ò @ÀGÇNÁN×D_ÑD_ÐcdÒDdØ�~‰~×+Ò+Ü §¡Ó 1°7×3IÑ3IÓ3KÈW×M_ÑM_ÓMaÓb�Ø— ‘ ×#Ñ# FÔ+Ø Ÿœ�Ø— ‘ ×#Ñ# EÕ*ñ)ð �L‰L× Ñ  Õ (rN©F)FF)Ú__name__Ú __module__Ú __qualname__Ú__doc__rBrFrQrVrYr]rcrgrjrsrrTr‚r…r‡r�rJr•©rrr*r*Dsn„ñòò8òòD?ò(ò#ò+ð óó:ò#óò*òòòòb/ðHò+ó)rr*có—eZdZdZdd„Zd„Zy)ÚMovezA move operationcó —||_||_yrD)ÚOldÚNew)rAÚoldÚnews rrBz Move.__init__us€ØˆŒØˆ�rcóB—t|j|j«SrD)Úcmpr¾rUs rrVz Move.__cmp__ys€Ü�4—8‘8˜UŸY™YÓ'Ð'rN©r,r,)r¶r·r¸r¹rBrVrºrrr¼r¼ss„Ùóó(rr¼cóP—eZdZdZ dd„Zed„«Zejd„«Zy)r:zMenu Layout classcór—||_||_||_||_||_g|_ddgddgg|_y)NrŒr�r�)r¥r”r±r²r°Ú_orderÚ_default_order)rAr¥r”r±r²r°s rrBzLayout.__init__sI€à$ˆŒØˆŒ Ø(ˆÔØ*ˆÔØ(ˆÔ؈Œ à �gÐ Ø �gÐ ð ˆÕrcóJ—|jr |jS|jSrD)rÇrÈr@s rr’z Layout.orderŒs€à"Ÿkškˆt�{‰{ÐB¨t×/BÑ/BÐBrcó—||_yrD)rÇ)rAr’s rr’z Layout.order�s €àˆ� rN)FFr TF)r¶r·r¸r¹rBÚpropertyr’Úsetterrºrrr:r:}s>„ÙØDEØ27ó  ðñCóðCð ‡\�\ñóñrr:có<—eZdZdZd\ZZed„«Zd„Zd„Z d„Z y)ÚRulezInclude / Exclude Rules Class©rrpc ó�—tjtjtj|«tj«gtj tj dtj«¬«dtj«¬«g¬«dd¬«}tj|«t||«}|S) Nrmr ri©ÚvalueÚattrr©ÚleftÚopsÚ comparatorsrpr)ÚbodyÚlinenoÚ col_offset) rÚ ExpressionÚCompareÚStrÚEqÚ AttributerrÚfix_missing_locationsrÎ)ÚclsÚtypeÚfilenameÚtreerNs rÚ fromFilenamezRule.fromFilenamešsŒ€ä�~‰~Ü—‘Ü—W‘W˜XÓ&Ü—V‘V“X�JÜ Ÿ]™]ÜŸ(™( k´s·x±x³zÔBØ(ÜŸ™› ôðôð ô  ˆô ×!Ñ! $Ô'Ü�D˜$ӈ؈ rcóX—||_||_t|jdd«|_y)NzÚeval)ÚTypeÚ expressionÚcompileÚcode)rArârés rrBz Rule.__init__¬s%€àˆŒ à$ˆŒÜ˜DŸO™OÐ-CÀVÓLˆ� rcó@—tj|j«SrD)rÚdumprér@s rrFz Rule.__str__³s€Ü�x‰x˜Ÿ™Ó(Ð(rcóè—|D]l}|dk(r|jdus|jdurŒ%t|j«sŒ;|jt j urd|_d|_Œfd|_Œn|S)NéTF)ÚMatchedIncludeÚ AllocatedrçrërèrÎÚ TYPE_INCLUDEÚAdd)rAÚ menuentriesÚrunrms rÚapplyz Rule.apply¶sl€Û$ˆIØ�aŠx˜Y×5Ñ5¸Ñ=Ø&×0Ñ0°DÑ8ØÜ�D—I‘I�Ø—9‘9¤× 1Ñ 1Ñ1Ø$(�I”MØ/3�IÕ,à$)�I•Mð%ðÐrN) r¶r·r¸r¹ròÚ TYPE_EXCLUDEÚ classmethodrårBrFrörºrrrÎrΕs1„Ù'à!%Ñ€L�,àñóðò"Mò)ó rrÎcóh—eZdZdZdZdZdZdd„Zd„Zd„Z d„Z dd „Z d „Z d „Z d „Zd „Zd„Zd„Zd„Zy)r—z(Wrapper for 'Menu Style' Desktop EntriesÚUserÚSystemÚBothcó—ttjj||««|_|j |||«d|_d|_g|_d|_d|_ d|_ |jj«|_ y©NTF) rryrtrzÚ setAttributesr4ÚOriginalÚParentsrñrórðÚ getCategoriesÚ Categories©rArãrLÚprefixs rrBzMenuEntry.__init__Ësy€ä(¬¯©¯©°c¸8Ó)DÓEˆÔØ ×ј8 S¨&Ô1ðˆŒ ðˆŒ ØˆŒ ðˆŒØˆŒØ#ˆÔð×+Ñ+×9Ñ9Ó;ˆ�rcóf—|jjr|jj«yy)z&Save any changes to the desktop entry.N)rÚtaintedÚwriter@s rÚsavezMenuEntry.saveßs(€à × Ñ × $Ò $Ø × Ñ × #Ñ #Õ %ð %rcób—|jjj|jd«S)z7Return the directory containing the desktop entry file.r,)rrãÚreplacer0r@s rÚgetDirzMenuEntry.getDiräs%€à× Ñ ×)Ñ)×1Ñ1°$·-±-ÀÓDÐDrcóì—tjjsO|jr |jSt d|j jvr |jS|jS|jS)z.Return the type of MenuEntry, System/User/Bothr) rŸr Ú root_moderÚ TYPE_BOTHrrrãÚ TYPE_USERÚ TYPE_SYSTEMr@s rÚgetTypezMenuEntry.getTypeèsY€ä�z‰z×#Ò#Ø�}Š}Ø—~‘~Ð%ܘqÑ! T×%6Ñ%6×%?Ñ%?Ñ?Ø—~‘~Ð%à×'Ñ'Ð'à—>‘>Ð !rcó—||_||_tjj ||«j dd«|_tjj|jj«s|j«yy)NroÚ-) r0ÚPrefixryrtrzr riÚisabsrrãÚ_MenuEntry__setFilenamers rrÿzMenuEntry.setAttributesôsa€Ø ˆŒ ؈Œ ÜŸW™WŸ\™\¨&°(Ó;×CÑCÀCÈÓMˆÔä�w‰w�}‰}˜T×.Ñ.×7Ñ7Ô8Ø × Ñ Õ ð9rcóÈ—|j«|jk(rEt|j|j «|j «|_|j«yyrD)rrr—r0r rrrr@s rÚupdateAttributeszMenuEntry.updateAttributesüsE€Ø �<‰<‹>˜T×-Ñ-Ò -Ü% d§m¡m°T·[±[³]ÀDÇKÁKÓPˆDŒMØ × Ñ Õ ð .rcóŒ—tjjs td}n td}|jj «dk(r!t jj|d«}n t jj|d«}t jj||j«|j_ y)NrrpÚ ApplicationÚ applicationsúdesktop-directories) rŸr rrrrryrtrzr0rã)rArtÚdir_s rÚ __setFilenamezMenuEntry.__setFilenames„€Ü�z‰z×#Ò#Ü  Ñ#‰Dä  Ñ#ˆDà × Ñ × $Ñ $Ó &¨-Ò 7Ü—7‘7—<‘<  nÓ5‰Dä—7‘7—<‘< Ð&;Ó<ˆDä%'§W¡W§\¡\°$¸¿ ¹ Ó%Fˆ×ÑÕ"rcóŽ—tj|jj«|jj««SrD)rrSrrTrUs rrVzMenuEntry.__cmp__s1€Ü�~‰~˜d×/Ñ/×7Ñ7Ó9¸5×;MÑ;M×;UÑ;UÓ;WÓXÐXrcóH—t|jj««SrX)r"rrTr@s rrYzMenuEntry._keys€ä˜×)Ñ)×1Ñ1Ó3Ó4Ð4rcóh— |j«}|j«|kS#t$rYŒwxYwrDr[rUs rr]zMenuEntry.__lt__r^r_có6—|jt|«k(ryyrþ)rirbrUs rrczMenuEntry.__eq__s€Ø × Ñ ¤ U£Ò +Øàrcó—|jSrD)rir@s rÚ__repr__zMenuEntry.__repr__"s€Ø×!Ñ!Ð!rNrÄ)r¶r·r¸r¹rrrrBr r rrÿrrrVrYr]rcr%rºrrr—r—ÄsS„Ù.à€IØ€KØ€Ió<ò(&ò Eò "ó!ò!ò GòYò5ò#òó "rr—có—eZdZdZd„Zy)rŠz!Just a dummy class for Separatorscó —||_d|_y)NT)r2r4)rAr}s rrBzSeparator.__init__(s€ØˆŒ ؈� rN)r¶r·r¸r¹rBrºrrrŠrŠ&s „Ù'órrŠcó—eZdZdZd„Zd„Zy)r³zClass for Inline Headerscó.—||_||_||_yrD)rr®r¯)rArÚ generic_nameÚcomments rrBzHeader.__init__/s€ØˆŒ Ø'ˆÔ؈� rcó—|jSrDrEr@s rrFzHeader.__str__4rGrN)r¶r·r¸r¹rBrFrºrrr³r³-s„Ùòó rr³rÏcóæ—tjj|«}tjj|«s tjj ||«}tjj |«}tjj |«sy|tk(r!tjj|«r|S|tk(r!tjj|«r|Sy©NF) ryrtÚdirnamerrzÚabspathÚexistsÚTYPE_DIRÚisdirÚ TYPE_FILEÚisfile)rÒrãrârts rÚ_check_file_pathr6;s˜€Ü �7‰7�?‰?˜8Ó $€DÜ �7‰7�=‰=˜Ô Ü—‘— ‘ ˜T 5Ó)ˆÜ �G‰G�O‰O˜EÓ "€EÜ �7‰7�>‰>˜%Ô ØØ ŒxÒœBŸG™GŸM™M¨%Ô0؈ Ø ŒyÒœRŸW™WŸ^™^¨EÔ2؈ Ø rcó—tt«}tjjdur|j d«|D]F}t jj|d|«}t jj|«sŒD|cSy)NTrr�) ÚlistrrŸr rrxryrtrzr5)rãÚdirsÚdÚmenunames rÚ_get_menu_file_pathr<Is^€Ü ”Ó €DÜ ‡z�z×јtÑ#Ø �‰�Œ Û ˆÜ—7‘7—<‘<  7¨HÓ5ˆÜ �7‰7�>‰>˜(Õ #ØŠOñrcóL—t|t«r|S|j«dk(S)NÚtrue)rÚboolÚlower)rÒs rÚ_to_boolrASs"€Ü�%œÔ؈ Ø �;‰;‹=˜FÑ "Ð"rcóœ—i}|j«|D�cgc]}||vsŒ|j||«‘Œ}}|j«|Scc}wrD)rwÚ setdefault)Ú_listÚ_setÚes rÚ_deduperGZsI€Ø €DØ ‡M�M„OÙ,1Ó C©E q°Q¸d²]ˆT�_‰_˜Q Õ "¨E€EÐ CØ ‡M�M„OØ €Lùò Ds — A ¡A có¢—eZdZdd„Zdd„Zd„Zdd„Zd„Zd„Zd„Z d „Z d „Z d „Z d „Z d „Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zy)ÚXMLMenuBuildercó—||_yrD)Údebug)rArKs rrBzXMLMenuBuilder.__init__ds €Øˆ� rNcóÆ—|r*tjj|«s t|«}|s.tjj dd«dz}t|«}|st ddz«‚|jd«s t d|«‚ tj|«}t«|_ t«|_ t«|_|j|j!«|«}||_||_|j'|«|j)|«|j+|«|j-|«|j/«|S#t d|«‚xYw) z£Load an applications.menu file. filename : str, optional The default is ``$XDG_CONFIG_DIRS/menus/${XDG_MENU_PREFIX}applications.menu``. ÚXDG_MENU_PREFIXr,úapplications.menuúFile not foundz/etc/xdg/menus/%sú.menuzNot a .menu fileúNot a valid .menu file)ryrtrr<ÚenvironÚgetrÚendswithÚetreeÚparser‘Ú _merged_filesÚ_directory_dirsÚMenuEntryCacheÚcacheÚ parse_menuÚgetrooträrãÚ handle_movesÚ post_parseÚgenerate_not_only_allocatedÚgenerate_only_allocatedr�)rArãÚ candidateräÚmenus rrVzXMLMenuBuilder.parsegs1€ñ œBŸG™GŸM™M¨(Ô3Ü*¨8Ó4ˆHáÜŸ ™ Ÿ™Ð'8¸"Ó=Ð@SÑSˆIÜ*¨9Ó5ˆHÙÜÐ/Ð1DÀyÑ1PÓQÐ Qà× Ñ  Ô)ÜÐ1°8Ó<Ð <ð CÜ—;‘;˜xÓ(ˆDô !›UˆÔÜ"›uˆÔÜ#Ó%ˆŒ à�‰˜tŸ|™|›~¨xÓ8ˆØˆŒ Ø ˆŒ à ×ј$ÔØ �‰˜Ôð ×(Ñ(¨Ô.Ø ×$Ñ$ TÔ*ð � ‰ Œ àˆ øð- CÜÐ7¸ÓBÐ Bús  EÅE có@—t«}|j|||«|SrD)r*Ú parse_node)rAÚnoderãrbs rr[zXMLMenuBuilder.parse_menu”s€Ü‹vˆØ �‰˜˜h¨Ô-؈ rcóˆ—t|«}|D�]±}|j|j}}|r|j«nd}|dk(r$|j ||«}|j |«ŒY|dk(r|r|j |||«Œt|dk(r|j||«ŒŒ|dk(r|r|j|||«Œ§|dk(r|j||«Œ¿|dk(r |r||_ ŒÎ|dk(r|r|jj|«Œñ|dk(rd |_ Œþ|d k(r d |_ �Œ |d k(r d |_�Œ|d k(r d |_�Œ(|dk(s|dk(r,|jj|j!|««�Œ^|dk(rO|j"j%dd«dk(r|j'd|||«�Œ˜|s�Œœ|j'||||«�Œ²|dk(r|r|j)||||«�ŒÏ|dk(r|j+|||«�Œé|dk(r,|j,j|j/|««�Œ|dk(r|dkDs�Œ&|j1|«|_�Œ>|dk(r|dkDs�ŒJ|j1|«|_�Œb|dk(r2|r0|j7||j"j%dd«||«�Œ™|dk(s�Œ |j9||«�Œ´y)Nr*ÚAppDirÚDefaultAppDirsÚ DirectoryDirÚDefaultDirectoryDirsrr-r=TÚNotOnlyUnallocatedFr#Ú NotDeletedÚIncludeÚExcludeÚ MergeFilerâr}rNÚMergeDirÚDefaultMergeDirsr¼r:rpr7Ú LegacyDirrr,Ú KDELegacyDirs)rrÚtagÚtextÚstripr[rJÚ parse_app_dirÚparse_default_app_dirÚparse_directory_dirÚparse_default_directory_dirrr8rIr=r#r>Ú parse_ruleÚattribrSÚparse_merge_fileÚparse_merge_dirÚparse_default_merge_dirsr<Ú parse_moveÚ parse_layoutr:r7Úparse_legacy_dirÚparse_kde_legacy_dirs) rArerãr}Ú num_childrenÚchildrtrurbs rrdzXMLMenuBuilder.parse_node™s‘€Ü˜4“yˆ ܈EØŸ ™  5§:¡:�ˆCÙ#'�4—:‘:”<¨TˆDØ�fŠ}Ø—‘ u¨hÓ7�Ø×!Ñ! $Õ'ؘ’¡TØ×"Ñ" 4¨°6Õ:ØÐ(Ò(Ø×*Ñ*¨8°VÕ<ؘÒ&©4Ø×(Ñ(¨¨x¸Õ@ØÐ.Ò.Ø×0Ñ0°¸6ÕBؘ’¡4Ø"�• ؘ Ò#©Ø×"Ñ"×)Ñ)¨$Õ/ØÐ)Ò)Ø)-�Õ&ØÐ,Ò,Ø).�Ö&ؘ Ò!Ø!%�–ؘ Ò$Ø!&�–ؘ Ò! S¨IÒ%5Ø— ‘ ×#Ñ# D§O¡O°EÓ$:Ö;ؘ Ò#Ø—<‘<×#Ñ# F¨DÓ1°XÒ=Ø×)Ñ)Ð*=¸uÀhÐPVÖWÛØ×)Ñ)¨$°°xÀÖHؘ Ò"¡tØ×$Ñ$ T¨5°(¸FÖCØÐ*Ò*Ø×-Ñ-¨e°X¸vÖFؘ’Ø— ‘ ×#Ñ# D§O¡O°EÓ$:Ö;ؘ’Ø !Ô#Ø$(×$5Ñ$5°eÓ$<�F–MؘÒ'Ø !Ô#Ø+/×+<Ñ+<¸UÓ+C�FÖ(ؘ Ò#©Ø×%Ñ% d¨E¯L©L×,<Ñ,<¸XÀrÓ,JÈHÐV\Ö]ؘÔ'Ø×*Ñ*¨8°VÖ<ñarcóp—tt|jjdd««t|jjdd««t |jjdd««t|jjdd««t|jjdd««¬ «}g}|D�]g}|j |j }}|r|j«nd}|d k(rÊ|rÈ|jd |t|jjdd««t|jjdd««t |jjdd««t|jjdd««t|jjdd««g«Œÿ|d k(r|jd g«�Œ|d k(r|r|jd |g«�Œ4|d k(s�Œ;|jd |jjdd«g«�Œj||_ |S)Nr¥Fr”r±r r²Tr°)r¥r”r±r²r°r‰rŠr0rŒrârŽ) r:rAr|rSÚintrtrurvrIr’)rAreÚlayoutr’r…rtrus rr�zXMLMenuBuilder.parse_layoutÍs¾€ÜÜ § ¡ §¡° ¸eÓ DÓEܘDŸK™KŸO™O¨H°eÓ<Ó=ܘTŸ[™[Ÿ_™_¨^¸QÓ?Ó@Ü" 4§;¡;§?¡?°?ÀDÓ#IÓJÜ! $§+¡+§/¡/°.À%Ó"HÓIô  ˆðˆÜˆEØŸ ™  5§:¡:�ˆCÙ#'�4—:‘:”<¨TˆDØ�jÒ ¡TØ— ‘ ØØÜ˜UŸ\™\×-Ñ-¨l¸EÓBÓCܘUŸ\™\×-Ñ-¨h¸Ó>Ó?ܘŸ ™ ×(Ñ(¨¸Ó;Ó<ܘUŸ\™\×-Ñ-¨o¸tÓDÓEܘUŸ\™\×-Ñ-¨n¸eÓDÓEðõð˜ Ò#Ø— ‘ ˜k˜]Ö+ؘ Ò"¡tØ— ‘ ˜j¨$Ð/Ö0ؘ”Ø— ‘ ØØ—L‘L×$Ñ$ V¨UÓ3ðöð%ð,ˆŒ ؈ rcó´—d\}}|D]C}|j|j}}|r|j«nd}|dk(r|r|}Œ9|dk(sŒ?|sŒB|}ŒEt||«S)NrÄr¾r¿)rtrurvr¼)rArerÀrÁr…rtrus rr€zXMLMenuBuilder.parse_moveïs_€Ø‰ˆˆSÛˆEØŸ ™  5§:¡:�ˆCÙ#'�4—:‘:”<¨TˆDØ�eŠ|¡Ø‘ؘ“¢$Ø‘ð ô�C˜‹~ÐrcóL—|jdk(rtjntj}t j dd¬«}|j |t j««}|r||_ntd«|_t j|«t||«S)Nrmrpr)rÙrÚÚFalse) rtrÎròr÷rrÛÚ parse_bool_opÚOrrØrrà)rArerâräÚexprs rr{zXMLMenuBuilder.parse_ruleüsy€Ø$(§H¡H° Ò$9Œt× Ò ¼t×?PÑ?PˆÜ�~‰~ Q°1Ô5ˆØ×!Ñ! $¬¯©«Ó1ˆÙ ؈D�Iä" 7Ó+ˆDŒIÜ ×!Ñ! $Ô'Ü�D˜$ÓÐrcóÀ—g}|D]'}|j|«}|sŒ|j|«Œ)t|«}|dkDrtj||«S|dk(r|dSy)Nrpr)Úparse_rule_noderIrrrÚBoolOp)rAreÚoperatorÚvaluesr…rNÚ num_valuess rrŒzXMLMenuBuilder.parse_bool_opsg€ØˆÛˆEØ×'Ñ'¨Ó.ˆDÚØ— ‘ ˜dÕ#ðô˜“[ˆ Ø ˜Š>Ü—:‘:˜h¨Ó/Ð /Ø ˜1Š_ؘ!‘9Ð Ørc ó—|j}|dk(r$|j|tj««S|dk(r$|j|tj««S|dk(rP|j|tj««}|r(tj tj «|«SdS|dk(r td«S|dk(rš|j}tjtj|«tj«gtjtjdtj«¬«d tj«¬ «g¬ «S|d k(rš|j}tjtj|«tj«gtjtjdtj«¬«d tj«¬ «g¬ «Sy)Nr�ÚAndÚNotÚAllÚTrueÚCategoryrmr rrÑrÔr0ri)rtrŒrr�r–ÚUnaryOpr—rrurÜrÝÚInrßrrrÞ)rArertrŽÚcategoryrãs rr�zXMLMenuBuilder.parse_rule_nodesu€Ø�h‰hˆØ �$Š;Ø×%Ñ% d¬C¯F©F«HÓ5Ð 5Ø �EŠ\Ø×%Ñ% d¬C¯G©G«IÓ6Ð 6Ø �EŠ\Ø×%Ñ% d¬C¯F©F«HÓ5ˆDÙ37”3—;‘;œsŸw™w›y¨$Ó/Ð A¸TÐ AØ �EŠ\ܘfÓ%Ð %Ø �JÒ Ø—y‘yˆHÜ—;‘;Ü—W‘W˜XÓ&Ü—V‘V“X�JÜ Ÿ]™]ÜŸ(™( k´s·x±x³zÔBØ%ÜŸ™› ôðôð ð�JÒ Ø—y‘yˆHÜ—;‘;Ü—W‘W˜XÓ&Ü—V‘V“X�JÜ Ÿ]™]ÜŸ(™( k´s·x±x³zÔBØ(ÜŸ™› ôðôð ðrcób—t||t«}|r|jj|«yyrD)r6r2r6rI©rArÒrãr}s rrwzXMLMenuBuilder.parse_app_dir8s*€Ü  ¨´(Ó;ˆÙ Ø �N‰N× !Ñ ! %Õ (ð rcóŽ—tt«D]3}|jtjj |d«||«Œ5y)Nr)Úreversedrrwryrtrz©rArãr}r:s rrxz$XMLMenuBuilder.parse_default_app_dir=s2€Üœ-Ö(ˆAØ × Ñ œrŸw™wŸ|™|¨A¨~Ó>ÀÈ&Õ Qñ)rcób—t||t«}|r|jj|«yyrD)r6r2r9rIrŸs rryz"XMLMenuBuilder.parse_directory_dirAs,€Ü  ¨´(Ó;ˆÙ Ø × Ñ × 'Ñ '¨Õ .ð rcóŽ—tt«D]3}|jtjj |d«||«Œ5y)Nr)r¡rryryrtrzr¢s rrzz*XMLMenuBuilder.parse_default_directory_dirFs4€Üœ-Ö(ˆAØ × $Ñ $¤R§W¡W§\¡\°!Ð5JÓ%KÈXÐW]Õ ^ñ)rcóø—|jjdd«dk(r´tD]ª}|j|d«j d«}||k7sŒ*tD]x}||k(rŒ t j jt j j||««sŒG|jt j j||«||«ŒªŒ¬yt||t«}|r|j|||«yy)Nrâr}r,ro) r|rSrr rvryrtr5rzÚ merge_filer6r4)rArÒr…rãr}r:Úrel_fileÚps rr}zXMLMenuBuilder.parse_merge_fileLsÇ€Ø �<‰<× Ñ ˜F DÓ )¨XÒ 5ß$�Ø#×+Ñ+¨A¨rÓ2×8Ñ8¸Ó=�ؘxÓ'ß,˜Ø š6Ø$ÜŸ7™7Ÿ>™>¬"¯'©'¯,©,°q¸(Ó*CÕDØ ŸO™O¬B¯G©G¯L©L¸¸HÓ,EÀuÈfÔUÙ!ñ -ñ%ô% U¨H´iÓ@ˆEÙØ—‘  u¨fÕ5ðrcó—t||t«}|r^tj|«D]E} |j d«r1|j tj j||«||«ŒGyy#t$rYŒUwxYw)NrP) r6r2ryÚlistdirrTr¦rtrzÚUnicodeDecodeError)rArÒr…rãr}Úitems rr~zXMLMenuBuilder.parse_merge_dir\sp€Ü  ¨´(Ó;ˆÙ ÜŸ ™  5Ö)�ðØ—}‘} WÔ-ØŸ™¬¯©¯ © °U¸DÓ(AÀ5È&ÔQøñ*ð øô *òÙðús­AA3Á3 A?Á>A?c ó—tjjtjj|««d}t t «D]8}|j tjj|d|dz«|||«Œ:y)Nrr�z-merged)ryrtÚsplitextÚbasenamer¡rr~rz)rAr…rãr}r¯r:s rrz'XMLMenuBuilder.parse_default_merge_dirsfsf€Ü—7‘7×#Ñ#¤B§G¡G×$4Ñ$4°XÓ$>Ó?ÀÑBˆÜœ/Ö*ˆAØ × Ñ ¤§¡§¡¨a°¸(ÀYÑ:NÓ!OÐQVÐX`ÐbhÕ iñ+rcó|—||jvr|jr td|«‚y|jj|« t j |«}|j«}|j|||«y#t $r|jr td|«‚Yy|jr td|«‚YyxYw)Nz Infinite MergeFile loop detectedrOrQ) rWrKrr“rUrVÚIOErrorr\rd)rArãr…r}räÚroots rr¦zXMLMenuBuilder.merge_fileks­€à �t×)Ñ)Ñ )Ø�zŠzÜ"Ð#EÀxÓPÐPàØ ×Ñ×јxÔ(ð Ü—;‘;˜xÓ(ˆDð�|‰|‹~ˆØ �‰˜˜h¨Õ/øôò Ø�zŠzÜ"Ð#3°XÓ>Ð>áð Ø�zŠzÜ"Ð#;¸XÓFÐFáúsÁA=Á=!B; B;có<—|j||||«}|r||z }yyrD)Úmerge_legacy_dir)rArrrãr}Úms rr‚zXMLMenuBuilder.parse_legacy_dir…s)€Ø × !Ñ ! $¨°¸&Ó AˆÙ Ø �a‰K‰Fð rc óˆ—t||t«}|�r||jv�r|jj|«t «}|j j |«|jj |«tjj|«|_ d|_ tj|«D]¢} |dk(r|jj |«n~tjjtjj!||««rA|j#|j%tjj!||«|||««Œ¤|j(j+|g|d«|j(j-|gd«}|D]Œ}|j.} t1| «dk(rIt2j5t2j6|j8«} |j:j | «||j vsŒu| j d«| |_ŒŽ|Syy#t&$rY�Œ�wxYw)NTz .directoryFrÚLegacy)r6r2rXr“r*r6rIr9ryrtr¯rr3rªr8r3rzrJr´r«rZÚadd_menu_entriesÚget_menu_entriesrrrrÎråròrir>) rArrrãr}rµr¬rôrmÚ categoriesÚrs rr´zXMLMenuBuilder.merge_legacy_dirŠsȀܠ h´Ó9ˆÚ �D × 4Ñ 4Ò4Ø × Ñ × $Ñ $ TÔ *Ü“ˆAØ �I‰I× Ñ ˜TÔ "Ø �O‰O× "Ñ " 4Ô (Ü—W‘W×%Ñ% dÓ+ˆAŒF؈AŒJäŸ ™  4Ö(�ð Ø˜|Ò+ØŸ ™ ×,Ñ,¨TÕ2ÜŸ™Ÿ™¤r§w¡w§|¡|°D¸$Ó'?Ô@ØŸ ™  T×%:Ñ%:ÜŸG™GŸL™L¨¨tÓ4Ø"Ø$Ø"ó &ôøð )ð �J‰J× 'Ñ '¨¨°¸Ô =ØŸ*™*×5Ñ5°t°f¸eÓDˆKã(� Ø&×1Ñ1� Ü�z“? aÒ'Ü×)Ñ)¬$×*;Ñ*;¸Y×=TÑ=TÓU�AØ—G‘G—N‘N 1Ô%ؘvŸ~™~Ò-Ø×%Ñ% hÔ/Ø+5�IÕ(ð)ðˆHðE5ˆ4øô&*òÚðúsÃBH4È4 IÉIcó0— tjgd¢tjd¬«}|j«dj «} |dj d«D]}|j|d||«Œy#t $rYywxYw#t$rYywxYw)N)z kde-configz--pathÚappsT)ÚstdoutÚuniversal_newlinesrÚ:Úkde) Ú subprocessÚPopenÚPIPEÚ communicateÚ splitlinesÚOSErrorrqr‚Ú IndexError)rArãr}ÚprocÚoutputrs rrƒz$XMLMenuBuilder.parse_kde_legacy_dirs°s™€ð Ü×#Ñ#Ú0Ü!—‘Ø#'ôˆDð ×%Ñ%Ó'¨Ñ*×5Ñ5Ó7ˆFð Ø˜q™ Ÿ™¨Ö,�Ø×%Ñ% d¨E°8¸VÕDñ-øô ò á ð ûô ò Ù ð ús$‚A A:Á -B Á: BÂB BÂBcó&—|j€d|_|j€d|_|jr |jsÉ|jr|j|_n«|jr;|jdkDr|j j|_ntt«|_nd|jdkDr7|j j|_|j j|_nt«|_t«|_|jdkDrP|j j |j z|_|j j|jz|_t|j«|_ t|j«|_t|j «|_|jD]}|j|«Œ|jj«|jj«|j j«|jD]Þ}|jD]¿}tjjtjj!||««sŒAt#||«}|j$s||_Œa|j'«t"j(k(sŒƒ|j$j'«t"j*k(sŒ¯||j$_ŒÁ|j$sŒÞyy)NFr)r#r=r:r7r1r2r6r9rGr8r?r^rwryrtr5rzr—r-rrrr)rArbrPrMrLrms rr^zXMLMenuBuilder.post_parseÁs0€à �<‰<Ð Ø ˆDŒLØ × Ñ Ð 'Ø#(ˆDÔ ð�{Š{ $×"4Ò"4Ø×!Ò!Ø"×0Ñ0�• Ø—’Ø—:‘: ’>Ø)-¯©×)BÑ)B�DÕ&ä)/«�DÕ&à—:‘: ’>Ø"&§+¡+×";Ñ";�D”KØ)-¯©×)BÑ)B�DÕ&ä"(£(�D”KÜ)/«�DÔ&ð �:‰:˜Š>ØŸ;™;×.Ñ.°·±Ñ=ˆDŒLØ!%§¡×!:Ñ!:¸T×=OÑ=OÑ!OˆDÔ ô# 4×#3Ñ#3Ó4ˆÔÜ$ T×%7Ñ%7Ó8ˆÔܘtŸ|™|Ó,ˆŒ ð—}”}ˆGØ �O‰O˜GÕ $ð%ð ×Ñ× Ñ Ô"Ø ×Ñ×"Ñ"Ô$Ø � ‰ ×ÑÔð×)Ô)ˆIØ×)Ô)�Ü—7‘7—>‘>¤"§'¡'§,¡,¨s°IÓ">Õ?Ü )¨)°SÓ 9�IØŸ>š>Ø)2˜�Ø"×*Ñ*Ó,´ ×0EÑ0EÓEØŸ>™>×1Ñ1Ó3´y×7JÑ7JÓJØ6?˜DŸN™NÕ3ð*ð�~‹~Ùñ*rcóô—|jD]}|j|«Œ|jdurÈ|jj |j «g}|j D]7}|j|jj|j «d«}Œ9|D]U}|jdusŒ|jj|«d|_ d|_ |jj|«ŒWyy)NFrpT)r?r_r=rZr¸r6r>rör¹rórrIrñr;©rArbrPrôrNrms rr_z*XMLMenuBuilder.generate_not_only_allocatedúsπؗ}”}ˆGØ × ,Ñ ,¨WÕ 5ð%ð × Ñ  5Ñ (Ø �J‰J× 'Ñ '¨¯ © Ô 5؈KØŸ œ �Ø"Ÿj™j¨¯©×)DÑ)DÀTÇ\Á\Ó)RÐTUÓV‘ ð#ó)� Ø—=‘= DÒ(Ø×%Ñ%×,Ñ,¨TÔ2Ø$)�I”MØ*.�IÔ'Ø×$Ñ$×+Ñ+¨IÕ6ñ )ð )rcóØ—|jD]}|j|«Œ|jdurº|jj |j «g}|j D]7}|j|jj|j «d«}Œ9|D]G}|jdusŒ|jj|«|jj|«ŒIyy)NTrï) r?r`r=rZr¸r6r>rör¹rórrIr;rÍs rr`z&XMLMenuBuilder.generate_only_allocated sÀ€Ø—}”}ˆGØ × (Ñ (¨Õ 1ð%ð × Ñ  4Ñ 'Ø �J‰J× 'Ñ '¨¯ © Ô 5؈KØŸ œ �Ø"Ÿj™j¨¯©×)DÑ)DÀTÇ\Á\Ó)RÐTUÓV‘ ð#ã(� Ø—=‘= DÒ(Ø×%Ñ%×,Ñ,¨TÔ2ð×$Ñ$×+Ñ+¨IÕ6ñ )ð (rcóv—|jD]}|j|«Œ|jD�]}|j|j«}|sŒ"|j|j «}|j j d«}d}t|«dkDrv|s|}|j|d«}|s:t«}|d|_ t|«dkDrd|_ |j|«|}|jd«t|«dkDrŒv|z }|jjj|«�Œ y)NrorrpT)r?r]r<rsr¾r¿rqrrr*rr3rJrxr2r§) rArbrPrOÚmove_from_menuÚ move_to_menur�Ú oldparentr¬s rr]zXMLMenuBuilder.handle_movess €Ø—}”}ˆGØ × Ñ ˜gÕ &ð%ð—J•JˆDØ!Ÿ\™\¨$¯(©(Ó3ˆNÚà#Ÿ|™|¨D¯H©HÓ5� àŸ™Ÿ™ sÓ+�Ø � ܘ%“j 1’nÙ$Ø$(˜ Ø'×/Ñ/°°a±Ó9�GÙ"Ü"&£&˜Ø',¨Q¡x˜œ ܘu›:¨š>Ø/3˜GÔ,Ø!×,Ñ,¨WÔ5Ø '�IØ—I‘I˜a”Lô˜%“j 1“nð˜>Ñ)�Ø×%Ñ%×.Ñ.×5Ñ5°nÖEñ-rrµrD)r¶r·r¸rBrVr[rdr�r€r{rŒr�rwrxryrzr}r~rr¦r‚r´rƒr^r_r`r]rºrrrIrIbs„„óó+òZó 2=òh òD ò  ò ò òH)ò Rò/ò _ò 6ò òjò 0ò4ò $òLò"6òr7ò"7ó FrrIcó,—eZdZdZd„Zdd„Zd„Zdd„Zy) rYzClass to cache Desktop Entriescó>—i|_g|jd<i|_y)NÚlegacy)Ú cacheEntriesrZr@s rrBzMenuEntryCache.__init__:s!€ØˆÔØ&(ˆ×ј(Ñ#؈� rcóv—|D]4}||jvsŒg|j|<|j|d||«Œ6y)Nr,)rÖÚ_MenuEntryCache__addFiles)rAr9rrÕrs rr¸zMenuEntryCache.add_menu_entries?s<€ÛˆDؘ4×,Ñ,Ò,Ø*,�×!Ñ! $Ñ'Ø—‘  b¨&°&Õ9ñrcóv—tjtjj||««D]ó}|j d«rl t tjj||«||«}|j|j|«|sŒa|jdj|«Œ€tjjtjj|||««sŒ¿|rŒÂ|j|tjj||«||«Œõy#t $rY�ŒwxYw)Nz.desktoprÕ) ryrªrtrzrTr—rrÖrIr3rØ)rArÚsubdirrrÕr¬rms rÚ __addFileszMenuEntryCache.__addFilesEsá€Ü—J‘JœrŸw™wŸ|™|¨D°&Ó9Ö:ˆDØ�}‰}˜ZÔ(ðÜ )¬"¯'©'¯,©,°v¸tÓ*DÀdÈFÓ S�Ið×!Ñ! $Ñ'×.Ñ.¨yÔ9ÚØ×%Ñ% hÑ/×6Ñ6°yÕAÜ—‘—‘œrŸw™wŸ|™|¨D°&¸$Ó?Õ@ÊØ—‘ ¤b§g¡g§l¡l°6¸4Ó&@À&È&ÕQñ;øô$òÚðúsÁ +D+Ä+ D8Ä7D8cóV—g}t«}|dd}|r|jd«dj|«} |j|S#t$rYnwxYw|D]À}|j |D]¬} |j |vr-|j|j «|j|«n_|j«tjk(r>|j|«} || } | j«tjk(r|| _ ŒŸ#t$rYŒªwxYwŒÂ||j|<|S)NrÕr,)r‘rIrzrZÚKeyErrorrÖrir“rr—rÚindexrrr«) rAr9rÕÚentriesÚidsÚappdirsÚkeyrrmÚidxrfs rr¹zMenuEntryCache.get_menu_entriesSs€ØˆÜ‹eˆà‘q�'ˆÙ Ø �N‰N˜8Ô $à�g‰g�gÓˆð Ø—:‘:˜c‘?Ð "øÜò Ù ð úãˆDØ!×.Ñ.¨tÔ4� ð Ø ×.Ñ.°cÑ9ØŸ™  × 7Ñ 7Ô8ØŸ™ yÕ1Ø"×*Ñ*Ó,´ ×0EÑ0EÒEà%Ÿm™m¨IÓ6˜Ø '¨¡ ˜Ø Ÿ=™=›?¬i×.AÑ.AÒAØ-6˜EœNùÜ)òÙðúñ5ðð"ˆ� ‰ �3‰Øˆs$·AÁ AÁAÁ-BDÄ DÄDN)r,F)T)r¶r·r¸r¹rBr¸rØr¹rºrrrYrY8s„Ù$òó :ò RôrrYcó6—t|«j|«S)zYHelper function. Equivalent to calling xdg.Menu.XMLMenuBuilder().parse(filename) )rIrV)rãrKs rrVrVrs€ô ˜%Ó × &Ñ & xÓ 0Ð0rr.)1r¹ryrrÂrrÚxml.etree.cElementTreerUÚ cElementTreeÚ ImportErrorÚxml.etree.ElementTreeÚ ElementTreeÚxdg.BaseDirectoryrrÚxdg.DesktopEntryrÚxdg.ExceptionsrÚxdg.utilrÚ xdg.LocalerŸÚ xdg.Configrr"r–r™r›r¦r¤ržr*r¼r:rÎr—rŠr³r2r4r6r<rArGÚobjectrIrYrVrºrrÚrñs ðñó& Û ÛÛ Û ð*ß*Ð*÷=Ý)Ý'ÝãÛò1òð €Ø € Ø €Ø€Ø€ Ø €÷l)ñl)÷^ (ñ(÷ñ÷0,ñ,÷^_"ñ_"÷Dñ÷ñðÑ€ˆ)ò òò#òôSF�VôSF÷l7ñ7ôt1øðo"ò*ß)Ò)ð*ús˜ CÃCÃC