
    /Jf~                     P   d Z ddlZddlZddlZddlmZ ddlmZmZ ddl	m
Z
mZ ddlmZ ddlmZ ddlmZmZmZmZmZmZmZmZmZmZmZmZmZmZ dd	lm Z m!Z!  ej"        e#          Z$d
Z%di iZ& G d d          Z' G d de'          Z( G d de)e          Z* G d d          Z+dS )zResolves regions and endpoints.

This module implements endpoint resolution, including resolving endpoints for a
given service and region and resolving the available endpoints for a service
in a specific AWS partition.
    N)Enum)UNSIGNED
xform_name)AUTH_TYPE_MAPSHAS_CRTCRT_SUPPORTED_AUTH_TYPES)EndpointProvider)EndpointProviderErrorEndpointVariantError!InvalidEndpointConfigurationErrorInvalidHostLabelErrorMissingDependencyExceptionNoRegionErrorParamValidationError$UnknownEndpointResolutionBuiltInNameUnknownRegionErrorUnknownSignatureVersionError*UnsupportedS3AccesspointConfigurationErrorUnsupportedS3ConfigurationErrorUnsupportedS3ControlArnError&UnsupportedS3ControlConfigurationError)ensure_booleaninstance_cachez{service}.{region}.{dnsSuffix}	endpointsc                   *    e Zd ZdZddZd Z	 d	dZdS )
BaseEndpointResolverz3Resolves regions and endpoints. Must be subclassed.Nc                     t           )a7  Resolves an endpoint for a service and region combination.

        :type service_name: string
        :param service_name: Name of the service to resolve an endpoint for
            (e.g., s3)

        :type region_name: string
        :param region_name: Region/endpoint name to resolve (e.g., us-east-1)
            if no region is provided, the first found partition-wide endpoint
            will be used if available.

        :rtype: dict
        :return: Returns a dict containing the following keys:
            - partition: (string, required) Resolved partition name
            - endpointName: (string, required) Resolved endpoint name
            - hostname: (string, required) Hostname to use for this endpoint
            - sslCommonName: (string) sslCommonName to use for this endpoint.
            - credentialScope: (dict) Signature version 4 credential scope
              - region: (string) region name override when signing.
              - service: (string) service name override when signing.
            - signatureVersions: (list<string>) A list of possible signature
              versions, including s3, v4, v2, and s3v4
            - protocols: (list<string>) A list of supported protocols
              (e.g., http, https)
            - ...: Other keys may be included as well based on the metadata
        NotImplementedError)selfservice_nameregion_names      S/home/alex/cs2snipeproduction/venv/lib/python3.11/site-packages/botocore/regions.pyconstruct_endpointz'BaseEndpointResolver.construct_endpoint6   s
    6 "!    c                     t           )zLists the partitions available to the endpoint resolver.

        :return: Returns a list of partition names (e.g., ["aws", "aws-cn"]).
        r   r!   s    r$   get_available_partitionsz-BaseEndpointResolver.get_available_partitionsS   s
    
 "!r&   awsFc                     t           )a  Lists the endpoint names of a particular partition.

        :type service_name: string
        :param service_name: Name of a service to list endpoint for (e.g., s3)

        :type partition_name: string
        :param partition_name: Name of the partition to limit endpoints to.
            (e.g., aws for the public AWS endpoints, aws-cn for AWS China
            endpoints, aws-us-gov for AWS GovCloud (US) Endpoints, etc.

        :type allow_non_regional: bool
        :param allow_non_regional: Set to True to include endpoints that are
             not regional endpoints (e.g., s3-external-1,
             fips-us-gov-west-1, etc).
        :return: Returns a list of endpoint names (e.g., ["us-east-1"]).
        r   )r!   r"   partition_nameallow_non_regionals       r$   get_available_endpointsz,BaseEndpointResolver.get_available_endpointsZ   s
    & "!r&   N)r*   F)__name__
