
    Pi                        d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlmZ d dlmZ d dlmZ   ej!        dd          Z" ej!        dd          Z# ej!        d	d
          Z$ ej!        dd          Z% ej!        dd          Z&e# dZ'dZ(de# de% Z)de# de% dZ*de' de% Z+de" Z,de" dZ-de( dZ.dZ/ ej0        dd          d             Z1e j2        d             Z3e j2        d             Z4e j2        d             Z5e j2        e#e%fd            Z6d Z7d  Z8d! Z9d" Z:d# Z;d$ Z<d% Z=ej>        ?                    d&e4e5e6g          d'             Z@d( ZAej>        ?                    d&e4e5e6g          ej>        ?                    d)dd*g          d+                         ZBej>        ?                    d&e5e6g          d,             ZCd- ZDej>        ?                    d&e4e5e6g          d.             ZEej>        ?                    d&e4e5e6g          d/             ZFej>        ?                    d&e4e5e6g          d0             ZGej>        ?                    d&e6g          d1             ZHej>        ?                    d&e4e5e6g          d2             ZIej>        ?                    d&e5e6g          d3             ZJej>        ?                    d&e4e5e6g          d4             ZKej>        ?                    d&e4e5e6g          d5             ZLej>        ?                    d&e4e5e6g          d6             ZMej>        ?                    d&e4e5e6g          d7             ZNej>        ?                    d&e4e5e6g          d8             ZOej>        ?                    d&e4e5e6g          ej>        ?                    d9d*dg          d:                         ZPej>        ?                    d&e4g          d;             ZQej>        ?                    d&e4e5e6g          ej>        ?                    d<d*dg          d=                         ZRej>        ?                    d&e4e5e6g          d>             ZSej>        ?                    d&e4e5e6g          ej>        ?                    d<d*dg          d?                         ZTej>        ?                    d<d*dg          d@             ZUej>        ?                    d<d*dg          dA             ZVej>        jW        ej>        ?                    d&e5e6g          dB                         ZXdC ZYdD ZZej>        ?                    d&e4e5e6g          dE             Z[dF Z\dG Z]e j2        dH             Z^dI Z_ej>        ?                    dJe+e*e-g          dK             Z`ej>        ?                    dLdMdNg          ej>        ?                    d&e5e6g          dO                         Zaej>        ?                    d&e5e6g          dP             Zbej>        ?                    d&e4e5e6g          ej>        ?                    dQd*dg          dR                         Zcej>        ?                    d&e4e5e6g          dS             ZddT Zeej>        ?                    dUdd*g          ej>        ?                    d)dd*g          ej>        ?                    d&e4e5e6g          dV                                     Zfej>        ?                    d)dd*g          ej>        ?                    d&e4e5e6g          dW                         Zgej>        jW        ej>        ?                    d&e4e5e6g          dX                         ZhdY Ziej>        ?                    d&e4e5e6g          dZ             Zjej>        ?                    d&e6g          d[             Zkej>        ?                    d&e6g          d\             Zlej>        ?                    d&e6g          d]             Zmej>        ?                    d&e6g          d^             Znd_ Zod` Zpda Zqdb Zrdc Zsdd Zt G de df          Zuej>        ?                    d&e5e6g          dg             Zvdh Zwej>        ?                    d&e5e6g          di             Zxdj Zydk ZzdS )l    N)_azure)_common)_opsGCS_TEST_BUCKETz
csh-test-3AS_TEST_ACCOUNTcshteststorage2AS_TEST_ACCOUNT2cshteststorage3AS_TEST_CONTAINERtestcontainer2AS_TEST_CONTAINER2testcontainer3z-does-not-existcshteststorage4az:///gs://https://3.blob.core.windows.net/publiccontainer/test_cat.pngs   PNGsessionT)scopeautousec               #      K   t          j                    dk    r9dt          j        v r+t	          j        ddddt          j        d          g           d V  d S )NLinuxGOOGLE_APPLICATION_CREDENTIALSgcloudauthzactivate-service-accountz--key-file=)platformsystemosenvironsprun     f/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/blobfile/_ops_test.pysetup_gcloud_authr&   0   sl       G##(HBJ(V(V
*Lbj)IJLL		
 	
 	
 
EEEEEr$   c              #      K   t          j                    }t          j        |            d V  t          j        |           d S N)r   getcwdchdir)pathoriginal_paths     r%   r*   r*   @   s=      IKKMHTNNN	EEEH]r$   c               #      K   t          j                    5 } t          | t                    sJ t          j                            | d          }|V  d d d            d S # 1 swxY w Y   d S )N	file.name)tempfileTemporaryDirectory
isinstancestrr   r+   join)tmpdirr+   s     r%   _get_temp_local_pathr5   H   s      		$	&	& &&#&&&&&w||FK00


                 s   <AA#&A#c               #   4  K   	 ddl m}  n$# t          $ r t          j        d           Y nw xY wdt
           dd                    d t          d          D                       z   }|                     |           |d	z   V  | 	                    |           d S )
Nr   gfiletensorflow not installedr   r    c              3   R   K   | ]"}t          j        t          j                  V  #d S r(   randomchoicestringascii_lowercase.0is     r%   	<genexpr>z%_get_temp_gcs_path.<locals>.<genexpr>W   s@       0 023f,--0 0 0 0 0 0r$      
/file.name)
tensorflow.ior8   ImportErrorpytestskipr   r3   rangemkdirrmtree)r8   r+   s     r%   _get_temp_gcs_pathrN   P   s      0''''''' 0 0 0./////0 &?%%% 0 07<Ryy0 0 0 ) ) D 
KK

	LLs    ,,c              #     K   d                     d t          d          D                       }d|  d| d|z   }|dz   V  dd	d
dd| d|d| dddg}t          j        |dt	          j                    dk    d           d S )Nr:   c              3   R   K   | ]"}t          j        t          j                  V  #d S r(   r<   rA   s     r%   rD   z$_get_temp_as_path.<locals>.<genexpr>a   s/      QQ!f&<==QQQQQQr$   rE   r   .blob.core.windows.net/r   rF   azstorageblobzdelete-batch--account-namez--sourcez	--patternz/*--auth-modeloginTWindows   )checkshelltimeout)r3   rK   r!   r"   r   r   )account	container	random_idr+   cmds        r%   _get_temp_as_pathra   _   s      QQuRyyQQQQQIBgBBiBBBYND

C F3d(/"3"3y"@"MMMMMMr$   c                 6   d| v s|                      d          rt          j                    5 }t          |t                    sJ t          j        |           \  }}}t          j        	                    |d          }t          |d          5 }|                    |           d d d            n# 1 swxY w Y   ddddd	d
|d|d|d|ddg}t          j        |dt          j                    dk    t          j        t          j        d           d d d            d S # 1 swxY w Y   d S 	 ddlm}	 n$# t&          $ r t)          j        d           Y nw xY w|	                    | d          5 }|                    |           d d d            d S # 1 swxY w Y   d S )N.blob.core.windows.netr   tmpwbrR   rS   rT   uploadz--overwriterU   --container-name--name--filerV   rW   TrX   rY   rZ   r[   stdoutstderrr\   r   r7   r9   )
startswithr/   r0   r1   r2   azure
split_pathr   r+   r3   openwriter!   r"   r   r   DEVNULLrG   r8   rH   rI   rJ   GFile)
r+   contentsr4   r]   r^   rT   filepathfr`   r8   s
             r%   _write_contentsrw   u   s   4''4??7+C+C'(** 	ffc*****','7'='=$GYw||FE22Hh%% "!!!" " " " " " " " " " " " " " "  "C" Fo''94zz   /	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	@	4+++++++ 	4 	4 	4K233333	4 [[t$$ 	GGH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s[   A DB0$D0B4	4D7B4	8ADD #D *D1 1EE+FFFc                    d| v rt          j                    5 }t          |t                    sJ t	          j        |           \  }}}t          j                            |d          }ddddd|d|d	|d
|ddg}t          j
        |dt          j                    dk    t          j        t          j        d           t          |d          5 }|                                cd d d            cd d d            S # 1 swxY w Y   	 d d d            d S # 1 swxY w Y   d S ddlm} |                    | d          5 }|                                cd d d            S # 1 swxY w Y   d S )Nrc   rd   rR   rS   rT   downloadrU   rg   rh   ri   rV   rW   TrX   rY   rj   rbr   r7   )r/   r0   r1   r2   rn   ro   r   r+   r3   r!   r"   r   r   rr   rp   readrG   r8   rs   )	r+   r4   r]   r^   rT   ru   r`   rv   r8   s	            r%   _read_contentsr|      s^   4''(** 	 ffc*****','7'='=$GYw||FE22H "C  Fo''94zz    h%%  vvxx             9	  	  	  	  	  	  	  	 8                 9	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 > 	('''''[[t$$ 	6688	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	sH   B3DC9 D9C=	=D C=	DDD;EE #E c                  V    g d} | D ]!\  }}t          j        |          }||k    sJ "d S )N))r   r:   )za/r:   )ar~   )a/bbr:   r:   )gs://ar:   )gs://a/r:   )	gs://a/b/r:   )gs://a/br   )gs://a/b/c/test.filenametest.filename)z!https://a.blob.core.windows.net/br:   )z"https://a.blob.core.windows.net/b/r:   )z$https://a.blob.core.windows.net/b/c/r:   )z#https://a.blob.core.windows.net/b/cc)z1https://a.blob.core.windows.net/b/c/test.filenamer   )bfbasename)	testcasesinput_desired_outputactual_outputs       r%   test_basenamer      sV      I" #, / /F++...../ /r$   c                      t          j        d          } g d}|D ]+\  }}|                     |          }||k    sJ |             ,d S )NFoutput_az_paths))r~   r:   )r   r~   )a/b/cr   )a/b/c/r   )z
