From 06678463138996256029693da54b31e3f9df7879 Mon Sep 17 00:00:00 2001
From: ant1019 <ant1019@uab.edu>
Date: Thu, 6 Apr 2023 18:39:20 -0500
Subject: [PATCH] Database Updates

---
 CS_499_backend.py                          |   4 +-
 CS_499_database.py                         | 116 +++++++++++----------
 __pycache__/CS_499_backend.cpython-311.pyc | Bin 0 -> 18926 bytes
 3 files changed, 64 insertions(+), 56 deletions(-)
 create mode 100644 __pycache__/CS_499_backend.cpython-311.pyc

diff --git a/CS_499_backend.py b/CS_499_backend.py
index 8bc535c..5fd6da3 100644
--- a/CS_499_backend.py
+++ b/CS_499_backend.py
@@ -244,7 +244,7 @@ print( "MAR APP1 water used : ",monthly_water_usg_MAR )
 
 # weather api to get temp from history
 # Used this to help me understand and gather API.data: https://pypi.org/project/requests/ and https://realpython.com/api-integration-in-python/
-class Temprature_data:
+class Temperature_data:
     def __init__(self,temp_power,temp_cost):
         self.temp_power=temp_power
         self.temp_cost=temp_cost
@@ -285,7 +285,7 @@ for i in range(0,len(daily_arr)):
     min_op=sum*60+(d_t+w_t)
     watts_per_day=(min_op)*3500
     ct_per_day=((watts_per_day/1000)*0.12)/100
-    App3_History[time_stamp4]=Temprature_data(watts_per_day,ct_per_day)
+    App3_History[time_stamp4]=Temperature_data(watts_per_day,ct_per_day)
     time_stamp4+=1
     #print(ct_per_day)
     #print(watts_per_day)
diff --git a/CS_499_database.py b/CS_499_database.py
index 8077389..caec14b 100644
--- a/CS_499_database.py
+++ b/CS_499_database.py
@@ -1,18 +1,19 @@
 import psycopg2
 
 # import CS_499_backend
-from CS_499_backend import Door_Window, Appliance_1, Appliance_with_Water, Temperature_data
+from CS_499_backend import Door_Window, Appliance_1, Appliance_with_Water, Temperature_data, Door_Window_History, App1_History, App2_History, App3_History, time_stamp, time_stamp2, time_stamp3, time_stamp4
 
 # create a new database
 conn = psycopg2.connect(database="Team3DB", user="Team3", password="team3", host="138.26.48.83", port="5432")
 cur = conn.cursor()
