Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
Size: Mime:
§

iµµhfãóº—dZddlZddlmZmZddlmZddlmZm	Z		ddl
mZn#e
$r	ddlmZYnwxYwddlZddlZddlZddlmZdd	lmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"	dd
lm#Z#n#e$$r	dd
l%m#Z#YnwxYwddl&Z&ddl'Z'ddl(m)Z)ddlm*Z*m+Z+dd
lm,Z,	ddl-Z-dZ.n
#e$$rdZ.YnwxYwej/dkrdZ.ddl0m1Z1m2Z2ddl3m4Z4ddl5m6Z6ddl7m8Z8m9Z9m:Z:m;Z;m<Z<dZ=dZ>e=e>fZ?dZ@dZAe"e e"eBeCfeeBfeeBfZDeeBge eCeDffZEeeCeFgdfZGe eCeeBfZHGd„deI¦«ZJGd„de#¦«ZKGd„deK¦«ZLGd „d!¦«ZM	dd"eeCgeBfd#eeCd$e eeCeeCffd%„ZNGd&„d'eI¦«ZOGd(„d)¦«ZPd*ZQdeQfd+eeCgeBfd,ePd-eRd.eCd$eBf
d/„ZSd0„ZTd1„ZUdd2„ZVd3„ZWd4„ZXe eBeCeeCfZYGd5„d6¦«ZZGd7„d8eZ¦«Z[Gd9„d:eZ¦«Z\Gd;„d<e\¦«Z]Gd=„d>e\¦«Z^d$e eCeCffd?„Z_d@e"eBeeBfd$eCfdA„Z`dddeQfdBeeCgeBfd+eeeCgeBfd$e ePeBffdC„ZadD„ZbGdE„dF¦«ZcGdG„dHec¦«ZddI„ZeddK„ZfGdL„dM¦«Zge!dN¦«ZhGdO„dPeeh¦«ZiGdQ„dReieP¦«ZjGdS„dTeieY¦«ZkGdU„dVeie9¦«ZlGdW„dX¦«ZmGdY„dZ¦«Znd[„Zod‘d]„Zpd’d^„Zqddd\d_œd`e"ee9ee e9eeBffdaeeRdbeeCdceCfdd„Zrde„Zsdf„ZtdddgœdheLdieeBdjeeeBd$eePfdk„Zudddlœd`e"eeBee e9eeBffdmeeCd$eePfdn„Zvd`e"ee9ee e9eeHffd$ee9fdo„Zw	d“dmeeCfdp„Zxdddddqœd`e"ee9ee e9eeBffdaeeRdbeeCdreRd$e eCeePff
ds„Zy						d”dheLdiee e8eeHfdbeeCdaeeRdteRdreRdjeeeBd$eePfdu„Zzdve9d$ePfdw„Z{					d•dheLdiee e8eeHfdbeeCdaeeRdteRdceCdjeeeBfdx„Z|ddd\dyœd`e"ee9ee e9eeBffdbeeCdaeeRdceCfdz„Z}Gd{„d|¦«Z~ddd\d}œd~eePfd„Zd€„Z€d$eBfd„Zd‚Z‚dƒ„Zƒd„„Z„d…„Z…d†eeYd‡eBd$eBfdˆ„Z†e†Z‡Gd‰„dЦ«Zˆd\dd‹œdŒediee8d$e eBeffd„Z‰	ddŽlŠm…Z…mXZXdS#e$$rYdSwxYw)–a®Classes for dealing with packed git objects.

A pack is a compact representation of a bunch of objects, stored
using deltas where possible.

They have two parts, the pack file, which stores the data, and an index
that tells you where the data is.

To find an object you look in all of the index files 'til you find a
match for the object name. You then use the pointer got from this as
a pointer in to the corresponding packfile.
éN)ÚdefaultdictÚdeque)Úsuppress)ÚBytesIOÚUnsupportedOperation)ÚCSequenceMatcher)ÚSequenceMatcher)Úchain)ÚBinaryIOÚCallableÚDequeÚDictÚGenericÚIterableÚIteratorÚListÚOptionalÚSequenceÚSetÚTupleÚTypeVarÚUnion)ÚProtocol)Úsha1)ÚSEEK_CURÚSEEK_END)Úunpack_fromTFÚPlan9é)ÚApplyDeltaErrorÚChecksumMismatch)ÚGitFile)ÚLRUSizeCache)ÚObjectIDÚShaFileÚ
hex_to_shaÚ
object_headerÚ
sha_to_hexééé
icó—eZdZdZd„ZdS)ÚUnresolvedDeltasz$Delta objects could not be resolved.có—||_dS©N)Úshas)Úselfr0s  ú7/usr/local/lib/python3.11/site-packages/dulwich/pack.pyÚ__init__zUnresolvedDeltas.__init__rs
€ØˆŒ	ˆ	ˆ	óN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r3©r4r2r-r-os)€€€€€Ø.Ð.ðððððr4r-cóœ—eZdZdeddfd„Z	ddeeeeefdee	egdfddfd„Z
dedefd	„Z
dedefd
„ZdS)ÚObjectContainerÚobjÚreturnNcó—dS)z)Add a single object to this object store.Nr9©r1r<s  r2Ú
add_objectzObjectContainer.add_objectwó€€€r4ÚobjectsÚprogresscó—dS)zƒAdd a set of objects to this object store.

        Args:
          objects: Iterable over a list of (object, path) tuples
        Nr9)r1rBrCs   r2Úadd_objectszObjectContainer.add_objectszrAr4rcó—dS)zCheck if a hex sha is present.Nr9©r1rs  r2Ú__contains__zObjectContainer.__contains__…rAr4có—dS)zRetrieve an object.Nr9rGs  r2Ú__getitem__zObjectContainer.__getitem__ˆrAr4r/)r5r6r7r%r@rrrÚstrrrEÚbytesÚboolrHrJr9r4r2r;r;vs׀€€€€ð8˜gð8¨$ð8ð8ð8ð8ð59ð	ð	à˜% ¨°#¬Ð 6Ô7Ô8ð	ð˜8 S E¨4 KÔ0Ô1ð	ð
ð		ð	ð	ð	ð- ð-¨4ð-ð-ð-ð-ð" ð"¨'ð"ð"ð"ð"ð"ð"r4r;có–—eZdZddœdededdfd„Zddœd	eed
edeefd„Z				dd	e
eded
ed
ededf
d„ZdS)ÚPackedObjectContainerF©Úinclude_comprrQr=ÚUnpackedObjectcó*—t|j¦«‚)zGet a raw unresolved object.)ÚNotImplementedErrorÚget_unpacked_object)r1rrQs   r2rUz)PackedObjectContainer.get_unpacked_objects€õ" $Ô":Ñ;Ô;Ð;r4©Ú
allow_missingr0rWcó*—t|j¦«‚r/)rTÚiterobjects_subset©r1r0rWs   r2rYz(PackedObjectContainer.iterobjects_subset“s€õ" $Ô"9Ñ:Ô:Ð:r4TÚconvert_ofs_deltacó*—t|j¦«‚r/)rTÚiter_unpacked_subset)r1r0rQrWr[s     r2r]z*PackedObjectContainer.iter_unpacked_subset˜s€õ" $Ô";Ñ<Ô<Ð<r4N)FFT)r5r6r7rLrMrUrrr%rYrr]r9r4r2rOrOŒsð€€€€€à38ð<ð<ð<Øð<Ø,0ð<à	ð<ð<ð<ð<ð?Dð;ð;ð;ؘU”Oð;Ø7;ð;à	'Ô	ð;ð;ð;ð;ð#Ø#Ø"&ð=ð=à%Œjð=ðð=ðð	=ð
 ð=ð
Ð"Ô	#ð
=ð=ð=ð=ð=ð=r4rOcó2—eZdZdedfd„Zdefd„ZdS)ÚUnpackedObjectStreamr=rRcó*—t|j¦«‚r/)rTÚ__iter__©r1s r2razUnpackedObjectStream.__iter__£s€Ý! $¤-Ñ0Ô0Ð0r4có*—t|j¦«‚r/©rTÚ__len__rbs r2rezUnpackedObjectStream.__len__¦s€Ý! $¤,Ñ/Ô/Ð/r4N)r5r6r7rraÚintrer9r4r2r_r_¢sP€€€€€ð1˜(Ð#3Ô4ð1ð1ð1ð1ð0˜ð0ð0ð0ð0ð0ð0r4r_ÚreadÚcrc32r=có—g}t|¦«dks|ddzrj|d¦«}|tj||¦«}| t	|dd…¦«¦«t|¦«dk°_|ddz°j||fS)zVRead bytes marked with most significant bit.

    Args:
      read: Read function
    réÿÿÿÿé€rN)ÚlenÚbinasciirhÚappendÚord)rgrhÚretÚbs    r2Útake_msb_bytesrrªs‘€ð€CÝ

ˆc‰(Œ(aŠ-ˆ-˜3˜rœ7 T™>ˆ-ØˆD‰GŒGˆØÐÝ”N 1 eÑ,Ô,ˆE؏
Š
•3q˜˜!˜”u‘:”:ÑÔÐõ	ˆc‰(Œ(aŠ-ˆ-˜3˜rœ7 T™>ˆ-ð
ˆ:Ðr4có—eZdZdd„ZdS)ÚPackFileDisappearedr=Ncó—||_dSr/)r<r?s  r2r3zPackFileDisappeared.__init__¼s
€ØˆŒˆˆr4©r=N)r5r6r7r3r9r4r2rtrt»s(€€€€€ððððððr4rtcóò—eZdZUdZgd¢Zeeed<eee	ed<e
de	efed<ee	ed<eee	ed<ddddddd	œ	dd„Zd„Zd
„Z
d
efd„Zd„Zd„Zd
efd„ZdS)rRaClass encapsulating an object unpacked from a pack file.

    These objects should only be created from within unpack_object. Most
    members start out as empty and are filled in at various points by
    read_zlib_chunks, unpack_object, DeltaChainIterator, etc.

    End users of this object should take care that the function they're getting
    this object from is guaranteed to set the members they need.
    )
ÚoffsetÚ_shaÚobj_type_numÚ
obj_chunksÚ
pack_type_numÚ
delta_baseÚcomp_chunksÚ
decomp_chunksÚ
decomp_lenrhrzr{Nr}rr~)r}r€rhÚsharrxr=có8—||_||_||_||_d|_|pg|_|*|€(t
tt|¦«¦«|_	n||_	||_
|tvrd|_d|_
dS||_|j|_
||_dSr/)rxryr|r}r~rÚsumÚmaprlr€rhÚDELTA_TYPESrzr{)r1r|r}r€rhrrrxs        r2r3zUnpackedObject.__init__às¥€ðˆŒØˆŒ	Ø*ˆÔØ$ˆŒØˆÔØ*7Ð*=¸2ˆÔØÐ$¨Ð);Ý!¥#¥c¨=Ñ"9Ô"9Ñ:Ô:ˆDŒOˆOà(ˆDŒO؈Œ
àKÐ'Ð'Ø $ˆDÔØ"ˆDŒOˆOˆOà -ˆDÔØ"Ô0ˆDŒOØ(ˆDŒOˆOˆOr4có\—|j€t|j|j¦«|_|jS)z%Return the binary SHA of this object.)ryÚobj_sharzr{rbs r2rzUnpackedObject.shaÿs(€àŒ9ÐÝ Ô 1°4´?ÑCÔCˆDŒIØŒyÐr4có`—|j|j€J‚tj|j|j¦«S)z"Return a ShaFile from this object.)rzr{r%Úfrom_raw_chunksrbs r2Úsha_filezUnpackedObject.sha_files0€àÔ Ð,°´Ð1LÐ1LÐLÝÔ& tÔ'8¸$¼/ÑJÔJÐJr4cóŽ—|jtvr1t|jtt
f¦«sJ‚|j|jfS|jS)z>Return the decompressed chunks, or (delta base, delta chunks).)r|r…Ú
isinstancer}rLrfrrbs r2Ú_objzUnpackedObject._objsE€àÔ¥Ð,Ð,ݘdœoµµs¨|Ñ<Ô<Ð<Ð<Ð<Ø”O TÔ%7Ð8Ð8àÔ%Ð%r4có’—t|t¦«sdS|jD]'}t||¦«t||¦«krdSŒ(dS©NFT)rŒrRÚ	__slots__Úgetattr)r1ÚotherÚslots   r2Ú__eq__zUnpackedObject.__eq__sZ€Ý˜%¥Ñ0Ô0ð	ؐ5Ø”Nð	ð	ˆDݐt˜TÑ"Ô"¥g¨e°TÑ&:Ô&:Ò:Ð:ؐuuð;àˆtr4có—||kSr/r9©r1r’s  r2Ú__ne__zUnpackedObject.__ne__s€Ø˜E’MÐ"Ð"r4c󐇗ˆfd„‰jD¦«}d ‰jjd |¦«¦«S)Ncó:•—g|]}|›dt‰|¦«›‘ŒS)ú=)r‘)Ú.0Úsr1s  €r2ú
<listcomp>z+UnpackedObject.__repr__.<locals>.<listcomp> s1ø€ÐDÐDÐD°1Ð+Ð+•w˜t QÑ'Ô'Ð+Ð+ÐDÐDÐDr4z{}({})z, )rÚformatÚ	__class__r5Újoin©r1Údatas` r2Ú__repr__zUnpackedObject.__repr__sAø€ØDÐDÐDÐD°T´^ÐDÑDÔDˆØŠ˜tœ~Ô6¸¿	º	À$¹¼ÑHÔHÐHr4rv)r5r6r7r8rrrfÚ__annotations__rrLrr3rrŠÚOldUnpackedObjectrr”r—rKr£r9r4r2rRrRÀsI€€€€€€ððððð€Ið˜3”-ÐÐÑØ˜˜eœÔ%Ð%Ð%Ñ%ؐd˜E 3Ð&Ô'Ð'Ð'Ñ'ؘ”;ÐÐÑØ˜$˜uœ+Ô&Ð&Ð&Ñ&ðØØØØØð)ð)ð
ð)ð)ð)ð)ð>ðððKðKðKð&Ð'ð&ð&ð&ð&ðððð#ð#ð#ðI˜#ðIðIðIðIðIðIr4rRiÚ	read_someÚunpackedrQÚbuffer_sizecó˜—|jdkrtd¦«‚tj¦«}g}|j}d}|j}	||¦«}	|	stjd¦«‚| |	¦«| |	¦«}
|t|
¦«z
}| |
¦«|j
}|r@t|¦«}|tj|	d|…|¦«}|r|	d|…|d<n|tj|	|¦«}ŒÓ||dz}||jkrtjd¦«‚||_|r||_|S)	aRead zlib data from a buffer.

    This function requires that the buffer have additional data following the
    compressed data, which is guaranteed to be the case for git pack files.

    Args:
      read_some: Read function that returns at least one byte, but may
        return less than the requested size.
      unpacked: An UnpackedObject to write result data to. If its crc32
        attr is not None, the CRC32 of the compressed bytes will be computed
        using this starting CRC32.
        After this function, will have the following attrs set:
        * comp_chunks    (if include_comp is True)
        * decomp_chunks
        * decomp_len
        * crc32
      include_comp: If True, include compressed data in the result.
      buffer_size: Size of the read buffer.
    Returns: Leftover unused data from the decompression.

    Raises:
      zlib.error: if a decompression error occurred.
    rjz+non-negative zlib data stream size expectedrTzEOF before end of zlib streamNìÿÿz.decompressed data does not match expected size)
r€Ú
ValueErrorÚzlibÚ
decompressobjrrhÚerrorrnÚ
decompressrlÚunused_datarmr~)
r¦r§rQr¨Ú
decomp_objr~rr€rhÚaddÚdecompÚunusedÚlefts
             r2Úread_zlib_chunksr¶'sƒ€ð:Ô˜bÒ Ð ÝÐFÑGÔGÐGÝÔ#Ñ%Ô%€Jà€KØÔ*€MØ€JØŒN€Eð/؈i˜Ñ$Ô$ˆØð	>Ý”*Ð<Ñ=Ô=Ð=Ø×Ò˜3ÑÔÐØ×&Ò& sÑ+Ô+ˆØ•c˜&‘k”kÑ!ˆ
Ø×Ò˜VÑ$Ô$Ð$ØÔ'ˆØð	/ݐv‘;”;ˆDØÐ Ý œ s¨6¨T¨E¨6¤{°EÑ:Ô:Øð
.Ø"% f¨ u f¤+˜B‘ØØ
Ð
Ý”N 3¨Ñ.Ô.ˆEð#/ð$
ÐØ
ÑˆàXÔ(Ò(Ð(ÝŒjÐIÑJÔJÐJà€H„NØð+Ø*ˆÔØ€Mr4có —t¦«}|D]}| |¦«Œ| ¦« d¦«S)z“Return the hexdigest of the SHA1 over a set of names.

    Args:
      iter: Iterator over string objects
    Returns: 40-byte hex sha1 digest
    Úascii)rÚupdateÚ	hexdigestÚencode)ÚiterrÚnames   r2Ú	iter_sha1r¾ksM€õ‰&Œ&€CØððˆØ
Š
4ÑÔÐÐØ=Š=‰?Œ?×!Ò! 'Ñ*Ô*Ð*r4cóv—t|d¦«5}t||¦«cddd¦«S#1swxYwYdS)z‚Load an index file by path.

    Args:
      path: Path to the index file
    Returns: A PackIndex loaded from the given path
    ÚrbN)r"Úload_pack_index_file)ÚpathÚfs  r2Úload_pack_indexrÄxs‚€õ
tÑ	Ô	ð- Ý# D¨!Ñ,Ô,ð-ð-ð-ð-ñ-ô-ð-ð-ð-ð-ð-ð-øøøð-ð-ð-ð-ð-ð-s‘.®2µ2cób—	| ¦«}n#ttf$rd}YnwxYw|X|€tj|¦«j}tr6	tj||tj¬¦«}||fS#t$rYnwxYw| 
¦«}t|¦«}||fS)N)Úaccess)ÚfilenorÚAttributeErrorÚosÚfstatÚst_sizeÚhas_mmapÚmmapÚACCESS_READÚOSErrorrgrl)rÃÚsizeÚfdÚcontentss    r2Ú_load_file_contentsrӃsӀðØ
XŠX‰ZŒZˆˆøÝ ¥.Ð1ðððØ
ˆˆˆðøøøð
€~؈<Ý”8˜B‘<”<Ô'ˆDÝð	&ð
&Ýœ9 R¨µdÔ6FÐGÑGÔGð
  ~Ð%øõ	ð
ð
ð
àð
øøøð
vŠv‰xŒx€H݈x‰=Œ=€DؐTˆ>Ðs‚—-¬-Á!A:Á:
BÂBcó—t|¦«\}}|dd…dkrNtjd|dd…¦«d}|dkrt||||¬¦«St	d	|z¦«‚t||||¬¦«S)
z­Load an index file from a file-like object.

    Args:
      path: Path for the index file
      f: File-like object
    Returns: A PackIndex loaded from the given file
    NéóÿtOcó>Léré)ÚfilerÒrÐzUnknown pack index format %d)rÓÚstructÚunpackÚ
PackIndex2ÚKeyErrorÚ
PackIndex1)rÂrÃrÒrÐÚversions     r2rÁrÁ™s‘€õ)¨Ñ+Ô+N€Hˆdؐ„|zÒ!Ð!Ý”-  x°°!°¤}Ñ5Ô5°aÔ8ˆØaŠ<ˆ<ݘd¨°XÀDÐIÑIÔIÐIåÐ9¸GÑCÑDÔDÐDå˜$ Q°ÀÐEÑEÔEÐEr4cóˆ—||ksJ‚||kr3||zdz}||¦«}||kr|dz}n||kr|dz
}n|S||k°3dS)aFind a SHA in a data blob with sorted SHAs.

    Args:
      start: Start index of range to search
      end: End index of range to search
      sha: Sha to find
      unpack_name: Callback to retrieve SHA by index
    Returns: Index of the SHA, or None if it wasn't found
    rÙrNr9)ÚstartÚendrÚunpack_nameÚiÚfile_shas      r2Úbisect_find_sharç¬st€ðCŠ<ˆ<ˆ<ˆ<Ø
3Š,ˆ,Ø
S‰[˜QÑˆØ;˜q‘>”>ˆØcŠ>ˆ>ؘ‘EˆEˆEØ
˜Š^ˆ^ؐa‘%ˆCˆCàˆHð3Š,ˆ,ðˆ4r4cóؗeZdZdZd„Zd„Zdefd„Zdee	fd„Z
deefd„Zde	fd„Z
d	e	defd
„Zd	e	defd„Zdede	fd
„Zd	e	defd„Zde	fd„Zdee	fd„Zd„Zdd„ZdS)Ú	PackIndexz˜An index in to a packfile.

    Given a sha id of an object a pack index can tell you the location in the
    packfile of that object if it has it.
    cóʗt|t¦«sdSt| ¦«| ¦«¦«D]\\}}}\}}}||krdSŒdSr)rŒréÚzipÚiterentries)r1r’Úname1Ú_Úname2s     r2r”zPackIndex.__eq__Ís|€Ý˜%¥Ñ+Ô+ð	ؐ5å,/Ø×ÒÑÔ × 1Ò 1Ñ 3Ô 3ñ-
ô-
ð	ð	Ñ(‰MˆUAq™=˜E 1 að˜Š~ˆ~ؐuuðàˆtr4có.—| |¦«Sr/)r”r–s  r2r—zPackIndex.__ne__Øs€Ø—;’;˜uÑ%Ô%Ð%Ð%r4r=có*—t|j¦«‚)ú0Return the number of entries in this pack index.rdrbs r2rezPackIndex.__len__Ûs€å! $¤,Ñ/Ô/Ð/r4cóP—tt| ¦«¦«S)z#Iterate over the SHAs in this pack.)r„r(Ú_itersharbs r2razPackIndex.__iter__ßs€å•:˜tŸ}š}™œÑ/Ô/Ð/r4có*—t|j¦«‚)ú¡Iterate over the entries in this pack index.

        Returns: iterator over tuples with object name, offset in packfile and
            crc32 checksum.
        )rTrìrbs r2rìzPackIndex.iterentriesãs€õ" $Ô"2Ñ3Ô3Ð3r4có*—t|j¦«‚)úpReturn the SHA1 checksum stored for the corresponding packfile.

        Returns: 20-byte binary digest
        )rTÚget_pack_checksumrbs r2rùzPackIndex.get_pack_checksumës€õ
" $Ô"8Ñ9Ô9Ð9r4rcód—tjdtd¬¦«| |¦«S)Nz Please use object_offset insteadrÙ©Ú
stacklevel)ÚwarningsÚwarnÚDeprecationWarningÚ
object_offset©r1rs  r2Úobject_indexzPackIndex.object_indexòs9€ÝŒ
Ø.Õ0BÈqð	
ñ	
ô	
ð	
ð×!Ò! #Ñ&Ô&Ð&r4có*—t|j¦«‚)áReturn the offset in to the corresponding packfile for the object.

        Given the name of an object it will return the offset that object
        lives at within the corresponding pack file. If the pack file doesn't
        have the object then None will be returned.
        )rTrrs  r2rzPackIndex.object_offsetøs€õ" $Ô"4Ñ5Ô5Ð5r4Úindexcój—| ¦«D]\}}}||kr|cSŒt|¦«‚)z<Return the SHA1 corresponding to the index in the pack file.)rìrÞ)r1rr½rxrhs     r2Úobject_sha1zPackIndex.object_sha1sI€à#'×#3Ò#3Ñ#5Ô#5ð	"ð	"ÑˆD&˜%Ø˜ŠˆØðõ˜5‘/”/Ð!r4có*—t|j¦«‚)úfSee object_offset.

        Args:
          sha: A *binary* SHA string. (20 characters long)_
        )rTÚ_object_offsetrs  r2r
zPackIndex._object_offset	s€õ" $Ô"5Ñ6Ô6Ð6r4cóD—t| ¦«¦«S)z…Return the hex SHA1 over all the shas of all objects in this pack.

        Note: This is used for the filename of the pack.
        )r¾rôrbs r2Úobjects_sha1zPackIndex.objects_sha1s€õ
˜Ÿš™œÑ)Ô)Ð)r4có*—t|j¦«‚)z9Yield all the SHA1's of the objects in the index, sorted.)rTrôrbs r2rôzPackIndex._itershas€å! $¤-Ñ0Ô0Ð0r4có—dSr/r9rbs r2ÚclosezPackIndex.closeó€Øˆr4Ncó—dSr/r9rbs r2ÚcheckzPackIndex.checkrr4rv)r5r6r7r8r”r—rfrerrLraÚPackIndexEntryrìrùrrrr
rrôrrr9r4r2réréÆs–€€€€€ððð	ð	ð	ð&ð&ð&ð0˜ð0ð0ð0ð0ð0˜( 5œ/ð0ð0ð0ð0ð4˜X nÔ5ð4ð4ð4ð4ð: 5ð:ð:ð:ð:ð' ð'¨#ð'ð'ð'ð'ð6 ð6¨3ð6ð6ð6ð6ð" ð"¨ð"ð"ð"ð"ð7 %ð7¨Cð7ð7ð7ð7ð*˜eð*ð*ð*ð*ð1˜( 5œ/ð1ð1ð1ð1ð
ð
ð
ð
ð
ð
ð
ð
ð
r4récór—eZdZdZd
dd„Zd„Zdefd„Zd„Zd„Z	d	„Z
d
„Zed„¦«Z
ed„¦«ZdS)ÚMemoryPackIndexz-Pack index that is stored entirely in memory.Nr=cóx—i|_i|_|D]\}}}||j|<||j|<Œ||_||_dS)zžCreate a new MemoryPackIndex.

        Args:
          entries: Sequence of name, idx, crc32 (sorted)
          pack_checksum: Optional pack checksum
        N)Ú_by_shaÚ
_by_offsetÚ_entriesÚ_pack_checksum)r1ÚentriesÚ
pack_checksumr½rxrhs      r2r3zMemoryPackIndex.__init__&sX€ðˆŒ؈ŒØ#*ð	+ð	+ÑˆD&˜%Ø!'ˆDŒL˜ÑØ&*ˆDŒO˜FÑ#Ð#؈Œ
Ø+ˆÔÐÐr4có—|jSr/)rrbs r2rùz!MemoryPackIndex.get_pack_checksum5s€ØÔ"Ð"r4có*—t|j¦«Sr/)rlrrbs r2rezMemoryPackIndex.__len__8s€Ý4”=Ñ!Ô!Ð!r4có`—t|¦«dkrt|¦«}|j|S)Né()rlr&rrs  r2rzMemoryPackIndex.object_offset;s)€Ýˆs‰8Œ8rŠ>ˆ>ݘS‘/”/ˆCØŒ|˜CÔ Ð r4có—|j|Sr/)r)r1rxs  r2rzMemoryPackIndex.object_sha1@s€ØŒ˜vÔ&Ð&r4có*—t|j¦«Sr/)r¼rrbs r2rôzMemoryPackIndex._itershaCs€ÝD”LÑ!Ô!Ð!r4có*—t|j¦«Sr/)r¼rrbs r2rìzMemoryPackIndex.iterentriesFs€ÝD”MÑ"Ô"Ð"r4cój—t| ¦«| ¦«¦«Sr/)rÚsorted_entriesÚcalculate_checksum)ÚclsÚpacks  r2Úfor_packzMemoryPackIndex.for_packIs*€å˜t×2Ò2Ñ4Ô4°d×6MÒ6MÑ6OÔ6OÑPÔPÐPr4cób—|| ¦«| ¦«¦«Sr/)rìrù)r'Úother_indexs  r2ÚclonezMemoryPackIndex.cloneMs,€àˆs;×*Ò*Ñ,Ô,¨k×.KÒ.KÑ.MÔ.MÑNÔNÐNr4r/rv)r5r6r7r8r3rùrfrerrrôrìÚclassmethodr)r,r9r4r2rr#s׀€€€€Ø7Ð7ð
,ð
,ð
,ð
,ð
,ð#ð#ð#ð"˜ð"ð"ð"ð"ð!ð!ð!ð
'ð'ð'ð"ð"ð"ð#ð#ð#ððQðQñ„[ðQððOðOñ„[ðOðOðOr4rcó‡—eZdZUdZeeed<ddd„Zede	fd„¦«Z
ˆfd„Zdd„Zdefd	„Z
d
edefd„Zd„Zd
„Zd„Zdeefd„Zdeefd„Zdefd„Zdd„Zdefd„Zdefd„Zdefd„Zdedefd„Zdedefd„ZˆxZS)Ú
FilePackIndexaýPack index that is based on a file.

    To do the loop it opens the file, and indexes first 256 4 byte groups
    with the first byte of the sha id. The value in the four byte group indexed
    is the end of the group that shares the same starting byte. Subtract one
    from the starting byte and index again to find the start of the group.
    The values are sorted by sha id within the group, so do the math to find
    the start and end offset and then bisect in to find if the value is
    present.
    Ú_fan_out_tableNr=có¼—||_|€t|d¦«|_n||_|€$t|j|¦«\|_|_dS||c|_|_dS)z“Create a pack index object.

        Provide it with the name of the index file to consider, and it will map
        it whenever required.
        NrÀ)Ú	_filenamer"Ú_filerÓÚ	_contentsÚ_size)r1ÚfilenamerÚrÒrÐs     r2r3zFilePackIndex.__init__`sd€ð"ˆŒðˆ<Ý  ¨4Ñ0Ô0ˆDŒJˆJàˆDŒJØÐÝ)<¸T¼ZÈÑ)NÔ)NÑ&ˆDŒN˜DœJ˜J˜Jà*2°DÐ&ˆDŒN˜DœJ˜J˜Jr4có—|jSr/©r2rbs r2rÂzFilePackIndex.pathró
