
KeYq              
   @   s`  d  d l  Z  d  d l Z d  d l m Z m Z m Z m Z m Z m Z m	 Z	 d  d l
 m Z m Z m Z m Z m Z m Z d  d l m Z m Z d  d l m Z d  d l m Z m Z d  d l m Z m Z d  d l m Z m Z m Z m  Z  m! Z! m" Z" m# Z# m$ Z$ m% Z% m& Z& m' Z' m( Z( m) Z) m* Z* m+ Z+ m, Z, m- Z- m. Z. m/ Z/ d  d	 l0 m1 Z1 d  d
 l2 m3 Z3 d  d l2 m4 Z5 d  d l6 m7 Z7 d  d l6 m4 Z8 d  d l9 m: Z: d  d l; m< Z< m= Z= d  d l> m? Z? m@ Z@ mA ZA d  d lB mC ZC d  d lD mE ZE mF ZF d  d lG mH ZH d  d lI mJ ZJ d  d lK mL ZL mM ZM mN ZN d  d lO mP ZP d  d lQ mR ZR d  d lS mT ZT d  d lU mV ZV d  d lW mX ZX Gd d   d  ZY d d   ZZ d d   Z[ e' d  d! d"    Z\ e) d# d$ d%    Z] e^ e_ eC d& d' d(    Z` e^ e_ e_ eC d) d* d+    Za d e e^ e^ eb eb e e^ e^ d, d- d.   Zc eC e^ e_ d/ d0 d1    Zd d d2 d3 d4    Ze eC d5 d6 d7    Zf eC e_ d8 d9 d:    Zg e e^ e^ d; d< d=    Zh eC e_ e_ d> d? d@    Zi eC e_ d8 dA dB    Zj eC e^ e_ dC dD dE    Zk e^ eC e_ e_ dF dG dH    Zl dI eV e^ e^ dJ dK dL   Zm e^ dM dN dO    Zn eY e+ dP dQ dR    Zo eY e, dP dS dT    Zp eY e  dP dU dV    Zq eY e! dP dW dX    Zr eY e" dP dY dZ    Zs eY e& dP d[ d\    Zt eY e$ dP d] d^    Zu eY e# dP d_ d`    Zv e' e_ eC e eV e e jw f da db dc    Zx dd de   Zy d S)f    N)DictList
NamedTupleOptionalSetTupleUnion)apt
exceptionsmessagessecuritysystemutil)attach_with_tokenenable_entitlement_by_name)	_initiate)MagicAttachRevokeOptions_revoke)MagicAttachWaitOptions_wait)ESM_APPS_POCKETESM_INFRA_POCKETSTANDARD_UPDATES_POCKETFixPlanAptUpgradeStepFixPlanAttachStepFixPlanEnableStepFixPlanNoOpAlreadyFixedStepFixPlanNoOpLivepatchFixStepFixPlanNoOpStatusFixPlanNoOpStepFixPlanResultFixPlanStepFixPlanUSNResultFixPlanWarning&FixPlanWarningPackageCannotBeInstalled#FixPlanWarningSecurityIssueNotFixedNoOpAlreadyFixedDataNoOpLivepatchFixDataUSNAdditionalData)status_message)CVEFixPlanOptions)_plan)USNFixPlanOptions)_is_attached)NAME
USAGE_TMPL)CLOUD_TYPE_TO_TITLEPRO_CLOUD_URLSget_cloud_type)UAConfig)ContractExpiryStatusget_contract_expiry_status)PRINT_WRAP_WIDTH)entitlement_factory)ApplicabilityStatusCanEnableFailureUserFacingStatus)notices)Notice)PRO_HOME_PAGE)	FixStatus)colorize_commandsc               @   s   e  Z d  Z e e e e e d d d    Z d d   Z d e e e e	 e d d d	   Z
 e e e d
 d d    Z d S)
FixContext)titledry_runaffected_pkgscfgc             C   sd   d |  _  g  |  _ t   |  _ t j |  _ | |  _ | |  _ | |  _	 | |  _
 d |  _ d |  _ d  S)Nr   TF)	pkg_indexunfixed_pkgssetinstalled_pkgsr>   SYSTEM_NON_VULNERABLE
