[pve-devel] [PATCH pve_flutter_frontend v2 3/3] Add first welcome screen

Aaron Lauterer a.lauterer at proxmox.com
Fri Nov 20 14:27:53 CET 2020


Signed-off-by: Aaron Lauterer <a.lauterer at proxmox.com>
---
passing through the page controller to the DotIndicator class is
necessary as it needs to be a listenable.

v1 -> v2:
* change welcome screens
  * no color change
  * buttons instead of text links
* use async where needed
* code cleanup in several places
* use SingleChildScrollView for content heavy welcome screens

 .../ssl_validate/login_manager_screen.png     | Bin 0 -> 20389 bytes
 .../login_manager_screen_settings.png         | Bin 0 -> 37362 bytes
 lib/main.dart                                 |  14 +-
 lib/utils/dot_indicator.dart                  | 108 +++++++++++
 .../pve_welcome_common.dart                   |  67 +++++++
 .../firstWelcomeScreen/pve_welcome_faq.dart   |  59 ++++++
 .../firstWelcomeScreen/pve_welcome_last.dart  |  72 ++++++++
 .../firstWelcomeScreen/pve_welcome_logo.dart  |  33 ++++
 .../pve_welcome_ssl_hint.dart                 |  50 +++++
 lib/widgets/pve_first_welcome_screen.dart     | 171 ++++++++++++++++++
 pubspec.yaml                                  |   1 +
 11 files changed, 574 insertions(+), 1 deletion(-)
 create mode 100644 assets/images/ssl_validate/login_manager_screen.png
 create mode 100644 assets/images/ssl_validate/login_manager_screen_settings.png
 create mode 100644 lib/utils/dot_indicator.dart
 create mode 100644 lib/widgets/firstWelcomeScreen/pve_welcome_common.dart
 create mode 100644 lib/widgets/firstWelcomeScreen/pve_welcome_faq.dart
 create mode 100644 lib/widgets/firstWelcomeScreen/pve_welcome_last.dart
 create mode 100644 lib/widgets/firstWelcomeScreen/pve_welcome_logo.dart
 create mode 100644 lib/widgets/firstWelcomeScreen/pve_welcome_ssl_hint.dart
 create mode 100644 lib/widgets/pve_first_welcome_screen.dart

