+
    BiX                         ^ RI t ^ RIt^ RIt^ RIHt ^ RIt^ RIHt  ! R R]P                  4      t	 ! R R]P                  4      t
R t]R	8X  d   ]P                  ! 4        R# R# )
    N)cookies)supportc                      a  ] tR t^t o R tR tR t]P                  ! R4      R 4       t	R t
R tR tR	 tR
 tR tR tR tR tR tR tR tR tR tR tRtV tR# )CookieTestsc                >   R RRRRRR/RRR	R
/R RRRR/RRR	R/R RRRR/RRR	R/R RRRR/RRR	R/R RRRRRRRRR R!/RR"R	R#P                  R&4      /.pV F  p\        P                  ! 4       pVP                  VR ,          4       V P	                  \        V4      VR,          4       V P	                  VP                  R#R$7      VR	,          4       \        VR,          P                  4       4       F'  w  rEV P	                  W4,          P                  V4       K)  	  K  	  R%# )'datazchips=ahoy; vienna=fingerdictchipsahoyviennafingerreprz,<SimpleCookie: chips='ahoy' vienna='finger'>outputz0Set-Cookie: chips=ahoy
Set-Cookie: vienna=fingerz)keebler="E=mc2; L=\"Loves\"; fudge=\012;"keeblerzE=mc2; L="Loves"; fudge=
;z5<SimpleCookie: keebler='E=mc2; L="Loves"; fudge=\n;'>z5Set-Cookie: keebler="E=mc2; L=\"Loves\"; fudge=\012;"zkeebler=E=mc2zE=mc2z<SimpleCookie: keebler='E=mc2'>zSet-Cookie: keebler=E=mc2zkey:term=value:termzkey:termz
value:termz%<SimpleCookie: key:term='value:term'>zSet-Cookie: key:term=value:termza=b; c=[; d=r; f=habc[drfhz'<SimpleCookie: a='b' c='[' d='r' f='h'>
)sepN)zSet-Cookie: a=bzSet-Cookie: c=[zSet-Cookie: d=rzSet-Cookie: f=h)
joinr   SimpleCookieloadassertEqualr   r   sorteditemsvalue)selfcasescaseCkvs   &     -/usr/lib/python3.14/test/test_http_cookies.py
test_basicCookieTests.test_basic   sk   0gfhx8CJL
 Ci"ABQQS _i'*624 +j<0<8: ,S#c3sC<A$)) % 	
7&
P D$$&AFF4< T!Wd6l3QXX$X/h@tF|1134  Q/ 5     c           	        R RRR/R RRR/R RRR/R RRR	/R R
RR/R RRR/.pV F  pV P                  VR ,          R7      ;_uu_ 4        \        P                  ! 4       pVP                  VR ,          4       VR ,          P	                  R4      ^ ,          pV P                  WC4       V P                  W4,          P                  R4      VR,          4       RRR4       K  	  R#   + '       g   i     K  ; i)r   z3key=value; expires=Saturday, 01-Jan-83 00:00:00 GMTr   z Saturday, 01-Jan-83 00:00:00 GMTz1key=value; expires=Friday, 19-Nov-82 16:59:30 GMTzFriday, 19-Nov-82 16:59:30 GMTz1key=value; expires=Sunday, 06-Nov-94 08:49:37 GMTzSunday, 06-Nov-94 08:49:37 GMTz4key=value; expires=Wednesday, 09-Nov-94 08:49:37 GMTz!Wednesday, 09-Nov-94 08:49:37 GMTz1key=value; expires=Friday, 11-Nov-94 08:49:37 GMTzFriday, 11-Nov-94 08:49:37 GMTz1key=value; expires=Monday, 14-Nov-94 08:49:37 GMTzMonday, 14-Nov-94 08:49:37 GMT)r   =expiresN)subTestr   r   r   splitassertInr   get)r"   
test_casesr$   r%   cookie_names   &    r(    test_obsolete_rfc850_date_format,CookieTests.test_obsolete_rfc850_date_format>   s    M<
 K: K: N=
 K:
 K:5

@ D4<00((*tF|$ #6l005a8 k-  !3!3I!>XO 10 000s   BC!!C2c                "   . ROpV Fp  w  r#V P                  V4      ;_uu_ 4        \        P                  ! 4       pVP                  V4       V P	                  VR,          P
                  V4       RRR4       Kr  	  R#   + '       g   i     K  ; i)a="b=\""r   N))r8   b=")za="b=\\"b=\)za="b=\="zb==)za="b=\n"zb=n)z
a="b=\042"r9   )z
a="b=\134"r:   )z
a="b=\377"u   b=ÿ)z
a="b=\400"zb=400)z	a="b=\42"zb=42)za="b=\\042"zb=\042)za="b=\\134"zb=\134)z
a="b=\\\""b=\")za="b=\\\042"r;   )za="b=\134\""r;   )za="b=\134\042"r;   )r/   r   r   r   r   r!   )r"   r#   encodeddecodedr%   s   &    r(   test_unquoteCookieTests.test_unquotel   sj    
" !&Gg&&((*w  3w7 '& !&&&&s   A
A==Bcpuc                   RpR	 F  pV P                  V4      ;_uu_ 4        RW!,          ,           R,           p\        P                  ! 4       pVP                  V4       VR,          P                  pV P                  VR,          R4       V P                  VR
R R4       V P                  \        V4      V^,           4       RRR4       K  	  R#   + '       g   i     K  ; i)
   za="b=z;"r   :N   Nr:   Nz\;i@B )z\\z\134)r/   r   r   r   r!   r   len)r"   nr<   r   r%   r!   s   &     r(   test_unquote_largeCookieTests.test_unquote_large   s    %Gg&&*T1((*t#  rF3  rsU3  UQU3 '& &&&&s   B CC c                   \         P                  ! 4       pVP                  R 4       V P                  VR,          P                  R4       V P                  VR,          R,          R4       V P                  VR,          R,          R4       V P                  VP                  R.4      R4       V P                  VP                  4       R4       V P                  VP                  R.4      R	4       R
