From 6b0aadd00cd3839cf69f703b7dc01bceab075e73 Mon Sep 17 00:00:00 2001 From: nayib Date: Thu, 26 May 2022 18:46:24 -0600 Subject: [PATCH] Ref #1 Ejemplo shiny local --- .gitignore | 7 +++++ _site.yml | 4 +++ index.Rmd | 73 ++++++++++++++++++++++++++++++++++++++++++++++ puerto.png | Bin 0 -> 12087 bytes shell.png | Bin 0 -> 8336 bytes shiny_local.Rproj | 16 ++++++++++ 6 files changed, 100 insertions(+) create mode 100644 _site.yml create mode 100644 index.Rmd create mode 100644 puerto.png create mode 100644 shell.png create mode 100644 shiny_local.Rproj diff --git a/.gitignore b/.gitignore index fae8299..0fca07e 100644 --- a/.gitignore +++ b/.gitignore @@ -37,3 +37,10 @@ vignettes/*.pdf # R Environment Variables .Renviron + +# Ignore site +_site/ + +#Ignoring files +index.tex +index.log diff --git a/_site.yml b/_site.yml new file mode 100644 index 0000000..c9ddb9f --- /dev/null +++ b/_site.yml @@ -0,0 +1,4 @@ +name: "Data Latam" +title: "Webinario Data Latam" + + diff --git a/index.Rmd b/index.Rmd new file mode 100644 index 0000000..efbfcda --- /dev/null +++ b/index.Rmd @@ -0,0 +1,73 @@ +--- +title: "Desplegando Shiny Apps de manera local en Windows" +--- + +## Herramientas a utilizar: + + +[DesktopDeployR](https://github.com/wleepang/DesktopDeployR) +[R Portable](https://sourceforge.net/projects/rportable/) + +## Pasos a seguir: + +### Paso 1: +Clonar repositorio de DesktopDeployR + +``` +git clone https://github.com/wleepang/DesktopDeployR.git MyApplication +``` + +### Paso 2: +Instalar R portable, el cual se debe descargar desde: + +``` +https://sourceforge.net/projects/rportable/ +``` + +Esto se debe instalar en la carpeta "//dist" de nuestra carpeta de DesktopDeployR. Por ejemplo, usando el git clone anterior, "/MyApplication/dist". + +### Paso 3: +Pegar ui.R, server.R y demás archivos asociados al proyecto en la carpeta app/shiny dentro de MyApplication. + +### Paso 4: +Comprobar que los paquetes necesarios se encuentren en app/packages.txt, uno por renglón. + +### Paso 5: +Cambiar el atributo "home" de "r_exec" en el archivo /app/config.cfg, y sustituirlo por: + +``` +"dist\R-Portable\App\R-Portable\bin\" +``` +La cual sería la ruta del R portable previamente instalado. + +### Paso 6: +Comprobar que el nombre del archivo .bat sea el mismo que la carpeta, en este caso MyApplication. De no ser así, cambiar el nombre, en este caso "MyApplication". + +### Paso 7: +Ejecutar el .bat e instalar con un navegador basado en Chromium. (Edge, Chrome, Brave, etc) + +

