§
    =xÅj4œ  ã                   óþ  — 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Zd dl	Zd dl
Zd dlZd dlmZmZmZmZ d dlmZmZmZmZmZ d dl	mZmZmZ d dlmZ d dlmZ d d	lmZ d d
l m!Z!m"Z" d dl#m$Z$m%Z% d dl&m'Z'm(Z( d dl)m*Z* d dl+m,Z,m-Z- d dl.m/Z/ d dl0m1Z1m2Z2m3Z3m4Z4m5Z5  e j6        e7¦  «        Z8da9d„ Z:dddde(z  ddfd„Z;d4d„Z<d„ Z= G d„ d¦  «        Z> G d„ de-¦  «        Z? G d„ de,¦  «        Z@ G d„ d¦  «        ZA G d„ d eA¦  «        ZB G d!„ d"e¦  «        ZC G d#„ d$¦  «        ZD G d%„ d&¦  «        ZE ed'd(d)g¦  «        ZF G d*„ d+¦  «        ZG G d,„ d-¦  «        ZH G d.„ d/¦  «        ZI G d0„ d1¦  «        ZJ G d2„ d3¦  «        ZKdS )5é    N)Ú
namedtuple)ÚBytesIO)ÚAwsCredentialsÚAwsCredentialsProviderÚAwsSigningAlgorithmÚAwsSigningConfig)ÚClientBootstrapÚClientTlsContextÚDefaultHostResolverÚEventLoopGroupÚTlsContextOptions)ÚS3ClientÚS3RequestTlsModeÚS3RequestType)ÚUNSIGNED)Úurlsplit)ÚConfig)ÚInvalidConfigErrorÚNoCredentialsError)Ú	ArnParserÚInvalidArnException)ÚFULL_OBJECT_CHECKSUM_ARGSÚMB)ÚTransferNotDoneError)ÚBaseTransferFutureÚBaseTransferMeta)ÚTransferManager)ÚCallArgsÚOSUtilsÚcreate_nested_clientÚget_callbacksÚis_s3express_bucketc                 ó®   — t           €Ht          j                             | ¦  «        }	 |                     ¦   «          n# t
          $ r Y d S w xY w|a t           S ©N)ÚCRT_S3_PROCESS_LOCKÚawscrtÚs3ÚCrossProcessLockÚacquireÚRuntimeError)ÚnameÚcrt_locks     ú?C:\Projects\Historical\venv\Lib\site-packages\s3transfer/crt.pyÚacquire_crt_s3_process_lockr.   <   sk   € õ Ð"Ý”9×-Ò-¨dÑ3Ô3ˆð	Ø×ÒÑÔÐÐøÝð 	ð 	ð 	ð �4�4ð		øøøð
 'ÐÝÐs   ¨= ½
AÁ
Aé   Tc           
      óü  — t          |¦  «        }t          |¦  «        }t          ||¦  «        }	d}
|rt          j        nt          j        }|�Št          |t          ¦  «        r$|                     ¦   «         st          d¬¦  «        ‚t          ¦   «         }|r|                     |¬¦  «         nd|_        t          |¦  «        }|                     ¦   «         }
t          |¬¦  «        }t!          |	| ||||
|d¬¦  «        S )	a�  
    :type region: str
    :param region: The region used for signing

    :type crt_credentials_provider:
        Optional[awscrt.auth.AwsCredentialsProvider]
    :param crt_credentials_provider: CRT AWS credentials provider
        to use to sign requests. If not set, requests will not be signed.

    :type num_threads: Optional[int]
    :param num_threads: Number of worker threads generated. Default
        is the number of processors in the machine.

    :type target_throughput: Optional[int]
    :param target_throughput: Throughput target in bytes per second.
        By default, CRT will automatically attempt to choose a target
        throughput that matches the system's maximum network throughput.
        Currently, if CRT is unable to determine the maximum network
        throughput, a fallback target throughput of ``1_250_000_000`` bytes
        per second (which translates to 10 gigabits per second, or 1.16
        gibibytes per second) is used. To set a specific target
        throughput, set a value for this parameter.

    :type part_size: Optional[int]
    :param part_size: Size, in Bytes, of parts that files will be downloaded
        or uploaded in.

    :type use_ssl: boolean
    :param use_ssl: Whether or not to use SSL.  By default, SSL is used.
        Note that not all services support non-ssl connections.

    :type verify: Optional[boolean/string]
    :param verify: Whether or not to verify SSL certificates.
        By default SSL certificates are verified.  You can provide the
        following values:

        * False - do not validate SSL certificates.  SSL will still be
            used (unless use_ssl is False), but SSL certificates
            will not be verified.
        * path/to/cert/bundle.pem - A filename of the CA cert bundle to
            use. Specify this argument if you want to use a custom CA cert
            bundle instead of the default one on your system.
    Nz»Invalid CA bundle: the configured value (ca_bundle, AWS_CA_BUNDLE, REQUESTS_CA_BUNDLE, or verify) resolved to an empty or whitespace-only string. Provide a valid path to a CA bundle file.)Ú	error_msg)Úca_filepathF)Ú provided_throughput_target_bytesT)Ú	bootstrapÚregionÚcredential_providerÚ	part_sizeÚtls_modeÚtls_connection_optionsÚthroughput_target_gbpsÚenable_s3express)r   r   r	   r   ÚENABLEDÚDISABLEDÚ
isinstanceÚstrÚstripr   r   Ú&override_default_trust_store_from_pathÚverify_peerr
   Únew_connection_optionsÚ_get_crt_throughput_target_gbpsr   )r5   Úcrt_credentials_providerÚnum_threadsÚtarget_throughputr7   Úuse_sslÚverifyÚevent_loop_groupÚhost_resolverr4   r9   r8   Útls_ctx_optionsÚclient_tls_optionÚtarget_gbpss                  r-   Úcreate_s3_crt_clientrO   U   sE  € õh & kÑ2Ô2ÐÝ'Ð(8Ñ9Ô9€MÝÐ 0°-Ñ@Ô@€IØ!Ðð %,ÐJÕÔ Ð Õ1AÔ1Jð ð ÐÝ�f�cÑ"Ô"ð 	¨6¯<ª<©>¬>ð 	Ý$ð0ðñ ô ð õ ,Ñ-Ô-ˆØð 	0Ø×BÒBØ"ð Cñ ô ð ð ð +0ˆOÔ'Ý,¨_Ñ=Ô=ÐØ!2×!IÒ!IÑ!KÔ!KÐÝ1Ø):ðñ ô €Kõ ØØØ4ØØØ5Ø*Øð	ñ 	ô 	ð 	ó    c                 óÌ   — | €>t           j                             ¦   «         }t                               d|¦  «         |€d}n| dz  dz  }t                               d|¦  «         |S )Nz-Recommended CRT throughput target in gbps: %sg      $@r/   i Êš;z'Using CRT throughput target in gbps: %s)r&   r'   Ú&get_recommended_throughput_target_gbpsÚloggerÚdebug)r3   rN   s     r-   rD   rD   ³   sp   € Ø'Ð/Ý”i×FÒFÑHÔHˆÝ�ŠØ;¸[ñ	
ô 	
ð 	
ð ÐØˆKøð 7¸Ñ:¸]ÑJˆÝ
‡L‚LÐ:¸KÑHÔHÐHØÐrP   c                 óÈ   — t           j        }	 t          t          |                     d¦  «        ¦  «        }t          |¦  «        }n# t          t          f$ r Y dS w xY w|| k    S )Nú.F)r&   Ú__version__ÚmapÚintÚsplitÚtupleÚ	TypeErrorÚ
ValueError)Úminimum_versionÚcrt_version_strÚcrt_version_intsÚcrt_version_tuples       r-   Ú_has_minimum_crt_versionrb   Å   sq   € ÝÔ(€OðÝ�s O×$9Ò$9¸#Ñ$>Ô$>Ñ?Ô?ÐÝ!Ð"2Ñ3Ô3ÐÐøÝ•zÐ"ð ð ð Øˆuˆuðøøøà Ò/Ð/s   Ž7A ÁAÁAc                   óº   — e Zd Zej        Zej        Zej        ZdZej        Z	 dd„Z	d„ Z
d„ Z	 dd„Zdd„Zdd„Zdd
„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zdd„Zd„ Zd„ ZdS )ÚCRTTransferManagerTNc                 óÚ   — |€t          ¦   «         | _        || _        t          || j        |¦  «        | _        |j        | _        g | _        t          j	        d¦  «        | _
        d| _        dS )aì  A transfer manager interface for Amazon S3 on CRT s3 client.

        :type crt_s3_client: awscrt.s3.S3Client
        :param crt_s3_client: The CRT s3 client, handling all the
            HTTP requests and functions under then hood

        :type crt_request_serializer: s3transfer.crt.BaseCRTRequestSerializer
        :param crt_request_serializer: Serializer, generates unsigned crt HTTP
            request.

        :type osutil: s3transfer.utils.OSUtils
        :param osutil: OSUtils object to use for os-related behavior when
            using with transfer manager.

        :type config: s3transfer.manager.TransferConfig
        :param config: The transfer configuration to be used when
            making CRT S3 client requests.
        Né€   r   )r   Ú_osutilÚ_crt_s3_clientÚS3ClientArgsCreatorÚ_s3_args_creatorÚtranslate_crt_exceptionÚ_crt_exception_translatorÚ_future_coordinatorsÚ	threadingÚ	SemaphoreÚ