a/b/c/////r   r   )r   r   )r   r   )zgs://a/////r   )r   r   )r   
gs://a/b/c)gs://a/b/c/r   )zgs://a/b/c/////r   ))https://a.blob.core.windows.net/containerr   )z*https://a.blob.core.windows.net/container/r   )z.https://a.blob.core.windows.net/container/////r   )+https://a.blob.core.windows.net/container/br   )z;https://a.blob.core.windows.net/container/b/c/test.filename-https://a.blob.core.windows.net/container/b/c).https://a.blob.core.windows.net/container/b/c/r   )z3https://a.blob.core.windows.net/container/b/c//////r   )r   create_contextdirname)r   r   r   r   r   s        r%   test_dirnamer      sv    
%000A$ $ $IJ #, < <		&))...6....< <r$   c                     t          j        d          } g d}|D ]o\  }}}|                     ||          }||k    sJ | d|             d|v r:t          |          }|                     ||          }||k    sJ | d|             pd S )NFr   ))r~   r   r   )r   r   r   )a/b/r   r   )r   c/r   )r   /c/r   )r:   r:   r:   )r   zd0123456789-._~!$&'()*+,:=@;z'gs://a/b/c/d0123456789-._~!$&'()*+,:=@;)r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   	gs://a/c/)r   ../czgs://a/c)r   ../c/r   )r   ../../c/r   )r   r   r   )r   r   r   ),https://a.blob.core.windows.net/container/b/r   r   )r   r   r   )r   r   ,https://a.blob.core.windows.net/container/c/)r   r   z+https://a.blob.core.windows.net/container/c)r   r   r   )r   r   r   )gs://test/a/bzc:dzgs://test/a/b/c:d)r   zc:d;zgs://test/a/b/c:d;)az://ar   z"https://a.blob.core.windows.net/c/)r   zc/bz#https://a.blob.core.windows.net/c/b zblob.core.windows.net)r   r   r3   _convert_https_to_az)r   r   input_ainput_br   r   
az_input_as          r%   	test_joinr   
  s    
