ó
    Ú°›jp ã                   ó	  • 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	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  S SKJrJr  S SKrS SKJr  S SKJr  S SKrS SK rS SK!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-J.r.J/r/J0r0J1r1J2r2J3r3J4r4J5r5J6r6J7r7J8r8  S S	K9J:r:J;r;J<r<J=r=J>r>J?r?J@r@JArAJBrBJCrCJDrDJErEJFrFJGrGJHrHJIrIJJrJJKrKJLrLJMrMJNrNJOrOJPrP  S S
KQJRrRJSrSJTrT  \Rª                  " \V5      rWSrXSrYSrZSr[Sr\\Rº                  " S5      r^\I\>\<\=4r_S/r`0 SS_SS_SS_SS_SS_SS_SS_S S!_S"S#_S$S%_S&S'_S(S)_S*S+_S,S-_S.S/_S0S1_S2S3_0 S4S5_S6S7_S8S9_S:S;_S<S=_S>S?_S@SA_SBSC_SDSE_SFSG_SHSI_SJSG_SKSL_SMSN_SOSP_SQSR_SSST_E0 SUST_SVS/_SWS1_SXSY_SZS[_S\S]_S^S__S`Sa_SbSc_SdSP_SeSf_SgSh_SiSh_SjSk_SlS]_SmSn_SoSp_ESqSrSsS_StSuSvSwSxSySySzSASqS{.Era\Rº                  " S|\RÄ                  S}9rcS~rdS reS€ rfS� rgS‚ rhSƒ riS„ rjS… rkS† rlS‡ rmGSSˆ jrnS‰ roSŠ rp " S‹ SŒ\q5      rr " S� SŽ\q5      rs " S� S�5      rt " S‘ S’\t5      ru " S“ S”5      rv " S• S–\t5      rwGSS— jrxS˜ ry\z4S™ jr{Sš r|\\4S› jr}\\4Sœ jr~S� rSž r€SŸ r�S  r‚GSS¡ jrƒGSS¢ jr„S£ r…S¤ r† " S¥ S¦5      r‡ " S§ S¨5      rˆS© r‰Sª rŠS« r‹S¬ rŒS­ r�S® rŽ GSS¯ jr� GSS° jr�S± r‘S² r’S³ r“S´ r”Sµ r•GSS¶ jr–GSS· jr—S¸ r˜S¹ r™ " Sº S»5      rš " S¼ S½\š5      r› " S¾ S¿5      rœ " SÀ SÁ5      r� " SÂ SÃ5      rž " SÄ SÅ\Ÿ5      r  " SÆ SÇ5      r¡ " SÈ SÉ5      r¢ " SÊ SË5      r£ " SÌ SÍ5      r¤ " SÎ SÏ5      r¥ " SÐ SÑ\¥5      r¦ " SÒ SÓ5      r§SÔ r¨SÕ r©SÖ rªGSS× jr«SØ r¬SÙ r­SÚ r®SÛ r¯SÜ r°SÝ r±SÞ r²Sß r³Sà r´ " Sá Sâ5      rµ " Sã Sä5      r¶ " Så Sæ5      r·Sç r¸ " Sè Sé5      r¹Sê rºSë r»GSSì jr¼Sí r½SîSt0r¾0 SS_SS_SïSð_SS_S S!_S"S#_S$S%_S&S'_S(S)_S*S+_S,S-_S4S5_S8S9_S6S7_S:S;_S<S=_S>S?_0 SñSò_S@SA_SBSC_SJSG_SKSL_SQSR_SSST_SóSô_SVS/_SWS1_SõSö_SXSY_S÷Sø_SZS[_S\S]_SùSú_S^S__E0 SûSü_S`Sa_SbSc_SeSf_SdSP_SiSh_SjSk_SýSþ_SÿSq_GS Sr_GSSs_GSGS_GSSu_GSSv_GSSw_GSSx_GSGS	_ESySzGS
.Er¿GS rÀ " GS GS5      rÁg(  é    N)Údatetime)Ú
ip_address)ÚPath)Ú
getproxiesÚproxy_bypass)Útzutc)ÚLocationParseError)ÚHAS_CRTÚHEX_PATÚIPV4_PATÚIPV4_REÚIPV6_ADDRZ_PATÚIPV6_ADDRZ_REÚIPV6_PATÚLS32_PATÚMD5_AVAILABLEÚUNRESERVED_PATÚUNSAFE_URL_CHARSÚZONE_ID_PATÚOrderedDictÚget_current_datetimeÚget_md5Úget_tzinfo_optionsÚjsonÚquoteÚurlparseÚurlsplitÚ
urlunsplitÚzip_longest)ÚClientErrorÚConfigNotFoundÚConnectionClosedErrorÚConnectTimeoutErrorÚEndpointConnectionErrorÚHTTPClientErrorÚInvalidDNSNameErrorÚ!InvalidEndpointConfigurationErrorÚInvalidExpressionErrorÚInvalidHostLabelErrorÚInvalidIMDSEndpointErrorÚInvalidIMDSEndpointModeErrorÚInvalidRegionErrorÚMetadataRetrievalErrorÚMissingDependencyExceptionÚReadTimeoutErrorÚSSOTokenLoadErrorÚUnsupportedOutpostResourceErrorÚ*UnsupportedS3AccesspointConfigurationErrorÚUnsupportedS3ArnErrorÚUnsupportedS3ConfigurationErrorÚUnsupportedS3ControlArnErrorÚ&UnsupportedS3ControlConfigurationError)ÚPluginContextÚreset_plugin_contextÚset_plugin_contexté   zhttp://169.254.169.254/zhttp://[fd00:ec2::254]/)Úipv4Úipv6z-._~z[a-z0-9][a-z0-9\-]*[a-z0-9]Ú	dualstackzapi.mediatailorÚmediatailorzapi.pricingÚpricingzapi.sagemakerÚ	sagemakerÚ
apigatewayzapi-gatewayzapplication-autoscalingzapplication-auto-scalingÚ
appstream2Ú	appstreamÚautoscalingzauto-scalingzautoscaling-planszauto-scaling-plansÚcezcost-explorerÚ
cloudhsmv2zcloudhsm-v2Úcloudsearchdomainzcloudsearch-domainzcognito-idpzcognito-identity-providerÚconfigzconfig-serviceÚcurzcost-and-usage-report-servicezdata.iotziot-data-planezdata.jobs.iotziot-jobs-data-planezdata.mediastorezmediastore-dataÚdatapipelinezdata-pipelineÚ
devicefarmzdevice-farmÚdirectconnectzdirect-connectÚ	discoveryzapplication-discovery-serviceÚdmszdatabase-migration-serviceÚdszdirectory-serviceÚdynamodbstreamszdynamodb-streamsÚelasticbeanstalkzelastic-beanstalkÚelasticfilesystemÚefsÚelasticloadbalancingzelastic-load-balancingÚelasticmapreduceÚemrÚelbÚelbv2zelastic-load-balancing-v2ÚemailÚseszentitlement.marketplacezmarketplace-entitlement-serviceÚeszelasticsearch-serviceÚeventsÚeventbridgezcloudwatch-eventsziot-dataziot-jobs-dataÚkinesisanalyticszkinesis-analyticsÚkinesisvideozkinesis-videoz
lex-modelszlex-model-building-servicezlex-runtimezlex-runtime-serviceÚlogszcloudwatch-logsÚmachinelearningzmachine-learningzmarketplace-entitlementÚmarketplacecommerceanalyticszmarketplace-commerce-analyticszmetering.marketplacezmarketplace-meteringÚmeteringmarketplaceÚmghzmigration-hubz
models.lexÚ
monitoringÚ
cloudwatchzmturk-requesterÚmturkzresource-groups-tagging-apizroute-53zroute-53-domainszsagemaker-runtimeÚsimpledbzsecrets-managerÚserverlessapplicationrepositoryzservice-catalogÚsfnzstorage-gateway)ÚresourcegroupstaggingapiÚroute53Úroute53domainszruntime.lexúruntime.sagemakerÚsdbÚsecretsmanagerÚserverlessrepoÚservicecatalogÚstatesÚstepfunctionsÚstoragegatewayzstreams.dynamodbÚtaggingz^X-Amz-Checksum-([a-z0-9]*)$)Úflags)r   z	rest-jsonzrest-xmlzsmithy-rpc-v2-cborÚqueryÚec2c                 ó‚   • [        U [        5      (       a  U $ [        U [        5      (       a  U R                  5       S:H  $ g)zvEnsures a boolean value if a string or boolean is provided

For strings, the value for True/False is case insensitive
ÚtrueF)Ú
isinstanceÚboolÚstrÚlower©Úvals    ÚK/home/mande/repo/quber/.venv/lib/python3.13/site-packages/botocore/utils.pyÚensure_booleanrƒ   Ë   s7   € ô
 �#”t×ÑØˆ
Ü	�Cœ×	Ñ	Ø�y‰y‹{˜fÑ$Ð$àó    c                 óº   • U R                  S5      nUb0  UR                  5       nU[        ;  a  U[        S.n[        S0 UD6eU$ U R                  S5      (       a  gg)z~Resolving IMDS endpoint mode to either IPv6 or IPv4.

ec2_metadata_service_endpoint_mode takes precedence over imds_use_ipv6.
Ú"ec2_metadata_service_endpoint_mode)ÚmodeÚvalid_modesÚimds_use_ipv6r<   r;   © )Úget_config_variabler   ÚMETADATA_ENDPOINT_MODESr+   )ÚsessionÚendpoint_modeÚlendpoint_modeÚerror_msg_kwargss       r‚   Úresolve_imds_endpoint_moder‘   Ø   sr   € ð
 ×/Ñ/Ø,ó€Mð Ñ Ø&×,Ñ,Ó.ˆØÔ!8Ó8à%Ü6ñ Ðô /ÑBÐ1AÑBÐBØÐØ	×	$Ñ	$ _×	5Ñ	5ØØr„   c                 óÖ   • [        U S5      =(       aW    U R                  R                  SS5      =(       a4    U R                  R                  S5      S:H  =(       a    U R                  S:H  $ )zêDetermines if the provided shape is the special header type jsonvalue.

:type shape: botocore.shape
:param shape: Shape to be inspected for the jsonvalue trait.

:return: True if this type is a jsonvalue, False otherwise
:rtype: Bool
ÚserializationÚ	jsonvalueFÚlocationÚheaderÚstring)Úhasattrr“   ÚgetÚ	type_name)Úshapes    r‚   Úis_json_value_headerrœ   î   s_   € ô 	��Ó'÷ 	(Ø×Ñ×#Ñ# K°Ó7÷	(à×Ñ×#Ñ# JÓ/°8Ñ;÷	(ð �O‰O˜xÑ'ð	r„   c                 óì   • U c  g[        U[        R                  R                  5      (       a  X;   $ U R	                  5       UR                  5        Vs/ s H  o"R	                  5       PM     sn;   $ s  snf )z&Case-insensitive check for header key.F)r|   ÚbotocoreÚ
awsrequestÚHeadersDictr   Úkeys)Úheader_nameÚheadersÚkeys      r‚   Ú
has_headerr¥   ÿ   s]   € àÑØÜ	�GœX×0Ñ0×<Ñ<×	=Ñ	=ØÑ%Ð%à× Ñ Ó"¸g¿l¹l¼nÓ&Mºn°s§y¡y¦{¹nÑ&MÑMÐMùÒ&Ms   ÁA1c                 óþ   • U R                   R                  SU R                   R                  SU R                  5      5      nUR                  SS5      nUR                  SS5      n[        R
                  " SSU5      nU$ )znReturns the module name for a service

This is the value used in both the documentation and client class name
ÚserviceAbbreviationÚserviceFullNameÚAmazonÚ ÚAWSz\W+)Úmetadatar™   Úservice_nameÚreplaceÚreÚsub)Úservice_modelÚnames     r‚   Úget_service_module_namer³   	  su   € ð
 ×!Ñ!×%Ñ%ØØ×Ñ×"Ñ"Ø˜}×9Ñ9ó	
ó€Dð �<‰<˜ "Ó%€DØ�<‰<˜˜rÓ"€DÜ�6Š6�&˜"˜dÓ#€DØ€Kr„   c                 ó(   • U (       d  g[        U 5      $ )NÚ/)Úremove_dot_segments©Úpaths    r‚   Únormalize_url_pathr¹     s   € ÞØÜ˜tÓ$Ð$r„   c                 ó"   • U c  U $ [        U 5      $ )zHReturns None if val is None, otherwise ensure value
converted to boolean)rƒ   r€   s    r‚   Únormalize_booleanr»      s   € ð �{Øˆ
ä˜cÓ"Ð"r„   c                 óD  • U (       d  gU R                  S5      n/ nU HF  nU(       d  M  US:w  d  M  US:X  a  U(       a  UR                  5         M3  M5  UR                  U5        MH     U S   S:X  a  SnOSnU S   S:X  a
  U(       a  SnOSnUSR                  U5      -   U-   $ )Nrª   rµ   Ú.z..r   éÿÿÿÿ)ÚsplitÚpopÚappendÚjoin)ÚurlÚ	input_urlÚoutput_listÚxÚfirstÚlasts         r‚   r¶   r¶   )  s¡   € ö ØØ—	‘	˜#“€IØ€KÛˆßˆ1��c•Ø�D‹yÞØ—O‘OÖ%ñ ð ×"Ñ" 1Ö%ñ ð ˆ1�v�ƒ}Ø‰àˆØ
ˆ2�w�#ƒ~ž+Ø‰àˆØ�3—8‘8˜KÓ(Ñ(¨4Ñ/Ð/r„   c                 ó^   • U (       a  U S:X  a	  [        U S9eS H  nX;   d  M
  [        U S9e   g )Nr½   ©Ú
expression)Ú[Ú]Ú*)r(   )rË   Úinvalids     r‚   Úvalidate_jmespath_for_setrÐ   D  s4   € ö ˜ sÓ*Ü$°
Ñ;Ð;ã"ˆØÕ Ü(°JÑ?Ð?ò #r„   c                 óâ   • U(       a  [        U5        UR                  SS5      nUS   [        U5      S:”  a  US   OSpeU(       d	  [        US9eU(       a  XP;  a  0 X'   [	        X   XbSS9$ X U'   g )Nr½   r:   r   rª   rÊ   F)Úis_first)rÐ   r¿   Úlenr(   Úset_value_from_jmespath)ÚsourcerË   ÚvaluerÒ   ÚbitsÚcurrent_keyÚ	remainders          r‚   rÔ   rÔ   O  s~   € ö Ü! *Ô-à×Ñ˜C Ó#€DØ! !™W´°T³¸Q³ d¨1¢gÀB�æÜ$°
Ñ;Ð;æØÓ$ð #%ˆFÑä&ØÑ ¸Eñ
ð 	
ð
  ˆ;Òr„   c                 óR   • U R                  S0 5      nUR                  S5      S:H  nU$ )z9Determine if request is intended for an MRAP accesspoint.Ús3_accesspointÚregionrª   ©r™   )ÚcontextrÛ   Ú	is_globals      r‚   Úis_global_accesspointrà   m  s.   € à—[‘[Ð!1°2Ó6€NØ×"Ñ" 8Ó,°Ñ2€IØÐr„   c                 óˆ   • [        SS9n[        U5      n U R                  " U40 UD6[        U5        $ ! [        U5        f = f)NÚDISABLED)Úplugins)r7   r9   Úcreate_clientr8   )r�   r­   ÚkwargsÚctxÚtokens        r‚   Úcreate_nested_clientrè   t  sB   € ô  
Ñ
+€CÜ˜sÓ#€Eð$Ø×$Ò$ \Ñ<°VÑ<ä˜UÕ#øÔ˜UÕ#ús	   –4 ´Ac                   ó   • \ rS rSrSrSrg)Ú_RetriesExceededErrori€  z@Internal exception used when the number of retries are exceeded.rŠ   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú__static_attributes__rŠ   r„   r‚   rê   rê   €  s   † ÙJâr„   rê   c                   ó   • \ rS rSrS rSrg)ÚBadIMDSRequestErrori†  c                 ó   • Xl         g ©N©Úrequest©Úselfrö   s     r‚   Ú__init__ÚBadIMDSRequestError.__init__‡  s   € Ø�r„   rõ   N)rë   rì   rí   rî   rù   rð   rŠ   r„   r‚   rò   rò   †  s   † õr„   rò   c                   ó†   • \ rS rSr\rSrSr\S\	SSS4S j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S jrSrg)ÚIMDSFetcheri‹  zlatest/api/tokenÚ21600r:   Nc                 ó¨  • Xl         X l        Uc  0 nU R                  X65      U l        X`l        Uc  [
        R                  R                  5       nUR                  SS5      R                  5       S:H  U l
        UR                  S5      U l        XPl        [        R                  R                  U R                   [!        U R                  5      S9U l        g )NÚAWS_EC2_METADATA_DISABLEDÚfalser{   Úec2_metadata_v1_disabled)ÚtimeoutÚproxies)Ú_timeoutÚ_num_attemptsÚ_select_base_urlÚ	_base_urlÚ_configÚosÚenvironÚcopyr™   r   Ú	_disabledÚ_imds_v1_disabledÚ_user_agentrž   ÚhttpsessionÚURLLib3SessionÚget_environ_proxiesÚ_session)rø   r  Únum_attemptsÚbase_urlÚenvÚ
user_agentrH   s          r‚   rù   ÚIMDSFetcher.__init__�  s³   € ð  ŒØ)ÔØ‰>ØˆFØ×.Ñ.¨xÓ@ˆŒØŒà‰;Ü—*‘*—/‘/Ó#ˆCà�G‰GÐ/°Ó9×?Ñ?ÓAÀVÑKð 	Œð "(§¡Ð,FÓ!GˆÔØ%ÔÜ ×,Ñ,×;Ñ;Ø—M‘MÜ'¨¯©Ó7ð <ð 
ˆ�r„   c                 ó   • U R                   $ rô   )r  ©rø   s    r‚   Úget_base_urlÚIMDSFetcher.get_base_url¬  s   € Ø�~‰~Ðr„   c                 óX  • Uc  0 nUR                  S5      S:H  nUR                  S5      nU(       a  U(       a  [        R                  S5        S nU[        :w  a  UnOU(       a  UnOU(       a  [        nO[        n[        R                  SU5        [        U5      (       d	  [        US9eU$ )Nr†   r<   Úec2_metadata_service_endpointzFCustom endpoint and IMDS_USE_IPV6 are both set. Using custom endpoint.zIMDS ENDPOINT: %s)Úendpoint)r™   ÚloggerÚwarningÚMETADATA_BASE_URLÚMETADATA_BASE_URL_IPv6ÚdebugÚis_valid_urir*   )rø   r  rH   Úrequires_ipv6Úcustom_metadata_endpointÚchosen_base_urls         r‚   r  ÚIMDSFetcher._select_base_url¯  s¡   € Ø‰>ØˆFð �J‰JÐ;Ó<ÀÑFð 	ð $*§:¡:Ð.MÓ#NÐ æÖ5Ü�N‰NØXôð ˆàÔ(Ó(Ø&‰OÞ%Ø6‰OÞÜ4‰Oä/ˆOä�‰Ð(¨/Ô:Ü˜O×,Ñ,Ü*°OÑDÐDàÐr„   c                 ó�   • SnU R                   (       a"  U R                   R                  S5      (       d  SnU R                    U U 3$ )Nrª   rµ   )r  Úendswith)rø   r¸   Úseps      r‚   Ú_construct_urlÚIMDSFetcher._construct_urlÎ  s?   € ØˆØ�>�> $§.¡.×"9Ñ"9¸#×">Ñ">ØˆCØ—.‘.Ð! #  t fÐ-Ð-r„   c           	      óô  • U R                  5         U R                  U R                  5      nSU R                  0nU R	                  U5        [
        R                  R                  SXS9n[        U R                  5       Hx  n U R                  R                  UR                  5       5      nUR                  S:X  a  UR                  s  $ UR                  S;   a    g UR                  S;   a  [        U5      eMz     g ! [          a       g ["         a!  n[$        R'                  SUUSS	9   S nAM¯  S nAf[(         a=  n[+        UR,                  R/                  S
5      [0        5      (       a	  [3        XS9ee S nAff = f)Nz$x-aws-ec2-metadata-token-ttl-secondsÚPUT©ÚmethodrÃ   r£   éÈ   )i”  i“  i•  )i�  úOCaught retryable HTTP exception while making metadata service request to %s: %sT©Úexc_infoÚerror)r  r6  )Ú_assert_enabledr,  Ú_TOKEN_PATHÚ
_TOKEN_TTLÚ_add_user_agentrž   rŸ   Ú
AWSRequestÚranger  r  ÚsendÚprepareÚstatus_codeÚtextrò   r/   ÚRETRYABLE_HTTP_ERRORSr  r#  r%   r|   rå   r™   r	   r*   )rø   rÃ   r£   rö   ÚiÚresponseÚes          r‚   Ú_fetch_metadata_tokenÚ!IMDSFetcher._fetch_metadata_tokenÔ  sW  € Ø×ÑÔØ×!Ñ! $×"2Ñ"2Ó3ˆà2°D·O±Oð
ˆð 	×Ñ˜WÔ%Ü×%Ñ%×0Ñ0Ø˜cð 1ð 
ˆô �t×)Ñ)Ö*ˆAðØŸ=™=×-Ñ-¨g¯o©oÓ.?Ó@�Ø×'Ñ'¨3Ó.Ø#Ÿ=™=Ò(Ø×)Ñ)¨_Ó<ÙØ×)Ñ)¨VÓ3Ü-¨gÓ6Ð6ñ 4ñ +ð0 øô $ó ÚÜ(ó Ü—‘ð0àØØ!ð ÷ ûô #ó Ü˜aŸh™hŸl™l¨7Ó3Ô5G×HÑHÜ2¸CÑIÐIàûð	ús7   ÂAC;Ã	C;ÃC;Ã;
E7Ä	E7ÄD-Ä-E7Ä:8E2Å2E7c           	      ó*  • U R                  5         U(       d  U R                  5         Uc  U R                  nU R                  U5      n0 nUb  X5S'   U R	                  U5        [        U R                  5       H\  n [        R                  R                  SXES9nU R                  R                  UR                  5       5      nU" U5      (       d  Us  $ M^     U R!                  5       e! [         a!  n	[        R                  SUU	SS9   Sn	A	M–  Sn	A	ff = f)a  Make a get request to the Instance Metadata Service.

:type url_path: str
:param url_path: The path component of the URL to make a get request.
    This arg is appended to the base_url that was provided in the
    initializer.

:type retry_func: callable
:param retry_func: A function that takes the response as an argument
     and determines if it needs to retry. By default empty and non
     200 OK responses are retried.

:type token: str
:param token: Metadata token to send along with GET requests to IMDS.
Nzx-aws-ec2-metadata-tokenÚGETr0  r3  Tr4  )r7  Ú_assert_v1_enabledÚ_default_retryr,  r:  r<  r  rž   rŸ   r;  r  r=  r>  rA  r  r#  Ú_RETRIES_EXCEEDED_ERROR_CLS)
rø   Úurl_pathÚ
retry_funcrç   rÃ   r£   rB  rö   rC  rD  s
             r‚   Ú_get_requestÚIMDSFetcher._get_requestø  s  € ð  	×ÑÔÞØ×#Ñ#Ô%ØÑØ×,Ñ,ˆJØ×!Ñ! (Ó+ˆØˆØÑØ27Ð.Ñ/Ø×Ñ˜WÔ%Ü�t×)Ñ)Ö*ˆAðÜ"×-Ñ-×8Ñ8Ø  cð 9ð �ð  Ÿ=™=×-Ñ-¨g¯o©oÓ.?Ó@�Ù! (×+Ñ+Ø#’Oñ ,ñ +ð  ×.Ñ.Ó0Ð0øô )ó Ü—‘ð0àØØ!ð ÷ ûðús   Á;AC'Ã'
DÃ1DÄDc                 ó>   • U R                   b  U R                   US'   g g )Nz
User-Agent)r  )rø   r£   s     r‚   r:  ÚIMDSFetcher._add_user_agent$  s#   € Ø×ÑÑ'Ø$(×$4Ñ$4ˆG�LÒ!ð (r„   c                 óp   • U R                   (       a%  [        R                  S5        U R                  5       eg )Nz)Access to EC2 metadata has been disabled.)r  r  r#  rK  r  s    r‚   r7  ÚIMDSFetcher._assert_enabled(  s*   € Ø�>�>Ü�L‰LÐDÔEØ×2Ñ2Ó4Ð4ð r„   c                 ó8   • U R                   (       a	  [        SS9eg )NzLUnable to retrieve token for use in IMDSv2 call and IMDSv1 has been disabled©Ú	error_msg)r  r-   r  s    r‚   rI  ÚIMDSFetcher._assert_v1_enabled-  s    € Ø×!×!Ü(Øhñð ð "r„   c                 óT   • U R                  U5      =(       d    U R                  U5      $ rô   ©Ú_is_non_ok_responseÚ	_is_empty©rø   rC  s     r‚   rJ  ÚIMDSFetcher._default_retry3  ó!   € Ø×'Ñ'¨Ó1×M°T·^±^ÀHÓ5MÐMr„   c                 óH   • UR                   S:w  a  U R                  USSS9  gg)Nr2  znon-200T©Úlog_bodyF)r?  Ú_log_imds_responser\  s     r‚   rZ  ÚIMDSFetcher._is_non_ok_response6  s+   € Ø×Ñ 3Ó&Ø×#Ñ# H¨iÀ$Ð#ÑGØØr„   c                 óJ   • UR                   (       d  U R                  USSS9  gg)Nzno bodyTr`  F)Úcontentrb  r\  s     r‚   r[  ÚIMDSFetcher._is_empty<  s&   € Ø××Ø×#Ñ# H¨iÀ$Ð#ÑGØØr„   c                 ó´   • SnX!R                   UR                  /nU(       a   US-  nUR                  UR                  5        [        R
                  " U/UQ76   g )NzHMetadata service returned %s response with status code of %s for url: %sz, content body: %s)r?  rÃ   rÁ   re  r  r#  )rø   rC  Úreason_to_logra  Ú	statementÚlogger_argss         r‚   rb  ÚIMDSFetcher._log_imds_responseB  sU   € ð1ð 	ð %×&:Ñ&:¸H¿L¹LÐIˆÞØÐ-Ñ-ˆIØ×Ñ˜x×/Ñ/Ô0Ü�Š�YÐ- Ô-r„   )r  r  r  r  r  r  r  r  rô   ©F)rë   rì   rí   rî   rê   rK  r8  r9  Ú DEFAULT_METADATA_SERVICE_TIMEOUTr!  rù   r  r  r,  rE  rN  r:  r7  rI  rJ  rZ  r[  rb  rð   rŠ   r„   r‚   rü   rü   ‹  sj   † Ø"7ÐØ$€KØ€Jð 1ØØ"ØØØô
ò8òò>.ò"ôH*1òX5ò5ò
òNòò÷	.r„   rü   c                   óX   • \ rS rSrSr/ SQrS rSS jrSS jrS r	S	 r
S
 rS rS rSrg)ÚInstanceMetadataFetcheriN  z*latest/meta-data/iam/security-credentials/)ÚAccessKeyIdÚSecretAccessKeyÚTokenÚ
Expirationc                 óþ  •  U R                  5       nU R                  U5      nU R                  X!5      nU R                  U5      (       a'  UUS   US   US   US   S.nU R	                  U5        U$ SU;   a  SU;   a  [
        R                  SU5        0 $ ! U R                   a$    [
        R                  S	U R                  5         0 $ [         a+  n[
        R                  S
UR                  5         S nA0 $ S nAff = f)Nrp  rq  rr  rs  )Ú	role_nameÚ
access_keyÚ
secret_keyrç   Úexpiry_timeÚCodeÚMessagez7Error response received when retrievingcredentials: %s.ú\Max number of attempts exceeded (%s) when attempting to retrieve data from metadata service.zBad IMDS request: %s)rE  Ú_get_iam_roleÚ_get_credentialsÚ_contains_all_credential_fieldsÚ_evaluate_expirationr  r#  rK  r  rò   rö   )rø   rç   ru  ÚcredentialsrD  s        r‚   Úretrieve_iam_role_credentialsÚ5InstanceMetadataFetcher.retrieve_iam_role_credentialsW  s  € ð%	<Ø×.Ñ.Ó0ˆEØ×*Ñ*¨5Ó1ˆIØ×/Ñ/°	ÓAˆKØ×3Ñ3°K×@Ñ@à!*Ø"-¨mÑ"<Ø"-Ð.?Ñ"@Ø(¨Ñ1Ø#.¨|Ñ#<ñ�ð ×)Ñ)¨+Ô6Ø"Ð"ð ˜[Ó(¨Y¸+Ó-EÜ—L‘Lð+à#ôð
 �	øØ×/Ñ/ó 	Ü�L‰LðEà×"Ñ"õð ˆ	ô #ó 	<Ü�L‰LÐ/°·±×;Ð;Øˆ	ûð	<ús$   ‚A.B Á1#B Â0C<Ã	C<Ã C7Ã7C<Nc                 ó`   • U R                  U R                  U R                  US9R                  $ ©N©rL  rM  rç   )rN  Ú	_URL_PATHÚ_needs_retry_for_role_namer@  )rø   rç   s     r‚   r|  Ú%InstanceMetadataFetcher._get_iam_role€  s4   € Ø× Ñ Ø—^‘^Ø×6Ñ6Øð !ð 
÷ ‰$ð		r„   c                 ó’   • U R                  U R                  U-   U R                  US9n[        R                  " UR
                  5      $ r„  )rN  r†  Ú_needs_retry_for_credentialsr   Úloadsr@  )rø   ru  rç   Úrs       r‚   r}  Ú(InstanceMetadataFetcher._get_credentials‡  sD   € Ø×ÑØ—^‘^ iÑ/Ø×8Ñ8Øð ð 
ˆô
 �zŠz˜!Ÿ&™&Ó!Ð!r„   c                 óŠ   •  [         R                  " UR                  5        g! [         a    U R	                  US5         gf = f)NFzinvalid jsonT)r   r‹  r@  Ú
ValueErrorrb  r\  s     r‚   Ú_is_invalid_jsonÚ(InstanceMetadataFetcher._is_invalid_json�  s<   € ð	Ü�JŠJ�x—}‘}Ô%ØøÜó 	Ø×#Ñ# H¨nÔ=Ùð	ús   ‚ # £AÁAc                 óT   • U R                  U5      =(       d    U R                  U5      $ rô   rY  r\  s     r‚   r‡  Ú2InstanceMetadataFetcher._needs_retry_for_role_name—  r^  r„   c                 ó„   • U R                  U5      =(       d)    U R                  U5      =(       d    U R                  U5      $ rô   )rZ  r[  r�  r\  s     r‚   rŠ  Ú4InstanceMetadataFetcher._needs_retry_for_credentialsš  s9   € à×$Ñ$ XÓ.÷ /Ø�~‰~˜hÓ'÷/à×$Ñ$ XÓ.ð	
r„   c                 ód   • U R                    H   nX!;  d  M
  [        R                  SU5          g   g)Nz3Retrieved credentials is missing required field: %sFT)Ú_REQUIRED_CREDENTIAL_FIELDSr  r#  )rø   r€  Úfields      r‚   r~  Ú7InstanceMetadataFetcher._contains_all_credential_fields¡  s4   € Ø×5Ô5ˆEØÕ'Ü—‘ØIØôñ ñ 6ð r„   c                 óâ  • UR                  S5      nUc  g  [        R                  R                  US5      nU R                  R                  SS5      n[        R
                  " SS5      nX4-   n[        5       n[        R                  " US9nX'-
  nXh:¼  a2  Xg-   n	U	R                  S5      US'   [        R                  SUS-  5        g g ! [         a    [        R                  S	US   5         g f = f)
Nrx  z%Y-%m-%dT%H:%M:%SZÚec2_credential_refresh_windowiX  éx   ©Úsecondsz¯Attempting credential expiration extension due to a credential service availability issue. A refresh of these credentials will be attempted again within the next %.0f minutes.é<   z!Unable to parse expiry_time in %s)r™   r   Ústrptimer  ÚrandomÚrandintr   Ú	timedeltaÚstrftimer  Úinfor�  r#  )
rø   r€  Ú
expirationÚrefresh_intervalÚjitterÚrefresh_interval_with_jitterÚcurrent_timeÚrefresh_offsetÚextension_timeÚnew_times
             r‚   r  Ú,InstanceMetadataFetcher._evaluate_expiration«  s  € Ø —_‘_ ]Ó3ˆ
ØÑØð	Ü!×*Ñ*×3Ñ3ØÐ0óˆJð  $Ÿ|™|×/Ñ/Ø/°ó Ðô —^’^ C¨Ó-ˆFØ+;Ñ+DÐ(Ü/Ó1ˆLÜ%×/Ò/Ø4ñˆNð (Ñ8ˆNØÓ-Ø'Ñ8�Ø-5×->Ñ->Ø(ó.�˜MÑ*ô —‘ð-ð 1°2Ñ5õð .øô ó 	Ü�L‰LØ3°[ÀÑ5Oöð	ús   —B/C Ã#C.Ã-C.rŠ   rô   )rë   rì   rí   rî   r†  r—  r�  r|  r}  r�  r‡  rŠ  r~  r  rð   rŠ   r„   r‚   ro  ro  N  s9   † Ø<€Iò#Ðò'ôRô"òòNò
òõ!r„   ro  c                   ó6   • \ rS rSrS	S jrS rS rS rS rSr	g)
ÚIMDSRegionProvideriÏ  Nc                 óN   • Xl         Uc  [        R                  nX l        X0l        g)aå  Initialize IMDSRegionProvider.
:type session: :class:`botocore.session.Session`
:param session: The session is needed to look up configuration for
    how to contact the instance metadata service. Specifically the
    whether or not it should use the IMDS region at all, and if so how
    to configure the timeout and number of attempts to reach the
    service.
:type environ: None or dict
:param environ: A dictionary of environment variables to use. If
    ``None`` is the argument then ``os.environ`` will be used by
    default.
:type fecther: :class:`botocore.utils.InstanceMetadataRegionFetcher`
:param fetcher: The class to actually handle the fetching of the region
    from the IMDS. If not provided a default one will be created.
N)r  r	  r
  Ú_environÚ_fetcher)rø   r�   r
  Úfetchers       r‚   rù   ÚIMDSRegionProvider.__init__Ð  s!   € ð   ŒØ‰?Ü—j‘jˆGØŒØ�r„   c                 ó&   • U R                  5       nU$ )z#Provide the region value from IMDS.)Ú_get_instance_metadata_region)rø   Úinstance_regions     r‚   ÚprovideÚIMDSRegionProvider.provideæ  s   € à×<Ñ<Ó>ˆØÐr„   c                 óF   • U R                  5       nUR                  5       nU$ rô   )Ú_get_fetcherÚretrieve_region)rø   r´  rÜ   s      r‚   r·  Ú0IMDSRegionProvider._get_instance_metadata_regionë  s#   € Ø×#Ñ#Ó%ˆØ×(Ñ(Ó*ˆØˆr„   c                 ó^   • U R                   c  U R                  5       U l         U R                   $ rô   )r³  Ú_create_fetcherr  s    r‚   r¼  ÚIMDSRegionProvider._get_fetcherð  s&   € Ø�=‰=Ñ Ø ×0Ñ0Ó2ˆDŒMØ�}‰}Ðr„   c                 óf  • U R                   R                  S5      nU R                   R                  S5      nU R                   R                  S5      [        U R                   5      U R                   R                  S5      S.n[        UUU R                  U R                   R                  5       US9nU$ )NÚmetadata_service_timeoutÚmetadata_service_num_attemptsr  r  )r  r†   r  )r  r  r  r  rH   )r  r‹   r‘   ÚInstanceMetadataRegionFetcherr²  r  )rø   Úmetadata_timeoutÚmetadata_num_attemptsÚimds_configr´  s        r‚   rÀ  Ú"IMDSRegionProvider._create_fetcherõ  s®   € ØŸ=™=×<Ñ<Ø&ó
Ðð !%§¡× AÑ AØ+ó!
Ðð .2¯]©]×-NÑ-NØ/ó.ô 3MØ—‘ó3ð )-¯©×(IÑ(IØ*ó)ñ

ˆô 0Ø$Ø.Ø—‘Ø—}‘}×/Ñ/Ó1Øñ
ˆð ˆr„   )r²  r³  r  ©NN)
rë   rì   rí   rî   rù   r¹  r·  r¼  rÀ  rð   rŠ   r„   r‚   r°  r°  Ï  s   † ô ò,ò
ò
õ
r„   r°  c                   ó$   • \ rS rSrSrS rS rSrg)rÅ  i  z-latest/meta-data/placement/availability-zone/c                 ó”   •  U R                  5       nU$ ! U R                   a#    [        R                  SU R                  5         gf = f)a  Get the current region from the instance metadata service.
:rvalue: str
:returns: The region the current instance is running in or None
    if the instance metadata service cannot be contacted or does not
    give a valid response.
