From ebaa26378193f361a1bbf4dd802e36f6076be410 Mon Sep 17 00:00:00 2001 From: nuluh Date: Mon, 9 Jun 2025 18:59:51 +0700 Subject: [PATCH 01/14] chore(convert): comment out create_damage_files obsolete function --- data/QUGS/convert.py | 108 +++++++++++++++++++++---------------------- 1 file changed, 54 insertions(+), 54 deletions(-) diff --git a/data/QUGS/convert.py b/data/QUGS/convert.py index 95f1073..d1a686e 100644 --- a/data/QUGS/convert.py +++ b/data/QUGS/convert.py @@ -277,66 +277,66 @@ class DataProcessor: ) -def create_damage_files(base_path, output_base, prefix): - # Initialize colorama - init(autoreset=True) +# def create_damage_files(base_path, output_base, prefix): +# # Initialize colorama +# init(autoreset=True) - # Generate column labels based on expected duplication in input files - columns = ["Real"] + [ - f"Real.{i}" for i in range(1, 30) - ] # Explicitly setting column names +# # Generate column labels based on expected duplication in input files +# columns = ["Real"] + [ +# f"Real.{i}" for i in range(1, 30) +# ] # Explicitly setting column names - sensor_end_map = { - 1: "Real.25", - 2: "Real.26", - 3: "Real.27", - 4: "Real.28", - 5: "Real.29", - } +# sensor_end_map = { +# 1: "Real.25", +# 2: "Real.26", +# 3: "Real.27", +# 4: "Real.28", +# 5: "Real.29", +# } - # Define the damage scenarios and the corresponding original file indices - damage_scenarios = { - 1: range(1, 6), # Damage 1 files from zzzAD1.csv to zzzAD5.csv - 2: range(6, 11), # Damage 2 files from zzzAD6.csv to zzzAD10.csv - 3: range(11, 16), # Damage 3 files from zzzAD11.csv to zzzAD15.csvs - 4: range(16, 21), # Damage 4 files from zzzAD16.csv to zzzAD20.csv - 5: range(21, 26), # Damage 5 files from zzzAD21.csv to zzzAD25.csv - 6: range(26, 31), # Damage 6 files from zzzAD26.csv to zzzAD30.csv - } - damage_pad = len(str(len(damage_scenarios))) - test_pad = len(str(30)) +# # Define the damage scenarios and the corresponding original file indices +# damage_scenarios = { +# 1: range(1, 6), # Damage 1 files from zzzAD1.csv to zzzAD5.csv +# 2: range(6, 11), # Damage 2 files from zzzAD6.csv to zzzAD10.csv +# 3: range(11, 16), # Damage 3 files from zzzAD11.csv to zzzAD15.csvs +# 4: range(16, 21), # Damage 4 files from zzzAD16.csv to zzzAD20.csv +# 5: range(21, 26), # Damage 5 files from zzzAD21.csv to zzzAD25.csv +# 6: range(26, 31), # Damage 6 files from zzzAD26.csv to zzzAD30.csv +# } +# damage_pad = len(str(len(damage_scenarios))) +# test_pad = len(str(30)) - for damage, files in damage_scenarios.items(): - for i, file_index in enumerate(files, start=1): - # Load original data file - file_path = os.path.join(base_path, f"zzz{prefix}D{file_index}.TXT") - df = pd.read_csv( - file_path, sep="\t", skiprows=10 - ) # Read with explicit column names +# for damage, files in damage_scenarios.items(): +# for i, file_index in enumerate(files, start=1): +# # Load original data file +# file_path = os.path.join(base_path, f"zzz{prefix}D{file_index}.TXT") +# df = pd.read_csv( +# file_path, sep="\t", skiprows=10 +# ) # Read with explicit column names - top_sensor = columns[i - 1] - print(top_sensor, type(top_sensor)) - output_file_1 = os.path.join( - output_base, f"DAMAGE_{damage}", f"DAMAGE{damage}_TEST{i}_01.csv" - ) - print(f"Creating {output_file_1} from taking zzz{prefix}D{file_index}.TXT") - print("Taking datetime column on index 0...") - print(f"Taking `{top_sensor}`...") - os.makedirs(os.path.dirname(output_file_1), exist_ok=True) - df[["Time", top_sensor]].to_csv(output_file_1, index=False) - print(Fore.GREEN + "Done") +# top_sensor = columns[i - 1] +# print(top_sensor, type(top_sensor)) +# output_file_1 = os.path.join( +# output_base, f"DAMAGE_{damage}", f"DAMAGE{damage}_TEST{i}_01.csv" +# ) +# print(f"Creating {output_file_1} from taking zzz{prefix}D{file_index}.TXT") +# print("Taking datetime column on index 0...") +# print(f"Taking `{top_sensor}`...") +# os.makedirs(os.path.dirname(output_file_1), exist_ok=True) +# df[["Time", top_sensor]].to_csv(output_file_1, index=False) +# print(Fore.GREEN + "Done") - bottom_sensor = sensor_end_map[i] - output_file_2 = os.path.join( - output_base, f"DAMAGE_{damage}", f"DAMAGE{damage}_TEST{i}_02.csv" - ) - print(f"Creating {output_file_2} from taking zzz{prefix}D{file_index}.TXT") - print("Taking datetime column on index 0...") - print(f"Taking `{bottom_sensor}`...") - os.makedirs(os.path.dirname(output_file_2), exist_ok=True) - df[["Time", bottom_sensor]].to_csv(output_file_2, index=False) - print(Fore.GREEN + "Done") - print("---") +# bottom_sensor = sensor_end_map[i] +# output_file_2 = os.path.join( +# output_base, f"DAMAGE_{damage}", f"DAMAGE{damage}_TEST{i}_02.csv" +# ) +# print(f"Creating {output_file_2} from taking zzz{prefix}D{file_index}.TXT") +# print("Taking datetime column on index 0...") +# print(f"Taking `{bottom_sensor}`...") +# os.makedirs(os.path.dirname(output_file_2), exist_ok=True) +# df[["Time", bottom_sensor]].to_csv(output_file_2, index=False) +# print(Fore.GREEN + "Done") +# print("---") def main(): From ad6cda4270df6475aabb61576aa93e55f58a76a4 Mon Sep 17 00:00:00 2001 From: nuluh Date: Tue, 10 Jun 2025 17:20:13 +0700 Subject: [PATCH 02/14] fix(notebooks): update sensor data paths and improve plotting aesthetics --- code/notebooks/stft.ipynb | 97 +++++++++++++++++++++++++++++++++------ 1 file changed, 82 insertions(+), 15 deletions(-) diff --git a/code/notebooks/stft.ipynb b/code/notebooks/stft.ipynb index e32eda5..388dbaf 100644 --- a/code/notebooks/stft.ipynb +++ b/code/notebooks/stft.ipynb @@ -17,8 +17,8 @@ "metadata": {}, "outputs": [], "source": [ - "sensor1 = pd.read_csv('D:/thesis/data/converted/raw/DAMAGE_1/DAMAGE_1_TEST1_01.csv',sep=',')\n", - "sensor2 = pd.read_csv('D:/thesis/data/converted/raw/DAMAGE_1/DAMAGE_1_TEST1_02.csv',sep=',')" + "sensor1 = pd.read_csv('D:/thesis/data/converted/raw/DAMAGE_1/DAMAGE_0_TEST1_01.csv',sep=',')\n", + "sensor2 = pd.read_csv('D:/thesis/data/converted/raw/DAMAGE_1/DAMAGE_0_TEST1_02.csv',sep=',')" ] }, { @@ -101,13 +101,16 @@ "source": [ "# Combined Plot for sensor 1 and sensor 2 from data1 file in which motor is operated at 800 rpm\n", "\n", - "plt.plot(df1['s2'], label='sensor 2')\n", - "plt.plot(df1['s1'], label='sensor 1', alpha=0.5)\n", + "plt.plot(df1['s2'], label='Sensor 1', color='C1', alpha=0.6)\n", + "plt.plot(df1['s1'], label='Sensor 2', color='C0', alpha=0.6)\n", "plt.xlabel(\"Number of samples\")\n", "plt.ylabel(\"Amplitude\")\n", "plt.title(\"Raw vibration signal\")\n", "plt.ylim(-7.5, 5)\n", "plt.legend()\n", + "plt.locator_params(axis='x', nbins=8)\n", + "plt.ylim(-1, 1) # Adjust range as needed\n", + "plt.grid(True, linestyle='--', alpha=0.5)\n", "plt.show()" ] }, @@ -334,9 +337,44 @@ "metadata": {}, "outputs": [], "source": [ - "# len(ready_data1a)\n", - "# plt.pcolormesh(ready_data1[0])\n", - "ready_data1a[0].max().max()" + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "from mpl_toolkits.mplot3d import Axes3D\n", + "\n", + "# Assuming ready_data1a[0] is a DataFrame or 2D array\n", + "spectrogram_data = ready_data1a[0].values # Convert to NumPy array if it's a DataFrame\n", + "\n", + "# Get the dimensions of the spectrogram\n", + "num_frequencies, num_time_frames = spectrogram_data.shape\n", + "\n", + "# Create frequency and time arrays\n", + "frequencies = np.arange(num_frequencies) # Replace with actual frequency values if available\n", + "time_frames = np.arange(num_time_frames) # Replace with actual time values if available\n", + "\n", + "# Create a meshgrid for plotting\n", + "T, F = np.meshgrid(time_frames, frequencies)\n", + "\n", + "# Create a 3D plot\n", + "fig = plt.figure(figsize=(12, 8))\n", + "ax = fig.add_subplot(111, projection='3d')\n", + "\n", + "# Plot the surface\n", + "surf = ax.plot_surface(T, F, spectrogram_data, cmap='bwr', edgecolor='none')\n", + "\n", + "# Add labels and a color bar\n", + "ax.set_xlabel('Time Frames')\n", + "ax.set_ylabel('Frequency [Hz]')\n", + "ax.set_zlabel('Magnitude')\n", + "ax.set_title('3D Spectrogram')\n", + "# Resize the z-axis (shrink it)\n", + "z_min, z_max = 0, 0.1 # Replace with your desired range\n", + "ax.set_zlim(z_min, z_max)\n", + "ax.get_proj = lambda: np.dot(Axes3D.get_proj(ax), np.diag([1, 1, 0.5, 1])) # Shrink z-axis by 50%\n", + "ax.set_facecolor('white')\n", + "fig.colorbar(surf, ax=ax, shrink=0.5, aspect=10)\n", + "\n", + "# Show the plot\n", + "plt.show()" ] }, { @@ -345,13 +383,32 @@ "metadata": {}, "outputs": [], "source": [ + "from cmcrameri import cm\n", + "# Create a figure and subplots\n", + "fig, axes = plt.subplots(2, 3, figsize=(15, 8), sharex=True, sharey=True)\n", + "\n", + "# Flatten the axes array for easier iteration\n", + "axes = axes.flatten()\n", + "\n", + "# Loop through each subplot and plot the data\n", "for i in range(6):\n", - " plt.pcolormesh(ready_data1a[i], cmap=\"jet\", vmax=0.03, vmin=0.0)\n", - " plt.colorbar() \n", - " plt.title(f'STFT Magnitude for case {i} sensor 1')\n", - " plt.xlabel(f'Frequency [Hz]')\n", - " plt.ylabel(f'Time [sec]')\n", - " plt.show()" + " pcm = axes[i].pcolormesh(ready_data1a[i].transpose(), cmap='bwr', vmax=0.03, vmin=0.0)\n", + " axes[i].set_title(f'Case {i} Sensor A', fontsize=12)\n", + "\n", + "# Add a single color bar for all subplots\n", + "# Use the first `pcolormesh` object (or any valid one) for the color bar\n", + "cbar = fig.colorbar(pcm, ax=axes, orientation='vertical')\n", + "# cbar.set_label('Magnitude')\n", + "\n", + "# Set shared labels\n", + "fig.text(0.5, 0.04, 'Time Frames', ha='center', fontsize=12)\n", + "fig.text(0.04, 0.5, 'Frequency [Hz]', va='center', rotation='vertical', fontsize=12)\n", + "\n", + "# Adjust layout\n", + "# plt.tight_layout(rect=[0.05, 0.05, 1, 1]) # Leave space for shared labels\n", + "plt.subplots_adjust(left=0.1, right=0.75, top=0.9, bottom=0.1, wspace=0.2, hspace=0.2)\n", + "\n", + "plt.show()" ] }, { @@ -576,6 +633,16 @@ "X2a, y = create_ready_data('D:/thesis/data/converted/raw/sensor2')" ] }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "X1a.iloc[-1,:]\n", + "# y[2565]" + ] + }, { "cell_type": "code", "execution_count": null, @@ -646,7 +713,7 @@ " # \"KNN\": KNeighborsClassifier(),\n", " # \"LDA\": LinearDiscriminantAnalysis(),\n", " \"SVM\": SVC(),\n", - " \"XGBoost\": XGBClassifier()\n", + " # \"XGBoost\": XGBClassifier()\n", "}\n", "\n", "results_sensor1 = []\n", @@ -669,7 +736,7 @@ " # \"KNN\": KNeighborsClassifier(),\n", " # \"LDA\": LinearDiscriminantAnalysis(),\n", " \"SVM\": SVC(),\n", - " \"XGBoost\": XGBClassifier()\n", + " # \"XGBoost\": XGBClassifier()\n", "}\n", "\n", "results_sensor2 = []\n", From 7613c08ebd99b451cc852549809367eadde1cc62 Mon Sep 17 00:00:00 2001 From: nuluh Date: Tue, 10 Jun 2025 17:21:49 +0700 Subject: [PATCH 03/14] feat(figures): add data preprocessing illustration diagram --- latex/figures/A4 - 4.png | Bin 0 -> 192338 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 latex/figures/A4 - 4.png diff --git a/latex/figures/A4 - 4.png b/latex/figures/A4 - 4.png new file mode 100644 index 0000000000000000000000000000000000000000..45efba209ce341bff344ed3a5f821ce2a091b5ad GIT binary patch literal 192338 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 z