%000A< < <Iz -6 N N(.w00...70F0FW0F0F..."g---g66JFF:w77M!]222z4M4MG4M4M222N Nr$   c                 V    |                      dd                               dd          S )Nr   r   rc   r:   )replacer+   s    r%   r   r   S  s'    <<
G,,445MrRRRr$   c                 .    t          j        dd|           S )Nz^az://(.*?)/z!https://\1.blob.core.windows.net/)resubr   s    r%   _convert_az_to_httpsr   W  s    6/#GNNNr$   ctxc                    d} |             5 }t          ||           t          j        |          \  }}t          j                            |                                          |k    sJ 	 d d d            d S # 1 swxY w Y   d S N   meow!)rw   r   get_urlurllibrequesturlopenr{   )r   rt   r+   url_s        r%   test_get_urlr   [  s    H	 >$h'''D!!Q~%%c**//11X=====> > > > > > > > > > > > > > > > > >s   AA::A>A>c                  P   t           j                            t                                                    } |                     t                    sJ t          j        t                    \  }}t           j                            |                                          | k    sJ d S r(   )	r   r   r   AZURE_PUBLIC_URLr{   rm   AZURE_PUBLIC_URL_HEADERr   r   )rt   r   r   s      r%   test_azure_public_get_urlr   d  s    ~%%&677<<>>H677777Z())FC>!!#&&++--999999r$   	streamingFc                 6   d} |             5 }t          j        |dd          }t          j        t          j        |                     t          j        |d|          5 }|                    |           |                                t          |          k    sJ 	 d d d            n# 1 swxY w Y   t          j        |d|          5 }|                                |k    sJ |                                t          |          k    sJ 	 d d d            n# 1 swxY w Y   t          j        |d|          5 }t          |          }d                    |          |k    sJ 	 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )N   meow!
purr
a foldera.filere   r   rz   r$   )
r   r3   makedirsr   BlobFilerq   telllenr{   list)r   r   rt   r+   wrliness          r%   test_read_writer   k  sz     H	 /$wtZ22
BJt$$%%%[ty999 	-QGGH6688s8}},,,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- [ty999 	-Q6688x''''6688s8}},,,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- [ty999 	/QGGE88E??h.....	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	// / / / / / / / / / / / / / / / / /s   AF!=B+F+B/	/F2B/	3FADFD 	 F#D 	$F>+E6*F6E:	:F=E:	>FFFc           	         d} |             5 }t          j        |dd          5 }t          j        |d          5 }|                    dd          5 }|                    |           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t          j        |dd          5 }t          j        |d          5 }|                    dd          5 }|                                |k    sJ 	 d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )	Nr   re   Tr   r   zeggs.txtrz   r   )r   r   zipfileZipFilerp   rq   r{   )r   rt   r+   rv   zfmyfiles         r%   test_zipfiler   }  s
   H	 	5$[tt444 	+C(( +BWWZ-- +LL***+ + + + + + + + + + + + + + ++ + + + + + + + + + + + + + +	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+
 [tt444 	5C(( 5BWWZ-- 5!;;==H444445 5 5 5 5 5 5 5 5 5 5 5 5 5 55 5 5 5 5 5 5 5 5 5 5 5 5 5 5	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5s   EB"BA4	(B4A88B;A8<B?B"BB"BB"E"B&	&E)B&	*EED01D	D0DD0 D!D0$E0D44E7D48E;EE	EE	EE#&E#c                     d} t                      5 }t          |          }t          j        |dd          }t          |          }t          j        t          t          j        |                               t          j        |d          5 }|                    |            d d d            n# 1 swxY w Y   t          j        |d          5 }|                                | k    sJ 	 d d d            n# 1 swxY w Y   t          j        |d          5 }t          |          }d                    |          | k    sJ 	 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr   r   r   re   rz   r$   )
ra   r   r   r3   r   r   r   rq   r{   r   )rt   r+   r   r   r   s        r%   test_az_pathr     sG   H			 /#D))wtZ22#D))
(D)9)9::;;;[t$$ 	GGH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	[t$$ 	(6688x'''''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	([t$$ 	/GGE88E??h.....	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	// / / / / / / / / / / / / / / / / /s~   A=E(B0$E(0B4	4E(7B4	8E(C8,E(8C<	<E(?C<	 E(+EE(E	E(E	E((E,/E,c                    d}d} |             5 }t          j        |dd          5 }|                    |           d d d            n# 1 swxY w Y   t          j        |dd          5 }|                    |           d d d            n# 1 swxY w Y   t          j        |d          5 }|                                ||z   k    sJ 	 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )N   meow!
s   purr
abFr   rz   r   r   rq   r{   )r   rt   additional_contentsr+   r   r   s         r%   test_appendr     s   H#	 >$[tu555 	GGH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	[tu555 	)GG'(((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)[t$$ 	>6688x*=======	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	>> > > > > > > > > > > > > > > > > >s{   C0A	C0	A	C0A	C0+BC0B	C0B	C0-CC0C	C0C	 C00C47C4c                 *   d} |             5 }t          ||           t          j        |          }|j        t	          |          k    sJ t          t          j                    |j        z
            dk    sJ 	 d d d            d S # 1 swxY w Y   d S )Nr   rY   )rw   r   statsizer   abstimemtime)r   rt   r+   ss       r%   	test_statr     s    H	 0$h'''GDMMvX&&&&49;;())R/////	0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0s   A-BBBc                 f   d} |             5 }t          ||           t          j        |          }t          t	          j                    |j        z
            dk    sJ d}t          j        ||          sJ t          j        |          j        |k    sJ 	 d d d            d S # 1 swxY w Y   d S )Nr   rY      )rw   r   r   r   r   r   	set_mtime)r   rt   r+   r   	new_mtimes        r%   test_set_mtimer     s    H	 0$h'''GDMM49;;())R////	|D),,,,,wt}}"i/////0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0s   BB&&B*-B*c                    d} |             5 }t          j        |d          5 }|                    |           d d d            n# 1 swxY w Y   t          j        |d           t	          j        d           t          j        |dd          5 }t          j        |          }d d d            n# 1 swxY w Y   |j        dk    sJ 	 d d d            d S # 1 swxY w Y   d S )Nr   re   r      Tr   )r   r   rq   r   r   sleepr   r   )r   rt   r+   rv   sts        r%   test_azure_metadatar     s    H	 $[t$$ 	GGH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	T1
1[tt444 	B	 	 	 	 	 	 	 	 	 	 	 	 	 	 	x1}}}}}                 sX   CACA			CA		ACB1%C1B5	5C8B5	9CCCc                     d} |             5 }t          ||           t          j        |          sJ t          j        |           t          j        |          rJ 	 d d d            d S # 1 swxY w Y   d S r   )rw   r   existsremover   rt   r+   s      r%   test_remover     s    H	 #$h'''y
	$9T??""""	# # # # # # # # # # # # # # # # # #s   AA,,A03A0c                    d} |             5 }t          j        |          }t          j        t          j        |d                     t          j        |d          }t          j        |           t          j        |          sJ t          j        |           t          j        |          rJ t          j        |           t          j        |dd          }t          ||           t          j        t                    5  t          j        |           d d d            n# 1 swxY w Y   t          j
        |           t          j        |           d d d            d S # 1 swxY w Y   d S )Nr   fakedirnamer   name)r   r   rmdirr3   r   r   rw   rI   raisesOSErrorr   )r   rt   r+   dirpathnew_dirpathnew_filepaths         r%   
test_rmdirr    s    H	 $*T""
-00111ggy11
K   y%%%%%
9[))))) 	 ww	6::h///]7## 	" 	"H[!!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 		,
)                 s6   C8E&D&E&&D*	*E&-D*	.+E&&E*-E*c                    d} |             5 }t          j        |ddd          }t          j        |           t          j        |          sJ t	          t          j        |d          |           d d d            d S # 1 swxY w Y   d S )Nr   xtestfile)r   r3   r   r   rw   )r   rt   r+   r   s       r%   test_makedirsr    s    H	 @$'$S#..
Gy!!!!!44h???	@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @s   A%A??BBc                    d} |             5 }t          j        |          rJ t          ||           t          j        |          rJ |dz   }t          j        |           t          j        |          sJ t          j        |d d                   rJ t          j        |dz   dd          }d|vr&t          j        t          j        |                     t          j        t          j        |                    }t          ||           t          j        |          sJ t          j        |d d                   rJ 	 d d d            d S # 1 swxY w Y   d S )Nr   z.dirz	.otherdirsubdirr.   ://)r   isdirrw   r   r3   r   )r   rt   r+   r   ru   s        r%   
test_isdirr    s   H	 *$8D>>!!!h'''8D>>!!!-
Gx     8GCRCL)))))74+-xEEK
8,,---*RZ1122(+++x     8GCRCL))))))#* * * * * * * * * * * * * * * * * *s   D7EEEc                 B   d} |             5 }t          j        |          }t          j        |           t          j        |d          }t          j        |d          5 }|                    |           d d d            n# 1 swxY w Y   t          j        |d          }t          j        |d          5 }|                    |           d d d            n# 1 swxY w Y   t          j        t          j        |d                     g d}t          t          t          j        |                              |k    sJ t          |          }t          t          t          j        |                              |k    sJ 	 d d d            d S # 1 swxY w Y   d S )Nr   r~   re   r   r   r~   r   r   )
r   r   r   r3   r   rq   sortedr   listdirr   )r   rt   r+   r   a_pathr   b_pathexpecteds           r%   test_listdirr    s,   H	 =$*T""
G#&&[&& 	!GGH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	#&&[&& 	!GGH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
BGGS))***"??d2:g..//00H<<<<&w//d2:g..//00H<<<<<= = = = = = = = = = = = = = = = = =s[   AF B6FB	F	B	
-F7CFC	F C	!B%FFFc                    d} |             5 }t          j        |          t          j        d          }t          j        |d          5 }|                    |           d d d            n# 1 swxY w Y   t          j        d          }t          j        |d          5 }|                    |           d d d            n# 1 swxY w Y   t          j        t          j        d                     t          t          t          j                                      }d |D             g dk    sJ d |D             fd	dD             k    sJ d
 |D             g dk    sJ d |D             g dk    sJ |d         j	        j
        t          |          k    sJ |d         j	        j
        t          |          k    sJ |d         j	        J 	 d d d            d S # 1 swxY w Y   d S )Nr   r~   re   r   r   c                     g | ]	}|j         
S r#   )r   rB   es     r%   
<listcomp>z test_scandir.<locals>.<listcomp>9      (((1(((r$   r  c                     g | ]	}|j         
S r#   r   r  s     r%   r  z test_scandir.<locals>.<listcomp>:  r  r$   c                 :    g | ]}t          j        |          S r#   r   r3   )rB   r   r   s     r%   r  z test_scandir.<locals>.<listcomp>:  s%    ,`,`,`RWWd-C-C,`,`,`r$   c                     g | ]	}|j         
S r#   )is_dirr  s     r%   r  z test_scandir.<locals>.<listcomp>;  s    ***Q***r$   )FFTc                     g | ]	}|j         
S r#   )is_filer  s     r%   r  z test_scandir.<locals>.<listcomp><  s    +++a	+++r$   )TTFr   r      )r   r   r3   r   rq   r   r  r   scandirr   r   r   )r   rt   r+   r  r   r  entriesr   s          @r%   test_scandirr&  ,  s   H	 '$*T""#&&[&& 	!GGH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	#&&[&& 	!GGH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
BGGS))***bj112233(((((OOO;;;;(((((,`,`,`,`P_,`,`,`````**'***.B.B.BBBBB++7+++/B/B/BBBBBqz#s8}}4444qz#s8}}4444qz&&&&!' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'sZ   ?G'A/#G'/A3	3G'6A3	7-G'$C:G'C
	
G'C
	DG''G+.G+c           	         d} |             5 }t          j        |          }t          j        t          j        |d          d          5 }|                    |           d d d            n# 1 swxY w Y   t          j        t          j        |d          d          5 }|                    |           d d d            n# 1 swxY w Y   t          j        t          j        |d          d          5 }|                    |           d d d            n# 1 swxY w Y   t          j        t          j        |d          d          5 }|                    |           d d d            n# 1 swxY w Y   t          j        t          j        |d                     t          j        t          j        |d          d          5 }|                    |           d d d            n# 1 swxY w Y   t          t          t          j        |d	
                              g dk    sJ 	 d d d            d S # 1 swxY w Y   d S )Nr   r~   re   aar   car   zc/ar   )shard_prefix_length)r~   r(  r   r   r)  )	r   r   r   r3   rq   r   r  r   r  )r   rt   r+   r   r   s        r%   test_listdir_shardedr+  B  sx   H	 
$*T""[#..55 	GGH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	[$//66 	!GGH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	[#..55 	GGH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	[$//66 	!GGH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
BGGS))***[%00$77 	1GGH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d2:g1EEEFFGG L
 L
 L
 
 
 
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s   =H8
A, H8,A0	0H83A0	4+H8C5H8C	H8C		+H84D
H8D	H8D	+H8	E+H8+E/	/H82E/	3AH8G'H8'G+	+H8.G+	/;H88H<?H<topdownc                    d} |             5 }t          j        |          }t          j        |d          }t          j        |d          5 }|                    |           d d d            n# 1 swxY w Y   t          j        t          j        |d                     t          j        |d          }t          j        |d          5 }|                    |           d d d            n# 1 swxY w Y   |dgdgft          j        |d          dgg ft          j        |dd          g dgfg}|st          t          |                    }t          t          j        ||	                    |k    sJ t          |          }t          t          j        ||	                    |k    sJ 	 d d d            d S # 1 swxY w Y   d S )
Nr   r~   re   zc/dzc/d/br   dr   )r,  )
r   r   r3   r   rq   r   r   reversedwalkr   )	r   r,  rt   r+   r   r  r   r  r  s	            r%   	test_walkr1  \  s    H	 C$*T""#&&[&& 	!GGH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
BGGU++,,,'**[&& 	!GGH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 secU#WWc""SE2.WWc3''cU3

  	0HX..//HBGGW55566(BBBB&w//BGGW55566(BBBBB%C C C C C C C C C C C C C C C C C Cs[   ?F=A."F=.A2	2F=5A2	6AF=
C, F=,C0	0F=3C0	4B;F==GGc                    d} |             5 }t          j        |          t          j        d          }t          j        |d          5 }|                    |           d d d            n# 1 swxY w Y   t          j        d          }t          j        |d          5 }|                    |           d d d            n# 1 swxY w Y   fd}t                    5   |ddg            |dddg            |ddg            |ddg            |d	ddg            |ddg           d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )
Nr   r   re   bbc                     t          fd|D                       }t          t          t          j        |                               }||k    sJ | d|             d S )Nc                 :    g | ]}t          j        |          S r#   r  rB   pr   s     r%   r  zAtest_local_glob.<locals>.assert_listing_equal.<locals>.<listcomp>  %    CCCabggq11CCCr$    != r  r   r   glob)r+   desiredactualr   s      r%   assert_listing_equalz-test_local_glob.<locals>.assert_listing_equal  so    CCCC7CCCDDGD//00FW$$$&>&>W&>&>$$$$$r$   *ba*ab**)r   r   r3   r   rq   r*   )r   rt   r+   r  r   r  r>  r   s          @r%   test_local_globrC  u  s   H	 %/$*T""$''[&& 	!GGH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	$''[&& 	!GGH	 	 	 	 	 	 	 	 	 	 	 	 	 	 		? 	? 	? 	? 	?, 7^^ 	/ 	/  v...  d|444  v...  ///  tTl333  v...	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/?%/ %/ %/ %/ %/ %/ %/ %/ %/ %/ %/ %/ %/ %/ %/ %/ %/ %/s~   ?EA/#E/A3	3E6A3	7-E$C:EC
	
EC
	E%AE6EE	E	E	
EE!Eparallelc                 	  	 d} |             5 }t          j        |          	t          j        	d          }t          j        |d          5 }|                    |           d d d            n# 1 swxY w Y   t          j        	d          }t          j        |d          5 }|                    |           d d d            n# 1 swxY w Y   	fd} |t          j        	d          ddg            |t          j        	d          dg            |t          j        	d          dg            |t          j        	d	          ddg            |t          j        	d          dg           t          j        	d
          }t          j        |d          5 }|                    |           d d d            n# 1 swxY w Y   t          j        	dd
          }t          j        t          j        |                     t          j        |d          5 }|                    |           d d d            n# 1 swxY w Y   t          j        	ddd
          }d|vr&t          j        t          j        |                     t          j        |d          5 }|                    |           d d d            n# 1 swxY w Y    |t          j        	d          dg            |t          j        	d          dg            |t          j        	d          g d            |t          j        	d          ddg            |t          j        	d          ddg            |t          j        	d          ddg            |t          j        	d          g             |t          j        	d          dg            |t          j        	d	          g d            |t          j        	d          dg            |t          j        	d          dg            |t          j        	d          dg            |t          j        	d          dg            |t          j        	d          dg            |t          j        	d          dg            |t          j        	d          dg           d d d            d S # 1 swxY w Y   d S ) Nr   r   re   r3  c                     t          fd|D                       }t          t          t          j        |                               }||k    sJ | d|             d S )Nc                 :    g | ]}t          j        |          S r#   r  r6  s     r%   r  z;test_glob.<locals>.assert_listing_equal.<locals>.<listcomp>  r8  r$   rD  r9  r:  )r+   r<  r=  r   rD  s      r%   r>  z'test_glob.<locals>.assert_listing_equal  sv    CCCC7CCCDDGD!A!A!ABBCCFW$$$&>&>W&>&>$$$$$r$   r?  r@  rA  rB  test.txtr
  	subsubdirr  z
*/test.txtsubdir/test.txtz*/*.txtz**.txt)rI  rK  subdir/subsubdir/test.txtz	sub**.txtrL  zsubdir/**.txtz**/*.txtz*/test)r   r3  r
  rI  zsubdir/z*/z*dirzsubdir/*dirzsubdir/subsubdirzsubdir/*dir/zsu*ir/*dir/)r   r   r3   r   rq   r   )
r   rD  rt   r+   r  r   r  r>  rv   r   s
    `       @r%   	test_globrM    s    H	 <T$*T""$''[&& 	!GGH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	$''[&& 	!GGH	 	 	 	 	 	 	 	 	 	 	 	 	 	 		? 	? 	? 	? 	? 	?
 	RWWd33dD\BBBRWWd33dV<<<RWWe44tf===RWWc22T4LAAARWWd33dV<<<ww
++[t$$ 	GGH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	ww*55
BJt$$%%%[t$$ 	GGH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	ww+zBBK
4(()))[t$$ 	GGH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	RWWl;;>O=PQQQRWWi88;L:MNNNGGX&&(d(d(d	
 	
 	
 	GG[)),=?Z+[	
 	
 	
 	GG_--0AC^/_	
 	
 	
 	GGZ((+<>Y*Z	
 	
 	
 	RWWh77<<<RWW.?@@CTBUVVV 	RWWc224V4V4VWWWRWWh77(DDDRWWi888*EEERWWd33hZ@@@RWWf55zBBBRWWm<<?Q>RSSSRWWn==@R?STTTRWWm<<?Q>RSSSy<T <T <T <T <T <T <T <T <T <T <T <T <T <T <T <T <T <Ts   ?S#A0$S#0A4	4S#7A4	8-S#%C;S#C	S#C	CS#$G:S#G
	
S#G
	AS#"I8S#I	S#I	AS#%K;S#K	S#K	HS##S'*S'c                 8   d} |             5 }t          j        |          }t          j        |d          }t          j        |d          5 }|                    |           d d d            n# 1 swxY w Y   t          j        |d          }t          j        |d          5 }|                    |           d d d            n# 1 swxY w Y   t          j        |d          }t          j        |d          5 }|                    |           d d d            n# 1 swxY w Y   t          j        |dd          }t          j        t          j        |                     t          j        |d          5 }|                    |           d d d            n# 1 swxY w Y   t          t          t          j        t          j        |d                                        }|d         j	        dk    r|d         j
        sJ |d	         j	        dk    r|d	         j
        sJ |d
         j	        dk    r|d
         j        sJ dD ]}	dD ]}
t          t          t          j        t          j        ||
                                        }t          t          t          j        t          j        ||
          d|	                              }||k    sJ d|v rt          t          t          j        t          j        |d                                        }|d         j	        dk    r|d         j
        sJ |d	         j	        dk    r|d	         j
        sJ |d
         j	        dk    r|d
         j        sJ d d d            d S # 1 swxY w Y   d S )Nr   r   re   r3  rI  r
  *b*r   r   r#  )r   r   )r?  zb***zb**z**trO  T)rD  r*  r  rP  )r   r   r3   r   rq   r   r  r   scanglobr   r"  r   )r   rt   r+   r   r  r   r  rv   r%  r*  patternnormal_entriesparallel_entriess                r%   test_scanglobrU    s   H	 (E$*T""$''[&& 	!GGH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	$''[&& 	!GGH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	ww
++[t$$ 	GGH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	ww*55
BJt$$%%%[t$$ 	GGH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 bk"''5*A*ABBCCDDqz$&&71:+=&&=qz$&&71:+=&&=qz(**wqz/@**@#) 	: 	:B : :!'R['9R9R-S-S(T(T!U!U#)GGW55%)0C   $ $  (>99999: D==T"+bggt.D.D"E"EFFGGG1:?d**wqz/A**A1:?d**wqz/A**A1:?h..71:3D..DQ(E (E (E (E (E (E (E (E (E (E (E (E (E (E (E (E (E (Es   ?NA."N.A2	2N5A2	6-N#C9NC			NC		-N:DND 	 N#D 	$AN8FNF	N!F	"G NNNc                 d   d} |             5 }t          j        |          }t          j        |d          }t          j        |           t          j        |d          }t          j        |           d|vr't          j        t          j        |d                     t          j        t          j        |d          d          5 }|                    |           d d d            n# 1 swxY w Y   t          j        t          j        |d                     t          j        t          j        |d	          d          5 }|                    |           d d d            n# 1 swxY w Y   t          j        t          j        |d
                     t          j        t          j        |d          d          5 }|                    |           d d d            n# 1 swxY w Y   d } |||ddgg f|ddgg ft          j        |d          g dgft          j        |d          g dgf|d
gdgft          j        |d
          g g fg           t          j        ||            |||dgg f|d
gdgft          j        |d
          g g fg           d d d            d S # 1 swxY w Y   d S )Nr   destroysaver  adirzadir/bre   bdirzbdir/bsomedirsomefilec                     t          t          j        |                     }t          |          t          |          k    sJ | d|             d S )Nr9  )r   r   r0  r  )r+   r<  r=  s      r%   r>  z)test_rmtree.<locals>.assert_listing_equal+  sP    "'$--((F&>>VG__4446N6NW6N6N44444r$   r   rH  )r   r   r3   r   r   rq   rM   )	r   rD  rt   r+   rootdestroy_path	save_pathr   r>  s	            r%   test_rmtreera    s    H	 0
$z$wtY//
L!!!GD&))	
I Kf55666[x88$?? 	1GGH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	BGL&11222[x88$?? 	1GGH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	BGIy11222[J77>> 	!GGH	 	 	 	 	 	 	 	 	 	 	 	 	 	 		O 	O 	O
 		6*B//4v..SE:v..SE:YK*6I..B7
	
 
	
 
	
 		,2222x$YK*6I..B7	
 	
 	
S0
 0
 0
 0
 0
 0
 0
 0
 0
 0
 0
 0
 0
 0
 0
 0
 0
 0
s   B:J%C)J%)C-	-J%0C-	1AJ%E%J%%E)	)J%,E)	-AJ%?G!J%!G%	%J%(G%	)B/J%%J),J)c                    ddddz  fD ]}t                      5 }t                      5 }t                      5 }t                      5 }t                      5 }t                      5 }t                      5 }t          t          t                    5 }	t                      5 }
t          j        t                    5  t          j	        |||            d d d            n# 1 swxY w Y   t          j        t                    5  t          j	        |||            d d d            n# 1 swxY w Y   t          ||           ||f||f||f||f||f||	f|	|f||
fg}|D ]\  }}t          j	        ||d|           }|t          j        |                                          k    sJ t          |          |k    sJ t          j        t                    5  t          j	        |||            d d d            n# 1 swxY w Y   t          j	        ||d|            t          |          |k    sJ 	 d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d S )	Nr$   r       )r]   r^   rH  T)
return_md5rD  )	overwriterD  )r5   rN   ra   r	   r   rI   r   FileNotFoundErrorr   copyrw   hashlibmd5	hexdigestr|   FileExistsError)rD  rt   local_path1local_path2local_path3	gcs_path1	gcs_path2as_path1as_path2as_path3as_path4r   srcdsths                  r%   	test_copyrx  H  s`   (H	$:; 7 7!## 	7{4H4J4J 	7k[o[q[q 	7  vA  CU  CW  CW 	7  [d  fx  fz  fz 	7  ~G  IZ  I\  I\ 	7  `h  j{  j}  j} 	7  AI  K\$0BK
 K
 K
 	7(**	7.6011 A A	9x@@@@A A A A A A A A A A A A A A A011 ? ?(X>>>>? ? ? ? ? ? ? ? ? ? ? ? ? ? ? K222 k*i(I&H%8$8$;'h'	I & 7 7SGCIIIGK11;;======%c**h6666]?33 9 9GCx88889 9 9 9 9 9 9 9 9 9 9 9 9 9 9SD8DDDD%c**h666667+	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	77 7s  K5KK	J0J%J4I+IH=9CH=C!!H=$C!%H=D%H=%D))H=,D)-B&H=G7+H=7G;;H=>G;?1H=1I=IIIII+II+II+J+I//J2I/3J6JJJ	J
JJ0JJ0 J!J0$K	0J44K	7J48K	;KKKKKK5K""K5%K"&K55K9	<K9	c           
         ddddz  fD ]\}t                      5 }t                      5 }t                      5 }t          t          j        t
          d                    }t          t          j        t          d                    }t          ||           t          j        |||            t          j
        t          |          5  t          j        |||            d d d            n# 1 swxY w Y   t          j
        t          |          5  t          j        |||            d d d            n# 1 swxY w Y   t          j
        t          |          5  t          j        |||            d d d            n# 1 swxY w Y   t          j
        t          |          5  t          j        |||            d d d            n# 1 swxY w Y   t          j
        t          |          5  t          j        |||            d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   ^d S )Nr$   r   rc  zfile.binrH  )match)r5   ra   r   r   r3   AZURE_INVALID_CONTAINER"AZURE_INVALID_CONTAINER_NO_ACCOUNTrw   rg  rI   r   rf  )rD  rt   
local_pathrq  rr  invalid_container_as_pathinvalid_account_as_paths          r%   test_copy_invalidr  j  s   (H	$:; P P!## 	Pz3D3F3F 	P(TeTgTg 	Pks(</<<) )% ';:JGG' '# J111GJ8<<<<08QRRR R R
$=QQQQR R R R R R R R R R R R R R R08OPPP P P
$;hOOOOP P P P P P P P P P P P P P P 08QRRR P P";hOOOOP P P P P P P P P P P P P P P08OPPP N N"9HMMMMN N N N N N N N N N N N N N N 08QRRR P P18hOOOOP P P P P P P P P P P P P P P)	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	PP Ps  IIBH,		C-!H,	-C11H,	4C15H,	D7+H,	7D;;H,	>D;?H,	F5H,	FH,	F	H,	'G?H,	GH,	GH,	1H	H,	HH,	HH,	 I,H00I3H04I7III
III	!I	c                    dt           j        z  dz   } |             5 }t          j                    5 }t          j                            |d          }t          |d          5 }|                    |           d d d            n# 1 swxY w Y   t          j
        ||d           d d d            n# 1 swxY w Y   t          |          |k    sJ t          j                    5 }t          j                            |d          }t          j
        ||d           t          |          |k    sJ 	 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr   s   meow???rI  re   TrH  )commonPARALLEL_COPY_MINIMUM_PART_SIZEr/   r0   r   r+   r3   rp   rq   r   rg  r|   )r   rt   remote_pathr4   r}  rv   s         r%   test_parallel_copy_large_filer    sH    &@@:MH	 :+(** 	<ffj99Jj$'' "1!!!" " " " " " " " " " " " " " "GJd;;;;		< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< k**h6666(** 	:ffj99JGKd;;;;!*--99999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:: : : : : : : : : : : : : : : : : :s}   E1B2"B8B2BB2BB2&E2B6	6E9B6	:+E%AD?3E?E	EE	EEEc                      t                      5 } t          j        t          |            t	          |           d d         t
          k    sJ 	 d d d            d S # 1 swxY w Y   d S )N   )ra   r   rg  r   r|   r   )rv  s    r%   test_copy_azure_publicr    s    			 B
 #&&&c""2A2&*AAAAAAB B B B B B B B B B B B B B B B B Bs   =AA!Ac                      d} t          j        |           sJ t          t          j        | d                                                    dk    sJ d S )Nz5gs://tfds-data/datasets/mnist/3.0.1/dataset_info.jsonrz   r   )r   r   r   r   r{   )ru   s    r%   test_gcs_publicr    sT    FH9Xr{8T**//1122Q666666r$   c                     d} |             5 }t          j        |          rJ t          ||           t          j        |          sJ 	 d d d            d S # 1 swxY w Y   d S r   )r   r   rw   r   s      r%   test_existsr    s    H	 $9T??"""h'''y                 s   =AAAc                     t                      5 } ddz  }ddz  }t          j        | dd          5 }|                    |           t          j        | dd          5 }|                    |           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t          j        | d          5 }|                                |k    sJ 	 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )N   miso     momore   Tr   rz   )rN   r   r   rq   r{   )r+   outer_contentsinner_contentsrv   s       r%   test_concurrent_write_gcsr    s   			 . I. I.[tt444 	(GGN###T44888 (A'''( ( ( ( ( ( ( ( ( ( ( ( ( ( (	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( [t$$ 	.6688~-----	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.. . . . . . . . . . . . . . . . . .s|   "C7-BB 4B BBBBC7B	C7B	C77CC7C#	#C7&C#	'C77C;>C;c            	         t                      5 } t          j        d          }ddz  }ddz  }t          j        t          j                  5  |                    | dd          5 }|                    |           |                    | dd          5 }|                    |           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |                    | d	          5 }|                                |k    sJ 	 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )
N   azure_write_chunk_sizer  r  r  re   Tr   rz   )	ra   r   r   rI   r   ConcurrentWriteFailurer   rq   r{   )r+   r   r  r  rv   s        r%   test_concurrent_write_asr    s|   			 .U;;; I. I. ]2455 	, 	,D$$77 ,1'''ZZddZ;; ,qGGN+++, , , , , , , , , , , , , , ,, , , , , , , , , , , , , , ,	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, ZZd## 	.q6688~-----	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.. . . . . . . . . . . . . . . . . .s   >EC$&.CB6	*C6B::C=B:>CC$CC$CC$E$C(	(E+C(	,ED-!E-D1	1E4D1	5EE	E	c               #   f   K   t           j                                        } d V  | t           _        d S r(   )r   r    rg  )envs    r%   environ_contextr    s+      
*//

C	EEEBJJJr$   c                     t           dft           dz   dft           dz   dft           dz   dft          dft          dz   dft          dz   dft          dz   dft          dft          dz   dft          dz   dft          dz   dft          dft          dz   dft          dz   dft          dz   dft          dft          dz   dft          dz   dft          dz   dfddg} | D ]\  }}t          j        |          |k    sJ  d S )NFr   ///invalid.fileT)z/does-not-existF)r   T)r{  GCS_INVALID_BUCKETr|  AZURE_VALID_CONTAINERGCS_VALID_BUCKETr   r   )r   r+   should_exists      r%   test_more_existsr    s6   	 %(	 3	&.	 4	'/	 ?	2E:	U#	c	!5)	d	"E*	o	-u5	+U3	+c	159	+d	2E:	+o	=uE	%		$d+		%u-		0%8	4 	C	&	D	 %(	O	+U3"-I0 ( / /ly,...../ /r$   	base_pathc           	         dD ]}| |z   }t          |           |                    d          rt          }nt          }t	          t          j        |                     |dk    rRdD ]N}	 t	          t          j        ||z                        (# t
          j        $ r}d|j        v sJ Y d }~Gd }~ww xY wn)dD ]&}t	          t          j        ||z                        't          j
        t                    5  t	          t          j        |                     d d d            n# 1 swxY w Y   t          j        |          rJ t          j        |          rJ t          j
        |          5  t          j        |           d d d            n# 1 swxY w Y   |dv r=	 t          j        |           n;# t
          j        $ r}d|j        v sJ Y d }~nd }~ww xY wt          j        |           t          j
        t                     5  t          j        |           d d d            n# 1 swxY w Y   t          j
        t                    5  t          j        |           d d d            n# 1 swxY w Y   | t&          k    rKt          j
        t
          j                  5  t          j        |           d d d            n# 1 swxY w Y   nt          j        |           t          j
        t                    5  t          j        |           d d d            n# 1 swxY w Y   t          j
        t
          j                  5  t          j        |           d d d            n# 1 swxY w Y   t	          t          j        |                     t1          j                    5 }t4          j                            |d          }t          j
        |          5  t          j        ||           d d d            n# 1 swxY w Y   t=          |d	          5 }|                    d
           d d d            n# 1 swxY w Y   t          j
        |          5  t          j        ||           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   dD ]}	t          j
        |          5  t          j         |d|	          5 }|!                                 d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t          j
        |          5  t          j         |d|	          5 }|                    d           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d S )N)r:   r   r  r  z/invalid/dir/r   r:   )rB  rP  zWildcards cannot be used)r:   r   zCannot delete bucketrI  r   meow)FTrz   r   re      meow)"printendswithIsADirectoryErrorrf  r   r   r;  ErrormessagerI   r   r  r   r  r   r   NotADirectoryErrorrM   r   r|  r   ri  r   r0  r/   r0   r   r+   r3   rg  rp   rq   r   r{   )
r  suffixr+   expected_errorrR  r  r4   r}  rv   r   s
             r%   test_invalid_pathsr    s    D <% <%6!d== 	/.NN.NRWT]]R<<& C CC001111x C C C5BBBBBBBBBCC ' . .RWTG^,,----],-- 	# 	#D!!"""	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#9T??"""8D>>!!!]>** 	 	IdOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	Y;8 ; ; ;-:::::::::; HTNNN]-.. 	 	IdOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	],-- 	 	GDMMM	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 :::rx(( ! !
4   ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! Jt],-- 	 	F4LLL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	]28$$ 	 	K	 	 	 	 	 	 	 	 	 	 	 	 	 	 	RWT]](** 	*ffj99J~.. * *j)))* * * * * * * * * * * * * * *j#&&  !                             ~.. * *
D)))* * * * * * * * * * * * * * *	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* ' 	% 	%I~..  [tyAAA QFFHHH                             ~.. % %[tyAAA %QGGG$$$% % % % % % % % % % % % % % %% % % % % % % % % % % % % % %		%m<% <%s  *$BB3B..B39"D''D+	.D+	2FF	F	#F88GGGH--H1	4H1	I22I6	9I6	&KK	K	 L!!L%	(L%	
M++M/	2M/	*5RP5RPRP	RP>2R>QRQRQ?3R?RRRRR	R	9T	S2	&T	2S66T	9S6:T		TT(U9 U"	U9"U&&U9)U&*U99U= U=buffer_sizer   d   c                     |            5 }d}t          j        |d          5 }|                    |           d d d            n# 1 swxY w Y   t          j        |d|           5 }|                    d           d d d            n# 1 swxY w Y   | dk    r|j        j        dk    sJ n|j        j        t          |          k    sJ t          j        |d|           5 }|                    d           |                    d           |                    d           |                    d           |                    d          dk    sJ 	 d d d            n# 1 swxY w Y   | dk    r%|j        j        d	k    sJ |j        j        d	k    sJ n1|j        j        dk    sJ |j        j        t          |          k    sJ d d d            d S # 1 swxY w Y   d S )
Nr   re   rz   )r  r   r  @B r$   r#  )	r   r   rq   r{   raw
bytes_readr   seekrequests)r  r   r+   rt   r   r   s         r%   test_read_statsr  :  s    
 5$[t$$ 	GGH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 [t=== 	FF1III	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 !5#q(((((5#s8}}4444[t=== 	$FF1IIIFF1IIIFF1IIIFF7OOO66!99#####	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ !5>Q&&&&5#q(((((5>Q&&&&5#s8}}444455 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5s~   GAGA			GA		G'B	=G	B	GB	AG#A0E G E$	$G'E$	(AGGGc                    t          j                    }d}d} |             5 }t          j        |d          5 }|                    |           d d d            n# 1 swxY w Y   t          j        |dd|          5 }|                                |k    sJ 	 d d d            n# 1 swxY w Y   t          j        |                                          }t          j	        ||t          j
        |                    }t          |d          5 }|                                |k    sJ 	 d d d            n# 1 swxY w Y   t          |d          5 }|                    |           d d d            n# 1 swxY w Y   t          j        |dd|          5 }|                                |k    sJ 	 d d d            n# 1 swxY w Y   t          j        dt           d	dd|          5 }t          |                                          d
k    sJ 	 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr   s   purr!re   )moderz   F)r  r   	cache_dirr   z:.blob.core.windows.net/publiccontainer/test_cat_no_md5.pngr   )r/   mkdtempr   r   rq   r{   rh  ri  rj  r3   r   rp   AS_EXTERNAL_ACCOUNTr   )r   r  rt   alternative_contentsr+   rv   content_hash
cache_paths           r%   test_cache_dirr  Z  s    ""IH#	 %$[D))) 	QGGH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	[DEYOOO 	(ST6688x'''''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	({8,,6688WYbk$6G6GHH
*d## 	(q6688x'''''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( *d## 	*qGG()))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*[DEYOOO 	4ST6688333333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4[f*fff	
 
 
 	%
 qvvxx==1$$$$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%% % % % % % % % % % % % % % % % % %s   H8AH8A	H8"A	#H8>B&H8&B*	*H8-B*	.A!H8D7+H87D;	;H8>D;	?H8E4(H84E8	8H8;E8	<H8F?3H8?G	H8G	$H8+(H H8 H$	$H8'H$	(H88H<?H<
use_randomc                 0   d}d|z  dz  }d|z  dz  }|rBt          j        t          |                    }t          j        t          |                    } |             5 }t          j        |d          5 }|                    |           d d d            n# 1 swxY w Y   t          j        |d          5 }|                    |          }t          j        |d          5 }|                    |           d d d            n# 1 swxY w Y   d |j        _        ||                                z  }t          |                                          dk    sJ ||d |         ||d          z   k    sJ 	 d d d            n# 1 swxY w Y   t          j        |d          5 }|                    |           d d d            n# 1 swxY w Y   t          j        |d          5 }|                    |          }t          j        |d          5 }|                    |           d d d            n# 1 swxY w Y   d |j        _        ||                                z  }t          |                                          dk    sJ |d |         |||dz           z   }	|	                    d	          s*|	                    d
          s|d |         ||d          z   }	||	k    sJ 	 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )N             r#  re   rz   r   r   r   )
r   urandomr   r   r   rq   r{   r  _frm   )
r   r  
chunk_sizelong_contentsshort_contentsr+   rv   read_contentsf2r  s
             r%   test_change_file_sizer  v  s    Jj(1,Mz)A-N 9
3}#5#566C$7$788	 -$[t$$ 	#GGM"""	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#[t$$ 	]FF:..MT4(( )B((() ) ) ) ) ) ) ) ) ) ) ) ) ) ) AEHQVVXX%Mqvvxx==A%%%% M+:+$>PZP[P[A\$\\\\\\	] 	] 	] 	] 	] 	] 	] 	] 	] 	] 	] 	] 	] 	] 	] [t$$ 	$GGN###	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$[t$$ 	-FF:..MT4(( (B'''( ( ( ( ( ( ( ( ( ( ( ( ( ( ( AEHQVVXX%Mqvvxx==A%%%%%kzk2]:PZ]^P^C^5__H ??7++ TDOOJ4O4O T)+:+6z{{9SS H,,,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-#- - - - - - - - - - - - - - - - - -s   !L7BLB	L B	!L9+F$D:FD

FD
A(F7LF	L
F	L#G9LG			LG		L%+K3H2&K32H66K39H6:B,K3'L3K7	7L:K7	;LLLc                    d}d|z  dz  }d|z  dz  } |             5 }t          j        |d          5 }|                    |           d d d            n# 1 swxY w Y   t          j        |d          5 }|                    |          }t          j        |d          5 }|                    |           d d d            n# 1 swxY w Y   d |j        _        ||                    |          z  }||d |         |||dz           z   k    sJ 	 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr  r  r#  r  r  re   rz   )r   r   rq   r{   r  r  )r   r  rt   r  r+   rv   r  r  s           r%   test_overwrite_while_readingr    sX   J#a'H"Z/!3	 $[t$$ 	GGH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	[t$$ 
	FF:..MT4(( /B-.../ / / / / / / / / / / / / / / AEHQVVJ///MKZK(+?
ZZ[^@[+\\] ] ] ] ]
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	                 s}   D4A	D4A	D4A	D45+D C6DCD	C
ADD4D 	 D4#D 	$D44D8;D8c            	         d} t                      5 }t          j        |          }t          |          5  t          j        |dd          t          j        dt          j        |          d          ddfD ]D}t          j        |d          5 }|                    |            d d d            n# 1 swxY w Y   E	 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr  r   r.   z..z./file.namere   )r5   r   r   r*   r3   r   r   rq   )rt   r+   r   ru   rv   s        r%   #test_create_local_intermediate_dirsr    s   H			 
&4*T""7^^ 	& 	&K88bk'22K@@	 & & [400 &AGGH%%%& & & & & & & & & & & & & & &&	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&
& 
& 
& 
& 
& 
& 
& 
& 
& 
& 
& 
& 
& 
& 
& 
& 
& 
&sY   $C ACB/	#C/B33C6B37C<C C	C C	C  C$'C$binaryc                 $
   t           j                            d          } |            5 }| rd}d}nd}d}t          j        |||          5 }	 d d d            n# 1 swxY w Y   t          j        |||          5 }t          |                                          dk    sJ 	 d d d            n# 1 swxY w Y   d}	| s|	                    d          }	t          j        |||          5 }|                    |	           d d d            n# 1 swxY w Y   t          j        |||          5 }|                    d	          |	d d	         k    sJ |                                |	d	d          k    sJ t          |                                          dk    sJ 	 d d d            n# 1 swxY w Y   t          j        |||          5 }t          t          |	                    D ](}
