ó
    Ú°›jo´  ã                   ó¢  • S SK r S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKJ	r	  S SK
Jr  S SKJrJr  S SKJr  S SKJrJrJrJrJrJrJrJrJrJrJr  S SKJrJrJ r J!r!  S SK"J#r#J$r$J%r%  \RL                  " \'5      r(S	r)S
r*Sr+Sr,/ SQr-Sr.Sr/S r0S r1 " S S5      r2 " S S\25      r3 " S S\25      r4 " S S\25      r5 " S S\25      r6 " S S\65      r7 " S S\75      r8 " S  S!\85      r9 " S" S#\85      r: " S$ S%\65      r; " S& S'\;5      r< " S( S)\65      r= " S* S+\25      r> " S, S-\>5      r? " S. S/\>5      r@ " S0 S1\35      rAS2 rBS3 rC\4\5\5\>\?\@\=\8\:\9\AS4.rD\(       a  S S5KEJFrF  \DR�                  \F5        O\DR�                  \6\;\7\<S6.5        S7S8S9S:S;.rH\HR“                  5        V Vs0 s H  u  pU R•                  S<5      S=   U_M     snn rKgs  snn f )>é    N)ÚMapping©Ú
formatdate)Úsha1Úsha256)Ú
itemgetter)ÚHAS_CRTÚMD5_AVAILABLEÚHTTPHeadersÚencodebytesÚensure_unicodeÚget_current_datetimeÚparse_qsÚquoteÚunquoteÚurlsplitÚ
urlunsplit)ÚNoAuthTokenErrorÚNoCredentialsErrorÚUnknownSignatureVersionErrorÚ UnsupportedSignatureVersionError)Úis_valid_ipv6_endpoint_urlÚnormalize_url_pathÚpercent_encode_sequenceÚ@e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855i   z%Y-%m-%dT%H:%M:%SZz%Y%m%dT%H%M%SZ)Ú
connectionÚexpectz
keep-alivezproxy-authenticatezproxy-authorizationÚteÚtrailerztransfer-encodingÚupgradez
user-agentzx-amzn-trace-idzUNSIGNED-PAYLOADz"STREAMING-UNSIGNED-PAYLOAD-TRAILERc                 óø   • [        U 5      nUR                  n[        U 5      (       a  SU S3nSSS.nUR                  b:  UR                  UR	                  UR
                  5      :w  a  U SUR                   3nU$ )NÚ[Ú]éP   i»  )ÚhttpÚhttpsÚ:)r   Úhostnamer   ÚportÚgetÚscheme)ÚurlÚ	url_partsÚhostÚdefault_portss       ÚJ/home/mande/repo/quber/.venv/lib/python3.13/site-packages/botocore/auth.pyÚ_host_from_urlr1   Q   s€   € ô
 ˜“€IØ×Ñ€DÜ! #×&Ñ&Ø�4�&˜ˆ{ˆàØñ€Mð ‡~�~Ñ!Ø�>‰>˜]×.Ñ.¨y×/?Ñ/?Ó@Ó@Ø�V˜1˜YŸ^™^Ð,Ð-ˆDØ€Kó    c                 óì   • U R                   n[        U[        5      (       a'  [        R                  " UR                  S5      5      nU$ [        U[        5      (       a  [        R                  " U5      nU$ ©Núutf-8)ÚdataÚ
isinstanceÚbytesÚjsonÚloadsÚdecodeÚstr)Úrequestr6   s     r0   Ú_get_body_as_dictr>   d   sZ   € ð
 �<‰<€DÜ�$œ×ÑÜ�zŠz˜$Ÿ+™+ gÓ.Ó/ˆð €Kô 
