Ë
    ôrªi¢ ã                   ó`  — d Z ddlZddlmZ ddlmZ ddlmZmZm	Z	m
Z
mZ ddlmZ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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$  G d„ de«      Z%d„ Z& G d„ d«      Z' G d„ de'«      Z( G d„ d«      Z) G d„ d«      Z*d„ Z+ G d„ de*«      Z,d„ Z-y)aª
  
Accessors for related objects.

When a field defines a relation between two models, each model class provides
an attribute to access related instances of the other model class (unless the
reverse accessor has been disabled with related_name='+').

Accessors are implemented as descriptors in order to customize access and
assignment. This module defines the descriptor classes.

Forward accessors follow foreign keys. Reverse accessors trace them back. For
example, with the following models::

    class Parent(Model):
        pass

    class Child(Model):
        parent = ForeignKey(Parent, related_name='children')

 ``child.parent`` is a forward many-to-one relation. ``parent.children`` is a
reverse many-to-one relation.

There are three types of relations (many-to-one, one-to-one, and many-to-many)
and two directions (forward and reverse) for a total of six combinations.

1. Related instance on the forward side of a many-to-one relation:
   ``ForwardManyToOneDescriptor``.

   Uniqueness of foreign key values is irrelevant to accessing the related
   instance, making the many-to-one and one-to-one cases identical as far as
   the descriptor is concerned. The constraint is checked upstream (unicity
   validation in forms) or downstream (unique indexes in the database).

2. Related instance on the forward side of a one-to-one
   relation: ``ForwardOneToOneDescriptor``.

   It avoids querying the database when accessing the parent link field in
   a multi-table inheritance scenario.

3. Related instance on the reverse side of a one-to-one relation:
   ``ReverseOneToOneDescriptor``.

   One-to-one relations are asymmetrical, despite the apparent symmetry of the
   name, because they're implemented in the database with a foreign key from
   one table to another. As a consequence ``ReverseOneToOneDescriptor`` is
   slightly different from ``ForwardManyToOneDescriptor``.

4. Related objects manager for related instances on the reverse side of a
   many-to-one relation: ``ReverseManyToOneDescriptor``.

   Unlike the previous two classes, this one provides access to a collection
   of objects. It returns a manager rather than an instance.

5. Related objects manager for related instances on the forward or reverse
   sides of a many-to-many relation: ``ManyToManyDescriptor``.

   Many-to-many relations are symmetrical. The syntax of Django models
   requires declaring them on one side but that's an implementation detail.
   They could be declared on the other side without any change in behavior.
   Therefore the forward and reverse descriptors can be the same.

   If you're looking for ``ForwardManyToManyDescriptor`` or
   ``ReverseManyToManyDescriptor``, use ``ManyToManyDescriptor`` instead.
é    N)Úsync_to_async)Ú
FieldError)ÚDEFAULT_DB_ALIASÚNotSupportedErrorÚconnectionsÚrouterÚtransaction)ÚManagerÚQÚWindowÚsignals)ÚColPairs)ÚTupleIn)Ú	RowNumber)ÚGreaterThanÚLessThanOrEqual)ÚQuerySet)ÚDeferredAttribute)Ú
AltersDataÚresolve_callables)ÚRemovedInDjango60Warning)Úcached_propertyc                   ó   — e Zd Zd„ Zy)ÚForeignKeyDeferredAttributec                 ó  — |j                   j                  | j                  j                  «      |k7  r6| j                  j	                  |«      r| j                  j                  |«       ||j                   | j                  j                  <   y ©N)Ú__dict__ÚgetÚfieldÚattnameÚ	is_cachedÚdelete_cached_value©ÚselfÚinstanceÚvalues      ú^/var/www/html/venv/lib/python3.12/site-packages/django/db/models/fields/related_descriptors.pyÚ__set__z#ForeignKeyDeferredAttribute.__set__[   sh   € Ø×Ñ× Ñ  §¡×!3Ñ!3Ó4¸Ò=À$Ç*Á*×BVÑBVØôC
ð �J‰J×*Ñ*¨8Ô4Ø05ˆ×Ñ˜$Ÿ*™*×,Ñ,Ò-ó    N)Ú__name__Ú
__module__Ú__qualname__r(   © r)   r'   r   r   Z   s   „ ó6r)   r   c                 ó€  — t        di |› d�|i¤Ž}| j                  xs t        }| j                  j                  ràt
        |   j                  j                  st        d«      ‚| j                  j                  | j                  j                  }}| j                  j                  |¬«      j                  «       D ��cg c]  \  }}|‘Œ	 }	}}t        t        «       ||	¬«      }
|t        |
|«      z  }|�|t!        |
|«      z  }| j                  j#                  «        | j                  j%                  |d¬«       | S c c}}w )NÚ__inz`Prefetching from a limited queryset is only supported on backends that support window functions.)Úusing)Úpartition_byÚorder_byT)Ú	reuse_allr-   )r   Ú_dbr   ÚqueryÚ	is_slicedr   ÚfeaturesÚsupports_over_clauser   Úlow_markÚ	high_markÚget_compilerÚget_order_byr   r   r   r   Úclear_limitsÚadd_q)ÚquerysetÚ
field_nameÚ	instancesÚ	predicateÚdbr9   r:   ÚexprÚ_r2   Úwindows              r'   Ú_filter_prefetch_querysetrG   c   s$  € ÜÑ5˜
�| 4Ð(¨)Ð4Ñ5€IØ	�‰Ò	)Ô)€BØ‡~�~×ÒÜ˜2‰×'Ñ'×<Ò<Ü#ð1óð ð 'Ÿn™n×5Ñ5°x·~±~×7OÑ7O�)ˆà (§¡× ;Ñ ;À"Ð ;Ó E× RÑ RÔ Tô
Ù T‘W�T˜1ŠDÐ Tð 	ñ 
ô œ	›°*ÀxÔPˆØ”[ ¨Ó2Ñ2ˆ	ØÐ Øœ¨°Ó;Ñ;ˆIØ�‰×#Ñ#Ô%ð ‡N�N×Ñ˜¨dÐÔ3Ø€Oùó
s   Â<D:c                   ó\   — e Zd ZdZd„ Zed„ «       Zd„ Zd„ Zdd„Z	dd„Z
d	„ Zdd
„Zd„ Zd„ Zy)ÚForwardManyToOneDescriptoraJ  
    Accessor to the related object on the forward side of a many-to-one or
    one-to-one (via ForwardOneToOneDescriptor subclass) relation.

    In the example::

        class Child(Model):
            parent = ForeignKey(Parent, related_name='children')

    ``Child.parent`` is a ``ForwardManyToOneDescriptor`` instance.
    c                 ó   — || _         y r   )r   )r$   Úfield_with_rels     r'   Ú__init__z#ForwardManyToOneDescriptor.__init__ˆ   s	   € Ø#ˆ�
r)   c           	      ó*  — t        d| j                  j                  j                  j                  t
        f| j                  j                  j                  | j                  j                  j                  ›d| j                  j                  ›d�dœ«      S ©NÚRelatedObjectDoesNotExistÚ.z.RelatedObjectDoesNotExist)r+   r,   )	Útyper   Úremote_fieldÚmodelÚDoesNotExistÚAttributeErrorr+   r,   Úname©r$   s    r'   rO   z4ForwardManyToOneDescriptor.RelatedObjectDoesNotExist‹   so   € ô
 Ø'Ø�Z‰Z×$Ñ$×*Ñ*×7Ñ7¼ÐHà"Ÿj™j×.Ñ.×9Ñ9ð —J‘J×$Ñ$×1Ó1Ø—J‘J—O“Oð!ñó
ð 	
r)   c                 ó8   — | j                   j                  |«      S r   )r   r!   ©r$   r%   s     r'   r!   z$ForwardManyToOneDescriptor.is_cached�   s   € Ø�z‰z×#Ñ# HÓ-Ð-r)   c                 ó’   — | j                   j                  j                  j                  j	                  |¬«      j                  «       S ©N©Úhints)r   rR   rS   Ú_base_managerÚ
db_managerÚall©r$   r]   s     r'   Úget_querysetz'ForwardManyToOneDescriptor.get_queryset    s5   € Ø�z‰z×&Ñ&×,Ñ,×:Ñ:×EÑEÈEÐEÓR×VÑVÓXÐXr)   Nc                 ó†   — t        j                  dt        d¬«       |€| j                  |«      S | j                  ||g«      S ©NzLget_prefetch_queryset() is deprecated. Use get_prefetch_querysets() instead.é   )Ú
stacklevel©ÚwarningsÚwarnr   Úget_prefetch_querysets©r$   rA   r?   s      r'   Úget_prefetch_querysetz0ForwardManyToOneDescriptor.get_prefetch_queryset£   óG   € Ü�‰ðä$Øõ		
ð ÐØ×.Ñ.¨yÓ9Ð9Ø×*Ñ*¨9°x°jÓAÐAr)   c           
      óp  — |rt        |«      dk7  rt        d«      ‚|r|d   n| j                  «       }|j                  |d   ¬«       | j                  j
                  }| j                  j                  }|D �ci c]  } ||«      |“Œ }}| j                  j                  }| j                  j                  D �	cg c]1  }	|j                  j                  |	j                  «      j                  ‘Œ3 }
}	|j                  t        t        |j                   j"                  j$                  |
|
| j                  «      t'        |«      «      «      }|j                  j)                  «        |j*                  s$|D ]  }| ||«         }|j-                  ||«       Œ! |||d| j                  j.                  dfS c c}w c c}	w )Né   úIquerysets argument of get_prefetch_querysets() should have a length of 1.r   ©r%   TF)ÚlenÚ
ValueErrorrb   Ú
_add_hintsr   Úget_foreign_related_valueÚget_local_related_valuerR   Úforeign_related_fieldsr5   Úresolve_refrV   ÚtargetÚfilterr   r   rS   Ú_metaÚdb_tableÚlistÚclear_orderingÚmultipleÚset_cached_valueÚ
cache_name)r$   rA   Ú	querysetsr?   Úrel_obj_attrÚinstance_attrÚinstÚinstances_dictrR   r   Úrelated_fieldsÚrel_objr%   s                r'   rj   z1ForwardManyToOneDescriptor.get_prefetch_querysets®   s¢  € Ùœ˜Y›¨1Ò,Üðóð ñ $-�9˜Q’<°$×2CÑ2CÓ2EˆØ×Ñ Y¨q¡\ÐÔ2à—z‘z×;Ñ;ˆØŸ
™
×:Ñ:ˆÙ@IÓJÁ	¸™-¨Ó-¨tÑ3À	ˆÐJØ—z‘z×.Ñ.ˆð Ÿ™×:Ò:ó
á:�ð �N‰N×&Ñ& u§z¡zÓ2×9Ó9Ø:ð 	ð 
ð —?‘?ÜÜØ—N‘N×(Ñ(×1Ñ1Ø"Ø"Ø—J‘Jó	ô �^Ó$óó

ˆð 	�‰×%Ñ%Ô'ð ×$Ò$Û#�Ø)©,°wÓ*?Ñ@�Ø×-Ñ-¨g°xÕ@ð $ð ØØØØ�J‰J×!Ñ!Øð
ð 	
ùò7 Kùò
s   Á8F.Â86F3c                 óz   — | j                  |¬«      }|j                  | j                  j                  |«      «      S ©Nrq   )rb   r   r   Úget_reverse_related_filter)r$   r%   Úqss      r'   Ú
get_objectz%ForwardManyToOneDescriptor.get_objectÝ   s3   € Ø×Ñ¨ÐÓ1ˆà�v‰v�d—j‘j×;Ñ;¸HÓEÓFÐFr)   c                 ó  — |€| S 	 | j                   j                  |«      }|€_| j                   j                  sI| j                  | j                   j                  j                  ›d| j                   j                  ›d�«      ‚|S # t        $ rý d| j                   j                  |«      v}|r/|j                  j                  | j                   j                  «      nd}|r@|j                  |«      r/|j                  |«      }| j                   j                  |d¬«      }nd}|€G|rE| j                  |«      }| j                   j                  }|j                  s|j                  ||«       | j                   j                  ||«       Y �Œhw xY w)a=  
        Get the related instance through the forward relation.

        With the example above, when getting ``child.parent``:

        - ``self`` is the descriptor managing the ``parent`` attribute
        - ``instance`` is the ``child`` instance
        - ``cls`` is the ``Child`` class (we don't need it)
        N©Údefaultú has no rP   )r   Úget_cached_valueÚKeyErrorrv   r{   Úget_ancestor_linkrS   r!   r�   rR   r   r€   ÚnullrO   r*   rV   )r$   r%   Úclsrˆ   Ú	has_valueÚancestor_linkÚancestorrR   s           r'   Ú__get__z"ForwardManyToOneDescriptor.__get__â   s_  € ð ÐØˆKð
	;Ø—j‘j×1Ñ1°(Ó;ˆGð6 ˆ? 4§:¡:§?¢?Ø×0Ñ0Ø#'§:¡:×#3Ñ#3×#<Ó#<¸d¿j¹j¿o»oÐNóð ð ˆNøô? ò 	;Ø D§J¡J×$FÑ$FÀxÓ$PÐPˆIñ ð —‘×0Ñ0°·±×1AÑ1AÔBàð ñ
  ×!8Ñ!8¸Ô!Bð )×9Ñ9¸(ÓC�ð Ÿ*™*×5Ñ5°hÈÐ5ÓM‘à�Øˆ¡9ØŸ/™/¨(Ó3�Ø#Ÿz™z×6Ñ6�ð $×,Ò,Ø ×1Ñ1°'¸8ÔDØ�J‰J×'Ñ'¨°'×:ð1	;ús   †B ÂDF
Æ	F
c                 óØ  — |�°t        || j                  j                  j                  j                  j
                  «      srt        d|›d|j                  j                  ›d| j                  j                  ›d| j                  j                  j                  j                  j                  ›d�	«      ‚|�°|j                  j                  €0t        j                  |j                  |¬«      |j                  _
        |j                  j                  €0t        j                  |j                  |¬«      |j                  _
        t        j                  ||«      st        d|z  «      ‚| j                  j                  }|€g| j                  j                  |d¬	«      }|�|j!                  |d«       | j                  j"                  D ]  \  }}t%        ||j&                  d«       Œ nI| j                  j"                  D ]0  \  }}t%        ||j&                  t)        ||j&                  «      «       Œ2 | j                  j!                  ||«       |� |j*                  s|j!                  ||«       yyy)
