+
    }iQ                       a  R t*0 t ^ RIHt ^ RIHtHtHtHtHtH	t	H
t
Ht ^ RIHtHt ^ RIHtHtHtHt ^RIHtHtHtHt  ^ RIt ^ RIHt  RtRtRt R t!Rt"R	R
RRRRRR/t#RR
RRRRRR/t$]]
]%R3,          ]]%,          ]%3,          t&] ^ k ] ! R R4      4       t'] ! R R4      4       t( ! R R4      t)R#   ] d    ^ RIt L}i ; i  ] d
    ^ RIHt  Li ; i)!    )	dataclass)AnyDictIterableListLiteralOptionalTupleUnion)BayesianNetworkget_possible_values)get_header_networkget_headers_orderget_browser_helper_fileget_input_network)get_browserget_user_agentpascalize_headerstuplifyN)	TypeAliasz*MISSING_VALUE*zSec-Fetch-Modez	same-sitezSec-Fetch-DestnavigatezSec-Fetch-Sitez?1zSec-Fetch-Userdocumentzsec-fetch-modezsec-fetch-destzsec-fetch-sitezsec-fetch-user.c                   B   a  ] tR t^.t o RtRtRtRtR tV 3R lt	Rt
V tR# )BrowserzORepresents a browser specification with name, min/max version, and HTTP versionN2c                   \        V P                  \        4      '       d   \        V P                  4      V n        \        V P                  \        4      '       df   \        V P
                  \        4      '       dD   V P                  V P
                  8  d'   \        R V P                   RV P
                   R24      hR# R# R# )z Browser min version constraint (z) cannot exceed max version ()N)
isinstancehttp_versionintstrmin_versionmax_version
ValueErrorselfs   &p/Users/ahmad/.openclaw/workspace/my-crawler/.venv/lib/python3.14/site-packages/browserforge/headers/generator.py__post_init__Browser.__post_init__7   s    d''-- #D$5$5 6D t''--4++S11  4#3#33243C3C2DDabfbrbrasstu  4 2 .    c                   < V ^8  d   Qh/ S[ ;R&   S[S[,          ;R&   S[S[,          ;R&   S[S[ S[3,          ;R&   # )   namer"   r#   r   )r!   r	   r    r   )format__classdict__s   "r'   __annotate__Browser.__annotate__.   sH      I	 
 #%  #%  S/' r*   r   )__name__
__module____qualname____firstlineno____doc__r"   r#   r   r(   __annotate_func____static_attributes____classdictcell__r/   s   @r'   r   r   .   s%     Y "&K!%K$'L  r*   r   c                   @   a  ] tR t^Ft o Rt]R 4       tV 3R ltRtV t	R# )HttpBrowserObjectzWRepresents an HTTP browser object with name, version, complete string, and HTTP versionc                     V P                   R 8H  # )r   r2   r%   s   &r'   is_http2HttpBrowserObject.is_http2O   s      C''r*   c                n   < V ^8  d   Qh/ S[ S[,          ;R&   S[S[R3,          ;R&   S[;R&   S[;R&   # )r,   r-   .versioncomplete_stringr   )r	   r!   r
   r    )r.   r/   s   "r'   r0   HttpBrowserObject.__annotate__F   sE      3-	 
 38_     r*    N)
r3   r4   r5   r6   r7   propertyr?   r8   r9   r:   r;   s   @r'   r=   r=   F   s#     a ( (  r*   r=   c                     a  ] tR t^Tt o RtR/t]! ]! 4       4      t]! ]	! 4       4      t
]]]R^R3V 3R lR lltRRRRR	RR
RRRRRRRRR/V 3R lR lltR0V 3R lR lltV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR  ltV 3R! lR" ltV 3R# lR$ ltV 3R% lR& lt]V 3R' lR( l4       t]V 3R) lR* l4       tV 3R+ lR, ltV 3R- ltR.t V t!R# )1HeaderGeneratorz4Generates HTTP headers based on a set of constraintszen-USFc                r   < V ^8  d   QhRS[ S[S[S[,          3,          RS[RS[RS[RS[R,          RS[/# )r,   browserosdevicelocaler   strict   r,   )r   ListOrStringr   r   r   bool)r.   r/   s   "r'   r0   HeaderGenerator.__annotate__]   sZ      8  8|Xg%667 8  8 	 8
  8 dm 8  8r*   c                    \        V4      pRV P                  \        V4      V4      R\        V4      R\        V4      R\        V4      RVRV/V n        V P	                  4       V n        V P                  4       V n        R# )a  
Initializes the HeaderGenerator with the given options.

Parameters:
    browser (Union[ListOrString, Iterable[Browser]], optional): Browser(s) or Browser object(s).
    os (ListOrString, optional): Operating system(s) to generate headers for.
    device (ListOrString, optional): Device(s) to generate the headers for.
    locale (ListOrString, optional): List of at most 10 languages for the Accept-Language header. Default is 'en-US'.
    http_version (Literal[1, 2], optional): Http version to be used to generate headers. Defaults to 2.
    strict (bool, optional): Throws an error if it cannot generate headers based on the input. Defaults to False.
browsersrK   deviceslocalesr   rN   N)r!   _prepare_browsers_configr   options_load_unique_browsersunique_browsers_load_headers_orderheaders_order)r&   rJ   rK   rL   rM   r   rN   http_vers   &&&&&&& r'   __init__HeaderGenerator.__init__]   sy    ( L) 55gg6FQ'"+wvwvHf
  $99;!557r*   rJ   NrK   rL   rM   r   
