Ë
    £2Úií“  ã                   ój  — d dl Z d dlZd dlZd dlZd dlmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZ d dlmZmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZmZmZ d dlmZ d dlm Z  d dl!m"Z" d dl#m$Z$ d dl%m&Z& d dl'm(Z( d dl)m*Z* d dl+m,Z, d dl-m.Z/ d dl0m1Z1 ddl2m3Z3 ddl4m5Z5m6Z6 ddl7m8Z8m9Z9m:Z:m;Z; ddl1m<Z< 	 d dl=m>Z? i ZCd„ ZDd„ ZEd „ ZF G d!„ d"«      ZGd#„ ZH G d$„ d%e«      ZI G d&„ d'e«      ZJ G d(„ d)e«      ZKd*„ ZLd+„ ZM G d,„ d-«      ZN G d.„ d/«      ZO G d0„ d1«      ZP G d2„ d3«      ZQy# e@$ r	 d dlAmBZ? Y Œuw xY w)4é    N)Úpartial)Úapps)Úsettings)Úadmin)Úget_user_model)ÚImproperlyConfiguredÚObjectDoesNotExist)Úmodels)ÚManyToManyField)ÚOrderWrt)Ú
ForeignKey)ÚForwardManyToOneDescriptorÚReverseManyToOneDescriptorÚ"create_reverse_many_to_one_manager)ÚQuerySet)Úm2m_changed)Úmodel_to_dict)Úreverse)Útimezone)Ú	smart_str)Úcached_property)Úformat_lazy)Úgettext_lazy)Úutilsé   )Ú
exceptions)Ú SIMPLE_HISTORY_REVERSE_ATTR_NAMEÚHistoryDescriptor)Ú"post_create_historical_m2m_recordsÚpost_create_historical_recordÚ!pre_create_historical_m2m_recordsÚpre_create_historical_record©Úget_change_reason_from_object)ÚLocal)Úlocalc                 ó:   — 	 | j                   S # t        $ r Y y w xY w©N)ÚuserÚAttributeError)ÚrequestÚkwargss     úL/var/www/html/acx/venv/lib/python3.12/site-packages/simple_history/models.pyÚ_default_get_userr.   3   s#   € ðØ�|‰|ÐøÜò Ùðús   ‚ Ž	™c                 ó¨   — | j                   €y t        «       }	 |j                  j                  | j                   ¬«      S # |j                  $ r Y y w xY w)N©Úpk)Úhistory_user_idr   ÚobjectsÚgetÚDoesNotExist)Úhistorical_instanceÚUsers     r-   Ú_history_user_getterr8   :   sU   € Ø×*Ñ*Ð2ØÜÓ€DðØ�|‰|×ÑÐ#6×#FÑ#FÐÓGÐGøØ×Ñò Ùðús   ™%? ¿AÁAc                 ó,   — |�|j                   | _        y y r(   )r1   r2   )r6   r)   s     r-   Ú_history_user_setterr:   D   s   € ØÐØ.2¯g©gÐÕ+ð ó    c                   óB  — e Zd ZdZ e«       xZZi Zddej                  fddddddde
ddddeeddd e«       dddej                  ffd„Zd	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zed„ «       Zd„ Z d„ Z!d#d„Z"d#d„Z#d„ Z$d„ Z%d„ Z&d#d „Z'd!„ Z(d"„ Z)y)$ÚHistoricalRecordsÚ
HistoricalNú+FT© Ú_history_m2m_fieldsc                 ó˜  — || _         || _        || _        || _        || _        || _        || _        |	| _        |
| _        || _	        || _
        || _        || _        || _        || _        || _        || _        || _        || _        || _        t)        |t*        «      r|g}|| _        |€g }|| _        |€i }|| _        	 t)        |t*        «      rt2        ‚t4        ft7        |«      z   | _        	 t)        |t*        «      rt2        ‚t4        ft7        |«      z   | _        y # t2        $ r t3        d«      ‚w xY w# t2        $ r t3        d«      ‚w xY w)Nz-The `bases` option must be a list or a tuple.z1The `m2m_bases` option must be a list or a tuple.)Úuser_set_verbose_nameÚuser_set_verbose_name_pluralÚuser_related_nameÚuser_db_constraintÚ
table_nameÚinheritÚhistory_id_fieldÚhistory_change_reason_fieldÚ
user_modelÚget_userÚcascade_delete_historyÚcustom_model_nameÚappÚuser_id_fieldÚuser_getterÚuser_setterÚrelated_nameÚuse_base_model_dbÚ
m2m_fieldsÚm2m_fields_model_field_nameÚ
isinstanceÚstrÚno_db_indexÚexcluded_fieldsÚexcluded_field_kwargsÚ	TypeErrorÚHistoricalChangesÚtupleÚbasesÚ	m2m_bases)ÚselfÚverbose_nameÚverbose_name_pluralr_   rE   rG   rH   rZ   rI   rJ   rK   rL   rM   rN   rO   Úhistory_user_id_fieldÚhistory_user_getterÚhistory_user_setterrS   rT   rF   rY   r[   rU   rV   r`   s                             r-   Ú__init__zHistoricalRecords.__init__O   sl  € ð8 &2ˆÔ"Ø,?ˆÔ)Ø!2ˆÔØ"4ˆÔØ$ˆŒØˆŒØ 0ˆÔØ+FˆÔ(Ø$ˆŒØ ˆŒØ&<ˆÔ#Ø!2ˆÔØˆŒØ2ˆÔØ.ˆÔØ.ˆÔØ(ˆÔØ!2ˆÔØ$ˆŒØ+FˆÔ(ä�k¤3Ô'Ø&˜-ˆKØ&ˆÔàÐ"Ø ˆOØ.ˆÔà Ð(Ø$&Ð!Ø%:ˆÔ"ð	MÜ˜%¤Ô%Ü�Ü+Ð-´°e³Ñ<ˆDŒJð	QÜ˜)¤SÔ)Ü�Ü/Ð1´E¸)Ó4DÑDˆD�Nøô ò 	MÜÐKÓLÐLð	Mûô ò 	QÜÐOÓPÐPð	Qús   Â>.D Ã-.D4 ÄD1Ä4E	c                 ó”  — || _         |j                  | _        || _        t        j
                  j                  j                  | j                  d¬«       | j                  |«       |j                  j                  rM| j                  s@dj                  | j                  j                  «      }t        j                   |t"        «       y y y )NF)ÚweakzCHistoricalRecords added to abstract model ({}) without inherit=True)Úmanager_nameÚ
__module__ÚmoduleÚclsr
   ÚsignalsÚclass_preparedÚconnectÚfinalizeÚadd_extra_methodsÚ_metaÚabstractrH   ÚformatÚ__name__ÚwarningsÚwarnÚUserWarning)ra   rm   ÚnameÚmsgs       r-   Úcontribute_to_classz%HistoricalRecords.contribute_to_class˜   s”   € Ø ˆÔØ—n‘nˆŒØˆŒÜ�‰×%Ñ%×-Ñ-¨d¯m©mÀ%Ð-ÔHØ×Ñ˜sÔ#à�9‰9×Ò d§l¢lðß%™v d§h¡h×&7Ñ&7Ó8ð ô �M‰M˜#œ{Õ+ð '3Ðr;   c                 ó$   — d„ }t        |d|«       y )Nc                 óL   — d| _         	  | j                  |i |¤Ž}| ` |S # | ` w xY w)z•
            Save model without saving a historical record

            Make sure you know what you're doing before you use this method.
            T)Úskip_history_when_savingÚsave)ra   Úargsr,   Úrets       r-   Úsave_without_historical_recordzKHistoricalRecords.add_extra_methods.<locals>.save_without_historical_record§   s;   € ð -1ˆDÔ)ð2Ø�d—i‘i Ð0¨Ñ0�àÐ1ØˆJøð Ñ1ús   ‰ Ÿ#rƒ   )Úsetattr)ra   rm   rƒ   s      r-   rr   z#HistoricalRecords.add_extra_methods¦   s   € ò	ô 	�Ð5Ð7UÕVr;   c                 ó  — d}| j                   |ur'| j                  xr t        || j                   «      }|sy t        |j                  d«      rMt        j                  dj                  |j                  j                  |j                  j                  «      «      ‚| j                  ||«      }|r t        j                  |j                  «      }nt        j                  | j                  «      }t        ||j                   |«       t"        j$                  j&                  j)                  | j&                  |d¬«       t"        j$                  j*                  j)                  | j*                  |d¬«       | j-                  |«      }|D ]M  }t/        j(                  t1        | j.                  |j2                  ¬«      |j4                  j6                  d¬«       ŒO t9        |«      }t        || j:                  |«       | j:                  |j                  _        |D ]p  }| j?                  ||j4                  j6                  «      }	|	| j@                  |<   t        ||	j                   |	«       t9        |	«      }