__module____qualname____doc__r%   r)   r.    r&   r$   r   r   3   sX        ==" " " ":" " " FK" " " " " "r&   r   c                       e Zd ZdZddgZddZddZd Z	 	 	 dd
Z	 ddZ		 	 	 	 ddZ
d Z	 ddZd Zd Zd Zd Zd Zd Zd Zd	S )EndpointResolverz7Resolves endpoints based on partition endpoint metadatazaws-isoz	aws-iso-bFc                 H    d|vrt          d          || _        || _        dS )a  
        :type endpoint_data: dict
        :param endpoint_data: A dict of partition data.

        :type uses_builtin_data: boolean
        :param uses_builtin_data: Whether the endpoint data originates in the
            package's data directory.
        
partitionsz%Missing "partitions" in endpoint dataN)
ValueError_endpoint_datauses_builtin_data)r!   endpoint_datar;   s      r$   __init__zEndpointResolver.__init__u   s4     },,DEEE+!2r&   r*   c                 x    | j         d         D ]+}|d         |k    r|d         }||vr||         d         c S d S )Nr8   	partitionservicesr   )r:   )r!   r"   r,   r?   r@   s        r$   get_service_endpoints_dataz+EndpointResolver.get_service_endpoints_data   sd    ,\: 	7 	7I%77 ,H8++L)+6666	7 	7r&   c                 `    g }| j         d         D ]}|                    |d                    |S )Nr8   r?   )r:   append)r!   resultr?   s      r$   r)   z)EndpointResolver.get_available_partitions   s=    ,\: 	2 	2IMM)K01111r&   Nc                 :   g }| j         d         D ]}|d         |k    r|d         }||vr||         d         }|D ]]}	|	|d         v }
|r6|
r4|                     ||	         |          }|r|                    |	           D|s|
r|                    |	           ^|S )Nr8   r?   r@   r   regions)r:   _retrieve_variant_datarC   )r!   r"   r,   r-   endpoint_variant_tagsrD   r?   r@   service_endpointsendpoint_nameis_regional_endpointvariant_datas               r$   r.   z(EndpointResolver.get_available_endpoints   s     ,\: 	1 	1I%77 ,H8++ ( 6{ C!2 
1 
1'4	)8L'L$( 1-A 1#'#>#>)-8:O$ $L $ 5m444' 1+? 1MM-000
1 r&   c                     | j         d         D ]T}|d         |k    rF|r:|                     |                    d          |          }|rd|v r
|d         c S J|d         c S Ud S )Nr8   r?   defaults	dnsSuffix)r:   rG   get)r!   r,   rH   r?   variants        r$   get_partition_dns_suffixz)EndpointResolver.get_partition_dns_suffix   s     ,\: 		2 		2I%77( 2"99!j113H G  4;'#9#9&{3333$[1111 8 tr&   c                 $   |dk    r|r|d}|@d }| j         d         D ]}|d         |k    r|}||                     |||||d          }|S d S | j         d         D ]3}|r|d         | j        v r|                     |||||          }|r|c S 4d S )Ns3z	us-east-1r8   r?   T)r:   _endpoint_for_partition!_UNSUPPORTED_DUALSTACK_PARTITIONS)	r!   r"   r#   r,   use_dualstack_endpointuse_fips_endpointvalid_partitionr?   rD   s	            r$   r%   z#EndpointResolver.construct_endpoint   s    D  & !#%K%"O!0> 0 0	[)^;;&/O*55# *%  4 ,\: 	 	I% +&9: : 11&! F  	 	r&   c                     | j         d         D ]"}|                     ||          r
|d         c S #t          |d          )Nr8   r?   z,No partition found for provided region_name.)r#   	error_msg)r:   _region_matchr   )r!   r#   r?   s      r$   get_partition_for_regionz)EndpointResolver.get_partition_for_region   sd    ,\: 	. 	.I!!)[99 . ----. #D
 
 
 	
r&   c                 T   |d         }|r || j         v rd|z  }t          dg|          |d                             |t                    }	|d|	v r	|	d         }nt	                      |||	|||d}
||	d         v r | j        di |
S |                     ||          s|r|	                    d          }|	                    d	d
          }|r1|s/t                              d|||           ||