�Dœ#×	Ñ	Ü�zŠz˜$ÓˆØ€Kr2   c                   ó"   • \ rS rSrSrSrS rSrg)Ú
BaseSigneréq   Fc                 ó   • [        S5      e)NÚadd_auth)ÚNotImplementedError©Úselfr=   s     r0   rC   ÚBaseSigner.add_authu   s   € Ü! *Ó-Ð-r2   © N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__ÚREQUIRES_REGIONÚREQUIRES_TOKENrC   Ú__static_attributes__rH   r2   r0   r@   r@   q   s   † Ø€OØ€Nõ.r2   r@   c                   ó    • \ rS rSrSr S rSrg)ÚTokenSigneréy   Tc                 ó   • Xl         g ©N©Ú
auth_token)rF   rV   s     r0   Ú__init__ÚTokenSigner.__init__   s   € Ø$�r2   rU   N)rI   rJ   rK   rL   rN   rW   rO   rH   r2   r0   rQ   rQ   y   s   † Ø€Nðõ%r2   rQ   c                   ó*   • \ rS rSrSrS rS rS rSrg)Ú	SigV2Authéƒ   z#
Sign a request with Signature V2.
c                 ó   • Xl         g rT   ©Úcredentials©rF   r^   s     r0   rW   ÚSigV2Auth.__init__ˆ   ó   € Ø&Õr2   c                 óF  • [         R                  S5        [        UR                  5      nUR                  n[        U5      S:X  a  SnUR                   SUR                   SU S3n[        R                  " U R                  R                  R                  S5      [        S9n/ n[        U5       H`  nUS:X  a  M  [        X(   5      n	[!        UR                  S5      SS	9n
[!        U	R                  S5      S
S	9nUR#                  U
 SU 35        Mb     SR%                  U5      nX\-  n[         R                  SU5        UR'                  UR                  S5      5        [(        R*                  " UR-                  5       5      R/                  5       R1                  S5      nXÍ4$ )Nz$Calculating signature using v2 auth.r   Ú/Ú
r5   ©Ú	digestmodÚ	SignatureÚ ©Úsafez-_~Ú=Ú&zString to sign: %s)ÚloggerÚdebugr   r,   ÚpathÚlenÚmethodÚnetlocÚhmacÚnewr^   Ú
secret_keyÚencoder   Úsortedr<   r   ÚappendÚjoinÚupdateÚbase64Ú	b64encodeÚdigestÚstripr;   )rF   r=   ÚparamsÚsplitro   Ústring_to_signÚlhmacÚpairsÚkeyÚvalueÚ
quoted_keyÚquoted_valueÚqsÚb64s                 r0   Úcalc_signatureÚSigV2Auth.calc_signature‹   s_  € Ü�‰Ð;Ô<Ü˜Ÿ™Ó%ˆØ�z‰zˆÜˆt‹9˜‹>ØˆDØ#ŸN™NÐ+¨2¨e¯l©l¨^¸2¸d¸VÀ2ÐFˆÜ—’Ø×Ñ×'Ñ'×.Ñ.¨wÓ7Ä6ñ
ˆð ˆÜ˜&–>ˆCð �kÓ!ÙÜ˜™Ó$ˆEÜ˜sŸz™z¨'Ó2¸Ñ<ˆJÜ  §¡¨gÓ!6¸UÑCˆLØ�L‰L˜J˜< q¨¨Ð7Ö8ñ "ð �X‰X�e‹_ˆØÑˆÜ�‰Ð)¨>Ô:Ø�‰�^×*Ñ*¨7Ó3Ô4Ü×Ò˜uŸ|™|›~Ó.×4Ñ4Ó6×=Ñ=¸gÓFˆØˆyÐr2   c                 óÆ  • U R                   c
  [        5       eUR                  (       a  UR                  nOUR                  nU R                   R                  US'   SUS'   SUS'   [
        R                  " [        [
        R                  " 5       5      US'   U R                   R                  (       a  U R                   R                  US'   U R                  X5      u  p4XBS'   U$ )	NÚAWSAccessKeyIdÚ2ÚSignatureVersionÚ
HmacSHA256ÚSignatureMethodÚ	TimestampÚSecurityTokenrg   )r^   r   r6   r   Ú
access_keyÚtimeÚstrftimeÚISO8601ÚgmtimeÚtokenrŠ   )rF   r=   r   rˆ   Ú	signatures        r0   rC   ÚSigV2Auth.add_auth§   sÀ   € ð ×ÑÑ#Ü$Ó&Ð&Ø�<�<à—\‘\‰Fð —^‘^ˆFØ#'×#3Ñ#3×#>Ñ#>ˆÐÑ Ø%(ˆÐ!Ñ"Ø$0ˆÐ Ñ!Ü"Ÿmšm¬G´T·[²[³]ÓCˆˆ{ÑØ×Ñ×!×!Ø&*×&6Ñ&6×&<Ñ&<ˆF�?Ñ#Ø×+Ñ+¨GÓ<‰ˆØ'ˆ{ÑØˆr2   r]   N)	rI   rJ   rK   rL   Ú__doc__rW   rŠ   rC   rO   rH   r2   r0   rZ   rZ   ƒ   s   † ñò'òõ8r2   rZ   c                   ó    • \ rS rSrS rS rSrg)Ú	SigV3AuthéÀ   c                 ó   • Xl         g rT   r]   r_   s     r0   rW   ÚSigV3Auth.__init__Á   ra   r2   c                 ó  • U R                   c
  [        5       eSUR                  ;   a  UR                  S	 [        SS9UR                  S'   U R                   R                  (       a@  SUR                  ;   a  UR                  S	 U R                   R                  UR                  S'   [
        R                  " U R                   R                  R                  S5      [        S9nUR                  UR                  S   R                  S5      5        [        UR                  5       5      R                  5       nSU R                   R                   SUR                  S5       3nS	UR                  ;   a  UR                  S		 XAR                  S	'   g )
NÚDateT©ÚusegmtúX-Amz-Security-Tokenr5   re   zAWS3-HTTPS AWSAccessKeyId=z ,Algorithm=HmacSHA256,Signature=zX-Amzn-Authorization)r^   r   Úheadersr   r™   rs   rt   ru   rv   r   rz   r   r}   r~   r”   r;   )rF   r=   Únew_hmacÚencoded_signaturerš   s        r0   rC   ÚSigV3Auth.add_authÄ   sJ  € Ø×ÑÑ#Ü$Ó&Ð&Ø�W—_‘_Ó$Ø—‘ Ð'Ü",°DÑ"9ˆ�‰˜ÑØ×Ñ×!×!Ø%¨¯©Ó8Ø—O‘OÐ$:Ð;Ø6:×6FÑ6F×6LÑ6LˆG�O‰OÐ2Ñ3Ü—8’8Ø×Ñ×'Ñ'×.Ñ.¨wÓ7Ä6ñ
ˆð 	�‰˜Ÿ™¨Ñ/×6Ñ6°wÓ?Ô@Ü'¨¯©Ó(9Ó:×@Ñ@ÓBÐà(¨×)9Ñ)9×)DÑ)DÐ(Eð F.Ø.?×.FÑ.FÀwÓ.OÐ-PðRð 	ð " W§_¡_Ó4Ø—‘Ð 6Ð7Ø2;�‰Ð.Ò/r2   r]   N)rI   rJ   rK   rL   rW   rC   rO   rH   r2   r0   rž   rž   À   s   † ò'õ<r2   rž   c                   ó¤   • \ rS rSrSrSrS rSS jrS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rSrg)Ú	SigV4AuthéÜ   z#
Sign a request with Signature V4.
Tc                 ó(   • Xl         X0l        X l        g rT   )r^   Ú_region_nameÚ_service_name©rF   r^   Úservice_nameÚregion_names       r0   rW   ÚSigV4Auth.__init__ã   s   € Ø&Ôð (ÔØ)Õr2   c                 óø   • U(       a:  [         R                  " XR                  S5      [        5      R	                  5       nU$ [         R                  " XR                  S5      [        5      R                  5       nU$ r4   )rs   rt   rv   r   Ú	hexdigestr}   )rF   r„   ÚmsgÚhexÚsigs        r0   Ú_signÚSigV4Auth._signë   sW   € ÞÜ—(’(˜3§
¡
¨7Ó 3´VÓ<×FÑFÓHˆCð ˆ
ô —(’(˜3§
¡
¨7Ó 3´VÓ<×CÑCÓEˆCØˆ
r2   c                 óÜ   • [        5       nUR                  R                  5        H%  u  p4UR                  5       nU[        ;  d  M!  XBU'   M'     SU;  a  [        UR                  5      US'   U$ )zS
Select the headers from the request that need to be included
in the StringToSign.
r.   )r   r§   ÚitemsÚlowerÚSIGNED_HEADERS_BLACKLISTr1   r,   )rF   r=   Ú
header_mapÚnamer…   Úlnames         r0   Úheaders_to_signÚSigV4Auth.headers_to_signò   se   € ô
 !“]ˆ
Ø"Ÿ?™?×0Ñ0Ö2‰KˆDØ—J‘J“LˆEØÔ4Õ4Ø$)˜5Ó!ñ 3ð ˜Ó#ô "0°·±Ó!<ˆJ�vÑØÐr2   c                 ó¢   • UR                   (       a  U R                  UR                   5      $ U R                  [        UR                  5      5      $ rT   )r   Ú_canonical_query_string_paramsÚ_canonical_query_string_urlr   r,   rE   s     r0   Úcanonical_query_stringÚ SigV4Auth.canonical_query_string  s:   € ð
 �>�>Ø×6Ñ6°w·~±~ÓFÐFà×3Ñ3´H¸W¿[¹[Ó4IÓJÐJr2   c           	      ó<  • / n[        U[        5      (       a  UR                  5       nU H1  u  p4UR                  [	        USS9[	        [        U5      SS945        M3     / n[        U5       H  u  p4UR                  U SU 35        M     SR                  U5      nU$ )Nz-_.~ri   rk   rl   )r7   r   r½   rx   r   r<   rw   ry   )rF   r   Úkey_val_pairsr„   r…   Úsorted_key_valsrÈ   s          r0   rÆ   Ú(SigV4Auth._canonical_query_string_params  s›   € àˆÜ�fœg×&Ñ&Ø—\‘\“^ˆFÛ ‰JˆCØ× Ñ Ü�s Ñ(¬%´°E³
ÀÑ*HÐIöñ !ð ˆô ! Ö/‰JˆCØ×"Ñ" c U¨!¨E¨7Ð#3Ö4ñ 0à!$§¡¨/Ó!:ÐØ%Ð%r2   c                 ó:  • SnUR                   (       a‡  / nUR                   R                  S5       H)  nUR                  S5      u  pVnUR                  XW45        M+     / n[	        U5       H  u  pWUR                  U SU 35        M     SR                  U5      nU$ )Nrh   rl   rk   )Úqueryr€   Ú	partitionrx   rw   ry   )	rF   ÚpartsrÈ   rË   Úpairr„   Ú_r…   rÌ   s	            r0   rÇ   Ú%SigV4Auth._canonical_query_string_url  s—   € Ø!#ÐØ�;�;àˆMØŸ™×)Ñ)¨#Ö.�Ø $§¡¨sÓ 3‘�˜Ø×$Ñ$ c \Ö2ñ /ð !ˆOô % ]Ö3‘
�Ø×&Ñ&¨#¨¨a°¨wÐ'7Ö8ñ 4à%(§X¡X¨oÓ%>Ð"Ø%Ð%r2   c                 óö   ^ • / n[        [        U5      5      nU HL  nSR                  U 4S jUR                  U5       5       5      nUR	                  U S[        U5       35        MN     SR                  U5      $ )zå
Return the headers that need to be included in the StringToSign
in their canonical form by converting all header keys to lower
case, sorting them in alphabetical order and then joining
them into a string, separated by newlines.
Ú,c              3   óF   >#   • U  H  nTR                  U5      v •  M     g 7frT   )Ú_header_value)Ú.0ÚvrF   s     €r0   Ú	<genexpr>Ú.SigV4Auth.canonical_headers.<locals>.<genexpr>7  s#   øé € ð Ú/K¨!�×"Ñ" 1×%Ð%Ò/Kùs   ƒ!r'   rd   )rw   Úsetry   Úget_allrx   r   )rF   rÃ   r§   Úsorted_header_namesr„   r…   s   `     r0   Úcanonical_headersÚSigV4Auth.canonical_headers-  sz   ø€ ð ˆÜ$¤S¨Ó%9Ó:ÐÛ&ˆCØ—H‘Hô Ø/>×/FÑ/FÀsÔ/Kóó ˆEð �N‰N˜c˜U !¤N°5Ó$9Ð#:Ð;Ö<ñ	 'ð
 �y‰y˜Ó!Ð!r2   c                 ó@   • SR                  UR                  5       5      $ )NÚ )ry   r€   )rF   r…   s     r0   rØ   ÚSigV4Auth._header_value=  s   € ð �x‰x˜Ÿ™›Ó&Ð&r2   c                 óZ   • [        S [        U5       5       5      nSR                  U5      $ )Nc              3   ó\   #   • U  H"  oR                  5       R                  5       v •  M$     g 7frT   )r¾   r~   )rÙ   Úns     r0   rÛ   Ú+SigV4Auth.signed_headers.<locals>.<genexpr>F  s    é € ÐIÒ4H¨qŸ™›Ÿ™×*Ð*Ò4Hùs   ‚*,Ú;)rw   rÝ   ry   )rF   rÃ   r§   s      r0   Úsigned_headersÚSigV4Auth.signed_headersE  s&   € ÜÑI´C¸Ô4HÓIÓIˆØ�x‰x˜Ó Ð r2   c                 ó²   • UR                   R                  S0 5      nUR                  S5      n[        U[        5      =(       a    UR                  S5      S:H  $ )NÚchecksumÚrequest_algorithmÚinr   )Úcontextr*   r7   Údict)rF   r=   Úchecksum_contextÚ	algorithms       r0   Ú_is_streaming_checksum_payloadÚ(SigV4Auth._is_streaming_checksum_payloadI  sJ   € Ø"Ÿ?™?×.Ñ.¨z¸2Ó>ÐØ$×(Ñ(Ð)<Ó=ˆ	Ü˜)¤TÓ*×O¨y¯}©}¸TÓ/BÀiÑ/OÐOr2   c                 ó  • U R                  U5      (       a  [        $ U R                  U5      (       d  [        $ UR                  nU(       a—  [        US5      (       a†  UR                  5       n[        R                  " UR                  [        5      n[        5       n[        US5       H  nUR                  U5        M     UR                  5       nUR                  U5        U$ U(       a  [        U5      R                  5       $ [         $ )NÚseekr2   )rô   Ú"STREAMING_UNSIGNED_PAYLOAD_TRAILERÚ_should_sha256_sign_payloadÚUNSIGNED_PAYLOADÚbodyÚhasattrÚtellÚ	functoolsÚpartialÚreadÚPAYLOAD_BUFFERr   Úiterrz   r¶   r÷   ÚEMPTY_SHA256_HASH)rF   r=   Úrequest_bodyÚpositionÚread_chunksizerí   ÚchunkÚhex_checksums           r0   ÚpayloadÚSigV4Auth.payloadN  sÚ   € Ø×.Ñ.¨w×7Ñ7Ü5Ð5Ø×1Ñ1°'×:Ñ:ô $Ð#Ø—|‘|ˆÞœG L°&×9Ñ9Ø#×(Ñ(Ó*ˆHÜ&×.Ò.Ø×!Ñ!¤>óˆNô “xˆHÜ˜n¨cÖ2�Ø—‘ Ö&ñ 3à#×-Ñ-Ó/ˆLØ×Ñ˜hÔ'ØÐÞô ˜,Ó'×1Ñ1Ó3Ð3ä$Ð$r2   c                 ó|   • UR                   R                  S5      (       d  gUR                  R                  SS5      $ )Nr&   TÚpayload_signing_enabled)r,   Ú
startswithrð   r*   rE   s     r0   rù   Ú%SigV4Auth._should_sha256_sign_payloadh  s4   € à�{‰{×%Ñ% g×.Ñ.Øð
 �‰×"Ñ"Ð#<¸dÓCÐCr2   c                 óD  • UR                   R                  5       /nU R                  [        UR                  5      R
                  5      nUR                  U5        UR                  U R                  U5      5        U R                  U5      nUR                  U R                  U5      S-   5        UR                  U R                  U5      5        SUR                  ;   a  UR                  S   nOU R                  U5      nUR                  U5        SR                  U5      $ )Nrd   úX-Amz-Content-SHA256)rq   ÚupperÚ_normalize_url_pathr   r,   ro   rx   rÈ   rÃ   rà   rê   r§   r	  ry   )rF   r=   Úcrro   rÃ   Úbody_checksums         r0   Úcanonical_requestÚSigV4Auth.canonical_requestr  sÞ   € Ø�n‰n×"Ñ"Ó$Ð%ˆØ×'Ñ'¬°·±Ó(=×(BÑ(BÓCˆØ
�	‰	�$ŒØ
�	‰	�$×-Ñ-¨gÓ6Ô7Ø×.Ñ.¨wÓ7ˆØ
�	‰	�$×(Ñ(¨Ó9¸DÑ@ÔAØ
�	‰	�$×%Ñ% oÓ6Ô7Ø! W§_¡_Ó4Ø#ŸO™OÐ,BÑC‰Mà ŸL™L¨Ó1ˆMØ
�	‰	�-Ô Ø�y‰y˜‹}Ðr2   c                 ó,   • [        [        U5      SS9nU$ )Nz/~ri   )r   r   )rF   ro   Únormalized_paths      r0   r  ÚSigV4Auth._normalize_url_path�  s   € ÜÔ 2°4Ó 8¸tÑDˆØÐr2   c                 ó"  • U R                   R                  /nUR                  UR                  S   SS 5        UR                  U R                  5        UR                  U R
                  5        UR                  S5        SR                  U5      $ ©NÚ	timestampr   é   Úaws4_requestrc   )r^   r”   rx   rð   r¯   r°   ry   ©rF   r=   Úscopes      r0   r   ÚSigV4Auth.scope…  sp   € Ø×!Ñ!×,Ñ,Ð-ˆØ�‰�W—_‘_ [Ñ1°!°AÐ6Ô7Ø�‰�T×&Ñ&Ô'Ø�‰�T×'Ñ'Ô(Ø�‰�^Ô$Ø�x‰x˜‹Ðr2   c                 óø   • / nUR                  UR                  S   SS 5        UR                  U R                  5        UR                  U R                  5        UR                  S5        SR	                  U5      $ r  )rx   rð   r¯   r°   ry   r  s      r0   Úcredential_scopeÚSigV4Auth.credential_scope�  sa   € ØˆØ�‰�W—_‘_ [Ñ1°!°AÐ6Ô7Ø�‰�T×&Ñ&Ô'Ø�‰�T×'Ñ'Ô(Ø�‰�^Ô$Ø�x‰x˜‹Ðr2   c                 ó  • S/nUR                  UR                  S   5        UR                  U R                  U5      5        UR                  [        UR	                  S5      5      R                  5       5        SR                  U5      $ )zŒ
Return the canonical StringToSign as well as a dict
containing the original version of all headers that
were included in the StringToSign.
úAWS4-HMAC-SHA256r  r5   rd   )rx   rð   r#  r   rv   r¶   ry   )rF   r=   r  Ústss       r0   r�   ÚSigV4Auth.string_to_sign•  sl   € ð "Ð"ˆØ�
‰
�7—?‘? ;Ñ/Ô0Ø�
‰
�4×(Ñ(¨Ó1Ô2Ø�
‰
”6Ð+×2Ñ2°7Ó;Ó<×FÑFÓHÔIØ�y‰y˜‹~Ðr2   c                 óD  • U R                   R                  nU R                  SU 3R                  5       UR                  S   SS 5      nU R                  X@R
                  5      nU R                  XPR                  5      nU R                  US5      nU R                  XqSS9$ )NÚAWS4r  r   r  r  T)r¸   )r^   ru   rº   rv   rð   r¯   r°   )rF   r�   r=   r„   Úk_dateÚk_regionÚ	k_serviceÚ	k_signings           r0   rš   ÚSigV4Auth.signature¡  s’   € Ø×Ñ×)Ñ)ˆØ—‘Ø�C�5ˆ\×!Ñ!Ó# W§_¡_°[Ñ%AÀ!ÀAÐ%Fó
ˆð —:‘:˜f×&7Ñ&7Ó8ˆØ—J‘J˜x×);Ñ);Ó<ˆ	Ø—J‘J˜y¨.Ó9ˆ	Ø�z‰z˜)¸ˆzÐ>Ð>r2   c                 óâ  • U R                   c
  [        5       e[        5       nUR                  [        5      UR
                  S'   U R                  U5        U R                  U5      n[        R                  S5        [        R                  SU5        U R                  X5      n[        R                  SU5        U R                  XA5      n[        R                  SU5        U R                  X5        g )Nr  z$Calculating signature using v4 auth.zCanonicalRequest:
%súStringToSign:
%szSignature:
%s)r^   r   r   r–   ÚSIGV4_TIMESTAMPrð   Ú_modify_request_before_signingr  rm   rn   r�   rš   Ú_inject_signature_to_request)rF   r=   Údatetime_nowr  r�   rš   s         r0   rC   ÚSigV4Auth.add_auth«  sÀ   € Ø×ÑÑ#Ü$Ó&Ð&Ü+Ó-ˆØ'3×'<Ñ'<¼_Ó'Mˆ�‰˜Ñ$ð 	×+Ñ+¨GÔ4Ø ×2Ñ2°7Ó;ÐÜ�‰Ð;Ô<Ü�‰Ð,Ð.?Ô@Ø×,Ñ,¨WÓHˆÜ�‰Ð(¨.Ô9Ø—N‘N >Ó;ˆ	Ü�‰Ð% yÔ1à×)Ñ)¨'Õ=r2   c                 óü   • SU R                  U5       3/nU R                  U5      nUR                  SU R                  U5       35        UR                  SU 35        SR	                  U5      UR
                  S'   U$ )NzAWS4-HMAC-SHA256 Credential=zSignedHeaders=z
Signature=ú, ÚAuthorization)r   rÃ   rx   rê   ry   r§   )rF   r=   rš   Úauth_strrÃ   s        r0   r4  Ú&SigV4Auth._inject_signature_to_request½  s~   € Ø2°4·:±:¸gÓ3FÐ2GÐHÐIˆØ×.Ñ.¨wÓ7ˆØ�‰Ø˜T×0Ñ0°ÓAÐBÐCô	
ð 	�‰˜* Y KÐ0Ô1Ø+/¯9©9°XÓ+>ˆ�‰˜Ñ(Øˆr2   c                 óº  • SUR                   ;   a  UR                   S	 U R                  U5        U R                  R                  (       a@  SUR                   ;   a  UR                   S	 U R                  R                  UR                   S'   UR                  R                  SS5      (       d1  SUR                   ;   a  UR                   S	 [        UR                   S'   g g )Nr9  r¦   r  Tr  )r§   Ú_set_necessary_date_headersr^   r™   rð   r*   rú   rE   s     r0   r3  Ú(SigV4Auth._modify_request_before_signingÇ  s±   € Ø˜gŸo™oÓ-Ø—‘ Ð0Ø×(Ñ(¨Ô1Ø×Ñ×!×!Ø%¨¯©Ó8Ø—O‘OÐ$:Ð;Ø6:×6FÑ6F×6LÑ6LˆG�O‰OÐ2Ñ3à�‰×"Ñ"Ð#<¸d×CÑCØ%¨¯©Ó8Ø—O‘OÐ$:Ð;Ü6FˆG�O‰OÐ2Ò3ð Dr2   c                 óÖ  • SUR                   ;   a   UR                   S	 [        R                  R                  UR                  S   [        5      n[        [        [        R                  " UR                  5       5      5      5      UR                   S'   SUR                   ;   a  UR                   S	 g g SUR                   ;   a  UR                   S	 UR                  S   UR                   S'   g )Nr£   r  ú
X-Amz-Date)
r§   ÚdatetimeÚstrptimerð   r2  r   ÚintÚcalendarÚtimegmÚ	timetuple)rF   r=   Údatetime_timestamps      r0   r=  Ú%SigV4Auth._set_necessary_date_headersÕ  sÁ   € ð �W—_‘_Ó$Ø—‘ Ð'Ü!)×!2Ñ!2×!;Ñ!;Ø—‘ Ñ,¬oó"Ðô '1Ü”H—O’OÐ$6×$@Ñ$@Ó$BÓCÓDó'ˆG�O‰O˜FÑ#ð ˜wŸ™Ó.Ø—O‘O LÑ1ð /ð ˜wŸ™Ó.Ø—O‘O LÐ1Ø,3¯O©O¸KÑ,HˆG�O‰O˜LÒ)r2   )r¯   r°   r^   N)F)rI   rJ   rK   rL   rœ   rM   rW   rº   rÃ   rÈ   rÆ   rÇ   rà   rØ   rê   rô   r	  rù   r  r  r   r#  r�   rš   rC   r4  r3  r=  rO   rH   r2   r0   r¬   r¬   Ü   s�   † ñð €Oò*ôòò Kò&ò"&ò "ò 'ò!òPò
%ò4Dòòòòò
ò?ò>ò$òGõIr2   r¬   c                   ó:   ^ • \ rS rSrU 4S jrU 4S jrS rSrU =r$ )ÚS3SigV4Authié  c                 óš   >• [         TU ]  U5        SUR                  ;   a  UR                  S	 U R                  U5      UR                  S'   g )Nr  )Úsuperr3  r§   r	  ©rF   r=   Ú	__class__s     €r0   r3  Ú*S3SigV4Auth._modify_request_before_signingê  sA   ø€ Ü‰Ñ.¨wÔ7Ø! W§_¡_Ó4Ø—‘Ð 6Ð7à26·,±,¸wÓ2Gˆ�‰Ð.Ò/r2   c                 ó
  >• UR                   R                  S5      n[        USS 5      nUc  0 nUR                  SS 5      nUb  U$ SnUR                   R                  S0 5      nUR                  S5      n[        U[        5      (       a  UR                  S5      S:X  a  US	   nUR
                  R                  S
5      (       a  XQR                  ;  a  gUR                   R                  SS5      (       a  g[        TU ]%  U5      $ )NÚclient_configÚs3r  zContent-MD5rí   rî   rï   ÚheaderrÁ   r&   TÚhas_streaming_inputF)
rð   r*   Úgetattrr7   rñ   r,   r  r§   rL  rù   )	rF   r=   rQ  Ú	s3_configÚsign_payloadÚchecksum_headerrò   ró   rN  s	           €r0   rù   Ú'S3SigV4Auth._should_sha256_sign_payloadñ  sú   ø€ ð  Ÿ™×+Ñ+¨OÓ<ˆÜ˜M¨4°Ó6ˆ	ð ÑØˆIð !—}‘}Ð%>ÀÓEˆØÑ#ØÐð (ˆØ"Ÿ?™?×.Ñ.¨z¸2Ó>ÐØ$×(Ñ(Ð)<Ó=ˆ	Ü�i¤×&Ñ&¨9¯=©=¸Ó+>À(Ó+JØ'¨Ñ/ˆOà—‘×&Ñ& w×/Ñ/Ø§o¡oÓ5àð �?‰?×ÑÐ4°e×<Ñ<Øô ‰wÑ2°7Ó;Ð;r2   c                 ó   • U$ rT   rH   ©rF   ro   s     r0   r  ÚS3SigV4Auth._normalize_url_path  ó   € àˆr2   rH   )	rI   rJ   rK   rL   r3  rù   r  rO   Ú__classcell__©rN  s   @r0   rJ  rJ  é  s   ø† õHõ'<÷Rð r2   rJ  c                   óD   ^ • \ rS rSrSrU 4S jrU 4S jrU 4S jrSrU =r	$ )ÚS3ExpressAuthi  Tc                ó2   >• [         TU ]  XU5        X@l        g rT   )rL  rW   Ú_identity_cache)rF   r^   r²   r³   Úidentity_cacherN  s        €r0   rW   ÚS3ExpressAuth.__init__"  s   ø€ ô 	‰Ñ˜°KÔ@Ø-Õr2   c                 ó$   >• [         TU ]  U5        g rT   )rL  rC   rM  s     €r0   rC   ÚS3ExpressAuth.add_auth(  s   ø€ Ü‰Ñ˜Õ!r2   c                 óÆ   >• [         TU ]  U5        SUR                  ;  a#  U R                  R                  UR                  S'   SUR                  ;   a  UR                  S	 g g )Nzx-amz-s3session-tokenr¦   )rL  r3  r§   r^   r™   rM  s     €r0   r3  Ú,S3ExpressAuth._modify_request_before_signing+  sU   ø€ Ü‰Ñ.¨wÔ7Ø"¨'¯/©/Ó9Ø7;×7GÑ7G×7MÑ7MˆG�O‰OÐ3Ñ4à! W§_¡_Ó4Ø—‘Ð 6Ñ7ð 5r2   )rc  )
rI   rJ   rK   rL   ÚREQUIRES_IDENTITY_CACHErW   rC   r3  rO   r^  r_  s   @r0   ra  ra    s   ø† Ø"Ðõ.õ"÷8ó 8r2   ra  c                   ó   • \ rS rSrSrS rSrg)ÚS3ExpressPostAuthi4  Tc                 óü  • [        5       nUR                  [        5      UR                  S'   0 nUR                  R	                  SS 5      b  UR                  S   n0 n/ nUR                  R	                  SS 5      b'  UR                  S   nUR	                  SS 5      b  US   nXTS'   SUS'   U R                  U5      US'   UR                  S   US'   UR                  SS05        UR                  SU R                  U5      05        UR                  SUR                  S   05        U R                  R                  b@  U R                  R                  US	'   UR                  S	U R                  R                  05        [        R                  " [        R                  " U5      R                  S
5      5      R                  S
5      US'   U R                  US   U5      US'   X1R                  S'   XAR                  S'   g )Nr  ús3-presign-post-fieldsús3-presign-post-policyÚ
conditionsr&  úx-amz-algorithmúx-amz-credentialú
x-amz-dateúX-Amz-S3session-Tokenr5   Úpolicyúx-amz-signature©r   r–   r2  rð   r*   r   rx   r^   r™   r{   r|   r9   Údumpsrv   r;   rš   ©rF   r=   r5  Úfieldsru  rp  s         r0   rC   ÚS3ExpressPostAuth.add_auth7  sß  € Ü+Ó-ˆØ'3×'<Ñ'<¼_Ó'Mˆ�‰˜Ñ$àˆØ�?‰?×ÑÐ7¸Ó>ÑJØ—_‘_Ð%=Ñ>ˆFàˆØˆ
Ø�?‰?×ÑÐ7¸Ó>ÑJØ—_‘_Ð%=Ñ>ˆFØ�z‰z˜,¨Ó-Ñ9Ø# LÑ1�
à)ˆ|Ñà$6ˆÐ Ñ!Ø%)§Z¡Z°Ó%8ˆÐ!Ñ"Ø&Ÿ™¨{Ñ;ˆˆ|Ñà×ÑÐ,Ð.@ÐAÔBØ×ÑÐ-¨t¯z©z¸'Ó/BÐCÔDØ×Ñ˜<¨¯©¸Ñ)EÐFÔGà×Ñ×!Ñ!Ñ-Ø.2×.>Ñ.>×.DÑ.DˆFÐ*Ñ+Ø×ÑØ(¨$×*:Ñ*:×*@Ñ*@ÐAôô
 "×+Ò+Ü�JŠJ�vÓ×%Ñ% gÓ.ó
ç
‰&�‹/ð 	ˆxÑð %)§N¡N°6¸(Ñ3CÀWÓ$MˆÐ Ñ!à4:�‰Ð0Ñ1Ø4:�‰Ð0Ò1r2   rH   N)rI   rJ   rK   rL   rj  rC   rO   rH   r2   r0   rl  rl  4  s   † Ø"Ðõ';r2   rl  c                   óP   ^ • \ rS rSrSrSr\S.U 4S jjrS rS rS r	S	 r
S
rU =r$ )ÚS3ExpressQueryAuthia  i,  T)Úexpiresc                ó2   >• [         TU ]  UUUUS9  XPl        g )N)rd  ©rL  rW   Ú_expires)rF   r^   r²   r³   rd  r~  rN  s         €r0   rW   ÚS3ExpressQueryAuth.__init__e  s*   ø€ ô 	‰ÑØØØØ)ð	 	ñ 	
ð  �r2   c                 óh  • UR                   R                  S5      nSnX#:X  a  UR                   S	 U R                  U R                  U5      5      nSU R	                  U5      UR
                  S   U R                  US.nU R                  R                  b  U R                  R                  US'   [        UR                  5      n[        UR                  SS9nUR                  5        VV	s0 s H
  u  p‰X‰S	   _M     n