-cur.execute("CREATE DATABASE Team3 ")
+#cur.execute("CREATE DATABASE Team3 ")
 conn.close()
 
 # create a new table for Door_Window_History
 conn = psycopg2.connect(database="Team3DB", user="Team3", password="team3", host="138.26.48.83", port="5432")
 cur = conn.cursor()
 cur.execute("""
+    DROP TABLE IF EXISTS Door_Window_History;
     CREATE TABLE Door_Window_History (
         id SERIAL PRIMARY KEY, 
         day VARCHAR(255), 
@@ -25,75 +26,74 @@ cur.execute("""
 
 conn.commit()
 
-# insert the data into the Door_Window_History table
+#insert the data into the Door_Window_History table
 for i in Door_Window_History:
-    cur.execute("""
-        INSERT INTO Door_Window_History (
-            day, door_status, door_time, window_status, window_time) 
+    for time_stamp, data in Door_Window_History.items():
+        cur.execute("""
+            INSERT INTO Door_Window_History (
+                day, door_status, door_time, window_status, window_time) 
             VALUES (%s, %s, %s, %s, %s);
         """, (
-            Door_Window_History[i].day, Door_Window_History[i].Door_status, Door_Window_History[i].Door_time,
-            Door_Window_History[i].Window_status, Door_Window_History[i].Window_time
+            data.day, data.Door_status, data.Door_time,
+            data.Window_status, data.Window_time
         ))
-    
 conn.commit()
 
 # create a new table for App1_History
 conn = psycopg2.connect(database="Team3DB", user="Team3", password="team3", host="138.26.48.83", port="5432")
+cur = conn.cursor()
 cur.execute("""
-    CREATE TABLE App1_History (
-        id SERIAL PRIMARY KEY,
+    DROP TABLE IF EXISTS Appliance_1_History;
+    CREATE TABLE Appliance_1_History (
+        id SERIAL PRIMARY KEY, 
         day VARCHAR(255), 
-        micro_pwr FLOAT,
+        micro_pwr FLOAT, 
         stove_pwr FLOAT, 
         oven_pwr FLOAT, 
         Lrtv_pwr FLOAT, 
         Brtv_pwr FLOAT, 
         fridge_pwr FLOAT, 
-        lights_pwr FLOAT, 
         micro_ct FLOAT, 
         stove_ct FLOAT, 
         oven_ct FLOAT, 
         Lrtv_ct FLOAT, 
         Brtv_ct FLOAT, 
-        fridge_ct FLOAT, 
+        fridge_ct FLOAT,
+        lights_pwr FLOAT,
         lights_ct FLOAT
         );
     """)
 
-conn.commit()
-
-# insert the data into the App1_History table
-for i in App1_History:
+for time_stamp2, data in App1_History.items():
     cur.execute("""
-    INSERT INTO App1_History (
-        day, micro_pwr, stove_pwr, oven_pwr, Lrtv_pwr, Brtv_pwr,
-        fridge_pwr, lights_pwr, micro_ct, stove_ct, oven_ct, Lrtv_ct,
-        Brtv_ct, fridge_ct, lights_ct
-        ) 
+        INSERT INTO Appliance_1_History (
+            day, micro_pwr, stove_pwr, oven_pwr, Lrtv_pwr, Brtv_pwr, fridge_pwr,
+            micro_ct, stove_ct, oven_ct, Lrtv_ct, Brtv_ct, fridge_ct, lights_pwr, lights_ct) 
         VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s);
-    """, (
-        App1_History[i].day, App1_History[i].micro_pwr, App1_History[i].stove_pwr,
-        App1_History[i].oven_pwr, App1_History[i].Lrtv_pwr, App1_History[i].Brtv_pwr,
-        App1_History[i].fridge_pwr, App1_History[i].lights_pwr, App1_History[i].micro_ct,
-        App1_History[i].stove_ct, App1_History[i].oven_ct, App1_History[i].Lrtv_ct, 
-        App1_History[i].Brtv_ct, App1_History[i].fridge_ct, App1_History[i].lights_ct
-    ))
+        """, (
+            data.day, data.micro_pwr, data.stove_pwr, data.oven_pwr, data.Lrtv_pwr, data.Brtv_pwr,
+            data.fridge_pwr, data.micro_ct, data.stove_ct, data.oven_ct, data.Lrtv_ct, data.Brtv_ct,
+            data.fridge_ct, data.lights_pwr, data.lights_ct
+        ))
+conn.commit()
+
 
 
 # create a new table for appliance_with_water
 conn = psycopg2.connect(database="Team3DB", user="Team3", password="team3", host="138.26.48.83", port="5432")
+cur = conn.cursor()
 cur.execute("""
+    DROP TABLE IF EXISTS appliance_with_water;
     CREATE TABLE appliance_with_water (
-        id SERIAL PRIMARY KEY,
-        day TEXT,
-        water_heat_pwr FLOAT,
-        dishwasher_pwr FLOAT,
-        clothes_wash_pwr FLOAT,
-        clothes_dry_pwr FLOAT,
-        bath_fans_pwr FLOAT,
-        water_heat_ug FLOAT,
-        bath_water_ug FLOAT,
+       id SERIAL PRIMARY KEY,
+       day TEXT,
+       water_heat_pwr FLOAT,
+       dishwasher_pwr FLOAT,
+       clothes_wash_pwr FLOAT,
+       clothes_dry_pwr FLOAT,
+       bath_fans_pwr FLOAT,
+       water_heat_ug FLOAT,
+       bath_water_ug FLOAT,
         shower_water_ug FLOAT,
         dishwasher_ug FLOAT,
         clothes_wash_ug FLOAT,
@@ -105,50 +105,58 @@ cur.execute("""
         water_ct FLOAT,
         bath INT,
         shower INT
-    );
+  );
 """)
+conn.commit()
 
 # insert data into the App2_History table
-for timestamp, data in App2_History.items():
-    cur.execute("""
+for time_stamp3, data in App2_History.items():
+   cur = conn.cursor()
+   cur.execute("""
         INSERT INTO appliance_with_water (
-            day, water_heat_pwr, dishwasher_pwr, clothes_wash_pwr,
-            clothes_dry_pwr, bath_fans_pwr, water_heat_ug, bath_water_ug,
-            shower_water_ug, dishwasher_ug, clothes_wash_ug, water_heat_ct,
-            dishwasher_ct, clothes_wash_ct, clothes_dry_ct, bath_fans_ct,
-            water_ct, bath, shower
-        )
+           day, water_heat_pwr, dishwasher_pwr, clothes_wash_pwr,
+           clothes_dry_pwr, bath_fans_pwr, water_heat_ug, bath_water_ug,
+           shower_water_ug, dishwasher_ug, clothes_wash_ug, water_heat_ct,
+           dishwasher_ct, clothes_wash_ct, clothes_dry_ct, bath_fans_ct,
+           water_ct, bath, shower
+       )
         VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s);
     """, (
         data.day, data.Water_Heat_pwr, data.DishWasher_pwr, data.Clothes_Wash_pwr,
         data.Clothes_dry_pwr, data.bath_fans_pwr, data.Water_Heat_ug, data.Bath_water_ug,
         data.Shower_water_ug, data.DishWasher_ug, data.Clothes_Wash_ug, data.Water_Heat_ct,
         data.DishWasher_ct, data.Clothes_Wash_ct, data.Clothes_dry_ct, data.bath_fans_ct,
-        data.Water_ct, data.bath, data.shower
-    ))
+       data.Water_ct, data.bath, data.shower
+   ))
+   conn.commit()
 
 # create a new table for Temperature_data
 conn = psycopg2.connect(database="Team3DB", user="Team3", password="team3", host="138.26.48.83", port="5432")
