From 01d0515b3218e9df0408633d0871214b5c48c96f Mon Sep 17 00:00:00 2001 From: Marwan Alwali Date: Sat, 18 Jan 2025 17:07:15 +0300 Subject: [PATCH] update --- inventory/__pycache__/forms.cpython-311.pyc | Bin 31106 -> 31062 bytes inventory/__pycache__/models.cpython-311.pyc | Bin 83109 -> 81944 bytes .../__pycache__/services.cpython-311.pyc | Bin 4776 -> 4776 bytes inventory/__pycache__/views.cpython-311.pyc | Bin 150274 -> 150225 bytes inventory/forms.py | 14 +- ...ead_staff_remove_customer_city_and_more.py | 90 ++++ inventory/models.py | 144 +++-- inventory/signals.py | 8 +- inventory/views.py | 58 +- static/images/.DS_Store | Bin 14340 -> 14340 bytes static/images/car_make/maserati_Fw9s7lU.png | Bin 0 -> 32225 bytes static/images/spot-illustrations/.DS_Store | Bin 12292 -> 12292 bytes templates/crm/.DS_Store | Bin 6148 -> 6148 bytes templates/crm/leads/lead_list.html | 6 +- templates/crm/opportunities/.DS_Store | Bin 0 -> 6148 bytes .../crm/opportunities/opportunity_form.html | 13 + .../opportunities/opportunity_list copy.html | 504 ++++++++++++++++++ .../crm/opportunities/opportunity_list.html | 412 +------------- templates/customers/customer_form.html | 32 +- templates/index.html | 4 +- templates/inventory/car_form.html | 304 ++++++----- templates/inventory/car_inventory.html | 2 +- templates/items/service/service_list.html | 4 +- templates/sales/invoices/invoice_list.html | 12 +- 24 files changed, 919 insertions(+), 688 deletions(-) create mode 100644 inventory/migrations/0004_rename_assigned_lead_staff_remove_customer_city_and_more.py create mode 100644 static/images/car_make/maserati_Fw9s7lU.png create mode 100644 templates/crm/opportunities/.DS_Store create mode 100644 templates/crm/opportunities/opportunity_list copy.html diff --git a/inventory/__pycache__/forms.cpython-311.pyc b/inventory/__pycache__/forms.cpython-311.pyc index b9d44430550d3daca024b7089f8fcc316992cbad..b1ddaf0a9da8b5acd4a336426f47506c57664ed5 100644 GIT binary patch delta 2637 zcmai#3s96*6o5HD?2odFqOiLl3L(o=S1ce+5m#ZQMFABNq-ptC7T5)L@rRwTLBVGj zq}IuBMs0lLgT~R(KOMA58?(n`4;j;FBS)vKrp!U3nr5`R=Pn2)O)T@x`R{q$d(S=h z+;zXg)w>XQX!Pg+ANJREU~|QvS;qsHkB0y(A8%GpjlUv5BerQ`#Fv;}ZpBW`d}zXE zwGP%RA=*^}Y{adh&oc&u?T1a+J0lqXE?W{6FUXt7VHaUHL!H1787a@9fjta3H!KF9 znUDor2Am#?7d%33)&Kb{3EwQXQj#NR=`?(EIt&|=BA@D zqQkg_DLrCcy;Se6lV2qBHiCCYBsCJY5=?|`gqI1gFyzR{_j^>yh;)N@>IZAqcd#|v z%lMkvo?j;?n(pE4qB*J|;sEKE6AB5l2nPv=2_1MN>dVMCNi1im1BSWYY#pINLI-Uy z7;jB3f+J{({u>UWNq-4C6>Us1z&p4w_Gfq(XT(hwPm;??l;Y08NtTN1qxo(!*(h7& zHVjNi7Ppg$_ar|;DWO{YfCfIm%LzFu60I)>h2X5jc9AD%HFhVSg-@}4N-2Df%_DW< zMKZsLx~Z*jkxh|>x29IWY0Njc;0j(an8nLva2bQA6~bk1aB|vtxP}c$d14Q#dhoNP z9OxN1DaAcK-&g$|X)*|>@QdX95hs|~!SaepDO%WrhSX$iOv#3u_*HVQmXz|34FAfu zA$4ZrPozs@h#x&9=^7e6Pk4{uJp+6tRS$=i&eU%JzExhEA%V!3aTD*)EYNmQ43%6& z_7b6Ach9JUUR?jwF-9ppG~fp52wKd`48f{dMSk>!O(7b*HtRS$t8KF#(28@CG#HdN z8TyozG(DvJ&TQgG3|V3j#ozorBvhnyiT~3?qPd*n2 zzvH4wlf}Cv-o@th{cyKGzuoW`YK&(`(9P-al@DN#F#_80o^egYutj%|LJ$`7?Hrv~ z1osAx3QOjH2>uwC@wVCrm>CcRyqz&q?@J=3T^=^7iqtAxm??t_&t*2j8<=jY9lL=X zULb5FY{GMTg`K&vqMp9>%FSE}K(8!Vdm-Sno@k(142q#( z1AqaQaSnu72Ri^dw4+sUd7i;HK& zVcbz1-hcCzGsU@rXr=(!%9v->Fnu=3apXF9mAHNmH)8Op=U2MyR-4Igt1e^t&bB-r zmPg9jZt#R9S|K%vwn z6aYqsEXR*abDtO~|HeXk{H*r+RsGdNQ&2InmhW=QR-4D)S}8f5wrY=xy#eLr_?&ev zNZ4tes2({kxYx%E<+{}m{Hgx(QqF0vz(;U{*p;2N-Nix&Aw$fw!Xc%mz89(AqkDwRs@)pR&E=7e86 zGW5?ep^El6iJ3M(_;rt+(4y)NT6T&5#aaH;9|WFYfXO2_f;Mk+enA9nm{wjg?OoEhI%P2A(6hR>uNE<83`*f+xa!rDzUC? zK|}9@C$P*RIV)V2da1P9R`<9(4qH|ln%0sVf4%v8Os}fUpH2QW_R!}I0&myUYh~(> z9#uX?k*V`}{HQWy-sX6};#ZwtW`1?}o#3^=&yODtPa54bOp!xiyOJ%ZiBm!#u-E5N nw7A=v?$CJOpfU;HYFIIiQtJ!DahvT`*B!3w8??Z*Rhj<)%uLFh delta 2621 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 delta 5200 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 QxhzN;GxNP?rqdq(2jZbK0RR91 diff --git a/inventory/__pycache__/services.cpython-311.pyc b/inventory/__pycache__/services.cpython-311.pyc index 7451acb6d80896999193ed7b964f731840b761fd..c1979932fb2636a45cababd4e3dbc4bc24b39429 100644 GIT binary patch delta 20 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 Zt8EIP2%3973@+Wt!1tT5Tc&vb{{SB*EldCa delta 12020 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 uMqbc+z)hYOvZ2 100: raise ValidationError(_("Probability must be between 0 and 100.")) @@ -963,41 +990,6 @@ class Vendor(models.Model, LocalizedNameMixin): return self.name -class Organization(models.Model, LocalizedNameMixin): - dealer = models.ForeignKey(Dealer, on_delete=models.CASCADE, related_name='organizations') - name = models.CharField(max_length=255, verbose_name=_("Name")) - arabic_name = models.CharField(max_length=255, verbose_name=_("Arabic Name")) - crn = models.CharField(max_length=15, verbose_name=_("Commercial Registration Number")) - vrn = models.CharField(max_length=15, verbose_name=_("VAT Registration Number")) - phone_number = PhoneNumberField(region='SA', verbose_name=_("Phone Number")) - address = models.CharField(max_length=200, blank=True, null=True, verbose_name=_("Address")) - logo = models.ImageField(upload_to="logos", blank=True, null=True, verbose_name=_("Logo")) - created_at = models.DateTimeField(auto_now_add=True, verbose_name=_("Created At")) - - class Meta: - verbose_name = _("Organization") - verbose_name_plural = _("Organizations") - def __str__(self): - return self.name - - -class Representative(models.Model, LocalizedNameMixin): - dealer = models.ForeignKey(Dealer, on_delete=models.CASCADE, related_name='representatives') - name = models.CharField(max_length=255, verbose_name=_("Name")) - arabic_name = models.CharField(max_length=255, verbose_name=_("Arabic Name")) - id_number = models.CharField(max_length=10, verbose_name=_("ID Number")) - phone_number = PhoneNumberField(region='SA', verbose_name=_("Phone Number")) - email = models.EmailField(max_length=255, verbose_name=_("Email Address")) - address = models.CharField(max_length=200, blank=True, null=True, verbose_name=_("Address")) - organization = models.ManyToManyField(Organization, related_name='representatives') - - class Meta: - verbose_name = _("Representative") - verbose_name_plural = _("Representatives") - - def __str__(self): - return self.name - class SaleQuotation(models.Model): quotation_number = models.CharField(max_length=10, unique=True) diff --git a/inventory/signals.py b/inventory/signals.py index b00f31f5..2cc18ff8 100644 --- a/inventory/signals.py +++ b/inventory/signals.py @@ -805,7 +805,7 @@ def track_lead_status_change(sender, instance, **kwargs): lead=instance, old_status=old_lead.status, new_status=instance.status, - changed_by=instance.assigned # Assuming the assigned staff made the change + changed_by=instance.staff # Assuming the assigned staff made the change ) except models.Lead.DoesNotExist: pass # Ignore if the lead doesn't exist (e.g., during initial creation) @@ -813,10 +813,10 @@ def track_lead_status_change(sender, instance, **kwargs): @receiver(post_save, sender=models.Lead) def notify_assigned_staff(sender, instance, created, **kwargs): - if instance.assigned: # Check if the lead is assigned + if instance.staff: # Check if the lead is assigned models.Notification.objects.create( - user=instance.assigned.user, - message=f"You have been assigned a new lead: {instance.first_name} {instance.last_name}." + user=instance.staff.user, + message=f"You have been assigned a new lead: {instance.customer.get_full_name}." ) diff --git a/inventory/views.py b/inventory/views.py index 23f17d27..c1d08243 100644 --- a/inventory/views.py +++ b/inventory/views.py @@ -884,6 +884,7 @@ class CustomerListView(LoginRequiredMixin, ListView): context_object_name = "customers" paginate_by = 10 template_name = "customers/customer_list.html" + ordering = ["-created"] def get_queryset(self): query = self.request.GET.get("q") @@ -1001,6 +1002,11 @@ class VendorListView(LoginRequiredMixin, ListView): context_object_name = "vendors" paginate_by = 10 template_name = "vendors/vendors_list.html" + ordering = ["-created"] + + def get_queryset(self): + dealer = get_user_type(self.request) + return models.Vendor.objects.filter(dealer=dealer) class VendorDetailView(LoginRequiredMixin, DetailView): @@ -1430,8 +1436,7 @@ class UserListView(LoginRequiredMixin, ListView): def get_queryset(self): dealer = get_user_type(self.request) - staff = models.Staff.objects.filter(dealer=dealer).all() - return staff + return models.Staff.objects.filter(dealer=dealer).all() class UserDetailView(LoginRequiredMixin, DetailView): @@ -1514,8 +1519,7 @@ class OrganizationListView(LoginRequiredMixin, ListView): def get_queryset(self): dealer = get_user_type(self.request) - data = models.Organization.objects.filter(dealer=dealer).all() - return data + return models.Organization.objects.filter(dealer=dealer).all() class OrganizationDetailView(DetailView): @@ -1559,11 +1563,11 @@ class RepresentativeListView(LoginRequiredMixin, ListView): model = models.Representative template_name = "representatives/representative_list.html" context_object_name = "representatives" + paginate_by = 10 def get_queryset(self): dealer = get_user_type(self.request) - data = models.Representative.objects.filter(dealer=dealer).all() - return data + return models.Representative.objects.filter(dealer=dealer).all() class RepresentativeDetailView(DetailView): @@ -1785,6 +1789,7 @@ class BankAccountListView(LoginRequiredMixin, ListView): model = BankAccountModel template_name = "ledger/bank_accounts/bank_account_list.html" context_object_name = "bank_accounts" + paginate_by = 10 def get_queryset(self): dealer = get_user_type(self.request) @@ -1860,11 +1865,7 @@ class AccountListView(LoginRequiredMixin, ListView): def get_queryset(self): dealer = get_user_type(self.request) entity = dealer.entity - qs = entity.get_all_accounts() - paginator = Paginator(qs, 20) - page_number = self.request.GET.get("page", 1) # Default to page 1 - page_obj = paginator.get_page(page_number) - return page_obj + return entity.get_all_accounts() class AccountCreateView(LoginRequiredMixin, SuccessMessageMixin, CreateView): @@ -2222,6 +2223,7 @@ class InvoiceListView(LoginRequiredMixin, ListView): model = InvoiceModel template_name = "sales/invoices/invoice_list.html" context_object_name = "invoices" + paginate_by = 20 def get_queryset(self): dealer = get_user_type(self.request) @@ -2583,7 +2585,7 @@ class UserActivityLogListView(ListView): model = models.UserActivityLog template_name = "dealers/activity_log.html" context_object_name = "logs" - paginate_by = 10 + paginate_by = 20 def get_queryset(self): queryset = super().get_queryset() @@ -2601,8 +2603,7 @@ class LeadListView(ListView): def get_queryset(self): dealer = get_user_type(self.request) - leads = models.Lead.objects.filter(dealer=dealer).all() - return leads + return models.Lead.objects.filter(dealer=dealer).all() class LeadDetailView(DetailView): @@ -2706,10 +2707,10 @@ class OpportunityCreateView(CreateView): def form_valid(self, form): dealer = get_user_type(self.request) form.instance.dealer = dealer - staff = self.request.user.staff + # staff = dealer.staff print(dealer) - print(staff) - form.instance.staff = staff + # print(staff) + # form.instance.staff = staff return super().form_valid(form) def get_success_url(self): @@ -2735,11 +2736,11 @@ class OpportunityListView(ListView): model = models.Opportunity template_name = "crm/opportunities/opportunity_list.html" context_object_name = "opportunities" + paginate_by = 10 def get_queryset(self): dealer = get_user_type(self.request) - data = models.Opportunity.objects.filter(dealer=dealer).all() - return data + return models.Opportunity.objects.filter(dealer=dealer).all() @login_required @@ -2771,12 +2772,11 @@ class NotificationListView(LoginRequiredMixin, ListView): model = models.Notification template_name = "crm/notifications_history.html" context_object_name = "notifications" - paginate_by = 10 + paginate_by = 20 + ordering = "-created" def get_queryset(self): - return models.Notification.objects.filter(user=self.request.user).order_by( - "-created" - ) + return models.Notification.objects.filter(user=self.request.user) @login_required @@ -2840,11 +2840,11 @@ class ItemServiceListView(ListView): model = models.AdditionalServices template_name = "items/service/service_list.html" context_object_name = "services" + paginate_by = 20 def get_queryset(self): dealer = get_user_type(self.request) - items = models.AdditionalServices.objects.filter(dealer=dealer).all() - return items + return models.AdditionalServices.objects.filter(dealer=dealer).all() class ItemExpenseCreateView(CreateView): @@ -2889,22 +2889,22 @@ class ItemExpenseListView(ListView): model = ItemModel template_name = "items/expenses/expenses_list.html" context_object_name = "expenses" + paginate_by = 20 def get_queryset(self): dealer = get_user_type(self.request) - items = dealer.entity.get_items_expenses() - return items + return dealer.entity.get_items_expenses() class BillListView(ListView): model = ItemModel template_name = "ledger/bills/bill_list.html" context_object_name = "bills" + paginate_by = 20 def get_queryset(self): dealer = get_user_type(self.request) - items = dealer.entity.get_bills() - return items + return dealer.entity.get_bills() class BillCreateView(LoginRequiredMixin,SuccessMessageMixin,CreateView): diff --git a/static/images/.DS_Store b/static/images/.DS_Store index 2b8dc0e8821ce3e46e432bdf58373cc4b23c7cd1..f3dca2fb16dcf1214828622d4ee49ef93ab0b03f 100644 GIT binary patch delta 264 zcmZoEXerpRm~rxS8Mn$S?Oy&d&=dN-fJwEsw|qvV$|L zQYR}EK@aF^jd t!(T>rMoC5`Mr}qDMq5UEMi0h7#vsOI#uUa(#;nb6J#tZNlXXKZA0=WT2sb!g| z<&zWTG?=E|nXD)x>5-S8m#XX#zyJoE3>*yF42}%G3}Fn}3{?yh8RjyqWZ2Dcg5fU1 udxpP^?2H18N{rf!CXBX>_KY5kfs8?n$&4wCnT$o7-^kVQ4Vc|}5}W{Y8Aw|I diff --git a/static/images/car_make/maserati_Fw9s7lU.png b/static/images/car_make/maserati_Fw9s7lU.png new file mode 100644 index 0000000000000000000000000000000000000000..7cb2e6e3d0456691c8a0bfa4ec00565dfb4b55f9 GIT binary patch literal 32225 zcmd>m`9DXsU*al0iWB)`fHM+*3r=yI&C>_dkEzgPYDw zwzVB8V6Uzc_y77I{jKURJ8*rM{g&a46f0gnkEzaGXVW6lzwK~@eLTL>;3rvhkEo;C<72iH{k{Zg(fy z;?IKj`cZR?+>ZKIQ%D~nK~EOTjQaoKP^r5eH*a@isJI~elbNeB4-#!t_|+jXSeb^b zJ3(8tQSMm|90BXv;`E&)93!zEst{FE&AkFPK9V{M(uNy*1^IBQ(upS?#ou-&!DIU) zpsGj3MGQ{0VXK;5#DgS~OK#`cwM=(!I~mDx77h^y>k#}F8sE-Cv<#oI9Xzocl1aSb zWC(fZSFU6QzuWThb~o#Hq6QlwO6B)-Tzc8UmK9&J2R>FSKOS|HgfYkIb!q9{2OlJK zeIhL@>Wc3fGvEG#Pi=QNkm{_Vl2-yiDqkh|93t15RLI{LwZrmii`m|qECf5 zU;5NyX;lbokm#M*Y7iYZ9v?J6&=5Fh-s2+1NqwusujJ(7BPlZA(MQ=#zXSpDkCuxj z(29Z!Vgsk>5m6?ZReH?iXxBpP9A#q-!fD!klUkj=mmkBvKY5=WUwfD%{$5>0z8HkO zo8=|`Y)$i1Bu{?|Ki`{ixRl0CaMxl&;BV;vyN9>%_&WY_o$o1Pd{6h8Uh|{-_9EMP zov*@DBOwcX&(-e&p*%cLNvTPJn6Y0uuS=bwfkh&F_cc-R_w?!vvv*y?s@w7s`B@$!&+|PV`veyWZ2CXQ@2nsy*d>$@S zD+(mUCM6{krQFS8+y93wI7(TMy4Bm0xyLY`1B3MWJ_d2hPb#Qy=hS&LW%G=_#N_+; zCIMIWFsvb2?EJUulfQ>jmM|n3{`6_F?Id}d3RmW>X~H*C(&POuRrw5#IB0WYn)|+Q z;p)BMG<|R2lgl(?(OBbfg6~hCTH7Xz+N9Jn^XK_@9Z93};aoUgLV3#ya04LjdB;ti zrdhAo{5FKfIkz^+)(H1TSo7ytHngwxyZb%Wbm#}9bUBX=Gb$RUY(;&y<>YoZ-SsL< z@*wq@WO%I}Sy#RtPb@eV<`wLRmOMeoL|RpVGmEZi#CH7exxCk;>LE@=rRgy4 z;lY{ECQN4fQl~n!yaih)MgvCw4-ZMLmtAMk`;3tY3|vd1TjQmTJeKX}C3)CX7+GyprpC zw1)FFL^M0pk~ix59R7E^Tk!h%?EkFXe77oN%Z&N~yKTbrsh;t){IdGA?M4kzVMBZ; z2&vCyaS}_e)1lz$`yt%6!JC&{n(R8sh`Xa3cqG=IP8NEEe!9{o8f$;S{BR)sRh0uN z0{2F2@)uK&Twe`3LshwZ=mCD3x8=ahBwVtDF57z0C-cG8dC;0%I{y@VNxG<2SJ#V? zjTh#$IYzfIwcESQ^km^=_mmj@XxZ^q_3BLGz##$Q(!afAxD%-!htexyq}RHyjX?r_a&~%6!Bur}rZVi96>BQLTLu2m-)fAza0LJG zM?oVCBU>5EDpOUFx{2@QZaE&SV(#i+(>(dOKHzzkny8A5Bg1~7XCgrX5Z&38qtha~ zr^@JeT|9Cg2x%5@+BBK$&&}zF1$+0m?ei7ya|PK5j^`D`MbBym~zPqvD3vYg&;!gCn-b-Ne`Z&6(a2F6>o;K%u`rUI_v=LqM=!--31L zs)x|R-sXk0UUr!Nb|O@hw)~A48pfREUefn1f4J{AefWB&T!W1x*fjy3nvlNzNMW60 zEbi$1bWh+a0$mC`#9}cQL7Tsa^CnJWpFrm)Kg6}=Sz!F`+lOcd zuhhoyVh%y;2$r4jE0gcS4J5pU;1X}_Su?Dw?aLBt^{?GzaG{5nk>xWfJR0Q;Q9Cw_ z&5KRQ^~2%6wp!V^g@q8E&C_8QFD(YGDhIHitwwg_?{~)GWK0mK2>XxO4Zqu7;-896 zvk02aSxgo1Q?QymrdO~_^&TRvD)zoS`3Dd03>&`MZ(cY)L;JVOwAt2K=xfGQO^lpj zsPKAWHO!1!COibtw4Vi!dEfGfyc1}|b?fXm|P_uB6; zIJ`-SsPS~2V{*!ipoo+k{wRcLm+o4*zWea-;K2o}&gCstuAv)<8_qY)sAJs5U5|aT z1~r)k>g2fl9s!7<@o4NBJ8F>91TjMCK@o6VrM?&#P?cbi!Y^bJ&5q*5IFqyAAmvvg zerEiNpR@?CIzE$mt_Q|+y8|G(P;5tY_#2lLZByPNxZ#UJp)Uxo=TxHZe?*1xE*RkU zZ)^DNOrh|Uf{DTuSM+yZSIbQM%==;KP|X6VRa=?m$u{rH-BY-=br<$kX8gVoC4sS|w9eFy8h&F$oGDI~KyAr4u+60PB zlAFzpMA@n9ovvic^d(o>6!2k(?an8;psW>od;0 zWy|1a9{W-i-9CIQ%Gwc4<7ljZc?t3bmbLnLo6h4HJLg@srX^6dPMT|f6UqixZDZJR zl3SVSWA7z=A~V?Ip!R#!&T5b!uHt-KHL%-#!jB1Wp=80?TWTF9ygB}=*^?>DkXm&8 znNxsZiLw57DOKY6FAtEN8Jx~K2!WbkCez9<=0K)kL#{}%imY!IBNTCtW+j3yMFwyv zl=>Q5_7K}-zb}&3?KUREiY4f8}FM>tqKGc zLPK>dn6zw5oFF5w#}WM%W^un$y?T7fa~iulnxWT~U=Yu(PADg@urfHqg-w;NUoE>| zE&fE9!`wlJ*C1toBfH?eoxPIaWbr3elgKdhGY#`|X?ILQfgSVpl0MugK>Pl<2ANL) z29weT5L}gB1fYr(YIPI2P#+ZpozI-W{Rqd~|H2+#2L)8KA4*likX|n>w2-?8QU^*V z5p;z*IyBfWu1*KfEZ zy7P-e*~@=>%tF6%L`^FsoBOH+q}Gq5nEnNN$*rZAaLXx7Q118rexDjeIjHs;H*FUf z@zT7aFvE}ItFMpwzlTAzb9inxbF@{s5od{Y|2d|2x8-D*e#=M%>QSkQBq#S|TWYst z3!tII-ew5O#&3K_^ zRulc{j4cKa)@#r+*(YAw^d&`;F@d#KsrCdB+bJ{zAX<4whobEviWdd9IY#oLtp2N! zbZ{~KP*1`^TTVogJxn`$Fz@Sh$`WN27p0VJRf77mu`erCSr0~sk?8MVR_5D zufcMk?>!?u7^Q0NYkl#LARmDbt-;t#;M~{lvXC7( z!sJ*$QvwtIGwLis?yT|Z7#J?jKBQTvT$iM;Q(fG^$TG<5h8*dQo4XRBCC7RF zEZ~8lQ#jGSF5Ehx<$kuN^>Cld(OC3Xt~E^DTG+gzC0j5Spx|Nx8hcdyPqj46?0z__89goF zEUdQ>{aBsBZ$#E6gA)1UE6wz8!+(yf)h)I|Fv=>+s$8|aW#OLu<}5}^qa}MVaQAQG z)#;Xac=!ooyqqC0cicnrAZ)#f-d|QO(C2I6?u(ZvfnHL!a(~9R8=S=5|K5%G3Ug(e z>!~}`=&XIvp?cxnvE$?>Sl7JKkZFR5!M2Kp<`r*yi){jOK`Lt?FgU1h(hKFoP#13- z-@f?AB_2C%NE7+h+wy*dx+u}V%b}-4N|_E7glWg8b0 zRF2Y3*xj`dWqNM&d5<7HJ=OPX1ZZKKR_7hZE%;%F;yCr8_@AQ+^5k<@$!>KG93G4YJ>bm7{&7Lt2*1i)_MboDmAx-4z^vP zV{x_3`=Zm46dd4y7I(IKze1o_FwWqN_^>Mdoyw%l>h5zf#+%&BH?L05qpyz9-nn^9 zBI~{ff7DCPCyMC-Ixxl0&8-{7HGsrSQEtYzXF)gTcf7Urv8tqUsIQ$LVyi*zXvi7& zH&LHt!C&gL*96%56$KfbeZDI>*u*o-_RYh8wJ)_Hs#erLG@7I%VqS+eqX4eoPkk8{ z6!K%dP^8yT=L^Q!_zv0B!@9b^0Sm|p?T4zRjI0Wd!#uv0c*Wt(=WHocr75viitD}~ zpbye)Yt8l#j$a?8>;JN}*af{EXh6PX4(mZb6rajJbXK#XK7G*Wn1}Hrbg-h%qCIbR zOg}$8W$x+>LANCkrvG4PT_7TjL5y__EJq7CzX?ckDB7wA!7fm*PNH+Lf z7AoE6>pX4CT$d!8Qt_fC=}X3tR2!4GmzeD|Zlp@{=zeFHWOJ0E2eIEI=c7Lx3D4&j zL2B3=@1xXZW%iW2znSe(elp*@E0LAJgO_uE67SbeT*LjF9XeTI&8pS&1>-KBVd5Nv zUbpA{#P9sqTb1-Sbj-+gr9~@^y+2pA$;^MZ@IzcZIABW#;vZp*|xp2?w z4g99+i#uBjO+dM*!dJ426JF`Fwur}=$x=Qg032VgkRH*LUjJDFaWc7JV3^mBY{0sDYcQV{oIP}=EQ=|R$%5Qm=L&w~ zP(3J(r&iSXoz-;r2|GFxiI4_>ksL=81LXG0S|?!lZ}vF4bVy{F)?xs`|2?C^9lxyF z(-&L(S>Nk)+DKCpc`zqHUVggom`u)a*cPM|qN^Wp7j?;Oc=rv3!MFq-d2A>P>pQ8e z#K3SLlnb*LDxQZUU6VNKeyh0Q9oQO{lDK(kcgl5qnjftoeJa3Sn}OEtMq!(8S36=Um3*qv_Q1kI+ixU>R2 zl$s0Lzqt>SZ2p6p3~RgU)P$I-i_oPqT!rlC0xW$Et3j{UGwG_4y=oVzkzx;r>NbrU zGE5%V_NSVAhN52>uD(T(7@^+AvtxR#R)WYTf6r6GJEd1ak9u7j zgTy%!??u;4dn-DT0Aag6jY1)N1kwSw0xv;^sj3k+q6|C97T&gaT%Q3*8!2=+e#qE=!)nGn8mi@!ivePb>5kmzbJn@L==ysy zm1{lu3p>8_5tp}|BB*`LwR7cVR?^Yx78Zja2O24#o572GLo4c<$p78l9}|aa7EL6h z_aZSR5WURz_FQm5)3P_q*?GAvV>k&Xe3nk^pN7XFTGTEa4-a>ulNF36lMS;n=M_oI zT!#AgvQaWihi9ahyKC|w3=vo7SiZ{>HA#xqz$7EHGU;Sb%Ltz{smfaVvabN=}US1UdO!AM!D_I1?hYkleyK}YYpf<>360t@x5xBM=+ zE6kh0H}ZN{XGU5Udc2784F7**#_e3XT2r_TL+aiA@h3V-w*%bIhCdw5)0z;}P55Hx zn4`rFJ>JvWpI|B1fO_Ga3-c3S9^BvpRcAQC-?2TwzkjZt&!PN%d)cebAxV$)k#Fxl zCX;L`b)5D*e_uc0qO_%zO^%kvN7A{t5^jk=eZI z+nr_T|2VtB8G@_BVaz$k!z0i)=-b9*B6IKwP3ws7Gal5Ny#Y5;9OyQ%bb)22*HwP|?roYb=nxg(HwCE_eD=@Tyu;7iem?Yjs3*-CWLh=IXLnu1VXA|1y6HMY1a>EBvilnQdc*8p1s$5 z!6l^SP);+BN}<~xKAuaEJikCe!o!h{ih|#tDtfkY>=gcI@uTz7>MGSusbppmbciR* zFE3X&Ua~N+KN@LEtRl0Hn@L>&?d|Lxfsw5)^<|}1;`y&xQbmDQX>o?l;hILLA#(|C zxaxwsmvfzM)Dosu8T=2d+GW)d?;WJ=O?NPPI!+QHa!0+?PKNV2)M>kVR&T3R&d9A7 z-t%z={RBD+BTR5L*^Mf1RrRj^?0Etn*tKWdY^pA7QN2(F<){9B%_(#jd2uNVtDWI|$_P`gfF`yz6QyrgrC zn`ck|c`vgSD@@(+to(^Nt+<#wka?#~k8SVBxTnT|_I(B+jYbl}ZX5RgPFBka7mT+} zZTeEH*gQ=pBEV&O7|^&p9~K@B*4h!2zq8z{i)Om(wO-mnMFSm#QWdWG%jE7kTkut| zq_^Q@Y>iKV4Y6w1{8GRKcICx2#85AcaQBzA_gw%w^TPX9kq0|+eD_vmxNdyYtI=iF2pg4C1jtMgvc%cF&`<*OrW zq2uj^U!s;(kTO|u_Je|44t^%B7kc7a8mbVjy>_#cPaCtGK+iO>H!^nk=k?lsO(>qMP4}?g@ z+S#5R(4VQoDYzkAkyKwS_)oUeWgcqQUsK^YU0o?@IgpjVUq;{uF z-cL(;!`cw^gctQ7QK~I-XO40H^ig)k-1wQ=-gs4-N=bFEzB$mUH!5sk^ zBtr-@fOs{;?HxMyUs^EjVjwvXyi>a=yRGOJyd`d#7~A}Cr2(Y1z9|(K0RrivSWWvX zAW#Rf5$K5=bAMH6b$9LzR**Hz7WR_rN_IB5u;Pe(yezZ?p3-OAr}(QKdv&qBa6D{n zy`L=U_zb}ZkCBk()d~Sw%H2SsnmK6eVTa$nh5eriDH|bgLt#KNSJ}1n55SPd4mw1o zcC#xghW-GVz9;Ihm09IqQitJRx0H!2dTpk0Z1@%5-;|$RQ#Jl{sl1vqa>qT}GEFRA zG8LOzuU-~$4w?Xo4wYGc5{ceONjOPCweD>i#-H#mHA~X{gf0;Z4my0zpZh(tyZf;J zKP->>r>eGF&A2SZl%+3Wu9ithHyAJ8l`fPU#MjScr$`Z z5I}AKoxQU}2p~{(9?_P+KY6qQ^f*@;$2ybx#0P8T?Um|z)>GPENP^*yRo8E>Eo&~dfJBw99v1rejF!{6 zzpb7xWZ_#ab6vyA#x8qu4~IqX%&Ukh#)!Sv_(J$3byk+Zg8gc!1$=d__N?=%2^^rp zC0Ci{t<~tRu7Kh2i_>^I58oA6S&2fM^j>w)?%YlcvIGwtwBQ%+aSq*>CD*wMWqE32 zKx1#j^whmin_O>vY)(5pxw045hN`*0FJ2MbCDXKVzg-u!TZCrsUhn3kcLRO`BoCW3 zr7vbM4XdAQ`b;)SS1ykBeX2(-b}LVvkOOZR2{#KEN%@fOq7NmUd`&`V0V3GNGemgh_{GmJ3&^=C{SjZcgRpIkWe?GTfBwt} zM;&PP2V5DbkPJ{I3F}`}PCS|#^d&%^6)YBAD}Pegp8q?z+2Od6{%&xQ^U!1nP>n{2 zEX=g?je*Ucrr< zfMqV}B?V$Fj^`T{?YpntP0?0%<(cA}KOOUQ1W|ss;{Po@hZgk9K3Io#Ve0yoJowdF zU6#9UmYJ8 zkBgpDb2Yi`u3Zo$-|dxCU;^5yzs`5RvUo}i3@8C_%07Chk4u*e_v~Ak-LX!8vX#uT zpaG!?WdDGqU4SBM8cA=~aSE+$tIf6PxRI>RkPouG0HmP1q?4H3?F;g5 z_c*^orMA%`%;gtWH3;A~^+AB`g8supM<`<;-R|SiWO;v=;SC;7<~Xa8zQQO<-K1V7 zvfyBmcNgm4Kx928QtCcpxErLR(XVRgj&YXA7&Mmj3Vuw`{-t!}Xg(UCP^FS6u7k+=t>LCl91l8W z!>e&OChX)g^2k_!iL*TV;ZVf&2 zlv*4O_-s5iCom)*$1fydq(~yct!YGUF@$KBZd>u32GSD_W_%$yR7tcU!%D;kIBXMy z>SD_e=UA-FB+2DvRVy%A@C)_TDKoOCvHI7~t>o8dx4)NF3_Q~}LF6+WAIQ4hk4WBr zl`!|4n>H-wwcK!dt+8=?h<^`mTuacAbd0}CVND{8DTp;N=}Ge>z^~)T0>URCt>t3f z1#icmp{}3w9$&X|L8 z{;6dj9n#NAf_$oOF!^rMU7X%$E-?zcfTye$JV!lHg9oog8-!JZmYO% zy{=8@`9=K?m}_h0LntKrak{CSIL)7NJocK>#Sud$RPm!HAryn9E=qcHDaC=EyUBt_ zVs{0izt$eUfh>48HrpK5>wbbihzFGHK5tMbI6Iq=R&JVVg@ey; zIvukVTBQS|giRGe^E?#d)H8bKRaTJ_=xdXvA-~2Ac{VHBzg7 zauZ32^LwR6nia49K*hs%L8MY%+|xW!kg;LH@m}{`vsnFi7y4H7-D=#*yy6B#A@o1{*87*0*r(C>! zlVWfdD`W&jwkeph9-P{~N>-%#wmQ*Gkc6hUJ;hkoy*eGb$s$A92CTww_+%EgKrR(o z?yNUu&cbv`aY8QMY(Gi1x`jUqfhzeWW56_q($tDgQR3q&p)!P-c$3lyr7rV8v4Ogh zyJp3()Dp289#3i}FDDUy59l=MsRZfQ+TPP_I}D9LbEoTE@p!9(1navvpyzRn+>M^W z-F=Od@i7-*d3T+dLFN2>5on2xm3r0Coq=bh_ZPhA40Z4l63AXVY_5?wKtBEB0{C6Nq3YsjSRLk)Do@K4!D#)i;AgqTUget;zZ;b|kP>?SMyg|~yUQig zaA?JHMnYdUAm>3&2^Fa>vx=^%+R80|sRMayue8{9AY1tgBeT#eQ8|A%^7`|e_$|~i zHUDM>f+}e%zjE*R;8$*%t-GY``NaS!1}J490WKbR^@lVT^Mnn=RLgW(X=-F*IZdsQ z(*3+By@ZNcmDiG8n4kTAVuO2STB6khm*M~Mm}RlYWLs$m`1|#teAMVmTBodBna#yD zn|p(k01yVtOeW(7Hht&z{q1*z--!-xJ!jlI%hjqb++vIC&{_TT!Wf(U*~Oq*x1jDl z&^_zX3_`zhcR^~S8*llCxKxT!YxYZ@eIlz<)se8>--h1AC1HQoMT((8-^7Xb(LNx& z1r28^;9PZST?CZXwJGO}bj#BO?!_^3T3(h=eL3sCdH+JM3;lTkIYZ>>8vK&)#c^lG zkFi^z-uldGpXSg4@y)$WgPxljs^^ZU;`Txxks_?alYqBSALt`y`^b7TsfLvr(s<>K zSmiV|di%=s=dF}}<(jx9qrB{FdW7B_?cJG~4pGVKXzTmqga+_?7; zxBird8m#-5(UG4yB8Gxw7`EPE2BH%P>p4dIpClHZ1Beho`FcChr_8+Hsx1a@Nle}7 z9sTR3p$1M~x*v5fnoNLH4UB5AO!lpxbX-&(pF5R(cH0EGaSKnqv78aKK*hlT);Y8`$OP%KZ) zGP1NIzl!SZlkdEYy&D`|!+*cCHy`u+#k8Z`pRqD`K1qW#<~lfIeLj%Pfh$?i_!%9V zG0G{t$Tg1Nx6RKo;=`JBOvNnU=I%4`W;$Zug-0YjWpaMm#he;ynKVCHKcCvmqSENN zfXNydsO^BGmF#V5Lm9i!L5%CGvi9XK4Uw;vn$h2CO0cxIBOsM?HwU0Q1FvQ>u;&d79pu+=H1i8Dv=P$dyK8_RhoYlkZb{6B!bnOPfeYhKpo$@|ZM&)Imh=$WfU_z8l-var zur``S>7l!|*8iA63QeS-2w=HL%7sX79<4X}#y{~7ThOdRZqIcK|_S~6nim^qcZ3mkBtL}=oUxxh-FNf;bg8KfJFgG z@1|9TSqq;3m^|hmu4Oow1qx`A+6Cj9U50bXd>m3bOB$SX?X#sxSv|Sck$U!tN2^YbL+9Ri zsj1aCkD6_ezEAdCQ~5wIC03IV<%hegT&!6vTh{{|PF z&}nQ0s=291NYZOy?Mq#sWLwbBt3N;a=y()c+De%U z_oX&g&U;Rcx(kmoiiUl6tzGhxS$64s!Jq~&s~BTwZnuOh8>ITl8SAXRQ}#jCgRr`amPR4y^8V^W!sq_>{?JW)Xzlsd;hkrTXd0dY&8MK6ew@ec|g1! zE5&0gY8BXb+YSdK%hzLn(A!jF&(w!OCOC1?rtV!?4O?)V7`H2eN5cky(G^(W{Xt?GKNgM=*=SsA!+nLySgSvza=QM6 zBoQ?gS(O9g%Fmzn$>^9=yaYZU!y=F0$kyPcLj}G56tQsyCNL0zf}o67@)NE-*%g?+ zp7ED?aX;PlHMd3|S;q{dQ=)xyHpiAaK2BJQ|0Q~*mCqdKz>z<*<0O90n5rKZEt?S9 zOLRaEfMPCgj7TmsLbtGWvH{=3yl{E*pnNvlTjq-XA>>-QBDr?e^B>I)bg`Ugu1Ra8 zd?;cFG-UCA$vyGkU-KFIQB1KGfkvibPV@}nKI_pPq>l>++S|xxz=h_XDgG-9yy8MKaiPiC?54ZjC|)iKI2|LrtjZx z809E*?L+VeFwQx1yYXXqF0OU8re85mPZ@!Qd(F8Vct6j2Dwmkbo1Q~ea%Smb49dI% zu->Pqsy04n`cTv=t!iE2K3Ba-G+W0XGF&+CI`&F(qv5_-$aWlL_*_pouP5oZ40)x) zYX`^B77^EF6vzGj&5iSEI^FWj8bK+{3 z80u45Or7x5a3je}Ff5VcaMW~hqz&P+NqKZVI3t)bV8oAU^;$ln`U#Aj%;^q`<8G20 zjphwm?*=JsyZ^qx59$T*d%H#KzQUGKsv5`FqmD`@pLyvL36{=7yKON(lgcN>329bD zTF{l;ho6uW0>AW9D7hG5DIXlA-vph;oqC=Q_$57=-^bGrsqYw2Eq8%F z%itU^{^TcNpf~+!qL7hj%*A^)sc^|6n z`3D*B)+dh=sjh9KpVbZ0yj~fkF3o0JpXYv_YChCVXycNgVb)8jBk?s|l8FZnkGZ-d zhp+Jzwy9CM0vL-S+JQB``Pqw6_~7AZKA@IMHhO54kLLeAbBORH6v_LU^oh>_Si=J-ysgDB|e zza)WC2H7_!Dt?JU8LrniFYYWE5@L)|woccYr^1zKvZKA1IPGi6KUPmwa9AR1besQP zTY7DpEJQvE0PmQJhGy;Cd=G8C6W6i@nn-2d0?zsNo{*NZR-q&H{8xE@fW_5%QxI)P z{lVUJ)o^c@sl$r1!C4Xy0OuSdeMwb@h+onJ+;uM}8b{`hQUO*KCGvD@=5@X})+m{4 z^ zQZ?P2I$X`{3+W3f9cOG+vPTCm-=bD_N*L8CS86unbUp4AQJ+=1{#+uh#TN32?eU$^ z5DW@d@hakSv0dN1l>FkTfalE;oJWTkjES{XL8lKj36KpQJ&zJI1Q7%2r#g%Jq}JBT zrFN@mN+5NZ#Eu%D1j}&->QVGUU~nqKs3>0rtKgcDfb2Jeum?Bhns%AuVz)Pv40|P> z*!oj|G~e@(aH~ZOk9ENt2JF_#8bD#6@Fn~-^`~{n_`&n1rYQ~tHraJ#FTeL^hp|GL z5AlA5&}{znY<#HgvC!m!kq?h&ytB9dyN$~^v-Yz~4{qw%(j%doBLqpUky2}>u41E{ zX_wZ`%A+*-Q(t`F)j`tejskRBU7aXop^!4*I5z<|jqx3i%>gu65_|Ml-|YS%gW&z! zoe9fC$4m*@q?$cETwV}Ld(8yEVl%*uwC zUGvM~$z*Dbzw^7V7#+WenmHAPBcLU!D0ghC<(kVPXiY%g1v5#q@f4A2i=$2iVp+2zJtvU|Dps3ni5s>kpIWB z%s^Bie+ldz;|bDt7C1aDUAab546%&Wx>ee|H&h{9rUa7n(zGkB*cx`3($yB1f+ccaZQ}be>~H)LM%Zsy*mPIR z-NQ@aEK$*$+JwcCLx{l;FRInft;xhtdfgW5HG+g!bY~=#GgSY|+h6;W(&ze#k5?kO zOunZ1s!Heut=U%r^eq4T(lY21$orq0@*XEn3#~O=8a*d=I@O_l`QruiPOfHK0yYfS= zBL2o#Gj3aDBdaFFxS#ekY9Re1u(EVYq&HzHUgGA!DG_PBJq#SaZY9}Yu4SR zFtA{6wyH=roog!+9>!+G-3!=U*I#_`)~}R&cu|`x z+hP&-qYwLTYb@b4!u|DLDBc2UpJ}`eP2IDXG%|J*sV{{5>V*M#12Fh-ooFXSgA$%k(bIV}1pWn-z$-8FN& z+Fh=*s=Xn)N&oPo)qCVy(=+G!s+S;|XC_pPD;FZLzk>vuQr*^LeBta;Ucl_n+Xh1=e&8D*WTgp zb^JiN7uaO4Upj3u$f-|T3Dn4qxRb5B23W~?wp6<5&LhjC-fec|^+2DPJu|L#i?icn z)FnknwJUnozyrUtt29*Nj|AA~OucnG%%SG9L=AyZixppVk2(bT-=pGWlis&F-hW<0 z-a|=BsqOzacBoAU%;i#f1Ey6RoK)Cmbsd z&6`vgUxlX|b#w28x}N$Tmcpqj zDnos_Wg?s07#DnZ{J3v)6MM>SJ6xtZ zh}D(A+S2EG{#)g|%$(7=D_b(Ooz>>;%)KI)!@;k?rd4~h_1`Dm#o#Z0ON@RQrZrXS zSRm=XeV1ZSY;=ZNQ6J}?z36#tYE?tT0erE*iVg7?76j9zMXD{nj?bI@!sXJI+XMj` z>$U-|(U-9ufwxfJ-&e6f zY1D|6m5Jo-2h$1%#%1%va+n!0@eq#>Mm)4OKibfIR_*f3hZ|r#H^pbXd>fEF-@B1?Q^| z&F7O7bfX0m{>*yWo2YO6ZJjs29@f{@lE)V7&k_umiHa-r{O)w{J zDBF_UcF8EGz=Mx*`-3lCXdgNJ7O1p{PX3ZNuc!$@=>3?POayc}7=ks8+ugqVrBWN~ zVc^Sy2j;TKz-S9&gdnnLo{Y$X@Drzj??~BY7X|CP0d$=ma}PLV!!MIb{{HT|(>dGW za-%hof%KUiH~5|bgAz%F^O$7CbT?C}$=VeeKXKH5L)`Dqw{T2KTOAy3A9yi?GSoh!lVA>AzvgmXW;~I~5X=y}?+rFOz-W zpKJR51J7|hzdpy|*Ky2zmg_pN^L)Qw@6f`HA$t)!C<|xHhO=qkfr;TrD<=IpNuOFy zsfbuh*Q^(5+4E<*BdKX=$w$0ELpuxfF`)khea?_J?RHqMdpw(7z~csu$cGycbbI&n zU4r+W8s^A=(sWBkKaEOH((b0h264I01n=;Mp9C^O;A5gl!lVf`ADVuK1Gm=ahGx`j zSt$6U1z-jIrA7@){Pd1MR{D{_obLK zqC*n<{CA^B*ejx`c4Txok#KjL_n;;9-V3OHF4|0oqB_qSlK@8G#-_c0Cw0dr&3QIF zUE4~*&e1KE-3~J^D%WO=i^9w0{n-f4>QDsAux>=er4#$(-VBSmHj{LMjXimF&h`se zrpAY4Nq#8U~v#)O=bJrDOhvI&EZ!h*U$6o{Kj3BbKS2I3N|~kOZh=jooeKnO!2@%KzbfU z!h9W7x+!$tlW=u#{@coUC=EVN^fMMo&P~?IajOqHDgBmF(mymXpkLF+0sK6^%n+> z27S42wHu^j`tOYT@@N!_2IkF2mj=Ehg;^weL1Au;omf70lw9IB<%Gz5l`NfxK0Sl1e7gqM{cl>EyGR+}wrorr~oF1EFgY*MTFZiFq?;fVuKB9N>s0&zNtiFY13q~|`>W1tK43r%cxbMfk zCGaLZ_+0%-*75fWCQb@aY5v}Ry<3VW<*`c=quBUErMDS=q`K(~jMOvy55!AP4nlNe zWFEX8iUXCzP!A7qI~4XHpl?6cI?Y8_O+F(DNOFEbIgMGt-esaX$z)pnwO+UpEE4K` zESDdY28^37QE8rrexVp`w4Z~Un&HB)JR=Mh4D!&V98`yr&6%LeneiVtgZZpCOHOua z`V7Vle^VEFgfO8h;0yIcUz_XrU+umM^G|?7xsYW&`C?1MWt-kc z(^&e+@WESGU?YN=FUhLQWm}3U8u&2`d!ALZ;KuE&#HrkNXwaT4J3rCPv5eu|a~02_dMRP#}P;W^rCh#m*~PvHuNryf6* zhM+L~(Be(|KNMFfu|d@#^w2hC8+{mE%EH+~&Je#!TUaagwA<}HsW@_zZ)bvGLFCgr=%^rW5hSN;#Lr3U z2Ig;P+2_s98Q`Rym%`0SgRIkJn5dMP%o|6FJg7rY4S_Qp1e!P;>v9l6znmA7b2C{6 zl|shKJi1BSJJR_k-ced2l_9DmYzpvOHiY&BiYwuh&zBwMd^)SkO@6F%t2M@JLj^I0 z9K*KKHln;M`23W6aW}wt{`7d2Xm5W2+?koBz6%E4CTAVC4&Ct&#V-N4L3!ze7x|hQ zM03{l$T)J@@!mx)k1Zv;2g#bHU0*6YyJlX$?6d-{x*fz5q=p6z=0)jS`lEs}Hx)D1 z2{Q$ng3Z}1LBuY)VHfN^MI&`-uRrl~+8fg73wps8RJj+HMn2T1g5G)U6jCFAxicTND| zm##li_?H_hImwwB&4Z+gJCOw|N;WfV(D}CjHVs9{lj^2n&2SYr*|5r%lRDuVH-dnZ z2?e6zj}$c=rU%sucFAx)ybK-_x7FewSblz^C0e-A2V+)_BzepH5|3Vhl0pbd_3^~y z#jv!>s_+20EAT|QXg%-^cI$Aulgwa*vacoovdZdyVmYuW`|S+a=CAt%h}eoO&z!6? zsFW&EkW5?2EN{&(zbfsB`B=Q&AZ{z-tg=~4&t2lsS0iGhXJS2-P2~ezbPwaWHKGXt zC)JpSNZALJF~-3wu}lFpim^t)t1lHOA{3z5OM1|1dnjjABvE0Rpu>oD$y;6}Jk=D8 zK)aX6Nc8gJyNwy|2j&|tkJG4Yfac!(-iZewc+8EQc>EMBqQeLeWg)(cici0V!*-|-qp>f3LY%C03>Yp3xS z+IIti3QMc>+}6zNHjBi89P-WHiFI(eABAP#EV^TnoV4hR`FwKJ2WF&K!&A3@6%}pY z_96qvhadau&R3X4aRW8Q+f_xEpveL*;gN?8`mgPgm=6mMvau2?+k_;?n2i zAJk!8f4^dJ(S+f{gz4*>Mv&6}RC0}4F7Nb9z`P$MB?&Al%HX8a8+oBpyQuU(kjZ=p zZK=>ADByP8L*Z9qv`t*v3cVd2{~g)yP|10v^u@Y<5qS2&ZfYg-C-;?Rja!lUcU;bk zc^h@T`F4A46XU(v^5bQ))r89*o{J_qYnC)Z_KZ&CdNm>|+9-Cjb5usw#@mphd`Y8Q^M|K zV><>eJBY?F4ETJXDb^|-sH+iP(2+<`ZX6qqf0Q3Wf2@$$u8}%?f+)@3lnTocW4Jat zwUK0fM}OzmgXt{cb#KqCg{QW^^vu0FQ`_K2#dSSU00Dm0|b%iA-XFRJ*p!oR??k~V^hakYdl$toZuB| zaU60uBn1P@nIU*>i~3lWcFf1`VrKTHFP=nyK4y+S6AHyTnOxDqIpRhh-1qytE?&vl zjXbm}-GCu$fOJlRO;a0wuo5`wv7+a!Vw&=7=_xSH%w3%C+`8zSz92G&tXRI$bu5|w zwF10sE|XDJjiX8Z+-Es9pqerHtsT9GS8NURCBp}X--7_Dm_7!=JsjI+f^Mm{_D z1rV`ju2G~Zf?@emUW18Y?ozCAZ1=u><5{iLAs@>6p&0;WWvuXG5Vp<#9Z4>e@te?A zQ(Bp3nQkWHHvT&CrXNg!w%mUsh;b!v%%tFzo8lLwK;<6)YA#GJ*mwIiu)0d#-USU| z7to6Ux>z7qp0#W+ztd^0^3$F95rr*2u$&d;Zh|QXe z7FVQtFJ}`h>&j{O5~((sA=15YdMD%t3WM#g|^jS;lV zvR|-&;-BCfAbvg1s_BzfgS}J7;b-zs9|2BHPY>geV#}vBBMtRT+aE~2sVuXt^*=G* zOGKogHYJUN<40s@L;Y+Rt{7dF3YueprPQaDaM&}X22dAIDu#{=As@=G+wbfSumL@a z%588t^dND`-nvhWE1W|~ZPb%8Zv9hm12oTosL;pTwIhG)wP_K?jqTL1yIL@I_$G99 z>dx66+=tWsr9eljyeS8Sz;}{I++H94KKDQcyL`H6VUv5bZW;Mg*s#Gjcb&fpf_TBE z$W|5J;WJt^Y4=+)f&SPpe2^i#wmK#+pMx`Q4qZ6<)k8L=yQ)k>NG#8ta0P2x*&;!- zHSZO5p7xn#@3;i}ego!`V zd!}AcBRal5DA}4$&12^(N<_a z+9*Cv(^lIVpzYsYJiYKhOB1+W+GbvjSw1iE>`-pL7p#1>_Fp@mHa_Cm zl7)NZ8ef5m8}IBaH7SEz0D_zrLmds+$YhLTUz{}ds^_9I?-i2B$?E`IgPGo$S)N)v zzrwaD3(j%mKs4Pr0<_lc0nB*?!@Y{E^p7V-gLrPChO>eYa~J@LKrpU%py zcIF2zsizM)Uq0O{dfWTiz@*FFu@Q@<%K3<`Ae!h0E(QCZzHXcOU0U0@c}CkkJpSjF zTQU%AfZ-J+Pfb<5#F=uJdD%`&tsm%gKP$sQZ{E&k2{?R5A}A2XQgc0>WJoGL}n@vFp`(@D{+DQfib0Je|2W~tQzipVt)4gc^Pv%@&F}Q-QmNJ6>wIshTHYZuq(C3Ln2?(k#p*&?%~+|k z3BPsa25j|a)``uC&~h$8gK~D;9^ko*>5u}{v0?{%xRE&bFy#ICX#7;OpwGz>YWN;E zO@^;`L)At@`M!sBPw1)qiIfT7?5C|mw*Bx&e-JC!jJmJyjy5QPSnu81 z_*@hBy9a;u>i|3iI<^$~)>bLj(67dLm0uC2AK1|(fystn2f0dz^9+8yg&v+Je0@Gb zj(<+`%a){m>Sv#sCtb$D3k-}8V;{;xSWS_RQD{Lv&s9du)U4j!K}+S0$MglY7#5&X zMsU5cUA93zOMj>%1R*JY{`^ME>kvkMqX39NL2-bx!n9(S_G+K8M&Jw|XPNEiw{60G znh7*Y{l$x>zczX(_5c{qPp#PHB?IVc0A|L4i_76jX)Qk(4yx3%=;-#P)W``vJ3d>g z;IX-N#H$WN9&?VpKbR`E#QRk|Op? z%kQkPCn*Ad;@g^#d`xCYF8|YsZJ>L{HZ-NBuyZwT}-t5z%O`Y^hqL z0B!zzemy|zGhM!^kuMf0?w7m#D1TUBD-|7+Q~&d+skeCWN9;a(U*j!dv!%=qz42KB z_PH}0&*1cPsRosbkQ>MTc`)U5rfWI0S)=Z)`(}5^kf~?^iJw4LZ+1OfMybLOj z(N^;z_l~95Cd!tggVk7I7tN>?|LS_g`w<)3!hbg zKN6cRr_kJKmW|yLoxwLpRZO2#2X8#3ca@J!L703BI+sxA>CSYk=-iqC)ul@Q%FIOD zs9+low9(aQl1Q}X_rD(6 zcN|u&3d=c4o?aB_X8Z(38&?w}Z`p>1upuVp#xPKODQh4EetTaF6y-|0w446Hd5>NK z3jotT+5RqzI*}(|3MBU95Of}*MnXpAFf}(QJtsOc0bMr!diO(GnI#i!)hdtHhuCoe z{T0*BLq))R1NDTEhL5*f2f(WV)hTfELsB@E6kvLV8ptl@bJ*BE;6y@nZNkDdV_$Nq zot_%hdL$lCM&X~dF@Tw0B51<_YBZo_fn&mytDh)}TjTM9r#|)NNoPBuQ{NYR6P+=6 z+=@J^VJzxMpbiC-0gDPN!C8Nx{g(xfLSU7s&;r~Eh6-R;$z{~6eCjxH?;>+p zuRv4<_9{7!Jdgx8b7=m#uS-~)$BDh)KZN*MO&wrD{NEA0{vE%04^7MZb>(!#v^*#M zFp0oFyo6!?2R@!c!vd4))$jkYBJyxIXjN=J>(Fu9K&q?U=y6=A1`h}9Oy8I1bNu1x zKTi=ywt{E6>n+K4?bErvI_mCi>sFMS~z=gM3d3oCC|l} zUqp#2Giofm+{el)ynX;W6NSUhiJ;h21H9EBUq9eG*_DC=)gQfWj}kW~`rY|!d4Ly& zFotnLCXIOtl7UhbG#Pg`K*{AJBcjuMKrvKY{SvTQ8EPcKt|z2fVH6_%h-}1L{O-d) zmorL4R;6}OFAlRii-8Wl|E1k(&H(_zN`JF;o?w1-=zJ};H#UB(#nOK&XXXBBjXN&s z5+r_a8(=M*phG^`#IkXvob#zlX|Rm4fk9_YCP(kk80EZ?#RSkD(eXJgY5FfBTXGsZIU;uTyN#9y+KMYvphQ#RPDF z^8rUON3X*2```pnqco=0Om^N6zU_PN;jUi*jjho|r%MQmds}EIvTp+2B;fu476*9^ zHIbmYOm2%G7k)qqWTt>Q?7gI)`P}xgTPO`lpIaqbu?mZNxeQYZ(0S|ImKX*0#c`ji zTZ)b@cIu5|^FA`a-Q>PuozmmYYhK$;(6SOWxS{BKnPY%#Qp0zCQcL8Qa>d=0?H_jA zrGY&CJ^s^HF!%W1B|w-!*E5|8w;agT(mX*uKi+Xb*CrHV6l(8Y0>=`F#()zkxQ*;T zq{G2_rpOCtZ!m~xYOb4YHEWu|;fmT}gI#jJEE%LHh3L zqOqh&-}Bn5NP%Gg&q}&b0#MJRc4zaBWQZ4|F4bJQynz&A8%{>EdFuME-&f;cL^Z&~$d1A#mLOvh~cbp@pScR>SgYN7t9v zkP2n?%_{gw!%WBKZ{p)B(`PeE*c_T;2jc#ILekS{&X3Q}#}G^ayyxaAnNmJK+JKmn zs=!iBl$8yZ@Z;hIeIYOCY(!HRfXl{-tv@yu38kvUl*-fIj6W{6 zo*d}9zhs2uRN>(%c#OPJg1(=h82zdL!+W@qPeSa*O4qt5?!)`v<%}icV=ulGeiH1t zn&pp-(MEF9mD_9qe#6dNV)H4R@J@4>8OWd$%z+G=2nyrwsWvo`=it-e|BUWlm09w` zW?C6h5E}k{R>2U&(LL^0*2Ilzgqi9t=;u4I3Sj9b#{8-gdV)7M%5T~N;udXH}(`_CIkw2sR@zRNSX*G&0@r1W29KB!y zQmyF=oBbJU7AUTpC|AQ@r5-yrVv=S9%b*x9yXV=5sDv}(s^Wzco>{K=k_<@xl5 zoqDSFI4eiR;D0dF>gzY@9c3Xh8iNkP&vcdA3T=%Tcb0EXO=TZfFHtrRXhY5F(5KD_ zNLl0lu9fFJo-k7I{n8V zvQ+QKV!j}_bRw8NH}!soM(ID4B{OG(@5*U%P3ax`Y<*w*lQ0Uy;LCO!^qru_ZCQG_ zjFr5*w*`2?UUsDCi|@vR;5Q{Vh(h$FwVO749kDhrYuFd-mRVo{2W0M2!yLX#nD$AM ztXq;QklBXo1fg%fA`!$yF#NU?@5VV!K-iz?W`yMX`2ruq3hfWzYxz zo=pK_^)RpU#S*i)I}11yTE2l^z&N75ll+kzqHP(y7DI*7-@8Spoi+@J9&{)Ge`JYQ zlj(BL{I-#(FzEY?v2WK`28N`PCz z_J6%7q`omd?G+U$>g}YTs>$6GnwK)-)XH1NL0a}X9|wp2bTwfzVx$&jl*`h4t68J? z2wW&?oEy5jYdW}91?CQ>Li?x5t<64d0Ji=_B~{8@j3>bnb?ZCYb`mSVkJ>beT9D${ zGzNIeBSrPOjEx6vf&Z%-+R!ruT6TI|u999D=f|8a zF9*udhP6fUDYM8Eu=2A&=s?oSL!*y?`v~T%)tV1A+7b3?gSC_YKqoWKO`)^#)-8rB zH(K%((2luH0=E%e2F-`KO-!9ncG%qVsqKWrAO(rZtrw~97kt$XQ@Gi<-^LYitM44o z{_}m+vf71q_x|b#{*I4e$jc!(=`}xQ)ic4UHaTDu1b)Ob%?!OqIe6y*d(kbENvB!e zs{si1fzHPb{I_6wH^BS`@xy^x|3eAYueCnRxLoO!TmpL$+>CySZU9AolM z?50Lm`KC!4N00sGapk%p2X{cpmSJ%Z5S_Ecnm;silQR=C`KVs=ad5%mM6Q?*AJVj& z708ZBUp-qI2gx{5ZHj3YwHE)gYj|BYhOV7HkIwi>ZIscl zm1qH@Z<(8GlxrbaTzP>UKYqf;riW*cCXDOkcc(6;LRw3TC*_HiK8eZDT~fLDNUhSD zw+zW2`E#B9UQj~c^GCxmB_w5$8;|aKt{jYe;;Cf%nuE?0Uq{fGTg*uPhl;RyDzIIy z3`qe`h+h^x7dbodTgMR1%-}_yGJSTqlmSLM(sO_tA<-rF=9Fr6J1i@Q{)?YK`s``6 z%Zbcg;t20Mk*?YGC20=wVJk2`vm|M``_ENWTDCAZ3M7KI$sKX?X-3M9-nS}Zi8}E6hA4|0wA~y)bis^3_A~aoe zHN6>CRH@%0m>B!EBqW!2cIK2>;!nUs0Z3MpxC!TJY$XJ##KXA2O=5Q8Y+_l&Ta|>e zrd2h5W(!0W*8TPan@loBo7-n(kj%}H+rc6a&S)k$En_|-d;=tYS7>P+9)NZ*fQV}m z2MgfV^uq~KmR~S5E*UVmuWf*{WQG+XVQ?;twpB*jA}c~dUyLBcu6|XcM2x|v`9ebh z_mF@Mc zj;KZE#1BOmh(?KH$q2%s4IH4s^Y0&C-Z~w$j*UXvJ@_Nf z#N+|ra5^}s+w6nvqK`-c?cqT~bIXSCs<*FK^4rBD+Z**(Mwwa+z%gWk#`=a;(k^W< zFOM)niq`llu60%|WA6g%IcSg5Ug)j0E^(>FolN>qN5y}hJIv8a<_d>B*0Y|60UR|& z{#wVcZoJhFiYh(tF_^-Fu9&V(NaPtfJFr01el~biJlu_9j8z>!_i&70RjIwTIsZSd zYwO<*d$z04pWuhhTWYiv>58AX>|Uivv93ypNl6Pn8I1eHz55G2p0ne1ejp7=MZrz$ zkIiTfiN{ty&-UQc9*^_62Yuj4{?Rq_&a2dI<5y2awH1q{38kzUoA>B?`OF1*h zRAtO9@zx6Juy}^O^V;!?G2-@RfCPmem@NUIME;k5`nC+XV5z(>UQ2E8lP0VQEo1+V zn!(^?ixmt`h^!$n$l5wPx%Cp|xsE?DW-1EXSXsL+L!EN3%j2trEiLb^& zc-~2N{!#}V_KugdjI7je`Sb0#iw(2j#k8eFNdRv^7&7XAIbo_^l@bHM+5cR5Q2Seg zlqHOB!_BJ<-q5Qoe6fIvvyt>vyTa{60|5KI+3RVV`qWIg-KYt1)c~k$fI9Y+u)K4h z0&m+A_j>5l-TjiZ*Gxt;c*=2&1GePm2Z$CY>HGdx2&MSX{wW zz;420{?xw?7@G03fO2FfV?MDl0M~p{V>#4xk27_;!`qmf4%c>lx0Evc2EdX7P|92w z8z3Hm5hLk&+nsT8z}a$rWi__jXadGfz#nO##%4jMZ^}KsJzNEs!R3w&^Av*Xbj{yH z2A8>g5`Oe)|MmFy>1u&=DxxTGM2bVRLWe24G~Ul|O{^KaAG!P~<1l;w1Oq3Sx^&4$ zqKzk{%I>S>gXuodtEd8%?UR~JL^@h;h>SNz3^t=EwPrDk5&nnQ-IPb@p>e{ z%*Klnl>f-%KpvA65WZzIu~uFKMEIl*Uh8_(o2tV0rcO>TWjo6Zd+|U40~YseLeO!? zHECjN?JI(5{Q2a6gK$wIPROkqmdl{@yHPMc=i#!wsP`fgOE1!iz2hlO3?;&cI zR6zD4jlb=6RB1%ZR7>R2qd!=n_E-b~5?Tr1LLE~#JaFV2A4k*W;GEsvg@7>A6RMV+ zWOMXwaM+FMZi`k;Zq}|0u31>Pqmrmj0vZWU2ke3iKbKLw0^_Padz`VFk*OHTMXY0H zD?_;zAQnloQ2PW(*fto@qId`rWX}F70i91U?o*DU|AI0g@wzJ5GQsc8Y>a94{)dR^ z$*4ENyx_&Srx;X zQTj8@ShYDeV!{Lq_3|e#e6|inp#JRk%5FzF3w2~8P$frAWEX7Bv_#cEK6c1THu!$bl;IM*mvOqSCdW|5ap37yu1 zOrFDaic8qaN@K^lZXCt#*P@)qiDdO^Y#*D%oc(RWzG4x~zNKT}ANNxPFyYS&ylcL= zvVyq00B@|oGkovmGS#<{jK8Iw7dS}{Oq;ht6#j+!`~CI@*HUV2v9O>Ft0Q_3ewYnD zA;VohH*3hE1pBUSRBW0EM?b}**+{2(Wd({a-*uV@NB?68>Yc)&9j1VTp|)$+B2U^W zKFugrg)5j_@c_3f#(ohVGBsb&`bJ6LBn(IUN#S*OnqgP3%2yG@ZI-*l^qr29`|Ti% z@NyQ>BdtwO;WUg@;QJ!J(@m$OB~u}rQaVFUvWztXw)%j+wyA+dy0#DGe?NzCI&Qw- z8TBtf!#%rqlinhZh8{IcTb`_46xWJU(Es;3T3_MTjp?exp0{d1J~XiLX?^km-uw{6 zm{3v2z>RkOpJ!*s!8o-lO}^ZV<3{E2@98>RGEfQ}V)~>#z5~+@vrD4!xejK#vnvCj zjD2a9=pZEX_tTm+Gado`Tmmcu6f*P{k0D6lL4qMENPmg*dw^?^o2|gk4}UyN8IV97 z$&?uRDfHyvhuCd7V#c1gVp>VatRIQQD_u&q9K8K@9T8;qF+aTN``&I+b-R+e(cbKg z_$YlzXCx0>C3*#qwYho70+ffQYK+@OuyQVh{%Z$I@lEsW{z!QS@LLWvW!0*`ar`vYqpYfy89muGmh2BuZ9I>4x=EjVDpVO@YoM0 zmK3HKAS32RQ>UY8?c2`orQF$Ztb3WFO&kQ#6~LJ9FyJgrSVJi_czF0O>1$jx(oAb+ zisN;;Bv&00cq0Hj6AQPv;;7TX2K=aQCZOZ9Wz5ir05Nat%piPiof!q}IpEap&P=O% z#XcK?bZ7qz&UyHK@;B9j!6$M`#lV)TcI;kr-~I}O>M6xC#t6_}CXvp&W3GMR37n7y z?zH^yzwn-$f<;&JIM^P5v=P0z_e?Ul4g?&I@^gf28ci>c^fjL~p|t1gvoo_6eW8kZ z`GmjiF0lSx&Y?XtK$dI^O%P)x4-!&{fqZ_F3&flw0O|*kk+(Q~VXG7)SYWZnVfY^8 z6L!DW{(+Rxk~r(Huk325>pj`dYod4Iv==4GW=W(a0sFw5#S!eh2gF%|$ikVaHyX6x zh!FMGX2}H{ZsT3qy=|prdcXG67ypH$+mDcM2E3J^%n_6!x(ZpQ5YDwotz?dC(r~aF z#rad-1JTXKVR}GT|KGpsWnrXpHA*c3QO3t`fiN}yV zsMJcR+4~|lLco*QoKJWSm+54q2uP2=teE^}o|7V)ei`j+Lw-*uq+pu^^;7$#{Ata= z=K~Wb{M5{wrbt#mhmG6_g~Pxu-F9FnCSw?#c#pFeaXnqiZz`IiA!fDox@so?_S^*% z1R&ut`nK?MGf+q^eWtMr7XDUh(k-hq@UZykz5_uzLKnJ}-!xX}EHoj0KU6FLSe&|I zL%G#qoxuN9n6!G6{d;Q~O;7;is&gll?k1-&49W`U7~hlyfopZ%tHnARDzFqf6-73J z%*Mu6()+13oZh@|P}|dX^Fx-u&rO~~s3m^tWj?&}O$uI_ zqMzqu$j>C>R39v~v;wwdar`&#wp{)Dd{mNxIW&N913}Bz8}v1ZCqTvPo4^UuVw^1O zXKv0mF8M|jtC=a5aHy0pAAVA}3aUy_d4aBf-iV#~dpCo~jaS4A3}R$}!UC}Pn)p|| zr9RGuH$CKZcVe6dVVI0Kw^elGMhuOg;tPBxy|r(>{Q)-o^MNsN!-0pwuGP+hblmmg zb|a*%Sx2KwDh^hzyhum_VU@9=)x#^-ItS#KfG}ZnKTP2BmC?f&ODee;+WnEtM8DtV zYmERsM?dK`l!Cvr4xlvP+2B!uAZQm=)FDVlx61;*tGks6rm0#`?};8&hiUuV_;miK zPI=Z5gK`7N2!cdidBT1?>!+C(u-AZ#t^84L&>BO-9iGF_34wam##qjBsAxp&Fq6H| zLcIA8nEpM}slY1{|G5)e#(3oV)PT_=I1GFm1RFN9qg7fRn6HB@Gf(H*7vnLzrw-qM zQrfdVkGp$gyb9QPkV_H?y?|9aZ~mGl^s_hZ=zpWvsDv7v{_a2l4CU-Udu8DN#3)r8 zM}QOJJgdvp&iQtXHZKU)!mRa5@DmvM=Jt0MZPb$&B(NQGTd(guusf6k0fT+bQ@=7c z+RW>M!E)5XS4$?y=e}4fx*;fdv^OFRVmcta(Mt^ySd4mXfTIaW&B;qC@J$fl2mRfV zO-XQM_LL~#40SpA3Q|DLL6)64Hwxqw0BQ{A5s5D`G&R1n90SXrm5~w28IVX1>viX) zXzM%aW)G|7%gLANwX18i4v9f(X1)+p0)@6gyb|XRJx37nrOBlO2uDtxiWAuf`o0>$ zjP2xX^~qoaXg=nOF%U8;gQ@vB=PjiVwQmZ&WAEFXgh16ZbfqvLTNT8d0)kG#oq3fJ zhvwAU7KV_ipr9+-)dms#zd&G2^5Rk9Y{8Um*o^<*K*8_bk-FU);qo+dE&~0v^+7=< zQ3AqVPa;h|gJr9++C=9gR~dy&=lx9?l0F*@?JPXHDRFAUD9papUT_avhmE(1W`xv4 z=TS{F5_etY|0)Gaw`X15m|s3>O>#hE3+b0#I1^U&Vw9as+dNE~1xD_ngjx`h?V+CDT?~I9?kgps4=Yo=OwqT;U*7&Mw?%^NO zn5^5&f$(3}LPW6C|5d7UB=c`CkOL#~Gy5J(Bqw&&jt= zvVwxIK}2s%J$y<6Xuj%?VwBb&&&AF3#e>&7>>lb~FXb!;XAk8XeJ$;hKix88uy%%P zk_{l$yuGDj6Aa1)Ch!xe6X38>WIP=2E&p52^O(I4mN;G=-gSP51q{N#C8Y>ik^(+h zFp~$=Jp+1)1f%D=V@iRI_2Fnuw~52t0&e$&NFWFe1g}^&;r7ML|0OG$jM2;V+#t>F zteaj~>g;S+?;dDM{H$a!Tgb2zWkuSWjvw))j7X-8upZvn0wXHb=IbF#a3{6+7mO?< z|GSqU*?_!_rBx;{oG=Q&u?5-&`-pT!16`JrX;qF??f-UfD}ji?>J$Sdp=As)Nd;u; zv2Vs%w9Y6JZ=q25Khqw7mzbgr`hx%{#$%I8UY>`OiaArYtl#=jPJaodoq_xFDINF{ zz$mI^DX6A+(){o)cpF*hO7HqENM5I!&gXv0+zaL*OoZ=88LIu_=hi#vRA2AEJu| A%m4rY literal 0 HcmV?d00001 diff --git a/static/images/spot-illustrations/.DS_Store b/static/images/spot-illustrations/.DS_Store index da69a15db1ab4d5a0a657fae7c7b4f564a9423a6..e49b58b0eebfcb5d6bd65d49d8798ef97c8e87b6 100644 GIT binary patch delta 32 mcmZokXi3=MEGukmprc@BU{b52P;F@hWSdwTZ4Q%NCjhv>fq{WzVxb5p6OaJ{OcMjF8JQ;PNU8HO`~2M-5h`^LiW%#-;=6a_&BDgbc; M5QD*HN0GzK06q;F1poj5 delta 75 zcmZoMXfc=|&Zs)EP?(W%VviIT0}}%TFis4x-uOVBed2@A&FmZk9E_?PFMem9%rBxS T$Ou%C08<8}8#X(N9A*XpmH-e& diff --git a/templates/crm/leads/lead_list.html b/templates/crm/leads/lead_list.html index 62dc71a6..e3367738 100644 --- a/templates/crm/leads/lead_list.html +++ b/templates/crm/leads/lead_list.html @@ -119,11 +119,11 @@ - {{ lead.email }} - {{ lead.phone_number }} + {{ lead.customer.email }} + {{ lead.customer.phone_number }} {{ lead.source|upper }} {{ lead.channel|upper }} {{ lead.created|date }} diff --git a/templates/crm/opportunities/.DS_Store b/templates/crm/opportunities/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..56de271b03da984b434661a8aec4754a06c08e89 GIT binary patch literal 6148 zcmeHKK~BRk5S%R)D&o=$0wE#%f=c`#ROP^#2LNp;ASF#z(nD`KBJmi0z`r=btZk|` z#T=19yVZK^jdx;Cs%#8E`it=y&;`(;E4KF7d}DfDeal)gvP%@tF-L_3rg$Wp{RIW| z*`1=qjK31=&u@uqj2N3@!sj_h!SNV($mtcmhX-PT{4y^`!@L}lN&iOY^xlUz_JG4A zyRucdC3~J^du^~CB-ti@{Y8pNP8v+dNv51Ddg98Q-~SBDB-_Fa +
+
+ + +
+ {{ form.staff.errors }} +
+ +
diff --git a/templates/crm/opportunities/opportunity_list copy.html b/templates/crm/opportunities/opportunity_list copy.html new file mode 100644 index 00000000..539cc23c --- /dev/null +++ b/templates/crm/opportunities/opportunity_list copy.html @@ -0,0 +1,504 @@ +{% extends 'base.html' %} +{% load i18n static %} + +{% block content %} + + +
+