€àŒ~Ðr4có”•—t|t¦«r|j|jkrdSt¦« |¦«S©NF)rŒr/r0Úsuperr”)r1r’rŸs  €r2r”zFilePackIndex.__eq__vsCø€õ
umÑ,Ô,ð	àÔ# uÔ';Ò;Ð;à5å‰wŒw~Š~˜eÑ$Ô$Ð$r4cóš—|j ¦«t|jdd¦«|j ¦«dSdS)Nr)r3rr‘r4rbs r2rzFilePackIndex.close€sL€ØŒ
×ÒÑÔÐݐ4”> 7¨DÑ1Ô1Ð=ØŒN× Ò Ñ"Ô"Ð"Ð"Ð"ð>Ð=r4có—|jdS)ròrj)r0rbs r2rezFilePackIndex.__len__…s€àÔ" 2Ô&Ð&r4råcó*—t|j¦«‚)z Unpack the i-th entry in the index file.

        Returns: Tuple with object name (SHA), offset in pack file and CRC32
            checksum (if known).
        )rTÚ
_unpack_entry©r1rås  r2r@zFilePackIndex._unpack_entry‰s€õ" $Ô"4Ñ5Ô5Ð5r4có*—t|j¦«‚)z)Unpack the i-th name from the index file.)rTÚ_unpack_namerAs  r2rCzFilePackIndex._unpack_name‘s€å! $Ô"3Ñ4Ô4Ð4r4có*—t|j¦«‚)z2Unpack the i-th object offset from the index file.)rTÚ_unpack_offsetrAs  r2rEzFilePackIndex._unpack_offset•s€å! $Ô"5Ñ6Ô6Ð6r4có*—t|j¦«‚)zAUnpack the crc32 checksum for the ith object from the index file.)rTÚ_unpack_crc32_checksumrAs  r2rGz$FilePackIndex._unpack_crc32_checksum™s€å! $Ô"=Ñ>Ô>Ð>r4c#óvK—tt|¦«¦«D]}| |¦«V—ŒdSr/)ÚrangerlrCrAs  r2rôzFilePackIndex._itershasJèè€Ý•s˜4‘y”yÑ!Ô!ð	'ð	'ˆAØ×#Ò# AÑ&Ô&Ð&Ð&Ð&Ð&ð	'ð	'r4c#óvK—tt|¦«¦«D]}| |¦«V—ŒdS)röN)rIrlr@rAs  r2rìzFilePackIndex.iterentries¡sLèè€õ•s˜4‘y”yÑ!Ô!ð	(ð	(ˆAØ×$Ò$ QÑ'Ô'Ð'Ð'Ð'Ð'ð	(ð	(r4Ústart_offsetcóƗg}td¦«D]N}|j||dzz||dzdzz…}| tjd|¦«d¦«ŒO|S)NérÕrú>Lr)rIr4rnrÛrÜ)r1rKrpråÚfanout_entrys     r2Ú_read_fan_out_tablez!FilePackIndex._read_fan_out_tableªss€ØˆÝu‘”ð	=ð	=ˆAØœ>ؘq 1™uÑ$ |°q¸1±uÀ±kÑ'AÐAôˆLð
JŠJ•v”} T¨<Ñ8Ô8¸Ô;Ñ<Ô<Ð<Ð<؈
r4có‚—| ¦«}| ¦«}||krt||¦«‚dS)z;Check that the stored checksum matches the actual checksum.N©r&Úget_stored_checksumr!©r1ÚactualÚstoreds   r2rzFilePackIndex.check³óG€à×(Ò(Ñ*Ô*ˆØ×)Ò)Ñ+Ô+ˆØVÒÐÝ" 6¨6Ñ2Ô2Ð2ðÐr4có^—t|jdd…¦« ¦«S)zlCalculate the SHA1 checksum over this pack index.

        Returns: This is a 20-byte binary digest
        Néìÿÿÿ)rr4Údigestrbs r2r&z FilePackIndex.calculate_checksumºs)€õ