aX  
        Set the related instance through the forward relation.

        With the example above, when setting ``child.parent = parent``:

        - ``self`` is the descriptor managing the ``parent`` attribute
        - ``instance`` is the ``child`` instance
        - ``value`` is the ``parent`` instance on the right of the equal sign
        NúCannot assign "ú": "rP   ú" must be a "ú" instance.rq   úGCannot assign "%r": the current database router prevents this relation.r�   )Ú
isinstancer   rR   rS   r{   Úconcrete_modelrs   Úobject_namerV   Ú_staterC   r   Údb_for_writeÚ	__class__Úallow_relationr’   r€   r‡   Úsetattrr    Úgetattrr   )r$   r%   r&   rR   ÚrelatedÚlh_fieldÚrh_fields          r'   r(   z"ForwardManyToOneDescriptor.__set__  s  € ð Ð¤ZØ�4—:‘:×*Ñ*×0Ñ0×6Ñ6×EÑEô&
õ ò Ø—N‘N×.Ó.Ø—J‘J—O“OØ—J‘J×+Ñ+×1Ñ1×7Ñ7×CÓCðóð ð ÐØ�‰×!Ñ!Ð)Ü%+×%8Ñ%8Ø×&Ñ&°ô&�—‘Ô"ð �|‰|�‰Ð&Ü"(×"5Ñ"5Ø—O‘O¨hô#�—‘”ô ×(Ñ(¨°Ô9Ü ð Ø"'ñ(óð ð
 —z‘z×.Ñ.ˆð
 ˆ=ð —j‘j×1Ñ1°(ÀDÐ1ÓIˆGð
 Ð"Ø×-Ñ-¨g°tÔ<à&*§j¡j×&?Ô&?Ñ"�˜(Ü˜ (×"2Ñ"2°DÕ9ñ '@ð
 '+§j¡j×&?Ô&?Ñ"�˜(Ü˜ (×"2Ñ"2´G¸EÀ8×CSÑCSÓ4TÕUð '@ð
 	�
‰
×#Ñ# H¨eÔ4ð
 Ð \×%:Ò%:Ø×)Ñ)¨%°Õ:ð &;Ðr)   c                 óf   — t         | j                  j                  | j                  j                  ffS )zÍ
        Pickling should return the instance attached by self.field on the
        model, not a new copy of that descriptor. Use getattr() to retrieve
        the instance directly from the model.
        )r©   r   rS   rV   rW   s    r'   Ú
__reduce__z%ForwardManyToOneDescriptor.__reduce__a  s&   € ô ˜Ÿ™×)Ñ)¨4¯:©:¯?©?Ð;Ð;Ð;r)   r   )r*   r+   r,   Ú__doc__rL   r   rO   r!   rb   rl   rj   r�   rš   r(   r®   r-   r)   r'   rI   rI   {   sO   „ ñ
ò$ð ñ
ó ð
ò".òYó	Bó-
ò^Gó
1òfJ;óX<r)   rI   c                   ó,   ‡ — e Zd ZdZˆ fd„Zˆ fd„Zˆ xZS )ÚForwardOneToOneDescriptora  
    Accessor to the related object on the forward side of a one-to-one relation.

    In the example::

        class Restaurant(Model):
            place = OneToOneField(Place, related_name='restaurant')

    ``Restaurant.place`` is a ``ForwardOneToOneDescriptor`` instance.
    c                 ó8  •‡— | j                   j                  j                  rà|j                  «       }| j                   j                  j                  }|j
                  j                  D �cg c]  }|j                  ‘Œ c}Št        ˆfd„|D «       «      sn‰D �ci c]  }|t        ||«      “Œ }} |di |¤Ž}|j                  j                  |j                  _        |j                  j                  |j                  _        |S t        ‰| �9  |«      S c c}w c c}w )Nc              3   ó&   •K  — | ]  }|‰v –— Œ
 y ­wr   r-   )Ú.0r   Úfieldss     €r'   Ú	<genexpr>z7ForwardOneToOneDescriptor.get_object.<locals>.<genexpr>�  s   øè ø€ Ð=±H¨5�u ”±Hùs   ƒr-   )r   rR   Úparent_linkÚget_deferred_fieldsrS   r{   Úconcrete_fieldsr    Úanyr©   r¤   ÚaddingrC   Úsuperr�   )	r$   r%   ÚdeferredÚ	rel_modelr   ÚkwargsÚobjrµ   r¦   s	          @€r'   r�   z$ForwardOneToOneDescriptor.get_objectv  sè   ù€ Ø�:‰:×"Ñ"×.Ò.Ø×3Ñ3Ó5ˆHð Ÿ
™
×/Ñ/×5Ñ5ˆIØ1:·±×1PÒ1PÓQÑ1P¨�e—m“mÐ1PÑQˆFô
 Ó=±HÓ=Ô=ÙGMÓNÁv¸e˜%¤¨°5Ó!9Ñ9Àv�ÐNÙÑ) &Ñ)�Ø$,§O¡O×$:Ñ$:�—
‘
Ô!Ø (§¡× 2Ñ 2�—
‘
”Ø�
Ü‰wÑ! (Ó+Ð+ùò Rùò Os   Á+DÂDc                 óÊ  •— t         ‰| �  ||«       | j                  j                  r·| j                  j                  j
                  r–|j                  }|j                  D �cg c]  }|j                  r|j                  r|‘Œ }}|D ]S  }|j                  j                  j                  j                  j                  }|�t        ||«      nd }t        |||«       ŒU y y y c c}w r   )r¼   r(   r   Úprimary_keyrR   r·   r{   r¹   rS   Úpkr    r©   r¨   )	r$   r%   r&   Úoptsr   Úinherited_pk_fieldsÚrel_model_pk_nameÚ	raw_valuer¦   s	           €r'   r(   z!ForwardOneToOneDescriptor.__set__‰  sÙ   ø€ Ü‰‰˜ %Ô(ð �:‰:×!Ò! d§j¡j×&=Ñ&=×&IÒ&IØ—>‘>ˆDð "×1Ò1ó#á1�EØ×$Ò$¨×);Ò);ò Ø1ð  ð #ó
 -�Ø$)×$6Ñ$6×$<Ñ$<×$BÑ$B×$EÑ$E×$MÑ$MÐ!à9>Ð9J”G˜EÐ#4Ô5ÐPTð ô ˜Ð"3°YÕ?ñ -ð 'JÐ!ùò#s   Á"!C )r*   r+   r,   r¯   r�   r(   Ú__classcell__©r¦   s   @r'   r±   r±   j  s   ø„ ñ	ô,÷&@ð @r)   r±   c                   óV   — e Zd ZdZd„ Zed„ «       Zd„ Zd„ Zdd„Z	dd„Z
dd	„Zd
„ Zd„ Zy)ÚReverseOneToOneDescriptora  
    Accessor to the related object on the reverse side of a one-to-one
    relation.

    In the example::

        class Restaurant(Model):
            place = OneToOneField(Place, related_name='restaurant')

    ``Place.restaurant`` is a ``ReverseOneToOneDescriptor`` instance.
    c                 ó   — || _         y r   )rª   )r$   rª   s     r'   rL   z"ReverseOneToOneDescriptor.__init__ª  s   € ð ˆ�r)   c           	      ó  — t        d| j                  j                  j                  t        f| j                  j
                  j                  | j                  j
                  j                  ›d| j                  j                  ›d�dœ«      S rN   )	rQ   rª   Úrelated_modelrT   rU   rS   r+   r,   rV   rW   s    r'   rO   z3ReverseOneToOneDescriptor.RelatedObjectDoesNotExist¯  sk   € ô Ø'Ø�\‰\×'Ñ'×4Ñ4´nÐEà"Ÿl™l×0Ñ0×;Ñ;ð —L‘L×&Ñ&×3Ó3Ø—L‘L×%Ó%ð!ñó