{{ _("Opportunities") }}

+ +
+ +
+
+ {% for opportunity in opportunities %} +
+
+
+
{{ opportunity.car.id_car_make.get_local_name }} - {{ opportunity.car.id_car_model.get_local_name }} - {{ opportunity.car.year }}
+
+
+ + +
+
+
+
+
+
+
+ +
+
+ +
+
+ +

{{ opportunity.created|date }} . {{ opportunity.created|time}}

+
+
+
+ {{ _("View") }} +

{{ opportunity.get_stage_display }}

+

{{ opportunity.car.finances.total }}

+
+
+
+

{{ opportunity.customer.get_full_name }}

+
+
+

{{ opportunity.staff.name }}

+
+
+
+
{{ opportunity.get_stage_display }}{{ opportunity.get_status_display }}
+ + + + + + + + + + + + + + + + + + + + + + +
{{ _("Details") }}:
+
+

{{ _("Expected Revenue")}}

+
+
: +

{{ opportunity.car.finances.total }}

+
+
+

{{ _("Contact") }}

+
+
: +

+
+
+

{{ _("Closing Date")}}

+
+
: +

{{ opportunity.closing_date }}

+
+

{{ _("Probability") }}: %

+
+ {% if opportunity.probability >= 25 and opportunity.probability < 49 %} +
+ {{ opportunity.probability }} +
+ {% elif opportunity.probability >= 50 and opportunity.probability <= 74 %} +
+ {{ opportunity.probability }} +
+ {% elif opportunity.probability >= 75 and opportunity.probability <= 100 %} +
+ {{ opportunity.probability }} +
+ {% endif %} +
+ +
+
+
+
+
+
+
+ + +{% endfor %} +
+
+ +{% endblock %} + + + diff --git a/templates/crm/opportunities/opportunity_list.html b/templates/crm/opportunities/opportunity_list.html index 539cc23c..d80c2c7d 100644 --- a/templates/crm/opportunities/opportunity_list.html +++ b/templates/crm/opportunities/opportunity_list.html @@ -4,7 +4,7 @@ {% block content %} -
+