D”N 4 C 4Ô(Ñ)Ô)×0Ò0Ñ2Ô2Ð2r4có:—t|jdd…¦«S)røiØÿÿÿrY©rLr4rbs r2rùzFilePackIndex.get_pack_checksumÁs€õ
T”^ C¨ GÔ,Ñ-Ô-Ð-r4có:—t|jdd…¦«S)z`Return the SHA1 checksum stored for this index.

        Returns: 20-byte binary digest
        rYNr\rbs r2rSz!FilePackIndex.get_stored_checksumÈs€õ
T”^ C D DÔ)Ñ*Ô*Ð*r4rcóì—t|¦«dkrt|¦«}	| |¦«S#t$r0}t	|jdd¦«}|dvrt
|¦«|‚‚d}~wwxYw)rr ÚclosedN)NT)rlr&r
r«r‘r4rt)r1rÚexcr_s    r2rzFilePackIndex.object_offsetÏs‡€õˆs‰8Œ8rŠ>ˆ>ݘS‘/”/ˆCð	Ø×&Ò& sÑ+Ô+Ð+øÝð	ð	ð	ݘTœ^¨X°tÑ<Ô<ˆFؘÐ%Ð%Ý)¨$Ñ/Ô/°SÐ8Øøøøøð		øøøs¤9¹
A3Á+A.Á.A3có —t|¦«dksJ‚t|dd…¦«}|dkrd}n|j|dz
}|j|}t||||j¦«}|€t|¦«‚| |¦«S)r	éNrr)rlror0rçrCrÞrE)r1rÚidxrârãrås      r2r
zFilePackIndex._object_offsetàs“€õ3‰xŒx˜2Š~ˆ~ˆ~ˆ~ݐ#bqb”'‰lŒlˆØ!Š8ˆ8؈EˆEàÔ'¨¨a©Ô0ˆEØÔ! #Ô&ˆÝ˜E 3¨¨TÔ->Ñ?Ô?ˆØˆ9ݘ3‘-”-ÐØ×"Ò" 1Ñ%Ô%Ð%r4©NNNrv)r5r6r7r8rrfr¤r3ÚpropertyrKrÂr”rrerr@rCrErGrrLrôrìrPrr&rùrSrr
Ú
__classcell__©rŸs@r2r/r/Rsø€€€€€€ð	ð	ð˜”IÐÐÑð:ð:ð:ð:ð:ð$ðcðððñ„Xðð%ð%ð%ð%ð%ð#ð#ð#ð#ð
'˜ð'ð'ð'ð'ð6˜sð6 ~ð6ð6ð6ð6ð5ð5ð5ð7ð7ð7ð?ð?ð?ð'˜( 5œ/ð'ð'ð'ð'ð(˜X nÔ5ð(ð(ð(ð(ð°ððððð3ð3ð3ð3ð3 Eð3ð3ð3ð3ð. 5ð.ð.ð.ð.ð+ Uð+ð+ð+ð+ð ð¨3ððððð"& %ð&¨Cð&ð&ð&ð&ð&ð&ð&ð&r4r/cóF‡—eZdZdZd
deddfˆfd„
Zd„Zd„Zd„Zd	„Z	ˆxZ
S)rßzVersion 1 Pack Index file.Nr6r=có’•—t¦« ||||¦«d|_| d¦«|_dS)Nrr)r<r3ràrPr0©r1r6rÚrÒrÐrŸs     €r2r3zPackIndex1.__init__ösDø€Ý
‰Œ×Ò˜ 4¨°4Ñ8Ô8Ð8؈ŒØ"×6Ò6°qÑ9Ô9ˆÔÐÐr4cóJ—td|jd|dzz¦«\}}||dfS)Nú>L20séé©rr4)r1rårxr½s    r2r@zPackIndex1._unpack_entryûs0€Ý$ W¨d¬n¸yÈQÐQSÉVÑ>TÑUÔU‰ˆØf˜dÐ#Ð#r4có<—d|dzzdz}|j||dz…S)NrmrnrÕrb)r4©r1rårxs   r2rCzPackIndex1._unpack_nameÿs+€Ø  B¡Ñ'¨!Ñ+ˆØŒ~˜f v°¡{Ð2Ô3Ð3r4cóJ—d|dzz}td|j|¦«dS)NrmrnrNrrorqs   r2rEzPackIndex1._unpack_offsets)€Ø  B¡Ñ'ˆÝ˜4 ¤°Ñ8Ô8¸Ô;Ð;r4có—dSr/r9rAs  r2rGz!PackIndex1._unpack_crc32_checksums€àˆtr4rd©r5r6r7r8rKr3r@rCrErGrfrgs@r2rßrßós’ø€€€€€Ø$Ð$ð:ð: ð:Èdð:ð:ð:ð:ð:ð:ð
$ð$ð$ð4ð4ð4ð<ð<ð<ðððððððr4rßcóF‡—eZdZdZd
deddfˆfd„
Zd„Zd„Zd„Zd	„Z	ˆxZ
S)rÝzVersion 2 Pack Index file.Nr6r=có•—t¦« ||||¦«|jdd…dkrtd¦«‚t	d|jd¦«\|_|jdkrtd|jz¦«‚| d¦«|_d|_|jd	t|¦«zz|_
|j
dt|¦«zz|_|jdt|¦«zz|_dS)
NrÕrÖzNot a v2 pack index filer×rÙúVersion was %drØirb)
r<r3r4ÚAssertionErrorrràrPr0Ú_name_table_offsetrlÚ_crc32_table_offsetÚ_pack_offset_table_offsetÚ_pack_offset_largetable_offsetrjs     €r2r3zPackIndex2.__init__sø€Ý
‰Œ×Ò˜ 4¨°4Ñ8Ô8Ð8ØŒ>˜"˜1˜"Ô Ò+Ð+Ý Ð!;Ñ<Ô<Ð<Ý% e¨T¬^¸QÑ?Ô?‰ˆŒØŒ<˜1ÒÐÝ Ð!1°D´LÑ!@ÑAÔAÐAØ"×6Ò6°qÑ9Ô9ˆÔØ"/ˆÔØ#'Ô#:¸RÅ#ÀdÁ)Ä)¹^Ñ#KˆÔ Ø)-Ô)AÀAÍÈDÉ	Ì	ÁMÑ)QˆÔ&Ø.2Ô.LÈqÕSVØñT
ôT
ñP
ñ/
ˆÔ+Ð+Ð+r4có~—| |¦«| |¦«| |¦«fSr/)rCrErGrAs  r2r@zPackIndex2._unpack_entrys?€à×Ò˜aÑ Ô Ø×Ò Ñ"Ô"Ø×'Ò'¨Ñ*Ô*ð
ð	
r4có@—|j|dzz}|j||dz…S©Nrb)ryr4rqs   r2rCzPackIndex2._unpack_name%s)€ØÔ(¨1¨r©6Ñ1ˆØŒ~˜f v°¡{Ð2Ô3Ð3r4cóº—|j|dzz}td|j|¦«d}|dzr,|j|dzdzz}td|j|¦«d}|S)NrÕrNrìiÿÿÿrØz>Q)r{rr4r|rqs   r2rEzPackIndex2._unpack_offset)sn€ØÔ/°!°a±%Ñ7ˆÝ˜T 4¤>°6Ñ:Ô:¸1Ô=ˆØUÑð	BØÔ8¸FÀiÑ<PÐTUÑ;UÑUˆFÝ   t¤~°vÑ>Ô>¸qÔAˆF؈
r4cóP—td|j|j|dzz¦«dS)NrNrÕr)rr4rzrAs  r2rGz!PackIndex2._unpack_crc32_checksum1s)€Ý˜4 ¤°Ô1IÈAÐPQÉEÑ1QÑRÔRÐSTÔUÐUr4rdrtrgs@r2rÝrÝs™ø€€€€€Ø$Ð$ð

ð

 ð

Èdð

ð

ð

ð

ð

ð

ð
ð
ð
ð4ð4ð4ððððVðVðVðVðVðVðVr4rÝcóú—|d¦«}|std¦«‚|dd…dkrtd|z¦«‚td|d¦«\}|dvrtd	|z¦«‚td|d
¦«\}||fS)zÁRead the header of a pack file.

    Args:
      read: Read function
    Returns: Tuple of (pack version, number of objects). If no data is
        available to read, returns (None, None).
    ézfile too short to contain packNrÕóPACKzInvalid pack header %rr×)rÙérwrØ)rxr)rgÚheaderràÚnum_objectss    r2Úread_pack_headerr‰5sŸ€ðˆT"‰XŒX€FØð?ÝÐ=Ñ>Ô>Ð>Ø
ˆbˆqˆb„zWÒÐÝÐ5¸Ñ>Ñ?Ô?Ð?ݘU F¨AÑ.Ô.J€WؐfÐÐÝÐ-°Ñ7Ñ8Ô8Ð8Ý  ¨°Ñ2Ô2N€[Ø[Ð!Ð!r4ÚchunkscóŽ—t|t¦«rt|¦«Stt	t|¦«¦«Sr/)rŒrLrlrƒr„)rŠs r2Ú
chunks_lengthrŒIs8€Ý&%Ñ Ô ð%ݐ6‰{Œ{Ðå•3•s˜FÑ#Ô#Ñ$Ô$Ð$r4Úread_allcóŽ—|€|}|rd}nd}t||¬¦«\}}|ddz	dz}|ddz}t|dd…¦«D]\}	}
||
dz|	dzdzzz
}Œt|¦«}|tkret||¬¦«\}}|t|¦«z
}|d	d
zrt‚|ddz}|dd…D]}
|dz
}|dz}||
dzz
}Œ|}
n7|t
kr*|d¦«}|t
j||¦«}|}
|dz
}nd}
t||
||¬¦«}t||||¬
¦«}||fS)a½Unpack a Git object.

    Args:
      read_all: Read function that blocks until the number of requested
        bytes are read.
      read_some: Read function that returns at least one byte, but may not
        return the number of bytes requested.
      compute_crc32: If True, compute the CRC32 of the compressed data. If
        False, the returned CRC32 will be None.
      include_comp: If True, include compressed data in the result.
      zlib_bufsize: An optional buffer size for zlib operations.
    Returns: A tuple of (unpacked, unused), where unused is the unused data
        leftover from decompression, and unpacked in an UnpackedObject with
        the following attrs set:

        * obj_chunks     (for non-delta types)
        * pack_type_num
        * delta_base     (for delta types)
        * comp_chunks    (if include_comp is True)
        * decomp_chunks
        * decomp_len
        * crc32          (if compute_crc32 is True)
    Nr)rhrÕr*érérjrkrb)r}r€rh)r¨rQ)
rrÚ	enumeraterlÚ	OFS_DELTArxÚ	REF_DELTArmrhrRr¶)rr¦Ú
compute_crc32rQÚzlib_bufsizerhÚrawÚtype_numrÐråÚbyteÚraw_baseÚdelta_base_offsetr}Údelta_base_objr§r´s                 r2Ú
unpack_objectrœPsЀð<ÐØˆ	Øð؈ˆàˆå °Ð6Ñ6Ô6J€CˆØA”˜!‘˜tÑ#€H؈qŒ6D‰=€DݘS   œWÑ%Ô%ð/ð/‰ˆˆ4Ø˜‘ 1 q¡5¨A¡+Ñ.Ñ.ˆˆõ3‰xŒx€HØ•9ÒÐÝ# H°EÐ:Ñ:Ô:‰
ˆˆUØ•C˜‘H”Hш؈rŒ7T‰>ð	!Ý Ð Ø œF T™MÐØ˜˜˜”Gð	-ð	-ˆDØ Ñ"ÐØ !Ñ#ÐØ ¨¡Ñ,ÐÐØ&ˆ
ˆ
Ø	•YÒ	Ð	Ø!˜ "™œˆØÐÝ”N >°5Ñ9Ô9ˆEØ#ˆ
ؐB‰ˆˆàˆ
åØ˜Z°DÀðñô€HõØØØ Ø!ð	ñô€FðVÐÐr4cóf—|\}}|tvrt|d¦«St|¦«S)zBCompute the size of a unresolved object for use with LRUSizeCache.r)r…rŒ)ÚvalueÚnumr<s   r2Ú_compute_object_sizer s6€àJ€Sˆ#Ø
kÐÐݘS œVÑ$Ô$Ð$ݘÑÔÐr4cót—eZdZdZdefd
d„Zd„Zd„Zed„¦«Z	d„Z
d	„Zdefd
„Z
ddeefd„ZdS)ÚPackStreamReaderz|Class to read a pack stream.

    The pack is read from a ReceivableProtocol using read() or recv() as
    appropriate.
    Nr=cóė||_|€||_n||_t¦«|_d|_t¦«|_t¦«|_||_	dS©Nr)
rr¦rrÚ_offsetrÚ_rbufrÚ_trailerÚ
_zlib_bufsize)r1rr¦r•s    r2r3zPackStreamReader.__init__¬sU€Ø ˆŒ
ØÐØ%ˆDŒNˆNà&ˆDŒNÝ‘6”6ˆŒØˆŒÝ‘Y”YˆŒ
å&+¡g¤gˆŒ
Ø)ˆÔÐÐr4c
óð‡—||¦«}t|¦«}‰xj|z
c_t‰j¦«}|dkr|}d}nt||zdz
d¦«}|}‰j t
tˆfd„t|¦«D¦«¦«¦«¦«‰j 	||d…¦«‰j |d|…¦«|S)aHRead up to size bytes using the given callback.

        As a side effect, update the verifier's hash (excluding the last 20
        bytes read).

        Args:
          read: The read callback to read from.
          size: The maximum number of bytes to read; the particular
            behavior is callback-specific.
        rbrcóB•—g|]}‰j ¦«‘ŒSr9)r§Úpopleft)r›rîr1s  €r2rz*PackStreamReader._read.<locals>.<listcomp>Ñs'ø€ÐLÐLÐL¸˜Tœ]×2Ò2Ñ4Ô4ÐLÐLÐLr4N)
rlr¥r§Úmaxrr¹rLÚ	bytearrayrIÚextend)r1rgrÐr¢ÚnÚtnÚto_popÚto_adds`       r2Ú_readzPackStreamReader._read¹süø€ðˆtD‰zŒzˆõ
‰IŒIˆØˆŒ˜ÑˆŒÝ
”Ñ
Ô
ˆØŠ7ˆ7؈F؈FˆF嘘R™ "™ aÑ(Ô(ˆF؈FØŒŠÝ•)ÐLÐLÐLÐL½eÀF¹m¼mÐLÑLÔLÑMÔMÑNÔNñ	
ô	
ð	
ð	
Œ
×Ò˜T 6 ' ( (œ^Ñ,Ô,Ð,ð	
ŒŠ˜˜X˜v˜g˜XœÑ'Ô'Ð'؈r4cóʗ|j}| ¦«}| dt¦«| ¦«}| |¦«||z
Sr¤)r¦ÚtellÚseekr)r1Úbufrârãs    r2Ú_buf_lenzPackStreamReader._buf_lenÙsP€ØŒjˆØ—’‘
”
ˆØŠ•HÑÔÐØhŠh‰jŒjˆØŠ‰ŒˆØU‰{Ðr4có:—|j| ¦«z
Sr/)r¥r¸rbs r2rxzPackStreamReader.offsetás€àŒ|˜dŸmšm™oœoÑ-Ð-r4có—| ¦«}||kr|j |¦«S|j ¦«}t¦«|_|| |j||z
¦«zS)z)Read, blocking until size bytes are read.)r¸r¦rgrr³r)r1rÐÚbuf_lenÚbuf_datas    r2rgzPackStreamReader.readåsg€à—-’-‘/”/ˆØdŠ?ˆ?Ø”:—?’? 4Ñ(Ô(Ð(Ø”:—?’?Ñ$Ô$ˆÝ‘Y”YˆŒ
ؘ$Ÿ*š* T¤]°D¸7±NÑCÔCÑCÐCr4cóΗ| ¦«}|r5|j |¦«}||krt¦«|_|S| |j|¦«S)z7Read up to size bytes, blocking until one byte is read.)r¸r¦rgrr³r¦)r1rÐr»r¢s    r2ÚrecvzPackStreamReader.recvîsY€à—-’-‘/”/ˆØð	Ø”:—?’? 4Ñ(Ô(ˆDؐwŠˆÝ$™YœY”
؈K؏zŠz˜$œ.¨$Ñ/Ô/Ð/r4có—|jSr/©Ú_num_objectsrbs r2rezPackStreamReader.__len__øs€ØÔ Ð r4Fc#óØK—t|j¦«\}|_t|j¦«D]¤}|j}t|j|j||j¬¦«\}}||_t¦«}| 	|¦«| 	|j
 ¦«¦«| d¦«||_
|V—Œ¥| ¦«dkr| d¦«t|j¦«}||j ¦«kr4t#t%|¦«|j ¦«¦«‚dS)aRead the objects in this pack file.

        Args:
          compute_crc32: If True, compute the CRC32 of the compressed
            data. If False, the returned CRC32 will be None.
        Returns: Iterator over UnpackedObjects with the following members set:
            offset
            obj_type_num
            obj_chunks (for non-delta types)
            delta_base (for delta types)
            decomp_chunks
            decomp_len
            crc32 (if compute_crc32 is True)

        Raises:
          ChecksumMismatch: if the checksum of the pack contents does not
            match the checksum in the pack trailer.
          zlib.error: if an error occurred during zlib decompression.
          IOError: if an error occurred writing to the output file.
        )r¦r”r•rrbN)r‰rgrÁrIrxrœr¾r¨rÚwriter¦r¶r¸r­r§rrZr!r(rº)	r1r”Úpack_versionrårxr§r´r·Úpack_shas	         r2Úread_objectszPackStreamReader.read_objectsûsIèè€õ*+;¸4¼9Ñ*EÔ*EÑ'ˆdÔ'åtÔ(Ñ)Ô)ð	ð	ˆAØ”[ˆFÝ,Ø”	Øœ)Ø+Ø!Ô/ð	 ñ ô ÑˆHfð%ˆHŒOõ‘)”)ˆCØIŠIfÑÔÐØIŠId”j—o’oÑ'Ô'Ñ(Ô(Ð(ØHŠHQ‰KŒKˆK؈DŒJàˆNˆNˆNˆNà=Š=‰?Œ?˜RÒÐð

IŠIb‰MŒMˆMå˜Tœ]Ñ+Ô+ˆØt”x—’Ñ(Ô(Ò(Ð(Ý"¥:¨hÑ#7Ô#7¸¼×9KÒ9KÑ9MÔ9MÑNÔNÐNð)Ð(r4rv©F)r5r6r7r8Ú
_ZLIB_BUFSIZEr3r³r¸rerxrgr¾rfrerrRrÆr9r4r2r¢r¢¥sက€€€ððð,0¸mð*ð*ð*ð*ð*ðððð@ðððð.ð.ñ„Xð.ðDðDðDð0ð0ð0ð!˜ð!ð!ð!ð!ð3Oð3O°8¸NÔ3Kð3Oð3Oð3Oð3Oð3Oð3Or4r¢có8‡—eZdZdZddˆfd„
Zˆfd„Zdd„ZˆxZS)	ÚPackStreamCopierzÀClass to verify a pack stream as it is being read.

    The pack is read from a ReceivableProtocol using read() or recv() as
    appropriate and written out to the given file-like object.
    Nr=cój•—t¦« ||¬¦«||_||_dS)a´Initialize the copier.

        Args:
          read_all: Read function that blocks until the number of
            requested bytes are read.
          read_some: Read function that returns at least one byte, but may
            not return the number of bytes requested.
          outfile: File-like object to write output through.
          delta_iter: Optional DeltaChainIterator to record deltas as we
            read them.
        )r¦N)r<r3ÚoutfileÚ_delta_iter)r1rr¦rÌÚ
delta_iterrŸs     €r2r3zPackStreamCopier.__init__8s7ø€õ	‰Œ×Ò˜¨YÐÑ7Ô7Ð7؈ŒØ%ˆÔÐÐr4c󀕗t¦« ||¦«}|j |¦«|S)z:Read data from the read callback and write it to the file.)r<r³rÌrÃ)r1rgrÐr¢rŸs    €r2r³zPackStreamCopier._readHs5ø€å‰wŒw}Š}˜T 4Ñ(Ô(ˆØŒ×Ò˜4Ñ Ô Ð Øˆr4cóH—d}t| ¦«¦«D]X\}}|jr|j |¦«|0|d|t	|¦«fz d¦«¦«ŒY|#|d|z d¦«¦«dSdS)z™Verify a pack stream and write it to the output file.

        See PackStreamReader.iterobjects for a list of exceptions this may
        throw.
        rNzcopying pack entries: %d/%d
