§ À•¿jÁãó^—ddlmZddlmZddlmZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddlZddlmZddlmZddlmZmZdd lmZdd lmZdd lmZdd lmZdd l mZmZddl m!Z!ddl"m#Z#ddl$m%Z%m&Z&ddl'm(Z(m)Z)m*Z*ddl+m,Z,m-Z-ddl.m/Z/m0Z0ddl1m2Z2dZ3dZ4dZ5d„Z6d8d„Z7ej8d¦«Z9d„Z:d„Z;d„Zde3fd„Z?d „Z@d!„ZAd"„ZBd#„ZCd$„ZDd%„ZEd9d'„ZFd:d)„ZGd8d*„ZHd+„ZId,„ZJd-„ZKd.„ZLd/„ZMd0„ZNd;d1„ZOd2„ZPd3„ZQd4„ZRd5„ZSd6„ZTeUd7kr eT¦«dSdS)<é)Úprint_function)Úabsolute_import)ÚdivisionN)Úmapé)ÚClSelect)Ú ClExtSelectÚdepend_modules_dict)Ú ClUserSelect)ÚClUserExtSelect)ÚClUserOptSelect)Úclprint)ÚclcagefsÚClPwd)ÚFeature)Úis_panel_feature_supported)Ú SysCtlConfÚSYSCTL_CL_CONF_FILE)Ú is_ubuntuÚ run_commandÚExternalProgramFailed)Ú make_symlinkÚ$safely_resolve_username_and_doc_root)ÚClSelectExceptÚBaseClSelectException)ÚWebsiteú/usr/sbin/cagefsctlcó0—td¦«td¦«td¦«td¦«td¦«td¦«td¦«td¦«td ¦«td ¦«td ¦«td ¦«td ¦«td¦«td¦«td¦«td¦«td¦«td¦«td¦«td¦«td¦«td¦«td¦«td¦«td¦«td¦«td¦«td¦«td¦«td¦«td ¦«td!¦«td"¦«td#¦«td$¦«td%¦«td&¦«td'¦«td(¦«td)¦«td* t¦«¦«td+¦«td,¦«td-¦«td.¦«td/¦«td0¦«td1¦«td2¦«td3¦«dS)4Nz? -v | --version : Specify alternative versionz, -u | --user : UsernamezN --domain : Domain name (for per-domain configuration)zE -l | --list : List alternatives for interpreterzQ -G | --list-extensions : List global set of extensions for alternativez@ -S | --summary : List summary of alternativeszE -s | --user-summary : List user summary of alternativeszG -C | --current : Show currently selected alternativezR -c | --user-current : Show currently selected alternative for a userzE -B | --set-current : Set alternative as global defaultzC -b | --set-user-current : Set alternative as user defaultz? -Y | --enable-alternative : Enable alternative globallyz@ -N | --disable-alternative : Disable alternative globallyzd -E | --enable-extensions : Enable comma-separated list of extensions globally for a versionze -D | --disable-extensions : Disable comma-separated list of extensions globally for a versionz_ -R | --replace-extensions : Replace extensions with comma-separated list of extensions z: for a version globallyzX -e | --enable-user-extensions : Enable comma-separated list of extensions for a userzY -d | --disable-user-extensions : Disable comma-separated list of extensions for a userzc -r | --replace-user-extensions : Replace user extensions with comma-separated list of extensionsz[ -t | --reset-user-extensions : Replace user extensions with version default extensionszk -g | --list-user-extensions : List enabled extensions for a user. With key --all shows all extensionsz7 -a | --all : Show all extensionszf -p | --print-summary : If specified along with setting an alternative prints user summaryzb -V | --show-native-version : Shows native version while showing summary or selected versionzN -L | --list-users : List users who use a specified alternativezg -T | --change-to-version : Changes to a specified version all users who have a certain versionzO -k | --add-options : Add comma-separated list options for a userz] -m | --replace-options : Replace user options with comma-separated list of optionszR -x | --delete-options : Delete comma-separated list options for a userzY -Q | --base64 : Expects data as comma-separated base64-encoded stringzL -q | --quiet : Suppress errors messages for wrong inputzX -P | --print-options : Prints user options. By default prints as plain textzg --print-options-safe : Prints user options. By default prints as plain text (safe strings)zV --apply-symlinks-rules : Recreate symlinks to php extensions for all users zQ based on /etc/cl.selector/symlinks.rules filezk --exclude-pid-list : Specify list of PIDs of processes that should not be signaled by SIGHUPz6 -j | --json : Print data as JSONz5 -w | --csv : Print data as CSVz@ -W | --perl : Print data as perl structurezW --api-version : Integer, representing specific api version to use. z2 Defaults to {}ze -z | --reset-options : Deletes all user custom options. Range can be narrowed with user z6 or version optionsz< --update-backup : write settings to backupzh --apply-global-php-ini : use with 0, 1 or 2 arguments from the list: error_log, date.timezonezh without arguments applies all global php options including two abovezE --setup-without-cagefs : setup PHP Selector without CageFSzY --revert-to-cagefs : revert to default setup of PHP Selector (with CageFS)zV --for-all-users : applies specified action for all users in CageFS. zU Available only for enable/disable user extensions)ÚprintÚformatÚAPI_0©óúN/opt/cloudlinux/venv/lib64/python3.11/site-packages/clselect/clselectctlphp.pyÚusager%4s€Ý Ð KÑLÔLÐLÝ Ð 8Ñ9Ô9Ð9Ý Ð ZÑ[Ô[Ð[Ý Ð QÑRÔRÐRÝ Ð ]Ñ^Ô^Ð^Ý Ð LÑMÔMÐMÝ Ð QÑRÔRÐRÝ Ð SÑTÔTÐTÝ Ð ^Ñ_Ô_Ð_Ý Ð QÑRÔRÐRÝ Ð OÑPÔPÐPÝ Ð KÑLÔLÐLÝ Ð LÑMÔMÐMÝ Ð pÑqÔqÐqÝ Ð qÑrÔrÐrÝ Ð kÑlÔlÐlÝ Ð FÑGÔGÐGÝ Ð dÑeÔeÐeÝ Ð eÑfÔfÐfÝ Ð oÑpÔpÐpÝ Ð gÑhÔhÐhÝ Ð wÑxÔxÐxÝ Ð CÑDÔDÐDÝ Ð rÑsÔsÐsÝ Ð nÑoÔoÐoÝ Ð ZÑ[Ô[Ð[Ý Ð sÑtÔtÐtÝ Ð [Ñ\Ô\Ð\Ý Ð iÑjÔjÐjÝ Ð ^Ñ_Ô_Ð_Ý Ð eÑfÔfÐfÝ Ð XÑYÔYÐYÝ Ð dÑeÔeÐeÝ Ð sÑtÔtÐtÝ Ð bÑcÔcÐcÝ Ð ]Ñ^Ô^Ð^Ý Ð wÑxÔxÐxÝ Ð BÑCÔCÐCÝ Ð AÑBÔBÐBÝ Ð LÑMÔMÐMÝ Ð cÑdÔdÐdÝ Ð >× EÒ EÅeÑ LÔ LÑMÔMÐMÝ Ð qÑrÔrÐrÝ Ð BÑCÔCÐCÝ Ð HÑIÔIÐIÝ Ð tÑuÔuÐuÝ Ð tÑuÔuÐuÝ Ð QÑRÔRÐRÝ Ð eÑfÔfÐfÝ Ð bÑcÔcÐcÝ Ð aÑbÔbÐbÐbÐbr#cóŠ—d}|r|›dd›d�}tj ||z¦«tjd¦«dS)z5 Prints to stderr @param message: string z%s ú:ú%sú rN)ÚsysÚstderrÚwriteÚexit)ÚmessageÚprefixÚfmts r$Úprint_error_and_exitr1jsN€ð €CØ ð)Ø!˜6˜6 4 4 4Ð(ˆÝ„J×Ò�S˜7‘]Ñ#Ô#Ð#Ý„HˆQ�K„K€K€K€Kr#z\A[a-z_][a-z0-9_-]{0,31}\Zcó†—t|t¦«rt |¦«st d¦«dSdS)z?Reject usernames that are not safe to embed in argv or persist.zError: invalid cPanel usernameN)Ú isinstanceÚstrÚ _USERNAME_REÚmatchr1)Úusers r$Ú_validate_cpanel_usernamer8|sH€å �d�CÑ Ô ð?­ ×(:Ò(:¸4Ñ(@Ô(@ð?ÝÐ=Ñ>Ô>Ð>Ð>Ð>ð?ð?r#cób—ttj¦«dkrtd¦«dSdS)z\ Checks presence of command line arguments and exits with usage info if missing rzFCommand line arguments expected. For help use '-h' or '--help' optionsN)Úlenr*Úargvr1r"r#r$Úcheck_args_presencer<‚s4€õ  �3Œ8�}„}˜ÒÐÝÐeÑfÔfÐfÐfÐfðÐr#có$—d}| dd¦«}||zdz}d}tj |¦«rN t |d¦« ¦« ¦«}n#ttf$rYdSwxYw|S)ú z /opt/alt/phpú.Úz/name_modifierÚr) ÚreplaceÚosÚpathÚisfileÚopenÚreadlineÚstripÚOSErrorÚIOError)ÚversionÚ BASE_ALT_DIRÚverÚname_modifier_fileÚ name_modifiers r$Úget_name_modifierrP‹s£€à!€LØ �/Š/˜#˜rÑ "Ô "€CØ%¨Ñ+Ð.>Ñ>ÐØ€MÝ „w‡~‚~Ð(Ñ)Ô)ðð Ý Ð!3°SÑ9Ô9×BÒBÑDÔD×JÒJÑLÔLˆMˆMøÝ�Ð!ð ð ð Ø�2�2ð øøøà ÐsÁ4A8Á8B  B có&—|dkrdS|dkrdSdS)Nú-ÚdisabledÚeÚenabledr"©Úletters r$Úletter_to_statusrX™s%€Ø �‚}€}؈zØ �3ŠˆØˆyð ˆr#Útextc ó0‡ ‡ —|tkrd}d}nd}d}gd¢Š g}|gi}|D�]<Š t‰ d¦«}d dg|dzz¦«}‰ d g} |  t t ˆ ˆ fd „t |¦«¦«¦«¦«t‰ d ¦«} | d kr1d dg|d zz¦«}|  | ¦«|d kr%| |t| ¦«z¦«d| vr | d ||<|| | d t| d¦«| dœ¦«�Œ>|dkrtj |¦«S|d krd |¦«SdS)NÚPHPConfigurationÚdefaultPHPversionÚavailable_versionsÚdefault_version)rTÚdÚsrr>r(rcó4•—‰d|r‰|pdS)NrrRr")ÚiÚaltÚstatess €€r$úz format_summary..±sø€¨c°!¬f°Q¬iÐ.E¸FÀ1¼IÐ-MÈ#€r#r@érYr_)rKÚstatusrOÚjsonr)) r!r:ÚjoinÚextendÚlistrÚrangerPÚappendÚtuplerXrhÚdumps) Údatar Ú api_versionÚavailable_versions_keyÚdefault_version_keyÚ text_linesÚ json_dictÚ row_lengthr0Úrow_datarOrcrds @@r$Úformat_summaryrx sÚøø€Ø•eÒÐØ!3ÐØ1ÐÐà!5ÐØ/Ðà ˆ_ˆ_€FØ€Jà ð€Iðð ñ ˆÝ˜˜Qœ‘[”[ˆ Ø�hŠh˜�v ¨a¡Ñ0Ñ1Ô1ˆØ˜”F�8ˆØ�Š��SÐ"NÐ"NÐ"NÐ"NÐ"NÕQVÐWaÑQbÔQbÑcÔcÑdÔdÑeÔeÐeÝ)¨#¨a¬&Ñ1Ô1ˆ Ø ˜BÒ Ð Ø—(’(˜D˜6 Z°!¡^Ñ4Ñ5Ô5ˆCØ �OŠO˜MÑ *Ô *Ð *Ø �VÒ Ð Ø × Ò ˜c¥E¨(¡O¤OÑ3Ñ 4Ô 4Ð 4Ø �(ˆ?ˆ?Ø-5°a¬[ˆIÐ)Ñ *ØÐ(Ô)×0Ò0à# Aœ;Ý*¨8°A¬;Ñ7Ô7Ø!.ð ð ñ ô ð ñ ð�ÒÐÝŒz˜)Ñ$Ô$Ð$Ø �6Ò Ð Ø�yŠy˜Ñ$Ô$Ð$ð Ð r#cóF—t|||¦«}t|¦«dS)z% Prints alternatives summary N)rxr)rpr rqs r$Ú print_summaryrzÇs$€õ ˜$ ¨ Ñ 4Ô 4€DÝ ˆ$�K„K€K€K€Kr#cóT—|D]$}||vs ||dkrtd|z¦«Œ%dS)zC Check that config has param_list and this params not None NzError: %s must be specified)r1)ÚconfigÚ param_listÚparams r$Ú check_paramsrÏsO€ððHðHˆØ ˜Ð Ð  &¨¤-°4Ò"7Ð"7Ý Ð!>ÀÑ!FÑ GÔ GÐ GøðHðHr#có&—|dkrdS|dkrdSdS)Nú~zbuild-inú+rUrSr"rVs r$Úext_letter_to_statusrƒØs#€Ø �‚}€}؈zØ �3ŠˆØˆyàˆzr#cóv—tj¦«rdnd}t|¦«5}| ¦«}ddd¦«n #1swxYwYi}|D]:}| d¦«}|d ¦«||d<Œ;|D]$} ||d|d<Œ#t $rYŒ!wxYw|S)Nz&/etc/cl.selector.conf.d/phpextdesc.txtz/etc/cl.selector/phpextdesc.txtú=rrÚnameÚ description)rÚ in_cagefsrFÚ readlinesÚsplitrHÚKeyError)Útmp_listÚ descr_fileÚfÚ desct_contentÚfull_desct_dictÚlineÚ line_partsÚitems r$Úfill_descriptionsr”ás€Ý=EÔ=OÑ=QÔ=QÐxÐ9Ð9ÐWx€JÝ ˆjÑ Ô ð&˜QØŸ š ™ œ ˆ ð&ð&ð&ñ&ô&ð&ð&ð&ð&ð&ð&øøøð&ð&ð&ð&à€OØð?ð?ˆØ—Z’Z ‘_”_ˆ Ø)3°A¬×)<Ò)<Ñ)>Ô)>ˆ˜  1œ Ñ&Ð&Øððˆð Ø"1°$°v´,Ô"?ˆD�Ñ Ð øÝð ð ð Ø ˆDð øøøà €Os#§AÁA ÁA ÂB)Â) B6Â5B6cóP—ddi}ttj|¦«¦«dS)NrgÚok)rrhro)Ú result_dicts r$Úprint_json_status_okr˜ñs*€Ø˜TÐ"€KÝ �$Œ*�[Ñ !Ô !Ñ"Ô"Ð"Ð"Ð"r#cóš—tj tj¦«rXt tjd¦«5}| ¦« ¦«cddd¦«S#1swxYwYt¦«  ¦«D](}tj  d|z¦«r|cSŒ)dS)zV Return user (name of cpanel account) for PHP Selector without CageFS feature rANz/var/cpanel/users/) rCrDrErÚ USER_CONFrFÚreadrHrÚ get_user_dictÚexists)rŽr7s r$Úget_cpanel_userržösê€õ „w‡~‚~•hÔ(Ñ)Ô)ð$Ý •(Ô$ cÑ *Ô *ð $¨aØ—6’6‘8”8—>’>Ñ#Ô#ð $ð $ð $ð $ñ $ô $ð $ð $ð $ð $ð $ð $øøøð $ð $ð $ð $å‘”×%Ò%Ñ'Ô'ððˆÝ Œ7�>Š>Ð.°Ñ5Ñ 6Ô 6ð ØˆKˆKˆKð à ˆ4sÁ&A7Á7A;Á>A;cóð—t|¦«ttjd¦«5}| |¦«ddd¦«n #1swxYwYt jtjd¦«dS)zS Set user (name of cpanel account) for PHP Selector without CageFS feature ÚwNi¤)r8rFrršr,rCÚchmod)r7rŽs r$Úset_cpanel_userr¢s¡€õ ˜dÑ#Ô#Ð#Ý �hÔ  #Ñ &Ô &ð¨!Ø �Š�‰ Œ ˆ ðððñôððððððøøøððððå„H�XÔ  Ñ'Ô'Ð'Ð'Ð'sªA Á AÁAFcóò—ttj¦«sdSd}tj |¦«r|}nt }t|¬¦«}| dtt|¦«¦«¦«| dtt|¦«¦«¦«tj ddd¬¦«d kr%td ¦«tjd ¦«dSdS) Nz&/etc/sysctl.d/cloudlinux-linksafe.conf)Ú config_filezfs.protected_symlinks_createzfs.protected_hardlinks_createzsysctl --system &>/dev/nullTú /bin/bash©ÚshellÚ executablerz&Error while executing: sysctl --systemr)rrÚLVErCrDrErrÚsetr4ÚintÚ subprocessÚcallrr*r-)ÚenableÚnew_confÚconfÚ sysctl_cfgs r$Úswitch_linksafer²sÝ€Ý %¥g¤kÑ 2Ô 2ðØˆØ7€HÝ „w‡~‚~�hÑÔð#؈ˆå"ˆÝ¨Ð-Ñ-Ô-€J؇N‚NÐ1µ3µs¸6±{´{Ñ3CÔ3CÑDÔDÐD؇N‚NÐ2µC½¸F¹ ¼ Ñ4DÔ4DÑEÔEÐEÝ„Ð4¸DÈ[ÐYÑYÔYÐ]^Ò^Ð^Ý Ð6Ñ7Ô7Ð7Ý Œ�‰ Œ ˆ ˆ ˆ ð_Ð^r#Tcó—|€td¦«}| |¦«}t¦«r|dz}n|dz}dtjzdz}t |d¦«5}|dz|v}ddd¦«n #1swxYwY|rF|sCt |d ¦«5}| d|zdz¦«ddd¦«n #1swxYwYn"|r t j ||¦«|  |¦«dS) a[ Add path to PATH variable in ~/.bashrc :param user: name of user :type user: string :param homedir: path to home directory :type homedir: string :param obj: instance of ClUserSelect class :type obj: instance of ClUserSelect class :param add: add path to .bashrc when True, remove otherwise :type obj: bool NÚphpz /.profilez/.bashrcz PATH=$HOME/z:$HOME/.cl.selector:$PATHrAr)Úa) r Ú _change_uidrÚ SELECTOR2_DIRrFr,ÚclcommonÚutilsÚdelete_line_from_fileÚ _restore_uid) r7ÚhomedirÚobjÚaddÚcur_userÚbashrcr‘rŽÚfounds r$Úmodify_search_path_in_bashrcrÂs˜€ð €{ݘ5Ñ!Ô!ˆØ�Š˜tÑ$Ô$€Hõ�{„{ð&ؘ;Ñ&ˆˆà˜:Ñ%ˆØ �<Ô5Ñ 5Ð8SÑ S€DÝ ˆf�cÑ Ô ð!˜aØ�t‘ ˜qÐ ˆð!ð!ð!ñ!ô!ð!ð!ð!ð!ð!ð!øøøð!ð!ð!ð!à ð?Øð ,Ý�f˜cÑ"Ô"ð , aØ—’˜˜t™  dÑ*Ñ+Ô+Ð+ð ,ð ,ð ,ñ ,ô ,ð ,ð ,ð ,ð ,ð ,ð ,øøøð ,ð ,ð ,ð ,øð ð ?Ý ŒN× 0Ò 0°¸Ñ >Ô >Ð >Ø×Ò�XÑÔÐÐÐs$Á"A6Á6A:Á=A:ÂB=Â=CÃCcóD‡—ˆfd„}|€td¦«}|dz}|¦«tjddd|g¦«dkrtjd ¦«| |¦«}t j d t‰¦«d d…|d d ¦«}|D]-} |dz| zdz} |dz| zdz} tj | | ¦«Œ.|  |¦«tj |dzd¦«| |¦«|¦«dS)a¢ Restore (apply) settings for PHP Selector from backup :param user: name of user :type user: string :param homedir: path to user's home directory :type homedir: string :param uid: user's uid :type uid: int :param alt_dirs: list of alt-php directories like ['php51', 'php52'] :type alt_dirs: list :param obj: instance of ClUserSelect class :type obj: ClUserSelect object cóì•—tjtj dt ‰¦«dd…¦«d¦«tjdd¦«tjdd¦«dS)Nú /var/cagefséþÿÿÿTz/usr/share/cagefs/etcz/usr/share/cagefs/etc.new)ÚshutilÚrmtreerCrDrir4)Úuids€r$Úcleanupz-restore_settings_from_backup..cleanupPs_ø€åŒ •b”g—l’l =µ#°c±(´(¸2¸3¸3´-Ñ@Ô@À$ÑGÔGÐGÝŒ Ð-¨tÑ4Ô4Ð4ÝŒ Ð1°4Ñ8Ô8Ð8Ð8Ð8r#Nr´z /.cl.selectorrú--silentú--force-update-etcrrrÅrÆÚetczcl.php.dz/alt-z /alt_php.iniz/alt_ú.iniz/.cagefsT)r r¬r­r*r-r¶rCrDrir4rÇÚcopyÚset_version_from_backuprÈr») r7r¼rÉÚalt_dirsr½rÊÚbase_dest_pathr¿Ú base_src_pathÚalt_dirÚsrc_pathÚ dest_paths ` r$Úrestore_settings_from_backupr×AsPø€ð9ð9ð9ð9ð9ð  €{ݘ5Ñ!Ô!ˆØ˜Ñ.€NØ €G�I„I€Iõ ŒÐ.° Ð /dev/nullz/sbin/chkconfig cagefs off©rCrDrEr¬Úrunr"r#r$Údisable_cagefs_servicerÜos¢€Ý „w‡~‚~Ð*Ñ+Ô+ðYÝŒÐ:À$ÐS^Ð_Ñ_Ô_Ð_ÝŒÐ7¸tÐP[Ð\Ñ\Ô\Ð\ÝŒÐ7¸tÐP[Ð\Ñ\Ô\Ð\Ð\Ð\åŒÐ?ÀtÐXcÐdÑdÔdÐdÝŒÐ3¸4ÈKÐXÑXÔXÐXÐXÐXr#có.—tj d¦«rGtjddd¬¦«tjddd¬¦«tjddd¬¦«dStjddd¬¦«tjd dd¬¦«dS) NrÙz /usr/bin/systemctl unmask cagefsTr¥r¦z /usr/bin/systemctl enable cagefsz/usr/bin/systemctl start cagefsz/sbin/chkconfig cagefs onz'/sbin/service cagefs start &> /dev/nullrÚr"r#r$Úenable_cagefs_servicerÞys¢€Ý „w‡~‚~Ð*Ñ+Ô+ðfÝŒÐ9ÀÐR]Ð^Ñ^Ô^Ð^ÝŒÐ9ÀÐR]Ð^Ñ^Ô^Ð^ÝŒÐ8ÀÐQ\Ð]Ñ]Ô]Ð]Ð]Ð]åŒÐ2¸$È;ÐWÑWÔWÐWÝŒÐ@ÈÐYdÐeÑeÔeÐeÐeÐer#cóT—tj d¦« ddl}n3#t$r&t d¦«tjd¦«YnwxYw| ¦«}|s#t d¦«tjd¦«|r|d}t|¦«nzt¦«}|s2t d¦«t d¦«tjd¦«tj  tj ¦«st|¦«t|¦«t¦«t!j|¦«}|j}|D]%}d |zd z}|d z|zd z}t'||¦«Œ&t)d ¦«} t+|||j|| ¦«|  |¦«t1||| ¦«t3¦«t5jdt9|j¦«zdzt9|j¦«zdzdd¬¦«dS)z+ Setup PHP Selector without CageFS ú/usr/share/cagefsrNúError: CageFS is not installedrúalt-php not foundzVError: failed to detect cpanel account. Please specify name of an account as argument:z'selectorctl --setup-without-cagefs USERú /opt/alt/ú/link/conf/alt_php.iniz/.cl.selector/alt_rÎr´ú/usr/sbin/lvectl destroy ú% &>/dev/null; /usr/sbin/lvectl apply ú &>/dev/nullTr¥r¦)r*rDrmÚ cagefslibÚ ImportErrorrr-Ú get_alt_dirsr¢ržrCr�rršr8r²ÚpwdÚgetpwnamÚpw_dirrr r×Úpw_uidÚcreate_selector_symlinksrÂrÜr¬rÛr4) ÚargsrèrÑr7Úpwr¼rÔÚalt_pathÚ user_pathr½s r$Úsetup_without_cagefsrôƒsV€õ„H‡O‚OÐ'Ñ(Ô(Ð(ðØÐÐÐÐøÝ ðððÝ Ð.Ñ/Ô/Ð/Ý Œ�‰ Œ ˆ ˆ ˆ ðøøøð×%Ò%Ñ'Ô'€HØ ðÝ Ð!Ñ"Ô"Ð"Ý Œ�‰ Œ ˆ à ð "Ø�AŒwˆÝ˜ÑÔÐÐåÑ Ô ˆØð Ý ÐjÑ kÔ kÐ kÝ Ð;Ñ <Ô <Ð <Ý ŒH�Q‰KŒKˆKÝŒw�~Š~�hÔ0Ñ1Ô1ð "Ý ˜DÑ !Ô !Ð !å˜dÑ#Ô#Ð#åÑÔÐÝ Œ�dÑ Ô €BØŒi€Gàð*ð*ˆØ Ñ(Ð+CÑCˆØÐ2Ñ2°WÑ<¸vÑEˆ Ý�Y Ñ)Ô)Ð)Ð)Ý �uÑ Ô €CÝ   w°´ ¸8ÀSÑIÔIÐIØ× Ò  Ñ&Ô&Ð&Ý   w°Ñ4Ô4Ð4ÝÑÔÐå„NØ#Ý ˆbŒi‰.Œ.ñ à 1ñ 2õ ˆbŒi‰.Œ.ñ ð ñ  ð Øðñôðððs¡&¦-AÁAcót—tj tj¦«s#t d¦«t jd¦«t j d¦« ddl }n3#t$r&t d¦«t jd¦«YnwxYw|  ¦«}|s#t d¦«t jd¦«td¬ ¦«|D]=}d |zd z}tj  |¦«rtj|¦«Œ>t¦«}|s#t d ¦«t jd¦«t!|¦«t#j|¦«}|j}t)d ¦«}t+|||d¬¦«tjtj¦«t-jddd|g¦«t1¦«t-jdt3|j¦«zdzt3|j¦«zdzdd¬¦«dS)z: Revert to default PHP Selector setup with CageFS zŠ>�(Ô,Ñ -Ô -ðÝ ÐLÑMÔMÐMÝ Œ�‰ Œ ˆ Ý„H‡O‚OÐ'Ñ(Ô(Ð(ðØÐÐÐÐøÝ ðððÝ Ð.Ñ/Ô/Ð/Ý Œ�‰ Œ ˆ ˆ ˆ ðøøøð×%Ò%Ñ'Ô'€HØ ðÝ Ð!Ñ"Ô"Ð"Ý Œ�‰ Œ ˆ ݘ4Ð Ñ Ô Ð àð ð ˆØ Ñ(Ð+CÑCˆÝ Œ7�>Š>˜(Ñ #Ô #ð Ý ŒI�hÑ Ô Ð øÝ Ñ Ô €DØ ðÝ Ð,Ñ-Ô-Ð-Ý Œ�‰ Œ ˆ å˜dÑ#Ô#Ð#Ý Œ�dÑ Ô €BØŒi€GÝ �uÑ Ô €CÝ   w°¸Ð?Ñ?Ô?Ð?å„I�hÔ Ñ!Ô!Ð!õ„NÐ)¨:Ð7KÈTÐRÑSÔSÐSÝÑÔÐå„NØ#Ý ˆbŒi‰.Œ.ñ à 1ñ 2õ ˆbŒi‰.Œ.ñ ð ñ  ð ØðñôðððsÁ-A2Á2-B"Â!B"có—tj d¦« ddl}ddl}n3#t $r&t d¦«tjd¦«YnwxYw| ¦«r|  |¬¦«dSdS)z¢ Apply "global" php.ini settings to all alt-php versions :param args: list of command line parameters (names of php.ini options) :type args: list ràrNrár)Úoptions) r*rDrmrèÚcagefsreconfigurerérr-Úget_alt_versionsÚreplace_alt_settings)rðrèrûs r$Úapply_global_php_inirþîs±€õ „H‡O‚OÐ'Ñ(Ô(Ð(ðØÐÐÐØ Ð Ð Ð Ð øÝ ðððÝ Ð.Ñ/Ô/Ð/Ý Œ�‰ Œ ˆ ˆ ˆ ðøøøð×!Ò!Ñ#Ô#ð=Ø×.Ò.°tÐ.Ñ<Ô<Ð<Ð<Ð<ð=ð=s¡*ª-AÁAcó—tt¦«rst¦«}tj¦«D]!\}}| d|›d|›d�¦«Œ"t j|d|d |¦«zdœ¦«dSdS)Nz 'z' is required for 'ú'ÚWARNú,©rgr.)r:r rkÚitemsrmrÚ print_diagri)Ú print_formatÚ print_messageÚ modules_listÚ module_nameÚ dep_modules r$Ú"_check_depencies_and_print_messager s¥€Ý Õ ÑÔðpå‘v”vˆ Ý':Ô'@Ñ'BÔ'Bð Zð ZÑ #ˆK˜Ø × Ò Ð À À À ÈZÈZÈZÐ XÑ YÔ YÐ YÐ YÝÔ˜<°FÀ}ÐWZ×W_ÒW_Ð`lÑWmÔWmÑGmÐ)nÐ)nÑoÔoÐoÐoÐoð pðpr#cóh—t|¦« |¦«}t|||¦«S©N)r Úlist_extensionsÚparse_extensions)Ú interpreterrKr0Úext_lists r$Úget_extensionsr s/€Ý˜;Ñ'Ô'×7Ò7¸Ñ@Ô@€HÝ ˜H g¨sÑ 3Ô 3Ð3r#có"—g}|D]|}d}|ddurd}n |ddurd}|dkr| ||df¦«ŒA| |dd t|¦«d œ¦«t|¦«}Œ}|d kr||d œ}|S|S) Nr�rTr‚FrRrYrr@)r†r‡Ústaterh)rKÚ extensions)rmrƒr”)rrKr0Ú json_listÚextÚactionr—s r$rrsǀ؀IØð 5ð 5ˆØˆØ ˆqŒ6�Tˆ>ˆ>؈FˆFØ �ŒV�uˆ_ˆ_؈FØ �&Š=ˆ=Ø × Ò ˜f c¨!¤fÐ-Ñ .Ô .Ð .Ð .à × Ò  c¨!¤f¸RÕJ^Ð_eÑJfÔJfÐgÐgÑ hÔ hÐ hÝ)¨)Ñ4Ô4ˆIˆIØ ˆf‚}€}Ø")¸ÐCÐCˆ ØÐØ Ðr#cóv—d}d} ttdg¦« ¦«}|dkrgS| d¦«dd…S#t$r[}|t |¦«vrt d¦«n |t |¦«vrt d ¦«t |¦«Yd}~dSd}~wwxYw) z� Return list of users that are in CageFS If CageFS is not installed or initialized throws exception and prints it :return: zNo such file or directoryzCageFS is not initializedz--list-enabledr@r)rNzERROR: CageFS not installed.zWError: CageFS is not initialized. Use "/usr/sbin/cagefsctl --init" to initialize CageFS)rÚCAGEFSCTL_COMMANDrHrŠrr4r1)Únot_installed_msgÚnot_initialized_msgÚusersrTs r$Úget_cagefs_usersr!sè€ð4ÐØ5Ðð  ÝÕ.Ð0@ÐAÑBÔB×HÒHÑJÔJˆØ �BŠ;ˆ;؈IØ�{Š{˜4Ñ Ô    Ô$Ð$øÝ ð ð ð Ø ¥ A¡¤Ð &Ð &Ý Ð!?Ñ @Ô @Ð @Ð @Ø ¥C¨¡F¤FÐ *Ð *Ý Øiñ ô ð õ ˜QÑÔÐÐÐÐÐÐÐøøøøð øøøs†/A¶AÁ B8ÁAB3Â3B8cój—hd£}d„|D¦«}||zrtd¦«|t|¦«zstd¦«tjt j¦«¦«j}ddh}|D]\}}||vr||krtd¦«Œ||zs| d|f¦«dSdS)u Verifies that the supplied options are admissible inside CageFS and rebinds --user/-u to the caller's identity. F-28: previously this used set-intersection — any single allowed option was enough to pass even when root-only dispatches (--setup-without-cagefs, --revert-to-cagefs, --apply-global-php-ini) were smuggled alongside. We now reject those dispatches explicitly when invoked from inside CageFS, so option smuggling cannot reach the privileged code paths. F-14: previously this only auto-appended --user when omitted, accepting any caller-supplied value verbatim. We now reject any --user/-u whose value does not match the caller's effective UID, closing the IDOR independently of CageFS /etc/passwd masking. >ú--revert-to-cagefsú--apply-global-php-iniú--setup-without-cagefscó—h|]\}}|’ŒSr"r")Ú.0ÚoptÚ_s r$ú z+verify_options_in_cagefs..Qs€Ð/Ð/Ð/™V˜S !�SÐ/Ð/Ð/r#z.Error: This command is not supported in CageFSú--userú-uz3Error: --user must match the current user in CageFSN)r1rªrëÚgetpwuidrCÚgeteuidÚpw_namerm)rúÚsupported_optionsÚroot_only_in_cagefsÚ input_optionsÚcurrent_user_nameÚ user_optsr%Úvalues r$Úverify_options_in_cagefsr39s€ð&ððÐð 0Ð/ wÐ/Ñ/Ô/€MØÐ*Ñ*ðOÝÐMÑNÔNÐNà �3Ð0Ñ1Ô1Ñ 1ðOÝÐMÑNÔNÐNõœ ¥R¤Z¡\¤\Ñ2Ô2Ô:ÐØ˜4Ð €IØðXðX‰ ˆˆUØ �)Ð Ð  Ð):Ò :Ð :Ý Ð!VÑ WÔ WÐ WøØ ˜IÑ %ð6Ø�Š˜Ð"3Ð4Ñ5Ô5Ð5Ð5Ð5ð6ð6r#có„—|sdS t||¦«\}}t||¬¦«S#ttf$rYdSwxYw)zl Resolve domain to docroot and create a Website object. Returns None if domain is not provided. N)ÚdomainÚdocroot)rrrr)r7r5r&Údoc_roots r$Ú_get_website_from_domainr8csd€ð ð؈tðÝ:¸4ÀÑHÔH‰ ˆˆ8ݘf¨hÐ7Ñ7Ô7Ð7øÝ Õ1Ð 2ðððàˆtˆtðøøøs †#*ª?¾?c óH3—i}d|d<d|d<d|d<d|d<d|d<d|d <d|d <d |d <t|d <d|d<i}g}t¦« tjtjdd…dgd¢¦«\}}n7#tj$r%t ¦«tjd¦«YnwxYwgd¢}tj ¦«rt||¦«|D�]ã\}}|dvr#t ¦«tjd¦«Œ-|dvrL|  d¦«D]5} |  t|¦«¦«Œ&#t$rYŒ2wxYwŒ}|dvrd|d<Œ‡|dvr$t|¦«tjd¦«Œ¯|dvr#t!¦«tjd¦«ŒÖ|dvr$t#|¦«tjd¦«Œþ|dvrd|d<�Œ |dvrd|d <�Œ|d!vrd|d"<�Œ|d#vrd|d$<�Œ*|d%vrd|d&<�Œ5|d'vrd|d<�Œ@|d(vr||d<�ŒK|d)vr||d<�ŒV|d*v�rˆ||d+<t%¦«} t'j¦«r|  |¦«} �Œ˜|  d¦«} t-¦«} t/| ¦«dkrf|  |¦«} t1j¦«dkr9|  | ¦«D]#} t7¦« | ¦«Œ$nL| D]1} | | vr+| |  |  | ¦«¦«z } Œ2d | ¦«|d+<�Œƒ#t$j$rN}tj  tC|¦«d,z¦«tjd¦«Yd}~�ŒÛd}~wwxYw|d-vr||d<�Œî|d.vr||d/<�Œù|d0vr||d1<�Œ|d2vr||d3<�Œ|d4vr||d5<�Œ|d6vrd|d7<�Œ%|d8vrd|d9<�Œ0|d:vr||d;<�Œ;|dvr||d?<�ŒQ|d@vr||dA<�Œ\|dBvr||dC<�Œg|dDvr||dE<�Œr|dFvrd|dG<�Œ}|dHvrd|d<�Œˆ|dIvrd|d<�Œ“|dJvrd|dK<�Œž|dLvr||dM<�Œ©|dNvr||dO<�Œ´|dPvr||dQ<�Œ¿|dRvr||dS<�ŒÊ|dTvrdU|d <�ŒÕ|dVvrd|d <�Œà|dWvrd|dX<�Œë|dYvrd|dZ<�Œö|d[vrd\|d <�Œ|d]vrd^|d <�Œ |d_vrt|¦«|d <�Œ$|d`vrda|d <�Œ/|dbvrd|dc<�Œ:|ddvrd|de<�ŒE|dfvršd+|vrtEdg¦«tG¦«} | stEdh¦«t%¦«} t-¦«} | D]1} | | vr+| |  |  | ¦«¦«z } Œ2d | ¦«|d+<�Œåt/|¦«dkrwt/|¦«dkrT|drL tIt'|d¦« %¦«d¦«n #tL$rYnwxYwtEdidj¦« d1|vr$d&|vr t'¦« '¦«d|vrÍ|d d\kr>t'|d¦« (¦«D]}tIdk|z¦«ŒdSdlgdmœ}t'|d¦« (¦«D]3}|dn  |d|d|dodpœ¦«Œ4tItSj*|¦«¦«dSd |vrMt'|d¦« +|d¦«}tY||d |d ¦«dSd$|vr@tIdkt'|d¦« -|d¦«z¦«dSd/|vrLt'|d¦« .|d/¦«|d d\krt_¦«dSdSd3|vrld+|vr|d+rtaj1dq¦«‚t'|d¦« 2|d3¦«|d d\krt_¦«dSdSd5|vrld+|vr|d+rtaj1dr¦«‚t'|d¦« 3|d5¦«|d d\krt_¦«dSdSd7|vr‰ti|ds¦«tk|d|d|d ¦«}|d d kr|D]}tIdt|z¦«ŒdS|d d\kr#tItSj*|¦«¦«dSdSd;|vrvti|ds¦«tm|d¦« 7|dt-tqdu„|d;  d¦«¦«¦«¦«dSd=|vr¢ti|ds¦«tm|d¦« 9|dt-tqdv„|d=  d¦«¦«¦«¦«t/tt¦«rtw|d dw¦«dSdSd?|vr¾ti|ds¦«tm|d¦« <|dt-tqdx„|d?  d¦«¦«¦«¦«t/tt¦«rtw|d dy¦«dS|d d\krt_¦«dSdSd"|vrWti|dz¦«t7|d|¦« +|d+|d¦«}tY|¦«dSd&|vr_ti|dz¦«tIdkt7|d|¦« -|d+|d|d¦«z¦«dSd|vr:ti|d{¦«t7|d|¦« =¦«dSd1|v�rti|dz¦« t'¦« '¦«n1#t`j>$r|d1d|kr‚td¦«YnwxYw|  | ¦«d} t7|d|¦«}| .| |d1|d|d|d¦«}| ?|  | ¦«¦«|drtY|¦«dSdSd9|vröti|dz¦«t�|d+|d¦«}|drptƒ|d|¦« B|d+|d|¬}¦«D]5}d~}|d€d}n |ddurd€}tI|›d�|d›�¦«Œ6dStƒ|d|¦« C|d+|d|¬}¦«D]}tI|d¦«ŒdSdA|vrÛti|d‚¦«t'jD¦«|d+  d¦«} | D]ƒ} tƒ|d|¦«}t�| |d¦«}| E| |dt-tqdƒ„|dA  d¦«¦«¦«d|¬„¦«Œ„| ?| ¦«dSdC|vrÚti|d‚¦«t'jD¦«|d+  d¦«} | D]‚} tƒ|d|¦«}t�| |d¦«}| F| |dt-tqd…„|dC  d¦«¦«¦«|¬}¦«Œƒ| ?| ¦«dSdE|vrèti|d‚¦«t'jD¦«|  | ¦«d} tƒ|d|¦«}t�| |d¦«}| <| |dt-tqd†„|dE  d¦«¦«¦«|¬}¦«| ?|  | ¦«¦«dSdG|vrÔti|d‚¦«t'jD¦«|  | ¦«d} tƒ|d|¦«}t�| |d¦«}| G| |d|¬}¦«}| ?|  | ¦«¦«tId |¦«¦«dSdK|vrcti|ds¦«t7|d|¦« H|d¦«} tId | ¦«¦«dSdM|vrHti|ds¦«t7|d|¦« I|dM|d¦«dSdO|vrñti|d‚¦«t'jD¦«|  | ¦«d} t�| |d¦«}t•|d|¦«}| K| |d|dO|d d|d |¬}¦«| ?|  | ¦«¦«|d d\krt™jM|d i¦«dSdSdQ|vrñti|d‚¦«t'jD¦«|  | ¦«d} t�| |d¦«}t•|d|¦«}| K| |d|dQ|d d|d |¬}¦«| ?|  | ¦«¦«|d d\krt™jM|d i¦«dSdSdS|vrðti|d‚¦«t'jD¦«|  | ¦«d} t�| |d¦«}t•|d|¦«}| N| |d|dS|d |d |¬}¦«| ?|  | ¦«¦«|d d\krt™jM|d i¦«dSdSdc|vrÝd} d}t�| Od+¦«|d¦«}d+|vr|d+  d¦«} |dr|d  d¦«}t•|d|¦«}| P| ||¬}¦«| ?| ¦«|d d\krt™jM|d i¦«dSdSdX|vrti|dz¦«t�|d+|d¦«}t™jM|d t•|d|¦« Q|d+|d|¬}¦«¦«dSdZ|vr�ti|dz¦«t�|d+|d¦«}t™jM|d t•|d|¦« Q|d+|d|¬}¦«d¬‡¦«dSde|vrút%¦«} |  R¦« S¦«D]Ç} t7¦« T| ¦«t7¦« U| ¦«t•¦« V| ¦«Œg#t`jW$rYŒxt`jX$r=}|d s+t™jY|d djtC|¦«dˆœ¦«Yd}~Œ¾d}~wwxYwdSdS#t`j>$rV}t™jY|d d‰tC|¦«|jZ|j[dŠœ¦«tjd¦«Yd}~dSd}~wt¸$rV}t™jY|d djtC|¦«|jZ|j[dŠœ¦«tjd¦«Yd}~dSd}~wtºt¼f$rtEd‹¦«YdSt¾$r<}tÁja¦«}t™jY|d dj|dˆœ¦«Yd}~dSd}~wwxYw)ŒNr´rrKFzshow-allú print-summaryúshow-native-versionÚplainÚdecoderÚquietrYr z api-versionr5rz6hi:lSsCcB:Y:N:E:D:R:v:Gu:b:ge:d:r:atpVLT:k:m:x:QqPjwWz)/Úhelpzsetup-without-cagefszrevert-to-cagefsz interpreter=rkÚsummaryz user-summaryÚcurrentz user-currentz set-current=zenable-alternative=zdisable-alternative=zenable-extensions=zdisable-extensions=zreplace-extensions=zversion=úlist-extensionszuser=zdomain=zset-user-current=úlist-user-extensionszenable-user-extensions=zdisable-user-extensions=zreplace-user-extensions=Úallúreset-user-extensionsr:r;ú list-userszchange-to-version=z add-options=zreplace-options=zdelete-options=Úbase64úapply-symlinks-rulesr>ú print-optionsúprint-options-saferhÚcsvÚperlz api-version=ú reset-optionsú update-backupzapply-global-php-inizexclude-pid-list=z for-all-users)ú-lú--listú-sú--user-summaryú-cú--user-currentú-bú--set-user-currentú-eú--enable-user-extensionsú-dú--disable-user-extensionsú-rú--replace-user-extensionsú-tú--reset-user-extensionsú-gú--list-user-extensionsú-kú --add-optionsú-mú--replace-optionsú-xú--delete-optionsú-Pú--print-optionsú--print-options-safeú-zú--reset-options)z-hz--helpr)z--exclude-pid-listr)z--apply-symlinks-rulesTrH)r")r )r!)rOrPzlist-alternatives)z-Sz --summaryz show-summary)rQrRzshow-user-summary)z-Cz --currentz show-current)rSrTzshow-user-current)z-az--all)z-vz --version)rYú--domain)r)r(r7r))rl)z-Bz --set-currentz set-current)rUrVzset-user-current)z-Yz--enable-alternativezenable-alternative)z-Nz--disable-alternativezdisable-alternative)z-Gz--list-extensionsrB)r_r`rC)z-Ez--enable-extensionszenable-extensions)z-Dz--disable-extensionszdisable-extensions)z-Rz--replace-extensionszreplace-extensions)rWrXzenable-user-extensions)rYrZzdisable-user-extensions)r[r\zreplace-user-extensions)r]r^rE)z-pz--print-summary)z-Vz--show-native-version)z-Lz --list-usersrF)z-Tz--change-to-versionzchange-to-version)rarbz add-options)rcrdzreplace-options)rerfzdelete-options)z-Qz--base64rG)z-qz--quiet)rgrhrI)rirJ)z-jz--jsonrh)z-wz--csvrK)z --api-version)z-Wz--perlrL)rjrkrM)z--update-backuprN)z--for-all-userszŠ--for-all-users and --user options are mutually exclusive options and cannot be used simultaneously. Use --for-all-user OR --user instead.z=No changes were made: there are no users with cagefs enabled zWrong set of optionsÚERRORz%s %s %sr–)rgrprprf)ÚshortÚfullrDzsThe 'enable-alternative' option is used to enable configurations globally. The 'user' option can't be used with it.zuThe 'disable-alternative' option is used to disable configurations globally. The 'user' option can't be used with it.)rrKz%s %scó*—| ¦«Sr ©rH©rbs r$rezmain..®ó€°q·w²w±y´y€r#có*—| ¦«Sr rqrrs r$rezmain..³rsr#zModules left by dependencies:có*—| ¦«Sr rqrrs r$rezmain..»rsr#z#Modules left/added by dependencies:)rr7)rÚnative)ÚwebsiterRr�r‚r>)rrKr7có*—| ¦«Sr rqrrs r$rezmain.. s€°·²±´€r#)r7rKrÚ check_extrwcó*—| ¦«Sr rqrrs r$rezmain..s€¨¯ª© ¬ €r#có*—| ¦«Sr rqrrs r$rezmain..&s€¸Q¿WºW¹Y¼Y€r#)ÚescaperÚWARNING)rgr.ÚdetailsÚcontextz(Incomplete or incorrect set of arguments)br!r<Úgetoptr*r;Ú GetoptErrorr%r-rrˆr3rŠrmr«Ú ValueErrorrôrørþrrÚwork_without_cagefsÚget_uidrkr:rCr+Ú get_namesr Úcagefs_copy_etcriÚNoSuchUserExceptionr+r,r4r1rrÚget_native_versionÚ TypeErrorÚcheck_requirementsÚlist_alternativesrhroÚ get_summaryrzÚ get_versionÚ set_versionr˜rÚVersionModificationBlockedÚenable_versionÚdisable_versionrrr Úenable_extensionsrÚdisable_extensionsr r Úreplace_extensionsÚapply_symlinks_rulesÚNativeNotInstalledÚclean_crui_imagesr8r Úlist_all_extensionsÚlist_enabled_extensionsÚ%check_multiphp_system_default_versionÚbulk_enable_extensionsÚbulk_disable_extensionsÚreset_extensionsÚ list_usersÚchange_to_versionr Úinsert_optionsrÚ print_dataÚdelete_optionsÚgetÚ reset_optionsÚ get_optionsrœÚkeysÚ_check_user_in_cagefsÚ_backup_settingsÚbackup_php_optionsÚ NotCageFSUserÚUnableToSaveDatarr~rrr‹ÚUnboundLocalErrorÚ ExceptionÚ tracebackÚ format_exc)r|ÚactionsÚexclude_pid_listÚoptsrðÚopts_supported_in_cagefsÚorµÚpidÚclpwdrÉrÚ user_listr7rTrcÚalternatives_dictrprr“ÚcrwrrrrKÚmsgs r$Úmainr»ss·€Ø €FØ!€Fˆ=ÑØ€Fˆ9ÑØ€Fˆ:ÑØ#€Fˆ?ÑØ$)€FÐ Ñ!Ø€Fˆ9ÑØ€Fˆ7�OØ€Fˆ8ÑÝ!€Fˆ=ÑØ€Fˆ8Ñà€GØÐåÑÔÐð8Ý”]Ý ŒH�Q�R�RŒLØ Dð0 ð0 ð0 ñ4 ô4 ‰ ˆˆdˆdøõj Ô ðððÝ ‰ŒˆÝ Œ�‰ Œ ˆ ˆ ˆ ðøøøð ð ð Ðõ@ÔÑÔðAÝ  Ð'?Ñ@Ô@Ð@àðH1ñH1‰ˆˆ1Ø Ð Ð Ð Ý ‰GŒGˆGÝ ŒH�Q‰KŒKˆKˆKØ Ð(Ð (Ð (Ø—w’w˜s‘|”|ð ð �ðØ$×+Ò+­C°©H¬HÑ5Ô5Ð5Ð5øÝ!ðððØ�Hðøøøð ð Ð,Ð ,Ð ,Ø.2ˆGÐ*Ñ +Ð +Ø Ð,Ð ,Ð ,Ý  Ñ &Ô &Ð &Ý ŒH�Q‰KŒKˆKˆKØ Ð(Ð (Ð (Ý Ñ Ô Ð Ý ŒH�Q‰KŒKˆKˆKØ Ð-Ð -Ð -Ý  Ñ &Ô &Ð &Ý ŒH�Q‰KŒKˆKˆKØ Ð"Ð "Ð "Ø+/ˆGÐ'Ñ (Ñ (Ø Ð%Ð %Ð %Ø&*ˆG�NÑ #Ñ #Ø Ð*Ð *Ð *Ø+/ˆGÐ'Ñ (Ñ (Ø Ð%Ð %Ð %Ø&*ˆG�NÑ #Ñ #Ø Ð*Ð *Ð *Ø+/ˆGÐ'Ñ (Ñ (Ø �/Ð !Ð !Ø!%ˆF�:Ñ Ñ Ø Ð%Ð %Ð %Ø !ˆF�9Ñ Ñ Ø Ð$Ð $Ð $Ø ˆF�8Ñ Ñ Ø Ð"Ð "Ñ "؈F�6‰NÝ‘G”GˆEÝÔ+Ñ-Ô-ð Ø—m’m AÑ&Ô&�‘àŸš ™ œ �Ý ™FœF� ð  ݘ5‘z”z Q’�Ø#Ÿmšm¨AÑ.Ô.˜Ýœ:™<œ<¨1Ò,Ð,Ø(-¯ª¸Ñ(<Ô(<ðEðE Ý ,¡¤× >Ò >¸tÑ DÔ DÐ DÐ Døà$)ðRðR˜DØ#¨9Ð4Ð4Ø )¨U¯_ª_¸U¿]º]È4Ñ=PÔ=PÑ-QÔ-QÑ Q  øØ),¯ª°)Ñ)<Ô)<˜˜v™ùøÝÔ0ð ð ð Ý”J×$Ò$¥S¨¡V¤V¨d¡]Ñ3Ô3Ð3Ý”H˜Q‘K”K�K�K�K�K�K‘Køøøøð øøøð�,Ð Ð Ø ˆF�8Ñ Ñ Ø Ð)Ð )Ð )Ø%&ˆG�MÑ "Ñ "Ø Ð.Ð .Ð .Ø*+ˆGÐ&Ñ 'Ñ 'Ø Ð0Ð 0Ð 0Ø,-ˆGÐ(Ñ )Ñ )Ø Ð1Ð 1Ð 1Ø-.ˆGÐ)Ñ *Ñ *Ø Ð-Ð -Ð -Ø)-ˆGÐ%Ñ &Ñ &Ø Ð2Ð 2Ð 2Ø.2ˆGÐ*Ñ +Ñ +Ø Ð/Ð /Ð /Ø+,ˆGÐ'Ñ (Ñ (Ø Ð0Ð 0Ð 0Ø,-ˆGÐ(Ñ )Ñ )Ø Ð0Ð 0Ð 0Ø,-ˆGÐ(Ñ )Ñ )Ø Ð4Ð 4Ð 4Ø01ˆGÐ,Ñ -Ñ -Ø Ð5Ð 5Ð 5Ø12ˆGÐ-Ñ .Ñ .Ø Ð5Ð 5Ð 5Ø12ˆGÐ-Ñ .Ñ .Ø Ð3Ð 3Ð 3Ø/3ˆGÐ+Ñ ,Ñ ,Ø Ð+Ð +Ð +Ø&*ˆF�?Ñ #Ñ #Ø Ð1Ð 1Ð 1Ø,0ˆFÐ(Ñ )Ñ )Ø Ð(Ð (Ð (Ø$(ˆG�LÑ !Ñ !Ø Ð/Ð /Ð /Ø+,ˆGÐ'Ñ (Ñ (Ø Ð)Ð )Ð )Ø%&ˆG�MÑ "Ñ "Ø Ð-Ð -Ð -Ø)*ˆGÐ%Ñ &Ñ &Ø Ð,Ð ,Ð ,Ø()ˆGÐ$Ñ %Ñ %Ø Ð$Ð $Ð $Ø (ˆF�9Ñ Ñ Ø Ð#Ð #Ð #Ø"ˆF�7‰O‰OØ Ð+Ð +Ð +Ø'+ˆG�OÑ $Ñ $Ø Ð*Ð *Ð *Ø,0ˆGÐ(Ñ )Ñ )Ø Ð"Ð "Ð "Ø%ˆF�8Ñ Ñ Ø �/Ð !Ð !Ø$ˆF�8Ñ Ñ Ø Ð#Ð #Ð #Ý$'¨¡F¤FˆF�=Ñ !Ñ !Ø Ð"Ð "Ð "Ø%ˆF�8Ñ Ñ Ø Ð+Ð +Ð +Ø'+ˆG�OÑ $Ñ $Ø Ð%Ð %Ð %Ø'+ˆG�OÑ $Ñ $Ø Ð%Ð %Ð %ؘÐÐÝ$ð>ñôðõ %Ñ&Ô&ˆEØð fÝ$Ð%dÑeÔeÐeÝ‘G”GˆEÝ™œˆIØð Fð F�ؘyÐ(Ð(Ø §¢°·²¸tÑ1DÔ1DÑ!EÔ!EÑE�IøØ ŸXšX iÑ0Ô0ˆF�6‰NùÝ ˆ7�|„|�qÒÐÝ ˆw‰<Œ<˜1Ò Ð  Ð(=Ô!>Ð ð Ý•h˜v mÔ4Ñ5Ô5×HÒHÑJÔJÈ1ÔMÑNÔNÐNÐNøÝð ð ð Ø�ð øøøõ !Ð!7¸Ñ AÔ AÐ AðdRð  WÐ ,Ð ,Ð1DÈGÐ1SÐ1SÝ ‰JŒJ× )Ò )Ñ +Ô +Ð +à  'Ð )Ð )Ø�hÔ 6Ò)Ð)Ý# F¨=Ô$9Ñ:Ô:×LÒLÑNÔNð0ð0�Cݘ,¨#Ñ.Ñ/Ô/Ð/Ð/ð0ð0ð04¸RÐ$@Ð$@Ð!Ý# F¨=Ô$9Ñ:Ô:×LÒLÑNÔNðhðh�CØ% fÔ-×4Ò4¸sÀ1¼vÈsÐSTÌvÐ_bÐcdÔ_eÐ5fÐ5fÑgÔgÐgÐgÝ•d”jÐ!2Ñ3Ô3Ñ4Ô4Ð4Ð4Ð4Ø ˜wÐ &Ð &ݘF =Ô1Ñ2Ô2×>Ò>¸vÐF[Ô?\Ñ]Ô]ˆDÝ ˜$  xÔ 0°&¸Ô2GÑ HÔ HÐ HÐ HÐ HØ ˜wÐ &Ð &Ý �,¥¨&°Ô*?Ñ!@Ô!@×!LÒ!LÈVÐTiÔMjÑ!kÔ!kÑkÑ lÔ lÐ lÐ lÐ lØ ˜gÐ %Ð %Ý �V˜MÔ*Ñ +Ô +× 7Ò 7¸À Ô8NÑ OÔ OÐ OØ�hÔ 6Ò)Ð)Ý$Ñ&Ô&Ð&Ð&Ð&ð*Ð)à ! WÐ ,Ð ,ؘÐРF¨6¤NÐÝ$Ô?ð@ñôðõ ˜  Ô.Ñ/Ô/×>Ò>¸wÐG[Ô?\Ñ]Ô]Ð]ؘ(Ô# vÒ-Ð-Ý(Ñ*Ô*Ð*Ð*Ð*ð.Ð-à " gÐ -Ð -ؘÐРF¨6¤NÐÝ$Ô?ð@ñôðõ ˜  Ô.Ñ/Ô/×?Ò?ÀÐH]Ô@^Ñ_Ô_Ð_ؘ(Ô# vÒ-Ð-Ý(Ñ*Ô*Ð*Ð*Ð*ð.Ð-à  'Ð )Ð )Ý ˜Ð!;Ñ <Ô <Ð <Ý% f¨]Ô&;¸VÀIÔ=NÐPVÐW_ÔP`ÑaÔaˆHØ�hÔ 6Ò)Ð)Ø$ð*ð*�Dݘ' D™.Ñ)Ô)Ð)Ð)ð*ð*à˜Ô! VÒ+Ð+Ý•d”j Ñ*Ô*Ñ+Ô+Ð+Ð+Ð+ð,Ð+à  GÐ +Ð +Ý ˜Ð!;Ñ <Ô <Ð <Ý ˜˜}Ô-Ñ .Ô .× @Ò @Ø�yÔ!¥4­Ð-@Ð-@À7ÐK^ÔC_×CeÒCeÐfiÑCjÔCjÑ(kÔ(kÑ#lÔ#lñ ô ð ð ð ð" WÐ ,Ð ,Ý ˜Ð!;Ñ <Ô <Ð <Ý ˜˜}Ô-Ñ .Ô .× AÒ AØ�yÔ!¥4­Ð-@Ð-@À7ÐK_ÔC`×CfÒCfÐgjÑCkÔCkÑ(lÔ(lÑ#mÔ#mñ ô ð õÕ&Ñ'Ô'ð få2°6¸(Ô3CÐEdÑeÔeÐeÐeÐeð fð fð" WÐ ,Ð ,Ý ˜Ð!;Ñ <Ô <Ð <Ý ˜˜}Ô-Ñ .Ô .× AÒ AØ�yÔ!¥4­Ð-@Ð-@À7ÐK_ÔC`×CfÒCfÐgjÑCkÔCkÑ(lÔ(lÑ#mÔ#mñ ô ð õÕ&Ñ'Ô'ð 'å2°6¸(Ô3CÐEjÑkÔkÐkÐkÐkؘÔ! VÒ+Ð+Ý$Ñ&Ô&Ð&Ð&Ð&ð,Ð+à  GÐ +Ð +Ý ˜Ð!8Ñ 9Ô 9Ð 9Ý  }Ô 5Ð7GÑHÔH×TÒTØ�v” Ð'<Ô =ñôˆDõ ˜$Ñ Ô Ð Ð Ð Ø  GÐ +Ð +Ý ˜Ð!8Ñ 9Ô 9Ð 9Ý ØÝ˜v mÔ4Ð6FÑGÔG×SÒSؘ6”N F¨8Ô$4°fÐ=RÔ6Sñôññ ô ð ð ð ð $ wÐ .Ð .Ý ˜Ð!1Ñ 2Ô 2Ð 2Ý ˜  Ô.Ð0@Ñ AÔ A× VÒ VÑ XÔ XÐ XÐ XÐ XØ  7Ð *Ñ *Ý ˜Ð!8Ñ 9Ô 9Ð 9ð Ý‘ ” ×-Ò-Ñ/Ô/Ð/Ð/øÝ!Ô4ð ð ð ØÐ-Ô.°(Ò:Ð:ØÝ�Q‘”���ð øøøð—?’? 3Ñ'Ô'¨Ô*ˆDݘV MÔ2Ð4DÑEÔEˆAØ—=’=ØØÐ*Ô+Ø�xÔ Ø�Ô'ØÐ,Ô-ñ ôˆDð × Ò  §¢°Ñ 4Ô 4Ñ 5Ô 5Ð 5Ø�oÔ&ð $ݘdÑ#Ô#Ð#Ð#Ð#ð $ð $à # wÐ .Ð .Ý ˜Ð!8Ñ 9Ô 9Ð 9Ý.¨v°f¬~¸vÀhÔ?OÑPÔPˆGØ�jÔ!ð "Ý*¨6°-Ô+@ÐBRÑSÔS×gÒgؘ6”N F¨9Ô$5¸wðhñôð6ð6�Cð!�Fؘ1”v�~Ø!$˜˜Ø˜Qœ 4˜˜Ø!$˜Ý V V V¨S°¬V¨VÐ4Ñ5Ô5Ð5Ð5ð6ð6õ+¨6°-Ô+@ÐBRÑSÔS×kÒkؘ6”N F¨9Ô$5¸wðlñôð"ð"�Cõ˜#˜aœ&‘M”M�M�Mð"ð"ð&¨Ð 0Ð 0Ý ˜Ð!CÑ DÔ DÐ DÝ Ô :Ñ <Ô <Ð <ؘ6”N×(Ò(¨Ñ-Ô-ˆEØð ð �Ý# F¨=Ô$9Ð;KÑLÔL�Ý2°4¸ÀÔ9IÑJÔJ�Ø×(Ò(ØØ" 9Ô-Ý!¥#Ð':Ð':¸WÐE]Ô=^×=dÒ=dÐehÑ=iÔ=iÑ"jÔ"jÑkÔkØ"Ø#ð )ñôððð × Ò  Ñ &Ô &Ð &Ð &Ð &Ø &¨'Ð 1Ð 1Ý ˜Ð!CÑ DÔ DÐ DÝ Ô :Ñ <Ô <Ð <ؘ6”N×(Ò(¨Ñ-Ô-ˆEØð ð �Ý# F¨=Ô$9Ð;KÑLÔL�Ý2°4¸ÀÔ9IÑJÔJ�Ø×)Ò)ØØ˜9Ô%Ý�Ð1Ð1°GÐNÔ6OÐQWÐXaÔQbÐdjÐkrÔdsØ%,ð ñ .ô .ð .à × Ò  §¢°Ñ 4Ô 4Ñ 5Ô 5Ð 5Ø�hÔ 6Ò)Ð)ÝÔ" 6¨(Ô#3°RÑ8Ô8Ð8Ð8Ð8ð*Ð)à  Ð 'Ð '؈D؈GÝ.¨v¯zªz¸&Ñ/AÔ/AÀ6È(ÔCSÑTÔTˆGؘÐÐØ˜f”~×+Ò+¨CÑ0Ô0�Ø�iÔ ð 7Ø  Ô+×1Ò1°#Ñ6Ô6�Ý  }Ô 5Ð7GÑHÔHˆAØ �OŠO˜D '°7ˆOÑ ;Ô ;Ð ;Ø × Ò  Ñ %Ô %Ð %Ø�hÔ 6Ò)Ð)ÝÔ" 6¨(Ô#3°RÑ8Ô8Ð8Ð8Ð8ð*Ð)à  Ð 'Ð 'Ý ˜Ð!8Ñ 9Ô 9Ð 9Ý.¨v°f¬~¸vÀhÔ?OÑPÔPˆGÝ Ô Ø�xÔ Ý  }Ô 5Ð7GÑHÔH×TÒTؘ6”N F¨9Ô$5¸wðUñHôHñ ô ð ð ð ð " WÐ ,Ð ,Ý ˜Ð!8Ñ 9Ô 9Ð 9Ý.¨v°f¬~¸vÀhÔ?OÑPÔPˆGÝ Ô Ø�xÔ Ý  }Ô 5Ð7GÑHÔH×TÒTؘ6”N F¨9Ô$5¸wðUñHôHàð  ñ ô ð ð ð ð  Ð 'Ð 'Ý‘G”GˆEØ×+Ò+Ñ-Ô-×2Ò2Ñ4Ô4ð ð �ð Ý ‘N”N×8Ò8¸Ñ>Ô>Ð>Ý ‘N”N×3Ò3°DÑ9Ô9Ð9Ý#Ñ%Ô%×8Ò8¸Ñ>Ô>Ð>Ð>øÝ%Ô3ðððØ�DÝ%Ô6ðððØ! 'œ?ðeÝÔ*¨6°(Ô+;ÈÕ\_Ð`aÑ\bÔ\bÐ=cÐ=cÑdÔdÐdØ�D�D�D�Døøøøðøøøð(Ð 'ð ð øõ Ô ,ðððÝÔØ �8Ô ¨½sÀ1¹v¼vÐRSÔR[ÐhiÔhqÐrÐrñ ô ð õ Œ�‰ Œ ˆ ˆ ˆ ˆ ˆ ˆ ˆ øøøøÝ ðððÝÔØ �8Ô ¨½SÀ¹V¼VÐPQÔPYÐfgÔfoÐpÐpñ ô ð õ Œ�‰ Œ ˆ ˆ ˆ ˆ ˆ ˆ ˆ øøøøÝ Õ'Ð (ðIðIðIÝÐGÑHÔHÐHÐHÐHÐHÝ ðRðRðRÝÔ"Ñ$Ô$ˆÝÔ˜6 (Ô+¸ÈCÐ-PÐ-PÑQÔQÐQÐQÐQÐQÐQÐQÐQøøøøðRøøøs Á -A;Á;1B/Â.B/Ä$"EÅ EÅEÊCMÍN;Í-AN6Î6N;×/:X*Ø* X7Ø6X7Ù A4Aa8ÛBAa8ÝAAa8ÞAAa8ßA Aa8à)A,Aa8âA,Aa8ä AAa8å%-Aa8æA8Aa8èB"Aa8ê6B"Aa8íAa8í8AAa8ïA!Aa8ð6rÐs*ðð&Ð%Ð%Ð%Ð%Ð%Ø&Ð&Ð&Ð&Ð&Ð&ØÐÐÐÐÐà € € € ØÐÐÐØ € € € Ø € € € Ø € € € Ø€€€ØÐÐÐØÐÐÐØ € € € Ø € € € àÐÐÐÐÐØÐÐÐÐÐØ9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ø&Ð&Ð&Ð&Ð&Ð&Ø,Ð,Ð,Ð,Ð,Ð,Ø,Ð,Ð,Ð,Ð,Ð,Ø"Ð"Ð"Ð"Ð"Ð"Ø$Ð$Ð$Ð$Ð$Ð$Ð$Ð$Ø"Ð"Ð"Ð"Ð"Ð"Ø5Ð5Ð5Ð5Ð5Ð5Ø;Ð;Ð;Ð;Ð;Ð;Ð;Ð;ØHÐHÐHÐHÐHÐHÐHÐHÐHÐHØEÐEÐEÐEÐEÐEÐEÐEØAÐAÐAÐAÐAÐAÐAÐAØÐÐÐÐÐð €ð €ð*Ðð3cð3cð3cðl ð ð ð ðˆrŒzÐ7Ñ8Ô8€ ð?ð?ð?ð gðgðgð ð ð ðððð!'°Eð$%ð$%ð$%ð$%ðN &°5ðððððHðHðHðððð ð ð ð #ð#ð#ð ð ð ð (ð (ð (ð ð ð ð ð ððððD+ð+ð+ð+ð\YðYðYðfðfðfð4ð4ð4ðn1ð1ð1ðh=ð=ð=ð$pðpðpð4ð4ð4ð4ð ððð& ð ð ð0'6ð'6ð'6ðT ð ð ð eRðeRðeRðP ˆzÒÐØ€D�F„F€F€F€FðÐr#