o
    аin                     @   s  d dl Z dZze dd d dlmZ dZW n ey1   e dd d dlmZ ejjej_Y nw d dlm	Z	 d d	lm
Z
 d d
lmZ d dlmZ d dlmZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZddlmZmZ ddlmZmZmZmZ ddlmZ ddl m!Z! d dl"Z"ddl#m"Z$ G dd dej%j&j'Z(G dd dej%j&j)Z*G dd deZ+G dd deZ,G dd de-Z.G dd de-Z/G dd  d ee!Z0e1d!krGe0 Z2e+e2Z3e,e2Z4e25 6g d" e	7  e8d  e9 Z:ej;dd D ]Z<e:e< j=re:e< >  qe:e< ?  qe:@e3e4 e	7  e4Ad#d$ e25 6g d" e2Bd%d&d' e2Cd(g d) dS dS )*    NFVtez2.91)r   Tz2.90)Gtk)Gdk)GLib)GObject)Pango   )
run_apportapport_crash)DistUpgradeViewFuzzyTimeToStrInstallProgressAcquireProgress)get)SimpleGtkbuilderApp)gettextc                   @   s0   e Zd ZdZdd Zdd Zdd Zdd	 Zd
S )GtkCdromProgressAdapterzi Report the cdrom add progress
        Subclass this class to implement cdrom add progress reporting
    c                 C   s   |j | _|j| _|| _d S N)label_statusstatusprogressbar_cacheprogressparentselfr    r   A/usr/lib/python3/dist-packages/DistUpgrade/DistUpgradeViewGtk3.py__init__B   s   