_semaphoreÚ_id_counter)ÚselfÚcrt_s3_clientÚcrt_request_serializerÚosutilÚconfigs        r-   Ú__init__zCRTTransferManager.__init__Ø   ss   € ð* ˆ>Ý"™9œ9ˆDŒLØ+ˆÔÝ 3Ø"ØŒLØñ!
ô !
ˆÔð #Ô:ð 	Ô&ð %'ˆÔ!Ý#Ô-¨cÑ2Ô2ˆŒàˆÔÐÐrP   c                 ó   — | S r$   © ©rr   s    r-   Ú	__enter__zCRTTransferManager.__enter__ý   s   € ØˆrP   c                 ó<   — d}|rd}|                       |¦  «         d S )NFT©Ú	_shutdown)rr   Úexc_typeÚ	exc_valueÚargsÚcancels        r-   Ú__exit__zCRTTransferManager.__exit__   s,   € ØˆØð 	ØˆFØ�Š�vÑÔÐÐÐrP   c                 óÆ   — |€i }|€i }|                       || j        ¦  «         |                      |¦  «         t          |||||¬¦  «        }|                      d|¦  «        S )N©ÚbucketÚkeyÚfileobjÚ
extra_argsÚsubscribersÚ
get_object)Ú_validate_all_known_argsÚALLOWED_DOWNLOAD_ARGSÚ_validate_if_bucket_supportedr   Ú_submit_transfer)rr   r†   r‡   rˆ   r‰   rŠ   Úcallargss          r-   ÚdownloadzCRTTransferManager.download  s‚   € ð ÐØˆJØÐØˆKØ×%Ò% j°$Ô2LÑMÔMÐMØ×*Ò*¨6Ñ2Ô2Ð2ÝØØØØ!Ø#ð
ñ 
ô 
ˆð ×$Ò$ \°8Ñ<Ô<Ð<rP   c                 óð   — |€i }|€i }|                       || j        ¦  «         |                      |¦  «         |                      |¦  «         t	          |||||¬¦  «        }|                      d|¦  «        S )Nr…   Ú
put_object)rŒ   ÚALLOWED_UPLOAD_ARGSrŽ   Ú&_validate_checksum_algorithm_supportedr   r�   )rr   rˆ   r†   r‡   r‰   rŠ   r�   s          r-   ÚuploadzCRTTransferManager.upload  s”   € ØÐØˆJØÐØˆKØ×%Ò% j°$Ô2JÑKÔKÐKØ×*Ò*¨6Ñ2Ô2Ð2Ø×3Ò3°JÑ?Ô?Ð?ÝØØØØ!Ø#ð
ñ 
ô 
ˆð ×$Ò$ \°8Ñ<Ô<Ð<rP   c                 óÄ   — |€i }|€i }|                       || j        ¦  «         |                      |¦  «         t          ||||¬¦  «        }|                      d|¦  «        S )N)r†   r‡   r‰   rŠ   Údelete_object)rŒ   ÚALLOWED_DELETE_ARGSrŽ   r   r�   )rr   r†   r‡   r‰   rŠ   r�   s         r-   ÚdeletezCRTTransferManager.delete)  s}   € ØÐØˆJØÐØˆKØ×%Ò% j°$Ô2JÑKÔKÐKØ×*Ò*¨6Ñ2Ô2Ð2ÝØØØ!Ø#ð	
ñ 
ô 
ˆð ×$Ò$ _°hÑ?Ô?Ð?rP   Fc                 ó0   — |                       |¦  «         d S r$   r}   ©rr   r‚   s     r-   ÚshutdownzCRTTransferManager.shutdown8  s   € Ø�Š�vÑÔÐÐÐrP   c                 óª   — | j         rI| j                             ¦   «         D ]1\  }}|                     |¦  «        }|rt	          d|› d�¦  «        ‚Œ0d S d S )Nz'TransferManager methods do not support z+ resource. Use direct client calls instead.)Ú VALIDATE_SUPPORTED_BUCKET_VALUESÚ_UNSUPPORTED_BUCKET_PATTERNSÚitemsÚmatchr]   )rr   r†   ÚresourceÚpatternr¢   s        r-   rŽ   z0CRTTransferManager._validate_if_bucket_supported;  s�   € ð Ô0ð 	Ø%)Ô%F×%LÒ%LÑ%NÔ%Nð ð Ñ!�˜'ØŸš fÑ-Ô-�Øð Ý$ðEÀ(ð Eð Eð Eñô ð ðð	ð 	ðð rP   c           	      óh   — |D ].}||vr(t          d|› dd                     |¦  «        › �¦  «        ‚Œ/d S )NzInvalid extra_args key 'z', must be one of: z, )r]   Újoin)rr   ÚactualÚallowedÚkwargs       r-   rŒ   z+CRTTransferManager._validate_all_known_argsH  sg   € Øð 	ð 	ˆEØ˜GÐ#Ð#Ý ð<¨uð <ð <Ø'+§y¢y°Ñ'9Ô'9ð<ð <ñô ð ð $ð	ð 	rP   c                 óÔ   — |                      d¦  «        }|€d S t          t          j        j        j        ¦  «        }|                     ¦   «         |vrt          d|› d|› �¦  «        ‚d S )NÚChecksumAlgorithmzChecksumAlgorithm: z* not supported. Supported algorithms are: )ÚgetÚlistr&   r'   ÚS3ChecksumAlgorithmÚ__members__Úupperr]   )rr   r‰   Úchecksum_algorithmÚsupported_algorithmss       r-   r•   z9CRTTransferManager._validate_checksum_algorithm_supportedP  s�   € Ø'Ÿ^š^Ð,?Ñ@Ô@ÐØÐ%ØˆFÝ#¥F¤IÔ$AÔ$MÑNÔNÐØ×#Ò#Ñ%Ô%Ð-AÐAÐAÝðDÐ&8ð Dð DØ-AðDð Dñô ð ð BÐArP   c                 ój   — | j         D ]*}|                     ¦   «         s|                     ¦   «          Œ+d S r$   )rm   Údoner‚   ©rr   Úcoordinators     r-   Ú_cancel_transfersz$CRTTransferManager._cancel_transfers[  sE   € ØÔ4ð 	%ð 	%ˆKØ×#Ò#Ñ%Ô%ð %Ø×"Ò"Ñ$Ô$Ð$øð	%ð 	%rP   c                 óB   — | j         D ]}|                     ¦   «          Œd S r$   )rm   Úresultrµ   s     r-   Ú_finish_transfersz$CRTTransferManager._finish_transfers`  s3   € ØÔ4ð 	!ð 	!ˆKØ×ÒÑ Ô Ð Ð ð	!ð 	!rP   c                 óB   — | j         D ]}|                     ¦   «          Œd S r$   )rm   Ú%wait_until_on_done_callbacks_completerµ   s     r-   Ú_wait_transfers_donez'CRTTransferManager._wait_transfers_doned  s7   € ØÔ4ð 	@ð 	@ˆKØ×=Ò=Ñ?Ô?Ð?Ð?ð	@ð 	@rP   c                 ó  — |r|                       ¦   «          	 |                      ¦   «          n/# t          $ r |                       ¦   «          Y nt          $ r Y nw xY w|                      ¦   «          d S # |                      ¦   «          w xY wr$   )r·   rº   ÚKeyboardInterruptÚ	Exceptionr½   rœ   s     r-   r~   zCRTTransferManager._shutdownh  s²   € Øð 	%Ø×"Ò"Ñ$Ô$Ð$ð	(Ø×"Ò"Ñ$Ô$Ð$Ð$øå ð 	%ð 	%ð 	%Ø×"Ò"Ñ$Ô$Ð$Ð$Ð$Ýð 	ð 	ð 	ØˆDð	øøøð ×%Ò%Ñ'Ô'Ð'Ð'Ð'øˆD×%Ò%Ñ'Ô'Ð'Ð'øøøs2   ˜- ¬A2 ­AÁA2 Á	AÁA2 ÁAÁA2 Á2Bc                 ó8   — | j                              ¦   «          d S r$   )rp   Úrelease©rr   Úkwargss     r-   Ú_release_semaphorez%CRTTransferManager._release_semaphoreu  s   € ØŒ×ÒÑ!Ô!Ð!Ð!Ð!rP   c                 óæ  — | j         g}t          | j        | j        ¬¦  «        }t	          | j        |¦  «        |dœ}t          d	i |¤Ž}t          |¦  «        }|                     |¦  «         	 | j         	                    ¦   «          | j
                             |d¦  «        } |¦   «          | j
                             |||||¦  «        }	 | j        j        d	i |	¤Ž}