nn	UR                  (       a"  U
R                  UR                  5        0 Ul        S
nUR                   (       a!  U
R                  [#        U5      5        S
Ul        U
(       a  [%        U
5      S-   nU [%        U5       3nUnUS	   US   US   XÍS   4n['        U5      Ul
        g s  sn	nf )Núcontent-typeú0application/x-www-form-urlencoded; charset=utf-8r&  r  ©zX-Amz-AlgorithmzX-Amz-Credentialr@  zX-Amz-ExpireszX-Amz-SignedHeadersrt  T©Úkeep_blank_valuesr   rh   rl   é   é   é   ©r§   r*   rê   rÃ   r   rð   r�  r^   r™   r   r,   r   rÏ   r½   r   rz   r6   r>   r   r   )rF   r=   Úcontent_typeÚblocklisted_content_typerê   Úauth_paramsr-   Úquery_string_partsÚkrÚ   Ú
query_dictÚoperation_paramsÚnew_query_stringÚpÚnew_url_partss                  r0   r3  Ú1S3ExpressQueryAuth._modify_request_before_signingv  s¥  € ð —‘×*Ñ*¨>Ó:ˆà>ð 	!ð Ó3Ø—‘ Ð/ð
 ×,Ñ,¨T×-AÑ-AÀ'Ó-JÓKˆð  2Ø $§
¡
¨7Ó 3Ø!Ÿ/™/¨+Ñ6Ø!Ÿ]™]Ø#1ñ
ˆð ×Ñ×!Ñ!Ñ-Ø37×3CÑ3C×3IÑ3IˆKÐ/Ñ0ô ˜WŸ[™[Ó)ˆ	ô & i§o¡oÈÑNÐØ*<×*BÑ*BÔ*DÔEÒ*D¡$ !�a˜1™’gÑ*Dˆ
ÑEà�>�>Ø×Ñ˜gŸn™nÔ-ØˆGŒNð ÐØ�<�<ð ×ÑÔ/°Ó8Ô9ØˆGŒLÞÜ6°zÓBÀSÑHÐàÐ Ô!8¸Ó!EÐ FÐGð 	ð ˆØ˜1™˜q ™t Q q¡TÐ+;¸q¹TÐBˆÜ  Ó/ˆ�ùóA Fó   Ã*F.c                 ó4   • U=R                   SU 3-  sl         g ©Nz&X-Amz-Signature=©r,   ©rF   r=   rš   s      r0   r4  Ú/S3ExpressQueryAuth._inject_signature_to_request·  ó   € ð 	�ŠÐ*¨9¨+Ð6Ñ6Žr2   c                 ó   • U$ rT   rH   r[  s     r0   r  Ú&S3ExpressQueryAuth._normalize_url_path½  r]  r2   c                 ó   • [         $ rT   ©rú   rE   s     r0   r	  ÚS3ExpressQueryAuth.payloadÁ  ó
   € ô
  Ðr2   ©r�  )rI   rJ   rK   rL   ÚDEFAULT_EXPIRESrj  rW   r3  r4  r  r	  rO   r^  r_  s   @r0   r}  r}  a  s7   ø† Ø€OØ"Ðð  ÷ ð  ò"?0òB7ò÷ ð  r2   r}  c                   ó>   ^ • \ rS rSrSr\4U 4S jjrS rS rSrU =r	$ )ÚSigV4QueryAuthiÉ  é  c                 ó2   >• [         TU ]  XU5        X@l        g rT   r€  )rF   r^   r²   r³   r~  rN  s        €r0   rW   ÚSigV4QueryAuth.__init__Ì  s   ø€ ô 	‰Ñ˜°KÔ@Ø�r2   c                 óh  • UR                   R                  S5      nSnX#:X  a  UR                   S	 U R                  U R                  U5      5      nSU R	                  U5      UR
                  S   U R                  US.nU R                  R                  b  U R                  R                  US'   [        UR                  5      n[        UR                  SS9nUR                  5        VV	s0 s H
  u  p‰X‰S	   _M     n