r¸zcopied %d pack entries
)r‘rÆrÍÚrecordrlr»)r1rCrår§s    r2ÚverifyzPackStreamCopier.verifyNsǀð
ˆÝ$ T×%6Ò%6Ñ%8Ô%8Ñ9Ô9ð	ð	‰KˆAˆxØÔð
2ØÔ ×'Ò'¨Ñ1Ô1Ð1ØÐ#ؐØ4¸½3¸t¹9¼9°~ÑE×MÒMÈgÑVÔVñôðøðÐØˆHÐ0°1Ñ4×<Ò<¸WÑEÔEÑFÔFÐFÐFÐFð Ðr4r/rv)r5r6r7r8r3r³rÒrfrgs@r2rÊrÊ1sø€€€€€ððð&ð&ð&ð&ð&ð&ð&ð ðððððGðGðGðGðGðGðGðGr4rÊcó0—t¦«}| t|t|¦«¦«¦«t	|t
¦«r| |¦«n|D]}| |¦«Œ| ¦«S)z5Compute the SHA for a numeric type and object chunks.)rr¹r'rŒrŒrLrZ)ÚtyperŠrÚchunks    r2r‡r‡`sˆ€å
‰&Œ&€C؇J‚J}˜T¥=°Ñ#8Ô#8Ñ9Ô9Ñ:Ô:Ð:ݐ&%Ñ Ô ð؏
Š
6ÑÔÐÐàð	ð	ˆEØJŠJuÑÔÐÐ؏:Š:‰<Œ<Ðr4écóª—t¦«}| dt¦«| ¦«}|dkr	||z|ks||krt	d|||fz¦«‚||z|z
}| |¦«|rL| t
||¦«¦«}| |¦«|t|¦«z}|°L|S)aˆHash a portion of a file into a new SHA.

    Args:
      f: A file-like object to read from that supports seek().
      start_ofs: The offset in the file to start reading at.
      end_ofs: The offset in the file to end reading at, relative to the
        end of the file.
      buffer_size: A buffer size for reading.
    Returns: A new SHA object updated with data read from the file.
    rzOAttempt to read beyond file length. start_ofs: %d, end_ofs: %d, file length: %d)	rr¶rrµrxrgÚminr¹rl)rÃÚ	start_ofsÚend_ofsr¨rÚlengthÚtodor¢s        r2Úcompute_file_sharÝlsñ€õ‰&Œ&€C؇F‚Fˆ1hÑÔÐØ
VŠV‰XŒX€Fؐ!Šˆ˜ Ñ(¨9Ò4Ð4¸À6Ò9IÐ9IÝð
:Ø=FÈÐQWÐ<Xñ
Yñ
ô
ð	
ðGјiÑ'€D؇F‚Fˆ9ÑÔÐØ
ð؏vŠv•c˜$ Ñ,Ô,Ñ-Ô-ˆØ
Š
4ÑÔÐØ•D‘	”	шððð€Jr4có`—eZdZdZd!d"d„Zed„¦«Zed„¦«Zed#d„¦«Z	ed„¦«Z
d	„Zd
„Zd„Z
d„Zd
„Zdefd„Zd„Zddœdefd„Z	d!deefd„Z		d!deedeefd„Zd!d„Zd!d„Zd$d„Zd„Zd„Zddœdededefd„Z dede!ee"ffd „Z#dS)%ÚPackDataaCThe data contained in a packfile.

    Pack files can be accessed both sequentially for exploding a pack, and
    directly with the help of an index to retrieve a specific object.

    The objects within are either complete or a delta against another.

    The header is variable length. If the MSB of each byte is set then it
    indicates that the subsequent byte is still part of the header.
    For the first byte the next MS bits are the type, which tells you the type
    of object, and whether it is a delta. The LS byte is the lowest bits of the
    size. For each subsequent byte the LS 7 bits are the next MS bits of the
    size, i.e. the last byte of the header contains the MS bits of the size.

    For the complete objects the data is stored as zlib deflated data.
    The size in the header is the uncompressed object size, so to uncompress
    you need to just keep feeding data to zlib until you get an object back,
    or it errors on bad data. This is done here by just giving the complete
    buffer from the start of the deflated object on. This is bad, but until I
    get mmap sorted out it will have to do.

    Currently there are no integrity checks done. Also no attempt is made to
    try and detect the delta case, or a request for an object at the wrong
    position.  It will all just throw a zlib or KeyError.
    Nr=có8—||_||_d|_|€t|jd¦«|_n||_t|jj¦«\}|_tttttffdt¬¦«|_
dS)aaCreate a PackData object representing the pack in the given filename.

        The file must exist and stay readable until the object is disposed of.
        It must also stay the same size. It will be mapped whenever needed.

        Currently there is a restriction on the size of the pack as the python
        mmap implementation is flawed.
        r„NrÀi@)Úcompute_size)r2r5Ú_header_sizer"r3r‰rgrÁr#rfrr¥r Ú
_offset_cache)r1r6rÚrÐràs     r2r3zPackData.__init__£sŒ€ð"ˆŒØˆŒ
ØˆÔØˆ<Ý  ¤°Ñ6Ô6ˆDŒJˆJàˆDŒJÝ'7¸¼
¼Ñ'HÔ'HÑ$ˆ$Ô#Ý)­#­uµSÕ:KÐ5KÔ/LÐ*LÔMØÕ+?ð
ñ
ô
ˆÔÐÐr4cóJ—tj |j¦«Sr/)rÉrÂÚbasenamer2rbs r2r6zPackData.filename¸s€åŒw×Ò ¤Ñ/Ô/Ð/r4có—|jSr/r8rbs r2rÂz
PackData.path¼r9r4có8—|t|¦«||¬¦«S)N)rÚrÐ)rK)r'rÚrÐs   r2Ú	from_filezPackData.from_fileÀs€àˆs•3t‘9”9 4¨dÐ3Ñ3Ô3Ð3r4có—||¬¦«S)N)r6r9)r'rÂs  r2Ú	from_pathzPackData.from_pathÄs€àˆs˜DÐ!Ñ!Ô!Ð!r4có8—|j ¦«dSr/)r3rrbs r2rzPackData.closeÈs€ØŒ
×ÒÑÔÐÐÐr4có—|Sr/r9rbs r2Ú	__enter__zPackData.__enter__Ëó€Øˆr4có.—| ¦«dSr/©r©r1Úexc_typeÚexc_valÚexc_tbs    r2Ú__exit__zPackData.__exit__Îó€Ø
Š
‰Œˆˆˆr4có„—t|t¦«r*| ¦«| ¦«kSdSr;)rŒrßrSr–s  r2r”zPackData.__eq__Ñs=€ÝeXÑ&Ô&ð	MØ×+Ò+Ñ-Ô-°×1JÒ1JÑ1LÔ1LÒLÐL؈ur4cóê—|j|jStj |j¦«|_|j|jkr&d|j|j|jfz}t
|¦«‚|jS)Nz(%s is too small for a packfile (%d < %d))r5rÉrÂÚgetsizer2rârx)r1Úerrmsgs  r2Ú	_get_sizezPackData._get_sizeÖsq€ØŒ:Ð!Ø”:ÐÝ”W—_’_ T¤^Ñ4Ô4ˆŒ
ØŒ:˜Ô)Ò)Ð)Ø?ؔؔ
ØÔ!ðCñˆFõ
! Ñ(Ô(Ð(ØŒzÐr4có—|jS)z+Returns the number of objects in this pack.rÀrbs r2rezPackData.__len__ãs€àÔ Ð r4cóR—t|jd¬¦« ¦«S)z[Calculate the checksum for this pack.

        Returns: 20-byte binary SHA1 digest
        rY©rÚ)rÝr3rZrbs r2r&zPackData.calculate_checksumçs%€õ
  ¤
°CÐ8Ñ8Ô8×?Ò?ÑAÔAÐAr4FrPrQc#ójK—|j |j¦«|j€dSt	|j¦«D]s}|j ¦«}t
|jjd|¬¦«\}}||_|V—|j t|¦«t¦«ŒtdS)NF)r”rQ)r3r¶rârÁrIrµrœrgrxrlr)r1rQrîrxr§r´s      r2Ú
iter_unpackedzPackData.iter_unpackedîs·èè€ØŒ
Š˜Ô)Ñ*Ô*Ð*àÔÐ$ØˆFåtÔ(Ñ)Ô)ð	4ð	4ˆAØ”Z—_’_Ñ&Ô&ˆFÝ,Ø”
”¨uÀ<ð ñ ô ÑˆHfð%ˆHŒO؈NˆNˆNàŒJOŠOS ™[œ[˜L­(Ñ3Ô3Ð3Ð3ð	4ð	4r4Úresolve_ext_refc#óžK—|j}t ||¬¦«}t|¦«D]\}}||||¦«|V—ŒdS)úéYield entries summarizing the contents of this pack.

        Args:
          progress: Progress function, called with current and total
            object count.
        Returns: iterator of tuples with (sha, offset, crc32)
        ©rN)rÁÚPackIndexerÚ
for_pack_datar‘)r1rCrrˆÚindexerråÚresults       r2rìzPackData.iterentriesþspèè€ðÔ'ˆÝ×+Ò+¨DÀ/Ð+ÑRÔRˆÝ" 7Ñ+Ô+ð	ð	‰IˆAˆvØÐ#ؐ˜˜KÑ(Ô(Ð(؈LˆLˆLˆLð	ð	r4rCcóJ—t| ||¬¦«¦«S©zßReturn entries in this pack, sorted by SHA.

        Args:
          progress: Progress function, called with current and total
            object count
        Returns: Iterator of tuples with (sha, offset, crc32)
        ©rCr)Úsortedrì)r1rCrs   r2r%zPackData.sorted_entriess,€õØ×Ò hÀÐÑPÔPñ
ô
ð	
r4cóʗ| ||¬¦«}t|d¦«5}t||| ¦«¦«cddd¦«S#1swxYwYdS)z¼Create a version 1 file for this data file.

        Args:
          filename: Index filename.
          progress: Progress report function
        Returns: Checksum of index file
        rÚwbN)r%r"Úwrite_pack_index_v1r&©r1r6rCrrrÃs      r2Úcreate_index_v1zPackData.create_index_v1óĀð×%Ò%بð&ñ
ô
ˆõX˜tÑ
$Ô
$ð	N¨Ý& q¨'°4×3JÒ3JÑ3LÔ3LÑMÔMð	Nð	Nð	Nð	Nñ	Nô	Nð	Nð	Nð	Nð	Nð	Nð	Nøøøð	Nð	Nð	Nð	Nð	Nð	Nó¨#AÁAÁAcóʗ| ||¬¦«}t|d¦«5}t||| ¦«¦«cddd¦«S#1swxYwYdS)zÂCreate a version 2 index file for this data file.

        Args:
          filename: Index filename.
          progress: Progress report function
        Returns: Checksum of index file
        rrN)r%r"Úwrite_pack_index_v2r&rs      r2Úcreate_index_v2zPackData.create_index_v2-rrrÙcóž—|dkr| |||¬¦«S|dkr| |||¬¦«Std|z¦«‚)zºCreate an  index file for this data file.

        Args:
          filename: Index filename.
          progress: Progress report function
        Returns: Checksum of index file
        rrrÙzunknown index format %d)rrr«)r1r6rCràrs     r2Úcreate_indexzPackData.create_index;sv€ðaŠ<ˆ<Ø×'Ò'ؘ(°Oð(ñôð
ð˜Š\ˆ\Ø×'Ò'ؘ(°Oð(ñôð
õÐ6¸Ñ@ÑAÔAÐAr4cóv—|j dt¦«|j d¦«S)z1Return the expected checksum stored in this pack.rYrb)r3r¶rrgrbs r2rSzPackData.get_stored_checksumNs,€àŒ
Š˜XÑ&Ô&Ð&ØŒzŠ˜rÑ"Ô"Ð"r4có‚—| ¦«}| ¦«}||krt||¦«‚dS)z#Check the consistency of this pack.NrRrTs   r2rzPackData.checkSrWr4rxcóž—||jksJ‚|j |¦«t|jj|¬¦«\}}||_|S)z5Given offset in the packfile return a UnpackedObject.rP)râr3r¶rœrgrx)r1rxrQr§rîs     r2Úget_unpacked_object_atzPackData.get_unpacked_object_atZsR€ð˜Ô*Ò*Ð*Ð*Ð*ØŒ
Š˜ÑÔÐÝ# D¤J¤OÀ,ÐOÑOÔO‰ˆ!Ø ˆŒØˆr4có¢—	|j|S#t$rYnwxYw| |d¬¦«}|j| ¦«fS)zýGiven an offset in to the packfile return the object that is there.

        Using the associated index the location of an object can be looked up,
        and then the packfile can be asked directly for that object using this
        function.
        FrP)rãrÞrr|r)r1rxr§s   r2Ú
get_object_atzPackData.get_object_atdsc€ð	ØÔ% fÔ-Ð-øÝð	ð	ð	ØˆDð	øøøà×.Ò.¨vÀEÐ.ÑJÔJˆØÔ&¨¯
ª
©¬Ð8Ð8s‚
›©NNrvr/)NrÙN)$r5r6r7r8r3rer6rÂr-rèrêrrírõr”rûrfrer&rMrrÚResolveExtRefFnrìÚ
ProgressFnr%rrrrSrrRrrr¥rr9r4r2rßr߈s‚€€€€€ððð4
ð
ð
ð
ð
ð*ð0ð0ñ„Xð0ðððñ„Xððð4ð4ð4ñ„[ð4ðð"ð"ñ„[ð"ððððððððððððð
ððð!˜ð!ð!ð!ð!ðBðBðBð5:ð4ð4ð4¨Tð4ð4ð4ð4ð"KOððØ.6°Ô.Gððððð&*.Ø59ð
ð
à˜:Ô&ð
ð" /Ô2ð
ð
ð
ð
ð NðNðNðNðNðNðNðNðBðBðBðBð&#ð#ð#ð
3ð3ð3ð49ðððØðØ,0ðà	ððððð9 Cð9¨E°#Ð7HÐ2HÔ,Ið9ð9ð9ð9ð9ð9r4rßÚTcó$—eZdZdZdZdZddœdd„Zeddefd„¦«Z	eddd	œd
dde
ed
efd„¦«Z
deddfd„Zdeddfd„Zd„Zdd„Zd„Zdedefd„Zdededeedefd„Zdededeefd„Zdeefd„Zd„ZdS)ÚDeltaChainIteratora¬Abstract iterator over pack data based on delta chains.

    Each object in the pack is guaranteed to be inflated exactly once,
    regardless of how many objects reference it as a delta base. As a result,
    memory usage is proportional to the length of the longest delta chain.

    Subclasses can override _result to define the result type of the iterator.
    By default, results are UnpackedObjects with the following members set:

    * offset
    * obj_type_num
    * obj_chunks
    * pack_type_num
    * delta_base     (for delta types)
    * comp_chunks    (if _include_comp is True)
    * decomp_chunks
    * decomp_len
    * crc32          (if _compute_crc32 is True)
    FNrr=có¢—||_||_tt¦«|_tt¦«|_g|_g|_dSr/)r3Ú_resolve_ext_refrÚlistÚ_pending_ofsÚ_pending_refÚ	_full_ofsÚ	_ext_refs)r1Úfile_objrs   r2r3zDeltaChainIterator.__init__ŽsC€ØˆŒ
Ø /ˆÔÝ2=½dÑ2CÔ2CˆÔÝ4?ÅÑ4EÔ4EˆÔØ02ˆŒØ&(ˆŒˆˆr4Ú	pack_datacó¦—|d|¬¦«}| |¦«| d¬¦«D]}| |¦«Œ|S)NrFrP)Ú
set_pack_datarrÑ)r'r-rÚwalkerr§s     r2rz DeltaChainIterator.for_pack_data–sd€àT¨?Ð;Ñ;Ô;ˆØ×Ò˜YÑ'Ô'Ð'Ø!×/Ò/¸UÐ/ÑCÔCð	$ð	$ˆHØMŠM˜(Ñ#Ô#Ð#Ð#؈
r4©rWrr(ÚPackr0rWcón—|d|¬¦«}| |j¦«t¦«}|D]\}t|t¦«sJ‚	|j |¦«}| |¦«ŒJ#t$r|s‚YŒYwxYwt¦«}	|r| 	¦«}|j 
|¦«}
| |
¦«|	 |¦«d}|
jtkr|
j|
jz
}nw|
jt krgt#t¦«5t|
jt¦«sJ‚|j |
j¦«}ddd¦«n#1swxYwY|||	vr| |¦«|°|S)Nr)r/r¢ÚsetrŒrLrrr²rÞÚpoprrÑr|r’rxr}r“rr)r'r(r0rWrr0rÜrÚoffÚdoner§Úbase_ofss            r2Úfor_pack_subsetz"DeltaChainIterator.for_pack_subsetžs€ðT¨?Ð;Ñ;Ô;ˆØ×Ò˜TœYÑ'Ô'Ð'݉uŒuˆØð	ð	ˆCݘc¥5Ñ)Ô)Ð)Ð)Ð)ð
Ø”j×.Ò.¨sÑ3Ô3ð
—’˜‘
”


øõ	ð
ð
ð
Ø$ðØððð
øøøõ
‰uŒuˆØñ
	#Ø—(’(‘*”*ˆCØ”y×7Ò7¸Ñ<Ô<ˆHØMŠM˜(Ñ#Ô#Ð#ØHŠHS‰MŒMˆM؈HØÔ%­Ò2Ð2Ø#œ?¨XÔ-@Ñ@ØÔ'­9Ò4Ð4ݝhÑ'Ô'ðLðLÝ% hÔ&9½5ÑAÔAÐAÐAÐAØ#œz×6Ò6°xÔ7JÑKÔKHðLðLðLñLôLðLðLðLðLðLðLøøøðLðLðLðLðÐ#¨¸Ð(<Ð(<Ø—’˜Ñ"Ô"Ð"ðñ
	#ðˆ
s$ÁBÂ
BÂBÅ<FÆFÆFr§cód—|j}|j}|tkr,||jz
}|j| |¦«dS|tkrCt|jt¦«sJ‚|j	|j |¦«dS|j
 ||f¦«dSr/)r|rxr’r}r(rnr“rŒrLr)r*)r1r§r—rxÚbase_offsets     r2rÑzDeltaChainIterator.recordÄsµ€ØÔ)ˆØ”ˆØ•yÒ Ð Ø  8Ô#6Ñ6ˆKØÔ˜kÔ*×1Ò1°&Ñ9Ô9Ð9Ð9Ð9Ø
Ò
"Ð
"ݘhÔ1µ5Ñ9Ô9Ð9Ð9Ð9ØÔ˜hÔ1Ô2×9Ò9¸&ÑAÔAÐAÐAÐAàŒN×!Ò! 6¨8Ð"4Ñ5Ô5Ð5Ð5Ð5r4có—|j|_dSr/)r3)r1r-s  r2r/z DeltaChainIterator.set_pack_dataÐs€Ø”_ˆŒ
ˆ
ˆ
r4c#óØK—|jD]"\}}| ||d¦«Ed{V—†Œ#| ¦«Ed{V—†|jrJt	|j¦«¦«‚dSr/)r*Ú
_follow_chainÚ_walk_ref_chainsr(Úrepr)r1rxr—s   r2Ú_walk_all_chainsz#DeltaChainIterator._walk_all_chainsÓs—èè€Ø $¤ð	Bð	BÑˆFHØ×)Ò)¨&°(¸DÑAÔAÐAÐAÐAÐAÐAÐAÐAÐAØ×(Ò(Ñ*Ô*Ð*Ð*Ð*Ð*Ð*Ð*Ð*ØÔ$Ð=Ð=¥d¨4Ô+<Ñ&=Ô&=Ñ=Ô=Ð$Ð=Ð=r4cóP—|jrtd„|jD¦«¦«‚dS)Ncó,—g|]}t|¦«‘ŒSr9)r()r›rœs  r2rz9DeltaChainIterator._ensure_no_pending.<locals>.<listcomp>Ûs€Ð#MÐ#MÐ#M°a¥J¨q¡M¤MÐ#MÐ#MÐ#Mr4)r)r-rbs r2Ú_ensure_no_pendingz%DeltaChainIterator._ensure_no_pendingÙs:€ØÔð	OÝ"Ð#MÐ#M¸4Ô;LÐ#MÑ#MÔ#MÑNÔNÐNð	Oð	Or4c#óØK—|js| ¦«dSt|j ¦«¦«D]\}}||jvrŒ	| |¦«\}}n#t
$rYŒ5wxYw|j |¦«|j |¦«|D]}| 	|||¦«Ed{V—†Œ Œ| ¦«dSr/)
r&rDrr)ÚitemsrÞr+rnr5r>)r1Úbase_shaÚpendingr—rŠÚ
new_offsets      r2r?z#DeltaChainIterator._walk_ref_chainsÝs4èè€ØÔ$ð	Ø×#Ò#Ñ%Ô%Ð%ØˆFå!'¨Ô(9×(?Ò(?Ñ(AÔ(AÑ!BÔ!Bð
	Lð
	LÑˆHgؘtÔ0Ð0Ð0Øð
Ø#'×#8Ò#8¸Ñ#BÔ#BÑ ˜&˜&øÝð
ð
ð
ðð	
øøøð

ŒN×!Ò! (Ñ+Ô+Ð+ØÔ×!Ò! (Ñ+Ô+Ð+Ø%ð
Lð
L
Ø×-Ò-¨j¸(ÀFÑKÔKÐKÐKÐKÐKÐKÐKÐKÐKð
Lð	
×ÒÑ!Ô!Ð!Ð!Ð!sÁA/Á/
A<Á;A<có—t‚r/)rT©r1r§s  r2Ú_resultzDeltaChainIterator._resultós€Ý!Ð!r4rxrzÚbase_chunkscó—|j |¦«t|jj|j|j¬¦«\}}||_|€|j|ksJ‚n1|jtvsJ‚||_	t||j¦«|_|S)N)rQr”)
r3r¶rœrgÚ
_include_compÚ_compute_crc32rxr|r…rzÚapply_deltarr{)r1rxrzrMr§rîs      r2Ú_resolve_objectz"DeltaChainIterator._resolve_objectösŸ€ð	
Œ
Š˜ÑÔÐÝ#ØŒJŒOØÔ+ØÔ-ð
ñ
ô
‰ˆ!ð
!ˆŒØÐØÔ)¨\Ò9Ð9Ð9Ð9Ð9àÔ)­[Ð8Ð8Ð8Ð8Ø$0ˆHÔ!Ý"-¨k¸8Ô;QÑ"RÔ"RˆHÔ؈r4c#ó¤‡K—|||fg}|rÄ| ¦«\}}}| |||¦«Š| ‰¦«V—t|j ‰jg¦«|j ‰ ¦«g¦«¦«}| ˆfd„|D¦«¦«|°ÂdSdS)Nc3ó6•K—|]}|‰j‰jfV—ŒdSr/)rzr{)r›rIr§s  €r2ú	<genexpr>z3DeltaChainIterator._follow_chain.<locals>.<genexpr>sDøèè€ððàð˜XÔ2°HÔ4GÐHððððððr4)	r5rRrLr
r(rxr)rr®)r1rxrzrMrÜÚ	unblockedr§s      @r2r>z DeltaChainIterator._follow_chainsøèè€ð˜ {Ð3Ð4ˆØð	Ø26·(²(±*´*Ñ/ˆV\ ;Ø×+Ò+¨F°LÀ+ÑNÔNˆHØ—,’,˜xÑ(Ô(Ð(Ð(Ð(åØÔ!×%Ò% h¤o°rÑ:Ô:ØÔ!×%Ò% h§l¢l¡n¤n°bÑ9Ô9ñôˆIð
KŠKððððà"+ðñôñ
ô
ð
ðð	ð	ð	ð	ð	r4có*—| ¦«Sr/)rArbs r2razDeltaChainIterator.__iter__s€Ø×$Ò$Ñ&Ô&Ð&r4có—|jSr/)r+rbs r2Úext_refszDeltaChainIterator.ext_refss
€ØŒ~Ðr4rvr/)r5r6r7r8rPrOr3r-rßrrrLrMr9rRrÑr/rArDr?r"rLrfrrRr>rrarYr9r4r2r$r$vsù€€€€€ððð(€NØ€Mà48ð)ð)ð)ð)ð)ð)ððð hðððñ„[ððð$Øð
#ð#ð#àð#ðuŒoð#ð
ð#ð#ð#ñ„[ð#ðJ
6˜~ð
6°$ð
6ð
6ð
6ð
6ð% xð%°Dð%ð%ð%ð%ð>ð>ð>ðOðOðOðOð"ð"ð"ð," ð"°1ð"ð"ð"ð"ðØðØ),ðØ;?À¼;ðà	ððððð$ Cð°sðÈÈeÌððððð$'˜( 1œ+ð'ð'ð'ð'ðððððr4r$có—eZdZdZd„ZdS)ÚUnpackedObjectIteratorz1Delta chain iterator that yield unpacked objects.có—|Sr/r9rKs  r2rLzUnpackedObjectIterator._result$s€Øˆr4N©r5r6r7r8rLr9r4r2r[r[!s)€€€€€Ø;Ð;ðððððr4r[có—eZdZdZdZd„ZdS)rz/Delta chain iterator that yields index entries.TcóD—| ¦«|j|jfSr/)rrxrhrKs  r2rLzPackIndexer._result-s€Ø|Š|‰~Œ~˜xœ°´Ð>Ð>r4N)r5r6r7r8rPrLr9r4r2rr(s.€€€€€Ø9Ð9à€Nð?ð?ð?ð?ð?r4rcó—eZdZdZd„ZdS)ÚPackInflaterz1Delta chain iterator that yields ShaFile objects.có*—| ¦«Sr/)rŠrKs  r2rLzPackInflater._result4s€Ø× Ò Ñ"Ô"Ð"r4Nr]r9r4r2rara1s)€€€€€Ø;Ð;ð#ð#ð#ð#ð#r4racó4—eZdZdZd	d„Zd
d„Zd„Zd„Zd„ZdS)Ú
SHA1ReaderúAWrapper for file-like object that remembers the SHA1 of its data.r=Ncó<—||_td¦«|_dS©Nr4)rÃr©r1rÃs  r2r3zSHA1Reader.__init__;s€ØˆŒÝ˜‘I”IˆŒ	ˆ	ˆ	r4cón—|j |¦«}|j |¦«|Sr/)rÃrgrr¹)r1rŸr¢s   r2rgzSHA1Reader.read?s0€ØŒv{Š{˜3ÑÔˆØŒ	×Ò˜ÑÔÐØˆr4cóܗ|j d¦«}||j ¦«kr4t	|j ¦«t
|¦«¦«‚dSr)rÃrgrrZr!rºr()r1rVs  r2Ú	check_shazSHA1Reader.check_shaDsZ€Ø”—’˜R‘”ˆØT”Y×%Ò%Ñ'Ô'Ò'Ð'Ý" 4¤9×#6Ò#6Ñ#8Ô#8½*ÀVÑ:LÔ:LÑMÔMÐMð(Ð'r4có4—|j ¦«Sr/)rÃrrbs r2rzSHA1Reader.closeIs€ØŒv|Š|‰~Œ~Ðr4có4—|j ¦«Sr/©rÃrµrbs r2rµzSHA1Reader.tellLó€ØŒv{Š{‰}Œ}Ðr4rvr/)	r5r6r7r8r3rgrkrrµr9r4r2rdrd8sr€€€€€ØKÐKððððððððð
NðNðNð
ðððððððr4rdcó8—eZdZdZd
d„Zd„Zd„Zd„Zd„Zd	„Z	dS)Ú
SHA1Writerrer=NcóJ—||_d|_td¦«|_dS)Nrr4)rÃrÛrrhs  r2r3zSHA1Writer.__init__Ss!€ØˆŒØˆŒÝ˜‘I”IˆŒ	ˆ	ˆ	r4có¨—|j |¦«|j |¦«|xjt|¦«z
c_dSr/)rr¹rÃrÃrÛrlr¡s  r2rÃzSHA1Writer.writeXsF€ØŒ	×Ò˜ÑÔÐØŒŠTÑÔÐØˆŒ•s˜4‘y”yÑ ˆŒˆˆr4cóЗ|j ¦«}t|¦«dksJ‚|j |¦«|xjt|¦«z
c_|Sr)rrZrlrÃrÃrÛrs  r2Ú	write_shazSHA1Writer.write_sha]sW€ØŒi×ÒÑ Ô ˆÝ3‰xŒx˜2Š~ˆ~ˆ~ˆ~ØŒŠSÑÔÐØˆŒ•s˜3‘x”xшŒØˆ
r4có`—| ¦«}|j ¦«|Sr/)rurÃrrs  r2rzSHA1Writer.closeds%€ØnŠnÑÔˆØŒŠ‰ŒˆØˆ
r4có—|jSr/)rÛrbs r2rxzSHA1Writer.offsetis
€ØŒ{Ðr4có4—|j ¦«Sr/rnrbs r2rµzSHA1Writer.telllror4rv)
r5r6r7r8r3rÃrurrxrµr9r4r2rqrqPsy€€€€€ØKÐKððððð
!ð!ð!ð
ðððððð
ðððððððr4rqcó°—g}|dz|dzz}|dz}|r$| |dz¦«|dz}|dz}|°$| |¦«|tkrK|dzg}|dz}|r(|dz}| dd|dzz¦«|dz}|°(| |¦«n%|tkrt|¦«dksJ‚||z
}t
|¦«S)	a
Create a pack object header for the given object info.

    Args:
      type_num: Numeric type of the object.
      delta_base: Delta base offset or ref, or None for whole objects.
      size: Uncompressed object size.
    Returns: A header for a packed object.
    rÕrrkrr*rrrb)rnr’Úinsertr®r“rlr­)r—r}rÐr‡Úcrps      r2Úpack_object_headerr|ps(€ð€FØ	Q‰˜4 "™9Ñ%€A؈QJ€DØ
ð؏
Š
a˜$‘hÑÔÐØ4‰KˆØ‰
ˆððð‡M‚M!ÑÔÐØ•9ÒÐØ˜DÑ Ð!ˆØqш
Øð	Ø˜!‰OˆJØJŠJq˜$ *¨tÑ"3Ñ4Ñ5Ô5Ð5Ø˜1ÑˆJðð	ð	
Š
cÑÔÐÐØ	•YÒ	Ð	ݐ:‰Œ "Ò$Ð$Ð$Ð$ؐ*шݐVÑÔÐr4rjc#ójK—|tvr|\}}nd}t|t¦«r|g}tt||t	tt|¦«¦«¦«¦«V—tj|¬¦«}|D]}| 	|¦«V—Œ| 
¦«V—dS)z¿Generate chunks for a pack object.

    Args:
      type: Numeric type of the object
      object: Object to write
      compression_level: the zlib compression level
    Returns: Chunks
    N)Úlevel)r…rŒrLr|rƒr„rlr¬ÚcompressobjÚcompressÚflush)rÔÚobjectÚcompression_levelr}Ú