|                     |
¦  «         nV# t           $ rI}|                     |d¦  «         | j
                             |d|¬¦  «        } ||¬¦  «         Y d }~nd }~ww xY w| j                             |¦  «         | xj        dz  c_        |S )
N)Útransfer_idÚexception_translator)Úmetar¶   ÚqueuedTr´   )Úafter_subscribers)Úerroré   ry   )rÅ   ÚCRTTransferCoordinatorrq   rl   ÚCRTTransferMetaÚCRTTransferFutureÚAfterDoneHandlerÚappendrp   r)   rj   Úget_crt_callbackÚget_make_request_argsrh   Úmake_requestÚset_s3_requestrÀ   Úset_exceptionrm   )rr   Úrequest_typeÚ	call_argsÚon_done_after_callsr¶   Ú
componentsÚfutureÚ	afterdoneÚ	on_queuedÚcrt_callargsÚcrt_s3_requestÚeÚon_dones                r-   r�   z#CRTTransferManager._submit_transferx  s×  € Ø#Ô6Ð7ÐÝ,ØÔ(Ø!%Ô!?ð
ñ 
ô 
ˆõ
 $ DÔ$4°iÑ@Ô@Ø&ð
ð 
ˆ
õ #Ð0Ð0 ZÐ0Ð0ˆÝ$ [Ñ1Ô1ˆ	Ø×"Ò" 9Ñ-Ô-Ð-ð	7ØŒO×#Ò#Ñ%Ô%Ð%ØÔ-×>Ò>Ø˜ñô ˆIð ˆI‰KŒKˆKØÔ0×FÒFØØØØØ#ñô ˆLð >˜TÔ0Ô=ÐMÐMÀÐMÐMˆNð ×&Ò& ~Ñ6Ô6Ð6Ð6øõ ð 	ð 	ð 	Ø×%Ò% a¨Ñ.Ô.Ð.ØÔ+×<Ò<Ø˜Ð2Eð =ñ ô ˆGð ˆG˜!ÐÑÔÐÐÐÐÐÐøøøøð	øøøð 	Ô!×(Ò(¨Ñ5Ô5Ð5àÐÔ˜AÑÐÔØˆs   Á-A.C1 Ã1
EÃ;?D?Ä?E©NN©F)Ú__name__Ú
__module__Ú__qualname__r   r�   r”   r™   rŸ   r    rw   r{   rƒ   r‘   r–   rš   r�   rŽ   rŒ   r•   r·   rº   r½   r~   rÅ   r�   ry   rP   r-   rd   rd   Ï   sb  € € € € € Ø+ÔAÐØ)Ô=ÐØ)Ô=Ðà'+Ð$à#2Ô#OÐ ð JNð#ð #ð #ð #ðJð ð ðð ð ð BFð=ð =ð =ð =ð$=ð =ð =ð =ð"@ð @ð @ð @ðð ð ð ðð ð ðð ð ð	ð 	ð 	ð%ð %ð %ð
!ð !ð !ð@ð @ð @ð(ð (ð (ð (ð"ð "ð "ð'ð 'ð 'ð 'ð 'rP   rd   c                   ó\   — e Zd ZdZdd„Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         ZdS )rÏ   z*Holds metadata about the CRTTransferFutureNc                 ó0   — || _         || _        i | _        d S r$   )Ú_transfer_idÚ
_call_argsÚ_user_context)rr   rÇ   rÙ   s      r-   rw   zCRTTransferMeta.__init__¥  s   € Ø'ˆÔØ#ˆŒØˆÔÐÐrP   c                 ó   — | j         S r$   )rë   rz   s    r-   rÙ   zCRTTransferMeta.call_argsª  s
   € àŒÐrP   c                 ó   — | j         S r$   )rê   rz   s    r-   rÇ   zCRTTransferMeta.transfer_id®  s   € àÔ Ð rP   c                 ó   — | j         S r$   )rì   rz   s    r-   Úuser_contextzCRTTransferMeta.user_context²  s   € àÔ!Ð!rP   rã   )	rå   ræ   rç   Ú__doc__rw   ÚpropertyrÙ   rÇ   rð   ry   rP   r-   rÏ   rÏ   ¢  s   € € € € € Ø4Ð4ð ð  ð  ð  ð
 ðð ñ „Xðð ð!ð !ñ „Xð!ð ð"ð "ñ „Xð"ð "ð "rP   rÏ   c                   óF   — e Zd Zdd„Zed„ ¦   «         Zd„ Zd	d„Zd„ Zd„ Z	dS )
rÐ   Nc                 óL   — || _         |€t          ¦   «         | _         || _        dS )aZ  The future associated to a submitted transfer request via CRT S3 client

        :type meta: s3transfer.crt.CRTTransferMeta
        :param meta: The metadata associated to the transfer future.

        :type coordinator: s3transfer.crt.CRTTransferCoordinator
        :param coordinator: The coordinator associated to the transfer future.
        N)Ú_metarÏ   Ú_coordinator)rr   rÉ   r¶   s      r-   rw   zCRTTransferFuture.__init__¸  s+   € ð ˆŒ
Øˆ<Ý(Ñ*Ô*ˆDŒJØ'ˆÔÐÐrP   c                 ó   — | j         S r$   )rõ   rz   s    r-   rÉ   zCRTTransferFuture.metaÆ  s
   € àŒzÐrP   c                 ó4   — | j                              ¦   «         S r$   )rö   r´   rz   s    r-   r´   zCRTTransferFuture.doneÊ  s   € ØÔ ×%Ò%Ñ'Ô'Ð'rP   c                 ó:   — | j                              |¦  «         d S r$   )rö   r¹   ©rr   Útimeouts     r-   r¹   zCRTTransferFuture.resultÍ  s   € ØÔ× Ò  Ñ)Ô)Ð)Ð)Ð)rP   c                 ó8   — | j                              ¦   «          d S r$   )rö   r‚   rz   s    r-   r‚   zCRTTransferFuture.cancelÐ  s   € ØÔ× Ò Ñ"Ô"Ð"Ð"Ð"rP   c                 ó„   — |                       ¦   «         st          d¦  «        ‚| j                             |d¬¦  «         dS )z!Sets the exception on the future.z?set_exception can only be called once the transfer is complete.T)ÚoverrideN)r´   r   rö   r×   ©rr   Ú	exceptions     r-   r×   zCRTTransferFuture.set_exceptionÓ  sM   € à�yŠy‰{Œ{ð 	Ý&ðñô ð ð 	Ô×'Ò'¨	¸DÐ'ÑAÔAÐAÐAÐArP   rã   r$   )