fix_statusrA   rC   rB   rD   should_print_pkg_header warn_package_cannot_be_installed)selfrA   rB   rC   rD    rN   2/usr/lib/python3/dist-packages/uaclient/cli/fix.py__init__J   s    							zFixContext.__init__c          	   C   sz   |  j  rv t j j t |  j    j d t |  j   d d j t |  j     } t t	 j
 | d t d d d d  d  S)	Ncountpkgsz, widthsubsequent_indentz    Zreplace_whitespaceF)rC   r   ZSECURITY_AFFECTED_PKGS	pluralizelenformatjoinsortedprinttextwrapfillr6   )rM   msgrN   rN   rO   print_fix_header\   s    		zFixContext.print_fix_headerN)source_pkgsstatuspocketc             C   sV   |  j  rR t t d | d | d |  j d t |  j  d | rH t |  n d    d  S)Npkg_listr`   rE   num_pkgspocket_source)rK   rZ   _format_packages_messagerE   rV   rC   get_pocket_description)rM   r_   r`   ra   rN   rN   rO   print_pkg_headerm   s    		zFixContext.print_pkg_header)rR   unfixed_reasonc             C   s7   x0 | D]( } |  j  j t j d | d |   q Wd  S)Npkgrh   )rF   appendr   UnfixedPackage)rM   rR   rh   ri   rN   rN   rO   add_unfixed_packages   s    	zFixContext.add_unfixed_packages)__name__
__module____qualname__strboolr   r3   rP   r^   r   rg   rl   rN   rN   rN   rO   r@   I   s   &r@   c             C   s6   |  j  d d t j } | j d t  t |  d  S)Nfixhelpaction)Z
add_parserr   ZCLI_ROOT_FIXZset_defaults
action_fix
fix_parser)Z
subparsersZ
parser_fixrN   rN   rO   set_fix_parser   s    rw   c             C   s   t  j d t d d  |  _ d |  _ t j |  _ t j |  j	 _
 |  j d d t j |  j d d d	 d t j |  j d
 d d	 d t j |  S)z1Build or extend an arg parser for fix subcommand.nameZcommandz"fix <CVE-yyyy-nnnn+>|<USN-nnnn-d+>rr   security_issuers   z	--dry-runrt   
store_truez--no-related)r/   rW   r.   Zusageprogr   ZCLI_FIX_DESCdescriptionZ	CLI_FLAGSZ
_optionalsrA   add_argumentZCLI_FIX_ISSUEZCLI_FIX_DRY_RUNZCLI_FIX_NO_RELATED)parserrN   rN   rO   rv      s    		rv   )cvec             C   sS   d j  d |  j j   d |  j  d j  |  j j    g } t d j |   d  S)Nz{issue}: {description}issuer|   z! - https://ubuntu.com/security/{}
)rW   rA   upperr|   rZ   rX   )r   linesrN   rN   rO   print_cve_header   s    	r   )fix_planc             C   s   |  j  } d j d | j j   d | j  g } | j } t | t  r | j r | j	 t
 j  xz | j D]. } | j	 d j t
 j j j d |    qk Wn> | j r | j	 t
 j  x" | j D] } | j	 d |  q Wt d j |   d  S)Nz{issue}: {description}r   r|   z - {}r   z - r   )target_usn_planrW   rA   r   r|   additional_data
