From ebf20908221d3408ef21ea540e030ecd72cc01fe Mon Sep 17 00:00:00 2001 From: Ing Date: Sun, 16 Apr 2023 03:56:33 +0800 Subject: [PATCH] Optimize some files and local build scripts. --- PLATFORMS | 8 -- TODO | 41 ------ doc/DSM boot.png | Bin 13519 -> 0 bytes doc/buildnumber.png | Bin 3410 -> 0 bytes doc/first-screen.png | Bin 38894 -> 0 bytes doc/making.png | Bin 7058 -> 0 bytes doc/model.png | Bin 7673 -> 0 bytes doc/ttyd.png | Bin 11217 -> 0 bytes docker/syno-compiler/Dockerfile.template | 50 ------- docker/syno-compiler/build.sh | 118 ---------------- .../files/etc/profile.d/login.sh | 9 -- docker/syno-compiler/files/opt/do.sh | 128 ------------------ files/board/arpl/make-img.sh | 18 +-- img-gen.sh | 112 +++++++++------ make_rsss.sh | 91 ------------- new_bn.sh | 77 ----------- 16 files changed, 78 insertions(+), 574 deletions(-) delete mode 100644 PLATFORMS delete mode 100644 doc/DSM boot.png delete mode 100644 doc/buildnumber.png delete mode 100644 doc/first-screen.png delete mode 100644 doc/making.png delete mode 100644 doc/model.png delete mode 100644 doc/ttyd.png delete mode 100644 docker/syno-compiler/Dockerfile.template delete mode 100755 docker/syno-compiler/build.sh delete mode 100644 docker/syno-compiler/files/etc/profile.d/login.sh delete mode 100755 docker/syno-compiler/files/opt/do.sh delete mode 100755 make_rsss.sh delete mode 100755 new_bn.sh diff --git a/PLATFORMS b/PLATFORMS deleted file mode 100644 index 5173e00d..00000000 --- a/PLATFORMS +++ /dev/null @@ -1,8 +0,0 @@ -bromolow 3.10.108 -apollolake 4.4.180 -broadwell 4.4.180 -broadwellnk 4.4.180 -denverton 4.4.180 -geminilake 4.4.180 -v1000 4.4.180 -r1000 4.4.180 diff --git a/TODO b/TODO index e23201ed..e69de29b 100644 --- a/TODO +++ b/TODO @@ -1,41 +0,0 @@ -A fazer - - Checar NVME no modelo DS920+, DS918+ - - Checar módulo tg3 no próprio loader (BCM57780 [14e4:1692]) (#31) - - "Sensitive data" (#312) - - Checar drivers para MMC/SD/eMMC - - Checar drivers para chelsio T420, T520 e T580 - - Melhorar função getAllModules() - -Concluidos: - - Generalizar código dos addons - - Implementar checagem de conflito entre addons *** Usado alternativa de ter listagem de módulos não necessários *** - - Tirar MAXDISKS dos arquivos dos modelos e adicionar menu no synoinfo para configurar máximo de HDs - - mudar na configs dos modelos os módulos builtin para módulos não necessários - - Mudar palavra "extra" para "cmdline" - - Implementar exibição de cmdline e synoinfo dos modelos - - Adicionar checagem no grub para exibir ou não menu de boot - - Bug no boot.sh, se usuário mudar a variável netif_num o script repassa os macX sem considerar o novo número de interfaces - *** TIRADO obrigatoriedade no LKM de passar esses parâmetros *** - - bug com macs, com 2 placas os MACs podem se inverter, checar isso - *** Resolvido com solução anterior *** - - Verifica se plataforma vai rodar na máquina checando as flags da CPU - - Implementar seleção da versão do LKM (dev ou prod) - - Usando TTYD para acesso via web - - Verificar se fica legal colocar na config dos modelos os addons obrigatórios como o qjs-dtb *** Usado outra maneira *** - - Implementar escolha de maxdisks - - Limpar addons quando usuário muda de modelo - - Arrumar detecção de discos/maxdisks. 918 tem só 4 discos e dá problema com proxmox - - Melhorar opções de HD, talvez criar um menu a parte - - Implementar update do bzimage e ramdisk online - - Mudar addons para colocar pacote completo na partição 3 e detectar dinâmicamente durante o boot do júnior - - Acertar flag DIRTY ao atualizar módulos, etc - - Consertar MAC custom - - Mudar synoinfo para ler do modelo e preencher no user_config, para usuário poder deletar entradas do modelo - - Validar netif_num e macX - - Descobrir como é o serial do DS2422+ - - Retirar o ttyd da memória quando o root do dsm dar boot - - Adicionar mais binários para o addon dbgutils (nano, strace, etc) - - Checar se tem como atualizar microcode via addon/modules/whatever... (NOP) - - Estudar acrescentar modo simples e avançado do menu (NOP) - - J4125, HP G7 N40L desligando (#110 #160) - - Ver se vale a pena colocar uma opção para configurações extras, como escolher qual módulo realtek usar (R8168 ou R8169) diff --git a/doc/DSM boot.png b/doc/DSM boot.png deleted file mode 100644 index 440c3fb7b3177cd8af88d8e90ae1b1ebf3a79049..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13519 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 Cw^?cc diff --git a/doc/buildnumber.png b/doc/buildnumber.png deleted file mode 100644 index 326fb9901daa2dcbb7c51d991ef76c2e5be2fe36..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3410 zcmcInX=n5I`Ujh}t9~I|34;w#pi5)PM-6 zY!cZLb}$gZghuu)fC#v;h7bi4A%XDH&;HGuc{B52KFo)@Rdvs)|2=ij|C~CN;^qpG zkyMcs5fPDbJY(-6>?efnwS<`Pxoygp5q7(xJRqk;s`?Ks2`9h{wl20JA|$-j*7=`= z^W9g@_(q9{?CJcg?dl4D9wH(lz2InX>lGi!nhv^npi7M!L1|$3AtRiAF)evr0!+2r znIzji1@g3+x(2-xpIv>&V$HC=$Fhq%?OMA6ecJLGy+xwC zIrfO_BIEM7U4U~?pqRv!llzp^sXtzNo_%$N9kzki@)UZuQjV%t| zQ+ad1J&GmHb(>zl3{;;dTh;i`#WWLVB+dS{)z?6e2!Xf^(%V0z_Nt zmvBoqdXq)2M`?61Tf$VMY1Qp)ZDjmfR>#ju z3n60%ubqkQYW4}^OU|$+ z28SjYIn4uqOu?GWn#<~6zHJ=&{s7HS3gi1R67)&T>aGiD79 z)k!BgNMq|01v5cw0Lu&Eg)?RWsHCas$d#=Xv!$FF?$A~2OZ3jAmSkWl=>6i5Q?2YX z)$d4CLZ>!k)eVO1j^+WIjS6QFJFy?419*aE>!nxR+)Hs-!Q4ch_kQ}>$)e~I@T@3fT zlbc9eKe$LFeU6N++g;^pLH7NsX7RpVPF0XV*xfjQZx5cTooZBuf1v3%^yUy_bU-~_ zUf_XgXah^tTGrqExf=-J6xU1k;jd{|=TVIfBzGP(n{ss%C|mi>P3x~=DpUap17gzF$WFg=`Lh!j=+$UWHpL&V-_z`92!`&^-aPz7Tbp4_eQQUKLUoV zU=g_(v4{Rpep4K|pm}MHgVwA0vw?6@7Rc~MJW3?{4{Phk%XM6e1HPF?6_Ln%a<4oK zzW};!yp$QLrUqT@3}Oq1qb=22m|?dO(uZ!}@LU>ZaG3R6rRP{wbYM{9Y65S(2TG`1 zpyM`~N)-^=`mYF#xELDpzp(BuRm4^(S`I_-`d2#SX*MP2(@9zxzwg{UTgFcc6788) zt~vhga-p{2lj}cJ|Bbt0#b1oxIg>bc0YJu?56Gt6VCJ0`iHfX_t}7-qhHT6}_@VlP z?aDFRlVzjrvDyyFd3}X`;NpWPE$%g6E9b_*f+n8)$QT4p&kZxs;`4bF4nOORAq@?w{{k?H_3` zMNsy)89j~2$mSyseOu{ShVh%|A9W4gCz%^%X{aQ>Y3@y@*AJEbA%7{|$4aL`YQA_G z8b}|>@6UvrS(pbj^iJ@e8UVtIw~$Ie6qMDwRG=+GbC`>Vlucl2Cv=5t|M>w0@a;UE zAKTVRk~a55Z@Vetj(cnuo*9%hf(37gXYAzr@%iJb~@>=5Z zK1WVYIFqHZ&aI1=7iPK7%w+@AYf%0c&%C)|fe5U>yL_OMVzv_54XtiKdO|iiTwqV56e?a^xgi# zn*!XR{-OSjud8-vfKq6Tv#>qVOtR;mKNI4dMuFH_{g<5kH~ard>EnS@K|U$z{B|}` zjrM19|NRX%?S#GwR<%+))3_b79 zxkF7zp*|`fseW;b{dB9ydn_lQzyZP9e1i<~#5P?4TRI>zLT*a76Q5ze#rzz1|EwTp zos1yTSE47a?~mYEZ;zjoQ^sL-(GJ1K#$nOwlkVLPbEPln2LNICJsc!MXYM)Kb3>9VH{47WYg)2Y|1HgHRYNg+V7XiaJ7ojQ#}hEMcJ)NfFg zNe$et=_69kJ1cMNq1&6RI0@-RFBoEHlf5%4o4g@kue2@EE{WUa07LLDU|5CA{2~08 z7kiZuXoVa>a~!+&Psj#Lq9Xk5cFWnZob%XM=QcvgdF(Ge^M1>~QY?7$b7qQuL%Ifl ziH~is@;E;4q6i>2_5@3px$8==q#YArj+KBS7r!HT3hrIPFc^L{4kOZEZb)MHgm#hJ z-_<~BCycWe#7jT%h6y0g>SHf4rG?2n<(SymDs8?sjsu4T`IMj7&rj@>fgasA2Z)MT z`tFOj5vZ9!3-^P+zV-w%ECROJx-s-%+?*@uXxwipk(P!w1}E8FtytpBwYYBk26k>? z`D~#e;6v<~g!4Ta-7R9O_d3?6TxCQOH|g2&<)jjJrPXM=?G4^(gwQU?&~`z9uGKwj zn8IEq_5aMme=7?9|3!77 zfLbZ&yO*4DUeYy}N{AsHzD`#GDb-B>Uo5lSQ?We2Q%0h#@O?yg#jIERr1y5{X#9^` zdm<*je+GN3cVK{!8W7}x&NI3wp)cRsRy<*b9NY`nioNDY!W`5eADtv5mnUL`+{_;`)Qs z5z>}Uo)PI@CguC11fyKAQMMqA9+=>A^lIY(=;t7}3$wLIZo}`Ps5f}T?;MbYi)=;6 z!pi+U-T88syv6$PSum%lw%t+GU(IA^rcEKp;lhlM51Yw?dx8QT7ibO5;O*C%P>(A> z_@k?@RzBCe?#86gxA-3B{<(nH9JzFkR1~}yAK(fuUG}t(IxN*TY-I81z{G=A)SVS> z-Jp-Q;dyKj}(=T7N&?yG3VDN_<< zOKogNLBB0xW6lYpzu9G4X^(k@oM1&T3$a;ug?}uSeSSFqM1mzD?I|Z2-AN^aEl7=0 zv(*kup$p^p0aN*5>qRDhPGUJ@+bCG$TVa z?P%>syG(R1tzh9{ciG(%tJm{DhSX}E;SaLWpZrqeyu$kt`8KT!Q(OaSnq9#NyAqk?_(Mb$O8@-P< z+UVWroGriq`@ZMHIp5E5U9Pe1wVA#4v!3UE?)zR7rlF=tc8Bo}0RaJ-(kq2G1Ozw4 z2nenb5fK8vu}qji058{IZxo*s6!kE#00%d%os-mN)x>2g){TgB3s?5lCasvOA+VkoupnL zZX%8#%I8EJ3cq)wG=IFj_1{s@L+$CEDEInrrx{l#fe~?!lfL}-6OrcQ_b>1Kud8Ah z9{syMi1OES%b)*i@SXoJ4Q|tmv+%QkNCpDj z=ea79WWy-pJ0i|WN`Q!9+`Dg_^{DWG0-j0q{Is6YqopM_TXnM5{Ph1SdJHYVn3t);d#ER*SPBI9_9tM(U| z{15pdZOV1XF@rIkpcyGmxQOj&eT4!Gs zS&ztJJG`k;Qc^Z$!|38>Y;QW-QvKSUy3uTDe+O%+?4qL(uSjI-3Ko%ioM4VPc?kBfE z(~^B&8UOU)x*pHY<~`Yx@;4K!&O4e+nj$Al7-XWf_Y;TxHVw!4+)o!d;P?3CP)28A z1wpO&hQ?VhGug-&Llqkt)S@A~0dRk@yJFlXumDTER57W=4~m6W?BzPqplLOC#ft8v z7)oaCzAfceoTip0Qo2oSq!y>FG+FDEVPjFbtmoTn3H@(nqUc&flilP^UQOSBdXCUx zRnvYoG&}oi59Oq(l!1`2!Do+y!6!@7nVun|_EG{FF5pPy#iR+1uY|POimu;|QNBdf zJxJ8(AnA;&Zg5$qP5x>KeD>$|i08&-It^he{v%ob-wuNVQ(VwB3>#@0x2&DT!FVFw zn<=`@suGHWIkX6NF#}C`{G{dh6YHI-8}f`{#Y*aAZ+UE= zMsl9}Hb3(@G9nv3dq(-}wz11+t!_0*PYM z{ENNR_w^FeOuR17+4=3u6jU#@SS#x5gAdN~FLCQadzJaEtm6 zyvWKIpDlvL9j7iQHKpm=*mR$T9OmgxFB3fSVyt*HlTtcC+R@Wle2A4M2Dh}Uf* zchk5Gin9G!Is>qL3DNwvIh)(c6y*G{hlrZ3_R()lc1Aj5HrTZx5;e2Cro}gdsM?d} zx2Kj^imx|c*~|VouYZazcWGWSDaRgBsY`cM9sQs)tj0{9`CPk+F7vPZ13&R#=#qu` zC7w=qQHPNIt-PqKIg$2>9gcOeeQYa!w!JU3^Ebr>cl1~aW#mMfmVBz45Mm)&I(M4B zx5=yGabS=}Cw}%o1+2zxQIq@kuhGFGY(4oUdrXGcoXQ}#$?fU-gv%YSt~IDI>iN*D z{rvWQ^0Tq7OP@E1&X;IQ6fxc-6&ES{w6MA1Rhp#LekxSDl#NboYH5oi{9@&6$?TS( zawmKJHk&}@u}g!_hH{Uv{Iwdo<1V3^)ujtjo0IGfyTM*{)j2BcNlm@8>lnpOC5;%7 zK+zY2u;fWt$f@~WF@i^sVA&yUXV-Df;lM2uz3gfsLvwmR$}aK=?Zx~r+H7>ay?+mZ z;3LYooi1Xlg-UN^c1D`5AeU&)OCV-)IZAW?O8(UhdqEb(hXFN!nt*q;OMZj=gON^r z?heO;Qi9dGwD=vl-(Pda`ZwB`DJYOcb@XsF=wf@L+t~<E8Oo#VvD_To0B!M!&Wgt==vlwgG4=l+o+A zhkoEYhiQQsjDi3E&b6Nz;nrj|v(tBe>YhB(8EU!5X-ibKe)73NlZOQgJh#89qlKqg z=SrT#{V`dV=+PdvRZ-6wGFo@h7i7qz<;5(zD4{IEOySc)UWXK~8t2^KxqpA}nZxMG zm$ODg1coit$Xr?cxA@&QS0rJY@)SB=GsfAn4tvxkdpfCQYWFk;D;AmDiaD6ANxT?e ztz~6n&dz+-an&)okakF|@%f3nW}x$f?wUW-Wp=HZ-ZoL$xsXc9IzmoOq;lN8u%t}) zw+gV;nB&yx1Cl)>s3sC7oF*Zo7_2}RV7ZvkQwfu2y(zI`rWqJIaWtR$y(27liDlJ} zRaNDGfCo0q5(qP4#RN7tHYc|5eC0#_5T2^n&d! zhZ^zdTi{6uM7ghO4N*qnhN^QRV_Hwyn4`1c$20|5y5DkbM#TNu21Q=^xJ21Kv>l_v z@(pBV>j7_kr+R`^HvjdIP=s(APj*ah(!QSGGVVLep<$vGAB0XUR2{CrTXjK8_$u}v zGG#Wc&c(7hk$5s~VxMQhLDK^iGKcL8E)R8vgdEe(K;j4dwzb_J6P-~_by_T?xsdc* z$4R;aV+v#&ucw?Vq7b=|R}`n4b&FqAG?5ZAB_j7$tizK{cn`-LJ$e1=!x$9^VZRdd zKUBOR>mnO0l38g$WWj^4S5Gq#h7mwEsrItyP1+?A=PHK77->hot2O>1?2|`nR6n?M z`7(8>g0QL{8*8Z2HXz8NTrbztM2e}g%xz7yWM$99hoIG@w0Uf4{rUXaMBWZ`%_Tka z>-miuj_iH~6p^{3>p2O;#b+f?C<3%I$1KhGdPvOzAa_B^-3{A%DK##U7nX zW=s3d`23+{>Je=YI=({$j*2{%19dk#bz0Cf!CWboNOcwL&3>p6y$KS|H}O2ypWUuq zZl@9hrK&_I{yA>EYlV0vS7ZXZET8cVUTlTy869ORZzLa7;Z0;VUNd@8I=`N;Atf^A z#>SE>4$XhUAEp!BynSB~;ocD@X*vr*kM@$w_w)+>(O~KJ&Prk&_BWg*-nj0@&4>mJ=c^%y`(B9g8%CHt9 zmpASFe-;kI@ZH0dL-*qwxAkp3+{DfF0ZOnD!kbaqtn(-?H|fUT)7ohdy7mtE+1vwtYfVQ*`9ILUoP@d?Cp|Q8$u8eRZv-3Hn^EV>c-9Aghe|bwvZ@;%NftRu+I#&0 zo1QT5(WVQX?ue?@s|XzId#pyAcOXW4Uy$|Wl`&vhvypi{>E7N_(?HO%qm^lQrg_RV(YlelqkFwO8q@bX?45J96WG6g zLHPX?N@H14Ui~dI#SSbx`(V#U%}BQ8#YFnSKv23&m6m#Rj;}PUW{-56_#yLQI%eQ) zRkPX7|Mb0~Z`xj{8blC5eZKxr_xqX#{`ojY0N!iiE2t1UAO3HJJ}1)5V>hE`#0_0a z$OT#3|No|I-l`Tnl>M*4|3?InU-0~|9=~I`|3{#RSxe};!ojndM&H=;3cFDO5movA zU&;yZXQt}hi{Ebz=0uM_{jjXjp%eOrQ<2-kay*(gjobas6x|1jRY6tLUcB`eCu`VF-r{bxw-ol%^^)MjNf@G- zn40^2w#~zA^$b>4?{#6!A;JOkcwDe%fvOyxDp~%ukaE<-+reWGEx~UZe{L;&9M%EZ z6BG||sPW%`GaHxcu~4(6(~FMx@a6)vbrac(7vjndMqtx68?8YSlYhPN;3oUCcz>^&Uug$z1+Vd%qmfTA%PHY>YZbr(+6Y1Psto>A zigjKqtb!+)cs+_>fGwQ;9C8xzjw z2cx4${JZ(ZjRu9eHW-9M;uDM44f_GE=>w80&`|x0@%q?_n5^unS+`7N?wog7>aPqv zTUVIojkTtx={Z|oTcbYk`Tn5WCb;pbrpR7p5@O2Rc&nvx!8Ae72nA)~ug5dl@kf9- z)~|OD>MHiqNb{esyZ4Y!(YaN@L=KXE(+p_H4h-ew+Dv5q{-&Rn`)S(F+i-$UbFjGH zH1Y7lGxM_JoOe9$dgiMn0Op7~O@k*t460)LGUXwY)zBoHfAMbn!Ziz?X(nRXo%^Q* zf~4|}W|e+CMsG=r3*nH5CvFtgZRT;=Iy=stecTI-WTkB$>UW6cQCHig4IJGXP!>er z6AQdeq1I`cXkb4dS%yiC=iloQ0BXB_xuvE0X!Nd9xm9oaogJ~@Oikqr3#H}qQgy13 z!AW=JnUbY7yY9@07pfTtzTHdv<1xLX71~-P^FH1a@x}%QMpd3uU#sam)7+d55}i#i z>Nzy#$~dHr!pcHT&u5NJ!uT{r-klOCQ{#ByHiOyvDVr0O`Oke^vn*S_aW>a(6_Ctt zGSV3wSXcAX(_ay_lK6}Vy zNV`<;9VJ;BM@E{HT;~7!J}IRkZ(~VwC+6r!q>fvBZqoV4y2gcD4Oxeaq41E-5TzSL z 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�@42`3^L-1gN1k}9^dEk< zxl!sr^m|S~Z0_R|(yHmC1RStSgk+4sXoJ!`=9H@a=7xxiL1N z)*b5kaA=3|C1+&U>vZ401+jg`JfhGm39vOg6^hDt4#lV_9=rtjnvBs0-=$xUiC%tm zy{{6a2wof}=^wgJG}K26+Ubi`s$jcl7O_-R&7;{DLtp3a-o5(}wrQAlxz*2Oq#_pq zCZ$Xb ziaBoByNJ^|ytZu<+*5Nf?;XFNa+0Wu14YugUySQxaJz~8{;%^XNGxk{`B9)TlHb<{2{WB=R1;v# z7H!LW~E!UUHSu4c=yZs8$;`Ve&G6a4sF12g2ZZE*B)a_7-Y~?M$B(&od)@*EFm^! z7M9RonPm%$q06fEo`I(@QU^QPeL8Xn3%(;u-#(?XW$GWif-(;T-Jq6`*e|rq6@TWM ziIC?8up2d&?3Ik-Vo<|7&I72D>gf!by@L5`(Iz@0e;q<~IJCWeh5)KV#;1Kum9XX@ z97g_gLra}qJ8k*P#~TBn7)gk+GULj9y#C6&;%fE0#+Emj1T53+K7mFtt95vNTOX6> z(;>&R{JQSDV`N-=wukXTW_ZmxfRXrxrLAsZxHBV4)j4WCEG_BW?6^Zl%VD(+)afG3 zT0YmV4h%(m|nIRCw8J4hp-RO$|UN^G7igW$erd{8J<#eBHNaUBI^3K2yV0y z>yFo4&&}DcKKJo*_rb{aFT2CvJ<1E@oQq=RRcfQwbl${*Mq!EWz8rIwcJG>LknfFC zYC9m@tTwk}h9u$mJToJt0+P!e9Wvb|Yz^WMwE+^GIkpC{Ek-Jf)!TssV^8WOv+5iI zD9Zay*%KfN73JV^;{czJ8bM>ZPVda~{oDlkuZkEN5F<=RfpdX4xwo_x+SQ~bjb`1D=$HFQQm|gtZ;501q!4M2(hF4j zR4lY&Wn~I?F;RS7`Pmb(S60PDWtKYPjy69vmpN95C8Eay9l^cztQ`7AhaVf(QfDRG z4Rfs<1yMSQ z5cIPzCen4qPdRU7TA+r~U#jLa^RjzLy(lSW{HkfSI}L8*MOTYXbdIglLbXEVm#uQ- z{^xUauJ|h5jyK z@yqVoO=^fcU@iB~E3IXu{K|ZMKh6^XIxb`8UAQ#sPilJ@DAG5n;rysTi{yc=N^(ZKTsOn@p2y-< z?X4YYm-;q$_*LJ}HvCh2an2p9({`kZM0@8kqd0L98_cr_N}Mt#AnYAB4+`05f33^ni~pB*#!m8uj2;s(Fp z`?j*aoD%epd5+S+sB*zDo4~v_-UXyDjZ&4ym?<|oMc|O|pKd}v6nI^1d{<6wJn&t- zkV43>&sKK_4-+#YXqlNZg-UZ-k)1ErmG}0+t7`d9r7K2AyPr@L3Fkj6&WV@{ovCmy zu7`abneKSmV+WYlCm%S!^?Nf@zcW{e0HJBQtYDQCQ0F01K_dvhL&7XnHSdU?Km z;&VJva__I$5%>}We6mUg^#>9goXXXUK0kWnl&sImC5tu(>|o1gHvmwp$noq}LtA#&(att5xw}m^$x{{_++ncI(zW!+=}n+kXdKRMy&<07 znZmf%pt;sumeo(LZB3+OXRVD>0(pB)WU>W?s*Bn ztbU+!EQKs>(&)MO!h5LupefY4_3@r$TnRAlD6{u757f4E3VT5dQX_&kuBPy@mZ*Ot zK?sw_$X!a$jX~=XC0EN$`rqgmoj)v$#`QhUVisWt98Z$HUtl#Xw)JSTH-8bdMlJv+ zhsQnkL%Oueqj>k4 z6d~H$L_bLZJ1PEf^qPXDN2J-iwR-M0pPAPdcfTjN_zII=!1?{e7f4)Fv#uwbGkv~) zJ?j0#>dCXL)5)22-oD{^UkVJKmP8E3c(y*zXW^F+7vs6q>WA$uy>XRE-tCX{>TdmA zN?Y!TmUc|#RyQ&}M4(Smq^G~^wk7C_dxZ48i=9_%aC8W`W)n1>ksolzbL#{@k2XrP z5EsbGe_N>&7FjQlnBTr#{vj0DeuX`xn3p6&Fyekr_4}Zynx`uS z`7((bN4x=swds4qY{%AkDod2Oleim?N~_ab$KV1@%;{B@;iGFiE{{&)v43&@?ES+>>ZXHXvTMD_%= z2YDU2^Vp)(YflxPTs-_a-jx5(1r5xhlS&VPX84<}5D7}XhJqf>c^@y@$rpZf`n{c% zQ0#J-4~U1UuNF%Zzm07Bn+y{wLrM-4;w@Qk+K#a@Zn)oR?(0FNb4`5cxM2@Dt9D^u zFIE~~KUVf;t>|RY(X~=t+c)*F&)v3s7Rdr;@!Fol4?Za9%|GmUQAgzv!=`^Y|AD$B zy++X7O?sd9(@d15(mk~``||xOr?^FZw{)?^mOB*8>s{*|*l4KWa8y`%p_6ET;#_Y| zODV3-YfQQS*DE7m;*UqauY~>^5GF-Y!0DsxbuE3Ly$b@p{HWk8UXz&@r{)CO3Ye0B zWxJ80n@IG|Y(B)s_Op4u>C`TbSjqkLgXf(m|4eD94Qv20PgM-au$fTY?H_VSR;FLx zj4_h0K2zEc3nj)R-)o0Xyw?=5Z6N{}SzcJ)>_lVZMHZ7C#xe-uP=u8LTj1l5uRT9Y zL3rXMRN=J2mFGU;>MV#Djt*mU)&>PV?S_Ek)2IVC5>u5o~d$t)3ADe(R&cmMkzv({~Mt|tOpSl;kln;AZFMyZa&qUzzaF`?=ZIf z5t()qo64;ftR3@`mx_ykQNlm7_4AQj#f=75jvDs$y?mNfxfEq(r%tertIBVGd#^zQ z7pvc|rMk|H%x@T)A2w$KgRr(+=V~j5fTDOu=yzSQ8f@)=|Vo37i{@s-g zmW${uWz=kzP)rGL#MLEu>`W0au~w@l>%;UW3S`FbYz|xjzKU2i%xNMz*zE&lj^gM4 zW_tLtsrhLLm2j~2tC%}^x+wn9&7Q2$vS(|Wo`pEiz`ZH4ey{49Hb%5)n5FD_*GF36A9=zX{OTmo#^{6*UrVQQRD z7QCh;l2D?NzG}gcFan)>Gi2s zJk#5M$T__$qh(`V>BR{~=&yTz8i;8DX2Y?M3Z6?Ff^eUI+Df4mNwd^gvEZ{EA#JBE zq5v(kiJ(E6i4pcHDF?470MtL-zYMNWGQCZsI5$E7?ZlJKYyY-CNI^d3e{#JckZuL? zk2ui6ab2YN9r9FuezQc9b17QY?&RjtFj}MgU<@8TcuY%h{m4p8mfD7PC8<&!MRy^X zZB^2fXDTAzCg9BSMF3x&*<+&f=WG$S-`Fk~(opAi=LC{za7M&;P0YlMEPnhf2o*qH453W(hY$wNX<}NHff8$qGRqsjirNVHBY_ zXga+WrjuUF($MhGMA@DVNeeDA(N3+U!ky>erNUSk8h@OrpK81?|Xdt`7hkT0or#J_*Np&>ljCwd|rCC7xED@w!Kt%E|J;)4bvKt*Cv?q6!?5hjqGk;cJ&% z;&sXHQJI!FVV(RqWsh-0jCcr`K~0`-=dz1j@YEamVWd0q1JOo0IaK zH#ztgYEie=ZaXwTeI-HVVOsCeZ0{eJWL-9?1U4ik=>exs=IdJdI0gepbwy7!7zSlA z3+WE@qNn{Z)fZLuE*K3YcH6R)cR_sd#5yU`pXwTqAw@n-x%1EOz{KJE=K=`lUW%P2 zh1a;gjOL~+y{qWSkj`aBUcYH7=Vrk`aU&&@(dS}d?V z8bI;L+Wd*5rh#FOM{c5<&GPvC7B{=Fy?Bd0=gfcV;GJ6_Vh)L_mQ^Z!_eLz7BJOfF zc3gB#@m$s;U>w2W-RswS=X;k+Xn#dkArIozV={hHS5!7*OLD?^E&?A*+{HyU*chHK z&p|>)aO~x3v$6;4@$h&t_4Qff{CFeEFY&9gN_K*f|Eh$?`gyaP$J;@L(hIhX`gGHb zyejVjmk%Cr2=N2tQy$Ls_jPJiP44b*2?;_mFr`E}=2(%DVqY%BnM*LU$le=+f~M-B z6B@wMb3oFJO;?hV{(M00O(9r_)Tk$_Hu2t4nU2wZW3)|O2| zKx}G`bChr-VC@KMDU`w!ASav7wG&DtE1_Saj|r6(cv3g_+@Q zU8Fp2o&A*iyx?e5k5x65S4+NJU(Ul#7eI_a>vA(yp2gB;>eiCo)$$+_ME7@`?oqHs zfwk;`TD`Ab*5N401^$$=H$<+*+?%31#S4jC!Quk_%G)K~d>(%k-Z0EJ!fEoat@2Nh zg}UaP!Oz0+xe#kg}g0{cRsAIlpnt9~oM`j2GF5NiT zrlaRVZhOd67?htM8=G-5GviqX6+PJEUagr_nja(ah$Gb@&H`I>{;M7*O2kn)Ht%!y zT+?)@cYek#5cX4`5NBp8u&~2@5Y>tUu~}JjcXbNA&2YIq>&IO;R1SarOb{XC^Ue(% zEl)c31W?K-yLc(l5(fdU55%_;7x})Oi!|(8HBjW$4~>X6T%OkVPz*Sc()#>DuwmfK zn?eil_P7fo_W+EEJn<+9(1lO&PL_A6i@{$2SFR+uw0KJYGgs>D5(ev1Z<4>w^Q+qcnK_m0=xZu@VZ1c(s3%BuX9+0B{gcN*p*@e? z$x9BfBvk8NM{~YRtyT!f^dqKEHv1B6)E3BjsditZ&&L_WNzn@`!P6%WJv?3gNZmC} zrMcw@yaW{aU6aKqE@alm3$n+jlB@ULVl`ypbtArm-B7ft`YN2jkU*CxBp>&y%NyI=yqP}Szv@8Lz%Lb4Lv4O|5JXHC%^b{ zc;m>&Su-DH3>o4C6FooQI!!gutV&Ybh?A(OSBn{Et|UKChU$!0%-XIfk8%xZjb9zA z8f&|&H2EIygs59rGz}hJa$r|780x=m-(t04gwO~KYEV2{h~eFQJ;lSF)qb@%P!J%B z#zJ%)(yEdawO?duwUw+&!rz5h*x z#3LEC=lF&l?YZbG!q3(eQ?gp+RP8@0h4oN?Ylij#0j4@X6I;twdX(m`sm!0u#ue*Ur*imi;?<^-+k&2;LWpCx zInp9SV3HeI@NYF3Cfri5l=ABHUzW}lX<0o*2*(IMyrxAu+}!{!THP}svc?Bc6xzGS zueATC@sAfwPaz$T788fIwB0(Nts!*-6090ZU^fy{v5~v*_V8|{#|CC=(^~?au_dTo zYn9wbNY>L@s-~KnHx5lJ68wK-Y5t${H$@aK%|3spU$IF4e>kA1y61eVCK=^ASwNk^gZT_wOYgF z+l~H*K&niwTKC&j_`c;NwaRnknJ0dO;)m5~%xnW4k~8rMQv&3=jb{3)=*u-=8w`b8 zUGmJZt^8!bbrj@rbo?$j~YaZ93%eZzST};5t{m@qgqULu66I?lr|+mt?RDE z&X#v(ISPP`l=}zLILvSn{}o~lmwYOsv-cmp)bEXpYFy8I{hDu31#n%??UEpw9uc@$ zH3GDJkC7i`zwcZ26V>}q`^G<++Vw{CwN#7fc)kmlRU%d)WjN@8rI%m3V6vwHU)1U$ zPpHsfVOjw|X@=LK2Ph=Hw$YkrJiJy@&UP4w{g52`ASLgh$GakJ@sNUp|6bbeG`hmTZ}~S*R&!Lj4P;V)m^Go#t@ivpRd&kKBR$p;PP^KJUtAV_&3G0w0Xm zc}?MU#$AXBavH1U9fOSxGX3M0f~ub)wJbg|><>2Tx-TWAC&&xA`B7_#U$f&@l(!bj zSbm2I;cuq*sfX_LcYUd++a`F*o~(O5qfMz)?XrU~b9o47MTFm@XCGL35})J)g!+Ea z-C-fKD+4PNCV`)EuM3)g8~~)# zJyDa_9j=SdQz*B(+_ivu=fHRH?PVtx+GeD_&10CEl3Tb8SwBQrB~0WgZUC-?&3e-Ey#^Y zjTMOiL;6^)!M)#=V=x(j!4{{*uSk9E`xSRyuV*>@0N)3J0pY>)*PDxB7ba~PtiZwzXt!?K$=r&odf<+Vx@GqfRQeYr@Oz=rHOxT#Eo zTJi6y(wos=2fq~BGzyFps^1p1me&teQqWZYvURM~oZrlADLD~tZm_QoFco&rz-nHE zWtX`8NI|;Q2hWT=M{C}1O4+2LZ8$hCGDfL)qat?l^*8w=gR2TUf>{-huO+Fiaktex z0}K(`;C54rz{0UG@+0^8i>m?_X${7=Lu_phEkyjiU^+Ayc3N4uGOtB zzo`!DmRKDk^>05YBa8&PcQNzbi+9HGZ9EM2RU`SvWOck|mzIf*4(2ym6zZE~e`P2l z0lBv$)rcQm7F(u2_gG=H8cxL8HKx&%8g!f;J_)BEp(EeVY{k<$yw#@Y>fo3kL1@L@ zFI#dP{=N9Kd07t&v429RS4O$_jwpr`Rv6Q+BH{QFrQ1(S7}8kpmT;&_XOyC6vJQE> z`k;gn)?L7Y$%d#zC4|K<5YyAvU0xkVh^=@Jy!a*eFHQ-q!;E9T-;n^{XwEteC$N0T zJxwz&WXZdM)4AvJZ8h+puhccSe=|%&i|DYd_LP#*ycD&GF51p%p=Z{Pa5nFHRSf_j z%fxL0fgKQo%5tuP$FENJ(73}(B`Ggc$YW1&T~`hMRJjsLIU&%>AKOoKHII=#h*<(>7&#) zv4C0TpSR8RGez31vx^a}vx_Vo>waY-+~=ifS=|g5i;7-mK=+Y3uW>l;t7YC34}@!` z{l_yJx9ZUezL$#{!(Yuz)!iy?+#A{EryN@c^RlUy-(xoB7-P?|VWP+Atp@wGzH3IQ zo0o*S&k$At$nJ$tkE+x~PS0Jn2$jYb+$SE*L>&OAqIA=)Fj{5b+|vTIH6?jB`VVUG z^gUgH#osD0l`sx+u=?HM-^t632O)leo4-GH*zjZjxfyXeqGv3eF?5p4z^|%cyW=M8 z-WVKT$5911hyFVE-?4P|zl^DJ&PoSNnge?B>$^Hd`p^suaK%CC0rl>f*Xf`otxgRr zMSW@0$@tmKw2y<@Js6CtoDXQM)jmXAY1jvhDiMaGVpp~r8?|?5>VuE63+-mOuj`8g>xp|{cY(LASxXFqelz0y&9!!-;1ap8s59HKQsu#mJv5XI z*W3@BVWg3%25U>TcPR@)X~#)g_5oGxa@Hr*Eh_Yc_gwcNCAch7@DHE5nvU<}YYE3;fdCEe?MT?d#sV0Y|}odm|UOP@20O zvCrJ2-P^mUqq|*=a;2$9;EzVt%GDGsOK5dD4XQyuELnro)baV*+P$6O#1KlFIi#^W z62M<+sWg1hdJQ^Uow%QyLLIDMhkTT<-bJ;bsI@V>ud6iq znI`$H29G0}s^>LwKKU@XFdl-p-nJof>tKtare}!KF=rV2K`}m}K2V*l(M!TyrnP1; zeD{i*i28yJao{KIHW#(0jY)Fcb6}YXnwH(IGNX>8#ZWQ%Q$elhcq$+DDfRSV`AAR} z*hIWE!`2eJPM01S*-NhvN#5nJEm);;5RqAc14&gOx^6Br+6S8yj2d0!TKR4oo38nW z-_-DY+(!OfW0T|PeSvsn z?dYI*V~@x3kkWTOi+Nbx*`l3Bz~p18cJ6%avnu`0H^~Gfi5VgoALp&eq=+f%`q)#FKgOBSZ^L_v7#{Kek!CI1Be27hmr&X!;S!Tt# z%mys@1nAM0aNLjUliutuM@WTys&JYI*(OA=l@Fi!h-l7%y|mV*Cdqw~RJXt`|9vny zGmbnNNT1qZ(caK{Iib(F zXcV&h)4u0h>?0-bvw;OK1}8j@a0ifvSdd=61a{OeeBgoa*94((r`6_>W77Cov*D^mb9--)c6t& zblYP`MAkZ12rEPS$c?nK(f8xe;E4K1|v!r3ln)sbWU*{%=?khhUYrew{tPsyvg7cv+Ko!S0$rtj9RzVG1)3n zK~uU_GFu^cZt-g$8)0>8fh(ahz_rZINrESj!{kTd6YsC4RVPu8R;aqKHD;@g!-tRm z)o3v;6* z&T-@!z7Y}bE%gyPr(J-EC#kCFdl&n?%59aXRKidoVMSOktZpzNwPk^Ym*96JcqvE$ zw`?2n!$Nc+d;Jcl4p}Xu;%G}bgy>wc{bfCjQTO*jeKA*7X;v!4VOn||;7NEIxgw6D z3`7RG8jUY-Dra&+^ZLW_<_rIDKelirl`*8X39mwcj1ha6KI`)0~O!L$zObI=N#`x%e3f zRC;HVzV0F8&gY5QtnUuBjrBBjQ1J15$y(v!{6PQ^pyCy-1|D^Wzybv~LJZgTp7sZW?r6@f z+oj$|b3WwC$QXf2hu*--=5s~wtLhaFvA3@}@~L8Jg~eh>&#qFRWk+C9-BM_&J0bxJ z94j8O5s5mowgZYBQHorDZO*mce^X#c24CooEp=LX9<52>O(o(tj)|O$7)gF-gspt3 zXRF{3_O4Ly_Z6!Z1jsN!kzfn5H;dNoI`MaEkyYfY16P9SR;6Ik@8!wu zX4UpE1Yodj|11s<3A`}9^wG4MN_#%KY<4iJ$%B>p#(P&3UDiXtl-JdGN495wz z@{jBzrm0m8dM1aQJzjZLGelY}Gg3@a-tCic_}#>UDTy094Pglp*2|aP7kr#symxQl zeKQ3#)?m3Z?86!8um@?kQRE8Y%z}@cU`%}-u&PvNM3Y%mIodPhRLUz zo=n3+wb_nYEK%UWQ_)9U6Vi?MyL3hL}66*78^d7+2>U?aXSn* zv66KkqKXvkQ|_8ki|J}EQv z=z`|$u+=ufyY_!+L0|+ah#Ge8eJq$sHP{!Xjn0$?+4lE=P%+m^U| z4}>(+=X;_DOHZlR3FeDwLy|80dP3ofJxjHZb}oSn7A&%cZe2f2)wL2f#Ldhja$_{h z3v~>@s%anMt%?Iyu=9+r`kmX)6Ho(KwjD!&8Ddw?Yu|6iKK)U_ERuDy3bh8poE#d` z7aO^wKy5-T%~=ZrK0F?S;9z;pA^{L$Td@2o z5D|I(a6wyEe%MfE)CL~60Q&7KxF-dxVdMctk7p95?`LwJy=$6Qlu=MB>c`vAm=bC2 zCziI=ukK!99Itb@ALd`oXIdW+q=I^@e#{PrCz#-2I&*R7yx^6z%{2e%-20VieC|FR6eNB>4uFm~ngTKJMc}jenZdXXeXCU8=L?{i8X} zvt!ebmFlFV@i3#p?R)_~=LEXbL0HF9j_2vi1t;{)ezGnDRZQnG%u<SY-!k zw0DH(`3@8#6tpbv301l~teabT@PcRi-m-rLVP!$r*r$lZ5HP?5lcM_3-82^bF=3)* zc9qGP&p>Dz=hk}-57j4^*KFQ%gx@DaUw}X?mMM#Knrye8bz(Ty@N0Q0R0F`wBt@=w zd9$r*I>Paq?13`kq1A6(*cUWeT-5Zqi8@#Z5mv0ef^c(tSR$gC){&ZEP)8bgKX1#L z70tnDR@(Z?regeN6KTgsP5Zk2*3llkzssv@Y_Y90T4qZau}fLzGef<-ot8*zDNCQY zpujQ}^R8>JGjNOkyK_aWF*)cVn6Jy8L4s^l8oU8YAoNMhI|;Y6k*0=onG=oy5C7>! z$I#lh$(q4q>Wx@uf*OWzi+AfX43q85K|GeF6!&sD)Vcm*2^iHIst8r%RZD$aN`tb4 z9|yl&_9+iFJ-hMDJ{WX5c@)DjVFx<9Q`h)>>R544Hn+uRcUC^1fi_NLLGquk1)6m{ z7o~`;?zXkp>(;KGda<*LoeIM3k+)q9vWzsd15H=!NE!YbL=}QrX+3+XPNYiLGIX&i z2*sN%?N$KYNL+SYLd|t{4XlUv`PfR>tTJ_UsrINX(zSrRq|NQ>XoeUA$9ti*Fj{wx z=(ZMFUwNx!0&k5`wOH~86pShN@sQF~HO=5DZ3iHJIhGgC^n*F;@tP0gGvYW9w zFT>B>K3!TcrH)hOPsreMdTY{K?(#zk>$j=sK6s}vW`^)n7VWCLWG9lv5Y2w5uu)av zXch@=3rn=0@yidV+tTg3Ppmeu9B5n>C}oso!YFVdr>E=pZ{)m-BJ#W3(laMDEpAB zdOpVgb5!gDDtwvk==haZn7nx9Dj7P`bON%{WH{o!^NTkyE-*ae`VYq`)cP3-kD*Pm zOY**zQup^nXh&KJ(btC{7q9$tit<$2Mo#lpn9d|spdbNnZZP~pSl)D*&TXjVzIHZt@iV%61STR@vCZqNQCQAH_5S@h^#q)0J*r(R zvh8_8a((QPx^S*V9_kmaH^-A{kvA_T6<-BQQo`fL-poAc4H2NSK!)H#sL)@k-$zE_ zoOGiX4)@nk*vc9PJe<&rcva#2)^ReZHJN{8ck&iyq-o;%uj5M}t2pdhs*);mTB{wG zwooQnDy+Y%cD;VUcj@X(Sm(;s+nr=ycKEsn&A5rMjnV)>hZ7ZJ9qm8-YROwl-l~8H zA3W{wHA`hbm*dG_czmPZzZE;wa^wGM?%d;<-v2nRN0F0DNN$Z>$|z!lX=Y_EDRETC zNx9AC#F5L6gSmFF+{zRxX=g4eM7jPj2f0sS%jH;^%3O!sl{zlx_g?jTJbu4Fe*d5S zyFIo&_Soa|{d_;~*X#Mr_Bh@|w0$*skl-ZFlC+a8%_0{rkqT!_g+j^7n^dk2!BUf? zKo&9+Mm|&*c_=^;(m_VPo4zaUb5$jp8Mx)XFOc?zvcg-c?;eqF3dx-kCD{qLvE)bo z`t=g(lL4=-Yx_!UZ0)K6k0lQSxB2|`XTgpEZzRQtrk!=E+jdsIG^Ql|XnzKGxyjX5 z`t%01IY5mvk&2~!RA#bJa~5)hF(2v$>GL~_tHMkX&P>#&0B5bjFimsnx`>kzjh%$^ ziz!=ndO$E*p69kbxC_14i|v93zU7 zpNpZ_!y>_N6R7yzcOMpXOsNX1Q1)bvn_Jj+ANA=wvbJ_|w|7*_;)TgLV^I|^o=f>V zufu8IymoN}GWy^M{wB28F37b^vLuj7W*6=L59;+lqp$ykOZ*dG?6|-;O&{e`SwpmP zT_8`Zr{KHE$5Q)X?zGJf%FTvW`Sj&m_bF*#tm?G+Qa@HvxY6AiE@-s?#7}X)irUi` zGLqiVFBA-v=$}?dhN2b*4l;eY{4OFCOS^4?O1vT3Tg$KfjkaIcpJSv!GVR)ru2Fvu z`8`iNxc3Sq@~c-8UoFjbXvoc`=i(Fi=CbEQV~}g>`tMJj0P45?WgXCx)&%SaXn6A? zgk}?_Xc0_)Ys)O#G>Y=Lj6R-r`mwYD^!bDpF(D;`r~;;!m)E`OAwDI#_{Z|R_;95& zOTQ_1OBomq2gbFhDi|CZ2ES2C9XI4X7>B+UyE6d$b%_U*2;=c9cpx~Z z?-12rCheShJy)M($C-|5j`vov(Gg?5g$kwi`_`ag?i>J+&%Wi?)rhO}5|pkvcqWbF zA}|WZLC=XW1=+phNE^k`V*o@j)NC!X9Z;@^IPhC+zj)O<0CcxP4by{A>M9B~JFG6* zhf(Xl>g`rQAx}RfJey^g)|Ay)%TO!%2xsO&!d5taWLg4Cw%*T175l%99|^wBKL`Aq z&-+*c>fJ6rnaB@@`He$_pQn9wO&PR~S=m;&Ob1(KetgjAUyxEBWJA`B(`DFX`VM!M zCf7#WI@MelAYmK)zszg%w!N+ia3w*gzGb92?#W%xzqd9g5o0&G@3}k=q~b``in>yQ z1hS&O-UM;%SB>)hCL~=d0MaMV>zOCj%DP7OQn5QkxWHZ?V#1y5R``dRz2XS88*#oV zf}V=oA_4STR*C=x%H74tSPv%E*uiQhq)WRd^MNra8fQP#H8cybIp2Y9~ zGsch3Ei>{CbqI>hg+i@7OW%~xvSZ)iqeOicr42JunA< z6(i)U+0%cV)uF^KLVrYW&5qM+O2vd$EPz?o^W8u(pgUwzJ?xIQVS0;Nxo}^KhAKBb2il})C_eawTGQnrQ7vW3268bb3_!ZV1dm+DZLmWd`oI1~KO}Hd?A`z^R(;ys| zbOC(+HOXRd1FtRW%NmqE+p2TkJ+Qmn65)sOA4YQ?Av;t3y6$MpSOM2IVG|KF|DBFg zZJBMJPz(zjQ}z?-01-BZOZ?y{0W>G1p`Yf5=`xKYu_A{u4u1KSX5?iJ(7xu2kFskv z(0?#44t&}wVr}1T;>K~z>u3j3xSG}z%sVUmK)#?DLfgI{8d#j2%#dLbJ+~%-`&G90 zdzCU^RPu!li=F0asz#Prh&3EdG@u+dWk4w;Dz_1}&+tl_9-oWDKG0yf>eO3#&r}`9 zFfFkBN<1Ic0AVMJacV$UIyu*}zT8Up<{d8n6-+&R;8v|{f4F|%=?{Go=9{A*V_*Xu zSSYEDel5zm?q^D7O;O66Z^OtC(pEY`_{Bum#z^|VwsFv({?rb3Dk-GHx~ji|2WCbN z#i>SEGd|lMS7ZIvmV!_NAKrsI)m+ze3E@2O|(@Tm;wXL?RcNIRz25l;c}chXbJ^!tG9 zxU_f+>A;qIHx?LV@8;JyzMugPi{gJKT;{R&*qIQRHFqn2nK%`+$U={a-jAf5Y$|%> z?2T{BDM%sMO2*zad~jvv`9=mPPKSnX@@r>}(>^&n5B&~j%AY$~VXE3w&--;(Q&w#2 zV2!S9Ne=sf+PG0Y8QGpEbSowE0kV^GyIKY7XCV)vM00KSJX|@nbtd#PQtBJcvRZ>J zODq6VWrPgJmiDFD_lJX@;zL);Q5=K>3J?qIeWF{!hl}FLGyP zI3g#a9$(BuJLAw38Rw)xSl$-PDGG2B8VUSE@z!y~=wYRg8G`9-?EVJgM#E_G;VTnH zsXG_ilZp2D(#!(<@eZFtUnlVf4S#&SR07Xzv8-p8A8|`d;&Fb%YTxN}v;$p@8IdGW zO7?JiDKK}6>KZ2+qt>0)N0!9Wb`w%G+%falwuc8Nrm|32R~q}oOScD%?lFn2wxzV+ zblI7A`B@+^XOO!)$3WHTNLepe$8MCMZYf276{eW0A@wW9xjh(sT_985MP^N0(KoYy zbj3@~!67|qMog@=ljof4-~I4V_0*~JVpy7})!`l3vyPv?ysx>vr{x`!ZY)7A9nU)H zQ0K8tRsAU^R!~H*Ur|JEP=>AD;8a^s$yDl-wQkR ncfI(!^d|o^@Doxairl}qw{Qi@@SVcj1>j+AVQc=>%q{lc5r-~6 diff --git a/doc/making.png b/doc/making.png deleted file mode 100644 index 4bae687ee71b09ca6db592b0433c921b25bb9275..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7058 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

m*BGe%(q+(AWhtL0X%Ut!nNZuL{r2BbRA{U% zWuMbybof4sdP#u!-_#>>&QV!1i|ID`JmsQqn8~3# zB|j1c9sgHfwz?)$dEsm=q7-(MdD2%7j7x^`ta)cctXY zg-V#eE5k}1G?j6-x>=yv3}pomzIgBR+thNkQ$G;bMEN0YJoF16e?Y zf+c9$E`h>A?145b3b^p?RzbhfAh!%kkE>{ld2InaR zF+_ksZBfa(+xg_^kD#;wZQEdDgx$ze>^2{sbYLVk`Ef==MHbjGxI!5W*vN=GK>_zZ zB3;9K;rErW9pUbjB2=Z;#DSIWa0FMt^p9BY=O4Cm_a!L%>d+hDWbr=_PxZ!b$7>m& zg0l8s?CqOTxxot6@OeAuP4nc$%b(X$?;DPOnHm~~_8!T`{<)QRLDoL4FIhv^0$J3! z^Aoj^dOu>k7DV5X9?vF*NQSJ9nT|ddIYgBtS*<_c$BK!s`IHgW5PU_L{B(|-SI7DU zOB;GIpDM=$uj9J4LurklGOVk=;ZY5VzW3hvgA{V}7r9J*RfBbK5Pq9Bo*13@%xlel zWj`tW6iJtRifG9roI+ID@gSfODZM-lN3SFwa zAnh6K$nnlf;QISj3nvKpjLZ6A5ej;T_W}QRvq9FeU!KOUMM5y&2uqjFX97{mu8qB7 zP4+U`JNcIHB5y{~5M`ta;y~YMceZAG6C5`t{y~G@JHY=!|L9e4fpNxwfbFgiXep26 zAb=5wo*a@YzjhcRet+UR?@J}YlpdfwPhh=@^s6H*9qxZZE9*ILM``e-_E0E#dh*|- z4myD{KiuO5VV>Vj1r@n7xW2(cYE7DNJ@!miks=6em0`I2ox{@Arqb$X2MmcVWpU%Q z13%m`NpagYs=pkThTqz`3-6VgH{u^3k&)__73VF`1B8;`Jbv8wX-4xLhR)<;pT{U? zimLA_@p(yshJJInU@c?+bxvkhcUhPHm5VJ9cag)rb*7`KDZxL;uLjGyA`q{9>jgq` zC$-PxVzMBYWUBO*^rKCGJ2Gy6z4(dZ3HC<}tx)l|BR^4Di6~12fb3QzQB4J0?J;}| z(2R4$FoZlO)_49#NuL0~-&hVuW6tOzlIn@6x+&YI zzCLMsqZX@YyjhkA+5Vtq3@4T z_ry6-j_o{jR0&3wD7nwD{(%y%KDlBkrS!Oo!^TZ;bv2T^>yY=gzGH5_Z#=AF)o8ZH zpn;kI^R*S8msPtoo3kxxd~ofLA$2<1@O z@=R315hqPKT*ZUAz;|%3X0J!_3-1IA&cB19*#>4T_g_?V0GVwJY47-*$$tK7))5$l zhH`$>n1F#2`Qpk-piekj;Ywk+nErx?O1Kn|m4hUQ5Xk3<@N7B5q_{v)d$D&eBhg0! z#iHTwUq0$R3xboCqVsNB358YD{doYO_eU17VyVSqjOpYRL^%=w0(aCY<6&Y|fK$I-QIv%xMgYJeq>5v9atQ|s_B1#SZUZ%j{ z3hr20-iq^1ArIgwa9#eAc@Qw|J5R8|;=8B1-ReQBD1-O}@U20ZUzHw>|K+Xru*`-; zKF@n$D}CRp?2WVB!nERLiS%7MZl!>RUv&xiR?wL3c}4GS3Cg9C8Q2$MhvBRhZ%TovCGVgF8;=_)bRFDnEnhNOzCLP;KQ#zKaMG7Q#yif*S`kuKZsPyknTvdFZ-W)q zllPiTZej!W`BGQI-?0`p*(i1CP()cfKotuSq+eBehv{-BABY-~G};Xk=%G1Fo>#yV z*{rBr+SX7(V9mo!w|Y^vDJpcrn;UW<5ItPO9G6+^bMCKH*z2Ts4J-)j0-_eRlyM8( zx*Rd@Zn(QPYGfF<@tvE%e>*gwAg;py#Fj4qWQ4L+?-jkzL%n<1p{71VwYevNrw$|G z@33DxB6%*|)W8@Qe(Z_|{QZb~s0Oj-A;06sMtQIZQ&UEQvqcx586EbNeryT02~Vr| z0!g`XrE!xX$4{FE5~ysq`%|vWtRm1)?I^s!*$*Y~`3YXZSLJz#x{1NUonrvkxE+}H z$~=?^0rbg3zoG57?%MqLkiOSPe8;KJpuT+(#eQG=O{Q2l4`t9a>BK?`HWKmF zoe-(nwBGu4$CG8+EzavBf*9Cl zxT`8Eefgmp=@DFv$kX%qrg&7W7Nv-zYB|1hn4`n_ZIjDWNr~jSi&pOrbcm3zZ$~N; zQD=x^2j`s2#>OZOI~3{rC$bK$!C5YnsI#R;6>i_y&yretQ=K_OI}9g>lH@QkyE-f9 z6^j+O3&J9wO}ufIA6pnW_4VMCmT5cA__N=z2Z&_6{0?$$cD+#%)+zYSw6*v2Tz98* ziTK`8k!N?*i)et6SrhrKK*YgHh4V^WfwT~GwCID;@=vranntOw9CIJYoh2wgvYt2{ zu%Cq)V|ne31V41eN&R zB)Hcn*q9ELc7N)QBkM5Vkc+)noR?uGtLuYD*n;o<6DzX6Dto@79b=$NIq=so<2yI% z%N>1@MwCQP=d(8$@_%rzOEylw6!*59u?TlKT3C|clTnH?>pB)_G6#zJuR$<;gxdQM zQ!sAuVCu(S|g#RoE{>Q1&|8nf`|NF6K eH@@VM+2rib(;f%C0>&W;aLw4l==~Mf2mb-->bqC~ diff --git a/doc/model.png b/doc/model.png deleted file mode 100644 index 6a6c5a13aa71fb7272ceb1e136a766c4bd2b5ce8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7673 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 /opt/platforms && \ - echo "Extracting ds.${PLATFORM}-${TOOLKIT_VER}.dev.txz" && \ - mkdir "/opt/${PLATFORM}" && \ - tar -xaf "/cache/ds.${PLATFORM}-${TOOLKIT_VER}.dev.txz" -C "/opt/${PLATFORM}" --strip-components=9 \ - "usr/local/x86_64-pc-linux-gnu/x86_64-pc-linux-gnu/sys-root/usr/lib/modules/DSM-${TOOLKIT_VER}" && \ - echo "Extracting ${PLATFORM}-${GCCLIB_VER}_x86_64-GPL.txz" && \ - tar -xaf "/cache/${PLATFORM}-${GCCLIB_VER}_x86_64-GPL.txz" -C "/opt/${PLATFORM}" --strip-components=1; \ - KVER_MAJOR="`echo ${KVER} | rev | cut -d. -f2- | rev`"; \ - if [ ! -d "/opt/linux-${KVER_MAJOR}.x" -a -f "/cache/linux-${KVER_MAJOR}.x.txz" ]; then \ - echo "Extracting linux-${KVER_MAJOR}.x.txz" && \ - tar -xaf "/cache/linux-${KVER_MAJOR}.x.txz" -C "/opt"; \ - rm -rf /opt/${PLATFORM}/source && \ - ln -s /opt/linux-${KVER_MAJOR}.x /opt/${PLATFORM}/source; \ - fi; \ - done; \ - done - -# Final image -FROM debian:9-slim -ENV SHELL=/bin/bash \ - ARCH=x86_64 - -RUN apt update --yes && \ - apt install --yes --no-install-recommends --no-install-suggests --allow-unauthenticated \ - ca-certificates nano curl bc kmod git gettext texinfo autopoint gawk sudo \ - build-essential make ncurses-dev libssl-dev autogen automake pkg-config libtool xsltproc gperf && \ - apt-get clean && \ - rm -rf /var/lib/apt/lists/* && \ - useradd --create-home --shell /bin/bash --uid 1000 --user-group arpl && \ - echo "arpl ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/arpl && \ - mkdir /output && chown 1000:1000 /output - -COPY --from=stage --chown=1000:1000 /opt /opt -COPY files/ / - -USER arpl -WORKDIR /input -VOLUME /input /output - -ENTRYPOINT ["/opt/do.sh"] diff --git a/docker/syno-compiler/build.sh b/docker/syno-compiler/build.sh deleted file mode 100755 index 7a5e73fa..00000000 --- a/docker/syno-compiler/build.sh +++ /dev/null @@ -1,118 +0,0 @@ -#!/usr/bin/env bash - -CACHE_DIR="cache" -#SERVER="https://archive.synology.com" -SERVER="https://global.download.synology.com" -#https://global.download.synology.com/download/ToolChain/Synology%20NAS%20GPL%20Source/ - -declare -A URIS -declare -A PLATFORMS - -URIS["apollolake"]="Intel%20x86%20Linux%20|%20%28Apollolake%29" -URIS["broadwell"]="Intel%20x86%20Linux%20|%20%28Broadwell%29" -URIS["broadwellnk"]="Intel%20x86%20Linux%20|%20%28Broadwellnk%29" -URIS["bromolow"]="Intel%20x86%20linux%20|%20%28Bromolow%29" -URIS["denverton"]="Intel%20x86%20Linux%20|%20%28Denverton%29" -URIS["geminilake"]="Intel%20x86%20Linux%20|%20%28GeminiLake%29" -URIS["v1000"]="Intel%20x86%20Linux%20|%20%28V1000%29" -URIS["r1000"]="AMD%20x86%20Linux%20|%20%28r1000%29" -URIS["epyc7002"]="AMD%20x86%20Linux%20Linux%20|%20%28epyc7002%29" -PLATFORMS["7.1"]="apollolake:4.4.180 broadwell:4.4.180 broadwellnk:4.4.180 bromolow:3.10.108 denverton:4.4.180 geminilake:4.4.180 v1000:4.4.180 r1000:4.4.180 epyc7002:5.10.55" -PLATFORMS["7.2"]="apollolake:4.4.302 broadwell:4.4.302 broadwellnk:4.4.302 bromolow:3.10.108 denverton:4.4.302 geminilake:4.4.302 v1000:4.4.302 r1000:4.4.302 epyc7002:5.10.55" - -mkdir -p ${CACHE_DIR} - -############################################################################### -function trap_cancel() { - echo "Press Control+C once more terminate the process (or wait 2s for it to restart)" - sleep 2 || exit 1 -} -trap trap_cancel SIGINT SIGTERM -cd `dirname $0` - -############################################################################### -function prepare() { - # Download toolkits - for P in ${PLATFORMS[${TOOLKIT_VER}]}; do - PLATFORM="`echo ${P} | cut -d':' -f1`" - KVER="`echo ${P} | cut -d':' -f2`" - # Dev - echo -n "Checking ${CACHE_DIR}/ds.${PLATFORM}-${TOOLKIT_VER}.dev.txz... " - if [ ! -f "${CACHE_DIR}/ds.${PLATFORM}-${TOOLKIT_VER}.dev.txz" ]; then - URL="${SERVER}/download/ToolChain/toolkit/${TOOLKIT_VER}/${PLATFORM}/ds.${PLATFORM}-${TOOLKIT_VER}.dev.txz" - echo -e "No\nDownloading ${URL}" - STATUS=`curl -w "%{http_code}" -L "${URL}" -o "${CACHE_DIR}/ds.${PLATFORM}-${TOOLKIT_VER}.dev.txz"` - if [ ${STATUS} -ne 200 ]; then - rm -f "${CACHE_DIR}/ds.${PLATFORM}-${TOOLKIT_VER}.dev.txz" - exit 1 - fi - else - echo "OK" - fi - # Toolchain - URI="`echo ${URIS[${PLATFORM}]} | sed "s/|/${KVER}/"`" - URL="${SERVER}/download/ToolChain/toolchain/${TOOLCHAIN_VER}/${URI}/${PLATFORM}-${GCCLIB_VER}_x86_64-GPL.txz" - FILENAME="${PLATFORM}-${GCCLIB_VER}_x86_64-GPL.txz" - echo -n "Checking ${CACHE_DIR}/${FILENAME}... " - if [ ! -f "${CACHE_DIR}/${FILENAME}" ]; then - echo -e "No\nDownloading ${URL}" - STATUS=`curl -w "%{http_code}" -L "${URL}" -o "${CACHE_DIR}/${FILENAME}"` - if [ ${STATUS} -ne 200 ]; then - rm -f "${CACHE_DIR}/${FILENAME}" - exit 1 - fi - else - echo "OK" - fi - done - - # for KERNEL in 3.10.x 4.4.x 5.10.x; do - # URL=${URLS["${KERNEL}"]} - # [ -z "${URL}" ] && continue - # echo -n "Checking ${CACHE_DIR}/linux-${KERNEL}.txz... " - # if [ ! -f "${CACHE_DIR}/linux-${KERNEL}.txz" ]; then - # echo -e "No\nDownloading ${URL}" - # STATUS=`curl -w "%{http_code}" -L "${URL}" -o "${CACHE_DIR}/linux-${KERNEL}.txz"` - # if [ ${STATUS} -ne 200 ]; then - # rm -f "${CACHE_DIR}/linux-${KERNEL}.txz" - # exit 1 - # fi - # else - # echo "OK" - # fi - # done - - # Generate Dockerfile - echo "Generating Dockerfile" - cp Dockerfile.template Dockerfile - sed -i "s|@@@PLATFORMS@@@|${PLATFORMS[${TOOLKIT_VER}]}|g" Dockerfile - sed -i "s|@@@TOOLKIT_VER@@@|${TOOLKIT_VER}|g" Dockerfile - sed -i "s|@@@GCCLIB_VER@@@|${GCCLIB_VER}|g" Dockerfile -} - -# 7.0 -#TOOLKIT_VER="7.0" -#TOOLCHAIN_VER="7.0-41890" -#GCCLIB_VER="gcc750_glibc226" -#prepare -#echo "Building ${TOOLKIT_VER}" -#docker image rm fbelavenuto/syno-compiler:${TOOLKIT_VER} >/dev/null 2>&1 -#docker buildx build . --load --tag fbelavenuto/syno-compiler:${TOOLKIT_VER} - -# 7.1 -# TOOLKIT_VER="7.1" -# TOOLCHAIN_VER="7.1-42661" -# GCCLIB_VER="gcc850_glibc226" -# prepare -# echo "Building ${TOOLKIT_VER}" -# docker image rm fbelavenuto/syno-compiler:${TOOLKIT_VER} >/dev/null 2>&1 -# docker buildx build . --load --tag fbelavenuto/syno-compiler:${TOOLKIT_VER} - -# 7.2 -TOOLKIT_VER="7.2" -TOOLCHAIN_VER="7.2-63134" -GCCLIB_VER="gcc1220_glibc236" -prepare -echo "Building ${TOOLKIT_VER}" -docker image rm fbelavenuto/syno-compiler:${TOOLKIT_VER} >/dev/null 2>&1 -docker buildx build . --load --tag fbelavenuto/syno-compiler:${TOOLKIT_VER} --tag fbelavenuto/syno-compiler:latest diff --git a/docker/syno-compiler/files/etc/profile.d/login.sh b/docker/syno-compiler/files/etc/profile.d/login.sh deleted file mode 100644 index 76437f46..00000000 --- a/docker/syno-compiler/files/etc/profile.d/login.sh +++ /dev/null @@ -1,9 +0,0 @@ -[[ "$-" != *i* ]] && return -export LS_OPTIONS='--color=auto' -export SHELL='linux' -eval "`dircolors`" -alias ls='ls -F -h --color=always -v --author --time-style=long-iso' -alias ll='ls -l' -alias l='ls -l -a' -alias h='history 25' -alias j='jobs -l' diff --git a/docker/syno-compiler/files/opt/do.sh b/docker/syno-compiler/files/opt/do.sh deleted file mode 100755 index 4a0f36e9..00000000 --- a/docker/syno-compiler/files/opt/do.sh +++ /dev/null @@ -1,128 +0,0 @@ -#!/usr/bin/env bash - -set -eo pipefail - -############################################################################### -function export-vars() { - # Validate - if [ -z "${1}" ]; then - echo "Use: export-vars " - exit 1 - fi - export PLATFORM="${1}" - export KSRC="/opt/${1}/build" - export CROSS_COMPILE="/opt/${1}/bin/x86_64-pc-linux-gnu-" - export CFLAGS="-I/opt/${1}/include" - export LDFLAGS="-I/opt/${1}/lib" - export LD_LIBRARY_PATH="/opt/${1}/lib" - export ARCH=x86_64 - export CC="x86_64-pc-linux-gnu-gcc" - export LD="x86_64-pc-linux-gnu-ld" - echo "export PATH=\"/opt/${1}/bin:${PATH}\"" | \ - sudo tee /etc/profile.d/path.sh >/dev/null - sudo chmod +x /etc/profile.d/path.sh -} - -############################################################################### -function shell() { - cp -fv /opt/${2}/build/.config /opt/${2}/source/ - cp -fv /opt/${2}/build/System.map /opt/${2}/source/ - cp -fv /opt/${2}/build/Module.symvers /opt/${2}/source/ - export-vars $2 - shift 2 - bash -l $@ -} - -############################################################################### -function compile-module { - # Validate - if [ -z "${1}" ]; then - echo "Use: compile-module " - exit 1 - fi - VALID=0 - while read PLATFORM KVER; do - if [ "${PLATFORM}" = "${1}" ]; then - VALID=1 - break - fi - done " - exit 1 - fi - cp -R /input /tmp - export-vars ${PLATFORM} - export LINUX_SRC="/opt/${PLATFORM}/build" - make -C "/tmp/input" dev-v7 - strip -g "/tmp/input/redpill.ko" - mv "/tmp/input/redpill.ko" "/output/redpill-dev.ko" - make -C "/tmp/input" clean - make -C "/tmp/input" prod-v7 - strip -g "/tmp/input/redpill.ko" - mv "/tmp/input/redpill.ko" "/output/redpill-prod.ko" -} - -############################################################################### -# function compile-drivers { -# while read platform kver; do -# SRC_PATH="/opt/${platform}" -# echo "Compiling for ${platform}-${kver}" -# cd /opt/linux-${kver}/drivers -# while read dir; do -# if [ -f "${dir}/Makefile" ]; then -# echo "Driver `basename ${dir}`" -# grep "CONFIG_.*/.*" "${dir}/Makefile" | sed 's/.*\(CONFIG_[^)]*\).*/\1=n/g' > /tmp/env -# grep "CONFIG_.*\.o.*" "${dir}/Makefile" | sed 's/.*\(CONFIG_[^)]*\).*/\1=m/g' >> /tmp/env -# make -C "${SRC_PATH}" M=$(readlink -f "${dir}") clean -# cat /tmp/env | xargs -d '\n' make -C "${SRC_PATH}" M=$(readlink -f "${dir}") modules $@ -# fi -# done < <(find -type d) -# DST_PATH="/output/compiled-mods/${platform}-${kver}" -# mkdir -p "${DST_PATH}" -# while read f; do -# strip -g "${f}" -# mv "${f}" "${DST_PATH}" -# done < <(find -name \*.ko) -# done ()" - echo "Commands: bash | shell | compile-module | compile-lkm " - exit 1 -fi -case $1 in - bash) shift && bash -l $@ ;; - shell) shell $@ ;; - compile-module) compile-module $2 ;; - compile-lkm) compile-lkm $2 ;; - # compile-drivers) compile-drivers ;; - *) echo "Command not recognized: $1" ;; -esac diff --git a/files/board/arpl/make-img.sh b/files/board/arpl/make-img.sh index 58fcbc14..c832e4ab 100755 --- a/files/board/arpl/make-img.sh +++ b/files/board/arpl/make-img.sh @@ -25,19 +25,19 @@ echo -e "n\np\n\n\n+50M\na\nt\n\n0b\nn\np\n\n\n+50M\nn\np\n\n\n\nw" | fdisk "${I sudo umount "${BINARIES_DIR}/p1" 2>/dev/null || true sudo umount "${BINARIES_DIR}/p3" 2>/dev/null || true # Force unsetup of loop device -sudo losetup -d "/dev/loop8" 2>/dev/null || true -# Setup the loop8 loop device -sudo losetup -P "/dev/loop8" "${IMAGE_FILE}" +LOOPX=`sudo losetup -f` +# Setup the ${LOOPX} loop device +sudo losetup -P "${LOOPX}" "${IMAGE_FILE}" # Format partitions -sudo mkdosfs -F32 -n ARPL1 "/dev/loop8p1" >/dev/null 2>&1 -sudo mkfs.ext2 -F -F -L ARPL2 "/dev/loop8p2" >/dev/null 2>&1 -sudo mkfs.ext4 -F -F -L ARPL3 "/dev/loop8p3" >/dev/null 2>&1 +sudo mkdosfs -F32 -n ARPL1 "${LOOPX}p1" >/dev/null 2>&1 +sudo mkfs.ext2 -F -F -L ARPL2 "${LOOPX}p2" >/dev/null 2>&1 +sudo mkfs.ext4 -F -F -L ARPL3 "${LOOPX}p3" >/dev/null 2>&1 echo "Mounting image file" mkdir -p "${BINARIES_DIR}/p1" mkdir -p "${BINARIES_DIR}/p3" -sudo mount /dev/loop8p1 "${BINARIES_DIR}/p1" -sudo mount /dev/loop8p3 "${BINARIES_DIR}/p3" +sudo mount ${LOOPX}p1 "${BINARIES_DIR}/p1" +sudo mount ${LOOPX}p3 "${BINARIES_DIR}/p3" echo "Copying files" sudo cp "${BINARIES_DIR}/bzImage" "${BINARIES_DIR}/p3/bzImage-arpl" @@ -52,4 +52,4 @@ sudo umount "${BINARIES_DIR}/p3" rmdir "${BINARIES_DIR}/p1" rmdir "${BINARIES_DIR}/p3" -sudo losetup --detach /dev/loop8 +sudo losetup --detach ${LOOPX} diff --git a/img-gen.sh b/img-gen.sh index 912207a6..ae289272 100755 --- a/img-gen.sh +++ b/img-gen.sh @@ -6,38 +6,67 @@ if [ ! -d .buildroot ]; then echo "Downloading buildroot" git clone --single-branch -b 2022.02 https://github.com/buildroot/buildroot.git .buildroot fi -# Remove old files -rm -rf ".buildroot/output/target/opt/arpl" -rm -rf ".buildroot/board/arpl/overlayfs" -rm -rf ".buildroot/board/arpl/p1" -rm -rf ".buildroot/board/arpl/p3" + +echo "Convert po2mo" +if [ -d files/board/arpl/overlayfs/opt/arpl/lang ]; then + for P in "`ls files/board/arpl/overlayfs/opt/arpl/lang/*.po`" + do + # Use msgfmt command to compile the .po file into a binary .mo file + msgfmt ${P} -o ${P/.po/.mo} + done +fi + +# Get extractor +echo "Getting syno extractor" +TOOL_PATH="files/board/arpl/p3/extractor" +CACHE_DIR="/tmp/pat" +rm -rf "${TOOL_PATH}" +mkdir -p "${TOOL_PATH}" +rm -rf "${CACHE_DIR}" +mkdir -p "${CACHE_DIR}" +OLDPAT_URL="https://global.download.synology.com/download/DSM/release/7.0.1/42218/DSM_DS3622xs%2B_42218.pat" +OLDPAT_FILE="DSM_DS3622xs+_42218.pat" +STATUS=`curl -# -w "%{http_code}" -L "${OLDPAT_URL}" -o "${CACHE_DIR}/${OLDPAT_FILE}"` +if [ $? -ne 0 -o ${STATUS} -ne 200 ]; then + echo "[E] DSM_DS3622xs%2B_42218.pat download error!" + rm -rf ${CACHE_DIR} + exit 1 +fi + +mkdir -p "${CACHE_DIR}/ramdisk" +tar -C "${CACHE_DIR}/ramdisk/" -xf "${CACHE_DIR}/${OLDPAT_FILE}" rd.gz 2>&1 +if [ $? -ne 0 ]; then + echo "[E] extractor rd.gz error!" + rm -rf ${CACHE_DIR} + exit 1 +fi +(cd "${CACHE_DIR}/ramdisk"; xz -dc < rd.gz | cpio -idm) >/dev/null 2>&1 || true + +# Copy only necessary files +for f in libcurl.so.4 libmbedcrypto.so.5 libmbedtls.so.13 libmbedx509.so.1 libmsgpackc.so.2 libsodium.so libsynocodesign-ng-virtual-junior-wins.so.7; do + cp "${CACHE_DIR}/ramdisk/usr/lib/${f}" "${TOOL_PATH}" +done +cp "${CACHE_DIR}/ramdisk/usr/syno/bin/scemd" "${TOOL_PATH}/syno_extract_system_patch" +rm -rf ${CACHE_DIR} # Get latest LKMs echo "Getting latest LKMs" -if [ `ls ../redpill-lkm/output | wc -l` -eq 0 ]; then - echo " Downloading from github" - TAG=`curl -s https://api.github.com/repos/fbelavenuto/redpill-lkm/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3)}'` - curl -L "https://github.com/fbelavenuto/redpill-lkm/releases/download/${TAG}/rp-lkms.zip" -o /tmp/rp-lkms.zip - rm -rf files/board/arpl/p3/lkms/* - unzip /tmp/rp-lkms.zip -d files/board/arpl/p3/lkms -else - echo " Copying from ../redpill-lkm/output" - rm -rf files/board/arpl/p3/lkms/* - cp -f ../redpill-lkm/output/* files/board/arpl/p3/lkms -fi +echo " Downloading LKMs from github" +TAG=`curl -s https://api.github.com/repos/wjz304/redpill-lkm/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3)}'` +curl -L "https://github.com/wjz304/redpill-lkm/releases/download/${TAG}/rp-lkms.zip" -o /tmp/rp-lkms.zip +rm -rf files/board/arpl/p3/lkms/* +unzip /tmp/rp-lkms.zip -d files/board/arpl/p3/lkms + # Get latest addons and install its echo "Getting latest Addons" rm -Rf /tmp/addons mkdir -p /tmp/addons -if [ -d ../arpl-addons ]; then - cp ../arpl-addons/*.addon /tmp/addons/ -else - TAG=`curl -s https://api.github.com/repos/fbelavenuto/arpl-addons/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3)}'` - curl -L "https://github.com/fbelavenuto/arpl-addons/releases/download/${TAG}/addons.zip" -o /tmp/addons.zip - rm -rf /tmp/addons - unzip /tmp/addons.zip -d /tmp/addons -fi +echo " Downloading Addons from github" +TAG=`curl -s https://api.github.com/repos/wjz304/arpl-addons/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3)}'` +curl -L "https://github.com/wjz304/arpl-addons/releases/download/${TAG}/addons.zip" -o /tmp/addons.zip +rm -rf /tmp/addons +unzip /tmp/addons.zip -d /tmp/addons DEST_PATH="files/board/arpl/p3/addons" echo "Installing addons to ${DEST_PATH}" for PKG in `ls /tmp/addons/*.addon`; do @@ -49,23 +78,20 @@ done # Get latest modules echo "Getting latest modules" +echo " Downloading Modules from github" MODULES_DIR="${PWD}/files/board/arpl/p3/modules" -if [ -d ../arpl-modules ]; then - cd ../arpl-modules - for D in `ls -d *-*`; do - echo "${D}" - (cd ${D} && tar caf "${MODULES_DIR}/${D}.tgz" *.ko) - done - (cd firmware && tar caf "${MODULES_DIR}/firmware.tgz" *) - cd - -else - TAG=`curl -s https://api.github.com/repos/fbelavenuto/arpl-modules/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3)}'` - while read PLATFORM KVER; do - FILE="${PLATFORM}-${KVER}" - curl -L "https://github.com/fbelavenuto/arpl-modules/releases/download/${TAG}/${FILE}.tgz" -o "${MODULES_DIR}/${FILE}.tgz" - done < PLATFORMS - curl -L "https://github.com/fbelavenuto/arpl-modules/releases/download/${TAG}/firmware.tgz" -o "${MODULES_DIR}/firmware.tgz" -fi + +TAG=`curl -s https://api.github.com/repos/wjz304/arpl-modules/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3)}'` +curl -L "https://github.com/wjz304/arpl-modules/releases/download/${TAG}/modules.zip" -o "/tmp/modules.zip" +rm -rf "${MODULES_DIR}/"* +unzip /tmp/modules.zip -d "${MODULES_DIR}" + + +# Remove old files +rm -rf ".buildroot/output/target/opt/arpl" +rm -rf ".buildroot/board/arpl/overlayfs" +rm -rf ".buildroot/board/arpl/p1" +rm -rf ".buildroot/board/arpl/p3" # Copy files echo "Copying files" @@ -85,9 +111,9 @@ qemu-img convert -O vmdk arpl.img arpl-dyn.vmdk qemu-img convert -O vmdk -o adapter_type=lsilogic arpl.img -o subformat=monolithicFlat arpl.vmdk [ -x test.sh ] && ./test.sh rm -f *.zip -zip -9 "arpl-${VERSION}.img.zip" arpl.img -zip -9 "arpl-${VERSION}.vmdk-dyn.zip" arpl-dyn.vmdk -zip -9 "arpl-${VERSION}.vmdk-flat.zip" arpl.vmdk arpl-flat.vmdk +zip -9 "arpl-i18n-${VERSION}.img.zip" arpl.img +zip -9 "arpl-i18n-${VERSION}.vmdk-dyn.zip" arpl-dyn.vmdk +zip -9 "arpl-i18n-${VERSION}.vmdk-flat.zip" arpl.vmdk arpl-flat.vmdk sha256sum update-list.yml > sha256sum zip -9j update.zip update-list.yml while read F; do diff --git a/make_rsss.sh b/make_rsss.sh deleted file mode 100755 index 2a5821d9..00000000 --- a/make_rsss.sh +++ /dev/null @@ -1,91 +0,0 @@ -#!/usr/bin/env bash - -set -e - -MODEL_CONFIG_PATH="./files/board/arpl/overlayfs/opt/arpl/model-configs" - -RELEASE="7.0.1" -BUILDNUMBER="42218" -EXTRA="" - -function readConfigKey() { - RESULT=`yq eval '.'${1}' | explode(.)' "${2}"` - [ "${RESULT}" == "null" ] && echo "" || echo ${RESULT} -} -function readModelKey() { - readConfigKey "${2}" "${MODEL_CONFIG_PATH}/${1}.yml" -} - -# JSON -cat < - DSM ${RELEASE}-${BUILDNUMBER} - ${RELEASE:0:1} - ${RELEASE:2:1} - ${RELEASE:4:1} - ${BUILDNUMBER} - 2022/08/01 - 7 - 0 - 0 - 41890 - 2021/06/25 -EOF - -while read M; do - M="`basename ${M}`" - M="${M::-4}" - UNIQUE=`readModelKey "${M}" "unique"` - URL=`readModelKey "${M}" "builds.${BUILDNUMBER}.pat.url"` - HASH=`readModelKey "${M}" "builds.${BUILDNUMBER}.pat.md5-hash"` - cat < - ${UNIQUE} - ${URL} - ${HASH} - -EOF -done < <(find "${MODEL_CONFIG_PATH}" -maxdepth 1 -name \*.yml | sort) - -cat < -EOF diff --git a/new_bn.sh b/new_bn.sh deleted file mode 100755 index 85ea60b7..00000000 --- a/new_bn.sh +++ /dev/null @@ -1,77 +0,0 @@ -#!/usr/bin/env bash - -# Is necessary test the patches - -set -e - -declare -A KVERS -KVERS["DS918+"]="4.4.180" -KVERS["DS920+"]="4.4.180" -KVERS["DS923+"]="4.4.180" -KVERS["DS1520+"]="4.4.180" -KVERS["DS1621+"]="4.4.180" -KVERS["DS2422+"]="4.4.180" -KVERS["DS3615xs"]="3.10.108" -KVERS["DS3617xs"]="4.4.180" -KVERS["DS3622xs+"]="4.4.180" -KVERS["DVA1622"]="4.4.180" -KVERS["DVA3219"]="4.4.180" -KVERS["DVA3221"]="4.4.180" -KVERS["FS2500"]="4.4.180" -KVERS["RS4021xs+"]="4.4.180" -RELEASE="7.1.1" -BUILDNUMBER="42962" -EXTRA="" - -for MODEL in DS918+ DS920+ DS923+ DS1520+ DS1621+ DS2422+ DS3615xs DS3617xs DS3622xs+ DVA1622 DVA3221 DVA3219 FS2500 RS4021xs+; do - MODEL_CODED=`echo ${MODEL} | sed 's/+/%2B/g'` - URL="https://global.download.synology.com/download/DSM/release/${RELEASE}/${BUILDNUMBER}${EXTRA}/DSM_${MODEL_CODED}_${BUILDNUMBER}.pat" - #URL="https://archive.synology.com/download/Os/DSM/${RELEASE}-${BUILDNUMBER}/DSM_${MODEL_CODED}_${BUILDNUMBER}.pat" - FILENAME="${MODEL}-${BUILDNUMBER}.pat" - FILEPATH="/tmp/${FILENAME}" - echo -n "Checking ${MODEL}... " - if [ -f ${FILEPATH} ]; then - echo "cached" - else - echo "no cached, downloading..." - fi - STATUS=`curl --progress-bar -o ${FILEPATH} -w "%{http_code}" -L "${URL}"` - if [ ${STATUS} -ne 200 ]; then - echo "error: HTTP status = ${STATUS}" - rm -f ${FILEPATH} - continue - fi - echo "Calculating md5:" - PAT_MD5=`md5sum ${FILEPATH} | awk '{print$1}'` - echo "Calculating sha256:" - sudo rm -rf /tmp/extracted - docker run --rm -it -v /tmp:/data syno-extractor /data/${FILENAME} /data/extracted - PAT_CS=`sha256sum ${FILEPATH} | awk '{print$1}'` - ZIMAGE_CS=`sha256sum /tmp/extracted/zImage | awk '{print$1}'` - RD_CS=`sha256sum /tmp/extracted/rd.gz | awk '{print$1}'` - sudo rm -rf /tmp/extracted - cat <