From d53727444d36550d2909a542075e8300f2dd288d Mon Sep 17 00:00:00 2001 From: Eugene Date: Wed, 5 Feb 2025 18:12:56 +0000 Subject: [PATCH 1/8] feat: activity actions decorator --- .../fluentTheme/withCustomDecorator.html | 205 ++++++++++++++++++ .../withCustomDecorator.html.snap-1.png | Bin 0 -> 9553 bytes .../withCustomDecorator.html.snap-2.png | Bin 0 -> 23855 bytes packages/api/src/decorator/index.ts | 1 + .../private/ActivityActionsDecorator.tsx | 23 ++ .../ActivityActionsDecoratorMiddleware.ts | 31 +++ .../decorator/private/ActivityDecorator.tsx | 24 +- .../private/activityDecoratorRequest.ts | 4 + .../private/createDecoratorComposer.tsx | 19 +- .../private/useActivityDecoratorRequest.ts | 24 ++ .../Text/private/MarkdownTextContent.tsx | 33 +-- 11 files changed, 326 insertions(+), 38 deletions(-) create mode 100644 __tests__/html2/fluentTheme/withCustomDecorator.html create mode 100644 __tests__/html2/fluentTheme/withCustomDecorator.html.snap-1.png create mode 100644 __tests__/html2/fluentTheme/withCustomDecorator.html.snap-2.png create mode 100644 packages/api/src/decorator/private/ActivityActionsDecorator.tsx create mode 100644 packages/api/src/decorator/private/ActivityActionsDecoratorMiddleware.ts create mode 100644 packages/api/src/decorator/private/useActivityDecoratorRequest.ts diff --git a/__tests__/html2/fluentTheme/withCustomDecorator.html b/__tests__/html2/fluentTheme/withCustomDecorator.html new file mode 100644 index 0000000000..d1dbc760d0 --- /dev/null +++ b/__tests__/html2/fluentTheme/withCustomDecorator.html @@ -0,0 +1,205 @@ + + + + + + + + + + + + + + + + +
+ + + + \ No newline at end of file diff --git a/__tests__/html2/fluentTheme/withCustomDecorator.html.snap-1.png b/__tests__/html2/fluentTheme/withCustomDecorator.html.snap-1.png new file mode 100644 index 0000000000000000000000000000000000000000..736ccb5ea1413e8b9549248d11a2d5c0e299c651 GIT binary patch literal 9553 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 literal 0 HcmV?d00001 diff --git a/__tests__/html2/fluentTheme/withCustomDecorator.html.snap-2.png b/__tests__/html2/fluentTheme/withCustomDecorator.html.snap-2.png new file mode 100644 index 0000000000000000000000000000000000000000..30cc4a68a24c822cb7a6cd7ba9f6a11c80f531f1 GIT binary patch literal 23855 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 literal 0 HcmV?d00001 diff --git a/packages/api/src/decorator/index.ts b/packages/api/src/decorator/index.ts index fbe3f8230b..0a43087555 100644 --- a/packages/api/src/decorator/index.ts +++ b/packages/api/src/decorator/index.ts @@ -1,4 +1,5 @@ export { DecoratorComposer } from './private/DecoratorComposer'; export { default as ActivityDecorator } from './private/ActivityDecorator'; +export { default as ActivityActionsDecorator } from './private/ActivityActionsDecorator'; export { type DecoratorMiddleware } from './private/createDecoratorComposer'; export { default as ActivityDecoratorRequest } from './private/activityDecoratorRequest'; diff --git a/packages/api/src/decorator/private/ActivityActionsDecorator.tsx b/packages/api/src/decorator/private/ActivityActionsDecorator.tsx new file mode 100644 index 0000000000..756048ae2c --- /dev/null +++ b/packages/api/src/decorator/private/ActivityActionsDecorator.tsx @@ -0,0 +1,23 @@ +import { type WebChatActivity } from 'botframework-webchat-core'; +import React, { Fragment, memo, type ReactNode } from 'react'; +import { ActivityActionsDecoratorMiddlewareProxy } from './ActivityActionsDecoratorMiddleware'; +import useActivityDecoratorRequest from './useActivityDecoratorRequest'; + +const ActivityActionsDecoratorFallback = memo(({ children }) => {children}); + +ActivityActionsDecoratorFallback.displayName = 'ActivityActionsDecoratorFallback'; + +function ActivityActionsDecorator({ + activity, + children +}: Readonly<{ activity?: WebChatActivity; children?: ReactNode }>) { + const request = useActivityDecoratorRequest(activity); + + return ( + + {children} + + ); +} + +export default memo(ActivityActionsDecorator); diff --git a/packages/api/src/decorator/private/ActivityActionsDecoratorMiddleware.ts b/packages/api/src/decorator/private/ActivityActionsDecoratorMiddleware.ts new file mode 100644 index 0000000000..ddd7509a8f --- /dev/null +++ b/packages/api/src/decorator/private/ActivityActionsDecoratorMiddleware.ts @@ -0,0 +1,31 @@ +import { type EmptyObject } from 'type-fest'; + +import ActivityDecoratorRequest from './activityDecoratorRequest'; +import templateMiddleware from './templateMiddleware'; + +const { + initMiddleware: initActivityActionsDecoratorMiddleware, + Provider: ActivityActionsDecoratorMiddlewareProvider, + Proxy: ActivityActionsDecoratorMiddlewareProxy, + types +} = templateMiddleware( + 'ActivityActionsDecoratorMiddleware' +); + +type ActivityActionsDecoratorMiddleware = typeof types.middleware; +type ActivityActionsDecoratorMiddlewareInit = typeof types.init; +type ActivityActionsDecoratorMiddlewareProps = typeof types.props; +type ActivityActionsDecoratorMiddlewareRequest = typeof types.request; + +const activityActionsDecoratorTypeName = 'activity actions' as const; + +export { + ActivityActionsDecoratorMiddlewareProvider, + ActivityActionsDecoratorMiddlewareProxy, + activityActionsDecoratorTypeName, + initActivityActionsDecoratorMiddleware, + type ActivityActionsDecoratorMiddleware, + type ActivityActionsDecoratorMiddlewareInit, + type ActivityActionsDecoratorMiddlewareProps, + type ActivityActionsDecoratorMiddlewareRequest +}; diff --git a/packages/api/src/decorator/private/ActivityDecorator.tsx b/packages/api/src/decorator/private/ActivityDecorator.tsx index 2662e45adf..482242ef33 100644 --- a/packages/api/src/decorator/private/ActivityDecorator.tsx +++ b/packages/api/src/decorator/private/ActivityDecorator.tsx @@ -1,30 +1,14 @@ -import { getActivityLivestreamingMetadata, type WebChatActivity } from 'botframework-webchat-core'; -import React, { Fragment, memo, useMemo, type ReactNode } from 'react'; -import { ActivityDecoratorRequest } from '..'; +import { type WebChatActivity } from 'botframework-webchat-core'; +import React, { Fragment, memo, type ReactNode } from 'react'; import { ActivityBorderDecoratorMiddlewareProxy } from './ActivityBorderDecoratorMiddleware'; +import useActivityDecoratorRequest from './useActivityDecoratorRequest'; const ActivityDecoratorFallback = memo(({ children }) => {children}); ActivityDecoratorFallback.displayName = 'ActivityDecoratorFallback'; -const supportedActivityRoles: ActivityDecoratorRequest['from'][] = ['bot', 'channel', 'user', undefined]; - function ActivityDecorator({ activity, children }: Readonly<{ activity?: WebChatActivity; children?: ReactNode }>) { - const request = useMemo(() => { - const { type } = getActivityLivestreamingMetadata(activity) || {}; - - return { - livestreamingState: - type === 'final activity' - ? 'completing' - : type === 'informative message' - ? 'preparing' - : type === 'interim activity' - ? 'ongoing' - : undefined, - from: supportedActivityRoles.includes(activity?.from?.role) ? activity?.from?.role : undefined - }; - }, [activity]); + const request = useActivityDecoratorRequest(activity); return ( diff --git a/packages/api/src/decorator/private/activityDecoratorRequest.ts b/packages/api/src/decorator/private/activityDecoratorRequest.ts index eb90bddd11..2b85bc2ee1 100644 --- a/packages/api/src/decorator/private/activityDecoratorRequest.ts +++ b/packages/api/src/decorator/private/activityDecoratorRequest.ts @@ -1,3 +1,5 @@ +import { type WebChatActivity } from 'botframework-webchat-core'; + type ActivityDecoratorRequestType = { /** * Decorate the activity as it participate in a livestreaming session. @@ -18,6 +20,8 @@ type ActivityDecoratorRequestType = { * - `undefined` - the sender is unknown */ from: 'bot' | 'channel' | `user` | undefined; + + activity: WebChatActivity; }; export default ActivityDecoratorRequestType; diff --git a/packages/api/src/decorator/private/createDecoratorComposer.tsx b/packages/api/src/decorator/private/createDecoratorComposer.tsx index 19fa55ad27..5cf0d4b620 100644 --- a/packages/api/src/decorator/private/createDecoratorComposer.tsx +++ b/packages/api/src/decorator/private/createDecoratorComposer.tsx @@ -5,8 +5,14 @@ import { initActivityBorderDecoratorMiddleware, type ActivityBorderDecoratorMiddleware } from './ActivityBorderDecoratorMiddleware'; +import { + ActivityActionsDecoratorMiddleware, + ActivityActionsDecoratorMiddlewareProvider, + activityActionsDecoratorTypeName, + initActivityActionsDecoratorMiddleware +} from './ActivityActionsDecoratorMiddleware'; -type DecoratorMiddlewareInit = typeof activityBorderDecoratorTypeName; +type DecoratorMiddlewareInit = typeof activityBorderDecoratorTypeName | typeof activityActionsDecoratorTypeName; export type DecoratorComposerComponent = ( props: Readonly<{ @@ -17,7 +23,7 @@ export type DecoratorComposerComponent = ( export type DecoratorMiddleware = ( init: DecoratorMiddlewareInit -) => ReturnType | false; +) => ReturnType | false; const EMPTY_ARRAY = []; @@ -28,9 +34,16 @@ export default (): DecoratorComposerComponent => [middleware] ); + const actionsMiddlewares = useMemo( + () => initActivityActionsDecoratorMiddleware(middleware, activityActionsDecoratorTypeName), + [middleware] + ); + return ( - {children} + + {children} + ); }; diff --git a/packages/api/src/decorator/private/useActivityDecoratorRequest.ts b/packages/api/src/decorator/private/useActivityDecoratorRequest.ts new file mode 100644 index 0000000000..855f0f0f70 --- /dev/null +++ b/packages/api/src/decorator/private/useActivityDecoratorRequest.ts @@ -0,0 +1,24 @@ +import { WebChatActivity, getActivityLivestreamingMetadata } from 'botframework-webchat-core'; +import { useMemo } from 'react'; +import { ActivityDecoratorRequest } from '..'; + +const supportedActivityRoles: ActivityDecoratorRequest['from'][] = ['bot', 'channel', 'user', undefined]; + +export default function useActivityDecoratorRequest(activity: WebChatActivity) { + return useMemo(() => { + const { type } = getActivityLivestreamingMetadata(activity) || {}; + + return { + activity, + livestreamingState: + type === 'final activity' + ? 'completing' + : type === 'informative message' + ? 'preparing' + : type === 'interim activity' + ? 'ongoing' + : undefined, + from: supportedActivityRoles.includes(activity?.from?.role) ? activity?.from?.role : undefined + }; + }, [activity]); +} diff --git a/packages/component/src/Attachment/Text/private/MarkdownTextContent.tsx b/packages/component/src/Attachment/Text/private/MarkdownTextContent.tsx index 07f4b57a8a..950ea440c0 100644 --- a/packages/component/src/Attachment/Text/private/MarkdownTextContent.tsx +++ b/packages/component/src/Attachment/Text/private/MarkdownTextContent.tsx @@ -1,4 +1,5 @@ import { hooks } from 'botframework-webchat-api'; +import { ActivityActionsDecorator } from 'botframework-webchat-api/decorator'; import { getOrgSchemaMessage, onErrorResumeNext, @@ -234,21 +235,23 @@ const MarkdownTextContent = memo(({ activity, children, markdown }: Props) => { )}
- {activity.type === 'message' && isBasedOnSoftwareSourceCode(messageThing) && messageThing.isBasedOn.text ? ( - - ) : null} - {activity.type === 'message' && activity.text && messageThing?.keywords?.includes('AllowCopy') ? ( - - ) : null} - {activity.type === 'message' && feedbackActionsPlacement === 'activity-actions' && ( - - )} + + {activity.type === 'message' && isBasedOnSoftwareSourceCode(messageThing) && messageThing.isBasedOn.text ? ( + + ) : null} + {activity.type === 'message' && activity.text && messageThing?.keywords?.includes('AllowCopy') ? ( + + ) : null} + {activity.type === 'message' && feedbackActionsPlacement === 'activity-actions' && ( + + )} +
); From a70514217c00a91ceab51c2e19403afe9a8210bd Mon Sep 17 00:00:00 2001 From: Eugene Date: Wed, 5 Feb 2025 22:48:44 +0000 Subject: [PATCH 2/8] Polish and add a test --- ...t-theme-applied-with-decorators-2-snap.png | Bin 13806 -> 0 bytes .../html/fluentTheme/withCustomDecorator.html | 138 ------- .../html/fluentTheme/withCustomDecorator.js | 5 - ...omDecorator.html => decorator.custom.html} | 12 +- .../decorator.custom.html.snap-1.png} | Bin ...2.png => decorator.custom.html.snap-2.png} | Bin .../html2/fluentTheme/decorator.modal.html | 351 ++++++++++++++++++ .../decorator.modal.html.snap-1.png | Bin 0 -> 17371 bytes .../decorator.modal.html.snap-2.png | Bin 0 -> 69011 bytes .../decorator.modal.html.snap-3.png | Bin 0 -> 17371 bytes .../withCustomDecorator.html.snap-1.png | Bin 9553 -> 0 bytes .../{private => }/ActivityDecorator.tsx | 4 +- packages/api/src/decorator/index.ts | 2 +- .../private/ActivityActionsDecorator.tsx | 6 +- .../ActivityActionsDecoratorMiddleware.ts | 12 +- .../private/activityDecoratorRequest.ts | 4 - .../private/createDecoratorComposer.tsx | 10 +- .../decorator/private/templateMiddleware.ts | 2 +- .../Text/{private => }/ActivityButton.tsx | 4 +- .../Text/private/ActivityCopyButton.tsx | 2 +- .../Text/private/ActivityViewCodeButton.tsx | 2 +- .../Text/private/MarkdownTextContent.tsx | 1 + packages/component/src/hooks/index.ts | 2 + packages/component/src/index.ts | 2 + 24 files changed, 388 insertions(+), 171 deletions(-) delete mode 100644 __tests__/__image_snapshots__/html/with-custom-decorator-js-fluent-theme-applied-with-decorators-2-snap.png delete mode 100644 __tests__/html/fluentTheme/withCustomDecorator.html delete mode 100644 __tests__/html/fluentTheme/withCustomDecorator.js rename __tests__/html2/fluentTheme/{withCustomDecorator.html => decorator.custom.html} (95%) rename __tests__/{__image_snapshots__/html/with-custom-decorator-js-fluent-theme-applied-with-decorators-1-snap.png => html2/fluentTheme/decorator.custom.html.snap-1.png} (100%) rename __tests__/html2/fluentTheme/{withCustomDecorator.html.snap-2.png => decorator.custom.html.snap-2.png} (100%) create mode 100644 __tests__/html2/fluentTheme/decorator.modal.html create mode 100644 __tests__/html2/fluentTheme/decorator.modal.html.snap-1.png create mode 100644 __tests__/html2/fluentTheme/decorator.modal.html.snap-2.png create mode 100644 __tests__/html2/fluentTheme/decorator.modal.html.snap-3.png delete mode 100644 __tests__/html2/fluentTheme/withCustomDecorator.html.snap-1.png rename packages/api/src/decorator/{private => }/ActivityDecorator.tsx (79%) rename packages/component/src/Attachment/Text/{private => }/ActivityButton.tsx (91%) diff --git a/__tests__/__image_snapshots__/html/with-custom-decorator-js-fluent-theme-applied-with-decorators-2-snap.png b/__tests__/__image_snapshots__/html/with-custom-decorator-js-fluent-theme-applied-with-decorators-2-snap.png deleted file mode 100644 index 111805980d6d6fc8ab94234c58ee768f7370e817..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13806 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 diff --git a/__tests__/html/fluentTheme/withCustomDecorator.html b/__tests__/html/fluentTheme/withCustomDecorator.html deleted file mode 100644 index 051c265105..0000000000 --- a/__tests__/html/fluentTheme/withCustomDecorator.html +++ /dev/null @@ -1,138 +0,0 @@ - - - - - - - - - - - - - - -
- - - diff --git a/__tests__/html/fluentTheme/withCustomDecorator.js b/__tests__/html/fluentTheme/withCustomDecorator.js deleted file mode 100644 index 6911922f89..0000000000 --- a/__tests__/html/fluentTheme/withCustomDecorator.js +++ /dev/null @@ -1,5 +0,0 @@ -/** @jest-environment ./packages/test/harness/src/host/jest/WebDriverEnvironment.js */ - -describe('Fluent theme applied', () => { - test('with decorators', () => runHTML('fluentTheme/withCustomDecorator')); -}); diff --git a/__tests__/html2/fluentTheme/withCustomDecorator.html b/__tests__/html2/fluentTheme/decorator.custom.html similarity index 95% rename from __tests__/html2/fluentTheme/withCustomDecorator.html rename to __tests__/html2/fluentTheme/decorator.custom.html index d1dbc760d0..35b2ffd900 100644 --- a/__tests__/html2/fluentTheme/withCustomDecorator.html +++ b/__tests__/html2/fluentTheme/decorator.custom.html @@ -21,8 +21,7 @@ } .actions { - display: flex; - gap: 4px; + display: contents; } .actions > * { @@ -53,8 +52,11 @@ return
{children}
; } - function Actions({ children }) { - return
{children}
; + function Actions({ activity, children }) { + if (activity.entities[0].keywords.includes('highlighted')) { + return
{children}
; + } + return <>{children}; } const decoratorMiddleware = [ @@ -66,7 +68,7 @@ (next => request => (request.livestreamingState === 'preparing' ? Loader : next(request))), init => init === 'activity actions' && - (next => request => (request.activity.entities?.[0].keywords.includes('highlighted') ? Actions : next(request))) + (next => request => (!request.livestreamingState ? Actions : next(request))) ]; const { directLine, store } = testHelpers.createDirectLineEmulator(); diff --git a/__tests__/__image_snapshots__/html/with-custom-decorator-js-fluent-theme-applied-with-decorators-1-snap.png b/__tests__/html2/fluentTheme/decorator.custom.html.snap-1.png similarity index 100% rename from __tests__/__image_snapshots__/html/with-custom-decorator-js-fluent-theme-applied-with-decorators-1-snap.png rename to __tests__/html2/fluentTheme/decorator.custom.html.snap-1.png diff --git a/__tests__/html2/fluentTheme/withCustomDecorator.html.snap-2.png b/__tests__/html2/fluentTheme/decorator.custom.html.snap-2.png similarity index 100% rename from __tests__/html2/fluentTheme/withCustomDecorator.html.snap-2.png rename to __tests__/html2/fluentTheme/decorator.custom.html.snap-2.png diff --git a/__tests__/html2/fluentTheme/decorator.modal.html b/__tests__/html2/fluentTheme/decorator.modal.html new file mode 100644 index 0000000000..29415c907a --- /dev/null +++ b/__tests__/html2/fluentTheme/decorator.modal.html @@ -0,0 +1,351 @@ + + + + + + + + + + + + + + + + +
+ + + \ No newline at end of file diff --git a/__tests__/html2/fluentTheme/decorator.modal.html.snap-1.png b/__tests__/html2/fluentTheme/decorator.modal.html.snap-1.png new file mode 100644 index 0000000000000000000000000000000000000000..bde7201298876fe3942e2ce8667ec288b1d196e0 GIT binary patch literal 17371 zcmeIac{G>p+b{f;LXsgFl8mK7qKst)5#h9?`L|0b-BSC_W40GeLeHNi z6bM)faRoofrtK^j?Cs@T8Y&WbcEDLpocyC1Z_MxK%3>;qpup2xe%FDUIlOz|S<%q1F8hDWdd{lb4Q z&%cY}-$&u!o#Nm9@!wP7|Hh&De#zkm_f~&;Eiq=Egk33`{K=ZBFF5X1X-PIO9=e*Y z-EJ*DROhviK||{u<&|`80XeqNVc!S2s+w`Bi^5Tj=DO+H7NTs#uUx(4)-F8-C9O~9 zITa>Z<(9epjV+^&s>x%8_S-tV7;}Dx6ct&j*j~_ zN{UkpEY$b?u*q~hs?pZo{;syWQB=nLApS;cab7t&&V@g%e%fj2-+YA}iu~!fh)3;Q zSy`c15dNa1ndo?8pFe$lQ&V88W%{>R&+g;Ri*#F$Fz>*J>l+yC6BFV|xKvPBSc$7L z$@)H8^06V8!X`^MuEl~~go7u+p191ovD9O2aTBpI_TMNNJ}Ti>JyX*j35hi?=IvZO z(J}4xb>)%)(+<^1haF;4`fZ8-TLx)K8%UZ2u$ta^oW3$Hw*`vuxvUDF^S-qjWtz zJ(BK=))65$KR!O-ve2rN_A4v-k9AM+9zTkmsiW7vyLtYdulVxvq?H?MZkQsuj72k- z$HvM?jZkla!@(1dzx&?V6)*L;Q&Cf=POoR^7u@xuq|>en^4ZSF*O%L7nD(sB>!H?& z!y?zpL|!jFBje?7RW5zf53QQLyu2(r-ro$ES{e+O8)%MKY!&8-yEFD{53}V!b(tRZ7b&rOx?DLpr0TR{Qz+@&2i)a4g*Q*g>`k^jQ5fs;a5el8xradpzbYEU&D@-|j7K&$>=YLB|oo>Aj{=&{z@^9IqHS z@abq-_4}LOgk7eM=cjr(i=3x~+KzP=IUl8`=YD>6Y7nbihy6dgBz_X)9VWpm{ z#Gg>@+*#9K6?o3`OT&vc#)E2H`}c3feg7kA$Mg8flXLpCq)928xV6k9Bvxq`VeL%A z(2q|J4t_isTkS(e{&YyY!)oJqOCr^d9f~7gUW(ZE$qO2lvTLU?$yXFryUq>wV;yVz zD*R@u87~?yO?K;+dC6dv9~hRnUBgKt`F#Jb>EiBweRXjHpHanlQQDV*SD8yhgn=aN zwdN8nX}9J0jW5+*1rB5+@3k39e*M~zEu0> zLe!u6QwwPkhXNYS8O?L9nBKS%{OZ-KueY?hPn|k7kkce9;N+^LPrtFTG0=Itj0xZ0m2am=v*(yn!Q`#W zNoq_}B};~n>_YY&SJp4}xbo`Fn+Gh0E~m~%iKpw&+2z#)vjp!sZcfGRFKOH7LtLU& zTLv!EZh86|aV7Y^fS=aP%843|V?Qn^DJxTR`@2l!wpB0B44$^MOciDeHTgR~I`BHu z@Dj)BP^1y_U~MR4N=nMWRM{r8VjwLOh2N>JQqQ8w!L_xyrqfL^GBvNyMJnN~|D3p! z`ulszlc1m=^_WlYGA!4wT}$xZ+~ARwHKgLMcJB2&ScrPE7Qg!Zx)d(%cUM7RIjve!_Fs6UPcVXAhpFb8jd;}QK-zuP7vEFoGRo&-( z*0-m?A<2Fn`;xTQr2oUCYhqGH-SunP6&z?Q_Dqq6_``4^u zmYR=lW?sor-u^e=ZV(OO>({UTd3h4#2HR=n>gRBt>6w|ee`WW2Z|>vtoM#|$2?^0M z2X8}@tC@^?`qV#=!;Om6oT?=-G>g4wm$FxK{bW8eI_lb#1uXG7N`lT| zksJ-DEPJ^0?3sd*k^VqV?Tv|nfxE@U#rBOV{i_kxt*u&8BAHK~T+Uj-C~tUwtGh73 zdvmo{(qTBn{>Pn}%`yYj$(FQMJyTbv4fziVgXdLM`Db<0^>X>`-@KfaX1VY}RAa*? zR^rJ=&0*c~IfLana^RJ4*}qg}n;R$3^F6UI@cg-3`^R8!u`A=`#Jcmtg_ZTmp|{^g`-X=p;`+|m zTILqk+w-q2FK#xW1b3Dg8kwH3v$K=58&Jw>I{!k9_A^pRo;-QICE+wCiAg}+aeSim z>Ud6jnYY~H_)ovSKI6Cg1-r;8X$9NX&vky#{^6mieD+(muHZk?uE!{7SbcDunKCjm z+H-Eu4L3$n_HC9@TwQkQ3E)gh7~HL}`=t1Cceu_E2aTU*%m5AJ)eN^wSNH}72WQro zdJ}JcdsF}Uvl7~oz{0Xh82e%I504d$dT#2>=bCMvulQn_%e?2JtJ({V4)I%Y<2gnw zF{PeYoz5=VIXNk-tJ7uLRA<F$+SF!8m0>Og^DbZ1vikr|m zALu&`*6wV#{@|{5j>`AfFH;v+*K4R?0xl?rbA%qb`k|}$e4PE9#-6-e-Ia||5+Yaz zv&O0KDVG}-7R4f$mtBUkgISJhyG6&u#GK|Bs}0?Y>lU1KiEtI-Kh7N2r&xmFEMV0d zFjA5b-uvn-mf$1#Jr(gT%5rO6s^rIvm5rJ*5pKA*$%>$XAwg6X-r zD(}rDZ{8zEcA|Z_jJ$LfMlZcIb=+xOcWrqv9K}WwWZn_B@8mu7?6rk9qowE{t!X+l zzn)wqVA?xf!82#iR-h~l{tQ#zxN&3u{{7_^qR(7?o;7?{F~b_gWBN;atx0}1Kkl_M z#KL~kiKd{SpuVBuZcfhewe@xMbt5hTfgM>{S?%v{UVdHo6DMzNx{59+I9So#obTC@ zt8c6yknwNoYnls^nzPN$MN7Nx0_ebCAn;dwtEJuQq7CVEY!22fZ*L0{%8%@pyNJhZ`ZZ{nY|6o z0u#Rq-zw~}Jbf(E;ikAvhyT^QTinNwGsb#vNVzSJr>wO&J2}-ZjJ2T$2VASV*N3as2ardoc5n%Bb6=+r7Ov z-PP)hh5NdlduxiON`rxrxFsc7@!_^9Myz|ptywqL<}OMve7{`N6Q*6`p?MDrO`sl+ z`4$z-?K+JJ}`WIQn(lROzY^v!JdI*5lfbw^y*| zE?FbvhT&6x{yfl1)4tYQ>PbaKRqnkp$5}l8_1x=>b&LvpDU+KGS$VQX;yaTXYR8EV zCaiT$s#e+q|MYi!7hV_-HAJ-M+wm6O8M_D3*%(NI^|<-@f@cnAD=RC7U1v?_$A2=8 zj*jYnuzqgejnOtU<-NH#=SI`Lq@;tm4!`aq=R|xatBji{hDs>91sQ2$Cfqv?*cu;2 zbJx$W<@Grh(c3-xSHe(KfJMpklAQbbH5yXmmN!RuJ~uU~Xlp;4jVEiB1p@@qTaljx zDkoqwHeM&?^7EnLVg7!c1;8psf;(UqXpQD`?vIa;$IRNzcmAKg>6?2)m4TCXqCWW- zS00WNJy=Ia=X;tC9b4#|FB7+q46%u7rMDTn??jCP$<9u>}C7^m~sOW!l+GStzA?uHG&Qkm&VbM5pyvPCNz7H}m7_ZLL39 zM1#V-3*nUGkdl(JXv^3KaBuMEsvS?N^sND|1ij!WN!+%w@c&==UTQwA2UNKJ<450C z%Oi8PFO`m|r)V}?h$b7A$^JogeXEM645|7NH#awTO_c3gmM-g!R55>gtPzmwlJwQ> z8h31U;~ebm*~JbgSXQ(NOTDPtVk1}gvm1Evew&eZN&R6vAc4yVl3u1-jx@y{U9yo| zpTE5S;6a_y`ETF81xKqU7n_)vuro(abmk3K2JB!e?aeSKdhk*?g)d@WKXQ?cFI9+k zhvUsCF?{5949RF2_a7RHDNpC;9bsU+QLeKED^cC{7kl|Nb6o}#3oB!AflhG-2bQHM zBx<<6#d6-I8A}GvR$l*z*RHSJ_fk`tx%0@EebycCw}1Ka#iF}V3>zhahDr1`48=gb z^xDL5*$3t2^7uyP8(*S*pFCj%-{>0|2|O6%vSnswW_dIzHm=pOABX}JsBfSqSkm*a zC_t+)`V~QhbTag@vZo`344MIy$GZv`(I6#Vrnw3oNAFHg+v*B3LnV=3>T;N#ovobg zE@EJ0BtLpIb61lIJ0oLa^q(ZOcb7jYN%VX72FH5+-L9slW{akUo4{sF|GW{~|44q`|Dq65S!K5>ViXa`(;d=z=Nd+({fR?yR9BdF(n z#)AXs(j*eF)K0Lgs;7r9H)ARj+hdu_cKGn&e?+cRNJ~qrXBx_Y*X_jj)`5M|auet^ zw2s4_23JwjQ{vu|s6u!C`LS)jzP`(#Y7d`1ySIZy$QXhL)%NWgYI=I@=-xh{hh*Tt zN)R{f9UQW3I>kfS#HcU7IggH82O^HUeh3H~7sqw}A7L_pjJrRrl~J%QMb5WDt0N^j z4>USNiQ6>4y>i??AmFea1@)pDAwPij`iWex82QeZ3uG4G z1xKl_t4jm}Z8&-V_iqbFEL*!rswV&W7oyuMDk^}>E~b1c+5cMR_K<;7KpHt1#4k=e4LmClcSm&H*FCa_ z4{ry>5hcZ8g(UC%*}aRA@lkYi2$YL0ha`;*RaL1;aZnUU)M{@nvveOuMh3omwf|p& zjRd+_b4`&&e_?SR9=0b5oh6HRMZaK4{2LcPMO;RKZp049dQaU-6=^Zc&017 zWo;f^GEGZglQnpUqyuns4fErjdJAqcAFO|F303wZ&;g(#h-fX;pRlADH)<9keR*A7 z-K;v#@vJ%$2{=tbNl7VX@JM6#ocbfPk%@_PX*#FH<2NJci@Wpf$dBl~SMNCxvhU<# z%%_n0N0x%k7->Y)!GIz5Ju;G#g(Z^5SIDDwsIRYY7pF>M3r@!FRnD|mj0qh}H#~wmw--u}Y%(ew zx>m5d7?9`PV8VA%>ZPOk=R5nNLVnG2)WO$#>z?Aw9_{S zk2K}0{w>)b5czVwKv3Fqb;w!nHoDco2eZf8p*91=rUG0A5HlMb;2$|}Srm2f_)6dS zc!>AYHz&<+cmX!@7^7xpzv@NhztDEJw;kI+2pETJuf6~hhfH|F=IaW z%{9sC496zFX>Dhl$JrGz|I9k%9HANjWY9l9`pp7j(fy@8!p0=j(B0(ZL!wqcXv}l= z+`4s(RnnGA7LyKpC%xEy9Zg&4P9d*yNI7~DRj4vKKsNATO8ti^AXDS1o|5JHZx?6k zdBfw*MG7s?)IEQaT=`#F0M425oF*P{V2n=27?0VrgqF*4)X=}tTv1n-Ra!;{S`z`h zT-@BAu?7=R7GhQa{T9fj{)U+*?z1YDQaI82BbhPkeS32u%d(aKe5`DV!r=Z? zRoas`t+mD(qaQvbVNscn==DwaSJi*{qHJv3=P4(o^?B%1q}@REcInNvIWd{tfda*@ z{+5OYayQ=slW6g`dfp!UW|`Yw?0WpY-Vt~K9QE?w-=mG}i9BjlyW?oF`Zq! zxsOfPtcbJNm7$XR0>^7cQ6p9Aj_1yfYn;0}ocnoF)0f%!R2+2U##+-TOAP7KwXcqB zG-!0czLbLbjw9rnuVF74I9a2CAyHa?Kd9mU4NdO<&rrlr^LiX);7gY;gE$xt9F9*u zbnxK8{Gy_&sw(mmFEgq;{R0E9|I9YacbVZicKrB0>B^3(#>Sn1LUn*b5T%=6aL{TL zNCK6htUwzB)6xXGy1S=bbogFu3hynQQ3s1~}foX6XJvG=Xbzb!Md^TzcLxy58? zQnyGmt1z9ta3KJ1eIahsAQ|}tR06-FMl}qH8U`FODBLYyk@c)8R*sH)tGDWkl=nul zz4f2RUmh#&=M79hWmM?6J^gB)d9(nIbN}CkF#=#c`m|Tn!Uw%tNkyfqt}f}GvW~lc zzAag4X{oKVvx=Uc-UYhAR8m`9+8IMbjzRsi03-))&Lt!y@V{@&z)%4=Zk0^v5a8#hhJII#>JR~+!FP&eCjJ3eiz1vhlQ6DDWo zeU7t*E~70zcszexQL)czR>=A2BQD;ilMdj12?fQjX$aGWl5!AQyHBHe+OyG*wJ3rH z@vC6$so$>~yuF%73j$LOILN@prgz|5+F9j92K2TX$a_!4en40~vEK(o4J%ija5}hQ zp=)%(ZFzN-m!ChiqfS{XNqbx238K*vUg~^zSt=yBORz) z>LF#`_(JPIxR~YlLlEirBwdUZa_U~{^$rJIGM?_MXn%K2G2(nCUpf{7t+^o^Yf9i@ zz?CffAyq=AX#JpUV{|2@o>QBXGnOZ6`&lnK$GExK*>@f*_G@#on}ny3%zp3{aL+QD zadVo^(V-7lKUh})J&6Fs`uqDE*M;pPQOm~7EH2hU6cPccg^#cm999`-B_S4o*HoGw zI~?vX-FJ#Gn?Sv2V~tb@=pT2=?;SWTPb8i{y_?BO}wChu{WfWpWTS zY=6}=5Y8Cze`h7&93Kwv&J&Z!Z3!5H#b&Ki{E$; zDX2b11a*h9haHeP+oa~<=}9Ph1c%0<(ap8gdS2AB^7rp-)tuh2uc4pXxpRJMNdnBF zMeDPlj=}=1#3ED2_3hXzIxK#CL6((JGq_WRRAm-T*L^mTOMuceGj6OPb3 z?@cdLQ&Xbvo82na&AYV^ohHpjT62Npx4gTXTcx%5Ab{vnaW^n-Uw^;GuWX=6ZYilN zDO@{mMsR3o4NPUSwAKf343gVt{<)0r z2lpFVs%%So{rYf}EYU+j?FMnVC{q8YR!v5p3rvfX-N6uxO-8@IZpRk++!gCZd(`3MN1hj=9dj1V-rtm^EyawCw6$m|emS!{rhuwIx+i-_hC9E3r%nqA#xak)IDmiqogb5BP6%9=_ZYv@dpIde* z{Ab)La+-Z7G*=d{fydm>+d)gKj8Oq zbwn?}`SsPM@NL9#BnAvYpspQz4&p0<;qo4cnbe$e`CxTTO*~c^LK%rfL=?IUnIO*G zj0i6fg@I6wZ$Ws$Fk?MBRGAkfJ=Mdvh5`EwA=E!YKmiB#M^u29msiAl!vm`OY-#OP z4fMqB!aG$^Xwk)9jc?J@DU;D{Yf8S9_9M>I(=*Gwk&ReX{)p6ey;uN8!m;hXT7V)^ zNY_5;5&7?)ICRMrz8 zB{7awAO?$l=IE0y%T~7cA(OcjFCo7}4w0U3RwTCXY4<#TB7a*Pr>R!KXFwr zGgu#Ta1V531%R(Fv2x*%c-f?8jWji%W_uG^5?Xf2zG)FjRRbeG^Ej*R6or`whQFBc^%5MGd9RS97 zwBOfWIUyV2A59f7dqD+S;9&iBEaYjMYR^(!`M?{|3*xAI@XK$7JKjfW1Gljq3UY+L z0<96Mf^%=UP8;-1;&V{fg3LFHKq0Q9eG$YWJ3E^l#3B*@lMvIGh4c>%&8R2av;O8s zd{sj$btelZJhR9HmNlB;TJwsCN9+_Cqie-!Ocf9BjdMKv|r zKW&*HayxSM43gU7&aJ0PsK1kkcKy>DvH*S|mf-i%^segbyHFLNJ5hp~S>#Gf?O@P4 z;_d*2DWa(&`sK@r;qMD)dXG1gp2~Of+T`kC*CII6K%E=kRCjrC@+3683;e-hkgJzo z9Gtfa@zreZo=o!{jpx1;50pEQWRqL$-E)H{Rn=LggX8)tr5~L_w6A@P=#LGZ@yXta zej#=Xo`lp(E=M{xdMoAbNPUr)LY8ctyY%Ge0M5JddSZMDUbPs#vQF~@P zFLlzA^xgRqEVc3_oHz3_(wf=kyIIY7?4ME|Xb9+TE48B=*usk+sX5`v+s> z&zzwm^+BD*FG>XJ*u<@a2zit(l;YE~BUOQ%UQ{Gtb8@2Z*Y3SdBFV1&VuY+hiPluq zd*uL+eX^y@!Tu(>%@A0Z18|A!PEHm3!Q-RiCKPtar7Xe6)opFxzzg^sBeNHt7<7qt zUxWn_A?ibTs}lb_K$eXT{!tx^k%uo49pH~p{n@o^@7^?zBL-ByX*!t+fH|#FQA$d! z33}w+U<=W5-W(z#B81eA=uh9kz@_2!ajPQO?p%5xJ)X3eWW>}ro)zw@Q z5-bF9M~8nH5wY#1S|B`WZs^fa@_gW8L4Q+!nR8Z2^GNCfl?wD&^|aPyV9ZC)pWi3o z144E}b6#M{4P_I(x}QIP_K%8+vM*3eQY>*>c!(DPSq-92n=NyJ36Zlq4E1aabR-0t zv_BOyFlgo3Q~m`MaQPh{NI0xR^E&u6d<#mxVFJ2cgtrycC>SIzi$8DJ%?)2b@T>T1 z)W7xxtH57|Q0A|Z5yi|l5PHh8^~JrK{1MsDO3XenBN;&KX!7@YoJYL^2|N7)`)%Mq zr@-wAqmoz%U=Ee4dpjX@WJGH&BH`5FNjP^PKwC)AsNj+$urK4ZCMg&>&MYhtK_*+m z^DT#E3IPj}A`R>v0@J`qX<(a&FH_pS`vxEj||?8hPa>Ttu9@uu`LW5HjYL{3w%5Ye=euH z+u=!>q5q?YWHeuYNq!6i;r)A2bUDb~sT_<98ZQYm3Clo7M+cEeXL*B3wu?BI{`8Pk z0-@SCo-hbFsH!y2h0K!h^Ya)tu&I<`D)T#TQg1r}8$~Z&TgpxVJ-7+WXPm1iuzS@0 zHo|l6MihPgLW*`T2SK-XsOzTR4BODU_9zwjC_{kU9QLrGOl{1Z;(V$|)dF zR6g|CF8kinF5eHjf@|^*gMQ0mEKyIa)UN+;J|9Hf`Xxi;926mUq_kZG%z&n!@`an8 zp;fPy?KgNO*ffa*suH-qx^#W`^Yey<2&ru}M90!2pFj=;W2}vFj2~h+W zC_Mmg`$0*y3!0F$m;tL#gtyS1YsErT2WTPOD?;L6m9pRezT@sS&J&JQfpnb8Fp6OR z2%FYF^;@D&ZV8uqNsE?F$VGq9Qa6cs4oajr>lR{J`C|zC3ZK5*`U`psnZ+AfY?K~ygusWX^Q z6@bJ}O=F}!96BPdgZK8suSctn2ihl*K!DJh2GJV`V;5FA5q+g$m!wDRHl=x%FCkUq zdS{%0zCLIkC5$nJ0>P6f_d?`T#6R&Z7GQdN=UI+Bqf{0AV!X)@lP zMd)4l;F(q(BkltSUbnwT_%IBXH%kFrCJOu>kxTM2bDS?=2Vz@|9Woml|^P z=M{iyLivSZPQ(wuAy|q+VZj1a3Iloq7q{ja6O-TCv&lPrL@?IrFKB+R6v zWox^T#zDN18*e6oc_ZgUMgp568p!6~%*{%)6e7+@5JR-XrQ%6+)8&oTDF$}-5TrP- zLyu`k`Wf7WZ1-Br{je}1?kjTR3wyMzCm`brXP+?pS*E9ISNPHlN0tTSn?60#!*=Uam zcmusc9}&u>q49_9ibzWg_{6W_VIDrdH~Mp+AOxDew{x#TV#`yPy_}q!Lk3D|+Ua2N zzA7B9TS?7;i?||65^=*Yb|DBU!f!q0M?pv!ur3gsC5TLm1<_^!ya?e?KcC(*_is#_ zD>6{9P>5?(POKnU6PBNsoBPz2MNDEvsP=^O=6~-Vk$l|aefpUMgI1_zceTbd^ybQs zAGZ^d5nLmpD2WVdK@a{6(?G|oZET^wzMe!PrZKjzfi3qX?1uZ_{`8cbM9#+_<~sZ+ zBBKvz4{5}|#-u`#PDazT5Th2>vIPdn^Ep&tgY-V#{;^y=n@4t*qHIH4J@9R@kJ#~R zS#|gd`EU*y+u_f9hzJb!o=9I#BltvKE|YmVtrg+8ttg?MPl;Q>-YhRK6Bmtk@yfmg`3QS=V7}s^AES<}$4rB=cjgM> z_?%Kw+DeFPxOM4`<-yk(6CDvtpD8Wxw3aX+P-tssSAlrX)ju|d?h|6wwY3A#^@%=0 z+&we}sQu~R$B1AS(drP>v1m1TLJs8bq{9e=anFkK03ZRJTgLL*7iifoQ5+*k5lq9=LRpb zi4wPaibw7cu3P7a^j#xx@62+j)!*^yySUrCxt&1Xan}7m7nAP2XVe_dW`fc;wY1g& z2xACCD}%KVd*L|V&Ojn`R3ZrWpJvwi^E4YH-Www^ouSCWhe10b_sL$@fw6}tSRn!e zdHMgeuEp`|#}x3ZAOZe=&ottMz_Lx9{xz}-I&}#o5_G>^1P{lu!XzYr^3fk9aSh%- z$p^P?GB@0aPNO}HM^vi1yVqmdARJTSw*0{cS}c?xox)*>kn@4!P=y2g2=PyR1lF(O zjD%4o8O#`5~>ISvtg5F^4K) zYi)qS0mm` zWF;_f*8t>**`@d1LgSkvubXk}Z@w_((YR$~_MuD&6F1f71P*Q`oZ)693uyL=zwLN) zIcfp9GV}^vj5sFgs=ZAcuv#GpvPb2lnX=n6vA~+{2=5+9|&epJbd8PoZ0usQf{af)iVv% zPBC5kIufn_(MXUrJO%T_ukvtfdz(urFQ^z?1;4dTbwBs7LO( zGHXUi==>4XL<9lE1VK&$3HA4rfh7@?Az3Gr15Pm^3?QvNunq$I=-IP3Z}&OlebCRG zQ@(K}yl{4ohCfTVR=>o8||63+T}eyH9i4MKJVuF$aySGJ>9AqjkgBvnt)!|x60O5 zCOpRhjzv;`XG=Iguo?IxBb?;W$dNMcM^AJ?zLoI&k(Z={Mc!`nGCDfd;X_a|&7#aP z(@+P9e_OU}`B%RA_VwPi>^o!Hh)Hqt@Kp8-c!NIRQ~OXuwS>BW_DVd+MWpa5jPaGh z=V6hLu(_XX{*moQ99Q#eo26&m zpPgDuIYk*{T*iC9r%g)gn9Etj^^NsF@jtYyr>JTTszmYs&gTp%E5`q~ z=X&{_;}ApoZ0>L;EFdUZ4NqJ)TYmEP54ET4zyk$*Pf{-V@$m2vVhH5;p;FHR@(F-c z@J-d74}yZI)hxS_^7|K|bONUZ!biqlKunk?f$}GQha7nSeJO|f2aHR?*rr! zSs{IWeLU#NFRhN(`2s}Tn%snkq{T(;D;z>=A)@EGxy1OS#!QI_GNC*&|-~E* z0W&>4-ADG?Yps1w6Rsd9j*3Kp1OkCjB_%|aKp-e{5a^vh0vzy3CBbF^@B-zeBrXCf z8zVXZfk;7;qQWZfX~(S|4OFTwoUf<4d&`x3wprO0Dh;S4vctKk&*pH5Iau&o9}E$~ zJA0sfL?gdagb!^6QAX#$iNO4P$M%=jm*W?A4^-$ryeKqnj<5opSjzA3-)&FrE#F?} zrxu%CX9}Ip8t>j$tcDIBsuswdSj;r9Y1I}-DM-<=;G@9(afrFng@Oy}{Fd7ZGy07M z9~Bmx132Qqk(oe&3;L(PBFv7D^7YIAPX2Ea{)dGBrNjTv3IBedA&qdwD_!Zr!UZY5 zBkS>2H_*F?Br~Vhg4;?7J;<0F$1(I<#NfbY3F`d&!`A!4ne4m|lLMPIs599n{z7Id z%u5gP_h2$WH;8m{zvU-0*aJ=3Oj+>d#Ybo?#tDSk$=LBD&FBq%QyIHX8HCyCAcqvR zcQfKmycZUnl6Xj&{Rp({pI`bn8O>B`R^+BbP9Bfkt7$r}^V>DL zJf6r|UWP7WQ@HV54-YGTr0JhyE<`*@d)2ZP=Gt<2~?Ml;$ zcO@RvsfZ~+X9=s*^ONtyTeqa9U#xl7QqVaHnSg6yWt${5RFft@4~L(ytIqJ3Z~pz# zb|ElDcI+F7nAGXMYfy&J%0#Bzj)zq)VgtMK(|Fi=ru_+#+5j%dfK_{2_iL930&O0> zB;mfUq8rsdj|F0$%0W96>G+jaLLoG@AzTov?sZ&4Ui@jY$#&Wz+BD6fRN(2?F;=>y zml^P?^C8R9`k;SjvJc0>zeByYxIJ(%#$bEXPCRCVSZr1^CN|Y7-#9c|)XVh6?vW`O zHdD~Wb-y*1Co>oP%GP{va$Y=ad#YC1V@twfC6Y6VRA0IrycC@T-9OuUvOLj5lb=oO z!+-|81n;!*jkA9K93oc$O$Jl-2|5crnJ>~*xPznEtV-lEV^WfMu(rNV3I_+5Kc@t! zm-}xcZ*L-OZ0r~%I6u{cXq><#s?qo~sBiA>^P@NbOfIa&3Z^=h<@sSj?9>(uR(hN+ z*c162fC6qUM12~bu&rmnlbH@sLaNoQwGR0nA3H?=TqVrH!m^&YFdF>V3e(wA_4|ue zt?A3pJjnfOx;r|AsN80Sse}vAaPW-J)YyQVbqCR#leR855Gp2NIj_(lfbT|t@rW5~ zs!5IEsAl5M*OookS!H>ovj=sWzvHx74E__vgCw2A#OTviPU0s{?1Izwv~uQJ8m&6v zqUWO6*PJtTK-;7|19e=*)6CL5b?|L4mP!}dj0Hb(p(kH9_54u1-BWJ3<@NFCA_uSa zuVW^ob{*+3+uiy{T}O4e#}wrWmrU~Q{=5$;U#HH;-=4=o{##MJXk2UFPIGtAvUg`( z?GLC?yru{wetx(L4wS1~l66a=Rog*be-? z*yU<(wA+yl?Y(b_kj~wqw4W;Co@6!qQNzIh~<3Yh)?MTYG)dBJo zc!ibS`_w73`}b!n`;*$aF*j9H;=0l~UAL8zB$wS3GsDr}pBwfvyi8j^0jyy)SJoSX zr>8+`Aw7nt=T0_Trn_|KSdf~%|DfLbBs=zYAN>~ggSo9?whjKHJ84Rz3DM zsF*z@*AO1Xm^~HelKN!e)%ATo`#ucovk9|5qDf7HOw-dCJ*f`VTD~yDpTHZC_+0zfnI4c{Qh}m?S&W)9^Om`uG{EnwzT2tw0WT-(G$i;10G52rhID24R?m!!Q^S;NG{g5dOajWs&VbG`B4k&MXv~1b^T;AFCbo#^R zb^*Tsqt_>Xja3$ zJ(j;Af!x;v;LkhJeKEvId^l!HwL@=?=C-!u$wKG9R%p4cE$=0HJ%>+o z==;EZza9i>yyba^xgXv4JZNa^<=9N{KV&_f)Njpd+w}q{JIC|8!0QwcLGZqe%XBuf zzuySm3Pff~R%=(uwrwW@8s^>z#=zOe7>~yT32!Q1)V>beVh-Qkkh*3D)Y^|WfQl&BQHrW zqOh>At?p(4=C_mFPVQ59ioMkiIud7i8kFqBoQ@OfN3UbnPkJr*pz{HW==Cw)vz~zg z1ly*A{B@GY z7ZvdcSpW(iVsN;1~>prZ#8hAA> zNCM#2THa{Jw*CTwDM)O>X)?mN+Ae-Z9j~5$=UP9~fAc)h?$5YN+gr!ZyoZq!d~rSo z5bS=}y!LZvI0^pAdlNgegW2~283LS;c&sE{*AKu<^YQJ0$2%GHABHj>^H5r^hdVkz zujiqH>!o%+46m2WZ&;AYzUY8PUq7xM?<*|Gh_EVag!4LWqyeqhE!lPt(qu*glf3Ry z?nUf6ZvemSw&v5Y8NqNKMDh&Me|wx;ksjc*Ta8q2f1Gi@9HhAbw1l8ot+eYW*J>EL z&;FMNKq(+|dYxA~PMvFuFqw9(vr2jV_=hGgF3!@>Fz1|0K;YxE&03qT%~GAL%}SFh z|Lwey<<;)!VRq<8rRspB)?*V(Yik+)n`!0FTiI03!pch48(;v#HqEC^N7H&-hB7R!Ps&NMn*=50Hq+`uGCn>E$xl4kE@h>&J<4r$r^Ol2DGdS z`G()yo!?5`UE5tNBcY+bH()=g-1u?`?|CyZ-+E86XrzV}ftbS}&Ig<=(wE zPk#g-DL!*@<_o+%jKe?qUi{Ekfpi0)8Rs3=1SQLp#oELBt!VVR1>c7_!3XTmtgIV# zYpzQ+knXh}$l5tBc^)L;0KY-#0^AF$XMS%_|DA$(g{88FO{AM5^;W4B`)<_EHUK^; zklq2WniJnutY2^R-)bQrxGg(~>n}b!!-Mi3$_NC3zRUppm+kv{m3eo);5_WLpB*~A zJDNIU6wRMsXS-5VXS0-FXSb%eK8FJ@FDF;D&DK0!S9Ib8TO9oM)c&?))4cJWuwqWn zYa`|hTIaa$ExYwn9V+O2JqUgCwE3)WBa{RUbbnjlj+%!f$9K`w#r#W~>M{MyyFiU! z?{PAT=d+E&w4yi^$hPfack&EC97$L0oZb&ufz<>=W-9(^)mp| z_yh!95M~8=%CrH=VgN*_Ybb%?V&V&WW4l^$2sAn$M*WJbHd%;>!OY`H{n|$zPIMHM z_01p5eM_sib(3eV-9UCjuhq@W`Ze7bw?7t>3bq3DEI|iJBv5j@Z@993D3K!qAaxgl zZ&!l0OPMbVnHvyk?Sv;m0VSuU_1xcc12_cTb1O(~6zjjxtCi`5ccbxs;y!&^y%W&! zeb~`x^Y#Fy+Pd>$FH^rL_T*5&|LR0{J5!1L=b7PlFJ#;);*!D1Lx4Hi(y6=bnvmuf9c_;Vv#FrIgHsVj(btqrHeCgzr z_N;rI661ptL5PfuYK@PGxaU}%aGxzjDTq%&qnC*b#RRSWl&Q1uA zE^tp;XT1=JO2~=B6y&yK!*vWq6XZNHT2ngy9wPJ!ndQ38bw>iNq`h&i=cc75uIzMK zYx5Nb&;m~jC)%0J{a|eStWto*o#c#%(MRf^7+r z(+F#f(q>U{8U40r`*{d6XoBnQaNSD(i2z~__5=Z`yYJ&_gCc`L<6igQb}J!xTsiZ_ zvu-~uDkj?K2Ol(X10u=F%BrYA-QaO$`kyl-T)Y2TKl=KfK)2dw!6a!TD+sL%Vobf) zUR||{XAU2iEUKaCOiF8aO!o8im6GM!b$o7S0^VlIeR0#}`gL~_dOHESivlDT3Sny< zlEsipVD$4G%u}Y{>%;vzyx{)q*?3K9rS%x%F0uVshPt`ind$A7N%)a8Cl@YM)`>>O}KBoL%kIBb1& z!*b~c0vtXEkh1%zm0l1~)oc#yzp|aS-sz<|Pf7v_YjVj8nMoks&L778J`N``b{DA@ zpXZ~_6@Ec<3WZP8iyHGbpvPT=~9HkA5-#z#B=(7{7g;zNZ#)I9VR7dHh{$MKb$G91c<>Ka9q8_Zp#}V zL({EF^jZl3L4+50{1{_<*^?yIVzmvRs=)FEE-?V$+Y1PbKQdDT zsJpw{{pCm>T?jc6Qn^Dqw+i@(4M6hx(%n|Whnd@nNS@~V&-1xj5!YT$-7WwJ01K20 zHCEkEYj3{Kn|SRVz_{(FWVtpTkIMT2HL4sJcmga|~L6eZmmV zyL#Uj&w5>i0KArU*!wZJwm9$2^AkHiUdT8Z${OAQB@tS@(!9^z$_4t{Ir{w-pjnGM zB!15q^Gz-cKuO64Nh}EVSFiKARNM0Hjg4V4A4bgVZx_tAa(*y%0X+5}>A1|O&RZ0u z+poCHZG;LwlK~awI83YegQGW4!u3I-4~fovjRp4CuV3vagyA;;`RN9#XT0MlF25_T z`{@FK5Qrm&cx}Dgsw9BB?%zRdJA^u;1s-YNGwFmu&5$r!F$z9x@w%1g`)n_YO3pz4oZ){Wz7`2i{8y`ho_AVNfsYnNipO35f01 zJ&^bjkh%cCIQuFf+HfzdQ*{E$_IE38Ndll5W=Q&j);}f|2k~$rDz9N~ZEex7CSP9h zg(@KdYgQf^fI??Y9q<*OqWD493E&0Jq0#{7&3)RiwcE@S3HP5P+TW*b10-hLO*JFI z{ofD0;4_~yulWWC3W4(g^lxu3cbN%}r)^KREnCEA9e`}wZ~qd1ug8qJ1vm|0HEf^? zMM=t7b63e2ghaVAMIZH`23he`gf~lbfCIeinE_BfF(nBuaUYdbn|eo9O@9|VknO4p zQU%r@gIGx*EtNIy5)gT8|KiX4m>&eG2?50Vl&T+(#j~dep1P7!n*p0V#@5RXmFJcL z)LCdriG}6{dXG~#AWnGMt8su@_%|U-Sdkd$eCPhd!b^NLqrz^(g2-f^(hiUfB%@OW z_f+BnPRL%;TQb_58ofES6|gRoEMPj64JCXh(jYSi^yVKi`^L;<5|!%1e}{@Bs?VA` zG|EJ2Ly(&T$d5`;C2{3t!R7*%bmEPgye;k+Y0cHfAp?2(+g&^53oMnUc79`NGNNvw zJEAU60Ty!Lj6DAi=Utf9`ptNiou8aN;|W})jBlvBy~4SzU1{^Z-m4)X(EfeZBzwL( zMe-NIV*uqHE=)stKKRx@P8TwXwwfkrsj7OBYxa|klty2rTg&r1G`AZ7hK zEux#8OMS6S^stkqdfuTj!-wf+?)?1xieaYa>pXJ6$MmnYTtVL-@2FFZUroMvA`V$( zBZJ3|K{t}_rZaf#e9tIlF^4g3g8g=VFY2lrXy7c$<~`k^xbt8g_>2KF{#JZx*JbzV4r9>McpFwYk$`@;@ z`b?w$vwcq|C}3ejinv*9S**gLS1I2w>uxn1{<7`f7$NW0g5!^NVem|(r8rgIyOsBC z5KKMArk~6_&fR9zZq*XHqEK;OhmpTuxx@e+M+BmR-?uyoHZP5McK2eP;guGF0q9vA!gSjAA*=hNOwGUV(|kFP9%0q2r(#vuEgT&kpqFKU5P zD{=3D(`2qn8{;kW>KqG-U`2Sl=|HzqJ~s-8y_Ak%c>EW`ASKsz-=~#F^rRwuw42{A zo$QN+q3G5hM{A=Xy6Qv7%=`M6Rj;j|elYI7=>-Xic(WkE$;7+gch3E6(wfpcI22i; zrDzE`AgQ1ql?t9#h3{WX7AQ+&D_*R#{b=rPeQ5km{~DQnV=4n!p(K2J7(LsV9QTFd zI6g$15zPmQLO-t0y{wft-G#wK!1= zSF1SED3jh)_tg5Qx(9kfv^rWrTF^z+7CM`)vE$)nfU0`%Y+|oh={PRqSRIx z3n!{!YBz4NbauOOSG`LvGZ%m3ZGcuY5VpyN#$HLHo^s|ZUfoKapLXvZRj&-Gt>Uxx zI=*$s`is`$?YYI-Ex{ZrlEL7;*(Ggttc^akGvnb$a(&W%j|;;FD$HVlJF0OU%QM0i z*Oz+Nqfe<%J8ICiq!InHRPP(yzHpzgnUClj`XBBOvfl$t` z%!pMLg@(VMBz}=E6i~w+HLt+r9KuT+ghwncbienGm_V17*-b9All(jerYKEz@#v}F z3W}Mw_#&G9W*)RT$OUv#JuwZp>w?TzimsrK;a}Z(=DYuU79d~-yz6PvXtAbTIU1Qt z_*B#Az%_ANx^zNSAX)3ECfx4PzJ)Htu&Qi4_rv+H_%9#f-re#O?+6b2&fMhO&#{>= z^zs6YjF`c6JJxnt&O{c_;QgPt@LXTP*E?~8E@1tX4@(-^5lUGcdug#BE72+AJP^?T z3}fc%w94Ln8G3IO_gB{2D-Q*=lO+S;J^@Z8Qf(o$N@;%h zi%1ms(kd&7$m!UP;wttXG+~^P#gzqDgI*j)%mKHQix+c1GEu?2tHPVV>MvcI$?i*= zz=KD9ZNePBG;YT(e6p>4+>vK*LqS0ph8(juZQlf&$gW8TqhtM&^ z%}9mmOBNVy4kGnTVGoi{A9JE)$>|&D_jG<6l{NDGc?0iFyK7p>z1nVtAZbIl?xcA& z7bq!Z)yH#e?b39)a5k@~q-i{ci1wy4QXH_gN6C_X(x*BZVZ|;x{vDL@L%gLRJq{az zSMmO27QJ5};wwSkDTtGMez>#MYYhGGs}ddg3GwU8+r1cclyDZ z@jGcpCA0Qh%4WLkbnQHQMAf0RoTMKGA47N~=ahD=o2d>vvmQ4F*TT}AqDS3Y)e4rd zXJ?A}Fb46Y==BH&|2^!XCG%v{Q}7G1?v)HXA}ubbV&L{CGkNYzZ3oe>w9VV)WXPd0 zjT!ugZaf)eb)zxahFARAgLk6q8}pK5&ZwJ?`6TS}!&k+#i1T7YWGz3mMIO_^@jSXJ z&1t5|RGPq6$8tB#1{{*+G@);@g-evx(vKvmj`IQ@1K;7S(H<~w;{BF>5p_b|h{!1) z{xxwBRgoG8HX}_V!dU8Q_!r^&^P2Ax8J3iubYlvLpmW-hbD=-m%e){g>UCeCE{RHt z92C1SGq_Q z!?T~YC+&?h2-@`=#|Gi@`igVWSy(nx@as|99QK3=l!ejk31s6jog9c8nJFoJi0CX{zEvu2 znZYIF{M@I2Tla}J3^h=;lMyjzTQNT#8^UojHgee>V?`A3}O znc#h#xK1O+rVDlTG4LzTyo<2dSr=_2iE@zH4FABN!uKPGRTAsAmyQ1Mx8n|M zB_e?o`FXK*y295k@*VNYxe--{4NN3s?ngRSC6shds41s|9RAt9o`n(iJm^ z$PxUyg+@-e?S`goGyj8O|4$=^+@IRw5LzW1RygW1Mk>U(3QXlYM7~pe9t8GEf-7_{ zy%6bwzoC=v@wIFj`9c@}6Kf0CEjePSJkBV;?Icul6kO1SEAicG`PsNWDeZk=n@`kn z5?TucFypk7R|Ddm%q>O>KYxs}9&IJknPK?VDI_^bD-$`1EgIPGNzfxj#!16towOMd29*ADX&L~!TURNvDD|5I;%z2T{YeVu<$vN` z=z17GH#vVxQToo7)G0;kM$@|5{ngPHN#+r0Afeu5OLgH{rGXr?tk4#(_mnAD@(|82 zJ>rgWa#(MNAQ3N0`(t>x{r z$M7?ZkGj^x{J-d#>LeZ%16&-(Lh8q;9LJi7a3j?h62>CWFoSWwdbWg>raH;FBu~;5 zJEp=0gK|Bl3_Fn!sX%mWLLjAqTwD>Hl9!+dr=|7Mnl{RnKOm|s68}={vd_)Uha7Zp z83<3MOAR-IRj5*{%{JvI+20b_74p+;+UL3DI0~Zo6O6Q{$aZ|OTr9@05KL>j@Zl5@ zy)O>^>fuFWt$&@b(2Dvhg)boW`zoyDki;{Q3tGx)q+;neo+vtq3DRe|j(xx#N_jMH z8H#sY$0NY`C?u{o|e-XjhqR*rEYL*uNQr(QWqE;Lh!XhY6*_BC^6QS|+ zL8t@+OA4VwgN|JY34t!|y|Etx6qzmNk9sUsN-thJDVs9UC|x9$y`x7Xcgz_eZ0jIu+WFS*)ieq#8{?guM=xFb3o*J z^3f)&u+XP-7IXM|q*AdLF1wS;ozO6FH6B-YH3z_Vvn;CD$}~3RU^4~64C}gCjM*4T z2JQBAHu4V_^Mff7ZmsTP2&WlbGMyby zV21RJjIgAC>{kpITbbeKU|CqPnO9h=_V-VuG|ebD66rB%Wj8Nk-jl?jG_2cE*{9l1 zSV!)KlX6k&Iv4IO#tzw?? zMV~lXWa{(*CYtnuhp8V*{jkUEn*{p$=AyU!6RAVQIZ{kdsh!-hdhiZWP`&^??zK*g ztIL>X<4NcA`zIA7gvStWq=2lubaas}^2ncob__=(epEB)MX8rt3NjCLKjOd`>gT2rGqhmA(b8$>yccyoYK6J}DYzo2g=uEm zlBYbGOM=l`NgEj-kkE^8tE%Ad;gOTk9ckw_f?I{+iG#ACg;f_ZAxdF=DLJ{ta70)o zXK%GW)e+(I^kYYL>%W0`NRr4GZej;i>htaqh3vJhHE z8k{uGGjr0cDs1ldBqA@>h_{ngaYG;^S<{E-Nx&Ru!qG;$gBVwQ15^5TVtbAlo5AwL zE%phA%~*lsr@<|r2(}H2M|i`U$fWDqk4Y!b&)>=8im+cF&5?xiWv=3v^yxw(b;uS3 z>}v-?7SO*+rcNk6`pNn4nxY-LuELTes{@-llg)oHlK6WLoX!83)><0zENhbPH^Cn; zD7vNkdr1*cp-nKFeb7)&nncutn<-WG!Rc?wU>pRy6$-66jTJ4=T9NW2H{B!$`^|;h zV6;$ecdwc{rh^@LkH0+fM z3)+HcgRrIRxvRSc6aA6NfEkjg%~Me#L@~VC@L2oQ6$*( zU9uI4?_bWui*)eo-CIg(573UrIWC(ibQDO#aD%Bgb(~t$oU%Qp$1qy$ElcvP==L?` zT^cgK)&C3HMA75iQS^fY58Jaz#GrE^{_Qx+^rd}Yu>7_XqZkG4%{2DejXe}PSm&dW`wohMn%F#HK-X?Y9)*z)_m^3E_BAe?G!u-J zU>wG65uq@Y+pmVFpFm{)6d$=KTM!j@LBW9o31uy&+F^X~D)7MK75VtD)Io5lqtrbf zP<>rXVaqCU!mlVjN{W(QN2epv3Z*D=gxe;>UDPcfDh<7p+OcKAsLjm_93F0HKM>JJaUSPUW2s2=ou9?VCHd-_9NSeVu` zZw##Wiq;snd9GuQV;jc!CU7?+b|xph!v3BFG3UPvP+OEAmS&nbA})^N}Sl zy$*ts{049*IQ7}pB8U`_J~&DwK&MMO=TracWH6OTKO9K#aH@WnyO5ttWdchpWb%%l z>*e>;S<`EEl@P5)9(^EGR3Gd4uk&Vc&#-&$9_5;rkp~`2i!pHI66H@(PTWM{tKAR$ znAatA2VH}DMnlC_Q%Yl0?;ms1%LGWTd`n*rujS7gP4aNRs}hI^y_Mjrjv&HrK8m{* z-djhif4m>kC{LDctT1LIT4*S^1|j@Pp?QsOyPz3C6)?c9_81UFs?iD(Du$(kXF&{? zK}fPl4-|n5K#L#l$hWpV%KH}EK3%lGa`kVo%P)h$;+=?K9s(Gl=CeWl49@g4CGc~p zL&k25lARX&6)o%&yrX&7s1w4MNqT7KNnNPMKrAGY6iJ4;moibb9AT@kWumRi&T8)u zggcHVdF`dZVRQF<7{4;_s6OoxGLp)+s2VT34yS)-=&FBeZ71oW zSspRQ65JlV+m~N$ekIw`$KO)V#@Sa&-!%@@EGZ~H|r z@82JeLUz5$yBULGo}vh0|Wx= zBxt|#S0_29OqokuHqiXQr*kLNO`Rw3?Iip6(8^LG#?T6mpd9{4R{_|W58?t~!~{Co zAq54GvN_#7sqzBO#`oDg3X^NepFjB0Zu`e#?8?d_<)0x73aZYz_P3Nw?qelh{d}O= zpDZlv$@f&pOjQ~RpxVj*)P?xD&gF|kQ=J^_kh+C)gjAyln74SS)HYf3hw7pbkHBY7 zncnxSznw$cp=d|L$*=tqBTZyRR_l8{Et57kmc+DL6Y*H08 zDz+=14U#l6XdAnM!*Sd|RZe~}U$^-3NePCX3Gy6d-SNqaNE`Z3gSkBV2ne2fO2n1# zeiZN>B2RjmDC?>35Ixzm8VjO5x6K<;Gn==$EF&7~D4HdF4L5WZ=Ep1MDC+ycQF6qc za?|_HKlZWGR5@z&7ZRwerJLMaTW24c?3am6SOA%`R!}lhU#C`kSz}e^Ko~glR-MoH z*G+^L#-y5@X2Di)Ozjbz^w%Lb!Q<_3G#0J;;!x?c7^0kEiN6DXyCZpIeAyuupOpH5 zrEFT5j)k!=gecwRuR4MR4rYs1S-M%S9rIVo4Gqw1mHLyaPpnp05m~G$#=tJd^?F3*blNg zdBREaopyM?m=BiLg8i@*JaLJNHscLBJ$BWQ9qnt*MWh|-rnou@*YkFPqB3UgtKg#uHTtMIA1*^j*%^!QVKL+YFpSG|y z6Yj6Fvy3LoUW!+%;XGs2CUrP^VgGF41`8spY*@AN!LVX|j}LAWCO?|(1O6#Sv7mvR z{PKzcBTO}0wP-6SfgUM`<67}Y+w1S5m6ede=tUk#2>?F@l{4by#!hl<&{vB%NqXU~!dJR$yh`7eqLOpY8Nb9_o2#4SElI*x+5VxL z_KBCu-v~q1E3%u=9l7`&+a2$Wzaamrg_miUl$c5qsUyuL_1%5c8xNS2kIyG@!BxW4 z53#>QF4aHV?nmt_xZv%ssOdKDWOIY3(H0JK_Y(~}Ycjxp3??jZU zSPCNpgtPbq=@vM94;`HguVKFu2j`XuhCZ}JG1i1~uAy<*2>3)2)UAX)%6FGNDh##l zhY8%;Y!0;{Q6%#nYzz0(UEA=OiWp;@DAp_ye>d6{9ivB_G9F9$URX4hxcUz{iBnv-dolPj!iR?dHZScw zU~`=eEl+`!#!}f*v7(DO&yrTuzAEva-T-kBuCZ}G;&ez8_wk1o=I2P6D2e;LEwK`$ zVLYkEJCZM!1hI+)Uyu;#DA@{r*V@#=|6Z8((XW>$CDYN0o=P-ZAG9ho{X(d3PS3SKcL{H|f+y+>3nfF^Eoueh zXiiq8wsccm_vkaH)J1E-OV^c`7K}0P*Y09!sH({8v#tEFxwKc0to#<}2#4Ce4`(^S ztZG2FF>5-Drrb<#?26EYM~Qn~BDg5Kp~2pXRhC2{_*u%<9!o%hNECE&hAWC~Jz4Oc z$~W7C>KtrZZf_p2(PRoGRaHCtnRf>_))ONwa%RZ23(nYS)h?YWljTzYnFh{@1%_;RG$Qlc;2HsPX^TYr9I z-$m{DZeou=WYAq=UZ21MHHzFW+E5BX>Br>^o-bBV{r2`8=QFq%ANq$|M@P<%IkQH@ z?0{j7_e29Oy3@o3plf500^XvG(5B8IE z_RNmv`>C+N9|j&^Cy|z<5NNQ0;qK_K6S{)&g*Ycf7&3*-HtA@ovQ@;F_(J2q*Mv;a3HRr6$6glf0%EhNXSL7&~5*BA8H4kL=<5iz-``QckNq7!L0&EP#sl z+qZv6rQb25+lkSuMdcrd4Nc5QVDHN0-9FgS6quj>X*`@A5UKf&2hxBA4e%-_FE@R_ zjuwmzhs*?as_cO%xcSJ5bU@N;_UrjAm_0oB1==}SR2(hmGam@tNc<2V)x8{5&elH; zyIdV7x>)3&dms@4-kn$5`F*sP#$b(+U$y=u$(d&T6mZ~}uT%sze5^B%O|@Ro5>be4 ze2umJMF7n^&Z=x!wKay*P_SwFk92F6e~saOPW(zU2R#mgh5ZeW*-|F$<11))yB?im zj+n&oMn0rt<+}O+#>q&5!Nf~hfkz+dYPMkmcHcOtlTxKL{ztA(Q=6s~3X@(yfEcf# z{XrA}2ej<9C_9M}c{vqU_${*~nn8Z3y*&e;{rjo8FWQ0y21b*FnuHMatZx$6vW@d5 z&p#qifAoXd0_LNTh9qQY(5^^h7Rk3N&pbqNeen-XL`VF)34%@`E2M`WWzfiE%W{i> zylc$fc2u4RVMglfNH^;%pG^OOPPvtu^D@%wl#KAW>|^(>ZO!YXm_^yuaw3X_3*$X)*A=Lq`7z;q*XH(#5kcnN{gW?^}=z7$L_Nh z0h@Q^ZSiF~#Tif=889eH1d{^RIZmThGlBSekx}PJYT7yWP4p)6i!5=eW%A#%O&C~P zrmk3Oyc3iM(I#W@Wyj}Vm4C5)r*ZJ|z5_RsNotD4oGFJe8pZnaMrBY^#^c~?v{1mk zKlA@LhLf@AEtuhXUytv1Y``W{M|2c=w)AID^WrPJ&I|Q~2q#N~wIlE4SnlkIRDl+y z%#aw}J^X3{q2J39^S@RQ0>ydrPFlEHmVpM>C+s#Fi=DcHcy@`man2@Lm{Em^fY_t_ z0R?J=77zmGc$8s2<EzY;>RE@tQV#_82*PLASJe?P`o`y_q0CpNT$>1*6o0Goa3 zPPSy8=*?S1b|>_UGH*Vw``m;;!Fv+5L7W*hyN-~8qP+FZF_G0m>VuY)qo}0U&QE*4 zp8jfMA)I=zrz|?b`Z&x5G$><6l(P!L?`kFA0rRy)(uTf7@{r!PfG-PY0)@e#CAF&H z>0r3}QJ6OsM4b_+1g`m}{{0H~+v@k^=Cx1P>OJp7$``9&Vj`Cw4O9s-Las`VpKi)^ z_6Si)&5K%Ko}0v^nJRDerM1kJzI))M+$vfg#o8}Eio|{Sfb;ho2_i$8)oop}Q@&az zOcS4>YGdhK7E+-SH^^gzE183W!Q`3=wVD14Hs2`Mk>3$v0NXHWDBdA1K|Wdt5j(wv zrbh264Lb;5r{*29+Y)@xu$u$w+{}-`wB4Z%Un`+x^*|mgL7Jh3I6hQ_4V;t}bcg!J zQ`7`DD*0y8MS9Qj`(sKdz_Lc3R>4v5MjIFoL%VOj^0GYiB*vsmy(5>MYzsu{2qqHp zq75QggX2x11vO5}<2RAOvfQYD&rMJ|O{Zv^HY@|zaP3d0QWB_{Mr> z4ifHHPV@JB0Fh%MypZlQ9FljU_Y57!-)79n})@_?blf?e9Q8x}ztGh6%9A`{*h>B;I#f4v?dAV3d z*08(JC@S&WWwUCJ?gbI zk=&kdl8f8JNJA+xm;>VxM`R^A5}cT}lc6)Mxrl`Z z7asCZReq;!yof-jiB>9Rp08-awzp=bg?yyX_RALCOA~e+pM2KdORerSaE8O{VuTGk z$yC@l+#G)FKc<2C>gvt(zHF7S6js{X56V|ElbE`BmU;EmSGfPyZiv3%FD9*(pJQ{V zA;N*ud&Gp#WNvtPuW-ewqJh`p>Jy&L>hlT^{lwR3Kv7<*-wa=SEvG(Ql=_{)C7_TW zA7~z(#h58#=12q-DpIXD%yC%h%d7aKWCjuy$Wz9>D&I0yP{ zw!!gx%ED8F*#St4TEYWh<|ulDe{8xegq(&o#<28G11qMs1t><+AC=2~Us!z(zIIBW zq^o6X&+UH&(s^!>1md@eildxTwo%0$0+&-c*G%knxO6y5v8=|Q?7o{@v>6>rP!ZCVB*;~zxQ{A&J zL8ZQI*A6Elu2vII_t>&CT=~dnY$^@Q{}Mh}G@Cz{zJz!9_$gbqF=0p(%W9Ia&+g}^ z9%Czf7Rq8PgGUCjvG73@P}MEV`?E^HuWAD7bE={*yBW8iBW8CpMqN|Am}o7&9G<2V z=>;5s2jaeMz)`Cwm(@tx+E@IkOsrc6nSXPo7USf+ zIt@Q9C}ZCkxxJwCV9WpNAZ6=`^%I(mhrhl>TNg=av;*yYb zB)W^@<1eBl8n!+Z&6fgy$k!G9)y@_`k~EOXIGqk6IA=n`?fcq!*X$`*X_xwgaRJ?7 zV1{B3#{_mJPfjK4$o{Z+0?zHCkZMROX-iTnl>0)mv66&yAcn?Kwn*Vz`a>Kl0y-(y z>`(N{Q?8r8eV;8qa3mP4MwvQ|{gGywAwZ-d5td8D0V`t#2V=cMRy+Hdj^+#g>bgoC z5nJt(n*P%GDfFvIlMev=K{zR_6ho$#bqkzJq+mo~bHMN(HvY=!;O&Yqvn>YXS zo+(jqT|~T<(|t&&Z{XIiSBf*F>>VMA8u6rW4^0%TRgP}+gmD5NH|=vSFr&~xG7+3r z*_dx==qXTG1G&L$bf5TZ@&&N+*9uX)e?1CoVCm<2yJhs&Nle-&hE0S$?-5>QZX(1x z4&5~u#YbD_$@s*as6sYK@l2h01|mlG6~{iTmXCm!^n?8oPlJ`vyg|Y|e4 zPV5~Ui8MfJlG;&O#h(p#O2DHnk!H@}9{SZ5rJ&=jf7y<=Tp$}kjY)i+DvI}KjUP{b ziHRw>=APnKABk&3VT<<8quoepap^aVW;4sUH3ryk;nA8D*pK>d!x{aJ7yBEz;_&U0 zWGYMqVQ{eH)r5>(6f~EB0gu#Lu5QDT9=={BL*1%Vsz>f}e+Z%NkXm2_!rD0Y0I+}) zK(rRccV@ox$>~Kq3fvO=9hF_IYl6XI;xuxQ?b5)CSGsIzAU|hM~bMKy+{@8&aqrXj-6zyFEm}_*V&Wl3wpv2#Jn5-p-7M2Q zYP@hFDo1CAdvCF0O@q4!oj25I|8bQ4cXk%^56d5pY(KB{3rm${b|!F4omDLhGM&^` z)mQTg6UA}Wcj_=g{x$8+C(@g3jM2GW#tA;IhwtLQPq7)<5X=lm7QJa zU`c$<`~sLbGxsW}nT)$X*MtPWSz=My7 z_|8I%SCGvUGq6Z8Fda8A`ZSK?FS9$~gea+}vJI~na&}6qsHodrlj;~H8b?x3DjJsV zhq!_QiyF_c!!!i0bCGDuZOCC3Y5&xJ9Mp;rqw6##_W>)s?-#W%!>)Z%%zW>^ z47>gF>L1cvOsgUV9@Q?THp4tYuWuh_j2qvQq&bH+VTx4BZ`@}yIjM(_01qi1F+klv z6856Hg^)hKp1S)wLMg@?Jiqr@I)nb9_U&O26{rjjH$~yLMEiTA;?i|aYEwXPUzc0q zR%{RSyiLmaz9s63BqP|{eU=F=tj}4WQySZDP#szbCv#gJA=%B$8a8FYdHOpHqg_FJ zq5PgsKg8Ejm;I)2(;f+FKR?Z9Y#}aTOC~G=jy@Q?7pxTZQqfgW5KkB?6iZqIB12d9 za!War7m!r9O~&RR)C`QWPMJ*LO-Un(V?QB*`n0eGDw)5dH4gIZg-7_{p>#<}n@d&C zp-Fzr=&^XFZ6ZI&c7C(d^uj3S)m`Ckqy%%2*hTrRT+}!)SNO>8NZB=Lf~fzOjr-QW zd>`}Qy(f4+@-^@k&f_=ux{bV~*F2`un^NnESEbYuTm5Tr zqyjtxW-U1jhfKCIl;$M58})3(#gcK+ETb&vnGCG}JS`dG1=E#qG=olNPL{2&!CZrj zb@GcUdB_}?s>(9mUug-Y^*9=prxKB6t4ncNs#v>I+*x71hJ{S9HZ-+N&(dN0SciUw2%H;QRi`$<+5G zMt9i*i+A4-nb2=Bw7;1sOq>+2bi%NlLIycF;?rH3t|Lu<*>&=6P72N|5@)s_qVuk( zoONDB|JuDWe3p~6BdK6i;o^C0&!4$LihFxf&_RN|Ux-N%)g)TRRVhlEj_qCn)&HEc zD!26-NR@Jp9xEjA;BA$12HcW#rw{{jw(1%9>c3wBA%WKLLQH0ZrZ!$V$GOW?|H#$= zR_uEehE}X10rsu zlZnkaTZQz>SN|p2Lklt04%a!SlyXWri}oN^9PnZcEL}-R$6xLTq#Au5Ds7(zsLVkV zB@G!Lzr;FH^tovT1i9!Gd8d^wDL+>BZq-Ay&Y4V}0ofx_e=~{E{sZY3A20Oyy8MBK z%dmLO3(#s0=%sSPyb~J2lP3*7gy+?SXh9ARLuU3D*<~0zbexnhSr0+Nl$29Y%+~5O zUA(^8YZ4O2QAM2?GFF&b!N%=;V*Ux5^nptGNRw}hoKfPZY@+xAdna?wWXA6OT^a~& zLMc}(=ZL(a;1=5Y1JDYG2cXg9|E(YWi}M_bTR(~jqYSx zMZ#6&jfAaJfmoqbDdpG?mn2a#s#eZn17(SFPS`pSpzZo1?d3c$u+z&XzN2r zFjCe&onj^fw~m+IV53SnPIFkYq&adC$ykrz9#YsD&XD_~Q#t&cb{~NkN6c`#er(#PuNcA>|ix(J~^{ICmYS8-VIbhmvaXhGe+3Ftj1bn|hGr z(c>fVWw_lS8yLcpJzt1cdni=QP6L#mX&ogX28LlD|JVIt>jyth%BDLMioY;JlyXGg z)K(Kg@jOPPoL&FSGa5nA7OB3hL()iCl=wk;l!VIsR1gr7P34%KC6`I1Ip;#oms$}u zj7SzFd=VW$By4JRM)0+$$CNM2=XyOEx>XxOB9juWp%HYT<|YdLl}HIFh6}ad@(FiaN** z$4Z@&c9CS22)`dH?AQ^+JqL*xbVFb&w8w$S z=n};^EK4vU+K{cbBV$0X{&CidA1L#XOr)Fv2%$8o(sq&aD4BD1@fiC6gbGCiD`=0H zT&qa9ioB7qbqWj=GWFrNhwGZr`?}_sY*P(%4YK5#l`H2k8sU|)Fr+JjAS_?k9Qi>% zc^b7OA%uW*%cZpH$)sNQtcDlEP`K*{0EK>{%2^3u#q*Cud(rZcG#n`v$+DmTgUk1b zWJRoOW3m!P!IhA&pvUv=E|R+)2Ow73Zjz9sJ|aART4|H-A*_c}&H{;?v`vqt>JgGO zo!nr^+NCM1f<-tE7VXi+Sopks{lg|MEUV~Q?~=EM^r{XaAv0aJl)B#1^pA83nxw^o zbK^nAFf8B`%{HXeBntwB>#BwD3U!2e)uF}jG^T_2jf_>8-d$RT|2iCMrC;SV4PqQ_9_ZiolP#rzGcGwXWHctW(Gd z<(zz%hAAgj&dJMctb5B z<0$7V$s|!MpOQSOzar&HeFc+DdzkWQTBhq0gNY~q3QAe&k+WnTtj2Kr%gFCu4)w#J zkyyO@eh^u!7{0}wot;twt$|@3S6QY%a%m2eONY6EXU{9Wsq1-^Qp`TbOqH`NJx%5t z^G?uZ+(j)aEJ}O;;ow;-P`FI0wXQj#oSjwWwqAo&(b5XXcBbo^OFK+|plErPgh0qh zSOuM-(;g*CBynRC+4JR zL1rz(&H6rul=?R=g-dskadS7o5!rI(4ATDi3L|;il(uqiG4BN3jhs^)8-L#+>Qx_H z#8(MRNVVTN=deK{YKSN{fGTKrGD!XBZWt2sth=r`(Saf=-;%I|zpS*%Su5tuku!uq zHoQpZMuYy*N22}bixC*zbx#cMusRr@BzcOMeB$&&LU~iN6n^Pe>i7a8$Vo#8#5rk6 zNHQcva~w*lA|!P|>w|E0MvzMDVVqJb}R_ zJ7Rdp)kQ^%a+^ayvkfC}Xt zOeP3o-jS_2kM(2Q!sK9uK&w57DLG)8SCW$lAr}a=7cRr%Jq~d7DnI!Jsdu!W3`wH6 z>LARi)>g2ke$fg-^3|(0s_Iw0S|WIy+*mgm5fYD;ZMotVPL$Zml9pHXgkh|_X>K}& z1-tHr*6;#y1(&)aq`rBfQmbtq{}%2c7WeRq@V^@G#ffcJtejzND(4Ir7x8J5I&J0~ z^G?uZL)J|>2Z+cgP{^@wgR~^)oXjytJ`D;=^2u2y*&t7@n(xdBFZ6o}WTq7tq<%Y` zwj!`n05UU5SL#>SXn{>gx@HGbG8M)u;gvE?Ye48FQTgBkd(Qj*5wySHP7;`EE!lIu zQ=7KDI2Rm~10_8WKVCXkAXNpp-_nZ|W|}1Zb{Y8P7J*U@6?!l^*oQBYBq~V#Vn4h= znp!7K+wCVaFFDh>=Po`G3*oxxFpX6PAu}v|?mE4+F@D4_DaQaPg*+Py$C3OnuK?VS zBhdP!l{1`jF6Nw3ut3Ra+5pTuL8rJ36*h^eSNp!MIku|Yk}2Agr6VCtaGF$wc_P`I zbncf(Ob$-yR}B@cl;&+<83go=6=BI6(vY^jyrtz=b)T-dDvX43X#i<1zon4K28PXz z!I0cb`w76pReNDz;j&UvEs{k@S|J%#E8H{*S1H-v6tuNYL5q^@flbt(l6KsW71mE; zBJ%5f?&A@#inyvC@s&tG;w5O0F2=|Xt4+BnwNgCery$T89MbV`l(b&HPRGOTPOMeV zv4Zy2w}S|KYEy@80Op;bD}^SCGg;tAy(yyJu2RmWzY$1QYiN#1D`#6ybdl@VU<~A(8mx7p{)gH@?#38Y~SXk7o?hjWU`CKGOI)49iDkn|$hlt3ODrQ2)mE=l?r({1zYKXs=9)~iF zu37_`4b&iMINK5JV7<2pCTGB|hH>eRKsj3rZ*3`woU<-fk3rev0P~G`C+Ollnzl&! zbZmuJ&VesNpeFFl_*rHimo>-BGB**}n|qe5Arz@(Dve{hPf*gf3Q?1G zt38a4QTYh^Ex!DO^B3*0KV-XYHiRVO{VMW9w5~Z#vW3rsrESI45pg+!e(oN2NgTIO zPrJ$>u1~QY!K6gR1IpS{T&-gJt4PM7GIu0fx_?-os&&uF`gehl85XSGi=;WapXpN& z$l3!=T!8-2tP&>8p*-maN;#c#rtS59RC?5$?yZ{}%sWBXRn8vt=W4XokAE7A^y8pC z{YGHqTT%~67)2j&xU=6;~lzAa1&fy^mDQ?5G+DQQ`)b7mp)`6 zlJ$#o%Ek6Laupyq5XmG*j)!RV2PH4l!Nt$xNt1pK;;YE-f}!QRpuJ!TdO6ectnJPf zcV(mO(mTCw84Bh}R}jTabIypAa_sAKv+@eP0cg#41eE-2T&-Dh(f?G@st5lnMNa}k`jb=2mOhY>?k9iDj=p1ZkSJ>*M-C|6PkF8< zC#4iruFM~hZ@0Zre_5gA@P|Tf{`9fgHo-cIm zO+3_MDzCFR`(f6ycVD;X3^nY&z@+t-GF{va5 z+ij@Hr}SiAgtC*x+t&tf5&$KV?4Y&*tio8|L zl7tA$X$e5-UxR~Ekmvw;jvRoL3b|51ovu~Q!nIr9 z5LEitoQ0{60K~v(NFt=)g7Gr$$jav-8(u_6G?gP&py>mu1e2HL$}A2bK0SU+_IffZ zUjEbLg+4jigBSHsGN9$t&n*dRr3V{#aeQ^NQCz~+6HvJiKp`Yl-YFqjyE%2fg!>C2 zkVoa`(a%WbdDxCz(Mh2i?a{>;TDmiydgOkxH8|4)2neWb0Agwa0y(6R=pct)YNz8i zS6Z#O{Qgunf7Y+oIxoCY1DI`8wIU$t*DJ+ zQc6OZ&!mF+jwWIKpot>&*H;{xoP~cVB^$t$YpN%^chmJh0pGV&dEeN@KE8RGE zRl?4xJy*+GLaW-dV0mGCk-|>0M^}1=6#A){IG-8O_XH$zksc+1uHxGBW~jJviLq zKp?WR4o`R19V4tyqY#NeVEz1q!vQ3j1~Mb22u_SZ5zLH8@;s#|K2ipmWS|nDfIgiLrjCd~i>aQWk3V!Z#T!6FfcZy*Q*1%ZhLG+J=BnVT@abaKDd_j}BE3BuN&Q*z;~7BEl^V8jZXIrnFq zA^34-)sW*iw7iazj zxU&N^H9mkM!Fs-R&c0um@`~>+GBuyq{XTQ1tf~~|YuCia0(KpXw%Y|V(#1t0}V(i`v%Tg z$bf9IaUNvXpfNx{)4;O69=-oRR-lLz7_tyTvU*)GwlgB659f9!Z zt+(*@+wX!YARcC<~UFBHWlfN$C`6V_F-!2T$*(3Y+duj?+(6cb?C`yg*P1@GN%EUeB7Y5z=J}<*9 za}ExCC7(fb!i0QA1TrHn%(u&wJ?I(A6m^3>_e@wBe`?eVsp-dw>;9cm`5itVsbSpu zd-C~nOga_tT*UVvf5dGbyov3b@8IzCTlj%q)Fegtb5>l0aRWZY(q04v24ZfW1gZN{ zOSOzs*M^U}28Yh+&JNIB=Bz;{+1HrzDs!$t!0VhDP$u1B$~WnpMRg$nAfTL0filSEy;Ga`| zYr&k`bW|r}W>7@SiA|!g&AWGmJqwX^J z)7*of{S^*Rzp0)T9X97sQP1$O0q6hW6aQ>!g#`_#L{u z_`?sNi=zUBc{2%yCVwF_AFY>AGql72i@M^;x8LINx8Hz3_~|cxfqVDf#Qw0u5C_a* zMhGM3ctD^G*35{A2na}d0fr?98Kgy+Oko33(DCgRmi4rK^C!4?W&>YdbB~2uDHoB#`#$9|zrq zu6PB+Q#R34H3~cH4J;V7%SXk)VOqGG+~(2S*gpC(4$r?`8K0>N9~ju?1;Rii%o&74 zgusl%h3=O3y4>oPj&6zS-;cW+0L`_p5_whEjN&hta|fIO)c#FOd6hZCG3RW(ks0%# z+p@zbDvV*oIFwB!n~Mvi`3fI@@Ouadvw^aZI30a3=F$rb+1XH{=-hTk%NWt`Hu1;r@p zn;;fR#K_lxW#%kA#Wu^9wWe2b`K?>b48AXS_ML+M_m5+Jp(b#n1vPmjL9~>i?7eQ4Z~%l0?WQ% z|L%AAWkF==t2IfnDhav$d)vcF-_PYDpqerGbl}2OJ!t=Q`DAW>SK((BUB|aDH(~wV zm~lsF!i8P?TEA-A$)Y>htAy=|?&9sA$;~SjdE(0VOqj!1+Jjc!VyeDz6kA)=rY1nN z67h$3cLSi6NolP*W>pv!;V5%<&DOJPUSrNx80EQwjDieNhD!M0z^_UvKY zVi-q^;})0q?&FW2{Q;kS{09KQFa(U_U>(hbg(Ie9<;&Tza{BmO$MYZ#c^(2`7(^$| zV0`}Z2l(UXAK~8pM;L|?oACm}c!_bmkbGy59)~fPP0GZyMMk5#y;Qwn?M1lv&U><` zV`JTeMQKqH0iH~n%&{jwoW$emvjpHbG&C|5UhyU##aB=SfVKW+o9>$I6$-{_Y81sxEAdHtF zD%;ho`cn0VtG|0cdEb=>Sb#&t$hf?2py9&hbr;_Y+lJva;L-!_HSk`7b;GQi+r4`S zBNecv=6&D4QHQ%+u%AEAunW_MN~=ofEE#ec7g|picJ<|j=%QYm^t#`<1xjE1=x46n zu=2C-7n&OeFpT;4(iZ~&)_!^WEG*qhe>tbS699co=e%IbN0_tuyzW=vyyoZ8WH*_R z&LK1BaTqafwgAoe=)->ikXiE(tn+*D)Ntiv#czLa(t`(Sud~kahaqpC z0r2q$zeAveVY|U*xWKU4X6C;YYm=-)=kcNf7t+DOv{)bv+Y4;p`iUFtnla614LTMN zO}Ki`xf_^d4SFm6!rmhkE0R3AdmxPtBi8r3ekVW2{H8vj?Py^?bMQLhPCaPzyM9#| zasl~TX!;qPW7KGL%PZ-XnOu4ARCn>_yP(YmB06+o5YDfMC97JIObq5-u)fm%OlLEA zor(N~K?684*c@}NnPi_iD^n;5FPU?#b8bPq1&07RqavTIWu|m_v&kq6g2QHmaU8I{ zyodeaIlj!gW>shCSd&g)K(k^hjj#WDzxx8V%(|4P)Q5ukFvx-a0Py*zALFopiOuCD z#$hAiyvfI#lAMf}#;pKV2%z?&&Q#amy?1|IW(YdSJIr;lDZ*8FH4V29SwlMJ=oqDo zepF~{{rT?Tz=~RsB{b>`uhv)xXFlqy4jR?-im_RQ(lKk{!mfJAqL=zD4>Ufiax3UN zVd%!0PuKdB15Hh@ogr0Igi{<5E`RiMm@qJZ3C;vy=3w;(6S8@%K+CM(Z(waPY-lCy z`)eujIo+KA=wo)x1~RVGouYG=gkjG;Qz&)MbuX}9Oxg$XEGT@)DR>6no>^=C)aCIESgj+*Q8v(g z`_-SYyMB(%W`oT*+QQ+m*<#pSLQPi)00z<_A$bp8>d3)J1$ztg^B`_k4LPG_CIJ-C zaQU|18|GLEX+LP4Zq(HVfkGbAi4RyfN|T8OaJuhJfCjKFG@YB zOso30#xLR81r!&c(6x;p{To++2kvD7&O1*~6L=iJtP#heM{1{60qQ7jum7@Y2TgK-FX0VCp@ zuRce};H;lDQzXw66@06~NO{u>s@tXsu;+49N)H@Lfyy@HqT?>$2*?qlKo}*xZ@>N% zI538BgUvYDIn#1zdN6@RcJ_!`H)wqUVY9{f;LRHRpx{wJyqZS0CR!d`eS23XU!}b( zq2vcuC4_5XuokYtu+uKx1;HLzqm!N!Dn8#8lW!(;9vqdyE|{?v*Xfph|8l}n>#d+I z8Fu%rJe)8sm~G{-bjvSwzD{(T2XBGKaeY{};b9b=b1nl>{<8j2qjbkL5qv!@!nd3e zd{6HD0NsG9F^x6f4@&iU-S2`kTAwRl`k#X1kj>Zh`l)hAzHCC-VzU|W`6qt>5n&jE zrBgb6vmgc(U0Md+#lll4zmq+0rrCtXw9D(J9g}o}O@dMpA?wD!{PZJiwj)B=U>vt% zZZ}@ott>=TZI@2+K>$EX6NdYbkmfzoJT-&5Va$F|d#1_ydw-$KFN`VEQc$S}S4ppw z*Y_9C%u9Q;jQ14Z&W-N%NA+8V+b~@xed_FUa3S6i#U-RAJ{2Hc47wY1bv!id&iE4SMt`8L&b{0vH?dbsFi%&nm z_Tm!5<^mW7VJCLhh{SiCFA6g&!g<+#g>kxaqJW-Zxd%-TmUYKygr^sl!OCAV(UvHClQHeTTHXfiEaNCb z3ysdb5++VvVlt`-A7WLF^kq z2kL}*_X6|vQyi|IARexe<^#ZN?WY)J;O4-u(rK&Tpkmj$qZQ^2WA@C}k3}s<5f*)u zJM`+^gDP6}LILAy(@_H&HTV`CymT)GZwKP}JzxG(AkUObw%O$mfP2rUTclm9>-HoB zB&XOzQ?3aB=Sv-+c8Y zfIRhg-~wY#Zt%9ZLuV!$^h}Q&Pt&S=OJ@n<{oABb4RY@nP=Nze$kuQGkH7s2<7SI6 z1TY2AKtLEkg9y4}Wg^#SZQuNn)vGt@t9v&W5aon;*kRs1$KmC7n6IA7bT=OI(U_h& z*J>iJ29qmSvoKn$J643aQF704wY`>1c)fm0zl4Hp#f*;#3nyIk!xh7KAZbi`rF|Vjp;A+EuOtccO0_nE0T_d35>&ZCU^jQaO zhwcw@Djkg@UOaycAYlk(-|=9A{665pRXe{AqcH0RjDwqAdl2`a&v5T`blf)B9hlX^ zq?BJ(9WSn5f@#1Q0w|w95}+3o$Zg8Z3~*L&SSsYo@7kprDAF} zeDszua5r|=Qj=Vh>$`w;Om!`-E>lP>nR4r6>7UV^{WQCyI%hvv7R&>pn6U7_IR4-`rOc$TA2BOx7RAkHLq=V9D{!X|GJ+BnAQP4S$+sINM{ z?+3k^Tz#4w)nIF2O|E_vB%3?`+B^L0qEpRJIhs_2g}bh*iN8osU(5M0l2Fx4IgJhk z+hk;F1t%+*BREdrI3vXwoMs?KDK#fa#0eiu*Za40L%vQ;>cN?)c3d(<$bE(Yvf|~| z?&_Rfd!Ndj?*M~7J3v>1XwA3II5Z5o^>u}>9*mXWdof!zFbx@a+~yD}cL;_-ruf31 z*^c@w)A9zCD<dC!A|93@(ZQ@(Bp`HjMqBtyxU8!mq=!iN={k?$OozK$>q zm_fL{dXCNJ5*!#vdUsy}vHYz!eGHcmJqA0_byOJ+EZ_*NYiH#AF!cOoQSXT8gs|xp z0ql@+0%6#K1_5gdBf_|q_M-BhwSy%jzI6xfhl}pgf_}34*ZR~REW#y|gM99?+=5;1 zDohz9O$Y7b7m$}21hP9L^~RKx)Ab?{6r6}it6CutMkY=PP zzP*>qot5zQVK=L2`za}^y4$VXaPc6QB|%OjUw4s#O(3z$w>&^d6aYEZE&%RYuhV>V z@Z|gy`s@IGTb=VdI9r0Km~!je3ogtBq;**9O&B3xTcul|w-=ZA^79XcJrfF1^z%v! zpXd|vg{`F=i+XT_51CneP;5J03A%;CifL!{i7~SPCc-d|U;>^$d5m{{{wt&yfj|gM zU=GkD(}5&cdu{GnzL`0zb$o+p{p+FpuG+yMSMDV!_I*u&(#^j3WxWSkckbG?yY zn1!8n&CCd#vLKRchD4Z925DfteCQjplYf}-1GA}6DhBO^j_TC&Yau9;*81!BAgL$$ zj4;<(F2;>|cb%Fj%64oqnG~=_KF=F8AdCYD185u@Ay*3zDHa<;?uU_?aABN$s);y$-=LVJ5k0`4*ta0GZ1D30-DBraG?8RdMAy2>AF+oXJb)D4$ zVFn+-fm08xQNW~NbOGC%Ij=EHRAAgvp>o|5tTQsHH3-4$0Izme*lz9tDW5BylH@ZI z5C(+py;6P?4xu!MGWCqIrO#(j)%wyw?!dhU#b%6EW5*B5y1v-z%j@s~<_M&ecd(Ht z6P(Zhl?7UzCaG{L-^^WzbB`rul&)SaKS@B<{&9Jh#FiW>fg!(fN&rXsJI6zQPXt6} zyBTy-24g7MaZI;HSqIW6!Uk3^CBHT^(`Gy=-B)Lvn~MiH9Ci@>QwG*m*R+LxU(O{J zH4{`FMJ}IK+)h}_#V-6823<4f-gLGr;acC1+7n(_NYos*?bRX-f^E`}0XmKwJpSx! zkRZ8rTGI`C&~2z+9i$umQvM8j4Wp}WcU}W&Y6cYmCbpYGpmxxtLK0$HM?fOr#goT) z=VuR)VyPzr$&sWKaPj6(Fl-+HV9{YZkjN#qdNl?O6}mkT^$gmTCo^*uiY32VFsD>D zVNl+q;1^h%^c^`U!j=$I6k!>&4w(I*hcV{XbdPf#D5GT49k=R{46e3N=XJ&`cTEzE z0oPbT&;{}KR_%%jqqMtC^OaPvk4KC5Dk1O3X(}KuxhU=6^Kpu!Fo5y}5t~QvV7_{e zvU1Q-cI50cM){qZkxhAq8&F+@yUvtb-`I`y$8)>019YonUbEJynR4rUrri3S)?n`k z0V`#Y{!}?-(D~mmN|&T;i|HAl4f@5|7!Gvp`6+&|_YKqxOm5KC>NHhBMf1fDq_h); zVCe~NmmQ0V8ABk%Y}I1Z^8EgI?-9ag3xF_e?`I~Mb)G4ja4FT^Va$3e9vbEiEx+bZ zg;ZhU3!U^r*q3s4DR}nFjylTuENX>Xtx>EqB$qV^Rtt#K`2KgzuhTIr+_l-Qgsb-I zirLob7g<5}{c?AtzSm*QZMq89WfYa~Oy zTdF4Kpw&6cSNpKg`c3`#c0Q*&J3v=El>DH(QNsCf1HKLfYUZ#$NQt;Ppr|ls;n4xR z-Ajmi0}dn;Dlk^ehuRA_%-R2*!?k+Dfii{6khBZ>1*QVVx|&X;D$QmP83UC1E#D0$ zqkv-S2UqQf!w!^J)(b`xz=W{9gfe457F0P580pf|G2LjKp`g*%xjSKE?dd_8&H6-{ zxLSK?zU%V!KsvbZJ0W4+t?n1rz6$;zW5h+8G~nwN5(!Qxok1-5_{vC?=^0oTtZ;u6 z##({C72JV+j_*M>)#(*%E<&ZU_DKHsS{-8fhO75#plW|t)nEqYunxdsyeNS>nMIhD zOeqNK+7Rc0R#Fa~aE&9!)^5)2&JNJ6b;eO^4P(k}xJsaexk*5Kvu~{2Eh+0>q0@h& z%qmG#AA#`AH(xH+UUup|bvY<9iV6FlOKRYU_dWd;Pu&2N_g) z8@MdUk#fm=#XaNs^QU;@jd!FznDTQ0a~d`PypGuALl0QmT;#e8vZ%!oJkLPZw|e1f zRvi`ixq5c()@9Ib{WPHO8K#DPe<)142Bm5zqGrqD6>zq2<5!He3cL1m30Iq6EFBdV zC5+~~RzIl&^38avzMowCwfR-yQ68W$)kaTD5Ic1Psf8+ z`wdv@bI+73=KL21U0e^0%@0oEb^P@gi+}9>%&dH)+1`mPr3nH|huuy->A{X0kXEJ# z)t0zvc_^T$Oxk|8_$W-#gH0;sk=1?Ac*qt;R414g&lQw}*%#(s7@0OXgg_zQth2bQ^GnXUaM}2(}GgXE4d^l)Vr`*1bAR)$!Hn zq$S&BjiO+1onFypYd=agIOf}T0NF3_%C5(*8}0+wURE(#+K>m=RX8|~1Kl;SGrRKx z^eGtYnQ`l*^*af$^Q&nNa-))&yy>dFE%>RL!ynS(1a!-wjj0)k6i`(LUH7pPucTK@ z^y-B_-(w*>7#%$6pZVIKhK~EWk*}B zdv<=yoE>xX>WU?nEEzcY^fX>?p-|&f`CidMqnnWOvM@%i`Dhrp2}3G6@@$Sq9Fbz) zY~ggn!Aj_@IqLRdR%4Q$`oq2E7yWbndL3nLJ%eJc;XuuUr~U3hn7A-h58^()*(0xP zj?v*z>5zTA2Bfw9dUnk2`(oXb)l+I>Y8`-!`b6!lwLWigKvLJa1;bV5oLwTqfTmn- z9N)y8kLjHM!k`;h>70SOa*ZjsVGqJCyZ~pE=N;xO=^7f9aQ2DhIgx@{-aV)i7Bx7R z^fKrv2%%|wWL>KVAE_D@aM-E5xi}&W(=@&S;;*|K9j0;O^tOpQV3kdL0Ig##iAZ?J!z9>S={y z3M{(|!7_u9zme-Hb-vT0>h0XEbkGTT{HV?uDB~QUlpk5PeEs%x&how&<~m-^?amI+ z02+z+3OeT#nDS9y!R3f6tK;M(FRW3kK^7GB07ZWVv7&?a`8Wp7%B0F5Ekrs`x0TU? z%&s;mIH?ZWz#E0Zf-F6t2ooryRgeQ)byEgsDVE~|bC2!Z5kHX;l|z(9m?9FaI-jtSE=BdVWL0bf&*yYJ_6Rb*k2 zzgKfKj7J!7$0zQSxa8xJvxh#;l$U)ENAZs_=bnF4c8Ov3 zvT&dV9VErBxPW1+gYGfv&fw4A^wU`NsR`S2Dq%RVuf3K+#0 zkzzuO2{A>)n2=)ZFlepczA4-qV=frnZ#NINr==(P83x&|J}CHx48DOdgaNvovSh%D zx(R^@+kvnRqojLJ4$Y5q#55<&F=C!)%m9*ZqpnWNlk{H)I0KG*;Z$FbU7#cJ{5V+A zF_Ra@-goVHMt6RIuCR76P!aciGG|yPE8hcrUnBQ}9^lVH=nB|+J7^C=VAJ8Mj@g3| zvz)DA(`w4`QvvNV?e<{dPeoHkqh~i1W(_zHv2@CgL@9gwEP?2jYQ%%_d+BgWNKn!H1F0(qLQHgwv{^sEuTu zz}t;i>LW15al`;LLQ}&MFJ_^bDxE73lgyv>=*^V3YNz}>B?0)v5{_zZq3Nseftof- zSk8hGA!3{%l>Es1$o1@nc0PN<)GpE52XI2cq;2ziPFI=n5CX<6fjIyypq-d8Pc!Bi zG0hP%66Se!>C>ML(rKPbpdte~AgY6Ag*lsK?tqgC3D?QX!ix@~bw*WN zBh*Z*&6jlQ;QBB_b+dugbWgwMb-7#^89|iOAaIIVbzcjg9usc;Fp#Jx#(-f6*o-5_ zpt?|kE*h15_6L<8bd?>fmba>Jw-c}xeip8UY6zJ$jG`mm_*%<#$N=N>nTutjmA(yJwO{Zs7KGSV0=*s6vym-3-`{1Y8V~M`ld( zj2I*4Ibxb-%<IGZ^vb5alEw(72yTfuD)Mz#tF}u3zM#}{p{}i0NsM< zF~!2#1e0RGUuo(j`wi^ujLIjb`Zb4B+X3KmR zezNbvJ@>+!9b;XK@9Wpc; zx?chJN;pGx(fx4Mu#P$R)n~cf!<;oMQE`A!>d zeV-nha#$E^&jBR``dk)k1MXjJzyPMH0CqfPiWld4*x$xao$@s^C1cLjxb%KnfOKi6 z^SSc_bcKx#gD#_~4&RC?x8d?V8=NR%8CaBM1(nX27!U8?$BSprFj#inpttnAj=2LS ziQS>~W!i1&rBZ%!;80E9DzNB-wjXTzx`KEh2I~P)tR{ATFqRK)?_GdccCuM}<#aht z6{v;~gduM>*lt4ES!TkZ2I1;_Xbn4%r%>0IxBg&z-_JBk7&Fq-e9 z^ur4LJB|QRjcf+sp7bFF>%$zYchfwb%%BS%=!c~JSQ@O<15v(wz}agz!n}qJ1!+Gc zJFh!GKv#93m2Q-#JYQqZt4vzcH#A;+uPnp?x_LnUlk+wbCs}Svaw+DcH{QaFXU|lX z+hoUq9J6iLuBKc0g^DRxoy9YoW?Bps)2EJA$C_Wjp+5SwTo#ZADQBTzv_$f8|K0;c zP9QKM=d+7h^r@U8HezG?+T^Kc7JXk$iKe77t?UP)0W!Epbgmd50e&@mYrgkh~T-wF@Z}t09I9u2!(0<1Y z7xF@AEqzq+eU~}rLLgjjM_g`YBhnldtY_>`WzYnW4FuE?w4H3X70bBJxZt}Z;K@NP zbOF9I4EmHCW_|$Ipr^03McCISmSK~$esJPwC$hol;_52AEDj22UtGuyBFqJx%jb(! zXu(#zI-G3q=HF8m4lX`}%UyQ8!OOkpQlhTUU`Nq4jn6#c2nA28+<>k=z4GcGSL z@YbUT`0>LH-nxH*2bUuT-8I<`X4K^dmS7^`REO8V2c7y@fT0V+y;s$j->zLu(dys1 z#7j*$3#;$o%r0Hpjq2htDkUtoJNB3-|<@07vq!mU(XfI+?RRR;eOeA@am zM!ndXSA(?VL#O>qkX^LL+V54kZHMFSqV;fm4WWG30NtOF0awl@9W?o@giF(=j8v~z=3+d_Ra-ciLc?rY^G-N+-*ik!k{@Nq!jVy!yn}V3j<~A#Hg9YF$P^2Knpe=4C?3U z7P@EkeRbIpq^!i#)w4>b6rsBLi;H_mEafKTnFKR-`#k_4?p~DUkq?&dx^U}jz64ZQ zKz#v5st(}ly+!%pz;E$8+;bH~3ZC-aUOlf}Pt|AA%im21tekpxb9;NWNe_g}jzG^z znES%d@{{Yk+dfpsyOsYMT=W3#vt1W3Gvj<)j|nk}EEndM1;ZW)d#0?cZ{VZclJT-l*3rx&~bc+lAAVp z37tEO-Be=vYV2;^d!DgYr=Gd*BrUgRW_B})2ot^WMRj(}kYhgWY!XSA8Tp(BAaX+7 zN4)VUVcuVXQ$h%XYnD#A%~US8i&Jpp=$XCXI7MK2B#n-H^CHP73@9Ob7B_LMry9d zTG%~%b&0koyWji5lvQW~*1wG7`0#56uXqrlzdv|uj{dk;!9zeXvCH)<<5r_{2c&N| zPS5S`06;tD-1Cny=luFnA8^cg-6sf>9@O-T<=`AIO1=7i)E>rf43Bl;w_(OQBg?Y|wUkj%HE`wn zIT0}Aek;B{#wfY=Q?4}jQxJn>ag#bul)i9jt2l){Yc83 z%K>3#8rhgcYI#-oFMO1>nY#eaz?}eS*UMjtIk$r!3+AkDok2@71L+{k;G62ZH z5rIdfIOFpEn_zqnP5=*7PnTNe<`^uIo{Hvn-ZhLbx%WVML9zqpp7Fpvx9=MBM2Vjd zHuAS)Yn7?mB}GwZTwL78bT|Mk?=Jl{*-dHsOYO1$X*Lbx=QHuyrPbp!7e^1vC5{4k#v_l{a0EUo(JP?9Qr}|zaWO`O7 z6==T(mk!qefc@bh51R2#xn4ko!KojK*ch|kf{rAl!)+)$i77AoX^Sgoa(4irJvis^ zt(Y?{lgn;R=j_3`go6#flp+R<&|Py(5lDlabQT6o`#pZ~%U|Qm&p$OGFN_6UCcW(B zW&5ya&Y9?y%_=&GbPOAzs2|jf$O|8>USGd?69SR#grnxW@4ovE;xy-@JH0haF*)1q z4tVh39@6e5@Wwk(hDz>x?3ggsyF`xuUZvwf+k{TSoPc>sm?AJMsg%;>Zc+Q%&suwQ zt)Jy~Y?YS2y&R|-V=wJeOd|dB+Nz}I+svq%5pm8}0b|vnd(gIaZ~6g%d^Sd2v}9hS zI|jmLAPhmyMG1BnMFYkW-Mis^#$fJKX!p`_*@q@$_a2C4zvnow<>jaOn<|84?h|m}5dr zz!VvYbr9tPl|ngh8_YSprlaK5=3Fz| zV+^)s)~Md+)%Q{o_I;R&&)sQIJ3mIF7QR>t9~&bh^zGrKzg(4INt7R-4)#pAl>b&wWo4gwQ{I5%EmB+A>P zlK@tv8Pnl_U;O&7@Wm$|$RY5$z$G6#!ldg#EIu-$T@Jp=Pc4(v!BS7#S?kMnHUbLx z=de*{6juGSU%rnx?+}w7oe9Wo+{&bjZhW^tVDs{c1D{$aTo{lFtz@9;3J$M>k11h} zz?2ws|V)-7edU0%S%z4S6bw?p?WX|3yV`;@x zJvZj;LA5S6=QUq+&)@+- z0y80T1aXk*Yl=W51PVwYV!OG-{Wl)s>e&l0fG{i>u?L|_a-)Dk#k5?_crexyrPO=h zF~6oBYbMbUgB%b`gM+d|Z_{F+%nWj; zKn# z=9M-+DhA$9r}_>=zdgqUWXp@qIAp*cuo+I@UNOIXBC{qvnzWkn_;w-LK^SK{Ya``_ zLe)K+aKbush8uSa=4|5#cLJP&JF!v4i!AuwZa-Ik$N8OrYrY5JH3ltBTNt8%m)z49 zb+by0NGT#l`M1B?;Wxke*8nmTHHM4~%BVUWjG_7B`c8=z-*s9A8>_z3t4yupI$yhk z5>{Fuig^RxfB$c=zuqIo8F5YsJm&>M0cX|?EIH#TgU)Wh!{PaNmGF~tY5g${bHekh z10Fx$;oE1|cz%7r{xD}uSOb+F$hhfyYIU{+WC*G=*L<|^!{Xl@PDjEDdR&Dyo+Rbs zbJm?|d}fpdLic;FJIyz_?<<%}`L#XV0w9+8mwu9}^pNeey_yV;d6#gi!fS4tBVO(f zc=G%j-#mGVr!RN7-cJJJwEp7s;z_pNC~7jw9ox_R0LJL;nv<$!0JeVLjH7DY-HbCf z6T7*%KbSi|gKin$nl9)_ZM~|_xdm!692Fx{PO+3!RH_U zH>9MO#gZFbIep)0-1OLkc?<4Un7xlWtl-}R_mz4}`4;T=e*IetuErW)ETe8a^q@JXA8Z%9`PS^{RR#;W}$U9L@ zC@HYR3$@y}^ps(`?;aP9zF@~419D2;6my#sw&Rd5Y#8#wqqynC6H{;0Lmqv182$1if`Sj_Rs9j56~vr;Ly>bu|7v(zUp4pTH`d(_AsyP zLv|`5L{KDzK!}k*fiQ#(-udaz@Xeq8C?FlEFaS;W23=UIL%u2O-`7rDzE=~5wmwso zAKv-t&%jKG(}aWsPP33L-Xr0nfR4VXOf6rWyW8(EANF|u_%U$t5c{bxCbO<+)E3l$ za;;PDSzD+zh=Pn-&FH2T6{2b{oeS#gDY3Ke=;$^L^jjV1TKs0gHo5k&{CH3-AmW+Z z((XAm?=?DSr=y0&D`1|Qa1Hicr{@@T`(9e)?gU$Fa!bYFkd51dmN^z z>fdd-#@oIKR|nM)^PQE`SVqD%x(CXxu(=p zclj|My!WqjzR1ASgI*1maOHN-8{vb@Ougw~wTXp%{k4qQik#C=r8@KT0{TYH9fQ-E zL`fHbvl=PFOLsa}pq4Ak`k^}j%RqulFZGPIWyF>*OQ&JZ6$saAkt#jcF?zb`HUD+G zlo-3ijF(@0f~)VI8f9Gy%Q75>z=-?VmB(F%fFk_Zk(ml*9nNq!Tn(!`!=TTvgVxb< zi%xJG9djGL3C!!P<&LczRygHBnUGRKN;A?Nk>ZSbo-iGDc<0^s@XKGl4`v|F$v{eb zgLDE1Hh=?Xl;=%n>W94=TEYi2%)ABpS<#+S- z_HKWxH*+0E(eav&Ii;rjZGJU>PS*@};GNYSiz8^8_zk%FZU0n#udk-y+zvjy_4mF9 zsA9(9yDxHo007UNC5p$`z~zh$u``YEJhbt9asu)gNP=XU1@=vEhW zf_uF>=i2vQ0i?loR;at`;w*O*rYL@#1lZsT6756W3c=nBb zi?l!u!z*A^nB5|t9mu28a9u#t!PbE3VqwjJtoyz9T=QFjuLE^zzte;Zn77Y0p9-!u zNc-==K>5VyCd`%#m#tc)t0t)yMEeZ8dhdI1)5|BAch^QXXyMlwI~X})6E0*ksO$sg zpR8kUm~-o&+npbvTjuP7Eok1xTH}~6pQ-(vfD1G1x*V|6(IqevQp^lGM)9Z2q^AjK zny|Y*;5UEsx7chhkn&;w%N8%p8c-&zmBNb?RhkXh@ZUa+!4F|hmQvxd2%Gw7S}f=PQT2bgc5WX#rq7(0+{ zm@AS4uNJ%=sG6x+D({zk^uu6e=32hznRE;4r0Kiw)w*X**MskxP->a;3K*v)IGgay z_10(D%}nVvyWQ8HX9nxm78+3Yewycegs9{vC5SpBsTwNhGu7oN47m;WnX`^AW721K zcS8qVh0CAqw0%u2aT8NMnK|<^48U}z(JV9)5cB|^x#VtU3_}9*h;d}>t{Fdn?>C4% z@=(R8?e2Vv0>JL?P-#-!B6ujb41V#QIV>%y&?s91%N znORhJ%L)o;bmSTV4z!T-)2eq+;we~4F;tC_`-R5SaAgPW`t?HHP#Cl3i<)>*vgrnPEEy2`pe5 zBM=6RagRA%tbfo(lMI;McVFV(yT5XvoOO$K)`qi!@aH>cAy~jV*E<81ZqlB6=H;zD zU<*cNhhVdCxOk6N<8zf>2i&zkwM?)&PR+kx)CcljTK(PX*W&B%Y}O!4-Eng1XYeHj zaRqxW-%Dxb{qGN+4v)VAr@3m^HE?DIMkGweoK@ImaJEfU*?P!q9@o=5$;V$9^s0MZ zI_BFj=T)C_=e5J`fykm8(p$e{lpH1|3>b__Pe>TjfRqN2{=IM=pAi6zR%gmk^1L|kL{3R|g9^r79aM)d8j-rB5)r>3_#+(N?)doQM%!z>#(zFM* z7bq8K)@m8cM5e&I@4mq0JMR@ns)G*CVxBnJl1g>Ac z#Gk(WLQLE;Lj>h2>Gc+6WQ`C32K?;jzrf{#2jEDUrXBXX9b%lt;za!vi~c<2!OgH~ zBLFZ3Id3HEcSp>aF)SL+?}*g!{>j&vUp&V6@NHwfXziB$DRwQBZkcgP`KA@eWP>s! zDohXza+_RC80d{Cy7@)VXz^^X z??yZ6h5`EpK$-FR?{PO?VJNTPO)sBfe(`uYL#e=;?fJ;Eaf(yE(MC-rV=Bzq3D@Pg z?K9(3!{>JA2k45(E}8PNu)O~IbRFpwwL$u#-oS0y#Em6 z<^nMmtK%_(nB*GmUP-z?8%Eam|K0_9^oL(qfJ143YgI056(krn<48N+<> zX1);v>chn%N@00vs`RM7S z7wy5wH%zm2698CjCNXtH?!AWbo)J6d>fiIvQ={f^jM(BirVZ5bTClEl(ceEf1Hknk zKg!vy*B&b741$;d0t05uw&0nCn-i8?p)XfV8QHIxGy36{3u*Y=?)(6a^DyVSb!z{( zj!Gg%uagcyWH~@65+g8UV#dItyT*`^Qoz6okphMxAR=NI0|)_gm=UG`5aHtD5#Igj z8wfNY456qzn1KxPvamPH4JUI#oUSwAGE{BB9PJ*(m=chpEeIxNVeAY5DdShZ1(66b zia?I++Z*!4S42UGgE)gwuI4yl?m(M zL}u6vow6}y7_;u`oZIub*ZPxZ%8p4JSep*ISQ)fTx?;vRopR^GONQJC1zLjedb*v> zHQ$q)ubyN7_^Tu1tJeJoBFy_4-~hRH4aTI^I;U(UylLFt;G+)*=XQ4jpkJ5H`4m4V zyzYDAWz4zwHl3!1Nt2vy5ki2R2A56q0)sgrXA^{Wxq-l`LXp4mhSr5^x zsq`*8C=+A%FJ&goTo(RP1Ux9STwhhDjAb#Atqxcg^JG3?X>WMO0b|WvJ3eJFy87}1 zyz$%rsR7;Mo6fkh?tqI=&2!I$%kN&tY)sv$CZ$L<2x~?bI%gmD{#ySurVIFkhhy%= z0{{RZ07*naRP6tzQ}&x@mhYR6`sgWlt+dj!V7nqQ-r_5PY z7P?(q&acjg?n42bOZ>dRA~39=LRNNW(c_u`n0BCxhox8d>fM3m^|znl;d}oIVRKnA zBtbK$lkQn}RJ!V(PTIwbeAw%tbJ(X>bk1wm8sERw1^~p}OB|m3sbR`!!p;YS;{kfBd}6gz zSD~XiXf@S~$C>dfhR^Np1VA6tIsaKY<~H18%04VFEW%#W!Z#vx5XfX33^2*RkP=ev zJi?^&Vi+X^CL|(+B)53-Ou#^(NCG}F=X!svw0?d}9X-))`qibVE4aRy@UKj*?L+!j!X2^!VrM*lT!R32}F+2O{8bsHuH|pO@xMA?=Jj@vY;_eE&ufOOs z?j#CkDKdx?kPjJ>ZN>Spe=djq+u{Fdma{zKjF=+gJYmjfd(2bwZ;o>2$E@!} z{O|wU|0)(5(O)W%P3n^Bow;1fsp=4AY+6D3r!nmOceeDH=L0t2d|1EUp-81ZjG0O} zrGyus{$myfWl(ugQNPl$`ZE_?xPFiAJuA%OfFyZd&Rb47o~BpQ(Q*Rpn5+BUhm(uP z%lFH6ac;`z-uLm{bK8#2r5vchlu?6o30LtgU$qeUp_wxPJpcF~fqc7o#gtn=3)K-~ z7Rovsu~`Ok`RuR7cwHU0opFpKzWc&i-G4U>Iwxcxp<$1vx6?5fBDBt&;TV)>UH~&$ z=YpG#hp0M4fZ%q%5y8YtIg1nJV%J8Bs8CZgxi}X&q*Gr|*4-7xoSOHw!!r?7x61iD zqUx1vszM(8H19y;eK2IEu+F5VT>GcrV)xx2arySoM4e+h2EERhT>Y=;o~y79YGvBX zy9?DcPb#=)|D2gKJaaBg*>uwF5vUrjbk?q)bax!0%71RSoSwJdXm!+Z%-t?&uR_@ z)uz)JczQm;!2j`o{$G|uod(JqSq*}OdOZ4o?}W)(03fr4CQbkka#_JNVHhJ424m2P zi=|0n(!uKE#i##_i#Oi^(Fp1MC?M;y!CGGqv?aH0=b(Gv+dbF6yTNbLkZR`W!v@;5 z`oS|!%ITD_`(0J*rUTCTZml*_3CVlPoVEP*Ou=-@+E2jccP?Q&gF|~qyECz4n)gFE zjx%0<{(BR)HB*L@rrIBXF#u_IkdkGhk#uH||0MuwwXrsC7fiVm2Fj>u#~Il`KCinI zDvmW~44@nKzB)E^MBjICz*UZvy?1ydQQ)WgLlhybO5cbR$1%%;$ zcRKls33K)P@_GH8AIi;F&v5;xPddz*T(~f25Mcx(DL`kTRMdo-z&P|ZD;&6S>wI`0 z$NXb}ab9FjH=rm52Dsz!=#cl@l=UR75~9RGD=B zRh!vx!m|(li)@~8%(8%sW17tFyIjS$BR~CSjFy=jv*h|bX!rYaLDDVUsgL6K7Zl;X z-z*^NLYHNN&nf!oY!;EJi{GI+;F=rEs4RZzqGyY8iKj{o~k!$ zuy@uMmajHkPut7ysI59OAW6P?@tyK}3Hx%HdaA02AC?Ke{Oor~`oD{PViA19Xo$-^iqo2|hURTw~7K zS30kEo2Rw-}Z$$Hoc6l=Q}lg{PH zp&ZhZ%y=A-xvT@{u-TE78z@83FsUWRY< zu@XMTU%Fc8QRRCEoFIci?^H~QL7WQM#fS|bs^SIrzF#=>#eMeC-y`j>iyDCQAoL4i zQ1t+s1-DwQK@0;$9i2Un9sl`ic;y=Kk{psa_bvNowE)iWzdvCn$_SgZy!gwlQCsr)FVyj!w#dG6hhvsgkgTqXOH8Iryu?o*&W6X z#2AH%Hq-P1atf}_ngVN}hoyDL4Qi2vHASOduyA)X3!Lz1n02E&E(?i{5o=g}SbX1u za}h=zru_p0v*zRZhyN8k&o?kU%UHx;eFl!HH5NB%%=1lY)gBANe(7dJk8$ zUp~W&&wnqkb#%=oegPi^sU@RUkgK0pqq_Z_Q7uT-Als@@T4B&I*@j8C3yCn0*7#h6 zQB!^}3dkl0%C6pzt3}S^u0H!c<`++mHFcSDhw6s7H=T2mj#e>f17p)U^ReU>VR5JG zoO}Lx-Pr-!z~Pw0T4Bn^n6rX|g2qDPW>%}Rw zF;@#c^T`WE$DDJzlxGU8GZ>P~2pFj_=sbuLi)qvb5pYbpEbzGY@KgtKfX?o_FZBh~ zAnm{m9d$vaHh=@;o74nLowI_Wf}bwa@2$DC0b+*8}88($zIPE)BTPDrsp+a}N}z>WTmA8`IL$NB%>?=$DJ zf6#?fwrfssX2=;-0w4!LC2%67{Y#7&4>4OYa)k#j>DibqcCgPs{s+)7;^NJBtpU9i zNwI_0pPijDXZvY(8PxI-N;&g~4g67N2xXKPFj-f-^~3glN|K&C*SP`_1y@bSp^Mzi zl3OL^SS$k1$0xus_Wbf0G3D^|8$AE;?`ped`J?es`D0+&#KLSB!6paFfNLJ0Y$I4< z%KcGs)41!sc{iA|x;w$3&CxRK{Z+f>)<^M|%-Q)=H(`(X9%as;W^mkwIUn=U@o{5# zVUnnW#xZB0&zwtr_;A@)n{R{@B9}Lb=-^6u;gIHQcXUXucqO)AtIx{HgBj01{5wo9 zpO*3{Q-y+BqfW5jdyKPXmQG#3UYFZZOW>H#>%TL)`LO)=n6h7h^vv2HA*$&zvegF~ z=6qhZH(x!&^FRD&0CjuTJ{IADfNvtZl^m+yOL*zucAVV} zcXojOvvkftJ?K%Muj-slt)bt`&l_-Wg+RBheF8u~0o)Y!eri8}<^xB=t(vGhYvM-c z46FYt><5igJ21GMH?84$#wHzHvHF9w25C8K`q>};Kg`!Jn*0~=>zml=_d6i%K(U;1 z=XB4O4(fEWU%*hovHp(z?$jN9oivJ&;9|N+P5JzLwKWK8u=m2}j4ock#M9sXN9$v! z>YPEq7$?Lu<%7IZt%F7;160%*Iu1*6dNeOtgjVNV{C}CuS>4$I8o-TpRxxBBMtROY zj1ulbV*}=%DYxMpv351%tEk>d_$Dy-e$Un4zm3kB!K=aznNgdcv%v;>df{vWM;U1G zu*a6-Qixghxvp=P{H5uDr~mCgAx-MUP+)t^Ych^ZD!j>;U~rI%gE$ zm@}4GumI^Eb8fzSew}k%)XKPvY)4yM+J4$tAfIMogp&*K-&U#fBUB|DO>{?jkqXA_FTPGy?%({7> z8y)l=00{5m?j;`o!@oz|y~NEr=h`O#f|-GSJyeK^Whex zPXX^A#+@CY1w8V8=|N<{oKZioK)ea}z`hj%eaz*i%{mF-SQuz>v=UBL4XwGF zSrro}&y?4hvu3{yH}zp*9W89x6RZ+YNz8U+svP(ldtj^5VSC`8MOsJ0EVrx|K5Lb7u!=08Jh0q4ji< zbw&%qU1;nv=e4%%659@QUihbgFtCzC+@>=eJxc>9OgUFjpE;Leom@Z2(@rXk5zZGz zEqdt`6XJZpHcd^!`axw}$$c<`Cjn`m@Z|UZ0sE(4pH?ZW%-VrrhiO-*zNt>Q(hVz> z>x3;HDkfZmcn*7=GV4O4Pv`t#u;!*`-{9##{lCI~E1ff37_0sz&zQ5-M$EcrQQst# zO*^@sav!sHt8&sse-s#d)p2zysQ>WpZUA&sr>E$gkLjAx`X0=CO!?#ldKvB%;6{J( z0W3R1!kSy?n4MoS<<{@j#|{3nm|WSbGS$o(kZs^Vz8i7cVT;KnkQ;Wf)zAsS{G8*A zXCM4$Tz~WVYF%{er^l>2;ONyH)k2)tX{(O97k2Tz4%Me$Gi?<@wQ#u0ZuiaSc>4SQ zWV4Uk=$rxIf@aKz9l)vd3+|j&XTlHFaH~hfvGEp~H*N#6$Hwn@-Q56aYwH?qjY;Rh z>zQ*G`lx9_2k!cvh1%q#1e%N<^-lq5bbPFY-Pfu9-fN!m?=X{ zqGSN4%oJlRV4e0m*=e|__&U9ck(qHu!t+o59?w7hr}EovoH6U>yySd3+D)hA_5HrO zqduBcXBM?}$6aR1-Z3Y<{Oq6Q@FOowyb!IzOMi=mxW5J`0cYl9I%m7i3L1vObpD>t z&9SAzo5okq-Ddor*PVSQA%HSwfqD$1_^Uc+=NpJO;R^J97!8wNh;DA$s3&RLaE~ds z;hv9`u=_gK-&;RR<2Z9Zxqh1B+2<330}1#bKre!oI}8aaCWMgvA#Xf9Tw{Cj00#~z z_TIU?_B{{Qt{xI_{q-l9Up~bffAv3O*j}#I(J|L9Y;ooL9g3XGn}1JjIA>dhi0*tW zyK?+z{>8a;*oj^G%V&M^BoDHWuD_v#bhv^Z3jm#Aak+vmG28ZSJ8L6X+Ct}?{hP;G zXrA}nP2(8N^Ygho!JvC~%~coxGcBra!3)5K{o2cYb5IzRp==jH6%BfSw z?=a_FVaA--gj=t8M`TLZ4n4UB0u`{z11zNo&J3EFMcuK#!dNkBR}YKo%6v+{o8*9{ z$N%{6aCr9Z33Yc{=QALHvS7XoCd^or<6pQtJpBfb|KZ;iaJJ&{@owz=4H9^NCCoV{ z(LL)~8~L70J=a;ZK3TLeH???M#(Wc~o;r@vJU^d1KR`S1JW1z_j{M{!KGptdgw}&k z>#uc^Qv>J2$4Np-I&TPKLg9pnFR@5{riD9-iY z>T}NQ8v_UkxZ<$5BrFOpSI}T`gF=kBqmS7&8ug+?eu+smQF9-In#DZE?TT59dR-CG zXc7@)Bq)qGBBFo@GB|(^v(KC}=XBTakM8QO?yla>GUovGK8_z>cWwPu*IVEDy1JTb zsxDO(ByFsb_OpY{oJNe&m~^yE1|6H%p=ak7?6WRvDS}e;wtRrDEzO{rwBUC2_n4Vf z6bhvEy}mVrlvN|lV?DcovG)kK-kI8qGaALosN+m{ky(^iToj+61te;lgxHct@V zj;}N3tV_j_0bB-00WKMaq!B_wpxbYXtYgkjPub5tK9}oUa_H(Olcb3m2GBHX)dYd= zIqMG)Gtj6CHIs&t?nT1&*)GTR8Q9%d#^jE_Dt{?Ua&6iq?Nok$4N6*g9 z`VugSNT8aE-kqD#zW#Nn{arq{wGwzcmk|v#*$YimP0v{~meINPP67AengTF(m*guZ zt{XGoo-?mUEpPBpe1bLyy9en)U{c<(a_F`UUK1oC0963Qyj@GryVZ}p5kmUGJ`F{U zIg9KO`SRfKl!ZFmI+U2_%?E4Dlcok4n|mx6VGhHqqN)ll*@rTyj)r(#KXraY!0@Ow z4gI@5LfgClM5=vv2pdZP`dfh=@2y5(>qlU(!e@J1mqYJMw*DP#)rQ9PKMQYw0+j8< zZrrz7k2_w9AR=8qW(g{9@KO9#93JH2)iq8}(91LQpK$q%#vH}IL3WPx-Noge-iWp$0HIb;Ij6*VF3ec(aM4506mEl7U0Q=jazy^Rf7PBQvZI&%q~ z6>~O!L9t(2lv-~J0x-i?p~stFgG2}_H)?r!Et>=WzgnY8v`? zZ^Pd8uOs6DBj#*+&gNIfjYoslvMPrR8fWGeasPIb zYS?nc<&_demxu@LCSj3jZ5|=9>nvgJdub^4^THW7$_(t?-PVH8i29*7dBju0_sr*8M0;qahM>p1#>a7UCYpbGPzjPew!?`Q@BLV=i~FV)j1MNCx@FR#J?^|Dhm>ko8(ih<5gk*H}v z)uplU|*Eo}OKh%u=AXroRjgK_*b$|9i zknK*#+zdVJk)Lst+qm>A*DAf(C^|t0&2KKxkl1D90^pQE1@Ujbc~;;f-SA)6tT;U7 zXffu{mkSM``qTNSF=x0W?2=VO0YWH138=9fo}NuJ{-FX;pi=$1*|+>ivKQrL6-bk~ zVHe&WA-Y>&{d7+UIyW~XURi_65r?8;=)tgJJo^Wznn7xBEBbeT3^mnjjT3N}nx#|- zMS^Ca4J450#)oF9?pjj{qA-t20fh#tD4J>2j3Zfr4<`RzbkDqXUdGjmQ-=aO;WLwu4l{{T!Fl9 zO5&l53S>I#c-s~D==M37k2&ixW}WQC2@3&r~&>0Gf?uNbpa&r8f%lumQ#l&g;*AD*+lA9S4(0-~{s zRX|a6a#0jes31_F5efwgR8T02qJIr4)r&+d0h*{ln)>@;*??*ksrKDSweJB@6eMbg zAW_qRL~SGDRdparkqMh>NcVIi)7y@Lu6AU4JD{m*4$owQWemoHz;qhmmeAR@l%@7v z>GZudIC7@Up~I!- zng)d^x>P8jDbVNuh?+q~Sp^1+*mO{Dgoky1P))-?=Vut`Yy+?b070U*0g0L+h*eZ0 zUQq?5yb?;hETCOHGJz0MzXoQV)Lo}-l~D$QAHv5^x&=VQb1 zAjj9=GvGWlAWViFq_f3t-HI_AtqJQXGje7mY173rjD2*n<#lH{?CE~?p0Zu%`hzQ% z9VY}_4BFVLlxliAp$~4&C{HDED1<yYAf^E6R6pXe7)YW510-he{vbF+u=P*0~EnkS>~mMKiLq#ctiX zS)%(JfsBR%)-~I7v4n@c_{+1$oLP*U#hf)R=FEG@7HIp*Udoq4q&>~5aDTaQsZuKo^)Y9&g<~d-O}wj$3PKNlTb4m-77X;Heq26 zwmQSwzggGy|EM+jnl=qP&O}m#+{&Ylvi(_sx{enUk%DWKQmCqmR4Rpmfq}ev(EQkN z>S8N$3E?G!NY}Rlht5k8?Df0$ZzdKg>w}YjBaYfG$9Z{98Rqi52C=Ry90?HPxaH~c z9yI{&IQ2Gq z0Fpf@*HTCj?@xreyUTIEc*YGNkPt|&<4oP^0Be%d%i$luI+ODfP965+-u>awO{v)Q z1T>VX10bm$WCqg4{>>_=v41nA`ZokM{$&({pfw|;p@%t)$=4hrVaJ&*lK_6>I(m8G zSc15Y7Zag8XlisyI-N!`nFOU2)z#Hd)!cUwbBzJV7zsDwdUcZ5j2mSJjyl7`^bEts zoISZfAU!XS(}jcCHrSmHVBO&hU1}Vu0HDO2mv7!8c}qQe;^4$22d7HfX2&^2GQH<*9rfC#P zHQqyGp0ox^RqNY!hP3~wP}3>UWG~9nNt8o{qkAmF2o1;^icjX$c}Z-NI9S%^IlH8D zvUGF1r}XF#KS`**WUegT52Si^TQN^r)1a!BePMhF#oT$2`$eOZwZ2+|0$c-}2J#wb z45ECZa)QcpkJ~V%MQv@d5a>a(m@^A$#N+Y2c+L!L3^>P#+lth#1A+{qIg!@^dpCIL zt`-VG9XF>t=4>2?$a98CW_I0S51-5N8mzph?9?q8gE?t1&lw!)3S-WON6p?qWDR7V zA}q-~Wv6aRW;LcW1~M*~7;hi4;z2b-SD+b70YNB06n*&~0SNP`sRpQN#FZFGq8w=w z1EpRDCYjDce_NXxupp zcK=YLd_%&D(c0|?K|{ihD<@ft#&N)fa^-nV1%51HFWvoMu~_gWXf|VJG8t%^hMJlh z^K(Xdh1V2jN_N+V&X9u)(_F{8W~cP#$j|6krc18L4wyco<;yni>dI4YF21i9Uf4C1$KN0HF0DMieNqI7lpkG-A*~ z88FQKNPqzQxn;Ee4|6{_rB2E!h?;?#PD3Nq_|grrb`>L#PRoI;=$-xk)IBzU5xL|;!$2mv8_e-onVUtGxyKp`{7v$f$l>-R0Y*V%RR zV=i#ua?%ej1A9pS@&mgqQt1TtYb_1}J!n-`p{gp%$_leE-|iW(yH=nB(Es80=1`F2 z^NBV z=j_%QD{Dj_D#RdUN~r#-IEa1LZX(|X+p{CQI(4cCJbd3-9GEdpC6C+=JgDUII zKaH(pW~9xpYld;32xsdswC5U05%PPLXX#EV&82j^3^TbD7M=vn!W%3Gok%1K(g3?> zz>%?22Oxek$*GIxMA00nIL^ay-VH0}td}QRodHJ1@b;Wtm&=o&&*f1Mo%fh6ohNI1 zj9DCWhEV4lERH!V)?}m?0LvK{SMb7^^}E(LhKHgl3RYRe%hDfS@cE1Bu0U(j^T72M{ErySw|Y{oddG@B8CE&v(zG@4@$QcC5AL zm}8DH_uikHnw!O~RE4hQe@YE3H!0ew%bYDY;eOD7bw;4&e|?|)K`>VaRe*^#Rh8J} z#=2W1n$WCe*)uEX@<&9yCmMLHk-$~PreWi72!+*?@NSOsFxH_zUzgQ1H|uNsxe2c5 z^72_iBBZdslP-v^yhc8AaHHQ&tr{Bo$C9$1A_V}0F=DWQXd*}UvXp$>kSl8&XHmVq zcSvCjWr3FAk-0KSeq!onXuf6eAc?`#hvCUc#Hc880hKXZhLU607)Yj%ueN6*kxM#r zwPrIsr^Q&%sEh7r&L89vM3lruE+1^6YLv5NjmM*8fBSGv42K9DNJSJl-`nV|ZmtD?jolERz-(>A~Z&*;%aZlrhTi((QIcezb>{ZM%O1tKgZHC6T z^@^^k&884}!2|nOsfAwF;y5^$PEost>I8P#c3GNcSH1JA+N9&-HUA7Arwe=jT;#1| zczAmHnenx%EFZ(G4K|IB*-x&DRZgiV!cR*R;o}NZI}@mX6BIg5Xd8KCa#?u%ju{9a zpz@rNj(kHZydpDY3CYJ#y_V6cL1a8B(`mKCF#h+PZkU;*g3+PmPB4e(TJsnUM)uNj z-L0|0DTJbB_{(KQQhcq2?35}OO3M0veIPxp&z-)6)i-~`TA@j5*Rv=d$|)Id zMA0dA1I_>q=j>w&vllSq&g|1>iIZSOnTCnK%__xx$JceO!Cf!+* z*Gp~m2XsfaU)J@-yogMV=h9&36}(n0xVoDR&6-lsszLV%-k{}r%-yn!Atpk^6y1l} zP^^Z5Jv8;ui2M1!mT9VOyfvPx>&c%*?ndSkWiU1die-c?u7nEwu2%jmVRqSLlV&g@BF5kBz)F*nl z&!6=~1taAlGWyGoaV)cc=+fC`^HCxI|0VeVAjTd%L*>)EI0yTE6&&92Yv~69EyL}U zW0^kT4pN%Sk91N4MG9wh%ES6iGsl5+aB+nsMuP-N!I?8)ar%VSKI zk3))Y?O&e?25u3>E4SO3^2X||*mJT4OV4Gt@&A^{t)4J%A?Qs^-215GaZKa+gcbRI z4&}piV$7TD3H!yaN6$33zg}O32w240)sM;#Cr^AS$erU`IGAZi!0Ww+{f)C;s_2T4r4&=W{nt0iICToz8-pqyx(QmW*u)Dc&dJ5rS55R{`dmg#U%k3V zQNz}ps-=upW_^&s{Jl+QyqH2%;0K=pU%O?}4K6b3~(plwuQPVt<{#TeVnr){Y8#H!^Z_ z^7DBAcHfFxOlHuRo;(n^D^Kb7hvE7Uq@@P+vwoLGBvxkxH-DaFFa6L-wW1L_b&{DD zriQ^n97TT{sYugD@qV`$g}DD&De9wbt^$YSlu+mIkLZO=&0j{}l+f&H@}bq2ROp+c z$`uxsuy8ADOR48tu#0VcE=gOlQO@s4k^Z>P|Ki(y8ngOT)P6;l)gmtNl)o#y3c8lJ zm{P8NC@|PjYPz3Ou{@YX^d?G9Ej^6c1B$4#KId^oGvlI?t{NhF-8_Z#QfvpIJX*lV zAdQ{d+2CKHQ<$H~2U9#G^_2P0GGE0xICs#vo@F-5N3+CDP8Eur>+_D-yRIXb!1S(v zMS_&6V*I|O!NH$LP9S#MhU%xD5F$%983qJR4g%C=EAY=fLa! z1GGoQkGh|ywXHW6F={p?g!(k=+~|s@9{m=#s4=QIgvF5Kjpq6cJjUI|a>H=*+K9n* z-WZcz$LS7fY_gQ)^M$33D3Bs}eizCuns#&(N~~QzI(r?>=tw+9ir_ZdGX7h!JU}#_ znm5VtjAMUlco5ycn^qt!=yjPu+AlAh={m7NWi3Z8tRS5;%Q6i2$$8tE4`MWy`tW$q zVPVn~vZ9~dg+5g%v}R14S^rd6I3xF^9~=mk8`VAzCjP5{^2gi87XJI{9gn+$!p$Vv z#*?yxMjyLu-bv%)OwO}R-JOI02jk<+=7H6B6@C*UhUlrx>d}r!yc(V)Ly5t|S02wr zsk|PDFp?-?Fi@QdzU>Z^#^(JS#iOJ%Dj}9-?jEZ>FDuu|44%yLE}fONP&1l4xWsyx zCD+C~S4}{&p~O0UZ`!tGk%#j19r5s&O(fY-*l+Q7YpmP5YqiJ%Mzc%e7G%~LFXXiI zDT!vBr4k57jV_#bf+a$!YpNG@Wr!CJTkiZENEA&LEY{w+=GVH>&oo%R(fbM1nRZrG z&v=&c0j2SWMmnPUgdWt->Qbwuk2nGE8y65`Vyx16@Lv}JKz4<7($+U2;cK?ex3g`AVIJSdD>(e@!kNwVpQ6q-@2|QSO?= z)YU5^70#WJorTTgQ1G|N9q>EFta_)AR=cgACSovNsH+Es09`w%SLB_-`RK0D2jMmL zNS;Qcmut$(ou~)HaAm6VK$h;Ev0K1G+B;mCW{ic(a%}77TLyP5YvzQ_KEqNFdb4~_ zO@bEHiF$UKKk|sVF9}jzm?u>=lGz?6roP6dgYm1=rlS$Y7zw|x|JR<- zy;4xw%#B?>9d51n;yl>ItGA+=LP?!DP-M)zx_b*x<@@!YiM!6i#=?28%Y;fMP*e-0LB$xD0$4Zg9>nH~f()eGy-#)|05(9T^L2668h!(ulO` zmyVdloT++&W{5FyPQxrZ!*#m^F)Gzf^394XI~=ld1h<5hu(*|_0dflN2VA__5jtFn zUgL!rF)LZ8^~G!nJ5ix}U9{S4k%L>L{-7ELAzkFPFb8#?^v`&CxMgWq?7xgS$y{rU zng^9Jw(ycisa-uj^}2W~5nRL&RVPW&hy&qx+Kl`%nUhI7U}#Et&NN|&tKG#0(`)$I zLFUF7>&)!d>oVz@CI(Vgz863t;ox0HN0m{USS7z)q$&`cJ&L24iqy7}10D_6vlWpH zsg%K-zsX@tE23pWUTM@+9Rs7r4?Sl@RFArxCOC$77a#i{Js7wX`c}JLW5nB(#cvi( zwJ*&VJ5{8YUBxWhFd#+8)n}eTMiHI0T<*KT4Y?nhs4JCAoeS!PFqGsJ=gZu25eeA@}5zsKwsWtL0RFSW#>5yrorxG1$W2s7L$2kf7<_CJ;; zwB+%y-iC4giRMMf^*X{$^fnorZCw-W>j-x~I~;Z!2dyuGCE9Go-zb;6=euQNG%*lQ zLH_k{JN=m0b?s_SIUO-qTijbV?6Pje1A91=*ts3!_9+(=Z#66BO z8=!HDc`cJWAIM{nkQ&d@O%X}nla+{r@<%cXA6+Dpw&I0eYn>4?a_MUU58m1kE;|#V zIj3YK-Q%o=**m8xDc=AclSgbP1lt_B{hYfWN^SU0#j9M)_MG_M?k86K)474@A*DkJX^F7 z{>-vw_k}Yng$8ZW<*4DioQbl>#V5*J1je*V`JdV9OZac6)rvV!7<1Ow%Vqz>@r7TW zBs~kAg+Z1JU-+6F%vI5PGCOdeEH<;$MY+U^O!rY%xE(gXbNq5{_{i?ZQeoCI9MNAR zguJ*al0hg*h}@T0Fukx>5zIKdf*m!`Y&ysyGcZ*kHG@VllF4E<=1fwpfB&bmkgetO zZdu5AQqc4!gS!vs)81Vn_$sRYE8SAH%}2|3~(*W|jp7uR;mF(z?0z zX;kXKS4R64M~aUJXjthxNG%!mXL$3p`KeXmpC8AaxpaDatcJ33sBAVNT!h_Q7}odP zJb2gpveJ8YPhAmu@dWDu8ety>3;MB|)|9+9NOyME+L0^7Ed+%WqD3+?7l+$6m&mKS z;pW|jU7WlXKBoEZgL|n(&Yv>tea~%~fTbbUy%QrMn~Q!P3gh%3qZsgz&I}I2Et4Ym zfyWnT8=br#QvNLtpS}*GCR0Z~yE8en3|-22o+-N11NRBr$I}{^vK5C%bIn!kG=2Xt30m^)Qk@ME}IvuZ_0ENMpy<)l4d%u?I@v9hnn(H= znBLqIazfPZ!ruhkvYmXaF&Mse350*?ajue4O<%FM``i)xdSam%SsAJ1pK=$2Zkruj zQ{zQwq}iaFw+|v_3H7f9&K9@+8y+jKe?WOTGn$|hT-yOxA+6)AnsAr*Fa8j-c;+m) zX@Vby&Dj={d({3391`c(XY&n$RQ1Ozwx7&*EjJjP4I{VLCEhXj5mCWcOtMM)g_?wG zH)u{qh%%@Yo2Ht$n6+Ij_KntFI@5^gQHt>Y%TS$b+H283nz&7;LaM?6Y zcl!2N2;rME?%Ou725X5&@bC;h-F148Zu+ZL{+{b#YL`4=pJmm>9Aob@Fda60w08wj z0vf*)Efzr;BDcJzt$p9?7oE#DriA<6rKx=DJZ*a-K|-RdVn}PomD^(oiuV^~bTbRi z8%;fSn<#s!d;yuv6za@=FT)NDv1wh`%JddQ#N07X7Utf&5{pdAn{!W~Ium-#_8AHq z$YuKuOsTizAD}JlicB*j&1rV}iM-!-34a-O>!le`fmQ3)hO?RA8}xWso`LOYN;y}Z zzUSBOo=0kUX`AnN&G7PUiQtH2w*;Zp&yzM!hSDZJ04>Y+T8}IrKfJwA{yaBU!Vn>txQN44L6q7h>4OAaaK8keM2QWv3EA?EX zk)%8hEzYBE_+qiBa?E9LXkXnZ*h(nRV`Uh*bsj6CCwkDlZvb5!+q#EN`?(vT z0CfXDPD#m=Pbzt}wPdnkxPOHxg<`&yM5-|b$>NGItSgxFQmAF{pzBG_kQVhV3?h7b z{ryA8>E89hC&(9ZJZA3Kt2*eT=APB9Yo4p8-=2~o!yP{K-%(As+iUONReWxS&mbXO z(SF#r7)eb=VKp*)q$UI{tcQ`TX<#~r>8qeLsXWwft&>-zf@8dCJ;Yu*BzNiRp$+)x zB_5;09;(BRCa*Oh1v@kPlWBgBdy;!QbLbl)v2-Z>=H85=#eeEjli24$bbzxc@NC;t z`6|1!2g@HPo0mlchF47gPNf`OE9NgnQ7|iq#)3ZUBxR{j@7j90Nt8gxo`_zyZe1#$ zxEp2W?Dn5q?Cz>OIDoKc%z~_jE*py?84Npy6YP;9RW5!L0%F)oGD`8qR4r0+*?fuq zZp*01Vj}3Dus#r{JpI#AGj2fXJeF(=l$4*rQ6g+SfvTLBPYv}>Tj6w8k3H|OPjb=G z(1u4x=}&TBzwVl>G;?izh|6Z=_dqq^p1j7lj(WOg_nEdQp6ye)>;mOEeTq9i{%W!w z{I|7Sg?!J&l+uJ+UU~{>P8ydXy>gDvalbtqa|n2>7u&VDh&s3`&5^sbQfimdY=E|g zaNSO)?xUtNm#7Ashf(U|V5DY;Sf?|*Wr--81M4{ErYrTaKQr+@-wJfb4c*ho3;(H$h+SwyP)UH5C$*3BN36dH843?elL&1_lOPl+UBq$I;Sf z=yLQsnSwja!AgP2U_bbevosW!UJxYZA~%U!o$a@@NNUbgdxCE;;IeC~j7&^0uMAXV z|FjiqwCjC4%J1gsx$eS22wvAD4Gj&s)^Fc@9-!YAaP{qKZf@osgN_18;%A%BP<^S# zF~hrZ9Pvy}u|#`&`#*_bf5N#VqoYAJHG*`C-tpD6A9{3=TZMnTn}6}l$m_fHBhyOq zSFh!tKgUbxV<;&p!H?~US7KO+g7$aK!LKe0+%u*`X(Jcv^`)06vY8z0qew1cq)V*Ea8nZiHYc|&e|MLAihleW~NiaS?KR2b|QL0uXm>2ZqgB2 zk2nrUFRH)8(TS=S6BDy{-ul9@D@XnU5h9MI+=Tw<>pmAal`r4Ev3c-ChRT3h#(^V= zN^5It)5j~N8h&H()A@sU>?ry4SAd?T90DO_1(!Yzxyz3nts=G0?!-v{aF6oJ-MyMa zAqz)Z@o#fXh{%3Zi*G`Sue|@foV&Y#Y2}UYx4mbIW!pg%7tfUrKW}I&w1`_XA9}~T zB=xmpCgx`4MRA+p`hTU4)nT{fxk|8YQU15@HF;cLlrkyQ zwiH1^Lc+qv#^&LArYq;J((XN`5s3Rwgfqtkm+N`@d47Rm?D6~unxA|H;i(rCA@Gs> zupsaiU>4#NI_b3I7Whyfi)Gt4$fVHGX>IlPaJAb#b~Cm6KfM4FHVVIY3Q8}-rH>no z9x)>w&;6JKY<-^C#-}xhV6WOTiEcP8&Sg8aXyu3PQrU za9+u#KccdfCT7DX5i?vr7d^$F68N+!3`>9BR$F$T`_^Qq?HK&GfC|eMf%iu&ISwP% zPWkD^qM>HEEV$=V2bEU1a0c&^bTH*BlgT>w$)>zb`L2j#L+ku!p~4Id zfdrPBDDXd8eIglx!lSEE;kOId>g{cJo=L7IVx5jPID9X~?m_VVP#oj=G)PYBEX%3? z@?!vBu=n4_xbP*8u#pe%@X+KHFe%OO0#C`lmX?B$?&7PjTR-)rDuc z*-kZN&O6!Y$pwOkhnpMU`jbLxjYZ?zf>%bETwGj=1_soR9zBXvVhFYd@%L|fdgSll zkXKJ%SJdom8`n_rnqw>-28w&f<3A>2X8h=xfkPk`YoR*hpY5Bp?7u0#KURT*sXD&t z_DIZQ=NVX*-7(Zrk&zE!Bgubo)_yd|5IRo&NbF+(urmDTPauz3cb$@GVjl#$U%q~A zOXV@sG&D2}U)v*7DtxiAwbdR&EynG!qoe#sH#e>o!xhJ|!Zk=9VKPm!R%cW%GGAyS z`)GG}_e)t>cQ^q(?1C%n7%Sia9uy-Ii=K6?LdN7r9NbI+R>nYt_eq%RN`87491_lOY%UM}j=qGzNQ@LejxZvk5hi?C9 z{T}7i6RmC^a%4Q&gM8O1Clg{s^on%YX|ga2qL|lCX$U`BRmKa|rmiyyAYKlE(=lSFiEYO` zS~?KhYbw%D9_zDkBP49=wcs6KYFhlnHNmY!*KAYn8$Tg!rP^uIkFm^ZB|DbynqLDi zBr@S{u3#~t#tcwu{KN#dyS}X>IQPRSO>0jiS4f^`!u}Zb&~w-qn?l#`i!v6TX%vd_2GxHJh0rUqfV;dY~{V?DFb)!*J(r z%D5}FTaBS3=Q=Flg{Ad)nL(6%6lvbquYKbR$sVIc>UHOHK0N+6UK1ixLBR&-G^B-U zYbl1_tTr|_Pgbq%?Ykt-XM%$8B0^IDn}sh!KM266Iw#FLOdBs#~I&H;qmW!VgLTU zz1j0@jY``8fKKzP%%G9m`(&fnJ(=)`ddchNut)3V%OJ76x(A-K?qr5Oy8;7QVnU9q z=!=QZCEIMvn?u*uEKBujaU~=qQh6;N7OABn!@PDX!E={`@RqWD_9{gz< zr^OJmrFcaeq{6XJRsnP@G~htsQEXBt!?JZJe^f)(p;{}`6(QmUezC&1EwE`!TMdw& zBSn+$m#IIcv)xh;j9X59 zpVbX;l5vR|T_WxOrSRXBTW|h@FLSU{HDubCz<4ot-V&zgP>*_gdiu`6p?kM>9)Oz1 z0=m?NwDDBXhYBIx$sb;QJzG`Q=&@k*DesS^?t^eB1s77yVk)!rYV0TwBI{HG*%Fk@ zIle9J|dADm-@I!hWd>&6@kf z!Ea9|mfNwo_)kgL-lVPwPwKSziqHhyIP2+rX>6o~umKEKV72YU(%tob4~e$^hrPYM zrir093n2VB-Lka`6ioV)IpB_}#KeE1Jc_V<^piMQ28}m$Teq^fs4;4PYW!3~q$Nwy z6m@{L?&s$2j+r7y?c7NqycA9kgE_X|3hp%>Yuqg21^hAzqYfR+5L*7x&)HGuygYC# z|5i`W`Fz$>_VsIh|I1aclM%(kK}UZg0RaK8)lb?3)s?jQr#xi_kg50)!pqnb{_NWmh+v}mhW5`bWkL7n{{Jp4Q#@TngbA8vI3Cm%jze+#a9mqq3VMlJEG2GZ8e zh=>>;>VBr^oV~vqQW8goRDcA+GrcuMc6O|=*X(U= zI}R2*>@7geVZ1-ryvCz&^xp5hzTS0xsSTaB^K5sz(t4B$ien-swF7%w9&oYOgxPqh zZmO6kC$#3k!C*?=Za%N_e=i(x=PQ1>k|=zCb6jcK^$-YN@xoUd1qPdg z7R`AhzP>EZ&&xwv?vCyd+iwaw-JXEJm0ZAv7)r*@%iYqW{1g2uA;`y>0Y`~B!G_B> zeatzz)zyDpoBbt!HJyQP5ozl?qk^0BevJ;L-|m8ZfcA`Zt_y} z%@_WBag|9d+K*^g)W_)~H@^=W1!XXpG%~|OL(#-RQZ74^yt^=)ap~vKd`;33iqkRI z>|=kK<@4|uVr0X^!!Q{Ph3H2io1?|cTmhF@hTfZn2?yC(f;Y!G_a7$=eQ==6y4SGH zS*lZs{JzCz4PZx$m1JwHi0hj1M45rte)D;S@1;wo&t83*AifN@X(vXe|JA0~-R1gV zYwPW<;|0RA<$(-_hUg{($TG{{Yv2R##{kM$$txBnwN%ZDYgTQ!@ANFu6C$lA z(mfB;6p|EK-RJ|4i_-QY1VzhWb;p9-TmElrR%!J$?2&HK*zeH z-)tk3li@%EnyRu|uAVTI1(1kA2Q6NRd8F}KrCUhco{YlY-`)8)fkXz_awvR{&FJzW zG%YvVM)&O?gIQ=_M@5fnh~WTI#kE(rj60AiLIi#;za;x9_zw#-r9wsVUhBR8&zhPg zRimo}?pX?}%n#Z|ek9Yij_5D|AH*{~`zJ&ot!Hw`uxncBoy;{@uU`%pBJ93sn zugldGX8cBjMX!!LIFg)XM3h-qi0o(PMS{a1SkmV_*-nCD*SkpCH9 zxoTDQdTAA+J&sQH;GhF<886`C0c@e71GfXl$`jbH z${w1iWbo|5Z1JfZwZ9O*nsFUk)NZ|ctuaB1TA&!)J&?wCcym0oe6bvhr#26&DuBoO zzK31#Q{G!mK;*z7EYzRKQ|? zP4e~CLjaF8LmVQQIzPK7;dZxIr)BPyCda&XGj#;>SL3z+QA)sJ1cic}*Q{-92>q=Y zQnV|ZkM`!8DP7kF+J1jx^J{f*fyk22{56e+$ZAsQ)_jFY5L+mlC@C7KY3ereqwIo& zu^~>J;n47v!E8e-?)xmbNxL6A;CC;JHM(Z%U3tJ*4oOXuv<{(P^E;mn0|AC(BNiCfAKbPMmhp2f1B2)vKX^M$d8SurtM^{eS>5R@SSp(Y zc*{*a!~5}fZq{ij1$c{mz3>ngUhi}xbj*~ zzgdeh>;)!)!onwur{%QuwRrD%B@+uo=6gjNI0_V{$?Up;8ICO!RhEP8V_#oF$31;} zu~87a1P+(-L~#7?-$iJt9j*2s-zk{!G#%K9Z+@{@%}BkCQRLuqA_-%8IXSG5^wT8b z3d~}U(cKZ*OFUVRu7B6{#l`5*q4M}%INh8F+ww;Uzsvs8NnKSwvW zt&JdJPG7A0#HMY!`>*-}f;0$OmwRG+K&Gs4m=*OsXhW~NT+4`(u>onY!?Wd>+85BH zo-bMjG9l)X5&GS-nv)z)P1aSGOh!YqVHf!54+_Vyow2d8Q|V$V7BNODJ?G%)Jv2Uc z^i*&Tp) z86Fr(1o2?P|I$5lHeZ(a$zrRS*!?#c!#MDlGUjN_h}=>1w@9cd9AUE6TU6>R!5}`Y zh0&;xlM@KFb zhu}Y-U$8EUVDfx!j*RkE|9JD@+_xvoRV0N?M2ui7BUnrMkrR=wtn33IjM$@4Co%7c zgnr3(W%U=358m5zm^P%v#=*e>lEjbiS}6yL+S)0Xk6JogK78>bVY)TOca@B3Z27X3 zGGgn2!Dq`aCnj{t)7wRyRQS`#TRsG46_YlIZFm8JR8Nl*C@5+& zm`A3^)Gt^#wS{UlxqV-$E8JF|^sK!`~A><4`YNSSK@NyG*VYH`<8 zsD#g1Zc$P9DN~;IRqj!K=1|JSP6l&gpJsV=Z$Z>W^=pEtE|(|Mc1NO=S*msUV@3+` zad8-EL(0K%!_HQcj-1v%80YPd9@1JxDTxA;r=;X5aT;ktctNPp&5XgT!Sj9Q zcNGBA6QcrwwzL!*fPEQGtQ@?Zza);vweoB-j)99#>%u6Z&z$hVg9ktWt7*<8Ts5JS zm6X`3*v$V-S5lH*y2L=P^7Zn!Cs;B-Yyz74)2B~|!K%~KqMN(v{{&<5iWgCFM}Mg{_Q@VPI=uv-$b$E16#6G~_`sTO(vqzvMUdQ3ii0 zMH2ASTd%2CwW={aP#;y}T|f5z1fF@D@R>myGs2G&k@9>}CPeOu$zA2TDLYEW;8R?! ztS*&|zr129U+w9@_G&qrfutAO;vHCW{Q#3f+}D1Bsbc-wW_J zk3R`IrBOeieQ))7FkIy0`A&$PQq`~=TZBHCRk|ln=b|hV?%9Z~Ei;(scQLDZ%3SH{ z@>v8;J-WZcDM*iya={ZNf{y*Ln6=Qq`ykvIl`A9C=>8y9Kc>Q$g)!d-n|k*p)G;!g z*@w>&4+yNWmlO~m>CnLnWT0}PRag|{Pd>!*K%NE#80cq9DL$U)Du z(Pfm(jNTOl%au)%)d-XC#3{BMrJ>*i(Y1=ZAU3B@%+g{Bz0EIp1UT zOs}Pg_~R>S!hCSDJRLNbh;PErQAm6@3sa!lftd7BjTQ$7$HheJ-Rkd*SY5>aa~T;^ z@Iag%c-iWTSoymD@H64q6Ho+o%Hl}`PdhZ?z$)Cg-@LpBczp=SLVi^hQPPW>o`4(l zmV*$kh1%9z4p3`3_fUHpkL1hO9F?_P*$m`J(e5`LQ zp7o=xtt}^TL{CVgOo09Y&H)oP+u>+!-G=9X@Bjv$OK?n?>3h_dD(Y@y-k}_;FOz@3 zQgoaY+kizOiK&mCg{9mK*ez7RIgRUD<+Zlbs-|$F77~-`J0U?8r14^VNSQc@i-Lj& zpd#P^P+0M9r<-dRb9tK1XXf;sf43$$Dbdd5`X+JHd; z6=ihuqy=a&=z<^T5lPLJlb~h?D&(;jaHl{Bf;<9Ar_h#_7zl-dE(=vWz88yOz=`?w zSvgUrRvTIaZN|6l97Pk<>A66_bsm;RhnUIQdO1LZffQ}>tLy8*fF4tx|D)rM{QDQl zsG4jHIDdOL8bN@cpG1wrtj!is_93|W_N}8cf~eBw?^7V;jg19^DrpH+jB@hws2bvj zauhzvag*qpDs){hbX}>v!?ro}Y8E1xv!6Zv)K2Nx^a1>OJ|J^od^a{W!2d*s0aXSu z;0kItQ$S>4@AG8C@_+pJGjs8|ynN`?3J0xR*%msr%j1-iudBDH|2EIH% zHi(pdq!hx1dd)2VZH&24zPWwSilwA;l`%mMFDxW z4pgDw@gsM<2TK@q<)xfUNHVnUdVxLS*>MI*{D`2lY2V7C+ND5MlQbFS2 zT(~foaRnxy-UAiWlsIznB;=`3aD$drJGMqs`~(JRu$W#b@-X4ODOMiF?qX0^o&+21 zQmE8Unsh54%vB9xS1qK5d{$Z&#-B@nai0fTvd9OrcL^#hDJ2Q2gnWdfRI|qA!gts@ z>&kz=l#zK7z#@-KN~a=5Pr%=Cr||xI`V<^H-lR5$5c`k%>{5*MFa{yW>E?0CGIudV zmzd-#1ZSs|#Cx=Pxqd27qC5_EhyLUtNet^`MsSyZkS1iHYm%2sL}T9uba=k1eUw)D>08mW*N zP%`N1#3%9L`qqMRog8#@@m$!++L_?GS~aGTkr5<$El8kOx}+y?1JyKWp-_mSqNvXc z31x5shaLJtU$z-&ykANlMSPYGI4S{o5T=rl`C&)uB_psc8zytQPXUYoPy>33%sM7@ zkb|RR50G!FY;;%)UWtJ*GQF1t!SV0kKbf8aS)XB$kAVxSE2IWabm^I*g#{xBE!ko` z_2D!%%V8P}6=?QjL8!*RX$fI^2Mu0CTL=U6Lj>Xft9N;6DflT=EjORf9gE*Xa$Xp% zzZYG`V_@A^4&~>fNC4p|(|ueQ_8#bfWNg}Hoqx5B?6Zf~h`7Ow5u!hQs4`q#T@4&^ zRM^JNom0Jm9C*Y(( z&>;-c1b*!Hpg&NsD!or3b+Vwck^odTRiC;JfPTAB5G&dKTHC;aX1c+hjmB#M>1Ksl z3UH*JND{URlMXZxG{$3Jv>uDJzuJ~NaS+4bx20d&wLa~Z`D zX$T_)+-@5=4+>1wN!lC$Rpe35^~^ey=5|2k8zF}bsSHy0m(QUz0KhC&DnPP3mKF~N z*`nEgXS%*X?H=aG0W}mmLh{;w!vMe z-h~m$E#M-{Oz*9)!mCLyVX%^tr75c%$RGo44%}7p6C1inu}v<7ahs{Z=|qT5BBV9mLM}8uv|?IwL^V>V(GA@7e=OVizN^ z{=vXbBL`_!UNj5032Hh5W&u<$0BM8Nf9#nSantFz9;7NB-rvpN%c`s6_@6hu#;21Q2ZLenD$7Z~+Gzttd<+oq7NEI>G=HG$(f|h;mit^3nplW+ zK$CobciuWOHD&ET{5bM|#!nJ-=GZ@i3fx2tA-l=<1oR52G+&CWQw3~EVYy9BR6xh( zG5cpbUfOoDIm+XG@{T1kP&tvwWTwtpr`93sTXqnxD27@0$F^z5R(l$~R(}b|l~ZAb z78Yc>0Ehw6dhsWvB^c;#P@c^zqfb*a1?=Zbc{$+nL`7-B&iR*YOL4Ne(q?A#P>O*4 z0;D4nGMr&hCh|R-vVv4MKm$NG3g9VL3%~{nEhz!TAk-EDAPjI3aD2|dI+4*Lo_B?$ z(OCZzdbM4V%LAYWGa-+Dt{K=vG`>?9X0i^`pUIEdy~ zZ{92wOWl68N{90Qbd7yScQhrWo`YwvY(p}vmY&`=d=DbDKqLFlxCx_j!GJ9QIq#D$ zQ{mVIjn*!dYQ!R2aQ{<+fN@m`#2YG)NfStb8nWP}04i7-V9t%35xA6s*x$c@ulWH| z$TL=w@t2?#0a}0nO)h|k5e*y#*f6a*6Cvi#zv_Oq43$ENR06n7!()K|urw0pLIDzG zBv^dYDFIMN-So6=4MGMKy`5cda0_oqhCi~-ZhZ^#~i8t^-rM9$C8GfYUHod;if zxd0GJ===Otu^LqJa(m!jI#sF1s$9+H2~4s8YWulbKe~xVgO06IgGSOGDpzdS0c4}{RRyy@s6px~f*K3t08g4!W~&mapD zAAr3BAig3GD_eu*9KwwXGydOd7Hg?x0dhCv7cw;L6dqJth5W>6T+XpZ5d zcYx(w0XZT*JC!xdtE;QR!2ShjFxd!`+J1dZsJ1r>4VhN=P5q zki0a9#Q3N08Qt_<`WU@H@H!xzs!@-YfZ7at4kZ7>!%UGXEIEM;0Fj%+>AIY^U zyd^Id9*Ex@bU>~qNR$Q@-e(qIeLMhjS_i-@PNk6BW{d^2W?B>}g0thfV2QvF15J^g z;9eh0olp}Z-6D?iFho}vAO8P(zh(#N(r|}~m^dL9YNS;8zkA1J0g0RfG6PgqRVytaN=SY|w??blLP(Xl`UBLlhIh%CJ$IS$OXfIDhBb>Ijs0HL%S zsx#P)TBsmV7W4-=^)aSk+lWDl7HGz%z+EAi@OD!sa&MD@SKCeTLLOjb{sMTCYzJK! z6=)(^iC1(2dBqqk9*B*w6bc`95)H=oL>^TGn+MnvKrMknzR}g`KLJpZ1%Ss&RL^0e#hcS~1yBj{T_6J$Pz0WA?=9BjnQRFkP0$(BdUsk5srjTF zZ-Xa{0;qwim3^7*e`O6x3Q?pSGLDX1z@^>L1M@6*xX55tTzpks?uP^1AgZ5d75L~_ z-^YMR5BdyPm17%nQJUe$mcDzgIS=Si3KXJcfX2m})(NCF$VUV9g1*mgHE3Z37^nF9 zH3>jKZX>V*(A1{Bf8m;QO$9vj72W^Y)jEVNpf0Q~q}US)1AQ%)V0I@NTcc-e*!M#$}Dnamqk%Ip> z()!`Omk>##j}BoshN%Z7dj*h}-Y#MB08H@P;txUrsjJ3S9=+1#F%I~ z6M(`Ca*d(xf*G&n=%8^#p!YCz7CSrqr!g_OU^Gq6_hunV3o`~kKrKw5iuHW}P&WG# z)JhQ`J8SD2x`V2P7!Qd1*bM7X^A+p>AZfnNAWGq@iyr?eK71KqVOd>QOOmsEL7xSJ z0K^XYEC+revc#a4D6kb!yde)qA5WUaE`mM@zF7F`H$Y1P$A_3X1i4Ui%-7=VNVzAA zDte#`u(v+}=(;eyc&(C^CQwtT4D&!wr~B~xyN2_U*Wc_qw;9&T z{dR3p>DE~E-zJ3x11P!{qVc~l0qePSMcnFHfEEO4OqaekY2RYEh7Hl?8=7&cn`yk}#ifCn_G z!F~b1T9a@Ed*jeb1_Oc<7n&-f|Dfw(pwZ0|nNF1@4(JZD&x`*F0c&HUEZ{T5-kY237>%+^%MjtR3d|11O%bp z|M}!f@p~9H1)-?lyFiC`@80LLytB6-EHQz;gw6{{0YPlf$nY?}=<^LnLSD!|PA|%9 zX`%V_=@V35Q$7Xzb$$$TbpcQifnEcMw(!M55dCVb+VK0mqFPXkf)CQvm~1?t;`;&e zp%)eSE;+Bc62nj$9ov7s^KmTVE295ziu0~}^m5+VzFAfQMHqM~%WKG$$ruOzFBuE< A%K!iX literal 0 HcmV?d00001 diff --git a/__tests__/html2/fluentTheme/decorator.modal.html.snap-3.png b/__tests__/html2/fluentTheme/decorator.modal.html.snap-3.png new file mode 100644 index 0000000000000000000000000000000000000000..bde7201298876fe3942e2ce8667ec288b1d196e0 GIT binary patch literal 17371 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 diff --git a/packages/api/src/decorator/private/ActivityDecorator.tsx b/packages/api/src/decorator/ActivityDecorator.tsx similarity index 79% rename from packages/api/src/decorator/private/ActivityDecorator.tsx rename to packages/api/src/decorator/ActivityDecorator.tsx index 482242ef33..dcfab10022 100644 --- a/packages/api/src/decorator/private/ActivityDecorator.tsx +++ b/packages/api/src/decorator/ActivityDecorator.tsx @@ -1,7 +1,7 @@ import { type WebChatActivity } from 'botframework-webchat-core'; import React, { Fragment, memo, type ReactNode } from 'react'; -import { ActivityBorderDecoratorMiddlewareProxy } from './ActivityBorderDecoratorMiddleware'; -import useActivityDecoratorRequest from './useActivityDecoratorRequest'; +import { ActivityBorderDecoratorMiddlewareProxy } from './private/ActivityBorderDecoratorMiddleware'; +import useActivityDecoratorRequest from './private/useActivityDecoratorRequest'; const ActivityDecoratorFallback = memo(({ children }) => {children}); diff --git a/packages/api/src/decorator/index.ts b/packages/api/src/decorator/index.ts index 0a43087555..7071cb0371 100644 --- a/packages/api/src/decorator/index.ts +++ b/packages/api/src/decorator/index.ts @@ -1,5 +1,5 @@ export { DecoratorComposer } from './private/DecoratorComposer'; -export { default as ActivityDecorator } from './private/ActivityDecorator'; +export { default as ActivityDecorator } from './ActivityDecorator'; export { default as ActivityActionsDecorator } from './private/ActivityActionsDecorator'; export { type DecoratorMiddleware } from './private/createDecoratorComposer'; export { default as ActivityDecoratorRequest } from './private/activityDecoratorRequest'; diff --git a/packages/api/src/decorator/private/ActivityActionsDecorator.tsx b/packages/api/src/decorator/private/ActivityActionsDecorator.tsx index 756048ae2c..357f1caf17 100644 --- a/packages/api/src/decorator/private/ActivityActionsDecorator.tsx +++ b/packages/api/src/decorator/private/ActivityActionsDecorator.tsx @@ -14,7 +14,11 @@ function ActivityActionsDecorator({ const request = useActivityDecoratorRequest(activity); return ( - + {children} ); diff --git a/packages/api/src/decorator/private/ActivityActionsDecoratorMiddleware.ts b/packages/api/src/decorator/private/ActivityActionsDecoratorMiddleware.ts index ddd7509a8f..b7b8815d6a 100644 --- a/packages/api/src/decorator/private/ActivityActionsDecoratorMiddleware.ts +++ b/packages/api/src/decorator/private/ActivityActionsDecoratorMiddleware.ts @@ -1,4 +1,4 @@ -import { type EmptyObject } from 'type-fest'; +import { WebChatActivity } from 'botframework-webchat-core'; import ActivityDecoratorRequest from './activityDecoratorRequest'; import templateMiddleware from './templateMiddleware'; @@ -8,9 +8,13 @@ const { Provider: ActivityActionsDecoratorMiddlewareProvider, Proxy: ActivityActionsDecoratorMiddlewareProxy, types -} = templateMiddleware( - 'ActivityActionsDecoratorMiddleware' -); +} = templateMiddleware< + typeof activityActionsDecoratorTypeName, + ActivityDecoratorRequest, + { + activity: WebChatActivity; + } +>('ActivityActionsDecoratorMiddleware'); type ActivityActionsDecoratorMiddleware = typeof types.middleware; type ActivityActionsDecoratorMiddlewareInit = typeof types.init; diff --git a/packages/api/src/decorator/private/activityDecoratorRequest.ts b/packages/api/src/decorator/private/activityDecoratorRequest.ts index 2b85bc2ee1..eb90bddd11 100644 --- a/packages/api/src/decorator/private/activityDecoratorRequest.ts +++ b/packages/api/src/decorator/private/activityDecoratorRequest.ts @@ -1,5 +1,3 @@ -import { type WebChatActivity } from 'botframework-webchat-core'; - type ActivityDecoratorRequestType = { /** * Decorate the activity as it participate in a livestreaming session. @@ -20,8 +18,6 @@ type ActivityDecoratorRequestType = { * - `undefined` - the sender is unknown */ from: 'bot' | 'channel' | `user` | undefined; - - activity: WebChatActivity; }; export default ActivityDecoratorRequestType; diff --git a/packages/api/src/decorator/private/createDecoratorComposer.tsx b/packages/api/src/decorator/private/createDecoratorComposer.tsx index 5cf0d4b620..6e71a622ee 100644 --- a/packages/api/src/decorator/private/createDecoratorComposer.tsx +++ b/packages/api/src/decorator/private/createDecoratorComposer.tsx @@ -12,8 +12,6 @@ import { initActivityActionsDecoratorMiddleware } from './ActivityActionsDecoratorMiddleware'; -type DecoratorMiddlewareInit = typeof activityBorderDecoratorTypeName | typeof activityActionsDecoratorTypeName; - export type DecoratorComposerComponent = ( props: Readonly<{ children?: ReactNode | undefined; @@ -21,11 +19,11 @@ export type DecoratorComposerComponent = ( }> ) => React.JSX.Element; -export type DecoratorMiddleware = ( - init: DecoratorMiddlewareInit -) => ReturnType | false; +export type DecoratorMiddleware = + | ((init: typeof activityBorderDecoratorTypeName) => ReturnType | false) + | ((init: typeof activityActionsDecoratorTypeName) => ReturnType | false); -const EMPTY_ARRAY = []; +const EMPTY_ARRAY = [] as DecoratorMiddleware[]; export default (): DecoratorComposerComponent => ({ children, middleware = EMPTY_ARRAY }) => { diff --git a/packages/api/src/decorator/private/templateMiddleware.ts b/packages/api/src/decorator/private/templateMiddleware.ts index fd575e441c..c01b46e307 100644 --- a/packages/api/src/decorator/private/templateMiddleware.ts +++ b/packages/api/src/decorator/private/templateMiddleware.ts @@ -20,7 +20,7 @@ export default function templateMiddleware[], + middleware: readonly MiddlewareWithInit, any>[], init?: Init ): readonly Middleware[] => { if (middleware) { diff --git a/packages/component/src/Attachment/Text/private/ActivityButton.tsx b/packages/component/src/Attachment/Text/ActivityButton.tsx similarity index 91% rename from packages/component/src/Attachment/Text/private/ActivityButton.tsx rename to packages/component/src/Attachment/Text/ActivityButton.tsx index b8ad09078e..8f961c3094 100644 --- a/packages/component/src/Attachment/Text/private/ActivityButton.tsx +++ b/packages/component/src/Attachment/Text/ActivityButton.tsx @@ -1,8 +1,8 @@ import classNames from 'classnames'; import React, { forwardRef, memo, useCallback, type ReactNode } from 'react'; import { useRefFrom } from 'use-ref-from'; -import useStyleSet from '../../../hooks/useStyleSet'; -import MonochromeImageMasker from '../../../Utils/MonochromeImageMasker'; +import useStyleSet from '../../hooks/useStyleSet'; +import MonochromeImageMasker from '../../Utils/MonochromeImageMasker'; type Props = Readonly<{ children?: ReactNode | undefined; diff --git a/packages/component/src/Attachment/Text/private/ActivityCopyButton.tsx b/packages/component/src/Attachment/Text/private/ActivityCopyButton.tsx index c8fd4afc98..0bf5a4fa63 100644 --- a/packages/component/src/Attachment/Text/private/ActivityCopyButton.tsx +++ b/packages/component/src/Attachment/Text/private/ActivityCopyButton.tsx @@ -2,7 +2,7 @@ import { hooks } from 'botframework-webchat-api'; import classNames from 'classnames'; import React, { memo, useCallback, useEffect, useRef, useState, type RefObject } from 'react'; import useStyleSet from '../../../hooks/useStyleSet'; -import ActivityButton from './ActivityButton'; +import ActivityButton from '../ActivityButton'; const { useLocalizer, useUIState } = hooks; diff --git a/packages/component/src/Attachment/Text/private/ActivityViewCodeButton.tsx b/packages/component/src/Attachment/Text/private/ActivityViewCodeButton.tsx index a34be6d48f..5a7815929c 100644 --- a/packages/component/src/Attachment/Text/private/ActivityViewCodeButton.tsx +++ b/packages/component/src/Attachment/Text/private/ActivityViewCodeButton.tsx @@ -5,7 +5,7 @@ import React, { memo, useCallback } from 'react'; import useStyleSet from '../../../hooks/useStyleSet'; import useShowModal from '../../../providers/ModalDialog/useShowModal'; import LocalizedString from '../../../Utils/LocalizedString'; -import ActivityButton from './ActivityButton'; +import ActivityButton from '../ActivityButton'; import CodeContent from './CodeContent'; const CODE_ICON_URL = `data:image/svg+xml;utf8,${encodeURIComponent('')}`; diff --git a/packages/component/src/Attachment/Text/private/MarkdownTextContent.tsx b/packages/component/src/Attachment/Text/private/MarkdownTextContent.tsx index 950ea440c0..e5a922ecde 100644 --- a/packages/component/src/Attachment/Text/private/MarkdownTextContent.tsx +++ b/packages/component/src/Attachment/Text/private/MarkdownTextContent.tsx @@ -235,6 +235,7 @@ const MarkdownTextContent = memo(({ activity, children, markdown }: Props) => { )}
+ {/* TODO: [P2] Fold the ActivityActionsDecorator into the ActivityDecorator to unlock more flexibility */} {activity.type === 'message' && isBasedOnSoftwareSourceCode(messageThing) && messageThing.isBasedOn.text ? ( Date: Wed, 5 Feb 2025 23:37:01 +0000 Subject: [PATCH 3/8] Docs and changelog --- CHANGELOG.md | 3 +++ docs/HOOKS.md | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ee81497eea..df32d2c89e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2037,6 +2037,9 @@ It should check the result from downstream middleware. If it is falsy, it should - Adds Direct Line Speech support, by [@compulim](https://github.com/compulim) in PR [#2621](https://github.com/microsoft/BotFramework-WebChat/pull/2621) - Adds [`microsoft-cognitiveservices-sdk@1.8.1`](https://npmjs.com/package/microsoft-cognitiveservices-speech-sdk), in PR [#2704](https://github.com/microsoft/BotFramework-WebChat/pull/2704) - Fixes [#2692](https://github.com/microsoft/BotFramework-WebChat/issues/2692). Rename sample 17 to 17.a, by [@corinagum](https://github.com/corinagum) in PR [#2695](https://github.com/microsoft/BotFramework-WebChat/pull/2695) +- Added `ActivityActionsDecorator` for customizing activity actions layout, in PR [#5419](https://github.com/microsoft/BotFramework-WebChat/pull/5419), by [@OEvgeny](https://github.com/OEvgeny) + - Exposed `ActivityButton` component to be used in activity actions toolbar, in PR [#5419](https://github.com/microsoft/BotFramework-WebChat/pull/5419), by [@OEvgeny](https://github.com/OEvgeny) + - Exposed `useShowModal` hook for displaying custom modal dialogs, in PR [#5419](https://github.com/microsoft/BotFramework-WebChat/pull/5419), by [@OEvgeny](https://github.com/OEvgeny) ### Fixed diff --git a/docs/HOOKS.md b/docs/HOOKS.md index 4fa084f891..65ef5b6fd4 100644 --- a/docs/HOOKS.md +++ b/docs/HOOKS.md @@ -111,6 +111,7 @@ Following is the list of hooks supported by Web Chat API. - [`useScrollTo`](#usescrollto) - [`useScrollToEnd`](#usescrolltoend) - [`useScrollUp`](#usescrollup) +- [`useShowModal`](#useShowModal) - [`useSendBoxAttachments`](#usesendboxattachments) - [`useSendBoxValue`](#usesendboxvalue) - [`useSendEvent`](#usesendevent) @@ -1120,6 +1121,52 @@ useScrollUp(): () => void This hook will return a function that, when called, will scroll elements up the transcript. This is an important feature for AT accessibility. +## `useShowModal` + + +```js +type ModalOptions = { + 'aria-label'?: string; + className?: string; +}; + +useShowModal(): (content: () => React.Element, options?: ModalOptions) => void +``` + + +When called, this hook will return a function to show a modal dialog. The returned function accepts: + +1. `content`: A function that returns a React element to be shown in the modal dialog +2. `options`: Optional modal options including: + - `aria-label`: Accessibility label for the modal + - `className`: Additional CSS classes to apply to the modal + +Common use cases: + +- Showing image previews +- Displaying detailed content +- Collecting user confirmation or input + +Example usage: + +```js +const showModal = useShowModal(); + +// Show an image preview modal +showModal( + () => ( +
+

Image Preview

+ ... +
+ ), + { + 'aria-label': 'Image preview', + className: 'image-preview-modal' + } +); +``` + ## `useSendBoxAttachments` From ac28be25341a4bb4a89684c790627be9bfc81ada Mon Sep 17 00:00:00 2001 From: Eugene Date: Wed, 5 Feb 2025 23:43:33 +0000 Subject: [PATCH 4/8] Self review --- packages/api/src/decorator/ActivityDecorator.tsx | 1 + packages/api/src/decorator/private/ActivityActionsDecorator.tsx | 1 + packages/component/src/Attachment/Text/ActivityButton.tsx | 1 + .../component/src/Attachment/Text/private/ActivityCopyButton.tsx | 1 + 4 files changed, 4 insertions(+) diff --git a/packages/api/src/decorator/ActivityDecorator.tsx b/packages/api/src/decorator/ActivityDecorator.tsx index dcfab10022..b2a972055b 100644 --- a/packages/api/src/decorator/ActivityDecorator.tsx +++ b/packages/api/src/decorator/ActivityDecorator.tsx @@ -1,5 +1,6 @@ import { type WebChatActivity } from 'botframework-webchat-core'; import React, { Fragment, memo, type ReactNode } from 'react'; + import { ActivityBorderDecoratorMiddlewareProxy } from './private/ActivityBorderDecoratorMiddleware'; import useActivityDecoratorRequest from './private/useActivityDecoratorRequest'; diff --git a/packages/api/src/decorator/private/ActivityActionsDecorator.tsx b/packages/api/src/decorator/private/ActivityActionsDecorator.tsx index 357f1caf17..5c4c320f83 100644 --- a/packages/api/src/decorator/private/ActivityActionsDecorator.tsx +++ b/packages/api/src/decorator/private/ActivityActionsDecorator.tsx @@ -1,5 +1,6 @@ import { type WebChatActivity } from 'botframework-webchat-core'; import React, { Fragment, memo, type ReactNode } from 'react'; + import { ActivityActionsDecoratorMiddlewareProxy } from './ActivityActionsDecoratorMiddleware'; import useActivityDecoratorRequest from './useActivityDecoratorRequest'; diff --git a/packages/component/src/Attachment/Text/ActivityButton.tsx b/packages/component/src/Attachment/Text/ActivityButton.tsx index 8f961c3094..d626d79260 100644 --- a/packages/component/src/Attachment/Text/ActivityButton.tsx +++ b/packages/component/src/Attachment/Text/ActivityButton.tsx @@ -1,6 +1,7 @@ import classNames from 'classnames'; import React, { forwardRef, memo, useCallback, type ReactNode } from 'react'; import { useRefFrom } from 'use-ref-from'; + import useStyleSet from '../../hooks/useStyleSet'; import MonochromeImageMasker from '../../Utils/MonochromeImageMasker'; diff --git a/packages/component/src/Attachment/Text/private/ActivityCopyButton.tsx b/packages/component/src/Attachment/Text/private/ActivityCopyButton.tsx index 0bf5a4fa63..de70dbbd38 100644 --- a/packages/component/src/Attachment/Text/private/ActivityCopyButton.tsx +++ b/packages/component/src/Attachment/Text/private/ActivityCopyButton.tsx @@ -1,6 +1,7 @@ import { hooks } from 'botframework-webchat-api'; import classNames from 'classnames'; import React, { memo, useCallback, useEffect, useRef, useState, type RefObject } from 'react'; + import useStyleSet from '../../../hooks/useStyleSet'; import ActivityButton from '../ActivityButton'; From f75834c935469579ab27af7a694f929acef7e323 Mon Sep 17 00:00:00 2001 From: Eugene Date: Thu, 6 Feb 2025 01:22:13 +0000 Subject: [PATCH 5/8] Address feedback --- .../html2/fluentTheme/decorator.modal.html | 20 +++++-------------- docs/HOOKS.md | 11 +++++----- 2 files changed, 11 insertions(+), 20 deletions(-) diff --git a/__tests__/html2/fluentTheme/decorator.modal.html b/__tests__/html2/fluentTheme/decorator.modal.html index 29415c907a..c6175a7d49 100644 --- a/__tests__/html2/fluentTheme/decorator.modal.html +++ b/__tests__/html2/fluentTheme/decorator.modal.html @@ -178,7 +178,7 @@ const ImageModalContent = ({ headerText, - imageUrl + imageURL }) => { return (
@@ -188,7 +188,7 @@

{headerText} @@ -200,16 +200,6 @@

function Actions({ activity, children }) { const showModal = useShowModal(); - const showImageModal = useCallback( - (title, imageUrl, altText) => { - showModal(() => , { - 'aria-label': altText || title || 'Image preview', - className: 'image-modal-dialog' - }); - }, - [showModal] - ); - const message = activity?.entities?.at(0); const imageObject = activity?.entities?.at(0)?.isBasedOn; @@ -217,7 +207,7 @@

showModal( () => , { 'aria-label': imageObject.name, @@ -237,13 +227,13 @@

{children}

; } - return <>{children}; + return children; } const decoratorMiddleware = [ init => init === 'activity actions' && - (next => request => (!request.livestreamingState ? Actions : next(request))) + (next => request => (request.livestreamingState !== undefined ? Actions : next(request))) ]; const { directLine, store } = testHelpers.createDirectLineEmulator(); diff --git a/docs/HOOKS.md b/docs/HOOKS.md index 65ef5b6fd4..12936ea152 100644 --- a/docs/HOOKS.md +++ b/docs/HOOKS.md @@ -1124,19 +1124,20 @@ This hook will return a function that, when called, will scroll elements up the ## `useShowModal` -```js +```ts type ModalOptions = { - 'aria-label'?: string; - className?: string; + 'aria-label'?: string | undefined; + 'aria-labelledby'?: string | undefined; + className?: string | undefined; }; -useShowModal(): (content: () => React.Element, options?: ModalOptions) => void +useShowModal(): (render: () => React.Element, options?: ModalOptions) => void ``` When called, this hook will return a function to show a modal dialog. The returned function accepts: -1. `content`: A function that returns a React element to be shown in the modal dialog +1. `render`: A function that returns a React element to be shown in the modal dialog 2. `options`: Optional modal options including: - `aria-label`: Accessibility label for the modal - `className`: Additional CSS classes to apply to the modal From 9751df0383a1d0c6f22f579a822ffc13dfd3d712 Mon Sep 17 00:00:00 2001 From: Eugene Date: Thu, 6 Feb 2025 01:24:21 +0000 Subject: [PATCH 6/8] Fix nit --- docs/HOOKS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/HOOKS.md b/docs/HOOKS.md index 12936ea152..62ce753816 100644 --- a/docs/HOOKS.md +++ b/docs/HOOKS.md @@ -1131,7 +1131,7 @@ type ModalOptions = { className?: string | undefined; }; -useShowModal(): (render: () => React.Element, options?: ModalOptions) => void +useShowModal(): (render: () => React.Element, options?: ModalOptions | undefined) => void ``` From 631116552d58e97d3dfbe159ebbcad772b8c0929 Mon Sep 17 00:00:00 2001 From: Eugene Date: Thu, 6 Feb 2025 01:25:32 +0000 Subject: [PATCH 7/8] Fix more --- docs/HOOKS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/HOOKS.md b/docs/HOOKS.md index 62ce753816..8febdbb9bb 100644 --- a/docs/HOOKS.md +++ b/docs/HOOKS.md @@ -1150,7 +1150,7 @@ Common use cases: Example usage: -```js +```ts const showModal = useShowModal(); // Show an image preview modal From fb247016bd60f26373917c167e82c69ce5fa54db Mon Sep 17 00:00:00 2001 From: Eugene Date: Thu, 6 Feb 2025 17:03:08 +0000 Subject: [PATCH 8/8] Fix tests --- __tests__/html2/fluentTheme/decorator.modal.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/__tests__/html2/fluentTheme/decorator.modal.html b/__tests__/html2/fluentTheme/decorator.modal.html index c6175a7d49..359b951442 100644 --- a/__tests__/html2/fluentTheme/decorator.modal.html +++ b/__tests__/html2/fluentTheme/decorator.modal.html @@ -233,7 +233,7 @@

const decoratorMiddleware = [ init => init === 'activity actions' && - (next => request => (request.livestreamingState !== undefined ? Actions : next(request))) + (next => request => (request.livestreamingState === undefined ? Actions : next(request))) ]; const { directLine, store } = testHelpers.createDirectLineEmulator();