:rtype: None or str
:returns: Returns the region as a string if it is configured to use
    IMDS as a region source. Otherwise returns ``None``. It will also
    return ``None`` if it fails to get the region from IMDS due to
    exhausting its retries or not being able to connect.
r{  N)Ú_get_regionrK  r  r#  r  )rø   rÜ   s     r‚   r½  Ú-InstanceMetadataRegionFetcher.retrieve_region  sO   € ð	Ø×%Ñ%Ó'ˆFØˆMøØ×/Ñ/ó 	Ü�L‰LðEà×"Ñ"õð
 ð	ús   ‚ ”0AÁAc                 ó’   • U R                  5       nU R                  U R                  U R                  US9nUR                  nUS S nU$ )Nr…  r¾   )rE  rN  r†  rJ  r@  )rø   rç   rC  Úavailability_zonerÜ   s        r‚   rÍ  Ú)InstanceMetadataRegionFetcher._get_region+  sU   € Ø×*Ñ*Ó,ˆØ×$Ñ$Ø—^‘^Ø×*Ñ*Øð %ð 
ˆð
 %ŸM™MÐØ" 3 BÐ'ˆØˆr„   rŠ   N)rë   rì   rí   rî   r†  r½  rÍ  rð   rŠ   r„   r‚   rÅ  rÅ    s   † Ø?€Iòõ.	r„   rÅ  c                 óJ  • U H�  n[        X   [        5      (       a$  X0;   a  X1;   a  [        X   X   5        M6  X   X'   M>  [        X   [        5      (       aB  U(       a;  X0;   a.  [        X   [        5      (       a  X   R	                  X   5        M�  X   X'   M—  X   X'   MŸ     g)zæGiven two dict, merge the second dict into the first.

The dicts can have arbitrary nesting.

:param append_lists: If true, instead of clobbering a list with the new
    value, append all of the new values onto the original list.
