From bf77bcf0a3d69503ba55cd315ce24476c82a3cc4 Mon Sep 17 00:00:00 2001 From: daxcay Date: Thu, 13 Jun 2024 19:02:32 +0530 Subject: [PATCH] Update Changed plugin name for more clarity --- README.md | 8 ++++---- __init__.py | 14 +++++++------- ...sualizer.py => DATASET_CaptionVisualizer.py} | 8 ++++---- ...ndReplace.py => DATASET_SearchAndReplace.py} | 8 ++++---- ..._TXTFileSaver.py => DATASET_TXTFileSaver.py} | 8 ++++---- ...py => DATASET_TagManipulatorByImageNames.py} | 8 ++++---- classes/{DRMN_xCopy.py => DATASET_xCopy.py} | 8 ++++---- images/logo.jpg | Bin 0 -> 15348 bytes images/logo.png | Bin 10299 -> 0 bytes 9 files changed, 31 insertions(+), 31 deletions(-) rename classes/{DRMN_CaptionVisualizer.py => DATASET_CaptionVisualizer.py} (97%) rename classes/{DRMN_SearchAndReplace.py => DATASET_SearchAndReplace.py} (90%) rename classes/{DRMN_TXTFileSaver.py => DATASET_TXTFileSaver.py} (92%) rename classes/{DRMN_TagManipulatorByImageNames.py => DATASET_TagManipulatorByImageNames.py} (94%) rename classes/{DRMN_xCopy.py => DATASET_xCopy.py} (93%) create mode 100644 images/logo.jpg delete mode 100644 images/logo.png diff --git a/README.md b/README.md index bf0e5c7..453df45 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ You can contact me on my discord server: https://discord.gg/Z44Zjpurjp ![image](https://github.com/daxcay/ComfyUI-DataSet/assets/164315771/b7d4a51d-6f23-43cc-bc40-c8ae469199e2) -## 1. DRMN_CaptionVisualizer +## 1. DATASET_CaptionVisualizer This node helps anyone to visualize captions in 3 different forms: word cloud, networkgraph and frequency graph. @@ -42,7 +42,7 @@ Images are also saved in ```visualize``` folder where the caption files are stor ![image](https://github.com/daxcay/ComfyUI-DataSet/assets/164315771/3371d531-ad4c-4e72-ae00-43d71e4a87a6) -## 2. DRMN_TXTFileSaver +## 2. DATASET_TXTFileSaver Saves text file in an innovative way. has mode Merge | Overwrite | SaveNew | MergeAndSaveNew. Useful for caption creators and manipulators. @@ -78,7 +78,7 @@ If directory does not exists new directory will be created. Text file in directory. -## 3. DRMN_TagManipulatorByImageNames +## 3. DATASET_TagManipulatorByImageNames There may be a possiblity where you named your caption file with the same name as your image file (without extension 😅). This node is useful then. You can add a concept in all the caption files at once. @@ -145,7 +145,7 @@ Tags directory will have something like this. ![image](https://github.com/daxcay/ComfyUI-DataSet/assets/164315771/15d27de2-6b99-4a32-92c4-3796ff4ae4d1) -## 3. DRMN_SearchAndReplace +## 3. DATASET_SearchAndReplace Helps anyone manipulate caption files to search for a given text in ```SearchFor``` and replace it with the given ```ReplaceWith``` text. diff --git a/__init__.py b/__init__.py index 395e68f..6aa074c 100644 --- a/__init__.py +++ b/__init__.py @@ -13,16 +13,16 @@ """ @author: Daxton Caylor -@title: ComfyUI-DRMN -@nickname: ComfyUI-DRMN +@title: ComfyUI-DataSet +@nickname: ComfyUI-DataSet @description: Data Research And Manipulators Nodes for Model Trainers, Artists, Designers and Animators. """ -from .classes.DRMN_TXTFileSaver import N_CLASS_MAPPINGS as TXTFileSaverMappings, N_DISPLAY_NAME_MAPPINGS as TXTFileSaverNameMappings -from .classes.DRMN_TagManipulatorByImageNames import N_CLASS_MAPPINGS as TagManipulatorByImageNamesMappings, N_DISPLAY_NAME_MAPPINGS as TagManipulatorByImageNamesNameMappings -from .classes.DRMN_CaptionVisualizer import N_CLASS_MAPPINGS as CaptionVisualizerMappings, N_DISPLAY_NAME_MAPPINGS as CaptionVisualizerNameMappings -from .classes.DRMN_SearchAndReplace import N_CLASS_MAPPINGS as SearchAndReplaceMappings, N_DISPLAY_NAME_MAPPINGS as SearchAndReplaceNameMappings -from .classes.DRMN_xCopy import N_CLASS_MAPPINGS as xCopyMappings, N_DISPLAY_NAME_MAPPINGS as xCopyNameMappings +from .classes.DATASET_TXTFileSaver import N_CLASS_MAPPINGS as TXTFileSaverMappings, N_DISPLAY_NAME_MAPPINGS as TXTFileSaverNameMappings +from .classes.DATASET_TagManipulatorByImageNames import N_CLASS_MAPPINGS as TagManipulatorByImageNamesMappings, N_DISPLAY_NAME_MAPPINGS as TagManipulatorByImageNamesNameMappings +from .classes.DATASET_CaptionVisualizer import N_CLASS_MAPPINGS as CaptionVisualizerMappings, N_DISPLAY_NAME_MAPPINGS as CaptionVisualizerNameMappings +from .classes.DATASET_SearchAndReplace import N_CLASS_MAPPINGS as SearchAndReplaceMappings, N_DISPLAY_NAME_MAPPINGS as SearchAndReplaceNameMappings +from .classes.DATASET_xCopy import N_CLASS_MAPPINGS as xCopyMappings, N_DISPLAY_NAME_MAPPINGS as xCopyNameMappings NODE_CLASS_MAPPINGS = {} NODE_CLASS_MAPPINGS.update(TXTFileSaverMappings) diff --git a/classes/DRMN_CaptionVisualizer.py b/classes/DATASET_CaptionVisualizer.py similarity index 97% rename from classes/DRMN_CaptionVisualizer.py rename to classes/DATASET_CaptionVisualizer.py index 5b2e518..00dc365 100644 --- a/classes/DRMN_CaptionVisualizer.py +++ b/classes/DATASET_CaptionVisualizer.py @@ -142,7 +142,7 @@ def create_empty_image(width=100, height=100, color=(255, 255, 255)): return empty_image -class DRMN_CaptionVisualizer: +class DATASET_CaptionVisualizer: def __init__(self): pass @@ -164,7 +164,7 @@ class DRMN_CaptionVisualizer: OUTPUT_IS_LIST = (True,) FUNCTION = "Visualize" OUTPUT_NODE = True - CATEGORY = "🔶DRMN🔶" + CATEGORY = "🔶DATASET🔶" def Visualize(self, TextFilePathList, WordCloudTop, NetworkGraphTop, FrequencyGraphTop): @@ -183,9 +183,9 @@ class DRMN_CaptionVisualizer: N_CLASS_MAPPINGS = { - "DRMN_CaptionVisualizer": DRMN_CaptionVisualizer, + "DATASET_CaptionVisualizer": DATASET_CaptionVisualizer, } N_DISPLAY_NAME_MAPPINGS = { - "DRMN_CaptionVisualizer": "DRMN_CaptionVisualizer", + "DATASET_CaptionVisualizer": "DATASET_CaptionVisualizer", } diff --git a/classes/DRMN_SearchAndReplace.py b/classes/DATASET_SearchAndReplace.py similarity index 90% rename from classes/DRMN_SearchAndReplace.py rename to classes/DATASET_SearchAndReplace.py index ce96e46..3835afc 100644 --- a/classes/DRMN_SearchAndReplace.py +++ b/classes/DATASET_SearchAndReplace.py @@ -20,7 +20,7 @@ def save_file(file_path, content): print(f"File saved successfully at {file_path}") -class DRMN_SearchAndReplace: +class DATASET_SearchAndReplace: def __init__(self): pass @@ -40,7 +40,7 @@ class DRMN_SearchAndReplace: RETURN_NAMES = () FUNCTION = "SaR" OUTPUT_NODE = True - CATEGORY = "🔶DRMN🔶" + CATEGORY = "🔶DATASET🔶" def SaR(self, TextFilePathList, SearchFor, ReplaceWith): @@ -70,9 +70,9 @@ class DRMN_SearchAndReplace: N_CLASS_MAPPINGS = { - "DRMN_SearchAndReplace": DRMN_SearchAndReplace, + "DATASET_SearchAndReplace": DATASET_SearchAndReplace, } N_DISPLAY_NAME_MAPPINGS = { - "DRMN_SearchAndReplace": "DRMN_SearchAndReplace", + "DATASET_SearchAndReplace": "DATASET_SearchAndReplace", } diff --git a/classes/DRMN_TXTFileSaver.py b/classes/DATASET_TXTFileSaver.py similarity index 92% rename from classes/DRMN_TXTFileSaver.py rename to classes/DATASET_TXTFileSaver.py index 96d7a98..66a29fe 100644 --- a/classes/DRMN_TXTFileSaver.py +++ b/classes/DATASET_TXTFileSaver.py @@ -29,7 +29,7 @@ def save_file(filename, output_dir, content, mode='SaveNew'): file.write(content) print(f"File saved successfully at {file_path}") -class DRMN_TXTFileSaver: +class DATASET_TXTFileSaver: def __init__(self): pass @@ -50,7 +50,7 @@ class DRMN_TXTFileSaver: FUNCTION = "SaveIT" OUTPUT_NODE = True - CATEGORY = "🔶DRMN🔶" + CATEGORY = "🔶DATASET🔶" def SaveIT(self, content, file_name, directory, mode): try: @@ -67,9 +67,9 @@ class DRMN_TXTFileSaver: N_CLASS_MAPPINGS = { - "DRMN_TXTFileSaver": DRMN_TXTFileSaver, + "DATASET_TXTFileSaver": DATASET_TXTFileSaver, } N_DISPLAY_NAME_MAPPINGS = { - "DRMN_TXTFileSaver": "DRMN_TXTFileSaver", + "DATASET_TXTFileSaver": "DATASET_TXTFileSaver", } diff --git a/classes/DRMN_TagManipulatorByImageNames.py b/classes/DATASET_TagManipulatorByImageNames.py similarity index 94% rename from classes/DRMN_TagManipulatorByImageNames.py rename to classes/DATASET_TagManipulatorByImageNames.py index 675c483..fd832bd 100644 --- a/classes/DRMN_TagManipulatorByImageNames.py +++ b/classes/DATASET_TagManipulatorByImageNames.py @@ -88,7 +88,7 @@ def read_files_from_directory(file_names, directory): return file_contents -class DRMN_TagManipulatorByImageNames: +class DATASET_TagManipulatorByImageNames: def __init__(self): pass @@ -109,7 +109,7 @@ class DRMN_TagManipulatorByImageNames: FUNCTION = "SaveIT" OUTPUT_NODE = True - CATEGORY = "🔶DRMN🔶" + CATEGORY = "🔶DATASET🔶" def SaveIT(self, ImageNames, TagsDirectory, Captions, Backup): try: @@ -136,9 +136,9 @@ class DRMN_TagManipulatorByImageNames: N_CLASS_MAPPINGS = { - "DRMN_TagManipulatorByImageNames": DRMN_TagManipulatorByImageNames, + "DATASET_TagManipulatorByImageNames": DATASET_TagManipulatorByImageNames, } N_DISPLAY_NAME_MAPPINGS = { - "DRMN_TagManipulatorByImageNames": "DRMN_TagManipulatorByImageNames", + "DATASET_TagManipulatorByImageNames": "DATASET_TagManipulatorByImageNames", } diff --git a/classes/DRMN_xCopy.py b/classes/DATASET_xCopy.py similarity index 93% rename from classes/DRMN_xCopy.py rename to classes/DATASET_xCopy.py index b5d78f7..c099cbf 100644 --- a/classes/DRMN_xCopy.py +++ b/classes/DATASET_xCopy.py @@ -19,7 +19,7 @@ def copy_by_destination_files(source, destination): if dest_file_match and filename not in dest_files: shutil.copy(source_file, destination) -class DRMN_xCopy: +class DATASET_xCopy: def __init__(self): pass @@ -39,7 +39,7 @@ class DRMN_xCopy: FUNCTION = "SaveIT" OUTPUT_NODE = True - CATEGORY = "🔶DRMN🔶" + CATEGORY = "🔶DATASET🔶" def SaveIT(self, source_folder, destination_folder, mode): try: @@ -56,9 +56,9 @@ class DRMN_xCopy: N_CLASS_MAPPINGS = { - "DRMN_xCopy": DRMN_xCopy, + "DATASET_xCopy": DATASET_xCopy, } N_DISPLAY_NAME_MAPPINGS = { - "DRMN_xCopy": "DRMN_xCopy", + "DATASET_xCopy": "DATASET_xCopy", } diff --git a/images/logo.jpg b/images/logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7b14e94e010eb8abcb2c14c7e34065778274ebbb GIT binary patch literal 15348 zcmeHu2UwHKx^57VvQPvmQY1(br1vHe5drB^LlKZB(jlP)NQg)i5D*kls`MsAK!|h! zrAd)4z4sP+q$DT0*Is+Awa>ZFzUQ8OpXWYzO`b_6Gv9pwyz_nY&ir5g;J@K#0GBjW z)l~sRL;wI0;RV3Y0_s#?jt>CCFe##pY>VKs30KjuH012TaA|@_M6!*6>5upd*&9C*MA|ga@{-yzs z2LR6fS_TkQ6aTLKL)!yF{xPz@f8u9Jjvje=dB_P1yFrDl?c8nbg>2njg<;kn!lFVV z!T@=g9L&|j)!xgR9p>ud29<*;@ca~$Bb0ws3-c&avj3XoA$AYt^zW$tDoXgK!1Jqi zUteD#UvVLKh=Z`GtgNiCh?uaLm>@wy5bEdVWepQ_gK`oy{ZZ8&d#EkM(ZkEp-HrW+ zYHJ&JZ!ZNNp5LVYHY7XS-!9|f4RQH-5j$I9dl!3Gdp9pA0f^`yMrmg&=jG_-V*jUs zE4g_6sm8_e2NF3KYc~f49+;q={X=VS7cU;gJM4n&Qu4w-hUDV-yFNc_{-{RyKe^aX zvEO0)Z^Bmc@`5OCLt&yB`7K`FZ`#b-^?ce zYl8~ROP$a|`k|PtgteWZjjgP;poAU4C#>xx9tzsnS=&n3$lBW5O3D1D>u+8DNt3D# zL6M}Gq?nYXtf+*jw5+6z$ZvgqHvUr=Lw9f6M?YXGiv1?}kGg+|{}*Qd<8=KU>K~`| zf5^}tzgtItSfzvpf_=sRU|&L=oRYWKBX@|RlAky95xb_ht2KmO-}*()p-9- zL4T4VkkRj)TKG3IQ^b!0lmX{SNY9g!oIg)`o{a1~IprlvN(u@}x{K6Qml)};Tw$bR zU|_z=4P<8FWMyDr7hvbS&U1tB1`|+FM37g6oA(Cq4<$roWMq`&l$R+fFY_`pF!TOz zC;UeM4f#0&SrZd+0M5}65z`RiKLLOQo+c&wnFw_KGZ8qSFkUip3d&yy0+p8l=ZJ`j z&yf(5l9CX%2O`9eJ%NOVl=hma()r7J)?^%>bYekqndF?e%bMu*`!HPMHjpP2lnjhl zn3%b*^YGr_laQ2>mXVcHzN4b5c2`})z|hDTY+`C=OCUOjM~+TVFK-`Tn4f=eNN8C2 z(}>9U7cUbMlU}_}&dSco&C4$+EGn;fUs;9zP+im9^67JHTYE=m|G?nT@W{8(vDvx# zg~g@imDRPK-M#&T!z1kX;~%()2sr5*A`Ugi)BBB#3@ms!?C!6~kfp|^qbQ8I8z%yRGifc6vFzXt5de+$`f!2W@23_wLp zL@*vP4FClAz8lGlLd$z(Me+jv$_IGB=!=#y-3WQtLNn*8OIGIBQ+MA&sUA3ZnQk|t$v>XUR~R>^w~Z3Q$T!H7ht2rAt!^<=r!vj#T{f9qOozAqK)zi0y(hH~ zCFwW)d7Amj^{hjw^%@PPR6B0S*R4Lo4q%V^en z!>Sxtp9@2_nT58Z3(QTFgi`ysl4wcvmrQ!ZU@O#%_dg6yQgDCkk9yyCXhcsMy;yQq zK4CJ^0(G1AF|oUtzoJI308eZy@FQ!*140-A#mZBR`fOsxKY13q6i}jJI7U3cxv!D9 zO*eY$LE_k)i4Z3&KO$0{<(b$!8TOb@%x65PM5GfQK%5(v?K;=3$o_6hI?lgHhIXD0 z55TaKE3Vy4J}mFDT{;x^_re1>U(l$Vrvc^rR7?gouQxWJ-&a`-=yJ3MPo#pYZ}8^x zl*{x(eAIL?drke=tkb&BSpyF^d!BpSo_#*TStTII@=eB8t31a{K0Y^Z6)6Y?AR~^7 zrmpr2?h7)H>sAumX@DIIeVEcH!l|D zzq?9}8bBq`s&l2jmQCC>yKa@XzF7aGsuDX9i$&th2w+VYKd$4}?zQvPB z-qQK!yjhWe{~MWq3S=iJrhe*K>|}EGxg_?b?g>P0^NeP_6|RuEX2~&RJ>X@o?zVkh z#$^5~S)l^pYR3$C0!c1ULH$^slOe6%zVUV4Nk>xlT~!g#C~*)r{a|Uy`>Yj zn5@Pb&3K;*G=t`#60;p7Icb#QY(54`M6PDC+zS*i1ox;4X{&hO951iN2-SO_{g<+# zOr6?Lu1JKE4YI_)@uRxZzyYjcPoS(Ccux)Y#Zufd7IRaNVe0yaa-ZhOk3O+r<+x)v zl=IU^HLtzzwq@yVIpS`2@D;(S~58 zYV@5+r^y&!B@clt$VM{~=P;Eb2^M@&M%eG6bb1yJB6=!xfPZ%e7YFtP()7XY=Wnh9 zY0OfJOlW#T0l3dypWcax8FN6By+Y{huMgM2)ouMaFGrX#^Mx6yrrYw3kz z7G^ta-~GZ^3W7|l@?Au=HI=nyhOvVB@o*&_xI=1Tt5=WTg?a_JnT?zwVhneuRqziGTIwoKrBkS2N_z zl5%$2A$@B}S)d$bYy;8uAALyEX*p&t7;|66Fo}b2sG9@l%5PZNP$iQ%rNnVEUv{X# zmqx#>!RP52U*kY$H#eAFqgdKk$%3%btZJ-q{n``MR&YQz!3LtNwF1G#cM36!eHD!Y zV}_eAVzdO$W;fSBKvctcFMSt+}=tELZa zsl2(lcLYZczCPa-aeg&a_seXzO1kNOd%Qus8Le%{@eRO;t~T<+w8q|w4d2%!$s00_ zJhnBJl->zNDw0d3@Mr?%ZsspE{hO)wCzV@{p72bYIpP$CxEpJp40Gnmg(u&N%8(Kg z3rv{vGBzp07knM`Vc)2$gyQdsDm`V_e9R+CiLZP3nH|0BT}orRuoKIIDrQ&ofv5+CcDNL zl8ps=5bBaAsR+G3w8y;x8&E&>axQo^zE(x+`BkU- zw8BbI&q~xPM5H2NRlV(tHx3!G-8biQhrUQf6N77*$%^D(*G-}1&3gP-{%a2Y@`1m6 z;4dHe%Lo3y@_|W=L#VgamGv@5v#X6M9`jIfRxb6)Z->O7uXe-qh-?hFB@uWrkm0Jc z5e5BFcjIB`#wYj}w#g3QOnqaWHpEsG1P&c8*>Kj#xH)2zAF4=>6>d7VZrD+7D%54( zN?bboH|}nITbmw;oGVV0g|C&m+?hO$zUqCIJ+|tyI@Vx^Pdc(yka=w} zNw)Ib)Iz|FE3(U`4mi))WWG)E`Fe5om+P5tg7+$@r^X%fPCe94l-Xu{cQqZCDnG;o zINF85zKN-`(A#rnl0YsXf=)oEDvF@5?h+tc@-0bCld@~xBo?=(g-pD-94@TKtvT@- z6bGFxaCfs6#)w6`dl!q(7u};^CyIA|k8PTz#@>ee6*%g-om{q=`-(QWyw8S}y^jY} zShQ_a&lJFw=4zwe^&;%c`=#DLn!mQ}vZ;7-i)X#6o?`AArR8|;GkU4Tc6a!Vv-Iw> zw{rP0W{)`G^8PMr&Ix!xUi1+3tgp9_EOP&(csr!w-1UCFH>SNzEv?U^B3{OHKkm&a z@jKe&*)iVj#92|mAd8!wyeEh*?Qrg}I~oBVs&|)D{g;;@5QzT>sl38{v%`d({s1m_ zzPQ}2CZLnbd~Zk~=k>9Gw2RuOGy(RD!e<8@M90I7u^&CLH= zFmL~WKf_4oP;ytn-@Pd|(kwj4`;}m6emwGG*UWu$(cXlN?~l?$yxF~vXTs$#X#A2v zE$!WRKwHAJD&Y~x-d9OYy>=w`u*~Ifq-wM3?l?M=j4=P?>!w2oBby2{>#oSAh&hCU zt@Ea&(U{?KPnB(ZFP!#DfZG8o&KXVd)Fcvq=KtC#e`C>h1N6j_6jO!9#NPQZBymA( zX>IOCND{4iVM3$-dK$Lp7BQK;O@k9QccvC~4py_S@nPby?WpQS9IlE32GaX_5^M!N zy;yrf_7TB>xlXXv`28uU8T-Q6MKfGwPi`GCwA z;tI9K?xVR}H5wuJ(5m{2uLlhBO6p@HSMs~*o@?!BMYEQbfmN^Ysgclp8!%*eP(;Bs zLo`*t_jFb9Dpq5!b&9{D?=2)txxvpfj!Jo37MGqAG}Tam&BUBEC-XE%yY6oiYsW10 zx6#}`OVj%J?84`r_^Ew33nn3{c{)7FZ2GCj_;fGz7%DAXq_}}oX-rygG~C)YYuwE+0o}_BT+0IbH42ecpQ}GQ45`GpKapo)NXdoys%bww zgBRGH@G)^jcra^!>)HBv(7{vb9@slYTZI9(oMg~CkGpPdTb~$ivo}4NR9&>PQR@nP zu2E~g}pq(AzljZLtDZwwi*Yb|>fY*ISLU-dvlrg(wEWJSN!?7){ zeb?)%kb>q3^OSp~U^#{K%iHEY;xArw!xO9=v5h$GRKk_dj}tV+ zGzb)Yv0G%CJm9|+?=(pWiJ|T;|Ert4@FU}5M9J!5j2N1c=95~52ynQe;jBWi62PUr$WER+NANe6Ot3W;mDtb0R>mavN-iS zj*(CZe)42WZJ(t#yd=vr5&2qO1**Oxk>aDK*wqE;Qa_SBl-|g-OPu}%esGU%?a=hf zk<3^y9-xFuJoTQL1UE6~$OYC24zHPnG+leC9?JDtM~<-PiJx#g#ZAKH>)!QlzeSnz z<5~*%kRsCwe$}ZjF%x}bD=RIm&^(3-g_OT?(NOBp<65p8m@58#0F=5 znVn{FHZxo?9G{fYimeM-WZBWDp1*(Kf6wu=%m%dnfH2bqYU4;ME<)7(#UY|Ba)W}T z#_mvyr6vy>zLM3zg+lLNp$-B$U_WC-yB%^mB%Z=Jz*HxSwHfp~q<(%rRLO7{#CuWYcU1 z8-ME2AV?A%*Yx(?psnd}NKNA&Urs6=^9JIV6Mgv26Vjto?qe;P%IXJ6E7>70FT(meRT*?qHUTv0bGg{UIRt1H*y3yfY-zG-i05>*W`neYVjdoF%J%wjPL&@X zyi_c74{-jDv%8*x@#gly)?=}uwcne<Mopigj+_TiRq%l8 z%^8P61Sem~K}9Y2#H;!-rF~0$XdAD-rH#m(6aFqmhX<7TOcQvU+c`3unI@O~=z8kJ zM9K!-+{zr+4%*c{a6h30;UXg&?*22=Gv%Mu9;m|HpY8S1o}Syu%brs(KAiNL=2+S? z&7On?SEk0r#VVUNVtS@zaZ9i9fFP^0=ttP3`Q>PdZJM^ z5d{nC77}*l#=x^Eev9MjsJ$A6|<_wlxm;g0^<7q*s!2ry`0+ z*ZjTm_`jGMo22@%A01qMy2ZcEuoD>@I*mz+GKk%nMxSLU9J-BXXze8L?8K!r=PL-K z^Sjn_hVG78P_vvB!~GVOse`>bJbD-qw+dJ4^+9c6APms#dwl7-S=v-(vBjF%vpnbF_wUS}+K+8SD8wJ9vsY5)y{Gs$K)932=vtW&_jB>~bd)V9Ta=*d1&75^| zL>-5=p99)Xd8flN_D($UfMCJ|Qub6yr7=M?j`-;8CB5LmDhLFjQhGN36gPpKX+kzP zsMV^(tl8;)DD6~yJT$v=?~_&hF{Rgpv|{Uj!Smmc@=)HOnLs*1>;!vnrcK?xyf7WcDra@g{QfgR*&iYy-R?gAPY zbQNx@mk1X>VB_>&q0>|GcaZs45YGCzy{JKQ_Kk z7)q-#!?x)-Z@wY&a}0eRd-!}-{fIO$VP$n^d3Ld%>_g25Ro2kNj&HH;G{+;X&T|E& zX3v-QR7>fW-`d+Qx|72$e@YjsjuE8R_>e3mKOy!ql&lciHaqeaJe*EAActeDK8~Qr zN+w)A3^ftH&-|V#Zg|GzKp)G+LpNkmG`N0Cmh#XSN(0-KOdr2%Jyv2|f=pvK;X6Cj za}4$KUlvo$KAam9(_(lYU8b^swYRz>m)Ax#ePcub#2~TSKPh$QBiEiEwg0u zN!~0T;LQeIY?V4({JTvJ?Nsze^%&@sdSQPg6#smhTu8%Yc&3s%O#* zDLlFU{@b#F)BQ=^@&;)*U+~=3XUrqvON4uiIToPD?$-R;n|CXIvo+A*R`T!CpDdY% zPo=$vkGGP1ZP{-^1?>2NhvwM`CCO2^D7I;i`W(k-UbmXsWJX!fCzpfW@uD+XwxMli zwN1vE@pUBjbxXnOu9sar4IhqFy?2h(@7;0FEor;PJJupqWVBPLWh6x&R*Y}_C2pC7j;s9kq z(WxUzBvel~H#!qR7{RQ%{5i%=n&Nfi-EUaS!BvLx8^#|TCOult;$?JOc)mtLiz7b? z-BnIde5)a`x;ELpJ(e-Ydij(5)g0}*;s{Ab<&T^RQ4`Bl2obUp_=t{=gO7tvR~y%h zcx|a#%s%Js1Y2wPy{j5{e*n}#K9xK( z{{$}fEw!4kx?e;-te)aYNg=~F%Cq;jhQBsZdZ{W;+UFg3%#s5Scww!3!str){azpZ zxpJSacqhLFjU;1i_8fI;(PK6=RznK~ful~~yH`8<=`IW}jI!3%7nk*ti zUOM>rfuiw%1uwz@V&fWtG_#q@_|-mv%hoK}2e;pVP25Uz(}*8m;g{u<*$y@x8YO*{ zV|Vo9#G+*Nu<2U7hVKD(4|2?$@S zEl<8HWbMfXY5ivR079-=;2momFG zC7Ub7(_UV;^d6d3Bzx@wtX_6BZFDk9oHbrYU1DtiQNN*Mfl#>oVmHtA|AhZTMgk>azW1=V;5RNL zme#}`+8GDhe!ddr&-VnnGr|DUC z2GTj2%;B&=M8@oWTs@}dxc_>JMz#5nrIuDL5VK6SkK(-0%A~{LlwADqBrj@$* zdy3%Qld474t-Aj zLmVEEOoRt~^}OF3*}!~3s(J22r*WE!++zL%fR$R6_3~zr6)1FG0Cm|&U*EBwemHjT z)WyFN>&v2gF+0-H$00>eh5kS-jBp?T{5vxJ7Lts>Ejm`m+dTUyDijn8!UH%Uc)*As zC>IW9!voq&kP(4e$BGPi0O4GQwpw|3dTS@IaCV!9yW}|4^j>Pbjvt9XSY;-b z(HxsT`caqTkmmKZ9#v3X{s)}V5+1;WTyTxW)f?aex1F*v<&GRX^-o%LxM(?JjlSvb z0dVvSy5SzM)F(0pO{zK8-QL5UTW4GTG~H!%P_R-b22xpTrG2r5aDEEs2mo!?8vY_- zC)i3hZSc{(KnAG1X{lm$7u&(0OR-M06XeJlcugHxfKtR-&(u1Ps|+2$Li)-$$gjY2 zh@W)b-1~Ty59|CiGq_{ffMMKl@eAA5+A6$q-!f!b_D&g7h;6v>G8mD7MkaOb9`mni ztFEgIaNZSOd{?Cg6o9ziQyb{d8aP$RG3VHOj&!7_K&7UgY}zB4kn z%S2)p{b&c*euM-vve6Llupt4(hSF+c3_iN#md zGp^JixO4rqR%;^h{;g;5e7g`Ue&F zOM>XUIo$(UR9+W0`HGfClXan7rGM@~X=!g>Et}LY*Ax6frX`X(R|(5y?epXF#}hQq z?W~sgC++*|6y{xlno>3z<99p6W)vJ_aZE2SwaJn~ z*T_N9(7w4ESgL}vetfaE^Tpb6UCs5(60I07XM?jjkM#c4%7cT|!d3st=&Tj=qU!?^ z^L8bg7)1jsDe&OP1?DDBU33Sf=GH2jb$P7LcCKVN3VN1w7B=jP?%oURdV_>Awar_J ze)M}bYi0r_ihkjLoIXwWV4lyZCjNfCTx}&f^CN*0kIOKb|C0}zST19bxI2q@ zK`1Qyozw#@HyvVOg+6hfhb_HaTZ|OZZm_SaXWEw+muX@0 zyBUDmm+g&8^p&<0er9goEh^Oxi2emyUC*D1wU{}H<^vB&nw%CVYCmuGf1_Y>e0cz9 zwxJs#AtL6TCXK1q-FbTNhZQhstRt=h%01)eXJhb_Fqb&Qy#URWRw~*D_Qaow=h>-&q?! zDR~i=CZfV;o@eU_*$bL&tK#p&QAK6W7IvL9^f)N$Y->@?kAq5`^BWMv_d*>SU4@po zm`tyWejxsqT$~R>x9l-x2H&fA!Vlpz;EG~K1Dh$Bi1VC#+m^j61d3#sVGpZi-8QqT zk{z>=%he;HUmRz4dN0d;nW|3$2OjUsPtSu-qopzq78;LPMzT+D;sJ5O8U%Z)5%wI( zB_N}_tNW?Ct6+2&qiB?hKBk?OxE|ZS-Cl~C1xE@X%Q*W{Zk$h+CSR#7iRf{}>yjLi z#Kq?NGc{1wTe7r3RM6*BjEDFo(OnB4Z5)+lO1ilnErdVr^|AmOB!)=dgr2DLtY%