z GtkCdromProgressAdapter.__init__c                 C   sH   |r| j | | j|jt| j  t r"t	  t sdS dS )z; update is called regularly so that the gui can be redrawn N)
r   set_textr   set_fractionvaluefloat
totalStepsr   events_pendingmain_iteration)r   textstepr   r   r   updateF   s   zGtkCdromProgressAdapter.updatec                 C      dS )N)F r   r   r   r   r   ask_cdrom_nameM      z&GtkCdromProgressAdapter.ask_cdrom_namec                 C   r(   )NFr   r*   r   r   r   change_cdromO   r,   z$GtkCdromProgressAdapter.change_cdromN)__name__
__module____qualname____doc__r   r'   r+   r-   r   r   r   r   r   >   s    r   c                       s.   e Zd Zdd Zd fdd	Zdd Z  ZS )	GtkOpProgressc                 C   s   || _ d| _d S )N        )progressbarfraction)r   r4   r   r   r   r   T   s   
zGtkOpProgress.__init__Nc                    s`   t t| | | jd }t| j| dkr || _| j| j t	 r.t
  t	 s$d S d S )N      Y@皙?)superr2   r'   percentabsr5   r4   r   r   r#   r$   )r   r9   new_fraction	__class__r   r   r'   Z   s   
zGtkOpProgress.updatec                 C      | j d d S )N )r4   r   r*   r   r   r   doneg      zGtkOpProgress.doner   )r.   r/   r0   r   r'   r@   __classcell__r   r   r<   r   r2   S   s    r2   c                       sL   e Zd Z fddZdd Zdd Z fddZd	d
 Z fddZ  Z	S )GtkAcquireProgressAdapterc                    sF   t t|   |j| _|j| _|| _d| _|j	| _
| j
d| j d S )NFclicked)r8   rC   r   r   r   r   r   r   canceledbutton_fetch_cancelbutton_cancelconnectcancelClickedr   r<   r   r   r   o   s   z"GtkAcquireProgressAdapter.__init__c                 C   s   t d d| _d S )NrI   T)loggingdebugrE   )r   widgetr   r   r   rI   x   s   

z'GtkAcquireProgressAdapter.cancelClickedc                 C   sj   t d||f }tj| jjtjjtjjtj	j
d}|| | }|d |  |tjjkr3dS dS )Nz&Please insert '%s' into the drive '%s'r   flagstypebuttonsr)   TF)_r   MessageDialogr   window_mainDialogFlagsMODALMessageTypeQUESTIONButtonsType	OK_CANCEL
set_markuprun	set_titledestroyResponseTypeOK)r   mediumdrivemsgdialogresr   r   r   media_change{   s   


z&GtkAcquireProgressAdapter.media_changec                    s2   t t|   | jd | j  | j  d S )Nr   )r8   rC   startr   r   r   showrG   r*   r<   r   r   rf      s   
zGtkAcquireProgressAdapter.startc                 C   s*   | j d | jtd | j  d S )Nr?   zFetching is complete)r   r   r   rQ   rG   hider*   r   r   r   stop   s   zGtkAcquireProgressAdapter.stopc                    s  t t| | t| j| j d  dkrr| j| jd  | jd }|| j	kr,| j	}| j
dkr_t| j
}t|trC|t }| jtd|| j	|f  | jtdt| j  n| jtd|| j	f  | jd t r~t  t sv| j S )	Nr6   r7   r   r   z!Fetching file %li of %li at %sB/sAbout %s remainingzFetching file %li of %liz  )r8   rC   pulser:   r9   r   get_fractionr   current_itemstotal_itemscurrent_cpsapt_pkgsize_to_str
isinstancebytesdecodelocalegetpreferredencodingr   r   rQ   r   etar   r#   r$   rE   )r   ownercurrentItemro   r<   r   r   rk      s4   




zGtkAcquireProgressAdapter.pulse)
r.   r/   r0   r   rI   re   rf   ri   rk   rB   r   r   r<   r   rC   k   s    	rC   c                   @   sj   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dddZdd Zdd Zdd ZdS )GtkInstallProgressAdapteri,  c                 C   sX   t |  d | _|j| _|j| _|j| _|j| _	| j	
d| j || _tjdd d S )Nchild-exitedzDPkg::StopOnErrorFalse)r   r   _cacher   r   r   expander_terminalexpander_termtermrH   child_exitedr   rp   configsetr   r   r   r   r      s   
z"GtkInstallProgressAdapter.__init__c                 C   s   t |  d| _| jtd | jd | jd | j	d | j
  | j
d| j tjdp6d}|dkrQ| jrQd	| jvsI| jd	 jsQd
}| jd d| j dg| _dtjvrf| jd|  d| _d| _d| _d S )NFzApplying changesr3   r?   Tzcontents-changedDEBIAN_FRONTENDgnomezlibgtk3-perlrc   zVTE_PTY_KEEP_FD=%szAPT_LISTCHANGES_FRONTEND=nonezDEBIAN_FRONTEND=%s)r   start_updatefinishedr   r   rQ   r   r   r   set_sensitiver   rg   rH   _on_term_content_changedosenvironr   r}   is_installedset_expandedwritefdenvappend
start_timetime_uilast_activity)r   frontendr   r   r   r      s.   





z&GtkInstallProgressAdapter.start_updatec                 C   s   t | || td||f  tdd|v rdS | jj| jj t	d| }t	d| }d||f }| jj
  | jjd | jj tjj | jj| | jj | | jj  | jj  | jj  d S )	Nz*got an error from dpkg for pkg: '%s': '%s'dpkgz*dependency problems - leaving unconfiguredFzCould not install '%s'zThe upgrade will continue but the '%s' package may not be in a working state. Please consider submitting a bug report about it.<big><b>%s</b></big>

%sr)   )r   errorrJ   r   dgettextr   dialog_errorset_transient_forrS   rQ   realizer\   
get_windowset_functionsr   
WMFunctionMOVElabel_errorrZ   textview_error
get_bufferr   scroll_errorrg   r[   rh   )r   pkgerrormsgsummaryrb   markupr   r   r   r      s$   zGtkInstallProgressAdapter.errorc                 C   sV  t d|  t }td| }td}d||f }| jj| | jjd | jj	| jj
 tj|s<|d }tjdrddd||g}tj|tjd	 d
 }|dd}| jj | n| jj td | jj }	| jj  |  jt | 7  _|	tjjkrd}
nd}
z| j|
d W d S    | j|
d Y d S )Nz.got a conffile-prompt from dpkg for file: '%s'z/Replace the customized configuration file
'%s'?ztYou will lose any changes you have made to this configuration file if you choose to replace it with a newer version.z1<span weight="bold" size="larger">%s </span> 

%sr)   z
.dpkg-distz/usr/bin/diffz-u)stdoutr   zUTF-8replacez The 'diff' command was not foundzy
zn
zutf-8)rJ   rK   timerQ   r   label_conffilerZ   dialog_conffiler\   r   rS   r   pathexists
subprocessPopenPIPEcommunicatert   textview_conffiler   r   r[   rh   r   r   r^   YESr   
feed_childencode)r   currentnewrf   primsecr   cmddiffrd   responser   r   r   conffile   s<   z"GtkInstallProgressAdapter.conffilec                 C   sv   t jt jj}t }|dkr-| jD ]}|d\}}|tj	|< q|
  dtj	d< |S | j| | j| |S )Nr   =1DPKG_UNTRANSLATED_MESSAGES)r   Ptynew_syncPtyFlagsDEFAULTr   forkr   splitr   child_setupr   set_ptywatch_child)r   ptypidr   keyr    r   r   r   r     s   

zGtkInstallProgressAdapter.forkc                 C   s   t   | _d| _dS )z helper function that is called when the terminal changed
            to ensure that we have a accurate idea when something hangs
        FN)r   r   activity_timeout_reported)r   r   r   r   r   r   ,  s   

z2GtkInstallProgressAdapter._on_term_content_changedc                 C   s   | j dkr
t | _ t|| j d  dkr)| jt|d  | j|	  |dkrw| j
| j  }|| j8 }t|| }d| | }|dkrY|dk rY| jtdt|  n| jd | jjry| jjd	d
kr{| jjd|  d S d S d S d S )Nr3   r6   r7         ?g     N@i  rj   r?   zload-status   zprogress("%s"))r   r   r:   r   rl   r   r!   r   r   stripr   r   rQ   r   r   _webkit_viewget_propertyexecute_script)r   r   r9   r   deltatime_per_percentrw   r   r   r   status_change3  s&   


z'GtkInstallProgressAdapter.status_changeNc                 C   s$   |d u r
|  | _n|| _d| _d S NT)get_child_exit_status
apt_statusr   )r   r   r   r   r   r   r   M  s   
z&GtkInstallProgressAdapter.child_exitedc                 C   s   | j s
|   | j r| jS r   )r   update_interfacer   r*   r   r   r   
wait_childV  s   z$GtkInstallProgressAdapter.wait_childc                 C   r>   )Nr)   r   r   r*   r   r   r   finish_update[  rA   z'GtkInstallProgressAdapter.finish_updatec                 C   s   t |  | jdkr| j  td | jdkr=| j| j t k r=| j	s6t
d| j| j f  d| _	| jjd t rIt  t sAtd d S )Nr3   g?r   z+no activity on terminal for %s seconds (%s)Tg{Gz?)r   r   r   r   rk   r   sleepr   TIMEOUT_TERMINAL_ACTIVITYr   rJ   warningr   get_textr   r~   r   r   r#   r$   r*   r   r   r   r   ^  s   




z*GtkInstallProgressAdapter.update_interfacer   )r.   r/   r0   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rz      s    '
	rz   c                   @   s   e Zd Zdd ZdddZdS )DistUpgradeVteTerminalc                 C   s   || _ || _d S r   )r   r   )r   r   r   r   r   r   r   r  s   
zDistUpgradeVteTerminal.__init__Fc              
      s   t r	 fdd}n fdd} j   jd|  jjd |dkr- jjd d _t rD j	t
jjd|d dd d d \}}n jt
jjd|d dd d \}}|rZ|dk r\d S  jsst rkt  t sctd	  jr_ `d S )
Nc                    
   d _ d S r   r   )terminalr   r*   r   r   wait_for_childw     