compressorr¢s      r2Úpack_object_chunksr…sÎèè€ð{ÐÐØ#ш
FFàˆ
ݐ&%Ñ Ô ðØˆÝ
Õ" 4¨µS½½SÀ&Ñ9IÔ9IÑ5JÔ5JÑKÔKÑ
LÔ
LÐLÐLÐLÝÔ!Ð(9Ð:Ñ:Ô:€JØð(ð(ˆØ×!Ò! $Ñ'Ô'Ð'Ð'Ð'Ð'Ø
×
Ò
Ñ
Ô
ÐÐÐÐÐr4có¨—d}t|||¬¦«D]9}||¦«|| |¦«tj||¦«}Œ:|dzS)aWrite pack object to a file.

    Args:
      write: Write function to use
      type: Numeric type of the object
      object: Object to write
      compression_level: the zlib compression level
    Returns: Tuple with offset at which the object was written, and crc32
    r©rƒNrª)r…r¹rmrh)rÃrÔr‚rrƒrhrÕs       r2Úwrite_pack_objectrˆ¥sj€ð
€EÝ# D¨&ÐDUÐVÑVÔVð-ð-ˆØ
ˆˆe‰Œˆ؈?ØJŠJuÑÔÐÝ”˜u eÑ,Ô,ˆˆØ:ÑÐr4)ÚdeltifyÚdelta_window_sizerƒrBr‰rŠrƒcóf—t|dzd¦«5}t|j||||¬¦«\}}ddd¦«n#1swxYwYtd„| ¦«D¦«¦«}t|dzd¦«5}|t|||¦«fcddd¦«S#1swxYwYdS)ažWrite a new pack data file.

    Args:
      filename: Path to the new pack file (without .pack extension)
      container: PackedObjectContainer
      entries: Sequence of (object_id, path) tuples to write
      delta_window_size: Delta window size
      deltify: Whether to deltify pack objects
      compression_level: the zlib compression level
    Returns: Tuple with checksum of pack file and index file
    ú.packr©rŠr‰rƒNcó6—g|]\}}||d|df‘ŒS)rrr9)r›ÚkÚvs   r2rzwrite_pack.<locals>.<listcomp>Ós*€ÐDÐDÐD©&¨1¨aq˜!˜Aœ$  !¤oÐDÐDÐDr4ú.idx)r"Úwrite_pack_objectsrÃrrFr)r6rBr‰rŠrƒrÃrÚdata_sums        r2Ú
write_packr”¸sY€õ&
˜GÑ# TÑ	*Ô	*ð
¨aÝ.Ø
ŒGØØ/ØØ/ð
ñ
ô
шð
ð
ð
ñ
ô
ð
ð
ð
ð
ð
ð
øøøð
ð
ð
ð
õÐDÐD°G·M²M±O´OÐDÑDÔDÑEÔE€GÝ	˜FÑ" DÑ	)Ô	)ðC¨QØÕ,¨Q°¸ÑBÔBÐBðCðCðCðCñCôCðCðCðCðCðCðCøøøðCðCðCðCðCðCs!”=½AÁAÂB&Â&B*Â-B*c#ónK—dV—tjdd¦«V—tjd|¦«V—dS)zYield chunks for a pack header.r…r×rÙN)rÛr()rˆs r2Úpack_header_chunksr–ØsEèè€à
€M€M€MÝ
Œ+e˜QÑ
Ô
ÐÐÐÝ
Œ+e˜[Ñ
)Ô
)Ð)Ð)Ð)Ð)Ð)r4có¦—t|d¦«r#|j}tjdtd¬¦«t|¦«D]
}||¦«ŒdS)z4Write a pack header for the given number of objects.rÃz?write_pack_header() now takes a write rather than file argumentrÙrûN)ÚhasattrrÃrýrþrÿr–)rÃrˆrÕs   r2Úwrite_pack_headerr™ßso€åˆugÑÔð
Ø”ˆÝŒ
ØMÝØð	
ñ	
ô	
ð	
õ
$ KÑ0Ô0ððˆØ
ˆˆe‰Œˆˆððr4©Úother_havesrCÚ	containerÚ
object_idsr›c#ó°K—|€t¦«}d}t| |dd¬¦«¦«D]u\}}|9|dzdkr0|d|t|¦«fz d¦«¦«|jtkr%t|j¦«}||vs||vr	|V—|dz
}Œv|$|d|fz d¦«¦«dSdS)	NrT)rWr[éèz$checking for reusable deltas: %d/%d
úutf-8rzfound %d deltas to reuse
)	r4r‘r]rlr»r|r“r(r})rœrr›rCÚreusedrår§Úhexshas        r2Úfind_reusable_deltasr£ìs(èè€ðÐÝ‘e”eˆØ
€FÝ Ø×&Ò&Ø d¸dð	'ñ	
ô	
ñôðð‰ˆˆ8ð
РA¨¡H°¢M MØˆHØ8¸A½sÀ:¹¼Ð;OÑO×WÒWØñôñ
ô
ð
ð
Ô!¥YÒ.Ð.Ý Ô 3Ñ4Ô4ˆFؘÐ#Ð# v°Ð'<Ð'<ؐØ˜!‘øØÐ؈Ð.°&°Ñ:×BÒBÀ7ÑKÔKÑLÔLÐLÐLÐLðÐr4©Úwindow_sizerCr¥c#óp‡K—ˆfd„}tt|¦«¦«||¬¦«Ed{V—†dS)aGenerate deltas for pack objects.

    Args:
      objects: An iterable of (object, path) tuples to deltify.
      window_size: Window size; None for default
    Returns: Iterator over type_num, object id, delta_base, content
        delta_base is None for full text entries
    c3óš•K—‰D]D}t|t¦«r||jdffV—Œ%|d|dj|dffV—ŒEdS)Nrr)rŒr%r—)ÚerBs €r2Úobjects_with_hintsz0deltify_pack_objects.<locals>.objects_with_hintsstøèè€Øð	4ð	4ˆAݘ!WÑ%Ô%ð