diff --git a/assets/images/ssl_validate/login_manager_screen.png b/assets/images/ssl_validate/login_manager_screen.png
new file mode 100644
index 0000000000000000000000000000000000000000..b6668cc8f5b3fcc742ee2a6ce019ea4318fda92a
GIT binary patch
literal 20389
zcmeHvXH-*L*Dlf(q)3-~KoFz^P`ZF9MX4g4&?H2969}CM9HlquH7Zi1O7BgD&{0|l
z0fMwhmtI2PhV#Cjqki}PyFcz7<NRQdk+oTS?YZWB)-#_uHxUoD)h=JUdWnF5;PQj}
z%8v*Lh@}Y#E?AS3;=iGjw`;)vy6AS_#Djo<;>!8Yh2iO-69NJ*f(Ob<`aTxx(_~q^
z2I-<3H*fN%|MAX7i6-S5*MpalB7~LixkbW-Na>As&(aa*dpF6<5cQ`j-nz<^;TNA9
zC at Uv%@xQzlO57u(27c1&x7p9WGG2;0nAs>=X`LQITDp!*8(^~hiu{7cQJcO)CA*E(
z!uPLUAS5QI;kxsT;J+WN{v>%4_kBt$`^OhQMm}Gmnf=c7^QGq_JOHkCvF*CgB)<<3
zvgQ1bsTW9yrBzQE8wq~9=bdLCZ~n7_|J*RT`56Jc8-17Q_W^P at AJSh|{EQ$tfr)08
z`3U%p at V9{r7pR7Qe-6=YLP9nkD24g&16=K2S$;CaU&~OnxbqCO;QE^4_W@$*+eE(_
z?pb>`1-V=FiLmE|-v*u$gxUVE;*Y0c_PuZ+Hlgjg$nOJqBUAov%l}u5Y;3(y-u~N8
z2MY+jpPP@%-`i*t6c&R9!G$)>9nw8<mx|vSaQI7??#;H??}w0-#vN5X$uqH6+K09%
z*2Ot`8{bwq!{NWP#SH at 1%b8Fgbxg#~<-C)3C$8w&vsVs-;@*03);FzQowF6&H`f59
zo>rdp+Rv=@^ySjbrhRB5&R6}#bcsCQchxvFH_vc at VX8W_%#^GHWz%>P_D75X;X_rE
zu&Q^$b}h32r_!^*pp at QN;T+)h-ieU3s2oK|H9Wi=V`HiI`4vtkXhxyzumR*k6pfHo
z7(zL2G&l;zesL5z+GHyKBYMNa59!$}%UW>eJ2)snC~t7<LhKFtJ*8h(GNL|9gvm;>
z at chV78Xeg++5F-DdN~<xYC_qA=(23x2X{vWA4}Q8ZFGSIN2_9>O<2pYJOi-|AHds2
zd^YC6FLM!-(oCF=uV!3!p%g7xhTOM-tUcX<jSM2y7_^?{UQ!AC#Z}s?uNXVbp!3J}
zG{>S$RwCN+Vm4Y at UM`!wd2}&X`<K|TlD(+>crZy85v`1ifDFV0tjBCwc$;wQ!nh-&
zYoo&Vv1}5zB0W|P_Ixm?&1R(~i#47lQ=!&L*DMP~rdj6ltes!yJHC`OI#X}GX!{mj
zUTcw&xPHIVtswC_aBDG08*<ug_UaAJ%j6EXpFIqA<_nk#AeiqlH|ix~Z&^y9&Z at pt
zDB|$N8*AI?;ZFjb^bpxMVf-%rEz$${TpuMo=*;k>^wmW-{bz*~zaU4N1>sTZX?^A4
zF?Dfi<|(KtRkNJJ`Ov|_eUHR``3SmBUa0)OFfyN1jUn>*mk18F=Y5!B at NmHKu-f|S
zvGq2R)%|IjVU1o40sM2_$BVxNu;?^NBnz8+%b3vHw2h}AOG~3Cn)SW2X-Mkl#n*qt
z^ZD$-$Hcwj(r@^lONs@*aZEN5<1q=H{}9(K5VL1y?u#;C4p!sTk($}L(|Edp9o{?*
z05vYf`tw1Uvb28L^qZ=$go?Q$UpUaw at ej<V8K*`Kar6+t86C?dmlj<cv at t`RekbM2
z6CNVkXYRu$gzOCR(v5%ow32pDM*hCp!Xm>@o{&{<XD|z!LBnA9Rkl9iqfyUq6t&vW
z(^23E*@3T;qO0PskH8}GFr`Cx%!Tu2daY0>Xr{#BF5TF!_+4)d4*(_6;s+O2wd=}P
z|7E>e6onnSaXu!b at GO!YK^CWLsfG0ACvT(5wb57{Z>cMMJDDNHqH+)I at 7nO#uj^8u
zmr~%-Y|F68%2WMqg5^Jd2I7%NuinnQxXMP?HgdjfaF=Ej0es*<AuaZ3S|#c&3dR(~
zg1o9`b0G#?1-`M)s9`wMyjr_#4$r>5)s##2t9t|y^2!1A4Fs)^A72hq at fx2^W4sVs
z!O!#EeUm3Hk8Z}#3jWx!wD~R^fnS;Kv0ZII-gK<u+4k-ix**i?Q(QrL78S}XvwB=z
z at NJACux2-Hj%_Z>$hpneRF2gawKwjBI~>PyYD$6SnzG#YE-wS4h{UI>&W_}$)QgAA
zTj$AOXN$-NF6|=*=>D_mktj)v^7*i~)|1B0;H;C4n?}<?-m<fTigxTxACDaiaJ5Kj
z=gO`T)A?GA?-R+P>qKhVAXVYS at 8OP7+-0fgr?!rW3`=u}vn)1)l?>X*#LjZ+?^^LV
z5<A?w?@`{=;0pVCl3TZit|=ZAj6DoOhg8mcaU9QO{p=du7x9}lBwSoY3a_Si`y?#0
z^+9lCo%;4 at g&8<^%y79LC at 5T|- at Dm*1#t8wHeg+0IT_`e!o8Y1!R_<VY3l<nFLYni
z-{o|z4Cb89xUq4CMCZ)oY<f6VM_wv$?bCCmq=2YJNp!%+R(3Sj6LMnQ=fHjE`{1<q
zH|gtTN8uxb<|i%qM=vg~HxqR8*j=?ufduW#vSSu8Eb|<GyAi at 4?P!&K=PBwow(SnK
za#A-&Co7g>(6`-Rp<mRk?>Fzxv_M46)kj-7Ij6l5^nLLPkPpk|9f=dC2UDvq4_tjt
zJ><HgRwoy~=lTu)QI_iy*LCR|rKcDb_diy!nj}whCKn6^&DGTnUS+$P-~G+`KylRl
z`mwV_Q&(hP!65~-Svr+O>P=OYOLJ-N5V^Q=in57Y?jf_XbG(mxoLHoAC0{G#_=p`H
zJFnP)j`CN~f<YHI%oY8I4s at 2&J85v)d#(2xLs-E(CmU^R2-6ih1fx=t1&6zfKRkm%
z;UvFRC&&!TL^YLrt6ulEj3)GGBebgV2CLVe|F<vKJ*T6{>y^L1Em7%GC$`^S|0+bW
zSYvti04*c;Q{)Aw3qDL46Z4Sh@?HeLfatOeR~|m%KwbvbkU!g{&^HUj%11SYJB5=I
zNAGQ0N?Js_cllEb1lq@~{TYCQqO>%;pG62IGAp86p&NODsntmgR>GMeGd-K6U5ZPK
zLosVn6_DZxnS&kSLEa@=jhNmLwlMacDte{J0PJC(<>=xS#k1bxgOx^|&9kj?tcX3!
zc7liWPppqe=)KjS7=`2liwu^;qAxkL8v1jKZOjDxPds=13AiWRW-MK_sBa(pIHsl;
z&%G>{pzV7U*%9OO^%My!a~YcscZxHY40vK#WgSy?N6Cg&S at f0h<{Ud(PKG^`L~EPm
zQIv+k9JsCiHqX*zS^1aE#yJe_8s4Fchk2#YUt|N|m&djJ<uOS1c}8pmFAqL~j8+ at R
z&AmEzw at alq8q3lgO)kfEzv3U1IgV?!Zg|iSa(U9coS_5ARvT5f2c+8%32t;2=*S9o
zO17^v9^}^R^QPp}6G_lg9?uD2DDN&Z|AaSB!tWrX4k;UUO#xLxNxE7-Jb5g%v*EM%
zDzg1dym8SM-di5mVe(6{g0wdLPk5B$zs~Z+ZIXvnTkhxH!T9e_z2kZIJ$TK()9Oz1
zr?Ugs!PUZ2S`#LBc>wOj+jK-2m~kaIK?z9Au#bIet2F3?jC-b0L3O`r2obP;Sk|Db
zG~TV;gV_0&{Ku8xIO|pLln8eQwYoCozL25-DX%qElXGJboXuL{E4!i~ey)z}1KhV!
zr3N;&e>|$4l9s>K6OJ%w2_K^QFx)3Z!DhgqnK6DL)~90npn=t!p8E3F?vlf=oB-Bu
z>BpaSw1Lf;>g9CY#=1_Ov#O_<t;&}DUJtoSX36eK%}K!A5eOuRVsfptP#aew)|(@N
zRtbH4otAzjIK&$A(U|F~hFqk^<GDlf+D`$IIJG6!@@#|HlXYKn3Hiu$0b0r%j1n;l
z{?15Nk0^qE6%$-s0G|dupKxDexa`$V(3wP&Vu6{T^YU;K|0`1nj!2&E*C4+%+K_F}
zV274o0NW=@z$70UrA~RO`QfC3WItEr27In2cUx;&d?8>tD&EGbjvSDYMCIAUmuk*;
z*0mU{8B6&V3*~a5t)*gvaL^TuZ9Y-ew8=JLz2aJKi3-hJQc3%h(}_ZWuGtkjBy$TP
z2^iP47b7t=p<c^8d)R9aU3);=)J%_3?-QBcDrIu1c0q`N_E^Z^x94*fQ)}=W(_hM*
z6<(g3qe>5Ou5*hd%u^}nUy#)lwM&A28Tcvx3jRvGGBxN~pYF+tJ2ubBv}oE%A at Z)8
z_H)cfTlfZ|Wn+lEjkkjTIxNlg=fF}SSJ&ezN_c==kZI<(xZRNFz}$VuqxO4j*f2-e
z4R7_;&Xb|%+;2Kd9Z}iJG~5=GJEbKvYQ%S6*cX_)<I=*=0h=F6pYAx9JiBAUr)-nH
z02~GM)OF{xT<do0GJq~;^l6)v##b_?v+Ejxgv!%aUk!DL=Ew5>gs^_(Nnkgj3aitk
z`uc(K8)x%}#)*QhnOYGPCbuGrQVP$HbuKAB3p-H5gC<BP7lytrSXi#WsUTiyFsikz
zd3_^RBno-uh_g$>-{!@x11-UFs)TsA1R_wA-ejQ8I=%pL2uA(^T3@;1CE>T8M5mN&
zeD^KwPbBYE>K$KFHG}dwIuA<#>f7Uq{gQ(6TWbO_?0`@Z!HQ2p%&R-}ol~>uGsjnp
zd`B)jsP_G<W%b0MXZFGh*B~}MbwR*>)xe0#)cyLdtu?}@^YRDOH>cHO*S%v}NCo<+
z1fGO044J3BcDJ_o)~)xV4^c{fw)zv933k7Tw?V(j!?EJS`uys{w_b+na-L+XHeOr>
z4#mA*rlYgr;Opo<hg;RCmblxJpDV+Hq`c!(XD0@$-!W>4_d at t0@?^k!{Ko^U$4win
z-uD+3EnVIf7|z(1QyuhN%1EhUa&EQ&d5F^dgt at r_cmlWespMS+Ik#jfb8QSJ>oJ^p
z;johCOS8$CO_yd&)6MV?%y8w>@CjrtPVBx`*hQ*_!`%qti;*nkEh+k+tZ3U0w>$ik
zwdE?g at vh%j)cDpE+pvBb)-?u2Zf94BKeS$c*vfAo^qHJI5Kn9164cj!GQ8+b;@+Fm
zd~Kxg48hWPLjk8H(QbBMJnPFhNC7^Hzvn2Q|Ltn1L2`$fFd<vbN?h(vg~PptCP799
z_SHp2LS~TgW_YO)2#C;i1dXxxSZbIkeX;1s`?fQJ-IV0(WVNjKiWGK~_z8K*lm0Sv
zIsb?i_gqC3ro_FUXApUuUaVvDO?^<fQMEu^`o`;QpX&({S85cto#T0FwyszNGyoXc
zoex-oqsXoB4nEEQB;aH<M=p<j9Dp{lnKLrgqAsw2n5(JLRtpG at nzA{kUWOqhf-67d
zx_?fknyhjZ&_R~nfcfVM#X4*hS^Sd?X(|R+QpO at BMrVBnw1N3#ZQHG$s~B{4>+uTo
zKCm3sAa)N3c~>BmaJrr+SHR<Evrqk$>=aYuUjUs373?O-c&JmyRe-3(Qqx8hH@{~o
zHL|ay;b$x|1G`ar3HDMew7h?AFBJTZ$?ouAtwZREjhWvLyE&1vB5i$l9X{ph_;L_%
zmQ-fdAr`g)>|hu}bW)%Bm>6Nor-G`)$fEB&+)5+gNMhg!M7a!UoKv~jQ){D4qSo!u
z-I|f1&BIetlQuZ}zRsR`NzTQ85=>^3U_Nna>z?lG2mbD>({42leR)vduae8uoYJ at O
zbO%vzw%Liw1LqtkrC2u4o1Iih73j3gZH_2A*x&X at W&k2LQf&g)Tal!tt*Mp{J-g7;
zAnb0_L0hW?r2mhlD;~19SzR}VH4OZy`^2S-dZTG)3ug@%DY9ytqVC))=Td9_GqvSC
zboWm*WME0Ke5P2C<_hpbS6`q_9Q{qYxjbAqVneUPU~EK%-bL6Ym$j_~CNs;MN2KbO
z>*PB~+on*rdMLd=4}j{z4|te8C&UyT12;eC>U_Htxz at IxPXvx1&3$e3lV9Z*-JxqL
z3^?SpOdB_LKcWgjA|JhEue!|F>iJn?<TA`x?f9JOUvJ)Pr{DB5sJUze<jp>;B?1Oo
zp21vo&i0Drft%%Gkk-=VG3?>@J`3Zq_oYEA{rEJbsZhU2K6a4%vl~7g+b~wWLX8HX
z1Knizv!X^~4sOSnwP9PUJ12+kXO?VLmr;f?SEj|#qNDDpROF};-`WO#P<?W at B)1pf
z9Wj at 2-OLBfE7ubpn!72$DScW!4zO!&aXerj*&i|$G!N>_UXFG;8c^>ON|prfEZf6M
zC09&cu3UIoY4tg7rV?r|%HPI1*rCP&)9%^mt2DV)In5oy(r4Z)e)rfSn&=<Drb$a7
z^s;sP)HJi|jdaj#>i*9Eq|oR&d!Ih(GWPQtZhO^4@`RUHkgDruD&AcyH)9H1S=i=v
z1!b<MMAJLEE34}eD=0K>mMy1At!2*fwys@>^t(!Xt*4IvnaLE%wG?pkrdk0c<}`LQ
zdup$Rr>e#vl<|8>xYewSb!z6^(*$XmmFPc>j044 at xVoUJ&QYuvURp<)>qd6GavLBE
zoy#JJoSf4pY56YZWOF-GRS4HlxJY*epAx4%411nP4eg8?8IDSMrH^zS3+&_!Q%n%f
zeOHtWc1sF$y*+=?En2N~A?tAU%msEd{@H|J>k3ClLO at izGBH1%_TTQUr0gXm-5Ta_
zY{++rTI7bw9j(32XS(pVjuRVI)}KU9+TwA*E_>{N5D;LU#V4jyHJW at Of)$?kdHy*c
zpWPwvhfN<fHgjPu0`$M^2X1uP$Eiq&7JVz<P}rZb{@4q7tsk1Z(PW@|mcafVi)o$i
z)#iWVK_3?G6itm=sIKn&s^&!^%q^<hZx)^>&?yub0Bc#%&|FO2C%@Ia<OugBVeNH+
zKVY()zQo0FQ+#e>D0S_{aGBol>bR<T?3{e$F*`2uqv3Ahw-^89- at yVRqW-5Ru`FHM
zoY at RFx}X<0`zlZ1Rb#7%YFQKMVu-j+l*y)BvwTs9ZoDAlyXLJNEZni_u-Tu}*Xb40
zdJvJy3l(D4Ii6bYm`inzWz_-2ZvDas@@X!u2OXZOwX5poRw_0;PDu;_J(lyKak!cq
ziu-MhcoxsZi?*m3;EM_+RH>_9sxYl*99otNd%US7{Yj0Ok;<g{)Csl6=o00*;Z<j|
zr?H`P&iowhADB?ghgJ5+p47Wrm~dT#2JId!Cl0Cu(0=o=E+DFwt`+a~Anl(R?k=qz
z{!I4Y_A8oPo^SDAe<?Yzayi!2U)xY`d)j|3O<^Yrt!1}zt`#I(9K0^7bmH?&(B}JT
z=kV6jQ<?n$Qb;(L7~!6=$X(y%@9PlG19~G^Q^4^EoJynkN$0&{hb{O_BA|g!<tP;L
zAar7vJLN0f at I7r>VNs|0pTY`<WArdMDzc3B`{8~UDo at 9y4erxq7La4E&!<^P^b-t`
z)1<i&dfB)&Z#@SZF;3NQ4Em3dRaKIq6|g$yyQ$zNy{^HG&7%&1WeGXwbZfauFC%mJ
z4|V+N0&K at 2nEW`H&v8BWMx&~l0T|9NF1vx6Q~q`KGQvCw=}K8PI(s8 at kavb+hl2G9
zzyJHbf>zzDQ~ZOQnYQK=MK~YBl&@l67(LqN#+&#?2eR%uCl>bT8aUHkh`l&{^*Y^8
z)azNhCq4hhn=2-ybOW~zH)NO!q&Nbt{bs+w;aZT6%XRrJt>33hTIY#~4&3!1PFWsX
zT6NR`+FR{d&Ojmdr=vO}_yY at Bj}528FhB~@3+;o%3EAixC4Sw9;AQ at Y{kOvLj2HA~
zebqJ#w%&SFN{?jwSUX|$_0`#_yWjVUuSC~qUrB$124!*JR?#omCC_y@`-7n%ITgun
zWgvUH*t*O`H_hD*Y1ltefJcq|>^mm;N(M+$jG2et<Z_}~UZO~=AAeo$P_w9c&}#O*
z>_kOrap~6db!!>TD4C6?hf>3v<t_GUBYqsf6c)YOs$L&bx>@G943D1xl<SU_DMb?a
zs(wPp7uBYnj<698#k1_)bC1>O&qO1{S1eD?3Qk{dy5p#%=Mb2D5+a*7pR!KpF}Af!
z%pRphJ+p=Cj}(7VC+}Dh1j{<OC0)k4BDJrl&OB8^vzR{}VK2?&rgKi{bnhg<nLXWM
zUq(X at izBEIUP0MqcsA5#E_>}~pAOb#Dl8^dOYghUCp?n6+U38o>EHi~Y|2OHj4)3S
z(6sw%`m&c<b{Qetz3EG2zwWgr4gdITxGb%~*esr^n)~&%zC8e|+%0xExV>wKE;D4d
z(higpka;yY$w$aG- at r5Yvs6hCY%lz<gh5QO7${bpFUVnonrP4f7$Cn10uYLFpm>=W
z+q+)llC-nTL+tKUKjAqsxu#?A+#rX+`mXK^2;yGcZjG7kVnbjY%kHxpL(|uruMcid
zDfZ>MUgsq%>=5IS!2H8x{t|25FDZAaRwM_yW=#VW*3W6dq-RXQ!TOUC30R7xnR9Y0
zd{54*N&=Q6X%RRU6qYBw0m8NxZn}Tu;0gs9i@|@f0zvRae8%IXpWaFPTtz1URXmJ6
z`+8&_A%kNw>Q9%KYgtr5Y0XA5=J-vNq4G^k<P(B~mv*5CK|#mMKx$1v17o*pq0rnL
zh|@@1+2qhqv<tu3_FHs?H$y>q!BNw;Wix)48t5dQG`R|yd3x7`Eg^X;BfFN_p+B&8
zs!#$^iZBNi?)b5r;bq(haFgqVYz7Zj!hUt`m^)%4Tp}frnxTlbYOw6$G+9B6;cA=a
z+wg{yM;iH?&F*d0{dzF*Y7cq=+&-&iPKx>VyL+&vtrZ=Og67rP-66T#w%<IWt|vWl
z)2v54XD4^lCw|BJE2=0Ec4~&+C|iToPTykp>Q>B;SPQSzN_ntVRmYi>Q}N*`k&gXd
zLtg>i48&^EdVP#kp}@yVNKfW?51`?Gna<w4X++uT&D)tCpDuiH?|&Cac#NK9fL}>K
z5{<Tflj^59bD8#hQtPzvY+Z8I+fLREI{<_$KtI~<%h#eW=#tswUSyPApUmcCt&Z$Z
zOT%8liM0Q2XiYl);tsJdnxQ;Ue+xr?PZT|g>h(!UpX1(Te^);hzXJ}rd`q(vj3+(~
zet?+rbuC66B1Krs689&ZLVF!-mD{`(4&9EAmzgx}R#XuD-lk(4xBd^<m0}<Y4M8$V
zO=IsIp8$p)R7f}(2&a^MQlne1x(>^BX*uh-c-bJOLrfR3|EG{{`sY%2 at m~W#Ex58I
zM22BB@^JToZC;;ii^oE at NW)R=E~lcR$A=veJmIl>qUrxgT$(Sy-;;*W-xf#~xC?HA
zSUK%|E&uRy9Jb%Tbe^ncT9K;VIdPt8-hB-_;bTt~2BaG(LA7Q at x(Vg*+!B#YDKYQp
zmbEo=Z}@3LsS`KvQXcGV at N@mD?P`3`;Sx at 6(D8sl5nCtktzN;o^)A&ib0%;K5Vis3
zgS{UX*T at q_us~I2-b_E|^wrC_ at 8(G#DkxXd203n57}BZOJBNLfb7`%AL9MsupZH4C
zKZm$#z&A3CMFthpx40U<#HzU>K_z=Qbn5AK+;e0^>35h0A2__qMy;^#GkJtu6;hoP
zFCFh?md5MbVT20bd^5dU{yaNgSTzki`6i47%!psN7zLqn?!_rQE<7cZkzQ)CW~2<?
zZ&F03l{L)gC~0T9!!>QNZ*)IJ5}*K8E$>mm%|0`mfrno_`!_|dcJ_&39x#Su?C~O_
z%fMW#8VBn!y7xg&>(?K#t9SQR>{YfS3V(E*wiaOGTe|&nfdW|F%(eW%?QKL`UYetU
za~I-2Qc>jzhCSzI^`=Ys*MW#1y#SeIXfN%PyxXQ*&t+?;-{rC&O}31PxlYvWRgAo0
zikI#Bg0Z{!sVaWxQ6zG+rt?Lv7wr={Ffn%;>ePD)goTK(XNo7 at qWy1Jw$n4=L4-#H
z7sBeIg_hp=AjU8kmxHHKT7K3uC%rXqhQ7(2a!DFuCzmk=QLc?Gm0Pv}mt(s}>v6$h
z!#53$UBn!e8(-KboWh0(BRl|&TeY715>hFUo$vEd_Izw`Y|L8Bi3FwR%g`q!?L=`3
z3ZU}o=Q^6Ngwo_HII at 3~xYB|NdH2MY28tlCSnAV->T at YpyLcdQ+gxhJJj)*^yzJlB
zc8%Sui)8s!jZ*__v-#3e+AXenX2h^)LG_b*$T`j4ZDTSYGi~|)0;4F!{(d^YblP~^
zOUY#r5_t4o2ddYTwyuq@#1%bdPv_2UYuN_apE*mJQ?dq!oL3NnSLvIrGqoCBdgF$g
z0=5nYn~z__5_C5prXMY9MGwxs9__kL(@`k9(R27j4`*Tv?n{nTYMy|b@`!Q-TZ?+%
z4wU{IPhSD8Af^um`lhMnU!HEpL9_9xVb1dFwYatGHqa@>?K(^W+R|SSF1>|2FWmUS
zH6ZuH)*H1<J at Od3B;r^%8x#Zgq at bFxzFPmlHCLVL<8XprTb)z$)p_65^07;hPfd<C
zX>E#`K$`@8B>tI}gbMlYfo%xcEW7tF4U$O{`Wy_5b4s^w#R0v at m|8ssJEJy79NSJ4
zcbClTv{3Sn1BMxcYC4C`$p`Pp5M>g={_g_b=)M0)?lP)N2QD&mP=0uT8+Kn_2l!eT
z+U&k7wJSYl)mz+%9>2}~z4&igCpxwrF(j?nsn*6=BdV~~R#2b_?o-kBSq;Wf0dPmJ
z)nIAbtqVi)L-Lr6%tryE$d!@~G4Ttr#_Cr9!MeB0ry)qU_uv~9w|Su!S<vB5BX9b{
zlZ7CFHmd?C*${zM at SY#XSjXqqGpuZ3EL#uLzA19sJAxCc at ntu!Ew=fz)y+mg%Tw$?
z<I?xwK#R|j?F>MFvUutzimpR>f&E-fq4eHd5!D4jBqsBd)<~V8Q;dbThvUS}%C!{N
z7 at vy1<{pDObT-vtFSRLx at nGEm<(e~Y;ro1?N|sil<s?P!JnQ}(8J{BjIHS8vVQc$n
zGP`!Ie(}71S8CN|WYL0{%LdIg)YrY0UT_b?jm%+g$@VBxm(RFI88QxcIo>YK&4C*a
zX-*xqRGD%*f)Q=UQ;WczNUXy69uo{P=aB)OiNsmr*{49t4CS%rUZd-lTnk!~wLq)V
zF~%3}a$gF3AS7PlNAkitXDfi(4~E6%avVGzaXP8>My-DkLfOTm>rQHWkDwZpi1AZ%
zCrjX(9LHF(KLel38LNJY4n4YU_M_`cW7bI;u59d|gDpR{{RrCNWtJF`2bh=lHY3`X
zwm1BW-P+5FaC)7->WcRzF$~PY4eW>6&><z}2J=~%9)p3OEIXst7c|P2564xDONVvs
zcH at v41=fNt&#wYF{wfTX5~x<(w>fbdNKVnw0R|z5flW#x#(I$UNx>m@#CUOM$UCvk
z%JG at 2-Y}u2yb{U#{wTyf%lBS>w)-EZgJ{dQzq%BaH}|XviXbjI1<Wl1ddJh9$0eRa
z{La*>=Az-auP+Tv4Nvnbos3{U0_z4tyoz^(l6zeXSZge-ebuX#Hh^0)G44j at LFx2>
zJ}_!`zlfI(fZ3dO#E5PBn?Z>Q74fA(kOls#=^Lo${5cIen{7a&vm at IT#VS}E23ruF
z{_YV3eXemft}K5VRR1z(664MzK20Saa9*xGml_e9wpfKWOrBgGsLH8KDro0ZFbDil
z3Nrwhti{x*TxXhb1N!aM1&xoCuAyJnr>e0v8zBPmo3o3J5Te1NP1GN|v#!>|IEQjD
zmC(>RfAEkhvdx|7f^_%~PG<Fp<c&y|IdV9~AQkwe(06KU_T%#48mJP8<c9h3?rC at 3
z9C8qR8*NK^FU#YTJqE%qe_yP{T4~s48GBxa5_@{|+OecQ;9QJyDAm2;UlCsAM<T^{
z`;b^JJoR0a!gl^R#aFK9I`bsUnaDxF$R9ZQvIC~g6U^|eYJvnISAt6X5Wx-97$)Al
zcEw+<_tJDu&KNSS+pvRH^ys{Ld6Q-z^U^tdK0Ss|C3NaQUJ43v#7=g9Vy<S-0>AuJ
zHC%pn=*z}*;e(PX8+05?wS38iekf-C!!>c!xfzv*)p#Rju_{KPLo0>CtkI7T5`@x5
zHz(%~c&E6T#qay$3*oNpmW<)uFiwv^#D*MXzza{i6_zBZ#L3`)v-aBp at 2AilfYMrB
zXOh^hC^g}j$EeHR)X>5AAj+o!Vxc^P0 at xX@K!!M$cLZw9<f at naT01QtNA>A!D*{jr
z*M^&m?Y0n$J{Q<J8Ih!Q(`TPQ>&3Ml$1Tcxh9!F5ZCgv9(*V=s?CbW+6tag*&V<eT
zE={YJ#za&H0XFNV>O}hrr at 7Na*KV=`#wxm8KXbuFYsJdRX;i=4#*YKuf8O9(V(Un>
zHtaVBDZBj<!re0Y9wHV-{vvwJ*1x2_tRh6TQ>N35>~ap}+{)i&!(i=T+i7p3Weslw
zz#QEkhtB)C7w*I=e6mB8JAEO_1|+en4iW0J$`?M*QC%RDciqY9(|;qPS`mm{Qyg=L
znL;BJ0YGX72~tC2zn&6C_zn9$>Oik8V~W^gH+X&d(d1U5>3wkrhEEj6)!hye?K-1k
z;p`f3N}E<9&EFkvaWi%rqrIkjYM3Rb?YA1|GjgB0iILM-!YP9MksrMWTkAm$`t=J?
z3kZAX-MR`#_2lQu^QI!*DXM1ftLCL&&s_El<Sr4b(EJf{v2%RpHJ`)n{(&5nR+ZDU
zmYkinYN!2>9M=lUd`stuisRUoK3yr>O<}3E-e=)p-X^x7(e^sUHSOl_Mf4uAwezHo
zse>};$3k at tCn-&)L*7%EiP&Ohf(YNF>BRR at V7pGnKvmlO!YaDJ7N5ku#^Y$e8y}}I
z`!y>1K_x+FUPIZ8XH85bJ}4C*9-73qA@`OeXxL90pcN^Fkj!R;Kz4__`F@*Xm@{I=
zee-?6=+l5~7B(KH*>FGB&7RY+z|%#+M|1vTUwwjJ(=2~T4HFb>)2$d7ENs~gGZET4
z!k0c*8*HvaG9vPXd^ckdK9%7Pi}CWZ(W!GvDKwv!L+K4-=DE4Nz9+y_#~*|@UOw^z
zxCb~Tj|M?LlpOBxZ%nKrZwPv_0=^m4RFvh(t2Q??0n0Ixm7YPnDL6TcaUMsjw9 at px
z<5(u#H at TFIg(|TZ$njei69?Gs1G$v_PcN&wlfp}4Dh(MmqcMt?x|ZM@$$xAI2j-xY
zAAgy~sFc3WrEv;^7eH!N+Dw()U5GVLhrG3K2mwteT;0nOwrCNzHNU?t!f5 at F5rUUR
zL<K2alUl-!3 at AO`1f_}`-$RSy%rczwMW<2sg>~)G(S^Wx*MuvUDRUeEP-oj+xaCZ-
z3uiAxfTd<u6~%SxpkOHf(#KsyWI1AzN2|_fE1IcONx_f7KzLBbLfW5!GzQDk at jf7`
zBnuL?6WNz%kpY(9bpStiiIbfVQD+9_u%2L{F(%}<Dm5aN{`5)T*qiDKjN`gnao=7@
z_v%{}8tanQxI-^*`D~?B1$IdPkos!Mr>Gzk`NaA`3#Di0xf)`TJ~io6n{a1zPI-1v
z(2xT9AXl$xiW~UWl45mZwky$AMQPj`XphXpdaYvqR#4_?!oRD!Bb5Wp4aEB0HQ&uA
zx#oE3MkZgxfHOgq+q7r?hj{f%`pe^jlOvwg4%#=mb*~OT(C%H11QdfMsOJEi2DLt~
zuPy+p3}TU<mK6(pXwpDhXTO|}(M$)WXv@}I)d#15<BA1-H2%5g04puxY?04hcnCzh
z%LGHsM!qV_Rc$^7OxaDBfqEnJmZ&e~f~wFpCr`t^hhx#@qAOB^Y*@}AV?SLdIdGrm
z at gA!pXP<B_frtVOWNzzEmU&_psT5iXRa4m8nOPEp^KWEWo<5?iPMLmRQTr at rzOPI!
zGRooa#~q{SAFLJ5HkfF<B`!OM)q9P at r+PxHIJn;98+r~@JS?-}Oe1rQNo4Eqec_hT
z^SlLzOsh96Z=k%zYRj^zgijrCSv9Z(Lt}>?mA!j8W-qRwik48KoiqhSTBGXAi1WIw
zSd at N>aOz}W)n1dhHU2C)J#6m7URL}(L^e&!4-34)4)+Ze8k6PeOSv(=&U}q#tBon9
z<s at I|y=XTH4AQv=;(+Y5WUCm=&sLOG3B7tmd6j<s%@Aj+ at 0l2;VsdH_ovw7L{M6+O
zqyyx|wv$bDp-X9_2J}N^OB8TBd#O=C^1M`o>4{tP0(W at NTQ<A3BZl={@s}53X^z*E
zq07b?3!!c1=W0=<MX9|3ZR;UfMAJ0_kcV$)+FUTgBMLz0QEyaVPmW&`%@Ws6{qes4
zF^6Hlx`5o{c#w62zCtE{q#Yx$;<Ga`)0^4{45d!26O}=A=B_cZuGD^b9oqWwlMf#n
zX<8<^(wPm+pmc%s>(>22sD_k*VoTad{tuJo@=5Y?f45%W!4V>c%=2!Af(Ap5_NW!6
z)%bft-t~If5V2Lv at LP5Ra)JXA;FS`a1}*wausS7+{DQe1761^9OU1pI%y=qZK96sG
zGHKROX4qjKYW)J9 at 7fLvc*au+w8jpeROVT~Mv+JEQV>x3#dJDb`DaVblw?-=rhsoP
zz=g*}SawZGWy*@MlHJDZpe{!vwp>f+G+kVs4YLOP%6~;&Rh8Ka84bMJ(+{xmitgRh
z%=2Zu39@#<w;V(}1!=v_X0mLZ^rGUv`MMqlqQ6?Qk|%!Vrf;D3x`)gqepb~+vs!T_
z;IZ>|;|?f!>>2Zr*_ at 2f@u$IC>xPEk_VFZ>W$0lZCP}!5U(T%|Pqr?g)QOOnU1j}c
zqp87xbJ`I at Y9^(}hA2FCu8sGj84UCz!_MUsO?GsP&Hx9ssvr)L(L=N3e-=U$&_z`(
znt3I!tdjxBdPk3MY!K*5BI4GY9F3M#*T{z*n<jWHn{<rWU%YerygOyxgb2uvEW{0q
zd}5K1*%l7LHx-!bA*P~8^vKu?N at hOV*yvKqqGe+R87bLaAAj8%XMZ=JvHN$Q?q|za
zC8TO5`$}gyYza*KH%o5Zd}5PYNc^xl9z(>o)nc4qxp&iO(<g*f_>;6AN0W8O$L`Va
zb!-0`2_uIf;Dl}?Q^mAn1&!_Kvj|?@&I~qPxhFTOl_(5UmA+VKMhiv0vl`F2H?fBb
zw!JZcF#F-?#9i0VJ2g`RMO$ZVH%!1U4A!-8R^l71+{2SLx^H*a8RtI=@Qqq$vQ-xp
z84$4W7Sa)LG4WjiBVu~0x*`eLKo>eajD;jw`}DcHbxY9SpIheK6o|9l;(#}k_UsD?
zX2_0+)4n;?sJLt`B_K8V>TeK9KCiaxC)+<nUQ>IYD|=H~Rkoe>U^_`eZk6Sec(Qd=
z$XmUNJqp!NjM<%xdn#QH73Lepr6r%gUOt#Y?<DyotV#{NvqSA>Mau1-U;i3qJSl48
z#mJ3%H(}9$djb+ydG+2$Q>fxyZi?2(fn(a1cK1pNJ&LUIZe{K;>A*Nk@~W85e^re;
zdV~&cqddZ)AWDQWDUHTMzZ#!EqVC4)y=K5PY+Wsml_|y7rb<>Zuo-Aw4u;KpLUC_;
zqeiHv)%f}w`8&jVs>>=a;+yVB4`WJ7t)<Erl|qRVxW$`f&2N*0Eh6L2a|7{*v4?vN
zi9NRkK=3xsPReZKB`<s at -EuEupN=Rc`uG4<0Bf6n6<i4}YOJ5z?@A~g0f?H8O&tFa
z*fg(SkdR(!$n?S^lIP{v+1NHdcx~oUsq9YOS2<ftvmtX9wen8u=VF*M-+`IsXq7%E
z?j~z^$&ymD5M09`K>6Xdwzt>Bi9`;+XFjr_G=m-l3JfBh1_}zyr7Qppj*ig`yFIpz
zpKj0bu1%mVhh at Rj28NoMWk=PX?GVt}b0{0}yaG7W3t?w+d2;4(fR0SQ`sMtwe3;mM
zb`(AJ%_C|ysHyDNQZh)^cG<MICQ8w<)bmK#yEf<J{!aCfA*&Zj-yE-E8*W_`6n9*4
zE*|YZCp!36AAM-v{GG>DJ;B~<M4tMshD&SiUK6wPyhKjQ9A<sLMWqd>B~2eHCbooc
zMaXR3Ek+kWK6^&tkB}vi7X3URK+4^@>qp_}mcT1gHTg+=+i%s4s}2i9Y+q^Q-tJy<
zOUhd^vXSzXqD|sIH8}gs<di+fgAU3mX4yXFJZoI-bm;Rk)YuZ6VN`-yyN`cg1xwGk
z7u|N9aCE`@CE_ZeqJ?sGGT(=Jo;)pZeRrqn(wnX*p8$H;M{6`KSNc0)NNdEbN=2HJ
zjhbc+I<uQTQnNgO=4J at YGGHu+y{=q{MqF>ReDy~OFzI4HEZe{{?O;KN(dO(ODf|;G
z`OWGl|A5M{gz^sB)GGka3i`Z>IcU3%;Xr6*COs6#Q5&RWhI$X+1_>i0d|OuQ6T?<+
zS`5~l5^h<W?6Y;H>wz=p at H*rlfg1}|SWC@~aG#u+pfx~#|D*EPe3oB39y48dqiYv-
zw$`tkmM`-Il=G|G*N%4NmYC!M at zE%n2WVdEVK4{P7vW20_&#R>0aQ?x at nOXh_SVCL
zCg=vrT&`_b&K;j1)a*T)1h~<5BnF<YPK>|I4svb-K-)I^Orx3RTX%QREV7~_t|!aK
zJ9L2NqSayUZ?wTh?}oYC_cF at a6(7b6h5(xamw<W>r-{qVO0i1oc)>z$7v}-c(%QUD
zHv}ZkJH};-rKfcLFqx)TuwlMZS<g)2QfxB5NQ9m7QO#t;L)8aRK at wiz$@^%PmO*AT
z1M!A8NTsX^U0Fqh4dnCBB$3};dwQrVQ0q8-9c%n}nHRVd^u3}jU(lsRuru~DSVea}
zZx`QDtabLj^F^ut(Y|lp)PYsw(F~c~AnFFN^(A_;ro`C3pT}Z67Ed&HBb_Df_v+UD
z9INwLQPy31VU}|93(aj)85~!0(;OKjeTySxnWm#~$?5b%7eh~cJ8j>tF^Swp#je8+
zP%r8Nr?@=W7G&5LI77N6BjWfKe7i+}HQE9*XL=$nkXMw2Thg6Ap=O(0 at P+a^=~N}5
zNKg`P1B2~BF+jcN>g&~Xzf~bNpR(PYL8m_6fD+4`9=s_wMKP4OY)|ca7nf(GSgyP)
zJu=T2qhMJ=!<E?B at BO!Mjj#Xav9Osi!abceY*++`0%minw?Wk2W^*OgT-Y`f<eBiv
z2|~tW*vrER-%soH&RsWYe73OL%g}E+EPs>zDpOtJ-{;2p2djLFth4oxBg4?usfwGG
zvK+7~<;YpJlY^|ao#r)<0Cp4dt!;(R7>@d_ryPA&rZBQ~LAf&N)Dy(I%o66RqO0XS
zBxcx=Ki#OeOh(0xTLIvJD|_7ItK(@F7`<1jRjU)`T8I6Uv%x;GL+tTI_P>+(zdi)3
z5bAp1`^lN#@1CeA#X&9%oBc8T;G^Im_>HAhz#lsFDMT^ehxU4*pk{)>pPMG|iit|F
zT&e|?IuRl5RQ=ODTYd4D1Zup|vOkdaKl3kN`(A8&YVLRxVF<e;q|;!%I5wQ_=<=|K
zE2U8XLm}O-g(_`AHK(nR>XlsTJagCj8^SxEEP-BP)=2fW{Fi5DV^myV2>YH;B at yXS
zqf>0BjLvh%@ctNbmjIvh7k4y-^?Gu1yY2qx8u;FySaRyf%{<kbTq^?(>n#mAl1Ofo
zNYDGBg5&lNP#vLjh%KB9@@VHNjERZfoESl6h0kna22J7_M6;6_#0M1Wu>H_!kyVz?
z`#Yc|%&6ddUCFwAvtyF`lZej>8$H`^C at 6B5;6fazQ&|Y8!KKq+gvGH8=3)+U0msD<
zsDYDYe`<RF%a`~x+C$#-yp$68rI19!^)UU}|KWQ4`)`#CF&h80Q2ZrZ>GN^5>$2p<
z{^C{mH(+}3FA1gz`Og2qs2}6W7x5)R)ptC<SRU_(mBhr-d>S+Lf0K*<e7FO~zoVC|
zyYjb2_9GC4 at NdoiyZrxetZy|APPJ^XnrZg6KRsCk&79nVD(#Cwl}zIUE#7nGj~zoP
z6bBr1Jhq^k<IVrW$@=+&g+wd(l`BLQ#ESRq$4l0B)=capcvI36pV(UVXDZ4Kz}S^y
z4#Nr50u~6_qP`GIJsI7ZxBihH{KuEtlW6VKq!~%2P0thw*^uxn9!o+AIQYpe$I~~n
zswpjEZ45{|GU>+hyWybTDHFP1pyUGK&AVKjlXjNhKPbnlT!`(SP2)temJ+DRdE|OO
z<B`+(4W5X}ZwbZ&Usp=Ef3YZf890b9*w}Q$lGyLBA)gbdVZW=$3(3AiB3Wa8h`&GL
z>S4I<r_=^%m1`g&G5`InwI+%xsW;zL1-(I!w=VyWt3?+{@DF5Ns-DvM#Ue-Ca6Lu<
zs={~w$7KKQ?C8HA%=-kap~qd!1M3ju;WfMUThxnI5+bi8BTIV}8-(%>HU!+woLb)e
zUGw<?+E*Ej^$l|oX%s|k?hi%Wz7&&&&8p_s4O;ykv=*<_;z7CzU!FG=(C>&xDp7S@
z9-{yKmPdryf;x;Y`Qn1Yw82q_G at sK>fHtJRPo)?f4)Ww2x#T892}wG+1&K0vnhPs|
z{ZkVD4{1#NBR&c!MCFz=c+U+a?h+^V>(&zlD-l0+kE$SI3-w(3TXg-gqV{X}_jNV5
zFN at y(@y&lXMbsUSG7+pR!M|-%noTe=@%BFj-oF=3$M|h<w);lBD($cxn6+5bNBOrC
z4}XIjG{&E)tZV{>zl>QL29GWYFz~O2{C0yv11?zF;|TTAQQ2SK%ESM81`W-u-CZQ}
z-}n5_hdZTspsd+m$@*<3ySsOu<z57Xe(d279Im-U?l#(6?C~28zq*KjV!ou9UteS;
zCLg_lhk3#B!QaiwhllNqhmxef8SY^*{uC)~{&(^JcPxMFfGmlCfLihV{{sBG3;+86
zzrjlo{4er6`xo=M?)-aT;d8csPg|OQdCtEi?VS4lOOG!Q{!0)3r3d)5_+NVPFFiOH
k2mYl8<al~8dv?LX$xYg5hs^^2fA<I;sAwyf-L(q&UnhsMt^fc4

literal 0
HcmV?d00001

diff --git a/assets/images/ssl_validate/login_manager_screen_settings.png b/assets/images/ssl_validate/login_manager_screen_settings.png
new file mode 100644
index 0000000000000000000000000000000000000000..8858724a41bc452bb9d338242df0da8e5b61079e
GIT binary patch
literal 37362
zcmeFZRaBhYvId$E5+t~U;O at cQ-QC?SNaNNt5`u@|4#C|eXwcxU!QGk=q=Poj?Ui-*
z-pM)Z@!m1+!+v1Uqr2z)Yu2o)uj;FU2vubnRAd6=Cr_TB%E?NqKY0Sr`{c<}bHo?0
zcd&)tw!nTNIm_y~J$dpH>#v`u)2se>Po9uHk&_hD^fo at sM0kgz^(BNwR+?QFBasLP
zUJB<q?&y1pR9rV at d;QN&V^ytH_QpNwl%ZNrrTQvTF)%PNpCY~Ap~BbPSk;iY_;#-8
zrQ at ZeqB7?D*x^s6;nCye1U(nJ2tx*c%xHX#0*CSL2|U at 8r--6Y{{2!iRkRN=CNo#!
zKX3i#)37IS2!v1n{oQ|m5IBe}x)FYd#s0 at u|MM{h at 4~ZxdQjFAIGLT4SfqdN@}I@;
zy1tV9U(rO#PT?_lDLR7{|4BA at w9Ef<7}(ZvwC}nwuc<Bnuh35s$((Bt{@3yU5++>m
zDSY%G3pw^bi0~vZNa#<6{Ssev2Z_vC(jO`9pF}_;I{eSk{<D}u<w+prslwp at zJb3s
z6x}dI|F!X-`(Xg#5Q*YU#A*Js%YWpDLje7QUjBPE|Gk?3dd>gKUITX+=mtF?*<fG}
z{L?}I@=G!kc!u5b?UM7`mBpY at dXN`a`_hrAGH7e81SP{IRMNDXn at MrG|3Yd0Rg}_^
zomQrHKx)%Mg>KW=J8KgsrBniSmE9(MHenyAvi0tlC~yy{O?tJ>C{rhED&HTmB9<-i
zS0K0a^}_F*!sS`96^71AN=CDHfYaA7SNT(4-W)q#+IHqIHrgd6au|O;@!~KW7e9MI
z=NMJUr%l6;Oet;)dx?xF=zsIX?Xsh_&pCYevHhgB<uS-f6#mbcMaBdRJxI=dk%Zwy
zwnyc%#&1;KhpFs4eL0$>DnAKe^FuS2dGdbieiqdRw^f}&rYVC&iVnFeR^dMZ3MPD@
zI9zba)nTaQRw(mo{_JIuT4lQR(2s`0e0Ir={-?KT<!A at EgBFyt^`K>En)V-aCDso&
z!-JYBDa+Z}EfZB8ZYlGM)s0LTyu(N1rdz+m%HT&Bo)9%zZuNf)QBdjxnMke-I#eeu
zwNg2*u-7<!-v(VJu;n(T0fGRH<xc(&1JqLKYL56JCWZFZhRzjyRRiO-%QWLg- at T24
z%`WV;(ev?_{se$w%%|{Z6XqfT<7(iYcFz-|2iun^X%EnLOKT=0wdh8f#q6?fDpztx
zI>kax at D^{I{q5wdhTCYR&vy2+H&I9slUh$dZGaocAGfIb0K*{%qcfP`=TcZa#&41k
z=1!ZedNONW9ShijG>Q#yDIl_HqxQ1>$$~&PgZWnv*Zjh%f|OdHf!Eh-+~<@i3AEwH
zi>ZQ!;|DXV-##krFqqL{$HY7Icenqppm(C at Fpyf{QlxRbb3iu;TYrq7%GO<^AcI6%
zB1x at ha;~m$-<>5|DX<8Y6!R6h5q_?&{F2vmqn|-_*5^c%B(HnxvA~w-f_l72ec(xD
zX?S&q=r-?ykk;SO<gql<Y4pGjRHzG8_yg?e!r+J7yW$jACe0MG2$5C34wD30c&^iL
z78nzAED}8q+6U59#uqv2X+#hUe5=-AX!oP~-YhPj6G7clVv_-0<lbCiQ9*6jO!wOV
z;X&V5pvqr}`Fp-1nxlwCHxDPn?qUIs$5kFj?Tun at fn>^g*v(CPxt?|*GC20~Y#<XC
z#_6+*(XO5h8&E5P?7P3QX5=&dxepN*T@&2E%RLgS7tnJRI{uLlgkc6Q5?UHHbqYCp
ztNI-YBVN4mt_E~E(n1E-jc1q3d=__RYv!NLS6`gXPPlQLqN!!vdfDL)n-42c3p+{E
zq3-2i0xRnQhU at hXs`K?FCas7gdmJT133lP9l4`&WKZi8ac`&nyl{L%l*iN2^m;bS`
zUV~YF8n0K}j0f|L0#|@P+HY<c=!;ciI^JxnAdC<j(~%HC_&MbP99($E8z3hfDxFO&
zYue4UcT0n$b&Q(yjM-MBWhuzh(ZUCWHsEiO%4(Afv{=D$TQ<lpB+3hpvPV0xQm*IY
zXpB+-r=5Z;@dQt<y}+MrLNhd=$9Bvj-qi&_1@#8K&Cv{tl#+Iv36dR9B=pPG%e%R;
zR_pY$=YC#1GRI3(^-6JwTC<KMj}C^~a!On=ZkGpHuB+;`Cl7*p`)lrVW>FW?1YAdW
zXKMx7W6wyVm2D6WU;cimK}<R?5~88rD3e2tIZ6j{wce<~qwS9`1g+<MO#&(7Y-FS}
z;hW`D?wyDicxs$;dP{sVm&(gqx at mS4an??*_MeR+fjq}`7o5X7B!c*@@5c5JNKD?*
zhxtdeTAwnv+?U)xo6s|lH^y>|242n9w^{56<uV8kVa<l}sf`_NJ-d{pU-G_9Eb-7y
z at f<&h&PQj(8mPl{@BV}h5c at 5oB2$FJ?Qy86Z%R^JN&W0lh|3eooBKrfnrtK4FDkoI
zzSG(Oj*CtV2teuF>HUZ{bgJyV-<BV>^z-v)=ql4sF_A at YuX;EcIpVD#*E569Ud*Hp
z#{wslAHfyZLmZNMQWyzz7Y|9riLdb at w9*Y2ViGMaQWnVBiUZ~^#fk>Ges|??qCi(l
zXDVzSnDN-Y5M=FDylEiwBxWRqhXt at y=e&teT&#N-REjI+LOgYB#QL+LS;r|}2`S>-
zG|3a09CU at v)R>ap>P6%t`_XE*lIB{vp6j>k!Lv9=zbBnJnwWHWa55M!l#6Cfnw77E
zkfOR$xXp?gimuYK+!^0c>SPg}J{i<r`5A3shA-BRF8)mS1z~(xuW3d#RoXqEt3$3Y
zN~(NrK{ESg)G6rugd}LR8r`Tm1#5V?{;{f#PqUkSm*Lu{f2AfppZIrYOk{ww5=Iz^
z+#>-f%R8H<HJK;zod%|4HoI5cVW!r4w*U`kT)-bBE>APt2pd^<GUUM75dSo7|4>a%
zh|p$iaLRX4!L8eU<vyGw#^eS^&56<qSHqZ0KS%=4SEB)9%gdIt(uIknl4<)0ET1)w
zQ~N#D%)v74GE44<Yn#J?;e*XRCi1K%G?mONPTY(d|0+KEi4TJHiGsS?)z%(i7LP_t
z)D`e<n-4-*;}YGP6e^fVgkI5C-B(G-573ja)Uz9R=#fT*sJ+oouXS4m2e}=3inX48
zm8i;0_*Ubx4vW2#9|FV~+;5Vv&UdFof<sa~f5%DHABc&zfs|>@wGLzaZVzrw86KUF
zX8fGCx?3;v at 6carS23UX@7K@;c6P8&qpX!j+8TnEgS!J6EWZ~Puk(`$r&s~iLWrnN
zQKoY5-tS3Y30uv7y$-4F<iV1;J5HI8XyaX>JwMr2q;f8qa0l0`+!Fig?dN1E3$!dn
zVue!~+5+wsiTd`h;Wz1)UShG|#W$hVJZ25P5W12Vhag5-MdRux%22LRnbP$Rs=VG`
zENXG`Iz>DApm!{VCDc~rM-eAE3rwF|Y}Bk!shZ35B>$~oQMG;^ZMhYi-2SzZYt$em
zE3t_<C&=^;`?3wS=#!W4ML8+&EUR4+UH%X4{Mh2);7}Q1{ERrAFhTe`MUp2nkF-E)
zbmA`uvn9zjZDrlGr)pb`^$z3_gtWq!KHbCY$Gp^VL(5cg-)D*?6xO+Y>g~V+vpNHc
z%J?_rPq#m=t@<)T2g`d^He at xY_5v&dP=Z%3%IKA{xB_2{Oa1O-gYQJsM!&|%uMED!
zZb~$R!^&`{OYXwxJr91Y4m$+=l|e`+2}}?9x%^l&!uE-jeH#$~2jL-!;!%?waunc3
zWe;HojbR*^C6qWg-WBw*VM3N>%Wv4_cYyiMd1OVg_#y|B1!A$w7W3caSUc(oHqHO=
z0X8@*<&DXi6G=Xv;e{o(Obn#&sw)Q&73wjm&H2nW{*Eu3Z_ZAy2jJyp)9KnMS6Sm?
z{6FmqfFfA-5t+#;-ry<;aoPFmZ>#D?Wzz?QWK$1^)tVpOh~6`h%JL`6VyJDYMOeN5
zGZ&G~8AT#O4-o8cvrG^-$B<2Vmj(7}-B)v)nN)!Txi$L{b;{VB?Oxavy_rv^>oxn)
zZDotfqo+RU8Ff%RtF70fOTxRajVMP&_N`32P}B6<Y;7x8JhIz<`htuBH^Cg^4+Uce
zvZn=E{0uPha^4(@%Qw>K&(P|CYd;S*#MS=N_!jGJ|7n&gmRtxr)i5x&gh at +APLrHk
zb<fc9RTauB^F&mJ2vdJE1}4He)Nc-vHy&_Cd&UKAMDrJrOxB8_v6uPss!ks>%pF1H
z=bE*0_IZXVzrzj&VxnB2grRx_QCXfVSfgjOqH>o~!Zb}ATg+%_#x5~Zf;xu?)u%MC
z|1YGwUHU;@iWO(~qzUEFzJK|djW2V!<Tar<aXmoMjI}T~U2fq_e%6 at 6>7ypJ at a#;I
zoT*G5iz;ppb9L#~Gi5Yr?~~0MyTrHv|NfeWoJD)p@%+fgRNgU~H^iBZJPQ0o&98nZ
zC<^05({OoziFP_UbU%s-MVAwRh}#;<_9qI!VKJP$DmXGsDCE`E9n(2BP{_1(O^s*|
zcjYOG8e{nz^D<18pLPyOMh~cv#yYRdCdyha$>0f#P^cD??jou+CmJ(Q-(J~l4;L=r
z9vSt2|IInssa3(Q&b>jgv@&_0h+OeV{f8oo6wdn7PPaQ;CA*kf7I*4eHNg9mGw#IR
zwRKV(QW@(qg>UZ_vjp<11ZF;&OJwX^P|jqh5H%O$2b^7l5B<E(+Es2Dk_Mvu{U=u^
zimChM-PN+tE{w9UCz30P2OWNkd-0fbXK-OO*@`<0xnjg;bA`0&<I7G1%7LP$a6anQ
zWsE-ZS%c9(*65u<hObfKuqZV at aL37MdXIlV#!_w)^!R+XcTY<U4vwL!Bg<v_qJyNF
z1P`sJT~k!}uDT8}0m=`<H&5w4l}7sA4tn8--NQe4Ee*N49xmim;qoc7-$OuCu%rs<
z_BmW2;`bWRO at hSOAfxi7lHg*&cw^wwloUic-4R@=OMG=>i5H!IsX%u$87>m&mWA)A
zDXncT-B|QNsI-k|>(<$=XOMBbE(nzV&|0sMMkt-jDF2R8V at v%H?#(Jrv;~v5-g`(A
zO-sys8I#YLUE>v*YhvG6RwQ4`=5u6~@TMz4;u$<972aSc>pKEEIV)zcXvRKvY|X`u
z)WGwqn(g_Z-l&{4LVxH;{`P?km|sMlH?i!YK;9B`t9F~w1n59NGWheMQKBt~YA4M4
zb<RoJQ9sg}SOkXL-%i(5RC1gRkq0iyF`Rs#+)qa<h<LMln#=bIO$mXFEKn3lhJ!7H
z3)S0HR(ng at w-ZZ#$@o at u_$MyVRgm|pMlp0u=yw;VyMP}~LI`Um7!u^uH;A(c#^t+N
zbWVcRO-VP;E#F<!#*T7O`n&VLz7?{9%+y*v&~_ujVXL01ic}MG)x4cer<hfTr8IA~
zovv1W1>CZ(*B40L^gCuzP2yw*X2UK{QH^Z1o3uB8uH?T5vOLKgLu4ZT97~EYv>Zxi
zLI<?gz2|2fRV!*s6F~d}lFBBP1*f(vw&RrN9dI%Rt$RC1agM^FZHlSNW81}~n+ls*
zaV8lsaAk)CuT0{JVD?v!0 at e^lVbtt at Oa}ul&=oIl%PRSep%lXSU+LUA?TbK5c(nZ$
zn$4K)9`%kJK9|(tT?9yy#$?1Pa{*}M9#$@_yA%yS#?A~SnQmj{ZJm{ufT%w(p>Bmn
zQe at nbP=_Z}{qYQfKvyQ`aC3H8bliRsO)CTBYYu5Fr<jaIE5)j5<6~#XZxnxub}&5-
z)$YWqD>Kc-cp;*}H}RMShTvmZIuJyP(_$^AM|IvllmPFS#L{DoKARu;tREz;=L)vz
zU?GW92BgNl8X&_H at xOWZ5n57KVfx4Ysr)M6<age#OHvHT6>0VO?An?nMz+YOdS4!j
zS#SF3q^C at X^ncotLrh10hZggNR*mGv>f=|-$7hfp(ipjgJHA^Fo^2=Lb$Gr{@`}wn
zT|&gU))$oX0v4q@`TE_B#WaKTGZV at 9N;0We>=Agw4fj69;&|8D^Hs*PUTCK~ax|<~
z>?b6Z>3ksf8xdx<00HyP`ni3lXO|a8>~USmLs!iRe}v8m(U!5Vn4O3)e=aHefEIUu
z>^C*4|0R#JlGFkz at Le}*^m_j1GoNu18ro64w>w9yR{mlw8(M_i`~h=S+OyxC%kRmY
zA}x!YV<pMqSo}HYZRJ!N?qP{}YBoS`k?k`$tz|?fZE?h(gNg7P7gI%()FfMPjMMDR
zdth&dAWKKvgW?&qNoMf at EFj0~q3UF%Knq!I3 at KI3eb4t0H*elV&B*2hBU{q+XUkGC
z*Hw5X0=TC5V#}kdm<Te240w3F+HVViunHAJn<+qv3VABdG<h&%fVk52rlJ-}2Cu>p
z;NNg?bB>1%M at _6%vQimz!_NYIVe1rK7cktbN8?n$bUE>$U86p&-^of~1YP`Qa*7a>
z^;?i9i<N+JIV8<6gosumOvg-F{=uNVBdh(2Gt6FUhFY=<m&K=PnS7fhVOJzp)cJaZ
zaxC^N`m)kBSDBjsEm3K3qWg=hZzU(vaKYL8tiF$O54#dt&#BfDohYWv))-&)twUkx
zGL7$A+ID#qF*8ambCm6T6py+zwm&n5gJ^lWfH|@p8bBiZeNt#C#b at 6*O|r%PumjpD
zx93_F@*ANhYKe%Eht;GByGnPvrNN=0sS at q6!8feWn1FCRsP|M>TsT0s!3;CN`?l9D
zuNwq8V4MP9Vvz?K%TR3?`}bIaIMKp}mm^d-ejYt~(tMh(02SW{BU5tfd5c`X-*c^C
zr6++sVQ<;vBsO0vXjh|xh~HMDU`z%+){#S~QIsOG^V$TJeGf0NaFMG5?(<b|5_H)u
z&(W<+XQ#8f3lT0j at s8Ii?+G<la)}u11axRr;$TpaRSver``t8wuvSEzDbk%}bc(|<
zJkLjJ2;;z$IttcRaMRCn*Ld6f(~sYMX7Z)A)Th~iu0-z8Gv!oR#pWUfpi+2JcDd_E
zrbewt5|y((X{JZ=bayCG_p$>UT`6^)!r)cY at +6*9x6bbOLC;DYbN3}|C;m;3Ka#s)
z_NT7SRC-2E%4oe&br;;R2;IV7!n>M`eAdv+QCLXiX<hn+#|1c!%qa at mmJu0eM-O19
zDVHee&+94fcU}A{qy#0-cu|&2u4d78L8spEikcbK2P3&8Z at x1|r1#T&F=(2vT#2|2
zJ53U8_tJak+XHvp+pXSmf`h#oe>wUtc&qG~1LKwrT{l=Imf%?lWQcp)_M9oV{NM%j
z5bF#s-n1yCmFM!H#=_J^>izu4+z7a(Qcm{l>qp_=jaM}uo*|XPQGLtr4bsz=d|JjM
zq_#Q<QI!eMVi{?j-x5UE(!5NZLd~M at 3o2hVeBLuaD~xMxPoGuVJ8FuIvN%3XQjRwO
z=E%NA>RI7ys at Kxc|5k0W0<@kEE2}QitQ=9smC>#+BE6Pq1asZRWBa+-tE_OG9(1|6
zOEoZ}Esit^0bj}aDp)hyKptLOJ*UEdFZ~*V{5w||P62Bm(Nz&xgg$|nPwXl=7<Xq#
z={3M$qnHvU74duLq(z8Cv+B@{{o+4p0t1!;nRi4)`zKp=h at v?}ShAYzSLd{0)`~qB
z&4bNP9fN;!j3 at 9P{%R3P{8g>Xii?s{`xp5Vik)R$tyag9{ekirh%qo))ccJs5*!9y
z5PagxzKJ>|<8Pmp+}1sHoUYnY)Gg(I5BP&ZFws{yiV$Etb~ij$(wbHuHuddjuOm at S
zHeZE;z`B7JE<(^BqD=o~*1{aeFtQZJkcQ;G(QoMY>SxLHs^{~7R0Y}^x^84iBPlrH
zFYs&%F<eLf&Z#_s+s7_Rd|+C63e!Z6FXolQ4;FAUi2z<keH(9<5Gc0gpgCx?SY*so
z{*b at W1wg-<jH>C`)aa(-c3UjJ_v6O$vUhLYDrr97w-WjDAF)FXE-}JN=9h-Va>hI_
z#(E9LdAKwXaTebd2s&_|H~-<A{TO-O%zx3nvG3n?YdU&wTjUSZx74r{O|Z#4?#&u<
zDrNkxCORH?L^XOIg)vF;CxH%#E014!tYP#c_+%!AHOk&8LrJ3+M4gI)e;>rRm$sQ(
zFGKmq>WRNrPn1urz*c`mEI}StTNOyFVoJAk?-Uddjmowod9Xy`<6);5RQh9`GOYb*
z^p~p0B;XjZ1x)Qr7yd%V%KC<D{uM*wvW_}uE3xOvFp$cCfmAv=%><{(L~4dv%*vmZ
zMnwVZu&({dZvRR<U>#Ojc7p%5OaFh+$u>UM>i^d)z;9XS-!K2$)&B3m!T+lR2PHqZ
z6SEr~mg*NB*6N2GmK+}ItC<YW_g*R3MBWR;{$7*(%NRxXDOAOJN>#r;n0zf)F9a|w
zcIt}dn at ef1(KyR4)C`CEUGEbrQ~r^J{A(XNa=4D0U|hP2HZumzdbk1Zq>8RuV8X>h
zN%JfyUv$M89*q<ojq$@D#mK+nRgNXnAbQV?#b}VkBMo{qpmDKZvtB+-Tpc+WHKe3B
ztf*Nj$1(Bn#}wi3HR1m}S_%ngmd-G at 2a~taq4axjDGnl`!C5rTOBJy_Q?Eav=~w7g
zeGiYdi^vqtSxZ8M3phqaB9tFgd!3#~`bvfMM;Qe*um6|#f574YJg0*{gc9H|R)~qs
zi|p!1S6xDz*SFob$w0ySJ4*d~<u$o#Y`Da5pY{MM)G367NU9I@@wCR<dB^7ZJMQmE
z<llG@$Xkqpj!~>wL71nmx$)$m4vG<u27~hN6}XiD at IbPsf%2}~&e*P3)UTpCtAFaJ
zivQN>_}9z8cyd)Ln-Y~2DM8-EJPZ5Nsd#+i_TO6s|NiC^cy&HQoQsX0no1}30$LVN
z`+KN=hpvC!9T_FuP#Z5%Af+|3&QQrq$A8pa3w7-1NnS};+_K9g|3BOz#vl^xXrD|A
z)qYRn|3 at zQc+uRh+P>1<_!_5Er^KDQNxXm9!XMt at M%BLWB2vCK5^##j?py=>mu>z_
zRM^?*#^90FBVJ9A{qT0iDIqP5!m2C9cX|E~`?XNU%Jw)5@?tQ%B4j21p0ECoyCBAh
zQlRFWdmBw+{ljvML3G%O?wpHt{^3O8RIm{y3dQt)&=r{oY_{XHC)4<!o)`zq{K8pn
zk^jMb?qKQTAi9^&KbeLktT-g^E};JhNlqnTBTFJH`~PH-7_jDYFk(W{KdAA)hx at mm
z|Jx`2zqz?2afitNa|1bT*jHyNX9FMct!MJ2io~B=G&-;qiAzCQE+^!Z6n8I=l=^N^
zhXv at tr0g&&j18P7`qM-M4KWtl%v<z4psUua8BVE63duNh2pK$t8dLn>)&PFHZf!QP
zpvm<M4(NK at eE<3ZbbZ;uVzfvp#P54&<va2?ipyeHYa8#;=F9!Q&)8Qki0>UZ&0#d6
ze}@ObOZnKa?J;wlXzO~w3EoTSed9i{z2M#z+ij%;!M$dM at v7!gYiFt3>P3<3Ky=GO
zH=onz?k^XFLanrW_ft>*l=La0rKsuH_9Iv4s(1ck+i4TZG58fCJele9B!c^!j29D~
zrVN^;SR0|!9!Pw=^7B5d1pmv-JK*O!ZWy*+fGC^bEAR$yVno;pJ0JL)?srN&;G>BG
z3-$ij0yC^Dx66uO;{;b&3w8eO*M6f-aRm}+(Xz~hL9hz&H-{J|3>@pEMpSY+)An|A
zvP2%JM%_(9Odlcle^dJ=KZ`1VO%T`YBj2Lo3~{Rob3&ak!q}pHavD~z^b`hfUbEdt
z{6Bs9oshTAeqChgmvw*cxDusvJ#uETVwd5Rg at R0Z_A<!=`B!!c!LM$eRLrL--UopK
z47b!pPNgK at Ro-7C;VZ|FNp3qsW&)Ru_tIxP-}5y;8Xu~7jh+Dd*-ly~_UGL)1zvd(
znZMqyq^dS}T)v)3nA95cZfQP?&hG5rILBNs4(k*sx;kh(AhaJi;?Zh-ZeemZ*kc`u
zmF%Om9i2n&Ea^P;n*DbLkg1{}^^%HLzEkzcUMpG?fiQ%zrn>6F&k3G*i%Ahx0~r^C
zXVsAEVcNrbr-=7&Z}}T%>S%JND~vUG!?QLlFy6hBc!G|`{a#{YMn#xSA%)rFVeN~O
z{pV%JRq|(l)YXYJa3?B at xM-Wf)PLm at a57n!U0Z#TO6$V6{XPK~4fA8;0+3I|Q#kGd
zzE`Xqt~;Rd^@+|6aro%Asu!8R55jhZy%Xf+c6 at X9l!V9u8xe>6od`A|+ at E(Mii5cE
z6*EMOfzTq+`;}OvV)*d&UZ%Zt)Xj?6O8f0GxMj~|5E*KHFz)d!C(!!l+*VoO_P8}0
zxHC0SXUBoZ!(!60vf_EbWIbIVXZ>@CHiKiFmjiEg(i#m(F<W at m_hL5%95y79iZAl$
z at QOvx;o)i<U8B?3Z>Cw!Vy4K0knq*Fe)s+9KKJjFQ<|0fTtDA-JKh#xtFU6zDm&kF
zUTt-zzGQBr`>ETE0jEaMWn-VH9a;Me{zX5EwjqQu7{vw!p~f>k?F`N<JI4}>{Ma>B
z9q^di#pbx8%i#t_nOP!1;b<7Ttl9rSXqW%E8D_JjsSE+#9yN{LLSo!+nr}_K(u8j>
z*edm##%;4XNzelEIsCbyD`!r$oe|lUdhJW2X=jo6XGcx7q&#-t28lerO at ZAREoZBY
z1U5xo7d?4D7vmx(I>PxjCLdpzx&JbQ*mqq;%@W0EMVOVIUkOqu;QZGJ7=VN@@z&)a
zYqzQLSruQi{cmiwn?<g#wioVw%-70wAQej^vtyn2mj-b~I#v2f<yG=Zt&G|gtOAg4
zQ$WCnM+_FOd`02d36aN9BGBj*QeTv$7mHq9Z=28-K%?E~BA9rm?kIf2DiwoHd?POG
zaog9p?R0n~a42zLVy?>>roz93lV=IM3MvugWks}95FN7HMn#WyD5dG_^uNC;GI{J7
z`)MYT`7#Wh&{|pK9z}yKXd!1k;Bgg&Sbs9Qq7%?$-0stoDH>Yobuh=|X){warbuY8
zSx~XOz-B=q)JLyTl-g<N8^=U#q^sc5DeR~8=zpK7iZjn)(Gz-MJ(brNjW^Kjvi&jm
zCC~#!&^5Nyu%(VA$gq*v_B%?)3f6*owtf_m-o|cnbP`Nx_bX?nUoM%b4(E at cX3_qa
z)Dm3~MdGQ+;=$mOx9w<rSFx#Gxj(T&(%kp!6qXc9F;b)=U-cggT*XREJLVTSsyfCN
zX9LIi;34f^EE?t7TQwo^1R7Ph*ISWlEyonaM~rX!aCvq--1jmcIm0dvY#6TS4gpK`
z4F_ME_%?&F$G&(Rj5g)V(4vYBTP^d2h;L&IV#18X8V897Wl0Hm=YTpKdhjc7=HOue
z^lOg9lc6`ReTy=t!W;SadQ%pO2y}U9`(v)s-f-SLB+Zh-+4pKQtTt*cM@(WSe}JUW
zXZxsjfJD0b)bwD!ng;@4(jn}-9?ujQpuxGP;C4 at 1(RxTF)6SPhohf!&4^9Es9g%Hs
z6Cfr^!{y5aB%IU?&)C at a$2MdBeZ6>rbvs|<qPLL<lpUdF_@^7;ifCw+C8t<Ke9o#4
zF1Xft&I#@g4X97O?XPMUm}Jn1-j->VCo5wcW>CVpay at PYK{HvSN|shyI$z=6d_^E7
zTGE7>`P-lZa>PWkr&{7b$f}n at jm*DFiJdgjL?K?Px4e96O*n1S*XwhjPj88!NqdEK
z8mrr1<2rW*e|9|^`#d3dgd%E2v+l<;ety`Zv+>mLY>dbHXsMz00A28BP9l_H#q at M%
z$okG}J&j(&pVKwMxXrs(>D_g)?YFlAGgW?|eDC9Xs7MzlV2RTTv~QS$OoV6TE_Rp<
zp;h8uc1YmQuN3B_QBF1Os9A$wU%W#*+newbC-Yn|Ll9W=RMuM&f*#uLaFN04KY9Kh
z*D5X2&o*Q176Z{9&3ETBDrhNM<=XnpQ4S^o=|*2Xxo#JSSp<&iHM%dks$xVQ2HVc3
zBga$Q8x>MuqdBdcp`B?7FVL0w!Mh_VX)FNX982d__h{Yr-Nk$h_oEc?OdHT`#t*tW
zW(+z4d|5gPv0ZB~^z0cuiXUn0vBa=8 at PXJq+QlfP@~*vU<Wm4oWb4#KGo@#s9SNi|
zw;paKMx&jsX-qG<G*+@%4Djwc<1y>LeZ^#Kna*u%mk#J`2NbvZnH<{kdmUqW6D*zi
z-5wqo26RWzrgh#Q^)IwXzGCLgcNk0>hM!2|7#M8;sqO|gAY8014A7_?+ldI=b*F40
zY}~(TKB#Jq)bvm1_9)Y^lK%wOWyvd4NJ;Ns=JM>$JYRJ0dWyggxmR at P2}QN8N6oyM
z9+!Z)jEOb+eLf<-yt&g#)yivQE4?wSF%85{=ek**vc5djlYVSByMHm$>|!y~Xe2OG
zY9TZ7R%fsM$7Sv{+Gp{L5sA>(yLB!{a|VvwKG%!E5eXkYvdv6rH)KZoX-*%sT8|Or
zuZLL-_}Ytf7V93Ljn!F=WKL8ZHGb}#e{&n1e9vsu$`|nBx;??J^7`*N<6zOQ`5?+*
zPq(RFZFE#5d^5ecMu*S1hmS-(J(L2yR)ay5>f{Xi4ON#T$!O!la^xD#a{O=uvMN_W
zr=;%3D}0;Qs&u0UPN+N+BG8I79;Ymb#~0~q(Y4wnmIwcVBk*u}6?bu#kG^pyid_Zt
z?$+^a4b+$Iz--X??IY=9Ch#IjM-jw0YUmX5o<zte6<|M$d{-1ZKT4bJ>yYJlnP&bz
zcsU$x`?Jl2Czg%y`NlKrjhy^Zu6e@)gB#7G at 98y)VKMV2kJ&Ac9UzNMMaN}*mZQw-
zj+<%0tFC)+P0!6DSL-lmEy4<Gh4omvRJvZfPgJQ%r`T(y3|RCWej?$xQ(oQSI`{n+
zLi@^I?^XeU-6>)fD&66vUoYz$u0z*z4_)7DwJA2JCU1`sxvkGBfRKj~**%=5C`>aC
zRRlFDLgG at 4eWzgF>Sw*(A0^cfNk*6>@jZ_VQ(Eu1708p_rcr{!zS~WCKhbG5lDsH<
z%<~93nl*=(ktSh3O!`Qb_MYq6WLq$|{miQuoU4EF#p}nn><<l{-cuBNpLh6fA6BhW
zs=(>?)o#6sIYrRCUc2_kZTwPHq(c1!uXX%QPT+ at o!}ht$Tn2 at p7sUAW8I#qF5q^mW
z7k+!0UZ2)6ebD=s-#<Ud3`lwMJ>6f&IG_jB_Pz?0SP=E^jNoY?3i6vo-Y=XXs6w1d
zmZc<ceemcyhoavH9a{W^c)PKS*a<bQy`*51N*V=$K`+t}4#lKso^I8RF!L-swgTkg
ze9HFy_2&AJRpc%;?ZBh>U{bG#cHLGiT>>84Ln3qQu}{0cm|jX at fl8O9XN!BEGF$~)
znnm-vpYLVkVZU1urZVMR?`U!3b;hnx&fp&V<iA7@{u=hMy~B-UN66#ooE6`nqPH?G
z>@ut24h$N-wo;Chtddyw?WxdjnO<>&`1NI-|JdJ1v&lSiuP$EUk8SY;r`hO9HD1wb
zmCsfBhLv-*^dKvpAP5VcIL%e0!Hhr)v-ZcT*SbraN^g$G0k;??Rh#1gvDcf^&q&(?
z8CL-#^$CWJnfs}(F4_J=LXUTD;Oxg{4(GGhqdB46=G;qTlGFH>`^)7I4aLw9L5B0J
zpConE!9U1A5I^*Sq(|w9nB6${?Wh38Q@#9X*crCkc-+0uwHM-ad7aj(mDx9QAQFDu
zr3F9rY_c}PUsutW0yqxzYQJ{KP>XsW4bhT#2?{uN-bahh790Cr;JS^B@!;C#>o@#J
zc6)g?kR6a}vNs+zCPDEn&E}K!@dH#Sn%00J0TFb)o02{xau at q!dSL<tWv1I at 3O(Kn
zc>txNY9%@|E-xqF&h15HTdBK at EGx?$=Nnd4Uk1kGf|LrUFF=*@NyDBoZx~M(D-Y at i
z>Z at 6Ql|gjR;pN at X&_c2ce$L6#SYJ&kxwmKk+&qt(j9a8Z#UPK>>!A+N*?~tR|6#A-
z_ysO3OMQ4uJD0KaFj7sb-0fT`eo_r^^yR>D+&<TXBjt5oY&04%e=5JnkKQjg+c6>)
z23M~^uWx1EBs{i5*DTN)vYxt1u*l7P{c$?NOi$rR1X?)(_hPHmuMrTNJN_)!u4Koi
z`N*Rp_|VLx!arwtJ<sTX7!g1hzJ8 at OwCinfvAt-M#U?`nEZA?K5VqdS6cBJ6I}VEy
z{#a!2bXVjNIOwzJyTO^yiqm37ij$Heu2ORmzrSZ3xLr3=EjvOetwP<t)xYtTHp3!X
zXuKY<%<WmCA^SCq)YtU56+%L5D3>=mI~TdVZ<E!aW%nLbcU2n~p686 at l61ef88%A7
zy+ba0C0W)E11yaTqj-^k?Wp<4a6&Bdao%mk{AX3Kzm=%X(BW5hSGm{BWy!s=D~g{s
zcFBi at 2I(P_3x938q{~C=TPrb at F&Vv>eAqd9F`1}0G6UB5v>kv`ho5?9Mn<G5hCJqt
zw-15D1S+up?f{|W at q^>*RB>Vd8id=&2dEmYuRKldNyNb8f%m)TwMg8F2kGV2u4q|U
z%Hxe|_#o(y-Qe721YrAw%<_cvk=v2WVok0SKcpcDO`as3c5{N!k*+`q)-L0wk~)iT
zAxFD;GsnvbEw5^uM!`R=vvm at og|&eDBLNGU;KTIb2#XlLxy?6mGWK;VKE<P-xMr?>
zAD4Vu4?95Ud#*tC`-^Iw{$t|%v3a&YiB5!Qk%wS1#F>sFDyUl3oX-1rot0RdOkv91
zF<O_=h9vEeSzK;K_%;%vGHv&bXCRgtjN*DRw`adHS}Iyq0tuveM8XL85AGpoVlLfk
zjl$6LHBuH&GIz_LG<76D`(UX#imbI~q^mKVW}ipy?93b)+yEk>^p-xlK@!z0HmF_i
z;bfv!5r)m!UpyFT3|ojuynm8&yxoYa^>!u(<Cdw%(|9>Sa>dBWi?cj^YRSJ<87&We
z&7I6zc50nP+KVj*@_U}b$~KL|O(wNyq}mzsy=<@hkxxMIer?UWO>ReF;|<y3b<24M
zgutx3)=MvgEG;<2Ho0)M2Q=cMao&5)JyRMMw3cBL-xHHMf at rYcCEs2zd^E80!S0rK
zY{hqkNw3vwukNUVhIngiIBDx*WdXRCNzC%$2;h%WP0v<yndR at FHwKFPo>H*Xx*aV(
z5w*s>*VlRc;8m+i9|2dX-{5NOSMkJoDg^JfkktIz)$;nogdp_pWnfz`r*s4%f58Z&
zY!>xNQ7y#Lt;_xRF1F=xTH(_QejPb?cCcXQdvBM)my#@gXlwTEd3W6g=fd-#O1Bhd
za6y7{IM97CgF3CN)_D{5#}va22`a*Uh8`DOQfOT_X>H*1mhzR?dzqkU?EXC8*H{Tz
zz{{3kV+wTPpQ2L}^n{*y5}s{5nWxXVn${?8DyDCWT-8ur2w&Nk75rrm(4b25&om2<
zKYNIsNJOfzPFjz?l%K^nH+vqX8*UW>e#Io&uy@%A1J<2Aw)|1nE&w<e%7 at mpb*~1^
zd7N8fYL^~2 at TIWsED8pHo$de~ZFN+JXF*v>v&B4E$h_;_g63KiT$uS(LYg=!&e`!2
zrVP$n_MtG)48F83uh>9_*w4M96qXH45XSZ;D*(&0J_uW&f3Ko%3O1ihNXw!#0Z3s8
zO)1YO>QKnSDb)&G?`T+zF&2re4)cih7t#Ji7rHV%R2KqVV)L{C_Dwyfr0 at nF<hH`a
zz3aG$2Vp$Koh}Chq)hd_!h>t=YLE#ol8S6oH4JTzbzNQBvBtg(Y3{bTOteGsuzBuo
zl-#c_8jCT?1S*S@&>n^qA-e&qeqM)I#4GEI=?E0xKUH^t`AuAUK%HxZc#nmustLRs
zDF+m4**;tT2Y{yH(N%ItuG at qV%iJi>+_u;nam3+niU~KPg9lbxTU=Gm8rE9z?Fn?~
zC3xweD(3!kTT0^Lw}~C<v#m&$UjKqNGBMXzyBaH#rf0P=uC*Olc81GN>%xJOlo0`^
zOFe(rZ;2Q`1;Vuzjoy)+PqogfZi%a}Ak!-cWPP9?4_HEYbu*sz9k;xyuEAWs?qKDz
z?H+f3nZs;8pVIw>Rq5AhqMJmTJy~R;^n3=l<|6M)mc}nWwCRsF*?#&vGW>L*fVJV5
z5%KY%tHsM}C2A%(^wmD0V at 8-esyW3qKH?b)2a~ye6+q&xc;YH{;xKVX|0}b2w^p<l
zr_4y^$keV%o62Rw*rE5k at d}v|*-+D~DH+mqw{hVaBEAjhd|q#e8D*xh+oC7`HsY;*
zL}K+Lq(S#Hf1(XGxX>5-<mkE5)l#iRF$L)R^<LJ?H;P<<rBRw{p*I*LA)#_)&P<s?
zY^Ggt%HOpxmV10EfPgAo-+M*zeMapKXQee+M_Ktg|DCuz*0Ao0e7NdFZw+?qc`DP)
z1}>;_EZ@#Sy6;iGVTF^2irje!Hw5MH7Ct7GD#0-D#v5>jgsP0cz^m5Nt}OKw`T0jB
z<q-DF{gsr5*6&=;yTeUD`hA+>2oy3O+M^L<9z;-ZA|YVF<Xh>F-i(_$^_xlI<6J-<
zZ**L<v7+d`p_+_y=88s*29B at T=6ONVb#)adfI^KBnpxgEf0D;@l@{@C?p*?BCGr=@
z5-`pAsk#cy(<m`u$klO0C}8P5KyNbsVmcx at i+vG41c|ggnq3avEGkP8_`O4DfF;xJ
zC at sy(hwTx<L5a at F+|hCg9W2wvWuF920Q6p=_Q*PEwj&Y<Y!QTFBg_Z;&AmAD+SU5R
z1uyr~?;V))a$cEGzg2o48wBah#!*Or^E6K;Ca+sI?|~D2m(%6Q{-AWnCflJ>JwJQ@
z31rL$$DNtl&#2>4jd`v~qqy63m8I=x+ZZ8Ndx6U|=`WzLR3KaD<HZUm9ItQmao`QO
zKqS1mEmC?87s6=i;1Zn9WKAfLJ$$)oIa`*bbn!z=DXOyCPOChXA&GGjWA20UQq+5H
zWGVD}p$_yW6Q1)zUBprCuhhL|4U1LQ`z<2Iyb9`zMdv6>0aS4p8<XyB2r|?M8g%cn
z?_o8ua`f~0HkG3u!yEtu?w7E8Gu**=P9SS at QIIqS1QmL71bD3+TU?(uPAl9foY~_$
zDct$FGPzIiU$X$S@`f4|z3vr#XiVlQk9Ka>!M5_u*VO^5fHiNo621W+s&C~cow8?3
zO?W2mxnq<rZP%XX-|N4OTP at q7QWZqDL#E(1>0O5A$&8e<1o=Gm6fz7bSJk_Sx5``;
z)7YtHn~DIf;wqtJJl+bN)h48dclNVoR<Ynr`>meCx$5-|5JV+wLN3HvtJ+w|nKVi;
zFK>?h!LRBki_<I)wR80QU3=19b3b&UbJZCb8-vhVc8Jp0qKA`ST#)y7FIX~IlthS^
zhy^KzUv<=;V%#EM^<8X}bRe19P*#eaX0>$>seL-Ye$H7ksw_HHZ4r}y=e|P6iqY}=
zdbv)y9ri~Zo`%LsGrPGG at Lel_jwZPm<k1^R=x at g8?RIr|amBz;X1=d6#EuM!m(^Bt
z`FdHW^~{~sEBnU(;d)QG?u+;B&UTE&V?mGPL{^9jLC~A{j=QMGV}Y|Erl+OF5I6rc
zfdA*m%Z&T(WAIDFY2~V_DKUx%1#f=8eOosH5S^QZ;QO_5I}C=%(vOdy0S-`<+eA=d
zrC_b^^#_VVx1h$9eUF<B0vpD~=Awen`-$1-!hM>%p at zC)Xv6^O_tDCZXuF~?rpP(p
z<x9~?mf48Ik3GCa$>O15ynz^&6u{nlsXXqzg*%k0qdJB8dP)9H?sl`+nSi8hcO^OI
zq~33SPGfRpIsHw`%`U7Ea;R|i>ojHQ6X~ewgW^G6?2=OvP at Cp?R>#)q2%Lq6KWg><
z=cx=xFO$lV@#i2JU6d6$66Vo);o-g;2K-9->$0WfGI-l4P2~IBFcSB&1tRn37+Sr<
zjRlS*$q~$dH5L;|;rzqKu?D}!y&*5T<<N1MG;a==pV%o>Yu8VLbD?-S1GU%_sKXV0
zsNc(8=Xo$wn19?qFI+eBX^9wWU#~v*g08O~Q at d&|sOu(CN17!?8Elh|AGB`00xn8U
z)Gb>9v#M7z&_(VLi;=?}7HV=E^}9AG5GeaxP>C<C9SUUho8InbBAPSMmK7UJEbe65
z71!(g4$2%Yg;+TRMYl8-p99K3R1R$?HwWMo+6Th&(bykZh7X3+679LDSTCnBdD|>z
zR$Og;D2|i+v^qj`j7iiBPDd<agnqaO3>AJwPd at gBMS145X23z$u6|pw0?j>Wd4v<E
zJL5Cu+vC(9v-XzkEA^0}kohD at gZV@mx(q{chTNkDZ#G_r2*$I9ztB$~eb)lG*+&ju
z_j(*bib<e<oSab+*=?ixK at 2)P0gD>Q^U6}}*Yhy*{OVMTUcvifONP!XQMmLRFm3wC
zdxu1Q(AF)n7GkZ#<-W64A3`QhvU9NDUTkq%shL71e$FQZn_FlfV00vNrCP*hz;h}`
z=vT~D#m&P%#Iy~Rc$vc<Ue%Q=aa3=skx9E-71fmcl3{j#DG-5}==*9_BXj57G=<4e
z+~L~JF$kF#G!&JP&ryQ``yl;P^bXn?^W08kG;*svUbD&3WPhoV%l^d|sR**_cJL1h
zTwAJ=^Zn&{_d4c#AMui)MjnK(c_ERb7xN~BCHIQV at m-iw8glB?6k1hbFz$={l{s~s
z#p5%y8Y{_GOTkK5`f`$^zS8Wfm7C$qpNkohZUjIFRB0(te(PQ~R+_jqA4 at kaWKYl{
zLP{`VzB#E9OSRB4I1#T97RfiYav|M66SMkAs}E`AS at T{6@@{;%I at L`Vyq2a_nY1m=
zc5J6W(2$}=CQM at ci?e_c$z)rh!Ozn&I5nYkVbXGURViMwQ3SJNqycxfa|XHjrf(Qn
zoZP&01EpB1ZD0ubJ_;)vU6tr$V{odKLF%*o`{Gn{p3=SIY=3>p4d-mtQhX$w)}v(p
zW6<@f75J2qIWmIKC*5}@ibo)9+%ossNHUnFjU0E8K?_;xl~INqzBV+7Ue5$Mq~&7H
z;6pf}j^T-p+sX;;0!vo|)>^u<Rk)_x#Vzpe4$=Y at mf;NlaAXJFxknc?jV9n^<=$yp
z_hDoV>;cfF0K&$atfR!^j=ZYhe=?I<Yr`gF$NAcpCtdk2%LE^-Npl5k^eic@<8tXh
zoKR<$K`XKz7qW?|FGJ3wsSS<m`026ip|eLF!xrKS`wnAmY=xG#v+vKq+f4XXhKx^9
z8w98ElYjSm6LFpr7H%|L-MwOSiW)<{QiYouQ|6UN&EUu{=po*v&YS1I&4fVLAM5X(
zB7knqS;SS%n~bi!rHUi9eR~_>H3%}C_sW7G6%*kYB3*A*Unq=Tdd--IcC%I&9P|Q>
zLA{Y<>Xko?o{seP6FlDtAX16b1Y&Y8?(kjLc&A+DsHC at BTnHB`a)!BV_otzYc#B+G
z07*Z2T=L2Fp&GSO5BxAeo%pJI4>TG+t0hT0r?1YZJbG|H8e!=iEx=y~{i4(BQGq?O
z-MT%YQONQ1{2+5HvnvID3*%aI;Nhu$7K7Y=J!YZ(!E7}iVO3j0cRc}jT<ZK>g&v{x
z8J~T*;9)+ at CDJWo1jbQ-*IH-22`XvE?Vthgaagm8 at A2+z^b>qxh}(;-&|kwAWS#I^
zWrb8&JfDW?E>X^lQ8CrvrT_r;$@o`1Z8>(j)keS=oa7v)H%#RRSX#RD&?K#`88*p<
zAj(s?Fzz2u5r|$d&(9RAxOHn<!a8%D3dwIG?kgY<w+J^mudmlyYY%pia%c_39L9c_
zG9QX9$?p-glr=f7(s+)nw7AW*thRVQ++EW{u5Ze_C7Qa`qif~%-|N!6SBUjowWksU
zW;07SoSVt0%%UYxqkdjeWL{Rbsf;&T{+8_T37AG-OgR9|)@hl68t-hs6vZMtovwlB
zo>f#BoE^Q~<8|2zUPyVz3a*r>pKluy=y at xm14u0PE0~yWzg$`tyj<7 at j|bdwT#B0Z
zo$i8RoXR+^`O>dpl0bLFD{6ey)+H%|tx!g)!Tc{psJQf~MQx;I<9U$jwHo|+i&d2!
zI+!{VgL>>SFE_${VZ9WI6lSAO&pOaT*oE%rG!9rg?<g7-%Z4|`#^Sz at 74vj|D}4?Z
zp$L86kR6akay~s-eb8}xTzd^t=zp;<yGw|jv~aN|GM_LanTsxVM%AmMgUDXwUcKKk
zZ(Pg3njP?v7S+?*DC?i-zC1E;!4S2ZUUnZ`>JKZTYjlt5XOwG;G`~t9F>5h%Yb>|8
zneE~Tg=iyfxJ!O0ZEUNb=l48J+*hS=Gr?1du-avwwz13L21wusZ1*cEM!pj06}G4G
z7nvgR9VE}K&m55+-WFEB8h(-yYY^c9xw|DsTl1>$+PUDlGm%&6H>`RN_|;N=N4=qg
z#3bfXuLuMxeC=OaAgJ0>qWOW#qj}T7si$Q??Ha-Kn(bzpZ5+Z31vNZ;tghLLUcQBx
zjY|2^OX~2g?v$={2_Ft|p7_1qmRpj>AO5OFBgk8Ci{R6(+3}idSg%t><eI86`q>K<
zL`_e1m(8^g^jej0uX{DgHxg7{-oA8INu75;SYn!6Np<Q}8p*tBh4eos_`t*Rex>t$
zx)-tf>bBBSnf-j_OK|^MzD$hn41cQMwN!3%QrX1x>6z`^?O+2pU<rPyT5KR|q%kO(
zeAXjV=zZ|n!`SKlx60)zY4JGwY`;s}GIE^j>)R~nH at lFj^hA$?X)C<q^G5sO=h(^n
z3KH4Ee&%EJwN|g!jI_#M`RD2b(09xXfNL@!Sa%Vn*wwX{_5*4L*U_)xJQ#GgTyDrF
zdiC@>%dY$k_5Th*R-gxLg(|3_H-1 at wq}+7mrufI~j~1mokUZ)ioH_Z=KfmX>Xc+~2
ze&X<oj`OPPSoS}k3LEcncX~efq&(|Z;m*}rl9NR)4THCSt88m?>HE|=ua!7%)z(tS
zEv|p9a-&4zjD(zm(Tv7A*=6Uv at reD<H$Uid)8N;gKD;b+c839vgCreeH22E+zPr8b
z0JNPB=93*El|hxVXuE!DSHt?ZE at cLvvZ049DJQ~aI?vxFF}^H!g}0-M!5bQ}x~kc%
z#XR5FXwLpjtj)YU?&+|0d*QyGL39}>L&D84`>Axck&i=}ce8ilC`Ra}MDL5cZ4S6d
zDZ|>>=OkpIp?E1cV{KS8kRW11$|r`=w#HsX=)!W8gW==;xyap5T at GZBD*my<n87e-
z!p}C%`;<Mu9b8TvWW9Xpp+r&T2AVq}SeH|@g=S-~64RVSv>F;}g0EZa6%zdcmoXKv
z?dp)!*kHTfktsy!Uh`axTVU(sLEu(KWKUhxjF)(Jv}8=Sf4aGJwC}`U<-_?UhvVc#
z5ao9NDaaxXlXpjY6*lz1maZavEqMsR5}9`KfYRvBX!L7_<)N<ytgm>?i=2Lmzc}Dw
zrOo2x<qpNG=ps+qvMl0h<b8hOxnR4OX)z`z7$2KB>Mq-Mxnw`RHJv9FNipAfp}m<a
zq9<{4>NnMgH^7|6wr%6qx0~`@m~6z&<~>tdYGpfzd9d30eyYG6Dk1Xls&={dDv{53
zv%d5}tL6QVJSp??vd&5f8?YYF^qZ!DqB_Z>AZ6ie9E~PNqdiY8ef1XemQ~u%&tJac
zEsQl%sY+%tNT-Z`9czbZ1>U1Y7v}3%L^&5$7tSXun!vfQn at hkH(WoMF8ZQVV@$Et(
z6 at DW-gH$fj0GTBBd|Y<w1l0SR8R#v_=ntS0a>IA$H~5}K at tDucyDKHV6;SOl{QDp7
zEMkU3HzosgR%lweS6ls*p(hk!37X$XLNDY8@&!IUwVoS3UTqcFB(Gw{Ho0k(Ehi7V
zr6Q>9&uNQ0{XPf|G`5!XJwCnIK&-sL0+fs*66F=8n#~t{XqoGL#IzMVny)rF^dYWe
z?mSc<pzOW1p3KlU*>P$;(so<4O5vT)b{#IYy}-Wg+sguFVQ(KVY3Uf7J={ZDm3-5*
z{k|sI^l9ll%&r8iw~y~)A*wIJqVOJ3hf(YC7yGdR(g4ddqdUx79=7=T$lwGGW&A_U
zd_M5P_6P4is)J&&pcmG#a1dp5Iy$4mhd}1kt#q;JCA%8%_-r)ICJVO}n&H&J4NDeS
zVf?)btzH2`-*@AN!p at PGyFKV4oR2s2MnwUg5@Sp}>#4|M!`bM>mqqx_y_?n>anD9q
z8&@$eyQnuMuc;CbB+DuvJ_&&uJv45=t at z&pl!3bREmcOqSuN`@V&wU$d#GXK5l^jF
za$JArxcyX~6g at t5t0<BmOUD&Utpbjt$4c!$s*Z_YA5!b|+AP5jmEEZ8!_O0=zj_ct
zJErRe6;T9S>`m(@P+bt#*^6xVJRo${>x0(v)Pf1<Ld)&WWk7%aYxf;t)2hGBepJfn
zhsMXTvC2X3k;<k4|B?%l{od`&i7!qvF`k#z8TAS(R}IW2eiuo=^C_88qybW!Xg;4<
zzkusVS!9ithfu<gbJUl7=2EIi@^%IgduU|B&D37i+)iF3Gpj^c$G(6m(5Zzc?kBAI
z8=Z9J`RLcK!F~+=Xq%MeN40tT^WlE<8FbyIqXEJsa-wR_cs##60ZlO>!Lle~VEnr#
zPlSUjbKHbckUb^3sbsY!|4(~o{Z`f5^?OAW5b07WDQS at I2I=mWZWdijK%_w$q`SKp
z4bt7+-6ai+I at 4#n-}7wG{s+!=z5KLT3+B4#U31)He7<AU2Msr*zYLtTdfn2dn4!Pu
zJYW68yZuIYHEH1nOF-jm)Y$CGerXFMlL_WV<UnE!5lZMp?p&k1Ov}3a<!tVZG-vqL
z-XwK#*X2?}Yy@>RaxP=wQy_-+O&+f~WvfKDW@#XSr(f*O<}j#5$Lz&Cc`9eXCUuU4
zxW!S!qlf+KbDTH;IpGun_q{}N+eLH(pqK$F at K3c*)HyEQF3>k735SVRprhJ#NLCVL
z-kQsPGe(uu-)>eP{O+#56Nf_<9P>k&5NAkl24l*8M(=*W5t4L3g-dt(a7*&6*jr*a
z^zB8ReR0Y=T at w`kt3`0B**K)wow2d&j`K=2*YbGzK}9RPc4Mr+D4;2X#JoqzS_$q`
zlOeiYBZo at kGxOzU_q3Debz%f`OQ`wpu6EwWEb*LlL`CWV&%q{qzN-VKkEITl!#v=G
z+!UGPl<Ui3-fgYQF1IIQ3z4*HAC`k;*|M3w5l>$NXyZ*c-!bE(bNj{69JTFMjAv6@
z-N)nI7gM+5Yks#WwjdS3yoN{juvx2`qc>Ohlehrc!GBiTa9lo666~(h$h|?9sS26O
z5?4Iy$$Vsq)q%#&nD}y6E4W&Sf4Zn#v}`kQ-L0$hh&H at l@kaij-QZZM+gzYIoNT1B
zk!<FN4DPQoS5{LeUv!O*anHIM|8*#COuG6ay-~;_KW6H>v}2~w2sZ>o7(i}UbPu;I
z+J0In|KaP1P~{vEOMQ1+(byV=mvFHFl3y>l_3Xs=!+ufXh<aY;1vJT=XTa(`T4iT@
zxtg7P;72{x9C3zcn>*L-9<qlkCsKoMW4p{N+pY3#ug2b3S6K8%!-)bR at d4n>s%6;h
zubED~XjyI7-gMHHh(G+Sw62$$%%yhCuP=M=r^A%GiRQ7N`B3cM=Y&%^?wg5m5xYoJ
zZmQVZreck>J<O6?BE7Z8A~BmzEKe4$1GNQ%A0Ptqnf5Ek>1DZ&bs^%fZOZ4cQ`FWy
znH!-k%eywaGn6jRUy{9QS`Xz4K2LAoR)tUv3GXAN%XtgukY>l~dic7owE9cs%J?dC
zEbL<dfsz5gh$}(&7bkv!ge}OR();6(EFJzjORiKfYcr^L6|f47+MACcDKuO!-fA>K
zFQVQXDF^fh(<3o79P7k=Q$ez5*>gvux9-8+ at x{?$3`CyvdVzHkywQ8PCP|NjK#9PZ
z?Ty0Q(Tkljz&ShY4Y<9R at Z8TC1QHxd<gxAe6#Y&$t?LHGw9XQEsW&>w1U`)3^4e@`
z(tm^UD%9;<50eLu0oVbH?q`NRfT++$vlWT~J$P*M4eHX>F>5RR9>_XkU<l9zk&#;#
za1*|=nfNAtQd+{5ucFiD<XXmAKeMSlJ0GH)u4BKu?#<)^rQn?q;DwsV at lqJJRQ5%~
z`P=MB-uS2N!MTm423lD}X)k>~qut8O40Y1a><YzScR{v<(5as~jYR!uD#{f-UTU(s
z7V%cY31XNQ;7iRZ=Q$r~cN#Fjm;ZF<b7I_lk6xH-=cd0{U_?zqAG0*I-iZ&cG#-RO
zQYU;FBzkNR1)+LndR~)xh-;gp-eg?eE^>G<TbaANSXg5=S?^dh2${Mi#>Zth4VSNN
z3qS*LaeLkvL2kyIPc)c8dK&ZQ*qmS9Gj-nV+Z50r0libn0sB7A7ZE$b7ZHbj(_nw9
zaNA{_!nwZ$LbwT%XKb~UUJE(}w94F at -IPPM+Yg-6z3UZI^=Vc!WuskBSU*T?QTVES
zoge at oyxHls`(?l_=`EMKzo##_M`8c*?O_X-sjK<%z3fA)x=^4aI&Dm;2%M3t+JR9a
zPZm{S;nmjoF!w&*8fHPpXV{m^8Wz+S%ocMK%+<Fw4I!foKy(JcQ*rKKXpY}Eqa%9W
zorrET*(BXdje4o+JaOZjD%2cy9p2}et+r6zcE>!g%*r?V728Q1m*HD1IWf(3_ie~K
z989cX*D(RWFs5XyH#WZMrZj<4$GM_}x1|`2SMf;qP>-=I8ME4tQ~Oe>Z>T)yN1Bh@
z$|#OW5KjCFJ$x!d^+`cFb at p4FDb|Us_h!-k;sp5m#bfJGO9?U+-_~f>|AczpA;EYM
z;7w%`Q%i<}Ge0nAr?~|^XfB5ps1!#kJKxl+qiAzEn1aS%-E9oCV{tL3jIDI0+xA2W
zDL>id(9PJYDV1<|vg)X!w+IaxjW%vG;FtUZ0G8nKs=L at vpk4AAy-d^DZ$p%B^1SC-
zF9)B!g8F8QErhcf3h0lTvlf+?34^<mw{|~nu7d4%K9Ji&2tvhYY#zViaGqY2Nuta(
ziO)*H#2hzQn4#>=hHvJnf49?}$mw_aLq{PT{pC37lBQASnTm`p#)YW*!bs3`#S+ at -
zf+LT at IViB8V51+AKTuS%(Z>>D%c=K*3&o3M+Q*FW4<`6EEO5wRcND0oagjv^mArHX
zDHSVl+{#D at Aaczuc$e2%;mZ!#clI-eaZp4H6$vA%ZWM6J5=`NGk)Vw1qW^KVIas?0
z?{*W^B{{6_`PSwFr9k7Okn3HR8V&@q8Fu3CsRiP4i?-3AF`cPvTxQ5 at rHRR+%*qQ1
zQ{CqTve-DpHil2bH2=8M=+|E1sa4>@TvKF`Ms~|F(Db-o6l`d~dz=tm+?bE0CWy$_
zn*@~anWJagu#b0CHS^LsXg1uH_17<V;k`&w&v$YEXr&yC-qwoPO0nGQX8CtEJ>Hr6
zoiB|OubTmfEvC+NkIE-SM=6sM&F)wV9MNXKQY}1c)e at Tcquy3|#-!cn|Gd}}SO|KL
zJaVW{AS>CEnb?BRXtF}hnouO!*}ZghoE(LYLb5Pd_73puST>pWB1m@@{ZyWr`(KcG
z3QyQI-xr!&6H4$`V%tIZrwcZ^M!jI6L}N`&>COu!N=TrDI0149B1-7_^4e-M?$~iE
z*MDaB-%_Vv>Rb4yiFlO(yS?DhrdKZomHMX2%l!u1<xx`<@{FS)s942kbJZ5!2SEp=
zCub`&cs0`%$JxRf6q;Ps!r`L`{{Z5jcyXfw7JrYRO8_7!D-NfU7utGI7f2yC>QO at L
zLSs&Pq!yvWwf)BS&|Geqce}YVlcUgkj&DZ~h;*K1bNnGj;2`?7laD>+85L+ at c4IZ{
zpSlpU6+y0P8e>&e{nY2wOnKbxO+rRY_g^BX|Gf12fN<?<;}hrIo*3K4bI|Q?=fjcw
zxteS>O)P$f^jUANr)Z$>iyPoiYD*>Tl22AB#OKbR{{yq<f2Ro3%)$P$O}ve@^hueS
zqBRsAJRmSXe|>vgE-7grAOUzNy=5pH_Sep8*;l!4qMaC1kzqu)4r(#}IokZaXg%d{
zq8WjfP^JVjA&fzj#W_c!=a(B!yA~5g@$<+FQ~h$GSg at gyvyA63e>8#%=0wmN at CQ3D
zVU^%?ry5DEs8yTC<fA at C@vV2<Gpy15x`h7}TOjxA5432^=|2>IJ>*^zwlTEPTtppO
z2utRa<t_7Kz9G1XLY$`@_hnF>X8pQN6}2}xRZ{_GBV~GOibHAmf=Y~Ex at iB{sotRm
z at FUyXD1CU|eRmyMhDD|F!BY(-l<#o?(=<T7*7RhJ%-8<nB|dNZ+Z%K~$fA>`Vr~{U
z`<<YYAm)&So$N}hd}P%w;vfBz^J^Qi#Cp$Y#psl}O?n)JXN?sWq_Uyb;AAzW9qspG
zs#wzmIHvBg9gclyoOzwV29md152VK^OtF6rjqVR5ve}5F`^*3Ie}yUV!2mEJ>bJ|N
z9fs7BUI*j<K;xp!Y%v{!<Yh2*FzeKZCG{C$%4ImF>^n`A6Z3cA3yke7jIUN&Bi^tb
z{i#axdWEnt=54Sa-nfJdZSZ;0G*v>03)4Li&t$OXN3!Iz`7~-Z61q55q77E8Hb;mF
zn0#^<`OP}iSPY#2kH}j1Pnlad6O4zllHkt3FgShXC%rD*Iy_9G)llzdzpBrO=0n2u
zVNJ{yV4IbnQKDME<WXuo;Yc~zO#fV92XZ)=DK{jdRJUqWUdS=*MpXa-i^ePK&7X^g
z3{_V|1n#F4$|^#INxi?vVCL6Gwxa2PjxSaRsnj09kRJ?YW29WMR!QNBF!H(YV7o1D
zE_ZgujAHc-`gT(k);CsqIP^LHTvJa0RRA6yR6U^gU6a2%o2V~tPQ at TA)}S9!3$Ckx
z at MyG_!`jtyx2rYgKnL|6CKi{3Q;s&LGsC=9jdrh7!O|T!dtQdZ={|qhACs#O>1m6%
zDK-Zwx+}HInT;jMF;cg8X5 at NjIWVup)(Ci at n)w0 at AWU-MPQL<7*wu|?z=LV1QDYXB
z>IJOwaBmVm3xU!<FZ%q~Mg5eO)?8hi*c$677d~JG;>J*`vbH=v_^a2N%4gXOC-N;z
zC9#hp$ewI1<?Z+sV9I2R)k@@~^Sud=*!~E_HyLZ0vNZeTkV7Sih|>S+=$`N&0J3H@
zS7m107fm>bmw0VHS)iPw(*(`YzIDo}y!WjESV at x^#+ttuqg)QW557cNdy_Q59t-|y
zjb(8G5d*)cGq9d2IQXgNr|)hMr2u0_I%IE>#On%(vN6ri*h*%N_G=Qermj*-P!uHL
zx*|xPlq7+WLu*6O0%KTTc##kzVr}Y`=(a2^c+3|MVLHe){LBcJbl?P>@NC1}_tE3q
zPvHnmFP9&`pdY3Vy$k>Lqbme=FcH+K_g)&>++&1 at J;3JX{xEB at Rlg7V0DT_tKkXet
z*jRa2 at F9klSLdBhx=_ZKju2^9I5D#QPWhYRzOC5VmN=PYiP|~Q7yXYX-GqsqtVKBz
zF;on;LgF8(=aPs;cvu-tx!W}-N+ntgG=g-WC%#G?ykpf}EpqTV%HpDg4Rr{#bsvKN
z3}|eOkLJYwW&ySUx{B3mzKR7<9PE4!&_ at j*_Hwv96(w}X#9%X@&NsN6F_2Zvm9YZs
z=eJA-U9S`Y#e?X=_4s#RTvms?8`rMk98hYraTw3lH{!Qlf9J>JXNCQ2Z(}(AX%wt2
z-_GN(FB^!<=*pv1poE%JVWy~D>2#=Z+hmw?f3(Ee_|#`%?D_=bn~rjUieuNI8;HHr
z1fn7rI5?RYOd`5U36+^{bVVGmFp^Z949%ZVL-wisJQ#vu*xWM?LW5E8UiPr4&3x&3
zwa7kRt;seHv6}BujJ)atqQNV*$%nP;p%JOFuE}4NJSU|<1{i#krMi5Se!xwFTJDXT
z at ARX`Q#wM<hPaj|iZ$7$9sqxo$uB|Fc8lk|W69Z4IN)oWIH;eu9-`l)Q0K(UWTx+W
z`PUPJf&r$kr!~F(;roOR-g7-FR^jYZ<L%a9Zeo=pH9ccZ+0gH_lFL^M`HH#m@|n$L
zC_&~N`hqc3F~$4_O|l19<ZLMZx4BdFyl~<W3o4WdD&>NN1Qv at qe^tj{^x#3N at A6rN
z72m||x^JarABsO`**UJzidgC!=Z%0b=9c?56lYzXn|TfBW-78P{>?Xj7;n9Q$P at S2
zkM+)!8x*0Q_;TETV^VyHH}rs18*4J0f{%L)2p_bC7i>INf?hA_*4rV4WMua<1lb!7
z{I!_9lF;F~;QWU_MY-Bi5c)T=lUiFslv!ElkB<;>u#}W3rHTCs3TQN&+YTy^o2PIg
z_4z8r^(1yX;FzwGO26B&8Q`$TK53NkCOu;IG8ktl+S|y2;QPSafn{xYyc+}AVFDOC
z99(vraAkEqXDvuy(CZKGQ06I)HCWPm=>%rVpEP5${gSaXfz|Ux>XljURi@?Mvlhoq
zgTQZ6z`>7XyD5UM`^S&EzjRaY<Wk_T{m?CkQuxv7krAFs1RTA8yV$6%gQuC~Io~+@
zV209$h)ri#P*?>@^+Y+)^}L_FV>Btr*J<*@VlCj%!9-`FQl$e at me8ACZ~dT<UGw|0
z!G2D8i}befIc(@kQ7vOPZ2fE*W>a4fW!0w&B-z#s=})a+pBqp1#h6JG at 95~X=(!hZ
z-^0ilLltbVS4Fc}LdP6z-{VP+U%x^8%TP;GLZx_$f~@)^yvA=jvHil10u|vUEV6c`
zQ81R;fyHcvk#SpxV~%$*j4F at pq;if-qV;zg^}X}bW0ljn5y`rHOr7=OjJ1n73iK3(
z5-m2!(VmtM at 8&L&_m2qjpAMQ3gq`+>TuQ}nb~c|z$<nUJw1SipA83FCW-VgEu}Y^A
z+X)8hn_Z2+t<X;RYkXm=JTVIF?M^fdHi(}^Et$b$^F}Ap{2DxdBsUfNvU_*v{ZN(p
z<k<UhnmWcSbXDVlq|FUF`_2&aNv&a|%_Ry{wuK~Iaq8G;wqqpPHI?D-#J4>v34s|R
zIx8bM+rW%Z*d5P_zky_}*)`NDJEqBJeq<&3q*-adJtU(L`$5`&TK5+v1KlNOG8w`n
zuagNUZ(MX*oWuhk*rp>H0n>j=*ZF>YN47~1KoIACWRu3KO<&(0HFdv{ynlf-U=*uO
zU_WaIN1^;Hh&cu1FZv}9QMX**S1Gw0>=o3SX0%$$@ZFs#kNS0{r`QZh`Fx7NG`>|7
zu5EwlC}VYKnB)3*y&h&fSCv0Bqf)E^h`|a?5}3{OIURO(qP6X!;Ip4;Pf`Q&0<*2T
ztk5%$WD~#<?0crCU8q7ko at J&u4)_;Lbaz|UrLC{gS(|TwW4gU at tCk_5`*r$RP>uaC
z*RbDu)j57j!*I?lta#<2$M{moCuJ~Mo#kRd_3li5l%f+`0Kn4r&6WZR6h=fG8V9vq
z at 22lY3oZ>^IkT68NoDVh9FeIX122b%`DANoOyW80w`ZCv$BJ}ohISP#s_rib59wP}
zhVUZqBS&@acXKHr#i at g*oBe|?8n7>Dyzwo2KHef9S~1Q!QFb336$3%1VLZE at bY#X8
zW%yAa1dOCIlq(+Y>y4<xT8+d&4Dz_r7HA)hc0IG-3 at sbp@Lf(K$X1I`Te2#4avKPm
z3|P)DV-EIy|KN1E`pB(hNvW(bt8Gxc%J*oSYcFk)cyL}+IV4keu2<x>RXY5n4op{;
z3a24jU6_?Oc=#4l-uvZ3=WJ*hKW>R_*5+L1!@w{U at R`gl<MPGVO}RUcu89~IyANC3
zN&K9vwZ*udomz0!-D-O8-iNgX^B<dw!WkAYYN)V%w0-nB7jSm4eIXai=k9~Y;Ed+w
z8G8Gn3+N**m1UKFyHqZ7VY4o)X*jn4m~~ypq(yTmfn}ZsqJs<A4z_Iy8|AA=(kE_K
z*JN0<S4+4WUy5B(4J-tZLoFdjTUUV4Z at STl8Z=O;+t`#tKdErykOqGAz8Xxw<Ojwo
zB^|HL at fx4kGA^E*<1ro1ZT$$4AZ!8tY`aMNy|SD~WPQ#L^;1CHs<R`cH;Ozlj2AjW
zQvv7Y5>=Mgp4I_qi0;N5W{q&jJwH<6+`e0X=@x?AP(Ye4<asx at kIMScaGd15`a?jJ
z<4u%z+|(r?WB at dA-vY_FE|zL+*FSET-Fgppzhmvj0~e8GxkxKB=(z26zFQ<~`shE4
zMzZ7t4Pq;weyVPuoIlczyuS^uop6WxW=3X{EQ6;_?@n at bUuvuaEac9en12HzeLclK
zdXs%|8iRfZJorn}dV}Zp8C{pC=EtS{OplAnY4+Ldb!j+_7^H{uDA~{5#aB(29{W>P
z1M;GTR(tBU)G=luMhaKIc=|U?Tl4xg6b;or{xyCmvXfeKe6h7BE6=WS-F4ry88*B?
zXXC3%O+^pCmjaulBQ49XjpVR;_8^caeX8_kqp~wo!)u2YJp!tz!JdfYcu at 00{Y>=v
zgIbeYwY+XZ)PEe}Pelph5j>857tYx5`=YznUB=B02~|U2wOR>0(_KQvaxeXc!;WW5
z;-o8({)9|3Hm__c<qZ&H at 8#vsvx0yiP4_8v+NM&#g3i8iTq-qAAH0{J<jop+b_7tG
zGjQcECG+)lCzIfkPZxfkE&cr7N{i>oAxX2R9pbVo^_ZNgP?v7?6&6Wk%G)4E`MIvk
zL)}cewEyfSAU)B5yc+p<OXd_xyUT9W7q*3R>m2y5V7y2Idp52a59Q5iq<w9)<6c$N
zY?CNTp#-bVl;>ujGK6%8^z3kFwA`AsXlDdCj?sd(+b!#_nrZ+neuzkx)po6eAI6_I
zpv#kucWOz7>rko4if7cJ6N!fwv|Q3;R;5iM+93y%u6s!IgH}D?+nnW=h|y*wZDf0U
zdWCtvIJ4TBx at 1S(E|#t#4tn{eq1WR_f96LW%u~)$jH`C&1tK#YPiwONvHkp{hq)fl
z+YQ?^6f>T>DJ>jY4O53&Tt>qH0AWGI1Hn#jOcIs8iib_RT5_Mh0hH%g9~vC#>3FS7
zn#k9riF?nSJUF at g&Xv>&NG|p#Ys8aSxd@(USR7g%vJ5)^T#0gzlG)pC_eTkKB$7Fu
zl6$`^t-`Nn#>3%|W`E`2ABtar%|=Soe0Pd!^0}niYI=yk1DCS}5I23BI@=ny7p~AQ
zV&5XS7W?7?NM8o8oKh<KoUH0+n&_r9g0ZMQD$_}#lIr>uw*ZwBn~6r4pAwmt<CmDL
zR*TZ+w-}Tc511JDjJov>f$Jxm+TG;_U0s(@Js`6K_T{ce<1UT~Y83qX5sEh7-kJQ+
zcC_V)yr|}IWkxC*)UvmuP3 at Vx3=ln7y23At{iwL#nstFL)LG-fW?giq6P|ZHCP~k6
z3|C6t9m=X##<eWP;dh~4dh-e&niFrz<75aWo~X0O86ROR)v5zTb at Mwe@PiOpuXBRf
z>Pm)=-)WB0CNSW~y at jHrF$?rjxPjR1Eq>3%QFu-HI)mP0kzs$<-Z7`YG*qwRqCREI
zWp at 8o=KZoQ at c6Q7@uXpu{7%Q at W||#Y3e{2Qd?1MRuk%5=m!TJ<(2zr(qTlvQtz9j$
zb$umm%jW!fC+Z=Qii+%NYFglIQdP&P1BvG;0lQ7w?p(DdgNQuYYu)nc-FMl!i?mK<
zbccuYCfss7llCZI3yepG37i_Ka#D04<t6KY(N?WPAe8K3K3!sv3Ud^1o0 at OE&^nZ#
zexD}C^1^p_2hpuSC`D^<k^ZL}^l;m6ah4!2mQHgI9u7ThZBk<}zncIY2Z%VwIC}QP
zUFbDu1qe0jnDOP7UG6;@&;((|0JXEi09aTLUUxpX>Qw7`*`oCM+eqG5DC{fzT+=T@
zP5hQyH7BV_<3ez`rsA&v_#%!Z4DYptu2n4&xlULhr{g~9E0GgqnYAEfy^`AW at E~4y
zC})Y2&i=f!=h>V^Dd(;HJ^=Qnau{4CKp%hbdd2R3a_`H}RWC2DP0L8#kL_^SuTHy<
z4xz0CZ&j=61_t7S56W|Q$7?|49~cG|#mVp6-cGa>?AES*grjE0H{<bH6B at i+_Vhe^
z=!sy(+p!Scc at 5o4gnZk7Bi^p8qK>98-TzEd2k!os at JQ+K1Tn%^D66BB<wO!w0n;aO
zY83o<t>G(}+2Nf=B-#soX at SK2{r+;_fK-7Zx(8J3cCoh^5Q2_D766=63==6_rXNAa
z1DVAIM_kQsnA?P&?|*p~^;B3cLcqv|KX5KcNG`MEwYT(G2dQ*}%9wGrc03d`SAwOQ
zXgbE6pxh11!jLcj<0(tv+g5~;Cm%)R at Z_RLpWfac-Cnxi;sZjFB=E3%vv+Fhen~(0
z_!ZdmvbnpV<(5q;k=(D?hUQeAKJ5EDK+v_-csAtxOp)9Fyi at v>YN^IyS6tcOsT$pQ
zyqsu+G193nxH$@l{k_JncEa~FT9j!=HLSXkT@@M+H<BBc1hc1|+?J2)w%@Vk8H6u8
zz>{fFyYf2Cl^;W^Q at GFA68TTJ5)&7>AWz>Pqq>@);LVJxpDGLbakEmb`B7!>@WA8t
zHsV%yAn9UXwp;e%;gOXTDD({w*=bG-s<KWCqGEoJz(&dO?O*6AT%p6@&}S>)wpZKc
zF)VptJba(3k2s)F_cD~BH1rv#^Tlz?vCc8_GMyrBj!d#fQ{!46ZhRx|SLuW#g0T$x
z2Xq at h^^_2e`w9JP;X+z`DFVbpR$7_%nJ_}WR(iQ{L4&NB0;^sT&&<of&5d3~g-#^C
zODAmvDmS%$6*Y=5r^;YP-ypHF at aHG*DXn)vr+c+4UlH#gQ4Il#ue|Xs$ic!7^C*17
zVeb45OD9q?v+2mYTRdrV3F$CUz3D1(D#pk6XmUsQW*j!>e2GHH9Hh!xijBrSsu>1!
zNmsoS76JWl?6<D9xGGpIRBn^K+}`WSrc<JGZ4b9h&@b%2kEb&K1pdh>@=d_>=obO2
zzpTgNOA&~ZJGV^~*GL;wMVxxEKV4kPD&3}+P at DdYnUGXPHj%f<2$VytZu7hD4Zk#u
z)k`ulI%w3|7ZlOm&#qwznk0wKnq=j<&8a9K!t~r#@tO15J!=TERJU6;@0$#6k^6lw
zDrAxC^*bf{gD>-32k9L9zw?;uob)diOj<O)BeoSHmhgAiophc;#t?D9*VYsi^~VvT
z!ctU1hfvzC3zdN4GA7*JuxgukcV(@2VUZ7aXx*>%hRw2QW!}pqsl~=StyGD{nmsMi
zUN at EsHm7Yg%(N0v-tRAeC_#bh8K9hXL)kB)xv>YU(x*6V19|}!`(6;cg3PZii9TDT
z9-F>6E|TE|c(74)&g><cg2%T{xdSQp%?m`mw-yn_{#Fq=aD~`ijIO*rhb8b)0oZoW
z@&- at G@@lTX+q^?Th{rt4s>KR+<w6V{l-e(KY7(MD at pTc?GXKc!(y?VzHcQBL;l4zD
z(saRB_J+ws$rI~H7sTxl>LVYrUScc~B0xY_K0Pdn&8r-Z1;Ct_t}Zp~@)daxcE8J;
z at Q=gJt+u9jT}NXssy>(z`!{RuUg at aqEDwX=p{GUf?I>t80{O^nOz$_IBVbUFs_d8`
zU}256c`Q at vC@nQ~pdRmzQd;{MG}(+XlqoQD#`+u<#1VUuxmc4H=8(1|LLb~`I*~#g
z85iE7gy!&t*2yY0y7xr9Q{DN9NO7;N{@`6)GxKOnb0D$5 at NtsIL5k*!*oJ8?WsU!-
zNKdp&c}iMFS+X4MnknMGIAVLx_|)}XoP3IfA&*MKF_Czd)5_-9a?kmQVy*Nj>kPX5
zi>RLpKKU8}ZT^NB at 1?|w$08fU*kQp_r$ZgA9d=Gid(m81Uz8o?Jp!E)7}eksxs4<g
zFNWPc;zX%n{I{mkRnl`K at D0TazxLi{M~Dt$o{i;W6^!rbG~FKqb9;$*4^b-5k&rjl
zwKT%%^XRaf at 9A?*eImI-4;`%5FBbp7=%2vy+Q7UK4t;0sbM=r+?C;|zH!8f0^<u7Y
zZ*cW_Fb|jRC1 at TmSmawtDw)H9IvPKx?vlOGq=FRpNt+*v^zKW^2q8&S_Ks3(wU=uj
zje=HNPg>n4lpsuMQzAj=VK2r at J~3f;r?y-;tv^4UA7yB8_G4nUUoP5~3R+td8f&Yv
zU*Dsbkee%@9HNUu{{$IlRim8wL|DB*q%O at N9|URs&P*A%1{++a7T1>$Ebtfw|GkJJ
z^HChnvkl>4SV9ZhPI&i2wTaRW?d=sf*{A}UbwHw))u4|E1D1WWpeM4C3450GJu5n<
z=7olNjxLX*44T1+l%{v=M8orXChYs7*y)(Y2Sd+_z7Kr$rxI7S%9Q3N at On%%9KX||
z%f<3*uuCKgDis`>zOxhK&vUbJP?1B>BR<{wNkknXDoR$BwKj>y&GPjpS|b}35iJ&4
zRy#KfY3R--59<I^2RT-?4JN&1TpGHn#IA+7YE;IH6kH@;)rN35QOLw&(+)>wM{H|J
z<C=e+Cbk{=29JEO2xYj06A3-MYlP3 at NtH!Dqez*1LXl5+ZioSmtGQ`vn^H91hgsf3
zH9t~t-zsVwjrpQzH{b066K|F1Do3eC*P7LQ4TrKCf)2Cm+{|8iBAe=INsrPjSz-3(
zmpsQ3Zg{2a4Rzdg9G%atO_sJ^pvD`&d2>CA!=;lLcr+<j;`2TOki%AX;4sH#^sL7a
z)w#%_>hA3PaqXgXIX6jxL<VeRwO!FhT}@~VyF7mCD>BXT62cCoduasf$IaA7N)Xd$
z&wbz2s>}rWqmPhXAL6ce)(O1Z!+aoRrxe$zl&82f_BZ_xm1%~$wlPUg4!JufP0iO@
zF00(BNmsip7N0XV_lv2%7kt1sP!8=%oL168%g1+LOZe at j`;L(1n^{FIOlEDFQ4#cj
zi5}MVSfZr3yDhYp-H>Mnt>L!3oqY^$e=Er6A3KDSo)vROg`2n96uF&AoN>OJ*+=7k
z-+(;c)K*S}N5;!`1A1iAqdZRayG$-k#Hux$JWU#Q^%_IKD?Z|7v(qi at l+_K5Ik)ZQ
zxl)Vo58-_p8X1@~n_67q>jZCv at g6TC;T^*^I}5j#`PS%nQiXK*xn9-IFA*fv4Kb}#
zMLOEFg<M8`6A2CLZa?!ldlsD+mDM}~{qTEizM!K$my~Q&-$z#nt&H;t;j%m-B-b0X
z(~<ACWIM^jlEg at 61`Ttc(Xd%Btg1vh1j=^gf5v~S+q41UbDwiyJK4!hd`THN-(X~~
zN*AdyDgX8Y)DVbKtU(f%U_3u%-r%-&2lRZEVz#leFS*kBZs2A2m1%dS&Z=+f&A?~s
z%DVvBfx<mS^hs=boekXrDwe^NGpfMEPH<jsyba%9QJyclljOyV1bC|+tx-Z5zW3ya
z#KJUE4)@KaI1FnoX3tpfWV#Ql8r4=c%rdDNh+Sk<J1{Qz0`Rf0)qRnc={iErQRFqS
zVp0-RpL-TblH2SEp&kGzU~e*oO=;7W`P)_7Zt2Q{=CEt}j+%wfQS*jeM;fmSU~_rZ
zB!mm7kg24pqAVu!bCaje?@v=)Hqb=fyo4YNfLiG}a-9L(xV2Hju9y9|G at _Q+IR%kk
z0__)+>eHIN+=X62Vxr{Itl~kJv5mvT&@e)e5WCWj>C$a8jL at ie4j0O*%7vldDi%-*
zhBCPcCF0)fnfkBesO8Uf6M~E4ttYt2v6nG57`aX2{QHcv<JCgmFm;7Mw3vZ(NHs+h
zVYi0GFE>YEWQ{<_&9`({swPRR{j_Wrwzp^BWIwm4CCO3BDp&Pd*cla>3_ at r@T)YA6
z!LOfHYYs=~-tWau(ur~7dtSTLEI-`dzS at zH!}CnPIdX2+c5$A+D2lZq@>1nUnu;U$
zM;|XBEr%7{ydROA1P^iET7pYS^SXX}GMoJP=Z4$_R>$IR)!Gw<w!8KH9`Lz+FOGi(
zwFEa!ml8)`gP;-Q5}R>!4CI4_B+Wy&f^z7=_C6smG84C2M=??a;>ooyp8=!dK(Wnl
zlJT%g^3hO&IUZm1o&;;k7SLAL;g+;40g?p^8M0Rw5|#H>L^ew|sW!JFfrmlnqQ(0G
z-9W&=qL)<n1g0}TH${c^nBrvfq?;Pi&X;VWPd9`9R$yV|=z%QubB^`y2+f*+{JqLe
z?k87taPyhWJ!4Y=O(oz?E~q_WC|qFJ--z0OUuM-!tgfEpZMGyu!Ol at ISF}LjHkja8
z0Y2 at GIeNG~vfrO7K3iJ|VOv;{989qhRNY<XHo)0#lZz8$!VWumf-xRsJR+6Y=K$>U
zKP!AQDWk=6hOatPAF6QY)v>5TL at IS`Luw(n>ZQ#g)g!!3O3)j53=X9!&D7^)xA!Mu
zo(EfrHU1qkzq7!PSiqAOYF at L4oJ*HLARHnaBlikCoLPE1*J2I<&%-_*e(MbJ6Z{x7
z{dDakN!x>@?v*$5u*6=gd_80NDKY#dbidT-b+JB*{AtHctd54`c9>*%- at HHy+IF&M
z^X;0E?rFmp9y4fL$xAfG!y#&=_cH~`o&^tJAnOzh&aot6NpyHjGT<k6>_ozk5;ZlA
z5lNC`8lGY6YdB3(CLGO>aViU$6|XdADH<BzNf<m=P9bj9ss51Zl(1FM$kP0?vws1|
z+ at jnx2?8|?=1-V1VS`1j<|blfNr$V~p1W0&C7&&TRJkAl3~J?eA}qX4T?6sJcb!<M
zMh>NXo}zZxggr}u?k(Rp`4SN9=lTlPSvOrwp^z?*l(5q8qWs6hk16(Uw>4e+GCA-L
z;rUX at Q8uSYupy;-G6s4W^sL=BxmT=xd2<mhGGYo`y0IcRgtVAX%}qx6Ig1Saq9s#7
zV*O3T`O42;#URS8k?XBa0(nj^l9C}*`jy~Lg<Eq8Sl2_AY3Sm^xXh#E)gZ{D-+jB`
zaj*G4`M4hBu|I#Lm|8#6FuC1}CT}>8!p3&`$(ALio3owr{HGkRA9GYBG|AT-wqF5(
zBy42FoNp5ggGOd;Zl_)%Tw_=#B+?)hp9!KjCVi+ztt&c;9oyvIXIEQgVZv=)v(<jS
z%hcE{QC2%)n!<}5ym0etaih4FP`r}JSwK0BZmYnc(0{cy+ at B{O(u9*xEH#;@O4w1U
zV=wzP)y}pjIzTB<nc=T(l)scHe5+LtfsIdYe_&8vc1O%F3ic`KF_=ch0YjenNirjR
z+s72~Umejl0>@o?TE)i+aVREWF*mHf=_7d;3r(rgq@~l=b&CP718E{o3k)bcCqm17
z8{NlYY^ydk!zo35xM`}yw2bNm3`GeXl?EHhG~~Kt&??SNZZP`KSj%_UQP at A_(Ib*6
zqEFKV>vm4^opfM09^Y6iT>)n9C1gsxZyHVYHqTM3#X}qIlV**j)eOiNiL%?vvOSo-
ze)2meB-ip>R8$o-S>zlfnDv#mlC*KqCx7S6VL~3Ga9X|od^JT-?u_^T)|o8d>btb8
zV at 3djT#rf_&G3^={62kGj?lL(6>hV?=9Or7TzQO1UeV%YR7KhP>))Le!=C^r3YsxH
zmWr3h!cp*}p)}rjGs#Ru>gvI!_pCI8+a<ZK$ce96;o<!<i(Bt#HU|6UqB9>`uON+~
z20x_=_k-ZlD^+ciRea}Ki;^4Ns}*k)CrKL&U0L;eWp#ch)2Ftx>c@#SvQacdpRV;w
zA|Vo4I5axk?@J3iv+Z19!J9Equ2`z|H{iexE0d*lGHa=FyU<pp(f2YRqn&uje3d5?
z-B>AJBB`5{UtLIj9R)<3j4awQR$qBqj&A&{upR+db+g-0DeaAkEP_iP7iy7C;G`Qq
z-%gr$!CC@$@^_j#a*W&!0maNcVP`s>g9jkXo3wUrUesFI8wA;=*`U|nwM7*j3vM}b
z1!PwX$q3>)p@%M0CgyqgRl66`lR{jaJV6yH{kFd?Aqe_T2mzk0zxN1QoA_Rb|HjEu
zUN^H(@wFzAB{SQ-!nQJp-gh9kQ~)Kyh7S1n5bhYE at Ri+S^>i)HJ`FdiRFPVFTkvbM
z%Ml?IC>1(&(P<AosBV at AW3wb6EKKMHCc(Hlyuj4$R&urk{A)Y!JYs$db!y`fpZJsY
zhJr#Gt=h5#7ba`(Mq;J+S6#TE^B8@%u^ib{or^V>pRI5UYa+o4_D at VLzpH0V)}jj+
zJ9X75V7|>jk2Hgf`a}ZHmLXO3o-vT?IBZx{^)QbKmdke*;p{$S1Df4*so?I^yNwoi
zqZAFnP*@y<C+N_~rRN24cH7Cp$%4px2m<u#wILFQFL2GoO%qwjEM5hgC>yI8Ia?fl
z*|&cqn7ejMsk9xfXsqh#crje!1TC8AyGXmqYhE(=It@^v^OoZl4UPn9PoAJThzkoS
zr8uv62^D%aJUU-ZyH8<yoV}-;*?ZkF8GBTBdz5e=;{s*EO~hw~GhirHiAr2m+o;sh
z-xfk at d^qPAeWYeyHWad=qnc&>T_|FQ1=g()PV{XWp1vqSbE{%zVp+sC4Bo8=O#WFx
z5&>RzVMfNN97~kz*_JxpHw&$w1>q*0WvlIrHefUPe37t+9ARHQRo;g+g0Q`QddDjz
zm(EC<9HSvs^qz8m{H^EDl;65~9BSxBWK{$dQ)s<ZjSQ~TudDun&!BHO_!$qF<X232
zVA%@a3fL#gFW?b%$#9g}rFq7W>W0QMlmv%2V?CGcf}|km<+s-&r~BAP#KTCm37rNH
z*`9|UP(HqsB5+%@i_Ou3{i5Tv_C6?=inZX*t|LOUz7>q(#5E{#93l;>B~Nu5^LOo$
zVLuUeK8_?~NzA>;swny;2jKfSDU3Ol;oGccJzqaancH!?DSPe8GTunzhm606eYb|=
z*g!KiZZcrwyr`aEbrziZxIpfKRQH at Uak>K at abFH$=~DvNFA+_{lrUEyG1a=;g)-ko
zua0OK!Mc*V;CdRv<ZEt|Zi+V<2Zn{;&=a{6NuTUy-;pJZpN=3*YCtS!*S5?0x?U*i
z#Ix5KEHNniey`h3*}tV4hq*y%d2GUUzFwWQ>#Hw?MYxa^T#(0RjbSEpTRiW2fAy2_
zai=}Uy6(o<x%;r at b~v at GFx3cg**ZlPR~j}lFWsV#nJ^ggiz|=S^4N;!yM^5C^ieM`
zW6X7&9 at Z?|_6cPw^p$T5jav2CH>q^<D~kZS*sblxtyz?ZeZJ%rM7RUbFZ3u4u4jqX
z7X_0#J5hs)SK`NH*uq{KR#tun5yQ}8&6?WfyLttD<BdG|=2w*^Ee&J~i)OvE(UQV?
zdcz4eBvEo~+ut~lFp#(3;D-KALtZ77Rs*(~*!z^r#Lprt8d6<}6?_pWtXQ0c{G1lW
zHB9Rh&glw8_K$Rd?>0YgT5i5J96ov|BH at mH6))9*T&)C6i;hJL at Ijg`CHQ2ll?WfN
zwOU-pW5F>7lZ7c}CTB|Xle_>CvwS7OvG1N3KcVqcGB3bhL at LfkxLwkW$UTBgA}04M
zb_k~~*NHgS&mZ0k&vCR?E^8XmH10ZsH~iSlPM%yGu06!M9KWiTO+nTWBbQFcwjbi|
z4<Y1Rx(Cd=eHEb*nR4L-Ibzi%ZZ|UNZnKl(u>$o2AVt|}_Y3;Bv@;hkomzcya)!EZ
z&gd_6u*_?u+>2DzMb at X-BJjjug0ZvE`APjIBq0S^wLp5Q1l_zE^QiaI5N>*~TPeD7
zt~|w5CIp;f>~0aA8aa|VJSV_9yy2Tsm)FOy_j#;@ES<q+plZ(l`m_7db_&<@{lQ-0
z{p&ow-Wyh<zG!05>}j>en`h-MBf`P^(!xr0N`Y=DcdIDJ7Ev87zark0<+iACdn}FW
zp&~r{>*yWmAPd*Md=&Ijz;;ivUNh+TZhQXQdKW>RQFfZMFn^u*T0|;pVR}Y+E5 at -A
zC~$m@?sk$(f5H_qCoq9r$o+~{eQh*sW~j_bDW*z3=6RJtE@`Nl)3-pBm$vdLK0wsE
zo*`MBGpf4}cY~;Zw0tPE-+b=r{Ukl;Bsc?OFzOwo=xWfd^qSq3 at W3Eg=g_9ViUe16
zH_v%6EJ3tY_2IH`>DB<q(c+<3Byze0na{V#8w+sS at Mi1r`VLMfe~w&zZ`05Mr6>(j
z_SD#9ZLDf-GFzt`HT9e~Q^`=q$2b-5nQYYYK)TqxJL6l$B+jrf$5G{~$A2IB>J4`X
zy#v62ZS%0TE%Y<eHOzA>8R4I(*Xd`|zMghFjw8A~SVzWlO9NRXn5FZY48`l%$bD6F
z^=P!@kY`o5MvUoIXxJdiT6D7wR~3UtLYN*`b3e4utr_kz$9R~6_R-_&&hI#HI at df%
z^o%o*d<?bm$7dY^Z(tfhU%B7(>z=d?y~TJoo!FC^RrZoeJ};U#_*7 at q-69@JDI1u1
zz?45iL at TE2a`Jqbe;Vx>0 at qsJMgs8m60%n&<I?R-WPSg4+6yarwXg$vOQIr%*X(5`
zLe&-D6sZl~(WeZ19GyK>{+x)Cy)ju=!H7SX!a{U!CdKpPz=&LDHCL^~BV(_E7RAD|
z4D|8ySrKVl9NJTyNOM?2X1C?_2T^&J57cvBQt9Uo)BXL>aD*LmngeT-n91$J9|#iQ
zxkIey<%d=h2vS(WX7xQ=r4jE0bqQbrW~8cfviTv{R?F;%Dsj2NhI-jpo3Zudp;dFX
z#%GUv!iQ1%AHOZn|KU_!5sDT~%D}@NHwE#zyD7TRNZivV&tWiSs6T%U|6XJL0VCVS
z@<XOWw8UZSsAARTqHR0U^zA%8c)|9_(q6knnODAH$nI)7G)G4hVtHAIzp+&;2Vg=e
zZ&{B1J7c()_BVcF(pmB+2a0|5Xbm$zq8qu)2=Kn2m3-^UC2G&(dAK&1%naqS)+ouc
ze;I}ValeJUa$ZOM%Lx3R_EN&q1b$|#+&CMGJTO2t4djn6IAh+SfD!eJFFTnGnan(O
z`((L1x+%!|>Bo<M|Nl2GY-b4b;sd=}W)b}Ag=bj~fFPh<>-7g4{tF7S?0$2Qy0|zQ
zSqvpyx4`!w$p5U%^=<_7DI)mTxHtJKhptbY&<zH-2`&u#V$yI_cE(pgra^y|Fpb)u
z$hy865lzrN>gI`pKAOIq;W+V!kdGtRT>s$I<r4WB;ryMJnsDG=cwxhn@~}JPM{cdW
z>oxUrO|#21=nB2q<V at A78`Ji<xmujaR~#f+|3ob`r#Bqk{9X7QpZ;?mW=<b!iCS}`
z+a>}=s13kj4B3z)|K<RG`*PpOdH?k_y{)YdW-(vv>PU;T&RzmHZMXv}w?5l)A6xXe
z1uc4`aIZ-ISgLceZD)c*Avll$PS}ZzMnNd at t$)D!%+mZE>`n(eoQq(amFQ(=S(zeK
zu`?K|-A2Kc9`^jJ83PpOAr3<4@!VmXLe*kBi&WixR?C@{rK%)6P-5g9gH0Olr_%dk
z<|3VT|1cYXY_e}SglKkg+5C?9{;dn};)MOV^2x2r`w0QwVVXv$#fztzc*WT<|G;d2
z&<O!&O+9?@SrGNYR$+-9HWSDdV<1sTkNT7#%oDj~x&ga#u6){d^$N;y$NMA56NeC2
zm-_H(b;;})-E_kLXUf!;o0V*XuBpjR;@q<3eAM0Eg at D!c@;Efo2ru$3DvJ3?Xf6(m
z0Xf;-g`T#XlmM?`z`#57 at BaN=jbz9D*GjdDfG&NfZ7MCU*1#0BT$4*Yt!f?{Go0_A
ziG5*p#FSPTX&Ue6|D~8Q1l#JLl|p!{V4><1+%LSGFm?=5DDVAIKv!0CcJ8pDkWZT#
z|F~tKRvp=g5j&Vm`2b+%u%hp<IpodX#~IAK_+M%#$co<1*ctt?a(vNd_HmbOj*B$6
zA)1ce$%$;a+hY_5)`5uGn?CS$MCMJ~y^9ely_u8E%;Q_er`lPYAIz!`d(RSgB?%sq
zIiyIfUqKJH7p&L2uok at u>U2_z=bf at Jn+_wu_85PB7iy2dr)>+|#Y>Uk1<f$-wI%RA
zEtjIWPz?7(q#yKZh%{p|wf&f>kxP<wkJffDS>ls90!uqfA)h~(Y&ps*zjEUMVpDS_
zh^r7~Ib|+7QDaW%KuIR6%&1JJT at 9P-raFH+%iFSKV7+SM$hXiiUrWkC?&`<8r;XPR
zo<Lrt?`5o#)fcv0M9=<skL(U_g>ofv&ta}u!x6cmY-W)fihLDe5M~b^NZ5p``HnEY
zg%N!t8p8VDMG1aSz>$zA9PDxbD6st-NRLhdY98$Rha>+n34VPH)PckMf4Fs^6yG^e
zS4M)*$KmhU{of)BSmdq$+2sCfsI!4OfbvkHtY`oA-rq0Z*?fTeV`2Vk48^Z%gJUQ}
z`2W%bpwu15 at 7em_pYrblb!MVH;CKJ63GjFW|J~5Phgw4RiC5;ikl4R90Vt#RZ~Y?Y
z22{bxCKTlSmnJ-cfwTXYe(@RuYLZdhqmKPs6HwXX{;gmBcWC~1X#RKA{C~J=?)c>7
Wyv;~hkMo}ZKjI=X!X<*AzWyH_xa}4I

literal 0
HcmV?d00001

diff --git a/lib/main.dart b/lib/main.dart
index 8cd6c36..57ad39c 100644
--- a/lib/main.dart
+++ b/lib/main.dart
@@ -1,6 +1,8 @@
 import 'package:flutter/foundation.dart';
 import 'package:flutter/material.dart';
 import 'package:provider/provider.dart';
+import 'package:pve_flutter_frontend/widgets/pve_first_welcome_screen.dart';
+import 'package:shared_preferences/shared_preferences.dart';
 import 'package:proxmox_login_manager/proxmox_login_manager.dart';
 import 'package:pve_flutter_frontend/bloc/pve_authentication_bloc.dart';
 import 'package:pve_flutter_frontend/bloc/pve_cluster_status_bloc.dart';
@@ -47,6 +49,7 @@ void main() async {
     FlutterError.dumpErrorToConsole(details);
     if (kReleaseMode) ProxmoxGlobalErrorBloc().addError(details.exception);
   };
+  SharedPreferences sharedPreferences = await SharedPreferences.getInstance();
   Provider.debugCheckInvalidValueType = null;
 
   runApp(
@@ -60,6 +63,7 @@ void main() async {
       ],
       child: MyApp(
         authbloc: authBloc,
+        sharedPreferences: sharedPreferences,
       ),
     ),
   );
@@ -67,9 +71,12 @@ void main() async {
 
 class MyApp extends StatelessWidget {
   final PveAuthenticationBloc authbloc;
+  final SharedPreferences sharedPreferences;
   final GlobalKey<NavigatorState> navigatorKey = GlobalKey<NavigatorState>();
 
-  MyApp({Key key, this.authbloc}) : super(key: key);
+  MyApp({Key key, this.authbloc, this.sharedPreferences})
+      : assert(sharedPreferences != null),
+        super(key: key);
 
   @override
   Widget build(BuildContext context) {
@@ -142,6 +149,11 @@ class MyApp extends StatelessWidget {
               builder: (context) => PveSplashScreen(),
             );
           }
+          if (sharedPreferences.getBool('showWelcomeScreen') ?? true) {
+            return MaterialPageRoute(
+              builder: (context) => PveWelcome(),
+            );
+          }
 
           if (authbloc.state.value is Unauthenticated ||
               context.name == '/login') {
diff --git a/lib/utils/dot_indicator.dart b/lib/utils/dot_indicator.dart
new file mode 100644
index 0000000..e4d3027
--- /dev/null
+++ b/lib/utils/dot_indicator.dart
@@ -0,0 +1,108 @@
+import 'package:flutter/cupertino.dart';
+import 'package:flutter/material.dart';
+import 'dart:math';
+
+class Dot extends StatelessWidget {
+  final double dotSpacing;
+  final double dotSize;
+  final double zoom;
+  final double shadowBlurRadius;
+  final double shadowSpreadRadius;
+  final Color color;
+  final int index;
+  final void Function(int index) onTap;
+
+  const Dot({
+    Key key,
+    this.dotSpacing,
+    this.dotSize,
+    this.zoom,
+    this.shadowBlurRadius,
+    this.shadowSpreadRadius,
+    this.color,
+    this.index,
+    this.onTap,
+  }) : super(key: key);
+
+  @override
+  Widget build(BuildContext context) {
+    return Container(
+      width: dotSpacing,
+      child: Center(
+        child: Container(
+          width: dotSize * zoom,
+          height: dotSize * zoom,
+          child: GestureDetector(
+            onTap: () => onTap(index),
+          ),
+          decoration: BoxDecoration(
+            color: color,
+            shape: BoxShape.circle,
+            boxShadow: [
+              BoxShadow(
+                  color: Colors.white.withOpacity(0.72),
+                  blurRadius: shadowBlurRadius,
+                  spreadRadius: shadowSpreadRadius,
+                  offset: Offset(0.0, 0.0))
+            ],
+          ),
+        ),
+      ),
+    );
+  }
+}
+
+class DotIndicator extends AnimatedWidget {
+  DotIndicator({
+    this.controller,
+    this.itemCount,
+    this.onPageSelected,
+    this.color: Colors.white,
+    this.page,
+    this.initialPage,
+  }) : super(listenable: controller);
+
+  final PageController controller;
+  final double page;
+  final double initialPage;
+
+  final int itemCount;
+
+  final ValueChanged<int> onPageSelected;
+  final Color color;
+
+  static const double _dotSize = 8.0;
+  static const double _maxZoom = 1.2;
+  static const double _dotSpacing = 25.0;
+
+  Widget _buildDot(int index) {
+    double selectedness = Curves.easeOut.transform(
+      max(
+        0.0,
+        1.0 - ((controller.page ?? controller.initialPage) - index).abs(),
+      ),
+    );
+    double zoom = 1.0 + (_maxZoom - 1.0) * selectedness;
+    double shadowBlurRadius = 4.0 * selectedness;
+    double shadowSpreadRadius = 1.0 * selectedness;
+    return new Dot(
+      color: color,
+      shadowBlurRadius: shadowBlurRadius,
+      shadowSpreadRadius: shadowSpreadRadius,
+      dotSize: _dotSize,
+      dotSpacing: _dotSpacing,
+      zoom: zoom,
+      index: index,
+      onTap: onPageSelected,
+    );
+  }
+
+  Widget build(BuildContext contect) {
+    return Row(
+        mainAxisAlignment: MainAxisAlignment.center,
+        children: List<Widget>.generate(
+          itemCount,
+          _buildDot,
+        ));
+  }
+}
diff --git a/lib/widgets/firstWelcomeScreen/pve_welcome_common.dart b/lib/widgets/firstWelcomeScreen/pve_welcome_common.dart
new file mode 100644
index 0000000..5f08861
--- /dev/null
+++ b/lib/widgets/firstWelcomeScreen/pve_welcome_common.dart
@@ -0,0 +1,67 @@
+import 'package:flutter/material.dart';
+
+class PveQuestion extends StatelessWidget {
+  final String text;
+
+  const PveQuestion({
+    Key key,
+    this.text,
+  }) : super(key: key);
+
+  @override
+  Widget build(BuildContext context) {
+    return Padding(
+      padding: EdgeInsets.fromLTRB(10.0, 10.0, 5.0, 0.0),
+      child: Text(
+        text,
+        style: TextStyle(
+          fontWeight: FontWeight.bold,
+        ),
+      ),
+    );
+  }
+}
+
+class PveAnswer extends StatelessWidget {
+  final String text;
+  final List<TextSpan> spans;
+
+  const PveAnswer({
+    Key key,
+    this.text,
+    this.spans,
+  }) : super(key: key);
+
+  @override
+  Widget build(BuildContext context) {
+    return Padding(
+      padding: EdgeInsets.fromLTRB(20.0, 5.0, 5.0, 5.0),
+      child: RichText(
+        text: TextSpan(
+          text: text,
+          style: DefaultTextStyle.of(context).style,
+          children: spans,
+        ),
+      ),
+    );
+  }
+}
+
+class PveWelcomePageContent extends StatelessWidget {
+  final Widget child;
+  const PveWelcomePageContent({
+    Key key,
+    this.child,
+  }) : super(key: key);
+
+  @override
+  Widget build(BuildContext context) {
+    return Center(
+      child: SingleChildScrollView(
+          child: Padding(
+        padding: EdgeInsets.all(15.0),
+        child: child,
+      )),
+    );
+  }
+}
diff --git a/lib/widgets/firstWelcomeScreen/pve_welcome_faq.dart b/lib/widgets/firstWelcomeScreen/pve_welcome_faq.dart
new file mode 100644
index 0000000..6612819
--- /dev/null
+++ b/lib/widgets/firstWelcomeScreen/pve_welcome_faq.dart
@@ -0,0 +1,59 @@
+import 'package:flutter/material.dart';
+import 'package:url_launcher/url_launcher.dart';
+import 'package:pve_flutter_frontend/widgets/firstWelcomeScreen/pve_welcome_common.dart';
+import 'package:pve_flutter_frontend/utils/promox_colors.dart';
+
+// FAQ
+class PveWelcomePageFAQ extends StatelessWidget {
+  const PveWelcomePageFAQ({
+    Key key,
+  }) : super(key: key);
+
+  @override
+  Widget build(BuildContext context) {
+    return PveWelcomePageContent(
+      child: Column(
+        mainAxisAlignment: MainAxisAlignment.center,
+        crossAxisAlignment: CrossAxisAlignment.start,
+        children: [
+          PveQuestion(
+              text:
+                  "How do I connect if I am not using the default port 8006?"),
+          PveAnswer(
+              text:
+                  "Add the port at the end, separated by a colon. For the default https port add 443."),
+          PveAnswer(
+            text: "For example: 192.168.1.10",
+            spans: [
+              TextSpan(
+                  text: ":443",
+                  style: TextStyle(
+                      fontWeight: FontWeight.bold, fontStyle: FontStyle.italic))
+            ],
+          ),
+          PveQuestion(
+            text: "What about remote consoles?",
+          ),
+          PveAnswer(
+              text:
+                  "Spice is currently supported. We plan to integrate VNC in the future."),
+          PveQuestion(text: "Which Spice client works?"),
+          PveAnswer(
+              text:
+                  'Currently only the following 3rd party Spice client works:'),
+          Center(
+            child: OutlineButton(
+              onPressed: () => {
+                launch(
+                    'https://play.google.com/store/apps/details?id=com.undatech.opaque')
+              },
+              child: Text('Opague'),
+              borderSide: BorderSide(color: ProxmoxColors.supportGrey),
+              textColor: Colors.white,
+            ),
+          ),
+        ],
+      ),
+    );
+  }
+}
diff --git a/lib/widgets/firstWelcomeScreen/pve_welcome_last.dart b/lib/widgets/firstWelcomeScreen/pve_welcome_last.dart
new file mode 100644
index 0000000..861eac9
--- /dev/null
+++ b/lib/widgets/firstWelcomeScreen/pve_welcome_last.dart
@@ -0,0 +1,72 @@
+import 'package:flutter/material.dart';
+import 'package:url_launcher/url_launcher.dart';
+import 'package:pve_flutter_frontend/utils/promox_colors.dart';
+
+// goodbye
+class PveWelcomePageLast extends StatelessWidget {
+  const PveWelcomePageLast({Key key, this.onDone}) : super(key: key);
+
+  final VoidCallback onDone;
+
+  @override
+  Widget build(BuildContext context) {
+    return Column(
+      mainAxisAlignment: MainAxisAlignment.spaceBetween,
+      children: [
+        Expanded(
+          child: Column(
+            mainAxisAlignment: MainAxisAlignment.center,
+            children: [
+              Text("Enjoy the app"),
+              Padding(
+                padding: const EdgeInsets.all(8.0),
+                child: Icon(
+                  Icons.emoji_people_rounded,
+                  color: Colors.white,
+                  size: 70,
+                ),
+              ),
+              Padding(
+                padding: const EdgeInsets.all(8.0),
+                child: RaisedButton(
+                  onPressed: () => {onDone()},
+                  color: ProxmoxColors.orange,
+                  textColor: Colors.white,
+                  child: Text("Start"),
+                ),
+              ),
+            ],
+          ),
+        ),
+        Column(
+          children: [
+            Text(
+              'If you have suggestions or experience any problems, please contact us via',
+              textAlign: TextAlign.center,
+            ),
+            Row(
+              mainAxisAlignment: MainAxisAlignment.spaceEvenly,
+              children: [
+                OutlineButton(
+                  onPressed: () => {launch('https://forum.proxmox.com')},
+                  child: Text('Forum'),
+                  borderSide: BorderSide(color: ProxmoxColors.supportGrey),
+                  textColor: Colors.white,
+                ),
+                OutlineButton(
+                  onPressed: () => {
+                    launch(
+                        'https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-user')
+                  },
+                  child: Text('User Mailing List'),
+                  borderSide: BorderSide(color: ProxmoxColors.supportGrey),
+                  textColor: Colors.white,
+                ),
+              ],
+            ),
+          ],
+        ),
+      ],
+    );
+  }
+}
diff --git a/lib/widgets/firstWelcomeScreen/pve_welcome_logo.dart b/lib/widgets/firstWelcomeScreen/pve_welcome_logo.dart
new file mode 100644
index 0000000..3aee19a
--- /dev/null
+++ b/lib/widgets/firstWelcomeScreen/pve_welcome_logo.dart
@@ -0,0 +1,33 @@
+import 'package:flutter/material.dart';
+
+// Big Logo
+class PveWelcomePageLogo extends StatelessWidget {
+  const PveWelcomePageLogo({
+    Key key,
+  }) : super(key: key);
+
+  @override
+  Widget build(BuildContext context) {
+    return Column(
+        mainAxisAlignment: MainAxisAlignment.center,
+        crossAxisAlignment: CrossAxisAlignment.center,
+        children: [
+          Padding(
+            padding: const EdgeInsets.fromLTRB(120.0, 0.0, 120.0, 30.0),
+            child: Image.asset(
+              'assets/images/Proxmox-logo-symbol-white-orange.png',
+              alignment: Alignment.center,
+            ),
+          ),
+          FittedBox(
+            child: Padding(
+              padding: const EdgeInsets.all(8.0),
+              child: Text(
+                'Proxmox Virtual Environment',
+                style: TextStyle(fontSize: 26),
+              ),
+            ),
+          ),
+        ]);
+  }
+}
diff --git a/lib/widgets/firstWelcomeScreen/pve_welcome_ssl_hint.dart b/lib/widgets/firstWelcomeScreen/pve_welcome_ssl_hint.dart
new file mode 100644
index 0000000..380c772
--- /dev/null
+++ b/lib/widgets/firstWelcomeScreen/pve_welcome_ssl_hint.dart
@@ -0,0 +1,50 @@
+import 'package:flutter/material.dart';
+import 'package:pve_flutter_frontend/widgets/firstWelcomeScreen/pve_welcome_common.dart';
+
+// disable ssl validation hint
+class PveWelcomePageSSLValidation extends StatelessWidget {
+  const PveWelcomePageSSLValidation({
+    Key key,
+  }) : super(key: key);
+
+  @override
+  Widget build(BuildContext context) {
+    return PveWelcomePageContent(
+      child: Column(
+        mainAxisAlignment: MainAxisAlignment.center,
+        crossAxisAlignment: CrossAxisAlignment.start,
+        children: [
+          PveQuestion(
+            text: "Are you using a self signed certificate?",
+          ),
+          PveAnswer(
+              text: "Disable SSL Validation in the Login Manager settings."),
+          Column(
+            children: [
+              Padding(
+                padding: const EdgeInsets.all(8.0),
+                child: Container(
+                  decoration: BoxDecoration(
+                      border: Border.all(color: Colors.white, width: 0.5)),
+                  child: Image.asset(
+                    'assets/images/ssl_validate/login_manager_screen.png',
+                  ),
+                ),
+              ),
+              Padding(
+                padding: const EdgeInsets.all(8.0),
+                child: Container(
+                  decoration: BoxDecoration(
+                      border: Border.all(color: Colors.white, width: 0.5)),
+                  child: Image.asset(
+                    'assets/images/ssl_validate/login_manager_screen_settings.png',
+                  ),
+                ),
+              ),
+            ],
+          ),
+        ],
+      ),
+    );
+  }
+}
diff --git a/lib/widgets/pve_first_welcome_screen.dart b/lib/widgets/pve_first_welcome_screen.dart
new file mode 100644
index 0000000..4cfe563
--- /dev/null
+++ b/lib/widgets/pve_first_welcome_screen.dart
@@ -0,0 +1,171 @@
+import 'dart:ui';
+
+import 'package:flutter/material.dart';
+import 'package:flutter/rendering.dart';
+import 'package:shared_preferences/shared_preferences.dart';
+import 'package:pve_flutter_frontend/utils/dot_indicator.dart';
+import 'package:pve_flutter_frontend/utils/promox_colors.dart';
+import 'package:pve_flutter_frontend/widgets/firstWelcomeScreen/pve_welcome_logo.dart';
+import 'package:pve_flutter_frontend/widgets/firstWelcomeScreen/pve_welcome_faq.dart';
+import 'package:pve_flutter_frontend/widgets/firstWelcomeScreen/pve_welcome_ssl_hint.dart';
+import 'package:pve_flutter_frontend/widgets/firstWelcomeScreen/pve_welcome_last.dart';
+
+class PveWelcome extends StatefulWidget {
+  @override
+  _PveWelcomeState createState() => _PveWelcomeState();
+}
+
+class _PveWelcomeState extends State<PveWelcome> with TickerProviderStateMixin {
+  PageController _controller;
+  SharedPreferences _sharedPreferences;
+
+  final List<Widget> _pages = [
+    PveWelcomePageLogo(),
+    PveWelcomePageSSLValidation(),
+    PveWelcomePageFAQ(),
+  ];
+
+  static const Duration _pageChangeDuration = Duration(milliseconds: 150);
+  static const Curve _pageChangeCurve = Curves.easeInOut;
+
+  bool _isLast = false;
+  bool _isFirst = true;
+
+  final _buttonTextColor = Colors.white;
+  final _buttonDisabledTextColor = Colors.white30;
+
+  Future<void> _getPrefs() async {
+    _sharedPreferences = await SharedPreferences.getInstance();
+  }
+
+  Future<void> _prefs;
+
+  @override
+  void initState() {
+    super.initState();
+
+    _prefs = _getPrefs();
+    _controller = PageController();
+
+    // add last page here so we can define the callback for the start button
+    _pages.add(PveWelcomePageLast(onDone: () {
+      skipDone();
+    }));
+
+    _controller.addListener(() {
+      setState(() {
+        _isLast = _controller.page.floor() == _pages.length - 1;
+        _isFirst = _controller.page.floor() == 0;
+      });
+    });
+  }
+
+  Future<void> skipDone() async {
+    await _sharedPreferences.setBool('showWelcomeScreen', false);
+    Navigator.pushReplacementNamed(context, '/');
+  }
+
+  Widget nextDoneButton() {
+    if (_isLast) {
+      return FlatButton(
+        textColor: _buttonTextColor,
+        disabledTextColor: _buttonDisabledTextColor,
+        child: Text(
+          "Done",
+        ),
+        onPressed: () {
+          skipDone();
+        },
+      );
+    } else {
+      return FlatButton(
+        child: Text("Next"),
+        textColor: _buttonTextColor,
+        disabledTextColor: _buttonDisabledTextColor,
+        onPressed: () {
+          _controller.nextPage(
+              duration: _pageChangeDuration, curve: _pageChangeCurve);
+        },
+      );
+    }
+  }
+
+  Widget skipPrevButton() {
+    if (_isFirst) {
+      return FlatButton(
+        textColor: _buttonTextColor,
+        disabledTextColor: _buttonDisabledTextColor,
+        onPressed: () {
+          skipDone();
+        },
+        child: Text(
+          'Skip',
+        ),
+      );
+    } else {
+      return FlatButton(
+        textColor: _buttonTextColor,
+        disabledTextColor: _buttonDisabledTextColor,
+        child: Text(
+          "Prev",
+        ),
+        onPressed: () {
+          _controller.previousPage(
+              duration: _pageChangeDuration, curve: _pageChangeCurve);
+        },
+      );
+    }
+  }
+
+  @override
+  Widget build(BuildContext context) {
+    return Scaffold(
+      backgroundColor: ProxmoxColors.supportBlue,
+      body: DefaultTextStyle(
+        style: TextStyle(color: Colors.white, fontSize: 18),
+        child: FutureBuilder<void>(
+          future: _prefs,
+          builder: (BuildContext context, AsyncSnapshot snapshot) {
+            if (snapshot.connectionState == ConnectionState.done) {
+              return Column(
+                children: [
+                  Expanded(
+                    child: PageView.builder(
+                      controller: _controller,
+                      itemCount: _pages.length,
+                      itemBuilder: (context, index) {
+                        return _pages[index];
+                      },
+                    ),
+                  ),
+                  Row(
+                    mainAxisAlignment: MainAxisAlignment.spaceBetween,
+                    children: [
+                      skipPrevButton(),
+                      DotIndicator(
+                        controller: _controller,
+                        itemCount: _pages.length,
+                        onPageSelected: (int page) {
+                          _controller.animateToPage(page,
+                              duration: _pageChangeDuration,
+                              curve: _pageChangeCurve);
+                        },
+                      ),
+                      nextDoneButton(),
+                    ],
+                  ),
+                ],
+              );
+            } else {
+              return Center(
+                child: CircularProgressIndicator(
+                  valueColor: AlwaysStoppedAnimation<Color>(Colors.white70),
+                ),
+              );
+            }
+          },
+        ),
+      ),
+    );
+  }
+}
diff --git a/pubspec.yaml b/pubspec.yaml
index cb5bcdf..a605eeb 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -61,6 +61,7 @@ flutter:
     - assets/images/Proxmox_logo_white_orange_800.png
     - assets/images/Proxmox-logo-symbol-white-orange.png
     - assets/images/proxmox_logo_icon_white.png
+    - assets/images/ssl_validate/
 
   # An image asset can refer to one or more resolution-specific "variants", see
   # https://flutter.dev/assets-and-images/#resolution-aware.
-- 
2.20.1






More information about the pve-devel mailing list