t        ||j2                  |
«       Œr y )NFÚ simple_history_manager_attributez5{}.{} registered multiple times for history tracking.)Úsenderri   )Úattr)!rm   rH   Ú
issubclassÚhasattrrs   r   ÚMultipleRegistrationsErrorru   Ú	app_labelÚobject_nameÚcreate_history_modelÚ	importlibÚimport_modulerk   rl   r„   rv   r
   rn   Ú	post_saverp   Úpost_deleteÚget_m2m_fields_from_modelr   r   rz   Úremote_fieldÚthroughr   rj   r†   Úcreate_history_m2m_modelÚ
m2m_models)ra   r‡   r,   Ú	inheritedÚhistory_modelrl   rU   ÚfieldÚ
descriptorÚ	m2m_modelÚm2m_descriptors              r-   rq   zHistoricalRecords.finalize¶   s  € Øˆ	Ø�8‰8˜6Ñ!ØŸ™ÒE¬°F¸D¿H¹HÓ)EˆIÙØä�6—<‘<Ð!CÔDÜ×7Ñ7ØG×NÑNØ—L‘L×*Ñ*¨F¯L©L×,DÑ,Dóóð ð
 ×1Ñ1°&¸)ÓDˆáä×,Ñ,¨]×-EÑ-EÓF‰Fä×,Ñ,¨T¯[©[Ó9ˆFÜ�˜×.Ñ.°Ô>ô 	�‰× Ñ ×(Ñ(¨¯©ÀÈUÐ(ÔSÜ�‰×"Ñ"×*Ñ*¨4×+;Ñ+;ÀFÐQVÐ*ÔWà×3Ñ3°FÓ;ˆ
àò 	ˆEÜ×ÑÜ˜×(Ñ(¨u¯z©zÔ:Ø×)Ñ)×1Ñ1Øöð	ô ' }Ó5ˆ
Ü�˜×)Ñ)¨:Ô6Ø8<×8IÑ8Iˆ�‰Ô5àò 		?ˆEØ×5Ñ5Ø˜u×1Ñ1×9Ñ9óˆIð &/ˆD�O‰O˜EÑ"ä�F˜I×.Ñ.°	Ô:ä.¨yÓ9ˆNÜ�M 5§:¡:¨~Õ>ñ		?r;   c                 óØ  — | j                   s$| j                  › |j                  j                  › �S t	        | j                   «      r&| j                  |j                  j                  «      }n| j                   }|j                  «       |j                  j                  j                  «       k(  r|j                  | j                  k(  s|S t        dj                  | j                   «      «      ‚)Nz|The 'custom_model_name' option '{}' evaluates to a name that is the same as the model it is tracking. This is not permitted.)
rN   ÚDEFAULT_MODEL_NAME_PREFIXrs   r�   ÚcallableÚlowerrk   rl   Ú
ValueErrorru   )ra   Úmodelrz   s      r-   Úget_history_model_namez(HistoricalRecords.get_history_model_nameé   sÂ   € Ø×%Ò%Ø×4Ñ4Ð5°e·k±k×6MÑ6MÐ5NÐOÐOä�D×*Ñ*Ô+Ø×)Ñ)¨%¯+©+×*AÑ*AÓB‰Dð ×)Ñ)ˆDð �J‰J‹L˜EŸK™K×3Ñ3×9Ñ9Ó;Ò;Ø× Ñ  D§K¡KÒ/àˆKÜðBßBHÁ&Ø×&Ñ&óCó
ð 	
r;   c           	      ó†  — i }| j                  |«      }|j                  |«       |j                  | j                  |||«      «       | j                  |«      }|t        |j
                  j                  <   |j                  t        dd| j                  |«      «      ¬«       t        t        |«      | j                  |«      }|S )NÚMetar@   ©r¦   )Úcopy_fieldsÚupdateÚget_extra_fields_m2mr¤   Úregistered_modelsrs   Údb_tableÚtypeÚget_meta_options_m2mrX   r`   )ra   r£   Úthrough_modelÚattrsÚfieldsrz   Úm2m_history_models          r-   r–   z*HistoricalRecords.create_history_m2m_modelÿ   s¤   € Øˆà×!Ñ! -Ó0ˆØ�‰�VÔØ�‰�T×.Ñ.¨u°mÀVÓLÔMà×*Ñ*¨=Ó9ˆØ:GÔ˜-×-Ñ-×6Ñ6Ñ7à�‰œ$˜v r¨4×+DÑ+DÀ]Ó+SÓTˆÔUä ¤ T£¨D¯N©N¸EÓBÐà Ð r;   c           	      ól  — | j                   | j                  | j                  |«      | j                  |«      dœ}d|j                  j
                  z  }|r|j                  |d<   np|j                  | j                   k7  r| j                   |d<   nG|| j                   k7  r8t        j                  |j                  j
                     }|j                  }||d<   | j                  |«      }|j                  |«       |j                  | j                  ||«      «       |j                  t        dd| j                  |«      «      ¬«       |s | j                  �| j                  |d   _        | j#                  |«      }|t$        |j                  j                   <   t        t'        |«      | j(                  |«      }	|	S )zR
        Creates a historical model to associate with the model provided.
        )rk   Ú_history_excluded_fieldsrA   Útracked_fieldsz	%s.modelsrk   r¦   r@   r§   )rl   rZ   r“   Úfields_includedrs   rŒ   rk   r   Úapp_configsrz   r¨   r©   Úget_extra_fieldsr­   Úget_meta_optionsrG   r¬   r¤   r«   rX   r_   )
ra   r£   r˜   r°   Ú
app_modulerO   Úmodels_moduler±   rz   r™   s
             r-   rŽ   z&HistoricalRecords.create_history_model  so  € ð
 Ÿ+™+Ø(,×(<Ñ(<Ø#'×#AÑ#AÀ%Ó#HØ"×2Ñ2°5Ó9ñ	
ˆð ! 5§;¡;×#8Ñ#8Ñ8ˆ
áà"'×"2Ñ"2ˆE�,ÒØ×Ñ §¡Ò,à"&§+¡+ˆE�,ÒØ˜4Ÿ;™;Ò&ä×"Ñ" 5§;¡;×#8Ñ#8Ñ9ˆCØŸH™HˆMØ"/ˆE�,Ñà×!Ñ! %Ó(ˆØ�‰�VÔØ�‰�T×*Ñ*¨5°&Ó9Ô:à�‰œ$˜v r¨4×+@Ñ+@ÀÓ+GÓHˆÔIÙ˜TŸ_™_Ð8Ø%)§_¡_ˆE�&‰MÔ"ð ×*Ñ*¨5Ó1ˆà27Ô˜%Ÿ+™+×.Ñ.Ñ/ÜœS ›Y¨¯
©
°EÓ:ˆØÐr;   c                 ó”   — g }|j                   j                  D ],  }|j                  | j                  vsŒ|j	                  |«       Œ. |S r(   )rs   r±   rz   rZ   Úappend)ra   r£   r±   rš   s       r-   r¶   z!HistoricalRecords.fields_included7  sE   € ØˆØ—[‘[×'Ñ'ò 	%ˆEØ�z‰z ×!5Ñ!5Ò5Ø—‘˜eÕ$ð	%ð ˆr;   c                 ó^   — | j                   j                  |j                  t        «       «      S )z=
        Find the excluded kwargs for a given field.
        )r[   r4   rz   Úset)ra   rš   s     r-   Úfield_excluded_kwargsz'HistoricalRecords.field_excluded_kwargs>  s#   € ð ×)Ñ)×-Ñ-¨e¯j©j¼#»%Ó@Ð@r;   c                 ó¼  — i }| j                  |«      D �]¸  }t        j                  |«      }t        j                  |j                  «      |_        t        |t        «      rt
        j                  |_        t        |t
        j                  «      �r|}|j                  }d|_	        	 |j                  «       \  }}}}	||_	        t        |dd«      st        |t
        j                  «      rt
        j                  }
nt        |«      }
| j                  |«      D ]  }|	j                  |d«       Œ |	j!                  dd«      dk(  r|j"                  |	d<   |	j%                  ddddddddt
        j&                  ¬«	        |
|i |	¤Ž}|j(                  |_        nt+        |«       |j(                  | j,                  v rd|_        |||j(                  <   �Œ» |S # ||_	        w xY w)	zŠ
        Creates copies of the model's original fields, returning
        a dictionary mapping field name to copied field object.
        FÚ
one_to_oneNÚtora   r?   T)	Údb_constraintrS   ÚnullÚblankÚprimary_keyÚdb_indexÚ	serializeÚuniqueÚ	on_delete)r¶   Úcopyr”   rW   r   r
   ÚIntegerFieldÚ	__class__r   Ú	swappableÚdeconstructÚgetattrÚOneToOneFieldr­   rÀ   Úpopr4   r£   r©   Ú
DO_NOTHINGrz   Útransform_fieldrY   rÈ   )ra   r£   r±   rš   Ú	old_fieldÚold_swappableÚ_nameÚ_pathr�   Ú
field_argsÚ	FieldTypeÚexclude_args               r-   r¨   zHistoricalRecords.copy_fieldsD  sÅ  € ð
 ˆØ×)Ñ)¨%Ó0ó 8	'ˆEÜ—I‘I˜eÓ$ˆEÜ!%§¡¨5×+=Ñ+=Ó!>ˆEÔÜ˜%¤Ô*ä"(×"5Ñ"5�”Ü˜%¤×!2Ñ!2Õ3Ø!�	Ø )× 3Ñ 3�Ø&+�	Ô#ð8Ø5>×5JÑ5JÓ5LÑ2�E˜5 $¨
à*7�IÔ'Ü˜9 l°EÔ:¼jØœv×3Ñ3ô?ô !'× 1Ñ 1‘Iä $ Y£�Ið
 $(×#=Ñ#=¸iÓ#Hò 6�KØ—N‘N ;°Õ5ð6ð —>‘> $¨Ó-°Ò7Ø'0§¡�J˜tÑ$ð ×!Ñ!Ø"'Ø!$ØØØ %Ø!Ø"Ø Ü$×/Ñ/ð "ô 
ñ " 4Ð6¨:Ñ6�Ø&Ÿ^™^�•
ä Ô&ð �z‰z˜T×-Ñ-Ñ-Ø!&�”à!&ˆF�5—:‘:Óðq8	'ðr ˆøðY +8�IÕ'ús   Â'GÇ	Gc                 óº   — | j                   r| j                   }|S t        t        dd«      rt        j                  d¬«      }|S t        j
                  dd¬«      }|S )NÚ3SIMPLE_HISTORY_HISTORY_CHANGE_REASON_USE_TEXT_FIELDFT)rÅ   éd   )Ú
max_lengthrÅ   )rJ   rÑ   r   r
   Ú	TextFieldÚ	CharField)ra   rJ   s     r-   Ú _get_history_change_reason_fieldz2HistoricalRecords._get_history_change_reason_field…  sh   € Ø×+Ò+à*.×*JÑ*JÐ'ð +Ð*ô ÜÐKÈUô
ô +1×*:Ñ*:ÀÔ*EÐ'ð
 +Ð*ô +1×*:Ñ*:ÀcÐPTÔ*UÐ'à*Ð*r;   c                 ó  — | j                   r*| j                   j                  «       }d|_        d|_        |S t	        t
        dd«      r(t        j                  dt        j                  d¬«      }|S t        j                  d¬«      }|S )NTFÚ"SIMPLE_HISTORY_HISTORY_ID_USE_UUID)rÇ   ÚdefaultÚeditable)rÇ   )rI   ÚclonerÇ   rç   rÑ   r   r
   Ú	UUIDFieldÚuuidÚuuid4Ú	AutoField)ra   rI   s     r-   Ú_get_history_id_fieldz'HistoricalRecords._get_history_id_field”  s†   € Ø× Ò Ø#×4Ñ4×:Ñ:Ó<ÐØ+/ÐÔ(Ø(-ÐÔ%ð  Ðô ”XÐCÀUÔKÜ%×/Ñ/Ø ¬$¯*©*¸uô Ðð  Ðô  &×/Ñ/¸DÔAÐàÐr;   c                 ó6  — | j                   �/t        | j                  | j                  «      | j                   dœ}|S | j                  xs t        t        dd«      }dt        j                  |d| j                  t        j                  | j                  ¬«      i}|S )N)Úhistory_userr2   ÚAUTH_USER_MODELz	auth.Userrï   T)rÅ   rS   rË   rÄ   )rP   ÚpropertyrQ   rR   rK   rÑ   r   r
   r   rE   ÚSET_NULLrF   )ra   Úhistory_user_fieldsrK   s      r-   Ú_get_history_user_fieldsz*HistoricalRecords._get_history_user_fields¢  sŸ   € Ø×ÑÐ)ô !)¨×)9Ñ)9¸4×;KÑ;KÓ LØ#'×#5Ñ#5ñ#Ðð& #Ð"ð Ÿ™ò ¬GÜÐ+¨[ó-ˆJð
 ¤× 1Ñ 1ØØØ!%×!7Ñ!7Ü$Ÿo™oØ"&×"9Ñ"9ô!ð#Ðð #Ð"r;   c                 óà   — | j                   ra| j                  | j                   k(  rt        j                  d«      ‚dt	        j
                  |t        j                  | j                   d¬«      iS i S )Nz=The related name must not be called like the history manager.Úhistory_relationF)rË   rS   rÄ   )rS   rj   r   ÚRelatedNameConflictErrorr
   r   rÔ   )ra   r£   s     r-   Ú_get_history_related_fieldz,HistoricalRecords._get_history_related_fieldº  sp   € Ø×ÒØ× Ñ  D×$5Ñ$5Ò5Ü ×9Ñ9ØSóð ð #¤F×$5Ñ$5ØÜ$×/Ñ/Ø!%×!2Ñ!2Ø"'ô	%ðð ð ˆIr;   c                 ó�   — |j                   d„ t        j                  |dt        j                  ¬«      || j	                  «       dœ}|S )zDReturn dict of extra fields added to the m2m historical record modelc                 óv   — dj                  | j                  j                  | j                  j                  «      S ©Nz{} as of {})ru   rs   rb   ÚhistoryÚhistory_date©ra   s    r-   ú<lambda>z8HistoricalRecords.get_extra_fields_m2m.<locals>.<lambda>Ð  s*   €  M×$8Ñ$8Ø—
‘
×'Ñ'¨¯©×)BÑ)Bó%€ r;   F)rÄ   rË   )rk   Ú__str__rü   Úinstance_typeÚm2m_history_id)rk   r
   r   rÔ   rí   )ra   r£   r¯   r±   Úextra_fieldss        r-   rª   z&HistoricalRecords.get_extra_fields_m2mË  sQ   € ð  ×*Ñ*ñô ×(Ñ(ØØ#Ü ×+Ñ+ôð
 +Ø"×8Ñ8Ó:ñ
ˆð Ðr;   c                 ó:  ‡ ‡‡— ˆfd„}ˆˆfd„}d„ }d„ }ˆ fd„}‰ j                  «       t        j                  ‰ j                  du ¬«      ‰ j	                  «       t        j
                  dd	t        d
«      fdt        d«      fdt        d«      ff¬«      t        ‰‰ j                  ‰«      «      t        |«      ‰t        |«      t        |«      |d„ t        |«      dœ}|j                  ‰ j                  ‰«      «       |j                  ‰ j                  «       «       |S )z@Return dict of extra fields added to the historical record modelc                 óü   •— ‰j                   }|j                  |j                  }}t        t        j
                  j                  › d|› d|› d�t        | |j                  j                  «      | j                  g¬«      S )z.URL for this change in the default admin site.ú:Ú_Ú_simple_history)r�   )rs   rŒ   Ú
model_namer   r   Úsiterz   rÑ   r1   ÚattnameÚ
history_id)ra   ÚoptsrŒ   r	  r£   s       €r-   Ú
revert_urlz6HistoricalRecords.get_extra_fields.<locals>.revert_urlá  sd   ø€ à—;‘;ˆDØ$(§N¡N°D·O±O�zˆIÜÜ—:‘:—?‘?Ð# 1 Y K¨q°°¸OÐLÜ˜d D§G¡G§O¡OÓ4°d·o±oÐFôð r;   c                 ó¨  •— ‰j                  «       D �ci c]#  }|j                  t        | |j                  «      “Œ% }}| j                  rÖ| j                  D �cg c]P  }t	        ‰j
                  j                  |«      t        «      s%‰j
                  j                  |«      j                  ‘ŒR }}	  ‰j                  j                  t        | ‰j
                  j                  j                  «      ¬«      j                   |Ž j                  «       }|j                  |«        ‰di |¤Ž}t        |t        | «       |S c c}w c c}w # t        $ r Y Œ0w xY w)Nr0   r@   )Úvaluesr  rÑ   r´   rW   rs   Ú	get_fieldr   r3   Úfilterr1   r4   r©   r	   r„   r   )ra   rš   r°   Úexcluded_attnamesr  Úresultr±   r£   s         €€r-   Úget_instancez8HistoricalRecords.get_extra_fields.<locals>.get_instanceê  s+  ø€ àIOÏÉËöØ@E�—‘œw t¨U¯]©]Ó;Ñ;ðˆEð ð ×,Ò,ð
 "&×!>Ñ!>ö%àÜ% e§k¡k×&;Ñ&;¸EÓ&BÄOÔTð —K‘K×)Ñ)¨%Ó0×8Ó8ð%Ð!ð %ð
	)ð ˜Ÿ™×,Ñ,´¸¸e¿k¹k¿n¹n×>TÑ>TÓ0UÐ,ÓVß™Ð!2ð4ç™›ð ð —L‘L Ô(Ù‘^˜U‘^ˆFä�FÔ<¸dÔCØˆMùò1ùò%øô *ò Ùðús   ”(D;ÁAE Â0AE Å	EÅEc                 óž   — t        j                  | «      }|j                  | j                  ¬«      j	                  d«      j                  «       S )zW
            Get the next history record for the instance. `None` if last.
            )Úhistory_date__gtrý   )r   Ú get_history_manager_from_historyr  rý   Úorder_byÚfirst©ra   rü   s     r-   Úget_next_recordz;HistoricalRecords.get_extra_fields.<locals>.get_next_record  s>   € ô ×<Ñ<¸TÓBˆGà—‘°×0AÑ0A�ÓBß‘˜.Ó)ß‘“ðr;   c                 óž   — t        j                  | «      }|j                  | j                  ¬«      j	                  d«      j                  «       S )z\
            Get the previous history record for the instance. `None` if first.
            )Úhistory_date__ltrý   )r   r  r  rý   r  Úlastr  s     r-   Úget_prev_recordz;HistoricalRecords.get_extra_fields.<locals>.get_prev_record  s>   € ô ×<Ñ<¸TÓBˆGà—‘°×0AÑ0A�ÓBß‘˜.Ó)ß‘“ðr;   c                 ó&   •— ‰j                  | «      S )z~
            Returns the user specified by `get_user` method for manually creating
            historical objects
            )Úget_history_user)Úinstancera   s    €r-   Úget_default_history_userzDHistoricalRecords.get_extra_fields.<locals>.get_default_history_user  s   ø€ ð
 ×(Ñ(¨Ó2Ð2r;   T)rÈ   r   r?   ÚCreatedú~ÚChangedú-ÚDeleted)rà   Úchoicesc                 óN   — dj                  | j                  | j                  «      S rû   )ru   Úhistory_objectrý   rþ   s    r-   rÿ   z4HistoricalRecords.get_extra_fields.<locals>.<lambda>2  s"   €  M×$8Ñ$8Ø×#Ñ# T×%6Ñ%6ó%€ r;   )r  rý   Úhistory_change_reasonÚhistory_typer,  r#  r  Únext_recordÚprev_recordr  r   r$  )rí   r
   ÚDateTimeFieldÚ_date_indexingrã   râ   r  ÚHistoricalObjectDescriptorr¶   rñ   Ústaticmethodr©   rø   rô   )	ra   r£   r±   r  r  r  r   r$  r  s	   ```      r-   r¸   z"HistoricalRecords.get_extra_fieldsÞ  s  ú€ ô	õ	ò6		ò		ô	3ð ×4Ñ4Ó6Ü"×0Ñ0¸$×:MÑ:MÐQUÐ:UÔVØ%)×%JÑ%JÓ%LÜ"×,Ñ,ØØœq ›|Ð,¨s´A°i³LÐ.AÀCÌÈ9ËÐCVÐWôô 9Ø�t×+Ñ+¨EÓ2óô ! Ó.Ø"Ü# OÓ4Ü# OÓ4Ø$ñô )5Ð5MÓ(Nñ'