4ؘ1œ: tÐ,Ð-Ð-Ð-Ð-Ð-à˜”t˜a œdœm¨Q¨q¬TÐ2Ð3Ð3Ð3Ð3Ð3ð		4ð	4r4r¤N)Údeltas_from_sorted_objectsÚsort_objects_for_delta)rBr¥rCr©s`   r2Údeltify_pack_objectsr¬
s|øèè€ð4ð4ð4ð4ð4õ*ÝÐ1Ð1Ñ3Ô3Ñ4Ô4ØØðñôðððððððððr4cóú—g}|D]W}t|t¦«r|\}}|€d}d}n|\}}n|}| ||| ¦«|f¦«ŒX| ¦«d„|D¦«S)Nc3ó&K—|]}|dV—Œ
dS)r†Nr9)r›Úxs  r2rUz)sort_objects_for_delta.<locals>.<genexpr>9s&èè€Ð Ð QˆAˆaŒDÐ Ð Ð Ð Ð Ð r4)rŒÚtuplernÚ
raw_lengthÚsort)rBÚmagicÚentryr<Úhintr—rÂs       r2r«r«'s£€ð
€EØð
?ð
?ˆÝeUÑ#Ô#ð	؉IˆCØˆ|ؐؐà#'Ñ ˜4˜4àˆCØ
Šh  s§~¢~Ñ'7Ô'7Ð&7¸Ð=Ñ>Ô>Ð>Ð>ð
‡J‚JL„L€LØ Ð ˜%Ð Ñ Ô Ð r4c#óªK—|€t}t¦«}t|¦«D]¨\}}|+|dzdkr"|d|fz d¦«¦«| ¦«}|}tt
t|¦«¦«}d}	|D]~\}
}}||jkrŒd}
g}t||¦«D]1}|
t|¦«z
}
|
|krn<| 
|¦«Œ2|
}	|}tt
t|¦«¦«}Œt|j| ¦« 
¦«|	||¬¦«V—| | ¦« 
¦«|j|f¦«t|¦«|kr'| ¦«t|¦«|k°'ŒªdS)NrŸrzgenerating deltas: %d
r )rr}r€r)ÚDEFAULT_PACK_DELTA_WINDOW_SIZErr‘r»Ú
as_raw_chunksrƒr„rlr—Úcreate_deltarnrRrrZÚ
appendleftr5)rBr¥rCÚpossible_basesråÚor–ÚwinnerÚ
winner_lenÚwinner_baseÚbase_idÚ
base_type_numÚbaseÚ	delta_lenÚdeltarÕs                r2rªrª<sùèè€ðÐÝ4ˆå<A¹G¼G€Nݘ'Ñ"Ô"ð!ñ!‰ˆˆ1ØÐ A¨¡H°¢M MØˆHÐ/°1°$Ñ6×>Ò>¸wÑGÔGÑHÔHÐH؏oŠoÑԈ؈ݝS &Ñ)Ô)Ñ*Ô*ˆ
؈Ø,:ð
	3ð
	3Ñ(ˆG] DØ ¤
Ò*Ð*ØØˆI؈EÝ% d¨CÑ0Ô0ð
3ð
3ØS ™ZœZÑ'	Ø 
Ò*Ð*ؐEØ—’˜UÑ#Ô#Ð#Ð#à%ØÝ ¥¥S¨&Ñ!1Ô!1Ñ2Ô2
øÝØ
ŒJØ—’‘”—’Ñ Ô Ø"Ø!Ø ð
ñ
ô
ð	
ð	
ð	
ð	×!Ò! 1§5¢5¡7¤7§>¢>Ñ#3Ô#3°Q´ZÀÐ"EÑFÔFÐFݐ.Ñ!Ô! KÒ/Ð/Ø×ÒÑ Ô Ð õ.Ñ!Ô! KÒ/Ð/ùð;!ð!r4)r‰rŠÚ	ofs_deltarCrÅc󒇗t‰¦«}|€d}|r!|tt‰¦«||¬¦«fSˆfd„}||¦«fS)ú”Create pack data from objects.

    Args:
      objects: Pack objects
    Returns: Tuples with (type_num, hexdigest, delta base, object chunks)
    NFr¤c3ó’•K—‰D]@}t|t¦«rt|d¦«V—Œ/t|¦«V—ŒAdSr¤)rŒr°Úfull_unpacked_object)r¼rBs €r2Úiter_without_pathz/pack_objects_to_data.<locals>.iter_without_path„sdøèè€Øð
2ð
2Ý˜a¥Ñ'Ô'ð2Ý.¨q°¬tÑ4Ô4Ð4Ð4Ð4Ð4å.¨qÑ1Ô1Ð1Ð1Ð1Ð1ð	
2ð
2r4)rlr¬r¼)rBr‰rŠrÅrCÚcountrÊs`      r2Úpack_objects_to_datarÌes‚ø€õ
‰LŒL€EØ€ðˆØð,àÝ ݐW‘
”
Ø-Ø!ð
ñ
ô
ð
ð	
ð	2ð	2ð	2ð	2ð	2ðÐ(Ð(Ñ*Ô*Ð+Ð+r4Úreuse_deltasc#ó¼‡K—t|¦«Š|rIt|t‰¦«||¬¦«D](}‰t| ¦«¦«=|V—Œ)|€d}|r\| ‰ ¦«d¬¦«}	ttˆfd„|	D¦«¦«||¬¦«Ed{V—†dS‰D]}
t||
¦«V—ŒdS)rÇršNFrVc3ó6•K—|]}|‰|jfV—ŒdSr/©Úid)r›r¼rÜs  €r2rUz,generate_unpacked_objects.<locals>.<genexpr>®s-øèè€Ð"MÐ"M°q A t¨A¬D¤z ?Ð"MÐ"MÐ"MÐ"MÐ"MÐ"Mr4r¤)
Údictr£r4r(rrYÚkeysrªr«rÉ)rœrrŠr‰rÍrÅr›rCrÜÚobjects_to_deltaÚoidrÜs           @r2Úgenerate_unpacked_objectsrÖŽsJøèè€õ 
ÑÔ€DØðÝ*Ø•s˜4‘y”y¨kÀHð
ñ
ô
ð	ð	ˆFð•Z §
¢
¡¤Ñ-Ô-Ð.؈LˆLˆLˆLØ€ðˆØð7Ø$×7Ò7ØIŠI‰KŒK uð8ñ
ô
Ðõ.Ý"Ð"MÐ"MÐ"MÐ"MÐ<LÐ"MÑ"MÔ"MÑMÔMØ)Øð
ñ
ô
ð	
ð	
ð	
ð	
ð	
ð	
ð	
ð	
ð	
ðð	7ð	7ˆCÝ& y°¤~Ñ6Ô6Ð6Ð6Ð6Ð6ð	7ð	7r4r¼có —t|jdd| ¦«| ¦« ¦«¬¦«S)N)r}rhrr)rRr—r¸rrZ)r¼s r2rÉrÉ·sF€ÝØ	Œ
ØØØ—o’oÑ'Ô'Ø
EŠE‰GŒGNŠNÑÔðñôðr4cóp—t|¦«}t||||||¬¦«}	t||	||¬¦«S)aäWrite a new pack data file.

    Args:
      write: write function to use
      container: PackedObjectContainer
      entries: Sequence of (object_id, path) tuples to write
      delta_window_size: Sliding window size for searching for deltas;
                         Set to None for default window size.
      deltify: Whether to deltify objects
      compression_level: the zlib compression level to use
    Returns: Dict mapping id -> (offset, crc32 checksum), pack checksum
    )rŠr‰rÍr›©Únum_recordsrƒ)rlrÖÚwrite_pack_data)
rÃrœrrŠr‰rÍrƒr›Úpack_contents_countÚ
pack_contentss
          r2Úwrite_pack_from_containerrÞÁs[€õ,˜j™/œ/ÐÝ-ØØØ+ØØ!Øð
ñô€MõØ
ØØ'Ø+ð	ñôðr4rcóP—t||¬¦«\}}t||||¬¦«S)aºWrite a new pack data file.

    Args:
      write: write function to use
      objects: Sequence of (object, path) tuples to write
      delta_window_size: Sliding window size for searching for deltas;
                         Set to None for default window size.
      deltify: Whether to deltify objects
      compression_level: the zlib compression level to use
    Returns: Dict mapping id -> (offset, crc32 checksum), pack checksum
    )r‰rÙ)rÌrÛ)rÃrBrŠr‰rƒrÜrÝs       r2r’r’és?€õ&*>¸gÈwÐ)WÑ)WÔ)WÑ&ИåØ
ØØ'Ø+ð	ñôðr4c
ól—eZdZ					d
	dd„Zd„Zd„Zdddddœd	eed
ede	dee
fd„ZdS)ÚPackChunkGeneratorNrjTr=cóz—td¦«|_i|_| |||||¬¦«|_dS)Nr4)rÚÚrecordsrCrƒÚreuse_compressed)rÚcsrÚ_pack_data_chunksÚ_it)r1rÚrãrCrƒräs      r2r3zPackChunkGenerator.__init__sG€õs‘)”)ˆŒØACˆŒØ×)Ò)Ø#ØØØ/Ø-ð*ñ
ô
ˆŒˆˆr4có4—|j ¦«Sr/)rårZrbs r2Ú
sha1digestzPackChunkGenerator.sha1digests€ØŒw~Š~ÑÔÐr4có—|jSr/)rçrbs r2razPackChunkGenerator.__iter__s	€ØŒxˆr4)rÚrCrƒrärãrƒräc#óÞK—|€t|¦«}d}t|¦«D]2}|V—|j |¦«|t|¦«z
}Œ3d}t	|¦«D]M\}	}
|
j}|,|	dzdkr#|d|	|fz d¦«¦«|
jk	|j|
j\}}
t}||z
|
j
f}nH#t$r4t}t|
jt¦«sJ‚|
j|
j
f}YnwxYw|
j
}|
j
|r|
j}nt!|||¬¦«}d}d}|D]G}|V—t#j||¦«}|j |¦«|t|¦«z
}ŒH|dz
}||f|j|
 ¦«<||z
}ŒO||krt)d||fz¦«‚|j ¦«V—dS)	arIterate pack data file chunks.

        Args:
          records: Iterator over UnpackedObject
          num_records: Number of records (defaults to len(records) if not specified)
          progress: Function to report progress to
          compression_level: the zlib compression level
        Returns: Dict mapping id -> (offset, crc32 checksum), pack checksum
        NrrŸzwriting pack data: %d/%d
r¸r‡rz(actual records written differs: %d != %d)rlr–rår¹r‘r|r»r}rr’rrÞr“rŒrLr~r…rmrhrrxrZ)r1rãrÚrCrƒrärxrÕÚactual_num_recordsrår§r—r;Ú
base_crc32r–rŠrhÚobject_sizes                  r2ræz$PackChunkGenerator._pack_data_chunksswèè€ð&Ðݘg™,œ,ˆK؈Ý'¨Ñ4Ô4ð	!ð	!ˆE؈KˆKˆKØŒGNŠN˜5Ñ!Ô!Ð!Ø•c˜%‘j”jÑ ˆFˆFØÐÝ$ WÑ-Ô-ð"	"ñ"	"‰KˆAˆxØÔ-ˆHØÐ#¨¨D©°Aª
¨
ؐØ1°Q¸Ð4DÑD×LÒLÈWÑUÔUñôððÔ"Ð.ðIØ.2¬l¸8Ô;NÔ.OÑ+K õ )HØ! KÑ/°Ô1GÐHCCøõ
 ðHðHðHÝ(HÝ% hÔ&9½5ÑAÔAÐAÐAÐAØ#Ô.°Ô0FÐGCCCðHøøøðÔ,ØÔ#Ð/Ð4DÐ/Ø!Ô-å+ؘcÐ5FðñôðˆE؈KØð
*ð
*ØÝ œ u¨eÑ4Ô4Ø”—’˜uÑ%Ô%Ð%؝s 5™zœzÑ)Ø !Ñ#ÐØ,2°E¨?ˆDŒL˜Ÿš™œÑ(ØkÑ!ˆF‰FØ Ò,Ð,Ý Ø:Ø% {Ð3ñ4ñôð
ð
ŒgnŠnÑÔÐÐÐÐÐsÂ,CÃ;DÄD)NNNrjTrv)r5r6r7r3rérarrRrfrMrLrær9r4r2rárásȀ€€€€ðØØØØð

ð
ð
ð
ð
ð
ð$ ð ð ððððØØ!#Ø!%ðDðDðDà˜.Ô)ðDðð
DððDð
%ŒðDðDðDðDðDðDr4rá)rÚrCrƒrãcó~—t||||¬¦«}|D]
}||¦«Œ|j| ¦«fS)aƒWrite a new pack data file.

    Args:
      write: Write function to use
      num_records: Number of records (defaults to len(records) if None)
      records: Iterator over type_num, object_id, delta_base, raw
      progress: Function to report progress to
      compression_level: the zlib compression level
    Returns: Dict mapping id -> (offset, crc32 checksum), pack checksum
    )rÚrãrCrƒ)rárré)rÃrãrÚrCrƒÚchunk_generatorrÕs       r2rÛrÛfs^€õ$)ØØØØ+ð	ñô€Oð!ððˆØ
ˆˆe‰ŒˆˆØÔ" O×$>Ò$>Ñ$@Ô$@Ð@Ð@r4cóX—t|¦«}td„¦«}|D]+\}}}|t|dd…¦«xxdz
cc<Œ,td¦«D]I}| tjd||¦«¦«||dzxx||z
cc<ŒJ|D]D\}}}|dkstd¦«‚| tjd||¦«¦«ŒEt|¦«d	ksJ‚| |¦«| 	¦«S)
aWrite a new pack index file.

    Args:
      f: A file-like object to write to
      entries: List of tuples with object name (sha), offset_in_pack,
        and crc32_checksum.
      pack_checksum: Checksum of the pack file.
    Returns: The SHA of the written index file
    có—dSr¤r9r9r4r2ú<lambda>z%write_pack_index_v1.<locals>.<lambda>Žs€¨€r4NrrMrNrªz)pack format 1 only supports offsets < 2Gbrlrb)
rqrrorIrÃrÛr(Ú	TypeErrorrlru)rÃrrÚ
fan_out_tabler½rxÚentry_checksumrås        r2rrƒsM€õ	1‰
Œ
€AÝ 	 	Ñ*Ô*€MØ(/ð*ð*Ñ$ˆˆfnØ•c˜$˜r ˜rœ(‘m”mÐ$Ð$Ô$¨Ñ)Ð$Ð$Ñ$Ð$å
5‰\Œ\ð1ð1ˆØ	Š•”˜D -°Ô"2Ñ3Ô3Ñ4Ô4Ð4ؐa˜!‘eÐÐÔ 
¨aÔ 0Ñ0ÐÐÑÐØ(/ð4ð4Ñ$ˆˆfnؘ*Ò$Ð$ÝÐGÑHÔHÐHØ	Š•”˜G V¨TÑ2Ô2Ñ3Ô3Ð3Ð3݈}ÑÔ Ò#Ð#Ð#Ð#؇G‚GˆMÑÔÐØ;Š;‰=Œ=Ðr4cóƗt¦«}|dz}|dz}|r$| |dz¦«|dz}|dz}|°$| |¦«t|¦«S)Nrr*rk)r­rnrL)rÐrpr{s   r2Ú_delta_encode_sizerøžst€Ý
‰+Œ+€CØˆt‰€A؈QJ€DØ
ð؏
Š
1t‘8ÑÔÐØ4‰KˆØ‰
ˆððð‡J‚JˆqM„M€Mݐ‰:Œ:Ðr4iÿÿcó~—tdg¦«}td¦«D]>}|d|dzzzr1| ||dzz	dz¦«|dxxd|zzcc<Œ?td¦«D]A}|d|dzzzr4| ||dzz	dz¦«|dxxdd|zzzcc<ŒBt|¦«S)NrkrÕéÿrØrrrÙ)r­rIrnrL)rârÛÚscratchrås    r2Ú_encode_copy_operationrü°sé€Ý˜˜ÑÔ€GÝ
1‰XŒXð!ð!ˆØ4˜1˜q™5‘=Ñ ð	!ØNŠN˜E Q¨¡U™N¨dÑ2Ñ3Ô3Ð3ØAˆJˆJŒJ˜!˜q™&Ñ ˆJˆJ‰JøÝ
1‰XŒXð'ð'ˆØD˜A ™E‘MÑ!ð	'ØNŠN˜F a¨!¡e™O¨tÑ3Ñ4Ô4Ð4ØAˆJˆJŒJ˜!  A¡™,Ñ&ˆJˆJ‰JøÝ‰>Œ>Ðr4c#ó‚K—t|t¦«rd |¦«}t|t¦«rd |¦«}t|t¦«sJ‚t|t¦«sJ‚t	t|¦«¦«V—t	t|¦«¦«V—t
d||¬¦«}| ¦«D]×\}}}}}|dkrD|}||z
}	|	dkr7t|	t¦«}
t||
¦«V—||
z
}|	|
z}	|	dk°7|dks|dkry||z
}|}|dkr>tdg¦«V—t|¦«||dz…V—|dz}|dz
}|dk°>t|g¦«V—t|¦«|||z…V—ŒØdS)	z“Use python difflib to work out how to transform base_buf to target_buf.

    Args:
      base_buf: Base buffer
      target_buf: Target buffer
    r4N)ÚisjunkÚarqÚequalrÚreplacerzr)rŒr'r rLrørlr	Úget_opcodesrØÚ