N)r|   ÚdictÚmerge_dictsÚlistÚextend)Údict1Údict2Úappend_listsr¤   s       r‚   rÔ  rÔ  7  s‹   € ó ˆÜ�e‘j¤$×'Ñ'Ø‹| £Ü˜E™J¨©
Ö3à"™Z�“
ô ˜™
¤D×)Ñ)®lð ‹|¤
¨5©:´t× <Ñ <Ø‘
×!Ñ! %¡*Ö-à"™Z�“
ð ™ˆE‹Jò% r„   c                 óD   • 0 nU  H  nX   XR                  5       '   M     U$ )zDCopies the given dictionary ensuring all keys are lowercase strings.)r   )Úoriginalr  r¤   s      r‚   Úlowercase_dictrÜ  T  s&   € à€DÛˆØ$™Mˆ�Y‰Y‹[Óñ à€Kr„   c                 ó®   •  U" U 5       nUR                  5       n[        U5      sS S S 5        $ ! , (       d  f       g = f! [         a
    [        U S9ef = f)Nr·   )ÚreadÚparse_key_val_file_contentsÚOSErrorr!   )ÚfilenameÚ_openÚfÚcontentss       r‚   Úparse_key_val_filerå  \  sH   € ð,Ù�8Œ_ Ø—v‘v“xˆHÜ.¨xÓ8÷ �_�_ûô ó ,Ü (Ñ+Ð+ð,ús"   ‚A  Š/¥	A  ¯
=¹A  ½A  Á Ac                 ó¸   • 0 nU R                  5        HC  nSU;  a  M  UR                  SS5      u  p4UR                  5       nUR                  5       nXAU'   ME     U$ )NÚ=r:   )Ú
splitlinesr¿   Ústrip)rä  ÚfinalÚliner¤   r�   s        r‚   rß  rß  e  s\   € ð €EØ×#Ñ#Ö%ˆØ�d‹?ÙØ—:‘:˜c 1Ó%‰ˆØ�i‰i‹kˆØ�i‰i‹kˆØˆc‹
ñ &ð €Lr„   c           	      óf  • / n[        U S5      (       a  U R                  5       nOU nU Hu  u  pE[        U[        5      (       a3  U H+  nUR	                  [        U5       S[        U5       35        M-     MM  UR	                  [        U5       S[        U5       35        Mw     SR                  U5      $ )a6  Urlencode a dict or list into a string.

This is similar to urllib.urlencode except that:

* It uses quote, and not quote_plus
* It has a default list of safe chars that don't need
  to be encoded, which matches what AWS services expect.

If any value in the input ``mapping`` is a list type,
then each list element wil be serialized.  This is the equivalent
to ``urlencode``'s ``doseq=True`` argument.

This function should be preferred over the stdlib
``urlencode()`` function.

:param mapping: Either a dict to urlencode or a list of
    ``(key, value)`` pairs.

Úitemsrç  Ú&)r˜   rí  r|   rÕ  rÁ   Úpercent_encoderÂ   )ÚmappingÚsafeÚencoded_pairsÚpairsr¤   rÖ   Úelements          r‚   Úpercent_encode_sequencerõ  t  s¬   € ð( €MÜˆw˜× Ñ Ø—‘“‰àˆÛ‰
ˆÜ�eœT×"Ñ"Û �Ø×$Ñ$Ü% cÓ*Ð+¨1¬^¸GÓ-DÐ,EÐFöó !ð
 × Ñ Ü! #Ó&Ð' q¬¸Ó)>Ð(?Ð@öñ ð �8‰8�MÓ"Ð"r„   c                 ó¬   • [        U [        [        45      (       d  [        U 5      n [        U [        5      (       d  U R                  S5      n [	        XS9$ )a¢  Urlencodes a string.

Whereas percent_encode_sequence handles taking a dict/sequence and
producing a percent encoded string, this function deals only with
taking a string (not a dict/sequence) and percent encoding it.

If given the binary type, will simply URL encode it. If given the
text type, will produce the binary type by UTF-8 encoding the
text. If given something else, will convert it to the text type
first.
úutf-8)rñ  )r|   Úbytesr~   Úencoder   )Ú	input_strrñ  s     r‚   rï  rï  š  sF   € ô �i¤%¬ ×.Ñ.Ü˜	“Nˆ	ä�i¤×'Ñ'Ø×$Ñ$ WÓ-ˆ	Ü�Ñ&Ð&r„   c           
      ó    • [         R                   " SSSSSS[        5       S9nUR                  U" 5       5      nU[         R                  " U S9-   $ )ax  Parse numerical epoch timestamps (seconds since 1970) into a
``datetime.datetime`` in UTC using ``datetime.timedelta``. This is intended
as fallback when ``fromtimestamp`` raises ``OverflowError`` or ``OSError``.

:type value: float or int
:param value: The Unix timestamps as number.

:type tzinfo: callable
:param tzinfo: A ``datetime.tzinfo`` class or compatible callable.
é²  r:   r   ©Útzinfor�  )r   r   Ú
astimezoner£  )rÖ   rþ  Ú
epoch_zeroÚepoch_zero_localizeds       r‚   Ú_epoch_seconds_to_datetimer  ¯  sK   € ô ×"Ò" 4¨¨A¨q°!°Q¼u»wÑG€JØ%×0Ñ0±³Ó:ÐØ¤(×"4Ò"4¸UÑ"CÑCÐCr„   c                 ó®  • [        U [        [        45      (       a$  [        R                  R	                  X" 5       5      $  [        R                  R	                  [        U 5      U" 5       5      $ ! [
        [        4 a     Of = f [        R                  R                  U S[        5       0S9$ ! [
        [        4 a  n[        SU  SU 35      eSnAff = f)z.Parse timestamp with pluggable tzinfo options.ÚGMT)ÚtzinfoszInvalid timestamp "z": N)r|   ÚintÚfloatr   ÚfromtimestampÚ	TypeErrorr�  ÚdateutilÚparserÚparser   )rÖ   rþ  rD  s      r‚   Ú_parse_timestamp_with_tzinfor  ¿  s¿   € ä�%œ#œu˜×&Ñ&ä× Ñ ×.Ñ.¨u°f³hÓ?Ð?ð	Ü×$Ñ$×2Ñ2´5¸³<ÁÃÓJÐJøÜœ:Ð&ó 	Ùð	úð>ô �‰×$Ñ$ U°U¼E»GÐ4DÐ$ÐEÐEøÜ”zÐ"ó >ÜÐ.¨u¨g°S¸¸Ð<Ó=Ð=ûð>ús*   Á-A/ Á/BÂBÂ'B. Â.CÂ>CÃCc                 óº  • [        5       nU H  n [        X5      s  $     [        U 5      n U H  n[        XBS9s  $    [        SU  S35      e! [        [        4 a*  n[        R                  SUR                  US9   SnAMv  SnAff = f! [        [        4 a)  n[        R                  SWR                  US9   SnAN€SnAff = f! [        [        4 a     Nšf = f)z¯Parse a timestamp into a datetime object.

Supported formats:

    * iso8601
    * rfc822
    * epoch (value is an integer)

This will return a ``datetime.datetime`` object.

z2Unable to parse timestamp with "%s" timezone info.r4  Nrý  zHUnable to parse timestamp using fallback method with "%s" timezone info.z1Unable to calculate correct timezone offset for "Ú")r   r  rà  ÚOverflowErrorr  r#  rë   r  r  r	  r�  ÚRuntimeError)rÖ   Útzinfo_optionsrþ  rD  Únumeric_values        r‚   Úparse_timestampr  Ò  sì   € ô (Ó)€NÛ ˆð	Ü/°Ó>Ò>ñ !ðÜ˜e›ˆð		Û(�Ü1°-ÑOÒOñ )ô Ø
;¸E¸7À!ÐDóð øô7 œÐ'ó 	Ü�L‰LØDØ—‘Øð ÷ ûð	ûô( œÐ'ó 	Ü�L‰Lð!à—‘Øð	 ö ûð	ûô ”zÐ"ó ÙðúsD   ‘
A¡C ­B ½B ÁBÁBÂBÂCÂB?Â?CÃCÃCc                 óÊ   • [        U [        5      (       a  U nO[        U 5      nUR                  c  UR	                  [        5       S9nU$ UR                  [        5       5      nU$ )aU  Converted the passed in value to a datetime object with tzinfo.

This function can be used to normalize all timestamp inputs.  This
function accepts a number of different types of inputs, but
will always return a datetime.datetime object with time zone
information.

The input param ``value`` can be one of several types:

    * A datetime object (both naive and aware)
    * An integer representing the epoch time (can also be a string
      of the integer, i.e '0', instead of 0).  The epoch time is
      considered to be UTC.
    * An iso8601 formatted timestamp.  This does not need to be
      a complete timestamp, it can contain just the date portion
      without the time component.

The returned value will be a datetime object that will have tzinfo.
If no timezone info was provided in the input value, then UTC is
assumed, not local time.

rý  )r|   Ú_DatetimeClassr  rþ  r®   r   rÿ  )rÖ   Údatetime_objs     r‚   Úparse_to_aware_datetimer    sg   € ô6 �%œ×(Ñ(Ø‰ô
 ' uÓ-ˆØ×ÑÑ"ð
 $×+Ñ+´5³7Ð+Ð;ˆð Ðð $×.Ñ.¬u«wÓ7ˆØÐr„   c                 óê   • [         R                   " SSS5      nU R                  c  Uc
  [        5       nU R                  US9n U R                  SS9U R	                  5       -
  U-
  nUR                  5       $ )a[  Calculate the timestamp based on the given datetime instance.

:type dt: datetime
:param dt: A datetime object to be converted into timestamp
:type default_timezone: tzinfo
:param default_timezone: If it is provided as None, we treat it as tzutc().
                         But it is only used when dt is a naive datetime.
:returns: The timestamp
rü  r:   Nrý  )r   rþ  r   r®   Ú	utcoffsetÚtotal_seconds)ÚdtÚdefault_timezoneÚepochÚds       r‚   Údatetime2timestampr   /  sn   € ô ×Ò˜d A qÓ)€EØ	‡y�yÑØÑ#Ü$›wÐØ�Z‰ZÐ/ˆZÐ0ˆØ
�
‰
˜$ˆ
Ð "§,¡,£.Ñ0°5Ñ8€AØ�?‰?ÓÐr„   c                 óÌ   ^ • [         R                  " 5       n[        U 4S jS5       H  nUR                  U5        M     U(       a  UR	                  5       $ UR                  5       $ )a‚  Calculate a sha256 checksum.

This method will calculate the sha256 checksum of a file like
object.  Note that this method will iterate through the entire
file contents.  The caller is responsible for ensuring the proper
starting position of the file and ``seek()``'ing the file back
to its starting location if other consumers need to read from
the file like object.

:param body: Any file like object.  The file must be opened
    in binary mode such that a ``.read()`` call returns bytes.
:param as_hex: If True, then the hex digest is returned.
    If False, then the digest (as binary bytes) is returned.

:returns: The sha256 checksum

c                  ó&   >• T R                  S5      $ ©Né   ©rÞ  )Úbodys   €r‚   Ú<lambda>Ú"calculate_sha256.<locals>.<lambda>U  s   ø€ ˜dŸi™i¨Ô4r„   r„   )ÚhashlibÚsha256ÚiterÚupdateÚ	hexdigestÚdigest)r&  Úas_hexÚchecksumÚchunks   `   r‚   Úcalculate_sha256r2  B  sN   ø€ ô$ �~Š~Ó€HÜÔ4°cÖ:ˆØ�‰˜Öñ ;æØ×!Ñ!Ó#Ð#à�‰Ó Ð r„   c                 ó  ^ ^• / nSm[         R                  n[        U U4S jS5       H(  nUR                  U" U5      R	                  5       5        M*     U(       d  U" S5      R                  5       $ [        U5      S:”  af  / n[        U5       HB  u  pVUb)  UR                  U" XV-   5      R	                  5       5        M1  UR                  U5        MD     Un[        U5      S:”  a  Mf  [        R                  " US   5      R                  S5      $ )a@  Calculate a tree hash checksum.

For more information see:

http://docs.aws.amazon.com/amazonglacier/latest/dev/checksum-calculations.html

:param body: Any file like object.  This has the same constraints as
    the ``body`` param in calculate_sha256

:rtype: str
:returns: The hex version of the calculated tree hash

r$  c                  ó&   >• T R                  T5      $ rô   r%  )r&  Úrequired_chunk_sizes   €€r‚   r'  Ú%calculate_tree_hash.<locals>.<lambda>n  s   ø€ ˜dŸi™iÐ(;Ô<r„   r„   r:   r   Úascii)r)  r*  r+  rÁ   r.  r-  rÓ   Ú	_in_pairsÚbinasciiÚhexlifyÚdecode)r&  Úchunksr*  r1  Ú
new_chunksrÇ   Úsecondr5  s   `      @r‚   Úcalculate_tree_hashr?  ]  sæ   ù€ ð €FØ%ÐÜ�^‰^€FÜÕ<¸cÖBˆØ�‰‘f˜U“m×*Ñ*Ó,Ö-ñ CæÙ�c‹{×$Ñ$Ó&Ð&Ü
ˆf‹+˜‹/Øˆ
Ü& vÖ.‰MˆEØÑ!Ø×!Ñ!¡&¨©Ó"8×"?Ñ"?Ó"AÖBð ×!Ñ! %Ö(ñ /ð ˆô ˆf‹+˜�/ô ×Ò˜F 1™IÓ&×-Ñ-¨gÓ6Ð6r„   c                 ó.   • [        U 5      n[        X5      $ rô   )r+  r   )ÚiterableÚshared_iters     r‚   r8  r8  ~  s   € ô �x“.€Kô
 �{Ó0Ð0r„   c                   ó$   • \ rS rSrSrS rS rSrg)ÚCachedPropertyi�  zÆA read only property that caches the initially computed value.

This descriptor will only call the provided ``fget`` function once.
Subsequent access to this property will return the cached value.

c                 ó   • Xl         g rô   ©Ú_fget)rø   Úfgets     r‚   rù   ÚCachedProperty.__init__—  s   € Ø�
r„   c                 óv   • Uc  U $ U R                  U5      nX1R                  U R                   R                  '   U$ rô   )rG  Ú__dict__rë   )rø   ÚobjÚclsÚcomputed_values       r‚   Ú__get__ÚCachedProperty.__get__š  s5   € Ø‰;ØˆKà!ŸZ™Z¨›_ˆNØ0>�L‰L˜Ÿ™×,Ñ,Ñ-Ø!Ð!r„   rF  N)rë   rì   rí   rî   rï   rù   rO  rð   rŠ   r„   r‚   rD  rD  �  s   † ñòõ"r„   rD  c                   óD   • \ rS rSrSrSS jrS rSS jrS rS r	S r
S	rg
)ÚArgumentGeneratori£  aÏ  Generate sample input based on a shape model.

This class contains a ``generate_skeleton`` method that will take
an input/output shape (created from ``botocore.model``) and generate
a sample dictionary corresponding to the input/output shape.

The specific values used are place holder values. For strings either an
empty string or the member name can be used, for numbers 0 or 0.0 is used.
The intended usage of this class is to generate the *shape* of the input
structure.

This can be useful for operations that have complex input shapes.
This allows a user to just fill in the necessary data instead of
worrying about the specific structure of the input arguments.

Example usage::

    s = botocore.session.get_session()
    ddb = s.get_service_model('dynamodb')
    arg_gen = ArgumentGenerator()
    sample_input = arg_gen.generate_skeleton(
        ddb.operation_model('CreateTable').input_shape)
    print("Sample input for dynamodb.CreateTable: %s" % sample_input)

c                 ó   • Xl         g rô   ©Ú_use_member_names)rø   Úuse_member_namess     r‚   rù   ÚArgumentGenerator.__init__¾  s   € Ø!1Õr„   c                 ó(   • / nU R                  X5      $ )z¶Generate a sample input.

:type shape: ``botocore.model.Shape``
:param shape: The input shape.

:return: The generated skeleton input corresponding to the
    provided input shape.

)Ú_generate_skeleton)rø   r›   Ústacks      r‚   Úgenerate_skeletonÚ#ArgumentGenerator.generate_skeletonÁ  s   € ð ˆØ×&Ñ& uÓ4Ð4r„   c                 óü  • UR                  UR                  5         UR                  S:X  a!  U R                  X5      UR	                  5         $ UR                  S:X  a!  U R                  X5      UR	                  5         $ UR                  S:X  a!  U R                  X5      UR	                  5         $ UR                  S:X  av  U R                  (       a  UUR	                  5         $ UR                  (       a0  [        R                  " UR                  5      UR	                  5         $  UR	                  5         gUR                  S;   a   UR	                  5         gUR                  S;   a   UR	                  5         g	UR                  S
:X  a   UR	                  5         gUR                  S:X  a+  [        R                  " SSSSSS5      UR	                  5         $  UR	                  5         g ! UR	                  5         f = f)NÚ	structurerÕ  Úmapr—   rª   )ÚintegerÚlongr   )r  Údoubleg        ÚbooleanTÚ	timestamprü  r:   )rÁ   r²   rš   Ú_generate_type_structurerÀ   Ú_generate_type_listÚ_generate_type_maprU  Úenumr¡  Úchoicer   ©rø   r›   rZ  r²   s       r‚   rY  Ú$ArgumentGenerator._generate_skeletonÎ  s‚  € Ø�‰�U—Z‘ZÔ ð	Ø�‰ +Ó-Ø×4Ñ4°UÓBð( �I‰I�Kð' —‘ FÓ*Ø×/Ñ/°Ó=ð$ �I‰I�Kð# —‘ EÓ)Ø×.Ñ.¨uÓ<ð  �I‰I�Kð —‘ HÓ,Ø×)×)Øð �I‰I�Kð —:—:Ü!Ÿ=š=¨¯©Ó4ð �I‰I�Kð ð �I‰I�Kð —‘Ð$7Ó7Øð �I‰I�Kð —‘Ð$7Ó7Øð �I‰I�Kð —‘ IÓ-Øð �I‰I�Kð —‘ KÓ/Ü×(Ò(¨¨q°!°Q¸¸1Ó=à�I‰I�Kð 0ð �I‰I�KøˆE�I‰I�Kús;   � G) Á G) Á? G) Â0"G) Ã#0G) Ä6G) ÅG) Å:G) Æ*G) Ç)G;c                 óÆ   • UR                  UR                  5      S:”  a  0 $ [        5       nUR                  R	                  5        H  u  pEU R                  XRUS9X4'   M     U$ )Nr:   )r²   )Úcountr²   r   Úmembersrí  rY  )rø   r›   rZ  ÚskeletonÚmember_nameÚmember_shapes         r‚   re  Ú*ArgumentGenerator._generate_type_structureè  sa   € Ø�;‰;�u—z‘zÓ" QÓ&ØˆIÜ“=ˆØ).¯©×)<Ñ)<Ö)>Ñ%ˆKØ$(×$;Ñ$;Ø¨+ð %<ð %ˆHÓ!ñ *?ð ˆr„   c                 óŽ   • SnU R                   (       a  UR                  R                  nU R                  UR                  X#5      /$ )Nrª   )rU  Úmemberr²   rY  rj  s       r‚   rf  Ú%ArgumentGenerator._generate_type_listò  s?   € ð ˆØ×!×!Ø—<‘<×$Ñ$ˆDà×#Ñ# E§L¡L°%Ó>ð
ð 	
r„   c                 ó�   • UR                   nUR                  nUR                  S:X  d   e[        SU R	                  XB5      4/5      $ )Nr—   ÚKeyName)r¤   rÖ   rš   r   rY  )rø   r›   rZ  Ú	key_shapeÚvalue_shapes        r‚   rg  Ú$ArgumentGenerator._generate_type_mapü  sM   € Ø—I‘Iˆ	Ø—k‘kˆØ×"Ñ" hÓ.Ð.Ð.Üà˜D×3Ñ3°KÓGÐHðó
ð 	
r„   rT  Nrl  )rª   )rë   rì   rí   rî   rï   rù   r[  rY  re  rf  rg  rð   rŠ   r„   r‚   rR  rR  £  s%   † ñô42ò5ôò4ò
õ
r„   rR  c                 óœ   • [         R                  " U 5      (       a  gS[        U 5      R                   S3n[        R
                  " U5      S L$ )NFrÌ   rÍ   )r   Úintersectionr   Úhostnamer   Úmatch©Úendpoint_urlr}  s     r‚   Úis_valid_ipv6_endpoint_urlr�    sF   € Ü×$Ò$ \×2Ñ2ØØ”8˜LÓ)×2Ñ2Ð3°1Ð5€HÜ×Ò˜xÓ(°Ð4Ð4r„   c                 ó\   • [        U 5      R                  n[        R                  " U5      S L$ rô   )r   r}  r   r~  r  s     r‚   Úis_valid_ipv4_endpoint_urlrƒ    s&   € Ü˜Ó%×.Ñ.€HÜ�=Š=˜Ó"¨$Ð.Ð.r„   c                 ó  • [         R                  " U 5      (       a  g[        U 5      nUR                  nUc  g[	        U5      S:”  a  gUS   S:X  a  USS n[
        R                  " S[
        R                  5      nUR                  U5      $ )zÔVerify the endpoint_url is valid.

:type endpoint_url: string
:param endpoint_url: An endpoint_url.  Must have at least a scheme
    and a hostname.

:return: True if the endpoint url is valid. False otherwise.

FNéÿ   r¾   r½   z;^((?!-)[A-Z\d-]{1,63}(?<!-)\.)*((?!-)[A-Z\d-]{1,63}(?<!-))$)	r   r|  r   r}  rÓ   r¯   ÚcompileÚ
IGNORECASEr~  )r€  Úpartsr}  Úalloweds       r‚   Úis_valid_endpoint_urlrŠ    sƒ   € ô ×$Ò$ \×2Ñ2ØÜ�\Ó"€EØ�~‰~€HØÑØÜ
ˆ8ƒ}�sÓØØ��|�sÓØ˜C˜R�=ˆÜ�jŠjØFÜ
�‰ó€Gð �=‰=˜Ó"Ð"r„   c                 ó<   • [        U 5      =(       d    [        U 5      $ rô   )rŠ  r�  )r€  s    r‚   r$  r$  0  s   € Ü  Ó.÷ Ô2LØó3ð r„   c                 óz   • U c  g[         R                  " S5      nUR                  U 5      nU(       d	  [        U S9eg)z0Provided region_name must be a valid host label.Nz)^(?![0-9]+$)(?!-)[a-zA-Z0-9-]{,63}(?<!-)$)Úregion_name)r¯   r†  r~  r,   )r�  Úvalid_host_labelÚvalids      r‚   Úvalidate_region_namer�  6  s>   € àÑØÜ—z’zÐ"NÓOÐØ×"Ñ" ;Ó/€EÞÜ ¨[Ñ9Ð9ð r„   c                 ó®   • SU ;   a  g[        U 5      nUS:  d  US:”  a  g[        R                  U 5      nUb  UR                  5       [        U 5      :w  a  gg)a~  
Check to see if the ``bucket_name`` complies with the
restricted DNS naming conventions necessary to allow
access via virtual-hosting style.

Even though "." characters are perfectly valid in this DNS
naming scheme, we are going to punt on any name containing a
"." character because these will cause SSL cert validation
problems if we try to use virtual-hosting style addressing.
r½   Fé   é?   T)rÓ   ÚLABEL_REr~  Úend)Úbucket_nameÚnr~  s      r‚   Úcheck_dns_namer˜  @  sT   € ð ˆkÓØÜˆKÓ€AØˆ1ƒu��B“àÜ�N‰N˜;Ó'€EØ�}˜Ÿ	™	›¤s¨;Ó'7Ó7ØØr„   c                 óÜ   • U R                   R                  SS5      (       a  Sn [        XU5        g! [         a/  nUR                  S   n[
        R                  SU5         SnAgSnAff = f)aV  
This handler looks at S3 requests just before they are signed.
If there is a bucket name on the path (true for everything except
ListAllBuckets) it checks to see if that bucket name conforms to
the DNS naming conventions.  If it does, it alters the request to
use ``virtual hosting`` style addressing rather than ``path-style``
addressing.

Úuse_global_endpointFzs3.amazonaws.comr–  z2Not changing URI, bucket is not DNS compatible: %sN)rÞ   r™   Úswitch_to_virtual_host_styler&   rå   r  r#  )rö   Úsignature_versionr�  Údefault_endpoint_urlrå   rD  r–  s          r‚   Úfix_s3_hostrž  W  sk   € ð  ‡�×ÑÐ0°%×8Ñ8Ø1Ðð
Ü$ØÐ(<õ	
øô ó 
Ø—h‘h˜}Ñ-ˆÜ�‰Ø@À+÷	
ñ 	
ûð
ús   ¥2 ²
A+¼%A&Á&A+c                 ó  • U R                   b  g[        U 5      (       a  [        R                  S5        g[	        U R
                  5      nUR                  U l         UR                  R                  S5      nUc  UR                  n[        U5      S:”  aô  US   nU(       d  g[        R                  SU R
                  5        [        U5      (       a®  [        U5      S:X  a(  U R                   S   S:w  a  U =R                   S-  sl         UR                  U5        SR                  U5      =(       d    SnUnUS-   U-   n	UR                  X—UR                  S	4n
[        U
5      nX°l        [        R                  S
U5        g[!        US9eg)a  
This is a handler to force virtual host style s3 addressing no matter
the signature version (which is taken in consideration for the default
case). If the bucket is not DNS compatible an InvalidDNSName is thrown.

:param request: A AWSRequest object that is about to be sent.
:param signature_version: The signature version to sign with
:param default_endpoint_url: The endpoint to use when switching to a
    virtual style. If None is supplied, the virtual host will be
    constructed from the url of the request.
NzKRequest is GetBucketLocation operation, not checking for DNS compatibility.rµ   r:   z*Checking for DNS compatible bucket for: %sé   r¾   r½   rª   zURI updated to: %s)r–  )Ú	auth_pathÚ_is_get_bucket_location_requestr  r#  r   rÃ   r¸   r¿   ÚnetlocrÓ   r˜  ÚremoverÂ   Úschemerx   r   r&   )rö   rœ  r�  rå   rˆ  Ú
path_partsr–  r¸   Úglobal_endpointÚhostÚ	new_tupleÚnew_uris               r‚   r›  r›  t  s`  € ð ×ÑÑ$ð 	Ü	(¨×	1Ñ	1ô 	�‰ð%ô	
ð 	Ü�W—[‘[Ó!€EØŸ
™
€GÔØ—‘×!Ñ! #Ó&€Jð Ñ#Ø$Ÿ|™|Ðä
ˆ:ƒ˜ÓØ  ‘mˆÞð Ü�‰ÐAÀ7Ç;Á;ÔOÜ˜+×&Ñ&ô �:‹ !Ó#Ø×$Ñ$ RÑ(¨CÓ/Ø×%Ò%¨Ñ,Õ%Ø×Ñ˜kÔ*ð —8‘8˜JÓ'×.¨3ˆDØ2ˆOØ Ñ$ Ñ6ˆDØŸ™ t°5·;±;ÀÐCˆIÜ  Ó+ˆGØ!ŒKÜ�L‰LÐ-¨wÕ7ä%°+Ñ>Ð>ð3 r„   c                 ó8   • U R                   R                  S5      $ )Nz	?location)rÃ   r*  rõ   s    r‚   r¢  r¢  ´  s   € Ø�;‰;×Ñ Ó,Ð,r„   c                 ób   ^ ^• T R                   m[        R                  " T 5      U U4S j5       nU$ )añ  Method decorator for caching method calls to a single instance.

**This is not a general purpose caching decorator.**

In order to use this, you *must* provide an ``_instance_cache``
attribute on the instance.

This decorator is used to cache method calls.  The cache is only
scoped to a single instance though such that multiple instances
will maintain their own cache.  In order to keep things simple,
this decorator requires that you provide an ``_instance_cache``
attribute on your instance.

c                 óÞ   >• TU4nU(       a&  [        [        UR                  5       5      5      nTX4nU R                  R	                  U5      nUb  U$ T" U /UQ70 UD6nXPR                  U'   U$ rô   )ÚtupleÚsortedrí  Ú_instance_cacher™   )rø   Úargsrå   Ú	cache_keyÚkwarg_itemsÚresultÚfuncÚ	func_names         €€r‚   Ú_cache_guardÚ$instance_cache.<locals>._cache_guardÉ  sw   ø€ à Ð%ˆ	ÞÜ¤ v§|¡|£~Ó 6Ó7ˆKØ" DÐ6ˆIØ×%Ñ%×)Ñ)¨)Ó4ˆØÑØˆMÙ�dÐ,˜TÒ, VÑ,ˆØ*0×Ñ˜YÑ'Øˆr„   )rë   Ú	functoolsÚwraps)rµ  r·  r¶  s   ` @r‚   Úinstance_cacher»  ¸  s1   ù€ ð —‘€Iä‡_‚_�TÓõ
ó ð
ð Ðr„   c                  ó   ^ ^• U U4S jnU$ )aô  
Version of functools.lru_cache that stores a weak reference to ``self``.

Serves the same purpose as :py:func:`instance_cache` but uses Python's
functools implementation which offers ``max_size`` and ``typed`` properties.

lru_cache is a global cache even when used on a method. The cache's
reference to ``self`` will prevent garbage collection of the object. This
wrapper around functools.lru_cache replaces the reference to ``self`` with
a weak reference to not interfere with garbage collection.
c                 óª   >^ ^• [         R                  " T0 TD6U 4S j5       m[         R                  " T 5      U4S j5       nTR                  Ul        U$ )Nc                 ó&   >• T" U " 5       /UQ70 UD6$ rô   rŠ   )Úweakref_to_selfr±  rå   rµ  s      €r‚   Úfunc_with_weakrefÚ=lru_cache_weakref.<locals>.wrapper.<locals>.func_with_weakrefç  s   ø€ á™Ó)Ð;¨DÒ;°FÑ;Ð;r„   c                 ó¾   >• UR                  5        H)  u  p4[        U[        5      (       d  M  [        U5      X#'   M+     T" [        R
                  " U 5      /UQ70 UD6$ rô   )rí  r|   rÕ  r®  ÚweakrefÚref)rø   r±  rå   Ú	kwarg_keyÚkwarg_valuerÀ  s        €r‚   ÚinnerÚ1lru_cache_weakref.<locals>.wrapper.<locals>.innerë  sP   ø€ à*0¯,©,®.Ñ&�	Ü˜k¬4×0Ó0Ü(-¨kÓ(:�FÓ%ñ +9ñ %¤W§[¢[°Ó%6ÐH¸ÒHÀÑHÐHr„   )r¹  Ú	lru_cacherº  Ú
cache_info)rµ  rÇ  rÀ  Ú
cache_argsÚcache_kwargss   ` @€€r‚   ÚwrapperÚ"lru_cache_weakref.<locals>.wrapperæ  sY   ú€ Ü	×	Ò	˜jÐ	9¨LÑ	9ô	<ó 
:ð	<ô 
�Š˜Ó	ô	Ió 
ð	Ið -×7Ñ7ˆÔØˆr„   rŠ   )rË  rÌ  rÍ  s   `` r‚   Úlru_cache_weakrefrÏ  Ù  s   ù€ öð €Nr„   c                 ó   • [        U R                  5      R                  R                  S5      nU Vs/ s H  oD[        ;   d  M  UPM     nnSn[        U5      S:”  a  USR                  U5      S-   -  nUS-  nUS;   a  g[        XSS9  gs  snf )	z?Switches the current s3 endpoint with an S3 Accelerate endpointr½   zhttps://s3-accelerate.r   úamazonaws.com)ÚListBucketsÚCreateBucketÚDeleteBucketNF)Úuse_new_scheme)r   rÃ   r£  r¿   ÚS3_ACCELERATE_WHITELISTrÓ   rÂ   Ú_switch_hosts)rö   Úoperation_namerå   rˆ  Úpr  s         r‚   Úswitch_host_s3_acceleraterÚ  ø  s‰   € ô �W—[‘[Ó!×(Ñ(×.Ñ.¨sÓ3€EÙÓ>š�1Ô&=Ñ!=�Q™€EÐ>Ø'€HÜ
ˆ5ƒz�Aƒ~Ø�C—H‘H˜U“O cÑ)Ñ)ˆØ�Ñ€HàÐHÓHØÜ�'°EÓ:ùò ?s   ³BÁBc                 ó®   • [         R                  " U R                  R                  S5      5      nUR	                  U5      (       a  X!   n[        X5        gg)zBSwitches the host using a parameter value from a JSON request bodyr÷  N)r   r‹  Údatar;  r™   r×  )rö   Ú
param_nameÚrequest_jsonÚnew_endpoints       r‚   Úswitch_host_with_paramrà    sE   € ä—:’:˜gŸl™l×1Ñ1°'Ó:Ó;€LØ×Ñ˜
×#Ñ#Ø#Ñ/ˆÜ�gÕ,ð $r„   c                 ó<   • [        U R                  X5      nX0l        g rô   )Ú_get_new_endpointrÃ   )rö   rß  rÕ  Úfinal_endpoints       r‚   r×  r×    s   € Ü&Ø�‰�\ó€Nð !…Kr„   c                 óü   • [        U5      n[        U 5      nUR                  nU(       a  UR                  nUUR                  UR                  UR                  S4n[        U5      n[        R                  SX5        U$ ©Nrª   zUpdating URI from %s to %s)r   r¥  r£  r¸   rx   r   r  r#  )Úoriginal_endpointrß  rÕ  Únew_endpoint_componentsÚoriginal_endpoint_componentsr¥  Úfinal_endpoint_componentsrã  s           r‚   râ  râ    s‚   € Ü& |Ó4ÐÜ#+Ð,=Ó#>Ð Ø)×0Ñ0€FÞØ(×/Ñ/ˆàØ×&Ñ&Ø$×)Ñ)Ø$×*Ñ*Ø
ð!Ðô  Ð 9Ó:€NÜ
‡L�LØ$Ð&7ôð Ðr„   c                 ó¬   • U HN  nX ;   a@  [        X   [        5      (       a)  [        X   [        5      (       a  [        X   X   5        MH  X   X'   MP     g)zåDeeply two dictionaries, overriding existing keys in the base.

:param base: The base dictionary which will be merged into.
:param extra: The dictionary to merge into the base. Keys from this
    dictionary will take precedence.
N)r|   rÓ  Ú
deep_merge)ÚbaseÚextrar¤   s      r‚   rë  rë  .  sO   € ó ˆð ‹KÜ˜4™9¤d×+Ñ+Ü˜5™:¤t×,Ñ,ä�t‘y %¡*Ô-Ùð ‘Jˆ‹	ò r„   c                 óB   • U R                  SS5      R                  5       $ )z[Translate the form used for event emitters.

:param service_id: The service_id to convert.
Ú Ú-)r®   r   )Ú
service_ids    r‚   Úhyphenize_service_idrò  C  s    € ð
 ×Ñ˜c 3Ó'×-Ñ-Ó/Ð/r„   c                   ó.   • \ rS rSrSrSrS rS rS rSr	g)	ÚIdentityCacheiK  z—Base IdentityCache implementation for storing and retrieving
highly accessed credentials.

This class is not intended to be instantiated in user code.
Úbase_identity_cachec                 ó   • Xl         X l        g rô   ©Ú_clientÚ_credential_cls©rø   ÚclientÚcredential_clss      r‚   rù   ÚIdentityCache.__init__T  ó   € ØŒØ-Õr„   c                 ó†   • U R                   " S0 UD6nU" 5       nU R                  R                  UUU R                  SSS9nU$ )Né-   é
   )r¬   Úrefresh_usingr1  Úadvisory_timeoutÚmandatory_timeoutrŠ   )Úbuild_refresh_callbackrù  Úcreate_from_metadataÚMETHOD)rø   rå   Úcallbackr¬   Úcredential_entrys        r‚   Úget_credentialsÚIdentityCache.get_credentialsX  sT   € Ø×.Ò.Ñ8°Ñ8ˆÙ“:ˆØ×/Ñ/×DÑDØØ"Ø—;‘;ØØ ð Eð 
Ðð  Ðr„   c                  ó   • [        5       e)zuCallback to be implemented by subclasses.

Returns a set of metadata to be converted into a new
credential instance.
)ÚNotImplementedError)rå   s    r‚   r  Ú$IdentityCache.build_refresh_callbackd  s   € ô "Ó#Ð#r„   r÷  N)
rë   rì   rí   rî   rï   r  rù   r
  r  rð   rŠ   r„   r‚   rô  rô  K  s   † ñð #€Fò.ò
 õ$r„   rô  c                   ól   ^ • \ rS rSrSrSrS r\R                  " SS9U 4S j5       r	S r
SS	 jrS
rU =r$ )ÚS3ExpressIdentityCacheim  z–S3Express IdentityCache for retrieving and storing
credentials from CreateSession calls.

This class is not intended to be instantiated in user code.
Ú	s3expressc                 ó   • Xl         X l        g rô   r÷  rú  s      r‚   rù   ÚS3ExpressIdentityCache.__init__v  rþ  r„   éd   )Úmaxsizec                 ó   >• [         TU ]  US9$ )N©Úbucket)Úsuperr
  )rø   r  Ú	__class__s     €r‚   r
  Ú&S3ExpressIdentityCache.get_credentialsz  s   ø€ ä‰wÑ&¨fÐ&Ð5Ð5r„   c                 ó   ^ ^• UU 4S jnU$ )Nc                  ó†   >• TR                   R                  TS9n U S   nTR                  US   SS9nUS   US   US   US	.$ )
N©ÚBucketÚCredentialsrs  T)Úisorp  rq  ÚSessionToken)rv  rw  rç   rx  )rø  Úcreate_sessionÚ_serialize_if_needed)rC  Úcredsr¦  r  rø   s      €€r‚   Ú	refresherÚ@S3ExpressIdentityCache.build_refresh_callback.<locals>.refresher  sk   ø€ Ø—|‘|×2Ñ2¸&Ð2ÐAˆHØ˜]Ñ+ˆEØ×2Ñ2Ø�lÑ#¨ð 3ð ˆJð $ MÑ2Ø#Ð$5Ñ6Ø˜~Ñ.Ø)ñ	ð r„   rŠ   )rø   r  r&  s   `` r‚   r  Ú-S3ExpressIdentityCache.build_refresh_callback~  s   ù€ ö	ð Ðr„   c                 ó€   • [        U[        5      (       a(  U(       a  UR                  5       $ UR                  S5      $ U$ ©Nz%Y-%m-%dT%H:%M:%S%Z©r|   r  Ú	isoformatr¤  ©rø   rÖ   r!  s      r‚   r$  Ú+S3ExpressIdentityCache._serialize_if_neededŽ  ó4   € Ü�eœ^×,Ñ,ÞØ—‘Ó(Ð(Ø—>‘>Ð"7Ó8Ð8Øˆr„   r÷  rl  )rë   rì   rí   rî   rï   r  rù   r¹  rÉ  r
  r  r$  rð   Ú__classcell__)r  s   @r‚   r  r  m  sB   ø† ñð €Fò.ð ×Ò Ñ%ô6ó &ð6ò÷ ò r„   r  c                   ó4   • \ rS rSrSS jrSS jrS rS rSrg)	ÚS3ExpressIdentityResolveri–  Nc                 óx   • [         R                  " U5      U l        Uc  [        U R                  U5      nX0l        g rô   )rÃ  Úproxyrø  r  Ú_cache)rø   rû  rü  Úcaches       r‚   rù   Ú"S3ExpressIdentityResolver.__init__—  s,   € Ü—}’} VÓ,ˆŒà‰=Ü*¨4¯<©<¸ÓHˆEØ�r„   c                 óð   • [         R                  S5        U=(       d     U R                  R                  R                  nUR                  SU R                  5        UR                  SU R                  5        g )Nz'Registering S3Express Identity Resolverúbefore-call.s3úbefore-sign.s3)r  r#  rø  Úmetar\   ÚregisterÚapply_signing_cache_keyÚresolve_s3express_identity©rø   Úevent_emitterÚemitters      r‚   r<  Ú"S3ExpressIdentityResolver.registerž  sW   € Ü�‰Ð>Ô?Ø×; 4§<¡<×#4Ñ#4×#;Ñ#;ˆØ×ÑÐ)¨4×+GÑ+GÔHØ×ÑÐ)¨4×+JÑ+JÕKr„   c                 óÖ   • UR                  S0 5      nUR                  SS 5      nUR                  S0 5      R                  S5      nUS:X  a  Ub  UR                  S0 5        XbS   S'   g g g )NÚendpoint_propertiesÚbackendÚinput_paramsr  Ú	S3ExpressÚsigningr²  )r™   Ú
setdefault)rø   ÚparamsrÞ   rå   rD  rE  r–  s          r‚   r=  Ú1S3ExpressIdentityResolver.apply_signing_cache_key¤  su   € Ø%Ÿk™kÐ*?ÀÓDÐØ%×)Ñ)¨)°TÓ:ˆð —k‘k .°"Ó5×9Ñ9¸(ÓCˆØ�kÓ! kÑ&=Ø×Ñ˜y¨"Ô-Ø.9�IÑ˜{Ò+ð '>Ð!r„   c                 óB  • UR                   R                  S0 5      nUR                  S5      nUS:X  al  UR                  S5      (       aU  U R                  US'   SU;  a?  UR                   R                  S0 5      R                  S0 5      R                  S	5      US'   g g g g )
NrH  Úsigning_namer  zv4-s3expressÚidentity_cacher²  Ús3_redirectrJ  r  )rÞ   r™   Ú
startswithr5  )	rø   rö   rM  r�  rœ  Úrequest_signerrØ  rå   Úsigning_contexts	            r‚   r>  Ú4S3ExpressIdentityResolver.resolve_s3express_identity®  s¡   € ð "Ÿ/™/×-Ñ-¨i¸Ó<ˆØ&×*Ñ*¨>Ó:ˆØ˜;Ó&Ð+<×+GÑ+GØ÷,
ñ ,
ð 15·±ˆOÐ,Ñ-Ø /Ó1à—O‘O×'Ñ'¨°rÓ:ß‘S˜ 2Ó&ß‘S˜“]ð   Ò,ð 2ð	,
Ð&r„   ©r5  rø  rô   )	rë   rì   rí   rî   rù   r<  r=  r>  rð   rŠ   r„   r‚   r2  r2  –  s   † ôôLò:õr„   r2  c                   óJ   • \ rS rSrSrSS jrSS jrS rS rS r	S	 r
S
 rSrg)ÚS3RegionRedirectorv2iÆ  zýUpdated version of S3RegionRedirector for use when
EndpointRulesetResolver is in use for endpoint resolution.

This class is considered private and subject to abrupt breaking changes or
removal without prior announcement. Please do not use it directly.
Nc                 óZ   • U=(       d    0 U l         [        R                  " U5      U l        g rô   )r5  rÃ  r4  rø  ©rø   Úendpoint_bridgerû  r6  s       r‚   rù   ÚS3RegionRedirectorv2.__init__Î  s   € Ø—k˜rˆŒÜ—}’} VÓ,ˆ�r„   c                 ó(  • [         R                  S5        U=(       d     U R                  R                  R                  nUR                  SU R                  5        UR                  SU R                  5        UR                  SU R                  5        g )Nz(Registering S3 region redirector handlerúneeds-retry.s3úbefore-parameter-build.s3zbefore-endpoint-resolution.s3)	r  r#  rø  r;  r\   r<  Úredirect_from_errorÚannotate_request_contextÚredirect_from_cacher?  s      r‚   r<  ÚS3RegionRedirectorv2.registerÒ  st   € Ü�‰Ð?Ô@Ø×; 4§<¡<×#4Ñ#4×#;Ñ#;ˆØ×ÑÐ)¨4×+CÑ+CÔDØ×ÑØ'¨×)FÑ)Fô	
ð 	×ÑØ+¨T×-EÑ-Eõ	
r„   c                 ój  • Uc  gUR                  S0 5      R                  S0 5      n[        R                  UR                  S5      5      (       a  [        R	                  S5        gUR                  S5      (       a  [        R	                  S5        gUS   R                  S	0 5      nUR                  S
5      nUS   R                  S0 5      nUS;   =(       a    UR
                  S:H  n	US;   =(       a+    UR
                  S:H  =(       a    SUR                  S0 5      ;   n
US:H  =(       a    SU;   nUS   SL=(       a    US   R                  S;   nUS:H  nUS:H  =(       a    UR
                  S:g  n[        U	UUU
UU/5      (       d  gUS   S   S   nUS   R                  S5      nU R                  Xò5      nUc  [        R	                  SUU5        g[        R	                  SUUU5        UU R                  U'   U R                  R                  nUR                  UUS   S   S   US   S9nU R                  US   UR                  5      US'   SUS   S   S'   UR                  R                  S5      nUb=  UR!                  U5      nUu  nnUUS   S '   0 US   R                  S!0 5      EUEUS   S!'   g)"úÜ
An S3 request sent to the wrong region will return an error that
contains the endpoint the request should be sent to. This handler
will add the redirect information to the signing context and then
redirect the request.
NrÞ   rO  r  zBS3 request was previously for an Accesspoint ARN, not redirecting.Ú
redirectedú6S3 request was previously redirected, not redirecting.r:   ÚErrorry  ÚResponseMetadata©Ú301Ú400Ú
HeadObjectÚ
HeadBucketúx-amz-bucket-regionÚHTTPHeadersÚAuthorizationHeaderMalformedÚRegionr   ©i-  i.  i3  ÚPermanentRedirectÚ"IllegalLocationConstraintExceptionrÓ  Úclient_regionú‡S3 client configured for region %s but the bucket %s is not in that region and the proper region could not be automatically determined.ú¦S3 client configured for region %s but the bucket %s is in region %s; Please configure the proper region to avoid multiple unnecessary redirects and signing attempts.rJ  )Úoperation_modelÚ	call_argsÚrequest_contextrÃ   TÚauthSchemesÚ	auth_typerH  )r™   Ú	ArnParserÚis_arnr  r#  r²   r?  ÚanyÚget_bucket_regionr5  rø  Ú_ruleset_resolverÚconstruct_endpointÚset_request_urlrÃ   Ú
propertiesÚauth_schemes_to_signing_ctx)rø   Úrequest_dictrC  Ú	operationrå   Úredirect_ctxr6  Ú
error_codeÚresponse_metadataÚis_special_head_objectÚis_special_head_bucketÚis_wrong_signing_regionÚis_redirect_statusÚis_permanent_redirectÚis_opt_in_region_redirectr  rt  Ú
new_regionÚep_resolverÚep_infoÚauth_schemesÚ	auth_infor{  rR  s                           r‚   r^  Ú(S3RegionRedirectorv2.redirect_from_errorÝ  s<  € ð Ñð à#×'Ñ'¨	°2Ó6×:Ñ:¸=È"ÓMˆÜ×Ñ˜L×,Ñ,¨XÓ6×7Ñ7Ü�L‰Lðôð à×Ñ˜L×)Ñ)Ü�L‰LØHôð à˜‘—‘ ¨Ó,ˆØ—Y‘Y˜vÓ&ˆ
Ø$ Q™KŸO™OÐ,>ÀÓCÐð ˜.Ñ(×K¨Y¯^©^¸|Ñ-Kð 	ð ˜.Ñ(÷ 8Ø—‘ ,Ñ.÷8à%Ø ×$Ñ$ ]°BÓ7ñ8ð 	ð Ð8Ñ8×N¸XÈÑ=Nð 	 ð & a™[°Ð4÷ )¸Øñ:
ç
‰+˜ñ:)Ðð !+Ð.AÑ AÐàÐ>Ñ>÷ 1Ø—‘ .Ñ0ð 	"ô à&Ø'Ø%Ø&Ø"Ø)ð÷	
ñ 	
ð à˜iÑ(¨Ñ7¸ÑAˆØ$ YÑ/×3Ñ3°OÓDˆØ×+Ñ+¨FÓ=ˆ
àÑÜ�L‰Lð9ð Øôð ä�‰ðIð ØØô	
ð )ˆ�‰�FÑð —l‘l×4Ñ4ˆØ×0Ñ0Ø%Ø" 9Ñ-¨mÑ<¸XÑFØ(¨Ñ3ð 1ð 
ˆð
 #×2Ñ2Ø˜Ñ §¡ó
ˆ�UÑð @Dˆ�YÑ Ñ.¨|Ñ<Ø×)Ñ)×-Ñ-¨mÓ<ˆØÑ#Ø#×?Ñ?ÀÓMˆIØ)2Ñ&ˆI�Ø3<ˆL˜Ñ# KÑ0ð2Ø˜yÑ)×-Ñ-¨i¸Ó<ð2à!ð2ˆL˜Ñ# IÑ.ð r„   c                 ó`  • US   nUS   S   nSU;   a  US   nO`UR                  S0 5      R                  SS5      =n(       a  UnO4 U R                  R                  US9nUS   S   nUR                  SS5      n[        U5        U$ ! [         a  nUR                  S   S   n SnAN@SnAff = f©	aæ  
There are multiple potential sources for the new region to redirect to,
but they aren't all universally available for use. This will try to
find region from response elements, but will fall back to calling
HEAD on the bucket if all else fails.

:param bucket: The bucket to find the region for. This is necessary if
    the region is not available in the error response.
:param response: A response representing a service request that failed
    due to incorrect region configuration.
r:   rg  rn  rm  rf  rp  Nr  )r™   rø  Úhead_bucketr    rC  r�  )	rø   r  rC  Úservice_responseÚresponse_headersrÜ   rŒ  r£   rD  s	            r‚   r  Ú&S3RegionRedirectorv2.get_bucket_regionR  sÒ   € ð $ A™;ÐØ+Ð,>Ñ?ÀÑNÐØ Ð$4Ó4Ø%Ð&;Ñ<‰Fà"×&Ñ& w°Ó3×7Ñ7¸À$ÓGÐGˆQÕGØ‰FðHØŸ<™<×3Ñ3¸6Ð3ÐB�Ø"Ð#5Ñ6°}ÑE�ð —[‘[Ð!6¸Ó=ˆFÜ˜VÔ$Øˆøô	 ó HØŸ*™*Ð%7Ñ8¸ÑG•ûðHús   Á!B Â
B-ÂB(Â(B-c                 ó   • [        XS5      $ )z¥
Splice a new endpoint into an existing URL. Note that some endpoints
from the the endpoint provider have a path component which will be
discarded by this function.
F)râ  )rø   Úold_urlrß  rå   s       r‚   r‚  Ú$S3RegionRedirectorv2.set_request_urlq  s   € ô ! ¸Ó>Ð>r„   c                 óŒ   • UR                  S5      nUb0  X@R                  ;   a   U R                  R                  U5      nXQS'   ggg)zÜ
If a bucket name has been redirected before, it is in the cache. This
handler will update the AWS::Region endpoint resolver builtin param
to use the region from cache instead of the client region to avoid the
redirect.
r  NzAWS::Region)r™   r5  )rø   ÚbuiltinsrJ  rå   r  r�  s         r‚   r`  Ú(S3RegionRedirectorv2.redirect_from_cachey  sC   € ð —‘˜HÓ%ˆØÑ &¯K©KÓ"7ØŸ™Ÿ™¨Ó0ˆJØ&0�]Ò#ð #8Ðr„   c                 ó8   • UR                  S5      nSUUS.US'   g)zvStore the bucket name in context for later use when redirecting.
The bucket name may be an access point ARN or alias.
r  F)rd  r  rJ  rO  NrÝ   )rø   rJ  rÞ   rå   r  s        r‚   r_  Ú-S3RegionRedirectorv2.annotate_request_context…  s'   € ð —‘˜HÓ%ˆàØØñ"
ˆ�Òr„   rT  rô   )rë   rì   rí   rî   rï   rù   r<  r^  r  r‚  r`  r_  rð   rŠ   r„   r‚   rV  rV  Æ  s,   † ñô-ô	
òsòjò>?ò
1õ	
r„   rV  c                   óJ   • \ rS rSrSrSS jrSS jrS rS rS r	S	 r
S
 rSrg)ÚS3RegionRedirectori‘  zŒThis handler has been replaced by S3RegionRedirectorv2. The original
version remains in place for any third-party libraries that import it.
Nc                 ó¬   • Xl         X0l        U R                  c  0 U l        [        R                  " U5      U l        [
        R                  " S[        S9  g )Nz„The S3RegionRedirector class has been deprecated for a new internal replacement. A future version of botocore may remove this class.©Úcategory)Ú_endpoint_resolverr5  rÃ  r4  rø  ÚwarningsÚwarnÚFutureWarningrX  s       r‚   rù   ÚS3RegionRedirector.__init__–  sF   € Ø"1ÔØŒØ�;‰;ÑØˆDŒKô —}’} VÓ,ˆŒä�Šðô #ó		
r„   c                 óþ   • U=(       d     U R                   R                  R                  nUR                  SU R                  5        UR                  SU R
                  5        UR                  SU R                  5        g )Nr\  r9  r]  )rø  r;  r\   r<  r^  r‚  r`  r?  s      r‚   r<  ÚS3RegionRedirector.register§  sa   € Ø×; 4§<¡<×#4Ñ#4×#;Ñ#;ˆØ×ÑÐ)¨4×+CÑ+CÔDØ×ÑÐ)¨4×+?Ñ+?Ô@Ø×ÑÐ4°d×6NÑ6NÕOr„   c                 ó(  • Uc  gU R                  UR                  S0 5      5      (       a  [        R                  S5        gUR                  S0 5      R                  S5      (       a  [        R                  S5        gUS   R                  S0 5      nUR                  S5      nUS   R                  S	0 5      nUS
;   =(       a    UR                  S:H  nUS
;   =(       a+    UR                  S:H  =(       a    SUR                  S0 5      ;   n	US:H  =(       a    SU;   n
US   SL=(       a    US   R
                  S;   nUS:H  n[        UU
UU	U/5      (       d  gUS   S   S   nUS   R                  S5      nU R                  XÒ5      nUc  [        R                  SUU5        g[        R                  SUUU5        U R                  R                  SU5      nUS   nUUUS.nUUS   S'   UU R                  U'   U R                  XS   5        SUS   S'   g)rc  NrÞ   z=S3 request was previously to an accesspoint, not redirecting.Ús3_redirectedre  r:   rf  ry  rg  rh  rk  rl  rm  rn  ro  rp  r   rq  rr  rH  r  rt  ru  rv  Ús3r€  )rÜ   r  r  T)Ú_is_s3_accesspointr™   r  r#  r²   r?  r~  r  r©  Úresolver5  r‚  )rø   r…  rC  r†  rå   r6  rˆ  r‰  rŠ  r‹  rŒ  r�  rŽ  r  rt  r�  r  rR  s                     r‚   r^  Ú&S3RegionRedirector.redirect_from_error­  st  € ð Ñð à×"Ñ" <×#3Ñ#3°I¸rÓ#B×CÑCÜ�L‰LØOôð à×Ñ˜I rÓ*×.Ñ.¨×?Ñ?Ü�L‰LØHôð à˜‘—‘ ¨Ó,ˆØ—Y‘Y˜vÓ&ˆ
Ø$ Q™KŸO™OÐ,>ÀÓCÐð ˜.Ñ(×K¨Y¯^©^¸|Ñ-Kð 	ð ˜.Ñ(÷ 8Ø—‘ ,Ñ.÷8à%Ø ×$Ñ$ ]°BÓ7ñ8ð 	ð Ð8Ñ8×N¸XÈÑ=Nð 	 ð & a™[°Ð4÷ )¸Øñ:
ç
‰+˜ñ:)Ðð !+Ð.AÑ AÐÜà&Ø'Ø%Ø&Ø"ð÷
ñ 
ð à˜iÑ(¨Ñ3°HÑ=ˆØ$ YÑ/×3Ñ3°OÓDˆØ×+Ñ+¨FÓ=ˆ
àÑÜ�L‰Lð,ð Øôð ä�‰ð:ð ØØô	
ð ×*Ñ*×2Ñ2°4¸ÓDˆØ˜NÑ+ˆð !ØØ ñ
ˆð
 .=ˆ�YÑ 	Ñ*à-ˆ�‰�FÑØ×Ñ˜\¸	Ñ+BÔCà37ˆ�YÑ Ñ0ð r„   c                 ó>  • US   nUS   S   nSU;   a  US   $ UR                  S0 5      R                  SS5      nUb  U$  U R                  R                  US9nUS   S   nUR                  SS5      nU$ ! [         a  nUR                  S   S   n SnAN5SnAff = fr—  )r™   rø  r˜  r    rC  )rø   r  rC  r™  rš  rÜ   r£   rD  s           r‚   r  Ú$S3RegionRedirector.get_bucket_region  sÍ   € ð $ A™;ÐØ+Ð,>Ñ?ÀÑNÐØ Ð$4Ó4Ø#Ð$9Ñ:Ð:ð "×%Ñ% g¨rÓ2×6Ñ6°xÀÓFˆØÑØˆMð	DØ—|‘|×/Ñ/°vÐ/Ð>ˆHØÐ1Ñ2°=ÑAˆGð —‘Ð2°DÓ9ˆØˆøô	 ó 	DØ—j‘jÐ!3Ñ4°]ÑC�Gûð	Dús   Á!A6 Á6
BÂ BÂBc                 óv   • UR                  S0 5      R                  SS 5      nUb  [        US   US5      US'   g g )NrH  r  rÃ   F)r™   râ  ©rø   rJ  rÞ   rå   r  s        r‚   r‚  Ú"S3RegionRedirector.set_request_url1  s@   € Ø—;‘;˜y¨"Ó-×1Ñ1°*¸dÓCˆØÑÜ-¨f°U©m¸XÀuÓMˆF�5ŠMð  r„   c                 ó¨   • U R                  U5      (       a  gUR                  S5      nU R                  R                  U5      nUb  XRS'   gSU0US'   g)zn
This handler retrieves a given bucket's signing context from the cache
and adds it into the request context.
Nr  rH  r  )r³  r™   r5  )rø   rJ  rÞ   rå   r  rR  s         r‚   r`  Ú&S3RegionRedirector.redirect_from_cache6  sU   € ð
 ×"Ñ" 7×+Ñ+ØØ—‘˜HÓ%ˆØŸ+™+Ÿ/™/¨&Ó1ˆØÑ&Ø!0�IÒà"*¨FÐ!3ˆG�IÒr„   c                 ó   • SU;   $ ©NrÛ   rŠ   )rø   rÞ   s     r‚   r³  Ú%S3RegionRedirector._is_s3_accesspointD  s   € Ø 7Ñ*Ð*r„   )r5  rø  r©  rô   )rë   rì   rí   rî   rï   rù   r<  r^  r  r‚  r`  r³  rð   rŠ   r„   r‚   r¥  r¥  ‘  s/   † ñô
ô"PòaòFòBNò
4õ+r„   r¥  c                   ó   • \ rS rSrSrg)ÚInvalidArnExceptioniH  rŠ   N)rë   rì   rí   rî   rð   rŠ   r„   r‚   rÁ  rÁ  H  s   † Úr„   rÁ  c                   ó*   • \ rS rSrS r\S 5       rSrg)r|  iL  c                 ó�   • UR                  SS5      n[        U5      S:  a  [        SU S35      eUS   US   US   US	   US   S
.$ )NÚ:é   é   zProvided ARN: zE must be of the format: arn:partition:service:region:account:resourcer:   r   r’  é   )Ú	partitionÚservicerÜ   ÚaccountÚresource)r¿   rÓ   rÁ  )rø   ÚarnÚ	arn_partss      r‚   Ú	parse_arnÚArnParser.parse_arnM  sm   € Ø—I‘I˜c 1Ó%ˆ	Üˆy‹>˜AÓÜ%Ø   ð &@ð @óð ð
 # 1™Ø  ‘|Ø ‘lØ  ‘|Ø! !™ñ
ð 	
r„   c                 ó´   • [        U [        5      (       a  U R                  S5      (       d  g[        5       n UR	                  U 5        g! [
         a     gf = f)Nzarn:FT)r|   r~   rP  r|  rÎ  rÁ  )rÖ   Ú
arn_parsers     r‚   r}  ÚArnParser.is_arn\  sQ   € ä˜%¤×%Ñ%¨U×-=Ñ-=¸f×-EÑ-EØÜ“[ˆ
ð	Ø× Ñ  Ô'ØøÜ"ó 	Ùð	ús   ¸A
 Á

AÁArŠ   N)rë   rì   rí   rî   rÎ  Ústaticmethodr}  rð   rŠ   r„   r‚   r|  r|  L  s   † ò
ð ñó ór„   r|  c                   ó�   • \ rS rSr\R
                  " S5      r\R
                  " S5      rS/rSS jr	S r
S rS	 rS
 rS rS rSrg)ÚS3ArnParamHandlerih  zA^(?P<resource_type>accesspoint|outpost)[/:](?P<resource_name>.+)$zc^(?P<outpost_name>[a-zA-Z0-9\-]{1,63})[/:]accesspoint[/:](?P<accesspoint_name>[a-zA-Z0-9\-]{1,63}$)rÓ  Nc                 ó6   • Xl         Uc  [        5       U l         g g rô   ©Ú_arn_parserr|  ©rø   rÑ  s     r‚   rù   ÚS3ArnParamHandler.__init__r  ó   € Ø%ÔØÑÜ(›{ˆDÕð r„   c                 ó<   • UR                  SU R                  5        g )Nr]  ©r<  Ú
handle_arn©rø   r@  s     r‚   r<  ÚS3ArnParamHandler.registerw  s   € Ø×ÑÐ:¸D¿O¹OÕLr„   c                 óÔ   • UR                   U R                  ;   a  g U R                  U5      nUc  g US   S:X  a  U R                  XU5        g US   S:X  a  U R	                  XU5        g g )NÚresource_typeÚaccesspointÚoutpost)r²   Ú_BLACKLISTED_OPERATIONSÚ"_get_arn_details_from_bucket_paramÚ_store_accesspointÚ_store_outpost)rø   rJ  ÚmodelrÞ   rå   Úarn_detailss         r‚   rÞ  ÚS3ArnParamHandler.handle_arnz  so   € Ø�:‰:˜×5Ñ5Ó5ØØ×=Ñ=¸fÓEˆØÑØØ�Ñ'¨=Ó8Ø×#Ñ# F°[ÕAØ˜Ñ)¨YÓ6Ø×Ñ °Õ=ð 7r„   c                 ó˜   • SU;   a4   US   nU R                   R                  U5      nU R                  X#5        U$ g ! [         a     g f = f)Nr  )rØ  rÎ  Ú_add_resource_type_and_namerÁ  )rø   rJ  rÌ  rê  s       r‚   ræ  Ú4S3ArnParamHandler._get_arn_details_from_bucket_param…  s_   € Ø�vÓðØ˜XÑ&�Ø"×.Ñ.×8Ñ8¸Ó=�Ø×0Ñ0°ÔBØ"Ð"ð øô 'ó ØØðús   ˆ2< ¼
A	ÁA	c                 ó°   • U R                   R                  US   5      nU(       a)  UR                  S5      US'   UR                  S5      US'   g [        US9e)NrË  râ  Úresource_name)rÌ  )Ú_RESOURCE_REGEXr~  Úgroupr3   )rø   rÌ  rê  r~  s       r‚   rí  Ú-S3ArnParamHandler._add_resource_type_and_name�  sQ   € Ø×$Ñ$×*Ñ*¨;°zÑ+BÓCˆÞØ+0¯;©;°Ó+GˆK˜Ñ(Ø+0¯;©;°Ó+GˆK˜Ò(ä'¨CÑ0Ð0r„   c                 óH   • US   US'   US   US   US   US   US   S.US'   g )	Nrð  r  rÊ  rÈ  rÜ   rÉ  )r²   rÊ  rÈ  rÜ   rÉ  rÛ   rŠ   ©rø   rJ  rÞ   rê  s       r‚   rç  Ú$S3ArnParamHandler._store_accesspoint˜  sH   € ð ' Ñ7ˆˆxÑà Ñ0Ø" 9Ñ-Ø$ [Ñ1Ø! (Ñ+Ø" 9Ñ-ñ%
ˆÐ Ò!r„   c                 óÜ   • US   nU R                   R                  U5      nU(       d	  [        US9eUR                  S5      nXaS'   UR                  S5      UUS   US   US   US	   S
.US'   g )Nrð  )rð  Úaccesspoint_namer  Úoutpost_namerÊ  rÈ  rÜ   rÉ  )rù  r²   rÊ  rÈ  rÜ   rÉ  rÛ   )Ú_OUTPOST_RESOURCE_REGEXr~  r1   rò  )rø   rJ  rÞ   rê  rð  r~  rø  s          r‚   rè  Ú S3ArnParamHandler._store_outpost©  s†   € Ø# OÑ4ˆØ×,Ñ,×2Ñ2°=ÓAˆÞÜ1ÀÑNÐNð !Ÿ;™;Ð'9Ó:ÐØ+ˆxÑà!ŸK™K¨Ó7Ø$Ø" 9Ñ-Ø$ [Ñ1Ø! (Ñ+Ø" 9Ñ-ñ%
ˆÐ Ò!r„   ©rØ  rô   )rë   rì   rí   rî   r¯   r†  rñ  rú  rå  rù   r<  rÞ  ræ  rí  rç  rè  rð   rŠ   r„   r‚   rÕ  rÕ  h  sX   † Ø—j’jØLó€Oð !Ÿjšjð	6óÐð  .Ð.Ðô+ò
Mò	>ò	ò1ò
õ"
r„   rÕ  c                   óÞ   • \ 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\S 5       r\S 5       r\S 5       rSr g) ÚS3EndpointSetteri½  ÚawsrÑ  Nc                 óŠ   • Xl         X l        X0l        X`l        Uc  0 U l        X@l        XPl        Uc  U R                  U l        g g rô   ©r©  Ú_regionÚ
_s3_configÚ_use_fips_endpointÚ_endpoint_urlÚ
_partitionÚ_DEFAULT_PARTITION©rø   Úendpoint_resolverrÜ   Ú	s3_configr€  rÈ  Úuse_fips_endpoints          r‚   rù   ÚS3EndpointSetter.__init__Á  sJ   € ð #4ÔØŒØ#ŒØ"3ÔØÑØ ˆDŒOØ)ÔØ#ŒØÑØ"×5Ñ5ˆD�Oð r„   c                 ó¬   • UR                  SU R                  5        UR                  SU R                  5        UR                  SU R                  5        g )Nr:  zchoose-signer.s3z%before-call.s3.WriteGetObjectResponse)r<  Úset_endpointÚ
set_signerÚ#update_endpoint_to_s3_object_lambdarß  s     r‚   r<  ÚS3EndpointSetter.registerÖ  sH   € Ø×ÑÐ/°×1BÑ1BÔCØ×ÑÐ1°4·?±?ÔCØ×ÑØ3Ø×4Ñ4õ	
r„   c                 ó"  • U R                   (       a	  [        SS9eU R                  US5        U R                  (       a  g U R                  nUR                  SU R                  5      nSR                  US   US   S9n[        US   US	5      US'   g )
NzOS3 client does not support accelerate endpoints for S3 Object Lambda operations©Úmsgús3-object-lambdazhttps://{host_prefix}{hostname}Úhost_prefixr}  )r  r}  rÃ   F)	Ú_use_accelerate_endpointr4   Ú_override_signing_namer  r©  r�  r  Úformatrâ  )rø   rJ  rÞ   rå   ÚresolverÚresolvedrß  s          r‚   r  Ú4S3EndpointSetter.update_endpoint_to_s3_object_lambdaÞ  sž   € Ø×(×(Ü1Øeñð ð 	×#Ñ# GÐ-?Ô@Ø××àà×*Ñ*ˆà×.Ñ.Ø §¡ó
ˆð 9×?Ñ?Ø˜}Ñ-Ø˜jÑ)ð @ð 
ˆô
 *¨&°©-¸ÀuÓMˆˆuŠr„   c                 óÖ  • U R                  U5      (       ag  U R                  U5        U R                  U5        U R                  U5        U R	                  U5      nU R                  U5        U R                  X5        g U R                  (       a5  U R                  (       a  [        SU R                   S3S9e[        SSU0UD6  U R                  (       a  U R                  " SSU0UD6  g g )Nz8Client is configured to use the FIPS psuedo region for "zA", but S3 Accelerate does not have any FIPS compatible endpoints.r  rö   rŠ   )Ú_use_accesspoint_endpointÚ_validate_accesspoint_supportedÚ_validate_fips_supportedÚ_validate_global_regionsÚ(_resolve_region_for_accesspoint_endpointÚ._resolve_signing_name_for_accesspoint_endpointÚ_switch_to_accesspoint_endpointr  r  r4   r  rÚ  Ú_s3_addressing_handler)rø   rö   rå   r�  s       r‚   r  ÚS3EndpointSetter.set_endpointù  sÞ   € Ø×)Ñ)¨'×2Ñ2Ø×0Ñ0°Ô9Ø×)Ñ)¨'Ô2Ø×)Ñ)¨'Ô2Ø×GÑGØóˆKð ×?Ñ?ÀÔHØ×0Ñ0°ÔFØØ×(×(Ø×&×&Ü5ð Ø $§¡˜~ð .0ð0ñð ô &Ñ@¨gÐ@¸Ò@Ø×&×&Ø×'Ò'ÑB°ÐB¸6ÓBð 'r„   c                 ó    • SUR                   ;   $ r¾  ©rÞ   r÷   s     r‚   r  Ú*S3EndpointSetter._use_accesspoint_endpoint	  s   € Ø 7§?¡?Ñ2Ð2r„   c                 óv  • U R                   (       d  g SUR                  S   S   ;   a
  [        S1S9eSUR                  S   ;   a  [        SU R                   S3S9eUR                  S   S   nX R                  :w  a<  U R                  R                  S	S
5      (       d  [        SU R                   SU S3S9eg g )NÚfipsrÛ   rÜ   ú,Invalid ARN, FIPS region not allowed in ARN.r  rù  z4Client is configured to use the FIPS psuedo-region "z2", but outpost ARNs do not support FIPS endpoints.Úuse_arn_regionTz8Client is configured to use the FIPS psuedo-region for "z1", but the access-point ARN provided is for the "zn" region. For clients using a FIPS psuedo-region calls to access-point ARNs in another region are not allowed.)r  rÞ   r2   r  r  r™   ©rø   rö   Úaccesspoint_regions      r‚   r   Ú)S3EndpointSetter._validate_fips_supported	  sç   € Ø×&×&ØØ�W—_‘_Ð%5Ñ6°xÑ@Ó@Ü<ØCÐDñð ð ˜WŸ_™_Ð-=Ñ>Ó>Ü<àJÈ4Ï<É<È.ð YFð Fñð ð %Ÿ_™_Ð-=Ñ>¸xÑHÐØ§¡Ó-Ø—?‘?×&Ñ&Ð'7¸×>Ñ>ô Að Ø $§¡˜~ð . Ø 2Ð3ð 42ð2ñð ð ?ð .r„   c                 ó–   • U R                   R                  SS5      (       a  g U R                  S;   a  [        SU R                   S3S9eg )Nr-  T)z
aws-globalzs3-external-1z6Client is configured to use the global psuedo-region "zJ". When providing access-point ARNs a regional endpoint must be specified.r  )r  r™   r  r2   r÷   s     r‚   r!  Ú)S3EndpointSetter._validate_global_regions2	  sT   € Ø�?‰?×ÑÐ/°×6Ñ6ØØ�<‰<Ð:Ó:Ü<ðØŸ™�~ð &2ð2ñð ð ;r„   c                 ó  • U R                   (       a	  [        SS9eUR                  S   S   nX R                  :w  a  [        SU R                   SU S3S9eUR                  S   R	                  S5      nUS	:X  a)  U R
                  R	                  S
5      (       a	  [        SS9eUR                  S   R	                  S5      nU(       a)  U R
                  R	                  S
5      (       a	  [        SS9eU R                  U5        g )NzZClient does not support s3 accelerate configuration when an access-point ARN is specified.r  rÛ   rÈ  úClient is configured for "z3" partition, but access-point ARN provided is for "zE" partition. The client and  access-point partition must be the same.rÉ  r  Úuse_dualstack_endpointzjClient does not support s3 dualstack configuration when an S3 Object Lambda access point ARN is specified.rù  zTClient does not support s3 dualstack configuration when an outpost ARN is specified.)r  r2   rÞ   r  r™   r  Ú_validate_mrap_s3_config)rø   rö   Úrequest_partitionÚ
s3_servicerù  s        r‚   r  Ú0S3EndpointSetter._validate_accesspoint_supported>	  s  € Ø×(×(Ü<ð=ñð ð $ŸO™OÐ,<Ñ=¸kÑJÐØ§¡Ó/Ü<à0°·±Ð0Að B-Ø->Ð,?ð @@ð@ñð ð —_‘_Ð%5Ñ6×:Ñ:¸9ÓEˆ
ØÐ+Ó+°·±×0CÑ0CØ$÷1
ñ 1
ô =ðNñð ð —‘Ð'7Ñ8×<Ñ<¸^ÓLˆÞ˜DŸO™O×/Ñ/Ð0H×IÑIÜ<ð8ñð ð 	×%Ñ% gÕ.r„   c                 óÞ   • [        UR                  5      (       d  g U R                  R                  S5      (       a	  [	        SS9eU R                  R                  S5      (       a	  [	        SS9eg )NÚ$s3_disable_multiregion_access_pointszCInvalid configuration, Multi-Region Access Point ARNs are disabled.r  r5  zeClient does not support s3 dualstack configuration when a Multi-Region Access Point ARN is specified.)rà   rÞ   r  r™   r2   r÷   s     r‚   r6  Ú)S3EndpointSetter._validate_mrap_s3_configc	  sl   € Ü$ W§_¡_×5Ñ5ØØ�?‰?×ÑÐE×FÑFÜ<ð)ñð ð �_‰_× Ñ Ð!9×:Ñ:Ü<ðIñð ð ;r„   c                 ó  • [        UR                  5      (       a  U R                  US5        U R
                  $ U R                  R	                  SS5      (       a%  UR                  S   S   nU R                  X5        U$ U R
                  $ )NrÎ   r-  TrÛ   rÜ   )rà   rÞ   Ú_override_signing_regionr  r™   r  r.  s      r‚   r"  Ú9S3EndpointSetter._resolve_region_for_accesspoint_endpointu	  s|   € Ü  §¡×1Ñ1à×)Ñ)¨'°3Ô7ð �|‰|Ðð �_‰_× Ñ Ð!1°4×8Ñ8Ø!(§¡Ð1AÑ!BÀ8Ñ!LÐð ×)Ñ)¨'ÔFØ%Ð%Ø�|‰|Ðr„   c                 óN   • [        U5      (       a  [        (       a  g[        SS9eg )NÚs3v4azzUsing S3 with an MRAP arn requires an additional dependency. You will need to pip install botocore[crt] before proceeding.r  )rà   r
   r.   )rø   rÞ   rå   s      r‚   r  ÚS3EndpointSetter.set_signer‚	  s,   € Ü  ×)Ñ)ßŠwØä0ð7ñð ð	 *r„   c                 ó`   • UR                   S   S   nU R                  UR                   U5        g )NrÛ   rÉ  ©rÞ   r  )rø   rö   Úaccesspoint_services      r‚   r#  Ú?S3EndpointSetter._resolve_signing_name_for_accesspoint_endpoint�	  s,   € Ø%Ÿo™oÐ.>Ñ?À	ÑJÐØ×#Ñ# G§O¡OÐ5HÕIr„   c                 ó@  • [        UR                  5      n[        UR                  U R	                  UR
                  U5      U R                  UR                  UR
                  5      UR                  S45      n[        R                  SUR                  U5        XAl        g rå  )r   rÃ   r   r¥  Ú_get_netlocrÞ   Ú_get_accesspoint_pathr¸   rx   r  r#  )rø   rö   r�  Úoriginal_componentsÚaccesspoint_endpoints        r‚   r$  Ú0S3EndpointSetter._switch_to_accesspoint_endpoint‘	  sŠ   € Ü& w§{¡{Ó3ÐÜ)à#×*Ñ*Ø× Ñ  §¡°+Ó>Ø×*Ñ*Ø'×,Ñ,¨g¯o©oóð $×)Ñ)Øðó
 
Ðô 	�‰Ø(¨'¯+©+Ð7Kô	
ð +�r„   c                 óf   • [        U5      (       a  U R                  U5      $ U R                  X5      $ rô   )rà   Ú_get_mrap_netlocÚ_get_accesspoint_netloc)rø   ry  r�  s      r‚   rH  ÚS3EndpointSetter._get_netloc£	  s/   € Ü  ×1Ñ1Ø×(Ñ(¨Ó9Ð9à×/Ñ/°ÓMÐMr„   c                 ó  • US   nSnUS   /nU R                   (       a1  [        U R                   5      R                  nUR                  U5        O(US   nUR	                  SUU R                  U5      /5        SR                  U5      $ )NrÛ   z	s3-globalr²   rÈ  rã  r½   )r  r   r£  rÁ   rÖ  Ú_get_partition_dns_suffixrÂ   )rø   ry  rÛ   r�  Úmrap_netloc_componentsÚendpoint_url_netlocrÈ  s          r‚   rN  Ú!S3EndpointSetter._get_mrap_netloc©	  s’   € Ø(Ð)9Ñ:ˆØ!ˆØ"0°Ñ"8Ð!9ÐØ××Ü"*¨4×+=Ñ+=Ó">×"EÑ"EÐØ"×)Ñ)Ð*=Õ>à& {Ñ3ˆIØ"×)Ñ)à!ØØ×2Ñ2°9Ó=ðôð �x‰xÐ.Ó/Ð/r„   c                 ó´  • US   nSR                  US   US   5      /nUR                  S5      nU R                  (       aI  U(       a  UR                  U5        [	        U R                  5      R
                  nUR                  U5        O¿U(       a  US/nUR                  U5        OPUS   S:X  a$  U R                  SU5      nUR                  U5        O#U R                  S	U5      nUR                  U5        U R                  R                  S
5      (       a  UR                  S5        UR                  X R                  U5      /5        SR                  U5      $ )NrÛ   z{}-{}r²   rÊ  rù  ús3-outpostsrÉ  r  zs3-accesspointr5  r=   r½   )r  r™   r  rÁ   r   r£  rÖ  Ú_inject_fips_if_neededr  Ú_get_dns_suffixrÂ   )	rø   ry  r�  rÛ   Úaccesspoint_netloc_componentsrù  rT  Úoutpost_hostÚ	components	            r‚   rO  Ú(S3EndpointSetter._get_accesspoint_netloc»	  sG  € Ø(Ð)9Ñ:ˆà�N‰N˜>¨&Ñ1°>À)Ñ3LÓMð)
Ð%ð &×)Ñ)¨.Ó9ˆØ××ÞØ-×4Ñ4°\ÔBÜ"*¨4×+=Ñ+=Ó">×"EÑ"EÐØ)×0Ñ0Ð1DÕEæØ ,¨mÐ<�Ø-×4Ñ4°\ÕBØ 	Ñ*Ð.@Ó@Ø ×7Ñ7Ø&¨ó�	ð .×4Ñ4°YÕ?à ×7Ñ7Ø$ oó�	ð .×4Ñ4°YÔ?Ø�‰×"Ñ"Ð#;×<Ñ<Ø-×4Ñ4°[ÔAØ)×0Ñ0Ø×2Ñ2°;Ó?Ð@ôð �x‰xÐ5Ó6Ð6r„   c                 ó2   • U R                   (       a  U S3$ U$ )Nú-fips©r  )rø   r\  ry  s      r‚   rX  Ú'S3EndpointSetter._inject_fips_if_neededÛ	  s   € Ø×"×"Ø�[ Ð&Ð&ØÐr„   c                 óP   • US   S   nUR                  SU-   SS5      =(       d    S$ )NrÛ   r²   rµ   rª   r:   )r®   )rø   Úoriginal_pathry  r²   s       r‚   rI  Ú&S3EndpointSetter._get_accesspoint_pathà	  s2   € ð
 Ð/Ñ0°Ñ8ˆà×$Ñ$ S¨4¡Z°°QÓ7×>¸3Ð>r„   c                 óZ   • U R                   R                  U5      nUc  U R                  nU$ rô   )r©  Úget_partition_dns_suffixÚ_DEFAULT_DNS_SUFFIX)rø   Úpartition_nameÚ
dns_suffixs      r‚   rR  Ú*S3EndpointSetter._get_partition_dns_suffixé	  s4   € Ø×,Ñ,×EÑEØó
ˆ
ð ÑØ×1Ñ1ˆJØÐr„   c                 óz   • U R                   R                  SU5      nU R                  nU(       a  SU;   a  US   nU$ ©Nr²  Ú	dnsSuffix©r©  r�  rg  ©rø   r�  r  ri  s       r‚   rY  Ú S3EndpointSetter._get_dns_suffixñ	  óD   € Ø×*Ñ*×=Ñ=Ø�+ó
ˆð ×-Ñ-ˆ
Þ˜ xÓ/Ø! +Ñ.ˆJØÐr„   c                 ó`   • UR                   R                  S0 5      nX#S'   X1R                   S'   g ©NrH  rÜ   ©rÞ   r™   ©rø   rö   r�  rR  s       r‚   r>  Ú)S3EndpointSetter._override_signing_regionú	  ó.   € Ø!Ÿ/™/×-Ñ-¨i¸Ó<ˆð
 %0˜Ñ!Ø%4�‰˜	Ò"r„   c                 ó8   • UR                  S0 5      nX#S'   X1S'   g ©NrH  rM  rÝ   )rø   rÞ   rM  rR  s       r‚   r  Ú'S3EndpointSetter._override_signing_name
  s$   € Ø!Ÿ+™+ i°Ó4ˆð
 +7˜Ñ'Ø,�	Òr„   c                 ót  • U R                   R                  S5      (       a  gU R                  c  g[        U R                  5      R                  nUR                  S5      (       d  gUR                  S5      nUS   S:w  a  gUSS	 n[        U5      [        [        U5      5      :w  a  g[        S
 U 5       5      $ )NÚuse_accelerate_endpointTFrÑ  r½   r   ús3-accelerater:   éþÿÿÿc              3   ó2   #   • U  H  o[         ;   v •  M     g 7frô   ©rÖ  ©Ú.0rÙ  s     r‚   Ú	<genexpr>Ú<S3EndpointSetter._use_accelerate_endpoint.<locals>.<genexpr>-
  s   é € ÐGº°AÔ/Ö/ºùó   ‚)
r  r™   r  r   r£  r*  r¿   rÓ   ÚsetÚall)rø   r£  rˆ  Úfeature_partss       r‚   r  Ú)S3EndpointSetter._use_accelerate_endpoint
  s³   € ð �?‰?×ÑÐ8×9Ñ9Øð ×ÑÑ%Øô ˜$×,Ñ,Ó-×4Ñ4ˆØ�‰˜×/Ñ/Øð —‘˜SÓ!ˆØ�‰8�Ó&Øð ˜a ˜ˆô ˆ}Ó¤¤S¨Ó%7Ó!8Ó8Øô ÑG¹ÓGÓGÐGr„   c                 óp   • U R                   (       a  gU R                  R                  S5      nU(       a  U$ g )NÚvirtualÚaddressing_style)r  r  r™   )rø   Úconfigured_addressing_styles     r‚   Ú_addressing_styleÚ"S3EndpointSetter._addressing_style/
  s6   € ð ×(×(Øð '+§o¡o×&9Ñ&9Ð:LÓ&MÐ#Þ&Ø.Ð.ð 'r„   c                 óô   • U R                   S:X  a  [        R                  S5        [        $ U R                   S:X  d  U R                  b  [        R                  S5        g [        R                  S5        [
        $ )Nr‹  z'Using S3 virtual host style addressing.r¸   zUsing S3 path style addressing.zSDefaulting to S3 virtual host style addressing with path style addressing fallback.)rŽ  r  r#  r›  r  rž  r  s    r‚   r%  Ú'S3EndpointSetter._s3_addressing_handler;
  si   € ð ×!Ñ! YÓ.Ü�L‰LÐBÔCÜ/Ð/ð ×!Ñ! VÓ+¨t×/AÑ/AÑ/MÜ�L‰LÐ:Ô;Øä�‰ð.ô	
ô Ðr„   ©r©  r  r  r  r  r  ©NNNNF)!rë   rì   rí   rî   r  rg  rù   r<  r  r  r  r   r!  r  r6  r"  r  r#  r$  rH  rN  rO  rX  rI  rR  rY  r>  r  rD  r  rŽ  r%  rð   rŠ   r„   r‚   rþ  rþ  ½  sÒ   † ØÐØ)Ðð
 ØØØØô6ò*
òNò6Cò03òò<
ò#/òJò$ò	òJò+ò$Nò0ò$7ò@ò
?òòò5ò-ð ñ Hó ð HðD ñ	/ó ð	/ð ñó ór„   rþ  c                   óÞ   • \ rS rSrSrSr\R                  " S5      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S rS r Sr!g) ÚS3ControlEndpointSetteriT
  rÿ  rÑ  z^[a-zA-Z0-9\-]{1,63}$Nc                 óŠ   • Xl         X l        X0l        X`l        Uc  0 U l        X@l        XPl        Uc  U R                  U l        g g rô   r  r  s          r‚   rù   Ú S3ControlEndpointSetter.__init__Y
  sJ   € ð #4ÔØŒØ#ŒØ"3ÔØÑØ ˆDŒOØ)ÔØ#ŒØÑØ"×5Ñ5ˆD�Oð r„   c                 ó<   • UR                  SU R                  5        g )Nzbefore-sign.s3-control)r<  r  rß  s     r‚   r<  Ú S3ControlEndpointSetter.registerm
  s   € Ø×ÑÐ7¸×9JÑ9JÕKr„   c                 ó¨  • U R                  U5      (       aV  U R                  U5        U R                  U5      nU R                  U5        U R	                  X5        U R                  U5        g U R                  U5      (       aP  U R                  U5        U R                  US5        U R                  U R                  5      nU R                  X5        g g ©NrW  )Ú_use_endpoint_from_arn_detailsÚ-_validate_endpoint_from_arn_details_supportedÚ _resolve_region_from_arn_detailsÚ&_resolve_signing_name_from_arn_detailsÚ"_resolve_endpoint_from_arn_detailsÚ_add_headers_from_arn_detailsÚ_use_endpoint_from_outpost_idÚ#_validate_outpost_redirection_validr  Ú_construct_outpost_endpointr  Ú_update_request_netloc)rø   rö   rå   r�  Ú
new_netlocs        r‚   r  Ú$S3ControlEndpointSetter.set_endpointp
  s±   € Ø×.Ñ.¨w×7Ñ7Ø×>Ñ>¸wÔGØ×?Ñ?ÀÓHˆKØ×7Ñ7¸Ô@Ø×3Ñ3°GÔIØ×.Ñ.¨wÕ7Ø×/Ñ/°×8Ñ8Ø×4Ñ4°WÔ=Ø×'Ñ'¨°Ô?Ø×9Ñ9¸$¿,¹,ÓGˆJØ×'Ñ'¨Õ<ð	 9r„   c                 ó    • SUR                   ;   $ )Nrê  r(  r÷   s     r‚   rœ  Ú6S3ControlEndpointSetter._use_endpoint_from_arn_details}
  s   € Ø §¡Ñ/Ð/r„   c                 ó    • SUR                   ;   $ )NÚ
outpost_idr(  r÷   s     r‚   r¢  Ú5S3ControlEndpointSetter._use_endpoint_from_outpost_id€
  s   € Ø˜wŸ™Ñ.Ð.r„   c                 ó2  • SUR                   S   S   ;   a  [        UR                   S   S   SS9eU R                  R                  SS5      (       d=  UR                   S   S   nX R                  :w  a  S	U S
U R                   S3n[        US9eUR                   S   S   nX@R                  :w  a  [        SU R                   SU S3S9eU R                  R                  S5      (       a	  [        SS9eSUR                   S   ;   a  U R                  U5        g g )Nr+  rê  rÜ   rÛ  r,  ©rÌ  r  r-  FzCThe use_arn_region configuration is disabled but received arn for "z(" when the client is configured to use "r  r  rÈ  r4  z&" partition, but arn provided is for "z;" partition. The client and arn partition must be the same.r|  ú7S3 control client does not support accelerate endpointsrù  )rÞ   r5   r  r™   r  r6   r  r£  )rø   rö   Ú
arn_regionrV  Úrequest_partions        r‚   r�  ÚES3ControlEndpointSetter._validate_endpoint_from_arn_details_supportedƒ
  s;  € Ø�W—_‘_ ]Ñ3°HÑ=Ó=Ü.Ø—O‘O MÑ2°:Ñ>ØBñð ð �‰×"Ñ"Ð#3°U×;Ñ;Ø Ÿ™¨Ñ7¸ÑAˆJØŸ\™\Ó)ð)Ø)3¨ð 5Ø#Ÿ|™|˜n¨Að/ð ô
 =ÀÑKÐKØ!Ÿ/™/¨-Ñ8¸ÑEˆØŸo™oÓ-Ü8à0°·±Ð0Að B(Ø(7Ð'8ð 96ð6ñð ð �?‰?×ÑÐ8×9Ñ9Ü8ØMñð ð ˜WŸ_™_¨]Ñ;Ó;Ø×4Ñ4°WÕ=ð <r„   c                 óV   • U R                   R                  S5      (       a	  [        SS9eg )Nr5  zPClient does not support s3 dualstack configuration when an outpost is specified.r  )r  r™   r6   r÷   s     r‚   r£  Ú;S3ControlEndpointSetter._validate_outpost_redirection_valid¢
  s/   € Ø�?‰?×ÑÐ7×8Ñ8Ü8ð4ñð ð 9r„   c                 ó¦   • U R                   R                  SS5      (       a%  UR                  S   S   nU R                  X5        U$ U R                  $ )Nr-  Frê  rÜ   )r  r™   rÞ   r>  r  )rø   rö   r°  s      r‚   rž  Ú8S3ControlEndpointSetter._resolve_region_from_arn_details«
  sM   € Ø�?‰?×ÑÐ/°×7Ñ7Ø Ÿ™¨Ñ7¸ÑAˆJð ×)Ñ)¨'Ô>ØÐØ�|‰|Ðr„   c                 óL   • UR                   S   S   nU R                  X5        U$ )Nrê  rÉ  rD  )rø   rö   Úarn_services      r‚   rŸ  Ú>S3ControlEndpointSetter._resolve_signing_name_from_arn_details´
  s)   € Ø—o‘o mÑ4°YÑ?ˆØ×#Ñ# GÔ9ØÐr„   c                 óH   • U R                  X5      nU R                  X5        g rô   )Ú _resolve_netloc_from_arn_detailsr¥  )rø   rö   r�  r¦  s       r‚   r   Ú:S3ControlEndpointSetter._resolve_endpoint_from_arn_details¹
  s%   € Ø×:Ñ:Øó
ˆ
ð 	×#Ñ# GÕ8r„   c                 óØ   • [        UR                  5      n[        UR                  UUR                  UR
                  S45      n[        R                  SUR                  U5        XAl        g rå  )r   rÃ   r   r¥  r¸   rx   r  r#  )rø   rö   r¦  rJ  Úarn_details_endpoints        r‚   r¥  Ú.S3ControlEndpointSetter._update_request_netloc¿
  sc   € Ü& w§{¡{Ó3ÐÜ)à#×*Ñ*ØØ#×(Ñ(Ø#×)Ñ)Øðó 
Ðô 	�‰Ø(¨'¯+©+Ð7Kô	
ð +�r„   c                 óz   • UR                   S   nSU;   a  U R                  U5      $ US   nU R                  X$5      $ )Nrê  rù  rÊ  )rÞ   r¤  Ú_construct_s3_control_endpoint)rø   rö   r�  rê  rÊ  s        r‚   r»  Ú8S3ControlEndpointSetter._resolve_netloc_from_arn_detailsÏ
  sD   € Ø—o‘o mÑ4ˆØ˜[Ó(Ø×3Ñ3°KÓ@Ð@Ø˜iÑ(ˆØ×2Ñ2°;ÓHÐHr„   c                 ó8   • U R                   R                  U5      $ rô   )Ú_HOST_LABEL_REGEXr~  )rø   Úlabels     r‚   Ú_is_valid_host_labelÚ,S3ControlEndpointSetter._is_valid_host_labelÖ
  s   € Ø×%Ñ%×+Ñ+¨EÓ2Ð2r„   c                 óT   • U H"  nU R                  U5      (       a  M  [        US9e   g )N)rÅ  )rÆ  r)   )rø   ÚlabelsrÅ  s      r‚   Ú_validate_host_labelsÚ-S3ControlEndpointSetter._validate_host_labelsÙ
  s(   € ÛˆEØ×,Ñ,¨U×3Ó3Ü+°%Ñ8Ð8ò r„   c                 ó  • U R                  X5        U R                  (       a#  [        U R                  5      R                  nX#/nO8US/nU R	                  U5        U R                  U5      nUR                  X/5        U R                  U5      $ )Nú
s3-control)rÊ  r  r   r£  Ú_add_dualstackrY  rÖ  Ú_construct_netloc)rø   r�  rÊ  rT  r£  ri  s         r‚   rÁ  Ú6S3ControlEndpointSetter._construct_s3_control_endpointÞ
  s‡   € Ø×"Ñ" ;Ô8Ø××Ü"*¨4×+=Ñ+=Ó">×"EÑ"EÐØÐ3‰Fð ØðˆFð ×Ñ Ô'Ø×-Ñ-¨kÓ:ˆJØ�M‰M˜;Ð3Ô4Ø×%Ñ% fÓ-Ð-r„   c                 óð   • U R                  U5        U R                  (       a  [        U R                  5      R                  $ SUU R	                  U5      /nU R                  U5        U R                  U5      $ r›  )rÊ  r  r   r£  rY  Ú	_add_fipsrÏ  )rø   r�  r£  s      r‚   r¤  Ú3S3ControlEndpointSetter._construct_outpost_endpointí
  sl   € Ø×"Ñ" ;Ô/Ø××Ü˜D×.Ñ.Ó/×6Ñ6Ð6ð ØØ×$Ñ$ [Ó1ðˆFð
 �N‰N˜6Ô"Ø×%Ñ% fÓ-Ð-r„   c                 ó$   • SR                  U5      $ )Nr½   )rÂ   ©rø   r£  s     r‚   rÏ  Ú)S3ControlEndpointSetter._construct_netlocú
  s   € Ø�x‰x˜ÓÐr„   c                 ó>   • U R                   (       a  US   S-   US'   g g )Nr   r_  r`  rÕ  s     r‚   rÒ  Ú!S3ControlEndpointSetter._add_fipsý
  s"   € Ø×"×"Ø˜q™	 GÑ+ˆF�1ŠIð #r„   c                 óh   • U R                   R                  S5      (       a  UR                  S5        g g )Nr5  r=   )r  r™   rÁ   rÕ  s     r‚   rÎ  Ú&S3ControlEndpointSetter._add_dualstack  s)   € Ø�?‰?×ÑÐ7×8Ñ8Ø�M‰M˜+Õ&ð 9r„   c                 óz   • U R                   R                  SU5      nU R                  nU(       a  SU;   a  US   nU$ rl  rn  ro  s       r‚   rY  Ú'S3ControlEndpointSetter._get_dns_suffix  rq  r„   c                 ó`   • UR                   R                  S0 5      nX#S'   X1R                   S'   g rs  rt  ru  s       r‚   r>  Ú0S3ControlEndpointSetter._override_signing_region  rw  r„   c                 ó`   • UR                   R                  S0 5      nX#S'   X1R                   S'   g ry  rt  )rø   rö   rM  rR  s       r‚   r  Ú.S3ControlEndpointSetter._override_signing_name  s.   € Ø!Ÿ/™/×-Ñ-¨i¸Ó<ˆð
 +7˜Ñ'Ø%4�‰˜	Ò"r„   c                 óv   • UR                   S   nUR                  S5      nU(       a  U R                  X5        g g )Nrê  rù  )rÞ   r™   Ú_add_outpost_id_header)rø   rö   rê  rù  s       r‚   r¡  Ú5S3ControlEndpointSetter._add_headers_from_arn_details   s4   € Ø—o‘o mÑ4ˆØ"—‘ ~Ó6ˆÞØ×'Ñ'¨Õ>ð r„   c                 ó    • X!R                   S'   g )Nzx-amz-outpost-id)r£   )rø   rö   rù  s      r‚   râ  Ú.S3ControlEndpointSetter._add_outpost_id_header&  s   € Ø.:�‰Ð*Ò+r„   r’  r“  )"rë   rì   rí   rî   r  rg  r¯   r†  rÄ  rù   r<  r  rœ  r¢  r�  r£  rž  rŸ  r   r¥  r»  rÆ  rÊ  rÁ  r¤  rÏ  rÒ  rÎ  rY  r>  r  r¡  râ  rð   rŠ   r„   r‚   r•  r•  T
  s©   † ØÐØ)ÐØŸ
š
Ð#;Ó<Ðð
 ØØØØô6ò(Lò=ò0ò/ò>ò>òòò
9ò+ò Iò3ò9ò
.ò.ò ò,ò'òò5ò5ò?õ;r„   r•  c                   óŽ   • \ rS rSrSr\R                  " S5      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g)ÚS3ControlArnParamHandleri*  zƒThis handler has been replaced by S3ControlArnParamHandlerv2. The
original version remains in place for any third-party importers.
z[/:]Nc                 óf   • Xl         Uc  [        5       U l         [        R                  " S[        S9  g )NzŠThe S3ControlArnParamHandler class has been deprecated for a new internal replacement. A future version of botocore may remove this class.r§  )rØ  r|  rª  r«  r¬  rÙ  s     r‚   rù   Ú!S3ControlArnParamHandler.__init__1  s.   € Ø%ÔØÑÜ(›{ˆDÔÜ�Šðô #ó		
r„   c                 ó<   • UR                  SU R                  5        g )Nz!before-parameter-build.s3-controlrÝ  rß  s     r‚   r<  Ú!S3ControlArnParamHandler.register<  s   € Ø×ÑØ/Ø�O‰Oõ	
r„   c                 ó’   • UR                   S;   a  U R                  XU5        g U R                  XU5        U R                  XU5        g )N)rÓ  ÚListRegionalBuckets)r²   Ú_handle_outpost_id_paramÚ_handle_name_paramÚ_handle_bucket_param)rø   rJ  ré  rÞ   rå   s        r‚   rÞ  Ú#S3ControlArnParamHandler.handle_arnB  sA   € Ø�:‰:Ð@Ó@ð ×)Ñ)¨&¸ÕAà×#Ñ# F°7Ô;Ø×%Ñ% f°WÕ=r„   c                 ó¢   • X!;  a  g  X   nU R                   R                  U5      nX4S'   U R                  U5      US'   U$ ! [         a     g f = f)NrÛ  Ú	resources)rØ  rÎ  Ú_split_resourcerÁ  )rø   rJ  rÝ  rÌ  rê  s        r‚   Ú_get_arn_details_from_paramÚ4S3ControlArnParamHandler._get_arn_details_from_paramL  sc   € ØÓ#Øð	ØÑ$ˆCØ×*Ñ*×4Ñ4°SÓ9ˆKØ&)˜
Ñ#Ø'+×';Ñ';¸KÓ'HˆK˜Ñ$ØÐøÜ"ó 	Ùð	ús   ˆ8A Á
AÁAc                 ó>   • U R                   R                  US   5      $ )NrË  )Ú_RESOURCE_SPLIT_REGEXr¿   )rø   rê  s     r‚   rô  Ú(S3ControlArnParamHandler._split_resourceX  s   € Ø×)Ñ)×/Ñ/°¸JÑ0GÓHÐHr„   c                 óv   • US   nSU;   a*  US   U:w  a!  SR                  US   5      n[        US   US9eX1S'   g )NrÊ  Ú	AccountIdzGAccount ID in arn does not match the AccountId parameter provided: "{}"rÛ  r®  )r  r5   )rø   rJ  rê  Ú
account_idrV  s        r‚   Ú_override_account_id_paramÚ3S3ControlArnParamHandler._override_account_id_param[  s]   € Ø  Ñ+ˆ
Ø˜&Ó  V¨KÑ%8¸JÓ%Fð!ç‰f�V˜KÑ(Ó)ð ô /Ø 
Ñ+Øñð ð )ˆ{Òr„   c                 ó"   • SU;  a  g US   US'   g )NÚ	OutpostIdr«  rŠ   )rø   rJ  ré  rÞ   s       r‚   rî  Ú1S3ControlArnParamHandler._handle_outpost_id_paramh  s   € Ø˜fÓ$ØØ & {Ñ 3ˆ�Òr„   c                 óÀ   • UR                   S:X  a  g U R                  US5      nUc  g U R                  U5      (       a  U R                  XU5        g Sn[	        US   US9e©NÚCreateAccessPointÚNamez4The Name parameter does not support the provided ARNrÛ  r®  )r²   rõ  Ú_is_outpost_accesspointÚ_store_outpost_accesspointr5   ©rø   rJ  ré  rÞ   rê  rV  s         r‚   rï  Ú+S3ControlArnParamHandler._handle_name_paramm  sk   € à�:‰:Ð,Ó,ØØ×6Ñ6°v¸vÓFˆØÑØØ×'Ñ'¨×4Ñ4Ø×+Ñ+¨F¸[ÕIàNˆIÜ.Ø 
Ñ+Øñð r„   c                 ón   • US   S:w  a  gUS   n[        U5      S:w  a  gUS   S:H  =(       a    US   S	:H  $ )
NrÉ  rW  Fró  rÇ  r   rä  r   rã  ©rÓ   ©rø   rê  ró  s      r‚   r  Ú0S3ControlArnParamHandler._is_outpost_accesspoint}  sH   € Ø�yÑ! ]Ó2ØØ Ñ,ˆ	Üˆy‹>˜QÓØà˜‰|˜yÑ(×J¨Y°q©\¸]Ñ-JÐJr„   c                 ód   • U R                  X5        US   S   nXAS'   XCS'   US   S   US'   X2S'   g )Nró  r’  r  rø  r:   rù  rê  ©rý  )rø   rJ  rÞ   rê  rø  s        r‚   r  Ú3S3ControlArnParamHandler._store_outpost_accesspoint†  sL   € Ø×'Ñ'¨Ô<Ø& {Ñ3°AÑ6ÐØ)ˆv‰Ø*:Ð&Ñ'Ø&1°+Ñ&>¸qÑ&Aˆ�NÑ#Ø!,�Òr„   c                 óž   • U R                  US5      nUc  g U R                  U5      (       a  U R                  XU5        g Sn[        US   US9e©Nr  z6The Bucket parameter does not support the provided ARNrÛ  r®  )rõ  Ú_is_outpost_bucketÚ_store_outpost_bucketr5   r  s         r‚   rð  Ú-S3ControlArnParamHandler._handle_bucket_paramŽ  sc   € Ø×6Ñ6°v¸xÓHˆØÑØØ×"Ñ" ;×/Ñ/Ø×&Ñ& v¸ÕDð Ið ô /Ø 
Ñ+Øñð r„   c                 ón   • US   S:w  a  gUS   n[        U5      S:w  a  gUS   S:H  =(       a    US   S	:H  $ )
NrÉ  rW  Fró  rÇ  r   rä  r   r  r  r  s      r‚   r  Ú+S3ControlArnParamHandler._is_outpost_bucket�  sH   € Ø�yÑ! ]Ó2ØØ Ñ,ˆ	Üˆy‹>˜QÓØà˜‰|˜yÑ(×E¨Y°q©\¸XÑ-EÐEr„   c                 ód   • U R                  X5        US   S   nXAS'   XCS'   US   S   US'   X2S'   g )Nró  r’  r  r–  r:   rù  rê  r  )rø   rJ  rÞ   rê  r–  s        r‚   r  Ú.S3ControlArnParamHandler._store_outpost_bucket¦  sK   € Ø×'Ñ'¨Ô<Ø! +Ñ.¨qÑ1ˆØ&ˆxÑØ%0�MÑ"Ø&1°+Ñ&>¸qÑ&Aˆ�NÑ#Ø!,�Òr„   rü  rô   )rë   rì   rí   rî   rï   r¯   r†  rø  rù   r<  rÞ  rõ  rô  rý  rî  rï  r  r  rð  r  r  rð   rŠ   r„   r‚   rç  rç  *  s\   † ñð ŸJšJ wÓ/Ðô	
ò
ò>ò
òIò)ò4ò
ò Kò-òòFõ-r„   rç  c                   óL   • \ 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g)ÚS3ControlArnParamHandlerv2i¯  a  Updated version of S3ControlArnParamHandler for use when
EndpointRulesetResolver is in use for endpoint resolution.