ˆð, 	×Ñ˜D×;Ñ;¸EÓBÔCØ×Ñ˜D×9Ñ9Ó;Ô<àÐr;   c                 ó¸   — t        t        dd«      }d}t        |t        «      r|j	                  «       }|dvrd}nt        |t
        «      sd}|st        d«      ‚|S )z,False, True, or 'composite'; default is TrueÚSIMPLE_HISTORY_DATE_INDEXT)Ú	compositeFzCSIMPLE_HISTORY_DATE_INDEX must be one of (False, True, 'Composite'))rÑ   r   rW   rX   r¡   Úboolr   )ra   r  Úvalids      r-   r2  z HistoricalRecords._date_indexing=  sc   € ô œÐ#>ÀÓEˆØˆÜ�fœcÔ"Ø—\‘\“^ˆFØ˜^Ñ+Ø‘Ü˜F¤DÔ)ØˆEÙÜ&ØUóð ð ˆr;   c                 óf   — | j                  |«      }d|i}| j                  r| j                  |d<   |S )z‡
        Returns a dictionary of fields that will be added to
        the Meta inner class of the m2m historical record model.
        rb   rŒ   )r¤   rO   )ra   r¯   rz   Úmeta_fieldss       r-   r®   z&HistoricalRecords.get_meta_options_m2mN  s9   € ð
 ×*Ñ*¨=Ó9ˆà% tÐ,ˆà�8Š8Ø'+§x¡xˆK˜Ñ$àÐr;   c                 óô  — dddœ}| j                   r| j                   }n)t        dt        |j                  j                  «      «      }| j
                  r| j
                  }n)t        dt        |j                  j                  «      «      }||d<   ||d<   | j                  r| j                  |d<   | j                  dk(  r:t        j                  d	|j                  j                  j                  f¬
«      f|d<   |S )zƒ
        Returns a dictionary of fields that will be added to
        the Meta inner class of the historical record model.
        )z-history_datez-history_id)rý   r  )ÚorderingÚget_latest_byzhistorical {}rb   rc   rŒ   r7  rý   ©r±   Úindexes)rC   r   r   rs   rb   rD   rc   rO   r2  r
   ÚIndexr1   r  )ra   r£   r;  rz   Úplural_names        r-   r¹   z"HistoricalRecords.get_meta_options\  sá   € ð 9Ø;ñ
