+
    TjRS                        ^ RI t ^ RIt^ RIt^ RIt^ RIHt ^ RIHtHtH	t	H
t
 ^ RIHtHt ^ RIHtHt ^ RIHt ^ RIHt ^ RIHtHt ^ R	IHt  ! R
 R]4      t ! R R4      t ! R R]4      t ! R R]]4      t ! R R]4      t]! 4       tR# )    N)md5)unquote	urldefragurlsplit
urlunsplit)STATICFILES_STORAGE_ALIASsettings)check_settingsmatches_patterns)ImproperlyConfigured)ContentFile)FileSystemStoragestorages)
LazyObjectc                   F   a a ] tR t^t oRtRV 3R lltV 3R ltRtVtV ;t	# )StaticFilesStoragez
Standard file system storage for static files.

The defaults for ``location`` and ``base_url`` are
``STATIC_ROOT`` and ``STATIC_URL``.
c                   < Vf   \         P                  pVf   \         P                  p\        V4       \        SV `  ! W.VO5/ VB  V'       g   R V n        R V n        R # R # N)r	   STATIC_ROOT
STATIC_URLr
   super__init__base_locationlocation)selfr   base_urlargskwargs	__class__s   &&&*,W/var/www/idalgo/venv/lib/python3.14/site-packages/django/contrib/staticfiles/storage.pyr   StaticFilesStorage.__init__   s]    ++H**Hx =d=f= !%D DM     c                \   < V P                   '       g   \        R 4      h\        SV `  V4      # )zaYou're using the staticfiles app without having set the STATIC_ROOT setting to a filesystem path.)r   r   r   path)r   namer   s   &&r    r$   StaticFilesStorage.path%   s/    }}}&0 
 w|D!!r"   )r   r   NN)
__name__
__module____qualname____firstlineno____doc__r   r$   __static_attributes____classdictcell____classcell__r   __classdict__s   @@r    r   r      s     !" "r"   r   c                      a a ] tR t^/t oRt^tRtRtRtRt	V 3R lt
RR ltRR ltRV 3R lltRR ltRR	 ltRR
 ltR tR tR tR tR tRtVtV ;t# )HashedFilesMixinzurl("%(url)s")FTc                  < V P                   '       d%   V ;P                  V P                  3,          un        \        SV `  ! V/ VB  / V n        / V n        V P                   F  w  r4V F  p\        V\        \        34      '       d   Vw  rVMV P                  p\        P                  ! V\        P                  4      pV P
                  P                  V. 4      P                  Wv34       K  	  K  	  R # r   )$support_js_module_import_aggregationpatterns&_js_module_import_aggregation_patternsr   r   	_patternshashed_files
isinstancetuplelistdefault_templaterecompile
IGNORECASE
setdefaultappend)	r   r   r   	extensionr6   patterntemplatecompiledr   s	   &*,     r    r   HashedFilesMixin.__init__n   s    444MMdIIKKM$)&)#'==I#gt}55(/%GX#44H::gr}}=)))R8??@TU $ $1r"   c                    Vf   R# \        RR7      pVP                  4        F  pVP                  V4       K  	  VP                  4       R,          # )zE
Return a hash of the file with the given name and optional content.
NF)usedforsecurity:N   N)r   chunksupdate	hexdigest)r   r%   contenthasherchunks   &&&  r    	file_hashHashedFilesMixin.file_hash}   sG     ?U+^^%EMM%  &!#&&r"   c                   \        \        V4      4      pVP                  P                  4       pT;'       d5    \        \        V4      4      P                  P                  4       ;'       g    TpVR J pV'       d>   V P	                  V4      '       g   \        RV: RV : R24      h V P                  V4      p V P                  WR4      pV'       d   VP                  4        \        P                  P                  T4      w  r\        P                  P                  T4      w  rT'       d
   RT,          MRp\        P                  P                  Y: T: T