z3DistUpgradeVteTerminal.call.<locals>.wait_for_childc                    r   r   r   )rL   r*   r   r   r   {  r   r{   TF/r   r7   )vte291r   rg   rH   r   r~   r   r   r   
spawn_syncr   r   r   fork_command_fullr   r#   r$   r   r   )r   r   hiddenr   successr   r   r*   r   callu  sL   

	
zDistUpgradeVteTerminal.callNF)r.   r/   r0   r   r   r   r   r   r   r   q  s    r   c                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )HtmlViewc                 C   s
   || _ d S r   )r   )r   webkit_viewr   r   r   r     s   
zHtmlView.__init__c                 C   sr   | j sd S zddlm} |sJ | j | | j d| j W d S  ty8   | j | | j d| j Y d S w )Nr   WebKit2zload-changedzload-finished)	r   gi.repositoryr   load_urirH   _on_load_changedImportErroropen_on_load_finished)r   urlr   r   r   r   r     s   zHtmlView.openc                 C      | j   d S r   )r   rg   r*   r   r   r   rg        zHtmlView.showc                 C   r   r   )r   rh   r*   r   r   r   rh     r   zHtmlView.hidec                 C   s   |   d S r   )rg   )r   viewframer   r   r   r        zHtmlView._on_load_finishedc                 C   s(   ddl m} ||jjkr|  d S d S )Nr   r   )r   r   	LoadEventLOAD_FINISHEDrg   )r   r   eventdatar   r   r   r   r     s   zHtmlView._on_load_changedN)	r.   r/   r0   r   r   rg   rh   r   r   r   r   r   r   r     s    r   c                       s   e Zd ZdZd7ddZdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Z fdd Zd8d!d"Zd8d#d$Z	%d9d&d'Zd:d)d*Zd;d,d-Zd.d/ Zd0d1 Zd<d3d4Zd5d6 Z  ZS )=DistUpgradeViewGtk3z& gtk frontend of the distUpgrade tool Nc              
      s>  t   | _|r|dkrtjt d}t }n	d}tj|d}tt	j
 t d ztd| td W n tyW } ztd|  W Y d }~nd }~ww t |d d tj }z j|d	d