mhsN>hwu}`b+-jpHg zb~2`PUL6~O_0Hi^MtgNdVb`OjPf|XYY?T20{2X`XJT4}h#}umOjBHElF6{^Ur)w5Q z#T86Moe>`O-DByV9`W((4w!C<^J<_PP}$lRw;r!8?QU~ljcuWK(09K`D_jZO$g^j< ztU;3!^NJ_=VcOg#<>5E2nzS4~)0YB!0xoxFj*zsbunKR~{}!Ocsr@FfMeIy@}Yi z>{)(}B{LWnI9NAF2d~NJL`tqxmw@=6? z=sQ+Sg4ZpbF?hgd*V*DD)1jPq8Ej4{BhGB9=#2`uzeRoQF%clFO8S+}KmX8g=H zddf%bzrWp)DT1Uit;1>+;3xTgTQP9-l``0szD(ZM9DniD3T$jS^p&}U_2MSp4+#$ zoUk^KPbtaQs&nMXZ`Rg#{7o?1s_5AZcXj}>#(9bFn7>8w#(;Od9Fy_dl`WrGDKd|@ zCDXx!0V5gk2T_`n`5pP)j>~x~3z4+dlzt>Z1F1OgC5+|uQj4f`3(FTe?t#O)UmW_< uQq@$i)X95#gXN)c{#4wPq`|J_gO|E2%m|8I!@fjOqekNyYg!@ZLL literal 0 HcmV?d00001 diff --git a/images/logo.png b/images/logo.png deleted file mode 100644 index 3424c317d11b67c1b4e248a7b0256a37e8529ebf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10299 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