ð 	
r)   c                 ó8   — | j                   j                  |«      S r   )rª   r!   rY   s     r'   r!   z#ReverseOneToOneDescriptor.is_cachedÀ  s   € Ø�|‰|×%Ñ% hÓ/Ð/r)   c                 ó~   — | j                   j                  j                  j                  |¬«      j	                  «       S r[   )rª   rÎ   r^   r_   r`   ra   s     r'   rb   z&ReverseOneToOneDescriptor.get_querysetÃ  s/   € Ø�|‰|×)Ñ)×7Ñ7×BÑBÈÐBÓO×SÑSÓUÐUr)   Nc                 ó†   — t        j                  dt        d¬«       |€| j                  |«      S | j                  ||g«      S rd   rg   rk   s      r'   rl   z/ReverseOneToOneDescriptor.get_prefetch_querysetÆ  rm   r)   c                 ó�  — |rt        |«      dk7  rt        d«      ‚|r|d   n| j                  «       }|j                  |d   ¬«       | j                  j
                  j                  }| j                  j
                  j                  }|D �ci c]  } ||«      |“Œ }}d| j                  j
                  j                  z  |i} |j                  di |¤Ž}|j                  j                  «        |D ]3  }	| ||	«         }
| j                  j
                  j                  |	|
«       Œ5 |||d| j                  j                  dfS c c}w )	Nro   rp   r   rq   ú%s__inTFr-   )rr   rs   rb   rt   rª   r   rv   ru   rV   rz   r5   r~   r€   r�   )r$   rA   r‚   r?   rƒ   r„   r…   r†   r5   rˆ   r%   s              r'   rj   z0ReverseOneToOneDescriptor.get_prefetch_querysetsÑ  s>  € Ùœ˜Y›¨1Ò,Üðóð ñ $-�9˜Q’<°$×2CÑ2CÓ2EˆØ×Ñ Y¨q¡\ÐÔ2à—|‘|×)Ñ)×AÑAˆØŸ™×*Ñ*×DÑDˆÙ@IÓJÁ	¸™-¨Ó-¨tÑ3À	ˆÐJØ˜DŸL™L×.Ñ.×3Ñ3Ñ3°YÐ?ˆØ"�8—?‘?Ñ+ UÑ+ˆð 	�‰×%Ñ%Ô'ó  ˆGØ%¡l°7Ó&;Ñ<ˆHØ�L‰L×Ñ×/Ñ/°¸ÕBð  ð ØØØØ�L‰L×#Ñ#Øð
ð 	
ùò Ks   ÂEc                 óz  — |€| S 	 | j                   j                  |«      }|€?| j                  |j                  j                  ›d| j                   j                  ›d�«      ‚|S # t        $ rÍ |j                  «       sd}nš| j                   j                  j                  |«      }	  | j                  |¬«      j                  di |¤Ž}| j                   j                  j                  ||«       n+# | j                   j                  j                  $ r d}Y nw xY w| j                   j                  ||«       Y �Œw xY w)a‰  
        Get the related instance through the reverse relation.

        With the example above, when getting ``place.restaurant``:

        - ``self`` is the descriptor managing the ``restaurant`` attribute
        - ``instance`` is the ``place`` instance
        - ``cls`` is the ``Place`` class (unused)

        Keep in mind that ``Restaurant`` holds the foreign key to ``Place``.
        Nrq   r‘   rP   r-   )rª   r’   r“   Ú
_is_pk_setr   Úget_forward_related_filterrb   r   r€   rÎ   rT   rO   r¦   r*   Úaccessor_name)r$   r%   r–   rˆ   Úfilter_argss        r'   rš   z!ReverseOneToOneDescriptor.__get__ñ  s'  € ð ÐØˆKð
	=Ø—l‘l×3Ñ3°HÓ=ˆGð" ˆ?Ø×0Ñ0à×%Ñ%×.Ó.°·±×0JÓ0JðLóð ð
 ˆNøô- ò 	=Ø×&Ñ&Ô(Ø‘à"Ÿl™l×0Ñ0×KÑKÈHÓU�ðKØF˜d×/Ñ/¸Ð/ÓB×FÑFÑUÈÑU�Gð —L‘L×&Ñ&×7Ñ7¸ÀÕJøð —|‘|×1Ñ1×>Ñ>ò #Ø"’Gð#úð �L‰L×)Ñ)¨(°G×<ð	=ús6   †A$ Á$AD:Â&"C/Ã'D:Ã/%DÄD:ÄDÄD:Ä9D:c                 óÆ  ‡— |€g| j                   j                  ‰d¬«      }|�G| j                   j                  ‰«       t        || j                   j                  j
                  d«       yyt        || j                   j                  «      sht        d|›d‰j                  j                  ›d| j                   j                  ›d| j                   j                  j                  j                  ›d�	«      ‚‰j                  j                  €0t        j                  ‰j                   |¬«      ‰j                  _        |j                  j                  €0t        j                  |j                   ‰¬«      |j                  _        t        j"                  |‰«      st        d	|z  «      ‚t%        ˆfd
„| j                   j                  j&                  D «       «      }t)        | j                   j                  j*                  «      D ]  \  }}t        ||j,                  ||   «       Œ! | j                   j/                  ‰|«       | j                   j                  j/                  |‰«       y)a¶  
        Set the related instance through the reverse relation.

        With the example above, when setting ``place.restaurant = restaurant``:

        - ``self`` is the descriptor managing the ``restaurant`` attribute
        - ``instance`` is the ``place`` instance
        - ``value`` is the ``restaurant`` instance on the right of the equal sign

        Keep in mind that ``Restaurant`` holds the foreign key to ``Place``.
        Nr�   rœ   r�   rP   rž   rŸ   rq   r    c              3   óJ   •K  — | ]  }t        ‰|j                  «      –— Œ y ­wr   )r©   r    )r´   r   r%   s     €r'   r¶   z4ReverseOneToOneDescriptor.__set__.<locals>.<genexpr>S  s$   øè ø€ ð áF�Eô ˜ %§-¡-×0ÙFùs   ƒ #)rª   r’   r"   r¨   r   rV   r¡   rÎ   rs   r{   r£   r×   r¤   rC   r   r¥   r¦   r§   Útuplerw   Ú	enumerateÚlocal_related_fieldsr    r€   )r$   r%   r&   rˆ   Ú