: 24      p\        T4      pY^&   RT9   d%   T^,          '       g   T^;;,          R,          uu&   \        T4      #   \         d    Tu # i ; i  T'       d   TP                  4        i i ; i)Nz
The file 'z' could not be found with .z.%s ?#?)r   r   r$   stripexists
ValueErroropenOSErrorrQ   closeossplitsplitextjoinr<   r   )r   r%   rN   filenameparsed_name
clean_nameopenedrQ   r$   rootexthashed_nameunparsed_names   &&&&         r    rh   HashedFilesMixin.hashed_name   ss    wt}- %%++-
II'(*;!<!A!A!G!G!IXXjD;;x(( CKTR ))H-	 z;Iz2GG$$X.	+4UY&"	ggll4T9c)JK[)&a 4<a 0 0!#-((%    s   'F$ 9F7 $F43F47Gc                  < \         P                  '       d   V'       g   TRreMP\        V4      w  rv\        V4      P                  P                  R4      '       d   TpMV3pVe
   W3,          pV! V!  p\        SV `  V4      p	RV9   p
V'       g	   V
'       dg   \        \        V	4      4      pV'       d   V^,          '       g   Wk^&   V
'       d%   V^,          '       g   V^;;,          R,          uu&   \        V4      p	\        V	4      # )*
Return the non-hashed URL in DEBUG mode.
rU   /rV   rW   )r	   DEBUGr   r   r$   endswithr   urlr<   r   r   )r   hashed_name_funcr%   forcer9   rh   fragmentrd   r   	final_urlquery_fragmenturlpartsr   s   &&&&&       r    _urlHashedFilesMixin._url   s     >>>%$("#,T? J
#((11#66""}+O+D.5GK,	 ~HY/0H&hqkks""8,Iy!!r"   c                :    V P                  V P                  W4      # )rl   )rw   stored_name)r   r%   rr   s   &&&r    rp   HashedFilesMixin.url   s     yy))477r"   c                @   a aaa Sf   S P                   oVVV V3R lpV# )z:
Return the custom URL converter for the given file name.
c                  < V P                  4       pVR,          pVR,          p\        P                  ! RV4      '       g   VP                  R4      '       d   V# VP                  R4      '       d(   VP                  \        P
                  4      '       g   V# \        V4      w  rEV'       g   V# VP                  R4      '       dH   VP                  \        P
                  4      '       g   Q hVP                  \        P
                  4      pMb\        P                  R8X  d   SMSP                  \        P                  R4      p\        P                  ! \        P                  ! V4      V4      pSP                  SP                  \!        V4      RS
R7      pRP                  VP#                  R4      RR VP#                  R4      RR ,           4      p	V'       d   T	R	V9   d   R	MR
V,           ,          p	\!        V	4      VR&   SV,          # )z
Convert the matched URL to a normalized and hashed URL.

This requires figuring out which files the matched URL resolves
to and calling the url() method of the storage.
matchedrp   z^[a-z]+:z//rm   T)rr   r9   NrV   #)	groupdictr>   match
startswithr	   r   r   removeprefixr^   sepreplace	posixpathra   dirnamerw   _stored_namer   r_   )matchobjmatchesr~   rp   url_pathrs   target_namesource_name
hashed_urltransformed_urlr9   r%   r   rE   s   &         r    	converter1HashedFilesMixin.url_converter.<locals>.converter   s    ((*Gi(G%.C xxS))S^^D-A-A ~~c""3>>(:M:M+N+N "+3H ""3''  **8+>+>????&33H4G4GH ')ffmdbffc9R'nnY->->{-KXV !!$)	 # J "hhs#CR(:+;+;C+@+EEO
 DCKDSH#LL %_5GENg%%r"   )r=   )r   r%   r9   rE   r   s   ffff r    url_converterHashedFilesMixin.url_converter   s)     ,,H9	& 9	&v r"   c              +    "   V'       d   R# / pV Uu. uF"  p\        WPP                  4      '       g   K   VNK$  	  pp/ pV P                  WV4       F0  w  rrW9  g   \        V
\        4      '       d	   WV
3x  K*  WV
3Wx&   K2  	  V Uu/ uF  qUW,          bK  	  pp. p\        V P                  4       FL  p. pV P                  WV4       F'  w  rrWV
3Wx&   V'       g   K  VP                  V4       K)  	  V'       d   KL   M	  V'       d+   RP                  \        V4      4      pVR\        R4      3x  V P                  P                  V4       VP                  4        Rj  xL
  R# u upi u upi  L5i)a  
Post process the given dictionary of files (called from collectstatic).

Processing is actually two separate operations:

1. renaming files to include a hash of their content for cache-busting,
   and copying those files to the target storage.
2. adjusting files which contain references to other files so they
   refer to the cache-busting filenames.

If either of these are performed on a file, then that file is
considered post-processed.
Nz, z!Max post-process passes exceeded.)r   r8   _post_processr:   	Exceptionrangemax_post_process_passesrB   ra   sortedRuntimeErrorr9   rL   values)r   pathsdry_runoptionsr9   r$   adjustable_pathsprocessed_adjustable_pathsr%   rh   	processed_unresolved_pathsisubstproblem_pathss   &&&,            r    post_processHashedFilesMixin.post_process  s       #
"T&6t^^&LDDU 	 

 &(" 04/A/A\0
+Dy +z)Y/O/O2248y3Q*00
 0@@/?tu{"/?@t334A!7;7I7I839 59y3Q*05$++D18 $# 5  IIf-=&>?M|4W'XXX 	  . .44666Q
" A. 	7sA   E6E*E*AE6	E/AE6 E6?E6AE6#E4$E6c           
   #  X  "   R  p\        WRR7       EF8  pRpW,          w  rxVP                  V4      ;_uu_ 4       p	V P                  V4      p
V P                  V
4      pW9  d   V P	                  WY4      pMW;,          p\        V	R4      '       d   V	P                  ^ 4       V P                  V4      pRpWR9   EdJ   Tp V	P                  4       P                  R4      pV P                  P                  4        FL  w  pp\        VV34      '       g   K  V F+  w  ppV P                  WSV4      p VP                  VX4      pK-  	  KN  	  V'       d   V P#                  V4       \%        XP'                  4       4      pV P(                  '       d   V P+                  VV4       V P	                  VV4      pV P                  V4      '       d   V P#                  V4       V P+                  VV4      pV P                  V4      pW8X  d   RpRpV'       g-   V'       g%   RpV P+                  W4      pV P                  V4      pWV&   W\W3x  RRR4       EK;  	  R#   \         d   pTRTR3x   Rp?ELRp?ii ; i  \          d   pTRTR3x   Rp?EKx  Rp?ii ; i  + '       g   i     EK  ; i5i)c                 R    \        V P                  \        P                  4      4      # r   )lenr_   r^   r   )r%   s   &r    
path_level2HashedFilesMixin._post_process.<locals>.path_levelU  s    tzz"&&)**r"   T)keyreverseseekFzutf-8N)r   r[   rd   hash_keyrh   hasattrr   rY   readdecodeUnicodeDecodeErrorr8   itemsr   r   subrZ   deleter   encodekeep_intermediate_files_save)r   r   r   r9   r   r%   substitutionsstorager$   original_filecleaned_namer   rh   hashed_file_existsr   old_hashed_namerN   excrC   r6   rD   rE   r   content_file
saved_names   &&&&                     r    r   HashedFilesMixin._post_processS  su    	+ 5$??D M "KMGd##}#t4==6 /"&"2"24"GK"."8K =&11!&&q)%)[[%="!	 +&1O5"/"4"4"6"="=g"F 04~~/C/C/E+	8+D9,??5= 1,0,>,>$(-"	!A.5kk)W.MG 6> 0F *K0#.w~~/?#@L333

;="&"2"24"FK{{;//K0!%K!FJ"&//*"=K&5(- $I  .$(	%)ZZ%K
&*ooj&A *5X&AAC $# @8 . 5"D#u4445 (2 !A*.c5*@$@$@!AC $##s   :J*BJ?I0JJ.I3
 JA6JAJJ.JJ*I0	I+	%J+I0	0J3J>JJJJJ' 
J*c                &    VP                  R R4      # )\rm   )r   r   r%   s   &&r    rd   HashedFilesMixin.clean_name  s    ||D#&&r"   c                    V# r    r   s   &&r    r   HashedFilesMixin.hash_key  s    r"   c                    \         P                  ! V4      pV P                  V4      pV P                  V4      pVP	                  V4      pVf!   V P                  V P                  V4      4      pV# r   )r   normpathrd   r   getrh   )r   r%   r9   r   r   
cache_names   &&&   r    r   HashedFilesMixin._stored_name  se     !!$'t,==.!%%h/
)9)9$)?@Jr"   c           	     |   V P                  V4      pV P                  V4      pV P                  P                  V4      pV'       d   V# Tp\	        V P
                  ^,           4       F@  pV P                  V P                  VRVR7      4      pWT8X  d   W@P                  V&   Vu # TpKB  	  \        RV: RV : R24      h)   N)rN   rb   z
The name 'z' could not be hashed with rT   )rd   r   r9   r   r   r   rh   rZ   )r   r%   r   r   r   intermediate_namer   s   &&     r    rz   HashedFilesMixin.stored_name  s    t,==.&&**84
 t33a78A  t>O PJ !..8!!(+!! %/! 9 tTUUr"   )r8   r9   )*.js))za(?P<matched>import(?s:(?P<import>[\s\{].*?|\*\s*as\s*\w+))\s*from\s*['"](?P<url>[./].*?)["']\s*;)z import%(import)s from "%(url)s";)zT(?P<matched>export(?s:(?P<exports>[\s\{].*?))\s*from\s*["'](?P<url>[./].*?)["']\s*;)z!export%(exports)s from "%(url)s";)z2(?P<matched>import\s*['"](?P<url>[./].*?)["']\s*;)zimport"%(url)s";)z+(?P<matched>import\(["'](?P<url>.*?)["']\))zimport("%(url)s")))z*.css)zA(?P<matched>url\((?P<quote>['"]{0,1})\s*(?P<url>.*?)(?P=quote)\)))z.(?P<matched>@import\s*["']\s*(?P<url>.*?)["'])z@import url("%(url)s"))zG(?m)^(?P<matched>/\*#[ \t](?-i:sourceMappingURL)=(?P<url>.*)[ \t]*\*/)$z/*# sourceMappingURL=%(url)s */)r   ))z9(?m)^(?P<matched>//# (?-i:sourceMappingURL)=(?P<url>.*))$z//# sourceMappingURL=%(url)sr   r'   )FN)F)r(   r)   r*   r+   r=   r   r5   r7   r6   r   r   rQ   rh   rw   rp   r   r   r   rd   r   r   rz   r-   r.   r/   r0   s   @@r    r3   r3   /   sy     ++0(.*8H: #V	' )D">8BH>7@KBZ'
V Vr"   r3   c                   n   a a ] tR tRt oRtRtRtRtRR/V 3R lltR	 t	R
 t
V 3R ltR tR tRtVtV ;t# )ManifestFilesMixini  1.1zstaticfiles.jsonTFmanifest_storageNc               z   < \         SV `  ! V/ VB  Vf   T pWn        V P                  4       w  V n        V n        R # r   )r   r   r   load_manifestr9   manifest_hash)r   r   r   r   r   s   &$*,r    r   ManifestFilesMixin.__init__  s@    $)&)## 0040B0B0D-4-r"   c                     V P                   P                  V P                  4      ;_uu_ 4       pVP                  4       P	                  4       uuR R R 4       #   + '       g   i     R # ; i  \
         d     R # i ; ir   )r   r[   manifest_namer   r   FileNotFoundError)r   manifests   & r    read_manifest ManifestFilesMixin.read_manifest  sY    	&&++D,>,>??8}}--/ @???  		s.   -A, A