ˆð ×%Ò%Ø×-Ñ-‰Dä˜´	¸%¿+¹+×:RÑ:RÓ0SÓTˆDØ×,Ò,Ø×;Ñ;‰Kä%Ø¤¨5¯;©;×+JÑ+JÓ!KóˆKð '+ˆ�NÑ#Ø-8ˆÐ)Ñ*Ø�8Š8Ø'+§x¡xˆK˜Ñ$Ø×Ñ +Ò-ä—‘ ^°U·[±[·^±^×5KÑ5KÐ$LÔMð&ˆK˜	Ñ"ð Ðr;   c                 ó¤   — t        t        dd«      sy |st        |d«      ry |j                  dd«      s| j	                  ||xr dxs d|¬«       y y )	NÚSIMPLE_HISTORY_ENABLEDTr   ÚrawFr?   r&  ©Úusing)rÑ   r   rŠ   r4   Úcreate_historical_record)ra   r#  ÚcreatedrG  r,   s        r-   r‘   zHistoricalRecords.post_savey  sT   € Ü”xÐ!9¸4Ô@ØÙœ7 8Ð-GÔHØØ�z‰z˜% Ô'Ø×)Ñ)¨(°G²OÀÒ4JÀsÐRWÐ)ÕXð (r;   c                 óð   — t        t        dd«      sy | j                  rDt        || j                  «      }|j	                  |«      j                  «       j                  «        y | j                  |d|¬«       y )NrD  Tr(  rF  )rÑ   r   rM   rj   rG  ÚallÚdeleterH  )ra   r#  rG  r,   Úmanagers        r-   r’   zHistoricalRecords.post_delete�  s`   € Ü”xÐ!9¸4Ô@ØØ×&Ò&Ü˜h¨×(9Ñ(9Ó:ˆGØ�M‰M˜%Ó ×$Ñ$Ó&×-Ñ-Õ/à×)Ñ)¨(°C¸uÐ)ÕEr;   c                 ó   — t        |«      S )z
        Get change reason for object.
        Customize this method to automatically fill change reason from context.
        r#   )ra   r#  r.  rG  s       r-   Úget_change_reason_for_objectz.HistoricalRecords.get_change_reason_for_objectŠ  s   € ô
 -¨XÓ6Ð6r;   c                 óL   — t        |d«      ry |dv r| j                  |d«       y y )Nr   )Úpost_addÚpost_removeÚ
