
    j"                         d Z ddlmZmZmZmZmZmZ ddlZddl	m
Z
 ddlmZ dede
e         fd	Zed
ddd
ddededede
e         def
d            Zed
dd
ddedededefd            ZdS )zIP Address.    )AddressValueErrorIPv4AddressIPv4NetworkIPv6AddressIPv6NetworkNetmaskValueErrorN)Optional   )	validatorvalue
is_privatec                      |dS t           fddD                       s*t          j        d           st          j        d           r|S | S )NTc              3   B   K   | ]}                     |          V  d S )N)
startswith).0l_bitr   s     X/var/www/html/Carbon-Document/venv/lib/python3.11/site-packages/validators/ip_address.py	<genexpr>z$_check_private_ip.<locals>.<genexpr>   sE       	
 	
 U##	
 	
 	
 	
 	
 	
    >   10.127.0.0.0.0169.254.192.168.z^172\.(?:1[6-9]|2\d|3[0-1])\.z&^(?:22[4-9]|23[0-9]|24[0-9]|25[0-5])\.)anyrematch)r   r   s   ` r   _check_private_ipr      s    t 	
 	
 	
 	
	
 	
 	
 		
 		
 84e<< 8=uEE >r   TF)cidrstrictprivatehost_bitr   r    r!   r"   c               "   | sdS 	 |rL|r(|                      d          dk    rt          d          t          | |           ot          | |          S t	          |           ot          | |          S # t          t
          t          f$ r Y dS w xY w)a  Returns whether a given value is a valid IPv4 address.

    From Python version 3.9.5 leading zeros are no longer tolerated
    and are treated as an error. The initial version of ipv4 validator
    was inspired from [WTForms IPAddress validator][1].

    [1]: https://github.com/wtforms/wtforms/blob/master/src/wtforms/validators.py

    Examples:
        >>> ipv4('123.0.0.7')
        True
        >>> ipv4('1.1.1.1/8')
        True
        >>> ipv4('900.80.70.11')
        ValidationError(func=ipv4, args={'value': '900.80.70.11'})

    Args:
        value:
            IP address string to validate.
        cidr:
            IP address string may contain CIDR notation.
        strict:
            IP address string is strictly in CIDR notation.
        private:
            IP address is public if `False`, private/local/loopback/broadcast if `True`.
        host_bit:
            If `False` and host bits (along with network bits) _are_ set in the supplied
            address, this function raises a validation error. ref [IPv4Network][2].
            [2]: https://docs.python.org/3/library/ipaddress.html#ipaddress.IPv4Network

    Returns:
        (Literal[True]): If `value` is a valid IPv4 address.
        (ValidationError): If `value` is an invalid IPv4 address.
    F/r
   z*IPv4 address was expected in CIDR notationr    )count
ValueErrorr   r   r   r   r   )r   r   r    r!   r"   s        r   ipv4r(   )   s    X  u 	a O%++c**a// !MNNNu\:::`?PQVX_?`?``5!!G&7w&G&GG)+<=   uus   AA3 A3 3BB)r   r    r"   c                   | sdS 	 |r<|r(|                      d          dk    rt          d          t          | |           S t          |           S # t          t          t
          f$ r Y dS w xY w)aZ  Returns if a given value is a valid IPv6 address.

    Including IPv4-mapped IPv6 addresses. The initial version of ipv6 validator
    was inspired from [WTForms IPAddress validator][1].

    [1]: https://github.com/wtforms/wtforms/blob/master/src/wtforms/validators.py

    Examples:
        >>> ipv6('::ffff:192.0.2.128')
        True
        >>> ipv6('::1/128')
        True
        >>> ipv6('abc.0.0.1')
        ValidationError(func=ipv6, args={'value': 'abc.0.0.1'})

    Args:
        value:
            IP address string to validate.
        cidr:
            IP address string may contain CIDR annotation.
        strict:
            IP address string is strictly in CIDR notation.
        host_bit:
            If `False` and host bits (along with network bits) _are_ set in the supplied
            address, this function raises a validation error. ref [IPv6Network][2].
            [2]: https://docs.python.org/3/library/ipaddress.html#ipaddress.IPv6Network

    Returns:
        (Literal[True]): If `value` is a valid IPv6 address.
        (ValidationError): If `value` is an invalid IPv6 address.
    Fr$   r
   z*IPv6 address was expected in CIDR notationr%   )r&   r'   r   r   r   r   )r   r   r    r"   s       r   ipv6r*   a   s    B  u 	; O%++c**a// !MNNNu\::::5!!!)+<=   uus   =A A A.-A.)__doc__	ipaddressr   r   r   r   r   r   r   typingr	   utilsr   strboolr   r(   r*    r   r   <module>r2      sw                    
			            S htn    , 
 "4 4 44 	4
 4 d^4 4 4 4 4n (,UUY ) ) ) ) )d )d ) ) ) ) ) )r   