nn	UR                  (       a"  U
R                  UR                  5        0 Ul        S
nUR                   (       a!  U
R                  [#        U5      5        S
Ul        U
(       a  [%        U
5      S-   nU [%        U5       3nUnUS	   US   US   XÍS   4n['        U5      Ul
        g s  sn	nf )Nr„  r…  r&  r  r†  r¦   Tr‡  r   rh   rl   r‰  rŠ  r‹  rŒ  )rF   r=   r�  Úblacklisted_content_typerê   r�  r-   r�  r‘  rÚ   r’  r“  r”  r•  r–  s                  r0   r3  Ú-SigV4QueryAuth._modify_request_before_signingÒ  s¥  € ð —‘×*Ñ*¨>Ó:ˆà>ð 	!ð Ó3Ø—‘ Ð/ð
 ×,Ñ,¨T×-AÑ-AÀ'Ó-JÓKˆð  2Ø $§
¡
¨7Ó 3Ø!Ÿ/™/¨+Ñ6Ø!Ÿ]™]Ø#1ñ
ˆð ×Ñ×!Ñ!Ñ-Ø26×2BÑ2B×2HÑ2HˆKÐ.Ñ/ô ˜WŸ[™[Ó)ˆ	ô & i§o¡oÈÑNÐØ*<×*BÑ*BÔ*DÔEÒ*D¡$ !�a˜1™’gÑ*Dˆ
ÑEà�>�>Ø×Ñ˜gŸn™nÔ-ØˆGŒNð ÐØ�<�<ð ×ÑÔ/°Ó8Ô9ØˆGŒLÞÜ6°zÓBÀSÑHÐàÐ Ô!8¸Ó!EÐ FÐGð 	ð ˆØ˜1™˜q ™t Q q¡TÐ+;¸q¹TÐBˆÜ  Ó/ˆ�ùóA Fr˜  c                 ó4   • U=R                   SU 3-  sl         g rš  r›  rœ  s      r0   r4  Ú+SigV4QueryAuth._inject_signature_to_request  rž  r2   r¥  )
rI   rJ   rK   rL   r¦  rW   r3  r4  rO   r^  r_  s   @r0   r¨  r¨  É  s#   ø† Ø€Oð ?N÷ ò?0÷B7ð 7r2   r¨  c                   ó$   • \ rS rSrSrS rS rSrg)ÚS3SigV4QueryAuthi  zòS3 SigV4 auth using query parameters.

This signer will sign a request using query parameters and signature
version 4, i.e a "presigned url" signer.

Based off of:

http://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-query-string-auth.html

c                 ó   • U$ rT   rH   r[  s     r0   r  Ú$S3SigV4QueryAuth._normalize_url_path&  r]  r2   c                 ó   • [         $ rT   r¢  rE   s     r0   r	  ÚS3SigV4QueryAuth.payload*  r¤  r2   rH   N)rI   rJ   rK   rL   rœ   r  r	  rO   rH   r2   r0   r²  r²    s   † ñ	òõ r2   r²  c                   ó   • \ rS rSrSrS rSrg)ÚS3SigV4PostAuthi2  zv
Presigns a s3 post

Implementation doc here:
http://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-UsingHTTPPOST.html
c                 óü  • [        5       nUR                  [        5      UR                  S'   0 nUR                  R	                  SS 5      b  UR                  S   n0 n/ nUR                  R	                  SS 5      b'  UR                  S   nUR	                  SS 5      b  US   nXTS'   SUS'   U R                  U5      US'   UR                  S   US'   UR                  SS05        UR                  SU R                  U5      05        UR                  SUR                  S   05        U R                  R                  b@  U R                  R                  US	'   UR                  S	U R                  R                  05        [        R                  " [        R                  " U5      R                  S
5      5      R                  S
5      US'   U R                  US   U5      US'   X1R                  S'   XAR                  S'   g )Nr  rn  ro  rp  r&  rq  rr  rs  úx-amz-security-tokenr5   ru  rv  rw  ry  s         r0   rC   ÚS3SigV4PostAuth.add_auth:  sÝ  € Ü+Ó-ˆØ'3×'<Ñ'<¼_Ó'Mˆ�‰˜Ñ$àˆØ�?‰?×ÑÐ7¸Ó>ÑJØ—_‘_Ð%=Ñ>ˆFàˆØˆ
Ø�?‰?×ÑÐ7¸Ó>ÑJØ—_‘_Ð%=Ñ>ˆFØ�z‰z˜,¨Ó-Ñ9Ø# LÑ1�
à)ˆ|Ñà$6ˆÐ Ñ!Ø%)§Z¡Z°Ó%8ˆÐ!Ñ"Ø&Ÿ™¨{Ñ;ˆˆ|Ñà×ÑÐ,Ð.@ÐAÔBØ×ÑÐ-¨t¯z©z¸'Ó/BÐCÔDØ×Ñ˜<¨¯©¸Ñ)EÐFÔGà×Ñ×!Ñ!Ñ-Ø-1×-=Ñ-=×-CÑ-CˆFÐ)Ñ*Ø×ÑÐ5°t×7GÑ7G×7MÑ7MÐNÔOô "×+Ò+Ü�JŠJ�vÓ×%Ñ% gÓ.ó
ç
‰&�‹/ð 	ˆxÑð %)§N¡N°6¸(Ñ3CÀWÓ$MˆÐ Ñ!à4:�‰Ð0Ñ1Ø4:�‰Ð0Ò1r2   rH   N©rI   rJ   rK   rL   rœ   rC   rO   rH   r2   r0   r¸  r¸  2  s   † ñõ%;r2   r¸  c                   ór   • \ rS rSr/ SQrSS jrS rS rS rS r	SS	 jr
 SS
 jr SS jrS rS rS rSrg)Ú