d<    | j        di |
S t                              d||            | j        di |
S d S )Nr?   z@Dualstack endpoints are currently not supported for %s partition	dualstacktagsr[   r@   partitionEndpoint)r?   r"   service_datarJ   rW   rX   r   isRegionalizedTz'Using partition endpoint for %s, %s: %srJ   z*Creating a regex based endpoint for %s, %sr4   )	rV   r   rP   DEFAULT_SERVICE_DATAr   _resolver\   LOGdebug)r!   r?   r"   r#   rW   rX   force_partitionr,   r[   rc   resolve_kwargspartition_endpointis_regionalizeds                r$   rU   z(EndpointResolver._endpoint_for_partition   s    #;/"	P$"HHH$&45  '[MYOOOO !,00.
 
 "l22*+>?#oo% #(((&<!2
 
 ,{333 4=22>222 i55 	3 	3!-!1!12E!F!F*../?FFO! 7/ 7		= &	   3E/$t}66~666II<  
 !4=22>222%	3 	3r&   c                     ||d         v rdS d|v r-t          j        |d                                       |          S dS )NrF   TregionRegexF)recompilematch)r!   r?   r#   s      r$   r\   zEndpointResolver._region_match9  sJ    )I...4I%%:i677==kJJJur&   c                     |                     dg           }|D ]@}t          |d                   t          |          k    r|                                }|c S Ad S )Nvariantsra   )rP   setcopy)r!   r<   ra   rs   rQ   rD   s         r$   rG   z'EndpointResolver._retrieve_variant_data@  sh     $$Z44 	 	G76?##s4yy00  1	 	r&   c                 f    g }|r|                     d           |r|                     d           |S )Nr_   fips)rC   )r!   rW   rX   ra   s       r$   _create_tag_listz!EndpointResolver._create_tag_listG  s@    ! 	%KK$$$ 	 KKr&   c                 v    i }|||fD ]0}|                      ||          }|r|                     ||           1|S r/   )rG   _merge_keys)r!   ra   r<   service_defaultspartition_defaultsrD   rs   rQ   s           r$   _resolve_variantz!EndpointResolver._resolve_variantO  sZ     &(8:LM 	2 	2H11(DAAG 2  &111r&   c                 $   |                     di                                |i           }|                     d          rt                              d|z             |                     di           }|                     di           }	|                     ||          }