rå   ræ   rç   rw   rò   rÉ   r´   r¹   r‚   r×   ry   rP   r-   rÐ   rÐ   ·  s‰   € € € € € ð(ð (ð (ð (ð ðð ñ „Xðð(ð (ð (ð*ð *ð *ð *ð#ð #ð #ðBð Bð Bð Bð BrP   rÐ   c                   ó   — e Zd Zd„ Zd„ ZdS )ÚBaseCRTRequestSerializerc                 ó    — t          d¦  «        ‚)al  Serialize CRT HTTP requests.

        :type transfer_type: string
        :param transfer_type: the type of transfer made,
            e.g 'put_object', 'get_object', 'delete_object'

        :type future: s3transfer.crt.CRTTransferFuture

        :rtype: awscrt.http.HttpRequest
        :returns: An unsigned HTTP request to be used for the CRT S3 client
        zserialize_http_request()©ÚNotImplementedError)rr   Útransfer_typerÜ   s      r-   Úserialize_http_requestz/BaseCRTRequestSerializer.serialize_http_requestÞ  s   € õ "Ð"<Ñ=Ô=Ð=rP   c                 ó    — t          d¦  «        ‚)Nztranslate_crt_exception()r  rÿ   s     r-   rk   z0BaseCRTRequestSerializer.translate_crt_exceptionì  s   € Ý!Ð"=Ñ>Ô>Ð>rP   N)rå   ræ   rç   r  rk   ry   rP   r-   r  r  Ý  s2   € € € € € ð>ð >ð >ð?ð ?ð ?ð ?ð ?rP   r  c                   óX   — e Zd Zdd„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d	„ Z
d
„ Zd„ Zd„ Zd„ ZdS )ÚBotocoreCRTRequestSerializerNc                 ó¼  — || _         |€i }|                      ||¦  «         t          |fi |¤Ž| _        | j        j        j                             d| j        ¦  «         | j        j        j                             d| j        ¦  «         | j        j        j                             d| j	        ¦  «         | j        j        j                             d| j
        ¦  «         dS )aÂ  Serialize CRT HTTP request using botocore logic
        It also takes into account configuration from both the session
        and any keyword arguments that could be passed to
        `Session.create_client()` when serializing the request.

        :type session: botocore.session.Session

        :type client_kwargs: Optional[Dict[str, str]])
        :param client_kwargs: The kwargs for the botocore
            s3 client initialization.
        Nzrequest-created.s3.*zafter-call.s3.*zbefore-send.s3.*zbefore-call.s3.*)Ú_sessionÚ_resolve_client_configr    Ú_clientrÉ   ÚeventsÚregisterÚ_capture_http_requestÚ+_change_response_to_serialized_http_requestÚ_make_fake_http_responseÚ_remove_checksum_context)rr   ÚsessionÚclient_kwargss      r-   rw   z%BotocoreCRTRequestSerializer.__init__ñ  só   € ð  ˆŒØÐ ØˆMØ×#Ò# G¨]Ñ;Ô;Ð;Ý+¨GÐEÐE°}ÐEÐEˆŒØŒÔÔ ×)Ò)Ø" DÔ$>ñ	
ô 	
ð 	
ð 	ŒÔÔ ×)Ò)Ø˜tÔOñ	
ô 	
ð 	
ð 	ŒÔÔ ×)Ò)Ø Ô =ñ	
ô 	
ð 	
ð 	ŒÔÔ ×)Ò)Ø Ô =ñ	
ô 	
ð 	
ð 	
ð 	
rP   c                 óÞ   — d }|                      ¦   «         r|                      ¦   «         }d|v r|d         }t          t          ¬¦  «        }|r|                     |¦  «        }||d<   d|d<   d S )Nrv   )Úsignature_versionr'   Úservice_name)Úget_default_client_configr   r   Úmerge)rr   r  r  Úuser_provided_configÚclient_configs        r-   r  z3BotocoreCRTRequestSerializer._resolve_client_config  s‹   € Ø#ÐØ×,Ò,Ñ.Ô.ð 	GØ#*×#DÒ#DÑ#FÔ#FÐ Ø�}Ð$Ð$Ø#0°Ô#:Ð åµÐ:Ñ:Ô:ˆØð 	FØ0×6Ò6°}ÑEÔEˆMØ"/ˆ�hÑØ(,ˆ�nÑ%Ð%Ð%rP   c                 óà  — t          |j        ¦  «        }|j        }|j        r|› d|j        › �}g }|j                             ¦   «         D ]W\  }}t          |t          ¦  «        r|                     ||f¦  «         Œ2|                     |t          |d¦  «        f¦  «         ŒXt          j
                             |¦  «        }t          j
                             |j        |||j        ¬¦  «        }|S )Nú?zutf-8)ÚmethodÚpathÚheadersÚbody_stream)r   Úurlr!  Úqueryr"  r¡   r>   r?   rÒ   r&   ÚhttpÚHttpHeadersÚHttpRequestr   Úbody)	rr   Úaws_requestÚ	url_partsÚcrt_pathÚheaders_listr+   ÚvalueÚcrt_headersÚcrt_requests	            r-   Ú_crt_request_from_aws_requestz:BotocoreCRTRequestSerializer._crt_request_from_aws_request  sÿ   € Ý˜[œ_Ñ-Ô-ˆ	Ø”>ˆØŒ?ð 	7Ø"Ð6Ð6 Y¤_Ð6Ð6ˆHØˆØ&Ô.×4Ò4Ñ6Ô6ð 	Að 	A‰KˆD�%Ý˜%¥Ñ%Ô%ð AØ×#Ò# T¨5 MÑ2Ô2Ð2Ð2à×#Ò# T­3¨u°gÑ+>Ô+>Ð$?Ñ@Ô@Ð@Ð@å”k×-Ò-¨lÑ;Ô;ˆå”k×-Ò-ØÔ%ØØØ#Ô(ð	 .ñ 
ô 
ˆð ÐrP   c                 ó  — |                       |¦  «        }|j                             d¦  «        €4t          |j        ¦  «        }|j                             d|j        ¦  «         |j                             d¦  «        �|j                             d¦  «         |j                             d¦  «        €"|j        €|j         	                    dd¦  «         |j                             d¦  «        �|j                             d¦  «         |S )NÚhostzContent-MD5zContent-LengthÚ0zTransfer-Encoding)
r1  r"  r¬   r   r$  ÚsetÚnetlocÚremover)  Úadd)rr   Úbotocore_http_requestr0  r+  s       r-   Ú_convert_to_crt_http_requestz9BotocoreCRTRequestSerializer._convert_to_crt_http_request2  sý   € à×8Ò8Ð9NÑOÔOˆØÔ×"Ò" 6Ñ*Ô*Ð2å Ð!6Ô!:Ñ;Ô;ˆIØÔ×#Ò# F¨IÔ,<Ñ=Ô=Ð=ØÔ×"Ò" =Ñ1Ô1Ð=ØÔ×&Ò& }Ñ5Ô5Ð5ð Ô×"Ò"Ð#3Ñ4Ô4Ð<Ø$Ô)Ð1ØÔ#×'Ò'Ð(8¸#Ñ>Ô>Ð>ð Ô×"Ò"Ð#6Ñ7Ô7ÐCØÔ×&Ò&Ð':Ñ;Ô;Ð;àÐrP   c                 ó   — ||j         d<   d S )NÚhttp_request)Úcontext©rr   ÚrequestrÄ   s      r-   r  z2BotocoreCRTRequestSerializer._capture_http_requestP  s   € Ø*1ˆŒ˜Ñ'Ð'Ð'rP   c                 óD   — |d         }|                      ¦   «         |d<   d S )Nr<  ÚHTTPRequest)Úprepare)rr   r=  ÚparsedrÄ   r?  s        r-   r  zHBotocoreCRTRequestSerializer._change_response_to_serialized_http_requestS  s(   € ð ˜.Ô)ˆØ '§¢Ñ 1Ô 1ˆˆ}ÑÐÐrP   c                 ó`   — t           j                             d di t          d¦  «        ¦  «        S )NéÈ   rP   )ÚbotocoreÚ
awsrequestÚAWSResponseÚFakeRawResponser>  s      r-   r  z5BotocoreCRTRequestSerializer._make_fake_http_responseY  s1   € ÝÔ"×.Ò.ØØØÝ˜CÑ Ô ñ	
ô 
ð 	
rP   c                 óh   —  t          | j        |¦  «        d|j        |j        dœ|j        ¤Žd         S )N)ÚBucketÚKeyrA  ry   )Úgetattrr  r†   r‡   r‰   )rr   Úclient_methodrÙ   s      r-   Ú_get_botocore_http_requestz7BotocoreCRTRequestSerializer._get_botocore_http_requesta  sI   € Ø3�w�t”| ]Ñ3Ô3ð 
ØÔ#¨¬ð
ð 
Ø:CÔ:Nð
ð 
à
ôð 	rP   c                 óp   — |                       ||j        j        ¦  «        }|                      |¦  «        }|S r$   )rO  rÉ   rÙ   r:  )rr   r  rÜ   r9  r0  s        r-   r  z3BotocoreCRTRequestSerializer.serialize_http_requestf  s>   € Ø $× ?Ò ?Ø˜6œ;Ô0ñ!
ô !
Ðð ×7Ò7Ð8MÑNÔNˆØÐrP   c                 ón   — t          |t          j        j        ¦  «        r|                      |¦  «        S d S r$   )r>   r&   r'   ÚS3ResponseErrorÚ _translate_crt_s3_response_errorrÿ   s     r-   rk   z4BotocoreCRTRequestSerializer.translate_crt_exceptionm  s2   € Ý�i¥¤Ô!:Ñ;Ô;ð 	Ø×8Ò8¸ÑCÔCÐCà�4rP   c                 óì  — |j         }|dk     rd S d„ |j        D ¦   «         }|j        }|�,| j        j        j        }|                     |¦  «        j        }nd }t          j	         
                    |¦  «        ||j        dœ}| j        j                             ||¬¦  «        }|                     di ¦  «                             d¦  «        }	| j        j                             |	¦  «        }
 |