isinstancer(   Zassociated_cvesrj   r   ZSECURITY_FOUND_CVESZurlsZSECURITY_CVE_PAGEZassociated_launchpad_bugsZSECURITY_FOUND_LAUNCHPAD_BUGSrZ   rX   )r   Z
target_usnr   r   r   Zlp_bugrN   rN   rO   print_usn_header   s     				#	r   )ry   rB   rD   c             C   s   t  d t d |  g  d |  } | j j d j } | rm | j rm t j d t j	 | j
 p^ d | j    t | j j d  t   t | j j d | |  \ } } | S)NoptionscvesrD   r   	named_msgzunexpected-error)cve_planr*   Z	cves_datar   errorr]   r
   AnonymousUbuntuProErrorr   NamedMessagecoder   rZ   execute_fix_plan)ry   rB   rD   r   r   r`   _rN   rN   rO   fix_cve   s    	"r   )ry   rB   
no_relatedrD   c             C   s  t  d t d |  g  d |  } | j j d j j } | rp | j rp t j d t	 j
 | j pa d | j    t | j j d  t d t	 j j d |    t | j j d j | |  \ } } | t j t j f k r | S| j j d j } | s| r| St d t	 j j d	 d
 j d d   | D    t d t	 j  i  }	 xD | D]< }
 t d j |
 j   t |
 | |  |	 |
 j <t   qWWt t	 j  t | |  d t	 j d } x | D] }
 |	 |
 j \ } } t | |
 j d t	 j | t j k r+t d t	 j j d d   d } | t j k rx3 | D]+ } | j  rAt d j | j! | j    qAWd } qW| rt d t	 j" j d |    | S)Nr   usnsrD   r   r   zunexpected-errorr   issue_idZrelated_usnsz
- c             s   s   |  ] } | j  Vq d  S)N)rA   ).0ZusnrN   rN   rO   	<genexpr>  s    zfix_usn.<locals>.<genexpr>z- {}contextFz- 	operationzfix operationTz
  - {}: {})#usn_planr,   Z	usns_datar   r   r   r]   r
   r   r   r   r   r   rZ   ZSECURITY_FIXING_REQUESTED_USNrW   r   r>   rI   SYSTEM_NOT_AFFECTEDrelated_usns_planZSECURITY_RELATED_USNSrX   ZSECURITY_FIXING_RELATED_USNSrA   ZSECURITY_USN_SUMMARY_handle_fix_status_messageZFIX_ISSUE_CONTEXT_REQUESTEDZFIX_ISSUE_CONTEXT_RELATEDSYSTEM_VULNERABLE_UNTIL_REBOOTENABLE_REBOOT_REQUIRED_TMPLSYSTEM_STILL_VULNERABLErh   ri   ZSECURITY_RELATED_USN_ERROR)ry   rB   r   rD   r   r   Ztarget_usn_statusr   r   Zrelated_usn_statusZrelated_usn_planZfailure_on_related_usnr`   rF   unfixed_pkgrN   rN   rO   fix_usn   s    	!
	
	
r   )rb   r`   rE   rc   rd   returnc       	      C   s   |  s
 d Sg  } g  } x> |  D]6 } | d 7} | j  d j | |   | j  |  q Wt j d j d d j |  d d j t |    d t d	 d
 } d j | t | |   S)z;Format the packages and status to an user friendly message.    z{}/{}z{} {}:(z, )rS   rT   z    z{}
{})rj   rW   r[   r\   rX   rY   r6   r)   )	rb   r`   rE   rc   rd   Z	msg_indexZsrc_pkgsZsrc_pkgZ
msg_headerrN   rN   rO   re   ?  s    
,	re   )rD   tokenr   c             C   sz   t  t d d | g g   y t |  d | d d d SWn9 t j k
 ru } z t  | j  d SWYd d } ~ Xn Xd S)ztAttach to an Ubuntu Pro subscription with a given token.

    :return: True if attach performed without errors.
    proZattachr   Zallow_enableTFN)rZ   r?   r   r
   ZUbuntuProErrorr]   )rD   r   errrN   rN   rO   _run_ua_attach[  s    r   )r   c              C   sV   t    \ }  } |  t j   k rR t t j j d t j |   d t j |     d S)z:Alert the user when running Pro on cloud with PRO support.rA   Zcloud_specific_urlN)	r2   r1   keysrZ   r   ZSECURITY_USE_PRO_TMPLrW   r0   get)Z