post_clearr&  )rŠ   rH  )ra   r#  Úactionrˆ   Úpk_setr   r  s          r-   r   zHistoricalRecords.m2m_changed‘  s.   € Ü�8Ð7Ô8ØàÐ>Ñ>à×)Ñ)¨(°CÕ8ð ?r;   c           	      ó„  — |j                   D �]0  }| j                  |   }|j                  }t        ||j                  «      j
                  }g }t        |«      j                  j                  «       } |j                  j                  di ||i¤Ž}	|	D ][  }
d|i}|j                  j                  D ]%  }t        |
|j                  «      ||j                  <   Œ' |j                   |di |¤Ž«       Œ] t        j                  |||||¬«       |j                  j!                  |«      }t#        j                  |||||¬«       �Œ3 y )Nrü   )r‡   ÚrowsÚhistory_instancer#  rš   )r‡   Úcreated_rowsrX  r#  rš   r@   )rA   r—   r#  rÑ   rz   r•   r­   rv   r¡   r3   r  rs   r±   r½   r!   ÚsendÚbulk_creater   )ra   rX  r#  rš   r²   Úoriginal_instancer¯   Úinsert_rowsÚthrough_field_namerW  ÚrowÚ
insert_rowÚthrough_model_fieldrY  s                 r-   Úcreate_historical_record_m2msz/HistoricalRecords.create_historical_record_m2ms™  sQ  € Ø%×9Ñ9ó "	ˆEØ $§¡°Ñ 6ÐØ 0× 9Ñ 9ÐÜ#Ð$5°u·z±zÓB×JÑJˆMàˆKä!%Ð&7Ó!8×!AÑ!A×!GÑ!GÓ!IÐà/�=×(Ñ(×/Ñ/ÑQÐ3EÀxÐ2PÑQˆDàò D�Ø'Ð)9Ð:�
à+8×+>Ñ+>×+EÑ+Eò Ð'Ü;BØÐ0×5Ñ5ó<�JÐ2×7Ñ7Ò8ðð ×"Ñ"Ñ#4Ñ#B°zÑ#BÕCðDô .×2Ñ2Ø(Ø Ø!1Ø!Øõð -×4Ñ4×@Ñ@ÀÓMˆLÜ.×3Ñ3Ø(Ø)Ø!1Ø!Ø÷ñ9"	r;   c           	      ó–  — | j                   r|nd }t        |dt        j                  «       «      }| j	                  |«      }| j                  |||«      }t        || j                  «      }i }| j                  |«      D ]%  }	t        ||	j                  «      ||	j                  <   Œ' t        |j                  dd «      }
|
�||d<    |j                  d||||dœ|¤Ž}t        j                  |j                  ||||||¬«       |j                  |¬«       | j                  ||«       t        j                  |j                  ||||||¬«       y )NÚ_history_daterö   )rý   r.  rï   r-  )r‡   r#  rý   rï   r-  rX  rG  rF  )r‡   r#  rX  rý   rï   r-  rG  r@   )rT   rÑ   r   Únowr"  rO  rj   r¶   r  r£   r"   rZ  r€   rb  r    )ra   r#  r.  rG  rý   rï   r-  rM  r°   rš   Úrelation_fieldrX  s               r-   rH  z*HistoricalRecords.create_historical_record¾  sa  € Ø×/Ò/‘°TˆÜ˜x¨¼(¿,¹,».ÓIˆØ×,Ñ,¨XÓ6ˆØ $× AÑ AØ�l Eó!
Ðô ˜( D×$5Ñ$5Ó6ˆàˆØ×)Ñ)¨(Ó3ò 	DˆEÜ#*¨8°U·]±]Ó#CˆE�%—-‘-Ò ð	Dô ! §¡Ð0BÀDÓIˆØÐ%Ø(0ˆEÐ$Ñ%à(˜7Ÿ=™=ð 
Ø%Ø%Ø%Ø"7ñ	
ð
 ñ
Ðô 	%×)Ñ)Ø—=‘=ØØ%Ø%Ø"7Ø-Øõ	
ð 	×Ñ EÐÔ*Ø×*Ñ*Ð+;¸XÔFä%×*Ñ*Ø—=‘=ØØ-Ø%Ø%Ø"7Øö	
r;   c                 ó  — 	 |j                   S # t        $ rV d}	 | j                  j                  j                  j
                  r| j                  j                  }n# t        $ r Y nw xY wY nw xY w| j                  ||¬«      S )z3Get the modifying user from instance or middleware.N)r#  r+   )Ú_history_userr*   Úcontextr+   r)   Úis_authenticatedrL   )ra   r#  r+   s      r-   r"  z"HistoricalRecords.get_history_userî  s{   € ð	Ø×)Ñ)Ð)øÜò 	ØˆGðØ—<‘<×'Ñ'×,Ñ,×=Ò=Ø"Ÿl™l×2Ñ2�GùÜ!ò Ùðüð	úð �}‰} h¸ˆ}Ó@Ð@s3   ‚ ŽA-šA AÁA-Á	A'Á$A-Á&A'Á'A-Á,A-c                 óü   — t        | j                  «      }	 |j                  t        || j                  «      «       |D �cg c]"  }t        ||j                  «      j                  ‘Œ$ c}S # t
        $ r Y Œ9w xY wc c}w r(   )r¿   rU   r©   rÑ   rV   r*   rz   rš   )ra   r£   rU   rš   s       r-   r“   z+HistoricalRecords.get_m2m_fields_from_modelü  sk   € Ü˜Ÿ™Ó)ˆ