+cur = conn.cursor()
 cur.execute("""
+    DROP TABLE IF EXISTS Temperature_data;
     CREATE TABLE Temperature_data (
         id SERIAL PRIMARY KEY,
         temp_power FLOAT,
         temp_cost FLOAT
     );
 """)
+conn.commit()
 
 # insert data into the App3_History Table
-for i in App3_Histroy:
+for time_stamp4, data in App3_History.items():
+    cur = conn.cursor()
     cur.execute("""
         INSERT INTO temperature_data (
-            temp_power, temp_cost
+           temp_power, temp_cost
         )
         VALUES (%s, %s);
     """, (
-        App3_History[i].temp_power, App3_History[i].temp_cost
+        data.temp_power, data.temp_cost
     ))
+    conn.commit()
 
 # Commit changes
-conn.commit()
+#conn.commit()
 cur.close()
 conn.close()
\ No newline at end of file
diff --git a/__pycache__/CS_499_backend.cpython-311.pyc b/__pycache__/CS_499_backend.cpython-311.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..6e24384d334f3233bef3084999ebbd2c80db25cf
GIT binary patch
literal 18926
zcmeG@TToj^mRAozFP;+bhXux9Y=c2ygY7sr24igA2!kzSD}vjAFi2Puc8rOmWIS0p
z!_0_;B+8UOR6DyFQrQoG%!fZxQ~8*!%E#{1y<7J~bw9SewNqQm&V1lXs&;n1_ME<Y
zUdhDCOlBrkx%i&$^XSukyHB5Ux|RGQH&@5N^G;t2`=Fa){u7bdQyQ&&@%svf`G8>=
zR<Xp`q*7s1P+VzK(o$tp(Nb;8QZg49R{4NoRUauC<`a0O$Cf?Mu<E~8*mBq`n?}hH
z?MJ})B*tcJI+n5Nfo@<KqDgJr%UpkG%awR+b{cQZmPhi~oSRgaXFtd>i}^9dtcKO5
zwy+h*By?<!Orp?LCzH{$2APapOE#M;lPDwwY~ETH!?5{ldWNwTkwUg02{%F?*(8VL
zmB$9lkOBfy#P|`k`UGC-Av&Ue393ZT>eg~WlYZmg#@j>(^Ky~Si;3idOm0HYVsTR2
zWO~VS=&{viWO~Y;BOmYTqih%{ywam!HZD;MC<F^AlFdg2e6M`fD_Nbb3Rb=vco|nd
zsJQ-%=dV3*--p$&W{q@Ss*~(sUbccJwpccv8ks~1Ym!OqlS!1aWikn~Oro5vkV(|a
zBr4e|nS|Wds@WQu#D3SDOpBf^mC4AzrkLF)laPOnnXQ#c$iJqJ-7k}ne@#7mKqevo
zng+H}Cb6H?NIQZ(h`Yg7PxeLeCW;>*<|uwBX}2_x+9>rfm1-n)QM{7k2f+&HK4Xti
zyoty?K{MNuIua^(h}5%3aeuO{h_jV+uO21`GEk3@h78nZ(wKqTLJnr29wki~sIBBs
z25K9ud4<eB)RP0Gfi#kXq=_6NhshDrOj^iM(n{Js0-yIu-0zV}Qbm16Rn%ux1r-}1
zct3{SW`VaI-VS(=!FwFuPUy|Vwtb`kE%3(nGpX!lg39Y&TQ13EEjKC0^Eqh;{mFi%
zE7n3rKM|v^K}E(pxd-pm9z6Uk`ee{~dJo>q$vo;W+KELrrZX`a8U1XGo}o{OoYIql
zcWw_}&mO$qJ$UDndGtFhur}>C)kydJ2I~3obvh>dj_>9=9U~pG@Az)6QwOX~M|7P&
zC!Mly`fjdGCpj+rj_>B$91kitR;dp>Cij7qdYrVUMh^u;>7C?QMtT?N%t$|xQTs_^
z$tZn_bY!HzM2@G^A@e>BdDqLS99tiZQ=WHS0FU1f^ylSVZ_%79IgdV*mL*?=_Ipb}
zE{Hv(=j@QTS@+D^&$4G^Uojx-EnQ+TEo(o+Hh+bdbcsPWj||YvV2CXygS0lxc9ToA
zHo~4G7in!2#-msqi}_+Q#P%RPb#-myGO6K=QdXJN2-}-M*8~|SRvKd_5ZW%2%WN|p
z%OshM=04{sK1D7jpETG$O1(lZC7(yw3zT|QM(w9m8yQH^K+iF@Yh)@zo-$3YWT0Lr
zS2Iv=5L*VSom|U6eT58>Vfwuz6pqrbb`S@9k>+SKWQLViWftbIPnIc7kt^gXv5{-!
zGU_3tWQ0tU>*NNplUK+r86bln86nq!S9-_=(oZv{{%FS3582XXcmuFkSa=D%bMVf?
zy8y2f-bHwC!n*_`FtG!vtFK_l1)4qmJeoa$eL#ec5ElAM&YqT|Ljd^{x+_Mf-=E5J
z@4>V0!CTpbcPp7kGYggw*_b>r85!Lhqh}baZx5br58i4rkB*0sIa$BAV=^-OoftjC
zcwXIucQ=_w`<zS4uKqnKyNZx`S)YHq>o`vqWMlp7uHyo6%Et5UucI?5`-+f7S^s~#
zYqv;l%EtQFUAvoPNj9Euf9;kaJNrlKW1p9uk<>^Z&(0Py(!0pbjP&PaXKY64Q)E6P
z{Ux%Pkv=Go5A=(M$XrJ0VdBh4A0bQWbjbZiA@>_g<=EDs2j$|um``KJQ%7K1C+mx^
z#kjWnAgx+_J%*F}GHE~Yv)1_4A7guiyunT+;cr5Fd8YXTh>j0{p0)VHxZXF}%d&C4
z1rm@c0{lDjR%)-Ql5pqwYlx<ACC5pKv#GbA@!L#WK*os=*7gv_^)|deO71yXYw9Q<
zCxE;1w6SzT7Mn5_xPjDR#EEyr*f!)6NxUDEACryfi7*T6*o*CLN~P1~$s!x%$CUb`
zjV|&w`4MV|F(+r<XW7Zrk<lFPC*&uP6++HI0^}jK!q@gw@>5p2XA6>GhOBE7bgz*h
z*-X_)en1}3?C3!>J9@D3&oF!M!22$|TkyUI@B8q602)l}RO<Y}8vOv)ZY|{=$xPk_
zy~&wSh<-GV74Ny<CGW`iAExl%0grBp&Rzr5uSD-X%;Y^;yHvgJku4cNRqqznCEcf(
z$@_cCzE3`o@l*TyVB;R0kLUTVcT?v%?zi5{Nbe#aWTZdOZ@rUI`V`s9NPmgEpOJo5
zzLxZhY_K{k+7z)M%-Hf8%=A2!>3FWpG|aFhbNsn7*TGT<)zki5nH#X`3smOVb7kzX
zS~saoXC@g|VP%?L*+C;4o<$gYVmG2+n1J#D>^}Sj41WDmJYe9rFD0~6iTYl*+hd<{
zx>)y}+4xT)Adf$Sso?!$kTzadtTXWpomp1`7E{lxs{o7tXtu5f3|rD?Jqs{ul!&s7
zmHAjP+>|A%SjXLH=U$(~x9SzObR<6KG7)p7@z|preH2ArQ?{t~lBGFM4yf~J5NHwL
zZ-O4U5NEvj5oY@Q@uk_5)0e%(<DKqy`4-%+yVLVd-*k_)yW_+O`>4mgNM?Q0v)*Pv
zfoezUjAQmDaj`8ccSVie?sPeQcKezsX_8uER0DR_0>IBi3QYm^h9**8A5aULvPh{J
z(7Z_HK}0KJWKL5C|Gt10%<#u*RPS;u6T4m1+3m}2c6ABs2D|;%s$)swc=AB@W5$CQ
z<R0)Xj0b0u0{mX@egOXX->y0<>%cCP4y5+jv?)i-9&)>I?sFzqi5Dx{DZ;v>s%Bzg
z)kBHdeI6$=HC9*~57x4+tJrP_=XeJve+LhSJ2=7}{DE!<&0(hkK|KPTo}C&5=z({d
z0epSq>|R+}ayneI#NIYr02*RX+&CjZ`GEQJ80UI6m?}N(VmIqKfW<e&x)w0}YWl3}
z07Ki8Fg;*sgc4=|3|B|Oask6BldwF%aAG7(0~oHVgyjQ<vq>M^C?4#+DW6)ps9ko>
zdffJvJ04N%^|@~oTGc?sCDjH!zS~mmT&$*>gGHQ=N=of#eWFHc4z(QG8Y{FhR%lzO
zXroP`s#|i-FZjGt*U|c{uc^R;A0lnT!&p0l0GHW=o5FJxK`Vkz1Z@Z`2-*>JAUKBL
zID#$!UR+>l<0hbF^*AkSrX*vCZ$j+Pi?<4iO&HyL(W0aVwqkB1wJ56tV!n)6Tm?i!
zB(;cYi8he1Kwcn^ZmD4p4%vg=HED}BA&LNJC2fo5XVva9=|F0at(;*n!JQ(g?O@8a
zg9fs55CP8K&VK=LUV^>0!y@`C1n35Kx)Gp)9h}jf9sthAAm{ua6#frHi?N2Qv4fu6
zIS3xX`A?wV83qUAT!&4y^FDHc&g`IhJO5k7F!N7pe)zkwC%-zgwz>ZsJ!bR7$VB&`
zxqEc9&D?*{Ix#YS)!a8SZtm<fn|r&jTFvHfq<6nrx3dq2YDR!RqOF~<o14vv*F5UJ
zLp<hHFJaAdZjYHbW*5xh|9lJPBq?m6TPwNba7jbF<M8>sQlpdRwUWN`=Q7fVy2mro
zyAs`_Vsnq%>wB>g6vsy}8*c*xD2@*xl^pLsnf$d~Y|^f}<Mb`qryM@wnMIS1J#k-K
z0Os>&^R?(*6TTMxX~Nf{KTY^r^rs15i~dv_8`?Vh(}b@@51R0`=*<(pwg52PO7vMr
z&l~r()VE`Zm3W1~i^rPvBESmcJR@MZHR+S^(MHKf=h4Zt_Y;SYdds|Cr*~n>;awme
ziWl@OxqS=73zO_!pp^U=h4tK}gxn+*tMg)Rk_JHI;#2|hlf=PQCyN7`Dh`Ca<nB;@
z#sNz{=Wt2h-H<?$c@CL(&>rmAw{-zGQ-Yw8`UXigwiC0xRG`U}6d1-~qC8dv69_IN
zxQ<{F0eT_ND+s0#TtRRZfepbm1k(s^AaEd<L4Y>yMGH-Yi9{_aU{ogpM#8k?kt2Xw
zeg+^BIjRm}zE&BDl{GDhS4XOkU|AK<=VE!?SJ7j7V)7LYsHZ%xC)Pe1oQg^y0BIwp
z3Mlje_}e4MjKaV@2;Rca*iSzrmI>~vjaikuOgfN)47S<<zs~I7&fdX^+`+v!|F8do
z&u`Dnx6|i$XPjGL`A!XNMdz2W_nl8*bIt#L4C6ud*?IH7x$QZ>`S8qI@EdyXL|CxM
z!@{2y71mD4eDDRw(vsU1_32+L5X7Q~JP;()<Bpi_l~~~T+Mc*zf-J8P59Zs%&N_UK
zSzM&p6ZgV(K-t?1C;XC9)cHWEeFb-}sHJs`7ELN?kKP1bo+SWY><Ttf((Wmj4=28J
z{(ue8Y+&bnoy5oqO*{zx7ZvQM3gR}aRAOS34kVk!R%^dr@cCA}CyyR=cxD%zw@I^O
z#o6LsA+F|S;v?>sS@-hM+ifxKnI(tM>04#V>Gt-PW0nRm066?1-rRM(rK`084woJu
zPBb}fX|=RBx3<B*1~~gA)7qQcEDa0pRnOAh(>Q&x^|35B;AwQt?INeUmx;$Y>o{QP
z>sf$u-rbNaxe7<f({qjm4{^co2R<=d(kA953t5(ThTs!-Fw*>~`)T6*(CD9cKkeXu
z*tGWZZ??_<f~_EnD}o$q)#15oo^bmdOJ+3owW2;UBc~M%p%EoZ8B<$AaPxWBjHyi}
zVqtPyN^1I<nC)@E70R-xUdC9c@sL|^y!LrT^`h7960=;Z%W$Khbgj_CyQrBO86TKB
ze||vJ4qqO!W6dh6StkTjW71uNz26CkHP2nx#$arC9kRS4W<gK$L{vCM#iE#l-8x-x
zN@MXJ2X}*4)Zd}kITRBOl(Fn|t@?;p%!{&Oc-D#sT0i$Pg`Q(X0|e5x_*nFbu~<ZU
zPXMFQ4&m|ij^j2Fv#fYL71bkfG!=6PowuE?dArB$UY?i~wdV*Mt!7I{Nl{N{&`yu1
zF@&B_MV-XKLu#y!=hRpokE)_UlEK>w7)2Btqz6_}*8{5`RV>vdy;@4AYNaaGDpjdc
zJr#)Rl#u9P3zzZmuyogshSg@j)IBT~#Yoi2N;H`mB=BisNRx>{97z)cng`F3fAZ;?
zCJS^WEtyubUChT+6S6y+t$J2nVo}eMZ^26`c1%x^rpBBQu7YT$C+ZRzqG(7?4@G^f
zEhLX(VY22sm`{r8S>jw0HMISL8>~0l8tagx#`{HF+wb;CS*Ms6uiDWF#oPpr7b7X3
zfP{F$jh}`2HO)YynQdP@?M-Nb{YR7b*gOCpPok-gSszVFMFSl=RRJ<+!;l(NpF_<P
zkUm1-yCeo$OX_M{GT4qpD~{O{ohkdOcb<x-*owuTZc-90L+dn4v)I!uO`>IJjRq*o
z$!R7|b8=aFPc!>WNj-*dQ8f<}V(<{}3Z!Dh-aUFzRQt%QaD2dIN6cDsJ6Nx%TXA@R
zi@{OUOQF)fvbwY+YSBANRrE*gnXI@&)H^&L$6dP@t_{I*Scen#Dv(6g5;zeRYxjw&
zI{-ASb8Zf9cW0wDmduJd;G^v>7>^1nqRI;(8{8y#Q85?R0&l=zS@9}VhXaY$jj`pz
z5!-=*KA|LqC^bfUnlP?SCSjzf3FE3|62>KpXL7RJs6T36lCG9t_WTwW0kU|;`|}cp
z*;OeNirs8Rk>}6FzX+rE)4vFl@27uBlp>Ca{@cyYQNR^*I(UY(FB1$CqZ?On+A;X&
z*F<y%Kb&jIg1wu4TYVg3e5yD2brEe|pg3?VSk7xJ1uYy{ausD1_`4&yMS;t~w&2)9
z+lFnIF=PP)KmbQ<$PL_j`&i&uq`Way@~CE8xozRgTZHnKz@->Tv0clT9}&ur1O@^F
zPxq3m<I9_c^5(!mq_j3%xA|IloG)z*7~sY}JoDkc?IOPXa3C*o=-Bq*#|uwx{qp8#
zCqG~3t}k$lukwfP3Wx4;n##~6Ueg%S6a^g*^8>noZnqqVTgB+AcNvAkr<5RklUnOP
zAE@OF`@#yrP$w7~xW<!D+Jwf_LgPj5(sk~JUAXj$aA}ddd4HE-&MLc=Uoy;+;+#~B
zf+A*2$znm2b4VOh&P#<?`HW$*e24%9fdo_+Dj=;+2hWi9WrESb<P`-b9!_pd`VA37
zu3sO?(fG5|mT14C{22ovZHel#fB_(&h-mVH^$+s`*%7@VF!pwPpgmGjADr8Ag~zv*
ze92*<<Z$3(q{tj>*lGzEh0pOtjY3gl;C!TTU$A7WCaerw_`(LEup!VJsW=#Fc+|3O
z+_v%+Z9+v`U?`@`x^3i3nuU^P&}FO*9^ZO7TnCG1JSZ3s2KoYhPygb5f@zlQ3wbuD
z!yUY-F`$nWSA;B^S3<tc5kO33p`y(Tp@~fxCvU6|=prUCINnqrp5={Ah*pPYHV4D|
zdE)`VN~%KRo6fLt(+<W6$c@nCqZ`}Z+YY|ERj6*|OIiblr^V*5i7!47_VK2}Fhj;x
zXqbs+s=+~oC!nM4cD|@30DJL;NF{afEhUZH&`a~Smp579Ly~EaRlKPkX!S?K1CKRN
z3V*48GVr;co4CQ*o!p`i4DmLYFBCn>5iCaGf4zg^nv!5Kr*vbnqP&a6nzBa)MXzcE
zi&51z71;EFX%*Nsz<?omjn~vhG{)d9UQ-s(Kh!@vuK;`7?N=~H6UP)r5Eey>j2Y`s
znJj-6=*_u?TSYOATLmCc07kUMyNp&b1wA4J+s@Gh>fT)SuSPT#p{4D%M{c2}^U0CV
zZhd-GIBDf;tlZ=bH_Hl>M3{8(H7@SfYux?UL8V7QH?2o;3A@>M2|E~4Ud6(uyoQ|)
zDQVwBFa;<<Ct^WKH|?tOHcBig??}ZtoPmAkq*)ooVoWuT^U<raO2rK-L811Bii2Mo
zHRYk{?b=6nq59Yp!)Ifk<_le;eDx@2wR5jH1nZ1oUF545x#hdu+C5=;9hA8g=W!%8
z=W&qz$_XqkD<^RX{mLn+uu};;vSySnEZoW!WX&jVNyR-XaSvJdm6vd=1FAtB<bCCk
zRN(9~H56*6V65dh$whDa{Jx+fXn7|qnDzZ+(>eckC;R(J{`MyM|EQPYa(Z~CS73TM
zrZ<9ahs)W=nJqliAut^r)A2QF=Xj<^V0t*FC)%)v+t<o77J;#FjO9gXyM|%~WLW9o
z8PdK?Fj~^`0C|?ytSEiP001{>stfjQ4TsypV-WEKQ=@+*QhFeGd+UDKv8~`s4+*7*
zICY6EnLCsP?Eyfh5Kj=Ip<fZM<qPYD!g>h((V$)%?&ggRg0X=H^%s(ZKx`@rvYVY4
z4ogGXn^z%*no79RCf?Kp(W;^{G{RRL1{Va9MU_F*R(a@TnEmh!UwBw3JRHzOj8(yo
ztrOr$>-p*y-gs0n9tB;c=AduuZn$!Lg0F4kOD#gFC6M>jhzX#vA$*@V9)rMIY7Q4}
z-V5Y`>avFL3}1Q>l$5jtaw8Q@+jV@!k?k42y!CNCUv@l@AE|5xw6gUvFghO3^5rMs
zzYmFk%s5|h^f4r#?T;t;vJ)U!2Km5;IpLzsbx3kb8Uwkg{{V#a(xz<)(MKN}`Qi@D
zTMt68E^prU@n!9gt$b-0WUm#6Km_yw<Je;_Uv?7oWs)ncPtymz6z>bIV}3Efn>x9!
zi@fO~Ora6d2i~|JCdF7CdKI#+fbMC17gyi)r0lcWPb)vW&RHQqdLay~Dta*}oL7!x
zVTI@i#dSzrp@_%5J`5NaAh@B3%8tb=Di;=R)qN~pR}HD57*^Y`xTYpp%&8Z#xT(IS
zhR|}rqlTRgFez0SgESN~h06-Cx7{nLnL<e^#}udJ3(up(at9j*IRy>l0HJGuG<Ps4
z9Kb@Dk~@@#2Db|zjR;jIo(z6o`00r7(pA3dDmT5rITwZLo5J)xzUm&Rd0jDp+6I+F
z7))PR3`@mz?5_Gcvh2#6SS%@*k!6P%Op7~I;tsObl+j7-$8fu*yeJiu7<H>D)K1c<
z3mHu`Lpb$h`t#aP?ZWA6eDyW%2An&Vgd5Akjr)8x9zf11hf(o}auho|ryP?C{8FaI
zfh-o104Q!LJ;-8}Ua9D&k)A?rx0IDshYj0f|Bx@3Pk(0keC*fx!dW|SwsSKs&b=bc
z+!AJ9=gqHwMW3~_XRSlY!7p;@xx@F9{jE<nW|!Yv^tWTtf5W*$G{-p4GkpRBw>N!>
z4CWZmbP7x-$8^3ZZP%c}3yE~_3~65`7<o)VRp8Z)b?^$+v*=L@SafLs;esN^DCCs+
z)e(Jhpkw1?kmdE2g1!>2l=8|#WkOyZTwmylxsnD!*XY;oYSMBVU0I-Rqa{=hR}DH4
zYM?^8e0m*a3>t%1H*2<Pc&%B`nlWiIQUJbPof~jG81xTD;M%8K(9{T;gZ`cbatM(8
z0)M{*qIX!<pcOi5dsM|2HweWI;ahz1K|Z%h$ZgtXva{+bfLy4cJXE`72#tkqeP|U5
zY6CeDLvhftF&HY`7zwB%`n+K2+ouDkBPHdb3!BS<{v=9uScQ~7K(y8s1rPGtiqLSV
z@6qsf8zd4{twL2RuW9x7Jk{p~JP(ft+k@WCPM9%&U&L4*>ey`d4@C+wpcn3k1fT%#
z2=ZI}mm)PSTusaNYfo%^O}|jn?;i|S^6Kh{IzL$W#;||DKd@WC6qmqlUZk{)V@e{X
z;>`8044+!XDLj9lN(r7dv5;|+*PP@uH8{)Bz;&G09EXdy3_;*)G|He)BX9nPs8#o5
zNa&CAOqalPaZFdj^k0aUDWOk09YB)*0yNkg8W+Z6g&RXJK%fAWMwDH_Rkm<P&+?UL
zx$beka-3(Z0%PSE>kIPBxbh=h^UHks%iNh!zI>Et#sp@JW5%NGE4eBQ*M6R_I?wf8
s;j6Cj%vFK8$}v}8kYCPKv~q1dd_@n}JIPl}^30ULOmVS)^q2qt2V3r{@Bjb+

literal 0
HcmV?d00001

-- 
GitLab