This class is considered private and subject to abrupt breaking changes or
removal without prior announcement. Please do not use it directly.
Nc                 ó6   • Xl         Uc  [        5       U l         g g rô   r×  rÙ  s     r‚   rù   Ú#S3ControlArnParamHandlerv2.__init__·  rÛ  r„   c                 ó<   • UR                  SU R                  5        g )Nz%before-endpoint-resolution.s3-controlrÝ  rß  s     r‚   r<  Ú#S3ControlArnParamHandlerv2.register¼  s   € Ø×ÑØ3Ø�O‰Oõ	
r„   c                 ó  • UR                   S:X  a  g U R                  US5      nUc  g U R                  U5        U R                  U5        U R	                  U5      (       a  U R                  XU5        g Sn[        US   US9er  )r²   rõ  Ú_raise_for_fips_pseudo_regionÚ_raise_for_accelerate_endpointr  r  r5   r  s         r‚   rï  Ú-S3ControlArnParamHandlerv2._handle_name_paramÂ  s‡   € à�:‰:Ð,Ó,ØØ×6Ñ6°v¸vÓFˆØÑØØ×*Ñ*¨;Ô7Ø×+Ñ+¨GÔ4Ø×'Ñ'¨×4Ñ4Ø×+Ñ+¨F¸[ÕIàNˆIÜ.Ø 
Ñ+Øñð r„   c                 ó&   • U R                  X5        g rô   r  rõ  s       r‚   r  Ú5S3ControlArnParamHandlerv2._store_outpost_accesspointÔ  ó   € Ø×'Ñ'¨Õ<r„   c                 óâ   • U R                  US5      nUc  g U R                  U5        U R                  U5        U R                  U5      (       a  U R	                  XU5        g Sn[        US   US9er  )rõ  r!  r"  r  r  r5   r  s         r‚   rð  Ú/S3ControlArnParamHandlerv2._handle_bucket_param×  s   € Ø×6Ñ6°v¸xÓHˆØÑØØ×*Ñ*¨;Ô7Ø×+Ñ+¨GÔ4Ø×"Ñ" ;×/Ñ/Ø×&Ñ& v¸ÕDð Ið ô /Ø 
Ñ+Øñð r„   c                 ó&   • U R                  X5        g rô   r  rõ  s       r‚   r  Ú0S3ControlArnParamHandlerv2._store_outpost_bucketè  r&  r„   c                 ó€   • US   nUR                  S5      (       d  UR                  S5      (       a  [        US   SS9eg )NrÜ   zfips-rÛ  r,  r®  )rP  r*  r5   )rø   rê  r°  s      r‚   r!  Ú8S3ControlArnParamHandlerv2._raise_for_fips_pseudo_regionë  sK   € à  Ñ*ˆ
Ø× Ñ  ×)Ñ)¨Z×-@Ñ-@À×-IÑ-IÜ.Ø 
Ñ+ØBñð ð .Jr„   c                 ór   • US   R                   =(       d    0 nUR                  S5      (       a	  [        SS9eg )NÚclient_configr|  r¯  r  )r²  r™   r6   )rø   rÞ   r
  s      r‚   r"  Ú9S3ControlArnParamHandlerv2._raise_for_accelerate_endpointô  s<   € Ø˜OÑ,×/Ñ/×5°2ˆ	Ø�=‰=Ð2×3Ñ3Ü8ØMñð ð 4r„   rü  rô   )rë   rì   rí   rî   rï   rù   r<  rï  r  rð  r  r!  r"  rð   rŠ   r„   r‚   r  r  ¯  s/   † ñô+ò

òò$=òò"=òõr„   r  c                   óŠ   • \ rS rSrSrSrSrSr\SSS/rS	\	R                  4S
 jrSS jrS rS rS rS rSS jrS rS rSrg	)ÚContainerMetadataFetcheriü  r   r’  r:   z169.254.170.2z169.254.170.23zfd00:ec2::23Ú	localhostNc                 óp   • Uc'  [         R                  R                  U R                  S9nXl        X l        g )N)r  )rž   r  r  ÚTIMEOUT_SECONDSr  Ú_sleep)rø   r�   Úsleeps      r‚   rù   Ú!ContainerMetadataFetcher.__init__  s7   € Ø‰?Ü×*Ñ*×9Ñ9Ø×,Ñ,ð :ð ˆGð  ŒØ�r„   c                 óF   • U R                  U5        U R                  X5      $ )zÌRetrieve JSON metadata from container metadata.

:type full_url: str
:param full_url: The full URL of the metadata service.
    This should include the scheme as well, e.g
    "http://localhost:123/foo"

)Ú_validate_allowed_urlÚ_retrieve_credentials)rø   Úfull_urlr£   s      r‚   Úretrieve_full_uriÚ*ContainerMetadataFetcher.retrieve_full_uri  s#   € ð 	×"Ñ" 8Ô,Ø×)Ñ)¨(Ó<Ð<r„   c                 óR  • [         R                  R                  U5      nUR                  S:X  a  g U R	                  UR
                  5      (       a  g U R                  UR
                  5      nU(       d4  [        SUR
                   SSR                  U R                  5       35      eg )NÚhttpszUnsupported host 'zN'.  Can only retrieve metadata from a loopback address or one of these hosts: z, )
rž   Úcompatr   r¥  Ú_is_loopback_addressr}  Ú_check_if_whitelisted_hostr�  rÂ   Ú_ALLOWED_HOSTS)rø   r;  ÚparsedÚis_whitelisted_hosts       r‚   r9  Ú.ContainerMetadataFetcher._validate_allowed_url  s”   € Ü—‘×)Ñ)¨(Ó3ˆà�=‰=˜GÓ#ØØ×$Ñ$ V§_¡_×5Ñ5ØØ"×=Ñ=¸f¿o¹oÓNÐÞ"ÜØ$ V§_¡_Ð$5ð 6BØBFÇ)Á)ÈD×L_ÑL_ÓB`ÐAaðcóð ð #r„   c                 óR   •  [        U5      nUR                  $ ! [         a     gf = f)NF)r   Úis_loopbackr�  )rø   r}  Úips      r‚   rA  Ú-ContainerMetadataFetcher._is_loopback_address*  s-   € ð	Ü˜HÓ%ˆBØ—>‘>Ð!øÜó 	Ùð	ús   ‚ ™
&¥&c                 ó$   • XR                   ;   a  gg)NTF)rC  )rø   r¨  s     r‚   rB  Ú3ContainerMetadataFetcher._check_if_whitelisted_host1  s   € Ø×&Ñ&Ó&ØØr„   c                 óF   • U R                  U5      nU R                  U5      $ )z©Retrieve JSON metadata from container metadata.