HmacV1Authib  )$Ú
accelerateÚaclÚcorsÚdefaultObjectAclÚlocationÚloggingÚ
partNumberru  ÚrequestPaymentÚtorrentÚ
versioningÚ	versionIdÚversionsÚwebsiteÚuploadsÚuploadIdzresponse-content-typezresponse-content-languagezresponse-expireszresponse-cache-controlzresponse-content-dispositionzresponse-content-encodingÚdeleteÚ	lifecycleÚtaggingÚrestoreÚstorageClassÚnotificationÚreplicationrÆ  Ú	analyticsÚmetricsÚ	inventoryÚselectzselect-typezobject-lockNc                 ó   • Xl         g rT   r]   r±   s       r0   rW   ÚHmacV1Auth.__init__‹  ra   r2   c                 ó&  • [         R                  " U R                  R                  R	                  S5      [
        S9nUR                  UR	                  S5      5        [        UR                  5       5      R                  5       R                  S5      $ )Nr5   re   )rs   rt   r^   ru   rv   r   rz   r   r}   r~   r;   )rF   r�   r¨   s      r0   Úsign_stringÚHmacV1Auth.sign_stringŽ  sk   € Ü—8’8Ø×Ñ×'Ñ'×.Ñ.¨wÓ7Ä4ñ