_MAX_COPY_LENrüÚ
memoryview)
Úbase_bufÚ
target_bufÚseqÚopcodeÚi1Úi2Új1Új2Ú
copy_startÚcopy_lenÚto_copyrœr¼s
             r2r¹r¹½sèè€õ(DÑ!Ô!ð&Ø—8’8˜HÑ%Ô%ˆÝ*dÑ#Ô#ð*Ø—X’X˜jÑ)Ô)ˆ
ݐh¥Ñ&Ô&Ð&Ð&Ð&ݐj¥%Ñ(Ô(Ð(Ð(Ð(å
S ™]œ]Ñ
+Ô
+Ð+Ð+Ð+Ý
S ™_œ_Ñ
-Ô
-Ð-Ð-Ð-å
 ¨°ZÐ
@Ñ
@Ô
@€CØ"%§/¢/Ñ"3Ô"3ð4ð4шB˜˜BðWÒÐðˆJؘB‘wˆHؘQ’,,ݘh­
Ñ6Ô6Ý,¨Z¸ÑAÔAÐAÐAÐAؘgÑ%
ؘGÑ#ð	˜Q’,,ð
YÒР&¨HÒ"4Ð"4ðR‘ˆA؈Aؐc’''ݘS˜E‘l”lÐ"Ð"Ð"Ý  Ñ,Ô,¨Q°°S±¨[Ô9Ð9Ð9Ð9ؐS‘ØS‘ð	c’''õ
˜˜‘*”*ÐÐÐݘZÑ(Ô(¨¨Q°©U¨Ô3Ð3Ð3Ð3øð34ð4r4cót—t|t¦«sd |¦«}t|t¦«sd |¦«}g}d}t|¦«}d„}|||¦«\}}|||¦«\}}|t|¦«ksJd|t|¦«fz¦«‚||kr7t	|||dz…¦«}|dz
}|dzrÑd}	td¦«D]4}
|d|
zzr*t	|||dz…¦«}|dz
}|	||
dzzz}	Œ5d}td	¦«D]7}
|dd|
zzzr*t	|||dz…¦«}|dz
}|||
dzzz}Œ8|dkrd
}|	|z|ks|	|z|ks||krnc| ||	|	|z…¦«n;|dkr&| ||||z…¦«||z
}ntd¦«‚||k°7||krtd||d
…z¦«‚|t|¦«krtd¦«‚|S)z‚Based on the similar function in git's patch-delta.c.

    Args:
      src_buf: Source buffer
      delta: Delta instructions
    r4rcó„—d}d}|r7t|||dz…¦«}|dz
}||dz|zz}|dz
}|dzsn|°7||fS)Nrriÿÿÿr*rk)ro)rÄrrÐråÚcmds     r2Úget_delta_header_sizez*apply_delta.<locals>.get_delta_header_sizeúsy€ØˆØ
ˆØð	ݐe˜E E¨A¡IÐ-Ô.Ñ/Ô/ˆCØQ‰JˆEØS˜5‘[ QÑ&Ñ&ˆDØ
‰FˆAؘ‘:ð
Øð
ð	ðUˆ{Ðr4z%d vs %drrkrÕrØr†rÖzInvalid opcode 0zdelta not empty: %rNzdest size incorrect)	rŒrLr rlrorIrnr rŒ)
Úsrc_bufrÄÚoutrÚdelta_lengthrÚsrc_sizeÚ	dest_sizerÚcp_offrår¯Úcp_sizes
             r2rQrQësÍ€õguÑ%Ô%ð$Ø—(’(˜7Ñ#Ô#ˆÝeUÑ#Ô#ð Ø—’˜‘”ˆØ
€CØ
€Eݐu‘:”:€Lð
ð
ð
ð,Ð+¨E°5Ñ9Ô9O€HˆeØ,Ð,¨U°EÑ:Ô:Ñ€IˆuØ•s˜7‘|”|Ò#Ð#Ð# Z°8½SÀ¹\¼\Ð2JÑ%JÑ#Ô#Ð#Ø
,Ò
Ñ
ݐ%˜ ¨¡	Ð)Ô*Ñ+Ô+ˆØ
‰
ˆØ‰:ð	6؈Fݘ1‘X”Xð
+ð
+Ø˜!˜q™&‘>ð+ݘE %¨%°!©)Ð"3Ô4Ñ5Ô5AؘQ‘JEؘa A¨¡E™lÑ*FøØˆGå˜1‘X”Xð
,ð
,Ø˜!  A¡™,Ñ'ð,ݘE %¨%°!©)Ð"3Ô4Ñ5Ô5AؘQ‘JEؘq Q¨¡U™|Ñ+GøØ˜!Š|ˆ|Ø!à˜Ñ  7Ò*Ð*ؘGÑ# hÒ.Ð.ؘYÒ&Ð&àØJŠJw˜v¨°Ñ(8Ð8Ô9Ñ:Ô:Ð:Ð:Ø
AŠXˆXØJŠJu˜U U¨S¡[Ð0Ô1Ñ2Ô2Ð2ØS‰LˆEˆEå!Ð"4Ñ5Ô5Ð5ð=,Ò
Ñ
ð@
ÒÐÝÐ3°e¸E¸F¸F´mÑCÑDÔDÐDà•M #Ñ&Ô&Ò&Ð&ÝÐ3Ñ4Ô4Ð4à€Jr4rrc
óJ—t|¦«}| d¦«| tjdd¦«¦«t	d„¦«}|D]+\}}}|t|dd…¦«xxdz
cc<Œ,g}t
d¦«D]I}| tjd||¦«¦«||dzxx||z
cc<ŒJ|D]\}}}| |¦«Œ|D].\}}}| tjd|¦«¦«Œ/|D]‚\}}}|d	kr)| tjd|¦«¦«Œ5| tjdd	t|¦«z¦«¦«| |¦«Œƒ|D]*}| tjd
|¦«¦«Œ+t|¦«dksJ‚| |¦«| 	¦«S)aWrite a new pack index file.

    Args:
      f: File-like object to write to
      entries: List of tuples with object name (sha), offset_in_pack, and
        crc32_checksum.
      pack_checksum: Checksum of the pack file.
    Returns: The SHA of the index file written
    rÖrNrÙcó—dSr¤r9r9r4r2róz%write_pack_index_v2.<locals>.<lambda>A	s€¸€r4NrrMr×rs>Qrb)
rqrÃrÛr(rrorIrlrnru)	rÃrrrõr½rxröÚ
largetablerås	         r2rr2	s=€õ	1‰
Œ
€A؇G‚GˆJÑÔÐØ‡G‚GFŒK˜˜aÑ Ô Ñ!Ô!Ð!Ý$/°	°	Ñ$:Ô$:€MØ(/ð*ð*Ñ$ˆˆfnØ•c˜$˜r ˜rœ(‘m”mÐ$Ð$Ô$¨Ñ)Ð$Ð$Ñ$Ð$à€JÝ
5‰\Œ\ð1ð1ˆØ	Š•”˜E =°Ô#3Ñ4Ô4Ñ5Ô5Ð5ؐa˜!‘eÐÐÔ 
¨aÔ 0Ñ0ÐÐÑÐØ(/ððÑ$ˆˆfnØ	Š‰
Œ
ˆ
ˆ
Ø(/ð4ð4Ñ$ˆˆfnØ	Š•”˜E >Ñ2Ô2Ñ3Ô3Ð3Ð3Ø(/ð&ð&Ñ$ˆˆfnؐEŠ>ˆ>Ø
GŠG•F”K  vÑ.Ô.Ñ/Ô/Ð/Ð/à
GŠG•F”K  u­s°:©¬Ñ'>Ñ?Ô?Ñ@Ô@Ð@Ø×Ò˜fÑ%Ô%Ð%Ð%Øð,ð,ˆØ	Š•”˜E 6Ñ*Ô*Ñ+Ô+Ð+Ð+݈}ÑÔ Ò#Ð#Ð#Ð#؇G‚GˆMÑÔÐØ;Š;‰=Œ=Ðr4có6—eZdZUdZeegefed<eegefed<eeed<eeed<	d6dee	ddfd	„Z
ed
„¦«Zed„¦«Z
d„Zedefd
„¦«Zedefd„¦«Zd„Zd„Zd„Zd„Zdefd„Zdefd„Zd„Zd7d„Zd7d„Zdefd„Zd„Zdede fd„Z!dede"eeffd„Z#dede$fd„Z%de&e$fd„Z'dd œd!e(e)d"e de&e$fd#„Z*dddd$œd!e(e)d%e d"e d&e de&e+f
d'„Z,d8d(„Z-d6d)eedefd*„Z.d+ede"eeee/ffd,„Z0	d6d-ed.ede"ee(effd/„Z1	d6d0ee2de&e3fd1„Z4	d6d0ee2de&e3fd2„Z5dd3d4œd+ed%e d&e de+fd5„Z6dS)9r2zA Git pack object.Ú
_data_loadÚ	_idx_loadÚ_dataÚ_idxNrr=c󤇗|‰_d‰_d‰_‰jdz‰_‰jdz‰_ˆfd„‰_ˆfd„‰_|‰_dS)Nr‘rŒcó,•—t‰j¦«Sr/)rßÚ
_data_pathrbs€r2rózPack.__init__.<locals>.<lambda>n	sø€¥(¨4¬?Ñ";Ô";€r4có,•—t‰j¦«Sr/)rÄÚ	_idx_pathrbs€r2rózPack.__init__.<locals>.<lambda>o	sø€¥°´Ñ!@Ô!@€r4)Ú	_basenamer!r"r'r%rr r)r1rårs`  r2r3z
Pack.__init__f	sdø€ð"ˆŒØˆŒ
؈Œ	Øœ¨&Ñ0ˆŒØœ.¨7Ñ2ˆŒØ;Ð;Ð;Ð;ˆŒØ@Ð@Ð@Ð@ˆŒØ.ˆÔÐÐr4có8—|d¦«}||_||_|S)z]Create a new pack object from callables to load pack data and
        index objects.
        Ú)rr )r'Údata_fnÚidx_fnrps    r2Úfrom_lazy_objectszPack.from_lazy_objectsr	s$€ð
ˆc"‰gŒgˆØ ˆŒØˆŒ
؈
r4có|—|d¦«}||_d|_||_d|_| ¦«|S)z:Create a new pack object from pack data and index objects.r*N)r!rr"r Úcheck_length_and_checksum)r'r¢rcrps    r2Úfrom_objectszPack.from_objects|	sD€ðˆc"‰gŒgˆØˆŒ	؈ŒØˆŒØˆŒ
Ø×%Ò%Ñ'Ô'Ð'؈
r4có4—|j ¦«S)z2The SHA over the SHAs of the objects in this pack.)rrrbs r2r½z	Pack.name‡	s€àŒz×&Ò&Ñ(Ô(Ð(r4cóŠ—|j€6|jsJ‚| ¦«|_| ¦«|jS)z The pack data object being used.)r!rr/rbs r2r¢z	Pack.data‹	sD€ðŒ:ÐØ”?Ð"Ð"?ØŸšÑ*Ô*ˆDŒJØ×*Ò*Ñ,Ô,Ð,ØŒzÐr4cób—|j€"|jsJ‚| ¦«|_|jS)zLThe index being used.

        Note: This may be an in-memory index
        )r"r rbs r2rz
Pack.index”	s2€ðŒ9ÐØ”>Ð!Ð!>ØŸšÑ(Ô(ˆDŒIØŒyÐr4cóŠ—|j|j ¦«|j|j ¦«dSdSr/)r!rr"rbs r2rz
Pack.closeŸ	sF€ØŒ:Ð!ØŒJ×ÒÑÔÐØŒ9Ð ØŒIOŠOÑÔÐÐÐð!Ð r4có—|Sr/r9rbs r2rízPack.__enter__¥	rîr4có.—| ¦«dSr/rðrñs    r2rõz
Pack.__exit__¨	rör4có\—t|t|¦«¦«o|j|jkSr/)rŒrÔrr–s  r2r”zPack.__eq__«	s&€Ý˜$¥ U¡¤Ñ,Ô,ÐJ°´¸u¼{Ò1JÐJr4có*—t|j¦«S)zNumber of entries in this pack.)rlrrbs r2rezPack.__len__®	s€å4”:‰ŒÐr4có0—|jj›d|j›dS)Nú(ú))rŸr5r(rbs r2r£z
Pack.__repr__²	s €Ø”.Ô)Ð?Ð?¨D¬NÐ?Ð?Ð?Ð?r4có*—t|j¦«S)z7Iterate over all the sha1s of the objects in this pack.)r¼rrbs r2raz
Pack.__iter__µ	s€åD”JÑÔÐr4cóˆ—t|j¦«t|j¦«ks5Jdt|j¦«›dt|j¦«›d¦«‚|j ¦«}|j ¦«}||kr*tt
|¦«t
|¦«¦«‚dS)z@Sanity check the length and checksum of the pack index and data.zLength mismatch: z (index) != z (data)N)rlrr¢rùrSr!r()r1Úidx_stored_checksumÚdata_stored_checksums   r2r/zPack.check_length_and_checksum¹	sʀå4”:‰Œ¥#ØŒIñ#
ô#
ò
ð
ð
àSs 4¤:™œÐSÐS½CÀÄ	¹N¼NÐSÐSÐSñ
ô
ð
ð#œj×:Ò:Ñ<Ô<ÐØ#œy×<Ò<Ñ>Ô>ÐØÐ"6Ò6Ð6Ý"ÝÐ.Ñ/Ô/ÝÐ/Ñ0Ô0ñôð
ð7Ð6r4cóÀ—|j ¦«|j ¦«| ¦«D]}| ¦«ŒdS)z„Check the integrity of this pack.

        Raises:
          ChecksumMismatch: if a checksum for the index or data is wrong
        N)rrr¢Úiterobjectsr?s  r2rz