# )z/Customer="WILE_E_COYOTE"; Version=1; Path=/acmeCustomerWILE_E_COYOTEversion1path/acme0Set-Cookie: Customer="WILE_E_COYOTE"; Path=/acme
        <script type="text/javascript">
        <!-- begin hiding
        document.cookie = "Customer=\"WILE_E_COYOTE\"; Path=/acme; Version=1";
        // end hiding -->
        </script>
        
        <script type="text/javascript">
        <!-- begin hiding
        document.cookie = "Customer=\"WILE_E_COYOTE\"; Path=/acme";
        // end hiding -->
        </script>
        Nr   r   r   r   r!   r   	js_outputr"   r%   s   & r(   	test_loadCookieTests.test_load   s      "	@A:,,o>:y137:v.86(+>	@ ) 	 	fX. 1 	r+   c                ~    \         P                  ! 4       pR VR&   V P                  VP                  R.4      R4       R# )zsome,funky;stuffvalz(Set-Cookie: val="some\054funky\073stuff"Nr   r   r   r   rU   s   & r(   test_extended_encode CookieTests.test_extended_encode   s9       "%%5'*8	:r+   c                &   \         P                  ! R 4      p^ VR,          R&   V P                  VP                  4       R4       \         P                  ! 4       pVP	                  R4       V P                  VR,          R,          R4       \         P                  ! 4       pVP	                  R4       V P                  VR,          R,          R4       \         P                  ! R 4      p^