user_agentrN   request_dependent_headersc                  < V ^8  d   QhRS[ S[S[S[S[3,          ,          ,          RS[ S[,          RS[ S[,          RS[ S[,          RS[ S[R	,          ,          RS[ S[,          RS[ S[,          RS[ S[S[S[3,          ,          /# )
r,   rJ   rK   rL   rM   r   ra   rN   rb   rO   )	r	   r   r   r!   r   rQ   r   rR   r   )r.   r/   s   "r'   r0   rS      s     ) ) (5g#678) \"	)
 &) &) wt}-) \*) ) $,DcN#;)r*   c                  R\        V4      R\        V4      R\        V4      R\        V4      RV'       d   \        V4      MRRVR\        V4      R	V/p	V P                  ! R/ V	P                  4        U
Uu/ uF  w  rVf   K  WbK  	  upp
B pV	R,          ;'       g    V P                  R,          R
8X  d   \        V4      # V# u upp
i )ae  
Generates headers using the default options and their possible overrides.

Parameters:
    browser (Optional[Iterable[Union[str, Browser]]], optional): Browser(s) to generate the headers for.
    os (Optional[ListOrString], optional): Operating system(s) to generate the headers for.
    device (Optional[ListOrString], optional): Device(s) to generate the headers for.
    locale (Optional[ListOrString], optional): Language(s) to include in the Accept-Language header.
    http_version (Optional[Literal[1, 2]], optional): HTTP version to be used to generate headers.
    user_agent (Optional[ListOrString], optional): User-Agent(s) to use.
    request_dependent_headers (Optional[Dict[str, str]], optional): Known values of request-dependent headers.
    strict (Optional[bool], optional): If true, throws an error if it cannot generate headers based on the input.
rU   rK   rV   rW   r   NrN   ra   rb   r   rE   )r   r!   _get_headersitemsrY   r   )r&   rJ   rK   rL   rM   r   ra   rN   rb   rY   kv	generateds   &$$$$$$$$    r'   generateHeaderGenerator.generate   s    6 ('"+wvwvC-4f'*-')B	
 %)$5$5 %
 'A1tqtA%
	 N#CCt||N'CK$Y//	 Bs   4CCc          
         < V ^8  d   QhRS[ S[S[S[3,          ,          RS[ S[S[,          ,          RS[RS[S[S[3,          /# )r,   rb   ra   rY   return)r	   r   r!   r   r   )r.   r/   s   "r'   r0   rS      s]     eU eU#+DcN#;eU Xc]+eU 	eU
 
c3heUr*   c                  a Vf   / pRS9   g'   RS9   d1   SR,          V P                   R,          8w  d   V P                  S4       / V P                   CSCpV P                  V4      pV'       dX   \        V\        \
        34      '       g   \	        V4      p\        V P                  RV/4      \        V P                  RV/4      rvM/ / rvV P                  WVV4      pV P                  P                  V4      p	V	'       g   VR,          R8X  d2   V P                  ! W3/ SBRR/B p
V P                  \        V
4      4      # \        V3R l\        V P                   4       4       R4      pVR,          '       g   VR8X  d   \#        R	4      h/ SCpWP                   V,           V P                  ! W3/ VB # V P                  P%                  V	4      pV P'                  VR
,          4      pVP(                  '       d   RMRpV P+                  VR,          4      W&   V P-                  V4      '       d>   VP(                  '       d   VP/                  \0        4       MVP/                  \2        4       VP5                  4        UUu/ uFM  w  ppVP7                  4       R8X  d
   VR8X  d   K$  VP9                  R4      '       d   K=  V\:        8X  d   KJ  VVbKO  	  pppV P                  / VCVC4      # u uppi )aj  
Generates HTTP headers based on the given constraints.

Parameters:
    request_dependent_headers (Dict[str, str], optional): Dictionary of request-dependent headers.
    user_agent (Iterable[str], optional): User-Agent value(s).
    **options (Any): Additional options for header generation.

Returns:
    Dict[str, str]: Dictionary of generated HTTP headers.
rU   r   z
User-Agentz
user-agent1r   c              3   >   <"   T F  w  rVS9   g   K  Vx  K  	  R # 5iNrE   ).0ikeyrY   s   &  r'   	<genexpr>/HeaderGenerator._get_headers.<locals>.<genexpr>   s     T!AvqSG^!As   
rN   zoNo headers based on this input can be generated. Please relax or change some of the requirements you specified.*BROWSER_HTTPzaccept-languagezAccept-LanguagerW   
connectionclose*)rY   _update_http_version_get_possible_attribute_valuesr   tuplelistr   header_generator_network_prepare_constraintsinput_generator_network(generate_consistent_sample_when_possiblere   order_headersr   next	enumeraterelaxation_orderr$   generate_sample_prepare_http_browser_objectr?   _get_accept_language_header_should_add_sec_fetchupdateHTTP2_SEC_FETCH_ATTRIBUTESHTTP1_SEC_FETCH_ATTRIBUTESrf   lower
startswithMISSING_VALUE_DATASET_TOKEN)r&   rb   ra   rY   header_optionspossible_attribute_valueshttp1_valueshttp2_valuesconstraintsinput_sampleheaders2relaxation_indexrelaxed_optionsgenerated_samplegenerated_http_and_browseraccept_language_field_namerg   rh   s   &&&l              r'   re   HeaderGenerator._get_headers   s   " %,(*%  g%'4<<+GG%%g.4DLL4G4$($G$G$W!j5$-88":.
#D$A$ALR\C]^#D$A$ALR\C]^ '
 *,R,//%\
 33\\
 n-4,,-=DSV ))*;H*EFF#T4+@+@!ATVX  h''+;r+A  F  *kO 5 56F GH$$%>^o^^88HHV%)%F%F_-&
" "<!D!D!DJ[ 	# 8<7W7W9%8
4
 %%&@AA)222 ''(BC ''(BC
 )..0	
01	\)L	 
 <<$  33 AqD0 	 	
 !!"S%5"S9R"STT	
s   ;!K&!K&:K&K&c                6   < V ^8  d   QhRS[ S[S[3,          /# )r,   rY   )r   r!   r   )r.   r/   s   "r'   r0   rS     s      c3hr*   c           
        RV9   d   VR,          pMV P                   R,          pRV9   d   V P                  VR,          V4      VR&   R# V P                   R,           Uu. uFR  p\        V\        4      '       d.   \        VP                  VP
                  VP                  VR7      M\        W2R7      NKT  	  upVR&   R# u upi )z
Prepares options when a `browsers` or `http_version` kwarg is passed to .generate.

Parameters:
    options (Dict[str, Any]): Other arguments.
r   rU   )r-   r"   r#   r   r-   r   N)rY   rX   r   r   r-   r"   r#   )r&   rY   r   brwsrs   &&  r'   r|   $HeaderGenerator._update_http_version  s     W$">2L<<7L "&"?"?
@SUa"bGJ "\\*5# 6E "%11 "ZZ$)$5$5$)$5$5%1	 !eGH 6#GJ #s   AB?c                b   < V ^8  d   QhRS[ S[S[S[3,          ,          RS[RS[S[,          /# )r,   rU   r   rm   )r   r   r!   r   r   )r.   r/   s   "r'   r0   rS   2  s7     
 
 sG|!45
EH
	g
r*   c                t    V Uu. uF'  p\        V\        4      '       d   \        W2R7      MTNK)  	  up# u upi )a  
Prepares the browser configuration based on the given browsers and HTTP version.

Parameters:
    browsers (Iterable[Union[str, Browser]]): Supported browsers or Browser objects.
    http_version (str): HTTP version ('1' or '2').

Returns:
    List[Browser]: List of Browser objects.
r   )r   r!   r   )r&   rU   r   rJ   s   &&& r'   rX   (HeaderGenerator._prepare_browsers_config2  sI    & $
 $ gs++ W@ $
 	
 
s   -5c                F   < V ^8  d   QhRS[ S[,          RS[S[,          /# )r,   rU   rm   )r   r   r   r!   )r.   r/   s   "r'   r0   rS   H  s$     
 
(72C 
S	 
r*   c                   V UUu. uF  pV P                    F  pVP                  VP                  8X  g   K   VP                  '       d%   VP                  VP                  ^ ,          8:  g   KV  VP                  '       d%   VP                  VP                  ^ ,          8  g   K  VP
                  '       d   VP
                  VP
                  8X  g   K  VP                  NK  	  K  	  upp# u uppi )z
Retrieves the browser HTTP options based on the given browser specifications.

Parameters:
    browsers (Iterable[Browser]): Iterable of Browser objects.

Returns:
    List[str]: List of browser HTTP options.
)r[   r-   r"   rB   r#   r   rC   )r&   rU   rJ   browser_options   &&  r'   _get_browser_http_options)HeaderGenerator._get_browser_http_optionsH  s     $
#"&"6"6||~222 + (((G,?,?>CYCYZ[C\,\	 +
 (((G,?,?>CYCYZ[C\,\ + )))W-A-A^E`E`-` +N**"6 +#
 	
 
s.   ,C*C*	C*-C*?C*#C*5C*C*c                R   < V ^8  d   QhRS[ S[S[3,          RS[ S[S[3,          /# )r,   headersrm   )r   r!   )r.   r/   s   "r'   r0   rS   \  s+     
 
T#s(^ 
S#X 
r*   c                    \        V4      pVf   \        R4      h\        V4      pVf   \        R4      hV P                  P	                  V4      pV'       d"   V Uu/ uF  qUV9   g   K  WQV,          bK  	  up# T# u upi )z
Orders the headers based on the browser-specific header order.

Parameters:
    headers (Dict[str, str]): Dictionary of headers.

Returns:
    Dict[str, str]: Ordered dictionary of headers.
z/Failed to find User-Agent in generated responsez$Failed to find browser in User-Agent)r   r$   r   r]   get)r&   r   ra   browser_nameheader_orderrt   s   &&    r'   r   HeaderGenerator.order_headers\  s     $G,
NOO":.CDD))--l;  +7I,3.S#,,I	
 	
Is   A;)A;c                b   < V ^8  d   QhRS[ S[S[3,          RS[ S[S[S[,          3,          /# )r,   r   rm   )r   r!   r   r   )r.   r/   s   "r'   r0   rS   v  s2     ) )"38n)	c49n	)r*   c                    V P                  VP                  RR	4      VP                  RR4      4      pV P                  V4      pRVRVP                  R\        4      /pRV9   d   VR,          VR&   V# )
z
Retrieves the possible attribute values based on the given header options.

Parameters:
    header_options (Dict[str, Any]): Dictionary of header options.

Returns:
    Dict[str, List[str]]: Dictionary of possible attribute values.
rU   r   r   rw   z*OPERATING_SYSTEMrK   rV   z*DEVICErE   )rX   r   r   SUPPORTED_OPERATING_SYSTEMS)r&   r   rU   browser_http_optionsr   s   &&   r'   r}   .HeaderGenerator._get_possible_attribute_valuesv  s     00z2.~s3
  $==hG 1!3!3D:U!V%
! &3A)3L%i0((r*   c                &   < V ^8  d   QhRS[ RS[/# )r,   rJ   rm   )r=   rR   )r.   r/   s   "r'   r0   rS     s      -> 4 r*   c                   VP                   R8X  d   VP                  ^ ,          ^L8  d   R# VP                   R8X  d   VP                  ^ ,          ^Z8  d   R# VP                   R8X  d   VP                  ^ ,          ^O8  d   R# R# )z
Determines whether Sec-Fetch headers should be added based on the user agent.

Parameters:
    browser (HttpBrowserObject): Browser object.

Returns:
    bool: True if Sec-Fetch headers should be added, False otherwise.
chromeTfirefoxedgeF)r-   rB   )r&   rJ   s   &&r'   r   %HeaderGenerator._should_add_sec_fetch  sd     <<8#(:b(@<<9$);r)A<<6!gooa&8B&>r*   c                &   < V ^8  d   QhRS[ RS[/# )r,   rW   rm   )rQ   r!   )r.   r/   s   "r'   r0   rS     s     
 
< 
C 
r*   c                D    RP                  R \        V4       4       4      # )z
Generates the Accept-Language header based on the given locales.

Parameters:
    locales (ListOrString): Locale(s).

Returns:
    str: Accept-Language header string.
z, c              3   R   "   T F  w  rV R RVR,          ,
          R 2x  K  	  R# 5i)z;q=g      ?g?z.1fNrE   )rr   indexrM   s   &  r'   ru   >HeaderGenerator._get_accept_language_header.<locals>.<genexpr>  s-      
GYmevhc#+C01GYs   %')joinr   )r&   rW   s   &&r'   r   +HeaderGenerator._get_accept_language_header  s(     yy 
GPQXGY
 
 	
r*   c                F   < V ^8  d   QhRS[ S[S[S[,          3,          /# r,   rm   )r   r!   r   )r.   r/   s   "r'   r0   rS     s!     < <T#tCy.%9 <r*   c                Z    \         P                  ! \        4       P                  4       4      # )z
Loads the headers order from the headers-order.json file.

Returns:
    Dict[str, List[str]]: Dictionary of headers order for each browser.
)jsonloadsr   
read_bytesr%   s   &r'   r\   #HeaderGenerator._load_headers_order  s      zz+-88:;;r*   c                0   < V ^8  d   QhRS[ S[,          /# r   )r   r=   )r.   r/   s   "r'   r0   rS     s     
 
t,='> 
r*   c                    \         P                  ! \        4       P                  4       4      pV Uu. uF!  pV\        8w  g   K  V P                  V4      NK#  	  up# u upi )z
Loads the unique browsers from the browser-helper-file.json file.

Returns:
    List[HttpBrowserObject]: List of HttpBrowserObject instances.
)r   r   r   r   r   r   )r&   unique_browser_stringsbrowser_strs   &  r'   rZ   %HeaderGenerator._load_unique_browsers  s]     "&,C,E,P,P,R!S  6
599 ;D--k:5
 	
 
s   AAc                   < V ^8  d   QhRS[ S[S[S[,          3,          RS[ S[S[3,          RS[ S[S[3,          RS[ S[S[S[,          3,          /# )r,   r   r   r   rm   )r   r!   r   r   r   )r.   r/   s   "r'   r0   rS     s^     
 
#'T#Y#7
 38n
 38n	

 
c8C= 	!
r*   c                   a aaa VP                  4        UaUu/ uF#  w  opS\        \        VVVV 3R lV4      4      bK%  	  upp# u uppi )a  
Prepares the constraints for generating consistent samples.

Parameters:
    possible_attribute_values (Dict[str, List[str]]): Dictionary of possible attribute values.
    http1_values (Dict[str, Any]): Dictionary of HTTP/1 values.
    http2_values (Dict[str, Any]): Dictionary of HTTP/2 values.

Returns:
    Dict[str, Iterable[str]]: Dictionary of constraints for each attribute.
c                 `   < SR 8X  d   SP                  V SS4      # SP                  V SSS4      # )rw   )filter_browser_httpfilter_other_values)xr   r   rt   r&   s   &r'   <lambda>6HeaderGenerator._prepare_constraints.<locals>.<lambda>  s@    /1 00L,O Z!55a|UXYZr*   )rf   r~   filter)r&   r   r   r   rt   valuess   f&ff` r'   r   $HeaderGenerator._prepare_constraints  s[    8  9>>@
  AV 
 	 	  A
 	
 
s   )Ac                ^   < V ^8  d   QhRS[ RS[S[ S[3,          RS[S[ S[3,          RS[/# )r,   valuer   r   rm   r!   r   r   rR   )r.   r/   s   "r'   r0   rS     s=     
 

"&sCx.
@DS#X
	
r*   c                    V P                  R4      w  r4VR8X  d$   V'       * ;'       g    W1P                  RR4      9   # V'       * ;'       g    W2P                  RR4      9   # )aD  
Filters the browser HTTP value based on the HTTP/1 and HTTP/2 values.

Parameters:
    value (str): Browser HTTP value.
    http1_values (Dict[str, Any]): Dictionary of HTTP/1 values.
    http2_values (Dict[str, Any]): Dictionary of HTTP/2 values.

Returns:
    bool: True if the value should be included, False otherwise.
|ro   z*BROWSERrE   )splitr   )r   r   r   r   r   s   &&&  r'   r   #HeaderGenerator.filter_browser_http  sj     &+[[%5" s" QQ1A1A*b1Q!Q	
 #"VVl6F6FzSU6V&V	
r*   c          
      d   < V ^8  d   QhRS[ RS[S[ S[3,          RS[S[ S[3,          RS[ RS[/# )r,   r   r   r   rt   rm   r   )r.   r/   s   "r'   r0   rS     sE      "&sCx.@DS#XUX	r*   c                    V'       g	   V'       d1   WP                  VR4      9   ;'       g    WP                  VR4      9   # R# )ac  
Filters the other attribute values based on the HTTP/1 and HTTP/2 values.

Parameters:
    value (str): Attribute value.
    http1_values (Dict[str, Any]): Dictionary of HTTP/1 values.
    http2_values (Dict[str, Any]): Dictionary of HTTP/2 values.
    key (str): Attribute key.

Returns:
    bool: True if the value should be included, False otherwise.
TrE   )r   )r   r   r   rt   s   &&&&r'   r   #HeaderGenerator.filter_other_values  s<      <,,S"55[[BRBRSVXZB[9[[r*   c                &   < V ^8  d   QhRS[ RS[/# )r,   http_browser_stringrm   )r!   r=   )r.   r/   s   "r'   r0   rS     s     
 
 
HY 
r*   c                "   VP                  R4      w  r#V\        8X  d   \        RR\        RR7      # VP                  R4      w  rEVP                  R4      p\        ;QJ d    . R V 4       F  NK  	  5M! R V 4       4      p\        VVVVR7      # )	z
Extracts structured information about a browser and HTTP version from a string.

Parameters:
    http_browser_string (str): HTTP browser string.

Returns:
    HttpBrowserObject: HttpBrowserObject instance.
r   N )r-   rB   rC   r   /.c              3   8   "   T F  p\        V4      x  K  	  R # 5irq   )r    )rr   parts   & r'   ru   ?HeaderGenerator._prepare_http_browser_object.<locals>.<genexpr>#  s     <mdD		ms   rE   )r   r   r=   r~   )r&   r   browser_stringr   r   version_stringversion_partsrB   s   &&      r'   r   ,HeaderGenerator._prepare_http_browser_object  s     (;'@'@'E$88$27Rac  (6';';C'@$&,,S1%<m<%%<m<< /%	
 	
r*   c                :   < V ^8  d   Qh/ S[ S[R3,          ;R&   # )r,   .r   )r
   r!   )r.   r/   s   "r'   r0   rS   T   s      CHo^ r*   )r]   rY   r[   )rW   rV   operatingSystemsrU   )NN)"r3   r4   r5   r6   r7   r   r   r   r   r   r   SUPPORTED_BROWSERSr   SUPPORTED_DEVICESr_   rj   re   r|   rX   r   r   r}   r   r   r\   rZ   r   staticmethodr   r   r   r8   r9   r:   r;   s   @r'   rH   rH   T   sY    >(^ ..?.AB./A/CD ;M60&&' 8  8D) <@) &*	)
 *.) *.) 15) .2) "&) ?C) )VeU eUN B
 
,
 
(
 
4) )6 $
 
< <
 

 
> 
 
*  &
 
{  r*   rH   c                @    V ^8  d   Qh/ ^ \         9   d
   \        ;R&   # )r,   rQ   )__conditional_annotations__r   )r.   s   "r'   r0   r0      s     ! !T A @i @U "r*   )r   r   safarir   )windowsmacoslinuxandroidios)desktopmobile)ro   r   )+r   dataclassesr   typingr   r   r   r   r   r	   r
   r   browserforge.bayesian_networkr   r   apify_fingerprint_datapointsr   r   r   r   utilsr   r   r   r   orjsonr   ImportErrorr   typing_extensionsr   r   r   SUPPORTED_HTTP_VERSIONSr   r   r   r!   rQ   r   r=   rH   r0   )r   s   @r'   <module>r     s    ! ! M M M N  K J, 
 < M ) $ / kjdj	  kjdj	   c3hcC ?@ @   . 
( 
( 
(U
 U
I  
  ,+,s$   B6 C 6CCCC