From f74994323bc78c5b087b44d16226086631371875 Mon Sep 17 00:00:00 2001 From: Raquel Smith Date: Fri, 25 Oct 2024 07:58:09 -0700 Subject: [PATCH 1/5] feat(replay-templates): minor improvements (#25778) Co-authored-by: Paul D'Ambra Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com> --- frontend/src/queries/schema.json | 47 +++++++------------ frontend/src/queries/schema.ts | 22 +++++---- .../playlist/SessionRecordingsPlaylist.tsx | 6 +-- .../sessionRecordingsPlaylistLogic.ts | 21 ++++----- .../templates/SessionRecordingTemplates.tsx | 39 ++++++++------- .../templates/availableTemplates.tsx | 9 ++++ .../sessionRecordingTemplatesLogic.tsx | 46 ++++++++++++++---- frontend/src/scenes/urls.ts | 8 +++- frontend/src/types.ts | 4 +- posthog/schema.py | 15 +++++- 10 files changed, 135 insertions(+), 82 deletions(-) diff --git a/frontend/src/queries/schema.json b/frontend/src/queries/schema.json index 315dfaa5e1926..b15cea71ad019 100644 --- a/frontend/src/queries/schema.json +++ b/frontend/src/queries/schema.json @@ -10322,6 +10322,21 @@ "required": ["k", "t"], "type": "object" }, + "RecordingOrder": { + "enum": [ + "duration", + "recording_duration", + "inactive_seconds", + "active_seconds", + "start_time", + "console_error_count", + "click_count", + "keypress_count", + "mouse_activity_count", + "activity_score" + ], + "type": "string" + }, "RecordingPropertyFilter": { "additionalProperties": false, "properties": { @@ -10411,35 +10426,7 @@ "$ref": "#/definitions/FilterLogicalOperator" }, "order": { - "anyOf": [ - { - "$ref": "#/definitions/DurationType" - }, - { - "const": "start_time", - "type": "string" - }, - { - "const": "console_error_count", - "type": "string" - }, - { - "const": "click_count", - "type": "string" - }, - { - "const": "keypress_count", - "type": "string" - }, - { - "const": "mouse_activity_count", - "type": "string" - }, - { - "const": "activity_score", - "type": "string" - } - ] + "$ref": "#/definitions/RecordingOrder" }, "person_uuid": { "type": "string" @@ -10463,7 +10450,7 @@ "type": "object" } }, - "required": ["kind", "order"], + "required": ["kind"], "type": "object" }, "RecordingsQueryResponse": { diff --git a/frontend/src/queries/schema.ts b/frontend/src/queries/schema.ts index 397e0487de994..562c9bf50ada8 100644 --- a/frontend/src/queries/schema.ts +++ b/frontend/src/queries/schema.ts @@ -10,7 +10,6 @@ import { ChartDisplayCategory, ChartDisplayType, CountPerActorMathType, - DurationType, EventPropertyFilter, EventType, FeaturePropertyFilter, @@ -313,6 +312,18 @@ export interface RecordingsQueryResponse { has_next: boolean } +export type RecordingOrder = + | 'duration' + | 'recording_duration' + | 'inactive_seconds' + | 'active_seconds' + | 'start_time' + | 'console_error_count' + | 'click_count' + | 'keypress_count' + | 'mouse_activity_count' + | 'activity_score' + export interface RecordingsQuery extends DataNode { kind: NodeKind.RecordingsQuery date_from?: string | null @@ -326,14 +337,7 @@ export interface RecordingsQuery extends DataNode { operand?: FilterLogicalOperator session_ids?: string[] person_uuid?: string - order: - | DurationType - | 'start_time' - | 'console_error_count' - | 'click_count' - | 'keypress_count' - | 'mouse_activity_count' - | 'activity_score' + order?: RecordingOrder limit?: integer offset?: integer user_modified_filters?: Record diff --git a/frontend/src/scenes/session-recordings/playlist/SessionRecordingsPlaylist.tsx b/frontend/src/scenes/session-recordings/playlist/SessionRecordingsPlaylist.tsx index 61f59ac76efed..c1d5479aa0635 100644 --- a/frontend/src/scenes/session-recordings/playlist/SessionRecordingsPlaylist.tsx +++ b/frontend/src/scenes/session-recordings/playlist/SessionRecordingsPlaylist.tsx @@ -10,7 +10,7 @@ import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { useNotebookNode } from 'scenes/notebooks/Nodes/NotebookNodeContext' import { urls } from 'scenes/urls' -import { RecordingsQuery } from '~/queries/schema' +import { RecordingOrder } from '~/queries/schema' import { RecordingUniversalFilters, ReplayTabs, SessionRecordingType } from '~/types' import { RecordingsUniversalFilters } from '../filters/RecordingsUniversalFilters' @@ -31,7 +31,7 @@ function SortedBy({ filters: RecordingUniversalFilters setFilters: (filters: Partial) => void }): JSX.Element { - const simpleSortingOptions: LemonSelectSection = { + const simpleSortingOptions: LemonSelectSection = { options: [ { value: 'start_time', @@ -47,7 +47,7 @@ function SortedBy({ }, ], } - const detailedSortingOptions: LemonSelectSection = { + const detailedSortingOptions: LemonSelectSection = { options: [ { label: 'Longest', diff --git a/frontend/src/scenes/session-recordings/playlist/sessionRecordingsPlaylistLogic.ts b/frontend/src/scenes/session-recordings/playlist/sessionRecordingsPlaylistLogic.ts index 35201c4d0f4cb..bc238b4a35e14 100644 --- a/frontend/src/scenes/session-recordings/playlist/sessionRecordingsPlaylistLogic.ts +++ b/frontend/src/scenes/session-recordings/playlist/sessionRecordingsPlaylistLogic.ts @@ -16,7 +16,7 @@ import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { objectClean, objectsEqual } from 'lib/utils' import { eventUsageLogic } from 'lib/utils/eventUsageLogic' -import { NodeKind, RecordingsQuery, RecordingsQueryResponse } from '~/queries/schema' +import { NodeKind, RecordingOrder, RecordingsQuery, RecordingsQueryResponse } from '~/queries/schema' import { EntityTypes, FilterLogicalOperator, @@ -225,17 +225,11 @@ function combineLegacyRecordingFilters( } } -function sortRecordings(recordings: SessionRecordingType[], order: RecordingsQuery['order']): SessionRecordingType[] { - const orderKey: - | 'recording_duration' - | 'activity_score' - | 'active_seconds' - | 'inactive_seconds' - | 'console_error_count' - | 'click_count' - | 'keypress_count' - | 'mouse_activity_count' - | 'start_time' = order === 'duration' ? 'recording_duration' : order +function sortRecordings( + recordings: SessionRecordingType[], + order: RecordingsQuery['order'] | 'duration' = 'start_time' +): SessionRecordingType[] { + const orderKey: RecordingOrder = order === 'duration' ? 'recording_duration' : order return recordings.sort((a, b) => { const orderA = a[orderKey] @@ -741,6 +735,9 @@ export const sessionRecordingsPlaylistLogic = kea { - const { setVariable } = useActions(sessionReplayTemplatesLogic(props)) + const { setVariable, resetVariable } = useActions(sessionReplayTemplatesLogic(props)) useMountedLogic(actionsModel) return variable.type === 'pageview' ? ( @@ -80,7 +80,10 @@ const SingleTemplateVariable = ({ {variable.name} setVariable({ ...variable, value: e })} + value={variable.value} + onChange={(e) => + e ? setVariable({ ...variable, value: e }) : resetVariable({ ...variable, value: undefined }) + } size="small" /> @@ -91,7 +94,7 @@ const SingleTemplateVariable = ({ rootKey={`session-recordings-${variable.key}`} group={{ type: FilterLogicalOperator.And, - values: [], + values: variable.filterGroup ? [variable.filterGroup] : [], }} taxonomicGroupTypes={ variable.type === 'event' @@ -103,9 +106,13 @@ const SingleTemplateVariable = ({ : [] } onChange={(thisFilterGroup) => { - variable.type === 'flag' - ? setVariable({ ...variable, value: (thisFilterGroup.values[0] as FeaturePropertyFilter).key }) - : setVariable({ ...variable, filterGroup: thisFilterGroup.values[0] }) + if (thisFilterGroup.values.length === 0) { + resetVariable({ ...variable, filterGroup: undefined }) + } else if (variable.type === 'flag') { + setVariable({ ...variable, value: (thisFilterGroup.values[0] as FeaturePropertyFilter).key }) + } else { + setVariable({ ...variable, filterGroup: thisFilterGroup.values[0] }) + } }} > { const { navigate } = useActions(sessionReplayTemplatesLogic(props)) - const { variables, areAnyVariablesTouched } = useValues(sessionReplayTemplatesLogic(props)) + const { variables, canApplyFilters } = useValues(sessionReplayTemplatesLogic(props)) return (
- {variables.map((variable) => ( - - ))} + {variables + .filter((v) => !v.noTouch) + .map((variable) => ( + + ))}
navigate()} type="primary" className="mt-2" - disabledReason={ - !areAnyVariablesTouched ? 'Please set a value for at least one variable' : undefined - } + disabledReason={!canApplyFilters ? 'Please set a value for at least one variable' : undefined} > Apply filters @@ -145,14 +152,14 @@ const TemplateVariables = (props: RecordingTemplateCardProps): JSX.Element => { } const RecordingTemplateCard = (props: RecordingTemplateCardProps): JSX.Element => { - const { showVariables, hideVariables, navigate } = useActions(sessionReplayTemplatesLogic(props)) - const { variablesVisible, editableVariables } = useValues(sessionReplayTemplatesLogic(props)) + const { showVariables, hideVariables } = useActions(sessionReplayTemplatesLogic(props)) + const { variablesVisible } = useValues(sessionReplayTemplatesLogic(props)) return ( { - editableVariables.length > 0 ? showVariables() : navigate() + showVariables() }} closeable={variablesVisible} onClose={hideVariables} diff --git a/frontend/src/scenes/session-recordings/templates/availableTemplates.tsx b/frontend/src/scenes/session-recordings/templates/availableTemplates.tsx index 47f5418bb5825..04520ca8affdb 100644 --- a/frontend/src/scenes/session-recordings/templates/availableTemplates.tsx +++ b/frontend/src/scenes/session-recordings/templates/availableTemplates.tsx @@ -177,6 +177,7 @@ export const replayTemplates: ReplayTemplateType[] = [ description: 'Watch all recent replays, and see where users are getting stuck.', variables: [], categories: ['More'], + order: 'start_time', icon: , }, { @@ -223,4 +224,12 @@ export const replayTemplates: ReplayTemplateType[] = [ categories: ['More'], icon: , }, + { + key: 'activity-score', + name: 'Most active users', + description: 'Watch recordings of the most active sessions. Lots of valuable insights, guaranteed!', + order: 'activity_score', + categories: ['More'], + icon: , + }, ] diff --git a/frontend/src/scenes/session-recordings/templates/sessionRecordingTemplatesLogic.tsx b/frontend/src/scenes/session-recordings/templates/sessionRecordingTemplatesLogic.tsx index 10e14b031d66b..f44023016729f 100644 --- a/frontend/src/scenes/session-recordings/templates/sessionRecordingTemplatesLogic.tsx +++ b/frontend/src/scenes/session-recordings/templates/sessionRecordingTemplatesLogic.tsx @@ -1,5 +1,8 @@ -import { actions, events, kea, key, listeners, path, props, reducers, selectors } from 'kea' +import clsx from 'clsx' +import { actions, connect, events, kea, key, listeners, path, props, reducers, selectors } from 'kea' import { router } from 'kea-router' +import posthog from 'posthog-js' +import { teamLogic } from 'scenes/teamLogic' import { urls } from 'scenes/urls' import { @@ -64,20 +67,35 @@ export const sessionReplayTemplatesLogic = kea( path(() => ['scenes', 'session-recordings', 'templates', 'sessionReplayTemplatesLogic']), props({} as ReplayTemplateLogicPropsType), key((props) => `${props.category}-${props.template.key}`), + connect({ + values: [teamLogic, ['currentTeam']], + }), actions({ - setVariables: (variables: ReplayTemplateVariableType[]) => ({ variables }), + setVariables: (variables?: ReplayTemplateVariableType[]) => ({ variables }), setVariable: (variable: ReplayTemplateVariableType) => ({ variable }), + resetVariable: (variable: ReplayTemplateVariableType) => ({ variable }), navigate: true, showVariables: true, hideVariables: true, }), - reducers(({ props }) => ({ + reducers(({ props, values }) => ({ variables: [ - props.template.variables, + props.template.variables ?? [], + { + persist: true, + storageKey: clsx( + 'session-recordings.templates.variables', + values.currentTeam?.id, + props.category, + props.template.key + ), + }, { - setVariables: (_, { variables }) => variables, + setVariables: (_, { variables }) => variables ?? [], setVariable: (state, { variable }) => state.map((v) => (v.key === variable.key ? { ...variable, touched: true } : v)), + resetVariable: (state, { variable }) => + state.map((v) => (v.key === variable.key ? { ...variable, touched: false } : v)), }, ], variablesVisible: [ @@ -125,21 +143,31 @@ export const sessionReplayTemplatesLogic = kea( return filterGroup }, ], + canApplyFilters: [ + (s) => [s.variables, s.areAnyVariablesTouched], + (variables, areAnyVariablesTouched) => areAnyVariablesTouched || variables.length === 0, + ], areAnyVariablesTouched: [ (s) => [s.variables], (variables) => variables.some((v) => v.touched) || variables.some((v) => v.noTouch), ], editableVariables: [(s) => [s.variables], (variables) => variables.filter((v) => !v.noTouch)], }), - listeners(({ values }) => ({ + listeners(({ values, props }) => ({ navigate: () => { + posthog.capture('session replay template used', { + template: props.template.key, + category: props.category, + }) const filterGroup = values.variables.length > 0 ? values.filterGroup : undefined - router.actions.push(urls.replay(ReplayTabs.Home, filterGroup)) + router.actions.push(urls.replay(ReplayTabs.Home, filterGroup, undefined, props.template.order)) }, })), - events(({ actions, props }) => ({ + events(({ actions, props, values }) => ({ afterMount: () => { - actions.setVariables(props.template.variables) + if (values.variables.length === 0) { + actions.setVariables(props.template.variables) + } }, })), ]) diff --git a/frontend/src/scenes/urls.ts b/frontend/src/scenes/urls.ts index 05f0372b7f8c8..a6fe7fcbaca9b 100644 --- a/frontend/src/scenes/urls.ts +++ b/frontend/src/scenes/urls.ts @@ -110,10 +110,16 @@ export const urls = { savedInsights: (tab?: string): string => `/insights${tab ? `?tab=${tab}` : ''}`, webAnalytics: (): string => `/web`, - replay: (tab?: ReplayTabs, filters?: Partial, sessionRecordingId?: string): string => + replay: ( + tab?: ReplayTabs, + filters?: Partial, + sessionRecordingId?: string, + order?: string + ): string => combineUrl(tab ? `/replay/${tab}` : '/replay/home', { ...(filters ? { filters } : {}), ...(sessionRecordingId ? { sessionRecordingId } : {}), + ...(order ? { order } : {}), }).url, replayPlaylist: (id: string): string => `/replay/playlists/${id}`, replaySingle: (id: string): string => `/replay/${id}`, diff --git a/frontend/src/types.ts b/frontend/src/types.ts index 86a20ea4cd23b..b01a6a080d5c9 100644 --- a/frontend/src/types.ts +++ b/frontend/src/types.ts @@ -40,6 +40,7 @@ import type { InsightVizNode, Node, QueryStatus, + RecordingOrder, RecordingsQuery, } from './queries/schema' import { NodeKind } from './queries/schema' @@ -4639,9 +4640,10 @@ export type ReplayTemplateType = { key: string name: string description: string - variables: ReplayTemplateVariableType[] + variables?: ReplayTemplateVariableType[] categories: ReplayTemplateCategory[] icon?: React.ReactNode + order?: RecordingOrder } export type ReplayTemplateCategory = 'B2B' | 'B2C' | 'More' diff --git a/posthog/schema.py b/posthog/schema.py index b04a1bb6ebdf6..b386d5d6c8e97 100644 --- a/posthog/schema.py +++ b/posthog/schema.py @@ -1108,6 +1108,19 @@ class QueryTiming(BaseModel): t: float = Field(..., description="Time in seconds. Shortened to 't' to save on data.") +class RecordingOrder(StrEnum): + DURATION = "duration" + RECORDING_DURATION = "recording_duration" + INACTIVE_SECONDS = "inactive_seconds" + ACTIVE_SECONDS = "active_seconds" + START_TIME = "start_time" + CONSOLE_ERROR_COUNT = "console_error_count" + CLICK_COUNT = "click_count" + KEYPRESS_COUNT = "keypress_count" + MOUSE_ACTIVITY_COUNT = "mouse_activity_count" + ACTIVITY_SCORE = "activity_score" + + class RecordingPropertyFilter(BaseModel): model_config = ConfigDict( extra="forbid", @@ -5343,7 +5356,7 @@ class RecordingsQuery(BaseModel): ) offset: Optional[int] = None operand: Optional[FilterLogicalOperator] = None - order: Union[DurationType, str] + order: Optional[RecordingOrder] = None person_uuid: Optional[str] = None properties: Optional[ list[ From d1f4ebadc941b05777038e4023ba08717141ff29 Mon Sep 17 00:00:00 2001 From: Marius Andra Date: Fri, 25 Oct 2024 17:17:50 +0200 Subject: [PATCH 2/5] feat(messaging): ui (#25811) Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com> --- ...er--trends-line-insight-detailed--dark.png | Bin 21701 -> 21655 bytes ...r--trends-line-insight-detailed--light.png | Bin 21385 -> 21344 bytes ...-pipeline-node-new-hog-function--light.png | Bin 134796 -> 132597 bytes .../navigation-3000/navigationLogic.tsx | 10 + frontend/src/lib/constants.tsx | 1 + frontend/src/scenes/appScenes.ts | 2 + frontend/src/scenes/messaging/Broadcasts.tsx | 43 +++ .../src/scenes/messaging/FunctionsTable.tsx | 125 ++++++++ .../src/scenes/messaging/MessagingTabs.tsx | 25 ++ frontend/src/scenes/messaging/Providers.tsx | 32 ++ .../src/scenes/messaging/broadcastsLogic.tsx | 65 ++++ .../scenes/messaging/functionsTableLogic.tsx | 94 ++++++ .../scenes/messaging/messagingTabsLogic.ts | 44 +++ .../src/scenes/messaging/providersLogic.ts | 69 +++++ .../hogfunctions/HogFunctionConfiguration.tsx | 291 +++++++++++------- .../pipeline/hogfunctions/HogFunctionTest.tsx | 52 +++- .../hogfunctions/activityDescriptions.tsx | 11 +- .../filters/HogFunctionFilters.tsx | 30 +- .../hogFunctionConfigurationLogic.tsx | 142 ++++++--- .../hogfunctions/hogFunctionTestLogic.tsx | 36 ++- .../hogfunctions/list/HogFunctionsList.tsx | 8 +- .../list/hogFunctionTemplateListLogic.tsx | 6 +- .../src/scenes/pipeline/hogfunctions/urls.ts | 26 ++ frontend/src/scenes/pipeline/types.ts | 2 +- frontend/src/scenes/pipeline/utils.tsx | 8 +- frontend/src/scenes/sceneTypes.ts | 2 + frontend/src/scenes/scenes.ts | 16 + frontend/src/scenes/urls.ts | 6 + posthog/api/hog_function_template.py | 13 +- posthog/cdp/templates/__init__.py | 4 + .../templates/_internal/template_broadcast.py | 206 +++++++++++++ .../cdp/templates/mailjet/template_mailjet.py | 93 ++++-- .../test/__snapshots__/test_trends.ambr | 204 ++++++++++-- 33 files changed, 1405 insertions(+), 261 deletions(-) create mode 100644 frontend/src/scenes/messaging/Broadcasts.tsx create mode 100644 frontend/src/scenes/messaging/FunctionsTable.tsx create mode 100644 frontend/src/scenes/messaging/MessagingTabs.tsx create mode 100644 frontend/src/scenes/messaging/Providers.tsx create mode 100644 frontend/src/scenes/messaging/broadcastsLogic.tsx create mode 100644 frontend/src/scenes/messaging/functionsTableLogic.tsx create mode 100644 frontend/src/scenes/messaging/messagingTabsLogic.ts create mode 100644 frontend/src/scenes/messaging/providersLogic.ts create mode 100644 frontend/src/scenes/pipeline/hogfunctions/urls.ts create mode 100644 posthog/cdp/templates/_internal/template_broadcast.py diff --git a/frontend/__snapshots__/exporter-exporter--trends-line-insight-detailed--dark.png b/frontend/__snapshots__/exporter-exporter--trends-line-insight-detailed--dark.png index b54d4facb0bfe8353e19863b17eee837e4aab6c0..e3e93b3dd9678360493d495ab090800a9f994b6f 100644 GIT binary patch literal 21655 zcmeFZXIN9+w=Zh%fQrZ~RV*N&pdv(S1XQF;m#!c!G$BCfQ4x3*5S0=-QbMmn2q8dJ z1cXqeLm&x7KnM_e3khfP?!E6lANF~keeT)k%YFXy10gGG%{AwkV~+6~zcJQ&`&dVf z?F7$>ef##YsXw}}zi;26>3#bSEFL=mju;#a+XWx{;rePS`${_aX7=s7xKI7QvY~Iv z92t>dxK{UdjQaI^_hFwIX^oGU9vr&=SnIJZT{`~9mH59d3*W+Z^#*8PSJ%1)%M^}( zV%vP6YH;SSg2RuUx=qh#OUx~dK#xGgZ@i3kUkwsWZyzi;2) zn*WsxT8GDOIQRZ6HLb9>vceP?p(Q~F$$G}dR%SK9YqQcPX^O{*@^R}4Ga_*!2__Q1z0<=(AdnZrp_Epby3#D%q$6oB|}WWFU4k< zcb#8=u*&Mb47v0b7-13O)@BF)n*{d1kg$^VI-MCOxmriCkK&1QPzv}tk`dmfJ+#~^ z6~1#PV4b@H&)m0lXm8yD>z@~5ldVRI?V^Wa{Xa_+Odp$d`?q{~7T!_HR}uhe-&t*I zGd&neOUnl9__8w#5x+qF(mXG{QfQPm1Y6oWQFn$jaeJloxz3EF#YRFcdF4)sB>s6% zBC>WVJ}N%GL^4(0odUJ?_ilX0l}ui2y)C_`nsw+HMSW?pcI1~rv^=u(6RXmTST~l z#*kXLLseO>>so(yxwLbCk#DunJZXkrxBDkccO+mJ+Das1Yi8E{erE)1(1$LgE8S6P zwEp7G_99Ds|L^0r`Wh1yKIC@d^umwaVYH6{MrnOBMid=Lczsxo=OZc*D4EKdv5wc)r1k zPQl#h3$?W{Op=qfoBi;EM%5$sI=+~h5p=%mgqDVAOv}z}ZR+U~qk_P3&jB83*xUey z7;K5JbRC}B4fZ3m(|t(toWLvy1iAd=U`;otPc7PzwEN^7I>JTK3*_~}1j^6ZKIf^n ztrs0B92-N7lkLgU#kG#@Ntl(X_D*e7T%1uG9Y_iorB3Uzr#+VKX^JA~N}I-aoVp4n zn$tSFJWwHYZ?#@lYZ&)is=0uS1FNP;s%bhF2Uz!95%*hNjw+wUZRkMuqWqXghCO|B!R3KllKq zq_r*D04^SaLvM+qbyDRPs1=N1cLHOI(Bw{}9oYABl)@Lp*v}-~bXz)(3!mU-pQA8z zr*&&K%S)tS=iN8UebO5>)9>D~T+Pkd2!sw-v%>V5eSV4EU* z5K%O^W!f$V=&v0UJ-R;k3Gl z0JbvEw|{PkQ&`6e16$LP-TeOj^$|ASNIuz`qN2dBFN33aAqBqJ`B)KtMSB-=jkk`{ z%w}wN=7WfEg{{?x;zdAgU73wHk|0DP(Ye2JhR~$@r?1d~W?T&GFG$o+l6CfJOiJc& zD{hm#e%*06XKmJ~(As~iueGz9c7$`^J|E0%-|}=Fd}4p9{)1{A3$MkjqsH>K&kK*@ zgPu6ggr&O--!StZ8`JKn6N1yZh8_mEUh69rObd%7Etg=m^}4#>bsmY2Ey8bRx@X6( z&ksHW!%5Vd8mZ`<>o0bG_H69+;gf370*uWMxneSWcmDipI2x4y`B{UgJAp}ZZfMp` z7{q8!D~GVRr+%LwaiV@hS$=uS`i@lC`BNpRmE2$4p~Psbay3JtP@O5Vv;_jydaL(o z`1(9J9%+2Tyd#}33JxNA_0+Oso1)ViJ}@SPmn&D)?By!b8BXMWwOr^dT8jg0r13EU0g zxM5xun6<`OpC@MpVBd0zxUVlyw9o#kw_LbOY$d`u#0$K6)4gch8}tF(O1*o%Z1B?f z)o`|L8^S>bYXxm0W9Bf`HWb7VD06RSH(DvEm-jY{INxrLfhDG=6JV1CS2bBdV+;02 z;o>VBq(Uoob@gHrhJ+oSCg=BvP0?cq0N4ol5nM-DS!m_t?z}twwQeBF%*)JeN=dN2 z1{*Nr#A&89;;K^|-C3R14Mi8s)KbxmlAkg~$?Bq$C5z+$x?~`j8NctWmi@#^<=Sjt zyLPNYg*UAiH%&**S6L6dL+7UZEbFQ9dn{cI0m?)`Y@vZlkB{ttwc+1M)hyW@i!L-N zmD!Z%T`=g$H)saCP$%W?mY^W@;5BqF2y&zv>Ag@(k6$0k^s9)~Z_L$VtS(?om~~bGL7R#jiZ|`s zs$qSFK^d;Y+Su8lEb}OyEi#^toj*zi7AUqmKR3;*X(rcDVWdQaTvK8xhmLKE`I+AdV7? za?jDPAJ;%H35{>VRo0D7mYjq55xuk+}fyAFE-}dVW?3J zwjCtoZl}Uka~vDP*mu5jlj=7|46LEMwfssiU%w99Ll28~sGV^Klc33>9ym%@C*|f$ zvkCJis;DQ2fS9)2XiJrsM0*W>mJFURoX(DYFTaow+a0kRxK+C%$tShmZeb*0R_VK% zP>y?O`6b&C{1cN~Ya|;@$1zGdMgklb2=cq@sMhcYTGd3{L3)b4WIElbqlLnsqy0|!F8fv}O+z=ffhjJY|Ja4Agf$6X=+w&aOzDwu^ z4u<}Q8zUp59~vI<_?oQRfn`Na*a zY?}|8@VAMMvH^8{90HWb}Fsh2Uem}meD4^u*2B)roo}_AY#{iN56%a;MO6)i>Qm% ztu7bh@VDx=NxZ|}kenDDIUy(%iuUTlN)UstEJpU|;MS9NZ(P5AcbOQjoy@YDXo}L; zfHE2-1$`ICV!N$(eKt;Zy3H$n!9R+HwfiyV5qQLKsc!l~O7Jv!BnoMu(VisT9+WMG zUhUQ_onlR1%&o268Jf1*Y)#BHp{Tntfiyc3rKY1G4~^#>_F#+Wi(RE4_B`Wa(mO73 zE5Eh13sO)$FWD@$XnsZix%l^G9up7M_>`_e6af+uH;JE;;0T^y8^a-w`GJo;Q2qU))$ucmX&hVc4+fS*pPO6Y>{|AKv zf8?ekms|zrWOG@~&S`QNWAxXZ37Ut!D`qC#ee1T7$RvFd8 zlqh70#Spx1s&Dw@Nm*U#hCyp3tj7Z{0|4$@$-5x(Vg<}&sbdqG!PZM<56H59g28K3 z67E>@vND^g)+5rLDZNwM5mMw~Cc`!^y7nWpMbU{+Vi~T$qU$r$#gW^Km!sV$3JLbmff3G-flDsQCOVxZU@(Vv*h9G^A`q78>IR(TWTzu|$a z2JTT^wAh-Ugznv(pz97jW%J3MFNTm}tIw}aB4;NNK8XJkmC1!E@Nw;i`HD*Rb7|_*G#R2PpH5mnS z4N=9_pSFU*cOmFil(}2rXuZ5(?e4-z6}?t!ZN?$ZvdU!(EYS!3ZIxk}Xz2Fn;()aR zFow`c=aE}`T*qeM42cm?0fScAukBFQN(vK9OP_D0x;j{G8D||n>@99D@JnfhakBd= z#6j3tZo+IV+n`f!;f(=YMhmz_^6k zse#hk?d{sFlShynM}g(!m#-8A5Tph{btl)XnJ|BI<2p+zYa0O&z89rwmU0MEQ?9tE zC~nal)t+#x!VFUjdYhI|NK=?B)|9BLt*pF*_F|SI5#&;&$r9$eE>!CJM(E|qq4vn8 z5>A?%79c(FW_|@$X~o+<>(Ttsn(9ugfhbc}*2qplVL!FcXUdOWiOVp6=~rHYR3O6J z1SMLnJmK3b==@=BrSkOcfcZFpP-#tC!YdK!yPH7Z)Symg*2Ab4BWjLY%~pRc% zP(~$i+D$q{t6=Av$>Ds3gtkB8CtsI1BZ}7`3YKp*Hd{<5l$Cu3HgtEs&& za&FPHK51NH!&L8+TH(@%IYs6SHpGEe`=06zeHna)3*KwNFxM^h#yk?tXM?)?bb#=l zoKaRb3f%4t2?H07NtA{6UyfG%h(F-hjHqT#n;Gqqg!s2~XMpHOr5^lOsKI|@y4JRe z`vLE;wIQq$ z<&bT`pvv*`=J2_ETX4}+nhy=v&n0dQpmkaHb4w6oNf73Sk(=Z-{K^o-vwz4M|GS&c z?zcRn=z9wP6LcSVGpO}2b(8eZU0>=tV~uIr5UT&LZy_~wU&aExagqo(X&>|ur2Z9qB{A#hfE%1`j6VdWDHeC;! zeZE2J&am7it9RZfoz0zT! zDfZ;|Sp9`v00ROx1vgG@cV}#EZQ0pPGJNJ1BhoF`>WGr<#XV?vuDlxo4WAAIL@>P@ zz2b_*w$P+ay52 z>H4JAb2MY0+krpwV)cpfH%^>9sjqRAuMFuHL#Ycu$NI1SNz+e)AiuSlRzUotLPHPl z+4#32e8ZoEnQLgYCEkn0WE)8L*v`kH0sr8?Q_iNTNo-xGktR6^j5RRzpyB4lHYuID z#pG!~1Xt*!lJT>^RiVt}Gzd^!p50X&C}=-Qty z*Y0dlNy0LTRd;lbir@Wn%ho`HE7zRhy#!fVUVayW3YuB8^`E1<|Nhw(w;{9nMKkG+ zlY%?zwXz!DaL{gWbGq*~peQ@;GJDtO*DpYyjgR=P7-$^i5cr@^a!9W;uXIe)_uo!* zfXHPR&pih*5N!Y$EdW<8114_#_Y3+#fArp0Mf4q;A9>o=Q zuQo2z(FFN9&HRC&_sUYMblQ7Qc*f2%L zcRXE38@S{}TVT|m0RJcNIj^AkW)lk>9a{EGr-5X+EEWce5#)VELVpglHxp1xdEi|+rD5e!dl@9diA$KXIp}- zIC?c4N>T8cBeW7BDHHs6UwjQiOWEhdy4B7|HuDE~fjE+V7BMQN3VA=8zP5_`;zowq)K%sry1bT(*9ar1tvinQt@ELe!zNz7_z;l4G@=g zP2kpYYjSU?H57dZL3usWu(iT%Xl3@R>{(+PwA?79&NJ6Ya&u}6Kzx_pyceV2mCZR+{&;kCcBsN3`l{wTeT`@(rQdC^+^S&*Ix}EB&l*`8+x@q08jI1m+gn?@{*~)a@OMHAHn-vdOZ43|Z z`V8c(xYy5Ykk@H)9^=2ok;@S?JyiUk*QM4=%x_$pCM6a_pOu+8AQ}~r0leID)yebM zT}YKJ^GH06L<`2xq>1SI0T(apYKD~?UsMj-=KG*ukn(=GI_Avfhit5ltDx&oCmY8a z)T&@ZnU?rE$=cDKkq5XvD$=VEt%;IxC1u+Yr*Pqi*?8A!1K8SHmp^6G;_=4!J%Nw+ zE`vsZ+!-5Gg3xuD6jBWWE4+D~blN6-dx5Zb_L=|p${5ku2c6X*hB z1$3Ywa;_^m=-rJLvNNo7JHT~dFYUHJG_SwKfTAIq3Tzi}AQu$J<6wU2cMk>*&m*2! z41It78nr9y@;&+Tksyz!lW1i1(o`mTk4jkGDHCaq=DoE#(_90bdQH7o+n@)S+lCda zH}57oR=yLLUrf)gtn`|zhQLk6rrbmo{8tCNySqoK8XySqoDn6I#0|H>vTx9Iq<{Bj zm$fWyHMYALOI=#(Hh&i{QEZUAzS5~AJ7#@ZS7B^0wwu1YnF~TA95DfIZ7b!rN|UU+ z>$R37JuIC@*GY}nui5s^+dAZ? zcm9d(>Gkq!%nj&IZ9r*`x(>B0j$MXmMgEnjZ-(dR%V$ zg{r_UH9tQiU@m64pgT(kIh0b&YhH|H#^}h>fN7KfsU4V~pL-p%V*~l3&)SXrLNbqr zTwyc|2z~(pGPqX|+1s_)srk~c>OS%qYlzVct z_mVJQCWa!xuKj~SMoT*nP*D0X^x-7Q9!SFI$ zlGQ4I?HPzL{%V!GKgbE-=cg6_NBQ9YMSAnUHRJrs6<`aWZy&*Ezc%?~o1uWPUtb0` zVpPiQsLtz}f9CXmme&5iK8=>CZ=e687T|wB>;8Xzc>fyGf2sQ6U+eH+4+Q@=ic0<^ z)_;lhzpFs$U%K=!UHX?U0jTuwe0cDf`&-E3 z!t`{dqoMfReh{H2YPCLBns@)I6(^RcwS3g3qk{+B{|vZz?#DkDKU#Rx(!m33Fdr)M z<>eiVntKf?i{0kfNjd*Zpju_~7rVH`Uu9nDO;^`oZY}={mXZ06j~yc)3D!C3fUp*-)y?w8J5HVerBTqOH?{$SzX}0?u8BHN0EH}) zwVV2GUGrED@4h$aiT zP96klX;97^8>8z;4Nlh*mhzrmRTBuX8TC)PoxQ#ink+YO=VI3K9eQZ6sTF{@vCZ86Sqb^$J_G!Hk8p4ZC2%SW)YPI(y#|P=7uxKO481K z+n`WVSU1>t=gnI#O{v5-Ku;6w+j&5R*9dDs9y@s;%@ql8o5ZTS*@zzuAZimp^%04X zzFLZSe}OTT%lkIfMf0FM$OODYo!@0rj(QfRB05ajcw~Oo#bDjAb++=}v%a$}A~Nn2 z7a%XI;7QDM8q&idvRNmF!Bp~@OTPT@eMy2}_wioSz5XPf5l z|0IRR5xuiK#xGxmTp!{FBxjnw9J4Y8a7Wu;LpUVOD(|Ab#tvJT>RsOLA6~d7Dmv6n z^*1jMpnL_(FF&(8jHg%UbTBzab&p)xf1vgBep9iFyxf@=uPrE^#`H@R^7j|;Q>evN zSpPyyzg}UT&tSi?ILwutS)A$k;ILuN?H|f7KHq+GPgsZm)k#j~{SE89(bJ#2OASS<6|2;Le2-CX^4Tnm>T2?@TimJW zVlv|6$eR-u51%~wv-&&#MCf?i5WKh8#-rhFjMI&Q%y@8<#j;;#8aR`alaX6%FEi|m z>kR5v-=FfXoK6j1IXa2Go>=mT1*(2SBBD_V<&k#!EVsPl43x@roJ=a1g=Nvg z4sCe8C=+=zI6NF0c4(UW-0cyxOm_Aei0`kA%lW;;K60JrqZg842$KC&@N2VAkFsTD zabfYpgM*t}TkA9Y`EG8Y-&ZY1qQV~T8r}}nyYi#in>N+Bc+2c=-&jM~kt0V&@QB@6 zjE%K*`sU_fPEOA2?}fd^^-7cj`_oTVo_dSZa5mXkaL~Uxysm@*{ zVJ^YcA2eEK;h!6Qt4hR)_cu2ObS1CQW@mMCQrSQOnlHuO{op4nYr`A(=+8`$`70J5-agbZ{CC*LL{eEN=-VHCv*+K+RVO^=oejN z9LC?2-%gBdu`<0o8%gl*8XSBTwoR$Jg}9)rnWSLjJ3jBJXFP@e@N0BwqG{2$Hhp6u zYv`(`eE{C#+_`h3Gc$Vn{^X{xVYDW<%HIgA8;79M>rw%zu{^G)0hcXF4Rm)6|Gs5PRQ4`rt#nx+?cu``2mOc3nT&G*u=SpVP**C5N57 zE`C+)_UqHjx4PG>ZX>^DR}lpR zHEZeEsb`oZduZ-IDkJhZV(USg=qHb?GP49!&<%xJB*e%EuB1B(A2+Hv&ok<%(5V|2;Q@ou7zf5W!! zfrI|t^iNkSxZd7}VMq;G;zB=q8bTVLajMjKuha%!Z3f>?>q`{;y5nZPJS8!@SDtg{ zj@zb-lu&kdw%1Z7Z*0iQ@@cXLX zu-I$Sf&<47?fej0N=zK8s;VjvIWi)_y|uOd7Yyq0eembsi@F1@*-F2-jvdmZn8wB= zBR3z3H3ZCk5c#`(?5?b={w}KJcam-ve`-of3LlQoEjo>ST!@V=N~_BL&YdjXt1;Y- z*>5N2=MLdFcD~qbG4|Fb-*}+68jrXDbz8+`+I-9#@12oKO1{gdv#}7Y5qcZw35!)v zW-{;cz3&oLJXQEn$$a}MKR^F*p)+TmsT+uR;6`>{e|N8P>p2%9)X(XXZ2H+ID5#d! zI9~Q^)Q)~*?8V)~p(X^@RKRxKmq6&Ri*BP!zTncvt7sXSkq;lNI0O{D5cEuP6FwQG zQt~;h=*@>@h`Z?T6V`(6!ov{6erH}q|2HZb&z}hJGtwNz&R?5I83_~=q(5s2v#3ew zDRp;;9cNmZ-Zp=G-^|EpesRK%SqwmMo@*}eS{ zjcX+mB}*Z;z@pm7o_EdLFqM z86UTw_Fm)5#R$#EYyL4cdWQI&C!N(MQ8k^ORUg~dA#Ok>ziH)%i`Aya%@55%%n9j= z&h{@}{ED1WHyp7>uGHC6Vhamt&EhD7U1;EywO?b<@LLuVCKVPLk72@hXKq%?F;i#P z7UUyVC9rL|JnZc3VE@6^(gjcF_05Kbg@N?w1*>frYV6%n1k@Ea)Rod7#vkHlUsE6IdF4LQT&Q-bB-!M z^LrfL=LqCd#ZNkzTS<7r;cI_LeMBNnd9q=AT;JMS5V0YVCSW<~={Fg2G$}revgY{Y z^Gob*B@I~jAh&g?Hy^0F*=JO$PaO&VM~AB39X?TgRbF1%+dFDXH{Wn}ZX~gVGJdz1 z%?TTC#8rhZ6)N&zg^@v({fa@&85R96a-~|{8(#X^wbz%Onn#|tW~mva2eBIEHRIiw zKIR_kPLH47TdovMG8crFFlK4=JS2FctjlVtu#{jR7Wd|ZL2eHle<-h6DodyMv8rmw z<3FDheVc5``S|z}_{>-7R1{B%R@$BVWR!@|6}cM826?oudcb)LBK4O@!XL@$9hK&*6^ zOY*nq%f9sH_aygUsXckhf;=&~pI8r;+S;C@zs%U!pO@aBp~(#~;YP_QdcpGx3#rJ( z#eR3>-Qb=34;smCS#kRKkqwHg}AexLJtS6TG^a6 z42uIi z7IZBx)xsWXz7;=X%R^63T}#XB`Ey?YJH35>Os_~<-|}qj?eCYleJSPi_~cB6-^;OQ z&lCirTYd;6#R4P&eB0doJaBU=M~|AApqis;l>>DF8&;-6QQyi#jzy$sX+q>gaOHYm ze8^1*is}7hrUcfC%qi0wyN5*2ov54MhB?E)reE-_q-{;xhlYj%qosfCuXeT1$D>*d zoK_zw2i46o?RM3eE%p_t8_Z^N`i@|`gz4SB3oYucIXOWLj`&zBZle)DJBp@+L`Uz{ z7fj~PF`>PG&#L@QNSADwSy=6JyaW8vO|AX!Oiw19{p(kSTJ*xSB#1KoE7ITv z##T)pfu1!xTzz+n+N@Q123{)jxVhO%Dgny;Wriy=RPI`&eA}4UsikHRm#P6!OhtjK4#Ou zF#>2uU#f@*hzi-m4q}fjv9B7!zyZH#>_H?Ay%p7X@qM+h4!F%+8Nl0FPTu%xm*67;tlrlU{)B zc_-R&vn(Scs^Y$V=VbTZ3lMTTbECBlIM*5mBT7KFc5zl(<CZ3+a6L7a7C#Twnk018{#+@0tBq(2&cEAl< zasGv7GZK2{%o&+o49;}O#OBDVNnziqX~!q#Q^vk2{lUguo=2^toQ4L&OV|stmAp&X zb1ne&siHsn_~=Sq)};gf>v^Tz>398LyRUXx=RQ6DbJM%^N_+YZ$zy?=k7mCn`~eYm zj}97JdnY2JZ-#CtIiENlzk36(7F}SB{Ngs-+u~7v>&=JpPc#C{|K;`&FAtNkcJ+;; zZd6A{J)iuw93-K>SM$-u)2H4u;F+Tn&C%Wui|>f?%cY2+#Lte~hI8lhpP2xT~J5LEUTwP}7+RtC#5H8m-<$XXen7eZ ze%*auM|$3{MoXC9MW*)jsCHk&eTqShsR#>Qx%gQ`=zf5I=NiopXv?ctiWlCSITd{L ztMU&i&a1ANB)SXhCf)S>UDg~eNT;l59tqJaj5`!?OR6wm{lfY4JX~C&=Oa2(@t+Z% zC)g^CU97CWRSEilM`;y2993NBC-|ZBt*x1i66K@o2hjt>BOLER%+eK5oK;h^4dUd8 zsHhBy3=@xOx2CO=r;zJmHuVRD-}nX~PM&0IX>TW3551d#_4iDg`CUM+tzp#-gdaQ% zL(mtjfk+0IIK$Zm(Nsa=9-vv?*eKkjowM`9U6ZS^cGWKKc+dp`fb#N#(#YF_m?X^0 zPS(e7V=tQCUznVj2wLf%x5RJs4-D{xwX@QWh8LFIOYmmjv#4+BLHVpR`lLS_i+uRLksb>hFB0VDCBd+82{} zne9r^!NV?ocXcXc;sr2i*UxrPXW|Sb@=!drG=EX~T#K8?+<}%$8Fm}&|JHqx=243% z(K^Eft9N796#52Ts?5l3Hi@H}>@aUQF&!Humw40YP$Ap5q_<8XeXmk5 z_JXRQG38=o2&6D+$zx_0=1_2~|1{`ko&$6v^W%!%Wve=^CrytAPoFEB9J||2@>-;0 z4k%!rTt6S);N<3JzZqe5r0QkKBC-++=D`ibA9JYCJ^808YVYnh600IVmRVhUN^I~* z!hFl)`h0ne^Dg{ef&J^J?T5aZoywFEeD1ve*wFF^+}c+uP?ojV`cG!i?`4B)0b2e?Gc#GnPd7 zp?A}beXD;iAx_k{qd%T%ghb9S zn($_Ur&-`|rthRD&O-T^UVhT@@<{_9=Jl8sQVk(;kVI+&MX2B@+9*@{;RIeO{~wFb zR9#(ND=H-EqzaRKmrHx5AX(8l422qa9qLZ2bSQr!l_SCy`PNu0t~pr#V|={M4R_qT zjQC#ykNUJu7bRYNQb(Tnd+aR;*rlcO^Potm$MUbS-gxoZ`SjyLw#|_md_0}gE5Joo z?N(}DKQBd{;(X|S?ha8}L9wPIL8(}c0~x0gmu|heLJ1lVJM!vYnNPczHt+ceJ7;Gp zdf#DPzYEynmouuiSd)c?%LF|QX|lziU4`0C!`Y^`jIx`EH!h+Q|i7ybC! zt>+j40Ja!w^A)f)v+^f9<0m`YQ_^Z}r%M2J%C4#P2nz2Y5(_8ACYs)_Z>(6Ze>R?&vR*66#G>s4shr31la7O}aHtR);01?kE3Wf0_h(XAiKov>UG#sdwJPE) z(;Lw!<)9TXw&g(B>@+!r-FkEDTxiB54|oo4Df4iyPWqM&(Zr&py(qB-KBcg`m2*Qs z-;hy3Dz|-j_{eHtE3vx$u$Ca{k6uIR@84`Ze`Qs~XH4Gf5&6q?Pb%MavY4krW!)Dd z#{HK-z_;vM3*oLcHZV_)^L{&4Vb5;7N`&Am+t&+fXg=H?quD%AL(<5#wJ{NUE4ovoU_!uSo^Fe5^nH*XS?t2Qbk~PaAtGJj= z=m(JqUzw)m$vhQn2xlX&tds(BLc^}7BbJOzAzpklf`e~Z6HTmITKe#=?ukPLS{87d{%C0zR zH!^h~=Xg7jC?$6L(tPZKsI%%nn&)W5JO4fSggjeM_nVo~r-FRvDxEv6LREy$M{LYP zV^0gJVV*4)C90~WIk#V{h?p16V5NT=^0OV#q|x(yNEE?r-=lK6;~X4L9NIzbmPa;Ev?EejMLL@=Synfr5A+S~w7n2OJ^*jHjR?Ji6`4wUJJ=E24 zdE=sz6IEO{wH^7`9XcX9U8x_tM|Pmru2PkJ*X{(V6p|cIFlOfNXlZihgoG#x-7mhN zmfvTIuaOFT*p}VUfk`7ggSdxx?!>yi`4C&Q$Db*to)eXf2qfKtJPA)teY#V9E2*;^ zK+YlT?q@S?KE64S!BA9G%rnRe+P*(eS&6WaC@n38Ci*17Tx=Vn-oB-j!?6|;C=GNt zNAAN7y5_Nu#7O{zLBw(b(ah&lo^ZQna}07S5>ubS)=vD#JIS+T3A{N>+*C?z99KzyNdD4 z!1#MrZ_DQh*Zp`lV!s=wMy^Zcg0^${dCPn=H5Taf>1o0w%akx38;?d86aSXJTZdje#yla(nP<-aDAV)~L{$;L)Q;d3lrLc3Ce;y}T>dq)absr8UeEDKD9JpK=`8rs3GS0-R<7ajCi=|IkY7o6Et6-+Z z0OQUNIBpQD0kY(AlmCSqGO8Kg^aVjOf&MBa+?&K}#x9q@SJ743B{7$a>$!P6^(HnL z-%g>hdUTE31GXAhxNp;Fy8(x*jrpCDHPkvzTggpjm}&di%Q0k$$P|My;XCbGDmnqI^WQxYN2_2m03|3LCg$wpBq}yR30;$8V>W-jgu4OLQ)`>K_T`Ynr=mE%S;k{>V5EaihS7KUU>?Ey8gwa}5s~ z1YD6r&sB|82VH#NaH)vK%x$KVdQ3h*O$t!Li>B2p=H|Qs0r+QcRr4k_>{o}9-2tIANT?CVoyx0QKzAUO<^E+$Qdp?QWs#|DvW!DLk8igjs7vIFj#^=nD z3WrErD~X&1^LCcwwXdG z3liRrOGrd-6@;*JJ2+@t``lTpetg$;t$<6+sAq|)Gc`5EOS-!f|CR4QKtrjvb)alO ze_JP%VVLpQsyZQmCIBOEuF71AZQ-n`#RDeIcjd?zFln7h}o9oJP`)emuiPB32 zh6Pc{Rc#4rcl^3HLC4<5@lG2rIt0-M3g)pfDAe>P#CgeJhTtjEcj|CbpJ1^iw!DA`rFL}R&C6a@_MyJ* zY{wDDez1PPy*;`DU&RY)cAjP_H8g5P4PW;o#R6US1H^1IudGeNRMOPqp@}754fNSM zp?xn+Gb*ITe>l56s#d+|^NZL$4QL?M1C1-=Fn_O)@+Vf2epsv4`lS!pwG_C2ei??> zJ)|R5UQz0@EFd^gL{SL|rl=jl(z5RG0(ff>XroR&Ven%9{|MJ!=JrsZhV2!M?KSv+ z7UY=}suhdHu{5v!drq z4Ck+fDNWo~wl=Ik>S>W{b~wbGhUIe{6arR;6z$xzRlDfyW_ze9Ek~0Icg93V-%bnN z9C7EuG~EhdEWF)UX)|x`+=kOz9~KlSCP9>5a9)~~mlb4Y<|Wc)cJ6lW@10>gWA3#T u?}nOm=Anrugh@j8kwE8`oE|AwBmc?obTrSl65970-^J^7(x=U=A zsHmvu6ka}8r=q$5{ye)wdlr1i7psbck25an@=&V0zMJb*RDV(_Jb$X`nYfAa@YPyw zY}j3e{+aV<1eHmOuvrJ=nLn-z*r0s!$I8NfF&Ws;+QedQH>_;!bEmR$Q!2#i-;MUR z2{W;F1yWr!dDc;Z<)Se)`~5e+U)^jtGJG}Jt>3Svg($I_oM1DUl2f9cuv?pHF*1}9PTVLx1=%Bzh zIwmIi+x2{->b#5$t9D$$$1{fI4%)Pthc8~-wH^CCyv{Lw5p-^sqWK{D>sPfDISY$J z44+Q!)O(rDj?U>Sx8kAogDE%LkdTm3A@GmYPbHHC1qF?Z-R&iriZB*i4V-0Ce~XA@ zr>keWZH!|ZqRvoJHRzN$psF5ZYFb#V;2bJYXAHBobLm=Jr>mJj6Px_(!6CMzS(UX0 z_8wH0W}1BW?@yw0!Id|b_wV2D?3md0(Fa#_a`jtR{XugRABWamN3*obJ@{tdod2IP z*nejG%^x4Vlj|L^?KWc>YECQJK|(jYk3U2RW=ptqV&uAtUUTy752)hv8})U8ay%#3)EM0b+!{0)Xt7n#{jZ-d?<$H$F6 z=(8(y#TVRW4%kUuAob!iMF=)?GCZb7(!D>jX&hwtg*?#3okNiekrytrkWX?wfH6v2 z>1KWRx58zUCD$*>YD{^q)^hvWG|@#2o?6Rt1(vs%6Jq6`}z zRvTlvSvuKeIR)=}CY(ep{mW|ee-S^6eMS9f3}8uShk9=ArpE~O3L#;gQQERROj`NI zwUl|1eua7JvIlorb_(|26^`{Uy5H^N%q67bNM|!?1k5J zKqXdlMA$?fJh6TZb`u3AAs;JCpXMEVYh;dO@**dGneWFMvq{?G5|f0#Q&H_G3%gA| zP4Xey0S@gy)GmPiM zAf_wn{jw)bx5H)hw6(R@)23JB(m9`G_>?m?ok^;4oOqqslVempwsg@HO1mg~6OOB7 z*=k9jPIcFyf*cV;xDm2J2R1`@#N*H{zg~FVmJjXha~R0S{*>oB%w0|9D(d`Y<~>TQS0$wAlB%bxTMb9!xd{`&QcvFTzvyjrg~?HbRkcqvE! zBL|~!$o6!&3{KPkX`_nQd;94!1)Cb9X)&gA6_LE8d{g!90oht9cj-4v9fN$@Ih(VT zf@|Rr9Fl>Yy>O}6qThZz&we;fdGGQiV18z()nw5NTJGDoQ%q6 zQC#6A97>g#XESs8J`~QJHIg|sshe7=nF;>j8}V7y5uy9bqmSB}x!NK*N)~0t>Jq=< zm~S2~Ec};q*;ApknVJ|67A%4~PkmWwd>{DvVnbgN{pJi^5Jxqj*bpb zTqQSzgoODVVTI=B8RXD3Gnd&8}{z}k(H2NKJlplOsnm=wORpW>occbz=^Y(M%1K8ou(D3yl zmN42_im1m<>AKvZm>d=>s1p4xE$GYCF13ovJ~O`ot|LVi!HBUiH`+smKxt=5eF5-# zEK(_kAH|xFO|THZumg|&ss_fNb+|F!-PdPa>1^Km;$&-_ki{pYnnuAlG-vDNU*zsV z*8c#(bC!%#3zs1;jo~Wa%>QD9HU~cGYzE^ySQ{jjXsGIIzm~Avp1F99H(#&VJ^iMy zii$gl`cOXXrjfq>SUwCX7s?h>KkeQX6~-wd2CT83o^%tcTV%E#!2&~@1%P=H&?_p@ z8|GnUWmR@|p@{fH!#Pm~Wmam%+P#cTU`D#fXBOUQ3qyE$tKG6=Y{zr_Hnu$YWEb<; zUr|vVvt=3!xXh18F>Et-v3o8=HYdyco_ccIKzh*JKi8ZcuHaB?Hfb&|UbluDxjmlB zzFqvtyWYd~hOo^>HCpV#h3+nhyq;#sd~kO?7gXYhU-ez3m^Agw5J8D@rP#hFPo8*r zg~*3xR`(tiyX0nRa0oNM?s4PJ*Up2fQg+JK)C{ZUjr@AAHr8|; zgjmpZlxP@t6MFpSxT9Y-VKl9moU329iLSL>RpH?BS;$=O*0C${$D(Db-L{0C7M28z zVYM%|rpgq;ic50%y>vMnrjLI|Z%mh~wujO99?u`AD(#1}y)#2T^QM51FQ#XS+pMhh z;qv|K#9d1y%U{^uyVye6pu{RUF0RtzFrG*h%6o-Aog_HY55vsFG@50UZJ$7b#EI4V zl2yEnPJ@ESn|?08BEm>&v7oeBJzYvnVsy_8d^u6RDkf3%Cw|yyWt2da-eL87mcb@S z*6=*2a{ZX2Ny}Y{@Tw=_NSnoaQadA=BWaf58)LnSJY7TUIg)PFlnpK;`c1>SgUw>8P9@n9FiqS38%d% z=UpUBQ2(~bezz*8isbGwWCk~l8O@IEubd;g(2&>KvGovX#6Z3y(ud-1 zi4TfVeS&Y%FSQ9|D)b)ZxkG-k3@)?0-v`UUMO<4nZTpg~T{~5mYv5R?1wy#ZNXO>X zVS_#7xXgYU!PqCgU*ggyn?js-m$6=!^uRDeZ-}_hl&p*FF$+0NyHk3{<76yVXn$Jv zbApg=SeEk+xA{as|FL7_bj8B@tRl6G?f&JvBYuP%v+aTmmmD+C2j01cM^GN-P z3qCy55%=|+|8hcaec*~GR$a*E!j{eDCAsqUB{UFX zcsrNZL;PwZoLswL^4NB2>8Kp7S?hf`G&Hmd^K@D(7$07D1(3jjLh1z}C08qZg$oXM z0mws1Nr^(jdL;W2CWnfKa%+AV**ZQsS98yCx5jIK)^k5MC7hr=E=UuGd|2qKma8v% z>ejDVn3-c>N$k)YAl-Jy2(XDeXgcY165NW5ypOgky+<+O>Hd*Djvy^MEVhXX+vXUS zW|@aDb0e0!V;%kPEb_j>pmV!hK1Y>%ChF1_@}*dTe*2;02y`t-zs~I9#_`B{yd(%iwv?e{@omdQsBrp{a56|cNFR*m&5FcNQ++$zx! z77=*{659@DX)$Uw(XCBDoZ_gWf-9VrwIO_o3uP0%!c8Q!&B~HnhPe@N;{Lq2aqgx{ zLv;uGYQyJn2>CaF0zQY5$BUWBJLL}a+>fmz6MTuHh@CM5ED!wR*L!??K8K~^eUPKg zU@3($U`G;|f7#1Nz$artA4Vsp_Bfuj_ zudJQvJOH=p{j`_@mE&TRwgd3SFo}hoz9h*&#+9C= zqrPgay;EtW%WA3PtXSo;mcM@^Ml0KPG*8rHJJun;w6rnDEFvl~S<+1(zyc``jKp$E zxX0MWSwPpmq}sZ$i?K?>33w8H2B#R$%M62pmEFGmKGs>x=k0xrU)@R^NuB$5{YiR6 zQZzjh?y{pyImu>h!il|et`oN&2g^YfDZAL2o}47=qXGi_9j;}+?Esc2pP4+pVq9u$ zkdYJq$e`RtFGVi&guL5;btKtWm)Sc|76rHw_qqIh4}WZkReF~g;_nWy_^r|~3BAwr zyjtN`E!K%I-bo)qsQ0a^Liv8(a+8z6YP+w>54fVrNk6i(+0O-IjTIu>Bc@T!-pgqoutp zTu=R0J{}0s1f7%e;M^m!44y#7DVTN3(z;;FQ9ug5W;bRiK8^G;~X~v>xS-yXx)rtS-{JbnOK zWXD|3^ZB(g!$&bTZ?at9i?hTj8NtWWe5wyuC{i0e!*v8TKf-#>l7YU8)Zy?E)=#SX+?I!KN4>wH;K)Nmh7iDRr*I*9%i6%vSnwSA%CNjbm<=($Jo zVc3q_^r|a~PK5hlij=qaiJc|Z3QuN_H`uG(*JtjCA8ps8zgAA#m$;uhl>rJq0-Baw z?>WQm#wYf!`-Hxyo}3a0vzarurTBUgvg!jAitDWAo=N!^B7sx)e#cush_2d-Nr()` z`ZKM&5^z%6SGW%_ZaW*zfzsr)kNI>yk1E&ubIVc5QAvJ_`S3x2nA$nLc0TO)E6CdF z=~nn2#*1%Gq3?yDT|p#N66bP3BOUpPBm3#Y%1U?5jvF_bioc*_Y3_?gp&- zwVv}?o0s3Fw0~T8^#)L63zcm-%u@-b;draJ9=?h?ViD|OKUhQp;8W^2?hfFF`Ce@imlYCdDT`jH7IKJvca6@MM0p*rGR2TOh?FKe;n{6ePOGJ6X1h zii%L$auQj!oJ>|-o*mrZ<7Woy88}pvCRYPp*N2|)@=6Ig?p83g z^YU6hqs_0wwS5bhl_ix#b$1N`UPXFy{HduabQZJMQ!LbzB$cmlLg9 z(v%Z=kPu2!NIfi7F}i8F8$9r5-kU7Y@5Rwlj$5}JJ^3*3KvMJ=2q%kv>oo zZ=9MLO2v~1Tv~=T%hcp5KsIlP61S-7FsrL9Gd{DBaTX@O)nAvVN+yMpRJc5vtcNXo zW(rZ;4ax9%IsIh<6?=EKvvVfEp)cFuE+5Gfyz+G z>~G8Jkw-E^v-Kh)8O)fKoLpbZlP8lPz?@Xkyi-u<45fJNgD7;Dm-plpHpRuMq&wDb z;W+YUITo(~Wv+p~tEa~fwbx+gtw7FcYWl#~^!X%KETc*=?ungoXzGTr&2Po(5|rn; zG*`(l39LiwpR0ce!iqWSJRA8WgUi!zSd#92U)vrJQ?-yFw8~o_k4^db{ zUEtj^et&}h+oWf$UbU7@c$Df}_4~J3W7CWN`ke(Ccy&Gac6760WxHx$6);hQO6O6R zeuhbnc5qXJL$N_WRla`d10hEzwZTAb0Ruyq!)Q2p*uHvyQrroBVV1*lG(4#0c#l&$ z&}gZcRRi>}JcNaNsB+PQ`;E=YsdtP#W_{L7&Q)=`cGOctn4uEn3P-MYf1RMbsF;+I zkM>8$(f0%dP#QF+J#LrK$euIQ)^&thJ?Z2h0l`VdrMJaLa>s~ zLL&kR%j5Duuy%6@Yvi%@!zpDJ`Ply;SDXR^5C%#Mh>s9#i-3gb>~^_;iSF2nOL%kF zo)!9%jLNf5NJrk3o->d)v#^MXiQyQiLxtAY&7VF|&M@#Kn(g{@)AnsAmA`CFqQ$H2i!%aGNu|yYKoc;7B#J{Npu)hFC0@s)jqJTm^5w#tAjM&-Z%Xe^o z8NF!+XijVEU2eq3Dv$1tj(ZSu6kwzO_)5q9<;EkM{aCNwQJs|~GZtn+$jU@iwL8RY zCnY?HF|UGn0^{%PGcLB+deojYRNMYjs8$*@9cAmUS?^zKf3vMFKAJvHPp2NuZou=*tFt0OiWE)^Z4`-;Tr@e~XURs&>z1Y%0*1Jzk2k z=0>C^`)_BaBfGo0Y{v7Hi_?_ZSC)XnG?trS7yWx>!?EUxBbvzA1mW~Nu5syqFuPjV z&dC9_n!0l|2q%feX@L06*u-7y1AxN%z|VYR!bc?n7aDs6uSo&&E|eCJzo76&N3&Cf z8sMxJg(!yYLDG+HBNib&br3}|HPYSI2K*OU=kko8w72CPxc?59-rHep3K6Om1}ZLN z6O!V5G*L*o&o}M4QVFN{v&Z(ub3iNh^XieV3%jG)I#MP5-1%2fCH>`V(LeJAV0E_; zJ1Yr}Zd*f7o;;-kYkzEWjEbInX+=!%{{1*95A@|{#&su-M?4~6(K%1&*2|QrVi}=M zPMyI_d=DJdfiBJ1^dZ2jv-w5H-UGp2hk+ly{jjMlvTSE3S_%G60ibwxv7U9f?kr=| zfJuJp@VatX*50Yd@6Bsy3B7r!k!Xsuk@p?DQ83e8}D-h|xOzx85vL$$8 zHMT0H`+X9xN}?}G$T9Je>B@4fKeo!2CR)g-*4vFlI0TGRkyFe%(!goDrlz&BG89W$ zeO5k0Xzx9e_Ue*%S?RMKEoyxv&#(sg5F@np5~?lf)DKT#&65I+p~U8(aJ#`8y#%on zBlq>Yom%au+M;i^d3Vh6ikJhs#(M7|(8px`ykn!I={a!T_@OJ9S`5bWPxFHiWWVq?ZVO6_e3c+(KXpJj+(`0VaAJy8iI={Mc-QmjT)e1# zq+)8F%kBlH*g8PD7@O|%CY{D!ZUk;?s_ya9x=v8tz|p|7NTx`>;QTsFP+VMG$lhL? zpM?MZxeQ-kz{&NCE$qQg&>tj*?tY=~Vt#Ejx8;B!@x;4fEDtU?yE-UOcdB$hh$ifc z>Y(te5aMPP7q8N+AC|<})Csz)((2ZH;5ORO9aTKriH^J?yFFow8P6XF=c81m{X zMLPxRPBk5Odw@@Nddqaq?=0Qt3SjJea?;azt?divu1e__p`_S4ESUyuCaJjNrYW3a zAj6ys+k`o-Be6BrZzjR^8C#v~X6x>v+!a53r3#1Cx9hQASfvE@xB-0x3M@BbX>()c z!7PvyIwzdCcw$+3#RE8HyzRh=qOBbP)EU0X)gto%I<^tY(T0#J8-zgI@1y6Q@u8eU z3e~2AE+pM->dBapYh;nV5e=0q+%vne^~}tIs(HgIb;DL5HO+dvtWCLXl-WuH8BYfB zuGM@N?zVP$x|AEN81V_?KN`k~OK`ORYVE1uVpNX%8N^k&>UgAMDCs=%Jv)!wdB7?H zcI(pnzk@&w|JEbK$ETEMEQ|kEjP$|<0GV|xOUritR}Bppn=d*b_8+v}cdxSqpcMW% z^ul5PbWzlNv%Ev%jYqwryYsIY6uvc=lN$wL!U$-5 z(m)^R9BK`TO>}Sb0@2X5wJUm5SXh?ei7AED0t(?!b79;bUa?rY8k7SBYdw>B7?yA% z((eFkH}*jtnzs4t8XC?#vUC`Y%OqNTW?Z- z{$*}M3S>MF2K(l#vHc|udAhHLJNO9_(oU(G8`As9bm`M1Nw>12+nKPzgLM(vWP(Bz zPvw)zNl}}T@AYryMf&S@AP~wjXwPHS1Vn*?qYSO=G0doKnQc^lDKR~_z6P?Q}r}P7W{f}CJ{|aUQPxSY%KHmKQ)s_A=wf~yh|2AX)S1bX! z=D(?K{L5DVvekdBf&I%%{^ceA@{<2tBmUR=`2WcIFxzYp1B|nJ?j=CVZ&;?jQuPVl zo49bwYpJGfXjFQu&Yx^1}`X;t* zU`_~elLkt5zU&+|zJ5v%Yx9f*^MYWX`j<}o(7u_d1|`BpMMX=zMh~K=-uHrX4{Pi7 zFne<75mOLoqUp2=KZN+~&olWgDy;858dfG9=ZTF(@B5=a5^c)McRel^c--gX%T_mU zr%=8TJ#!-!!Q*UwNI98032wGU@R`_ol;+DeB|Myqp1yz1A%d^`+U#gxl{32ECjz#G z6FYkYcgx(|JX7;!Y8{5FM>87K74Lj>z9wbs8M?FbWh<}jn!M*VYTpp|?Z4TV1g4n4 z5Ncoi+ucx~xvOipr*f-GW{XJdOryD#%M=9PxE9`3VTHu?*wfN`%mE@f5e15z`v_m; zA856zb}DbS%!`8ODXX69^{$<+`xlcAUs6Q)v@1LLbbid zKBb1|7gwJ<_VK&yKG?Mr8Zq@5xjlXV1aC2E4a_2L3e1x9q$vUG&9a5xu;XQ@c#4iR z+5@&VSRmEV;71+6?LzO-_49#7CC-(gXbK6mdKrdowRDv&^X^NtUPmNxv@f5YE2Y-M zzGyEs7N+IoFPUUq_;wj+SF)fK_U_%goxgw>Sx@LyjEKNTFdS<{h2 zWn1J-O`E9_)_&=uriE6eGV^J$J3m7XGQf;v)>`yV*}}d3tgWqEbGzgnL(0S)66`#O zDdY#@rQfcGvcFl?MM;Q(fZ7pVv9F4${-kassAslwB!{c#>bG$R9XO0zP~uB%at$k; z_m;xjRKI`cS4>rpCC^0yQ6>ilbEQByXWBx--1})~UB)?1clq8%!KEcEHiKaHciig~ z+uT9H)a6(v^2XQps2~=Yr!lCTj1qUhTSj6aj|F0g*3@(ePN-h76$<^1qiDra;q&__1oJ!X#=HW)*_gUz<9u*b5 z!^2UOZPpz{a(h+zBr)9y&#+WWG%^CZ{54gHGO$^Dy0Kzd=R1<|2uNmjLNyV46OLS{ zI=^Whn4js?0V_A6xL>kXA!?=_>FEthw73!7CxFZxg zPTKAFcMwY}SBp6Deh@OZ`09+$el;)e(NgkE53+l8zs&#S<13!w!@ifz(rVLFQ?HVw z?@Lw*g}2vxVA1cN$%h07Pjh@xAY#ibIm2Tg``I+jRdfYWO8aDMQ+SlwW?Op?2N$!R z1%+kJI^{4bpA(zg?E6r-A;~<}KXdL4H%v8X`cHEyqLG}VNv^Rcd2)^Hr=;Xa_L7z1 z=XaGGdR%GfkDKwrsC~_tU&~k*-aK zVFEtKc!;#t;I)+k)nJ8l zglUS3BUS4=%mTbqQXpwpVEh+%olsR?k9@;of<0Pxe!hQy<_HU^aIftcALo^oEz8Wj zUq8pj-7?;8@aNn$=&^5de)!RrlzESi?GOU*TNfIttmf2txDhZC8650$aANw^)4Ir> zfk((U-t(}`n2QVB>L{3zoehch=HY*A=Dlz|?p2ICPL)tw^oGL7#^!wgb_iRKD`shF zYgjqu@2IH7p5M=zL)^B!xw-E=zEd&%rNyYT{?qd>b!KLmhEYdBJ2A_l7AN)0Z=J?^ zcXkfyr6wjO-d9zbH-DF0TK}ve7k0xvJx5w((fOs-4r15TOByY7f*Zz0@v{w9aa`jVoektq0Ug?b&Ue)~&at@7OnC^sIf^t1NESs2{SSlNCnbEJe!I^p-U zCliFkn3!S*uvtvWQ>?!3mR~1I1xH#xSeIKE)t{^3EgoKZJig?$T-O(9c#``3g&ZTa zZniEZD@*dwb!y~(l)miL#DpiYrE{!wq+3H{SS*LaU!fB*7QKXfmP;uTQ0=B2 z@sYL1n1%8RTQ^C_BI}no>_=!UUbNnItRZ(HE}FuL>z1`{DJds^K!t^isIRQe*29ou zbbr%zDEF$}+Z@kVm6K!UHhT$`ZjMDZ_P}dK%+%MH`6eHCyEyN|;wX{j$>6$l<;tIk>rBxH7^WLH zZVaTIDNwk^e2D`T+;5;k%mUL zM?U`qWMcB-*>m3Nt6qQ1o8$;-djJBD?bz29BsyA0zZ zx-4~=c+)g!d)ip;OeVc}J6`pg<#HM-o{8@7BQtlxv91ow36J|p9lt-N@f-w(6gP(7 zB{ikmj$aZba0tdOuB<4MVEoMDV!@e|>Z+=W%F3y!iGyv97qo+-GOu*p2%$DFdUp!1 zHa0$0&wR`)9!?Mu7l%EF4h%fMk=wECoN}w#T-a+b8FuSd)30B*?CdHo1;kt|)Mt%g zU+#>OeE&DZ?xnAsTug4R{pOD|9$j4|U%wLO)NOp5YY zvbxmVtB3O}d~%bQR~|!A&wNF~m#0L5<92NG)?l#|_wS!SzjjU?$fX~B7xpTAmHfD| zPo=;To6i>mZ!pW}XL58?4z2cyy|~zJD8&CjC||;Fg}*ehdEOPfogTqA)JI;&Vy98F z;mz}FNhT_f+?v9|!VnRkJ{7cBM^zd+82dMtPnTsI1ZXpV*3l{3YFr9X<;q8oZ2rzl-)`yj(ce{Q5uA{`Q{+Qx=2*M zqod7dG=~Vh<89&ZtgNZg(bloCw(05w#Z)k&oxKCILfw&!ikuunBi(VS+jJt&1+I=( zS5>qzgw^_`^9wpKie^5?hUr=QIK(|nXg1O9zQPT!+YT9Yh?hD4{;HK>% zJ#jL85)xJ`U!FhM&YdOyNZwe+UBfiA{7nZoY(ijiqv=zT^)JU*795)5u}{>Pt{7(mmyltbZ9nYE?;)k!> z&H6F(m(Q~$Wj%l3_U_%AQ}8g-oZmrunsfh#Crpy;Bb8=>Sdq-1jb%ccSgQCNOgB5-K{AN(qp5Cs}oo3MtTv9Rn4d$R2qFTal6DnZaV0QpY%Y<6_DV*??K>yxh+Sl(6?D5+=?1jNG3X0s!H)dG&mu7 zgoW;Ww3p+08McgtDfavY>O0EFEdPVfs4B-Ye^pYoFW#m*c-D?&{PQ&M55(l_<-xf-UY!v0?J{Aie&zrr+NXsnfX}|kRyuxsM>X3a@2b&8seYRNm z?b=8^C`~Ysb>&}16e%dscJ_8#3adpyxj3Rs6)A7MEVLt`gRb{)N5u;criLVBhlD&; zMJ-`47>1jYMO&aMDp5jD%_-kNJilV%DI(%WLo$Mqg(dd=qrtp9K}1Bu-&8BvqSj5z z%S^~TmW)-h^z#F5Z_x_B2xq1FWjM91EI?bkoC|V5~6;>(l z-|CsasjpC)b4s=PU&hBUa(OJ<;BZ_X#+C6hc2-TmFoDufhf{c-oZ#{9>kHoLH8nXk z&{Xvc=MOeFXDVxmc?45$f`=SiT3A&+$e&~06xt&j z_v?H5@W9NpT;Y!w@|KQ{1MB-D28KD84#^vH7zF_eC}oP1HIA-Lh+?Wk$jkQ-}C;N_#5vb9_CQZQQ+H zw04D4m>?3kwZd!q>BDRP053V1kC>*Wh40_jIy!a|6QwbR!TqbS%B)pr9>_ap&n389 zx`&^Ue4Cq_Jf%6KI$u7n933AA>26|rT2w4JfSw-Aj%xCV^+>G;*57))x3TaeZAhY` zathJ|HF3|l+F?-&%g=+zfl*S=q`)q73RN2B9Zs3rE8API=O%@FKqxbt1qBg3Io-}r zQYNoG9(?rVG`Nf$^~&nv;3G&oF`vmHc+FuSWpFbxbs;J4TZWa*6nyTrQ)lR2aCLqU zytB1+vMq1}yDCrX3|gb3 z0FBeqU9>3Fot&)9b+j>ZIx@~Tevhg?nXPh5U>vHgt{3PpJK#xKzhXg~$awX}K(T!I zHjALeL#_uPS>0=mH*hoD{0rKVXXNvOjt+le`~YYfN!{%w4xyks%Sc5hdo@`StbP&MeVeU#)u9z9J&_f-n6FXDYJ{ zMbNZfDd5Fj;fwz{Y_&C(JN@N@`6_70+bfDIs31sjVeVJi0v! zx0xBl>@H>Dh9xqE(T2~+|WXHr&ImTeE@tDL2d zED3-#%=#SVg3{MdpB{=O4oTd}}oJA~%Fw66FsEaHlpy_Tj@nou-yf zj<}9JeKb-6w#j5eb_WxaLV{Q54cW(!A6Lj9ZF|GUZPJt~aGg; z{)fi#V?KK$>pvR)zL4Kr?JSzEioKU5HB_w>v&FTypYP@E%?K?)o1Li3S$M$fAEn4$ zH>_5n1*7@eX%>5+9ho;;$?F<<>5<{C$yIS{6x=6$!x0B)(!h9NkPD z7?=yVYz)Ab3KW{C%daApO$idnDUd0T%9IKnQz1GD-@0YjXuB_5oY!_`EnhwJ`$*Bs z5}ib~2z=B2t(LXHF^_I{n~byDYaU#ti`&D#wOGa?Q_CV<{%sDXKfqG(t6f{l9HyZs zuX+?Bph19OXH)F_lvZ!cYf!g655M_{A3%}~AM`)tlD31N z*~nW_o!1sj<*#t*8=NeS&(hoYaTwS6x>=|%kZ2e($`zuDvKCXh0ZV=N`ZW^$^+~1I z75J3espn+I=dpye@qg~>3aa$--llWN^wdyIS4b`5M3H17EoCW@!B)%N5h5>>HZeDnm=Zj86;?K zCMJ5nsR^3$>(+}~gFx>o?aLVq0B#~}Y?Lc5E)G8lmy!=g*l`3>Ovc zt*!Z&ik7l@)RY%rYiXm`q;&dH*$rj%lj8d3-?fEuY%MPOZQznnJ~)sQHc)r@?E1IN zh9XKI2-KD?C)jK7sNNKHo@ka2KXM?|AsSme`Bdw2Ej?DkYn5{z*vFJRPS;6~m1b9? zo&E^@a-{T~QkDO*i?d)VtKRp*8$-p^$mV0?5DVjJjfS=Nf0~Gz+1jMhpMP)r@Wr3B zdLP%%J{@5jNEVxB?-r{HOetB~E?V)zf%Zk%M%e~S)cXqt1;{9#2+*gBHf0Sxl^)n+hr1%hL9{%lS zQasuFK+C0gsKC)XLo;i|!n{~9pr5wX#-5CctRBHNC1^KtL1lD)f%o;!b+0~C{ z4OHOGhtosy{FT#}8^H1Z@MIod{K=iyk0E(!@+@&FKlE(hdtW?Rxs5K{@3X!OEyi;E zqj4(fq#nNup3e)cx{HszPZV84{V#HdeON))MGEwz+5g}d#-jiE7!4ZTz!578NB_^B z$?4#HjS0M%aeDkP*~U^`#!FhtYOwvb3##v46PSrlNZ3f{i|saZhJI3?{Fa~-QFFoq zl=L;S@LOA35z2BbnRHmrgSvFXZu9%s+kp(FrKP=HRYg8n*??c485g!t_I;ai#>U2% zS!#3Dl3U;QCVrK8$fN)B^-T)N%*KYTw8o9e=x*aZ#(V{CV~uA`Hn~#$pq;xa2{R+V zf0K!eOPS5`>iRk(Q$E+AV7&w2D~;?I;^#;2?mK*a+2Wg|%9k5Az^}7^uqNr!cEBk^ zj8-%^Hf{tuUkDr9`Lm5vqS+(ny8J-H=q2i~{L*5dNnTGeEz||CTDv+s$5Sv+p6;J_ zjW{m&u^NTed_20d^_x%YC-_YQTu(%VFel{OrDSH(c z1A%ho^a7-AObhV7MeJ(zW;2s7C)neN)s)HW>g5~Ie_^YzFI%6^ zx*&SL#n$HK_g|&^t}ZUhPsmav>(nuH0wYkjyx+V!u(TB$33*;@p#q=BTh{9#vZtNXh={v6TFqQBIJIYo2F>zNKmPEjZx9 zDEGuaA>mgosw*pp#@Qktf=rD5ed)^$*@F$ZV@YW#H^S4)%Yp37p+)`54CvQBaC~lB zn)Xktspy*3{{3}C1Sp*++2XshC!gqNUkPJ(otyg#1iUN^W|kr$Dj}$?!<2isQTN}y z@p^7jdUm#wR&?^TuhmxVMQ%GWTgv-p0K}aui8Gb^WO7~4|6yt9&u6PDN$RRdwR`b* zu6C}MxX8+)+020pW_)dCxGDYRA2z<06dP-)Y4#jr-P^rh74uA~N-|h1+Iq4>%31ZT zAx4wq=H|zbAKbAh-q>!ClF8?St}QHP2*097-q+o`^v*le$WHaqA!X@HAD_ky3K5*- z!dH{T)HZcKq(BoMp4J}9Ze(P%-+u&Ia<)hNZ}fs~A@{@hLqx=Ca?)MKomo=5FlTuA zT&WkPs=w#e)k^`CBXSUMl6m(0Fm@?I$Kbbaog!qMXfvv|8`SCR@@rH4{mOjzjk*PF za-)-?q+H}~g||m_ngP-0?dRV*uU{McKlRkL@^5rYRkzMrz03yIT9CZX&({@i@xnhp zJ`~y5%dh9S1AtTPTGm@f$JNal{Mgp?2(sL9mQ}_EG4`NJ@q^l*#!=9kv_QmY39j5B zFYg=;{dY<8tK3TqsXfnv!fk4pFc@Hdz+^H)0ublHdjTSbs~WF#c&cKu0pgy$FT^Ef zF@lBvo|V922|^d^sdIq`Ql6AdAkS|M8%cL}I0oY`LkWv&%l*534%vZ1p)U z#Y%(K?KXB!=Cf0#hTFRWUPQ*oGvVkgTOE(Uptk4y?iY@ml&kSle$00~ZX@nkx*NwW zY_H!@^{<>s=ZHdz0y&!J3s*Mzn?rlw5{ZUBQ?sS9u`VwUJv{ue>dkbz>PT{JeV17g zki<1IEi;axi3zQ{LJEw<{P#z!I^)&j_@9!4Ser&0)Zy@Z{D2!(5H*4N(* z`Oq9}K5}j;@H?S@XlN<_ed8`Wr*X<_pjfqY;6}Y z7-93h^MXO96M9vJx^`6389|;Zuaxx*n~!_ReBqToQr&P6UPmWs$Njyer=L0d1_wI~>1ltp5( ztFf?mwIo&6wYymK^u#^p&(CS-IRU~K@-z9Y*|h9Dx<9nFwUw%_C#Ce^%)f_=1HeqK zGc)r=cVXh=mr(UBEzfNQ>7 zTP`fQMfb5f3Wsv{@j2;-7>H7qS%eIGGV&??sN*Tu7zh5C#Iv=oo42EbH@n{9Tw+L% z%bS#~607|?&Gud>p@((BTu6bS&R#cR=$!J6p#Q?m>^%4HLbaZ^g_3U0S-F1DQ$ZuG zOB^s!QPJA^&6GB|!nUm7V5JJN8BUoh`4@6I$4kR841*(Got;JpD<9I*(ulU>wl+3Q z%E~~S1?2ti)z50lqE=ckp~#na?Z#kS2aiSXAE?~5vAaG#GD5)P)yHupk}uyj+SXFx zA=SU&r@J_U1_)V!gt9e_DyisBj4c*NG-&R<dSCy3>t4o1fdKT_Km8S8s1wHv#>exMYzqO4Qo0KPs#~u? zIh~Y}IP+z$5%Wb(0Zy`Kd$$}r3DaazoRE;9$IpCd@leL;QmG+N6wnEK62Afyn>sp* z`%W<0R6+;8x#2M({r&U%ctb%C?}cyoqj)pM-FM%%UGDD{6cS1g?6rAZx(&$yzhQUI z^w;G}d4E7JUCL9w0pVfaM=HNcRX3{m{>XO4)xdxqU=-W7gPd-ik{Dld<)p%Jx;h1d z^mpo7x_I_|0|?(B?SM_=fl~jKyNy(z#(y*BXL6eueN$XMc1qz@xzRoUE-^`}KmMyH zP(;07qL_vc(9oYdxpyx!a6O5Ma|`H{lsfwlY_&QwF`=sii)DmNv;~6g^dLIr3J>i2 zs)?4*i$g+&S$UaiLQk_DLKS?*m{6)x?gEAfxL(x`obzP}D%O6=J>W?}a^-S{6 zzorl>CL61mYEXy9_2k@PVOhms;)gB!s1G(3WDXX?kVqd~+@Y;bNNXgBY*i;G8r>du zu}M#EI~`^*AtDwcBbQJoBevD=xJ?(1o!Y}FXzyo_OP!tfp&xu?ywv4s@87GC^&a^& zQ{!tY^K@XjoJ0e1py^>cm&-(=5^Ed=>uL4Q$zA)%sa;)#HegsMU;n43Skf^`Q$-~? zFIq(CBK2Q2r%Z(I;_w7;CKro-!d^)KvU6*z5-TRT(p)De`zTq`{4I-kxt>UrMenO$ zG5ja*yo`)$^W5CeR|yZ68YUI1XU`xwOlQM+61?uMP_wOOa( z(|4fF)#u~cVjYb8lo$3v!SYw>DL8An2f*1;>uP&AyM|B}#h%hA1)q%wpVzAzEUfYS zIHmd1R_91DwipAcylY~gl`M@_`BwhTWIpi{c@s;VDj~b??d|zulkO^^$uu8}b~N>h z2~njRV%l1ZZAVm8%pdb6q$7&G{$7-nh7X{n7<*1uCk`P#rtYj!Do0AZ9--xA__n5!~;8;hjWfsyc37 zn5thh6f&9hZJBmQKgoSQF&54K1MIW_baIJyt#jEKY}aF{ZoXQKk6s=nO(am RdnN$nb5B=4mvv4FO#tji&>jE) diff --git a/frontend/__snapshots__/exporter-exporter--trends-line-insight-detailed--light.png b/frontend/__snapshots__/exporter-exporter--trends-line-insight-detailed--light.png index 332ea24ce308456a5c4dc18262bded8de8689748..d4377362d92701640737571d7d9f29c058ada487 100644 GIT binary patch literal 21344 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 literal 21385 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 delta 95627 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ጃHTlXc< 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
&3`;@AqMy zoXxtp!^CrNTfu3AS2OEnt9f->`_kO=-R@UVm}u1Hxj=+-2>Yc##zkM`ZPWWw_i{0S zc1zk`tT;7YHEmO`?eBhA4%48hFDVw=HYoCt@;(1Ybz`sp1ZK;0=h~rA=V-a;^1I~k z+ro7{f@i**`I}JB4ql9+PM>g4K3F`Y7~IXV%V>zxLzQ|s|55<~`1jx8+<+EH*@mP= zm^H0}MuYZ43B>6{qMI)bPaq>?27@IO;+t$cUe{8iylB;li;FM72b#?pBMJL=$Yz?& zE*{L7IgI4`@~#fm@mG$%F_*^RfQcBqa)@kyFjQU}J$ygw+Fe zkErMx3=V<3)FNOesZzm1tgJE?)xUsEZtBbyOnQWv!SA3>0Obr<4HyUG!Af-aa3=yr zDrO#*iTlb#3D4>lpA-RX`RJP&aMjxrt;Z}5` z5+*ROdTzLs`+AX7no7vQD{r-*n6^P=D&&=e=?~Ts02U!()db`!Lrzs9fsnLo4x1Xd zkHoIuA1iewK&m#}TA+3k2?U-#1|e3v@YT7=j)0H#O&?_ML72yBmgI?pY!bF--KX_; zoa7KY31;XchYneY8gZ$nYR0@t;s;M9ks6bIz3e@t&PhhBweN`JK1fo%6!vdUXMk2I zxDRqn7}5IadLQ*(>yK(F<8U~zt;vD;9vqSsa0#OkT36D%(PT|O)c;r!V@YuNLhMWh zq{ab7X9_7IltNEWE{73|6ZJ`J$IUbcX5*~cha%jZvkunA8eg-Vs`=PCce0XekhT_c z@1#KjOId_r1rdE|Veh>&ZudN{O9_`B{%Bw{=-4Zfa!OFgf$%V{d-6tpSU`d8{d&RV zdSsq3z0l^JxcvJyrR|q5yGBNSxXCh0XzS=4I02+pSm@A?gNhF7>UHW45a0?Cl!;Z< z{#;bN<=hMK5)S-W6$yjs5HPLX@{EHa7`LHu(9zKu+U)M>8L*cu7`O{LB$+*Nv9Y9g zLi=p;4G{!^jBN)82MF*1(***tQGGMu1iLhNO4vSRXz;#vIRF*Tv&-vekGK5Km$4QM z*ykDKnBt7|^cW4mt7B_#4+7@K)hGzwA^RiX_xf!UrciK$PJ5xFy`}AbybfFL=K5PAVq)X2b7pEALdEAIy$WTgZ)as z&HVQBM}q4W(n5`dpMf#k($Z4;#G}>K)vT;62on9lXPn&&xwlY}z*Z_JH`Ln;2{JFE zqPS1Obw38y_v6QxyyX8-%5~J|;pKf48JU)r#uiccMMqLRz6IRzz~mw@vx13<>5tl; zo~vqCaGH;8U=9n6Vu(;52QN98q9L=e(qz${I#CCO;_n?A8ftI91763*#>PMX_yZCP zzz+$J;g8$U?gMWg^2r&h!ra{4^z?K@-*vbIU?hdybU5gZjg8NrKSzK*`eJO;RSX6= zI?f8D!3yLb5)u;dP+Yxw)uS8-`RU;A&dYP&B&(I%ml!^_5jm;_0Wr63QFD9j>}KF0 zIzm23qg*iS<9}xap2&r_Yb)_lNr)8Zv_S6tyrweU$_JE;kmdis=auM3>+v|quX&*3&6KP+c7^Pl)L#^VWp@C|uA~Fd5%8`EC#YF`j zujo#}%T#JmRkb29wKRTDa^h~|mXY_~3R;?(7pULFc<4d6)`G}z!urIJ9>YBf*&nBt zI2QR(?(O?i-^}rFoFCZmp{)yZ#+Bz8)Sbj+qdF_4;}GJL)z6E14DJ`apCySZR!Vu! z__kD!SmONE;V?gNVt!7=JN1Q8(a`cIzx5dti_I(?i4x_$HO|8DJp3{%7 zH}=(vOo~#toQ61{Z$Ufloc>@aJFu-BmD#7o{H% t;DrC^vF)7TSCTtl@*m&%mp8^!P}w9e&gS8~^YE`I4YiA^IcW2H{|{{@uFe1e diff --git a/frontend/src/layout/navigation-3000/navigationLogic.tsx b/frontend/src/layout/navigation-3000/navigationLogic.tsx index 74d9ac5212cad..09fd77527c43e 100644 --- a/frontend/src/layout/navigation-3000/navigationLogic.tsx +++ b/frontend/src/layout/navigation-3000/navigationLogic.tsx @@ -8,6 +8,7 @@ import { IconHome, IconLive, IconLogomark, + IconMegaphone, IconNotebook, IconPeople, IconPieChart, @@ -526,6 +527,15 @@ export const navigation3000Logic = kea([ to: urls.pipeline(), } : null, + featureFlags[FEATURE_FLAGS.MESSAGING] && hasOnboardedAnyProduct + ? { + identifier: Scene.MessagingBroadcasts, + label: 'Messaging', + icon: , + to: urls.messagingBroadcasts(), + tag: 'alpha' as const, + } + : null, ].filter(isNotNil), ] }, diff --git a/frontend/src/lib/constants.tsx b/frontend/src/lib/constants.tsx index acdbae72b8530..3639d06e4b466 100644 --- a/frontend/src/lib/constants.tsx +++ b/frontend/src/lib/constants.tsx @@ -220,6 +220,7 @@ export const FEATURE_FLAGS = { LEGACY_ACTION_WEBHOOKS: 'legacy-action-webhooks', // owner: @mariusandra #team-cdp SESSION_REPLAY_URL_TRIGGER: 'session-replay-url-trigger', // owner: @richard-better #team-replay REPLAY_TEMPLATES: 'replay-templates', // owner: @raquelmsmith #team-replay + MESSAGING: 'messaging', // owner @mariusandra #team-cdp } as const export type FeatureFlagKey = (typeof FEATURE_FLAGS)[keyof typeof FEATURE_FLAGS] diff --git a/frontend/src/scenes/appScenes.ts b/frontend/src/scenes/appScenes.ts index 0bfb2ae19e362..7d5f1291a5213 100644 --- a/frontend/src/scenes/appScenes.ts +++ b/frontend/src/scenes/appScenes.ts @@ -77,4 +77,6 @@ export const appScenes: Record any> = { [Scene.Heatmaps]: () => import('./heatmaps/HeatmapsScene'), [Scene.SessionAttributionExplorer]: () => import('scenes/web-analytics/SessionAttributionExplorer/SessionAttributionExplorerScene'), + [Scene.MessagingProviders]: () => import('./messaging/Providers'), + [Scene.MessagingBroadcasts]: () => import('./messaging/Broadcasts'), } diff --git a/frontend/src/scenes/messaging/Broadcasts.tsx b/frontend/src/scenes/messaging/Broadcasts.tsx new file mode 100644 index 0000000000000..9d26e53398d17 --- /dev/null +++ b/frontend/src/scenes/messaging/Broadcasts.tsx @@ -0,0 +1,43 @@ +import { IconPlusSmall } from '@posthog/icons' +import { useValues } from 'kea' +import { PageHeader } from 'lib/components/PageHeader' +import { LemonButton } from 'lib/lemon-ui/LemonButton' +import { broadcastsLogic } from 'scenes/messaging/broadcastsLogic' +import { FunctionsTable } from 'scenes/messaging/FunctionsTable' +import { MessagingTabs } from 'scenes/messaging/MessagingTabs' +import { HogFunctionConfiguration } from 'scenes/pipeline/hogfunctions/HogFunctionConfiguration' +import { SceneExport } from 'scenes/sceneTypes' +import { urls } from 'scenes/urls' + +export function Broadcasts(): JSX.Element { + const { broadcastId } = useValues(broadcastsLogic) + return broadcastId ? ( + + ) : ( + <> + + } + > + New broadcast + + } + /> + + + ) +} + +export const scene: SceneExport = { + component: Broadcasts, + logic: broadcastsLogic, +} diff --git a/frontend/src/scenes/messaging/FunctionsTable.tsx b/frontend/src/scenes/messaging/FunctionsTable.tsx new file mode 100644 index 0000000000000..329106a8ceaca --- /dev/null +++ b/frontend/src/scenes/messaging/FunctionsTable.tsx @@ -0,0 +1,125 @@ +import { LemonInput, LemonTable, LemonTableColumn, Link, Tooltip } from '@posthog/lemon-ui' +import { BindLogic, useActions, useValues } from 'kea' +import { More } from 'lib/lemon-ui/LemonButton/More' +import { LemonMenuOverlay } from 'lib/lemon-ui/LemonMenu/LemonMenu' +import { updatedAtColumn } from 'lib/lemon-ui/LemonTable/columnUtils' +import { LemonTableLink } from 'lib/lemon-ui/LemonTable/LemonTableLink' +import { functionsTableLogic } from 'scenes/messaging/functionsTableLogic' +import { hogFunctionUrl } from 'scenes/pipeline/hogfunctions/urls' + +import { HogFunctionType, HogFunctionTypeType } from '~/types' + +import { HogFunctionIcon } from '../pipeline/hogfunctions/HogFunctionIcon' +import { HogFunctionStatusIndicator } from '../pipeline/hogfunctions/HogFunctionStatusIndicator' + +export interface FunctionsTableProps { + type?: HogFunctionTypeType +} + +export function FunctionsTableFilters(): JSX.Element | null { + const { filters } = useValues(functionsTableLogic) + const { setFilters } = useActions(functionsTableLogic) + + return ( +
+
+ setFilters({ search: e })} + /> +
+
+ ) +} + +export function FunctionsTable({ type }: FunctionsTableProps): JSX.Element { + const { hogFunctions, filteredHogFunctions, loading } = useValues(functionsTableLogic({ type })) + const { deleteHogFunction, resetFilters } = useActions(functionsTableLogic({ type })) + + return ( + +
+ + + + }, + }, + { + title: 'Name', + sticky: true, + sorter: true, + key: 'name', + dataIndex: 'name', + render: function RenderPluginName(_, hogFunction) { + return ( + + + {hogFunction.name} + + + } + description={hogFunction.description} + /> + ) + }, + }, + + updatedAtColumn() as LemonTableColumn, + { + title: 'Status', + key: 'enabled', + sorter: (a) => (a.enabled ? 1 : -1), + width: 0, + render: function RenderStatus(_, hogFunction) { + return + }, + }, + { + width: 0, + render: function Render(_, hogFunction) { + return ( + deleteHogFunction(hogFunction), + }, + ]} + /> + } + /> + ) + }, + }, + ]} + emptyState={ + hogFunctions.length === 0 && !loading ? ( + 'Nothing found' + ) : ( + <> + Nothing matches filters. resetFilters()}>Clear filters{' '} + + ) + } + /> +
+
+ ) +} diff --git a/frontend/src/scenes/messaging/MessagingTabs.tsx b/frontend/src/scenes/messaging/MessagingTabs.tsx new file mode 100644 index 0000000000000..dac7146eab023 --- /dev/null +++ b/frontend/src/scenes/messaging/MessagingTabs.tsx @@ -0,0 +1,25 @@ +import { useActions, useValues } from 'kea' +import { LemonTabs } from 'lib/lemon-ui/LemonTabs' +import { SceneExport } from 'scenes/sceneTypes' + +import { MessagingTab, messagingTabsLogic } from './messagingTabsLogic' + +export function MessagingTabs(): JSX.Element { + const { currentTab } = useValues(messagingTabsLogic) + const { setTab } = useActions(messagingTabsLogic) + return ( + setTab(tab as MessagingTab)} + tabs={[ + { key: 'broadcasts', label: 'Broadcasts' }, + { key: 'providers', label: 'Providers' }, + ]} + /> + ) +} + +export const scene: SceneExport = { + component: MessagingTabs, + logic: messagingTabsLogic, +} diff --git a/frontend/src/scenes/messaging/Providers.tsx b/frontend/src/scenes/messaging/Providers.tsx new file mode 100644 index 0000000000000..bab003d9cf71b --- /dev/null +++ b/frontend/src/scenes/messaging/Providers.tsx @@ -0,0 +1,32 @@ +import { useValues } from 'kea' +import { PageHeader } from 'lib/components/PageHeader' +import { FunctionsTable } from 'scenes/messaging/FunctionsTable' +import { MessagingTabs } from 'scenes/messaging/MessagingTabs' +import { providersLogic } from 'scenes/messaging/providersLogic' +import { HogFunctionConfiguration } from 'scenes/pipeline/hogfunctions/HogFunctionConfiguration' +import { HogFunctionTemplateList } from 'scenes/pipeline/hogfunctions/list/HogFunctionTemplateList' +import { SceneExport } from 'scenes/sceneTypes' + +export function Providers(): JSX.Element { + const { providerId, templateId } = useValues(providersLogic) + return providerId ? ( + + ) : ( + <> + + + +
+

Add Provider

+ +
+ Note: to add a provider that's not in the list, select one that's similar and edit its source to point + to the right API URLs +
+ + ) +} +export const scene: SceneExport = { + component: Providers, + logic: providersLogic, +} diff --git a/frontend/src/scenes/messaging/broadcastsLogic.tsx b/frontend/src/scenes/messaging/broadcastsLogic.tsx new file mode 100644 index 0000000000000..635e105a064a6 --- /dev/null +++ b/frontend/src/scenes/messaging/broadcastsLogic.tsx @@ -0,0 +1,65 @@ +import { actions, kea, path, reducers, selectors } from 'kea' +import { urlToAction } from 'kea-router' +import { Scene } from 'scenes/sceneTypes' +import { urls } from 'scenes/urls' + +import { Breadcrumb } from '~/types' + +import type { broadcastsLogicType } from './broadcastsLogicType' + +export const broadcastsLogic = kea([ + path(['scenes', 'messaging', 'broadcastsLogic']), + actions({ + editBroadcast: (id: string | null) => ({ id }), + }), + reducers({ + broadcastId: [null as string | null, { editBroadcast: (_, { id }) => id }], + }), + selectors({ + breadcrumbs: [ + (s) => [s.broadcastId], + (broadcastId): Breadcrumb[] => { + return [ + { + key: Scene.MessagingBroadcasts, + name: 'Messaging', + path: urls.messagingBroadcasts(), + }, + { + key: 'broadcasts', + name: 'Broadcasts', + path: urls.messagingBroadcasts(), + }, + ...(broadcastId === 'new' + ? [ + { + key: 'new-broadcast', + name: 'New broadcast', + path: urls.messagingBroadcastNew(), + }, + ] + : broadcastId + ? [ + { + key: 'edit-broadcast', + name: 'Edit broadcast', + path: urls.messagingBroadcast(broadcastId), + }, + ] + : []), + ] + }, + ], + }), + urlToAction(({ actions }) => ({ + '/messaging/broadcasts/new': () => { + actions.editBroadcast('new') + }, + '/messaging/broadcasts/:id': ({ id }) => { + actions.editBroadcast(id ?? null) + }, + '/messaging/broadcasts': () => { + actions.editBroadcast(null) + }, + })), +]) diff --git a/frontend/src/scenes/messaging/functionsTableLogic.tsx b/frontend/src/scenes/messaging/functionsTableLogic.tsx new file mode 100644 index 0000000000000..054b8144d73e8 --- /dev/null +++ b/frontend/src/scenes/messaging/functionsTableLogic.tsx @@ -0,0 +1,94 @@ +import FuseClass from 'fuse.js' +import { actions, afterMount, connect, kea, key, path, props, reducers, selectors } from 'kea' +import { loaders } from 'kea-loaders' +import api from 'lib/api' +import { deleteWithUndo } from 'lib/utils/deleteWithUndo' +import { teamLogic } from 'scenes/teamLogic' + +import { HogFunctionType, HogFunctionTypeType } from '~/types' + +import type { functionsTableLogicType } from './functionsTableLogicType' + +// Helping kea-typegen navigate the exported default class for Fuse +export interface Fuse extends FuseClass {} + +export interface FunctionsTableLogicProps { + type?: HogFunctionTypeType +} +export interface HogFunctionsFilter { + search?: string +} +export const functionsTableLogic = kea([ + path(['scenes', 'messaging', 'functionsTableLogic']), + props({} as FunctionsTableLogicProps), + key((props: FunctionsTableLogicProps) => props.type ?? 'destination'), + connect({ + values: [teamLogic, ['currentTeamId']], + }), + actions({ + deleteHogFunction: (hogFunction: HogFunctionType) => ({ hogFunction }), + setFilters: (filters: Partial) => ({ filters }), + resetFilters: true, + }), + reducers({ + filters: [ + {} as HogFunctionsFilter, + { + setFilters: (state, { filters }) => ({ + ...state, + ...filters, + }), + resetFilters: () => ({}), + }, + ], + }), + loaders(({ props, values, actions }) => ({ + hogFunctions: [ + [] as HogFunctionType[], + { + loadHogFunctions: async () => { + // TODO: pagination? + return (await api.hogFunctions.list({ type: props.type ?? 'destination' })).results + }, + deleteHogFunction: async ({ hogFunction }) => { + await deleteWithUndo({ + endpoint: `projects/${teamLogic.values.currentTeamId}/hog_functions`, + object: { + id: hogFunction.id, + name: hogFunction.name, + }, + callback: (undo) => { + if (undo) { + actions.loadHogFunctions() + } + }, + }) + return values.hogFunctions.filter((hf) => hf.id !== hogFunction.id) + }, + }, + ], + })), + selectors({ + loading: [(s) => [s.hogFunctionsLoading], (hogFunctionsLoading) => hogFunctionsLoading], + hogFunctionsFuse: [ + (s) => [s.hogFunctions], + (hogFunctions): Fuse => { + return new FuseClass(hogFunctions || [], { + keys: ['name', 'description'], + threshold: 0.3, + }) + }, + ], + + filteredHogFunctions: [ + (s) => [s.filters, s.hogFunctions, s.hogFunctionsFuse], + (filters, hogFunctions, hogFunctionsFuse): HogFunctionType[] => { + const { search } = filters + return search ? hogFunctionsFuse.search(search).map((x) => x.item) : hogFunctions + }, + ], + }), + afterMount(({ actions }) => { + actions.loadHogFunctions() + }), +]) diff --git a/frontend/src/scenes/messaging/messagingTabsLogic.ts b/frontend/src/scenes/messaging/messagingTabsLogic.ts new file mode 100644 index 0000000000000..577a7f6d1ac5e --- /dev/null +++ b/frontend/src/scenes/messaging/messagingTabsLogic.ts @@ -0,0 +1,44 @@ +import { actions, kea, path, reducers } from 'kea' +import { actionToUrl, urlToAction } from 'kea-router' +import { urls } from 'scenes/urls' + +import type { messagingTabsLogicType } from './messagingTabsLogicType' + +export type MessagingTab = 'broadcasts' | 'providers' + +export const messagingTabsLogic = kea([ + path(['scenes', 'messaging', 'messagingLogic']), + actions({ + setTab: (tab: MessagingTab, fromUrl = false) => ({ tab, fromUrl }), + }), + reducers({ + currentTab: ['broadcasts' as MessagingTab, { setTab: (_, { tab }) => tab }], + }), + + actionToUrl(({ values }) => ({ + setTab: ({ fromUrl }) => { + // do not override deeper urls like /messaging/broadcasts/new + if (!fromUrl) { + return ( + { + broadcasts: urls.messagingBroadcasts(), + providers: urls.messagingProviders(), + }[values.currentTab] ?? urls.messagingBroadcasts() + ) + } + }, + })), + + urlToAction(({ actions, values }) => ({ + '/messaging/:tab': ({ tab }) => { + if (tab !== values.currentTab) { + actions.setTab(tab as MessagingTab, true) + } + }, + '/messaging/:tab/*': ({ tab }) => { + if (tab !== values.currentTab) { + actions.setTab(tab as MessagingTab, true) + } + }, + })), +]) diff --git a/frontend/src/scenes/messaging/providersLogic.ts b/frontend/src/scenes/messaging/providersLogic.ts new file mode 100644 index 0000000000000..12ede195abb60 --- /dev/null +++ b/frontend/src/scenes/messaging/providersLogic.ts @@ -0,0 +1,69 @@ +import { actions, kea, path, reducers, selectors } from 'kea' +import { urlToAction } from 'kea-router' +import { Scene } from 'scenes/sceneTypes' +import { urls } from 'scenes/urls' + +import { Breadcrumb } from '~/types' + +import type { providersLogicType } from './providersLogicType' + +export const providersLogic = kea([ + path(['scenes', 'messaging', 'providersLogic']), + actions({ + editProvider: (id: string | null, template: string | null) => ({ id, template }), + }), + reducers({ + providerId: [null as string | null, { editProvider: (_, { id }) => id }], + templateId: [null as string | null, { editProvider: (_, { template }) => template }], + }), + selectors({ + breadcrumbs: [ + (s) => [s.providerId, s.templateId], + (providerId, templateId): Breadcrumb[] => { + return [ + { + key: Scene.MessagingBroadcasts, + name: 'Messaging', + path: urls.messagingBroadcasts(), + }, + { + key: 'providers', + name: 'Providers', + path: urls.messagingProviders(), + }, + ...(providerId === 'new' || templateId + ? [ + { + key: 'new-provider', + name: 'New provider', + path: urls.messagingProviderNew(), + }, + ] + : providerId + ? [ + { + key: 'edit-provider', + name: 'Edit provider', + path: urls.messagingProvider(providerId), + }, + ] + : []), + ] + }, + ], + }), + urlToAction(({ actions }) => ({ + '/messaging/providers/new': () => { + actions.editProvider('new', null) + }, + '/messaging/providers/new/:template': ({ template }) => { + actions.editProvider('new', template ?? null) + }, + '/messaging/providers/:id': ({ id }) => { + actions.editProvider(id ?? null, null) + }, + '/messaging/providers': () => { + actions.editProvider(null, null) + }, + })), +]) diff --git a/frontend/src/scenes/pipeline/hogfunctions/HogFunctionConfiguration.tsx b/frontend/src/scenes/pipeline/hogfunctions/HogFunctionConfiguration.tsx index d0e60b03d8944..a27181b3e77c7 100644 --- a/frontend/src/scenes/pipeline/hogfunctions/HogFunctionConfiguration.tsx +++ b/frontend/src/scenes/pipeline/hogfunctions/HogFunctionConfiguration.tsx @@ -16,6 +16,7 @@ import { import clsx from 'clsx' import { BindLogic, useActions, useValues } from 'kea' import { Form } from 'kea-forms' +import { combineUrl } from 'kea-router' import { NotFound } from 'lib/components/NotFound' import { PageHeader } from 'lib/components/PageHeader' import { PayGateMini } from 'lib/components/PayGateMini/PayGateMini' @@ -23,6 +24,7 @@ import { Sparkline } from 'lib/components/Sparkline' import { More } from 'lib/lemon-ui/LemonButton/More' import { LemonField } from 'lib/lemon-ui/LemonField' import { CodeEditorResizeable } from 'lib/monaco/CodeEditorResizable' +import { urls } from 'scenes/urls' import { AvailableFeature } from '~/types' @@ -59,10 +61,14 @@ export function HogFunctionConfiguration({ templateId, id }: HogFunctionConfigur hasAddon, sparkline, sparklineLoading, + personsCount, + personsCountLoading, + personsListQuery, template, subTemplate, templateHasChanged, forcedSubTemplateId, + type, } = useValues(logic) const { submitConfiguration, @@ -145,6 +151,12 @@ export function HogFunctionConfiguration({ templateId, id }: HogFunctionConfigur return } + const showFilters = type === 'destination' || type === 'broadcast' + const showExpectedVolume = type === 'destination' + const showEnabled = type === 'destination' || type === 'email' + const canEditSource = type === 'destination' || type === 'email' + const showPersonsCount = type === 'broadcast' + return (
@@ -157,10 +169,13 @@ export function HogFunctionConfiguration({ templateId, id }: HogFunctionConfigur } /> - - Hog Functions are in beta and are the next generation of our data pipeline destinations. You - can use pre-existing templates or modify the source Hog code to create your own custom functions. - + {type === 'destination' ? ( + + Hog Functions are in beta and are the next generation of our data pipeline destinations. + You can use pre-existing templates or modify the source Hog code to create your own custom + functions. + + ) : null} {hogFunction?.filters?.bytecode_error ? (
@@ -197,17 +212,20 @@ export function HogFunctionConfiguration({ templateId, id }: HogFunctionConfigur - - {({ value, onChange }) => ( - onChange(!value)} - checked={value} - disabled={loading} - bordered - /> - )} - + {showEnabled && } + {showEnabled && ( + + {({ value, onChange }) => ( + onChange(!value)} + checked={value} + disabled={loading} + bordered + /> + )} + + )}
@@ -266,45 +284,77 @@ export function HogFunctionConfiguration({ templateId, id }: HogFunctionConfigur ) : null}
- + {showFilters && } -
- Expected volume - {sparkline && !sparklineLoading ? ( - <> - {sparkline.count > EVENT_THRESHOLD_ALERT_LEVEL ? ( - - Warning: This destination would have triggered{' '} - - {sparkline.count ?? 0} time{sparkline.count !== 1 ? 's' : ''} - {' '} - in the last 7 days. Consider the impact of this function on your - destination. - - ) : ( -

- This destination would have triggered{' '} - - {sparkline.count ?? 0} time{sparkline.count !== 1 ? 's' : ''} - {' '} - in the last 7 days. -

- )} - - - ) : sparklineLoading ? ( -
- + {showPersonsCount && ( +
+
+ Matching persons
- ) : ( -

The expected volume could not be calculated

- )} -
+ {personsCount && !personsCountLoading ? ( + <> + Found{' '} + + + {personsCount ?? 0} {personsCount !== 1 ? 'people' : 'person'} + + {' '} + to send to. + + ) : personsCountLoading ? ( +
+ +
+ ) : ( +

The expected volume could not be calculated

+ )} +
+ )} + + {showExpectedVolume && ( +
+ Expected volume + {sparkline && !sparklineLoading ? ( + <> + {sparkline.count > EVENT_THRESHOLD_ALERT_LEVEL ? ( + + Warning: This destination would have triggered{' '} + + {sparkline.count ?? 0} time{sparkline.count !== 1 ? 's' : ''} + {' '} + in the last 7 days. Consider the impact of this function on your + destination. + + ) : ( +

+ This destination would have triggered{' '} + + {sparkline.count ?? 0} time{sparkline.count !== 1 ? 's' : ''} + {' '} + in the last 7 days. +

+ )} + + + ) : sparklineLoading ? ( +
+ +
+ ) : ( +

The expected volume could not be calculated

+ )} +
+ )}
@@ -346,7 +396,7 @@ export function HogFunctionConfiguration({ templateId, id }: HogFunctionConfigur
- {showSource ? ( + {showSource && canEditSource ? ( } size="small" @@ -370,76 +420,79 @@ export function HogFunctionConfiguration({ templateId, id }: HogFunctionConfigur
-
-
-
-

Edit source

- {!showSource ?

Click here to edit the function's source code

: null} -
- - {!showSource ? ( - setShowSource(true)} - disabledReason={ - !hasAddon - ? 'Editing the source code requires the Data Pipelines addon' - : undefined - } - > - Edit source code - - ) : ( - setShowSource(false)} - > - Hide source code - + {canEditSource && ( +
+ > +
+
+

Edit source

+ {!showSource ?

Click here to edit the function's source code

: null} +
- {showSource ? ( - - {({ value, onChange }) => ( - <> - - This is the underlying Hog code that will run whenever the filters - match. See the docs{' '} - for more info - - onChange(v ?? '')} - globals={globalsWithInputs} - options={{ - minimap: { - enabled: false, - }, - wordWrap: 'on', - scrollBeyondLastLine: false, - automaticLayout: true, - fixedOverflowWidgets: true, - suggest: { - showInlineDetails: true, - }, - quickSuggestionsDelay: 300, - }} - /> - + {!showSource ? ( + setShowSource(true)} + disabledReason={ + !hasAddon + ? 'Editing the source code requires the Data Pipelines addon' + : undefined + } + > + Edit source code + + ) : ( + setShowSource(false)} + > + Hide source code + )} - - ) : null} -
+
+ + {showSource ? ( + + {({ value, onChange }) => ( + <> + + This is the underlying Hog code that will run whenever the + filters match.{' '} + See the docs for + more info + + onChange(v ?? '')} + globals={globalsWithInputs} + options={{ + minimap: { + enabled: false, + }, + wordWrap: 'on', + scrollBeyondLastLine: false, + automaticLayout: true, + fixedOverflowWidgets: true, + suggest: { + showInlineDetails: true, + }, + quickSuggestionsDelay: 300, + }} + /> + + )} + + ) : null} +
+ )} - {id ? : } + {!id || id === 'new' ? : }
{saveButtons}
diff --git a/frontend/src/scenes/pipeline/hogfunctions/HogFunctionTest.tsx b/frontend/src/scenes/pipeline/hogfunctions/HogFunctionTest.tsx index 9ee3c844ab66e..1a08481511f47 100644 --- a/frontend/src/scenes/pipeline/hogfunctions/HogFunctionTest.tsx +++ b/frontend/src/scenes/pipeline/hogfunctions/HogFunctionTest.tsx @@ -46,19 +46,24 @@ const HogFunctionTestEditor = ({ ) } -export function HogFunctionTestPlaceholder(): JSX.Element { +export function HogFunctionTestPlaceholder({ + title, + description, +}: { + title?: string | JSX.Element + description?: string | JSX.Element +}): JSX.Element { return (
-

Testing

-

Save your configuration to enable testing

+

{title || 'Testing'}

+

{description || 'Save your configuration to enable testing'}

) } export function HogFunctionTest(props: HogFunctionTestLogicProps): JSX.Element { - const { isTestInvocationSubmitting, testResult, expanded, sampleGlobalsLoading, sampleGlobalsError } = useValues( - hogFunctionTestLogic(props) - ) + const { isTestInvocationSubmitting, testResult, expanded, sampleGlobalsLoading, sampleGlobalsError, type } = + useValues(hogFunctionTestLogic(props)) const { submitTestInvocation, setTestResult, toggleExpanded, loadSampleGlobals } = useActions( hogFunctionTestLogic(props) ) @@ -71,7 +76,14 @@ export function HogFunctionTest(props: HogFunctionTestLogicProps): JSX.Element {

Testing

- {!expanded &&

Click here to test your function with an example event

} + {!expanded && + (type === 'email' ? ( +

Click here to test the provider with a sample e-mail

+ ) : type === 'broadcast' ? ( +

Click here to test your broadcast

+ ) : ( +

Click here to test your function with an example event

+ ))}
{!expanded ? ( @@ -90,14 +102,16 @@ export function HogFunctionTest(props: HogFunctionTestLogicProps): JSX.Element { ) : ( <> - - Refresh globals - + {type === 'destination' ? ( + + Refresh globals + + ) : null} {({ value, onChange }) => ( ( <>
-
Here are all the global variables you can use in your code:
+
+ {type === 'broadcast' + ? 'The test broadcast will be sent with this sample data:' + : type === 'email' + ? 'The provider will be tested with this sample data:' + : 'Here are all the global variables you can use in your code:'} +
{sampleGlobalsError ? (
{sampleGlobalsError}
) : null} diff --git a/frontend/src/scenes/pipeline/hogfunctions/activityDescriptions.tsx b/frontend/src/scenes/pipeline/hogfunctions/activityDescriptions.tsx index 872e1beebcaf5..c25ea2ce9ce65 100644 --- a/frontend/src/scenes/pipeline/hogfunctions/activityDescriptions.tsx +++ b/frontend/src/scenes/pipeline/hogfunctions/activityDescriptions.tsx @@ -8,19 +8,12 @@ import { import { LemonDropdown } from 'lib/lemon-ui/LemonDropdown' import { Link } from 'lib/lemon-ui/Link' import { initHogLanguage } from 'lib/monaco/languages/hog' -import { urls } from 'scenes/urls' -import { PipelineNodeTab, PipelineStage } from '~/types' +import { hogFunctionUrl } from './urls' const nameOrLinkToHogFunction = (id?: string | null, name?: string | null): string | JSX.Element => { const displayName = name || '(empty string)' - return id ? ( - - {displayName} - - ) : ( - displayName - ) + return id ? {displayName} : displayName } export interface DiffProps { diff --git a/frontend/src/scenes/pipeline/hogfunctions/filters/HogFunctionFilters.tsx b/frontend/src/scenes/pipeline/hogfunctions/filters/HogFunctionFilters.tsx index c9d0e7a9023b8..50bf6bad4f4df 100644 --- a/frontend/src/scenes/pipeline/hogfunctions/filters/HogFunctionFilters.tsx +++ b/frontend/src/scenes/pipeline/hogfunctions/filters/HogFunctionFilters.tsx @@ -9,6 +9,7 @@ import { ActionFilter } from 'scenes/insights/filters/ActionFilter/ActionFilter' import { MathAvailability } from 'scenes/insights/filters/ActionFilter/ActionFilterRow/ActionFilterRow' import { groupsModel } from '~/models/groupsModel' +import { NodeKind } from '~/queries/schema' import { AnyPropertyFilter, EntityTypes, FilterType, HogFunctionFiltersType } from '~/types' import { hogFunctionConfigurationLogic } from '../hogFunctionConfigurationLogic' @@ -44,7 +45,34 @@ function sanitizeActionFilters(filters?: FilterType): Partial + + {({ value, onChange }) => ( + { + onChange({ + ...value, + properties, + }) + }} + pageKey={`HogFunctionPropertyFilters.${id}`} + metadataSource={{ kind: NodeKind.ActorsQuery }} + /> + )} + +
+ ) + } return (
diff --git a/frontend/src/scenes/pipeline/hogfunctions/hogFunctionConfigurationLogic.tsx b/frontend/src/scenes/pipeline/hogfunctions/hogFunctionConfigurationLogic.tsx index 08511bfbdc8f9..93d6359d349ca 100644 --- a/frontend/src/scenes/pipeline/hogfunctions/hogFunctionConfigurationLogic.tsx +++ b/frontend/src/scenes/pipeline/hogfunctions/hogFunctionConfigurationLogic.tsx @@ -11,15 +11,16 @@ import { uuid } from 'lib/utils' import { deleteWithUndo } from 'lib/utils/deleteWithUndo' import posthog from 'posthog-js' import { asDisplay } from 'scenes/persons/person-utils' +import { hogFunctionNewUrl, hogFunctionUrl } from 'scenes/pipeline/hogfunctions/urls' import { teamLogic } from 'scenes/teamLogic' -import { urls } from 'scenes/urls' import { userLogic } from 'scenes/userLogic' import { groupsModel } from '~/models/groupsModel' import { performQuery } from '~/queries/query' -import { EventsNode, EventsQuery, NodeKind, TrendsQuery } from '~/queries/schema' +import { ActorsQuery, DataTableNode, EventsNode, EventsQuery, NodeKind, TrendsQuery } from '~/queries/schema' import { escapePropertyAsHogQlIdentifier, hogql } from '~/queries/utils' import { + AnyPersonScopeFilter, AnyPropertyFilter, AvailableFeature, BaseMathType, @@ -34,9 +35,6 @@ import { HogFunctionTemplateType, HogFunctionType, PersonType, - PipelineNodeTab, - PipelineStage, - PipelineTab, PropertyFilterType, PropertyGroupFilter, PropertyGroupFilterValue, @@ -127,7 +125,7 @@ const templateToConfiguration = ( hog: template.hog, icon_url: template.icon_url, inputs, - enabled: true, + enabled: template.type !== 'broadcast', } } @@ -183,6 +181,8 @@ export const hogFunctionConfigurationLogic = kea ({ sparklineQuery } as { sparklineQuery: TrendsQuery }), + personsCountQueryChanged: (personsCountQuery: ActorsQuery) => + ({ personsCountQuery } as { personsCountQuery: ActorsQuery }), setSubTemplateId: (subTemplateId: HogFunctionSubTemplateIdType | null) => ({ subTemplateId }), loadSampleGlobals: true, setUnsavedConfiguration: (configuration: HogFunctionConfigurationType | null) => ({ configuration }), @@ -256,7 +256,7 @@ export const hogFunctionConfigurationLogic = kea { - if (!props.id) { + if (!props.id || props.id === 'new') { return null } @@ -264,9 +264,10 @@ export const hogFunctionConfigurationLogic = kea { - const res = props.id - ? await api.hogFunctions.update(props.id, configuration) - : await api.hogFunctions.create(configuration) + const res = + props.id && props.id !== 'new' + ? await api.hogFunctions.update(props.id, configuration) + : await api.hogFunctions.create(configuration) posthog.capture('hog function saved', { id: res.id, @@ -289,6 +290,9 @@ export const hogFunctionConfigurationLogic = kea { + if (values.type !== 'destination') { + return null + } if (values.sparkline === null) { await breakpoint(100) } else { @@ -327,16 +331,38 @@ export const hogFunctionConfigurationLogic = kea { + if (values.type !== 'broadcast') { + return null + } + if (values.personsCount === null) { + await breakpoint(100) + } else { + await breakpoint(1000) + } + const result = await performQuery(personsCountQuery) + breakpoint() + return result?.results?.[0]?.[0] ?? null + }, + }, + ], + sampleGlobals: [ null as HogFunctionInvocationGlobals | null, { loadSampleGlobals: async (_, breakpoint) => { + if (!values.lastEventQuery || values.type !== 'destination') { + return values.sampleGlobals + } const errorMessage = 'No events match these filters in the last 30 days. Showing an example $pageview event instead.' try { await breakpoint(values.sampleGlobals === null ? 10 : 1000) let response = await performQuery(values.lastEventQuery) - if (!response?.results?.[0]) { + if (!response?.results?.[0] && values.lastEventSecondQuery) { response = await performQuery(values.lastEventSecondQuery) } if (!response?.results?.[0]) { @@ -653,9 +679,46 @@ export const hogFunctionConfigurationLogic = kea [s.configuration, s.type], + (configuration, type): ActorsQuery | null => { + if (type !== 'broadcast') { + return null + } + return { + kind: NodeKind.ActorsQuery, + properties: configuration.filters?.properties as AnyPersonScopeFilter[] | undefined, + select: ['count()'], + } + }, + { resultEqualityCheck: equal }, + ], + + personsListQuery: [ + (s) => [s.configuration, s.type], + (configuration, type): DataTableNode | null => { + if (type !== 'broadcast') { + return null + } + return { + kind: NodeKind.DataTableNode, + source: { + kind: NodeKind.ActorsQuery, + properties: configuration.filters?.properties as AnyPersonScopeFilter[] | undefined, + select: ['person', 'properties.email', 'created_at'], + }, + full: true, + } + }, + { resultEqualityCheck: equal }, + ], + lastEventQuery: [ - (s) => [s.configuration, s.matchingFilters, s.groupTypes], - (configuration, matchingFilters, groupTypes): EventsQuery => { + (s) => [s.configuration, s.matchingFilters, s.groupTypes, s.type], + (configuration, matchingFilters, groupTypes, type): EventsQuery | null => { + if (type !== 'destination') { + return null + } const query: EventsQuery = { kind: NodeKind.EventsQuery, filterTestAccounts: configuration.filters?.filter_test_accounts, @@ -677,7 +740,7 @@ export const hogFunctionConfigurationLogic = kea [s.lastEventQuery], - (lastEventQuery): EventsQuery => ({ ...lastEventQuery, after: '-30d' }), + (lastEventQuery): EventsQuery | null => (lastEventQuery ? { ...lastEventQuery, after: '-30d' } : null), ], templateHasChanged: [ (s) => [s.hogFunction, s.configuration], @@ -774,13 +837,9 @@ export const hogFunctionConfigurationLogic = kea { @@ -788,13 +847,9 @@ export const hogFunctionConfigurationLogic = kea { @@ -831,7 +886,7 @@ export const hogFunctionConfigurationLogic = kea { @@ -870,7 +923,7 @@ export const hogFunctionConfigurationLogic = kea { - actions.sparklineQueryChanged(sparklineQuery) + if (sparklineQuery) { + actions.sparklineQueryChanged(sparklineQuery) + } }, - - lastEventQuery: () => { - actions.loadSampleGlobals() + personsCountQuery: async (personsCountQuery) => { + if (personsCountQuery) { + actions.personsCountQueryChanged(personsCountQuery) + } + }, + lastEventQuery: (lastEventQuery) => { + if (lastEventQuery) { + actions.loadSampleGlobals() + } }, })), diff --git a/frontend/src/scenes/pipeline/hogfunctions/hogFunctionTestLogic.tsx b/frontend/src/scenes/pipeline/hogfunctions/hogFunctionTestLogic.tsx index 45e0d9a523c3c..c309442268f58 100644 --- a/frontend/src/scenes/pipeline/hogfunctions/hogFunctionTestLogic.tsx +++ b/frontend/src/scenes/pipeline/hogfunctions/hogFunctionTestLogic.tsx @@ -31,7 +31,15 @@ export const hogFunctionTestLogic = kea([ connect((props: HogFunctionTestLogicProps) => ({ values: [ hogFunctionConfigurationLogic({ id: props.id }), - ['configuration', 'configurationHasErrors', 'sampleGlobals', 'sampleGlobalsLoading', 'sampleGlobalsError'], + [ + 'configuration', + 'configurationHasErrors', + 'sampleGlobals', + 'sampleGlobalsLoading', + 'exampleInvocationGlobals', + 'sampleGlobalsError', + 'type', + ], groupsModel, ['groupTypes'], ], @@ -61,7 +69,9 @@ export const hogFunctionTestLogic = kea([ }), listeners(({ values, actions }) => ({ loadSampleGlobalsSuccess: () => { - actions.setTestInvocationValue('globals', JSON.stringify(values.sampleGlobals, null, 2)) + if (values.type === 'destination') { + actions.setTestInvocationValue('globals', JSON.stringify(values.sampleGlobals, null, 2)) + } }, })), forms(({ props, actions, values }) => ({ @@ -103,7 +113,25 @@ export const hogFunctionTestLogic = kea([ }, })), - afterMount(({ actions }) => { - actions.setTestInvocationValue('globals', '{/* Please wait, fetching a real event. */}') + afterMount(({ actions, values }) => { + if (values.type === 'email') { + const email = { + from: 'me@example.com', + to: 'you@example.com', + subject: 'Hello', + html: 'hello world', + } + actions.setTestInvocationValue( + 'globals', + JSON.stringify({ email, person: values.exampleInvocationGlobals.person }, null, 2) + ) + } else if (values.type === 'broadcast') { + actions.setTestInvocationValue( + 'globals', + JSON.stringify({ person: values.exampleInvocationGlobals.person }, null, 2) + ) + } else { + actions.setTestInvocationValue('globals', '{/* Please wait, fetching a real event. */}') + } }), ]) diff --git a/frontend/src/scenes/pipeline/hogfunctions/list/HogFunctionsList.tsx b/frontend/src/scenes/pipeline/hogfunctions/list/HogFunctionsList.tsx index 25a59059e6586..a7598463d54fa 100644 --- a/frontend/src/scenes/pipeline/hogfunctions/list/HogFunctionsList.tsx +++ b/frontend/src/scenes/pipeline/hogfunctions/list/HogFunctionsList.tsx @@ -5,6 +5,7 @@ import { LemonMenuOverlay } from 'lib/lemon-ui/LemonMenu/LemonMenu' import { updatedAtColumn } from 'lib/lemon-ui/LemonTable/columnUtils' import { LemonTableLink } from 'lib/lemon-ui/LemonTable/LemonTableLink' import { useEffect } from 'react' +import { hogFunctionUrl } from 'scenes/pipeline/hogfunctions/urls' import { AppMetricSparkLineV2 } from 'scenes/pipeline/metrics/AppMetricsV2Sparkline' import { urls } from 'scenes/urls' @@ -72,11 +73,7 @@ export function HogFunctionList({ render: (_, hogFunction) => { return ( @@ -96,6 +93,7 @@ export function HogFunctionList({ return ( ( stage: stage as PipelineStage.Destination, backend: PipelineBackend.HogFunction, interval: 'realtime', - id: `hog-${candidate.id}`, + id: candidate.type === 'destination' ? `hog-${candidate.id}` : candidate.id, name: candidate.name, description: candidate.description, enabled: candidate.enabled, diff --git a/frontend/src/scenes/pipeline/utils.tsx b/frontend/src/scenes/pipeline/utils.tsx index 1b3171ec9a087..530c09b9b2df5 100644 --- a/frontend/src/scenes/pipeline/utils.tsx +++ b/frontend/src/scenes/pipeline/utils.tsx @@ -25,6 +25,7 @@ import { PluginType, } from '~/types' +import { hogFunctionUrl } from './hogfunctions/urls' import { pipelineAccessLogic } from './pipelineAccessLogic' import { PluginImage, PluginImageSize } from './PipelinePluginImage' import { @@ -268,14 +269,19 @@ export function pipelineNodeMenuCommonItems(node: Transformation | SiteApp | Imp const items: LemonMenuItem[] = [ { label: canConfigurePlugins ? 'Edit configuration' : 'View configuration', - to: urls.pipelineNode(node.stage, node.id, PipelineNodeTab.Configuration), + to: + 'hog_function' in node && node.hog_function + ? hogFunctionUrl(node.hog_function.type, node.hog_function.id) + : urls.pipelineNode(node.stage, node.id, PipelineNodeTab.Configuration), }, { label: 'View metrics', + // TODO: metrics URL to: urls.pipelineNode(node.stage, node.id, PipelineNodeTab.Metrics), }, { label: 'View logs', + // TODO: logs URL to: urls.pipelineNode(node.stage, node.id, PipelineNodeTab.Logs), }, ] diff --git a/frontend/src/scenes/sceneTypes.ts b/frontend/src/scenes/sceneTypes.ts index 4f94e984542d5..7ecee067a5439 100644 --- a/frontend/src/scenes/sceneTypes.ts +++ b/frontend/src/scenes/sceneTypes.ts @@ -81,6 +81,8 @@ export enum Scene { MoveToPostHogCloud = 'MoveToPostHogCloud', Heatmaps = 'Heatmaps', SessionAttributionExplorer = 'SessionAttributionExplorer', + MessagingProviders = 'MessagingProviders', + MessagingBroadcasts = 'MessagingBroadcasts', } export type SceneProps = Record diff --git a/frontend/src/scenes/scenes.ts b/frontend/src/scenes/scenes.ts index c90772eef7fa4..b230d3244117e 100644 --- a/frontend/src/scenes/scenes.ts +++ b/frontend/src/scenes/scenes.ts @@ -402,6 +402,14 @@ export const sceneConfigurations: Record = { projectBased: true, name: 'Session attribution explorer (beta)', }, + [Scene.MessagingBroadcasts]: { + projectBased: true, + name: 'Broadcasts', + }, + [Scene.MessagingProviders]: { + projectBased: true, + name: 'Providers', + }, } // NOTE: These redirects will fully replace the URL. If you want to keep support for query and hash params then you should use a function (not string) redirect @@ -469,6 +477,7 @@ export const redirects: Record< '/batch_exports': urls.pipeline(PipelineTab.Destinations), '/apps': urls.pipeline(PipelineTab.Overview), '/apps/:id': ({ id }) => urls.pipelineNode(PipelineStage.Transformation, id), + '/messaging': urls.messagingBroadcasts(), } export const routes: Record = { @@ -584,4 +593,11 @@ export const routes: Record = { [urls.moveToPostHogCloud()]: Scene.MoveToPostHogCloud, [urls.heatmaps()]: Scene.Heatmaps, [urls.sessionAttributionExplorer()]: Scene.SessionAttributionExplorer, + [urls.messagingProviders()]: Scene.MessagingProviders, + [urls.messagingProvider(':id')]: Scene.MessagingProviders, + [urls.messagingProviderNew()]: Scene.MessagingProviders, + [urls.messagingProviderNew(':template')]: Scene.MessagingProviders, + [urls.messagingBroadcasts()]: Scene.MessagingBroadcasts, + [urls.messagingBroadcast(':id')]: Scene.MessagingBroadcasts, + [urls.messagingBroadcastNew()]: Scene.MessagingBroadcasts, } diff --git a/frontend/src/scenes/urls.ts b/frontend/src/scenes/urls.ts index a6fe7fcbaca9b..e3c85d33260c7 100644 --- a/frontend/src/scenes/urls.ts +++ b/frontend/src/scenes/urls.ts @@ -143,6 +143,12 @@ export const urls = { `/pipeline/${!stage.startsWith(':') && !stage?.endsWith('s') ? `${stage}s` : stage}/${id}${ nodeTab ? `/${nodeTab}` : '' }`, + messagingBroadcasts: (): string => '/messaging/broadcasts', + messagingBroadcast: (id?: string): string => `/messaging/broadcasts/${id}`, + messagingBroadcastNew: (): string => '/messaging/broadcasts/new', + messagingProviders: (): string => '/messaging/providers', + messagingProvider: (id?: string): string => `/messaging/providers/${id}`, + messagingProviderNew: (template?: string): string => '/messaging/providers/new' + (template ? `/${template}` : ''), groups: (groupTypeIndex: string | number): string => `/groups/${groupTypeIndex}`, // :TRICKY: Note that groupKey is provided by user. We need to override urlPatternOptions for kea-router. group: (groupTypeIndex: string | number, groupKey: string, encode: boolean = true, tab?: string | null): string => diff --git a/posthog/api/hog_function_template.py b/posthog/api/hog_function_template.py index befb986262ee2..2f68614e50a02 100644 --- a/posthog/api/hog_function_template.py +++ b/posthog/api/hog_function_template.py @@ -28,22 +28,19 @@ class Meta: # NOTE: There is nothing currently private about these values class PublicHogFunctionTemplateViewSet(viewsets.GenericViewSet): filter_backends = [DjangoFilterBackend] - filterset_fields = ["id", "team", "created_by", "enabled"] + filterset_fields = ["id", "team", "created_by", "enabled", "type"] permission_classes = [permissions.AllowAny] serializer_class = HogFunctionTemplateSerializer - def _get_templates(self): - type = self.request.GET.get("type", "destination") - return [item for item in HOG_FUNCTION_TEMPLATES if item.type == type] - def list(self, request: Request, *args, **kwargs): - page = self.paginate_queryset(self._get_templates()) + type = self.request.GET.get("type", "destination") + templates = [item for item in HOG_FUNCTION_TEMPLATES if item.type == type] + page = self.paginate_queryset(templates) serializer = self.get_serializer(page, many=True) return self.get_paginated_response(serializer.data) def retrieve(self, request: Request, *args, **kwargs): - data = self._get_templates() - item = next((item for item in data if item.id == kwargs["pk"]), None) + item = next((item for item in HOG_FUNCTION_TEMPLATES if item.id == kwargs["pk"]), None) if not item: raise NotFound(f"Template with id {kwargs['pk']} not found.") diff --git a/posthog/cdp/templates/__init__.py b/posthog/cdp/templates/__init__.py index d8c414f54dd03..1acedd79c25d5 100644 --- a/posthog/cdp/templates/__init__.py +++ b/posthog/cdp/templates/__init__.py @@ -14,6 +14,7 @@ from .mailjet.template_mailjet import ( template_create_contact as mailjet_create_contact, template_update_contact_list as mailjet_update_contact_list, + template_send_email as mailset_send_email, ) from .zapier.template_zapier import template as zapier from .mailgun.template_mailgun import template_mailgun_send_email as mailgun @@ -37,8 +38,10 @@ TemplateGoogleCloudStorageMigrator, ) from .airtable.template_airtable import template as airtable +from ._internal.template_broadcast import template_new_broadcast as _broadcast HOG_FUNCTION_TEMPLATES = [ + _broadcast, slack, webhook, activecampaign, @@ -66,6 +69,7 @@ mailgun, mailjet_create_contact, mailjet_update_contact_list, + mailset_send_email, meta_ads, microsoft_teams, posthog, diff --git a/posthog/cdp/templates/_internal/template_broadcast.py b/posthog/cdp/templates/_internal/template_broadcast.py new file mode 100644 index 0000000000000..fa380de5642a6 --- /dev/null +++ b/posthog/cdp/templates/_internal/template_broadcast.py @@ -0,0 +1,206 @@ +from posthog.cdp.templates.hog_function_template import HogFunctionTemplate + +template_new_broadcast: HogFunctionTemplate = HogFunctionTemplate( + status="beta", + type="broadcast", + id="template-new-broadcast", + name="Hello !", + description="This is a broadcast", + icon_url="/static/hedgehog/explorer-hog.png", + category=["Email Marketing"], + hog="""import('provider/email').sendEmail(inputs.email)""".strip(), + inputs_schema=[ + { + "key": "email", + "type": "email", + "label": "Email", + "default": { + "to": "{person.properties.email}", + "body": "Hello {person.properties.first_name} {person.properties.last_name}!\n\nThis is a broadcast", + "from": "info@posthog.com", + "subject": "Hello {person.properties.email}", + "html": '\n\n \n \n \n \n \n \n \n \n \n\n\n\n\n \n \n \n \n \n \n \n \n
\n \n \n \n \n
\n
\n
\n \n \n\n
\n
\n
\n \n\n \n \n \n \n \n
\n \n
\n

Hello from PostHog!

\n
\n\n
\n\n\n \n \n \n \n \n
\n \n \n
\n \n \n Learn more\n \n \n
\n\n
\n\n
\n
\n
\n\n \n
\n
\n
\n \n\n\n \n
\n \n \n\n\n\n', + "design": { + "body": { + "id": "TlJ2GekAva", + "rows": [ + { + "id": "-sL7LJ6rhD", + "cells": [1], + "values": { + "_meta": {"htmlID": "u_row_1", "htmlClassNames": "u_row"}, + "anchor": "", + "columns": False, + "padding": "0px", + "hideable": True, + "deletable": True, + "draggable": True, + "selectable": True, + "_styleGuide": None, + "hideDesktop": False, + "duplicatable": True, + "backgroundColor": "", + "backgroundImage": { + "url": "", + "size": "custom", + "repeat": "no-repeat", + "position": "center", + "fullWidth": True, + "customPosition": ["50%", "50%"], + }, + "displayCondition": None, + "columnsBackgroundColor": "", + }, + "columns": [ + { + "id": "IT_J8vPWTn", + "values": { + "_meta": {"htmlID": "u_column_1", "htmlClassNames": "u_column"}, + "border": {}, + "padding": "0px", + "borderRadius": "0px", + "backgroundColor": "", + }, + "contents": [ + { + "id": "BSAz3H7CN9", + "type": "text", + "values": { + "text": '

Hello from PostHog!

', + "_meta": { + "htmlID": "u_content_text_1", + "htmlClassNames": "u_content_text", + }, + "anchor": "", + "fontSize": "14px", + "hideable": True, + "deletable": True, + "draggable": True, + "linkStyle": { + "inherit": True, + "linkColor": "#0000ee", + "linkUnderline": True, + "linkHoverColor": "#0000ee", + "linkHoverUnderline": True, + }, + "textAlign": "left", + "_languages": {}, + "lineHeight": "140%", + "selectable": True, + "_styleGuide": None, + "duplicatable": True, + "containerPadding": "10px", + "displayCondition": None, + }, + }, + { + "id": "cAnEDJLdIg", + "type": "button", + "values": { + "href": { + "name": "web", + "attrs": {"href": "{{href}}", "target": "{{target}}"}, + "values": {"href": "https://posthog.com/", "target": "_blank"}, + }, + "size": {"width": "100%", "autoWidth": True}, + "text": "Learn more", + "_meta": { + "htmlID": "u_content_button_1", + "htmlClassNames": "u_content_button", + }, + "anchor": "", + "border": {}, + "padding": "10px 20px", + "fontSize": "14px", + "hideable": True, + "deletable": True, + "draggable": True, + "textAlign": "center", + "_languages": {}, + "lineHeight": "120%", + "selectable": True, + "_styleGuide": None, + "borderRadius": "4px", + "buttonColors": { + "color": "#FFFFFF", + "hoverColor": "#FFFFFF", + "backgroundColor": "#3AAEE0", + "hoverBackgroundColor": "#3AAEE0", + }, + "duplicatable": True, + "calculatedWidth": 112, + "calculatedHeight": 37, + "containerPadding": "10px", + "displayCondition": None, + }, + }, + ], + } + ], + } + ], + "values": { + "_meta": {"htmlID": "u_body", "htmlClassNames": "u_body"}, + "language": {}, + "linkStyle": { + "body": True, + "linkColor": "#0000ee", + "linkUnderline": True, + "linkHoverColor": "#0000ee", + "linkHoverUnderline": True, + }, + "textColor": "#000000", + "fontFamily": {"label": "Arial", "value": "arial,helvetica,sans-serif"}, + "popupWidth": "600px", + "_styleGuide": None, + "popupHeight": "auto", + "borderRadius": "10px", + "contentAlign": "center", + "contentWidth": "500px", + "popupPosition": "center", + "preheaderText": "", + "backgroundColor": "#F7F8F9", + "backgroundImage": { + "url": "", + "size": "custom", + "repeat": "no-repeat", + "position": "center", + "fullWidth": True, + }, + "contentVerticalAlign": "center", + "popupBackgroundColor": "#FFFFFF", + "popupBackgroundImage": { + "url": "", + "size": "cover", + "repeat": "no-repeat", + "position": "center", + "fullWidth": True, + }, + "popupCloseButton_action": { + "name": "close_popup", + "attrs": { + "onClick": "document.querySelector('.u-popup-container').style.display = 'none';" + }, + }, + "popupCloseButton_margin": "0px", + "popupCloseButton_position": "top-right", + "popupCloseButton_iconColor": "#000000", + "popupOverlay_backgroundColor": "rgba(0, 0, 0, 0.1)", + "popupCloseButton_borderRadius": "0px", + "popupCloseButton_backgroundColor": "#DDDDDD", + }, + "footers": [], + "headers": [], + }, + "counters": {"u_row": 1, "u_column": 1, "u_content_text": 1, "u_content_button": 1}, + "schemaVersion": 17, + }, + }, + "secret": False, + "required": True, + }, + ], + filters={ + "properties": [{"key": "email", "value": "is_set", "operator": "is_set", "type": "person"}], + }, +) diff --git a/posthog/cdp/templates/mailjet/template_mailjet.py b/posthog/cdp/templates/mailjet/template_mailjet.py index a089372daefb8..23cf5e07da0f4 100644 --- a/posthog/cdp/templates/mailjet/template_mailjet.py +++ b/posthog/cdp/templates/mailjet/template_mailjet.py @@ -3,24 +3,22 @@ # See https://dev.mailjet.com/email/reference/contacts/contact-list/ -common_inputs_schemas = [ - { - "key": "api_key", - "type": "string", - "label": "Mailjet API Key", - "secret": True, - "required": True, - }, - { - "key": "email", - "type": "string", - "label": "Email of the user", - "description": "Where to find the email for the user to be checked with Mailjet", - "default": "{person.properties.email}", - "secret": False, - "required": True, - }, -] +input_api_key = { + "key": "api_key", + "type": "string", + "label": "Mailjet API Key", + "secret": True, + "required": True, +} +input_email = { + "key": "email", + "type": "string", + "label": "Email of the user", + "description": "Where to find the email for the user to be checked with Mailjet", + "default": "{person.properties.email}", + "secret": False, + "required": True, +} common_filters = { "events": [{"id": "$identify", "name": "$identify", "type": "events", "order": 0}], @@ -56,7 +54,8 @@ }) """.strip(), inputs_schema=[ - *common_inputs_schemas, + input_api_key, + input_email, { "key": "name", "type": "string", @@ -110,7 +109,8 @@ }) """.strip(), inputs_schema=[ - *common_inputs_schemas, + input_api_key, + input_email, { "key": "contact_list_id", "type": "string", @@ -148,3 +148,56 @@ ], filters=common_filters, ) + + +template_send_email: HogFunctionTemplate = HogFunctionTemplate( + status="beta", + type="email", + id="template-mailjet-send-email", + name="Mailjet", + description="Send an email with Mailjet", + icon_url="/static/services/mailjet.png", + category=["Email Provider"], + hog=""" +fun sendEmail(email) { + fetch(f'https://api.mailjet.com/v3.1/send', { + 'method': 'POST', + 'headers': { + 'Authorization': f'Bearer {inputs.api_key}', + 'Content-Type': 'application/json' + }, + 'body': { + 'Messages': [ + { + 'From': { + 'Email': inputs.email.from, + 'Name': '' + }, + 'To': [ + { + 'Email': inputs.email.to, + 'Name': '' + } + ], + 'Subject': inputs.email.subject, + 'HTMLPart': inputs.email.html + } + ] + } + }) +} +// TODO: support the "export" keyword in front of functions +return {'sendEmail': sendEmail} +""".strip(), + inputs_schema=[ + input_api_key, + { + "key": "from_email", + "type": "string", + "label": "Email to send from", + "secret": False, + "required": True, + }, + ], + filters=common_filters, +) diff --git a/posthog/hogql_queries/insights/trends/test/__snapshots__/test_trends.ambr b/posthog/hogql_queries/insights/trends/test/__snapshots__/test_trends.ambr index 6027f7ca7bb42..4ae57feb8cb96 100644 --- a/posthog/hogql_queries/insights/trends/test/__snapshots__/test_trends.ambr +++ b/posthog/hogql_queries/insights/trends/test/__snapshots__/test_trends.ambr @@ -851,14 +851,49 @@ # --- # name: TestTrends.test_dau_with_breakdown_filtering_with_sampling.1 ''' - /* celery:posthog.tasks.tasks.sync_insight_caching_state */ - SELECT team_id, - date_diff('second', max(timestamp), now()) AS age - FROM events - WHERE timestamp > date_sub(DAY, 3, now()) - AND timestamp < now() - GROUP BY team_id - ORDER BY age; + SELECT groupArray(1)(date)[1] AS date, + arrayFold((acc, x) -> arrayMap(i -> plus(acc[i], x[i]), range(1, plus(length(date), 1))), groupArray(ifNull(total, 0)), arrayWithConstant(length(date), reinterpretAsFloat64(0))) AS total, + if(ifNull(ifNull(greaterOrEquals(row_number, 25), 0), 0), '$$_posthog_breakdown_other_$$', breakdown_value) AS breakdown_value + FROM + (SELECT arrayMap(number -> plus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC'))), toIntervalDay(number)), range(0, plus(coalesce(dateDiff('day', toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC'))), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))))), 1))) AS date, + arrayMap(_match_date -> arraySum(arraySlice(groupArray(ifNull(count, 0)), indexOf(groupArray(day_start) AS _days_for_count, _match_date) AS _index, plus(minus(arrayLastIndex(x -> ifNull(equals(x, _match_date), isNull(x) + and isNull(_match_date)), _days_for_count), _index), 1))), date) AS total, + breakdown_value AS breakdown_value, + rowNumberInAllBlocks() AS row_number + FROM + (SELECT sum(total) AS count, + day_start AS day_start, + breakdown_value AS breakdown_value + FROM + (SELECT count(DISTINCT if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id)) AS total, + toStartOfDay(toTimeZone(e.timestamp, 'UTC')) AS day_start, + ifNull(nullIf(toString(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.properties, '$some_property'), ''), 'null'), '^"|"$', '')), ''), '$$_posthog_breakdown_null_$$') AS breakdown_value + FROM events AS e SAMPLE 1.0 + LEFT OUTER JOIN + (SELECT argMax(person_distinct_id_overrides.person_id, person_distinct_id_overrides.version) AS person_id, + person_distinct_id_overrides.distinct_id AS distinct_id + FROM person_distinct_id_overrides + WHERE equals(person_distinct_id_overrides.team_id, 2) + GROUP BY person_distinct_id_overrides.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) + WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))), equals(e.event, 'sign up')) + GROUP BY day_start, + breakdown_value) + GROUP BY day_start, + breakdown_value + ORDER BY day_start ASC, breakdown_value ASC) + GROUP BY breakdown_value + ORDER BY if(ifNull(equals(breakdown_value, '$$_posthog_breakdown_other_$$'), 0), 2, if(ifNull(equals(breakdown_value, '$$_posthog_breakdown_null_$$'), 0), 1, 0)) ASC, arraySum(total) DESC, breakdown_value ASC) + WHERE isNotNull(breakdown_value) + GROUP BY breakdown_value + ORDER BY if(ifNull(equals(breakdown_value, '$$_posthog_breakdown_other_$$'), 0), 2, if(ifNull(equals(breakdown_value, '$$_posthog_breakdown_null_$$'), 0), 1, 0)) ASC, arraySum(total) DESC, breakdown_value ASC + LIMIT 50000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1, + format_csv_allow_double_quotes=0, + max_ast_elements=4000000, + max_expanded_ast_elements=4000000, + max_bytes_before_external_group_by=0 ''' # --- # name: TestTrends.test_dau_with_breakdown_filtering_with_sampling.10 @@ -1075,38 +1110,143 @@ # --- # name: TestTrends.test_dau_with_breakdown_filtering_with_sampling.2 ''' - /* celery:posthog.tasks.tasks.sync_insight_caching_state */ - SELECT team_id, - date_diff('second', max(timestamp), now()) AS age - FROM events - WHERE timestamp > date_sub(DAY, 3, now()) - AND timestamp < now() - GROUP BY team_id - ORDER BY age; + SELECT groupArray(1)(date)[1] AS date, + arrayFold((acc, x) -> arrayMap(i -> plus(acc[i], x[i]), range(1, plus(length(date), 1))), groupArray(ifNull(total, 0)), arrayWithConstant(length(date), reinterpretAsFloat64(0))) AS total, + if(ifNull(ifNull(greaterOrEquals(row_number, 25), 0), 0), '$$_posthog_breakdown_other_$$', breakdown_value) AS breakdown_value + FROM + (SELECT arrayMap(number -> plus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC'))), toIntervalDay(number)), range(0, plus(coalesce(dateDiff('day', toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC'))), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))))), 1))) AS date, + arrayMap(_match_date -> arraySum(arraySlice(groupArray(ifNull(count, 0)), indexOf(groupArray(day_start) AS _days_for_count, _match_date) AS _index, plus(minus(arrayLastIndex(x -> ifNull(equals(x, _match_date), isNull(x) + and isNull(_match_date)), _days_for_count), _index), 1))), date) AS total, + breakdown_value AS breakdown_value, + rowNumberInAllBlocks() AS row_number + FROM + (SELECT sum(total) AS count, + day_start AS day_start, + breakdown_value AS breakdown_value + FROM + (SELECT count(DISTINCT if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id)) AS total, + toStartOfDay(toTimeZone(e.timestamp, 'UTC')) AS day_start, + ifNull(nullIf(toString(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.properties, '$some_property'), ''), 'null'), '^"|"$', '')), ''), '$$_posthog_breakdown_null_$$') AS breakdown_value + FROM events AS e SAMPLE 1.0 + LEFT OUTER JOIN + (SELECT argMax(person_distinct_id_overrides.person_id, person_distinct_id_overrides.version) AS person_id, + person_distinct_id_overrides.distinct_id AS distinct_id + FROM person_distinct_id_overrides + WHERE equals(person_distinct_id_overrides.team_id, 2) + GROUP BY person_distinct_id_overrides.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) + WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))), equals(e.event, 'sign up')) + GROUP BY day_start, + breakdown_value) + GROUP BY day_start, + breakdown_value + ORDER BY day_start ASC, breakdown_value ASC) + GROUP BY breakdown_value + ORDER BY if(ifNull(equals(breakdown_value, '$$_posthog_breakdown_other_$$'), 0), 2, if(ifNull(equals(breakdown_value, '$$_posthog_breakdown_null_$$'), 0), 1, 0)) ASC, arraySum(total) DESC, breakdown_value ASC) + WHERE isNotNull(breakdown_value) + GROUP BY breakdown_value + ORDER BY if(ifNull(equals(breakdown_value, '$$_posthog_breakdown_other_$$'), 0), 2, if(ifNull(equals(breakdown_value, '$$_posthog_breakdown_null_$$'), 0), 1, 0)) ASC, arraySum(total) DESC, breakdown_value ASC + LIMIT 50000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1, + format_csv_allow_double_quotes=0, + max_ast_elements=4000000, + max_expanded_ast_elements=4000000, + max_bytes_before_external_group_by=0 ''' # --- # name: TestTrends.test_dau_with_breakdown_filtering_with_sampling.3 ''' - /* celery:posthog.tasks.tasks.sync_insight_caching_state */ - SELECT team_id, - date_diff('second', max(timestamp), now()) AS age - FROM events - WHERE timestamp > date_sub(DAY, 3, now()) - AND timestamp < now() - GROUP BY team_id - ORDER BY age; + SELECT groupArray(1)(date)[1] AS date, + arrayFold((acc, x) -> arrayMap(i -> plus(acc[i], x[i]), range(1, plus(length(date), 1))), groupArray(ifNull(total, 0)), arrayWithConstant(length(date), reinterpretAsFloat64(0))) AS total, + arrayMap(i -> if(ifNull(ifNull(greaterOrEquals(row_number, 25), 0), 0), '$$_posthog_breakdown_other_$$', i), breakdown_value) AS breakdown_value + FROM + (SELECT arrayMap(number -> plus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC'))), toIntervalDay(number)), range(0, plus(coalesce(dateDiff('day', toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC'))), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))))), 1))) AS date, + arrayMap(_match_date -> arraySum(arraySlice(groupArray(ifNull(count, 0)), indexOf(groupArray(day_start) AS _days_for_count, _match_date) AS _index, plus(minus(arrayLastIndex(x -> ifNull(equals(x, _match_date), isNull(x) + and isNull(_match_date)), _days_for_count), _index), 1))), date) AS total, + breakdown_value AS breakdown_value, + rowNumberInAllBlocks() AS row_number + FROM + (SELECT sum(total) AS count, + day_start AS day_start, + [ifNull(toString(breakdown_value_1), '$$_posthog_breakdown_null_$$')] AS breakdown_value + FROM + (SELECT count(DISTINCT if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id)) AS total, + toStartOfDay(toTimeZone(e.timestamp, 'UTC')) AS day_start, + ifNull(nullIf(toString(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.properties, '$some_property'), ''), 'null'), '^"|"$', '')), ''), '$$_posthog_breakdown_null_$$') AS breakdown_value_1 + FROM events AS e SAMPLE 1.0 + LEFT OUTER JOIN + (SELECT argMax(person_distinct_id_overrides.person_id, person_distinct_id_overrides.version) AS person_id, + person_distinct_id_overrides.distinct_id AS distinct_id + FROM person_distinct_id_overrides + WHERE equals(person_distinct_id_overrides.team_id, 2) + GROUP BY person_distinct_id_overrides.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) + WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))), equals(e.event, 'sign up')) + GROUP BY day_start, + breakdown_value_1) + GROUP BY day_start, + breakdown_value_1 + ORDER BY day_start ASC, breakdown_value ASC) + GROUP BY breakdown_value + ORDER BY if(has(breakdown_value, '$$_posthog_breakdown_other_$$'), 2, if(has(breakdown_value, '$$_posthog_breakdown_null_$$'), 1, 0)) ASC, arraySum(total) DESC, breakdown_value ASC) + WHERE arrayExists(x -> isNotNull(x), breakdown_value) + GROUP BY breakdown_value + ORDER BY if(has(breakdown_value, '$$_posthog_breakdown_other_$$'), 2, if(has(breakdown_value, '$$_posthog_breakdown_null_$$'), 1, 0)) ASC, arraySum(total) DESC, breakdown_value ASC + LIMIT 50000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1, + format_csv_allow_double_quotes=0, + max_ast_elements=4000000, + max_expanded_ast_elements=4000000, + max_bytes_before_external_group_by=0 ''' # --- # name: TestTrends.test_dau_with_breakdown_filtering_with_sampling.4 ''' - /* celery:posthog.tasks.tasks.sync_insight_caching_state */ - SELECT team_id, - date_diff('second', max(timestamp), now()) AS age - FROM events - WHERE timestamp > date_sub(DAY, 3, now()) - AND timestamp < now() - GROUP BY team_id - ORDER BY age; + SELECT groupArray(1)(date)[1] AS date, + arrayFold((acc, x) -> arrayMap(i -> plus(acc[i], x[i]), range(1, plus(length(date), 1))), groupArray(ifNull(total, 0)), arrayWithConstant(length(date), reinterpretAsFloat64(0))) AS total, + arrayMap(i -> if(ifNull(ifNull(greaterOrEquals(row_number, 25), 0), 0), '$$_posthog_breakdown_other_$$', i), breakdown_value) AS breakdown_value + FROM + (SELECT arrayMap(number -> plus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC'))), toIntervalDay(number)), range(0, plus(coalesce(dateDiff('day', toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC'))), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))))), 1))) AS date, + arrayMap(_match_date -> arraySum(arraySlice(groupArray(ifNull(count, 0)), indexOf(groupArray(day_start) AS _days_for_count, _match_date) AS _index, plus(minus(arrayLastIndex(x -> ifNull(equals(x, _match_date), isNull(x) + and isNull(_match_date)), _days_for_count), _index), 1))), date) AS total, + breakdown_value AS breakdown_value, + rowNumberInAllBlocks() AS row_number + FROM + (SELECT sum(total) AS count, + day_start AS day_start, + [ifNull(toString(breakdown_value_1), '$$_posthog_breakdown_null_$$')] AS breakdown_value + FROM + (SELECT count(DISTINCT if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id)) AS total, + toStartOfDay(toTimeZone(e.timestamp, 'UTC')) AS day_start, + ifNull(nullIf(toString(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.properties, '$some_property'), ''), 'null'), '^"|"$', '')), ''), '$$_posthog_breakdown_null_$$') AS breakdown_value_1 + FROM events AS e SAMPLE 1.0 + LEFT OUTER JOIN + (SELECT argMax(person_distinct_id_overrides.person_id, person_distinct_id_overrides.version) AS person_id, + person_distinct_id_overrides.distinct_id AS distinct_id + FROM person_distinct_id_overrides + WHERE equals(person_distinct_id_overrides.team_id, 2) + GROUP BY person_distinct_id_overrides.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) + WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))), equals(e.event, 'sign up')) + GROUP BY day_start, + breakdown_value_1) + GROUP BY day_start, + breakdown_value_1 + ORDER BY day_start ASC, breakdown_value ASC) + GROUP BY breakdown_value + ORDER BY if(has(breakdown_value, '$$_posthog_breakdown_other_$$'), 2, if(has(breakdown_value, '$$_posthog_breakdown_null_$$'), 1, 0)) ASC, arraySum(total) DESC, breakdown_value ASC) + WHERE arrayExists(x -> isNotNull(x), breakdown_value) + GROUP BY breakdown_value + ORDER BY if(has(breakdown_value, '$$_posthog_breakdown_other_$$'), 2, if(has(breakdown_value, '$$_posthog_breakdown_null_$$'), 1, 0)) ASC, arraySum(total) DESC, breakdown_value ASC + LIMIT 50000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1, + format_csv_allow_double_quotes=0, + max_ast_elements=4000000, + max_expanded_ast_elements=4000000, + max_bytes_before_external_group_by=0 ''' # --- # name: TestTrends.test_dau_with_breakdown_filtering_with_sampling.5 From 76efa0baa0a5dbe7d61bc6fa047c6860855bac25 Mon Sep 17 00:00:00 2001 From: Tom Owers Date: Fri, 25 Oct 2024 16:59:29 +0100 Subject: [PATCH 3/5] chore(data-warehouse): Added more reasons for jobs to not retry (#25785) --- mypy-baseline.txt | 1 - .../data_imports/external_data_job.py | 49 +++++++++++++---- .../tests/data_imports/test_end_to_end.py | 54 +++++++++++++++++++ .../external_data/test_external_data_job.py | 7 ++- 4 files changed, 99 insertions(+), 12 deletions(-) diff --git a/mypy-baseline.txt b/mypy-baseline.txt index 6f5de8a4ccf38..57a7e095f6298 100644 --- a/mypy-baseline.txt +++ b/mypy-baseline.txt @@ -808,7 +808,6 @@ posthog/temporal/tests/external_data/test_external_data_job.py:0: error: Invalid posthog/temporal/tests/external_data/test_external_data_job.py:0: error: Invalid index type "str" for "dict[Type, Sequence[str]]"; expected type "Type" [index] posthog/temporal/tests/external_data/test_external_data_job.py:0: error: Invalid index type "str" for "dict[Type, Sequence[str]]"; expected type "Type" [index] posthog/temporal/tests/external_data/test_external_data_job.py:0: error: Invalid index type "str" for "dict[Type, Sequence[str]]"; expected type "Type" [index] -posthog/temporal/tests/external_data/test_external_data_job.py:0: error: Invalid index type "str" for "dict[Type, Sequence[str]]"; expected type "Type" [index] posthog/api/test/batch_exports/conftest.py:0: error: Signature of "run" incompatible with supertype "Worker" [override] posthog/api/test/batch_exports/conftest.py:0: note: Superclass: posthog/api/test/batch_exports/conftest.py:0: note: def run(self) -> Coroutine[Any, Any, None] diff --git a/posthog/temporal/data_imports/external_data_job.py b/posthog/temporal/data_imports/external_data_job.py index 1f44942a422b7..01367cb710812 100644 --- a/posthog/temporal/data_imports/external_data_job.py +++ b/posthog/temporal/data_imports/external_data_job.py @@ -2,6 +2,7 @@ import datetime as dt import json +import posthoganalytics from temporalio import activity, exceptions, workflow from temporalio.common import RetryPolicy @@ -21,6 +22,7 @@ create_external_data_job_model_activity, ) from posthog.temporal.data_imports.workflow_activities.import_data import ImportDataActivityInputs, import_data_activity +from posthog.utils import get_machine_id from posthog.warehouse.data_load.service import ( a_delete_external_data_schedule, a_external_data_workflow_exists, @@ -37,16 +39,27 @@ ExternalDataJob, get_active_schemas_for_source_id, ExternalDataSource, + get_external_data_source, ) from posthog.temporal.common.logger import bind_temporal_worker_logger from posthog.warehouse.models.external_data_schema import aupdate_should_sync -Non_Retryable_Schema_Errors = [ - "NoSuchTableError", - "401 Client Error: Unauthorized for url: https://api.stripe.com", - "403 Client Error: Forbidden for url: https://api.stripe.com", -] +Non_Retryable_Schema_Errors: dict[ExternalDataSource.Type, list[str]] = { + ExternalDataSource.Type.STRIPE: [ + "401 Client Error: Unauthorized for url: https://api.stripe.com", + "403 Client Error: Forbidden for url: https://api.stripe.com", + ], + ExternalDataSource.Type.POSTGRES: [ + "NoSuchTableError", + "is not permitted to log in", + "Tenant or user not found connection to server", + "FATAL: Tenant or user not found", + "error received from server in SCRAM exchange: Wrong password", + "could not translate host name", + ], + ExternalDataSource.Type.ZENDESK: ["404 Client Error: Not Found for url", "403 Client Error: Forbidden for url"], +} @dataclasses.dataclass @@ -54,6 +67,7 @@ class UpdateExternalDataJobStatusInputs: team_id: int job_id: str | None schema_id: str + source_id: str status: str internal_error: str | None latest_error: str | None @@ -78,10 +92,26 @@ async def update_external_data_job_model(inputs: UpdateExternalDataJobStatusInpu f"External data job failed for external data schema {inputs.schema_id} with error: {inputs.internal_error}" ) - has_non_retryable_error = any(error in inputs.internal_error for error in Non_Retryable_Schema_Errors) - if has_non_retryable_error: - logger.info("Schema has a non-retryable error - turning off syncing") - await aupdate_should_sync(schema_id=inputs.schema_id, team_id=inputs.team_id, should_sync=False) + source: ExternalDataSource = await get_external_data_source(inputs.source_id) + non_retryable_errors = Non_Retryable_Schema_Errors.get(ExternalDataSource.Type(source.source_type)) + + if non_retryable_errors is not None: + has_non_retryable_error = any(error in inputs.internal_error for error in non_retryable_errors) + if has_non_retryable_error: + logger.info("Schema has a non-retryable error - turning off syncing") + posthoganalytics.capture( + get_machine_id(), + "schema non-retryable error", + { + "schemaId": inputs.schema_id, + "sourceId": inputs.source_id, + "sourceType": source.source_type, + "jobId": inputs.job_id, + "teamId": inputs.team_id, + "error": inputs.internal_error, + }, + ) + await aupdate_should_sync(schema_id=inputs.schema_id, team_id=inputs.team_id, should_sync=False) await aupdate_external_job_status( job_id=job_id, @@ -166,6 +196,7 @@ async def run(self, inputs: ExternalDataWorkflowInputs): internal_error=None, team_id=inputs.team_id, schema_id=str(inputs.external_data_schema_id), + source_id=str(inputs.external_data_source_id), ) try: diff --git a/posthog/temporal/tests/data_imports/test_end_to_end.py b/posthog/temporal/tests/data_imports/test_end_to_end.py index cb92492b29c4c..98d81cc153bbe 100644 --- a/posthog/temporal/tests/data_imports/test_end_to_end.py +++ b/posthog/temporal/tests/data_imports/test_end_to_end.py @@ -6,6 +6,7 @@ from asgiref.sync import sync_to_async from django.conf import settings from django.test import override_settings +import posthoganalytics import pytest import pytest_asyncio import psycopg @@ -905,3 +906,56 @@ def get_jobs(): with pytest.raises(Exception): await sync_to_async(execute_hogql_query)("SELECT * FROM stripe_customer", team) + + +@pytest.mark.django_db(transaction=True) +@pytest.mark.asyncio +async def test_non_retryable_error(team, stripe_customer): + source = await sync_to_async(ExternalDataSource.objects.create)( + source_id=uuid.uuid4(), + connection_id=uuid.uuid4(), + destination_id=uuid.uuid4(), + team=team, + status="running", + source_type="Stripe", + job_inputs={"stripe_secret_key": "test-key", "stripe_account_id": "acct_id"}, + ) + + schema = await sync_to_async(ExternalDataSchema.objects.create)( + name="Customer", + team_id=team.pk, + source_id=source.pk, + sync_type=ExternalDataSchema.SyncType.FULL_REFRESH, + sync_type_config={}, + ) + + workflow_id = str(uuid.uuid4()) + inputs = ExternalDataWorkflowInputs( + team_id=team.id, + external_data_source_id=source.pk, + external_data_schema_id=schema.id, + ) + + with ( + mock.patch( + "posthog.temporal.data_imports.workflow_activities.check_billing_limits.list_limited_team_attributes", + ) as mock_list_limited_team_attributes, + mock.patch.object(posthoganalytics, "capture") as capture_mock, + ): + mock_list_limited_team_attributes.side_effect = Exception( + "401 Client Error: Unauthorized for url: https://api.stripe.com" + ) + + with pytest.raises(Exception): + await _execute_run(workflow_id, inputs, stripe_customer["data"]) + + capture_mock.assert_called_once() + + job: ExternalDataJob = await sync_to_async(ExternalDataJob.objects.get)(team_id=team.id, schema_id=schema.pk) + await sync_to_async(schema.refresh_from_db)() + + assert job.status == ExternalDataJob.Status.FAILED + assert schema.should_sync is False + + with pytest.raises(Exception): + await sync_to_async(execute_hogql_query)("SELECT * FROM stripe_customer", team) diff --git a/posthog/temporal/tests/external_data/test_external_data_job.py b/posthog/temporal/tests/external_data/test_external_data_job.py index d5839cd4ce0ef..1b5b3d692d5ed 100644 --- a/posthog/temporal/tests/external_data/test_external_data_job.py +++ b/posthog/temporal/tests/external_data/test_external_data_job.py @@ -252,6 +252,7 @@ async def test_update_external_job_activity(activity_environment, team, **kwargs latest_error=None, internal_error=None, schema_id=str(schema.pk), + source_id=str(new_source.pk), team_id=team.id, ) @@ -296,6 +297,7 @@ async def test_update_external_job_activity_with_retryable_error(activity_enviro latest_error=None, internal_error="Some other retryable error", schema_id=str(schema.pk), + source_id=str(new_source.pk), team_id=team.id, ) @@ -317,11 +319,11 @@ async def test_update_external_job_activity_with_non_retryable_error(activity_en destination_id=uuid.uuid4(), team=team, status="running", - source_type="Stripe", + source_type="Postgres", ) schema = await sync_to_async(ExternalDataSchema.objects.create)( - name=PIPELINE_TYPE_SCHEMA_DEFAULT_MAPPING[new_source.source_type][0], + name="test_123", team_id=team.id, source_id=new_source.pk, should_sync=True, @@ -341,6 +343,7 @@ async def test_update_external_job_activity_with_non_retryable_error(activity_en latest_error=None, internal_error="NoSuchTableError: TableA", schema_id=str(schema.pk), + source_id=str(new_source.pk), team_id=team.id, ) with mock.patch("posthog.warehouse.models.external_data_schema.external_data_workflow_exists", return_value=False): From 0ad1b5fe3b779d5518772404fd5e73084efb5d92 Mon Sep 17 00:00:00 2001 From: Patricio Date: Fri, 25 Oct 2024 14:33:58 -0300 Subject: [PATCH 4/5] fix: link to project home in env switcher when in onboarding (#25799) Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com> --- ...er--trends-line-insight-detailed--dark.png | Bin 21655 -> 21701 bytes ...r--trends-line-insight-detailed--light.png | Bin 21344 -> 21385 bytes .../layout/navigation/EnvironmentSwitcher.tsx | 11 +++++++++++ 3 files changed, 11 insertions(+) diff --git a/frontend/__snapshots__/exporter-exporter--trends-line-insight-detailed--dark.png b/frontend/__snapshots__/exporter-exporter--trends-line-insight-detailed--dark.png index e3e93b3dd9678360493d495ab090800a9f994b6f..b54d4facb0bfe8353e19863b17eee837e4aab6c0 100644 GIT binary patch literal 21701 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 RdnN$nb5B=4mvv4FO#tji&>jE) literal 21655 zcmeFZXIN9+w=Zh%fQrZ~RV*N&pdv(S1XQF;m#!c!G$BCfQ4x3*5S0=-QbMmn2q8dJ z1cXqeLm&x7KnM_e3khfP?!E6lANF~keeT)k%YFXy10gGG%{AwkV~+6~zcJQ&`&dVf z?F7$>ef##YsXw}}zi;26>3#bSEFL=mju;#a+XWx{;rePS`${_aX7=s7xKI7QvY~Iv z92t>dxK{UdjQaI^_hFwIX^oGU9vr&=SnIJZT{`~9mH59d3*W+Z^#*8PSJ%1)%M^}( zV%vP6YH;SSg2RuUx=qh#OUx~dK#xGgZ@i3kUkwsWZyzi;2) zn*WsxT8GDOIQRZ6HLb9>vceP?p(Q~F$$G}dR%SK9YqQcPX^O{*@^R}4Ga_*!2__Q1z0<=(AdnZrp_Epby3#D%q$6oB|}WWFU4k< zcb#8=u*&Mb47v0b7-13O)@BF)n*{d1kg$^VI-MCOxmriCkK&1QPzv}tk`dmfJ+#~^ z6~1#PV4b@H&)m0lXm8yD>z@~5ldVRI?V^Wa{Xa_+Odp$d`?q{~7T!_HR}uhe-&t*I zGd&neOUnl9__8w#5x+qF(mXG{QfQPm1Y6oWQFn$jaeJloxz3EF#YRFcdF4)sB>s6% zBC>WVJ}N%GL^4(0odUJ?_ilX0l}ui2y)C_`nsw+HMSW?pcI1~rv^=u(6RXmTST~l z#*kXLLseO>>so(yxwLbCk#DunJZXkrxBDkccO+mJ+Das1Yi8E{erE)1(1$LgE8S6P zwEp7G_99Ds|L^0r`Wh1yKIC@d^umwaVYH6{MrnOBMid=Lczsxo=OZc*D4EKdv5wc)r1k zPQl#h3$?W{Op=qfoBi;EM%5$sI=+~h5p=%mgqDVAOv}z}ZR+U~qk_P3&jB83*xUey z7;K5JbRC}B4fZ3m(|t(toWLvy1iAd=U`;otPc7PzwEN^7I>JTK3*_~}1j^6ZKIf^n ztrs0B92-N7lkLgU#kG#@Ntl(X_D*e7T%1uG9Y_iorB3Uzr#+VKX^JA~N}I-aoVp4n zn$tSFJWwHYZ?#@lYZ&)is=0uS1FNP;s%bhF2Uz!95%*hNjw+wUZRkMuqWqXghCO|B!R3KllKq zq_r*D04^SaLvM+qbyDRPs1=N1cLHOI(Bw{}9oYABl)@Lp*v}-~bXz)(3!mU-pQA8z zr*&&K%S)tS=iN8UebO5>)9>D~T+Pkd2!sw-v%>V5eSV4EU* z5K%O^W!f$V=&v0UJ-R;k3Gl z0JbvEw|{PkQ&`6e16$LP-TeOj^$|ASNIuz`qN2dBFN33aAqBqJ`B)KtMSB-=jkk`{ z%w}wN=7WfEg{{?x;zdAgU73wHk|0DP(Ye2JhR~$@r?1d~W?T&GFG$o+l6CfJOiJc& zD{hm#e%*06XKmJ~(As~iueGz9c7$`^J|E0%-|}=Fd}4p9{)1{A3$MkjqsH>K&kK*@ zgPu6ggr&O--!StZ8`JKn6N1yZh8_mEUh69rObd%7Etg=m^}4#>bsmY2Ey8bRx@X6( z&ksHW!%5Vd8mZ`<>o0bG_H69+;gf370*uWMxneSWcmDipI2x4y`B{UgJAp}ZZfMp` z7{q8!D~GVRr+%LwaiV@hS$=uS`i@lC`BNpRmE2$4p~Psbay3JtP@O5Vv;_jydaL(o z`1(9J9%+2Tyd#}33JxNA_0+Oso1)ViJ}@SPmn&D)?By!b8BXMWwOr^dT8jg0r13EU0g zxM5xun6<`OpC@MpVBd0zxUVlyw9o#kw_LbOY$d`u#0$K6)4gch8}tF(O1*o%Z1B?f z)o`|L8^S>bYXxm0W9Bf`HWb7VD06RSH(DvEm-jY{INxrLfhDG=6JV1CS2bBdV+;02 z;o>VBq(Uoob@gHrhJ+oSCg=BvP0?cq0N4ol5nM-DS!m_t?z}twwQeBF%*)JeN=dN2 z1{*Nr#A&89;;K^|-C3R14Mi8s)KbxmlAkg~$?Bq$C5z+$x?~`j8NctWmi@#^<=Sjt zyLPNYg*UAiH%&**S6L6dL+7UZEbFQ9dn{cI0m?)`Y@vZlkB{ttwc+1M)hyW@i!L-N zmD!Z%T`=g$H)saCP$%W?mY^W@;5BqF2y&zv>Ag@(k6$0k^s9)~Z_L$VtS(?om~~bGL7R#jiZ|`s zs$qSFK^d;Y+Su8lEb}OyEi#^toj*zi7AUqmKR3;*X(rcDVWdQaTvK8xhmLKE`I+AdV7? za?jDPAJ;%H35{>VRo0D7mYjq55xuk+}fyAFE-}dVW?3J zwjCtoZl}Uka~vDP*mu5jlj=7|46LEMwfssiU%w99Ll28~sGV^Klc33>9ym%@C*|f$ zvkCJis;DQ2fS9)2XiJrsM0*W>mJFURoX(DYFTaow+a0kRxK+C%$tShmZeb*0R_VK% zP>y?O`6b&C{1cN~Ya|;@$1zGdMgklb2=cq@sMhcYTGd3{L3)b4WIElbqlLnsqy0|!F8fv}O+z=ffhjJY|Ja4Agf$6X=+w&aOzDwu^ z4u<}Q8zUp59~vI<_?oQRfn`Na*a zY?}|8@VAMMvH^8{90HWb}Fsh2Uem}meD4^u*2B)roo}_AY#{iN56%a;MO6)i>Qm% ztu7bh@VDx=NxZ|}kenDDIUy(%iuUTlN)UstEJpU|;MS9NZ(P5AcbOQjoy@YDXo}L; zfHE2-1$`ICV!N$(eKt;Zy3H$n!9R+HwfiyV5qQLKsc!l~O7Jv!BnoMu(VisT9+WMG zUhUQ_onlR1%&o268Jf1*Y)#BHp{Tntfiyc3rKY1G4~^#>_F#+Wi(RE4_B`Wa(mO73 zE5Eh13sO)$FWD@$XnsZix%l^G9up7M_>`_e6af+uH;JE;;0T^y8^a-w`GJo;Q2qU))$ucmX&hVc4+fS*pPO6Y>{|AKv zf8?ekms|zrWOG@~&S`QNWAxXZ37Ut!D`qC#ee1T7$RvFd8 zlqh70#Spx1s&Dw@Nm*U#hCyp3tj7Z{0|4$@$-5x(Vg<}&sbdqG!PZM<56H59g28K3 z67E>@vND^g)+5rLDZNwM5mMw~Cc`!^y7nWpMbU{+Vi~T$qU$r$#gW^Km!sV$3JLbmff3G-flDsQCOVxZU@(Vv*h9G^A`q78>IR(TWTzu|$a z2JTT^wAh-Ugznv(pz97jW%J3MFNTm}tIw}aB4;NNK8XJkmC1!E@Nw;i`HD*Rb7|_*G#R2PpH5mnS z4N=9_pSFU*cOmFil(}2rXuZ5(?e4-z6}?t!ZN?$ZvdU!(EYS!3ZIxk}Xz2Fn;()aR zFow`c=aE}`T*qeM42cm?0fScAukBFQN(vK9OP_D0x;j{G8D||n>@99D@JnfhakBd= z#6j3tZo+IV+n`f!;f(=YMhmz_^6k zse#hk?d{sFlShynM}g(!m#-8A5Tph{btl)XnJ|BI<2p+zYa0O&z89rwmU0MEQ?9tE zC~nal)t+#x!VFUjdYhI|NK=?B)|9BLt*pF*_F|SI5#&;&$r9$eE>!CJM(E|qq4vn8 z5>A?%79c(FW_|@$X~o+<>(Ttsn(9ugfhbc}*2qplVL!FcXUdOWiOVp6=~rHYR3O6J z1SMLnJmK3b==@=BrSkOcfcZFpP-#tC!YdK!yPH7Z)Symg*2Ab4BWjLY%~pRc% zP(~$i+D$q{t6=Av$>Ds3gtkB8CtsI1BZ}7`3YKp*Hd{<5l$Cu3HgtEs&& za&FPHK51NH!&L8+TH(@%IYs6SHpGEe`=06zeHna)3*KwNFxM^h#yk?tXM?)?bb#=l zoKaRb3f%4t2?H07NtA{6UyfG%h(F-hjHqT#n;Gqqg!s2~XMpHOr5^lOsKI|@y4JRe z`vLE;wIQq$ z<&bT`pvv*`=J2_ETX4}+nhy=v&n0dQpmkaHb4w6oNf73Sk(=Z-{K^o-vwz4M|GS&c z?zcRn=z9wP6LcSVGpO}2b(8eZU0>=tV~uIr5UT&LZy_~wU&aExagqo(X&>|ur2Z9qB{A#hfE%1`j6VdWDHeC;! zeZE2J&am7it9RZfoz0zT! zDfZ;|Sp9`v00ROx1vgG@cV}#EZQ0pPGJNJ1BhoF`>WGr<#XV?vuDlxo4WAAIL@>P@ zz2b_*w$P+ay52 z>H4JAb2MY0+krpwV)cpfH%^>9sjqRAuMFuHL#Ycu$NI1SNz+e)AiuSlRzUotLPHPl z+4#32e8ZoEnQLgYCEkn0WE)8L*v`kH0sr8?Q_iNTNo-xGktR6^j5RRzpyB4lHYuID z#pG!~1Xt*!lJT>^RiVt}Gzd^!p50X&C}=-Qty z*Y0dlNy0LTRd;lbir@Wn%ho`HE7zRhy#!fVUVayW3YuB8^`E1<|Nhw(w;{9nMKkG+ zlY%?zwXz!DaL{gWbGq*~peQ@;GJDtO*DpYyjgR=P7-$^i5cr@^a!9W;uXIe)_uo!* zfXHPR&pih*5N!Y$EdW<8114_#_Y3+#fArp0Mf4q;A9>o=Q zuQo2z(FFN9&HRC&_sUYMblQ7Qc*f2%L zcRXE38@S{}TVT|m0RJcNIj^AkW)lk>9a{EGr-5X+EEWce5#)VELVpglHxp1xdEi|+rD5e!dl@9diA$KXIp}- zIC?c4N>T8cBeW7BDHHs6UwjQiOWEhdy4B7|HuDE~fjE+V7BMQN3VA=8zP5_`;zowq)K%sry1bT(*9ar1tvinQt@ELe!zNz7_z;l4G@=g zP2kpYYjSU?H57dZL3usWu(iT%Xl3@R>{(+PwA?79&NJ6Ya&u}6Kzx_pyceV2mCZR+{&;kCcBsN3`l{wTeT`@(rQdC^+^S&*Ix}EB&l*`8+x@q08jI1m+gn?@{*~)a@OMHAHn-vdOZ43|Z z`V8c(xYy5Ykk@H)9^=2ok;@S?JyiUk*QM4=%x_$pCM6a_pOu+8AQ}~r0leID)yebM zT}YKJ^GH06L<`2xq>1SI0T(apYKD~?UsMj-=KG*ukn(=GI_Avfhit5ltDx&oCmY8a z)T&@ZnU?rE$=cDKkq5XvD$=VEt%;IxC1u+Yr*Pqi*?8A!1K8SHmp^6G;_=4!J%Nw+ zE`vsZ+!-5Gg3xuD6jBWWE4+D~blN6-dx5Zb_L=|p${5ku2c6X*hB z1$3Ywa;_^m=-rJLvNNo7JHT~dFYUHJG_SwKfTAIq3Tzi}AQu$J<6wU2cMk>*&m*2! z41It78nr9y@;&+Tksyz!lW1i1(o`mTk4jkGDHCaq=DoE#(_90bdQH7o+n@)S+lCda zH}57oR=yLLUrf)gtn`|zhQLk6rrbmo{8tCNySqoK8XySqoDn6I#0|H>vTx9Iq<{Bj zm$fWyHMYALOI=#(Hh&i{QEZUAzS5~AJ7#@ZS7B^0wwu1YnF~TA95DfIZ7b!rN|UU+ z>$R37JuIC@*GY}nui5s^+dAZ? zcm9d(>Gkq!%nj&IZ9r*`x(>B0j$MXmMgEnjZ-(dR%V$ zg{r_UH9tQiU@m64pgT(kIh0b&YhH|H#^}h>fN7KfsU4V~pL-p%V*~l3&)SXrLNbqr zTwyc|2z~(pGPqX|+1s_)srk~c>OS%qYlzVct z_mVJQCWa!xuKj~SMoT*nP*D0X^x-7Q9!SFI$ zlGQ4I?HPzL{%V!GKgbE-=cg6_NBQ9YMSAnUHRJrs6<`aWZy&*Ezc%?~o1uWPUtb0` zVpPiQsLtz}f9CXmme&5iK8=>CZ=e687T|wB>;8Xzc>fyGf2sQ6U+eH+4+Q@=ic0<^ z)_;lhzpFs$U%K=!UHX?U0jTuwe0cDf`&-E3 z!t`{dqoMfReh{H2YPCLBns@)I6(^RcwS3g3qk{+B{|vZz?#DkDKU#Rx(!m33Fdr)M z<>eiVntKf?i{0kfNjd*Zpju_~7rVH`Uu9nDO;^`oZY}={mXZ06j~yc)3D!C3fUp*-)y?w8J5HVerBTqOH?{$SzX}0?u8BHN0EH}) zwVV2GUGrED@4h$aiT zP96klX;97^8>8z;4Nlh*mhzrmRTBuX8TC)PoxQ#ink+YO=VI3K9eQZ6sTF{@vCZ86Sqb^$J_G!Hk8p4ZC2%SW)YPI(y#|P=7uxKO481K z+n`WVSU1>t=gnI#O{v5-Ku;6w+j&5R*9dDs9y@s;%@ql8o5ZTS*@zzuAZimp^%04X zzFLZSe}OTT%lkIfMf0FM$OODYo!@0rj(QfRB05ajcw~Oo#bDjAb++=}v%a$}A~Nn2 z7a%XI;7QDM8q&idvRNmF!Bp~@OTPT@eMy2}_wioSz5XPf5l z|0IRR5xuiK#xGxmTp!{FBxjnw9J4Y8a7Wu;LpUVOD(|Ab#tvJT>RsOLA6~d7Dmv6n z^*1jMpnL_(FF&(8jHg%UbTBzab&p)xf1vgBep9iFyxf@=uPrE^#`H@R^7j|;Q>evN zSpPyyzg}UT&tSi?ILwutS)A$k;ILuN?H|f7KHq+GPgsZm)k#j~{SE89(bJ#2OASS<6|2;Le2-CX^4Tnm>T2?@TimJW zVlv|6$eR-u51%~wv-&&#MCf?i5WKh8#-rhFjMI&Q%y@8<#j;;#8aR`alaX6%FEi|m z>kR5v-=FfXoK6j1IXa2Go>=mT1*(2SBBD_V<&k#!EVsPl43x@roJ=a1g=Nvg z4sCe8C=+=zI6NF0c4(UW-0cyxOm_Aei0`kA%lW;;K60JrqZg842$KC&@N2VAkFsTD zabfYpgM*t}TkA9Y`EG8Y-&ZY1qQV~T8r}}nyYi#in>N+Bc+2c=-&jM~kt0V&@QB@6 zjE%K*`sU_fPEOA2?}fd^^-7cj`_oTVo_dSZa5mXkaL~Uxysm@*{ zVJ^YcA2eEK;h!6Qt4hR)_cu2ObS1CQW@mMCQrSQOnlHuO{op4nYr`A(=+8`$`70J5-agbZ{CC*LL{eEN=-VHCv*+K+RVO^=oejN z9LC?2-%gBdu`<0o8%gl*8XSBTwoR$Jg}9)rnWSLjJ3jBJXFP@e@N0BwqG{2$Hhp6u zYv`(`eE{C#+_`h3Gc$Vn{^X{xVYDW<%HIgA8;79M>rw%zu{^G)0hcXF4Rm)6|Gs5PRQ4`rt#nx+?cu``2mOc3nT&G*u=SpVP**C5N57 zE`C+)_UqHjx4PG>ZX>^DR}lpR zHEZeEsb`oZduZ-IDkJhZV(USg=qHb?GP49!&<%xJB*e%EuB1B(A2+Hv&ok<%(5V|2;Q@ou7zf5W!! zfrI|t^iNkSxZd7}VMq;G;zB=q8bTVLajMjKuha%!Z3f>?>q`{;y5nZPJS8!@SDtg{ zj@zb-lu&kdw%1Z7Z*0iQ@@cXLX zu-I$Sf&<47?fej0N=zK8s;VjvIWi)_y|uOd7Yyq0eembsi@F1@*-F2-jvdmZn8wB= zBR3z3H3ZCk5c#`(?5?b={w}KJcam-ve`-of3LlQoEjo>ST!@V=N~_BL&YdjXt1;Y- z*>5N2=MLdFcD~qbG4|Fb-*}+68jrXDbz8+`+I-9#@12oKO1{gdv#}7Y5qcZw35!)v zW-{;cz3&oLJXQEn$$a}MKR^F*p)+TmsT+uR;6`>{e|N8P>p2%9)X(XXZ2H+ID5#d! zI9~Q^)Q)~*?8V)~p(X^@RKRxKmq6&Ri*BP!zTncvt7sXSkq;lNI0O{D5cEuP6FwQG zQt~;h=*@>@h`Z?T6V`(6!ov{6erH}q|2HZb&z}hJGtwNz&R?5I83_~=q(5s2v#3ew zDRp;;9cNmZ-Zp=G-^|EpesRK%SqwmMo@*}eS{ zjcX+mB}*Z;z@pm7o_EdLFqM z86UTw_Fm)5#R$#EYyL4cdWQI&C!N(MQ8k^ORUg~dA#Ok>ziH)%i`Aya%@55%%n9j= z&h{@}{ED1WHyp7>uGHC6Vhamt&EhD7U1;EywO?b<@LLuVCKVPLk72@hXKq%?F;i#P z7UUyVC9rL|JnZc3VE@6^(gjcF_05Kbg@N?w1*>frYV6%n1k@Ea)Rod7#vkHlUsE6IdF4LQT&Q-bB-!M z^LrfL=LqCd#ZNkzTS<7r;cI_LeMBNnd9q=AT;JMS5V0YVCSW<~={Fg2G$}revgY{Y z^Gob*B@I~jAh&g?Hy^0F*=JO$PaO&VM~AB39X?TgRbF1%+dFDXH{Wn}ZX~gVGJdz1 z%?TTC#8rhZ6)N&zg^@v({fa@&85R96a-~|{8(#X^wbz%Onn#|tW~mva2eBIEHRIiw zKIR_kPLH47TdovMG8crFFlK4=JS2FctjlVtu#{jR7Wd|ZL2eHle<-h6DodyMv8rmw z<3FDheVc5``S|z}_{>-7R1{B%R@$BVWR!@|6}cM826?oudcb)LBK4O@!XL@$9hK&*6^ zOY*nq%f9sH_aygUsXckhf;=&~pI8r;+S;C@zs%U!pO@aBp~(#~;YP_QdcpGx3#rJ( z#eR3>-Qb=34;smCS#kRKkqwHg}AexLJtS6TG^a6 z42uIi z7IZBx)xsWXz7;=X%R^63T}#XB`Ey?YJH35>Os_~<-|}qj?eCYleJSPi_~cB6-^;OQ z&lCirTYd;6#R4P&eB0doJaBU=M~|AApqis;l>>DF8&;-6QQyi#jzy$sX+q>gaOHYm ze8^1*is}7hrUcfC%qi0wyN5*2ov54MhB?E)reE-_q-{;xhlYj%qosfCuXeT1$D>*d zoK_zw2i46o?RM3eE%p_t8_Z^N`i@|`gz4SB3oYucIXOWLj`&zBZle)DJBp@+L`Uz{ z7fj~PF`>PG&#L@QNSADwSy=6JyaW8vO|AX!Oiw19{p(kSTJ*xSB#1KoE7ITv z##T)pfu1!xTzz+n+N@Q123{)jxVhO%Dgny;Wriy=RPI`&eA}4UsikHRm#P6!OhtjK4#Ou zF#>2uU#f@*hzi-m4q}fjv9B7!zyZH#>_H?Ay%p7X@qM+h4!F%+8Nl0FPTu%xm*67;tlrlU{)B zc_-R&vn(Scs^Y$V=VbTZ3lMTTbECBlIM*5mBT7KFc5zl(<CZ3+a6L7a7C#Twnk018{#+@0tBq(2&cEAl< zasGv7GZK2{%o&+o49;}O#OBDVNnziqX~!q#Q^vk2{lUguo=2^toQ4L&OV|stmAp&X zb1ne&siHsn_~=Sq)};gf>v^Tz>398LyRUXx=RQ6DbJM%^N_+YZ$zy?=k7mCn`~eYm zj}97JdnY2JZ-#CtIiENlzk36(7F}SB{Ngs-+u~7v>&=JpPc#C{|K;`&FAtNkcJ+;; zZd6A{J)iuw93-K>SM$-u)2H4u;F+Tn&C%Wui|>f?%cY2+#Lte~hI8lhpP2xT~J5LEUTwP}7+RtC#5H8m-<$XXen7eZ ze%*auM|$3{MoXC9MW*)jsCHk&eTqShsR#>Qx%gQ`=zf5I=NiopXv?ctiWlCSITd{L ztMU&i&a1ANB)SXhCf)S>UDg~eNT;l59tqJaj5`!?OR6wm{lfY4JX~C&=Oa2(@t+Z% zC)g^CU97CWRSEilM`;y2993NBC-|ZBt*x1i66K@o2hjt>BOLER%+eK5oK;h^4dUd8 zsHhBy3=@xOx2CO=r;zJmHuVRD-}nX~PM&0IX>TW3551d#_4iDg`CUM+tzp#-gdaQ% zL(mtjfk+0IIK$Zm(Nsa=9-vv?*eKkjowM`9U6ZS^cGWKKc+dp`fb#N#(#YF_m?X^0 zPS(e7V=tQCUznVj2wLf%x5RJs4-D{xwX@QWh8LFIOYmmjv#4+BLHVpR`lLS_i+uRLksb>hFB0VDCBd+82{} zne9r^!NV?ocXcXc;sr2i*UxrPXW|Sb@=!drG=EX~T#K8?+<}%$8Fm}&|JHqx=243% z(K^Eft9N796#52Ts?5l3Hi@H}>@aUQF&!Humw40YP$Ap5q_<8XeXmk5 z_JXRQG38=o2&6D+$zx_0=1_2~|1{`ko&$6v^W%!%Wve=^CrytAPoFEB9J||2@>-;0 z4k%!rTt6S);N<3JzZqe5r0QkKBC-++=D`ibA9JYCJ^808YVYnh600IVmRVhUN^I~* z!hFl)`h0ne^Dg{ef&J^J?T5aZoywFEeD1ve*wFF^+}c+uP?ojV`cG!i?`4B)0b2e?Gc#GnPd7 zp?A}beXD;iAx_k{qd%T%ghb9S zn($_Ur&-`|rthRD&O-T^UVhT@@<{_9=Jl8sQVk(;kVI+&MX2B@+9*@{;RIeO{~wFb zR9#(ND=H-EqzaRKmrHx5AX(8l422qa9qLZ2bSQr!l_SCy`PNu0t~pr#V|={M4R_qT zjQC#ykNUJu7bRYNQb(Tnd+aR;*rlcO^Potm$MUbS-gxoZ`SjyLw#|_md_0}gE5Joo z?N(}DKQBd{;(X|S?ha8}L9wPIL8(}c0~x0gmu|heLJ1lVJM!vYnNPczHt+ceJ7;Gp zdf#DPzYEynmouuiSd)c?%LF|QX|lziU4`0C!`Y^`jIx`EH!h+Q|i7ybC! zt>+j40Ja!w^A)f)v+^f9<0m`YQ_^Z}r%M2J%C4#P2nz2Y5(_8ACYs)_Z>(6Ze>R?&vR*66#G>s4shr31la7O}aHtR);01?kE3Wf0_h(XAiKov>UG#sdwJPE) z(;Lw!<)9TXw&g(B>@+!r-FkEDTxiB54|oo4Df4iyPWqM&(Zr&py(qB-KBcg`m2*Qs z-;hy3Dz|-j_{eHtE3vx$u$Ca{k6uIR@84`Ze`Qs~XH4Gf5&6q?Pb%MavY4krW!)Dd z#{HK-z_;vM3*oLcHZV_)^L{&4Vb5;7N`&Am+t&+fXg=H?quD%AL(<5#wJ{NUE4ovoU_!uSo^Fe5^nH*XS?t2Qbk~PaAtGJj= z=m(JqUzw)m$vhQn2xlX&tds(BLc^}7BbJOzAzpklf`e~Z6HTmITKe#=?ukPLS{87d{%C0zR zH!^h~=Xg7jC?$6L(tPZKsI%%nn&)W5JO4fSggjeM_nVo~r-FRvDxEv6LREy$M{LYP zV^0gJVV*4)C90~WIk#V{h?p16V5NT=^0OV#q|x(yNEE?r-=lK6;~X4L9NIzbmPa;Ev?EejMLL@=Synfr5A+S~w7n2OJ^*jHjR?Ji6`4wUJJ=E24 zdE=sz6IEO{wH^7`9XcX9U8x_tM|Pmru2PkJ*X{(V6p|cIFlOfNXlZihgoG#x-7mhN zmfvTIuaOFT*p}VUfk`7ggSdxx?!>yi`4C&Q$Db*to)eXf2qfKtJPA)teY#V9E2*;^ zK+YlT?q@S?KE64S!BA9G%rnRe+P*(eS&6WaC@n38Ci*17Tx=Vn-oB-j!?6|;C=GNt zNAAN7y5_Nu#7O{zLBw(b(ah&lo^ZQna}07S5>ubS)=vD#JIS+T3A{N>+*C?z99KzyNdD4 z!1#MrZ_DQh*Zp`lV!s=wMy^Zcg0^${dCPn=H5Taf>1o0w%akx38;?d86aSXJTZdje#yla(nP<-aDAV)~L{$;L)Q;d3lrLc3Ce;y}T>dq)absr8UeEDKD9JpK=`8rs3GS0-R<7ajCi=|IkY7o6Et6-+Z z0OQUNIBpQD0kY(AlmCSqGO8Kg^aVjOf&MBa+?&K}#x9q@SJ743B{7$a>$!P6^(HnL z-%g>hdUTE31GXAhxNp;Fy8(x*jrpCDHPkvzTggpjm}&di%Q0k$$P|My;XCbGDmnqI^WQxYN2_2m03|3LCg$wpBq}yR30;$8V>W-jgu4OLQ)`>K_T`Ynr=mE%S;k{>V5EaihS7KUU>?Ey8gwa}5s~ z1YD6r&sB|82VH#NaH)vK%x$KVdQ3h*O$t!Li>B2p=H|Qs0r+QcRr4k_>{o}9-2tIANT?CVoyx0QKzAUO<^E+$Qdp?QWs#|DvW!DLk8igjs7vIFj#^=nD z3WrErD~X&1^LCcwwXdG z3liRrOGrd-6@;*JJ2+@t``lTpetg$;t$<6+sAq|)Gc`5EOS-!f|CR4QKtrjvb)alO ze_JP%VVLpQsyZQmCIBOEuF71AZQ-n`#RDeIcjd?zFln7h}o9oJP`)emuiPB32 zh6Pc{Rc#4rcl^3HLC4<5@lG2rIt0-M3g)pfDAe>P#CgeJhTtjEcj|CbpJ1^iw!DA`rFL}R&C6a@_MyJ* zY{wDDez1PPy*;`DU&RY)cAjP_H8g5P4PW;o#R6US1H^1IudGeNRMOPqp@}754fNSM zp?xn+Gb*ITe>l56s#d+|^NZL$4QL?M1C1-=Fn_O)@+Vf2epsv4`lS!pwG_C2ei??> zJ)|R5UQz0@EFd^gL{SL|rl=jl(z5RG0(ff>XroR&Ven%9{|MJ!=JrsZhV2!M?KSv+ z7UY=}suhdHu{5v!drq z4Ck+fDNWo~wl=Ik>S>W{b~wbGhUIe{6arR;6z$xzRlDfyW_ze9Ek~0Icg93V-%bnN z9C7EuG~EhdEWF)UX)|x`+=kOz9~KlSCP9>5a9)~~mlb4Y<|Wc)cJ6lW@10>gWA3#T u?}nOm=Anrugh@j8kwE8`oE|AwBmc?obTrSl65970If z?3-9v?-+4k!he!(zdMJ8_2~oFCAcj7|LlV=8tdGb@p(vZ+#n$%iwF;2>(zk;c<0;O z$5{wRk(rUvP{!nqUY>=#ye88G_gY$E;Ue9dOWbDtZ5wI$yH+-W)cEcOcY8yj1$M)Kh2T+CKg z$#h1S`1+NtEolngs!vV5x8VeD*XxExMX3f5(xLe4;g6m?#)1nZx_IsiTqend2k@36 z(SPfMN8G{(OZ}X=nkxAjU(r93W~4|aPII2CX}Z1sQ?(fGg8o50_4t$!^V`qmXjo*s zPs-QbC(6xjzq?bE+wJ-Wn^Z_R+)}N5-_GOu0`)yEmAPpxRrnrekKe^{TWEOuS-nsz zK0LdH!xqI;we&ezjFDON?dk_X8Fk^BW`{5A`WsQ{HrNn1j-l8gzF=1i$Tiufzb*;Z&Y^HWzoBsY$tHjiPy<{jYJ)NQ5ZetudUH^VQB2T9ZalE&#AbPUX zpT=W3&SyDZez?6zMoP+U(wm}?ARsKPwa$mA`LZcDX9QvofwSFysRF&q%F0S5?6lM1d6~TqjrvR_xDovQ0@gdL zV3T$M?V}=O;MwU{3U0G>`tWBlI*yAyC2kK{J&OB(TJ?ep-gK%5vz73GfNDYnEu&|N;?x&`3D}0QJ4LyDV-Xp-OKFN4-7jZ&2lT!8nWl! z78!O1ZKISk{X%An%$!{|kz&rUOT|O@5IvKmJO9LK5vDMUR zC-0QYPLEW`>+yT+)`Qs^v>wI9#TrG1VT98%@jJ}Tbn~eZy3z2PaKh1VipfUt$b}hi z8fqT%7l#)G5Nmv9gW30F!?~;`U3!uvXgvr;4sLrq*Ve9fIYfOV5MUG(6y)X`BQU(z zM?BjUa6J8yu#0cjKgG>q|0On7{m{?%a%Z-|+jIBg-1zhd&)4yDu^OEfhOGwsq;7UF zqUH8A#nU`AaXdQPLwu@I-pk6Kb#phx@LI)-xE}2+_mQz_JMK?7s5=*FXlQ7aSyDZC zS${WBsF1U&%xYBpoXb+8w-?c*(`rutEdI)1jx+q9+G#1#cCkwb7V}U8c8LFA`eR5l zd_7|scG||9fQmq1>8l0rK&|UBkyxYGRjEMglZ~p)c)MO{T8}`{Q$CMh8OrH<>tki6 z1ExQHNu_UYUazRA$k8lmYiVie>=ZuP=~M1wM)v023JD!8G4m$UEVG50p_XriOSgC^IqO-1c(M9g6yLK?j(dCZ?y?#DZC93FPNZ!GmAz|>ANWA?Wb&V-Occ1yp!u2Omtjh0#*FQ+G*o@~0;&3IAPn#V}@SqIIGr1 z1H(y|Lv4}eMCI{D6}!i;Bndy}yz0UR?A?_CvysC2-#`7}h+xwh%~H=(*K@U>Y4AKe zJf!t#BoJgNnM2?d1uuh}JDr{EuMT86e7{H*>fSWL8;OOr#jT`LK5ryyeyzcs;-J%0 z%4Mf{(tCVwaAAfalvOJP)`}}NWpgPzH}Hl+9hdpx9e-I7Cw(Jqz8=^uEvp)Cq&A%S z+FeNxBE#~(9>ka$=l$BbU|A(*ku&smxA6XWG`Cr$-7;!o z(`_GCBL=Lr{OxS;`F3#4%H2UNLZPjC=G^k66~Q9oo+RhZ8V7Ki<>lq|(Gp57HCL@(CDeId$-+U;Nl43)-Z>wAnzj+C+x<#nU3*r+2O^*_?gyl&_NlfJawjfpC_ zZ3W@o{xfv&HZRO zePm>WlGn1MvlH&u%=Cy22`0T|zdxpE+azzf-z`Wv)Z*ySQPoUGynoDCHoX^OI>m$B zW^E34MgOFo>Q(Lb@Gs70BP4^}BC&d!=1DZ^es+RdG*{CB|Mk32$wL=&6;?CBb#LT; zdMt;yO)XzQO|RC)1oT@>^9jXmrBuTb!z!mWLP$!pR^K9~q3H zw;Bn>aWl{{d~bilqI8QKufVrF11VH5?9?;q{A8Ko8`>T zMunEz*|_3CIi)^G_*#WK-@$1-vrmHWU%tV@x0c^{deAJY=8Pi(_XUmvmTpDGW&G=8 ze=0%y@d$VcSQ^9b7{txh+^Ss6RVq%UXv9O9nadyaz$2FDoAH?AMPq`^$^dig1cZ-0 zc)@=uoM|0=D0Zi=cE4sbY$_m7 z5{T-XI5aN#5S&mkGT~GCuNvXA`GSRl@2}p2EHTASr5%WXXW}b_}p7MQ$$`CAcDRXDSxswF+MU1ji1hZ*@L`BQXk*UPH#D4dJ6`vuaXWyE+#c%Y;k^G$9_N+6H2P= zS8s^%K`so5d5M7`-j*MB0f+&*_aef0%v{=2xc+HE_k+gj>S_RMmCEVz5N>5YQ_%Bb z)k0=bau}WnfnXoIin<9-#&k*92cvUqqNGQUer~!6=Dp@M99|hJxrswk3Gmt*H2bf zR&eK+xKT%B5Q&xF4OWa(!DW@14OxzTm!^)O>5#d^U(pU2i$)j%lEWmD;m{*R2UQ6* z73G`Vrlv(gjqNon!f_?E+QF6|Y>}EpZHdv|R%?vaW|U^3-2f-82LwG&*42jJ?DX`! zg`+)}Nlc842P55X zJl50oV2SsJ5)jM11|5+PNk?h#+2im0@F8wbz}7jvy)|B8D~@}-S?9hIUJtQuB+zXq zIXF0&oYSyBOPxI`vj2(A*IY0_BoZljIn?@QL$k)*B~%Yw{x*d@4mg%%UFz~9}E*UP-G zkaIwhpuYjYG+w*CV!ipc>b&hcOj2v6aj%AqZ8qfgw$oNxS{mvASs9t!iiPOyZqc*3 z5C!>-@=)#T)!>7du2PWPxS{JXVefv_mw?c3IeRmc#E*09S0Vo8)8<;6t5C7k4|S2J zQz4Hf`jqw9#(tqc=%tY9?O01jbY=J$v=5n6ySWUOod&C&ed_-K=_-_^I;&wYxBRy+ zCJQa@XNr3hwB}gQxTF8TvZkmv`;&)gU)Kh3fLZikUms)2pG?)P;FyPFeQDeoNOEoM?EqSS`IB?X z3oNGqdb4WsC#Us*Sa6Slsmy9h#A6FKHOr_wURCs#Fc=?H5gtSs=bNl?#$?L~JvXGy zY|81$F|TR=QnTpkTijQWsV1r%tOha%V1w#H@(P?VmGUF*lcV?wS1X}>jUvsmo#SpC z0)xf8F&EoSiU{Gz$qHA~*CR%pev4PS1b(xd?3UR|FNfY&hBzN|tF#78HpaR6@llmv$46&2Ji-RW`RRONi>|DolVs632>wT z%^pa=`iF3b3$%k0}(%YZ;}A4xArNliW3E33m)MNms@qfi8ZKW76)MRt9P7ULXr0aZguUa+&X z1MzNexz7kdw1OcxzJd2Go0hD++UTQaQ5b6woH~@pO+@3QK`68x&VNPgF}G3I`hAk$ zcA*+l7sMD~V9bYdbrM8em9kj0O4q)AByfU&3(=91+f+qOZ4Z;FJid&}ItIQaX2IBJ z&X!l8ykSNL%>lnJQhxUa=ZpcMuE5Z zZBEgLP+LJR-GB&3T3SFgP>vUV7sI^_sPI;CA)l)#*)F+8&C;ON9>202Sz{OB{kFE< zz#6ElV|EbRplA0qM`>@wzn7c1=(E%9P?EtDYm51@?)LUE$mB!9?}`cwF_gk`YQ)0) z{DgJm)z%+SMFR}X8r{_r{*2*$RQdqi7{zOk6-r%lsaWC_ zp34$3ZTP4AjlR9TeG~}ki9i!@rv&%Y!w8Eyh`FuEmMJVKflgQT&IAB#gP%giI+?~1 zT^cT!?K01&ka~9!Ln`Tsir@f2hgGWZzrZ(r;(a&evfYVs;=VLFXJ;um!7wq$en;Qj z+*}H^k-mPh`ADJr+380d!mhTqQBJ}9oOZS<^OK`pKqKW#Nq&2SBJiF3=Cz)?^$?du zr{A3io~FcZxfdKk8#y25j2dCS3FQXV=e>D)bv5OLRnh>W zO~LvB@YRAkid0?unwaB8#o|I&Tor@E*J|KlfPaXJigI4M$p>F>9?~tp#CP}Zo2}{Z zt+UI0=?sK6wzllmTMZCvilM}U-~;%8jhR_C2ep!w7Y|W~RjX8J)}IqoI^aw3spsjs z0vSb(7=8udU3hQ!jZ^@Is-`A|*i8=or*L%uNqqhMLhj|&ogT%;#)6}O_m%ikRva$G z0G9YHglf?*&^uXCZ}o+^{uXzpWJp)GR=e8qPidYV@Ji~sNCP0YfU}saa@agO-8`Gz z7{9@)84G*@utIX3nfX?Cr9MAP3r%naDq{*UW??Z_Y5@TdTpF+}RD=s1(yTn@!}%zq zc(9}=mYd@jm`Tf8KSFNY>{nJe8LB%~RZ$5I3i<uJ^nK+ty32K_ zHfCB63qrJ7VGsmuhJxsb2r@B8h#kSI^a}B}#3FetG;tH5B!qzR)N?2@BEq5Ve!4#- zZ=ju^CeqR>53Q2z6I8vA}l@C6OnYTyZ+ zcb33hrr+ZP8=UT>i-v`Ut^unD_N-N?-wJ1a;bsOg`9+PBJp`<@XHkVx>XS^+P=>RqWj-OYm(-^WDo28vP0 zK{tTF>Q|KV{0kEQRZBydh+ui(aL86a5jXkAVZ7h5%@P2=5;mf=g%3JP@#(PnK{+ki?5X|rDx{05qI zqd%kXCz+nMlG1fC$JLxNAU3+7^dxG4Xdl})-4sBH0V$-2?BIZYsGQ7(a-~tv7k;f8zVc01kdbY4Zm0hfSHwboviNQ=XpY*2S66-TNcVLCb+vnQiOWUZLcW7 zlL$Ns!)P%PEQ}Z>#D#>wx#BimH=SD_ubH|k!2P~1NVhr%={FNt(!m@pJz$M_$F0RV z-hwBI9=0k#!9^n0($O()Rd>>sR|u|1Bxb|H%Rg0)9`C2^Q_WJds2T)>vArmIhMcTM zLco;AKFBWWl2OQuJPET(0e@G9trxI21sY5omrTd5=S`q+>C5jQz~I5hXg#2sV=zCK z0a!pRW(;Kq$^Z&EfSlF%w#s>_02Et4!nUftrGw%=LI@~PNm6x84`hT|7+VPT4XWE5 zC?*#=qF^o9mF9V%Xn+#lez|uZ$X4wNn|W1r9aXoSlpQ6LN+>>1wju4>?&w*XyyH5{ z%H=eo21O~V0YJq>4Swvk2YX{y>1FWKGEZR=Ld4GOM}?S&RKC z_cNjfOijs-!7|J7rB~;kZ`%U92CO6I z6ZF-jtULTaSYu$-+r}8M545I^)Np71G}B;U<125f@T2~u9}qo*Z9i7oE!#jFLLu@& zB6^%w+zSd;MxgG%XK<+Oo_EI!FLp$QKt36lX0~tPt$4DBF%?yv|B6+QJ!51p+SJlAksVKVVnC2n;33B7YmaGw<6LQ*F0tm%+`2QzX9O`!7k<}|t@0bd0{}b%TlMGjDpxY! z&NiiX{9JJJ*yI`ipD;>kRZG-Yx09pRx66P{far4@;Q^A!5%4&d`LHz@Enxej zcD+-Z5rc?(wvew*QSIyrkPfa=^02V6i2zdtsd2Y2;gl;%5IhAy?GP9b*grt(SqUFFLH03pU8C4=#(&ISov0=}>F1UZH2o7g&6!6Ip(?|}Pi=~p7e2pKjDVW_+z zxmJ}qT!mlB3vm5SveXs_mHV{xqVs&}ngY9)blw7(Jkf z#fEQTk*ds+EaiQ__7YwXBmc7&=6|sp`u}>WFB$>%H`tYE?8HUdT)9O z!;-zr%xp^3NPqOduhIBl>{3|Mh?@n2Im{9}p# zSmOT<#mql;^^aZsV^{x84cb2*^^ZsW|IednizrrEw7HCU*YKbmTaz5Xn?_g=PF;1z zh<8<01H_Bu-~WFX$3BniK6eRG*3i%ZG_^TU3{b1Dn1L46$k1>QxF%>&RoQOV?q%{; zOO`YFuWzWWU(2n3r{2?brTlSjQk=Uwl{{7bOZfN6S1eTJL zlA4;D14FFL%*^lsBO@adQzqylfQ#H1@5@V#BiFsF&HtvVYJCn@{bhY!Zx>q_3W+}MJN351OY^Mh$UlSQ2I+wQ44ySY65dacJuc2w3xtt3{XNJ@VGgTwPP@|M7i z2!MhI`oC4ib+xpJfh~#|3-YlE3$oAF7caR0q4AD#Zhe$$(^R}hXR_NlNN;`bvGWYc zQg8-4$=Nnefv9I-*tf@FV1okfsPQ!ddpv@RO|4; z5@KU+b`-OOR%Q`!vy+3CPOyX)NYPCRw~{fO_2s+u_cn#J?3$xex2H~fkFL_1A7$H} zj!8JgYM{D`ob480T8&lOn;9{VeZDqFM`ZdE zQmbki*0OB=q?+t-z>=mo{e1aB!d*mP!`9X3YHFq15qtM~`}*43+7SN>=TLahcH($y zsmYg`pKlE$T?m81B*@NAk2lZOt=x}``{ZQ}T|w}Ym%lZ2cDj%1>+9{M;4ya`f7`sf zIVB3l5H$eewyBd1hp=qj!;lTZ(up$^`zsJPzG?DDLQ@bfh(K^He-mUg7)D-okoErk zildb*AXk7m5(E_p%6*wbPfDxmx4=GT=*S@!fKXeRs&hA02Ia$IEWa(2 zdu3iS$br-&QQo5HMDz|=4ww-YF!||mh*9-Zp8{WT^}~Ix-D=X)0+r{QnoirDyzJl& zdZ%e5q@)tF(=5?Um{nwk#f3IhwvH0kiR+kflbx%0p| zE9;%kF^DerBsX^j{K!>r9VVa_DhEzh-0O;TExOanZ5x^*bXIFJDkn6j5m&89r)r?- zf<(14KwDrIRFBXbUG(Sd8YZ1BSiN^f{B3J?0ah0y96Fr2N}COQDEiAsL4*5zwoLg$e#)!<^zeDk?kB z2&y^R8w1Y)1>nk1o*wiF9GqSv{PH%Bq5so~Q9S8E8xDWW1=>u_pQ&OZB8G}h`hXGy z#@eD;%78Fq?y7dc)W+WLeD{(4*HdN9dFR*;s!@j~C6uA0E^0qL%U0jxP-9ff7^OCJ zo5#n;8R8w2fK*G5wUOZ{gLN2_>(h67^=bzC-n!6lg4Xgn{ZvE_Se4}vqD=35?uqbp z!)5ko)F2y3Yq$&w{oP-Q;?O1znR>40ezKb=?tQwVUMF)BtkPNun*hO!kaliy5vW?h z!wOZ2ftzKaL%@3iX)JrXn+tS$S1iA(`=sgc_EcUdkgK2@TWwFX0_7-1MhSg+Olt$y zJJWoN**h1tX+nBd0F5VRka1=GHXGM!JcgC)jOE{kj`hl9%`tR=Filrz`qMqEfVRM2 zl0N9e-C%j~3*-@*R*16C){h@Qe*5+X$^gchjs$- z&R4kG(+ccbzyjL4x;FaKyCEy(>eac;wOsQQ`vXF04y&+Tae^yXSRh0=Z0f#v5h<2< zd+N5s#`rQUFEkL?!epRRM|<7p>8rj;Y+0$e_;@$y&`(cK1N}`xLXwh_k`1Cc$V(ks zo=4-kUn1D`Ci_#y9s_f)AS=7QxA)n{=ROMy8XA`Bx!UBnZgo^=Aj-{*P?K?TuZIMC zh$z!0!d*`Y9$5Xxwp?TSiNf7&6r^WQDKC#q`UX8W=+WJyr(XbVP`{fR%Z=3>$(^0Z z$Vd+lkHSKZn#;Ugg4;5?M>~BAW7~xt?LqviM2FkVwWY+V9G19`avVCYkK@a!(x(@_c5(x;QhsVbl zWe21vkc&wQ*8ku3pUVCnl9+7kdZ}^zX>QLq!NOSR*i1lw3iOJfeSPuq@On%fLS+nG zU4@Y>*L{Axeuy0Z_3OEw-qh%*(;>m$yc{xNGXbp#l-w;XYwyB|?lXOHPTlEY3(iNm6CEMmv+l$@% zkVHT~?R1$&$T2@9g^r&;Dpu=@Oe(1V$vN~}ARxZT?JC`jkV%D3&^6@R%8CrlnWee8 z%g$1eQU+b~p^&if2ur82o#d1<4^22IF=SGEq0{IJvjpa)ZEAlo;%n&20Dc0U*;QOz zOk=mjE>%fGO|5BhJ6$eDO;=YJnp&fynGPuqTH*4McJCna?r%=zsW6F)ixU$QM|H=H z(CLbgATGoZir7|5npxS~msC|9L&q~XBt(^I0OohdST*(S8qHPT3kwO&*&rbnIy#n% zB?6Yj#LtuC{gU?aT34;xL{})dKA{Dzrysq4^lR@)fvy^E>@Q=k=0KXo?L!vWvfYcL zkJWIIEnjE{1_neyK@Wl}cAd&6X*VYxta`KD@H;`HsYP5EBig}D_;1OB9WCR9JbFqP z^mI61r0o^iL@3bR4(y{iyu>k}hPh#KOn1zAp(?F9L@OBYm^@1r93o$gpoN_NuN z`zq-6^sjC<<%dFqh>wTmD|Lp(Qk4VY%?HzrA8R{EL^0@{da0sfQ4G-D8#ye>F^PSpc}*)V4H=$II( z&$pHr7H&{e$AgXn02Bn|0_{A!ifdwt4_H`OczMezD=RZIGb<_%L1h9!BWALpr>6(v zqb>+z+rpT+DLO&?G+??5qU9HsbgvrsvkD6SKu@18kl|S*5izkib(RW~lR#ke8{|ku z&ys&_x}+!zH#avZ%i%q??$z1Q67;wY7nEMu}tqw0vM@K0kkh+f-;%Q&6m| ztO$Uf5AtnY?(vLD1Iq3L9 zky8^85I_--mXe|mnR~H2q0VN$4V3s($VIA!t3|385pUn(5fIc`&oqFAo0^(}i9LDp z1MIq_{b{NaJ3G4*jc4P`rzc6U-h~>qq}U8HGBT!SX35FP8iPbtN7(DPnLUI+`M{tM z4{BvNf;WSpLrOmJAjad?&6_XO)zx)$Tmc?|r~@J=%ykr{r7eI`gc#p*G{X7jk)i%e z&u{Q~Omy@SNZ9+{_>YVi4T-E4AsW^+X!UD^b3qCL@u~03_em0%Gv$P);CKnA#b%dU zLD}kpE<&|C$Cb=DdVBg0Tb3I_0~wmcIGIA|xXoiq;TFOks4}E(Z`}&@*a-+wp+Ow; zJf3QL~e4bnxy5alt_uQO*hRP9$ z18hOFC6mg*&tLIT@b}={#s>Ai`z1o^>=PAj?OPR-cR4r;LGHmq)^dv~WF*qpb z`|O`PckZ-U`y3q|d3jw5(XIS>cyK^RN0$vy6MDG2`}=vBnF4NTzQg#hj4QC45R~oh z?RQARS)#2$t^lfw8j#dKeA7fnPv847U_Btw9B-Y_v1-G_Wapz5m+r!7`@Bt<%skB7 zL3)twIth=6DBDieB9#V3P~F$Bj~Ge3yu4OOh+V@T9ln%Hqg_lwcfw zkHCt0gbksUwZAqJ5)*^zP{aHnh-cO?3n3rJv3yVS7JsudXc0z7N9*e!p*A6?QBY7o z%_>EcW^@X>zWfd6Dn)2`cqt%+(9lqTd%@wq`X87-6MV%pH2N#M&v*$gptG}cr>;9e z)M%=0!Y)^aW@8g(KuI2g3Stnt8X<=_lcFadxdV|npam>QE)DBmw_ZEsVGxHtmH1=N28{`xFVKy~wrn0OIqo(g-Fz;ldz z7DQRW!PhxhGK-5<=tIbbgP0@QLCnnPo0$X0Nw+hE4AQ7)O(;ovFPpm`KRsor&dA6} zO#I&7E^9Oi#(v?#g)g*{4_z?k)A2yHYp{&)ze*b8*LJE@L zmoG%H@F3(PyK&<)jcEM5RWj$3<^^HyqgS-*5j|wi-v(Ad8VK4T4)frg-*U3Dv)hL- z41#<4GE6{Bf$-;aYew8t?D3J%?(Xi+Jwj4aQhd*bpFcf2U$aJAgB07%?G$Pt^vTJ* z4Sxo0$Jm70?7Y1_SItm!vP{i#F(s9?5rw zMO&Sy;w2xVASE3@e02k{8%&BpsoKK0ghJU=Xv+tF;%V!BA97<}8Glt^Mb5+o zMWrS~pw+RkSchSQnVFf#1c&4`(ut68;ygeLI6Sr5f*&BMm6Dj1o4YZPH54c4kfLDX18B-D$SjQ!3t=k~mNJirU0$GJAQBd! z?r?$fi0xNyZmy*FQ_#RceGT$uClIvhw*m6+juTYZ)_#`Tkj}UQg2|nm{##qtaeFP# zE%RVF6(Y7;o-P#yg{G2Hl3Ld8B-2YEbLM1tcz8b}92^v+rC(9`uvIzL72Ct)F6c18 zUYS@}Qrr!j7{z-EkP3KSgt8ziJ8^`uMiPn67~VjnvpH#AS(yXm1BkI>Anv~Yw9f4W z)Z0U|;-jjn3YwQYLn}`tBpzD%%l#gRVMUt4 zOasKVNzgk%aSv2eqFUCNy@RnAp-8(Ux#=d@6ucP}9u9QCgX^0hVm7r4F&`80r{MM- z=QW;d39?8C`23lToqejxfgQs1`$zRCC9Q^}_sS#^wW?#gw#ta%+hevluz~6l57`4y9kE5xuT5x( z?jZ`YiY;7-vj^8{6cs2#jof|-W$+Gh%+AhA-01--z-e`mm5?wH2n?uOL)_Hv1O?$M zXJKIxGh?0$V5~_rQp8EeLvH z-Z03CoRZRP$NNsJG5)&pZ^%7-4jZ>zDFslZ5(H8~R1R^c9}~wxO;1aN3%3cD4kZZ` z1-k?Rln-D30JDU;dtq_W==06U;eq4Sy8;50<>d!!BSk?$L6YwHkq<~Psl;%pF^N;A z0WQk8u1D=pEli1tC2m3Zg}DM!zn?%gMRA$*LSDV^+e;lxLO}sAe7?6=X^-k<`@L~c z@_}odK~)AN07#W!(lWd!Pcr657Oxgc<=L|<{H?a9XrzKdHwgLiMG=kY??yCviKCR% z)FL2{1hNu}3MXf0uz%h=cN&)HM@n6B@$mSac8tM>L2TT+r$IxL08&;E)x!n{RXqaI zWtGMKyidOIGyv2&wn0$Ba~#VRHeMQuH?vn#>V@PB0T@aeLHiXhgEo>Q0{ScFq)_iX z0_%lv)H?6^{{4HffIqvt1LU}S=tEnZS-lUgIKxSbft0-RsY;j`b12BbPN1SQ-*~C- zy<72-g`!aR+_`g5Yl;APMj#L%2nz`gzI5g0OFO}Jp~Jn6e_IKE@S?&fcVnaX{_$ZE zmB4_SZMKo1+r-eoggs3br9D>lO{o6Nn^rwLs*1_pjhuhnz@=|y5>9a8{c8S`+qfFu z^VpC31)e8Z;8r2R)sTxvvh4O&Lo9=}c;U*tv(0awF$1BGIqK_2sa{U{&);CWvV}cu z&9`3Zz<54DvM+b6PY|24$ayv}O+P z;-sG0AMQluF0uMfUAXYH)UTYWTb5hZNxF&^$|%AI6+d3VGs-^|E6+x5~-tea50 z8FNu&sEmG}|8g%M-J{w3D%UZ{TB~KSw<9v2;6iQ$^1M`wlSY!-UDKMsmkNQK-g9ov z?-RJAOKYB4b}s!U;B?2=eLL5@KWIAP7Hp1r`q=FOaa ze^)=bLpAGKiQ>0z9uFNs=QryKkFl|M0Oi7olrmJZ2G$mBY;1l*87@L|S3ff92K#lx z^COzkt(eCsoNcVV3$zWe^syYMa>qP%(73-JauulgJ; zTCJ-|rL-PaqSl!4CCtHh!4C7t4mj#*zn=fs_7a?PegNDIaU|`eiJMIWkZI>6->JWb9lca_)mTl zTcG~0(_l>#l@IEruAqDd#aH{e=REif`liSzd#vNM_`oKqt; zWEw;V9yMM3Sfl5gl+xYL%f<+AWIpK2{2zbF1_r4`m{a!r)!*O5x-__fm1So2;@iKj z80&nN-udzIA84WG0r5VxzrjrD%IfOb(NG;kw&x^2=WQAr8ld3U1|nlz6G4Li^Do`D z#_OJvcdd}H!-3cB?d5;~UtZ29lAxfd0&v*L$w^L5&dI4#9$BJU10WlXcA*aBg+XkX zA`V`*FnXwRy#xD?Cduy-F1lxCV~&Of2J2IG3GFA{@-0AHV5-Z~I7O>fIYkvi!v%n~ zU^Uj()-Ep9-rhLJ2DRUI3>zNAscC6d!O7d&WQ>d!fBpL9Fy%TlF`>g0Mi1EAfQtgK zT06uX#Vonp?v9>}ffXn}AfrN28_{X^%kW#`OSU)Pf(0FAdmno#xdInND2j&W1k^lx zqh@(>Q5>FZjSK6Xf|TPI{LcMfDYhSg@3^FuGVCxzB>Niyfq}fMhASF(o$3&)kPd*H zhA<8|VhR!l1bWD5MMXslFisCCJ32bLv~eSl~P$E4wE=S zeG-?s!el_MTe-Bf1Qcg+X{n*Uz6)sfK~hTQ^JG-Y8%7eWCaZlkCxVVTZcV^`co9%J zK|YDAxFUxWo#@qIOfDWa9;6lgnKN_+_8Pd4QuC3d=ZvR+0^NZ!y?^J4c=sG}u3**{^)IzuWAXxBPjB)`# z3X^@`^7FT#-%R7Mwh`F9E94>Oaek-x?qMVxlN0Z!=PT(PKW!4Nd;ulyDQ1%9HQ%AM%g=7=TtSo7UN@o{qYH8&eUl?NRo6HCj< zQVYtcQy^+u^a}xv=0U*MKfB){~_2MaAa8r{ca8D?Jj;>i*S-V}YztKfr{PzNGMY~ z3wXqHcqJ5JLI!{0q}=Vq3Fhivux(#7WF!{vGXahthFVoD^pf7=L72`dDPLf|hz`Qjd zP^Nu-MWv+b(a+jc%yHQGCP6Tsw?X2_e!%;8oajgcP7d?jADCGj$W#Ry zLfCHUi~KpBoP96`0J6}NqzZ4hyC4vCGp=jK`ug?jKuQtQ(1-$LggspfMMC_8GO0D{ zVZW)k|Ddqf5@uAQzP`RR?t*yVW6BszWLTH^9R5SQSQ$|4`Ab)Zi;M!r5)Z(Q;h7f< zVKN4zx|J2M#MzZLmAeO*7GEh}&|-4j=FM2mnscYjF?rCK_{3A}8V%;CGauoA>Ki;P z=2;zJQsDF=z^Yu25$_*;Rm*CfrYX^!NR=g1T7W_CJA`!CrOnJ%p+VT1q@=8zs&pU8 z#Kh!l_YNK{LqtlNT4U-}(a_ik&tAbe6cG^-HMJXr9f;&WB7XVu<#V0>%RLATRTULT zN5>8*CaN8-z&0vnq!1oR(_IJN_IvP4>>p-|pN4wBJSYOKKTP|5YM)0y@dpb7&tY-$ zdssXP3^FukWS>5Dgptp&k`A&LW6vVfiGk2^nGaJhg~trRbQEw$8zV(h$0IQ9c7>9s z0~&iJ(eHaIjTkG(%B=KYU@oU@viH7~vB1(#L*Bqdf5bg0+1G3W8IZOB!DAjTgc(s> z>ParyY#Pd~v9m3hpB@{e^1Dyq&3h+jPc(Jy=?z+FB zV`EtdD-A=4R4jP(kE(BYI1cFV{}lx3<(M~;KIcq2wW(HTuj zLDA+G#a>z(^+16kUc^-s^0{Fr1xL061S~z*UDA^^;AO#SpqiIDmB< zR{)99hl>2!m@F?D<j8Qnrs2$OeXYfB5C8@gOGrxxm3 z01}uX9mINSOx!>>R#oLHy3%S@!7K_t#;hba7fQS?NJQv^g22FT;Otv;Dx_D7U@X-0 zG8x=#SLDNwwNk$UIXQsaI{tYbAPEgJF6TXSCllbapd}d(gKT4@4?9S~vw_zI^^773 z>GkV2zkm3YmPKO~L9E7%hXM_hqLy{{&Yde)8BNX2uUxr87YLl_Xn+5c&nj~9LQyk( z7mxo>p8gTW+(2~H4fIX(EX3R%)*^(m`M2Fu=jJg`n`>ud1J6-7Ew-K!Qz`@xfkg#a=PdDUz^Ndk`%{+~WPNiA;u;L9 zx?c1kbOmr~L{!xB%*-`PN=!uHh@01~9C=IEoltD%f;n@lmJu(a z+SzZ_wkN3(l|_sPXW7CRqIus`c;d&HgPA}}JET>gBZ@^(Fs4>on2!Ls)Wz){8EmX! zqUhJFkGclm$6DadoaclpBaKnU{_x3aqWwy=jm*(Acf25P-Y)d#y3*S^ne}# zF%TpfRVLNv&wqjN1)g$}ov-_Mz40Il&*+`SuXF#Zl$O4peW3mIuTq5P{r^+hR9tm_ zZEnsyiuLc>4eO;uhBI^=7y z#eNTh{BJcy|N865_St5_`!a9Da3am3*8g?p2Mno&s)=7@=@hs^C0X_!yu!QHy3LT5 zqs3+w-Wm;ArbDlbJ!LPJ7CL_~^s@<@q@ z=)?>W(Xo}&$KWT*$KM>mUw_#vNj)ISZoP^lBDzL|cywRIC1zp7HAdADzq86i%Y6>@ zirtr;^_s7YZ_*8t=+EKqG)P^h2wo2Mj+O)Jx5zhW>8}Z;MoPMN5Ao7z=}B+1ZhpCO z?evZJx4)eGe(rnA!J(k1^*Wu60o~~2`mTSlh;jLh*Yxie^H#fp-ta7WxP@y;3)+>( z;hU9o6*l ztx)rd=lsXh@V`B8e}2KEYS{CrJCsY~X<2sR^pCX*#1UgVeo18+(?0_GTGKq1zq*ax zKO`rtiAPmMC1d$)CFhZ2PsnES5m{dbWix9kW!RX53DyR!vn@Y0B%sbgTOPRe`4M43 zL{W!)EUUS$j;pz4_sau!Bj%2Rg3mgSCZ)1&65PfLD+EInGYm|oE4*LDA^`Iwv=>yI$(x>W}e)dz-U zEu-$su~9k=p}k_a_`<@&#kczP&t7J~&BbLsR)t3}$9CuGH$^R0;>qYczOTd}rR1hSwq{>Y32uW!~9o#@cef>_#|bhyV*W(E0>q^zv0=ilGpeqhY| z_|1FS5g~~mgy-Uq4ra(a%3?F(GB!hGI1wQR-(H^yq~eli=<6)CpULrqi)%u=9gjC?Sh7chtDk|*SWe)M4 zTa9gPZRc83UTHLJbnmQAjCt)ZhAM~)$@RvHMZ#%QUL2Von;}xr>0TG6P5CA<&O#iM0d z6k*eq*iQVaeYIS^T(vk*89A4ZgrOZVB6PfVr&=bE(Y&VlM~C~%)klZ+(=8emF1A<= zSfl-=a_c=oE-o$}{D5)%;%Mc*IP45uN}1z)I3ptPGDrP;>h(eM96I-fJQ&~hs5>HL zV_~2`v)GDG#7V2jLIYVK@<>rp5thQ<&MqJzKwcP^)UxsS^d;I()FVP1=DO1z=X-Z| zccZF58zg0NAq!{I5KU>sUu=*#%$vA} zQdQ{Li(>ur65sjtijqyupcN;FjTPC3H`wmE^yfb3Ko&j;Ns@`+gniIK*rseb6>D8Z zQAYhRvGHE6lb@ujR=%Be9=4T2@mp@e{3iyBm$|M_ix|wnKk(%6!9Ol3v|zDx5?%+L z$uc4iv$@CPH=1=1*D_Qymr5o+Fd_zvt-V+4sQQp!OuJGbuskcVdH(ou-S4`<{q5zW zgY~wyc!}zyBt}HYaWcVc1(Qa^1s`zD5nSH$=;CO8%RPuUiPJnw6}2abUdEy;EWQU< zb%`Sm>9V=75<4SfWc|x;BKm>_%iJ29V4o$igfYKwocHvu+gJ}FJ<1qpa$X*aGn2zu zjqL5s=O{1;n01>>{`>@sf4DclIEcy2$edr)Pj#g>DdXA3nZj<^4(Y2qjQG*#I#Km5Vz+sussrFi~+^(8U2rTk2zRdp2W`D7m z>sjtK$T{YH*$>~GYn+q~VT2u83P*{G1KIucq5t)VZ{E`iKpeRFLGbtMOY;4#_xtS> zGaN@NT%*i{mn+uIS_iGG@l{)xoaA5>uW5+5Nq1U@0EFX?L@9~A*+fTcA+~v4=EQir zCKh5kho_2)9YgR7oibcKAP7(+LJh1m%z~6MTEf4RfrL^g@Z{eV6`w(zAds` z!Q*{+usPo+U^!Sg&0xVV66q*=G@BT_w!Yq%t*xn|(p~Pn+_FKpRz^gm7qK%nJ1}v} z89#(Y(@a+IZ(+DnE^WIMr)|{h(~fbw;vJ<_s<(4qWvVta$l2wuxs7Pv!B-@`kQ3%W zgcOguWlpmMX=ay|mGyq+Gw;OS8WFO?b(m)Hi2u04^LZ&mQ# z>q1$TvBZjd9qe4VDLD)o3-ZlP$@fo~FGGT-q$DJX3RtGQbiAgWNyEe5j$?b9^X6jv z-^nFB4tHlFA|i}ah9RIq_L9kAfT903O^ppNJ-_|cpB`Ckr5(a3u~SPvSAa|$epmuK zc?`eg+|}h~9=m~xk00ChHhd#Oik|o&Vg=D5z6k3)>dFj9zCbQUa1|~gx>(qiU9~so zbDTIlBBCu;#JLM|OD=VL- zeel$V$Sjk^fz_$3s{1leQYBF`GN9|RIL33COIPCe>;Xy#JJ&7DgErgM4+~swoyXq` zDV7p8gxyGd)uzVUdw$vTjQcallV6jI5Z@(f*_9$k_$E; zsW4LsSIrk;Zi=l&S|QK_MmSuLKf21Tch5)-foQC7UGHqL94bP)-kLkZ9J8`DWX+{r zRydu~In|e?!SnpvYnUnT)xe{@A;NpZ*){SZjRMSZcm+^Jp5Jz(LrNi<7YEUOaKS5E zr&749(f_L5lUJum!#TD0V3bAXeM^O1@-iWlurqawECxcDWIBfqtj0ro(U2o#!r5J? zql~v8(bf3+`u1e1Z_oE}1@))KdzJO#Y8}r_r^;Ew+^kPy2}lc)-aah7 z%=F~s-^YmxsiEXD%@;P|)xpWN9Y(B+L&<096nfy_Ca(L-A-%iq^aKWUy;Eh2dy;Rr z<~F8#$I~VxtQ^qS#w7t7J~Ibga)eb+Xo_p8-BeS{U!5Db=e3dcWA#4mtUIgNX#ku9dL@2h7pl(Gyd)O@82?Rib#B~{WCL!9y_buR4?>cW2Qu*GDKO>@5biJj@bKfYut+8>px424m zzUxKj)L9aeGN(niCYIEs;=9rzlf(9Ho(HQ908R$-^YdZpx)dZl3vPOSJHy;hm~rG&eO3LZUNniTq?_w!gKA60kmOWR7=O9CYleMKJVTZ4o{tR4KLk+@B6$RiV1B zCm;T4%-?I)hs-PLiR#PpScq`9PID1*ozcCNNyVY-?OA9`&0!%l%2TljQS zit}0Sm%_pg$O|1OskFGAmxec@n{+DOg6Kqwdbtj$qj+93%f~!hKQ|ujuQ}5a1y_r6 zUy3UIy0AMFe>Ae}Rh*x12cQV@fE;tmnUC}r&EdmsZC87%Mi)P0iVQZ@(77JFo!Q!C zgQojH8*}Z0yfbFq6UiGr2J-6mz44C?*ZqkND@BEP?qoj9gpsjbKCGS#5sG>@;2s<2 zUPB6>r-0(w1k|w#1fl<1YHM2?7aQ9=0Pz&{{>s&QS~2%6*^tTX@};I>c^sUTN}vm& zjJuG0QGDiGO>8+@_E^5qTXNDfgw2WDe24N{!-jk4%)8FSZvT2k4(D#|JNc0#owcE% z;rBPBY;0^?vgJ@QS%%!&D>wr zk4v+G-F@+jIlw%$5;b<4Ze}tc^qgQGpqv>-bDgaa4$4b`VAlCxa=+abH`(yM}-W2ekAO$-L)y4 zwvSO;Tc6(L{J`HwnfB` z@z1=@+yeU3;b@HC=P_E7QA1Zd-FvmZ+$x@{Y4l>VfrrhA94oRzu7TyZkDC0pC8*b;&Xj{1*Ky1Q4ZOz1Q=BPDK1*<$Dkf zUo^m>w-;{exG!QL(!HnVxg{bZqJ3xNTQgU6j2HJz_|LXB?}fYuAP{PbimSf^xl)+v zx0goT0erZ+x*|f}UlpSQXN~p zl$9=k-#*ew+CyjzV2;z^7yQ;lTG7!W60vId)%O7d5-lP-+mw&TGIc~!r=8T$NL59} zPovvuWo2$ZKVBy=KiCO*4fH6ru@pEiWx!7q_K7|K%LBw6@rsx{PT0{54lj^8&u&F2 zLviX2Ky_|8I+gS;zkFb!Ikn5qT@|!}^eSr{>wUNjaCL0GO(K5x%BQnj6)OPT?Lrv& zB>MB=w0!p`R|sLObhdDN=D4*m0Eel?_vBeSdwWPL!ZyEZT38{y0n74?gWwBfC!9l5 zOAP(WXGJmbLQMoPZr`oeSoJ&>2magV>2=fKDz zxq0r4`$O0*-J8o?UtgCBqS>5ASsNJ|Rsv3e(E01Kg+5QwxRvaOKl%rk+*)QQ@l+V8 z|H!BP?h)PF9Bdh0cwGicWjtcw%|4eU?+d2^g)(Ec^g|cPo~C!M{-a?k;e4($-^+@1 zwX`Z=PDUz`>uYP0K{Sq|t}~QWRJyKHVYnYK|C&~%hNw`-A;I21(o7bB?&^}#jZ51?_aq}$EUn39}5%M%R5SJ+{e+ob&qu$Aelsh&16i#Z@_x|ME@1b`wm z6QhkGhu`T&>jYy!=&;DC+%f}>0#H=y!&O%T+nXuqy9-zxmTNhypmor1KR1*DaO>sE z9{`Q0FP|nNs@cluGpk%{Vw-7=Eq8&F#aVV6&;x_FM{A7GX6bRhO%Pf>E6X=x(W!}8 zxSGW)Z5wTKK>O`qA9gi>UZB80K}i`4n-4;c)mW8hwHF@Zl(M#Vti}{%H;L&;eHe!g z2rJbf3}HSnWy6H7HFHV)dU<@X(A56N1*!M+Vr3Z_tcVcv?9!Cn+*}AqKo)Qz>RPss zpFe*NK!M+CxWtdP6d>H$vuDYLCOg z4?|Rhy-9k7`&aeRezkxI0rwH2Cny?s3(OXW(i9UrS@>o~-R98(!!{4$BEn7!f{+_J zJ3AQ>gtVYxv9mJHr_gc=WGcGF=<+*;0lc0o^|aP8F2COqf?RWRGpy36%R~^|`1Fj# zk!zVO(7-SEUja@i@WSu)>3ZWe$M)2)a-NVv8X$1TA8w=qhC4VoCAEe`--!9Wv1oPv-@APGznT6RbH?Ns{+F5SaqE>D(N6bc0l(E+x`7z|re z{0+#3H82s?Yhi?bZEKL&^0Mg$>axvb&!SWxn4U|woTkpr)3sHZ@o$iM29slmX4bqhT zOzZZrJw##x@c}>>$=Fyr6SoiCJ&2lT8Y?j70UKNb6dpzdA$~ZZ3&|BgvuceMF*Y{V zbs8|_E8Yc>20*;UKz^6J2pY)R*j{fjD;rxVqwDTeL_vPOyvSl9BZ3geWy_1qdgg%e zWMK3iEs_wSw*b({AIGGnnc(*}0jOm;W?{UK4pCM8)kpYcL`Vz}9N74cO-*}^3SM@7 z+Rmi3{Oqx)rB2Wq2S7>$I>&&YmHMM2R_y!^)D(AHWvmXM4$Y*zU_6=1a= zWG=g3;LxoSWoAxQPL&_qsTarws^IV&lqJH&fQqpoLWYNj#kTqrr&)pQN{29tnMKEa z(6qOj{xt~%LqK~TkO#ciTLPdkXkJM@0H{)pjQgxM%LF>By^mlEfDngK%~XSXw{I09 z>_b@h6xpbJ(CioyA3#f$)5SG~!R(lhlsWDh5>N~5zrJXcD+lOTPZ&HP>u3sw5Fj&T z{C2&w>JW(g7rW>4dO>^0LSoFOn!*5A9KeKxG@@%?5yPFQgN6hcs}qzp??$GGZY?%! zfvf_jW>MDk@J1(g*>l-F^Drkfr%D(R0(+wnmK_lyir?r0wj@3Mq7OMY`o!(FBOGs2 zb@D6R*J49PInqJ4L{)k?5Yl;w0f@!82sZWX15l^K;~G#=`=F1e>ZYV}8mFW-H8*z= zXR7Cn_FgB3o2?`Sm7X<-D2#|sz(Z%k;O-Fj2tXFKbZ>-K2!u`&5)!yF zFpz%G1K}b`#U^fhxKxS7gx(f@0@ekfsj8|v;<1h$+ii80e1GLrtJvYrM3=D^$b@k1 z9IwsH4MF?C@3{LTkQ)v_fJDOoV293HzuVBu?*$R{@c8SrUM`REvoK$93_!;fg#dq- zK_!&tuE7(xISYV4TR=z8T)NdAo|TyOWQcq2ff|ehR00YBWEO>) zL&yhKz&b&FxFB^k4_I1~w%a164=Bprkv2xebZhJo918eF3JMB~9+wpLQ9>Swx)1xm zU(PSB7w|P8G;RrrY7mP^F|(Q>7?Cu{yLA35$3%dj<3KG7;3_;%jh$jX~0$FGRy0~roec~W`u|0Ulb75!5QoyQN zZ{Ic<$e)6Wgk!7F3=C=%bTp}}wvXWd0s;diU_H@DDySuX&cZNhI@9CUrew;UgiKNw z+l*wR?oMI)bj*S57FXjJAy~jNB~dyQedG|00r-Z5gg`_jghK_f zO%>pX&YRir>ACicr;JYntzC(KPTP8Zl=Kf$Tq*r;sDu933V{DvrB!{2Ka0n^b|E&G z83z1xs7S@UkCS-uwHOTPm&7pt)f0|yxZ!{PyKB4uUykX&SZ@A5{gy&}d`$lB1^6%3 z+y76WfPV)4pE@i4S?T}8fAY^P{WDAdU0$Yt_R>Fl>7Tvy|H2IT&jI@90R8{_0I@mK z_C{6fZOQjv0>YGLshNQ>k9g(uEe`&*!eB*9<}3X0%72Q`vMqNj)bylS*w}`kv<_q% z+(ktmXyBiqS^;zC1@n>d(#Vq8kYrDd*RA8_p%&{ky)R-Uy0*??#?eDt)j>fk#%rgt zy}c9yA7Z{`D*{PZQVNNU9Rcwe$T3tJICP7_76ZlZ!oosOOF^LnQ-p}Uf;00FPsXVt zvQtjX1Fb&jI>El@`~HI~UeR=${QTb>SN{Icdg^bv=2_b1{9If)AQ+UEmTK-#Fhjvq zK%f|$g79zfEsdD&m+TM3De~nya_5RPI+0m$)R&SCNp$o17bhhdFfU9jnMqX!Rr<{5 z>W|gDahBN;4Ovca5@p${~w$29|eMi5TF2%|M0 z$a|;_-o>ymLlvtr!QnXm;{zRBA(U{1g+Esq9Diu(!sFCA)PK5f zl2q&HAnx*0PX=?e$7bFdNf&xRApFT1|cJ)8_banH(G0CMQzvlu<+S--)zTD*ef&!@9IR8v>au%^sA+?Yr zEKMHFgl)E|KRIR`+mEo;zo``}V1r+GN8a1?d}Gt&ZVey7)6~=in@7NPZ4$JiC6Ie{ z_c|l~7{Uswz?IvJ+yP^kJr)P^4IVzhwVyYMNohWVhpE*JR*#^W39IGoBb>wJwu`38 znEyz>V2-JRGDuHP55d<%sDy&hZZ6Y{&dREQVi2hC;HkU|F3^^-1hWr4Mm>0Rdg&5~ zI-4LP_8lz6fLaHFPLstPXy$QZ?oJ~L#qQML0!Fj^aSF?~H8q(H7UDpe+QZ~{F7g~5 z7W=*0G97CwJ5uacQdM;X8H`gSpYd05VnxLP!HEi1NdyA%{P{R2Y(n6>YZ-fu!^1~yzLSD)HGWGuhir5G6ekzgA0Hlg9zKVKIWF|CLiJ1-T+hYsdQQ0`+oTmx z+mSfhZ3D?y3u{>gD+q=)Hcn0}5dSocV|&0wYe^FpYwmm?X4%y-y0Ej%IfpOn?NpeH zi|;9Mb;LDjmaG_!IQD6SV|l3;Jp|QcD9mg?QH2i*#+ysP}42}xF-;)33UV5>)_pK3b$C{Ax1A*PhCDtbb+HmFm3teZmKyM^LRAhtmr!DZ@1eA)e^#KJX}MmwzG%sZgM$N| zmIj8WhFW5V7Ik?QBx|MOT=VX z&%b*F)qg!f#-ZZllP5TD-0+=zs;=%l-^=mp7}!z4tXH6xNq6VPiN}giml}Zb7r~9| zywqZ}AETy+cRn8^X+Qb%Lf*5M=`@S0eE2HZdPW(Gm~(wSJ2gJXaX1`^`E+0nfv5xK zh!mytQO|AdHxKg-i@dzNV1t6?;Vc=MTDr>Q$T$e8@Xj5u4oup)f@g&3;u#hTjWsRx zUz3xQPzyVC;>5<{kN`8YG3-q^mh+>PBI}A@k6kjF(9V1D_~G{>XE$BQYM(z(j*nlU zrjA0P_MyNCu2t4+*J>8N{uagh7HV=n@8z`iP3iC3#*p0Nn3O`Rp-=aSSLm-wg5i`U zfKUYhSK-Z@H@$bpiSfqCO6eWZkGO*0zkeST#KFnQUuLVE$+O&@rXaqX#OJM++0lS- zi#z4-xiPEg_aM)p@#30~+P!=CUcC4XkrAxBdQKzYI##Bjq@e*{e<%voT-9fGU%K$k zn>UcWb91=^5@6sBUXKH9@y9Te3k#xN2QF`>ppFIRGYwZ)p=Q!((xBaBgLQ@Lp^an= z;-V()*OZU$p0bEx70ReSnBtYKvYaDio9`a zk!ZIVEOE#uPfkBpgj%wh#xF1oNGIDt8GSO5lz|~0Rt2i%QjZ_!4Tz^wK0BggWMh-b z?2&x*C|8J;R!UBw$kfy{Wl*QtMmq?~u`B`L9Szpf)@GKArl6(OR5LQti{>cU+}vb} zKmREni4IRlgHjI!XfW7>SaE3g=TDYq*TBB}B%KWPr^!{9!^1;behWd*y$vX>MFx{l zMsm~U`1?0N1*gIRr{sn}B558guCA_%i;E{p1|duB4Bgy>Q95j`UF=WFr!E>TuH7;T zpxZ>A482V9q8Jx1<25nqHgmMJ!ys(Y~tMrLew|L|~3eEjm{ zBn2Iv_OoY^;N2KPh}UpF;o;3 zjEsyQ+jgexcHxlvlhFy=Ps@h8TSQPjN$e1H+juJq5GX|=C_5*|dt>$!5`Bx|8`O{A zVS8KN7;O>uiS5qH^HMEwsJK7}$6Ku8fM5^!Pe-b~C4_`r!Jl7MRb^edc^Us1iRR?w zyiDQ;%g6<#dIV5NlIn0cVCcM$$K8F%`|o>oOeDvaP4%66yq+>sM)JE&1{aZb-2lZ2F&bFSK`jOXX(X8)Rn0>8^TR-jQIgOuZ?=j%Q`0gsnp#@k zzkSOs;t*gop)%&aTnU#3EXW|?6_bz#pN)+ZLwWRr*E~ao^_8!0Ol&Nm#SJjHeGU&l zb?Q{~$gO{Eqhmf_z_;Wf?!7cz3WM*q#Ye+QVB|XZXq7dKep~BzV z+t!wol9H02zeY$u?px=`$f{h|jR+;;>Oc?6VED1oJ(C7 z6LNUMe8Z>XXQi<*1a0tGJi76`>Xkfe*eyoJpHpjqYjh!;KF#bobLNbtXmZhCaG+<8 z_zZrY$EPMFCN^4GuAL&n-t35G9WJT;t{aeC}Qv8ja4(ESOc82}n&f zwy;He?2H(E$t$Nrk^}2e?5ra&vQ&lOwHsOxzhz zg_hP;v8#RA+$S=Rf`+6mF+$ft%jPg!IuUjR@t2>uv4I=Ugx7Y~~I?fFKFt#yrzrdP(lQ?Wne z_Sjhg14WFGeafcy4ga4#-N1L}=FB7{B-Z93a>J1Ye5l~9)q0TK@N%96Is|?tB_)AX z!xHWTzLM$+c;9b*Wnga}k~INf63%!Lp|5`vKfgZHHc)KDzvVBYFt0bbh|ElxwODVI z^G#n(uuLW!!53mEGr}euHhV0`*1!nFN!6O^T?c@nVtnSgXwwetA9?7Q}4|@U3wR3KI4s!9fpkqmklMQn`|*rcCfI zFl*Ix6?u7iBY|cuTC7p?Rf|8gervKZ)YHS`vours6(jOSdEYSUWB> zj^BPb1}%=1J8NiA3yIy3!18M?c0P4?ci+Z!`JX#HM^0`nWa9}@k znp3q#1_p&@TXflMHZn=~GqbV?Elyw~gk9=+M8orUOc+qDvueBW4O<@mR5VVn$$v0< zh_E*l=#hp6V0kL_*j!ZSU^p1=0xHEQASs9o07D z54^m@OT!MJ=WL_@4J7GTPX5=Ep~+ygKTjX}7S526fcK)^48yVP4AEY+)HZOc@OyT4 zHkk1Y=-z$Z^7KK@0f_}I3e0LDC{*UrCP#~`AE1wlqzcoZ0<1+f?KQCfg~ z6D+aNXDAs=FSn#}hMZi$UDWB~0vO?d8$rzbzwwiJEKNn}3?G^u&! zeZ=#YI_U&KTa-2uxd+T)cYi;$y=5!iB8DTrZMiQ;*VHuq(GBQ1Va8>JbXnn1$VPvu zsHmuooP|`1--XA>ft^D47bFS5pK$-7PZ%v)g%?tf71O0smL!8k3_uhk6I0Mtp}Wk? z{tXjyaiURJ+d<7~CzrThCnrifk+%BoiuIiCF5%76Wk&@wGzJ?PdF9vH;P%P8tT%4lkdQcnC5NnG zR88`pn=*PJLMcAoo8*-(F~ks~au0s_P3XjhPzQdm68G(F6;`lSvAc3HzVg}h-#&5j zq;{nn1~`miPS{ue{I*_`T!7^|`38-U8Y9EQd!erx2z`O;dO@fjP_#zAaNvbbbKR!k zpIjI#JtJ>!@#M)*uy6t&myZ`;93Q`9JzCM;{&af6G{@;0H}?wk7i$yxmoVnd#$sY( zR9reSz*!?Aq^8e%;Wzs4w!>;YH;|>*E1)qi-f@HfGmT1 z3ij9T&dwt#se&l21}|2dAzP%6=Gx|_HVhN8cV|}@w7FkqV34r+b&tQn)IVxy$Q3y> zp!!pEV4WF_93TI_kN4~+duWz^CqtR7%CBdjXO}1w$3%4aj9$XaqHf zt9`YWUE;8t1m*Wx9jsh`lJ_?~@n{KM=HwmLn&tQTr)i^UP4$ z3^Q1^&3$02aYyw;CV8#hkFr{td#!s}^nAaQZB>Fk<%+B54SjcwrZe+DPvf7V5C-h=OkMx?cr&=)0YNudE{gY=5e@2TX z8`wj#5j~}tnw(7P!hyIzTl}!7W|~b>_e8HWC0sT4YTk?7Qy&ZdnwR8=Xm%8)`^{96 zR-aaLDoe-bLXL)@LczllJ<@h@#*2+Wl~B>qKVIZLz3pIQQYZBUi7oS%LOj=XKYgx32n&$WuBw zKRq3RRx`&Sx6FkE1y^=GzCL|>hgni1oYj}_EX>Mp!k7vMFY^61?A#ACe+RH7*i|^VKH0YG3PW!?ahWZhf&cOWm>4B|}rT7|8LX`wwde!ab;D{l- z_Wg7S&*y+wKi3Aq>kqFQudjWC2aLdL>ue?A!5#3*)eZMpm)nh{y?XV`-#>YIUB(SP zF+toFoY|S>CiwRc+if*$E>PTj{lEOASwg1-yk6oT5T12Gcr8%5{jYDXYSB5p)GcH8 zr<7%w1hFsY!+la_xBIzg0aiymKJ(maWe}k z<{tI=HZm9t20B&8fXm(v_`SYcTU*=F(b3x4dYPU>gf+|zR4CvjQx04;qmZNT-n|Rt zLh{2^YC1X&3KEupjI1nKdHHPMEb{XFw{v>Tz<3=R8_RM2bc%eeuxTe_e#I1Piu41` zYpNfvJ%g`AtUeMs2+rQ!gQGZgLMyp-)vi%9Wl&KY#pC3ZlsF-K$#fME!hZbt0W3Rj z%!pW@m*mYsOzW>2k5xnF0&JNQ#25@I{Sk%pz2*&LYWbyv(RY)=}I5gLBMzzIDg z3AM;){H}Jx6slAEG?Pm3$vrZdW0bj(~ zlX*k8W7Sf-kcO`=zB7Opcc7t@eNa^6&@B2l2o`XN zAMn5lagEXL?hP;$W8r}n9SM&?O8{y%=?K1W%F4jcpFcyY?C$NooAak@O5!Mn;)#Mn zyqJ5DbaKLNC~%koKTSIKOh!_&9=Q4p4hIZ?pn!v*rbq#u!8xG8lF{rJ(-&sd)8%KeiTyjg){%C|zpK7WR+82IQ0)C>u=2ml>P=TI=e ziv#A4=c1oTT&|#Jemjz~Unz;XA*=4*hb(W$If&8+i^|K%ZEkD~gD42STr{+_&I|qb z!(r&#Bz`a8h{D(pajEgMj><|(apIov)Snc1zDzz;ivSH!JPx{YCjlgYl$19Wpq5XA zPOau0EZIi`O+K*b6eK4fD*`*RcXHxnVYwcB{P=O)^K-QtY<8J{x!jJm^4R6M}VtPQG()t z$31V8%r=#MS;cO6R>lM8>i~~BfVqYbEx5=&er_g&hQXf)M)s2?b2_COzwrGo>nXKQ1{)zfeIzp5I}2H;=t)AS}Yq=?f8 zOF4VDRNc60TC9^f@$rm&rneo^F(%=5?Iih$b%FUgFV*bRUA=10%&FiB8WK(mS4Nr$ z->|X&gcN&I}fIkn`3pBX~Xy z98m7t>(C(s{R<)UifQ#6QD}>EU-3}Gf|><~!iF3Nv9BB zsi~z_(izo`Bh z^hWi{YicU0ZJ-k%33>xGhZ;vm{9oCsgh`FlS4KH=e0346{Y;MGD^_J|z{QCcHW|gn z!~nK8%zc`!0*bdI^vfJ4CQGvBxwc(3=TOG15a;6J@|0q8XH{QGhc#?%_W&Lc1CsA6 zIiPw#N5{$>*?__Xa#gi^2Rugu8i#ZEsci;Ym49?~g|^KY8ySIiD$RH?^PuM*Bw!&C zkbX}4{kgzY3>N00iL>fpO=fQZx->!VMeA0_ z9R!$Jyp%KKp&SI70U7}`Nj9pmP(1#0mKk^)ciC`XUvccAbouw`n4r@4_v^f#(~@R# zpH@!o0%?>(BmYN7$ESoefU~fOWBELm=B6_Pk8QN3_?0>P$mVpDiIn znvo~YPuZ_x0kcic`JL0D z4HL;pNim|XN|`-`asa>y=wC%k;uclWQDy*)RA)ae3Y5fazr zdJ;$y+#b<2RgAg*|IYkK*r0ZHYjEyP9=q@2A~>=&Cs33!IK$wz^R=jmA3``2lOH=m zR@TAUSpb72Yf+&{3GZ5kvjlB%5H)8&eIX+wBRCbHRq~N^Z+AC5o{#C)t-0mXJ^e%| zlK1UdttzORlo4)Zo^FlgcUD=yT|gI*1OQ(_Ap>;SV0L5I6idhdNq7mIqgpK)W98j6 zl~`Dulgqxqt@nCXM)O=)N-7NiY-G6;hgc=IgC6Js@=u6zlQKSsyH#!6Q^WyGFQ97q(=UuXZraW4~KDM(3B7=7>+5LN07uRodW*QbDH3f~YB z#XQh&X8F;~$2iP+UgV15yg8cUv1xXknRvdArs{*ncxtZew)V5s*CKbF8=fm8D>r*H zb8-|Ah*IeNlT2LQ-i`-}5p-A5t+Rhf#!5ooFQmE1zlqncx((th*Z;*oYUuy37*Wrh zPUfpuHwC2rW>7?QQOFUC`@#7=m1;is+6Ptt<}O4ktjYJTSu7&aOPGMVR zTR(j1lTTKvAdyDtje5G?PZtz z83p#CVx@t!r@Z`pe5M$h=AwVSmk#ynRU)wOz}Uw(&Mxy~D*jC#Yxq2L|5I}LU!jEm ip0@uRzWV?0k%tU?zYr!Ue%C+D74ca9QT78p-~RzkfklD< diff --git a/frontend/src/layout/navigation/EnvironmentSwitcher.tsx b/frontend/src/layout/navigation/EnvironmentSwitcher.tsx index 2432cb72c63f7..83c85092ff3ab 100644 --- a/frontend/src/layout/navigation/EnvironmentSwitcher.tsx +++ b/frontend/src/layout/navigation/EnvironmentSwitcher.tsx @@ -157,6 +157,17 @@ function determineProjectSwitchUrl(pathname: string, newTeamId: number): string // and after switching is on a different page than before. let route = removeProjectIdIfPresent(pathname) route = removeFlagIdIfPresent(route) + + // List of routes that should redirect to project home + // instead of keeping the current path. + const redirectToHomeRoutes = ['/products', '/onboarding'] + + const shouldRedirectToHome = redirectToHomeRoutes.some((redirectRoute) => route.includes(redirectRoute)) + + if (shouldRedirectToHome) { + return urls.project(newTeamId) // Go to project home + } + return urls.project(newTeamId, route) } From dff2676253c2c4b552e84812f2320dc5c4eab516 Mon Sep 17 00:00:00 2001 From: timgl Date: Fri, 25 Oct 2024 19:23:55 +0100 Subject: [PATCH 5/5] perf: Speed up selecting from persons table (#25824) Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com> --- .../api/test/__snapshots__/test_api_docs.ambr | 2 +- posthog/hogql/database/schema/persons.py | 44 +++++- .../test/__snapshots__/test_persons.ambr | 58 ++++++++ .../database/schema/test/test_persons.py | 128 ++++++++++++++++++ .../hogql/test/__snapshots__/test_query.ambr | 15 +- 5 files changed, 235 insertions(+), 12 deletions(-) create mode 100644 posthog/hogql/database/schema/test/__snapshots__/test_persons.ambr create mode 100644 posthog/hogql/database/schema/test/test_persons.py diff --git a/posthog/api/test/__snapshots__/test_api_docs.ambr b/posthog/api/test/__snapshots__/test_api_docs.ambr index 6ef31c6530176..a5f9b394809ae 100644 --- a/posthog/api/test/__snapshots__/test_api_docs.ambr +++ b/posthog/api/test/__snapshots__/test_api_docs.ambr @@ -97,8 +97,8 @@ '/home/runner/work/posthog/posthog/posthog/api/survey.py: Warning [SurveyViewSet > SurveySerializer]: unable to resolve type hint for function "get_conditions". Consider using a type hint or @extend_schema_field. Defaulting to string.', '/home/runner/work/posthog/posthog/posthog/api/web_experiment.py: Warning [WebExperimentViewSet]: could not derive type of path parameter "project_id" because model "posthog.models.web_experiment.WebExperiment" contained no such field. Consider annotating parameter with @extend_schema. Defaulting to "string".', 'Warning: encountered multiple names for the same choice set (HrefMatchingEnum). This may be unwanted even though the generated schema is technically correct. Add an entry to ENUM_NAME_OVERRIDES to fix the naming.', - 'Warning: enum naming encountered a non-optimally resolvable collision for fields named "kind". The same name has been used for multiple choice sets in multiple components. The collision was resolved with "Kind069Enum". add an entry to ENUM_NAME_OVERRIDES to fix the naming.', 'Warning: enum naming encountered a non-optimally resolvable collision for fields named "kind". The same name has been used for multiple choice sets in multiple components. The collision was resolved with "KindCfaEnum". add an entry to ENUM_NAME_OVERRIDES to fix the naming.', + 'Warning: enum naming encountered a non-optimally resolvable collision for fields named "kind". The same name has been used for multiple choice sets in multiple components. The collision was resolved with "Kind069Enum". add an entry to ENUM_NAME_OVERRIDES to fix the naming.', 'Warning: enum naming encountered a non-optimally resolvable collision for fields named "type". The same name has been used for multiple choice sets in multiple components. The collision was resolved with "TypeF73Enum". add an entry to ENUM_NAME_OVERRIDES to fix the naming.', 'Warning: encountered multiple names for the same choice set (EffectivePrivilegeLevelEnum). This may be unwanted even though the generated schema is technically correct. Add an entry to ENUM_NAME_OVERRIDES to fix the naming.', 'Warning: encountered multiple names for the same choice set (MembershipLevelEnum). This may be unwanted even though the generated schema is technically correct. Add an entry to ENUM_NAME_OVERRIDES to fix the naming.', diff --git a/posthog/hogql/database/schema/persons.py b/posthog/hogql/database/schema/persons.py index 0b0747593b7a7..04e8eaa47dd5e 100644 --- a/posthog/hogql/database/schema/persons.py +++ b/posthog/hogql/database/schema/persons.py @@ -1,10 +1,12 @@ from typing import cast, Optional, Self +from posthog.hogql.parser import parse_select import posthoganalytics from posthog.hogql.ast import SelectQuery, And, CompareOperation, CompareOperationOp, Field, JoinExpr from posthog.hogql.base import Expr from posthog.hogql.constants import HogQLQuerySettings from posthog.hogql.context import HogQLContext +from posthog.hogql import ast from posthog.hogql.database.argmax import argmax_select from posthog.hogql.database.models import ( BooleanDatabaseField, @@ -56,10 +58,46 @@ def select_from_persons_table( version = PersonsArgMaxVersion.V2 break - if version == PersonsArgMaxVersion.V2: - from posthog.hogql import ast - from posthog.hogql.parser import parse_select + and_conditions = [] + + if filter is not None: + and_conditions.append(filter) + # For now, only do this optimization for directly querying the persons table (without joins or as part of a subquery) to avoid knock-on effects to insight queries + if ( + node.select_from + and node.select_from.type + and hasattr(node.select_from.type, "table") + and node.select_from.type.table + and isinstance(node.select_from.type.table, PersonsTable) + ): + extractor = WhereClauseExtractor(context) + extractor.add_local_tables(join_or_table) + where = extractor.get_inner_where(node) + if where: + select = argmax_select( + table_name="raw_persons", + select_fields=join_or_table.fields_accessed, + group_fields=["id"], + argmax_field="version", + deleted_field="is_deleted", + timestamp_field_to_clamp="created_at", + ) + inner_select = cast( + ast.SelectQuery, + parse_select( + """ + SELECT id FROM raw_persons as where_optimization + """ + ), + ) + inner_select.where = where + select.where = ast.CompareOperation( + left=ast.Field(chain=["id"]), right=inner_select, op=ast.CompareOperationOp.In + ) + return select + + if version == PersonsArgMaxVersion.V2: select = cast( ast.SelectQuery, parse_select( diff --git a/posthog/hogql/database/schema/test/__snapshots__/test_persons.ambr b/posthog/hogql/database/schema/test/__snapshots__/test_persons.ambr new file mode 100644 index 0000000000000..90d7cb108ef8d --- /dev/null +++ b/posthog/hogql/database/schema/test/__snapshots__/test_persons.ambr @@ -0,0 +1,58 @@ +# serializer version: 1 +# name: TestPersonOptimization.test_joins_are_left_alone_for_now + ''' + SELECT events.uuid AS uuid + FROM events + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS events__pdi___person_id, + argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, + person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) + INNER JOIN + (SELECT person.id AS id, + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$some_prop'), ''), 'null'), '^"|"$', '') AS `properties___$some_prop` + FROM person + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) + WHERE and(equals(events.team_id, 2), ifNull(equals(events__pdi__person.`properties___$some_prop`, 'something'), 0)) + LIMIT 100 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1, + format_csv_allow_double_quotes=0, + max_ast_elements=4000000, + max_expanded_ast_elements=4000000, + max_bytes_before_external_group_by=0 + ''' +# --- +# name: TestPersonOptimization.test_simple_filter + ''' + SELECT persons.id AS id, + persons.properties AS properties + FROM + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$some_prop'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$some_prop`, + argMax(person.properties, person.version) AS properties, + person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), in(id, + (SELECT where_optimization.id AS id + FROM person AS where_optimization + WHERE and(equals(where_optimization.team_id, 2), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(where_optimization.properties, '$some_prop'), ''), 'null'), '^"|"$', ''), 'something'), 0))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0))) AS persons + WHERE ifNull(equals(persons.`properties___$some_prop`, 'something'), 0) + LIMIT 100 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1, + format_csv_allow_double_quotes=0, + max_ast_elements=4000000, + max_expanded_ast_elements=4000000, + max_bytes_before_external_group_by=0 + ''' +# --- diff --git a/posthog/hogql/database/schema/test/test_persons.py b/posthog/hogql/database/schema/test/test_persons.py new file mode 100644 index 0000000000000..e259df691d06e --- /dev/null +++ b/posthog/hogql/database/schema/test/test_persons.py @@ -0,0 +1,128 @@ +from posthog.hogql.parser import parse_select +from posthog.schema import ( + PersonsOnEventsMode, + InsightActorsQuery, + TrendsQuery, + ActorsQuery, + EventsNode, + InsightDateRange, +) +from posthog.hogql_queries.actors_query_runner import ActorsQueryRunner +from posthog.hogql.modifiers import create_default_modifiers_for_team +from posthog.hogql.query import execute_hogql_query +from posthog.test.base import ( + APIBaseTest, + ClickhouseTestMixin, + _create_person, + _create_event, + snapshot_clickhouse_queries, +) +from posthog.models.person.util import create_person +from datetime import datetime + +from unittest.mock import patch, Mock + + +@patch("posthoganalytics.feature_enabled", new=Mock(return_value=True)) # for persons-inner-where-optimization +class TestPersonOptimization(ClickhouseTestMixin, APIBaseTest): + """ + Mostly tests for the optimization of pre-filtering before aggregating. See https://github.com/PostHog/posthog/pull/25604 + """ + + def setUp(self): + super().setUp() + self.first_person = _create_person( + team_id=self.team.pk, + distinct_ids=["1"], + properties={"$some_prop": "something", "$another_prop": "something1"}, + created_at=datetime(2024, 1, 1, 12), + ) + self.second_person = _create_person( + team_id=self.team.pk, + properties={"$some_prop": "ifwematcholdversionsthiswillmatch", "$another_prop": "something2"}, + distinct_ids=["2"], + version=1, + created_at=datetime(2024, 1, 1, 13), + ) + # update second_person with the correct prop + create_person( + team_id=self.team.pk, + uuid=str(self.second_person.uuid), + properties={"$some_prop": "something", "$another_prop": "something2"}, + created_at=datetime(2024, 1, 1, 13), + version=2, + ) + self.third_person = _create_person( + team_id=self.team.pk, + distinct_ids=["3"], + properties={"$some_prop": "not something", "$another_prop": "something3"}, + created_at=datetime(2024, 1, 1, 14), + ) + # deleted + self.deleted_person = _create_person( + team_id=self.team.pk, + properties={"$some_prop": "ifwematcholdversionsthiswillmatch", "$another_prop": "something2"}, + distinct_ids=["deleted"], + created_at=datetime(2024, 1, 1, 13), + version=1, + ) + create_person(team_id=self.team.pk, uuid=str(self.deleted_person.uuid), version=2, is_deleted=True) + _create_event(event="$pageview", distinct_id="1", team=self.team) + _create_event(event="$pageview", distinct_id="2", team=self.team) + _create_event(event="$pageview", distinct_id="3", team=self.team) + self.modifiers = create_default_modifiers_for_team(self.team) + self.modifiers.personsOnEventsMode = PersonsOnEventsMode.DISABLED + # self.modifiers.optimizeJoinedFilters = True + # self.modifiers.personsArgMaxVersion = PersonsArgMaxVersion.V1 + + @snapshot_clickhouse_queries + def test_simple_filter(self): + response = execute_hogql_query( + parse_select("select id, properties from persons where properties.$some_prop = 'something'"), + self.team, + modifiers=self.modifiers, + ) + assert len(response.results) == 2 + assert response.clickhouse + self.assertIn("where_optimization", response.clickhouse) + self.assertNotIn("in(tuple(person.id, person.version)", response.clickhouse) + + @snapshot_clickhouse_queries + def test_joins_are_left_alone_for_now(self): + response = execute_hogql_query( + parse_select("select uuid from events where person.properties.$some_prop = 'something'"), + self.team, + modifiers=self.modifiers, + ) + assert len(response.results) == 2 + assert response.clickhouse + self.assertIn("in(tuple(person.id, person.version)", response.clickhouse) + self.assertNotIn("where_optimization", response.clickhouse) + + def test_person_modal_not_optimized_yet(self): + source_query = TrendsQuery( + series=[EventsNode(event="$pageview")], + dateRange=InsightDateRange(date_from="2024-01-01", date_to="2024-01-07"), + # breakdownFilter=BreakdownFilter(breakdown="$", breakdown_type=BreakdownType.PERSON), + ) + insight_actors_query = InsightActorsQuery( + source=source_query, + day="2024-01-01", + modifiers=self.modifiers, + ) + actors_query = ActorsQuery( + source=insight_actors_query, + offset=0, + select=[ + "actor", + "created_at", + "event_count", + # "matched_recordings", + ], + orderBy=["event_count DESC"], + modifiers=self.modifiers, + ) + query_runner = ActorsQueryRunner(query=actors_query, team=self.team) + response = execute_hogql_query(query_runner.to_query(), self.team, modifiers=self.modifiers) + assert response.clickhouse + self.assertNotIn("where_optimization", response.clickhouse) diff --git a/posthog/hogql/test/__snapshots__/test_query.ambr b/posthog/hogql/test/__snapshots__/test_query.ambr index 96bfad37a5a50..d41d6417cdbd4 100644 --- a/posthog/hogql/test/__snapshots__/test_query.ambr +++ b/posthog/hogql/test/__snapshots__/test_query.ambr @@ -459,16 +459,15 @@ SELECT DISTINCT persons.properties___sneaky_mail AS sneaky_mail FROM ( - SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', '') AS properties___sneaky_mail, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_1)s), ''), 'null'), '^"|"$', '') AS properties___random_uuid + SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', ''), person.version) AS properties___sneaky_mail, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_1)s), ''), 'null'), '^"|"$', ''), person.version) AS properties___random_uuid, person.id AS id FROM person - WHERE and(equals(person.team_id, 420), ifNull(in(tuple(person.id, person.version), ( - SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 420) + WHERE and(equals(person.team_id, 420), in(id, ( + SELECT where_optimization.id AS id + FROM person AS where_optimization + WHERE and(equals(where_optimization.team_id, 420), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(where_optimization.properties, %(hogql_val_2)s), ''), 'null'), '^"|"$', ''), %(hogql_val_3)s), 0))))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, %(hogql_val_2)s), person.version), plus(now64(6, %(hogql_val_3)s), toIntervalDay(1))), 0)))), 0)) - SETTINGS optimize_aggregation_in_order=1) AS persons - WHERE ifNull(equals(persons.properties___random_uuid, %(hogql_val_4)s), 0) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, %(hogql_val_4)s), person.version), plus(now64(6, %(hogql_val_5)s), toIntervalDay(1))), 0))) AS persons + WHERE ifNull(equals(persons.properties___random_uuid, %(hogql_val_6)s), 0) LIMIT 100 SETTINGS readonly=2, max_execution_time=60, allow_experimental_object_type=1, format_csv_allow_double_quotes=0, max_ast_elements=4000000, max_expanded_ast_elements=4000000, max_bytes_before_external_group_by=0