A, A)	#A, )A, ,A;:A;c                `   V P                  4       pVf   / R3#  \        P                  ! V4      pVP                  R4      pVR9   d%   VP                  R/ 4      VP                  RR4      3#  \        RV P                  : RV P                  : R24      h  \        P                   d     L?i ; i)	NrU   versionr   hashzCouldn't load manifest 'z' (version ))z1.0r   )r   jsonloadsr   JSONDecodeErrorrZ   r   manifest_version)r   rN   storedr   s   &   r    r    ManifestFilesMixin.load_manifest  s    $$&?r6M	GZZ(F jj+G.(zz'2.

620FFF )!!4#8#8:
 	
 ## 		s   B B-,B-c              /     <"   / V n         \        SV `  ! V/ VB  R j  xL
  VP                  R4      '       g   V P	                  4        R # R #  L/5i)Nr   )r9   r   r   r   save_manifest)r   r   r   r   s   &*,r    r   ManifestFilesMixin.post_process  sK     7'8888zz)$$  % 	9s   AAAAc                `   \        V P                  P                  4       4      pV P                  R \	        \
        P                  ! V4      P                  4       4      4      V n        R\        V4      RV P                  RV P                  /pV P                  P                  V P                  4      '       d&   V P                  P                  V P                  4       \
        P                  ! V4      P                  4       pV P                  P                  V P                  \	        V4      4       R # )Nr   r   r   )r   r9   r   rQ   r   r   dumpsr   r   dictr   r   rY   r   r   r   )r   sorted_hashed_filespayloadcontentss   &   r    r    ManifestFilesMixin.save_manifest  s    $T%6%6%<%<%>?!^^+djj)<=DDFG
 T-.t,,D&&

   ''(:(:;;!!((););<::g&--/##D$6$6H8MNr"   c                   \        \        V4      4      pVP                  P                  4       pV P	                  V4      pV P
                  P                  V4      pVfE   V P                  '       d   \        RV,          4      hV P                  V P                  V4      4      p\        V4      pWV^&   RV9   d%   V^,          '       g   V^;;,          R,          uu&   \        V4      # )Nz+Missing staticfiles manifest entry for '%s'rV   rW   )r   r   r$   rX   r   r9   r   manifest_strictrZ   rd   rh   r<   r   )r   r%   rc   rd   r   r   ri   s   &&     r    rz   ManifestFilesMixin.stored_name  s    wt}- %%++-
==,&&**84
### AJN  )9)9$)?@J[)%a 4<a 0 0!#-((r"   )r9   r   r   )r(   r)   r*   r+   r   r   r   r   r   r   r   r   r   rz   r-   r.   r/   r0   s   @@r    r   r     sH     &MO#Et E
"!O) )r"   r   c                       ] tR tRtRtRtR# )ManifestStaticFilesStoragei  z\
A static file system storage backend which also saves
hashed copies of the files it saves.
r   N)r(   r)   r*   r+   r,   r-   r   r"   r    r   r     s    
 	r"   r   c                   &   a  ] tR tRt o R tRtV tR# )ConfiguredStoragei"  c                2    \         \        ,          V n        R # r   )r   r   _wrapped)r   s   &r    _setupConfiguredStorage._setup#  s     !:;r"   )r  N)r(   r)   r*   r+   r  r-   r.   )r1   s   @r    r   r   "  s     < <r"   r   ) r   r^   r   r>   hashlibr   urllib.parser   r   r   r   django.confr   r	    django.contrib.staticfiles.utilsr
   r   django.core.exceptionsr   django.core.files.baser   django.core.files.storager   r   django.utils.functionalr   r   r3   r   r   r   staticfiles_storager   r"   r    <module>r     s     	  	  A A ; M 7 . A ."* ">YV YVxK)) K)\	!35G 	<
 <
 () r"   