VR,          R&   V P                  VP                  4       R	4       R
# )Customer="WILE_E_COYOTE"rJ   r.   GMTz3Customer="W"; expires=Wed, 01 Jan 2010 00:00:00 GMTzWed, 01 Jan 2010 00:00:00 GMTz1Customer="W"; expires=Wed, 01 Jan 98 00:00:00 GMTzWed, 01 Jan 98 00:00:00 GMTmax-agez0Set-Cookie: Customer="WILE_E_COYOTE"; Max-Age=10N)r   r   assertEndsWithr   r   r   rU   s   & r(   test_special_attrsCookieTests.test_special_attrs   s      !;<#$*i AHHJ.   "	DE:y18	:  "	BC:y16	8   !;<#%*i K	Mr+   c                    \         P                  ! R 4      pRVR,          R&   RVR,          R&   V P                  VP                  4       R4       R# )r^   TrJ   securehttponlyz6Set-Cookie: Customer="WILE_E_COYOTE"; HttpOnly; SecureNrZ   rU   s   & r(   test_set_secure_httponly_attrs*CookieTests.test_set_secure_httponly_attrs   sI      !;<"&*h$(*j!D	Fr+   c                    \         P                  ! R 4      pRVR,          R&   RVR,          R&   RVR,          R&   V P                  VP                  4       R4       R# )r^   TrJ   re   rf   partitionedzCSet-Cookie: Customer="WILE_E_COYOTE"; HttpOnly; Partitioned; SecureNrZ   rU   s   & r(   *test_set_secure_httponly_partitioned_attrs6CookieTests.test_set_secure_httponly_partitioned_attrs   sW      !;<"&*h$(*j!'+*m$Q	Sr+   c                   . ROpV F  pV P                  VR7      ;_uu_ 4        \        P                  ! R4      pW#R,          R&   V P                  VP	                  4       RV,          4       \        P                  ! 4       pVP                  RV,          4       V P                  VR,          R,          V4       RRR4       K  	  R#   + '       g   i     K  ; i)	Strict)rY   r^   rJ   samesitez1Set-Cookie: Customer="WILE_E_COYOTE"; SameSite=%sz%Customer="WILL_E_COYOTE"; SameSite=%sN)rn   Laxstrictlax)r/   r   r   r   r   r   )r"   samesite_valuesrY   r%   s   &   r(   test_samesite_attrsCookieTests.test_samesite_attrs   s    <"C#&&(()CD,/*j)  G#MO ((*>DE  :z!:C@ '& #&&&s   BCCc                    \         P                  ! 4       pVP                  R 4       V P                  VR,          R,          4       V P                  VR,          R,          4       R# )zeggs=scrambled; Path=/baconeggsrf   re   N)r   r   r   assertFalserU   s   & r(   )test_secure_httponly_false_if_not_present5CookieTests.test_secure_httponly_false_if_not_present   sK      "	,-6:./68,-r+   c                    \         P                  ! 4       pVP                  R 4       V P                  VR,          R,          4       V P                  VR,          R,          4       R# )z-eggs=scrambled; httponly; secure; Path=/baconrw   rf   re   N)r   r   r   
assertTruerU   s   & r(   $test_secure_httponly_true_if_present0CookieTests.test_secure_httponly_true_if_present   sG      "	>?&	*-.&	(+,r+   c                N   \         P                  ! 4       pVP                  R 4       V P                  VR,          R,          4       V P                  VR,          R,          4       V P	                  VR,          R,          R4       V P	                  VR,          R,          R4       R# )z5eggs=scrambled; httponly=foo; secure=bar; Path=/baconrw   rf   re   foobarN)r   r   r   r|   r   rU   s   & r(   'test_secure_httponly_true_if_have_value3CookieTests.test_secure_httponly_true_if_have_value   s}       "	FG&	*-.&	(+, 	6:.668,e4r+   c                    \         P                  ! 4       pVP                  R 4       V P                  VP	                  4       R4       R# )z=eggs  =  scrambled  ;  secure  ;  path  =  bar   ; foo=foo   zASet-Cookie: eggs=scrambled; Path=bar; Secure
Set-Cookie: foo=fooN)r   r   r   r   r   rU   s   & r(   test_extra_spacesCookieTests.test_extra_spaces   s7      "	NOQ	Sr+   c                   \         P                  ! 4       pVP                  R 4       V P                  VR,          P                  R4       V P                  VR,          R,          R4       V P                  VR,          R,          R4       V P                  VP                  R.4      R4       V P                  VP                  4       R4       V P                  VP                  R.4      R	4       R
# )z3Customer="WILE_E_COYOTE"; Version="1"; Path="/acme"rJ   rK   rL   rM   rN   rO   rP   rQ   rR   NrS   rU   s   & r(   test_quoted_metaCookieTests.test_quoted_meta  s      "	DE:,,o>:y137:v.86(+K	M ) 	 	fX. 1 	r+   c                    \         P                  ! 4       pR FO  pVP                  V4       V P                  \	        V4      / 4       V P                  VP                  4       R4       KQ  	  R# )]foo=x N)
r   z[foo=xz
blah]foo=xz
blah[foo=xzSet-Cookie: foo=barzSet-Cookie: foozfoo=bar; bazzbaz; foo=barzsecure;foo=barzVersion=1;foo=bar)r   r   r   r   r	   r   )r"   r%   ss   &  r(   test_invalid_cookies CookieTests.test_invalid_cookies  sS      "9A FF1IT!Wb)QXXZ,9r+   c           
        R pRV,          p\         P                  ! 4       pVP                  V4       V P                  VP	                  4       V4       \        \        P                  ^,           4       Fq  pV P                  VR7      ;_uu_ 4        \        P                  ! \        P                  ! W4R7      4      pV P                  VP	                  4       V4       RRR4       Ks  	  R#   + '       g   i     K  ; i)z/Customer="WILE_E_COYOTE"; Path=/acme; Version=1zSet-Cookie: %sproto)protocolN)r   r   r   r   r   rangepickleHIGHEST_PROTOCOLr/   loadsdumps)r"   rawdataexpected_outputr%   r   C1s   &     r(   test_pickleCookieTests.test_pickle(  s    C*W4  "	w_5622Q67EE**\\&,,q"AB  o> +* 8***s   AC))C:c                    R p\         P                  ! 4       pV P                  \         P                  4      ;_uu_ 4        VP	                  V4       RRR4       R#   + '       g   i     R# ; i)z
