o ?Ogn@s gdZddlZddlZddlZddlZddlmZddlZddlZddl Z ddl Z ddl m Z ej ddedZeejGdd d Zd Ze d Zd=d dZddZe de jZddZddZddZGdddZGdddZGdddeZ ddZ!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.Z/e0e1e!ee d/e2e1e/e'e.d/iZ3de1d0d1d2Z4de1d0d3d4Z5e0d5d6d7d8d9Z6e0d6d5d:d;d<Z7dS)>)InvalidFileExceptionFMT_XML FMT_BINARYloaddumploadsdumpsUIDN)BytesIO) ParserCreate PlistFormatzFMT_XML FMT_BINARY)modulec@<eZdZddZddZddZddZd d Zd d Zd S)rcCs<t|ts td|dkrtd|dkrtd||_dS)Nzdata must be an intzUIDs cannot be >= 2**64r UIDs must be positive) isinstanceint TypeError ValueErrordataselfrr//opt/alt/python310/lib64/python3.10/plistlib.py__init__Ns  z UID.__init__cCs|jSN)rrrrr __index__Wsz UID.__index__cCsd|jjt|jfS)Nz%s(%s)) __class____name__reprrrrrr__repr__Zz UID.__repr__cCs|j|jffSr)rrrrrr __reduce__]zUID.__reduce__cCst|tstS|j|jkSr)rrNotImplementedr)rotherrrr__eq__`s  z UID.__eq__cCs t|jSr)hashrrrrr__hash__e z UID.__hash__N) r __module__ __qualname__rrr!r#r'r)rrrrrMs  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|qd|S)Nr )rangelenappendbinasciiZ b2a_base64join)s maxlinelengthZ maxbinsizepiecesichunkrrr_encode_base64ys  r;cCs$t|tr t|dSt|S)Nutf-8)rstrr4Z a2b_base64encode)r6rrr_decode_base64s  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]}||}|durn|t|q tj|S)NZyearZmonthZdayZhourZminutesecond) _dateParsermatch groupdictr3rdatetime)r6ZorderZgdZlstkeyvalrrr_date_from_strings rHcCs d|j|j|j|j|j|jfS)Nz%04d-%02d-%02dT%02d:%02d:%02dZr@)drrr_date_to_strings  rJcCsZt|}|dur td|dd}|dd}|dd}|dd}|d d }|S) Nz;strings can't contain control characters; use bytes insteadz   &z&z>)_controlCharPatsearchrreplace)textmrrr_escapes      rUc@seZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZddZddZdd Zd!d"Zd#d$Zd%d&Zd'd(Zd)S)* _PlistParsercCsg|_d|_d|_||_dSr)stack current_keyroot _dict_typer dict_typerrrr z_PlistParser.__init__cCsBt|_|j|j_|j|j_|j|j_|j|j_ |j ||j Sr) r parserhandle_begin_elementZStartElementHandlerhandle_end_elementZEndElementHandler handle_dataZCharacterDataHandlerhandle_entity_declZEntityDeclHandlerZ ParseFilerY)rZfileobjrrrparses     z_PlistParser.parsecCstd)Nz8XML entity declarations are not supported in plist files)r)rZ entity_nameZis_parameter_entityvaluebaseZ system_idZ public_idZ notation_namerrrrbsz_PlistParser.handle_entity_declcCs.g|_t|d|d}|dur||dSdS)NZbegin_)rgetattr)relementattrshandlerrrrr_s  z!_PlistParser.handle_begin_elementcCs&t|d|d}|dur|dSdS)NZend_)rf)rrgrirrrr`s z_PlistParser.handle_end_elementcCs|j|dSr)rr3rrrrraz_PlistParser.handle_datacCs|jdur$t|jdtistd|jj||jd|j<d|_dS|js,||_dSt|jdtgs>td|jj|jd|dS)Nzunexpected element at line %d) rXrrWtyperr^CurrentLineNumberrYr3rrdrrr add_objects   z_PlistParser.add_objectcCsd|j}g|_|S)N)r5rrrrrget_datas z_PlistParser.get_datacCs"|}|||j|dSr)rZrorWr3)rrhrIrrr begin_dicts z_PlistParser.begin_dictcCs*|jrtd|j|jjf|jdS)Nz%missing value for key '%s' at line %d)rXrr^rmrWpoprrrrend_dicts  z_PlistParser.end_dictcCs8|js t|jdtistd|jj||_dS)Nrkzunexpected key at line %d)rXrrWrlrr^rmrqrrrrend_keys z_PlistParser.end_keycCsg}|||j|dSr)rorWr3)rrharrr begin_arrays z_PlistParser.begin_arraycCs|jdSr)rWrsrrrr end_arrayr$z_PlistParser.end_arraycC|ddS)NTrorrrrend_truer$z_PlistParser.end_truecCry)NFrzrrrr end_falser$z_PlistParser.end_falsecCsB|}|ds|dr|t|ddS|t|dS)NZ0xZ0X)rq startswithror)rrawrrr end_integersz_PlistParser.end_integercC|t|dSr)rofloatrqrrrrend_realr"z_PlistParser.end_realcCs||dSr)rorqrrrr end_stringsz_PlistParser.end_stringcCrr)ror?rqrrrrend_datar"z_PlistParser.end_datacCrr)rorHrqrrrrend_dater"z_PlistParser.end_dateN)rr+r,rrcrbr_r`rarorqrrrtrurwrxr{r|rrrrrrrrrrVs*  rVc@s8eZdZdddZddZddZdd d Zd d Zd S)_DumbXMLWriterr  cCs||_g|_||_||_dSr)filerW _indent_levelindent)rr indent_levelrrrrrr]z_DumbXMLWriter.__init__cCs,|j||d||jd7_dS)Nz<%s>)rWr3writelnrrrgrrr begin_element"s z_DumbXMLWriter.begin_elementcCs |jd8_|d|dS)Nrz)rrrrrr end_element'sz_DumbXMLWriter.end_elementNcCs:|durt|}|d|||fdS|d|dS)Nz <%s>%sz<%s/>)rUr)rrgrdrrrsimple_element-sz_DumbXMLWriter.simple_elementcCsH|rt|tr |d}|j|j|j|j||jddS)Nr< )rr=r>rwriterr)rlinerrrr5s    z_DumbXMLWriter.writeln)r rr)rr+r,rrrrrrrrrrs    rc@sBeZdZ  dddZdd Zd d Zd d ZddZddZdS) _PlistWriterr  rTFcCs.|r|tt||||||_||_dSr)r PLISTHEADERrr _sort_keys _skipkeys)rrrrZ writeHeader sort_keysskipkeysrrrrBs   z_PlistWriter.__init__cCs"|d|||ddS)Nzz)r write_valuernrrrrLs  z_PlistWriter.writecCs(t|tr |d|dS|dur|ddS|dur#|ddSt|trEd|kr2dkrAnt||dd |dSt|t|trT|d t|dSt|tr`||dSt|t t frn| |dSt|t j r~|d t |dSt|ttfr||dStd t|) NstringTtrueFZfalselrZintegerz%drealdatezunsupported type: %s)rr=rr OverflowErrorrr dict write_dictbytes bytearray write_bytesrErJtuplelist write_arrayrrlrnrrrrQs,     z_PlistWriter.write_valuecCsz|d|jd8_tddt|jdd|j}t||dD] }|r.||q%|jd7_| ddS)Nrrr}r-rs r) rrmaxr2rrRr;splitrr)rrr7rrrrrss  z_PlistWriter.write_bytescCs|r;|d|jrt|}n|}|D]\}}t|ts(|jr$qtd|d|| |q| ddS|ddS)Nrkeys must be stringsrF) rrsorteditemsrr=rrrrr)rrIrrFrdrrrrs     z_PlistWriter.write_dictcCs>|r|d|D]}||q |ddS|ddS)Narray)rrrr)rrrdrrrrs   z_PlistWriter.write_arrayN)r rrTF) rr+r,rrrrrrrrrrrAs  " rcCsd}|D] }||rdSqtjdftjdftjdffD]'\}}||s'q|D]}||d|}|dt||krCdSq)qdS)N)sr2)headerprefixesZpfxZbomencodingstartprefixrrr _is_fmt_xmls$  rc@seZdZdddZdS)r Invalid filecCst||dSr)rr)rmessagerrrrrjzInvalidFileException.__init__N)r)rr+r,rrrrrrsrBHLQ)rr.c@s>eZdZ ddZddZddZddZd d Zd d Zd S)_BinaryPlistParsercCs ||_dSr)rZr[rrrrr*z_BinaryPlistParser.__init__c Csz?||_|jdtj|jd}t|dkrttd|\}|_ }}}|j|| |||_ t g||_ ||WStttjttfyOtw)Ni z>6xBBQQQ)_fpseekosSEEK_ENDreadr2rstructunpack _ref_size _read_ints_object_offsets _undefined_objects _read_objectOSError IndexErrorerrorrr)rfptrailer offset_size num_objects top_objectoffset_table_offsetrrrrcs&         z_BinaryPlistParser.parsecCsN |dkr%|jddd@}d|>}dt|}t||j|dS|S)Nrr r/rO)rr_BINARY_FORMATrr)rtokenLrTr6frrr _get_sizes z_BinaryPlistParser._get_sizecsp|j|tvrtd|tSr#t|kr&ttfddtd|DS)NrOc3s(|]}t||dVqdS)bigN)r from_bytes).0r9rsizerr s z0_BinaryPlistParser._read_ints..r ) rrrrrr2rrr1)rnrrrrrsz_BinaryPlistParser._read_intscCs|||jSr)rr)rrrrr _read_refsr$z_BinaryPlistParser._read_refscs j|}|tur |Sj|}j|jdd}|d@|d@}}|dkr0d}n@|dkr8d}n8|dkr@d}n0|dkrHd }n(|d kr^tjjd|>d |d kd }n|dkrpt djdd}n|dkrt djdd}n|dkrt djdd}t dddt j |d}n|dkr |}j|}t ||krtn|dkrֈ |}j|} t | |krt| d}n|dkr |d}j|} t | |krt| d}nz|dkr ttjd|d }nf|dkr- |}|} g}|j|<|fdd| DnC|d krm |}|} |} }|j|<zt| | D]\} } | || <qPWntyltwt|j|<|S)!Nrr rrF Tr0r}rr/Zsigned"z>fr.#z>d3)Zseconds@Pr`rutf-16bec3s|]}|VqdSr)r)rxrrrrOsz2_BinaryPlistParser._read_object..)rrrrrrrrrrrEZ timedeltarr2rrrrextendrZziprr)rrefresultoffsettokenZtokenHrrr6rZobj_refsZkey_refskorrrrs                           z_BinaryPlistParser._read_objectN) rr+r,rrcrrrrrrrrrs  rcCs(|dkrdS|dkr dS|dkrdSdS)Nrrr.rr)countrrr_count_to_sizehsrc@r)_BinaryPlistWritercCs||_||_||_dSr)rrr)rrrrrrrrxs z_BinaryPlistWriter.__init__c Csg|_i|_i|_||t|j}dg||_t||_t|j|_ |j d|jD]}| |q-| |}|j }t|}dt||}|j tj|g|jRd}|||j|||f} |j tjdg| RdS)Nr bplist00rOz >5xBBBQQQ)_objlist _objtable _objidtable_flattenr2rrrr _ref_formatrr _write_object _getrefnumtellrpack) rrdrobjrrrZ offset_formatZ sort_versionrrrrr}s*           z_BinaryPlistWriter.writec Cs$t|trt||f|jvrdSn t||jvrdSt|j}|j|t|tr4||jt||f<n||jt|<t|t r}g}g}| }|j rOt |}|D]\}}t|t sb|jr^qQtd||||qQt||D]}||qsdSt|ttfr|D] }||qdSdS)Nr)r_scalarsrlr idr r2rr3rrrrr=rr itertoolschainr rr) rrdZrefnumkeysvaluesrrvrrrrr s@           z_BinaryPlistWriter._flattencCs*t|tr|jt||fS|jt|Sr)rrr rlr rrnrrrrs z_BinaryPlistWriter._getrefnumcCs|dkr|jtd||BdS|dkr&|jtd|dBd|dS|dkr:|jtd|dBd|dS|d krN|jtd |dBd |dS|jtd |dBd |dS)Nrz>Brz>BBBr}rz>BBHrz>BBLz>BBQ)rrrr)rrrrrr _write_sizes    z_BinaryPlistWriter._write_sizec sj|}jj|<|durjddS|dur%jddS|dur1jddSt|tr|dkrVzjtdd|WdStj yUt |dw|d krgjtd d |dS|d krxjtd d|dS|dkrjtdd|dS|dkrjtdd|dS|dkrjd|j d ddddSt |t|t rĈjtdd|dSt|t j r|t ddd}jtdd|dSt|ttfrdt|j|dSt|tr0z|d}dt|Wnty'|d }d!t|d"Ynwj|dSt|tr|jdkr@td#|jd krSjtd d$|dS|jd krfjtd d%|dS|jdkryjtdd&|dS|jdkrjtdd'|dSt |t|ttfrfd(d)|D}t|}d*|jtjd+j|g|RdSt|tr1gg}}jrt|} n|} | D]%\} } t| tsj rqt!d,|"| |"| qt|}d-|jtjd+j|g|Rjtjd+j|g|RdSt!|).NFTrr z>Bqrrz>BBr}rz>BHrrz>BLrlz>BQrrrz>Bdrrrrrrrrrrrrcsg|]}|qSr)r)rrrrr -sz4_BinaryPlistWriter._write_object..rrOrr)#rrrrrrrrrrrto_bytesrrEZ total_secondsrrrr2r=r>UnicodeEncodeErrorrrrrrr rrrrrrr3) rrdrrtZrefsr6ZkeyRefsZvalRefsZ rootItemsrrrrrr s                (     $(z _BinaryPlistWriter._write_objectN) rr+r,rrr rrr rrrrrws-* rcCs|dddkS)Nrrr)rrrr_is_fmt_binaryKrjr')detectr^writerfmtr\cCsl |dur&|d}|dtD]}|d|r!|d}nqtnt|d}||d}||S)Nrr r(r^)r\)rr_FORMATSrrrc)rr+r\rinfoPprrrras       rcCs t|}t|||dS)Nr*)r r)rdr+r\rrrrrwsrTF)r+rrcCs< |tvr td|ft|d|||d}||dS)NzUnsupported format: %rr))rr)r,rr)rdrr+rrr)rrrrs rr+rrcCs" t}t|||||d|S)Nr0)r rgetvalue)rdr+rrrrrrrsr)r-)8__all__r4rrEenumior rrrerZxml.parsers.expatr Enumrr globalsupdate __members__rrcompilerPr;r?ASCIIrBrHrJrUrVrrrrrrobjectrrrr=rrrrrr'rrrr,rrrrrrrrsl8  !     n&^!! U