:type relative_uri: str
:param relative_uri: A relative URI, e.g "/foo/bar?id=123"

:return: The parsed JSON response.

)r;  r:  )rø   Úrelative_urir;  s      r‚   Úretrieve_uriÚ%ContainerMetadataFetcher.retrieve_uri6  s#   € ð —=‘= Ó.ˆØ×)Ñ)¨(Ó3Ð3r„   c                 ó.  • SS0nUb  UR                  U5        Sn  U R                  XU R                  5      $ ! [         aO  n[        R                  SUSS9  U R                  U R                  5        US-  nX@R                  :¼  a  e  S nAOS nAff = fM{  )NÚAcceptzapplication/jsonr   TzAReceived error when attempting to retrieve container metadata: %sr4  r:   )	r,  Ú_get_responser4  r-   r  r#  r5  Ú
SLEEP_TIMEÚRETRY_ATTEMPTS)rø   r;  Úextra_headersr£   ÚattemptsrD  s         r‚   r:  Ú.ContainerMetadataFetcher._retrieve_credentialsB  s¬   € ØÐ/Ð0ˆØÑ$Ø�N‰N˜=Ô)ØˆØðØ×)Ñ)Ø t×';Ñ';óð øô *ó 
Ü—‘ð-àØ!ð	 ñ ð —‘˜DŸO™OÔ,Ø˜A‘�Ø×2Ñ2Ó2Øô 3ûð
úñ s   �9 ¹
BÁABÂBc                 óì  •  [         R                  R                  nU" SXS9nU R                  R	                  UR                  5       5      nUR                  R                  S5      nUR                  S:w  a  [        SUR                   SU 3S9e [        R                  " U5      $ ! [         a"    Sn[        R                  S	X‡5        [        US9ef = f! [         a  n	S
U	 3n[        US9eS n	A	ff = f)NrH  r0  r÷  r2  zReceived non 200 response z from container metadata: rU  z>Unable to parse JSON returned from container metadata servicesz%s:%sz?Received error when attempting to retrieve container metadata: )rž   rŸ   r;  r  r=  r>  re  r;  r?  r-   r   r‹  r�  r  r#  rA  )
rø   r;  r£   r  r;  rö   rC  Úresponse_textrV  rD  s
             r‚   rS  Ú&ContainerMetadataFetcher._get_responseX  s  € ð	>Ü!×,Ñ,×7Ñ7ˆJÙ ¨°8ÑMˆGØ—}‘}×)Ñ)¨'¯/©/Ó*;Ó<ˆHØ$×,Ñ,×3Ñ3°GÓ<ˆMØ×#Ñ# sÓ*Ü,à4°X×5IÑ5IÐ4Jð K4Ø4A°?ðDñð ðBÜ—z’z -Ó0Ð0øÜó BØ\�	Ü—‘˜W iÔ?Ü,°yÑAÐAðBûô %ó 	>ð'Ø'( cð+ð ô )°9Ñ=Ð=ûð	>ús*   ‚BC ÂB' Â',CÃC Ã