||¬¦  «        S )Ni-  c                 ó   — i | ]\  }}||“Œ	S ry   ry   )Ú.0ÚkÚvs      r-   ú
<dictcomp>zQBotocoreCRTRequestSerializer._translate_crt_s3_response_error.<locals>.<dictcomp>z  s   € Ð>Ð>Ð>™D˜A˜q�1�aÐ>Ð>Ð>rP   )r"  Ústatus_coder)  )ÚshapeÚErrorÚCode)Úoperation_name)rZ  r"  r^  r  rÉ   Úservice_modelÚoperation_modelÚoutput_shaperF  rG  ÚHeadersDictr)  Ú_response_parserÚparser¬   Ú
exceptionsÚ	from_code)rr   Ús3_response_errorrZ  r"  r^  r_  r[  Úresponse_dictÚparsed_responseÚ
error_codeÚerror_classs              r-   rS  z=BotocoreCRTRequestSerializer._translate_crt_s3_response_errors  s  € Ø'Ô3ˆØ˜ÒÐð �4à>Ð>Ð$5Ô$=Ð>Ñ>Ô>ˆØ*Ô9ˆØÐ%Ø œLÔ-Ô;ˆMØ!×1Ò1°.ÑAÔAÔNˆEˆEàˆEõ  Ô*×6Ò6°wÑ?Ô?Ø&Ø%Ô*ð
ð 
ˆð
 œ,Ô7×=Ò=Ø ð >ñ 
ô 
ˆð %×(Ò(¨°"Ñ5Ô5×9Ò9¸&ÑAÔAˆ
Ø”lÔ-×7Ò7¸
ÑCÔCˆØˆ{˜?¸>ÐJÑJÔJÐJrP   c                 óD   — |                      di ¦  «        }d|v r|d= d S d S )Nr=  Úchecksum)r¬   )rr   ÚparamsrÄ   Úrequest_contexts       r-   r  z5BotocoreCRTRequestSerializer._remove_checksum_context�  s6   € Ø Ÿ*š* Y°Ñ3Ô3ˆØ˜Ð(Ð(Ø 
Ð+Ð+Ð+ð )Ð(rP   r$   )rå   ræ   rç   rw   r  r1  r:  r  r  r  rO  r  rk   rS  r  ry   rP   r-   r
  r
  ð  sÐ   € € € € € ð
ð 
ð 
ð 
ð<-ð -ð -ðð ð ð,ð ð ð<2ð 2ð 2ð2ð 2ð 2ð
ð 
ð 
ðð ð ð
ð ð ðð ð ðKð Kð Kð8,ð ,ð ,ð ,ð ,rP   r
  c                   ó   — e Zd Zdd„ZdS )rI  é   Nc              #   óD   K  — 	 |                       |¦  «        }|sd S |V — Œr$   )Úread)rr   ÚamtÚdecode_contentÚchunks       r-   ÚstreamzFakeRawResponse.stream–  s5   è è € ð	Ø—I’I˜c‘N”NˆEØð Ø�ØˆKˆKˆKð		rP   )rq  N)rå   ræ   rç   rw  ry   rP   r-   rI  rI  •  s(   € € € € € ðð ð ð ð ð rP   rI  c                   ó&   — e Zd Zd„ Zd„ Zd„ Zd„ ZdS )ÚBotocoreCRTCredentialsWrapperc                 ó   — || _         d S r$   )Ú_resolved_credentials)rr   Úresolved_botocore_credentialss     r-   rw   z&BotocoreCRTCredentialsWrapper.__init__Ÿ  s   € Ø%BˆÔ"Ð"Ð"rP   c                 óŽ   — |                       ¦   «                              ¦   «         }t          |j        |j        |j        ¦  «        S r$   )Ú_get_credentialsÚget_frozen_credentialsr   Ú
access_keyÚ
secret_keyÚtoken)rr   Úcredentialss     r-   Ú__call__z&BotocoreCRTCredentialsWrapper.__call__¢  sA   € Ø×+Ò+Ñ-Ô-×DÒDÑFÔFˆÝØÔ" KÔ$:¸KÔ<Mñ
ô 
ð 	
rP   c                 ó*   — t          j        | ¦  «        S r$   )r   Únew_delegaterz   s    r-   Úto_crt_credentials_providerz9BotocoreCRTCredentialsWrapper.to_crt_credentials_provider¨  s   € Ý%Ô2°4Ñ8Ô8Ð8rP   c                 ó:   — | j         €t          ¦   «         ‚| j         S r$   )r{  r   rz   s    r-   r~  z.BotocoreCRTCredentialsWrapper._get_credentials«  s    € ØÔ%Ð-Ý$Ñ&Ô&Ð&ØÔ)Ð)rP   N)rå   ræ   rç   rw   r„  r‡  r~  ry   rP   r-   ry  ry  ž  sS   € € € € € ðCð Cð Cð
ð 
ð 
ð9ð 9ð 9ð*ð *ð *ð *ð *rP   ry  c                   óh   — e Zd ZdZ	 dd„Zed„ ¦   «         Zd„ Zdd„Zdd„Z	d	„ Z
dd
„Zd„ Zd„ Zd„ ZdS )rÎ   z-A helper class for managing CRTTransferFutureNc                 ó¬   — || _         || _        || _        t          j        ¦   «         | _        d | _        d | _        t          j        ¦   «         | _	        d S r$   )
rÇ   Ú_exception_translatorÚ_s3_requestrn   ÚLockÚ_lockÚ
_exceptionÚ_crt_futureÚEventÚ_done_event)rr   rÇ   Ú
s3_requestrÈ   s       r-   rw   zCRTTransferCoordinator.__init__´  sP   € ð 'ˆÔØ%9ˆÔ"Ø%ˆÔÝ”^Ñ%Ô%ˆŒ
ØˆŒØˆÔÝ$œ?Ñ,Ô,ˆÔÐÐrP   c                 ó   — | j         S r$   )rŒ  rz   s    r-   r“  z!CRTTransferCoordinator.s3_request¿  s   € àÔÐrP   c                 ó8   — | j                              ¦   «          d S r$   )r’  r5  rz   s    r-   Úset_done_callbacks_completez2CRTTransferCoordinator.set_done_callbacks_completeÃ  s   € ØÔ×ÒÑÔÐÐÐrP   c                 ó:   — | j                              |¦  «         d S r$   )r’  Úwaitrú   s     r-   r¼   z<CRTTransferCoordinator.wait_until_on_done_callbacks_completeÆ  s   € ØÔ×Ò˜gÑ&Ô&Ð&Ð&Ð&rP   Fc                 ó€   — | j         5  |                      ¦   «         r|r|| _        d d d ¦  «         d S # 1 swxY w Y   d S r$   )rŽ  r´   r�  )rr   r   rþ   s      r-   r×   z$CRTTransferCoordinator.set_exceptionÉ  sŒ   € ØŒZð 	,ð 	,Ø—9’9‘;”;ð , (ð ,Ø"+�”ð	,ð 	,ð 	,ñ 	,ô 	,ð 	,ð 	,ð 	,ð 	,ð 	,ð 	,ð 	,øøøð 	,ð 	,ð 	,ð 	,ð 	,ð 	,s   ˆ3³7º7c                 óJ   — | j         r| j                              ¦   «          d S d S r$   )rŒ  r‚   rz   s    r-   r‚   zCRTTransferCoordinator.cancelÎ  s2   € ØÔð 	&ØÔ×#Ò#Ñ%Ô%Ð%Ð%Ð%ð	&ð 	&rP   c                 óh  — | j         r| j         ‚	 | j                             |¦  «         nd# t          $ r0 |                      ¦   «          | j                             |¦  «         ‚ t
          $ r}|                      |¦  «         Y d }~nd }~ww xY w| j        r	d | _        d S d S # | j        rd | _        w xY wr$   )r�  r�  r¹   r¿   r‚   rÀ   Úhandle_exceptionrŒ  )rr   rû   rá   s      r-   r¹   zCRTTransferCoordinator.resultÒ  sò   € ØŒ?ð 	"Ø”/Ð!ð
	(ØÔ×#Ò# GÑ,Ô,Ð,Ð,øÝ ð 	ð 	ð 	Ø�KŠK‰MŒMˆMØÔ×#Ò# GÑ,Ô,Ð,ØÝð 	%ð 	%ð 	%Ø×!Ò! !Ñ$Ô$Ð$Ð$Ð$Ð$Ð$Ð$øøøøð	%øøøð Ôð (Ø#'�Ô Ð Ð ð(ð (øˆtÔð (Ø#'�Ô Ð'Ð'Ð'Ð's-   �+ ªB! «ABÁ-BÂB! ÂBÂB! Â!B1c                 ó¶   — d }| j         rJ	 |                       |¦  «        }n3# t          $ r&}t                               d|¬¦  «         Y d }~nd }~ww xY w|�||‚|‚)NzUnable to translate exception.)Úexc_info)r‹  rÀ   rS   rT   )rr   ÚexcÚtranslated_excrá   s       r-   rœ  z'CRTTransferCoordinator.handle_exceptioná  s„   € ØˆØÔ%ð 	ðØ!%×!;Ò!;¸CÑ!@Ô!@��øÝð ð ð õ —’Ð=È�ÑJÔJÐJØ����øøøøð	øøøð
 Ð%Ø  cÐ)àˆIs   ‹! ¡
