From 94e1daab06cb923eec032456c858569e006dbe91 Mon Sep 17 00:00:00 2001 From: Agustina Nahir Ruidiaz Date: Mon, 23 Sep 2024 11:15:42 +0200 Subject: [PATCH 01/13] feat: add new cards --- .../components/onboarding_body/body_config.ts | 12 +- .../cards/alerts/alerts_card.tsx | 82 +++++++++ .../cards/alerts/images/alerts.png | Bin 0 -> 49520 bytes .../cards/alerts/images/alerts_icon.png | Bin 0 -> 3283 bytes .../onboarding_body/cards/alerts/index.ts | 19 ++ .../cards/alerts/translations.ts | 44 +++++ .../cards/asistant/asistant_card.tsx | 37 ++++ .../configure_connector.tsx | 51 ++++++ .../connector_setup/connector_setup.tsx | 164 ++++++++++++++++++ .../onboarding_body/cards/asistant/index.ts | 21 +++ .../cards/asistant/translations.ts | 23 +++ .../attack_discovery_card.tsx | 87 ++++++++++ .../images/attack_discovery.png | Bin 0 -> 49520 bytes .../images/attack_discovery_icon.png | Bin 0 -> 4124 bytes .../cards/attack_discovery/index.ts | 19 ++ .../cards/attack_discovery/translations.ts | 44 +++++ .../common/card_content_image_panel.styles.ts | 2 +- .../cards/dashboards/dashboards_card.tsx | 4 +- .../dashboards/images/dashboards_icon.png | Bin 0 -> 1397 bytes .../onboarding_body/cards/dashboards/index.ts | 3 +- .../cards/dashboards/translations.ts | 2 +- .../cards/rules/images/rules.png | Bin 0 -> 49520 bytes .../cards/rules/images/rules_icon.png | Bin 0 -> 1251 bytes .../onboarding_body/cards/rules/index.ts | 19 ++ .../cards/rules/rules_card.tsx | 81 +++++++++ .../cards/rules/translations.ts | 44 +++++ .../public/onboarding/constants.ts | 2 + 27 files changed, 753 insertions(+), 7 deletions(-) create mode 100644 x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/alerts/alerts_card.tsx create mode 100644 x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/alerts/images/alerts.png create mode 100644 x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/alerts/images/alerts_icon.png create mode 100644 x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/alerts/index.ts create mode 100644 x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/alerts/translations.ts create mode 100644 x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/asistant/asistant_card.tsx create mode 100644 x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/asistant/components/configure_connector/configure_connector.tsx create mode 100644 x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/asistant/components/connector_setup/connector_setup.tsx create mode 100644 x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/asistant/index.ts create mode 100644 x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/asistant/translations.ts create mode 100644 x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/attack_discovery/attack_discovery_card.tsx create mode 100644 x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/attack_discovery/images/attack_discovery.png create mode 100644 x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/attack_discovery/images/attack_discovery_icon.png create mode 100644 x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/attack_discovery/index.ts create mode 100644 x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/attack_discovery/translations.ts create mode 100644 x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/dashboards/images/dashboards_icon.png create mode 100644 x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/rules/images/rules.png create mode 100644 x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/rules/images/rules_icon.png create mode 100644 x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/rules/index.ts create mode 100644 x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/rules/rules_card.tsx create mode 100644 x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/rules/translations.ts diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/body_config.ts b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/body_config.ts index d57b38a2e02f1..d7b654d2aa0d9 100644 --- a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/body_config.ts +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/body_config.ts @@ -9,6 +9,10 @@ import { i18n } from '@kbn/i18n'; import type { OnboardingGroupConfig } from '../../types'; import { integrationsCardConfig } from './cards/integrations'; import { dashboardsCardConfig } from './cards/dashboards'; +import { rulesCardConfig } from './cards/rules'; +import { alertsCardConfig } from './cards/alerts'; +import { asistantCardConfig } from './cards/asistant'; +import { attackDiscoveryCardConfig } from './cards/attack_discovery'; export const bodyConfig: OnboardingGroupConfig[] = [ { @@ -21,6 +25,12 @@ export const bodyConfig: OnboardingGroupConfig[] = [ title: i18n.translate('xpack.securitySolution.onboarding.alertsGroup.title', { defaultMessage: 'Configure rules and alerts', }), - cards: [], + cards: [rulesCardConfig, alertsCardConfig], + }, + { + title: i18n.translate('xpack.securitySolution.onboarding.discoverGroup.title', { + defaultMessage: 'Discover Elastic AI', + }), + cards: [asistantCardConfig, attackDiscoveryCardConfig], }, ]; diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/alerts/alerts_card.tsx b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/alerts/alerts_card.tsx new file mode 100644 index 0000000000000..cc4a7e57e399c --- /dev/null +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/alerts/alerts_card.tsx @@ -0,0 +1,82 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { useCallback, useMemo } from 'react'; +import { EuiFlexGroup, EuiFlexItem, EuiIcon, EuiLink, EuiSpacer, EuiText } from '@elastic/eui'; +import { SecurityPageName } from '@kbn/security-solution-navigation'; +import { SecuritySolutionLinkButton } from '../../../../../common/components/links'; +import { OnboardingCardId } from '../../../../constants'; +import type { OnboardingCardComponent } from '../../../../types'; +import { OnboardingCardContentImagePanel } from '../common/card_content_image_panel'; +import { CardCallOut } from '../common/card_callout'; +import alertsImageSrc from './images/alerts.png'; +import * as i18n from './translations'; + +export const AlertsCard: OnboardingCardComponent = ({ + isCardComplete, + setExpandedCardId, + setComplete, +}) => { + const isIntegrationsCardComplete = useMemo( + () => isCardComplete(OnboardingCardId.integrations), + [isCardComplete] + ); + + const expandIntegrationsCard = useCallback(() => { + setExpandedCardId(OnboardingCardId.integrations, { scroll: true }); + }, [setExpandedCardId]); + + return ( + + + + + {i18n.ALERTS_CARD_DESCRIPTION} + + {!isIntegrationsCardComplete && ( + <> + + + + {i18n.ALERTS_CARD_CALLOUT_INTEGRATIONS_BUTTON} + + + + + + } + /> + + )} + + + setComplete(true)} + deepLinkId={SecurityPageName.alerts} + fill + isDisabled={!isIntegrationsCardComplete} + > + {i18n.ALERTS_CARD_VIEW_ALERTS_BUTTON} + + + + + ); +}; + +// eslint-disable-next-line import/no-default-export +export default AlertsCard; diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/alerts/images/alerts.png b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/alerts/images/alerts.png new file mode 100644 index 0000000000000000000000000000000000000000..0d6b551e096613c60ac1cee0aedd73c966f3493a GIT binary patch literal 49520 zcmb?@cU)6R_ctP}3L2mu1pOF~ZwA;}x}d3K-G{r&ldPd;~Y@64GqXTEdJnKS3|+)!VWhwB^{8yg#s z*1bDMY-|TVv9Yl~Is6Oj&Oi#PpLOAIxvh7bjqQCL_r4=1>$kAeJtI9fwvelAY>%F@ zvF)*LJz8XA^Ot60TXtY$Q%YfD7p4 zJ8+KeJ2h5`P5Xer-({l%*Zy0FosBKpjg8~Kb*xy|@1H+d-|ubyb3OR>!2c+|W&f-8 z!B1}w{#9mw^1YetrL(TA%MtH;mcDFkXGOk$4`>-(S!YqRbThH=v(VF3a)NnEIXc50 zfTe;wy}!3&QwdUH6+OXzj>18n9$vmmL8_Pjtf9mzf4>d5B>ZO;Kd9;@3q3<&b(jxW zSYAq6O8OFzOITP~#m5<ZMEHJNotJ%6VUyrJ@E%^&Xlw;vV2_s;*p z%zsAu=UvuNfm|wpzr_aR;{Zy8Xhg*R=iDHN98yzlTt1zr&tf{OG!VqW8>k zp?ZxIOe@fMf;!G|Rm*2Sn{8S^Fplc$5#{jn{@3lo*JvY2o!} zYhdM8{#Mp}D7+=HD^67|9CbOe9po$RdijRYmN|Vq7f8!}cZZpu?&A_NmuoOt)1`ZL zAkpL98azmGOU}dEM~l`K^!{n-0pFWW5ariu#45x zp6DYh3Dw5pNfv{eTDVlP0R$*E3U>HS*V zWAEE(b9k*S;1oU0%V#5?!@Vk&~zB-lamQgc5WR_GmhKR^IL2x#~Y<*tS4m(mpSMf_)c>Ulv-) zxGKy`mro0D<5&W7N#N4Hs4_M1D<9sJ`E-R~CxR}zgw%m!HfW#&r}w8Qtq!@cUn7_W zu%peQt83R^Pp>g=GISPq;U?`l32^4i_mhuVw?bOTwS^2Rz01aT3$+*aEOuU8G1FT+ zqcA=Tej~M6{&HyiE+2K5{LO}xiFJST=E|Jgdgzeeg4r1XacMK@40+)q@p$1YRHtF( zBp!=Zp>OSW#7@at|h= z@ldpnmS+*~w;MB0ZmbhCiJhM)08epx{KXwhyId7HGu#a=YIiJ5Q4TR1L+`oOx1RF; zzJMqUUSlBhdboF6WJgZWq{JYd3!YERLmJ~8_D>yBpRi&kQ1q2PE0<|^%IzQ2K1a6e zkM8>n`P|}CMp2g(fj>&?J^j>_S^^isDi+@YCzBPNox=-@h9}|jz>6dNpdP!ih4t{< zw5J;l{`G)a!)Z9;tj_X*(fcAHjrD=Zp4pj`GqT^kLQCPZ|Kon*AAeq z5Q7x8v9(l2Uc?3!&^ zyZe~^bi}^3C5@6yVD2fv=Lyac%oW1P2qtD<+=fPrA~4Zwmmac!vAuSOt|xkdT#KN` zltbx(6?DP0{ddQlQnv%E>3Cz>T|1YIFI-Dx$Z z;~`$ytG+Jm502ztcai%d^4$5|jRplCeIOr7Gl)-Md2c&?Ehq(m#l*-V^T9L|CFC z+8TjAOZJ586f#k{_fWg}71W3VwG-}ZZXfQCJZyQpBA)_iSS-SJs*sPABcu`uq$g7Y z7gkS6-Tr~e@1*BN|L}Es7Pe2~wcQ(mi{DmdM?IVYh?}UjrGbJL zrv{4CidBGel)i+ zEHjxLNX~3``$<&CAE`yD<=F(&bQtSr%2B;_7Z~e8cL#7l8O9`OVqnF9DZ~p%E{0(i zy}5rD^YKL}`wM?2X^pY5>x^)Rcj@QGOv62~#p86RM#ihT{&3ZrTf9HF;yGfXuqxQf zbRy6uDenZ8<>%kUv}VKt_FnR4OclJeA2ZDQ?cYoyP8FJo8&JFCK(|)wX5{Y<=!FV> zAx@xXaN(1pAz}jD@OVhg?(Pn z3f;V4cI$qjnON)a0{vt7zj*l2#8F%pV&moKfAL)Ei*N4L4UTqhV*f^8xc&zNcA*4} z>DI%C>Zbwb_QU1&3t6-bmqx-Kz`!>yero@pVDlLD0~Lu(Di(Gh-gwwd*9GsooGxtZ0 zCvJ3RP07P1mxtqGuTG4kpwXd=**605k_wFo`s|*_N=PlHuTGhCh^pG-#SS7kL#ntDo1uki}hJ89TNg>+@bX6t+TNilv8lJ#I zW5ns(Kt4~qh2i}Ul#SQECvd7ci~)&?dsuH=7SKwemFp(yU;w(3Ke5UX@%~0m7`McP zWC>ijkXn0c1}My!^d~F_sf`oKh??-`&=J&y`O`-+$)r%%FiS-xvPv-dmAvN<&MtCa{HTZDnEg9=<9^nKHr+}!mh*Kd^(}=?X7?6 zrSH<(d;P%}!Du8^*~5*D%gPDT%Y90;di{|#+M~KtMR=n9?sm@jOGHqRv8|$eo8d|6 zl@OeNW7=Sk0@%asQQ(QeRDdUhETxp?MWNjE!>BrZ>TK4+%R^=>f^Mk=J_QOW4(KPtTnjBdS|boA)7ExO4g`7ez^O=xLxP6 zzQ3^VPHVWF;^y_6*!S1B`>zH6u!0;qPW5|uG%g`gh=nRN_JL6?9wvIYh9SRY^ByhV zV7A$DYg6>v-54?J>&D0Tvw7{lO@>b0AO*JENNv(@b*rW&OwUYU7~C;L5+SzDe8JT&3mfz|-`Zb-vK z3*^a82CNYskml8?ucE4ojg5Fmvx1up@?ACXCJ=0k@eQHxmPuLHXq7K$6cl5$6uppbAK*`zPGay&riq+>u)X}?&}5iV_zF!R2Ohw znIqxvK*zeU`H|)O-;xv9Y{6aDgRk!!?C*%y`A=r8?oWXtZWS2hx1IT6dVf97PLy!# zGYT1fC|V~(@1#_AY)!JTRiIkwD-QP`A6$s=W;W3?OJvGS-hBb}Dl_e{zHW!+xY(J~ z<}rvBL4er=MaX8wM>OI?{j}4;QsEVsN4|0URWv*v^U#3yMbgWoa+NXP*f;@Vh_O`E zc1NT`8hwzjb*gXU_OdGD)dSD|oopSz!v*Sxy88{7?tA(G&cgDYMyr)qPCE7tGSy&8 z+B369rQ3)whmzcd*hJnnIVVpoO^xu+0B*iR)!7afN>_fs4I8_LgZd%JliuNZNlmMo zC1@>vt=*%-pZr==%FC^8TPLsZWMekjz@RwR%YUZh$@~y7O40kl{^?`)tx#2% zBajzz%1Ebl;LZ{TJ14P)*2Oggg(L8IDP0dSZ_^KZCtJ7Dx=>4!u+Zos*-!S{vaQn+ zK4v6dOz1-y<$Xf4%Fk=>GJASWRqM=qoNcRP4miCfppnkfxMAyQL}%sO{-^KO7uL0= zRO2?oy*#3=?Qi*UU+4T-a6y%n70^bRAdGK`2YzaWcW1WJt_2d?fFz#++qLmwP(ZyV z6BXKq%>f<;-aIa-Y!T3bMPZT#<7W}HyzXhACD#p0%yyeba0Xj9Zj+|0|W z)4^rAxCfHyNm-Al+=UA*9eU+U7?^!jdx-olgn4x1PY(8zXLUmA8M+#QJ*E0B0zBHL< zX6pW|>yIDcEYBR3vm#zA^px{&q}#6oN8hXMwnXP!6C-R}-gKM43(GsHA3rQ^jlTA) zNdcZ@O1*MbLiJ{AFBlYIHzVF%= zo|qO{+KO=2;LMFq?BCie%!zk_OCCN}d<^X_Z=r)EY=H>Y1c{a7*@|3My4Kw}T0hP4 z{3UOSZEIRd@!TfftG*tb=~c^YQx>%%2TMIGf$<|s+&^yK>eIYmZRJKg?^vCSv+z9Y zPkF-I5Ga3wBR$Y5?_KEX@LB_t+Q=k%h5OD%>^CIDkJtmf#+%7;%-uiqkbcP55dZ27 zOWC@R8gujJ%B4x#Ape7sAydpjaW`~TyhqXaY9Y|(Y-!#gdPB=@c=gJQkG!fv8Rr-L zjFd_w>g$~k%2ocr^#`^SyEucgKx5;V_Jh#E3!A8ql~{L{4YOyU?P|+EYEPNbvPFg~ zt4B>X53X64@jzCGm_T0@YG$E^PNWhP878=a_{bZ3k4pw^APsnVd*7qcxXxJM!Aq9smjmvco?oWur@d0 zOvIKo!C%{CXC()9hByvg+7!AFtZRH#W9G5A9zjL?upP(`nLZvGWWf1x`RHwLWAzuu zfAIJ!*dj|>so1-ms1ar-Ve*p0ZQJ&E7#~yclDt}d`(PzLNDC3s8 zz9JOxSRlqlz9p@j;Tt>pEoxIBzFjSH034K-8JONIEcU&#Gw*kGa3 zfcf*HP&G_n1S6iez67xA6xe3~U#yb#%h@(zdaS3LdHM;3G5Pj?F+<$T8cHNV?WkpY z_cdd-uRZzM*E{UGCDwd_&T_?{;|+WSOOk z83?b{#>BqJoDhdDHRp5wyBh(Hckb1L1HMo3>zt2b-dP1R;y}Dz&L6hA3A`%Z1n~#H(1^mxHN+h{G4j)bQhUqE-tq3`i+Z#+x7hE${VQ~`m!xLb zsIkC1pK^kPzu5jSp}Rg)D>5nD%^O%fH^Ft&`CruGN7~=R@7#*je8(WNXQ}^-ewwIZ z>^mEi(xk5565%612QiK>+OyXi6`f4%7Rfq6BHU>A{dv+|BR_mJQtYf;Jp1S(*U!!A zdJe9IQx8hxylMrUW)6+Vs?L_d$6(}gyY)%flSUeemV^>+^U4)`}} z-Cm!82W2)wRwM6nespId)(EMif0PC!Jf2DqFlY!jPK@<-A3@CZ3n^QW!?S#b@}9*N z4c8GOMlL8k^bT>@ePy8AfM07OY)zk_&jo=7fB7fImpS%ddEYdZR8Rn$k0{+VmI9n# zJztEiyMlm)J|1hHu0cpDu^nq3)UAXh;`IXKc=R9fRSt4RDwFl2@A7OZQ&etBAMif> z)~2W~G%)tr-Ps=|Ia1{6akr60?85}8`NBiUN8pF+7JzvAXBnF>Ih;-7M_XQJL-ZPwZQ8u_tQholDlfj~}WJ$*(VV?rg_A8*@=Pd+8=zb>;>LF;_-x57Mo3 z9$B=ZH5y9>uDS94Z#BOaJ#zG$8-M17-_7(17KNUloi6^yJtBL7Th>bdx&EupbD5WI zx~f~}d;wXPn=+ohWUd(=fu7fl_ADz-p3rK z@u0@+&P_lU4pZ6}r#Swe+F#Y!pM+Uy6ht?s4k?^vW7)Qh$4@049AQlb_qtQAMe<@>J3of1I<%=$WW7 za?VKK39m-=U;h{IJ#KM263fXxeK!*N_GW{am*JSziJ5_O<e z=WFu@m)nExB!;yRU7jWvKN4PdBU`x$t9%`@6)FBGo#CGEW=mRl~!K$}=ykoaQJ$_Q_`ikpUl~+LaBN15EPi?TYQ6G9{)vC8(C@Re2s|K&I6Ws$1jLXc%-4Su z+;^~6NJrj^%_%%*{_fe`*Z)B8e~a6oNTVW?=i52V#@~4VtsuBhvD}Qos`XFr?)@7J zdkD47SJEs|GSvnT{>+$blG?ys#Uu>{9d5;+pDp^bV}nd{->hs!OacFg$N!q^x7XR9 zExGY6h(FwkJk*(KFG?&nZH1Z1Q3-QCitsg9SR|vH%7lnc6wKMl7A00`X#oee<(<3Z zJ^DtI9%J*y22t;-=q9KvO5%Mf?Qm0pP0P~xS@m3-!LqT!-G;Arvo!Opxz1Mwa(wRe zq~?rT`UN9elBgH>imgfQ^C%luTc4JJDIt6A5>&rxH>saur~X03~t@~E>5ubRKm zzP)TWk}TLaS~EJCWWL+;{YDHg|bmJiAs<coGm^5kdJ{K`xL^fQ(Iy+<2G1yELYEY>? zuX#B*@tJ(DMpAX6%bWnt!x=NXD#j0F$}&HnSoQ|>;T`$*J<^$$T_(>X{{|ze5^1bX8H4Wy?;~W-sWh~x5ks@IXKGBK zp_tsv164O~UXBnU=aE2lE$C}}G$j~8)D%0e=eOyeKa990btTf}K>_6Q{bKrIdSS=o z2t%xwyYdUj*!{~#;?l}x1Hyz!2d4`s4++_X(D^NcXN~nh&01W`5!N_erihdfgmEC# zwjiRj#jdBrSzg(`xcEw{U5My_U(ad`$?fW^+?y81wa#uD<2H6x?$Oa#`4pjJ0Cub&>*=x* zh&QgJ&0gI-QRC8)?KxzeijHE%jq8_O%8Sjpc63EOy0+m0WjjdNx$BJ z;i!ocV2LP6Ocwvm%50gXQJM}_0svKjnm1^RDYOz*Q-{y* z4SA$yjTxt5U^sczt&g+*LNZ4^Qvt(pXg5hDy;@ul+O~`=?XTHPLQZZYGb>bjwx|Xm zozG)IZZ^Noe}g)K=RT{1_Ez$GUWa+6X2nETdy-KBy80n8VXvE((uhc&M)UB|@3QUc zsR@tO9q#fc6lV5kZH9pH>6obMwgnKKexk+TRp6JKJufrk6Zr!tT)Nd+YbA`aV>eJ@ zjDUxK-r*-}iq3tTo}RYxF{VA~m<&UwTd(O7ynQx6V%2bIlLv4aZM(=<>>7$i{2+8{ z>|?diQzg?Cr{dr9s$H^&c6SZ(K4)Za!q^oh@E-vamP&h_1AG<&MP*kY1*7;BPteY7 z@Zfv-QqZ$cJphiK?!9CqEl-^SFXOu(o4roq8QoFR{OSNJ7xQGE?Y4-oTkMza!u7NY zJnu}JCt^FVpV9iZmsYk^3PyW*KB#>z)YPo{i%r4vZgY5+Xf}4>-mVyFL3_ts|0aJJ_ zX)&u>@>MP~4#1RfbP5Kd&}0sDcJ|aVLp%2>G#2Xz>m(_J4;eRa&PQW)Cc}D@z~EB5 z8f0HeanD%aaP(Z|z%{MUtLb5v@mHPXSMAKHxz53;qRoo9`1eZP(dJ9hT9w%?R2QZB zCnQOsv8gQ(tvM519tvcl_;Iu^lhNb|nSg+5%3E}i4SHJ-)3xdg-HFGv)Rsz!LzODQ z{xQHDT*wwWtY0quiW6C{<+W$Rjqt`1Q{Z*WNsnTc)g0&VvNPRtjQ1#nF;ZixZ$rDI z#QnH&7uQF|ks;)j_<}%?!C>h$gRr4%r%~QO)D=pT;(l!U< zS~D3YBjne66`c~E0CUDW>k>%*i3Zw93h83Jv}^n&sIZ{K77?__9{QE{`&%n<=S`yk z&^ukSghtxu9xLLxyRwAh>$kWP7>hN|g4$QyAALGzjlWu+bW;{8_&c-)(vYCN=h{+s zvc?>6RK{H$J!U$&Z)E40KR;-Ol(HW}LB-M;Z+iQ)svTvFcs>hXm)DM5*?Ba$n%ZJ} z>e!^k1N)IHr{#6*x{`a3k&S!#mE7#HqPVUFY^NIN#%m>IAs z1S=coLTaWVq%3T3O&7fAQWM^2&a${IW#q|YJ1k3j6{eTQQ(|7vsdzO9dO01UV?I>d zv}9F35nZF(df&FtMP8lSk1zzixgj8iO1{D6{|2E`em`>(njIEYE?;Wf7*$#6vSvDm z<;CjA>kfkw#bGtSrB?KKSXjGX)`h5p&0IW3<=$Y%WE-<}Qxxo1-8ZuZv0&qCLS1PY zT}T^nOqd)aJ7ed*l9;)BZo0{?Q2hO7Y7W%3?Yl{9Fb7r%?m2Gy+V<8~L;$TJ_%VfW zTVk`|a(afX-sIR&vz=MF50Dwnz`HlKqbFfzXD3T0Eym=!Z8nRI2QB#FD3`egZG9Pt z_?si$JyF$(;cIC;OV*jq2CL`B`u=}1Mcv1|st$^J)h_CMdedz3mYC48TrrB0zWnA> z=u%pXtvU+@N+L1U%S7OHWTJTa=6bl>j+skMZ`6bfp%J1UV&<|Y+Za`YBKLS*J2hWg z9w0~U*RP2iKR6~vk8o`cy3Huu`w-!l*sED z9g(tcW4PW%}6BfO>0uE{1rrRx{Y0{!_e5Qi>f{J@_W-Q zLr!ZKv-p<+O?$S7|gSVmCURKF1w{t}w@1^b*X>WD95HbE+on=K9rH5Ju zW-X_!LW??Z0kb0)$xvcpU+Z;epR<_$1fMw06j)`^GvsM74InlvNVh@H9sV; zKiXr`L%#C0djUufGb#X0xS`yD8RMck`alde9h*s#U~uJJHm_yle1TsNLIXS;wWI@l zGt?}CO28iJmIP$>=Px~-GdpXiE(jgjD^luC7i3NQa$;=>%fqYa>(c#P2GOA;jbQ!s z`u3&yp+h7Q7tg0E>Wba0$2_Qn#DQ>E%&c?Uciz*&ZA~F)ztWzuTA#+`F!^#B6wEyF zdTPu5`!FltMFS{)`!{PxyB$l*q10{#toSpa^A-g4I>tnq?iTWS(jxs8ZXkTvY?L=a zHZ-1h#UFNEJVBB-{L7deD9?#;Qw$}qYrmPDL6S_(MCx031us37*Atbftz191Y|%Ju zfVG@ly*ILLTHa)(dL|^ za6#prngAYUv)U4+t&WxSS8GXM6RzOyOcE^BlD04Yk^EMYnh4toIK?d+afRG$cL^2% z-DF8%*u-T^>rAP8eqVCWps~P#?)I9h_!`J#sdQU|J!6!605T5J)dhW^C9Rr3QCvwr zQ+yAAF~7dlNW#J<#O+r?Ef!uTID^qKe*5AZTAUxlL(+$r#Ch#a*BbWtB3w&(pYzIv z=9iZY+Q^tGbeF45E)$gy8P0F!H}(97?YmcsPwyqK8%965X-?=t^q0|d9Q|dS$i2?j zK<3S8`Qv~*e$x^Ss=am8(9mojDly5o3!{RD#eR4CPdQU@M#K|XsXYN(b@+W7C zS-DbTDo;u6Ceo`=!Q9sM@|zp!tSyj9@GS<51++yft{-b;;R0@mn(M-ckG6FA!FC)o zag{QSy#7eR1oZGTB{LVL08bMy{{S8^vS;jTbG);JC9otpQI@(+7g$bfss{U;d6{FQ z{mm}az;?1FyQ60Swjv1zYlEQ)h>}U?9b!G?({GAPR-j%$W7?$6h=xx#9KwRzC7Qs8t$z56$r@K|!xMfrs-+iC3J^o0iSU z40QAw!Ej`@RI&u+(-@`FlkeO{)>EhgQ@!`q!@Hx2EO|ivFbkj<`}qgX<1r;MEIT)^ zC-qg9glj-fhWS7M=ix&mrT~`UsuQdEC#``cP83!LJ2JE+OpW7aw(Zaj%Y+*O4N+Q@ z|4VL@WnuuTNM}SNa`eH_&1=QiwG7K~g2vuA@vauI7?F_=v5D!b6Vb62^@(}r0<)>) z+>u40t1Cg5Qr#5Z7;HEHv3I=2a-@96(#I@mkt6cmb`Pd%&CSpS3^5N$Lh4gc%g`F6 zYI!FKuq8RkWt4 zHs;G|Esj^{VeuCCG=T*XxoIe3kGD41*j~LgvDR6}EU6mogM(gHOiUF_fL(F%cSQ8G z8p44S9=1V3^VlTP4wq*-ubI%Kb<68mTusCJq=#iH&dslP86z^}QD5yA5L3EcDkaf9 zCYNdml;}=UP_}b7zU~YIez$|w36kc`*wj^<5kvjpM)O8ogte`!4mdlmn7jK^6L!g6 zshAi1DRi#w^du(lG8LJTXqgU?eZviA!E*4(R(4reZ$8?B{wK5qhoCI>o~bc{WZ1~`CRwLLMn<&>%bzNdwh2e( z+A2Nj-yfzr&*kOFCsz94LeckFF20N{pSB~u3*Wp7rg{2j>m|y$%+J2w(+7Szd18h;Ax6MRkZ}-!OKl9UQHGZs%%x5zh`%MM4(s zVM(_0aZH`#ZBFahcHfcBlVw)E!hx9`!u^%0o6XX0*TLddgps%ZTSYfyTEID@G_qg*p54S)qM{a zng}qdF$}*f5aUlh6s%X*|P*>2O(s?e^|GL)`?IgLEq{tl@jM9KKFb#t0(V_F2+ZjL)q(uD9u<8mg_#_Vb+ zfGRC%0>B}4S!=7;D@UdzowAHM5t~7fc**gP*!6#kzjCl2(w=((+N=pMBnfY)0DnFo z{GfK~SAPCJYR8)TL7vFIpO5!GOdbD1Lr)b--=gOg{1gNhmY(9Ma`ZFt8#)*pN%~jI zx5o>2d2)urKOV~K+&=Yli1?TEM+9jlvC}~sK@|kf?F&CX{~&x~J<_}0hD$$RFt=~W z{O4HgueaD4OH-ruBI8mk<{)2cTxavb#&~{w)aCJ8z{;yjf>=MeaG; zUH^_5i^r%{$H%>!c1_6}5chOm;{7?od-IB+2L4=m&^|$U z_XXgpY`Z;uOksQtK^t#~YyM;4)ea$izp_2C8andTc5M2Iqe$J?c2+|!rbl5{6=0&_b%?{G`NF5xhzERb~@=H=IT}T)C$$Z zoI1E9;8k}qRS!6T>0^v++0Q>&m3$s9+4fx=TmI1T(EZiYypd*xo)&q00g)gPD6hB# zjWU=0T7Y0U3#A}tCdn>q$Zj#|mhC4@d`}&(&0gz-8DSVd8RBS5;&-73gcsGagNHzE zc;ylN0{d(6r0LGe>m{K2~vlzKWC);hfXHTJXr` zc18T-2i1ICU2wEje4Lmu;mwtjCe^L5l~OlaapTlu(7>~Qtty_wZ^DnBpVPjdciWb5 zmd+AL+HRJL6RiNoLgBpcKB@-hW51>It}Qo|GsWt+(uJt64M<(Ovi@fO z5O8<;j-C&5{TZe~d|xM+Ge51!R(I^ZZvk%=V#Otnfb&iz^SfkZ?K;+Lj$X2GEwPv}x8es^;QEFxQ!i z7E-mWZ0&GVk?ZqnXNe*~C@qlQH)16(DTEd64Y4-d-(Nso8B2NikK@ko$5s8mtAX8% z&n;}d=RKHw^-N7>MNnH#`q|QS70?PI+tlcf!nYQY1(5-O`76u)iaJ_2jbI>a}Y%QQ%XDbDm zQ2g{7fwKwhLyflp7&V66iq45ah2%y@s5?@ z(w)fl)~n^Mw04)}$7x4ec4}^VSBrF#k)_KL7G~=#M#G2Po=9-EaQS#reRp4N9Fn3} zgiat@(Ba<_+ynwps}LBjinG85%MY34L7*yO3iZ^m7l1LL5+EG|L^$vKkqz= zr>a%nY&afwCv$mLiX$0%ng2lOei96}!}`M;jDOxSdQW(qVI)uc>`SwGVR^E*hL~@v*Y+oLNOtZ*A4} zBoDV=%+LXT^42c9B50Pf~fWvy#c%CbyN6 z2{N*H>xq!ZC41ohL0*59l# zg@Wi@nQ9m#O6JFW5|-_9kdL$}GC_y$%i4qH?k+Hfd)g{cV5^qKV5T}L4@3=AuoLSm zq9NqZlYqWmupUc75f}I4GrD7&a~d^gTuEE9<=p60)ljM0*OKTSbHY8BY#Ch7UVaXu zkAlKzD_zDt-hAe<^ML-vyM=G!ljz}_cO5+TAK~A-j38X!8xhx27i9P6Em^tnZ>T$WhdwYRHXOhimsDn z&i7Q9iHmO^87|%DH3&>xi{rogcDYOx7|T1je3EI5BGS8hvq3V0_NLZg9e<+taIrvQ=adTp5~8 zN&V3V^ysPKo#k$=yLvtA_^J}veM2A6dkp??VS=OmW#q4m*Ve(&i){A}RdOkvF%g>@ zXZ(I@B34j2fd*}*+fwEL5iJKLtGs^uNG-9WYXp*I;hnbI?!Yvv)cUvont_VVBeOXf z0{l{Stjvsk0`{`kHPS@*qpRY^*q{fgpJyM>)F>0hN@o%yq{&k<)!MShU9&!vLvv#qKB(zjlgz+%UDLng{w6^Xe z!ls&gl~a7V8o=g}<;!1_;ytwW<=gz8^M)jz-tGeBaT7L=1@=}Gv>rS59xEYsx2_vJ z$Lz6-Z0mevEHvACp034~OB*)I(*&2nG_ea@pYm$MX*ExuEQ#o|44e3)M@fx@MySM* zN9JmQi|qgL-yAFtyUrMf2O~#fX`Kl?atcB%WugbaU4;7?sZ>c=3~CJ1s4nRj?LI@? zxY#96RfsHbX`i_%CT(UX`XMas`Z`-ghfuS`(v!!- z6zW@3RNGkx=IVcio^;D{{qA)61KBEzLYy`>*Yj5xdn{Pn{h9_IE87 zW@<>BqpDXfZrV?6HX zPOFF=H!=E9ocq@J04ko{H7_n=-&pH-+W4-JGF_rvgmc(kJeWGsYE6~4!b8NH+%+Fk z>6B#qR1WfTLY^#Lck{lGvP>$c*_0&W%y?Hc%dJp7F(k7htz|EZ-89#!-r?H$&2kfU z#Lw3S{J0M1bc0~4bSmSQkJbvMfzff~VTF+`s=nZVmcZMQ!$;3-k{qoyCJZkIknf@x zQcH=c)7M`3yodX5pP#l9;Mk8;LveVJv01#sx&`r)2@!1qcA4ib!Q|7Y-G4DfKL&Fa zST!JVCY(vyfUu8SVf{hc@guzA<$P5suO)H)5~b`W)NE%|3tuz6m%*}t-`r`IF3eb3 zatWjQ!YlE6W))H(If1Zx-Xs8Ht5rAaOjdb$+CzEO-Yj^>p@G36-@au)(Tzw+1|CDB z`&jq(OSx<^YeaQ&l2N@8o;nzg6>F$SxV7H#@$$>h34dCrekezkgjL)*;;3vEvSB$< zuS$$sw>%QIbXw#jhp+=jRj$QSju6ey2aBrHwx@O}#IICGpsw|%h#jt0>SZkR+uK$* zS)n?XG%WhG?6k}|aRG?aeH-c@i{s_HjXs>aif#Tj2hd5n(w#N-24uB|bl5QgwLvk0 z;ts=#LnE{g*my`Jd}|4#&%QKtfq6@)-My{srX{>Goc?Srj`fHRVnT`+o;>udyla*6 zC~IIMVD$uAu}ujYRBwlmBlJ`*K8qH8UE%UrbEI55%gNn{=f+>~OA~$zNU2V!GDA-^ z`XZ0Scya->8t#6!Z zf)Vl-vh8DXdp<&S#rg*-A+P0VCAr}K<#fr1`g=1p;qW{U`?)n^jEd@!GVtZEL#R(Z zzle_R4ivB!0&*ewO$ZT}2fX_N{~zZeQvL9GB4r|F7i&_PQ^o$x3)GTVG&QaXVpeyy z%+?zqQl*sIJ-NQWo~02*a}hP`Wru2*eRPtStdW9>Hr3AIV#Z|aJ8H!7X^LLepnMmd z%HFu!&5Z3~L9G$FA?15Z3$40{OnA@b8nS=wjz@*y##@)vdw+Q@5k6I1{N}Vl8&M&Zd_JQk)wEcSRXaiNcmya!d@&P`PNL|H%123v>y%guzi~O+L z?))u3$>a53@ed0ncBNRu$cjFGQb5G3}h_zE!YdzWj%W);ONyt4~wb08A zYvtd_p@XT>+9evdv?~amCz*dnK;G6Kd37|e6`CA+a6rRk8&7~GbpV(e-haMr(SJ0u zG+ll-=fECF*dxC@`&A2DKYt`WYg;7B=;DQ@8>^J}ZSX(A!J2(CC7!&n7@!?%Aa?vv zVCebpTr4`VkGWX@Sit{}>&{{ee*7Bk^3%($DoS*vCQ#UCoxi~Kca;zCjeX5NB>IIV?|RsBTA4qeH#uY@K=0xKgYz>(pj$z7>PhM>hxX|{v)onedR!D zXhwz@b%OPl=H^WYgV_53MbqDXz3PrPeu0UO>!$skWG<(8`yGE~L=wMkVqmAowYuy& zEj86~+^w=*dgU!(QFQd-k-r&cMMBioZm+k0j2BNV;rRISz^zA0cZEjvbx@%7eWQFY(@FpNV>2?$7w2+}H@g9u1> zw@6D#4>_Qqh@c{!N=YN#siJiE&|QPn(7XpwAMo>ifB(!i7jyR6wf4R46?*|1oZV-- z(SDbHbXF|s!qo*>J5i_Hx=a+BfpCLraJ-KzrIj)cdXPw64=E!?x~y&6BhSxDO3#pk zTXo<%vC=S+@h`5!Hsf5^t|Rrmo9)O}d0T>j%La%5yub^7t~vT7-vBVo3~Sdb>@a#` z@%^~j&Nb@Tm1FI)ww;`wXFAwph&u=j{^oh0?KsA73Hg)U3ERPBBGZ_1*!a+>C)&b7 z>lyq>g`JsXh#Q(KmPYxnZ%E@hY{@B?a!;x3B+H1!?`qPV6FF}_I zXX}9q=jHzP?usRrlcg=I57b}0Vh`*9?JlWKb!Yiut-utfZxftz(0xq z#)4S}`xdrRZnzOkftgbvz8c3#gJ?OxBE+vnt&Nn9XU1(XYjRdb-5RNNZGSy_a55*3 z+iTAAP}wNcWyvxv)1ddKT;E%dWBi3s-vjgZ!^ zgs+ABI3;+z@M((_+5e(g9=ba)FLFc(FvVA!ui7&!=SIfm*GfgF9;W-M6&CrdH_W%a z$Fj@a+i@K&9`Nn}ayh;Ww{#He>iQu3E$6Qcu6pwzGxIzf4-W4k_gcK76-!5-RUUXG z;;$wgwH6+-ZfZ*(0j&J{ErObrMug(pcH>IC%kUioqzv-AsF$;fE5L=hzohS&B0lFx zRd^jB8FxxWAM4)R%--RyJi_2`Gw`}CfV)-uZkH|g_nqN76@t#(E(hm|!FScQvZ)0l z+jV8J%n^rly|Rbgzf?N4%wnxIa4Y301}ga0-V{#iP}Lf2`a}nY&Yf;RFBa1eHI!@= z&H6Elc`bI&Ux_EC*Xm^YK|K}k(C(E8?R|2s8mit+&2t*quj9L_CGLz<()Zn4R5v?% z26;SNISL>=Tz~C~{@!QP&KNO~gXr4T8hxAs*OgKJJa|5COKf#ZZ9dPJ18f>C!`(U8 zTlE#iCnPk)KK&TSP(0b1c$cL+HOD(&pPPB*)gDWxPwf9SQl6o;&qWr0BLT(VUe6Ll zIEwE7Y|C9ZaaonrDTIa}6o-|R6NLy?IWyIz~B zQsanxUiqs%@O|N{$jmpX`IS&U7e>*i@q)ISF{zy6_j$6ygA(zmnTx1i-FaDIJ@3CZ zq4tip?B`@WA73~pQKfDAw_rn#y>T1wqSHDeb!PtD$xvX4`sg4H05#9K#irk%y=j>) z(rziKHBcV$Kvn~_Jb@JWTV&1d-jkB;4GukRJC*u*!LegAB+bcj&ew>x^@P0-jEtz3 z`uRVDhYtFAYvaIWF<<&4QLPM1)H&EA)<(Xxcr7+}Fm6L{Yj4P44~7#LwII^nd>#>K z$$(A}b0Zbk!C8hx7Lj6x!N(&wv^l(9809vN#Oo`yS9QKUI|-4c8?V$8toHk-Rf_r^5ozPVkb z;81Rlm9B_Z!L!OlL?#FRty;U2ubz*4#Q;=G7v51`JAr$80REklFA`)-#8Xc!w{EJL zXFTQijIZ=TJWupmIc9Fu4q^NCri8z{d%-|Hol|8Mv#@+sBypsKh>A1G{E5dl{}7&2o}D~psbz7`>)u$fOzKY=HK$b$9CGR)kHSE& ziEy6yB^N96Lumbp?Pl_s%TF8N4%!{9OWK1kKy}%+Ziy?+D>y|N>QU`N_r1I|Q0;iC zk$Gd`PXkho_8Lm78WF9YDISfK6mHU*+t@MOj_`%OIUo|a#!a8IgFG;8w=xvV2Q8cP z{F3nHIZ@&C1T6YrEk8wD?>B71((ul}didsqCh^QOn%cwV^r{8^S`x~ugB5L03R9`@ z@3D;D6lnWOUAdi~i=eC?{I&eyguc-RG0=b0{p+bXr+~eo%OSTmqokhdJ3Kn2p0?cL zqjK-7R9IS~<_oi;pQ3%w8D1`;+1z^sZ@$eb(sleqk%K@-xM5tng&z;&b`Qhc@<3~? z)s7UBQcIx}nw!%@T~ao*X0TU%;F?&yJL|Ue=X} z#sODhObt@qGr)ZnfK_;^-}YmCL7f_Yof=PKQG1@EBoy~qiWcmY|Gq$?cDNZ&rQ4Hj zWCh$8Q(9F81sf*fQQBT$OMp|DjgaY}xJ#KBcRASO0*U+0!+@eA>tgooF)<>XS{^xh zyT+;he`qey_E?(h8d&FMXEPn2yN@SPh7Xp7r4yG>Q4Hhyf$P;@7Z^hlDr)?FSwFzk zBLAbd4fNFej%_g zoQ35?Zlz1z-L*Bqk76S*?T_b`gH_~<}g)tAJ6X2I6F*cT24&x8g(pn6bc`uVw>k*Iv4hP zx3bAV*a4cjO~=KLD;`QgU;6q@+DNU>Eq$c391dUn=(o9iGd)%VLI470thG9^6+T${ zVm~Ey;!?GbtJh%MHHBTAO^mqRQ9T3bV08C^S}`~3iu$*z7uR2YVL>lYZ$k#? zCb06CY3wfDv$=`~l#%-IItZiXX#_W)iGm^pKnr~Q`B)>TYy&fOD&w3E^_*$Jj|8N zCdRuIqnhFYXR>{fOm^bI-o2aDQ?p-*=)-&Hbb;`mJ(c8xIl~ferIsP*@Ydoam^|U) zn@@WO?koox@UlxO=i*X0_o-y8xCnEur3Ep}Us-|jM}G(RXWwv%<;it+h_hpb-1*Ox zIX?wX33Whu$ZvY5H?Xk%5W{;(f_&b}VAV|4 zlcK(FP-B2pk`+>fi~GY^{yuWH%0Y}tUIjN3heI9*22PRSTW1J-mM{Eknf{3ZMn`Jcrg zAVUE;Fob-1tW4B+NwCkF*EKULIe&Y`B_uSuliS5YLn3@p#7;L077nSSiTm)HMOC#g zypw$Yd^-T~Ga}+U>9!sLt-r!)e=193dT!FX^IB`xQw1R&sF@mD9Kw9LnbWzQ6Lu5Lu&ohlK+jiXQFxvk+pjjEbtEMG7c=i zRHT2r>u!P1vrJv4JD4>`xx%(n6I&2){nTBNyNkB9o8G+o%pA|t=a;2EP3p~Hiwh%| z@cxni1!9=u@yfwA3SSZbq+)Lu>#qlv^9h0Iw^8u4Kd_LvBHF*?f9BYXxf&916r%05 zD6DXKwgg&W*vX)CQ=E=#@VKaXygG0bTH9qJH%v9P2H|)Olk~L^!zhwo8sp-bMS-PZ zWxtv?Aj#66e4!$8W3>EX8#dA-NJjbeCO>e|9Qp3+xo6?e^ph+>O?G^b6|`+)ij{7V zv$NhRc)VO}sZpD*rYscHx%>6Mk{Ju6 zpgjIrIoHY3lb`Y*%sP&9e;qI$eH`b9estQ3=z3C^EjGv|@Z@8({VF9KVVU`Uo^sNg z=Ha1TqVL~3;V?`;iKi<@LrC{##QwmEtnRQ6h7s!TJ%fqS=l`U6w>6e7)Nus0+0jH@ zPsSH*u0{sW^Y^iR_;byZp*4iPSF?`=#h}pYhmD|ZPY|Do<&V7JP?m5Z+2mMquO}L; zu*xQM^N|C4f^FP6K-W3OC9#zh_Kqc_z{^#_)Zi{WBd zA++KUR77mz`bc#5oE^zk8js%Zb0lw9$U#5NwD)AfA!X(PV5tf*qo)NY9S?L_dD+ky zFM;=4%w6ZM@-j;2Ir7Q(qFU|)SEg+0`5KrP%W-N#twC<(5u72v zg0t-4+nd~=N}R<0iwK_I3NB(62%1*6v7@LoM|guKB(5gZ_;<1jWK^EsWsZA_(y7l8 zQM*0Z@tmd*265Z_*>k~T1mVR}E4FqT3v65!_&6kgM(p{4mH|_7g6^9yDX7SUO_#8J z2XLjx1a+Tg4u}_WSta*AXBjT}Uf4z2pWZK9bQw^v%Lbz6!+og+V zh*%r`MO)aw77}|AacM!--XY87nqDb6u!^Y_&63pG(dKFq>Xx?TzMY8y=DR@f7B+j6 zb0t)96FzKllzGJZ#%_3XKUs!^XJn+?z*8BnK z#sv(RAuKt0(iY_}T6#MHmIVLXJuc{l+pQp$@Ur1I-!1=Ssln=R*9FfRg^E@OLQ1hl zMMV}xj_qpgUE#IkR8h?3sx;ou5B%?!l+*Wza?QphsySUi_Ti&R+B2;J_$AG_Jf3OUV*~T6^8<_c zz-<6LChl*|H+wa{F{;`yCBE^y2*lvtv(%|IIRBi2+u)?J!}x4qRg*FUwXgeO4aE)0 z%L^P4R2S;AR~MI7tOotaC33g;?T?_G#4W??TOQ02%_Oy4G2{TGJvzL2ryK(h4T+@faMbHenm5Pfd_iKBn|9257#P;EYE*wa>Xo?nV7BJ{_(^ldu1ih zEXdI5`zxFnL1>Fbfp$Ob%5|!SPPsCdkTqmV-rbwLTxH{CTL&mpqLwzH1*<&smKR&s7o>5*NDl(n%QwWGIgSMX z$1G#ThYfa&et%JRt$1WKq51&JmlRd`{(OvtC={pTIxC2V`E37yYEhdU)h?*7_Ogb; z-MmG5&(0qZHDKD;PZoU3RVl4QiOR-sNgtfC$PI#*fR=8b{UlS_CQ%-jr8Z(<49}(T z%IMhat-kxTCpELu1o1&oDZ4_958u{FeGD+ECQ54&KU|Hg@4j?Hg|QPDeJ>JTSho%} z%(K2Zzn1)MQUWXh@i^^#VrsOj7Q zbIMpn)K>_)6z(Lb$QqnM(R+^u1;;9SH8YmmV#1`#(_N0mn4-Gq=P zTjAEbl|z&=7f^LbMdpn>-da0c2V3D{fx0>fA=CBvM8br%M~NhzHt?d4^d+1i*zB#h zq0g@H)3bi}Ul-bXRugG~^B<%oA+bIrGtKk1ZYZN*fv(6IIUC!Hf|9cYHk`hq)Osuk z{3r8}TEfqAq%H68h}L+UevyLWZ`mJyH%`}{6qEge*t|=D`5eP$bn(ABOJq)<7ko6% zfL$wwA$@WXTc;G~$Y@9HkW9aKy!I$;3}7F;l;vSO_>P_`VXXugN^NQJgWu~XCx1Sg z4%5K92EF$gOnlW&&@VX~-T82l7p%dI+U{Uu_XOk3c+z%hwJXLjAhe=HFSmm8KTUeC zfom=()8E1!!=S_-{>e(1exd^i84LNxvwHj!Teh5DFlEWDa`qk!~K) zkgdO@kFJ8oFH(b3`fg;8`LK^~r~WU@{FiqNB$3GNH~A;W`N+A=x`tE#)h~Y^(c7@k zPb6%=Pv2VkhqL|t4Lty&7SA4mkyh&TKRORR!B_Obon~AiG~izp{I`8)rvpOpsGX4g zIuI41m5f#Rw@+V|aG7umH@7HqZpl~twyL3L`_|NOoV&iwU+ zm{j2TM>Xck-x#uI5-sq=c{WD7&}z_TxUB!1Lk*+A(9-U9%!x26A>(DvoxrG+@wM;s zASy4(LwNC~n5%u}BZARe9k2XVvF?9acF}3w-F|-ppOZSc)HmdW;753Kct{*w)j0zT zt~6`sem%BY1bD$nPAc0%cP{M#o`9Kj|zfsorYnl5bHaUd&ze9Uw$ca+uF{?j5S^!@~Q#~_+?>u#ap-c~;EpT0~ zy~QdBv!Xm$oY1SGhpiWQC|>lfov#QCz`NV&nLzo-wIA9IY$b2_{^{$CKB-N4ax-f_ zb}7?w+2X=H6Yy$ClF}pIWtNEM>IpoN-|`1o8HYvnYPz7JnsrcvcDMVrUc{dTvU|yPD-y!MqTi zzm6I6&D8g0?WZQ3PFw^26b6Du)$Jbt{8|YlhgGc27U4H1%Os?B>C<3QE-(X@QW^$e zx{6uP9fVW^TKgWIs2dn>yzKVk*5Iz#2?E7K3U5r%m--Bs>YfpF7FZnRs_T^I9>DTN z@220_d(oARrW?|g{w9He6R4Kefo^q&4-4ck2kE$Dsi7sdUM)y-;|cNB@0vOJPfqg( zIlc&2c!&FN-_>WSoqBvkYNE`lf5Xx4=MkHs6$#Id^kQr%yWeumRuSva3shH z80gf4f?fLN7JpvVfVtvrWO$Dvd%QRn-*AAax&>D%{AF7K^f9abr`KQ&QgmJdYW=>W zHtY(%EiPQx^SZa={KMXN5oJE3i=;e%nbr>00?r&z+)VN6qN@!@D|$=xV~1ghkhX$h z8e`TiZrC(09%G@H7yOk3AI*W?Y{(FVwhGhfb2bDN7@C`b(YXJ@t0VVrZS?4b2+tQ# zVAOdz|GInEI_afc$4Unlam*Od>i6|WSnhQHl5Qt~exo_`g=k`4{l@RQF-Mp#Ux+^G zZVV{NL)P726oEjvoCU#mV^tjl6nu;IykjO?R+JH#VA{PFA?~muDY-lKS+fbR_S{)_ z0Qep;(}NTk?*_l2dBl@kJlk1K41TSas*>@2_Onpg@`K6~?|Oe~x+EjF5yD2{DO_7X ze&IKh411S7C$i*)i7`jAbdNjP&*d)35X<6zb8;xR;UDFduK1A|l{#&8*Uya^k zEksWS?%@`lrkSp8np0a5#n*7VC-XLdIG9JA#{+#-(Xc!TLLG; zsdx-Qu{t3A{tv=NNkCA)w3C+<2AHcqyYgF))SZlv!BMnT`u7riHhu~@XI4~HWL2)F zQRJJVFM2d><6#SaZ(jl#>lv=SAUBy&z!cErB7Q8%%R?YVNv}a1^%Bbg&2B}eY^qg{ z663C!SGu~BtDjk4bhUxf+|3YNKHtu~PU7uu_4zo@q4`Mlp#=7&**F2aXvSK6HO;=C zt&EBDVe|aqC!PtO1^J*GH*6X?XMRb)5PnWfi3%owp#1$vqC%yp_*tO0B$Md8U^XDM zKU$Q*{lIneZgS3mAi=bWdZFWp8PUuHta~{;d=`_|7X|d^qb?tF@KvVy(IA4)N}b@a z_Z^Yh7+hR}V03uI#I`0P=4Z(B{~kX5)=2}i_ZBHBF6(!o^*r3u22J2n-q+_+;t;_4 zJD#(VC5eJ^@2dzmh&93Tp}f)*M4d{{uKn%z?4=MNuw)L!jd-v_6B1K5^i?`9^aq(t zjWU0U_FFu`90E?St+QjpvFK*~-xuCQVj7RU(N69d{PL}n zW%O7qEZQvOHr<6O16^-PK|%>i-mtI8hN28tnpb{wE##I%t2617vHCt8rgPtf?eh9k zfJh>x37m~Bim;P?Z9Cd?;7p|M7nkvDWr$#p3ME6gZdu=xxHNnM2(1surMK-y4#kU2 zO)i;#R@4`QL=%G3uee%TI3Zt4h5Xr?vn2vPoHS{%Kv@q%?OpYM;$B{3+H??3?)^dN z$2X2TB0(?ywD>(Th$b2ctpV=lsiG+>VfOE9w;t75^)JxAvrT^>#+1}eoS<)jE_ zA4>eXN+}SalsY_|o3l2n(ctxPwPPf+ZG59n2u#BOi_*jP zJ6e6A$6p^Q^K;)a^m5F4(zcZb3A?%_0-pPLQY?%WCVK`WY;cY zvZ1z~h10gL8ylJOu}ih1yJcH~ zo`IqjI`x)3RMDy}xcF4W3^3(7*w7np6i7TcM+(>&)`G)x8EE@@lB&=gqdrAX_8HFj z=Mo+K7C=)};Y}sWr$yZxJlQXQACy&`;1Jg19Ge-VhV0J~w|ETfJJ#vW8B z?zmx?Nsaqre-JsA4%kZCfs;j|AIc;BjMHb^XsP4(-kyq9fEvW%=cuPe0}~x4b+^gr zsuj1Mkzi>jrvuJ?AnM{hGw2tc@huh8&s3P3rd(h^PWUP6=MjwbmOXc4G7M$nd)7{o z#y|1?!kke)XbFotz+gf?S!gVW25}3Q%%TiMkyK%B`6D?EZvW_NUfNPBmTxRw@8;3h zP3J6V_2@ zoS|eAF5;>M%O@$1v%gD`R^R+U^LG@dQnT=o)*}M1G%PQNj~FRF0C#+D^WnL*W_aqq zNPqQ}FZ8*!^w;$TI{pN;E0em1&kTRX4!?f!N!ro&zS(^J3Ftm zjG*bX#~>e8rsKl_e$-Sl%ozy?VH~PD*$rG_db}ju(~7tVKJE zel(D!n^adTt_@3?h{7)0dxsQy7j}qnMT0prfpXK}Ns-{-3HVgEtsoaa2*A8|z z;v9q&6UaP8WDFTAZ{T%{?$1`lav9fxKBv`NloF~Hh*mCA(b9y6{$6W8{ zX!&%JMI`-u62i6n&F_axhRZ;zXrC7emJ)?Nu-9zZ*f|TAhNgqtY>8aCVv8Jgo+(p;q@DjD3z!(*c zW8P4FhX&jgprOzrU@a{V+nlTS*`E)&G6`H7VbdpIt(7Dz$3eMYj{BU(9hzn@manJS z-@xTdvjcG(ZM#AB+~BKlgTPWsH+Bl+TUkbTfnPm8KPv3wjh={a%DcYjdzmufxoxyF z;Llf-(3}@$%mC;8JeJ5Z=2E^_-7?nO_lX5F;`RHDg!p*bz$Y%wj86g}Fth?7;S#tR zY+T%-D|!^IDqKG#u&SX-T29<+CQVueOn=qJlFz_ViP@Cye~mo`ysL)UW(9j?Xvmh$k-NlDkzZZE;6?az_rz6`f_R` zq4|KP7Qfb#nD1-m?w<2%Sv{+1XQyz3E!nrcj?7A+vJ9;f1UBcfPW*f+MaghTsqUKx zBBWxxgI9+)R$iSkvJKhJjl7jtBF7kO_)MJ0*)9>Cap?)SU{_y3c9SM@+EREnI<Stg6{%q4V9=bLYKk-ytB45-u2Zlwgx5V2-?+>q3*XQ*Pct zzIc0hycD=RKEFPhoHds*#){U_f^;1}61A_E6_wf4sbOUy8Yg55f?Qu&t^l-^mnGp6`pZk2@6+R&;L+k4wRbz*1Y>-3`4ezp}}Qej8VoRH4moh=uJ&<^b~&ATN2S%B zl;vy~WQV}o6*Q+W1|^PRU8HvsK}&=s zY4_fDbSpE1_gRyOB;(7Lo+!gULyesLGQt$mBC%~rzAn`aZh^aUlEW0)RFg8bjf(Xc z)9}-(GherGIVhCKp(gotvRd+e=dFQiR_HP2G%Fq)%`n=^Xe!$&INI5j=vR)DY^BYf zv_9_m;%5h^_*}u1!7H7YksDd|F@iZSf`zuG1vl_1gXQO$ai5de^yY&)#p{8}EQ9Lt zYKnal&MF+m3avh0dQH*}@JMa!?o~!YV|0fYmucT>qHd363NLu&O%(Q|bWj$juCP>U zrFrI+P35E)bOf+0J3g|JA%#29DJEK1Or+o_<=o1NMC*uAU#_qok2DZcH5mGqrLk#c z>XYq%#+)FcXj65HezdOweF)q{)rT~V(TG`@ebtS!lD2#*XVZ$BG#b6akH5yF@Gx#4 zGv}+T*r%ru$)mlM(MGgU`M8@y?ezCQ9n8O6o^5*%eO{cm)e>K}vn2AOjoogwWkq|` zali0DIaKkd3Qw>qDOdrnx*+FtZ&XI012FlUp|0Gr~I!o|2;6B;+C4F^8E0^vJX|n>lufseZ!Yzy(=Y7i~ zaWk&7BqwxKHAgrDBdJm)pQZG?m!#?Gd?Bvj0vyBDxsq=4KFLih*YWIgdJ4%yd&+=u ze{Q?t{Y)rC5Huw00&RWyJ^-6#b^N4ys}jV6dta^NQHfl2ZN-4bICqs!b=GSl<8p1? zNNV>_2<(Ew@t#(VJw_Z_XTu~=qxUT|guqYr(0q`GK4#g^J_+%=g3?P}-DrMN`uYVz z;d$Q2JT56I$zfF^h{JZf+5;OqEzb#~yq$+NnAvokI@<$UF?kZ! zaGKICQ|mrXiiDh`FNx9zeZp06O7wD#1Z%cs^XehZJutQRmc7oRWdU(*`>8 zs@9iWX^t4KhHpq&0*m&e;-0i1b2F=1PapXZH0x<%GG6fG-S)*y%aR^w-u766ouGtJJbB>ZW4gKoAFD;xjgm{SCWL*ZpjjA+sc*b>?oovLRhRyc$b{K_T@nzzAdc=@fT zKC%hw_?aQA;^xi;J*w;2=ZO5*pzUOVeWRX4-;_jRM|oZllT%sQU^Mbd^mxAMs>MWj zdC?&p;OmL>qZ8DV1{3f9HJy*a50EprV!^OB!>)fD0&a9tGIiRO1Cdb0r5ZN=bKk^Y zOLImU(m}{07ZKhhE*|~QG@-Qi_ktg1QM~YY%d7oQJ6gc0*433czlKl!Q@@^x;PPlu zK-C26`sVpLTQ|)&9{%0mv*Q4v4Ftt-3RsX)Cw^!&5kL3A5I_J&THyE*sg13}{!-rI za%kK!sP@c3aWxgPayxjgOIqCBB7^vHKXpMM+lGZCl}YMJ5(hWJi(4O{F);}I3-SYT zj8>u^!1E{BR%M3dpUc!d%pEGW{FEv%K=ICfZsCLWXKpz)zrDcH;LsR&Wl7Y#I=i2Y z<1F04Z$5RlxYFIBy3}K*Fe+O8z)7tkx2VUO(hV@n{K>N!Eab3ea70cdFPnOfm$4FKP!bm zfai2&Sj6~tX>fRYckh|8ZDavH-t0J@R6`ln%P5x=US&AmMHuuSZoKvud3N|hB|%Wq z;b{W@JyY-L6)KK!XAHf!tkYy?wv3Br)jny+gY_PP%D(mVS_QQ`Upm@xO%A-H$ zp1y`yqIo8Y(xeLSs-1=zn9Azh^7n!3KWqc>4#!!eH&v2 znbL(p30#UA1WgQ4Q`rkrK^sUl2$JtvqKV?GpMOIfKf>z{I%)?!7mo9y%GbBX#vPCk z<6X<6lLutYXfeM^J{R+fRC+jvWL(v$*?a34}25%&CUbeL&lr)C}B5$hXwv1 z)Qn-BMi#Yr@}^H5(?8G;0WRC?uzjhaxuxG6`t%>TAox-2Ym1Nf>E%4;{63R1-zhG_ zMzPoR;O%(wLx;!f2_4Sh9oI z>+;Y5dn(+h_jsSd`?pi{?=d%WL*wEaj%i-kcpLNEnfYfDw4JOIFN~kEyqSyKCI8#t z_oh#hJenG;XkwHYTi1B^zb$WZ-g^w{D3pund(sd(OZ5A!@+h~4eGPKjl47nID)wrS zvn6Ly`ErK^Ul`dI8-cpM(n{TtpP)Ich_=<%0Y zF2|EYwHx3pxgLCKr@W)^u7d6NeiKcJ0=9E=%Yau@HSr?69n8|NbxGGhT6-;xO1O~Y zyLNY0q-X3#nBeJVLiWH5${gc&IaJ<+j&2{RqS`x_Cx_tx?iV}HU8**Y+J$-gCPOB9 z0Ot09IL&>jv{t*g>g2uIh9k-*hsP`==u)I>Ka`FBt{bqOgZXt^iq!hfBfwhZRIuuD z3Tw7_v%--tbohv!ONwc@g{kP~gk5HCMGW-CfNX_CRXD{6l3BA<>RG42^jP!}$Ycws`|$hSS7Yl~PWI{b zb5u$64gmO1mw=BH55byU8iDf775qo-4XvdW;x%@Tpc?AL6pOOZ zgD0B*fD`6bIS3H>5^k7{|Mk>pV}J$ylEh!xui3ieX#A!bFjbI{>o)N> zrQ^C^t1J0a1JN|P^u9ohV@YfRUCQG-0?z*9e*obS)6JNyhdwTGT1@&3)v#~ZIcnm# z)D5$;HN(+hH;gx!R?#=!WKDX5BhBI%sOi@oJFo*G9 zls(`S*n+KW8!SjMF#xg^EB-+2AM}LYnW$_xT0YpqL|%)o`j;2d8`&%j<=1C-?eX9G z@DKe300xE*%Ck>lksboGkBBuuKO+PhYqr4%G0xQ7$3X5fBnc{CSP83ku)N$c{;Qz$T$-xcwbS1drq4wl>JkI}cPkSVWZbxA_ws1og z`9JI5OlPEjs}&GfzW&~8m*xej!}{tFr*-R}1_Vs6At}_x)>#JH%yPp2Y*;hfTf8^9 zeTtH^W=T8$NUbU1qd-YbDV{yk49@L;2FO(ETk96e8LG&P9Pu5#Yy-^_0%vijij!S2 zJmb#g)qq5!O})^Wf_u-qdLO{;JQ~GK1CrMKNyu{U3Hano`Bu{_8NdQ*gyS@h!{=A; zaDcdf2M-lN?t7I7i9ijdO(5RAsg6CcSm5hZ*UmEbM9PpP)#i-x3a1YEJ{_W@f z4P&*MW>w()pUTEQQ@)a}=hHm9O+xRvWMVHNlojl=?SaV|-O{@He4h0B2_I05nCkbQ zRj?=-RxAkV;8w)`LVp(P5UO~SU<`#a_Ux2i4XoQ8e5CWP+&v+QlTzw~&e>mQ)QzAn zbZo;Bzq(+g4o*c&LqWzR*)SR`>@zcolK@6FvW0?Xl9o0vPki6>I|L6TcxEt?L19pO znUns^Peeri_|K2{6rNHJy#E-P?svZB*|bRqA9`7`X?LUPIkNN7IsQak(@%*(iZ;L@ z?hn~W$IlJ@+^L{zmh6YdKWQjAZ%Yg)j{CRYAdZO@I@qG-6B1dTsWbgv{c<9{ol&`A zitO6rN*B4AWY6t@FSs4|uCvkv`m3Bz6k_zXjWYhoSmbb}sEg+5A7$mlo`lm1^qoe& zXlFwW^;eHF>WRW-hIKsGj;AqscE%u?^6Nr=I`9e!Nc$Td)%UkXxbOSx8|eg{hx8wy z!k=vwRnA&`e^a8;J+5|?(EAs7Xy(+-m`RR z`H~r{^K3D?(VvCxw=SWr1>y42^;dalg+Q! zGwW|{ZI8K+T#*D~l<2fcqP;}y>wPKI*v|{|P>EmYpK})_3siYY_x`n?qgMlMzxN7h z!%PdZ&4|3&GwLQArCRk}eZGzQoZtghsbkw}yyj!F#y!->uXKxgpEygJ?j0a}?h9WF z9PJ>=6(S;vm4!a}%mX?i?G$b_uf!^Hu}QQiO}pMLU37hv#1=RHPu@^nGw23?s)uhA zuR5G_LEiR*x;LV(@5=K7QP3B^&(bYD(QpKIg)&}I>_4-xP^AFDT984=0bq) z8sW|fT=#f7SF?6wRCG}?UIFxE9lXX{6 z(A*p8>cfcpocqZhj?X58W5+Qf8i)x*Q3;kLV!th3$uc~N*jpM{bEw}`Y~!C_k&nFd zR=q|ici;n1tW~hB-ajm=c>LarH!h6?TR54JJWw)E&MYK#jAGw>I@byGMD~GX~t8noS%-nE{WruUL*v^R-51aBGiI`{k!p;qrSvCnq%= z`e`^QGR%lZ{1YKI!w5x1CYf4$)J#wd4m;nt-gJP3xil;h8cagQJW&M%LE0imIhV3awOWWV znfZDv4r;yf_EyYoVurOUoP>U6lKUc#CzY}30`aa+>RWs#x{&Te>= zePkU~^4@Ro%G!JjyGL002wEnyc*OV{UZ0z7dF54w?CbsBMG1Z`4B^@%o*P8GsivMy zf_c)00|G!~7hc4=vkoI}OS6j!%IGXv%!|)!8x(ew6?LPPe^gY&jnw*Hteqtf)t2yecF4dL?Hs3GyH=li*&ttmNd-# z`e(Dfypn1^J+#!t$mQ*J(1?_NM{ajwnUTSrtVZB)w=s}b_m3`tfXbKx*21`?nw=hr z%Xj(_6_6wxj0zO{xp~)g;prtR%_DUnJ?X=T3+wxg^=*_Sv09coN0Vua1?H9>1eRCB zr5p|t@G`AV!HD#eBze$6f@vlVOM|`+?)w|Q9Js(a%f&(OJYY?|ao9_%|^w?V7Nt|B30$*{!+Qu#r% z*}Puk?(=D;0&FJU7t}70EVouKo$$t*I|1Wevi}3+eU5w}%4rF4O{VCML#wMG)s#l! zWTmSv)*XrJ9Iip7`gF4mfd4OdJG$Ge%yrZuox;FNRzOaxI_>qy5oeobV+L=xNoK<6 zfu4O%3d+{w0qa;?{nH4!yrJEEqHN?+GDJt(S>21PNPF>Sq)$Ii?j*c|(>@b9#HQN) z!hfK464~?YGpTlHtV%O9vd3`uJh|gs4O3#@GO@Mb>L6^NeE0DYu)|5|2Qb9(hNhxC zUaGG;vL@42&9EX+3)STM+ohVZrwy5kW6#3MS4&2EP_)p1qznL|6qb`#olbIUwhH~) zH1dQpklF`b-gf(&x(cg`dn^R%R@)*oPP3^#Twp!nLG1l-wSla0$G(h&QJ-08ba;_Z zpV!o5-sr)$McMS7NVsgaao2ux)f4FpjD)rW#IqrUDD>IP+05H-^cfg#3wF=NHD$@J zv*_!PA1XYsAVJCfP^4E~z_PuPTf$1gQ{BzOvTCwt-BPN_nIm09>|_>Z!8V>2J|3P2 zwb#tDuHCRO75yD=J7YwUQt&a7!+TZTc5b1p4=>YpHPVydM@}77Y*MF1Q@5lGg-_gS z>{v1H#6o~lyTz&F8Kd+b&wTZ}s)~0_k~=NuNq*<*|EZc$uSRv9nj}w!@CXosN<`aY zoy6e~67@>C*7)`yxMS@ltw|4)LZAZmx?mp7l@e(b8gfBQf8#qaIM>U}&e zEHS79`oG)42zd>Q-k2o*|1?esGu?A|KpS@|=Ksy;>>Ds*_sFP4|_z9Irlm%f!r+-)_vn4pFjLg z29;q>@&I#F>PT0sg6kQ)=#^G$fGpP{cD_57!~wUHmo-0CBV}WbX!Dskf9%wZ-OZPa zD5fR^oRa|A2+*djWaNwg+7zD@281b)ARquAox&}&A5E`XJwDk@ZGrGgHj~1PyGEww zA*$|6;{CZi>v2h!MRxwn$aA?P^G4mqTlAJl6@zE-9X9t8z{1hmWe|X1-NKWTi`Yy15Z*&E-5AG~T}G^O-Bv$~if>$XN8(`M7f01LA4 z|Fw19@lgMNTp}XbBXkrZyRu3;5<*7Ec6MYd`;3lKvijQDTXyz1XNIqpmC@O<&pF~; z_U~i#?VIn-lRy6WGSlZT{N9+ar+c&3MLwvPGbGT@-Lua_ zmG@{JgYpTu^kzJ5x+d|AzLAqz5n6a#(3lP_F>inFo#+Pso(%?NyhIfrd=`{c3ZgkV zG<8e=>p|W=8__Lb{g!CWZA8|GejOPvOOpHKMB`_*R;LVpDJ}no*7xO_^{~fEga8hijeu8x-==tNVAq;^x zw;vuFF)UYAuBzy(tItNkzv-C1ahU{2B){Kly-4=$s5??0W2iKsNR21TV&7G?_7B!{ zH>h5fv}ZhUY`m#A$AWE$@9tNO8uy!D$^3?tkyQ$=yAdrdEK*8JM#y6EKZ!qJ6bdYKtt0)Kj_)R$MoGAw&s>_5a*n?hhWT3 z*jcd9kipJ9fDgSx1u?!t{^lZ!yy)#0-7ECA+t~m%66Ce9Mvw4rk}DMD$v;S?6A=vPd{mTqz6fHa#WwGKB(_*_!fZq4ezGNg(F!HM zZVFH#Il5GLYB9IfqNu>HU#dwiumHK$HSwx0m(;r()xIsteL!$+G7ex>4R4SVHUOc5 z$@(1a5T+%NWc3LM9sNoYLWq3UgwBgA171q7|D_)(IY_6s_A?x3P+=8kXTGC3)Ye|T zTarD1)***Ukq%o8kOp14~NzCii;0RV4B zedKg?AHQ=QF+YNf^&?^tjS~%x<0-7%)hJxD>R5pv5Y4Tsg??&Jha^OLc!0M8;vgH< z_?olO*%5wGAi?eTtSvhjFP-0RB!xuodk>8n-Y6+~v1qLm`WOD_AsSZyIRKo6?f5L< z@1|u%S%34h`_L!BFTgRIF@$-6n9zaH!)?n{r~q%apare#HAwH9|Ez#CxoZXGF;+j<7~6AUu8w%yPIfn zoRD|fV=NU$9HalDt+`O#_EH_|dqtRRQ>A2OVn^{~u4DV~jx{-@jpU{Cbar?Ts=({u zU32Z)oJu-pj&8-+RA&kQ#9ShM0w+wdK(I$4{LGoNp;R1 zMw4v3TOBXz#BUGEuPDGA=y)x5`tQ8Ccv*hEO*xr%gL}fOVl*OAAJzD>uXY_`XIHZY ze}3}j12QtNQhqo-nmk#?C+eK7rwxBltoUr?T8z!Zhdj8Qho(?Lm$|H zBz|^m;Osro1(C(dhUyTVzJN8+vFd33U8Ka*vApp$&?$aHpHvVN>a* z;U|tlwduy3TP0`=#1!X|;c^hUoSXPBYPZ7R_34xpUGnq^U&ozqJhWxE#*nxTWI9pG zca(^DHRN`Sy21lZt0gm?2R3PWtrLhq+BV_zwcAhT2335nc^R-teoc!j)AOn|lPXN4 z*~3j7JdKqbOdJ4#o%YC{QRLmc?$eiwhnASYys8|3i!bp=Y@#{c>DYqJ7$$GcXlFbT z%%fILFj_KGI|ASi%EC-VYP3hV!Pph9y~cz|ZgbAgJGV8rUo&0Hzw#H!)d9U+sQrLn zdN?xBpdM*ey>b?#xZb&8$q#dCn?;CBhRw%0W6=wD6m>2M z2dT+RjPr01jxK#utN&|L4F1DnN9WmIP2J$zcLUU;%Q|ZxG&8@kS$BBYb32zHcG)_;mt#Nk9a%NiopTzVCf=-XA2sJC}}%%JUx^lcFb4H*Gz#l~IRomEZd zF&AASjOX%)Vmngzt_yH@eaRC_WjE07^RdKi-CK>UuNY;E$Cy4?Jc?^b*n2#m=YbeF z5+1rx5%7>>%dNOfqv-r5ndLjWV{eIrah`>gCjWPPkwjZ^BtfMN-x5DCX~rc|_j$aeE0%f4{79h++PHUjeq zOkd2wQ}&pz1Apu+?tm3xsAuS;QgT7rZ?VWJR|z&2un$9qH&v+m&v+q zyd~mTc~CcWM=>kvob}Pw@)Z$D9!WHxmI!oU@D&|9;p~fd8U|fwu~MQldOPYE2N!a) zT=&^$h-maE;IJ4$Fi5#8VdS^BA&-_#=xuTgm@5zD?7r#sCmJY4xHcVl>^*}O@!v7n z#7sn#8yKjz``_g0CgRtw(b9HbT9;ll!MUe6+W~oYXU4&P@LajdL}Kkev_Qfl?M@$k z)LvS*NSPAhvbEA`nN5k>t^%|hXIx$_r`_vN8z_G)0~B0QFFou_rdqqC%ml1bsP!aN zejWk|B`yuzbNb=g3;-&}3|y`zC>dp7oxw$Y=Fzn`B(|OiLKB(xKSDjDISGrqO4)~#+ zWG&R5E{}cG6#!BNDaTnC)N&(;z)ahDA~}@TswJI(X^(W4j-TtR;8Y0@no;NJU0 zYW(Yy2~!0(YQ$Fn2;)KT$hgDy&m5`fpuK1Xqtd15oLUV!0KLVwx|$YfdeP8*JaLyM z$1iNbOh=m8*%y8{zanp>A;Z@g%WlhV7+K~HSN@^9($g`);KF(#_y)}h!v**K@$ecW}#+j0kf6oc?(sI|wHV>{}4%jNW}HD~6H>50SYyIx8j z))UqHIlHF5_g|alhuuez%KnBnXjEP2Jq|+vi&t+%NH>aZ7+kk;od3a+#{y-cI)oOT z_a$}X9s54fN6J9Rdq?JXiq4Q+|8}H8Y4ldaIqh>U!S(fosrcX_$4R%d{4X)66tcst zjFknycJ|hF7CB!v)*dJjXkvn)2%@-;daqwe1`z&6DD0i->p6-m-_ygCB7dA~3^%ny zUZTS1ph`y29~i;siC=6L|9tZoqtn%7=%cFcQfjI4qvp)}`r9KpbAOqVX28d;Ib?+i zj47}_;^B%u44_-}ZhW#8T52vJ%=o7(^_*3Z%59DoF55L@d0Y0Nk-t*;X6AdO@bG52CUp$*PJFIm`{o+z+v9GeGkVmKt-zROwi6I2^Cl= zDu|&pwJy_D8|79#mE4>m(4~LqOK8oLU)cR;SPaC*G`g%IexF513C{{@#AUP?02^6UGvRS5vTVqel9 zLOJvEzv%uE^&j4z9x%8(ba{D;pz)84;^b>(U~VZcxNHfM@mUTZ$ee#xaMM?mvnf5Lp3~s zipDFTW>P+$<7MDI9~uhKhVLuh5@vC6u7h&s&aoAOM{4#4#Nn~_kee@X-##q86^=Bj zB)Zf$F1i_#hOqDCE7T)XgxZT4iQfy;dfI+GWGz{HoKKF|U&#?o-N0`=CxTwQ#!`oC zDb^NCVi@Qwa)(YdIheE$r@5Q@z7uwdry zmG+qb@CIR?qz@?9mFzZ%x4ieyr7Lye_+v)yFxo`qP>i@=^Jy&^aR9y{5V$nE=vKZr zDF~u!xnZ)P&2{2OCz#H^;fEP#u>am)Nb1%6=!?O2_POJQUL$(m{qZIFNbKe7#DhHx z#!BOT!0&uRO#vkITJN|k5(#=%5AYqCIYo+lS5?-d4@{-bpAz+L*7uvl zJN%3*O|`?Pss?!YRTK^lpP>F{PO%c;!KjGSrPGd>6gb3&HU7YoQb^V_91>pO0MM8@ij5T*B4QjWRUu17}!5p zBz)P>hI`t5s6bErjL>V@*|A$C_Tb*Q1bVR{G5OB>65I}Cx;!2_BT(x*xrLEK-GNx- z&XO=UE{s!|H^#bdt)r1`_%T2dVMoL7sr2#4+5zm&6mL`A@St6-{9Zmkm02?9hREm2 zL(Xl9;oatWZQ+mE`xIZu;$S1 zJaL68?v(w$5DJ*t^Wo-X-D~OBPOU@{2UULHN8^W^=Qn*eIc0#2DT$lj0#rF24e6j$ z>+;VJ$IKH~Tx&k<5Tvh6g4k>jDId>A{wc5&l17(Ls2+;Hc<}xXFpmGth>KuX3}9%G zc4Yq(=?9>#6c4d!5$t#6DmnNx|0(DlYb{re~s{|I!!Jm>g_sbwn9rz6?>j zfLFHF=z;dam<@Q&U@hV*>O3ssZj}U2#OQ#jRqans zSHJrS%w*@vP_^iaPP9ZQx~%`~gaULz*B6JCWtIr9>&CdCjGO+JxcBTUUEMYGVEnQ9 zp;$Pokp}ydg#jLGEc*>G!ofGT88sm^Z<9NhuU#b&>N^>VaJOIS`1b5f2XcHJ2@#h_ zM3uP`HZU?O-7%=wV`TK&&TZb|1FeTo)p=^we7_%XWMW8wKv93)CCOT9;kizyYZX)< zD|6q7;|y{~fxFo&coQ;eIuslxSH@nnhJVY`>1_Dje;NBj$@?Lo3h*T8iR+qMI_-zj za-5387W^gCjBT3qj50&*jKYZi6e7tLLeDNnbT?c)@!zvsM+QDZlJ!E`Fj+8Qys4P2 zb58lhNdn*cv8&7kX>??N>f9NEc2)`<)Hn9??jD|(LjD7K6NE6dh`hVMLOIvRrjnFjw5`Od^)e4ShI^ePI~PzSyM22hvY ze_fqsiL5;dKK_&%vmJN9i6K5wFbV+Y+tkydddknSs-A;Y18A2=)6pr#Ur)JYJeZ^U z4H%e?{nskVo!^=jh|O|JpN=ya;q07=D%#|c_^da&^*wD4S$NR*sH;LWbYZ+LXX|fN zw}`zD_REz)9fZ}f(vY~0O>-x>)Ua?B8v8D~64 zXhA>7?s;RvZHXGLx?ANu-CrJ2xlr|GX&^BCGw;{50WG8Rz{7uk3+4z|S`SJb@%(cA z@emTsg!lpBKK0U$K9S)*e_ZT@n_z{rkanU$wm0qqCQI$I19zZg10f^eYm{Q1cb4e<~JCjrak{D>fi1nl@5D4O%q?)Y#T7NDy;G4)iO9lmTlVJIF7EM{kNg&8e{ZV6gBT|-uPp`2M za7*N{*T`uJk6N@>-32s)MJ~dN^;5MZcw}cOLt8%#K$zQ2VKvQ8V8=~df>gZc8rMl5 z#oP#LjlMH$m|W{bX;sR&QS+%3mq=Z5mSB)(!2)Vn!fI#i5i01jJ!EQfw6^{eNl<8T z`jfc0LUL=`Yo~84%=?GkW%w^V3nTH$463WwyJesUZ=?#@|w%K#m zISb<_t?|SZ@XtSV0q#!{iZ5Os90!yNy1s7Id@D08S!`YH+*J4*NqnJD5>O&r72)`p z1uxb|P?m8Vm2gL$WZlS)$5na3r;#=PzL(^BEyRPz%yAYWHG)A;(v^v4fa$J)52ZHY zdM%GcY^tJPXCQED(KVFXdWRiQbRUCy_K?zKtJMAOQ4fuiUZy6jCXi ze_%QSqMEOHi4hS+)p6ub{2@lIGnGuBgmkG-%00p*=5;DPZ$KYNq9BqLtas6NQZbHc z0uf(ZzHV+OSYr0*EPTvq{#JwCHW}cIWV7B;5&IY=_KrAdDBRfAD%O zj>~jC71zv zEkt{jF`fg)dUE+@oR3AeojsX){XG3oE45HwhCx@Lv*#oy8Qz~z1}!dZO3~uEjrJ10 z1d&S?$9K2FbXcd)6T?BqE0mCnO_(Feo~7-Pcy)rE6uh-^DJ%AYbpzJ&*&!h&0g}4s zA<5X;yS3R%{!;esV{Gk~81!Y8L0Ka{SWN|PuK3MLo4lQalTn=E%rC%+pe*O#u~M-* z>F%Peg1h*oxG8W8&`Ey^drVKPH-W4AJeJqkeYExOUrjud09zCp5XWN9WS(X^%Q_zq zxZ5S!seZ`p?>XBOP4?F?0)W6(JAQKhr5+ljzxDg*6Re-mbLf%{PgY%v{qNn5KV8TN z3MS=bP2a=)H;L76{9yp_VEqIpqQ*j@%6Eca8J-F&{B`S<7;JfHS13VCevf8P{WX?A zpOslAWoUy0e9H2%3fADS0MmsrE03aS{r@_oZvj~Tny5bv`g8|{KI!^m8>d9^6ID3+ zMi?pK?at%F^7hZP_ySDQJl$mU#VhN}U^#86uK;^k%$BYnYh|-&%cv)xaQIkqzifzM zVmsIpy!l6YsG0Ji$pkVd-{r2*_RsYaf_f&gm8IKS0^7iXP(#T7UBC@7GX*bJ%4s9~ z(u2=ia&0B6bG8bQ&$5)VoKRYwxEtVgU5UJ+LP%#tmzcaE$E@dXIJj2k3??y^KN6Vh z?ncy^;@$kWV}YriuhdDiZGCLx{JE=22KoNwwFE||rJ0|zDZ74~rU(CiP^v%xJSK6k z4f%y7$*CoTFEbp{JpJCeBK?rn%TJjJIH&6e$$P(AvByhkQyc?Xs}g*{L;oG^nm7vQF4}@Xv%J$ioj&A1a>2s~AI)2~;-USxXU$c@s)F z(EP!Yhot%lFSGsnI;GbZ9T|DbPf;+umz;dM>x^hjP>B*w{!#KDYCa^D>IEAhh_bb9 zZvXeK9!7dJ8o)>&KgCl^Cn<84=2Ll;r50I@mHHzDjN= z?g1>NO}QHJpGXx;5CVek7ub6ru+$aAxSFLih7v~hSZO;omyl7n1i#DopSZnhxZ<(B zx>onxpp|o||91d1^SGYOJ8@?q<+~3y7_+y)ZyoON`J8b+XpqS+llOqn-fP5+ z?U^>JYB9}r8Xk!bue-B5{6e5}_j@@X01gP&>~1s7;Obu`CV*W|Y*(fJ_akJetRHQA zEw`VfBpq z*+(@^BzjEEJesKjO|YL2R$^>;>&%wyCzvDi7uHYg6V^k29lxSc9$Z8_fukA{Up}WI zS9Bv0dy&Os{^;r8{%4$W&A-{KbHn+-Wg?zhB@SCMX~A zrWWP87hhX&p-FJfw_e>FsWelr5`A4DT7Rw2T=$7N)?j>Fr_JgOzwmsPZE*y@6VIZn zR=l=(=xBSv8;P;3@+W)xl%trOz}&iyCn)&XTXV+)Zn)yJgi?J%1Kn%ymo1`|rgOqP ztVV3WHy=NX{GMH1HDpqu9_i?4p*zj~vKPwspFz;f>}|%&GO%I5!|Y!g~p> zW#BdX?paltT0F=a7xgf-%q4D6x>c#w+YupyDveiMS*(rf#Fkvp@QGC4p^#a?bJj1$ z)n|WSj>@*tZH*jod==;%>DNvzIttNm8#~Ye*$r&)2~CTrZP6bXbn0bvUJQzA)7??% zK;6{gjjoAe#zLN>xY#14&0P$$Q$p-F#}z~2JdkQ>+QIy~j~~MLYYh$LBc)xI4a&1T zOVDQDL$bw{tGybkak=vuSclp7q2nysae68{t^#n}%XL>&PG+Dx99Qu|0aacJ7M(UN zLS&#SeM*yhBDG|?!a7>i_uEAk@7&{#8_|c$qq@Ueo%1V$oGGJ{RW}{ literal 0 HcmV?d00001 diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/alerts/images/alerts_icon.png b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/alerts/images/alerts_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..e1013a6eae7fce00d72f663682219deaf8a66bbf GIT binary patch literal 3283 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

@9fNu&bhr zg5IkrsKhqXw5JYJMa2DrQNr^VS_y{Z(sutq`L414XP%v;-2T^?Fp2{*Hu7pDOduII zEGFfg@YJGEz?e}eV9Y2KFlH1A7&8h5j2VRj#*9J%1qu`>P@q780tLo^{{o07cC=nj R!s-A3002ovPDHLkV1kv import('./alerts_card')), +}; diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/alerts/translations.ts b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/alerts/translations.ts new file mode 100644 index 0000000000000..3138f01d20b66 --- /dev/null +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/alerts/translations.ts @@ -0,0 +1,44 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { i18n } from '@kbn/i18n'; + +export const ALERTS_CARD_TITLE = i18n.translate( + 'xpack.securitySolution.onboarding.alertsCard.title', + { + defaultMessage: 'View alerts', + } +); + +export const ALERTS_CARD_DESCRIPTION = i18n.translate( + 'xpack.securitySolution.onboarding.alertsCard.description', + { + defaultMessage: + 'Visualize, sort, filter, and investigate alerts from across your infrastructure. Examine individual alerts of interest, and discover general patterns in alert volume and severity.', + } +); + +export const ALERTS_CARD_CALLOUT_INTEGRATIONS_TEXT = i18n.translate( + 'xpack.securitySolution.onboarding.alertsCard.calloutIntegrationsText', + { + defaultMessage: 'To view alerts add integrations first.', + } +); + +export const ALERTS_CARD_CALLOUT_INTEGRATIONS_BUTTON = i18n.translate( + 'xpack.securitySolution.onboarding.alertsCard.calloutIntegrationsButton', + { + defaultMessage: 'Add integrations step', + } +); + +export const ALERTS_CARD_VIEW_ALERTS_BUTTON = i18n.translate( + 'xpack.securitySolution.onboarding.alertsCard.viewAlertsButton', + { + defaultMessage: 'View alerts', + } +); diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/asistant/asistant_card.tsx b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/asistant/asistant_card.tsx new file mode 100644 index 0000000000000..898211d35bbbc --- /dev/null +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/asistant/asistant_card.tsx @@ -0,0 +1,37 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { EuiFlexGroup, EuiFlexItem, EuiText } from '@elastic/eui'; +import type { OnboardingCardComponent } from '../../../../types'; +import * as i18n from './translations'; +import { OnboardingCardContentPanel } from '../common/card_content_panel'; +import { ConfigureConnector } from './components/configure_connector/configure_connector'; + +export const AsistantCard: OnboardingCardComponent = ({ + isCardComplete, + setExpandedCardId, + setComplete, +}) => { + return ( + + + + + {i18n.ASISTANT_CARD_DESCRIPTION} + + + + + + + + ); +}; + +// eslint-disable-next-line import/no-default-export +export default AsistantCard; diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/asistant/components/configure_connector/configure_connector.tsx b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/asistant/components/configure_connector/configure_connector.tsx new file mode 100644 index 0000000000000..3ca0d70bbb4bc --- /dev/null +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/asistant/components/configure_connector/configure_connector.tsx @@ -0,0 +1,51 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { useCallback, useEffect, useState } from 'react'; +import { useLoadConnectors } from '@kbn/elastic-assistant'; +import type { AIConnector } from '@kbn/elastic-assistant/impl/connectorland/connector_selector'; +import type { SetComplete } from '../../../../../../types'; +import { useKibana } from '../../../../../../../common/lib/kibana'; +import { ConnectorSetup } from '../connector_setup/connector_setup'; + +const AllowedActionTypeIds = ['.bedrock', '.gen-ai', '.gemini']; + +interface ConfigureConnectorProps { + setComplete: SetComplete; +} + +export const ConfigureConnector = React.memo(({ setComplete }) => { + const { http } = useKibana().services; + const [connectors, setConnectors] = useState(); + const { isLoading, data: aiConnectors, refetch: refetchConnectors } = useLoadConnectors({ http }); + const hasConnectors = !isLoading && connectors?.length; + + useEffect(() => { + if (aiConnectors != null) { + const filteredAiConnectors = aiConnectors.filter(({ actionTypeId }) => + AllowedActionTypeIds.includes(actionTypeId) + ); + setConnectors(filteredAiConnectors); + } + if (hasConnectors) { + setComplete(true); + } + }, [aiConnectors, setComplete, hasConnectors]); + + const onConnectorSaved = useCallback(() => refetchConnectors(), [refetchConnectors]); + + if (isLoading) return

{'loading'}

; + + return ( + + ); +}); +ConfigureConnector.displayName = 'ConfigureConnector'; diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/asistant/components/connector_setup/connector_setup.tsx b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/asistant/components/connector_setup/connector_setup.tsx new file mode 100644 index 0000000000000..65f87bfe1c6ad --- /dev/null +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/asistant/components/connector_setup/connector_setup.tsx @@ -0,0 +1,164 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { useCallback, useMemo, useState } from 'react'; +import type { AIConnector } from '@kbn/elastic-assistant/impl/connectorland/connector_selector'; + +import { + useEuiTheme, + EuiFlexGroup, + EuiFlexItem, + EuiIcon, + EuiPanel, + EuiLoadingSpinner, + EuiText, + EuiLink, + EuiTextColor, + useEuiBackgroundColor, +} from '@elastic/eui'; +import { + ConnectorAddModal, + type ActionConnector, +} from '@kbn/triggers-actions-ui-plugin/public/common/constants'; +import { useLoadActionTypes } from '@kbn/elastic-assistant/impl/connectorland/use_load_action_types'; +import type { ActionType } from '@kbn/actions-plugin/common'; +import { css } from '@emotion/css'; +import { useKibana } from '../../../../../../../common/lib/kibana'; + +const usePanelCss = () => { + const { euiTheme } = useEuiTheme(); + return css` + position: relative; + overflow: hidden; + height: 160px; + &.euiPanel:hover { + background-color: ${euiTheme.colors.lightestShade}; + } + `; +}; + +const useIsSelectedStyles = () => { + const backgroundColor = useEuiBackgroundColor('success'); + return css` + width: 100%; + position: absolute; + bottom: 0; + left: 0; + padding: 8px 0; + background-color: ${backgroundColor}; + &.euiFlexItem { + } + `; +}; + +interface ConnectorSetupProps { + connectors?: AIConnector[]; + onConnectorSaved?: (savedAction: ActionConnector) => void; + onClose?: () => void; + actionTypeIds?: string[]; + compressed?: boolean; +} +export const ConnectorSetup = React.memo( + ({ connectors, onConnectorSaved, onClose, actionTypeIds }) => { + const panelCss = usePanelCss(); + const isSelectedStyles = useIsSelectedStyles(); + const { + http, + triggersActionsUi: { actionTypeRegistry }, + notifications: { toasts }, + } = useKibana().services; + const [selectedActionType, setSelectedActionType] = useState(null); + const onModalClose = useCallback(() => { + setSelectedActionType(null); + onClose?.(); + }, [onClose]); + + const { data } = useLoadActionTypes({ http, toasts }); + + const actionTypes = useMemo(() => { + if (actionTypeIds && data) { + return data.filter((actionType) => actionTypeIds.includes(actionType.id)); + } + return data; + }, [data, actionTypeIds]); + + if (!actionTypes) { + return ; + } + + return ( + <> + + {actionTypes?.map((actionType: ActionType) => ( + + setSelectedActionType(actionType)} + data-test-subj={`actionType-${actionType.id}`} + > + + + + + + + + {actionType.name} + + + + {connectors?.some((connector) => connector.actionTypeId === actionType.id) ? ( + + + + + + + + {'Connected'} + + + + + ) : null} + + + + ))} + + + {selectedActionType && ( + + )} + + ); + } +); +ConnectorSetup.displayName = 'ConnectorSetup'; diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/asistant/index.ts b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/asistant/index.ts new file mode 100644 index 0000000000000..29ab171871ade --- /dev/null +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/asistant/index.ts @@ -0,0 +1,21 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { AssistantAvatar } from '@kbn/elastic-assistant'; +import type { OnboardingCardConfig } from '../../../../types'; +import { OnboardingCardId } from '../../../../constants'; +import { ASISTANT_CARD_TITLE } from './translations'; +// import { checkAssistantCardComplete } from './assistant_check_complete'; + +export const asistantCardConfig: OnboardingCardConfig = { + id: OnboardingCardId.asistant, + title: ASISTANT_CARD_TITLE, + icon: AssistantAvatar, + // checkComplete: checkAssistantCardComplete, + Component: React.lazy(() => import('./asistant_card')), +}; diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/asistant/translations.ts b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/asistant/translations.ts new file mode 100644 index 0000000000000..6a96e0b350fbd --- /dev/null +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/asistant/translations.ts @@ -0,0 +1,23 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { i18n } from '@kbn/i18n'; + +export const ASISTANT_CARD_TITLE = i18n.translate( + 'xpack.securitySolution.onboarding.rulesCard.title', + { + defaultMessage: 'Configure AI Assisstant', + } +); + +export const ASISTANT_CARD_DESCRIPTION = i18n.translate( + 'xpack.securitySolution.onboarding.rulesCard.description', + { + defaultMessage: + 'The Elastic AI connector is currently configured, powered by OpenAI gpt 4.0 for optimal performance. Select the provider to add your own AI Connector.', + } +); diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/attack_discovery/attack_discovery_card.tsx b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/attack_discovery/attack_discovery_card.tsx new file mode 100644 index 0000000000000..1fc8ab80a963f --- /dev/null +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/attack_discovery/attack_discovery_card.tsx @@ -0,0 +1,87 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { useCallback, useMemo } from 'react'; +import { EuiFlexGroup, EuiFlexItem, EuiIcon, EuiLink, EuiSpacer, EuiText } from '@elastic/eui'; +import { SecurityPageName } from '@kbn/security-solution-navigation'; +import { SecuritySolutionLinkButton } from '../../../../../common/components/links'; +import { OnboardingCardId } from '../../../../constants'; +import type { OnboardingCardComponent } from '../../../../types'; +import { OnboardingCardContentImagePanel } from '../common/card_content_image_panel'; +import { CardCallOut } from '../common/card_callout'; +import attackDiscoveryImageSrc from './images/attack_discovery.png'; +import * as i18n from './translations'; + +export const AttackDiscoveryCard: OnboardingCardComponent = ({ + isCardComplete, + setExpandedCardId, + setComplete, +}) => { + const isIntegrationsCardComplete = useMemo( + () => isCardComplete(OnboardingCardId.integrations), + [isCardComplete] + ); + + const expandIntegrationsCard = useCallback(() => { + setExpandedCardId(OnboardingCardId.integrations, { scroll: true }); + }, [setExpandedCardId]); + + return ( + + + + + {i18n.ATTACK_DISCOVERY_CARD_DESCRIPTION} + + {!isIntegrationsCardComplete && ( + <> + + + + + {i18n.ATTACK_DISCOVERY_CARD_CALLOUT_INTEGRATIONS_BUTTON} + + + + + + + } + /> + + )} + + + setComplete(true)} + deepLinkId={SecurityPageName.attackDiscovery} + fill + isDisabled={!isIntegrationsCardComplete} + > + {i18n.ATTACK_DISCOVERY_CARD_START_ATTACK_DISCOVERY_BUTTON} + + + + + ); +}; + +// eslint-disable-next-line import/no-default-export +export default AttackDiscoveryCard; diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/attack_discovery/images/attack_discovery.png b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/attack_discovery/images/attack_discovery.png new file mode 100644 index 0000000000000000000000000000000000000000..0d6b551e096613c60ac1cee0aedd73c966f3493a GIT binary patch literal 49520 zcmb?@cU)6R_ctP}3L2mu1pOF~ZwA;}x}d3K-G{r&ldPd;~Y@64GqXTEdJnKS3|+)!VWhwB^{8yg#s z*1bDMY-|TVv9Yl~Is6Oj&Oi#PpLOAIxvh7bjqQCL_r4=1>$kAeJtI9fwvelAY>%F@ zvF)*LJz8XA^Ot60TXtY$Q%YfD7p4 zJ8+KeJ2h5`P5Xer-({l%*Zy0FosBKpjg8~Kb*xy|@1H+d-|ubyb3OR>!2c+|W&f-8 z!B1}w{#9mw^1YetrL(TA%MtH;mcDFkXGOk$4`>-(S!YqRbThH=v(VF3a)NnEIXc50 zfTe;wy}!3&QwdUH6+OXzj>18n9$vmmL8_Pjtf9mzf4>d5B>ZO;Kd9;@3q3<&b(jxW zSYAq6O8OFzOITP~#m5<ZMEHJNotJ%6VUyrJ@E%^&Xlw;vV2_s;*p z%zsAu=UvuNfm|wpzr_aR;{Zy8Xhg*R=iDHN98yzlTt1zr&tf{OG!VqW8>k zp?ZxIOe@fMf;!G|Rm*2Sn{8S^Fplc$5#{jn{@3lo*JvY2o!} zYhdM8{#Mp}D7+=HD^67|9CbOe9po$RdijRYmN|Vq7f8!}cZZpu?&A_NmuoOt)1`ZL zAkpL98azmGOU}dEM~l`K^!{n-0pFWW5ariu#45x zp6DYh3Dw5pNfv{eTDVlP0R$*E3U>HS*V zWAEE(b9k*S;1oU0%V#5?!@Vk&~zB-lamQgc5WR_GmhKR^IL2x#~Y<*tS4m(mpSMf_)c>Ulv-) zxGKy`mro0D<5&W7N#N4Hs4_M1D<9sJ`E-R~CxR}zgw%m!HfW#&r}w8Qtq!@cUn7_W zu%peQt83R^Pp>g=GISPq;U?`l32^4i_mhuVw?bOTwS^2Rz01aT3$+*aEOuU8G1FT+ zqcA=Tej~M6{&HyiE+2K5{LO}xiFJST=E|Jgdgzeeg4r1XacMK@40+)q@p$1YRHtF( zBp!=Zp>OSW#7@at|h= z@ldpnmS+*~w;MB0ZmbhCiJhM)08epx{KXwhyId7HGu#a=YIiJ5Q4TR1L+`oOx1RF; zzJMqUUSlBhdboF6WJgZWq{JYd3!YERLmJ~8_D>yBpRi&kQ1q2PE0<|^%IzQ2K1a6e zkM8>n`P|}CMp2g(fj>&?J^j>_S^^isDi+@YCzBPNox=-@h9}|jz>6dNpdP!ih4t{< zw5J;l{`G)a!)Z9;tj_X*(fcAHjrD=Zp4pj`GqT^kLQCPZ|Kon*AAeq z5Q7x8v9(l2Uc?3!&^ zyZe~^bi}^3C5@6yVD2fv=Lyac%oW1P2qtD<+=fPrA~4Zwmmac!vAuSOt|xkdT#KN` zltbx(6?DP0{ddQlQnv%E>3Cz>T|1YIFI-Dx$Z z;~`$ytG+Jm502ztcai%d^4$5|jRplCeIOr7Gl)-Md2c&?Ehq(m#l*-V^T9L|CFC z+8TjAOZJ586f#k{_fWg}71W3VwG-}ZZXfQCJZyQpBA)_iSS-SJs*sPABcu`uq$g7Y z7gkS6-Tr~e@1*BN|L}Es7Pe2~wcQ(mi{DmdM?IVYh?}UjrGbJL zrv{4CidBGel)i+ zEHjxLNX~3``$<&CAE`yD<=F(&bQtSr%2B;_7Z~e8cL#7l8O9`OVqnF9DZ~p%E{0(i zy}5rD^YKL}`wM?2X^pY5>x^)Rcj@QGOv62~#p86RM#ihT{&3ZrTf9HF;yGfXuqxQf zbRy6uDenZ8<>%kUv}VKt_FnR4OclJeA2ZDQ?cYoyP8FJo8&JFCK(|)wX5{Y<=!FV> zAx@xXaN(1pAz}jD@OVhg?(Pn z3f;V4cI$qjnON)a0{vt7zj*l2#8F%pV&moKfAL)Ei*N4L4UTqhV*f^8xc&zNcA*4} z>DI%C>Zbwb_QU1&3t6-bmqx-Kz`!>yero@pVDlLD0~Lu(Di(Gh-gwwd*9GsooGxtZ0 zCvJ3RP07P1mxtqGuTG4kpwXd=**605k_wFo`s|*_N=PlHuTGhCh^pG-#SS7kL#ntDo1uki}hJ89TNg>+@bX6t+TNilv8lJ#I zW5ns(Kt4~qh2i}Ul#SQECvd7ci~)&?dsuH=7SKwemFp(yU;w(3Ke5UX@%~0m7`McP zWC>ijkXn0c1}My!^d~F_sf`oKh??-`&=J&y`O`-+$)r%%FiS-xvPv-dmAvN<&MtCa{HTZDnEg9=<9^nKHr+}!mh*Kd^(}=?X7?6 zrSH<(d;P%}!Du8^*~5*D%gPDT%Y90;di{|#+M~KtMR=n9?sm@jOGHqRv8|$eo8d|6 zl@OeNW7=Sk0@%asQQ(QeRDdUhETxp?MWNjE!>BrZ>TK4+%R^=>f^Mk=J_QOW4(KPtTnjBdS|boA)7ExO4g`7ez^O=xLxP6 zzQ3^VPHVWF;^y_6*!S1B`>zH6u!0;qPW5|uG%g`gh=nRN_JL6?9wvIYh9SRY^ByhV zV7A$DYg6>v-54?J>&D0Tvw7{lO@>b0AO*JENNv(@b*rW&OwUYU7~C;L5+SzDe8JT&3mfz|-`Zb-vK z3*^a82CNYskml8?ucE4ojg5Fmvx1up@?ACXCJ=0k@eQHxmPuLHXq7K$6cl5$6uppbAK*`zPGay&riq+>u)X}?&}5iV_zF!R2Ohw znIqxvK*zeU`H|)O-;xv9Y{6aDgRk!!?C*%y`A=r8?oWXtZWS2hx1IT6dVf97PLy!# zGYT1fC|V~(@1#_AY)!JTRiIkwD-QP`A6$s=W;W3?OJvGS-hBb}Dl_e{zHW!+xY(J~ z<}rvBL4er=MaX8wM>OI?{j}4;QsEVsN4|0URWv*v^U#3yMbgWoa+NXP*f;@Vh_O`E zc1NT`8hwzjb*gXU_OdGD)dSD|oopSz!v*Sxy88{7?tA(G&cgDYMyr)qPCE7tGSy&8 z+B369rQ3)whmzcd*hJnnIVVpoO^xu+0B*iR)!7afN>_fs4I8_LgZd%JliuNZNlmMo zC1@>vt=*%-pZr==%FC^8TPLsZWMekjz@RwR%YUZh$@~y7O40kl{^?`)tx#2% zBajzz%1Ebl;LZ{TJ14P)*2Oggg(L8IDP0dSZ_^KZCtJ7Dx=>4!u+Zos*-!S{vaQn+ zK4v6dOz1-y<$Xf4%Fk=>GJASWRqM=qoNcRP4miCfppnkfxMAyQL}%sO{-^KO7uL0= zRO2?oy*#3=?Qi*UU+4T-a6y%n70^bRAdGK`2YzaWcW1WJt_2d?fFz#++qLmwP(ZyV z6BXKq%>f<;-aIa-Y!T3bMPZT#<7W}HyzXhACD#p0%yyeba0Xj9Zj+|0|W z)4^rAxCfHyNm-Al+=UA*9eU+U7?^!jdx-olgn4x1PY(8zXLUmA8M+#QJ*E0B0zBHL< zX6pW|>yIDcEYBR3vm#zA^px{&q}#6oN8hXMwnXP!6C-R}-gKM43(GsHA3rQ^jlTA) zNdcZ@O1*MbLiJ{AFBlYIHzVF%= zo|qO{+KO=2;LMFq?BCie%!zk_OCCN}d<^X_Z=r)EY=H>Y1c{a7*@|3My4Kw}T0hP4 z{3UOSZEIRd@!TfftG*tb=~c^YQx>%%2TMIGf$<|s+&^yK>eIYmZRJKg?^vCSv+z9Y zPkF-I5Ga3wBR$Y5?_KEX@LB_t+Q=k%h5OD%>^CIDkJtmf#+%7;%-uiqkbcP55dZ27 zOWC@R8gujJ%B4x#Ape7sAydpjaW`~TyhqXaY9Y|(Y-!#gdPB=@c=gJQkG!fv8Rr-L zjFd_w>g$~k%2ocr^#`^SyEucgKx5;V_Jh#E3!A8ql~{L{4YOyU?P|+EYEPNbvPFg~ zt4B>X53X64@jzCGm_T0@YG$E^PNWhP878=a_{bZ3k4pw^APsnVd*7qcxXxJM!Aq9smjmvco?oWur@d0 zOvIKo!C%{CXC()9hByvg+7!AFtZRH#W9G5A9zjL?upP(`nLZvGWWf1x`RHwLWAzuu zfAIJ!*dj|>so1-ms1ar-Ve*p0ZQJ&E7#~yclDt}d`(PzLNDC3s8 zz9JOxSRlqlz9p@j;Tt>pEoxIBzFjSH034K-8JONIEcU&#Gw*kGa3 zfcf*HP&G_n1S6iez67xA6xe3~U#yb#%h@(zdaS3LdHM;3G5Pj?F+<$T8cHNV?WkpY z_cdd-uRZzM*E{UGCDwd_&T_?{;|+WSOOk z83?b{#>BqJoDhdDHRp5wyBh(Hckb1L1HMo3>zt2b-dP1R;y}Dz&L6hA3A`%Z1n~#H(1^mxHN+h{G4j)bQhUqE-tq3`i+Z#+x7hE${VQ~`m!xLb zsIkC1pK^kPzu5jSp}Rg)D>5nD%^O%fH^Ft&`CruGN7~=R@7#*je8(WNXQ}^-ewwIZ z>^mEi(xk5565%612QiK>+OyXi6`f4%7Rfq6BHU>A{dv+|BR_mJQtYf;Jp1S(*U!!A zdJe9IQx8hxylMrUW)6+Vs?L_d$6(}gyY)%flSUeemV^>+^U4)`}} z-Cm!82W2)wRwM6nespId)(EMif0PC!Jf2DqFlY!jPK@<-A3@CZ3n^QW!?S#b@}9*N z4c8GOMlL8k^bT>@ePy8AfM07OY)zk_&jo=7fB7fImpS%ddEYdZR8Rn$k0{+VmI9n# zJztEiyMlm)J|1hHu0cpDu^nq3)UAXh;`IXKc=R9fRSt4RDwFl2@A7OZQ&etBAMif> z)~2W~G%)tr-Ps=|Ia1{6akr60?85}8`NBiUN8pF+7JzvAXBnF>Ih;-7M_XQJL-ZPwZQ8u_tQholDlfj~}WJ$*(VV?rg_A8*@=Pd+8=zb>;>LF;_-x57Mo3 z9$B=ZH5y9>uDS94Z#BOaJ#zG$8-M17-_7(17KNUloi6^yJtBL7Th>bdx&EupbD5WI zx~f~}d;wXPn=+ohWUd(=fu7fl_ADz-p3rK z@u0@+&P_lU4pZ6}r#Swe+F#Y!pM+Uy6ht?s4k?^vW7)Qh$4@049AQlb_qtQAMe<@>J3of1I<%=$WW7 za?VKK39m-=U;h{IJ#KM263fXxeK!*N_GW{am*JSziJ5_O<e z=WFu@m)nExB!;yRU7jWvKN4PdBU`x$t9%`@6)FBGo#CGEW=mRl~!K$}=ykoaQJ$_Q_`ikpUl~+LaBN15EPi?TYQ6G9{)vC8(C@Re2s|K&I6Ws$1jLXc%-4Su z+;^~6NJrj^%_%%*{_fe`*Z)B8e~a6oNTVW?=i52V#@~4VtsuBhvD}Qos`XFr?)@7J zdkD47SJEs|GSvnT{>+$blG?ys#Uu>{9d5;+pDp^bV}nd{->hs!OacFg$N!q^x7XR9 zExGY6h(FwkJk*(KFG?&nZH1Z1Q3-QCitsg9SR|vH%7lnc6wKMl7A00`X#oee<(<3Z zJ^DtI9%J*y22t;-=q9KvO5%Mf?Qm0pP0P~xS@m3-!LqT!-G;Arvo!Opxz1Mwa(wRe zq~?rT`UN9elBgH>imgfQ^C%luTc4JJDIt6A5>&rxH>saur~X03~t@~E>5ubRKm zzP)TWk}TLaS~EJCWWL+;{YDHg|bmJiAs<coGm^5kdJ{K`xL^fQ(Iy+<2G1yELYEY>? zuX#B*@tJ(DMpAX6%bWnt!x=NXD#j0F$}&HnSoQ|>;T`$*J<^$$T_(>X{{|ze5^1bX8H4Wy?;~W-sWh~x5ks@IXKGBK zp_tsv164O~UXBnU=aE2lE$C}}G$j~8)D%0e=eOyeKa990btTf}K>_6Q{bKrIdSS=o z2t%xwyYdUj*!{~#;?l}x1Hyz!2d4`s4++_X(D^NcXN~nh&01W`5!N_erihdfgmEC# zwjiRj#jdBrSzg(`xcEw{U5My_U(ad`$?fW^+?y81wa#uD<2H6x?$Oa#`4pjJ0Cub&>*=x* zh&QgJ&0gI-QRC8)?KxzeijHE%jq8_O%8Sjpc63EOy0+m0WjjdNx$BJ z;i!ocV2LP6Ocwvm%50gXQJM}_0svKjnm1^RDYOz*Q-{y* z4SA$yjTxt5U^sczt&g+*LNZ4^Qvt(pXg5hDy;@ul+O~`=?XTHPLQZZYGb>bjwx|Xm zozG)IZZ^Noe}g)K=RT{1_Ez$GUWa+6X2nETdy-KBy80n8VXvE((uhc&M)UB|@3QUc zsR@tO9q#fc6lV5kZH9pH>6obMwgnKKexk+TRp6JKJufrk6Zr!tT)Nd+YbA`aV>eJ@ zjDUxK-r*-}iq3tTo}RYxF{VA~m<&UwTd(O7ynQx6V%2bIlLv4aZM(=<>>7$i{2+8{ z>|?diQzg?Cr{dr9s$H^&c6SZ(K4)Za!q^oh@E-vamP&h_1AG<&MP*kY1*7;BPteY7 z@Zfv-QqZ$cJphiK?!9CqEl-^SFXOu(o4roq8QoFR{OSNJ7xQGE?Y4-oTkMza!u7NY zJnu}JCt^FVpV9iZmsYk^3PyW*KB#>z)YPo{i%r4vZgY5+Xf}4>-mVyFL3_ts|0aJJ_ zX)&u>@>MP~4#1RfbP5Kd&}0sDcJ|aVLp%2>G#2Xz>m(_J4;eRa&PQW)Cc}D@z~EB5 z8f0HeanD%aaP(Z|z%{MUtLb5v@mHPXSMAKHxz53;qRoo9`1eZP(dJ9hT9w%?R2QZB zCnQOsv8gQ(tvM519tvcl_;Iu^lhNb|nSg+5%3E}i4SHJ-)3xdg-HFGv)Rsz!LzODQ z{xQHDT*wwWtY0quiW6C{<+W$Rjqt`1Q{Z*WNsnTc)g0&VvNPRtjQ1#nF;ZixZ$rDI z#QnH&7uQF|ks;)j_<}%?!C>h$gRr4%r%~QO)D=pT;(l!U< zS~D3YBjne66`c~E0CUDW>k>%*i3Zw93h83Jv}^n&sIZ{K77?__9{QE{`&%n<=S`yk z&^ukSghtxu9xLLxyRwAh>$kWP7>hN|g4$QyAALGzjlWu+bW;{8_&c-)(vYCN=h{+s zvc?>6RK{H$J!U$&Z)E40KR;-Ol(HW}LB-M;Z+iQ)svTvFcs>hXm)DM5*?Ba$n%ZJ} z>e!^k1N)IHr{#6*x{`a3k&S!#mE7#HqPVUFY^NIN#%m>IAs z1S=coLTaWVq%3T3O&7fAQWM^2&a${IW#q|YJ1k3j6{eTQQ(|7vsdzO9dO01UV?I>d zv}9F35nZF(df&FtMP8lSk1zzixgj8iO1{D6{|2E`em`>(njIEYE?;Wf7*$#6vSvDm z<;CjA>kfkw#bGtSrB?KKSXjGX)`h5p&0IW3<=$Y%WE-<}Qxxo1-8ZuZv0&qCLS1PY zT}T^nOqd)aJ7ed*l9;)BZo0{?Q2hO7Y7W%3?Yl{9Fb7r%?m2Gy+V<8~L;$TJ_%VfW zTVk`|a(afX-sIR&vz=MF50Dwnz`HlKqbFfzXD3T0Eym=!Z8nRI2QB#FD3`egZG9Pt z_?si$JyF$(;cIC;OV*jq2CL`B`u=}1Mcv1|st$^J)h_CMdedz3mYC48TrrB0zWnA> z=u%pXtvU+@N+L1U%S7OHWTJTa=6bl>j+skMZ`6bfp%J1UV&<|Y+Za`YBKLS*J2hWg z9w0~U*RP2iKR6~vk8o`cy3Huu`w-!l*sED z9g(tcW4PW%}6BfO>0uE{1rrRx{Y0{!_e5Qi>f{J@_W-Q zLr!ZKv-p<+O?$S7|gSVmCURKF1w{t}w@1^b*X>WD95HbE+on=K9rH5Ju zW-X_!LW??Z0kb0)$xvcpU+Z;epR<_$1fMw06j)`^GvsM74InlvNVh@H9sV; zKiXr`L%#C0djUufGb#X0xS`yD8RMck`alde9h*s#U~uJJHm_yle1TsNLIXS;wWI@l zGt?}CO28iJmIP$>=Px~-GdpXiE(jgjD^luC7i3NQa$;=>%fqYa>(c#P2GOA;jbQ!s z`u3&yp+h7Q7tg0E>Wba0$2_Qn#DQ>E%&c?Uciz*&ZA~F)ztWzuTA#+`F!^#B6wEyF zdTPu5`!FltMFS{)`!{PxyB$l*q10{#toSpa^A-g4I>tnq?iTWS(jxs8ZXkTvY?L=a zHZ-1h#UFNEJVBB-{L7deD9?#;Qw$}qYrmPDL6S_(MCx031us37*Atbftz191Y|%Ju zfVG@ly*ILLTHa)(dL|^ za6#prngAYUv)U4+t&WxSS8GXM6RzOyOcE^BlD04Yk^EMYnh4toIK?d+afRG$cL^2% z-DF8%*u-T^>rAP8eqVCWps~P#?)I9h_!`J#sdQU|J!6!605T5J)dhW^C9Rr3QCvwr zQ+yAAF~7dlNW#J<#O+r?Ef!uTID^qKe*5AZTAUxlL(+$r#Ch#a*BbWtB3w&(pYzIv z=9iZY+Q^tGbeF45E)$gy8P0F!H}(97?YmcsPwyqK8%965X-?=t^q0|d9Q|dS$i2?j zK<3S8`Qv~*e$x^Ss=am8(9mojDly5o3!{RD#eR4CPdQU@M#K|XsXYN(b@+W7C zS-DbTDo;u6Ceo`=!Q9sM@|zp!tSyj9@GS<51++yft{-b;;R0@mn(M-ckG6FA!FC)o zag{QSy#7eR1oZGTB{LVL08bMy{{S8^vS;jTbG);JC9otpQI@(+7g$bfss{U;d6{FQ z{mm}az;?1FyQ60Swjv1zYlEQ)h>}U?9b!G?({GAPR-j%$W7?$6h=xx#9KwRzC7Qs8t$z56$r@K|!xMfrs-+iC3J^o0iSU z40QAw!Ej`@RI&u+(-@`FlkeO{)>EhgQ@!`q!@Hx2EO|ivFbkj<`}qgX<1r;MEIT)^ zC-qg9glj-fhWS7M=ix&mrT~`UsuQdEC#``cP83!LJ2JE+OpW7aw(Zaj%Y+*O4N+Q@ z|4VL@WnuuTNM}SNa`eH_&1=QiwG7K~g2vuA@vauI7?F_=v5D!b6Vb62^@(}r0<)>) z+>u40t1Cg5Qr#5Z7;HEHv3I=2a-@96(#I@mkt6cmb`Pd%&CSpS3^5N$Lh4gc%g`F6 zYI!FKuq8RkWt4 zHs;G|Esj^{VeuCCG=T*XxoIe3kGD41*j~LgvDR6}EU6mogM(gHOiUF_fL(F%cSQ8G z8p44S9=1V3^VlTP4wq*-ubI%Kb<68mTusCJq=#iH&dslP86z^}QD5yA5L3EcDkaf9 zCYNdml;}=UP_}b7zU~YIez$|w36kc`*wj^<5kvjpM)O8ogte`!4mdlmn7jK^6L!g6 zshAi1DRi#w^du(lG8LJTXqgU?eZviA!E*4(R(4reZ$8?B{wK5qhoCI>o~bc{WZ1~`CRwLLMn<&>%bzNdwh2e( z+A2Nj-yfzr&*kOFCsz94LeckFF20N{pSB~u3*Wp7rg{2j>m|y$%+J2w(+7Szd18h;Ax6MRkZ}-!OKl9UQHGZs%%x5zh`%MM4(s zVM(_0aZH`#ZBFahcHfcBlVw)E!hx9`!u^%0o6XX0*TLddgps%ZTSYfyTEID@G_qg*p54S)qM{a zng}qdF$}*f5aUlh6s%X*|P*>2O(s?e^|GL)`?IgLEq{tl@jM9KKFb#t0(V_F2+ZjL)q(uD9u<8mg_#_Vb+ zfGRC%0>B}4S!=7;D@UdzowAHM5t~7fc**gP*!6#kzjCl2(w=((+N=pMBnfY)0DnFo z{GfK~SAPCJYR8)TL7vFIpO5!GOdbD1Lr)b--=gOg{1gNhmY(9Ma`ZFt8#)*pN%~jI zx5o>2d2)urKOV~K+&=Yli1?TEM+9jlvC}~sK@|kf?F&CX{~&x~J<_}0hD$$RFt=~W z{O4HgueaD4OH-ruBI8mk<{)2cTxavb#&~{w)aCJ8z{;yjf>=MeaG; zUH^_5i^r%{$H%>!c1_6}5chOm;{7?od-IB+2L4=m&^|$U z_XXgpY`Z;uOksQtK^t#~YyM;4)ea$izp_2C8andTc5M2Iqe$J?c2+|!rbl5{6=0&_b%?{G`NF5xhzERb~@=H=IT}T)C$$Z zoI1E9;8k}qRS!6T>0^v++0Q>&m3$s9+4fx=TmI1T(EZiYypd*xo)&q00g)gPD6hB# zjWU=0T7Y0U3#A}tCdn>q$Zj#|mhC4@d`}&(&0gz-8DSVd8RBS5;&-73gcsGagNHzE zc;ylN0{d(6r0LGe>m{K2~vlzKWC);hfXHTJXr` zc18T-2i1ICU2wEje4Lmu;mwtjCe^L5l~OlaapTlu(7>~Qtty_wZ^DnBpVPjdciWb5 zmd+AL+HRJL6RiNoLgBpcKB@-hW51>It}Qo|GsWt+(uJt64M<(Ovi@fO z5O8<;j-C&5{TZe~d|xM+Ge51!R(I^ZZvk%=V#Otnfb&iz^SfkZ?K;+Lj$X2GEwPv}x8es^;QEFxQ!i z7E-mWZ0&GVk?ZqnXNe*~C@qlQH)16(DTEd64Y4-d-(Nso8B2NikK@ko$5s8mtAX8% z&n;}d=RKHw^-N7>MNnH#`q|QS70?PI+tlcf!nYQY1(5-O`76u)iaJ_2jbI>a}Y%QQ%XDbDm zQ2g{7fwKwhLyflp7&V66iq45ah2%y@s5?@ z(w)fl)~n^Mw04)}$7x4ec4}^VSBrF#k)_KL7G~=#M#G2Po=9-EaQS#reRp4N9Fn3} zgiat@(Ba<_+ynwps}LBjinG85%MY34L7*yO3iZ^m7l1LL5+EG|L^$vKkqz= zr>a%nY&afwCv$mLiX$0%ng2lOei96}!}`M;jDOxSdQW(qVI)uc>`SwGVR^E*hL~@v*Y+oLNOtZ*A4} zBoDV=%+LXT^42c9B50Pf~fWvy#c%CbyN6 z2{N*H>xq!ZC41ohL0*59l# zg@Wi@nQ9m#O6JFW5|-_9kdL$}GC_y$%i4qH?k+Hfd)g{cV5^qKV5T}L4@3=AuoLSm zq9NqZlYqWmupUc75f}I4GrD7&a~d^gTuEE9<=p60)ljM0*OKTSbHY8BY#Ch7UVaXu zkAlKzD_zDt-hAe<^ML-vyM=G!ljz}_cO5+TAK~A-j38X!8xhx27i9P6Em^tnZ>T$WhdwYRHXOhimsDn z&i7Q9iHmO^87|%DH3&>xi{rogcDYOx7|T1je3EI5BGS8hvq3V0_NLZg9e<+taIrvQ=adTp5~8 zN&V3V^ysPKo#k$=yLvtA_^J}veM2A6dkp??VS=OmW#q4m*Ve(&i){A}RdOkvF%g>@ zXZ(I@B34j2fd*}*+fwEL5iJKLtGs^uNG-9WYXp*I;hnbI?!Yvv)cUvont_VVBeOXf z0{l{Stjvsk0`{`kHPS@*qpRY^*q{fgpJyM>)F>0hN@o%yq{&k<)!MShU9&!vLvv#qKB(zjlgz+%UDLng{w6^Xe z!ls&gl~a7V8o=g}<;!1_;ytwW<=gz8^M)jz-tGeBaT7L=1@=}Gv>rS59xEYsx2_vJ z$Lz6-Z0mevEHvACp034~OB*)I(*&2nG_ea@pYm$MX*ExuEQ#o|44e3)M@fx@MySM* zN9JmQi|qgL-yAFtyUrMf2O~#fX`Kl?atcB%WugbaU4;7?sZ>c=3~CJ1s4nRj?LI@? zxY#96RfsHbX`i_%CT(UX`XMas`Z`-ghfuS`(v!!- z6zW@3RNGkx=IVcio^;D{{qA)61KBEzLYy`>*Yj5xdn{Pn{h9_IE87 zW@<>BqpDXfZrV?6HX zPOFF=H!=E9ocq@J04ko{H7_n=-&pH-+W4-JGF_rvgmc(kJeWGsYE6~4!b8NH+%+Fk z>6B#qR1WfTLY^#Lck{lGvP>$c*_0&W%y?Hc%dJp7F(k7htz|EZ-89#!-r?H$&2kfU z#Lw3S{J0M1bc0~4bSmSQkJbvMfzff~VTF+`s=nZVmcZMQ!$;3-k{qoyCJZkIknf@x zQcH=c)7M`3yodX5pP#l9;Mk8;LveVJv01#sx&`r)2@!1qcA4ib!Q|7Y-G4DfKL&Fa zST!JVCY(vyfUu8SVf{hc@guzA<$P5suO)H)5~b`W)NE%|3tuz6m%*}t-`r`IF3eb3 zatWjQ!YlE6W))H(If1Zx-Xs8Ht5rAaOjdb$+CzEO-Yj^>p@G36-@au)(Tzw+1|CDB z`&jq(OSx<^YeaQ&l2N@8o;nzg6>F$SxV7H#@$$>h34dCrekezkgjL)*;;3vEvSB$< zuS$$sw>%QIbXw#jhp+=jRj$QSju6ey2aBrHwx@O}#IICGpsw|%h#jt0>SZkR+uK$* zS)n?XG%WhG?6k}|aRG?aeH-c@i{s_HjXs>aif#Tj2hd5n(w#N-24uB|bl5QgwLvk0 z;ts=#LnE{g*my`Jd}|4#&%QKtfq6@)-My{srX{>Goc?Srj`fHRVnT`+o;>udyla*6 zC~IIMVD$uAu}ujYRBwlmBlJ`*K8qH8UE%UrbEI55%gNn{=f+>~OA~$zNU2V!GDA-^ z`XZ0Scya->8t#6!Z zf)Vl-vh8DXdp<&S#rg*-A+P0VCAr}K<#fr1`g=1p;qW{U`?)n^jEd@!GVtZEL#R(Z zzle_R4ivB!0&*ewO$ZT}2fX_N{~zZeQvL9GB4r|F7i&_PQ^o$x3)GTVG&QaXVpeyy z%+?zqQl*sIJ-NQWo~02*a}hP`Wru2*eRPtStdW9>Hr3AIV#Z|aJ8H!7X^LLepnMmd z%HFu!&5Z3~L9G$FA?15Z3$40{OnA@b8nS=wjz@*y##@)vdw+Q@5k6I1{N}Vl8&M&Zd_JQk)wEcSRXaiNcmya!d@&P`PNL|H%123v>y%guzi~O+L z?))u3$>a53@ed0ncBNRu$cjFGQb5G3}h_zE!YdzWj%W);ONyt4~wb08A zYvtd_p@XT>+9evdv?~amCz*dnK;G6Kd37|e6`CA+a6rRk8&7~GbpV(e-haMr(SJ0u zG+ll-=fECF*dxC@`&A2DKYt`WYg;7B=;DQ@8>^J}ZSX(A!J2(CC7!&n7@!?%Aa?vv zVCebpTr4`VkGWX@Sit{}>&{{ee*7Bk^3%($DoS*vCQ#UCoxi~Kca;zCjeX5NB>IIV?|RsBTA4qeH#uY@K=0xKgYz>(pj$z7>PhM>hxX|{v)onedR!D zXhwz@b%OPl=H^WYgV_53MbqDXz3PrPeu0UO>!$skWG<(8`yGE~L=wMkVqmAowYuy& zEj86~+^w=*dgU!(QFQd-k-r&cMMBioZm+k0j2BNV;rRISz^zA0cZEjvbx@%7eWQFY(@FpNV>2?$7w2+}H@g9u1> zw@6D#4>_Qqh@c{!N=YN#siJiE&|QPn(7XpwAMo>ifB(!i7jyR6wf4R46?*|1oZV-- z(SDbHbXF|s!qo*>J5i_Hx=a+BfpCLraJ-KzrIj)cdXPw64=E!?x~y&6BhSxDO3#pk zTXo<%vC=S+@h`5!Hsf5^t|Rrmo9)O}d0T>j%La%5yub^7t~vT7-vBVo3~Sdb>@a#` z@%^~j&Nb@Tm1FI)ww;`wXFAwph&u=j{^oh0?KsA73Hg)U3ERPBBGZ_1*!a+>C)&b7 z>lyq>g`JsXh#Q(KmPYxnZ%E@hY{@B?a!;x3B+H1!?`qPV6FF}_I zXX}9q=jHzP?usRrlcg=I57b}0Vh`*9?JlWKb!Yiut-utfZxftz(0xq z#)4S}`xdrRZnzOkftgbvz8c3#gJ?OxBE+vnt&Nn9XU1(XYjRdb-5RNNZGSy_a55*3 z+iTAAP}wNcWyvxv)1ddKT;E%dWBi3s-vjgZ!^ zgs+ABI3;+z@M((_+5e(g9=ba)FLFc(FvVA!ui7&!=SIfm*GfgF9;W-M6&CrdH_W%a z$Fj@a+i@K&9`Nn}ayh;Ww{#He>iQu3E$6Qcu6pwzGxIzf4-W4k_gcK76-!5-RUUXG z;;$wgwH6+-ZfZ*(0j&J{ErObrMug(pcH>IC%kUioqzv-AsF$;fE5L=hzohS&B0lFx zRd^jB8FxxWAM4)R%--RyJi_2`Gw`}CfV)-uZkH|g_nqN76@t#(E(hm|!FScQvZ)0l z+jV8J%n^rly|Rbgzf?N4%wnxIa4Y301}ga0-V{#iP}Lf2`a}nY&Yf;RFBa1eHI!@= z&H6Elc`bI&Ux_EC*Xm^YK|K}k(C(E8?R|2s8mit+&2t*quj9L_CGLz<()Zn4R5v?% z26;SNISL>=Tz~C~{@!QP&KNO~gXr4T8hxAs*OgKJJa|5COKf#ZZ9dPJ18f>C!`(U8 zTlE#iCnPk)KK&TSP(0b1c$cL+HOD(&pPPB*)gDWxPwf9SQl6o;&qWr0BLT(VUe6Ll zIEwE7Y|C9ZaaonrDTIa}6o-|R6NLy?IWyIz~B zQsanxUiqs%@O|N{$jmpX`IS&U7e>*i@q)ISF{zy6_j$6ygA(zmnTx1i-FaDIJ@3CZ zq4tip?B`@WA73~pQKfDAw_rn#y>T1wqSHDeb!PtD$xvX4`sg4H05#9K#irk%y=j>) z(rziKHBcV$Kvn~_Jb@JWTV&1d-jkB;4GukRJC*u*!LegAB+bcj&ew>x^@P0-jEtz3 z`uRVDhYtFAYvaIWF<<&4QLPM1)H&EA)<(Xxcr7+}Fm6L{Yj4P44~7#LwII^nd>#>K z$$(A}b0Zbk!C8hx7Lj6x!N(&wv^l(9809vN#Oo`yS9QKUI|-4c8?V$8toHk-Rf_r^5ozPVkb z;81Rlm9B_Z!L!OlL?#FRty;U2ubz*4#Q;=G7v51`JAr$80REklFA`)-#8Xc!w{EJL zXFTQijIZ=TJWupmIc9Fu4q^NCri8z{d%-|Hol|8Mv#@+sBypsKh>A1G{E5dl{}7&2o}D~psbz7`>)u$fOzKY=HK$b$9CGR)kHSE& ziEy6yB^N96Lumbp?Pl_s%TF8N4%!{9OWK1kKy}%+Ziy?+D>y|N>QU`N_r1I|Q0;iC zk$Gd`PXkho_8Lm78WF9YDISfK6mHU*+t@MOj_`%OIUo|a#!a8IgFG;8w=xvV2Q8cP z{F3nHIZ@&C1T6YrEk8wD?>B71((ul}didsqCh^QOn%cwV^r{8^S`x~ugB5L03R9`@ z@3D;D6lnWOUAdi~i=eC?{I&eyguc-RG0=b0{p+bXr+~eo%OSTmqokhdJ3Kn2p0?cL zqjK-7R9IS~<_oi;pQ3%w8D1`;+1z^sZ@$eb(sleqk%K@-xM5tng&z;&b`Qhc@<3~? z)s7UBQcIx}nw!%@T~ao*X0TU%;F?&yJL|Ue=X} z#sODhObt@qGr)ZnfK_;^-}YmCL7f_Yof=PKQG1@EBoy~qiWcmY|Gq$?cDNZ&rQ4Hj zWCh$8Q(9F81sf*fQQBT$OMp|DjgaY}xJ#KBcRASO0*U+0!+@eA>tgooF)<>XS{^xh zyT+;he`qey_E?(h8d&FMXEPn2yN@SPh7Xp7r4yG>Q4Hhyf$P;@7Z^hlDr)?FSwFzk zBLAbd4fNFej%_g zoQ35?Zlz1z-L*Bqk76S*?T_b`gH_~<}g)tAJ6X2I6F*cT24&x8g(pn6bc`uVw>k*Iv4hP zx3bAV*a4cjO~=KLD;`QgU;6q@+DNU>Eq$c391dUn=(o9iGd)%VLI470thG9^6+T${ zVm~Ey;!?GbtJh%MHHBTAO^mqRQ9T3bV08C^S}`~3iu$*z7uR2YVL>lYZ$k#? zCb06CY3wfDv$=`~l#%-IItZiXX#_W)iGm^pKnr~Q`B)>TYy&fOD&w3E^_*$Jj|8N zCdRuIqnhFYXR>{fOm^bI-o2aDQ?p-*=)-&Hbb;`mJ(c8xIl~ferIsP*@Ydoam^|U) zn@@WO?koox@UlxO=i*X0_o-y8xCnEur3Ep}Us-|jM}G(RXWwv%<;it+h_hpb-1*Ox zIX?wX33Whu$ZvY5H?Xk%5W{;(f_&b}VAV|4 zlcK(FP-B2pk`+>fi~GY^{yuWH%0Y}tUIjN3heI9*22PRSTW1J-mM{Eknf{3ZMn`Jcrg zAVUE;Fob-1tW4B+NwCkF*EKULIe&Y`B_uSuliS5YLn3@p#7;L077nSSiTm)HMOC#g zypw$Yd^-T~Ga}+U>9!sLt-r!)e=193dT!FX^IB`xQw1R&sF@mD9Kw9LnbWzQ6Lu5Lu&ohlK+jiXQFxvk+pjjEbtEMG7c=i zRHT2r>u!P1vrJv4JD4>`xx%(n6I&2){nTBNyNkB9o8G+o%pA|t=a;2EP3p~Hiwh%| z@cxni1!9=u@yfwA3SSZbq+)Lu>#qlv^9h0Iw^8u4Kd_LvBHF*?f9BYXxf&916r%05 zD6DXKwgg&W*vX)CQ=E=#@VKaXygG0bTH9qJH%v9P2H|)Olk~L^!zhwo8sp-bMS-PZ zWxtv?Aj#66e4!$8W3>EX8#dA-NJjbeCO>e|9Qp3+xo6?e^ph+>O?G^b6|`+)ij{7V zv$NhRc)VO}sZpD*rYscHx%>6Mk{Ju6 zpgjIrIoHY3lb`Y*%sP&9e;qI$eH`b9estQ3=z3C^EjGv|@Z@8({VF9KVVU`Uo^sNg z=Ha1TqVL~3;V?`;iKi<@LrC{##QwmEtnRQ6h7s!TJ%fqS=l`U6w>6e7)Nus0+0jH@ zPsSH*u0{sW^Y^iR_;byZp*4iPSF?`=#h}pYhmD|ZPY|Do<&V7JP?m5Z+2mMquO}L; zu*xQM^N|C4f^FP6K-W3OC9#zh_Kqc_z{^#_)Zi{WBd zA++KUR77mz`bc#5oE^zk8js%Zb0lw9$U#5NwD)AfA!X(PV5tf*qo)NY9S?L_dD+ky zFM;=4%w6ZM@-j;2Ir7Q(qFU|)SEg+0`5KrP%W-N#twC<(5u72v zg0t-4+nd~=N}R<0iwK_I3NB(62%1*6v7@LoM|guKB(5gZ_;<1jWK^EsWsZA_(y7l8 zQM*0Z@tmd*265Z_*>k~T1mVR}E4FqT3v65!_&6kgM(p{4mH|_7g6^9yDX7SUO_#8J z2XLjx1a+Tg4u}_WSta*AXBjT}Uf4z2pWZK9bQw^v%Lbz6!+og+V zh*%r`MO)aw77}|AacM!--XY87nqDb6u!^Y_&63pG(dKFq>Xx?TzMY8y=DR@f7B+j6 zb0t)96FzKllzGJZ#%_3XKUs!^XJn+?z*8BnK z#sv(RAuKt0(iY_}T6#MHmIVLXJuc{l+pQp$@Ur1I-!1=Ssln=R*9FfRg^E@OLQ1hl zMMV}xj_qpgUE#IkR8h?3sx;ou5B%?!l+*Wza?QphsySUi_Ti&R+B2;J_$AG_Jf3OUV*~T6^8<_c zz-<6LChl*|H+wa{F{;`yCBE^y2*lvtv(%|IIRBi2+u)?J!}x4qRg*FUwXgeO4aE)0 z%L^P4R2S;AR~MI7tOotaC33g;?T?_G#4W??TOQ02%_Oy4G2{TGJvzL2ryK(h4T+@faMbHenm5Pfd_iKBn|9257#P;EYE*wa>Xo?nV7BJ{_(^ldu1ih zEXdI5`zxFnL1>Fbfp$Ob%5|!SPPsCdkTqmV-rbwLTxH{CTL&mpqLwzH1*<&smKR&s7o>5*NDl(n%QwWGIgSMX z$1G#ThYfa&et%JRt$1WKq51&JmlRd`{(OvtC={pTIxC2V`E37yYEhdU)h?*7_Ogb; z-MmG5&(0qZHDKD;PZoU3RVl4QiOR-sNgtfC$PI#*fR=8b{UlS_CQ%-jr8Z(<49}(T z%IMhat-kxTCpELu1o1&oDZ4_958u{FeGD+ECQ54&KU|Hg@4j?Hg|QPDeJ>JTSho%} z%(K2Zzn1)MQUWXh@i^^#VrsOj7Q zbIMpn)K>_)6z(Lb$QqnM(R+^u1;;9SH8YmmV#1`#(_N0mn4-Gq=P zTjAEbl|z&=7f^LbMdpn>-da0c2V3D{fx0>fA=CBvM8br%M~NhzHt?d4^d+1i*zB#h zq0g@H)3bi}Ul-bXRugG~^B<%oA+bIrGtKk1ZYZN*fv(6IIUC!Hf|9cYHk`hq)Osuk z{3r8}TEfqAq%H68h}L+UevyLWZ`mJyH%`}{6qEge*t|=D`5eP$bn(ABOJq)<7ko6% zfL$wwA$@WXTc;G~$Y@9HkW9aKy!I$;3}7F;l;vSO_>P_`VXXugN^NQJgWu~XCx1Sg z4%5K92EF$gOnlW&&@VX~-T82l7p%dI+U{Uu_XOk3c+z%hwJXLjAhe=HFSmm8KTUeC zfom=()8E1!!=S_-{>e(1exd^i84LNxvwHj!Teh5DFlEWDa`qk!~K) zkgdO@kFJ8oFH(b3`fg;8`LK^~r~WU@{FiqNB$3GNH~A;W`N+A=x`tE#)h~Y^(c7@k zPb6%=Pv2VkhqL|t4Lty&7SA4mkyh&TKRORR!B_Obon~AiG~izp{I`8)rvpOpsGX4g zIuI41m5f#Rw@+V|aG7umH@7HqZpl~twyL3L`_|NOoV&iwU+ zm{j2TM>Xck-x#uI5-sq=c{WD7&}z_TxUB!1Lk*+A(9-U9%!x26A>(DvoxrG+@wM;s zASy4(LwNC~n5%u}BZARe9k2XVvF?9acF}3w-F|-ppOZSc)HmdW;753Kct{*w)j0zT zt~6`sem%BY1bD$nPAc0%cP{M#o`9Kj|zfsorYnl5bHaUd&ze9Uw$ca+uF{?j5S^!@~Q#~_+?>u#ap-c~;EpT0~ zy~QdBv!Xm$oY1SGhpiWQC|>lfov#QCz`NV&nLzo-wIA9IY$b2_{^{$CKB-N4ax-f_ zb}7?w+2X=H6Yy$ClF}pIWtNEM>IpoN-|`1o8HYvnYPz7JnsrcvcDMVrUc{dTvU|yPD-y!MqTi zzm6I6&D8g0?WZQ3PFw^26b6Du)$Jbt{8|YlhgGc27U4H1%Os?B>C<3QE-(X@QW^$e zx{6uP9fVW^TKgWIs2dn>yzKVk*5Iz#2?E7K3U5r%m--Bs>YfpF7FZnRs_T^I9>DTN z@220_d(oARrW?|g{w9He6R4Kefo^q&4-4ck2kE$Dsi7sdUM)y-;|cNB@0vOJPfqg( zIlc&2c!&FN-_>WSoqBvkYNE`lf5Xx4=MkHs6$#Id^kQr%yWeumRuSva3shH z80gf4f?fLN7JpvVfVtvrWO$Dvd%QRn-*AAax&>D%{AF7K^f9abr`KQ&QgmJdYW=>W zHtY(%EiPQx^SZa={KMXN5oJE3i=;e%nbr>00?r&z+)VN6qN@!@D|$=xV~1ghkhX$h z8e`TiZrC(09%G@H7yOk3AI*W?Y{(FVwhGhfb2bDN7@C`b(YXJ@t0VVrZS?4b2+tQ# zVAOdz|GInEI_afc$4Unlam*Od>i6|WSnhQHl5Qt~exo_`g=k`4{l@RQF-Mp#Ux+^G zZVV{NL)P726oEjvoCU#mV^tjl6nu;IykjO?R+JH#VA{PFA?~muDY-lKS+fbR_S{)_ z0Qep;(}NTk?*_l2dBl@kJlk1K41TSas*>@2_Onpg@`K6~?|Oe~x+EjF5yD2{DO_7X ze&IKh411S7C$i*)i7`jAbdNjP&*d)35X<6zb8;xR;UDFduK1A|l{#&8*Uya^k zEksWS?%@`lrkSp8np0a5#n*7VC-XLdIG9JA#{+#-(Xc!TLLG; zsdx-Qu{t3A{tv=NNkCA)w3C+<2AHcqyYgF))SZlv!BMnT`u7riHhu~@XI4~HWL2)F zQRJJVFM2d><6#SaZ(jl#>lv=SAUBy&z!cErB7Q8%%R?YVNv}a1^%Bbg&2B}eY^qg{ z663C!SGu~BtDjk4bhUxf+|3YNKHtu~PU7uu_4zo@q4`Mlp#=7&**F2aXvSK6HO;=C zt&EBDVe|aqC!PtO1^J*GH*6X?XMRb)5PnWfi3%owp#1$vqC%yp_*tO0B$Md8U^XDM zKU$Q*{lIneZgS3mAi=bWdZFWp8PUuHta~{;d=`_|7X|d^qb?tF@KvVy(IA4)N}b@a z_Z^Yh7+hR}V03uI#I`0P=4Z(B{~kX5)=2}i_ZBHBF6(!o^*r3u22J2n-q+_+;t;_4 zJD#(VC5eJ^@2dzmh&93Tp}f)*M4d{{uKn%z?4=MNuw)L!jd-v_6B1K5^i?`9^aq(t zjWU0U_FFu`90E?St+QjpvFK*~-xuCQVj7RU(N69d{PL}n zW%O7qEZQvOHr<6O16^-PK|%>i-mtI8hN28tnpb{wE##I%t2617vHCt8rgPtf?eh9k zfJh>x37m~Bim;P?Z9Cd?;7p|M7nkvDWr$#p3ME6gZdu=xxHNnM2(1surMK-y4#kU2 zO)i;#R@4`QL=%G3uee%TI3Zt4h5Xr?vn2vPoHS{%Kv@q%?OpYM;$B{3+H??3?)^dN z$2X2TB0(?ywD>(Th$b2ctpV=lsiG+>VfOE9w;t75^)JxAvrT^>#+1}eoS<)jE_ zA4>eXN+}SalsY_|o3l2n(ctxPwPPf+ZG59n2u#BOi_*jP zJ6e6A$6p^Q^K;)a^m5F4(zcZb3A?%_0-pPLQY?%WCVK`WY;cY zvZ1z~h10gL8ylJOu}ih1yJcH~ zo`IqjI`x)3RMDy}xcF4W3^3(7*w7np6i7TcM+(>&)`G)x8EE@@lB&=gqdrAX_8HFj z=Mo+K7C=)};Y}sWr$yZxJlQXQACy&`;1Jg19Ge-VhV0J~w|ETfJJ#vW8B z?zmx?Nsaqre-JsA4%kZCfs;j|AIc;BjMHb^XsP4(-kyq9fEvW%=cuPe0}~x4b+^gr zsuj1Mkzi>jrvuJ?AnM{hGw2tc@huh8&s3P3rd(h^PWUP6=MjwbmOXc4G7M$nd)7{o z#y|1?!kke)XbFotz+gf?S!gVW25}3Q%%TiMkyK%B`6D?EZvW_NUfNPBmTxRw@8;3h zP3J6V_2@ zoS|eAF5;>M%O@$1v%gD`R^R+U^LG@dQnT=o)*}M1G%PQNj~FRF0C#+D^WnL*W_aqq zNPqQ}FZ8*!^w;$TI{pN;E0em1&kTRX4!?f!N!ro&zS(^J3Ftm zjG*bX#~>e8rsKl_e$-Sl%ozy?VH~PD*$rG_db}ju(~7tVKJE zel(D!n^adTt_@3?h{7)0dxsQy7j}qnMT0prfpXK}Ns-{-3HVgEtsoaa2*A8|z z;v9q&6UaP8WDFTAZ{T%{?$1`lav9fxKBv`NloF~Hh*mCA(b9y6{$6W8{ zX!&%JMI`-u62i6n&F_axhRZ;zXrC7emJ)?Nu-9zZ*f|TAhNgqtY>8aCVv8Jgo+(p;q@DjD3z!(*c zW8P4FhX&jgprOzrU@a{V+nlTS*`E)&G6`H7VbdpIt(7Dz$3eMYj{BU(9hzn@manJS z-@xTdvjcG(ZM#AB+~BKlgTPWsH+Bl+TUkbTfnPm8KPv3wjh={a%DcYjdzmufxoxyF z;Llf-(3}@$%mC;8JeJ5Z=2E^_-7?nO_lX5F;`RHDg!p*bz$Y%wj86g}Fth?7;S#tR zY+T%-D|!^IDqKG#u&SX-T29<+CQVueOn=qJlFz_ViP@Cye~mo`ysL)UW(9j?Xvmh$k-NlDkzZZE;6?az_rz6`f_R` zq4|KP7Qfb#nD1-m?w<2%Sv{+1XQyz3E!nrcj?7A+vJ9;f1UBcfPW*f+MaghTsqUKx zBBWxxgI9+)R$iSkvJKhJjl7jtBF7kO_)MJ0*)9>Cap?)SU{_y3c9SM@+EREnI<Stg6{%q4V9=bLYKk-ytB45-u2Zlwgx5V2-?+>q3*XQ*Pct zzIc0hycD=RKEFPhoHds*#){U_f^;1}61A_E6_wf4sbOUy8Yg55f?Qu&t^l-^mnGp6`pZk2@6+R&;L+k4wRbz*1Y>-3`4ezp}}Qej8VoRH4moh=uJ&<^b~&ATN2S%B zl;vy~WQV}o6*Q+W1|^PRU8HvsK}&=s zY4_fDbSpE1_gRyOB;(7Lo+!gULyesLGQt$mBC%~rzAn`aZh^aUlEW0)RFg8bjf(Xc z)9}-(GherGIVhCKp(gotvRd+e=dFQiR_HP2G%Fq)%`n=^Xe!$&INI5j=vR)DY^BYf zv_9_m;%5h^_*}u1!7H7YksDd|F@iZSf`zuG1vl_1gXQO$ai5de^yY&)#p{8}EQ9Lt zYKnal&MF+m3avh0dQH*}@JMa!?o~!YV|0fYmucT>qHd363NLu&O%(Q|bWj$juCP>U zrFrI+P35E)bOf+0J3g|JA%#29DJEK1Or+o_<=o1NMC*uAU#_qok2DZcH5mGqrLk#c z>XYq%#+)FcXj65HezdOweF)q{)rT~V(TG`@ebtS!lD2#*XVZ$BG#b6akH5yF@Gx#4 zGv}+T*r%ru$)mlM(MGgU`M8@y?ezCQ9n8O6o^5*%eO{cm)e>K}vn2AOjoogwWkq|` zali0DIaKkd3Qw>qDOdrnx*+FtZ&XI012FlUp|0Gr~I!o|2;6B;+C4F^8E0^vJX|n>lufseZ!Yzy(=Y7i~ zaWk&7BqwxKHAgrDBdJm)pQZG?m!#?Gd?Bvj0vyBDxsq=4KFLih*YWIgdJ4%yd&+=u ze{Q?t{Y)rC5Huw00&RWyJ^-6#b^N4ys}jV6dta^NQHfl2ZN-4bICqs!b=GSl<8p1? zNNV>_2<(Ew@t#(VJw_Z_XTu~=qxUT|guqYr(0q`GK4#g^J_+%=g3?P}-DrMN`uYVz z;d$Q2JT56I$zfF^h{JZf+5;OqEzb#~yq$+NnAvokI@<$UF?kZ! zaGKICQ|mrXiiDh`FNx9zeZp06O7wD#1Z%cs^XehZJutQRmc7oRWdU(*`>8 zs@9iWX^t4KhHpq&0*m&e;-0i1b2F=1PapXZH0x<%GG6fG-S)*y%aR^w-u766ouGtJJbB>ZW4gKoAFD;xjgm{SCWL*ZpjjA+sc*b>?oovLRhRyc$b{K_T@nzzAdc=@fT zKC%hw_?aQA;^xi;J*w;2=ZO5*pzUOVeWRX4-;_jRM|oZllT%sQU^Mbd^mxAMs>MWj zdC?&p;OmL>qZ8DV1{3f9HJy*a50EprV!^OB!>)fD0&a9tGIiRO1Cdb0r5ZN=bKk^Y zOLImU(m}{07ZKhhE*|~QG@-Qi_ktg1QM~YY%d7oQJ6gc0*433czlKl!Q@@^x;PPlu zK-C26`sVpLTQ|)&9{%0mv*Q4v4Ftt-3RsX)Cw^!&5kL3A5I_J&THyE*sg13}{!-rI za%kK!sP@c3aWxgPayxjgOIqCBB7^vHKXpMM+lGZCl}YMJ5(hWJi(4O{F);}I3-SYT zj8>u^!1E{BR%M3dpUc!d%pEGW{FEv%K=ICfZsCLWXKpz)zrDcH;LsR&Wl7Y#I=i2Y z<1F04Z$5RlxYFIBy3}K*Fe+O8z)7tkx2VUO(hV@n{K>N!Eab3ea70cdFPnOfm$4FKP!bm zfai2&Sj6~tX>fRYckh|8ZDavH-t0J@R6`ln%P5x=US&AmMHuuSZoKvud3N|hB|%Wq z;b{W@JyY-L6)KK!XAHf!tkYy?wv3Br)jny+gY_PP%D(mVS_QQ`Upm@xO%A-H$ zp1y`yqIo8Y(xeLSs-1=zn9Azh^7n!3KWqc>4#!!eH&v2 znbL(p30#UA1WgQ4Q`rkrK^sUl2$JtvqKV?GpMOIfKf>z{I%)?!7mo9y%GbBX#vPCk z<6X<6lLutYXfeM^J{R+fRC+jvWL(v$*?a34}25%&CUbeL&lr)C}B5$hXwv1 z)Qn-BMi#Yr@}^H5(?8G;0WRC?uzjhaxuxG6`t%>TAox-2Ym1Nf>E%4;{63R1-zhG_ zMzPoR;O%(wLx;!f2_4Sh9oI z>+;Y5dn(+h_jsSd`?pi{?=d%WL*wEaj%i-kcpLNEnfYfDw4JOIFN~kEyqSyKCI8#t z_oh#hJenG;XkwHYTi1B^zb$WZ-g^w{D3pund(sd(OZ5A!@+h~4eGPKjl47nID)wrS zvn6Ly`ErK^Ul`dI8-cpM(n{TtpP)Ich_=<%0Y zF2|EYwHx3pxgLCKr@W)^u7d6NeiKcJ0=9E=%Yau@HSr?69n8|NbxGGhT6-;xO1O~Y zyLNY0q-X3#nBeJVLiWH5${gc&IaJ<+j&2{RqS`x_Cx_tx?iV}HU8**Y+J$-gCPOB9 z0Ot09IL&>jv{t*g>g2uIh9k-*hsP`==u)I>Ka`FBt{bqOgZXt^iq!hfBfwhZRIuuD z3Tw7_v%--tbohv!ONwc@g{kP~gk5HCMGW-CfNX_CRXD{6l3BA<>RG42^jP!}$Ycws`|$hSS7Yl~PWI{b zb5u$64gmO1mw=BH55byU8iDf775qo-4XvdW;x%@Tpc?AL6pOOZ zgD0B*fD`6bIS3H>5^k7{|Mk>pV}J$ylEh!xui3ieX#A!bFjbI{>o)N> zrQ^C^t1J0a1JN|P^u9ohV@YfRUCQG-0?z*9e*obS)6JNyhdwTGT1@&3)v#~ZIcnm# z)D5$;HN(+hH;gx!R?#=!WKDX5BhBI%sOi@oJFo*G9 zls(`S*n+KW8!SjMF#xg^EB-+2AM}LYnW$_xT0YpqL|%)o`j;2d8`&%j<=1C-?eX9G z@DKe300xE*%Ck>lksboGkBBuuKO+PhYqr4%G0xQ7$3X5fBnc{CSP83ku)N$c{;Qz$T$-xcwbS1drq4wl>JkI}cPkSVWZbxA_ws1og z`9JI5OlPEjs}&GfzW&~8m*xej!}{tFr*-R}1_Vs6At}_x)>#JH%yPp2Y*;hfTf8^9 zeTtH^W=T8$NUbU1qd-YbDV{yk49@L;2FO(ETk96e8LG&P9Pu5#Yy-^_0%vijij!S2 zJmb#g)qq5!O})^Wf_u-qdLO{;JQ~GK1CrMKNyu{U3Hano`Bu{_8NdQ*gyS@h!{=A; zaDcdf2M-lN?t7I7i9ijdO(5RAsg6CcSm5hZ*UmEbM9PpP)#i-x3a1YEJ{_W@f z4P&*MW>w()pUTEQQ@)a}=hHm9O+xRvWMVHNlojl=?SaV|-O{@He4h0B2_I05nCkbQ zRj?=-RxAkV;8w)`LVp(P5UO~SU<`#a_Ux2i4XoQ8e5CWP+&v+QlTzw~&e>mQ)QzAn zbZo;Bzq(+g4o*c&LqWzR*)SR`>@zcolK@6FvW0?Xl9o0vPki6>I|L6TcxEt?L19pO znUns^Peeri_|K2{6rNHJy#E-P?svZB*|bRqA9`7`X?LUPIkNN7IsQak(@%*(iZ;L@ z?hn~W$IlJ@+^L{zmh6YdKWQjAZ%Yg)j{CRYAdZO@I@qG-6B1dTsWbgv{c<9{ol&`A zitO6rN*B4AWY6t@FSs4|uCvkv`m3Bz6k_zXjWYhoSmbb}sEg+5A7$mlo`lm1^qoe& zXlFwW^;eHF>WRW-hIKsGj;AqscE%u?^6Nr=I`9e!Nc$Td)%UkXxbOSx8|eg{hx8wy z!k=vwRnA&`e^a8;J+5|?(EAs7Xy(+-m`RR z`H~r{^K3D?(VvCxw=SWr1>y42^;dalg+Q! zGwW|{ZI8K+T#*D~l<2fcqP;}y>wPKI*v|{|P>EmYpK})_3siYY_x`n?qgMlMzxN7h z!%PdZ&4|3&GwLQArCRk}eZGzQoZtghsbkw}yyj!F#y!->uXKxgpEygJ?j0a}?h9WF z9PJ>=6(S;vm4!a}%mX?i?G$b_uf!^Hu}QQiO}pMLU37hv#1=RHPu@^nGw23?s)uhA zuR5G_LEiR*x;LV(@5=K7QP3B^&(bYD(QpKIg)&}I>_4-xP^AFDT984=0bq) z8sW|fT=#f7SF?6wRCG}?UIFxE9lXX{6 z(A*p8>cfcpocqZhj?X58W5+Qf8i)x*Q3;kLV!th3$uc~N*jpM{bEw}`Y~!C_k&nFd zR=q|ici;n1tW~hB-ajm=c>LarH!h6?TR54JJWw)E&MYK#jAGw>I@byGMD~GX~t8noS%-nE{WruUL*v^R-51aBGiI`{k!p;qrSvCnq%= z`e`^QGR%lZ{1YKI!w5x1CYf4$)J#wd4m;nt-gJP3xil;h8cagQJW&M%LE0imIhV3awOWWV znfZDv4r;yf_EyYoVurOUoP>U6lKUc#CzY}30`aa+>RWs#x{&Te>= zePkU~^4@Ro%G!JjyGL002wEnyc*OV{UZ0z7dF54w?CbsBMG1Z`4B^@%o*P8GsivMy zf_c)00|G!~7hc4=vkoI}OS6j!%IGXv%!|)!8x(ew6?LPPe^gY&jnw*Hteqtf)t2yecF4dL?Hs3GyH=li*&ttmNd-# z`e(Dfypn1^J+#!t$mQ*J(1?_NM{ajwnUTSrtVZB)w=s}b_m3`tfXbKx*21`?nw=hr z%Xj(_6_6wxj0zO{xp~)g;prtR%_DUnJ?X=T3+wxg^=*_Sv09coN0Vua1?H9>1eRCB zr5p|t@G`AV!HD#eBze$6f@vlVOM|`+?)w|Q9Js(a%f&(OJYY?|ao9_%|^w?V7Nt|B30$*{!+Qu#r% z*}Puk?(=D;0&FJU7t}70EVouKo$$t*I|1Wevi}3+eU5w}%4rF4O{VCML#wMG)s#l! zWTmSv)*XrJ9Iip7`gF4mfd4OdJG$Ge%yrZuox;FNRzOaxI_>qy5oeobV+L=xNoK<6 zfu4O%3d+{w0qa;?{nH4!yrJEEqHN?+GDJt(S>21PNPF>Sq)$Ii?j*c|(>@b9#HQN) z!hfK464~?YGpTlHtV%O9vd3`uJh|gs4O3#@GO@Mb>L6^NeE0DYu)|5|2Qb9(hNhxC zUaGG;vL@42&9EX+3)STM+ohVZrwy5kW6#3MS4&2EP_)p1qznL|6qb`#olbIUwhH~) zH1dQpklF`b-gf(&x(cg`dn^R%R@)*oPP3^#Twp!nLG1l-wSla0$G(h&QJ-08ba;_Z zpV!o5-sr)$McMS7NVsgaao2ux)f4FpjD)rW#IqrUDD>IP+05H-^cfg#3wF=NHD$@J zv*_!PA1XYsAVJCfP^4E~z_PuPTf$1gQ{BzOvTCwt-BPN_nIm09>|_>Z!8V>2J|3P2 zwb#tDuHCRO75yD=J7YwUQt&a7!+TZTc5b1p4=>YpHPVydM@}77Y*MF1Q@5lGg-_gS z>{v1H#6o~lyTz&F8Kd+b&wTZ}s)~0_k~=NuNq*<*|EZc$uSRv9nj}w!@CXosN<`aY zoy6e~67@>C*7)`yxMS@ltw|4)LZAZmx?mp7l@e(b8gfBQf8#qaIM>U}&e zEHS79`oG)42zd>Q-k2o*|1?esGu?A|KpS@|=Ksy;>>Ds*_sFP4|_z9Irlm%f!r+-)_vn4pFjLg z29;q>@&I#F>PT0sg6kQ)=#^G$fGpP{cD_57!~wUHmo-0CBV}WbX!Dskf9%wZ-OZPa zD5fR^oRa|A2+*djWaNwg+7zD@281b)ARquAox&}&A5E`XJwDk@ZGrGgHj~1PyGEww zA*$|6;{CZi>v2h!MRxwn$aA?P^G4mqTlAJl6@zE-9X9t8z{1hmWe|X1-NKWTi`Yy15Z*&E-5AG~T}G^O-Bv$~if>$XN8(`M7f01LA4 z|Fw19@lgMNTp}XbBXkrZyRu3;5<*7Ec6MYd`;3lKvijQDTXyz1XNIqpmC@O<&pF~; z_U~i#?VIn-lRy6WGSlZT{N9+ar+c&3MLwvPGbGT@-Lua_ zmG@{JgYpTu^kzJ5x+d|AzLAqz5n6a#(3lP_F>inFo#+Pso(%?NyhIfrd=`{c3ZgkV zG<8e=>p|W=8__Lb{g!CWZA8|GejOPvOOpHKMB`_*R;LVpDJ}no*7xO_^{~fEga8hijeu8x-==tNVAq;^x zw;vuFF)UYAuBzy(tItNkzv-C1ahU{2B){Kly-4=$s5??0W2iKsNR21TV&7G?_7B!{ zH>h5fv}ZhUY`m#A$AWE$@9tNO8uy!D$^3?tkyQ$=yAdrdEK*8JM#y6EKZ!qJ6bdYKtt0)Kj_)R$MoGAw&s>_5a*n?hhWT3 z*jcd9kipJ9fDgSx1u?!t{^lZ!yy)#0-7ECA+t~m%66Ce9Mvw4rk}DMD$v;S?6A=vPd{mTqz6fHa#WwGKB(_*_!fZq4ezGNg(F!HM zZVFH#Il5GLYB9IfqNu>HU#dwiumHK$HSwx0m(;r()xIsteL!$+G7ex>4R4SVHUOc5 z$@(1a5T+%NWc3LM9sNoYLWq3UgwBgA171q7|D_)(IY_6s_A?x3P+=8kXTGC3)Ye|T zTarD1)***Ukq%o8kOp14~NzCii;0RV4B zedKg?AHQ=QF+YNf^&?^tjS~%x<0-7%)hJxD>R5pv5Y4Tsg??&Jha^OLc!0M8;vgH< z_?olO*%5wGAi?eTtSvhjFP-0RB!xuodk>8n-Y6+~v1qLm`WOD_AsSZyIRKo6?f5L< z@1|u%S%34h`_L!BFTgRIF@$-6n9zaH!)?n{r~q%apare#HAwH9|Ez#CxoZXGF;+j<7~6AUu8w%yPIfn zoRD|fV=NU$9HalDt+`O#_EH_|dqtRRQ>A2OVn^{~u4DV~jx{-@jpU{Cbar?Ts=({u zU32Z)oJu-pj&8-+RA&kQ#9ShM0w+wdK(I$4{LGoNp;R1 zMw4v3TOBXz#BUGEuPDGA=y)x5`tQ8Ccv*hEO*xr%gL}fOVl*OAAJzD>uXY_`XIHZY ze}3}j12QtNQhqo-nmk#?C+eK7rwxBltoUr?T8z!Zhdj8Qho(?Lm$|H zBz|^m;Osro1(C(dhUyTVzJN8+vFd33U8Ka*vApp$&?$aHpHvVN>a* z;U|tlwduy3TP0`=#1!X|;c^hUoSXPBYPZ7R_34xpUGnq^U&ozqJhWxE#*nxTWI9pG zca(^DHRN`Sy21lZt0gm?2R3PWtrLhq+BV_zwcAhT2335nc^R-teoc!j)AOn|lPXN4 z*~3j7JdKqbOdJ4#o%YC{QRLmc?$eiwhnASYys8|3i!bp=Y@#{c>DYqJ7$$GcXlFbT z%%fILFj_KGI|ASi%EC-VYP3hV!Pph9y~cz|ZgbAgJGV8rUo&0Hzw#H!)d9U+sQrLn zdN?xBpdM*ey>b?#xZb&8$q#dCn?;CBhRw%0W6=wD6m>2M z2dT+RjPr01jxK#utN&|L4F1DnN9WmIP2J$zcLUU;%Q|ZxG&8@kS$BBYb32zHcG)_;mt#Nk9a%NiopTzVCf=-XA2sJC}}%%JUx^lcFb4H*Gz#l~IRomEZd zF&AASjOX%)Vmngzt_yH@eaRC_WjE07^RdKi-CK>UuNY;E$Cy4?Jc?^b*n2#m=YbeF z5+1rx5%7>>%dNOfqv-r5ndLjWV{eIrah`>gCjWPPkwjZ^BtfMN-x5DCX~rc|_j$aeE0%f4{79h++PHUjeq zOkd2wQ}&pz1Apu+?tm3xsAuS;QgT7rZ?VWJR|z&2un$9qH&v+m&v+q zyd~mTc~CcWM=>kvob}Pw@)Z$D9!WHxmI!oU@D&|9;p~fd8U|fwu~MQldOPYE2N!a) zT=&^$h-maE;IJ4$Fi5#8VdS^BA&-_#=xuTgm@5zD?7r#sCmJY4xHcVl>^*}O@!v7n z#7sn#8yKjz``_g0CgRtw(b9HbT9;ll!MUe6+W~oYXU4&P@LajdL}Kkev_Qfl?M@$k z)LvS*NSPAhvbEA`nN5k>t^%|hXIx$_r`_vN8z_G)0~B0QFFou_rdqqC%ml1bsP!aN zejWk|B`yuzbNb=g3;-&}3|y`zC>dp7oxw$Y=Fzn`B(|OiLKB(xKSDjDISGrqO4)~#+ zWG&R5E{}cG6#!BNDaTnC)N&(;z)ahDA~}@TswJI(X^(W4j-TtR;8Y0@no;NJU0 zYW(Yy2~!0(YQ$Fn2;)KT$hgDy&m5`fpuK1Xqtd15oLUV!0KLVwx|$YfdeP8*JaLyM z$1iNbOh=m8*%y8{zanp>A;Z@g%WlhV7+K~HSN@^9($g`);KF(#_y)}h!v**K@$ecW}#+j0kf6oc?(sI|wHV>{}4%jNW}HD~6H>50SYyIx8j z))UqHIlHF5_g|alhuuez%KnBnXjEP2Jq|+vi&t+%NH>aZ7+kk;od3a+#{y-cI)oOT z_a$}X9s54fN6J9Rdq?JXiq4Q+|8}H8Y4ldaIqh>U!S(fosrcX_$4R%d{4X)66tcst zjFknycJ|hF7CB!v)*dJjXkvn)2%@-;daqwe1`z&6DD0i->p6-m-_ygCB7dA~3^%ny zUZTS1ph`y29~i;siC=6L|9tZoqtn%7=%cFcQfjI4qvp)}`r9KpbAOqVX28d;Ib?+i zj47}_;^B%u44_-}ZhW#8T52vJ%=o7(^_*3Z%59DoF55L@d0Y0Nk-t*;X6AdO@bG52CUp$*PJFIm`{o+z+v9GeGkVmKt-zROwi6I2^Cl= zDu|&pwJy_D8|79#mE4>m(4~LqOK8oLU)cR;SPaC*G`g%IexF513C{{@#AUP?02^6UGvRS5vTVqel9 zLOJvEzv%uE^&j4z9x%8(ba{D;pz)84;^b>(U~VZcxNHfM@mUTZ$ee#xaMM?mvnf5Lp3~s zipDFTW>P+$<7MDI9~uhKhVLuh5@vC6u7h&s&aoAOM{4#4#Nn~_kee@X-##q86^=Bj zB)Zf$F1i_#hOqDCE7T)XgxZT4iQfy;dfI+GWGz{HoKKF|U&#?o-N0`=CxTwQ#!`oC zDb^NCVi@Qwa)(YdIheE$r@5Q@z7uwdry zmG+qb@CIR?qz@?9mFzZ%x4ieyr7Lye_+v)yFxo`qP>i@=^Jy&^aR9y{5V$nE=vKZr zDF~u!xnZ)P&2{2OCz#H^;fEP#u>am)Nb1%6=!?O2_POJQUL$(m{qZIFNbKe7#DhHx z#!BOT!0&uRO#vkITJN|k5(#=%5AYqCIYo+lS5?-d4@{-bpAz+L*7uvl zJN%3*O|`?Pss?!YRTK^lpP>F{PO%c;!KjGSrPGd>6gb3&HU7YoQb^V_91>pO0MM8@ij5T*B4QjWRUu17}!5p zBz)P>hI`t5s6bErjL>V@*|A$C_Tb*Q1bVR{G5OB>65I}Cx;!2_BT(x*xrLEK-GNx- z&XO=UE{s!|H^#bdt)r1`_%T2dVMoL7sr2#4+5zm&6mL`A@St6-{9Zmkm02?9hREm2 zL(Xl9;oatWZQ+mE`xIZu;$S1 zJaL68?v(w$5DJ*t^Wo-X-D~OBPOU@{2UULHN8^W^=Qn*eIc0#2DT$lj0#rF24e6j$ z>+;VJ$IKH~Tx&k<5Tvh6g4k>jDId>A{wc5&l17(Ls2+;Hc<}xXFpmGth>KuX3}9%G zc4Yq(=?9>#6c4d!5$t#6DmnNx|0(DlYb{re~s{|I!!Jm>g_sbwn9rz6?>j zfLFHF=z;dam<@Q&U@hV*>O3ssZj}U2#OQ#jRqans zSHJrS%w*@vP_^iaPP9ZQx~%`~gaULz*B6JCWtIr9>&CdCjGO+JxcBTUUEMYGVEnQ9 zp;$Pokp}ydg#jLGEc*>G!ofGT88sm^Z<9NhuU#b&>N^>VaJOIS`1b5f2XcHJ2@#h_ zM3uP`HZU?O-7%=wV`TK&&TZb|1FeTo)p=^we7_%XWMW8wKv93)CCOT9;kizyYZX)< zD|6q7;|y{~fxFo&coQ;eIuslxSH@nnhJVY`>1_Dje;NBj$@?Lo3h*T8iR+qMI_-zj za-5387W^gCjBT3qj50&*jKYZi6e7tLLeDNnbT?c)@!zvsM+QDZlJ!E`Fj+8Qys4P2 zb58lhNdn*cv8&7kX>??N>f9NEc2)`<)Hn9??jD|(LjD7K6NE6dh`hVMLOIvRrjnFjw5`Od^)e4ShI^ePI~PzSyM22hvY ze_fqsiL5;dKK_&%vmJN9i6K5wFbV+Y+tkydddknSs-A;Y18A2=)6pr#Ur)JYJeZ^U z4H%e?{nskVo!^=jh|O|JpN=ya;q07=D%#|c_^da&^*wD4S$NR*sH;LWbYZ+LXX|fN zw}`zD_REz)9fZ}f(vY~0O>-x>)Ua?B8v8D~64 zXhA>7?s;RvZHXGLx?ANu-CrJ2xlr|GX&^BCGw;{50WG8Rz{7uk3+4z|S`SJb@%(cA z@emTsg!lpBKK0U$K9S)*e_ZT@n_z{rkanU$wm0qqCQI$I19zZg10f^eYm{Q1cb4e<~JCjrak{D>fi1nl@5D4O%q?)Y#T7NDy;G4)iO9lmTlVJIF7EM{kNg&8e{ZV6gBT|-uPp`2M za7*N{*T`uJk6N@>-32s)MJ~dN^;5MZcw}cOLt8%#K$zQ2VKvQ8V8=~df>gZc8rMl5 z#oP#LjlMH$m|W{bX;sR&QS+%3mq=Z5mSB)(!2)Vn!fI#i5i01jJ!EQfw6^{eNl<8T z`jfc0LUL=`Yo~84%=?GkW%w^V3nTH$463WwyJesUZ=?#@|w%K#m zISb<_t?|SZ@XtSV0q#!{iZ5Os90!yNy1s7Id@D08S!`YH+*J4*NqnJD5>O&r72)`p z1uxb|P?m8Vm2gL$WZlS)$5na3r;#=PzL(^BEyRPz%yAYWHG)A;(v^v4fa$J)52ZHY zdM%GcY^tJPXCQED(KVFXdWRiQbRUCy_K?zKtJMAOQ4fuiUZy6jCXi ze_%QSqMEOHi4hS+)p6ub{2@lIGnGuBgmkG-%00p*=5;DPZ$KYNq9BqLtas6NQZbHc z0uf(ZzHV+OSYr0*EPTvq{#JwCHW}cIWV7B;5&IY=_KrAdDBRfAD%O zj>~jC71zv zEkt{jF`fg)dUE+@oR3AeojsX){XG3oE45HwhCx@Lv*#oy8Qz~z1}!dZO3~uEjrJ10 z1d&S?$9K2FbXcd)6T?BqE0mCnO_(Feo~7-Pcy)rE6uh-^DJ%AYbpzJ&*&!h&0g}4s zA<5X;yS3R%{!;esV{Gk~81!Y8L0Ka{SWN|PuK3MLo4lQalTn=E%rC%+pe*O#u~M-* z>F%Peg1h*oxG8W8&`Ey^drVKPH-W4AJeJqkeYExOUrjud09zCp5XWN9WS(X^%Q_zq zxZ5S!seZ`p?>XBOP4?F?0)W6(JAQKhr5+ljzxDg*6Re-mbLf%{PgY%v{qNn5KV8TN z3MS=bP2a=)H;L76{9yp_VEqIpqQ*j@%6Eca8J-F&{B`S<7;JfHS13VCevf8P{WX?A zpOslAWoUy0e9H2%3fADS0MmsrE03aS{r@_oZvj~Tny5bv`g8|{KI!^m8>d9^6ID3+ zMi?pK?at%F^7hZP_ySDQJl$mU#VhN}U^#86uK;^k%$BYnYh|-&%cv)xaQIkqzifzM zVmsIpy!l6YsG0Ji$pkVd-{r2*_RsYaf_f&gm8IKS0^7iXP(#T7UBC@7GX*bJ%4s9~ z(u2=ia&0B6bG8bQ&$5)VoKRYwxEtVgU5UJ+LP%#tmzcaE$E@dXIJj2k3??y^KN6Vh z?ncy^;@$kWV}YriuhdDiZGCLx{JE=22KoNwwFE||rJ0|zDZ74~rU(CiP^v%xJSK6k z4f%y7$*CoTFEbp{JpJCeBK?rn%TJjJIH&6e$$P(AvByhkQyc?Xs}g*{L;oG^nm7vQF4}@Xv%J$ioj&A1a>2s~AI)2~;-USxXU$c@s)F z(EP!Yhot%lFSGsnI;GbZ9T|DbPf;+umz;dM>x^hjP>B*w{!#KDYCa^D>IEAhh_bb9 zZvXeK9!7dJ8o)>&KgCl^Cn<84=2Ll;r50I@mHHzDjN= z?g1>NO}QHJpGXx;5CVek7ub6ru+$aAxSFLih7v~hSZO;omyl7n1i#DopSZnhxZ<(B zx>onxpp|o||91d1^SGYOJ8@?q<+~3y7_+y)ZyoON`J8b+XpqS+llOqn-fP5+ z?U^>JYB9}r8Xk!bue-B5{6e5}_j@@X01gP&>~1s7;Obu`CV*W|Y*(fJ_akJetRHQA zEw`VfBpq z*+(@^BzjEEJesKjO|YL2R$^>;>&%wyCzvDi7uHYg6V^k29lxSc9$Z8_fukA{Up}WI zS9Bv0dy&Os{^;r8{%4$W&A-{KbHn+-Wg?zhB@SCMX~A zrWWP87hhX&p-FJfw_e>FsWelr5`A4DT7Rw2T=$7N)?j>Fr_JgOzwmsPZE*y@6VIZn zR=l=(=xBSv8;P;3@+W)xl%trOz}&iyCn)&XTXV+)Zn)yJgi?J%1Kn%ymo1`|rgOqP ztVV3WHy=NX{GMH1HDpqu9_i?4p*zj~vKPwspFz;f>}|%&GO%I5!|Y!g~p> zW#BdX?paltT0F=a7xgf-%q4D6x>c#w+YupyDveiMS*(rf#Fkvp@QGC4p^#a?bJj1$ z)n|WSj>@*tZH*jod==;%>DNvzIttNm8#~Ye*$r&)2~CTrZP6bXbn0bvUJQzA)7??% zK;6{gjjoAe#zLN>xY#14&0P$$Q$p-F#}z~2JdkQ>+QIy~j~~MLYYh$LBc)xI4a&1T zOVDQDL$bw{tGybkak=vuSclp7q2nysae68{t^#n}%XL>&PG+Dx99Qu|0aacJ7M(UN zLS&#SeM*yhBDG|?!a7>i_uEAk@7&{#8_|c$qq@Ueo%1V$oGGJ{RW}{ literal 0 HcmV?d00001 diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/attack_discovery/images/attack_discovery_icon.png b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/attack_discovery/images/attack_discovery_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..912b0cae6473301a3c5cab7c6cfcc5083a694522 GIT binary patch literal 4124 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 a#s2_1ALY_3taxAm0000 import('./attack_discovery_card')), +}; diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/attack_discovery/translations.ts b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/attack_discovery/translations.ts new file mode 100644 index 0000000000000..9cf52c3085f34 --- /dev/null +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/attack_discovery/translations.ts @@ -0,0 +1,44 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { i18n } from '@kbn/i18n'; + +export const ATTACK_DISCOVERY_CARD_TITLE = i18n.translate( + 'xpack.securitySolution.onboarding.attackDiscoveryCard.title', + { + defaultMessage: 'Start using Attack Discovery', + } +); + +export const ATTACK_DISCOVERY_CARD_DESCRIPTION = i18n.translate( + 'xpack.securitySolution.onboarding.attackDiscoveryCard.description', + { + defaultMessage: + 'Visualize, sort, filter, and investigate alerts from across your infrastructure. Examine individual alerts of interest, and discover general patterns in alert volume and severity.', + } +); + +export const ATTACK_DISCOVERY_CARD_CALLOUT_INTEGRATIONS_TEXT = i18n.translate( + 'xpack.securitySolution.onboarding.attackDiscoveryCard.calloutIntegrationsText', + { + defaultMessage: 'To view alerts add integrations first.', + } +); + +export const ATTACK_DISCOVERY_CARD_CALLOUT_INTEGRATIONS_BUTTON = i18n.translate( + 'xpack.securitySolution.onboarding.attackDiscoveryCard.calloutIntegrationsButton', + { + defaultMessage: 'Add integrations step', + } +); + +export const ATTACK_DISCOVERY_CARD_START_ATTACK_DISCOVERY_BUTTON = i18n.translate( + 'xpack.securitySolution.onboarding.attackDiscoveryCard.startAttackDiscoveryButton', + { + defaultMessage: 'Start using Attack Discovery', + } +); diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/card_content_image_panel.styles.ts b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/card_content_image_panel.styles.ts index 16e3c3820b310..2260b95ab9442 100644 --- a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/card_content_image_panel.styles.ts +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/card_content_image_panel.styles.ts @@ -13,7 +13,7 @@ export const useCardContentImagePanelStyles = () => { const shadowStyles = useEuiShadow('m'); return css` .cardSpacer { - width: 10%; + width: 8%; } .cardImage { width: 50%; diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/dashboards/dashboards_card.tsx b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/dashboards/dashboards_card.tsx index 6e46380a8e300..a86158315f189 100644 --- a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/dashboards/dashboards_card.tsx +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/dashboards/dashboards_card.tsx @@ -68,9 +68,7 @@ export const DashboardsCard: OnboardingCardComponent = ({ { - setComplete(true); - }} + onClick={() => setComplete(true)} linkId="goToDashboardsButton" cardId={OnboardingCardId.dashboards} deepLinkId={SecurityPageName.dashboards} diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/dashboards/images/dashboards_icon.png b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/dashboards/images/dashboards_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ddc024696e224627f21a3431eb310a5df26088e5 GIT binary patch literal 1397 zcmV-*1&aEKP)@~0drDELIAGL9O(c600d`2O+f$vv5yP z(=ZgrpB$Gmta5~K0?G~ICBs)rfp*wX76gV3JDwbK(cN5~Pf z$`qPdJlX9`Y)i4-CYF?WznL~oq$Y~~vSd9;?*R}5L1=?zWw^ibyv{j)48ZI7v<5^r z9D2Z54>;f7{qeCgEvr(1#>Vqnh4as+6;GU>{t|P%ot^i6S)x>c2alev1Y__qxeCNA z7&sNz`}y@mSc}`T^yrQfx@XU00x-^3 zWYv!Y#j9UCA6r0Va@s&!_cxkVY|F3HIpTMfu`UQJe?|7DqrX?$Konwh{7=%!98(4SvF^~Sh-CN3EuE(Bw&E0!Wfol4WQ-XL5h zbD+UETvM5=i3H*8JnJ%GUw-Yp?*c&(1VIo4ks$Ln6#RoaW)t=yeB?DKhhAi~3iiRf z(}9a%c=^==_mF zsWzL=mZ*YS*iu9{lHOg+r`^@qSN`M}p!fnOZ77|QqQa(jG1iqo-^Q$YU$*o9OoPi$ zJL5D%0%(Q=&8^r;TT?7Rej6HYpBR~P zK%*P&Cb+p!gYOxxG9|nc;A*tc4fw;ZL1_mxLgBkO;(j?DmlhT`Geng)!2P@JC import('./dashboards_card' /* webpackChunkName: "onboarding_dashboards_card" */) ), diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/dashboards/translations.ts b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/dashboards/translations.ts index 33d7a2a9be98b..cf1a280122d79 100644 --- a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/dashboards/translations.ts +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/dashboards/translations.ts @@ -30,7 +30,7 @@ export const DASHBOARDS_CARD_CALLOUT_INTEGRATIONS_TEXT = i18n.translate( export const DASHBOARDS_CARD_CALLOUT_INTEGRATIONS_BUTTON = i18n.translate( 'xpack.securitySolution.onboarding.dashboardsCard.calloutIntegrationsButton', { - defaultMessage: 'Add integrations', + defaultMessage: 'Add integrations step', } ); export const DASHBOARDS_CARD_GO_TO_DASHBOARDS_BUTTON = i18n.translate( diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/rules/images/rules.png b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/rules/images/rules.png new file mode 100644 index 0000000000000000000000000000000000000000..0d6b551e096613c60ac1cee0aedd73c966f3493a GIT binary patch literal 49520 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 literal 0 HcmV?d00001 diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/rules/images/rules_icon.png b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/rules/images/rules_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..b2b4848e0be1d7442fb00b012629861feec095cf GIT binary patch literal 1251 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGooCO|{#S9EO-XP4l)OOlRpde#$ zkh>GZx^prwfgF}}M_)$E)e-c@N+zL+@$B+ufw{znCq8vqzo#)w-S+mJ{f%OH^ z4(<$~ke$5vK{HX@K3 zuds_=_^he=`P&X13%_5lvov&9;ClI(!z~7aOi!+v8*47*W6awW_+8Wg-QC9R+b8`G zsa8DlPKCpzqaOTzH zfz@{{UpR#^e15{sm?|M?%>LA$$&>NSEdB>m6&1gzC#K(>KUq$N)uZuNXGGbpUn}p4 zI_b@F&i||&oE7K(v--%C&E@~p{P>HQe)#VXYJCt`_}A&g&&yR?YohEkzOJ7qQ@h({ zbvU=I;{6%bP4TNYsr9lZO%PVl-4k#;9Ov{ zQN%_mtMF5ma#P%*Z_Llbk{CN23-|+y9m7+#w(@VBxOT!$V+WqD*#!@*YKy)+6-xT_ z{oe#RVflH1qfjB{*sQ&DVx_|3)i-%-8IqeM zFIfe!t}l*{I4QonUh{m3t>UBqzPFw=uyHsU@qS$$*>Hp@?b)I#E4OWY7Pjlce69<- z9XXTujA_vXy(2!?gYEa;Hi-Fm&uqPEF+<{s@I%jDUd?^>|LgDh3qJpyc7L1NpC{jE za)i4q-d!hNGAr`i?W+ z5g0&;j0n{E$Eb6kwB?zFYD>2FK61OBl`6q)L zJ^e3aQ{q|gr{6j8ue@g4l?%8%}rcAO}inZM(Q}a&?ZuIq+ob9#I*!EaC zwpf|J@9vKozBe?@KM6$i@&jEvaox^|?8k~~mSpEWY1}9y|8kaeWkAkx_g&B2n)7Iojc`SCjMhJ!QCGXvf9opt9EH#xT1 zA3t6Wn11KP;RItl{?Z2RyeEkpMdz!x&fv~_61YKde)`l8TXs)$SAF@z<#tesl import('./rules_card')), +}; diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/rules/rules_card.tsx b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/rules/rules_card.tsx new file mode 100644 index 0000000000000..8f0f40edad1e7 --- /dev/null +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/rules/rules_card.tsx @@ -0,0 +1,81 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { useCallback, useMemo } from 'react'; +import { EuiFlexGroup, EuiFlexItem, EuiIcon, EuiLink, EuiSpacer, EuiText } from '@elastic/eui'; +import { SecurityPageName } from '@kbn/security-solution-navigation'; +import { SecuritySolutionLinkButton } from '../../../../../common/components/links'; +import { OnboardingCardId } from '../../../../constants'; +import type { OnboardingCardComponent } from '../../../../types'; +import { OnboardingCardContentImagePanel } from '../common/card_content_image_panel'; +import { CardCallOut } from '../common/card_callout'; +import rulesImageSrc from './images/rules.png'; +import * as i18n from './translations'; + +export const RulesCard: OnboardingCardComponent = ({ + isCardComplete, + setExpandedCardId, + setComplete, +}) => { + const isIntegrationsCardComplete = useMemo( + () => isCardComplete(OnboardingCardId.integrations), + [isCardComplete] + ); + + const expandIntegrationsCard = useCallback(() => { + setExpandedCardId(OnboardingCardId.integrations, { scroll: true }); + }, [setExpandedCardId]); + + return ( + + + + + {i18n.RULES_CARD_DESCRIPTION} + + {!isIntegrationsCardComplete && ( + <> + + + + {i18n.RULES_CARD_CALLOUT_INTEGRATIONS_BUTTON} + + + + + + } + /> + + )} + + + + {i18n.RULES_CARD_ADD_RULES_BUTTON} + + + + + ); +}; + +// eslint-disable-next-line import/no-default-export +export default RulesCard; diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/rules/translations.ts b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/rules/translations.ts new file mode 100644 index 0000000000000..81e0919cd7184 --- /dev/null +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/rules/translations.ts @@ -0,0 +1,44 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { i18n } from '@kbn/i18n'; + +export const RULES_CARD_TITLE = i18n.translate( + 'xpack.securitySolution.onboarding.rulesCard.title', + { + defaultMessage: 'Enable rules', + } +); + +export const RULES_CARD_DESCRIPTION = i18n.translate( + 'xpack.securitySolution.onboarding.rulesCard.description', + { + defaultMessage: + 'Elastic Security comes with prebuilt detection rules that run in the background and create alerts when their conditions are met.', + } +); + +export const RULES_CARD_CALLOUT_INTEGRATIONS_TEXT = i18n.translate( + 'xpack.securitySolution.onboarding.rulesCard.calloutIntegrationsText', + { + defaultMessage: 'To add Elastic rules add integrations first.', + } +); + +export const RULES_CARD_CALLOUT_INTEGRATIONS_BUTTON = i18n.translate( + 'xpack.securitySolution.onboarding.rulesCard.calloutIntegrationsButton', + { + defaultMessage: 'Add integrations step', + } +); + +export const RULES_CARD_ADD_RULES_BUTTON = i18n.translate( + 'xpack.securitySolution.onboarding.rulesCard.addRulesButton', + { + defaultMessage: 'Add Elastic rules', + } +); diff --git a/x-pack/plugins/security_solution/public/onboarding/constants.ts b/x-pack/plugins/security_solution/public/onboarding/constants.ts index 039b83f754093..eaa771221ca8e 100644 --- a/x-pack/plugins/security_solution/public/onboarding/constants.ts +++ b/x-pack/plugins/security_solution/public/onboarding/constants.ts @@ -11,4 +11,6 @@ export enum OnboardingCardId { dashboards = 'dashboards', rules = 'rules', alerts = 'alerts', + asistant = 'asistant', + attackDiscovery = 'attack_discovery', } From b41ce9039dc3df62c381e31da90346201523557e Mon Sep 17 00:00:00 2001 From: Agustina Nahir Ruidiaz Date: Wed, 25 Sep 2024 15:39:24 +0200 Subject: [PATCH 02/13] improving cards --- .../cards/asistant/asistant_card.tsx | 48 ++++++++++-- .../configure_connector.tsx | 25 +++---- .../connector_cards.tsx} | 73 ++++++++----------- .../onboarding_body/cards/asistant/index.ts | 6 +- .../cards/asistant/translations.ts | 24 ++++-- .../cards/common/card_content_panel.tsx | 2 +- .../cards/rules/rules_card.tsx | 32 +++++++- .../cards/rules/rules_check_complete.ts | 65 +++++++++++++++++ 8 files changed, 203 insertions(+), 72 deletions(-) rename x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/asistant/components/{connector_setup/connector_setup.tsx => connector_cards/connector_cards.tsx} (80%) create mode 100644 x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/rules/rules_check_complete.ts diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/asistant/asistant_card.tsx b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/asistant/asistant_card.tsx index 898211d35bbbc..30ecfc14bd8af 100644 --- a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/asistant/asistant_card.tsx +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/asistant/asistant_card.tsx @@ -5,28 +5,64 @@ * 2.0. */ -import React from 'react'; -import { EuiFlexGroup, EuiFlexItem, EuiText } from '@elastic/eui'; +import React, { useCallback, useMemo } from 'react'; +import { EuiFlexGroup, EuiFlexItem, EuiIcon, EuiLink, EuiText } from '@elastic/eui'; +import { css } from '@emotion/css'; +import { OnboardingCardId } from '../../../../constants'; import type { OnboardingCardComponent } from '../../../../types'; import * as i18n from './translations'; import { OnboardingCardContentPanel } from '../common/card_content_panel'; import { ConfigureConnector } from './components/configure_connector/configure_connector'; +import { CardCallOut } from '../common/card_callout'; export const AsistantCard: OnboardingCardComponent = ({ + setComplete, isCardComplete, setExpandedCardId, - setComplete, }) => { + const isIntegrationsCardComplete = useMemo( + () => isCardComplete(OnboardingCardId.integrations), + [isCardComplete] + ); + + const expandIntegrationsCard = useCallback(() => { + setExpandedCardId(OnboardingCardId.integrations, { scroll: true }); + }, [setExpandedCardId]); + return ( - + - {i18n.ASISTANT_CARD_DESCRIPTION} + {i18n.ASSISTANT_CARD_DESCRIPTION} - + {isIntegrationsCardComplete ? ( + + ) : ( + + + + {i18n.ASSISTANT_CARD_CALLOUT_INTEGRATIONS_BUTTON} + + + + + + } + /> + + )} diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/asistant/components/configure_connector/configure_connector.tsx b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/asistant/components/configure_connector/configure_connector.tsx index 3ca0d70bbb4bc..3224421629eea 100644 --- a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/asistant/components/configure_connector/configure_connector.tsx +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/asistant/components/configure_connector/configure_connector.tsx @@ -5,12 +5,12 @@ * 2.0. */ -import React, { useCallback, useEffect, useState } from 'react'; +import React, { useEffect, useState } from 'react'; import { useLoadConnectors } from '@kbn/elastic-assistant'; import type { AIConnector } from '@kbn/elastic-assistant/impl/connectorland/connector_selector'; import type { SetComplete } from '../../../../../../types'; import { useKibana } from '../../../../../../../common/lib/kibana'; -import { ConnectorSetup } from '../connector_setup/connector_setup'; +import { ConnectorCards } from '../connector_cards/connector_cards'; const AllowedActionTypeIds = ['.bedrock', '.gen-ai', '.gemini']; @@ -20,28 +20,25 @@ interface ConfigureConnectorProps { export const ConfigureConnector = React.memo(({ setComplete }) => { const { http } = useKibana().services; - const [connectors, setConnectors] = useState(); const { isLoading, data: aiConnectors, refetch: refetchConnectors } = useLoadConnectors({ http }); - const hasConnectors = !isLoading && connectors?.length; + const [connectors, setConnectors] = useState([]); useEffect(() => { - if (aiConnectors != null) { - const filteredAiConnectors = aiConnectors.filter(({ actionTypeId }) => + if (aiConnectors) { + const filteredConnectors = aiConnectors.filter(({ actionTypeId }) => AllowedActionTypeIds.includes(actionTypeId) ); - setConnectors(filteredAiConnectors); + setConnectors(filteredConnectors); + setComplete(filteredConnectors.length > 0); } - if (hasConnectors) { - setComplete(true); - } - }, [aiConnectors, setComplete, hasConnectors]); + }, [aiConnectors, setComplete]); - const onConnectorSaved = useCallback(() => refetchConnectors(), [refetchConnectors]); + const onConnectorSaved = () => refetchConnectors(); - if (isLoading) return

{'loading'}

; + if (isLoading) return null; return ( - { +const useConnectorCardsStyles = () => { const { euiTheme } = useEuiTheme(); - return css` - position: relative; - overflow: hidden; - height: 160px; - &.euiPanel:hover { - background-color: ${euiTheme.colors.lightestShade}; - } - `; -}; - -const useIsSelectedStyles = () => { const backgroundColor = useEuiBackgroundColor('success'); - return css` - width: 100%; - position: absolute; - bottom: 0; - left: 0; - padding: 8px 0; - background-color: ${backgroundColor}; - &.euiFlexItem { - } - `; + return { + panel: css` + position: relative; + overflow: hidden; + height: 160px; + &.euiPanel:hover { + background-color: ${euiTheme.colors.lightestShade}; + } + `, + selected: css` + width: 100%; + position: absolute; + bottom: 0; + left: 0; + padding: 8px 0; + background-color: ${backgroundColor}; + `, + }; }; -interface ConnectorSetupProps { +interface ConnectorCardsProps { connectors?: AIConnector[]; onConnectorSaved?: (savedAction: ActionConnector) => void; onClose?: () => void; actionTypeIds?: string[]; - compressed?: boolean; } -export const ConnectorSetup = React.memo( + +export const ConnectorCards = React.memo( ({ connectors, onConnectorSaved, onClose, actionTypeIds }) => { - const panelCss = usePanelCss(); - const isSelectedStyles = useIsSelectedStyles(); + const { panel, selected } = useConnectorCardsStyles(); const { http, triggersActionsUi: { actionTypeRegistry }, notifications: { toasts }, } = useKibana().services; + const [selectedActionType, setSelectedActionType] = useState(null); const onModalClose = useCallback(() => { setSelectedActionType(null); @@ -80,27 +76,22 @@ export const ConnectorSetup = React.memo( const { data } = useLoadActionTypes({ http, toasts }); const actionTypes = useMemo(() => { - if (actionTypeIds && data) { - return data.filter((actionType) => actionTypeIds.includes(actionType.id)); - } - return data; + return actionTypeIds ? data?.filter(({ id }) => actionTypeIds.includes(id)) : data; }, [data, actionTypeIds]); - if (!actionTypes) { - return ; - } + if (!actionTypes) return ; return ( <> - {actionTypes?.map((actionType: ActionType) => ( + {actionTypes.map((actionType) => ( setSelectedActionType(actionType)} data-test-subj={`actionType-${actionType.id}`} > - + ( - {connectors?.some((connector) => connector.actionTypeId === actionType.id) ? ( + {connectors?.some((connector) => connector.actionTypeId === actionType.id) && ( @@ -142,7 +133,7 @@ export const ConnectorSetup = React.memo( - ) : null} + )}
@@ -161,4 +152,4 @@ export const ConnectorSetup = React.memo( ); } ); -ConnectorSetup.displayName = 'ConnectorSetup'; +ConnectorCards.displayName = 'ConnectorCards'; diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/asistant/index.ts b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/asistant/index.ts index 29ab171871ade..9ab759c4aa517 100644 --- a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/asistant/index.ts +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/asistant/index.ts @@ -9,13 +9,11 @@ import React from 'react'; import { AssistantAvatar } from '@kbn/elastic-assistant'; import type { OnboardingCardConfig } from '../../../../types'; import { OnboardingCardId } from '../../../../constants'; -import { ASISTANT_CARD_TITLE } from './translations'; -// import { checkAssistantCardComplete } from './assistant_check_complete'; +import { ASSISTANT_CARD_TITLE } from './translations'; export const asistantCardConfig: OnboardingCardConfig = { id: OnboardingCardId.asistant, - title: ASISTANT_CARD_TITLE, + title: ASSISTANT_CARD_TITLE, icon: AssistantAvatar, - // checkComplete: checkAssistantCardComplete, Component: React.lazy(() => import('./asistant_card')), }; diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/asistant/translations.ts b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/asistant/translations.ts index 6a96e0b350fbd..73b58e0089370 100644 --- a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/asistant/translations.ts +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/asistant/translations.ts @@ -7,17 +7,31 @@ import { i18n } from '@kbn/i18n'; -export const ASISTANT_CARD_TITLE = i18n.translate( - 'xpack.securitySolution.onboarding.rulesCard.title', +export const ASSISTANT_CARD_TITLE = i18n.translate( + 'xpack.securitySolution.onboarding.assistantCard.title', { - defaultMessage: 'Configure AI Assisstant', + defaultMessage: 'Configure AI Assistant', } ); -export const ASISTANT_CARD_DESCRIPTION = i18n.translate( - 'xpack.securitySolution.onboarding.rulesCard.description', +export const ASSISTANT_CARD_DESCRIPTION = i18n.translate( + 'xpack.securitySolution.onboarding.assistantCard.description', { defaultMessage: 'The Elastic AI connector is currently configured, powered by OpenAI gpt 4.0 for optimal performance. Select the provider to add your own AI Connector.', } ); + +export const ASSISTANT_CARD_CALLOUT_INTEGRATIONS_TEXT = i18n.translate( + 'xpack.securitySolution.onboarding.assistantCard.calloutIntegrationsText', + { + defaultMessage: 'To add Elastic rules add integrations first.', + } +); + +export const ASSISTANT_CARD_CALLOUT_INTEGRATIONS_BUTTON = i18n.translate( + 'xpack.securitySolution.onboarding.assistantCard.calloutIntegrationsButton', + { + defaultMessage: 'Add integrations step', + } +); diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/card_content_panel.tsx b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/card_content_panel.tsx index c4039955e4216..cbbe46d5cee60 100644 --- a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/card_content_panel.tsx +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/card_content_panel.tsx @@ -11,7 +11,7 @@ export const OnboardingCardContentPanel = React.memo { return ( - + {children} diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/rules/rules_card.tsx b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/rules/rules_card.tsx index 8f0f40edad1e7..393e071fc7b8d 100644 --- a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/rules/rules_card.tsx +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/rules/rules_card.tsx @@ -5,9 +5,10 @@ * 2.0. */ -import React, { useCallback, useMemo } from 'react'; +import React, { useCallback, useEffect, useMemo, useRef } from 'react'; import { EuiFlexGroup, EuiFlexItem, EuiIcon, EuiLink, EuiSpacer, EuiText } from '@elastic/eui'; import { SecurityPageName } from '@kbn/security-solution-navigation'; +import { useKibana } from '../../../../../common/lib/kibana'; import { SecuritySolutionLinkButton } from '../../../../../common/components/links'; import { OnboardingCardId } from '../../../../constants'; import type { OnboardingCardComponent } from '../../../../types'; @@ -15,6 +16,7 @@ import { OnboardingCardContentImagePanel } from '../common/card_content_image_pa import { CardCallOut } from '../common/card_callout'; import rulesImageSrc from './images/rules.png'; import * as i18n from './translations'; +import { checkRulesComplete } from './rules_check_complete'; export const RulesCard: OnboardingCardComponent = ({ isCardComplete, @@ -26,10 +28,38 @@ export const RulesCard: OnboardingCardComponent = ({ [isCardComplete] ); + const { + http: kibanaServicesHttp, + notifications: { toasts }, + } = useKibana().services; + + const addError = useRef(toasts.addError.bind(toasts)).current; + const expandIntegrationsCard = useCallback(() => { setExpandedCardId(OnboardingCardId.integrations, { scroll: true }); }, [setExpandedCardId]); + useEffect(() => { + const abortSignal = new AbortController(); + const autoCheckStepCompleted = async () => { + const isDone = await checkRulesComplete({ + abortSignal, + kibanaServicesHttp, + onError: (error: Error) => { + addError(error, { title: `Failed to check Card Rules completion.` }); + }, + }); + + if (isDone) { + setComplete(true); + } + }; + autoCheckStepCompleted(); + return () => { + abortSignal.abort(); + }; + }, [kibanaServicesHttp, addError, setComplete]); + return ( void; +}) => { + // Check if there are any rules installed and enabled + try { + const data = await fetchRuleManagementFilters({ + http: kibanaServicesHttp, + signal: abortSignal.signal, + query: { + page: 1, + per_page: 20, + sort_field: 'enabled', + sort_order: 'desc', + filter: `${ENABLED_FIELD}: true`, + }, + }); + return data?.total > 0; + } catch (e) { + if (!abortSignal.signal.aborted) { + onError?.(e); + } + + return false; + } +}; + +const fetchRuleManagementFilters = async ({ + http, + signal, + query, +}: { + http: HttpSetup; + signal?: AbortSignal; + query?: { + page: number; + per_page: number; + sort_field: string; + sort_order: string; + filter: string; + }; +}): Promise => + http.fetch(DETECTION_ENGINE_RULES_URL_FIND, { + method: 'GET', + version: '2023-10-31', + signal, + query, + }); From 121afdf4ffb89592507e7df477ea25ac0f0cb94d Mon Sep 17 00:00:00 2001 From: Agustina Nahir Ruidiaz Date: Mon, 30 Sep 2024 14:50:29 +0200 Subject: [PATCH 03/13] add rules check complete function --- .../onboarding_body/cards/rules/index.ts | 2 + .../cards/rules/rules_card.tsx | 38 +------------------ .../cards/rules/rules_check_complete.ts | 27 ++++++------- .../hooks/use_completed_cards.ts | 13 ++++--- .../public/onboarding/types.ts | 5 ++- 5 files changed, 27 insertions(+), 58 deletions(-) diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/rules/index.ts b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/rules/index.ts index 183e522b561c5..09a9380516339 100644 --- a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/rules/index.ts +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/rules/index.ts @@ -10,10 +10,12 @@ import type { OnboardingCardConfig } from '../../../../types'; import { OnboardingCardId } from '../../../../constants'; import { RULES_CARD_TITLE } from './translations'; import rulesIcon from './images/rules_icon.png'; +import { checkRulesComplete } from './rules_check_complete'; export const rulesCardConfig: OnboardingCardConfig = { id: OnboardingCardId.rules, title: RULES_CARD_TITLE, icon: rulesIcon, Component: React.lazy(() => import('./rules_card')), + checkComplete: checkRulesComplete, }; diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/rules/rules_card.tsx b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/rules/rules_card.tsx index 393e071fc7b8d..027fd4ac408a6 100644 --- a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/rules/rules_card.tsx +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/rules/rules_card.tsx @@ -5,10 +5,9 @@ * 2.0. */ -import React, { useCallback, useEffect, useMemo, useRef } from 'react'; +import React, { useCallback, useMemo } from 'react'; import { EuiFlexGroup, EuiFlexItem, EuiIcon, EuiLink, EuiSpacer, EuiText } from '@elastic/eui'; import { SecurityPageName } from '@kbn/security-solution-navigation'; -import { useKibana } from '../../../../../common/lib/kibana'; import { SecuritySolutionLinkButton } from '../../../../../common/components/links'; import { OnboardingCardId } from '../../../../constants'; import type { OnboardingCardComponent } from '../../../../types'; @@ -16,50 +15,17 @@ import { OnboardingCardContentImagePanel } from '../common/card_content_image_pa import { CardCallOut } from '../common/card_callout'; import rulesImageSrc from './images/rules.png'; import * as i18n from './translations'; -import { checkRulesComplete } from './rules_check_complete'; -export const RulesCard: OnboardingCardComponent = ({ - isCardComplete, - setExpandedCardId, - setComplete, -}) => { +export const RulesCard: OnboardingCardComponent = ({ isCardComplete, setExpandedCardId }) => { const isIntegrationsCardComplete = useMemo( () => isCardComplete(OnboardingCardId.integrations), [isCardComplete] ); - const { - http: kibanaServicesHttp, - notifications: { toasts }, - } = useKibana().services; - - const addError = useRef(toasts.addError.bind(toasts)).current; - const expandIntegrationsCard = useCallback(() => { setExpandedCardId(OnboardingCardId.integrations, { scroll: true }); }, [setExpandedCardId]); - useEffect(() => { - const abortSignal = new AbortController(); - const autoCheckStepCompleted = async () => { - const isDone = await checkRulesComplete({ - abortSignal, - kibanaServicesHttp, - onError: (error: Error) => { - addError(error, { title: `Failed to check Card Rules completion.` }); - }, - }); - - if (isDone) { - setComplete(true); - } - }; - autoCheckStepCompleted(); - return () => { - abortSignal.abort(); - }; - }, [kibanaServicesHttp, addError, setComplete]); - return ( void; +export const checkRulesComplete: OnboardingCardCheckComplete = async ({ + http, + notifications: { toasts }, }) => { // Check if there are any rules installed and enabled try { const data = await fetchRuleManagementFilters({ - http: kibanaServicesHttp, - signal: abortSignal.signal, + http, query: { page: 1, per_page: 20, @@ -32,13 +27,15 @@ export const checkRulesComplete = async ({ filter: `${ENABLED_FIELD}: true`, }, }); - return data?.total > 0; + return { + isComplete: data?.total > 0, + }; } catch (e) { - if (!abortSignal.signal.aborted) { - onError?.(e); - } + toasts.addError(e, { title: `Failed to check Card Rules completion.` }); - return false; + return { + isComplete: false, + }; } }; diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/hooks/use_completed_cards.ts b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/hooks/use_completed_cards.ts index 88f6e7ca11b90..58094322c8ad2 100644 --- a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/hooks/use_completed_cards.ts +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/hooks/use_completed_cards.ts @@ -6,13 +6,14 @@ */ import { useCallback, useEffect, useMemo, useState } from 'react'; +import { useKibana } from '../../../../common/lib/kibana'; import { useStoredCompletedCardIds } from '../../../hooks/use_stored_state'; import type { OnboardingCardId } from '../../../constants'; import type { CheckCompleteResult, CheckCompleteResponse, - OnboardingCardConfig, OnboardingGroupConfig, + OnboardingCardConfig, } from '../../../types'; import { useOnboardingContext } from '../../onboarding_context'; @@ -33,7 +34,7 @@ export type CardCheckCompleteResult = Partial { const { spaceId, reportCardComplete } = useOnboardingContext(); - + const services = useKibana().services; // Use stored state to keep localStorage in sync, and a local state to avoid unnecessary re-renders. const [storedCompleteCardIds, setStoredCompleteCardIds] = useStoredCompletedCardIds(spaceId); const [completeCardIds, setCompleteCardIds] = useState(storedCompleteCardIds); @@ -111,22 +112,22 @@ export const useCompletedCards = (cardsGroupConfig: OnboardingGroupConfig[]) => const cardConfig = cardsWithAutoCheck.find(({ id }) => id === cardId); if (cardConfig) { - cardConfig.checkComplete?.().then((checkCompleteResult) => { + cardConfig.checkComplete?.(services).then((checkCompleteResult) => { processCardCheckCompleteResult(cardId, checkCompleteResult); }); } }, - [cardsWithAutoCheck, processCardCheckCompleteResult] + [cardsWithAutoCheck, processCardCheckCompleteResult, services] ); // Initial auto-check for all cards, it should run only once, after cardsGroupConfig is properly populated useEffect(() => { cardsWithAutoCheck.map((card) => - card.checkComplete?.().then((checkCompleteResult) => { + card.checkComplete?.(services).then((checkCompleteResult) => { processCardCheckCompleteResult(card.id, checkCompleteResult); }) ); - }, [cardsWithAutoCheck, processCardCheckCompleteResult]); + }, [cardsWithAutoCheck, processCardCheckCompleteResult, services]); return { isCardComplete, diff --git a/x-pack/plugins/security_solution/public/onboarding/types.ts b/x-pack/plugins/security_solution/public/onboarding/types.ts index f568daa30bc0b..d8a3304f65793 100644 --- a/x-pack/plugins/security_solution/public/onboarding/types.ts +++ b/x-pack/plugins/security_solution/public/onboarding/types.ts @@ -10,6 +10,7 @@ import type { IconType } from '@elastic/eui'; import type { LicenseType } from '@kbn/licensing-plugin/public'; import type { OnboardingCardId } from './constants'; import type { RequiredCapabilities } from '../common/lib/capabilities'; +import type { StartServices } from '../types'; export interface CheckCompleteResult { /** @@ -62,7 +63,9 @@ export type OnboardingCardComponent = React.ComponentType<{ checkCompleteMetadata?: Record; }>; -export type OnboardingCardCheckComplete = () => Promise; +export type OnboardingCardCheckComplete = ( + services: StartServices +) => Promise; export interface OnboardingCardConfig { id: OnboardingCardId; From 046aebd16d0a8dd0562b019ed77ac9e0c0f8c9d9 Mon Sep 17 00:00:00 2001 From: Agustina Nahir Ruidiaz Date: Tue, 1 Oct 2024 15:02:00 +0200 Subject: [PATCH 04/13] change dark theme styles feedback --- .../public/onboarding/components/onboarding.tsx | 2 +- .../onboarding_body/onboarding_card_panel.styles.ts | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding.tsx b/x-pack/plugins/security_solution/public/onboarding/components/onboarding.tsx index a240e937d4de6..17f4840e68dc4 100644 --- a/x-pack/plugins/security_solution/public/onboarding/components/onboarding.tsx +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding.tsx @@ -40,7 +40,7 @@ export const OnboardingPage = React.memo(() => { restrictWidth={PAGE_CONTENT_WIDTH} paddingSize="xl" bottomBorder="extended" - style={{ backgroundColor: euiTheme.colors.lightestShade }} + style={{ backgroundColor: euiTheme.colors.body }} > diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/onboarding_card_panel.styles.ts b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/onboarding_card_panel.styles.ts index baa1add546b95..5e5ea2a5e8467 100644 --- a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/onboarding_card_panel.styles.ts +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/onboarding_card_panel.styles.ts @@ -5,14 +5,15 @@ * 2.0. */ -import { useEuiBackgroundColor, useEuiTheme } from '@elastic/eui'; +import { COLOR_MODES_STANDARD, useEuiBackgroundColor, useEuiTheme } from '@elastic/eui'; import { css } from '@emotion/css'; export const HEIGHT_ANIMATION_DURATION = 250; export const useCardPanelStyles = () => { - const { euiTheme } = useEuiTheme(); + const { euiTheme, colorMode } = useEuiTheme(); const successBackgroundColor = useEuiBackgroundColor('success'); + const isDarkMode = colorMode === COLOR_MODES_STANDARD.dark; return css` .onboardingCardHeader { @@ -22,7 +23,7 @@ export const useCardPanelStyles = () => { .onboardingCardIcon { padding: ${euiTheme.size.m}; border-radius: 50%; - background-color: ${euiTheme.colors.lightestShade}; + background-color: ${isDarkMode ? euiTheme.colors.body : euiTheme.colors.lightestShade}; } .onboardingCardHeaderTitle { font-weight: ${euiTheme.font.weight.semiBold}; From 7554939e6b16afb8e7529003a0d590e8f590e1d9 Mon Sep 17 00:00:00 2001 From: Agustina Nahir Ruidiaz Date: Fri, 4 Oct 2024 18:55:31 +0200 Subject: [PATCH 05/13] adding tests --- .../components/onboarding_body/body_config.ts | 4 +- .../cards/alerts/alerts_card.test.tsx | 57 +++++++++ .../cards/alerts/alerts_card.tsx | 4 +- .../configure_connector.tsx | 48 -------- .../assistant_card.tsx} | 21 +++- .../assistant/assistant_check_complete.ts | 56 +++++++++ .../connector_cards/connector_cards.tsx | 46 ++++++-- .../create_connector_popover.tsx | 109 ++++++++++++++++++ .../cards/{asistant => assistant}/index.ts | 8 +- .../{asistant => assistant}/translations.ts | 0 .../attack_discover_card.test.tsx | 57 +++++++++ .../attack_discovery_card.tsx | 4 +- .../cards/attack_discovery/translations.ts | 2 +- .../cards/common/card_content_panel.tsx | 14 ++- .../cards/dashboards/dashboards_card.test.tsx | 76 ++++++++++++ .../cards/dashboards/dashboards_card.tsx | 9 +- .../integrations/images/integrations_icon.png | Bin 0 -> 1729 bytes .../cards/integrations/index.ts | 3 +- .../cards/rules/rules_card.test.tsx | 57 +++++++++ .../cards/rules/rules_card.tsx | 4 +- .../onboarding_body/onboarding_body.tsx | 8 ++ .../onboarding_card_panel.styles.ts | 6 + .../cards/common/link_card.styles.ts | 1 - .../onboarding_header/onboarding_header.tsx | 7 -- .../onboarding_header/translations.ts | 2 +- .../public/onboarding/constants.ts | 2 +- .../public/onboarding/types.ts | 4 + 27 files changed, 521 insertions(+), 88 deletions(-) create mode 100644 x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/alerts/alerts_card.test.tsx delete mode 100644 x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/asistant/components/configure_connector/configure_connector.tsx rename x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/{asistant/asistant_card.tsx => assistant/assistant_card.tsx} (77%) create mode 100644 x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/assistant_check_complete.ts rename x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/{asistant => assistant}/components/connector_cards/connector_cards.tsx (77%) create mode 100644 x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/components/create_connector_popover/create_connector_popover.tsx rename x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/{asistant => assistant}/index.ts (68%) rename x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/{asistant => assistant}/translations.ts (100%) create mode 100644 x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/attack_discovery/attack_discover_card.test.tsx create mode 100644 x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/dashboards/dashboards_card.test.tsx create mode 100644 x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/images/integrations_icon.png create mode 100644 x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/rules/rules_card.test.tsx diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/body_config.ts b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/body_config.ts index d7b654d2aa0d9..79998104c728b 100644 --- a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/body_config.ts +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/body_config.ts @@ -11,7 +11,7 @@ import { integrationsCardConfig } from './cards/integrations'; import { dashboardsCardConfig } from './cards/dashboards'; import { rulesCardConfig } from './cards/rules'; import { alertsCardConfig } from './cards/alerts'; -import { asistantCardConfig } from './cards/asistant'; +import { assistantCardConfig } from './cards/assistant'; import { attackDiscoveryCardConfig } from './cards/attack_discovery'; export const bodyConfig: OnboardingGroupConfig[] = [ @@ -31,6 +31,6 @@ export const bodyConfig: OnboardingGroupConfig[] = [ title: i18n.translate('xpack.securitySolution.onboarding.discoverGroup.title', { defaultMessage: 'Discover Elastic AI', }), - cards: [asistantCardConfig, attackDiscoveryCardConfig], + cards: [assistantCardConfig, attackDiscoveryCardConfig], }, ]; diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/alerts/alerts_card.test.tsx b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/alerts/alerts_card.test.tsx new file mode 100644 index 0000000000000..3e83bcb851f82 --- /dev/null +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/alerts/alerts_card.test.tsx @@ -0,0 +1,57 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import React from 'react'; +import { render } from '@testing-library/react'; +import { AlertsCard } from './alerts_card'; +import { TestProviders } from '../../../../../common/mock'; + +const props = { + setComplete: jest.fn(), + checkComplete: jest.fn(), + isCardComplete: jest.fn(), + setExpandedCardId: jest.fn(), +}; + +describe('AlertsCard', () => { + beforeEach(() => { + jest.clearAllMocks(); + }); + + it('description should be in the document', () => { + const { getByTestId } = render( + + + + ); + + expect(getByTestId('alertsCardDescription')).toBeInTheDocument(); + }); + + it('card callout should be rendered if integrations cards is not complete', () => { + props.isCardComplete.mockReturnValueOnce(false); + + const { getByText } = render( + + + + ); + + expect(getByText('To view alerts add integrations first.')).toBeInTheDocument(); + }); + + it('card button should be disabled if integrations cards is not complete', () => { + props.isCardComplete.mockReturnValueOnce(false); + + const { getByTestId } = render( + + + + ); + + expect(getByTestId('alertsCardButton').querySelector('button')).toBeDisabled(); + }); +}); diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/alerts/alerts_card.tsx b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/alerts/alerts_card.tsx index cc4a7e57e399c..c0369ed23d61c 100644 --- a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/alerts/alerts_card.tsx +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/alerts/alerts_card.tsx @@ -39,7 +39,7 @@ export const AlertsCard: OnboardingCardComponent = ({ alignItems="flexStart" > - + {i18n.ALERTS_CARD_DESCRIPTION} {!isIntegrationsCardComplete && ( @@ -63,7 +63,7 @@ export const AlertsCard: OnboardingCardComponent = ({ )} - + setComplete(true)} deepLinkId={SecurityPageName.alerts} diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/asistant/components/configure_connector/configure_connector.tsx b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/asistant/components/configure_connector/configure_connector.tsx deleted file mode 100644 index 3224421629eea..0000000000000 --- a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/asistant/components/configure_connector/configure_connector.tsx +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import React, { useEffect, useState } from 'react'; -import { useLoadConnectors } from '@kbn/elastic-assistant'; -import type { AIConnector } from '@kbn/elastic-assistant/impl/connectorland/connector_selector'; -import type { SetComplete } from '../../../../../../types'; -import { useKibana } from '../../../../../../../common/lib/kibana'; -import { ConnectorCards } from '../connector_cards/connector_cards'; - -const AllowedActionTypeIds = ['.bedrock', '.gen-ai', '.gemini']; - -interface ConfigureConnectorProps { - setComplete: SetComplete; -} - -export const ConfigureConnector = React.memo(({ setComplete }) => { - const { http } = useKibana().services; - const { isLoading, data: aiConnectors, refetch: refetchConnectors } = useLoadConnectors({ http }); - const [connectors, setConnectors] = useState([]); - - useEffect(() => { - if (aiConnectors) { - const filteredConnectors = aiConnectors.filter(({ actionTypeId }) => - AllowedActionTypeIds.includes(actionTypeId) - ); - setConnectors(filteredConnectors); - setComplete(filteredConnectors.length > 0); - } - }, [aiConnectors, setComplete]); - - const onConnectorSaved = () => refetchConnectors(); - - if (isLoading) return null; - - return ( - - ); -}); -ConfigureConnector.displayName = 'ConfigureConnector'; diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/asistant/asistant_card.tsx b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/assistant_card.tsx similarity index 77% rename from x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/asistant/asistant_card.tsx rename to x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/assistant_card.tsx index 30ecfc14bd8af..e16936fa52fb8 100644 --- a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/asistant/asistant_card.tsx +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/assistant_card.tsx @@ -8,17 +8,22 @@ import React, { useCallback, useMemo } from 'react'; import { EuiFlexGroup, EuiFlexItem, EuiIcon, EuiLink, EuiText } from '@elastic/eui'; import { css } from '@emotion/css'; +import type { AIConnector } from '@kbn/elastic-assistant/impl/connectorland/connector_selector'; import { OnboardingCardId } from '../../../../constants'; import type { OnboardingCardComponent } from '../../../../types'; import * as i18n from './translations'; import { OnboardingCardContentPanel } from '../common/card_content_panel'; -import { ConfigureConnector } from './components/configure_connector/configure_connector'; +import { ConnectorCards } from './components/connector_cards/connector_cards'; import { CardCallOut } from '../common/card_callout'; -export const AsistantCard: OnboardingCardComponent = ({ +const AllowedActionTypeIds = ['.bedrock', '.gen-ai', '.gemini']; + +export const AssistantCard: OnboardingCardComponent = ({ setComplete, isCardComplete, setExpandedCardId, + checkCompleteMetadata, + checkComplete, }) => { const isIntegrationsCardComplete = useMemo( () => isCardComplete(OnboardingCardId.integrations), @@ -29,8 +34,10 @@ export const AsistantCard: OnboardingCardComponent = ({ setExpandedCardId(OnboardingCardId.integrations, { scroll: true }); }, [setExpandedCardId]); + const aiConnectors = checkCompleteMetadata?.connectors as AIConnector[]; + return ( - + @@ -39,7 +46,11 @@ export const AsistantCard: OnboardingCardComponent = ({ {isIntegrationsCardComplete ? ( - + ) : ( { + const aiConnectorsResult = await loadConnectors({ http }); + + const reducedAiConnectorsResult = aiConnectorsResult.reduce( + (acc: AIConnector[], connector) => [ + ...acc, + ...(!connector.isMissingSecrets && + [actionTypeKey.bedrock, actionTypeKey.openai, actionTypeKey.gemini].includes( + connector.actionTypeId + ) + ? [ + { + ...connector, + apiProvider: + !connector.isPreconfigured && + !connector.isSystemAction && + connector?.config?.apiProvider + ? (connector?.config?.apiProvider as OpenAiProviderType) + : undefined, + }, + ] + : []), + ], + [] + ); + + const filteredConnectors = reducedAiConnectorsResult.filter(({ actionTypeId }) => + AllowedActionTypeIds.includes(actionTypeId) + ); + + return { + isComplete: filteredConnectors.length > 0, + metadata: { + connectors: filteredConnectors, + }, + }; +}; diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/asistant/components/connector_cards/connector_cards.tsx b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/components/connector_cards/connector_cards.tsx similarity index 77% rename from x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/asistant/components/connector_cards/connector_cards.tsx rename to x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/components/connector_cards/connector_cards.tsx index 95f54ede63cd2..4355ba117d57d 100644 --- a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/asistant/components/connector_cards/connector_cards.tsx +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/components/connector_cards/connector_cards.tsx @@ -6,7 +6,7 @@ */ import React, { useCallback, useMemo, useState } from 'react'; -import type { AIConnector } from '@kbn/elastic-assistant/impl/connectorland/connector_selector'; +import { type AIConnector } from '@kbn/elastic-assistant/impl/connectorland/connector_selector'; import { useEuiTheme, EuiFlexGroup, @@ -18,15 +18,15 @@ import { EuiLink, EuiTextColor, useEuiBackgroundColor, + EuiBadge, + EuiSpacer, } from '@elastic/eui'; -import { - ConnectorAddModal, - type ActionConnector, -} from '@kbn/triggers-actions-ui-plugin/public/common/constants'; +import { ConnectorAddModal } from '@kbn/triggers-actions-ui-plugin/public/common/constants'; import { useLoadActionTypes } from '@kbn/elastic-assistant/impl/connectorland/use_load_action_types'; import type { ActionType } from '@kbn/actions-plugin/common'; import { css } from '@emotion/css'; import { useKibana } from '../../../../../../../common/lib/kibana'; +import { CreateConnectorPopover } from '../create_connector_popover/create_connector_popover'; const useConnectorCardsStyles = () => { const { euiTheme } = useEuiTheme(); @@ -53,7 +53,7 @@ const useConnectorCardsStyles = () => { interface ConnectorCardsProps { connectors?: AIConnector[]; - onConnectorSaved?: (savedAction: ActionConnector) => void; + onConnectorSaved: () => void; onClose?: () => void; actionTypeIds?: string[]; } @@ -79,7 +79,39 @@ export const ConnectorCards = React.memo( return actionTypeIds ? data?.filter(({ id }) => actionTypeIds.includes(id)) : data; }, [data, actionTypeIds]); - if (!actionTypes) return ; + if (!actionTypes || !connectors) return ; + + if (connectors.length > 0) { + return ( + <> + + {connectors?.map((connector) => ( + + + + + {connector.name} + + + + {actionTypeRegistry.get(connector.actionTypeId).actionTypeTitle} + + + + + + ))} + + + + + ); + } return ( <> diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/components/create_connector_popover/create_connector_popover.tsx b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/components/create_connector_popover/create_connector_popover.tsx new file mode 100644 index 0000000000000..ab6298ce48bc0 --- /dev/null +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/components/create_connector_popover/create_connector_popover.tsx @@ -0,0 +1,109 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import React, { useCallback, useMemo, useState } from 'react'; +import { css } from '@emotion/css'; +import { + EuiListGroup, + EuiPopover, + EuiLink, + EuiText, + EuiIcon, + EuiLoadingSpinner, +} from '@elastic/eui'; +import { useLoadActionTypes } from '@kbn/elastic-assistant/impl/connectorland/use_load_action_types'; +import { ConnectorAddModal } from '@kbn/triggers-actions-ui-plugin/public/common/constants'; +import type { ActionType } from '@kbn/actions-plugin/server'; +import { useKibana } from '../../../../../../../common/lib/kibana'; + +interface CreateConnectorPopoverProps { + onConnectorSaved: () => void; +} + +const AllowedActionTypeIds = ['.bedrock', '.gen-ai', '.gemini']; + +export const CreateConnectorPopover = React.memo( + ({ onConnectorSaved }) => { + const [isOpen, setIsPopoverOpen] = useState(false); + const closePopover = useCallback(() => setIsPopoverOpen(false), []); + const { + http, + triggersActionsUi: { actionTypeRegistry }, + notifications: { toasts }, + } = useKibana().services; + + const onButtonClick = () => setIsPopoverOpen((isPopoverOpen) => !isPopoverOpen); + + const [selectedActionType, setSelectedActionType] = useState(null); + const onModalClose = useCallback(() => { + setSelectedActionType(null); + closePopover(); + }, [closePopover]); + + const { data } = useLoadActionTypes({ http, toasts }); + + const actionTypes = useMemo(() => { + if (AllowedActionTypeIds && data) { + return data.filter((actionType) => AllowedActionTypeIds.includes(actionType.id)); + } + return data; + }, [data]); + + if (!actionTypes) { + return ; + } + + return ( + <> + + + {'Create new connector'} + + + } + isOpen={isOpen} + closePopover={closePopover} + data-test-subj="createConnectorPopover" + > + ({ + id: actionType.id, + label: actionType.name, + size: 's', + icon: ( + + ), + isDisabled: !actionType.enabled, + // @ts-ignore + onClick: () => setSelectedActionType(actionType), + }))} + /> + + {selectedActionType && ( + + )} + + ); + } +); +CreateConnectorPopover.displayName = 'CreateConnectorPopover'; diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/asistant/index.ts b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/index.ts similarity index 68% rename from x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/asistant/index.ts rename to x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/index.ts index 9ab759c4aa517..c80c07604717f 100644 --- a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/asistant/index.ts +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/index.ts @@ -10,10 +10,12 @@ import { AssistantAvatar } from '@kbn/elastic-assistant'; import type { OnboardingCardConfig } from '../../../../types'; import { OnboardingCardId } from '../../../../constants'; import { ASSISTANT_CARD_TITLE } from './translations'; +import { checkAssistantCardComplete } from './assistant_check_complete'; -export const asistantCardConfig: OnboardingCardConfig = { - id: OnboardingCardId.asistant, +export const assistantCardConfig: OnboardingCardConfig = { + id: OnboardingCardId.assistant, title: ASSISTANT_CARD_TITLE, icon: AssistantAvatar, - Component: React.lazy(() => import('./asistant_card')), + Component: React.lazy(() => import('./assistant_card')), + checkComplete: checkAssistantCardComplete, }; diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/asistant/translations.ts b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/translations.ts similarity index 100% rename from x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/asistant/translations.ts rename to x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/translations.ts diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/attack_discovery/attack_discover_card.test.tsx b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/attack_discovery/attack_discover_card.test.tsx new file mode 100644 index 0000000000000..19b327f77487c --- /dev/null +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/attack_discovery/attack_discover_card.test.tsx @@ -0,0 +1,57 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import React from 'react'; +import { render } from '@testing-library/react'; +import { AttackDiscoveryCard } from './attack_discovery_card'; +import { TestProviders } from '../../../../../common/mock'; + +const props = { + setComplete: jest.fn(), + checkComplete: jest.fn(), + isCardComplete: jest.fn(), + setExpandedCardId: jest.fn(), +}; + +describe('RulesCard', () => { + beforeEach(() => { + jest.clearAllMocks(); + }); + + it('description should be in the document', () => { + const { getByTestId } = render( + + + + ); + + expect(getByTestId('attackDiscoveryCardDescription')).toBeInTheDocument(); + }); + + it('card callout should be rendered if integrations cards is not complete', () => { + props.isCardComplete.mockReturnValueOnce(false); + + const { getByText } = render( + + + + ); + + expect(getByText('To use Attack Discovery add integrations first.')).toBeInTheDocument(); + }); + + it('card button should be disabled if integrations cards is not complete', () => { + props.isCardComplete.mockReturnValueOnce(false); + + const { getByTestId } = render( + + + + ); + + expect(getByTestId('attackDiscoveryCardButton').querySelector('button')).toBeDisabled(); + }); +}); diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/attack_discovery/attack_discovery_card.tsx b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/attack_discovery/attack_discovery_card.tsx index 1fc8ab80a963f..b34aa4367b09c 100644 --- a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/attack_discovery/attack_discovery_card.tsx +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/attack_discovery/attack_discovery_card.tsx @@ -42,7 +42,7 @@ export const AttackDiscoveryCard: OnboardingCardComponent = ({ alignItems="flexStart" > - + {i18n.ATTACK_DISCOVERY_CARD_DESCRIPTION} {!isIntegrationsCardComplete && ( @@ -68,7 +68,7 @@ export const AttackDiscoveryCard: OnboardingCardComponent = ({ )} - + setComplete(true)} deepLinkId={SecurityPageName.attackDiscovery} diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/attack_discovery/translations.ts b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/attack_discovery/translations.ts index 9cf52c3085f34..be1334b35b217 100644 --- a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/attack_discovery/translations.ts +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/attack_discovery/translations.ts @@ -25,7 +25,7 @@ export const ATTACK_DISCOVERY_CARD_DESCRIPTION = i18n.translate( export const ATTACK_DISCOVERY_CARD_CALLOUT_INTEGRATIONS_TEXT = i18n.translate( 'xpack.securitySolution.onboarding.attackDiscoveryCard.calloutIntegrationsText', { - defaultMessage: 'To view alerts add integrations first.', + defaultMessage: 'To use Attack Discovery add integrations first.', } ); diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/card_content_panel.tsx b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/card_content_panel.tsx index cbbe46d5cee60..6fcdc0574a868 100644 --- a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/card_content_panel.tsx +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/card_content_panel.tsx @@ -5,12 +5,22 @@ * 2.0. */ import React, { type PropsWithChildren } from 'react'; -import { EuiPanel, type EuiPanelProps } from '@elastic/eui'; +import { COLOR_MODES_STANDARD, EuiPanel, useEuiTheme, type EuiPanelProps } from '@elastic/eui'; +import { css } from '@emotion/css'; export const OnboardingCardContentPanel = React.memo>( ({ children, ...panelProps }) => { + const { euiTheme, colorMode } = useEuiTheme(); + const isDarkMode = colorMode === COLOR_MODES_STANDARD.dark; return ( - + {children} diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/dashboards/dashboards_card.test.tsx b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/dashboards/dashboards_card.test.tsx new file mode 100644 index 0000000000000..f7aa198eccab4 --- /dev/null +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/dashboards/dashboards_card.test.tsx @@ -0,0 +1,76 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import React from 'react'; +import { fireEvent, render } from '@testing-library/react'; +import { DashboardsCard } from './dashboards_card'; +import { TestProviders } from '../../../../../common/mock'; +import { OnboardingCardId } from '../../../../constants'; + +jest.mock('../../../onboarding_context'); + +const props = { + setComplete: jest.fn(), + checkComplete: jest.fn(), + isCardComplete: jest.fn(), + setExpandedCardId: jest.fn(), +}; + +describe('RulesCard', () => { + beforeEach(() => { + jest.clearAllMocks(); + }); + + it('description should be in the document', () => { + const { getByTestId } = render( + + + + ); + + expect(getByTestId('dashboardsDescription')).toBeInTheDocument(); + }); + + it('card callout should be rendered if integrations cards is not complete', () => { + props.isCardComplete.mockReturnValueOnce(false); + + const { getByText } = render( + + + + ); + + expect(getByText('To view dashboards add integrations first.')).toBeInTheDocument(); + }); + + it('card button should be disabled if integrations cards is not complete', () => { + props.isCardComplete.mockReturnValueOnce(false); + + const { getByTestId } = render( + + + + ); + + expect(getByTestId('dashboardsCardButton').querySelector('button')).toBeDisabled(); + }); + it('should expand integrations card when callout link is clicked', () => { + props.isCardComplete.mockReturnValueOnce(false); // To show the callout + + const { getByTestId } = render( + + + + ); + + const link = getByTestId('dashboardsCardCalloutLink'); + fireEvent.click(link); + + expect(props.setExpandedCardId).toHaveBeenCalledWith(OnboardingCardId.integrations, { + scroll: true, + }); + }); +}); diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/dashboards/dashboards_card.tsx b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/dashboards/dashboards_card.tsx index a86158315f189..df98800d83f32 100644 --- a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/dashboards/dashboards_card.tsx +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/dashboards/dashboards_card.tsx @@ -42,7 +42,7 @@ export const DashboardsCard: OnboardingCardComponent = ({ alignItems="flexStart" > - + {i18n.DASHBOARDS_CARD_DESCRIPTION} {!isIntegrationsCardComplete && ( @@ -53,7 +53,10 @@ export const DashboardsCard: OnboardingCardComponent = ({ icon="iInCircle" text={i18n.DASHBOARDS_CARD_CALLOUT_INTEGRATIONS_TEXT} action={ - + {i18n.DASHBOARDS_CARD_CALLOUT_INTEGRATIONS_BUTTON} @@ -66,7 +69,7 @@ export const DashboardsCard: OnboardingCardComponent = ({ )} - + setComplete(true)} linkId="goToDashboardsButton" diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/images/integrations_icon.png b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/images/integrations_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..438e220084c4629e99f4066546d6438f932eb662 GIT binary patch literal 1729 zcmV;y20r@~0drDELIAGL9O(c600d`2O+f$vv5yPW9AZ;xH)7y-A0xJfr>SW(M5I}eizzn{$o9puj`+KOtALOXEQ$1&_D02Kq#O47IL6!kYVC`lcy=*88 zTdJtp(&VsCfZpsz`4gYSRa)S4tTr;QR4+5#tT3Uy#V!-0@QyCU`nAAp#F3Y>c4y^{|E5)1=N3iGL1se z2v9$HASPh)a`ZqgfR_Qz>q3+=7(!Ov;+~_bl1;WCBkcx2T%(6V@`kd!m@h){(-1UZ zb5GG^1dw(E`OT}Jcnqv6UbmH22p4*a%nQ)58>omsO!X@QnGJ0r!e>>57xnB$)QE9a zw6(}xU z{b5D@X&^q`6>(Td>qxexQmH(bpPhYn`6;)rrzo2Msq6-XeJnP{>^A_Isq3&MIRzE_ z*|fE%D5C%;F9A2Zk#-{n=$=}=w_`K8P27NpZ0J~7cJMt#9m2!?z0`5Do&zw0FYRVt zdGIBjsplI}H{gig9(~1~N%jbV8Yy&WMgN}u;rQ)LYSslifL;a>&`#+83Ny9xT}DxzyH@~^C}i|iRJ8AjU!Gs%@ODbF9;xA)Q(Ez=! zIFXTw1@o{My8tN6^b|3*^kY?_JgzpXY)fNl0J6xxvU*>XM46WF3#Qj8V&Y(5Dy`e2 zx|V}dZ%=gGG(AO%y*-g})4X5Ro}!%Tb$ir$dqzmzQ>572GsNW9DH0j59{XiV*SbA@ z@V3+djXgzJd(i!UF>zxB=$!3MEgchYOX*q|ktD4bWb*wc#*GsoOScz_(b>}2*^LgU z-fvu7x)rnJcL#v75TYUuBhcDK=MeNumUV>)VM_4@8DhKu#CQRSAv*{3u2c@eWGnbo zE#yRb5)MWmn!Y8>yaf^C1t7)?KuoLvCfCoQTDQl>xQSOoLGwZtRO|NG9Cw@m7n^1J zML5;EJubw}e{}Os8OHzMI`uudsO|;kNZb}PwNM4sy};aw+b#0o_1L%^ zxARQW%hYXY%wZVov2iypst)Q%kByUYQMa=_Yo0#;aN+LHImSPLu3sw9>9JWlI{dx? zicCXX import('./integrations_card' /* webpackChunkName: "onboarding_integrations_card" */) ), diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/rules/rules_card.test.tsx b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/rules/rules_card.test.tsx new file mode 100644 index 0000000000000..f7156adc34eba --- /dev/null +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/rules/rules_card.test.tsx @@ -0,0 +1,57 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import React from 'react'; +import { render } from '@testing-library/react'; +import { RulesCard } from './rules_card'; +import { TestProviders } from '../../../../../common/mock'; + +const props = { + setComplete: jest.fn(), + checkComplete: jest.fn(), + isCardComplete: jest.fn(), + setExpandedCardId: jest.fn(), +}; + +describe('RulesCard', () => { + beforeEach(() => { + jest.clearAllMocks(); + }); + + it('description should be in the document', () => { + const { getByTestId } = render( + + + + ); + + expect(getByTestId('rulesCardDescription')).toBeInTheDocument(); + }); + + it('card callout should be rendered if integrations cards is not complete', () => { + props.isCardComplete.mockReturnValueOnce(false); + + const { getByText } = render( + + + + ); + + expect(getByText('To add Elastic rules add integrations first.')).toBeInTheDocument(); + }); + + it('card button should be disabled if integrations cards is not complete', () => { + props.isCardComplete.mockReturnValueOnce(false); + + const { getByTestId } = render( + + + + ); + + expect(getByTestId('rulesCardButton').querySelector('button')).toBeDisabled(); + }); +}); diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/rules/rules_card.tsx b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/rules/rules_card.tsx index 027fd4ac408a6..7f283c0ffbc78 100644 --- a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/rules/rules_card.tsx +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/rules/rules_card.tsx @@ -35,7 +35,7 @@ export const RulesCard: OnboardingCardComponent = ({ isCardComplete, setExpanded alignItems="flexStart" > - + {i18n.RULES_CARD_DESCRIPTION} {!isIntegrationsCardComplete && ( @@ -59,7 +59,7 @@ export const RulesCard: OnboardingCardComponent = ({ isCardComplete, setExpanded )} - + { [setCardComplete] ); + const createCheckCardComplete = useCallback( + (cardId: OnboardingCardId) => () => { + checkCardComplete(cardId); + }, + [checkCardComplete] + ); + return ( {bodyConfig.map((group, index) => ( @@ -64,6 +71,7 @@ export const OnboardingBody = React.memo(() => { }> { background-color: ${successBackgroundColor}; } } + ${isDarkMode + ? ` + background-color: ${euiTheme.colors.lightestShade}; + border: 1px solid ${euiTheme.colors.mediumShade}; + ` + : ''} `; }; diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_header/cards/common/link_card.styles.ts b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_header/cards/common/link_card.styles.ts index c39c9b458f478..8643c3254a6ee 100644 --- a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_header/cards/common/link_card.styles.ts +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_header/cards/common/link_card.styles.ts @@ -14,7 +14,6 @@ export const useCardStyles = () => { return css` min-width: 315px; - /* We needed to add the "headerCard" class to make it take priority over the default EUI card styles */ &.headerCard:hover { *:not(.headerCardLink) { diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_header/onboarding_header.tsx b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_header/onboarding_header.tsx index 63314bd4c9864..0210c88186a9a 100644 --- a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_header/onboarding_header.tsx +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_header/onboarding_header.tsx @@ -4,12 +4,6 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ import React from 'react'; import { @@ -22,7 +16,6 @@ import { EuiTitle, useEuiTheme, } from '@elastic/eui'; - import { useCurrentUser } from '../../../common/lib/kibana/hooks'; import { useOnboardingHeaderStyles } from './onboarding_header.styles'; import rocketImage from './images/header_rocket.png'; diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_header/translations.ts b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_header/translations.ts index 99ae806031643..c1f8ca8695bb6 100644 --- a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_header/translations.ts +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_header/translations.ts @@ -23,6 +23,6 @@ export const GET_STARTED_DATA_INGESTION_HUB_SUBTITLE = i18n.translate( export const GET_STARTED_DATA_INGESTION_HUB_DESCRIPTION = i18n.translate( 'xpack.securitySolution.onboarding.description', { - defaultMessage: `Follow these steps to set up your workspace.`, + defaultMessage: `A SIEM with AI-driven security analytics, XDR and Cloud Security.`, } ); diff --git a/x-pack/plugins/security_solution/public/onboarding/constants.ts b/x-pack/plugins/security_solution/public/onboarding/constants.ts index eaa771221ca8e..0b3a1f885838c 100644 --- a/x-pack/plugins/security_solution/public/onboarding/constants.ts +++ b/x-pack/plugins/security_solution/public/onboarding/constants.ts @@ -11,6 +11,6 @@ export enum OnboardingCardId { dashboards = 'dashboards', rules = 'rules', alerts = 'alerts', - asistant = 'asistant', + assistant = 'asistant', attackDiscovery = 'attack_discovery', } diff --git a/x-pack/plugins/security_solution/public/onboarding/types.ts b/x-pack/plugins/security_solution/public/onboarding/types.ts index d8a3304f65793..bcd03c55b7f5a 100644 --- a/x-pack/plugins/security_solution/public/onboarding/types.ts +++ b/x-pack/plugins/security_solution/public/onboarding/types.ts @@ -48,6 +48,10 @@ export type OnboardingCardComponent = React.ComponentType<{ * Function to set the current card completion status. */ setComplete: SetComplete; + /** + * Function to check the current card completion status again. + */ + checkComplete: () => void; /** * Function to check if a specific card is complete. */ From 18e3101a26e638110c6350fc85c95470d483a1b9 Mon Sep 17 00:00:00 2001 From: Agustina Nahir Ruidiaz Date: Tue, 8 Oct 2024 14:22:22 +0200 Subject: [PATCH 06/13] organizing code --- .../cards/alerts/images/alerts.png | Bin 49520 -> 67523 bytes .../cards/assistant/assistant_card.tsx | 9 +- .../assistant/assistant_check_complete.ts | 13 +- .../connector_cards/connector_cards.styles.ts | 22 +++ .../connector_cards/connector_cards.tsx | 141 +++++++----------- .../create_connector_popover.tsx | 3 +- .../cards/assistant/constants.ts | 8 + .../cards/rules/images/rules.png | Bin 49520 -> 71094 bytes 8 files changed, 92 insertions(+), 104 deletions(-) create mode 100644 x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/components/connector_cards/connector_cards.styles.ts create mode 100644 x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/constants.ts diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/alerts/images/alerts.png b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/alerts/images/alerts.png index 0d6b551e096613c60ac1cee0aedd73c966f3493a..6eaf13bfc7b5383a1c79b4ab7f8dc03baa8b8b55 100644 GIT binary patch literal 67523 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 O)faRSXLGb|gZ>4&Q4O2` literal 49520 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 diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/assistant_card.tsx b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/assistant_card.tsx index e16936fa52fb8..01616485add6b 100644 --- a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/assistant_card.tsx +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/assistant_card.tsx @@ -16,10 +16,7 @@ import { OnboardingCardContentPanel } from '../common/card_content_panel'; import { ConnectorCards } from './components/connector_cards/connector_cards'; import { CardCallOut } from '../common/card_callout'; -const AllowedActionTypeIds = ['.bedrock', '.gen-ai', '.gemini']; - export const AssistantCard: OnboardingCardComponent = ({ - setComplete, isCardComplete, setExpandedCardId, checkCompleteMetadata, @@ -46,11 +43,7 @@ export const AssistantCard: OnboardingCardComponent = ({ {isIntegrationsCardComplete ? ( - + ) : ( { const aiConnectorsResult = await loadConnectors({ http }); @@ -23,10 +17,7 @@ export const checkAssistantCardComplete: OnboardingCardCheckComplete = async ({ const reducedAiConnectorsResult = aiConnectorsResult.reduce( (acc: AIConnector[], connector) => [ ...acc, - ...(!connector.isMissingSecrets && - [actionTypeKey.bedrock, actionTypeKey.openai, actionTypeKey.gemini].includes( - connector.actionTypeId - ) + ...(!connector.isMissingSecrets && AllowedActionTypeIds.includes(connector.actionTypeId) ? [ { ...connector, diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/components/connector_cards/connector_cards.styles.ts b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/components/connector_cards/connector_cards.styles.ts new file mode 100644 index 0000000000000..4905b3824a3c8 --- /dev/null +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/components/connector_cards/connector_cards.styles.ts @@ -0,0 +1,22 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { useEuiTheme } from '@elastic/eui'; +import { css } from '@emotion/css'; + +export const useConnectorCardsStyles = () => { + const { euiTheme } = useEuiTheme(); + + return css` + .connectorSelectorPanel { + height: 160px; + &.euiPanel:hover { + background-color: ${euiTheme.colors.lightestShade}; + } + } + `; +}; diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/components/connector_cards/connector_cards.tsx b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/components/connector_cards/connector_cards.tsx index 4355ba117d57d..9f46a69342019 100644 --- a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/components/connector_cards/connector_cards.tsx +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/components/connector_cards/connector_cards.tsx @@ -7,8 +7,8 @@ import React, { useCallback, useMemo, useState } from 'react'; import { type AIConnector } from '@kbn/elastic-assistant/impl/connectorland/connector_selector'; +import type { IconType } from '@elastic/eui'; import { - useEuiTheme, EuiFlexGroup, EuiFlexItem, EuiIcon, @@ -17,7 +17,6 @@ import { EuiText, EuiLink, EuiTextColor, - useEuiBackgroundColor, EuiBadge, EuiSpacer, } from '@elastic/eui'; @@ -27,40 +26,18 @@ import type { ActionType } from '@kbn/actions-plugin/common'; import { css } from '@emotion/css'; import { useKibana } from '../../../../../../../common/lib/kibana'; import { CreateConnectorPopover } from '../create_connector_popover/create_connector_popover'; - -const useConnectorCardsStyles = () => { - const { euiTheme } = useEuiTheme(); - const backgroundColor = useEuiBackgroundColor('success'); - return { - panel: css` - position: relative; - overflow: hidden; - height: 160px; - &.euiPanel:hover { - background-color: ${euiTheme.colors.lightestShade}; - } - `, - selected: css` - width: 100%; - position: absolute; - bottom: 0; - left: 0; - padding: 8px 0; - background-color: ${backgroundColor}; - `, - }; -}; +import { AllowedActionTypeIds } from '../../constants'; +import { useConnectorCardsStyles } from './connector_cards.styles'; interface ConnectorCardsProps { connectors?: AIConnector[]; onConnectorSaved: () => void; onClose?: () => void; - actionTypeIds?: string[]; } export const ConnectorCards = React.memo( - ({ connectors, onConnectorSaved, onClose, actionTypeIds }) => { - const { panel, selected } = useConnectorCardsStyles(); + ({ connectors, onConnectorSaved, onClose }) => { + const connectorCardsStyles = useConnectorCardsStyles(); const { http, triggersActionsUi: { actionTypeRegistry }, @@ -76,8 +53,8 @@ export const ConnectorCards = React.memo( const { data } = useLoadActionTypes({ http, toasts }); const actionTypes = useMemo(() => { - return actionTypeIds ? data?.filter(({ id }) => actionTypeIds.includes(id)) : data; - }, [data, actionTypeIds]); + return data?.filter(({ id }) => AllowedActionTypeIds.includes(id)); + }, [data]); if (!actionTypes || !connectors) return ; @@ -93,9 +70,15 @@ export const ConnectorCards = React.memo( `} > - + - {connector.name} + {connector.name} @@ -117,57 +100,12 @@ export const ConnectorCards = React.memo( <> {actionTypes.map((actionType) => ( - - setSelectedActionType(actionType)} - data-test-subj={`actionType-${actionType.id}`} - > - - - - - - - - {actionType.name} - - - - {connectors?.some((connector) => connector.actionTypeId === actionType.id) && ( - - - - - - - - {'Connected'} - - - - - )} - - + + ))} @@ -185,3 +123,40 @@ export const ConnectorCards = React.memo( } ); ConnectorCards.displayName = 'ConnectorCards'; + +const ConnectorCardSelector = React.memo<{ + setSelectedActionType: (actionType: ActionType) => void; + actionType: ActionType; + iconType: IconType; +}>(({ setSelectedActionType, actionType, iconType }) => { + return ( + setSelectedActionType(actionType)} + data-test-subj={`actionType-${actionType.id}`} + > + + + + + + + + {actionType.name} + + + + + + ); +}); + +ConnectorCardSelector.displayName = 'ConnectorCardSelector'; diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/components/create_connector_popover/create_connector_popover.tsx b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/components/create_connector_popover/create_connector_popover.tsx index ab6298ce48bc0..488ef850933b3 100644 --- a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/components/create_connector_popover/create_connector_popover.tsx +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/components/create_connector_popover/create_connector_popover.tsx @@ -18,13 +18,12 @@ import { useLoadActionTypes } from '@kbn/elastic-assistant/impl/connectorland/us import { ConnectorAddModal } from '@kbn/triggers-actions-ui-plugin/public/common/constants'; import type { ActionType } from '@kbn/actions-plugin/server'; import { useKibana } from '../../../../../../../common/lib/kibana'; +import { AllowedActionTypeIds } from '../../constants'; interface CreateConnectorPopoverProps { onConnectorSaved: () => void; } -const AllowedActionTypeIds = ['.bedrock', '.gen-ai', '.gemini']; - export const CreateConnectorPopover = React.memo( ({ onConnectorSaved }) => { const [isOpen, setIsPopoverOpen] = useState(false); diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/constants.ts b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/constants.ts new file mode 100644 index 0000000000000..35811c18de471 --- /dev/null +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/constants.ts @@ -0,0 +1,8 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export const AllowedActionTypeIds = ['.bedrock', '.gen-ai', '.gemini']; diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/rules/images/rules.png b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/rules/images/rules.png index 0d6b551e096613c60ac1cee0aedd73c966f3493a..5d88e8c95d43ce0f579f71d7d379fb2109025a2d 100644 GIT binary patch literal 71094 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

wRMh>lyMZ5Qp!V` z?=T?5Bo_mUX@NZgTj~j;GSBu_jyc=ClcvQCjrB>;AhT_3 zt`1UDisNBfY&di@8=Z&{77???#o>bQ2ws+G`@>Wvu7&2Nw-IsX0n6)Lfs6~fqa2pC z)>$4=e!fG$Vr|Vd3G7-oP0;fEG?Sq$<%B3+)3j3{b~ykCo8rp90&4yFzUdC<(Fy8h z+;*})doAF-=XJtqNJXHr(vY=A?Vk7rG>=vs=$1)x01Bay6bI<%N^sVi=5SECSFZ;b zC>H5Pa4ihdz!$CI7sw~!hQw-*hZrtUE0~Yu$HZ3+q!l3AD@OcjX-tQ_XqmhXeISj0EV^(a56Z?E8R)6vWx z-7WDtI}?AIoYVXFy%+A53=8y(#QIb90(lMIrD0$8YZnu+*l0IDZig=h>-k}Hrdi2Q zO)j`RFl|-+;qisGBsC=^g2QvjUra_L+q{pj>=gibTKwn;;pPxja@HPSk`#WNRQVG8 z+(j*Ks+g4u29=Z{ING$Cj4nED))VJK)}#twvvpLl#DKHH9DfFSm%_PlR<$7YWWhsi zY5aHOg-!JVmUTspHumyK*1TF7fd&_M{L5EE@l#Un3Zi)778@fcF_G*i) zb^fE@la$-@(eO;iDRCjvz6Cwn26g>&dx(=$13?5j8zLE8El{F*6+yBbc zvUAHd?ZfwYFA#3orls0xQq!em-B=e|yMiBeMgNmbL1Rp(Azo{Ox-}t< z5;IrpvjE)RS;lq1XZLss5_v{F%$DGI&3+RTRkddQFXS8F`u_J1b3r^z0SJ&$-F|@_ zK=j(4;z=(Sp950U199QiX7ha7Qpuy0?pL0$uf;oW5>6W+ja~YePX05Cd5KFBYEzh0gzr91OBEJ_@Sp`F=|Ci^l02L(C4SXib@Xg5cADn;#+(n*=E7Ik z`AqO;NRLzLdN8mRc;K*gej|=gs>l$im0G!eoUQR@sNpjOK}P@+iGpmC!-m^Bn(p~l zvh?ud3EY$R;ypH4M?dyzAnHfc`rA~^zr#I-_tvoz^U#s38)x!f7@_gjK3rZ~vR3X~ zadGG8n75%mGtI}u+FbRJMkE75phtj@%Zy5)MbLp+-P!i@&C?guY7V-v)s##y%0%M& zBQuq>t}4x3tdWa{C5AdCOGU5@7S$8aBf1lY=pd`)$>O0-mk$ERJ?PTa)~ZG1VGp$p^T~!0TDn2De6OTx%kfeg~e}{>;+7cR@r3K za{=GFvi|QLR;%TAoi-7Tbj$nPLcx)X&hFFsQtaH0I;@hj=0v5o%@@AdI-}tM9V?R>m>*qQ=eitRrThu4YRpG=buDMx-LMB0PHC}2+HUg% zCY8Mi*O}u}^$K~|^Ua%EaP_XR6o?t`F}o^2eb{3Jl_VaJAD9{%A=o{nDaa(7-v!Tb zmD{W^r4^0dndehMsCR;)dKG*HkBrR8#EANcq0$3qEcj>MZ@33U-f(fXxl5c_NV)5# z6Fa%unqbejE5dc&9jKyPz!!^)HHOXW9&kIY%1f2Gaq-3Y-Zj>ebVe|j=H1sr%0(LC zvtWc`F9&O3b-KMEDne%k!gBys&`3RV!$%Oe`K(g+ai*$(} zct@^ImaWK-A3$p%kz^M_=P2Jz3+b;$$m!{N)wqa;0pc?yJNmUq!;Fa5bByr%5%y>N zXLx5>Z4ZpbZ(#1hJ+p7^q=#(wJU@iuilm2DFmEC~?$Ofiu0zDEI5hiE} zu@~@F0Ii#!(6jhjV^*8U4bEeK-fXGJ7#I*c5Z^wUyF<4-VtL1}%ZjP%+sDX4Lb8{H zejPh?AOD|Hxa{Ts_ceZ0v-;2~3H;Nbtoep?ILANBF8o*FzEocR|Iw=yS3&tkDB$TP zIsS;v^Gr3^Kfl)1ZOPpqnTG;aO6&w`Ctnr1`JKlVnM_1-EEfq_V5ctiMaVENQ)c_= zufzGBe|~dZcq;AlTviVwS>uD1-=~a6gHjCS%DEr>25jA2i6y=j_yy`+G!rm{cgQ7@ z^hqDLM@RNw6{;1DpqC&K=DZHn6fjp-yZ;aIra2J6vLwkk_Jj7Nr{v5RgR?j-tW;Rmn z(o{@=F~ZAqc_@#zPCdpszp+rnuiGo`B49}&5R6P4a@Gt7vQ`Hz!rSqD4ifT$SYTk4 zrlGPLf53>V`P!%$!@7Vy2H;SYUhK+5X++cgVKW~$ril*k42WN0(Ao)FN~aBlPJp0y ze?z8~d$%Qb{3dny>7U=gXH3}+61*JWwGn?n+HQnLAH)s?`)`HEWlwG1RH|j0^R(Y0 zt+5L;tEDJ|lX*2IodH0XZBAJ!?C?#y!Qd1y1YJ5#+}4z?y$ZN$3Wj5jQZf19E2=Kw zIiMZkQL=s3W3#mD8~F6@3avLUc+i$OCmY@KG#%{P;$Rt>-lF)zUvZbAfWex&H%ENy zO^dS1I}d2_+#lIW*{0`Qg$>rrN$pdjKHgY#18RXmU-A_#P1&9rvVp0^EP$aN)NZDv zQ#b2=6`vvkJiinwS_!A=bY%v@Ng0g6e3>sVkeq4MDKfnu&7#;=&7Qd;6<7o(O>#v-bsgdTmXS9vCMSqwRMz1qsG|wc9owARUXKGU+g5R>$Xo= zFg-Rs`o+H4ej(-ZFNe^+dn@d)qmG66Px^m zS~?nA1|6WNIbyqbP^M0{M=co-^lM8FX^8{3#X_ zL)9NHolX;}aABuHHquNi|)c2Z~k2LG6NQSOk+Rn}CmTU7Z+_bfJO#j=Of9Zgc%WCQ6Dy(T@#2LY@`q9MT>=A9hE}|s{Wk_oo z+DjIH(iMDS&7QYXJZPXb;oZW2Xm`Bt#b*S+w|es zleCND`ZqXaDu6>G6;Sq-kFUCT+@zixZsqQ}Gt|y- z?|i{KBZ0V!aID0Nq03q*)G=qg&U@FdJ0 zdiReh#uBuBdXB&ieC+dj`L-UY@uGITW?}Gv?NWHxuzFX-#nQ{U?0^H$aW0a^oSawP zE{uo2_hOf1aZ${0wx`G95pZC}a!r0pWv+W?#(IsX;{H&6&K{HrL4} zITgHV1>gm;ChhU+1}x{tXm58=@}ECE-gs6wuM|24KSX>iW^-Y50MNP`DL#yufMayV z*2;mI5f1(xeLwMsz3%(giN8pWKW%nt%`;#u6c@D`0COQdV7YB8b#m^~&hf-Oh*U>Eut(!wJs~bkA??|$ z_wHp{wY*+sn~}TwLdn_P!FU-)J(Np^`!^K_5QhTzLz8`7LqA7#j0Ox*<&NC-hORHs zO&+OptXIt*@Wz)_V{u;J{f3GunAz}bvSgR~?q&}@?f&YG>&HVy^U3vu)wNH?W%mUy ztOrU8kAE!fdT{#Swi3kkCo_a#GhYY~&aun})8qFTu4Yj{-KE__&xjy?)bJF8@DInd zH{ctEmk8`MYFBM|YWMbSxl#?%TU3g;7L(Fwdy*mSb0QjxhRwj$peoUQ9+s;Sbqja- zbsBRwT~zixjk{w|JKd=E!YcgA^{<&}DsRn5ArGPyGrRQgbD(W1QnQwfgcJ~C0S*ok zz4NOR1fPV)pHbuSY9UUV|5O(H%tBrB(lm|rIZr+t=F{DKEW7-#A725%C$pw3fN(ms zWX}slhlm9M2*t9Lunu9M(Mdx-1qph!q&{k0p)FN;TFj;G$@IrfD7A?|JMA#cMe<3t zu=^5gg109D8JY_^yN5{wJ9`7thdRBoKZVnBA`M1^t1!z4+s~QOEW9Ryhvw#tvY!67 z+cPmwjdFW(VDkh}EI?*Z+Ju&CQQ?9xdwIE8W4B*5A0pM0wrr601lRa9tHKR;otU|# zrbBI4m#o7EAjhPAYR@Tw!jywROjs{dWo9JV-l_8;N4FiuUl4zZ@~DgJWoExb4jh%4 z+r9}FY1W%8AL$Q(&Z#x*!!T$$|9#7N;K`beF;f5Z=Xd+!@kjG)lS@ku@=vWF0o%YI zW^QJEB7=#%m)rb}boC$$g*X$Xj-So5lG>ednW*mdftw&p?8+G}Oj$1al^J#P4(#xK zeRK+BTqbM!$1|VpS#7E_ZBD`%FGL!pJ2&1b zA9~t9p89`K_nuKru5F`W02KuV3r(tQRFsZX={8WRQUvLONGJ3jf>=-xuxvm&O7GHp z0wP33YJdO%LXi?eLMM=rWFA2Gx8GUcSu?ZF%$b?|a>?DVULRNZ&`P!MGA6NU`!|mR zbyd00PyV_kta?t3vVv&;&fv;0Ivx-ZTIL(n0A6XN{fZMNH2*n)(N$Sl!x)nVqk!G> z6Fxw4FLLUJPbqotaaqmoTn52bJ5ua0Fv`gK37#Rumie~p==_$nVlU6Zkv&7!R5%jC$>@F!P(>)e^hjdl_L{>jlm^ayL$m+_rLtp}4n_ro@_Agfr~FrO)f zoW56LYrBbtZRQV$O^*g5&(wARMRHoo4+e$8adOZ|9 zP!p$oOHpe6K26v=7WPQnkY6l(?4bF@r?zxbcQp^}%oguEKo;>bT*7}zg>646crnr4 zHTqnXGRtCzYk`(mn8}&4wtXnT5cIAXYu*|I%*rfBSpWjdWO$> zc0wX&Hq=R|Omg$@EwFN#|Ega|Lv3$+r%gZ5*0mMl1OP4 zXs?tYN#{Cv|_gE_e1zpm=fhoBNI+E$^KllZsV@>6`e(;`7r-00Pz4*u$@)rJ} zS%j@aJ+RmbceMXwH#2xx#~Kb?=QR|r@Vo`O`3fGB*t{`)@L2a_L0sW4Ca79)0SkjM zLy~#J^71mRmFA&1zK(FETY-iVBoQx8;12Xjv$FtJaLk@!#qdK{`-qN6RU0TJM#kDe z=o#|%RF$>x?Q2Bp=v6#m;MS!1JvMrZhnyjI5utYCz6L^N&-Vb7=7?D_TT+uf9r8lc zJ}{eGZ2TT2-VBZ6u~66o5?4boo4uQ0H59zDBp1gjdIxm8;NTyX3ANa|D6_3O+cqrhr83J`iA{?ZPCv(N@+j5D2*1%)=($*nJGH6cd|@%?=80& zp=`AIwBXk)|sGy&9l8z?apZ^0o-x)2KSEe?t`n& zHz&Kz(`uPfP=|Wzc*%IFdQ}uq(Ij@K!O=Z0P)mGU?;6g|YKxJk%yVLF0fqoXlcA<` z9%!c@6J{?z3Q$q_;MB_P!KyOxH=6Vw=4hbSDmW|Nk~ZWC9I?@o_W1U^*Hn*NlsFH` zu2(fSah!FTI||wq1_t2HU6cl3+=V;Da`#_fO?)wp zOrC$VBiGo@!S!OvdU!-A3(% z8MiF7fTMwV&#!bp@~Kuw#L%#+EO*{b*LrHn3@M=2zmBT2IZ!Fj1hqIf7{u*I`3T0G zDN0IUXo<)U>CNpczAU9j%yyT}S#>iKtWA-MRvlpfjqTa%K2S0A_7 z(Ss8$MiwSFNJFnkDm2cXH0g%D=ilD>=;Vn{Qf2@9tHad_K%d|`rZEB8$(x<U4R;<+D z`?lK-CF$;Shj9m|M?a5Fa$uhYqr5>*4epL6fgn6vM6mQF@Qib1(wS7IXR3AyhLCqXf{6Ya|YCT)WJ3%zP#?;6%HNBT#mr z7oU4Mj4VJ2E9P*n@?d({*)(IdoZ`Cv!pIgS37wNkKfN3{ACd)BzLKA+|9}}FmGdTd ziYvRn5k96y%#3IX0*ndBazC;4HI1ytfM#+n-l`#X%7Xm!cEP%gD7#R<(NTz z&~Xi;?8&vD9?ERsh>m3JVD`Q6lu)v=vR(P&@=gi?o3c1Rld%mnzS4Q<3zu7v zY1FLN#Br4Q=^o4zfi4BEbZ_oimVEZJ$I*82q}o^S*OiysLLeGp&?(&pDg4&$(fVG{}_xf?H zlhg!znRNUnSdhyN)RL(^oT{gGy@~i12c^NnpI`Cd4S!J@h*6$Kno?(f&DaY-pz{5- zx=eCBdO1J;W~0vw)-!UDG-isBq~H}KoF82QAR-FJb;x-Qa6_Z4E^BR?Rw#iv0k-13 zN3&J{TiHXJOEHQi8QzL9800;@3m zgUpce6AB%*a7uIC)Qgm9(kOBLSf3>MDUC1V!SxYfL$e3Xs`11A@F&Cd#FuZwJH=vl zb*2mo*ZrqRWxN23ub$bAynhPB@cA5VCkQ^~Sp_zy{&ZAvxJN8V6Wt!GrD=#o0+xFZ ziR3-uqi}c$>qVW(&Gpq6TmfV(7nDfM04w$@09t#RJGy&M7rGzGc00AAKwaMqevvtX zh3{7Xa&BRk;L7Q4+ol1#XfqWN)1N6>?tZ#Nf1#+&8K z()-KXP}i!YU zfxFN?;2YgCu;rHg)RoADBP~!l=}$pzVp-3C7gdj14xJAvhjE;r$K~8>p7C4hT?*nZ zCsWNK_~iVuT^tN>eoCsXQD0=ergeUG!d<~B6d#mp>ig0LYtPgO1qV>pzOoG!mY_ z<_O#q(3Q$hXjNZa2K>3$dy+AwX*jjk==j_xVSuWth0c{yNb8hTBa|Bn1%u&2Df|t6 zs=>%0&OAqbvH?0V#*PZ`u9$iFioaXJ-YSxDW5XBz7GScVv!rd`~~BE_&=m%B%xzb9(!SDa>4{#E)9gc!q}75qom!u%9XM+>9K;WobE?ew z*^;+*mTwtAg4`2v0kDaU5V%!CoG(k)Q4gA{_-!?SS??PmnUFMpU1)DwO-7(`Rr0>* z%L?bYV{|n!CUD$;C~2L=!pJju$m+Ijli5!BoGQEjFmnk5OjljnIg=KQ|n zWfc9Kb(GCF4{w3eECN^wpaam?-CIb?)u$F6L0+5}^c<}b8`JCTcS6NMeo=Jz;~P(2 z{-$@$RRkTXIhwm}Ae3x$l_%y!sSOQa8V-0axLg@|JJ-ixa|LTanf(;uyazzrSxSG; z(eTE>l=M0|^Ac|-r)+MJm6KfA8jq@5y69H1T^=_k|YdCI}#-*ogOF86_Y#Ik?li?cN`)|1*=6(v4w}P!vUXGq> z6Qb)BkGZYtye@rx@|fs2ZM1-TxMhEwMxJwY2q^DuFL{ee@lJyz~<-; z1qzIS64)bEU#K@UGixen1j5C%&(gZrNw;*;ZYWgI#bBd$erod^1f9e_727f){+9{<dpGbn$jKc;a8N%J?b+$14G`5{oqhVSD{i9?^HK++&ROSAcKkJ@*5t$h*=zr24_(8Ben z4AjhwJ-aLsLKq4}nff2;oUe{Un=?lk#OS%Ekilh|h>q#*kS&C2BkNc1gYw@RwcrpX z*R?nCg}|DYf7VPo)S`hp4T_6|b2crL%V*@LP};YJBFe(rZzOX7wZFK8j0v8|7eJ4w z+d_XCsP7EN9&5edKy9$9M8|FI8PF2=P|Y(zrTXk(DS87@GATL-E7TBFOvo zix@&o4mUUdtNSAXwwsK$CB<+L)a$LReUjC%2LLKDI{`0wpNp|B{KzrUD6a=^96eD_ z1b52*d%XjU-!JiR7;r|g94aXXfM`|-)SqRU9AO;#>Vo<~!ubQWh@%nWb-06JcJ_Rq_A0BqH2F_Awsw3izk{DWd&AYTf$0@du) zohTozt^l4`X7u+H#{d$fVPMCRpRWuucBl16uwF^GfwDh#YOtZ2;x#6%lc62_v0s`@ zzE9iuUIM@uRs0_pP0;)#KND8<)1VNipaAsR@&HN&O*g`_U0o5{h$S{rE8tusf6nFo zUs$H;bz!f_-64bQ)r1qRJ=`h0SM#@=Tiw+R1zKR5jRh@J>*iq$<*EJO5Nu(aTfReZ zK8ph2Jvs+}!}|l^74Q|OTk!=z{`cWlWe>D~vOiN>@>G@mk?AiPsuGPD?_}?gs{jg^ zGk@7??_If#_d1{auq%0D7^ui^#JD7T*S;6mqWCq&yZwG+T|f=B()pd&;LE)}e83F< zg987bZAt(%5Rlm;iYHHRl+$`WU%!5RSZq)OYID388*LwF%?W`t|2|V%;l5OMw{H_|HS6Lj%v-*5{mR6?RwC zJPK$``*^sZ=ID)B8*OtnwO9cFIYJ1L&dy!Am9uGnhZLje+hHEl|Dh=o|!U3d3t?h#ueA zH@<jZ4h%wGO@jAw2W19UcxEpr(zQ1R_!(S-U2W_i>`-#noz%siZ!tvY(ORZU9?>4;1A4`&=Hm<6 zK(WZRo1|hnpq`pV;4EM*gg;)eLB6L578}0GT_fuR^oE%+;Tbs$XiwTLN~x7*^nk*3 zEF7U8%E!h1s$3cjv~Jh%$>}?ZJ3>z0(vpJ1eL3-wIlW=Fs~ZAlO^=BgIi9QlOH827 zrm@<9KrP<4;jY=3tI6%llH<3?4=+~ z@Zvc|0(8>%tw;hbi%=*Qw=P_wZ$fJ<*lN4}&z2h*IsNE8#B<_i2mt`{UoY&xq)uHhHTO$jl3<&Zw_yfcPm<@+z_Fokj0S zaeJ;vZ6+v~idFSm>3ujQ>H7pI0-2dZ6J7~b+W@B7{ge$vS4vo@DQ`Z7+Aj_r8w;_$ zm&_&JMJ>aeerqqW%zHVY3jgSDbK|5U80|ZzO@912WL2y&|arPrG`jQMBk(pRo z9vDwd^x&I%r&%sGXt-E*_Md~f|L4JkH!^C@(xp;A1QH?SnHpt6^f;O27}Pl#U{fPa z_}ZnWyrB-=2h3ephT#{(f$D>C4S>MppE8V-$(?&`6#kFS9t~1F>|Hya6oCO)<7LWB z#K6$Ame0Pz9ups8=#MmLEv^gmHVW=R2xxQicZ@ey9-CS_5Efuj*gj-a8H;fl?db

VmC6nb7^8_`dD?qa=`#bj=c7n`_~Ull9v8rEG`CVpw{iAu|R)$Th#@h ztVqe8vFqZlH3D|XppH6zkRd?fv0Po!0$A3>e_ElWcq$h^2eym*v)$nTZabX%o;o7V z$8`0|m1MmxW>IkpE}@!%a*fE%yFfSzwAK+qrVGej8UWZ&^2}uKLe)GEO58oFm4vZL zXiy)us4T19LR$S{U*n@8om!y0K6oz^0MrA^2ITt=urS)RGywrd``897wD(KP-lSWZ z5~3@4lPhpA4v0{${b}zMKIa59rvc2sUM2=t68*sxr91yNeh&N+2Xc^*PYu7nXF2|} zIA9HpKA{d*P34EjS2?$tBjXN4Zm$>6n@8CBd@i}X!qCt{d23U^ZMOk>qQdjqY?oj~`k4aW0I$~TSym$H4OshLOf=zEQp z0{HM1pu>u9?%PxN$ads!VKTd*u5)3JjYFD|m}h(9>MYQ*<}({MAWBFGNvlJnpQ(rM zO_g0DChGrPitU~1bMCAXnA0IYX-7hBR}+e8V)1)ge-7E6a~5ozm8G^9X=Q#NmchkS z^cZe5KzkTq+tp9oHKvhul3N#AKE6HsP^QSpMMfygenhS$BTbw9P~wkR83V-1UNCz% zM_^x&_Tl^C4azE4_AK$vkMONX%wq~+mY7J$qU_y#UlyT$QY+bjZdbnLPpIiNbppWl zy+QrU+<;Jfyb6fhzW)-puKu(KOhVyLN*xZZ)X6HhuRNrk1`H#oblEjQ%4(6JGeIB} zV10a50twgub-@G>*Md3yB(@*I)X!M%iz)4s1_Ms0mMOnGzjAomI6Tlk-DnO)il znYK`eBkONKEr!54*E@!XI}WXOIy+TLD~`;Cy+3o?qrsQq!Mk^pXz$$NTZCyoru zFYTlsq2GwRZXT9eIW?!za11Lin3wbBh`0RsM0n*RaPXOzl_PI#&ndQ=b#!PZJi^t6 z&Tqc$_*QWqaPK|dO+w71UKNUYtR|Dy6Z&{!Jt)k&EWiNMdPpayvN`AEq1v2=28UzG zDZD2SDD#(&$)T20R9F+aT2@vi*|y-;trch2`%F&&t7m^iy%D<)NNcuiCDHp8Y7|DH z{7&j!%bliMSy=c`)AP5L0Y-zHi(CI-#W%w2tl?QCPLZjW){nn!jUdBSP@vNzv1=DL zSo427HqP0I2!L4Q&gVaK`lIdd4g2Hj=+6%XS=zu=u3eCo8xTHN`rG>`#uj&Ry<;LD z3-0~4$TVQafI{Cl`XTc)&=B#~0dovjDF_6O^$&bdLR*~q+sH8_dTZwQef8TJCQrtH zn6uBZoUZm?yW{@nK95IQCKo;$AMQY~=0M1-+3B#S#}c%SshZmsrnO?%eBO&3DEa4X z3NL~rxcT@xBPKsi^~uU!NwzIt#NiArbd1dVMpMm`xlgkJCiLEZ;Y|e%0Bf-XG>g5T z#)NS@@4-I-2WR@9yPgyN{dW-P>OU&jw`2eGywm@uU%Kz3twTz#ggp*ag4- zX$bf~yJWt>{@NN{BQ^M)0Td==h*KZ*>nU)b4hSB{ngfGTvn0S^unul0Jz3sE zCGVFFD2lk#7iXD14zQ%1>JO`P!ez~Z?jeL7Ut~s@l9lh2GV;3W>bNkoa-Gd>&So6n z2<2KqyKAVSmDs{Ks~)k~_0ClIW#0cA}WtE;PXB*#ML@5QaY636J&Qb+KS>RB^B zJIXY?!0Dd|x0yz)Jck-Hr_2kB;_cT=h{o~uZJC<4-fC1W0kZ$-gJF;P^>q4m01o+H ztQ@fLuakBX(km||*K@c-*_LGzL;>{uR{K0wA?q(}L0;`+b?^>>$WguSuJe%5ddWC? zmO1=#HCFHkE>S&+V30#oGtskaWIA<7mo+@vaBR+1ZKm;L#*_Ht z;hYWQ?N6S1p@EZc>&BFWc~vfga@hb(dSrJ_*6*``%{jZz>l;Y*bl&h?MM{?`VZEIX z6n^;X#OmWi)u%40633WDmie)!>DiWiG0I{Gq;K5%_U z%m1&Jo{C?|_nQ=2uj>h5^lJ6r9Ag&(9XaRIDpvA+I=|PcnbYRdbUwj#DHN~@=s2!S z$Zlnij+-2XT<6V}qHJ=P5u+zIyW2{B3LT{`uqWoJyqf0}&iCt^xXSV@KR00+|9p}- z*E6O#gNfo}o~}I0F%yw$;0F@E0+5YQl+dP~V~2R{c)E$Bu8G^`6$^`Z#e;XD(5;-A zz_{&LbVqkf9Yp0w34rEn&eAhocio_8IT{!$6g^ajAYJGA?TNo;Qo%)NJ3lAI^m32Y z`i|}3()&Y5#FWu8IG5HpP);mQ=)z6Y*m3GqL?vIb)G7&fWt`St#v7LQbIuGG04qaI z`^%t-pLbx79fSGUZG_v=T^niOV4dEAp2qFE`AT=mIr90xk+(QuLbxNIo$di*4L+lx zn7H}MG`(i))rx6x*<$bH95C^yUWhS+JTJm+OQnm#cnSfSmuQW~eu8a3_lVnyJf7-&nf@{wQpwE70=P zqMkr)w;Tp{9nm128(Y2^nt>be3eZxWSz)xaHdJ)yG))m%VZY1Y^L%8}AZ0y3 zKGAv&J>o21S%S$LYOVMi=wO4W5P+{^s1JwIhTs9Saw8QNBl1xJQI75|%MAe&Wg{O# zlv#dWqKcc3aR}I#k1y$BcBpaRqo|*TVNpF;0jAm%5|<-c;_Rntca@XneSK9mYkNX~crUe4`KzNw>UA&W zSUBgrT3Sg&-8MDzxh$e+do-r!?J|e8782pT+7RvTl-pA`qK23Qz66NcguM5mH)w{B zbh!H@IrDPI?PNVCKCSQgC8TsyBo!NwfZ)&p{Xq&K^K5FK`U?ljJ)xy+c&?t!72 zzf>t%0*+4`x2Lb5SO6KNuZvKgXj(4?%8`5QesU>K%&2s{v$z;=UQ_NH`?^!Lvg&Rc zc=9S_0%gbCgdjY^U#Ds8;%5#5Mx6iRfW1`ZU4`KZj>xlR{!#)>Qjs(8Uqd0M}%OlZ$xQ%;RG z`P_bTBe1JFYzDmAa9KjZ8nqf6y(wd%j1|7vmKEq`WTS($sodkrTRu(HC?8KmK*7uwPiGohasU?Ld1aH>)mcF{RPVF_Kh(P9gv~GqMQ8DkAnY}#kxn;CV z1?M_&-1wydR+5*sI-|j zG;~I9gfo5k?216C`r6A8E{%3j5u12C2$U~@keOIYPZd?9FU3AF*%kM1!4OSZvvnlu z1G}YXuD4+doFe~7%dC?vvqG- z+9$=SZP_4sn3YdDGP%r1{~U@DCY05!t0$;#LfN0(Ft(x2j%OGwH>~hAto)o>RIj@- z9z<+@|8Tc-$xjwDnOC=A6BqMXU#exZ^V!8fGG|ue4SLrmi zY$TAv9&lT$ouaE;JOh@2Xr*+Wc#mpadTLRL$B}TQs*7^I#o^e3@BS;Rv<=eC%{SE{ z8KLTm6BLeiVw@fO&5aI zeOjn*_>r8GWhIJc9*e`0*6-nDGU`!T8PGplB?f=a8Yg3t3&pp>J8PO5;Z$Pfk(Slu z47G`9l=o8fYcF)kbLruE54aqkj!K8weK%pK7otQK(A>$V3Ch9&9AdL?)4bHBC!?P9>MC>C^|CR*?HmB(a>ui2rmMgQp@$ja zv;RJfrN+Q%i>b;J(aNJ7r>PuZ0XxKw@jdn(&gW^7eM6p$EZ_2fyhf;^%oO|=wVs>4 zeii-co!FSljgSSiA-(tU@Kb?3=R102p2Ll9Z1k}ETkF$o+VOv_0L=H3}%z5g7C=)&W|Ch_hVz9>fCXJ!iJFuTSi>#G7j$2bzN%KiOH zs+vo`hmBk7jj`pNZd^bO3U9~8kXzs*t-o3QeO?8^^VEf7nQ?VOV7dI%#V)OKdg+>1 zI7g=to`>$M&6BP+k{Gg=7dmBBqTw4Iw=O&K;Y~$lv~!Jw_ze-JO&P@u~` z)5yizHIT5|uOpm$?85|iFo~ikuS7u%H!R&K{D zcqpJguxQ^oECotZH1r7ODckNh9HWzxzH8nPl=$hwgAc*kB;Qr8C@s3=xZ|M7uZD%I zkG=99JkvZ?Y`sw`#PG=vF?_apc%?Q_V6{%@Ly8(|Mwe(){9|`P>oGV_rFu<)t*y@P zuKfGDP|7d+S0^6^lNan<7qRJS#dWdwGb`~;aWq$Brw(7SpCw!*-Kxh_#FC2td3EXf z3CCoc&vjvv$yr~NJUH>)(GPWAx?dW#=9u?L=UxFP?dqF^TCuSQT<_T;MLTq`5bLa~ zKpASRTfi4;w4&MRjJzc9T|^j_dpSK+72!(z6woZw`s)1kR6EX>i~^wxAKW)GwmrNW z(jr>joi z6#>-wD@LLxa-&)igHX@G*IH4D{XXxNKVJ0zu-kLC%&53(VOfET9;Dd!w@cI2awLA* zjd3F*lq55v-*{9>=yr5Q+~C#@^>RrtXYk#Jj<(Q-m!xtfe|xc0Y7VxQzvF zH7#carYP{w$a`fd3!vkx`_lPAJ-KxfpBgR}`aCw|^+BJys@|T~>LpU6HNG}Z^9odJ z!>%)PpwpMfc77D&GMz|DFHymVS`5@7j}&RalcA3;K+3;tx!TakvMF{sCRfo0-5gSS zC%#VJJi};w^C&MP_pN{z_SJoog!vCee!BxZ9gfVk+T!V2(rhV8^MR|BE;??uTb!?^ zcl%^6Z{p-?p5!r?wK_6qSWqa871DadQhTU>mt5EF*Ex@I5z;1JyKMH^_7ML_!gqXi zV57aB-)Xdo4QBnA_AMZJZ_X!R%>Qe+IP4kidmi{ln1o|BzC4!qI0V87M5Kfh3<15} zTfzUG>iyx%e4Ve1%Jm4kg9*1z4RhSc&0qUa;Nq`lmlsf_AGXp8<N3!+G8^UK)#r z>t&$Di!EC8duwWTx&(t%qT=$l;aOF=k*)1P6g#yRJJDIY{KhwaQq?DXrH_l~$IBS` z-CKp(N%Xl~k+V%U_uHI&gkG%|nfsW`j$S~__q+MHauwVv zEl>?;9U8gK?(L_P3x*78l100}%OiPtat4OvR~;NlvDW}4_v64!mlK31PfSDfP(89p zoHhk$Nq#9u=j^mX54D!tQ{%u**q4PrXHE%vrrJ49RX#_o3>c~FV`A>sudF)=?3($j zxAT2+FW)7gM6YQ(3qH}1Hjd348vs6~s90w6tmV`vHipS**V4e2FRM|WmkS+dHu=%l z%JnvM#pR;opJF~dOi^5HaG2P!JpN%i=qv57n%Se(GcB*5^QO`bPA37+b4Bq}Rbt9f zmiC{pB|r0M;=DMG=4r=Ap=uDqmIbn0m!^wH_Px1Mqyv(QE)t%fiJ_yqiIeBNRcbG@ zR5S$WFR>{P9Rr1*!Pp^E1VxT!O-uWKy|uujOpF3PTHE-z;)>$+y5S&B6!|?5SUdWj z+tah1ufxUXBJ{AES5FJ`&wQneZI^Fcw;1nk{)y@f|>;%p{`h5R*c1$zp z+^c1^B$G`J3rT>^7y=iK<=as=jcMYK_}Ge8qsl6$cXXdnr&3ICd=V&YPh6^K7X9Oqg8}fcCEQ3z`xZH95 z6qSSZ7kNQT&3B+m0KsHBzgTlG)$k!jy2B7R)I(eMU36R|UCwCpc|Ookao5GflukuT z_8kzB)uk}paQ5|8X|ttNiqSnpy+{IgaMC-aE*P8f@6hG#UOre9pgQ~vM?+icx`HJ zJEXj1&W-x%B$t-lov{F8!|qxpnT{+ArdAu{K907Df=~1^^sNO%fq0wp_0UC?C?tgt zkIJTgsi2j8p=Fx!smlFKFKD(aKfKcL9oJ)e|CK-bCePA{h}}hzBAX9>*7g^_pabz= zX<@mj>wQRd;9GDiegt?RULQOYy0I4EfT@0L&Ui|Ky*BMtA+e+q#xgB;_1*kx`q~w4 zT&J}wuk+db~JVkeWhg11pE+FPObMt#& z@_B$jzuGKkx{|)KR46Z#LOHk$6gJO&wbv6hbnD_Fbedzk!4kF8yuN^UgfBAS1t)vk zlqcbDavamt(Urf9WBgIb_HBg@b z{^U@1y%GANd%iMH(IbYOij|R3tF%ugA&~q=UdK<)v?Qgsxn*pA<}$fQ$NQwWv(ctA z;x9ApQy!Y}IKcmz3wTLit$9GHG~ryX1;n{aN3@C1RZ-{l<}%g|d#x|_&pYiWPqQ<( z3ys<%?l0XH?beaAQ84I^VYl&sCGjN@6Wp%$Mdj4VNF|&Vr-DG=BI`R+WG=^Evk%<{ zt8JGT|K;+@a4TLcG$t)b`f;j3$d9^Zp3+8nG?qVaxBya|1}z`6yJh-Qfiq6Equ2|6 zua$j%mAs*i=^2;4=fx{HcE$o0Q1?!h9v3LF%1fP&wa8ONv9fmzNj{>b)RpC5iLnh@ z^ob$ceA}*5RCjniKI3)EVgcJ3JMYy+KbKd+ermb{CrnS;W;w&IzM7Ul++V#7JuU-@ zdqs0!`Wd?dt=Z)1OcvjG<(I*yA~kZwy9N}vIP>~`m5sPcH?|D!x%nu1!?6C*+G;yR zjWn#zVLc<-52)|>d|bOf7usYsb6VT@>KDVP*fZrlk7`cV)k&UbxtW|V5~?%gV5f$j zXBXH>TUr;bsU8kEjV8|%6t~8*5kd_o*&5juHJ)PsI-2H6-43LT?I!Uc?Q~U73f9C= zQ@>2lJGe=%Hl*UtyYQn7+(z$lT272{~jKkD{b|f z?o$!M&Ax$4{i}DvqAiPy5#a46ZwZ{F8p^Mlqif;nX%!W!_o(SalRc!NXAM#sXas-vJj@hlSDeEl(eb~Qcj2wV9+P>qc z9V@Lw>hbF|Z-mU_RPKrn{dV}y4+tXFUD=%Mbs#@dCXk&*;zcgFCw-NP4-aM%MLcBfn9^4Qo|hmwaM$Mlt}WvXT6a?S65 z$Cq(aXASJBU9z6^pv)SRwhz(-cwHrAe6)IFtTUJ65XGtcM8E^c{PNSZ8I0%3Zr4z9r+fD9>SE&>l9#q23r55Y+Bv zTCWyapa;Y>0+#VzbBxcuacKv&*6^(CT~)@B$-Uw>9|3{ zxedk-ZwT1~p$e$2;$Q*785R5o0j6sM)z=}@Xh{?;h_b| zpgJdCUoqxSFJ5RNd%rnFv=^3@=>YK|=Uc8mF3v8ue|lW5fxA#?zca%Ae-@3|JQkh| zr~<#g*_Ja{{z=f}9h2?;bN!E^K0oP>-^~(HWjp}N-C&VF4UYa7MvhD#+d7@+Q&jvw zVtmoRun-v0?&4Bxpm$;u`|JJvY!YeqPsGjTzm2##hUf?$_0aM2>pU&1aP{25b-yJR z9t{`Tg#-~@ot*+@TMeV5CXqwMZ1g}(VSj{op2!?1_J_@sCDR%(49GFq|K;3U1=YdAf+Dn?Tz&`5K>HC;w0ZJrhU0A?xM-${=tBA>wzp~m6Q?=x87*W za&~$o+iEw6LgfIIUG=H@D!_QpU)rxs0)__}`O!&f>_rgv<^psQb@dP8n5q1^tH%Ee zamfERw7GZy+q>Rq8ypnyOUKvf~(Rv-THVFcY*X$xr1zFje=Y4%M9vcDWxGBIZH%NaOnD!3uYVrqsODG zFnk%dvElnr@aX+xKVOLzhG8H*MC4X8LjkXZGT5YHO991x9kb)Epd1p3Y{o3>W41>o zmWZV$;@DM#W-B?VdLXmjWiKzprETS#S@2GLx~!t?yN(VB<$(*IXfkqCj<28`rqp3R zYfT&6+NBF$dzH{ry9-=;HgAjHYsWQX{BNa{L;+ZLQZ4P*OE@%iz0h|(1jQV2b?WOb zOrU8w(%~4?K=crdXc_DuJhPZkb@J39T4Q8QP9pRCDSGwLO^eE)2*EO-qM!>vV-4!9 zZQ_@*t)pR`Zb4R7O61o@BK#5eT_~oV>x`fuj=1h88w7HCmq@5`3U2Swb2`JCW!%kC z?*K$l;sqI45^YCERo~R?ep>c4D|Pq^uDlYJ?rTTRZy@B#`dr$TdCTd>FI@5Oq>s?rGkIuiN{mc+<{=4SVa&W70< zbY+H+3iV5Kz(wHbPFUV+guIFRiz%o8!BXf(jxX_jW96jc-0>GK{*)U%*^L5FY4K_& z@@}m_2=ZP$91md2i)vv9dqVw9t;}&UDV8ZB>-2V;4duZQ3#lO>BZ<(k+jJ;s=JOHI z708X50!Ld}ya2Dxjo1_PiXW@xC3M6$JCUSV(tw#wV&FJ9wNawnH}^=X{me|ksMsc{ zY-`@;vVm&zrl)Plrf}(x!mzd)_ntg5d^=vO7f%Rtu)gLIKrH>@&VT!^JIj{Jdy+Nf z;nc=c*(-Izjm7mPqH@(~Z|?^{F3HK3>FYTAx~ar)zz{L9eA+XSp&6Y|^WBO>QnR~Okm{O!rpw#fd8r&(Cx#v@3b=fuEu41GMCAo!&S#+8X~rNgJ^yMAB8 z4t#eL@?aMH?5mej0-0%Qx%>LjrZ+WxpV>OJSaVI&Y1*XOAqymo52M6OebGwAJJU+V zu{+DO3}@3RC9iSA=;8p+KrudEUY)kAnJ*aLSF7mT57V|-Uq8YP7nWGF>UK|stcP$0 zWIp(LDs)`=A`3_Td`RON<01>#rlm+^XSYTCPyp|UHl(X?D<~4KHAeVVBc_Mgb_2;pVWplmYRRYBoF?M)xgGvCh$As@eMJapUVYP}-C&G0W64Yyg8s zkM>_!Zd4>+oja1QW6Xqb9&f0|E*e-SW%mEoD}DrySTo;0_KTKNNBOyU_1c7#SbkX* z&zPaEPcByZ&42ah^Px!$nSfOt?2^WF)NK!G3(ip~Ys7$T@4798IF%4=}L^WRo|YVV9}7;+;_ zv`2|dn(6nnm<=&;7j_A$hh2zoL+iU{l#>F=^*iTISo?1i>*8vGFF8iw!MlN`5&I{} zpX$3I0;O}gZA?!*G2(pmZ&TxKP4s+HAv8KYjD#53>4_IT+^zqECn-}ObmZ|2<1 z5T$UJQ>}!O+VQuP&@NsdQrOxk4~tFSumrb=`)69B^GATHubCIGN(dU8IVo(9H4)bVYVS}&@z#QdVG=Lp_ zUYNWFnS25`I%=8oP56Emd%SnWtaG+7mF?Pmm3}7{0Y6>!Oa5 zkjx0X(lPG^C#8yUA0Hnq{ba`rp~P{uAe-4>;Nf!6F4~X&tu^O+Mzp*Bht}NRwWk`k zd>JD-);hKl0Ls2Yncl3HX*04>x8s z&I~;$V0d$!kf? z_J{pI_X7+|o4IeyU(>vpG~20*znhhS&M+~FGHGZp95*x@F?7?iXlP;9&T%#I8Evq~ zT3lFO;?w6VvS6X9Nh!YL9@R#U`vjVQ*j-m;tXv0_n`3L)BJ`6$_8;JhO$jW)qcIu! z4@S~66Z|+}cb5pn3Ff;xLjlI)$E7q*yjrOp?hh(mQCLbn9vEGlqIamZ9ga|GrMLZ& zL;1T_LJ?#=zWK4rY;)7^Io~kLLdh+?6D$jzjqj6%876`6G!8lrx@xOVdv(< z&*+69*Q#<$048}?Xj;{V49zr*72Z7oBx1yV@zYP+T<-A*5mepYjI6l&Og*@L`B7qZ z?J?-(jG^xJ{_i{!0b_!mV~?frS<#>9>&nA+?wRQRvUok~TU8{X%5a8ktOWGGOyX)_ z>7i5kJ9E^s&dY?froMbz2d@lYxC0NMCbz+f8!Xv!MWg*|4egLTKK`?v34XsI_?~V_ z6-SeZy+lmjLHONcKmzTt@PZ(mGPfbEH&97&`kPm{imSV2Li0R>@%1Y2*cF9B9~$7u zoR`Z0A8PbU?rQL}s01k{1Ys}0(}3hoEa|RN@47DcB1WwYr%>w`pG~UGFDRFYiH&nK zDtZe&wc7zORW=KafHcbnj@~qJk?;a*fo;ybT$}~BVNXkc%@b;CEVZgKAb&;G-ww?! z8amP3Q15wb_e*Wt@YJXun4{1xPDbDYPOyDNh)g0Ofv9ZmgEEU^mKSH**GNOY9l0s} zMQ9q~Lww7<9iAz$6(9>LidXtzpX$|4oQNwr)Lp-4zXgn3nW=Xgcrgpcd+j3q6QnW^vcUbsgOe&!pZ?;S zyooY~i=`-w!CGn*3fSmG92YHNG8DCVZcY80r|2_+yW^jS6K(QT0Yd{|r;(x&S%W_0 z%izvA=GcTj9l^Dhxi5|o`cN((JAEcTLUe`xcewLSlUid(OZ=mNlEtAqQv=lxK)QZA1C2c*I-uPc$E{opx=M*Mx`?VRCzys*x=aE{gV^ZDxH9o z009D`s34%yloAjKz4w*`L5d(Cy%UObLZ}HP<;<{L-}?4Gd*5%LJMOt-k8w`^S&XHI zYfA)S=Osp!*^(;g?-j`S_Azv#tE7N8cEt=7} zfbDD-fIQ&7zXhi%w(~kNp!Lo$`)-ojHO<5{ELGeps9zGIg!Y=_IzCZ}mQYo`F5;xS zd-0RgPL`D69hl(x(E>Zfy!-`^Z&N-uljm+)P&`lX<(JqyXq8$eX%VxhB=MuDIh(eH zq~DiIG2F$j0Pe4vKID9em+AsU-|)mETNj!VvQaH3DXac5jHpmV#ObHwK0I zQs6oSb>q`Nzrk_Yw8!^hY zxp^}79FqK}W<6goN#FGcmqP4Kkl^|Ct>X^Hzfg~n%glW=(-jZRjfWksE`psK*`b)t z@hA_)Qp~f-csb8GlLt42^lw8Hlzh*j$;|*}0)UB5a0Nn3-tB2-R+k*A_fJvx15pA7 zI`o8PCfR4Kx@~K;*lBOS0*fi%6=;&;|w zR5P(JuxpE?;G)OjWaZ+s-H|pLQE4E3wkbS)f9R>r798$F=4~sxo7joS5TJUDoSibS+uHd>a~w`y5kPga)GVpdn22+%zfPggMaUSogu-5Cm8-=Ofvv8!U4l5{M~T(s`;dEckSQ zNLAX=lJDB1h1cMU??LiopIN?8coT%9PneZED_pu2)%arKI}Hv?x&wIUr#AynrpQ^r6XOj*U!h!y9Hv5<_S+b*W7T7RQ;C{7M6JJ|_ZxzrI| zh_k3(X?>mLGYJ(_u9C`P#O!o-b-j9Z>VeP&;llK7ACe+Yi(Vw3moHZ9&kf>C4Visr z%0?DJk4f^y%KJ=O!HaNJ1|=zt${X%IHNSx2Bi)GcAtar(PS6rGm7@GhGc9=}yAB-}Wh*M!EFZV!Orw;^H z1GsD#BHZE{$FX1s1vkZurrg}-7B6dNcrY9P-YU)|;Q%zH@bEYq`@Q zL*}&B=uW}*^(PKr1h8Johd*Uj(*?d_Xo%%OQocRUV3 zrjCop3pP=@<@=tjZA*OH2*X4y`96nn@;1hO)o#s2%zkzyO-iPsI2{sbpf{1rTrKmt z?J}58OtJr=7(L5e47b4DzwV^Rh}g_hZW+98L0Y=pWfq+feG1Ck3%QmGwN?PnbSeel z3{3^sYtH;Tye!d}+)%M_RL#nEOio$}nc1q7N3%sxBaiB1%SPQ*1_#h$C1qt#A1#{( zjYCaILBQK10VK%-4y6uor4gE;#XSC)WpZZMyLNvQj0wVXJrqhRHV@g_ew_vT!Pz^ab~ds1Oeu9L0p1LXXnv@GLdr_g1P z*3+QbE1#Q_P4u1jc*v{y3qshtEcTCdhLHQ?Sfm zIo{n?>*+HH+TZ1=f*Yz%l(=i*iz1_8@GsVkV`P%U)Fg zJ#ll+r3@EC!DFyqW1p^Him2P1{kq<~W^oTY>}5AtHfi#@4tJp+tBA*y2r1Giw99x= zQ{h|_+YcLTY+68t2$g z3oZ{=V5FF+1sKIkZVr%+L6!esyE!cD(2`%V_yZT(R%S;3DZ0iPX_Z zwQ~=`UN3oL(7u*Ij+YSix5SLq2MvSsAn|YA_}3J56@xee;>BBZGwh9(FS5_|#_u_h z*%~!NN`3CpJ|N7u0@tHS_e%Q8o0uCKKIr}60#4J-e!B(Y;c^w)S({Nx4BFv(6AY1u zRSL^wA{}R#AzMctLEjMDE^;jctCO?dEDt_~HbFEgdVfOHru~el=MF%!ZSe|{;tfCZ z1LkdeW`VyEDr+Y7UxL~OKM{$%vShd(1@+64sbQ*6O-%x556H@TbRtR!NTyeN#nKKa z=ZZ4txZqXI(FDP-^z}^e`m=p0$xC2f&`kZCo_Ol z{iEra;C?^up3!239Ghd`AXCQ(R|nhofSU)O0p5?F?+{_jq`5Ri9Hn~eMcE(e5x>Ex z=upGIv8d7O=#sMyoyOM;qmlj{i`7LHu0xi6<5&G&AJvOxk;zq^T8_6^=Usto5w3Cb z2xtXMfjLurp=oC@A>P76)02K{6`deb_C6{%ZQa%{Xz$MnX(=S}LO!)Lg3T(65tMXx z6rh1>jv#`UNny%9x(0mJE5j~;Hv!rgSJl4Pp>|5R=~_3n`xKMz?sJE-g$i;l<8{q~ z#1pGDCCpf6A2&*K)aWI%lY@0zE*UPdyRWCkqw@sz9vLUJR1wqa2hoJ4=85t!0d)f& z#F%(x%X`T?tPrX5(`c%iVzXrD?z{rd!#9Dbl{VwgWX+uxJqYD6Tt5ZH={(aIoM@dM75f6 zSR@X{^13kBkm&@b)oB97f~@K_KbP}*h8)s7rY2b-YX-_gr`H-yN9fF6rHwc-76t-V z6JAO);|4_nV0uW3xUphc!fL5KX3Y8|`uG`kdx>`?+&s~!FXJm$z)T*(p&7S1e^5-u z*r(CE-C1+PbAs!ben4z*GFurRwr-zzQ{j*v+S#cdOmoUzdvf^V&e}vgDYt=*%qIFH=D{3 zZ7=#nAjIyQ77W>}=fTA#8n1&vZjDC9rs3gCojO&E)!|(U6obBZh~QJQ4I?2N8yOXz zN#l5sH3^*i-!V+<>-=#mem}Jow}a`Zj!s`@)Os>)Qv#pxT`12M4D)4lwH|soOED9q z^`?G$P?ajEZ;a|ilqet|4@K0Ae_>{`iLQO9v@~!pI(6vyR^@*TEE%mH-sEXtRHKh( zr8k%r&_`vb*W;D)2&PG^Bq9OhElUoWIYk!A)1%KRznDUUs}5M3E$t0iUSRI0uZR3kIa$x>S7|$9vO-HC-bdGODLB)Ve&l-5=LAuP&$&a zO@m4*n>))=P>onkm!D_1K(fWIf&mC#P=%{SCPiB>tXyW>WrSrr9B?w)QL1A}bmB6X z(ps{{_5wy^L&33Fu|KD};7F{Qu%yO@k{-)H&#f?AnM2{LwGJgGb1SdS=AvW2uKzgT z{r?geQcv)~-Em0BH~`YMp8bVA(IqcHkMiTbeocJq#+*umm+rhVP>*OOam&6KlSCj? zGCAXOSm!3O6{lGc`V<|t-vS9RSLa8Z*^Bv0MeqVgzfaLh!$M@CKCk_Ex&%SXL#O&; zg=JriBLf68c+V_{B+5*a&`y(?>;8xWgL+9RkgxZbum$p72AJ@6Uw)?l#{w(=?Y?-D z(w_=4p)yLz_&Sv44j%-M;`~WoH38YY%Oe}quHDk)DFwzoubtPOU;V!TQCtj&C}oM} zQ=Q7Mb~LiJPSCZRWW;yFA@Yx(0rC@|QW=9~ zwna_NsUTdDhd&LUj6929mI#?u5xvI-K;lJ>%yePZ?urvS z`h}pVwWJwFE*9RQ6cNl4fSAaN153w>77KGmnCL)JYv#-GTb%k>N%DNp`OO^nl@o#~ z{QP`s?_tw))!=h+_q)|(RV{8_?u<&oj{W-r~BhY zjg`1=Z$MYbli~U`0=R0?5mV;3B`>FMUDiHfiS4EsOHV7^|7JOYv4ncnRfg}XlYkzx z`@9QXo}|GWf>BvEdDgNp-#K6vr?YanSZ4uij0DwN$pprh0>hE)4JbncrU?>qS>k5I zg?Jzgi0XEGu4}+R-gaY8%^BHa(;~Ue_PYKERf)V~MX$5R;+P9hZA_ts^)}`8E$ddh zOCCjDl&|=!vaJ#fZ~JvZO3nsju2YCFHEo$;3@X%>W6qzadMOX3GNREazLxT=NB zHgjPq8wN~TWEB(QbtaWxP!znk*@oJXxseBqC6QV(3NYFKIL|!J=M-b z3)n3kuV0^$**cpmSuzLxubzIA6EVY#i0%_ti|5M$id;*&B9}G%`a;v}1B0u>L&~38 zTTSi(Ziy18TewH|H1r=zE=t}^<*~>k^7ltwi5dSugu>|&AK`tY@7+1u((FL&h>R)B z;q(s*eiDPPyx~NC1t-KA`W=F(P5l@`eB4)&;58HDN&@@Qt8!{bbmxfHQrnA3AcAvw zVcUyNgSA~n3>jWYW3|(gdzR15u)5^q!@>H(&@K1wf&uK0CLY!{hNgAakTlSH79*U_ zvtE^Emi_u~&=bO4b8`~UOs?Ab_zeGr{!NceX*D!8i?U_d+zo-P?ThW?FeGaZdMsTX zm;z>R{Guz!czE*2k?fN@WKMZ2R zJK(BoyP5UDEbSx{H)tfAr&UEFqEz3^6xvQ5%t`#t2Q;7|!Bxhj09kg#~)$n*f*LO$`}r(tLEiEFIE zlHu(bxpU-w&mCanijF{HBr&=MIfn&-Hs|xv6N1t0o1`$ai_Tl6Gf3rms0n5Vz35#! zWPa%?)3VFuVa_PymskMrEW8^hxaM)>9_tGkico!tW!kUu3M+N0*E!p+ex%1{q3tbR zZW>?5qf^mon6ezvRYVZL$kP>H?h zE+5yZW?a(Jk|A(rE@%Q9z{PfgwHjmT!@ujLdSAylyOpK*R2Jblq8HNj< zkBcGN$w^1q5_>_LD+I~BsYe~9)iZTkjBadokB&y=Vwc#%7KkGwRfR*Z)r3v1->kT` zLAXJGx{4p%tZTSZV(Y5c1Cx52C>`-{1V{T{Kl3$5>TPyi;yzK>`au#%=xw{N zs|4?nIyYDpj|39O7GU67^tL)(!x}5uAK_R|9R&Q?r1Q*3LVMJaap?Iy%{Kp#9Lc$T za7b)yeCbzW+g+I_iuHClColOA^yAW{OD=Z@JBQ!X1xKzea{PjVY`JGF=u07;0W_8Y zf%@tYJ=2$^^~*B1gqFLsD4XR`Mc>=yAswroFPYT~H0y zFS9pFlJ4m-B3+w0pD?9p{iN6xAI|jpj*igzydtdM?$CKZzEz3QZ?J1(jLR?cSY&l{ zHDO|L#(F^^md*ogw^S)5P{`nyD>E0(OgaB5$*QkjtWwI2$9Mxs!!aXuDBro z!;ev0lfHVIM?sp()tQYThq#@c9V_wk!d5xZ`WL#Gmat=*;7@m9SgxXy!aTBejl&V(iJ1U zhbPhf8yra_L8f{PnBAcj_|SD>nb8P$PH^6u0%bj{Xswm28icdoezS{9PandJS1PMV zn?HAcp=t-JpE-|u2hJ{~%5$QAJPUl?CU%d{XYF%!n>%@;wM{-&txVCK54p$V z-1QQp4!Je&K6*=K@2w!-3&h){*{ardB4$F$dVAnC5ZnIk(7^8b*++@{i=`!6=!G$l zSXx@wQ+Z@Uligpi8%x$$K(roF7fX+%el z#wjHQ@+$9TFFcshi+;>9n;Wji#mgaIngL1Wb}N=@?+;R{#YMyLTEQi73yaJMqBO&W zt)z99#K3w#hspU=Al3N;za*e>?ab?>Rhe3gH57whLuY z> zPu~1SPnuqg`F~h(b$YTQZUPa_$nZ6ih8b9?`Pf2Nh1e25o>`>aI30&31hYTMK?<(N zi!zSK9z4CGKJI|PEx0hY_uSwX6}mB|+g?$4c$vCToOXCGJCSyYbpzT?<;+120gO=E z!m0S3`N0oN(p(L4Apq|><>5`%<`#>SUFqR4a4g;q-9k>r&98lvJS)l}lOs0b&v!ev zx9nL9PDj?wffJ%@X5g0l=^}(}B#-#4r^e2pByIA@*Oet7N`_7-X{Gk^j?T3sff#c;E4Hktn*T(-n~e3TBI+v$9Bl2T_AVctjyiPoed)VF@1MXU@P-8 z7d^69nclnRMur^7ytfy9WU%e5sI8!$Vz2kc5l%vXiSh>D3H8XM94!l)b9d>Q;N8*p z6wQ3NK!)$cgF!x*AK9Q!r;E1!>J0ZlP_SvdveD`otdiM}&e z_sHJH^6~3J?DBtq&Kh!fB zuf{g^Y!@bn220^}HL*3n;)2f>%gfB;3zVfjCH1u-1=RZ z5#wb22PJc-#L|G#FqRpiWl?si3`2u@9AooWBMV}OrfC&=M=OY9h1liXz4$VVh=?Bb9~_- z&|zURV@NWoHgk*Ct+f_kB};$=_b)g=P2|SdUqit8&5>e^kPqNtYb~BTfI73W!H%MW zK~whkpcyF~6jW38<%?3um7cWTsMPL`UcGYl%cizrziCzakOvq{;_k2qf&6byJN$1q z#Q!zs{&)Q1zr#2af6-YaDjw&kWdh?@2SWC_Ju_~pRig;6T|g?Yp`lS1O4F8;y%4cK z@J?4#ll6Gv%?#csFc7k`0{AgQsifpeDzS9B_NndZ48@lH`&C+sdKmOR{|oCC&`#Ju z+krn6o^S6@@OE`CrmIhNEzy*(-E6NFcUR1{w`R0iHKR><&$RwrNxP$}KRerD$;tY!w}4h!Aa^B_DdS1ioNC`-@(vqErUSk<(qsR+!O-b{lR~G1)eb^oee#@8LKsRt;wT}fnEAqTmnDkuyq?Zo-bRAdySwi7TfsPy*PHAGX+ykdU+6$ zW^4ZdSt*@;>6viZ-=n(i3o z=6ANSm(@TS_^0HBgheiB>fKqq<=Himma3ZhYdbG+#)6feO4!-9WVTkh)S6Ink;Of& zlHTT=URBTC0^QAg?E#1={(l#)z?oCxY-F2Zf$W8Kr!{z~e7sSz8RF6>6xG&U;|8jy zek=-@=%{3|ae5plr4g92r%L4u*Gh>TDyF_PE&(7_AQDS&{DeQP1ibwZz}tJ-+Evo> zFdvu1$Y^wqxS2C>e~aeK&?vrx6fN2(a|#w4zu#i?gIO;zbxmg|FFv|$o79&!-6frZ zx*{iyyu*TJ zm<@OWf)9SdoAUcC4h?Koy4i)5(|ua!$5?4oVkEwfB~Kv3c#@N(?1^Wc1M-V&5cS(3 zL}Drzt;=i0yz+F;bIiHiJe!ghu;S1aU2T*~oU^p*|U<&jJc=`NI&{+H{2R6v3!#&uG z%1(MTbHLUKtdwmmXtn~Fe?ky@c>$kHahY96sH(s6H>f~Oa*72`d;ln%=>6Bqimtz* z1Ylc|KvV@VBWAoDoz4K+S@)lQr7u7JR8#Okn2Ypjf!1r@8mA$c+1k%0cU6LCf%401 zvr^mfZ}i}kq({LSlKz$n{Bb-W|MbFkF@tzOE4XV9qH80*oJmqV0qL%+$V7xq(F2G{9F78Cp~Y_lRcC2iT3t8L+X$NFf9^v% zdGhnsKOD02v{0SH{qIE|-HP>jPM7f{@84UaeWWh5pDD3HJat>fSQ$t60V(60MoMga z9-Y)a(0G|daP3g?DrjIksoR_B3`7Ts1xC|IsH21#WVm0uGHSk2aGD{IZW{x8ZMIucQ*(y^PaKW#Xebvm6HsZ#iUU6)pKU8!5HGK^()}pfEdINQ&wMb1MYv z)&vKucCuWo&)#c7#j=}>e%z(+=W*$q;(=H&$QCR|XXb+|lT)mX$ChqF%6%&i=NpJ~ zK@1}wM>-bRmK`@JRWHWkPhJoZ=}G(YXxgBCPXLO=;kAm`+8{Jtd%@;`DDfI&cX}IV z0C)P!4L(#X7ZXJD50)G%_yu$?jO&_}qq;V$0hTmTtZhZzS?Hn<>-qn|uwJb-`EQ5y zz<)cepG)hXF1BDwG!ReOCPfW7Y7HUbN)8I7IFNCD5Rt(jPg}*$t&7pj_P4a-JmCIadV{V-bgk30ITFlrANvH&kNJvOnT0J-2 zMWcVfK^&F!>$UAe_CKz%n&3L#8}lh1dfG8qetu{glE?{uzYODKx!LeE3u*N8;Ly-f zz3}v3ipVYR$x18A&Vo+HmH%(%@0w14CIX*J-@a=(a-(3`_!45PH4q5IHd-w2^G2ni zsk7(ytcrw|w&MmL-`oo(4APve1w%z+Rug8b9qHpVPnk&M(^p@nf~L1Y%)EKQ)=`nL z-<}toaOS<2*dv{H9-1^C9D868_n2)gopH%nBqGV{d|uWrdjR@9P|ZOs7TyPc&A8iwfhP&|?J{YHz761-IF1!OXn80B$2B{)!&ruplsUalqD?$0<|oNA!@}U}iC83hfeDb1@By zn%+>1Vn$R+XRE$96a{TBiV>s_++2L$Uy>%XVUVBmAm`0LDFa6TSsC#4%ZK%>rM^(3 z1EvmOOZ6FP&c1YVRrQ~y*QZlfWzW|3wNL*{fNDA=0YT7%$eNy%2U`n%8mqYyzd2P< zYZtN+J2js12UZhh!Iy)y6}Gujl}L`4CCTMVG>z`uMb0{T{pjD>2LLRa`c zEI?;c0L!Mfsg_GG4H)W|Ze=i0z5YE>t=_tSWK;S|cUn~HcK2Xsgxp}v!DyR6HT+*4 zFL+1DuaG)^`hUUe|F;~N|2tFvtJ4_XZvUAA6ERFT_h2bQc)%G2WLPEBBI{NwpJo6EMM|b8tu(5kd$iZITwVN+5-WPj zmS?G)pJ>-`u>yVJ*66%hCV{2+{RJ*V&Lk>LfYRZ4`SVbT^F zRSbktw%KLMp9aVCL4q=Pohw)n@DX7_$g$jAa)h^^BsT~9J0UidVK6#Wv?J8<1 zbr(=)S16ImIvRM)NRNV9&N3_-D;uo0eD~hV!}a|2(a-d=Pn$~mPp_edBXr@h`!P16>18}yTOJH_^Zl%S~wY+)=%e3AyJ>G+@UklSRVAxF-aXI}* z@6niJt=AsCqv(+A20rcFIuho#6N;W=UC?Z!n<6eTfd~vh*F&~soUd&2e}#S)2b+&o zg0pJ<&7Z0{G+R&lxNbjk_5G+1uE=Nu3T#-Fv)QGt19`AijRj+!zV8}F`<55_6hD=^ zv!{q-XXSZ0>3SnVLOg&9HJr{gz37f6A+^T|dH{3O?F-azSo{SNRCX;PO;`*3a5Mmt zg_@za)hy+T@^7O4vOrIyxjZn*zhS1}TE;pKtMcR*0CH}qn zA)xm|M?v=Ua^QW4jV=2K)OtItX-}A(ZjAmeQGVndi*`3*Q9<{l>bXT-T_OGF6vMi; zyt9O@9E8gc$R@oTk+#U6OK+i@Hnhy)Hv!k2;AnRGLg-K{2k)L59l8(=3zU+2+J!pN8L#V+K+i`F)GaNbiG`z>t|Wn4!%l3JfNr-JQ|HOKS(kbu{TILxtT z4Rt=Ht-fF@CMT?$Bwt$VM z_{CWmeU6cs{?}le@;{iI`LBu3kAgH|9tHv`noL|7zA{3pXDWQZ>)xQ& zZ2*<@YRC*Sd|&Mms^bvRyZ7-n{dASYVK%mqR492(vP+rj(Rd%R)00IRnERf9SEbF1 z^K?GNdfu^h5XI+~H+j82C_nL9h1d0?%!-+!reN~qtA{BPEH9!@Y8s%J&dw~Ox6r}z zKhIAyW0v@`y4=E+?gIBh8RSzY2S-(rQBkJP=s4j>nS6!#P8)AzePlkVWKX8wcfQ6j zhVJ~$OIwRs0ksx>Ld8|f{8c&2<~)Q7NQw1KF5s1krIT4dLz>6w6d)&W`|+iQ)ubd@ z(H9BejG4VtoZ|#Mf;M@w4mURebg{q?aBCC(&`EF8WDnh_U@&YJPq)3rHx6Ti-Fi&4 zK0kOy`UKoS_2Cfb;%89yJN{or)d@k*v>4KeM4^8(ibtC|S+o8$T73_%8nbL?8Xd89ACxW2?ag4s37$Piqze|FqQ=@> z0>kwMUkqvo&Et~N8QFH2_=>eQPR2bI4bUld1cyI8_yF;E*d(oj0r2ggWPOBL@oRZS zhVH1P?^pejy=07~Rm5hk=g8ndoHmKzhcGLW*xYox_x771a3a&V-765a#27kc3NliP z)|ewF3kMuo)bJ=p7TiTjG8ZW|480Ind}7klSh+9r{sJbG{Jc=ZMFa$17Y2=A(hL9a z;q%STsOdmG(bf=@N$<*uj%NvRpaa`w@vjZs-tqA>J~nQzx0GvAMof=t-97sOcs4%7 zTY!MvX2yvm>UUclvlmDcnV=u1;{lA=z+AMtPWK@>@~rJ`bW1c1wfaY>$feYD{mEWM z?dz6BKNNA=wcrqO)<_$d!)uV6$WIp-!N&XG5}g)jakq-eBXz3z?l`f`&=ZeNLIu9A ztS^_952rJ;9XYz^T7~#+mf6c^XDIp%hiV?vFQ1+zIt=3X+zwFtEEh(0gvDTGiX`%p z=rWD{7%t2L9}u}TR*Ii5(H)HKyn!B%C@p^A))FOTt7{eyWCv}lMxy~B1f);N6Yy91 zwX1TtzVBRl*1!!guqX&g90vY|Jx&pB;gMf`d{j!i&B}<~i{ucV_Nz4|Pg#1IIC+N-U$y}eU()hnTY^;dS^K&eBL7tAY?Fx`4=jX}8zzcq;g--D&i z+yml0fK?C_H$Vq8+ZyNwxFx`ZrL^|f1Ta3#)N+~pfwN&h6p{PX6X433FQ?DaztP|R zhRgX3=b}B@dwd1bZ-XRcm0j7sd=;#9lO&F#n7dL;O|0BRI0H z<2^A8$Wi|*K)}gq2YNUY1EJ!Qh}@3?nf{8}fBPM3KK_}m!Pp%G`1>3A^7p^*2q!4X z?e)z+JT^+-5fbvK0a>Ay4j{apO3%v)t;ADa4JmH-mkB%W>}s``s89QxTfrHZ^a7@v zd|{bpM=%c%R9@JFqq$;PzH^7EtZESZ!|UqnKizvSdYdyYGwu(L*caz--{@z&$)|ol zMf9Qc*Sr_3aa$o6qWf;{=LefMTTMtU^HoZ(aT2@0e2!?^=PNHzJ1pTBOr(~{f|DTzLd z&?T2x@cc|)B8P_^XCT!aQx27(waEvaiX$#*w8*5jd_3+%$}Z?5yoS;OJQfQG*hLos zxIJy|RGbp*SGRdheq^P*@nk4%bI@bfg1td`5wVnArV)-6p}O}ud45lw*9}It^?r)A z$Q|;1YaeoDD|P~^8$J{M^y36Hs92=G_c^2Nh@l)x(XZ?H@@(R{+n&W&WE!s_V7&3N zD}@VZwSF{oObS1?&KH(w*zCxt)S$7g!#KiNpPzy3xl(@ok6d2suokbOpu?s{4?;h` z3XvRO{MjUD92n6XBXO5$$EZ&!6i! z6P#e(gQFjoCa3}#$UCG1H4!a8ueHZ8$extHWTd`_z&jtz@}YKRvtTYgnuX%^NZva0 zhlG~_^Ock~wjB^9wM3|m%x@nJH8VAF5UYgb9-nb47e&36!nm_KK zQ{GOE^HCToj`;Zp3PFHQ7wJW`j!U;+VsXjN!KPi#Ds4(!^YD!o1)s;yQ*)vH z_E5XGiplbOoGVaF!9l6pfhNAZ~k7ET>C`5*V(Ax&WBnnD-{z{jNMpV3)&$vM}hj(n+!|=M$cwA zC*}$!XX5rs#2!cF@$$dRop*sXMM4f;InO{pj?u66l1Cr)F?MVtn>>f{!%NiTTr?P? zzt8{5ld=C;HN89ML2PXacS)6f=qdd@3|AkFsKCI=ZI6<*hjFbKZlXRg*IcVR z>PH`B`_)Alanuc~i7$=9LCaO(!YI*7@2^B>i;GJ(cCVYN8%{rVcf82S$(a@Hpb@0{ zwJaw`s#4B4xhhL=8!n$2ZFDHQK@fZpwOynIpdphEAbe!^_4)AbuK+(^I=zdKgP)$< z`2F`FO)q~7&mr#*>|PV_r>BlF{!W3tc6RSW@IS!IPo24D_Xh~%|Gwewh4`;uLt{EG z0S?-#2xy#{RJ6EyVu!u;+qXrXYOtc539-5F=#R1~{Z{{4H~pbEoph<}1Pe=WPm950 zF;F^ho0!-EF~A+DA$)zq-9Yj(%e_e(P)8hFVSLxVgFo3tTkHdmBcRo^l`~|dO=6Z1 zhV(k`sQ>pia;*+1yGM?NUpC?NZUELUK!D?pPoHy-K?824P4D zxB~z7_^lNjjIw?AkZbAjV^|V;u6d%6VtILGELkO335g=Q;{G?@4Z1-Yg4XQX)Nc#>{Mw zICt?NHnPh=OdMq;M+I~2HM_C}nY3U|8uXatF&7Z5t73%Ai)c_sJ!q4+$>_O3%qDs0 zPCGnC#%Bp{fjG5DICW--_@>65rCz7m>Md5hRpa7M9G~I{zN4pu(;@A~LhXdk z#j6Te6-^dfO|(Q92^d?ImHnDcA-{{_DhaCfZr{cS^IM)%OD##iKV{2OQO{--w;!}( zOJ=f7xx%t_C?te0G|Xor{5HhAWoHy_H*BEDa1CwhLShekzw^~%3+tpiwbvTDp=sPaDb>f$6g%@{tg^V8_i52UBX%(i ztFF^+7J{8wRT0>-=Jl9pyr@u}#SO=CIEJtI=JrlmU%3%i{_p8&^2Htus z3ad=Om9KKEq&^F7$sO$AF*FKM1s%*THK(J)f#ZpFlt6nuK71SX41B8nhyFE-HbN!SJOWS8t*uRR@wP z@obuNl0c;;G|)&CD+~9LE|t{at}+_MiQeUJ@hh}7e%XbFV8lL!mZ zk+UPxKAJfxoAAf(_sI^Bxf5xY4&_yGM1dHQwyseukK2OelB{QfCjZgLoJO^9kmHaDPCZ9<>f8=j<-dg@L4?Yt2(0pgRO%lnQ zh{rF;Z=IRQHLL2yU`P`dPhN(ohGT7NN#3ZT)bEmcQ&X+_&=MLn$L^_m%vTfa@bw_972H0b?*O>rw!Y5w zza;ZfoqsHM$8qIAxQ&9aHaa8{f{jb$QTl`y#D#yp83=0a6Z3=h{q0cs5u-Cv18J{ z;L@ptwSnS}Bb2EKpTY-nUiyOqo5&p{eQ)m}+E%V#&iYR*|GVIg{&1DY$TCg~3RMYsvT2lo3Q1c1{7rbQj6ADXk%4gtD@^23OWsXTWa3MxDJnWp0lv_E{LB zse5jp3(Q&n!6H2I*oTmjyb>y7%EePq{Rg9T=Ius|p0Ahf=V{~pV?8^@AuZZxSy=2; zI*Gl5sMI!MY5MDZEsNnNkAb_83C0b#3(&_5iKkJhgsyeRK@!P3%2!D@X5D8Ij#EbO zUH`m8A`>8~M|dQEo&eVKLhb;t0(e`8dyY z2EXUf)r-3s`}Q$cC{>l~Yde_?n>Un66oE~r73ZKv8^T!6fwAKV+NPj@_!8WHaf=0c ze!pMH;5(tjJpRSaikARjV* zkUg^cy~u^-KD&6UdEP0>vwjTR-Pf#K-f5W(?(H`=8}(-Vsg2o0<#DPhvvYkQ?$pnz zYbmTearPan39rA@@qIpGxqIF9hXdJt8AL86(Cg7Ue3)_*?b9DG^$ry*ZzA#9FL~ zrK8s*78N_gwXg=m=4h&E)jd11`|&oof>!40A^oa?6r?ZXm5;^hE+3G3?1F5yok+bj#IKyp*2{X(mGay&k=Wv{g|ZG>0+aHExP5_)Gs^HJ@F;6yu6BN zre)J>1M9A3joJ}rd$cXkNjB+r@Kgkr%L*4 zWz}zdCtxW#3?_5pSOsonFJisNcGJ4&h!UO>tCVISHyCT_?0GdRT72IKv(BbQW88Bi zGe)oVkAtt0{UwgoL>R`bDuPMuJo*<7iJHf%wDb91q>q*%CzPc*Hah#nAmLn~(DoBn`P$-X_bSOgiZFodT2E<=*(Va%KvEZyQ7-S+I@ql zI5tK_qaa`fQ6Qoe0Rvb;sRD}BAPyqEw}cSXK?e{}5m36)M5Ol;0!nZwf`AZe0s(|j z5(0z-NXXqmX6DSfv(`O#-E-Er?pojeheh7xExSIy^6dAc*Lly;(J(S^h&DL-3axC) zJf5m_Y4Sm0*SOitjP8{!dY!e}5)X^MTENTgvuMR6PnFDo8b(x9R4D36RciMlnA(|K zErxuhJ|x59@n&TA_S(jt=Z!YPe&YrRi{FGIK1U{!LWSdpFXF6vcE+773QO9%VFyU+ z@S(MCgfvk|$>*noXH}427@uzFGt^cYfox@!+4{(^EK;%3>};+jUK!$4@_*(VIs+MY zQ8x6VCy1w6dx~zr>}~x0G%*@38$p;2R=H=m%p|z58^VZ6k=s zfCuox=8Z5JjOAsq4_Xpfgi zX8%A8TW~1NO7gs`$X-k%*y`9rN4E{{Wh)D~le>5B6d-%M)7}XM^!J&iW~VAtR;j$j zm8BwIBL11s@NX7@*Np!{;^eKuT0aVkQ}qi_BhE)ZD&T(A(P@#z z^LiAshSIcO)JgF7E?!gXwc&MaWlwsB73AmN#yTA@y{PSJR9sSW)lSoK!KXwM;cCY? zQ}j$eDWhqc+#NvRd#Pimsm(im?L93zvtdOX_L24)kg{YHhIMk+tLYY)G`>A#kDQ!x zk!>9_05Dzn);Bc(u^~@~f9n5X)k$e^!LVK*StVAwo`@ioC?x@0NFE7kGL+l9y+Ugb z?k-HH;lZO35G)w6btNQDxesO0$&SBXT_>+J!qX;D+_KLjZ^ZS4xM)INWW9!+wj3Qr ziqDmn?N?XaBdCTfezp7YjI=ICZE4~85q6B_vanHF62fBZ?}>0gh6Q~{haO8p1s(yN z{5n%_;UI(Q)sUOWNjJ4}&W^zX8_!ISY$BVY?js@D}QkA|g9}Yz_ z7%&a5kNNdpRhDt`UG=j*)qbs5%d|YkP?6@y`(f=+^uxm@i;&I2G2m*4Fp{M3)rYfH zc(b_pyUZ@tNwEu4-t6W%7GF?K5!c{&;LHQ@y`4BPfZaPwu=MXHg7w7V-2K?J)K`$z zUS~TS?(O4ZOO4+sw-d-T0!t^YCM^h^clB368BUL?Sx@0aL6M}EVJ9&RY^fXRFKP28mWCCc^8RP z@tLWV4!qOm?cV$acK~9bXg{~s%4C`@VG%!0QbZCvt0|tY+~u?MuOoZ#X|w92Qq7I` z%umD^s%f*G?Oj42tWqZ^E|IwrrT10$nnCx)hBgj^xXQ+rh`hebk9kuyRLSk)UyB6T zTul01WoD*G3?H`GB{YHMk3Yc+Rw@RuxtrC z1Zkl_=1kh3mBg=M`ai@wSes9|xQ6C-$Ly!LhA-Zt{i4?Cm@B?hvF&x8x4pk|)4d|l zUBofiv@B9225=!?XQrlPY-W)S@5}tT0%{fm61poHMxixQTS+KdX4r}rflJ8a=xV%X z&rZByQHLMV2gfnOBWI29wyB&;c#1P>5#LI!>Cp+(ZZ5dZfxEcdACEC%tHnN&S0-4% zy^BkJtt);^cXQdQ}3Z>K9=LqXIRK0&jY3MTO6-^!|yhfEqfbZxayPTR@K$jfpNSz6pqgNrDfiMPb5*K|PKAt@c4LYB$ z#60+J^#k<51EkiluXpcvZorDT(4Ja5&!G^>uz6Bm1G(e_l`lc!;Ts}Yl@A1B+*Zo41yfD+=thC{@2ERzW#cxg3q(giju@VmjZ(_dlJC(!}S<5UO zckY3W2Q#3Wz9TQPA8={Yy`F<{1m>b8J1o?|5urSLTW$d^ zrW1hvM|sfy3oQ2)d(-_x_PhNYTEiaKcK3O5yvGxk;hih*=}L*+^S>V@siAQO`u17l z^RLj74 zD1N*#7?2S2o7e&3UITpr$w)kYnea(HJlxD`H=jt?+q;O9>hKaBPZ|E%Npwzw?TM)1 z;F6>ECU)lEuG^tzs8biEZ{JI9;b8$DT_B&}zvpPJqIVlQIrP%qCt>NyZKapxouVH_ zX_9TQr_b&cDJdqC7Os{|_waic7q=4UopVaeH-khaAEx)=4z=26d)73T6FF^x)H)l= z`0%hL-7cB!2hlKfYS{hNM9_ylfab5o1Ib3%7?q9L01?*ptxD$9F1{es_`8fk*Lc5} zzzlgGA0{4O`F-!Df*W6SbuZj?aPgUbuxxKSZuj-0%}k7b5{N~S_w5%~&iK=ngi|i; z@B&mqO1qc;ykLI#hXztjjTJq%V+r4Ub;QPUu#65F=sN=VlYM;U#r2Z-w}^Lr2)vSl;$YmpsQy)NWzf*3ubes z?DUpEe?pggL7;D2P0zbqu9FV8MV%wiRI7IXlaRKpwJ-JUR{C&8N$}n+S&2yCOUGx;Jf+$8ZQ<<%L9cG=iaXc?uGW*!wzCtv7)aO?6@A;x zDk41YZ(w?8@1da0iXEhVgGBiDXIMZtlkLy^0UAd~oEonUC$0q0SOPQmKGgP>6l2PiIzqf;C(X z7mp7`Ql|C>HHNjr07sgXKT}bBbf>OtJ!`=R@+_H$Yx6kdpqU}wO7|)*PF7711RhcaK*Ma7S0Osdbo6LaL0a292p-Mzy0b4qwp zhD6(V(=osn*&F5OjBRwQ%=5YqPAN6ie&I&w+N^=aY*&MJ61= zYj)!5H}rpgQ}D?#aJy~vky(@#=ahT1LY~yc*}BHNU7gR#m5GCBx^}FkD6ZJC`1ZQe z&MB+GVzai?H8-CsFoqX!6iftN%qCT5m?$*!Ey(KIq~nEI{+dvp-bQ8$E#Q}+Z( z#R9=Vf#20tg41@U9gW zVFiG;_@h7cl+4&5qO{aT3{TAgf^CY9;e>9x58VE(;*~DX8I$DyI?jEXeRXr{x@^K1 z)K~SLD(-}2p|ga7)&!73t>MMS%*cB7$KJ9-T8GcUVJ@!D;jOJv+d5>8)ickO8JyQo zewC0lC8F5hZ)Vdr(HeBnbb~Ok3U`mi?l4BY@~ab?-KTA?GY!15zU_o5R_qw>Ifh4H z3;?wX$|QQ&PK#1PzvP3ce_(aCC^IImbo;rn7mLlJ*nkr|)qEE|>^e6?G0#Jz+m7Q& zAadN`0Wj|U+kgp7kxPRf+lf1UAj;d~)`uHuv%S6T`(kOr=f*u;&23LbVh)Id{Ro|6 zdMkqckkc$>$p_66c+#mS0;$={1EL=5Y8QY9)r?H(QoUXMyEHU*-eR_k3Qva=Y9mId**?GFG?ky?9C z8DJR~pl-(M@(FsCHZav#KVZzYxD8_JiZ|b*F`bGs{G7on?7e~Z$Nqw*ibfzEAH#X= zH$e|M!lr_XX~Q`ivyVG!H#f^Ez@eSd6|WM_p9TlxCvDB6-Wtw2J35BvMs!b5Cx2Td zMoil7`;<=qOQ#39AAbEm)ZBk1#QV2;&+9+WLb`c>AP@&CuwD4Ine1!;QJI`vl@PB- z4XkAR@LrhknpznSJsVx|u0^Kd<3}4tVRX+{pp3S6cMF3&mG=HFF*G)@tGVT3haZnG zGoQBoceAkO=zU#No~CG>Cq#)>7% z9-Z^7iFTXo`%8=D87rfmnxV7iJ`_it=g2^JsYAX1fI=XJF;>s~s7oQBlb;w=ZTI{} z>O4^8vlx5Nza&R()fUBu)OKH!W8UTZov1O`QDt{sTP^Q8kZ;CmY6_d!RP-fxJB8im zyW?gu4ABvsmL57;nd$Sqru$KwSa|khnAGA=k1c?ve*ZSOS`a%iKxui~N7_C|u&4~0 z(B7do<`C$xW?(QXZC$+-%_kek2%|5qvM);V`@jJ*QynrFoh(_+jFU94>2gABZBl}`++4$pWp2}KLo?p6*G|jd5>zpbp{?#)Sm-Y-l=hrN0QoHAY6paB=$$%+Th|@5giG0=-U79)`!fsT0$_5G4wb z4iD!xNI=O;Ktgh`yBC;_G<%wQHmsnitVH->e<;))lJY$5c!K&`jA_(@?gZ2amtsjX zXD-_Jj>7^eqc3Oe)X@6V6|0qsP0MdpOrwE%BI4qWh>29-^LhDC1%(Btd1Mfm8`gi%g*flNcK>8Di1we z-k7&1ePJjI9zbI=!m;hrGrQPt2nbb&GtPUyEE2#PS6Vo2W!yUD zN6vlX=g@k6Q_L1t)yXSEN;Sg_{KnZ-Qop!?zSJs_0TcY8yMJ%xuDZ2Ice^0wgfRLo zvZ1&gheSubKJ4)Qzed13q49PcJEvu3$L`XLaa+`kIZ0I>DR2mg^vB{cTqY4ojHjm)Vx4~gz)>+T z^|UW!+NQtJ`438bmDMiEq`3Y$rLUQ+c(Hy!jBCgODqa5F5`J$KE+5a+;|B~O8mU@F z)zCs6&py~Wnfdc)sL>s@&OhWM&?v7KMXFt4Yp4t8Y-e-J@{flA`m) zq_bmkH0*jKC+3=qxc-SZ?0?f0{0%F`n)c;+eUCO=KJ@`D?NLr&MWrhu3cL` zWQ!9Pu%8Rwegrj0wQ(r+ni)|UsB{JT0duzPN-~lh1a;MKSIC>B8jqp&^4nk}Syv

=kMMfzbKX5TT#Nb>h_>~Poge@0RKp- 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 From 6679a4315558d5fbd3b98e5ce110dacd48ede293 Mon Sep 17 00:00:00 2001 From: Agustina Nahir Ruidiaz Date: Tue, 8 Oct 2024 16:43:53 +0200 Subject: [PATCH 07/13] improving ai connector flow --- .../cards/assistant/assistant_card.tsx | 2 +- .../connector_cards/connector_cards.styles.ts | 22 --- .../connector_cards/connector_cards.tsx | 162 ------------------ .../components/connectors/connector_cards.tsx | 87 ++++++++++ .../components/connectors/connector_setup.tsx | 153 +++++++++++++++++ .../connectors/create_connector_popover.tsx | 63 +++++++ .../connectors/hooks/use_load_action_types.ts | 17 ++ .../create_connector_popover.tsx | 108 ------------ .../cards/assistant/translations.ts | 7 + 9 files changed, 328 insertions(+), 293 deletions(-) delete mode 100644 x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/components/connector_cards/connector_cards.styles.ts delete mode 100644 x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/components/connector_cards/connector_cards.tsx create mode 100644 x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/components/connectors/connector_cards.tsx create mode 100644 x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/components/connectors/connector_setup.tsx create mode 100644 x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/components/connectors/create_connector_popover.tsx create mode 100644 x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/components/connectors/hooks/use_load_action_types.ts delete mode 100644 x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/components/create_connector_popover/create_connector_popover.tsx diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/assistant_card.tsx b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/assistant_card.tsx index 01616485add6b..ef35662dd5c5c 100644 --- a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/assistant_card.tsx +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/assistant_card.tsx @@ -13,7 +13,7 @@ import { OnboardingCardId } from '../../../../constants'; import type { OnboardingCardComponent } from '../../../../types'; import * as i18n from './translations'; import { OnboardingCardContentPanel } from '../common/card_content_panel'; -import { ConnectorCards } from './components/connector_cards/connector_cards'; +import { ConnectorCards } from './components/connectors/connector_cards'; import { CardCallOut } from '../common/card_callout'; export const AssistantCard: OnboardingCardComponent = ({ diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/components/connector_cards/connector_cards.styles.ts b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/components/connector_cards/connector_cards.styles.ts deleted file mode 100644 index 4905b3824a3c8..0000000000000 --- a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/components/connector_cards/connector_cards.styles.ts +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { useEuiTheme } from '@elastic/eui'; -import { css } from '@emotion/css'; - -export const useConnectorCardsStyles = () => { - const { euiTheme } = useEuiTheme(); - - return css` - .connectorSelectorPanel { - height: 160px; - &.euiPanel:hover { - background-color: ${euiTheme.colors.lightestShade}; - } - } - `; -}; diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/components/connector_cards/connector_cards.tsx b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/components/connector_cards/connector_cards.tsx deleted file mode 100644 index 9f46a69342019..0000000000000 --- a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/components/connector_cards/connector_cards.tsx +++ /dev/null @@ -1,162 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import React, { useCallback, useMemo, useState } from 'react'; -import { type AIConnector } from '@kbn/elastic-assistant/impl/connectorland/connector_selector'; -import type { IconType } from '@elastic/eui'; -import { - EuiFlexGroup, - EuiFlexItem, - EuiIcon, - EuiPanel, - EuiLoadingSpinner, - EuiText, - EuiLink, - EuiTextColor, - EuiBadge, - EuiSpacer, -} from '@elastic/eui'; -import { ConnectorAddModal } from '@kbn/triggers-actions-ui-plugin/public/common/constants'; -import { useLoadActionTypes } from '@kbn/elastic-assistant/impl/connectorland/use_load_action_types'; -import type { ActionType } from '@kbn/actions-plugin/common'; -import { css } from '@emotion/css'; -import { useKibana } from '../../../../../../../common/lib/kibana'; -import { CreateConnectorPopover } from '../create_connector_popover/create_connector_popover'; -import { AllowedActionTypeIds } from '../../constants'; -import { useConnectorCardsStyles } from './connector_cards.styles'; - -interface ConnectorCardsProps { - connectors?: AIConnector[]; - onConnectorSaved: () => void; - onClose?: () => void; -} - -export const ConnectorCards = React.memo( - ({ connectors, onConnectorSaved, onClose }) => { - const connectorCardsStyles = useConnectorCardsStyles(); - const { - http, - triggersActionsUi: { actionTypeRegistry }, - notifications: { toasts }, - } = useKibana().services; - - const [selectedActionType, setSelectedActionType] = useState(null); - const onModalClose = useCallback(() => { - setSelectedActionType(null); - onClose?.(); - }, [onClose]); - - const { data } = useLoadActionTypes({ http, toasts }); - - const actionTypes = useMemo(() => { - return data?.filter(({ id }) => AllowedActionTypeIds.includes(id)); - }, [data]); - - if (!actionTypes || !connectors) return ; - - if (connectors.length > 0) { - return ( - <> - - {connectors?.map((connector) => ( - - - - - {connector.name} - - - - {actionTypeRegistry.get(connector.actionTypeId).actionTypeTitle} - - - - - - ))} - - - - - ); - } - - return ( - <> - - {actionTypes.map((actionType) => ( - - - - ))} - - - {selectedActionType && ( - - )} - - ); - } -); -ConnectorCards.displayName = 'ConnectorCards'; - -const ConnectorCardSelector = React.memo<{ - setSelectedActionType: (actionType: ActionType) => void; - actionType: ActionType; - iconType: IconType; -}>(({ setSelectedActionType, actionType, iconType }) => { - return ( - setSelectedActionType(actionType)} - data-test-subj={`actionType-${actionType.id}`} - > - - - - - - - - {actionType.name} - - - - - - ); -}); - -ConnectorCardSelector.displayName = 'ConnectorCardSelector'; diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/components/connectors/connector_cards.tsx b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/components/connectors/connector_cards.tsx new file mode 100644 index 0000000000000..5fcd1fa7a6f17 --- /dev/null +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/components/connectors/connector_cards.tsx @@ -0,0 +1,87 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { type AIConnector } from '@kbn/elastic-assistant/impl/connectorland/connector_selector'; +import { + EuiFlexGroup, + EuiFlexItem, + EuiPanel, + EuiLoadingSpinner, + EuiText, + EuiBadge, + EuiSpacer, +} from '@elastic/eui'; +import { css } from '@emotion/css'; +import { useKibana } from '../../../../../../../common/lib/kibana'; +import { CreateConnectorPopover } from './create_connector_popover'; +import { useFilteredActionTypes } from './hooks/use_load_action_types'; +import { ConnectorSetup } from './connector_setup'; +import { AllowedActionTypeIds } from '../../constants'; + +interface ConnectorCardsProps { + connectors?: AIConnector[]; + onConnectorSaved: () => void; + onClose?: () => void; +} + +export const ConnectorCards = React.memo( + ({ connectors, onConnectorSaved, onClose }) => { + const { + http, + triggersActionsUi: { actionTypeRegistry }, + notifications: { toasts }, + } = useKibana().services; + + const actionTypes = useFilteredActionTypes(http, toasts); + + if (!actionTypes || !connectors) return ; + + if (connectors.length > 0) { + return ( + <> + + {connectors?.map((connector) => ( + + + + + {connector.name} + + + + {actionTypeRegistry.get(connector.actionTypeId).actionTypeTitle} + + + + + + ))} + + + + + ); + } + + return ( + + ); + } +); +ConnectorCards.displayName = 'ConnectorCards'; diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/components/connectors/connector_setup.tsx b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/components/connectors/connector_setup.tsx new file mode 100644 index 0000000000000..68c61c24373d7 --- /dev/null +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/components/connectors/connector_setup.tsx @@ -0,0 +1,153 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { useCallback, useMemo, useState } from 'react'; +import { + useEuiTheme, + EuiFlexGroup, + EuiFlexItem, + EuiListGroup, + EuiIcon, + EuiPanel, + EuiLoadingSpinner, + EuiText, + EuiLink, + EuiTextColor, +} from '@elastic/eui'; +import { css } from '@emotion/css'; +import { + ConnectorAddModal, + type ActionConnector, +} from '@kbn/triggers-actions-ui-plugin/public/common/constants'; +import { useLoadActionTypes } from '@kbn/elastic-assistant/impl/connectorland/use_load_action_types'; +import type { ActionType } from '@kbn/actions-plugin/common'; +import { useKibana } from '../../../../../../../common/lib/kibana'; + +const usePanelCss = () => { + const { euiTheme } = useEuiTheme(); + return css` + .connectorSelectorPanel { + height: 160px; + &.euiPanel:hover { + background-color: ${euiTheme.colors.lightestShade}; + } + } + `; +}; + +interface ConnectorSetupProps { + onConnectorSaved?: (savedAction: ActionConnector) => void; + onClose?: () => void; + actionTypeIds?: string[]; + compressed?: boolean; +} +export const ConnectorSetup = React.memo( + ({ onConnectorSaved, onClose, actionTypeIds, compressed = false }) => { + const panelCss = usePanelCss(); + const { + http, + triggersActionsUi: { actionTypeRegistry }, + notifications: { toasts }, + } = useKibana().services; + const [selectedActionType, setSelectedActionType] = useState(null); + const onModalClose = useCallback(() => { + setSelectedActionType(null); + onClose?.(); + }, [onClose]); + + const { data } = useLoadActionTypes({ http, toasts }); + + const actionTypes = useMemo(() => { + if (actionTypeIds && data) { + return data.filter((actionType) => actionTypeIds.includes(actionType.id)); + } + return data; + }, [data, actionTypeIds]); + + if (!actionTypes) { + return ; + } + + return ( + <> + {compressed ? ( + ({ + id: actionType.id, + label: actionType.name, + size: 's', + icon: ( + + ), + isDisabled: !actionType.enabled, + onClick: () => setSelectedActionType(actionType), + }))} + /> + ) : ( + + {actionTypes?.map((actionType: ActionType) => ( + + setSelectedActionType(actionType)} + data-test-subj={`actionType-${actionType.id}`} + className={panelCss} + > + + + + + + + + {actionType.name} + + + + + + + ))} + + )} + + {selectedActionType && ( + + )} + + ); + } +); +ConnectorSetup.displayName = 'ConnectorSetup'; diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/components/connectors/create_connector_popover.tsx b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/components/connectors/create_connector_popover.tsx new file mode 100644 index 0000000000000..2e50efa1ef4c7 --- /dev/null +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/components/connectors/create_connector_popover.tsx @@ -0,0 +1,63 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import React, { useCallback, useState } from 'react'; +import { css } from '@emotion/css'; +import { EuiPopover, EuiLink, EuiText, EuiLoadingSpinner } from '@elastic/eui'; +import { useKibana } from '../../../../../../../common/lib/kibana'; +import { useFilteredActionTypes } from './hooks/use_load_action_types'; +import { ConnectorSetup } from './connector_setup'; +import { AllowedActionTypeIds } from '../../constants'; +import * as i18n from '../../translations'; + +interface CreateConnectorPopoverProps { + onConnectorSaved: () => void; +} + +export const CreateConnectorPopover = React.memo( + ({ onConnectorSaved }) => { + const [isOpen, setIsPopoverOpen] = useState(false); + const closePopover = useCallback(() => setIsPopoverOpen(false), []); + const { + http, + notifications: { toasts }, + } = useKibana().services; + + const onButtonClick = () => setIsPopoverOpen((isPopoverOpen) => !isPopoverOpen); + + const actionTypes = useFilteredActionTypes(http, toasts); + + if (!actionTypes) { + return ; + } + + return ( + + + {i18n.ASSISTANT_CARD_CREATE_NEW_CONNECTOR_POPOVER} + + + } + isOpen={isOpen} + closePopover={closePopover} + data-test-subj="createConnectorPopover" + > + + + ); + } +); +CreateConnectorPopover.displayName = 'CreateConnectorPopover'; diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/components/connectors/hooks/use_load_action_types.ts b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/components/connectors/hooks/use_load_action_types.ts new file mode 100644 index 0000000000000..106ce537099a8 --- /dev/null +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/components/connectors/hooks/use_load_action_types.ts @@ -0,0 +1,17 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { useMemo } from 'react'; +import { useLoadActionTypes as loadActionTypes } from '@kbn/elastic-assistant/impl/connectorland/use_load_action_types'; +import type { HttpSetup } from '@kbn/core-http-browser'; +import type { IToasts } from '@kbn/core-notifications-browser'; +import { AllowedActionTypeIds } from '../../../constants'; + +export const useFilteredActionTypes = (http: HttpSetup, toasts: IToasts) => { + const { data } = loadActionTypes({ http, toasts }); + return useMemo(() => data?.filter(({ id }) => AllowedActionTypeIds.includes(id)), [data]); +}; diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/components/create_connector_popover/create_connector_popover.tsx b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/components/create_connector_popover/create_connector_popover.tsx deleted file mode 100644 index 488ef850933b3..0000000000000 --- a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/components/create_connector_popover/create_connector_popover.tsx +++ /dev/null @@ -1,108 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ -import React, { useCallback, useMemo, useState } from 'react'; -import { css } from '@emotion/css'; -import { - EuiListGroup, - EuiPopover, - EuiLink, - EuiText, - EuiIcon, - EuiLoadingSpinner, -} from '@elastic/eui'; -import { useLoadActionTypes } from '@kbn/elastic-assistant/impl/connectorland/use_load_action_types'; -import { ConnectorAddModal } from '@kbn/triggers-actions-ui-plugin/public/common/constants'; -import type { ActionType } from '@kbn/actions-plugin/server'; -import { useKibana } from '../../../../../../../common/lib/kibana'; -import { AllowedActionTypeIds } from '../../constants'; - -interface CreateConnectorPopoverProps { - onConnectorSaved: () => void; -} - -export const CreateConnectorPopover = React.memo( - ({ onConnectorSaved }) => { - const [isOpen, setIsPopoverOpen] = useState(false); - const closePopover = useCallback(() => setIsPopoverOpen(false), []); - const { - http, - triggersActionsUi: { actionTypeRegistry }, - notifications: { toasts }, - } = useKibana().services; - - const onButtonClick = () => setIsPopoverOpen((isPopoverOpen) => !isPopoverOpen); - - const [selectedActionType, setSelectedActionType] = useState(null); - const onModalClose = useCallback(() => { - setSelectedActionType(null); - closePopover(); - }, [closePopover]); - - const { data } = useLoadActionTypes({ http, toasts }); - - const actionTypes = useMemo(() => { - if (AllowedActionTypeIds && data) { - return data.filter((actionType) => AllowedActionTypeIds.includes(actionType.id)); - } - return data; - }, [data]); - - if (!actionTypes) { - return ; - } - - return ( - <> - - - {'Create new connector'} - - - } - isOpen={isOpen} - closePopover={closePopover} - data-test-subj="createConnectorPopover" - > - ({ - id: actionType.id, - label: actionType.name, - size: 's', - icon: ( - - ), - isDisabled: !actionType.enabled, - // @ts-ignore - onClick: () => setSelectedActionType(actionType), - }))} - /> - - {selectedActionType && ( - - )} - - ); - } -); -CreateConnectorPopover.displayName = 'CreateConnectorPopover'; diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/translations.ts b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/translations.ts index 73b58e0089370..071ccacbbd2fb 100644 --- a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/translations.ts +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/translations.ts @@ -35,3 +35,10 @@ export const ASSISTANT_CARD_CALLOUT_INTEGRATIONS_BUTTON = i18n.translate( defaultMessage: 'Add integrations step', } ); + +export const ASSISTANT_CARD_CREATE_NEW_CONNECTOR_POPOVER = i18n.translate( + 'xpack.securitySolution.onboarding.assistantCard.calloutIntegrationsButton', + { + defaultMessage: 'Create new connector', + } +); From 4d6d6ddfaf2696b1bab492a52446af85c262e336 Mon Sep 17 00:00:00 2001 From: Agustina Nahir Ruidiaz Date: Wed, 9 Oct 2024 11:12:42 +0200 Subject: [PATCH 08/13] pr comments --- .../assistant/assistant_check_complete.ts | 36 +++++-------------- .../components/connectors/connector_cards.tsx | 12 ++----- .../components/connectors/connector_setup.tsx | 17 +++------ .../connectors/create_connector_popover.tsx | 22 ++---------- .../cards/common/card_content_panel.tsx | 7 ++-- 5 files changed, 22 insertions(+), 72 deletions(-) diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/assistant_check_complete.ts b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/assistant_check_complete.ts index a8a13d14af55a..ce79b57c795e8 100644 --- a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/assistant_check_complete.ts +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/assistant_check_complete.ts @@ -7,41 +7,23 @@ import { loadAllActions as loadConnectors } from '@kbn/triggers-actions-ui-plugin/public/common/constants'; import type { AIConnector } from '@kbn/elastic-assistant/impl/connectorland/connector_selector'; -import type { OpenAiProviderType } from '@kbn/stack-connectors-plugin/public/common'; import type { OnboardingCardCheckComplete } from '../../../../types'; import { AllowedActionTypeIds } from './constants'; export const checkAssistantCardComplete: OnboardingCardCheckComplete = async ({ http }) => { - const aiConnectorsResult = await loadConnectors({ http }); + const allConnectors = await loadConnectors({ http }); - const reducedAiConnectorsResult = aiConnectorsResult.reduce( - (acc: AIConnector[], connector) => [ - ...acc, - ...(!connector.isMissingSecrets && AllowedActionTypeIds.includes(connector.actionTypeId) - ? [ - { - ...connector, - apiProvider: - !connector.isPreconfigured && - !connector.isSystemAction && - connector?.config?.apiProvider - ? (connector?.config?.apiProvider as OpenAiProviderType) - : undefined, - }, - ] - : []), - ], - [] - ); - - const filteredConnectors = reducedAiConnectorsResult.filter(({ actionTypeId }) => - AllowedActionTypeIds.includes(actionTypeId) - ); + const aiConnectors = allConnectors.reduce((acc: AIConnector[], connector) => { + if (!connector.isMissingSecrets && AllowedActionTypeIds.includes(connector.actionTypeId)) { + acc.push(connector); + } + return acc; + }, []); return { - isComplete: filteredConnectors.length > 0, + isComplete: aiConnectors.length > 0, metadata: { - connectors: filteredConnectors, + connectors: aiConnectors, }, }; }; diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/components/connectors/connector_cards.tsx b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/components/connectors/connector_cards.tsx index 5fcd1fa7a6f17..3724ff02099e3 100644 --- a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/components/connectors/connector_cards.tsx +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/components/connectors/connector_cards.tsx @@ -19,9 +19,7 @@ import { import { css } from '@emotion/css'; import { useKibana } from '../../../../../../../common/lib/kibana'; import { CreateConnectorPopover } from './create_connector_popover'; -import { useFilteredActionTypes } from './hooks/use_load_action_types'; import { ConnectorSetup } from './connector_setup'; -import { AllowedActionTypeIds } from '../../constants'; interface ConnectorCardsProps { connectors?: AIConnector[]; @@ -32,14 +30,10 @@ interface ConnectorCardsProps { export const ConnectorCards = React.memo( ({ connectors, onConnectorSaved, onClose }) => { const { - http, triggersActionsUi: { actionTypeRegistry }, - notifications: { toasts }, } = useKibana().services; - const actionTypes = useFilteredActionTypes(http, toasts); - - if (!actionTypes || !connectors) return ; + if (!connectors) return ; if (connectors.length > 0) { return ( @@ -79,9 +73,7 @@ export const ConnectorCards = React.memo( ); } - return ( - - ); + return ; } ); ConnectorCards.displayName = 'ConnectorCards'; diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/components/connectors/connector_setup.tsx b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/components/connectors/connector_setup.tsx index 68c61c24373d7..8f944b99d3156 100644 --- a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/components/connectors/connector_setup.tsx +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/components/connectors/connector_setup.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import React, { useCallback, useMemo, useState } from 'react'; +import React, { useCallback, useState } from 'react'; import { useEuiTheme, EuiFlexGroup, @@ -23,9 +23,9 @@ import { ConnectorAddModal, type ActionConnector, } from '@kbn/triggers-actions-ui-plugin/public/common/constants'; -import { useLoadActionTypes } from '@kbn/elastic-assistant/impl/connectorland/use_load_action_types'; import type { ActionType } from '@kbn/actions-plugin/common'; import { useKibana } from '../../../../../../../common/lib/kibana'; +import { useFilteredActionTypes } from './hooks/use_load_action_types'; const usePanelCss = () => { const { euiTheme } = useEuiTheme(); @@ -42,11 +42,10 @@ const usePanelCss = () => { interface ConnectorSetupProps { onConnectorSaved?: (savedAction: ActionConnector) => void; onClose?: () => void; - actionTypeIds?: string[]; compressed?: boolean; } export const ConnectorSetup = React.memo( - ({ onConnectorSaved, onClose, actionTypeIds, compressed = false }) => { + ({ onConnectorSaved, onClose, compressed = false }) => { const panelCss = usePanelCss(); const { http, @@ -54,19 +53,13 @@ export const ConnectorSetup = React.memo( notifications: { toasts }, } = useKibana().services; const [selectedActionType, setSelectedActionType] = useState(null); + const onModalClose = useCallback(() => { setSelectedActionType(null); onClose?.(); }, [onClose]); - const { data } = useLoadActionTypes({ http, toasts }); - - const actionTypes = useMemo(() => { - if (actionTypeIds && data) { - return data.filter((actionType) => actionTypeIds.includes(actionType.id)); - } - return data; - }, [data, actionTypeIds]); + const actionTypes = useFilteredActionTypes(http, toasts); if (!actionTypes) { return ; diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/components/connectors/create_connector_popover.tsx b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/components/connectors/create_connector_popover.tsx index 2e50efa1ef4c7..ebfac618d195e 100644 --- a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/components/connectors/create_connector_popover.tsx +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/components/connectors/create_connector_popover.tsx @@ -6,11 +6,8 @@ */ import React, { useCallback, useState } from 'react'; import { css } from '@emotion/css'; -import { EuiPopover, EuiLink, EuiText, EuiLoadingSpinner } from '@elastic/eui'; -import { useKibana } from '../../../../../../../common/lib/kibana'; -import { useFilteredActionTypes } from './hooks/use_load_action_types'; +import { EuiPopover, EuiLink, EuiText } from '@elastic/eui'; import { ConnectorSetup } from './connector_setup'; -import { AllowedActionTypeIds } from '../../constants'; import * as i18n from '../../translations'; interface CreateConnectorPopoverProps { @@ -21,19 +18,9 @@ export const CreateConnectorPopover = React.memo( ({ onConnectorSaved }) => { const [isOpen, setIsPopoverOpen] = useState(false); const closePopover = useCallback(() => setIsPopoverOpen(false), []); - const { - http, - notifications: { toasts }, - } = useKibana().services; const onButtonClick = () => setIsPopoverOpen((isPopoverOpen) => !isPopoverOpen); - const actionTypes = useFilteredActionTypes(http, toasts); - - if (!actionTypes) { - return ; - } - return ( ( closePopover={closePopover} data-test-subj="createConnectorPopover" > - + ); } diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/card_content_panel.tsx b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/card_content_panel.tsx index 6fcdc0574a868..26a68970ac2ac 100644 --- a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/card_content_panel.tsx +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/card_content_panel.tsx @@ -15,13 +15,14 @@ export const OnboardingCardContentPanel = React.memo - + {children} From b2c3e803d2211525836fd6d94c0619fecf1280ed Mon Sep 17 00:00:00 2001 From: Agustina Nahir Ruidiaz Date: Wed, 9 Oct 2024 12:09:28 +0200 Subject: [PATCH 09/13] improve style in card_content_panel --- .../onboarding_body/cards/common/card_content_panel.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/card_content_panel.tsx b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/card_content_panel.tsx index 26a68970ac2ac..0f66e1023494e 100644 --- a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/card_content_panel.tsx +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/card_content_panel.tsx @@ -16,8 +16,8 @@ export const OnboardingCardContentPanel = React.memo Date: Wed, 9 Oct 2024 15:58:14 +0200 Subject: [PATCH 10/13] n AI connectors added - complete status badge --- .../cards/assistant/assistant_check_complete.ts | 7 +++++++ .../components/connectors/connector_cards.tsx | 16 ++++++++-------- .../cards/assistant/translations.ts | 14 ++++++++++++++ 3 files changed, 29 insertions(+), 8 deletions(-) diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/assistant_check_complete.ts b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/assistant_check_complete.ts index ce79b57c795e8..367317f437500 100644 --- a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/assistant_check_complete.ts +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/assistant_check_complete.ts @@ -9,6 +9,7 @@ import { loadAllActions as loadConnectors } from '@kbn/triggers-actions-ui-plugi import type { AIConnector } from '@kbn/elastic-assistant/impl/connectorland/connector_selector'; import type { OnboardingCardCheckComplete } from '../../../../types'; import { AllowedActionTypeIds } from './constants'; +import * as i18n from './translations'; export const checkAssistantCardComplete: OnboardingCardCheckComplete = async ({ http }) => { const allConnectors = await loadConnectors({ http }); @@ -20,8 +21,14 @@ export const checkAssistantCardComplete: OnboardingCardCheckComplete = async ({ return acc; }, []); + const completeBadgeText = + aiConnectors.length === 1 + ? `${aiConnectors.length} ${i18n.ASSISTANT_CARD_CONNECTOR_ADDED}` + : `${aiConnectors.length} ${i18n.ASSISTANT_CARD_CONNECTORS_ADDED}`; + return { isComplete: aiConnectors.length > 0, + completeBadgeText, metadata: { connectors: aiConnectors, }, diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/components/connectors/connector_cards.tsx b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/components/connectors/connector_cards.tsx index 3724ff02099e3..b6e5e4a7c88eb 100644 --- a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/components/connectors/connector_cards.tsx +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/components/connectors/connector_cards.tsx @@ -38,7 +38,13 @@ export const ConnectorCards = React.memo( if (connectors.length > 0) { return ( <> - + {connectors?.map((connector) => ( ( `} > - + {connector.name} diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/translations.ts b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/translations.ts index 071ccacbbd2fb..78af65253bf1c 100644 --- a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/translations.ts +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/translations.ts @@ -42,3 +42,17 @@ export const ASSISTANT_CARD_CREATE_NEW_CONNECTOR_POPOVER = i18n.translate( defaultMessage: 'Create new connector', } ); + +export const ASSISTANT_CARD_CONNECTOR_ADDED = i18n.translate( + 'xpack.securitySolution.onboarding.assistantCard.calloutIntegrationsButton', + { + defaultMessage: 'AI connector added', + } +); + +export const ASSISTANT_CARD_CONNECTORS_ADDED = i18n.translate( + 'xpack.securitySolution.onboarding.assistantCard.calloutIntegrationsButton', + { + defaultMessage: 'AI connectors added', + } +); From 92b7c719f044be83da70f7b62b0c1b2b772cecba Mon Sep 17 00:00:00 2001 From: Agustina Nahir Ruidiaz Date: Wed, 9 Oct 2024 16:29:59 +0200 Subject: [PATCH 11/13] missing style for ai connector --- .../assistant/components/connectors/connector_cards.tsx | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/components/connectors/connector_cards.tsx b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/components/connectors/connector_cards.tsx index b6e5e4a7c88eb..42b3a5b14f039 100644 --- a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/components/connectors/connector_cards.tsx +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/components/connectors/connector_cards.tsx @@ -54,7 +54,11 @@ export const ConnectorCards = React.memo( > - + {connector.name} From 39b6af233a8bccb5f32189e1964fcecd77dd45e1 Mon Sep 17 00:00:00 2001 From: Agustina Nahir Ruidiaz Date: Wed, 9 Oct 2024 18:07:01 +0200 Subject: [PATCH 12/13] pr comments --- .../cards/assistant/assistant_check_complete.ts | 13 ++++++++----- .../cards/assistant/translations.ts | 16 +--------------- 2 files changed, 9 insertions(+), 20 deletions(-) diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/assistant_check_complete.ts b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/assistant_check_complete.ts index 367317f437500..eae9f13bec8a0 100644 --- a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/assistant_check_complete.ts +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/assistant_check_complete.ts @@ -7,9 +7,9 @@ import { loadAllActions as loadConnectors } from '@kbn/triggers-actions-ui-plugin/public/common/constants'; import type { AIConnector } from '@kbn/elastic-assistant/impl/connectorland/connector_selector'; +import { i18n } from '@kbn/i18n'; import type { OnboardingCardCheckComplete } from '../../../../types'; import { AllowedActionTypeIds } from './constants'; -import * as i18n from './translations'; export const checkAssistantCardComplete: OnboardingCardCheckComplete = async ({ http }) => { const allConnectors = await loadConnectors({ http }); @@ -21,10 +21,13 @@ export const checkAssistantCardComplete: OnboardingCardCheckComplete = async ({ return acc; }, []); - const completeBadgeText = - aiConnectors.length === 1 - ? `${aiConnectors.length} ${i18n.ASSISTANT_CARD_CONNECTOR_ADDED}` - : `${aiConnectors.length} ${i18n.ASSISTANT_CARD_CONNECTORS_ADDED}`; + const completeBadgeText = i18n.translate( + 'xpack.securitySolution.onboarding.assistantCard.badge.completeText', + { + defaultMessage: '{count} AI {count, plural, one {connector} other {connectors}} added', + values: { count: aiConnectors.length }, + } + ); return { isComplete: aiConnectors.length > 0, diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/translations.ts b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/translations.ts index 78af65253bf1c..a1c364b74cfd7 100644 --- a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/translations.ts +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/translations.ts @@ -37,22 +37,8 @@ export const ASSISTANT_CARD_CALLOUT_INTEGRATIONS_BUTTON = i18n.translate( ); export const ASSISTANT_CARD_CREATE_NEW_CONNECTOR_POPOVER = i18n.translate( - 'xpack.securitySolution.onboarding.assistantCard.calloutIntegrationsButton', + 'xpack.securitySolution.onboarding.assistantCard.createNewConnectorPopover', { defaultMessage: 'Create new connector', } ); - -export const ASSISTANT_CARD_CONNECTOR_ADDED = i18n.translate( - 'xpack.securitySolution.onboarding.assistantCard.calloutIntegrationsButton', - { - defaultMessage: 'AI connector added', - } -); - -export const ASSISTANT_CARD_CONNECTORS_ADDED = i18n.translate( - 'xpack.securitySolution.onboarding.assistantCard.calloutIntegrationsButton', - { - defaultMessage: 'AI connectors added', - } -); From f272a5b68e46346fa97dd3bf2d822f81e9809dfd Mon Sep 17 00:00:00 2001 From: Agustina Nahir Ruidiaz Date: Thu, 10 Oct 2024 10:37:40 +0200 Subject: [PATCH 13/13] design feedback --- .../onboarding/components/onboarding_body/body_config.ts | 3 +-- .../onboarding_body/cards/assistant/assistant_card.tsx | 2 +- .../cards/assistant/components/connectors/connector_setup.tsx | 2 +- .../components/onboarding_body/cards/assistant/translations.ts | 2 +- .../cards/common/card_content_image_panel.styles.ts | 1 + .../onboarding_body/cards/common/card_content_image_panel.tsx | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/body_config.ts b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/body_config.ts index 79998104c728b..8191f392e97e6 100644 --- a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/body_config.ts +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/body_config.ts @@ -12,7 +12,6 @@ import { dashboardsCardConfig } from './cards/dashboards'; import { rulesCardConfig } from './cards/rules'; import { alertsCardConfig } from './cards/alerts'; import { assistantCardConfig } from './cards/assistant'; -import { attackDiscoveryCardConfig } from './cards/attack_discovery'; export const bodyConfig: OnboardingGroupConfig[] = [ { @@ -31,6 +30,6 @@ export const bodyConfig: OnboardingGroupConfig[] = [ title: i18n.translate('xpack.securitySolution.onboarding.discoverGroup.title', { defaultMessage: 'Discover Elastic AI', }), - cards: [assistantCardConfig, attackDiscoveryCardConfig], + cards: [assistantCardConfig], }, ]; diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/assistant_card.tsx b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/assistant_card.tsx index ef35662dd5c5c..d2592ae01dea0 100644 --- a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/assistant_card.tsx +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/assistant_card.tsx @@ -34,7 +34,7 @@ export const AssistantCard: OnboardingCardComponent = ({ const aiConnectors = checkCompleteMetadata?.connectors as AIConnector[]; return ( - + diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/components/connectors/connector_setup.tsx b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/components/connectors/connector_setup.tsx index 8f944b99d3156..c0a82049d98c0 100644 --- a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/components/connectors/connector_setup.tsx +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/components/connectors/connector_setup.tsx @@ -87,7 +87,7 @@ export const ConnectorSetup = React.memo( }))} /> ) : ( - + {actionTypes?.map((actionType: ActionType) => ( { const { euiTheme } = useEuiTheme(); const shadowStyles = useEuiShadow('m'); return css` + padding-top: 8px; .cardSpacer { width: 8%; } diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/card_content_image_panel.tsx b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/card_content_image_panel.tsx index 8b9fd9d9cc00c..0110e001af7ac 100644 --- a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/card_content_image_panel.tsx +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/card_content_image_panel.tsx @@ -16,7 +16,7 @@ export const OnboardingCardContentImagePanel = React.memo< >(({ children, imageSrc, imageAlt }) => { const styles = useCardContentImagePanelStyles(); return ( - + {children}