ÿØÿà JFIF    ÿÛ „  ( %"1!%)+...383,7(-.+  -+++--++++---+-+-----+---------------+---+-++7-----ÿÀ  ß â" ÿÄ     ÿÄ H    !1AQaq"‘¡2B±ÁÑð#R“Ò Tbr‚²á3csƒ’ÂñDS¢³$CÿÄ   ÿÄ %  !1AQa"23‘ÿÚ   ? ôÿ ¨pŸªáÿ —åYõõ\?àÒü©ŠÄï¨pŸªáÿ —åYõõ\?àÓü©ŠÄá 0Ÿªáÿ Ÿå[úƒ ú®ði~TÁbqÐ8OÕpÿ ƒOò¤Oè`–RÂáœá™êi€ßÉ< FtŸI“öÌ8úDf´°å}“¾œ6  öFá°y¥jñÇh†ˆ¢ã/ÃÐ:ªcÈ "Y¡ðÑl>ÿ ”ÏËte:qž\oäŠe÷󲍷˜HT4&ÿ ÓÐü6ö®¿øþßèô Ÿ•7Ñi’•j|“ñì>b…þS?*Óôÿ ÓÐü*h¥£ír¶ü UãS炟[AÐaè[ûª•õ&õj?†Éö+EzP—WeÒírJFt ‘BŒ†Ï‡%#tE Øz ¥OÛ«!1›üä±Í™%ºÍãö]°î(–:@<‹ŒÊö×òÆt¦ãº+‡¦%ÌÁ²h´OƒJŒtMÜ>ÀÜÊw3Y´•牋4ǍýʏTì>œú=Íwhyë,¾Ôò×õ¿ßÊa»«þˆѪQ|%6ž™A õ%:øj<>É—ÿ Å_ˆCbõ¥š±ý¯Ýƒï…¶|RëócÍf溪“t.СøTÿ *Ä¿-{†çàczůŽ_–^XþŒ±miB[X±d 1,é”zEù»& î9gœf™9Ð'.;—™i}!ôšåîqêÛ٤ёý£½ÆA–àôe"A$˝Úsäÿ ÷Û #°xŸëí(l »ý3—¥5m! rt`†0~'j2(]S¦¦kv,ÚÇ l¦øJA£Šƒ J3E8ÙiŽ:cÉžúeZ°€¯\®kÖ(79«Ž:¯X”¾³Š&¡* ….‰Ž(ÜíŸ2¥ª‡×Hi²TF¤ò[¨íÈRëÉ䢍mgÑ.Ÿ<öäS0í„ǹÁU´f#Vß;Õ–…P@3ío<ä-±»Ž.L|kªÀê›fÂ6@»eu‚|ÓaÞÆŸ…¨ááå>åŠ?cKü6ùTÍÆ”†sĤÚ;H2RÚ†õ\Ö·Ÿn'¾ ñ#ºI¤Å´%çÁ­‚â7›‹qT3Iï¨ÖÚ5I7Ë!ÅOóŸ¶øÝñØôת¦$Tcö‘[«Ö³šÒ';Aþ ¸èíg A2Z"i¸vdÄ÷.iõ®§)¿]¤À†–‡É&ä{V¶iŽ”.Ó×Õÿ û?h¬Mt–íª[ÿ Ñÿ ÌV(í}=ibÔ¡›¥¢±b Lô¥‡piη_Z<‡z§èŒ)iÖwiÇ 2hÙ3·=’d÷8éŽ1¦¸c¤µ€7›7Ø ð\á)} ¹fËí›pAÃL%âc2 í§æQz¿;T8sæ°qø)QFMð‰XŒÂ±N¢aF¨…8¯!U  Z©RÊ ÖPVÄÀÍin™Ì-GˆªÅËŠ›•zË}º±ŽÍFò¹}Uw×#ä5B¤{î}Ð<ÙD é©¤&‡ïDbàÁôMÁ." ¤‡ú*õ'VŽ|¼´Úgllº¼klz[Æüï÷Aób‡Eÿ dÑ»Xx9ÃÜ£ÁT/`¼¸vI±Ýµ·Ë‚“G³þ*Ÿû´r|*}<¨îºœ @¦mÄ’M¹”.œ«Y–|6ÏU¤jç¥ÕÞqO ˜kDÆÁ¨5ÿ š;ÐЦ¦€GÙk \ –Þ=â¼=SͧµªS°ÚÍpÜãQűÀõ¬?ÃÁ1Ñ•õZà?hóœ€ L¦l{Y*K˜Ù›zc˜–ˆâ ø+¾ ­-Ök¥%ùEÜA'}ˆ><ÊIè“bpÍ/qÞâvoX€w,\úªò6Z[XdÒæ­@Ö—€$òJí#é>'°Ú ôª˜<)4ryÙ£|óAÅn5žêŸyÒäMÝ2{"}‰–¤l÷ûWX\l¾Á¸góÉOÔ /óñB¤f¸çñ[.P˜ZsÊË*ßT܈§QN¢’¡¨§V¼(Üù*eÕ“”5T¨‹Âê¥FŒã½Dü[8'Ò¥a…Ú¶k7a *•›¼'Ò·\8¨ª\@\õ¢¦íq+DÙrmÎ…_ªæ»ŠÓœ¡¯’Ré9MÅ×D™lælffc+ŒÑ,ý™ÿ ¯þǤ=Å’Á7µ÷ÚÛ/“Ü€ñýã¼àí¾ÕÑ+ƒ,uµMâÀÄbm:ÒÎPæ{˜Gz[ƒ¯«® KHà`ߨŠéí¯P8Aq.C‰ à€kòpj´kN¶qô€…Õ,ÜNŠª-­{Zö’æû44‰sŽè‰îVíRœÕm" 6?³D9¡ÇTíÅꋇ`4«¸ÝÁô ï’ýorqКÇZ«x4Žâéþuïf¹µö[P ,Q£éaX±`PÉÍZ ¸äYúg üAx ’6Lê‚xÝÓ*äQ  Ï’¨hÍ =²,6ï#rÃ<¯–£»ƒ‹,–ê•€ aÛsñ'%Æ"®ÛüìBᝠHÚ3ß°©$“XnœÖ’î2ËTeûìxîß ¦å¿çÉ ðK§þ{‘t‚Ϋ¬jéîZ[ ”š7L¥4VÚCE×]m¤Øy”ä4-dz£œ§¸x.*ãÊÊ b÷•h:©‡¦s`BTÁRû¾g⻩‹jø sF¢àJøFl‘È•Xᓁà~*j¯ +(ÚÕ6-£¯÷GŠØy‚<Ç’.F‹Hœw(+)ÜÜâÈzÄäT§FߘãÏ;DmVœ3Àu@mÚüXÝü•3B¨òÌÁÛ<·ÃÜ z,Ì@õÅ·d2]ü8s÷IôÞ¯^Ç9¢u„~ëAŸï4«M? K]­ÅàPl@s_ p:°¬ZR”´›JC[CS.h‹ƒïËœ«Æ]–÷ó‚wR×k7X‰k›‘´ù¦=¡«‰¨¨Â')—71ó’c‡Ðúµ `é.{§p¹ój\Ž{1h{o±Ý=áUÊïGÖŒõ–-BÄm+AZX¶¡ ïHðæ¥JmÙ;…䡟ˆ¦ ° äšiÉg«$üMk5¤L“’çÊvïâï ,=f“"íἊ5ô¬x6{ɏžID0e¸vçmi'︧ºð9$ò¹÷*£’9ÿ ²TÔ…×>JV¥}Œ}$p[bÔ®*[jzS*8 ”·T›Í–ñUîƒwo$áè=LT™ç—~ô·¤ÈÚ$榍q‰„+´kFm)ž‹©i–ËqÞŠ‰à¶ü( ‚•§ •°ò·‡#5ª•µÊ﯅¡X¨šÁ*F#TXJÊ ušJVÍ&=iÄs1‚3•'fý§5Ñ<=[íÞ­ PÚ;ѱÌ_~Ä££8rÞ ²w;’hDT°>ÈG¬8Á²ÚzŽ®ò®qZcqJêäÞ-ö[ܘbň±çb“ж31²n×iƒðÕ;1¶þÉ ªX‰,ßqÏ$>•î íZ¥Z 1{ç൵+ƒÕµ¥°T$§K]á»Ûï*·¤tMI’ÂZbŽÕiÒ˜}bÓ0£ª5›¨ [5Ž^ÝœWøÂÝh° ¢OWun£¤5 a2Z.G2³YL]jåtì”ä ÁÓ‘%"©<Ôúʰsº UZvä‡ÄiÆÒM .÷V·™ø#kèýiíÌ–ª)µT[)BˆõÑ xB¾B€ÖT¨.¥~ð@VĶr#¸ü*åZNDŽH;âi ],©£öØpù(šºãö¼T.uCê•4@ÿ GÕÛ)Cx›®0ø#:ÏðFÒbR\(€€Ä®fã4Þ‰Fä¯HXƒÅ,†öEÑÔÜ]Öv²?tLÃvBY£ú6Êu5ÅAQ³1‘’¬x–HŒÐ‡ ^ ¸KwJôÖŽ5×CÚ¨vÜ«/B0$×k°=ðbÇ(Ï)w±A†Á† 11Í=èQšµ626ŒÜ/`G«µ<}—-Ö7KEHÈÉðóȤmݱû±·ø«Snmá=“䫚mݱŸ¡¶~ó·“äUóJæúòB|E LêŽy´jDÔ$G¢þÐñ7óR8ýÒ…Ç› WVe#·Ÿ p·Fx~•ݤF÷0Èÿ K¯æS<6’¡WШ; ´ÿ ¥Êø\Òuî†åÝ–VNœkÒ7oòX¨Á­Ø÷FÎÑä±g÷ÿ M~Çî=p,X´ ÝÌÚÅ‹’ÃjÖ.ØöÏñ qïQ¤ÓZE†° =6·]܈ s¸>v•Ž^Ý\wq9r‰Î\¸¡kURÒ$­*‹Nq?Þª*!sŠÆ:TU_u±T+øX¡ ®¹¡,ÄâÃBTsÜ$Ø›4m椴zÜK]’’›Pƒ @€#â˜`é¹=I‡fiV•Ôî“nRm+µFPOhÍ0B£ €+¬5c v•:P'ÒyÎ ‰V~‚Ó†ÖuókDoh$å\*ö%Ю=£«…aȼ½÷Û.-½VŒŠ¼'lyî±1¬3ó#ÞE¿ÔS¤gV£m›=§\û"—WU¤ÚǼÿ ÂnÁGŒÃ ‚õN D³õNÚíŒÕ;HôyÄÈ©P¹Ä{:?R‘Ô¨âF÷ø£bÅó® JS|‚R÷ivýáâ€Æé¡è³´IئÑT!§˜•ت‚¬â@q€wnïCWÄ@JU€ê¯m6]Ï:£âx'+ÒðXvÓ¦Úm=–´7œ $ì“B£~p%ÕŸUþ« N@¼üï~w˜ñø5®—'Ôe»¤5ã//€ž~‰Tþ›Å7•#¤× Íö pÄ$ùeåì*«ÓŠEØWEÈsßg ¦ûvžSsLpºÊW–âµEWöˬH; ™!CYõZ ÃÄf æ#1W. \uWâ\,\Çf j’<qTbên›Î[vxx£ë 'ö¨1›˜ÀM¼Pÿ H)ƒêêŒA7s,|F“ 꺸k³9Ìö*ç®;Ö!Ö$Eiž•¹ÒÚ†ýóéÝû¾ÕS®ó$’NÝäŸz¤5r¦ãÄÃD÷Üø!°ø‡Ô&@m™Ì^Ãä­d q5Lnÿ N;.6½·N|#ä"1Nƒx“ã<3('&ñßt  ~ªu”1Tb㫨9ê–›–bìd$ߣ=#ÕãÒmU¯eí$EFù5ýYô櫨æì™Ç—±ssM]·á¿0ÕåJRÓªîiƒ+O58ÖñªŠÒx" \µâá¨i’¤i —Ö ” M+M¤ë9‚‰A¦°Qõ¾ßøK~¼Ã‘g…Ö´~÷Ï[3GUœÒ½#…kàÔ®Ò”‰³·dWV‰IP‰Ú8u¹”E ÖqLj¾êÕCBš{A^Âß;–¨`¯¬ìö ˼ ×tìø.tƐm*n¨y4o&Àx¥n¦×î‡aupáÛj8¿m›è¶ã!o½;ß0y^ý×^EÑ¿ÒjzŒ­)vÚÑnÄL …^ªô× ‡—‚3k Îý­hï]içå–îÏ*÷ñþ»Ô CÒjøjÍznˆ´ ¹#b'Fô‹ ‰v¥'’à'T´ƒHýÍ%M‰ ƒ&ÆÇŒï1 ‘ –Þ ‰i¬s žR-Ÿ kЬá¬7:þ 0ŒÅÒÕ/aÙ¬ÃÝ#Úøœ ©aiVc‰. ¹¦ãµ” ›Yg¦›ÆÎýº°f³7ƒhá·¸­}&D9¡ÂsÉÙÞèŠõØàC™¨ñbFC|´Ü(ŸƒÚÒ-%»'a Ì¿)ËÇn¿úÿ ÞŽX…4ÊÅH^ôΑí@ù¹Eh¶“L8Çjù ¼ÎåVªóR©Ï5uà V4lZß®=€xÖŸ–ÑÈ ÷”¨°¾__yM1tÉ?uÆþIkÄgæ@þ[¢†°XÃJ£j·:nkÅ¢u ‘}âGzö­/IµèЬ¼48q¦F°ŽR¼=ûì{´¯RýicS ÕÛ íNtÍÙï£,w4rêì®»~x(©Uñ§#Ñ&œÕ¤>ÎåÍÓ9’Ö{9eV­[Öjâ²ãu]˜å2›qÑšÕJç0€sÄ|Êëè0튔bÁ>“{×_F`Ø©ºê:µä,v¤ðfc1±"«ÔÍän1#=· Âøv~H½ÐßA¾¿Ü€Óš]Õ; I¾÷ç‚Qi†î¹9ywÔKG˜áñ zQY—§ÃÕZ07§X‚ Áh;ÁM)iÌCH-¯T‘ë|A0{Ò½LÚ–TâÖkÜ’dÀ“rmm»”جPF³ÖcbE§T€ÒxKºû’Ó®7±²(\4ŽÃ¸Uu@j™yĵ;³µ!Á¢b.W¤=mõ´êµK k ¸K^ÜÛ#p*Ü14qkZç5ïë †°5Ï%ÍÛ<Õ¤×Ô¥ê†C Õ´¼ú$ƒÖ“”]Ù¬qÞÚ[4©ý!ûÏ—Áb쳐XµA¬â~`›Çr¸8ìùÝ䫦<>ä÷«?xs´ÇÑ /á;¹øüÊÈÙà{"@Žïzâ¬[âß‚ U_<ÇŸ½4èN˜ú61®qŠu ¦þF£»äJ_ˆÙÎ~ ÞAã–݄ϗrŠD;xTž‘ô`É«…suãO`?³à™ô Lý#Íc5öoæØ‚y´´÷«ZR§<&JÇ+éâô´€i!Àˆ0æAoàðLèÖ-2ŸõW.’t^–(KÁmHµV@xÜÇy®Ñø­â^:Ú3w· 7½¹°ñ¸â¹®:',«Mœ—n­Á+Ãbš LÈ‘ÄnRÓÅœ%¦²‰¨ùQ:¤f‚ "PÕtô¸…cæl…&˜Ú˜Ôkv‹ž+vŠ,=¢v­6—Xy*¥t£«<™:“aîϲ=¦6rO]XI¿Œ÷¤zÚ­›¶ 6÷”w\d ü~v®ˆÌk«^m<ÿ ¢‰Õ\)ùºŽ;… lîÙÅEŠ®cѾ@vnMÏ,¼“ñ•ŽBxðÃzãÇç%3ˆ"}Ù•Åî> BÉú;Ò]V+P˜F_´ßé> Øše|ï‡ÄOmFæÇ ãqÞ$/xÐx­z`ï9"œÜij‚!7.\Td…9M‡•iŽ‹¾‘50ÞŽn¥ß4ÉôO ¹*í^QêËÜÇÌ8=ާs‰'ÂëÙ«á%Pú[O †ÅP¯Vsް.‰,kc¶ ¬A9n˜XÎ-ÞšN["¹QÕ‰ƒMýÁߺXJæÍaLj¾×Ãmã¾ãÚ uñÒþåQô¦¥ /ÄUx:‚ÍÜ’ Đ©ØÝ3V¨‰ÕnÐ6ó*óúK­«…c ¯U òhsý­jóÔj#,ímŒRµ«lbïUTŒÑ8†Ä0œÏr`ð¡¬É Ї ë"À² ™ 6¥ f¶ ¢ÚoܱԷ-<Àî)†a¶ž'Ú»¨TXqØæ¶÷YÄHy˜9ÈIW­YÀuMFë ºÏ’AqÌ4·/Ú †ô'i$øä­=Ä Ý|öK×40è|È6p‘0§)o¥ctî§H+CA-“ xØ|ÐXАç l8íºð3Ø:³¤¬KX¯UÿÙ U m^r@s*dZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl m Z ddl Z e ddeddlZz4ddlZddlmZmZmZeeeefeZeZWnHek rddlmZmZddlmZdd lmZmZddlZYnXddlZdd lm Z Gd d d e Z!e!Z"dS) zyapport.PackageInfo class implementation for python-apt and dpkg. This is used on Debian and derivatives such as Ubuntu. N)closingignorezapt API not stable yet)urlopenquoteunquote)URLError HTTPError)r)rr) PackageInfoc@seZdZdZddZddZddZdd Zd d Zd d Z ddZ ddZ ddZ ddZ ddZddZddZddZddZd d!Zd"d#Zd_d%d&Zd'd(Zd)d*Zd+d,Zd-d.Zd/d0Zd1d2Zd`d4d5Zed6d7Zd8d9Zd:d;Z dadd?Z"d@dAZ#dbdCdDZ$dEdFZ%edGdHZ&dIdJZ'edKdLZ(dMdNZ)dOdPZ*dQdRZ+edSdTZ,edUdVZ-edWdXZ.dYdZZ/d3Z0d[d\Z1d3Z2d]d^Z3d3S)c__AptDpkgPackageInfozConcrete apport.PackageInfo class implementation for python-apt and dpkg, as found on Debian and derivatives such as Ubuntu.cCsFd|_d|_d|_d|_d|_d|_d|_d|_|jd|_d|_ dS)Nzhttps://api.launchpad.net/develz*/~%(user)s/+archive/%(distro)s/%(ppaname)sF) _apt_cache_sandbox_apt_cache_sandbox_apt_cache_arch _contents_dir_mirror_virtual_mapping_obj_contents_mapping_objZ_launchpad_base_ppa_archive_url_contents_updateselfr7/usr/lib/python3/dist-packages/apport/packaging_impl.py__init__-s z__AptDpkgPackageInfo.__init__cCs0z|jrt|jWntk r*YnXdS)N)rshutilrmtreeAttributeErrorrrrr__del__9s z__AptDpkgPackageInfo.__del__c CsZ|jdk r|jStj|d}tj|rNt|d}t||_W5QRXni|_|jS)Nvirtual_mapping.picklerb)rospathjoinexistsopenpickleloadr configdir mapping_filefprrr_virtual_mapping@s   z%__AptDpkgPackageInfo._virtual_mappingc Cs@tj|d}|jdk rupdatecacheFetchFailedException SystemErrorstrr#clear) raptroot apt_sources fetchProgress distro_namerelease_codenameoriginsr/r:errr_sandbox_caches     z#__AptDpkgPackageInfo._sandbox_cachecCs4z||WStk r.td|YnXdS)zuReturn apt.Cache()[package] (initialized lazily). Throw a ValueError if the package does not exist. package %s does not existN)r?KeyError ValueErrorrpackagerrr_apt_pkgsz__AptDpkgPackageInfo._apt_pkgcCs&||}|j}|s td||jS)z*Return the installed version of a package.rP)rU installedrRversion)rrTpkginstrrr get_versions   z __AptDpkgPackageInfo.get_versioncCs||jjS)z1Return the latest available version of a package.)rU candidaterWrSrrrget_available_versionsz*__AptDpkgPackageInfo.get_available_versioncCsJ||jj}|sgSdd|jdg|jdg|jdgDS)z/Return a list of packages a package depends on.cSsg|]}|djjqSr)Z target_pkgname).0drrr sz9__AptDpkgPackageInfo.get_dependencies..ZDependsZ PreDependsZ Recommends)rUZ_pkgZ current_verZ depends_listget)rrTZcur_verrrrget_dependenciess   z%__AptDpkgPackageInfo.get_dependenciescCsD||jr||jjS||jr4||jjStd|dS)z-Return the source package name for a package.rPN)rUrV source_namer[rRrSrrr get_sources   z__AptDpkgPackageInfo.get_sourcecCs8||j}|std|jD]}|jr|jSqdS)zReturn package origin. Return the repository name from which a package was installed, or None if it cannot be determined. Throw ValueError if package is not installed. zpackage is not installedN)rUrVrRrMorigin)rrTrXrfrrrget_package_origins   z'__AptDpkgPackageInfo.get_package_origincCs||}|jr |jjdkr dS|d}|jrX|jjrX|jjD]}|j|krBdSqBtdd|jjDtdgkrtj drdSdS) zCheck if a package is a genuine distro package. Return True for a native distro package, False if it comes from a third-party source. NFrTcSsg|] }|jqSr)rf)r_orrrrasz:__AptDpkgPackageInfo.is_distro_package..z/etc/system-image/channel.ini) rUrVrWget_os_versionr[rMrfsetrr r")rrTrXrKrhrrris_distro_packages      z&__AptDpkgPackageInfo.is_distro_packagec Cs||}|jr |jjdkr dSg}tdD]R}z8t|&}|D]}|}|rB||qBW5QRXWq.tk r~Yq.Xq.|jr|jj r|jj D]}|j |krdSqdS)zCheck if a package originated from a native location Return True for a package which came from an origin which is listed in native-origins.d, False if it comes from a third-party source. NFz/etc/apport/native-origins.d/*T) rUrVrWglobr#stripappendIOErrorr[rMrf)rrTrXZnative_originsffdlinerhrrris_native_origin_packages$    z-__AptDpkgPackageInfo.is_native_origin_packagecCstjjddddlm}|jdddd}|jd }|j| d d } | j |d } |j d d} | j ||| ddd} | s~dSd} | D]D}|j dkrq|js|jdd} qq|j|r|jdd} qq| sdS| D]}|d|dfSdS)NzAPT::Get::AllowUnauthenticatedTruer Launchpadapport-retrace productiondevelrWubuntu)Zname_or_version)Zarchtagprimaryr^FT)Z binary_namerWZdistro_arch_seriesZordered exact_match)NNriDeleted)Z include_metaurlZsha1)r;apt_pkgconfigrklaunchpadlib.launchpadrwlogin_anonymously distributionsZ getSeriessplitZgetDistroArchSeries getArchiveZgetPublishedBinariesstatusZarchitecture_specificZbinaryFileUrlsZdistro_arch_series_linkendswith)r distro_idr.rTrWr/rw launchpadr|ZseriesZdasr~ZbpphZbf_urlsZbpZbfrrrget_lp_binary_package s<        z*__AptDpkgPackageInfo.get_lp_binary_packageFc Csz(t|}|dkr&td|Wn,ttfk rTtdt|YdSXz |}Wn(tk rtdt|YdSXt |t r| d}|rt |dSt |SdS)zOpen, read and parse the json of a url Set entries to True when the json data returned by Launchpad has a dictionary with an entries key which contains the data desired. %uzcannot connect to: %sNzfailure reading data at: %szutf-8entries)rgetcoderrapportwarningrreadrp isinstancebytesdecodejsonloads)rrrresponseZcontentrrr json_request+s"    z!__AptDpkgPackageInfo.json_requestc Csddlm}|jdddd}|jd}|jdd }|j||d d }|sJdSd } |D]} | jd krbqR| } qpqR| sxdSg} | D]} | | q| S)Nrrvrxryrzr{r|r~rT)rdrWrrir) rrwrrrZgetPublishedSourcesrZsourceFileUrlsro) rrrTrWrwrr|r~ZpssZsfusZpsZ source_filesZsfurrrget_lp_source_packageEs.     z*__AptDpkgPackageInfo.get_lp_source_packagecCsL||jr||jjpdS||jr<||jjp:dStd|dS)zReturn the architecture of a package. This might differ on multiarch architectures (e. g. an i386 Firefox package on a x86_64 system)unknownrPN)rUrV architecturer[rRrSrrrget_architecture]s   z%__AptDpkgPackageInfo.get_architecturecCs,|d|g}|dkrdSdd|DS)z*Return list of files shipped by a package.z-LNcSsg|]}|ds|qS)Zdiverted) startswith)r_rqrrrraps z2__AptDpkgPackageInfo.get_files..) _call_dpkg splitlines)rrTlistrrr get_filesjsz__AptDpkgPackageInfo.get_filesc Cshd||f}tj|s$d|}z,t|}t|js@tt|j |j }Wntk rhgYSXd}d||f}tj|sd|}tj|sgSt |d}|D]}znd|krt d|Wq|} | st d |Wqtd | d d d }t|j |j |kr"WqWntk r:YnX||7}qW5QRX|r`||SgSd S)z/Return list of all modified files of a package.z/var/lib/dpkg/info/%s:%s.listz/var/lib/dpkg/info/%s.listz /var/lib/dpkg/info/%s:%s.md5sumsz/var/lib/dpkg/info/%s.md5sumsrz(%s contains NUL character, ignoring linez%%s contains empty line, ignoring liner8r}UTF-8N)get_system_architecturerr r"r1S_ISREGst_modeOSErrormaxst_mtimest_ctimer#rrrrencode_check_files_md5) rrTZlistfilesZmax_timeZsumssumfilerrrsZwordsrrrget_modified_filesrsF          z'__AptDpkgPackageInfo.get_modified_filesc Cstjddd|gtjd}|d}|jdkr6iSi}|D]}|sLqB|dd\}}t j |rzLt |d}| } W5QRXt} | | | } | |kr| ||<Wqtk r} zd t| ||<W5d} ~ XYqXqBd ||<qB|S) a?Return modified configuration files of a package. Return a file name -> file contents map of all configuration files of package. Please note that apport.hookutils.attach_conffiles() is the official user-facing API for this, which will ask for confirmation and allows filtering. z dpkg-queryz-Wz--showformat=${Conffiles}stdoutrNrz[inaccessible: %s]z [deleted]) subprocessPopenPIPE communicater returncoderrnrrr r"r#rhashlibZmd5rBZ hexdigestrprF) rrTdpkgoutmodifiedrsr Zdefault_md5sumrrcontentsmZcalculated_md5sumrNrrrget_modified_conffiless4       $ z+__AptDpkgPackageInfo.get_modified_conffilescCs|d}d}d}|sx|t|krxtjdddd|g||||tjtjtjd}|dd }|jdkrn|}||7}q |S) zsCall fgrep for a pattern on given file list and return the first matching file, or None if no file matches.NdrZfgrepz-lxm1z--)stdinrstderrr)lenrrrrrr)rpatternZ file_listmatchZ slice_sizeiprrrrZ __fgrep_filess   z"__AptDpkgPackageInfo.__fgrep_filesNcCst|r|||||Stjdd|gtjtjd}|dd}|jdkrf|rf|d}|dkrf|Stj tj |d } g} g} t dD]P} tj tj | d d d} | | ks| | kr| | q| | q||| }|s||| }|sH|d rH|d d }|d || }|sH|d || }|rptj tj |dd dSd S)apReturn the package a file belongs to. Return None if the file is not shipped by any package. If uninstalled is True, this will also find files of uninstalled packages; this is very expensive, though, and needs network access and lots of CPU and I/O resources. In this case, map_cachedir can be set to an existing directory which will be used to permanently store the downloaded maps. If it is not set, a temporary directory will be used. Also, release and arch can be set to a foreign release/architecture instead of the one from the current system. z dpkg-divertz--listrrrrr}zhardening-wrapperz/var/lib/dpkg/info/*.list:z/usrN%s)_search_contentsrrrrrrrrr splitextbasenamelowerrmro _AptDpkgPackageInfo__fgrep_filesr)rfileZ uninstalled map_cachedirr.r/rrrXfnameZ all_listsZ likely_listsrqrrrrrget_file_packages<  &     "z%__AptDpkgPackageInfo.get_file_packagecCsBtjddgtjd}|d}|jdks6t|s>t|S)zcReturn the architecture of the system, in the notation used by the particular distribution.rz--print-architecturerrrrrrrrnrAssertionError)klassrr/rrrrs z,__AptDpkgPackageInfo.get_system_architecturecCs>tjddgtjd}|d}|jdks6td|S)zReturn a list of default library search paths. The entries should be separated with a colon ':', like for $LD_LIBRARY_PATH. This needs to take any multiarch directories into account. zdpkg-architecturez-qDEB_HOST_MULTIARCHrrz /lib/%s:/libr)rrZmultiarch_triplerrrget_library_pathss  z&__AptDpkgPackageInfo.get_library_pathscCs<||_z|jr t|jd|_Wntk r6YnXdS)zExplicitly set a distribution mirror URL for operations that need to fetch distribution files/packages from the network. By default, the mirror will be read from the system configuration files. N)rrrrr)rrrrr set_mirror-s  z__AptDpkgPackageInfo.set_mirrorcCs&tj}|r:t}|d|||j|d<|rRt j dddg|ddddd|g}|rx|d d |7<zt j |||d d kr|sWd S| | ||} | rd} t jjddkrt jjd} t jjddt jj} t j| } g} | D]}| t jj| ||dq| }|| jkrBWd S| rXt jjd| ttj|dD] }t j ddd|gt j|dqlnWd SWntk rYd SXd }ttj||dD]}tj|r|}q|st dzt j dd|dWntk r YnX|S)a:Download source package and unpack it into dir. This also has to care about applying patches etc., so that dir will eventually contain the actually compiled source. dir needs to exist and should be empty. If version is given, this particular version will be retrieved. Otherwise this will fetch the latest available version. If sandbox is given, it calls apt-get source in that sandbox, otherwise it uses the system apt configuration. If apt_update is True, it will call apt-get update before apt-get source. This is mostly necessary for freshly created sandboxes. Return the directory that contains the actual source root directory (which might be a subdirectory of dir). Return None if the source is not available. zODir "%s"; Dir::State::Status "/var/lib/dpkg/status"; Debug::NoLocking "true"; Z APT_CONFIGzapt-getz-qqrB)envz --assume-yessourcer}=)cwdrrNrizAcquire::http::Proxy)destdirz*.dscz dpkg-sourcez-sn-x)rrz-*z.could not determine source tree root directoryz(debian/rules patch || debian/rules apply-patches || debian/rules apply-dpatches || debian/rules unpack || debian/rules patch-stamp || debian/rules setup) >/dev/null 2>&1T)shellr)!renvironcopytempfileZNamedTemporaryFilewriterflushr^rcallrget_distro_namer;rrfindrkr<r=AcquireProgressAcquirero AcquireFilerunZRESULT_CONTINUErmr r!rrisdirr)rZ srcpackagedirrWZsandboxZ apt_updaterrqargvZsf_urlsproxyrJfetcherZaf_queueZsfresultZdscrootr`rrrget_source_tree>s~            z$__AptDpkgPackageInfo.get_source_treecCsdtdS)zReturn the actual Linux kernel package name. This is used when the user reports a bug against the "linux" package. z linux-image-r)runamerrrrget_kernel_packagesz'__AptDpkgPackageInfo.get_kernel_packagecCsg}g}|dd}|d}|dd}d|}|}||krZ||jrZ||fStjjdd} d|||f} d | } ttj | | d } t | } | d krd S| d }|sq| |q| | tddtj | | g}|dkr|| dd||fS)zInstall kernel debug package Ideally this would be just another package but the kernel is special in various ways currently so we can not use the apt method. ZUnameZ ArchitectureZPackagezlinux-image-debug-%sDir::Cache::archivesz/partialz %s_%s_%s.ddebz,http://ddebs.ubuntu.com/pool/main/l/linux/%swr)riZlinuxi rz-ir_)rr?Z isInstalledr;rrfind_dirr#rr r!rrrrrcloserrro)rreportrVZoutdatedZkverr/verZ debug_pkgnamecZ target_dirdebrrublockZretrrr_install_debug_kernels4    z*__AptDpkgPackageInfo._install_debug_kernelTc =s |s |}|s d} ||_ntj||d} ||kr^tj|||d} tj| r^| } z||| Wn4t k r}zt dt |W5d}~XYnXt tj||d}||_W5QRXtj| st d| |rVd}||kr |}nd}|r*tj|||d }ntj|d |d }tj|sbt|n d }t}tjjd |tjjd dtjjddtjjdd|rtjj}n tjj}|s||| |||j| |nx||| ||j| tjtj |dz!|Wn4tj"j#k rT}zt t |W5d}~XYnX tjj$d}d}tj%}tj|d}i}tj|rt |8}|D],}|}|sq|&\}}|||<qW5QRXt}i}tj'|}g}| rNg} |D]8\}!}"z |!}#WnBt(k r`d|!)dd}$||$d7}t |$YqYnX|#j*j+D]}%|%dj,j*j-}&|%dj,dd|Dkrqj|%dj,|kr||%dj,}'|.|'|&dkr| /|%dj,|'fn| /|%dj,|&fn| /|%dj,|&f|%dj,dd|Dkrj|/|%dj,dfqjq|0| |D]\}!}"z |!}#WnBt(k rd|!)dd}$||$d7}t |$YqRYnXz|"r|#j1|"|#_*Wntt(k r6|2|||!|"|\}(})|(r|/tjj3||(d|)|d|"||!<n|d |!|"|#j*j-f7}YnX|#j*}*|4|!|rB|5|}+|*j6D]}|+7|t4|!q^g},d!|*j8kr|,tj9|*j8d!7},d"|*j8kr|,tj9|*j8d"7},|,D]x}-|-dd|*j:j,krq|-d}-;|-drz|+|-d}.Wnt(k r*YqYnX|.D]}||*j:j,krFq0tj|d#|}/t<<|/D]4}0|=|0}"tj>|"|-d$|-d%rbt?|0qbz ||=Wnt(k rYnXq0~.n|tj|d#|-d}/t<<|/D]Z}0|=|0}"tj>|"|-d$|-d%rt?|0z||-d=Wnt(k r8YnXqq|*j@d&krR| rRz|!d'}1|1}2d}3|"rz|2j1|"|2_*d }3Wnft(k r|2|||1|"|\}(})|(r|/tjj3||(d|)|d|"||1<d }3nt(YnX|3s2z|2j1|*j-|2_*Wn,t(k r0|d(|!|"|2j*j-f7}YnX|4|1WqRt(k r|A|B|*jCrfd)d|jDD}4|"r|4D]"}2|2j*j-|"kr|4E|2qng}4|4 r|4D]}||kr̐qd}3|" rTz|j1|"|_*d }3Wn`t(k rR|2||||"|\}(})|( rN|/tjj3||(d|)|d|"||<d }3YnX|3 sz|j1|*j-|_*Wnt(k rYnX|4|qn`d}3|!d*}5zڈ|5}6|4|5|" r:z|6j1|"|6_*d }3Wn`t(k r8|2|||5|"|\}(})|( r4|/tjj3||(d|)|d|"||5<d }3YnX|3 sz|6j1|*j-|6_*Wn.t(k r|d+|!|*j-|6j*j-f7}YnXWnxt(k r|" r|2|||5|"|\}(})|( r|/tjj3||(d|)|d|"||5<d }3|3 s|d,|!7}YnXYnXqRtF|}7|GD]}||7k r|7|dk rj|H||j*j-k rX|E|n|IddnZ|H||7|k r|Iddn4|H||j*j-k r|Iddn |E|n4|H||j*j-k r|Iddn |E| qtJJ}8zjK|d-WnBtj"j#k rX}zt Ld.t |tMNd%W5d}~XYnX| rhtOd/|jPD]}9tQRd0d1|9jSgT}:|:&\}}| r||k stjU|9jS|8k r|H||k rn6||k r|||k rntQVd2d3|9jS|g|||<tjW|9jS&d4d%d};|;|k rn|E|; qntX|Y}<|}|.r}cSsg|] }|dqSr]rrrrrranszsha1:%s)hashrz,%s version %s required, but %s is available Z ConflictsZReplacesz%s_*.debrrall-dbgzAoutdated -dbg package for %s: package version %s -dbg version %s cs2g|]*}|dr|krd|jjkr|qS)rZ transitional)rr[Z description)r_rrCrrras  z-dbgsymzKoutdated debug symbol package for %s: package version %s dbgsym version %s z%no debug symbol package found for %s )rz+Package download error, try again later: %szExtracting downloaded debs...dpkg-debz--showrrrr z*apt fetcher did not fetch these packages: )`rget_distro_codenamecurrent_release_codenamerr r!r"r$_get_primary_mirror_from_apt_sourcesrErrrFr#rrnrmakedirsrmkdtempr;rrrkr<textrr=rOrr@r>rArBrCrDrZ SourceRecordsrrrQreplacer[Z dependenciesr^rWcompare_versionsroextendZversionsrraddr*Zprovides setdefaultrecordZ parse_dependsrTZis_virtual_packagerm _deb_versionZ check_depunlinkrZrestartlookuprdZbinariesr3dictrrbZ mark_installtimeZfetch_archiveserrorsysexitprintitemsrZ check_outputZdestfilergetctimeZ check_callrrkeyssortrrrrr-)=rr:r'r.ZpackagesverboseZ cache_dirZpermanent_rootdirrrMZ install_dbgZ install_depsrIZarch_apt_sourcesrNrqZ tmp_aptrootZ aptroot_archrHrJZ archivedirZobsoleteZ src_recordsZpkg_listZ pkg_versionsrsrvZ real_pkgsZlp_cacherZ acquire_queueZdepsrXrZ cache_pkgrZdepZ dep_pkg_versZ inst_versionZlp_urlZsha1sumr[Zvirtual_mappingZ conflictsZconflictZ providersZdebsr Zdbg_pkgZdbgZ pkg_foundZdbgsZ dbgsym_pkgZdbgsymZrequested_pkgsZ last_writtenrrpkg_nameZpkgsrrrinstall_packagess-    $                                                      $        z%__AptDpkgPackageInfo.install_packagescCstj||S)z2Return known package names which match given glob.)rmZfnmatchfilterr?r,)rZnameglobrrrpackage_name_globsz&__AptDpkgPackageInfo.package_name_globcCsHtjdg|tjtjd}|tdd}|jdkr<|StddS)zRCall dpkg with given arguments and return output, or return None on error.rrrrzpackage does not existN)rrrrinputrrrR)rargsrrrrrrs z__AptDpkgPackageInfo._call_dpkgcCstj|rBtjdd|gtjtjdid}|djddd}nLt|t ksVt d tjddgtjtjtjdid }||djddd}|j dkrgSg}| D]$}| d r||d d dq|S)zInternal function for calling md5sum. This is separate from get_modified_files so that it is automatically testable. z/usr/bin/md5sumz-cr8)rrrrrrr)errorsz&md5sum list value must be a byte array)rrrrrZFAILEDrr)rr r"rrrrrtyperrrrrrorsplit)rrrrZ mismatcheslrrrrs0      z%__AptDpkgPackageInfo._check_files_md5c Cst|}|D]p}|}t|dkr|ddkr|ddrFd}nd}||dsf||dr||W5QRSqtd |W5QRXd S) z?Heuristically determine primary mirror from an apt sources.listrrr[rzhttp://zhttps://zEcannot determine default mirror: %s does not contain a valid deb lineN)r#rrrrE)rrIrqr9ZfieldsZ mirror_idxrrrrs  z9__AptDpkgPackageInfo._get_primary_mirror_from_apt_sourcescCs|js|d|_|jS)zReturn the distribution mirror URL. If it has not been set yet, it will be read from the system configuration.r )rrrrrr _get_mirrors z __AptDpkgPackageInfo._get_mirrorcCs&t|dr|jdk r|jStddS)z7Map a DistroRelease: field value to a release code namerNzBCannot map DistroRelease to a code name without install_packages())hasattrrNotImplementedError)rr.rrr_distro_release_to_codenamesz0__AptDpkgPackageInfo._distro_release_to_codenamec Cs|r |}n|jst|_|j}|dkr0|}|dkrB|}n ||}dD]\}tj|d|||f}d}z t |} t t | j } Wnt k rd} YnX| dks| dkr.d||||f} | rzddlm} dd lm} Wn.tk r"ddlm} dd lm} YnXdd lm}| | d }| |}|d | | d |}|dd}|r||d}||| j k}nd}nd}|r.d|_z t| }Wn(tk r|dkr҂nYqPYnXt|d(}|d}|sq | |qW5QRX|!tj"|s.t#|$|||}|rPt%|d krVd|_|jrPddl&}|d|d2}d}|D] }|d 7}|dkr|dkr|dkrq|'d}|'dddkr6|'dd dkrq|'dd dkr|'dd dkrq|'d'dd'dd}n:|'dddkr|'d'dd'dd}nq||kr|||krqn|||<n|||<qW5QRXqP|jr|(|||d|_t)|t*r|+}|dd kr|d d}|,g}|-d!r(|.|d"d,n|-d#rL|.|d"d,n|-d$rp|.|d"d,nj|-d%r|.|d"d,nF|-d&r|.|d"d,n"|-d'r|.|d"d,|D]4}z||+}|WSt/k rYnXqdS)(z4Internal function for searching file in Contents.gz.N)z -proposedriz -securityz-updatesz%s%s-Contents-%s.gzFiQz%s/dists/%s%s/Contents-%s.gzr)HTTPConnection)urlparse)datetimerZHEADrz last-modifiedz%a, %d %b %Y %H:%M:%S %ZTrir+i@Brr)ZtrustyZxenial!/susr)libslibexecslibx32binsbinsharesgamessBrotherrH)sdocsiconssmanstexlivesgocodeslocaleshelpr},)rErFrGr8zusr/lib/x86_64-linux-gnu/rzusr/lib/i386-linux-gnu/zusr/lib/systemd/z usr/lib/udev/zusr/bin/z usr/sbin/)0rrrrrr?rr r!r1intr%rrr<Zhttplibr@rA ImportErrorZ http.client urllib.parserBZrequestZ getresponseZ getheaderstrptimeZ fromtimestamprrrpr#rrrr"rr5rgziprr7rrrrrrorQ) rrrr.r/rZpocketmaprBstZagerr@rArBZserverZconnresZ modified_strrsrcrqdataZcontents_mappingrNrZline_numrsr rTfilesrXrrrrs                   ""              z%__AptDpkgPackageInfo._search_contentsc Cs|dr|ddd}d}t|dkr<|dd}d}|t|kr td|d|}td||d}zPtttj j |||d *} | | d krt d | W5QRXWnRtt fk r|d7}|t|kr|r |dd}d}nd}Yq@YnXq q@|r|rd ||||f} d ||||f} zFtt| ,} | | d krt d | W5QRXd} Wntt fk rd} YnX| | d| dddSdS)aFor an origin from a Launchpad PPA create sources.list content. distro is the distribution for which content is being created e.g. ubuntu. release_codename is the codename of the release for which content is being created e.g. trusty. Return a string containing content suitable for writing to a sources.list file, or None if the origin is not a Launchpad PPA. LP-PPA--rNTrppaFuserdistroZppanamerrz-deb http://ppa.launchpad.net/%s/%s/%s %s mainz5http://ppa.launchpad.net/%s/%s/%s/dists/%s/main/debugz main/debugriz deb-srcr:r )rrrrorFr!rrr packagingrrrrr) rrfrZrLZ componentsZtry_ppaindexrYppa_namerZppa_lineZ debug_urlZ add_debugrrrcreate_ppa_source_from_origins^           z2__AptDpkgPackageInfo.create_ppa_source_from_originc Csrtjtj|dddsttj|dddddttj|dddddttj|dddttj|d dd ttj|d dd tj|d dd }tj|rt|tj|d rt|d |n t|t |8}t tj|d ddd}| | W5QRXW5QRX|rd} i} |D]|} | dkrZqFd} tj|d rtj|d | d} tj| sd| krtj|d | dd} tj| sd} ntj| sd} | rt | } | } W5QRXn| | ||} | rt tj|d dd | dd}| | W5QRX| D]\}|drhqTd|krvqT|ddd}|ddd}||f| | <qTntd| qFtjtj|d}tj|rt|tj|d dn&tjdr*tdtj|d dtj|d dd}tj|rTt|tj|d rxt|d |n&tjd rtd |n t||rn| rn| D]\} \}}tjjt||t|d!}tj|}|sqz |d"}Wn*tk r&td#|YqYnXd$d%tj|d&| d'd(d)d*d+|g }t|d,krtd-|qdS).Nvarlibr;ZlistspartialrCZarchivesretcz apt.conf.dz preferences.dzsources.list.dz.dr rrirz.listzLP-PPArUa#zppa.launchpad.netrr8r:rz-Could not find or create source config for %sz trusted.gpgz/etc/apt/trusted.gpgz trusted.gpg.dz/etc/apt/trusted.gpg.drXsigning_key_fingerprintz/Error: can't find signing_key_fingerprint at %szapt-keyz --keyringz%s.gpgZadvz--quietz --keyserverzkeyserver.ubuntu.comz --recv-keyrzUnable to import key for %s)rr r"r!rrrrZcopytreer#rrrnr^rrrrrdirnamerr*r[rrr IndexErrorrr)rZapt_rootrIrKrLrMZlist_drRdestZsource_list_contentZ origin_datarfZ origin_pathZsrc_extrsrYrWZ trusted_gpgZ trusted_dZppa_userr]Zppa_archive_urlZppa_inforerrrrr@s    "              z'__AptDpkgPackageInfo._build_apt_sandboxcCsJtjdd|dgtjd}|tdd}|jdks>t|sFt|S)z!Return the version of a .deb filerz-fZVersionrrr) rrrrr4rrnrr)rrXrrrrrr!4s z!__AptDpkgPackageInfo._deb_versioncCstj||S)zkCompare two package versions. Return -1 for ver < ver2, 0 for ver1 == ver2, and 1 for ver1 > ver2.)r;rZversion_compare)rZver1Zver2rrrr>sz%__AptDpkgPackageInfo.compare_versionscCsJ|jdkrDtjddgtjd}|dd|_|jdksDt|jS)z(Get "lsb_release -sc", cache the result.N lsb_releasez-scrrr) _distro_codenamerrrrrrnrr)rrirrrrGs  z(__AptDpkgPackageInfo.get_distro_codenamecCs<|jdkr6|d|_d|jkr6|jdd|_|jS)zuGet osname from /etc/os-release, or if that doesn't exist, 'lsb_release -sir' output and cache the result.NrrrV) _distro_namerjrrrrrrrTs   z$__AptDpkgPackageInfo.get_distro_name)F)FNNN)NNF)FNFNNTF)4__name__ __module__ __qualname____doc__rrr*r-r5r7r?rOrUrZr\rcrergrlrtrrrrrrrrr classmethodrrrrrrr1r3rrrr<r?rr^r@r!rrjrrkrrrrrr )s       "  0( 6  X' X      A k  r )#rorrrmr1r'rrr%rr contextlibrwarningsfilterwarnings FutureWarningr;ZcPickler$ZurllibrrrrprrrKZ urllib.errorZurllib.requestrLrZapport.packagingr r implrrrrsD@    D