From 328a397e4669215b7345ca730966bde60c20b697 Mon Sep 17 00:00:00 2001 From: qth2hi Date: Fri, 1 Jul 2022 17:09:31 +0200 Subject: [PATCH] resolved merge conflict --- JsonPreprocessor/JsonPreprocessor.pdf | Bin 0 -> 260743 bytes JsonPreprocessor/version.py | 23 + README.rst | 2 +- {config => additions}/CExtendedSetup.py | 162 +-- .../PythonExtensionsCollection/File/CFile.py | 1072 +++++++++++++++ .../File/__init__.py | 13 + .../Folder/CFolder.py | 460 +++++++ .../Folder/__init__.py | 13 + .../String/CString.py | 1165 +++++++++++++++++ .../String/__init__.py | 13 + .../Utils/CUtils.py | 374 ++++++ .../Utils/__init__.py | 13 + .../PythonExtensionsCollection/__init__.py | 13 + .../PythonExtensionsCollection/version.py | 23 + additions/__init__.py | 14 + config/CConfig.py | 240 ---- config/CRepositoryConfig.py | 198 +++ config/repository_config.json | 19 + dump_repository_config.py | 75 ++ genpackagedoc.py | 104 ++ packagedoc/additional_docs/Appendix.rst | 37 + packagedoc/additional_docs/Description.rst | 24 + .../additional_docs/Description_orig.rst | 420 ++++++ packagedoc/additional_docs/History.tex | 20 + packagedoc/additional_docs/Introduction.rst | 17 + .../pictures/python3-jsonpreprocessor.png | Bin 0 -> 101520 bytes packagedoc/packagedoc_config.json | 127 ++ setup.py | 133 +- sphinx-makeall.py | 344 ----- 29 files changed, 4352 insertions(+), 766 deletions(-) create mode 100644 JsonPreprocessor/JsonPreprocessor.pdf create mode 100644 JsonPreprocessor/version.py rename {config => additions}/CExtendedSetup.py (54%) create mode 100644 additions/PythonExtensionsCollection/File/CFile.py create mode 100644 additions/PythonExtensionsCollection/File/__init__.py create mode 100644 additions/PythonExtensionsCollection/Folder/CFolder.py create mode 100644 additions/PythonExtensionsCollection/Folder/__init__.py create mode 100644 additions/PythonExtensionsCollection/String/CString.py create mode 100644 additions/PythonExtensionsCollection/String/__init__.py create mode 100644 additions/PythonExtensionsCollection/Utils/CUtils.py create mode 100644 additions/PythonExtensionsCollection/Utils/__init__.py create mode 100644 additions/PythonExtensionsCollection/__init__.py create mode 100644 additions/PythonExtensionsCollection/version.py create mode 100644 additions/__init__.py delete mode 100644 config/CConfig.py create mode 100644 config/CRepositoryConfig.py create mode 100644 config/repository_config.json create mode 100644 dump_repository_config.py create mode 100644 genpackagedoc.py create mode 100644 packagedoc/additional_docs/Appendix.rst create mode 100644 packagedoc/additional_docs/Description.rst create mode 100644 packagedoc/additional_docs/Description_orig.rst create mode 100644 packagedoc/additional_docs/History.tex create mode 100644 packagedoc/additional_docs/Introduction.rst create mode 100644 packagedoc/additional_docs/pictures/python3-jsonpreprocessor.png create mode 100644 packagedoc/packagedoc_config.json delete mode 100644 sphinx-makeall.py diff --git a/JsonPreprocessor/JsonPreprocessor.pdf b/JsonPreprocessor/JsonPreprocessor.pdf new file mode 100644 index 0000000000000000000000000000000000000000..f089a8c724da76f4fb8439fe0f448e22e6e2c7c0 GIT binary patch literal 260743 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

A$J`8h{Oq=F^$3k2uU?)Bd zbNwq&?97z`?3I3OZg1g(O;or4C)gg4?)&||(K->X>KonF-^Y{D*yyUUkv7*WpY2BW z5$)_lJK9GXn(x+a7pJT7iR~ZSZ|60+sF>|?6R(_Z2ev2d!a7|k(U`lAX)RswPi|c* zeIiKTj|nZ*IjLJ019sqLV~N=^RGiDPz03|uEZ36(w!^UTT%Jr~S(Gc_6IF-p7NlRQ ziDQ6Cm(>;Um^el-W;o`+=xU?)E}!2{*`B~-`@wSAZed1B#}M1+@BtDjyeZo98tNt1B-=6i zN0!HST$e%T)HJa zhkERiR!RiyWc}%0S}{gaSb(s-(}EqgbGIzpp2@I`SS%`j8XjxN2|k)DQJESgG7^hXA&R8`*^G>h0Fij@S95+dsJ9E|({BP%xOVef~`OE*NrE z)4BY1%62aKaOhw>=wy#3Jk5cG?O*A59EAF)p@Nf{xGL&IhTv3|pj#(FBjWAT2~e)) zfKuIVZmK-L-9R7f7{J|R#qzQUTOk2{R+2)ku*BN(+w1jRr|Yp2*iITPVV;aR1{RYs z?j3GP*j{~LH^qm7Xj5Rj&px*m8IB?8s=)U0P~TM7UQN&H!NZ4%r>+6gdrPabOBH*x zqGI>J&Zj%NFWC0r*(+9DEPSzcdE;O_|$cnOk&S5+*vb`7|HqJCfx%SWM(PnlM)f0M*4;`ik>V>*zx+p*Y}QnpKVJD_!AsAOGg z;vQ+?^khNo4lD)Myg6272m3D@d?QmPER}Y1K zmXz&qwQxIt5%hHhyM8ZY`=7r_>>ap4G?tAPEpQ>#k%I~qFKg42snc(r9#`^orG$#9rI@zHaASq z%07{MugB7uKFi{JkaioNbBQrr#^b_2X=04K@1OQ_wrol|iAxBJ{$?J}NAHEmaz(b& zeRSF%&m|uF98Ru_?n{fq+~bPFpj^i?0=Gu9H%G9yhT($Ke95#af}Q5WaA3dEPfUCm zK)N`$hdB2OHt!2z?m)KaYFvDL!&V)e>8lFcM~93JLbiKzY^OW0otrX4E6PoCqr3XX z${R9p8c-emc8v`ly5XMstK8eJRKoU9L;J`MwxI?c)@iEm)Y4FCw!d#G%Lih3RqM$l zD6pMovye&x1A1e=qCDGqW;OL{QsdCTS?ncU5Gr--Lqi0EzQiJpnbOArK=;CVSZXX` zcUk#g7~xu!=aa^!bC?IS zrOlFNhzh0(3nq&SCW|rAkt{XE7(=Rljbd-&v?;Qk_%LEZb@m3x^{F7QaY@0j?pYU`XeHq!E6 zZk6}jf$i!WU4iX75gz5SeVvhgM0@i!x;haWt#)f`R-qF|jrGE=Bi+_m2$W{XSG}GL zS3&&%F7THmx+v+gA+rx>9!r%u4LA&+{VSd4wf!>ukqTkm%0@m<{>OeA-@9QmwI? z*}fM&nUGA!kTlh1yJLgaX5V}_=Ea+$@oSU2Q!C~NNmpx`#28;mD}`sr*G05h5>A_z73pQ~(xs+jm|LSrCd_ayABM^Qmc2e0 zvm7xQhRXH+IBj~RFGCIX+@4}Wb@AnH;!EAw9M_V&A+KM*GBS5+q-8^XAZ-X+%WNNo zYnRH9&h7YR`u5v3L~WfDtu~;w-o27_AUU?HZS>HI^wj?a`(i7yJ))!CI(@@1ZH)-^ z7JGGcVpUDI^U!L1BD4R6Q{P@XTQl+9rLzMsp0W5VtKOmiy?(n~|08L|7{#6%*~#)< zO*5qHo8Yao8O%hP%Ds}0CrQrXM|LuA!c?}MlT6{SB*}9DzqBK_+(|Jq6M0K$lT>Hz zl2W##Xa~X%-C{OvFCj2&qpK(OT26^Eo%)~fWE`65IyTd_?`Y|E|G~o*drr75*p1oj zKSXoQPqBEf?@qa{)+1KLl!zFS=z*wkDXYw8Cx6aos0l-xCEcHi27AGD(Y>i?#n4)g z5`&#oUk9*ri<0ss)23{hT>pymVc5Jrm=BXj40Zx`CbuhlsjK*6SJ62;;j{G2%&fW% zb($N{-W>E6R_kmZjb?kQ4BH`oO80Wv+E+c&rOhTJw$A#>_SDl{@1eQDjj-KaE6P)E zO*w4uU=ymN7p~npO1d$jq~nCgjWtEsW3Q)8rT&v0G|k;#R%_aCa`w?nitaB8J)oN_Sz$c22D z`P;fK0kD%kN{e;@+ey2PowVHsEd}N@f9uGVvA}jl_(1gJCnZ|F(2JzC&!H{w&|SyI zrYP5myFQt7*V#LyNUy|%!5RX@gu&IOBzJuX$#RtD!(8dl=Jgfl_GWW?v3Whwhq>In z6p)V5nYq}R&2cNb)SqEq`YilO(85Ia@uc?a$?!cHx*wG8yC`+8>85U48$4PQwrfYZ zt5>Q5q=&`^Ph|TB*EX02>8ZEY6WAVR2t2n7gD`Y}{dFDf!rK~#YiWf7+cjJ6(bkI5 z)>JjN*U3t>IhlQ@q?p!h6q9mcH5Q`M(yK*p>`xtjPqwEj^j(s!T{?OYa}?XO7X0Wd z!`lO~0>kzK2V1PB%QZ`)AIVNZRyS>eOGMS$VBJXC?TGKF0BrSj@dUZ}>@z{H&!reA z3_qSG_`w@XM9!L0X12q@h*bh@E$q9r_Yc`lsj}HSbT$@#LZe0k-`UbaWaZYDsRg#X zuQVZfGNkWP0C3(M*zOi=Ip$9U`&3{%KsdH~LZaKPfbBe_t1R1F=s7mguvqFB{OZly z?}OqxFQPRbv3M^P?e1l*l(vx?k6T8pj3I2l&q&$MJSI_ya$WS8cC6-lo09bPds8J@ zj#R5l8Ig}KAGwZUmURmgT}9Y_@d$}8cokg&BLa<--WOLk0 zE`P}~uhP;p)!W)qLq>JjJ~DWuU%Gej0bjo~pO93a<>}s}+JN`ygb8iK-LyA&v_XT# z{e31u$aZ6AoJ%$7w90bgZtE%0gzb9(!qpV0+o#1? zFHBHbw(}bjN$96(k(845@@>heRSBIJ?e_HDrKFV->A2xA_xIr;65TFBw)@aUNvw3* zRCJ$GeFiQ{B0h{5OMXpcu{aFLhmra)WKq&ER#MCHTS9f5Hf663WUqdSCd?H~Uq`u) z?s`w8dTyCqX94Uv9uO>v;=7^nPjAA+nN2mV$RmlWfE_)VkkQN2y#iB#?cN~=QMU&j zK)er%8Ll1Ss=nS$ZIgS|*}fjxuD8l90@!Y78`cq>_9#Q^FkOQ+Ky?i@VEa0))_b%y zV|6rDQMcz`sbSsDftp_D4>zlz+Y>9rb{OjDL3CY!#u|!jPrxKbTPqapKX{`7^7A6( zFx&-xk1U&z<=76#e_bc(M{?i6U!b+zT>JyuhZ?bQc%Wc$=uj_pn>vz%0u z?J{_`Z>ni+=hE$NLBWv=`MrPKR3D`YZ z3Dt3@Z&s%+O; z=b^L8b)BJon4t~m_HaYHh<2u7+8S$h)gmQqCpnP1S}N$b+nvh3Ui?-pZI)DHLH+i; zw^i`l&-Y-auTUCv&~xVHk9q*TCI0$YpG}sBnhMA89mOQ9GG*a z#-i_qQ>G^}8&qZOQmTR{lc>OUQcngD-KI5WBqqqRovvWrx*i3#r5PqbX7Fmf+gjml zCNLRY_XG*s+qXrlr+;sOoi!p|Lk(A?P8pBp3CC@Y?es3-?jrbOgM6C(A!TeooPv|Q z+M4)iur^p)5I(V-5@EH*_PTvBPX_DBU|nC#lc9dQc`qy`V?I5)TG>u>Ak7HdT~}o~ zuOOlFY?m}w)wge^Wj8OQiw%(U9tK>Vp-~DukQG%K0SCMKd~ID*IEu_J?yEs(hPg* z1p(VloC(|Q{LTACT20++Iz8IF`q^$iEyikLg3GE*rxh6g3ARf*?&;b$(YDevu>OAd zxIcGAU%7e>Wc=H=MMcFV@b#wX?Hh&>iA4p%hYP8}j*F5ca(xo!!`!94O~;D4o*Fkt zh^~LbzQ}loedonA#1N$z>^lrG|2TOI|14!oN{Wl#N?-8p#c$sh7rlD@^5)H(`x6sK zkDIKkZ_!lC8s)ldPuS)v!}gKEV*?KQE>HIXwg((U^&XPuJ1t?d_684)s#-Dp(8i|N zE^CY&))_fOw6_S=)(z8E3)5=#A7Hzx)|07QsXQ6kb{n*CE|2X3%J#4o@}3NrJfqeI z)iS^zlNb}R!zpO^mMu`0NB$zS9Eq|$Vih{)QzxL{x3%V}ePy~GUZaLeTPg9I`X$ON zq=hS4{sW$@r-PTuJw6<&AXJF$W)A-512*WOyMgEegRJ78$(nI1oJqEvKG_`nAjoEA)zEHy14MS3xP zeH^L!MJx1Etd* z+$-a^Q?^H~!C_;zp)&)g&6tSan8_;WAZ(u=YqKc9 zbv5S6$fZH56x+)qJZZ7&(89ox$atG3S~iWP0s9SF8fPCqifq5{CG}xQG7P4#k0)7< zqot+SM_^A4lD^L5f6H7S%w8MBUc=mV(Utzpm3~ZKKPI;qbGZkT+g)^-tVqHMQ(R}t zpisAxvw*FjA(BjrlT9Cr7mH+4#|^| zvb|<%h0Q64?c;LK)yewLu)Y4FsF}n9c=}> zf5*99nPpSb8jo|P;Q}alf{6Zu_oayyvRzelySa0qv7^7~_rF=sh_Rj)V^N*b9Y-d* z-DV-MJCRjUNDcjHA?~avr zN*Y0XYOuVX8nm}5bA6zQRQ)2!Fnz?NNH3d*MS8`Tz7SvTg6Zp*y08~J7bDwW|Fm>@ zV>Jt<_7Ox=9m$=jRXZ1TBM&u0_ZDrPuw9^z9ff=|{o2>?z;^$P`2l3T((()+V0&QZ z0>?l4szteKZS?p6Y=>>6JEq69GYZqz4A*QEuB8TeUjuB{tZBB-y(Z80Qj%>La_2_9 z^89U8qB`~Ab&jT8efx%=a$hQCyXL>@_C_R61`f7si?fp}{gLhJYRL9jj_paf16UqB z5EXc@?r3@s9gJAEvcOCgj=gehr|eDIi%V1C1+qMCpDf#_V5ZHukvQP*k@!IvA0WRu z62FeKTrx?au$b+bX;ZhZV9|VZd$=bBcAeuWTDWX*6hKc9`gP5wd*>%YnVjhZ!l6>!gf;2#fR%DXaQLio=Mp zx2Yr_Mtm8--b0kzjk(;Jz0{4x;xL_XIntG}pxb|1>epD!ym@6hee2i($y>K~1;V%K z;MTIOGyJHgdiGSzH`TSTExTr9@Hqd>xj|{ZAl-k?z=8wI(!C9T?OKJbm~#5-VYiM* zL+fz8cH!FU;hL?1?V(z2sBRC_QG+9UYKZOoN9UgBmhEdHu?7fW#YU)Hne-{+5xMp@xC6|rS69%t7y8}+SSS0kHXK|;tVW|7 zXgp?^psfK)XwdnXsgh9Udjs1I+Y`30mE1(KQ!t?gbi1ZHmZRZnf^q9oCyd4~g3oS= z5_q@>>ednH>R_=N&Z4JNs3X6}i|p1}S~@04wpzPVw%2N&4DGu_*ly|+VBrv82y7p{ z4Go#8psQmDfn%#9EM_3v&8Np&FHG=QB@gzGi0#M3qPxO^+04C(0Cq9R^*gk;DNucw zq_?SLwJE97%WIYdU}y5At4;HIGMBpxua9JI`7+nWGZ(uMuuB#t73YnsJli?Ka~N-7 z-~?hGP!9n+%?%v+rcF()M%wYU=^j z*J%OUTZaMLrE{q@!*)6$=y>|*8q{?%)If!t2%lPI?M1977Nu@8)?eOj6N8)!;yvJ-43>tuV$AUK7%X)Lf z{fTxE3=8*{>?B_O$#Pl&Dk%9{sRL;uWxJVEfR$5_k!zsExE(e#V$Em9fO@w?wpUNg zh_RRvX9f=l3lcn6WxKA-bXk@8UtxQ5np;vywhQl;+?&bVok-+5=EIOhNu-Rx&F>}E z*Xe508-t|1O{GP8N!2g1+O%8Aod7ZWTwE$*#U;g$cbA-Vk+R*RB#-L$<&D)V%XXQR zP9E)n^KA^>G&*{Mo`+vr=Gau&F8l-LKrT<6AC%^`G{ZX}4J$xSNuH_^>7wx=z|KXu zzW!P*^>74x%XM09!nDKszKx>IVohp)uSFm~309-j-Qj1xFJ;64ESKrFA6E-!H zbaoU>9*ehzOkSB^iNHP}@SQ98dH~9Pu1y|%DSU8Xe}UhRyt-s5*s$q~Ze&3dZ)wu; zRKd(ig3&|qR>F-Bzk1lWg4t8c8b4(z6o*v8_9WF|yM<#wM~`5uiMwoO0(Ft?)fbky zjW?eeXT2a1*zWw_VteHzJ!N~T@Q<=mtmLs;nqeXhD4?}vJvb0$e?O08#e&uqd z*Sm`HhO@%^VzH=HEG%Ui@w<1zy8-M4ig)*tJmR z(07u%5mb|1Gdg(O@-(l2bnl#gjjmz3YN1-K!nIq4X|)X3 zZWFFm8*D$6+#oB-_eS0uF)LPvM|j;67Jqy3OheT%XQWn)+L6@t1-H5DlzYM5D(B5B zy<_QR(~&Z1kQ|Lk<0M-01-8f2a1xX5D=zlr@OwO+oGjaeiC>sqGD5O^J0}=lvebyz z_z4akmhHPl({hd-l&K6x+c_OQAe#WM6yu4iQgc9-?PiYt#-1UTlXqK7b$c~OJV?3;P>eH*J=RFbikG;L@ijl{I+ zfTm5$w$8Heen`%b3Lfj1?&Y8Ey^K^F@Xz$^xBJ^R5g(fE+O5O1f$gnHl8joIW-YLt zLPP&p`X3MPm6iiZcwH-c`{j91?+LY!cOKYR-N}C|X3JCT4}>LSbGZTq3Z4wNf{7E` zl1PwrR?19NvLGmnH?zqF|1^H%B+d`dQs}HF2mH)L`A$q((gsiRALq4gs<3p7YO>wb z(ciS|Dyyk`t!Bnr%&Km%$68NEw%aUB^!(+p6R`c4ESFynabdmSKhAc2hlZ^?uKp!V zEGiV;p3mGI!_da260i>;Y)5yUrS7`Khv_XX())!NYdLmfE_Y>e+=RE5u%(3V2zOL^ zqL;^*3!MP_;tL)nH-9J`Tb|+dgpp(o|!Li zKIA%)wf8zJC+pt(thMfC_XAUz`D%3Q{m#|L?)=-SZFGTUc&zDJWR}ECx9zPTP6%R0O zbHAMvByS=Kd(F|DDJdJ>q^7NBlkuzE#Oa0l(JA7P^`(0QpSoCWTzakd`{QJv1zpx5 zDW}&}a*5h^Hzn+~%MYPc`EPB1|8&Y>(8@APSi@v5%c2MRz=^GKGn_3K&tG%; zu=rCek0QiXquw^snu#R(wqn*!WRYIQ8u2^eeK;OA0&aP&Nt z+U#)o&pyL*1)FtSeWkB%pJIXc@!vF$BZs%W<2|eoc4YrXO8(L)|GDIOn`}U1FxDNd zauVd%7+RIY*tT_QX{I8h(dpEOZB1Du-^U=A4+8i=tH-~Z zLq4A}?edPwuhj50fB!pkNsr?e;Pb=T><4%81uot;wewzS&025mGERdScTc_b-rzwc zFXZ&7(vQ<}d;_m<%IcjQvRzuQjY$ewmN{+uH}i^b+k*(te|KWo)=RQw{JWHouc;p2 zqps`@QyFjF;01!q^5Vo{*c+1OWOFx*FN`YXzpE(|^c^ub*|N*@avzWT> z|9$^JP$?z9>B#|W0DX~aD@Exvg!Y?_()x3+E^qtzjGav5K_A;mQM4D8(SoweM8jsL z-*MS#BXVg@u>M=Q_B!+~9 z9$HIY0P#VMB7L2olC+f%Shb0d97g@V(7x0`R~n$Kf)OpX7{UsC0s8vEZ`I4dPvuuC zFRIH@5w3GF$Z4bt}N3XaiC=) z?n4&S4lRrIRQ4eel27bYW|Gf@5UgXz-vxSFcbNNwv(!inL^0`7JxgmZ$4T0K&)u#$ zt6tG=odEAA-s~jTOpErxYeDJX1{yy4#`|A%v`xz6B@ihZuI7XTFO*NS(s-1lhTaGC zMxd;;qY>h5!b56G{@2BAC9_jM5J45x$f0I-Z=%*SuiKH|1eC3s!+8%n3oMROwl`UI z*25^#{FG9%-?tmfp27AhAQ@t~Y5zRq(E=W(1>FOxmut7649@MZCj&+m2Eh(S&<3aN z@?6_ym*c6t#wuB7u4l_c7AKFe29-}WYAmnCQphedFL{2>wvq;0VuPdXxMS4ng#hkw zrLx*oQkO2?pZbF~}Ko_=_pNenS2F!^KXQysIlAHBA11sC4wCxnt9 z9gEVBxTRY=S^Qc|Ubak^jA>^qZa{v-o}5k%#XwLjLi`+l=xyV%_FmK$&6w zV(oJ2G-uFuRW}`>l2$kzkeC+LEL*nv|O-3A{yv>Pcx=V(T}`!=PMEEt#x~i<)uSBnx%qu` z)i^nv@U4%phPGR0bv4ia#G0r()eg0u;3r|n5Vgoqi98En>NB0XZ5y*@fs8qXkqmS? zRH#>`u?T&w1u5d*skN<^tffbr2HgO+|0X&zsK)4QwU<4Z6=i(Hz}0UgIUkvG#B#-~ zl#_>Ah(EV_FhY+LmldXxcqAi~bYUgV9?POgX(Qtw|NXMDPfiy)KOn14g3mY* zMUXG|1r6P{UvISi-8bLY^MLns@9%J`zJ5gDrE9vvHk{V?6DGL!V-IQ`GO)-sf;K7M zhOcM(s1yPBRpz_m4MZ7|VAF|+Va)&|FaHvHOlj2GeF$5=+1QNK_spX+vSP1it@UkM zS;6~cog8n;V-$=f*&O?h-p}s*Fd}-7=?Qg1YYC9QS2Syl|BR54_OxURqPU<;nYIMl z1Y0BsD)i_AU~g^uVYi7h_NtKKfgZ5vawTZ-OR7-Vq|tasL5LQMYK+*qC#}F_4frTc zzPy%vY_n1-@TD&!FNq+1_3m8X7X8phYcDd<4an?+HzmPd9=1>0v34 z#zs9r*axH5Z0b6tGA1wk#Ir*BVrl8oWE}mR$`=nHc!h8Ee(Zr78xpP`36mlW?t`FX zN!<<#nn6RIZinZ?+p&t;21CWtPhr}vaFA8%*>*9(VMD6iD9vG%|Pw69aeKz$jNUnU^eOP~VI zR()Rtb%KK`{vLSK<;{-T_I+w~%BdOmw`oJHC!`=|G`S*rQT5j0DtY)zxJ>nk9W^Z# z;s|soebGopsUBe)N&Lk}nT?yNfCriZw^{)KQ(H7&zbHG8QJ(x1 z4ia|8Lt>>XVw)7OE1=g|-42bDs23yCvcV8|e=k$HA-j3pZB7!+m;_)RA!)4;z2U8C zFUfBIk?U7?QQl-o6U=e6v?e9Sn_Eu2DcdQq(lvvNahf&^nby_06p`R_)x&$n1rt|_ zJ#|cKHD#4@vURJ@%4@=^+fV!!Ae+9hU-yu9qmTRAXzY*J)5J*HY+y^b(y^*YGCjcTTD)&1uG332q z$J9gwj_~3bCd7G(+haIh$^|i8Uqxds+J(Es&6=%h!sJ6nDj1Bq<(Md)eFj((yeA;Z zhsphu+QFo4(0#A5^S%+Oczq#6XC&x?m|}wjMXLjYNYv$5Kwr}NQ-TD%2!uS(8ZW_h z8zTXB;o~x;y4)~ZWL&83 z>@V6=`%Tfzs+(2$KOw?~_;D+r5{(!fG$YD{K60fkG5js8Ii`TUoZRmz!KPAopFHhR zDw~ejPj+`p>ctD+%0}9)Q&*Ud*(cNu!0wX^MB+En^KZD53B`ab z&zFRyk}EEc`y)su_=(i4J|T3cyVnNT0~)WshJE0E63>xc?k;Y5G8;4OYiX01@$!sPK@U?K{hdY)UAH#7(BuTof$wXG)wWx9c4HUcNPWAIVnY>7cChnV3UcwCw8-AR}`=n;YYX$ z|I~;mn^to==JstdRLr&7Rd`JsBP;LhxpY$ct9~Cye0=i729fJ8w3{q9EIl;)+@W#!Y~%~O*EvOSFj7Gm1FQukf>Zor7~Da>yZXNe(fwf*8U zR-?=Pw8}>t?jr_7vwwWbAl9@Zvh7>B{Za2A$vPbktc{j%;GiY%NHowc{_4#Eh z0poMutMczRK6StJ5OxOVwe9Mv7sl_F4|hnsg@BYrQt_!)aA1g z!EX*Dj|bl`aOY?-X?ceRcYcaxzy5G+xV%AgCg8oFQcX>4;*D-m6V0EM_%435PV?dN zv+Wl*;5bITP(s51N`%dF=%YqX3;O4N-boWT5?PL`Hx^$&3$CM8+p+VkR ziUA78>|%escVZs|7mY{6X17Qmu2PxC(F?d0Vi-&Y6>!*^HE|j|k3UptCFfVIG_49C zgU`Oi@cTaz@|e4vpy6YD31e1KW5~nYt@Mj;nLZmo+_rw6=FD}gn&2hsl@~e*7VjXz zbB}>{P{G(t+ZFMg3s>EoS#Yw0&@BX=y7#iLbml!sSKTvC1i_g8%pDo(IT{A^s(%?t z-Zl{ptbyltjzSW`5$D$y+(7+>G_@?M3;iyt+08pIryCB~n*M4#6n?&B zdPWOWXSDadT(y*c7&hJnehe2ozQ%pNVtiRm&`Bl#^WX~}=^kI)SgQsuq<5O2UFHux z(*N*b`@zX82dPB1y2|i{N@UH@$RH!s=>ZT)`zb@ z!XGW?^z57h#=&Tu5=Szqx0%ynW^%%bP%LLXRcgfWNLik69eoj#Gdf68h-Mu3K7I<1 z4!YLcweuu?c`+<{8-5hT-tG2xq0*Bx%LGT9-X*EXkb%-=rB(&?gM+4I{5W(Yd)--7 zrM!sRy0gpzBK${vUhiQ>V>9E6mnT7DGYwFys7jV@4QZDyvyeD@mR8 zFZ3+wXGC3zQx!9WTd#%P;gqX0`D4&+7DY~`In16(qQlenrmauL!*sq}8ECN>sU%s= znEIU<$Qf`!3}y<9TI#X2nZL^?wqlTQTSuBxw2Q=&&9tJg%Uw&haiXkM+*E>=~;@pqm=66oJg7^R$^M|S7i^!DY94#H?M4wi0V4i>G$nr3K=`&isM z@*+q1rV`M*r(sU_+V0Zvh_03zT`uX7wm_fLUcVUu$@A-%s>#ioH_z^#bXNU-57)WG zfW#tOzd0@I}~-Jh|615Qp0$!dsP4-t-s=@znwR~NT6 zNBTpXk9FNv)mLsfs_zT^?|+Fy_Meacoafm*(eG22u#i3aG_icMcZS(m?>jhgHK;d* z6n#d>bII7;vIHZZ)qO>z2#%l{1UCn<_E+zt@c0wHI4>TrP9_zNo7Oj6KaY35;y?Vj zrUhImM~e82sk_AcjptIwy!*$pv7qSPhJ1$4w_1XA3oqB^aV3c6aHsAPMdQ^!L(7U4&bX?k?Tdw{cc1zc%k z`DA1uW{)Bl3-sBD&8VT4^t=2`({$%3jC9!;IXeyuXrk&OdJu?v!=>DaJ=+aNzufp_ z#f2I^%7QpYFN#t1fE(3;_w(g)k;-z;P4%Q=wk?ILDeD740p1BO8bc=!@s;JbvZ_>w zHxn8wPt^0_$}?ereGE$lTNk2BwRDYs{CU6%BS8E@ynTK`KsiS1o6!I_ceW2Vr1733 zCh*8{VM&cvz)x#8s1n2F=NOF$h;k|d4m|(ER2TAb&ZC{&ywzH;ZkZe^Y1=uQ>22o6 zRtlS+dk8zNT>gayXLZ=n5L#}qL|H7}7w z#>hFZUVd7S_#=n$6GwAjb;qyr5uE;56JgXzUd-jILg$;p;!PX_VCt0Y{x5@r?{B&r z#o2?WHFKnHW2_((2fm#E;T=ymj;Ph#{LocX)Zx1u6Kd7?UY7`8Zb%uUa{fF|_D)dq z&jh-_DbdKiA!nqPdqt`X*Q`6`mbAtDcBU9-;f0ZkPq|!lr|T74toq||b@y-j_|J+5 z7JC_T6&!;R{`Xhc6|F%BaPc0GaI6I}Z~VCTgu*|OKp2@#*mjXx9r0p^-2 ziu;U(tclvS9Wzal>fASrPmg|wpH0l(q~`sj$>oau-k%zeRro+9y2oQ-&wy5#(L8-it7!==Zj2V6eTaY7Hmw=8TEv4Ht){}?LPEs ztN?7RMFqzkn#Pw9L%h!DDe+q*K;4OHA1mfX%RnCU@h?))Y!HqNwP(xB*OvK7EfD_G=i4_CNXnUU+#@hf}e)s(0zSCW>! z$G1Y)Pkid(W4&%9oJLQY{UJjslYWD_S8CYdY9XKUAqMjzunJ5V zJ81_+YlhCqTi=Bb`#pJ1m67)8`p`HvkY(2}#R+G1eBL>Rm>%%9PSb5uC6mFRw)Wmj zD_b&%ti{~W2Z&eE!69^Yo{_g}GK>}QwG;6>h(4)}!wii!*^be5UbR`9bc7~Ox)&c6 zZU9#@u(rqbsiB~*9i_U|OcD2PXpQi_pG;gYy~C!J=|3*>W~cMn?bK+iS>pFtmZjr3 z!;79<>+l3q3^ZPD1RdESC8netKT7xaR9(c|(X8dkM-Td2_~H8SP5!pTw(!e-YngSr zGVr?URnm7wF8`C$;s6lmx#suU+tbr;z<%T}{sfHuwj-v~jg;XzH-dG^PaGCks2(e9 zWo_dbN4K89M=vY@w}=BNEG^k)3@>~ zFtua?uxrz|;_z3Jr)Wlo>e|i01gbI-)P8^88Dl!MF{ge!Me>M$_s^sm$H3(GOPzhjw2Ukn?H6Mqm!JfcsjETNr!T7fnG0?Ui{EBV11kDsjOG-!+C33 z=d@{OgbB<4Y9MARkJ44oB8@bmf>(W@PGzo2BjNAA2JJRUFeO%bi;rvwi3c$efhe;7ql0!D>8_y-`U;F zlot|m7#o!EfX^+f3MLlTam!Tj$iZ=x?B-@bJsSikLo087@^%r)NSZIrQdTty?q6C{ z=A%LvaUV2Wy6m4<(q=3P&bK-QSonPbRgLX zT3^7{xQ>Dl%l6t@7ahV!taH=uzP@Ev#3J?VVK|A>;q4TpE*9TJgQFou5+HR$Te5Fh zA)lW-Ne^aKF&J+Lfe<0AuTOu)?j6Ik=So4yqpc2a6LDm=?XqW%@VNV&@7;Yn&Le!v zP$#7kgOvu|58c)){+Fo6Aap18-TeLby`I3RNi(7y8oAMVe|JH|5HZ5(6}VCLix}`? z_5S7->CCBbT{ITEE<5gQRyhGCJ(7C0ayx&YeII^*et%bWD0OeS(F2$aG50Hm29I08 zm3U-xz@+v7#V1WBJJ=9517zOlbar(o6YSVFG9{3{>uwdTpxd!S0L$8}L(F(3s=_YE z{}zY*z02kn1NbPYprlsNsS!-8+|?4-Ox-~tquVPL)Vg~Lf8WfX3VY(~XT9)^;JGx~ zGkBLnPZ=o8ap{zD9hx9^mLF^?@U3$>=4yL)rTq`Tl}Rn)b-hGp)pEMkdiK6+l3z(` zux`qdI^^GCQxRfkSY*7 zzCFXzw#~+?G>g!zQ??$#i*1fZ_O8Phhl-HWVbxW<&Y4`zBCPXqZ$cq>6pFc|O-sZe z^|~(~R$E2ECk<#mKvO}NVW=72g4gjgC%?>l*q!|AR1|TGPX>=2`UgnL$6O zLd2P*9|>ZEG&-v^xRF2k>W`=t8SPjaZ!Wl0<*{rZEMN^ z`wJ-CY3hTQzL~|pIdiZOx?TvfnnXV^y~s|Jfl8c?kMvT=kbTsCg|=rmW>J zX{y25LjdX}^2E%;-t>tpHiYD`b%vsdR;_-80%r3YqCX?a&*+pK1SMYaZ+{s$seBgt z0i80h-ia>iro9ze3R#+YmFJaL4i*qedi=@`U3x-i<`>EvT@@2MJ<#D7W++6ewMb{U zsGt&z;HAQIfl(ZIQ?;-S7r?7X|!~%Bc)7tjU!n{N9mzgW4NaH_y zPwT>v%0#a)^m@~eeUVes{DB{P;UWkwB}@NZjf1}-dhbBUjTB<}RCu%&5hCJ3)Al8# zRnO-5=w{7i54pBcysm0^6(eMe`4Q~UyHekqo?Zhe*^C)K*Avj_{vH7z1eD0Y!j6$X zfEq}zmpL662bMJ2Hk^j|-A&xvzC_~d*XGO9ObHFtwdiES#_jNYMzZLUp?iMLPoaB7 z)Oa%duva*0Yya`qK3bQ0S{FU4o@CW=C^$I0#UZY=Ri*i(L#;=0Rf#vqb5&odCV2lG zCuRRl3U|_|>4#X;PMw90kCQbrb2Tz>nXe6DWsM$AiH@&z7&X|X3bpT|G_S~1X7@Jk zj%T-$wo}!qiq`9hj(XWPTc*fuzu4rhZ)7lP8RFKLS=?Bc#H!V-EI7UU97q1Uk@{n| z6!RaVkX5>`JK?1MSi0RrA(!DA-tYe)*Yj7y-teM+noT^<9ZRQ^QfgmPq0|eszcS52`hq zma#KW-wG-ytNIo6OXz`>_!W-tEr?*}SzkzZhJJPSF6ugppQ$!>fQDO_%~V@+ zN8@!nakoxnXB_I&MGC3!n_H z#p$||2ic7jj(#J54UhMjs~}Z8Q56@gAg$dM_^``}mB;vVWBbCo=i_Q9f^QpX$10VU z>`47V*UrVv6Y{gGX_PCnHGJp7%tDIickoTkSG21o=O4DXw&^&d#JWfDEBUmT zbJqf*<5ar!p}mb^y7j+A$CO0JI-WPBVj;C^8g(Z-GMA-dfu1k(?xpR-qkgF86_U?* zJP^zwHH=p>i+-8%B1+VBDUoCD@6SabXL|7~irK>aMQv@rhm+6c>mxLlv9&XvyqJ5H z`$JYcDR|}sX&m)zUa|b=8G@RluZtp_MzW({bX8-EpQ+btwCfhbSu~L{Gan z%(7?fz7SHpLRJEQBx43)F0D```twY-0r%s^V>xZ0Y@dwwC7w{J1+(C(IhUd!QORSn z`Hn#7yRm8#C=ev59 zin32v17P(4!qSdIpzi!*ZO>5l1`RaXibkk3GW`pYyz>3_7H*X;*1g=;uW*0~S`t(+WTBUO*j`5)Ld!8#ya<-H zEJAgvQUFmxym`OI}U{u$ApQDLOJX?>?(vKH+G)kbr>!@mG1IZU;OPD3eg_G$z4;4oL!=u|pO)H++SG{Wq{NqX7!1msWKCxex~q;ZNQS`F zFys`QTY*D$prGBi%U-ZIAUDmVw(2q?;YtlS*GizLR6f0V&qYDBX)~Om|Az%nP8VEl zpcJs7KznQJ@P~zcpE>J1lJvbwJHEAk6Wk<4lo;b0DM zP+Co+N4v1CxNa9)roiXayFsRbuiiWD<<}cAH<%2<(Ul7ZP!TL_O_T|B~C7Ui@Gz&YCGgA68=iQE!roPli(Us{&(}kK9@^oyA zcyWj5AwD_mS@#gc*0K{!)h}9w8wNgN@% zeF0L*K$i%h0#jK}jvDC4GVurQDhEAu+~xQFG&_|FmDI21(cFI6wAJg}l(gNJ zw3TU&4SOrBlwtyfrIs9S7MgrG6|8NK1$HVzObw3Pte2HKsKKp063&gi=_-L<%{E3R zUajBm<+irK%%{;%buXrQJG4mBdD^3Qcn};YB>x5GoO;ZGck|z(x-h zSX+XJLYYSWeb&6|PF{aI7BDhacQkPoSboaaKOaI2W0Qpb=+dy2D_+ z2>u=`@rRyS@&kv(e1SimuI5Rv#|3DyI&C@TpZi$d!c4}iCJAy8=MM_r75h*Lde<$p z%F&&W8gqq?Th(J*wSIe}+3|9+Jw?7A0R^1X_D+g*7mew4ab_l6<{~Plqp~OzT6v~g zWo+tN0&14G^{>gH?J8z%u*1x6J?SF|l>vbPxB~CF#wS~J%aZr;0$6XgCS8T9-q@>% zZ^b8i;gL>Jr!U0IT_o&DKM7{dHqPww>Xb$BY@2jzTzk>$3={-s=2a-H41&>xAVM9E z!p=j7XhTpW6JV@X7;1wWDMudmbatEhhY_hAU{itzXv_2gqS36Mx16?!*(KORG=A~E z$dz#^WNUfO1K3G`DD%MTT5RfEVXZb>`@-0C-0;0?i$TIRC~@WL#UHEO)A$)zw&BM> zq-g;nH8s7Uihoeo*^gPsc|Mi{-g*Afj*b9?w<~Q@0cW5U>-u#cH|GDY;J%h7r*WE5 zOJ8czZaVh0<0ZE8@7#0eR+*orl%M9q7@vM}c=+RD@=+tgq7l(&;r_KLa13Pte3ef` z4NFf$Fi(I9MSJCUL=){HJoUWngMXy_DC)BQn4?eY1280PP$O&bO9&d0dRM+M%nlrn z2zpvi&q@b{6WH?YkASZT2gzYd?hq|3XN!`gh6F%HrBKd0kya~~-8=1r)#A#aNicvo*<5!_0^=hgj#O=O%86sc;8UQna z2+YvDc>boPzQ2rk4QO2jaa+Gew>dxn3z;TD`;tkwRm>wf#UqTnBc?*G3{!Se6APx! z6tpi$3||m$Kr-^;fAGSH_Q%2P8u|lxjHRA8>}F{FkGD#^W34odf1bvuYSuuoW;e0n zIF9P!Z%WN$9PI3fD0Mp1Eq+;%Hm<1kjE8)u_9|-lZHkE#4}2#fcl2X~JQgK21^j>p zk~r~S+o3(CX5WmUl=qW7dHf=el<1K9&74vzsr!HhGC{2^MN6sioSBonl@a#=7FJkV9sxy(W!?; zDRW^64p+aI*bvKPhQ{_^MGwYc3f6-8e+Pws<$_-4Yn>4+1}61pTGzV3Fw4>)%c;8n z3dc-(`)Cy*Sq9!OwwGTK2H2PSp6MDv%S zw}$THhN49I3u4yjWkoqUoLR7#4FE@H>hrAgD?yE^iqDJLHkL1`Q6H*)Clg^oqZ+ex z@9GiDUr`>Ivx&#?^fq7aIj7A=)x90#s6w_iR?ddA72l{MOn?SZwkInDf($9n2 z|DJmNR$aqF^%njSkg7J;UM8)o+$a-_td-HoC!fuJ7YEHRX+reB`z5&wDkA*ud{|ZV zi_FolG&##IR`Sl)WC5$nKMfBU!HAzV*aeRtw^}?5EhAB~%TT)V7aMTp9uWN!XI8duvbD2mw;+HXiu9^m)2KOtI=%ctWA(f_ibeg7y}7MtV{% zvi?w|_E6j^TErq+#S?btq5jIYeW8-#)BHf$-X(j5hCX-kB)+4RG;KnRDjV6bt6gg@ zeg&Z(Y|cPFUZ_#>n3?&Yf7o}2CN!$idE;@d2eys>od{Tk0=b2yY>4`XUQ(xC1N+M+#l&5D4c2B1h3@S&)iin&mD!m zT^sB_(jLyUO!1P)x8=sj(7&?Wnw+r5dX4IqR+UGEA@SBP3msB1nB2S#BK(9nL) zfH47=v|BU3C)MIzn~({?k$%fQjs6pW4VrgeyT<*biEs=~=xfv1h|+o@jb!+?`)UE- z`{D;f?XKZB)xWR)Id9LEsnjl~z6hS=n0Mi`#?6!3*9+2Lz~%2G*vn{A9S1mSTa@jD zCU1QBs-h9O6R5yf`^<4+E6TU_{QEEvZ%Sm?)*qbyKP=G4iFanL+kRpX_uNCTEtFVx zFeQB{@04zNwW*pQ^E`6wOQ=yh#C}9ZR6Tw6N<6JMjR7`X}RVTbOQPOQ*5YsO=|e@ zjB=mjWlRrS+yyV(eIB~Wh9LITa(Pb@MNbmR4jYRw;n~0MZe4kuTALN~xSu($5nC}W z68AiS#5nA{Fl)UQ{tRPCG20B7>%;5ExVu{BO8-a&Z5Nnj2*O|ljD;qw4p99DcsAgU zTF>q(A3<4gHf=l2`W0>ib6&fQIyvtbP`C2JveFQ0&e*12iREJD_2?)BoZ6IJVHaTJc<5>a>Ycces-@`|I5bI&NjHgOe9mRj|YCL24sb7DbZ537jfr%cjToIx*c6_7OLgjd7_%vn7Xj zavG`*CAnsZ+qaJT3wD%{C9X1>D zh*;{wgJiJ8V=6NQBN&aAFu6(Q`xD^VZ-!+*E+($Yf9*bWc>T^XMk8*!O(Jp3*_LUR zlWes;JpOe_Q)@ zp?em;&rd8r#?Er52Q0>S=`2V(?y*@IafUd<5-Pm{Wm4N6wQ%@?X3N5e8Vhh~QAbm@ zz;{tQbh_Z(t&bXUz}uySTq?NBvNK3|3lB_b z1#LJ=$$Gf-8PDi_c8H-m9DF#}D*7D@4AG!`uriVB%d#M=R!0U|={T;AOSVbiri;~m z($605t+)QP_xI;A>ewVASL^rw%dhL(Z>yr{gUd`tB^h1BaO4&*=(HEg{hpY zk+1V{R8=ggw%@_qzj?Rm&CsqRsGIEFx2O!O_ZR%Y2-ieTh-jR3$D*2Qgl8 zcI6$_5-CT&3L|lBf*P}`?zBHI#0xyjU(5@J&;z(eK`gyqH*1mS)!@bcvI=`%AknV-WrwB6v)&NY<7<<9c+|Kld>znx%V-BFMfTq zf*SxsAMEtfbO54TjLE z{UjP71Cix%;A_C_i^+pnglzoIGtm1{^;!PVYslI7gFbvGzvq93F*W~my`Ys9Y`35W z>`t;^gin0Q?BZeImfhh^WdQ|s6@&_{Jwx^Pp$+;t`;8fZ6yAymw+0HE_A;3ED7ON$ zKy4$VhS~iYntJULDAcv9ZzJ(H`@?Cl_hT>3}yftIL{Y| z)ZYM^%n9&@=eGvhI%ApN{lotICTsn}(X6K0i#2d3t*;pzFDk#!s%bm+TQxwlW5Ew$ zpPwhs#}D(js!xh8f+@Sf$ zr?U^1m44l&=>_qvf~Z1B9M}zd$+bb`jwZ?tAibv1lRPzMte}&%lt?Y%bq;y&Xl#={ zmp1>`3`QLCk&mk^@SzMv)X(+?lB&e9WRXbkMEpckPljJc8P}e$0GPLr$y@rIcJKaa zunR6ELf_b`tx;Iad^O@FuZUu}ljer0;wM1}n^tqYkjau(>Pv{BqvEI8o*C~e21Ck) z%2$orhwZQC;U#mi-|hQ1gD`%C`RLd9b=T_)>F4| zu(tfSuPK3enS}ps@P9tiaC5fQvi4vyWa8G4m1pACw)Xa5;#LBg+giV8`p>5*!h;#^ zKa8Vd?PTj=$HdDoD9ZG&2SyKjAVyKl)If}OveuT)R@VO*=-(~uy*R21bDI$%4ali- zDM(=_F_ZJsZ>!P&sW@AEz~{_N!eFQregdt7u%&jc%=IwQi%~3$bfi>zOUle=Ksl-J@0N@Zo93h_lpRUgF4O9a zW=UqZ&|P~?_MB{_Cv+N82^Y4RpQ(=g-E0qQk!gJ?zCyJBSRq!Kc1}6EnqZ&i#qeiR z_Vpw_M;O(xtl9G%|E99?2(DJ+w=}rwkE6Vta4fU9c&4HW$d(y1hIia^?tD&@%SFdD$=1R5t+;~*5k}s8%MXsUOKu(jCZ~l5remg*D9yV69c$%?+T^9 zNOB3h$h?=vgeeJxqVe>s9+H*%zYe1PNvN0SYEHw-8Ys;qK`PS3>bv<(G4}h1wIuhe z+Si;2a?RAjn$xY7nDXHpt?dqJhh8%S0NZ*w!LWe_b{ZZfet!d_6t?`InBj-!d5CJN;7*_{t>k$>}RD`m{*Pd$lG#k+WE{w7AsA_Pa;>Ivyiu|>H; zu}Ki0a_&akDI_VaSU$82{`C2`fyx)sLys&ONto6)uvs0Xb-Gmfs*^LSai2V?6qZZa zTU_@L9$*g+OW(D^)~0i?j=IgX32|uR z`+PrPWBx4yYJ>GBBXgIEd8G$plH~-@qLdkK;oz?_KbIqI?ZAh=jg+mgDyd5SDg0_5 z702=V6C<6wI{S>C-fF)+SLRl;;ojyK@|&i%u4#?!p{b~WxCBnAu^b6y1JlJJm)JHq z@zlPplhE?)EBpqD*r4mk$K0xZBI(lPj-BJjuEADX#=f26T*5lg+z8iH!L0kOTv}M& z*LLnYGw{ufx;W8cqtH;m0=)`)b(&P%EAe{yd7LNAY3^_SYc_^jCAq6--;MdPuz?Wf z&xPnGDe%CJjVdYIGmULzZji?#!)~r^g<;vy^|qtlkCsE_Fr$nO;PTwx4*tNvR8L(6 zcLd&-LS_2JgwOBjY3U#I6sTYW1b<0ynEKcM>}58PavZl%aL@Q_>_hdcN~rri4d0W{ z4CmBuq(htE)m1#R1T&sM{rM=`$?*xV`zj+!a=WkJzHUtu(u?3aw&=&TvJ&$akrmkf z@P6Qp-}G>LVy^cZvxVU*16apz=jbPhJsUkg#-f|AfaF)ASw927cLG*A(rcz_E`8tp ze1pQjVML@Q#W#*U#IaOMz8S9kOkdZw@@>z=^H|T*7QbHudX|d+$@GPHmw8r0VJTtQ z;_YIbWEd#{3Al0y;(kVfn;KU-a8=~i#H3H+vp>Fjjx`Y1%oA4=ph%L`%fdmIL|OUx z^CM#SOZWU~$>k-dMdGt_W}Q0nyFDS;;Rk+Der^qmqU)p12S=s^_pds})1lIq$BczU za@PM1cKv4v()Mw&#`trL4=2Dtij#-6lZQLgzZ|$G0k@{LyR)a8rL{Ygu*g3MLBOqQ zZDnu%&e@yE@E;#9C@RRsCoIGyBEZWfB5I6*2y-{g08E1aLY)5udLsY4@gIor4_y8` z`26p1$@>rf{J$jsXS@{o2MGUXQ9)55E`9<2{{pqV|2Mqq|;$}b|s#lyqJi~p|h|BvgSf3D+yUrEUe^8X+1-U2GG zWmy-+A-H>R3GNQT-66QUOVB`YNrDA;hu}_vy9U<;cXtmiZvt6+W$%6NJ^S5v#v5!)R9GP8In$yt4F$(PvzOyhyp<3X_E zQsi8s_s#JnIqH6U8Rt%DOz3V0t0}^L5PU>_UP-r{=_z_Nf$;1vq(?l$P{RThCD6jc zP|TZ!^s@WY84fnozFG`$g>$BLOKoqRY}}vs&+qNnvYT+%H#OF`w4^RK@aK9D*$tHy zOt+y&86h6yGA?7vNJ#kTXD7s%U(yneG^>3za@856^p<}WK>mqDxI6=uTuHxxQ}ea# zT;mdyV=uA^sd^nN_Frk=;X4hT8!&goi z!buR)2XEiA_`vN^@MMG<2`kD_u`}zZ(T(+OboHenv@XiydWNA1WywFdt!BK*DJRLr z=qc|JfnRoKX_oM;?XhgICntzBFY^>K7&K4b>UI7I-+MtasbBKTXFhLo^P5ciJ+uSc zOWT0Nny`}}2c1U0crRCThGE(3N!M3K=}O)eJf6ml*oP;W3pP|8P{nh>R-}R(+Ki+k}+7>04i}R9xb!YgMYVPhjyum~CY_GfQ zmr>+R|GU_U0>Ynz$(t7NNLpb|F+$q`+nDckZTEXr_Pc6nc0gtPf(}0K>^dojW!itn z*%r#VvZN)fwNO#pj3+@7&_|I+JsnUCBgYsK`ap$$I%s*B(&_|j%#3qqnfY=A9Jl1P ztkDb0`y%R-VbOYAR*eHxVGx|XyijOs!35|`CqjvIs=(=Fsm*YW^*VLCQtPg4n`zPbZ6AJQs^i@H_2BQr3(>Wr#bS%>Qvxr?RiV9y<^uOo|76d1k&|Ene z-j6T$1P@XpXbRbZJ;}BU2oAf$&WcyYZA0A=w|i?1(gT)jRDlyyy%2YWd|#KIvyZ7Z zE4x3L`%~eYijHl(kLfXSX=~FIGH0Y9^9RUN-58{wOO0^yoa49{+Gcq1$(Rb|WP-j< zYJDRDCEjTPvn>g$D-Rkp$2dk?y4=oV(z2J3d zJ^0hcXb-=VgK53%6s(AeNK^(%P=&DaD8K5L)->HVG~y3cAJ^fQA*iPC2dCebdF{gC zvlioiXt|}?5IqK?N>UN!VUGjvUML$s#2nZSLz*SJinseP?YAN@%FH^B)7R3I^m8fS z!9<#0<)hm67}d{~>aZK#%5Ly0Wg{3nWjl7@U;1H3-odSzP)EN)SA7{*F0s_FcuvlH zD#o3^veFGFcU)tv;6M{{i`c0JqMuO{}q*=mis>gH$c>Y>(M;;S6KNQJ^+aM1BL*k10o2| z?f(gG{&3&_gsQ*c=|6%YCcql_8-#!35GNb!GYk>^_l|n1imc-}BXZNG+SV(=;vFp) zGyPXF%=_q?5=%<%_Al9(Iti!be7%RI9Q>5EO_$KQW;}1sn_@*qVHM9z#Xc^^hfI&+ z$fM+mSe1^f5NrqZ{2)rDZch*kA+K*Mo6s1aWe*NiR2QoW35g&Nl7x5EK<|=56%&=< zw7`Wiol@;z5&xtHmP7Va`>>rYvjDgKkSJ-@eYV4n#J+`|yC$l(_XNhJSxj@q+9dqt zMB3dbjM5eb*Z2-Qd`E1Q;3mRmo0jcm7(+5 zjf|n)uD#jNwkVPh2?`=#sFaiw@0$4-@h3r-6GL-!^C$WH-b|u zT4T!|iK?khme|bTej?|r(NU}U9L*9(l|_ccl~!)kkX4$cE?vk-4&sK)jqRND3sE-+ zU0E!jIK|<0pqphwBVE#hkrW-*f-;k@6gtZs6y)Kq!Euh`vhA-#=DLb`^s}nu4|g*8 z^D;2E#~tg8C~~_lY@hCz2jS;iGc#~G=(o*UN{gmqEpvZNBmG#dr__?LP8BNXwEIc| zzha?SBJ39Nns#HPGr*;+zj%sQ@MvpbE3%3TpJ(SoHzk-dSe`wUxR;NHC4cIQ5aR=R><(1+nB7%E6$ z-l^=d`KghYkk!)C?WT5m>VxEp!U-zITZ?8FzgmdulDY_0wlBAQvjFLRkv)Q#(Ey9~ zrgTFw1%~=aWtDQ|!?qFUZir6DX}XSGe}{`s+Rf{-xawnnu=t!3?P;&R)!im`u$uGP zYV*ukd$d!^J5K@;WJD-lp-vsTZV!n*Ei4QDs$Sak*A_Uc6d#$fM5ntc>5c&HlakoidigjfwF|&%iPW+S=Ly9-tNx5W##@ zJY3Hv?mt+G6(|?Ohin8YpC=XRn%f;VWeke zWF=x{Wua$fCSqaXpyy=dAYx@_1Y)IZKr>}$Lnpu`WstG3wPFzDT- zL74&gQHRIRD|06&dq-{t1~UsMb7w<(BRd-gClf~}I#VFpYT)c-XJhcx!QRcu+|HKH z($UV=-oeBk2w<8xI@&o<0qPO>?{_TsX^DS1K>w%fVPd8S7DL3s#X`>k;1Vk{7d=f{f@fE_4sxWHZl&!Iw`Mz+PxZCSR`&AET zy9^Y}FkEt*%mOOTz&Tw<2Ty%>9Ti^8chP^7PhGsHBD}%hZhG>Cn80^<)D%@>O2!{r z3iyOXA9lKg+SjHpOd?D|H4_5@fL~D!6%=BLVV30+Wfgglklu!*!wdPmLZiuT)Zrns z=b_-llYWUXjo~-{P(Y8uHI=x2bEM>KHo6Pk&KM){U6?dX+ZFQca|K-q&$}d>z84Cq z(`d{Ld=(SI()n(F+M7uOnp!OHE=FOcfRd!*6$P&m!39|nH>$>IDELjrP^DFMyiJo8 z9>%9rm3e2`kcQ>*W*kbVtha)o{zHy$6%0~#U5H~Q@A77lOy_rBp0V!Oemez6wBbw% z8CBrqxKHsI23I_8N58mP-Evj5V<`GLyi zBU?S=)Ou}`s}cNNf|+8Qa#j-U5*&*c`{2LQ&40?$v-0?tU>XzS@7USj(KIH;r{Kc> zUFH0@%3@;tLy{h&OiX|heX?_g#~qy)X3#c!BkV)_e)wKzBc z*wXpC;;%8Z*a4{iAN>3=#9vd^VtyQ(hz%I%Km9!S_%nT)KM@d?qi6n|K9_K?F%oew za?-N^Tz{+sJSlqMcJML!M+C(GfN>vT0oW6u9Sb`XJrfY=eQfdEn;mdtxR}^~*Z(ei z>ie5I3;SaaHa39TZ~Bkp0UrR&9vAgAJR9R5tNtsNs`Y!Ve^fo%EB~UNnSeXZ=Rg0w z>%zkHgN03rQGpRs$cP2f$T1LIxKxPV2pkfbl^sl)Y}0|u&0+f^4K|+r_InV~x-&jc z45?r#<+`&}uoMjVx-%X0ECdXA!#Z9abnG=kM#kHRj@HWuLhzf12ZY;)2f~PlhX>y~ zAR|zF52Qf-!vlY(zA+!8qkyU30Ms;SC7dy3k1f5Le5n9ENVlW2@xN=Ar}*Mui+olt zk9WBLFe-pMSim}Bfn|_0umPg@KuGfWl2_Ki$-&|=Mo-Vk#QcPMz|s9X4_GCSWQ3mL z_(W{LUlw*Ez$kdK(*BD0Ki(7n>y7WzU9S+)lT-k=xDJj^!sZ4Jz}+r8EQ5@}pHFHQ z#!lvrL`+P-6`iOpaLa39YX+1&DJtNy0qFTi|FO}tg8Wm|{!%kqz|8^>c>ZJG|6Sky zMH{$?w=gv|0d623Z!ENcSuq#@$)Bd{^H6_r^syEg{n_&UbM(KIs}>u}qZs^7xtm9jh?>gV*ioEf-Tc=YyJ=~)5MdAurl>iq`|Hby3(1uGDh=OSX^1Z>~G z^bGSq^vwUDD*2yOOaFhN^#{xU!bB|=wnt6G!uYs*Y)sE8?*BY}rt@dY!Tzt5pG!CZ zhX_!+j8E#6=}AShu>mh;JSyYgs+WW1QE@)C1I`POX9E;22RrAZiU#y2GjIj*qDHHK(({{gAUVn1@u>~ve4h>=k*Z5e+&i*(j z)+dN!edNa<+xZVbeny+;l#}IgLC@(k8nQ4xvGKpa(nly_eG=YBq^(|VrLC-P5(f7d-t@;U!l_n&_L9RE50JmUXXL7s^H zNx1%A=)dOvetzD)-@Ea2WS;YX?A}x9bC2JpPX@(v$?vUrYV*X-=iE~Z7C<3CdhJig z`*}nDsD0jdwx^a)=^sbz9|jpK>!a*Fr)k&n2AfkE3t`L2uw<5(upTv13l)tuw%qdeR`wj~auEkrkL97jTwX zpAE35`Edd010d7W@&Rw+kqeJaIG@Cc0{|s};8UIx5KKT3u{<7G&c_x{7U1*10GvJ* zKhNSR<#-Z}=lQe$k$+tIpQ~a6UI%+7`YiLm^8l-vh*;Pj=l0m+x%79xr&4x6GXuKd zi8EZl1u>u*p4%Puh}|?U4h|d-L4xx%Qb?&-thHkB$9@&B+Y79;}>Pj|Bc7 zq>oho`fva?Ge8aC=%eC#OrJ|QSRS_mh=>6I@OYRwfFs2TC^&W?&&~pDC!pj3Z~$7d z01E;P5+Dfk*b}G)q=*wZ9#6f1`e%C2J%7_?emoXztpA|>*b4XnaT@?lem}4Q+Mo4l zn$Ju9d+C2o{ki;+3@Z!p(#I3Q=NvN^7x4Ud{Zo&pGB&^&;C!OW3D|*8eIFV52e1D! z;v>{yrp{ynFU&z!8lTNFebz$5|QJ&pW$${#uW z$cE=Vcs%C-T5vq=KM+-71L9enfHwo|3kMr;1OXrZ@vJ^K-~^!Jd7B=IKjt}ExPaP6 zmxu!hh5<4PpcOEgr-1>h7y#?1>~qS_3A_*j9O@??0OS10jXzh!#`<{pABjHdv8Vq( zgEXKL0CVMudyl1mt^cVMI9Gr{^F*5q2)6=4_1OO(ZP}jcS=k;r@)(un1UC2|t)A+h zIrQA_Dg9#u|FY8`UxR%Pk}(l6GqN-P^#nxS*Z`mLuSY;>{*@(S;$Q^cym|cd-+ODJ zzaSN~ttOyg!Q19_a9v$LE*%_@4gQ z&fjR<7rU0YDo0TlF$E|2%lJkSL92oL<7)_8kMAKNrs0qP+N5h@ZP0E*CRh(B(XJ`9z6o@>!*PYfX+=56l)C!62O}7V z4e(FNwOYyG=m{W|M9>*msbgie7w8~GJ84+0z+{^-{3)ztkh_H zs7D~T_7GX2Z$)u3%ngxlIoK%PN%_>rR`oB!vPA?IeGFnjKB6!G$_~z5+t^Ucl>nX! zdN>Vg$$SDrE}qe`*nQ%S#|Uyij}JnFw(H$-H+xeiFoF2s0GN5;(>zI>?=*PS!Dx&3 zeL%=1-6+)L)u4QW{IB#rP`J=%xO$_xqFM2vjl24L$J&BLpsRo;G_u@s@ME!61{();a>!ItM@BNiwAsg;pU+0_OPSM8N`kA@)lY{ohL!- zRlb`t!iapJ#0a9G7jSq5gfz|R5mThf#cgTIeOtY#F3U+j_bMQX>Ub*t7#mr}8 z5l#s1a#1}vuZPpxhyL}4#h3?-^#|vX2RqRyTNjsyvGH4* zqlavcikj-v>zb~cwfeedJ72IZPb~cVvI5Mb!=HCBl`Ib}+&F5{7dpt!<=<}X@Je*Z zO89&?`X)+ERlURe7ahV{Fb9WbK=a`pD(-hJK^ZG6%WnziZ(I_moAn6k4_U4lFpfOk z?m2P-{Be42%jk^W^BbU2{dweoQB`#|>K z+?S!PuRt({+>>A9y#-I`x+fw4`FiP%!U5-_ae`zB&M5sLxCdgI$o~nvmG%buEoj2} zL&gO>toO)!s4o6bSgplpdYz|f@>fXi!+F=xO`FO$3@e`D7AMe6-&ybc7mSkbu--QB z4hXm$4&H~am8G#HKY&+)CHOx099q!b*S6$UmAgD-Z{A8HI5^&a>}UvD=U;kHQ+yA) z*kE&qbh&_=?A_{0Pz^Ninz{2m+NE^PyYSE-@9Ew)7$ zqE|@wlbg^mXAntkWwd?+m%=tX!Y%XO801I#bLr?Q*>jV9875~MZ|@JzKfy)QNQflouqvQ5L$3uQ~K8;pMBv zK*7<}LxZ?|>pTng9GHwO3JafKFS2Q)DRvbSX0ny$>zfR06v~f)h)_Q?iJL@ z%V}}DrILv4{+HQ<(8(~145jDS$sTtwX}p|$(ek-{Vd7L+{CZOLs3l@&NzH}}`hhap zxXveH2XYOSO_h19j(UO2J>|!aE?p)vNR0@!W` zm#%fOBvFR~o*Yv$SJD`H??4BQaYnlsZ=<1g zqwN^Ql7GCRj9Q^CrUjs8F}Pu%YDAe4+SXE&4>aXrrB29 zq&{isj1-^Nm&fI-k*-bh6oZh)ajBKhwA6>QQNg^;=HNd|U5wPC+vW1MIG)mEh19Vs zoJe!CxzMEcx1o&fIYrcS9o~vZmkcxIw;2?tCJ9hzyUMd2e0m9O23t%4Mf~+1)sppZyT?QBsyE;k@7nJ)772HEjJT zsnb^T(iyE&m1eV>cZPKfTW@VFXX&okkU)tgDhhwJf8bxxPT(E=9GbRU9F;$bxWRte=_GAqNgCsjNcwbvX@vm_S_ zdp~mY@^i;)n*($!bIOFpT@{5!$G_YSRU)vKe#dw??$hRnk2IC`e;tLNuAl6?qaLzn z>0$Nmw&IWp%+)MYPLI3iK?J&EtJ;IM?id5^{6$A-C0|ESc%YC`#m{!xqKa3(&5tEMZU6C^NI)CQ?z}1QS`~ZR z)riK)IQ6E)bsZi99S-RBKb>_4=A4f?5Itu+5 z-*7a;CsF5Wsp}0(MNLwIQ^?gv?yFj6`kp!Y)l%?zvTNjBsPP%d4wtx7La~-v3cRfm zdLizzIe}vZy>D=LQ!8;p3|ov)hv6TuFa_opWkNRK7n{d<@fIT(*eccG6qU{dC;7GZ z7+<~?^M8RVNg`Hkl*~uiXEzGFbyU#eBo0Pe5PU`~v8OTY=+XYQJ5y~Ss4+-;zCQKE zubN*?6R4-Lzh3KnDo;7ykSu>lSjf@ zw>n2`TrExv4@Ggkfs|KYchB!dUQ*$Qj<`lf(y^&U(VvD!XK!?AYzZJ>w1(T&t^S11 zTWCn_{SC8zA^A039jBIK_>UOv5v;1p5^xjNNdcS8jU$050byeyUF{J;R|Hg1s=lS7 z+V~R(fp@NrqHk&Er=c@J@ZXsSbvnv>CE&uBthF`1(3UYDQ9oFu<+mR5U{^Ji4!3xJ z722?2(}&nq8N%q&@u{fv>gT2w-CR@TnW$l?L4YnLa>v2y$Pl8EJMSoqc=3t~wtm?S z6KaF3M7}g~f?i)~6!Tz$=->+5>8cr*trzcA7;Q1859IlGF*4Aadu8nUU2?NQZi4sP zg+!7bi)$Q>>n;*0%rOh1dVD{N_qmCOh!QzNM}oCC!?+n>>FcUTE7e&66#PHWw+#5PjUo-^7N~uhM7u$aGstWU|9*^%rk4IO56ouVCG{42CITJ7W*SA%F!3Jz zTis_7DakLs;nR16)P-LfjZ#ftW3{?C{-};w98tkidea9oWjoh*TN+Tr@iLLu;tK|=FEk~`-iF7DshrGpI!BZ?8(eP4qiQOQlGdiJ~ znRlE7o&}3km6kY8_&nq^)<_Zd4w{k(cY_@UwVW*V{$p&UX^S%ECj@$&Qw;lQjyQ-9h%12zt1t6jA$VZQb0^B-#Pscoz^29sSr@|{)@k(~Jc zB}@%qa>kmagukxfMEegi;nPAwGC%Fw!O+@^^ENhm3j#4NQKv^UbI+d~3lC>;M#y_#2^C^OWFV_hq@C+1&2`?61(55o0JL#7dEH)_TR;-Aob**$Z?Vz2go+%;!SR$G0*;{n+ zi6{`Jn)k_v`m);CSS=pt5%9v%cW{IyAGgPGP|Q-Qsk4|)XI3wm39)roantB%V*(OV z?^Pt7-cnyJz17PORLhMl^fPvij;5=+bMmr9=zFVmkJNDTiI5*Ry`z-@si;SUHz&)p@X+m)h?9{!pM;kQIUoYNi7#&L=dDg8+)L#FX!GNJZAy2OPbc{yoB0_N1b&##oqD_F>w!^<1;2#+78T0k+~||D zsZdW(1}}{Ado(0W1uhCoZQa8hsnJ&DQE`R81k{2XU6UmT(PI;!+D%@lRMD7e@5gFN zzlB-GrslPm;KzeNrsCVr_k)pI#`0FnPP_5`HiI%3Wlei6*qys*+FFjqs7AR0|Ak7p zI-2(j-lvIWFWn$59rpWBh0S~lnQ6;?9?a9F9k^WR_aAMjj|5svh%O^o`omV4nfFHm z2zkS1c$Jsix+{X}(I;$%tljAk%EYy9K#Y17HG90yDv3oQyZ7?3$E1Uz#J;ub-3_v> zgS_BPMdHPrJl=vhhB(cf92O>qgA2nMfG#yIq%Kbg?ES{;Ir-s@D~GNK(Z(sL($RiV z&1BX*@BS>D2A}@^iC8JJktN5M_re_ntjTVO4ejSR1MnpC;p~jA7b83-AxQEdB?kv9 zrgU#kd?89fe!S;G_R~zOaU~-UUtue3?z@u~Fx)rXteT~g>enl-*lN>-KGZxyuI)FL zyZZF5mE`O^@Bvy(O-LH9Yaw=-OvD%2Uk(v1a&6pw$Ly%sL+a>F!Rr(knPfRA>T*YG zghI)xLRie0Xc@n$KKQDg7yWW~^AihsTfjGu;YhgC5ahzhj75%#Eq~!aCd^AOc_6YPul!_$jeqm+ADX=gB9_-yRjPDi>_SO)0u%$qE`NB z@eD0vjtWZurn;$In{+x3k_2Xilz6STCsFOQ{G;VHl(<4Yy3O*sZ{sh9Xm-A3LNnaL zW5VlKioo%SW*y7W43Y6xz*P6#(A7-%3IB>KSt0QfYbde7e=*^og54$YGZ{qHbuMhe z;(b5#(Wkc|9^n19RYfl6q&EsUR&cT&PDImaNpa9F2gQW!feuVfuKbE!0{R3$_-&b9 zuC|y*(rv|@HbE*^w^T}{ym2jY6qHNRH=ZcoJP0t=%aFixeT5QFb@9nq^STxxNC%h4 z0fx3%n|(R=!k_uV(*gGi`>h|fXHjCe3wdPyH9My)0iERO*MOAFD_j#Jj_ESBDr|~6 z-(U}FJ=;8(aL59z#`V4LyuoyX`8ZweL+ffhHyZSm?4F57J|$;U=g#FprC*1QBS|Rs zzTF)`!Yl>PiC4}ckVTx%7SFBUggAsPI065dm!Ck4(tb2lFowPpo3ya~P0SRhE+1zk z#*F4RY!Z#$U1uL9fdoaj16{-CKDvDD55MBE7)om(&Ju5i!6tF5LdpvR>!JjeH$7*S z#LAL=A%{cGb?W^z?Am=@|s%3D_9r1 zGi!@v*zGGAyITsGyu&``AU4uamAS>*Jq##=HwblPzRgS8llV-V7*dnT=A^UB&!0gk z${cFK4;&|>m$_fan2^-6;r%cRpu-r%8r;f+GEx)3X*-(FUz`W=qIbR3+4KuE=pp@{ zbi5{N)|=u!s#o2oRu<6{0oZROu$u5uCwNs-9YXR5f1{@$Ky(2%TeD7@M3%Oy`G0(%E0iapQ^a zA*#+1X{r$Fs+%}xRB7`CR$6nu!`|k9qi9eaw~3ebD=T}wl;^?xI;{H*2;29`K(|i! zqpZ*`xT&)JV@N`c>#pNyAU~WpU%-taH?NS>hSNbCN2z$lRI|2LeA>#!*N!VU@nHC3 z7^QqE$xQ~W&WA*8iAPfU7Cx41U zRY^;es+0QXg2k0@C83EGDDDToKm0)IPPJ$}B?OmkYzF?K;7b)Dg`5@Faa>T&Iq>$a zEG%M|-FEo_t6tY`BA$0yU$SZzB>s2W#6#`keAUx3NfS7@qWlGKF((JcylD}Q{^P#epAK-S>5Qsn5g5`w z+AVRPk5t(-9{5T-a!x>^0ZtE$uQeT?|?2aX^MyNRds z(|xga2!wiYg%mM{E8;l>2zG0c&KBd+Xa$;YE!Jkz(Y4X>OHUS)6s$~S+me@BdQ)in zmV)UvIN1^zdrh*K;8jUsA%n@^x6S6XIVf*VYkeV7VDl5xfUfSpYDX;AGwbLZJ)i%y z6S?=E-6vStcj+n-nWXsEC!8>SsC?+o$pUusEldp4R6|=JZPvMd7>(ELdtNtB_0qz{ z9cGE+Xft1DFq?k*JA5$Xd)>OJ_SLD`5%il&rhM)Dqh3e9pI!Nlu;F6qHco1;Wy+UccN3$vuUhC^`z{r)9|}T-X{FsP){IZ^uyt}2bzO*?iwPmmcowYu zM}*D^mCUm6Y;_ro#5Y)bHU9K3Fe*VUh!(v>kr4$u_Ih!aO)ka5euJsBh+ceQ^*wVY znOKR|>I#brZwOKE!_aQr_IZ202v?7d_qT*W+f5Bt6!c&f=p>x3&@A8u5|s3ZWYr1K zyLs%NO;m{GwDTeiv!cGuEf9(CD`35T&00vKTn0Hwd_QeykPfwRN%0;sEkm-x;Jpt& zb?H=TTmLUz4Wbvbw1|n|w6*HfrHX5%UucI1q!;@yVUmXrOBviv^UZg1+k{rBj%z-0R$QvfIT*&HBo}T!lUO$D-QKR7-btwW zyOYbyP`)NsXDXPJ=(G%Cjx0Lz&19s>ul{8+IVxv`OnLo5WfHrBzIf9x#`>)I=W0E# z)NidOZ-l5LtWetwG{tWtzH@+|4RpF;{&Z^w153Bn`?OWuvFB>g{rOcTj(o@L6zNi zMM*bFiLOIn-maWtvs=C4a5JP*+E#F?5uM@+&ILpBfqBg@n(b z9B|19jggCGj-NQm+jg?!;e=_cGVZgaVP|vzLSqfjakMB%PbYFiOOajcyp~WA%Vve& z;4LS0)17^zJ?e0vp}K@|&lAXP+)67j%s!P_6Ay6%O0mwP`8Gd9uBM;N3t=B(sZ*i$ zBb2Z@p%hDL^SF1#RJ}Ab;?IX$A0>@Y?FqPX9Ik0)uQutP9$b)`(18Ow=huc8hRiw* zUOSVskhhF{WJ=mysoxrrE+V`0CgFKJz4mSxEb++I!j_FB9|Dp>?{nP`(M1a))CO78 zO`UA;5BA@81l^%>H!goA3ovSCJ}Y@+ju0^6(DMOgkr4JxHs1Hlib>1VDrxHP{_92% zNbLMsjqV>)qAk0I6H53uvy8WsRC=Nn-hq>=Nu@TpGg;c@M2-CaqBK~mjs$qRHsDm%tp2qWOm4#^z`h;y*hAlj#DYao3z6sxRBC8l2sfs z=lB`;c~QQ^Ddu`{0Ad>t;LSi^$OH{{OS)811YV~lI!(n!O>t#;Xp84_z|1KROit}q zsxEs#<{OlP%crIGEUQzZp~f|4h8($ON?XL&)J_THzp2*vb%JojEusk-dAre2HYHU> zSV-X@Eqo~vcxvE%Mzx|^!#>{<0I!Ftax%^Bh_64T=jel1=I1>VA^iC@xofX`#-tSV zkL9Mohcok5(yN~*_>MYg;LHOra?9a*76bh8Fd}Xxzuk6zAi9h`W%{s3lq;Oj&w>FJ z;3;I5gr%sSj7@VI$~=LfT+I@uE4g%AM`k7Y{u+_;l@H{`LY9rHM5jhUqn&3>jg8}5 z60E_P1JQ=&k*h{}YcJ@!jU~Kf)3d6g?`2=jUvfCS_W)RdKy->RdFQq0JCuMe9Rd%5vvQ(4vOHg#{wfZQM(wAytm-eb9tV~~i(+st zP1V#-I<|RarH+A3S=<|laFUut`;|Ppn@5xg_!qC?STCT*(RwiU-Z4d8*|j1ReVpAs zo4jibwX-B2@lA_?Q}tUyDK+?^;B)L|!cHpLC)dUcysd6K-;_K?axp~*#jU^%!RU3=_z*6+e9aCyp^STuD4=+bwlne6SX0GcraW$Axl=` zYxYH~;53_!A{6NG2wxP{YQ)!1hGp@;WWDLCM>{C?>S~Auz8cRrV(6H6Ijf~ihN=Bs zks8TTNmB}{$4{5_Sm|*TOS7b-PEYbRXUf|maXa)6tR+<+8b+;Wo4nfVD#MLBbQz}> z8mlFm_V8gv?H{q6|pdIV$siy9l(`0xX zE!vUsn%*m0Gw0*z5s#ZIOsqmnlAk)?9xbtDkf#b~*vDm}6I09WsQ&l9c5lPv)ZgZ& zOCZusLsH;JuzT7@XFH_`hB6!lnupj(#zqZAPgaYW@YH0Lau3oTko&Bpx8PV;V8q;s zTQNt1sqWN!e?BJGl+TzOZhGsg&P{6b!cv%>2hYI-xk2i~-UdOF5@a_PL~@NMC`~Ab zO}rD5xR8OlJoy)pt<6=kb27I#9ntbtbCtHlpWms3WI4zmQJ*)P{H}BHoJC zak9r2zFkvdHk*!hB<7w?j}HoECoGX_$tH}gD5X!bwlU?2^JsAFMOf*Kl_=UU($PDT zu_Tbb9*DGQhz}`?`hb$=(j3uw(o`ZqDRpK~H)Qr&T+^?mp0c)tA&p8i{&q9iOe7z( zjajDUWGdJn5A#R{#jDl{DgMCr>mC}>(hDm}Wk=!4Z8cMfIL@0+qyw)Qxo#|~;3Z)@ z-I!0vMf9WCBIA&4wul~*LTBS~2T~@84Q72Yng}(;7@4-Z`C^LbN4W`n9f}QjWXcN= zde$rhtNL{7-;KY_fXQ6wI&P zggL}oCNRsROle7Z>t+Wlm~uk%RXvkftg5}Aw@U->yko=ZL@8hgcVb({zFKR+yA^#< z=85bl?DnW-UMAfF$@S8JwxwE5u7qxhOZoV1Zzwldg|0!Wd})h0FM74MTJ)>Or;yuA z8V~7e<#LyI5gTU{J3NaEpmUK&q_p7>+wV@MVWX1JdnK7kv46>oNL~kT?FdkD`uSV6 zv(}snkmVJX3BY^DZJr$>czKr&LBAB>_aFC?G1CWMnbcI@C`iX6{)pNuV~027 zYlMQMg4@p%g6^Fb5z@@OUfaO-Lq_N`9nAbWgTT!uEd2S!ny`WitZ{Onv|sOGKthC2 ztUD!7t#A^$VBpSPiG0epZlui!r;5en(LqFBqISAMd+8MLBB6Ln1l_~wNTNg@%?kLB zC5-#fnJ9~XRbz9<6}?;to0DPvA2&~0cJxtsRrXmYO7(*XWnLbd3s-(+*zz+of?npX zdO1n=8aCe`3H>v>2znarxCvU#&lJ0unHRc&_#2hVu@tRDV~OyJRZ(rkX=dnC;fyhI zICWAUJr9y^(=m%Lta4r3G5O2f!1Z#{zq{idjxc3%+l!jtzbNu3<2KkpcYjeW7CG^G zY-)TKJCyI^p?XM~4U zz4FG7pQT0wH(S_sfNKQr?j^m2rXZYI_F;$1%rb%l+a9pTCVq|7rClfCvpIH1Sx1{zW`=a z&KNZQk9aBUl-V|nQ3T93J?u7@z*Q>$Ky;6xc0!iO3wA}B#yK|F;vRKqxNpg1*><6K znb(c0Np%-*kLXU&8UOu2NW*x!g>GfJNv5*~_?N_vEflte-B;5w+C+sAt; zMH9KLeZL?1`jAo7=a`(Ccb-_9l3+%D)kkW!IFCt}&~gu5q~Ig|vK_3pCSHC-Y0|{b zsi)c|{X6gNASJ?N6+vLu4HKPJwn|Osn30A@xV?LA>&bUN2esz7&=16o$)sO7w`u9RaedUKg_daY#@q}bKD)RUo@KV`~HRM=O zw@F;J@Y-;UW&Cq?95{YI;g4MD;%TDAlXk}4^4_?~tDzohMP5-JOy4A3s%18`z^cAo z_E9+xxb_3U=bktimO6DqAl6`F(l8ddY;=wzTDL3h#c@G)P&EKIwHA*vc@dwRx=DX( zlo-HkytuA`@x|Q%Rw+X9>sKnSO>DD>Sc5#Q2g`|X2EY2ioIxAF>p?nYF{gS$e}W@3 zx8z!zM?1kED8JW|0)AFg+ZaujFe=hnp3j4IjrQ(NXX_@u$U$ftMx7}Iq-#YNR$7Et zHx$0&?OQqGk!c&eP>|xH1&Z4;;rC$IY31z&2ON-TRCG>nNXH5A7jyP&DbS&XaghrM zI8q`pAmXV>m!hW<i@1@x24^{=K9OIh<7ho4^O2&ijwMBkOP(mGlGdU+6i@di&&MY&p1 zQT6`fK-|n8%F^!V@(&W%4_V!AT;Epq><48%b)8APtG0y4Q~L(#hk469euQY3jWYeE8r(}k0~y9cU?d+Ew#tD_VK;Z)IrNC{C3w;OtSCF zgAv-q*=P1g>xu-{A3h^x)|^DO%ddWs>7mnl2WIPM>!xf$7&I#2Ro;@RHK`8ORBnC3X&3gRXod;>6`Jm6 z9Ky-zxOBa>^R+l#0Vmxqs}Xgai@9K`hP@Ajkm9JYM^R!X?dZ$x@?&<+2+1^wj&*((*@V79gy zd9({u4^g<}bs`z4yaC>y&OC&=aky|iuS8NQ+ng>s2Vbu!;&JP7pWST>@M5hPQ@(dOU%JW;CPySxjDp6kPW@6p-TS@R7Mx?k zXv$XS&CwoXy4Wnka&uSEA^NdBX<52eS|r(d&jV@A*RpDY^F#!PveBQx3aGyKhLl zWjM8G5EMYV8T?}Yy1@(UF_OqBqF6IfoT zbFP!01IH*enq$P)Ml8JE-%a{)aLJ{Fbu1+KCO)i=^bhpVI$#hmr}^XkGId)JE;gl<3m329MD1sO4Sc;dPM2l@R~ZIF+YQPR8w&wX1Xmj`4UIZ$-z(?{1R&2B4dMK+3bt6>t|(MY2ZJw1BN1{UEI z!^(OWG2pjEZYZ`aQZKo-Apk$BTt{X6yHB8Avdgm}GP(->u3)gf4j zjEPOft#cFz;{H71boA_Ye7To2Q4x5bGC5xF_P+=fe3=&QiknvXQSBwf6&wTzZ%~Hh zfMesX+ZIzYl!&#E}1uirkzhpw}Cp5T6=B&{etD<}5z(zFMwz0ImpOIKPBpVL1Tb!xMI4XD8abJI^aq zB$v^Ln}|1l=_hb!|#dKUfOS z;x;M!i(2YSY&8nkydWW-FJa_0Y1S@+x7@=LFR4TCw)+q#b#$Ej(!F6Kuk_6q0hciH zJ~JXo!n`bf87ZHvj`Wtx_2xIA$;hty+5yZhmpmy3dBmyQy5S#4mZ0dMv^-6I7GhFI zj6JNGI#AQZ@H6au{n?k&;`zlZL&|~Md5gQ(uh5HMy782O>m6@UROMw(j~*zwGzM{N zwFy-6YA;QaZoo+FtDQEw58=K97bD+de{^&@N>IlkK!Hb+UzaoMee|;PoMkHX?BIqZ znY=uNuS_3{TU_{L?=klil4AYiE@5czBx*Z*IMz7csa&764TwU%kGi6}D{KeSL^9}I z>&6Uo2^XQ&6&skZ!O^HzZS|(PI@b2xvdtHDtgn+x5j?%nEK?N+k!6rB=2R@fpGzXX z=%>Nb99;)zg_LK#xB3>?NZ)-rSYb@rX;JvY=0iz2s=;0K+@b$5b@s8 z%23Szi?Mr*?wt$#1z+2zw%z_}oZ7Z+^VDunZQHhO+qO?_8@JE=@2r_w_szUYvUakQ zl@;#ne7+_Ybai8lH;90ZwJ3zT&MDqbZf>vl)LZbY;N-cL+h}a6*ni9{7diT~Cv$ce zHSA&T>+ubp0)62rIKWGt zxq$TAtP4xAtFnXM?7AB?A1{>rsIX)SL5#SH?xi=j*jeC0q?(bL&ZbIxmS9$VJT}on zn?V5Q&b1~{hu(8S8-h=Js{u=)Qgn97RTVckQDQSpy!^yFJTgS@pMJ!P4a9Y4bVGd2 z7$7@|X@c$6j6;v_XMyXV_klH1-R`6E*&b>z_&7NDoUQASrhK@c4{HkMOc^%Lmj%Ng zOBSb%A=wgcn>0H|>&eAbywS4iVmz3TD?Ib{zdgwOCw8L(=iF3@sx&tKc&MPCP^#k7 zrPs=De3bK#UQHUosIOzcfA_uK(W z+$aYwn6dM(-wEZ76I5(=iBCu~h>;zfBAA`BL?AQjz--TBr%hzh2(8l)=V5k^P`ZtI z4b(PAbaL|Hu7w;4W+uwonKln=sDjELyS$GLJui)GJw3VidtM5~X2lL(igN^%Nx`Nc zIdU;tbR097c;6hy>R}DS+X@e+w^go^2}{qOH!2qar8)xflL;SkRQAa97>1a?=7xQY zYN}zhIy`Eh#_cF&u$R%I0i!jb1=5~k_e1p3k2#QxmHlsz_z<+H`gc4jM)i=;v8$Zt z7=8C8`2WaxDIfP}Ts+{51r}|cE{48sFn(o@}ykrd@|vqc(bx~vDcq6 z{ZZhN0twIHn}cE_u3oYaq+>DD4FZJ0wesCVPtCkzf`HgK!YCY8o036Zuk?2Qy9dOgp+qDnA3SDg3poE1kkzFOop#!GUz z&Iy^7b7Lnhpm*D?WtZw@>cL@ewjF!IW*UuJ}bV1Weh*^QQ3Da(&XxR}J_{h9&7Q_w6Z2lQBB0R$but`%cj6oGpp z>N67YJ?0@4ZY=4bKsQ6VVoy<#^|gZ6+Cp z;kRHrZrGw#cP{)y2yc>YFh_4pqy|-4VTRguN~SBj#mmZD9p~z*fFN@k<1CuZ7y@#O zMq_in&Mt0-e^o1+T?+N(SrCN^-2~^MzYy%Ke@`|+#jlK>>XRxmfhhcX8BEbL=#!G} z2Lb3mS>pC3z^?(LnKYYjO6&w|N7Ellp?HOxKpx^FjTUI(t3&@KGAePpg^C&>ZZsaa zk+NY$f?YfJG)_*iFuD@sed{hShV3lP5Z238{p%2hJt$zVG`#&s9{H+rBvRFMjMz(% z2`nH^XVsbjj0hW#P;j*+tC}e|t4>0JG2(qcW@Z~#+EvLUd!ep&U@s_GTSrB<(vqR! z8af+6yp%T8>CX_@#aJJ!DvBdfK=TYL_x#L}@Uz+4#a)MPVMWdIGVj=Gszp_?7eBt{ zfy2Uym0A$=laYV`#n{k8SIyr&CCLH$Wl+XRmJ_w`UBfe)fP?+N2}qw<2k-^8$TrM% z*+|W;z_$!1ANmmBXf7DPcBxWrULE;jyO?|SED(b@yL8K%+?4Ta(W2M-GA&0P&JSG4 zmz=5j+}u+kuI}eueW+vF&iYmUy*>`jjB%!@=Ga$Qa7_sQ9IwB_WJyC9FxE`5w>(PR zXb&da<0&wYsQ$oA%o4gbNL&*dolvk;(to!;gq?c z7CGP@_JDRw!$_2@Rt)FjfWibZ$)aA=IFu6CiLcm~KSt`$;-9hq2TH*sMNm$=ZlE3uy1h1HRHTN+w`-WJ^RN zY`V1%Q{mpjxbD!9x$1}7Ptk{p9X=Gvr0i{a44a~1hRq%pL_J7T(@>P31XFO4`=e{5 z{EgxQ*6O+>rOjhP?4$F=DwwC$XCK!OK2co{`XoqEXK2pM=swZVC6*N7IOsE*9VGdb zL1zMq}He&0t}F)r|))JInWF#RvDwHve3s@EIf`#4C zKnnF?u_n*r-39`5!n^7NUqNH3&O=nEO!5&zDQ=N2Y%tk2d~w(h1hbTEm7MN?B?2W) zG_x0o0xu#}uM-FORfGubCs!Z?|LE!yb{0^f+DY>!+Ythg4n&mJV_F+99TQv@Y z+#pBw2VLCNp=7Fhw1wG|4o08EZ~n7np{aG_C+nGO*}D+TjN5w{?5h>qay3ZoC8f&7 zVBa=RMdmWRB~-=(>)lIr<4Nzhb^!Z^FL5^dfcN2}O&Lc)-lE-3&s}!nV zAP?=C8$%(=Bq1eaUQ8LUH9tMK1P`T0jg^465$UABq{9tesy~tXu9{u_EPrrGlPl*M zL2EBBnob9nO!8~r+t^Rty}Oc*R!!0~LE!tGg~Fo6+UY2HW+!D)TR2D6uP4uKOn)poe&5FEOgGff_C$H1G`Nc4?>JeMgtGghzbd&*ZlI;M3swbYQtTr z{E}U?mn!Y5x#SIDEPCm8l28-nMI@DuNF#X3ix8i8(q(?U{tJ-=oG6njlGCMChnp3x z_3F!v^dO6`uo5w;m&^g;thNj!1t4gbObiwXfg@EbR9W9z`pvY)I zqjo(-ndd2wRWYkG$9jEaC#kqTpbXQlLVszRLH>Ow#zRJH44KgB_5BJH@InbrwmnL{ zzLn*i@Nj;MgS)b#`uv-@aR|kSM#2O~L?32F_da)1x(Y1o$p{?&wy^Ic|@ zYjWAvPJO&X*jzpT?*}jAL2DtIt5lynWz16n1*z=yfZ$R1&J1#`ObPcrQQH+F4n=?) zq8*aTbGKO|^w8D*v4w`q6Y=O>V=P6`>?^;i!J zFy!6Aft#P~p?!iX9L}*ht(h96VI1+*9;`VR7im4EZ~AFv6ENXnrX5Jo-HB%J61(;G zFCPIWAij7Mtb64Gs~!o4D?vm7*7&Mc^X{>~mNhe=IhD3PkPSh%!5H7vy++O-i}`zIB`kiuGLEXdefCwLD;I8LLojR0)&YkY3KJwn z=h-R|uix^>>M%qK9(3eosrdd<=f(B+%oKM^uE#Afk!IoFbkw?yPl3M_ardJm0#sNd zq^CL0M&ro3m4_oVi5j@3G11&rCq)GFWIQgQRnt|PzUBX(0|K6x#(uroQtT}U!=reM zq@7kikJv7(B%=vP{T7JR#KOWeef^?a#N z*Uf;x>g-%mjHfbE*Nsbaa(!E|vuEP?NKdWLUB2G*jxc`0d4hyvX-Cjbb(4Xwt1>tSn3Zt%pF2)qM8tDmuG(7hW2g&edoqRoH~E&`AQfch6XB8xU_&)4a> zP$;%w1@Nh_5(d9`i197}2hJ9Y**~sldE3;mk<9NaG4fD}yG##>Z8o-U$vmsBj@=X@ zYq}(hIb8Vn7Z)sSBZab|RPr^0@JGgK9C$gUU8czC8RnFy-^J7qFHJzVwt@am9Pip7Ym8L$>Iv-0jn|#A-WZt_uNA+0B-CM*ufse1I4!+w2=|g=T}P zU#OACG9ar)A`z)=tbD1CF-UNuI#cYu#oGe>so<9}+h{ zMXBfJpOP`-z4#flWd-(q!+g9txnnO$7H*iT3bIs;wZPBCmBXo`^BDB^H9g-=8RWzh z@ilajO^^oiyUjUqgDjwfBV4vZI|!Zde_(Ii0tkek8ofS2bWXk2=~)nD|4*Q_*~kb(#Q8S`5%BicU!Kh& z?GnJScTcen-frD6laSHa-4^=!D>qRK)preQr6|MiA+kM!57UpSb%Ejj{vzy5MKvLr z6Br6-vJ4J|$X-P929k2JFyIK4sXdb603A`4Qn-7pkr?JexG6L6)0tug!7k^y5T4QG zWu$c%6Qr?C?gNNWZ%4T2eKx&;zti#EM9T6o@g=PLL?Cmzdoq($h#8x9a^}?kvS%I! z!Bi_}=Nsq--#^7X=14{6FO6k4hM~{B?-mRiL4j^Kw_)hG2SuXyYPw&)2z$5a#g32O z6Ph!RV0MWWVjKOQF3=1FF^dah#=ir{!{xVk7s0nY^_n6QKo{L;kCqGb&UF|jBFWyC z$^}2jix)=ut;YYrF=lPpkde*#<^Ma=#s{SnKL0Ob**%LN#G;*-8cd~Q% zA9e44s6HiiaWzpT8X*}$b;chO<0lEt%#rYi$@qU_X@Cqs79aW(Lew*fH}YdUc<%Y=@Y8mMcqej?Ym@Z>ThXERmx@e9mvMZn?mOG*kzOG?5E3zr<2UxWA{;6zD6$J{rzup9XX zz(PY|o_r7|fc@^lq+Z_uKG3!Xvc?5sv-M%a_fb^^;-aD1@rAo2`T&y1ttk5G#Dhg> zW(Vmam>*y3dgG^_uEo)F@H#`|hb|1M|L@;FgO3F~LQ~jab$>q>Ad%b#@YN?W5-4*} z`4&hG|16#_8nCL|poRueKG=wi3>@a!<*+q;Lwe~EDEkJdW}wo)S-nVVwN$$?$-t8Q zS~ojYj3f%cEVQ&)Uy7w08Jr!!MEboEy~8MA&5j;_{?svp3jqPvfY0h-fPRpaExlnF zUn~ZYFMI^QsI!RtLaFf+^kcA zV168mcMRWLn%Q{>^E<;Evr~S*##Cycm-)S&PtL!D$q3W3ld{Qdz7L~!VyP*NQfq0F zs~hY7mzi0yU!`*MC?F7BlUo6YKiWuhgKNY68zNIfBQxuJ0lX3hB)SZjlo&>B<-rac zfVgnyhgoL!i%3dJ3dukOasl((5!xdK7oPY5Yq1D)%{leU>7tr0!`KQ&jcpdca-8P+?mrG)NkmynRpeV-2(Qg1Uwjl z)_&c-A5ZND85BRcu;KSieRCV4%UG1TUYlTk*}f7KwYGL~^+tq6fc6ef4?*Y~{o4h- zv9AO1`r?X)nZ3LIt?v6izMi%Q`tn8nY$E$jwf1O-F#FX-=;ZeuU1a>-ug&21#6I_^ z(WWi{Ky3atYyUpI`yRRD%m2^|`|3fH=vZC-C@cA#*!?bmT-RK8`>?s~*Ty(bp_6a) zT?6mGJ~cd# zP-%Gm^LViYqHkzq@=35Y;qtdquNtugL-wl-q=$CKwkn&g4RS6NnHDODyAU67Mc_kQ}fYDcYjnZW* z{T2mav3v=50T}=G%t@in@`aw0fsSq;ndE-QeK4w_FZc?u0l~hsd`jUnORe}q>teGu zxc>c^*duEj>e-!`r2PihTW@;9@EWtb2fQd|UfPX5DUSD0d$z%%ir`A8hx)H6MOp9NhOHTtTIKPjd!^z252++Ppt#&c@%_kLSG7GayQzx#4_!Yv=_ z-4tQ0?8JT!ZGP(AkY$ftpXplj^u_l0e`1IU&?Ajb$b25t-3jh~@AC1%>eq5%2C}f* zAfiAum&4e$y^@O_3^%gUvIsO4WeJWPutHimw+VS>iL2dm+JifgC9i(t8T}Coe^PYH zewefBsXKC3SMs;K?|KfH6KkrgGA&$F*vyWrc{g0zA`Kms#?If^j)~sZ1YWMe&f7RF zt;f}In^ShEwcYd?ZB=u{0Kf&y+LhU=*-w!0p~f(aSc#rOqDm{8WEe~DB@A#e#}UpN zWw#c{>FUbpn?`ddjC&jN-*JW>jo#1en8dVY-Dy)V>ARj0=9111QMfyYadL=Wl67a0 zhOqxrNhP4cz)rIhHRR9%Y=$E^9aNH9<@}<>$JD^--C>4_r4-%4gpC3(t5ynozFsRe zYu+<5Rk=rv^y`yj!Z!Z0a^)1PUt1yHShLIUfl>ayfp{p zC1J{+RtaeP0qWd@lxQz%eEf(t78&k3 zbQ|8@WI)03rNdiW=7u@5KioX~jxN4t12_X)w6g z3Aou4wr9#|ku0<~eKmH3LFXr_!t2J=xKE3P1e$IW3hn>WA#FD&mqq!Q6c{Bj z6J$7CB_tQpD~TwYxt|q2b$Z1M*?^BL$O`E+*91>EZ;v(J`LN*`$I8byZ`wGX*ro8sUybbUVKZ4QK(Jyl*xzT+wf+!vt_BV z5qo|1ixSpRbPlu5o)tG@GIB;-{ZK6k(f?s3zkh*?YuyO94PcwVlVg~5o^hHO-uVr4${|>?y7zy~-GSFpR0?d0pH0TC&X*P3 zb4S6%4RU#Kv6h>qWEDmZEm1xPpZ0c#k9U2%co;_VB45$u&;i^}JWSe>Jx@VOJI|@lK z-QGybQAaGm(j0^Ylwe0ZUE*W^GIZo8niWU4?O^L$CeFjOb`f2e-|Z&;}O z>pK&yOmmcRn3dG&Z0ef3C+i)rIxFKUm!-)-Gj4QoFQF# zE5ld|H0EHZeb!!Kc`6(wrlqQ;W_k*#?U*-En64iXtz4-1h!n*F|K>d8hTXfLgnmDX z2>Yz;hwDcub?5y1ixa|ItI$BvkkjAO_9JJf3cA*?*aq}vbT3IBXgK~~mPZwZpAM`o zJAlzCHh0#ctwQdNupK5*cpIjl!#l7gVO9F>Z<-h4fCv_j2ET@rfPeee<;oSjUbs15 z0sBK91gW0oBc0r+z3pKzE#J2ju6SJ%=%^a#q-F!J+ib;-V8N?)kk+{QpAO*jyxV0; zn+ic4a7J!tl`uH8Vi)x!pEAy3ojAJL`-cun$`&}-v={hSd>%}?F(O_`u<>vxhpeMM zBCA}t-)M`tZ>^M=6jal17%g%4UU7CA{65Z3T?<~#SnY%7d2pc*zqumb&$13JrJtX; z8jL9!8O5G9UGlk2h=E!}fP-@(r1ur?diLN^!EVI4|OYfYa z-}^=g%l#k`CA^2y+0VSLP34pew2GMsO);3jgAw1fwGF~haU82TJczEvEKlrR><`(O z?%~3$ye_eoCQzZBudv+99Nqm&d5RO|#-zeVgQscNQ-K@sNiKaZ`EFp5rlmM>ln=X3 zjsk;o1slnm9F=FDLVsegmg zWRsh}rnTqg-dg1x`w9J~<_^+uXEt$pD7y1|Q~|1*H;yvZ23LZAX+zsj!E!$G&sUv4 zK`t_|382{&{`p3KWe;MKW=9))`fJPPy-SKrF$5O0StjcAklgH2H^2;8ypM_&_*qm4 zK{tk=deJ%chRB#pQkYBolw1)xq#OD%110nDHqL*oE$x9+>MxW7{o*c#XXKs$$u5${ zGVxja3&1QuYKH$)wbQ9}{!q@6whU>y=Dp*+HQY5wqE$)$lzHCP$9qJdJ{>cFxd(d- zAt|o~!F!gGnc4X@7AB52i9_F>@2yr41b%@g-?k7LX*y$nbjS(;D~B82+#fH!@%2Kz z10kGO$RKs~w$dVgj9?-uQ+3$rYG(Fxy>u|(h%SE`oifY}b7eY+xn%%q=JNR<;dpGvBvLt7Cf^Jg zTXHpIh!KW0#LfJG+TuJqL&9TWWO|(6nz~-RGuz2_+maBp8=@B~#6+O>E&ydeoM$9e5agXsJ*Wq> zSFjV4xlG+n3<;lsJf;W-0~gz-d%SELRp@%oU*ltBK>{|)x7sU$xc6W0I(Ik3G7i}4 zD5}Qm6&O@N*UHt85f4!^%WTDzHH3mTPC~?gXkP$LS(9;#MjC1mze1m4woHF{?80 zh2Fuq7ZOAJ=>VVIIv83TBA#Baz{jEuYsPd0`t4y@6t*avoGiegwbi;jRt0T@bL98;J6m4G;CkH_&a;qs>CYP7a5wU>B(Zv51Lku&q^?r0|+J+rLSz# z3$yX0$HlN0cltJ>^_;QXS@L_nKsP9*PO2ZuiT zmtjuVYGw{4rwfZP*s|Mj zIto{>8D~5##E2saIul1h5XyUIG6%m4`z^pJCjM*7Z8OWF_rshX7@%%>YFBxiD{D6 z-k*8C9s6JbMDRv1>&Pw06aLL9Ll^SjfB2+c)YoeSDzYq{b8bt7+8E>x7)xeD%i5&cfD-?6DVmFk7TK+&mW%Z^+ZX9*B(N3H73|`HCLvPeTS*IUq|!h} zEfrz3DTo%{OPHBv^DFB5e=}n`Q@?Jm&Pc9!*B0EX=7)?*RHoaRC?pJMp0qQ@=I@tR zhRw~7txuU_8ZOVOCX~*MY8=^Bcp$c*+Fo!+AV`CUSrrcc!E131qtS?PQ88go1r#B!b4X1b4GbSe5$Y%lx-!m>z9bE+h6qY}3nM~) zl^cue>=K`QyW>pWa8GF}OGQt{!2M7gC0}oal?Pm|ZN(c!Ol^ykT?At%V{6^9PSz>< zh!*H?src@pTr_Np8Bt;fi&8p(n%XESL;HF_yuMp6Di4vV&48I)MVH^$+t1CR6?l4P?U zMSPAkAEaAw!M4djUp25HB(s%bp>TyaVW31~knKO~M9eJ`Xyzyq_AI8U3snWcXvMWC z-SyTOC=)H5cB!=*!-G@Y$;1|7)Qay&=4Q{+BMv;6kx$LWcA`q6L<#ky!`Sa%F6GA! z;&7WcTPU$KhU6gfQ&BaF$lg7933Taw7V+A1e{m}}$dqw?Ez@4qJ1_6Cn1I{XNP|HR z{bH=?^aS6o@fD`GYdMX5N~bd&Y8VLy$8KA^9Zjj5YI6t9$o5EzrCD0>TUL?sbxX-J!GMd2H@cVi$ z>1fCxHA`DoCi|YWe`Gast%$1K<`l|D^yx~>rf1BSL&Igjti=3l?3#yRy}v7yXW;ef zNo%{1^P*yM6&>>F%zZ5W^ATG3)OGuH=q=>R`40v1es2|zf?P+ zPf~=}BMA2uiNxI|%L-XB$f+d!S&zt;XYyKb-n-EmDz+P(Jz80d_@*^1nIk=60iySb zWgK2W>eMDth$-B>9;r>(Wqb)U&^yc-IC{w8juRJzJWrPq6y4q@%uAf%6+_*T7K?Fr zf6G6-Fj4B^mxry{)~6cl6zKZ*eF9q=0dNSRDd?5aBnPR|-m~71jg8g9K^>Jab|-9+ zJ*cQ_he@(@D(FKwMs#5Oh&v>|Wk}Egm6a)v(^A6Y4_WDQH4F)W`bL)-&_R56m-S^f zpjZlytD|yn8^o%(MTfMzk27|{scY)ztoWmWV*)4GX32;&1NiLU@HY-%V`uiXClJ6o z+oz@;*Y@Ey=t7+6AUR!6M}uAfj(Vk;bk%dTeK9aZU9HB5r;_WQyKvjA=QSf zgrN34#0pBiC|cE;3Ew1=IPOZS!G5tb?K z2}|>Bl#kbc*tVbp=W-PF0XlR=&;s-)L=P60{#i6;=gtQsAComt-XThMNTm~3LdTY@ zNPGfRNL05f6E84~Kp|Rx*Jxdt^QIbE#b?AXYkXw6gc|}Aw-akWz86% z^ifpD?L#rV3yw&R%LyRTu0x(3#lRf2r?uv^T>OKG;{o$sF|CvN_-g11q13Q!3YvPw z#LxnnSpo_pQT%fj*cbcm;c~FPFXf7(5!Ie^QSL7)#H+iD*C9rj01mQzzCQ+YWVwn6 zL4H_`^mm!H`X*xhk$h&ABfpsEaB8M0su`26;2k$Dx)E-i^kOs!L!qyX8N=!Q6k_#x zPqtJdPMfNB_QVN>oDJ9_JlKPc1O7|smPn^pW|K`_@nw^Mmv#g8w_DBomaPq&`smQW zg!gW&1>aIx$8S4|Y-b$Hur>5+ke1T%73c{jy|U+p63aA|gK#Jk;rv z8|4||4?-vRjiL}sp1wzx_)9^&a_*`)Lw*PG7F9h>ivFp2Q6*5akW7DORX!w}>Vy|EEh@MjfxXVzbN{iYRaImJowy1dU zb?7FMhbOFL7GYrV5QlywR@4~`D29DXE^i@8e-;59ugF+)eFr=uC6&|Z*2?@e#_ygE zDukr$Y)69xDKiK8sRvu9)IDa5bA_ER`_*086DY^Px0dc^J=b#nLMpv{LqBcqkfHP? zy3aZYdRmJWArFipvH1kr%sk|63tx6K0XCnVdX|}}eLDOiqx<0=QduTq@+GTs_Bslnq7 zO>3F!r{F2_Qw$01{6q^ws${-G0jZ6^_7L`#j09C~9I&rjYE%oWSG$B5>_m8mQz7~*D%!O*uuLY@ms1uD~IkBMoUlkkWX+P(b z3lhO@Cex0{hPkiSS0+;vh@UB3bnj3uUYu2e^%2wlP#waG56RmZZMQ0ngSXY8U-!AJ zmRMaZRjMf)c2k>2YOe#bl?Aqb#`f0fOA*Z|+uQ>Gi=RMI<23WUlP}X}AI^I!|W%I+tu@sZHiQW2@as&S!DxAvT()mTEN?XCYDq zfs?h*^L|gYJHoC?7EDiSe5JF`kiR$spBUfD;Seq98$YjEN1l2OPYL>8LMBKz)K_GN1=~MNH!;J^(F)D&EvI03eatOh~g>8{{3RV@C$N+NgbnZ68vIsik_f@pyj7E-eDe!m{UwMp3$CEhLGLJ5PJ@2v_ zbS*5CW(xitcO3gwXG|9C7jXx7s*(U+smOo@{EIis@+ z>Q_aO#9*E)K4NEgrY)iUafnxvK@?mLBXZ(l~JS&Tlm!BPU<7(W_T1nhH25CtKr z=g1#ij87k`EU6BGMl|7Xe+w_Wt`)F}S~X{=eHCA-f%)FWxf#~#q3a_Qw}swt)x)#6 zRurk+a?XJ)Zg=0p)e_zOie&k0m@TJd@9`o z+6y+Vuo*LntlUDvh=c-Vy+^NFB1e;rVn9{x;9$)JOQEOlWmsLl&OWJBOj6Wp22U7i zJ#JgcgyaY*TmPD#yGSA(i`48|D!$&0($$rQzoytIlOA3=@AVk@nXy&<m68i|>ra1u zR=ScBcc9dDBsh*N3T(CJbP>j3T~A_S7>VwZP`S)&)^7YJiFj?onnc`7ry8tzP14XY zmn07Rbjju1Gnr-jXlsy_szybT-7T1L+OQ?=;OR$IQ(tq8w_`L|Jl#?J#^EC|J#*nB z7C}td_WET3aj*8xysTvcmOmBZCXCx@&9nW5X&d-qbM85Y)p?a9={ACInH2KIT~lQK zuo^cORwgBF5z|psfg13HeE~ncT9~X_N#RU_#%HcsvqCjh$A=dBbh(fq%ga!=p!001 z)76CrZMFs&cs`>1x|)X{z}vNX#|}0Lq)h4NFfNR}Mb|T06iLgC&ThuA)-oo|4P|a) zU?hQ{AB+9wML!D83eAd*!k5|hHWm3c z)2memTB3!CFnU=2UCcnbZ_x=OUbo>nSII1$3?Hd{?tzy_!iC8Xx^?GgHdtY^STr-G z_`)|*Dlym&2R5qfHi~80YYVDC@v$8K z4l9Iy@m%Os&|zbe zj_Z_-rTo)wN$Yp`G^NHRPT)3zI}eQ9iL+f?IbUvr(MRN0A6DzIloo3+lOY@!y0Joi+DBzp2zvai|&+i zsuVMFxKi*)hn(_BNUdv)q>Ot`!(m!&b|WijCt7Mt!?d?u5J`??6A9Ck`-DY4mMrPC zp%;i^L{!k_^3X=yX80N;ReATw#*6DzAy7n>=0jfc(PkOXN(zsHrG6`YFCIzaDhC+? zfduY-y9zO9>4~9BuoXrV--)$dkEy=C7tqcuh2Jw1um)1n_SS(&O)IW#o!!1_Jh4>( zb|3PG0FzUwK;{05Y`a~mkTb{ovL`x{i@Es_8eJe-ZK!v4zC>_HJ84Feg(C6m_j^IA z7m+be!8X7bdkhDrZtO2nHTG2G$=VrXhEe=XZi!UPCJVjQj8*nn?(jOjs%7$s-NWyQ z9F>g)N_t$wQmPsPWaWh;q}Ht%^+=cfTsYsZ;OgWx)pS>myJfSSYwi?^-bz;M{_cBf zip_xN7t8nc%w%Uw-CXZ9F6QhY>&wUYwQ>QM!8%|xg_&k`!J7(MOG(~ z(N_fnhUw&kH@e^lBrr{x?X~NI6%U>-A^3=hrBi2G$EQCBtp@~DAuE{HW9!Wf_;n5= zZNnHWMi`&YzuNSofnuMuFmm{9)9E_w7m~|rxE|{3+lFMO0}-a&JpxvDFnm-oxGdBOz)e&MU15Fgh3?Z-J8F3P7BrTdf)@nT*!XWB3Z%v0{!m zG<2qu1a_Pm;7mjmDmVo<8t)%f_x!>#PiJ`MN-5HL2u4EX^l^KdOX~D`q}Hq>pLY@T z6nc%(N;}n6)#|^TM65H&T!a1nSm7~>)uJSd#evB3uA*iOC3QEW^D1V!@hax8pa~1C zSf!jU=&1(>#*I?WjQ+f9jx-WVagB!T^(vod6B04)!L#<9sm|a|ln~<^4B$y*l~T{F z*-;pXF8W6=edl#$_e#pFWN)U3uuFAmEKz>uI`43N3Y||c9oe9Yq2>c&0@<|PKgj15 zFYF*%pdmc@8biIEq4-PI#&{a^@hqMOg8A^+s17@q@bez3F*|__V>!44Dpe}Q*B(k< z=nV~hlLxVlP`{(s@U=MfgWV z?((v^5*F322~y87mk3K)&ego@QZ@`c&~KCK7?#?(n^qnZva4_%7g~2DLj&Ft8Uu#N zs?`AF0_%C>{`TdlAO`QPu#sOsYwdX zkwT{TBK|(5LnaTyRd=5s3Ha^&gmcRyyt`5p z8J7`?!D_oqET)o?6=oE+^)3++4GOx4rc+}3dU6urP>b0%4qvVM)LoZoW?dR9!4(JS zOf#X9QE~q10vXRbonNx%Sa-~Xpan})BL(&sOSN}Vt83b|CcW1R|5Iupj^4C)QI?8L zLe#KH1X0x2OEYiVS|i6blx&+5mj+v7NmSQ~11W9#j_d=qa|_nA1~H5;yCDCX1ct{m z9F2qPgVIOj%~{OYY&3$an$4N|kGFXx^fCwb-GSo9*j;0X{sP*xT}INBE1mRaCe3Y~ zA#}5;UAwFsEaz*`cuA% zT+1jUpRf+K-tP{c{A6K*l~de4Pu?|0M2D#izt$v&Qd$%fi8w}F+5_am5=;nrbVv1z z3wNwP+f7!G7N=lp_dZBGH%FzU3n3Aiy}ki1CX63rJn@E^(dzxDD^_+gBH7X;wI?8))5 ztP_k|-dm6y#&(A`5T^QX!?f?%ZV16>@smCW&jSNQ%|`-`I9?Ogo%p^OZ-%M6iKXbv z<#Vq1{0Uukg?iqZph;iJ@bf?ZutmT}m$`jxD#H)?MPa2J5H!-i>bK0cSF_l-DutxaBS>^M{0aVa#@d!f7! z_n}7(V!!bZYxGDPhg#CQ)9|9zupW}xzfG9ECS79<0w1^H?f=!aA8&s126iPnhXHE| z-{$tUMt$;ENzXP3NY&E!YPF4(erYtaNV>K`iE^C|95i2}OmJS&_QdS3F9r^#YfdX! zM8G+IF!NBSIql^4SCTT^&14OR(VbfSoP4HD=8OeAoa50P>mDJ3CcCYjxG7i`uP`83>z5s z|IEE_U$8iD>)oaZ;dYAdn`@d+OYE{v z9vh<)Q|8?y$6s;|!K6~*;7RsSrjsu@2s{ag;j7z&r<*EzQ^%z&GnQ1fw1lPuef|aa z?;03*=hhOgubLwthzdl!M(ivP^&T+0{^t#QQ2X&&8Zw|_O z*mJexby}Mplf^N^?LfzE3yahBf3fyXv7&Vgy6v=Wu4&u0ZQJIWwr$(ynzn7*w(YzA zU8m07l~m=N+}xLu^v5xtdNNvT-!X=(l}W%VoXJL^SJGN~Z5PA@^>t6!@X)j4{yP9G zAt+Uaxex1`jr2x=eZ89y0ad!u<H%%ny}A275OBZL*4fEZ^+@*CJAa^6+k(QocewUZhdk@*7EioOLAoPY;K=t=%I@z z$#jW^UQeZrawi=e_nJ%@#3&H-&#z=~#b8qGq57i_d%XGtK^~me`Q^5tM^d=-d(WJ5905NH#(65zKmKJp93Z~vk-T0X-LB47+6sL=NqcU!H8q@aS}&S<04)eN%mEmH89k=2D1 zo?IKrj2!niHKevJ`PtF-2I2_tnv9)h1A5WPIGU}Pb(5-@Qvu$(Qd7=VF^JmvjlLI} z?(iOJc-*wjlqf2;ZEZ?A+a(I)(i{>jdr8OiV<+4SN)FV*Ul;=e>lUTRB<0ge$wAxSzOqUOOHK4v4PL`1Q#Q>LY+UY zG*R)w8Uodykl)(H$KR6DIpZDZ;JEoFs+)6vCFId^Rhe=DSBEElFPH&Y3sn0jxYntT zGj2@^l25$W5E8IM-74rNZXF;}8F}9B^ariE_3bEQ)F15OoLQsU_LRz2v!|M$--UE_ zg$wn@P*kf|=L#0zsY#sdcAy=90C1{AO<7;{qpVTAq}Ph9NDdxsV$$Qou_-C){S>YE ztAxC*GVujlXoi8xrGOsoT`T-K)`oL4ehfNlamWkkPpgSMYFes@Zhy%2@O&2?2I;>Mf0r?LsEbVK*hviQUmz z{U9P)W<)ccogQx0r=#rNf1ev5kp7x2)@?kClKv}EtK~{u9-LNyf<|FjBj#(JWYqAB zODVSCI{8ho`?oPq7FTj_@O-!t19}+=CnzQ<>|kr3>})$B>-yEs(k97R5WcaXaor7> zF`bYS4&lpZW8Kw)_LS|mq(8hSy)Q}vYcQSR^nTU9`0dCsx_~W%Cd{L5e5D;Kya#|K=ZFW(d7_L98?RR2(xUARf7VMl=q8?U+^^(&;8)&6-f1XR8NV2jyX=1~9tVx8iRfmg;bYAHWFY zg#4PLFLWhvtclLe7|D_`Jnp{BUsW#WCS|Ctm!RPHIVZ!t;FO`22Wne|0Wz|uEpj5@ zdtbad7xj<9-~W6qkH?I9m)*3wRvwmi`9Vo$PhrdnP}55S&v<{lP9Vfid$l3tRuRpb zt2dy4QheuxyFs{=iNaaCUu4KBAWF0W)_WUx+Z#fgBqYf6I(#=__Ats6^R$HFvzY(x z603HzD+vO<;8*%M_e9wP@b4w9RejhetADsRqk%$#YStd=O=ffXvmHj5kU#kH z!da+!d@jY=avw{3%~ODIpiPref`>wq++aL<(^OVy;7GzcZz2zp)v`1pkh@nXg@-!0 zfyh;=?%XPmW4g>ZsHhoP)CL6W+6=LqR^P~DK#`}LU#H?QwwInN8}71zhud(4(av`m zS}IWYAxl6_-hxL_Deqw0+r+1<{A+46Rvx8is-Z!7D`k>aOh25~glA3AvB7l1faP5v zqH1#y)RB>GE#PbOO$Vk&2xzL4A8`UyXbhhZV8%T&9 zPo`o*!!58Q9}6t2sbUM%XIgCVKrs?=WX>{Pr9PoR?nzTXOmU+5ehSr9cFb7bEDdo` zw6f)2*Zyh9Cgp0=c4Ev+*XZM8sRN}L*_CEfCt4wPzfuBkU5+YTh{?nh8AF5k+ciR! z6J97iyrPFJgy1s|7z?RAZvGYp#whwZXOKy`o=(3mcI+GEcw=1ROc|*$cnZz_&<#DV2-IWN9<YycH6g0x8))QzD*%{7@8<(-uR2Vg13sd7yL2ruJTo*MH|^!Wuocs zG8D@r5%3ZGZy)J5`VapB~@N&=TsO*=%KZdlUSBiGTmSDySkVBCa9!AFANr zUG4u?6=eEH75r<$G5j+Y|Nn<7NYC+qPzA;5BP2_{^#~M0}IPvukk-le>c|uZnXdB>EBgA z4tjQuf0=;)7t`a>uCDBxTIe;~1+D~9+n8OVu#knKcHw>cX&9!Wc5{$|i>HJhkEc3e zIj1ZhbOf3RPvaaXTqj;TUA~)UIcCQ%HBU87E9)ORA1^Rm4KcrZ3Sc*(3ZPsC@1P+8 ziUG$nB!}NE1^EFG$O!>JppgGGTnH)9kMjKjauI?6f(+)8_=zlx^7B)0Z5GpC#8pAQ z29b9S1`HAg5Zs>^M4IQv=f{9ZdWT1hi38&X>JYF2$N&OxZbb%>=&gZqeHP}wx>Rtb z`Z_`EHJO4%NJvQ7{UE~0dj$&c(+tc8$k0#XIUL%GSk}kjhqr|d&g1@}0!^*rfjXk5 zAwRvorUmfvNAV-NJZyafxRy`i*`)x16lfK&2I$!UGxyiy|F)I&^TW-vgBSTen-AP5 z*zALV*qsIl)D+5!a}}tOWkmqlwe|MP$pGWuz}$Z%(>Ra=!rQIA0)&8s_{zSnJ>3b< zll27&tghap%j%QOktgHwqd@@!G_SOT$m5px0{D|SWk-k+60|cExYa9QJu`(&Gl`AV>h|v+@EF;itZH)mgf` zBX)TT;_7<;4Zb0mZEfw_Vt8;)ZN3ZQ>=0bW^B(DJM)*2n3N8RR=*OQI6ode<59H^j zz5)HME4;ISc^~=!|Dc1{y*+Jj=69t-g`ihPb9f!viw)@#2p|uk7FPSxgZmQ=5flW# zDsP3-3uOrIO!!Lnk&S8iLDsDV2y_le54;^N4*~G`_4YBgFKfnXPnLGV_s9pQIjgKB zr6-gAa#Ql-LPgQX1F-$suL$5{z<|#$t}cjzPe2NF`*kDDseh`M{7I!cHHHQk_ujDE zk^L?=XX{Jhe^D#22lnYoOY@o?KmbtV3t|U{0<5{?4f*9e@f{oYle+F}_V$DD`LkSf z4i)&-xBCu%^ke9!$8V71>u}9{8PT2zF7vvj%>G5U1aW_YLDgr#`g5Tqz;L_P4 z7w3BaIRM(0S^T4`HZ+E1``~#RG&BgP4+3;4Veh)`Dh{(tP2ypocFa!`d?a5>3 zpWVZABa;y*_3i6WzV#JQ@WbENyQM|F|L1WI|EgE5)j^2h`qGC-*|m}S*R7+)gBS!h zl%Z#WY)OH1DTA`*t(7lwJ<jgr{?f$ExYa&TD2>l0qcI<~qlFlJne> zLm6(hc-4kmA)9Z(n{ZrA%}!qb={>6YqU8^}W8p+fRaI0BLLh1tVdyHBE?0E0?o^3} zbuYSgru+6kf38iM0q!@X+G-f`I-Na2dC$frH2Yf#kJ;R)mfL?3NEz^Bcy5xTY)q}w z_9vU_1JqU>704b`oK-!4G>Ij9nsbVH-#y5{**VE4r?8=dBB++Z4AP{@(oPO@F?ptN zrZh;56oHsiApx#0sq%39AmoJ({jy|V)$>duak+x@P9TU-*eC6+co5y(#ciQK(z;Wv z3Z>KMxG&&a6;j>i^^Nmk~}I;tZ2GpswIUpFU?_7UBZfiC6GdAEjdca;()ScPkz zpjSS0c&o5Ea`loeSE8K?1|O>uJJk@%UCc2B)#w*lmop&g2KfoGoYJuuk|p< zHqxOq{5Y>Zon`VavpG-rx|LqhLyq&QsWwlwQ?z=okBdF%b41SEdaWbff-*TyoStn@Cz_AfI`X%1PLCz*)ShkNN(1;1l#VG>i!gSHG}> zXYVE_AAWpSBOS3F9(}y}cvw325ubU!+*u$^bWF&r{ATB?l)GBfm2SJjnb)xsnW|hc zhrD-qY*1~gm&YNA%}V{(>iNq7Wvw~({gu8WDtFzq@=6q)6AK?o$?XE)uW{iU!$I(b zbg1`~-nWG}&sv5#bMp<|s`z3mG%xIh3%A2xQEStBvS`&yq7oN^gF* zAn)4DwvbCl*ydU`79N-nqs9sn>zV$&+tRFSB6lr8^M%4@_KBiZtQl8_?7^res66FJ z<cX%k2J~9t;vV=9b&Uwq5 z^d>KD5awbS%O_qmFAXQ7eFN+#>LI!zI!qkcFycW#92GRx$@!N^g)--u3?@x`59K;q z{+Wb(sPNVAPS%TANE{(DOm&Vx1xLNBPOGySEl5Z4u2>{nOiRzb z%_$Czgy&~M;>8a~hhp-|>DyGlJk=y^O{6xciKr$^5a5k9Rm2a&nI&X2SQkK@s~Z>whf zPQcGbthE{uLA+3H%A;JAt5+p`>^H?*&LEqFX)}?~BU#ZpCM!EfOsM)=j(0%$!jAt$ zI}m7xcTK$Dl*KCB2bit#WqOSXE6h5agU?Om>nh~mnd_v{-ieizjSts!Tto>+xY9V@f&F=os~MyjC8KBfNM`}!fTMvtM$CM9_nxoQ2*KNvF-jmEUn zkD6pKmksL0aoAp+4C<3J|K)MBWMxxlZV7~o&LcF{uq8GMJH8D0szDpKx;SlbjgkG~ z;6M+)f+z$1n3B6~Au*{txGx{Q(-Jm%;wgka;z+<&s~43krSXO1lS1{dXQ^dcoz5B2Fc0by4~ZXAN+wUTzv2M$xmDB+?>#5LD# zFZuapoB||b27d{%;Duf%(BaHPNvxDC_!ZY6F`q${rWD>+Hmsmv?QpS_f)U&paT;YX_q(h0*^b$ z#1;cB3AnAqtyn9@IhmA~oM;mIS&vwU`Q6W(P{6TQBG^wTlFL>qEyNX9l#Lw=HWDqA zgMReNDOon{aQzqKfVogcec6r(%`;o#Mf$!B9)17>k_;2ij8&34*Su+p@c5ExQaW$9 z`{T9mUr?#Kjm+f3w9hKj=I|;nyVkU7Htk7iewXpHRlq~2X=#73V>^9N zoKS9i!RKp6l2ZF<%XV~VTc|&{ai%@7^rViVn4}=+^Tt~2A)*Jk=kbgX#mx(QN^VrS1EP0&~<>uxe2U&$|C$Fm-deC?py^q_`sU&PjM0i5rQ`#k3am^h=E1m&9=_21cEhjyfU$-4Hh(HyMXBs2?7#ru5{O=@mGg541- zCu(vA7qMEDJ#5@7IBw4&H{>nsuV+VY0arpkoM$%!No2-SVMitB@J7F8V)w{>VrY^syeD^|Me9{f_tz0vY~@MxeF{U4#LU{OpQ%z23@Nu`He01L z%2a!=Up#b%0Qrg!b&8P@8$8IBpRU+uE|1q1Bg~cwuG}bn+z**i?il9cmWoOT;Gwb~ z4BN}crnv$-r7fskIF3m~Hyh~Ftx;T?Ln`G4uaHd~#N($HPW8?=-x}acO8Xq3SpkWp zYAa173`BrTj_Mbi{ZXp1Hi5EC$i08P42S@hnsqpkt~2RE?Di8E!fb|xZWBT^E=qe# zHJE0ee#pK!)Xf8mRts0%UNo%OnzO280FE|{P`LgWc%M>CWzD?Q5?Cd=SQ@phr zJoO9n2tRm{UykHKOh(arE_O7gCFkBHfK%qvP=$tMO?$ve>c%whGY9vr45qRcJ8Gaj zrL}PKK6P9$2}aPNhKgx)IOPFQV9;*F?eT<9thljKLIa2=XRk)Koy8xoZmTtfg9luJsswoo`2Uu zLkIwN08t*+&R80p%~D%r-|Z}1+pe`#CTrZXOJpolkR|ge+-?#oQv**-S31=qi~6#k+x=BSdFOW+B*-ytN-3 zm27!I1?fbTa!y3PljMyaXPSex-i=~vX5Jr{)_oz%_y=e5!!@8 z>w#Z{hh}^$`*W4qP}-~m80YKKYP8ip=jwT0t0=@VP{8vHhW#_dY$)gHM6|s1oBLjE z!aA!PKb1HlST%1b?|ilmu%oVXny^#o=e(dx;W^d!iA=~@ZK!e+4}fpng;NVk`g`+A zVvUs)5B9z-hQFh$I8|2(bJl329y2B?_d(^;i$KwKe)+)|*=~CYsgv}Qys3v;7jcb| z+aO80R*vpRIek_m3Su8`UD8^cOjlz3vTCYUYG_uLlbA5$=0 zwWS!_B#I-9B}618$6o3q%&obbbz5A%*!-c7EiA-tZm}4IciOCveFia$RNtNO+zHmi zY({o3)!^J^Wr4o>CvMIhIf{+%h7nbm(>8tCB&w6~@3nLT%a zFiFpn_9ChmT10!Nl2h!fHSM!&0dNg_9~(F28WD}?^^W65YIJg;(l6(`#Vm@iYm5@K zAXXLTy}u%V@e=2u!oFG+t zde;N|WgW@3y@qu;eJ$XN^p5lG++6Zz$#}Bb$DkIQ)EQ6!s&wR??%-{rzp|lbaIx_w zB&m$Ig|M9cccYg|X?{Weyms+KlpOwLkXh97nmnADR(AcTZqE)EooXP^BxeZkq}fE| zlghNP6ucdS5fcwN={s#4bC>xeX{oM}XDlKyN$>Y(mfVSrx)OFE3 zHHlBKBdP?odJ=U}A1Fh{8tA0W6hX$&yl=zD$3 zg`C>rQsS@mE29G0)M*J`ow-w#;nfmN#-q0SRtBBfp?$$5L$Q>NT~|lRDSBP z^CPNxSXRXw*nwq|O1D+Jkayfb(%CDwuh-6u`IkRdpngqJ#+#x8Dwg{CzCBH9i1@c3lE?| zO~j%%fU0PRzbp1B_-_>~aJNbdcf>T*Jx84d6Gy?C#5yJizByh9H%dsHp{=IXKnv1z zgKvz_g$pd2-D8OmDM{b!OdqTSvh=U>RiV?_fex6KW+@Th9N1eT)xe{YYTw2rL9FWT1uIZ#B zJB{n6PjnXm(d7?(^g@0MmTlV5I;c&9PhO$@ZVe^dsy zwVt*KqkPa2)-=lenBmQB(0aivnex6Cd)};CAgZP;qP024y>QET*QR15>M=D@RF25l z-J3e+4mq5f=pbGeTBTPJ=tz>{s-V4p+XN7b{QSb!Oq@6m!*mXB-l#qsk}6T+aa)@@ z$%dS=2%#|*TYg9##&azP1LjGeAsol^|Nvf5hY zAZQxQIPn-&+xYe}2KH5^fVdE}uISmSrEjfMOXkDY(=96sBxqDS+pmh;9o+wd8<8ui zDan3ZtXIw`1lW7|ppwCJhwya6omJq$o6*R9nC9w2&y?l3PB(@ZJyEyeZ+7*R&0fzol$|ZaWioSc&igsh~>fo*Hs5n)LSJvCM02N}Uj0v-9C4U8^M!sK)K4I10DOkga_h2^5^x#~HiUl>}`!-UJke zgN0sB-aLvjz>1hG53Z&5*>K;2FUjK~7hZI`i1ucqScy+-eW{d=2B{e0lp!A(s!XHG zcoaX=fu1C2c6Wn?RsdNFR^(y7d8+x`?X8aQhzp%Lx_6)CNy@JiMPirsvJ%XSz-OdF zZ3!kyYJtBH+QooOQQ^X8`YeN=DNVBDLp;QCrK#2sj;MPIKJdqX-Fm*8<`zt{%sky% za4Dn3p{{>u7~qq%+uvYo_YYCXV;LUGXz=WHIOS1I0P)PBs@fNhEM%Kof|;E1fUGS&UY8s8HE)N4&Pm+_b9ZeD9zv%S9dwiLr1%uYb%z>5u1pt(omHc( z4bQY*B~ll6HDxQa4Vz)54twbte}JDz?kIqxePGdd12g3t;{jQ*@9^ECXIXW&cMic@ z#0B)ApQL-4m2R4Hr-{Vo)yW##$Les#dJM_tC22C1PXA8uc5cUgSIRq?BuW%fm3^{s zZy8V|&EKT-zzx)nyqt3Z$k=}wr;FB}R=LT&J=^E4m5|6@9CtMyQ?b6H=XO(FSVjDZ zYx)Sar04@_CbH3R>pVdYXIl&qDk`_98FAz^3=J5HO4leT7h&?W1GR_Q86sk3Q(0_x$cw|9SaTU+_5mTz0%x6n~!&-cm}{*A|WOT z(|@}<5g}Ex=IuzAd7#IMCdCGilf zRNmcl%z@*pFqi(@P}MKrGm$}uv9|z~U*O`A{jO57BJ(7Fk2TwvyO8=g(>R1bAr22o z898A%t+>ukSNAXse2;Pt9**%w!1dfy6`CUk&Nswd1IS=AfIeggyoS=M^^;zs#JRl1?> z7$!yMaYTTMZKJEY-&*`=C@85;r{uoi;yI`XQOd1PQ%hdhlPj?q2VoEQ`D`Q@JPWvd zkj||7XSK}gh|Q?n^v0cgvpZsZsa{HGr*R>*&mXtZ<7@G&|87~IX8b7vDQ0T#tx$tl zYA|!1WQ!`A-t;`jy`1VM=yD8TBS6Z>stHQ(yQCxKcIg{sC%?L7R+Q?jJvzaK9wd@~ zSetX^nh3_Q@6n(doRe1%r(m^Z0V#HnK>@{Edw0k=T_){)pjpw4zIq0xz8 z<)eCzojp9|D-d?px>JJW4yAht zsRwE;u_UCwnx}AMs@)2$4d*A9kn2x@^-$KJ;BRnU;)9P3UB~bdHUs7Xj}sh;Ne0e} zvq}8)JA$&=Y0z!9x_6Cj@da0hiJ=!?cJV-Hakn$!2+2X4ZZV_u!Cy3#)REb}lcU;; zp_TFGDVrjsowxj>uO2#zkH7Koi%3iPUE9aOc0<~ld6-)+TMds~D)O>2%d3tG%((2} zC3Hcmb4lH{f4`^iR~aEQ%WB)?SADB_M+Ugn;vR>jigs0>P+^Xq$~_xs_fD;9ZwR62y&Un3DV%&7 zGhXoeXlTB~zJK8D(sk(hMsujlwNx?caT$^%D+vimdMDZKOnEro$}i^r4oQGQ&}?4K zfp#fvxbUY-pNbGHU1yV7*@4>b9TtE=ZHF>!21VnFK!`BkO}x>yBcLMXI|D- zyQLxNNoqwHDR>p6OKwP2v+!@?UVJd>8>;4!}-ztv^YQH+ldKFZ9#Fu!plF9q}_Pf{m#aH=232 zZRn06zO)cU;jGZ@+@IY8Gw?k02@dz(r3E@~XiTqVRF5LbXq#d*A2IE0VguicY0hdHFnR6+`oCY!^y~b-1q%} zJ9HLK|2Om$6T`oOKmR9sN>fHwSwiSv^pvv1|CCy1>OpY|+`k62&YjzN6*9#?XaR>r_5;1W++`Q)v zZc*hU9ATa^ph85MQ<1oWf(K%&z}88Y_qT7gr`ob)ce;B?*TZB-xBYgf6>*+>_~sFS5((-NWVLoo{q?$KAh@Cn*aup88o zQxFiy$;kicRUgV+N_XYZ!%fDsh| zFCzzp06IXav7?0a?rQ(Szcet%r{$UzR{}4K4IuCdboK#$_4kDXhd=}Qq1wc|nc%k{ zq%(s+iEt7UK-jhqBANxfh5|mXJcBUo`t!*T(f^GE;V^{n@QnZuv59IJ3j9fl3#6>X z3?OKa`+WuvEHa>=9)%Bf?XgxkYl5-KP)T^19B*q&4}u2VS|tY>6C&Vna!vDS)=CRe zMArXeHwGB<$F)K7hpm8EwHZ~;Afem{|`Sy+#oI@Bm@2=F2q9sC!`K3 z{j+GF4`yGgr8fL`H#srXsh<__F}$nao)17bMi@9um;<4A}ZWzIq<+ zBw`G}Cl{wI?C)2agX7o`Pe2-e_IH2(yos5foGN>m1~EeIt{>PR7DEDH85LX_l5Rel zpNX=fphuv0s4xg%(4ZlHetL0bAUE)r-JcnDSAttU=g-hu(tbe5P8b&ry6e2}nzaLX z$krcg2>9FFzQ;KB^M1e0AJcXcaTt&xZ~vbeub-p)pTakjq@U!oAD#GhV6_!Jm+KwB zpAk5Rzz&Zef!(qXfJiN19b#KdgdbRzz^`o`oiv_L{|#R)mO6w@PI5vVha@zBNT>i| z--|sAmR9u1Z(1B^=XaUR9goC`;NQVS`mXU9uSckX4?zCk6CoRnWzg4HeY>r18z6nV zs&F4xajA?jEy_PtLa2Zu>w31if6~|y{&s6R0bBPDh#B(eFj`8U>1*{a!Jr@s9bg!(DIPH6n?(F zbaYd}UPf;hfCF7xUc_9wg#S(8tC1>s!E4ycC^YZ$FiNQzCQ^#M>}{Du=bw`%wzyt0 z?H4_MRCb>TMUbKE1h3;(|AFh8zFv>e#`QpxSfI;=sk3nj9IiC<|={fJ2)DeTz^ z)zx20<|*)4`w@@pMhFlak++&iliNV^X`S~AVChuo@$lN&V&RTf?9RV{*U_sj_7k1& zaGmK9xJh^mMS#dGgm6m9rqd~~JKIa-@rsH$VNuH97QE8VNlEPyl|1_s)ZDD~pcZri z6DGu(m~7C6oc6j2b?{btkwMOZs_r5@&;TE>H;F0G&oYuw8c{ksHremP0j#&bWHO-`N1Oa&?P z;j_x;OHbnTA<5I0RN?9Cx;nT^w;t}kx`4nYX!C{j#F7WlUBi`A1XYXY=tKX5?kMYG z0Q6zjd)GG3P0UL?kss?q_*@xDRaoR{J|FD4w!YVb!8jHKM|M5nBSS~Tdz$TK4H1kh zdWX8rzCIKSZ09Sl&zXdUseK>X7-G(=e-%!#ec>x;)M#c9NUEUEg?h)~!lAzJn(9Z`#Z28psB2rW7>qNC+P^5Z zxH&$T8}Z5Tgt@xr&9z?*5Znra*BJN5Hkc)!*q_wY0^ z{B<%}>7XonoXPA*aIxD@?e}+N8dy`tm9S|A%#GO%a*n+NMM=>Y$S<=>?6&Gq=4FT0 zyjl8)Yk92a)NC1L%l_0K*VSV?8lW2nQZm31>D${0`VGeI9m0WWLP3z0y z5uxiN1+n$DoAgk~uaw9^aYm&joKnOqT3jg^h2r8d!Cu|yk)(I2l*DeYGX(~?9Q*Qm zTEO5S)#{%R+<3Qq9qb^!J+MKcVGv6hBZn@c{=-WzH_89n9fl&L3;mEc$@9dZcRL5V zsGL}r!k@JPR_%E~4ux%shk?QPB5X&cy$S^tN{t(KtvhPl&@F1l^KhF}?ofa1ouB_z zH$CHcGtfmYw@ymBRc(mqvt6=n4$t7*M^>C*!e$9=8!p6&RZgM*!dm}@3^|Ag{b3dA z*S(guJRi#&Ns^9X@qJ9X*hRK)fF7F25ly?jiWVk z2N6i-{A9dol3N@aXbD@B{wI{O@N!v?N*wQr{6M0gwRMrY)d)a@Zy*LacH&SBbAQ%t zPLGLe-R8MsK)h@O_fcZ%cxRtZ4Mmxo9c&7hbf^u2MD6!d*p;3)i>|}w<2A5`e0FcZ zG|$3^++}xI#)(#x->)e4g^6<6_C@gJ9p;;hWr<5`UJvFt;{*lIxCWTTXnP)pWqnNH zs9evJ$A0Pe4>}*ieiTTv--Yo8gqMXrs+YZ3l~u_srn${|99@<*%q7ZCuB7_GCH4XY z5?*Ki3{zB@c8gw$9OIn8GQ1EL2gt46t_UxVdep`w4`7R)?<=5I<`68mjyaR7#cf54 zpPgza(T^S*m)c)61C_1Yr|zWw#jeQk`ypPQ-De(uRGEl27#Q$A@Ef3st7ZeX&0Gcv z8ffE454r+LZ?b}c3#q$lVY@~_;LS#2N0yW+uH`B+pW4FPsX?!IqD+h@cIM9k&2RtY z!NMVBs>2S#Mc`pEt)9I?k3~nc&3YNIC$Zd8&-3*N(LFQWvo1L%m$DFAis)RzMhcDCbML zeR~!H`i*o!RwZGFKIiO3hv%`U(jl;q_q=}>Riw~@@{rg0*;L4ncGeg^)R1HinSm?I$hShmzr_L1tnc7*A-S=wY17#%^=Uu9JXc~ulb&o)m4Oq zm8%b};>=2NKLspy6(A-UbulmPJUu+rIo0^(1vKKC%GCWK!)7EQnU#FW)-P>R>CGD< z?TRgD0qRtxvFOU0-Gf}m^FYomMlef2s^%;+m2-##;ZxG}w*x;jzFAgXf&M(^`9eg| zh(ZU1Z$ume%GUNgy~f)xp&L0&Wj?a7S%7EMv^Um~+r(u7T&P$~->*x>;veDdUfo%Q zfE;y+T!?i$ui(B_oQAped0Qn{8}(F8Kp{_dY*i!Fvy$-#%GKi*qTr8@2c;_*FZRpf z)arryWK&Kot^+}?EXdqLQ4@%DM+I6eC2-#2Sr3&F5_^b@y8Pu}rEIwW+AAGp_{#7u*gqQix`VFPli&GJ3wDC5!ZmOkR zNcj#YZmWqKIadmubuRCcDb*`9rc!!4rGnSLV#xK!74jBy(I-v_J!6XmDs(_a>ovP_ z@9oR^jl$vJaRWt!8Io-TFWw8^3DUajxx|j<7?eK#FR7YSVHzhKV{JPVWmURD2mOr`Hg3GBd_+XP)8l6SKw zbY%Iw=QCQ6?zF5>S5xENwB!`B`)Tu);U6VM<5b8cEHUqI-nyaLPNs$-s2HNdsO@po z;NZ*BrDmFqYbg3BVCUM1g66z+fSg8AcztWW-LL;?x2}CsDuvJFre)!~0DzLL{<+4)Ui{W+S?6HhN92+;a77?Vp*nXkm{0{Z7UNIX6RNmZ1mM)BfsY z2_dxZK}^?Fcx9J&*wdL_RWs)7R?6*>-FkheoQXLHNa^Lc65L8|>?B_ommTp@n0yU& z;AttzNZB5^CVY`sQRn(@;av0EZrfv`{!&H#BdmNFjN#or3mjgkXF4!MC#paJat5{M zfGfF>;m}})$R@l|w=}C`(5W%Htddj4v3f!e9ugRBfmW4iqvVK&N_=>8QdpDnw1_{7 zsS2j

-XaF;uGt%ORz~#e%EYF&1gD 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
+A detailed documentation of the Json Preprocessor's package can be found here: `JsonPreprocessor.pdf `_
 
 Feedback
 --------
diff --git a/config/CExtendedSetup.py b/additions/CExtendedSetup.py
similarity index 54%
rename from config/CExtendedSetup.py
rename to additions/CExtendedSetup.py
index 1c1a7867..00d770da 100644
--- a/config/CExtendedSetup.py
+++ b/additions/CExtendedSetup.py
@@ -18,23 +18,18 @@
 #
 # CExtendedSetup.py
 #
-# CM-CI1/ECA3-Queckenstedt
+# XC-CT/ECA3-Queckenstedt
 #
 # Contains all functions to support the extended setup process.
 #
 # --------------------------------------------------------------------------------------------------------------
 #
-# 21.02.2022 / XC-CT/ECA3-Queckenstedt
-# Added add_htmldoc_to_wheel() to support wheel based distribution
-# 
-# 30.09.2021 / XC-CI1/ECA3-Queckenstedt
-# Added wrapper for error messages
-# 
-# Initial version 08/2021
+# 10.05.2022
 #
 # --------------------------------------------------------------------------------------------------------------
 
 import os, sys, platform, shlex, subprocess, shutil
+import pypandoc
 import colorama as col
 
 col.init(autoreset=True)
@@ -70,11 +65,11 @@ def __del__(self):
 
     # --------------------------------------------------------------------------------------------------------------
 
-    def gen_doc(self):
-        """Executes sphinx-makeall.py
+    def genpackagedoc(self):
+        """Executes genpackagedoc.py
         """
-        sPython = self.__oRepositoryConfig.Get('sPython')
-        sDocumentationBuilder = self.__oRepositoryConfig.Get('sDocumentationBuilder')
+        sPython = self.__oRepositoryConfig.Get('PYTHON')
+        sDocumentationBuilder = self.__oRepositoryConfig.Get('DOCUMENTATIONBUILDER')
         listCmdLineParts = []
         listCmdLineParts.append(f"\"{sPython}\"")
         listCmdLineParts.append(f"\"{sDocumentationBuilder}\"")
@@ -96,16 +91,58 @@ def gen_doc(self):
             return ERROR
         print()
         return nReturn
-    # eof def gen_doc():
+    # eof def genpackagedoc():
+
+    # --------------------------------------------------------------------------------------------------------------
+
+    def convert_repo_readme(self):
+        """Converts the main repository README from 'rst' to 'md' format.
+        """
+
+        sReadMe_rst = self.__oRepositoryConfig.Get("README_RST")
+        if sReadMe_rst is None:
+            print()
+            printerror(f"'sReadMe_rst' is None")
+            print()
+            return ERROR
+
+        sReadMe_md = self.__oRepositoryConfig.Get("README_MD")
+        if sReadMe_md is None:
+            print()
+            printerror(f"'sReadMe_md' is None")
+            print()
+            return ERROR
+
+        if os.path.isfile(sReadMe_rst) is False:
+            print()
+            printerror(f"Missing readme file '{sReadMe_rst}'")
+            print()
+            return ERROR
+
+        sFileContent = pypandoc.convert_file(sReadMe_rst, 'md')
+        hFile_md = open(sReadMe_md, "w", encoding="utf-8")
+        listFileContent = sFileContent.splitlines()
+        for sLine in listFileContent:
+            hFile_md.write(sLine + "\n")
+        hFile_md.close()
+
+        print(f"File '{sReadMe_rst}'")
+        print("converted to")
+        print(f"'{sReadMe_md}'")
+        print()
+
+        return SUCCESS
+
+    # eof def convert_repo_readme(self):
 
     # --------------------------------------------------------------------------------------------------------------
 
     def delete_previous_build(self):
         """Deletes folder containing previous builds of setup.py within the repository
         """
-        sSetupBuildFolder = self.__oRepositoryConfig.Get('sSetupBuildFolder')
-        sSetupDistFolder  = self.__oRepositoryConfig.Get('sSetupDistFolder')
-        sEggInfoFolder    = self.__oRepositoryConfig.Get('sEggInfoFolder')
+        sSetupBuildFolder = self.__oRepositoryConfig.Get('SETUPBUILDFOLDER')
+        sSetupDistFolder  = self.__oRepositoryConfig.Get('SETUPDISTFOLDER')
+        sEggInfoFolder    = self.__oRepositoryConfig.Get('EGGINFOFOLDER')
         if os.path.isdir(sSetupBuildFolder) is True:
             print(f"* Deleting '{sSetupBuildFolder}'")
             try:
@@ -141,7 +178,7 @@ def delete_previous_build(self):
     def delete_previous_installation(self):
         """Deletes previous package installation folder within the Python installation
         """
-        sInstalledPackageFolder = self.__oRepositoryConfig.Get('sInstalledPackageFolder')
+        sInstalledPackageFolder = self.__oRepositoryConfig.Get('INSTALLEDPACKAGEFOLDER')
         if os.path.isdir(sInstalledPackageFolder) is True:
             print(f"* Deleting '{sInstalledPackageFolder}'")
             try:
@@ -151,102 +188,11 @@ def delete_previous_installation(self):
                 printexception(str(ex))
                 print()
                 return ERROR
-        sInstalledPackageDocFolder = self.__oRepositoryConfig.Get('sInstalledPackageDocFolder')
-        if os.path.isdir(sInstalledPackageDocFolder) is True:
-            print(f"* Deleting '{sInstalledPackageDocFolder}'")
-            try:
-                shutil.rmtree(sInstalledPackageDocFolder)
-            except Exception as ex:
-                print()
-                printexception(str(ex))
-                print()
-                return ERROR
         print()
         return SUCCESS
 
     # eof def delete_previous_installation():
 
-    # --------------------------------------------------------------------------------------------------------------
-
-    def add_htmldoc_to_installation(self):
-        """Adds the package documentation in HTML format to the Python onstallation
-        """
-        sHTMLOutputFolder          = self.__oRepositoryConfig.Get('sHTMLOutputFolder')
-        sInstalledPackageDocFolder = self.__oRepositoryConfig.Get('sInstalledPackageDocFolder')
-        if os.path.isdir(sHTMLOutputFolder) is False:
-            print()
-            printerror(f"Error: Missing html output folder '{sHTMLOutputFolder}'")
-            print()
-            return ERROR
-        shutil.copytree(sHTMLOutputFolder, sInstalledPackageDocFolder)
-        if os.path.isdir(sInstalledPackageDocFolder) is False:
-            print()
-            printerror(f"Error: html documentation not copied to package installation folder '{sInstalledPackageDocFolder}'")
-            print()
-            return ERROR
-        print(COLBY + f"Folder '{sHTMLOutputFolder}'")
-        print(COLBY + "copied to")
-        print(COLBY + f"'{sInstalledPackageDocFolder}'")
-        print()
-        return SUCCESS
-    # eof def add_htmldoc_to_installation():
-
-    # --------------------------------------------------------------------------------------------------------------
-
-    def add_htmldoc_to_wheel(self):
-        """Adds the package documentation in HTML format to the wheel folder inside build
-        """
-        sHTMLOutputFolder = self.__oRepositoryConfig.Get('sHTMLOutputFolder')
-        sSetupBuildFolder = self.__oRepositoryConfig.Get('sSetupBuildFolder')
-        sPackageName      = self.__oRepositoryConfig.Get('sPackageName')
-        if os.path.isdir(sHTMLOutputFolder) is False:
-            print()
-            printerror(f"Error: Missing html output folder '{sHTMLOutputFolder}'")
-            print()
-            return ERROR
-
-        # The desired destination path for the documentation is:
-        # \bdist.win-amd64\wheel\\doc
-        # with  is already available by 'sSetupBuildFolder' in CConfig.
-        # I am not convinced that it's a good idea to have hard coded parts like 'bdist.win-amd64' within a path here.
-        # Therefore we search recursively the file system for a subfolder with name 'wheel/'. And that's it!
-        sTargetFolder     = f"wheel/{sPackageName}"
-        sWheelDocDestPath = None
-        bBreak            = False
-        for sRootFolder, listFolders, listFiles in os.walk(sSetupBuildFolder):
-            for sFolder in listFolders:
-                sPath = os.path.join(sRootFolder, sFolder)
-                sPathMod = sPath.replace("\\", "/")
-                if sPathMod.endswith(sTargetFolder):
-                    sWheelDocDestPath = f"{sPathMod}/doc"
-                    bBreak = True
-                    break # for sFolder in listFolders:
-                # eof if sPathMod.endswith(sTargetFolder):
-            # eof for sFolder in listFolders:
-            if bBreak is True:
-                break # walk
-        # eof for sRootFolder, listFolders, listFiles in os.walk(sSetupBuildFolder):
-
-        if sWheelDocDestPath is None:
-            print()
-            printerror(f"Error: Not able to find '{sTargetFolder}' inside {sSetupBuildFolder}")
-            print()
-            return ERROR
-
-        shutil.copytree(sHTMLOutputFolder, sWheelDocDestPath)
-        if os.path.isdir(sWheelDocDestPath) is False:
-            print()
-            printerror(f"Error: html documentation not copied to local wheel folder '{sWheelDocDestPath}'")
-            print()
-            return ERROR
-
-        print(COLBY + f"Folder '{sHTMLOutputFolder}'")
-        print(COLBY + "copied to")
-        print(COLBY + f"'{sWheelDocDestPath}'")
-        print()
-        return SUCCESS
-    # eof def add_htmldoc_to_wheel():
-
 # eof class CExtendedSetup():
 
 # --------------------------------------------------------------------------------------------------------------
diff --git a/additions/PythonExtensionsCollection/File/CFile.py b/additions/PythonExtensionsCollection/File/CFile.py
new file mode 100644
index 00000000..320424c6
--- /dev/null
+++ b/additions/PythonExtensionsCollection/File/CFile.py
@@ -0,0 +1,1072 @@
+# **************************************************************************************************************
+#
+#  Copyright 2020-2022 Robert Bosch GmbH
+#
+#  Licensed under the Apache License, Version 2.0 (the "License");
+#  you may not use this file except in compliance with the License.
+#  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+#  Unless required by applicable law or agreed to in writing, software
+#  distributed under the License is distributed on an "AS IS" BASIS,
+#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#  See the License for the specific language governing permissions and
+#  limitations under the License.
+#
+# **************************************************************************************************************
+#
+# CFile.py
+#
+# XC-CT/ECA3-Queckenstedt
+#
+# 27.06.2022
+#
+# **************************************************************************************************************
+
+# -- import standard Python modules
+import os, shutil, platform
+
+# -- import Bosch Python modules
+from PythonExtensionsCollection.String.CString import CString
+
+# **************************************************************************************************************
+
+class enFileStatiType:
+   """
+The class ``enFileStatiType`` defines the sollowing file states:
+
+* ``closed``
+* ``openedforwriting``
+* ``openedforappending``
+* ``openedforreading``
+   """
+   closed             = "closed"
+   openedforwriting   = "openedforwriting"
+   openedforappending = "openedforappending"
+   openedforreading   = "openedforreading"
+
+# --------------------------------------------------------------------------------------------------------------
+
+class CFile(object):
+   """
+The class ``CFile`` provides a small set of file functions with extended parametrization (like switches
+defining if a file is allowed to be overwritten or not).
+
+Most of the functions at least returns ``bSuccess`` and ``sResult``.
+
+* ``bSuccess`` is ``True`` in case of no error occurred.
+* ``bSuccess`` is ``False`` in case of an error occurred.
+* ``bSuccess`` is ``None`` in case of a very fatal error occurred (exceptions).
+
+* ``sResult`` contains details about what happens during computation.
+
+Every instance of CFile handles one single file only and forces exclusive access to this file.
+
+It is not possible to create an instance of this class with a file that is already in use by another instance.
+
+It is also not possible to use ``CopyTo`` or ``MoveTo`` to overwrite files that are already in use by another instance.
+This makes the file handling more save against access violations.
+   """
+   # --------------------------------------------------------------------------------------------------------------
+   # TM***
+
+   def __init__(self, sFile=None):
+      self.__sFile            = CString.NormalizePath(sFile)
+      self.__oFileHandle      = None
+      self.__oFileStatus      = enFileStatiType.closed
+      self.__sLastDestination = None
+
+      try:
+         CFile.__listFilesInUse
+      except:
+         CFile.__listFilesInUse = []
+
+      # exclusive access is required (checked by self.__bIsFreeToUse; relevant for destination in CopyTo and MoveTo)
+      if self.__sFile in CFile.__listFilesInUse:
+         raise Exception(f"The file '{self.__sFile}' is already in use by another CFile instance.")
+      else:
+         CFile.__listFilesInUse.append(self.__sFile)
+
+   # eof def __init__(self, sFile=None):
+
+   def __del__(self):
+      self.Close()
+      if self.__sFile in CFile.__listFilesInUse:
+         CFile.__listFilesInUse.remove(self.__sFile)
+
+   # eof def __del__(self):
+
+   # --------------------------------------------------------------------------------------------------------------
+   # TM***
+
+   def __bIsFreeToUse(self, sFile=None):
+      """
+Checks if the file ``sFile`` is free to use, that means: not used by another instance of ``CFile``.
+      """
+
+      bIsFreeToUse = False # init
+      if sFile is None:
+         bIsFreeToUse = False # error handling
+      else:
+         if sFile in CFile.__listFilesInUse:
+            bIsFreeToUse = False
+         else:
+            bIsFreeToUse = True
+      return bIsFreeToUse
+
+   # eof def __bIsFreeToUse(self, sFile=None):
+
+   # --------------------------------------------------------------------------------------------------------------
+   # TM***
+
+   def __OpenForWriting(self):
+      """
+Opens a text file for writing.
+
+Returns ``bSuccess`` and ``sResult`` (feedback).
+      """
+
+      sMethod = "CFile.__OpenForWriting"
+
+      if self.__sFile is None:
+         bSuccess = False
+         sResult  = "self.__sFile is None; please provide path and name of a file when creating a CFile object."
+         sResult  = CString.FormatResult(sMethod, bSuccess, sResult)
+         return bSuccess, sResult
+
+      bSuccess, sResult = self.Close()
+      if bSuccess is not True:
+         sResult = CString.FormatResult(sMethod, bSuccess, sResult)
+         return bSuccess, sResult
+
+      try:
+         self.__oFileHandle = open(self.__sFile, "w", encoding="utf-8")
+         self.__oFileStatus = enFileStatiType.openedforwriting
+         bSuccess = True
+         sResult  = f"File '{self.__sFile}' is open for writing"
+      except Exception as reason:
+         self.Close()
+         bSuccess = None
+         sResult  = f"Not possible to open file '{self.__sFile}' for writing.\nReason: " + str(reason)
+         sResult  = CString.FormatResult(sMethod, bSuccess, sResult)
+
+      return bSuccess, sResult
+
+   # eof def __OpenForWriting(self):
+
+   # --------------------------------------------------------------------------------------------------------------
+   # TM***
+
+   def __OpenForAppending(self):
+      """
+Opens a text file for appending.
+
+Returns ``bSuccess`` and ``sResult`` (feedback).
+      """
+
+      sMethod = "CFile.__OpenForAppending"
+
+      if self.__sFile is None:
+         bSuccess = False
+         sResult  = "self.__sFile is None; please provide path and name of a file when creating a CFile object."
+         sResult  = CString.FormatResult(sMethod, bSuccess, sResult)
+         return bSuccess, sResult
+
+      bSuccess, sResult = self.Close()
+      if bSuccess is not True:
+         sResult = CString.FormatResult(sMethod, bSuccess, sResult)
+         return bSuccess, sResult
+
+      try:
+         self.__oFileHandle = open(self.__sFile, "a", encoding="utf-8")
+         self.__oFileStatus = enFileStatiType.openedforappending
+         bSuccess = True
+         sResult  = f"File '{self.__sFile}' is open for appending"
+      except Exception as reason:
+         self.Close()
+         bSuccess = None
+         sResult  = f"Not possible to open file '{self.__sFile}' for appending.\nReason: " + str(reason)
+         sResult  = CString.FormatResult(sMethod, bSuccess, sResult)
+
+      return bSuccess, sResult
+
+   # eof def __OpenForAppending(self):
+
+   # --------------------------------------------------------------------------------------------------------------
+   # TM***
+
+   def __OpenForReading(self):
+      """
+Opens a text file for reading.
+
+Returns ``bSuccess`` and ``sResult`` (feedback).
+      """
+
+      sMethod = "CFile.__OpenForReading"
+
+      if self.__sFile is None:
+         bSuccess = False
+         sResult  = "self.__sFile is None; please provide path and name of a file when creating a CFile object."
+         sResult  = CString.FormatResult(sMethod, bSuccess, sResult)
+         return bSuccess, sResult
+
+      bSuccess, sResult = self.Close()
+      if bSuccess is not True:
+         sResult = CString.FormatResult(sMethod, bSuccess, sResult)
+         return bSuccess, sResult
+
+      try:
+         self.__oFileHandle = open(self.__sFile, "r", encoding="utf-8")
+         self.__oFileStatus = enFileStatiType.openedforreading
+         bSuccess = True
+         sResult  = f"File '{self.__sFile}' is open for reading"
+      except Exception as reason:
+         self.Close()
+         bSuccess = None
+         sResult  = f"Not possible to open file '{self.__sFile}' for reading.\nReason: " + str(reason)
+         sResult  = CString.FormatResult(sMethod, bSuccess, sResult)
+
+      return bSuccess, sResult
+
+   # eof def __OpenForReading(self):
+
+   # --------------------------------------------------------------------------------------------------------------
+   # TM***
+
+   def Close(self):
+      """
+Closes the opened file.
+
+**Arguments:**
+
+(no args)
+
+**Returns:**
+
+* ``bSuccess``
+
+  / *Type*: bool /
+
+  Indicates if the computation of the method was successful or not.
+
+* ``sResult``
+
+  / *Type*: str /
+
+  The result of the computation of the method.
+      """
+      sMethod = "CFile.Close"
+
+      if self.__oFileHandle is not None:
+         try:
+            self.__oFileHandle.flush()
+            self.__oFileHandle.close()
+            bSuccess = True
+            sResult  = f"File '{self.__sFile}' closed"
+         except Exception as reason:
+            bSuccess = None
+            sResult  = f"Exception while closing file '{self.__sFile}'.\nReason: " + str(reason)
+            sResult = CString.FormatResult(sMethod, bSuccess, sResult)
+         self.__oFileHandle = None
+      else:
+         bSuccess = True
+         sResult  = "Done"
+
+      self.__oFileStatus = enFileStatiType.closed
+
+      return bSuccess, sResult
+
+   # eof def Close(self):
+
+   # --------------------------------------------------------------------------------------------------------------
+   # TM***
+
+   def Delete(self, bConfirmDelete=True):
+      """
+Deletes the current file.
+
+**Arguments:**
+
+* ``bConfirmDelete``
+
+  / *Condition*: optional / *Type*: bool / *Default*: True /
+
+  Defines if it will be handled as error if the file does not exist.
+
+  If ``True``: If the file does not exist, the method indicates an error (``bSuccess = False``).
+
+  If ``False``: It doesn't matter if the file exists or not.
+
+**Returns:**
+
+* ``bSuccess``
+
+  / *Type*: bool /
+
+  Indicates if the computation of the method was successful or not.
+
+* ``sResult``
+
+  / *Type*: str /
+
+  The result of the computation of the method.
+      """
+
+      sMethod = "CFile.Delete"
+
+      if self.__sFile is None:
+         bSuccess = False
+         sResult  = "self.__sFile is None; please provide path and name of a file when creating a CFile object."
+         sResult  = CString.FormatResult(sMethod, bSuccess, sResult)
+         return bSuccess, sResult
+
+      if os.path.isfile(self.__sFile) is False:
+         if bConfirmDelete is True:
+            bSuccess = False
+         else:
+            bSuccess = True
+         sResult = f"Nothing to delete. The file '{self.__sFile}' does not exist."
+         return bSuccess, sResult
+
+      bSuccess, sResult = self.Close()
+      if bSuccess is not True:
+         sResult = CString.FormatResult(sMethod, bSuccess, sResult)
+         return bSuccess, sResult
+
+      try:
+         os.remove(self.__sFile)
+         bSuccess = True
+         sResult  = f"File '{self.__sFile}' deleted."
+      except Exception as reason:
+         bSuccess = None
+         sResult  = f"Exception while deleting file '{self.__sFile}'.\nReason: " + str(reason)
+         sResult  = CString.FormatResult(sMethod, bSuccess, sResult)
+
+      return bSuccess, sResult
+
+   # eof def Delete(self, bConfirmDelete=True):
+
+   # --------------------------------------------------------------------------------------------------------------
+   # TM***
+
+   def __PrepareOutput(self, Content=""):
+      """
+Helper for ``Write`` and ``Append`` (consideration of composite data types).
+
+Returns a list of strings (that will be written to file).
+      """
+
+      listOut = []
+
+      if type(Content) == list:
+         for element in Content:
+            listOut.append(str(element))
+      elif type(Content) == tuple:
+         for element in Content:
+            listOut.append(str(element))
+      elif type(Content) == set:
+         for element in Content:
+            listOut.append(str(element))
+      elif type(Content) == dict:
+         listKeys = Content.keys()
+         nRJust = 0
+         for key in listKeys:
+            sKey = str(key) # because also numerical values can be keys
+            if len(sKey) > nRJust:
+               nRJust = len(sKey)
+         for key in listKeys:
+            sKey = str(key) # because also numerical values can be keys
+            sOut = sKey.rjust(nRJust, ' ') + " : " + str(Content[key])
+            listOut.append(sOut)
+      elif str(type(Content)).lower().find('dotdict') >=0:
+         try:
+            listKeys = Content.keys()
+            nRJust = 0
+            for key in listKeys:
+               sKey = str(key) # because also numerical values can be keys
+               if len(sKey) > nRJust:
+                  nRJust = len(sKey)
+            for key in listKeys:
+               sKey = str(key) # because also numerical values can be keys
+               sOut = sKey.rjust(nRJust, ' ') + " : " + str(Content[key])
+               listOut.append(sOut)
+         except Exception as reason:
+            listOut.append(str(Content))
+      else:
+         listOut.append(str(Content))
+
+      return listOut
+
+   # eof def __PrepareOutput(self, Content=""):
+
+   # --------------------------------------------------------------------------------------------------------------
+   # TM***
+
+   def Write(self, Content="", nVSpaceAfter=0, sPrefix=None, bToScreen=False):
+      """
+Writes the content of a variable ``Content`` to file.
+
+**Arguments:**
+
+* ``Content``
+
+  / *Condition*: required / *Type*: one of: str, list, tuple, set, dict, dotdict /
+
+  If ``Content`` is not a string, the ``Write`` method resolves the data structure before writing the content to file.
+
+* ``nVSpaceAfter``
+
+  / *Condition*: optional / *Type*: int / *Default*: 0 /
+
+  Adds vertical space ``nVSpaceAfter`` (= number of blank lines) after ``Content``.
+
+* ``sPrefix``
+
+  / *Condition*: optional / *Type*: str / *Default*: None /
+
+  `sPrefix`` is added to every line of output (in case of ``sPrefix`` is not ``None``).
+
+* ``bToScreen``
+
+  / *Condition*: optional / *Type*: bool / *Default*: False /
+
+  Prints ``Content`` also to screen (in case of ``bToScreen`` is ``True``).
+
+**Returns:**
+
+* ``bSuccess``
+
+  / *Type*: bool /
+
+  Indicates if the computation of the method was successful or not.
+
+* ``sResult``
+
+  / *Type*: str /
+
+  The result of the computation of the method.
+      """
+
+      sMethod = "CFile.Write"
+
+      if self.__oFileStatus != enFileStatiType.openedforwriting:
+         bSuccess, sResult = self.__OpenForWriting()
+         if bSuccess is not True:
+            sResult = CString.FormatResult(sMethod, bSuccess, sResult)
+            return bSuccess, sResult
+
+      listOut = self.__PrepareOutput(Content)
+
+      for nCnt in range(nVSpaceAfter):
+         listOut.append("")
+
+      if bToScreen is True:
+         for sOut in listOut:
+            if ( (sPrefix is not None) and (sOut != '') ):
+               sOut = f"{sPrefix}{sOut}"
+            print(sOut)
+
+      bSuccess = True
+      sResult  = "Done"
+      try:
+         for sOut in listOut:
+            if ( (sPrefix is not None) and (sOut != '') ):
+               sOut = f"{sPrefix}{sOut}"
+            self.__oFileHandle.write(sOut + "\n")
+      except Exception as reason:
+         bSuccess = None
+         sResult  = f"Not possible to write to file '{self.__sFile}'.\nReason: " + str(reason)
+         sResult  = CString.FormatResult(sMethod, bSuccess, sResult)
+
+      return bSuccess, sResult
+
+   # eof def Write(self, Content="", nVSpaceAfter=0, sPrefix=None, bToScreen=False):
+
+   # --------------------------------------------------------------------------------------------------------------
+   # TM***
+
+   def Append(self, Content="", nVSpaceAfter=0, sPrefix=None, bToScreen=False):
+      """
+Appends the content of a variable ``Content`` to file.
+
+**Arguments:**
+
+* ``Content``
+
+  / *Condition*: required / *Type*: one of: str, list, tuple, set, dict, dotdict /
+
+  If ``Content`` is not a string, the ``Write`` method resolves the data structure before writing the content to file.
+
+* ``nVSpaceAfter``
+
+  / *Condition*: optional / *Type*: int / *Default*: 0 /
+
+  Adds vertical space ``nVSpaceAfter`` (= number of blank lines) after ``Content``.
+
+* ``sPrefix``
+
+  / *Condition*: optional / *Type*: str / *Default*: None /
+
+  `sPrefix`` is added to every line of output (in case of ``sPrefix`` is not ``None``).
+
+* ``bToScreen``
+
+  / *Condition*: optional / *Type*: bool / *Default*: False /
+
+  Prints ``Content`` also to screen (in case of ``bToScreen`` is ``True``).
+
+**Returns:**
+
+* ``bSuccess``
+
+  / *Type*: bool /
+
+  Indicates if the computation of the method was successful or not.
+
+* ``sResult``
+
+  / *Type*: str /
+
+  The result of the computation of the method.
+      """
+      sMethod = "CFile.Append"
+
+      if self.__oFileStatus != enFileStatiType.openedforappending:
+         bSuccess, sResult = self.__OpenForAppending()
+         if bSuccess is not True:
+            sResult = CString.FormatResult(sMethod, bSuccess, sResult)
+            return bSuccess, sResult
+
+      listOut = self.__PrepareOutput(Content)
+
+      for nCnt in range(nVSpaceAfter):
+         listOut.append("")
+
+      if bToScreen is True:
+         for sOut in listOut:
+            if ( (sPrefix is not None) and (sOut != '') ):
+               sOut = f"{sPrefix}{sOut}"
+            print(sOut)
+
+      bSuccess = True
+      sResult  = "Done"
+      try:
+         for sOut in listOut:
+            if ( (sPrefix is not None) and (sOut != '') ):
+               sOut = f"{sPrefix}{sOut}"
+            self.__oFileHandle.write(sOut + "\n")
+      except Exception as reason:
+         bSuccess = None
+         sResult  = f"Not possible to append to file '{self.__sFile}'.\nReason: " + str(reason)
+         sResult  = CString.FormatResult(sMethod, bSuccess, sResult)
+
+      return bSuccess, sResult
+
+   # eof def Append(self, Content="", nVSpaceAfter=0, sPrefix=None, bToScreen=False):
+
+   # --------------------------------------------------------------------------------------------------------------
+   # TM***
+
+   def ReadLines(self,
+                 bCaseSensitive  = True,
+                 bSkipBlankLines = False,
+                 sComment        = None,
+                 sStartsWith     = None,
+                 sEndsWith       = None,
+                 sStartsNotWith  = None,
+                 sEndsNotWith    = None,
+                 sContains       = None,
+                 sContainsNot    = None,
+                 sInclRegEx      = None,
+                 sExclRegEx      = None,
+                 bLStrip         = False,
+                 bRStrip         = True,
+                 bToScreen       = False):
+      """
+Reads content from current file. Returns an array of lines together with ``bSuccess`` and ``sResult`` (feedback).
+
+The method takes care of opening and closing the file. The complete file content is read by ``ReadLines`` in one step,
+but with the help of further parameters it is possible to reduce the content by including and excluding lines.
+
+The logical join of all filter is: ``AND``.
+
+**Arguments:**
+
+* ``bCaseSensitive``
+
+  / *Condition*: optional / *Type*: bool / *Default*: True /
+
+  * If ``True``, the standard filters work case sensitive, otherwise not.
+  * This has no effect to the regular expression based filters ``sInclRegEx`` and ``sExclRegEx``.
+
+* ``bSkipBlankLines``
+
+  / *Condition*: optional / *Type*: bool / *Default*: False /
+
+  If ``True``, blank lines will be skipped, otherwise not.
+
+* ``sComment``
+
+  / *Condition*: optional / *Type*: str / *Default*: None /
+
+  In case of a line starts with the string ``sComment``, this line is skipped.
+
+* ``sStartsWith``
+
+  / *Condition*: optional / *Type*: str / *Default*: None /
+
+  * The criterion of this filter is fulfilled in case of the input string starts with the string ``sStartsWith``
+  * More than one string can be provided (semicolon separated; logical join: ``OR``)
+
+* ``sEndsWith``
+
+  / *Condition*: optional / *Type*: str / *Default*: None /
+
+  * The criterion of this filter is fulfilled in case of the input string ends with the string ``sEndsWith``
+  * More than one string can be provided (semicolon separated; logical join: ``OR``)
+
+* ``sStartsNotWith``
+
+  / *Condition*: optional / *Type*: str / *Default*: None /
+
+  * The criterion of this filter is fulfilled in case of the input string starts not with the string ``sStartsNotWith``
+  * More than one string can be provided (semicolon separated; logical join: ``AND``)
+
+* ``sEndsNotWith``
+
+  / *Condition*: optional / *Type*: str / *Default*: None /
+
+  * The criterion of this filter is fulfilled in case of the input string ends not with the string ``sEndsNotWith``
+  * More than one string can be provided (semicolon separated; logical join: ``AND``)
+
+* ``sContains``
+
+  / *Condition*: optional / *Type*: str / *Default*: None /
+
+  * The criterion of this filter is fulfilled in case of the input string contains the string ``sContains`` at any position
+  * More than one string can be provided (semicolon separated; logical join: ``OR``)
+
+* ``sContainsNot``
+
+  / *Condition*: optional / *Type*: str / *Default*: None /
+
+  * The criterion of this filter is fulfilled in case of the input string does **not** contain the string ``sContainsNot`` at any position
+  * More than one string can be provided (semicolon separated; logical join: ``AND``)
+
+* ``sInclRegEx``
+
+  / *Condition*: optional / *Type*: str / *Default*: None /
+
+  * *Include* filter based on regular expressions (consider the syntax of regular expressions!)
+  * The criterion of this filter is fulfilled in case of the regular expression ``sInclRegEx`` matches the input string
+  * Leading and trailing blanks within the input string are considered
+  * ``bCaseSensitive`` has no effect
+  * A semicolon separated list of several regular expressions is **not** supported
+
+* ``sExclRegEx``
+
+  / *Condition*: optional / *Type*: str / *Default*: None /
+
+  * *Exclude* filter based on regular expressions (consider the syntax of regular expressions!)
+  * The criterion of this filter is fulfilled in case of the regular expression ``sExclRegEx`` does **not** match the input string
+  * Leading and trailing blanks within the input string are considered
+  * ``bCaseSensitive`` has no effect
+  * A semicolon separated list of several regular expressions is **not** supported
+
+* ``bLStrip``
+
+  / *Condition*: optional / *Type*: bool / *Default*: False /
+
+  If ``True``, leading spaces are removed from line before the filters are used, otherwise not.
+
+* ``bRStrip``
+
+  / *Condition*: optional / *Type*: bool / *Default*: True /
+
+  If ``True``, trailing spaces are removed from line before the filters are used, otherwise not.
+
+* ``bToScreen``
+
+  / *Condition*: optional / *Type*: bool / *Default*: False /
+
+  If ``True``, the content read from file is also printed to screen, otherwise not.
+      """
+
+      sMethod = "CFile.ReadLines"
+
+      listLines = []
+
+      if os.path.isfile(self.__sFile) is False:
+         bSuccess = False
+         sResult  = f"The file '{self.__sFile}' does not exist."
+         sResult  = CString.FormatResult(sMethod, bSuccess, sResult)
+         return listLines, bSuccess, sResult
+
+      # !!! independend from:  self.__oFileStatus != enFileStatiType.openedforreading: !!!
+      # Reason: Repeated call of ReadLines needs to have the read pointer at the beginning of the file.
+      bSuccess, sResult = self.__OpenForReading()
+      if bSuccess is not True:
+         sResult = CString.FormatResult(sMethod, bSuccess, sResult)
+         return listLines, bSuccess, sResult
+
+      try:
+         sFileContent = self.__oFileHandle.read()
+      except Exception as reason:
+         bSuccess = None
+         sResult  = f"Not possible to read from file '{self.__sFile}'.\nReason: " + str(reason)
+         return listLines, bSuccess, sResult
+
+      bSuccess, sResult = self.Close()
+      if bSuccess is not True:
+         sResult = CString.FormatResult(sMethod, bSuccess, sResult)
+         return listLines, bSuccess, sResult
+
+      listFileContent = sFileContent.splitlines() # in opposite to readlines this is OS independend!
+
+      for sLine in listFileContent:
+         if CString.StringFilter(sString           = sLine,
+                                 bCaseSensitive    = bCaseSensitive,
+                                 bSkipBlankStrings = bSkipBlankLines,
+                                 sComment          = sComment,
+                                 sStartsWith       = sStartsWith,
+                                 sEndsWith         = sEndsWith,
+                                 sStartsNotWith    = sStartsNotWith,
+                                 sEndsNotWith      = sEndsNotWith,
+                                 sContains         = sContains,
+                                 sContainsNot      = sContainsNot,
+                                 sInclRegEx        = sInclRegEx,
+                                 sExclRegEx        = sExclRegEx,
+                                 bDebug            = False) is True:
+            if bLStrip is True:
+               sLine = sLine.lstrip(" \t\r\n")
+
+            if bRStrip is True:
+               sLine = sLine.rstrip(" \t\r\n")
+
+            if bToScreen is True:
+               print(sLine)
+
+            listLines.append(sLine)
+
+      # eof for sLine in listFileContent:
+
+      del listFileContent
+
+      nNrOfLines = len(listLines)
+
+      bSuccess = True
+      sResult  = f"Read {nNrOfLines} lines from '{self.__sFile}'."
+      return listLines, bSuccess, sResult
+
+   # eof def ReadLines(...)
+
+   # --------------------------------------------------------------------------------------------------------------
+   # TM***
+
+   def GetFileInfo(self):
+      """
+Returns the following informations about the file (encapsulated within a dictionary ``dFileInfo``):
+
+**Returns:**
+
+* Key ``sFile``
+
+  / *Type*: str /
+
+  Path and name of current file
+
+
+* Key ``bFileIsExisting``
+
+  / *Type*: bool /
+
+  ``True`` if file is existing, otherwise ``False``
+
+* Key ``sFileName``
+
+  / *Type*: str /
+
+  The name of the current file (incl. extension)
+
+* Key ``sFileExtension``
+
+  / *Type*: str /
+
+  The extension of the current file
+
+* Key ``sFileNameOnly``
+
+  / *Type*: str /
+
+  The pure name of the current file (without extension)
+
+* Key ``sFilePath``
+
+  / *Type*: str /
+
+  The the path to current file
+
+* Key ``bFilePathIsExisting``
+
+  / *Type*: bool /
+
+  ``True`` if file path is existing, otherwise ``False``
+      """
+
+      sMethod = "CFile.GetFileInfo"
+
+      dFileInfo = {}
+      dFileInfo['sFile']               = None
+      dFileInfo['bFileIsExisting']     = None
+      dFileInfo['sFileName']           = None
+      dFileInfo['sFileExtension']      = None
+      dFileInfo['sFileNameOnly']       = None
+      dFileInfo['sFilePath']           = None
+      dFileInfo['bFilePathIsExisting'] = None
+
+      if self.__sFile is None:
+         return None
+
+      dFileInfo['sFile']           = self.__sFile
+      dFileInfo['bFileIsExisting'] = os.path.isfile(self.__sFile)
+
+      sFileName = os.path.basename(self.__sFile)
+      dFileInfo['sFileName'] = sFileName
+
+      sFileExtension = ""
+      sFileNameOnly  = ""
+      listParts = sFileName.split('.')
+      if len(listParts) > 1:
+         sFileExtension = listParts[len(listParts)-1]
+         sFileNameOnly  = sFileName[:-len(sFileExtension)-1]
+      else:
+         sFileExtension = ""
+         sFileNameOnly  = sFileName
+
+      dFileInfo['sFileExtension']      = sFileExtension
+      dFileInfo['sFileNameOnly']       = sFileNameOnly
+      dFileInfo['sFilePath']           = os.path.dirname(self.__sFile)
+      dFileInfo['bFilePathIsExisting'] = os.path.isdir(dFileInfo['sFilePath'])
+
+      return dFileInfo
+
+   # eof def GetFileInfo(self):
+
+   # --------------------------------------------------------------------------------------------------------------
+   # TM***
+
+   def CopyTo(self, sDestination=None, bOverwrite=False):
+      """
+Copies the current file to ``sDestination``, that can either be a path without file name or a path together with a file name.
+
+In case of the destination file already exists and ``bOverwrite`` is ``True``, than the destination file will be overwritten.
+
+In case of the destination file already exists and ``bOverwrite`` is ``False`` (default), than the destination file will not be overwritten
+and ``CopyTo`` returns ``bSuccess = False``.
+
+**Arguments:**
+
+* ``sDestination``
+
+  / *Condition*: required / *Type*: string /
+
+  The path to destination file (either incl. file name or without file name)
+
+* ``bOverwrite``
+
+  / *Condition*: optional / *Type*: bool / *Default*: False /
+
+  * In case of the destination file already exists and ``bOverwrite`` is ``True``, than the destination file will be overwritten.
+  * In case of the destination file already exists and ``bOverwrite`` is ``False`` (default), than the destination file will not be overwritten
+    and ``CopyTo`` returns ``bSuccess = False``.
+
+**Returns:**
+
+* ``bSuccess``
+
+  / *Type*: bool /
+
+  Indicates if the computation of the method was successful or not.
+
+* ``sResult``
+
+  / *Type*: str /
+
+  The result of the computation of the method.
+      """
+      sMethod = "CFile.CopyTo"
+
+      if self.__sFile is None:
+         bSuccess = False
+         sResult  = "self.__sFile is None; please provide path and name of a file when creating a CFile object."
+         sResult  = CString.FormatResult(sMethod, bSuccess, sResult)
+         return bSuccess, sResult
+
+      if os.path.isfile(self.__sFile) is False:
+         bSuccess = False
+         sResult  = f"The file '{self.__sFile}' does not exist, therefore nothing can be copied."
+         sResult  = CString.FormatResult(sMethod, bSuccess, sResult)
+         return bSuccess, sResult
+
+      if sDestination is None:
+         bSuccess = False
+         sResult  = "sDestination is None; please provide path and name of destination file. Or at least the destination path. In this case the file name will be taken over."
+         sResult  = CString.FormatResult(sMethod, bSuccess, sResult)
+         return bSuccess, sResult
+
+      sDestination = CString.NormalizePath(sDestination)
+
+      bDeleteDestFile = False
+
+      sDestFile = sDestination # default
+
+      if os.path.isdir(sDestination) is True:
+         sFileName = os.path.basename(self.__sFile)
+         sDestFile = f"{sDestination}/{sFileName}" # file name in destination is required for: shutil.copyfile
+
+      if self.__bIsFreeToUse(sDestFile) is False:
+         bSuccess = False
+         sResult  = f"The destination file '{sDestFile}' is already in use by another CFile instance."
+         sResult  = CString.FormatResult(sMethod, bSuccess, sResult)
+         return bSuccess, sResult
+
+      self.__sLastDestination = sDestFile
+
+      if os.path.isfile(sDestFile) is True:
+         # destination file already exists
+         if sDestFile == self.__sFile:
+            bSuccess = False
+            sResult  = f"Source file and destination file are the same: '{self.__sFile}'. Therefore nothing to do."
+            sResult  = CString.FormatResult(sMethod, bSuccess, sResult)
+            return bSuccess, sResult
+
+         if bOverwrite is True:
+            bDeleteDestFile = True
+         else:
+            bSuccess = False
+            sResult  = f"Not allowed to overwrite existing destination file '{sDestFile}'. Therefore nothing to do."
+            sResult  = CString.FormatResult(sMethod, bSuccess, sResult)
+            return bSuccess, sResult
+      else:
+         # destination file not yet exists
+         # (we assume here that the destination shall be a file because we already have figured out that the destination is not a folder)
+         # => we have to check if the path to the file exists
+         sDestFilePath = os.path.dirname(sDestFile)
+         if os.path.isdir(sDestFilePath) is True:
+            bDeleteDestFile = False
+         else:
+            bSuccess = False
+            sResult  = f"The destination path '{sDestFilePath}' does not exist. The file '{self.__sFile}' cannot be copied."
+            sResult  = CString.FormatResult(sMethod, bSuccess, sResult)
+            return bSuccess, sResult
+
+      # eof else - if os.path.isfile(sDestFile) is True:
+
+      # analysis done, now the action
+
+      bSuccess, sResult = self.Close()
+      if bSuccess is not True:
+         sResult = CString.FormatResult(sMethod, bSuccess, sResult)
+         return bSuccess, sResult
+
+      if bDeleteDestFile is True:
+         # To delete the destination file explicitely before executing any copy-function is an addon here in this library.
+         # The purpose is to be independend from the way the used copy function is handling existing destination files.
+         # But this makes only sense under Windows and not under Linux, because Windows is much more strict with access
+         # violations than Linux. Therefore we avoid such kind of additional steps in case of the platform is not Windows.
+         if platform.system() == "Windows":
+            try:
+               os.remove(sDestFile)
+               bSuccess = True
+               sResult  = f"File '{sDestFile}' deleted."
+            except Exception as reason:
+               bSuccess = None
+               sResult  = f"Exception while deleting destination file '{sDestFile}'.\nReason: " + str(reason)
+               sResult  = CString.FormatResult(sMethod, bSuccess, sResult)
+               return bSuccess, sResult
+      # eof if bDeleteDestFile is True:
+
+      try:
+         shutil.copyfile(self.__sFile, sDestFile)
+         bSuccess = True
+         sResult  = f"File '{self.__sFile}' copied to '{sDestFile}'."
+      except Exception as reason:
+         bSuccess = None
+         sResult  = f"Exception while copying file '{self.__sFile}' to '{sDestFile}'.\nReason: " + str(reason)
+         sResult  = CString.FormatResult(sMethod, bSuccess, sResult)
+
+      return bSuccess, sResult
+
+   # eof def CopyTo(self, sDestination=None, bOverwrite=False):
+
+   # --------------------------------------------------------------------------------------------------------------
+   # TM***
+
+   def MoveTo(self, sDestination=None, bOverwrite=False):
+      """
+Moves the current file to ``sDestination``, that can either be a path without file name or a path together with a file name.
+
+**Arguments:**
+
+* ``sDestination``
+
+  / *Condition*: required / *Type*: string /
+
+  The path to destination file (either incl. file name or without file name)
+
+* ``bOverwrite``
+
+  / *Condition*: optional / *Type*: bool / *Default*: False /
+
+  * In case of the destination file already exists and ``bOverwrite`` is ``True``, than the destination file will be overwritten.
+  * In case of the destination file already exists and ``bOverwrite`` is ``False`` (default), than the destination file will not be overwritten
+    and ``MoveTo`` returns ``bSuccess = False``.
+
+**Returns:**
+
+* ``bSuccess``
+
+  / *Type*: bool /
+
+  Indicates if the computation was successful or not
+
+* ``sResult``
+
+  / *Type*: str /
+
+  Contains details about what happens during computation
+      """
+      sMethod = "CFile.MoveTo"
+
+      bSuccess, sResult = self.CopyTo(sDestination, bOverwrite)
+      if bSuccess is not True:
+         sResult = CString.FormatResult(sMethod, bSuccess, sResult)
+         return bSuccess, sResult
+
+      if os.path.isfile(self.__sLastDestination) is False:
+         # the copied file should exist at new location
+         bSuccess = None
+         sResult  = f"Someting went wrong while copying the file '{self.__sFile}' to '{self.__sLastDestination}'. Aborting."
+         sResult  = CString.FormatResult(sMethod, bSuccess, sResult)
+         return bSuccess, sResult
+      else:
+         bSuccess, sResult = self.Delete()
+         if bSuccess is not True:
+            sResult = CString.FormatResult(sMethod, bSuccess, sResult)
+            return bSuccess, sResult
+
+      bSuccess = True
+      sResult  = f"File moved from '{self.__sFile}' to '{self.__sLastDestination}'"
+      return bSuccess, sResult
+
+   # eof def MoveTo(self, sDestination=None, bOverwrite=False):
+
+   # --------------------------------------------------------------------------------------------------------------
+   # TM***
+
+# eof class CFile(object):
+
+# **************************************************************************************************************
+
+
diff --git a/additions/PythonExtensionsCollection/File/__init__.py b/additions/PythonExtensionsCollection/File/__init__.py
new file mode 100644
index 00000000..958420af
--- /dev/null
+++ b/additions/PythonExtensionsCollection/File/__init__.py
@@ -0,0 +1,13 @@
+#  Copyright 2020-2022 Robert Bosch GmbH
+#
+#  Licensed under the Apache License, Version 2.0 (the "License");
+#  you may not use this file except in compliance with the License.
+#  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+#  Unless required by applicable law or agreed to in writing, software
+#  distributed under the License is distributed on an "AS IS" BASIS,
+#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#  See the License for the specific language governing permissions and
+#  limitations under the License.
diff --git a/additions/PythonExtensionsCollection/Folder/CFolder.py b/additions/PythonExtensionsCollection/Folder/CFolder.py
new file mode 100644
index 00000000..451c32f9
--- /dev/null
+++ b/additions/PythonExtensionsCollection/Folder/CFolder.py
@@ -0,0 +1,460 @@
+# **************************************************************************************************************
+#
+#  Copyright 2020-2022 Robert Bosch GmbH
+#
+#  Licensed under the Apache License, Version 2.0 (the "License");
+#  you may not use this file except in compliance with the License.
+#  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+#  Unless required by applicable law or agreed to in writing, software
+#  distributed under the License is distributed on an "AS IS" BASIS,
+#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#  See the License for the specific language governing permissions and
+#  limitations under the License.
+#
+# **************************************************************************************************************
+#
+# CFolder.py
+#
+# XC-CT/ECA3-Queckenstedt
+#
+# 28.06.2022
+#
+# **************************************************************************************************************
+
+# -- import standard Python modules
+import os, shutil, time, stat
+
+# -- import Bosch Python modules
+from PythonExtensionsCollection.String.CString import CString
+
+# --------------------------------------------------------------------------------------------------------------
+
+# little helper to delete folders containing files that are write protected
+def rm_dir_readonly(func, path, excinfo):
+   """
+Calls ``os.chmod`` in case of ``shutil.rmtree`` (within ``Delete()``) throws an exception (making files writable).
+   """
+   # print(f"{excinfo}") # debug only
+   os.chmod(path, stat.S_IWRITE)
+   func(path)
+
+# --------------------------------------------------------------------------------------------------------------
+
+class CFolder(object):
+   """
+The class ``CFolder`` provides a small set of folder functions with extended parametrization (like switches
+defining if a folder is allowed to be overwritten or not).
+
+Most of the functions at least returns ``bSuccess`` and ``sResult``.
+
+* ``bSuccess`` is ``True`` in case of no error occurred.
+* ``bSuccess`` is ``False`` in case of an error occurred.
+* ``bSuccess`` is ``None`` in case of a very fatal error occurred (exceptions).
+
+* ``sResult`` contains details about what happens during computation.
+
+Every instance of CFolder handles one single folder only and forces exclusive access to this folder.
+
+It is not possible to create an instance of this class with a folder that is already in use by another instance.
+
+The constructor of ``CFolder`` requires the input parameter ``sFolder``, that is the path and the name of a folder
+that is handled by the current class instance.
+   """
+   # --------------------------------------------------------------------------------------------------------------
+   # TM***
+
+   def __init__(self, sFolder=None):
+      self.__sFolder = CString.NormalizePath(sFolder)
+
+      try:
+         CFolder.__listFoldersInUse
+      except:
+         CFolder.__listFoldersInUse = []
+
+      # exclusive access is required (checked by self.__bIsFreeToUse; relevant for destination in CopyTo and MoveTo)
+      if self.__sFolder in CFolder.__listFoldersInUse:
+         raise Exception(f"The folder '{self.__sFolder}' is already in use by another CFolder instance.")
+      else:
+         CFolder.__listFoldersInUse.append(self.__sFolder)
+
+   # eof def __init__(self, sFolder=None):
+
+   def __del__(self):
+      if self.__sFolder in CFolder.__listFoldersInUse:
+         CFolder.__listFoldersInUse.remove(self.__sFolder)
+
+   # eof def __del__(self):
+
+   # --------------------------------------------------------------------------------------------------------------
+   # TM***
+
+   def __bIsFreeToUse(self, sFolder=None):
+      """
+Checks if the folder ``sFolder`` is free to use, that means: not used by another instance of ``CFolder``.
+      """
+
+      bIsFreeToUse = False # init
+      if sFolder is None:
+         bIsFreeToUse = False # error handling
+      else:
+         if sFolder in CFolder.__listFoldersInUse:
+            bIsFreeToUse = False
+         else:
+            bIsFreeToUse = True
+      return bIsFreeToUse
+
+   # eof def __bIsFreeToUse(self, sFolder=None):
+
+   # --------------------------------------------------------------------------------------------------------------
+   # TM***
+
+   def __Delete(self, sFolder=None, bConfirmDelete=True):
+      """
+Deletes the folder ``sFolder``.
+
+**Arguments:**
+
+* ``sFolder``
+
+  / *Condition*: required / *Type*: str /
+
+  Path and name of folder to be deleted
+
+* ``bConfirmDelete``
+
+  / *Condition*: optional / *Type*: bool / *Default*: True /
+
+  Defines if it will be handled as error if the folder does not exist.
+
+  If ``True``: If the folder does not exist, the method indicates an error (``bSuccess = False``).
+
+  If ``False``: It doesn't matter if the folder exists or not.
+
+**Returns:**
+
+* ``bSuccess``
+
+  / *Type*: bool /
+
+  Indicates if the computation of the method was successful or not.
+
+* ``sResult``
+
+  / *Type*: str /
+
+  The result of the computation of the method.
+      """
+      sMethod = "CFolder.__Delete"
+
+      if sFolder is None:
+         bSuccess = False
+         sResult  = "sFolder is None; please provide path and name of a folder when creating a CFolder object."
+         sResult  = CString.FormatResult(sMethod, bSuccess, sResult)
+         return bSuccess, sResult
+
+      if os.path.isdir(sFolder) is False:
+         sResult = f"Nothing to delete. The folder '{sFolder}' does not exist."
+         if bConfirmDelete is True:
+            bSuccess = False
+            sResult  = CString.FormatResult(sMethod, bSuccess, sResult)
+         else:
+            bSuccess = True
+         return bSuccess, sResult
+      # eof if os.path.isdir(sFolder) is False:
+
+      bSuccess    = False
+      sResult     = "UNKNOWN"
+      nCntTries   = 1
+      nTriesMax   = 4
+      nDelay      = 2 # sec
+      listResults = []
+      while nCntTries <= nTriesMax:
+         try:
+            print(f"Trying to delete '{sFolder}'")
+            print()
+            shutil.rmtree(sFolder, ignore_errors=False, onerror=rm_dir_readonly)
+         except Exception as reason:
+            listResults.append(str(reason))
+         if os.path.isdir(sFolder) is True:
+            sResult = f"({nCntTries}/{nTriesMax}) Problem with deleting the folder '{sFolder}'. Folder still present."
+            listResults.append(sResult)
+            time.sleep(nDelay) # delay before next try
+         else:
+            bSuccess = True
+            sResult  = f"Folder '{sFolder}' deleted."
+            break
+         nCntTries = nCntTries + 1
+      # eof while nCntTries <= nTriesMax:
+
+      if bSuccess is False:
+         sResult = "\n".join(listResults)
+         sResult = CString.FormatResult(sMethod, bSuccess, sResult)
+
+      return bSuccess, sResult
+
+   # eof def __Delete(self, sFolder=None, bConfirmDelete=True):
+
+   # --------------------------------------------------------------------------------------------------------------
+   # TM***
+
+   def Delete(self, bConfirmDelete=True):
+      """
+Deletes the folder the current class instance contains.
+
+**Arguments:**
+
+* ``bConfirmDelete``
+
+  / *Condition*: optional / *Type*: bool / *Default*: True /
+
+  Defines if it will be handled as error if the folder does not exist.
+
+  If ``True``: If the folder does not exist, the method indicates an error (``bSuccess = False``).
+
+  If ``False``: It doesn't matter if the folder exists or not.
+
+**Returns:**
+
+* ``bSuccess``
+
+  / *Type*: bool /
+
+  Indicates if the computation of the method was successful or not.
+
+* ``sResult``
+
+  / *Type*: str /
+
+  The result of the computation of the method.
+      """
+      sMethod = "CFolder.Delete"
+      bSuccess, sResult = self.__Delete(self.__sFolder, bConfirmDelete)
+      if bSuccess is not True:
+         sResult = CString.FormatResult(sMethod, bSuccess, sResult)
+      return bSuccess, sResult
+
+   # eof def Delete(self, bConfirmDelete=True):
+
+   # --------------------------------------------------------------------------------------------------------------
+   # TM***
+
+   def Create(self, bOverwrite=False, bRecursive=False):
+      """
+Creates the current folder ``sFolder``.
+
+**Arguments:**
+
+* ``bOverwrite``
+
+  / *Condition*: optional / *Type*: bool / *Default*: False /
+
+  * In case of the folder already exists and ``bOverwrite`` is ``True``, than the folder will be deleted before creation.
+  * In case of the folder already exists and ``bOverwrite`` is ``False`` (default), than the folder will not be touched.
+
+  In both cases the return value ``bSuccess`` is ``True`` - because the folder exists.
+
+* ``bRecursive``
+
+  / *Condition*: optional / *Type*: bool / *Default*: False /
+
+  * In case of ``bRecursive`` is ``True``, than the complete destination path will be created (including all intermediate subfolders).
+  * In case of ``bRecursive`` is ``False``, than it is expected that the parent folder of the new folder already exists.
+
+**Returns:**
+
+* ``bSuccess``
+
+  / *Type*: bool /
+
+  Indicates if the computation of the method was successful or not.
+
+* ``sResult``
+
+  / *Type*: str /
+
+  The result of the computation of the method.
+      """
+      sMethod = "CFolder.Create"
+
+      if self.__sFolder is None:
+         bSuccess = False
+         sResult  = "self.__sFolder is None; please provide path and name of a folder when creating a CFolder object."
+         sResult  = CString.FormatResult(sMethod, bSuccess, sResult)
+         return bSuccess, sResult
+
+      bCreateFolder = False
+      if os.path.isdir(self.__sFolder) is True:
+         if bOverwrite is True:
+            bSuccess, sResult = self.Delete()
+            if bSuccess is not True:
+               sResult = CString.FormatResult(sMethod, bSuccess, sResult)
+               return bSuccess, sResult
+            bCreateFolder = True
+         else:
+            bSuccess = True
+            sResult  = f"Folder '{self.__sFolder}' already exists."
+            return bSuccess, sResult
+      else:
+         bCreateFolder = True
+
+      bSuccess = False
+      sResult  = "UNKNOWN"
+
+      if bCreateFolder is True:
+         nCntTries   = 1
+         nTriesMax   = 3
+         nDelay      = 2 # sec
+         listResults = []
+         while nCntTries <= nTriesMax:
+            try:
+               print(f"Trying to create '{self.__sFolder}'")
+               print()
+               if bRecursive is True:
+                  os.makedirs(self.__sFolder)
+               else:
+                  os.mkdir(self.__sFolder)
+            except Exception as reason:
+               listResults.append(str(reason))
+            if os.path.isdir(self.__sFolder) is False:
+               sResult = f"({nCntTries}/{nTriesMax}) Problem with creating the folder '{self.__sFolder}'."
+               listResults.append(sResult)
+               time.sleep(nDelay) # delay before next try
+            else:
+               bSuccess = True
+               sResult  = f"Folder '{self.__sFolder}' created."
+               break
+            nCntTries = nCntTries + 1
+         # eof while nCntTries <= nTriesMax:
+
+         if bSuccess is False:
+            sResult = "\n".join(listResults)
+            sResult = CString.FormatResult(sMethod, bSuccess, sResult)
+
+      # eof if bCreateFolder is True:
+
+      return bSuccess, sResult
+
+   # eof def Create(self, bOverwrite=False, bRecursive=False):
+
+   # --------------------------------------------------------------------------------------------------------------
+   # TM***
+
+   def CopyTo(self, sDestination=None, bOverwrite=False):
+      """
+Copies the current folder to ``sDestination``, that has to be a path to a folder **within** the source folder will be copied to
+(with it's original name),
+
+In case of the destination folder already exists and ``bOverwrite`` is ``True``, than the destination folder will be overwritten.
+
+In case of the destination folder already exists and ``bOverwrite`` is ``False`` (default), than the destination folder will not be overwritten
+and ``CopyTo`` returns ``bSuccess = False``.
+
+**Arguments:**
+
+* ``sDestination``
+
+  / *Condition*: required / *Type*: string /
+
+  The path to destination folder
+
+* ``bOverwrite``
+
+  / *Condition*: optional / *Type*: bool / *Default*: False /
+
+  * In case of the destination folder already exists and ``bOverwrite`` is ``True``, than the destination folder will be overwritten.
+  * In case of the destination folder already exists and ``bOverwrite`` is ``False`` (default), than the destination folder will not be overwritten
+    and ``CopyTo`` returns ``bSuccess = False``.
+
+**Returns:**
+
+* ``bSuccess``
+
+  / *Type*: bool /
+
+  Indicates if the computation of the method was successful or not.
+
+* ``sResult``
+
+  / *Type*: str /
+
+  The result of the computation of the method.
+      """
+      sMethod = "CFolder.CopyTo"
+
+      if self.__sFolder is None:
+         bSuccess = False
+         sResult  = "self.__sFolder is None; please provide path and name of a folder when creating a CFolder object."
+         sResult  = CString.FormatResult(sMethod, bSuccess, sResult)
+         return bSuccess, sResult
+
+      if os.path.isdir(self.__sFolder) is False:
+         bSuccess = False
+         sResult  = f"The folder '{self.__sFolder}' does not exist, therefore nothing can be copied."
+         sResult  = CString.FormatResult(sMethod, bSuccess, sResult)
+         return bSuccess, sResult
+
+      if sDestination is None:
+         bSuccess = False
+         sResult  = "sDestination is None; please provide a path to a destination folder."
+         sResult  = CString.FormatResult(sMethod, bSuccess, sResult)
+         return bSuccess, sResult
+
+      sDestination = CString.NormalizePath(sDestination)
+
+      if os.path.isdir(sDestination) is False:
+         # the folder to be copied will be created within the destination folder, therefore we expect that the destination folder already exists
+         bSuccess = False
+         sResult  = f"The destination folder '{sDestination}' does not exist."
+         sResult  = CString.FormatResult(sMethod, bSuccess, sResult)
+         return bSuccess, sResult
+
+      sSourceFolderName = os.path.basename(self.__sFolder)
+      sDestFolder = f"{sDestination}/{sSourceFolderName}"
+
+      if sDestFolder == self.__sFolder:
+         bSuccess = False
+         sResult  = f"Source folder and destination folder are the same: '{self.__sFolder}'. Therefore nothing to do."
+         sResult  = CString.FormatResult(sMethod, bSuccess, sResult)
+         return bSuccess, sResult
+
+      if self.__bIsFreeToUse(sDestFolder) is False:
+         bSuccess = False
+         sResult  = f"The destination folder '{sDestFolder}' is already in use by another CFolder instance."
+         sResult  = CString.FormatResult(sMethod, bSuccess, sResult)
+         return bSuccess, sResult
+
+      if os.path.isdir(sDestFolder) is True:
+         # destination folder already exists
+         if bOverwrite is True:
+            bSuccess, sResult = self.__Delete(sDestFolder)
+            if bSuccess is not True:
+               sResult = CString.FormatResult(sMethod, bSuccess, sResult)
+               return bSuccess, sResult
+         else:
+            bSuccess = False
+            sResult  = f"Not allowed to overwrite existing destination folder '{sDestFolder}'. Therefore nothing to do."
+            sResult  = CString.FormatResult(sMethod, bSuccess, sResult)
+            return bSuccess, sResult
+      # eof if os.path.isdir(sDestFolder) is True:
+
+      # analysis and preconditions done, now the action
+
+      try:
+         shutil.copytree(self.__sFolder, sDestFolder)
+         bSuccess = True
+         sResult  = "Folder copied from\n> '" + self.__sFolder + "'\nto\n> '" + sDestFolder + "'"
+      except Exception as reason:
+         bSuccess = None
+         sResult  = str(reason)
+         sResult  = CString.FormatResult(sMethod, bSuccess, sResult)
+
+      return bSuccess, sResult
+
+   # eof def CopyTo(self, sDestination=None, bOverwrite=False):
+
+# --------------------------------------------------------------------------------------------------------------
+
+
diff --git a/additions/PythonExtensionsCollection/Folder/__init__.py b/additions/PythonExtensionsCollection/Folder/__init__.py
new file mode 100644
index 00000000..958420af
--- /dev/null
+++ b/additions/PythonExtensionsCollection/Folder/__init__.py
@@ -0,0 +1,13 @@
+#  Copyright 2020-2022 Robert Bosch GmbH
+#
+#  Licensed under the Apache License, Version 2.0 (the "License");
+#  you may not use this file except in compliance with the License.
+#  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+#  Unless required by applicable law or agreed to in writing, software
+#  distributed under the License is distributed on an "AS IS" BASIS,
+#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#  See the License for the specific language governing permissions and
+#  limitations under the License.
diff --git a/additions/PythonExtensionsCollection/String/CString.py b/additions/PythonExtensionsCollection/String/CString.py
new file mode 100644
index 00000000..82aeb204
--- /dev/null
+++ b/additions/PythonExtensionsCollection/String/CString.py
@@ -0,0 +1,1165 @@
+# **************************************************************************************************************
+#
+#  Copyright 2020-2022 Robert Bosch GmbH
+#
+#  Licensed under the Apache License, Version 2.0 (the "License");
+#  you may not use this file except in compliance with the License.
+#  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+#  Unless required by applicable law or agreed to in writing, software
+#  distributed under the License is distributed on an "AS IS" BASIS,
+#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#  See the License for the specific language governing permissions and
+#  limitations under the License.
+#
+# **************************************************************************************************************
+#
+# CString.py
+#
+# XC-CT/ECA3-Queckenstedt
+#
+# 02.06.2022
+#
+# **************************************************************************************************************
+
+# -- import standard Python modules
+import os, ntpath, re
+
+# **************************************************************************************************************
+
+class CString(object):
+   """
+The class ``CString`` contains some string computation methods like e.g. normalizing a path.
+   """
+
+   # --------------------------------------------------------------------------------------------------------------
+   #TM***
+
+   def NormalizePath(sPath=None, bWin=False, sReferencePathAbs=None, bConsiderBlanks=False, bExpandEnvVars=True, bMask=True):
+      """
+Normalizes local paths, paths to local network resources and internet addresses
+
+**Arguments:**
+
+* ``sPath``
+
+  / *Condition*: required / *Type*: str /
+
+  The path to be normalized
+
+* ``bWin``
+
+  / *Condition*: optional / *Type*: bool / *Default*: False /
+
+  If ``True`` then returned path contains masked backslashes as separator, otherwise slashes
+
+* ``sReferencePathAbs``
+
+  / *Condition*: optional / *Type*: str / *Default*: None /
+
+  In case of ``sPath`` is relative and ``sReferencePathAbs`` (expected to be absolute) is given, then
+  the returned absolute path is a join of both input paths
+
+* ``bConsiderBlanks``
+
+  / *Condition*: optional / *Type*: bool / *Default*: False /
+
+  If ``True`` then the returned path is encapsulated in quotes - in case of the path contains blanks
+
+* ``bExpandEnvVars``
+
+  / *Condition*: optional / *Type*: bool / *Default*: True /
+
+   If ``True`` then in the returned path environment variables are resolved, otherwise not.
+
+* ``bMask``
+
+  / *Condition*: optional / *Type*: bool / *Default*: True (requires ``bWin=True``)/
+
+  * If ``bWin`` is ``True`` and ``bMask`` is ``True`` then the returned path contains masked backslashes as separator.
+  * If ``bWin`` is ``True`` and ``bMask`` is ``False`` then the returned path contains single backslashes only - this might be
+    required for applications, that are not able to handle masked backslashes.
+  * In case of ``bWin`` is ``False`` ``bMask`` has no effect.
+
+**Returns:**
+
+* ``sPath``
+
+  / *Type*: str /
+
+  The normalized path (is ``None`` in case of ``sPath`` is ``None``)
+      """
+
+      if sPath is not None:
+
+         # -- expand Windows environment variables
+         if bExpandEnvVars is True:
+            sPath = os.path.expandvars(sPath)
+
+         # - remove leading and trailing horizontal space
+         sPath = sPath.strip(" \t\r\n")
+
+         # - remove leading and trailing quotes
+         sPath = sPath.strip("\"'")
+
+         # - remove once more leading and trailing horizontal space
+         #   (after the removal of leading and trailing quotes further horizontal space might be there, that has to be removed;
+         #    but further levels of nesting are not considered)
+         sPath = sPath.strip(" \t")
+
+         if sPath == "":
+            return sPath
+
+         # - remove trailing slash or backslash (maybe at end of path to folder)
+         sPath = sPath.rstrip("/\\")
+
+         # --------------------------------------------------------------------------------------------------------------
+         # consider internet addresses and local network resources
+         # --------------------------------------------------------------------------------------------------------------
+         # -- local network resource / file server
+         #    (prepare for Windows explorer)
+         # either (default)
+         # //server.com/abc/xyz
+         # or (with bWin=True); bMask must be False because \\server.com\\abc\\xyz is not allowed
+         # \\server.com\abc\xyz
+         # (=> user is allowed to select bWin but not bMask)
+         #
+         # -- local network resource / file server
+         #    (prepare for web browser)
+         # after 'file://///' only single slashes allowed; bWin and bMask must be False
+         # file://///server.com/abc/xyz
+         # (=> user is NOT allowed to select bWin and bMask)
+         #
+         # -- internet address
+         # after server name only single slashes allowed; bWin and bMask must be False
+         # http://server.com/abc/xyz
+         # https://server.com/abc/xyz
+         # (=> user is NOT allowed to select bWin and bMask)
+         #
+         # - not allowed (=> this method must not return this format):
+         # http:\\server.com
+         # https:\\server.com
+         # --------------------------------------------------------------------------------------------------------------
+
+         sPathPrefix = None
+
+         # In case there is any prefix, we remove this prefix, we compute the remaining part of the path separately,
+         # we also modify this prefix manually, and at the end we put the new prefix back to the path.
+
+         if ( (sPath[:2] == "\\\\") or (sPath[:2] == "//") ):
+            sPath = sPath[2:]
+            if bWin is True:
+               sPathPrefix = "\\\\"
+            else:
+               sPathPrefix = "//"
+            bMask = False # !!! this overrules the input parameter value, because masked backslashes are not allowed in remaining path !!!
+         elif sPath[:10] == "file://///": # exactly this must be given; all other combinations of slashes and backslashes are not handled
+            sPath = sPath[10:]
+            sPathPrefix = "file://///"
+            bWin  = False # !!! this overrules the input parameter value, because only single slashes allowed in remaining path !!!
+            bMask = False # !!! this overrules the input parameter value, because only single slashes allowed in remaining path !!!
+         elif ( (sPath[:7] == "http://") or (sPath[:7] == "http:\\\\") ):
+            sPath = sPath[7:]
+            sPathPrefix = "http://"
+            bWin  = False # !!! this overrules the input parameter value, because only single slashes allowed in remaining path !!!
+            bMask = False # !!! this overrules the input parameter value, because only single slashes allowed in remaining path !!!
+         elif ( (sPath[:8] == "https://") or (sPath[:8] == "https:\\\\") ):
+            sPath = sPath[8:]
+            sPathPrefix = "https://"
+            bWin  = False # !!! this overrules the input parameter value, because only single slashes allowed in remaining path !!!
+            bMask = False # !!! this overrules the input parameter value, because only single slashes allowed in remaining path !!!
+         else:
+            # Internet addresses and local network resources handled, now checking for relative paths:
+            # In case of sPath is a relative path AND an absolute reference path is provided
+            # merge them to an absolute path; without reference path use standard function to
+            # convert relative path to absolute path
+            if ( (sPath[0] != "%") and (sPath[0] != "$") ):
+               # If sPath starts with '%' or with '$' it is assumed that the path starts with an environment variable (Windows or Linux).
+               # But in this case 'os.path.isabs(sPath)' will not detect this to be an absolute path and will call
+               # 'sPath = os.path.abspath(sPath)' (depending on sReferencePathAbs). This will accidently merge
+               # the root path together with the path starting with the environment variable and cause invalid results.
+               if os.path.isabs(sPath) is False:
+                  if sReferencePathAbs is not None:
+                     sPath = os.path.join(sReferencePathAbs, sPath)
+                  else:
+                     sPath = os.path.abspath(sPath)
+
+         # eof computation of sPathPrefix
+
+         # - normalize the path (collapse redundant separators and up-level references)
+         #   on Windows this converts slashes to backward slashes
+         # sPath = os.path.normpath(sPath) # under Linux this unfortunately keeps redundant separators (in opposite to Windows)
+         # -- alternative
+         sPath = ntpath.normpath(sPath)
+
+         # - exchange single backslashes by single slashes (= partly we have to repair the outcome of normpath)
+         if bWin is False:
+            sPath = sPath.replace("\\", "/")
+         else:
+            if bMask is True:
+               sPath = sPath.replace("\\", "\\\\")
+
+         # - restore the path prefix
+         if sPathPrefix is not None:
+            sPath = f"{sPathPrefix}{sPath}"
+
+         # - consider blanks (prepare path for usage in Windows command line)
+         if bConsiderBlanks is True:
+            if sPath.find(" ") >= 0:
+               sPath = f"\"{sPath}\""
+
+      # eof if sPath is not None:
+
+      return sPath
+
+   # eof NormalizePath(sPath=None, bWin=False, sReferencePathAbs=None, bConsiderBlanks=False, bExpandEnvVars=True, bMask=True)
+
+   # --------------------------------------------------------------------------------------------------------------
+   #TM***
+
+   def DetectParentPath(sStartPath=None, sFolderName=None, sFileName=None):
+      """
+Computes the path to any parent folder inside a given path. Optionally DetectParentPath is able
+to search for files inside the parent folder.
+
+**Arguments:**
+
+* ``sStartPath``
+
+  / *Condition*: required / *Type*: str /
+
+  The path in which to search for a parent folder
+
+* ``sFolderName``
+
+  / *Condition*: required / *Type*: str /
+
+  The name of the folder to search for within ``sStartPath``. It is possible to provide more than one folder name separated by semicolon
+
+* ``sFileName``
+
+  / *Condition*: optional / *Type*: str / *Default*: None /
+
+  The name of a file to search within the detected parent folder
+
+**Returns:**
+
+* ``sDestPath``
+
+  / *Type*: str /
+
+  Path and name of parent folder found inside ``sStartPath``, ``None`` in case of ``sFolderName`` is not found inside ``sStartPath``.
+  In case of more than one parent folder is found ``sDestPath`` contains the first result and ``listDestPaths`` contains all results.
+
+* ``listDestPaths``
+
+  / *Type*: list /
+
+  If ``sFolderName`` contains a single folder name this list contains only one element that is ``sDestPath``.
+  In case of ``FolderName`` contains a semicolon separated list of several folder names this list contains all found paths of the given folder names.
+  ``listDestPaths`` is ``None`` (and not an empty list!) in case of ``sFolderName`` is not found inside ``sStartPath``.
+
+* ``sDestFile``
+
+  / *Type*: str /
+
+  Path and name of ``sFileName``, in case of ``sFileName`` is given and found inside ``listDestPaths``.
+  In case of more than one file is found ``sDestFile`` contains the first result and ``listDestFiles`` contains all results.
+  ``sDestFile`` is ``None`` in case of ``sFileName`` is ``None`` and also in case of ``sFileName`` is not found inside ``listDestPaths``
+  (and therefore also in case of ``sFolderName`` is not found inside ``sStartPath``).
+
+* ``listDestFiles``
+
+  / *Type*: list /
+
+  Contains all positions of ``sFileName`` found inside ``listDestPaths``.
+
+  ``listDestFiles`` is ``None`` (and not an empty list!) in case of ``sFileName`` is ``None`` and also in case of ``sFileName``
+  is not found inside ``listDestPaths`` (and therefore also in case of ``sFolderName`` is not found inside ``sStartPath``).
+
+* ``sDestPathParent``
+
+  / *Type*: str /
+
+  The parent folder of ``sDestPath``, ``None`` in case of ``sFolderName`` is not found inside ``sStartPath`` (``sDestPath`` is ``None``).
+      """
+
+      sDestPath       = None
+      listDestPaths   = None
+      sDestFile       = None
+      listDestFiles   = None
+      sDestPathParent = None
+
+      if sStartPath is None:
+         return sDestPath, listDestPaths, sDestFile, listDestFiles, sDestPathParent
+
+      if sFolderName is None:
+         return sDestPath, listDestPaths, sDestFile, listDestFiles, sDestPathParent
+
+      sStartPath = sStartPath.strip()
+      if sStartPath == "":
+         return sDestPath, listDestPaths, sDestFile, listDestFiles, sDestPathParent
+
+      sFolderName = sFolderName.strip()
+      if sFolderName == "":
+         return sDestPath, listDestPaths, sDestFile, listDestFiles, sDestPathParent
+
+      listSplit = sFolderName.split(';')
+
+      listTopLevelFolders = []
+      for sFolder in listSplit:
+         # removing duplicates
+         sFolder = sFolder.strip()
+         if sFolder != "":
+            if sFolder not in listTopLevelFolders:
+               listTopLevelFolders.append(sFolder)
+      # eof for sFolder in listSplit:
+
+      nNrOfFolders = len(listTopLevelFolders)
+      sStartPath   = CString.NormalizePath(sStartPath)
+      listLevels   = sStartPath.split("/")
+
+      listDestPaths = []
+
+      while len(listLevels) > 0:
+         # -- merging paths with folder names and search for existing combinations
+         sPathParent = "/".join(listLevels)
+         for sTLFolder in listTopLevelFolders:
+            sSubPath = sPathParent + "/" + sTLFolder
+            if os.path.isdir(sSubPath) is True:
+               listDestPaths.append(sSubPath)
+         if len(listTopLevelFolders) == len(listDestPaths):
+            # all folders found
+            break
+         else:
+            listLevels.pop()
+      # eof while len(listLevels) > 0:
+
+      sDestPath       = None
+      sDestPathParent = None
+      if len(listDestPaths) > 0:
+         # -- returning sDestPath and sDestPathParent related to first entry in list; just to return anything else than None
+         sDestPath = listDestPaths[0]
+         sDestPathParent = CString.NormalizePath(os.path.dirname(sDestPath))
+
+      # -- optionally searching also for a single file
+      # Input: file name
+      # Output: full path of file and list of full paths of files (!!! limited to 'listDestPaths' !!!)
+
+      listDestFiles = []
+
+      if ( (sFileName is not None) and (len(listDestPaths) > 0) ):
+         for sDestPathToWalk in listDestPaths:
+            for sLocalRootPath, listFolderNames, listFileNames in os.walk(sDestPathToWalk):
+               for sFileNameTmp in listFileNames:
+                  if sFileNameTmp == sFileName:
+                     sFile = CString.NormalizePath(os.path.join(sLocalRootPath, sFileName))
+                     listDestFiles.append(sFile)
+            # eof for sLocalRootPath, listFolderNames, listFileNames in os.walk(sDestPathToWalk):
+         # eof for sDestPathToWalk in listDestPaths:
+      # eof if ( (sFileName is not None) and (len(listDestPaths) > 0) ):
+
+      if len(listDestFiles) > 0:
+         listDestFiles.sort()
+         sDestFile = listDestFiles[0] # just to return anything else than None
+
+      # -- preparing output (setting empty lists to None, to have unique criteria for results not available)
+      if listDestPaths is not None:
+         if len(listDestPaths) == 0:
+            listDestPaths = None
+      if listDestFiles is not None:
+         if len(listDestFiles) == 0:
+            listDestFiles = None
+
+      return sDestPath, listDestPaths, sDestFile, listDestFiles, sDestPathParent
+
+   # eof def DetectParentPath(sStartPath=None, sFolderName=None, sFileName=None):
+
+   # --------------------------------------------------------------------------------------------------------------
+   #TM***
+
+   def StringFilter(sString           = None,
+                    bCaseSensitive    = True,
+                    bSkipBlankStrings = True,
+                    sComment          = None,
+                    sStartsWith       = None,
+                    sEndsWith         = None,
+                    sStartsNotWith    = None,
+                    sEndsNotWith      = None,
+                    sContains         = None,
+                    sContainsNot      = None,
+                    sInclRegEx        = None,
+                    sExclRegEx        = None,
+                    bDebug            = False):
+      """
+During the computation of strings there might occur the need to get to know if this string fulfils certain criteria or not.
+Such a criterion can e.g. be that the string contains a certain substring. Also an inverse logic might be required:
+In this case the criterion is that the string does **not** contain this substring.
+
+It might also be required to combine several criteria to a final conclusion if in total the criterion for a string is fulfilled or not.
+For example: The string must start with the string *prefix* and must also contain either the string *substring1* or the string *substring2*
+but must also **not** end with the string *suffix*.
+
+This method provides a bunch of predefined filters that can be used singly or combined to come to a final conclusion if the string fulfils all criteria or not.
+
+The filters are divided into three different types:
+
+1. Filters that are interpreted as raw strings (called 'standard filters'; no wild cards supported)
+2. Filters that are interpreted as regular expressions (called 'regular expression based filters'; the syntax of regular expressions has to be considered)
+3. Boolean switches (e.g. indicating if also an empty string is accepted or not)
+
+The input string might contain leading and trailing blanks and tabs. This kind of horizontal space is removed from the input string
+before the standard filters start their work (except the regular expression based filters).
+
+The regular expression based filters consider the original input string (including the leading and trailing space). 
+
+The outcome is that in case of the leading and trailing space shall be part of the criterion, the regular expression based filters can be used only.
+
+It is possible to decide if the standard filters shall work case sensitive or not. This decision has no effect on the regular expression based filters.
+
+The regular expression based filters always work with the original input string that is not modified in any way.
+
+Except the regular expression based filters it is possible to provide more than one string for every standard filter (must be a semikolon separated list in this case).
+A semicolon that shall be part of the search string, has to be masked in this way: ``\;``.
+
+This method returns a boolean value that is ``True`` in case of all criteria are fulfilled, and ``False`` in case of some or all of them are not fulfilled.
+
+The default value for all filters is ``None`` (except ``bSkipBlankStrings``). In case of a filter value is ``None`` this filter has no influence on the result.
+
+In case of all filters are ``None`` (default) the return value is ``True`` (except the string itself is ``None``
+or the string is empty and ``bSkipBlankStrings`` is ``True``).
+
+In case of the string is ``None``, the return value is ``False``, because nothing concrete can be done with ``None`` strings.
+
+Internally every filter has his own individual acknowledge that indicates if the criterion of this filter is fulfilled or not.
+
+The meaning of *criterion fulfilled* of a filter is that the filter supports the final return value ``bAck`` of this method with ``True``.
+
+The final return value ``bAck`` of this method is a logical join (``AND``) of all individual acknowledges (except ``bSkipBlankStrings`` and ``sComment``;
+in case of their criteria are **not** fulfilled, immediately ``False`` is returned).
+
+Summarized:
+
+* Filters are used to define *criteria*
+* The return value of this method provides the *conclusion* - indicating if all criteria are fulfilled or not
+
+The following filters are available:
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+**bSkipBlankStrings**
+
+   * Like already mentioned above leading and trailing spaces are removed from the input string at the beginning
+   * In case of the result is an empty string and ``bSkipBlankStrings`` is ``True``, the method immediately returns ``False``
+     and all other filters are ignored
+
+**sComment**
+
+   * In case of the input string starts with the string ``sComment``, the method immediately returns ``False``
+     and all other filters are ignored
+   * Leading blanks within the input string have no effect
+   * The decision also depends on ``bCaseSensitive``
+   * The idea behind this decision is: Ignore a string that is commented out
+
+**sStartsWith**
+
+   * The criterion of this filter is fulfilled in case of the input string starts with the string ``sStartsWith``
+   * Leading blanks within the input string have no effect
+   * The decision also depends on ``bCaseSensitive``
+   * More than one string can be provided (semicolon separated; logical join: ``OR``)
+
+**sEndsWith**
+
+   * The criterion of this filter is fulfilled in case of the input string ends with the string ``sEndsWith``
+   * Trailing blanks within the input string have no effect
+   * The decision also depends on ``bCaseSensitive``
+   * More than one string can be provided (semicolon separated; logical join: ``OR``)
+
+**sStartsNotWith**
+
+   * The criterion of this filter is fulfilled in case of the input string does **not** start with the string ``sStartsNotWith``
+   * Leading blanks within the input string have no effect
+   * The decision also depends on ``bCaseSensitive``
+   * More than one string can be provided (semicolon separated; logical join: ``AND``)
+
+**sEndsNotWith**
+
+   * The criterion of this filter is fulfilled in case of the input string does **not** end with the string ``sEndsNotWith``
+   * Trailing blanks within the input string have no effect
+   * The decision also depends on ``bCaseSensitive``
+   * More than one string can be provided (semicolon separated; logical join: ``AND``)
+
+**sContains**
+
+   * The criterion of this filter is fulfilled in case of the input string contains the string ``sContains`` at any position
+   * Leading and trailing blanks within the input string have no effect
+   * The decision also depends on ``bCaseSensitive``
+   * More than one string can be provided (semicolon separated; logical join: ``OR``)
+
+**sContainsNot**
+
+   * The criterion of this filter is fulfilled in case of the input string does **not** contain the string ``sContainsNot`` at any position
+   * Leading and trailing blanks within the input string have no effect
+   * The decision also depends on ``bCaseSensitive``
+   * More than one string can be provided (semicolon separated; logical join: ``AND``)
+
+**sInclRegEx**
+
+   * *Include* filter based on regular expressions (consider the syntax of regular expressions!)
+   * The criterion of this filter is fulfilled in case of the regular expression ``sInclRegEx`` matches the input string
+   * Leading and trailing blanks within the input string are considered
+   * ``bCaseSensitive`` has no effect
+   * A semicolon separated list of several regular expressions is **not** supported
+
+**sExclRegEx**
+
+   * *Exclude* filter based on regular expressions (consider the syntax of regular expressions!)
+   * The criterion of this filter is fulfilled in case of the regular expression ``sExclRegEx`` does **not** match the input string
+   * Leading and trailing blanks within the input string are considered
+   * ``bCaseSensitive`` has no effect
+   * A semicolon separated list of several regular expressions is **not** supported
+
+**Further arguments:**
+
+* ``sString``
+
+  / *Condition*: required / *Type*: str /
+
+  The input string that has to be investigated. 
+
+* ``bCaseSensitive``
+
+  / *Condition*: optional / *Type*: bool / *Default*: True /
+
+  If ``True``, the standard filters work case sensitive, otherwise not.
+
+* ``bDebug``
+
+  / *Condition*: optional / *Type*: bool / *Default*: False /
+
+  If ``True``, additional output is printed to console (e.g. the decision of every single filter), otherwise not.
+
+**Returns:**
+
+* ``bAck``
+
+  / *Type*: bool /
+
+  Final statement about the input string ``sString`` after filter computation
+
+Examples:
+~~~~~~~~~
+
+1. Returns ``True``:
+
+.. code:: python
+
+   StringFilter(sString           = "Speed is 25 beats per minute",
+                bCaseSensitive    = True,
+                bSkipBlankStrings = True,
+                sComment          = None,
+                sStartsWith       = "Sp",
+                sEndsWith         = None,
+                sStartsNotWith    = None,
+                sEndsNotWith      = None,
+                sContains         = "beats",
+                sContainsNot      = None,
+                sInclRegEx        = None,
+                sExclRegEx        = None)
+
+2. Returns ``False``:
+
+.. code:: python
+
+   StringFilter(sString           = "Speed is 25 beats per minute",
+                bCaseSensitive    = True,
+                bSkipBlankStrings = True,
+                sComment          = None,
+                sStartsWith       = "Sp",
+                sEndsWith         = None,
+                sStartsNotWith    = None,
+                sEndsNotWith      = "minute",
+                sContains         = "beats",
+                sContainsNot      = None,
+                sInclRegEx        = None,
+                sExclRegEx        = None)
+
+3. Returns ``True``:
+
+.. code:: python
+
+   StringFilter(sString           = "Speed is 25 beats per minute",
+                bCaseSensitive    = True,
+                bSkipBlankStrings = True,
+                sComment          = None,
+                sStartsWith       = None,
+                sEndsWith         = None,
+                sStartsNotWith    = None,
+                sEndsNotWith      = None,
+                sContains         = None,
+                sContainsNot      = "Beats",
+                sInclRegEx        = None,
+                sExclRegEx        = None)
+
+4. Returns ``True``:
+
+.. code:: python
+
+   StringFilter(sString           = "Speed is 25 beats per minute",
+                bCaseSensitive    = True,
+                bSkipBlankStrings = True,
+                sComment          = None,
+                sStartsWith       = None,
+                sEndsWith         = None,
+                sStartsNotWith    = None,
+                sEndsNotWith      = None,
+                sContains         = None,
+                sContainsNot      = None,
+                sInclRegEx        = r"\d{2}",
+                sExclRegEx        = None)
+
+5. Returns ``False``:
+
+.. code:: python
+
+   StringFilter(sString           = "Speed is 25 beats per minute",
+                bCaseSensitive    = True,
+                bSkipBlankStrings = True,
+                sComment          = None,
+                sStartsWith       = "Speed",
+                sEndsWith         = None,
+                sStartsNotWith    = None,
+                sEndsNotWith      = None,
+                sContains         = None,
+                sContainsNot      = None,
+                sInclRegEx        = r"\d{3}",
+                sExclRegEx        = None)
+
+6. Returns ``False``:
+
+.. code:: python
+
+   StringFilter(sString           = "Speed is 25 beats per minute",
+                bCaseSensitive    = True,
+                bSkipBlankStrings = True,
+                sComment          = None,
+                sStartsWith       = "Speed",
+                sEndsWith         = "minute",
+                sStartsNotWith    = "speed",
+                sEndsNotWith      = None,
+                sContains         = "beats",
+                sContainsNot      = None,
+                sInclRegEx        = r"\d{2}",
+                sExclRegEx        = r"\d{2}")
+
+7. Returns ``False``:
+
+.. code:: python
+
+   StringFilter(sString           = "     ",
+                bCaseSensitive    = True,
+                bSkipBlankStrings = True,
+                sComment          = None,
+                sStartsWith       = None,
+                sEndsWith         = None,
+                sStartsNotWith    = None,
+                sEndsNotWith      = None,
+                sContains         = None,
+                sContainsNot      = None,
+                sInclRegEx        = None,
+                sExclRegEx        = None)
+
+8. Returns ``False``:
+
+.. code:: python
+
+   StringFilter(sString           = "# Speed is 25 beats per minute",
+                bCaseSensitive    = True,
+                bSkipBlankStrings = True,
+                sComment          = "#",
+                sStartsWith       = None,
+                sEndsWith         = None,
+                sStartsNotWith    = None,
+                sEndsNotWith      = None,
+                sContains         = "beats",
+                sContainsNot      = None,
+                sInclRegEx        = None,
+                sExclRegEx        = None)
+
+
+9. Returns ``False``:
+
+.. code:: python
+
+   StringFilter(sString           = "   Alpha is not beta; and beta is not gamma  ",
+                bCaseSensitive    = True,
+                bSkipBlankStrings = True,
+                sComment          = None,
+                sStartsWith       = None,
+                sEndsWith         = None,
+                sStartsNotWith    = None,
+                sEndsNotWith      = None,
+                sContains         = "   Alpha ",
+                sContainsNot      = None,
+                sInclRegEx        = None,
+                sExclRegEx        = None)
+
+Because blanks around search strings (here ``"   Alpha "``) are considered, whereas the blanks around the input string are removed before computation.
+Therefore ``"   Alpha "`` cannot be found within the (shortened) input string.
+
+
+10. This alternative solution returns ``True``:
+
+.. code:: python
+
+   StringFilter(sString           = "   Alpha is not beta; and beta is not gamma  ",
+                bCaseSensitive    = True,
+                bSkipBlankStrings = True,
+                sComment          = None,
+                sStartsWith       = None,
+                sEndsWith         = None,
+                sStartsNotWith    = None,
+                sEndsNotWith      = None,
+                sContains         = None,
+                sContainsNot      = None,
+                sInclRegEx        = r"\s{3}Alpha",
+                sExclRegEx        = None)
+
+
+11. Returns ``True``:
+
+.. code:: python
+
+   StringFilter(sString           = "Alpha is not beta; and beta is not gamma",
+                bCaseSensitive    = True,
+                bSkipBlankStrings = True,
+                sComment          = None,
+                sStartsWith       = None,
+                sEndsWith         = None,
+                sStartsNotWith    = None,
+                sEndsNotWith      = None,
+                sContains         = "beta; and",
+                sContainsNot      = None,
+                sInclRegEx        = None,
+                sExclRegEx        = None)
+
+The meaning of ``"beta; and"`` is: The criterion is fulfilled in case of either ``"beta"`` or ``" and"`` can be found. That's ``True`` in this example - but this
+has nothing to do with the fact, that also this string ``"beta; and"`` can be found. Here the semikolon is a separator character and therefore part of the syntax.
+
+A semicolon that shall be part of the search string, has to be masked with '``\;``'!
+
+The meaning of ``"beta\; not"`` in the following example is: The criterion is fulfilled in case of ``"beta; not"`` can be found.
+
+That's **not** ``True``. Therefore the method returns ``False``:
+
+.. code:: python
+
+   StringFilter(sString           = "Alpha is not beta; and beta is not gamma",
+                bCaseSensitive    = True,
+                bSkipBlankStrings = True,
+                sComment          = None,
+                sStartsWith       = None,
+                sEndsWith         = None,
+                sStartsNotWith    = None,
+                sEndsNotWith      = None,
+                sContains         = r"beta\; not",
+                sContainsNot      = None,
+                sInclRegEx        = None,
+                sExclRegEx        = None)
+      """
+
+      if sString is None:
+         return False # hard coded here; no separate filter for that decision
+
+      # The original string 'sString' is used by regular expression filters sInclRegEx and sExclRegEx.
+      # The stripped string 'sStringStripped' is used by all other filters.
+      sStringStripped = sString.strip(" \t\r\n")
+
+      # -- skipping blank strings or strings commented out; other filters will not be considered any more in this case
+
+      if bSkipBlankStrings is True:
+         if sStringStripped == "":
+            return False
+
+      if sComment is not None:
+         if sComment != "":
+            if bCaseSensitive is True:
+              if sStringStripped.startswith(sComment) is True:
+                 return False
+            else:
+              if sStringStripped.upper().startswith(sComment.upper()) is True:
+                 return False
+
+      # -- consider further filters
+      #
+      # No filter set (= no criteria defined) => use this string (bAck is True).
+      #
+      # At least one filter set (except sExclRegEx), at least one set filter fits (except sExclRegEx) => use this string.
+      # Filter sExclRegEx is set and fits => skip this string (final veto).
+      # At least one filter does not fit (except sExclRegEx) => skip this string.
+      #
+      # All filters (except sExclRegEx) are include filter (bAck is True in case of all set filters fit, also the 'not' filters)
+      # The filter sExclRegEx is an exclude filter and has final veto right (can revoke the True from other filters).
+      #
+      # All filters (except sInclRegEx and sExclRegEx) are handled as 'raw strings': no wild cards, just strings, considering bCaseSensitive.
+      # The filters sInclRegEx and sExclRegEx are handled as regular expressions; bCaseSensitive is not considered here.
+
+      # -- filter specific flags (containing the names of the criteria within their names)
+      bStartsWith    = None
+      bEndsWith      = None
+      bStartsNotWith = None
+      bEndsNotWith   = None
+      bContains      = None
+      bContainsNot   = None
+      bInclRegEx     = None
+      bExclRegEx     = None
+
+      # Meaning:
+      # - Flag is None : filter not set => filter has no effect
+      # - Flag is True : filter set => result: use the input string (from this single filter flag point of view)
+      # - Flag is False: filter set => result: do not use the input string (from this single filter flag point of view)
+      # The results of all flags will be merged at the end of this function to one final conclusion to use the input string
+      # (bAck is True) or not (bAck is False).
+      # Logical join between all set filters: AND
+
+      # substitute for the masked filter separator '\n' (hopefully the input string does not contain this substitute)
+      sSeparatorSubstitute = "#|S#|E#|P#|A#|R#|A#|T#|O#|R#"
+
+      # -- filter: starts with
+      #    > several filter strings possible (separated by semicolon; logical join: OR)
+      if sStartsWith is not None:
+         if sStartsWith != "":
+            sStartsWithModified = sStartsWith.replace(r"\;", sSeparatorSubstitute) # replace the masked separator by a substitute separator
+            listStartsWith = []
+            if sStartsWith.find(";") >= 0:
+               listParts = sStartsWithModified.split(";")
+               for sPart in listParts:
+                  sPart = sPart.replace(sSeparatorSubstitute , ";") # recover the original version
+                  listStartsWith.append(sPart)
+            else:
+               sStartsWithModified = sStartsWith.replace(r"\;", ";") # convert to unmasked version
+               listStartsWith.append(sStartsWithModified)
+
+            bStartsWith = False
+            for sStartsWith in listStartsWith:
+               if bCaseSensitive is True:
+                  if sStringStripped.startswith(sStartsWith) is True:
+                     bStartsWith = True
+                     break
+               else:
+                  if sStringStripped.upper().startswith(sStartsWith.upper()) is True:
+                     bStartsWith = True
+                     break
+
+      # -- filter: ends with
+      #    > several filter strings possible (separated by semicolon; logical join: OR)
+      if sEndsWith is not None:
+         if sEndsWith != "":
+            sEndsWithModified = sEndsWith.replace(r"\;", sSeparatorSubstitute) # replace the masked separator by a substitute separator
+            listEndsWith = []
+            if sEndsWith.find(";") >= 0:
+               listParts = sEndsWithModified.split(";")
+               for sPart in listParts:
+                  sPart = sPart.replace(sSeparatorSubstitute , ";") # recover the original version
+                  listEndsWith.append(sPart)
+            else:
+               sEndsWithModified = sEndsWith.replace(r"\;", ";") # convert to unmasked version
+               listEndsWith.append(sEndsWithModified)
+
+            bEndsWith = False
+            for sEndsWith in listEndsWith:
+               if bCaseSensitive is True:
+                  if sStringStripped.endswith(sEndsWith) is True:
+                     bEndsWith = True
+                     break
+               else:
+                  if sStringStripped.upper().endswith(sEndsWith.upper()) is True:
+                     bEndsWith = True
+                     break
+
+      # -- filter: starts not with
+      #    > several filter strings possible (separated by semicolon; logical join: AND)
+      if sStartsNotWith is not None:
+         if sStartsNotWith != "":
+            sStartsNotWithModified = sStartsNotWith.replace(r"\;", sSeparatorSubstitute) # replace the masked separator by a substitute separator
+            listStartsNotWith = []
+            if sStartsNotWith.find(";") >= 0:
+               listParts = sStartsNotWithModified.split(";")
+               for sPart in listParts:
+                  sPart = sPart.replace(sSeparatorSubstitute , ";") # recover the original version
+                  listStartsNotWith.append(sPart)
+            else:
+               sStartsNotWithModified = sStartsNotWith.replace(r"\;", ";") # convert to unmasked version
+               listStartsNotWith.append(sStartsNotWithModified)
+
+            bStartsNotWith = True
+            for sStartsNotWith in listStartsNotWith:
+               if bCaseSensitive is True:
+                  if sStringStripped.startswith(sStartsNotWith) is True:
+                     bStartsNotWith = False
+                     break
+               else:
+                  if sStringStripped.upper().startswith(sStartsNotWith.upper()) is True:
+                     bStartsNotWith = False
+                     break
+
+      # -- filter: ends not with
+      #    > several filter strings possible (separated by semicolon; logical join: AND)
+      if sEndsNotWith is not None:
+         if sEndsNotWith != "":
+            sEndsNotWithModified = sEndsNotWith.replace(r"\;", sSeparatorSubstitute) # replace the masked separator by a substitute separator
+            listEndsNotWith = []
+            if sEndsNotWith.find(";") >= 0:
+               listParts = sEndsNotWithModified.split(";")
+               for sPart in listParts:
+                  sPart = sPart.replace(sSeparatorSubstitute , ";") # recover the original version
+                  listEndsNotWith.append(sPart)
+            else:
+               sEndsNotWithModified = sEndsNotWith.replace(r"\;", ";") # convert to unmasked version
+               listEndsNotWith.append(sEndsNotWithModified)
+
+            bEndsNotWith = True
+            for sEndsNotWith in listEndsNotWith:
+               if bCaseSensitive is True:
+                  if sStringStripped.endswith(sEndsNotWith) is True:
+                     bEndsNotWith = False
+                     break
+               else:
+                  if sStringStripped.upper().endswith(sEndsNotWith.upper()) is True:
+                     bEndsNotWith = False
+                     break
+
+      # -- filter: contains
+      #    > several filter strings possible (separated by semicolon; logical join: OR)
+      if sContains is not None:
+         if sContains != "":
+            sContainsModified = sContains.replace(r"\;", sSeparatorSubstitute) # replace the masked separator by a substitute separator
+            listContains = []
+            if sContainsModified.find(";") >= 0:
+               listParts = sContainsModified.split(";")
+               for sPart in listParts:
+                  sPart = sPart.replace(sSeparatorSubstitute , ";") # recover the original version
+                  print(f"- Part: '{sPart}'")
+                  listContains.append(sPart)
+            else:
+               sContainsModified = sContains.replace(r"\;", ";") # convert to unmasked version
+               listContains.append(sContainsModified)
+
+            bContains = False
+            for sContains in listContains:
+               if bCaseSensitive is True:
+                  if sStringStripped.find(sContains) >= 0:
+                     bContains = True
+                     break
+               else:
+                  if sStringStripped.upper().find(sContains.upper()) >= 0:
+                     bContains = True
+                     break
+
+      # -- filter: contains not
+      #    > several filter strings possible (separated by semicolon; logical join: AND)
+      if sContainsNot is not None:
+         if sContainsNot != "":
+            sContainsNotModified = sContainsNot.replace(r"\;", sSeparatorSubstitute) # replace the masked separator by a substitute separator
+            listContainsNot = []
+            if sContainsNot.find(";") >= 0:
+               listParts = sContainsNotModified.split(";")
+               for sPart in listParts:
+                  sPart = sPart.replace(sSeparatorSubstitute , ";") # recover the original version
+                  listContainsNot.append(sPart)
+            else:
+               sContainsNotModified = sContainsNot.replace(r"\;", ";") # convert to unmasked version
+               listContainsNot.append(sContainsNotModified)
+
+            bContainsNot = True
+            for sContainsNot in listContainsNot:
+               if bCaseSensitive is True:
+                  if sStringStripped.find(sContainsNot) >= 0:
+                     bContainsNot = False
+                     break
+               else:
+                  if sStringStripped.upper().find(sContainsNot.upper()) >= 0:
+                     bContainsNot = False
+                     break
+
+      # -- filter: sInclRegEx
+      #    > (take care to mask special characters that are part of the syntax of regular expressions!)
+      #    > bCaseSensitive not considered here
+      if sInclRegEx is not None:
+         if sInclRegEx != "":
+            bInclRegEx = False
+            if re.search(sInclRegEx, sString) is not None:
+               bInclRegEx = True
+
+      # -- last filter: sExclRegEx (final veto right)
+      #    > (take care to mask special characters that are part of the syntax of regular expressions!)
+      #    > bCaseSensitive not considered here
+      if sExclRegEx is not None:
+         if sExclRegEx != "":
+            bExclRegEx = True
+            if re.search(sExclRegEx, sString) is not None:
+               bExclRegEx = False
+
+      # -- debug info
+      if bDebug is True:
+         print("\n* [sString] : '" + str(sString) + "'\n")
+         print("  -> [bStartsWith]    : '" + str(bStartsWith)    + "'")
+         print("  -> [bEndsWith]      : '" + str(bEndsWith)      + "'")
+         print("  -> [bStartsNotWith] : '" + str(bStartsNotWith) + "'")
+         print("  -> [bEndsNotWith]   : '" + str(bEndsNotWith)   + "'")
+         print("  -> [bContains]      : '" + str(bContains)      + "'")
+         print("  -> [bContainsNot]   : '" + str(bContainsNot)   + "'")
+         print("  -> [bInclRegEx]     : '" + str(bInclRegEx)     + "'")
+         print("  -> [bExclRegEx]     : '" + str(bExclRegEx)     + "'\n")
+
+      # -- final conclusion (AND condition between filters)
+
+      listDecisions = []
+      listDecisions.append(bStartsWith)
+      listDecisions.append(bEndsWith)
+      listDecisions.append(bStartsNotWith)
+      listDecisions.append(bEndsNotWith)
+      listDecisions.append(bContains)
+      listDecisions.append(bContainsNot)
+      listDecisions.append(bInclRegEx)
+      listDecisions.append(bExclRegEx)
+
+      bAck = False # initial
+
+      # -- 1.) no filter set (all None)
+      nCntDecisions = 0
+      for bDecision in listDecisions:
+         if bDecision is None:
+            nCntDecisions = nCntDecisions + 1
+      if nCntDecisions == len(listDecisions):
+         bAck = True
+         if bDebug is True:
+            print("     > case [1] - bAck: " + str(bAck))
+
+      # -- 2.) final veto from exclude filter
+      if bExclRegEx is False:
+         bAck = False
+         if bDebug is True:
+            print("     > case [2] - bAck: " + str(bAck))
+
+      # -- 3.) exclude filter not set; decision only made by other filters (include)
+      if bExclRegEx is None:
+         bAck = True
+         for bDecision in listDecisions:
+            if bDecision is False:
+               bAck = False
+               break
+         if bDebug is True:
+            print("     > case [3] - bAck: " + str(bAck))
+
+      # -- 4.) exclude filter is True (only relevant in case of all other filters are not set; otherwise decision only made by other filters (include))
+      if bExclRegEx is True:
+         if ( (bStartsWith is None) and
+              (bEndsWith is None) and
+              (bStartsNotWith is None) and
+              (bEndsNotWith is None) and
+              (bContains is None) and
+              (bContainsNot is None) and
+              (bInclRegEx is None) ):
+            bAck = True
+            if bDebug is True:
+               print("     > case [4.1] - bAck: " + str(bAck))
+         else:
+            bAck = True
+            for bDecision in listDecisions:
+               if bDecision is False:
+                  bAck = False
+                  break
+            if bDebug is True:
+               print("     > case [4.2] - bAck: " + str(bAck))
+
+      if bDebug is True:
+         print()
+
+      return bAck
+
+   # eof def StringFilter(...)
+
+   # --------------------------------------------------------------------------------------------------------------
+   #TM***
+
+   def FormatResult(sMethod="", bSuccess=True, sResult=""):
+      """
+Formats the result string ``sResult`` depending on ``bSuccess``:
+
+* ``bSuccess`` is ``True`` indicates *success*
+* ``bSuccess`` is ``False`` indicates an *error*
+* ``bSuccess`` is ``None`` indicates an *exception*
+
+Additionally the name of the method that causes the result, can be provided (*optional*).
+This is useful for debugging.
+
+**Arguments:**
+
+* ``sMethod``
+
+  / *Condition*: optional / *Type*: str / *Default*: (empty string) /
+
+  Name of the method that causes the result.
+
+* ``bSuccess``
+
+  / *Condition*: optional / *Type*: bool / *Default*: True /
+
+  Indicates if the computation of the method ``sMethod`` was successful or not.
+
+* ``sResult``
+
+  / *Condition*: optional / *Type*: str / *Default*: (empty string) /
+
+  The result of the computation of the method ``sMethod``.
+
+**Returns:**
+
+* ``sResult``
+
+  / *Type*: str /
+
+  The formatted result string.
+      """
+
+      if sMethod is None:
+         sMethod = str(sMethod)
+      if sResult is None:
+         sResult = str(sResult)
+      if bSuccess is True:
+         if sMethod != "":
+            sResult = f"[{sMethod}] : {sResult}"
+      elif bSuccess is False:
+         sError = "!!! ERROR !!!"
+         if sMethod != "":
+            sResult = f"{sError}\n[{sMethod}] : {sResult}"
+         else:
+            sResult = f"{sError}\n{sResult}"
+      else:
+         sException = "!!! EXCEPTION !!!"
+         if sMethod != "":
+            sResult = f"{sException}\n[{sMethod}] : {sResult}"
+         else:
+            sResult = f"{sException}\n{sResult}"
+      return sResult
+
+   # eof def FormatResult(sMethod="", bSuccess=True, sResult=""):
+
+   # --------------------------------------------------------------------------------------------------------------
+   #TM***
+
+   # - make the methods static
+
+   NormalizePath    = staticmethod(NormalizePath)
+   DetectParentPath = staticmethod(DetectParentPath)
+   StringFilter     = staticmethod(StringFilter)
+   FormatResult     = staticmethod(FormatResult)
+
+# eof class CString(object):
+
+# **************************************************************************************************************
+
+
+
diff --git a/additions/PythonExtensionsCollection/String/__init__.py b/additions/PythonExtensionsCollection/String/__init__.py
new file mode 100644
index 00000000..958420af
--- /dev/null
+++ b/additions/PythonExtensionsCollection/String/__init__.py
@@ -0,0 +1,13 @@
+#  Copyright 2020-2022 Robert Bosch GmbH
+#
+#  Licensed under the Apache License, Version 2.0 (the "License");
+#  you may not use this file except in compliance with the License.
+#  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+#  Unless required by applicable law or agreed to in writing, software
+#  distributed under the License is distributed on an "AS IS" BASIS,
+#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#  See the License for the specific language governing permissions and
+#  limitations under the License.
diff --git a/additions/PythonExtensionsCollection/Utils/CUtils.py b/additions/PythonExtensionsCollection/Utils/CUtils.py
new file mode 100644
index 00000000..20447501
--- /dev/null
+++ b/additions/PythonExtensionsCollection/Utils/CUtils.py
@@ -0,0 +1,374 @@
+# **************************************************************************************************************
+#
+#  Copyright 2020-2022 Robert Bosch GmbH
+#
+#  Licensed under the Apache License, Version 2.0 (the "License");
+#  you may not use this file except in compliance with the License.
+#  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+#  Unless required by applicable law or agreed to in writing, software
+#  distributed under the License is distributed on an "AS IS" BASIS,
+#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#  See the License for the specific language governing permissions and
+#  limitations under the License.
+#
+# **************************************************************************************************************
+#
+# CUtils.py
+#
+# XC-CT/ECA3-Queckenstedt
+#
+# 20.05.2022
+#
+# **************************************************************************************************************
+
+# -- import standard Python modules
+from dotdict import dotdict
+
+# **************************************************************************************************************
+# wrapper
+# **************************************************************************************************************
+
+def PrettyPrint(oData=None, hOutputFile=None, bToConsole=True, nIndent=0, sPrefix=None, bHexFormat=False):
+   """
+Wrapper function to create and use a ``CTypePrint`` object. This wrapper function is responsible for
+printing out the content to console and to a file (depending on input parameter).
+
+The content itself is prepared by the method ``TypePrint`` of class ``CTypePrint``. This happens ``PrettyPrint`` internally.
+
+The idea behind the ``PrettyPrint`` function is to resolve also the content of composite data types and provide for every parameter inside:
+
+* the type
+* the total number of elements inside (e.g. the number of keys inside a dictionary)
+* the counter number of the current element
+* the value
+
+Example call:
+
+.. code:: python
+
+   PrettyPrint(oData)
+
+(*with oData is a Python variable of any type*)
+
+The output can e.g. look like this:
+
+.. code:: python
+
+   [DICT] (3/1) > {K1} [STR]  :  'Val1'
+   [DICT] (3/2) > {K2} [LIST] (4/1) > [INT]  :  1
+   [DICT] (3/2) > {K2} [LIST] (4/2) > [STR]  :  'A'
+   [DICT] (3/2) > {K2} [LIST] (4/3) > [INT]  :  2
+   [DICT] (3/2) > {K2} [LIST] (4/4) > [TUPLE] (2/1) > [INT]  :  9
+   [DICT] (3/2) > {K2} [LIST] (4/4) > [TUPLE] (2/2) > [STR]  :  'Z'
+   [DICT] (3/3) > {K3} [INT]  :  5
+
+Every line of output has to be interpreted strictly from left to right.
+
+For example the meaning of the fifth line of output
+
+.. code:: python
+
+   [DICT] (3/2) > {K2} [LIST] (4/4) > [TUPLE] (2/1) > [INT]  :  9
+
+is:
+
+* The type of input parameter (``oData``) is ``dict``
+* The dictionary contains 3 keys
+* The current line gives information about the second key of the dictionary
+* The name of the second key is 'K2'
+* The value of the second key is of type ``list``
+* The list contains 4 elements
+* The current line gives information about the fourth element of the list
+* The fourth element of the list is of type ``tuple``
+* The tuple contains 2 elements
+* The current line gives information about the first element of the tuple
+* The first element of the tuple is of type ``int`` and has the value 9
+
+Types are encapsulated in square brackets, counter in round brackets and key names are encapsulated in curly brackets.
+
+**Arguments:**
+
+* ``oData``
+
+  / *Condition*: required / *Type*: (*any Python data type*) /
+
+  A variable of any Python data type.
+
+* ``hOutputFile``
+
+  / *Condition*: optional / *Type*: file handle / *Default*: None /
+
+  If handle is not ``None`` the content is written to this file, otherwise not.
+
+* ``bToConsole``
+
+  / *Condition*: optional / *Type*: bool / *Default*: True /
+
+  If ``True`` the content is written to console, otherwise not.
+
+* ``nIndent``
+
+  / *Condition*: optional / *Type*: int / *Default*: 0 /
+
+  Sets the number of additional blanks at the beginning of every line of output (indentation).
+
+* ``sPrefix``
+
+  / *Condition*: optional / *Type*: str / *Default*: None /
+
+  Sets a prefix string that is added at the beginning of every line of output.
+
+* ``bHexFormat``
+
+  / *Condition*: optional / *Type*: bool / *Default*: False /
+
+  If ``True`` the output is printed in hexadecimal format (but valid for strings only).
+
+**Returns:**
+
+* ``listOutLines`` (*list*)
+
+  / *Type*: list /
+
+  List of lines containing the prepared output
+   """
+
+   oTypePrint   = CTypePrint()
+   listOutLines = oTypePrint.TypePrint(oData, bHexFormat)
+
+   listReturned = []
+   for sLine in listOutLines:
+      # if requested add indentation and prefix
+      sLineOut = ""
+      if sPrefix is not None:
+         sLineOut = nIndent*" " + sPrefix + " " + sLine
+      else:
+         sLineOut = nIndent*" " + sLine
+      listReturned.append(sLineOut)
+
+      if hOutputFile is not None:
+         hOutputFile.write(sLineOut + "\n")
+      if bToConsole is True:
+         print(sLineOut)
+
+   return listReturned
+
+# eof def PrettyPrint(oData=None, hOutputFile=None, bToConsole=True, nIndent=0, sPrefix=None, bHexFormat=False):
+
+# --------------------------------------------------------------------------------------------------------------
+# TM***
+
+class CTypePrint(object):
+   """
+The class ``CTypePrint`` provides a method (``TypePrint``) to compute the following data:
+
+* the type
+* the total number of elements inside (e.g. the number of keys inside a dictionary)
+* the counter number of the current element
+* the value
+
+of simple and composite data types.
+
+The call of this method is encapsulated within the function ``PrettyPrint`` inside this module.
+   """
+   def __init__(self):
+      self.listGlobalPrefixes = []
+      self.listOutLines       = []
+
+   def __del__(self):
+      pass
+
+   def _ToHex(self, sString=None):
+      if ( (sString is None) or (sString == "") ):
+         return sString
+      listHex = []
+      for sChar in sString:
+         listHex.append(hex(ord(sChar)))
+      sStringHex = " ".join(listHex)
+      return sStringHex
+
+   def TypePrint(self, oData=None, bHexFormat=False):
+      """
+The method ``TypePrint`` computes details about the input variable ``oData``.
+
+**Arguments:**
+
+* ``oData``
+
+  / *Condition*: required / *Type*: any Python data type /
+
+  Python variable of any data type.
+
+* ``bHexFormat``
+
+  / *Condition*: optional / *Type*: bool / *Default*: False /
+
+  If ``True`` the output is provide in hexadecimal format.
+
+**Returns:**
+
+* ``listOutLines``
+
+  / *Type*: list /
+
+  List of lines containing the resolved content of ``oData``.
+      """
+
+      if oData is None:
+         sLocalPrefix = "[NONE]"
+         sGlobalPrefix = " ".join(self.listGlobalPrefixes)
+         sOut = sGlobalPrefix + " " + sLocalPrefix + "  :  " + str(oData)
+         self.listOutLines.append(sOut.strip())
+
+      elif type(oData) == int:
+         sLocalPrefix = "[INT]"
+         sGlobalPrefix = " ".join(self.listGlobalPrefixes)
+         sOut = sGlobalPrefix + " " + sLocalPrefix + "  :  " + str(oData)
+         self.listOutLines.append(sOut.strip())
+
+      elif type(oData) == float:
+         sLocalPrefix = "[FLOAT]"
+         sGlobalPrefix = " ".join(self.listGlobalPrefixes)
+         sOut = sGlobalPrefix + " " + sLocalPrefix + "  :  " + str(oData)
+         self.listOutLines.append(sOut.strip())
+
+      elif type(oData) == bool:
+         sLocalPrefix = "[BOOL]"
+         sGlobalPrefix = " ".join(self.listGlobalPrefixes)
+         sOut = sGlobalPrefix + " " + sLocalPrefix + "  :  " + str(oData)
+         self.listOutLines.append(sOut.strip())
+
+      elif type(oData) == str:
+         sLocalPrefix = "[STR]"
+         sGlobalPrefix = " ".join(self.listGlobalPrefixes)
+         sData = str(oData)
+         if bHexFormat is True:
+            sData = self._ToHex(sData)
+         sOut = sGlobalPrefix + " " + sLocalPrefix + "  :  '" + sData + "'"
+         self.listOutLines.append(sOut.strip())
+
+      elif type(oData) == list:
+         nNrOfElements = len(oData)
+         if nNrOfElements == 0:
+            # -- indicate empty list
+            sLocalPrefix = "[LIST]"
+            sGlobalPrefix = " ".join(self.listGlobalPrefixes)
+            sOut = sGlobalPrefix + " " + sLocalPrefix + "  :  []"
+            self.listOutLines.append(sOut.strip())
+         else:
+            # -- list elements of list
+            self.listGlobalPrefixes.append("[LIST]")
+            nCnt = 0
+            for oElement in oData:
+               nCnt = nCnt + 1
+               sCnt = "(" + str(nNrOfElements) + "/" + str(nCnt) + ") >"
+               self.listGlobalPrefixes.append(sCnt)
+               self.TypePrint(oElement, bHexFormat) # >>>> recursion
+               del self.listGlobalPrefixes[-1]      # remove prefix count
+            del self.listGlobalPrefixes[-1]         # remove prefix name
+
+      elif type(oData) == tuple:
+         nNrOfElements = len(oData)
+         if nNrOfElements == 0:
+            # -- indicate empty tuple
+            sLocalPrefix = "[TUPLE]"
+            sGlobalPrefix = " ".join(self.listGlobalPrefixes)
+            sOut = sGlobalPrefix + " " + sLocalPrefix + "  :  ()"
+            self.listOutLines.append(sOut.strip())
+         else:
+            # -- list elements of tuple
+            self.listGlobalPrefixes.append("[TUPLE]")
+            nCnt = 0
+            for oElement in oData:
+               nCnt = nCnt + 1
+               sCnt = "(" + str(nNrOfElements) + "/" + str(nCnt) + ") >"
+               self.listGlobalPrefixes.append(sCnt)
+               self.TypePrint(oElement, bHexFormat) # >>>> recursion
+               del self.listGlobalPrefixes[-1]      # remove prefix count
+            del self.listGlobalPrefixes[-1]         # remove prefix name
+
+      elif type(oData) == set:
+         nNrOfElements = len(oData)
+         if nNrOfElements == 0:
+            # -- indicate empty set
+            sLocalPrefix = "[SET]"
+            sGlobalPrefix = " ".join(self.listGlobalPrefixes)
+            sOut = sGlobalPrefix + " " + sLocalPrefix + "  :  ()"
+            self.listOutLines.append(sOut.strip())
+         else:
+            # -- list elements of set
+            self.listGlobalPrefixes.append("[SET]")
+            nCnt = 0
+            for oElement in oData:
+               nCnt = nCnt + 1
+               sCnt = "(" + str(nNrOfElements) + "/" + str(nCnt) + ") >"
+               self.listGlobalPrefixes.append(sCnt)
+               self.TypePrint(oElement, bHexFormat) # >>>> recursion
+               del self.listGlobalPrefixes[-1]      # remove prefix count
+            del self.listGlobalPrefixes[-1]         # remove prefix name
+
+      elif type(oData) == dict:
+         nNrOfElements = len(oData)
+         if nNrOfElements == 0:
+            # -- indicate empty dictionary
+            sLocalPrefix = "[DICT]"
+            sGlobalPrefix = " ".join(self.listGlobalPrefixes)
+            sOut = sGlobalPrefix + " " + sLocalPrefix + "  :  {}"
+            self.listOutLines.append(sOut.strip())
+         else:
+            # -- list elements of dictionary
+            self.listGlobalPrefixes.append("[DICT]")
+            nCnt = 0
+            listKeys = list(oData.keys())
+            for sKey in listKeys:
+               nCnt = nCnt + 1
+               oValue = oData[sKey]
+               sCntAndKey = "(" + str(nNrOfElements) + "/" + str(nCnt) + ") > {" + str(sKey) + "}"
+               self.listGlobalPrefixes.append(sCntAndKey)
+               self.TypePrint(oValue, bHexFormat) # >>>> recursion
+               del self.listGlobalPrefixes[-1]    # remove prefix count
+            del self.listGlobalPrefixes[-1]       # remove prefix name
+
+      # elif type(oData) == dotdict:
+      elif ( (type(oData) == dotdict) or (str(type(oData)) == "") ):
+         nNrOfElements = len(oData)
+         if nNrOfElements == 0:
+            # -- indicate empty dot dictionary
+            sLocalPrefix = "[DOTDICT]"
+            sGlobalPrefix = " ".join(self.listGlobalPrefixes)
+            sOut = sGlobalPrefix + " " + sLocalPrefix + "  :  {}"
+            self.listOutLines.append(sOut.strip())
+         else:
+            # -- list elements of dot dictionary
+            self.listGlobalPrefixes.append("[DOTDICT]")
+            nCnt = 0
+            listKeys = list(oData.keys())
+            for sKey in listKeys:
+               nCnt = nCnt + 1
+               oValue = oData[sKey]
+               sCntAndKey = "(" + str(nNrOfElements) + "/" + str(nCnt) + ") > {" + str(sKey) + "}"
+               self.listGlobalPrefixes.append(sCntAndKey)
+               self.TypePrint(oValue, bHexFormat) # >>>> recursion
+               del self.listGlobalPrefixes[-1]    # remove prefix count
+            del self.listGlobalPrefixes[-1]       # remove prefix name
+
+      else:
+         sLocalPrefix = "[" + str(type(oData)) + "]"
+         sGlobalPrefix = " ".join(self.listGlobalPrefixes)
+         sData = str(oData)
+         if bHexFormat is True:
+            sData = self._ToHex(sData)
+         sOut = sGlobalPrefix + " " + sLocalPrefix + "  :  '" + sData + "'"
+         self.listOutLines.append(sOut.strip())
+
+      return self.listOutLines
+
+   # eof def TypePrint(...):
+
+# eof class CTypePrint():
+
+# **************************************************************************************************************
+
diff --git a/additions/PythonExtensionsCollection/Utils/__init__.py b/additions/PythonExtensionsCollection/Utils/__init__.py
new file mode 100644
index 00000000..958420af
--- /dev/null
+++ b/additions/PythonExtensionsCollection/Utils/__init__.py
@@ -0,0 +1,13 @@
+#  Copyright 2020-2022 Robert Bosch GmbH
+#
+#  Licensed under the Apache License, Version 2.0 (the "License");
+#  you may not use this file except in compliance with the License.
+#  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+#  Unless required by applicable law or agreed to in writing, software
+#  distributed under the License is distributed on an "AS IS" BASIS,
+#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#  See the License for the specific language governing permissions and
+#  limitations under the License.
diff --git a/additions/PythonExtensionsCollection/__init__.py b/additions/PythonExtensionsCollection/__init__.py
new file mode 100644
index 00000000..958420af
--- /dev/null
+++ b/additions/PythonExtensionsCollection/__init__.py
@@ -0,0 +1,13 @@
+#  Copyright 2020-2022 Robert Bosch GmbH
+#
+#  Licensed under the Apache License, Version 2.0 (the "License");
+#  you may not use this file except in compliance with the License.
+#  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+#  Unless required by applicable law or agreed to in writing, software
+#  distributed under the License is distributed on an "AS IS" BASIS,
+#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#  See the License for the specific language governing permissions and
+#  limitations under the License.
diff --git a/additions/PythonExtensionsCollection/version.py b/additions/PythonExtensionsCollection/version.py
new file mode 100644
index 00000000..b5b224a4
--- /dev/null
+++ b/additions/PythonExtensionsCollection/version.py
@@ -0,0 +1,23 @@
+# **************************************************************************************************************
+#
+#  Copyright 2020-2022 Robert Bosch GmbH
+#
+#  Licensed under the Apache License, Version 2.0 (the "License");
+#  you may not use this file except in compliance with the License.
+#  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+#  Unless required by applicable law or agreed to in writing, software
+#  distributed under the License is distributed on an "AS IS" BASIS,
+#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#  See the License for the specific language governing permissions and
+#  limitations under the License.
+#
+# **************************************************************************************************************
+#
+# Version and date of PythonExtensionsCollection
+#
+VERSION      = "0.8.0"
+VERSION_DATE = "28.06.2022"
+
diff --git a/additions/__init__.py b/additions/__init__.py
new file mode 100644
index 00000000..85a18b76
--- /dev/null
+++ b/additions/__init__.py
@@ -0,0 +1,14 @@
+#  Copyright 2020-2022 Robert Bosch GmbH
+#
+#  Licensed under the Apache License, Version 2.0 (the "License");
+#  you may not use this file except in compliance with the License.
+#  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+#  Unless required by applicable law or agreed to in writing, software
+#  distributed under the License is distributed on an "AS IS" BASIS,
+#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#  See the License for the specific language governing permissions and
+#  limitations under the License.
+
diff --git a/config/CConfig.py b/config/CConfig.py
deleted file mode 100644
index e040ea49..00000000
--- a/config/CConfig.py
+++ /dev/null
@@ -1,240 +0,0 @@
-# **************************************************************************************************************
-#
-#  Copyright 2020-2022 Robert Bosch GmbH
-#
-#  Licensed under the Apache License, Version 2.0 (the "License");
-#  you may not use this file except in compliance with the License.
-#  You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-#  Unless required by applicable law or agreed to in writing, software
-#  distributed under the License is distributed on an "AS IS" BASIS,
-#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#  See the License for the specific language governing permissions and
-#  limitations under the License.
-#
-# **************************************************************************************************************
-#
-# CConfig.py
-#
-# XC-CT/ECA3-Queckenstedt
-#
-# Purpose:
-# - Compute and store all repository specific information, like the repository name,
-#   paths to repository subfolder, paths to interpreter and so on ...
-#
-# - All paths to subfolder depends on the repository root path that has to be provided to constructor of CConfig
-# 
-# Additional hints:
-# - Variable names like SPHINXBUILD, SOURCEDIR and BUILDDIR are taken over from original output of Sphinx
-#   (when documentation project files like make.bat are generated by Sphinx; for better understanding
-#   no new names here).
-#
-# - Output in PDF format requires LaTeX compiler and depends on %ROBOTLATEXPATH%/miktex/bin/x64/pdflatex.exe
-#
-# - Don't be confused: We have 'doc/_build' containing the documentation builder output
-#   and we have 'build' containing the build of the setup tools. These are different things.
-#
-# --------------------------------------------------------------------------------------------------------------
-#
-# 18.02.2022 / XC-CT/ECA3-Queckenstedt
-# Usage of %RobotPythonPath% exchanged by sys.executable
-#
-# 11.10.2021 / XC-CI1/ECA3-Queckenstedt
-# Fixed path within site-packages (Linux)
-# 
-# 06.10.2021 / XC-CI1/ECA3-Queckenstedt
-# Added Linux support
-# 
-# 01.10.2021 / XC-CI1/ECA3-Queckenstedt
-# Added environment check
-# 
-# 01.10.2021 / XC-CI1/ECA3-Queckenstedt
-# Added wrapper for error messages
-# 
-# Initial version 08/2021
-#
-# --------------------------------------------------------------------------------------------------------------
-
-import os, sys, platform, shlex, subprocess
-import colorama as col
-import pypandoc
-
-col.init(autoreset=True)
-COLBR = col.Style.BRIGHT + col.Fore.RED
-COLBG = col.Style.BRIGHT + col.Fore.GREEN
-
-# --------------------------------------------------------------------------------------------------------------
-
-def printerror(sMsg):
-    sys.stderr.write(COLBR + f"Error: {sMsg}!\n")
-
-def printexception(sMsg):
-    sys.stderr.write(COLBR + f"Exception: {sMsg}!\n")
-
-# --------------------------------------------------------------------------------------------------------------
-
-class CConfig():
-
-    def __init__(self, sReferencePath="."):
-
-        self.__dictConfig = {}
-
-        self.__sReferencePath = os.path.normpath(os.path.abspath(sReferencePath))
-        self.__dictConfig['sReferencePath'] = self.__sReferencePath # only to have the possibility to print out all values only with help of 'self.__dictConfig'
-
-        # 1. basic setup stuff
-        self.__dictConfig['sPackageName']                = "JsonPreprocessor"
-        self.__dictConfig['sVersion']                    = "0.2.0"
-        self.__dictConfig['sAuthor']                     = "Mai Dinh Nam Son"
-        self.__dictConfig['sAuthorEMail']                = "son.maidinhnam@vn.bosch.com"
-        self.__dictConfig['sDescription']                = "This package provides a preprocessor for json files"
-        self.__dictConfig['sLongDescriptionContentType'] = "text/markdown"
-        self.__dictConfig['sURL']                        = "https://github.com/test-fullautomation/python-jsonpreprocessor"
-        self.__dictConfig['sProgrammingLanguage']        = "Programming Language :: Python :: 3"
-        self.__dictConfig['sLicence']                    = "License :: OSI Approved :: Apache Software License"
-        self.__dictConfig['sOperatingSystem']            = "Operating System :: OS Independent"
-        self.__dictConfig['sPythonRequires']             = ">=3.0"
-        self.__dictConfig['sDevelopmentStatus']          = "Development Status :: 4 - Beta"
-        self.__dictConfig['sIntendedAudience']           = "Intended Audience :: Developers"
-        self.__dictConfig['sTopic']                      = "Topic :: Software Development"
-        self.__dictConfig['arInstallRequires']            = ['sphinx','pypandoc','colorama']
-
-
-        # 2. certain folder and executables (things that requires computation)
-        bSuccess, sResult = self.__InitConfig()
-        if bSuccess != True:
-            raise Exception(sResult)
-        print(COLBG + sResult)
-        print()
-
-
-    def __del__(self):
-        del self.__dictConfig
-
-
-    def __InitConfig(self):
-
-        sOSName         = os.name
-        sPlatformSystem = platform.system()
-        sPythonPath     = os.path.dirname(sys.executable)
-        sPython         = sys.executable
-        sPythonVersion  = sys.version
-
-        SPHINXBUILD                = None
-        sLaTeXInterpreter          = None
-        sInstalledPackageFolder    = None
-        sInstalledPackageDocFolder = None
-
-        try:
-            self.__dictConfig['sPandoc'] = pypandoc.get_pandoc_path()
-        except Exception as ex:
-            bSuccess = False
-            sResult  = str(ex)
-            return bSuccess, sResult
-
-        if sPlatformSystem == "Windows":
-            SPHINXBUILD                = f"{sPythonPath}/Scripts/sphinx-build.exe"
-            sInstalledPackageFolder    = f"{sPythonPath}/Lib/site-packages/" + self.__dictConfig['sPackageName']
-            sInstalledPackageDocFolder = f"{sPythonPath}/Lib/site-packages/" + self.__dictConfig['sPackageName'] + "_doc"
-            sLaTeXInterpreter          = os.path.normpath(os.path.expandvars("%ROBOTLATEXPATH%/miktex/bin/x64/pdflatex.exe"))
-
-        elif sPlatformSystem == "Linux":
-            SPHINXBUILD                = f"{sPythonPath}/sphinx-build"
-            sInstalledPackageFolder    = f"{sPythonPath}/../lib/python3.9/site-packages/" + self.__dictConfig['sPackageName']
-            sInstalledPackageDocFolder = f"{sPythonPath}/../lib/python3.9/site-packages/" + self.__dictConfig['sPackageName'] + "_doc"
-            sLaTeXInterpreter          = os.path.normpath(os.path.expandvars("${ROBOTLATEXPATH}/miktex/bin/x64/pdflatex"))
-
-        else:
-            bSuccess = False
-            sResult  = f"Operating system {sPlatformSystem} ({sOSName}) not supported"
-            return bSuccess, sResult
-
-        if os.path.isfile(sLaTeXInterpreter) is False:
-            sLaTeXInterpreter = None # not an error; PDF generation is an option
-
-        if os.path.isfile(SPHINXBUILD) is False:
-            bSuccess = False
-            sResult  = f"Missing Sphinx '{SPHINXBUILD}'"
-            return bSuccess, sResult
-
-        self.__dictConfig['SPHINXBUILD']                = SPHINXBUILD
-        self.__dictConfig['sPython']                    = sPython
-        self.__dictConfig['sLaTeXInterpreter']          = sLaTeXInterpreter
-        self.__dictConfig['sInstalledPackageFolder']    = sInstalledPackageFolder
-        self.__dictConfig['sInstalledPackageDocFolder'] = sInstalledPackageDocFolder
-
-
-        # ---- paths relative to repository root folder (where the srcipts are located that use this module)
-
-        # ====== 1. documentation
-
-        # This doesn't matter in case of the documentation builder itself is using this CConfig.
-        # But if the documentation builder is called by other apps like setup_ext.py, they need to know where to find.
-        sDocumentationBuilder = os.path.normpath(self.__sReferencePath + "/sphinx-makeall.py")
-        self.__dictConfig['sDocumentationBuilder'] = sDocumentationBuilder
-
-        # - documentation project source dir (relative to reference path (= position of executing script)
-        SOURCEDIR = os.path.normpath(self.__sReferencePath + "/doc")
-        self.__dictConfig['SOURCEDIR'] = SOURCEDIR
-
-        # - documentation project build dir
-        BUILDDIR = os.path.normpath(SOURCEDIR + "/_build")
-        self.__dictConfig['BUILDDIR'] = BUILDDIR
-
-        # - documentation project html output folder
-        sHTMLOutputFolder = os.path.normpath(BUILDDIR + "/html")
-        self.__dictConfig['sHTMLOutputFolder'] = sHTMLOutputFolder
-
-        # - README
-        sReadMe_rst = os.path.normpath(self.__sReferencePath + "/README.rst")
-        self.__dictConfig['sReadMe_rst'] = sReadMe_rst
-        sReadMe_md = os.path.normpath(self.__sReferencePath + "/README.md")
-        self.__dictConfig['sReadMe_md'] = sReadMe_md
-
-
-        # ====== 2. setuptools
-
-        self.__dictConfig['sSetupBuildFolder']       = os.path.normpath(self.__sReferencePath + "/build")
-        self.__dictConfig['sSetupBuildLibFolder']    = os.path.normpath(self.__sReferencePath + "/build/lib")
-        self.__dictConfig['sSetupBuildLibDocFolder'] = os.path.normpath(self.__sReferencePath + "/build/lib/" + self.__dictConfig['sPackageName'] + "_doc")
-        self.__dictConfig['sSetupDistFolder']        = os.path.normpath(self.__sReferencePath + "/dist")
-        self.__dictConfig['sEggInfoFolder']          = os.path.normpath(self.__sReferencePath + "/" + self.__dictConfig['sPackageName'] + ".egg-info")
-
-        print()
-        print(f"Running under {sPlatformSystem} ({sOSName})")
-        self.PrintConfig()
-
-        bSuccess = True
-        sResult  = "Repository setup done"
-        return bSuccess, sResult
-
-    # eof def __InitConfig(self):
-
-
-    def PrintConfig(self):
-        # -- printing configuration to console
-        nJust = 30
-        print()
-        for sKey in self.__dictConfig:
-            print(sKey.rjust(nJust, ' ') + " : " + str(self.__dictConfig[sKey]))
-        print()
-    # eof def PrintConfig(self):
-
-
-    def Get(self, sName=None):
-        if ( (sName is None) or (sName not in self.__dictConfig) ):
-            print()
-            printerror(f"Error: Configuration parameter '{sName}' not existing!")
-            # from here it's standard output:
-            print("Use instead one of:")
-            self.PrintConfig()
-            return None # returning 'None' in case of key is not existing !!!
-        else:
-            return self.__dictConfig[sName]
-    # eof def Get(self, sName=None):
-
-# eof class CConfig():
-
-# --------------------------------------------------------------------------------------------------------------
diff --git a/config/CRepositoryConfig.py b/config/CRepositoryConfig.py
new file mode 100644
index 00000000..3da68162
--- /dev/null
+++ b/config/CRepositoryConfig.py
@@ -0,0 +1,198 @@
+# **************************************************************************************************************
+#
+#  Copyright 2020-2022 Robert Bosch GmbH
+#
+#  Licensed under the Apache License, Version 2.0 (the "License");
+#  you may not use this file except in compliance with the License.
+#  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+#  Unless required by applicable law or agreed to in writing, software
+#  distributed under the License is distributed on an "AS IS" BASIS,
+#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#  See the License for the specific language governing permissions and
+#  limitations under the License.
+#
+# **************************************************************************************************************
+#
+# CRepositoryConfig.py
+#
+# XC-CT/ECA3-Queckenstedt
+#
+# Purpose:
+# - Compute and store all repository specific information, like the repository name,
+#   paths to repository subfolder, paths to interpreter and so on ...
+#
+# - All paths to subfolder depends on the repository root path that has to be provided
+#   to constructor of CRepositoryConfig
+# 
+# --------------------------------------------------------------------------------------------------------------
+#
+# 01.07.2022
+#
+# --------------------------------------------------------------------------------------------------------------
+
+import os, sys, platform, shlex, subprocess, json
+import colorama as col
+import pypandoc
+
+from PythonExtensionsCollection.String.CString import CString
+
+from JsonPreprocessor.version import VERSION
+from JsonPreprocessor.version import VERSION_DATE
+
+col.init(autoreset=True)
+COLBR = col.Style.BRIGHT + col.Fore.RED
+COLBG = col.Style.BRIGHT + col.Fore.GREEN
+
+# --------------------------------------------------------------------------------------------------------------
+
+def printerror(sMsg):
+    sys.stderr.write(COLBR + f"Error: {sMsg}!\n")
+
+def printexception(sMsg):
+    sys.stderr.write(COLBR + f"Exception: {sMsg}!\n")
+
+# --------------------------------------------------------------------------------------------------------------
+
+class CRepositoryConfig():
+
+    def __init__(self, sCalledBy=None):
+
+        # TODO: error handling sCalledBy=None
+        sCalledBy = CString.NormalizePath(sCalledBy)
+        self.__sReferencePath = os.path.dirname(sCalledBy)
+
+        self.__dictRepositoryConfig = None # initialized below by json.load()
+
+        # load static configuration values (name of json file is fix)
+        sRepositoryConfigurationFile = CString.NormalizePath(f"{self.__sReferencePath}/config/repository_config.json")
+        hRepositoryConfigurationFile = open(sRepositoryConfigurationFile)
+        self.__dictRepositoryConfig = json.load(hRepositoryConfigurationFile)
+        hRepositoryConfigurationFile.close()
+
+        # add further infos
+        # (to have the possibility to print out all values with help of 'PrintConfig()')
+        self.__dictRepositoryConfig['CALLEDBY']                    = sCalledBy
+        self.__dictRepositoryConfig['CWD']                         = os.getcwd()
+        self.__dictRepositoryConfig['REFERENCEPATH']               = self.__sReferencePath
+        self.__dictRepositoryConfig['REPOSITORYCONFIGURATIONFILE'] = sRepositoryConfigurationFile
+
+        # add version and date of the package this repository configuration belongs to
+        self.__dictRepositoryConfig['PACKAGEVERSION'] = VERSION
+        self.__dictRepositoryConfig['PACKAGEDATE']    = VERSION_DATE
+
+        # make absolute path to package documentation
+        self.__dictRepositoryConfig['PACKAGEDOC'] = CString.NormalizePath(sPath=self.__dictRepositoryConfig['PACKAGEDOC'], sReferencePathAbs=self.__sReferencePath)
+
+        # compute dynamic configuration values
+        bSuccess, sResult = self.__InitConfig()
+        if bSuccess != True:
+            raise Exception(sResult)
+        print(COLBG + sResult)
+        print()
+
+
+    def __del__(self):
+        del self.__dictRepositoryConfig
+
+
+    def __InitConfig(self):
+
+        sOSName         = os.name
+        sPlatformSystem = platform.system()
+        sPythonPath     = CString.NormalizePath(os.path.dirname(sys.executable))
+        sPython         = CString.NormalizePath(sys.executable)
+        sPythonVersion  = sys.version
+
+        sInstalledPackageFolder = None
+
+        try:
+            # try to access pandoc; if not installed we detect this already here as early as possible
+            pypandoc.get_pandoc_path()
+        except Exception as ex:
+            bSuccess = False
+            sResult  = str(ex)
+            return bSuccess, sResult
+
+        if sPlatformSystem == "Windows":
+            sInstalledPackageFolder = f"{sPythonPath}/Lib/site-packages/" + self.__dictRepositoryConfig['PACKAGENAME']
+        elif sPlatformSystem == "Linux":
+            sInstalledPackageFolder = f"{sPythonPath}/../lib/python3.9/site-packages/" + self.__dictRepositoryConfig['PACKAGENAME']
+        else:
+            bSuccess = False
+            sResult  = f"Operating system {sPlatformSystem} ({sOSName}) not supported"
+            return bSuccess, sResult
+
+        self.__dictRepositoryConfig['OSNAME']                 = sOSName
+        self.__dictRepositoryConfig['PLATFORMSYSTEM']         = sPlatformSystem
+        self.__dictRepositoryConfig['PYTHON']                 = sPython
+        self.__dictRepositoryConfig['PYTHONVERSION']          = sPythonVersion
+        self.__dictRepositoryConfig['INSTALLEDPACKAGEFOLDER'] = sInstalledPackageFolder
+
+        # ---- paths relative to repository root folder (where the scripts are located that use this module)
+
+        # ====== 1. documentation
+
+        # - README
+        self.__dictRepositoryConfig['README_RST'] = CString.NormalizePath(f"{self.__sReferencePath}/README.rst")
+        self.__dictRepositoryConfig['README_MD']  = CString.NormalizePath(f"{self.__sReferencePath}/README.md")
+
+        # The following key doesn't matter in case of the documentation builder itself is using this CRepositoryConfig.
+        # But if the documentation builder is called by other apps like setup.py, they need to know where to find.
+        self.__dictRepositoryConfig['DOCUMENTATIONBUILDER'] = CString.NormalizePath(f"{self.__sReferencePath}/genpackagedoc.py")
+
+        # - folder containing the package source files (will also contain the PDF documentation)
+        self.__dictRepositoryConfig['PACKAGESOURCEFOLDER'] = CString.NormalizePath(f"{self.__sReferencePath}/{self.__dictRepositoryConfig['PACKAGENAME']}")
+
+        # ====== 2. setuptools
+
+        self.__dictRepositoryConfig['SETUPBUILDFOLDER']           = CString.NormalizePath(f"{self.__sReferencePath}/build")
+        self.__dictRepositoryConfig['SETUPBUILDLIBFOLDER']        = CString.NormalizePath(f"{self.__sReferencePath}/build/lib")
+        self.__dictRepositoryConfig['SETUPBUILDLIBPACKAGEFOLDER'] = CString.NormalizePath(f"{self.__sReferencePath}/build/lib/{self.__dictRepositoryConfig['PACKAGENAME']}")
+        self.__dictRepositoryConfig['SETUPDISTFOLDER']            = CString.NormalizePath(f"{self.__sReferencePath}/dist")
+        EGGINFOFOLDER = self.__dictRepositoryConfig['PACKAGENAME'].replace('-', '_')
+        self.__dictRepositoryConfig['EGGINFOFOLDER']              = CString.NormalizePath(f"{self.__sReferencePath}/{EGGINFOFOLDER}.egg-info")
+
+        print()
+        print(f"Running under {sPlatformSystem} ({sOSName})")
+        self.PrintConfig()
+
+        bSuccess = True
+        sResult  = "Repository setup done"
+        return bSuccess, sResult
+
+    # eof def __InitConfig(self):
+
+
+    def PrintConfig(self):
+        # -- printing configuration to console
+        nJust = 30
+        print()
+        for sKey in self.__dictRepositoryConfig:
+            print(sKey.rjust(nJust, ' ') + " : " + str(self.__dictRepositoryConfig[sKey]))
+        print()
+    # eof def PrintConfig(self):
+
+
+    def Get(self, sName=None):
+        if ( (sName is None) or (sName not in self.__dictRepositoryConfig) ):
+            print()
+            printerror(f"Error: Configuration parameter '{sName}' not existing!")
+            # from here it's standard output:
+            print("Use instead one of:")
+            self.PrintConfig()
+            return None # returning 'None' in case of key is not existing !!!
+        else:
+            return self.__dictRepositoryConfig[sName]
+    # eof def Get(self, sName=None):
+
+
+    def GetConfig(self):
+       return self.__dictRepositoryConfig
+    # eof def GetConfig(self):
+
+# eof class CRepositoryConfig():
+
+# --------------------------------------------------------------------------------------------------------------
diff --git a/config/repository_config.json b/config/repository_config.json
new file mode 100644
index 00000000..5c378414
--- /dev/null
+++ b/config/repository_config.json
@@ -0,0 +1,19 @@
+{
+   "REPOSITORYNAME" : "python-jsonpreprocessor",
+   "PACKAGENAME" : "JsonPreprocessor",
+   "AUTHOR" : "Mai Dinh Nam Son",
+   "AUTHOREMAIL" : "son.maidinhnam@vn.bosch.com",
+   "DESCRIPTION" : "Preprocessor for json files",
+   "LONGDESCRIPTIONCONTENTTYPE" : "text/markdown",
+   "URL" : "https://github.com/test-fullautomation/python-jsonpreprocessor",
+   "PROGRAMMINGLANGUAGE" : "Programming Language :: Python :: 3",
+   "LICENCE" : "License :: OSI Approved :: Apache Software License",
+   "OPERATINGSYSTEM" : "Operating System :: OS Independent",
+   "PYTHONREQUIRES" : ">=3.0",
+   "DEVELOPMENTSTATUS" : "Development Status :: 4 - Beta",
+   "INTENDEDAUDIENCE" : "Intended Audience :: Developers",
+   "TOPIC" : "Topic :: Software Development",
+   "INSTALLREQUIRES" : ["pypandoc","colorama","GenPackageDoc","PythonExtensionsCollection"],
+   "PACKAGEDATA" : ["*.pdf"],
+   "PACKAGEDOC" : "./packagedoc"
+}
diff --git a/dump_repository_config.py b/dump_repository_config.py
new file mode 100644
index 00000000..fcc051b8
--- /dev/null
+++ b/dump_repository_config.py
@@ -0,0 +1,75 @@
+# **************************************************************************************************************
+#
+#  Copyright 2020-2022 Robert Bosch GmbH
+#
+#  Licensed under the Apache License, Version 2.0 (the "License");
+#  you may not use this file except in compliance with the License.
+#  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+#  Unless required by applicable law or agreed to in writing, software
+#  distributed under the License is distributed on an "AS IS" BASIS,
+#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#  See the License for the specific language governing permissions and
+#  limitations under the License.
+#
+# **************************************************************************************************************
+#
+# dump_repository_config.py
+#
+# XC-CT/ECA3-Queckenstedt
+#
+# dump_repository_config.py is a little helper to get deeper knowledge about the environment under which
+# the software in this repository is being executed.
+#
+# The script prints all repository configuration values to console:
+# Reference:
+# - config\repository_config.json
+# - config\CRepositoryConfig.py
+#
+# --------------------------------------------------------------------------------------------------------------
+#
+import os, sys
+
+import colorama as col
+
+from config.CRepositoryConfig import CRepositoryConfig
+
+col.init(autoreset=True)
+
+COLBR = col.Style.BRIGHT + col.Fore.RED
+COLBY = col.Style.BRIGHT + col.Fore.YELLOW
+COLBG = col.Style.BRIGHT + col.Fore.GREEN
+
+SUCCESS = 0
+ERROR   = 1
+
+# --------------------------------------------------------------------------------------------------------------
+
+def printerror(sMsg):
+    sys.stderr.write(COLBR + f"Error: {sMsg}!\n")
+
+def printexception(sMsg):
+    sys.stderr.write(COLBR + f"Exception: {sMsg}!\n")
+
+# --------------------------------------------------------------------------------------------------------------
+
+# -- setting up the repository configuration (relative to the path of this script)
+oRepositoryConfig = None
+try:
+    oRepositoryConfig = CRepositoryConfig(os.path.abspath(sys.argv[0]))
+except Exception as ex:
+    print()
+    printexception(str(ex))
+    print()
+    sys.exit(ERROR)
+
+# --------------------------------------------------------------------------------------------------------------
+
+print(COLBG + "Repository configuration dump done")
+print()
+sys.exit(SUCCESS)
+
+# --------------------------------------------------------------------------------------------------------------
+
diff --git a/genpackagedoc.py b/genpackagedoc.py
new file mode 100644
index 00000000..f948d6de
--- /dev/null
+++ b/genpackagedoc.py
@@ -0,0 +1,104 @@
+# **************************************************************************************************************
+#
+#  Copyright 2020-2022 Robert Bosch GmbH
+#
+#  Licensed under the Apache License, Version 2.0 (the "License");
+#  you may not use this file except in compliance with the License.
+#  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+#  Unless required by applicable law or agreed to in writing, software
+#  distributed under the License is distributed on an "AS IS" BASIS,
+#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#  See the License for the specific language governing permissions and
+#  limitations under the License.
+#
+# **************************************************************************************************************
+#
+# genpackagedoc.py
+#
+# XC-CT/ECA3-Queckenstedt
+#
+# --------------------------------------------------------------------------------------------------------------
+#
+# 29.06.2022
+#
+# --------------------------------------------------------------------------------------------------------------
+
+import os, sys
+
+import colorama as col
+
+from config.CRepositoryConfig import CRepositoryConfig # providing repository and environment specific information
+from GenPackageDoc.CPackageDocConfig import CPackageDocConfig
+from GenPackageDoc.CDocBuilder import CDocBuilder
+
+col.init(autoreset=True)
+
+COLBR = col.Style.BRIGHT + col.Fore.RED
+COLBY = col.Style.BRIGHT + col.Fore.YELLOW
+COLBG = col.Style.BRIGHT + col.Fore.GREEN
+
+SUCCESS = 0
+ERROR   = 1
+
+# --------------------------------------------------------------------------------------------------------------
+
+def printerror(sMsg):
+    sys.stderr.write(COLBR + f"Error: {sMsg}!\n")
+
+def printexception(sMsg):
+    sys.stderr.write(COLBR + f"Exception: {sMsg}!\n")
+
+# --------------------------------------------------------------------------------------------------------------
+
+# -- setting up the repository configuration (relative to the path of this script)
+oRepositoryConfig = None
+try:
+    oRepositoryConfig = CRepositoryConfig(os.path.abspath(sys.argv[0]))
+except Exception as ex:
+    print()
+    printexception(str(ex))
+    print()
+    sys.exit(ERROR)
+
+# -- setting up the GenPackageDoc configuration
+oGenPackageDocConfig = None
+try:
+    oPackageDocConfig = CPackageDocConfig(oRepositoryConfig)
+except Exception as ex:
+    print()
+    printexception(str(ex))
+    print()
+    sys.exit(ERROR)
+
+# -- setting up and calling the doc builder
+try:
+    oDocBuilder = CDocBuilder(oPackageDocConfig)
+except Exception as ex:
+    print()
+    printexception(str(ex))
+    print()
+    sys.exit(ERROR)
+
+bSuccess, sResult = oDocBuilder.Build()
+if bSuccess is None:
+    print()
+    printexception(sResult)
+    print()
+    sys.exit(ERROR)
+elif bSuccess is False:
+    print()
+    printerror(sResult)
+    print()
+    sys.exit(ERROR)
+else:
+   print(COLBY + sResult)
+   print()
+   print(COLBG + "genpackagedoc done")
+   print()
+   sys.exit(SUCCESS)
+
+# --------------------------------------------------------------------------------------------------------------
+
diff --git a/packagedoc/additional_docs/Appendix.rst b/packagedoc/additional_docs/Appendix.rst
new file mode 100644
index 00000000..d70d0c0b
--- /dev/null
+++ b/packagedoc/additional_docs/Appendix.rst
@@ -0,0 +1,37 @@
+.. Copyright 2020-2022 Robert Bosch GmbH
+
+.. Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+.. http://www.apache.org/licenses/LICENSE-2.0
+
+.. Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+**About this package:**
+
+.. table:: Package setup
+   :widths: auto
+
+   ==================  =========================
+   Setup parameter               Value
+   ==================  =========================
+   Name                ###PACKAGENAME###
+   Version             ###PACKAGEVERSION###
+   Date                ###PACKAGEDATE###
+   Description         ###DESCRIPTION###
+   Package URL         `###REPOSITORYNAME### <###URL###>`_
+   Author              ###AUTHOR###
+   Email               ###AUTHOREMAIL###
+   Language            ###PROGRAMMINGLANGUAGE###
+   License             ###LICENCE###
+   OS                  ###OPERATINGSYSTEM###
+   Python required     ###PYTHONREQUIRES###
+   Development status  ###DEVELOPMENTSTATUS###
+   Intended audience   ###INTENDEDAUDIENCE###
+   Topic               ###TOPIC###
+   ==================  =========================
diff --git a/packagedoc/additional_docs/Description.rst b/packagedoc/additional_docs/Description.rst
new file mode 100644
index 00000000..66b4088c
--- /dev/null
+++ b/packagedoc/additional_docs/Description.rst
@@ -0,0 +1,24 @@
+.. Copyright 2020-2022 Robert Bosch GmbH
+
+.. Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+.. http://www.apache.org/licenses/LICENSE-2.0
+
+.. Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+The json preprocessor:
+
+.. image:: ./pictures/python3-jsonpreprocessor.png
+
+
+
+TO BE CONTINUED
+
+
+
diff --git a/packagedoc/additional_docs/Description_orig.rst b/packagedoc/additional_docs/Description_orig.rst
new file mode 100644
index 00000000..7651ae7a
--- /dev/null
+++ b/packagedoc/additional_docs/Description_orig.rst
@@ -0,0 +1,420 @@
+.. Copyright 2020-2022 Robert Bosch GmbH
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+Json Preprocessor's Feature Documentation
+=========================================
+
+Introduction:
+-------------
+
+.. image:: /images/python3-jsonpreprocessor.png
+
+The JsonPreprocessor is a Python3 package which allows programmers to handle  
+additional features in json files such as
+
+* add comments
+* import other json files
+* overwrite already existing parameters with new values
+
+These json files will be handled by the JsonPreprocessor package which returns as result
+a dictionary object of the deserialized data.
+
+New features
+~~~~~~~~~~~~
+
+`Adding comments to Json file`_
+
+`Import the contents from other json files`_
+
+`Overwrite existing and add new parameters`_
+
+`Nested parameters`_
+
+Features in details
+-------------------
+
+Adding comments to Json file
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Every line starting with **"//"**, is commented out. Therefore a comment is valid for singles lines only.
+
+Comment out a block of several lines with only one start and one end comment string, is currently not supported.
+
+Adding comments to json files is useful in case of more and more content is added, e.g. because of a json file
+has to hold a huge number of configuration parameters for different features. Comments can be used here
+to clarify the meaning of these parameters or the differences between them.
+
+**Example:**
+
+.. code-block::
+
+   //*****************************************************************************
+   //  Author: ROBFW-AIO Team
+   //
+   //  This file defines all common global parameters and will be included to all
+   //  test config files
+   //*****************************************************************************
+   {
+     "Project": "G3g",
+     "WelcomeString": "Hello... ROBFW is running now!",
+     // Version control information.
+     "version": {
+       "majorversion": "0",
+       "minorversion": "1",
+       "patchversion": "1"
+     },
+     "params": {
+       // Global parameters
+       "global": {
+         "gGlobalIntParam" : 1,
+         "gGlobalFloatParam" : 1.332,  // This parameter is used to configure for ....
+         "gGlobalString"   : "This is a string",
+         "gGlobalStructure": {
+           "general": "general"
+         }
+       }
+     },
+     "preprocessor": {
+       "definitions": {
+         // FEATURE switches
+         "gPreprolIntParam" : 1,
+         "gPreproFloatParam" : 1.332,
+   	  // The parameter for feature ABC
+         "gPreproString"   : "This is a string",
+         "gPreproStructure": {
+                            "general": "general"
+                           }
+         }
+     },
+     "TargetName" : "gen3flex@dlt"
+   }
+
+Import the contents from other json files
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+This import feature enables developers to take over the content of other json files into the 
+current json file. A json file that is imported into another json file, can contain imports also
+(allows nested imports).
+
+A possible usecase for nested imports is to handle similar configuration parameters of different variants of a feature
+or a component within a bunch of several smaller files, instead of putting all parameter into only one large json file.
+
+**Example:**
+
+Suppose we have the json file ``params_global.json`` with the content:
+
+.. code-block::
+
+         //*****************************************************************************
+         //  Author: ROBFW-AIO Team
+         //
+         //  This file defines all common global parameters and will be included to all
+         //  test config files
+         //*****************************************************************************
+         //
+         //  This is to distinguish the different types of resets
+         {
+           "gGlobalIntParam" : 1,
+         
+           "gGlobalFloatParam" : 1.332, // This parameter is used to configure for ....
+           
+           "gGlobalString"   : "This is a string",
+            
+           "gGlobalStructure": {
+             "general": "general"
+           }
+         }
+
+And other json file ``preprocessor_definitions.json`` with content:
+
+.. code-block::
+
+         //*****************************************************************************
+         //  Author: ROBFW-AIO Team
+         //
+         //  This file defines all common global parameters and will be included to all
+         //  test config files
+         //*****************************************************************************
+         {
+           "gPreprolIntParam" : 1,
+           
+           "gPreproFloatParam" : 1.332,
+           // The parameter for feature ABC
+           "gPreproString"   : "This is a string",
+            
+           "gPreproStructure": {
+                                  "general": "general"
+                               }
+         }
+
+Then we can import these 2 files above to the json file ``config.json`` with content:
+
+.. code-block::
+
+         //*****************************************************************************
+         //  Author: ROBFW-AIO Team
+         //
+         //  This file defines all common global parameters and will be included to all
+         //  test config files
+         //*****************************************************************************
+         {
+           "Project": "G3g",
+           "WelcomeString": "Hello... ROBFW is running now!",
+           // Version control information.
+           "version": {
+             "majorversion": "0",
+             "minorversion": "1",
+             "patchversion": "1"
+           },
+           "params": {
+             // Global parameters
+             "global": {
+         		"[import]": "/params_global.json"
+               }
+             },
+           "preprocessor": {
+             "definitions": {
+               // FEATURE switches
+                 "[import]": "/preprocessor_definitions.json"
+               }
+           },
+           "TargetName" : "gen3flex@dlt"
+         }
+
+The ``config.json`` file is handled by JsonPreprocessor package, then return the dictionary object for a program like below:
+
+.. code-block::
+
+         {
+           "Project": "G3g",
+           "WelcomeString": "Hello... ROBFW is running now!",
+           "version": {
+             "majorversion": "0",
+             "minorversion": "1",
+             "patchversion": "1"
+           },
+           "params": {
+             "global": {
+               "gGlobalIntParam" : 1,
+               "gGlobalFloatParam" : 1.332,
+               "gGlobalString"   : "This is a string",
+               "gGlobalStructure": {
+                 "general": "general"
+                 }
+             }
+           },
+           "preprocessor": {
+             "definitions": {
+               "gPreprolIntParam" : 1,
+               "gPreproFloatParam" : 1.332,
+               "gPreproString"   : "This is a string",
+               "gPreproStructure": {
+                                  "general": "general"
+                                 }
+             }
+           },
+           "TargetName" : "gen3flex@dlt"
+         }
+
+Overwrite existing and add new parameters
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+This package also provides user ability to overwrite or update as well as add new 
+parameters. User can update parameters which are already declared and add new parameters 
+or new element into existing parameters. The below example will show the way to do 
+these features.
+
+In case we have many different variants, and each variant requires a different value 
+assigned to the parameter. This feature could help us update new value for existing
+parameters, it also supports to add new parameters to existing configuation object.
+
+**Example:**
+
+Suppose we have the json file ``params_global.json`` with the content:
+
+.. code-block::
+
+         {
+           "gGlobalIntParam" : 1,
+         
+           "gGlobalFloatParam" : 1.332, // This parameter is used to configure for ....
+           
+           "gGlobalString"   : "This is a string",
+            
+           "gGlobalStructure": {
+             "general": "general"
+           }
+         }
+
+Then we import ``params_global.json`` to json file ``config.json`` with content:
+
+.. code-block::
+
+         {
+           "Project": "G3g",
+           "WelcomeString": "Hello... ROBFW is running now!",
+           // Version control information.
+           "version": {
+             "majorversion": "0",
+             "minorversion": "1",
+             "patchversion": "1"
+           },
+           "params": {
+             // Global parameters
+             "global": {
+         		"[import]": "/params_global.json"
+               }
+             },
+           "TargetName" : "gen3flex@dlt",
+           // Overwrite parameters
+           "${params}['global']['gGlobalFloatParam']": 9.999,  
+           "${version}['patchversion']": "2",
+           "${params}['global']['gGlobalString']": "This is the new value for the already existing parameter.",
+           // Add new parameters
+           "${newParam}": {
+         	  			"abc": 9,
+         				"xyz": "new param"
+           },
+           "${params}['global']['gGlobalStructure']['newGlobalParam']": 123
+         }
+
+The ``config.json`` file is handled by JsonPreprocessor package, then return the dictionary object for a program like below:
+
+.. code-block::
+
+         {
+           "Project": "G3g",
+           "WelcomeString": "Hello... ROBFW is running now!",
+           "version": {
+             "majorversion": "0",
+             "minorversion": "1",
+             "patchversion": "2"
+           },
+           "params": {
+             "global": {
+               "gGlobalIntParam" : 1,
+               "gGlobalFloatParam" : 9.999,
+               "gGlobalString"   : "This is the new value for the already existing parameter.",
+               "gGlobalStructure": {
+                 "general": "general",
+         		"newGlobalParam": 123
+                 }
+               }
+           },
+           "TargetName": "gen3flex@dlt",
+           "newParam": {
+         	  "abc": 9,
+         	  "xyz": "new param"
+           }
+         }
+
+Nested parameters
+~~~~~~~~~~~~~~~~~
+
+With JsonPreprocessor package, user can also use nested parameters as example below:
+
+**Example:**
+
+Suppose we have the json file ``config.json`` with the content:
+
+.. code-block::
+
+         {
+           "Project": "G3g",
+           "WelcomeString": "Hello... ROBFW is running now!",
+           // Version control information.
+           "version": {
+             "majorversion": "0",
+             "minorversion": "1",
+             "patchversion": "1"
+           },
+           "params": {
+             // Global parameters
+             "global": {
+               "gGlobalIntParam" : 1,
+               "gGlobalFloatParam" : 1.332, // This parameter is used to configure for ....
+               "gGlobalString"   : "This is a string",
+               "gGlobalStructure": {
+                 "general": "general"
+                 }
+             }
+           },
+           "preprocessor": {
+             "definitions": {
+               "gPreprolIntParam" : 1,
+               "gPreproFloatParam" : 9.664,
+         	  "ABC": "checkABC",
+               "gPreproString"   : "This is a string",
+               "gPreproStructure": {
+                                  "general": "general"
+                                 }
+             }
+           },
+           "TargetName" : "gen3flex@dlt",
+           // Nested parameter
+           "${params}['global'][${preprocessor}['definitions']['ABC']]": true,
+           "${params}['global']['gGlobalFloatParam']": "${preprocessor}['definitions']['gPreproFloatParam']"
+         }
+
+The ``config.json`` file is handled by JsonPreprocessor package, then return the dictionary object for a program like below:
+
+.. code-block::
+
+         {
+           "Project": "G3g",
+           "WelcomeString": "Hello... ROBFW is running now!",
+           "version": {
+             "majorversion": "0",
+             "minorversion": "1",
+             "patchversion": "1"
+           },
+           "params": {
+             "global": {
+               "gGlobalIntParam" : 1,
+               "gGlobalFloatParam" : 9.664,
+               "gGlobalString"   : "This is a string",
+               "gGlobalStructure": {
+                 "general": "general"
+                 },
+         	  "checkABC": true
+             }
+           },
+           "preprocessor": {
+             "definitions": {
+               "gPreprolIntParam" : 1,
+               "gPreproFloatParam" : 9.664,
+         	  "ABC": "checkABC",
+               "gPreproString"   : "This is a string",
+               "gPreproStructure": {
+                                  "general": "general"
+                                 }
+             }
+           },
+           "TargetName" : "gen3flex@dlt"
+         }
+
+Feedback
+--------
+
+To give us a feedback, you can send an email to `Thomas Pollerspöck `_ or
+`RBVH-ECM-Automation_Test_Framework-Associates `_
+
+In case you want to report a bug or request any interesting feature, please don't hesitate to raise a ticket on 
+`our Jira `_
+
+References
+----------
+
+For more information please refer to our `Bosch Connect Community `_
+
diff --git a/packagedoc/additional_docs/History.tex b/packagedoc/additional_docs/History.tex
new file mode 100644
index 00000000..d529af95
--- /dev/null
+++ b/packagedoc/additional_docs/History.tex
@@ -0,0 +1,20 @@
+% Copyright 2020-2022 Robert Bosch GmbH
+
+% Licensed under the Apache License, Version 2.0 (the "License");
+% you may not use this file except in compliance with the License.
+% You may obtain a copy of the License at
+
+% http://www.apache.org/licenses/LICENSE-2.0
+
+% Unless required by applicable law or agreed to in writing, software
+% distributed under the License is distributed on an "AS IS" BASIS,
+% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+% See the License for the specific language governing permissions and
+% limitations under the License.
+
+\begin{center}
+\begin{tabular}{| m{6em} | m{26em} |}\hline
+    \textbf{0.1.0} & 01/2022\\ \hline
+    \multicolumn{2}{| m{32em} |}{\textit{Initial version}}\\ \hline
+\end{tabular}
+\end{center}
diff --git a/packagedoc/additional_docs/Introduction.rst b/packagedoc/additional_docs/Introduction.rst
new file mode 100644
index 00000000..7e72e6c3
--- /dev/null
+++ b/packagedoc/additional_docs/Introduction.rst
@@ -0,0 +1,17 @@
+.. Copyright 2020-2022 Robert Bosch GmbH
+
+.. Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+.. http://www.apache.org/licenses/LICENSE-2.0
+
+.. Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+*Json Preprocessor*
+
+!!! add introduction - if wanted !!
diff --git a/packagedoc/additional_docs/pictures/python3-jsonpreprocessor.png b/packagedoc/additional_docs/pictures/python3-jsonpreprocessor.png
new file mode 100644
index 0000000000000000000000000000000000000000..a691ae94541b94c469758043854d009da82f795f
GIT binary patch
literal 101520
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
cpfLscmVai=8->W&I*A|uN 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\Lib\site-packages (Windows) @@ -44,9 +44,9 @@ # The usual # packages = setuptools.find_packages(), # is replaced by -# packages = [str(oRepositoryConfig.Get('sPackageName')), ], -# to avoid that also config.CConfig() and config.CExtendedSetup() are part of the distribution. -# CConfig and CExtendedSetup() are only repository internal helper. +# packages = [str(oRepositoryConfig.Get('PACKAGENAME')), ], +# to avoid that also config.CRepositoryConfig() and additions.CExtendedSetup() are part of the distribution. +# CRepositoryConfig and CExtendedSetup() are only repository internal helper. # # * Known issues: # @@ -60,21 +60,7 @@ # # -------------------------------------------------------------------------------------------------------------- # -# 21.02.2022 / XC-CT/ECA3-Queckenstedt -# -# "sdist bdist_wheel" maintenance: some steps moved from inside 'ExtendedInstallCommand' to outside -# -# 09.02.2022 / XC-CT/ECA3-Queckenstedt -# Suppressed generation of documents and installations in case of command line -# parameter is not 'install' and not 'build' (this enables printing the help only). (10.02.2022: and not 'sdist') -# -# 11.10.2021 / XC-CI1/ECA3-Queckenstedt -# Fixed computation order of readme files together with long_description -# -# 30.09.2021 / XC-CI1/ECA3-Queckenstedt -# Added wrapper for error messages -# -# Initial version 08/2021 +# 30.06.2022 # # -------------------------------------------------------------------------------------------------------------- @@ -82,8 +68,11 @@ import setuptools from setuptools.command.install import install -from config.CConfig import CConfig # providing repository and environment specific information -from config.CExtendedSetup import CExtendedSetup # providing functions to support the extended setup process +# prefer the repository local version of all additional libraries (instead of the installed version under site-packages) +sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), "./additions"))) + +from config.CRepositoryConfig import CRepositoryConfig # providing repository and environment specific information +from additions.CExtendedSetup import CExtendedSetup # providing functions to support the extended setup process import colorama as col @@ -113,28 +102,7 @@ def run(self): listCmdArgs = sys.argv if ( ('install' in listCmdArgs) or ('build' in listCmdArgs) or ('sdist' in listCmdArgs) or ('bdist_wheel' in listCmdArgs) ): - print() - print(COLBY + "Extended setup step 4/5: install.run(self)") # creates the build folder .\build - print() - install.run(self) # TODO: What does install.run(self) return? How to realize error handling? - print() - if 'bdist_wheel' in listCmdArgs: - print(COLBY + "Extended setup step 5/5: Add html documentation to local wheel folder inside build") - print() - nReturn = oExtendedSetup.add_htmldoc_to_wheel() - if nReturn != SUCCESS: - return nReturn - print() - else: - print(COLBY + "Extended setup step 5/5: Add html documentation to package installation folder") # (./doc/_build/html to \Lib\site-packages\_doc) - print() - nReturn = oExtendedSetup.add_htmldoc_to_installation() - if nReturn != SUCCESS: - return nReturn - print() - print(COLBG + "Extended installation done") - print() - + install.run(self) return SUCCESS # eof class ExtendedInstallCommand(install): @@ -146,9 +114,8 @@ def run(self): # -- setting up the repository configuration oRepositoryConfig = None -sReferencePath = os.path.dirname(os.path.abspath(sys.argv[0])) try: - oRepositoryConfig = CConfig(sReferencePath) + oRepositoryConfig = CRepositoryConfig(os.path.abspath(sys.argv[0])) except Exception as ex: print() printexception(str(ex)) @@ -176,59 +143,79 @@ def run(self): print() print(COLBY + "Extended setup step 1/5: Calling the documentation builder") - # (previously called inside ExtendedInstallCommand - but this is too late, because the content of the initially - # generated or updated README file is already needed for the long_description below.) print() - nReturn = oExtendedSetup.gen_doc() + + nReturn = oExtendedSetup.genpackagedoc() + if nReturn != SUCCESS: + sys.exit(nReturn) + + print(COLBY + "Extended setup step 2/5: Converting the repository README") + print() + + nReturn = oExtendedSetup.convert_repo_readme() if nReturn != SUCCESS: sys.exit(nReturn) - print(COLBY + "Extended setup step 2/5: Deleting previous setup outputs (build, dist, .egg-info within repository)") + print(COLBY + "Extended setup step 3/5: Deleting previous setup outputs (build, dist, .egg-info within repository)") print() nReturn = oExtendedSetup.delete_previous_build() if nReturn != SUCCESS: sys.exit(nReturn) - if not 'bdist_wheel' in listCmdArgs: + if ( ('bdist_wheel' in listCmdArgs) or ('build' in listCmdArgs) ): + print() + print(COLBY + "Skipping extended setup step 4/5: Deleting previous package installation folder within site-packages") + print() + else: print() - print(COLBY + "Extended setup step 3/5: Deleting previous package installation folder within site-packages") # ( and _doc under \Lib\site-packages + print(COLBY + "Extended setup step 4/5: Deleting previous package installation folder within site-packages") # ( and _doc under \Lib\site-packages print() nReturn = oExtendedSetup.delete_previous_installation() if nReturn != SUCCESS: sys.exit(nReturn) - with open("README.md", "r", encoding="utf-8") as fh: + README_MD = str(oRepositoryConfig.Get('README_MD')) + with open(README_MD, "r", encoding="utf-8") as fh: long_description = fh.read() - print() - + fh.close() # -------------------------------------------------------------------------------------------------------------- -# This also handles the printing of help to console and therefore must be called in every case. -# And therefore all variables and objects must exist (even in case of the values are not used). +# -- the 'setup' itself + +print(COLBY + "Extended setup step 5/5: install.run(self)") +print() + setuptools.setup( - name = str(oRepositoryConfig.Get('sPackageName')), - version = str(oRepositoryConfig.Get('sVersion')), - author = str(oRepositoryConfig.Get('sAuthor')), - author_email = str(oRepositoryConfig.Get('sAuthorEMail')), - description = str(oRepositoryConfig.Get('sDescription')), + name = str(oRepositoryConfig.Get('PACKAGENAME')), + version = str(oRepositoryConfig.Get('PACKAGEVERSION')), + author = str(oRepositoryConfig.Get('AUTHOR')), + author_email = str(oRepositoryConfig.Get('AUTHOREMAIL')), + description = str(oRepositoryConfig.Get('DESCRIPTION')), long_description = long_description, - long_description_content_type = str(oRepositoryConfig.Get('sLongDescriptionContentType')), - url = str(oRepositoryConfig.Get('sURL')), - packages = [str(oRepositoryConfig.Get('sPackageName')), ], + long_description_content_type = str(oRepositoryConfig.Get('LONGDESCRIPTIONCONTENTTYPE')), + url = str(oRepositoryConfig.Get('URL')), + packages = [str(oRepositoryConfig.Get('PACKAGENAME')),], classifiers = [ - str(oRepositoryConfig.Get('sProgrammingLanguage')), - str(oRepositoryConfig.Get('sLicence')), - str(oRepositoryConfig.Get('sOperatingSystem')), - str(oRepositoryConfig.Get('sDevelopmentStatus')), - str(oRepositoryConfig.Get('sIntendedAudience')), - str(oRepositoryConfig.Get('sTopic')), + str(oRepositoryConfig.Get('PROGRAMMINGLANGUAGE')), + str(oRepositoryConfig.Get('LICENCE')), + str(oRepositoryConfig.Get('OPERATINGSYSTEM')), + str(oRepositoryConfig.Get('DEVELOPMENTSTATUS')), + str(oRepositoryConfig.Get('INTENDEDAUDIENCE')), + str(oRepositoryConfig.Get('TOPIC')), ], - python_requires = str(oRepositoryConfig.Get('sPythonRequires')), + python_requires = str(oRepositoryConfig.Get('PYTHONREQUIRES')), cmdclass={ 'install': ExtendedInstallCommand, }, - install_requires = oRepositoryConfig.Get('arInstallRequires'), + install_requires = oRepositoryConfig.Get('INSTALLREQUIRES'), + package_data={f"{oRepositoryConfig.Get('PACKAGENAME')}" : oRepositoryConfig.Get('PACKAGEDATA')}, ) # -------------------------------------------------------------------------------------------------------------- +print() +print(COLBG + "Extended installation done") +print() + +# -------------------------------------------------------------------------------------------------------------- + diff --git a/sphinx-makeall.py b/sphinx-makeall.py deleted file mode 100644 index 8b5d87d8..00000000 --- a/sphinx-makeall.py +++ /dev/null @@ -1,344 +0,0 @@ -# ************************************************************************************************************** -# -# Copyright 2020-2022 Robert Bosch GmbH -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -# ************************************************************************************************************** -# -# sphinx-makeall.py -# -# XC-CT/ECA3-Queckenstedt -# -# Uses the Python documentation tool Sphinx to generate the documentation of Python modules -# - based on the docstrings inside the Python modules and -# - based on additionally included separate text files (containing usually more common information -# than the docstrings of the Python modules). -# -# The docstrings and the additionally included text files have to be written in reStructureText syntax. -# The output is available in HTML format and in LaTeX format (.tex), optionally also in PDF. -# -# Preconditions: -# - Sphinx available as part of the Python installation. -# - Sphinx documentation project files already created and adapted to the local repository -# (see conf.py and index.rst). -# - LaTeX compiler (in case of output in PDF format is wanted) -# - pandoc and pypandoc for conversions between markdown formats -# -# Known issues: -# - LaTeX compiler throws some warnings when computing Sphinx output. -# -# -------------------------------------------------------------------------------------------------------------- -# -# 02.11.2021 / XC-CT/ECA3-Queckenstedt -# gen_doc_pdf called twice (to get also a table of content added to PDF file) -# -# 30.09.2021 / XC-CI1/ECA3-Queckenstedt -# Added wrapper for error messages -# -# Initial version 08/2021 -# -# -------------------------------------------------------------------------------------------------------------- - -import os, sys, platform, shlex, subprocess - -import pypandoc - -from config.CConfig import CConfig # providing repository and environment specific information - -import colorama as col - -col.init(autoreset=True) - -COLBR = col.Style.BRIGHT + col.Fore.RED -COLBY = col.Style.BRIGHT + col.Fore.YELLOW -COLBG = col.Style.BRIGHT + col.Fore.GREEN - -SUCCESS = 0 -ERROR = 1 - -# -------------------------------------------------------------------------------------------------------------- - -def printerror(sMsg): - sys.stderr.write(COLBR + f"Error: {sMsg}!\n") - -def printexception(sMsg): - sys.stderr.write(COLBR + f"Exception: {sMsg}!\n") - -# -------------------------------------------------------------------------------------------------------------- - -def convert_repo_readme(oRepositoryConfig=None): - """Converts the main repository README from 'rst' to 'md' format. - """ - - if oRepositoryConfig is None: - print() - printerror("oRepositoryConfig is None") - print() - return ERROR - - sReadMe_rst = oRepositoryConfig.Get("sReadMe_rst") - if sReadMe_rst is None: - return ERROR - - sReadMe_md = oRepositoryConfig.Get("sReadMe_md") - if sReadMe_md is None: - return ERROR - - if os.path.isfile(sReadMe_rst) is False: - print() - printerror(f"Missing readme file '{sReadMe_rst}'") - print() - return ERROR - - sFileContent = pypandoc.convert_file(sReadMe_rst, 'md') - hFile_md = open(sReadMe_md, "w", encoding="utf-8") - listFileContent = sFileContent.splitlines() - for sLine in listFileContent: - hFile_md.write(sLine + "\n") - hFile_md.close() - - print() - print(COLBY + f"File '{sReadMe_rst}'") - print(COLBY + "converted to") - print(COLBY + f"'{sReadMe_md}'") - print() - - return SUCCESS - -# eof def convert_repo_readme(oRepositoryConfig=None): - -# -------------------------------------------------------------------------------------------------------------- - -def sphinx_build(sFormat=None, oRepositoryConfig=None): - """Executes Sphinx to generate the documentation in format 'sFormat'. - """ - - if sFormat is None: - print() - printerror("sFormat is None") - print() - return ERROR - - if oRepositoryConfig is None: - print() - printerror("oRepositoryConfig is None") - print() - return ERROR - - SPHINXBUILD = oRepositoryConfig.Get("SPHINXBUILD") - if SPHINXBUILD is None: - return ERROR - - SOURCEDIR = oRepositoryConfig.Get("SOURCEDIR") - if SOURCEDIR is None: - return ERROR - - BUILDDIR = oRepositoryConfig.Get("BUILDDIR") - if BUILDDIR is None: - return ERROR - - sPython = oRepositoryConfig.Get("sPython") - if sPython is None: - return ERROR - - listCmdLineParts = [] - listCmdLineParts.append(f"\"{sPython}\"") - listCmdLineParts.append(f"\"{SPHINXBUILD}\"") - listCmdLineParts.append(f"-M {sFormat}") - listCmdLineParts.append(f"\"{SOURCEDIR}\"") - listCmdLineParts.append(f"\"{BUILDDIR}\"") - - sCmdLine = " ".join(listCmdLineParts) - del listCmdLineParts - listCmdLineParts = shlex.split(sCmdLine) - - # -- debug - sCmdLine = " ".join(listCmdLineParts) - print() - print("Now executing command line:\n" + sCmdLine) - print() - - nReturn = ERROR - try: - nReturn = subprocess.call(listCmdLineParts) - except Exception as ex: - printexception(str(ex)) - print() - return ERROR - - print() - - return nReturn - -# eof def sphinx_build(sFormat=None, oRepositoryConfig=None): - -# -------------------------------------------------------------------------------------------------------------- - -def gen_doc_pdf(oRepositoryConfig=None): - """Executes LaTeX to generate the documentation in PDF format (based on previously generated LaTeX format). - """ - - if oRepositoryConfig is None: - print() - printerror("oRepositoryConfig is None") - print() - return ERROR - - print() # empty line after Sphinx console output - for better readibility - - BUILDDIR = oRepositoryConfig.Get("BUILDDIR") - if BUILDDIR is None: - return ERROR - - sLaTeXInterpreter = oRepositoryConfig.Get("sLaTeXInterpreter") - if sLaTeXInterpreter is None: - return ERROR - - # LaTeX sources are placed by Sphinx within subfolder 'latex' of folder 'BUILDDIR' - sLaTeXRoot = os.path.normpath(f"{BUILDDIR}/latex") # not part of oRepositoryConfig; only needed here! - if os.path.isdir(sLaTeXRoot) is False: - print() - printerror(f"Missing LaTeX documentation folder '{sLaTeXRoot}'") - print() - return ERROR - - # Not really sure which name of main tex file we can expect here; therefore scanning for tex files and compute all of them - # (but usually only one tex file is expected) - listTeXFiles = [] - for root, dirs, files in os.walk(sLaTeXRoot): - for name in files: - if name.lower().endswith(".tex"): - sTeXFile = os.path.join(root, name) - listTeXFiles.append(sTeXFile) - - if len(listTeXFiles) == 0: - print() - printerror(f"Missing LaTeX source files (.tex) within '{sLaTeXRoot}'") - print() - return ERROR - - for sTeXFile in listTeXFiles: - print(COLBY + f"* Rendering file '{sTeXFile}'") - print() - - listCmdLineParts = [] - listCmdLineParts.append(f"\"{sLaTeXInterpreter}\"") - listCmdLineParts.append(f"\"{sTeXFile}\"") - - sCmdLine = " ".join(listCmdLineParts) - del listCmdLineParts - listCmdLineParts = shlex.split(sCmdLine) - - # -- debug - # sCmdLine = " ".join(listCmdLineParts) - # print("Now executing command line:\n" + sCmdLine) - # print() - - nReturn = ERROR - cwd = os.getcwd() # we have to save cwd because later we have to change - try: - os.chdir(sLaTeXRoot) # otherwise LaTeX compiler is not able to find files inside - nReturn = subprocess.call(listCmdLineParts) - print() - print(f"LaTeX compiler returned {nReturn}") - print() - os.chdir(cwd) # restore original value - except Exception as ex: - printexception(str(ex)) - print() - os.chdir(cwd) # restore original value - return ERROR - - if nReturn != SUCCESS: - printerror(f"LaTeX compiler not returned expected value {SUCCESS}") - print() - return nReturn - - # finally let's see what has been generated - for root, dirs, files in os.walk(sLaTeXRoot): - for name in files: - if name.lower().endswith(".pdf"): - sPDFFile = os.path.join(root, name) - print(COLBY + f"* Created '{sPDFFile}'") - print() - - return nReturn - -# eof def gen_doc_pdf(oRepositoryConfig=None): - -# -------------------------------------------------------------------------------------------------------------- - -# -- setting up the repository configuration (relative to the path of this script) -oRepositoryConfig = None -sReferencePath = os.path.dirname(os.path.abspath(sys.argv[0])) -try: - oRepositoryConfig = CConfig(sReferencePath) -except Exception as ex: - print() - printexception(str(ex)) - print() - sys.exit(ERROR) - -# -- converting the main repository README from 'rst' to 'md' format -nReturn = convert_repo_readme(oRepositoryConfig) -if nReturn != SUCCESS: - printerror("convert_repo_readme with 'README.rst' failed") - print() - sys.exit(nReturn) - -# -- removing previous output in documentation build folder -nReturn = sphinx_build("clean", oRepositoryConfig) -if nReturn != SUCCESS: - printerror("sphinx_build 'clean' failed") - print() - sys.exit(nReturn) - -# -- generating new documentation in HTML format -nReturn = sphinx_build("html", oRepositoryConfig) -if nReturn != SUCCESS: - printerror("sphinx_build 'html' failed") - print() - sys.exit(nReturn) - -# -- generating new documentation in LaTeX format -nReturn = sphinx_build("latex", oRepositoryConfig) -if nReturn != SUCCESS: - printerror("sphinx_build 'latex' failed") - print() - sys.exit(nReturn) - -# -- generating new documentation in PDF format (requires configured LaTeX) -sLaTeXInterpreter = oRepositoryConfig.Get('sLaTeXInterpreter') -if sLaTeXInterpreter is not None: - print("Calling LaTeX PDF renderer (1/2)") - nReturn = gen_doc_pdf(oRepositoryConfig) - if nReturn != SUCCESS: - printerror("PDF generation failed") - print() - sys.exit(nReturn) - print("Calling LaTeX PDF renderer (2/2) - to get referencs and table of content updated") - nReturn = gen_doc_pdf(oRepositoryConfig) - if nReturn != SUCCESS: - printerror("PDF generation failed") - print() - sys.exit(nReturn) - -# -------------------------------------------------------------------------------------------------------------- - -print(COLBG + "sphinx-makeall done") -print() -sys.exit(SUCCESS) - -# -------------------------------------------------------------------------------------------------------------- -