|                    d	          |	|
|
d	z            k    sJ )t          |                                          dk    sJ t          |                                          dk    sJ 	 d d d            n# 1 swxY w Y   d
}	g d}| s!|	                    d          }	d |D             }t          j        |||          5 }|                    |	           d d d            n# 1 swxY w Y   t          j        |||          5 }|
                                |k    sJ 	 d d d            n# 1 swxY w Y   t          j        |||          5 }d |D             |k    sJ 	 d d d            n# 1 swxY w Y   | rdD ]}|                    dd|t           j                                                  }	t          j        |||          5 }|                    |	           d d d            n# 1 swxY w Y   t          j        |||          5 }|                    dd          }d}	 |                    |          }|dk    rn||z  }"||	k    sJ 	 d d d            n# 1 swxY w Y   ndd	i}t          j        |||          5 }t          j        ||           d d d            n# 1 swxY w Y   t          j        |||          5 }t          j        |          |k    sJ 	 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr   rz   re   r   r   r   r   utf8r   s   meow!

mew!
)r      
s   mew!
c                 8    g | ]}|                     d           S )r  )decoderB   lines     r%   r  z(test_more_read_write.<locals>.<listcomp>  s$    ;;;TT[[((;;;r$   c                     g | ]}|S r#   r#   r  s     r%   r  z(test_more_read_write.<locals>.<listcomp>  s    '''TD'''r$   )rc  iNa    r   dtyper  r$   Tr~   )npr=   RandomStater   r   r   r{   r  rq   rK   	readlinesrandintuint8tobytesjsondumpload)r  r   r   rngr+   	read_mode
write_moder   r   rt   rC   r   r   bufr   objs                   r%   test_more_read_writer    sn    )


"
"C	 F+$ 	IJJIJ[zY??? 	1	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 [yI>>> 	&!qvvxx==A%%%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&  	/v..H[zY??? 	1GGH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 [yI>>> 	&!66!99!,,,,6688x|++++qvvxx==A%%%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&
 [yI>>> 	&!3x==)) 8 8vvayyHQQY$777777qvvxx==A%%%%qvvxx==A%%%%%		& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& &... 	<v..H;;U;;;E[zY??? 	1GGH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 [yI>>> 	*!;;==E)))))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* [yI>>> 	1!''Q'''500000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1  	+/ + +;;q#D;IIQQSS[zYGGG &1GGH%%%& & & & & & & & & & & & & & & [yIFFF +!;;q)44DC!FF4LL88!q	!
 (?????+ + + + + + + + + + + + + + ++  (CT:CCC "q	#q!!!" " " " " " " " " " " " " " " T9	BBB +ay||s*****+ + + + + + + + + + + + + + +KF+ F+ F+ F+ F+ F+ F+ F+ F+ F+ F+ F+ F+ F+ F+ F+ F+ F+s  #TATA	T"A	#T=(B2&T2B6	6T9B6	:3T-DTD	TD	T1A-F+T+F/	/T2F/	3TBI."T.I2	2T5I2	6AT9KTK	T"K	#T=L%T%L)	)T,L)	-TM'T'M+	+T.M+	/ATO&T&O**T-O*.TAQTQT Q! TR#T#R'	'T*R'	+TS-!T-S1	1T4S1	5TT	T	c                    	 dd l }dd l}n$# t          $ r t          j        d           Y nw xY wt
          j                            d          }d}|                    ddt          j	        |          t
          j
                                      |          } |            5 }t          j        |d|           5 }|                    |dd d	d
g d          5 }	|D ]}
|	                    |
           	 d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t          j        |d|           5 }|                    |dddg          5 }t#          |          D ]"\  }}
t          j        |
||                   sJ #	 d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t          j        |d|           5 }|                    |          }|j        j        d         }t#          |                    |                    D ]4\  }}
t          j        |
                                ||                   sJ 5	 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr   z)av and imageio are required for this test)r  @   r  r  r  r  re   )r  r   ffmpeg
libx264rgbbgr24)-fmp4z-crf0)formatqualitycodecpixelformatoutput_paramsrz   r  r  )r  input_params)avimageiorH   rI   rJ   r  r=   r  r  prodr  reshaper   r   
get_writerappend_data
get_reader	enumeratearray_equalrp   streamsvideor  to_image)r   r   r  r   r  shape
video_datar+   wfr   framerfr   idxr^   streams                   r%   
test_videor    sk   A			 A A A?@@@@@A )


"
"CEQ"'%..IIQQRWXXJ	 I$[DI>>> 
	)"##"#888 $   	) ' ) )EMM%(((()	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)
	) 
	) 
	) 
	) 
	) 
	) 
	) 
	) 
	) 
	) 
	) 
	) 
	) 
	) 
	) [DI>>> 	B"##BxtUm#TT BXY"+A,, B BJC>%CAAAAAABB B B B B B B B B B B B B B B	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B
 [DI>>> 	I"I&,Q/F'	(8(8(@(@AA I I
U~enn&6&6
3HHHHHHI	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I%I I I I I I I I I I I I I I I I I Is    ,,"I1:DD 4D DDDDI1D	I1D	I19F+3FF+FF+FF+I1+F/	/I12F/	3I1A?II1I	I1 I	!I11I58I5c                 r   ddz  } |             5 }t          j        |dd          5 }|                    |           d d d            n# 1 swxY w Y   t          j        |dd          5 }||                                k    sJ 	 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )N   0l        re   Tr   rz   r   )r   rt   r+   rv   s       r%   test_large_filer  :  sz    e|H	 ($[tt444 	GGH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	[tt444 	(qvvxx'''''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (sW   B,A
B,
A	B,A	B,,BB,B	B,B	B,,B03B0c            	         t                      5 t                      5 ddz  } t          d          5 }|                    |            d d d            n# 1 swxY w Y   fd}t	          j        |                                           } |             t          j                  j        J |t          j                  k    sJ t          j                  j        |k    sJ |t          j                  k    sJ t          j	                    |             t          j                  j        J t          j                    5 }t          j        d|d          5 }|                                | k    sJ 	 d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t          j                  j        |k    sJ 	 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Ns   00r  re   c                  @    t          j        dddd gd           d S )Ngsutilz-oz-GSUtil:parallel_composite_upload_threshold=1McpT)rZ   )r!   r"   )r}  r  s   r%   create_composite_filez5test_composite_objects.<locals>.create_composite_fileL  sB     G"# 
 
 
 
 
 