|
rN|                     |
|||	          }|i k    rd| d| }t          |
|          |                     ||           n|}d|vr|d         |d<   |d	         |d	<   ||d
<   |                     ||           |                     |	|           |                     ||d         |||d                   |d<   d|v r(|                     ||d         |||d                   |d<   |S )Nr   
deprecatedz5Client is configured with the deprecated endpoint: %srN   zEndpoint does not exist for z in region r`   rO   r?   endpointNamehostnamesslCommonName)rP   rg   warningrx   r}   r   rz   _expand_template)r!   r?   r"   rc   rJ   rW   rX   r<   r{   r|   ra   rD   r[   s                r$   rf   zEndpointResolver._resolveY  s    %((b99==2
 
 \** 	KKG "  
 (++J;;&]]:r::$$%;=NOO 	#**m%57I F ||1< 1 1!.1 1  +	JJJJ]F3333"F f$$"+K"8F;'4{!.~ 	)6222+V444!22:;
 
z f$$&*&;&;'{#' 'F?# r&   c                 .    |D ]}||vr||         ||<   d S r/   r4   )r!   	from_datarD   keys       r$   rz   zEndpointResolver._merge_keys  s4     	- 	-C&  'ns	- 	-r&   c                 2    |                     |||          S )N)serviceregionrO   )format)r!   r?   templater"   rJ   rO   s         r$   r   z!EndpointResolver._expand_template  s&      )  
 
 	
r&   )F)r*   )r*   FNr/   )NNFF)r0   r1   r2   r3   rV   r=   rA   r)   r.   rR   r%   r]   rU   r\   rG   rx   r}   rf   rz   r   r4   r&   r$   r6   r6   p   sM       AA)2K(@%3 3 3 37 7 7 7    "   : 59   $ $0 0 0 0d
 
 
  ?3 ?3 ?3 ?3B        @ @ @D- - -

 
 
 
 
r&   r6   c                   :    e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdS )EndpointResolverBuiltinszAWS::RegionzAWS::UseFIPSzAWS::UseDualStackzAWS::STS::UseGlobalEndpointzAWS::S3::UseGlobalEndpointzAWS::S3::AcceleratezAWS::S3::ForcePathStylezAWS::S3::UseArnRegionzAWS::S3Control::UseArnRegionz'AWS::S3::DisableMultiRegionAccessPointszSDK::EndpointN)r0   r1   r2   
AWS_REGIONAWS_USE_FIPSAWS_USE_DUALSTACKAWS_STS_USE_GLOBAL_ENDPOINTAWS_S3_USE_GLOBAL_ENDPOINTAWS_S3_ACCELERATEAWS_S3_FORCE_PATH_STYLEAWS_S3_USE_ARN_REGIONAWS_S3CONTROL_USE_ARN_REGIONAWS_S3_DISABLE_MRAPSDK_ENDPOINTr4   r&   r$   r   r     s[        J "L , #@ ">-7 4 $B C"LLLr&   r   c                       e Zd ZdZ	 	 ddZd Zd Zd Zd Zd	 Z	d
 Z
d Zed             Zed             Zed             Zd Zd Zd Zd Zd ZdS )EndpointRulesetResolverz5Resolves endpoints using a service's endpoint rulesetTNc	                     t          ||          | _        | j        j        j        | _        || _        || _        || _        || _        || _	        || _
        i | _        d S )N)ruleset_datapartition_data)r
   	_providerruleset
parameters_param_definitions_service_model	_builtins_client_context_event_emitter_use_ssl_requested_auth_scheme_instance_cache)	r!   endpoint_ruleset_datar   service_modelbuiltinsclient_contextevent_emitteruse_sslrequested_auth_schemes	            r$   r=   z EndpointRulesetResolver.__init__  sn     *.)
 
 
 #'."8"C+!-+&;#!r&   c                 B   |i }|i }|                      |||          }t                              d|z             	  | j        j        d
i |}n.# t
          $ r!}|                     ||          }| ||d}~ww xY wt                              d|j        z             | j        s@|j        	                    d          r&|
                    d|j        dd                    }|
                    d |j                                        D             	          }|S )zAInvokes the provider with params defined in the service's rulesetNz-Calling endpoint provider with parameters: %szEndpoint provider result: %szhttps://zhttp://   )urlc                 &    i | ]\  }}||d          S )r   r4   ).0r   vals      r$   
<dictcomp>z>EndpointRulesetResolver.construct_endpoint.<locals>.<dictcomp>  s/        (SSV  r&   )headersr4   )_get_provider_paramsrg   rh   r   resolve_endpointr   #ruleset_error_to_botocore_exceptionr   r   
startswith_replacer   items)r!   operation_model	call_argsrequest_contextprovider_paramsprovider_resultexbotocore_exceptions           r$   r%   z*EndpointRulesetResolver.construct_endpoint  s    I" O33Y
 
 			;oM	
 	
 	
	1=dn=  ! OO % 	1 	1 	1!%!I!IO" " ")(b0	1 			0?3FFGGG } 	!4!?!?
!K!K 	-667o1!""577 7  O *22 ,;,C,I,I,K,K   3 
 
 s   A 
A<A77A<c                     i }|                      |||          }| j                                        D ]I\  }}|                     |||          }|#|j        |                     |j        |          }||||<   J|S )a  Resolve a value for each parameter defined in the service's ruleset

        The resolution order for parameter values is:
        1. Operation-specific static context values from the service definition
        2. Operation-specific dynamic context values from API parameters
        3. Client-specific context parameters
        4. Built-in values such as region, FIPS usage, ...
        )
param_namer   r   N)builtin_namer   )_get_customized_builtinsr   r   _resolve_param_from_contextbuiltin_resolve_param_as_builtin)	r!   r   r   r   r   customized_builtinsr   	param_def	param_vals	            r$   r   z,EndpointRulesetResolver._get_provider_params  s      #;;Y
 
 &*%<%B%B%D%D 	8 	8!J	88% /# 9  I
  Y%6%B ::!*!20 ;  	 $.7
+r&   c                     |                      ||          }||S |                     |||          }||S |                     |          S r/   )&_resolve_param_as_static_context_param'_resolve_param_as_dynamic_context_param&_resolve_param_as_client_context_param)r!   r   r   r   staticdynamics         r$   r   z3EndpointRulesetResolver._resolve_param_from_context5  sh     <<
 
 M>>
 
 N:::FFFr&   c                 V    |                      |          }|                    |          S r/   )_get_static_context_paramsrP   )r!   r   r   static_ctx_paramss       r$   r   z>EndpointRulesetResolver._resolve_param_as_static_context_paramD  s,     !;;OLL $$Z000r&   c                 r    |                      |          }||v r||         }|                    |          S d S r/   )_get_dynamic_context_paramsrP   )r!   r   r   r   dynamic_ctx_paramsmember_names         r$   r   z?EndpointRulesetResolver._resolve_param_as_dynamic_context_paramJ  sH     "==oNN+++,Z8K==--- ,+r&   c                 z    |                                  }||v r"||         }| j                            |          S d S r/   )_get_client_context_paramsr   rP   )r!   r   client_ctx_paramsclient_ctx_varnames       r$   r   z>EndpointRulesetResolver._resolve_param_as_client_context_paramR  sK     ;;==***!2:!>'++,>??? +*r&   c                     |t           j                                        vrt          |          |                    |          S )Nname)r   __members__valuesr   rP   )r!   r   r   s      r$   r   z1EndpointRulesetResolver._resolve_param_as_builtinX  s@    7CJJLLLL6LIIII||L)))r&   c                 $    d |j         D             S )z=Mapping of param names to static param value for an operationc                 (    i | ]}|j         |j        S r4   )r   valuer   params     r$   r   zFEndpointRulesetResolver._get_static_context_params.<locals>.<dictcomp>`  s.     
 
 
 J
 
 