A«AÁAc                 óF   — | j         €dS | j                              ¦   «         S )NF)r�  r´   rz   s    r-   r´   zCRTTransferCoordinator.doneð  s%   € ØÔÐ#Ø�5ØÔ×$Ò$Ñ&Ô&Ð&rP   c                 ó6   — || _         | j         j        | _        d S r$   )rŒ  Úfinished_futurer�  )rr   r“  s     r-   rÖ   z%CRTTransferCoordinator.set_s3_requestõ  s   € Ø%ˆÔØÔ+Ô;ˆÔÐÐrP   )NNNr$   rä   )rå   ræ   rç   rñ   rw   rò   r“  r–  r¼   r×   r‚   r¹   rœ  r´   rÖ   ry   rP   r-   rÎ   rÎ   ±  s×   € € € € € Ø7Ð7ð GKð	-ð 	-ð 	-ð 	-ð ð ð  ñ „Xð ðð ð ð'ð 'ð 'ð 'ð,ð ,ð ,ð ,ð
&ð &ð &ð(ð (ð (ð (ðð ð ð'ð 'ð 'ð
<ð <ð <ð <ð <rP   rÎ   ÚCRTConfigParameterr+   Úmin_versionc                   óh   — e Zd Zd edd¦  «        iZdd„Zd„ Zd„ Zd„ Zd	„ Z		 	 dd
„Z
d„ Zd„ Zd„ ZdS )ri   Úmax_active_connections_overrideÚmax_request_concurrency)r   é   r   Nc                 ó0   — || _         || _        || _        d S r$   )Ú_request_serializerÚ	_os_utilsÚ_config)rr   rt   Úos_utilsrv   s       r-   rw   zS3ClientArgsCreator.__init__  s   € Ø#9ˆÔ Ø!ˆŒØˆŒˆˆrP   c                 ó�  — | j         j        | j         j        dœ}| j                              d¦  «        | j         j        u rd |d<   | j                              d¦  «        | j         j        u rd |d<   t          | d|› �¦  «        r.|                      t          | d|› �¦  «        ¦   «         ¦  «         |                      |¦  «         |S )N)r7   r§  Úmultipart_chunksizer7   r¨  r§  Ú_get_crt_options_)	r­  r°  r¨  Úget_deep_attrÚUNSET_DEFAULTÚhasattrÚupdaterM  Ú$_remove_param_if_not_min_crt_version)rr   rØ   Ú
crt_configs      r-   Ú _get_crt_transfer_config_optionsz4S3ClientArgsCreator._get_crt_transfer_config_options	  só   € àœÔ9Ø/3¬|Ô/Sð
ð 
ˆ
ð ŒL×&Ò&Ð'<Ñ=Ô=ØŒ|Ô)ð*ð *ð '+ˆJ�{Ñ#àŒL×&Ò&Ð'@ÑAÔAØŒ|Ô)ð*ð *ð =AˆJÐ8Ñ9å�4Ð;¨\Ð;Ð;Ñ<Ô<ð 	Ø×ÒØA•˜Ð@°,Ð@Ð@ÑAÔAÑCÔCñô ð ð 	×1Ò1°*Ñ=Ô=Ð=ØÐrP   c                 ó   — d| j         j        iS )NÚmultipart_upload_threshold)r­  Úmultipart_thresholdrz   s    r-   Ú_get_crt_options_put_objectz/S3ClientArgsCreator._get_crt_options_put_object"  s   € Ø,¨d¬lÔ.NÐOÐOrP   c           
      ó   — g }|D ]À}|| j         vrŒ| j         |         }t          |j        ¦  «        rŒ.| j                             |j        ¦  «        | j        j        urRd                     d„ |j        D ¦   «         ¦  «        }t           	                    d|j        › d|› d|j        › d�¦  «         | 
                    |¦  «         ŒÁ|D ]}||= Œd S )NrV   c              3   ó4   K  — | ]}t          |¦  «        V — Œd S r$   )r?   )rV  Úis     r-   ú	<genexpr>zKS3ClientArgsCreator._remove_param_if_not_min_crt_version.<locals>.<genexpr>3  s(   è è € Ð&IÐ&I°!¥s¨1¡v¤vÐ&IÐ&IÐ&IÐ&IÐ&IÐ&IrP   zTransfer config parameter z requires minimum CRT version: z. z! will not be used in the request.)Ú_CRT_ARG_TO_CONFIG_PARAMrb   r¥  r­  r²  r+   r³  r¦   rS   ÚwarningrÒ   )rr   r·  Ú	to_removeÚrequest_argÚparamÚmin_ver_strs         r-   r¶  z8S3ClientArgsCreator._remove_param_if_not_min_crt_version%  s'  € Øˆ	Ø%ð 	*ð 	*ˆKØ $Ô"?Ð?Ð?ØØÔ1°+Ô>ˆEÝ'¨Ô(9Ñ:Ô:ð Øð ”×*Ò*¨5¬:Ñ6Ô6Ø”|Ô1ð2ð 2ð "ŸhšhÐ&IÐ&I°uÔ7HÐ&IÑ&IÔ&IÑIÔI�Ý—’ðE°´ð Eð EØ5@ðEð Eà”zðEð Eð Eñô ð ð
 ×Ò˜[Ñ)Ô)Ð)Ð)Ø$ð 	(ð 	(ˆKØ˜;Ð'Ð'ð	(ð 	(rP   c                 óV   — t          | d|› �| j        ¦  «        } |||||g |¬¦  «        S )NÚ_get_make_request_args_©rØ   rÙ   r¶   rÜ   Úon_done_before_callsrÚ   )rM  Ú_default_get_make_request_args)rr   rØ   rÙ   r¶   rÜ   rÚ   Úrequest_args_handlers          r-   rÔ   z)S3ClientArgsCreator.get_make_request_args=  sV   € õ  'ØØ4 lÐ4Ð4ØÔ/ñ 
ô  
Ðð
 $Ð#Ø%ØØ#ØØ!#Ø 3ð