ˆð 	�‰˜×-Ñ-¨gÓ6Ô7Ü˜8Ÿ?™?Ó,Ó-×3Ñ3Ó5×<Ñ<¸WÓEÐEr2   c                 óF  • / SQn/ nSU;   a  US	 U R                  5       US'   U Hi  nSnU HD  nUR                  5       nX   c  M  Xt:X  d  M!  UR                  X   R                  5       5        SnMF     U(       a  MX  UR                  S5        Mk     SR	                  U5      $ )N)úcontent-md5r„  Údater£   FTrh   rd   )Ú	_get_dater¾   rx   r~   ry   )rF   r§   Úinteresting_headersÚhoiÚihÚfoundr„   Úlks           r0   Úcanonical_standard_headersÚ%HmacV1Auth.canonical_standard_headers•  sš   € ÚEÐØˆØ�WÓØ˜�ØŸ.™.Ó*ˆ�‰Û%ˆBØˆEÛ�Ø—Y‘Y“[�Ø‘<Ó+°µØ—J‘J˜w™|×1Ñ1Ó3Ô4Ø ’Eñ	 ÷
 �5Ø—
‘
˜2–ñ &ð �y‰y˜‹~Ðr2   c                 ób  • / n0 nU H[  nUR                  5       nX   c  M  UR                  S5      (       d  M2  SR                  S UR                  U5       5       5      X5'   M]     [	        UR                  5       5      nU H  nUR                  U SX4    35        M     SR                  U5      $ )Núx-amz-rÖ   c              3   ó@   #   • U  H  oR                  5       v •  M     g 7frT   )r~   )rÙ   rÚ   s     r0   rÛ   Ú6HmacV1Auth.canonical_custom_headers.<locals>.<genexpr>­  s   é € ð 2Ú+? aŸ™Ÿ	˜	Ò+?ùs   ‚r'   rd   )r¾   r  ry   rÞ   rw   Úkeysrx   )rF   r§   rã  Úcustom_headersr„   ræ  Úsorted_header_keyss          r0   Úcanonical_custom_headersÚ#HmacV1Auth.canonical_custom_headers¦  s¨   € ØˆØˆÛˆCØ—‘“ˆBØ‰|Ó'Ø—=‘= ×*Ó*Ø),¯©ñ 2Ø+2¯?©?¸3Ô+?ó2ó *�NÓ&ñ	 ô $ N×$7Ñ$7Ó$9Ó:ÐÛ%ˆCØ�J‰J˜#˜˜a Ñ 3Ð4Ð5Ö6ñ &à�y‰y˜‹~Ðr2   c                 óJ   • [        U5      S:X  a  U$ US   [        US   5      4$ )z
TODO: Do we need this?
r‰  r   )rp   r   )rF   Únvs     r0   Ú	unquote_vÚHmacV1Auth.unquote_vµ  s+   € ô ˆr‹7�a‹<ØˆIà�q‘Eœ7 2 a¡5›>Ð*Ð*r2   c                 ó  • Ub  UnOUR                   nUR                  (       aÒ  UR                  R                  S5      nU Vs/ s H  oUR                  SS5      PM     nnU Vs/ s H(  oUS   U R                  ;   d  M  U R	                  U5      PM*     nn[        U5      S:”  aR  UR                  [        S5      S9  U Vs/ s H  nSR                  U5      PM     nnUS-  nUSR                  U5      -  nU$ s  snf s  snf s  snf )Nrl   rk   r‰  r   )r„   Ú?)	ro   rÏ   r€   ÚQSAOfInterestrô  rp   Úsortr   ry   )rF   r€   Ú	auth_pathÚbufÚqsaÚas         r0   Úcanonical_resourceÚHmacV1Auth.canonical_resource¾  sð   € ð Ñ Ø‰Cà—*‘*ˆCØ�;�;Ø—+‘+×#Ñ# CÓ(ˆCÙ,/Ó0ªC q—7‘7˜3 –?©CˆCÐ0á+.óÚ+. a°A±$¸$×:LÑ:LÑ2LÓ!�—‘˜qÖ!©3ð ð ô �3‹x˜!‹|Ø—‘œZ¨›]�Ñ+Ù,/Ó0ªC q�s—x‘x –{©C�Ð0Ø�s‘
�Ø�s—x‘x “}Ñ$�Øˆ
ùò 1ùòùò
 1s   ÁC8Á$C=Á>C=Ã Dc                 ó¸   • UR                  5       S-   nX`R                  U5      S-   -  nU R                  U5      nU(       a  XgS-   -  nX`R                  X%S9-  nU$ )Nrd   ©rú  )r  rç  rð  rþ  )rF   rq   r€   r§   r~  rú  Úcsrî  s           r0   Úcanonical_stringÚHmacV1Auth.canonical_stringØ  sg   € ð �\‰\‹^˜dÑ"ˆØ