{{ _("Opportunities") }}

@@ -12,34 +12,28 @@
+
+
+
+
+
+ +
-
-
{% for opportunity in opportunities %} -
-
-
-
{{ opportunity.car.id_car_make.get_local_name }} - {{ opportunity.car.id_car_model.get_local_name }} - {{ opportunity.car.year }}
-
-
- - -
-
-
-
-
+ + + +
+
{{ opportunity.car.id_car_make.get_local_name }} - {{ opportunity.car.id_car_model.get_local_name }} - {{ opportunity.car.year }}
@@ -64,7 +58,7 @@

{{ opportunity.staff.name }}

-
+
{{ opportunity.get_stage_display }}{{ opportunity.get_status_display }}
@@ -123,381 +117,17 @@ {% endif %} - - - - - - - {% endfor %} - + + + + - + {% endblock %} diff --git a/templates/customers/customer_form.html b/templates/customers/customer_form.html index d7722c12..84dc23dc 100644 --- a/templates/customers/customer_form.html +++ b/templates/customers/customer_form.html @@ -22,27 +22,27 @@
-
+ {% csrf_token %}
- + - {{ form.first_name.errors }} +
{{ form.first_name.errors|striptags }}
- + - {{ form.middle_name.errors }} +
{{ form.middle_name.errors }}
- + - {{ form.last_name.errors }} +
{{ form.last_name.errors }}
@@ -76,25 +76,18 @@
- + {{ form.email.errors }}
- + {{ form.national_id.errors }}
-
-
- - - {{ form.country.errors }} -
-
@@ -103,7 +96,7 @@ {{ form.phone_number.errors }}
-
+
@@ -112,10 +105,11 @@
diff --git a/templates/index.html b/templates/index.html index 5c32c2fa..de10ff4f 100644 --- a/templates/index.html +++ b/templates/index.html @@ -86,11 +86,11 @@