cloud_typer   rN   rN   rO   *_inform_ubuntu_pro_existence_if_applicablei  s    r   )rD   c             C   s   t  t j  t d |   } t  d t j j d | j   t d | j  } y t	 d | d |   } Wn` t
 j k
 r } z= t  t j  t d | j  } t d | d |   |  WYd  d  } ~ Xn Xt  d t j  t |  | j  S)NrD   r   	user_codeZmagic_tokenr   )rZ   r   ZCLI_MAGIC_ATTACH_INITr   ZCLI_MAGIC_ATTACH_SIGN_INrW   r   r   r   r   r
   ZMagicAttachTokenErrorZCLI_MAGIC_ATTACH_FAILEDr   r   ZCLI_MAGIC_ATTACH_PROCESSINGr   Zcontract_token)rD   Zinitiate_respZwait_optionsZ	wait_respeZrevoke_optionsrN   rN   rO   _perform_magic_attachu  s"    r   )rD   r   c             C   s   t    t t j  t j t j d d d d g } | d k rE d S| d k r[ t |   S| d k r t t j  t	 d  } t
 |  |  Sd S)zZPrompt for attach to a subscription or token.

    :return: True if attach performed.
    valid_choicessacFz> T)r   rZ   r   Z*SECURITY_UPDATE_NOT_INSTALLED_SUBSCRIPTIONr   prompt_choicesZSECURITY_FIX_ATTACH_PROMPTr   ZPROMPT_ENTER_TOKENinputr   )rD   choicer   rN   rN   rO   _prompt_for_attach  s    	
r   )rF   r   c             C   sR   t  |   } t j t j j |  j d | d d j t |     d t	 d d S)zFormat the list of unfixed packages into an message.

    :returns: A string containing the message output for the unfixed
              packages.
    rc   rR   z, rS   rT   z    )
rV   r[   r\   r   ZSECURITY_PKG_STILL_AFFECTEDrU   rW   rX   rY   r6   )rF   Znum_pkgs_unfixedrN   rN   rO   _format_unfixed_packages_msg  s    	r   )rD   rB   r   c             C   s>   t  |   } | d t j k r: | r6 t t j  d Sd Sd S)zuCheck if the Ubuntu Pro subscription is expired.

    :returns: True if subscription is expired and not renewed.
    r   FT)r5   r4   ZEXPIREDrZ   r   (SECURITY_DRY_RUN_UA_EXPIRED_SUBSCRIPTION)rD   rB   Zcontract_expiry_statusrN   rN   rO   _check_subscription_is_expired  s    r   c             C   s   d d l  } d d l m } t   t t j  t j t j	 j
 d t  d d d g } | d k r t t j  t d  } t t d	 d
 g g   | j | j d d d d  |   t |  |  Sd S)zdPrompt for attach a new subscription token to the user.

    :return: True if attach performed.
    r   N)cliZurlr   rr   z> r   detach
assume_yesTrW   r   F)argparseuaclientr   r   rZ   r   Z%SECURITY_UPDATE_NOT_INSTALLED_EXPIREDr   r   ZSECURITY_FIX_RENEW_PROMPTrW   r=   ZPROMPT_EXPIRED_ENTER_TOKENr   r?   Zaction_detachZ	Namespacer   )rD   r   r   r   r   rN   rN   rO   _prompt_for_new_token  s    r   )rD   servicer   c             C   s   t  t j j d |   t j t j j d |  d d d g } | d k r t  t d d | g g   t d |  d | d	 d
  \ } } | r | d k	 r t	 | t
  r | j d k	 r t  | j j  | Sd S)zMPrompt for enable a pro service.

    :return: True if enable performed.
    r   r   r   r   r   enablerD   rx   r   TNF)rZ   r   ZSECURITY_SERVICE_DISABLEDrW   r   r   ZSECURITY_FIX_ENABLE_PROMPTr?   r   r   r9   messager]   )rD   r   r   ZretreasonrN   rN   rO   _prompt_for_enable  s    r   )r   rD   rB   r   c             C   s   t  d | d |   } | |  } | r | j   \ } } | t j k rL d S| j   \ } } | t j k r | r t d t j	 j
 d | j   d St | | j  r d St t j j
 d | j   n t t j j
 d | j   d S)zQ
    Verify if the Ubuntu Pro subscription has the required service enabled.
    rD   rx   Tr   r   F)r7   Zuser_facing_statusr:   ZACTIVEapplicability_statusr8   Z
APPLICABLErZ   r   Z'SECURITY_DRY_RUN_UA_SERVICE_NOT_ENABLEDrW   rx   r   SECURITY_UA_SERVICE_NOT_ENABLEDZ SECURITY_UA_SERVICE_NOT_ENTITLED)r   rD   rB   Zent_clsZentZ
ent_statusr   r   rN   rN   rO   )_handle_subscription_for_required_service  s.    r   r   )r`   r   r   c             C   sj  |  t  j k r^ | r3 t j j d | d |  } n t j j d |  } t t j |   n|  t  j	 k r | r t j
 j d | d |  } n t j j d |  } t t j |   n |  t  j k r| r t j j d | d |  } n t j j d |  } t t j |   nL | r>t j j d | d |  } n t j j d |  } t t j |   d  S)Nr   r   )r>   rI   r   Z%SECURITY_ISSUE_RESOLVED_ISSUE_CONTEXTrW   ZSECURITY_ISSUE_RESOLVEDrZ   r   Zhandle_unicode_charactersr   Z'SECURITY_ISSUE_UNAFFECTED_ISSUE_CONTEXTZSECURITY_ISSUE_UNAFFECTEDr   Z)SECURITY_ISSUE_NOT_RESOLVED_ISSUE_CONTEXTZSECURITY_ISSUE_NOT_RESOLVED)r`   r   r   r]   rN   rN   rO   r   .  s.    r   )ra   c             C   sA   |  t  k r t j S|  t k r& t j S|  t k r9 t j S|  Sd  S)N)r   r   Z'SECURITY_UBUNTU_STANDARD_UPDATES_POCKETr   ZSECURITY_UA_INFRA_POCKETr   ZSECURITY_UA_APPS_POCKET)ra   rN   rN   rO   rf   S  s    rf   )fix_contextstepc             C   s   |  j  d | j j d d d | j j  d |  _ t j j d | j j d | j j	  } t
 d |  |  j d	 | j j g d
 |  d |  _ t j |  _ d  S)Nr_   r`   releasedra   Fpackageversionz- rR   rh   T)rg   dataZrelated_source_packagesra   rK   r   ZFIX_CANNOT_INSTALL_PACKAGErW   Zbinary_packageZbinary_package_versionrZ   rl   Zsource_packagerL   r>   r   rJ   )r   r   Zwarn_msgrN   rN   rO   )_execute_package_cannot_be_installed_step^  s    				r   c             C   su   |  j  d | j j d | j j  |  j t | j j  7_ |  j d | j j d t | j j   t j	 |  _
 d  S)Nr_   r`   rR   rh   )rg   r   source_packagesr`   rE   rV   rl   r)   r>   r   rJ   )r   r   rN   rN   rO   &_execute_security_issue_not_fixed_stepw  s    		r   c             C   s  |  j  d | j j d d d | j j  |  j t | j j  7_ | j j su |  j se t t	 j
  t j |  _ d  St j   r |  j r t t	 j  t j |  _ |  j d | j j d t	 j  d  St t d d d	 g d d
 d d g t | j j  g   |  j rt j |  _ d  Sy@ t j   t j d d d
 d d g | j j d d d i  Wns t k
 r} zS t | d t |   } t |  t j |  _ |  j d | j j d |  d  SWYd  d  } ~ Xn Xt j |  _ d |  _ |  j j | j j  d  S)Nr_   r`   r   ra   rR   rh   r	   updatez&&installz--only-upgradez-ycmdzapt-getZoverride_env_varsZDEBIAN_FRONTENDZnoninteractiver]   T)rg   r   r   ra   rE   rV   Zbinary_packagesrL   rZ   r   SECURITY_UPDATE_INSTALLEDr>   rI   rJ   r   Zwe_are_currently_rootrB   ZSECURITY_APT_NON_ROOTr   rl   r?   rY   r	   Zrun_apt_update_commandZrun_apt_command	Exceptiongetattrrp   rK   rH   r   )r   r   r   r]   rN   rN   rO   _execute_apt_upgrade_step  sP    			