×-Ñ-¨gÓ6¸Ñ=Ñ=ˆØ×6Ñ6°wÓ?ˆÞØ 4Ñ'Ñ'ˆBØ
×%Ñ% eÐ%ÐAÑAˆØˆ	r2   c                 óÞ   • U R                   R                  (       a  US	 U R                   R                  US'   U R                  XX5S9n[        R	                  SU5        U R                  U5      $ )Nrº  r  r1  )r^   r™   r  rm   rn   rÜ  )rF   rq   r€   r§   r~  rú  r�   s          r0   Úget_signatureÚHmacV1Auth.get_signatureã  so   € ð ×Ñ×!×!ØÐ.Ð/Ø.2×.>Ñ.>×.DÑ.DˆGÐ*Ñ+Ø×.Ñ.Ø˜7ð /ð 
ˆô 	�‰Ð(¨.Ô9Ø×Ñ Ó/Ð/r2   c                 ó>  • U R                   c  [        e[        R                  S5        [	        UR
                  5      n[        R                  SUR                  5        U R                  UR                  X!R                  UR                  S9nU R                  X5        g )Nz(Calculating signature using hmacv1 auth.zHTTP request method: %sr  )r^   r   rm   rn   r   r,   rq   r  r§   rú  Ú_inject_signature)rF   r=   r€   rš   s       r0   rC   ÚHmacV1Auth.add_authï  s|   € Ø×ÑÑ#Ü$Ð$Ü�‰Ð?Ô@Ü˜Ÿ™Ó%ˆÜ�‰Ð.°·±Ô?Ø×&Ñ&Ø�N‰N˜E§?¡?¸g×>OÑ>Oð 'ð 
ˆ	ð 	×Ñ˜wÕ2r2   c                 ó   • [        SS9$ )NTr¤   r   ©rF   s    r0   rá  ÚHmacV1Auth._get_dateú  s   € Ü Ñ&Ð&r2   c                 ó’   • SUR                   ;   a  UR                   S	 SU R                  R                   SU 3nX1R                   S'   g )Nr9  zAWS r'   )r§   r^   r”   )rF   r=   rš   Úauth_headers       r0   r	  ÚHmacV1Auth._inject_signatureý  sG   € Ø˜gŸo™oÓ-ð —‘ Ð0à˜T×-Ñ-×8Ñ8Ð9¸¸9¸+ÐFˆØ+6�‰˜Ò(r2   r]   )NNrT   )rI   rJ   rK   rL   rø  rW   rÜ  rç  rð  rô  rþ  r  r  rC   rá  r	  rO   rH   r2   r0   r¾  r¾  b  sN   † ò%€MôN'òFòò"ò+ôð6 ?Cô	ð ?Cô
0ò	3ò'õ7r2   r¾  c                   ó4   • \ rS rSrSrSr\4S jrS rS rSr	g)	ÚHmacV1QueryAuthi  z­
Generates a presigned request for s3.

Spec from this document:

http://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html
#RESTAuthenticationQueryStringAuth

r©  c                 ó   • Xl         X l        g rT   )r^   r�  )rF   r^   r~  s      r0   rW   ÚHmacV1QueryAuth.__init__  s   € Ø&ÔØ�r2   c                 ó|   • [        [        [        R                  " 5       [        U R                  5      -   5      5      $ rT   )r<   rC  r•   r�  r  s    r0   rá  ÚHmacV1QueryAuth._get_date  s&   € Ü”3”t—y’y“{¤S¨¯©Ó%7Ñ7Ó8Ó9Ð9r2   c                 óÆ  • 0 nU R                   R                  US'   X#S'   UR                   H\  nUR                  5       nUS:X  a  UR                  S   US'   M-  UR	                  S5      (       d  US;   d  MK  UR                  U   X5'   M^     [        U5      n[        UR                  5      nUS   (       a
  US    SU 3nUS	   US
   US   XgS   4n[        U5      Ul        g )Nr�   rg   r£   ÚExpiresrê  )rß  r„  é   rl   r   r‰  rŠ  r‹  )	r^   r”   r§   r¾   r  r   r   r,   r   )	rF   r=   rš   r’  Ú