r&   )static_context_parametersr!   r   s     r$   r   z2EndpointRulesetResolver._get_static_context_params]  s&    
 
(B
 
 
 	
r&   c                 $    d |j         D             S )z7Mapping of param names to member names for an operationc                 (    i | ]}|j         |j        S r4   )r   r   r   s     r$   r   zGEndpointRulesetResolver._get_dynamic_context_params.<locals>.<dictcomp>h  s/     
 
 
 J)
 
 
r&   )context_parametersr   s     r$   r   z3EndpointRulesetResolver._get_dynamic_context_paramse  s&    
 
(;
 
 
 	
r&   c                 .    d | j         j        D             S )z7Mapping of param names to client configuration variablec                 B    i | ]}|j         t          |j                   S r4   )r   r   r   s     r$   r   zFEndpointRulesetResolver._get_client_context_params.<locals>.<dictcomp>p  s6     
 
 
 J
5:..
 
 
r&   )r   client_context_parametersr(   s    r$   r   z2EndpointRulesetResolver._get_client_context_paramsm  s)    
 
,F
 
 
 	
r&   c                     | j         j                                        }t          j        | j                  }| j                            d|z  ||||           |S )Nzbefore-endpoint-resolution.%s)r   modelparamscontext)r   
service_id	hyphenizeru   r   r   emit)r!   r   r   r   r   r   s         r$   r   z0EndpointRulesetResolver._get_customized_builtinsu  si     (3==??
"i77  +j8(!# 	! 	
 	
 	
 #"r&   c                     t          |t                    rt          |          dk    rt          d          t                              dd                    d |D                        j                    j        t          k    rdi fS  fd|D             } j        4	 t           fd	|D                       \  }}n# t          $ r di fcY S w xY w	 t          d
 |D                       \  }}nq# t          $ rd d}d |D             }t          st          d |D                       }|rt          d          t          d                    |                    w xY wi }d|v r|d         |d<   n.d|v r*t          |d                   dk    r|d         d         |d<   d|v r|                    |d                    d|v rt!          |d                   |d<   t                              d|d         ||           ||fS )a  Convert an Endpoint's authSchemes property to a signing_context dict

        :type auth_schemes: list
        :param auth_schemes: A list of dictionaries taken from the
            ``authSchemes`` property of an Endpoint object returned by
            ``EndpointProvider``.

        :rtype: str, dict
        :return: Tuple of auth type string (to be used in
            ``request_context['auth_type']``) and signing context dict (for use
            in ``request_context['signing']``).
        r   z&auth_schemes must be a non-empty list.z_Selecting from endpoint provider's list of auth schemes: %s. User selected auth scheme is: "%s"z, c                 @    g | ]}d |                     d           d S )"r   )rP   r   ss     r$   