6	
	
		r   c             C   s_  | j  j d k r t n t } |  j d | j  j d d d |  d |  _ t |  j  j	 s |  j
 rx t d t j  qOt |  j  sOt j |  _ |  j d | j  j d	 t j j d
 | j  j   d  Sn t d |  j d |  j
  rO|  j
 r t t j  nP t |  j  sOt j |  _ |  j d | j  j d	 t j j d
 | j  j   d  St j |  _ d  S)Nz	esm-infrar_   r`   r   ra   Fr   rR   rh   r   rD   rB   )r   Zrequired_servicer   r   rg   r   rK   r-   rD   Zis_attachedrB   rZ   r   Z SECURITY_DRY_RUN_UA_NOT_ATTACHEDr   r>   r   rJ   rl   ZSECURITY_UA_SERVICE_REQUIREDrW   r   r   r   Z$SECURITY_UA_SERVICE_WITH_EXPIRED_SUBrI   )r   r   ra   rN   rN   rO   _execute_attach_step  s:    						r   c             C   s   | j  j d k r t n t } |  j d | j  j d d d |  d |  _ t | j  j |  j |  j	  s t
 t j j d | j  j   |  j d | j  j d	 t j j d | j  j   t j |  _ d  St j S)
Nz	esm-infrar_   r`   r   ra   Fr   rR   rh   )r   r   r   r   rg   r   rK   r   rD   rB   rZ   r   r   rW   rl   Z%SECURITY_UA_SERVICE_NOT_ENABLED_SHORTr>   r   rJ   rI   )r   r   ra   rN   rN   rO   _execute_enable_step  s*    				r   c             C   s5   | j  j t j j k r1 t t j  t j	 |  _
 d  S)N)r   r`   r   ZNOT_AFFECTEDvaluerZ   r   ZSECURITY_NO_AFFECTED_PKGSr>   r   rJ   )r   r   rN   rN   rO   _execute_noop_not_affected_step  s    r   c             C   s>   t  | j t  r: t t j j d |  j d | j j   d  S)Nr   r   )	r   r   r'   rZ   r   ZCVE_FIXED_BY_LIVEPATCHrW   rA   Zpatch_version)r   r   rN   rN   rO   %_execute_noop_fixed_by_livepatch_step"  s
    	r   c             C   sf   t  | j t  rb |  j d | j j d d d | j j  t t j  |  j	 t
 | j j  7_	 d  S)Nr_   r`   r   ra   )r   r   r&   rg   r   ra   rZ   r   r   rE   rV   )r   r   rN   rN   rO    _execute_noop_already_fixed_step.  s    	r   )r   rB   rD   r   c          	   C   sX  |  j  |  j  } t d |  j d | d |  j p3 g  d |  } | j   x9t | d d d   D]} t | t  r t	 | |  t | t
  r t | |  t | t  r t | |  | j t j k r Pt | t  r t | |  | j t j k r Pt | t  r-t | |  | j t j k r-Pt | t  rIt | |  t | t  ret | |  t | t  rb t | |  qb Wt   | j rt t t t d d	   | j D     t j  | _ | j t j k r5t! j" d
 | j#  r5t j$ | _ t% j& j' d d  } t |  t( j) t* j+ d d t, | j |  j  | j | j f S)NrA   rB   rC   rD   keyc             S   s   |  j  S)N)order)xrN   rN   rO   <lambda>K  s    z"execute_fix_plan.<locals>.<lambda>c             S   s   g  |  ] } | j   q SrN   )ri   )r   r   rN   rN   rO   
