File: //lib/python3.12/__pycache__/ipaddress.cpython-312.pyc
�
    )!�h�1 �                   �H  � d Z dZddlZdZdZ G d� de�      Z G d� d	e�      Zd
� Zd2d�Z	d� Z
d
� Zd� Zd� Z
d� Zd� Zd� Zd� Zd� Zd� Z G d� d�      Zdaej,                   G d� de�      �       Zej,                   G d� de�      �       Z G d� d�      Zee_         G d� d�      Z G d � d!ee�      Z G d"� d#e�      Z G d$� d%ee�      Z G d&� d'�      Zee_        ee_         G d(� d)�      Z  G d*� d+e e�      Z! G d,� d-e!�      Z" G d.� d/e e�      Z# G d0� d1�      Z$e$e!_        e$e#_        y)3z�A fast, lightweight IPv4/IPv6 manipulation library in Python.
This library is used to create/poke/manipulate IPv4 and IPv6 addresses
and networks.
z1.0�    N�    �   c                   �   � e Zd ZdZy)�AddressValueErrorz%A Value Error related to the address.N��__name__�
__module__�__qualname__�__doc__� �    � /usr/lib/python3.12/ipaddress.pyr   r      �   � �/r
   r   c                   �   � e Zd ZdZy)�NetmaskValueErrorz%A Value Error related to the netmask.Nr   r   r
   r   r   r      r   r
   r   c                 �   � 	 t        | �      S # t        t        f$ r Y nw xY w	 t        | �      S # t        t        f$ r Y nw xY wt	        | �d��      �)a�  Take an IP string/int and return an object of the correct type.
    Args:
        address: A string or integer, the IP address.  Either IPv4 or
          IPv6 addresses may be supplied; integers less than 2**32 will
          be considered to be IPv4 by default.
    Returns:
        An IPv4Address or IPv6Address object.
    Raises:
        ValueError: if the *address* passed isn't either a v4 or a v6
          address
    z. does not appear to be an IPv4 or IPv6 address)�IPv4Addressr   r   �IPv6Address�
ValueError��addresss    r   �
ip_addressr      sg   � � 
��7�#�#���0�1� 
��
��
��7�#�#���0�1� 
��
�� ��{�"P�Q�
R�R�   �
 ���
. �A �A c                 �   � 	 t        | |�      S # t        t        f$ r Y nw xY w	 t        | |�      S # t        t        f$ r Y nw xY wt	        | �d��      �)a�  Take an IP string/int and return an object of the correct type.
    Args:
        address: A string or integer, the IP network.  Either IPv4 or
          IPv6 networks may be supplied; integers less than 2**32 will
          be considered to be IPv4 by default.
    Returns:
        An IPv4Network or IPv6Network object.
    Raises:
        ValueError: if the string passed isn't either a v4 or a v6
          address. Or if the network has host bits set.
    z. does not appear to be an IPv4 or IPv6 network)�IPv4Networkr   r   �IPv6Networkr   )r   �stricts     r   �
ip_networkr   9   sk   � � 
��7�F�+�+���0�1� 
��
��
��7�F�+�+���0�1� 
��
�� ��{�"P�Q�
R�Rs   � � � �0 �A�Ac                 �   � 	 t        | �      S # t        t        f$ r Y nw xY w	 t        | �      S # t        t        f$ r Y nw xY wt	        | �d��      �)ag  Take an IP string/int and return an object of the correct type.
    Args:
        address: A string or integer, the IP address.  Either IPv4 or
          IPv6 addresses may be supplied; integers less than 2**32 will
          be considered to be IPv4 by default.
    Returns:
        An IPv4Interface or IPv6Interface object.
    Raises:
        ValueError: if the string passed isn't either a v4 or a v6
          address.
    Notes:
        The IPv?Interface classes describe an Address on a particular
        Network, so they're basically a combination of both the Address
        and Network classes.
    z0 does not appear to be an IPv4 or IPv6 interface)�
IPv4Interfacer   r   �
IPv6Interfacer   r   s    r   �ip_interfacer"