d W n tjy } ztd|  W Y d }~nd }~ww  j }|dd} j |  !  d  _"tj  _#d  _$ j%   j& 't(j)j* t+ j, _-t.  _/t0  _1t2  _3t4tj5 _6t7d}t8 }	|9|	d |:|	dd  j;<|  j6=dtj>j?  j;@ j6  jABd  fdd}
 jCDd|
  jEt	_Fd S )N.moz/usr/share/locale/
gtkbuilderGTKzubuntu-release-upgraderzError setting locales (%s)z/DistUpgrade.uizsystem-software-update    r   z)error setting default icon, ignoring (%s)%sz22.04r)   Tr   Fc                    s    j  } j|  d S r   )expander_detailsget_expandeddialog_changesset_resizable)wexpandedr*   r   r   
_activated  s   
z0DistUpgradeViewGtk3.__init__.<locals>._activatedactivate)Gr   r   logdirr   r   joingetcwdr   
init_checksysargvget_telemetryset_updater_typeru   bindtextdomainr   
textdomain	ExceptionrJ   r   r   	IconThemeget_defaultrS   set_default_icon	load_iconr   GErrorrK   label_title	get_labelr   	set_labelcreate_terminal	prev_step	iconthemer   r   r   r   r   r   r   r2   r   _opCacheProgressrC   _acquireProgressr   _cdromProgressrz   _installProgress	TreeStoreTYPE_STRINGdetails_listTreeViewColumnCellRendererText
pack_startadd_attributetreeview_detailsappend_columnset_sort_column_idSortType	ASCENDING	set_modelr  r  r  rH   _handleException
excepthook)r   datadirr  	localedirgladedireiconstitle_stringcolumnrenderr  r   r*   r   r     sj   








	zDistUpgradeViewGtk3.__init__c                 C   sf   dd l }||||}tdd|  t||| t s,| tdtdd| t	d d S )Nr   znot handled exception:
%s
zA fatal error occurredzPlease report this as a bug (if you haven't already) and include the files /var/log/dist-upgrade/main.log and /var/log/dist-upgrade/apt.log in your report. The upgrade has aborted.
Your original sources.list was saved in /etc/apt/sources.list.distUpgrade.r   )
	tracebackformat_exceptionrJ   r   r  r
   r	   rQ   r  exit)r   rO   r    tbrH  linesr   r   r   r=    s   
z$DistUpgradeViewGtk3._handleExceptionc                 C   s   t | | jS r   )r   r   r*   r   r   r   getTerminal!  r  zDistUpgradeViewGtk3.getTerminalc                 C   s   | j d u rHz4zddlm} W n ty   ddlm} Y nw | | _ | j  }|dd | j	| j ddd W n   t
d t  Y S t| j S )Nr   r   )WebKitzenable-pluginsFTzhtml widget)r   r   r   r   rN  WebViewget_settingsset_property	vbox_mainpack_endrJ   	exceptionr   SampleHtmlViewr   )r   rN  settingsr   r   r   getHtmlView#  s   




