+
    }i                     "   ^ RI t ^ RIt^ RIHt ^ RIHt ^ RIHt ^ RIH	t	H
t
Ht ^ RIt^ RIHt ^RIHtHt  ] ! R R	4      4       t]! ^R
R7      R R l4       t]! ^R
R7      R R l4       tR R lt]R 4       t]! RR7      RR R ll4       tR# )    N)contextmanager)	dataclass)	lru_cache)DictOptionalTuple)InsecureRequestWarning)	InvalidIPInvalidProxyc                      a  ] tR t^t o RtRtRt]V 3R lR l4       tV 3R lR lt	]V 3R lR l4       t
V 3R	 ltR
tV tR# )Proxyz
Stores proxy information.
Nc                P   < V ^8  d   QhRS[ RS[S[ S[ S[S[ ,          3,          /# )   serverreturn)strr   r   )format__classdict__s   "]/Users/ahmad/.openclaw/workspace/my-crawler/.venv/lib/python3.14/site-packages/camoufox/ip.py__annotate__Proxy.__annotate__   s/     N NS NU3Xc]+B%C N    c                    \         P                  ! RV 4      pV'       g   \        RV  24      hVR,          VR,          VR,          3# )z!
Parses the proxy server string.
z9^(?:(?P<schema>\w+)://)?(?P<url>.*?)(?:\:(?P<port>\d+))?$zInvalid proxy server: schemaurlport)rematchr   )r   proxy_matchs   & r   parse_serverProxy.parse_server   sH    
 hh[]cd!7x@AA8$k%&8+f:MMMr   c                    < V ^8  d   QhRS[ /# )r   r   r   )r   r   s   "r   r   r   &   s      3 r   c                D   V P                  V P                  4      w  rpV'       g   R pV R2pV P                  '       dE   W@P                   ,          pV P                  '       d   VRV P                   2,          pVR,          pWB,          pV'       d   VRV 2,          pV# )httpz://:@)r    r   usernamepassword)selfr   r   r   results   &    r   	as_stringProxy.as_string&   s     --dkk:TF83===(F}}}Admm_--cMF$j Fr   c                <   < V ^8  d   QhRS[ RS[S[ S[ 3,          /# )r   proxy_stringr   )r   r   )r   r   s   "r   r   r   7   s#     
 
 
S#X 
r   c                    RV RV /# )z4
Converts the proxy to a requests proxy dictionary.
r%   https )r/   s   &r   as_requests_proxyProxy.as_requests_proxy6   s     L\
 	
r   c                ^   < V ^8  d   Qh/ S[ ;R&   S[S[ ,          ;R&   S[S[ ,          ;R&   # )r   r   r(   r)   )r   r   )r   r   s   "r   r   r      s3      K  sm"  sm" r   r2   )__name__
__module____qualname____firstlineno____doc__r(   r)   staticmethodr    r,   r3   __annotate_func____static_attributes____classdictcell__)r   s   @r   r   r      sP     
 #H"HN N   
 
K  r   r   T)typedc                0    V ^8  d   QhR\         R\        /# r   ipr   r   bool)r   s   "r   r   r   B   s     B B3 B4 Br   c                 B    \        \        P                  ! R V 4      4      # )z^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$rD   r   r   rB   s   &r   
valid_ipv4rH   A   s    ;R@AAr   c                0    V ^8  d   QhR\         R\        /# rA   rC   )r   s   "r   r   r   G   s     O O3 O4 Or   c                 B    \        \        P                  ! R V 4      4      # )z,^(([0-9a-fA-F]{0,4}:){1,7}[0-9a-fA-F]{0,4})$rF   rG   s   &r   
valid_ipv6rK   F   s    H"MNNr   c                (    V ^8  d   QhR\         RR/# )r   rB   r   Nr#   )r   s   "r   r   r   K   s     5 5C 5D 5r   c                 j    \        V 4      '       g"   \        V 4      '       g   \        R V  24      hR# R# )zInvalid IP address: N)rH   rK   r
   rG   s   &r   validate_iprN   K   s-    b>>*R...rd344 #1>r   c               #      "   \         P                  ! 4       ;_uu_ 4        \         P                  ! R \        R7       Rx  RRR4       R#   + '       g   i     R# ; i5i)ignore)categoryN)warningscatch_warningsfilterwarningsr	   r2   r   r   _suppress_insecure_warningrU   P   s6     		 	 	"	"3IJ 
#	"	"	"s   A!A
AA		A)maxsizec                F    V ^8  d   QhR\         \        ,          R\        /# )r   proxyr   )r   r   )r   s   "r   r   r   X   s     0 0Xc] 0c 0r   c           
        . ROpV F  p \        4       ;_uu_ 4        \        P                  ! TV '       d   \        P	                  V 4      MR^RR7      pRRR4       XP                  4        VP                  P                  4       p\        V4       Vu # 	  \        R4      h  + '       g   i     LV; i  \        P                  P                   d   p\        RT  24      ThRp?i\        P                  \        3 d     K  i ; i)z$
Sends a request to a public IP api
NF)proxiestimeoutverifyzFailed to connect to proxy: zFailed to get IP address)zhttps://api.ipify.orgzhttps://checkip.amazonaws.comzhttps://ipinfo.io/ipzhttps://icanhazip.comzhttps://ifconfig.co/ipzhttps://ipecho.net/plain)rU   requestsgetr   r3   raise_for_statustextstriprN   
exceptions
ProxyErrorr   RequestExceptionr
   )rX   URLSr   resprB   es   &     r   	public_iprh   W   s    
	D 	+--||>CE33E: 	 . !!#"BOI " .
// .- ""-- 	N!=eWEFAM))95 		s:   B68B#>B6#B3.B66DC$$DDD)N)r   rR   
contextlibr   dataclassesr   	functoolsr   typingr   r   r   r]   urllib3.exceptionsr	   rb   r
   r   r   rH   rK   rN   rU   rh   r2   r   r   <module>rn      s    	  % !  ( (  5 /
 +
 +
 +
\ 3dB B 3dO O5
   40 0r   