grthtrhthjhtyjytjytkergtrhtrjytjerhrfh4:24 29/09/2026a XC?hXnã@sÔdZgd¢ZddlZddlZddlZddlZddlmZddlZddl Z ddl Z ddl Z ddl m Z ejdded�Zeƒ ej¡Gd d „d ƒZd Ze  d ¡Zd>dd„Zdd„Ze  de j¡Zdd„Zdd„Zdd„ZGdd„dƒZGdd„dƒZ Gdd„de ƒZ!dd „Z"Gd!d"„d"e#ƒZ$d#d$d%d&d'œZ%e&ƒZ'Gd(d)„d)ƒZ(d*d+„Z)e*e+e,eje-fZ.Gd,d-„d-e&ƒZ/d.d/„Z0e1e2e"ee!d0�e3e2e0e(e/d0�iZ4de2d1œd2d3„Z5de2d1œd4d5„Z6e1d6d7d8œd9d:„Z7e1d7d6d;œd", someMoreData = b"" * 10, aDate = datetime.datetime.fromtimestamp(time.mktime(time.gmtime())), ) with open(fileName, 'wb') as fp: dump(pl, fp) Parse Plist example: with open(fileName, 'rb') as fp: pl = load(fp) print(pl["aKey"]) )ÚInvalidFileExceptionÚFMT_XMLÚ FMT_BINARYÚloadÚdumpÚloadsÚdumpsÚUIDéN)ÚBytesIO)Ú ParserCreateÚ PlistFormatzFMT_XML FMT_BINARY)Úmodulec@s<eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd S)rcCs<t|tƒstdƒ‚|dkr"tdƒ‚|dkr2tdƒ‚||_dS)Nzdata must be an intìzUIDs cannot be >= 2**64r úUIDs must be positive)Ú isinstanceÚintÚ TypeErrorÚ ValueErrorÚdata©Úselfr©rú-/opt/alt/python39/lib64/python3.9/plistlib.pyÚ__init__Es z UID.__init__cCs|jS©N)r©rrrrÚ __index__Nsz UID.__index__cCsd|jjt|jƒfS)Nz%s(%s))Ú __class__Ú__name__ÚreprrrrrrÚ__repr__Qsz UID.__repr__cCs|j|jffSr)rrrrrrÚ __reduce__TszUID.__reduce__cCst|tƒstS|j|jkSr)rrÚNotImplementedr)rÚotherrrrÚ__eq__Ws z UID.__eq__cCs t|jƒSr)ÚhashrrrrrÚ__hash__\sz UID.__hash__N) rÚ __module__Ú __qualname__rrr r!r$r&rrrrrDs  rsŽ zv[\x00\x01\x02\x03\x04\x05\x06\x07\x08\x0b\x0c\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f]éLcCsP|dd}g}tdt|ƒ|ƒD]$}||||…}| t |¡¡q d |¡S)Néér ó)ÚrangeÚlenÚappendÚbinasciiZ b2a_base64Újoin)ÚsÚ maxlinelengthZ maxbinsizeÚpiecesÚiÚchunkrrrÚ_encode_base64ps  r7cCs(t|tƒrt | d¡¡St |¡SdS)Núutf-8)rÚstrr0Z a2b_base64Úencode)r2rrrÚ_decode_base64ys r;z{(?P\d\d\d\d)(?:-(?P\d\d)(?:-(?P\d\d)(?:T(?P\d\d)(?::(?P\d\d)(?::(?P\d\d))?)?)?)?)?ZcCsLd}t |¡ ¡}g}|D]&}||}|dur2qB| t|ƒ¡qtj|ŽS)N©ZyearZmonthZdayZhourZminuteÚsecond)Ú _dateParserÚmatchÚ groupdictr/rÚdatetime)r2ÚorderZgdZlstÚkeyÚvalrrrÚ_date_from_string†srEcCs d|j|j|j|j|j|jfS)Nz%04d-%02d-%02dT%02d:%02d:%02dZr<)ÚdrrrÚ_date_to_string’s  þrGcCsZt |¡}|durtdƒ‚| dd¡}| dd¡}| dd¡}| dd¡}| d d ¡}|S) Nzz>)Ú_controlCharPatÚsearchrÚreplace)ÚtextÚmrrrÚ_escape˜s      rRc@s¬eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zdd „Zd!d"„Zd#d$„Zd%d&„Zd'd(„Zd)S)*Ú _PlistParsercCsg|_d|_d|_||_dSr)ÚstackÚ current_keyÚrootÚ _dict_type©rÚ dict_typerrrr¥sz_PlistParser.__init__cCsBtƒ|_|j|j_|j|j_|j|j_|j|j_ |j  |¡|j Sr) r ÚparserÚhandle_begin_elementZStartElementHandlerÚhandle_end_elementZEndElementHandlerÚ handle_dataZCharacterDataHandlerÚhandle_entity_declZEntityDeclHandlerZ ParseFilerV)rZfileobjrrrÚparse«s     z_PlistParser.parsecCs tdƒ‚dS)Nz8XML entity declarations are not supported in plist files)r)rZ entity_nameZis_parameter_entityÚvalueÚbaseZ system_idZ public_idZ notation_namerrrr^´sz_PlistParser.handle_entity_declcCs*g|_t|d|dƒ}|dur&||ƒdS)NZbegin_)rÚgetattr)rÚelementÚattrsÚhandlerrrrr[ºsz!_PlistParser.handle_begin_elementcCs"t|d|dƒ}|dur|ƒdS)NZend_)rb)rrcrerrrr\Àsz_PlistParser.handle_end_elementcCs|j |¡dSr)rr/rrrrr]Åsz_PlistParser.handle_datacCsŒ|jdurFt|jdtiƒƒs.td|jjƒ‚||jd|j<d|_nB|jsT||_n4t|jdtgƒƒsxtd|jjƒ‚|jd |¡dS)Néÿÿÿÿzunexpected element at line %d) rUrrTÚtyperrZÚCurrentLineNumberrVr/©rr`rrrÚ add_objectÈs ÿÿz_PlistParser.add_objectcCsd |j¡}g|_|S)NÚ)r1rrrrrÚget_dataØs z_PlistParser.get_datacCs"| ¡}| |¡|j |¡dSr)rWrjrTr/)rrdrFrrrÚ begin_dictßs z_PlistParser.begin_dictcCs*|jrtd|j|jjfƒ‚|j ¡dS)Nz%missing value for key '%s' at line %d)rUrrZrhrTÚpoprrrrÚend_dictäs  ÿz_PlistParser.end_dictcCs8|jst|jdtiƒƒs*td|jjƒ‚| ¡|_dS)Nrfzunexpected key at line %d)rUrrTrgrrZrhrlrrrrÚend_keyês ÿz_PlistParser.end_keycCsg}| |¡|j |¡dSr)rjrTr/)rrdÚarrrÚ begin_arrayðs z_PlistParser.begin_arraycCs|j ¡dSr)rTrnrrrrÚ end_arrayõsz_PlistParser.end_arraycCs| d¡dS)NT©rjrrrrÚend_trueøsz_PlistParser.end_truecCs| d¡dS)NFrtrrrrÚ end_falseûsz_PlistParser.end_falsecCs@| ¡}| d¡s| d¡r.| t|dƒ¡n| t|ƒ¡dS)NZ0xZ0Xé)rlÚ startswithrjr)rÚrawrrrÚ end_integerþsz_PlistParser.end_integercCs| t| ¡ƒ¡dSr)rjÚfloatrlrrrrÚend_realsz_PlistParser.end_realcCs| | ¡¡dSr)rjrlrrrrÚ end_stringsz_PlistParser.end_stringcCs| t| ¡ƒ¡dSr)rjr;rlrrrrÚend_data sz_PlistParser.end_datacCs| t| ¡ƒ¡dSr)rjrErlrrrrÚend_datesz_PlistParser.end_dateN)rr'r(rr_r^r[r\r]rjrlrmrorprrrsrurvrzr|r}r~rrrrrrS¤s( rSc@s8eZdZddd„Zdd„Zdd„Zdd d „Zd d „Zd S)Ú_DumbXMLWriterr ú cCs||_g|_||_||_dSr)ÚfilerTÚ _indent_levelÚindent)rr‚Ú indent_levelr„rrrrsz_DumbXMLWriter.__init__cCs,|j |¡| d|¡|jd7_dS)Nz<%s>é)rTr/Úwritelnrƒ©rrcrrrÚ begin_elements z_DumbXMLWriter.begin_elementcCs |jd8_| d|¡dS)Nr†z)rƒr‡rˆrrrÚ end_elementsz_DumbXMLWriter.end_elementNcCs8|dur&t|ƒ}| d|||f¡n| d|¡dS)Nz <%s>%sz<%s/>)rRr‡)rrcr`rrrÚsimple_element$sz_DumbXMLWriter.simple_elementcCsH|r8t|tƒr| d¡}|j |j|j¡|j |¡|j d¡dS)Nr8ó )rr9r:r‚Úwriterƒr„)rÚlinerrrr‡,s    z_DumbXMLWriter.writeln)r r�)N)rr'r(rr‰rŠr‹r‡rrrrr€s   r€c@s>eZdZddd„Zdd „Zd d „Zd d „Zdd„Zdd„ZdS)Ú _PlistWriterr ó r†TFcCs.|r| t¡t ||||¡||_||_dSr)r�Ú PLISTHEADERr€rÚ _sort_keysÚ _skipkeys)rr‚r…r„Z writeHeaderÚ sort_keysÚskipkeysrrrr9s  z_PlistWriter.__init__cCs"| d¡| |¡| d¡dS)Nzz)r‡Ú write_valuerirrrr�Cs  z_PlistWriter.writecCst|tƒr| d|¡nü|dur,| d¡nè|dur@| d¡nÔt|tƒr~d|kr^dkrtnn| dd |¡nt|ƒ‚n–t|tƒrš| d t|ƒ¡nzt|tƒr°| |¡ndt|t t fƒrÊ|  |¡nJt|t j ƒrè| d t |ƒ¡n,t|ttfƒ�r| |¡ntd t|ƒƒ‚dS) NÚstringTÚtrueFZfalselûÿÿÿrZintegerz%dÚrealÚdatezunsupported type: %s)rr9r‹rÚ OverflowErrorr{rÚdictÚ write_dictÚbytesÚ bytearrayÚ write_bytesrArGÚtupleÚlistÚ write_arrayrrgrirrrr–Hs*           z_PlistWriter.write_valuecCsz| d¡|jd8_tddt|j dd¡|jƒƒ}t||ƒ d¡D]}|rJ| |¡qJ|jd7_|  d¡dS)Nrr†rwr)r�s rŒ) r‰rƒÚmaxr.r„rOr7Úsplitr‡rŠ)rrr3rŽrrrr js þ z_PlistWriter.write_bytescCs‚|rt| d¡|jr"t| ¡ƒ}n| ¡}|D]8\}}t|tƒsP|jrHq.tdƒ‚| d|¡|  |¡q.|  d¡n | d¡dS)Nrœúkeys must be stringsrC) r‰r’ÚsortedÚitemsrr9r“rr‹r–rŠ)rrFr¨rCr`rrrr�ws      z_PlistWriter.write_dictcCs<|r.| d¡|D]}| |¡q| d¡n | d¡dS)NÚarray)r‰r–rŠr‹)rr©r`rrrr£‹s    z_PlistWriter.write_arrayN)r r�r†TF) rr'r(rr�r–r r�r£rrrrr�8sþ " r�cCsŽd}|D]}| |¡rdSqtjdftjdftjdffD]N\}}| |¡sNq:|D]4}|| d¡ |¡}|dt|ƒ…|krRdSqRq:dS)N)s6xBBQQQ)Ú_fpÚseekÚosÚSEEK_ENDÚreadr.rÚstructÚunpackÚ _ref_sizeÚ _read_intsÚ_object_offsetsÚ _undefinedÚ_objectsÚ _read_objectÚOSErrorÚ IndexErrorÚerrorr›r)rÚfpÚtrailerÚ offset_sizeÚ num_objectsÚ top_objectÚoffset_table_offsetrrrr_Ês$   ý     ÿ z_BinaryPlistParser.parsecCsL|dkrH|j d¡dd@}d|>}dt|}t ||j |¡¡dS|S)z$ return the size of the next object.ér†r r+rL)rÀrÄÚ_BINARY_FORMATrÅrÆ)rÚtokenLrQr2ÚfrrrÚ _get_sizeãs  z_BinaryPlistParser._get_sizecst|j ˆ|¡‰ˆtvr2t d|›tˆ›�ˆ¡SˆrFtˆƒˆ|krLtƒ‚t‡‡fdd„tdˆ|ˆƒDƒƒSdS)NrLc3s&|]}t ˆ||ˆ…d¡VqdS)ÚbigN)rÚ from_bytes)Ú.0r5©rÚsizerrÚ ôsÿz0_BinaryPlistParser._read_ints..r ) rÀrÄr×rÅrÆr.rr¡r-)rÚnrßrrÞrrÈísÿz_BinaryPlistParser._read_intscCs| ||j¡Sr)rÈrÇ)rrárrrÚ _read_refs÷sz_BinaryPlistParser._read_refscs ˆj|}|tur|Sˆj|}ˆj |¡ˆj d¡d}|d@|d@}}|dkr^d}�nž|dkrnd}�nŽ|dkr~d }�n~|dkrŽd }�nn|d krºtjˆj d|>¡d |d kd�}�nB|dkrÞt  dˆj d¡¡d}�n|dk�rt  dˆj d¡¡d}�nø|dk�rDt  dˆj d¡¡d}t   ddd¡t j |d�}�n¸|dk�r|ˆ  |¡}ˆj |¡}t |ƒ|k�rütƒ‚�n€|dk�r¾ˆ  |¡}ˆj |¡} t | ƒ|k�r°tƒ‚|  d¡}�n>|dk�rˆ  |¡d}ˆj |¡} t | ƒ|k�rötƒ‚|  d¡}nú|dk�r*tt ˆj d|¡d ¡ƒ}nÒ|dk�rpˆ  |¡}ˆ |¡} g}|ˆj|<| ‡fdd „| Dƒ¡nŒ|d!k�röˆ  |¡}ˆ |¡} ˆ |¡} ˆ ¡}|ˆj|<z.t| | ƒD]\} } ˆ | ¡|ˆ | ¡<�q¶Wnt�yòtƒ‚Yn0ntƒ‚|ˆj|<|S)"zx read the object by reference. May recursively read sub-objects (content of an array/dict/set) r†r éðrÖNr½Fé Tr,rwrÛr+©Zsignedé"z>fr*é#z>dé3éÑ)Zsecondsé@éPrªé`r¼úutf-16beé€é c3s|]}ˆ |¡VqdSr)rÌ)rÝÚxrrrràFr,z2_BinaryPlistParser._read_object..éÐ)rËrÊrÉrÀrÁrÄrrÜrÅrÆrAZ timedeltarÚr.rr¯rrâÚextendrWÚziprÌr)rÚrefÚresultÚoffsetÚtokenZtokenHrØrÙr2rZobj_refsZkey_refsÚkÚorrrrÌús†   ÿ     ÿ                     z_BinaryPlistParser._read_objectN) rr'r(Ú__doc__rr_rÚrÈrârÌrrrrr¾¿s  r¾cCs,|dkr dS|dkrdS|dkr$dSdSdS)Nér†ér¼ìr*r½r)ÚcountrrrÚ_count_to_size_srÿc@s<eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd S)Ú_BinaryPlistWritercCs||_||_||_dSr)rÀr’r“)rrÐr”r•rrrrosz_BinaryPlistWriter.__init__c Csæg|_i|_i|_| |¡t|jƒ}dg||_t|ƒ|_t|j|_ |j   d¡|jD]}|  |¡qZ|  |¡}|j  ¡}t|ƒ}dt||}|j   tj|g|j¢RŽ¡d}|||j|||f} |j   tjdg| ¢RŽ¡dS)Nr óbplist00rLz >5xBBBQQQ)Ú_objlistÚ _objtableÚ _objidtableÚ_flattenr.rÉrÿrÇr×Ú _ref_formatrÀr�Ú _write_objectÚ _getrefnumÚtellrÅÚpack) rr`rÓÚobjrÔrÕrÒZ offset_formatZ sort_versionrÑrrrr�ts*           þz_BinaryPlistWriter.writec Cs"t|tƒr"t|ƒ|f|jvr4dSnt|ƒ|jvr4dSt|jƒ}|j |¡t|tƒrh||jt|ƒ|f<n||jt|ƒ<t|t ƒrøg}g}|  ¡}|j ržt |ƒ}|D]6\}}t|t ƒsÄ|jr¼q¢tdƒ‚| |¡| |¡q¢t ||¡D]}| |¡qæn&t|ttfƒ�r|D]}| |¡�q dS)Nr¦)rÚ_scalarsrgrÚidrr.rr/rœr¨r’r§r9r“rÚ itertoolsÚchainrr¢r¡) rr`ZrefnumÚkeysÚvaluesr¨røÚvrùrrrr¡s8         z_BinaryPlistWriter._flattencCs.t|tƒr|jt|ƒ|fS|jt|ƒSdSr)rr rrgrr rirrrrËs z_BinaryPlistWriter._getrefnumcCs´|dkr"|j t d||B¡¡nŽ|dkrH|j t d|dBd|¡¡nh|dkrn|j t d|dBd|¡¡nB|d kr”|j t d |dBd |¡¡n|j t d |dBd |¡¡dS)NrÖz>Brûz>BBBrwrüz>BBHérýz>BBLéz>BBQé)rÀr�rÅr )rr÷rßrrrÚ _write_sizeÑsz_BinaryPlistWriter._write_sizec stˆ |¡}ˆj ¡ˆj|<|dur2ˆj d¡�n>|durJˆj d¡�n&|durbˆj d¡�nt|tƒ�rj|dkr²zˆj t dd|¡¡Wntj y®t |ƒd‚Yn0n´|d krÒˆj t d d |¡¡n”|d kròˆj t d d|¡¡nt|dk�rˆj t dd|¡¡nR|dk�r6ˆj t dd|¡¡n0|dk�r^ˆj d|j d ddd�¡nt |ƒ‚�nt|t ƒ�r�ˆj t dd|¡¡�nàt|t j ƒ�rÎ|t   ddd¡ ¡}ˆj t dd|¡¡�n¢t|ttfƒ�rþˆ dt|ƒ¡ˆj |¡�nrt|tƒ�rlz| d¡}ˆ dt|ƒ¡Wn2t�yZ| d ¡}ˆ d!t|ƒd"¡Yn0ˆj |¡�nt|tƒ�r*|jdk�rŽtd#ƒ‚n˜|jd k�r²ˆj t d d$|¡¡nt|jd k�rÖˆj t d d%|¡¡nP|jdk�rúˆj t dd&|¡¡n,|jdk�rˆj t dd'|¡¡nt |ƒ‚�nFt|ttfƒ�r†‡fd(d)„|Dƒ}t|ƒ}ˆ d*|¡ˆj tjd+ˆj|g|¢RŽ¡nêt|tƒ�rhgg}}ˆj�r²t| ¡ƒ} n| ¡} | D]J\} } t| tƒ�sæˆj �rÞ�q¾t!d,ƒ‚| "ˆ | ¡¡| "ˆ | ¡¡�q¾t|ƒ}ˆ d-|¡ˆj tjd+ˆj|g|¢RŽ¡ˆj tjd+ˆj|g|¢RŽ¡nt!|ƒ‚dS).NóFóTr�r z>Bqrrûz>BBrwrüz>BHrrýz>BLrlz>BQrórÛråz>Bdrçrér†rèrêrªrërírìr¼rrîé�éƒé‡csg|]}ˆ |¡‘qSr)r)rÝrùrrrÚ $r,z4_BinaryPlistWriter._write_object..rïrLr¦rñ)#rrÀr rÉr�rrrÅr rÏr›Úto_bytesr{rAZ total_secondsržrŸrr.r9r:ÚUnicodeEncodeErrorrrrr¢r¡rrœr’r§r¨r“rr/) rr`rôrÙÚtZrefsr2ZkeyRefsZvalRefsZ rootItemsrørrrrrás–                   &     $&z _BinaryPlistWriter._write_objectN) rr'r(rr�rrrrrrrrrns -*rcCs|dd…dkS)Nr½rr)r°rrrÚ_is_fmt_binaryBsr!)ÚdetectrZÚwriter©ÚfmtrYcCsj|durJ| d¡}| d¡t ¡D]}|d|ƒr$|d}qVq$tƒ‚n t|d}||d�}| |¡S)z�Read a .plist file. 'fp' should be a readable and binary file object. Return the unpacked root object (which usually is a dictionary). Nr¿r r"rZ)rY)rÄrÁÚ_FORMATSrrr_)rÐr%rYr°ÚinfoÚPÚprrrrXs      rcCst|ƒ}t|||d�S)zqRead a .plist file from a bytes object. Return the unpacked root object (which usually is a dictionary). r$)r r)r`r%rYrÐrrrrnsrTF)r%r”r•cCs:|tvrtd|fƒ‚t|d|||d�}| |¡dS)zWWrite 'value' to a .plist file. 'fp' should be a writable, binary file object. zUnsupported format: %rr#)r”r•N)r&rr�)r`rÐr%r”r•r#rrrrvsr©r%r•r”cCs tƒ}t|||||d�| ¡S)z?Return a bytes object with the contents for a .plist file. r*)r rÚgetvalue)r`r%r•r”rÐrrrr�sr)r))9rúÚ__all__r0r«rAÚenumÚior rrÂÚrerÅZxml.parsers.expatr ÚEnumrr ÚglobalsÚupdateÚ __members__rr‘ÚcompilerMr7r;ÚASCIIr>rErGrRrSr€r�rµrrr×ÚobjectrÊr¾rÿr9rr{ržr rr!rrœrr&rrrrrrrrÚsj/  !ÿ    n&^!! U ýýú