zDistUpgradeViewGtk3.getHtmlViewc                 C   sN   t |jdkr%t|jdkr%td}td}| ||}td| | S dS )Nr      zCtrl-c pressedzkThis will abort the operation and may leave the system in a broken state. Are you sure you want to do that?z5ctrl-c press detected, user decided to pass it on: %sF)lenstringordrQ   askYesNoQuestionrJ   r   )r   rL   keyevr   rb   rd   r   r   r   _key_press_handler3  s   z&DistUpgradeViewGtk3._key_press_handlerc                 C   s   t j | _t| jds| jj| j_| jd| j t	
d}| j| g | _| j| jddd | j  t | _| j  | j| jddd | j| j  zttj| jdd| _W | jS  tys   tj| _Y | jS w )z! helper to create a vte terminal r   zkey-press-eventzmonospace 10Tr   zterm.logr  )r   Terminalr   r   hasattrset_pty_objectr   rH   r^  r   font_description_from_stringset_font_terminal_lineshbox_customr5  r   r   
VScrollbarvscrollbar_terminalrg   set_adjustmentget_vadjustmentr   r   r   r  r  _terminal_logr   r  r   )r   fontdescr   r   r   r)  ?  s(   




z#DistUpgradeViewGtk3.create_terminalc                 C      | j S r   )r-  r*   r   r   r   getAcquireProgressX     z&DistUpgradeViewGtk3.getAcquireProgressc                 C   s   || j _| j S r   )r/  r}   )r   cacher   r   r   getInstallProgressZ  s   z&DistUpgradeViewGtk3.getInstallProgressc                 C   rl  r   )r,  r*   r   r   r   getOpCacheProgress]  rn  z&DistUpgradeViewGtk3.getOpCacheProgressc                 C   rl  r   )r.  r*   r   r   r   getCdromProgress_  rn  z$DistUpgradeViewGtk3.getCdromProgressc                 C   s   | j d|  d S )Nr  r   )r   rb   r   r   r   updateStatusa  s   z DistUpgradeViewGtk3.updateStatusc                 C   4   t | d|j }t | d|j }|  |  d S Nimage_step%ilabel_step%i)getattrr    rh   r   r&   imagelabelr   r   r   hideStepc  s   zDistUpgradeViewGtk3.hideStepc                 C   rt  ru  )rx  r    rg   ry  r   r   r   showStepi  s   zDistUpgradeViewGtk3.showStepc                 C   sX   t jj}| j}|r*t| d|j }t| d|j }|t j| |  |	  d S d S )Nrv  arrow_step%i)
r   IconSizeMENUr*  rx  r    set_from_stockSTOCK_CANCELrg   rh   )r   sizer&   rz  arrowr   r   r   abortn  s   zDistUpgradeViewGtk3.abortc                    s   t t| | | j rtd tjj	}t
 }| jrMt| d| jj }t| d| jj }t| d| jj }|d| |tj| |  |  || _t| d|j }t| d|j }t| d|j }|dsod S |  |  d S )Nzicon theme changed, re-readingrv  rw  r~  
attributesvisible)r8   r  setStepr+  rescan_if_neededrJ   rK   r   r  r  r   AttrListr*  rx  r    rQ  r  STOCK_APPLYrg   rh   r   )r   r&   r  attrlistrz  r{  r  r<   r   r   r  w  s*   


zDistUpgradeViewGtk3.setStepc                 C   s   | j d | j | j d||f }| j| |d kr-| j }|| | j	
  n| j	  | j   | j  tjj | j   | j   t rYt  t sOd S d S )Nr)   r   )dialog_informationr\   r   rS   label_informationrZ   textview_informationr   r   scroll_informationrg   rh   r   r   r   r   r   r   r[   r   r#   r$   r   r   rb   extended_msgbufferr   r   r   information  s    





zDistUpgradeViewGtk3.informationc                 C   s   | j d | j | j d||f }| j| |d kr-| j }|| | j	
  n| j	  | j   | j  tjj | j   | j   dS )Nr)   r   F)r   r\   r   rS   r   rZ   r   r   r   r   rg   rh   r   r   r   r   r   r   r[   r  r   r   r   r     s   





zDistUpgradeViewGtk3.errorTc                 C   s  t | ||||sdS |  jdtd 7  _|d kr6| jd | jd | j|d  | j|d  | j	
d|  | j
| j | j  td| jftd	| jftd
| jftd| jftd| jftd| jffD ],\}}|r| jd |t| g}	|D ]}
| j|	d|
jtt|
jdd f g qqp| j  | j| j | jd | j  !t"j#j$t"j#j%B  | j& }| j'  |t(j)j*krdS dS )NFz