ñ 
ô 
ð 	
rP   c                 ó   ‡‡‡‡— ˆˆˆˆfd„}|S )Nc                  óš   •— g }‰�|‰z  }|t          ‰‰¦  «        z  }‰�|‰z  }|D ]#}‰dk    r || d         ¬¦  «         Œ || i |¤Ž Œ$d S )NÚprogressr   )Úbytes_transferred)r!   )r�   rÄ   Úcallbacks_listÚcallbackrË   Úbefore_subscribersÚcallback_typerÜ   s       €€€€r-   Úinvoke_all_callbackszBS3ClientArgsCreator.get_crt_callback.<locals>.invoke_all_callbacksU  s–   ø€ ØˆNØ!Ð-ØÐ"4Ñ4�Ø�m¨F°MÑBÔBÑBˆNØ Ð,ØÐ"3Ñ3�Ø*ð .ð .�ð ! JÒ.Ð.Ø�H¨t°A¬wÐ7Ñ7Ô7Ð7Ð7à�H˜dÐ- fÐ-Ð-Ð-Ð-ð.ð .rP   ry   )rr   rÜ   rÔ  rÓ  rË   rÕ  s    ```` r-   rÓ   z$S3ClientArgsCreator.get_crt_callbackN  s6   øøøø€ ð	.ð 	.ð 	.ð 	.ð 	.ð 	.ð 	.ð 	.ð  $Ð#rP   c                 ó¤  ‡— d }t          ‰j        t          ¦  «        r,‰j        }| j                             |¦  «        }|‰j        d<   n‰j        ‰j        d<   d }	t          ˆfd„t          D ¦   «         ¦  «        sw‰j                             dd¦  «         	                    ¦   «         }
t          j                             t          j        j        |
         t          j        j        j        ¬¦  «        }	d‰j        d<   |                      |‰||||¬	¦  «        }||d
<   |	|d<   | j        �(|                     |                      |¦  «        ¦  «         |S )NÚContentLengthÚBodyc              3   ó*   •K  — | ]}|‰j         v V — Œd S r$   )r‰   )rV  Úchecksum_argrÙ   s     €r-   rÀ  zHS3ClientArgsCreator._get_make_request_args_put_object.<locals>.<genexpr>y  s?   øè è € ð 
ð 
àð ˜IÔ0Ð0ð
ð 
ð 
ð 
ð 
ð 
rP   r«   ÚCRC32)Ú	algorithmÚlocationzoverride-to-be-removedÚ
ContentMD5rÉ  Úsend_filepathÚchecksum_config)r>   rˆ   r?   r¬  Úget_file_sizer‰   Úanyr   Úpopr°   r&   r'   ÚS3ChecksumConfigr®   ÚS3ChecksumLocationÚTRAILERrË  r­  rµ  r¸  )rr   rØ   rÙ   r¶   rÜ   rÊ  rÚ   rß  Údata_lenrà  r±   Úmake_request_argss     `         r-   Ú!_get_make_request_args_put_objectz5S3ClientArgsCreator._get_make_request_args_put_objectg  s‹  ø€ ð ˆÝ�iÔ'­Ñ-Ô-ð 	=Ø%Ô-ˆMØ”~×3Ò3°MÑBÔBˆHØ4<ˆIÔ  Ñ1Ð1à+4Ô+<ˆIÔ  Ñ(àˆÝð 
ð 
ð 
ð 
å 9ð
ñ 
ô 
ñ 
ô 
ð 
	ð "+Ô!5×!9Ò!9Ø# Wñ"ô "çŠe‰gŒgð õ %œi×8Ò8Ý œ)Ô7Ð8JÔKÝœÔ5Ô=ð 9ñ ô ˆOð .Fˆ	Ô˜\Ñ*à ×?Ò?Ø%ØØ#ØØ!5Ø 3ð @ñ 
ô 
Ðð .;Ð˜/Ñ*Ø/>ÐÐ+Ñ,ØŒ<Ð#Ø×$Ò$Ø×5Ò5°lÑCÔCñô ð ð !Ð rP   c                 óô  — d }d }t           j                             d¬¦  «        }	t          |j        t
          ¦  «        rL|j        }
| j                             |
¦  «        }|                     t          ||
|| j        ¦  «        ¦  «         nt          |j        ¦  «        }|                      ||||||¬¦  «        }||d<   ||d<   |	|d<   | j        �(|                     |                      |¦  «        ¦  «         |S )NT)Úvalidate_responserÉ  Úrecv_filepathÚon_bodyrà  )r&   r'   rä  r>   rˆ   r?   r¬  Úget_temp_filenamerÒ   ÚRenameTempFileHandlerÚOnBodyFileObjWriterrË  r­  rµ  r¸  )rr   rØ   rÙ   r¶   rÜ   rÊ  rÚ   rì  rí  rà  Úfinal_filepathrè  s               r-   Ú!_get_make_request_args_get_objectz5S3ClientArgsCreator._get_make_request_args_get_objectš  s*  € ð ˆØˆÝ œ)×4Ò4ÀtÐ4ÑLÔLˆÝ�iÔ'­Ñ-Ô-ð 		=Ø&Ô.ˆNØ œN×<Ò<¸^ÑLÔLˆMØ ×'Ò'Ý%Ø °ÀÄñô ñô ð ð õ *¨)Ô*;Ñ<Ô<ˆGà ×?Ò?Ø%ØØ#ØØ!5Ø 3ð @ñ 
ô 
Ðð .;Ð˜/Ñ*Ø'.Ð˜)Ñ$Ø/>ÐÐ+Ñ,ØŒ<Ð#Ø×$Ò$Ø×5Ò5°lÑCÔCñô ð ð !Ð rP   c                 ó¾  — | j                              ||¦  «        t          t          |                     ¦   «         t          j        ¦  «        |                      |d||¦  «        |                      |d¦  «        dœ}|d         t          j        k    r5d                     d„ |                     d¦  «        D ¦   «         ¦  «        |d<   t          ¦   «         }| 
                    |j        ¦  «        x}	r:|	d	         dk    r.t          t          j        d
dd¬¦  «        |d<   |	d         |_        n3t          |j        ¦  «        rt          t          j        dd¬¦  «        |d<   |S )Nr´   rÏ  )r?  Útyperâ   Úon_progressrô  Ú c              3   ó>   K  — | ]}|                      ¦   «         V — Œd S r$   )Útitle)rV  Úxs     r-   rÀ  zES3ClientArgsCreator._default_get_make_request_args.<locals>.<genexpr>Û  s;   è è € ð :ð :Ø�—’‘	”	ð:ð :ð :ð :ð :ð :rP   Ú_r^  r5   Ú*F)rÜ  r5   Úuse_double_uri_encodeÚshould_normalize_uri_pathÚsigning_configÚresource_name)rÜ  rü  rý  )r«  r  rM  r   r°   ÚDEFAULTrÓ   r¦   rZ   Ú_S3ArnParamHandlerÚ
handle_arnr†   r   r   ÚV4_ASYMMETRICr"   ÚV4_S3EXPRESS)
rr   rØ   rÙ   r¶   rÜ   rÊ  rÚ   rè  Úarn_handlerÚaccesspoint_arn_detailss
             r-   rË  z2S3ClientArgsCreator._default_get_make_request_argsÂ  sŸ  € ð Ô/×FÒFØ˜fñô õ Ý˜|×1Ò1Ñ3Ô3µ]Ô5Jñô ð ×,Ò,Ø˜Ð 4Ð6Iñô ð  ×0Ò0°¸ÑDÔDð
ð 
Ðð ˜VÔ$­Ô(=Ò=Ð=Ø24·'²'ð :ð :Ø#/×#5Ò#5°cÑ#:Ô#:ð:ñ :ô :ñ 3ô 3ÐÐ.Ñ/õ )Ñ*Ô*ˆà'2×'=Ò'=¸iÔ>NÑ'OÔ'OÐOÐ#ð	à% hÔ/°2Ò5Ð5õ
 3CÝ-Ô;ØØ&+Ø*/ð	3ñ 3ô 3ÐÐ.Ñ/ð  7°ÔGˆIÔÐÝ  Ô!1Ñ2Ô2ð 	õ 3CÝ-Ô:Ø&+Ø*/ð3ñ 3ô 3ÐÐ.Ñ/ð
 !Ð rP   r$   rã   )rå   ræ   rç   r¤  rÁ  rw   r¸  r¼  r¶  rÔ   rÓ   ré  rò  rË  ry   rP   r-   ri   ri   ý  sÒ   € € € € € à)Ð+=Ð+=Ø% zñ,