C3Ã C.Ã.C3c                 ó$   • SU R                    U 3$ )Nzhttp://)Ú
IP_ADDRESS)rø   rN  s     r‚   r;  Ú!ContainerMetadataFetcher.full_urlr  s   € Ø˜Ÿ™Ð)¨,¨Ð8Ð8r„   )r  r5  rô   )rë   rì   rí   rî   r4  rU  rT  r]  rC  Útimer6  rù   r<  r9  rA  rB  rO  r:  rS  r;  rð   rŠ   r„   r‚   r1  r1  ü  sa   † Ø€OØ€NØ€JØ €JàØØØð	€Nð  $¨4¯:©:ô ô
=òòòò

4ôò,>õ49r„   r1  c                 ó:   • [        U 5      (       a  0 $ [        5       $ rô   )Úshould_bypass_proxiesr   ©rÃ   s    r‚   r  r  v  s   € Ü˜S×!Ñ!Øˆ	ä‹|Ðr„   c                 ó�   •  [        [        U 5      R                  5      (       a  g g! [        [        R
                  4 a     gf = f)z2
Returns whether we should bypass proxies or not.
TF)r   r   r£  r	  ÚsocketÚgaierrorrb  s    r‚   ra  ra  }  sI   € ðÜœ ›×,Ñ,×-Ñ-Øð .ð
 øô ”v—‘Ð'ó Øàðús   ‚#( ¨AÁAc                 ó`  • U (       d  g [        U 5      $ ! [        [        4 a     Of = f[        U S5      (       as  [        U S5      (       ab   U R	                  5       nU R                  SS5        U R	                  5       nU R                  U5        X!-
  $ ! [        R                   a     g f = fg )Nr   ÚseekÚtellr   )rÓ   ÚAttributeErrorr	  r˜   rh  rg  ÚioÚUnsupportedOperation)r&  Úorig_posÚend_file_poss      r‚   Údetermine_content_lengthrn  ’  s¨   € æØðÜ�4‹yÐøÜœIÐ&ó Ùðúô ˆt�V×Ñ¤¨¨v×!6Ñ!6ð	Ø—y‘y“{ˆHØ�I‰I�a˜ŒOØŸ9™9›;ˆLØ�I‰I�hÔØÑ*Ð*øÜ×&Ñ&ó 	ð
 àð	úð s   Š
 •(§(ÁAB ÂB,Â+B,c                 ó¶   • U R                  S5      nU(       d  g[        R                  R                  5       nX#S'   UR	                  S5      nUb  U$ SU;   a  U$ g)z¢Returns encodings from given HTTP Header Dict.

:param headers: dictionary to extract encoding from.
:param default: default encoding if the content-type is text
zcontent-typeNÚcharsetr@  )r™   rY   Úmessagerz  Ú	get_param)r£   ÚdefaultÚcontent_typerq  rp  s        r‚   Úget_encoding_from_headersru  ¯  s_   € ð —;‘;˜~Ó.€LæØä�m‰m×#Ñ#Ó%€GØ*ˆNÑØ×Ñ 	Ó*€GàÑØˆà�ÓØˆð r„   c                 ó°   • [        U [        [        45      (       a  [        U 5      nO[	        U 5      n[
        R                  " U5      R                  S5      $ )úKThis function has been deprecated, but is kept for backwards compatibility.r7  )r|   rø  Ú	bytearrayÚ_calculate_md5_from_bytesÚ_calculate_md5_from_fileÚbase64Ú	b64encoder;  )r&  rå   Ú
binary_md5s      r‚   Úcalculate_md5r~  Æ  sD   € ä�$œ¤	Ð*×+Ñ+Ü.¨tÓ4‰
ä-¨dÓ3ˆ
Ü×Ò˜JÓ'×.Ñ.¨wÓ7Ð7r„   c                 ó6   • [        U SS9nUR                  5       $ )rw  F©Úusedforsecurity)r   r.  )Ú
body_bytesÚmd5s     r‚   ry  ry  Ï  s   € ä
�*¨eÑ
4€CØ�:‰:‹<Ðr„   c                 óÈ   ^ • T R                  5       n[        SS9n[        U 4S jS5       H  nUR                  U5        M     T R	                  U5        UR                  5       $ )rw  Fr€  c                  ó&   >• T R                  S5      $ r#  r%  )Úfileobjs   €r‚   r'  Ú*_calculate_md5_from_file.<locals>.<lambda>Ù  s   ø€ ˜gŸl™l¨;Ô7r„   r„   )rh  r   r+  r,  rg  r.  )r†  Ústart_positionrƒ  r1  s   `   r‚   rz  rz  Õ  sN   ø€ à—\‘\“^€NÜ
 %Ñ
(€CÜÔ7¸Ö=ˆØ�
‰
�5Öñ >à‡L�L�Ô Ø�:‰:‹<Ðr„   c                 ón   • U R                  S0 5      R                  S0 5      nUR                  S5      S:H  $ )NrÞ   rD  rE  rG  rÝ   )rJ  rD  s     r‚   Ú_is_s3express_requestrŠ  ß  s;   € Ø Ÿ*™* Y°Ó3×7Ñ7Ø˜róÐð ×"Ñ" 9Ó-°Ñ<Ð<r„   c                 ó„   • U S   n/ nU H2  n[         R                  U5      nU(       d  M!  UR                  U5        M4     U$ )a  
Returns the a list of header names from the request which start with
"x-amz-checksum-", otherwise returns an empty list.

This function is considered private and subject to abrupt breaking changes or
removal without prior announcement. Please do not use it directly.
r£   )ÚCHECKSUM_HEADER_PATTERNr~  rÁ   )rJ  r£   Úchecksum_headersr–   r~  s        r‚   Úget_checksum_algorithm_headersrŽ  æ  sK   € ð �YÑ€GØÐó ˆÜ'×-Ñ-¨fÓ5ˆßˆ5Ø×#Ñ# FÖ+ñ ð Ðr„   c                 ó*   • [        [        U 5      5      $ )zà
Checks if a header starting with "x-amz-checksum-" is provided in a request.

This function is considered private and subject to abrupt breaking changes or
removal without prior announcement. Please do not use it directly.
)r}   rŽ  )rJ  s    r‚   Úhas_checksum_headerr�  ú  s   € ô Ô.¨vÓ6Ó7Ð7r„   c                 óV   • [        U 5      (       d  [        U 40 UD6  [        U 40 UD6  gg)rw  N)r�  Úconditionally_calculate_md5Úconditionally_enable_crc32)rJ  rå   s     r‚   Ú conditionally_calculate_checksumr”    s,   € ä˜v×&Ñ&Ü# FÑ5¨fÒ5Ü" 6Ñ4¨VÓ4ð 'r„   c                 óÄ   • U R                  S0 5      R                  S0 5      nUR                  S5      n[        U 5      (       a  U S   b  US;   a  SSSS	S
.0U S   S'   gggg)rw  rÞ   r0  Úrequest_algorithmr&  N)Núconditional-md5Úcrc32r–   zx-amz-checksum-crc32)Ú	algorithmÚinr²   )r™   rŠ  )rJ  rå   Úchecksum_contextÚchecksum_algorithms       r‚   r“  r“    sƒ   € à—z‘z )¨RÓ0×4Ñ4°ZÀÓDÐØ)×-Ñ-Ð.AÓBÐä˜f×%Ñ%Ø�6‰NÑ&ØÐ";Ó;ð  Ø$ØØ.ñ"ð)
ˆˆyÑ˜*Ò%ð <ð 'ð 	&r„   c                 ó  • U S   nU R                  S0 5      R                  S0 5      nUR                  S5      nU(       a  US:w  a  g[        U 5      (       a  g[        U 5      (       a  g[        (       a  Ub  [	        U40 UD6nXPS   S'   ggg)	zOnly add a Content-MD5 if the system supports it.

This function has been deprecated, but is kept for backwards compatibility.
r&  rÞ   r0  r–  r—  Nr£   zContent-MD5)r™   r�  rŠ  r   r~  )rJ  rå   r&  r›  rœ  Ú
md5_digests         r‚   r’  r’    s•   € ð
 �&‰>€DØ—z‘z )¨RÓ0×4Ñ4°ZÀÓDÐØ)×-Ñ-Ð.AÓBÐÞÐ0Ð4EÓEàä˜6×"Ñ"àä˜V×$Ñ$àç‚}˜Ñ)Ü" 4Ñ2¨6Ñ2ˆ