<b>%s</b>z?To prevent data loss close all open applications and documents.Tr   r   z<big><b>%s</b></big>z%No longer supported by Canonical (%s)z<b>Downgrade (%s)</b>zRemove (%s)zNo longer needed (%s)zInstall (%s)zUpgrade (%s)z<b>%s</b> - %sr   r)   )+r   confirmChangesconfirmChangesMessagerQ   button_cancel_changesset_use_stockset_use_underliner(  button_confirm_changeslabel_summaryrZ   label_changesr2  clear	demotionstoDowngradetoRemovetoRemoveAuto	toInstall	toUpgrader   rY  namer   markup_escape_textrx  	candidater  r   r   rS   r\   r   r   r   r   r   RESIZEr[   rh   r   r^   r   )r   r   changesr  downloadSizeactionsremoval_boldparent_textr2  noder   rd   r   r   r   r    sT   





z"DistUpgradeViewGtk3.confirmChangesNoc                 C   s   d||f }t j| jt jjt jjt jjd}|	d |dkr'|
t jj n|
t jj || | }|  |t jjkrCdS dS )Nr   rM   r)   r  TF)r   rR   rS   rT   rU   rV   rW   rX   YES_NOr\   set_default_responser^   NOr   rZ   r[   r]   r   r   rb   defaultrc   rd   r   r   r   r\    s    

z$DistUpgradeViewGtk3.askYesNoQuestionCancelc                 C   s   |rd||f }t j| jt jjt jjt jjd}|	d |
| |tdt jjtdt jj |dkr>|t jj n|t jj | }|  |t jjkrUdS dS )Nr   rM   r)   r  ContinueTF)r   rR   rS   rT   rU   rV   WARNINGrX   NONEr\   rZ   add_buttonsrQ   r^   CANCELACCEPTr  r[   r]   r  r   r   r   askCancelContinueQuestion  s(   

z-DistUpgradeViewGtk3.askCancelContinueQuestionc                 C   s`   | j | j | j d | j   | j  tjj	 | j 
 }| j   |tjjkr.dS dS )Nr)   TF)dialog_restartr   rS   r\   r   r   r   r   r   r   r[   rh   r   r^   r   )r   rd   r   r   r   confirmRestart  s   


z"DistUpgradeViewGtk3.confirmRestartc                 C   s    t  rt   t  sd S d S r   )r   r#   r$   r*   r   r   r   processEvents  s   z!DistUpgradeViewGtk3.processEventsFc                 C   s"   | j   |r| j d d S d S )Nr   )r   rk   r   )r   r   r   r   r   pulseProgress"  s   
z!DistUpgradeViewGtk3.pulseProgressc                 C   sf   | j | j | j d | j   | j  tjj	 | j 
 }| j   |tjjkr1td dS )Nr)   r   T)dialog_cancelr   rS   r\   r   r   r   r   r   r   r[   rh   r   r^   r  r  rJ  )r   rL   r  rd   r   r   r   on_window_main_delete_event'  s   



z/DistUpgradeViewGtk3.on_window_main_delete_event)NNr   r   )r  )r  r   )r.   r/   r0   r1   r   r=  rM  rW  r^  r)  rm  rp  rq  rr  rs  r|  r}  r  r  r  r   r  r\  r  r  r  r  r  rB   r   r   r<   r   r    s6    
L	



0

r  __main__)z/usr/bin/dpkgz--configurez-aTODOzTODO~shortlonga  asfds afsdj af asdf asdf asf dsa fadsf asdf as fasf sextended
asfds afsdj af asdf asdf asf dsa fadsf asdf as fasf sextended
asfds afsdj af asdf asdf asf dsa fadsf asdf as fasf sextended
asfds afsdj af asdf asdf asf dsa fadsf asdf as fasf sextended
asfds afsdj af asdf asdf asf dsa fadsf asdf as fasf sextended
asfds afsdj af asdf asdf asf dsa fadsf asdf as fasf sextended
asfds afsdj af asdf asdf asf dsa fadsf asdf as fasf sextended
xxd   )Dgir   require_versionr   r   r   r   r   r   r   r   r   r   r   r  ru   rJ   r   r   aptrp   r   DistUpgradeApportr	   r
   r   r   r   r   	telemetryr   r  SimpleGtk3builderAppr   r   DistUpgradeGettextrQ   r   baseCdromProgressr   
OpProgressr2   rC   rz   objectr   r   r  r.   r   fpiprM  r   mainrJ  Cachero  r  r   r   mark_deletemark_installcommitr   r   r  r   r   r   r   <module>   sz   C D2  
x
	