a=b; c,d=eN)r   r   assertRaisesCookieErrorr   )r"   r   r%   s   &  r(   test_illegal_charsCookieTests.test_illegal_chars5  sF      "w2233FF7O 4333s   AA,	c                    \         P                  ! 4       pR VR&   V P                  \        VR,          4      R4       RVR,          R&   V P                  \        VR,          4      R4       R# )   ©r   zSet-Cookie: foo="\251"u
   comment ©commentz.Set-Cookie: foo="\251"; Comment="comment \251"N)r   r   r   str)r"   r   s   & r(   test_comment_quoting CookieTests.test_comment_quoting;  s\      "'%QuX(AB:%%M>	
r+    N)__name__
__module____qualname____firstlineno__r)   r5   r>   r   requires_resourcerG   rV   r[   rb   rg   rk   rt   ry   r}   r   r   r   r   r   r   r   __static_attributes____classdictcell____classdict__s   @r(   r   r      s     /0b,P\80 u%
4 &
42:M.FSA.-
5S2	-?
 
r+   r   c                   b   a  ] tR tRt o R tR tR tR tR tR t	R t
R	 tR
 tR tR tRtV tR# )MorselTestsiF  c                   \         P                  ! 4       pV P                  VP                  4       V P                  VP                  4       V P                  VP
                  4       V P                  VP                  4       \         P                  P                  P                  4       4       VP                  4        F  w  r#V P                  VR V4       K  	  R# r   N)
r   MorselassertIsNonekeyr!   coded_valuer   keys	_reservedr    )r"   morselr   rY   s   &   r(   test_defaultsMorselTests.test_defaultsI  s    !&**%&,,'&,,-(@(@(E(E(GHHCS"c* 'r+   c                   \         P                  ! 4       pVP                   F.  pV P                  VP	                  V4      4       R V,          W&   K0  	  VP                   F"  pV P                  W,          R V,          4       K$  	  RP                  4        F6  pV P                  \         P                  VP                  VR V,          4       K8  	  R# )%s_valuezthe holy hand grenadeN)
r   r   r   r|   isReservedKeyr   r0   r   r   __setitem__)r"   Mis   &  r(   test_reserved_keysMorselTests.test_reserved_keysR  s    NNAOOAOOA./>AD  AQT:>2  )..0Ag11mmQ
Q@ 1r+   c           	     V   \         P                  ! 4       pVP                   F>  pV P                  \         P                  VP
                  VR V,          R V,          4       K@  	  RP                  4        F  pRVR&   VP                  VRV,          RV,          4       V P                  VP                  V4       V P                  VP                  RV,          4       V P                  VP                  RV,          4       V P                  VP                  4       RV: RRV,          : R24       R	V: RRV,          : R
2pV P                  VP                  4       V4       K  	  R F>  pV P                  \         P                  VP
                  VR V,          R V,          4       K@  	  R# )r   z(thou cast _the- !holy! ^hand| +*grenade~z/foorN   z%s_valz%s_coded_valzSet-Cookie: r-   z; Path=/fooz^
        <script type="text/javascript">
        <!-- begin hiding
        document.cookie = "zB; Path=/foo";
        // end hiding -->
        </script>
        N)zfoo barzfoo@bar)r   r   r   r   r   setr0   r   r   r!   r   r   rT   )r"   r   r   expected_js_outputs   &   r(   test_setterMorselTests.test_settera  sW   NNAg11eeQ