Ø+5ˆyÑ˜-Ò(ð *€}r„   c                   ó&   • \ rS rSr\4S jrS rSrg)ÚFileWebIdentityTokenLoaderi6  c                 ó   • Xl         X l        g rô   )Ú_web_identity_token_pathrâ  )rø   Úweb_identity_token_pathrâ  s      r‚   rù   Ú#FileWebIdentityTokenLoader.__init__7  s   € Ø(?Ô%Ø�
r„   c                 óŽ   • U R                  U R                  5       nUR                  5       sS S S 5        $ ! , (       d  f       g = frô   )râ  r¢  rÞ  )rø   Ú
token_files     r‚   Ú__call__Ú#FileWebIdentityTokenLoader.__call__;  s,   € Ø�Z‰Z˜×5Ñ5Ô6¸*Ø—?‘?Ó$÷ 7×6×6ús	   œ6¶
A)râ  r¢  N)rë   rì   rí   rî   Úopenrù   r§  rð   rŠ   r„   r‚   r   r   6  s   † Ø6:ô õ%r„   r   c                   ó8   • \ rS rSrSS jrS rSS jrSS jrSrg)	ÚSSOTokenLoaderi@  Nc                 ó   • Uc  0 nXl         g rô   ©r5  ©rø   r6  s     r‚   rù   ÚSSOTokenLoader.__init__A  ó   € Ø‰=ØˆEØ�r„   c                 óv   • UnUb  Un[         R                  " UR                  S5      5      R                  5       $ ©Nr÷  )r)  Úsha1rù  r-  )rø   Ú	start_urlÚsession_namerú  s       r‚   Ú_generate_cache_keyÚ"SSOTokenLoader._generate_cache_keyF  s5   € Øˆ	ØÑ#Ø$ˆIÜ�|Š|˜I×,Ñ,¨WÓ5Ó6×@Ñ@ÓBÐBr„   c                 óB   • U R                  X5      nX R                  U'   g rô   )r¶  r5  )rø   r´  rç   rµ  r²  s        r‚   Ú
save_tokenÚSSOTokenLoader.save_tokenL  s   € Ø×,Ñ,¨YÓEˆ	Ø!&�‰�IÒr„   c                 óò   • U R                  X5      n[        R                  SU5        X0R                  ;  a  UnUb  UnSU S3n[	        US9eU R                  U   nSU;  d  SU;  a  SU S3n[	        US9eU$ )Nz Checking for cached token at: %sz
Token for z does not existrU  ÚaccessTokenÚ	expiresAtz is invalid)r¶  r  r#  r5  r0   )rø   r´  rµ  r²  r²   rV  rç   s          r‚   r§  ÚSSOTokenLoader.__call__P  s�   € Ø×,Ñ,¨YÓEˆ	Ü�‰Ð7¸ÔCØŸK™KÓ'ØˆDØÑ'Ø#�Ø$ T F¨/Ð:ˆIÜ#¨iÑ8Ð8à—‘˜IÑ&ˆØ Ó%¨¸EÓ)AØ$ Y K¨{Ð;ˆIÜ#¨iÑ8Ð8Øˆr„   r­  rô   )	rë   rì   rí   rî   rù   r¶  r¹  r§  rð   rŠ   r„   r‚   r«  r«  @  s   † ôò
Cô'÷r„   r«  c                   óB   • \ rS rSrSrSrSS jrS rS rS r	SS	 jr
S
rg)ÚEventbridgeSignerSetteria  rÿ  rÑ  Nc                 ó(   • Xl         X l        X0l        g rô   )r©  r  r  )rø   r	  rÜ   r€  s       r‚   rù   Ú EventbridgeSignerSetter.__init__e  s   € Ø"3ÔØŒØ)Õr„   c                 ót   • UR                  SU R                  5        UR                  SU R                  5        g )Nz'before-parameter-build.events.PutEventszbefore-call.events.PutEvents)r<  Úcheck_for_global_endpointÚset_endpoint_urlrß  s     r‚   r<  Ú EventbridgeSignerSetter.registerj  s7   € Ø×ÑØ5Ø×*Ñ*ô	
ð 	×ÑØ*¨D×,AÑ,Aõ	
r„   c                 óX   • SU;   a$  US   n[         R                  SUS   U5        XAS'   g g )NÚeventbridge_endpointzRewriting URL from %s to %srÃ   )r  r#  r¹  s        r‚   rÅ  Ú(EventbridgeSignerSetter.set_endpoint_urls  s:   € Ø! WÓ,ØÐ5Ñ6ˆHÜ�L‰LØ-¨v°e©}¸hôð %�5ŠMð -r„   c                 óÀ  • UR                  S5      nUc  g [        U5      S:X  a	  [        SS9e[        (       d	  [	        SS9eUR                  S5      nS nUb.  UR
                  (       a	  [        SS9eUR                  (       a  S/nU R                  c7  [        S	U 35      nUR                  U:w  a	  [        S
S9eU R                  XFS9nOU R                  nX‚S'   SUS'   g )NÚ
EndpointIdr   z+EndpointId must not be a zero length stringr  zqUsing EndpointId requires an additional dependency. You will need to pip install botocore[crt] before proceeding.r.  z>FIPS is not supported with EventBridge multi-region endpoints.r=   úhttps://z-EndpointId is not a valid hostname component.©Úendpoint_variant_tagsrÈ  Úv4ar{  )r™   rÓ   r'   r
   r.   r  r5  r  r   r}  Ú_get_global_endpoint)	rø   rJ  rÞ   rå   r  rH   rÎ  rˆ  Úresolved_endpoints	            r‚   rÄ  Ú1EventbridgeSignerSetter.check_for_global_endpoint{  s  € Ø—:‘:˜lÓ+ˆØÑØäˆx‹=˜AÓÜ3ØAñð ÷ ŠwÜ,ð3ñð ð —‘˜_Ó-ˆØ $ÐØÑØ×'×'Ü7ð.ñð ð ×,×,Ø)4¨Ð%à×ÑÑ%ä˜x¨ zÐ2Ó3ˆEØ�~‰~ Ó)Ü7ØGñð ð !%× 9Ñ 9Øð !:ð !Ñð !%× 2Ñ 2Ðà*;Ð&Ñ'Ø$ˆ�Òr„   c                 ó¼   • U R                   nUR                  U R                  5      nUc  U R                  nUR	                  XBS9nUc  U R
                  nSU SU S3$ )NrÍ  rÌ  z.endpoint.events.rµ   )r©  Úget_partition_for_regionr  r  rf  rg  )rø   r  rÎ  r  rÈ  ri  s         r‚   rÐ  Ú,EventbridgeSignerSetter._get_global_endpoint§  ss   € Ø×*Ñ*ˆà×5Ñ5°d·l±lÓCˆ	ØÑØ×/Ñ/ˆIØ×6Ñ6Øð 7ð 