related_pkÚindexr   s    `     r'   r(   z!ReverseOneToOneDescriptor.__set__  sç  ø€ ð  ˆ=ð —l‘l×3Ñ3°HÀdÐ3ÓKˆGØÐ"ð —‘×0Ñ0°Ô:ô ˜ §¡×!3Ñ!3×!8Ñ!8¸$Õ?ð #ô ˜E 4§<¡<×#=Ñ#=Ô>åò Ø—N‘N×.Ó.Ø—L‘L×.Ó.Ø—L‘L×.Ñ.×4Ñ4×@Ó@ðóð ð �‰×!Ñ!Ð)Ü%+×%8Ñ%8Ø×&Ñ&°ô&�—‘Ô"ð �|‰|�‰Ð&Ü"(×"5Ñ"5Ø—O‘O¨hô#�—‘”ô ×(Ñ(¨°Ô9Ü ð Ø"'ñ(óð ô
 ó à!Ÿ\™\×/Ñ/×FÒFóó ˆJô !*¨$¯,©,×*<Ñ*<×*QÑ*QÖ R‘��uÜ˜˜uŸ}™}¨j¸Ñ.?Õ@ð !Sð
 �L‰L×)Ñ)¨(°EÔ:ð �L‰L×Ñ×/Ñ/°°xÕ@r)   c                 óf   — t         | j                  j                  | j                  j                  ffS r   )r©   rª   rS   rV   rW   s    r'   r®   z$ReverseOneToOneDescriptor.__reduce__d  s&   € ä˜Ÿ™×+Ñ+¨T¯\©\×->Ñ->Ð?Ð?Ð?r)   r   )r*   r+   r,   r¯   rL   r   rO   r!   rb   rl   rj   rš   r(   r®   r-   r)   r'   rË   rË   �  sK   „ ñ
òð
 ñ
ó ð
ò 0òVó	Bó
ó@*òXEAóN@r)   rË   c                   ó:   — e Zd ZdZd„ Zed„ «       Zdd„Zd„ Zd„ Z	y)	ÚReverseManyToOneDescriptora¹  
    Accessor to the related objects manager on the reverse side of a
    many-to-one relation.

    In the example::

        class Child(Model):
            parent = ForeignKey(Parent, related_name='children')

    ``Parent.children`` is a ``ReverseManyToOneDescriptor`` instance.

    Most of the implementation is delegated to a dynamically defined manager
    class built by ``create_forward_many_to_many_manager()`` defined below.
    c                 ó4   — || _         |j                  | _        y r   )Úrelr   )r$   rä   s     r'   rL   z#ReverseManyToOneDescriptor.__init__y  s   € ØˆŒØ—Y‘Yˆ�
r)   c                 ó‚   — | j                   j                  }t        |j                  j                  | j                   «      S r   )rä   rÎ   Ú"create_reverse_many_to_one_managerÚ_default_managerr¦   ©r$   rÎ   s     r'   Úrelated_manager_clsz.ReverseManyToOneDescriptor.related_manager_cls}  s4   € àŸ™×.Ñ.ˆä1Ø×*Ñ*×4Ñ4Ø�H‰Hó
ð 	
r)   Nc                 ó,   — |€| S | j                  |«      S )a9  
        Get the related objects through the reverse relation.

        With the example above, when getting ``parent.children``:

        - ``self`` is the descriptor managing the ``children`` attribute
        - ``instance`` is the ``parent`` instance
        - ``cls`` is the ``Parent`` class (unused)
        )ré   )r$   r%   r–   s      r'   rš   z"ReverseManyToOneDescriptor.__get__†  s    € ð ÐØˆKà×'Ñ'¨Ó1Ð1r)   c                 ó2   — d| j                   j                  fS )Nzreverse side of a related set)rä   r×   rW   s    r'   Ú_get_set_deprecation_msg_paramsz:ReverseManyToOneDescriptor._get_set_deprecation_msg_params•  s   € à+Ø�H‰H×"Ñ"ð
ð 	
r)   c                 ó:   — t        d| j                  «       z  «      ‚)Nz@Direct assignment to the %s is prohibited. Use %s.set() instead.)Ú	TypeErrorrì   r#   s      r'   r(   z"ReverseManyToOneDescriptor.__set__›  s#   € ÜØNØ×2Ñ2Ó4ñ5ó
ð 	
r)   r   )
r*   r+   r,   r¯   rL   r   ré   rš   rì   r(   r-   r)   r'   râ   râ   i  s/   „ ñòð ñ
ó ð
ó2ò
ó
r)   râ   c                 ó0   ‡‡—  G ˆˆfd„d| t         «      Š‰S )zæ
    Create a manager for the reverse side of a many-to-one relation.

    This manager subclasses another manager, generally the default manager of
    the related model, and adds behaviors specific to many-to-one relations.
    c                   ó   •‡ — e Zd Zˆ ˆfd„Zˆfd„ZdZd„ Zd„ Zd„ Zˆ fd„Z	dd„Z
dˆ fd	„	Zdd
œd„Zde_        dd
œd„Zde_        ˆˆ fd„Zde_        d„ Zde_        ˆˆ fd„Zde_        d„ Zde_        ˆˆ fd„Zde_        d„ Zde_        W °j*                  j,                  r>dd
œd„Zde_        dd
œd„Zde_        dd
œd„Zde_        dd
œd„Zde_        d„ Zde_        dddœd„Zde_        dddœd„Zde_        ˆ xZS )ú:create_reverse_many_to_one_manager.<locals>.RelatedManagerc                 ó®   •— t         ‰| �  «        || _        ‰j                  | _        ‰j
                  | _        | j
                  j                  |i| _        y r   )r¼   rL   r%   rÎ   rS   r   rV   Úcore_filters)r$   r%   r¦   rä   s     €€r'   rL   zCcreate_reverse_many_to_one_manager.<locals>.RelatedManager.__init__«  sB   ø€ Ü‰GÑÔà$ˆDŒMØ×*Ñ*ˆDŒJØŸ™ˆDŒJà!%§¡§¡°(Ð ;ˆDÕr)   c                ó€   •— t        | j                  |«      }t        |j                  ‰«      } || j                  «      S r   )r©   rS   ræ   r¦   r%   )r$   ÚmanagerÚmanager_classrä   s      €r'   Ú__call__zCcreate_reverse_many_to_one_manager.<locals>.RelatedManager.__call__´  s5   ø€ Ü˜dŸj™j¨'Ó2ˆGÜ>¸w×?PÑ?PÐRUÓVˆMÙ  §¡Ó/Ð/r)   Tc                 óÆ   — | j                   j                  D ]H  }t        | j                  |j                  «      �Œ$t        d| j                  ›d|j                  › d�«      ‚ y )NÚ"ú#" needs to have a value for field "z'" before this relationship can be used.)r   rw   r©   r%   r    rs   )r$   r   s     r'   Ú_check_fk_valzHcreate_reverse_many_to_one_manager.<locals>.RelatedManager._check_fk_val»  s[   € ØŸ™×:Ô:�Ü˜4Ÿ=™=¨%¯-©-Ó8Ñ@Ü$Ø˜DŸM™MÐ,ð -Ø!ŸM™M˜?Ð*QðSóð ñ ;r)   c           
      óÞ  — | j                   xs+ t        j                  | j                  | j                  ¬«      }t
        |   j                  j                  }|j                  | j                  ¬«       | j                   r|j                  | j                   «      }d|_
         |j                  di | j                  ¤Ž}| j                  j                  D ]>  }t        | j                  |j                   «      }|�	|dk(  sŒ+|sŒ.|j#                  «       c S  | j                  j$                  rV	 | j                  j&                  }t        | j                  |j                   «      }| j                  || j                  ii|_        |S # t(        $ ra t+        | j                  j,                  d   j.                  D �cg c]"  }t        | j                  |j                   «      ‘Œ$ nc c}w c}«      }Y ŒŠw xY w)úX
            Filter the queryset for the instance this manager is bound to.
            rq   TÚ éÿÿÿÿr-   )r4   r   Údb_for_readrS   r%   r   r7   Ú!interprets_empty_strings_as_nullsrt   r0   Ú_defer_next_filterrz   ró   r   rw   r©   r    ÚnoneÚmany_to_oneÚtarget_fieldr   rÛ   Ú
path_infosÚtarget_fieldsÚ_known_related_objects)r$   r?   rC   Úempty_strings_as_nullr   Úvalr  Ú
rel_obj_ids           r'   Ú_apply_rel_filterszMcreate_reverse_many_to_one_manager.<locals>.RelatedManager._apply_rel_filtersÃ  s”  € ð —‘ÒSœV×/Ñ/°·
±
ÀTÇ]Á]ÔSˆBÜ$/Øñ%ç‰h×8Ñ8ð "ð ×Ñ¨¯©ÐÔ7Ø�xŠxØ#Ÿ>™>¨$¯(©(Ó3�Ø*.ˆHÔ'Ø&�x—‘Ñ;¨×):Ñ):Ñ;ˆHØŸ™×:Ô:�Ü˜dŸm™m¨U¯]©]Ó;�Ø�; 3¨"£9Ò1FØ#Ÿ=™=›?Ò*ð ;ð �z‰z×%Ò%ð
NØ#'§:¡:×#:Ñ#:�Lô ")¨¯©¸×8LÑ8LÓ!M�Jà—J‘J ¨T¯]©]Ð ;ð3�Ô/ð ˆOøô "ò ô "'ð 15·
±
×0EÑ0EÀbÑ0I×0WÒ0Wóá0W ô $ D§M¡M°<×3GÑ3GÕHÙ0Wùôó"’Jðús   Ä+F Æ3G,Æ5'G
ÇG,Ç+G,c                 ó¶   — 	 | j                   j                  j                  | j                  j                  j
                  «       y # t        t        f$ r Y y w xY wr   )r%   Ú_prefetched_objects_cacheÚpopr   rR   r�   rU   r“   rW   s    r'   Ú_remove_prefetched_objectszUcreate_reverse_many_to_one_manager.<locals>.RelatedManager._remove_prefetched_objectsë  sK   € ðØ—‘×7Ñ7×;Ñ;Ø—J‘J×+Ñ+×6Ñ6õøô #¤HÐ-ò Ùðús   ‚AA ÁAÁAc                 óh  •— | j                   j                  «       s,t        | j                   j                  j                  ›d�«      ‚	 | j                   j
                  | j                  j                  j                     S # t        t        f$ r" t        ‰| �1  «       }| j                  |«      cY S w xY w)NzQ instance needs to have a primary key value before this relationship can be used.)r%   rÕ   rs   r¦   r*   r  r   rR   r�   rU   r“   r¼   rb   r  )r$   r?   r¦   s     €r'   rb   zGcreate_reverse_many_to_one_manager.<locals>.RelatedManager.get_querysetó  s§   ø€ ð —=‘=×+Ñ+Ô-Ü Ø—}‘}×.Ñ.×7Ñ7Ð:ð ;Nð Oóð ð9Ø—}‘}×>Ñ>Ø—J‘J×+Ñ+×6Ñ6ñð øô #¤HÐ-ò 9Ü ™7Ñ/Ó1�Ø×.Ñ.¨xÓ8Ò8ð9ús   Á	6B  Â .B1Â0B1c                 ó†   — t        j                  dt        d¬«       |€| j                  |«      S | j                  ||g«      S rd   rg   rk   s      r'   rl   zPcreate_reverse_many_to_one_manager.<locals>.RelatedManager.get_prefetch_queryset  óG   € Ü�M‰Mðä(Øõ	ð ÐØ×2Ñ2°9Ó=Ð=Ø×.Ñ.¨y¸8¸*ÓEÐEr)   c                 ó”  •— |rt        |«      dk7  rt        d«      ‚|r|d   nt        ‰| �  «       }|j	                  |d   ¬«       |j                  |j                  xs | j                  «      }| j                  j                  }| j                  j                  }|D �ci c]  } ||«      |“Œ }}t        || j                  j                  |«      }|D ]E  }| j                  j                  |«      rŒ| ||«         }	| j                  j                  ||	«       ŒG | j                  j                  j                  }
|||d|
dfS c c}w )Nro   rp   r   rq   F)rr   rs   r¼   rb   rt   r0   r4   r   rv   ru   rG   rV   r!   r€   rR   r�   )r$   rA   r‚   r?   rƒ   r„   r…   r†   rˆ   r%   r�   r¦   s              €r'   rj   zQcreate_reverse_many_to_one_manager.<locals>.RelatedManager.get_prefetch_querysets  s-  ø€ ÙœS ›^¨qÒ0Ü ð#óð ñ (1�y ’|´e±gÑ6JÓ6LˆHØ×Ñ¨°1©ÐÔ6Ø—~‘~ h§l¡lÒ&>°d·h±hÓ?ˆHàŸ:™:×=Ñ=ˆLØ ŸJ™J×@Ñ@ˆMÙDMÓNÁI¸D™m¨DÓ1°4Ñ7ÀIˆNÐNÜ0°¸4¿:¹:¿?¹?ÈIÓVˆHó $�Ø—z‘z×+Ñ+¨GÕ4Ø-©l¸7Ó.CÑD�HØ—J‘J×/Ñ/°¸ÕBð $ð Ÿ™×0Ñ0×;Ñ;ˆJØ˜\¨=¸%ÀÈUÐRÐRùò Os   Â E©Úbulkc                óà  ‡ — ‰ j                  «        ‰ j                  «        t        j                  ‰ j                  ‰ j
                  ¬«      }ˆ fd„}|rÏg }|D ]b  } ||«       |j                  j                  s|j                  j                  |k7  rt        d|z  «      ‚|j                  |j                  «       Œd  ‰ j                  j                  j                  |«      j                  |¬«      j                  di ‰ j                   j"                  ‰ j
                  i¤Ž y t%        j&                  |d¬«      5  |D ]  } ||«       |j)                  «        Œ 	 d d d «       y # 1 sw Y   y xY w)Nrq   c                 óæ   •— t        | ‰j                  «      s/t        d‰j                  j                  j                  ›d| ›�«      ‚t        | ‰j                  j                  ‰j                  «       y )NÚ'ú' instance expected, got )	r¡   rS   rî   r{   r£   r¨   r   rV   r%   )rÀ   r$   s    €r'   Úcheck_and_update_objz\create_reverse_many_to_one_manager.<locals>.RelatedManager.add.<locals>.check_and_update_obj,  sU   ø€ Ü! # t§z¡zÔ2Ý#ð !ŸJ™J×,Ñ,×8Ó8Ùðóð ô ˜˜TŸZ™ZŸ_™_¨d¯m©mÕ<r)   zA%r instance isn't saved. Use bulk=False or save the object first.©Úpk__inF©r0   Ú	savepointr-   )rû   r  r   r¥   rS   r%   r¤   r»   rC   rs   ÚappendrÃ   r^   r0   rz   Úupdater   rV   r	   ÚatomicÚsave)r$   r  ÚobjsrC   r  ÚpksrÀ   s   `      r'   Úaddz>create_reverse_many_to_one_manager.<locals>.RelatedManager.add'  s)  ø€ Ø×ÑÔ Ø×+Ñ+Ô-Ü×$Ñ$ T§Z¡Z¸$¿-¹-ÔHˆBô	=ñ Ø�Û�CÙ(¨Ô-Ø—z‘z×(Ò(¨C¯J©J¯M©M¸RÒ,?Ü(ð0Ø25ñ6óð ð —J‘J˜sŸv™vÕ&ð  ð M�—
‘
×(Ñ(×.Ñ.¨rÓ2×9Ñ9ÀÐ9ÓE×LÑLñ àŸ
™
Ÿ™¨¯©ðóô !×'Ñ'¨b¸EÖBÛ#˜Ù,¨SÔ1ØŸ™�
ñ  $÷ C×BÑBús   Ä: E$Å$E-c             —   óT   K  —  t        | j                  «      |d|iŽƒ d {  –—† S 7 Œ­w©Nr  ©r   r&  ©r$   r  r$  s      r'   Úaaddz?create_reverse_many_to_one_manager.<locals>.RelatedManager.aaddN  s'   è ø€ Ø0œ t§x¡xÓ0°$ÐB¸TÑB×BÐBÐBúó   ‚(¡&¢(c                 ó  •— | j                  «        | j                  «        | j                  || j                  j                  <   t        j                  | j                  | j                  ¬«      }t        ‰| j                  |«      �*  di |¤ŽS ©Nrq   r-   )rû   r  r%   r   rV   r   r¥   rS   r¼   r_   Úcreate©r$   r¿   rC   ÚRelatedManagerr¦   s      €€r'   r/  zAcreate_reverse_many_to_one_manager.<locals>.RelatedManager.createS  si   ø€ Ø×ÑÔ Ø×+Ñ+Ô-Ø&*§m¡mˆF�4—:‘:—?‘?Ñ#Ü×$Ñ$ T§Z¡Z¸$¿-¹-ÔHˆBÜ˜¨¯©¸Ó)<ÑDÑNÀvÑNÐNr)   c              ›   óT   K  —  t        | j                  «      di |¤Žƒ d {  –—† S 7 Œ­w©Nr-   ©r   r/  ©r$   r¿   s     r'   ÚacreatezBcreate_reverse_many_to_one_manager.<locals>.RelatedManager.acreate\  s%   è ø€ Ø3œ t§{¡{Ó3Ñ=°fÑ=×=Ð=Ð=úr,  c                 óü   •— | j                  «        | j                  || j                  j                  <   t	        j
                  | j                  | j                  ¬«      }t        ‰| j                  |«      �&  di |¤ŽS r.  )
rû   r%   r   rV   r   r¥   rS   r¼   r_   Úget_or_creater0  s      €€r'   r8  zHcreate_reverse_many_to_one_manager.<locals>.RelatedManager.get_or_createa  s]   ø€ Ø×ÑÔ Ø&*§m¡mˆF�4—:‘:—?‘?Ñ#Ü×$Ñ$ T§Z¡Z¸$¿-¹-ÔHˆBÜ˜¨¯©¸Ó)<ÑKÑUÈfÑUÐUr)   c              ›   óT   K  —  t        | j                  «      di |¤Žƒ d {  –—† S 7 Œ­wr3  ©r   r8  r5  s     r'   Úaget_or_createzIcreate_reverse_many_to_one_manager.<locals>.RelatedManager.aget_or_createi  s'   è ø€ Ø:œ t×'9Ñ'9Ó:ÑD¸VÑD×DÐDÐDúr,  c                 óü   •— | j                  «        | j                  || j                  j                  <   t	        j
                  | j                  | j                  ¬«      }t        ‰| j                  |«      �&  di |¤ŽS r.  )
rû   r%   r   rV   r   r¥   rS   r¼   r_   Úupdate_or_creater0  s      €€r'   r=  zKcreate_reverse_many_to_one_manager.<locals>.RelatedManager.update_or_createn  s^   ø€ Ø×ÑÔ Ø&*§m¡mˆF�4—:‘:—?‘?Ñ#Ü×$Ñ$ T§Z¡Z¸$¿-¹-ÔHˆBÜ˜¨¯©¸Ó)<ÑNÑXÐQWÑXÐXr)   c              ›   óT   K  —  t        | j                  «      di |¤Žƒ d {  –—† S 7 Œ­wr3  ©r   r=  r5  s     r'   Úaupdate_or_createzLcreate_reverse_many_to_one_manager.<locals>.RelatedManager.aupdate_or_createv  s'   è ø€ Ø=œ t×'<Ñ'<Ó=ÑGÀÑG×GÐGÐGúr,  c                óT  — |sy | j                  «        | j                  j                  | j                  «      }t	        «       }|D ]¿  }t        || j                  «      s/t        d| j                  j                  j                  ›d|›�«      ‚| j                  j                  |«      |k(  r|j                  |j                  «       Œ‚| j                  j                  j                  j                  |›d| j                  ›d�«      ‚ | j                  | j!                  |¬«      |«       y )Nr  r  z is not related to rP   r  )rû   r   ru   r%   Úsetr¡   rS   rî   r{   r£   rv   r&  rÃ   rR   rT   Ú_clearrz   )r$   r  r$  r
  Úold_idsrÀ   s         r'   ÚremovezAcreate_reverse_many_to_one_manager.<locals>.RelatedManager.remove  sè   € ÙØØ×"Ñ"Ô$Ø—j‘j×:Ñ:¸4¿=¹=ÓI�Ü›%�Û�CÜ% c¨4¯:©:Ô6Ý'ð !%§
¡
× 0Ñ 0× <Ó <Ù #ðóð ð —z‘z×9Ñ9¸#Ó>À#ÒEØŸ™ C§F¡FÕ+à"Ÿj™j×5Ñ5×;Ñ;×HÑHÚ:=¸t¿}»}ÐMóð ð  ð  —‘˜DŸK™K¨w˜KÓ7¸Õ>r)   c             —   óT   K  —  t        | j                  «      |d|iŽƒ d {  –—† S 7 Œ­wr(  ©r   rE  r*  s      r'   ÚaremovezBcreate_reverse_many_to_one_manager.<locals>.RelatedManager.aremove™  s'   è ø€ Ø7œ]¨4¯;©;Ó7¸ÐIÀDÑI×IÐIÐIúr,  c                óH   — | j                  «        | j                  | |«       y r   )rû   rC  ©r$   r  s     r'   Úclearz@create_reverse_many_to_one_manager.<locals>.RelatedManager.clearž  s   € Ø×"Ñ"Ô$Ø—‘˜D $Õ'r)   c             “   óV   K  —  t        | j                  «      |¬«      ƒ d {  –—† S 7 Œ­w)Nr  ©r   rK  rJ  s     r'   ÚaclearzAcreate_reverse_many_to_one_manager.<locals>.RelatedManager.aclear¤  s"   è ø€ Ø6œ]¨4¯:©:Ó6¸DÔA×AÐAÐAús   ‚ )¢'£)c                 óê  — | j                  «        t        j                  | j                  | j                  ¬«      }|j                  |«      }|r) |j                  di | j                  j                  d i¤Ž y t        j                  |d¬«      5  |D ]J  }t        || j                  j                  d «       |j                  | j                  j                  g¬«       ŒL 	 d d d «       y # 1 sw Y   y xY w)Nrq   Fr  )Úupdate_fieldsr-   )r  r   r¥   rS   r%   r0   r!  r   rV   r	   r"  r¨   r#  )r$   r?   r  rC   rÀ   s        r'   rC  zAcreate_reverse_many_to_one_manager.<locals>.RelatedManager._clear©  s«   € Ø×/Ñ/Ô1Ü×(Ñ(¨¯©¸d¿m¹mÔL�Ø#Ÿ>™>¨"Ó-�Ùà#�H—O‘OÑ> t§z¡z§¡¸Ð&=Ó>ä$×+Ñ+°"ÀÖFÛ#+˜CÜ# C¨¯©¯©¸$Ô?ØŸH™H°D·J±J·O±OÐ3D˜HÕEñ $,÷ G×FÑFús   ÂAC)Ã)C2F)r  rK  c                ó€  — | j                  «        t        |«      }| j                  j                  rït	        j
                  | j                  | j                  ¬«      }t        j                  |d¬«      5  |r%| j                  |¬«        | j                  |d|iŽ n|t        | j                  |«      j                  «       «      }g }|D ])  }||v r|j                  |«       Œ|j!                  |«       Œ+  | j                  |d|iŽ  | j                  |d|iŽ d d d «       y  | j                  |d|iŽ y # 1 sw Y   y xY w)Nrq   Fr  r  r  )rû   rÛ   r   r•   r   r¥   rS   r%   r	   r"  rK  r&  rB  r0   r`   rE  r   )r$   r$  r  rK  rC   Úold_objsÚnew_objsrÀ   s           r'   rB  z>create_reverse_many_to_one_manager.<locals>.RelatedManager.set¸  s  € Ø×ÑÔ ô ˜“;ˆDà�z‰z�ŠÜ×(Ñ(¨¯©¸d¿m¹mÔL�Ü ×'Ñ'¨b¸EÖBÙØŸ