ð	Ø×Ñœg e¨T×-MÑ-MÓNÔOð ?IÖI°U”˜˜uŸz™zÓ*×0Ó0ÒIÐIøô ò 	Ùð	üâIs   —%A* Á 'A9Á*	A6Á5A6r(   )*rv   rk   Ú__qualname__rŸ   ÚLocalContextÚthreadri  r—   r
   ÚModelr.   r8   r:   Úlistrg   r|   rr   rq   r¤   r–   rŽ   r¶   rÀ   r¨   rã   rí   rô   rø   rª   r¸   rñ   r2  r®   r¹   r‘   r’   rO  r   rb  rH  r"  r“   r@   r;   r-   r=   r=   I   s  „ Ø ,Ðá#“~Ð%€FˆWØ€Jð Ø Ø�|‰|ˆoØØØØØØ$(ØØ"Ø$ØØØ"Ø0Ø0ØØØÙ“FØ"ØØ$9Ø—<‘<�/ó5GQòR,òWò 1?òf
ò,!ò &òPòAò?òB+ò ò#ò0ò"ò&]ð~ ñó ðò òó:YóFò7ò9ò#óJ.
ò`AóJr;   r=   c                 ó&  — | j                   | _        t        | t        j                  «      rt        j
                  | _        n†t        | t        j                  «      rt        j                  | _        nVt        | t        j                  «      r<t        t        dd«      rt        j                  | _        nt        j                  | _        d| _        d| _        d| _        | j"                  s| j$                  rd| _        d| _        d| _        d| _        yy)z9Customize field appropriately for use in historical modelÚ%SIMPLE_HISTORY_FILEFIELD_TO_CHARFIELDFNT)r  rz   rW   r
   ÚBigAutoFieldÚBigIntegerFieldrÎ   rì   rÍ   Ú	FileFieldrÑ   r   râ   rá   Úauto_nowÚauto_now_addÚdb_collationrÇ   rÊ   Ú_uniquerÈ   rÉ   )rš   s    r-   rÕ   rÕ     sÌ   € à—‘€E„JÜ�%œ×,Ñ,Ô-Ü ×0Ñ0ˆ�Ü	�Eœ6×+Ñ+Ô	,Ü ×-Ñ-ˆ�ä	�Eœ6×+Ñ+Ô	,ä”8ÐDÀeÔLÜ$×.Ñ.ˆE�Oä$×.Ñ.ˆEŒOð €E„NØ€EÔð €EÔà×Ò˜EŸLšLð "ˆÔØˆŒØˆŒØˆ�ð )r;   c                   ó(   ‡ — e Zd ZdZdefˆ fd„Zˆ xZS )Ú"HistoricForwardManyToOneDescriptorúÞ
    Overrides get_queryset to provide historic query support, should the
    instance be historic (and therefore was generated by a timepoint query)
    and the other side of the relation also uses a history manager.
    Úreturnc                 óz  •— |j                  d«      }|r™t        |t        d «      }t        | j                  j                  j
                  t        | j                  j                  j
                  j                  dd«      d «      }|r(|r&|j                  t        |d|j                  «      «      S t        ‰| �(  di |¤ŽS )Nr#  r†   Ú	_notthereÚ_as_ofr@   )r4   rÑ   r   rš   r”   r£   rs   Úas_ofrý   ÚsuperÚget_queryset)ra   Úhintsr#  rü   ÚhistmgrrÎ   s        €r-   rƒ  z/HistoricForwardManyToOneDescriptor.get_queryset+  s¤   ø€ Ø—9‘9˜ZÓ(ˆÙÜ˜hÔ(HÈ$ÓOˆGÜØ—
‘
×'Ñ'×-Ñ-ÜØ—J‘J×+Ñ+×1Ñ1×7Ñ7Ø6Øóð
 óˆGñ ™7Ø—}‘}¤W¨W°hÀ×@TÑ@TÓ%UÓVÐVÜ‰wÑ#Ñ, eÑ,Ð,r;   )rv   rk   rl  Ú__doc__r   rƒ  Ú__classcell__©rÎ   s   @r-   r{  r{  $  s   ø„ ñð- x÷ -ñ -r;   r{  c                   ó    — e Zd ZdZed„ «       Zy)Ú"HistoricReverseManyToOneDescriptorr|  c                 ó˜   — | j                   j                  } G d„ d|j                  j                  «      }t	        || j                   «      S )Nc                   ó   ‡ — e Zd Zˆ fd„Zˆ xZS )ú\HistoricReverseManyToOneDescriptor.related_manager_cls.<locals>.HistoricRelationModelManagerc           	      óÜ  •— 	 | j                   j                  | j                  j                  j	                  «          S # t
        t        f$ rž t        | j                   t        d «      }t        | j                  t        | j                  j                  dd«      d «      }|r)|r'|j                  t        |d|j                  «      «      }nt        ‰| �9  «       }| j                  |«      cY S w xY w)Nr†   r  r€  )r#  Ú_prefetched_objects_cacherš   r”   Úget_cache_namer*   ÚKeyErrorrÑ   r   r£   rs   r�  rý   r‚  rƒ  Ú_apply_rel_filters)ra   rü   r…  ÚquerysetrÎ   s       €r-   rƒ  ziHistoricReverseManyToOneDescriptor.related_manager_cls.<locals>.HistoricRelationModelManager.get_querysetI  sÛ   ø€ ð=ØŸ=™=×BÑBØŸ
™
×/Ñ/×>Ñ>Ó@ñð øô '¬Ð1ò =Ü%ØŸ™Ô'GÈó�Gô &ØŸ
™
ÜØ ŸJ™J×,Ñ,Ø>Ø'óð
 ó�Gñ ¡7Ø#*§=¡=Ü# G¨X°w×7KÑ7KÓLó$™ô $)¡7Ñ#7Ó#9˜Ø×2Ñ2°8Ó<Ò<ð'=ús   ƒ:> ¾B*C+Ã*C+)rv   rk   rl  rƒ  r‡  rˆ  s   @r-   ÚHistoricRelationModelManagerr�  H  s   ø„ ÷=ð =r;   r”  )ÚrelÚrelated_modelÚ_default_managerrÎ   r   )ra   r–  r”  s      r-   Úrelated_manager_clsz6HistoricReverseManyToOneDescriptor.related_manager_clsD  sA   € àŸ™×.Ñ.ˆô	=¨=×+IÑ+I×+SÑ+Sô 	=ô6 2Ø(¨$¯(©(ó
ð 	
r;   N)rv   rk   rl  r†  r   r˜  r@   r;   r-   rŠ  rŠ  =  s   „ ñð ñ 
ó ñ 
r;   rŠ  c                   ó   — e Zd ZdZeZeZy)ÚHistoricForeignKeyaÔ  
    Allows foreign keys to work properly from a historic instance.

    If you use as_of queries to extract historical instances from
    a model, and you have other models that are related by foreign
    key and also historic, changing them to a HistoricForeignKey
    field type will allow you to naturally cross the relationship
    boundary at the same point in time as the origin instance.

    A historic instance maintains an attribute ("_historic") when
    it is historic, holding the historic record instance and the
    timepoint used to query it ("_as_of").  HistoricForeignKey
    looks for this and uses an as_of query against the related
    object so the relationship is assessed at the same timepoint.
    N)rv   rk   rl  r†  r{  Úforward_related_accessor_classrŠ  Úrelated_accessor_classr@   r;   r-   rš  rš  h  s   „ ñð  &HÐ"Ø?Ñr;   rš  c                 ó   — t        | «      duS )zL
    Returns True if the instance was acquired with an as_of timepoint.
    N)Úto_historic©r#  s    r-   Úis_historicr   }  s   € ô �xÓ ¨Ð,Ð,r;   c                 ó$   — t        | t        d«      S )zn
    Returns a historic model instance if the instance was acquired with
    an as_of timepoint, or None.
    N)rÑ   r   rŸ  s    r-   rž  rž  „  s   € ô
 �8Ô=¸tÓDÐDr;   c                   ó   — e Zd Zd„ Zd„ Zy)r3  c                 ó    — || _         || _        y r(   )r£   r¶   )ra   r£   r¶   s      r-   rg   z#HistoricalObjectDescriptor.__init__�  s   € ØˆŒ
Ø.ˆÕr;   c                 ó¨   — |€| S | j                   D �ci c]#  }|j                  t        ||j                  «      “Œ% }} | j                  di |¤ŽS c c}w )Nr@   )r¶   r  rÑ   r£   )ra   r#  ÚownerÚfr  s        r-   Ú__get__z"HistoricalObjectDescriptor.__get__‘  sT   € ØÐØˆKØCG×CWÑCWÖX¸a�!—)‘)œW X¨q¯y©yÓ9Ñ9ÐXˆÐXØˆt�z‰zÑ#˜FÑ#Ð#ùò Ys   “(AN)rv   rk   rl  rg   r§  r@   r;   r-   r3  r3  Œ  s   „ ò/ó$r;   r3  c                   ó   — e Zd Zdd„Zy)r]   Nc                 óò  — t        |t        | «      «      s-t        dj                  t        | «      t        |«      «      «      ‚|€
t	        «       }|j
                  D �ch c]  }|j                  ’Œ }}|€1|j                  D �ch c]  }|j                  sŒ|j                  ’Œ }}n|j                  |«      }t	        |«      j                  |«      j                  |«      }t	        |«      j                  |«      }g }	g }
t        ||¬«      }t        | |¬«      }|D ]?  }||   }||   }||k7  sŒ|	j                  t        |||«      «       |
j                  |«       ŒA |D ]ü  }t        ||«      j                  «       xs t        | |«      j                  «       }g }|rG|j                   j"                  D �cg c](  }|j                  r|j                  dvr|j                  ‘Œ* }}t%         t        ||«      j&                  |Ž «      }t%         t        | |«      j&                  |Ž «      }||k7  sŒÎt        |||«      }|	j                  |«       |
j                  |«       Œþ t)        |	|
|| «      S c c}w c c}w c c}w )Nz.unsupported type(s) for diffing: '{}' and '{}'r?  )Úidr  rü   )rW   r­   r\   ru   r¿   rA   rz   rµ   rç   ÚintersectionÚ
differencer   r½   ÚModelChangerÑ   r  rs   r±   rp  r  Ú
ModelDelta)ra   Úold_historyrZ   Úincluded_fieldsrš   Úincluded_m2m_fieldsr¦  r±   rU   ÚchangesÚchanged_fieldsÚ
old_valuesÚcurrent_valuesÚ	old_valueÚcurrent_valueÚreference_history_m2m_itemÚhistory_field_namesÚold_rowsÚnew_rowsÚchanges                       r-   Údiff_againstzHistoricalChanges.diff_against™  so  € Ü˜+¤t¨D£zÔ2ÜØD×LÑLÜ˜“J¤ [Ó 1óóð ð
 Ð"Ü!›eˆOà7B×7VÑ7VÖW¨e˜uŸz›zÐWÐÐWØÐ"Ø/:×/IÑ/IÖX¨!ÈQÏZËZ˜qŸv›vÐXˆOÑXà"5×"BÑ"BÀ?Ó"SÐô �Ó ß‰ZÐ+Ó,ß‰Z˜Ó(ð 	ô
 Ð,Ó-×8Ñ8¸ÓIˆ
àˆØˆä" ;°vÔ>ˆ
Ü& t°FÔ;ˆàò 	-ˆEØ" 5Ñ)ˆIØ*¨5Ñ1ˆMà˜MÓ)Ø—‘œ{¨5°)¸]ÓKÔLØ×%Ñ% eÕ,ð	-ð  ò 	-ˆEô ˜ UÓ+×1Ñ1Ó3ÒS´w¸tÀUÓ7K×7QÑ7QÓ7Sð 'ð #%ÐÙ)ð 8×=Ñ=×DÑDö'àØ—z’z a§f¡fÐ4WÑ&Wð —F“Fð'Ð#ð 'ô Ð>œG K°Ó7×>Ñ>Ð@SÐTÓUˆHÜÐ7œG D¨%Ó0×7Ñ7Ð9LÐMÓNˆHà˜8Ó#Ü$ U¨H°hÓ?�Ø—‘˜vÔ&Ø×%Ñ% eÕ,ð/	-ô2 ˜' >°;ÀÓEÐEùòk XùâXùòJ's   ÁI*ÂI/ÂI/Æ2-I4)NN)rv   rk   rl  r½  r@   r;   r-   r]   r]   ˜  s   „ ô?Fr;   r]   c                   ó   — e Zd Zd„ Zy)r­  c                 ó.   — || _         || _        || _        y r(   )rš   ÚoldÚnew)ra   Ú
field_namer¶  Ú	new_values       r-   rg   zModelChange.__init__Ü  s   € ØˆŒ
ØˆŒØˆ�r;   N©rv   rk   rl  rg   r@   r;   r-   r­  r­  Û  s   „ ór;   r­  c                   ó   — e Zd Zd„ Zy)r®  c                 ó<   — || _         || _        || _        || _        y r(   )r²  r³  Ú
old_recordÚ
new_record)ra   r²  r³  rÇ  rÈ  s        r-   rg   zModelDelta.__init__ã  s   € ØˆŒØ,ˆÔØ$ˆŒØ$ˆ�r;   NrÄ  r@   r;   r-   r®  r®  â  s   „ ó%r;   r®  )RrÌ   r�   rê   rw   Ú	functoolsr   Údjango.appsr   Údjango.confr   Údjango.contribr   Údjango.contrib.authr   Údjango.core.exceptionsr   r	   Ú	django.dbr
   Údjango.db.modelsr   Údjango.db.models.fields.proxyr   Údjango.db.models.fields.relatedr   Ú+django.db.models.fields.related_descriptorsr   r   r   Údjango.db.models.queryr   Údjango.db.models.signalsr   Údjango.forms.modelsr   Údjango.urlsr   Údjango.utilsr   Údjango.utils.encodingr   Údjango.utils.functionalr   Údjango.utils.textr   Údjango.utils.translationr   r  Úsimple_historyr   Ú r   rM  r   r   rn   r   r    r!   r"   r$   Úasgiref.localr%   rm  ÚImportErrorÚ	threadingr&   r«   r.   r8   r:   r=   rÕ   r{  rŠ  rš  r   rž  r3  r]   r­  r®  r@   r;   r-   ú<module>râ     s  ðÛ Û Û Û Ý å Ý  Ý  Ý .ß KÝ Ý ,Ý 2Ý 6÷ñ õ
 ,Ý 0Ý -Ý Ý !Ý +Ý 3Ý )Ý 6å  å ß H÷ó õ 1ð0Ý3ð Ð òòò6÷
y
Jñ y
Jòxô>-Ð)Cô -ô2(
Ð)Cô (
ôV@˜ô @ò*-òE÷	$ñ 	$÷@Fñ @F÷Fñ ÷%ò %øðk ò 0ß/ð0ús   Â6D$ Ä$D2Ä1D2