_)+NX_jF2t*3FxbZ|1BTCvVzeYrwvR84Zy+d(^{Is z6=&XRzcf)jG%dn#b^Gms($iqn1y(%1oYq;rIlc7r2C|ajTEQuJCIMY`@+VASDVH^Em=;+_lK^sjbTQPXZr}ciu zxJ~PF6V7xssCT{3%Na*~I(V_7^Kv~Lknpz>B9C68$Hwd-T-SSL2S5Nd%S`^tCM0y@PH%mM`s#+MT0D6pHQ7}TP^UGZ&g_a zWHHt~GVU%roxR4d|C1;^J>W&$nX@v-^y>-g{fAS?6bEJ(nC1ty6RdKD*Yx#0Cubcq z{@TgO*cpTfi_}uI<8x)kXQS_odqO?()}o1;0Q**JQfjtsb1!B{NJuDNl1f0AHecPHKPUDYXJ@jk7J#V`iU&wMK{fMDcKGya27u^BdkvG>3_ByM+~tnOJhCM&64o2Q z9;gKM)adW@p{WHZf4l5_&m|ArFl@pe0KsY(7DnFdNszQV8e3Vu`!2JGll|j065ooT zcsx6by;lOjD`Kbj@`#-_>f14T2qMV9k**xpgqBVXeSnqlDVPF_ei?#i0*+V`61<+w@5c@x-$59y&HuZsQmEz zHrMfLzugew@;fb?HyKrrYNDaz7~i2k!1ZyGQ4xaq<$T$}3VCt~uFUZ`kUMH*EEO%MqflSbfQ(t!j zE(UN&j_-rggjEP7nPgnhoa?en6ftSwRq*hvsIzC~LBQ-GR{Qi$O(uoL2C;~#3NuxA znc~k9P#jzwTsbJVh6G4Vcw2b9D)R!DDzVeIb;$(|W;MU>)2ALFk)Xpd@9NEoVUZ4K z@&6!bgUB63r85NkwkDfVAfm~qZm)M2bZIqGm*@^xRMs>4z#Vy0<_3;;vOz9?Mz~ebHIx@U%BupW|@L7!(CRy zwW(0C*H@0G8ze;>SSqRrXW(N-^N2Ejk8(jkOxkX5u2xs-BajhGOOirZAPEo- z0HLzekooaqolzmvg;zE6@%j)6qU#`H2d|8*FX&ADe5yX+10I7}Qhx{s#m>F*X23on z%mm;G^~rIC+A8&D0jz%|;BgNm;YwjQ-KTwmpP%M6Ud|@>@YyjMXY5XiC?IsKwV6 zJ^G+9^v;IaT6gLW5^Un!N%PJ`I4y-Hd{Rp`^vspkj!jBY@gOZEn2zPX0U#Do+y}fZ zMB<)s5?Re=!2Rl~xH*DJ6>zr%$m^7AK0Ew;3o2vIlz5f+AgO{fMEb;Y85UN@fzz)k z437Xj^wFSxzuRQ_C+}9*MWP#XBiHTYcG?hPv}NV7V6j({C^SGB+rf0mr?;dZ1z7xm zs@4%+zbyJ8Y$Ey%?-1#vt-xpA*ZrLbw}z&RiE(yeJLc_gvG#SQyb|>#a=qJuI6QF= z>nGN>ObrF~AE}eO^2L(e=8n{~>TDd}jkn*{mgySIvjW|O-JbPP=lb@1`ce#ul=bxo z@U?Oqjh2VsSQb@U=W%}>(=(D&XQAppu#5K4U{&`4Pvv4uSx=-0)4ypL9)C+LyXg7I zv=ruRQ4*XTc6>DZ2T3?-BEMp5TAiVf2%}aRNwXa5iSJ5fXr;ElSG6u|+;6axT|e%x zXdWw2>qeN!l$Dgk?0R&A^972p8Ze?4Jv=;)EJ)vd)iiR9qn`PIM{%3lMP_y_wA9f{ z%1s1f%}I{(dFD~tY(>W0P-56TGfvO^{JszAg_$bPw>%AA#0i))Tp7Uorkrh?1S-Wb z0l+(bj$0c4q3;zkzf7d{#kaz#2>HZEE*Ya>u(vYrZE;IS?wc8QGYBro{E+^U?Fs3! zk8q2I_6P}&pYX!%|Kw%YyKcy1g6b8#O?LfH9*DDN)$SHdbT5#!dd9ha!eg=I{o7uT zM;havE^yKyo>lI5d|@eq08(^1QLt8(G+`8^!ua|G+a|W%H$$1N$+*(hpuwGM{digZ z6?xd>4(E3j>6NV2#`0E}*YZ2@Zovplma?xRFy9M)o6t4blxkW5jCn8S21QD{lBqso zVj~Z$d>@7N1p3$)IGe35!*P+FUPBtCv@-=&`We)B$zpE4kcGT-sb8*aBzf`f#oWoj zcWNprf9v+xTT_&0c{hoQTE}7CSuJzBDE?xDy{bw7x4-}1kS}pu6<|RN!>X|ALs|3v z1%O>XHN{|YO=?lQSO+D_M;%4B{vh~J@6O$0&S_3x!ZI2@pryA-*hAx+7GaVV>BlX_ zQjfEWfGD|LX_DtSl8dGX=i+e`>09tB46kgu8fjm$a0kmAD^asJ6LO~HEMx0&S zouCuUH|h%NMB^40+ER)h%<4d?v=Eun+vNBTKT7}Rt|-JfHRxo>cfkhbcHhtXCI9em z1ucL2Cw;9lRAd2i&+*qxxk(3qE>S)6pVmD6>V51ipkk;a-Ig7|)|ZN;kd@J4lL6g{ zuD~Ud+SSe>^{xh4n1wyXs7bMIQdlx(YE=+=Q=rEyRc6@y(Or+mPw7F5NFT@TzMP_W zk4;Bar*s6Y%WqrYmB1N)qBNk#^+HqhI^7~V1^_AW6><$`a9Nn(M~-Q#?u|IX3jJ#; zHP*Yz4C3K|m^g&L*_ufZ)GHrp`{mwQ@yW_m{&*AWl{3JAV~Sl~hBB)Avp&B-Zazy| z<+QC=Y}6+2zyctmZ4u&YsdaJFQj^$=?Gd*0QCLW`mBO+R`FO|b_mQD2ZrSYzCZzFZ z#UC}39<>6{#Dyw<&q6MjbpM*dQs&f`QAG>{9*X|1d=Xqde1I$E?4)`B001;J>|6lt z!_(E2z}+EIkF_}6KaU@7{Oq5uD$gA=LYDUuenw4@Bd7(8`M8{cHBR;;bUH|6h1~}e zV#aZX(Pc_FykNXbRM{&}!B@@(JAGOd`-INVFmYl++v~2WJG(pu6I!I0K0mja{%NZM zod!~-tVrXmvND% z1nck~Wyqs#e2nHYC8J5X1qwN5!T}|Q7d+JUke*=l+omHCL)k>M;BYsD0=?0#RhBn< z3nM08)AO#kW(7lJSj44(N5Ym`G1}ib=CD@U)7a3o^nUcgfEwHL`u&zG$J#l7kf&H2 z_Z1yNQE^jI+NqrQOu^QdkGQZ`H6=zj9y z=Fq4VQ`S(=nWP5mN|zRwLdf%^mU&_ZvVpi6(P)s~28atczn9{|qmm#NvUAY2t{Z2M){@?@aNlK|)a z;o0$xq@jeewuvd3k)TXIz0E$ztK>k1m5 z;DsVQZEbBmk>83oFt79gPs!V1o3V)nOXS8-6rxd9zkX`YXf7e|@Dy>4=XW zoS&O3xaE|HW@~3xQlB>+=8#VQ69-0grk<5|+JY+l$?8X>mhuTit}-E20n2dNJ=Ew* z-+UeDUGlW~&Ynw9DMQ5~KU+!AsMk8q+XAT?O@gfP_hb!4O!Gs~XgavUH=S|W3E>bE z<431iSaZ};Y~+Dvy9h6KzBn4HbdRhe{?)Spx7y@uBZ_lMUW9Fs=lVXy0Ly6nB4h z>tjTRuV*>q!A%IH?Gat#RlE`ttw$PXy`!jV=>1qQLur(o%f+#UmomWH@j`;sL<ryiO<`wYgMx?W-lfoM9NuA-bq4Xd9{|?5yVR_dqeiGU zyjAI4*?tQTQxhLf`1a_$<}=5mcPkQCTZ0{PaPY_a$EhFD(Yk#XzpN}eKB&mwP}Qq< zJr@SqOsuWrATY`rCBy+)V0x?1j;;7BLy9>*@8C~*6u8gH$(=r?o6dJ!AftdWKYU=r z)~+?vX1BH~2IKUyKK1ox(FK_k!1vJmGsV`uqo~}*AE~q2@hK1RI_1)$6W?3u!22AQ z+G{*;W-2R6l1MF->eoV*Y%*OQ^rWt8WS=_vs@HW=o~4N6xd700lJa|FD*A0C8HbwH z_7IYTFKhz319BvDBdqY3=VI@JOHBosGP2Sv=~7_xF#>D+r;0dE7~CA@@wRRVnSv;f z5KuQ{2Vl0gerHUaOvfMIn@dp&7V2l-gq^-wCEH=_sm=CAyz%WWdbc#!IkCmK>gtX@ zB%|EM#T#iLjr(|ODUKXB&2vLBP`^63=)=+i?tW{mRB7WflN027xnqD8&si+B_Z_ti z_f1-f-Q#Dt3UW8T!NS)~s2YFtbB(~F%6g~2CmTfMmJQ^TJh3K@2GIWCzy9QzvA(V7 zLe!-yn*r(TvvSq#>Rp`cfNS@$+5HPU#SQ|Iw0t06v1Hx9hl$YI^mHjK6h8Nmyc3av z%OMc=mKvu?Nk)MGjW1tj>xGSae{Ixal3mtUObbWKF;N{4I$uZD#~N4L5ov_`$rb|KT%VigVS|NS zwUo$Xhn){cNp`H0CNJ!w8e5AtwCa7=eiqh1&TC?#jve+Ss^0az6nFP-TX1A(;ax{C zMj5Ym-ra`ot*t8!Cv{j`9@td*Eo@HkpC)nt{2a(zPAHbvMsoc$*$G8Ggu*r&(5Yn; zx2)v?4_lH^EJt$;R9(x8j!UwpM?;h9mkT9H2#*J9(D|ba8UZlt72A(q=0MCZ0#lVS zob^sQyd3hvK{P?}qd>Fe@yZ;%Jl>)ZU4lopuNrMEImV$i3}2m>Z{ghae!uSrNHJt_ zX;9!}1d}1R=F#;#bPtqDaw(&+B9tdK3BilN2Q-o-X^Na8&~1fB)9MJrHJP7rtUok( zvu4*4SU5(k2NGQ~r82B87`;!2gs`;V&=I&LKf_JhP|(91=o<2S@Zh1#Nn>6Mr&Lj0 z1LP^q;BZvflY0`hZ`E`j*QF3{8{n`w2GrZ3aY@C4`hvPBLMdwCD78`vC?8{Q7zz@{OnmvG*I5K&r`3AewK>> zW`TKv$sFpe3#;LNxWEHOl%5+IM;;dc8<(0!)1MO@=;UMeExXRCKBAjUj-4QuKn@Ix zAps{1tg;dIJC|LaG(lGTtwPq1O*+qiU05j+SO{nFTP5Im7#SHIL=QlhGH~+CCld*x zC~3x;mlPz`Z{^WCerIm+oA!R%_hvedHeaDdAj=`E;vT~lu9E!AuX>%Pov#a12V4#8 zEH2Q}UuR`|rdIW~`Qn6yQDHv^Veeh8u#kLu5p&btD8*iSddm8af`r`q`X(jzFx0y0 zN?u*bA48S7!OOvU{?Tk1ksTVfDLqSq8%EpaR$g- z_MHfA0mv0Y1w#%|`Hi5}(9}eUUV>x)LH40Njkac_%mPjK<1Ks<=)rXeyT&Vwy1C`nv*Bf*HxVa zb`Zvj0rQBd^yd(4O<~N(aIUOx8G?rGX##Uc2N+jo5WmachB?xlpi_%>DHk4qcZoYA=)>M{BZ5R;jFjL*TPI`>-9ON)j zX5ofh%N^q}l$E@bhX~v1_a5~q!R-Oklt6wV$MgY^)NT2o{5#SVeYrli zWoaQQQZS6%Z#aHz_+owpagV5^2R^g%jg}%MRc&wU3G&(!EBasa9 zILukUXunEbO#PF8j536QaJuwGdXq0y1IfYWyE4qDi7emj#Qw4|5muk8?i}8UwGr8Ok%mI}*FN zRnW6}E!jK9v*|=txmc`QQHC?q&@%j#(v-jCo4rha6h7Ums#_~Pg3%iyuw5qE8JDjmX%iz z-`j>h--&!b6Tu)mvOTD-(DmF<7qcZ7ItDsFG~s3;*+Men=qt6evb<6u_&uz%9BU0IYg z3nKiuG-`YxlttmfY`<=oK7JQ^KR2zN;rE zF-DJ2^(3nE$?&&B-?r&=BMqNkGL`)Owon?>JurRu_3KyXF~|{1FaL%rR%d7Dz8h;dXDE#{?js;g zr52Bcy(?egVq!+p7$x25Rx#cGXpg0q-a&+F(6_#NwLatmXkSs6KL20K4R~c-kgHV} zr`cZAGwuBs6LU#(c59l8Ra`lNhk|^+M8>Y$TYVEszuPVZHJcSqi*HA4G|$tJt0oT) zW*}a;x$T~dOi-d$*FSd!{%7!r`ZEpnZ!VDiEyOE+oz6*Q11n(~nBe;wm#7dxa2|f` zaa*3B`1!2*-;WXgH-kA|__y;XX5N|WnZ|c}_r%}Xt3EqL*w}2*l?O^q+5KLx=k?u( zWZm?|qBpvEFTC#_Y$EiTd!*t|%=q_v$?t#uZ1C@zRbNDefJc@WrFBg2270-uLWSF0 z0?d8m$mFmT!u`ukx+ zdlXy+nZKj%2T&Cu#3p_?4d0E!}<+{+}rzV=6oAp4NJXLq?{BGfvNmPbvj4|oRz|MNMu|Bb^7XaQ{K z!h+$>!9gtm>pc@$TVK}&X7-d+RBr%M@0EDUCk8 z5@4AzwVl>VaiXWDoN`*wvp*T9Q)dSLQuJS2H38DzMc+fp4?`zv^*stvi$;u@JW`_$ z9KfYFIpWgil}8UyVwPFs{EP=Y~Gz`#0fz4-(*x~JO!g{!`5`h-kD zo!RtSr~=YnN5}X@k?GsPc;tL8Zxm!~blOT`!b(!Oz8iJ%<(CiF14JafswX2wT3xM9 zYc+xXxjFHF9WtR_o}LW{g#hIM5k>+h#$<}#gknu^`^(iIPTj!_(po=;MNoUE9&Yq# zAJA_%fBxL=&&S87_J-Gpy)Oo&Ai0!QWj&HpeA2S~(dW-}Uq0V_{kS{U`RQ~zz|;ry z*fqA}MO@TmN0k?g*$+JzNuLGm&3D$AXtWG+rDg2=j{PktSw`qOeSPsl?rop+-QBcm zv*6#yI)xr*U7_h`x6iIp`^lwBM9V}rK_}C-zbCm7VW^kG{9Q9Z7;ZdljPTiuYgt@h zh>Tmv_lgHzH5#9Le;(F?!<-lrS}H8UZJHlP+s5} z|GkEJ$f%NhSte27b;{4$>nE72{?af@?Y#z;oa@N*Ls|vV*wP7ab{UomqwDqjvS}kAJSP6)vKRmQM~ z|6vtNjz$2URY)NR;<&Dep+1OTsZGM)j;&-qW;WKK)?Ck%d&++rc1O^#X-Up8!(82Q z$fBs%S5Jlgb*a9~tU?eipWz`(_OP|HBY^zhtoOU9>_?NI`d%?K-QHiZc(>l-vfBp0 z(Zp2E^RnqyoJ?h&_}Bd2BNiEaxLxz1$?(At0p@tAA%MG1e{Zd+pNhzLr@=MPZKw~c zaj_{JcKm1Okyl+(NaR$6@Kt^}Rz76nEW zu3bG=q+cGMWPbj`iDtE%^?ALhB|O%AJ%QbCb^LjEE;f>;E;uk>us``?<8V-Qx*xE!$y9z?8i3H%{3xP@gApno zRbKM;S^|N#3Qx`PJ8S;JfBMYhNF4duJXA-}GnO8gO?QWmv+_RjQ3KGUhW}cYgBsR} zc{_lC`&S=>s&avB7EGYmnDk>s@`0Zymoy1D$b-C-H~_h#!V0}Z11F_8q%sjB+=Su) zQUu|&a)$$~gd+Wg4j2KwUx6}%S)G1Mfarwz=UxyLbca(AhS85&w+7`HOfq}%A9S@$ zsc{d3Hty+{6Lu3MlE<+$1;bd0yCb2%Vh+p*dSOZ4ECme>GwkHCF+R`lFM;o}gjcHL zvG%`{Y zqNt_|H4F4_=?;iOA_!pvz_wvP3o}{#dJp~y2vu^;k`7$J6G~hK(uZRR5(aWh1s={Z z_f>oTYIL?N$-L3dqHfG8eH62hC-bS0m#^Gz4`V|5y^|6>!CtNxl{jCTm70g{*{7D5 zFZGRuC^Z))0V*QwV-6mk+~3jw7o7CBDv?(W>Jj*u5+d@;Y^v+)UKm|8qBoQ(Im+~0 zaqf`mF76#=ld`Nx82AgBsGlP_;mz(CfjR@m+ZUDm<}}v{c$5rf)C?eekR3=3q@!cS zdhzCE(t}qz;=o$qiW)>m;P>Bq%KZKza6kdZ$~2^sWSx0%b(5ddz`TF{3;>RD6xNQ* zFFpSD_3P71y;rZ2`sLgJchu|Cyca1AtGUXk{S!b6#)yg}W+UTq|E3DB+H_nLwA5jL zE$gMoeHpAiHX>v!GV7D6MD%u0hj~;hc|$xdSM$QL_!BYu`(xAiwC`>*TCdCAj_ zbz|T5nrCnc+9v1X$y>-|&$Vhyu+FdggHDNT;fK7H(&sW3AIfe2U8VRxB|C5$QC-4H z)Pl&>oV`3^jRWj)_-McRe4WtmD|u{O1bk09^AdBPm_*4!`xIJrBHo8N&)s1Jrwv2MbE!CUC*z) z$a$IeO81p+QoQc(MX@t;OLz>ui<7*iqTlZ;e)O1n(rdQG_cRteXTmx+}~F_wY$GGm89Bn{3SOA5xA;=4L)zdHmyR zkOPY&^BtCtkkm$fn8*8P?^kF@t?!`O9Iy30898^;*W;l8V|wIc;~-% zoPj20>$zuFKEGDj%lb<0?p*!AC^L2Wd^g~mt!Te5IM=F%~9rNixABO$4e zs9kijVh~s!hhN+J!yNdl$Ee<-?RjzR-X$T3zJ<~Py0~ZI&pKwiu=4FCpMQ-qmJMu* z3xbCHXg}8XDX8{jkc%KDdW)IUS!vP#!DJMaESmDGzPTHAw7Q25DRlSZ1Yg1e@Lak) zkbMuz*gC$be0;>!WHm7B))KTsOA6h?>*x~m+bOBtg_EldL^=Z;-zHnn1E=zt%ZWH5 zr;moO@`TIP(ip96aqG>yh)M=*rQ`f^Yj5`F#vOGN( z*x^(n=Bs+3cJoWrbKg-pS|x#K-^ei!?=uir0#_vA{7>D_iTSsl&S7>YNpoM|qS=&m zBEWW&(geNXgi=5mG~@#8vUsyXI%8J+PMx(&yt~&LjA-^rv%*R4G7;WFfF)TY1O{HY zAwA(?dhd9u-|&AtS;s!I4#zrV%ih~@LL!NZ z>=CkMmK6?;tYnYKC@R@2du3!x_NK^|Rp#$L)w|E<_x(P;|MZY_yvBWB_jNt5=kt1s z+v)Y8(|(xoYtITENZJmtrb)Y5Z$FzCJ)Jk2FA3^YZp@kCc^_hedsGL;9Sx8VRB2}L zzi6&E8j2ELhHPb(^~vx-)FJ%T(c#559ZX(E(5Y-`r;`aS!WkKd2wPE))nTEG$mZ;; z5zozWWP`$#CL5|05MyHHtG9IxOe}DZ;_b9AUIOb{4N_N%$&->=*uVwgBseTkgN7qi(|;Q|K1kwA)|?^(vxAN9pAR z*td{%=S&WSMqGf6yM0dxdKv#+KYM`?N$6q(5n{f<|79if&6UIt&;`qD$C!Kk{T}MV z(R^`Z3(^=VP85++xj}>PBk!y0>b`Jh%f z$cIVNAy4#YnZS!?MxoNt;bFYMR=4(QmuL3#p%RoAZ-ww2bnna)1-r6jHN}ix4R_CA zV3rV=eu%zMcMA%YTTfd~ResjV!6;~=@y2q?d;${FEZ@t5NiJMW9_7FbF8?sM`9 z4|Cqnk9zSLk3sL3oXV;C+xAa3IfhXRW<}ovOTxrgq0TD4mXCP%So+!JJfKd{04X(Z zbsWU_M0Q)MLwDg3&>L+v_pm`MdguJV*W2C8F};0l`ze_CoTSNO^7Oj)nun@;Uz)YE z)@T?$^`Gd9iT>>ngNEV$uT!KH(gqM*e z`=(tZ%uOMNSzZRB&KMC!ZpqY5NWq-mqf5P!bSNpK;IHs=olWm9v1BBTbl|Pyua?ok zAJ++L$lc&{wD%oB4Myb3f8b7E)Dz@sQ~>m@B`Cv{iIG7y7DwPNpt;6zH9D2)xaaN0 zvxEe(iJFb?yY0Yb8dC0GpL$(QNvfGIlu`VypFpjg#uj{+v?dw!pmpcBk3wp8Ny_igZNR$lX=@nfvL*ACu2S3C*8+);VtiX4n|l0-1^A zrVj2N)gWf^vNOrg5+U-vLHT=7JEL?=hM{wq=cD~a)g?@{>D?w*Hh$Mg?+eoDBrU0~ znxHR5-VL3S%G(QGZ1W-BiCM@xwCz4#^lp?p?|qQ>BC*G@P3D~0yYZ0Gp>$fDsM$Io zZsYv2pr%3Byaj4@btpYlsdjZ(qxNC1vd>(F%-UUJ3pz&K47dKY!V45xYP3wHnT->^ z6wczM5mA zBrtMwg)T%!r{vqGLxOS}J}(O(b0WYj_cA>(ixoj=WU_d==j<-@fNV zpe9yuI1XyP)*N>x2>9@}iP^&X62dJrG-Azw|3&;^{PWv$-V`CW2A`MQn+ptykJ7m^<5=%wvp5$kA)}YDQoP$O-8m(`;cri0X zyS_Ys(-IlbxAf}s3!wuwMpsm)v5N9dtCX;7xa}F1Uu9lB``qp}jC!M;&PEa7`LeLf zlf~gwhC{7)P5~nEO5)|+lig2$Uperf{F~nB3q7~Q^9pVR?VupSHREy~YNHD;wFPcm zJq~#pxILe(mGvZ#$V3dH>-}axl1@lUZI7skeYN~+{Ut8!*?tsSMZG|saW%uOqjii7 zCdBG}^+OnpS*(^Kc|#i`=3|%Y5a76mj0#hN4{;&J_O1~9K^nkY#4P+)Zh=&b;c%k! zZbMvQkOHEooMz(vfYM9l1(CQLT-Lk`*jj051@t4D)hY?{<=9hVmJ7rJ| zKZXj%$E`f}$tsV{zA=jH9NkSq57>Br@rL|0vP45a{#ETjC=JQQli$zGBzrsZxU(+! z7Qbp9+2k*w&*?7UCGe_%h*gB~W5mSwdlCKKnNjMv-ovCT2~dZ}388n1ej7o74KgVD z9~^0MU1pF|VA2#@bJVh&)* zI62^dztYdAY)<&0%T=g>!pw*R^|b#>9z=l{K?#RO+1${{ObES8GiMU(fF37aN`vxC zo{~>bza7eJ!Ektj`0oNR zQ@@!9zi&IgS|opKen!laFo`Q94Yxuo%Uv8JwDkE+;r3x~hS+VIPuD&(IQ8(+4ieM} zM(umh-o2dsl`zW3|Cw1Li`XVOyiucnPj2L%{uKN*e-_DYuFc5q?$lZKmg2&Kf=3_F z^g5Wo*TDMk8Vdi64FK(bj-?Rko1^Pj%N(6^qE<{tEKXlflXV?J_;QYuI8jN73&btg ze{uE6)FlQCp<9xO5GdFGxt0I*G4*^`5L04}v!%5&pDx|IuB%)2Oa)UOQ{~TaJz(nP zE%;2)@ZTVY#327d0pPa>AIDE@29tTNP<5n6)vh`oA6Rqbm5=5DS73=tSlHnA-lZma z+(PsF%M!GaC{<|uy{iV_WH1t4JLMtvXSR3>yyN(fh^{EAaO>)#4DJFyf|pR z(a=zN-#LzKYqWA8G>bu?;irYqdP&C+v1A`WELAphwgS$NvzXZ~Okx9-fz4F4YnIg| zb0POxV6ilR3KaV5K)^_bB=5G}3g^lw&QN-*-tN=RR&it1233Z&XetB%8*R5BFyFQE zqidbUy<~(3?+s3Q=i#m6R10EmtNEwEklhixApl* z9z;LND3mzpY9j}2%4T%y5%vV*Dkebc=BIBMDc(ruAnAYdbKs6Uzd_%Y0jE>-d}y(; z_Dk6g`Fk<;8CzuM6h?>Tw` zF;icAyPq!71B{e5_12!wccorrWV^sY1*@1J*45TxfELxPzBL>6q)5+D(h~}<#47_3 z5Jv||E05*Yc8aU)a=M!Xm_?B#u-Nrs$1OaJ&_gKw)^ad~Lb0>|ZrZh&*bJmsjBK@6 zRDh&W`kv)?qNSm-etgl!*Ys*_CGUzFYOXSk*zkh!h~R;E#ng^k`qcG!$Jn+>IKWTO zu*=!?UzaL-GGBf;p4#PrQB!cPdIvU0AdD|GRY4${@As{|f2og_Li*zY>;N(z;@V&D z`S__z-1X+3{!uN-Y3laank1u#*CIR=3ezoF*3N&Jo?Z9;%CN#i@MV+vklTB#{NO|K zcc;drjvV6sK>a_f+s+D(e5U>dU!IfWrN4qRTw=SC^JOHUhH;g@v-sByQXEcPXmpJtYLSIFPOKI@{;o6KIUDC#-a zCtg%p1aG{y>JRT}XVv11ntls$i?Z#hrV=Q~8<<|~J8b><2+eTrYz{{jV|S_RRcX*+ z{k<_ZEVjPIICc{T5G`ogjF(mk$IqW?I8M#oIzHVBU`Z@8DC4}W7kQ6!CE$?<%NqI92UGJy*9FNIE)zIX zq=nv9xpr+*I={wks`j~Fb7aY!Z}|ayF(@T$G6;OIV=h%sHfyS~*x^m>m$e-)&M$5I z8T)Khm>Yh@g5;E5|5}ly)}u8vmHVw6^QWK{?KqTs4KPF$`2_n2x*pcCDs^%n zsC4qkA#CHe_1+`0N*99++|LCxt>J81$on1b)Af$|Dp^boro&&|z?}9HNCJ36#J{O4 zSX>EHAQdlU=4d+Yz^_`IResgcFOJEsM*z8NxK(E}Y4_Nm$dzl-O}n@3fhA$+SF}${ zb(qv5B7;%;;b|v(47&eK=*^M5ZyGzra!yih7|dXrr;r&t^VFl|7g^*Pl8#@MlBHa; z{Z542PdP?xI$?ZQii(Xs-wsMyESqyfBww}Zh;y0lr$>Bf3K5xOM3Gf)o;DviM)`O_ ztUpR^ZUJaGKRAqRQG5OrxIsQ=CL45%e~SJTO=PVjH0dKUk-3UQjW8dow<|D~=0mosJy;;PinkMXL4TH8s4lgC|OJiyA@B zbeb~k$p~+(Yi1T1QrSG&LnjoqKz@;a{sWW+O6|K2!XK}FL?La@Q;#X*?VTxP`Me1c zR2-A10^ViFr{U8oPFOBmR;lG8Guex8(vDERafNBu+#%!N_Z<6s&KL;9Vo_01^I69r z*|}qAXurSTYtSbwqNk^ahpPwV3HQWh+G0aP2__r-YB#29CC4T6-@Yvc(oDFBmAcUD z?S^MBS@`Z06a#!<4De%+=T91LMoTR~;PQ{%y-n3!fVuB(??Bc5+Gv;?VR~M3FyZ7i zt{2qSWxEP}tWCpA8hd$_2#BDE3AuP^zu_IO221f%hfmwF2hAe{-QrZ7n#GN$lZ{%i zP%hun+^$a=S5hJ_2%#+9BN)nmW$1DlW5l#CW<=)?#-qm3Q5s~E9~(+>aF>BMR*S>F z5sBoaq6vd_V+^CT$npY?cd1J|`|8&r`exF3{Gy9(fzoc@E+@Io_-YCdvxz(*k$Cdc zl`#JLUxC%oM+9{UFV7B za|#RlX8eyGvC1KpXp(+6N*iFW;{`-y61D>`Z$`_ka=$AqBwwR^4cO@Gz>l`f^mO&E zGULl7cpFU4#*Tu+WQ{>(UcN=k-n$UD&$Lo6AxZxcPlmK(*mc>{z0WQ7kFr-gab8J0 zW}Qq--e+)0Ru+V7!)&#=vxkd~H<~}Tt4Q|{&JSVNYFtl6em6C?_(DTlXa1I|MbiLjG+)kEtrs9dPv6`=emc)= z*kEsV=lJEu19lBV2UCdq*DZ~W25X$afvd*KoURdDmTLIG#;($ks$YgZQTZ;h^+&nQ zhVuhRn$Bgt%FFQPp76>^<{0?1o8!+NI$mtN2~%2{x#3F5`@f%#@_cqw1l{-(b0$HG zI`%P%=!K{V2{dwTy4LH?BUc^sLro`&kJ~WAD>_4t&g*5ZiUeG z^<5MUU=%I%m(sZcHmBi+Z9i;snWh|UH#d~i!`#k@s={Sc(i3Z9Cn(A^Ds^3KA1FFl zBD;p~ikBnx!C53kdPm59X`neR#Gry*H4>5`yZ7eJ8_W4J5#>$dgRl#qb)dddrb``N z@w)`d(PxdIQI6Q62uJrzEs{<)1~f8BximfO1;tD7&CuUJ3~^KQPuG-ouI3!0SPpZ$ z4oOk)Bh)uup!J`w1PEfP!(nq}e@cW{0u9GV(cK5z8Q(XBtS$$bWc)lk+b`Ox(w})( zH>0|*V8&A5R8CPK6z&$y6Bz{*-pW?1JzLi4+<48JivqtBIGKpe8tfN3P*#4{DXX~7 zQMY`n9}3N#F_et+7Z<(lHwr)ohrxM*v*~>H&6z*R?AdIwxyl`89w(tz)@1T_?9h{I z!tKo}xHx72cRK*ijR?#g9jLUz;fH<>GPe&;pbsFDSVPf?g0;|I&11DCZ?IR_lP#mA z9hl~?&jg(N)vjbmJYOb)I%jw<5T(g@*o~N68E+EDxWs80`BJ=Z(a#Moeo)kKWT&1V z`I9_A4`PD1&N|otpW}c(7@dv;CAAB2%=ccANFySfk?T_y!jv@Fe+FuXNU8M>$ z62=&HOC(LUUy;2u+pYSJ+p&DUp8VeI)2XK~r-^3O@ZR)6yp72^Iu3*I_CBhnwzig?4glpSB|Z>|%TaPtzl;{$Jx z3AK8kzZgiNYwATu5R}fK1DD2{JhviBug`xwZQb+>hhz^QiAp0)3`0#XpG_1kM zdp^W-%C%!$g+iWMf&JSvZ30})!n$zm5S(blZClsvR3wC*n!!ZtNeAU3(CIC>%rF)z zxBG%tv~pc|>9JByeH?V6VgFptjN>bjivG9|-}Uv<+`a9|!?Q0OBYC{S{(c&*e2CuF zRNj^vDU3wl%Aln~=k}n4ozj~q_|%61dp22U!q2F=dp(zb(lUgwCO??k4aO@wdFe_A zHd773U#t%Tm4b2%1)8&{{HpO-L%OQaiz*67vg@&aL$z8D(k>`*g655Id22k6Zcy?7 z4Y1#lUnIR99b0VU9e+~}1!rsDo^K5%B=&3a=~U)cX2cLnHYKM6p9SS&WeBo!Zuf=P z4E+fE%903T2gsR3AFClAr@OQe9W2FZPXLQv8e}R?M`ZGDLXj^AMjFFJ9t5$tIgAN{ zeRNd>({~Y?6Tg--S=v`7?29Utg9-3ehQJ6broMo}$UF>xN?neWYVN3_2j*uZk2KN{A!KX?d_rV?H$7yULCIKeqtS~ci-IW%XmGjDiwvwAnnvZjoN)ybSg$6EDsk>}EiHkp2&+uSWAT)MWUMo(U%epa}%<|5dp z!K4jkyjozQ)+*JwKVo0~1FyGw}7kv{i z&rm$kZ>|Kbjh&meZ;C09`G||4?^lJF)p6@E>D_=KL^uVFhz=Prf5O!ZBxxyoPnF{> z3=i*wJGK6BXYIKO#=g(zN|J2&VN3DF1R2#A%_>c=g3oG{TKyYAa&g(FV#u`8!~9d$ zc?uqVpI{JVIpl20bJEdV+C%^d9Y{^IJ_J=pg9TK+CZ*cahtuIY?J+uD(!mT@aFZ|D zP|`1>s6BA03R_Y|NgY&Z<-k94dW^-{oTR?^!C#at5?&?^7^;>H51C{X*p@&D{i0 zJBZ@})}aZ(2s^z@ZQxU%o}Ep$v3=G|$RejXwyFWO29RFqHgi^}uWWiFU&F5}hPChe z4iaO);3jqlAIHpGTdG%H_rs%@^z77P1j-sy^qk^C6UU#JaNIF@Jz(+oUIyd-0KJ%? z3o8DvZ<@fCccxfvNV1wBjUi7|>O4@4q^oacSkO1F_of6xT0E(hnhRcbj?sAPW3e8#9zh(@bDXIvEtGURYAH|_>;5kwNgSjXlG zoMoYbLs66+nw^rB%0_cPb28M85iYEixw45sff9CtTu*bcXma&Ctequ840V2ATpm=$ z)8Lw7ov6;!(kpMC#D|%-@l(74{Q(oms}7G#A->`{T$*Kvqb%iGwY?4d6o)qJcRj`t zYq};jr``4r$IVynh*$T#{bcx5+~~7_#A_4yUihh7;peZSf0YFgow2`ZzVZ{wG^pVl zO;;(9L9ZUKvEt3Wq70EK&rCI=%c&)iMANJ6bta6GWgvmj zn3PR}x-O7_g4qGguBKokn_>5_+w5v79rj0vl*j=(%sz9#$xf~p*&|1GzX{T;VHEj5njqo6GBB4A zJ0W;TkSc7c3aJl)DdC`)5@Xpuw&o#oTHiV@~ZHH$>k)I#}Bp{TS!7KLY(*&zsBpfRBnDj!Xtly**$R`E6XAN zpm`tHb>Q~ZATIg{UFb1f!Zi`sfBNy$A$jrZ=h`Y8WQCj4*}!JHzU}PC5zBk?SzoQyRttI|rt27lydEuK#dcTqK&V*hhWmmKyFq=~AQHpO8+LU(6Mtqr~x}0hn zDv_VbK;XF48Jne4h|HD7FkmDxx4fIBV1Im zO>*)I2$L6__t+><)!mWXgP-1K%{O}O)Fns$4@=FDvg{s z9L9^z^?$x)5_WoN?0T*^_UtS{*?m5Jh_0|XFVkNJL#F#$^IE8sistT_)Lw*T!`DPZ zWEbl7lzIs1sC?EYEx$fgu7_KV$wTi}+v0J*_>-!^BL989G=QRWvq}DL8DWbPa3=f* z`H;ezh1c2TP%07g_k-pmf(Qw+qkJ+^A2A?B7zgq`(aMa_Co`=I?LvGD_8$ALU+6!?&-~z zoHU&rwrlisn6=0Wqagleca(@d+H$@)OjP3E&HPSJE|Ku{&dWCBmQLrrT?|L2}o;}Zp%mNlKttg(R~YaL)AwUhlurC1shrZs6f)L7GYM4Dfj*6<7ecsZb^-wu8>p4{fj zJmSA#bYI34@&M%ekJ|m*Uz>(JjgWwCw#Tq!ev$CbU;>VU2cQ!Z;>a=MPD*6`OL;Lv z@pqH47QFdEg}=MzWz$;QM|j(X$g1x@f>Fx3tkg6gOrh%c*iGm2pwdQlh)CdxA||OR zvqFdH7n*wk@?ZKjgy)ioptcG!Z@e^57=0XPO@}jCIVS;~%%z?m!R_(^|5ktYY5ec* z8!9kR*#mfdDo-gbu~HC+e#u`60*qP+emnmS(h``x@Nngwhc8-R%d^fvLrG#tS|SD| z>m;(XN&Kwn{eEn-!Ib1k@4bHB?f;6(F`LoOw)D#+ytjgqR2Yk~1tSPzaoJ`4BA!yA zsVwP(roveKVSO}+VL3b#yB#PPQnL@ZY$c66u13FM2|v)spD`IVJ1=?LOk3ns44N_y zUk(T+t80b5$E+?ne!89}Z-;GN=BOo&&ua4iP7rdl?n~rqUqh8YAjnyx2>96w9a;Z! z*Obg}vCh?qye!Nhl(h<5rfsmX9_`rhexROM=)*z-$&%7h%eN}cPTE;J9X2)1ett`@ zKLuV+ShMQ+gp*r?+h~)RwJo5#D+Q6ChbOv{14_sCf~E(iJz;y@)*V6W8h2O0>$OQ1 zRha9t{HVL(tK>dqJ)zcJVYr|nU5}Kh!*zJJ-|yx;CK?g*n=(($57VW@pL!M(J4H4F zBY-0HW3uX=MHXHz>u8!^AZ>|X9&c`nQVxc)4}ag>c3Scae<}gGqxZJ7op`z*Cycin z_b$*c^hWzdNtDm#Eh_jNILIzw*c|{qhfpJ(5fymok|C76cwh9vr@gih?=;KJD7Snqjb1#Utalc7O7G#y+5owSAgm(I8ds)gg{md{q=j^K9+t$%DnmUrlwh2E~|AL(T@qK;N!#)sKq3?1RNQ9 zz;}K*@?M#DnWXuey{#Q-x5BHKeR_r7XeOB}zDTc~eTZnW#2Dpgxb}8(;85v09vmo& zK@kQs&0s~`q%9G_^C??H`=h2Tq+@g@-saoSAA=O9#iot1McZ8HqwLduj08q}80))x zX?5rTl-=XV0Uo^t&SZp@i)Ok#Dot~r_=QxItg2&OU!UBrW;fobydyQPD-|y#G(U_x z)Q07zS9>IVmQxAlzAJ;*86nhNBs>8SYZGi@0Bo%PpS;nkH%p!PWy6;+A7QeMyNT3J zosV=slf{Kmn!ml|Rq=)9tYJLv_1hM55@*f@d^VC_q(gzWZfC!i3AO3ksOU6>I?Wxh zhphvcJdHi+mL$BhKXgR4lG;`Jo$Pc3>%>S0X{V9#E`X)#(K45O3-quAES z?K5jwe76ICw^aY@Mq_Ab?)Mhi3e*Ymy^2ToC+znYwT2~JOXj&Kv~I3RzkNl>S^EzmUJ2kO7Dlu1~XE*ToOuTQw%ud=$G(b8b*|Ld!n z6#w4%w(F%HPR(R!`vh4b>^5+Oo??|^opLE8^3x-2doY!!nPP!0Y^6UkHqb#7*3UZ> z&s-ss@fUfi1vO@(=E7S^#@Icdv>~E;z>EG z2_YgL-fk)BP@8r#fwDo|ZU@x)E%->$Fu@*giT@Yx;du3Oo{OFMOQP>}o2$cbUWAPa zJrwbI44_AZ75Sv9&0SmqWWQiM@d8<>QlwXT821I3mav)SSnCQQM&+)NYX~UNjXl8v z;EMA52<0S$_K48y<^<8RCjYATR?l+}8V8jpg?)suO`Wk2yOmCjFv?;3nQ{7ZBY;*9 z0CR!k(3Jm?;)2-b@OSWiF) z9|I4Hu_fuMYcs!wp3tJ#s$}D@sA>1lT9sB^&x>d9MN#U=$G^5Hf*2cZAf9KFq57)o zMMy5EMdpw#y2XvJ0GPV#kB!GAf3qHRXR57JvN0ipLw|Gov%F9wrkt!+L2F8(+&P@= zyP+Kj!R6eiKH?;T@vBcSz2kNkK%$zHeaG)7g&e|Wldo!ZmOA?`!kce~#ZtKD$yeLD zO*&TL;-v+bHts~euPV*l5+GpVifAA;wX@CfQ0pDLFJRui>hB+r-@ z64qX9;ctByiMW~%7Ke`9pW+b=+W#zwsENP2$?COkUtBRs5mNf-FfUZ8&XM3?HjaFI8|`YEO<_&ttr6xtiKmVvx!joiSFo~QRG3;qcJ z!?=zn&BG#q40IWc!Eh+ar^do`D#mQ?dsUecz`TSQ!kBKu2+8ICA!{me&P75PrFxc!1)=L zeAz}Muk~9ljwvAeb^oY>+WD4pd5RFKDka+yM7ucG#9eG(`;o1X1l18iPR24@Q)edc z5Onjw_FQvVMTqSp!Fs-Ja8|k3)(j$@qC1(a(P_HIOz83x#$fa7<8F(~k%O>KU5BlDX(|rZsKFsJ4ySOpV987XXS4s|d^MA(NbX zM%s;A9-bA`;?uGM6(Gb3^vm!VF=#g1oZP<0Zvp`k$Tq@iiG2C#LBr3Ff}HZs*=r;z z)kF#8qYYu376ET&h(d0pp_wWO>-;!k?$cy@H0P-R$BUJp^eJ zlZiBi?yC!y3T%fC=#d$&j>_^ zwOe@ZVO>$o%P#~ob~o<55)5&ar>4jdqJD0e*O&VG$|3g?cMD2Z23A1&Jx(+pB6@(36FUAHRo%z>eEjTr1s?3>sx9~;h7==vy$ufL@bX}?Zjxi&^ zSf8jOgo>kgo2&a@$V#55f@L#8qvD?h!t6fu{8tnU=+FPeLeQ5dc@i0|vA0h62WSV4 z3Zi`?AN%R77U7?~45?YPQzrybleLxQNt(!g zjZQ6Gv`Db+E&I&rzMjpIrs6OJ79b{XS0sJA9ElzHtY^WvmMq=e0E+B--19OzRO$Lh8xxzfG=iPbAhTc`AJCS%+{tz3#cQATAQr2D0#W3*K*O|VvRlnMxvH}zrP>64>#*GROZ(1JT)8k zV!H*a=YnXD-JyL@%rve#fMziyf5&^EG4vRrV@jJ#m0wOhqQZwx8X8KrTbFZ#gpWZ7 zf$SnFK?9(Nu-qZc;^ZAcHD9<9jn;G*JJBln`b(X|DTw|T7dPyFgn?MZWOZCIlXj>D zC-^2C{Q^>EO93wpdzGNuijiFEU0`HQ-2eWWEAo-Bw=_r;xCQ=WCdH~jA9%7Ty?juL z>(LverG}sS<5pSe&?P=Gb*YVoUQmb8wWYZ~qReJ3c-C|ZR9oelr|UNFNA8E#+Fmol z7X`nDZ);iAcU8=yQAfgE)|zb!5dYVS)J(c21Cqo|#~tX5-U(d$H(2(&G^hbL$+ zS8i=3s|O2VwM%~Qpte1L^?T1Cg+nok?xpP_>&(e^m|{8bAP8&eSu<}9#mDJr{W=#L zIOqu6JhFt+YC*&#cKxjUheLZvWz$@cTz`BSijAI3e<`UocrDZ0H+u?(Y#rPXk1s*Q zeaI!oH&Nrd!8hYxs0S;3t}Sglx{Q~yioW@|_HEl+K7dh1nBsx)Elxr=ii|!C0p5xh znA~eDVlGCoC2ZL~M#Pm4UESN9o&RQ*-b*h|TMhq`@|i%66sCp%Wm$?yg76ZWiw>b{I~v;;HKD#%;_t&H^V3(_`v?hlelQzbIRgLDY1Z#G_rqf!My5V2M;>R;;G$wuW*?jv@j~?Xgzmu}^qk2_S z&}^rX8uH@y$cyxUASm%4(@qplpsh-eGab%cicLnzT~og=SitN0&g;8HCU*=B=-bjl zLqnl5S{UR7SAtlA5`sa_IDOqzsP)@R7s-%hL0VTI97eePLstI;ITX&$i!I+gaAp>h z3Z?^;ZDK*)z`#IVXfh7r&Pd9lFjWJOp;EMHgRBuxkyr!taOBI+26cxinrE5Ti+u!> zl|{{-8^GsQo^5KpGw{AdxoOJ&JAsNHrQRWmwN~b%-gp0Uk_rBv-d=`?;~vM4zeN4P{9AxKfP4A|DR3;*+%&{CIZnQZ4i}t7ug=yyirVh*jR3Re2d( zWUYT*%KF=D;P;jsPNi6-UrKd+r{zt#DlM;7wi=?bJkY&nRm2kTR#P;@jmM#}I| zY^?7zO2W?U5puY=E?7x732IF~A|A5HE=abe8zWEU_fEsXEVGn#40@)C{5_osn@Ih~ zr$@!c-Y5^hl?m05*nC?h9NhiBJi>!KI!73Bd0syFC7S#5*cf%oi!WacM=p}ZC&ue% zf++SbyY01R{&Tf|pO*bsp@O1}U40MqD^BqT&g4-e@0{OkjEyo{knUI?2CBk`^G?k_ zuPQ!hY-kRGs1(w-rL@1;pLa7>Df6O0YWbj3xG`e&yi^@V1{PluUX4_}9p>%6?l4*T zshD}|-=fQg{n3^zg@X|qV^t0NS9}0#+YyL>JZBy)k285qnJ;$4NFrp2A33J`*K54@ zLT=}ekFF<(y!1-R%2}V7O)i)m8>ZHXXKfKmJf+Cp4UENry zId3;VMwnXR@CcR5!WS@Yt7!4vGtn?;-E-D_IQJFF0J^aS9H{$R@0n$)JO;3-?ss(*&nV^S`2s0 z*$EHUOB@^=%E7rb0rdSFfTiiVGLThVmz~|h%g5(9@KSjsPdjt_?_6cXQ!;sD>@oPr ztmz5P19>Ob&kqr$S!}#hmr)FOFl}=n<#=(d*sCI%ubr~Laodhf0i3oTDlgtoJkD1m zmV!uttf!1g))P-Bbg0O*5uH5d`(k8tG)x8@g%#ND04Rx6C_g9%8Tb!W|EX5=z#Yfp zgNfc{U%QjISh9(kn2$KMQmr~z0_unmKU#%57^!}Y=Pm*_by0+j#@5?g@7~y#hiWt0 zA24geS`Nh`#7{L8X&kpJV{NHSvoH4PSiW^I+geb(J7x3!UIlNR+LQo~^i=D+y1HLG z_?DhqGxfm(_4cEME~e}`o*jQU55KPdyP|Ob|6nBaORd6z#1N>5oT9%|Nw$hw_Xr_S zhr2Q7KVv*69^^57GY&5K@jJB15Hm{zA0>|W`H@}Q;iN&O=>)sO^&#Fr#pIl~n|MY} z0CmpAc?b|~3MzT{_()VYaS6%M{|}sfuT202|B3qrRP5;$2*jpP+4m^Pnc@V#yBgJ$ zY}%15iZkH+GMoL?=Y?#5M@o3lv#u21!1Ucryy+ZzAXpXb5d{Jh&j-dF#rsN`L(ghe zsmaqkzl7Z?xJZ6z2zw*@uqZ@1%?Cb_403L$`#oG-=~r*w@WfZHsy=wN)c9)AryseJcA>N=v9S z_Gr@~!m(K>UJ$Z!953a7?FbEfP;WX`+W;Q0PdoiY&uaV6UI%A1b0t0C0Y6OisyUiF zybhz1?sNAbNsuD8R@fYe*oSCLwNI}p3CGm_yB?X)jG5o+Ep(?S8fC9-{BYJm6C(wN ziH7Lrn+>Q`Bl46De>ymz6Wz_0RN|E*uZdglruY(L`@x|~gzP`p$IDvn-?Fw!2m*yn z>6vQ>lMR?CS#E&<>F;te8HD#ON26)+Y+|ITbv&9|@nWWAx;2M~!j#T%xQ!+;Dk z(WwESDC!|5Ym0yT_AS6d6D=LuCtm@BKYlFb)`HmFU1(JnHlG};Wy@3<9z=(71I^m@e7rROp&4KFBYFSLHg(q^8Gw$xA8GtWPjX8FiE z)25Yg1=we9@73rfoznfjiDs5qusH>#kPr?Z&Pqf_9YkDH$KW6eToqnuCC`$D;f4S_t4T?eCnQ?Q}n15cQZ6x*a8hYM{3R0>jZwJ zPhd-cs?1E90h?naeF!Vi4S`2`fxZs0s{BNolG@4(#glo8=3+2wV_PV>W+%q4H1hO= zB(em`)g0*-tlkV0J!8JqwN?-4JDva(rw!2&zp>bNux<(JE%Osf`=8N>44ou<7K*SH z1(F0%ISsSpExy)DL+;Ebfe{Gr@>>Ew4(2>x^9SUzEB>D&v{(V1<$oX^HZo8#*)eRG z881{+3fC3Au|LS@63>`@E#IR3=mB7n7+Eid>ghi+nEd6s0BP@5@H@&i4g)I5*YHHZ z@P(5G_B@}dbWGDqlh_bq&xCK^Qie8}Ndjx?+zattti8h6e#pFhyIg>&CMf(Cjm*qm zF&*@OSV&(aYFYo~9^OL|3+m^N1p<3Kwpo^0Y0^pEyc-o3tkD^M{5I(kSPXNrako!) ze&XAaT0tan8`lf>=fBgj5-d1t+;l(5*!p^s0NIvv?S_Ob=n=%NnfPpo*M3X2f1XK5 z3WHvXpY>jh@&s>$WrS8T&THD^?pX9=I#b^gp@avjVv7MB|SLXCvlm?G)OVoB&n=RJ;oCz#A z5H9w5!z5nAJLqo?FBiUXthuHq)Q%XqKu`sWPQqYDGg}q2=6sfqHl=yEJMCnFTpGUH__=pl9x1grKKHYSE66S~{!WEONIFz8HpH5bn6*$i} zWGOgSB`D_J3{Nv7NH?uqK4FugW(T$L#4G0hktb$dA70J?M_HD(^!(-DQVc@uabj6b z?+b9~xXec^G){Fl_T<_6u`R4lH$cy?)c2YXq2pZJefmV@!yf^gBh+~a8}$qCgZZNe z@16a+fx2zl%vR=au>wK9gR*6?cCz+4OdHN3VhPM&*R&Kk7nQQM?Y(!RwK?+p@j-M( z5F-8l(RA@y=U{?FzP2laeva9awW?TF8r0SV_&DVP&=9^QTwXES`7Jw&t4HBr%rY1U zKq6S8(J8IR7)86BB==+z-Q&JA@K~OdR8&@um;j39QYEaatKw3xk8Wq1>r_2C zlEQJv54XKRzm8&oTaV3_^$xA5E8J`1z)$q-WM*$fm&xFlCFD# zEpu@*Yeh~CvfM=W{i6~izUbiJ8SH|``*;|nq@E8QQK^A`saNS+p3Te02?lZ|SP(@d zlD7<*Xz%#3-E6;2su4}n^ zH**oOHm1!fjD?LlB>`;IDZJ_0ic0|&s^oW6A~%doPC9$JeZIMC`h!8g3Zr8+T~txT z!~HLJ!@kP7AQnzm)D&fUSiyg0@*cGc8hC)jYzA)w_M+HWr5~9=h{Bp-$W2|^x(5(h zTDn+ZktpV96#^P%bye#a(aUK!Xq=J_dgV#m`QHplF+w=#H@QkCllK%*`mv*nSsgs|wA%l9e2J|GDP z0diDimL3H^XcooW&vs;+qki034$=krK&dF%S-yUQ_AMf21!|Wqjl%N`&u9?b+TcWz z*=jAgRFdv;b$JnSlR8k_>iKj)ZraXOwr!Rr5M=lNTx|T-)PXLyZDK!TgCiWNdrN zetDJn?L&-OH1Wjz>6<$_U~a4rVPKeyNpPRpCncj$;AReF8&Ifi*DbDUP!%(~P16 zN`84GlCjr*B}yi$dg!E3F~m}6N3og4s}aomtGx%29oH`Va4~;M!E;+coHZDCF>o=zQNb~76<$6jd+Z@ zx?clWO?BT{RPJEG;To-P9GyzUyN{_9O=5nMI#s7dZ%ngmpnBC)z5~0A`mbKS+A8FM;`^E0C3DG^l^5eyuY>h*qQV1|qDu|3*=UDc znA(sjsb2c8? zM$ijPDxnb?-yhpnAY5)>XEjX*=4%Q2jpH;XOdND^b96muWHsd?V;d%br8ICmJjD76 z$W7OsAK5Td20=mXkiD_gN(bD$AFS#caWEi$e1D~e2SIJf6dD9i3(zYPLVdL#AAr}T zTb(Slo~f?#Vun|k8lySip2sJd&7LHg`_ic| zN^JuQVb5Mld2MZy5y8g1gTTwSmR2uoj1*?cmxZ*fpbM%Q%};FWH4rYZ+%68E;H90Q zVq(4tw*a^#z1vmJMrI_HE*Sp^x4yf&L0p%)_QCG@`4`3~E$O5)ee${HJf}mFrb7^3 zEx<4l_$C{ZdmHWyOX3F%Xz7QmxespU{xD8NkDXb(+#_&j2ojgVNKdI&V2i-M1{pMO044%hk{vXnJAjJ^xeIFZkNw9Ne82JBz(bwFa8 z7d4X#0)ARU-6v+#p0?c=DalyK;&bNcBwzKSD)rC7uHhakp3Ych?|fxz+`!#{>W|e7 zyn<;fG#ZmonBfT*!`T|u_*H?8z>xq0+Vi()6U|a3hPP1B;?^7zidFZM3B9|@n@4;WEGqSRp>e-5D)JjcQ`loA4l zG|+SbrNo*6tW*MPttuK@nR4QTS2uMMl>EDzU`p~ti7CPm!?#4HnEd8lXST4Oz zc%Rc(cbY6%mU=3D9`RS~{}2BIzm+L)2ipC@x*qtgD~s%})zv*?I_jpROZTZP>UNZ_ z=*G=|{sYW7eguE?iXni8z)P&^%K}KJxwV$)HPdUUpk)E-3e98(!q^}Y?(iy>-qiEq zTi@?E>IL1tI7yAeA;XdTHQuFThjSaB9xtpcEQSkN5lKPQ4W%`{|ByHqqx zK=-iEuQ@Dd=FC)%xCE{+L#7w;@FQ4g9848{4f+;{&g3SRzB!k>zmk^!F~3bXnXDau zlWS#6i3frG(BZclQjT-(`2yV;bbELoum!|RBw##UR|!MK4|KX31{!-P=ESw%)9`x0>U0*-rJv(mqFSHBlj6EQhzwBLWUnYy@ z=xVFUKJ|c*zfS`ebN=tIn@MQ*<}k!dFonb!9%;9i>Cj8u9i&WR2-?O=E_g@`<4{)p zCY1-T6x-`)0%+gzr*|W}3zD}uPknj3_;Ad6qIxUncX-%k-+yj6n62D?e`^6~tN+m! zTbTb=>0H}_jR8ePN9E4oAd$JmMpI)4<7jprt_R367skNM$A*g!e(~#^Jbw3nB8}KJ zy&@x^_TG(w+x~Oo)Z5}+-$(p0S$2AbWnCslLl-WzBTTJ}no3RE{x!d&!btwA5YoY1 zq8%+yL&hB=IB%z(cFf`YFn;&WS$fNB`OlF}S}h*}RdtLX7$g3<$T>FNZN^Y}Z~Jq0 zYcfpo*}&z&;BW0e2j)rMo(lZ;jh-g^dk56f|EyaVzQv?pzaucVVQ_CNbh}L;O+OM{ zWT&zr!KZx3K=VZ5Z2#^jc|xe`Y_V&_X63mB-IxC9fM)#Xm$m$5N#MBxZN4lAwwqjD zc-%YEkj{Lu-zgji9$hYnOhH@g?Mjo@K-k9T{cdYiR+(S(^^kAk)^fg8pAjbZC0@E~ zvu}4-G<$Jh?Iw8J$A|mgQqXn%wSBZmYfsKje+W61aWiyNc=y-FKOaJ#KWb(W zDq=jSki`u+9T`|1tpq5K+_fw`;l$=Ty!c)NPc!X0a1?*9SKxZmdCd>S?_~!Tt=zXa zK5eyRD4N%t4$=S?07lk0M`60}L(EoGYqQbDo(h3bK_|lo`cAmqRwv}WH`*l~fUZ&E zci;tyVtTUoTi}rLl;Ym42Ku)agJ`@~O>e%GR_?*6#^!l>s}fI5z}t}YKQz-xSsHRf zSMs1=pVMb>N?L|H9Bvy{Etcr+1#jce=<+v&^C`cWy>MU8yXs1d)y9VI!t*r$?d9}j z?k~@HdIiS)ClfSfQu1!#rC^fjw-nH=XGSj^^7v{%pW7{#4-a5RL7E~TN>>ivb?@o+ z4V@J`I|jW>8Fnz%W?;0fKsw8~s8>)+LC0~rRa=GI3ZT`^AqnY2R#p?ps7del<@;Fy zbQ|5-;ye7@wef$$)qLTG3?hvY1g)W+$<5P9>9kj`AqcHd+9Ep}-7ivqjMYhiWA zokKU~$IFZn60dKV_kfp+PlcT7uCZ%+-R(8K>dOiOrh_VWf@2BHF*BpUvXbUV`Tx=rGu4>n*E)i%q;WfoLT^@#En# zw##1AA=DV1$-9z4_uKJD_KkbxTGlC6^~;)WBgj+VuGDPBiuX|k>OD{(Jb+COLDxed z`cF-LYDdZN>_mNx-Z-8oWMXeKDY#Qho@4sw$Dn1DhTWZ8Z$V8G(r!kckdW4u6f;Wp z=4)!#tg94m-TZX{7WDY{4)uN#6-#TI3$ui|t!F7%h&r-n50d@WF|!LwRmRn>b=e4& zWzX1~TTN%ufR_=p(!p)vRK~k7hS2B}fJWb~0CP6dwVk!;4^XzyjaG!t)L zWyQPQM_W62oo{t*1)$v*M*o=@Qp_o?5^qP@C~vMHx}Xjzwj#1I=1YzT z$E8gfc8y86aR)%b+V8G^e>|@>SD!W$0PLQ`E2LtFDiIvar(Soa$;q+36@`18rtO9@ zI=fddeV?ffd<|#_TL2L|2(6Uh^ieFa2oqMqj#tcwJ$>w0ml4G?8DSMo|DykA{^MH9Ju zM`{am1*Z-ffTmPy9#Tm_D{ypk#Joj|SRpWg4&o)sURPI-K`oSz_2}>R;jO9ud`!4U zUf|T-<3(QZjgrR)zU4NXXfq62ogz#GKp_OQ5~WqPnFo3NXI_vWHfICM%*mf<;cqx? z<`bz?gC2ELhny8lgz3mHdih`XHn&EcD4!yAJb%8+&V}!jgL*?TB?61goxbwMdHJx% ze@|2XTH9=L;|Ei`_Qq`cP4B!M5nM~EHmR(*DgfqcT5ji$K0hD}?3c2@7TGY4iPuEV zw1rluF)Oa{L9-_`8`Q;sJG*`Fg8{P%MB&V(TXdnEUV$2PgBE)Xsgj9%eE>OuwoB6j zdZ~ExJ9cT;H&Dl377-Ks{jH^&{nzgh2dkVX6_UhkZn;Va(1;y?ZO`5W)da;V*m4W{ zR6`!=%qUsvI;fpfy-lSZT2^O8KyFtp=jMpVn5T{201Mmu>F)ejuU^5+e^Scr$gdU? zuig6SSt$kcZ`=abQlljE0`TSm_=_xxBm7WXO3p7*D$X81va4Y04LmtZZW%5h*U!`j!N-UsS=I6!%wz@Fl=DjxoJq5 zxeol4PBp-I79cugGt2YWq)CQ)R-mm7O{w91+N-x}^?vV6M~wjS!MtX--Dxo^$&or$ z{fP^ECtdjWO0R@$)5G=nt#&6rFBmNUckkU}p`G=iXgE=4+{JUP zHvN`F!#mUD5D?KC26=*n3;1N1~$r0u-EqrRn-L&`Wpxbx+y?#nCQ{zWR<4#%3ratpJE8`8f z&&X&ejc4hU3H`g<`U5#kLB=8<%C(dNsZruxdY=X zy0xjrqE7l$>X}j1&1CZ`Z&5H1Li;jPNdS-D^&Zs}l{Ry{9|?sE!}TENje(j&adzeK z0~^j@ky{5D^aw+fRkpe>r1D`0CT{KG#Piu-_kwJ`fE6jwOt8nLVFRPo61Zi@;iu(uqSOMsvy;2Z^ff>+WVoP4I}PiCc~pOC<$d z@}!+~j*g;6{?nY}Fy)Q&c?4c85=lW|ypn`|P%Fv>Vu&mueudn@?sb`6B6SXot<>{8 zsY2LO%oa5nSShL6n?bTDiqi%)a1pqzkH1lr@S79+H9*Y_yw-j1Xv(LWKrb{VK=x+E zZ@WU@zZnN_|HFF*YsVxLt%-p)kHWi86secrdD`hcuAh5<+}moGk_cfI%mY}MsD&_^ z-gjWjpWi9MR{vAc1v7%zIY4B~psD@p{m14T&B&?xI1(d4-{ea_-bE=a&ML`C4R7(r z^ls6Uu{axb6(kS+WQW1|l=i5iQvU7ci_mt%x+{49F~)vxdnK*!&DG`ijLvYk!Fy9s zLylCu!rRb6qPiDtQSIV32#rdXErb0J&8{3*10Hy?Mj(|P0Qr8IJA5#%=m!~ryaMh` zh$dJu^Ze$e<^4Iiqq2*JB^N58SZkfc2YFk;I-|Fjz=kz?fpnDc%-j>?Tql`V7*FM> zpgKPT!vTXGP3A}MlS&b-%bwj}#dYTU67Fx*N|Jd=vH|;sKw0-AJ1tf8&Yc&)CD)K; zIx%q4xtc0vt5L*HwAa!f;!||`Z57>9J(%+G)Vqkdff1mc3x$&`p&SnsPMC8aWST-d z&4COWeC`*1TBFgu>oTsx&Px%1Fzw?9R?_E7Gj*B3-$gNbf9(~;{$?7((A~6!WMCco z#<;u)=+FM%j8CB%JLW3T*32$_&$p*rZY+z+jsVb~`!d?Cjp@B}ktIr*_Vsrm%fdIH z6*8WO8>E7$!;HZ)d6Y0M2BoEInAug3a;4HUKz$(zzvlb|}t!HXP)Sdo8p4 zCE$^?3{>GOk#j~wtPEg2-S=a;_QY&AzWUc&vzaVm=Rj5I^%g#cFR}85h#NGQ&R)wN zXKVbXiug9JTeH{aoIB*)ttJp;`Ao4!s%F&LQc8skc{*-dT2(omjj_&*`F0JLb$FQo z^?l9`;f@0fWiAt!T$`F|x(vGX9_-+a_7J9RKbKp=e_gp*1bX1g#izFBu30^{QmB+C z>_VG_+qQr?bPL)f&0|LW`9>#V###Jo(uDR-Y;RtDya-E=(y4MJqzTY+b_rl3=Y~>! znXa&lqzD29zHl3yR|>Wm;}R;*f=3KI{V8F3lL~Z`FIV57?1vWeYsM7rhX$y$f%+t? z^&B4o*-97yo#~u=G$hFbrN~8I9q;p=m4vRnOu|$?hC6>`cDx0=coWP|bn!(l)5_i; zd7}97*ZAR9soFF~*-GJps1BZsi%U%MIhQ27l{SMHH%CJhuM{VUHaY|Lnk3~42Zm&j zXT(y~Ndu!Al&B0wjk4eH{%So#z2};**Z4<9hp9mkN_oDY&&N~Un4A5&Soflr4Q7n2 z`Gy+`O%D$gDp8oU5agM{bG{Fq9C=Y;j0$fe5Ly_&-;(~kPrU>Zf(^)Adi zZmMa>+2<~P%26rTIf`?=FB$l}Z$})>? zx@iU$!+yr8ei6qRA?!`}EGKY8VBo{8{=DF_s4JY;NbsvkSZiLPX7F2L9>xhihKXl6 zTS5Z@Ii+}qD>T4XaRwJ9yC+ag)0s8XV~y$oAqE!8~P--~;-51xEL9 zU<`eLZ9~n^dOdM{1pEd(C%D6k$t>zXAxXWVj?_*HGElCED65=8IF?Gw)eIt2mbekY zC8Lhk0vfch=TF>L0ic>o=x?`IH;W_bThi;3ATW8$6L?)P|`Q3jJM+$5-f zs!&VNoB+nW8u}ge$}jg{E92up$2h%6jjaKQI|fi&-_ibfh%On+^Qf!X z&SDnf_EM7VoJr-c=2w;2$xznIDhm)sMYF&D8rOFSKMSh}W{rer>?4!e$(`QhU==YB z8#ocU27w`YXK%(00?Mte-2PCf!H1g!8Sv-8#Va`yt>Nu=*~!xzW!4!r3C-I!SS4nq zwBCJpr9}0~P~Y2k?dmj6EAdgozmqbgfp$SRD#6^w2t-AEuDLRGla^W56^gsojW*@% zfzV<0V`Kdr`Cjj)0jpDvtEZhAI2+jU!J2$(>E1n9w#)f*BibU5((v-{zT8HUCBb=1 z;rE^zNnq3gA)p)L@a<1B__I~63(kCGm$27^JMYk)WO!R!a(aDwb(NJa{}_S>z7{zc z8k4_~8+q+-=M;0B37PG+GFnq*L)c{uAC@3)&!xmV!Mp~`=L&+(r;M!71=pS(sxlzN zWXznxv9qe7dwDBQn26wRDkiJZS#5#cc(4NkoK02}Ictvh38~5AIQh&7P{5JHE@P!~ zAg@3rgm4Jqe&)U3mL!>fSA+*R1keyg5De+{X-SfFYtS5!_$;{7se0EM`xO$p27^QL z|Ko>WEdXtlp;6PqfbE{33iQx8hra~sfxKrjsF=n;jrZeb}4am_q8+iF>7r5TP zb)Mf+TvydPxXF;3?#rm2Zla4))OA=_6?(w|hz9Aa2Xm#APlH{-GLZ<+a2_i3N?bB3 z9pzYXl*LDu6MuR5rm>3r8*^??ufhk;>OM^)O=<%r;MQX_k6(o|HBRs+HQXMb#%NmowGO<#W&`+<1`a~8I@m9%n4P%iZi&d0M?U;uM+!fjR`Tt9!wRm zoLyn{>av{FOVOPaoTO&DNHRCwnRST2eFf-iG0eiF(IZ*s31DB?Ej&jdEUskmbFSaa zd$^<5@5*pbH9W&Ebhdy|;WVYUggECtbcUI_5Cy*T=>H9g9=K!%K$dDwtj%sSw*Vc5 zeQ&UyrzjG08Pq|jN4$&`^0cuMs+<3ikg>AbXM8cjPqIO)_Ha||_%`K*<^_Sff{-k} z{-@hoVIxmJr~n3XZiF2>7cG5L8kzra4S4?K6z~By?O=Oaf99+0a>DTN@Wg>abs}gD z7h;7M#+~D9K5GF?sfGc~^yHeHuP@@g8oyEm&!R_WGMR*cl9hazg7TapH#yZ*Y2LtEz`;*v+ zp*E46d3R=<)sf$XSP1jrJ*y|a!1E&7p!sw=! zp$s^Wn8;TWzhsHS?`vd|l-)AZu3? zr^TT4LN%AiYO#ED#=l)z!S_o$)y}BG#ppVqg>NEW0!4G|n3)*TojoX70zp&+f9cq7 zZG6ix^yIOB(_s4J7vUn%Q!IG9^xNa46rekNhLG*AjKKl^b0>%{KoODu`*Fme*Au9v zJzg|vuB}2LebC5MdJNJR7;IN`r#1MRQQHx738+Q(^dCDsJeO^?U`5a-;a`)r0)8;y z>pGa|_~kZa&y8YJ=Dn3tL2QUJW)8@U_JzxJG$QK#bIc?mu15#k0t={Nz^BL*pppdE zqwBl7o&JtsfY7WsL7Z|8fURy$0ohXK@x+p0Cg6hz$fhHAIaYcT|5(FeC<_`2o7#!r zK<)hmce$-!iFLt0I|7tyx!!uS_Q!0QPdnK@c1q7BBYPLesz$(JAouI?+jtWW%tJF^ zO#AE$Mb|!WHAisT$OQSotm!l8=Dy0?&I{FP01)|#2!IL{FSRF0t`zvPLiVV_d}uS+ zn_dO&4z|3yS7>K$A|t7P0c(BQalE7<0!YxugCL8*=nc)(S|Nkag~JmA3p*m5d#}H6 zK`Yk-vbQDs4Ky6MzwVfGwCk8ErF`jb9Gg@%dK0dC0^_EV_Y_$ zJx7z2gD~;qlnM|VHUY|+X5DDMo>`uvES`xt73CuDFz)p78d)-Qhh zUFfhoAtGP-S-b{}torlH-vQL-Y`fn5MKNl;+HKY5U9oZ`Kb2*SU-zv=u79IcO7qm21d@egc`wEdZhK5f_TF@ZS zC7dI*hsyf2WVP}}KDvpUnfAXZ=-mA=hA=|4=tG-W-JGkCNS%g$LM418Jq<_DZD-C&%&f719+^pMwN=iBWMlCkiw8rnA zN$M`kMi8q>fxSy6;tj_ueF$~#5zhG&9iZ4dSPJsWZ=@zd^Q#aA4tJ7?ukkt2bf8;? zxq9olb05a>q5XGHCz)++=KIU&uYet`Ll=K4uda!wRnwX2uf_quQ1bHHj!<<{Zu3U4 zXfr2pAg31e19q-7vCYLvY}jt;ipQBdv(}>{H~)~$ae}m9?bdVo|69#dm>=Cq;i(0&`{6Ia9wkpmnb=mkab`vvU0Y&> zU7{!E4hG!_6A`#zCV{X%b?&M_!c*^Gg?Sg#+hVkac3oCr--PZQuL+wnCzGVf%yI+t zf||lx?|8MGMFS!&zy{Wc4B@g#sa~dVZb$w_l%vSN&3M`X>ox>uHhA#h0rr~aHo8{v zq}5=7IT860&<`f0uL(vFyeR)IQ-XAZ=C?!R$w$D3*w1WcyP@CnBaT$rnl?o{P~s%b zBTS+9X<%7p5yk54gcGkAu!5q8_)J_fFQvcwm}1@!^swmKb*L;d($q!B_45tednpGVeh_V{M#kLK z9LTngeuuS0R`)aaF59sMEhdj>w(n!TlShGAHK&-NHS$gzU4y(*QdW4 zOhRT2*J9#}?a$$($Wv27A`l!V)VRtqukSNUr3XQ~` z*SWcE92~&3Q9TA~H{Jd3b8J(k8}}4LuCR1UM;^3hnHV;to91Q~lW!I+S&nwZ4=gQy zVv7eQmqBP-D+z0VlFm%(qB3cX z;1m8+bDRiAZNJntp~_n#5Yk+l*omv&6SYrSHqj>`)TlX29|YVqTJ=o(pbf4c6dI`+ zdVzQR*1TbsS5UWzWbhg~o(jlq> zId!~3)_HQV7!)Ii3#;~HRE%Z8O zpEf#0s=ZF7ue(yU_wzmRtZd);Cl2F(amWGMLqx)F5ZWFDi*J3dZ}@`--7GpB$K3iC zky5Bg#1M1{@%|J$e|t<) zp@F74|92eIl|0bBIE;iLP+;;Jtjl{1( zl(UP*fttDlFuRuk;``YJ*NyN(Zzvry#m-lP?m2=qQRVNT|H)SnM!_$I@R^u^f67p^;oU=67V)VSd@P$%*S&!_^k%=kabbi%kAD+okIR*9+3k{41Fp| zAdD5h6CJZ$jhb4^dTRMO7*y7jLO{(;O32x{Bj;wN1M9`rCql)3sN$Wn^bhlk?Y$d= z97A40@Q-xbR8eVn-``WKWaPD;uxegWx-9BmSnK3u^dBZKwDpO6UEu)U-bn_~O>yZ; zcFLr6eiKzS=Z zhyX2xh-~3quM&6JyhP#C;sJwC%%y)ao?y$Q8hSy^KtFmv4T$zc9THOihpK|K1_bvNZgou*ix`*m=}^-o$K?)8z%` zHdgx)b81DH9luToXJnG){ZY8rAcfPJ&LjY<=iX}()o}tKmPwCX8P5VBEc9e+GF*4( z`9C}a)MVC)|B5GS3P-}9p9_WyQwNHhjb8s-Uqq0hYn3-1oS^8<5tXB6_{^5Uc;9xV zWWmFwKohrLFen!E0mfk>bl}!ywVLM}Q-4=C z34x0II?n*R(NyGd=5NLCKTrXb(sH!3&I$M|C7Ry4RbSf{{r&({t6<7AcP1$^=Rr0q zuI=U1!3pzZI0~!DCV+YT@$ADpO=5xDp!R2m9=v3Ts25ISJTWL@cBjcXa-OmMbC-5` zg=y{PI>e0s6?j0f3G$Y?f1a%2gDJiAJ%IN4!D1qmNEQsHvAG3v?#V6)kQ>qpaDqb; zGBrT{h02eMUp5$A4p0+cCAX3^1nUH0!Z6X_!B`lL5~d-(H`x7fTz(U!JN&rT@%{;WSCcBn)5kv>@8)p68sf9dn87L;*> zCCyNn(pH)74-eGI3gOv7$!(5AZL&zT)s=S4x_ZBH4;&do&aCBngAK33l&8sV_)}ld z41~C9ta=a@;5apkYw3R2ntP5ta7ihIX>O|`KK6g0(c*r!8bANY#vn1 zAu;TMB4)`N;=I$uz(NUT+Pr1Z!seW1E}g> zb2WADR4Q>JWdw4;;z_Ar@>`IreNEiF1?q);SZzYfgfzO_^Pc^;@;*o;s2^6$1sVir zfJdm}e5S1-M3_d8O(g~tVmNNoqE&6yO;pJ@X&Q68C+MtJOycgNQAt7r+>w86YWl z@F4V87+&J;ZT!BnsCzun!TtZ3)Q|ASx@vlL7%qP*E2ZSWt{q~-z<+oBLhK#}^7{Qc z1D&&o5u8n$;RC?0L_=Z6$__{B9ljOu6=ExsIem)aZYzXWul(U=`$h4Ad=}X}+iTIV ziWp3J4Pe>6N4XnFM9&3SPG|MdmGAy!ZL-CXqLcYfVwVx)0%I&#AvneR=)Lb|cn{6f zEfUGb$@@WrP`m@Txj0ZNUyO3+U=aRM=i69jnjA|bOnBWW%Z(GtQ`|n$%0kBG+O~SF zIiU(P)gZ=Frdt8v{iKXTiKIvDGYR~qaLziL%ewSv7R1k(gJMZc8uYe-m6C2bUB*MC z)8Pj{X4j3TvtZPQsUvxgW_hJdlNJ1g7Y9_w8YH-6%794Zv%UZ4A+m4iy-UXx;W^pdZ8HT zOfXp1>*Of1g#LBuGFwG&%;o3J!Fw=GjNbYx%*SbUHN6)2!5B@}b{^zA3my-2r9z;} zZ;uSkE`65{3cWu%Ui6^>`UYeGjpKSNn8R778cu>flK=}iQ$AqgeX;GQN5a}A00pU7 zYvNo285r5zi?r$gBiLFA`Z+>1i(!!S9I+Q+wivlRPQ*W3d!exINn3Csv$wyWe<4N; zIHdS71Ii_9E~4wV(W(`k9xBK?y+E(G>=CJ})LxC7S04ux9qk&S%Og%|>pbg##pvF5 z-zk#taaiTk;q%4PFxhaXfUpp+>Ga6M^;Rq$$K{+xiQdj%1@X6vC)v2k#3Pd){bGIk zY>QolVQn^j7<9y?B>rlb9H$-EUcb4!O)qkF-D%PaKaniV8V?PI^=IBiHlU4-`TFT? zl44@RC9)KI=crV5#7=H@L3NeM9{3q053uONSr#6()N^D|gEj8~dbGS{iucr)+lt93^+F6F z9Dpjd$PeiTQm&I)#UFr0O%(H0BTZJO*SOeLTW`5(8k~gnpV!LFKL4rKR*WSnYZ4X9<e4djA7d9;NbH%XxmF=qO3_k)2h{T zS|R+I=;;2mOy^8v@7&4dqq2}%%e0bRnYWRZb3jUNpaUZZra(QxzVY9LRYKwJ;dTwr z&q@9I$BwY?VhU|QS7pL+C5Xlz-PLYnPHL)*BRgoLx2Q(^cs1BM` z7r_}XinlO&9H`EZjuh7ac!o{Kf2%0%lYykTyr&1T{?lGx_}*K;@28@CBf7%4Br&yR z+Rq;0&qJk(F+G!kM&8b~*j8ZuiCq!%gs-7h@Dxpymct;cUgx^5G^wAkcTEsC&viz4 zwv;CD3$TJ1%q+O>+|miA<7Dw0-&v}gXkSSUALjmBMqoWIT$qeHn?^Xt{-jEy2WG^} zjA2LK%X9>Z+rUgvqY^$jbV8J3pL~C|?1V^4Z@GH+x*Z+-2NZ8$j zijl*a(RQSKv<&~GB2y^uBJ?}}34nU{s%=G;T6+c49}9KA2nGk&z}CK!@qVlqJV(c1 z@ar=VoGM#+?YHz{Ef2G`&n%CHyWI{c7sK=4w|FNCG)v}CvEQi+kxI+XUBTn|wmHrH zW=$7(e*z=Y>5`Y&9??JPox?x4D;ZK({Zp@`A$P!rX_O7^94CQ-(Agx+n8NmbiZ(s2 z$Fr-5ZdcwgaA_P=`H{oU<7mfG0&;z)1Qv9hYG|MWLk90XYF1mzNkMY<+{ZVhg^f-| z7)g4`n{9e)n{1K~0=*^{xJnd%O}?~zjqr5*7?k8>U|_e=uI3X{z7N?XXbEi-ZDe8#@SKm##yKIYOmy4P4w0Zl zx@A_orG{K050ogYvYiGqwxf8e?6{Sm9Gc6VtMyD>c_Hk#$7{B~XcEQaQqne80z6nS zmj2Lt&1lXeJi764yj4b`CItIsXXaAKk;U?^SdiT87<2$%LN>jrJE{zMk}X{GR=vdw zxHs$F822p_`R@bSA0o)DlS%Tkoi0!AoJMgu_;j4b<$)-?h zF`(OBI$i08G+@=+-bg#bR5nkzf}ot$=7~K}8R05{S}3U*#wQ6HCDAZ%zAq4*@!MP) zk;JU7qo;~kJzD^3EmsdTbI*Tu2X56O7fU7CP{JzHM%DGmnI|wtz}O_uesYY|lCh{v zto>^fI#3s}`%(6A$1(}DaZCX!%Vg?>hl^{3y|xCcIFa2Ng6WiRVS8&trdgZ@ARW_B zFMFbfGZLO-ZytA6P9@)-|2>cuxbI#$Ul_VN(jas7sB{q7^7L7}_rt-%87_j1jd~A3-WZjx% zW(;CirEop2V2MB~7GSu(eW~`{ zS3nKWOlkbw{sd2#!>F%K^l@P9*CxaP;w=e8x!*r}nWT*0c_PmMyu*_vt6EWs3Rf&< zyun5qY9k!NUIc*u+vBCrgv$j-V?mqS(ITksh+CW7rVzP43?41$2kBY?TsD8$Us0H4MV(SN{2Lzylya}P3qE)KT zX1w>gJ{2nOUHnNh;ziG88fhNryAE$zS1*2P3hZQl=qY=kUbG?VS6iIgatWmj~UCfjlGJez5nC|*43|n zvtaxJV#vQ4kn{IXonJegxO%Rfo{Y_&ZjgOPW6sAj;j;ai$~npW^OdGMQQPA;wqn(2 z{}!#29C1n4w;xVg*)}OAsfq27f`}f+ojs53 z7^9=z^vS@EG5Kx zNwh!{_gW$CB{x95h|c;iKyH1wgH&lUXZTRtM;q_wFIfYfnX+BBsq~B%w0H7$JR&TG zC;-&+=0lnd+6==9!vx>sJkPUJ9neh z=Pq{cewU=XdNS5O!|FF^rga=AS&gHwb=qUPeMat|U z@h4`4mq&4Y{RIp+UffAn1ul}+Yg56j)knr_BRwgr1Kk~Lr;j5q$cOEtY-7F`-?^OZ4R_I z-ccxod*zaD&86#LHOY}mhA znCL5u+SydP%yG%;wFo4=u}dQ}F(HKH>&jdhN}U5h1V|ewI!Kq?QrSJ^N*8PN*8KpX z{2kLl9{T(NU}$T=9d;0K{xZEfY^+TByx! z#}a7HwgjXGs5N;|$?wvrRV>!$T-!&W1xtY=0cU8(&mYvnWi!uT_aGTgRhJ zgtGLQWv`uP@*aRd7e*gzW^g@GmbH=3Hg%5+O|PleI!BUJy>1HSkC$om2D?eIdOIIm5-0h}ohytK-Q( z?~=k~yGFIEFPz)j81FbEk;hb5ROT^&XXI0W$x?yJ4{9nHQd0z7sipHZ3e(}VGMuc; z-R&$(Q!+NjOeAwEQ4R%S)|W#x7dn1RhCiE=QX|)%g_>8?FY0&tE68iD1*8jH;p0>^ z%_?k4n1kpu&lg`A83@y&dk*YO_YKgz7K0nkR}kevp%)twG&P`2`L!p&D|rZ~Em>@) zBRCqJjpC&kvS2*b9TVl^k-&Zgx+Imt87@&N1gQd=bOQ;Glh)AL?EQ9*P%N)qAmVit0-D zeB+H;j{WR$r%xZe%LVLPAPua;wW(#QC`(j=>5!4J*^SX`QJwjLs_de2s$ilLXLv80 zGi%j}6o4J6iS1GV?#p^y=6KN2od*27P4{UWHPdb4GH>nttyM&L8@>7w&i;ZanQgiqaGZX6!&M(0+jxt)|OwbTwrGOJ0ep^0ITD zZPe=ZW05f$0K|VdFL}=kZ|U0aBBstHm=hvr4dq||2AfWM$eSI@dooop)x8S($^Qdt z+~tYOjQ@+H`Cct+`f>994e!{WpTn~0cWo{)SGr$0d9-E%ZU|4{eeX$93(m*+e}DoF zdB+y1?Jg6BR|lUWwnlKy8|xpdP(H)#D%(YQPa25O5)ms+%@t+Sxi}BjSMtnHAxw41 z=5-O@A2)$t`p0*dr6{luskheXiSs^vEz4O7PXVLI)%@eHhgavYT|2V_4hvl2ue6QO ze8uqXbiAc-YVp|wl>6JM0CuraZl#a5hR4wb{F$aiUlVA~&1v!f?J)1}k1(Y;o8F5!alPZb%Wy0C?=1?Snx00k@OrLw6 zqTUs(TweI2-%U~f75+GVlfH=Xr1|s|-4s^_=Un>5DE>U}JoXOqnvf6aqnE)q5(Zp$ zLVM5$gx@ME%@We)us`US{kUyrIpvlKBEdfS1y8L)uf*Qq z1a<7C?ut@98{|}rbY{#7%s>Hrpub`GPnI5G|r;lwHNF% zGSCVyOPM-Rv!uf1qSRunDBoboUZa1=*|I`c6MC2wEHwx1tf7<;F6m_Yhx^{(=>Xt2 z+|203P(hKb&sa2X_kG3dq2J^9i^lGjITo|i+Jl}g#Spa>B#L9dhzbWh{LIx9OQBr-Eg+t0{)_ERt>v@! zRe0g)KaDa>737rl97mXERnaaT{a6|=d5qIoFuwb6uH&bZn++Z9imu;%Y0AKMC>&14 zM(gtfP>ZG0Q>OF$2Lo!_(lH8E>S!1M0c|IpZa zJ1h?1XcP;CO0-nF-r^!JN}c$|svC6!1N>+cSM}@>5ZWInX#X!YgAMZ_>P+ zhW_t0lwt8d5*O^OHSakfYkw`=wNQ!tM-?yjebVhnQ?^1imM-MgrB1FUx7lkB*7Z9D zhu^nMJGiaW*ayCpGc_df9Il2)fXtLuf~O21C?Y4Y1TM@abotU~nb>J-x9yd2Q93CnFZwdSQtPh5z!ii{(z-_P)F5;MO!5$sED%}1D z@FpOtX4;JIpX-wJLU$z}Y&CG%>1h7~CQ&V2rG zefv+#xQaj09b{aD#c=;+YJ4=S&kM$B=~#+XnR4P@X)30@wb^TNO_F(c4%NMC@Zja< z)%x`qzUf2{UQ_cfCCnco=)dveakl^Z5ZRHxho;`MKyzn5FExiC;wH zCDJ0Gl!Vf-=i!*1GRvx8U-&DJY~`j3*qImy`@u*w0e7Xdnf?B!J1kr+rlH zurt6qPT#9YryWmV^W!}XD#Cyu5xG0j^PBibWsF=cRYTdqsb)QiQve;9P}+Oc4&)xN z>aTTm2w8v`FhAR$ENMlK^I+k~d8AencBl^aA37G5bX$c)&IjpeUgb z@t^+%!w`hLh<#uhL+G|Soa;qq=lq~_1;~{Dp#cCZmH-WaGg?J=e?Q(D>xlu4XetOy za+0*w6*$$Zk?rOL<6TYW?(XjQ_g+Y77V5mwXiS#AXN+ecFz@Ra_T~1@z9PWeY2GLc zZ>d*PdC#QryaVR5TFbN(MuzumDuMmUH1g^H^E|S2H+X4<$mth>@%^FfnDM(oC1e_9 zmv&&F=k@vFxWNIgR;jrXgnJ%%zzSoOUcP(@Su>urv$Vu&QB_x0pY|44$T*=9xOP@_ z+SU|2nPz-=V@#9Fm7ifpx9r|fXKzv5UUkfo>LOcJsu#G9*T{SAuAI#Ggj&<){IJ}u z&s3L(_}B@2y1Pf1rj>NPY_ie?!jT{2|NMOyS)HDM-cYP1Lv_#q``RXnP=&}7qefoS z6z<~027%&o=5}}fmaFa|jR-%vhx)eBf*;^M>>wpoi-}motJVC!&5({vEUF~`H*emA zcmv^_eK`=87w5>d4Zv8 zOjInmEvJY8i(ewZDdUUBz}u^}yE(#^tlUV!Qs%eQ_}rARf$Pe}mjfxrOHF}j|5obA zrP`7uw_3IN2expZDF0i~FJ%xp|D!J%x(;#r@Lyrpzp-%{pht?#HWYN*8ihr*chv#D z>R>3<+r|INvn&r8Epb|289^leiJ_aJxoN@b<3;vWrQ*6ZisLTZy(FoH|B-6piygnV z%mxF{brizo|8`r7UR)~ZPup+*7ZXwXztviD2ZIjD4XM<0CV{^`ZMn5th#F!|kPAFK z(uIIC%fXg`B=sGbtLcVI7Ifkep|DUnF!Vo}Q`r=a{q#*vrnwfQ*?j0nP1!b~jX6uV zrpl)Jr^SH-^W|rKXTQCcUIqNCO9$&gW|4j|FT8pAUI|JN2NYqn(iPu)1Up=6H%e>> z8X`6k3VjpR^U(M|^az+n!$AuU5`=*x3lvQtNp=GCVz#+YUJw z;ELKvmb|7Au-1^>&)?h8R8oq5qp3NA57b@s)39@vDN$PL;6~#s&|T%`SY%edX_-Mm z6UMk>O{0^LqgD_Eun?oF005ClK*d~-ssWX$>F|L{exdX>nQ=%4)pVryWKMc#g{0$R z6$QsMMv+TY9Tsh{wTmc%`pP_&mHG~_Pg>lM>w#dCVV@LqBR4qSa<|^3xLxN}Pc_ip**(KbZ^5C7$w4W^cv4c2(owRI)T^IG9 zohqmBIJ|MK+D`Wgoyukh9@7L44oy>HQuY77TZdVl!LPQhU>f3g*GIdcLH7cZZ#pcKq)2)>?I@O*9WbpAir?| z18G>c1EcM?x-%6op!Vw@;o!5$@+h$bG~rkwHp$!X9G&;1R_MJCZj?eOZjcAJIf1&5IP2gfj=xQybRg-h@+_DV zW(x*!q+3RHvb~uGn&e4`b&Hb}*|z=F32Yg0JOdgsXF-xjSGgzdvv=RikM1<1#f~pC zTV+z0I})e+EHo#x=L>!}W~g68SgKzi=&x5s?*AiS|7YvM#_>XsuyskAL#Ly!P!E31B>qeD?ft; zpKQly)-_F@A)BxZ%}daW8PwuOqQG9;>W>6k7a3K|SJ>$iyise-^O7&q!0K%Cpb6}0 z#N513Bq4Yj-Bs&wW1Eb8|zdNvb=O;go}1;>ATe}25iNFiKkr{c>l-WB8Uj$bc*qA=+# zVYr=^(am>M^XIY<14D2Km0F+&Rz{C*W<^RzTx9q_d#0gn*!sQ2p$)Rd3W9s@ZWoh3 z_J7sK`X3FPjZCb1Bf-6c*M~PwVvIS$J9l87`VjS{?#+jzizSg95G)x+!)?7m*bOLCf-rH@U(s?$ z-ne&|2%JOEaQha`18LnscKcCf*Na1L9N$H-0rD1_b)@rZI;P51*9NW_18{ z1?61rh6@-#v1||emp$A)OgE$X6Y(ySZ1DkN=A9@$`ETAmMiH2=J-%u-Uphry0I&}S z#nUZwGW_J8m1SAxf#Sx zpyQC1`DB3QKF=#7Fi!X?y5$V#AEE~VN=G~FehRQ@JPCgF{6P9#GI*owWG4$R3s)Lj z`t6T1y!YYjxW*D+P*5=NDMdpOr2t;z-SfELl&C^u1!=(^0fq_ID=*x2KnP&}rK1HAuui@TPxiC05VJ2-AB` z=m$}Ot}W5e8J&roYULiL3#gWa421In+Nm z1tbL@kyawCZj4~MmZx5GM7TZVa6*j(#-`T;QGZ!`&j(04FoPgZMeG}IPE9>o|AxSX z-Iyf&Zl@<25_@X{HPL9<_PpMasS0`t3x_JUNC9Q$37`Z&e7U48M@!T%RJ{8L6(Ao# zCvC4j5c2s?X%@j{`-y;2OR%Zm|7i8TkUTy3^oN;8712*tj3tfLP&cd+OoO?|km^qu zidS-2P}+|zjoAprBD)@^UplyYu2sp31u4{D=AQOE7x+8*I^!r%F6IM2)(g+`IJymJ z#)aZ=X_!fupd9`RpGs`;GMsG+>y@VxpTB{!$Yu`rgQM{T;2Zae-Tzg(kFcD-+l^^$ zOCiAC9c?&myt9YjEat_Z7T%3Yyk+<=MH2W*g9@lA95X{@j)TRYe{zg}LPP!+DN#5` zuLwgyV_{k3(LjG}-tn>57i?UC65 zK$S=}-g?Ao7spb%(9lW9aB=<_v8?03gVtNVkW}_yf1`pk8~hEji6?VJ-1NV>shE7g z9bE;~20UZ*p3R?OHb?$uXz5N^yipIX7JMSk7v7^AjjFw%++woNVftd(dKP?E*2>Y@ z{c}A9*nvew@27=X_as`T)Am0>C6Ru(|J2`LWOef;OPg0ZZOqfz3#a^`CiJ@B4*k_1 zRCaIX!ds;ZF7DE&?7m$)2I(JuC_EiqLJM0hW+0hXTE~+Q7s%cTNE3QJCy)ixuFv&L zcpOZybZ4=z(zMJzAnI^FWXx5;$)iHV>3kT_9s_?c^i$MB{@ zN?h;QELp;4^5fYrLPvQ=PjW{5;`eTAh(GEjY~Gjd%6Ul-t8o2QLL796fw7G4@Uetb zq2jTP&%i$0Y;LymXV+KkpOrt~N*H#&0mbRlb+7)cA9r`v`?}#-4CiwQkL%!VFTad! zuZu?$^{Y=L4(lui3??RghpP#t1eCF=Kkr^3VAFMA?{o*}z`x8m@w~~B=S=AF zxguza)WiW^bb+7Tw0>kQVn@!1<5u>$LUjCr(o=l(k+GX_eNry=D>CgN1Y+lmN5A%V zMdh|lE{QxR7^ip}ux3tCS>xHlS9?p1ci+*|2;7inoda(L59?!b!d+v23APM^_NlzF zy~XM=d+b8Tt~=q2S(1zjoKm4mH6JxuWgk$)|Krj2}Rv;qMyp$_h(LRM(Ue z<1p;@OOEzR48ORgy1N;`hRHd$IS@)ee<1d6bfUAYWriH@D(BpV3o#``Q;w@5mAEO`Od56v%d{Ya(ZXC+?wuAK^%6Lj^H1+ndW{C zU}JnZoxh%szLfn=DkxKWi;vL|qAaf|OA`GEZy=aLNOlt59Ns)=^m`*safsjWdWr1D zr(ht6NV$ut=UwcZwA|_p2pH}5iD!lLnC>>Pv+3v)>u$ksC0@{_4#Aywa@(EQNVxtt8Eqp5UrR-I> zx6!jvfHYC8P*z|dZJ5`wE_YRxG2%=?9|;xDoS$UQ=%hCGuQ12-;|;j=ZM0J)#&u@? zIrjWMQM{@V)FwwnjH!8j%HlL*eFr+@1vKi{SJdma>J3U5oIlJ*_WEI4j&izua!-uL zeH~}{J&t}@Ckq&>9Uk!LAY5vveUJO1ZStOhZ6zz89AeiUG_SN8$Uq$O5jGXMaOLZ9 za5ER+PJYDv zYz%00Fl5d*3sNOK2_xtkQufzM-h}EbifxF7X3y z*8}!Oa*g`o7shcqkpsxV=SeZIzJ2v-;>s1>MVDM1MXN{yV5wciPbGHz8MZSzzplJH zo%av!Z`!B)>Tl-v$Xg2Iyz$O58Lif|=J@?%{A`O#EQ zqT|R?UO-zGXS<8!dl1|6n`FhPxAZjIvCRI*tG|`;F>pJ_v(mL#4k$~%03BP1mz<6S z^LUVz`H;r(BlBrbnRgvuvcLHt6s`s^nUyMMPTwZY__&^T@nl)Q9o4K#)zqv$D=Kow zF=rF_)P;M-8Z`;Rd@g(*5>KS$rtMI4g{XMT6=_<3%pHHi!4Gk~{c9N0k#*Z=3h7-6 zzeEaMk1+x=E`Exc36FH_Sx_`6n4BM%mp`#yHqG~P*~=}oTG!O~uXY*96G1Ls0yg3H z`y-)rkSOo|ax1jA^Fi|PU#jm3gPek-5-3B07)%JFO-^j0B(7T}jze*;l!u(q(7G6{ zZ*TYS#I2^A4DU`1@wG8!W1^@Sm@&4J2&P(sEkFLr=OrMHzy^)BY#&g_hv}25GAqLh zV2@4M0sYN=(yX*lDFKJ`H(!#Q_j#&usFG)TgxT?f6HhInvw#^|NJf5!qTkTm*nUH0 z;fz?RM~KhQ!ttBfLWkPVIP8dh1I=ae^P-kZ!fGLi1>E3hs3j$%&0B7) z;IkiUEN$|RH_4gZXBn=b6S|B@idbn?Tovy-Yn3J|FTCyJ+BQFD%fRS2 z4}&xW>rthE0T}xn(O3(Zwy4UGq&b;b1?E5DrG-su(WJN@p%~q3eM0Tk8g7&51=gis zvj`!z{8%VkTboUmV@r?DO{!wP`+EXn9BF!UTvUKbt-=*Onw6KNd= zU&n@qrxacd;OnL`KZ05d>V1?CV9u5`{g5oEH!(&y@`E6{^9Fu}lF|3gE1{|bv-y`D zeo-!(T|^`PY}hk>m+cM4zy5!F-d65LmwNpSfKK6+Mo8a?J9R-)$w&7Sf*PQ9MNuTJ zW^D6rymq8K?qZ#>)q72oyvw=#=iG*r2s92-9_O2HI$gS7uCdPAhhbuV&0gvv0k?4% zM$6_~V^kjpxP}{fLL05Xb`Z`=Qs4xgCV9>zWvU=@PWain0N0`{=Sp(}XL_t$f)w)jjnnTTYG-vGH*+ zdJ~%w)~~0WnITP%n?o2%smHK5-{ZUaorZvY(F|!$I#_R++bKqeV(hb#p(K6_1DyJP zj8m#0b3fQ%K|%3rndq(uSd-v(Wp{-P)F)k0ZEFFEMcfrd=qp`|rKcS~C^&D$its=* zg5>KbN1k>)EEB{9*@YahraM1Jgw@NmEyQbI5xA|~Ng z?h|fx)VZI!xmPXDyRZ;nXn`Q}ckPzwth?xMEU%XE-rvY#?+brAGPFOENMrT#+Ohpz z$yp4>5qzGM9IC38YG&Nr`?o2L&4YvVK8Df_iNtr==q>@7UWTP;Q-7gymf(i9g_7!e z{-^tT9uYPYhKo7_r&V)F{TF9O!o=k;tds@yyf3cHEuIwSn+xPus>97Uu2nuiq8sR} zs->CjZ|r*{dCzKbOCzLi#Q$J5WD~z|L20h9-#>mQMU1%19(^c(9EG?S)ED80!82Jl52O}nC zY&LH2fx<=|u47P3j!TLV9^Jf{tB`_jj?ks;?lt&BULB`XnR~0RI%Fv31WcCIj>NJ) z{`=%}HdoM<$KzwsnJ#!fffTgTz9WnPgm5Zh*imfgFUiKqGsLU{b zumKLQ0l~>%S@mKSDffc%0h(tC@^2F17Mq=v2+t*@#9<;Kmsd&8$gtjVkoCE$cYmuo z9bwVCyAagW9$zlf_DCl4v}Pw_R@8RndFpp8;Bh_aB$R6$$+5kC+|!#O5uinEG?LeM z>vR#Vsdr$YvAh;4FfuzUWVnKtde~we^dh38%*Q^@hl5dK?OvYbkNj?%VIBLKioV!1 zp#t;dWHPL8U}kZ+DX+f$F@EV|{AoLEuI>AL{Q<=>$9rM7>lRMEszD^X`Vp}cw6|9n z=5^)Q*-&z8%ty2|zTf1fBK8X7`j;LrWt&rugs@<4;E-CqQT?{KXV=Nczi>9;J0ImV z$InRyTixdU@}t!e?;69DkR)K%EvX&zg_CRIQZr? z+v54{oK!lzgwKkEa(Ih5(OQ)D~{g4ftgaNj*uUuO^UcUDs*v4%YD|#&4=&jtaEU~PV0;`@2)Oi}?_xkah<`J6f3#;9Y zvpgjipC!+tTH$j)bvAWnELDUe<+3@L?cVm#8HTf1-*+!sRNx9Fu>()*&plL9b;S0u zUU`16ox~@Cs)h^cpS5Rx&(F?=?1Hj)Bm6HGYV$6-k~FL_aVeU@zZY`ToJTR5w6zWT z<^izozEM`Zue<3%>0}&}T(~*|U1|*6QZECNc6c-7In0cP{600#{kP+-r%&Jdu0J8V-`b!htK3;Q zKSf4d!1WAernOgU(%#nAwOuj|7YfCIt4NSRowhy18%;VN2H3mYn!F9gGq%?5uKI(b z{!`!3@s1rQl}l3%@Kv-kcTIczwJX&(bG1??Avp#vudlXo|D8O8|5y*TS=x6ia9 zE73Gr9+#N>8Q8-)kG?v&$rDSHNF=ykg^Qrn8` zr|8tqX09FmSzoUKe5$&@PRsXLR^9SqnF9KQOr@@s+D%~srXcE?ExgbH3-PL~~@(O<%)R7fM5-!VXYmD5ExfosFR`5i0O zVfrhLR@{=&`v&9DmI|Yy^lhX)U7J-WwJP{p>dQ$Mv+b1CltQhz!VSLZ%O5shM}gf> zo2SQU^j_$b&iAXp32)`FHhHL;(=o}4w`W$*lETezk9z0Vz4QWXVgqs=xH6re?w{4N zeITv=J5{PTpV{g^1@UWk;=qgXvgTsVa<7>~?Bh`h!LC*JLu-WmM)%bGQnTJ|q^!C< z+53B`rm0;dPsPx-BKh1M=r+Qsj}}iJ?HzuZ-8+}`&L5CCjmc1Bn3m1!TcJ-I=TVk{ zT4n`42%;bsG_PYLR{XBYGxff!FWgd1$Y>Bb9ek;ZUlP5JWj7URYd)>jyaOQWEjW`{ z5pprqhb^={zi8S-pT+E;G15z)X)#s5{BU|Dq`#8bTj)xRV%M#~6F;;~jxH&&(hB6? zM4r&RlqKBAQ^7? zaTQIKbApG4?x>-f%V|g4-R>~wJ&APqp-cyoArNm8&VD}apyYPuf2KEF_Y!?%E#t0O zgoPP1d@$~1ejg^BFGu*9Fl_KZR5vKpGOmVV)!qrl_vy>@w)tE4>O03}GjU_{0= zh8XxBwlie-?UqkmUybTgaJiMQ?wvU_bQL;86?>&Rv~s#p+}Er4VAUc1OH9rEk;3${ zqM~VIYL&Hsv@iy94jGygf3FtztY0x4Fw>6=JR#_3E=3P+J0`_{>pv+V zB@`K79yeb!^KMAYZn1#qklVMZe~9=ZYGbM0X2Twu>G_SVCOs3f+mbA-X=vl+P|#Dj zdEq<&Y&X2s@lHquUKE-Px#;yF<=Oeq*}aSmvDKIig&b|2fS0*51d5GkHUfVx1+uE7 z?lJb^yl*-F<;bfH&K1>6-@FltLeCKC+3T}e!w)qVy=QOcBf04?A{ZHt7PZI`G^X+ke~EU?5t8dAbF5J4*Zwz|F>N?m5Zd*f zj!^&|U#n1NPT|a7W3R?Ouhwn0x9-~u1v#)q23>>~gY5E?&a^T)xP>nUaiAN?rTn?@ zY3(kKpHieq+Y!)WlGLl3E9MvpCMS3KuRFx#7MMIs?xpAT?#_Qnb{)Nk*MRvMZ*+iC z+7W+?PTnE$l~o_VrnrMahg(t(JTNj2+!h@WonS1msTOXn>M zYUY^isqu7_TwC8>E1p-QHC(Ed9P$@l}k;H2fh^jWRXFU(?^7wSIjdH>k)DMRUrluJ*Fz_7#E~#E4)FBSm$2#4 znI`G|?Ye2NoF*Lao6e2?iNe81?S<2fY$h>FE3VUL6U9Jx=Cx!LY&cCXM`)QoxWxOm zP`h{j-@eucdd5^4Y=HfyH+XhHm^6g;C4lmLW3C%%4CSSDa}9E{-pXj+kJ_BmJu+yEiy}THX9oqkWx`18PJz5HuGW1 zXb6`#n#3$B4y1Y1XN1ASgf-v1Sq-TKx#m2#yxKpg#?g)9=Vi5_zkP)HDEP46$(H2A zMy47GdhF?C&_=|cR){sh=*Luf!zaN7VHUAL?RMOFiC9{rD7Aa%%dAGwGc2^}-_Z1s zUOuI(^#3MNov4-Qt=wC=9pxHzZI{f+hI)j)*7vCizKyqM^F=PE=J$e|_KT1^e^a)B z%jzWbn>i|K9$JO9KDX6CBRw_lDG*N9wjvXNg8bNsN?AW);FIFVQ{`9L6-j-=uQZvX zJ@$I>ElK4stY5IRjsdpjCb%mI)^{|Tp9FxeSE}R5 zO`gppl+jo^ob6NU5vfL@gEiJ;>^xe!KcvJ5c;!Ga=P@Aedn`i_v zt5{NREm3o9{vvZ_(F!L(SgorI?L9S4@${R|Vobn*3(U_jhUs(SkQ#Ro={QQ|wcJ7PQf4gcI za-cgzAEbp8Vlh55Mc~4+_?QAoxpYW2p;07^nB3U`=eE@CX5}^nm>WzFuaG6QA3E8>IiJ zU$dB&&F=*p`Jc-@`rJxD;kYr#&=>R~yfIdo$o$jcj;n8(3SU1+2ezXdIq%dT{&~^^h$zIzsd(*7JmCekE z<);XTGD`gC8eja=0YfrOg2O|jQr`h34I)5WhMtxSYj|ZR*IzC#h5C9jD}M>3w(mcr z7G6l?)Lya&($l-;sQ2NEtLN`8frRmj&Q4R$DMYu*F*6`NI-k1I9mE=4@@s+kgaf;t zGQG^Q9)GQ}iVAbYLy4jbLg~f6`0$y-mIc_;)0-)ajFTg+Q-Bvf>XEflM@+Xr4bM#2 zgva{_ZqOsWaI$?04z4v^SI@4O)3aOWG5hkp_EW5GRb``DA0wB`*4Z^vtF7_tMr7KD zH10r-kUfDFVdDJFo=0pIXCB&XNimunw@Uy3-m|aS%)`k-JqNsApII6Y#NrDxG^Y!I zbaso5j=t?-Ut9uFS4Z0mI0a5%C{e`|aM3e&Kb&uv)qZygll3Y%F2*VWw8^Z=Iu`-T z!)f1Zz(+OdIxl<8)LN%LR~8xef7ZyqtW|U7 zdZ(b5YKDdxyfLyBVGz#YJhD@JK#(yEu@I@Dr%x00};IQzGkijDG zmeZl$RS)>}rwU@-jdCzV1|4hq-U4Gvq$vW7*H?7RNyy&^kjKQ*Fr7ZZc6w%T{qC~g zqalG`SlFEN3YhE$E2G_sQPeGWTdGP-T5I4@qszk7fXWv`M*|n(8}#=ix*(otDGRCF zmyQxLAB7FtdX>7!WMdF9M@LaIU*O*#5_N zXN`A$XBGjc7WUvV-}<$gF$xhVdzJC4+#Rdjt^5NtpC@p20#SF zE%oE252uG|8YZfd0Ud?7-&b-75Jb;^l5 z(+}5MR?k4k=$jXxTJqm-HrdM?pu?t(ttmz?h9(Qbkxjc+zwOwq*@{NJrG^_h97O$o z>aHM0N33rAn&)5ye;!@}7Yk*Ou_I7!udbrq164kTQGiFtryb z(mdH0&DQ?GOsMyGFT3KI$O=A`>A=a5`Qm;#r~*Q2OctK=S>)mOe=%+?cD+ODYKJY) zh0AdW+PHGbJ3uMngD{B|OGNmOzCUxaChH-nhY=Iv%6P%#OJ-Gkmx#sLzYR{mFvZ#I z=FFv;S+2VpuWVSwBgnGLf(ts?kinGUfn7|hFmesi{r&w|-#Um$LHG};Mqd2q_k$j| zY@bXR#`*$jsq~x&Lq{Zq0Dk>o%6PujcGX~=e)ZQDDuDo>fw~;kqfLB+$Jw&ssF-N$ zJa?=4DjEM6!46kJ&)Mhn#mK8P@U^v6yrf3K+Cw6l!Ls2aEI?Vl-?|vdQFKsD=zU>Z zm5xEL29=-*@4*_v>MhtWzTGOm_Qk~m%Oi!b=xzc3w&}wf-OYxa-+ff`cM*fC!#VAR z`o0etz8qVYeQ?#y`Hea)XNny!6Eax@NqqP)TrE=xjuJA?-HU@uIYYaiO~KZ5+IXDH z;}v9@bJ~94=|sz?oeGH)2dFis$x%tS!cbUpyg(Wg@=%7xp6@z!m+Fi1W zSuV2-hX6r%mt0^FX-8LzmO057h5cP0L*T7Huo|*deo&QE`m6_u-~H_^R%g+3cn-)S zruBWoWgl#C)uYekb305`#r14d)d^+Iwno3t9XH*JAj)mKExm~^3d!$@4zWEGt8>^q z?OC%($&x;%UGL9)9_Fi4`Q@3%WyJap$9fE72s00<>QTVm#+NQa0dfJEQQt)-H}Nd< zkpSHlChI)}L_aT@AmKjL@sl{xuhJ#<-yUqW%QmU3LIRk*NOwf@M5e!l$>Bc!k}$?4 zr6mjNc+C)bFY^|p6w&;pki9PLccm};7`g$xk9A}bgrC2Y@c}l@ig;Ys1~RTO!A&UK znx3(p5no>YQSL)I@Y-LoD5o8~Sn`S$c}$YN&a2BrZ{OL|R8_Kp7xn#UeW2DhT)kGf z5yT~?>7_3p1NhG5&HCMSMglWtJfG?ofbMx7hBLSVvhk(dbVP{>0U>GmoSFvb8@)Vv zh8YhLbY%oN_wix-k>g{HecZJ)rR$LbSX}aI!r)XtF2Itjv!J*4I8^ zB=$c>m~f*~v0gt_dQMZf;G%NLF9}-Z5E#~3n3e6 zAb>Ck;c{eAg5#mV=o3Fp_6vJ5`e7=#N{-Rx0;a@9l8Fx{KCSD%_e8B8L-~hgGgQ9! zC1b&h!toUx0A9$AOE8!1SGJ8TG1s#w!t2PM;OT+dzN?X|tSh0&_(NQt@rVcge_x%v z)!PyCp0j&^n=ID642qH}CN8FVo6nbu;Vr9L+adD;)3ulSJ{D^iwJOXQp478XFQ)~_ zg=_IWSp8DKF7&|YYGw#Z8`bG<(~+pRj2d26?fx=ZSM}TeBC^QO7POb=ZR=V$M&*s` zdLX%>TWSAA#VaJ7T6y2h*srDwTh<5Z?jb9nDmhdEDmh=*h(Ik0gNYFpiQRTbMsC2-hjH6JQG0ZV!1ND>0HI8ZWq=f6?6x6mn0>)TJ zSj1@qeHjw-W8>rAXu%Wkr)5D$5d%oq);?W41lUg%x#g&es@GDw*7b`{X>6}rn?-ub zmvkP;O=xSVkZh!~<}0f>EsUhs4{cWL>>s#UXN`VC!A*(o`7!&?v1b8PegxI%K{<8{ z+Z%`D4J)D`dCGQsi%ze?=Ag8~cgun(!{yIFbaZY+SY^trmV9AAX%jL)fsrb_NZUYj ziMyD`?el6R;H`w)Qj|Ldkz+(1_se>IfJUta9JZ6y=ZF7_nhf{60dVst+oks~?jHde zJ2#Ir6T$o38|`Z6RrK#4w32d%-z%aI5`HCYS9*-^u8EPqxPXOzb#(+9({7OchSDVj+}N9a+$pQOUdcT_d_&y`O-mNC~z09g&x8 z@Mi0+fJW6%w1l;-rX211uWH~?w898E%~Rm<&b_n)xG6mT$#K;mxi8Js2>5G@1kWG3 z3?uKo*WzU^u{vg6HP@lvg2{ySU@E9e0#&Jmm`@*lutFOryo6?RdBAPCEoDddv-?LJ1f@na^2iL021Q0=E_Y|>Y~gNyNYCg%i3 zGC3+0-_c70UE)rilyhbML(X_?I~-}XqBBQLn*Cj9hYSl+NBuaVDg15;pNCTTC8taO z)5xhTDd{fMdA%77FM#C$y-$N@wi*3!doP(pK$GVmeSQW1@5S|wuJ%fAB7T1F6}|I3 zph3%KZIjUQQD=oj+0?sC?s(!LjMn@(d4$Aqj4@al9UUFK$wC)D zMxe9;p^-GW$@PIRkK7eJ#+jpEjKKO?ca!0`Y1>;a7C{jt`hA77w@;6h(>I+gp6&9U z&-m`KPfQUb&MIW7jz8K!eQ#XI_h`ZVZEYe1yBw2EPI;G+pjlvJaxq8t^fsu3PEWSv`t(JMYxNVVv1$d?RIT4w|N;n zUQHs~v@1KA-N+@^U-mGS{3q$#YJ7d6o+R4Ok0eMZ!Wn2g7#yEC&L z(NwcR_~ODlzrQn09-%YlMy!EM&{Nd!)4A@esm3;B9T-F0Li4_*LbTzdFzGhAUKZ4F ztSrYbWjXHdXKS5Xz?Sv#6Ncdq0QyiVy%!q>_9 zZNo&w-whe7N~praMZ~Iq@M>&mrIa##tC>wVS+CbFU6xW_#Qu&-IQEf1*MS=AH}z=ooco5q_Gn+Gr=<%co#(@tyga? ztO^7|u~9yxH^+HBgP68#_WzFf8t7O9eK8y^jc&3QooC?C0q2FDdso@`|LDQ!Mau(o zpyp3iJmX`DS60@JTuMj#N=}`X;%h&;edG?n93jPuR|6#oIq|=QXQ_=BsaBO&9}KTsZuakP8gGuk4;r0R z&k^h5>meEqujABMug$VDGn?%ue>KaYPO_d$FCeSDs{;2&7}lD;GwnAKBqroEJEh5- zq!-O~qa+qNtUV;VQY1tj7+N%+4{A1W6ofi{&s5kQ9Tm<)xFJnhIb}Vo4W-2(QC@zp z_Qj8bl;v0Vv6)FaFivdYTKHGsoq*(KjkCUw$RA1gN%`Cf1&ZMk+Lc_A0*#}5VKTsz zo_ol^cw6T21Q#x({J0lBk$Oc$2n~D+t>Y#B@{}Bc7K)33Tl_6VF~tfkPl-f1DVFPV zk-Vf%nZ#w2UH~pwL{SpH65qr(k=;_vNZvx7a`xniz-DjU6(5iYhd|;g7pS3 zSlLa&mhC|X6|C5#hecEAGG9|CgvDRLMd_|4J45R{K$Ij)(mEkp*d~%=m1^< z)*+T;T-;s~H5VgqhzK6^zC1-}^%v`k6`T2~`O#71-com%a7k=Is!zGy!08vD4!w$j zU)I~r?j_fAAav~lc}vHt70l17@f|kY_O%n|MZ^{>qH{Z5i~kCz$b-_kUEpM&tfKkWPUaU)e%a6?N|XaMx^r+4BCl4e!5Y8PZ9LIM z#v&i}Fz^`we%7s@tTzsW40jX1R2j%9st<^El6s7h-A-@{qQ!k*@i7yh?sfv3L`is7 z{P3)n3|1aq9?shRnU$mK4I_Vz1jeMRet)Abh}rua<2w**}r*BaMkDe z9P#|*Y&j5U!jnh0Ux{gg2Ez{Dvze$0$t*Ty+)QP7LBk^Wtz;$+(hC##Z4`4};(Rj# zT9}e|k}CBi%(Br&k_U(^bzFZ-0-A&e!{H3)asv8V4@c0{r=x;x)uN(18{}RNU{p{u z$B&g!*w14EjVJZ9+3nk&)_%Wr6V3DYGt1iFFrD9+bU}j9ThXB%QREIS!E>!qMz@y3 zNqBP4VNHs~+$TePq83@VKp@4J3}tk8bjaGHIAezf%s`xF;nkcm*}HzRA}B~3f@*5T&g|ZEa5mSFfYEqTy9rew7?0<1@M8D2`6MY z9Me3s*~0_F=5RJ}o^Dy}7Z@-FldJrtb!yFz@Myf6ovV6~%DK4^dj&l4305Qbh&$CX z4#ktKR52_F2hrK`HgLf2zoMi}UPwJ9n>l zikpY>>XV{=#0m88eDQvp&fU30#h%BqlCW`}AjB9@V6$aAqF70)^llBEXnoPAXg*9~-gHB!ii?)I(K~c2 zMzE<0n&*)Z`04iaNejg(A-+{SYIH2>eN+u2M^_>HeWkBdMVIq)DcZ6XbuU2xWWtE zl{}|Pep!t$vjlf>07j?hgS;3rG?BccldUrCd2F z$Xp77pU|<^hqY!jh@~11n^X%jpO>^QorrO(&2umMQq#2!*O^;ahZp8&EF})mM5V<) zC8mi&V%ME_%}k@1X*#G>&!70o)|+K5;ZsRbpki)^+)iPzITEThFHqGS{#&V&W{c zHKk00;<7-xghXpxPU;LFR^q4d!dt~O*5Ln#toIJ2GW`GlD-mTz9FEMA?bt-fmV=CJ zIriRrC*oL1Ws|a3WbeH>$lhCIXK%jOsqg#qd4GSuf72i5+~>OQ`?_AQ$Mf;>nH%GY z8=UVuB+I0!IX@$pTUv4NP!oOUab`nj4~d|@in8k;x{OHtSiE^c%x3`8Muz7+gz2f^ zQM~*d&d7j#G37?59K3S4Qg1MrWTL3dSC%@b$CcO57C*DPZh1C6O+hBS@1}v zdCGP?O+2WMZGN~Kt1fobv+!)t!-~5$>?8Bo=Jbx|;5l(GV>!;6;^9rEGXf3fR`;^C2u$b`1iD$u8%Mi2WqZp0vXL~n@h)XnaHIj;QMk8n%F zTgLRw`UB-kcGyREc0@a}LF=M^@mf92rf3_?ct>T4#Gv__)Srw`SSPL^ds0ZISOnlD zTBx<^lbTYlPgBmFE#kOM>mj12T}l^b=&bx1kcfaeM)G@?k>1Pn+w%HnAN4!N>W_G@ zrQRPl-Vyn8^SV=b6hrb5Qck&1;zK09e5c-;JBlHKQFI%}JD$4l(R=#Q_u}bVK|p`^^2k^l_d-+{KihoGaaI?))m{GE&fbcqdg|X3_?gzq!XS`Z<(| zu}Ci9F`QkMrK~oJ(UX2inuObk*CPA5s{YU#Y5%4}&uVle;-@jzF4Q6Dsam|WIX%f_ zV5P)E)-Y+@EdOQRo&CCxMDvoq`~3NkHtImND=HaYf@Yfh_rV6FBGPS^acvoMLm{g< zBtx7Z{zh4zkV&fX^6_Q*?0~+f8<6WEm285V-Y&fL*a!bmW0vAG3gurwLK`te!!{ApH4-KYi`c(b<>pEn3JJ#Z{baCf~$Ak!%i(xF1d&4#iCv zW~9U=4=|_9(>Jv`V4(%GPA~LHFqW~(#_On@TFfS*uVMdiWClyeapF9Fg5mC2u66yf3d3Yrt9+{ zQ4~QFb^zZil=N5W1A52Aov@3Ci#30M(r3NRE});YajlI^pVDv`_SGDen65mErbWT{ zIPV6;?eG{~sOf=d8NPsYexi}Z+NaQWl?OFapE*T|S^HPRGOm}*)x?Wrj@xqPWVl!k zFYPz&^{dx&^9JiXo?!-Hp7betmY^ZQ2GcjxDZe;zSMl~$7c{k7@gv=)9fJK7b9oZU z+LB1Yrg2fa>e3%wE`}1otn={|s!tmkrEz2Jm+|N+v>5bgg>Y$9$_(yu?j|rM{VDbq z;r;jo1wQpANLSu5#bctt@sD+&Z}xWgdFSPARv{!pbIb3l$nE0ui<#2dbPH8R-k?B6 zwS@kI%9-G&(@iV;w*3o=ZeK$fi=#1iOy7&pCVcmm4ykcej;|R;C3vj0l@De0pE*B? zZxvXfpQS%?c6B}TkZge6P2BlturP-ruV3AZS33!h=5XN0&1ELe-C zYPUKfOyHkQFDW%*SV&7)6)#0TYFSJXE#2w(@Ed}9fJ?E>8N;wuf4;rnPo6E5^eqV= zP9tK~j|OeT87!v5$EeHZE_&zSLewRXM>NU%%;kP&o6A7`Hdg_mK zRA=hup2hOmsnGfirqrK*7V_9j^85bunfNk(s)g&F71VZ%zw(gtY$6W|8e$DkaDI6Q z&w=fs?hpXJoz9PUj#ol(EV17pN02`+p3#c8%-4&x!k;b$9iw}>*B7AMzALQ=k$e_t zzv5(PKmuE2YUT|H9w#WbXhzUVP`7o#(spthx~jGA1PBqH2yCNc=q`6dpLf33Y1lti zd;YL#7)6IANg{Du9568m!9F_`?BL#8qcsLCSbhp5095Mm6?OjoVXDsS7;|IwsqFV} zbkcV^kmqE_1!^#pZ7?0sZ(B7b$cuzn`n>{Wg?$86B`c$*L+crI{>q&9bG8izM6iwI zI}>>0?0uC?0oDHJ9zkvPFZEXzBF8E_^tW8EFE*LnE_B7=bP*K1_E$?mclqmzM{#J| z@mEj5J-m@|zgnGo7mQs2uLn{RhsZIK^6LCCiVvoLn8E})wNLNAMi%PPC)AQ%I zaSbV(r$JG22IxmP2v1o@w3tJjLo;T7KkQpBJA7xwM3bt+Lp_xY$mOQ62?s9JjfIgF zqe)mURZIAm(L9Mf&;lO{t-=i5HS;r5IJ?KMKrXfRk2WrmsRIvlB&Fa-9zxB?nH_=c z&B(K7$CrIi^YyE;f(zRQ(jAD`EX>XS_+<@|^Iy!AdyNAdGv2lAGTt#QRgS#TFaDrh2aWX!a7ls+6^10MOYo^*5%VUPD%w=(a8)#a*Vf#kjs@JW44>azgWG=4bb5`X zT9+|!H5h)r@%CZaAR)g`;;ktBp*zo?;EE$MNm%&y_&y<#A0q7Wk&0*-#gHnkQel%N zMlBp2LBQuE{e;B{EolzND%WRC%Ul}XVI?Nz)q1a19>*7F8m`U}v;WLi`tg*pSL0c{ z09Blcb%UnmE=Vf0d?=n-k9l4+N|u0KsbMoyefYN2m6w+njI?#J-I^?$O>feqeMO-u z4Oz*!!n3orRXq3lnwQs;rQtR2f9GS)*p2<*b26rh&%X?e@k<}|org)M^u7dV;rE~+ zVU&i){jQ#r?x;gI>IS$xfs9!1OAjiw$JUtTJ*WLH)i=a!5*FgMwbn@q;<&>$n5WmJ zMnJaJumMUti_X44pFnu}!Bi=gVS46(RitOt{V7d?MQWx&!hX3542U%LD)#TTJs(cR zAaWWtCpfu@-(o9{U%tOlcwDkJH2o!j+p=s^_NfSa!`g)32#}kS9yXo%Zy9JhT2GLr zehq#6g2oohL7+HNro6W-NLh<@z{KIra14+xr0?|qxqR=GX!Iw(-@Ehi)38^NoG^1@fJBccSp>R~5WYRB z4>M?W9T&|^xjM+|x@0?2o;c-0HNx-Z85rDR?|4H&lc)Zj`Rp@4@xTt&Wu$?$A6cTu z4RC)E7H~4!cu58$rXgUF^c@R8qvNFEVxD5C?)G-+cz(e*vLj%u!K};-jIfy|bqCD9 z+C44-(FnR*99Lc7@f^XW8vapv&hcI5Nl zrOwRQo6|9%5OSxkmZ9I56FV2& zRD?!Er@xngr1E@c6@oL&P7{5fDH@`n|C?zDgs+0g`CsDlCKVgd;cW zoeMUiJ4<$<-7_N8s^&dQa!QdoxUqfuBA(ARTdQSm9ZdW85X z*S}oXm_c(^;Tuo7+v~~Vd*_#LWfQGpKUY0)$v``0y&*#!ErHb(wIyK8N*wM5BF*9KS4S z8iVy{Agv16Uv76*UOA5ir)H!|IQQ;V-*@xy$;o5YNC&`aE8YXAzt&nL?QoXIS_F9C zxXwNUtmd`nqyIvN|I=xDArdXiB>q_;>ACl}Kd@Wcnuzj)r|ED`+Mz+5T`GpV7PhDP zY++)Z#vTW%&tXbznl|*aEmLhUz=Ye`wS_+DqQC|7HgLIHRnFp%<=k4lQ4~U0l20GB zFrEldM3>i&=q}Xh9vqJO4Q_s!o7e`Wz?ndqleS*il5WLh5rkM>XjCQOf&7bhu%X#; zz(YWalxoXmxn(PCIXx@+<2_2ej&1E`!_}U|TNwhD%XX?jx! zL=P})N9QVNC0QHezOmySTEMJR{}%>D8aVCdH(y!?j|VYE#yzB3Low>A>~lR$AX-E4 zni2XEVt|5R?Ma8R3xOtCARg(c|2J-x;Yul*m#c4nL410TSZ{rcliqLdg-K|l%f@ zM*=IX0UoSrTospnm+u;whD!`yL}atJPbxaR@x2ObIJtKW#w47FX!C&?T~|8-mw4$< z+8V7bEOvj#BWItEM786SYDk8VnYy9}+CKSPLMITTHsEp~!2!|Q40pwqMpvfLkq zw;SEw1O;JLfL&Qb_~jPbf6laeiP@+!*14yeiN$71M;yl&oH=aajF-V`gWsKib z>*$4*9MX4_mROKh_^t}~JKOyFh*oKQH=A`3J$;oIS>I)LnJ7SE8lQR&BM5CO^{Oe9lO_o|t(?gCO72R8D7%E$CkVL}q@d5! zjoILiQ>-xYlNtOGVmPcjqxq}gwRUp85;u8MBXBm=)y;%itliZPevV9IzmrxC%nCxA z#T0Trv;Y7Nsyy*yc7|0WJ#Ew9Q(*n+AQr3hcyZ zx-E{>Y>pIi)cC~iPwkE_I6E}24{Zv1&O-Sh{Ph0H`x~(ePAp_Ny`6+EAp*U> zt-`(KEihsfk>aE2&-hPeQyBi2_?3KO7kX2)lu1O!eIJ1IK_p+7g72Ivba7gpTHeDfliv!(Xq#l8 zzw>Zw>CP;uu1J%tbO!ggM%FG!|CG`LZ-?eXi`SkdLr^~YjAsFPv5yCnZLp~dwbb zzBq8y{&{=t&`}D42-lc+larIWW@cIc(?N0r#@sWe?QA_u4N8EUXS@|_jpW14f%Dp( z6a^z40B>i!Z5_^%mq?5?5K?b&K-IHr^zxnTJHmGJ!7s`wrmrO4@mm$(!xKjQ4d~OP zNw_`@z^p_*5x(okG~Jr;H;-Bw4K#51)2cf*p}LKKQQPxSh}%3g&f%kFGcMT-7uOIS ztLkzT=JVsz&lXQ+D(TZ4{};Nhq~OQSM!%EmzE*=x@G^D+EM43%H!sf#FaR!76?Vr_ z7@!KGZ=HrQ%w7h}%sMsJ*W3~5X%9<*&h4-RT6j7Ds4cz}?OqyfGxTwG08XB2&1W~8 z6#k<47o&N1q+~q5I9x>f(-Cf3P&LnR*2H)mGM`8sPHFm?(p)}$y!f-8X?qf-yYN)J z>_VG!d5K#mS4+wG^)+f>zu;v~AzRnU>;-uXw3oil?_!+uTA=Rg{B(~+%(J4e66LUow*%R zsEmWw7KP+ifC|WR$-Vu3}3gNDd6zJ7ltgiH@?1aTq z0p_fs9aXiKnOIBPvg)=uzMud-GXitYyMDd)JvB*DVGng^S>+5>k-?fI=m&AewsI;Z z+MOE0DjG@!qqY9j^k-@8z3nC=xk~h{0^-9jbXE}up;9H3_oyzt^!oZ&Pv^aIqS#o7 z3A{RDidkX<@jfNw-q%poa%|df-Do_)ZovPdR7g=>poZ}{`CGGR%SP9oM83LT)Uk8! zhnPE3ytb$xoGmiw)d_;osLC9C?3O^j|4%Am?p}Vp7|JAFgnpaIgZz6+!RvP+^^NBY znx^uUQx8n4qL30b`752W#;Ttl0a7yN;YJlC)>TT-R5|=Z%H^h6moLp3XlMf<^UxHZ zsTcPQZ-{oJ(x3tPwE1TOzulKPhIdLS?u$5f-9PY0dmJIWVu5%zW>o;8o`h1ccGO1o zaiHjr-Z9d!WLq*#BqS!z0LFc5NYwbn2455jnxJLNDFe^EwNOe0iAnBM^I5M6wTx%P zhMy6+feH|+oI1mt_PE%IH(jDmmUsLpMtT{k-QnJ58@8S;ucD7ncJK@&-mO9&6Y?pq zoBjSm6#eR6-mMnX7@fKwlW3v|tc&~MVGjG~ck{p$c552u^J);i9^2_u`-I^iJ+J^y zV6{T_^KW#DjYH7WQ0sm`6=RJLIU&lC<{oViG)|(9g!>uTRDcytOKYu7gAUtVC-c|c z480iUFxfCTLY;=s%_TzD4sfRT0s?-GAERrF{YDdL`6>rALjf?ptg1|%Pf?EFRm&i0E6U%{KIa;YQo{Fu{S zn#=ZgtlH*GLDn$Crj1w}y(gtW(CyD;WYXaPj@&$dAmxS0PY*T^u^sfJK<;z^)0JQ3dW zK&3_izp!>M)T`fXc8O~j%zqy$O#3it(&4|D2moKdRdlxnUy#g#qo;T~>b(}gAGP)X z@mGazCXnT)n1Eqpcx0HUo8gSO4;mprm2-i4>F>~T;fyE;CGoS$?VCnHM}J-m@Qzy* z)~(EXZm@x8SNOeh=;L*(N8?K6U1#IcwB$4(;b7?KFDG#ukE#E)XWCHR%-}<&U+82M zdOHSENm4@~43@zN<#~+^UE9y;+Oudsk&WqYA~7Uw0?f`M@?VBT>;XG?b-w&Io?W8s z4ZC-rEQX8}Rk_T-Go=2Bx9KnhLFh$(V`GCmQ$IH+XV(rdR-6YM0YGEKF{-FNuY1S7{=8q10OPc8&v zGk4nO_7Uq&N4SX}n7(vYK443Sxcgl%j?&dylk8KJCuMMeQ*2e6bcEg@MX`rmK|=B zPkS(2<&U~7fD@~Ne3!$>RiI}OTELE9$~ym;)4gZVsY!y%aPQNIeG?L=|G0;_Y&`u< zskz^Qe^r;7^WSH@IPzfm0?JJXTMHfZ&-R|OsW_D-LlF~u6S)%=i|)twSE30;K&mr{ z24I^Jabq<tdn|2r69h0<`|i9hkzM5>dXhA_^mJV8IfJrkpWg$S_HDDhWqwo!mE_eJIsC^>bV-xP*r5#9xjDLx^UD0`?{1QA0JO(_|&*(rBh2|w)dx>v2 zwAF*#aokt!CcomAA^B}XjHt`=x$Am^w9~jo$ z2>972L=|$&XeuskII1{-i~hOjjZC~1lE~qzCdRt~oheKo>5?rZ9)0r9dGoX1%T)S@ zZ-I}{4(ltOa?RW_xCPk+d&hh8R5jJ;^ZV!TC&c^=w2S;=Uwh{8bGJ}Fb?)4ntvi2v z==43Xw?bfBsK?P-wb0=`@dnaxR?}I#x|1GUR^e>X0L~I2m?>*2gQWt+2RV8Mj9xR( z>8i$`!as+9^?|+cr=|@IJHBe8hpIFBJLdgb>ERiS_hj0K$71j~jbK*D7$Q0y-|Nf? za3teSCQOC>n0t#}<#C#hS7Q+6?cBVA7w1%ODc`J01*F$=LCyj!@3 zDb7PjwQ-);aK<7^ErG#FIe_1EO>i|&Q0sm<5a~M%rA+rOHVe@9|K-Cq3i`!1I4So-&bun~e8?4qFEjQ&gd+X$7B^1w#w5_*?dZcXV*qiR zm}0j@vmWfk{-T$qv2}j`Kq$()akYw1l|CCa|CM8KOEd*%EceBojUPTs!D<3~jH>Ik zm778-b45nMJ61;zR0%$Hhv ziBuIXa$JCv=Z&>^VK2u)S(O62Yi17%i0B)@FH^t?=Pfrm3>LVC*_%VBB0h$G@Tph| zWAd*OXQLi`Jz>r<+SJOM%)YqT8baK)8c)|Zt}p40OGxLGkN>mQV}BZS1?aL|TOjk? z!)Hy9A6r@xR7cbjk0>(&9mE<;xV|8TZ^A`zgBLVQ&7*YcJYDu&_zn#j4CmJD!YL41 z+xnEj=nWgSTX|cp?&$9#KB=6cPyLh6+u-A07pgLZd)mLEp>hh-*gGrm3^;`{Phgs< z`+GsBA8WPzmV;34fg)LQyT(8`xl|V@A=h9m#aYyE(X)X_Zyp&w zX|d_|vHlK515gOT1ZiZXY7Jpn%OOJGb*)TkfK9AyJRX#<5`;v5a3lo)>3d-$tN48T zI2f{i#OWek-7eb|G#`m0HU%TjHWRm@VGz0+mh}I@Y2;#MTYtJ@P+@TXCPeI#B^;x? zYn3xNj{4QtRnMiKnhXl&0@>a6GgW#w0fIrP<|2i&1g`=6vK$y0iUeThL;4_z z)X%KKICtK6t{xj|<1|Yx=-8U#=Cp#^J#Q`-#9uP_Ael2HA!^FiGtMExv2Xf8SMui# zWgZp`qm@N1)#+|boKL2&5QBh!c_|NQ(^=zW^4ATX=HE9q*_@Jf2&x9S%8G}{918RB zGRak^lje(7|CsWZ?A4wVT-&C>$-xsw680xFAtU3L>a&rQI_j-O>Y?X zvhdpl8e#dIC#m6GA8;lEX$fCxnh72yUsY@{St>9FxEea%NWC7+kpE;+TS>~9@OuiD zG!&03YqewFt^h&dLl4VbwbvH!wFF^HS8C4qwyZKo3unyJ zXYC+vHP~0NZ&hrtf{K6t8l9PUTUJvVMWn3J!Ck`(^Scx7zr= zyGDlWi%sS-MoBtYj(t)RiT5U;<+Glaw2)7ldIwYZPrfMq=zfoVtvPkO%;)S>kSV2K zE$X1!&$$z?QdnrMGVS2aT}C~Sl>Gr7UhdkZNyj*@v0jR}YvhR51$C(zg~OKw8MN8c zc=AOEE)A4bAlh-Sg$)}KzTu_4A>(cs7#-`oKa#EK*P54$6_u*73kE=*88UuC{r7^V)2}v=GI2$`?8U}}V&bXC z-r79_O6$G1W%0NWLR15o$8%w(MM^jnrw%mPG9keRdNJ>DxE_efypbm1j}oq}n>$UO zlY9RKTvOU?I(51vqg$F=R8tH<N1t$p z-e|MOsmEC?9F;`sR;0b_H)2K<{7Je3`seCfs8Gfz+S6ILqao1P!oX!dtY``Wn^|X(-Z8e>ot!N+5WZYj4Q&a=c9|M;=_yR#8(cpdRMbGpeKyYsol+z z%U2mJ>Zd9wV1cnWNf!*ZW&>CWGVsf7?YVK&byV(bDNko@!(DWQE~3 z^OPLu<*YTkgL@_Tn6(YU`_)~cG=hkC4?MT=3Y-G?q(7#W;KP&*Jeea^M8z3Ptmdl)C~sKkwYoN=FS9%ON+Q>DT_ z?h`ox83rL0`ADxYgQRdk0y%Oj{)aYHc|(PUotsvc9#_XFSlo_`zB`^!rem3q}ZmWWfZQOI9DuNOT>!h*iI$=769@1>fd_VnYH!eCzif|@uYO?wvV)WXQ zgs_8FFM&PJ#aNnrZnh=_I21!y+rxi5-}Zn~C_nW3G5%jxheT^shY+VwzEOCbBxFnc=;TzO84z)$^CnK$DRKlvvK7ImatKUrzQ3? zG%H4>CNIc><4*qB&x6jiS9MH3DDap*emKsb+9aUQNy_=ndTuOV>yt}v zjqd2$HycS;wC*xdQ&;~02Md3T?jcm!(nzkOgHvGU)tX{Tp}o?M@G89_Fn9$jBn%A4 zbV&+W2CXiPy|7}qOU`X_6t!Ya(>9@rmjEDPeCRU(0lsSoHumYiE_O+SKWWJ!b4nWQ z$kll%u!v60rawb(^AN|9n?zKivey^HhNl2tIrTqUYCabpm-?4ASZFg$*WGrEmBzEf zjZ3TBzI37jSP)VL1qG4E&n>fp=Nfwx2pDjqaNeDzuqYSr+)bks-G|6 z@tBLJ`JJ&3hxE!~ar_X8e12<9gXU5f2C6Bcb02C9Uaku-y%67u<2!B3lF6BVvtHA` z-mbmMC@^rXN#Lz|m|QYdj|Jo<;=n~2Ymd^0- z9Zor}7CEMuB1N~KSlSGajClC}yqm6bb1f!@R8+Yk;4{AwlcmV)e+v8$ZXwUr6OpBQ z5JF+4h^KVg7)G?j>0(Rnk`ax?zhEKxE2#e~QszlvbMZUU3^^aPOL86gwN$ec$GyqI zfSuVZdoDt0lrv;>Y0&<{YhJ;{`55zjZ~-6#OaqEZYmPff32X0@@h6W>%Qk$9M#|g{ zB6ATQ<%rG?#VFjk$@#;#TE8UFL^M-$JR@HvUq}+Ud_u`EHU&8ks0{aQw>;b?zP9h2 zai4H@8*?c!p2sGlKe5?83lTX!_O~#y7!=vRx?5pfPUiTTA9Nf zFh(uxLNSv}ExUC#0j7glq5@MhK9`8CR4>~&a>%30ZMzif-NFhgsnGYnOM?jV;{-%<(& z)Is-rQEsbfiYP20QsnFcKQu5R2@IQ|}#$v0| z41P4p4sJ&fp}5FRjQ|i{1jlO02bv3?jd-_dCEt@e}(lXlj4-;C^v( zE_K}mHtIpcCtRC5RDO3tmZJ^$T!(jvJAfV^W}od>VlyXre9o`WL%TL)tR|gx&BFWl zmHdgA97LX?9!v7m#-zW;l|)F|8#vR@rFPbYFQC<}ug&6f1f9ET*1~^|O?m4EU**bv07RE?pmP+Y24* zFTQt!yZF_mJu8-L;Z+FKUYh2r@V3p-0l+VmZ;0hiq3F65t%?kxq zWv?Q=>lVH997E5dnI|aW9}Q;8fQxjrBjjr0lkYaE6FPE-O*J}D<^`*! z*@#2~)62f|HqS`Fj!wB4?2uVCL{=E^>1ubvnT%T~?IK+5CVckjuHBu@5{01CB~^B2 zVIvJ)GG{#G(dZf*;lN)@pH%0odv^dPn%bMq?&4-GdjawLeX4$3=FemCXTVLPQimh* zngF3P{2vKAs1)o}Ev%&{$_}vwHn7;&?$-B+8x6rz0rY0vZ%9^Uf2L7TEk_&WbBqx+m<&)1= zMP@bF$go??roXjl;d*yV^k+!w^XXR+w6v)X=@}g()ruNggG*O_qQV=!3E4T$nd&js zXu<35^oxqhf@ToX{0&bvh}s+oNuh^B1E~X z7@VJ|9F;iu{<-+xMS!6wfs87$st12MtfrR=U2FV&k3I|evKtJ3=tfcqTsufe_1zxx z_J7kxa!es14!<48gZ5*h`IjR~oXj-6g70blz0^O;%Il&|OOUQ%tLl}HF&HAA^*;#@ z{lBbrrI7E1yNYK0$zoU?BpBwlw=7rTeY$r~Qsnlt)?GE&ZHPz2fY8UT9ub4h8-`z= zaWE_z$2nNT9*q|2@5Gv%Bl9So=$^wihaPZoNbU{nq!Y3*t+{n5-dWw-bSd~=GWSq; zaFbf!I?qw{C~5x~8#ivr>?~j_-)Sq^r@$%iQd0M``*@q*maRJq(d8$Zz%M6`BFL~X zrjb|pU85*xhlq=Ieqxml|Nh&J_gl+Lb@gqEm0stefd2S+u4vit-2GYDhFr*aociGQ zo#^y0J4soT6$*)0Hl5zwgednV&4$wz96!5zPW!$5=RTB7E@PPrcBdWx@g6|At(!BI z3PN-wAOEeH^V`6Fak8{v?edQ4(*Fa^h|#lY0vR1;->Hvmz9Qqe4MsYo)X8v~RkOn^ zQa@M@emFv9wZ|g}1#Qw@m?3Nso;UO5&TA@mD>uZUSn@L6NS8pdm8_QARSV(Ja*1yC z(a7-x_PWT7MJD4#Q*bHa^CmOMa**l%v!kq$t!eqvcxdO>5LxB+7u$-goStOgnjt;U zf}w{5!ih2EclA@=C9rPkMQ=;O3JqVJWAf_Xj}vlmaOY5oVR{(n*fad{5w^1Te40dV zH&zNkZT}LF7brYy9|^Cf%-L_%)Z!Q!>qzvtZ+thp63&M&$v?p@nZRk;EPLLPFI0Kd zgAss`qG;K?I4zPna?soLD98g@#VYS2OM_R4ag<{onW?@VgU%wUa#tN@8kQ#Meh_v8 zy7HYUXdUK}`*)9m4Eg7Irj>+S06n~n;$bD5o$Kutlt%?W%wpDd?Y;FNoFK4&>ESPb zVV&)(4Ynaeqe0_)bo}(Ga()5N_b>MQpGZAx<@-Wk`s;I9WA~)dHERX%Aops}vIX97O7w+ zUyC!e+)Q6A_Z_&dk7WtvjDj$4ErxN_3oKuP3GuxRN_EkO40AzRkiI+rv0B#w)yR0f zN&TpNmQ#n$`Ni#Fe?eD<0S>-~XPTMcd(JGIU{g zt@1IR({%G$*mNnAPnWY{Ic|T>rGI5FXXRoji!=|4kM~JIT_v=|ft$I?6=e;v%YWbd zeZ%yJmW;rCmQ;Qs#g`D_nsYZ$~$C+(nNQ-}-q^_C= zTSXx#{7zzD&E*pg$K*N_+ts0D|I?3M;pEioW-(`U$K1@-y05e%6Zx%j6Q89`zN%#B zuV5(JnizRz>p7uS@d!4|l|hs?_r+sHmhMu2Nv*+-`Stt+fmVE3&Hsm7N$xlB zVtlFfhe6>f%#4vQ84SED{&0lFNzg>j899bX%ZwjORNm`xa3>Xoe=WV8? zqk5MErJ%SVxk{4qqv2xL{PC4>@HYUq(?qvU5ReIxcViu#vK3d>79vAS2|DrBb%IV@ z?h(qwUph9P$1qUgM?8B4je7KIQY|5EsPc4?H;3(l79w0we3^z4DHMY)U1t zt+#J*8iNirC;w$9(P=nox8 zm+Js|Z9OL^CzV=$Ru?>R-uAogIG^fd7S_+sJg>EMNSh)o&JNZrhGr0I>7@CluLT~e zS$=+=tA&_ibOwvUfaFiotu1(d@Die@7{4c|w1%f?pf=7@gumfk$O40-ZJw&2b#r9<7% zkTm6ZoSGB|R%xUA*H;Q9Gi+dXg#cj%^2HV3&xTFnF}jVcf|yI2BDH_H1>%tZ`{T3X z$P7>lj)1ZkH=H8XOq~rIo`CtFYxNU(YdJ7HdvOY}CeUU^rG^s?g5i|M`-J<1TVR7( z`)71`c)3lKLEfdMnuc|+1Rq6;qRNCD-B7Rf=qt^_rqWym)Dq zacHfCKpruuL?>syho>m%9f5H;Ry&(+9oqblM1Cw~Ls^Dz8qn3LjZ{_Wz0xY2vY$wu zKU1)4H&U2PKg7w^I0SnH0jRn#^AS>pi4$)bL;pw z=%&C|zidTX+_w6XC0(}(wt`ucUANosW&Sk3T@{rod^Z{Z+*?hS-5k|C0@6LYsy%{k zl~p}uNrkw9WB13d_WR}&HtnkrAZ3+E3dshWp=t|%!6kiyI35@7%#+oHTifSfyqZL3 zYrhTrdJ9rx_FFSx>~{;hDz3OIVEkpxK2FpcR_%ZX8RuIVQZVZ@v5EH%$o1`;YUL_} ziMF7SK_try9`OP~ZrcZu$otEA40<;WCD|Rvfr*0zX3pwp%Bsw>pk~&l8);fAhLVOG zIXhS4KZo3|fn%l<6P>=Db?eZ7=6DK5oh2v1nruuc@InDn=Y(pcQVaE9@vrF z6yDJISxdNr4rbM@t7jwZd#i0Cn^k=gGQm%dTOx2IbQx;UI!6iGs#T-Xi3xvC+H_;+ z`v@+8ZjeT*AH)D|yP96_E|@5?{IMugFu1-Hea1Y;eF%(%W4~^#qs_(t6jy1 zn#9=urHSaS^-b+S*O&axwF)=b*X+;Vg2$ba{~6~HOR`mx#!3oDiq5)fEN>s%zD3W` z#hzBf^d3}naq)e4cgS-fWF`bedcyzDfc@?{HW8E+^H%CZ(XZM%I+vZol6WBmz+uN3 zu(CBj@WssPCu69o;rvcx=mVAuSt|zV*WCS*&%}O8d@Ugn2yZMO7^L$m=0)`-b2un$ z^*t0C+~`Xx#0yWLIQCSv`!f!*Q$z9G1Gfi$aB}-ehvXGL%<^5DAhaMFB`{u$nBhLA}(#>``^xP&h2(Q{c1FHshIrqm!Cb1GjvvZ zl*Cd2RO|kd=LKqn%qIg!07fvL_QNGlgz3wcAVhE393&sgXOiHSKcsDKC4B#-=)lx; zwAAImq)r6XR&m=Bx&1kvlFqn$eK7jZ^>j3WjM)S3deIBNl2Ugw>&(^ zOg92r@6P#x>SQq5HrkmwV=Tj$6wl0H?N72I~>6@`B%b1GM%{FZRq za5`T`3gvSm06H*lSJ)DRNJDz1ae0fsTM#Km@~HTP4rd2iZ)gEO zUCb5Ji*s(G3fBp)m+-B-99H3(HV)Prd|OJtK!!|fP!e$sGeyQUp)9PduV6XOXz->AuU@%B6ph7IpOV0L~$SLbUZS?d`z;_xhG(x0ud;99&bAV_KAAf$F-)Qg3}x!$s}o`N?RKCi!fe` z9V$U%yTxS`@QbZF(8uWV-86e6b|ZpTfxO4Wi)zp})pq>J=<}H`zj|WzKk!9dHdTTM z_fhO;hZb_>gGBPD!u3~Y8@_X^08OX&NhKA2%=|c7Tuxr2^PGK8hQX-)b>wK=P4LYc z198T_G<{Y+2q(k|$OMI1D9@e5{`1v40js@c&3-8>xWcAa+k}dC(p%(o7U0403jEK1 z-;)GeP(zmRHBn63a?V3}g?q&IXw=`>_*v=_x-n#wYmPDld&KzVJ@mev%=+GUy*DrG z%=)QBpNiTVf zv*b`)50gO02CP4^#rAr1I->IjWo2boyi@57uyB>*p71d>Ya!*Z*vX_HfOzU)lRb4omH_Z#{r{cy$6xnXr_g z1S{>9Q>aPEGEJF=d*ZvF>_YgcEE^+Q;HKY4XPZ~)I)aTzMFBG*#K^Y8cRyZAGh+wcN{ej z+-f=<3$lfLO?*e6=^qJ0!k?*(k&$|T@o9l1cVJD2%A>A zySt>jbJJZS-Dho{_j&*C8Ry&CA7Bgz$i3FOSIv3N-(|kh6Uf2!C6jI{$UDkHB^0a! z`6mfiohk}u+*v3AOZ)BAfVTX{Cyd`ntIR_6ugI$;TTjuW5#`|pwiAEL_WdBf*Y3zei1I3OMB=d`$5`y+z<3Y=koFc-eu91> zQDpy8r+f{p3=&$wK)Zs`cNo<_cN(i2()4zF6QI9OhqH7VI=# zZcdGl2Y>mGcrMhZi_m$*jfr~Y-frTB+mK7;w z;FyZkH!vX_cpr@=}(|c*uf*G#rVi?J|OdgM`o~}8V%IzN@kJh)52J5!8 zHhDos96SYlBU)k}HatUlITL^#+BxXQC&B+SLAM0MX&p-n?SY2Il z3FTHdizdG<1ff>VN77KNEwO>}a!I1}r3v;ZqiG}Bw>yi%mgIX4pcqtIx%D`FM=I#r z4d`Z&Vy*91r8}vylG~ORj(CMQA+qH*(`fGGq%gj$X83atZnR*J*XFv&~I(G?Y?86w8}>r2n8lGa2MlZ{E+w*l1AfNKmDT` z`wRMXn$Z^ug30{-4|LPN?TR98KR$~fjeO9j8%$?F z4$nP0I?AuA5-`7OAOkVTPv!ER2pEaf?ZF~9O@$iG&JZ*!vh+OLd^WrMYGDxlC_z?It@+w?{_xAzC!<(%l_Sqv}@Gs@6#d1`~b-oq!)9a5i&n zlzZ~4=(DRUuu!o<%y`{gbvkepz?0ybHVqDlBlNYY!Kn9M+tWe>%H&Mn`mkfUeD?%y z5Pv2*E(VWYXCtM(3$9!~u3sbZ4YzHrY(z)40Bg>nL2zaZVYb=Zl?tlK?9|yYubmTs zXH)W7*$MQeBKJS97Y1!H5Z1xcwxo$QKjU?nd9(@-39KZi`v-MJQDMG{Sed;4Ui;qN zMY@#p7ChR<3vxbdN1)#YPGKp?7|dPfjSw^Xq^4zkO8THmyN}U3SXM=`^dX7;QYfKD zHTJK-`XykB|CmHFa9K`&oUEN)hPw9VYVYL2ybMGHMG=Z6?K z5A7LPeCG{?nh1L&mK$di_`dW)VhRJDea#y{dmM1Ne*kyU=$ae*UOSh;5rkq!+R~>- zc9Bd(q?vy8aSl5=>!f+YH-ShBr6(D?W>2rMtt8%@!FSu1lhvE z!zFfssu%k7-2Wu^v+&k4Xp&@!M4pXU0_m8qfPOd+dN}R2I74ozjEYfzR0?$Lc!918 z9Y74@Mf5hPW{O4t#E`32gDpwN_0|zzZKzUh|mhu{x>r2I!=uk11aMn;4B}(!8 zSYdx_dU>l;k;SVt0swG@bI;hk7nz`s`1cqm(G>2mWCGN=_3UUq#-9!=V3^NvaD5Ee zEwmsqb8k$QG%QjfS#&m=>(^rD#O8r`fy$OnH1$fpPh<|Iz^(y*xNuIjVF8r@N3^by z$8p4E&I+K+48PU2<4j5gd+_5+9HO4gqLI^IFgQwSjN|7Pj`wAL^%YhFglC8MO>1iI z%aK>EeTngYHTWOw;YHDA>%ND11K-Q@S(R~0PSr<)A4+CrGioj^WyguqbC*2^_JU_z zhhPbbs}{%cvJ_kMb@d3Dijx5gb*h;b6N<*jnx?8oJ`3StP@`a}Yc-5Le%VUOyF6r< z>mNlQO?u9Eb1=Lc5GJzfxz?xWf~;)tNV`Ac-tC@M0) zd%pZ^cI{?~_)97Yp;#-f%@9a|)Th6%xPly+pVN;dewY4tTcS$@GI4`tQ76VgOpFX^ zI_RThcKX(FkYHPbfw$Zb%OHb3g4Rf~k=DX34Jkr|j%KUAr!aL_v~X&z)BU{f2#UCH zYUCn~9=9J9YE1w3G$JvWFO(O;O^FT2+FEwl#wEBg-HOEkw%G4qyW}@O0P%Xf{|y;m zyHNT$(|&W*n>=cX(%*0JIZ@jJa95>uooQ5cWhdT{Po(on+iNSE*A|T!&eN+i-^cl} z%<278W?3D`F1AFI0`FDtW=oxP0U}(1$NuxHHS30}hc15y-k#V)a6SL@aEbI%Z#=Ich6{w26a^6xm z$mfu}h~6~)pqJ`Ce3o(@j=@@Kv5>Z#G3VOs#Jl5s5Y1}mbvcMz#gcz2dqZV{GiYKk z+*ZNDU(h@lguccm#rWq_JEhC%+T7(TU&KN3$iqisA-D_G+{jJ%y~qgpWNH&dy}e=; zpLtY27Is`?Dk)Rmum2qJF!1k#i}kCI#)rZwsrXLvJvdzWJZx<;NS)@=%XZlvOfLMj z1>NUj?UVu7yo=ZxkYkf7NEF!NZt#5`0^((sL`~s2^ za)!E5Eh8fX?r-)kE)I z+w|tBB|xtJKsDdCXNfGHlW5n^*B^LyVIi$QkN4DJ4tjF72EwU5)z`S@XQ#Qs#A3_T zbY@b@(dZHAMyuKW#+>H=xgLlSzF3O7NlQ+qV`8tUsBpKdDs?;!AG6Ce=Xhi>P6NF1 zRJUnRV(r9bN=Zl4c0+N7ueJgbZJhMT-$bC_%$gJ3aL2}w5z1?r>nYcQd=siJU3t+|8q#dS8wC76J7iZLY}pF9e$9G7qUzD>~hTU z{{=tf^Y8!HoVYP??;msGteg!8a^iTq*I|iN;P9B)PETyUVV|JXFVZdodunXN`%XD4 zj}3q45N6}iBKpV`84^2ty*cD(8FMEKt@kr#OFaU>%@C(&z~={^EBV`j=BsJ#G=1v_ zeO9LaDD=dw?^9gX20N}U8{6#QMAf8HM5N5D<8+fdFPOk<5MKE2QBfklQ}*`?k`{~K z8|XWN_3|YbZSMaBGk@Q~ob&pBiAN5qPF&DeyZ!gtd4!Y0yCdDsvX4}hm6t#n$687o z#2ljb<_Ef3&KK9L9lEROUV!FrIfE*p)K*h+&(uL%v3l{p< zKXpFqa-=3zlDCx)U@Sh@lJGU+;#?Fd%4O>M`%gVB_CFND^{Q%RhOo0{)!bKTmmoGeEu zoEtaM^?{lR*H<#HR*lew4|=$ELxpzV=%S9vzp&@HaL48U=UW^GH*5 zc6Noaw1ufBP6jqE$<~j@q0EnUyXHib@uXb>y=9pdgQimMFU>D^M%1UrlA6pY7{g)D z0af*X{17|j5Vs1457u=aUvn%FD@o6_N;CC`hZMKczA0~l>D(iXEH;2cL9qdpkW`Tq z&I?Xge~$c-URf887Qox{K#Y9`I3Zn!ACn_1f9akdWCk4oj#oAK?Ng`y#I#5PF>L$% zoPJ6(L25Z&>$Pjy8SS0n*^RuNaFJkXhm~Ybmn<*VevRlhIr3mK*xi%664sl}`v`t<+m0lkbU;T80={dgTQfxJEHUG0_sppF$NK$-yk2w9IuE5VJ-5lBSoTNBwaC{@ga4@oHXwCrX=!<|L3@VXRu21{7$WCqfF3c+O}^);@a$^_C+UUW|HY>R zZ#61-XieZaJPV4pbX8SH3%hA+t>@}zt!63*g-_>wTiAo=pSFH@690Gm-GM8$s<@*( z;p#|K&1i7;ZOrQXhSjc%bxqsK-Fw0zag3|Qu(m!RXa)+r`&SYI%H2xk@M5c0y)RHw3Z+wq zr>Em|9xpsp{yZY+!GN8-kW)~<>2KXCE@eaDBu?oMEN=$uPU`mLF>@olJ;+QbB9L}1 zD$xd+TvAq?vI_#F9i|ONO7;nF-i)2gwmYy9ip zMjpI9h_4ci+^+>x>jRUS=2UqJ9pfi_CxqoqX1j&>Dm}~Hkd!bEVu%%#2}80J|YM-z9;1xfvk`V+y!^Y3UwqX}A`aH?`s(kfphBQOh`nV%v&>>NRVE@zp(Vs=u-_x0}0^pAQ*y{kkw5r->V1nS^@jKzqoxdUUkT|XTs{DNTZ3Q0Q* zdzy}V0O4SWu#4yq?D`|%1+;0;lBQinNVm+9#Y@SM|F~b{iyxz}_5d^YTImv(#=@ZH z!)&Drq!F70c@_UCJyO!i7!n8?yeL$i3{3{Af z!wm%0p1f|>-ee#1HRGS`h>C#_b_Jr&?-MN^MeA*Iju%uE6k$CrQfqQw)fMpE~KI z%a@A;fFbA+^*Al`>Z`*N_pZksuZ)pf9;PWbKC97}!ZQ)h+F*!N1Rz+kz-B4r>krC{ z?)gfK$Ce1U2c~W~+Eh5!l!u!6=cu!1+LA}BUc64WU{B;Z+|qUNs$sc@mx+IZpQqdu z86)adPc00q4EWjZhXUi5$piG{SX%mG{PiK&9~1HrXRkf?xwzZ|??zKajEzliIW>E8 zIIRwsMWPdJpZyEhhj4xgFNj{Uh4qCn_IOl`ajqAqqzB0vcMt1d-}U;DH;?)Nm0BMC z@8}-jRf}}j{r))@cJ3E5QKyR+HJ!&uk{Rn)-F#>hjD}Uhq=ws9B3qtm-_Z~bCtr)bM5kvO0iMM0~X_p z|L7<}2&y>E-$2XVUKtMpo^E6OuL;L&yOs`%d;G00{P?c;pW{$!QPm!s9~neweqadP3mPVQ1uf)_L4 z%EICnLmjD|p}-fmdUe(0x%C%+9@zr%1XMr1d;DA|pTaU>{}JvKg(8JJ#DR{rZ9iY} zYZ^-H1sXef24t7|RHem{blbGf8Jk-#~{l7AS4F(k=9Bd z43SgrzL9k-qK+^z*6-7)E1d$_T9U#KOy!w)2Hs9pNB(x4}sm*8i2_1Wvrf z{s^S_i_{TmUd7yI3+tp~2L9Qkv#_7-)$p)yU0aD`T=G?i&VhGIQ!rQV&9RBUo!g*%Ts=at}{tcEkBfcvLsh3Cp8 zAA@CfDRRFwI*%VQTX3?wHlpdsq)75yqY{@Vm#sjDzZ$7);#Y#+>KzF&k(>R0v4&^a zNUR}8%xgbP+P}eRf+cR;z|w(dl$3FHa^ltchsbkKIJJVt&!yT-Ghxh}9g6Z+Fkde9 zT6eHx>mKNhbsH|*=62`eSd+6&7kDl-UIsj5PK!OLj8!;aulIPZqLnm#p`%BE8^e1$ zH=ZE7hJm8nvLBcA-UF#oj!k6Uk|!{6*D+M&t_fpEHZ7KS;svSr*ZsK`nTHI$ZEegh z`?*Y<=Jxl*GGh34c6Q!}$f^$rV&7#<$srxBbKaRUi2h;gatkf=IH`H_O`%0@5b7%@ zA(5tw%E^8!TMI<4Dy`_U-k;6d!=}N7Pm~i^QGC%Ck4{_3a!`M)c6KO1l@JH098ueP zy3mOJQ9PY?MDLtQyi6|XKP(c_`I>tzxbr* zim$>tc-q6LPr@E8d=WeBiD?W32+W5rU$nSWa$lilp~Hsa!Is{E{(pa;j%z9144(Nh z#W?vL1`pdv{;QGvpp=Oz$zOxOj{GLx@xeAdgEGHTTMuc-vz|DW(;l!Dyx4X=y$q!k zsx=pHU<2gqxEIHhmibi--vK`li-&Etq+ev~z1NkK%W_9}s;i{eBPWRqq^oUG@JylC zjVD0wad?U3YL>LgODUz8O2r|tKMed6SO5cJ$O*BQx!(+-Ur+hkWzd$B?w=M$CMzGz zU(P~YCb&41@2E(h^Ks#Quo*HqPbMHvC2;&<5xI!hQEQ(ld?|Sq90E>!s-yaY3Kn{{-hAB50iN&llw8w&Zwi5)L?g-}rdn9SGc{d4`V?AY~{G!1e?<)t=($*V8X-ErpYj8sbc5}PI zs)xM*hoSSUsi*>ZN1Agu#IFe7T7s-^!P!#N*$3!v=M)JjOoBFby8E69 zIaA%6{UdPa=5YpAJdJ1lc6vpIl1&uu7JYubBo?6VDTFsK##_J_KV|)2H4|99%$9X{ znx16k=Jqfqa#H_-D{h=+ntOND0Nu><3C?6{0}@&y+E}Loohr_hLdrE~+P}&fK29YM z?};TpGn)pmNxJdPK<%1S4~r)c+6O}M@7fclu!Xh2QI+g6}W49IOc zCO`1qA)8FKYx(Jlw52p3;!kpY%ROl}e1mfzYJJh}{3ZA=8J6Pk&l;aFWAWUxmrc%IUas-1#o8+ZY zi{oo1V1sxe`kkECq1IB1=E)<)Mh}U0q@hP}P)Omkm4_Eiylg}&z>0jrG%l<|zM5s~ z_c4cUvJ?(@4JlBQ37ZwkN>S;*?hv4Tet`dbK5%;9FzzF+hA6>Kn*2v<@uy$;sVkiQ zHA~GDIltl*XU+L$$$Y>im~PT|TAiJqZqji*q!2SD`e-{i#s|(sLLjHF_#SRv#Y>T# znwC<)b@cqAXYE;Y?E>7s4;gAAwM5v$hHSQPK;Ryg4=BC73RXNN5~719_Bt`8LL@s< zrFud};df*$)wFe2=}j%5gs`6f8A_c9hovv!TQQgrZNEF=bRm7zd$Eu8x3Ds@U!59X z)V4ck*>HTXB&l#NqA(OPgeX!3)-YTaUu7;jfK)H%0-+%*Sf+|T2hn#+-`-}MMXdla|D9u-s}s&?6+ zG#CDp(wLH5qIXhQ$V-@_K@PHAghzG$)5|BrFh0ck$?s57lj$bk`?Jrz&Sa^XjBM-i zC4GNIX_W+)LSKhbIVD{#KfAJ|GN(`P6+W3+0=Dnl@>Q8_%OCs>jY%M>tU~tL?lW?v zjc{5Sla-f|*li)nCbyk&`(^R<`+xzuYId+=VP%1d-Qc-UQ(<&z$rPYJIB@jH0_prWtJSz9~ZhEg(#q4VR<;wFKWE`0k zUtD7PHZz6vd3asDGgHNNMoJe^SpaGdMNX>vLF9!;5BN)6iWnUh-nvVXn?wv&lJbdN_FvwEh5XN)X{JH4iJmNGr!ipq26kpz`$ z*cAtH2RDNP)LkmqW&EV65Qm2?Xa`^1+mS~RSe$JujxAz)w&ujgX^=tW{=a#?OHU&d zgPFp59r%(R?P!R11u9qD5S&9a8lTgkClVkl$Klecym84YCjU+-$W>!%|zcv~DG0YfW8(+p1hDTw{{V9G5jiJ5-yP2`MEQUu-^tX}%kqqEu zG3W;j2N#7+N+kou1O+|UeST*+fqqtZGFc$lA@?+K=#GQNO)52Ok{eCesY7r86$?Vg zX8c|-7hP^7lQ1W(wO&iB_#?d-Xg@oJU5lwSmuaCF-;AwzYGzud{)j;#N*m5bZ=lS* zppj~LUvPJZnYHY78F(nakvlKQcSHO~zt3F#YXd}Tv4d)<% zJZ7R-{-5pR?{^0tjD3GKDGZ{;)O$Ycm?%hfIE~JSrjZ%};P+jNcs3V92t^!!`T`kW z>RVaUKfn^Hv5+ezY>M}DI027Vs6%od*Zu@zQuLHWP6()B66#j0FB-VlW%54r=sM;kNC@2E=e&n$tTl`zZ%tWCImB#5gXRz%9BV*Bo}Tt-#E zt+*iKI8o54t3knQwYUwZy$d_d#$$>6I=mwecsO>7Dn+9!^JBM<_5FZQ?CIU$HY_>s zif&vV#aLPIZt9&JcomlQj^L9d|9IQ{D|8VTb>_2HU8}r z|KO^<^h98j*)Qjius~9He{JxUyRnQqG8*%r-Slr;C8J_Uk2UarFx0DL6ryA2VTI$d z9H70@m^V|ukEbAT`qja{lyeX(~Y+Bi!ySesq zwyAS!tUE!yX{xha!U^(^LhQ0SfSw^Nx;Z^^7PT4p z*z~4qnC(izMKF8y#mR}<+`1s&4eEGRN>fRJO;_IJ_aNJm;26ll;fLcy$*zvT|K4AK zk$|yIB#YmhA+d1Y`%Qxqn-G7s;k!VxP!3$@t8|S7O#D5lu9ru5X@QengH3wP+POq_ z-s|#2JH1myx~}B}hn3xMy`$=|Yb}r8M?kt8J4L|McYbj(vk^t5&f$=~g*|06$WW{O zn0w!Gl(}MUN4zhgxU3%=JA#wXs_lh~qowT&ccDjFt<~riHXE(j+8K7g1bDw$Tffe6 zP`{b8UKs5&n5(PjK%4sq`*mNE%(_e4zKaZ;1Pfjmxm8WK$<@S=w%E@Bh zKLCmeA=kstIm~-bd^$DOjgd@0?))ov0VDi1%1*g9b47oV^9Ua=I_NG*DF1jV1bG(* z(0pyAG)V6JRvJ`5&1&e?kHe*_tuJ-C6TxCQv4OBiy=<Zmt3Wy3BTIxVZ?o&aW{fG@mU3wnGFQ- zURcj%;7nL1Q5T0$IQuXQ!5$FBykO{oKeFjN9anwYY0Oz7Q;-zSZGD`u zj+I`N(bLU_N=u8NC@ybpzz{Z(uG%{6zi_*l4Pkn~m04WcuKEKfy(}l;yTABQG3V5!VYjQGa;D+d&H_2jzIxX#!(%`>AoYqu9nRNmZG4Bq zyE`L+KjD1lKQaF+EHM1(Y2v1w;n_Ct!Pzsa!qD>rvS3DZ6RTp#^uFVAz^%Dox#AAM z>Mv6VRg(p|@buZ|Fk9+uDE9EAfAMxvdm6nEFZ;AlDg!V1Ph;W6d6UuZ<;|HofPBN^ zcpbjvXq319DA3%P6P+8|bpr~kc9-jDp@TGn{LK^3X$3mI|0#wN!|2eqL!r9^#|sO7 zP?l5pu7)A%7PS)a$b6#ye^@KN{@WaM)^)5k+A4w$^q5)cud9!~4{iO{t6kUQW2cTC z`)J)eF!ek&jsEWg2cxM{^OpR$Qb(gagqmT@ZO+r}FsIWDx!P387fv{?EPE z2jkbzZbntnPdd;n$18{aV%<=w+%tJNJW?%S-S#wCcdI|q*)-8(YSd!`>rq+zXY3LX z_7W-jpU00;R5hiQKmd8r&;N>0ysMw$3eRoU^L}H%5jo$*blF-_)`^E}#xVZm8Z9IG zSY0<;<5C0iqe)se=Z6w=F6d(Kw6)_b!Kye6WG8zTmX=pwd+p#enHoV~blOP{riZ52 zR(I)^y7>#$-F&|JsB(~=n%b%$UOqRz20UhvIqUy#CS3w?`sW<;3ph``Q9L(CnD|IL0}Q@MxBW!F zmU?8@#T^6Vga>+>zLSnmhCajmpMcpdTgTPc(MaziFKZXEmna*{mj!By<>H&*Oe2o& z<2nv7;6Fnb>gc)URkiu@L!w>h_mJ*L>>00%o4MoNdoo>r`%X?9PM~P9^2QO8=8}Y{ z48+9Tc2d3f7H4QVI^WncjQ7k4`0lsrto2F1eCF_?s`Fk<1i^QX6cag$_?gNr*jLuB z5ZNa`=}2E`s+b+4S9|ZKM+5gb*RIV?YqMnlLQ1Yria${~(pI$@Jy3HZxM?^SRWLG2 zs!&gaMwQi{m6wT}pFU{#m6yeedwuCSeKPDm+mA;7WqMNKvaMJ(8dN!2(B6BRQ zis1zdK^b{weQW2eCd5QUnuzPRPi7H2N~9p8l-HL&7Jc1Per+3Gwr94!U-@e8v|813 z$7H-S)=CM~UCWHbTTxGpOK%joaAZX#x34(eq#Nc> z^xEj6L;xatE;yufPydsc166{4mc_~F(dFR{XSj@an z{nNYE>3erkK2#j@A&QF)#AhpV2(oN-|ESLuw&{r)!Wy*5SUx)!G^8y$be0BN4Y29) z0c7pgCv&Guj##&h(&Cw^M7`DKI0@#=?4NZi(R}(4a3fgUV@Z##oy}2sF5vEYIoFdQispA0hI*g-+9%xx6XuYr33q^9Ly@O22x; zCmM(@JdY1f8;Cf!^Y^qysi6!ksD>yg->NXIQNTB6tNuFuQE~K>sU(*(IZLgpr2NJt zax5KYQTIA0ZXWHeHdy{2n~K)mk=Nk`mDN)ZTbq9_&rAK1UlP3uW-(EpBV-9xkJRSH zqK6Fg&002`nyOK_>mVjLtf!J=pF^7vHJ4;AHR*r4C`Cq!rL+4%W4?~Gc%DKnudcLM zV$Ya}L(UHJ|40pwt&HM0H))k)i!{v&@)iXi(QB(K?XjZk zo%gsbnT#c&C*_9|89Zu&2%SAK8lq+%dG+D1s>0Oj@4l%9R|Me0H*}aKGGibJdE?Z9 zk8|R(vsP}@U!T1#6xSpK44*aKq^0x;uN|WPQ;BU_SU%RXhO*vbO^pQTxi-&VL{jBe zP5s5m7-B$wk~QQYf8Jycch7E|P7dZEx5;mv@d zpxF_0*(q=CjBwl8o2qZgzFtN@$umde+4EZH-cNpiB(GQ6eD1d8VOQq#G;cIqPiMQC zraw=>?$0-9FYze(X2Cs7o00wHak8m~^`z>g)$hT1`j`Bca~1u?(%_e? z6CVB+*>m3IA72Qt1?7C1meUhgC$)6W6vFS@S!0}ou&hJ#H7$A0B1OS$TAjbCLbj(^ z@V#5-SDTA;nCCf%`i%0xP_yL-;H)(a}^`K?z+==zadg zuZz^4SI@2Fwq0{G2Z|-ZqNdQ~ZI(wAY;4$0Mz*+i8J~t*{WfD;Yl$KLfL)|i;Pl{P zr?DWa+OT}=k{>7yjN>48fhDM;(;;D->-bvj(z}ux1QC{3`P{LU3v@kUZo?BtUVgtp z96VwS%{ch_nY)`(%XEh=ukJ)4&Sa;^Fs{prnK$X+&vV_t2x=CS?m-^QnJJ9Usn|H9 z_U$U`uT&{Ej?b)_18ddapOwAF}ZH*@+wkS{2J)$v7R zpMKKf)>+W(gq2vWfA=a@EGm>j)1p-N)-fA(B|Vuf3v5_mlj&TqwBKfl3P|bTCJtcrhVGT zx?fv!CG8z^`jE7a7_+C#`gG}i`xXmicuGuHyL@uNg;#6x$ZHu99RD}$Yh{9)oV7DF z2{{)WHifJniIdL_{ydRPpw;qXoJJd+3{WOmc6HgBREg4d7k6=iZ6$`7i`0i|UjJFJ zCKCdqBlpS{6?`l0ZuoQ85_(R`LdnTk|2(5y?O<-=r}lL-(LQ0}>5-y}Up{Q70DdMd zRwdkgpKt|ihMipvG|`%I zD8c(JtTX=(r`(TmTFj$sx`2f-6U!S*)vJthIOy6i;UsDt0l8c9{rjVepymY$%dB_k(0ap_h$9@VqU62LC)Yl3JT|gCLAyzL-~KW#x)Ka zu4+`vDzta^(Ncxx-1|eXmgrdWl0Fi-K-;Sg4dk_R;n5l9wicGTmKV-K#}P@@St<6S zu9~%#Y-QInmT@)jG=BE^EH@{lZ|o}{Wx|nLB7CEmORaURh>)hzW|&&f^iBKF^;Q4=EG3ECrXi0U5qI$(Ty(;qT1)ig z<7aOO)%2r8w`7F2zHIe8q`qF)XbG4coN&(^kQ$}{{oPj+;<{QyP#^kn>m>#~guws9 zPP?yfD|E`9^#a-Jn$~R0_QQ8}D|e1hi*(){r%+cqB?uaNd4Ue+M7!;Gx?k%DNhRrP z(VD~er}GxK!|SYFUdfATL}Y$iyq6P#CVJIr zZ--Qq;K0 z_zMhn2LvqZL)O5VZMXR6&qhovtULy_R7MsS2T@d%;()J{E25Rt4-wZDV^zj+sxVTX z!uz`u2EU6I^~OUK;5byv^|J|bR}{Keej=0Xz)&}VXQyb94TE{uyOCA6c{@|(O$uAm zXA%^Y5BxslDCT^h{^+}8iG^OHTJ|RjA1?$@Yw7AHOn<8*BPX9Vc5*7a)A6vXaLKZnlV) z*T}!^0%p3hxGgHp_rHJt<|ZdMhf)X_0+|wRZKoJO+m!>u%aeK__?txekhCb;(1|JP zP*&D(7R4h1qQur0jbICPu2^}PS5j+d#CD^cRQk7HM_iu(@C}cb>g$BCVD^pJ1qs@4Gx!4+JD7v_TfNeW{UEcqP>H1U zvVrDew}vZjb5NMMdw@kFlr^B9$@aL9hT@*dMw2Tp@ohuyprD{LtTe$eyWCH9%dRd? zYLbh1p}``2eB-l;S(aK5_BJ9k)6L57KO!S5Ar^D>(5re+nC`3qRPi*Wod5x6)2pB1 z^hXS5DQ8q$v!J}J#ON9FJ)jb~Z39>e<27V_$%$l+^31ccvo{aO_hTy4(UuH#6m8RC z-3?>cj~}Vhqhz{>H1M_wxHY`Ae8CPbt%(v~*;$VODT?T1HF#B716 zB1N=UzewN35kR}O`x4iQ_|p(D$k`gaRc^kUifLUMs$g%MvL=shZPFV{)Uc~3>y_|= zx*h2^Hijd(S9_o{@Wd^_tq!EoOYT#93;>U9!3r=`$WLQdM;YNnoqGjKYGPjn0{Uvo zE3WRj+e81y%rCZ-{Iz$s3h?qSPVW{p6yOS@(^)JjExfPT(wIV~yfLRUI2nQ#D@*6X zWNCfdoQi+1MMzrdTzirw-C!p^Sb78#-x~>fFIU?-ssRTYq^-xtVV{OQp*Yz~*K> z7ZcGlr@kinD^k!9Xo6ObvmBmv99a=EY4K8z?6Mr4iXf9Yg}E-cqRyVSI%MM_Gc^6?KR%bKlSDA^npyP)&AmdUSJW|@iqaujerl0)?Hj{ZkQtY zH0VB`DiAArEGs(8!*&P$0<%PqYqW3Fp_#7+;dEn?8Gk znS$`Tff6HT?Aj@xB}~2jm5UI9z4l5$x8MDz9Vqddpdnz@)m~HEzZ(|4$DUwGwqoMI6Uu>Sp z{_4hhUOSI?E*yQF!0ItrHRw8+zBb4)im(3uJ!0wTy#I|Jp* zP1CcME~kXudOK-hBGgcMwv6#)hm>z^1>Gs*3**s)9Ll7gW>W%ISA(VIfI73wa}<|x zQ1PMj5wRN*lVQ@IxRWn>`KM)9_&?+HO<1Y84W_3}AA_0A+}5>`Z%*q;_UjsR^4hiZ zaY$%EsBisaN9v9#V(_>PdX|%Qz%j@u|Z9;Hkj&&(P- z^uWv?SxFh_ptd|*AN0P@he=XUxrlkg?oa^F#eaLSzRXHI@~cDo&6 zWAhT;FTkW+h}lJ8k^a?V&IUPHRS*nOv# z_33>~RiF62H@|h9P|T*D5=E)%kB&&!qhyc&6x-|c@r!uit`o$~E{Yb-xcqM6+_C-1 z21T^!E~ul}MbN|cRea(Iq}M8ym=czT_9FEf(h6)3KODMeF(FEs^c6bxdNXrKBG0y(L4MG%hUq(EoMHQ<?D@d*VnfjSy)(n1aqM-G;Q1&l)zPQVOl(9)B1q)!+p`=3Q9eehSBf-(@6dUu>LJ& z>~7|iytGu!?8w^qM#vt&8~gZKickLD%Xj$dbDIjO5AV#1fHfk53QVWJDm`jV=gnBp z9gRjy-;t%f_Z53sw;JI@Dq*K{U1r95AD7DU_a}LtA1`{<(_t(aie%9u+9Iin?@}L9 zTP=ExA0lv`K&pUxX?E+-l6>RD3Ak*isj02<&JitVSjldS3|ju7?FAaM*|pZWe2BD> z-0qBkF0qcS_th$2Ly#v;{P<-cJ)CmS*BRl*YxwpuAD^rsxMVLe$o|ZYUFJA zI%eTX&dDe^CiAd)s7u=uds`p)@6@NO4wXtV?{1dYTZf%jUY^ry4NLjE-NZf$%Mf$Z zYX|>Un)Rljxgk;9-^=Ow6DsAs+0N$AjP-g~`;uqgxf=v!bI+X`){nM$vbrVP#}A>^ z?5Mi^roec6mw&Tx&^_+-IveZtD;2N9vp;vjdF$SbrmM(5PcM|c6US#70cYa*WLOMf-)(7-a=U@nKt&rb#gB*WP~3*>Yfn1FH2F zwImY7h!kIkhk6zF8-n@#Q(`#QYND`7-f}I2p3n)J9dxqDOa@G9UUQP|zhiS+cQkyO;PmgO@0&jwa)b#H~&v2bf28dBqZ)G%f9v{bNp7^ z4eAC0EJqR*&k)bfu2G4~?2h;zH`x44papB14-NF;k*l(LNcH50^?_gPA%Y1^UEEUg zN9i1vf{g?Z+?Y!v6d4cB`n?cnnp#Ox$_eJm-rnYWtP*G118z3k}j*4KEAWBh`A_@vf?wf=oRK&szORgyeeEitc0D?6`CF4WfW!|{|JgN<$8Q!Rh5I;T zZm7LMYxD$uej_1ha?6(r{PTqv}l-NxMEP)-%CIyMVZM{Z75FnZSP_mUu!*^Dp4i zT-w}vg<9N_6NduIT2MpLsK_E+&B2Opp3dgP`%1HPJT)f-D%w>(<{#0lg|L*bs>-+KN8Cb5@2E z=`SXw1!`_X1@j5g;}SAY>$wdwJp7J=Zn`3Gg|m!H9tH1AbJe>rM@VXwYEzwSmz3zG z`D5Z9)3;t+R7?D!P;qa>+|11BvVLI+Fae*Vv%BbJsmR`Q(4hT6!rHFIWjpZ;qm|z| zohz(wah7n}5y!HAZXB>Niw{0MyK^4g7k!@dWa%jGrCS^fPRcLx_h;Ys$a5*&&CF3K zL$!TnX|sZElVrD!38>9_oJ%}<1tcC)8?iVsSThnA2U410I!o(9oZDo*Ql$peKB1IA ze@#G!3N9$?k`n}$fy3Lz&5{l(m-lxY0GLap719j+zXf7B1#&0+)T zh}rt*8+aE0Hz`-{9>MzUp2g|l;roD;@n1D!zruNAalBD>@w?!}BCV>%L5oCN06ube zTuG;CMe=qTI_irPW>H`0K&GvY7qXJAA9I zcHTUMqiX#uc!oNK*rYA*`vU+>>c|R0b!V92infBkqU}O!p{cSfqZ3m>Or|HKE{=gpnUbM^M!BH~HWU{g#%~-Dp)@Qpv-FJP#2yH&76;WUNt=G7QM>eU#;`cmW&C4f9%Ji8 zt85=YES4j0NrTf_6LX2YHJj`#l!+%{^bhXMiqT^a1ZF%?r*sb=1kF8;{4<42K`#Wb z4AcMyd>E~=KgN@;?yvwm1fB%Y8I-haKEeaGx*G75_m1Jv$%FDEaQAiz%16*R+1S|F z5hRbTO+Gs|f*gd;N+y43ZdUR#0?35%g^Wn>1uI=$T`b~D%-@op^M)oho<((Aqym62 z{cz6ep8)h8w+7@o<3?Uc4q%y&D+>w=N_sC_73AlCY>MC-1%_MV%&`*=K3ePncW+`6(G3n)Vb;2)Okdq`yRxGiH0^5rvE;J9*C z13+9@=cQ#3zt{PWSIy{&55%RWE}{yiSqqAaiku1x3fxWlfC=MdNsz?=h02hzs%JL zw!AV@TtZ^iy9T{UFCKs+`}O=i$A!y{Kq(r%vLv$GcQW|UJUYpVR4U3dw=+P!4XVyw z&6hJ~^`l;^w3DBf5zD8yYKV6aC*loq+lpa|K@@QbVxr_}Cw;Za^Y)6U% zV|HU8)p6&bQ1U1($5{82zm6%3HD6|CCLwFxASW38oK!#%up@FCa9gUbVpp~_Dzg>h z7vG1j8Xd7TwZNN09F(H@7ye)r#Cy1Bg2{Wq*8`+sAj?M@&R$ws4kEo>OWjDaT`4+eQoS7NMfe7&`(03cwFEXAP_*@OjHwZ1N{foyK zvvT0lFBLQj2fad0S`zYKCWPsRo%HWcYinQ{- zyV{bSfyF_@MRYU%V!t@Fu|&}D#pT?yh*DjQMH5L8{MY@rJXlrY2|ai~7*WR;0|v=u zxk#XEN!sVz2?n^4*YGBfN6De}KsF9Hf^2!1aII;l7D?9kf*}(g1nZbvyrrGmkZ|<4 zY1_f;HLekh_P6l(!FYB5Awq6rZ-NM4Qe|$vLdjZzW}#Ck2$NN5=y2zy6^He*=QwGn z>;3&4h4Fb9%?0pYJrIz@yeN2#8K~5J|B1d2h}Lg^g!`}dQQan)vd&VwnI1d^z=?;fni$`ujjOo+`ZR^ZEMIio(pa*ymR6X zT091ihdiXmW%j2BDLHi6<%=V~eoK{`fScC`)Uh_Hhbaii445;vrJ#o=pStu84b7pN z{k61!+Fp7kkVB}#KNmexAY9m3Dy^dH==9_XN=_-vnzMk8eWdBl-pJ66eEEW|yE=N8 zzID65;*o-tWOy3_TJa8t%`4uUJ#YizY)i7_!Z9fJFLzV0g}pEzq~@$E2Z!%V0c*2( zq9aB)S~c}%SQtb}oZdD5wrqRK+9j*Mu3`WBy?$8?n*iL$ZQSlW%VvOmqPQ9otp>jq z(CeW8lweOP$IF`dr~v>hpS=_@P% zX6F^7`_Ej+u&?59vI1P{?z3aEE`$B{nd>SJCBpA|Y{kBah24ZLt@q#H2%W=j@v3w! z4uXcH&Oika*-5CeE{CbPJ;n*YXzG!2ci15&~>6$4#Bh7985_N zO$%cOe>>9vlz4(PGCyez`b9nb>O}Eps_oBaR=sp$2edEIFCIUO%!i?#E!IZRZF6aXB+UFD02ReDI~Xrbq`M zc*Eo%A@t_fI*=g7ObfsPtEhfY(GV$U_v8|1jJe-Z(}uXZai-FsL}af#s$omAu92<2 z@`X9OQp-~Bg)qS{u6f*;ePvPE`*un!K8+!@mQ3#itsNTw+WlUjCH4XHvtyYa+X6W! zd0wQo%-j`X35TezJXJG5V?@<mqY`hdE2^ z*wsMS!-jn|OU*nBfRHRhp&(TgUJh!B;$QurpR^D3_O31h<`{^rD_OJx>XV^6!Nk! zqBW;Do;M}~xhgsw=$75V)PiQ^YjklMOQIx;WT+%# zXx9`c8zT3y`%~fRDjz|MJA(uI4TBmHSsBZ8-3ORNyAEhO6WuaLgX*s$ zpH-yQWHz38A5g`SYyS{ArO)gz-5&QRy?wUdr<)=WQ;lIevifkz zfLib-KgwKh*5Lc&Dkq%#HL28O=}(oZE-9=K7oT~9cGf;&lyYjzXxsSA$ot!?Z&28; ztna7gn?%e9As`g zW5wJ_JnUc!IV8@OAZ-kY=L=fc=|SV3KI?=VFuu;SZ5nrTJ2T|s&;qR2uv&W{LVI=? z2$gL47fL(4VX3n@$(YtqL2#Rjx*`IY45w*bm4G`)3|9gd8P}m#NYOIn+zKT+h!vUHGSr7)a+nLx1|K4-+MNNYi5AUGM<|x9+j}KS_1BkgSuk%1qyDBW?RK0oABhEz$&UpOS zVudnkNO_9gI6HC(ECa~`JIub~sO%l63VBwbhPjdd{f6s?rM+rD{npH?_*1!03g393 z=XDS4s$!qEuAm9)ZGkYPU;R(D<9krnKb~HYKQP&yC^cf!k!(-jwtdyKCe0Ves@;Lx zzISN<{VR$`3v}$lY@Mow)O|qJ1+YOl6ZD1#kh|@H&cO3sQh$rjt!XHZ&QN2qF&|=c z^C|a;R1FI-zoBu(Fz1OQux7EAbE@$K$nUcFs0q;tzSw**5tGVq+e78(4tia)G$P~V z5aW9ChT12`=1jJX*DZm=3k#hq*vJoY37pt6=r+{(uqxz@D$?~BTnTe!xsEBx0Q?jJCL5VoqZzstqb$fGvatu`lVU+w&dUL-d$Sg^$jkCXkx3+=Ikr z9nc4BQ3HBa?@yFbS5>(s(!kKr4(PaeIJnvM8uN_I=D41$Z+?k>)T3`=!eh>JA)lLz zfC{;eG-cd!OuP1(v8SNomSRFPcD@^t?|?X3um2ov-6PEh+yH%`8-_b{jS**!Vr6{m zqn2<(WG=gW5~{`aWOJ+$Hy7iCKr0>lF^<>rblCRqas0&phbI5`PVDaj4h9TBg+JHU z4g%+v8vn0V`6%v>mk#jZ0f507$NvP5FS-V>H+@!e>8S2clzCyas&nD2xLr*Dz`zKQ zjCS1KSfcn`w4ev@aYxTqR@%NdqMA4xwbUdPxeq#3$$8nO%pB!;5|)Z@Ud}O{3;>9D z@3?0`e`#wxtN~jP2Z6q$=i{6C5CseJ@?1?66~j2WxN1g$P%u3R4yv0GV7ffVk%QGD zB>M8%$0Au2ecK74A&ao)oYB{XTZfglZ4(Gj9G+CJ4Pm1w!?xjGl#kQJV?Qc$4e@@} zHOU}Vp0TYnY4eWJJJ5i7NXP2xYC0Zm>y&eS7L6j)GaY~jog^0+U{%Au zY4p2_Hh_|rcI?_@7g@hRcp^9Q_)wK&S!U_P#`4+kd@m_H|Cz+OOV$o!8;`5eX@Hn% zRgRd^*4Cbekikl(lu9f0UByIS#jGr)t63{nvsJq+E8pe$DtgJ2S;JfTwQpgn`ocX9 z&%DcdB_&<(KYK-%ek-&T`n2GeKL{8O<(;|ZS$Mge%uNd5evzEaYhb88ru}!JtNm?& zpD}irHeIgvUJ2MvvI=pV7wzTEl9dWgrl*23G{8)NqY#Uxbdn)g0_l*JXHQe9A}ZVI5XuZi2SZvwgWhXz9C5ry>{J3K(H`LN{$OaF>cnZym{372*_EGzQ7ns4&S) zpK){=dQ!CBB5b0j&8>b-uZrkH3p<2HBTHGq{wZqGDW`SL(v%)H$-_laHjN zpTkl+Z6Z!t=R-)0$~j4crbwuejJNRllhwg#lffYBWi~hxlFO=)Ldgc1lD38~ZCZoUG3PIBOGWQZ=|?V!M4}2-FGgIn4BmPJaKD?u`Y=sgPut$SYT* zr{_rU{zLO%_>nwq#eq8x)U~Smg=S%h?6!wXf;dbgJqoSeizZ}gkGhK*evN6UTbqT; z_9p7@<}6T&b(GoGPBUj~12YR$1IQ+)Qf^5|uKAd{&R1MMLUJt}qIOlfX4YWTd1UYi zLQN^t+{voNxx@D=y6 ze9qaj*XuAblifIEVPMVRCkV8)kWeQgvqtnM-RP5{VbC_zU*tghz2s;ZKb$1{=N+76 zp;c@Gj%BznPlsBo#@bYDT+s?Q_>xhgcqdfYuiFwZ4NYDP8fcaU^MFlj13!bbQh;WB zft0Gx*!_m^ea{5Y6A%Z}p6>1`bh`GJsb>cwwfOiFY2>c-yQk{sAyhIr(Bb~KGXJG)8cjb z0k>!kq~|p!nWR=XFZj3wX{6h=Zrkwb+^tB)j59R=UZ(r;qOlcT6zErZ_3F~Qp@hMp z@dYjzMN&WC5*AQdTZ!+Cw9UDqhV%+EKZDSy?4Y}Mg6!%8WS{;@v+lvxwzjHB zHJdn9Hx;>ORy^7klRy~9q$|V|v?tLOk7-k9X$@hB07N{HXbmvGd-2ufht+q~5# z>ooh`LYY&jOUpc-gI){C;eo`)Q^>Y2AaDDM?T;5`(GC%jm%Zk?_^Ew&vQ}Mx{A$(1 z?0;zT8%2Q$B9}sktwB=j-Z6aPS6+`&6fY6I428ic$WZ|QiijK1r%4}=Pbg=Ac0A~? zDfYZiSzvb_ELDm;!?}oE+7{zDoNJPupWn)v405Ov_c?uf&W7=wYcr>P^xZiVo)dMP zMc~d~4yHcs_}+_R7A9MAEl!zjVUEKeky2kR`gTV zyaeR(&P#jtRiD3azFU_Rpr-SY4|2oqkMrrldK;^ywe3|;O(ADI$Z8rFeaRVJ5%+TO z#gd}0dEp?S?JD`Bd*9iW*|d{NHNt)Y>Uj8#pz1VLS9}-fvTz=A0`^YUAV}TJO171t zjZOdcxFh){#V}y!14z|cy`dj7eiZPQ9J2molL?fU;>(aXpDpuhgnOH_^Csw0uj_Mb zCwB^u^4A5@6Y36@et`)t8!E?;hciRwxc)mM#Xh5Hj^&V(i^Cz6}QF*eV z9e9VP%x0|Jv$KI78z@6&BSi`e>!~5pfF)Kgz-6$Aj0A$bEL@8|ulWHuixuMSMKw~t z_4KWawLdx_MGde0Qgfq$VEmOiF%VDl430duZ@Uz~99ujDf(9bO7Io&*1D4VL6(C7+o0B2p|n$zwZ37UV`zyTt8mnc}OqOSgqJ3*mijMJfiPywBab)t0r2) zFWw|#ZZFYzZ_#Ew{MUueE_MouCWCI~uH#1m?N2N7u} zkfj3sBDa*2Ah-3_RG)U@MYX1x&mHV6QuromCtk=?DBneBg*zh#{}yZaEN!k7MLh1pFwkJE40 z6EsE}L`EHVI|IHimfrtPWp|*beou(_^K*tiVI5hXX&ayUFEkJn62;TaVF=O+QFTBu z#}jy&pVu9>@*;Vpa7DSfUy$$ZQYFkVBMaz$`xuy$8vJspn(;66wxN%}6w z(cDLPuSK)A71yx3v>gx?&FBp5Nc>=KqjuJ@3RQN04L8mr(ef$Ls)=35aK^THaj^?i zb}<1L$9VslrXDD}WHyb^8+<_~pj$vKt8&m^S3u*+8zJrR&va@+29G=6^Y^@KUfIQ0 z88;UVY$7k`)P8FXbgAO2-El5*Z<8!IbG;<$;%Mn76j{iGk~ z%C^cE*XUKxv%}bb(-qe+3%{6vA}4x20eXc_`T6Wx_f>Gx%zLi?cUL53%(}hw7y5!! zOPJKA&}jqPc_d}@S5(E%nVLx|F2@IzW-rG1e*AyUiPh)*!N!aUF|m*S6J9GVgzD6QrJi?ny+Qv?!}czc>BQLA`ZS3 z7V=od<;n$5s(bi=(RXaAlW}=trzrt#6me48i7|a?Ib8thJW%=%td^Pi6U=2|Iu{Hu zFXIq6w-;Ld_pfsy|JNs`8`OM#|K#g}c&opgs;cUEET}u&A5|6#`E=T04S`tfV(6RftoYMO{+K3?9_qs=uyUpjliVEV^`KG5V$ XdS914=*puPv@t0ws^7yXJPP@LCKH2I literal 0 HcmV?d00001 From 4b0819f94e214404058611ca79249cf66dd66b38 Mon Sep 17 00:00:00 2001 From: nuluh Date: Thu, 12 Jun 2025 03:35:21 +0700 Subject: [PATCH 04/14] feat(notebooks): Enhance STFT notebook and model selection functionality - Updated paths in the STFT notebook to reflect new data files. - Improved plotting aesthetics for combined plots and added grid lines. - Introduced a 3D spectrogram visualization for better data representation. - Refactored model training function to include error handling and model export functionality. - Adjusted model training calls to include export paths for saved models. Closes #90 - Added additional markdown cells for better documentation and clarity in the notebook. --- .vscode/settings.json | 5 +- code/notebooks/stft.ipynb | 152 +++++++++++++++++++++++++-------- code/src/ml/model_selection.py | 98 +++++++++++++++++++++ 3 files changed, 217 insertions(+), 38 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index a8b3783..5db57d3 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,4 +1,7 @@ { - "python.analysis.extraPaths": ["./code/src/features"], + "python.analysis.extraPaths": [ + "./code/src/features", + "${workspaceFolder}/code/src" + ], "jupyter.notebookFileRoot": "${workspaceFolder}/code" } diff --git a/code/notebooks/stft.ipynb b/code/notebooks/stft.ipynb index e32eda5..107bcd2 100644 --- a/code/notebooks/stft.ipynb +++ b/code/notebooks/stft.ipynb @@ -17,8 +17,8 @@ "metadata": {}, "outputs": [], "source": [ - "sensor1 = pd.read_csv('D:/thesis/data/converted/raw/DAMAGE_1/DAMAGE_1_TEST1_01.csv',sep=',')\n", - "sensor2 = pd.read_csv('D:/thesis/data/converted/raw/DAMAGE_1/DAMAGE_1_TEST1_02.csv',sep=',')" + "sensor1 = pd.read_csv('D:/thesis/data/converted/raw/DAMAGE_1/DAMAGE_0_TEST1_01.csv',sep=',')\n", + "sensor2 = pd.read_csv('D:/thesis/data/converted/raw/DAMAGE_1/DAMAGE_0_TEST1_02.csv',sep=',')" ] }, { @@ -101,13 +101,16 @@ "source": [ "# Combined Plot for sensor 1 and sensor 2 from data1 file in which motor is operated at 800 rpm\n", "\n", - "plt.plot(df1['s2'], label='sensor 2')\n", - "plt.plot(df1['s1'], label='sensor 1', alpha=0.5)\n", + "plt.plot(df1['s2'], label='Sensor 1', color='C1', alpha=0.6)\n", + "plt.plot(df1['s1'], label='Sensor 2', color='C0', alpha=0.6)\n", "plt.xlabel(\"Number of samples\")\n", "plt.ylabel(\"Amplitude\")\n", "plt.title(\"Raw vibration signal\")\n", "plt.ylim(-7.5, 5)\n", "plt.legend()\n", + "plt.locator_params(axis='x', nbins=8)\n", + "plt.ylim(-1, 1) # Adjust range as needed\n", + "plt.grid(True, linestyle='--', alpha=0.5)\n", "plt.show()" ] }, @@ -334,9 +337,44 @@ "metadata": {}, "outputs": [], "source": [ - "# len(ready_data1a)\n", - "# plt.pcolormesh(ready_data1[0])\n", - "ready_data1a[0].max().max()" + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "from mpl_toolkits.mplot3d import Axes3D\n", + "\n", + "# Assuming ready_data1a[0] is a DataFrame or 2D array\n", + "spectrogram_data = ready_data1a[0].values # Convert to NumPy array if it's a DataFrame\n", + "\n", + "# Get the dimensions of the spectrogram\n", + "num_frequencies, num_time_frames = spectrogram_data.shape\n", + "\n", + "# Create frequency and time arrays\n", + "frequencies = np.arange(num_frequencies) # Replace with actual frequency values if available\n", + "time_frames = np.arange(num_time_frames) # Replace with actual time values if available\n", + "\n", + "# Create a meshgrid for plotting\n", + "T, F = np.meshgrid(time_frames, frequencies)\n", + "\n", + "# Create a 3D plot\n", + "fig = plt.figure(figsize=(12, 8))\n", + "ax = fig.add_subplot(111, projection='3d')\n", + "\n", + "# Plot the surface\n", + "surf = ax.plot_surface(T, F, spectrogram_data, cmap='bwr', edgecolor='none')\n", + "\n", + "# Add labels and a color bar\n", + "ax.set_xlabel('Time Frames')\n", + "ax.set_ylabel('Frequency [Hz]')\n", + "ax.set_zlabel('Magnitude')\n", + "ax.set_title('3D Spectrogram')\n", + "# Resize the z-axis (shrink it)\n", + "z_min, z_max = 0, 0.1 # Replace with your desired range\n", + "ax.set_zlim(z_min, z_max)\n", + "ax.get_proj = lambda: np.dot(Axes3D.get_proj(ax), np.diag([1, 1, 0.5, 1])) # Shrink z-axis by 50%\n", + "ax.set_facecolor('white')\n", + "fig.colorbar(surf, ax=ax, shrink=0.5, aspect=10)\n", + "\n", + "# Show the plot\n", + "plt.show()" ] }, { @@ -345,13 +383,32 @@ "metadata": {}, "outputs": [], "source": [ + "from cmcrameri import cm\n", + "# Create a figure and subplots\n", + "fig, axes = plt.subplots(2, 3, figsize=(15, 8), sharex=True, sharey=True)\n", + "\n", + "# Flatten the axes array for easier iteration\n", + "axes = axes.flatten()\n", + "\n", + "# Loop through each subplot and plot the data\n", "for i in range(6):\n", - " plt.pcolormesh(ready_data1a[i], cmap=\"jet\", vmax=0.03, vmin=0.0)\n", - " plt.colorbar() \n", - " plt.title(f'STFT Magnitude for case {i} sensor 1')\n", - " plt.xlabel(f'Frequency [Hz]')\n", - " plt.ylabel(f'Time [sec]')\n", - " plt.show()" + " pcm = axes[i].pcolormesh(ready_data1a[i].transpose(), cmap='bwr', vmax=0.03, vmin=0.0)\n", + " axes[i].set_title(f'Case {i} Sensor A', fontsize=12)\n", + "\n", + "# Add a single color bar for all subplots\n", + "# Use the first `pcolormesh` object (or any valid one) for the color bar\n", + "cbar = fig.colorbar(pcm, ax=axes, orientation='vertical')\n", + "# cbar.set_label('Magnitude')\n", + "\n", + "# Set shared labels\n", + "fig.text(0.5, 0.04, 'Time Frames', ha='center', fontsize=12)\n", + "fig.text(0.04, 0.5, 'Frequency [Hz]', va='center', rotation='vertical', fontsize=12)\n", + "\n", + "# Adjust layout\n", + "# plt.tight_layout(rect=[0.05, 0.05, 1, 1]) # Leave space for shared labels\n", + "plt.subplots_adjust(left=0.1, right=0.75, top=0.9, bottom=0.1, wspace=0.2, hspace=0.2)\n", + "\n", + "plt.show()" ] }, { @@ -576,6 +633,16 @@ "X2a, y = create_ready_data('D:/thesis/data/converted/raw/sensor2')" ] }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "X1a.iloc[-1,:]\n", + "# y[2565]" + ] + }, { "cell_type": "code", "execution_count": null, @@ -621,23 +688,8 @@ "metadata": {}, "outputs": [], "source": [ - "def train_and_evaluate_model(model, model_name, sensor_label, x_train, y_train, x_test, y_test):\n", - " model.fit(x_train, y_train)\n", - " y_pred = model.predict(x_test)\n", - " accuracy = accuracy_score(y_test, y_pred) * 100\n", - " return {\n", - " \"model\": model_name,\n", - " \"sensor\": sensor_label,\n", - " \"accuracy\": accuracy\n", - " }" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ + "from src.ml.model_selection import train_and_evaluate_model\n", + "from sklearn.svm import SVC\n", "# Define models for sensor1\n", "models_sensor1 = {\n", " # \"Random Forest\": RandomForestClassifier(),\n", @@ -646,12 +698,12 @@ " # \"KNN\": KNeighborsClassifier(),\n", " # \"LDA\": LinearDiscriminantAnalysis(),\n", " \"SVM\": SVC(),\n", - " \"XGBoost\": XGBClassifier()\n", + " # \"XGBoost\": XGBClassifier()\n", "}\n", "\n", "results_sensor1 = []\n", "for name, model in models_sensor1.items():\n", - " res = train_and_evaluate_model(model, name, \"sensor1\", x_train1, y_train, x_test1, y_test)\n", + " res = train_and_evaluate_model(model, name, \"sensor1\", x_train1, y_train, x_test1, y_test, export='D:/thesis/models/sensor1')\n", " results_sensor1.append(res)\n", " print(f\"{name} on sensor1: Accuracy = {res['accuracy']:.2f}%\")\n" ] @@ -669,12 +721,12 @@ " # \"KNN\": KNeighborsClassifier(),\n", " # \"LDA\": LinearDiscriminantAnalysis(),\n", " \"SVM\": SVC(),\n", - " \"XGBoost\": XGBClassifier()\n", + " # \"XGBoost\": XGBClassifier()\n", "}\n", "\n", "results_sensor2 = []\n", "for name, model in models_sensor2.items():\n", - " res = train_and_evaluate_model(model, name, \"sensor2\", x_train2, y_train, x_test2, y_test)\n", + " res = train_and_evaluate_model(model, name, \"sensor2\", x_train2, y_train, x_test2, y_test, export='D:/thesis/models/sensor2')\n", " results_sensor2.append(res)\n", " print(f\"{name} on sensor2: Accuracy = {res['accuracy']:.2f}%\")\n" ] @@ -787,6 +839,8 @@ "source": [ "from sklearn.metrics import accuracy_score, classification_report\n", "# 4. Validate on Dataset B\n", + "from joblib import load\n", + "svm_model = load('D:/thesis/models/sensor1/SVM.joblib')\n", "y_pred_svm = svm_model.predict(X1b)\n", "\n", "# 5. Evaluate\n", @@ -794,6 +848,30 @@ "print(classification_report(y, y_pred_svm))" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Model sensor 1 to predict sensor 2 data" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.metrics import accuracy_score, classification_report\n", + "# 4. Validate on Dataset B\n", + "from joblib import load\n", + "svm_model = load('D:/thesis/models/sensor1/SVM.joblib')\n", + "y_pred_svm = svm_model.predict(X2b)\n", + "\n", + "# 5. Evaluate\n", + "print(\"Accuracy on Dataset B:\", accuracy_score(y, y_pred_svm))\n", + "print(classification_report(y, y_pred_svm))" + ] + }, { "cell_type": "code", "execution_count": null, @@ -853,7 +931,7 @@ "# Plot\n", "disp = ConfusionMatrixDisplay(confusion_matrix=cm, display_labels=labels)\n", "disp.plot(cmap=plt.cm.Blues) # You can change colormap\n", - "plt.title(\"SVM Sensor1 CM Train w/ Dataset A Val w/ Dataset B\")\n", + "plt.title(\"SVM Sensor1 CM Train w/ Dataset A Val w/ Dataset B from Sensor2 readings\")\n", "plt.show()" ] }, @@ -871,14 +949,14 @@ "outputs": [], "source": [ "# 1. Predict sensor 1 on Dataset A\n", - "y_train_pred = svm_model.predict(x_train1)\n", + "y_test_pred = svm_model.predict(x_test1)\n", "\n", "# 2. Import confusion matrix tools\n", "from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay\n", "import matplotlib.pyplot as plt\n", "\n", "# 3. Create and plot confusion matrix\n", - "cm_train = confusion_matrix(y_train, y_train_pred)\n", + "cm_train = confusion_matrix(y_test, y_test_pred)\n", "labels = svm_model.classes_\n", "\n", "disp = ConfusionMatrixDisplay(confusion_matrix=cm_train, display_labels=labels)\n", diff --git a/code/src/ml/model_selection.py b/code/src/ml/model_selection.py index 6f35487..76768dd 100644 --- a/code/src/ml/model_selection.py +++ b/code/src/ml/model_selection.py @@ -55,3 +55,101 @@ def create_ready_data( y = np.array([]) return X, y + + +def train_and_evaluate_model( + model, model_name, sensor_label, x_train, y_train, x_test, y_test, export=None +): + """ + Train a machine learning model, evaluate its performance, and optionally export it. + + This function trains the provided model on the training data, evaluates its + performance on test data using accuracy score, and can save the trained model + to disk if an export path is provided. + + Parameters + ---------- + model : estimator object + The machine learning model to train. + model_name : str + Name of the model, used for the export filename and in the returned results. + sensor_label : str + Label identifying which sensor's data the model is being trained on. + x_train : array-like or pandas.DataFrame + The training input samples. + y_train : array-like + The target values for training. + x_test : array-like or pandas.DataFrame + The test input samples. + y_test : array-like + The target values for testing. + export : str, optional + Directory path where the trained model should be saved. If None, model won't be saved. + + Returns + ------- + dict + Dictionary containing: + - 'model': model_name (str) + - 'sensor': sensor_label (str) + - 'accuracy': accuracy percentage (float) + + Example + ------- + >>> from sklearn.svm import SVC + >>> from sklearn.model_selection import train_test_split + >>> X_train, X_test, y_train, y_test = train_test_split(features, labels, test_size=0.2) + >>> result = train_and_evaluate_model( + ... SVC(), + ... "SVM", + ... "sensor1", + ... X_train, + ... y_train, + ... X_test, + ... y_test, + ... export="models/sensor1" + ... ) + >>> print(f"Model accuracy: {result['accuracy']:.2f}%") + """ + from sklearn.metrics import accuracy_score + + result = {"model": model_name, "sensor": sensor_label, "success": False} + + try: + # Train the model + model.fit(x_train, y_train) + + try: + y_pred = model.predict(x_test) + except Exception as e: + result["error"] = f"Prediction error: {str(e)}" + return result + + # Calculate accuracy + try: + accuracy = accuracy_score(y_test, y_pred) * 100 + result["accuracy"] = accuracy + except Exception as e: + result["error"] = f"Accuracy calculation error: {str(e)}" + return result + + # Export model if requested + if export: + try: + import joblib + + full_path = os.path.join(export, f"{model_name}.joblib") + os.makedirs(os.path.dirname(full_path), exist_ok=True) + joblib.dump(model, full_path) + print(f"Model saved to {full_path}") + except Exception as e: + print(f"Warning: Failed to export model to {export}: {str(e)}") + result["export_error"] = str(e) + # Continue despite export error + + result["success"] = True + return result + + except Exception as e: + result["error"] = f"Training error: {str(e)}" + return result From 195f8143f03daf00f219e999415f755194deddd8 Mon Sep 17 00:00:00 2001 From: nuluh Date: Sat, 14 Jun 2025 00:57:54 +0700 Subject: [PATCH 05/14] refactor(data): remove redundant column extraction method and simplify dataframe loading --- data/QUGS/convert.py | 26 +------------------------- 1 file changed, 1 insertion(+), 25 deletions(-) diff --git a/data/QUGS/convert.py b/data/QUGS/convert.py index d1a686e..2982a03 100644 --- a/data/QUGS/convert.py +++ b/data/QUGS/convert.py @@ -73,26 +73,6 @@ class DataProcessor: else: self.data = self._load_all_data() - def _extract_column_names(self, file_path: str) -> List[str]: - """ - Extracts column names from the header of the given file. - Assumes the 6th line contains column names. - - :param file_path: Path to the data file. - :return: List of column names. - """ - with open(file_path, "r") as f: - header_lines = [next(f) for _ in range(12)] - - # Extract column names from the 6th line - channel_line = header_lines[10].strip() - tokens = re.findall(r'"([^"]+)"', channel_line) - if not channel_line.startswith('"'): - first_token = channel_line.split()[0] - tokens = [first_token] + tokens - - return tokens # Prepend 'Time' column if applicable - def _load_dataframe(self, file_path: str) -> OriginalSingleDamageScenario: """ Loads a single data file into a pandas DataFrame. @@ -100,11 +80,7 @@ class DataProcessor: :param file_path: Path to the data file. :return: DataFrame containing the numerical data. """ - col_names = self._extract_column_names(file_path) - df = pd.read_csv( - file_path, delim_whitespace=True, skiprows=11, header=None, memory_map=True - ) - df.columns = col_names + df = pd.read_csv(file_path, delim_whitespace=True, skiprows=10, header=0, memory_map=True) return df def _load_all_data(self) -> GroupDataset: From 66a09e0ddf2803f047d0d0dcf903d76dad3a9a51 Mon Sep 17 00:00:00 2001 From: nuluh Date: Fri, 13 Jun 2025 14:18:13 +0700 Subject: [PATCH 06/14] feat(data): Enhance damage file index generation with undamaged file handling and improved error management (WIP) --- data/QUGS/convert.py | 42 ++++++++++++++++++++++++++++++++++++++---- 1 file changed, 38 insertions(+), 4 deletions(-) diff --git a/data/QUGS/convert.py b/data/QUGS/convert.py index 2982a03..d495b0d 100644 --- a/data/QUGS/convert.py +++ b/data/QUGS/convert.py @@ -27,12 +27,26 @@ class DamageFilesIndices(TypedDict): def generate_damage_files_index(**kwargs) -> DamageFilesIndices: + """ + Generate a dictionary of damage scenarios with file indices. + :param kwargs: Keyword arguments to specify parameters. + - prefix: Prefix for the file names (default: "zzzAD"). + - extension: File extension (default: ".TXT"). + - num_damage: Number of damage scenarios. + - file_index_start: Starting index for file names. + - col: Number of files per damage scenario. + - base_path: Base path for the files. + - undamage_file: Name of the undamaged file with extension. + :return: A dictionary where keys are damage scenario indices and values are lists of file paths. + """ + prefix: str = kwargs.get("prefix", "zzzAD") extension: str = kwargs.get("extension", ".TXT") num_damage: int = kwargs.get("num_damage") file_index_start: int = kwargs.get("file_index_start") col: int = kwargs.get("col") base_path: str = kwargs.get("base_path") + undamage_file: str = kwargs.get("undamage_file") damage_scenarios = {} a = file_index_start @@ -41,10 +55,25 @@ def generate_damage_files_index(**kwargs) -> DamageFilesIndices: damage_scenarios[i] = range(a, b) a += col b += col - # return damage_scenarios x = {} + if undamage_file: + try: + x[0] = [] + if base_path: + x[0].append( + os.path.normpath(os.path.join(base_path, f"{undamage_file}")) + ) + else: + x[0].append(f"{prefix}{undamage_file}") + except Exception as e: + print(Fore.RED + f"Error processing undamaged file: {e}") + sys.exit(1) + else: + print(Fore.RED + "No undamaged file specified, terminating.") + sys.exit(1) + for damage, files in damage_scenarios.items(): x[damage] = [] # Initialize each key with an empty list for i, file_index in enumerate(files, start=1): @@ -59,10 +88,11 @@ def generate_damage_files_index(**kwargs) -> DamageFilesIndices: # continue else: x[damage].append(f"{prefix}{file_index}{extension}") + return x # file_path = os.path.join(base_path, f"zzz{prefix}D{file_index}.TXT") - # df = pd.read_csv( file_path, sep="\t", skiprows=10) # Read with explicit column names + # df = pd.read_csv(file_path, sep="\t", skiprows=10) # Read with explicit column names class DataProcessor: @@ -91,7 +121,11 @@ class DataProcessor: """ data = [] # Find the maximum group index to determine the list size - max_group_idx = max(self.file_index.keys()) if self.file_index else 0 + max_group_idx = len(self.file_index) if self.file_index else 0 + + # Handle case when file_index is empty + if max_group_idx == 0: + raise ValueError("No file index provided; file_index is empty.") # Initialize empty lists for _ in range(max_group_idx): @@ -100,7 +134,7 @@ class DataProcessor: # Fill the list with data for group_idx, file_list in self.file_index.items(): # Adjust index to be 0-based - list_idx = group_idx - 1 + list_idx = group_idx data[list_idx] = [self._load_dataframe(file) for file in file_list] return data From 3e652accfb6adfcfe12647b74432c719de6bdf15 Mon Sep 17 00:00:00 2001 From: nuluh Date: Fri, 13 Jun 2025 19:57:06 +0700 Subject: [PATCH 07/14] refactor(data): remove unnecessary variable declaration in DataProcessor for loading dataframes --- data/QUGS/convert.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/data/QUGS/convert.py b/data/QUGS/convert.py index d495b0d..6e95377 100644 --- a/data/QUGS/convert.py +++ b/data/QUGS/convert.py @@ -133,10 +133,7 @@ class DataProcessor: # Fill the list with data for group_idx, file_list in self.file_index.items(): - # Adjust index to be 0-based - list_idx = group_idx - data[list_idx] = [self._load_dataframe(file) for file in file_list] - + data[group_idx] = [self._load_dataframe(file) for file in file_list] return data def get_group_data(self, group_idx: int) -> List[pd.DataFrame]: From 60ff4e0fa9fc61a0af7cca0917ddd502e77691cd Mon Sep 17 00:00:00 2001 From: nuluh Date: Mon, 16 Jun 2025 03:13:07 +0700 Subject: [PATCH 08/14] feat(data): Propose new damage file index generation to improve structure and flexibility in DataFrame handling --- data/QUGS/convert.py | 130 +++++++++++++++++++++++-------------------- 1 file changed, 69 insertions(+), 61 deletions(-) diff --git a/data/QUGS/convert.py b/data/QUGS/convert.py index 6e95377..eba7ac9 100644 --- a/data/QUGS/convert.py +++ b/data/QUGS/convert.py @@ -26,70 +26,78 @@ class DamageFilesIndices(TypedDict): files: List[str] -def generate_damage_files_index(**kwargs) -> DamageFilesIndices: +def generate_df_tuples(total_dfs=30, group_size=5, prefix="zzzAD", ext="TXT", first_col_start=1, last_col_offset=25, + special_groups=None, group=True): """ - Generate a dictionary of damage scenarios with file indices. - :param kwargs: Keyword arguments to specify parameters. - - prefix: Prefix for the file names (default: "zzzAD"). - - extension: File extension (default: ".TXT"). - - num_damage: Number of damage scenarios. - - file_index_start: Starting index for file names. - - col: Number of files per damage scenario. - - base_path: Base path for the files. - - undamage_file: Name of the undamaged file with extension. - :return: A dictionary where keys are damage scenario indices and values are lists of file paths. + Generate a structured list of tuples containing DataFrame references and column indices. + + Parameters: + ----------- + total_dfs : int, default 30 + Total number of DataFrames to include in the tuples + group_size : int, default 5 + Number of DataFrames in each group (determines the pattern repeat) + prefix : str, default "df" + Prefix for DataFrame variable names + first_col_start : int, default 1 + Starting value for the first column index (1-indexed) + last_col_offset : int, default 25 + Offset to add to first_col_start to get the last column index + special_groups : list of dict, optional + List of special groups to insert, each dict should contain: + - 'df_name': The DataFrame name to use for all tuples in this group + - 'position': Where to insert this group (0 for beginning) + - 'size': Size of this group (default: same as group_size) + + Returns: + -------- + list + List of tuples, where each tuple contains (df_name, [first_col, last_col]) """ + tuples = [] + # Add regular groups + for i in range(1, total_dfs + 1): + # for _ in range(group_size): # group tuple + # temporary list to hold tuples for this group + # list = [] + # Calculate the position within the group (1 to group_size) + position_in_group = ((i - 1) % group_size) + 1 + + # Calculate column indices based on position in group + first_col = first_col_start + position_in_group - 1 + last_col = first_col + last_col_offset + + # Create the tuple with DataFrame reference and column indices + df_name = f"{prefix}{i}.{ext}" + tuples.append((df_name, [first_col, last_col])) - prefix: str = kwargs.get("prefix", "zzzAD") - extension: str = kwargs.get("extension", ".TXT") - num_damage: int = kwargs.get("num_damage") - file_index_start: int = kwargs.get("file_index_start") - col: int = kwargs.get("col") - base_path: str = kwargs.get("base_path") - undamage_file: str = kwargs.get("undamage_file") + # tuples.append(list) + # Add special groups at specified positions (other than beginning) + if special_groups: + for group in special_groups: + position = group.get('position', 0) # default value is 0 if not specified + if position > 0: + df_name = group['df_name'] + size = group.get('size', group_size) + + # Create the special group tuples + special_tuples = [] + for i in range(1, size + 1): + first_col = first_col_start + i - 1 + last_col = first_col + last_col_offset + special_tuples.append((df_name, [first_col, last_col])) + + tuples.insert(special_tuples) + + if group: + # Group tuples into sublists of group_size + grouped_tuples = [] + for i in range(0, len(tuples), group_size): + grouped_tuples.append(tuples[i:i + group_size]) + return grouped_tuples + + return tuples - damage_scenarios = {} - a = file_index_start - b = col + 1 - for i in range(1, num_damage + 1): - damage_scenarios[i] = range(a, b) - a += col - b += col - # return damage_scenarios - - x = {} - if undamage_file: - try: - x[0] = [] - if base_path: - x[0].append( - os.path.normpath(os.path.join(base_path, f"{undamage_file}")) - ) - else: - x[0].append(f"{prefix}{undamage_file}") - except Exception as e: - print(Fore.RED + f"Error processing undamaged file: {e}") - sys.exit(1) - else: - print(Fore.RED + "No undamaged file specified, terminating.") - sys.exit(1) - - for damage, files in damage_scenarios.items(): - x[damage] = [] # Initialize each key with an empty list - for i, file_index in enumerate(files, start=1): - if base_path: - x[damage].append( - os.path.normpath( - os.path.join(base_path, f"{prefix}{file_index}{extension}") - ) - ) - # if not os.path.exists(file_path): - # print(Fore.RED + f"File {file_path} does not exist.") - # continue - else: - x[damage].append(f"{prefix}{file_index}{extension}") - - return x # file_path = os.path.join(base_path, f"zzz{prefix}D{file_index}.TXT") # df = pd.read_csv(file_path, sep="\t", skiprows=10) # Read with explicit column names @@ -189,7 +197,7 @@ class DataProcessor: y = 0 for data_group in self.data: # len(data_group[i]) = 5 for j in data_group: # len(j[i]) = - c: VectorColumnIndex = [] # column vector c_{j} + c: VectorColumnIndex = [] x = 0 for _ in range(6): # TODO: range(6) should be dynamic and parameterized c.append(x + y) From 24c1484300b00630222acd9d2f08417ec83f50ba Mon Sep 17 00:00:00 2001 From: nuluh Date: Mon, 16 Jun 2025 17:35:27 +0700 Subject: [PATCH 09/14] feat(data): Enhance DataProcessor to support dynamic base path and improve data loading with error handling and memory efficiency --- data/QUGS/convert.py | 52 ++++++++++++++++++++++++-------------------- 1 file changed, 29 insertions(+), 23 deletions(-) diff --git a/data/QUGS/convert.py b/data/QUGS/convert.py index eba7ac9..d291a88 100644 --- a/data/QUGS/convert.py +++ b/data/QUGS/convert.py @@ -104,13 +104,28 @@ def generate_df_tuples(total_dfs=30, group_size=5, prefix="zzzAD", ext="TXT", fi class DataProcessor: - def __init__(self, file_index: DamageFilesIndices, cache_path: str = None): + def __init__(self, file_index, cache_path: str = None, base_path: str = None): self.file_index = file_index + self.base_path = base_path if cache_path: self.data = load(cache_path) else: - self.data = self._load_all_data() + self.data = self.load_data() + def load_data(self): + for idxs, group in enumerate(self.file_index): + for idx, tuple in enumerate(group): + file_path = os.path.join(self.base_path, tuple[0]) # ('zzzAD1.TXT') + col_indices = tuple[1] # [1, 26] + try: + # Read the CSV file + df = pd.read_csv(file_path, delim_whitespace=True, skiprows=10, header=0, memory_map=True) + self.file_index[idxs][idx] = df.iloc[:, col_indices].copy() # Extract the specified columns + + print(f"Processed {file_path}, extracted columns: {col_indices}") + + except Exception as e: + print(f"Error processing {file_path}: {str(e)}") def _load_dataframe(self, file_path: str) -> OriginalSingleDamageScenario: """ Loads a single data file into a pandas DataFrame. @@ -118,7 +133,7 @@ class DataProcessor: :param file_path: Path to the data file. :return: DataFrame containing the numerical data. """ - df = pd.read_csv(file_path, delim_whitespace=True, skiprows=10, header=0, memory_map=True) + df = pd.read_csv(file_path, delim_whitespace=True, skiprows=10, header=0, memory_map=True, nrows=1) return df def _load_all_data(self) -> GroupDataset: @@ -141,6 +156,7 @@ class DataProcessor: # Fill the list with data for group_idx, file_list in self.file_index.items(): + group_idx -= 1 # adjust due to undamage file data[group_idx] = [self._load_dataframe(file) for file in file_list] return data @@ -204,7 +220,7 @@ class DataProcessor: x += 5 vector_col_idx.append(c) y += 1 - return vector_col_idx + return vector_col_idx # TODO: refactor this so that it returns just from first data_group without using for loops through the self.data that seems unnecessary def create_vector_column(self, overwrite=True) -> List[List[List[pd.DataFrame]]]: """ @@ -212,26 +228,16 @@ class DataProcessor: :param overwrite: Overwrite the original data with vector column-based data. """ - idx = self._create_vector_column_index() - # if overwrite: - for i in range(len(self.data)): - for j in range(len(self.data[i])): - # Get the appropriate indices for slicing from idx - indices = idx[j] + idxs = self._create_vector_column_index() + for i, group in enumerate(self.data): + # add 1 to all indices to account for 'Time' being at position 0 + for j, df in enumerate(group): + idx = [_ + 1 for _ in idxs[j]] + # slice out the desired columns, copy into a fresh DataFrame, + # then overwrite self.data[i][j] with it + self.data[i][j] = df.iloc[:, idx].copy() - # Get the current DataFrame - df = self.data[i][j] - - # Keep the 'Time' column and select only specified 'Real' columns - # First, we add 1 to all indices to account for 'Time' being at position 0 - real_indices = [index + 1 for index in indices] - - # Create list with Time column index (0) and the adjusted Real indices - all_indices = [0] + real_indices - - # Apply the slicing - self.data[i][j] = df.iloc[:, all_indices] - # TODO: if !overwrite: + # TODO: if !overwrite: def create_limited_sensor_vector_column(self, overwrite=True): """ From 58a672a6803ea9752cd695c5826777dc4425b323 Mon Sep 17 00:00:00 2001 From: nuluh Date: Tue, 17 Jun 2025 13:20:27 +0700 Subject: [PATCH 10/14] fix(data): Fix generate_df_tuples function output bug when special_groups args is passed --- data/QUGS/convert.py | 39 +++++++++++++++++++-------------------- 1 file changed, 19 insertions(+), 20 deletions(-) diff --git a/data/QUGS/convert.py b/data/QUGS/convert.py index d291a88..d0788f8 100644 --- a/data/QUGS/convert.py +++ b/data/QUGS/convert.py @@ -71,30 +71,29 @@ def generate_df_tuples(total_dfs=30, group_size=5, prefix="zzzAD", ext="TXT", fi df_name = f"{prefix}{i}.{ext}" tuples.append((df_name, [first_col, last_col])) - # tuples.append(list) - # Add special groups at specified positions (other than beginning) - if special_groups: - for group in special_groups: - position = group.get('position', 0) # default value is 0 if not specified - if position > 0: - df_name = group['df_name'] - size = group.get('size', group_size) - - # Create the special group tuples - special_tuples = [] - for i in range(1, size + 1): - first_col = first_col_start + i - 1 - last_col = first_col + last_col_offset - special_tuples.append((df_name, [first_col, last_col])) - - tuples.insert(special_tuples) - if group: # Group tuples into sublists of group_size grouped_tuples = [] for i in range(0, len(tuples), group_size): grouped_tuples.append(tuples[i:i + group_size]) - return grouped_tuples + tuples = grouped_tuples + # tuples.append(list) + # Add special groups at specified positions (other than beginning) + if special_groups: + for group in special_groups: + position = group.get('position', 0) # default value is 0 if not specified + df_name = group['df_name'] + size = group.get('size', group_size) + + # Create the special group tuples + special_tuples = [] + for i in range(size): + first_col = first_col_start + i + last_col = first_col + last_col_offset + special_tuples.append((df_name, [first_col, last_col])) + + tuples.insert(position, special_tuples) + return tuples @@ -273,7 +272,7 @@ class DataProcessor: :param output_dir: Directory to save the CSV files. :param file_prefix: Prefix for the output filenames. """ - for group_idx, group in enumerate(self.data, start=1): + for group_idx, group in enumerate(self.data, start=0): group_folder = os.path.join(output_dir, f"{file_prefix}_{group_idx}") os.makedirs(group_folder, exist_ok=True) for test_idx, df in enumerate(group, start=1): From 1164627bac3c6cc74248c563c89ba72b66e87ae6 Mon Sep 17 00:00:00 2001 From: nuluh Date: Wed, 18 Jun 2025 01:54:12 +0700 Subject: [PATCH 11/14] fix(data): Fix export_to_csv to adapt new added undamaged scenario and add new parameter `include_time` to include 'Time' data --- data/QUGS/convert.py | 36 ++++++++++++++---------------------- 1 file changed, 14 insertions(+), 22 deletions(-) diff --git a/data/QUGS/convert.py b/data/QUGS/convert.py index d0788f8..c86e34c 100644 --- a/data/QUGS/convert.py +++ b/data/QUGS/convert.py @@ -103,9 +103,10 @@ def generate_df_tuples(total_dfs=30, group_size=5, prefix="zzzAD", ext="TXT", fi class DataProcessor: - def __init__(self, file_index, cache_path: str = None, base_path: str = None): + def __init__(self, file_index, cache_path: str = None, base_path: str = None, include_time: bool = False): self.file_index = file_index self.base_path = base_path + self.include_time = include_time if cache_path: self.data = load(cache_path) else: @@ -115,7 +116,10 @@ class DataProcessor: for idxs, group in enumerate(self.file_index): for idx, tuple in enumerate(group): file_path = os.path.join(self.base_path, tuple[0]) # ('zzzAD1.TXT') - col_indices = tuple[1] # [1, 26] + if self.include_time: + col_indices = [0] + tuple[1] # [1, 26] + [0] -> [0, 1, 26] + else: + col_indices = tuple[1] # [1, 26] try: # Read the CSV file df = pd.read_csv(file_path, delim_whitespace=True, skiprows=10, header=0, memory_map=True) @@ -272,30 +276,18 @@ class DataProcessor: :param output_dir: Directory to save the CSV files. :param file_prefix: Prefix for the output filenames. """ - for group_idx, group in enumerate(self.data, start=0): + for group_idx, group in enumerate(self.file_index, start=0): group_folder = os.path.join(output_dir, f"{file_prefix}_{group_idx}") os.makedirs(group_folder, exist_ok=True) + for test_idx, df in enumerate(group, start=1): - # Ensure columns are named uniquely if duplicated - df = df.copy() - df.columns = ["Time", "Real_0", "Real_1"] # Rename - - # Export first Real column - out1 = os.path.join( - group_folder, f"{file_prefix}_{group_idx}_TEST{test_idx}_01.csv" - ) - df[["Time", "Real_0"]].rename(columns={"Real_0": "Real"}).to_csv( - out1, index=False - ) - - # Export last Real column - out2 = os.path.join( - group_folder, f"{file_prefix}_{group_idx}_TEST{test_idx}_02.csv" - ) - df[["Time", "Real_1"]].rename(columns={"Real_1": "Real"}).to_csv( - out2, index=False - ) + out1 = os.path.join(group_folder, f"{file_prefix}_{group_idx}_TEST{test_idx}_01.csv") + cols_to_export = [0, 1] if self.include_time else [1] + df.iloc[:, cols_to_export].to_csv(out1, index=False) + out2 = os.path.join(group_folder, f"{file_prefix}_{group_idx}_TEST{test_idx}_02.csv") + cols_to_export = [0, 2] if self.include_time else [2] + df.iloc[:, cols_to_export].to_csv(out2, index=False) # def create_damage_files(base_path, output_base, prefix): # # Initialize colorama From a7d8f1ef561f939d1b0d09e1babd96638f789b5a Mon Sep 17 00:00:00 2001 From: nuluh Date: Wed, 18 Jun 2025 08:25:01 +0700 Subject: [PATCH 12/14] fix(data): Fix pool mapping to include undamaged case and add csv header separator line for Excel compatibility --- code/src/ml/model_selection.py | 4 ++-- code/src/process_stft.py | 8 +++++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/code/src/ml/model_selection.py b/code/src/ml/model_selection.py index 76768dd..3dc73ff 100644 --- a/code/src/ml/model_selection.py +++ b/code/src/ml/model_selection.py @@ -25,9 +25,9 @@ def create_ready_data( """ ready_data = [] for file in os.listdir(stft_data_path): - ready_data.append(pd.read_csv(os.path.join(stft_data_path, file))) + ready_data.append(pd.read_csv(os.path.join(stft_data_path, file), skiprows=1)) - y_data = [i for i in range(len(ready_data))] + y_data = [i for i in range(len(ready_data))] # TODO: Should be replaced with actual desired labels # Combine all dataframes in ready_data into a single dataframe if ready_data: # Check if the list is not empty diff --git a/code/src/process_stft.py b/code/src/process_stft.py index 1de44b4..fc8c28b 100644 --- a/code/src/process_stft.py +++ b/code/src/process_stft.py @@ -6,7 +6,7 @@ import glob import multiprocessing # Added import for multiprocessing # Define the base directory where DAMAGE_X folders are located -damage_base_path = 'D:/thesis/data/converted/raw' +damage_base_path = 'D:/thesis/data/converted/raw_B' # Define output directories for each sensor output_dirs = { @@ -105,11 +105,13 @@ def process_damage_case(damage_num): ) # Save the aggregated STFT to CSV - df_aggregated.to_csv(output_file, index=False) + with open(output_file, 'w') as file: + file.write('sep=,\n') + df_aggregated.to_csv(output_file, index=False) print(f"Saved aggregated STFT for Sensor {sensor_num}, Damage {damage_num} to {output_file}") else: print(f"No STFT data aggregated for Sensor {sensor_num}, Damage {damage_num}.") if __name__ == "__main__": # Added main guard for multiprocessing with multiprocessing.Pool() as pool: - pool.map(process_damage_case, range(1, num_damage_cases + 1)) + pool.map(process_damage_case, range(0, num_damage_cases + 1)) From d0b603ba9fbc7eca0984d35f15abd574caca0567 Mon Sep 17 00:00:00 2001 From: nuluh Date: Wed, 18 Jun 2025 08:30:12 +0700 Subject: [PATCH 13/14] fix(data): Update DataProcessor instantiation for new data preprocessing implementation --- data/QUGS/test.py | 48 +++++++++++++++++++++++++++++++++-------------- 1 file changed, 34 insertions(+), 14 deletions(-) diff --git a/data/QUGS/test.py b/data/QUGS/test.py index 12b39cf..058af7c 100644 --- a/data/QUGS/test.py +++ b/data/QUGS/test.py @@ -1,25 +1,45 @@ from convert import * from joblib import dump, load +# b = generate_damage_files_index( +# num_damage=6, +# file_index_start=1, +# col=5, +# base_path="D:/thesis/data/dataset_B", +# prefix="zzzBD", +# # undamage_file="zzzBU.TXT" +# ) +# Example: Generate tuples with a special group of df0 at the beginning +special_groups_A = [ + {'df_name': 'zzzAU.TXT', 'position': 0, 'size': 5} # Add at beginning +] + +special_groups_B = [ + {'df_name': 'zzzBU.TXT', 'position': 0, 'size': 5} # Add at beginning +] + +# Generate the tuples with the special group +# a = generate_df_tuples(special_groups=special_groups_A) +b = generate_df_tuples(special_groups=special_groups_B, prefix="zzzBD") + + # a = generate_damage_files_index( -# num_damage=6, file_index_start=1, col=5, base_path="D:/thesis/data/dataset_A" +# num_damage=6, +# file_index_start=1, +# col=5, +# base_path="D:/thesis/data/dataset_A", +# prefix="zzzAD", +# # undamage_file="zzzBU.TXT" # ) -b = generate_damage_files_index( - num_damage=6, - file_index_start=1, - col=5, - base_path="D:/thesis/data/dataset_B", - prefix="zzzBD", -) -# data_A = DataProcessor(file_index=a) -# # data.create_vector_column(overwrite=True) -# data_A.create_limited_sensor_vector_column(overwrite=True) +# data_A = DataProcessor(file_index=a, base_path="D:/thesis/data/dataset_A", include_time=True) +# data_A.create_vector_column(overwrite=True) +# # data_A.create_limited_sensor_vector_column(overwrite=True) # data_A.export_to_csv("D:/thesis/data/converted/raw") -data_B = DataProcessor(file_index=b) -# data.create_vector_column(overwrite=True) -data_B.create_limited_sensor_vector_column(overwrite=True) +data_B = DataProcessor(file_index=b, base_path="D:/thesis/data/dataset_B", include_time=True) +# data_B.create_vector_column(overwrite=True) +# # data_B.create_limited_sensor_vector_column(overwrite=True) data_B.export_to_csv("D:/thesis/data/converted/raw_B") # a = load("D:/cache.joblib") # breakpoint() From 18892c11880dd59460805ba0e2667f0fe1410523 Mon Sep 17 00:00:00 2001 From: nuluh Date: Wed, 18 Jun 2025 08:31:55 +0700 Subject: [PATCH 14/14] WIP(notebooks): Add SVM with StandardScaler and PCA to sensor model definitions --- code/notebooks/stft.ipynb | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/code/notebooks/stft.ipynb b/code/notebooks/stft.ipynb index 107bcd2..ca3bd5d 100644 --- a/code/notebooks/stft.ipynb +++ b/code/notebooks/stft.ipynb @@ -690,6 +690,10 @@ "source": [ "from src.ml.model_selection import train_and_evaluate_model\n", "from sklearn.svm import SVC\n", + "from sklearn.pipeline import make_pipeline\n", + "from sklearn.preprocessing import StandardScaler\n", + "from sklearn.svm import SVC\n", + "from sklearn.decomposition import PCA\n", "# Define models for sensor1\n", "models_sensor1 = {\n", " # \"Random Forest\": RandomForestClassifier(),\n", @@ -698,6 +702,12 @@ " # \"KNN\": KNeighborsClassifier(),\n", " # \"LDA\": LinearDiscriminantAnalysis(),\n", " \"SVM\": SVC(),\n", + " \"SVM with StandardScaler and PCA\": make_pipeline(\n", + " StandardScaler(),\n", + " PCA(n_components=10),\n", + " SVC(kernel='rbf')\n", + " ),\n", + "\n", " # \"XGBoost\": XGBClassifier()\n", "}\n", "\n", @@ -721,6 +731,11 @@ " # \"KNN\": KNeighborsClassifier(),\n", " # \"LDA\": LinearDiscriminantAnalysis(),\n", " \"SVM\": SVC(),\n", + " \"SVM with StandardScaler and PCA\": make_pipeline(\n", + " StandardScaler(),\n", + " PCA(n_components=10),\n", + " SVC(kernel='rbf')\n", + " ),\n", " # \"XGBoost\": XGBClassifier()\n", "}\n", "\n",