r$   rz   F)r  r   )rN   r5   rp   rq   rh  ri  rj  r   r   r   r/   r0   r   r{   )rt   rv   r  	local_md5r4   r}  r  s        @@r%   test_composite_objectsr  E  sJ   			 !9!##  	9z%'Hj$'' "1!!!" " " " " " " " " " " " " " "       H--7799I!!###7;''+333{ 3 333337;''+y8888{ 3 33333Ik"""!!###7;''+333,.. 0&[dfPUVVV 0Z[6688x/////0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7;''+y88888A 	9  	9  	9  	9  	9  	9  	9  	9  	9  	9  	9  	9  	9  	9  	9!9 !9 !9 !9 !9 !9 !9 !9 !9 !9 !9 !9 !9 !9 !9 !9 !9 !9s   G:G"AG"AG"A C3G"F+,F	F+FF+FF+G"+F//G"2F/3"G"G:"G&	&G:)G&	*G::G>G>c                 b   d}t          j        |                                          } |             5 }t          ||           t	          j        |          |k    sJ t	          j        |d          5 }|                    |           d d d            n# 1 swxY w Y   t	          j        |          |k    sJ t	          j        |d          5 }|                    |           d d d            n# 1 swxY w Y   t	          j        |          |k    sJ 	 d d d            d S # 1 swxY w Y   d S )Nr   re   )rh  ri  rj  rw   r   r   rq   )r   rt   	meow_hashr+   rv   s        r%   test_md5r  j  s   HH%%//11I	 )$h'''vd||y(((([t$$ 	GGH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	vd||y(((([t$$ 	GGH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	vd||y((((() ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )sZ   A D$3B	D$B	D$B	2D$C1%D$1C5	5D$8C5	9D$$D(+D(c                    d}t          j        |                                          }d}t          j        |                                          } |             5 }t          ||           t	          j        t          j        j        |          }t	          j	        t          j        j        ||j
        |          sJ t          ||           t	          j	        t          j        j        ||j
        |          rJ t	          j        t          j        j        |          }|j        |k    sJ t          j        |           t	          j	        t          j        j        ||j
        |          rJ 	 d d d            d S # 1 swxY w Y   d S )Nr   s   purr)rh  ri  rj  rw   rn   