<listcomp>zGEndpointRulesetResolver.auth_schemes_to_signing_ctx.<locals>.<listcomp>  s.    BBB+155==+++BBBr&   nonec                 R    g | ]#}i |d                      |d                    i$S r   )_strip_sig_prefix)r   schemer!   s     r$   r   zGEndpointRulesetResolver.auth_schemes_to_signing_ctx.<locals>.<listcomp>  sK     
 
 
 GvFvt55fVnEEFF
 
 
r&   Nc              3   l   K   | ].}                     j        |d                    #j        |fV  /dS r   N)._does_botocore_authname_match_ruleset_authnamer   )r   r   r!   s     r$   	<genexpr>zFEndpointRulesetResolver.auth_schemes_to_signing_ctx.<locals>.<genexpr>  sa       $ $JJ3QvY $0!4$ $ $ $ $ $r&   c              3   H   K   | ]}|d          t           v |d          |fV  dS r  )r   r   s     r$   r  zFEndpointRulesetResolver.auth_schemes_to_signing_ctx.<locals>.<genexpr>  sE       $ $yN22 vYN2222$ $r&   Fc                     g | ]
}|d          S r   r4   r   s     r$   r   zGEndpointRulesetResolver.auth_schemes_to_signing_ctx.<locals>.<listcomp>  s    $E$E$E1QvY$E$E$Er&   c              3   (   K   | ]}|t           v V  d S r/   r   )r   r  s     r$   r  zFEndpointRulesetResolver.auth_schemes_to_signing_ctx.<locals>.<genexpr>  s<       + +" "::+ + + + + +r&   zbThis operation requires an additional dependency. Use pip install botocore[crt] before proceeding.msg)signature_versionsigningRegionr   signingRegionSetsigningName)signing_namedisableDoubleEncodingz?Selected auth type "%s" as "%s" with signing context params: %sr   )
isinstancelistlen	TypeErrorrg   rh   joinr   r   nextStopIterationr   anyr   r   updater   )r!   auth_schemesr   r  fixable_with_crtauth_type_optionssigning_contexts   `      r$   auth_schemes_to_signing_ctxz3EndpointRulesetResolver.auth_schemes_to_signing_ctx  s    ,-- 	F\1B1Ba1G1GDEEE		1IIBB\BBBCC'		
 	
 	
 &(222:
 
 
 
&
 
 
 &2   $ $ $ $ $)$ $ $    ff !       Rx	 # $ $)$ $ $    ff
 !    $) $E$E$E$E$E! '* + +&7+ + + ( ($
 $ 4L   
 7*.))4E*F*F   %, f$$(.(?OH%%6))6,-..22,23E,Fq,I)F""""}0E"FFF"f,,7E./8 8O34 			M6N		
 	
 	
 _$$s   !C   CCC2 2A.E c                 D    |                     d          r
|dd         n|S )z6Normalize auth type names by removing any "sig" prefixsig   N)r   )r!   	auth_names     r$   r  z)EndpointRulesetResolver._strip_sig_prefix  s'     ) 4 4U ; ;Jy}}Jr&   c                     |                      |          }|                    d          d         }|dk    r|                    d          r
|dd         }||k    S )a\  
        Whether a valid string provided as signature_version parameter for
        client construction refers to the same auth methods as a string
        returned by the endpoint ruleset provider. This accounts for:

        * The ruleset prefixes auth names with "sig"
        * The s3 and s3control rulesets don't distinguish between v4[a] and
          s3v4[a] signers
        * The v2, v3, and HMAC v1 based signers (s3, s3-*) are botocore legacy
          features and do not exist in the rulesets
        * Only characters up to the first dash are considered

        Example matches:
        * v4, sigv4
        * v4, v4
        * s3v4, sigv4
        * s3v7, sigv7 (hypothetical example)
        * s3v4a, sigv4a
        * s3v4-query, sigv4

        Example mismatches:
        * v4a, sigv4
        * s3, sigv4
        * s3-presign-post, sigv4
        -r   rT      N)r  splitr   )r!   botonamersnames      r$   r  zFEndpointRulesetResolver._does_botocore_authname_match_ruleset_authname  sc    4 ''//>>#&&q)t 3 3D 9 9|H!!r&   c                 t   |j                             d          }|dS |                    d          r?	 |                    d          d         }n# t          $ r |}Y nw xY wt          |          S | j        j        }|dk    r|dk    s|d	k    rt          |
          S |                    d          si|                    d          sT|                    d          s?|                    d          s*|                    d          s|                    d          rt          |
          S |
                                                    d          rt          |          S |dk    r|                    d          r&|                    d          }t          ||          S |                    d          s|                    d          rt          |
          S |dk    rt          |          S |dk    r;|                    d          rt          |
          S |dk    rt          |
          S dS )zAttempts to translate ruleset errors to pre-existing botocore
        exception types by string matching exception strings.
        r  NzInvalid region in ARN: `   )labelrT   z/S3 Object Lambda does not support S3 Acceleratez#Accelerate cannot be used with FIPSr  zS3 Outposts does not supportzS3 MRAP does not supportz!S3 Object Lambda does not supportzAccess Points do not supportzInvalid configuration:z#Client was configured for partitionzinvalid arn:)report	s3controlzInvalid ARN:Bucket)arnr  z!AccountId is required but not seteventszUInvalid Configuration: FIPS is not supported with EventBridge multi-region endpoints.z&EndpointId must be a valid host label.)kwargsrP   r   r(  