Pack.checkÆ	s^€ð	
Œ
×ÒÑÔÐØŒ	ŠÑÔÐØ×#Ò#Ñ%Ô%ð	ð	ˆCØIŠI‰KŒKˆKˆKð	ð	r4có4—|j ¦«Sr/)r¢rSrbs r2rSzPack.get_stored_checksumÒ	s€ØŒy×,Ò,Ñ.Ô.Ð.r4có>—d„| ¦«D¦«S)Ncó—g|]}|df‘ŒSr/r9)r›r¼s  r2rz$Pack.pack_tuples.<locals>.<listcomp>Ö	s€Ð6Ð6Ð6˜aD	Ð6Ð6Ð6r4)rArbs r2Úpack_tupleszPack.pack_tuplesÕ	s"€Ø6Ð6 4×#3Ò#3Ñ#5Ô#5Ð6Ñ6Ô6Ð6r4rcó^—	|j |¦«dS#t$rYdSwxYw)z3Check whether this pack contains a particular SHA1.TF)rrrÞrGs  r2rHzPack.__contains__Ø	sD€ð	ØŒJ×$Ò$ TÑ*Ô*Ð*ؐ4øÝð	ð	ð	ؐ55ð	øøøs‚ž
,«,cóҗ|j |¦«}|j |¦«\}}| |||¦«\}}|d |¦«fSrg)rrr¢rÚresolve_objectr )r1rrxÚobj_typer<r—rŠs       r2Úget_rawzPack.get_rawà	sc€Ø”×)Ò)¨$Ñ/Ô/ˆØœ	×/Ò/°Ñ7Ô7‰
ˆ#Ø×.Ò.¨v°xÀÑEÔEш&ؘŸš &Ñ)Ô)Ð)Ð)r4có`—| |¦«\}}tj|||¬¦«S)zRetrieve the specified SHA1.)r)rJr%Úfrom_raw_string)r1rrÔÚuncomps    r2rJzPack.__getitem__æ	s/€à—|’| DÑ)Ô)‰ˆˆfÝÔ& t¨V¸Ð>Ñ>Ô>Ð>r4cóh—tt |j|j¬¦«¦«S)z&Iterate over the objects in this pack.r)r¼rarr¢rrbs r2rAzPack.iterobjectsë	s/€åÝ×&Ò& t¤yÀ$ÔBVÐ&ÑWÔWñ
ô
ð	
r4FrVr0rWcób‡—ˆfd„t |‰||j¬¦«D¦«S)Nc3ó.•K—|]}|j‰v¯|V—ŒdSr/rÐ)r›Úuor0s  €r2rUz*Pack.iterobjects_subset.<locals>.<genexpr>ô	s;øèè€ð	
ð	
àðŒu˜ˆ}ˆ}ð
ðˆ}ˆ}ˆ}ð	
ð	
r4r1)rar9rrZs ` r2rYzPack.iterobjects_subsetñ	sRø€ð	
ð	
ð	
ð	
å"×2Ò2ØØØ+Ø $Ô 4ð	3ñôð	
ñ	
ô	
ð		
r4)rQrWr[rQr[c#ó¼K—tt¦«}i}t|¦«}| |¬¦«D]}| ¦«}	|	||j<t
|	¦«}
|
|vrš|jtkrqt|j
t¦«sJ‚|j|j
z
}	|||_
t|_n+#t$r|| |¦«YŒ±wxYw|V—| |
¦«| |jg¦«D]}t|_|	|_
|V—ŒŒ|rJ‚|s|rt#|¦«‚dSdS)NrP)rr'r4rrrxr(r|r’rŒr}rfr“rÞrnÚremover5r-)
r1r0rQrWr[Úofs_pendingÚofsrÜr§rr¢r;Úchilds
             r2r]zPack.iter_unpacked_subsetÿ	sèè€õ8CÅ4Ñ7HÔ7HˆØ "ˆÝ4‰yŒyˆØ×*Ò*¸Ð*ÑEÔEð	ñ	ˆHØ—,’,‘.”.ˆCØ#&ˆC”Ñ Ý ‘_”_ˆFؘˆ~ˆ~ØÔ)­YÒ6Ð6Ý% hÔ&9½3Ñ?Ô?Ð?Ð?Ð?Ø"*¤/°HÔ4GÑ"GKð;Ø.1°+Ô.>˜Ô+õ
2;˜Ô.Ð.øõ	$ð!ð!ð!Ø# KÔ0×7Ò7¸ÑAÔAÐAØ ˜ð!øøøð
Ø—’˜FÑ#Ô#Ð#Ø$Ÿš¨¬¸"Ñ=Ô=ð
ð
Ý&/Ô#Ø#&Ô ؐñ
ðÐЈØð	) ð	)Ý" 4Ñ(Ô(Ð(ð	)ð	)ð	)ð	)sÂ.
CÃ%C0Ã/C0c#óÐK—d„|j ¦«D¦«}|j |¬¦«D]$}||j\}}||_||_|V—Œ%dS)Ncó —i|]\}}}|||f“ŒSr9r9)r›rrUrhs    r2ú
<dictcomp>z&Pack.iter_unpacked.<locals>.<dictcomp>$
s1€ð
ð
ð
Ù"3 3¨¨UˆC#uð
ð
ð
r4rP)rrìr¢rrxryrh)r1rQÚofs_to_entriesr§rrhs      r2rzPack.iter_unpacked#
s‰èè€ð
ð
Ø7;´z×7MÒ7MÑ7OÔ7Oð
ñ
ô
ˆðœ	×/Ò/¸\Ð/ÑJÔJð	ð	ˆHØ)¨(¬/Ô:‰LˆS%؈HŒMØ"ˆHŒN؈NˆNˆNˆNð		ð	r4Úmsgcó—d|jz}t|d¦«5}|r*| |¦«| d¦«ddd¦«n#1swxYwY|S)a'Add a .keep file for the pack, preventing git from garbage collecting it.

        Args:
          msg: A message written inside the .keep file; can be used later
            to determine whether or not a .keep file is obsolete.
        Returns: The path of the .keep file, as a string.
        z%s.keepró
N)r(r"rÃ)r1r[Ú
keepfile_nameÚkeepfiles    r2Úkeepz	Pack.keep-
s¦€ð" D¤NÑ2ˆ
Ý
] DÑ
)Ô
)ð	&¨XØð
&Ø—’˜sÑ#Ô#Ð#Ø—’˜uÑ%Ô%Ð%ð	&ð	&ð	&ñ	&ô	&ð	&ð	&ð	&ð	&ð	&ð	&øøøð	&ð	&ð	&ð	&ðÐs›-AÁAÁArcó—	|j |¦«}n#t$rd}YnwxYw|r|j |¦«\}}n/|jr| |¦«\}}nt|¦«‚|||fS)z8Get the object for a ref SHA, only looking in this pack.N)rrrÞr¢rr)r1rrxrÔr<s     r2Úget_refzPack.get_ref<
s¢€ð	Ø”Z×-Ò-¨cÑ2Ô2ˆFˆFøÝð	ð	ð	؈FˆFˆFð	øøøàð	 Øœ	×/Ò/°Ñ7Ô7‰IˆD##Ø
Ô
!ð	 Ø×,Ò,¨SÑ1Ô1‰IˆD##å˜3‘-”-Ðؐt˜SÐ Ð s‚,«,rxrÔcóN—|}|}|}g}|tvrÖ|}	|€|j}|tkr?|\}
}||
z
}|j |¦«\}}t|t¦«sJ‚n`|tkrU|\}}t|t¦«rt|¦«dksJ‚||¦«\}}}t|t¦«sJ‚| 
|	||f¦«|tv°Ö|}
t|¦«D])\}	}}t|
|¦«}
|	||
f|jj
|	<Œ*||
fS)z|Resolve an object, possibly resolving deltas when necessary.

        Returns: Tuple with object type and contents.
        Nrb)r…rbr’r¢rrŒrfr“rLrlrnÚreversedrQrã)r1rxrÔr<rbr;Ú	base_typeÚbase_objÚdelta_stackÚprev_offsetÚdelta_offsetrÄrårŠÚ
delta_types               r2rHzPack.resolve_objectK
ss€ðˆØˆ	؈؈؝;Ð&Ð&Ø%ˆK؈؜,ØIÒ%Ð%Ø(0Ñ%˜uà)¨LÑ8Ø&*¤i×&=Ò&=¸kÑ&JÔ&JÑ#	˜8Ý! )­SÑ1Ô1Ð1Ð1Ð1Ð1؝iÒ'Ð'Ø$,Ñ!˜5Ý! (­EÑ2Ô2ÐJµs¸8±}´}ÈÒ7JÐ7JÐ7JÐJØ3:°7¸8Ñ3DÔ3DÑ0˜Y¨Ý! )­SÑ1Ô1Ð1Ð1Ð1Ø×Ò ¨Y¸Ð>Ñ?Ô?Ð?ð;Ð&Ð&ð&ˆÝ.6°{Ñ.CÔ.Cð	Ið	IÑ*ˆK˜ UÝ  ¨Ñ/Ô/ˆFðÐ&Ø7@À&Ð7H”	Ô'¨Ñ4øØ˜&Ð Ð r4rCcóD—|j ||j¬¦«S)rr)r¢rìr©r1rCs  r2rzPack.entriesw
s+€ðŒy×$Ò$بtÔ/Cð%ñ
ô
ð	
r4cóD—|j ||j¬¦«Sr
)r¢r%rrls  r2r%zPack.sorted_entries…
s+€ðŒy×'Ò'بtÔ/Cð(ñ
ô
ð	
r4T)rQr[có4—|j |¦«}|j ||¬¦«}|jt
krQ|rOt
|jt¦«sJ‚|j 	||jz
¦«|_t|_|S)z®Get the unpacked object for a sha.

        Args:
          sha: SHA of object to fetch
          include_comp: Whether to include compression data in UnpackedObject
        rP)rrr¢rr|r’rŒr}rfrr“)r1rrQr[rxr§s      r2rUzPack.get_unpacked_object“
s€ð”×)Ò)¨#Ñ.Ô.ˆØ”9×3Ò3°FÈÐ3ÑVÔVˆØÔ!¥YÒ.Ð.Ð3DÐ.ݘhÔ1µ3Ñ7Ô7Ð7Ð7Ð7Ø"&¤*×"8Ò"8¸À(ÔBUÑ9UÑ"VÔ"VˆHÔÝ%.ˆHÔ"؈r4r/rvrÇ)7r5r6r7r8rrrßr¤rér r3r-r-r0r½rer¢rrrírõr”rfrerKr£rar/rrLrSrErMrHrrJr%rJrrArr$rYrRr]rr`r¥rbrHr!rrr%rUr9r4r2r2r2]	s¼€€€€€€ØÐà˜ " h ,Ô/Ô0Ð0Ð0Ñ0ؘ  Y Ô/Ô0Ð0Ð0Ñ0àHÔÐÐÑØ
9Ô
ÐÐÑðFJð
/ð
/Ø)1°/Ô)Bð
/à	
ð
/ð
/ð
/ð
/ðððñ„[ððððñ„[ðð)ð)ð)ððhðððñ„Xðððyðððñ„XðððððððððððKðKðKð˜ððððð@˜#ð@ð@ð@ð@ð ð ð ððððð	ð	ð	ð	ð/ Uð/ð/ð/ð/ð7ð7ð7ð ð¨4ððððð*˜Eð* e¨C°¨JÔ&7ð*ð*ð*ð*ð? ð?¨'ð?ð?ð?ð?ð

˜X gÔ.ð
ð
ð
ð
ðBGð
ð
ð
ؘXÔ&ð
Ø:>ð
à	'Ô	ð
ð
ð
ð
ð$#Ø#Ø"'ð
")ð")ð")àxÔ ð")ðð	")ð
ð")ð ð
")ð
.Ô	!ð")ð")ð")ð")ðHðððð
ð
˜ œð
°3ð
ð
ð
ð
ð
!˜5ð
! U¨8°C¬=¸#Ð?PÐ+PÔ%Qð
!ð
!ð
!ð
!ð 48ð*!ð*!Øð*!Ø!$ð*!à	ˆsH˜U”OÐ#Ô	$ð*!ð*!ð*!ð*!ðZ04ð
ð
Ø  Ô,ð
à	.Ô	!ð
ð
ð
ð
ð04ð
ð
Ø  Ô,ð
à	.Ô	!ð
ð
ð
ð
ð38ÐSWðððØðØ+/ðØLPðà	ððððððr4r2)rƒrCrÃcó—| d¦«t|j¦«\}}|rN| d¦«t|j|t|¦«z¦«| ¦«t|d¬¦«}| dtj	¦«g}t|¦«D]Ÿ\}	}
|0|d|	t|¦«fz d¦«¦«t|
¦«dksJ‚||
¦«\}}| ¦«}
t|j||||¬¦«}| |
|
|f¦«Œ | ¦«}| |¦«||fS)	z™Extend a pack file with more objects.

    The caller should make sure that object_ids does not contain any objects
    that are already in the pack
    rrYrþNz"writing extra base objects: %d/%d
r¸rb)rrƒ)r¶r‰rgr™rÃrlrrÝrÉrr‘r»rµrˆrnrZ)rÃrrJrƒrCÚ_versionrˆÚnew_shaÚ
extra_entriesråÚ	object_idr—r¢rxrhrÅs                r2Úextend_packrt¥
s¢€ð‡F‚Fˆ1I„I€IÝ,¨Q¬VÑ4Ô4Ñ€HˆkàðØ	Šˆq‰	Œ	ˆ	ݘ!œ' ;µ°Z±´Ñ#@ÑAÔAÐAð	
Š‰	Œ	ˆ	õ˜q¨#Ð.Ñ.Ô.€Gð‡F‚Fˆ1bŒkÑÔÐà€Mõ" *Ñ-Ô-ð9ð9‰ˆˆ9ØÐØˆHØ6¸!½SÀ¹_¼_Ð9MÑM×UÒUØñôñ
ô
ð
õ
9‰~Œ~ Ò#Ð#Ð#Ð#Ø ˜ Ñ+Ô+‰ˆ$Ø—’‘”ˆÝ!Ø
ŒGØØØØ/ð
ñ
ô
ˆð	×Ò˜i¨°Ð7Ñ8Ô8Ð8Ð8؏~Š~ÑÔ€H؇G‚GˆHÑÔÐØ]Ð"Ð"r4)rQrçr/)rrrÖ)rj)Nrjr)NNTTNN)NNTrjN)‹r8rmÚcollectionsrrÚ
contextlibrÚiorrÚcdifflibrr	ÚModuleNotFoundErrorÚdifflibrÉrÛÚsysÚ	itertoolsr
Útypingrrr
rrrrrrrrrrrrÚImportErrorÚtyping_extensionsrýr¬ÚhashlibrrrrrÍrÌÚplatformÚerrorsr r!rÚr"Ú	lru_cacher#rBr$r%r&r'r(r’r“r…r·ÚPACK_SPOOL_FILE_MAX_SIZErLrfr¥r rKr!ÚPackHintÚ	Exceptionr-r;rOr_rrrtrRrÈrMr¶r¾rÄrÓrÁrçrrérr/rßrÝr‰rŒrœr r¢rÊr‡rÝrßr"r$r[rrardrqr|r…rˆr”r–r™r£r¬r«rªrÌrÖrÉrÞr’rárÛrrørrür¹rQrÚwrite_pack_indexr2rtÚ
dulwich._packr9r4r2ú<module>r‰s³ðð,ðð€€€Ø*Ð*Ð*Ð*Ð*Ð*Ð*Ð*ØÐÐÐÐÐØ,Ð,Ð,Ð,Ð,Ð,Ð,Ð,ð(Ø<Ð<Ð<Ð<Ð<Ð<Ð<øØð(ð(ð(Ø'Ð'Ð'Ð'Ð'Ð'Ð'Ð'ð(øøøð
€	€	€	Ø
€
€
€
Ø
€
€
€
ØÐÐÐÐÐððððððððððððððððððððððððððððððððð"+ØÐÐÐÐÐÐøØð+ð+ð+Ø*Ð*Ð*Ð*Ð*Ð*Ð*Ð*ð+øøøð€€€Ø€€€ØÐÐÐÐÐØ!Ð!Ð!Ð!Ð!Ð!Ð!Ð!ØÐÐÐÐÐðØ€K€K€Kð€H€HøððððØ€H€H€Hðøøøð„<7ÒÐØ€Hà5Ð5Ð5Ð5Ð5Ð5Ð5Ð5ØÐÐÐÐÐØ#Ð#Ð#Ð#Ð#Ð#ØMÐMÐMÐMÐMÐMÐMÐMÐMÐMÐMÐMÐMÐMà
€	Ø
€	à˜)Ð$€ð"$Ðð,Ðð˜%  e¨S jÔ 1°4¸´;Ð >Ô?ÀÀeÄÐLÔMÐØ˜E˜7 E¨#Ð/@Ð*@Ô$AÐAÔB€Ø
s˜Cj $Ð&Ô
'€
ؐh˜u”oÐ%Ô&€ðððððyñôðð"ð"ð"ð"ð"hñ"ô"ð"ð,=ð=ð=ð=ð=˜Oñ=ô=ð=ð,0ð0ð0ð0ð0ñ0ô0ð0ð:>ððØ
C5˜%<Ô
 ðØ)1°#¬ðà
ˆ4Œ9h˜s”mÐ#Ô$ððððð"ðððð˜)ñôðð
aIðaIðaIðaIðaIñaIôaIðaIðH€
ðØ$ð	AðAؘ˜˜u˜Ô%ðAàðAððAðð	Að
ðAðAðAðAðH
+ð
+ð
+ð-ð-ð-ððððð,FðFðFð&ððð.u˜c 8¨C¤=Ð0Ô1€ðZ
ðZ
ðZ
ðZ
ðZ
ñZ
ôZ
ðZ
ðz,Oð,Oð,Oð,Oð,Oiñ,Oô,Oð,Oð^^&ð^&ð^&ð^&ð^&Iñ^&ô^&ð^&ðBððððñôðð2&Vð&Vð&Vð&Vð&Vñ&Vô&Vð&VðR"˜e C¨ Hœoð"ð"ð"ð"ð(%˜%  x°¤Ð 6Ô7ð%¸Cð%ð%ð%ð%ð37ØØØðJðJؘu˜e|Ô$ðJà˜ # ¨ Ô.Ô/ðJðˆ>˜5Ð Ô!ð
JðJðJðJðZðððIOðIOðIOðIOðIOñIOôIOðIOðX,Gð,Gð,Gð,Gð,GÐ'ñ,Gô,Gð,Gð^	ð	ð	ððððð8h9ðh9ðh9ðh9ðh9ñh9ôh9ðh9ðV€GˆCL„L€ðhðhðhðhðh˜ œñhôhðhðVððððÐ/°Ô?ñôðð?ð?ð?ð?ð?Ð$ ^Ô4ñ?ô?ð?ð#ð#ð#ð#ð#Ð% gÔ.ñ#ô#ð#ðððððñôðð0ððððñôðð@ððð>ðððð,ðððð.#Ø'+Øð
CðCðCà
8˜GÔ$ h¨u°W¸hÀu¼oÐ5MÔ/NÔ&OÐOÔ
PðCðdŒ^ð	Cð
  ”}ðCðð
CðCðCðCð@*ð*ð*ð
ð
ð
ð")-Ø
ðMðMðMØ$ðMàE”
ðMð˜#˜eœ*Ô%ð	MðˆnÔð
MðMðMðMðB"&Ø
ð	ððØ
8˜E”? H¨U°7¸HÀU¼OÐ3KÔ-LÔ$MÐMÔ
Nðð˜#”ðð
ˆnÔððððð:!Ø
8˜GÔ$ h¨u°W¸hÀxÔ>PÐ5PÔ/QÔ&RÐRÔ
Sð!à
ˆgÔð!ð!ð!ð!ð,:>ð&!ð&!Ø" 3œ-ð&!ð&!ð&!ð&!ðX#Ø'+ØØ
ð
&,ð&,ð&,Ø
8˜GÔ$ h¨u°W¸hÀu¼oÐ5MÔ/NÔ&OÐOÔ
Pð&,ðdŒ^ð&,ð  ”}ð	&,ð
ð&,ðˆ3˜Ô(Ð(Ô)ð&,ð&,ð&,ð&,ðX(,Ø"ØØØ(,Ø
ð&7ð&7Ø$ð&7à˜˜x¨°(Ô);Ð;Ô<Ô=ð&7ð  ”}ð&7ðdŒ^ð	&7ð
ð&7ðð
&7ð˜#˜eœ*Ô%ð&7ðˆnÔð&7ð&7ð&7ð&7ðR˜Gð¨ððððð(,Ø"ØØØ(,ð%ð%à$ð%ð˜˜x¨°(Ô);Ð;Ô<Ô=ð%ð  ”}ð	%ð
dŒ^ð%ðð
%ðð%ð˜#˜eœ*Ô%ð%ð%ð%ð%ðX(,Ø"Øð
ððà
8˜GÔ$ h¨u°W¸hÀu¼oÐ5MÔ/NÔ&OÐOÔ
Pðð  ”}ð	ð
dŒ^ððð
ðððð:]ð]ð]ð]ð]ñ]ô]ð]ðHØ
Øð
AðAðAà
nÔ
%ðAðAðAðAð:ððð6	 ð	ð	ð	ð	ð€
ð
ð
ð
ð+4ð+4ð+4ð\DðDðDðN%ؘÔ(ð%Ø9>ð%à
ð%ð%ð%ð%ðP'ÐðEðEðEðEðEñEôEðEðZ
Ø
ð
5#ð5#ð5#Øð5#àH”
ð5#ðˆ5$ˆ;Ôð5#ð5#ð5#ð5#ðp	ððððððððððøðð	ð	ð	Ø€D€Dð	øøøsBž%¥3²3Á)A0Á0A>Á=A>ÂB%Â%B/Â.B/×W×W×W