maybe_statopsdefault_context_confmaybe_update_md5versionr   r   )r   rt   r  r  	purr_hashr+   r   s          r%   test_azure_maybe_update_md5r(  z  s   HH%%//11I"011;;==I	 	b$h'''c17>>%c&9&?rzS\]]]]]2333)#*=*CT2:W`aaaaac17>>v""""
	$)#*=*CT2:W`aaaaaa	b 	b 	b 	b 	b 	b 	b 	b 	b 	b 	b 	b 	b 	b 	b 	b 	b 	bs   DE::E>E>c                    d}d} |             5 }t          j        |d                              |           t          j        |          j        }t          j        |d|          5 }t          d          D ]}|                    |           	 d d d            n# 1 swxY w Y   t          j        |          j        }t          j        |d|          5 }|                    |           d d d            n# 1 swxY w Y   t          j        |          j        }||k    sJ t          j        t           j                  5  t          j        |d|          5 }|                    |           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t          j        |d          	                                |k    sJ t          j
        |           d d d            d S # 1 swxY w Y   d S )Ns   bark!s   ruffre   )r&  i  rz   )r   r   rq   r   r&  rK   rI   r   VersionMismatchr{   r   )r   rt   r  r+   r&  rv   r   new_versions           r%   test_azure_etagsr,    s   H"	 $