IndexErrorr   r   r"   r   r   lowerr   r   r   r   )r!   ruleset_exceptionr   r  r.  r"   r2  s          r$   r   z;EndpointRulesetResolver.ruleset_error_to_botocore_exception	  s     &**511;F>>344 	6		#q)   (u5555*74HHH???63????=>>K>>"<==K >>"EFFK >>"@AA	K
 >>":;;K >>"GHHK BcJJJJyy{{%%n55 8+37777;&&~~n-- Fjj**3EEEE~~677 G3>>5< < G >#FFFF999+377778##~~6  B 9SAAAA>>>8SAAAAts   A A A )TN)r0   r1   r2   r3   r=   r%   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r   r4   r&   r$   r   r     sK       ?? "" " " "00 0 0d  BG G G1 1 1. . .@ @ @* * *
 
 
 ^
 
 
 ^
 
 
 ^
# # #_% _% _%BK K K" " "@5 5 5 5 5r&   r   ),r3   ru   loggingro   enumr   botocorer   r   botocore.authr   r   botocore.crtr	   botocore.endpoint_providerr
   botocore.exceptionsr   r   r   r   r   r   r   r   r   r   r   r   r   r   botocore.utilsr   r   	getLoggerr0   rg   DEFAULT_URI_TEMPLATEre   r   r6   strr   r   r4   r&   r$   <module>rC     s4      				       ) ) ) ) ) ) ) ) 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7 7 7 7 7 7                                 : 9 9 9 9 9 9 9g!!7 #R( :" :" :" :" :" :" :" :"zu
 u
 u
 u
 u
+ u
 u
 u
p	# # # # #sD # # #>w w w w w w w w w wr&   