+ +## Problemas conocidos y su solución: + +Al desplegarse la aplicación, su puerto es aleatorio, lo que provoca que el link entre Chromium y la aplicación en shiny sea temporal tras el primer arranque, esto se soluciona asignando un puerto en el archivo app/app.r, con el código: +options(shiny.port = 8231) + +![](C:\Users\Ixpantia\Desktop\git_ixpantia\data_latam\puerto.png){} + +Es necesario correr el archivo batch de la aplicación ("MyApplication" en el ejemplo) cada vez que arranca el sistema operativo, debido a que tras el primer arranque, el motor de R portable deja de ejecutarse, una vez apagado el equipo. Esto provoca que R Portable no se despliegue en arranques posteriores a la primera ejecución del archivo batch. Esto se soluciona creando un acceso directo al archivo batch y pegándolo en la carpeta: + +``` +C:\Users\\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup +``` + +Para obtener su ruta, también se puede acceder usando la ventana Run/Ejecutar, con el comando: +``` +shell:startup +``` + +![](C:\Users\Ixpantia\Desktop\git_ixpantia\data_latam\shell.png){} + +Esto lo que consigue es que el acceso directo se ejecute cada vez que el sistema arranque, desplegando así el archivo batch, junto al motor de R portable. + +Una vez solucionados los problemas anteriores, cada vez que arranca el sistema, se va a desplegar el navegador con el primer arranque del motor de R y la aplicación en cuestión, para evitar que el navegador se despliegue en cada arranque, hay que cambiar el atributo launch.browser en el archivo app/app.r, tal y como se muestra en la Imagen 1, el valor por defecto de este atributo es TRUE. diff --git a/puerto.png b/puerto.png new file mode 100644 index 0000000000000000000000000000000000000000..7c2ad7243ac0dbec69427f39fb838ec3f75ecf61 GIT binary patch literal 12087 zcmdVA^$I0+NCt-5o>2z|aT`NJ@7}3IfvIE!`m9O2^RM&%x`u z@Av&Y|H1PEFw8k~X79DvTHn|^L`mTT7CIR^2n52Cm622dfe^vKYX?*m;CFey?F$fy z1|%yfrskfuzvQi^YSGGeWRLT*`Bfm824V6m3c_3Qu_L-);W{>UVjsdL8Z2sTbnJ?z zxb{;#%|GWw>g4XuR&8c@dU}qONa)t27uYCRgu3JQBz^A5c%zO-=v6>uqtk`{EE)9b z@2i-ddw&n!xj7+PS~Rqq+u{wKSUCJ1o(?`VgpJyZj(Rg^dOheq>oW`v#=|EIwQozm zVpuF%z$SLaM5PUgR`wwoiwF*Q2KVzSg9vGjanJ^|PVcbdlD^Z6d-zEqT$FWzbHwXGH6S9L=cZrKFY4DkK>^@DL} zu>H>;+>uGc?xQ1ztW;-BnXj63LN?f?-cW)W`$cqTC*Z;1{^UI1eyxW|op<*Rl`G_N zxMf|x4|nj08Kh)nP|+Q?Okn1PD|K=V!PhATTGuiN-VDH}7G1iyz@f-mRh(FrXpnF{ z;=qm$+QkO0@Ub!6fZ*T`htrE^b#&#WEA`!jjzgpJflLZ`?Zi*x?pl#V-BZju<&RoDZ;${+{^~v+A z!ax=b^|Z#uDvT!UmJN2#K$4O&U+lkp5kv2Ly35fG<6HK_SBEza)MMjwSiURXI}yp2 zq{QHS2|Cgx^|*p0O*M$2t-;J}fUQ1L{D9@S*_Uxh7nh4>R;a3j)YTWpRtvkRaLg^L zy+i7**A{HXmX_SfHTG5Bw_WJJ<|2??ur!T#c~7Sgt*N^qGPpvpk;Jy8`TjxQkQO(P z(u@O<-9E#(i^u#X5U%9d7rk#aXO0AZ$MS&wOhr65ISi|+t-3TS-sqb4Y^otB=~2kv zFJBR@y_2*c?T!qrx<8Fyv-ny1mkECgs?^noynJFaDJa0jH0GO?qW`<~V~* zr`BlkOXO@IHVBx(_U|}kk~~~l)RW3B8XeZPw@vRwKb)Hqn)fx7XGaQWs{tkSlNRdZN+)gPo60N5wuUj3z{*L?vIt2z>Bc_{NeXtaJ{8D zD~r5f?0t2o-?LlOUO$T|Hxr|)LZZ&j&g~tZwe9|@#XUV_!HimMA$q)zX4MmBz0APS z?0yr1evMLrx?rz$%8S=QaBc-LKl~GJZ2zeP_XJCO4#VSnt(Ttnz zr|GRln}H8HMx1z=oWCUgfM=O@Dy6@w;>#{(j#nHCM=1mtzfozyoT#A%aa#9UnYq-y zhr7M=^Pl`MR@<|Pco!(gH$LSVq!n8IQ8)m`x2T^HV*MbyY~JKAnh9A)w&JrV9bXYe zl?taYHol|jqW=7OxY-C3bg)R;^C!z5Wu@h!`_ts4!6s|+)9kL~aO_DhmP3$DK|mad z^scnWY<%GIOXitio<%Dspw!h?Ld1L?X?Dp{-3O<6cs-`D)zidrx##w71}#Cq5_z~+ zHYsy547kY3^n!u;EEzK=Nxf%{^6Q_(=+rFnGuyAY>;msfttF5zuE9@PVge$)dhg^5 zqG>rfDP~&h`#sA%KM!wj!#82v;UBUEv4I&*@)@joZ<3WQ9x*jp9o|If{(Pt74TX5v{xvB5z0k@lf;unN1gfx0$%)sDakHwK=$Hb{)DTfJ*+VBQ> z$$CP3Sw=y@rlr!E<0(((o^;+STJ^heY!9`UKyO^M@Ms>a98G`6gx}s5MF`{&rOys2 zS5DV*Twk99;agprRy%FN`9CW(60Bi}pdZ8ESij9x&mGXv>Fq+(HGu%p{mLz$I~e;U z8W7zi{T_+4*GRS)hKYN41AV@?TInOau({;xa=HZBm)sa91LYvhOQHlm_3>kc_ehoB zX_*zKxQ)KRuu)J-L`tYJfW+XEidZN~Hy{eB8hW;;;L@F$Lh=E~rZI&~y6wah!a7AWT(20UUknRe^6u}F9L$na z#M{>}aXYAR2@VLL(M<{k0#etQ(A*uFsz=4c`SoC>+{DGT!qK+s{^#QFrUqd!=XesdV{Zb|fTIPew=IR85?NBb=<*PB}(6>UC-|m)1jzDH@ z-J*GI8n+1*D^@}_Bk^=KQn>@&7P~~;So%zmufu24yKEmRL`UVdk_oF+<0KbG^YTA~ ztup?!oDmjb$fxp9q8)$iI0b%<_nKy#xdWFbtSYtivn26D&#FmL(a`>0*g(Y+2U9uU z&9%j^TRp**hKLHyyaKQaua0AGwd5jkbxKnjq^QyuM;|2?+Dsx`^z-Wyn6EZE(x$k)ZDS zrCl#Lry(g>#Qn10CE|)N z5+7lv05IJuf^jp1w76tkiqhyjb9BTG(1VR7X!pUv?dgtmsnSa8;0SoPd&eosL+Wm% zQTK^ecpq@u-9xI-e{9(>Nd%i!&4fWw-2s+_FOTsw4o<$ zd(eFhq8qFvRN-iL*aePu3#VpvICu#)aOF!%Ekd}3+}c5!xHsX8^!d#UJe9y-4lbAZ$_ zamWeKsW70sprQqov%ksvqzzK15d8Jt3hO5BML~Ly#urd}4Lcpd8=u zC&u@(osp&qquR>|_Q_GV-!w`hKlM3i z`>;;_>VnU1@vF<;G$QEYP}G<2@*w?)7x!^u)QjR(gJ*qPu;HPIB0Y zzJnWiikV;1%UXj7s3|*NXL`YxBk{%ip5cu~hdeU{;To0`+niV`)ESvkhx70nv}eq? zW|!Y3 zV{z0J&cZEx6)SOG*Yw>UW%J0VFTCx!P7XDHrp%OSN5G)@ziqmQ5T zUiQU$&pU(ENnD{mqAlAX6@u2VK&w&I#FnLdQntZdV90mBMc=|7Dze= zPq!8#p}!>1(Kuv|QER&tw3Xo<3xn~|QJiofrG=+m<*1O^01-XKVzqM;u=2Ncv; zH3==u zSQOawQwRgd|D2SdPvm^)h_BTb`_jTc&FCuzy(JE>aAnbNR4X@dTX;tWG>Xp2f(iF1 zs~VkVb&Vcm!-Nk^F&Ph_*x14?j0{|I=`PdF5hm! zg+oGPjW0`=#ztqtU`a{?1KyFUNPNbiu^;;$lqR)C3H1 zI54Nl>1oHo%5ZHMOr)~P2?UBth(DS(Wq(n>!Q~>jUFGDC(07AHUJooeL^xbJM{yx7 zccKHl+fy}KvSmll^bzIWOSn$27A6w^F)*toMUavga>JnmL92R(9*D@BiX|*us+vSf zO6te!)O+L*XyoCxFcj&Mrx5&Bx31lUqscZ{r=$l6u#&PetvinP5pwwCNlhL3ca0+D zvu*mEUPhtk*VotVDUHgSKFb@mJ=VcKpIdJ`3ohGGG$9u~x)TC}R$?ORn;zXVQ@JyKXXgrcEh-WU z-rO`7o6g~MckcZiYbRyUl1 zzqeZ?Y8YiUNQKYhx%2y#WsMFP40ebj623tNY8Yq&&7aFCo1PUF7FIZRe_Y?(bUZY4 zb;Sk})Tl}udUa&Hd@*f5+fKAD1UsO(gwoj)Ua!YR-3t~YG5=vJTMEBQCS;M}{ehBhp6!9SYQzyvA5|Zh$DBpE(1q?;5NhfV+xe3hs-oxO?*mh#_2Z zatvVb(oHw4c{w>qK%P}pRItt{Yr0{ZSM3#tvqj_&my{g1gsG{kuXTk)fj|un4fV6L z+f`yZD=-V{q`&hmHhe(WTJ1Vs^Mgm`+g-%Z*?t+{7IX&}0&$eiiAky%=x`?`EnxQF@bFSZP243)#03#UrnS zM49s^cFL{Rq%FB89R7-T{viJb&c3P&vNfLP0$p|A0x-~QScNvqc8`Q_y7~Ui#1Zd^}7s0hOWsWB0~#DCM+*r-=ZFC_GwGX+zlNWHpeV8(0Q+zkjhy^k@1W?5J0A*G9( zn*@L?3_bV9GFroFRgDEkDjq-ZiNi=`Wo7%W7a|Bv=41_J|8g*zDK@%xw5`^*2np?G6Pc1Lq)Xw13N^*rB)vvj}WeK@jtYrA!?)>~45 z9DZ{Tl5e6wJ_gN`Lwj%}^k!{rZM&L1w1G|(=Jxz=UIe+ap5DuO9xZ@bMMh#n=7!lG zDXeSAQ2aZrreBH}M69mTWrEdvCd}Ph)HQ-;XSKv?2h=ZVn|}Vt`yp6D$;8U~YZP|F zb@y=Dwq-Uejf7pWz2_&UuFf-EqW`=^W3Xkk6h*0~4QYC6QZv%!Gtk680C-s@G$|rc zXFbIF)T*0!w>_59J4g7s((eER;=X#4&}P_nj1w zOU;612{$Tz^d`{N-))iFj{whLx7d~V*-#thDKB~o1u7_vR#)`%t@lJAYf?Xl*)I3l zrLMzT(4pTuVEKY9-zTP}v7cmKiNCv7``%gQZCQ9XX7Ob{)$>w3e}a~ePm>*+05l#} zCP_!cVpEY^@z@UQxY^qsHJvI{S1OtU5S!2SaDG^rZ`p&XcfwqeKQg6f)>dQOm}<8E zV@QZ9hZ`hsqN4AIN{FSW_qe%_Y4<(+vGv#P89bf;7>~`t=QiD2=HtiJMmNfI5%2k; zRE*hHfm$hBmb&*s-uHZcW5vGj=!n@$_`5wJebZ4n5oO2HbBf_9NFc`kCHiEDtZn4L zVP44xK*TM2M zD$C9muP!af&PGJ(+-BJ-MR6zrs)z4kKY}CJPNQXB zGP3G~07&1#sjfbC)th-2x9va$^jk4)QS&IGOY#V5wMS*IJ0?X^Oq7laVvOI~`|0-< z*e^U30fMr6KIIW?VlC1rLHyHZ0&~1{Y~G9a;}Dl&&-R70s=~G}`Jt8T)uRd-dSktc5*`uO zs1y%d3vP{~f2=^fDUPvncC{PsETE724nOaPSpjxtAaLcE{odts`}v{Bt<$~V_hXgq zvo$<8y*S>~ub8D#-YER;J8tsEIlWMYS8XT)Y?B{)#}9P)lZSME7zOY@Y^Al$ZoVGx z+-1w*XY=CLo`{-3{+lHQ%`$zz{6Yv(ex96s0I$aOerEU*g-eGvIj>gVla#3jq#-7R(1y*W%! z>n(oZ0#|_WUU8FOj!k3@c?8KvW6AZLT)Ybv!Dm-!X?z^2tv*; z**6z+n4jbEeK~yZH}f=IC%F|#o|xz?2HwYF;fe;k1Wv3B!<*+a67nJLl8^+r(bBird zajkJ?U9kR8s%|SNykpeqcxuQvh_VP1SWhU;79}~5MNBnJfR2rF&;yR zr1dIY+05lxHj>|e1#IWtOpAdiNUzlkFJI(=P39&3`sTXFna<_&pefc5V(*L~g2Ch& zwPRQSGW70F6?sI>*=ppU8?d~kCVJ)62nYB(K(m(j!lmh-1W#k5lb=hS6JmM{E!K}o?h!Z@7w?ASO$J+ zc>MyKji`m?{q+q;6jx4WS+E+Dl!PgLrL$nMUPUb5-zIO*m8&|wqg4zx@e&OrTpvUD zLh-~-y|>d8N`ri4aq+dO0@c#u@8C9{P5wg;A2YKvZKfoW)5;kVda0s6!WUxQE_a_F zi4G3+bx+IL`S7UK^qzz699%*t%(U;-od)^bZ(Byo@3$JFrDQ>%8LXw*qc~NAy6bC~ zon~GT{gUg*ZVT{81EH=&A|dR3N@819;o(8<3YV0(8oN_Ca!s5N4!g;g#;x5#=8XQ^J+xb!=qji1BBz{Lkik~8LirKHqR?q%`Y1$LKR?qyS* z5@P#=1gPQ70DXdtq7UeaT8)hS^$yWeay(h@ht_py?q4M4_X^O{BQdD*DP-KCzNw0p zioyZOU$^NWrBLZrXV0=6`gRL&WuEVua3$^VWA4|EVguObRqyc zx45U`pSGw6-f?d3&CUk99|w{cbGtgO*jwy_e9z9FE9vQV3H1g9%0gGKpkhafsi|Rr z!{JH9=z`z!8UKRh>pKBWpU8CUuOSgL9MS7)**351+{!-(~4Y&@{HC1J_10o;u8{RRrA;G zi}>|uwM69d{re{)EHZVY7xNRmf2}lX>y)Inofh(a@-T|K8fJ{3%JvHWZ$titkX2XuqrC8V>X>IIW zTEh(Y+TrH^FJ&vnBu*A2clI~M?mG!&EC$f8w{A;gSOqViL7{kl8>-dlUOEc{ zZwEQeS9JN2Wyu8W=iJo^hlrV{A38s1HLn(I%mPOOuuq=O0^k~a&P6c~!;<}W+h9!I zGqDNemzG`U)ny&)$$X1@H?7xI=C3TN%v`?$&uE+8d7mp(pnvpbzic+9<-G#}OEs;b zxvH)_Cf`I2v?US>9AYno_udlEbry!dYDyVj|K3^L)Ba<%OVxE9wkq~lt78YOuB$sJ zG@6)@&|zLB&JgFpqZTAdCzYu195Ai;FXuCHLc_w!ZRaFF?YfEgxBK=hB*mV)lU9K2 zZr+o$vwQ0sWAl~I?qZz+33W80nDPS92EjiWQ;Z%lQIPDHp0wk~+%fqH5Xf1O5)e_~ zN=8;0IeGbjC;2(szh5RaGX&_6ch~C#fXHmVH$8NN!CJR(_uY%I#1x-}g{3t!3P{wg@R2e&$QWlDm+hS`%|A9jS|x@4pG(a!3TcVr71q=KdT7}EJL3pHO$j2Qy0QSdRzS3H*C@OEr#R)3=EXC!Y!LDn|c%P)Re6dF^s8nqmWHc8fmo78T6rF(A zD_jfokFKKZBLKVdyD!~zT`_S-zg90=f0^1%#V9qc)A+Bbi!kR#%FQg>@*}DUUtBhP z)HzDl(v~narQaMLJSl9+$S?){ZBQxhROZjA<>pBs&<8XlB)`t~tXcHqH3ZFiBtR(;Tiwa(3Av3r+6SXl!Pb2AbV zff4>2r4F8RZUcbiD9xg-?)C!xQ~SIL%v7B zHQk`h^$Dp!Z9wQXr;E#$5pQZk@e7O~0s;cS26&dM5)u@I0=Nw?85rpPc^Kht#fvTG zm1}9Ksmw3O3I_bSx$!@h(7Q|nR*Kggbb4>~;VJO^8sWoj6RQ(> zF*+YSBv}k}py+I@W#R$c^RM@**)GFw5RwIl-xpF;^1m`V(vKX1QBZ1d7ibh6k1W_D zJ6}E1gjY!krbq5oHaUFncs*CpA7F+uWz7Sq7W52@wi5=#TXhq|Okz~H$?~#sM@1Z; zRFX0B2I%NFGmoB8d+6BfZ$fq`S5kY$CC7z~6jwet4c-&&l2xMvW@eG#XR+LuIR}2@ zR_`|zQ0zGIo8E-KV2JI+27V+dPCZv4_}9$6POls=>q zz)g1jM%3}!r__Q031Bukbe{++%yW|JNLRR?dTfU5Jm{E0I4*}Iw z^qVzlm{^L?Js%4kFmK&mo?npuG*bQlyFHY?5p)Q$?51s5%^Vu{K~;jto=geo0CoUv z(G;Rs66r5b{OTJie0Mis*jx%6kLj4=-eXQTG^!?6fZFTh^Lb&XI}I!M=%Ax$jn!81 zcOSG(Z-CsjBcULKe#N+=I6=tHwc2GyJ8E|VamV323FrY&w86j?5mZlM`j(jH^d*0Q=GR6Bb*~mafu@lUGun;=+DzoImP002C_q$O9oD z^}Ci2o193BC{1g?2M+kruS~@6WU)+UR(0HQ)%lnts}6#OGP5dk?q54 zVE|IIkrFGLuu`^Wa!rjP*%J^!xB22xmG5_aQRsf9{p=Ts-q1D?xs6JNQg9$KfZxLC z3c|`R>n}>ZA?+J-nQPr7u+`IZq0YwN6iCP#z7Rv15q{#e$Ca7Kx|#FF;vZrFhPc)| z>Gj9E-*N_aovpgl>S*ElTQA(oZ6wswkG)^12ni?Ck)R>|G+&a-6mN1 zBGo5<<9@+sw*X3VIU35=9?6sRJ@dN$PXn;cMLScF}7mg5kWq) z1WTV_9o(KgT-#CmySAApdhHbtD^T;pBIh;o?_=Zj@4$7&YZlgM9(kZH))LZwi@>gO z*wKSYUY5YDAH0MmCIT0sn zGO`iVIf=oT)HuG`30j6>a_ZNWea{!Ea*9q-vae{b zj&J1e+`SntljlsF1ZRHCHWn#*y+Z9zd}%s&Pw6H@7-XF>L@Hf&C|~md`vhQ=4Cx z{)*te6X>nCdHiz!WG-ZH38oGYkdqbE)Fj+OhemQ)+Et3C*k51*E3#yh2gs{OicjlM zsxXy2F+eQoc$S6|&s7P%BKVIto%p7I$v<{c*l(tswYMU1k9_;r&R!edJ64U!QLlOD z_ha2?N6%lox%FYRTLpzj42;^aeq+M<(^=KJUs_yP*dzL|o@vBQhCDhoJ&j^^pDe7g zXwOZieBYb%1rn(WICRGB;RcLz=~Ban-aH2`l_oIFPOox9OTZs+_>wtp+126y{OJ@0 zid*$uF~9o}&EYAnYh6N1PtfT$e7EathfC=s`DiA(t-+Jy@%({#ksS+@{P$|3@w#Rd z%g4~!!*Fb$V}Mv32)w^jkl1Yeu3HZ4ZQ>TTa{`E`!PQpO_%iK~fsf7tS^T-_g%-4} zs8q(sq8G6MU`c@N@3|GxW-)&v+I-ar%x1GbMxyqplow0nWG5ozjXBlvM&SrU%uyS94tGAm{ielQj`BU}VDGwA_4{U7X z?;0_rJ5Udn%c%kWGDqI}M`oB2|^2d8RM46asbVX|NCiT-Ul7b8NE*>@|I?TwGfQ z(^TQ^N)y{%22B?T0Z|%cK~P1e#YywXnFLR~d2Lut8H5Zrz?g>q?)#}Ia_z3yrtxm0 ztiS)>3h?B}O(WuXm3bVxneQHvzTk3lc)3J;C;Ok{Bmev2|2s$W?>I3UdtK;Ff`^TC z-Y4tFXNOd6e-C;8xv7h)JtNU?h>c{e|1elFJe@{qSct%jep6v2OBSF?LGW}e1=kQt z8vW)pkw$$w=-Yq|?ueh%)4Sqc9Ukv5>PiPLzL{nfa{RmV5sDuj;jEs$BMOBtlXj*4 zJIq2OiNtBPjQ?Ym?7?}Odwl=tv#1SQs7Rdqj>YmkIeB-Oj1>Qdc`O>-z!Fz+S0LUM zbxh|p;j`KaxG0vaa{nGKLROIZ?}6!?mjPe6;ZQ)r+>w-82{rM;~V{t zRr~_^zXxnK4X{#hl(B&Q9pC}f|GghE9N2dLzmMJgH(dWYP%Qrc+AZ)$Brv*qOwI^i S9B?2WBrByLSt@Si_kRG@uCiDF literal 0 HcmV?d00001 diff --git a/shell.png b/shell.png new file mode 100644 index 0000000000000000000000000000000000000000..91e25995fd7c4b27302a086c953417533ff5e00b GIT binary patch literal 8336 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