<listcomp>n  s   	z$execute_fix_plan.<locals>.<listcomp>rH   r   zfix operation)-Zplanwarningsr@   rA   Zaffected_packagesr^   rY   r   r$   r   r%   r   r   r   rJ   r>   rI   r   r   r   r   r   r   r   r   r   r   rZ   rF   r   listrG   r   r   Zshould_rebootrH   r   r   r   rW   r;   addr<   ZENABLE_REBOOT_REQUIREDr   )r   rB   rD   Z	full_planr   r   Z
reboot_msgrN   rN   rO   r   ;  sf    		
			
	r   c            K   s   t  j t j |  j  s- t j d |  j   |  j rC t t	 j
  d |  j j   k rs t |  j |  j |  } n t |  j |  j |  j |  } | j S)Nr   r   )rematchr   ZCVE_OR_USN_REGEXry   r
   ZInvalidSecurityIssueIdFormatrB   rZ   r   ZSECURITY_DRY_RUN_WARNINGlowerr   r   r   Z	exit_code)argsrD   kwargsr`   rN   rN   rO   ru     s    		ru   )zr   r[   Ztypingr   r   r   r   r   r   r   r   r	   r
   r   r   r   r   Zuaclient.actionsr   r   Z+uaclient.api.u.pro.attach.magic.initiate.v1r   Z)uaclient.api.u.pro.attach.magic.revoke.v1r   r   Z'uaclient.api.u.pro.attach.magic.wait.v1r   r   Zuaclient.api.u.pro.security.fixr   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   Z'uaclient.api.u.pro.security.fix._commonr)   Z+uaclient.api.u.pro.security.fix.cve.plan.v1r*   r+   r   Z+uaclient.api.u.pro.security.fix.usn.plan.v1r,   r   Z(uaclient.api.u.pro.status.is_attached.v1r-   Zuaclient.cli.constantsr.   r/   Zuaclient.clouds.identityr0   r1   r2   Zuaclient.configr3   Zuaclient.contractr4   r5   Zuaclient.defaultsr6   Zuaclient.entitlementsr7   Z(uaclient.entitlements.entitlement_statusr8   r9   r:   Zuaclient.filesr;   Zuaclient.files.noticesr<   Zuaclient.messages.urlsr=   Zuaclient.securityr>   Zuaclient.statusr?   r@   rw   rv   r   r   rp   rq   r   r   intre   r   r   r   r   r   r   r   r   r   r   rf   r   r   r   r   r   r   r   r   rk   r   ru   rN   rN   rN   rO   <module>   s|   4
.|>k	+$=.%	&L