header_keyræ  r”  r•  r–  s	            r0   r	  Ú!HmacV1QueryAuth._inject_signature  sö   € Øˆ
Ø'+×'7Ñ'7×'BÑ'Bˆ
Ð#Ñ$Ø"+�;Ñà!Ÿ/œ/ˆJØ×!Ñ!Ó#ˆBð ˜VÓ#Ø(/¯©¸Ñ(?�
˜9Ó%ð —‘˜x×(Ñ(¨Bð 3õ -ð ")§¡°Ñ!4�
“ñ *ô  3°:Ó>Ðô �W—[‘[Ó!ˆØˆQ�4ð #$ A¡$  qÐ)9Ð(:Ð;ÐØ˜1™˜q ™t Q q¡TÐ+;¸q¹TÐBˆÜ  Ó/ˆ�r2   )r�  r^   N)
rI   rJ   rK   rL   rœ   r¦  rW   rá  r	  rO   rH   r2   r0   r  r    s    † ñð €Oà,;ô  ò:õ0r2   r  c                   ó   • \ rS rSrSrS rSrg)ÚHmacV1PostAuthi@  z�
Generates a presigned post for s3.

Spec from this document:

http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingHTTPPOST.html
c                 óÔ  • 0 nUR                   R                  SS 5      b  UR                   S   n0 n/ nUR                   R                  SS 5      b'  UR                   S   nUR                  SS 5      b  US   nXCS'   U R                  R                  US'   U R                  R                  b@  U R                  R                  US'   UR                  SU R                  R                  05        [        R                  " [        R                  " U5      R                  S5      5      R                  S5      US'   U R                  US   5      US'   X!R                   S'   X1R                   S'   g )	Nrn  ro  rp  r�   rº  r5   ru  rš   )rð   r*   r^   r”   r™   rx   r{   r|   r9   rx  rv   r;   rÜ  )rF   r=   rz  ru  rp  s        r0   rC   ÚHmacV1PostAuth.add_authI  sR  € ØˆØ�?‰?×ÑÐ7¸Ó>ÑJØ—_‘_Ð%=Ñ>ˆFàˆØˆ
Ø�?‰?×ÑÐ7¸Ó>ÑJØ—_‘_Ð%=Ñ>ˆFØ�z‰z˜,¨Ó-Ñ9Ø# LÑ1�
à)ˆ|Ñà#'×#3Ñ#3×#>Ñ#>ˆÐÑ à×Ñ×!Ñ!Ñ-Ø-1×-=Ñ-=×-CÑ-CˆFÐ)Ñ*Ø×ÑÐ5°t×7GÑ7G×7MÑ7MÐNÔOô "×+Ò+Ü�JŠJ�vÓ×%Ñ% gÓ.ó
ç
‰&�‹/ð 	ˆxÑð #×.Ñ.¨v°hÑ/?Ó@ˆˆ{Ñà4:�‰Ð0Ñ1Ø4:�‰Ð0Ò1r2   rH   Nr¼  rH   r2   r0   r  r  @  s   † ñõ;r2   r  c                   ó   • \ rS rSrSrS rSrg)Ú
BearerAuthih  zÁ
Performs bearer token authorization by placing the bearer token in the
Authorization header as specified by Section 2.1 of RFC 6750.

https://datatracker.ietf.org/doc/html/rfc6750#section-2.1
c                 óº   • U R                   c
  [        5       eSU R                   R                   3nSUR                  ;   a  UR                  S	 X!R                  S'   g )NzBearer r9  )rV   r   r™   r§   )rF   r=   r  s      r0   rC   ÚBearerAuth.add_authp  sP   € Ø�?‰?Ñ"Ü"Ó$Ð$à §¡× 5Ñ 5Ð6Ð7ˆØ˜gŸo™oÓ-Ø—‘ Ð0Ø+6�‰˜Ò(r2   rH   Nr¼  rH   r2   r0   r!  r!  h  s   † ñõ7r2   r!  c                 óœ   • U  H>  nUS:X  a  [         U   s  $ U[         ;   a  [         U   nU[        ;   a  Us  $ M7  [        US9e   [        U S9e)Núsmithy.api#noAuth©Úsignature_version)ÚAUTH_TYPE_TO_SIGNATURE_VERSIONÚAUTH_TYPE_MAPSr   r   )Ú
auth_traitÚ	auth_typer'  s      r0   Úresolve_auth_typer,  z  sa   € Ûˆ	ØÐ+Ó+Ü1°)Ñ<Ò<ØÔ8Ó8Ü >¸yÑ IÐØ ¤NÓ2Ø(Ò(ñ 3ô /ÀÑKÐKñ  ô +¸ZÑ
HÐHr2   c                 óø  • U Vs/ s H  o"R                  S5      S   PM     nnU  Vs/ s H  nU[        ;  d  M  UPM     nnU(       a  [        R                  SU5        X-   n[        R                  U5       Vs/ s H  nX#;   d  M
  UPM     nnU H7  nUS:X  a  [        U   s  $ [        R                  U5      nU[        ;   d  M5  Us  $    [        SR                  [        U5      5      S9es  snf s  snf s  snf )NÚ#éÿÿÿÿz/Unsupported auth schemes in preference list: %rÚnoAuthr8  r&  )r€   ÚAUTH_PREF_TO_SIGNATURE_VERSIONrm   rn   rñ   Úfromkeysr*   r)  r   ry   rw   )Úpreference_listÚauth_optionsr+   Úservice_supportedÚunsupportedÚcombinedÚprioritized_schemesÚsig_versions           r0   Úresolve_auth_scheme_preferencer:  ‡  s  € Ù=IÓJº\°6Ÿ™ cÓ*¨2Ô.¹\ÐÐJñ &óâ%ˆFØÔ7Ñ7÷ 	Ù%ð ð ö
 Ü�‰Ø=¸{ô	
ð Ñ2€Hô —m‘m HÔ-óâ-ˆFØÑ&÷ 	Ù-ð ð ó &ˆØ�XÓÜ1°&Ñ9Ò9Ü4×8Ñ8¸Ó@ˆØœ.Õ(ØÒñ &ô +ØŸ)™)¤FÐ+<Ó$=Ó>ñð ùò5 Kùòùòs   …C-¨C2ºC2Á:	C7ÂC7)Úv2Úv3Úv3httpsrR  zs3-queryzs3-presign-postzs3v4-presign-postzv4-s3expresszv4-s3express-queryzv4-s3express-presign-postÚbearer)ÚCRT_AUTH_TYPE_MAPS)Úv4zv4-queryÚs3v4z
s3v4-queryr@  Úv4ar>  Únone)zaws.auth#sigv4zaws.auth#sigv4azsmithy.api#httpBearerAuthr%  r.  r/  )Lr{   rD  rA  rþ   rs   r9   rÄ  r•   Úcollections.abcr   Úemail.utilsr   Úhashlibr   r   Úoperatorr   Úbotocore.compatr	   r
   r   r   r   r   r   r   r   r   r   Úbotocore.exceptionsr   r   r   r   Úbotocore.utilsr   r   r   Ú	getLoggerrI   rm   r  r  r—   r2  r¿   rú   rø   r1   r>   r@   rQ   rZ   rž   r¬   rJ  ra  rl  r}  r¨  r²  r¸  r¾  r  r  r!  r,  r:  r)  Úbotocore.crt.authr?  rz   r(  r½   r€   r1  )Úauth_schemer9  s   00r0   Ú<module>rN     s<  ðó Û Û Û Û Û Û Û Ý #Ý "ß  Ý ÷÷ ÷ ñ ÷ó ÷ñ ð 
×	Ò	˜8Ó	$€ð Gð ð €Ø
€Ø"€òÐ ð &Ð Ø%IÐ "òò&
÷.ñ .ô%�*ô %ô:�
ô :ôz<�
ô <ô8JI�
ô JIôZ3�)ô 3ôl8�Kô 8ô**;˜ô *;ôZe ˜ô e ôPN7�Yô N7ôb �~ô  ô0-;�iô -;ô`f7�ô f7ôR20�jô 20ôj%;�Zô %;ôP7�ô 7ò$
IòðB Ø
ØØ
ØØ%Ø(Ø!Ø,Ø!2Øñ€ö Ý4à×ÑÐ,Õ-à×ÑàØ&ØØ*ñ		
ôð ØØ!)Øñ	"Ð ð %C×$HÑ$HÔ$Jô"â$JÑ ˆð ×Ñ�cÓ˜2Ñ Ò+Ù$Jò"Ñ ùó "s   Æ%!G