From a0633eddc2678ddc68434a937e220e41b58f2558 Mon Sep 17 00:00:00 2001 From: usmannasir <01-134132-158@student.bahria.edu.pk> Date: Fri, 2 Mar 2018 18:13:26 +0500 Subject: [PATCH] Minor bug fixes to Cron. --- CyberCP/__init__.pyc | Bin 125 -> 137 bytes CyberCP/settings.py | 4 +- CyberCP/settings.pyc | Bin 3761 -> 3773 bytes CyberCP/urls.pyc | Bin 1935 -> 1935 bytes CyberCP/wsgi.pyc | Bin 583 -> 583 bytes api/__init__.pyc | Bin 121 -> 133 bytes api/admin.pyc | Bin 242 -> 254 bytes api/migrations/__init__.pyc | Bin 132 -> 132 bytes api/models.pyc | Bin 239 -> 251 bytes api/urls.pyc | Bin 1364 -> 1364 bytes api/views.pyc | Bin 17365 -> 16724 bytes backup/__init__.pyc | Bin 124 -> 136 bytes backup/admin.pyc | Bin 341 -> 353 bytes backup/backupRouter.pyc | Bin 1674 -> 1674 bytes backup/migrations/__init__.pyc | Bin 135 -> 135 bytes backup/models.pyc | Bin 3129 -> 3165 bytes backup/urls.pyc | Bin 2136 -> 2136 bytes backup/views.pyc | Bin 36067 -> 33426 bytes baseTemplate/__init__.pyc | Bin 130 -> 142 bytes baseTemplate/admin.pyc | Bin 251 -> 263 bytes baseTemplate/migrations/__init__.pyc | Bin 141 -> 141 bytes baseTemplate/models.pyc | Bin 564 -> 588 bytes baseTemplate/urls.pyc | Bin 731 -> 731 bytes baseTemplate/views.pyc | Bin 7220 -> 7081 bytes databases/__init__.pyc | Bin 127 -> 139 bytes databases/admin.pyc | Bin 330 -> 342 bytes databases/migrations/__init__.pyc | Bin 138 -> 138 bytes databases/models.pyc | Bin 692 -> 716 bytes databases/urls.pyc | Bin 769 -> 769 bytes databases/views.pyc | Bin 8699 -> 8699 bytes dns/__init__.pyc | Bin 121 -> 133 bytes dns/admin.pyc | Bin 433 -> 445 bytes dns/migrations/__init__.pyc | Bin 132 -> 132 bytes dns/models.pyc | Bin 4719 -> 4899 bytes dns/urls.pyc | Bin 988 -> 988 bytes dns/views.pyc | Bin 11047 -> 10480 bytes filemanager/__init__.pyc | Bin 129 -> 141 bytes filemanager/admin.pyc | Bin 250 -> 262 bytes filemanager/migrations/__init__.pyc | Bin 140 -> 140 bytes filemanager/models.pyc | Bin 247 -> 259 bytes filemanager/urls.pyc | Bin 516 -> 379 bytes filemanager/views.pyc | Bin 2789 -> 900 bytes firewall/__init__.pyc | Bin 126 -> 138 bytes firewall/admin.pyc | Bin 183 -> 195 bytes firewall/migrations/__init__.pyc | Bin 137 -> 137 bytes firewall/models.pyc | Bin 613 -> 637 bytes firewall/urls.pyc | Bin 1104 -> 1104 bytes firewall/views.pyc | Bin 13597 -> 13597 bytes ftp/__init__.pyc | Bin 121 -> 133 bytes ftp/admin.pyc | Bin 320 -> 332 bytes ftp/migrations/__init__.pyc | Bin 132 -> 132 bytes ftp/models.pyc | Bin 1397 -> 1433 bytes ftp/urls.pyc | Bin 854 -> 854 bytes ftp/views.pyc | Bin 10069 -> 9933 bytes loginSystem/__init__.pyc | Bin 129 -> 141 bytes loginSystem/admin.pyc | Bin 336 -> 348 bytes loginSystem/migrations/0001_initial.pyc | Bin 989 -> 989 bytes loginSystem/migrations/__init__.pyc | Bin 140 -> 140 bytes loginSystem/models.pyc | Bin 888 -> 912 bytes loginSystem/urls.pyc | Bin 416 -> 416 bytes loginSystem/views.pyc | Bin 5097 -> 4832 bytes mailServer/__init__.pyc | Bin 128 -> 140 bytes mailServer/admin.pyc | Bin 249 -> 261 bytes mailServer/migrations/__init__.pyc | Bin 139 -> 139 bytes mailServer/models.pyc | Bin 2342 -> 2450 bytes mailServer/urls.pyc | Bin 841 -> 841 bytes mailServer/views.pyc | Bin 7497 -> 7364 bytes managePHP/__init__.pyc | Bin 127 -> 139 bytes managePHP/admin.pyc | Bin 367 -> 379 bytes managePHP/migrations/__init__.pyc | Bin 138 -> 138 bytes managePHP/models.pyc | Bin 926 -> 962 bytes managePHP/urls.pyc | Bin 994 -> 994 bytes managePHP/views.pyc | Bin 33758 -> 33577 bytes manageSSL/__init__.pyc | Bin 127 -> 139 bytes manageSSL/admin.pyc | Bin 248 -> 260 bytes manageSSL/migrations/__init__.pyc | Bin 138 -> 138 bytes manageSSL/models.pyc | Bin 245 -> 257 bytes manageSSL/urls.pyc | Bin 541 -> 541 bytes manageSSL/views.pyc | Bin 5429 -> 5429 bytes packages/__init__.pyc | Bin 126 -> 138 bytes packages/admin.pyc | Bin 345 -> 357 bytes packages/migrations/0001_initial.pyc | Bin 1308 -> 1308 bytes packages/migrations/__init__.pyc | Bin 137 -> 137 bytes packages/models.pyc | Bin 935 -> 959 bytes packages/urls.pyc | Bin 765 -> 765 bytes packages/views.pyc | Bin 6977 -> 6977 bytes plogical/CyberCPLogFileWriter.pyc | Bin 1289 -> 1289 bytes plogical/__init__.pyc | Bin 126 -> 126 bytes plogical/backupUtilities.pyc | Bin 16990 -> 15940 bytes plogical/dnsUtilities.pyc | Bin 8257 -> 8257 bytes plogical/firewallUtilities.pyc | Bin 2234 -> 2234 bytes plogical/getSystemInformation.pyc | Bin 4371 -> 3599 bytes plogical/hashPassword.pyc | Bin 764 -> 764 bytes plogical/installUtilities.pyc | Bin 12541 -> 12541 bytes plogical/mysqlUtilities.pyc | Bin 5322 -> 5207 bytes plogical/phpUtilities.pyc | Bin 6349 -> 6183 bytes plogical/processUtilities.pyc | Bin 1920 -> 1920 bytes plogical/randomPassword.pyc | Bin 1237 -> 1237 bytes plogical/sslUtilities.pyc | Bin 8128 -> 7867 bytes plogical/test.py | 29 + plogical/tuning.pyc | Bin 7040 -> 7040 bytes plogical/virtualHostUtilities.pyc | Bin 44274 -> 42771 bytes serverLogs/__init__.pyc | Bin 128 -> 140 bytes serverLogs/admin.pyc | Bin 249 -> 261 bytes serverLogs/migrations/__init__.pyc | Bin 139 -> 139 bytes serverLogs/models.pyc | Bin 246 -> 258 bytes serverLogs/urls.pyc | Bin 591 -> 591 bytes serverLogs/views.pyc | Bin 4098 -> 4000 bytes serverStatus/__init__.pyc | Bin 130 -> 142 bytes serverStatus/admin.pyc | Bin 251 -> 263 bytes serverStatus/migrations/__init__.pyc | Bin 141 -> 141 bytes serverStatus/models.pyc | Bin 248 -> 260 bytes serverStatus/urls.pyc | Bin 820 -> 631 bytes serverStatus/views.pyc | Bin 8693 -> 4676 bytes static/images/icons/repeat.png | Bin 0 -> 2865 bytes static/websiteFunctions/websiteFunctions.js | 70 +- tuning/__init__.pyc | Bin 124 -> 136 bytes tuning/admin.pyc | Bin 245 -> 257 bytes tuning/migrations/__init__.pyc | Bin 135 -> 135 bytes tuning/models.pyc | Bin 242 -> 254 bytes tuning/urls.pyc | Bin 556 -> 556 bytes tuning/views.pyc | Bin 6353 -> 6353 bytes userManagment/__init__.pyc | Bin 131 -> 143 bytes userManagment/admin.pyc | Bin 252 -> 264 bytes userManagment/migrations/__init__.pyc | Bin 142 -> 142 bytes userManagment/models.pyc | Bin 249 -> 261 bytes userManagment/urls.pyc | Bin 841 -> 841 bytes userManagment/views.pyc | Bin 9177 -> 9201 bytes websiteFunctions/__init__.pyc | Bin 134 -> 146 bytes websiteFunctions/admin.pyc | Bin 336 -> 348 bytes websiteFunctions/migrations/0001_initial.pyc | Bin 1452 -> 1452 bytes websiteFunctions/migrations/__init__.pyc | Bin 145 -> 145 bytes websiteFunctions/models.pyc | Bin 2286 -> 2358 bytes .../static/images/icons/repeat.png | Bin 0 -> 2865 bytes .../websiteFunctions/websiteFunctions.js | 70 +- .../templates/websiteFunctions/listCron.html | 14 +- .../templates/websiteFunctions/website.html | 42 +- websiteFunctions/urls.py | 3 +- websiteFunctions/urls.pyc | Bin 2693 -> 2312 bytes websiteFunctions/views.py | 951 +++++++++--------- websiteFunctions/views.pyc | Bin 52905 -> 38852 bytes 141 files changed, 608 insertions(+), 575 deletions(-) create mode 100644 static/images/icons/repeat.png create mode 100644 websiteFunctions/static/images/icons/repeat.png diff --git a/CyberCP/__init__.pyc b/CyberCP/__init__.pyc index 55097d04c59ac178ca458137373823639d72dd5f..b4c1a3d744ca390318c4a5a3a769d6794a993eee 100644 GIT binary patch delta 44 zcmb>JWaMD}%**v*acSg44pT`Z1_lQGjQreG{nFyx#5{fH%B0kyfW*AiiC)G4Isp!N delta 32 ncmeBVtmR<-%*(Z1VMf$M4pUw=1_lQG(&8fhoc!d(iDAY7l~D;; diff --git a/CyberCP/settings.py b/CyberCP/settings.py index a729f925d..4348eed51 100644 --- a/CyberCP/settings.py +++ b/CyberCP/settings.py @@ -102,7 +102,7 @@ DATABASES = { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'cyberpanel', 'USER': 'cyberpanel', - 'PASSWORD': 'YhGk1hGnOcWwJl', + 'PASSWORD': 'jFzZwX3fFyYrCo', 'HOST': '127.0.0.1', 'PORT':'3307' }, @@ -110,7 +110,7 @@ DATABASES = { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'mysql', 'USER': 'root', - 'PASSWORD': '8oUlBn5AmS8RuY', + 'PASSWORD': 'b1w3wHi5x0o8t9', 'HOST': 'localhost', 'PORT': '', } diff --git a/CyberCP/settings.pyc b/CyberCP/settings.pyc index 1984388f5eacafc12ada1c259dd201b011708b46..25b0de83082f3a76956bf909cd84df07e103d2b5 100644 GIT binary patch delta 85 zcmdleyH}Q-`7{^_BS#DKP%`7ceob4Kx523rJ` dMs8ltDZ#?4#=yX!Us_zGpOc@QIQa(eQvhMB7pDLK diff --git a/CyberCP/urls.pyc b/CyberCP/urls.pyc index aa9a4531f014e93f990e1a851b5f0d046eb34351..c0222a041b7eba8426e27d1d90b4b52fa6915686 100644 GIT binary patch delta 16 XcmeC@@8@S{{>;nuH^gWodj~rJD*FW+ delta 16 XcmeC@@8@S{{>;m@U17#X_6~LcDc1!D diff --git a/CyberCP/wsgi.pyc b/CyberCP/wsgi.pyc index 059d36bb8a1cd2a0dda07d4ecb8c27e4f739b013..cdb9773d1a3b85d99b0540d67b1d007205359a3d 100644 GIT binary patch delta 16 XcmX@ka-4;o`7mX><&x-FTw>V delta 16 XcmX@ka-4;o`7Yl;`7F4ApCr-Se2LQav3o8Hs diff --git a/api/migrations/__init__.pyc b/api/migrations/__init__.pyc index 06a302d9e45d32529ead067fc24f815b79bb743d..4c9e20302536570a48d04364a6ce44e056969551 100644 GIT binary patch delta 15 WcmZo+Y++<){>;nuH^gWndo2JW)daTy delta 15 WcmZo+Y++<){>;m@U17#V_F4cT#RQ`O diff --git a/api/models.pyc b/api/models.pyc index 88786fc506455176cab336b88d9cf31692349a1a..3561deb50469f828ce1015a28cc161d0d32aeb74 100644 GIT binary patch delta 45 zcmaFQ_?wY~`7M$@c=x5~Trs|g#=O*UqJ69&976l~crA|Dc4*+c6 B5HJ7$ delta 33 pcmey(_@0r2`7F4ApCr&)04*mX?7pl3G7SY@ delta 16 Xcmcb@b%l$a`7CV9RVpOrkIeULnTEAATSW0TReUV(bSJplJxSKY$QFV2CgAWBfoH475$+oOAQx zL}|yEsM~YTz3+S9_q^vhAJ6Tto)N!%T6B9}4+h>@I(#Jq8-FysE`SEkZ@$~Di)uT3 z65z@R7#*x6!Pv*jC>Rk|#=z)gWgLtsD+j@du`&ThoRvv1x>%V4qnnjOVDzvu4Ms03 zhr#G$

!4tjvIs2(mT{h6antfm*lbh}t(j&ugMvE%~N~+R@k`{!5X;OVey6)Ei*U?6GC|UAHVZfB~@D1okmuv_qugB^v-#o4ES z6y&b>4tI6EtL?N<747koN#z!}&1-WsC?8 zQcMWKF+qMa1}IbsJsiS_bJ3GMkn06w5R4)6Rn*uI(K>HYL>~a7iXpub=l726C$~bu z}z)|RDo{-L5HA7pRJUK-@%pUT>1 zMi%Y$(?z>(o}{HS#gZj;s>PBFRR4_kSLMLgt1b#>tVa>9x>rx5r*v|FY(rt2i!yCX z!fuhU(;I1ohMkp?%;qr&X`{7uy$6*f`+%&|`$(`~5~K~2m;juukE`cehtEh_=%#ty z!Ikwv8XY1rNrG&|nz=Q8?xv;hr)Ol5RVpC1=aw(I?>g#GXsLe&2b|BK0O1iKtz8R< zx}QgVFEqX2iHI;h4T*r(EqX-T)?H-BT|kTAuMbxVXfd1_60KT@X4G2RUJxRzUJ9ER z_rjVX-Nt$cxb@Iaqm}v*5{x$cjRI5eRW}ZGbZz^L+)(G5gvacWkeC=nhUlWgMqv6Ew$P|^>Q*kv(~BGRW^s5!MZ;N;XIi|X*-b(RNk zltYKIQQxngS~#rk>)a>4ug-QJSB+!A&gbwn>u1Fd=J2RM=J44nafKii@k$d&Y?dKv z?bKbd70H&(h9B5$_SS*3kwDl(C>ppstGFYc-S{H;= zDfI2+Jw>;7jm8D_h3*}q7( zJv^{9K~`~WoIhGl8it^y!upik%;`Z5>|L^_F!_#j&0$U{04 ztu$`%T*``^N@8_I@ozabgPc+zozViu{n;T_Z&=Wx^?DiT}$3VF}W+0F5+g}z;WYRHP_Fln=we@TCuG`qz4=;|ki@bVe zv^VSxX<@C;+o=tB`NR#iw@0}$yfOY2{J6!}cCn~?cUH28cTMN>ZfRu_!A)zNR+}KP zO}(~p-c|7EBoFQa8rfCRHXJ4=j68EPETd;PcQvvZ<|@lsE1iEl=M*h{kPrOK#DI9N z_Kk^@hCu#pO73|y>i+C{{UfApd;Q*L-g%n6A))n5vXV+srdU8SY#A(c<9`tRdS>jwE!*#& zXJoc(-VM|k+_kLXmdqg<8|0FCYc?kSq&_#hBqr2fW?vFb>f3X}y~nU4hq&$}vFqBGs?HD0B#C0~N#*Z;T=mxc@bRrvxk*A@ zx2~7&Y@>|GMbmch^QYeTUp*R`4Wr{63g9{>>mf!OK~CFWwIT5n%%Au4XFpDoOaIVDcSM2G4+@#6;l12|3n^~AG2w(q7YpBxwK z>iLty7pNM$4n08HNfId%r%9Y6u}I<)iN{GSlgN`Ol0d=$`X@--A@Qs_mU>7$q&}6J e?DhKN{%ihW|A>FgKkASAhx`Zem+()ZmiiALRF4J# delta 5965 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 delta 32 ncmeBRtl?n(%*(Z1VMf$M4pUxL1_lQG(&8fhoc!d(iD5!M= diff --git a/backup/admin.pyc b/backup/admin.pyc index 03ca0bb131b8554f3c8514d6a03451320d3724c5..18caa545dedf1f0f83faba3c8efa035a1583eb8a 100644 GIT binary patch delta 47 zcmcc0^pJ^z`781yspb5r$8i*pn6^qnh{Qi}o-^HL`(Fq#4Y DXEYAj delta 35 rcmaFJbd`yN`7;nuH^gWodovpVDk233 delta 16 XcmeC;?c!x;{>;m@U17#X_GUH!DE;nuH^gWndjkL?ECj#+ delta 15 WcmZo?Y-eO={>;m@U17#V_67hV90aTY diff --git a/backup/models.pyc b/backup/models.pyc index 98d1903fd8815ecdd0183ec84fcfa6e02b975d0f..4b928877f95349ca7ac30964ce27f573c10cca98 100644 GIT binary patch delta 116 zcmdlfaaV$a`7CG{B?81yspb5r$8i*pn6^qnh{Qi}o-^HMi&WG`UG WEj@W7yYysF?)7+8NKKaKkpci-yd?zy delta 80 zcmcaBu~UMB`7mX?13BrGdKl# delta 16 Xcmca1a6^Ed`7#pTp%e$-H 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 C=J!$n delta 12925 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 diff --git a/baseTemplate/__init__.pyc b/baseTemplate/__init__.pyc index 41fb6a23fff4934000262c1a958a19ef27ec6460..25e5b7d666b81f123ff1ff53d09982a71620df18 100644 GIT binary patch delta 45 zcmZo->|^9${>;mzv7|I|B8RD@IRgWOenx(7s(xv4ZepIkb7fL$Q9xo|>O?OK03i1b A#sB~S delta 33 ocmeBUY+~eK{>;m@U13JlL=ID4Z3YGg{nFwh{ha*d#ED@R0GJF3Z2$lO diff --git a/baseTemplate/admin.pyc b/baseTemplate/admin.pyc index 3588ec17f40324735d82bef440dc77c98db03f3e..cb9c918b20afd7e02543ea25c06e71b2182e4ea4 100644 GIT binary patch delta 45 zcmey(*v`bk{F#?aV@YY`M2_{6CJYP=`WgATsrseGxrurD&Xq~2MFEL}6zU{>;nuH^gWndm8{F+62-7 delta 15 WcmeBW>}6zU{>;m@U17#V_BH?_$^^au diff --git a/baseTemplate/models.pyc b/baseTemplate/models.pyc index c0c962bcf8a6bf5cf9e6bd816502edaa7e41dccd..0b1265b820627a02207dc31d74768d8e0207058b 100644 GIT binary patch delta 81 zcmdnOa)yP2`7kDk^%tV;1DtZ diff --git a/baseTemplate/urls.pyc b/baseTemplate/urls.pyc index aa574818c56c24b64486795082dbbc06670f1591..bab1aefcd48c5ec830ce5dae11486525d7dfcdf9 100644 GIT binary patch delta 16 Xcmcc3dYhG<`7{ploGi3$m delta 16 Ycmcc3dYhG<`7s;ep8{cuL zC0juXD>hJ#P!}u^%L*YDu2_JI#1^_h@B;wVps6?P0q*$F0$SAZ!WUt?FN5L;+@KyvGzf$li+{3dwtpzSbzKOmO2oo##;k>YB$0w2$Iz&KmaHP1}>6^pgk4Q-21ZO{H*=BeM7afu)`g zoweu=7PF7_ytXVv!}dINC)8roY9KsxU<3^xOEVwy8$(9cNE!(iXFCkky#Bp!EX?B**}Xr23%Z*CGS~IYvV8pUDuhP0}3mqAm1^4k@5+hpn{cTLb_l zI5gmq0_v-9ITY1o bwbtwjwIJ9->jtMdWZ7p|SmZUyuqbdxygmp}nA?#$WIibEV z#{$yct8?|hyw6hV{m7L1I(WgNF1_6&Hory(Y49A^kxoh48~u$%3bRD;c&9zy{;SBMBeMw7r;1k6TBbEc+a;@v)6Quj<2*nUt=5g$|SK{DS&^WQ%>%ogR%5&*#T>w~t8d zCDha$W#!lD7NyY1_!+X!5=;|pAmnIndnr#Q!wsCeOS64tUbh<_PVFD)_NY0WKQ_#g zEQYT>&LS*o-Mt!87ds+)I5 zCN2^VxbLORLkoqLJOq+Lpx{C%G?c#Or9Yrh$bU%RN})YxHn?>!lJ?uPGjryg^PO*2 zkIsENmka!wj6ErQzEOdf9|P|f!2oak)7Db=EYsP1cCDr!<*`L5Q zA-pbA9%Xdf%`lZrmXsG9-`kx75ru9LWC%Jz*k{m1BLvkj>;rVe&T6lfPDi* z42HWAxY?M2pp3$YF>s#&>qdb|6RI(&#sQ0z3Ft&=vn*Z=i$#|PgIgT~s!6IjOI8nL zt6dYE0CWOW|7-`Nr0|CE(lFbNflNU)4V{?I3%BisPMqu;HycA3KcnMMF#O;Y(nM3Y z1i+1A1`EF44kNZb+g(}Yrn(Ti@cu9klx$fkRdzqH-Imp`Yo)qX*>W28%37N!jX4O= zK8A4Ba%#3H$Y#N{Em3&6uCTH;QLtUN>CU&4xT<`9da^t_H(8#Vnk=gaq4lLc9OW?r zqMgSHs0q9WK?V_;ExVx&+8CJ!@LJe7N&8*0Jp0PsirrE_ne&kV%}H0C37<`;&@SqY z(rEFF+76#MMz^zTT2V9}BmvWL#LyMqL*EePS-o+oL;y0@twg?CR(pbad* zlE#3MVkX1O2nPc!%o6w=!RHYcQwx!?nYTzb(@X+XnHC0v-6tSWEe1$zWq|6cqH+xC z0sg8X^>rja=!?gfmO*mD^r{i{JhB<_#gkR5(WQ5_bUNA*1tH^rO8BeI3Ek#vy3HuB zK0W2Pne>0Xok#TAqFJa|vQU!sR;lJ~N!b#mNf)_$5q*kB;T!X~%Ebx`n(eKceV1p^ z4U-3OZ5hGa9j76zT8$5(&1p|wARxxL=3e(Stv-sq7vU#q^pyG`Gp|PD{h1|v^v)t6 zpGLw!4%K4(w}GR(6e$W%s~d@V=DR*i^s()OUlPlVnd;%t6;Y(q(IiVtq?fFWx|jNj?Hv@-_bAH!UT2RY=*sb(K`yRcZ|>N< zM9Ya4eufs1QY%D=PWw>CnyYqe)3t=nuhBw^?=Op^_&5PE_C{z8%`XrB$oy_#Esuv5)P=!|emzu3-IiNT!3Svl zAi>e#x+H4zKT6`4XzgLjdYNY-Bdauioj{9Xlq{;Y=u3efkz*Cfj;D3DS80T_z)z}+ z*$wvN!57(t-`lO*hYb4RbZUn&`P<~BwWdSSn~IMRpO``?-Q;>x*fr0uT-QrY_Itjn9*?|^e@pmGapf37tJd6fu>F(& x_5Z?2g`7?wKTU9+V1eLG0%{V!P4Esv5%e+H%uT1$K{I8(YMwHC%sk%9e*%05RHy&| diff --git a/databases/__init__.pyc b/databases/__init__.pyc index 5f3a4aa57399c7f6aef7be22200129a33db55909..f8e7593fcef0244e89d978996df937d771a400c6 100644 GIT binary patch delta 44 zcmb>LX5?W0%*!Qrr7dzIhpD6q0|SG8Mt*Lpera)TVxGQpWm0NUKw@6%L@!eSCRPpb delta 32 ncmeBXtmk0<%*(YyVMf$M4pUwY1_lQG(&8fhoc!d(iD9MymIn!8 diff --git a/databases/admin.pyc b/databases/admin.pyc index 97e2bf6622e6554c7b18ccd7d7470132917cdd02..b3edea730692d3c2cc946d203019e41c91225792 100644 GIT binary patch delta 46 zcmX@bbd8CF`7F4ApCr*}Qv;Y9X{tAr% diff --git a/databases/migrations/__init__.pyc b/databases/migrations/__init__.pyc index 6a7414d36a460851d99a475dd1837cac37c21227..5e851d72e75559bdf78b310fe8a566ba6d3a2811 100644 GIT binary patch delta 15 WcmeBT>|$hR{>;nuFT`jfdoutdi3G|3 delta 15 WcmeBT>|$hR{>;m@Lt(~5_GSPgc?7lq diff --git a/databases/models.pyc b/databases/models.pyc index 9651c0b3e876875ff15605bb53bfd8d95314d454..479ad2eeee334ff6ab38ed7ff19c30e7b8d45f25 100644 GIT binary patch delta 81 zcmdnOdWMyQ`7;nuFT`jg`!6N{DM1BW delta 16 XcmZo;m@Lt(~7_Fqf@C>;ey diff --git a/databases/views.pyc b/databases/views.pyc index 88dc557e90fc1acd66a3dd17035f89bd7a116a20..bd00aef06847de82a9f173773068ebfd515c2329 100644 GIT binary patch delta 16 XcmezE{M(tG`7|YcCK1>GU delta 16 YcmezE{M(tG`70Y delta 35 rcmdnXypfrM`7;nuFT`jfdo2JW+XT1( delta 15 WcmZo+Y++<){>;m@Lt(~5_F4cT%LJqV diff --git a/dns/models.pyc b/dns/models.pyc index d1c087e6756dae272086e06a5256c710284dda24..0c689a527683e80ca7505c10cbaa52521b7d3d72 100644 GIT binary patch delta 516 zcmaE_vRI9S`7RCAWDSJu0l5#N`Tzg` delta 345 zcmZ3i_Fjd9`7Oj!+af0w2@b0vkQw7 zHpR2qUSLtYh24n}O&DadHfJ%KD9GgVoWj@?i*pxXQM`j&8k=Gc-UL*|n;UtjV=Amc hRWuo7{XPCpOocL&=LjZaDxPd0G#f)yeDZH04FFXiV6*@L diff --git a/dns/urls.pyc b/dns/urls.pyc index 690341110bce809312056e6d837791ea05bd3ccd..e8b2717abc0b2572bd67fa968bdb456508b3c33b 100644 GIT binary patch delta 16 Xcmcb^eutf%`7{poqGrk4y delta 16 Ycmcb^eutf%`77Zs8w6@MU9g~K*A-$15(tTkR01J2+aB!e>^cTJqJ4<1%JRI zFO>^Ic;t+_DKu%dygqElySkOYLEt2C5vT-2pt}jE6y1i9;Ts;hBxcg~nP5 z5(Etd?F5YkDS{3HZgQHUP6F-@cZ(a}MPr<41|zekgdV``%4zn}#D0PSf}^spZSaQQ zDeg;`f68_P$JSQlbyrGW^V{T=^b=x8ex6Q?59NJCO}-pBKFvE~ziw0RyiT)AOD64% z*-MwQIYZ~>?Y9&(N8gjb{5z0u+Qz{ZdIW?jTuPI$DITTtelV%nm?$J~h3@U?=Y9>W z>|E|*63NP~F53bW~5d4 z4cf_BI`sTYAHIPXsJW1GA-Ly z0VRl*e5&9818oj14?Qk~=o?^oclBMd*)MkyGY9 zEqay2981KwmPv(rW<>=nP!z|=Ri~nIqtIlL)AQFvIbkVFN~feHy$@Q_0FGNXfGig@U>!JyF&MhXUtUN99{ zzy9s)uZ@@o&GFMXtZv{iLn!H{!Uv+5pMdi z?T!Skd|TdbYidxPG)>gTr3>wILZsxK)Rp=M&E@YJG@lbjb}4IS>l-mYQe(t)GNO;6 ziDs8{Ud+A68pttszx=HuAij~?9gnc2N9kj));qNH6Ud{VBslb0MU$T*c$(l8dj6pN zy3?gR5T)-rSA+;2+y&kVyIs&niKOmM*sp#*h=>L2pT@V9s_OC03GYBgzT)nduXTsS z@7RSNCDS4|yI&M7a;tmwr0yq8-ekupI!^E;!D)gKf^!681UkV4LI(JF`}K(L2)&4S em5}h_X7KJ{$fDUbkM=2IpXS&4wRJ6~h5iK=F}sxj delta 3498 zcma)8OKg-?6h8O=r_=uP{HN1-v@`8YAGA}Tg%+rQV0jq?AIM*&q;z6R?;tIGNc&fL z%rG%!;mX9^1uS%-8`On?OpGRm7#Er-1T|4unLsowTs1Mcae?O?3LS>d&?fWs{P&)F z?sv~Q_nxzG@Y12U{*Tx7b@JlSC@lVI_Day5Ky(P#C0}g$PIw3sI0>7V1IzSZDz0XCVgCWFZbRz(OO)S{9l>23bgetYaYw zvdRGisgR0^FJdVjnb}nclOy)%aa*9YkMZTgk78H|Q?=`tgh$=bkL~i}q(!=xkHAl0 z5|9y#mRbPq(Jl4IJ2M zHPA>5Va!C&S#gr^2Ua6Nle%X1~H7MC7N9X}0{eWgKDQ+a#M9{|}`#xZbU)0UOVdrl+c=}6qN3`bO1jy-- z)nMEKQil^7%uG@)jpK+D=5f{mrw&5a0ejM6$W=jBhw*C2qDBqO3lJw?g~6%yY{4j6 z(o|{5JPacFEZ(4Y2aE}_DXXAwUWb9fsVF#XH=J<6%+DZ%usvXV)fGMNq_B+%b*pw$ z1E=nC>0qknV0;V35pAG-4({w5vl)BY)TZPtcC9)VoNffnsaXmy2wix!kZ@{#;TK*J z!T*K7gGtTFiBhl3@QtF7C&^ezjF;{h2fCG1INF@{Y=-lSwkw|jeA1;1px|3u5b$!T zbYxw02g#H=a%^-l;`m{0Ndf7dfzjEYKC+O^=v~8G8D<1A{P*>jc#21e~7Z zZvj%{OgQgQ_uJx1MVs?F=7PvMK~_T!!;i^Q!zy(Ga|a*7`dkeq1-^WgLKi8ds5jLG zb`8CPIAt4@vAZzHGhfj+P5XF_2O_8*!2t{!K9E`524|cw?g8n9Y&FQdpEkr7GK(0X zhY_Ddd<DOYJvQm*V!lJzKBh`|?FUCC&GJ!jJ{8zo32%EyGdo-8k5r!7VpHH3i z1btrNSsKyQLL%hDkz%dyNJ}fxint$NRr(z+JeNEwM7#R9`E2zGnW+pOr zrhGBwB_-aVl8p5U3t?u$%8X9W$l~q^l-bdvuD1lmg1X&u54+Kuts9Rl*M4wc_bkO` z8v)mM%8k;Ny0q^gmFEch33hPZzR(uX+*;xDwpk$}mA$~*KJtP!Kt{@D!*b{6W`eBX z`G>G6e(dykNpJ>ID%#PnHEZflOP7{vR_}GZB$Dd)j=BB#4gkz#EKX0(OwQ2|j#^=Y zX9zYEY$e!9u$RChc%9%7!C`eS^}<@(&BO#Vg$I8RFf8H@!)5r5j}X@zVWY?R%!nD` F{{f;)Ex-T( diff --git a/filemanager/__init__.pyc b/filemanager/__init__.pyc index ad89af2adf04f021db545cb3793c55e5c3660e6a..6951e53e3ddb9ce33675a8b435219d0070605826 100644 GIT binary patch delta 44 zcmZo<>}6zU{>;mD#8PD;m@Lt(~5b~9cr1_lQG(&8fhoc!d(iDBjdjJ^pE diff --git a/filemanager/admin.pyc b/filemanager/admin.pyc index cb014e28a85a70c91ad08c6ffc4d9b08e8aec879..df5374762e7cff1e64b439a84d150704ccaade8b 100644 GIT binary patch delta 44 zcmeyx*v7=p{F#^Qh^5Lz_6?H83=9nV8Tq-X`lZFWiFx|Yl}V{Z0f~936OWhy05ISV As{jB1 delta 32 ocmZo;`o+l3{F#?)hr*1B>>GI185kJ!ON)#2bMliDCtffE0HcBmasU7T diff --git a/filemanager/migrations/__init__.pyc b/filemanager/migrations/__init__.pyc index 1af004c201da4ee88aaddf6ffd698e9abd570495..f891df3cf761c59a0d0d35447839d2d20bdb98b0 100644 GIT binary patch delta 15 WcmeBS>|tbQ{>;nuFT`jfdn*7V!vxR( delta 15 WcmeBS>|tbQ{>;m@Lt(~5_ErEQvjn^V diff --git a/filemanager/models.pyc b/filemanager/models.pyc index 20f021a5ebaf5d47b5ad65874ae3a542cfa36409..2f5b0f19809b20b8a650f0fd916941c50f5c6452 100644 GIT binary patch delta 44 zcmey)*v!Pv{F#^Qh^5Lz_BE0w3=9nV8Tq-X`lZFWiFx|Yl}V{Z0f~936AzdJ055wE Ap8x;= delta 32 ocmZo>`p(GC{F#?)hr*1B>}z;67#JAzON)#2bMliDC!R3}0HTQsW&i*H diff --git a/filemanager/urls.pyc b/filemanager/urls.pyc index 14c72a0a7aa47dd446e3482a3ee88e7ddb31c7e7..f7fd1bd0f14d5334cc9d5f66e169b65c87c701d6 100644 GIT binary patch delta 100 zcmZo+`OPHF{F#^QUx-muG6NK_0%->zF1DU1ZK9IS$PmTCkix_etic8p%=`}o8jL_z p2{Vu=Ez0pL4w^VuozZOKF+U~^*2!s%I+N!x#&ECzWd#^{m;qs27CZm| delta 234 zcmey()WRao{F#?)hr*1gWCkc;2ht8eT%0;l+QcuFks*bRA(e?Ci-jQth}apLnHWKW z9AH6KuplQ$FrAqpij5(Ki6K~n3#dKwKM-gz0$C-@K%%rL$FDeeVzD}tq0z+IenG`T zK*6}=jKsY3)PU5Y+|1(Q%>2CK5<#FahG;P_NO4Mjd0tL_Vv1X4PHG7cPy|^(gMH#_ b9rhrQRY5G1MHu6GIDkw6MjmESMo~rpJpMQk diff --git a/filemanager/views.pyc b/filemanager/views.pyc index f09143d97ab6e98c9dbad2657f2ce2c6962abcd7..1656dddbc393653a31498bd7e19f564e9c4d8438 100644 GIT binary patch delta 113 zcmaDV+QKf){F#^QUx-muG6NJa0ci&YCWhkRiPBzttPCv-3{jj6DQpbE8tfBar@=M3nKPFuNMLd~R{#$OP>leS7^48A G02=_N)e;y0 literal 2789 zcmbVOO>Y}T7=C9RJ8=@n`A%Czi4YQ|(3nFNiBeEY+NubM%BE6+IanL-G+uW<+@0B` zM$UzD=gNgc5Bvvi-1$5F0C=8R=R*aAN*s^JGqdl!?>ryl${&r{UpIg1^knkq;q$h5 zVtz*_#J`eQBvH~)qWImD*ps9por)w=(wQnpD-u^FsY$0+exH(fT9O&*%#`1&64zxg zE1fwPv?lSqBn{~_Bw3Ko!r7vxbee9(w8V>&EJxNOTd$xS6fss355~Y!`d0?~rd^pa6@XPEdN*@MCdbf-Y?q9{5DeMq~@6Z{2D`Sy?L*nv@CsxV8lRID6YoJ`5M zB7-Rjr{swz`3~#GV2YZm3=!5OQZmMZY1w{Jk-h!&l1!oAC$o|lqLe~J6@Sbn=Z4wu=n0glJ<2@VL z!nEr6>dwGuW1=ke8N>}_hXWk4u^c$k)=qI^G}OLBi-~-pNB8nP%Y7!{bH2s1a!=>_ zX`zjE*o9dVM5zn(EQnFMNI=BwE4g4?T5Qa_XxfFz+i}(l;`YwyQ0F@j+ZRh>4Q6XN zvMX3ir0=8NugZEKWQks895$jVs^P79HLt1a-W#f+daQtZGZTmE7Z@3Rpe~@QWc1qv zSdLbR0iXuF0QoZT#d!>>GN=(~piIyKHwLHWq)NocRoMXE8}74)&x&lE)ClLGE+~C4 zC*vB!;$MLPoQGuoeNBYD>(tP82+7XN_6f)V>dnh|+NC!mwjtw^F8k>>VA6tP(lw<{ z>Y{8@28%LS61yzp`svP$+Hg_NhW{(}K}pjU7yLe0s_d%RHAbA!bO8r@k*1DyB@K3i zMEgz57hGhDFx%|)v*UF0y1!Wvn41M9x!LXm#CGxa-xj6WVHS>VmLI3fh$P5zWSkNT z;y%=Q5;;zroqmuW>98P0ce7L%G!0Gab`#JZ5^=I=Q8vC)1Xm7BmO8SMUB>aBJNrz} zCw+W6m}R4%!>`gHzB3#;Qk&v%m}fo2c8`I>CGAZ=#!@D0hVVGo3yWlEe2xJ+D7p@kZqlu#Bt>Xgap`~l1{bp4UY5X1Lg&AHsGGwPcv3v1t_wq-NX(HF@awC1iJLf>9-iao zz`uqWr(x)LSpjx;^>vBU(2OgBpj%aAxrBDi%Aphp@{C^+^Qk z9jd;yABuc^u>bTWII}sJL_3(uLFM_Bn6K(O5-TiA8#^f3iW+b&@y+*7}xJc zxCn9C;n5aj`=pt_#)fim7fe>tco^8eGxW$XmSa#h)M-gxN(OtD961DwxtHU}8J&Fs z(_-U09ui-8)T{MQZu!XtO;30XpM%Q&C%0HuI5|rS<&8=p zF3!2@%iWpwO-v0r2bv462X6u%{H3z<9&VoQf{|Ua1rZI$yCEl7QJ<~h!+JqkI#9&s`bVC)xQ8f C3QN@h diff --git a/firewall/__init__.pyc b/firewall/__init__.pyc index 4ce1bde85a7c202b7a250b01b185142e4ef6325d..b3cebf7032b969c3984b9bd952694fc9df50a4dc 100644 GIT binary patch delta 44 zcmb>HV&q`{%**w-X3PJz? diff --git a/firewall/migrations/__init__.pyc b/firewall/migrations/__init__.pyc index 0400aa78ae45cf12f8da2e2271af8ade8f491a3f..02e76ca38712e51f1398328e6a35e9a3faee70bb 100644 GIT binary patch delta 15 WcmeBV>||tT{>;nuFT`jfdlLX7Yy`&u delta 15 WcmeBV>||tT{>;m@Lt(~5_9g%#Tm-WK diff --git a/firewall/models.pyc b/firewall/models.pyc index fb89dba229f3acb580b9e3b923332937189d265d..31f9975ea6e299c74a99d9f2a211d12436132035 100644 GIT binary patch delta 81 zcmaFL@|T5!`7ae;%K`7ae;%K`7|&+>HRJ`V delta 16 XcmbQ6H8+c$`7F4ApCr*}PGy(v=rV3>M diff --git a/ftp/migrations/__init__.pyc b/ftp/migrations/__init__.pyc index 40ddc74bbc4a31deece59cc6ffb6a89c7183daf9..482016b39fd16646e7fb77b06487b5642a9a340f 100644 GIT binary patch delta 15 WcmZo+Y++<){>;nuFT`jfdo2JW+XT1( delta 15 WcmZo+Y++<){>;m@Lt(~5_F4cT%LJqV diff --git a/ftp/models.pyc b/ftp/models.pyc index 82197fbb3c13c124d88e8b823d7cc26959eb31c8..64b88c626ff63b8f35ae264405022cc96517de66 100644 GIT binary patch delta 116 zcmey$HItiz`7 SXEtQSt7H~lS@FrytWp3?Y$V74 delta 72 zcmbQq{gsP@`7{uIaN6LiG!?m!X~Ex7Dqx-lSA*3B-b&So zIa-mN9`F#{5V#Ik1{WckVdYQ}|L382^@O~ zryp)2P?k?3O&oCsYMifiIVWN`Fm}2?*)Ef|%qV@2PSVHNEZvKl)T2H~uBZS?w!L6a zKPfFQ&&-zmXX*<^z1meuYC0`xhpE!j(!*Ob&YTkx+JzNoamAtOcso)2KHH!#@xDeW zA+J6>0nl6k delta 1154 zcmb_bJ8#oa7(Lfclg4?|B#u)aP6^@Fmd8*)Fn|h(hiFkl%VUAiYe?KS3HEiRB8P&y z0TPHifW*SWf>@A|KuC;Ch_Mn#h=E^#3StDVQxIJ!4A|0robNm5JO1wVn`84sA^CGm zd9L4k61o*C?Fj%g3$hEC042~`1T**Bdjcw9LW1>3<`2><`PfJrdZa1}qX6#>h@jri*_O@U=$ zs!-_)AsK}m1?^faK+|Fl3G_@9EC*8q%fsyUQv}sliouPw9c29NPY3tOrFTnBWS29+ zyTiNkDtG*9^H1YHSNeDf;5 zBXqT&X%=9v16>0ubPAw7ph859MSeqBT@)d|L8WEA<&@&^W%<7spZ%BO?bBIuluE-^Js^#d_Q_D(v8i<7HN1j_qs}P`PQ0*Dllysy8dF zs!usK)6W}vt!~$-p-L|wW!QG*qTxgZVmq{B?1|uh&MqLDJ5kk?_u()OgyiYekPH9{6ls(8RL0%8yV%FwC((gnkMf( zu68a4bNs0`5F8a1M#e<^010{n`6Dt}<6T=-mIZ%aKPvczLY*A)ZWr$UV(l&VMHX2; mwbYh=R9r!(y_dzEgbebp>o$`Eyr=XaG8x_&-W1lv*#84P{r`Lb diff --git a/loginSystem/__init__.pyc b/loginSystem/__init__.pyc index f34fbcc9a7712fab85f2c0ccf88a44e25d18ed1a..f65734b5913e78a255201c8c2cf23843a9842169 100644 GIT binary patch delta 45 zcmZo<>}BL&{>;l2`l>W?B8RD@83O}@enx(7s(xv4ZepIkb7fL$Q9xo|>O?Pd05E6{ AH2?qr delta 33 ocmeBWY-HqM{>;m@Lt#eLL=ID4Ed~Y#{nFwh{ha*d#ED_%0GHDVY5)KL diff --git a/loginSystem/admin.pyc b/loginSystem/admin.pyc index 2fcb94505b87f96944747744fb98a34f91c5b599..f852b0ed2d35a2b71234f7e5c389a029c0f9f527 100644 GIT binary patch delta 47 zcmcb>bccz9`7|tbQ{>;nuFT`jfdn*7V!vxR( delta 15 WcmeBS>|tbQ{>;m@Lt(~5_ErEQvjn^V diff --git a/loginSystem/models.pyc b/loginSystem/models.pyc index f993c82fc7ba1be8922142d222170f0d7490cdcc..a0669655b7bfae4e94a22d7097491d409b681aef 100644 GIT binary patch delta 81 zcmeytHi4ak`7@yhwE6fEk delta 16 YcmZ3$ynvaV`7kg|&^^ z$}|?%K7dakVq>R>tr}CU<}22F?PbZ6uPFT4ZCraytLpQ1{Kh6XXou)73lX^y6b8;i zVbSaJ1&~=dA8kfA(SqxILVC+7#rn!k{(vq>s*wrxNE&E{1Oe|ZNnHoecB&bD&6}5|S7lD#(f+y)rNRAE^IltmAavKD# zV}e}tPh2F?MrhX`==l~dF6VN-bGe++#(2{be=%o}>pxqBKWx)ku`i6S0iFZ?mq0{0 z1EB%Zg3yGAEztvTO^`Nt1pb&qDo~F2l}b3`Z#tkCZVcQ7 zkXbGp8M+kg8s&HnB*Ly#B9!DgVdk@y_DEG+(iMjSLmRLuV3N^MHq3ookB-bV?gi=( zoci^;7m(U+{J>Ij9&|d*>z20sKwB4q?=?FOZFT*qI`fIx=ViObS9Vg36W!U57T!j` Q@ngh~sF-*|QJXFQ175IMxc~qF diff --git a/mailServer/__init__.pyc b/mailServer/__init__.pyc index 3ce35037246f345c3b2a174a5481092e64f68c5a..49c4c226aa61f43b8189508eeb5409137b717bfc 100644 GIT binary patch delta 45 zcmZo*>|x|!{>;nOadcwjL=IC)Qw9bG{fzwFRQ=N8+{8S6=gOqiqJYG_)QMhZ05!-C ATL1t6 delta 33 ocmeBSY+&SI{>;m@Lt#eLL=ID4O$G)A{nFwh{ha*d#ED^M0GEOZW&i*H diff --git a/mailServer/admin.pyc b/mailServer/admin.pyc index e2e03cd12d9a099ac85a5c19b68e88e77b13e834..467828123607ab5b32aa1cb84e038ecc109ab457 100644 GIT binary patch delta 45 zcmey#*viDg{F#@l}F(V{>;nuFT`jfdkX*~rUcCZ delta 15 WcmeBX>}F(V{>;m@Lt(~5_7(slmIS!~ diff --git a/mailServer/models.pyc b/mailServer/models.pyc index 7b775aee1c5f178801ad34a4e0ed6ba1a2b42842..3d8d40b5d0fda397f3ff00d707022f4c073ecbcd 100644 GIT binary patch delta 321 zcmZ1`G)b6)`7lkHe)2&j0*@`->77PbQ1DmFK=i4$_f5%wtD20;AEf#0uklUX>G E0FBgSUjP6A delta 212 zcmbOvyiACL`7H(;RwSJm7lzd1JeY#$pxHB0Az`u%8FhT`1 delta 16 XcmX@fc9M;q`7fp&n#+f6V*6ncw@(yq)()-_%mZ_pJ5f z%Apsjk>pq(0HpAn0S@774zRM!BLE*jFc^#(tZdUU1HoZ|LvWC*HM^?T+<~@8g6si5 z2_=z&Qk;Y+38EKDk)b1*0>2le3BE;{RYq@|f(ZFE2$Mo#!9oIpC(zsv^Be^785qYI zA`9a&uIAupAnMgiO^{iL^t#JY0@@u08tMnj2JhP z?M@;yj^4N^{;L_>X}jwt&e2w>PVWEJX#!kr&OkyIVZnl+#aV2_Z|5dUZHR2$!%bRs zZC%IJIt`^Mda2DA{5G)0Ai;Xa>-)giN zGLxQ*h(9VO7whx4TNU-t+}bD8NQfn5nirRwjX*71`;vpmd6s%=?NhVqOV{-x(OSF{ zdIn|aqIh|N0s%>SMFdHH8u#Wy8F~qd3Bvl_hNlI$VB}G`VY+Qzh9Ik+r+2B*j9c!- zP}F68E@()+EO__ArRE$l>SNkfJTo*ztoA;2^QP3sb#zj@_qMA~)tY+d*y?d6d*K?+ z1!k};el{;Ki=ITD=MpY=n862_jd6}Uyu$R@s4$0F7+LE%!(rWV-spUGrdj7y&SmU= z=Z5`-tC92&8&y{eBkZtxP#9%3^|G*oO=u5={vvzS+1sDuIAzq?;~YjW-cEuEf*L{B zZi&6?tU0TkeN{K?{hcLu2Tz}+31bAb-aST#wsBrG(sIKdTH^ sT*f<7m2s9lK=~0BSC5oW&~TFA48b{qS%UNGLsgom&9XUWZZ`*i0+%!L00000 delta 1557 zcmb7EO>7%g5T1GKzuomu?8HBD0&FM}m736oDpAu`{IwP0uR)ulR6?R%`E7_d@j7_l zwu!Ws4?&0vT;8Qzfg_j5LPDawaRG7V%7q&j4oJWaX0}NQ5+XvDKaXeT&3yCC+x=$c z+lzVQ*OK*>bMGKOpBq&Gpg`X%ARzil0PKAt5`X|eB5Vm5+!G2R5Wr3Y_7R2%34#S!p2~qzzP?3JnXe_W`IP$RZ?#M}9G+GbRKjZi5sE$`Dk5 zI?+7Qv&gXt2&x<&1vUP8l(a>}vKTHfwS!jG{}GT ze;?ob68~5K5aFgQgPMe33YxM)!jneCW8!cPHmEuT4Ny%8S{xxkd6mTxBt&`|B&k8G ztie_W2AkqvC!tNsNg(zQHz}te$&h%)umnlzNN(m`f4I`diMn;g=tyOvanc0{0oKDS zkWp>evS9F|z+oAV38iKrDW_wcaFcFIfVI<2y7kv}!#q2WWWAuWgnrNKZgS_Xf7^s@?g*(-0JyJ=E%GRvK=vs=T)i9mgZL%-e{Hwp z`_h+A&)eG5@j6>n`kA;$WujR2 zot-_k*$?#%)735O49@CTtTQ7f?lN7sL7;L3{%$u?Q96>0dpnV9a5&FUW5^KDI;pC6 z$5-q>?4{Ddc;FWgS z4aRD2?A0&g_@LB6{7^q=E{uOKe=TO*bJQ~(-(6&Do*~usls=f6)W1|KctQVJUBt_J zvGych(%;)F`lDI{KOKKw%L|;>UraqcaeJ9xr?bV1K36Z`595{kzQEtc z51OmOevK0r82D&QpKWu8=i4(j->c*2KWn$JGQQtl#@rHz&g(yBmfBa?yvpz@!|M!h TFs$mAXO(%wY@6rJIdl3iBk(nz diff --git a/managePHP/__init__.pyc b/managePHP/__init__.pyc index 25fdf43a5fedbe1d709eac761b953a876f2610a4..6142ce7e26d89cbc6a050dfa7d1bf63fc9c5be1e 100644 GIT binary patch delta 44 zcmb>LX5?W0%*&`7|$hR{>;nuFT`jfdoutdi3G|3 delta 15 WcmeBT>|$hR{>;m@Lt(~5_GSPgc?7lq diff --git a/managePHP/models.pyc b/managePHP/models.pyc index 0ce1c74df6e59708b8cd7f2d1a123f0a30ebff8e..ea173e7115e537c225147471c014507e3005c1d8 100644 GIT binary patch delta 116 zcmbQoeu$le`75ug05e(z?EnA( diff --git a/managePHP/views.pyc b/managePHP/views.pyc index 08efeb6bafeeb2f678946920c7d47a5840bd39d6..a569628d77c06c8166c2e02f36db49f0c7934517 100644 GIT binary patch delta 1098 zcmaKqOGs2v7{~wT%$*r$9Oq@@XfLgNjy)AbU1VVCq7q6|F~%%UsiTgiHy?O!<0Fh9 zf;hWsQMrf~y%-3B2qI`vi)a%RRMe_vP>X_yzH^2#f(Yh*|L^|4bG~!uJHPkm_^l=G zc6`nA{_3c?@BVzEHUz*&Pct|sVg@jiYgj-65DY~&!^};GdS?(E!yMxe95UW zK;`XS$z~X)55r!J|8y`r2sXqaN@*|Z%sf~@wM>+u?tfjnO+V;MML8C^>RCuV1G;CK z!DRn%m{rJ2owwzSGgWfm$Vb^U`jCa>kI`rHRkDvQ$+NT7GCtNQuZ)G|-LYtGn5N>) zPUZ=x$=u+7PiC)vUztn~m;2-8viM|c%7E$A(^`h`!8VX|LFB2#a%M}9A^fnNx)e}} z<;s@cKm=jCbSb0~%bhKKg9yWR>r%c-EC<9YeO7>p2y6$ELn-YRXt$J!sCGNFS*Xnh zCW^G#q|MdZY-3`LHe=dctId8U)@d`M&Gp)xW^}RYBpP=KOcxSvM8yU~Z67QjL~0|V z^j%T9zo=!9mXbP2%Sc_M<)ms$1!)dxC8>wBiquOQBhA(A%p4>9mIyL*$h{Ork zgDonws?e*#5!p325$RLuQ56bQXi(vp{4m$UlIh0z(~J$udkY6xujGq0k;AImuflN^ VMkrK5zDw52`NeK$r{|ET>NkWS?+yR} delta 1253 zcmaizOK4L;6o&tq+$3$xv#*;}tMyT>)u^?!P_4MAR9pz!)>_dTALAown`m+yZMoOP z6cs@b9RwF{>_%OPXu1$wx{)q);X+&}h#PkzE?fxWnF%cxK_T~?ng5)ed7N(^UF9FI zaj)xp!1uiQ?o;oV(;YPc0`&EQBWD@FU4VFxhHAy!ZwKhjY1low*PjHS9FL7Z=3 z^gEdJsT8qB9!qU2*g=Y;%L&2aNcmugFwNkEVJ(3jR^x$#>0TI?AEQ2G`wZqpz>>5| z3za~Z6@VR4X=3fas|;H~(7D7qwMD8KrJ5l$s-hW#F=o+{y3oL|00vrH<*lK|vN#!+ zp0N*Mbz|o;IV&-K{9+=PoRXi$UdXz9RL+h+iP0VwM^E){C#Anz7V|sggY+_XL%x~X zAit)!$(Brm?9RkGYAL}@pKiljPHmXwi`y`w=L>BZeRq?LDcKD z3Na=c;JA=ZYSq;0CMKd<9Mob=i@i)VYH_C)muhjCiDg=B(_)hr#~JaXYSwFUg%(Rp zG;5Liwi1>{(PWCkDwqznJ)p=jXeTm`3>Zkkl#q&ud7yAwtPqte}psBI1)NRr2G(Znie27VbnmjhbO5$n<2I=phw$U z0GR$%0a(%6uCo;FTPZoBX`e?|(Y}yO&!z%=NCW?jGpD8ke5HgH?u1>ViT_Wf;R@st zUFWroWb0T5LER?zW$*t5bopyG$?GCSWOF?JC+Vl;yGuRt_C$%*%1?!;jOW+!{=;&A zzU2At1#)TmKHn^VLX5?W0%**vc?^NVO4pT`J1_lQGjQreG{nFyx#5{fH%B0kyfW*AiiC(4vH53k5 delta 32 ncmeBXtmk0<%*(YyVMf$M4pUwY1_lQG(&8fhoc!d(iD9MymIn!8 diff --git a/manageSSL/admin.pyc b/manageSSL/admin.pyc index ae48dd7c03eed7fd53a1dde44cdecd33e17499b3..3fe69d414f44aacbe964793d8a9f73aed950c890 100644 GIT binary patch delta 45 zcmeyt*uuoY{F#^Qh2E*ii5%-C4H+01^fU5vQ}s)Wa})FQohy@4ivkk!QYRiU0RUL- B54->X delta 33 pcmZo+`oYM-{F#?)hr*1gi5%;BRT&r<^h=A2^mFo)6DM9U0RXOO3dH~b diff --git a/manageSSL/migrations/__init__.pyc b/manageSSL/migrations/__init__.pyc index f6a4b5090f42075b805cc171d72b9e8a9a36f263..12eee2e885015b5d59244265a51056495ab50460 100644 GIT binary patch delta 15 WcmeBT>|$hR{>;nuFT`jfdoutdi3G|3 delta 15 WcmeBT>|$hR{>;m@Lt(~5_GSPgc?7lq diff --git a/manageSSL/models.pyc b/manageSSL/models.pyc index 8e96a7b217f63a5631ddb4de3b919720de93b31e..771436811dafe149c18d5df6f76d24a4705e448f 100644 GIT binary patch delta 45 zcmey$*vQ1e{F#^Qh2E*ii5#mXjTjgh^fU5vQ}s)Wa})FQohy@4ivkk!QYRiT1prrq B53m3L delta 33 pcmZo<`pU?`{F#?)hr*1gi5#nW)fgBU^h=A2^mFo)6DOWA1puvS3b_CP diff --git a/manageSSL/urls.pyc b/manageSSL/urls.pyc index b92b185a8d92cc627543858607707aa869abc8f7..32a6890557ac48aae314f527f169bfec8a95fc2e 100644 GIT binary patch delta 16 XcmbQsGM9y&`7|#s+Dv1QE delta 16 XcmbQsGM9y&`7HV&q`{%**xNzbtYhhpD770|SG8Mt*Lpera)TVxGQpWm0NUKw@6%L@yHnFc%Im delta 32 ncmeBTtm9z*%*(YyVMf$M4pUxr1_lQG(&8fhoc!d(iD4!HmADCA diff --git a/packages/admin.pyc b/packages/admin.pyc index 8de82412a8a3e82be5b9a5dddc72d2bad28f1b32..5cc47c1e5fa66b99aeb393715c388870a467fcbb 100644 GIT binary patch delta 47 zcmcb~^puH%`7||tT{>;nuFT`jfdlLX7Yy`&u delta 15 WcmeBV>||tT{>;m@Lt(~5_9g%#Tm-WK diff --git a/packages/models.pyc b/packages/models.pyc index f18474426aff47764b0a88091d9a8a3e44740454..1bf311c4e060f172350350f248c9cbc7aef450a2 100644 GIT binary patch delta 81 zcmZ3^zMq|g`7Jgy; diff --git a/packages/urls.pyc b/packages/urls.pyc index 5cca1dbaeb324f2a79b00b40070bca3f8d33a3ed..1384b0489259307f10811860db0852e14f90c813 100644 GIT binary patch delta 16 Xcmey%`j?fR`7Czm delta 16 Ycmey%`j?fR`7HS`7{ikMG@1pJ delta 16 XcmX?TcF>HS`7f~Z){>;nuFT`jgI}f~Z){>;m@Lt(~7b|zK;Cy)ec diff --git a/plogical/__init__.pyc b/plogical/__init__.pyc index 8c64080f5245a6310988436e9a443ae775f4685a..dec0bc6d2faf37936ff595d6b0f2a6e2217f76c9 100644 GIT binary patch delta 13 Ucmb=cV`u)%%k?kBXd-(#03eqHqyPW_ delta 13 Ucmb=cV`u)%%e6yc#zgjV03U}0kN^Mx diff --git a/plogical/backupUtilities.pyc b/plogical/backupUtilities.pyc index a13bb82ed18a89737a861d6243e3b7ca0368f414..dbe57d8bd501042c8ebdafe6cbbc527041e3defc 100644 GIT binary patch delta 6586 zcmb7IZERat89wLQaS|tvlQ@avr1|LDu4&gaO|y0F+OAEL(sdnOxkY5Obe-dS)7W)v z*Y|c!z`?Lqg9!vH2c$`8W4{mrgogTWAi)nNJ|sXwVtfoCqzNPtnc?_(5 zF+vM0)~oqHs!E-jJog*5*q|y>$~FE@RT@+d>u6wSG)*lwD!)$VZp0K(8m7V&epf@# z5M7(Gj)=PSjPyl5CVgAf#jq;BtsJZ$6QUY+tJE)BGiZIwOwspPOk7o>nDJJd)THb>WkKy6h3-BeTUhcO=WsSf5gpX+J%k_FOOfF8;hu6dg%t zE@lfC1}~Qeou%3b24%VtFN*q1ajukieb>bQ>SsFku3@{Q<-71PZ+p*QH5)v1|hE}`3WRQH6s z(UvV+LUA3^eO5^KRHry90tqL8=+)EcR``J&d`_~l?Ic* z_ZEQ3g}8Hwq=ZOCXAaOD&@+hcOYuv1CLpL|X*ZV18!)-*^&8GzVwPDnilsl;5m! zF_pDwDFov^G;vJr;S31g5`>%<eN&LEaHznAS2 z;^=1Tw$2PynSyYTR!%ZdgEKw0zE8S2;))GdG)Q3<9PsdRl1@dOr#ZS*DhFQB%RbC3 z##R+qm&!Mw92V|Vl^6!;2iW3jVSy`NY*q7lje#c5IeHP+Zc{n1ivbyKP>#sH5bTY1 zmu^}-A%g}RS2frZI>m}swd9wZ78^mSyQ(W%wM$2qNl`l#f`68pNfC79X4}NfV#hLQ zfW??{HUl*6%GrWXLOFNi)1jQLY7Z9R4B>;iZEFCvoq(!-Ktx5uevhiese;CGFP#am z?{5QO%He;5s=#|dETRijtNl+Z zgn{rswZ5LiYxKk^$Iw+L0184E_WzPM-%sq?xpu%lmFt)I>5QmK3wF*f1ap2z@r`2_ zC6zxwq*t&bf!c26531ZoRS9@xZw* zdtTB!+u5_p45kat3T5)lpE|#-518k>yUjPc>SMQ5njduy>n`&~ zSE^cLbT;`I%m5mPvjWrdln<1@jn#S7equJ8cLpbg*982{Ci`1vf*dJ|GXw-D?fGsw zXlQRifs~eJOQ+q|yqghn#TA#*{;bI-pEj>{ck6D`ladI|W@MOwjHy zm7YHHgPxwTK#SQtdXv(5m#0hRV#f7688nm5=ZAzT2`d`q0QKf?Jr7oeO|gd`q5$8b ztwA``c@ki;yuF+4w^H2CMokcy$1S7Lc&Q}$EAF%hM)?ppv`gmc=P*_9>< z=%&3FNxOrFvNx?%O>u)8!8oA;=f?O!4On+XQ0YzwV+;)6}Q?@mM~BEJr&u8mD$@(OaGRG zG>UzWVh6v@;!tbEbGQ1K_6bl90W5qI}>dXVfaed*&!^6#?zVoQbGD6U{ zL9AH7&6t7Ie!_UW>}>+#Ip%ANsOe892cDfbZ|>^ddk3!uxaabQc&e;&B~`WYh@foG zjE^RCpyAg>+x2zxtqqMTG2CL8Dlkduf$r zzdjbP{+5`d{}n<|mlb1tKzNetCoRomWdc9%BM^MHk<|n%!*vN)r5SlP(^G|EaEY+o zOde4h*HMkr0ECB^Kd>D!37_m}nH63D0;beSkM`DZ6 zT+NBMTWmudEsXMB4wEDoan%ic9y~&>f`NHsEUD9`?%v|T59G(1+AA&`?<36rvEn`` z7hQ4RP@9R}ckjssw2<9LZj{a7P@F9~@~~m=L{$*&A7@G;k$}6vES90{rzpgnPct=V zemQ>hh#0v8dGT4q!V^mG>__@RmK zInjj)1PcL5@PYy7=IYI-_ViTci9jA2@uCq1nFV3SLjqnI04H3!L7DNYEB94GiKTcj z#Ulb9DULlfRX6|`;_VcVjsF1*BYaMx^TGkV^xfZAl`Xi!vh2fbGEO0Tj<62!IK-5ksN7}m`vpmY&zct` zf{@Q?r$7UnZ8>;FsUQ*^-<#U-HsLUcW(sEq=m~$JHcK9sZhU(0D;fvE1& literal 16990 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 delta 16 XcmX@;aL|FB`7^!8Bt$!7K>| zftm%wKY&0Zu^0?N0I!erdVPJL^xKNke6L#3pKTfL{J87)33mqb^!uH6BLy~sf$vLsFBm6WKUP6Y)PoByHB(%)XK#bp>|HI zLW{7@TPC$5yp*R$gqCwUDzuW*n$T)a$G~kh96E=F>@mK>YW4$<4HvUL<15y(JB9Cf zIU6-U;T+*o_Q&kuRrz{vh1is@ReJ{)PCnbmh-UW7naI4-N4$07l>Z{GomkZa#249H zXL{(&=XZFcJWCOJU9r3W$VC8yxfv~B2aWhP}w2p)3wL~W>?k8F! zrILopbr|}wigcM{$_v77q*9j%NT}QoQ&(nXhxllAoZ@jm9)zA&PuE(fnGFi222U{> zh-QaU?dh)HQ+lf(xMud#xo)`&6sKwrhq6qORhI~Ctf6hx%-ST4{5@ZD zYNI}7ffwN2iU-f>gFK+4Q?sxQfO`PD6rs)}8>mGsx@JTUNrUYn>>_Ma!j|TI0(xk{ z_WuS2pa!L~>$*x9sMJrovF`Sxbdpzn^I9d(yhw%h)rbxihAPn|N^A@wpH<@ImI`CJ zpH{5=?nc+Id-YsU*ZsOr^Je7yyi^yYf|qQ@UXm(3O68W5%|VZ@;~7U1vCs>G4rwH; zE2I%Mhf?=8QE~CKD0`&sT$0G1SeMO=Ja{Fn=XIly1SuB+;~Y*Hj!{F|NT|dDxH-!dD delta 16 Ycmeyv`iGUB`7OV diff --git a/plogical/mysqlUtilities.pyc b/plogical/mysqlUtilities.pyc index 2c5808d0ead5f7052854acf886cc623689aaba49..42df0f4aef042dec131363bb80b26384e5acfee7 100644 GIT binary patch delta 465 zcmZXRze)o^5XNWr)+Bei%l%2rDG|LukXWR#iA@Aa3Jb-^2`VDw%tj@V1ac=LUThQu z+pQ#x;0qXnr7z$MXk}$%Z691Lj9~H2Fy9Qz?_*yUUh`4uOH)Q$i-TxQo}>n$QX12! zqfS&bFojeahO#DMjo+%P(N6$4e*)f@m$<3b<{u%5Kr;%>7_c~8Az&MTN#Jg`3qS)I zS_*VO_`No5s$l=@5q21Wo7Z^OEOL^l7?yZ+uiiO5VNSafI0yVPF)CdP)1MIqh=dUV zqhgv^L?^SD5mS=H1Y}(jdsQeVR2K5LPyjmoS-&d{{;@F%E>j@{u$cySNJLM7-BW-~ zKo}8|E?h-)gIAS8B7@^}Ch&J-Dz|~yi^JFt6bOHUGwU}WzlbdJ9djkSSN;vvZTLZ_ z+i=!*-OV+p;sxG;=QsG9S)0oU?mw6HW3PSGaH^i~pLM!ye|Tt7#6E8&XDtIMNt5yS SP|Ewshl!$|(`{Z(-FyQ!LtaV% delta 577 zcmaiyKTiTd5XEN!fjc>m0|l`#tFb@{Xlyhz{y`H9O*9m0EabRdHDEY$cf^<+v9KVq z-9}^SConYHnAlp``7LZ{sEk99voaQw&6|BYo8QZPq~B&k{*EF)(c8yRNgDG-Nx+vN z38E6!7a>tHin{Geik}>bo5)tE0|1vVAnv7Qp(&-kXK;d02|*kc1S*Twe8SMUnmHWj;SYI+J7NLKMv5=iUnf^J&zDqm^=VJzj5) zai-T!Ij!rqePLRRo|x9p%!bXaJZ*Qh03o-c8=H*v!b{*n^w*)ML^}R3w5ZOgDe)d} FeFHTSgMR=3 diff --git a/plogical/phpUtilities.pyc b/plogical/phpUtilities.pyc index 76ec6a5b3fb77f1038a6e014ae7d159b2ab03232..0aaa4ef33d11beba71a5ea3d9586fe7e59bfb5d3 100644 GIT binary patch delta 1002 zcmZuvOKTHR6#nkbV>*w#VMECj!y3wtQ=iV`7nh0|abHDSQ_xV(Py{JWgCX7GVj=j@9>o;@& zNs<=oKnctr5U~@>1?x(8`5~IN0OI5>I2?VNSP7;2M<{R!pJTvo+ z$%J2rE@}AjF&C9I6G~d(|7IB;8-b?SGwsI!$@qbp1@W z>P(}_;hhyfa;wLCI#{bbw3L+Po|*)0hUl8ov<*%?Ks7WoaPt)|-V`pFK`oTGoE5(d zYw6SUTPHzXS?0wRdoI2r-^-$J--^GW-}Yg#XP1mhx}`uOGD7U(Q0aIsgCw delta 1135 zcmZuwJ8aWX6g|&Llg4(Ok3-xRP>?_<6{H_TMd^o+S}C3Qn4tx!R0wy#X;O$Y6y&Id zNDLkO7R18HTxIEm7+DyQSP={`GO;4Web0^JCY5}zp3gh?`|f=|@p&>H`IA%+&b--= ze@Wa|0i;L_k_8e^ivZ6*DGq}VSdId#siFb+Dx3&f3S5R3(9}9$RDew#Tb|-;SX`|r z%_RIJpHy?(Nw^A}I9d!&43#MAJMeY55%`1*!lDcIY>w!Xm$T8&i4clPy)3sRj(5oIE@^2%9)ni=&#^ThaNpjmlY(tj_Z3ehn^G&l))SW{s8qi zTm^rrnw>ioB6T?m|;A^ys7d;)bou3LxicOt}p zdmNv@pr}0j#L*0c&dRokhh7#$nizmJ2H?^clRu7y^3rl`4$(#&6&3YZgf)#RVhzGg zz@-t?;2ScLpaie*$uv)nqaKGm%7Tb7m03{NHr8vo1Q(+zon zEfuU*6uUt^a!$(oSF%wV3C5+)iiKk}K$d%|{oNc_vSNozrEtAm&zH3zLAooN{9%64 zyiP}(1h%{xqZ9vV6m@%4U^7BZ^Pl-OgVWJFPYOzwnf$hOniY7}x?GT5xhaTKLJ5Xl W7HXDM5&Z7pHU7^!H?W&1=;nuFT`jgdnG#nDIx^# delta 16 XcmZqRZ{TNV{>;m@Lt(~7_DXgDC;kN6 diff --git a/plogical/randomPassword.pyc b/plogical/randomPassword.pyc index c6a6e969886c59f49db5e621f6e370deed255951..d889e0881bbf2649bbe923103844d3ae7fa0db07 100644 GIT binary patch delta 16 Xcmcc0d6ko$`76@LO$J+|tb*(BZ|M+B*8wQu*$d;8{_Z@zi^?Bm}* z^6bCz*?+&dFz}Ygq9Op7?@##-KJy0zN?ywh6w4z71)^cOWc;K!r#94niBD zgC8w)zlPvJgcd(tesZEn#m~Nrc5_5hWU@FaUHB>Z9)!0y1Fg3&f`|?&ec+?? z{zq-X#um^|A>?{#h>TtX?K;_{GluPG7|JC>`J^+RbS8|`E7&pvKa0@SexE^m@W=F= z+D${|;OF(=jd6sGqF{JxlTMq^t_CHF5!Q5c(nKH9J`2p9C>frq{lwBK$4ts^qf;W2 zQZ^~ySh4`W2yvY0uk6yFL9Ylo3BQCeCS<+61V=_(Hj8fAqJ9>`+Omw$P$jCnAedGD zP)woH=T-7sjo)$*(+J0So;uHy;}PD-eEA^HeLgDW(3se2v|=VtaFaux|&wG*}7RHvBajEt*t?visN&K#ZM>W(TDYqIx0*(-5$fybi3D^P~|Hlm3@x^4Vl z0yi8q3d#Vj%?mh&#Qxs{&feP zpITBqocfN6>hG!3I~Qxy)XeJImYuR`l1h}Ld8SyXfqea)$%f>?UiXJ$p%_VJCw7IO!2ih!Yv!D&% QSp8BB>Q~gGnMJz#A0SS3rvLx| delta 2422 zcmcIm&2Jk;6#tEP{h2s%94C(LCSA8F4JD2nq!tigRT@Buk0Se!zy;ZvZSXp^)AgX% zXw4#3TtFPEy>I|7y>Y8@K|+y|3;zHY#1(Png5ZY4o3UfBgM$(zWbgC5k9qs%H@|t~ z?_WH4IjsF2k9}u+`8Zr0b5j6<^xUMU^+OnFKMc3O1!w4J5P+lM0gZJyIxL0Q44d1ujwqa{3o8OXF4xGMs8Zs7Wx}sa z`jv!Vner=1zcQ_qc3l&coeGagy+eZ-EGo&3Dt!!M99CRf-=BapCLxumea&Rtq*P^v zJcY7!YRY-Q`j8NQd`5xJ8h-_3$gB$aWpv2TDkM!IF6=J?A^~d(e2(@a)7y)2w5K4F zu%_X3(b;Gepowu<>lK2!fdA@f>Xet%pYEXhiFnhciL1S)kWU z$_;WMW+j(;xFjIbu;$<>bURd()?M*=wVY?PGne|?iKQB{R2NLrVPviOW3`^L)C;QA zk}h{HBPp+T?xNybchl9LtDVib;EUaWOQQq8pE#BOh|s6wbH5Ik$VfEo6E3RC9uV%b zpK#0iD8k*{*9U~#KPjY9S8rKT;8b<~WH+&UMH%+>qa*wjF{9rdhMGf{8GgD*V23JN z?y(QpXj}^D^2lWsVSfw`6P6bgs3Lf+*Ha{e36z{P52fu#`UAa##EjcZan`f**|Aav zXGan8U-&qDc3kS0elR*C&yK=iUSaTS=mZS>D?2p=@D3BH|BAs^$4dEsG1xqF(|A5S z4Ar2%l|g^wMY!_bQcW%iQk5nfoobr@XntY=)_FKd*;eS*WIdgN>0%*W_PPza0*|`v z;fYmT?N-5G&{5vxKzV7EuJ5;78Ina)Y!$cKRny+BG|Zjioyyh+wTAinJ1s`uSWU_r zJ@6hScNzCm(=RDm@IIOTX{i+_PoZGmr^(#7y;Iq4O_622W}920X}676Y`bY2t9$oT z-vn;d=>Gy*X%a?%PN8tmtlG_{FbemK){OL(%WoRD-Y}|dqno$Z*v_{ulgG=a^WN2T z$XiQ4${A!RMM(&qgl$$hoo!0LyHoQ*bC12lxhhL}i~~T=O1gKZ@yOy1-^xPWM)Gd2c26DJy$#Ev)VR znX5AzR_8B<)+j^iruX@LjlJvrF@NRy4QVJ!ab1e1rFd3~=cHIBAtEGf^X`XcOSDQf MM(I6Ddxzcn8_KP;(f|Me diff --git a/plogical/test.py b/plogical/test.py index e69de29bb..3cd95373f 100644 --- a/plogical/test.py +++ b/plogical/test.py @@ -0,0 +1,29 @@ +import subprocess +import time + +class CyberCPLogFileWriter: + fileName = "/home/cyberpanel.net/public_html/hello.txt" + + @staticmethod + def writeToFile(message): + try: + file = open(CyberCPLogFileWriter.fileName,'a') + file.writelines("[" + time.strftime( + "%I-%M-%S-%a-%b-%Y") + "] "+ message + "\n") + file.close() + except IOError,msg: + return "Can not write to error file." + + @staticmethod + def readLastNFiles(numberOfLines,fileName): + try: + + lastFewLines = subprocess.check_output(["tail", "-n",str(numberOfLines),fileName]) + + return lastFewLines + + except subprocess.CalledProcessError,msg: + return "File was empty" + + +CyberCPLogFileWriter.writeToFile("Hello") \ No newline at end of file diff --git a/plogical/tuning.pyc b/plogical/tuning.pyc index 51f7d544aa429b25973ef08b810f4cc7791137a7..f95a6bd3ae55c68524a41a069de77dc0dd4f36a7 100644 GIT binary patch delta 16 XcmZoLZ!l+P{>;nuFT`jgd!;l0EtUmS delta 16 XcmZoLZ!l+P{>;m@Lt(~7_DX30EOG@u diff --git a/plogical/virtualHostUtilities.pyc b/plogical/virtualHostUtilities.pyc index d8228a08615bdc3cc06ff9f3d13bbd41fbe88f4b..8c7559fdc464d547d3ebb52b978c08996abb775c 100644 GIT binary patch delta 6203 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 diff --git a/serverLogs/__init__.pyc b/serverLogs/__init__.pyc index 21bea6a61ac976e930136428da0b1b598c97b6b2..7010da2d8f11551a48e275a7a50c0313d19fd1e2 100644 GIT binary patch delta 45 zcmZo*>|x|!{>;m@t94%FL=IC)Qw9bG{fzwFRQ=N8+{8S6=gOqiqJYG_)QMhZ05!@E AS^xk5 delta 33 ocmeBSY+&SI{>;m@Lt#eLL=ID4O$G)A{nFwh{ha*d#ED^M0GEOZW&i*H diff --git a/serverLogs/admin.pyc b/serverLogs/admin.pyc index e05cc04497835ed165607351fdb12b2f628f884c..fb494858dd54cbc5661f9615b474b1e0446241df 100644 GIT binary patch delta 45 zcmey#*viDg{F#?)SL?jUi5%-CjTjgh^fU5vQ}s)Wa})FQohy@4ivkk!QYRiU1prw0 B54`{Y delta 33 pcmZo=`pL+_{F#?)hr*1gi5%;B)fgBU^h=A2^mFo)6DM9U1puzO3dsNf diff --git a/serverLogs/migrations/__init__.pyc b/serverLogs/migrations/__init__.pyc index 42443eeadab4779b2f4381ff5e7f209d18e9b861..8721b43c25b8ba19b185a27418970e9d07b44045 100644 GIT binary patch delta 15 WcmeBX>}F(V{>;nuFT`jfdkX*~rUcCZ delta 15 WcmeBX>}F(V{>;m@Lt(~5_7(slmIS!~ diff --git a/serverLogs/models.pyc b/serverLogs/models.pyc index 3bbd57612f381744d6e36535a728070fba261abc..8905b554ef09b11b635216a44c27e8ac63b5fe42 100644 GIT binary patch delta 45 zcmeyy*u=!a{F#?)SL?jUi5#mXjTsmi^fU5vQ}s)Wa})FQohy@4ivkk!QYRiT0{~Zy B53v9M delta 33 pcmZo-`o_q?{F#?)hr*1gi5#nW)fpHV^h=A2^mFo)6DOWA0|2eM3cUaT diff --git a/serverLogs/urls.pyc b/serverLogs/urls.pyc index 964bbf448073b2ab8c748438bce1248bcf90f693..7167ff0c865b0761c6407bf64ce6b11396dfef03 100644 GIT binary patch delta 16 XcmX@la-M~q`7>f-2Fv$f$ delta 16 XcmX@la-M~q`75XNWLyUX3>UU|oe4+K%cDu`gA2!bex!YKrzO>|QvJ`i&jLV{ql5NyJV zU}tBkVz9AD<)0u{c9vpeFYcTc?y%qdc6L8z_ITjBzo+ZVHosT%#ZCBIOy(J2PlNn{i3aXijMk%qjY*` zYaPVNe;1x;8PB*tm4qSNt8&lM2xACv_$JQG^P@n6Y6Pk}^{p$=WYAC{FrcnN6NxK~ zCXq8t$P#y8qM<>6P&J{hg-;?7NNa?6rLa2>N?^g33H!r{4IPmDZs_M8aP`;!+th|Y zk)3pL6}?j{c{!a}w;s_E3440V_vG1+NeLV&`{fc}EY*Ugxyp9A<|n95|KSHado^E? z delta 583 zcmYk4O>5LZ9LAsjnCvFmyzPs-+g5Gxw2Kr3X+e})^djh~9)tyvy0f&KW}CH{fI?Qq zmzy9m7Y{vn^QsiogCHLK1S;PA1meXn;7qm$Gnr?8nfX7NXF^^tKaQ4;{q>xW(W}7_ zM;BA$1{kt$FPENO2e^r(jzJxK&J7G2;1-?&gC@9LLJQm};W&7$gf_TaLI>O{q5JOp z8=~;AU?&+Z%1h3&JgEGUV>^@|%&&At&m109J`-K|Z}A6R(@#xD#WGdDqNA-4aQ~OQ z>pXv`wkr&DW+p@haTUTsY@;yog!DbDV9azB6=JQZfcsdRsVYM3ps1E57KD0QTM)&44O~&&%o=>LPrXfGs zCs@ys+g`s`)!uY6+1lgsh4+ANN#8%+a9EeMSU|oJP>U9+w;(V3Kl`Ut@n)o@rlqZ= wqou25K}%mr5Aut5{+y-o;w0sHGFsPvLZ|^9${>;mz{kbl3B8RD@IRgWOenx(7s(xv4ZepIkb7fL$Q9xo|>O?OK04-t; AApigX delta 33 ocmeBUY+~eK{>;m@Lt#eLL=ID4Z3YGg{nFwh{ha*d#ED@R0GK2RZU6uP diff --git a/serverStatus/admin.pyc b/serverStatus/admin.pyc index 0bc3985100fde9b6003b480d004d443bc428aed3..d3b09cb22f368d087452c8e10ad36b136a953b65 100644 GIT binary patch delta 45 zcmey(*v`bk{F#?a`*U67M2_{6CJYP=`WgATsrseGxrurD&Xq~2MFEL}6zU{>;nuFT`jfdm8{F-~`hE delta 15 WcmeBW>}6zU{>;m@Lt(~5_BH?_&;-8# diff --git a/serverStatus/models.pyc b/serverStatus/models.pyc index ec166d1f82e40b4beba70661b02bc625af31ec7c..3e99fa5f0ac627867a1ed580b14fddebccd8a810 100644 GIT binary patch delta 45 zcmeyt*uuoY{F#?a`*U67M2^*xrVI=W`WgATsrseGxrurD&Xq~2MFELOvoj@#2?3b`j6BSuj8Mn~q5+x4K>`2( diff --git a/serverStatus/views.pyc b/serverStatus/views.pyc index 25a53e31706d5ad3525f8b11b20c4d5cb17fd3df..2e55a25110a31296996f13a2241dd9bce4a9ab25 100644 GIT binary patch delta 214 zcmezBd_+Z>`7lp%!&%n)NpVPy!`;N2|C7{SEIzqyQAjg?V$^IVQ~%!~n>eR#x~7z;P2@XcdV zYz5j-EC#ZUk(rT~Nt%g=S%it7k&lI+QG`*7QA2!kw!$4z0ib-43W(4L5r!bbbaItq epqvztDZnJgC;)`~K+FS#0xX<-oW`7roFV{tupw~( delta 3605 zcmbVP-ESjT6+d_EIR3U{JJ}@L3Kw;Y)za;5D`g8vXqPmgEoz#Mw`>(kE#sLayT@X`k!;4k16QBYgK8=}8+W}G!C{UQ?|pZjsn zJ@?#ue!ubWAOGj}#ngwT{I8oo-|tcKXW{!gS)~8{=EXOsM9vcVHQKL{6YF)_ug~=c z?KjBD(vOJtSINnVvPMo`lndk(L|G@ND9Q#oB~doXDT{KEoQf!q@IviY6{~yy!Cy;3 zGr#)Vi^}3>T%o^eArKl^Y{VWp8naI{U-a&v`d~vPMY_+ zdtlB>vE1gP#%o zgy=x=3H%sV`Q!v91sY?G{FKJ%D)LnPtFuP*mw24Ug@xgul=R}zc)BT2zd$UDBGGHn zq)6i;^~>a}^P~xEN_@)47DZRpID=Jr!)zavuzuVTJ7mKO-A4{Nk}6M%`iTukB0aI? zIm2ak%SJ0~#8b{1(K~7!55vRRFz;oVrW{PNHj)>+s4cpXM)Y?zj)&pmY?xh0@7zOf z?xDWuK^oB&Ya9>5!`W~!g$wCUT;MWzOPpl1H*hXnNROyhsLQe1fQlpL39C?X;H=hh zf7WO#u}(jydxc0<#2gK%_s)Eq|MUC(z9-4U0OOz8|{qTo->s&DFP{u?k?c)qZRdP@Xj)f1e&6T-}wVwq}K&6%lw#QD+>N7@< z0y>6Kh$`2jKM3WAs@I@u*d z)W?-0df^AxX<~7tV~hHzzc}8y%t%S6+j= z8}U3D!8}YGaZa>gw@kt=U**drx%(f>w(5ZNN2ixyWk1P+Q)Jgz)LE=TNS<}rJ9dpE z;KsK*H+Oe#Nfz5LZ-2MbzGd&+c**23w-*M1+cO>a1m%LJA8Oa;jM#j5F>CPMT4W8P zDHj(I*$cY9eHogh-`6n-8BQP)v(Un>7h2eN(&7*XT`!qxe+^Ch1@^}`U&}@!SC4!n zKKnWhI!@Pgix11get!18b#=;oHYc&z_dDF4bKyR5`u8#6pvr6f8 zRk4byYLzfYdaPvRW8W!NRt0$~R;)c%P&Mnqd7j+nDtjG?Jgxm-Jb4P%Kw$wUvqC)Y zD#o-N*Cs$7^Z*uRl+Down3T0VG|((CcAbuwDf-hQF_)(?GiT?}m=zz3%*;T&A(jQT zKy_eg!1b7lJ z0zBQ=6_0BZ4h7S+=|)CoqVi04iUt?g&ERg=_nc<3I-B_Vp8jkYWb~LDC-fw->yZ;S z^{F=QplAH%C5`_Wxr`Hz%;-_r?L^TujGFh3K)KDK8y$qvzzYtWaoj@H!khxZpR|L> z2v5kI&lPfuLDXi*wlg#vmulzWR-yz`9fgkl1kd^kgaD#G^4$}gUl|0Fg@<}w-vfHbiXi${SGzkWJ$J|_Z1c;#V6oeJ2*FplQ<^Wb#^7r| z#e!*2B8!tFfGGgoalDuad9`lf2z&Mh@i(6_W9`s>W%kF?_5Z@r_^7iO)_a(89!FC^ z)0)aNT3Ujv>G^jRBNb~MSX#u-6~69yTvCgB-H5~;J_od)0zFN`flOt z=(oSeVrTZ-l}A?WE!NvCehASb{@F5Ht*t!C*{@n_s*0zAPZ3Wni|JfB_gwC=TqCyz H?e&iU6h5mw diff --git a/static/images/icons/repeat.png b/static/images/icons/repeat.png new file mode 100644 index 0000000000000000000000000000000000000000..a5b7bcfdb43602807c9a8d02c5117abdbce61c13 GIT binary patch literal 2865 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 P00000NkvXXu0mjf_I`op literal 0 HcmV?d00001 diff --git a/static/websiteFunctions/websiteFunctions.js b/static/websiteFunctions/websiteFunctions.js index fd76ef0fb..159e19277 100644 --- a/static/websiteFunctions/websiteFunctions.js +++ b/static/websiteFunctions/websiteFunctions.js @@ -2074,7 +2074,8 @@ app.controller('suspendWebsiteControl', function($scope,$http) { /* Java script code to suspend/un-suspend ends here */ -/* Java script code to manage cron ends here */ + +/* Java script code to manage cron */ app.controller('manageCronController', function($scope,$http) { $("#manageCronLoading").hide(); @@ -2082,11 +2083,11 @@ app.controller('manageCronController', function($scope,$http) { $("#cronTable").hide(); $("#saveCronButton").hide(); $("#addCronButton").hide(); - + $("#addCronFailure").hide(); $("#cronEditSuccess").hide(); $("#fetchCronFailure").hide(); - + $scope.fetchWebsites = function(){ $("#manageCronLoading").show(); @@ -2109,7 +2110,7 @@ app.controller('manageCronController', function($scope,$http) { $http.post(url, data,config).then(ListInitialDatas, cantLoadInitialDatas); function ListInitialDatas(response) { - if (response.data.getWebsiteCron == 0) + if (response.data.getWebsiteCron === 0) { console.log(response.data); $scope.errorMessage = response.data.error_message; @@ -2138,7 +2139,7 @@ app.controller('manageCronController', function($scope,$http) { $("#cronEditSuccess").hide(); } }; - + $scope.fetchCron = function(cronLine){ $("#cronTable").show(); @@ -2146,14 +2147,14 @@ app.controller('manageCronController', function($scope,$http) { $("#modifyCronForm").show(); $("#saveCronButton").show(); $("#addCronButton").hide(); - + $("#addCronFailure").hide(); $("#cronEditSuccess").hide(); $("#fetchCronFailure").hide(); - + $scope.line = cronLine; console.log($scope.line); - + var websiteToBeModified = $scope.websiteToBeModified; url = "/websites/getCronbyLine"; var data = { @@ -2171,7 +2172,7 @@ app.controller('manageCronController', function($scope,$http) { function ListInitialDatas(response) { console.log(response); - if (response.data.getWebsiteCron == 0) + if (response.data.getWebsiteCron === 0) { console.log(response.data); $scope.errorMessage = response.data.error_message; @@ -2207,7 +2208,7 @@ app.controller('manageCronController', function($scope,$http) { $("#cronEditSuccess").hide(); } }; - + $scope.populate = function(){ splitTime = $scope.defined.split(" "); $scope.minute = splitTime[0]; @@ -2216,9 +2217,9 @@ app.controller('manageCronController', function($scope,$http) { $scope.month = splitTime[3]; $scope.weekday = splitTime[4]; } - + $scope.addCronForm = function(){ - + $("#addCronFailure").hide(); $("#cronEditSuccess").hide(); $("#fetchCronFailure").hide(); @@ -2226,10 +2227,10 @@ app.controller('manageCronController', function($scope,$http) { if (!$scope.websiteToBeModified) { alert("Please select a domain first"); } - else + else { $scope.minute = $scope.hour = $scope.monthday = $scope.month = $scope.weekday = $scope.command = $scope.line = ""; - + $("#cronTable").hide(); $("#manageCronLoading").hide(); $("#modifyCronForm").show(); @@ -2237,17 +2238,16 @@ app.controller('manageCronController', function($scope,$http) { $("#addCronButton").show(); } }; - + $scope.addCronFunc = function(){ $("#manageCronLoading").show(); - $scope.errorMessage = "test1"; $("#addCronFailure").hide(); $("#cronEditSuccess").hide(); $("#fetchCronFailure").hide(); - + var websiteToBeModified = $scope.websiteToBeModified; - + url = "/websites/addNewCron"; var data = { domain : websiteToBeModified, @@ -2269,20 +2269,15 @@ app.controller('manageCronController', function($scope,$http) { function ListInitialDatas(response) { console.log(response); - if (response.data.addNewCron == 0) + if (response.data.addNewCron === 0) { - console.log(response.data) - $scope.errorMessage = response.data.error_message; - console.log($scope.errorMessage) - $scope.errorMessage = "test2"; - console.log(response.data.error_message) + $scope.errorMessage = response.data.error_message $("#manageCronLoading").hide(); $("#cronEditSuccess").hide(); $("#fetchCronFailure").hide(); $("#addCronFailure").show(); } else{ - console.log(response.data); $("#cronTable").hide(); $("#manageCronLoading").hide(); $("#cronEditSuccess").show(); @@ -2298,16 +2293,16 @@ app.controller('manageCronController', function($scope,$http) { $("#fetchCronFailure").hide(); } }; - - + + $scope.removeCron = function(line){ $("#manageCronLoading").show(); - + $("#addCronFailure").hide(); $("#cronEditSuccess").hide(); $("#fetchCronFailure").hide(); - + url = "/websites/remCronbyLine"; var data = { domain : $scope.websiteToBeModified, @@ -2324,9 +2319,8 @@ app.controller('manageCronController', function($scope,$http) { function ListInitialDatas(response) { console.log(response); - if (response.data.remCronbyLine == 0) + if (response.data.remCronbyLine === 0) { - console.log(response.data) $scope.errorMessage = response.data.error_message; $("#manageCronLoading").hide(); $("#cronEditSuccess").hide(); @@ -2334,7 +2328,6 @@ app.controller('manageCronController', function($scope,$http) { $("#addCronFailure").show(); } else{ - console.log(response.data); $("#cronTable").hide(); $("#manageCronLoading").hide(); $("#cronEditSuccess").show(); @@ -2350,16 +2343,16 @@ app.controller('manageCronController', function($scope,$http) { $("#fetchCronFailure").hide(); } }; - + $scope.modifyCronFunc = function(){ $("#manageCronLoading").show(); $("#addCronFailure").hide(); $("#cronEditSuccess").hide(); $("#fetchCronFailure").hide(); - + var websiteToBeModified = $scope.websiteToBeModified; - + url = "/websites/saveCronChanges"; var data = { domain : websiteToBeModified, @@ -2380,11 +2373,10 @@ app.controller('manageCronController', function($scope,$http) { $http.post(url, data,config).then(ListInitialDatas, cantLoadInitialDatas); function ListInitialDatas(response) { - console.log(response); - if (response.data.addNewCron == 0) + if (response.data.addNewCron === 0) { - console.log(response.data) + $scope.errorMessage = response.data.error_message; $("#manageCronLoading").hide(); $("#cronEditSuccess").hide(); @@ -2408,7 +2400,7 @@ app.controller('manageCronController', function($scope,$http) { $("#fetchCronFailure").hide(); } }; - + }); diff --git a/tuning/__init__.pyc b/tuning/__init__.pyc index 512819b1aef919a9dbfc6cd058789b02ab4978f9..4d8b43840146df738d0e0304b3901807e8fdc278 100644 GIT binary patch delta 44 zcmb>FVB}!_%*&OYQ4=|l!&K6cfq_9kBR@A)zqB|vF;CyQGAXqvATcj>qL&c>A0`dA delta 32 ncmeBRtl?n(%*(Y?VMf$M4pUxL1_lQG(&8fhoc!d(iD5;nuKg4JvdjkL?I0V7~ delta 15 WcmZo?Y-eO={>;m@Q(?wL_67hVCYl;`7F4ApCr&(L1OUA53oQTu diff --git a/tuning/urls.pyc b/tuning/urls.pyc index f9f7f02c6abf08ddf9de0145ebf008899237bfa4..32ec086e9949bf317bb667ad6f18e9f0609f03ce 100644 GIT binary patch delta 16 XcmZ3(vWA77`7>}TX){>;mDbW2O*L=IC)3kC)T{fzwFRQ=N8+{8S6=gOqiqJYG_)QMh}06VS@ Ah5!Hn delta 33 ocmeBYY-Z$O{>;m@Q(;EbL=ID49R>yl{nFwh{ha*d#ED^+0GN#la{vGU diff --git a/userManagment/admin.pyc b/userManagment/admin.pyc index 0c98d7f1c54d6d7200554458359c1167858e9ceb..0f08cf20cde77126424fc01e968060038cb648d4 100644 GIT binary patch delta 45 zcmeyv*uliX{F#^Q=$4kqi5%-CO&J&%^fU5vQ}s)Wa})FQohy@4ivkk!QYRj<003Uw B59t5^ delta 33 pcmeBR`oqY<{F#?)r^1Y=i5%;BH5nKf^h=A2^mFo)6DMA<006JV3f2Gs diff --git a/userManagment/migrations/__init__.pyc b/userManagment/migrations/__init__.pyc index c509d5be867b99d5f1ac218ac33d8376718ce40a..1dcc82500b5ad74dfd9520eec5cc06ea2b5d8133 100644 GIT binary patch delta 15 WcmeBU>|;nuKg4JvdpiIm0|eIq delta 15 WcmeBU>|;m@Q(?wL_I3aw^8~{H diff --git a/userManagment/models.pyc b/userManagment/models.pyc index b8a242748bb08afd4328d7b711417f77ca967710..b8e02570959e852af66b50547f96068e60e081b9 100644 GIT binary patch delta 45 zcmey#*viDg{F#^Q=$4kqi5#mX%@`OM^fU5vQ}s)Wa})FQohy@4ivkk!QYRj;1OQ!d B58VI& delta 33 pcmZo=`pL+_{F#?)r^1Y=i5#nWwHO!}^h=A2^mFo)6DOXr1OTqZ3d#Tg diff --git a/userManagment/urls.pyc b/userManagment/urls.pyc index cda7a23e384236ada68a9a4ea92bc8e8ccef1d2e..ec2495aaf817e4a83b8c702b067ada68585337af 100644 GIT binary patch delta 16 XcmX@fc9M;q`7`u%8Fi8b9 delta 16 XcmX@fc9M;q`7~@@DLCg#cl>*E)3=CNe3@MBZlC_Ksl{+U#b1q~&G5Ig& zM{Yf)8a9R$DWC-3V|8g7OZafTYc$uiubj8c<}xEC_=O%~yC zWAxn|%@fEdUdqeBz)+r=RGe9oTI`dVn^}?xw2fi&Vcy@2jPoY%=MQ3H z@MacaFBZo8ll{dLRNpZH-L!@Y)lH#bJ|ja46GJu=Ls81+E85#{7$j4K z!NQLiL3}|5$;ti_29rxAmoToHEG6Z}_;PciR1_1N2qObSam(a`GJYVN`DNEJF&1v# ZC%>GDv1@ahQWhg;KBo+)DQ7IFBmmS7Oi=&; delta 258 zcmez9e$$oFAD~m?n2~OEOALZsbZ~VPi;++t!pv{^vdi-qyt`vdMhE}^ diff --git a/websiteFunctions/__init__.pyc b/websiteFunctions/__init__.pyc index cdaa8605d00172275fc6ee7c3fecf837eb9022fc..6cdcdddf3da17eba9bae42e2aa55b479ef1bd0dc 100644 GIT binary patch delta 45 zcmZo;oW#h%{F#@lx3@fUB8RD@H3I{Kenx(7s(xv4ZepIkb7fL$Q9xo|>O?Oa04^R5 ACIA2c delta 33 ocmbQl*v81g{F#?)r^1Y=i5#Z9`V0&V`lZE1`Z@W@i4((Y0GWUZe*gdg diff --git a/websiteFunctions/admin.pyc b/websiteFunctions/admin.pyc index bdf7c76e4d07428e01f1b9cea63ee4c7d80ef7bc..a7f1d7fa013b324cbd6e389d12497fbc6d4120c9 100644 GIT binary patch delta 46 zcmcb>bccz9`7M$@c=$953>F4ApCr*}Sv`PezE;j{g delta 16 YcmZ3(y@s2e`7|FpPS_I$# delta 15 WcmbQpIFXT^`7r-Ta!x2#fIK aXtpJoiYME$Z^9y~%dreYRAsUNry2l-!zY{o diff --git a/websiteFunctions/static/images/icons/repeat.png b/websiteFunctions/static/images/icons/repeat.png new file mode 100644 index 0000000000000000000000000000000000000000..a5b7bcfdb43602807c9a8d02c5117abdbce61c13 GIT binary patch literal 2865 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 P00000NkvXXu0mjf_I`op literal 0 HcmV?d00001 diff --git a/websiteFunctions/static/websiteFunctions/websiteFunctions.js b/websiteFunctions/static/websiteFunctions/websiteFunctions.js index fd76ef0fb..159e19277 100644 --- a/websiteFunctions/static/websiteFunctions/websiteFunctions.js +++ b/websiteFunctions/static/websiteFunctions/websiteFunctions.js @@ -2074,7 +2074,8 @@ app.controller('suspendWebsiteControl', function($scope,$http) { /* Java script code to suspend/un-suspend ends here */ -/* Java script code to manage cron ends here */ + +/* Java script code to manage cron */ app.controller('manageCronController', function($scope,$http) { $("#manageCronLoading").hide(); @@ -2082,11 +2083,11 @@ app.controller('manageCronController', function($scope,$http) { $("#cronTable").hide(); $("#saveCronButton").hide(); $("#addCronButton").hide(); - + $("#addCronFailure").hide(); $("#cronEditSuccess").hide(); $("#fetchCronFailure").hide(); - + $scope.fetchWebsites = function(){ $("#manageCronLoading").show(); @@ -2109,7 +2110,7 @@ app.controller('manageCronController', function($scope,$http) { $http.post(url, data,config).then(ListInitialDatas, cantLoadInitialDatas); function ListInitialDatas(response) { - if (response.data.getWebsiteCron == 0) + if (response.data.getWebsiteCron === 0) { console.log(response.data); $scope.errorMessage = response.data.error_message; @@ -2138,7 +2139,7 @@ app.controller('manageCronController', function($scope,$http) { $("#cronEditSuccess").hide(); } }; - + $scope.fetchCron = function(cronLine){ $("#cronTable").show(); @@ -2146,14 +2147,14 @@ app.controller('manageCronController', function($scope,$http) { $("#modifyCronForm").show(); $("#saveCronButton").show(); $("#addCronButton").hide(); - + $("#addCronFailure").hide(); $("#cronEditSuccess").hide(); $("#fetchCronFailure").hide(); - + $scope.line = cronLine; console.log($scope.line); - + var websiteToBeModified = $scope.websiteToBeModified; url = "/websites/getCronbyLine"; var data = { @@ -2171,7 +2172,7 @@ app.controller('manageCronController', function($scope,$http) { function ListInitialDatas(response) { console.log(response); - if (response.data.getWebsiteCron == 0) + if (response.data.getWebsiteCron === 0) { console.log(response.data); $scope.errorMessage = response.data.error_message; @@ -2207,7 +2208,7 @@ app.controller('manageCronController', function($scope,$http) { $("#cronEditSuccess").hide(); } }; - + $scope.populate = function(){ splitTime = $scope.defined.split(" "); $scope.minute = splitTime[0]; @@ -2216,9 +2217,9 @@ app.controller('manageCronController', function($scope,$http) { $scope.month = splitTime[3]; $scope.weekday = splitTime[4]; } - + $scope.addCronForm = function(){ - + $("#addCronFailure").hide(); $("#cronEditSuccess").hide(); $("#fetchCronFailure").hide(); @@ -2226,10 +2227,10 @@ app.controller('manageCronController', function($scope,$http) { if (!$scope.websiteToBeModified) { alert("Please select a domain first"); } - else + else { $scope.minute = $scope.hour = $scope.monthday = $scope.month = $scope.weekday = $scope.command = $scope.line = ""; - + $("#cronTable").hide(); $("#manageCronLoading").hide(); $("#modifyCronForm").show(); @@ -2237,17 +2238,16 @@ app.controller('manageCronController', function($scope,$http) { $("#addCronButton").show(); } }; - + $scope.addCronFunc = function(){ $("#manageCronLoading").show(); - $scope.errorMessage = "test1"; $("#addCronFailure").hide(); $("#cronEditSuccess").hide(); $("#fetchCronFailure").hide(); - + var websiteToBeModified = $scope.websiteToBeModified; - + url = "/websites/addNewCron"; var data = { domain : websiteToBeModified, @@ -2269,20 +2269,15 @@ app.controller('manageCronController', function($scope,$http) { function ListInitialDatas(response) { console.log(response); - if (response.data.addNewCron == 0) + if (response.data.addNewCron === 0) { - console.log(response.data) - $scope.errorMessage = response.data.error_message; - console.log($scope.errorMessage) - $scope.errorMessage = "test2"; - console.log(response.data.error_message) + $scope.errorMessage = response.data.error_message $("#manageCronLoading").hide(); $("#cronEditSuccess").hide(); $("#fetchCronFailure").hide(); $("#addCronFailure").show(); } else{ - console.log(response.data); $("#cronTable").hide(); $("#manageCronLoading").hide(); $("#cronEditSuccess").show(); @@ -2298,16 +2293,16 @@ app.controller('manageCronController', function($scope,$http) { $("#fetchCronFailure").hide(); } }; - - + + $scope.removeCron = function(line){ $("#manageCronLoading").show(); - + $("#addCronFailure").hide(); $("#cronEditSuccess").hide(); $("#fetchCronFailure").hide(); - + url = "/websites/remCronbyLine"; var data = { domain : $scope.websiteToBeModified, @@ -2324,9 +2319,8 @@ app.controller('manageCronController', function($scope,$http) { function ListInitialDatas(response) { console.log(response); - if (response.data.remCronbyLine == 0) + if (response.data.remCronbyLine === 0) { - console.log(response.data) $scope.errorMessage = response.data.error_message; $("#manageCronLoading").hide(); $("#cronEditSuccess").hide(); @@ -2334,7 +2328,6 @@ app.controller('manageCronController', function($scope,$http) { $("#addCronFailure").show(); } else{ - console.log(response.data); $("#cronTable").hide(); $("#manageCronLoading").hide(); $("#cronEditSuccess").show(); @@ -2350,16 +2343,16 @@ app.controller('manageCronController', function($scope,$http) { $("#fetchCronFailure").hide(); } }; - + $scope.modifyCronFunc = function(){ $("#manageCronLoading").show(); $("#addCronFailure").hide(); $("#cronEditSuccess").hide(); $("#fetchCronFailure").hide(); - + var websiteToBeModified = $scope.websiteToBeModified; - + url = "/websites/saveCronChanges"; var data = { domain : websiteToBeModified, @@ -2380,11 +2373,10 @@ app.controller('manageCronController', function($scope,$http) { $http.post(url, data,config).then(ListInitialDatas, cantLoadInitialDatas); function ListInitialDatas(response) { - console.log(response); - if (response.data.addNewCron == 0) + if (response.data.addNewCron === 0) { - console.log(response.data) + $scope.errorMessage = response.data.error_message; $("#manageCronLoading").hide(); $("#cronEditSuccess").hide(); @@ -2408,7 +2400,7 @@ app.controller('manageCronController', function($scope,$http) { $("#fetchCronFailure").hide(); } }; - + }); diff --git a/websiteFunctions/templates/websiteFunctions/listCron.html b/websiteFunctions/templates/websiteFunctions/listCron.html index 9908f6e8b..452926467 100644 --- a/websiteFunctions/templates/websiteFunctions/listCron.html +++ b/websiteFunctions/templates/websiteFunctions/listCron.html @@ -7,10 +7,10 @@ {% get_current_language as LANGUAGE_CODE %} -

+

{% trans "Cron Management" %}

-

{% trans "Create, edit or delete your cron from this page." %}

+

{% trans "Create, edit or delete your cron jobs from this page." %}

@@ -21,7 +21,7 @@
-
+
@@ -149,20 +149,18 @@ {{ messger }}
-

{% trans "Cannot fetch website details. Error message:" %} {{ errorMessage }}

+

{% trans "Cannot fetch website details. Error message:" %} {$ errorMessage $}

-

{% trans "Unable to add/save Cron. Error message:" %} {{ errorMessage }}

+

{% trans "Unable to add/save Cron. Error message:" %} {$ errorMessage $}

{% trans "Cron job saved" %}

- - -
+
diff --git a/websiteFunctions/templates/websiteFunctions/website.html b/websiteFunctions/templates/websiteFunctions/website.html index c844d82c6..01f59b4a8 100644 --- a/websiteFunctions/templates/websiteFunctions/website.html +++ b/websiteFunctions/templates/websiteFunctions/website.html @@ -16,13 +16,18 @@ {% if not error %} -
-
-

- {% trans "Resource Usage" %} -

-
-
+ +
+ +
+ +

+ {% trans "Resource Usage" %} +

+ + +
+
@@ -97,9 +102,11 @@ - - - + + + + + @@ -250,7 +257,7 @@
-
+
@@ -261,7 +268,7 @@
-
+
@@ -272,6 +279,17 @@
+ + + diff --git a/websiteFunctions/urls.py b/websiteFunctions/urls.py index ab908357a..bb792c247 100644 --- a/websiteFunctions/urls.py +++ b/websiteFunctions/urls.py @@ -56,8 +56,9 @@ urlpatterns = [ url(r'^fetchDomains', views.fetchDomains, name='submitDomainCreation'), url(r'^changePHP', views.changePHP, name='changePHP'), url(r'^submitDomainDeletion', views.submitDomainDeletion, name='submitDomainDeletion'), - + # crons + url(r'^listCron',views.listCron,name="listCron"), url(r'^getWebsiteCron',views.getWebsiteCron,name="getWebsiteCron"), url(r'^getCronbyLine',views.getCronbyLine,name="getCronbyLine"), diff --git a/websiteFunctions/urls.pyc b/websiteFunctions/urls.pyc index 1446063750e224714112b77595a028fa051cc84c..3f3ffd8a3205ad5c060ad4f1624619ecd60bd415 100644 GIT binary patch delta 84 zcmZn_?GTb?{>;l|mueK1%m4)nK-vL_i;Ff&XEX7n%P>UAF{Cgt1Z!At7GMryVhoy` g%&N|4wz-G3nu$q6e)3(8`;%{RCNf%0w&Ah`0KB9U-v9sr delta 466 zcmeAWY891c{>;nesyrhqnE?vafV2Y;7k}6&oy}CA%E*vn&5+8(kR`{E!orYZ!_dsc z2okgf3(A89?O=lTU_k}2paV?M5iF<(7IcCMI)eq3z=AF?L07P#GFZ?JB$&>v#1N&z zkix_etl_?S5>pTpWANmsEb2^#Mw@wAtC{MHIe|`%%gHP*aW2ZwE8zh0V4PxpkW_kV zNqA~fab`&>SOFhU3{|KYBm`0hl25Ai$;?YF;f1I|h(Ht-rRE}pz>30Ago*_~MinQP zf$eh6NX$!5EiM5$15K=$8>BEXCB-kb9PBJEARociP@UYxeqTCB7AP7d2O{J_gaU|A Y1QAM;(>PKX-6o&ru;meD7G;D%0C~D_<^TWy diff --git a/websiteFunctions/views.py b/websiteFunctions/views.py index 132e496d3..126fc335b 100644 --- a/websiteFunctions/views.py +++ b/websiteFunctions/views.py @@ -37,480 +37,7 @@ def loadWebsitesHome(request): except KeyError: return redirect(loadLoginPage) -def listCron(request): - try: - val = request.session['userID'] - try: - admin = Administrator.objects.get(pk=request.session['userID']) - if admin.type == 1: - websites = Websites.objects.all() - websitesName = [] - - for items in websites: - websitesName.append(items.domain) - else: - if admin.type == 2: - websites = admin.websites_set.all() - admins = Administrator.objects.filter(owner=admin.pk) - websitesName = [] - - for items in websites: - websitesName.append(items.domain) - - for items in admins: - webs = items.websites_set.all() - - for web in webs: - websitesName.append(web.domain) - else: - websitesName = [] - websites = Websites.objects.filter(admin=admin) - for items in websites: - websitesName.append(items.domain) - - return render(request, 'websiteFunctions/listCron.html', {'websiteList':websitesName}) - except BaseException, msg: - logging.CyberCPLogFileWriter.writeToFile(str(msg)) - return HttpResponse(str(msg)) - except KeyError: - return redirect(loadLoginPage) - - - -def getWebsiteCron(request): - try: - val = request.session['userID'] - if request.method == 'POST': - try: - - data = json.loads(request.body) - domain = data['domain'] - - admin = Administrator.objects.get(pk=request.session['userID']) - website = Websites.objects.get(domain=domain) - - if Websites.objects.filter(domain=domain).exists(): - pass - else: - dic = {'getWebsiteCron': 0, 'error_message': 'You do not own this domain'} - json_data = json.dumps(dic) - return HttpResponse(json_data) - - if admin.type != 1: - website = Websites.objects.get(domain=domain) - if website.admin != admin: - dic = {'getWebsiteCron': 0, 'error_message': 'You do not own this domain'} - json_data = json.dumps(dic) - return HttpResponse(json_data) - - cronPath = "/var/spool/cron/" + website.externalApp - cmd = 'sudo test -e '+cronPath+' && echo Exists' - output = os.popen(cmd).read() - - if "Exists" not in output: - data_ret = {'getWebsiteCron': 1, "user": website.externalApp, "crons":{}} - final_json = json.dumps(data_ret) - return HttpResponse(final_json) - - cronPath = "/var/spool/cron/" + website.externalApp - crons = [] - - try: - f = subprocess.check_output(["sudo","cat",cronPath]) - print f - except subprocess.CalledProcessError as error: - dic = {'getWebsiteCron': 0, 'error_message': 'Unable to access Cron file'} - json_data = json.dumps(dic) - return HttpResponse(json_data) - counter = 0 - for line in f.split("\n"): - if line: - split = line.split(" ", 5) - print line - print split - if len(split) == 6: - counter += 1 - crons.append({"line" : counter, - "minute" : split[0], - "hour" : split[1], - "monthday": split[2], - "month" : split[3], - "weekday" : split[4], - "command" : split[5]}) - - print json.dumps(crons) - - data_ret = {'getWebsiteCron': 1, "user": website.externalApp, "crons":crons} - final_json = json.dumps(data_ret) - return HttpResponse(final_json) - except BaseException,msg: - print msg - dic = {'getWebsiteCron': 0, 'error_message': str(msg)} - json_data = json.dumps(dic) - return HttpResponse(json_data) - - except KeyError, msg: - status = {"getWebsiteCron":0,"error":"Not Logged in as admin"} - final_json = json.dumps(status) - return HttpResponse(final_json) - -def getCronbyLine(request): - try: - val = request.session['userID'] - if request.method == 'POST': - try: - - data = json.loads(request.body) - domain = data['domain'] - line = data['line'] - - line -= 1 - admin = Administrator.objects.get(pk=request.session['userID']) - website = Websites.objects.get(domain=domain) - - if Websites.objects.filter(domain=domain).exists(): - pass - else: - dic = {'getWebsiteCron': 0, 'error_message': 'You do not own this domain'} - json_data = json.dumps(dic) - return HttpResponse(json_data) - - if admin.type == 1: - pass - else: - website = Websites.objects.get(domain=domain) - if website.admin == admin: - pass - else: - dic = {'getWebsiteCron': 0, 'error_message': 'You do not own this domain'} - json_data = json.dumps(dic) - return HttpResponse(json_data) - - cronPath = "/var/spool/cron/" + website.externalApp - crons = [] - - try: - f = subprocess.check_output(["sudo","cat",cronPath]) - print f - except subprocess.CalledProcessError as error: - dic = {'getWebsiteCron': 0, 'error_message': 'Unable to access Cron file'} - json_data = json.dumps(dic) - return HttpResponse(json_data) - - f = f.split("\n") - cron = f[line] - - if not cron: - dic = {'getWebsiteCron': 0, 'error_message':'Cron line empty'} - json_data = json.dumps(dic) - return HttpResponse(json_data) - - cron = cron.split(" ", 5) - if len(cron) != 6: - dic = {'getWebsiteCron': 0, 'error_message':'Cron line incorrect'} - json_data = json.dumps(dic) - return HttpResponse(json_data) - - - data_ret = {"getWebsiteCron": 1, - "user": website.externalApp, - "cron":{ - "minute":cron[0], - "hour":cron[1], - "monthday":cron[2], - "month":cron[3], - "weekday":cron[4], - "command":cron[5], - }, - "line":line} - final_json = json.dumps(data_ret) - return HttpResponse(final_json) - except BaseException,msg: - print msg - dic = {'getWebsiteCron': 0, 'error_message': str(msg)} - json_data = json.dumps(dic) - return HttpResponse(json_data) - - except KeyError, msg: - status = {"getWebsiteCron":0,"error":"Not Logged in"} - final_json = json.dumps(status) - return HttpResponse(final_json) - -def saveCronChanges(request): - try: - val = request.session['userID'] - if request.method == 'POST': - try: - - data = json.loads(request.body) - domain = data['domain'] - line = data['line'] - - minute = data['minute'] - hour = data['hour'] - monthday = data['monthday'] - month = data['month'] - weekday = data['weekday'] - command = data['command'] - - admin = Administrator.objects.get(pk=request.session['userID']) - website = Websites.objects.get(domain=domain) - - if Websites.objects.filter(domain=domain).exists(): - pass - else: - dic = {'getWebsiteCron': 0, 'error_message': 'You do not own this domain'} - json_data = json.dumps(dic) - return HttpResponse(json_data) - - if admin.type == 1: - pass - else: - website = Websites.objects.get(domain=domain) - if website.admin == admin: - pass - else: - dic = {'getWebsiteCron': 0, 'error_message': 'You do not own this domain'} - json_data = json.dumps(dic) - return HttpResponse(json_data) - - cronPath = "/var/spool/cron/" + website.externalApp - tempPath = "/home/cyberpanel/" + website.externalApp + str(randint(10000,99999)) + ".cron.tmp" - - finalCron = "%s %s %s %s %s %s" % (minute, hour, monthday, month, weekday, command) - - o = subprocess.call(['sudo','cp',cronPath,tempPath]) - if o is not 0: - data_ret = {'addNewCron': 0, 'error_message': 'Unable to copy to temporary files'} - final_json = json.dumps(data_ret) - return HttpResponse(final_json) - - # Confirming that directory is read/writable - o = subprocess.call(['sudo','chown','cyberpanel:cyberpanel',tempPath]) - if o is not 0: - data_ret = {'addNewCron': 0, 'error_message': 'Error Changing Permissions'} - final_json = json.dumps(data_ret) - return HttpResponse(final_json) - - with open(tempPath, 'r') as file: - data = file.readlines() - - data[line] = finalCron+'\n' - - with open(tempPath, 'w') as file: - file.writelines( data ) - print 'test' - - output = subprocess.call(["sudo","/usr/bin/crontab", "-u", website.externalApp, tempPath]) - - os.remove(tempPath) - if output != 0: - data_ret = {'addNewCron': 0, 'error_message': 'Incorrect Syntax cannot be accepted'} - final_json = json.dumps(data_ret) - return HttpResponse(final_json) - - data_ret = {"getWebsiteCron": 1, - "user": website.externalApp, - "cron": finalCron, - "line":line} - final_json = json.dumps(data_ret) - return HttpResponse(final_json) - except BaseException,msg: - print msg - dic = {'getWebsiteCron': 0, 'error_message': str(msg)} - json_data = json.dumps(dic) - return HttpResponse(json_data) - - except KeyError, msg: - status = {"getWebsiteCron":0,"error":"Not Logged in"} - final_json = json.dumps(status) - return HttpResponse(final_json) - -def remCronbyLine(request): - try: - val = request.session['userID'] - if request.method == 'POST': - try: - - data = json.loads(request.body) - domain = data['domain'] - line = data['line'] - - line -= 1 - - admin = Administrator.objects.get(pk=request.session['userID']) - website = Websites.objects.get(domain=domain) - - if Websites.objects.filter(domain=domain).exists(): - pass - else: - dic = {'remCronbyLine': 0, 'error_message': 'You do not own this domain'} - json_data = json.dumps(dic) - return HttpResponse(json_data) - - if admin.type == 1: - pass - else: - website = Websites.objects.get(domain=domain) - if website.admin == admin: - pass - else: - dic = {'remCronbyLine': 0, 'error_message': 'You do not own this domain'} - json_data = json.dumps(dic) - return HttpResponse(json_data) - - cronPath = "/var/spool/cron/" + website.externalApp - cmd = 'sudo test -e '+cronPath+' && echo Exists' - output = os.popen(cmd).read() - - if "Exists" not in output: - data_ret = {'remCronbyLine': 0, 'error_message': 'No Cron exists for this user'} - final_json = json.dumps(data_ret) - return HttpResponse(final_json) - - cronPath = "/var/spool/cron/" + website.externalApp - tempPath = "/home/cyberpanel/" + website.externalApp + str(randint(10000,99999)) + ".cron.tmp" - - o = subprocess.call(['sudo','cp',cronPath,tempPath]) - if o is not 0: - data_ret = {'addNewCron': 0, 'error_message': 'Unable to copy to temporary files'} - final_json = json.dumps(data_ret) - return HttpResponse(final_json) - - # Confirming that directory is read/writable - o = subprocess.call(['sudo','chown','cyberpanel:cyberpanel',tempPath]) - if o is not 0: - data_ret = {'addNewCron': 0, 'error_message': 'Error Changing Permissions'} - final_json = json.dumps(data_ret) - return HttpResponse(final_json) - - with open(tempPath, 'r') as file: - data = file.readlines() - - removedLine = data.pop(line) - - with open(tempPath, 'w') as file: - file.writelines( data ) - - output = subprocess.call(["sudo","/usr/bin/crontab", "-u", website.externalApp, tempPath]) - - os.remove(tempPath) - if output != 0: - data_ret = {'addNewCron': 0, 'error_message': 'Incorrect Syntax cannot be accepted'} - final_json = json.dumps(data_ret) - return HttpResponse(final_json) - - data_ret = {"remCronbyLine": 1, - "user": website.externalApp, - "removeLine": removedLine, - "line":line} - final_json = json.dumps(data_ret) - return HttpResponse(final_json) - except BaseException,msg: - print msg - dic = {'remCronbyLine': 0, 'error_message': str(msg)} - json_data = json.dumps(dic) - return HttpResponse(json_data) - - except KeyError, msg: - status = {"remCronbyLine":0,"error":"Not Logged in"} - final_json = json.dumps(status) - return HttpResponse(final_json) - -def addNewCron(request): - try: - val = request.session['userID'] - if request.method == 'POST': - try: - - data = json.loads(request.body) - domain = data['domain'] - - minute = data['minute'] - hour = data['hour'] - monthday = data['monthday'] - month = data['month'] - weekday = data['weekday'] - command = data['command'] - - admin = Administrator.objects.get(pk=request.session['userID']) - website = Websites.objects.get(domain=domain) - - if Websites.objects.filter(domain=domain).exists(): - pass - else: - dic = {'addNewCron': 0, 'error_message': 'You do not own this domain'} - json_data = json.dumps(dic) - return HttpResponse(json_data) - - if admin.type != 1: - website = Websites.objects.get(domain=domain) - if website.admin == admin: - pass - else: - dic = {'addNewCron': 0, 'error_message': 'You do not own this domain'} - json_data = json.dumps(dic) - return HttpResponse(json_data) - - cronPath = "/var/spool/cron/" + website.externalApp - cmd = 'sudo test -e '+cronPath+' && echo Exists' - output = os.popen(cmd).read() - - if "Exists" not in output: - echo = subprocess.Popen(('echo'), stdout=subprocess.PIPE) - output = subprocess.call(('sudo', 'crontab', '-u', website.externalApp, '-'), stdin=echo.stdout) - echo.wait() - echo.stdout.close() - # Confirmation - o = subprocess.call(["sudo","cp","/dev/null",cronPath]) - - cronPath = "/var/spool/cron/" + website.externalApp - tempPath = "/home/cyberpanel/" + website.externalApp + str(randint(10000,99999)) + ".cron.tmp" - - finalCron = "%s %s %s %s %s %s" % (minute, hour, monthday, month, weekday, command) - - o = subprocess.call(['sudo','cp',cronPath,tempPath]) - if o is not 0: - data_ret = {'addNewCron': 0, 'error_message': 'Unable to copy to temporary files'} - final_json = json.dumps(data_ret) - return HttpResponse(final_json) - - # Confirming that directory is read/writable - o = subprocess.call(['sudo','chown','cyberpanel:cyberpanel',tempPath]) - if o is not 0: - data_ret = {'addNewCron': 0, 'error_message': 'Error Changing Permissions'} - final_json = json.dumps(data_ret) - return HttpResponse(final_json) - - with open(tempPath, "a") as file: - file.write(finalCron+"\n") - - output = subprocess.call(["sudo","/usr/bin/crontab", "-u", website.externalApp, tempPath]) - - os.remove(tempPath) - if output != 0: - data_ret = {'addNewCron': 0, 'error_message': 'Incorrect Syntax cannot be accepted'} - final_json = json.dumps(data_ret) - return HttpResponse(final_json) - - data_ret = {"addNewCron": 1, - "user": website.externalApp, - "cron": finalCron} - final_json = json.dumps(data_ret) - return HttpResponse(final_json) - except BaseException,msg: - print msg - dic = {'addNewCron': 0, 'error_message': str(msg)} - json_data = json.dumps(dic) - return HttpResponse(json_data) - - except KeyError, msg: - status = {"addNewCron":0,"error":"Not Logged in"} - final_json = json.dumps(status) - return HttpResponse(final_json) - - def createWebsite(request): try: val = request.session['userID'] @@ -2356,4 +1883,480 @@ def CreateWebsiteFromBackup(request): except BaseException, msg: data_ret = {'createWebSiteStatus': 0, 'error_message': str(msg), "existsStatus": 0} json_data = json.dumps(data_ret) - return HttpResponse(json_data) \ No newline at end of file + return HttpResponse(json_data) + + +def listCron(request): + try: + val = request.session['userID'] + try: + admin = Administrator.objects.get(pk=request.session['userID']) + + if admin.type == 1: + websites = Websites.objects.all() + websitesName = [] + + for items in websites: + websitesName.append(items.domain) + else: + if admin.type == 2: + websites = admin.websites_set.all() + admins = Administrator.objects.filter(owner=admin.pk) + websitesName = [] + + for items in websites: + websitesName.append(items.domain) + + for items in admins: + webs = items.websites_set.all() + + for web in webs: + websitesName.append(web.domain) + else: + websitesName = [] + websites = Websites.objects.filter(admin=admin) + for items in websites: + websitesName.append(items.domain) + + return render(request, 'websiteFunctions/listCron.html', {'websiteList': websitesName}) + except BaseException, msg: + logging.CyberCPLogFileWriter.writeToFile(str(msg)) + return HttpResponse(str(msg)) + except KeyError: + return redirect(loadLoginPage) + + +def getWebsiteCron(request): + try: + val = request.session['userID'] + if request.method == 'POST': + try: + + data = json.loads(request.body) + domain = data['domain'] + + admin = Administrator.objects.get(pk=request.session['userID']) + website = Websites.objects.get(domain=domain) + + if Websites.objects.filter(domain=domain).exists(): + pass + else: + dic = {'getWebsiteCron': 0, 'error_message': 'You do not own this domain'} + json_data = json.dumps(dic) + return HttpResponse(json_data) + + if admin.type != 1: + website = Websites.objects.get(domain=domain) + if website.admin != admin: + dic = {'getWebsiteCron': 0, 'error_message': 'You do not own this domain'} + json_data = json.dumps(dic) + return HttpResponse(json_data) + + cronPath = "/var/spool/cron/" + website.externalApp + cmd = 'sudo test -e ' + cronPath + ' && echo Exists' + output = os.popen(cmd).read() + + if "Exists" not in output: + data_ret = {'getWebsiteCron': 1, "user": website.externalApp, "crons": {}} + final_json = json.dumps(data_ret) + return HttpResponse(final_json) + + cronPath = "/var/spool/cron/" + website.externalApp + crons = [] + + try: + f = subprocess.check_output(["sudo", "cat", cronPath]) + print f + except subprocess.CalledProcessError as error: + dic = {'getWebsiteCron': 0, 'error_message': 'Unable to access Cron file'} + json_data = json.dumps(dic) + return HttpResponse(json_data) + counter = 0 + for line in f.split("\n"): + if line: + split = line.split(" ", 5) + print line + print split + if len(split) == 6: + counter += 1 + crons.append({"line": counter, + "minute": split[0], + "hour": split[1], + "monthday": split[2], + "month": split[3], + "weekday": split[4], + "command": split[5]}) + + print json.dumps(crons) + + data_ret = {'getWebsiteCron': 1, "user": website.externalApp, "crons": crons} + final_json = json.dumps(data_ret) + return HttpResponse(final_json) + except BaseException, msg: + print msg + dic = {'getWebsiteCron': 0, 'error_message': str(msg)} + json_data = json.dumps(dic) + return HttpResponse(json_data) + + except KeyError, msg: + status = {"getWebsiteCron": 0, "error": "Not Logged in as admin"} + final_json = json.dumps(status) + return HttpResponse(final_json) + + +def getCronbyLine(request): + try: + val = request.session['userID'] + if request.method == 'POST': + try: + + data = json.loads(request.body) + domain = data['domain'] + line = data['line'] + + line -= 1 + admin = Administrator.objects.get(pk=request.session['userID']) + website = Websites.objects.get(domain=domain) + + if Websites.objects.filter(domain=domain).exists(): + pass + else: + dic = {'getWebsiteCron': 0, 'error_message': 'You do not own this domain'} + json_data = json.dumps(dic) + return HttpResponse(json_data) + + if admin.type == 1: + pass + else: + website = Websites.objects.get(domain=domain) + if website.admin == admin: + pass + else: + dic = {'getWebsiteCron': 0, 'error_message': 'You do not own this domain'} + json_data = json.dumps(dic) + return HttpResponse(json_data) + + cronPath = "/var/spool/cron/" + website.externalApp + crons = [] + + try: + f = subprocess.check_output(["sudo", "cat", cronPath]) + print f + except subprocess.CalledProcessError as error: + dic = {'getWebsiteCron': 0, 'error_message': 'Unable to access Cron file'} + json_data = json.dumps(dic) + return HttpResponse(json_data) + + f = f.split("\n") + cron = f[line] + + if not cron: + dic = {'getWebsiteCron': 0, 'error_message': 'Cron line empty'} + json_data = json.dumps(dic) + return HttpResponse(json_data) + + cron = cron.split(" ", 5) + if len(cron) != 6: + dic = {'getWebsiteCron': 0, 'error_message': 'Cron line incorrect'} + json_data = json.dumps(dic) + return HttpResponse(json_data) + + data_ret = {"getWebsiteCron": 1, + "user": website.externalApp, + "cron": { + "minute": cron[0], + "hour": cron[1], + "monthday": cron[2], + "month": cron[3], + "weekday": cron[4], + "command": cron[5], + }, + "line": line} + final_json = json.dumps(data_ret) + return HttpResponse(final_json) + except BaseException, msg: + print msg + dic = {'getWebsiteCron': 0, 'error_message': str(msg)} + json_data = json.dumps(dic) + return HttpResponse(json_data) + + except KeyError, msg: + status = {"getWebsiteCron": 0, "error": "Not Logged in"} + final_json = json.dumps(status) + return HttpResponse(final_json) + + +def saveCronChanges(request): + try: + val = request.session['userID'] + if request.method == 'POST': + try: + + data = json.loads(request.body) + domain = data['domain'] + line = data['line'] + + minute = data['minute'] + hour = data['hour'] + monthday = data['monthday'] + month = data['month'] + weekday = data['weekday'] + command = data['command'] + + admin = Administrator.objects.get(pk=request.session['userID']) + website = Websites.objects.get(domain=domain) + + if Websites.objects.filter(domain=domain).exists(): + pass + else: + dic = {'getWebsiteCron': 0, 'error_message': 'You do not own this domain'} + json_data = json.dumps(dic) + return HttpResponse(json_data) + + if admin.type == 1: + pass + else: + website = Websites.objects.get(domain=domain) + if website.admin == admin: + pass + else: + dic = {'getWebsiteCron': 0, 'error_message': 'You do not own this domain'} + json_data = json.dumps(dic) + return HttpResponse(json_data) + + cronPath = "/var/spool/cron/" + website.externalApp + tempPath = "/home/cyberpanel/" + website.externalApp + str(randint(10000, 99999)) + ".cron.tmp" + + finalCron = "%s %s %s %s %s %s" % (minute, hour, monthday, month, weekday, command) + + o = subprocess.call(['sudo', 'cp', cronPath, tempPath]) + if o is not 0: + data_ret = {'addNewCron': 0, 'error_message': 'Unable to copy to temporary files'} + final_json = json.dumps(data_ret) + return HttpResponse(final_json) + + # Confirming that directory is read/writable + o = subprocess.call(['sudo', 'chown', 'cyberpanel:cyberpanel', tempPath]) + if o is not 0: + data_ret = {'addNewCron': 0, 'error_message': 'Error Changing Permissions'} + final_json = json.dumps(data_ret) + return HttpResponse(final_json) + + with open(tempPath, 'r') as file: + data = file.readlines() + + data[line] = finalCron + '\n' + + with open(tempPath, 'w') as file: + file.writelines(data) + print 'test' + + output = subprocess.call(["sudo", "/usr/bin/crontab", "-u", website.externalApp, tempPath]) + + os.remove(tempPath) + if output != 0: + data_ret = {'addNewCron': 0, 'error_message': 'Incorrect Syntax cannot be accepted.'} + final_json = json.dumps(data_ret) + return HttpResponse(final_json) + + data_ret = {"getWebsiteCron": 1, + "user": website.externalApp, + "cron": finalCron, + "line": line} + final_json = json.dumps(data_ret) + return HttpResponse(final_json) + except BaseException, msg: + print msg + dic = {'getWebsiteCron': 0, 'error_message': str(msg)} + json_data = json.dumps(dic) + return HttpResponse(json_data) + + except KeyError, msg: + status = {"getWebsiteCron": 0, "error": "Not Logged in"} + final_json = json.dumps(status) + return HttpResponse(final_json) + + +def remCronbyLine(request): + try: + val = request.session['userID'] + if request.method == 'POST': + try: + + data = json.loads(request.body) + domain = data['domain'] + line = data['line'] + + line -= 1 + + admin = Administrator.objects.get(pk=request.session['userID']) + website = Websites.objects.get(domain=domain) + + if Websites.objects.filter(domain=domain).exists(): + pass + else: + dic = {'remCronbyLine': 0, 'error_message': 'You do not own this domain'} + json_data = json.dumps(dic) + return HttpResponse(json_data) + + if admin.type == 1: + pass + else: + website = Websites.objects.get(domain=domain) + if website.admin == admin: + pass + else: + dic = {'remCronbyLine': 0, 'error_message': 'You do not own this domain'} + json_data = json.dumps(dic) + return HttpResponse(json_data) + + cronPath = "/var/spool/cron/" + website.externalApp + cmd = 'sudo test -e ' + cronPath + ' && echo Exists' + output = os.popen(cmd).read() + + if "Exists" not in output: + data_ret = {'remCronbyLine': 0, 'error_message': 'No Cron exists for this user'} + final_json = json.dumps(data_ret) + return HttpResponse(final_json) + + cronPath = "/var/spool/cron/" + website.externalApp + tempPath = "/home/cyberpanel/" + website.externalApp + str(randint(10000, 99999)) + ".cron.tmp" + + o = subprocess.call(['sudo', 'cp', cronPath, tempPath]) + if o is not 0: + data_ret = {'addNewCron': 0, 'error_message': 'Unable to copy to temporary files'} + final_json = json.dumps(data_ret) + return HttpResponse(final_json) + + # Confirming that directory is read/writable + o = subprocess.call(['sudo', 'chown', 'cyberpanel:cyberpanel', tempPath]) + if o is not 0: + data_ret = {'addNewCron': 0, 'error_message': 'Error Changing Permissions'} + final_json = json.dumps(data_ret) + return HttpResponse(final_json) + + with open(tempPath, 'r') as file: + data = file.readlines() + + removedLine = data.pop(line) + + with open(tempPath, 'w') as file: + file.writelines(data) + + output = subprocess.call(["sudo", "/usr/bin/crontab", "-u", website.externalApp, tempPath]) + + os.remove(tempPath) + if output != 0: + data_ret = {'addNewCron': 0, 'error_message': 'Incorrect Syntax cannot be accepted'} + final_json = json.dumps(data_ret) + return HttpResponse(final_json) + + data_ret = {"remCronbyLine": 1, + "user": website.externalApp, + "removeLine": removedLine, + "line": line} + final_json = json.dumps(data_ret) + return HttpResponse(final_json) + except BaseException, msg: + print msg + dic = {'remCronbyLine': 0, 'error_message': str(msg)} + json_data = json.dumps(dic) + return HttpResponse(json_data) + + except KeyError, msg: + status = {"remCronbyLine": 0, "error": "Not Logged in"} + final_json = json.dumps(status) + return HttpResponse(final_json) + + +def addNewCron(request): + try: + val = request.session['userID'] + if request.method == 'POST': + try: + + data = json.loads(request.body) + domain = data['domain'] + + minute = data['minute'] + hour = data['hour'] + monthday = data['monthday'] + month = data['month'] + weekday = data['weekday'] + command = data['command'] + + admin = Administrator.objects.get(pk=request.session['userID']) + website = Websites.objects.get(domain=domain) + + if Websites.objects.filter(domain=domain).exists(): + pass + else: + dic = {'addNewCron': 0, 'error_message': 'You do not own this domain'} + json_data = json.dumps(dic) + return HttpResponse(json_data) + + if admin.type != 1: + website = Websites.objects.get(domain=domain) + if website.admin == admin: + pass + else: + dic = {'addNewCron': 0, 'error_message': 'You do not own this domain'} + json_data = json.dumps(dic) + return HttpResponse(json_data) + + cronPath = "/var/spool/cron/" + website.externalApp + cmd = 'sudo test -e ' + cronPath + ' && echo Exists' + output = os.popen(cmd).read() + + if "Exists" not in output: + echo = subprocess.Popen(('echo'), stdout=subprocess.PIPE) + output = subprocess.call(('sudo', 'crontab', '-u', website.externalApp, '-'), stdin=echo.stdout) + echo.wait() + echo.stdout.close() + # Confirmation + o = subprocess.call(["sudo", "cp", "/dev/null", cronPath]) + + cronPath = "/var/spool/cron/" + website.externalApp + tempPath = "/home/cyberpanel/" + website.externalApp + str(randint(10000, 99999)) + ".cron.tmp" + + finalCron = "%s %s %s %s %s %s" % (minute, hour, monthday, month, weekday, command) + + o = subprocess.call(['sudo', 'cp', cronPath, tempPath]) + if o is not 0: + data_ret = {'addNewCron': 0, 'error_message': 'Unable to copy to temporary files'} + final_json = json.dumps(data_ret) + return HttpResponse(final_json) + + # Confirming that directory is read/writable + o = subprocess.call(['sudo', 'chown', 'cyberpanel:cyberpanel', tempPath]) + if o is not 0: + data_ret = {'addNewCron': 0, 'error_message': 'Error Changing Permissions'} + final_json = json.dumps(data_ret) + return HttpResponse(final_json) + + with open(tempPath, "a") as file: + file.write(finalCron + "\n") + + output = subprocess.call(["sudo", "/usr/bin/crontab", "-u", website.externalApp, tempPath]) + + os.remove(tempPath) + if output != 0: + data_ret = {'addNewCron': 0, 'error_message': 'Incorrect Syntax cannot be accepted'} + final_json = json.dumps(data_ret) + return HttpResponse(final_json) + + data_ret = {"addNewCron": 1, + "user": website.externalApp, + "cron": finalCron} + final_json = json.dumps(data_ret) + return HttpResponse(final_json) + except BaseException, msg: + print msg + dic = {'addNewCron': 0, 'error_message': str(msg)} + json_data = json.dumps(dic) + return HttpResponse(json_data) + + except KeyError, msg: + status = {"addNewCron": 0, "error": "Not Logged in"} + final_json = json.dumps(status) + return HttpResponse(final_json) \ No newline at end of file diff --git a/websiteFunctions/views.pyc b/websiteFunctions/views.pyc index ca6383500f4b76d0d7e70af60e30fce7f0af0170..5f033005f7ea07627b9a81a5091c28ee0f31d825 100644 GIT binary patch delta 11991 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 W-yr_l{I~ccc)lKQZSaryd;SN{c}9W& literal 52905 zcmeI53y@sbS?6ze&q$h)MjAavqnD+YtjE}vW+Xqxj-xo1^@yCY%ham>LYm2b*=b1mjz*?wX*qHJI8KjBoR6eL-n^ zFtsBX-_fjlS8!!#Fuv2O)0bVr_^#+U8;ob|cx_PH9Zc;B#`pMb>w?nV!PMShd~Yzd zFBsp~Y;1opzCXJAKrnv5j{AesP%w2*Fn&+7-o3&2y>@MVP`WReIv9)}{D2)C4)UAr;7E`kw1fMD{1!WSAjogEg9n5BHamDI$ZxlU(ICIW z4jvBjciF)sL4KzlydlW%vV%v1eAW)$802@`!O@ z>X4>%Z3RW8P|g=BwN-YQFIEbZHNR~QXHM5@Gr2-_X1ZK0_}MdQ@UTJzF|J3xQV)-nm&lJ@ef36-jR=7~5Gu4`&bNq6#ls_>&HBl^A zy}>TdP8NzK|FxE1Q;q6u>DgM5S11<3TAMh3tyrnmCrYQMtF^YPdT|=8O_bX2>*30Y ziQ2@4i7HLmSm+JH9@KQ4D@;yT^5JuIqB2p=7t7(`tmeeYQemo4u02yJ6ejg<8UAWS zkBd^A=b-U;a5D(57`@nfD;3mI!IgAyB_n!qGZnlNq;92yT9+#2GXdjsldIi9zAG4g zB@>(*D{l$9_(oTIgUWc2N~P!*-|3Z9aPE1C&bgs(o^htGN7k!_%9AH*dXbr{_3iv~ z-G}#7y*ybf^7%%JeC8X&mupj{y2iHFm?;ct80=*kg(|gjc115cec=idp<2^BT`JUa zHj$$HY_hzq&^TGCOjmMxXil9NQe|tdQkbptW$o^36Q!CuI-yB3#6e(1^&m$h^=f6L zG(9;{8adv$P^cU~J2I!=*NTPf)!~_jO=HcdXyTlno+|95k*X$8kjkX`(gW$8slJqb zj9$()KgKW7{l>>rEgz%tVyfkPG(VJo7JZ5?eU_`~pmIIn74+#=@X>->ncxy-S8(IY z!Ocu?;-$^Ot?uAvS8!!zaFcrWiBhxU!C3is?32KgRvX8f}1Poz^HYAM>m^Z8QkFJmEO5kQRh}QJNLK2*z9l9!K2}$!uO*i zE7TEaHT(}tq*SY zXb$s#sIg ze$1IsB}mut%5>QmgI01_I0F*5@JwZpv8 zFQaE+gVpoZLd~vSES4a=)>~goqN7hheNNt(EX-(y+QKPKUxHj-;;kVgz9Jx?r;4S* zSVfe(X1&$nGt)Y2U4aniwDfX=D&pm+C6L>qVyg-bh^^eHb1gkRGci@LbxPY)Rev?D z*edkN2gshqz4q@^_0sLEWif#0GpL>FqZGD=S;srl>r(4dE7E6Hz7gJM&wS}k7LEa1okPQ3IZ!7W~LJ>#3E)P(^-$XC+A zEjqHEhu_>lQ5y{Smped}nm3#9n|9dC;Wj_q z&fyL}yowe=M9IeR}*`PInr0da&52kIg=t>8fqD z@q0%mb!%ggy17x!H78_kTfiB;;$lO|ycsLMi7&Fq&r%}-~`)3q#w zKU=$8tnyn(vMw515Jova1-=1;8l$KS7LHt-sEmMXr%NM~v@~LMt92R@B+VWwWb5mw zmfgQUTbR5&ojrL2-cYsPg@+=Gf?ajd9JNukmrxsZQRB&pn)UD5^2CKwAzPcyPE1bH zjjVc}g&!2^0#&_MW{Ya2Xi!cKmx|?rJq!w5uNAE2%hUA=L(Nk~J*VIpm-7=1W(8+- zx1A|kx5TBc7YbLoUf1#D^wbpSwJsKRhJk{oTq@+V#d3C{nl)f%E!bEM?Vyq|Kw|=M zh0D`nHkvmGI+#w1ZVmeZM}oWs^6d{g{KKZ+b^+0KS_^Z{kcZ z+&YQwx-vD+}F{< zI<9V`+(6rEcT&TlFROWHoc%>6d}GT3oP99U`0)ifyLfyTJRZIdX6+6h5l3%wd+=|I zD9~i=AOR@7b9?xWLjbsabTZ`jKN@j+)7XrPQLct0!rq-E8i$AHirc#|CngFV?>7GO zyFvMxsPWb(f)m8>z1qrDh$)u*6!Cak5X0{=(BEs^*LXdQU;Lf(&V9iKt6>q&eW|g* z$o-E4<AnD<%t^7XO@@O`rxU${pD)rN)RJKr+w-A;|Bph1#Z_0qkOw($A7-m@cMi95RxF*v zh^2EFv2+eMQehVuPi)=9zEPk|_~qBy7_74|zfQ;J#%2fM&5mt0!c6<&&HW*7_93oq z7P!z0F7hhRH+eHS1%<(wH*#*oCMjHA8|oVqiU z7X5qe3|5TXn65gUElkbS8grPg1irXVv5f9VnlO7$eVC zU+qHUDL(B-I8l9>qJ?F_rg~HDY%7x%=v{oaI z_R`8cOiMDiIKDBhFNtaW^97jJr!tMlGFq7PiK7Xo1^w-Ygqp@k@&?k6uCC+=US!mH zD-1?QJ)G;YBZLv8xR}jBhg;Yja$8fVg;O}2Lwaknx#(ob=6)k$a}d3?5Ik6c#6L)~ zvpJ*6qJ7+Fgzua<0hQMqo7<3TVRKRA@RyrwjLogKYHx_x+>)OnDUue%=IGMK=m#<_ znkTpfQXZ@Wf;tGXAB5sU<>9H&e`IeMGE5LT_u`6Rvnb^TV>lR0wgxxXi4tFOMF9_i z3!&la2`Vd%=g>hI16;v|VPiB5CRa%w;>AoDIv2OOL!6^?n=d5W!~mnAU8qgiAaAlu zul8*lgIfc^%>l{GuOMWngRy)NyyJO9TDa06vjWC+RE(25cH14BqB~$VHa0201%815 z+#G|uW#sU|Rj<2^e{2qrkdcBp!=R>aB1bbUs4aG8#CyVF*|+E`h!xXArjkDa>&d9P zd?03|3k<;6?5CPS?kC`U*t>2HhK$sw4ikVgVx)^q)0mNNGe-KS-dy-Hn(9Nc-;Cbc z5`E(>HW0~g?2PnYR{xS2X(wr~MbL|7JQL|UhGhLaeG)#!D+PEO1UoY1s#KoO?G(I#z+{D4`@yiossaUgT3zey&Sv{(T z1}X`0{JQl_ngGWkGE-bAmQ7WF(WtKO9;(-cl%9;BLiSvvT${L&ot!937jdCr^8QS% zkdHycl32d1H?DxbgDl@9T`4|{`8!XR3R^ugFb*(Rnl~mwPseb>o-Kt-?gZ8D4EPYHtWI1j=y^7!3e_*^)CVc%!Vdul`!h#=ZU-WJ z(>su_*EsaZG>?$IHy|T#NNr4Yr*|W3hcy5oy{VP_ofn44lF)=9EBV}wUt9o&{6ePj z>{4OK|F5z$JPnXA2&)|&jW z+uSNp)49!S$u>bfi@ccB=xgO{5h4`0F#`wZOd=FU1)Svw3-IN)+!a9-zlHuJAxhj= zP|~h&ywqbyC!ks$vps~MDL#sZ1a$I{p%Y|m4M}#zB3GjbGp_)ah~3X}Dn=)9}I6?2E?k zm;4BHwqo)$B7Fs2LazXXXm0j(hu$4Sbc>2*jRBaSG_Vm4D-2FwZXiNY<{oql zJp?EU`#oy)xXrzC$L!o@mmz?#O*~T6xRRuE(j6jPwVcuPh zUp7xc)2)n#4ue>FP>JDI3jw&<>~sR%h{Pq z@fw=MOD;88mB_g)w}Yy6`7_OUAcWkBjU-QB$GypZiHL>nx3OpbBzo6cA@plAr{p19 z&}Q}(X^2g{CYOZG%eOdpmoA$()nOeys3N06f?Kk-`S(f@D1lf%%tgyh2F&A7s#5=Q zdsXaHVUn37t%O&xhAts-pRNUmlR4bx%M79fuG#n}*78bB}k9Zh7Yru|iVyKniD=R1}cl{#Cpm9ig%ZBy=zG z{A&axL?nb|%p(AzVI)mVNq%=hN`jkKg0i$ylE3dnNi^5)G$nyJvP48qj8B`LX%5wx zn$8z5Hj-4sXir$rLK)_xA{_~aP^Oa;)A^X6M^@){t1wrP+ocn^Sv7S^#Q_ysy7`zD5Xy7`{db6q(cpDZXNaAYUL3 zs0BWJjSxgJgZd~f<1>DT34tI?6A^qZ%+O;X(UgWUkpGW{876qM!15g4T&-6X6}TXC zHqhPy;>U4@x5bT32xx=unyhWm{dH!m4VGQ#7{?IAOJ_9Wr8F3sl=fYz>Vfb!np~( zuGIz^XF<1(r$eb6>>Oj%Re=<2YH?* zD#3!ZKA4veXTP;m+aiAn^!0LZFmHZ6-dt0!V7I}yliT(LSG$7BflT?qXlBY}fb%M! zC7h=VeVxWLsoGr%>SGY){fTlPU(Wq}lnjO)j2M_Qm{u^3ij3sPFBH%F|zUvu)6peOWW^(QpGKgd5|)`Q)lohP)x>`@0W zWMH*mAo35|&Gd6M9?uL9Nlbh(S?@KOuv2-zwkhq#O~x)Hsnk}X z&nil+lf;~s>QWKST%I`xD7VBL=Byj4!|Y-R7T&HT1$8RBr|b(8hu(ec(D+OD5lsw} zmh@e;i)zn(TEs)^)w(!eQ@M36YZoqPK+)*Dj; zJ0VfC<~CESm5TjqQM5{ljOKdU6t($cRT0S^(>qbGUAAYB6l#-6PwpwcJdQ6V%L|# zy1=q17o!;S>Qgq&v#KOTyIJ8Z7B`_3+pnwA`r8Yc&-q#T!pBioc3bswsc^$Wt*oc& zS&mQR-$tIqIk^;D=ZkrFe|khM?@@8LidZc#h5C?b=}f~X`s8t0@6pkFRoG~2NR#Bo zqrc4RcT$y(sW1h;YU;&{6D50Rn{WhM6SA(*C3{khi_skVoHWw>jRTJ-kebgw;e zEq&U}os&}kN)N2bZnD=0U>=Rp*qvOM`k~BgmAxeKpf_+iE0Iq{Y#Yf-8BDx|5NyKH@i>#{u>q*w3rz0~W`8G@Jc&HQNx?e3&U%ZpCQ*}rBYUZEVC~ps9%M#b z)R6}8N=I;$_nO?#2SRCpNIR2qkb%@BrzHxRz#~D3v@<3M$@L9Eh={ZB#RZ#9BvL;PI#z9FFMdiL(bqvVJZ_2~ezePt!RlKU=Ln;J}hRiJ41VM%&lOM=Y zkpZGM)bm4XLZguT2!+8E&8LYROdtqjBq3dq-vs(Q36XbMdrqPRQGWer&Ndtm@H$CP3K7lbvq`e)!lQ@YI&!q^h_t35= ztu5z*mh-8$<(yu+ztUOBzsV%1Wfb9lhV{t0b~KC&6UmKOq-J?x{qU1D&cOhS|B`tt z2~4qoQ$gjEvc-rf(2%Wk>ZQu>Fx!X+0%C$;4cReOwPJ7FuLa2u2>@wq0=v!I$Xnpq z*au7+7-U78)^+wj1(9b^ucay_4uUv4_c1)&T!<%F&t&F~eGF;H?3n5kZb2+@j#_!F|@yA>+GW+bJ1s#86eWk=RA3A6U#bA>|oxF;G#%f~`wIa*x(@Vq{V?FP!- zv}!7ji{yo?8GH8>Ynpwg#X%`!7094`DfDc%!LTKIH?+!3ZD#ljkS-YyI6>pnyYn3Jk^$)a44|39+ijcjPxO78$AhUxtx<+1vl>O<= zsa=`vT-nU(4E+eDU}&=0|C452{#3eY!BnQ`#*1keqhYN|79CkPw~B@OZtHF1+j^?8 zU(@1bxo+a`7I*98NNGb^n4$+J?Xu)pEW6>(2wscafVf0$BNy>)@OC(@csJ55S=f6m zc_Zk)`iEt}`UnZ&uC2(2W90{$FL#s0td}!yVI>$PJ~w(%BMR_& zZjqFG<0srP@nexJNkA1N1ibiYO49cFplo1(10@GT*d(}$EFwB0#%euB$hsT+gxTZ} zhV81E=8%UiR(JqRfM`dbz3~lcFog&xkwunaR8qIl(CT3JeG=N0pr-vgSH^S+Nt)V1 zEqohNk77_ngdWwU?K}rz+#7D@pRq_KkuOIuJ_9~YK2-)u2nO&&GtD7VWArxpc;O&g zaU2AK5fDPy#yR`%mfwsanH?;LB$6?2!x+vuItjCP8u2tTngle`o-d}s7M(hUi3a(T zEFv~N!8!?c zpHe*|zb1G|`R&4v> z*=O{eAy4tssJ6)Y88gGgs@*0f_X{w8)XZfxz0Ilz)Y>r>pHT5VDo(5TUJAo$&ClUT z?qBNS<0}4{3Sqk20dSH-$whXG{3e$Rm1CjSyqE7*y}+d;gOF54_DdMTMqt`nj<;r1 z?l5QZnNt$e%K%BeQC@)xbr z+m{!U-jLH#v?8uSb{WRzu_^t`8=a2^s~Cg~4Z2!Pyup-xxG}(XbXI(#Pq++65m*CM zi2qYz+lV{xC%~d{BY`g-h<}2IxNy=Gz2to~R}cw?QMk%w#jY?Dm)l9+N1DjR`Z@bM z__gCapk(?x?2)F1MBY@|D@wu|)1+-a3uR`wwrQ+Vjk^^Lt5-42WB7hBAco6pBvjR; zh9Htux53dgcCY}A+0JOpnvpJ|)M0QXOcePvlrqs+Mr^W%#?q6CIEmhEB>Ds-daYA> zIwVs#I!yGprbAw^m5|coM*^jPb@|O0rJrABl}H*wSTm~&Y%N1&CpBZ%Jw6krV=PD) ziF6&ceDtoAMG3)xqYqI-~xL#89H++i| z=9ast*j(g}V92Pe5${ga+Gwa#zo2gr9?C-QhxSHhwan@Bn4+&D-@Z!iDLEp{pxyPT#+d9IlQG&a z>Xbn7lEBT(nE2|s?@*l&>x#NZ&q4vlNVt>>>S8tbaaFrV)if$pGyCGW&Yo0ZoIoP_ z?a*`$UyBvcz9T%Hg2<>fbHluPF5Bu0(l=~pe~x;>I)DD8D2N&lLmGy;2t*wZZbuFaW&bZ@4&d)~z?L7=&q z1@s&DwJqlV*t(d1f5F9!%pA$|ht2(BNp_`paBClOz9cD#cG@9yCI znxLGuDu~rUFQKux3UJJ-P`VA<79UzXqID6=r8+}u)ZzusHEr;iVIv#7Btx8v!3+1W z>QJd^@uDN-ei=7yjW5~sUg=| zl)n#YVl7#vEn315iSbwjK?1`hR*Zxf^pSGK>QL`PTxefZh9Ha!YesflStbz~*12lNRkyDriIzh>l#aQu>Cq$#&k)hF8<-E=y{q??P_}}{8fxO`P5np38%GHTJWci z>e}3=_5`z|h(cV_Q~hopz^ghPHlQ7pbS5*AJ;VQM}e#MmSUL$WQcm`E$TfC!(%jeoarGi{w|X~rm)G%_72 zmS-vuP;~8ybZ1FT7)#4kOf6a^u~XAP3D&y{aY(wRR@!WYI6z&g*3I#4+0ounl3T=W(V3w=!sjyUem%N1}|bR}x2dB4-Mx zBl>y23KNswqobEqm`*CABNIeoI%vqodeGEFnNmw#ty+45gg!~4hG~mTEU}TaEniG` zh1*k;9VCa-WR_+WvNc|isK^Au`syQdmZy0znGxMndd}_2Epv#jec#3xMRecA145#U zEitrLnAKuSH#h_GE7%OhS7Iw66Yf# z&VSSfd%nF@5%t3hDxzZ8qoesV$T7wqt7Qr((J=!pB0`WUT~%m}sFKs5HE5{NRzZsf zAr?A|sRSDBSjaWqU?b=hveI|u<>W-~?rwKO{t zK-0h{)b3iar=}|?3VhoPi^34Wi#`ACf@|Of-A3?{zc_MD-uKlJ^KkGV!#clQUolaU z?4**57tWqOE03&X;DJz=0uMU6X&JIKS}H&Akm{nNIIbWHcuFbDEdR1-3Qdt{aHUevO`DN8JQu|&V8L2h!*+y!OYR9D3TrW%o zWexla_ZnG^2h5scDOxncMLCn>^Qj+G_>t5KI`Pc3>-5ZZ{KH&KR`$KiUKFSku&^-B6!%(^O?uP_7nF@~jjhD%Lcn{*NH!bi)bM)$&!%-D;YwbVsD zxN`FcHBl%@I!T2vn_370YEIWH_}5%HJ_ko@d?a?fR#a@uu_3gkuY9;6_U zVA{$zW*|0@!w~TvPKPxyC`L7bsmx3u4iv~8wuG;`gQNN#NsCZLn$v|9et|eslQiQC zEBykL6)Hu=Rs06!a@4~<6h;%F&YY6DKo5f0u({KUpz$t2NY%hq87Max8lOe3wl;J(MKy9J@G+g4Yu^eBrc&$V_C*B)1d;`ltT!PA>fA14xo$M!KSDe4VE|b@bdHEuzICIchn>f#f>ra-Sej@Ik z|F&1VaQ#`^oRg*E!H`6#UA0q|;8VYJufKZu!yA${BNSv}zo+noyF7_e85^}t(dSR^ zIc(RTi8l|$Bb^XH?d0LnmkAS1Cx*D2=lHH$lH5%8Fr3e4i>$#W57aTHv^hkZIlK7* zZO7;y+R&LN%-UhxTPiFp%qOCuvDP#+=U`|BXXg8dV+Q)6HP8Vq__+_uIejoYF-(tgkb=@sdI%r09IWZ12;D}xbc52A`}?VD5mUHu3wYrAmE zA}=IIq{dbVSAV7-K8$l^@?JS_wbn}a!>PAq_MoGh)by65rO9AC`2<{=-jEm@vJ2A{ zo8cJ!6H2Bq?L?X*W3Mn-+keuCi?ln>inBt82b1P=cyAdD-*$nGnx)G@Ofk*LpfoUW zOHoWj8>qeUN~9f#JDo5eXHylsa6>)Ls&}Y@UDagb3G7si>CfyXR$Fd5yqa)xg2_pK z&>iOT720TYFRafUjCe~nk>ck%IdR>yo^s-)zm@@>0oStPOlsKjDT9jvuFyf2(Ok<{CB1$5}#7s}} zlW|s&pzwCcU7=Vr>^lyh=ZuLL!!A(hr^v}Nc!7vp7BU1)!?Worp41d-#IfwhCE~Kx zkwjFqvjI^xbuthQ&yv5`$wjPgSO;o|?WS+3vrK$iG$1n%k7ZTh>6{H+Qdx zxJ!^)ks3_(cDrBvMhke^C}%1N{$@z~O8e6rddlxagSFR5w?4YY)=2jQ%%8?zERlLk zK2rE3u1)r@9G_U%7{o$yjE+e{6C@f+4GlIobdh5-wCS1~V2Ajz3Po^&uK=V23 zv0LhBru}IibEs)}W?t%)49QCnCaGp_pAgA8Lxkw0ws&W)d{xk)R-KHI5+e>m=TB535eT&r{r$AE}gA>Ne`;_emJOo_6JuE z1XqTF_z`z|%oVGId|?bysPNba6-X*Pj5=DhqIg3H#RM_5rKn>xp}NCXPipfdJCU}b zHNsnUM{FC6;bBX}Q{+ToP_bABah6JKUJ^Vew|b-<_p;nJy~`h zim5^e#ObEe`)TX&!KcIINFw!ePxRzS3NWzTNzI+eBE3ZJXSgl*S#?in>+nI>Iz)F9 z5-BA?wph(hglU{=6ITo6VdpM8?Up2P_C!h9=<&lQkS`bD@1^-{IAUYuUOB4>hE56} z@&4BHD5L1QsC`o=5U=NlyOU;32C<)BRqVxno}H*xuPcX8LT+$lj<|bW$nb?kpJvpj zmn`>FBFq#KVS*tu%d*CGerrf8=yp$9F{+$Eg~fw<+_zx0dB_sC#srOeY5JN=1=4pB zyn$)ES~Yb~?zeRJZ>lgS+YjnU6V-DCJ)k3vhqdV6OjuVl#sk`8M9@i6_-Wm5o^z(Y z*{`3bp}AW}`fR4iad)FuV~bf=e1(}?Z?wuxRTRcnkQm@2YU88|69-JK^N@Zv=c_k# zp*av*xqORysRoN=5no6E5Mhto-r`*frS=d1gdoT_alzF-%BJH$L@{>+Q>52+4G5UX zypopJZ9g>zQhg|W$a>SIV0kmWqz|C*iRuk-Z>IT+{5tsZj#}0o1z_}|7E+sLoC)pR z8!Yf*o5LKLzM3%S-HdNz-vT?P?d@v(>=I$l!uD=mT?OPZD>sS;!J%H`tsgTuqzs5~ z7r3u@pUfuWecHDaQwDrEzMz{y128tTkH9Cy*#5@gkgI>-QSjSQsd5|+8Ez6v0S>{> zAoMM82Pqb-hNXdI( z-MeJqz%*o#h%LLcuRFRfn@D^3SE+j7^h}yT*u3W|-N(OVCM7%QAn!LwN>In&$_XmR zi+lJNk(i92uBE(>M`5YU3Kd}-xpH@y*OP9AsXdvG2MuWXeEf!tfEH#LIU+1D5e2k> zJT}s;Kr8yVVeZm>O`zq2&X#VA4f@#ZUN%tMZ}2D^?|A0-*A7H`r!Dg7VxTo-E!F35 z=@9PnTVm!g~H@3j)1^RKGJoFZZWv>d#cXtYV31F8AlE z{2>a{nqHnD&tvg|Wj&b6KV%5&a^Xh4s2l~0gljDo;hCRJE5gftQN8#J^&+{T?ML*X z>__yG%ogV#DEB4ZyEypE{iW*tPZfWq2MI-1CxCv!xKX?3H2`-S1?mAI3iK)QNkPEx z;%qwv6rAG^cDxV@W;#N_Zi9l|9ibo*9c@rBvkq(G+RXa&c()YJa{yr&fxE%HbwWTW zEZ!nMfK8Q{pMjCt^0IfE}y zd2DuPstcX6l*rp!A~d+4X%VWA^+=3h{zwbl0+eE>a2K0%&I(VXbMUN6#rBp$C5UIBg~ISCdcBi4RSxFcE^ zTxz*fB)f+WzNJRCFf~(abkHHVJTH;Zo0K$IAGZeUrM$TwxJ^uwefA}QCC zjBxo5-S>!!H>r3~MMlNK(yYnEZM5$9xXp-}tXc8}G_f=uLz6mV1$Zpd4sqjhty5AB zbR4a_&=ORK)iPpcA2h(kQTg@Z`=@Q?db?Cc@%kGOA2;FEH>p`A1xS-h{FbQ12N$3c zA4ow&w2Ux7b)*u|2M7hE9Rh(p3bMe0kZ~%c6fAKJ;b_gFCTPN4c+~3A2}{QoMu9;n zoY1&uft>J&zEGCVRwq0u*AWC{l*5 zD=|6p@YDa$-V&Y#=z5K$u>rKnbaCUPWzm4rDWoxuLUOc~54|*UB*NwHT9!$AMwz5X zihs;fDXu#Z!p7^SNQ)=@5@?tf<}%Fv>UUOtuFsvuS=vcNY-v-Y0J|ClPRlTk_; z=D5K_@2eaBW5uj{BM^`x@2|QPM#rZk%BP1e><5q}W>QAJpj*N&J~J)b@q&cRP?YY= zji`{+lslqAO5L{IcXR4F2spkU5GJ&g}Qk7FGVuhUs@ODU?rrw+}JSp<_C|6p@TlZF?N7fU`KA@O)v%`z@ zh3?DU?zY@Q>NHwSQumW0brTDay01$${%%1)1gT3Pp~m|)R52Jb7iWPX5KigCVcn3WhpX9xFcqghBfT7#dJgIQjd8k3vI3%q*lbfv7q*^8DEB z*FnQD{nN^eEkH=Iv*_#M*ja~EG}9!TbUaMXRAwuPvLKaP_&?Rs66Soc64ckgoe^zx zX>sE?TN@1nEt+#zNW-KdUm6VqokuRGn{}Aj5n=?dOm|8$A<$u!10kXOO2PKH4ox+t zMz5D}!xX3Q0IH1ewNeqS&#;x8ZZ-2!SqUq-;NGQpwm2pFss~$Ik@JJCcj#&dNM(ZP zlW#Yh{W9T|ksD@2>sY=nz)Au?z$)io-oDv;M050FEi@;+R@(gZhERKNpbBA3PM^wp zsX&PqiqitFep?jhLkm!xSIOA(dV?!ql@YBNRaq28JF1d|CsZYLg?JO8D??z8vD(oU ztJ#Df*0j|2UyLHtKwS!l4WW}046s>~V3@0;P>RqPu!hQ^T9sN&{XVr^zdttnD#Xbn z@;?y6B7aJZfdsG?cvcLsh=hR5{bqYhvZN1sPb`!J=YzO$(#9Kc;-TgM8WJaQ^Q93d zt*ONUR{PX9WmV`#zW`0sZOedJvfdfYO0EKsRYFd6jh>V{rfL(~(!&;nUtD(!cq>^I zp=}|WPJbncb;4gQ&X>0dx=fOL?V#%)0czzk0$6P*E5=q&F*vbEc{?aeCQYHNZXd!qJ$m(Vbko3+lceh8432ZebO7u^iCCc|BH8h4={jC~5*P0dK3t?7-*G;0F zM<_*^12{ueeN95CT-`-NC2bl#)MkZflHAe=79x5Kw=Lh@?+;UGjzDC9o5<)1=`)fl z63bcW=pZ!Hoiw!_hDh#4numPh=0o~R%R1)-6S9Ne3WP<{ID|-khOX=%OF^-C@_Fn{ zJRgU4zM~{pr(+0$iXI9HD+Z`0Va1&2gq1KfoR_qVpW!#V8D~$3ASV{PdG-tGWxc1I zqh8Z{erx(G`ksbqp99nSwi)|zO+vzN4qeP5@bwal&=>GQj4yTk4zf0nmDTcH#*kjV zqb=u^s(lAb`%bbaY0j<|8XW|GY30wId+LxmD8)+4WiX}fv}8<)<`(5eLUAE4dRw94 z+5l0y@Z51S$oWYzA5OBP$MMUB$*bAJ2{TYaY0yJ8>V$%TUdr6<=ddmtfn<9}>XP5H zFC3pJn+7#Ba`sqSeuVp#|4qkf6x6@iCYx)9@Y~L#bBCtSeK2r~T zNL6AT!QJ{PC}55}j@+d(80w@WkXyd_`b+x~4!Q9#L+v^ljX97}_8EmtpVNLRysn3A zeOQk=p(5sUhxmCr+zm!%+>M9)v6$Kwej8ImEoxg@L`*H+)F2SJwGQLTy~g0!!^*sD zdI_{zX-9o4=fAezG!5HQgNFY@rK(_2Q`7Kq;rghc z!tkL7C>S2OJ;c@K4($AhuNw;eqIU=a@?1u-x=3YD_&|^o0DK$(zB=h{iVD}6)MBlK z2_HPw*N-m0nY?JEEDQ6~$i(Ih27E~t5O1+5vaqlXN0VY1G|=>)x0BRCbgX&*Ty=#b z?})tlZZ`AMAVa}MYF?ApQ6?($6dckZwCNg+ge1l`_wQBb*Hrwvir0fiw2aBy5NTpr zKcW(;-b|-t2_2Iou)>4g{FQ#n!VG>N{Zr#RTXzKij`?>4_k3VlO}5e%ut}KaAaR;n z(iS)=e3=TWH!Ye|>1RCN2fXPKmMnjZ1w!Rm2C$)mvQknskAp5*e7QsU}? z@FXPwtK)hPA;o8&QQc#J8Xqx+gnfd|uOBae-ZI)<54^n>$c#v^4nTb(w`M(`LmA2~uE5F{9M zfB)ID>9O!-%oB{wun7eS$Mdj_*bpLpqDhCQ*h4>pf^ zAbJ&~5kK=_bOv8TKl4y@hCQC~v-6Xq;Yp1$L(I2**xviUWC$k6KcdHK?`IyqU%P#? zDYka|e%Q8xW^?E_2J8W?ZJrsS$EwELa37b`FucT$k8&hozuv2L+fLWw$A`(xJ$&iiE+#6HWyC9t*pAWpV#Q)8 zT&)>iVGHeY^XpP7pBRDK=i_CQs@09v!_` zg$a%iaWwBv?}EE63S1l9mQCUXrlaVR>WCbOE)Zv8z4Bn3@K6q+?oFUQpv>FA5~0NV zq=W)=v$5SSJpPQj`dRf-xGP_-`gY7bD>}^GP!%c5?OA8y4bW@KX&}&Re#R0R@ek0Z z*%!cc z61j=u&%ICQB<*|nJS)N#1s~LTu-}W>lK$F3zt<6|X z)WmNfpOb{5%Duj_DH4$3$e2-jj4~C!Vk#HYZUv_x-v_B17|>)$r+N z84q;pHL@i62ID>}et>hg9sVrk%W>`e9i@3wUVb4XWLXl-7VMhu>+D_J) zfmF|mop^uor;AMiGAGjV8y#TNZ@fo+6YmwuRMV##{FVt*TWzl;je)lI?(=(7Tku4k zyNP$7ZQb3z^>^QEsry=5Aaz2AK6E_0-ZJpWE}`whht4oM_N~sJzgVx;D~0ptbDRp( z1YIFh;`DI!@^qy(S!aWJjiqH9GLbazmoL|9GoBek1P#M|v3#ykMY}ajUeyB0g|q_k z3e{?xyowi5HM*clfeyd*rfbE*^=c0BP|>~IqXs7@O2gp>c%%`~8W@B6u;JrgYUHGo zGhgZOc_LQ6Y~?UyYkErVjhdhcL5Vh}8r9j-v$bNWSSuE)zFb8^TA!S-@Wpk-I+3Lk zjfLLNaTSU3t?97Hf&s8tFDqkcJQj&s8*o>uX873Wo4P;pg7O@&-Ca@SN`SMh@? zKBnT6Dn6~^U#a*vDtlyEPq35NZdwYiYGt~1*j)!~p_nhuI*>kYx czMgYEZ|<4k@1CAZJvFW$<*vtiCVPheFJc!QWB>pF