™
¨˜
Ô-Ø ˜Ÿ™ $Ð2¨TÓ2ä#& t§z¡z°"£~×'9Ñ'9Ó';Ó#<˜Ø#%˜Û#'˜CØ" h™Ø (§¡°Õ 4à (§¡°Õ 4ð	 $(ð $˜Ÿ™ XÐ9°DÒ9Ø ˜Ÿ™ (Ð6°Ò6÷ CÐBð  �—‘˜$Ð* TÓ*÷! CÐBús   Á4B$D4Ä4D=c             “   óZ   K  —  t        | j                  «      |||¬«      ƒ d {  –—† S 7 Œ­w)N)r$  r  rK  ©r   rB  )r$   r$  r  rK  s       r'   Úasetz?create_reverse_many_to_one_manager.<locals>.RelatedManager.asetÔ  s&   è ø€ Ø0œ t§x¡xÓ0°dÀÈUÔS×SÐSÐSúó   ‚"+¤)¥+r   )r*   r+   r,   rL   r÷   Údo_not_call_in_templatesrû   r  r  rb   rl   rj   r&  Úalters_datar+  r/  r6  r8  r;  r=  r@  r   r•   rE  rH  rK  rN  rC  rB  rV  rÈ   )r¦   r1  rä   s   @€€r'   r1  rñ   ª  sP  ù„ õ	<ô	0ð
 $(Ð ò	ò&	òP	ô	9ó"		Fõ	Sð0 #'ô #	#ðJ ˆŒà)-ô 	Cð  ˆÔõ	Oð "ˆÔò	>ð #ˆÔõ	Vð %)ˆÔ!ò	Eð &*ˆÔ"õ	Yð (,ÐÔ$ò	Hð )-ÐÔ%ñ �9‰9�>Š>à)-ô ?ð0 "&ˆFÔà04ô Jð #'ˆGÔà$(ô (ð !%ˆEÔà+/ô Bð "&ˆFÔòFð "&ˆFÔà$(°ô 	+ð4 ˆŒà+/°uô 	Tð  ˆ×Ðr)   r1  ©r   )Ú
superclassrä   r1  s    `@r'   ræ   ræ   ¢  s   ù€ ÷m ˜¤Zô m ð^	 Ðr)   c                   óJ   ‡ — e Zd ZdZdˆ fd„	Zed„ «       Zed„ «       Zd„ Z	ˆ xZ
S )ÚManyToManyDescriptoraá  
    Accessor to the related objects manager on the forward and reverse sides of
    a many-to-many relation.

    In the example::

        class Pizza(Model):
            toppings = ManyToManyField(Topping, related_name='pizzas')

    ``Pizza.toppings`` and ``Topping.pizzas`` are ``ManyToManyDescriptor``
    instances.

    Most of the implementation is delegated to a dynamically defined manager
    class built by ``create_forward_many_to_many_manager()`` defined below.
    c                 ó2   •— t         ‰| �  |«       || _        y r   )r¼   rL   Úreverse)r$   rä   r_  r¦   s      €r'   rL   zManyToManyDescriptor.__init__í  s   ø€ Ü‰Ñ˜Ôàˆ�r)   c                 ó.   — | j                   j                  S r   )rä   ÚthroughrW   s    r'   ra  zManyToManyDescriptor.throughò  s   € ð
 �x‰x×ÑÐr)   c                 óÞ   — | j                   r| j                  j                  n| j                  j                  }t	        |j
                  j                  | j                  | j                   ¬«      S )N)r_  )r_  rä   rÎ   rS   Ú#create_forward_many_to_many_managerrç   r¦   rè   s     r'   ré   z(ManyToManyDescriptor.related_manager_clsù  sK   € à26·,²,˜Ÿ™×.Ò.ÀDÇHÁHÇNÁNˆä2Ø×*Ñ*×4Ñ4Ø�H‰HØ—L‘Lô
ð 	
r)   c                 óš   — d| j                   rdndz  | j                   r| j                  j                  fS | j                  j                  fS )Nz%s side of a many-to-many setr_  Úforward)r_  rä   r×   r   rV   rW   s    r'   rì   z4ManyToManyDescriptor._get_set_deprecation_msg_params  sI   € à+Ø ŸLšL‰y¨iñ9à&*§l¢lˆD�H‰H×"Ñ"ð
ð 	
ð 9=¿
¹
¿¹ð
ð 	
r)   )F)r*   r+   r,   r¯   rL   Úpropertyra  r   ré   rì   rÈ   rÉ   s   @r'   r]  r]  Ü  s:   ø„ ñõ ð
 ñ ó ð ð ñ
ó ð
ö
r)   r]  c                 ó8   ‡ ‡‡‡—  G ˆˆˆˆ fd„d‰ t         «      Š‰S )zç
    Create a manager for the either side of a many-to-many relation.

    This manager subclasses another manager, generally the default manager of
    the related model, and adds behaviors specific to many-to-many relations.
    c                   ó*  •‡ — e Zd Zd%ˆ ˆˆfd„	Zˆˆfd„ZdZd„ Zd„ Zd„ Zd„ Z	ˆ fd	„Z
d%d
„Zd%ˆ fd„	Zed„ «       Zˆ ˆfd„Zˆ ˆfd„Zddœd„Zde_        ddœd„Zde_        d„ Zde_        d„ Zde_        ˆ fd„Zde_        d„ Zde_        dddœd„Zde_        dddœd„Zde_        ddœˆˆ fd„
Zde_        ddœd„Zde_        ddœˆˆ fd„
Zde_        ddœd„Zde_        ddœˆˆ fd„
Zde_        ddœd„Zde_        d „ Z d!„ Z!d"„ Z"ddœd#„Z#ˆ fd$„Z$ˆ xZ%S )&ú?create_forward_many_to_many_manager.<locals>.ManyRelatedManagerNc                 ó¶  •— t         ‰| �  «        || _        ‰s›‰j                  | _        ‰j                  j                  «       | _        ‰j                  j                  | _        ‰j                  j                  «       | _
        ‰j                  j                  «       | _        ‰j                  | _        n�‰j                  | _        ‰j                  j                  | _        ‰j                  j                  «       | _        ‰j                  j                  «       | _
        ‰j                  j                  «       | _        d| _        ‰j                  | _        ‰| _        | j                  j"                  j%                  | j                  «      | _        | j                  j"                  j%                  | j                  «      | _        i | _        i | _        | j&                  j.                  D ]f  \  }}| j                  ›d|j                  ›�}t1        ||j2                  «      | j*                  |<   |j                  | j,                  |j                  <   Œh | j&                  j5                  |«      | _        d | j6                  v r)t9        d|›d| j,                  | j                     ›d�«      ‚|j;                  «       s"t9        d|j<                  j>                  z  «      ‚y )NFÚ__rù   rú   z4" before this many-to-many relationship can be used.z]%r instance needs to have a primary key value before a many-to-many relationship can be used.) r¼   rL   r%   rS   r   Úrelated_query_nameÚquery_field_namerV   Úprefetch_cache_nameÚm2m_field_nameÚsource_field_nameÚm2m_reverse_field_nameÚtarget_field_nameÚsymmetricalrÎ   ra  r_  r{   Ú	get_fieldÚsource_fieldr  ró   Úpk_field_namesr‡   r©   r    ru   Úrelated_valrs   rÕ   r¦   r*   )r$   r%   r«   r¬   Úcore_filter_keyr¦   rä   r_  s        €€€r'   rL   zHcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager.__init__  s<  ø€ Ü‰GÑÔà$ˆDŒMáØ ŸY™Y�”
Ø(+¯	©	×(DÑ(DÓ(F�Ô%Ø+.¯9©9¯>©>�Ô(Ø),¯©×)AÑ)AÓ)C�Ô&Ø),¯©×)IÑ)IÓ)K�Ô&Ø#&§?¡?�Õ à ×.Ñ.�”
Ø(+¯	©	¯©�Ô%Ø+.¯9©9×+GÑ+GÓ+I�Ô(Ø),¯©×)IÑ)IÓ)K�Ô&Ø),¯©×)AÑ)AÓ)C�Ô&Ø#(�Ô àŸ;™;ˆDŒLØ"ˆDŒLà $§¡× 2Ñ 2× <Ñ <¸T×=SÑ=SÓ TˆDÔØ $§¡× 2Ñ 2× <Ñ <¸T×=SÑ=SÓ TˆDÔà "ˆDÔØ"$ˆDÔØ&*×&7Ñ&7×&FÔ&FÑ"�˜(Ø.2×.CÓ.CÀXÇ]Â]Ð"S�Ü5<¸XÀx×GWÑGWÓ5X�×!Ñ! /Ñ2Ø5=·]±]�×#Ñ# H§M¡MÒ2ð 'Gð
  $×0Ñ0×JÑJÈ8ÓTˆDÔØ�t×'Ñ'Ñ'Ý ò   ×!4Ñ!4°T×5KÑ5KÓ!LðNóð ð ×&Ñ&Ô(Ü ð?à×(Ñ(×1Ñ1ñ2óð ð )r)   c                ó„   •— t        | j                  |«      }t        |j                  ‰‰«      } || j                  ¬«      S rŠ   )r©   rS   rc  r¦   r%   )r$   rõ   rö   rä   r_  s      €€r'   r÷   zHcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager.__call__F  s;   ø€ Ü˜dŸj™j¨'Ó2ˆGÜ?Ø×!Ñ! 3¨óˆMñ !¨$¯-©-Ô8Ð8r)   Tc                 óÆ  — t        j                  | j                  | j                  fg«      }t	        |t
        «       xs |j                  «       }|r(|t        j                  | j                  › d�|fg«      z  }| j                  r[t        j                  | j                  | j                  fg«      }|r(|t        j                  | j                  › d�|fg«      z  }||z  }|S )Nr/   )	r   r/  rp  rw  r¡   r   Ú_has_filtersrr  rs  )r$   Úremoved_valsÚfiltersÚremoved_vals_filtersÚsymmetrical_filterss        r'   Ú_build_remove_filterszUcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager._build_remove_filtersO  sé   € Ü—h‘h ×!7Ñ!7¸×9IÑ9IÐ JÐKÓLˆGô ˜|¬XÓ6Ð6ÒU¸,×:SÑ:SÓ:Uð !ñ $Øœ1Ÿ8™8¨×)?Ñ)?Ð(@ÀÐ&EÀ|Ð%TÐ$UÓVÑV�Ø×ÒÜ&'§h¡hØ×,Ñ,¨d×.>Ñ.>Ð?Ð@ó'Ð#ñ (Ø'¬1¯8©8Ø!×3Ñ3Ð4°DÐ9¸<ÐHÐIó,ñ Ð'ð Ð.Ñ.�ØˆNr)   c                 óê   — |j                  | j                  ¬«       | j                  r|j                  | j                  «      }d|_         |j                  «       j                  di | j                  ¤ŽS )rý   rq   Tr-   )rt   r%   r4   r0   r  Ú_next_is_stickyrz   ró   )r$   r?   s     r'   r  zRcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager._apply_rel_filtersc  s_   € ð ×Ñ¨¯©ÐÔ7Ø�xŠxØ#Ÿ>™>¨$¯(©(Ó3�Ø*.ˆHÔ'Ø4�8×+Ñ+Ó-×4Ñ4ÑI°t×7HÑ7HÑIÐIr)   c                 ót   — 	 | j                   j                  | j                     S # t        t        f$ r Y y w xY wr   )r%   r  rn  rU   r“   rW   s    r'   Úget_prefetch_cachezRcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager.get_prefetch_cachem  s9   € ðØ—}‘}×>Ñ>¸t×?WÑ?WÑXÐXøÜ"¤HÐ-ò Ùðús   ‚"% ¥7¶7c                 óŽ   — 	 | j                   j                  j                  | j                  «       y # t        t
        f$ r Y y w xY wr   )r%   r  r  rn  rU   r“   rW   s    r'   r  zZcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager._remove_prefetched_objectss  s<   € ðØ—‘×7Ñ7×;Ñ;¸D×<TÑ<TÕUøÜ"¤HÐ-ò Ùðús   ‚/2 ²AÁAc                 ój   •— | j                  «       x}�|S t        ‰| �	  «       }| j                  |«      S r   )r„  r¼   rb   r  )r$   Úcacher?   r¦   s      €r'   rb   zLcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager.get_querysety  s:   ø€ Ø×0Ñ0Ó2Ð2�Ð?Ø�ä ™7Ñ/Ó1�Ø×.Ñ.¨xÓ8Ð8r)   c                 ó†   — t        j                  dt        d¬«       |€| j                  |«      S | j                  ||g«      S rd   rg   rk   s      r'   rl   zUcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager.get_prefetch_queryset€  r  r)   c                 óæ  •‡‡— |rt        |«      dk7  rt        d«      ‚|r|d   nt        ‰	| �  «       }|j	                  |d   ¬«       |j                  |j                  xs | j                  «      }t        || j                  |«      }| j                  j                  j                  | j                  «      Š‰j                  j                  j                  }t        |j                      Š‰j"                  j$                  }|j'                  ‰j(                  D �ci c]-  }d|j*                  z   ||«      ›d ||j,                  «      ›�“Œ/ c}¬«      }|ˆˆfd„ˆˆfd	„d
| j.                  d
fS c c}w )Nro   rp   r   rq   z_prefetch_related_val_%srP   )Úselectc                 óD   •‡ — t        ˆˆ fd„‰j                  D «       «      S )Nc              3   óp   •K  — | ]-  }|j                  t        ‰d |j                  › �«      ‰«      –— Œ/ y­w)Ú_prefetch_related_val_N©Úget_db_prep_valuer©   r    )r´   ÚfÚ
connectionÚresults     €€r'   r¶   z{create_forward_many_to_many_manager.<locals>.ManyRelatedManager.get_prefetch_querysets.<locals>.<lambda>.<locals>.<genexpr>­  sA   øè ø€ ð %ñ
 5˜ð	 ×'Ñ'Ü Ð*@ÀÇÁÀÐ(LÓMØ"÷ñ 5ùs   ƒ36)rÛ   rÝ   )r’  r‘  Úfks   `€€r'   Ú<lambda>zhcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager.get_prefetch_querysets.<locals>.<lambda>­  s   ù€ œuô %ð
  ×4Ò4ó%ô  r)   c                 óD   •‡ — t        ˆˆ fd„‰j                  D «       «      S )Nc              3   ój   •K  — | ]*  }|j                  t        ‰|j                  «      ‰«      –— Œ, y ­wr   rŽ  )r´   r�  r‘  r…   s     €€r'   r¶   z{create_forward_many_to_many_manager.<locals>.ManyRelatedManager.get_prefetch_querysets.<locals>.<lambda>.<locals>.<genexpr>´  s1   øè ø€ ð #á6˜ð ×'Ñ'¬°°a·i±iÓ(@À*×MÙ6ùs   ƒ03)rÛ   rw   )r…   r‘  r“  s   `€€r'   r”  zhcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager.get_prefetch_querysets.<locals>.<lambda>´  s   ù€ œUô #à×6Ò6ó#ô r)   F)rr   rs   r¼   rb   rt   r0   r4   rG   rm  ra  r{   rt  rp  rS   r|   r   rC   ÚopsÚ