ˆ
ð ÑØ×1Ñ1ˆJà˜(˜Ð#4°Z°LÀÐBÐBr„   )r©  r  r  rÊ  rô   )rë   rì   rí   rî   r  rg  rù   r<  rÅ  rÄ  rÐ  rð   rŠ   r„   r‚   rÀ  rÀ  a  s)   † ØÐØ)Ðô*ò

ò%ò*%÷XCr„   rÀ  c                 ó>  • U c  g[        U 5      nUR                  R                  S5      (       a  UR                  S;  a  gUR                  R	                  S5      nUS   S:w  a  gUSS n[        U5      [        [        U5      5      :w  a  g[        S	 U 5       5      $ )
z£Does the URL match the S3 Accelerate endpoint scheme?

Virtual host naming style with bucket names in the netloc part of the URL
are not allowed by this function.
FrÑ  )r?  Úhttpr½   r   r}  r:   r~  c              3   ó2   #   • U  H  o[         ;   v •  M     g 7frô   r€  r�  s     r‚   rƒ  Ú'is_s3_accelerate_url.<locals>.<genexpr>Ô  s   é € ÐC²]°Ô+Ö+²]ùr…  )r   r£  r*  r¥  r¿   rÓ   r†  r‡  )rÃ   Ú	url_partsrˆ  rˆ  s       r‚   Úis_s3_accelerate_urlrÛ  ¶  s¨   € ð �{Øô ˜“€IØ×Ñ×$Ñ$Ø÷ñ à	×	Ñ	Ð!2Ó	2Øð ×Ñ×"Ñ" 3Ó'€EØˆQ�x�?Ó"Øð ˜!˜B�K€Mô ˆ=ÓœS¤ ]Ó!3Ó4Ó4Øô ÑC±]ÓCÓCÐCr„   c                   óÂ   • \ rS rSrSr\R                  R                  \R                  R                  SSSS5      5      r	\	S4S jr
S	 rS
 rS rS rS rS rSS jrSrg)ÚJSONFileCachei×  zÅJSON file cache.
This provides a dict like interface that stores JSON serializable
objects.
The objects are serialized to JSON and stored in a file.  These
values can be retrieved at a later time.
Ú~ú.awsÚbotor6  Nc                 ó:   • Xl         Uc  U R                  nX l        g rô   )Ú_working_dirÚ_default_dumpsÚ_dumps)rø   Úworking_dirÚ
dumps_funcs      r‚   rù   ÚJSONFileCache.__init__á  s   € Ø'ÔØÑØ×,Ñ,ˆJØ �r„   c                 ó>   • [         R                  " XR                  S9$ )N)rs  )r   Údumpsr$  )rø   rL  s     r‚   rã  ÚJSONFileCache._default_dumpsç  s   € Ü�zŠz˜#×'@Ñ'@ÑAÐAr„   c                 ób   • U R                  U5      n[        R                  R                  U5      $ rô   )Ú_convert_cache_keyr	  r¸   Úisfile)rø   r²  Ú
actual_keys      r‚   Ú__contains__ÚJSONFileCache.__contains__ê  s%   € Ø×,Ñ,¨YÓ7ˆ
Ü�w‰w�~‰~˜jÓ)Ð)r„   c                 óÜ   • U R                  U5      n [        U5       n[        R                  " U5      sSSS5        $ ! , (       d  f       g= f! [        [
        4 a    [        U5      ef = f)z Retrieve value from a cache key.N)rì  r©  r   Úloadrà  r�  ÚKeyError)rø   r²  rî  rã  s       r‚   Ú__getitem__ÚJSONFileCache.__getitem__î  sV   € à×,Ñ,¨YÓ7ˆ
ð	&Ü�jÔ! QÜ—y’y “|÷ "×!×!ûäœÐ$ó 	&Ü˜9Ó%Ð%ð	&ús%   “A ž>´	A ¾
AÁA ÁA ÁA+c                 ó�   • U R                  U5      n [        U5      nUR                  5         g ! [         a    [	        U5      ef = frô   )rì  r   ÚunlinkÚFileNotFoundErrorró  )rø   r²  rî  Úkey_paths       r‚   Ú__delitem__ÚJSONFileCache.__delitem__÷  sE   € Ø×,Ñ,¨YÓ7ˆ
ð	&Ü˜JÓ'ˆHØ�O‰OÕøÜ ó 	&Ü˜9Ó%Ð%ð	&ús	   “/ ¯Ac                 ó‚  • U R                  U5      n U R                  U5      n[        R
                  R                  U R                  5      (       d  [        R                  " U R                  SS9  [        R                  " U R                  SS9u  pV[        R                  " US5       nUR                  U5        UR                  5         [        R                  " UR                  5       5        S S S 5        [        R                   " Xc5        g ! [        [        4 a    [        SU 35      ef = f! , (       d  f       NG= f)Nz3Value cannot be cached, must be JSON serializable: T)Úexist_okz.tmp)ÚdirÚsuffixÚw)rì  rä  r	  r�  r	  r¸   Úisdirrâ  ÚmakedirsÚtempfileÚmkstempÚfdopenÚwriteÚflushÚfsyncÚfilenor®   )rø   r²  rÖ   Úfull_keyÚfile_contentÚtemp_fdÚ	temp_pathrã  s           r‚   Ú__setitem__ÚJSONFileCache.__setitem__ÿ  sô   € Ø×*Ñ*¨9Ó5ˆð	ØŸ;™; uÓ-ˆLô
 �w‰w�}‰}˜T×.Ñ.×/Ñ/Ü�KŠK˜×)Ñ)°DÒ9ä%×-Ò-Ø×!Ñ!¨&ñ
Ñˆô �YŠY�w Ô$¨Ø�G‰G�LÔ!Ø�G‰GŒIÜ�HŠH�Q—X‘X“ZÔ ÷ %ô
 	�
Š
�9Õ'øô œ:Ð&ó 	ÜØEÀeÀWÐMóð ð	ú÷ %Õ$ús   “D Â)AD0ÄD-Ä0
D>c                 ó`   • [         R                  R                  U R                  US-   5      nU$ )Nz.json)r	  r¸   rÂ   râ  )rø   r²  Ú	full_paths      r‚   rì  Ú JSONFileCache._convert_cache_key  s'   € Ü—G‘G—L‘L ×!2Ñ!2°IÀÑ4GÓHˆ	ØÐr„   c                 ó€   • [        U[        5      (       a(  U(       a  UR                  5       $ UR                  S5      $ U$ r*  r+  r-  s      r‚   r$  Ú"JSONFileCache._serialize_if_needed  r/  r„   )rä  râ  rl  )rë   rì   rí   rî   rï   r	  r¸   Ú
expanduserrÂ   Ú	CACHE_DIRrù   rã  rï  rô  rú  r  rì  r$  rð   rŠ   r„   r‚   rÝ  rÝ  ×  s^   † ñð —‘×"Ñ" 2§7¡7§<¡<°°V¸VÀWÓ#MÓN€Ià#,¸ô !òBò*ò&ò&ò(ò*÷r„   rÝ  c                 óh   • [         R                  " U R                  S5      5      R                  5       $ r²  )r)  r*  rù  r-  )Úsign_in_session_names    r‚   Úgenerate_login_cache_keyr     s&   € Ü�>Š>Ð.×5Ñ5°gÓ>Ó?×IÑIÓKÐKr„   c                 ó,   • U c  gU R                  S5      $ )NFz--x-s3)r*  r  s    r‚   Úis_s3express_bucketr  $  s   € Ø�~ØØ�?‰?˜8Ó$Ð$r„   c                 ó¶   • [        U [        5      (       a  U R                  5       (       d  g Uc  [        R                  n[        U 5      nUR                  U5      $ rô   )r|   r~   ré  r	  r
  Ú_get_bearer_env_var_namer™   )rM  r
  Úenv_vars      r‚   Úget_token_from_environmentr  *  sG   € Ü�l¤C×(Ñ(°×0BÑ0B×0DÑ0DØà�Ü—*‘*ˆÜ& |Ó4€GØ�;‰;�wÓÐr„   c                 ól   • U R                  SS5      R                  SS5      R                  5       nSU 3$ )Nrð  Ú_rï  ÚAWS_BEARER_TOKEN_)r®   Úupper)rM  Úbearer_names     r‚   r  r  4  s7   € Ø×&Ñ& s¨CÓ0×8Ñ8¸¸cÓB×HÑHÓJ€KØ˜{˜mÐ,Ð,r„   rn   Úappmeshzapp-meshzds-datazdirectory-service-dataÚglobalacceleratorzglobal-acceleratorÚiotwirelessziot-wirelessÚkinesisanalyticsv2zkinesis-analytics-v2zlexv2-modelszlex-models-v2zlexv2-runtimezlex-runtime-v2z	sms-voicezpinpoint-sms-voicerk   rl   rm   Ú	s3controlrÍ  ro   rp   rq   rr   zservicecatalog-appregistryzservice-catalog-appregistry)rt   ru   c                  óJ  • S[         R                  ;   aQ  [         R                  R                  [         R                  S   5      n [         R                  R	                  U 5      n U $ [         R                  R	                  [         R                  R                  SSSS5      5      $ )z>Returns which directory contains the login_session token filesÚAWS_LOGIN_CACHE_DIRECTORYrÞ  rß  Úloginr6  )r	  r
  r¸   Ú
expandvarsr  rÂ   r·   s    r‚   Úget_login_token_cache_directoryr.  €  sm   € à"¤b§j¡jÓ0Ü�w‰w×!Ñ!¤"§*¡*Ð-HÑ"IÓJˆÜ�w‰w×!Ñ! $Ó'ˆØˆä�w‰w×!Ñ!¤"§'¡'§,¡,¨s°F¸GÀWÓ"MÓNÐNr„   c                   ó.   • \ rS rSrSrSS jrS rS rSrg)	ÚLoginTokenLoaderiŠ  z+Loads and saves login access tokens to diskNc                 ó   • Uc  0 nXl         g rô   r­  r®  s     r‚   rù   ÚLoginTokenLoader.__init__�  r°  r„   c                 ó6   • [        U5      nX R                  U'   g rô   ©r  r5  )rø   rµ  rç   r²  s       r‚   r¹  ÚLoginTokenLoader.save_token’  s   € Ü,¨\Ó:ˆ	Ø!&�‰�IÒr„   c                 óV   • [        U5      nX R                  ;  a  g U R                  U   $ rô   r4  )rø   rµ  r²  s      r‚   Ú
load_tokenÚLoginTokenLoader.load_token–  s(   € Ü,¨\Ó:ˆ	ØŸK™KÓ'ØØ�{‰{˜9Ñ%Ð%r„   r­  rô   )	rë   rì   rí   rî   rï   rù   r¹  r7  rð   rŠ   r„   r‚   r0  r0  Š  s   † Ù5ôò
'õ&r„   r0  )Trl  rô   )z
ISO-8859-1)Âr{  r9  r   Úemail.messagerY   r¹  r)  rj  Úloggingr	  r¡  r¯   rd  r  r_  rª  rÃ  r  Ú	ipaddressr   Úpathlibr   Úurllib.requestr   r   Údateutil.parserr
  Údateutil.tzr   Úurllib3.exceptionsr	   rž   Úbotocore.awsrequestÚbotocore.httpsessionÚbotocore.compatr
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Úbotocore.exceptionsr    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   Úbotocore.pluginr7   r8   r9   Ú	getLoggerrë   r  rm  r!  r"  rŒ   Ú
SAFE_CHARSr†  r”  rA  rÖ  ÚEVENT_ALIASESr‡  rŒ  Ú$PRIORITY_ORDERED_SUPPORTED_PROTOCOLSrƒ   r‘   rœ   r¥   r³   r¹   r»   r¶   rÐ   rÔ   rà   rè   Ú	Exceptionrê   rò   rü   ro  r°  rÅ  rÔ  rÜ  r©  rå  rß  rõ  rï  r  r  r  r  r   r2  r?  r8  rD  rR  r�  rƒ  rŠ  r$  r�  r˜  rž  r›  r¢  r»  rÏ  rÚ  rà  r×  râ  rë  rò  rô  r  r2  rV  r¥  r�  rÁ  r|  rÕ  rþ  r•  rç  r  r1  r  ra  rn  ru  r~  ry  rz  rŠ  rŽ  r�  r”  r“  r’  r   r«  rÀ  rÛ  rÝ  r  r  r  r  ÚSERVICE_NAME_ALIASESÚ.CLIENT_NAME_TO_HYPHENIZED_SERVICE_ID_OVERRIDESr.  r0  rŠ   r„   r‚   Ú<module>rM     s­	  ðó Û Û Û Û Û Û 	Û Û 	Û Û 	Û Û Û Û Û Ý /Ý  Ý ß 3ã Ý Ý 1ã Û Û ÷÷ ÷ ÷ ÷ ÷ ÷0÷ ÷ ÷ ÷ ÷ ñ ÷2ñ ð 
×	Ò	˜8Ó	$€Ø#$Ð  Ø-Ð Ø2Ð Ø*Ð ð €
Ø�:Š:Ð4Ó5€àØØØð	Ð ð '˜-Ð ðBØ�}ðBà�9ðBð �[ðBð �-ð	Bð
 Ð9ðBð �+ðBð �>ðBð Ð-ðBð 	ˆ/ðBð �-ðBð Ð-ðBð Ð.ðBð ÐðBð 
Ð*ðBð Ð ðBð  Ð*ð!Bð" Ð(ñ#Bð$ �Oð%Bð& �-ð'Bð( Ð%ð)Bð* Ð0ð+Bð, 
Ð'ð-Bð. 	Ð
ð/Bð0 Ð)ð1Bð2 Ð+ð3Bð4 ˜ð5Bð6 Ð4ð7Bð8 ˜ð9Bð: 
Ð#ð;Bð< Ð(ð=Bð> ˆUð?Bð@ Ð@ðABðB 	Ð
!ðCBðD ˆmòEBðF ˜ðGBðH Ð ðIBðJ Ð*ðKBðL Ð+ðMBðN �OðOBðP Ð.ðQBðR Ð(ðSBðT ÐðUBðV Ð)ðWBðX Ð@ðYBðZ #Ð$Dð[Bð\ Ð2ð]Bð^ Ð1ð_Bð` 
ˆ?ðaBðb Ð.ðcBðd �,ðeBðf �wñgBðh !>ØØ(Ø(Ø,ØØ'Ø7Ø'ØØØ'Ø*Ø,òCB€ðL Ÿ*š*Ø#Ø
�-‰-ñÐ ð
(Ð $ò
òò,ò"Nòò"%ò#ò0ò6@õ ò<ò	$ô	˜Iô 	ô˜)ô ÷
@.ñ @.ôF~˜kô ~÷B?ñ ?ôD# Kô #õL$ò:ð (,ô ,òð +5ô ##ðL $.ô 'ò*Dò >ò&-ò`*õZõ&!ò67òB1÷""ñ "÷(a
ñ a
òH5ò/ò
#ò:ò:òð6 õ	
ð< 6:õ=?ò@-òòBò>;ò&-õ!õò(ò*0÷$ñ $ôD&˜]ô &÷R-ñ -÷`H
ñ H
÷Vt+ñ t+ôn	˜*ô 	÷ñ ÷8R
ñ R
÷jTñ T÷nS;ñ S;÷lB-ñ B-ôJJÐ!9ô J÷Zw9ñ w9òtòò*õ:ò.8òòò=òò(8ò5ò
ò$6÷2%ñ %÷ñ ÷BRCñ RCòjD÷BFñ FòRLò%õ ò-ð ,Ð-@ÐAÐ ð72à�-ð72ð Ð9ð72ð ˆzð	72ð
 �>ð72ð Ð-ð72ð 	ˆ/ð72ð �-ð72ð Ð-ð72ð Ð.ð72ð Ðð72ð 
Ð*ð72ð �Oð72ð Ð%ð72ð �-ð72ð  Ð0ð!72ð" 
Ð'ð#72ð$ 	Ð
ñ%72ð& Ð'ð'72ð( Ð)ð)72ð* Ð+ð+72ð, 
Ð#ð-72ð. Ð(ð/72ð0 	Ð
!ð172ð2 ˆmð372ð4 Ð-ð572ð6 Ð ð772ð8 Ð*ð972ð: �>ð;72ð< Ð+ð=72ð> Ð0ð?72ð@ �OðA72ðB Ð.ðC72ðD �OðE72ðF Ð(òG72ðH Ð%ðI72ðJ ÐðK72ðL Ð)ðM72ðN #Ð$DðO72ðP Ð@ðQ72ðR Ð1ðS72ðT 
ˆ?ðU72ðV Ð%ðW72ðX Ð =ðY72ñZ ˆzð[72ñ\ Ð(ð]72ñ^ ‘ð_72ñ` 
ˆ:ða72ñb Ð'ðc72ñd Ð7ðe72ñf Ð'ðg72ñh !Ñ"?ñi72ðj Ø'óm72Ð .ótO÷&ô &r„   