ô ,
ð Ððð ð ð ð
ð ð ð2Pð Pð Pð(ð (ð (ð0
ð 
ð 
ð*  Øð$ð $ð $ð $ð21!ð 1!ð 1!ðf&!ð &!ð &!ðP4!ð 4!ð 4!ð 4!ð 4!rP   ri   c                   ó   — e Zd Zd„ Zd„ ZdS )rï  c                 ó>   — || _         || _        || _        || _        d S r$   )rö   Ú_final_filenameÚ_temp_filenamerg   )rr   r¶   Úfinal_filenameÚtemp_filenameru   s        r-   rw   zRenameTempFileHandler.__init__ú  s%   € Ø'ˆÔØ-ˆÔØ+ˆÔØˆŒˆˆrP   c                 óJ  — |d         }|r!| j                              | j        ¦  «         d S 	 | j                              | j        | j        ¦  «         d S # t
          $ rD}| j                              | j        ¦  «         | j                             |¦  «         Y d }~d S d }~ww xY w)NrÌ   )rg   Úremove_filer
  Úrename_filer	  rÀ   rö   r×   )rr   rÄ   rÌ   rá   s       r-   r„  zRenameTempFileHandler.__call__   sÉ   € Ø�w”ˆØð 
	3ØŒL×$Ò$ TÔ%8Ñ9Ô9Ð9Ð9Ð9ð3Ø”×(Ò(ØÔ'¨Ô)=ñô ð ð ð øõ ð 3ð 3ð 3Ø”×(Ò(¨Ô)<Ñ=Ô=Ð=àÔ!×/Ò/°Ñ2Ô2Ð2Ð2Ð2Ð2Ð2Ð2Ð2øøøøð3øøøs   ­%A Á
B"Á9BÂB"N©rå   ræ   rç   rw   r„  ry   rP   r-   rï  rï  ù  s2   € € € € € ðð ð ð3ð 3ð 3ð 3ð 3rP   rï  c                   ó   — e Zd Zd„ Zd„ ZdS )rÑ   c                 ó   — || _         d S r$   )rö   rµ   s     r-   rw   zAfterDoneHandler.__init__  s   € Ø'ˆÔÐÐrP   c                 ó8   — | j                              ¦   «          d S r$   )rö   r–  rÃ   s     r-   r„  zAfterDoneHandler.__call__  s   € ØÔ×5Ò5Ñ7Ô7Ð7Ð7Ð7rP   Nr  ry   rP   r-   rÑ   rÑ     s2   € € € € € ð(ð (ð (ð8ð 8ð 8ð 8ð 8rP   rÑ   c                   ó   — e Zd Zd„ Zd„ ZdS )rð  c                 ó   — || _         d S r$   )Ú_fileobj)rr   rˆ   s     r-   rw   zOnBodyFileObjWriter.__init__  s   € ØˆŒˆˆrP   c                 ó:   — | j                              |¦  «         d S r$   )r  Úwrite)rr   rv  rÄ   s      r-   r„  zOnBodyFileObjWriter.__call__  s   € ØŒ×Ò˜EÑ"Ô"Ð"Ð"Ð"rP   Nr  ry   rP   r-   rð  rð    s2   € € € € € ð ð  ð  ð#ð #ð #ð #ð #rP   rð  c                   óJ   — e Zd ZdZ ej        d¦  «        Zd„ Zd„ Zd„ Z	d„ Z
dS )r  a  Partial port of S3ArnParamHandler from botocore.

    This is used to make a determination on MRAP accesspoints for signing
    purposes. This should be safe to remove once we properly integrate auth
    resolution from Botocore into the CRT transfer integration.
    zA^(?P<resource_type>accesspoint|outpost)[/:](?P<resource_name>.+)$c                 ó,   — t          ¦   «         | _        d S r$   )r   Ú_arn_parserrz   s    r-   rw   z_S3ArnParamHandler.__init__+  s   € Ý$™;œ;ˆÔÐÐrP   c                 óT   — |                       |¦  «        }|€d S |d         dk    r|S d S )NÚresource_typeÚaccesspoint)Ú_get_arn_details_from_bucket©rr   r†   Úarn_detailss      r-   r  z_S3ArnParamHandler.handle_arn.  s>   € Ø×7Ò7¸Ñ?Ô?ˆØÐØˆFØ�Ô'¨=Ò8Ð8ØÐð 9Ð8rP   c                 óŠ   — 	 | j                              |¦  «        }|                      |¦  «         |S # t          $ r Y nw xY wd S r$   )r  Ú	parse_arnÚ_add_resource_type_and_namer   r   s      r-   r  z/_S3ArnParamHandler._get_arn_details_from_bucket5  s\   € ð	ØÔ*×4Ò4°VÑ<Ô<ˆKØ×,Ò,¨[Ñ9Ô9Ð9ØÐøÝ"ð 	ð 	ð 	ØˆDð	øøøàˆts   ‚03 ³
A ¿A c                 ó®   — | j                              |d         ¦  «        }|r2|                     d¦  «        |d<   |                     d¦  «        |d<   d S d S )Nr£   r  rÿ  )Ú_RESOURCE_REGEXr¢   Úgroup)rr   r!  r¢   s      r-   r$  z._S3ArnParamHandler._add_resource_type_and_name>  sd   € ØÔ$×*Ò*¨;°zÔ+BÑCÔCˆØð 	HØ+0¯;ª;°Ñ+GÔ+GˆK˜Ñ(Ø+0¯;ª;°Ñ+GÔ+GˆK˜Ñ(Ð(Ð(ð	Hð 	HrP   N)rå   ræ   rç   rñ   ÚreÚcompiler&  rw   r  r  r$  ry   rP   r-   r  r    sw   € € € € € ðð ð !�b”jØLñô €Oð'ð 'ð 'ðð ð ðð ð ðHð Hð Hð Hð HrP   r  r$   )LÚloggingr(  rn   Úcollectionsr   Úior   Úawscrt.httpr&   Ú	awscrt.s3Úbotocore.awsrequestrF  Úbotocore.sessionÚawscrt.authr   r   r   r   Ú	awscrt.ior	   r
   r   r   r   r   r   r   r   Úbotocore.compatr   Úbotocore.configr   Úbotocore.exceptionsr   r   Úbotocore.utilsr   r   Ús3transfer.constantsr   r   Ús3transfer.exceptionsr   Ús3transfer.futuresr   r   Ús3transfer.managerr   Ús3transfer.utilsr   r   r    r!   r"   Ú	getLoggerrå   rS   r%   r.   rO   rD   rb   rd   rÏ   rÐ   r  r
  rI  ry  rÎ   r¤  ri   rï  rÑ   rð  r  ry   rP   r-   ú<module>r=     s  ðð €€€Ø 	€	€	€	Ø Ð Ð Ð Ø "Ð "Ð "Ð "Ð "Ð "Ø Ð Ð Ð Ð Ð à Ð Ð Ð Ø Ð Ð Ð Ø Ð Ð Ð Ø Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð @Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ø Ð Ð Ð Ð Ð Ø $Ð $Ð $Ð $Ð $Ð $Ø "Ð "Ð "Ð "Ð "Ð "Ø FÐ FÐ FÐ FÐ FÐ FÐ FÐ FØ 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9à >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø CÐ CÐ CÐ CÐ CÐ CÐ CÐ CØ .Ð .Ð .Ð .Ð .Ð .ðð ð ð ð ð ð ð ð ð ð ð ð ð ð 
ˆÔ	˜8Ñ	$Ô	$€àÐ ðð ð ð6 "ØØØ�"‰fØØð[ð [ð [ð [ð|ð ð ð ð$0ð 0ð 0ðPð Pð Pð Pð Pñ Pô Pð Pðf"ð "ð "ð "ð "Ð&ñ "ô "ð "ð*#Bð #Bð #Bð #Bð #BÐ*ñ #Bô #Bð #BðL?ð ?ð ?ð ?ð ?ñ ?ô ?ð ?ð&b,ð b,ð b,ð b,ð b,Ð#;ñ b,ô b,ð b,ðJð ð ð ð �gñ ô ð ð*ð *ð *ð *ð *ñ *ô *ð *ð&F<ð F<ð F<ð F<ð F<ñ F<ô F<ð F<ðR  �ZÐ 4°v¸}Ð6MÑNÔNÐ ðy!ð y!ð y!ð y!ð y!ñ y!ô y!ð y!ðx3ð 3ð 3ð 3ð 3ñ 3ô 3ð 3ð,8ð 8ð 8ð 8ð 8ñ 8ô 8ð 8ð#ð #ð #ð #ð #ñ #ô #ð #ð#Hð #Hð #Hð #Hð #Hñ #Hô #Hð #Hð #Hð #HrP   