D$%%h///'$--' [tW555 	.4[[ . .,----.	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.
 '$--'[tW555 	*GG()))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* gdmm+g%%%%]2-.. 	" 	"T4999 "Q!!!" " " " " " " " " " " " " " "	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"
 {4&&++--1EEEEE
	$1                 s   AG.((BG.B!	!G.$B!	%3G.C:.G.:C>	>G.C>	AG.FE>2F>FFFF	G.F	G.F	AG..G25G2c                 	   d}d} |             5 }	 t          j        |           n# t          $ r Y nw xY wt          j        |dd          5 }|                    |           t          j        |          J |                    |           d d d            n# 1 swxY w Y   t          j        |          }t          j        |dd          5 }|                    t          |                    |k    sJ t          j        |          }|J |                                |k    sJ 	 d d d            n# 1 swxY w Y   t          j        |          }||k    sJ ||k    sJ t          j        |           d}d}	t          j        |dd          5 }|                    |           d d d            n# 1 swxY w Y   t          j        |dd          5 }
|
                    |	           d d d            n# 1 swxY w Y   t          j        |          }t          j        |
          }||k    sJ t          j	        t           j
                  5  t          j        |dd|	          5 }|                                |k    sJ 	 d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t          j        |dd          5 }|                                |	k    sJ 	 d d d            n# 1 swxY w Y   t          j        |          }||k    sJ t          j        |           t          j        |dd          5 }|                    d
dz             d d d            n# 1 swxY w Y   t          j        |ddd          5 }|                    d          dk    sJ t          j        |dd          5 }|                    ddz             d d d            n# 1 swxY w Y   t          j	        t           j
                  5  |                    d           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t          j        |           d d d            d S # 1 swxY w Y   d S )Ns   hellos    worldre   Tr   rz   s   hi theres	   overwrite)r   r&  s   abcdefgh   rE   )r   r  s   abcdefghabcdefghs   ijklmnop)r   r   rf  r   rq   last_version_seenr{   r   rI   r   r*  )r   part1part2r+   rv   written_versionpartial_read_versionread_versiondata1data2r  version1version2gs                 r%   test_azure_etags_last_versionr:    sA   EE	 6$	IdOOOO  	 	 	D	 [tt444 	GGENNN'**222GGENNN		 	 	 	 	 	 	 	 	 	 	 	 	 	 	
 .q11[tt444 	%66#e**%%....#%#7#:#: '3336688u$$$$$		% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%
 +A..#|3333,....
	$[tt444 	GGENNN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	[tt444 	HHUOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	'**'++8####]2-.. 	) 	)T44JJJ )avvxx5((((() ) ) ) ) ) ) ) ) ) ) ) ) ) )	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) [tt444 	%6688u$$$$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%+A..x''''
	$[tt444 	(GGK$&'''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	([ttDDD 	66"::0000T44888 ,Ad*+++, , , , , , , , , , , , , , ,r122  r


              		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 		$m6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6s  Q7&Q7
3Q73Q7ABQ7B	Q7!B	".Q7AD8,Q78D<	<Q7?D<	 AQ7F8,Q78F<	<Q7?F<	 Q7G<0Q7<H 	 Q7H 	AQ7J-.J
J-JJ-JJ-!Q7-J1	1Q74J1	5Q7K7+Q77K;	;Q7>K;	?A
Q7	M."Q7.M2	2Q75M2	6Q73QO)Q)O--Q0O-1!QP4(Q4P88Q;P8<Q?Q7Q	Q7Q	Q77Q;>Q;c           	      :   t           j        dt          fd            } |             5 } ||          5 }t          j                            d          5 }t          d          |_        |                    d           t          j
        t                    5  |                    ddz             d d d            n# 1 swxY w Y   |j        dk    sJ 	 d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )	Nfnc              3     K   t          j        d          }|                    | dd          5 }	 |V  |                    d           n# |                    d           w xY w	 d d d            d S # 1 swxY w Y   d S )Nr.  r  re   Tr      asdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdf)r   r   r   rq   )r<  bfcrv   s      r%   trailer_filez5test_azure_buffer_error_finally.<locals>.trailer_file  s      t<<<\\"dd\33 	(q('''''''''		( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(s'   A4AA4A##A44A8;A8#blobfile._azure.execute_api_requestasdfs   asdfr>  r#  r   )
contextlibcontextmanagerr2   unittestmockpatchRuntimeErrorside_effectrq   rI   r   
call_count)r   r@  r+   rv   rF  s        r%   test_azure_buffer_error_finallyrK    s    ( ( ( ( ( 
 ,$\$ 	,1$$%JKK ,t#/#7#7    ]<00 0 0GGNQ.///0 0 0 0 0 0 0 0 0 0 0 0 0 0 0!+++++, , , , , , , , , , , , , , ,	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,, , , , , , , , , , , , , , , , , ,s}   D C8AC!B<	0C!<C  C!C C!C8!C%%C8(C%)C8,D8C<	<D?C<	 DDDc                  t    d} dt           dt          fd} ||           t          j        |           k    sJ d S )NzSun, 27 Sep 2009 18:41:57 GMTtextreturnc                     t           j                             |                     dd          d                                          S )NGMTZz%a, %d %b %Y %H:%M:%S %z)datetimestrptimer   	timestamp)rM  s    r%   ref_parse_timestampz9test_azure_timestamp_parsing.<locals>.ref_parse_timestamp  s:     ))LL$$&@
 

)++	r$   )r2   floatrn   _parse_timestamp)rT  rU  s     r%   test_azure_timestamp_parsingrX    sX    /I# %    
 y))U-CI-N-NNNNNNNr$   c                     |                      t          t          j        j                                                             d S r(   )putidr"  r#  r$  get_http_pool)qs    r%   _get_http_pool_idr^    s4    EE"S &4466
7
788888r$   c                     t          j                    } t          j        j                                        }t          |          }t          j        t          | f          }|	                                 |
                                 t          j        j                                        }t          |          }|                                 }||k    sJ ||k    sJ d S )N)targetargs)mpQueuer"  r#  r$  r\  r[  Processr^  startr3   get)r]  http1parent1r7  http2parent2childs          r%   	test_forkrl    s    