Q
QH  <AACA AfIEE!X\>A#56QUUA&QWWhl3Q]]NQ,>?
23^a5G5GHJ .1$$"& Q[[],>?% D& (Ag11eeQ
Q
QH (r+   c                   \         P                  ! 4       pV P                  \        4      ;_uu_ 4        R Vn        RRR4       V P                  \        4      ;_uu_ 4        R Vn        RRR4       V P                  \        4      ;_uu_ 4        R Vn        RRR4       R#   + '       g   i     Ll; i  + '       g   i     LR; i  + '       g   i     R# ; ir   )r   r   r   AttributeErrorr   r!   r   r"   r   s   & r(   test_set_propertiesMorselTests.test_set_properties  s    !~..FJ /~..FL /~..!#F /.	 /......s#   B B2CB/	2C	C	c                L   RpRRRRRRR^/p\         P                  ! 4       pVP                  V4       VP                  ! V!   \         P                  ! 4       pVP                  V4       VP                  ! V!   V P	                  W48H  4       V P                  W48g  4       RpV F  pV P                  V4      ;_uu_ 4        \         P                  ! 4       pVP                  V4       VP                  ! V!   V P                  W48H  4       V P	                  W48g  4       RRR4       K  	  \         P                  ! 4       pVP                  V4       VP                  ! V!   R	VR&   V P                  W48H  4       V P	                  W48g  4       V P                  \         P                  ! 4       ^8H  4       V P	                  \         P                  ! 4       ^8g  4       V P                  \         P                  ! 4       R
8H  4       V P	                  \         P                  ! 4       R
8g  4       \        \         P                  ! 4       P                  4       4      pV P                  \         P                  ! 4       V8H  4       V P	                  \         P                  ! 4       V8g  4       \         P                  ! 4       pVP                  ! V!   VP                  V4       V P	                  V\        V4      8H  4       V P                  V\        V4      8g  4       R#   + '       g   i     EK  ; i)r   rN   /r   r   domainexample.comrL   Nr   r   )r   r!   "value"))r   r!   mismatch)r   r   r   )r   r!   r   )
r   r   updater   r|   rx   r/   listr    r	   )	r"   	base_caseattribsmorsel_amorsel_br#   case_br    r   s	   &        r(   test_eqMorselTests.test_eq  sZ   /	Cumq	
 >># i >># i ,--.

 Ff%%">>+(f%  !56 45 &%  >># i #-.,- 	)Q./(A-.)R/0(B./W^^%++-.)U23(E12 !

Ig$v,./4</09 &%%s   ?ALL#c                   \         P                  ! 4       pVP                  R RR4       VP                  R^RR /4       VP	                  4       pV P                  V\         P                  4       V P                  W4       V P                  W4       \        P                  ! V4      pV P                  V\         P                  4       V P                  W4       V P                  W4       R# )r   r   bazrL   r   N)r   r   r   r   copyassertIsInstanceassertIsNotr   )r"   r   r   s   &  r(   	test_copyMorselTests.test_copy  s    >>#UE5)qu
 	 ==?h7,,99X&h7,,r+   c                   \         P                  ! 4       p^ VR&   V P                  VR,          ^ 4       ^VR&   V P                  VR,          ^4       RVR&   V P                  VR,          R4       V P                  \         P                  4      ;_uu_ 4        RVR&   R	R	R	4       V P                  RV4       R	#   + '       g   i     L$; i)