quote_nameÚextrarÝ   r    Úcolumnrn  )
r$   rA   r‚   r?   Ú
join_tableÚqnr�  r‘  r“  r¦   s
          @@€r'   rj   zVcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager.get_prefetch_querysets‹  sc  ú€ ÙœS ›^¨qÒ0Ü ð#óð ñ (1�y ’|´e±gÑ6JÓ6LˆHØ×Ñ¨°1©ÐÔ6Ø—~‘~ h§l¡lÒ&>°d·h±hÓ?ˆHÜ0Ø˜$×/Ñ/°óˆHð —‘×#Ñ#×-Ñ-¨d×.DÑ.DÓEˆBØŸ™Ÿ™×0Ñ0ˆJÜ$ X§[¡[Ñ1ˆJØ—‘×*Ñ*ˆBØ—~‘~ð
  ×4Ò4ó	ñ 5˜ð /Ø—i‘iñ á˜*•~¡r¨!¯(©(¤|ð"5ñ5ð 5ñ	ð &ó ˆHð ôôð Ø×(Ñ(Øðð ùòs   Ä2E.c                 óÖ  — | j                   j                  sy t        j                  | j                  | j
                  ¬«      }t        |   j                  j                  sy d| j
                  i}| j                  j                  j                  ||¬«      }| j                  | j                  d   i}| j                   j                  rd|d| j                  z  <    |j                  di |¤ŽS )Nrq   r%   r\   r   Fz