A %3355EiiG

+1$777AGGIIIFFHHH%3355EiiGEEGGEgGr$   c                     d dt            dft          j        dt            dft          dt           dffD ]\  } }t          j                    }| t          j        |           }|5  t          j	        |d          5 }|
                                }|                    t                    sJ 	 d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d S )Nr   r   z+.blob.core.windows.net/private/test_cat.pngrz   )r  r   r  rf  AS_INVALID_ACCOUNTrC  nullcontextrI   r   r   r{   rm   r   )errorr+   r   rv   rt   s        r%   test_azure_public_containerrq  "  s   	b-bbbcHW*WWW	

 ^)^^^	

 D Dt $&&-&&C 	D 	DT4(( DA6688**+BCCCCCCD D D D D D D D D D D D D D D	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	DD Ds6   &C<1B:.C:B>>CB>CC	C	c                  l   d t           ft          t          ft          t          ft          j        dt           dffD ]x\  } }t          j                    }| t          j
        |           }|5  t          |           t          t	          j        |                     d d d            n# 1 swxY w Y   yd S )Nr   z.blob.core.windows.net/private)r  rf  r{  r|  r   r  r  rC  ro  rI   r   r  r   r$  )rp  r+   r   s      r%   test_scandir_errorrs  7  s    	$%	34	>?	Q1QQQR	 # #t $&&-&&C 	# 	#$KKKD!!"""	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	## #s   +1B((B,	/B,	c                  P   t                      5 } t          | d          5 }|                    d           d d d            n# 1 swxY w Y   t          | d          5 }t          j        |dd          }|                                dk    sJ |                    d           |                    d          |                    d          z   |                    d          z   dk    sJ t          j        t                    5  |                    d	           d d d            n# 1 swxY w Y   t          j        t                    5  |                    d
           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nre   r  rz   r   r  )re  ends   eor   r	  r#  )
r5   rp   rq   r  WindowedFiler{   r  rI   r   AssertionError)r+   rv   r  s      r%   test_windowed_filerx  F  s   			 4$ 	GGG	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 $ 	$QaQ777B7799%%%%GGAJJJ771::

*RWWQZZ75@@@@~..                 ~..  


              	 	 	 	 	 	 	 	 	 	 	 	 	 	 		                 s   FAFA	F	A	
FB'FD&F&D**F-D*.F
E, F,E00F3E04F7FF	F
F	FF"Fc                   0    e Zd Zd ZdeddfdZdefdZdS )Deadlinec                     d | _         d S r(   	_deadlineselfs    r%   __init__zDeadline.__init__Z  s    r$   deadlinerN  Nc                     || _         d S r(   r|  )r  r  s     r%   set_deadlinezDeadline.set_deadline]  s    !r$   c                     | j         S r(   r|  r~  s    r%   get_deadlinezDeadline.get_deadline`  s
    ~r$   )__name__
__module____qualname__r  rV  r  r  r#   r$   r%   rz  rz  Y  s`          "U "t " " " "e      r$   rz  c                 \   d} |             5 }t          ||           t                      }t          j        |j                  }|                    t          j                    dz              |                    |d          5 }|                                 d d d            n# 1 swxY w Y   t          j	        d           t          j        t          j                  5  |                    |d          5 }|                                 d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |                    d            |                    |d          5 }|                                 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr  )r  r   rz   )rw   rz  r   r   r  r  r   r   r{   r   rI   r   DeadlineExceeded)r   rt   r+   r  bf_ctxrv   s         r%   test_deadliner  d  s   H	 $h'''::"0EFFFdikkAo...__T4(( 	AFFHHH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
1]2.// 	 	t,,               	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	d###__T4(( 	AFFHHH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	                 s   A8F!B&F!&B*	*F!-B*	.5F!#D2:DD2DD2"D#D2&F!2D6	6F!9D6	:.F!(F	=F!	F	F!F	F!!F%(F%c                      t          j                    } | j        }t          j        |           |                                 t          j        t          j        |                    }|                                 d S r(   )r"  r   r$  pickledumpsr\  loads)r   r   c2s      r%   test_pickle_configr  w  sc    



C	A
LOOOOO	fl1oo	&	&Br$   c                 $   d} |             5 }t          j        |dd          }t          j        t          j        |                     t          j        |d          5 }|                    |           d d d            n# 1 swxY w Y   t          j        |dd          5 }|                                |d d         k    sJ |                                dk    sJ 	 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr   r   r   re   rz   r   )	file_size)r   r3   r   r   r   rq   r{   r   )r   rt   r+   r   r   s        r%   test_read_with_sizer    s   H	 !$wtZ22
BJt$$%%%[t$$ 	GGH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	[tq111 	!Q6688x|++++6688q=====	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !sZ   ADB5DB	DB		D#=C-!D-C1	1D4C1	5DD	D	c                  >   t          j        d          } dt           dt           d}t          j                            d          5 }t          j        | j	        |d            |j
        D ]}|j        d         j        dv sJ 	 d d d            d S # 1 swxY w Y   d S )	NTuse_blind_writesr   rQ   z/filerA  r   )PUTPOST)r   r   r   r   rE  rF  rG  rn   StreamingWriteFiler$  call_args_listra  method)r   r+   	mock_execcalls       r%   3test_use_blind_writes_skips_uncommited_blocks_checkr    s    

T
2
2
2CVoVV>OVVVD			B	C	C :y D$777, 	: 	:D9Q<&/99999	:: : : : : : : : : : : : : : : : : :s   <BBBc                     t          j        d          } t          j                            d          5 }t          j        | j        ddt
          j        dfg           sJ |	                                 d d d            d S # 1 swxY w Y   d S )NTr  z&blobfile._azure.common.execute_requestaccr^   r:   )
r   r   rE  rF  rG  rn   _can_access_containerr$  	ANONYMOUSassert_not_called)r   r  s     r%   0test_use_blind_writes_skips_can_access_containerr    s    

T
2
2
2C			E	F	F &)*39e[5?\^J_acddddd##%%%& & & & & & & & & & & & & & & & & &s   A BB	B){rC  rR  rh  r  multiprocessingrb  r   r  r   r=   r   r?   
subprocessr!   r/   r   unittest.mockrE  urllib.requestr   warningsr   numpyr  rI   blobfiler   r   rn   r   r  r   r"  getenvr   r   r	   r   r   rn  r  r  r{  r|  r  r  r   r   fixturer&   rD  r*   r5   rN   ra   rw   r|   r   r   r   r   r   markparametrizer   r   r   r   r   r   r   r   r   r   r  r  r  r  r&  r+  r1  rC  rM  rU  ra  rx  r  slowr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r(  r,  r:  rK  rX  r^  rl  rq  rs  rx  rz  r  r  r  r  r  r#   r$   r%   <module>r     sN              				    				                           $ $ $ $ $ $ & & & & & &            ")-|<<")-/@AA29/1BCC BI13CDD RY35EFF '888 ' EEE2CEE V/VV4EVVV %U-?%U%UBS%U%U ",?,, =_===  X"WWW  %  i...
 
 /.
          -9J N N N N*( ( (V$ $ $N/ / /.)< )< )<XFN FN FNRS S SO O O !57IK\ ]^^> > _^>: : : !57IK\ ]^^tUm44/ / 54 _^/  !35F GHH5 5 IH5/ / /  !57IK\ ]^^	> 	> _^	> !57IK\ ]^^0 0 _^0 !57IK\ ]^^0 0 _^0 !2 344  54  !57IK\ ]^^# # _^# 	*+ 
  
2 !57IK\ ]^^@ @ _^@ !57IK\ ]^^* * _^*, !57IK\ ]^^= = _^=$ !57IK\ ]^^' ' _^'* !57IK\ ]^^
 
 _^
2 !57IK\ ]^^UDM22C C 32 _^C. !5 677'/ '/ 87'/T !57IK\ ]^^eT]33>T >T 43 _^>TB !57IK\ ]^^*E *E _^*EZ !57IK\ ]^^eT]332
 2
 43 _^2
j eT]337 7 437B eT]33P P 43P> !35F GHH: : IH :"B B B7 7 7 !57IK\ ]^^  _^. . .. . .$   / / /: 46MOab =% =% =%@ C11!35F GHH5 5 IH 215< !35F GHH% % IH%6 !57IK\ ]^^t}55%- %- 65 _^%-P !57IK\ ]^^  _^(& & & D%=11tUm44!57IK\ ]^^I+ I+ _^ 54 21I+X tUm44!57IK\ ]^^!I !I _^ 54!IJ !57IK\ ]^^( ( _^ ("9 "9 "9J !57IK\ ]^^) ) _^) !2 344b b 54b$ !2 344  54> !2 344: : 54:z !2 344, , 54,,O O O9 9 9  "D D D*# # #  &        !35F GHH  IH$   !35F GHH	! 	! IH	!: : :& & & & &r$   