r   r.   VersionrL   r   DOMAINr   r!   invalidN)r   r   r   r   r   assertNotInr   s   & r(   test_setitemMorselTests.test_setitem  s    !y	*A.y	*A.(x)=9w2233 'F9 4F+ 43s   B99C		c                   \         P                  ! 4       pVP                  R RR^/4       V P                  VP	                  RR4      R4       V P                  VR,          R4       V P                  VP	                  R^4      ^4       V P                  VR,          ^4       V P                  VP	                  RR4      R4       V P                  VR ,          R4       V P                  \         P                  4      ;_uu_ 4        VP	                  RR4       R	R	R	4       V P                  RV4       R	#   + '       g   i     L$; i)
r   r   rL   r.   r!   r   r   r   r   N)r   r   r   r   
setdefaultr   r   r   r   s   & r(   test_setdefaultMorselTests.test_setdefault  s   !mq
 	
 	**9g>C	*B/**9a8!<	*A.**8W=}M)=9w2233i1 4F+ 43s   D22E	c                f   R ^R^RR/p\         P                  ! 4       pVP                  V4       V P                  VR ,          ^4       V P                  VR,          ^4       V P                  VR,          R4       \         P                  ! 4       pVP                  \	        VP                  4       4      4       V P                  VR ,          ^4       V P                  VR,          ^4       V P                  VR,          R4       \         P                  ! 4       pVP                  R VP                  4        4       4       V P                  VR ,          ^4       V P                  VR,          ^4       V P                  VR,          R4       V P                  \         P                  4      ;_uu_ 4        VP                  RR/4       R	R	R	4       V P                  RV4       V P                  \        VP                  4       V P                  \        VP                  ^ 4       R	#   + '       g   i     Le; i)
r.   r   r   r   rL   r   c              3   ,   "   T F
  w  rW3x  K  	  R # 5iNr   ).0r&   r'   s   &  r(   	<genexpr>*MorselTests.test_update.<locals>.<genexpr>  s     9qfs   r   r!   N)
r   r   r   r   r   r    r   r   r   	TypeError)r"   r   r   s   &  r(   test_updateMorselTests.test_update  s   aAxG!g	*A.	*A.)=9!d7==?+,	*A.	*A.)=9!999	*A.	*A.)=9w2233MM9g./ 4F+)V]]3)V]]A6	 43s   /H  H0	c           	     :   \         P                  ! 4       pVP                  R RR4       VP                  R^RR /4       \	        \
        P                  ^,           4       F  pV P                  VR7      ;_uu_ 4        \
        P                  ! \
        P                  ! W4      4      pV P                  V\         P                  4       V P                  W14       V P                  \        V4      \        V4      4       RRR4       K  	  R#   + '       g   i     K  ; i)r   r   r   rL   r   r   N)r   r   r   r   r   r   r   r/   r   r   r   r   r   )r"   r   r   r   s   &   r(   r   MorselTests.test_pickle  s    >>#UE5)qu
 	 622Q67EE**!<<X(EF%%h?  4  XH>	 +* 8***s   ;B D		Dc                   \         P                  ! 4       pV P                  \        V4      R 4       V P                  \	        V4      R4       VP                  RRR4       V P                  \        V4      R4       V P                  \	        V4      R4       VP                  RRR	R
RRR^ R^ R^/4       V P                  \        V4      R4       V P                  \	        V4      R4       RVR&   ^VR&   V P                  \        V4      R4       V P                  \	        V4      R4       \         P                  ! 4       pVP                  RRR4       ^ VR&   V P                  \        V4      R4       V P                  \	        V4      R4       R# )z<Morsel: None=None>zSet-Cookie: None=Noner   rY   	coded_valz<Morsel: key=coded_val>zSet-Cookie: key=coded_valrN   r   r   r   r   r   r`   re   rL   zV<Morsel: key=coded_val; Comment=foo; Domain=example.com; Max-Age=0; Path=/; Version=1>zXSet-Cookie: key=coded_val; Comment=foo; Domain=example.com; Max-Age=0; Path=/; Version=1Trf   zh<Morsel: key=coded_val; Comment=foo; Domain=example.com; HttpOnly; Max-Age=0; Path=/; Secure; Version=1>zjSet-Cookie: key=coded_val; Comment=foo; Domain=example.com; HttpOnly; Max-Age=0; Path=/; Secure; Version=1r.   zA<Morsel: key=coded_val; expires=\w+, \d+ \w+ \d+ \d+:\d+:\d+ \w+>zCSet-Cookie: key=coded_val; expires=\w+, \d+ \w+ \d+ \d+:\d+:\d+ \w+N)r   r   r   r   r   r   r   assertRegexr   s   & r(   	test_reprMorselTests.test_repr  s   !f'<=V&=>

5%-f'@AV&ABCumqaq
 	 	f0	1 	V/	0  xzfB	C 	VA	B !

5%-yf=	> 	V<	=r+   r   N)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r   r   r   s   @r(   r   r   F  sD     +@H>$21h-",,$76?&= &=r+   r   c                 X    VP                  \        P                  ! \        4      4       V# r   )addTestdoctestDocTestSuiter   )loadertestspatterns   &&&r(   
load_testsr
  ?  s    	MM'&&w/0Lr+   __main__)r   unittestr  httpr   r   testr   TestCaser   r   r
  r   mainr   r+   r(   <module>r     s`         x
(## x
v	v=(## v=r
 zMMO r+   