%s__isnullr-   )r  Údb_constraintr   r   ra  r%   r   r7   Úsupports_foreign_keysr^   r_   rp  rw  r•   rr  rz   )r$   rC   r]   rõ   r}  s        r'   Úconstrained_targetzRcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager.constrained_target½  sÈ   € ð
 ×$Ñ$×2Ò2ØÜ×#Ñ# D§L¡L¸4¿=¹=ÔIˆBÜ˜r‘?×+Ñ+×AÒAØØ §¡Ð/ˆEØ—l‘l×0Ñ0×;Ñ;¸BÀeÐ;ÓLˆGØ×-Ñ-¨t×/?Ñ/?ÀÑ/BÐCˆGð × Ñ ×%Ò%ØAF�˜ t×'=Ñ'=Ñ=Ñ>Ø!�7—>‘>Ñ, GÑ,Ð,r)   c                 óŒ   •— ‰t         u r.| j                  «       €| j                  x}�|j                  «       S t        ‰| �  «       S r   )r
   r„  r   Úexistsr¼   ©r$   r   r¦   r[  s     €€r'   r¢  zFcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager.existsÐ  sH   ø€ àœgÑ%Ø×+Ñ+Ó-Ð5Ø+/×+BÑ+BÐBÐ'ÐOà)×0Ñ0Ó2Ð2ä‘w‘~Ó'Ð'r)   c                 óŒ   •— ‰t         u r.| j                  «       €| j                  x}�|j                  «       S t        ‰| �  «       S r   )r
   r„  r   Úcountr¼   r£  s     €€r'   r¥  zEcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager.countÚ  sG   ø€ àœgÑ%Ø×+Ñ+Ó-Ð5Ø+/×+BÑ+BÐBÐ'ÐOà)×/Ñ/Ó1Ð1ä‘w‘}“Ð&r)   ©Úthrough_defaultsc                ó–  — | j                  «        t        j                  | j                  | j                  ¬«      }t        j                  |d¬«      5   | j                  | j                  | j                  g|¢­d|iŽ | j                  r+ | j                  | j                  | j                  g|¢­d|iŽ d d d «       y # 1 sw Y   y xY w)Nrq   Fr  r§  )r  r   r¥   ra  r%   r	   r"  Ú
_add_itemsrp  rr  rs  )r$   r§  r$  rC   s       r'   r&  zCcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager.addä  s·   € Ø×+Ñ+Ô-Ü×$Ñ$ T§\¡\¸D¿M¹MÔJˆBÜ×#Ñ#¨"¸Ö>Ø�—‘Ø×*Ñ*Ø×*Ñ*ðð òð &6ò	ð ×#Ò#Ø#�D—O‘OØ×.Ñ.Ø×.Ñ.ðð òð *:ò	÷ ?×>Ñ>ús   ÁA#B?Â?Cc             —   óT   K  —  t        | j                  «      |d|iŽƒ d {  –—† S 7 Œ­w)Nr§  r)  )r$   r§  r$  s      r'   r+  zDcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager.aaddú  s3   è ø€ Ø0œ t§x¡xÓ0ØðØ(8ñ÷ ð ð úr,  c                 ót   — | j                  «         | j                  | j                  | j                  g|¢­Ž  y r   )r  Ú_remove_itemsrp  rr  ©r$   r$  s     r'   rE  zFcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager.remove  s2   € Ø×+Ñ+Ô-ØˆD×Ñ˜t×5Ñ5°t×7MÑ7MÐUÐPTÔUr)   c              —   óN   K  —  t        | j                  «      |Ž ƒ d {  –—† S 7 Œ­wr   rG  r­  s     r'   rH  zGcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager.aremove  s"   è ø€ Ø3œ t§{¡{Ó3°TÐ:×:Ð:Ð:ús   ‚%ž#Ÿ%c           
      óè  •— t        j                  | j                  | j                  ¬«      }t	        j
                  |d¬«      5  t        j                  j                  | j                  d| j                  | j                  | j                  d |¬«       | j                  «        | j                  t        ‰| �9  «       j                  |«      «      }| j                  j                   j                  |«      j#                  |«      j%                  «        t        j                  j                  | j                  d| j                  | j                  | j                  d |¬«       d d d «       y # 1 sw Y   y xY w)Nrq   Fr  Ú	pre_clear©ÚsenderÚactionr%   r_  rS   Úpk_setr0   Ú
post_clear)r   r¥   ra  r%   r	   r"  r   Úm2m_changedÚsendr_  rS   r  r€  r¼   rb   r0   rç   rz   Údelete)r$   rC   r}  r¦   s      €r'   rK  zEcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager.clear  s  ø€ Ü×$Ñ$ T§\¡\¸D¿M¹MÔJˆBÜ×#Ñ#¨"¸Ö>Ü×#Ñ#×(Ñ(ØŸ<™<Ø&Ø!Ÿ]™]Ø ŸL™LØŸ*™*ØØð )ô ð ×/Ñ/Ô1Ø×4Ñ4´U±WÑ5IÓ5K×5QÑ5QÐRTÓ5UÓV�Ø—‘×-Ñ-×3Ñ3°BÓ7×>Ñ>¸wÓG×NÑNÔPä×#Ñ#×(Ñ(ØŸ<™<Ø'Ø!Ÿ]™]Ø ŸL™LØŸ*™*ØØð )ô ÷ ?×>Ñ>ús   ÁDE(Å(E1c              “   óR   K  —  t        | j                  «      «       ƒ d {  –—† S 7 Œ­wr   rM  rW   s    r'   rN  zFcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager.aclear(  s    è ø€ Ø2œ t§z¡zÓ2Ó4×4Ð4Ð4ús   ‚' %¡'F)rK  r§  c                óä  — t        |«      }t        j                  | j                  | j                  ¬«      }t        j                  |d¬«      5  |r#| j                  «         | j                  |d|iŽ nét        | j                  |«      j                  | j                  j                  j                  d¬«      «      }g }|D ]x  }t        || j                  «      r| j                  j!                  |«      d   n| j                  j#                  |«      }||v r|j%                  |«       Œh|j'                  |«       Œz  | j$                  |Ž   | j                  |d|iŽ d d d «       y # 1 sw Y   y xY w)Nrq   Fr  r§  T©Úflatr   )rÛ   r   r¥   ra  r%   r	   r"  rK  r&  rB  r0   Úvalues_listr  r    r¡   rS   ru   Úget_prep_valuerE  r   )	r$   r$  rK  r§  rC   rD  rS  rÀ   Úfk_vals	            r'   rB  zCcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager.set-  s:  € ô ˜“;ˆDä×$Ñ$ T§\¡\¸D¿M¹MÔJˆBÜ×#Ñ#¨"¸Ö>ÙØ—J‘J”LØ�D—H‘H˜dÐFÐ5EÓFä!ØŸ
™
 2›×2Ñ2Ø ×-Ñ-×:Ñ:×BÑBÈð 3ó ó�Gð  "�HÛ#˜ô  *¨#¨t¯z©zÔ:ð !×-Ñ-×GÑGÈÓLÈQÒOà!%×!2Ñ!2×!AÑ!AÀ#Ó!Fð ð
 " WÑ,Ø#ŸN™N¨6Õ2à$ŸO™O¨CÕ0ð  $ð  �D—K‘K Ñ)Ø�D—H‘H˜hÐJÐ9IÒJ÷1 ?×>Ñ>ús   ÁDE&Å&E/c             “   óZ   K  —  t        | j                  «      |||¬«      ƒ d {  –—† S 7 Œ­w)N)r$  rK  r§  rU  )r$   r$  rK  r§  s       r'   rV  zDcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager.asetO  s0   è ø€ Ø0œ t§x¡xÓ0Ø Ð9Iô÷ ð ð úrW  c                óÔ   •— t        j                  | j                  j                  | j                  ¬«      }t	        ‰| j                  |«      �  di |¤Ž}| j                  ||¬«       |S ©Nrq   r¦  r-   )r   r¥   r%   r¦   r¼   r_   r/  r&  )r$   r§  r¿   rC   Únew_objÚManyRelatedManagerr¦   s        €€r'   r/  zFcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager.createV  sW   ø€ Ü×$Ñ$ T§]¡]×%<Ñ%<ÀtÇ}Á}ÔUˆBÜÐ.°·±ÀÓ0CÑKÑUÈfÑUˆGØ�H‰H�WÐ/?ˆHÔ@ØˆNr)   c             ›   óX   K  —  t        | j                  «      dd|i|¤Žƒ d {  –—† S 7 Œ­w©Nr§  r-   r4  ©r$   r§  r¿   s      r'   r6  zGcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager.acreate^  s8   è ø€ Ø3œ t§{¡{Ó3ñ Ø!1ðØ5;ñ÷ ð ð úó   ‚!*£(¤*c                óâ   •— t        j                  | j                  j                  | j                  ¬«      }t	        ‰| j                  |«      �  di |¤Ž\  }}|r| j                  ||¬«       ||fS rÂ  )r   r¥   r%   r¦   r¼   r_   r8  r&  ©r$   r§  r¿   rC   rÀ   ÚcreatedrÄ  r¦   s         €€r'   r8  zMcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager.get_or_createe  sj   ø€ Ü×$Ñ$ T§]¡]×%<Ñ%<ÀtÇ}Á}ÔUˆBÜ Ð!3°T·_±_ÀRÓ5HÑWñ Øñ‰LˆC�ñ
 Ø—‘˜Ð/?�Ô@Ø˜�<Ðr)   c             ›   óX   K  —  t        | j                  «      dd|i|¤Žƒ d {  –—† S 7 Œ­wrÆ  r:  rÇ  s      r'   r;  zNcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager.aget_or_creater  s:   è ø€ Ø:œ t×'9Ñ'9Ó:ñ Ø!1ðØ5;ñ÷ ð ð úrÈ  c                óä   •— t        j                  | j                  j                  | j                  ¬«      }t	        ‰| j                  |«      �  	 di |¤Ž\  }}|r| j                  ||¬«       ||fS rÂ  )r   r¥   r%   r¦   r¼   r_   r=  r&  rÊ  s         €€r'   r=  zPcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager.update_or_createy  so   ø€ Ü×$Ñ$ T§]¡]×%<Ñ%<ÀtÇ}Á}ÔUˆBÜ Ø" D§O¡O°BÓ$7ñàñ)à!'ñ)‰LˆC�ñ
 Ø—‘˜Ð/?�Ô@Ø˜�<Ðr)   c             ›   óX   K  —  t        | j                  «      dd|i|¤Žƒ d {  –—† S 7 Œ­wrÆ  r?  rÇ  s      r'   r@  zQcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager.aupdate_or_create†  s:   è ø€ Ø=œ t×'<Ñ'<Ó=ñ Ø!1ðØ5;ñ÷ ð ð úrÈ  c           
      ó¦  — ddl m} t        «       }| j                  j                  j                  |«      }|D �]  }t        || j                  «      r¡t        j                  || j                  «      sGt        d|›d| j                  j                  j                  ›d|j                  j                  ›d�«      ‚|j                  |«      d   }|€t        d|›d|›d�«      ‚|j                  |«       Œ»t        ||«      r/t!        d	| j                  j                  j"                  ›d