{% trans "Profits"|upper %}

-

{{ total_profit }} {% trans 'SAR' %}

+

{{ total_profit|floatformat }} {% trans 'SAR' %}

-

{{ total_selling_price }} {% trans 'SAR' %}

+

{{ total_selling_price|floatformat }} {% trans 'SAR' %}

diff --git a/templates/inventory/car_form.html b/templates/inventory/car_form.html index 00a4f77a..5cc20970 100644 --- a/templates/inventory/car_form.html +++ b/templates/inventory/car_form.html @@ -6,9 +6,7 @@ height: auto; margin: 0 auto; } - .modal-dialog { - max-width: 95%; - } + {% include 'partials/form_errors.html' %} @@ -22,15 +20,23 @@
+
+

{% trans 'Add Car' %}

-
-
+
+
- -
+
+
+
+ + +
+
+
-
- {% if form.vin.errors %} -
- {{ form.vin.errors|striptags }} -
- {% endif %}
-
-
- -
-
-
- - - - {% if form.year.errors %} -
- {{ form.year.errors|striptags }} -
- {% endif %} -
-
-
- -
-
-
-
- - - {{ form.id_car_make|add_class:"form-select form-select-sm" }} -
-
-
+
+
+
+ + + +
+
+
- -
-
-
- - - -
+
+ + +
+
-
-
+
+
+
+ + {{ form.id_car_make|add_class:"form-select form-select-sm" }} + +
+
+
+
- -
-
-
- - - -
-
-
- - -
-
-
- + + +
+
+
+ +
+
+
+ + + +
+
+
+
+
+
+
+ +
-
-
+ +
+
+
+
-
+
-
- +
{{ form.vendor|add_class:"form-select form-select-sm" }} +
{% if form.vendor.errors %}
@@ -173,13 +155,17 @@
-
+
-
-
+
- - {{ form.mileage|add_class:"form-control form-control-sm" }} {% if form.mileage.errors %} +
+ {{ form.mileage|add_class:"form-control form-control-sm" }} + +
+ {% if form.mileage.errors %}
{{ form.mileage.errors|striptags }}
@@ -204,33 +191,37 @@
-
-
-
-
- - {{ form.receiving_date|add_class:"form-control form-control-sm" }} - {% if form.receiving_date.errors %} -
- {{ form.receiving_date.errors|striptags }} -
- {% endif %} -
-
-
+
+
+
+
+ {{ form.receiving_date|add_class:"form-control form-control-sm" }} +
+ {% if form.receiving_date.errors %} +
+ {{ form.receiving_date.errors|striptags }} +
+ {% endif %} + +
+
+
-
+
-
-
+ +
-
-
- -
-
+ +
+
- -
+ {% if car.colors.exists %} {% for service in services %} - - + +
{{ car.vin }}{{ car.vin }} {{ car.year }} diff --git a/templates/items/service/service_list.html b/templates/items/service/service_list.html index fd2911ac..0634ad41 100644 --- a/templates/items/service/service_list.html +++ b/templates/items/service/service_list.html @@ -27,8 +27,8 @@
{{ service.item.item_number }}{{ service.name }}{{ service.pk }}{{ service.get_local_name }} {{ service.uom }} {% if service.taxable %} diff --git a/templates/sales/invoices/invoice_list.html b/templates/sales/invoices/invoice_list.html index 3be50fc9..cada23a5 100644 --- a/templates/sales/invoices/invoice_list.html +++ b/templates/sales/invoices/invoice_list.html @@ -4,12 +4,15 @@ {% block title %}{{ _("Invoices") }}{% endblock title %} {% block content %} +
+
+

{% trans "Invoices" %}

-
+
-
- +
+
@@ -76,4 +79,7 @@ + + + {% endblock %} \ No newline at end of file
{% trans "Invoice Number" %}