|›�«      ‚|j                  |j%                  |«      «       �Œ |S )z[
            Return the set of ids of `objs` that the target field references.
            r   )ÚModelzCannot add "z": instance is on database "z", value is on database "rù   z": the value for field "z	" is Noner  r  )Údjango.db.modelsrÐ  rB  ra  r{   rt  r¡   rS   r   r§   r%   rs   r¤   rC   ru   r&  rî   r£   r¾  )r$   rr  r$  rÐ  Ú
target_idsr  rÀ   Ú	target_ids           r'   Ú_get_target_idszOcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager._get_target_ids�  s  € õ /ä›ˆJØŸ<™<×-Ñ-×7Ñ7Ð8IÓJˆLÜ�Ü˜c 4§:¡:Ô.Ü!×0Ñ0°°d·m±mÔDÝ(ò  # D§M¡M×$8Ñ$8×$;Ó$;¸S¿Z¹Z¿]»]ðLóð ð
 !-× FÑ FÀsÓ KÈAÑ N�IØ Ð(Ý(â"Ò$5ð7óð ð —N‘N 9Õ-Ü  UÔ+Ý#àŸ:™:×+Ñ+×7Ó7¹ð>óð ð
 —N‘N <×#>Ñ#>¸sÓ#CÖDð+ ð, Ðr)   c                 óØ   —  | j                   j                  j                  |«      j                  |d¬«      j                  di || j
                  d   d|z  |i¤Ž}|j                  |«      S )z{
            Return the subset of ids of `objs` that aren't already assigned to
            this relationship.
            Tr»  r   rÓ   r-   )ra  rç   r0   r½  rz   rw  Ú
difference)r$   rp  rr  rC   rÒ  Úvalss         r'   Ú_get_missing_target_idszWcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager._get_missing_target_ids­  sv   € ð�—‘×-Ñ-×3Ñ3°BÓ7ß‘Ð.°T�Ó:ß‘ñð *¨4×+;Ñ+;¸AÑ+>Ø Ð#4Ñ4°jðñð ð ×(Ñ(¨Ó.Ð.r)   c                 ó(  — | j                   j                  j                  duxr t        |   j                  j
                  }| j                  xs || j                  k(  xr) t        j                  j                  | j                   «      }|||xr | fS )aw  
            Return a boolean triple of the way the add should be performed.

            The first element is whether or not bulk_create(ignore_conflicts)
            can be used, the second whether or not signals must be sent, and
            the third element is whether or not the immediate bulk insertion
            with conflicts ignored can be performed.
            F)ra  r{   Úauto_createdr   r7   Úsupports_ignore_conflictsr_  rp  r   r¶  Úhas_listeners)r$   rC   rp  Úcan_ignore_conflictsÚmust_send_signalss        r'   Ú_get_add_planzMcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager._get_add_planÀ  s•   € ð —‘×"Ñ"×/Ñ/°uÐ<ò GÜ ‘O×,Ñ,×FÑFð !ð —‘ÒKÐ 1°T×5KÑ5KÑ Kò!Dä×&Ñ&×4Ñ4°T·\±\ÓBð ð %Ø!Ø%Ò?Ð.?Ð*?ðð r)   c                ój  — |sy t        t        |xs i «      «      }| j                  ||«      }t        j                  | j
                  | j                  ¬«      }| j                  ||«      \  }}}	|	rl| j
                  j                  j                  |«      j                  |D �
cg c]+  }
 | j
                  di d|z  | j                  d   d|z  |
i¤Ž‘Œ- c}
d¬«       y | j                  ||||«      }t        j                  |d¬«      5  |rNt        j                   j#                  | j
                  d| j                  | j$                  | j&                  ||¬	«       | j
                  j                  j                  |«      j                  |D �
cg c]-  }
 | j
                  di |¤d|z  | j                  d   d|z  |
i¤Ž‘Œ/ c}
|¬«       |rNt        j                   j#                  | j
                  d
| j                  | j$                  | j&                  ||¬	«       d d d «       y c c}
w c c}
w # 1 sw Y   y xY w)Nrq   z%s_idr   T)Úignore_conflictsFr  Úpre_addr±  Úpost_addr-   )Údictr   rÔ  r   r¥   ra  r%   rß  rç   r0   Úbulk_createrw  rØ  r	   r"  r   r¶  r·  r_  rS   )r$   rp  rr  r§  r$  rÒ  rC   rÝ  rÞ  Úcan_fast_addrÓ  Úmissing_target_idss               r'   r©  zJcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager._add_itemsá  sZ  € ñ Øä#Ô$5Ð6FÒ6LÈ"Ó$MÓNÐØ×-Ñ-Ð.?ÀÓFˆJÜ×$Ñ$ T§\¡\¸D¿M¹MÔJˆBØDH×DVÑDVØÐ%óEÑAÐ Ð"3°\ñ Ø—‘×-Ñ-×3Ñ3°BÓ7×CÑCñ *4óñ *4˜Ið %˜Ÿ™ñ à 'Ð*;Ñ ;¸T×=MÑ=MÈaÑ=PØ 'Ð*;Ñ ;¸Yðóð *4ñð &*ð Dô ð à!%×!=Ñ!=Ø!Ð#4°b¸*ó"Ðô ×#Ñ#¨"¸Ö>Ù$Ü×'Ñ'×,Ñ,Ø#Ÿ|™|Ø(Ø!%§¡Ø $§¡Ø"Ÿj™jØ1Ø ð -ô ð —‘×-Ñ-×3Ñ3°BÓ7×CÑCñ *<ó	ñ *<˜Ið %˜Ÿ™ñ Ø.ðð !(Ð*;Ñ ;¸T×=MÑ=MÈaÑ=PØ 'Ð*;Ñ ;¸Yðóð *<ñ	ð &:ð Dô ñ %Ü×'Ñ'×,Ñ,Ø#Ÿ|™|Ø)Ø!%§¡Ø $§¡Ø"Ÿj™jØ1Ø ð -ô ÷7 ?Ð>ùò!ùò:	÷ ?Ð>ús&   Â#0HÄBH)Æ2H$
Æ=AH)È$H)È)H2c           
      ó2  •— |sy t        «       }|D ]Y  }t        || j                  «      r0| j                  j	                  |«      d   }|j                  |«       ŒI|j                  |«       Œ[ t        j                  | j                  | j                  ¬«      }t        j                  |d¬«      5  t        j                  j                  | j                  d| j                  | j                  | j                  ||¬«       t         ‰| �E  «       }|j%                  «       rE |j'                  |«      j(                  d	i d| j                  j                  j*                  z  |i¤Ž}	n|}	| j-                  |	«      }
| j                  j.                  j'                  |«      j)                  |
«      j1                  «        t        j                  j                  | j                  d| j                  | j                  | j                  ||¬«       d d d «       y # 1 sw Y   y xY w)
Nr   rq   Fr  Ú
pre_remover±  rÓ   Úpost_remover-   )rB  r¡   rS   r  ru   r&  r   r¥   ra  r%   r	   r"  r   r¶  r·  r_  r¼   rb   r{  r0   rz   r    r€  rç   r¸  )r$   rp  rr  r$  rD  rÀ   r¿  rC   Útarget_model_qsÚold_valsr}  r¦   s              €r'   r¬  zMcreate_forward_many_to_many_manager.<locals>.ManyRelatedManager._remove_items(  s²  ø€ ñ
 Øô “eˆGÛ�Ü˜c 4§:¡:Ô.Ø!×.Ñ.×HÑHÈÓMÈaÑP�FØ—K‘K Õ'à—K‘K Õ$ð ô ×$Ñ$ T§\¡\¸D¿M¹MÔJˆBÜ×#Ñ#¨"¸Ö>ä×#Ñ#×(Ñ(ØŸ<™<Ø'Ø!Ÿ]™]Ø ŸL™LØŸ*™*Ø"Øð )ô ô #(¡'Ñ"6Ó"8�Ø"×/Ñ/Ô1Ø?˜×4Ñ4°RÓ8×?Ñ?ñ  Ø# d×&7Ñ&7×&DÑ&D×&LÑ&LÑLÈgÐVñ ‘Hð  '�HØ×4Ñ4°XÓ>�Ø—‘×-Ñ-×3Ñ3°BÓ7×>Ñ>¸wÓG×NÑNÔPä×#Ñ#×(Ñ(ØŸ<™<Ø(Ø!Ÿ]™]Ø ŸL™LØŸ*™*Ø"Øð )ô ÷+ ?×>Ñ>ús   Â/EHÈHr   )&r*   r+   r,   rL   r÷   rX  r€  r  r„  r  rb   rl   rj   rf  r   r¢  r¥  r&  rY  r+  rE  rH  rK  rN  rB  rV  r/  r6  r8  r;  r=  r@  rÔ  rØ  rß  r©  r¬  rÈ   )r¦   rÄ  rä   r_  r[  s   @€€€€r'   rÄ  ri    s|  ù„ ÷0	õd	9ð $(Ð ò	ò(	Jò	ò	ô	9ó		Fõ0	ðd 
ñ	-ó 
ð	-õ$	(õ	'ð /3ô 	ð( ˆŒà59ô 	ð
  ˆÔò	Vð "ˆÔò	;ð #ˆÔô	ð4 !ˆÔò	5ð "ˆÔà%*¸Tô 	Kð@ ˆŒà,1ÀDô 	ð
  ˆÔà-1÷ 	ð "ˆÔà48ô 	ð
 #ˆÔà48÷ 		 ð %)ˆÔ!à;?ô 	ð
 &*ˆÔ"à7;÷ 		 ð (,ÐÔ$à>Bô 	ð
 )-ÐÔ%ò	ò@	/ò&	ðD QUôE	÷N/	ð /	r)   rÄ  rZ  )r[  rä   r_  rÄ  s   ```@r'   rc  rc    s"   û€ ÷D	ñ D	˜Z¬ô D	ðL Ðr)   ).r¯   rh   Úasgiref.syncr   Údjango.core.exceptionsr   Ú	django.dbr   r   r   r   r	   rÑ  r
   r   r   r   Údjango.db.models.expressionsr   Ú%django.db.models.fields.tuple_lookupsr   Údjango.db.models.functionsr   Údjango.db.models.lookupsr   r   Údjango.db.models.queryr   Údjango.db.models.query_utilsr   Údjango.db.models.utilsr   r   Údjango.utils.deprecationr   Údjango.utils.functionalr   r   rG   rI   r±   rË   râ   ræ   r]  rc  r-   r)   r'   Ú<module>rù     s§   ðñ?óB å &å -÷õ ÷ 9Ó 8Ý 1Ý 9Ý 0ß AÝ +Ý :ß @Ý =Ý 3ô6Ð"3ô 6ò÷0l<ñ l<ô^0@Ð :ô 0@÷fI@ñ I@÷X6
ñ 6
òrwôt	,
Ð5ô ,
ó^N	r)   