From e2c45452401022b00285b21551ffaf35a114be33 Mon Sep 17 00:00:00 2001 From: Ruben Fiszel Date: Fri, 3 Mar 2023 17:34:08 +0100 Subject: [PATCH 1/4] fix(frontend): arginput + apppreview fixes --- .../lib/components/InputTransformForm.svelte | 2 - .../InputTransformSchemaForm.svelte | 114 ++++++++++++++++++ frontend/src/lib/components/SchemaForm.svelte | 114 +++++++++--------- .../apps/components/helpers/InputValue.svelte | 23 +++- .../components/apps/editor/AppPreview.svelte | 3 +- .../apps/editor/SubGridEditor.svelte | 2 + .../lib/components/apps/editor/appUtils.ts | 8 +- .../editor/contextPanel/ContextPanel.svelte | 2 +- .../InlineScriptEditor.svelte | 2 +- .../settingsPanel/ComponentPanel.svelte | 2 +- frontend/src/lib/components/apps/utils.ts | 43 +------ .../flows/content/FlowConstants.svelte | 4 +- .../flows/content/FlowModuleComponent.svelte | 4 +- frontend/src/types.d.ts | 2 +- 14 files changed, 208 insertions(+), 117 deletions(-) create mode 100644 frontend/src/lib/components/InputTransformSchemaForm.svelte diff --git a/frontend/src/lib/components/InputTransformForm.svelte b/frontend/src/lib/components/InputTransformForm.svelte index 3fb2317685..74ae5dd6a7 100644 --- a/frontend/src/lib/components/InputTransformForm.svelte +++ b/frontend/src/lib/components/InputTransformForm.svelte @@ -299,6 +299,4 @@ Not recognized input type {argName} {/if} -{:else} -

Argument at {argName} is undefined

{/if} diff --git a/frontend/src/lib/components/InputTransformSchemaForm.svelte b/frontend/src/lib/components/InputTransformSchemaForm.svelte new file mode 100644 index 0000000000..b3cf89152f --- /dev/null +++ b/frontend/src/lib/components/InputTransformSchemaForm.svelte @@ -0,0 +1,114 @@ + + +
+ {#if keys.length > 0} + {#each keys as argName, i (argName)} + {#if (!filter || filter.includes(argName)) && Object.keys(schema.properties ?? {}).includes(argName)} +
+ +
+ {/if} + {/each} + {:else} +
No inputs
+ {/if} +
+ + { + if (pickForField) { + args[pickForField].value = '$var:' + path + } + }} + itemName="Variable" + extraField="path" + loadItems={async () => + (await VariableService.listVariable({ workspace: $workspaceStore ?? '' })).map((x) => ({ + name: x.path, + ...x + }))} +> +
+ +
+
+ + diff --git a/frontend/src/lib/components/SchemaForm.svelte b/frontend/src/lib/components/SchemaForm.svelte index 61db77d490..12b75efc65 100644 --- a/frontend/src/lib/components/SchemaForm.svelte +++ b/frontend/src/lib/components/SchemaForm.svelte @@ -6,11 +6,9 @@ import { faPlus } from '@fortawesome/free-solid-svg-icons' import ArgInput from './ArgInput.svelte' import { Button } from './common' - import InputTransformForm from './InputTransformForm.svelte' import ItemPicker from './ItemPicker.svelte' import VariableEditor from './VariableEditor.svelte' - export let inputTransform = false export let schema: Schema export let args: Record = {} export let disabledArgs: string[] = [] @@ -18,16 +16,12 @@ export let editableSchema = false export let isValid: boolean = true - export let extraLib: string = 'missing extraLib' export let autofocus = false - export let previousModuleId: string | undefined = undefined export let shouldHideNoInputs: boolean = false export let compact = false export let password: string | undefined = undefined export let noVariablePicker = false - export let filter: string[] | undefined = undefined - export let noDynamicToggle = false export let flexWrap = false export let noDelete = false @@ -42,17 +36,19 @@ } function removeExtraKey() { + const nargs = {} Object.keys(args ?? {}).forEach((key) => { - if (!keys.includes(key)) { - delete args[key] - delete inputCheck[key] + if (keys.includes(key)) { + nargs[key] = args[key] } }) + args = nargs } let pickForField: string | undefined let itemPicker: ItemPicker | undefined = undefined let variableEditor: VariableEditor | undefined = undefined + let keys: string[] = [] $: { let lkeys = Object.keys(schema?.properties ?? {}) @@ -68,48 +64,60 @@
{#if keys.length > 0} {#each keys as argName, i (argName)} - {#if (!filter || filter.includes(argName)) && Object.keys(schema.properties ?? {}).includes(argName)} + {#if Object.keys(schema.properties ?? {}).includes(argName)}
- {#if inputTransform} - - {:else if typeof args == 'object' && schema?.properties[argName]} - - {:else} - Expected argument to be an object, got {JSON.stringify(args)} instead + {#if typeof args == 'object' && schema?.properties[argName]} + {#if editableSchema} + + {:else} + + {/if} {/if}
{/if} @@ -124,11 +132,7 @@ bind:this={itemPicker} pickCallback={(path, _) => { if (pickForField) { - if (inputTransform) { - args[pickForField].value = '$var:' + path - } else { - args[pickForField] = '$var:' + path - } + args[pickForField] = '$var:' + path } }} itemName="Variable" diff --git a/frontend/src/lib/components/apps/components/helpers/InputValue.svelte b/frontend/src/lib/components/apps/components/helpers/InputValue.svelte index 86b476867d..d2c83342f9 100644 --- a/frontend/src/lib/components/apps/components/helpers/InputValue.svelte +++ b/frontend/src/lib/components/apps/components/helpers/InputValue.svelte @@ -23,12 +23,26 @@ $: state = $worldStore?.state - $: lastInput && $worldStore && handleConnection() - $: lastInput && lastInput.type == 'template' && $state && (value = getValue(lastInput)) - $: lastInput && lastInput.type == 'eval' && $state && (value = evalExpr(lastInput)) + let timeout: NodeJS.Timeout | undefined = undefined + const debounce_ms = 50 + function debounce(cb: () => void) { + if (timeout) { + clearTimeout(timeout) + } + timeout = setTimeout(cb, debounce_ms) + } + + $: lastInput && $worldStore && debounce(handleConnection) + $: lastInput && + lastInput.type == 'template' && + $state && + debounce(() => (value = getValue(lastInput))) + $: lastInput && + lastInput.type == 'eval' && + $state && + debounce(() => (value = evalExpr(lastInput))) function handleConnection() { - // console.log('handle connection', id, lastInput) if (lastInput.type === 'connected') { $worldStore?.connect(lastInput, onValueChange) } else if (lastInput.type === 'static' || lastInput.type == 'template') { @@ -108,6 +122,7 @@ } function onValueChange(newValue: any): void { + console.log('newValue', newValue, id) if (lastInput.type === 'connected' && newValue !== undefined && newValue !== null) { const { connection } = lastInput diff --git a/frontend/src/lib/components/apps/editor/AppPreview.svelte b/frontend/src/lib/components/apps/editor/AppPreview.svelte index 09d2778a3e..c55a016ea9 100644 --- a/frontend/src/lib/components/apps/editor/AppPreview.svelte +++ b/frontend/src/lib/components/apps/editor/AppPreview.svelte @@ -72,7 +72,7 @@ mounted = true }) - $: mounted && ($worldStore = buildWorld($staticOutputs, undefined, context)) + $: mounted && ($worldStore = buildWorld($staticOutputs, $worldStore, context)) $: width = $breakpoint === 'sm' ? 'max-w-[640px]' : 'w-full ' $: lockedClasses = isLocked ? '!max-h-[400px] overflow-hidden pointer-events-none' : '' @@ -94,7 +94,6 @@ {#if isLocked}
(isLocked = false)} class="absolute inset-0 center-center bg-black/20 z-50 backdrop-blur-[1px] cursor-pointer" > diff --git a/frontend/src/lib/components/apps/editor/SubGridEditor.svelte b/frontend/src/lib/components/apps/editor/SubGridEditor.svelte index 0fa61ad97e..af5dcfdd9f 100644 --- a/frontend/src/lib/components/apps/editor/SubGridEditor.svelte +++ b/frontend/src/lib/components/apps/editor/SubGridEditor.svelte @@ -64,6 +64,8 @@ // @ts-ignore let container + + // $: containerHeight = subGrid.map((item) => columnConfiguration.map((c) => item[c[1]].h))
-
+
-
+
{#if name !== undefined} diff --git a/frontend/src/lib/components/apps/editor/settingsPanel/ComponentPanel.svelte b/frontend/src/lib/components/apps/editor/settingsPanel/ComponentPanel.svelte index 9f38100b1d..e480092455 100644 --- a/frontend/src/lib/components/apps/editor/settingsPanel/ComponentPanel.svelte +++ b/frontend/src/lib/components/apps/editor/settingsPanel/ComponentPanel.svelte @@ -191,7 +191,7 @@
{#if viewCssOptions} -
+
{#each Object.keys(component.customCss ?? {}) as name} {#if component?.customCss?.[name]}
diff --git a/frontend/src/lib/components/apps/utils.ts b/frontend/src/lib/components/apps/utils.ts index a1fcf1efc9..e01a5abb44 100644 --- a/frontend/src/lib/components/apps/utils.ts +++ b/frontend/src/lib/components/apps/utils.ts @@ -4,13 +4,11 @@ import { inferArgs } from '$lib/infer' import { emptySchema } from '$lib/utils' import type { AppComponent } from './editor/component' import type { App, ComponentCssProperty, ComponentCustomCSS, GridItem } from './types' -import { getRecommendedDimensionsByComponent } from './editor/component' -import { gridColumns } from './gridUtils' -import gridHelp from '@windmill-labs/svelte-grid/src/utils/helper' import { twMerge } from 'tailwind-merge' import type { AppInput, InputType, ResultAppInput, StaticAppInput } from './inputType' import type { Output } from './rx' import { getNextId } from '../flows/flowStateUtils' +import { createNewGridItem } from './editor/appUtils' export function allItems( grid: GridItem[], @@ -283,45 +281,6 @@ export function insertNewGridItem( return root } -// The grid is needed to find a space for the new component -export function createNewGridItem(grid: GridItem[], id: string, data: AppComponent): GridItem { - const appComponent = data - - appComponent.id = id - - const newComponent = { - fixed: false, - resizable: true, - draggable: true, - customDragger: false, - customResizer: false, - x: 0, - y: 0 - } - - let newData: AppComponent = JSON.parse(JSON.stringify(appComponent)) - - const newItem: GridItem = { - data: newData, - id: id - } - - gridColumns.forEach((column) => { - const rec = getRecommendedDimensionsByComponent(appComponent.type, column) - - newItem[column] = { - ...newComponent, - min: { w: 1, h: 1 }, - max: { w: column, h: 100 }, - w: rec.w, - h: rec.h - } - const position = gridHelp.findSpace(newItem, grid, column) as { x: number; y: number } - newItem[column] = { ...newItem[column], ...position } - }) - - return newItem -} function recursiveGetIds(gridItem: GridItem): string[] { const subGrids = gridItem.data.subGrids ?? [] diff --git a/frontend/src/lib/components/flows/content/FlowConstants.svelte b/frontend/src/lib/components/flows/content/FlowConstants.svelte index 17eb3e5561..c61fb5856c 100644 --- a/frontend/src/lib/components/flows/content/FlowConstants.svelte +++ b/frontend/src/lib/components/flows/content/FlowConstants.svelte @@ -9,6 +9,7 @@ import type { PropPickerWrapperContext } from '../propPicker/PropPickerWrapper.svelte' import { writable } from 'svelte/store' import Toggle from '../../Toggle.svelte' + import InputTransformSchemaForm from '$lib/components/InputTransformSchemaForm.svelte' let hideOptional = false @@ -75,9 +76,8 @@ {m.id} - ('FlowEditorContext') @@ -225,9 +226,8 @@ pickableProperties={stepPropPicker.pickableProperties} error={failureModule} > - & { data: AppComponent } } } - export default class Grid extends SvelteComponentTyped, {}, Slots> {} + export default class Grid extends SvelteComponentTyped, {}, Slots> { } } declare module '@windmill-labs/svelte-grid/build/helper/index.mjs' { From b11a5a2df6d55f5b9b1d7a650550279e4cdeefdb Mon Sep 17 00:00:00 2001 From: Ruben Fiszel Date: Fri, 3 Mar 2023 18:00:09 +0100 Subject: [PATCH 2/4] only bind the staticoutputs of the first row --- .../components/display/table/AppTable.svelte | 32 +++++++++++++------ 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/frontend/src/lib/components/apps/components/display/table/AppTable.svelte b/frontend/src/lib/components/apps/components/display/table/AppTable.svelte index 3c71e9f2ce..79e66113be 100644 --- a/frontend/src/lib/components/apps/components/display/table/AppTable.svelte +++ b/frontend/src/lib/components/apps/components/display/table/AppTable.svelte @@ -242,16 +242,28 @@ toggleRow(row, rowIndex)}>
{#each actionButtons as actionButton, actionIndex (actionIndex)} - { - toggleRow(row, rowIndex) - }} - extraQueryParams={{ row: row.original }} - bind:componentInput={actionButton.componentInput} - bind:staticOutputs={$staticOutputsStore[actionButton.id]} - /> + {#if rowIndex == 0} + { + toggleRow(row, rowIndex) + }} + extraQueryParams={{ row: row.original }} + bind:componentInput={actionButton.componentInput} + bind:staticOutputs={$staticOutputsStore[actionButton.id]} + /> + {:else} + { + toggleRow(row, rowIndex) + }} + extraQueryParams={{ row: row.original }} + bind:componentInput={actionButton.componentInput} + /> + {/if} {/each}
From f3232062c33938a82a6a7707b0f7b1160cc9f2c8 Mon Sep 17 00:00:00 2001 From: Ruben Fiszel Date: Fri, 3 Mar 2023 22:32:35 +0100 Subject: [PATCH 3/4] make tailwind inputs class configurable --- .../apps/components/inputs/AppMultiSelect.svelte | 6 +++++- .../apps/components/inputs/AppNumberInput.svelte | 6 +++++- .../components/apps/components/inputs/AppSelect.svelte | 10 +++++++--- .../apps/components/inputs/AppTextInput.svelte | 5 ++++- .../components/inputs/currency/AppCurrencyInput.svelte | 7 ++++--- frontend/tailwind.config.cjs | 3 ++- 6 files changed, 27 insertions(+), 10 deletions(-) diff --git a/frontend/src/lib/components/apps/components/inputs/AppMultiSelect.svelte b/frontend/src/lib/components/apps/components/inputs/AppMultiSelect.svelte index e52075d53b..faf466ef8c 100644 --- a/frontend/src/lib/components/apps/components/inputs/AppMultiSelect.svelte +++ b/frontend/src/lib/components/apps/components/inputs/AppMultiSelect.svelte @@ -61,12 +61,16 @@
{#if !value || Array.isArray(value)} +
diff --git a/frontend/src/lib/components/apps/components/inputs/AppSelect.svelte b/frontend/src/lib/components/apps/components/inputs/AppSelect.svelte index b2ce91e7d5..67770cbab8 100644 --- a/frontend/src/lib/components/apps/components/inputs/AppSelect.svelte +++ b/frontend/src/lib/components/apps/components/inputs/AppSelect.svelte @@ -9,6 +9,7 @@ import InputValue from '../helpers/InputValue.svelte' import { SELECT_INPUT_DEFAULT_STYLE } from '../../../../defaults' import { twMerge } from 'tailwind-merge' + import Portal from 'svelte-portal' export const staticOutputs: string[] = ['result'] export let id: string diff --git a/frontend/src/lib/components/common/menu/Menu.svelte b/frontend/src/lib/components/common/menu/Menu.svelte index 57b43396ec..880ac69bac 100644 --- a/frontend/src/lib/components/common/menu/Menu.svelte +++ b/frontend/src/lib/components/common/menu/Menu.svelte @@ -7,10 +7,10 @@ import { onMount } from 'svelte' export let noMinW = false - let show = false + export let show = false let menu: HTMLDivElement - type Alignment = 'start' | 'end' + type Alignment = 'start' | 'end' | 'center' type Side = 'top' | 'bottom' type Placement = `${Side}-${Alignment}` @@ -45,6 +45,7 @@ }) const placementsClasses = { + 'bottom-center': 'origin-top-left left-1/2 transform -translate-x-1/2', 'bottom-start': 'origin-top-left left-0', 'bottom-end': 'origin-top-right right-0', 'top-start': 'origin-bottom-left left-0 bottom-0', @@ -52,7 +53,7 @@ } -
+
{ diff --git a/frontend/src/lib/components/flows/FlowEditor.svelte b/frontend/src/lib/components/flows/FlowEditor.svelte index 82276142a0..213161c4b1 100644 --- a/frontend/src/lib/components/flows/FlowEditor.svelte +++ b/frontend/src/lib/components/flows/FlowEditor.svelte @@ -5,14 +5,18 @@ import { flowStore } from './flowStore' import WindmillIcon from '../icons/WindmillIcon.svelte' import { Skeleton } from '../common' + import { getContext } from 'svelte' + import type { FlowEditorContext } from './types' export let initialPath: string export let loading: boolean + + let size = 50
- +
{#if loading}
@@ -21,11 +25,11 @@ {/each}
{:else if $flowStore.value.modules} - + {/if}
- + {#if loading}
diff --git a/frontend/src/lib/components/flows/common/FlowCardHeader.svelte b/frontend/src/lib/components/flows/common/FlowCardHeader.svelte index 7b99248c16..13994016ce 100644 --- a/frontend/src/lib/components/flows/common/FlowCardHeader.svelte +++ b/frontend/src/lib/components/flows/common/FlowCardHeader.svelte @@ -34,7 +34,7 @@
{#if flowModule} diff --git a/frontend/src/lib/components/flows/content/FlowBranchesAllWrapper.svelte b/frontend/src/lib/components/flows/content/FlowBranchesAllWrapper.svelte index 8ca0a2abcb..10c0f98252 100644 --- a/frontend/src/lib/components/flows/content/FlowBranchesAllWrapper.svelte +++ b/frontend/src/lib/components/flows/content/FlowBranchesAllWrapper.svelte @@ -33,7 +33,7 @@ >
{#each value.branches as branch, i} -
+
diff --git a/frontend/src/lib/components/flows/content/FlowEditorPanel.svelte b/frontend/src/lib/components/flows/content/FlowEditorPanel.svelte index f7b1ef1ee0..d4bec32570 100644 --- a/frontend/src/lib/components/flows/content/FlowEditorPanel.svelte +++ b/frontend/src/lib/components/flows/content/FlowEditorPanel.svelte @@ -16,7 +16,7 @@ {#if $selectedId?.startsWith('settings')} -{:else if $selectedId === 'inputs'} +{:else if $selectedId === 'Input'} {:else if $selectedId === 'constants'} diff --git a/frontend/src/lib/components/flows/content/FlowModuleWrapper.svelte b/frontend/src/lib/components/flows/content/FlowModuleWrapper.svelte index 713ae451c8..302a601eb2 100644 --- a/frontend/src/lib/components/flows/content/FlowModuleWrapper.svelte +++ b/frontend/src/lib/components/flows/content/FlowModuleWrapper.svelte @@ -40,12 +40,7 @@ {:else if flowModule.value.type === 'identity'} {#if $selectedId == 'failure'} - If defined, the error handler will take as input, the result of the step that errored (which - has its error in the 'error field'). -
-
- Steps are retried until they succeed, or until the maximum number of retries defined for that - spec is reached, at which point the error handler is called. + If defined, the error handler will take the error as input.
{/if} diff --git a/frontend/src/lib/components/flows/content/FlowSettings.svelte b/frontend/src/lib/components/flows/content/FlowSettings.svelte index 832f18f7fd..ecbbd479dc 100644 --- a/frontend/src/lib/components/flows/content/FlowSettings.svelte +++ b/frontend/src/lib/components/flows/content/FlowSettings.svelte @@ -10,7 +10,6 @@ import FlowSchedules from './FlowSchedules.svelte' import Toggle from '$lib/components/Toggle.svelte' import { Alert } from '$lib/components/common' - import { FlowGraph } from '$lib/components/graph' import { getContext } from 'svelte' import type { FlowEditorContext } from '../types' import autosize from 'svelte-autosize' @@ -25,8 +24,6 @@ export let initialPath: string - let topHeight = 0 - $: url = `${$page.url.hostname}/api/w/${$workspaceStore}/jobs/run/f/${$flowStore?.path}` @@ -37,7 +34,6 @@ Metadata Schedule Shared Directory - Graph @@ -89,18 +85,22 @@
  • -
    - 2. Use a trigger script and schedule this flow to run as frequently as - needed and compare a state persisted in Windmill to the state of the - external system. If a difference is detected, then the rest of the flow is - triggered. Oftentimes, the second step of a flow is a for-loop that will - iterate over every elements. When using a trigger, a default schedule will - be created. - static button +
    +

    + 2. Use a trigger script and schedule this flow to run as frequently as + needed and compare a state persisted in Windmill to the state of the + external system. If a difference is detected, then the rest of the flow is + triggered. Oftentimes, the second step of a flow is a for-loop that will + iterate over every elements. When using a trigger, a default schedule will + be created. +

    +
    + static button +
  • @@ -132,26 +132,6 @@ }} />
    - -
    - {#if $flowStore.value.modules} - { - if (e.detail.id) { - $selectedId = e.detail.id - } - }} - minHeight={topHeight} - modules={$flowStore.value.modules} - failureModule={$flowStore.value.failure_module} - notSelectable - /> - {/if} -
    -
    diff --git a/frontend/src/lib/components/flows/map/FlowBranchAllMap.svelte b/frontend/src/lib/components/flows/map/FlowBranchAllMap.svelte deleted file mode 100644 index 2ab7e00e08..0000000000 --- a/frontend/src/lib/components/flows/map/FlowBranchAllMap.svelte +++ /dev/null @@ -1,110 +0,0 @@ - - -{#if module.value.type === 'branchall'} -
    -
    - {#each module.value.branches ?? [] as branch, branchIndex (branchIndex)} - -
    -
    { - selectedBranch = branchIndex - select(`${module.id}-branch-${branchIndex}`) - }} - class={classNames( - `border-b ${ - branchIndex > 0 ? 'border-t' : '' - } w-full p-2 bg-white border-gray-500 text-sm cursor-pointer flex items-center relative module`, - $selectedId === `${module.id}-branch-${branchIndex}` - ? 'outline outline-2 outline-slate-900' - : '' - )} - > - - - {branch.summary || `Branch ${branchIndex}`} - - -
    - -
    - -
    -
    - {/each} -
    - -
    -
    -
    -{/if} - - diff --git a/frontend/src/lib/components/flows/map/FlowBranchOneMap.svelte b/frontend/src/lib/components/flows/map/FlowBranchOneMap.svelte deleted file mode 100644 index 3cf9b1703c..0000000000 --- a/frontend/src/lib/components/flows/map/FlowBranchOneMap.svelte +++ /dev/null @@ -1,134 +0,0 @@ - - -{#if module.value.type === 'branchone'} -
    -
    - -
    { - selectedBranch = 0 - select(`${module.id}-branch-default`) - }} - class={classNames( - `border-b w-full p-2 bg-white border-gray-500 text-sm cursor-pointer flex items-center relative module`, - $selectedId === `${module.id}-branch-default` - ? 'outline outline-2 outline-slate-900' - : '' - )} - > - - - Default branch - -
    -
    - -
    - - {#each module.value.branches ?? [] as branch, branchIndex (branchIndex)} - -
    -
    { - selectedBranch = branchIndex + 1 - select(`${module.id}-branch-${branchIndex}`) - }} - class={classNames( - `border-b border-t w-full p-2 bg-white border-gray-500 text-sm cursor-pointer flex items-center relative module`, - $selectedId === `${module.id}-branch-${branchIndex}` - ? 'outline outline-2 outline-slate-900' - : '' - )} - > - - - {branch.summary || `Branch ${branchIndex}`} - - -
    - -
    - -
    -
    - {/each} -
    - -
    -
    -
    -{/if} - - diff --git a/frontend/src/lib/components/flows/map/FlowConstantsItem.svelte b/frontend/src/lib/components/flows/map/FlowConstantsItem.svelte index b78f36f138..3f69e8de70 100644 --- a/frontend/src/lib/components/flows/map/FlowConstantsItem.svelte +++ b/frontend/src/lib/components/flows/map/FlowConstantsItem.svelte @@ -4,7 +4,7 @@ import { classNames } from '$lib/utils' import { DollarSign } from 'lucide-svelte' - const { select, selectedId } = getContext('FlowEditorContext') + const { selectedId } = getContext('FlowEditorContext') $: settingsClass = classNames( 'border w-full rounded-sm p-2 bg-white border-gray-400 text-sm cursor-pointer flex items-center', @@ -12,7 +12,7 @@ ) - - {/if} -
    + {#if deletable} + + {/if}
    diff --git a/frontend/src/lib/components/flows/map/FlowModuleSchemaMap.svelte b/frontend/src/lib/components/flows/map/FlowModuleSchemaMap.svelte index a209f014ac..cdb5e35c3c 100644 --- a/frontend/src/lib/components/flows/map/FlowModuleSchemaMap.svelte +++ b/frontend/src/lib/components/flows/map/FlowModuleSchemaMap.svelte @@ -6,167 +6,220 @@ createBranches, createLoop, deleteFlowStateById, - emptyModule, - idMutex + emptyModule } from '$lib/components/flows/flowStateUtils' - import { flowStateStore, type FlowModuleState } from '../flowState' + import { flowStateStore } from '../flowState' import type { FlowModule } from '$lib/gen' - import FlowErrorHandlerItem from './FlowErrorHandlerItem.svelte' import RemoveStepConfirmationModal from '../content/RemoveStepConfirmationModal.svelte' import { emptyFlowModuleState } from '../utils' - import MapItem from './MapItem.svelte' import FlowSettingsItem from './FlowSettingsItem.svelte' - import FlowInputsItem from './FlowInputsItem.svelte' - import InsertModuleButton from './InsertModuleButton.svelte' - import { slide } from 'svelte/transition' import FlowConstantsItem from './FlowConstantsItem.svelte' - export let root: boolean = false - export let modules: FlowModule[] | undefined - export let parentType: 'flow' | 'forloop' | 'branchall' | 'branchone' | undefined = undefined + import { dfs, flowStore } from '../flowStore' + import { FlowGraph } from '$lib/components/graph' + import FlowErrorHandlerItem from './FlowErrorHandlerItem.svelte' - let indexToRemove: number | undefined = undefined - const { select, selectedId } = getContext('FlowEditorContext') + export let modules: FlowModule[] | undefined + export let sidebarSize: number | undefined = undefined + + let idToRemove: string | undefined = undefined + + const { selectedId } = getContext('FlowEditorContext') async function insertNewModuleAtIndex( + modules: FlowModule[], index: number, kind: 'script' | 'forloop' | 'branchone' | 'branchall' | 'flow' | 'trigger' | 'approval' | 'end' - ): Promise { - await idMutex.runExclusive(async () => { - var module = emptyModule(kind == 'flow') - var state = emptyFlowModuleState() - if (kind == 'forloop') { - ;[module, state] = await createLoop(module.id) - } else if (kind == 'branchone') { - ;[module, state] = await createBranches(module.id) - } else if (kind == 'branchall') { - ;[module, state] = await createBranchAll(module.id) + ): Promise { + var module = emptyModule(kind == 'flow') + var state = emptyFlowModuleState() + if (kind == 'forloop') { + ;[module, state] = await createLoop(module.id) + } else if (kind == 'branchone') { + ;[module, state] = await createBranches(module.id) + } else if (kind == 'branchall') { + ;[module, state] = await createBranchAll(module.id) + } + $flowStateStore[module.id] = state + if (kind == 'trigger') { + module.summary = 'Trigger' + } else if (kind == 'approval') { + module.summary = 'Approval' + } else if (kind == 'end') { + module.summary = 'Terminate flow' + module.stop_after_if = { skip_if_stopped: false, expr: 'true' } + } + if (!modules) return [module] + modules.splice(index, 0, module) + return modules + } + + function removeAtId(modules: FlowModule[], id: string): FlowModule[] { + const index = modules.findIndex((mod) => mod.id == id) + if (index != -1) { + const [removed] = modules.splice(index, 1) + const leaves = dfs([removed], (mod) => mod.id) + leaves.forEach((leafId: string) => deleteFlowStateById(leafId)) + return modules + } + return modules.map((mod) => { + if (mod.value.type == 'forloopflow') { + mod.value.modules = removeAtId(mod.value.modules, id) + } else if (mod.value.type == 'branchall') { + mod.value.branches = mod.value.branches.map((branch) => { + branch.modules = removeAtId(branch.modules, id) + return branch + }) + } else if (mod.value.type == 'branchone') { + mod.value.branches = mod.value.branches.map((branch) => { + branch.modules = removeAtId(branch.modules, id) + return branch + }) + mod.value.default = removeAtId(mod.value.default, id) } - const flowModule = module - if (!modules) return - modules.splice(index, 0, flowModule) - modules = modules - $flowStateStore[flowModule.id] = state - if (kind == 'trigger') { - flowModule.summary = 'Trigger' - } else if (kind == 'approval') { - flowModule.summary = 'Approval' - } else if (kind == 'end') { - flowModule.summary = 'Terminate flow' - flowModule.stop_after_if = { skip_if_stopped: false, expr: 'true' } - } - select(flowModule.id) + return mod }) } - function removeAtIndex(index: number): void { - if (!modules) return - const [removedModule] = modules.splice(index, 1) - modules = modules + // async function insertModule( + // modules: FlowModule[], + // id: string, + // kind: string, + // where: 'before' | 'after' + // ): Promise { + // console.log(modules, id, kind, where) + // const index = modules.findIndex((mod) => mod.id == id) + // if (index != -1) { + // console.log('INSERTING', modules, index) + // return await insertNewModuleAtIndex(modules, index + (where == 'after' ? 1 : 0), kind as any) + // } + // return await Promise.all( + // modules.map(async (mod) => { + // if (mod.value.type == 'forloopflow') { + // mod.value.modules = await insertModule(mod.value.modules, id, kind, where) + // } else if (mod.value.type == 'branchall') { + // mod.value.branches = await Promise.all( + // mod.value.branches.map(async (branch) => { + // branch.modules = await insertModule(branch.modules, id, kind, where) + // return branch + // }) + // ) + // } else if (mod.value.type == 'branchone') { + // mod.value.branches = await Promismod.value.branches.map((branch) => { + // branch.modules = await insertModule(branch.modules, id, kind, where) + // return branch + // }) + // mod.value.default = await insertModule(mod.value.default, id, kind, where) + // } + // return mod + // }) + // ) + // } - const leaves = findLeaves(removedModule) + $: confirmationModalOpen = idToRemove !== undefined - leaves.forEach((leafId: string) => deleteFlowStateById(leafId)) - select('settings-graph') + $: sidebarMode == 'graph' ? (sidebarSize = 40) : (sidebarSize = 20) + + let sidebarMode: 'list' | 'graph' = 'graph' + + let minHeight = 0 + + function selectNextId(id: any) { + if (modules) { + let allIds = dfs(modules, (mod) => mod.id) + if (allIds.length > 1) { + const idx = allIds.indexOf(id) + $selectedId = idx == 0 ? allIds[0] : allIds[idx - 1] + } else { + $selectedId = 'settings-metadata' + } + } + } + async function addBranch(module: FlowModule) { + if (module.value.type === 'branchone' || module.value.type === 'branchall') { + module.value.branches.splice(module.value.branches.length, 0, { + summary: '', + expr: 'false', + modules: [] + }) + } } - function findLeaves(flowModule: FlowModule): string[] { - const id = flowModule.id - - if (flowModule.value.type === 'forloopflow') { - return [id, ...flowModule.value.modules.map((fm) => findLeaves(fm)).flat()] + function removeBranch(module: FlowModule, index: number) { + if (module.value.type === 'branchone' || module.value.type === 'branchall') { + const leaves = dfs(module.value.branches[index].modules, (mod) => mod.id) + leaves.forEach((leafId: string) => deleteFlowStateById(leafId)) + module.value.branches.splice(index, 1) } - - if (flowModule.value.type === 'branchall') { - return [ - id, - ...flowModule.value.branches - .map((branch) => branch.modules.map((mod) => findLeaves(mod)).flat()) - .flat() - ] - } - - if (flowModule.value.type === 'branchone') { - return [ - id, - ...flowModule.value.branches - .map((branch) => { - return branch.modules.map((mod) => findLeaves(mod)).flat() - }) - .flat(), - ...flowModule.value.default.map((mod) => findLeaves(mod)).flat() - ] - } - - return [id] } - - $: confirmationModalOpen = indexToRemove !== undefined
    - {#if root} -
    - - -
    - {/if} -
      - {#if root} -
    • - -
    • - {/if} +
      + + +
      - {#if modules} - {#each modules as mod, index (mod.id ?? index)} -
      - { - if (event.detail.detail.shiftKey || mod.value.type === 'identity') { - removeAtIndex(index) - } else { - indexToRemove = index - } - }} - on:insert={(e) => { - insertNewModuleAtIndex(index, e.detail) - }} - /> -
      - {/each} - {/if} - {#if !modules || modules[modules?.length - 1]?.summary != 'Terminate flow'} - insertNewModuleAtIndex(modules?.length ?? 0, e.detail)} - /> - {:else} -
      - {/if} -
    - {#if root} -
    - -
    - {/if} +
    + { + let e = detail.detail + if (e.event.shiftKey || e.type == 'identity') { + selectNextId(e.id) + removeAtId($flowStore.value.modules, e.id) + $flowStore = $flowStore + } else { + idToRemove = e.id + } + }} + on:insert={async ({ detail }) => { + if (detail.modules) { + await insertNewModuleAtIndex(detail.modules, detail.index ?? 0, detail.detail) + $flowStore = $flowStore + $selectedId = detail.modules[detail.index ?? 0].id + } + }} + on:newBranch={async ({ detail }) => { + if (detail.module) { + await addBranch(detail.module) + $flowStore = $flowStore + } + }} + on:deleteBranch={async ({ detail }) => { + if (detail.module) { + await removeBranch(detail.module, detail.index) + $flowStore = $flowStore + $selectedId = detail.module.id + } + }} + /> +
    +
    + +
    { - indexToRemove = undefined + idToRemove = undefined }} on:confirmed={() => { - if (indexToRemove !== undefined) { - removeAtIndex(indexToRemove) - indexToRemove = undefined + if (idToRemove !== undefined) { + selectNextId(idToRemove) + removeAtId($flowStore.value.modules, idToRemove) + $flowStore = $flowStore + idToRemove = undefined } - $selectedId = 'settings-graph' }} /> diff --git a/frontend/src/lib/components/flows/map/FlowSettingsItem.svelte b/frontend/src/lib/components/flows/map/FlowSettingsItem.svelte index 12c6e193a5..2d44fad52f 100644 --- a/frontend/src/lib/components/flows/map/FlowSettingsItem.svelte +++ b/frontend/src/lib/components/flows/map/FlowSettingsItem.svelte @@ -6,7 +6,7 @@ import { flowStore } from '../flowStore' import { SlidersHorizontal } from 'lucide-svelte' - const { select, selectedId } = getContext('FlowEditorContext') + const { selectedId } = getContext('FlowEditorContext') $: settingsClass = classNames( 'border w-full rounded-sm p-2 bg-white border-gray-400 text-sm cursor-pointer flex items-center', @@ -16,9 +16,11 @@ ) - -
    +
    {#if trigger} {/if}
    + + {/if} + {#if insertable && insertableEnd} +
    + { + dispatch('insert', { modules, index: idx + 1, detail: e.detail }) + }} + /> +
    + {/if} + + {#if insertable && branchable} +
    + +
    {/if} {/if} - - diff --git a/frontend/src/lib/components/flows/map/VirtualItem.svelte b/frontend/src/lib/components/flows/map/VirtualItem.svelte new file mode 100644 index 0000000000..dd2375fac3 --- /dev/null +++ b/frontend/src/lib/components/flows/map/VirtualItem.svelte @@ -0,0 +1,98 @@ + + +{#if insertable && deleteBranch} +
    + +
    +{/if} + +
    { + if (selectable) { + if (id) { + dispatch('select', id) + } else { + dispatch('select', label) + } + } + }} +> +
    + {#if $$slots.icon} + + + {/if} +
    +
    {label}
    +
    + {#if id} + {id} + {/if} +
    +
    +
    + +{#if insertable && modules} +
    + { + if (modules) { + dispatch('insert', { modules, index, detail: e.detail }) + } + }} + /> +
    +{/if} diff --git a/frontend/src/lib/components/flows/types.ts b/frontend/src/lib/components/flows/types.ts index 5f6594560b..924bc2375d 100644 --- a/frontend/src/lib/components/flows/types.ts +++ b/frontend/src/lib/components/flows/types.ts @@ -4,7 +4,6 @@ import type { Schedule } from './scheduleUtils' export type FlowEditorContext = { selectedId: Writable - select: (id: string) => void schedule: Writable, previewArgs: Writable>, scriptEditorDrawer: Writable diff --git a/frontend/src/lib/components/graph/FlowGraph.svelte b/frontend/src/lib/components/graph/FlowGraph.svelte index f948525b56..bb5122d20a 100644 --- a/frontend/src/lib/components/graph/FlowGraph.svelte +++ b/frontend/src/lib/components/graph/FlowGraph.svelte @@ -1,8 +1,6 @@
    {#if width && height} - + {#key width} + + {/key} {/if}
    diff --git a/frontend/src/lib/components/graph/model.ts b/frontend/src/lib/components/graph/model.ts index 1d0ea87b97..a77f58fd9e 100644 --- a/frontend/src/lib/components/graph/model.ts +++ b/frontend/src/lib/components/graph/model.ts @@ -1,40 +1,9 @@ import type { FlowStatusModule } from "$lib/gen" +import type { UserNodeType } from "./svelvet/types"; -export interface SvelvetNode { - id: number; - position: { x: number, y: number }; - data: T; - width: number; - height: number; - bgColor?: string; - fontSize?: number; - borderColor?: string; - parentNode?: number; - childNodes?: number[]; - borderRadius?: number; - textColor?: string; - clickCallback?: Function; - image?: boolean; - src?: string; - sourcePosition?: 'left' | 'right' | 'top' | 'bottom'; - targetPosition?: 'left' | 'right' | 'top' | 'bottom'; -} -export interface Edge { - id: string; - source: number; - target: number; - label?: string; - labelBgColor?: string; - labelTextColor?: string; - edgeColor?: string; - type?: string; - animate?: boolean; - noHandle?: boolean; - arrow?: boolean; -} export type ModuleHost = 'workspace' | 'inline' | 'hub' -export type Node = SvelvetNode & { parentIds: string[], edgeLabel?: string, host?: ModuleHost } +export type Node = UserNodeType & { parentIds: string[], edgeLabel?: string, host?: ModuleHost, type: 'node', loopDepth: number } export type Loop = { type: 'loop', @@ -43,6 +12,7 @@ export type Loop = { export type Branch = { node: Node, + nodeEnd: Node, type: 'branch', items: NestedNodes[] } @@ -64,7 +34,7 @@ export type GraphModuleState = { export type NestedNodes = GraphItem[] export function isNode(item: GraphItem | NestedNodes | undefined): item is Node { - return typeof item?.['id'] === 'number' + return item?.['type'] === 'node' } export function isLoop(item: GraphItem | NestedNodes | undefined): item is Loop { diff --git a/frontend/src/lib/components/graph/svelvet/LICENSE b/frontend/src/lib/components/graph/svelvet/LICENSE new file mode 100644 index 0000000000..73a46f09bf --- /dev/null +++ b/frontend/src/lib/components/graph/svelvet/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 OSLabs Beta + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/frontend/src/lib/components/graph/svelvet/collapsible/controllers/util.ts b/frontend/src/lib/components/graph/svelvet/collapsible/controllers/util.ts new file mode 100644 index 0000000000..a6f6c37167 --- /dev/null +++ b/frontend/src/lib/components/graph/svelvet/collapsible/controllers/util.ts @@ -0,0 +1,186 @@ +import type { + EdgeType, + NodeType, + ResizeNodeType, + StoreType, +} from '../../store/types/types'; +import type { UserEdgeType, UserNodeType } from '../../types/types'; +import { Collapsible } from '../models/Collapsible'; +import type { CollapsibleType } from '../types/types'; +import { get } from 'svelte/store'; +import type { AnchorType } from '../../edges/types/types'; +import { getAnchorById } from '../../edges/controllers/util'; +import { getAnchors } from '../../edges/controllers/util'; + +const pkStringGenerator = () => (Math.random() + 1).toString(36).substring(7); + +/* +Initializes store with array of Collapsible objects. You shoould only use this if you want the collapsible feature enabled. +*/ +export function populateCollapsibleStore( + store: StoreType, + userNodes: UserNodeType[], + userEdges: UserEdgeType[], + canvasId: string +) { + const newCollapsibleStore: CollapsibleType[] = []; + for (let userNode of userNodes) { + const collapsible = new Collapsible( + pkStringGenerator(), + userNode.id, + 0, + 'expanded' + ); + newCollapsibleStore.push(collapsible); + } + store.collapsibleStore.set(newCollapsibleStore); +} + +/* + +*/ +function incrementHideCount(store: StoreType, nodeId: string) { + const collapsibles = get(store.collapsibleStore); + for (let collapsible of collapsibles) + if (collapsible.nodeId === nodeId) collapsible.hideCount++; + store.collapsibleStore.set(collapsibles); +} + +// Given a nodeId, find ids of all connecting target nodes +function findTargets(store: StoreType, nodeId: string): string[] { + // get source anchors on the node + const anchors = getAnchors(store, { + nodeId: nodeId, + sourceOrTarget: 'source', + }); + + // get target anchors on other node, and record the node id + const targetNodeIds: string[] = []; + for (const anchor of anchors) { + const targetAnchorId = anchor.getOtherAnchorId(); + const targetAnchor = getAnchorById(store, targetAnchorId); + targetNodeIds.push(targetAnchor.nodeId); + } + return targetNodeIds; +} + +// traverses tree and increments hideCount +function traverseAndIncrement( + store: StoreType, + nodeId: string, + operation: 'increment' | 'decrement' +) { + const collapsibles = get(store.collapsibleStore); + recursiveTraverse(nodeId); + store.collapsibleStore.set(collapsibles); + + function recursiveTraverse(nId: string) { + for (const collapsible of collapsibles) { + if (collapsible.nodeId === nId) { + if (operation === 'increment') collapsible.hideCount++; + else collapsible.hideCount--; + const targetIds = findTargets(store, nId); + for (const targetId of targetIds) { + recursiveTraverse(targetId); + } + } + } + } +} + +function collapse(store: StoreType, nodeId: string) { + const targetNodeIds = findTargets(store, nodeId); + for (const targetNodeId of targetNodeIds) + traverseAndIncrement(store, targetNodeId, 'increment'); +} +function expand(store: StoreType, nodeId: string) { + const targetNodeIds = findTargets(store, nodeId); + for (const targetNodeId of targetNodeIds) + traverseAndIncrement(store, targetNodeId, 'decrement'); +} + +export function toggleExpandAndCollapse(store: StoreType, nodeId: string) { + const collapsibles = getCollapsibles(store, { nodeId: nodeId }); + if (collapsibles.length === 0) return; // when the collapsible feature is disabled, there will be no collapbsible objects + if (collapsibles.length > 1) + throw 'there should only be one collapsible object per node'; + const collapsible = collapsibles[0]; + if (collapsible.state === 'expanded') collapse(store, nodeId); + else expand(store, nodeId); + store.collapsibleStore.update((arr) => { + for (const c of arr) if (c.id === collapsible.id) c.toggleState(); + return [...arr]; + }); +} + +export function getCollapsibles( + store: StoreType, + filter?: { [key: string]: any } +) { + let collapsibles = Object.values(get(store.collapsibleStore)); + // filter the array of anchors for elements that match filter + // Example: if filter = {sourceOrTarget: 'source', positionX: 35} then we will + //return all anchors with sourceOrTarget = source AND poxitionX = 35 + if (filter !== undefined) { + collapsibles = collapsibles.filter((collapsible) => { + for (let filterKey in filter) { + const filterValue = filter[filterKey]; + if (collapsible[filterKey as keyof CollapsibleType] !== filterValue) + return false; + } + return true; + }); + } + // return list of anchors + return collapsibles; +} + +/* + This function is responsible for filtering nodes should be displayed based on Collapsible. + It also filters node-associated elements such as anchors, edges, etc. so that when you collapse a node, the + edges also hide. + There is a better way to implement this with foreign keys; when collapsing a node, you would also collapse any rows with a foreign key + linking to that node (like a cascading delete in SQL, but with hiding instead of deleting) +*/ +export function filterByCollapsible( + store: StoreType, + nodes: NodeType[], + resizeNodes: ResizeNodeType[], + anchors: AnchorType[], + edges: EdgeType[] +) { + // filter nodes for the collapsible nodes feature + const filteredNodes = nodes.filter((node) => { + const nodeId = node.id; + const collapssibleObj = get(store.collapsibleStore).find( + (e) => e.nodeId === nodeId + ); + if (collapssibleObj === undefined) return true; + return collapssibleObj.isHidden() === false; + }); + const filteredNodeIds = filteredNodes.map((e) => e.id); + // filter resizeNodes + const filteredResizeNodes = resizeNodes.filter((resizeNode) => + filteredNodeIds.includes(resizeNode.nodeId) + ); + const filteredAnchors = anchors.filter((selfAnchor) => { + const otherAnchorId = selfAnchor.getOtherAnchorId(); + const otherAnchor = get(store.anchorsStore)[otherAnchorId]; + + if ( + filteredNodeIds.includes(selfAnchor.nodeId) && + filteredNodeIds.includes(otherAnchor.nodeId) + ) + return true; + return false; + }); + const filteredEdgeIds = new Set(filteredAnchors.map((e) => e.edgeId)); + const filteredEdges = edges.filter((edge) => filteredEdgeIds.has(edge.id)); + + return { + filteredNodes, + filteredResizeNodes, + filteredAnchors, + filteredEdges, + }; +} diff --git a/frontend/src/lib/components/graph/svelvet/collapsible/models/Collapsible.ts b/frontend/src/lib/components/graph/svelvet/collapsible/models/Collapsible.ts new file mode 100644 index 0000000000..6dbd74e159 --- /dev/null +++ b/frontend/src/lib/components/graph/svelvet/collapsible/models/Collapsible.ts @@ -0,0 +1,26 @@ +/** + * This model implements functionality for nodes to expand and collapse their children + */ + +import type { CollapsibleType } from '../types/types'; + +/** Class that implements collapsible/expandable functionality for Node objects + * @param {string} id Unique string that serves as a primary key + * @param {string} nodeId Foreign key to a Node Object + */ +export class Collapsible implements CollapsibleType { + constructor( + public id: string, + public nodeId: string, + public hideCount: number, + public state: 'expanded' | 'collapsed' + ) {} + + isHidden() { + return this.hideCount > 0; + } + + toggleState() { + this.state = this.state === 'expanded' ? 'collapsed' : 'expanded'; + } +} diff --git a/frontend/src/lib/components/graph/svelvet/collapsible/types/types.ts b/frontend/src/lib/components/graph/svelvet/collapsible/types/types.ts new file mode 100644 index 0000000000..f9b76b0971 --- /dev/null +++ b/frontend/src/lib/components/graph/svelvet/collapsible/types/types.ts @@ -0,0 +1,8 @@ +export interface CollapsibleType { + id: string; + nodeId: string; + hideCount: number; + state: 'expanded' | 'collapsed'; + isHidden: Function; + toggleState: Function; +} diff --git a/frontend/src/lib/components/graph/svelvet/container/README.md b/frontend/src/lib/components/graph/svelvet/container/README.md new file mode 100644 index 0000000000..27a6c64fe7 --- /dev/null +++ b/frontend/src/lib/components/graph/svelvet/container/README.md @@ -0,0 +1,7 @@ +# Container + +This folder contains two containers: Svelvet and Canvas. + +## Svelvet.svelte + +Svelvet.svelte is the top level component diff --git a/frontend/src/lib/components/graph/svelvet/container/controllers/middleware.ts b/frontend/src/lib/components/graph/svelvet/container/controllers/middleware.ts new file mode 100644 index 0000000000..70385bffad --- /dev/null +++ b/frontend/src/lib/components/graph/svelvet/container/controllers/middleware.ts @@ -0,0 +1,120 @@ +/* +This file contains "middleware" functions that sanitize user input (UserNodeType and UserEdgeType). Put functions that +maintain consistency between previous + +*/ +import { get } from 'svelte/store'; +import { + bottomCb, + leftCb, + rightCb, + topCb, +} from '../../edges/controllers/anchorCbUser'; +import type { StoreType } from '../../store/types/types'; +import type { UserEdgeType, UserNodeType } from '../../types/types'; + +/** + * sanitizeCanvasOptions will sanitize the canvas level options so that incompatible features will not be run simulataneously + * @param store The array of nodes that have a UserNodeType + * @returns void. The store is modified directly + */ +export function sanitizeCanvasOptions(store: StoreType) { + enforceCollapsibleCompatibility(store); +} + +function enforceCollapsibleCompatibility(store: StoreType) { + if (get(store.collapsibleOption)) { + store.nodeCreate.set(false); + } +} + +/** + * sanitizeUserNodesAndEdges will sanitize the data initially passed in to Svelvet component. For example, the node that user specified have an integar as its id but to instantiate a Node and be compatible with uuid we will need to convert the integar id to a string. + * @param userNodes The array of nodes that have a UserNodeType + * @param userEdges The array of edges that have a UserEdgeType + * @returns An object of sanitized userNodes and userEdges + */ +export function sanitizeUserNodesAndEdges( + userNodes: UserNodeType[], + userEdges: UserEdgeType[] +) { + convertIdToString(userNodes); + convertEdgeIdsToString(userEdges); + convertAnchorPositionsToCallbacks(userNodes, userEdges); + setDefaultEdgeType(userEdges); + return { userNodes, userEdges }; +} + +/** + * setDefaultEdgeType ensures a default edge type of 'bezier' if the user does not set one, or sets a nonsense type. + * @param userEdges The array of edges that have a UserEdgeType + * @returns No return, the function edits the objects in place + */ +function setDefaultEdgeType(userEdges) { + for (let userEdge of userEdges) { + if (!['smoothstep', 'step', 'bezier', 'straight'].includes(userEdge.type)) + userEdge.type = 'bezier'; + } +} + +/** + * convertAnchorPositionsToCallbacks + * @description + * WHY: This function is in order to maintain compliance with earlier versions of Svelvet. + * HISTORY: In Svelvet<=5, anchor points were hard-coded onto each node. Each node had a "sourcePosition" + * "targetPosition" where the edges would be attached. In Svelvet6, the store was re-designed + * from the ground up into an object-relational data model where anchor points could be attached + * at any point on the node using callbacks. This enabled features such as custom edge position, + * adaptive edge positioning, and dynamic edges. + * The purpose of this function is to parse the old way of specifying edge positions (as two source/target + * anchors on the node) into the Svelvet6 (where anchors are separate objects) in order to maintain a + * consistent user experience. However, we suggest that this functionality (parsing Svelvet5 syntax into + * Svelvet6 syntax) be removed completely in favor of only using Svelvet6 syntax in order to reduce edge cases. + */ +function convertAnchorPositionsToCallbacks( + userNodes: UserNodeType[], + userEdges: UserEdgeType[] +) { + // convert userNodes array into object for constant time lookup by id + const userNodesObj: { [key: string]: UserNodeType } = {}; + for (let userNode of userNodes) userNodesObj[userNode.id] = userNode; + + // iterate through userEdges, and check the source/target nodes. + for (let userEdge of userEdges) { + const userNodeSource = userNodesObj[userEdge.source]; + const userNodeTarget = userNodesObj[userEdge.target]; + const sourcePosition = userNodeSource.sourcePosition; + const targetPosition = userNodeTarget.targetPosition; + + const cbs = { left: leftCb, right: rightCb, top: topCb, bottom: bottomCb }; + if (sourcePosition) userEdge.sourceAnchorCb = cbs[sourcePosition]; + if (targetPosition) userEdge.targetAnchorCb = cbs[targetPosition]; + } +} + +/** + * Converts node id's to strings. For Svelvet<6, node id's were numbers. These were switched to strings for compatibility with uuid. This function does not return a new array, instead it mutates and sanitizes the original array. + * @param userNodes The array of userNodes (not yet sanitized) + */ +function convertIdToString(userNodes: UserNodeType[]) { + userNodes = userNodes.map((node) => { + node.id = node.id.toString(); + node.childNodes = + node.childNodes === undefined + ? [] + : node.childNodes.map((childId) => childId.toString()); + return node; + }); +} + +/** + * Converts source/target node id's to string. For Svelvet<6, id's were numbers. These were switched to strings for compatibility with uuid. This function does not return a new array, instead it mutates and sanitizes the original array. + * @param userEdges The array of userEdges (not yet sanitized) + */ +function convertEdgeIdsToString(userEdges: UserEdgeType[]) { + userEdges = userEdges.map((edge) => { + edge.source = edge.source.toString(); + edge.target = edge.target.toString(); + return edge; + }); +} diff --git a/frontend/src/lib/components/graph/svelvet/container/views/GraphView.svelte b/frontend/src/lib/components/graph/svelvet/container/views/GraphView.svelte new file mode 100644 index 0000000000..a2be922a3c --- /dev/null +++ b/frontend/src/lib/components/graph/svelvet/container/views/GraphView.svelte @@ -0,0 +1,370 @@ + + +{#if $edgeEditModal} + +{/if} + +
    +
    + +
    + {#each filteredNodes as node} + {#if node.data.html} + {@html node.data.html} + {:else if node.data.custom} + + node?.data?.custom?.cb?.('new', e.detail)} + on:delete={(e) => node?.data?.custom?.cb?.('delete', e.detail)} + on:select={(e) => node?.data?.custom?.cb?.('select', e.detail)} + on:insert={(e) => node?.data?.custom?.cb?.('insert', e.detail)} + on:newBranch={(e) => node?.data?.custom?.cb?.('newBranch', e.detail)} + on:deleteBranch={(e) => node?.data?.custom?.cb?.('deleteBranch', e.detail)} + {...node.data.custom.props} + /> + + {:else} + {node.data.label} + {/if} + {/each} + + + + {#each potentialAnchors as potentialAnchor} + + {/each} +
    +
    +
    + + + + + + + + + {#if $backgroundStore} + + {/if} + + + + {#each filteredEdges as edge} + {#if edge.type === 'smoothstep'} + + {:else if edge.type === 'step'} + + {:else} + + {/if} + {/each} + + {#each tempEdges as temporaryEdge} + + {/each} + + + + + + + + +
    + + +
    + + diff --git a/frontend/src/lib/components/graph/svelvet/container/views/Svelvet.svelte b/frontend/src/lib/components/graph/svelvet/container/views/Svelvet.svelte new file mode 100644 index 0000000000..ce9081b64c --- /dev/null +++ b/frontend/src/lib/components/graph/svelvet/container/views/Svelvet.svelte @@ -0,0 +1,116 @@ + + + +
    + +
    + + diff --git a/frontend/src/lib/components/graph/svelvet/customCss/controllers/getCss.ts b/frontend/src/lib/components/graph/svelvet/customCss/controllers/getCss.ts new file mode 100644 index 0000000000..784a3d1d9b --- /dev/null +++ b/frontend/src/lib/components/graph/svelvet/customCss/controllers/getCss.ts @@ -0,0 +1,62 @@ +// Required for "custom css" feature + +import type { NodeType, StoreType } from '../../store/types/types'; + +// WHAT: For a given node with a user-defined classname, see if there are any css properties for height and width +// Get that height and width and set properties in node store. This is necessary for +export const forceCssHeightAndWidth = (store: StoreType, node: NodeType) => { + let width, height, innerText; + // Look through each CSS rule to find the one the user defined + for (let i = 0; i < document.styleSheets.length; i++) { + const styleSheet = document.styleSheets[i]; + const styleRules = styleSheet.cssRules; + for (let j = 0; j < styleRules.length; j++) { + const rule = styleRules[j]; + + // this is necessary to get rid of typescript warning for rule.selectorText + if (!(rule instanceof CSSStyleRule)) continue; + + if (rule.selectorText === `.${node.className}`) { + const initialText = rule.cssText; // getting the full text of the CSS rule + const i = initialText.indexOf('{'); // finding index of first bracket + innerText = initialText.substring(i + 1, initialText.length - 1); // extracting the CSS to insert into inline style + // Adjusting the width and height if they are set via the custom class + const arr = innerText.split(' '); + arr.forEach((str, i) => { + if (str === 'width:') { + width = str.concat(arr[i + 1]); // go through the array and join width and the number + const w = parseInt(arr[i + 1]); // getting the number for the width + width = w; + } + if (str === 'height:') { + height = str.concat(arr[i + 1]); // same as with the width + const h = parseInt(arr[i + 1]); + height = h; + } + }); + } + } + } + + // update the width/height of the node + store.nodesStore.update((nodes) => { + if (width !== undefined) nodes[node.id].width = width; + if (height !== undefined) nodes[node.id].height = height; + return { ...nodes }; + }); + + // move the node a bit to force update to anchors, potential anchors + node.setPositionFromMovement(0, 0); + + // update the position of the resize node. TODO: this should be refactored so that it cascades from movement + store.resizeNodesStore.update((resizeNodes) => { + for (let resizeNode of Object.values(resizeNodes)) { + if (resizeNode.nodeId === node.id) { + // set resizeNode position to bottom left corner of Node + resizeNode.positionX = node.positionX + node.width; + resizeNode.positionY = node.positionY + node.height; + } + } + return { ...resizeNodes }; + }); +}; diff --git a/frontend/src/lib/components/graph/svelvet/d3/controllers/README.md b/frontend/src/lib/components/graph/svelvet/d3/controllers/README.md new file mode 100644 index 0000000000..fe976031d2 --- /dev/null +++ b/frontend/src/lib/components/graph/svelvet/d3/controllers/README.md @@ -0,0 +1,3 @@ +d3 is responsible for zooming and panning. + +The code works but is obviously in a bad state. However, at least it is modularized so it doesn't clutter graphview anymore. diff --git a/frontend/src/lib/components/graph/svelvet/d3/controllers/d3.ts b/frontend/src/lib/components/graph/svelvet/d3/controllers/d3.ts new file mode 100644 index 0000000000..cce8f4e890 --- /dev/null +++ b/frontend/src/lib/components/graph/svelvet/d3/controllers/d3.ts @@ -0,0 +1,90 @@ +// import { zoom, zoomTransform } from 'd3-zoom'; +// import { select, selectAll } from 'd3-selection'; +import { get } from 'svelte/store'; + +export function zoomInit( + d3, + canvasId, + d3Zoom, + d3Translate, + initialLocation, + initialZoom, + d3Scale +) { + //set default zoom logic + d3.select(`.Edges-${canvasId}`) + //makes sure translation is default at center coordinates + .transition() + .duration(0) + .call(d3Zoom.translateTo, 0, 0) + //moves camera to coordinates + .transition() + .duration(0) + .call( + d3Zoom.translateTo, + initialLocation.x / initialZoom, + initialLocation.y / initialZoom + ) + // zooms in on selected point + .transition() + .duration(0) + .call(d3Zoom.scaleTo, initialZoom.toFixed(2)); + // updates d3Translate with d3 object with x, y, and k values to be sent down to the minimap to be further calculated further + d3Translate = d3.zoomIdentity + .translate(initialLocation.x, initialLocation.y) + .scale(initialZoom.toFixed(2)); + d3.select(`.Nodes-${canvasId}`) + .transition() + .duration(0) + .call(d3Zoom.translateTo, 0, 0) + .transition() + .duration(0) + .call( + d3Zoom.translateTo, + initialLocation.x / initialZoom, + initialLocation.y / initialZoom + ) + .transition() + .duration(0) + .call(d3Zoom.scaleTo, initialZoom.toFixed(2)); + // sets D3 scale to current k of object + d3Scale.set(d3.zoomTransform(d3.select(`.Nodes-${canvasId}`)).k); + return d3Translate; +} +// create d3 instance conditionally based on boundary prop +export function determineD3Instance( + boundary, + d3, + nodeSelected, + width, + height, + movementStore, + backgroundStore, + gridSize, + dotSize, + canvasId, + d3Scale, + handleZoom +) { + if (boundary) { + return d3 + .zoom() + .filter(() => !get(nodeSelected)) + .scaleExtent([0.4, 4]) // limits for zooming in/out + .translateExtent([ + [0, 0], + [boundary.x, boundary.y], + ]) // world extent + .extent([ + [0, 0], + [width, height], + ]) + .on('zoom', handleZoom); + } else { + return d3 + .zoom() + .filter(() => !get(nodeSelected)) + .scaleExtent([0.4, 2]) + .on('zoom', handleZoom); + } +} diff --git a/frontend/src/lib/components/graph/svelvet/d3/controllers/d3Old.ts b/frontend/src/lib/components/graph/svelvet/d3/controllers/d3Old.ts new file mode 100644 index 0000000000..567a2ac77a --- /dev/null +++ b/frontend/src/lib/components/graph/svelvet/d3/controllers/d3Old.ts @@ -0,0 +1,58 @@ +import { writable, derived, get, readable } from 'svelte/store'; + +export function d3ZoomCreator( + nodeSelected, + movementStore, + backgroundStore, + canvasId, + gridSize, + dotSize, + d3Scale, + d3 +) { + // TODO: Update d3Zoom type (refer to d3Zoom docs) + let d3Zoom: any = d3 + .zoom() + .filter(() => !get(nodeSelected)) + .scaleExtent([0.4, 2]) + .on('zoom', handleZoom); + + return d3Zoom; + + // function to handle zoom events - arguments: d3ZoomEvent + function handleZoom(this: any, e: any): void { + if (!get(movementStore)) return; + + //add a store that contains the current value of the d3-zoom's scale to be used in onMouseMove function + d3Scale.set(e.transform.k); + // should not run d3.select below if backgroundStore is false + if (get(backgroundStore)) { + d3.select(`#background-${canvasId}`) + .attr('x', e.transform.x) + .attr('y', e.transform.y) + .attr('width', gridSize * e.transform.k) + .attr('height', gridSize * e.transform.k) + .selectAll('#dot') + .attr('x', (gridSize * e.transform.k) / 2 - dotSize / 2) + .attr('y', (gridSize * e.transform.k) / 2 - dotSize / 2) + .attr('opacity', Math.min(e.transform.k, 1)); + } + // transform 'g' SVG elements (edge, edge text, edge anchor) + d3.select(`.Edges-${canvasId} g`).attr('transform', e.transform); + // transform div elements (nodes) + let transform = d3.zoomTransform(this); + // selects and transforms all node divs from class 'Node' and performs transformation + d3.select(`.Node-${canvasId}`) + .style( + 'transform', + 'translate(' + + transform.x + + 'px,' + + transform.y + + 'px) scale(' + + transform.k + + ')' + ) + .style('transform-origin', '0 0'); + } +} diff --git a/frontend/src/lib/components/graph/svelvet/docs/CHANGELOG.md b/frontend/src/lib/components/graph/svelvet/docs/CHANGELOG.md new file mode 100644 index 0000000000..43d5b6b5f8 --- /dev/null +++ b/frontend/src/lib/components/graph/svelvet/docs/CHANGELOG.md @@ -0,0 +1,145 @@ +# CHANGELOG + +This article documents the changes from Svelvet5 to Svelvet6. It is for internal use. + +## custom-nodes + +https://www.svelvet.io/docs/custom-nodes/ + +Anchor points no longer display on nodes in isolation. This is because anchor points are no longer tied to the node object. + + + + +## custom-edges + +https://www.svelvet.io/docs/custom-edges/ + +Edges now use adaptive anchors by default. Previously, source/target anchors were placed on the top/bottom of the node by default. It looks nice in the specific causes when target nodes are located below source nodes, but in the general case there will be intersecting edges. + + + + +## panning and zooming + +https://www.svelvet.io/docs/pan-and-zoom/ + +Panning and zooming is functional. Removed option to stop panning, lock nodes due to store pollution. This is simple to add back if it is a community requested feature. + +TODO: need to update this text in docs: + +``` +play around with the flow diagram below! If you wish to stop panning, set the movement prop to false. If you wish to stop node dragging, pass in the locked prop. +``` + +## usage with typescript + +https://www.svelvet.io/docs/typescript/ + +Type names changed from Node, Edge ,to UserNodeType, UserEdgeType. The main reason for this is: + +- The internal state of Svelvet is stored in objects Node, Edge which are different from the specifications passed in by users (hereafter referred to as UserNode, UserEdge). For example, UserNodes have "sourcePosition" and "targetPosition" parameters. However, the internal node project does not have "sourcePosition" and "targetPosition"; instead that functionality has been abstracted to a separate Anchor class. This promotes greater code modularity. + +## CSS-Background + +https://www.svelvet.io/docs/CSS-Background/ + + + + +No visual changes. Moved background color out of store in order to minimize store pollution. This means that background color will not be serialized using the import-export-store feature. We talk more about this later in import-export-store section. + +## node-grouping + +https://www.svelvet.io/docs/node-grouping/ + +No change in functionality. + +## snap-to-grid + +https://www.svelvet.io/docs/snap-to-grid/ +http://localhost:3000/compatability-8-snap-to-grid/ + +No change in functionality + +## html-docs + +https://www.svelvet.io/docs/snap-to-grid/ +http://localhost:3000/compatability-8-snap-to-grid/ + + + + +no change in functionality + +## node-create + +https://www.svelvet.io/docs/Interactive-Nodes/ +http://localhost:3000/compatibility-10-node-create/ + + + + +- Previously, the new node inherits from the old node. Now, the new node is created with default parameters. Note that we have functionality to edit nodes. +- edge creation works the same as before (not shown) +- there are now 4 potential anchor points, rather than one source / on target anchor point. + +## custom-svelte-components + +https://www.svelvet.io/docs/Custom-Svelte/ +http://localhost:3000/compatibility-11-custom-svelte-components/ + + + + +Same functionality as before. The reason why it looks different is because I created my own dummy Svelte component to test. + +## Minimap + +http://localhost:3000/compatibility-12-minimap/ +https://www.svelvet.io/docs/Minimap/ + +Same functionality as before. It looks like there is a big with HTML feature (unrelated to minimap) + + + + +## Initial zoom and location + +Same functionality as Svelvet5. It appears the center of the canvas is 0,0 + +## node classes + + + + +You need to put !important in the CSS + +## ImportDiagrams + +https://www.svelvet.io/docs/importDiagrams/ +http://localhost:3000/featureImportExport/ + +Feature works as expected. Note that previous version of Svelvet did not serialize callbacks (there is no general way to do this since callbacks can involve closures). We do not do serialize callbacks in Svelvet6; this includes anchors which are reset to adaptive upon serialization. + +As before, any canvas-wide parameters (such as nodeCreate, backgroundColor, etc.) will not be serialized. + +This feature is fragile since there is no guarantee that it will work with new features involving nodes and edges. In order to future-proof this feature, it would be best to specify that import/export of diagrams only serializes certain parameters. + +## Diagram Boundary + +http://localhost:3000/compatibility-15-diagramBoundary/ +https://www.svelvet.io/docs/boundary/ + +Feature works as expected + +## Iteractive Editable nodes + +http://localhost:3000/compatibility-16-nodeEdit/ +https://www.svelvet.io/docs/editNodes/ + +Feature works as expected. NodeEdit is now active by default. This is to reduce store pollution. In addition, node edit chaning width/height of nodes has been removed because this functionality is duplicated by resizableNodes + +## Deletable nodes + +This feature has been removed to reduce feature bloat. Its functionality is duplicated by Interactive Editable nodes feature. diff --git a/frontend/src/lib/components/graph/svelvet/docs/DESIGN_PATTERNS.md b/frontend/src/lib/components/graph/svelvet/docs/DESIGN_PATTERNS.md new file mode 100644 index 0000000000..c7d266125f --- /dev/null +++ b/frontend/src/lib/components/graph/svelvet/docs/DESIGN_PATTERNS.md @@ -0,0 +1,44 @@ +# Design Patterns + +Svelvet was originally written as a monolith. This increased development speed but made the code fragile. Teams struggled to implement simple features such as deleting nodes and resizing nodes. One major goal of Svelvet6 was to re-design Svelvet with more robust design patterns. This document serves as an opinionated guide towards how Svelvet should be structured. + +## Each Svelvet feature should have its own folder + +Svelvet has a lot of features that interact with each other. In order to encourage modularity, each feature should be given its own folder. For example, code related to the "resizableNodes" feature can be found in the folder `$lib/resizableNodes`. + +## Svelvet should follow an MVC Architecture + +While Svelvet is a frontend libray, it has components that interact in a complex way. As such, code should adhere to an MVC architecture to increase modularity. One useful way to think about MVC is drawing an analogy to frontend/backend/database. The frontend is the "view" of MVC, the backend is the "controller" of MVC, and the database is the "model" of MVC. To that end, within each feature folder there should be four folders: models, views, controllers, types. + +- models: holds code related to the internal state of Svelvet +- controllers: holds code used to interact with the Svelvet models. Ideally, all interaction with Svelvet models/stores should take place through controllers. +- views: holds code used to visualize the Svelvet state. Ideally, views should not modify models directly. +- types: holds types/interfaces for Typescript. This is unrelated to MVC. + +More comments: Explicitly labeling folders as model/view/controller increases verbosity and most projects do not do this. We feel that this increased verbosity is worth the tradeoff of reminding developers they should be following establshed design patterns when coding. If you are considering removing explicit model/view/controller folders, consider that Svelvet is an OSP where developers may have little to no prior coding experience; increased verbosity may be helpful in guiding developers towards established design principles. + +## Svelvet's internal state should be an object-relational data structure + +Too Long Didn't Read: The main takeaway can be summed up as: make the Svelvet store look more like PostgreSQL and less like mongoDB. + +### A longer explanation + +The store holds Svelvet's internal state. We urge future developers to structure the store as a relational object rather than an unstructured object. To give an analogy, if Svelvet was a full-stack app with a backend and database, you should use a postgreSQL instead of mongoDB to store the internal state of Svelvet because nodes/edges are inherently relational. We give an example of a bad design pattern and a good design pattern below. + +Suppose you want to implement a "resizableNodes" feature, where users can resize nodes by dragging a node corner. One (bad) way to do this is by could do this by hacking in an extra div on the Node component representing a draggable control point, then hacking in a "resizeNode" method on the Node object so that when the control point is dragged the node is resized. While it may be easier to throw everything on an unstructured Node object, this is bad for modularity. As more and more features get added in, the Node object becomes bloated, difficult to read, and difficult to debug. + +The better way to do this is to create a brand new resizableNodes model. This model should hold `nodeId` (a foreign key to a node object), `positionX` (its x-position), and `positionY` (its y-position). This model should also have a method `setPosition` that sets its x,y position, but also sets the width/height of the associated node defined by `nodeId`. Note the similarity of the process described above to adding extra data to a SQL database; a big advantage of SQL is that it is easy to add new relational data by creating a brand new table and linking with a foreign key. + +By creating new objects/tables whenever adding new features, you make the code more readable, more modular, and more testable. + +### Foreign keys + +One question you may come up with when adding new tables is how to structure foreign keys. In our resizableNodes example, we placed a foreign key `nodeId` on our ResizableNode object/table. Alternatively, we could have placed a foreign key `ResizableNodeId` on our Node object/table. How do we choose between these two alternatives (or maybe we could even do two foreign keys)? + +You can make the decision on foreign keys based on your component heirarchy. A Node can exist without functionality to resize itself, but a ResizableNode should not exist if its parent Node does not exist. Therefore, you should place a `nodeId` foreign key on ResizableNode. + +This decision has the following advantages: + +- Increased readability: When developers are reading the Node class definition, they are not overwhelmed by all the different Svelvet features. On the other hand, when developers are reading the ResizableNode class definition, they should realize that ResizableNodes are children of Nodes. +- Increased modularity: You can remove a ResizableNode without disturbing core Node functionality. +- Easy deletes: Previous teams struggled with implementing delete functionality. When you think about a SQL database, deleting rows is very simple. You simply delete the row, then specify cascade to delete other rows that reference the primary key of the row you deleted. Keeping a disciplined approach when structuring foreign keys makes the entity hierarchies clear, and makes operations such as delete easy to implement. diff --git a/frontend/src/lib/components/graph/svelvet/docs/DOCUMENTATION.md b/frontend/src/lib/components/graph/svelvet/docs/DOCUMENTATION.md new file mode 100644 index 0000000000..0a30d726e3 --- /dev/null +++ b/frontend/src/lib/components/graph/svelvet/docs/DOCUMENTATION.md @@ -0,0 +1,5 @@ +# Documentation + +- Documentation should be written assuming the developer working on Svelvet has coding experience equivalent to six weeks of bootcamp. +- If you write documents in tsDoc format, you can use TypeDoc to generate documentation automatically. For instructions on how to use TypeDoc, see Tutorials.md +- Write READMEs for every feature so that future teams can understand how they work. Put your email down if you want to be a resource for future teams. diff --git a/frontend/src/lib/components/graph/svelvet/docs/README.md b/frontend/src/lib/components/graph/svelvet/docs/README.md new file mode 100644 index 0000000000..71f6258cab --- /dev/null +++ b/frontend/src/lib/components/graph/svelvet/docs/README.md @@ -0,0 +1,34 @@ +# README + +This README provides suggestions to developers working on Svelvet. + +## What is Svelvet? + +Svelvet is a frontend library that allows users to programmatically create graph diagrams. Graphs are composed of nodes and edges; each edge connects two nodes. There are two main challenges when working with Svelvet: (1) nodes and edges interact in complex ways, making new features difficult to implement without interfering with old features, and (2) Svelvet has an active userbase, making breaking changes undesirable. + +## Things to think about as a Svelvet developer + +- Svelvet teams have 3.5 weeks to iterate on the project, less if you consider time spent on marketing/deployment. It is important for code to be readable, otherwise future teams will be unable to understand the codebase within a reasonable timeframe. +- It is important to write documentation that is easy understand. Write comments/documentation assuming that developers have ~6 weeks of prior bootcamp experience. +- Writing non-modular code with zero tests and zero documentation increases technical debt and puts future teams in a bad place. Accumulated technical debt can kill projects. +- Svelvet has an active userbase. When possible, breaking changes should be avoided. However, if a breaking change must occur, it is better that it happen sooner rather than later. + +## Suggestions + +- Write modular code, separated by feature. For suggestions, see `./DESIGN_PATTERNS.md` + +- Write tests. Svelvet components interact with each other in complex ways, making it difficult to predict whether changes will break Svelvet without tests. + +- Writing tests and documentation is good for your resume. A long list of features by itself makes for poor resume; mentioning testing, documentation, and specific technologies used to implement specific features make for a stronger resume. + +- Don't leave typescript warnings unaddressed. This makes it so much easier to debug. + +## Where to start + +Here is one way to start understanding the Svelvet codebase + +(1) Read the Node class (`$lib/nodes/models/Node.ts`) +(2) Create a new branch, delete all features except for nodes, containers, and store, then try to get Svelvet to running only rendering nodes to the screen. You can test Svelvet using routes such as `testingplayground` at `http://localhost:3000/testingplayground`. +(3) Try to refactor Node.ts. You may notice that Node.ts has 16 fields, when really only six of them are important (id, canvasId, positionX, positionY, widthX, widthY). Create a new table `NodeAttributes` that links to Node via foreign key, move all attributes (bgColor, textColor, etc) to this new table and get Node rendering again. +(4) After understanding how Node works, add back the "edges" folder. Try to get Svelvet working rendering only nodes and edges to the screen. +(5) Node / Edge / Anchor form the core tables of Svelvet. All other feature build on top of these core tables. diff --git a/frontend/src/lib/components/graph/svelvet/docs/TODO.md b/frontend/src/lib/components/graph/svelvet/docs/TODO.md new file mode 100644 index 0000000000..328a4b6ff9 --- /dev/null +++ b/frontend/src/lib/components/graph/svelvet/docs/TODO.md @@ -0,0 +1,14 @@ +## custom node functionality should be refactored into its own table.'' + +## tay10alan60@gmail.com - minimap, d3, node deletion, interactiveNodes + +## dillan - customSvelete components, deletable nodes, node classes + +## Minimap 75 boundless, 200 bounded + +## New team: + +- split up the website and the svelvet npm package +- continue store refactoring +- refactor store dispatch into flux architecture +- testing - 1 full iteration diff --git a/frontend/src/lib/components/graph/svelvet/docs/Tutorials.md b/frontend/src/lib/components/graph/svelvet/docs/Tutorials.md new file mode 100644 index 0000000000..1f7c029d27 --- /dev/null +++ b/frontend/src/lib/components/graph/svelvet/docs/Tutorials.md @@ -0,0 +1,25 @@ +# Tutorials + +This file contains instructions on how to do useful things such as generating developer documentation, publishing to npm, etc. + +## TypeDoc + +You may notice TSDoc comments throughout our code. These TSDoc comments can be converted into documentation using TypeDoc: + +``` +npx typedoc --entryPointStrategy expand src/lib +``` + +This command will create documentation in root folder `./docs`. + +## Publishing to npm + +- create an account on npm.js. You can skip this step if you already have an account +- log in with `$ npm login` +- Within the `src/lib` directory, type `npm version patch` to increment version number. Or if you want a new name, you can modify `src/lib/package.json` directly +- In the base directory, type `npm run package`. This will use svelte-kit's package feature to create an npm package in `./package`. +- Within the `./package` directory, type `npm publish` to publish to npm. Note that you cannot "overwrite" previous publishes, you must increment the version number + +## Testing npm package + +- install locally with `npm install svelvet-lime@latest -f`, where svelvet-lime is replaced with whatever you named your package. Note that if you have a previously installed version of svelvet, you must force a re-install otherwise you will be using an outdated npm package. diff --git a/frontend/src/lib/components/graph/svelvet/docs/images/css-background-after.png b/frontend/src/lib/components/graph/svelvet/docs/images/css-background-after.png new file mode 100644 index 0000000000000000000000000000000000000000..68c40c5881b0b1f311ff954218b3d6e27f8aa262 GIT binary patch literal 41450 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 literal 0 HcmV?d00001 diff --git a/frontend/src/lib/components/graph/svelvet/docs/images/css-background-before.png b/frontend/src/lib/components/graph/svelvet/docs/images/css-background-before.png new file mode 100644 index 0000000000000000000000000000000000000000..c7f37de68ff932275ec76f0e59c4cf565ec80110 GIT binary patch literal 39719 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�^d8(9 zLVkUkqh&}~yef#Jzsj~~-j*EsgBw+Ps_J(+Fs9JEVqP{2b(005;6x%>v#;+^O1>S$`8 zx#32wLco0EMZ&H(CFYZK`!UFPy7dd&w_xPNo_SAyJ7rIwR|x3-XkeCz*|_w-Uc;i+ zes-a`9i*^iSaoNydh zr?8nbG3!@IG{<0oS&@U(euV(%;s@>4l{f%&%@q^p?vL%cZt?L$2`A+P#*#WX!mmqq@8H zg5abeM81ds?^xZOO(N7H`h&_eQd!$zhJl+=QxC7^hTk3L@Al-L>H9YYTje!Lgb6-| zHwsd|RGD44C+bj9aD!4Br1|v#>l7DevG(F+Iszo}VS1n{!%@KI4%6|OU*dgM!>2#T z!U@R@apRGqwMg1}ydmUB5|cMsuJlyQhv?F}_cV6IdE!w>?Jui=jJ4#hi;+}=F7wSF zS?bcm0sdmxOxm}n6?SQpV3imCdK#8YXV0ur#o_#9{-Rtzu~xft#zo~+wT&B5) zwpShVc~pkG;@__oAS#JE@RX_^qn7A0`m;>w0UkCT)9{HMT!eDufwfHO`h4E8kMP-+ z&nBOX-V&SIxo{lS4-F(zi;AF9Sb>-i9o0n);~!NIN{_a`e5=D{dLgv5`@@y#~s=lT1+p zOY2|p2u$V(T*Lx`d9(<%6YJ8W>} z!Lo6O+R^Zl=AA9S^cKiUh|P5Orz=dc8EZT?VrZ+Lz4C0!D@$f12;Qb+Oxfn5SA_4*^tfkZsZZ%vd@`&@!Dg*?>C%rp|({%=Gby$$z<@8RbU!Oi2gD*#Vcej*Nh#~KH{iPa~GEU zKkQ*Nx6{^DR9%P7e$#cwFCs1HKwZDM+dgu)!#?un18bc%dvyJ>lB!Ck7AF01OG`oo zbc;P;fRd8^tS6#!Q#!(Zvc@F*@Rox&)Y1l%u6q{-i1n6)`e~}Avmc|#HNPsc)G7FXSk?3YVO6tUb}!-eaN1lH?ltr{IqiCe zSy}bK(1ETz!h$#{-W#Zur=9Q%guXFbD4VvEB2M~%dvo5GA3HB8<-_m#Y+*s7AB*K8 z^&f#Fa#NkNU4OmEhu|JLZBE6G4={`e*#Fnmc}F$TtZ^6-0TGlcMT#gOAe|spO6VGh zRFNvh&;^koNRuW_2}Q(EHJH%5qO>SoKzeUMdP_h$d??(>cka38=FdI5likhCBs=*% z&%0^ToM(Qicjt);dpkqu)P$6uLL|xSmH_V~LZ4)Iz$;`yHi>tXHTCSXoThWSJo5R^ zg*$OAx#rKM?TrWA&Uf`8eGT}^MI5UR^_gF{N$Lqq3glCTHD0JAvCsgg_3G_Z5j zHc-4hlqjoE8t<$Xs4LB!Pwgp4E2=rI0cf%-pS8?_H!XR@$9x77X$KF|@8C?|-y=Mq zO)C_Jfld??yf4U!(k?sOiRchz{mYP&Y(5@oR8m|*H#2S)odw>a;Ro-?Rj^1rx&w0R zB))gkzKyT}4s9dCoJ`R9(}$|BT*md5mQxeh`8a2OJsARD=@FkETHn3t%qVENZ19cP&r2LQ_kOvv4Afy7oQdZGo$B+*c9^rImTOi9iR+ z`_Ap&;V)i)NY+{)NA1mWIJ9nVKF==aQb)4k^Iw`F8T8G3uuQhvQl>-ug|r{@#Rc%GEVWg5xv>n03HX5 z1F~5oFDFE4z8&QZr1(pK*MB(M6ctge!Ol%!ngxvJuiZiTjO%iWopAkUQzz(85YHu{r; z(9>r{GUO&oo&jM4SI_MO>wo!lz^LO78a6%6PJp<3?r3lty@1TA&fRiH=l;k`dfX=?|9|Y_yNk3hJ zkv$$!?6!JJS*1L60AW-7^Sc?X8mt7);9BY(1_kH)_u1R|LRH8dZj=XzjpfoP_IpMS zPEU8YvfKRxkwbokDi`p z)?FI()9_q|P1BVugTls{pw>n2W>Dzzl=5=mNfXdP0NgT2Rc+H9m>yPES7&FV`KTZI z?zYYIUF25y4(`$sP;q#3N8|CT`^0hC0k7!on{6f?{^2dK6!bSRu5|o z+#RwI2)QQwcrEfK!2g<~FAetfQG6%61R5h~0@e!h6p(AI(HD8U?yu*S0zL^p)-QH!S06ZwRp&?5W ze;5vmF>C=9!`6g*8Gq!}w66Y<5$f;CoAu2=ub?MnqS$;p^-ec_^!INmWk2GtmHynS z(+g41t#zmkvo*r>rYi98=a!YB?xsm}tB!!YA>bGHQ%Dh4ANFS7=2r1fgsc61!*av$ zo@j?B_aBj-EamnOn$iBpq%Xh@0{7qUxPc{Q2Oc1m!|-p4zSxHYdU~r=3itN6!EYP-W$G>{q2AdxJn{DTJFiBr>8Fm zRa*$b2R7M(8;a@a>10|IrFNpQK3djZ?Fm#Y=arO{`~g?N!O58vHz`GLJqoHmh!Y77 z8GytNg9&Ns>e9S^{n{6a1hqdj-QCxT?&KptDs>DWtPE(6*5%sm{-3Ep7h>R=SjJ0#%o;*TjrQ<(`0kLd=i|){V?*{X zM$WwWerUEwjn>_3QQ}D{Gq6`oaxfV~XlME|U+(>URBJ~IigM6>BhRN$XBw4j#?X zEb}uRf)@eulkEJ75r&|bWv@qyx4L78G8Glel6&dJ#;5yAI+W)6*Uq0|l!I9cu+WNz z*u2Eq>;IE7Jb5u4ryuCoO|OOaDs<-p`}vyXhYSl~E=!vbWWBIF?eA0xHZPa_v5cJx zg)8YgcQJ;Ahw82KC5jJj$f3{bwR1-@Y6%3-x(z2(o2ExP5ij&7#MloN^T-{fXj$0| zeicW*9qAbJRqKGoP#BvR&zT92!*7xla1xtLVGmuKq*``@ z;~t}T`KpW9Mr5=QQP_LJArFRDz{gD2nyk(y76tuqPwc#Dqw)VXIPkhDzawuIDt!1C zrlhRQ$<19qZZCX-0wsh707L)tQr=LFGhJ&*n5e~tk3QE5dU8(v)!Gwyirn;yEVuwM zoWP^3)4Opj8mvOHE#nWx6hl8)aGN$-US*RWJp9YE-m$#1yT4zUI>PMi?VSi5C)-CV zRukrqT-0FYt!NO-7H38I`I7sYNc)&~gm^RI)E~N#lYh#}6n*9t_=0{nc3*^7sDm?G z9S`OM$6XhCs$l-=tLMChG$x6*7H9r|uC?2V5WYyQ%Eg6~kZ%?{;$@mnoZy#eVwC@l zouq;Oy1?HMNVq^ru{zd;M}2UA$E@7aEcJ0A@G4YGSom$%8*9L=F;h`8#f|$>T%)q1 z0$_~9hi755Otka{r42VIArN{4T^)E=7^=YRnYBXDnm|fxQ@y7{lJM~}LZ~KDLl{)b z(Y)qwM+=3*x)bB387S!uawK?%Cr6W0W_|xuxKMSydT4dI`jNdhhNJc**Pt0s%V@7K zT{awn=7hKHVs+4C1~zFu9ov*`DI%-&v**t6^Mi}vf`4|??SC4}wS;liWu#jTN$*c+ zCEhR@loqu1*W#Ev7xro62!m0JABM{--&o!gtx4}?k~J_NyNENt{XKsCJb9GKcV3{x zcNu`8dgnnUcoa?nM)kCDizjsX7N{R%vNk>NIi=^D}gY>R14P!#epJ1jTKTsoxz}NhEB2jWs$MROV{wdPOUYQh z{y%jyQ#~^$w;{_rwYaUxHU#r%0A{gMaJy8ufvq_~Z`Xt$B?(QgwkEPy%_|_@Xo(5Q z(U#g?!HO`YbV^IoepO1nZa*R55$)0<;HHDvbo`s>QJ~fMtV2OxBtAE(Km}K7;?<5V zZMEw(EN}9&V0u~@r?0mdI>-vw59nbFMpZPia^48LZqEX-75znXhG8qx)Ud}zw}GcU zk+JC%mN1y9C!X%NFvZMZh(VC@u{m!22{^5|H<1#lK`78ZgQ0b&pL?Y#=pRl3$F5GI z@F6L;fx}ck>rR?}b_WfvnTNeuDLbX*blLGAR<#&v+_G+_#h{rADEXTb!1bHZqiZkusF!;@W2x@ zNB#+;yWloPKYAy(XCgjfue;zQ!x--KYjg;Hjnx9-WaP7raIde8-jh9_ci&`oFI1An zOM{7yTEcE&chqjHH|eH7{?d!m^{FIR#Ckf?!}>Fqrj_cqX|#x8svWhAa|M`^zNz@^ zx5g==nLbI;C)E~Iwv7GG82*?=1svvE5v$?YRY=}_@8eD#SKW1NjHoG?lcFr`MOeYN tuYP$@UOOF_-7L)W!@;D-8YkEodgka}exE!sh?fGq^tBDON}&(K{{vcHX7B(2 literal 0 HcmV?d00001 diff --git a/frontend/src/lib/components/graph/svelvet/docs/images/custom-edges-after.png b/frontend/src/lib/components/graph/svelvet/docs/images/custom-edges-after.png new file mode 100644 index 0000000000000000000000000000000000000000..b8267dce7a58159a93964abb01570c1fc9f23bf7 GIT binary patch literal 18021 zcmaL91yogC*amoMkXA~%q>+%8ZjkO$8tDeF(|Z>F$yaMN)D$-#@cvX03mQ zwGdIb=iD9de(F7;3UU&tukc?%AP`h3Nl_*6^&EW8A;N<{gRXIC!53HuVJQ_v@Zo`I z6av0~>nNt-sBB~6_)Xv581mKH#>$w{!O-5=*xJF=#_=~yCqD#23Xu{OQgKN?&G_b_ zDt7lQuz$@K2gwQiB8=27$&~Bk6A}Vl(?TAe+j?Z6c}0D+tS)Oi!OmkHaRtA zR*$E(3?U-QC>8l;K$M{tb=JqjQ%(p2!4M`5BgYb(dVmpABt?YQD44Ec5W#>Qvk$NyLqn5oi?j15CzfM8#+u?%Qb^LDKCzF6<%X=T>bUR{Q)$o4%&?Er zhC#QkMYXl@QfVV2BP%K@b{knZJ98)p@3<1befu_b7m=)}s7TPutHVSSyay|6SSU?R zO&QP0opYBt1n?^wk zO`OyoHMjEAT=W``=K&pcoVI$^N6ig`=_#|d17z)&fnN)Ca@68(d2@VFXYWWoKV`Oi zAXk<*GcuK-AyJr+_pv%kj(!lLLMP~w`86(mxCW(hWsK7GjTokNqjoJJ8LS^Ev(&he zX3*e{e%!vR1$}r;7zT9aeu||k794SOuv8zp)a&?HkT24DPF7Odn!iga zrDPhETq(m1BBhPedUWw;5LB0T^FJjisHqibLQPyqN=r{a)C6E~5u#C2Q(Mf_jM(LvR@O~N9`?~!em)NS z<7SBz0oi3`5mLF}CBXcq{3^?(A!lb#D1PJ0OH4^cWuB;v1=ru--{g20_cBW{2?_m1 zrKE_GQd0Uy{??6Y#pthv6;xFEDBUe1I;$>)f_uAX5x}AVvwFltSPV-XjX)JIrF@-F z^9rmgXc!pwU2vDa`>wEXaAsambRCUa<*BC^yy&${WwiTw4e;QfM-C~a{74ZIQBY>< zR54&}2@7cp^BS}maAZS?>)E-un!4>FD(CKkf{^%fhQG=@=2c6UsW0j%;$`gc+}C!V8e0+ z6OD&zP{b6IgQBf4qjprrI35Rc2RrcV5)OHIPz4cv8AcadoakS_eyzuv^5^d;Q)8Vb zU$R0Sf;kz(F&j@j_<;MZ%6k+HPbysRIiCfOC zWKv4;*RfP2a*cEUls^6Rd_d*-ZondIZ;?dfCY|?=2a`hIwt2w5qNSxp zL`RnZ7mvS+r1G??3;w6%Fz)#fdwuQshzVo68#+S%?mHzCTCl&A@3wR6O20?((Q4t5 zQ;w1}PG}KLm<$~oU6@|1DP0&e*ar;n9Cr*r2mv6!k1G_WFAha~BGX`-TPJJoB&QG&(&!O2Ak!*;t5>803x zPfTQ$LMr|qD@IO-2pty}mrRVtJF#!_=mj~et+#S zc*kZPvpV1%`*#=%i-@c|@L8i+8OW7wXk_e(4ttO|6tww?o-TzqvQu1*X(nHp&|z_7 zR?4LK-+ZVqBpMUDUqYWcCkUYwvflhk^m{TxV=$OzX!V-ExQen4G@%VmqHC~8#CX6U!AETs27SX;GegWJW1uSv58 zH>h9@eujS~6%p@2jc76iBX+m-Vj*XoczFe7UGCJM>sR~`q|(j?Po^lC4P4l$${!%qT6*pB z;4~pI5bR6Gtv(*A|2u)o0@GQx)r7pR$0&0|8{v35xsL{R$h&@WBN_m5_L z?JxE?WyYXyp{&bs$Bo?=q`_aqzFclx2=<4VgzTcd_Lms1c7+L}_L=SMzs{!XOAqhs z>D&vXOLGS{x_Lz{IAi&;nc_yvjOsk>l>V;rUZDHc-hwG1Cdl)T>gje@(8KnDSI+DC ztA>1*$QTC1e!KN{XaDifSq>~^`af(E^pzk9erfA#MX^!`gN1oxyt_Y4lj|rKueY=x z$d1r&)gZT(XQH!@0zQnWiR0LaeGy!|4Yv3NGFg$>HYEN17sE8v5Iw=9LkDIpKIqT8 zUumHPo;grPZAcK2Q4V;1e{16SO&X=QTrV(GY$CJ&bbU#exnp{&)59?tON|b8PUumL@!!j2Y{mXLuTw+u=teQ?j4Ld>NhMP2UiHqBOhtG9_YhaaEPf`Aa;uX0>oiQ)H0jG$`2 zT~lwgVU~^UK1~BG`i1BgRP?o4EY7iJc*DIZS7f27XeNWHA{rE8!occJoSO=oYo#mp z^Ur?{R#`%h)^OwJPlYp~1tSKJIpz8T>fi1G{(r&-X$$`~{W@w`wNx(VHFO&=dO|5Uf@cYl1`c^XU zdpyHJ$Nrn&C!)c_@sl~jC)<<8)0BAL>%l6RKHsC-1t{n6DwQ9n>&~Wb*z|Vy>e)cB=|BD$Cb)Y4XW_o1_f|fd z;_!i`jnfwS%=Monk%$&tGmu zmLu(}9Ue%Tc9rDL3tvt=SuuWhwj)?8MV!j>2bRsb+df(H@)M`|?_jf^s>WRW6It{r ztiHK4qfB3of(s_;4KiGYnlAZ5KcC)Nwva&VZ)CQya_^?<*~NxmN^9o%mvVhdsaSk73ts9X8gP^}0PENdj3xOwq!fP=Y`9X^1oEagdPv}P_FSa23 zhDz?R{|Vka;B&!L^kxQuSNGAeO^+3QW^c;mdeJ}X0sZ4Y|LE7wmm;U|@cFQMP545H z4u$LO0vn%tv=TEBe|Ss63X%T%_pi^o@eLy{G5YYx2zf3IhlX4nWn5B{#Cy&ha$UD* z9q%z@N+I$9j6kDjL*nMWK-iuvugr+7JDz4z)xt)(ykwb8ABVEtQK~jQm*z)quHUcSU9&`Nu~;lz z-1xAtS7SAPq%i>F_FS}?Xg03MvVQmwN-6cDt*vdIZ@w57!u{=xklSGo<=lnWyt4>d zOfh8Ukg~bCIrU09PE=Z28lWa5vH%PxxfAEs6#Klm(O5DHa&r7<6&C!t!qo0A)p2de zY^vj||B^w6&MYJ^M``ci?(8kEhdG+_Z{0}#M5TwX=ahtnV-DiUrvB+r@VSCy5IsM- zQ;t;qiYrrU(lG3qtS9(1n>jQ+_2WvWPltYferzz1xKaC&FYRt-iEqSWr3{f(*44!n zF#y#}=pK0?h_<6(tx* z@|X!YY7w@!wo<(`h!EmtA*=h1aEc-h=PG+6kE{NM58C!_uODE|5|H_`b>M?7_H;`7a2Xuf zw51!1cx)mzk)3Mu35HzVGb9psVLNJyM2O9fS^Q`BMcR7z=AVYj$aym&wnM0pYx1ZC zbiuku_f@>qQr+8$v?f#$b68ay)L9h2bz)-aa_qIxG>qvmf7lv$=-G_c-KmVG(CpHS za(2mVPO!HtbvK}K?gWk(D%DAXWJAyTWFbWSHft@|VY!=g>bh`{w#(^HjFu@keSLkT z92{z>up0Hs_Jj!j-Cf^_s`$vIl?O4mjyC9JPc#(%r%uf`p58C00%g(@0H3O$}>EZc%aaYcWhXI5|-!T&yGFY&8@z_ii{Fx+6&gf}qx_qEu*sSuq(OaF4)&5a&;GqDH zVifl|RfeiQj{|lrbTsZ=N4@gGY9S++jcSQ?{M$%z)q&y;)EC;S>6te9SFIGAcfx|F zfMJvwKe9@LAyryH5v$vdu&1|IpEZTqY?{*XWD)b-yLWRVYYr292kY%08F0c)?!$7s z%$e_=jVX)68S(35$SWIF`zOWXtj4!y7;} z4;HHp!~u`94kCKh3p-bwQ0w%PheE4t=D)S{!MsST>m?oE1d%OSTLix zt^{6%4Sz*dT-4iezD#pybW{W^A@K;jsp&m7df5&H;e2<;oYLaGPmQbg$P75h&Zo<8 z!M(mLh68%1%k>9KwT1F4Ikz5XhR@i#mUaebsVN8Bva0svUs9ehcr4c<5sp4K(q{D4 z#?R;7G`3b1i0|4PFg(R_pm}ReHmZih-(8;~M-Rfp4+nI3-Z#{7k4e{B8gUGI6n~w_ zZ2H}CUuC((3fPO`c3-IMa%LsjweER8H5^{O8&%8fYN!IGBy+b)QqtRd{W*aR|7wdJ z9R;37qTi>#1Man&-@qhj%QNiftl*bFcFgq{RFiUYHs+6+Vz@sLG`U{tp%8Gt?j3wT zC=efBbv$=td-Bj(eb=IyeE;(c*N2V4D+-%#lHVP0oQxijv>EgTB18qb-mf>jAk4X0xonlR%b1LEx zB42sAvmT?~N*CvOOUbuIwTp((T9<*S~r?-+jH-~|3v&*OcC7lQG#RYmKct51yEU54GJrOv{0jRoy)i1*D+GM_P>$xm-sJ2NRR z@9LvRa+(luUk39%Uh-d}3v zG!qpS6ac2g5yQk~`XVYOCYI63iH8Ch`hS{VI-h$YEt#9EE4T8vu4ZCvQd024gU48n zlVM-i{ZsHQ(}F?zA&xe{tzi3D}R z{3GTs`&@UMJJPX#D;T*nZl_EPo|9X)K(j0EO!gURRDXVYWJec(BnV9hp_7bb(J-;G zVf6-~0+<2+WZJ2h147U$-V$_qzR%ygk421SPmI1`iPxmGeK}@P<+Um6Y;b? zs)HpIsq;rlA6G8f%2FIqAHm1LY;nAaCVpA0G1RO{t^QC9+1#DpmoHx!JvmV47qL7i zwY~KZ{d011>W$K`mhj)cEnYUy#-4mb3koVi>D-88H7dNnNs*dXAy5yet!o$Yv9Nw* z{spR&Oap$Tc%`M)1JXOF(B}?h<>2V9qS!pUiSs}gb7K-bk;?usi|ehksXUhR*xw2c zRm)ogP8zP~&s#zLjavXH^oWPQC9wl-rw zC`tgGP2z-yuiA$(B3W|^3HrRnh&x}GZ6rHAG<308o@3Okhwq;U=OeTClLss;tSPRw zVO{f_83Yj-Sp-b{J+if2*q^JGcP@`jh*Pw=_lyL8vWm++$28Nxxv5b;?|j%LNZ_RQu(hg}vW23IRA$rbbT~)pDcjw2TIh;-A{eR@if)?V4g%B{dyo@g0$AJ!*;e zR_)65vrgrj*FRG}qz>;s^v@TV>#ACE6QWTq<jpcG`aMZs!X*co3Uol z=&nH=Usx_85U_J|$;U`NWS0=y&v6s^X%L~6Nq{a6B;I;er|q&bh62|gG+~l*a`TSl z_+P`s#Km`A!AGjGvE~4fY}ssNTwJ&Sj()Gx)P=>fuw}cs-5)N~fP;g>(R3%9=f(C# z_f&Tl1(rtYH4wDep5+v={*$@h0udFc(|Wv zw`k=GXG-}cAM<6y_#j=o_FMPAI|msXSEo;`8uLkgo#3D^gAu8~*}T~4EnwYpSdhq( z-)~kchXUE~ydk2JOJ6+co;LmC57n67i(> zpVnK} z3Y*SHoKH#bt<01k{5Xmib4A6)w-2WB7`OXm-%{G1tu{OHoac&#d*EPAX2C#Z^0_y3 zH`}`B$$qpel*^b^ZA+Y-<4}!xsXg2A^8DQ&CV2B+5q)t#WoOW+@;Rg-KxV{*&42?n zFh1U2EF7o4j@C;gjaUvw(8Gh5$LT1*7Y3oBj+TGFal=c*%#0R@wF}mJK?2VYAKY%v zBKbY<>cDUKdq+g4#taQf8h!oRSoc;Ide9D_gRiZ2o1i@7p}?>CT1>uAZz?AavgOG* z-Mh`8l;X1gg;*e$u{>RHO9a0;l86}oD!ihlCZY#hO#c;?_>5jn1Jfw0@_n7gtyFXXi_npx#Ld3kgBRe~;OBeQ|pd z^Q4>n{Ghoq#^EzG5{By}iw2)o!~5 z?dR{W>Y7iAI5ak9eB@6YJy^;=^!fp40F{q{?-VjuPEC{;=Pz;Jlmk;~uStq`;)9ux znW-$!!JBv<8`b@yWt_R(nh-RXObIbDIG%53D3GC{AwjUt%o8XAz&h@>ZnQA}`cBGk z=CBMKJ+xwT`V=p3s_2V)A~gquijSk6ANUHy(Gm_^vhU&<{_sv%mU7-CH1r zsO;#-mdKz99o|3vV;d1*#dh}_gY)fvS*6a-D)$@f2m($yPmJT)0h{z>exydrC1^24 zt@3p)Dk}J}T)pAAcfejWWlb>vBL`dp+sCVg`!;Lut=VE_0Q2#998Eu^Z7y#^MW^&)^fWexR^9<}sPi4OSc_df-O_$!36v&~@THi^VdVOd1EOa_~2i$)+S* zwM5&aQ*4dSK^UK|rxk=Ihh@nKJj}?g5Az1fH4sVa^OHp>jeq+eZ7(8`|NQ#4>^qc} zTB?~+&}-(2b|TRB@OLzZQi|`@(J8bcy|V$Q+%Nda(mo28nba_(hj&K35 zb@boF(tSv{- zB$vNG6YO>dbwjofBxZUO|Axo;WH}O*Gidg!LhV*~f*H~Cwz(r*xr>Z(_pI@!sX^H6 z{nx7;dzvTQ@ARyffml!1orU9pj0WM&w;liK>nFtA6Ls~4wd?=N0*FkkMLwgr6S!Od zhJ&eK7$2r}ufFLqBW!Yi&yN7v4p>=5ZT>6S#rw*^eKBA{i5yvsZj)=VDA4Gea4qctzc;Ak74(_}s z__o)^% zenvc8zq-d_jHn;4mc+5Da%Hl#R+JIj7?sKtVjH4HvQSyzYR9R z@JV!&UfpZgf4X^gColN?^c=%-vpwT~Gf#KXQ@Np&(ahhs5j3qc*za=ufw4ij?Xu-i>%q+rmhIZ8h zxaN$L7X9Q0h1IQfwp@f&TIDiy%siJS^3^4z4l7yA?%OUAMC>ROmEI_=HS`-K73HJM zdRvb!dP@eY%*H4tylu#?uLPx?w_{aFcKlQ{sgC9)&b!iC@Mb^0LSEjv|iQCsEF5wJib4jY4s{cwKu=7Pn#PckBeIJm!(P>=;`Q?5&b zULtR!Ypcm*>eFp=owP1i)OK(mOY(=B5#_+|ThE!P!NYF`^c^p4Wm>MBuWvG! zU9Jgt(rDn>T5BFafHJ2y#|zQJ^V0uWqUWvNJ3rPCYpG#yDdH663Meq(9n;*1#9^Vk z1W``aL$d6#vQzJ7d@5>_48*C?(s}U>-O&9G3-l3xMI3yj!q1$rC*_sGm*rLh`0iY7hT@ zO$5utE(>sKa%BMf~I5ExJ61<3*{sH@>OWpH64tx||x6w1tBBemJF!lP<>- zs3-ASaVLBak$(E}un{_f^qzJ-*mJtRslvi3iLAnY5ym}7UV?(OU^~s`O-Yl>XYB;C ztGdruIjUKnf=N>GdJnE7N@5Ttp6jQWfC65lWA)ORr#SwZEVJo3vl-JeuQG(Q7ALan zYZPIP!u5lGm&IOOD-9~fURkEf-bF< zu@plYs-mJ2187@g9j*Ep;BQjq=5(Omkol3CzE`Q*K6e=cDtAQ*T6tjke0Z8ir!$@F zN%rJ)kPGU2rT`pVT+Wit+p)Cd9WFeSAP&qm{{p$33w_;4<_Fn>E!{=t-@Urbl|Wd9 zdN7fb!FB#WEfJs~rzR)k0p+dRy#9_iGQ1Os&+!4~1vMwo|9Xkya@j>6T|iQ z*&Cr4)0=5&@GyU_zf>pAnQ4aLehtGGQ!F&6%C<+_w{O;~*J96O{2$@s1#ae$Ph0@~ zF*V2gzZ@DA8LW_y5YQ5V9TAzRc@+*qYlSmNX=4Snx!Dck5)y_di`Dh%i+ap@mj_b- z!zz>Dv-d8|f@1;z2i(oTcCI3(F;CVnTOrbv}426=!=m z{jR_?3D7#g0uAniH&D~5G zRA*;rLpahbWyMXch*m=Ed;c}Rt zzvPH4X-CeTm-yjW_gPq693BMo zw8y~3a`qC9Y;Bprw*(3Bjh}g{X~KZM(_3Ra>ha}fJmaI?n$v=7?3iCK~Eok7$ZP` zetr(L-#74Rgf6OA9`~n>cppqqTE6}MBCDft(fK58ZT&veWgE$Iy-o8mVuvf8$7$qi zE9#igTw9-dX{Ak)jR6GAPS5q}3X9PYMuB7QI>y_#p%D=%U=hXALL(rv;dRYnfQi?v zH7VXE&?O!>eGg_g5ci7<6p*!Fgs6ciqHrJslJoGiU)){ z9rP~xz3kj@+#rbKnrOe1Dp6;20`KE{Qj%d$0Frq-LqpA%Qmd5){i$5Bmz3i|7}Z0? z#Qf)0XZ^d&Ltv&}ji`Z4u+(eklSN;!{1#fpcE>#DYU=6OB(vu|^Bbm{bJdo>DkJ0N zCFFCvoUEHmv*JSsbv^z9!q9?(2Fx59sR=1+1Cf_)R4$YE?S}U=U%bI5 zkR&!Tn!R`Dp;p6!1M1_@#Kb~be93Wx%|_JjXcA}BAjAL2TI5mF$0dObqd;L&xHvFh z($dfvN~c)awKuEyI@#`&$X`VBYGh<2xq+Bqhe_+-kK*)&G$42OLv-F|)&2|y8Q*w? zwE5vUlr*$sjpf4Kw(5GafoPIw06k&!?w{6C1b|Z;w7IGGs#xItd$fzaF^jt8lDax9ppp*w!67F<4{X`$fq((O?z@F^f#rOIQmQvp zG79^HvfUAHKm0ka?Buxn-M;oEjuNTW`P4if&EwCeP^YetjkP0n$Ip|cT1*m>4N9kP zN3%%q{!oX9hmm*gHt}JD{ry{s+SX<&+D||C#?n|^|Nc^I%w3;7kn>3C>Jrp(7-L_o zw@{Ct74Uj+dAMG&iM-RcF|YtmCo-6N<5wCRskeJ+HdP+~{&L`^t>PZ2|9GXZub<58 z%Gz;%_AzV03Zyyox*+M?4g<%X#zbGC=2t7N5i|pgWntj@OqFXlmazNUVNa&7 zzyIIEs+D2ToL28)Kme>G(0`@mqhI zmygJ;{|QWH$%p0TY>+IRILf&icJT7_YGqxq6cQ@k@TjH(e}f7d=CLq9IhlL4EHQCA z|6|W183P)Gu8xvUqB!C2Px%|ndLuX)Mn6=c!5_{QE(sk>F z@>yEbikbU%VEnY4X4BDUvi*R6&gFQ3K_!!{P#L5dM+piuYx|X$qNtl2k23YPD=`@3 z)LpEX6g?8i^&dTWf{O3_d%c{hX<~fb#BCGN&j-YW3-}M5TicKPK}sXl80@$IT)o*9 z1dC;`EsO5L&ztu%-J^m+@)6<*{C2oB%GH2v#MY!G8F*4xh6BPrfm2Gb@jj%k1>9GfAd>nqr-D5M+9LE26EXlZ%j`HV&HH`!YZoTrAita zh?)DP8G5Yvk>Kd}?cFkEe*VB$Xv@GOs@OLa zOYtIhmUzbWtAULFDuS6NjMQ;e3{Y;m6eZ@VfJU?Kl3Km&1-N*Q_bE%1PyftEYcQ z)$Y3&%Ejl-0URB$L>EkvvH>dtZ;CzG&B=<1oelk(`k?9tWLQd^d4}|u5716TfCxkh zHq&4XnMjrEg-L;{%4ZZ}UJVCpO$T>cc6MxlWxTZr8|`_2 z&GHxtUK7N+0Q@$8tTYkq2c*i>+kJI&UFQWLb`g8e%k`o zS6oMjkjL@B2MD^GdC~kmwG;f><(W>$^ZGLdvH<9a07L*#PO$nHSGWm*XI>7gHT-H zug{EEGBymLQL$Grh#GQb$Psee!&HMw4ipknFs}-X4zQkYz5=62xlj%f4Nc8BD=gPE z3>q*4QpEa^3~mQ_Gc&WrI!HK()TLH@H>(auH-(_3pxYl| z=d^J{94OB|^zMtp!^3#&=2*bs^Z^%8>kcGJsT^>{k;$g7O4v+Wc(qYhk^{6$`U~V-P(964V_1L}}Q6#;QqN z+c|G^JheQl*d7Bty@-JUd3-r2QZg&jH4Gp>2@U?v1)zTWuIct43W+F{`*drj3_f?Y z$Wj@^mzwutz0P{6si~E>p8(*TT~vgKF7UwIal0LE-gys}NtNTF5^%$|2MBEX${W|i zrl*w{G;3fR*PIE~UH3E0cQ@RQ8OwBwD90nKz@71ib%T^%n9}sL>pnX@4 zjDH&cj+H8*sOC}#csZ&hmNeTmVpw9p5z9wkK6S3VBfY}?Ts4$`b6x}e`fm5Kov32H9 z)Xt6tFvNL6s-rq3P+-J^(1^mo=oyV5BH}rUfJs;X(kF0tnth zioLg|XBO@wV2i?tGb7frz!gFQsuPI2n(om}n>`-LtqM=Vpn%12^c7%>66d8|d(e+Y zMO_ffLIbRufhN11%Xr~a*tJmY7>kN#_|VYMqZm#$HWkk|NeKzQ7=9p&z@agi^5H86 z0YNE(ip?N+$sWK~Br-_UowiR-PT+|&6tO_X201te-42~^+s+Y3fJHJB*;b|wsv@Tj zCcw?h1lM`$t{k1-{7onaV+pc;Byt%%foMcLMZJeTJw0xQk~0uTWZd_b%)Ii3md4$> z6{VFcUl~_aJSPdfix=IAc|ie`P&s56{V)C4T=_+_m^1A-96~fdjLzA84m@pcBf3YlF@k( z1uigJWLu{AGz2KTp)c__BePD>B{mG23SYuWvj}ENZj41Iv2&qqFZcCdCgMlvUUBC^ z%_jka{qc+!1Pu%{a9V}cTP*Zga!@caO%xU;J1*ngDT)f@0^^m2p5A}S5*S!2@pKPf&O9?*}mJ%&vcpfV~C`f1Yx%03QPY zEZ$ns_3j6IC?+v6=;`r($Hx1fpvC#LB;`oC(6bj)7%{;e1a8K<4FBs61Fc=M?e7^& zv1Q6i*vczpf>qz8fd7c2#ETR+(XL-cpyS*H{(p^XqA`1TrrJwGW5wJciFbs+(|L3~ z|MT5(C5!jdgI2?9VKx{zC2h^KQqBf9htI{(W&GM^+Oul$!@p+u55_$6mBe+wsM}N| za6T#3qo?|eFah)x5)*?lrl01%y!!)>^;$acgR7>Tm3tDFFfmEslq|Z|!DJohbwa zNWgh)Rh7;#3PJ~eTzIdJy11iY2JK1=Kw?(%q6M^tf;9%fi}|%sN#D$of1RghB0EK~ z0(T|n({!OcNddnGh=?*qT76bHWP!X8gXz#>iQ4o47Ce+xc{(lX(fF`=Gtm1WHFGdy z0#qK*qviv$y`xN>Wt!^Rh9Fu73Z%%Vv?-%9-A>{-O8tY$oMdi?g1ai~qK(O?+(1sx zm^(w3dF8p5)P69hzB$=aNy1d&qmztrs4UVwVh(kBQo)*gKjd=NxIVr+Dh|! zgZ`)8mwfwH56JNW;E{6irgm?Nk%6Hsv3k8T#`YnFCHb$`>pGh>P8!MQYra0J z`Ol?QUm07{+&3$p6LM;hzi(aidsaI~J4@tAN@R5nz01n`Nqx=1$Ka`e0sGR1cO{fG z+CTf!iVM;NHMO-b?Y;-~ou*bPir#=;Oo43QMjklS>2CI4ju=pHP1S%HIaR4EAREgu zX!r8=XBVIof{B5Ar6J3?#vc>=wC29(Rq@1JJz#A@=&_?Kd3`$5YXhQq01_xt}ivw1R5*2>M(6_=jGX&cC8#pqKAYa&gr6DA_FSXZBWgu3OM@6 zk8`%PF&W+OJ6r%*j)_1&`TCHYk%TN+JozPr?;8#zOKH>}k{dyQZ8zzCMpvfkhHRbA zj_E+W5=aQ=bNhxEzYThYDf)Y#NHqD~Jd>ic8^xEklt54KjBw3`@*ZkjbN3Rnher*9 zTiW%z?k_u>uwnuoA!2#C%r3TA1Mk;-M2uk}LQiMZEFVh*f}&DF*;!~6NHFcGI=l?{ z2O{x8F{gH_ZWCZ=u4`o>^Zbi|5*6@+_(QCGlAQdr;r1lr^xqm)>woQ@I1V%U0t-UIpnidGxk&1~phly|S!RqX5^*cfC9E7W}b&@rYC zk$?R}kmP$l1K(?O;``zfd6%xQ&Hqq2ZJ_Og9cBNquAqR( z+6A_gX( zu87#iG9Qa8wun1DytBvcP8U5>zTmY;5xd`c@qezvJQD=|w@w$NM2O#4-3|X%>kR)& z@{hTO3JasXX8&IeEw+y_LKXuy@+{mLasfd>4RomWpxrg%<6jK9XHWb(3cADDfE_NN zvXKIv5#(F$XsN_6x9Y$VEHNg30)m)E(QNyS7A4~Ib*V3{@Ai8WuT_4R-*$Z;Pr0Tl)K#!Rb=;Hc{KyHG6-~afKtg>SgP0d49t%w zb!32Cn#>8zO@IFvRiskJ-B*`~#rEAC)x-rjF)?6;&{GqgQ` zBEbivhYdYvcwD1q+EqER#HM7O_f9;~_$_Fl-%~8myznriACnzbO56)F9{x9KUdnm8 z;8cEO0lEd3u@>sdw2Q6SHtIlTdE|ao$Fr(~M|)Yfa#ufG*91!`Fo+;UzDtB`jGpWUotpWlkm{K4=qt4SKLWhNiPXSN|Z-b(G z4NM{MyKEZNW6c&I##EsSnsETX&Q7^V+IRgAoDfn4bR9bO?3|kpQ06s&6uyZzAQEhb z>VVP#qVMK_1|o{SGlu~*VK4n78OB9#6khZj(71+QrXEKLG6lJSuBLi|z#@Q!7S}>_ z%t}~rfMKMbs;j8D>@t0Bahy5{M#9L5?QJd2 zrOC=E`;MgQ#ELZ0@|JB8(gOY+cyt74%cH9;w)hT&L*OZ;?na2`@$@aweX`15+OHqM z0ZLsxlhkV<_b6w8YXFTgp}eRF0x3Aw($Oi?95-SW!hq!>jDqh({~Xz{ate@p{hi=v z&nl4KEJl}(>zhS@0t1lS)}~XdWB3qgj879r4u+6@bnX(jGXp$Z;-D(0lK9~N=MfVU z|IdeksGg94l*%T{e-8q201&~W(os2c_dp+T8KF4Jg08RN85pZ|fEBIKjj}pq3u-2& zSS3&n(*wjwf9z!S)6=-Vp7C19=B$(^tfbsLyY1oOfd^Ze9TOHRB_$6#6P zcV*^;RYLQP|KHF1F#Xf`U#~(OCCduv-v?4;@?G}e&UpzsNJFzO9hG<9)}Ygc`GFNV zrz<0vznPY~GuvazMovm9sC+9s0c&xXX7-YayTmFmBhnPzX1Fs61It^wT)Gl_l$OA) zT*Hz*MMkCpw7=CZ{q*>JSWK#>t=XBx*-+C~-FE5^v^&{p1kE#S#^W(3W8Zr8>FYyD o(WK8uVDv8o8Nnl0#-9=BcV3x1EX$FC=fpsy#N;Nyy$Sd+(X-O2|r*WRtx&m6g3`C0i1i&vD-O z_xJz*p6B`fpVxE0`t}Xibve(^=lC4Q@gBz+byr=92%i=og+dYCR#v!&LR|=l|GmS- zhVMM5OBsa!!*rFqt&I!+`Qe&Bfv+#S-O_c_dTiR=3-&t=xY7g zZTn)g6bi+Rx~(9q?UlZf;q69gF?QbE=*eMD@=zJ$CuV{g`O8wAw)dDJqVG=>B8E&T zX)Gx(T>c(2eJw_*6Uz@PSoxe2uX}i5tRq?jx+>cQ|zQszA5ow!f-eI&WAU(X(2&!F0+CJJp0diwOKW46i7 z)Vqd;#2M=2--JZtjHxo*5qnIS_f)xLC_tv*$WiP0*KQHNH_WNf6>_uI_ z6P8z0IR9SNG)j{@L?MeaaaUVAEFpoElA8K>in0wSL5mr;En;cO^zFNMZ>p-s#@~@j z{j+Wuw6WNFMN}7Yh~2!e&z(%uU{@59UU^+ zcTuQVnYCc#Gv!`?_<*meshRNk8)}BaF?dz)-|yDd(IzG)qEM---(6G%-mJ@-@ZyHF zJTUSPf6k%dQ4@bJzvILG0)waB@`uvD*U2%1%gnl`DoMn`w&F*|u}Lu(ec$Bd3{^ii zGHCR?ov~%fQPGJ}rhs7~gTlDaWt4W?>q4*e`QL#bwsv+biOS4L;y+kn4Nqj- zjrm@`dxw25|Kn%76jgTZ`}bw9B+9Tqcef#mTfY17Azqp8438ie7Z)>Cba=n6QkgFI zwHr4M=!g=PF;i6|u6K6UIBn4riZh7DRrI1+sG{y_YFGYxo z?bWMS;h$}*1;vG$Iy%^0DebiPRLbRP=LUC@F~u^~%gy42%?PnWFU0WYIXLGj8XGeg zQ&O{TcQcucteceS>TTwYuRAYK2?>sj=aiL^c@CtqQZ^M&EnbhUa%pzk#}wlc!nk;m zK`QRq2E>^3)t+oNG=rTkwcH;n<+EqnUB-N<7?Zu@?VO#FeDwqBCFjxV~vY!H`jEvTk&%S}RdGtfxo$WWTI? z5Y6?eeasts4)2M=6_c{Lx#!t&mLX0UO$*h!+{Q7jre(NU^{>o&qyy;18|SjkKG@mb z)x8_^n^Q}|Jn2WN2c~HmjcHj5edr}PrERi>1Oai&#$~!K&gna;p2R0jXZ@W7)GcBY z96j7r2G_XSR{71~jmI_*(GcvU(Vg&jn^jZoI}S9qt<)7*{rl_NlbDz=RrU&J;xVDfOzb`d7F?V%4_xW<6M?V8!`Z_> z6EZR!w4z^k1}1N8*st#UsHWb;^7i)TqmAWD>l3bQ$iyFoD^)+l=rk>BF~6DJ&_Mt5 z=TEPLSie(3NXRDiX&V6?d;u!pUeO-N;;}eE;_eGkwbx|Hfnm&Yfi5 z{mR>6(cF*fD18sM!YA#iunF8cHO;p|Z1FKoaK>_CRoN*Bu`j|Y^fk{OVjzoBsBvD# z*5*pOtG}ABrmPKT4`-26eagX*x?ux4-U^?sYgrB zvY`G+o2cLRO2$NxGo3KFWS(q2)h!v%DK97Y!MSMqaQOx;#Ob9=muBTcv*>e&f7Uf% zcRRzeP;zw@uptdlg9Q0eujmdE^MlrcQsdXIUzayC%W3b9;_M~1@se*hB46$#$ffD4IS{ImD+grR=W|!il_^B;Ej)ZJYOsYOifMSU(QcsCXc#nU_cn9 z5VEjf3@esrB?NB^S-r5M-fA!0ZY?O6H_XDt^)y{hB-j)G!i5WW^R*?#N3i}|HvIpn z1y4L~tEqK{U=jE^V55xB&rad2)_Co{DOF=5H(BnAmHPPM_@BJ?Z_Nk@Q_r(=-3skA z4Q@5w3BIME5el2^74)dy!({5C&6Bt|#S+8DgjcVgs-+1}ZfF@9-4F~s*?b%*@8%{5 zrxdbym}Q##`dD`0`5A1wsM{(jidjU2dbvA3QYBYTSC?k1@xaia&h7S~|NiI$NUr7- zKI{Sl6ju_FkgX`)?4&kQu(p2x2rsnhaEXBM@=eU(;9%uDciJI2rZ>%1&-oCviIUQItneW&5m7k&az#b# zU%!5Bh`&UtBV+da_qeI4sb1%&2k^%C{zlT>x3#gmU&wSIx z-SJ&&=}~ZwVrOOy{QgW@!3thcjHL~SFU>71Sgu{e&GP$&H&$X4-_RhTnl4HPF@y?= zi6OME)LZ%S<6_O_fgh_wIk0mfW*36Cn~sU$gk?nBJ6w!pD)rg7E!3;TXY$*Dibi4C z_sW8zv~OrVHYP?PAV7+kK|BoZt9q@v298#l=eA+tqk1Z)z!QE!S|XidgUO%%((Y@N z?CR-HK78P6*y~46R5{SCxQM+|&v*)pq#nyY)l&)abHL0rqa38 zfaC%F9d&i8vGuhz8k9#jgXhO7k*in3;XnRZMY9V3->X9#FZCTwEGr&Pc>LLT$W9eK zNueRpN@EtYEJ{UA-e%~vh}A`7rWDU;aWgeW@@O^39>OGszbi(Om4J}Yyrl7uUZil| z+qb1qhIQ`WziNN{E!l_$Rpo!|kym_>>AO`nx!q18ZI04aQzJ5qDSO=X_nq2l6a~jk z)J9u4L7OnjzCD7d?Z}~ew(HsR=MP<7D@yyU13#Ost`>?22`zR+QPiBD9Xo`i6ERBA-I6O>7|fPO;;`^xh0{t8 z85C7|C<1C~YCSzYtH1Ri*^*tp%vneR5qmS0aJ=}D>zYrVYN}~PW_mgyDr63#?6o!* zzwaOWwA1f>Y2(=$K8=i#Burg1wXWIs^20XaT@a9>E-T7;<0^Oe$Yg66Anz9za{KM| ziFj?*{%|_nF+rkHLvo)I_3={$gxTmj_0OB`?(W7hEW*N7qfKRHW$%lME{)~E?!z6l zSqm<~Wv7U{bFr(vViOIMk0fRh6r{}0&(AQ_P*4c#t5aqRG2o>xZXa4FA||eSnA~eF ze4Lb&#KO-0?tX=ifq_A!$Joe7i@oqN>|6x&6A#b!vd*EmcsFc!6_syTq68UmVK$@H zNDxx>+WI;fIr-ObLJ-Qfwzj0?^VjNVufCBA?EJ}xn_ zqKu48@;IbeYW(slq=!?_l!yw&Au(MW$rtXfLlTC<6|zsCKkNHHFf@$Y*>N(FWM#eB z*Vl)f9jA>6eu>=<3TWk9QuxiBRtH(=#ocg`?ut`TAiln&IyZFrXW?BENC3LrUBAA4 z-rZ>@sXm&^B>ie(Ve#bY)AHKnxO?~RA-NY53+u0TPGKP-&C#xr7ajs%zVQ8Tg zg6t+S?oCBp-SWOl-0GEKEJ^DryZrn1TNgF0g#E$g%V7nWl z#2(-2fz!c$9FsI-Y;3G(z)4NtpP88%;&?bwl&|{W81P#UGN)Oz1YO9;oF0Yr@;79i zgtp%>S~p+&%FUbiXm%F}w??4ss@q+o#Q(iDTd!}eoO=&yx7ed$>wISjBh^=ecu;?D zK{w{HJ+~=@W+TUgW;3JM<}giBTU$Gl7OoJ|eb*}?ySrLiq0semKP< z4uoM?I05z2@1Mg^LMLjRS)0y|*45)5RXZ{SobEqBx)c3s$Ijr3IHeBL!V+hP%eobo zYI)t=9UY>NqE~(n=aE36@h>K$pfDTeu()9wrGODGw|GzJtC3)bsdM$$yIe_*Lx3Md z1J5MxX=$-M?{$Jiw*Z?j>baHvU;`?kqzWtSi;@5SC6zmO5)%@FMn<%IzPS_{HctKA z`=y#DOe7{I_P(T~`}ANw-s1C1la-!CQJ>$|1yZ<8?8c8+Q}|3UDDkn{+S>U14xN%W zFG#pHqCGZR;HdG#UUqbMFYhe2d!6o&qa_`Y_XeDZE-f#YxqMTBda=lKeuz_S)a;l{ z0j&(N6_;Ipden8Lv2i5r?}yWZKC|i?tkCVG37dRqeSW=6tRz=H{|gX)vKgl&(0;HCz_3 z{1T+C5+5e{`=iNI$qPqnkL9ig(d|?Zp(`sZMO_a00>nKCUv(+!(p(InGYj1RbjhIE zgXmn+8KZjE8Ambxa%f5l4JHoGamu>AdD?B~g;|=|3y;Dd{24bQ_aHnEx83`q@Eqk?BNr7=Of3ojARu9}P=uE6q)FTo+eY%?A&D zIBDPVG(GM9c;i->yOxERhCHF5L#nSPi zX}TI#x`leEl2z7WmW@>fX~tHyl;eTD`^F+`a9sHLM4TeVps54NvkrrouCC7 z==E#nyf&-73%h_>p^ma7sU&7)#bXgr8F$58)~$2n6uRn8hEG6HX3~zmF{NL@|fVvf?s*cXn;L9TFG3zpk@T(VqhseetN)TINrxYf0hwM2E)H^t z`OQ@QXB&b-Lbd4@0}Qm{8U36@iIeu0@ZmR8zx*WqPGVkdEn`~k%=H}+1a<`p^=f5ga}=>wgi)QKF>2h zfQ)Ih83JB+axAivw7J4n*+bzE{G->L+%~vhnBk|JI3&;H;!XzI{y8nq`MB@+XKz|L zs-3H`w<$&A+F_UZ&AJF(a2eUJUnhX0-V#AXx3f_(AP0;DZ*u)e*LCtJgHOyjGk#K# z5O-8}>d2!y-o@uvoLzlT;amHr)tMg70vRc3P*4!+{qtu#>ys74Hp*}Bu^nuaB&mG6 z$Bt%vY^{4hu&W+?!}IOE{62y2pIpD+IB1`=$`F6G*)qk6;LXX&$tK}^rBb(__mFKs zx~RAJYzjo2j6B8n7@qkpesvL~T`+Rh^#W2%S2yMEP7I>}Hg$iNr?Natve`x$o+D>N zL-2lu>1<2~IfLA`*mV!O z=xanmGC4fXYOFVXWVSqh`jcelD^*~55f6}igLxWEX>yI8+LSMgb%Qsv{39s5y&V`i zl2rJY`_azbzkl)`oc|>_JJbJ*;ezk6@c8k2NwPr4oF6~AuvE3QDB$eqHC~O3h%jw! zCox-dsLn2Zjmo`xm5-JXml!WtoD(lUN0Eh%?d_d$(kK1Eqa8|~ZQ#~jp^bevi>F4O zPkHsI`mJV3Gq0og;b#evYe}051hV@1Oc^64YI>yjtK=^NPvWKj#SICA~OyRJu zt=ZBLV&~nO$wxTQG2lD`vSn+SfC0OIA1g!s$1_C>i`>t&0N1P?9X<5gP0J2d+w0!7 z*oo2#*I%8zozu|JFl`O}5bi|+`rv09UNWIh(lPvSB(m5ios+RqSvDW-rCcHzirJ-q zaS#RGPLRLtG4pnDiw%7xQCaz|sUR&dFr=3*-6C#}20{r!Lq7K&)PkG`C5Cd(=#|=4 zYFK;KAB=nb$nfOz{$&n$S7Fdes5Z8lEs2FlKV7Yy^`$Z!q!8Xt0bp>YWaCPNB-Cte zxv02x7wiO3D99v{KpAyLQ-?cTzI-`Fz$#9Epq-<~`I{#T5pL~Bk&pqAW4Bd1E7AE^ zr$5#E^Uva$ajS<%Mig@5pAaKNrzGa9KGlhfVpt*-et%uq*x8pBT0;TogsSAWLHgRA z^WCnT68WDneD9X4|86HWQuUxEOMLkJ!+oTiH@=z5XE(-e zEl6vU_2$hLb4$x5Xac+A7|>4h{s+i~Bl%4Krz9{0z`Xtcg6R200LR(@UTWUIAMQEl zjWb>45Ng2NJ(91bsjWTob2rR)(6$m64{x{fa#(Zw6AvI`0bpD5(WEHmn82MCR_IsR zPu|21xs>`y6Y(QCSM7g*#XcWLg06C<$f6SM5UQ)mg zdQ{^iJ0WcGiP8hQ3jFozSr0m33oHS9wF&18^}xqW0DuWkBgV^a9IFHNLG9t|=GF_TnGt?LiD+o3;EU zRY27H7aK97#FKojJpAd5jH{RF=%S~lrgWz5Y;DCQcmdG^OYu4RMmKONGi%3N&rnU* z;fw%5@XbyDS32@lyq^p}J;iv&*a4~IFP3@%0N;QNOGr#y{3Uj%DLY0S!5@)<_7u+* z2{`c*6c%1O++7x)hQ1#y!3$UkdLe|%`|sFOeNtYO7&sPR=DY>g%)m2m%1f76puj_! zohY{;fE6C9_k7H)U-iY}6!4XTl9E~9E1~!K`LfW1z2trv^6VLT-tVoNWnu)35>WGY z0JekVUFy87=m*d#gR$OmR{Z2>y(HzP1%8#|>{A3)!qM?M+3hZ~?4!-wV4;sp$1ovT zq4ewcXfvGf{CVinkR`05&@Lky5-4*pa$7sq(Fty`!5a8klspJBg5~tOS;pAmoe+AJ@?}LLmGWUp zlNaXQS7ZMiQNU|?&Ym%MC*SsXtCCAjMn=Yq)%%N@sMa73bc-xI(k-PciOe@|lB?u? zy&C)e{k7x(eM9-|yP`#qaT|(4IK&(&`acqOw7z%*Z35 z_f-qh5P8WI@jJA|Q_yM+eiNK>#V?+^@LJ!dhPAM!*;>?B`h89++<_o{QYkf3i7x_? zIzb?Yh4b2Zw<&n5ejRG^MtFKi#@*Hx{ljC8=1|xFe23v~@QVKGS$&*hPWH@~uty16 zr4%4EL7xmdMq8VlQQ9!;HE!-Oy`l(RZmKrD9Rd?+pyENAvc>=B)feYjo^+aiNf)C4 zWV2IwTQY=*PM8^@4LZdxPSUv6ftagsF&D+ciAw_nzA>}|6H)qjUJB63;Z%d8nz}mi zpUvsWt9M@Fx+=lV((4tyd=-aV&yr`1(;&ZKHR=c`G@ANG*PC0>?>T$>D5fXw-ZfO)_2!lMgKq~!rxm!cFvP+Ab}@8U!?#iqgu4Sz-_LXTz_pUO>< z;Yz~i=jR6zqrKFmonC6rr-yT!@-P51Ut5Ktk5|r>5?6^i&zNH@uC*>6gs+but{#5n zgq|B|t5W(b>;F6eC5Gc_E&a7(p!*S>L{IOPeD_1@Up(mjB5D`he&{ohwKGbSbt8KV z8w#}pmypm+{B0>(2m=EnojB0$W@^}N@yx-}fShjxyix)6l}M-p`hjyoY!^c#NjrM~ z{CwUPhj1;Dbm!+~uD61UN3KSX=YzyfME z;ArHxzU8;xF{TMjE7aDzhmkWh@jXB#3I8HCamPx&R$|JFm2!rQ*n};ReC`?<#ls0s z+omxKY2V(^D`W`W7Y1!TR&n|3-Xd>oSC?Y4AdQ*f=xPrqWMw&kOWFy-f`V>nq6a(F z$dB_rG4%pTm#GDN0gT^+fveh>bj|{UGH0(F+xef)~%?&Z@S)E^J3ucxf%CJ#K1+$}#Om_-Ip4q6iKFDdZ9d z!Sq@t$Yr-;tLSm0^}6n((~HDaa_)vJr2lCIOBJqr6g5_=?XTg)Uf=jC0U{CTY-9KC@$;gBW1I$75F^H=*f z0g8Y-PRh7n0b=Pz%S~y$AGKZi_AQuSF{3R2BdaEZy@c$KTtzT$HNvDo1iwg1`a4Cr zBw{Truy_r?Lp8!G038Sx0WcAqVE0+F(}$;HEb2Ua_RQ(;FAIp{6Kp7XO3*jgT!PeP zH(rdlCxSaKSCNYM&o`55YD6JX88ipXg1g}Lch)v%fG3W(pyM}c4j2hr;Q(U)-`|y^ zQ;=UVse!yk6M2mi&_i!SN$J84{@1rS*x9jxEdZ>rU&$%S7^^6+9_)ncf*+=&tg8B! zosB7H9Ffr9Yy9WCKq=L@d;|7tbqE-R3$ID3!^|K9ON8hZDSCU?w&%;@9mr;U2@`li z1XTUnn!y^STV6z~v6Egq2)|WTRr=N`ecySDfPRUBFhFbvz;J+#z^8G}27Pin2Pnm> zR^2pvPZh1yTNyl1t2)Tp0qnFzMLRk=D(5gn*5P+AwZGiW9n+@9D0EpA8tM9B+oK$8 zX~857$K|ICXKxW6=oxm_OxG|is3#1<47;@K&wFjqL1}m<%I)WZ>8B2yy>U!-J9s8_ zA0iA(x}h)N_t?;FR!JDvdbR;cESNt+HWd5sNL=yTMU8)ieVd6E^vmMHY@LGL(FaDd zCF93xA?cYf%=0R~vqB}M1!T7TnGHQMr0NwjICwWKBH~^T0n^Y!P+2}=K}ydV^uwB$ z&56ggf|}+<`80F|4SUiLcAA}Qw{PD@G!+*tin-7$Z^{4tCY*T$rtDw$x-8X!^`DsV zqR01M^gn!+idI}9l_Y?T>dp?p+LmXjz_Wso@k)RDmThEwJg2E?Zv5SEn)lCBov4r( zY36IM&en?vv3QfMnX{)OA$RFLUT-}TE8Gy5B?&1h%B%?uh@|z;2ZeWZD1f#IS?%xC z3&soo^=+&qm2fEjwsOD7K^spGM;sH14>Zcnh_YthJ)Un;_Y?+gxm$4KvcJM@5547o zO%XO9+s5%+X7YiuiHeSPt$QbP+k<|%be!|hA3avQ}Xs`wC z0>~zv(n9(JYFQSvRp^WdHddd~p1oj>e72DgLDZz4u&hqBz9I}j5W*54TIlpKNbbef zhrZ7kntESXNMZeFZ=eZ!!g#S$_Lsy+uWAhjY)AnB(Pvsad@r11ov>hy9%vSfTHD&n zxw}`EsQs+EJHy&`33kZv7H=}aDSnvM>sJ_y_{dVpt0`xOA5r2yKsJ)0Qcuk}K>|0t zhS>n@3XAUK6coS&U5o`xx*WtYQVZgS=L2muPNvaM< zZU-+aDoPtbCXjy6lECK(!f(oIIk*l~IBbApIKohXT_ZgLenxQ^fMqM^asy(U7wd!- zH@}34xel9SZ!a+`Ir4Kduk7#yF6>j&=@Eb1Z#?l%qIXIvN z%9(z@dVe5hgG9+#Mb?>IfV;q7q^iy;!l8mnfKLm48bMlGT7&W&;BW2EPh9CGT`+S+ z9A)yxfybB`DK6>$7EKM-t&llQ&DBekBbHtcP!}U2u%XeTLjy4vFMaj|q*f1GC0|;J zKVkb-V+kr5zD(u1+@O6#>T-MNh4O#rkG=k&_;phgBM3qsb~P^2sMp2C#naX!V`Cn4 zL{j@js_d?-qGdzYZerP?&5%DVA;LZ3Clm~3U-CQ6Z`Qum)X{r-quQapmxAN2)*~QM zN&4-v%?RncTfw9RmY+NVg5Az4hZ^Toac-(R*Adkds45+g-|OQf5MKbIGN!&}D(c_y zb)t`)n$kT zEoW=z>)8N_3a$(~bcZQFnCD(YK?78nFX>>jGd}rJ!1^!uQ-v#e6!E%t@T%t9Z@%6` z@ETNN8b0HoS=wUucMx9=hIb%tXZcU3havvs79eN&$%W=^apbkP^m&ZykA7J@tGEaK)*Y~tPM-k<;}bjXH>$GR z4aY&<0apcHdnC#BZ+ZtC*kTj1=uSjn5I>iUhrRTE{|+sva3!%@5Y`s%VOD z|9eOY=>QS@^z7NviwN|_YAfV=KUje*6ura0!Ex}S^&FXpo(8`bJB%sD;O~}+>6IuRYEo5jLfQ15r9QrVGD=YNu zFlq3DzUk+XIWGX5 zZUc1Rhz$w|52t@^Q0^1WgA72_fYKram(N(@%fU% zA4(q*3bLOG=oAyBCKtb0y2cmqKwU)1+`XHivAN@(g}q3-0`IcRD+M(K>`)`)?C!T; z@;-VBnrfT9Fag8w{>0pKD`SRMKtlYicHnSzamF zMUXJXEiEkxE7`kyp77Vk-OI-``||C!Mc4r#b)}uSV5f|im0_7dCFs=YkSzPvwGD$d z-@8f`SwmX*d>X@JF+aBEhBiJMd(8(N^8i&J@npwITSsT#} z+E|cLuPMgTM=gC$-aYl4UxXMM6cQmghLa7P3ly|P6=!}&gXTC+t-LFmMSlvUNCVp* z+~8lKeBu}-LLb~L7XI!Xdst+o?`&~})xZ@gDMm=NhiCQMJM$+e#14R@uSvM$$MBo? zrvytmI~#tivRhKakyURU*r^VQsEKkf$|)K+3sTIHH84nTcP=*g2L6lH`DW?<46#sw z<`dHg%_)X??Il+I%vY{p2yEAVCeZQV(Ti}lshxce#o>v1DY2}nq{^51h&pJ*0o>J4 z(#~iCln^5H~v9wg!@xwGrKAK!jI^uPLb4`oA{#SD?=2@kjdS|836dut9P|P zZA?Kjh`Q0y*pw@sG9HiO_a$Pi#@1dVw z_`Nsu56pegN+Tay4!exEEaq2Oc&LqqYD)0K4Tyj)K4g z`wz~7^3T>gSaIOfqc_vmelg$R?{N#<8DPKx!hl)SQY!2)mQG|4Sf6^!Q@wFgugJSl zeSqmA0uGk)ZNd%>)KTzhV1sYzr&~fdFn25x67(h}Cd3)~h1y&QUt}UtCU6)XVZggB zOdEEbsLTc?1dr9uT#JM@AiqMEMe*+`M=K?RA*~fk3*`zwJ9}4t0tcn|boUMkG(s~< zzCu`MM4uTC=fgEzwEvaM;5}YR>FM;`h7G#7zuw=y#+;-AZdnN`@=R=83I+6zdTbxp>m)Ki&N51zDk_r3E!jk(?xqm5;b*AhMD{MOXbqBJ}MHHXcj zE3j?@9R z4QA=rZ{K2qVhqd%5bX+3#Tuv)!f6!?WXU(8`#T zKRbW>bP2$pNq@Q+82CDY_}%$>=f>j6-@S=Sy9f1E(0eUbO*_ipyGJf{w92Z?M&9u2 z)AehdoHnlK(kF`~NT4CC;mL_#!{Jgi;M_Lws7_{YV#*>J>Jbg-Lm)5s0h?F@**cFSib?A9uU-y>WXp$(sbR8} zT5E&ufsjs^5ZGDnIqx3~@H(+VXIP@@DN8}x-L--eQ=qF6t1qzLP^(d|+g(p!$v_ez zrN==1UK=GC&eM48dS1WXG;Jw)^(q!(Ks%(x4RK<=%t2?2KTrdO_YXzRUMeUkOcY*EQc>Aa zCzXnL6<;R`H;yPKEj02bCMUKoo~2w7RR4M*fTnlv-VK6gW*ICkZFC=4X}3z- zA3;+Cbeb{v9Kgean8i@IQBoWJ7r~hg5LD623ye~T%;B>EHsPIF&v}5ZiWA^o3j;sR z)ZFLNR?TTN^v2N58qzE(kj|z;$*HH{eYotY-g=1$+Rme+BVr-2v4Q_nt6{f`u4iCC z2~Diy_&<@+S2hZOF74n@^dLh>_V6j3z&ykEZ~a{89(*0B)oM@ro#f||7Pm1`=YAb} zd-y0)dV0bIORp(Nvx{K2nrQSD@j2LvMQ=9@|NLV2XJU~UoU;7JEhywp5o0y5;*O2` zIvaD1bgYUoD5r|sKlaCsy04csgn-=_7{J$sg@x^yGGMJ}%ZZnI>b%?qNF0sk{jK_%+9ENE zfQp;+dylAZAE+#z>kU+%^T%-ei}8UcIn%#q)Z(4-^E9#)t*x(N6Ve!upTXJiT1iym z10l^1I&4w*wHJ{*8;oEYmDnHAssZ!qZp%dynY`h}^^)c;u-y1L=p}azx8h8j)IJ@rVp-h*eX z_|dwZKplf5%i%&ItI}P4{pk9wy3fEhSo^4|AvD@%gw<*cz<8*HG>{?MAsJ`Te!umb zdxMB81#I1jp9XBksQYk^D+UJHBx*$|sR09M+uYPh=#A(|72d0>eoWDuuh z^8c+_a4L1YA%G-AXt+2zIVWJ&CU2_gosuY4kq!aOM{Rx4^F_?15Iew%KSi`#Xtf+a zCagN{$YPCy;ak%8&%$=#IlAicJa0#Cxg}h;sMii+s*DA^mJOs!ijdt)(vPK*(7W*k zp7|m57O`)GHyiOK8iVeP0E?+gyIrKbfdX1|8gDN3J#Z}4uO#?97yE~i>$wiZ9C|K}Q@d1011*^xJCMl`&+ z25<0V^TCqEDKYs|g7mi`So>nYWR^0twT0_C*F@%q{hzkA(T&8;=*f91Uh}}f4gRXL zqzAfNP5y;%8q&e!9qGnHMKImukM>;*r=Ebe)1Yej|6y@2cRZ=^!a^0+)TG?k)-DA; z=iT^vDtN1?qC1P1CHK?(Krtai!NR>NOuyjNnrJ+j zyIy!hzbfW}aU?MVdDWvPztjuH5dKz*Ihqq^C4r~WKoWF08$|xGFgGuaWD3yLov(h( zbg`vB18r3?4-SJCR4Ih)xaBeE+yl@u*Zcjw32yhiOrNKml=wP&dR!aeacc)FdM6+^ z`#2tMZgbSc-@PBxjo+)Fwpnr|Jw;^tHsP~5KPVQ$$522v?ZE;3f40VN9v(EG_nF_k zjCTDV6MJ@%M4|=Qukd|fe9B+EpiKM0D&;<8g@sX`5y;0KzKpAsN^>gkbGZRE#Js)+qqPJ0Ez$KvXk1PGFHY7Nm8M zOF)vn>-R6R&_V!40+Zh^STB~xjRH4+PyN}R2OHZ{WJ&C^gzTtj%;bj0!7R-O{)CRM zF8pJFgw>asosqn8(_A_4qO8ZpL@=EHj?PZm+A3%ia8*TLx)TJ?O2P z_U-m&-?urFb)|c^S`Y4+ut=Tmw5v~_-7so+q9JucNC%-;>ZB~xk|AA>v24ejZux@_)oUGqx1XLl)(Xja+GoW0Sl)oOs{FrcHTM_v1 zCJG6}9ygPT*i`mRHqwEwv3Tz#*nkT*q4LR-WP_$boM8tpe;5S-b4zO|iInx8qB+Tx z#P|36?|+c2A(`VpY?BqG(;lSrgGnKvStgqN>(yGv9x`FWKY-0*K0uE7+&|Mj%~^!&RC&gac3kOkK!S{0 z4jX82T{zfh0~b%&kg-!ukmRGgL2u7aGsJ&@25T&wR_48D3H7XGmc>2D!Q?7=l>NK> zJ>h~;TSPuT+*wqg9DdIEzhwQbqRNYZu*YPv1Ox=gsHr2NHS8&d#W04EA+PVLRtUT^ znJl+Jv;sz-)oh)~-NK9Hyt<_*n2Z7T8L&=EgZJJJG)@bM4-2qqI3FQW_n?Y|f$jl! zg7LU?nM^|p8}v%0wxb_} z+XulzZr1tq5}1=^U|4SVXI|D4($IprC(M7WNIw#`*6h;@PTg{IJV?~wA`FMgHdg3# zkTN>;5qa++I9vH_zOo^{5y&6GIt87R6;_&nXMmfeMjZ{27*d{a6%wwePYah2k{Y;0kY zFwH4E4WlibF@}qwOh!*Y!x}!ML_|ac z#^o|d$<=i)Uyj?~OhtaEtEx(wOaYY8T<)e*%VK8U{I_eYyUMqm` z8vq>~-Q&PmUV46Te#R6X6JzdDn|_sztrXakQoxwib~t7+qhn+EKN5S*xna~&Ekiu% zbo>0Qq%Q!$2XtWYdj9#FJuuJqaHj1yCdvXNk9rK8xXu2{3&5k^I>iDm?1awF&N9Fd z;&ye(eiM$f%-J_`v-cD%t9~v0YqalkF zynkaym7w5hGeK`=9>y{2nNUO|fi z6w(klAfVhKT`;gLF3JTQ6)-G#^6f^TtfM0@jHt6CD1zG@j5U>-7(?^U_ZB)lufQnS46AgSTGa8*XXPfc*^=lOL zSR%;CCbSj66@W`O`_Gt*V6r4kP=~fIj66PGBe)?mJ%ZUEtZ9JaGhUF9I2@E0o(Asr zw~v3CN4lgh6<{1M=&I2p--KxC=#a_Kll_vwOLNZ-)hz;On72s_=ih>g!p8*#*WF9{ z{X3aMy8aPL7{+{|k}J&SK&RAyz=0iyCQ%eW&8L5NBPiMmh1=+=!lq>7iZNcVrgZwz5us6Y*q3M#{54 zmn|5*A}&7F#R+s5@+bEm{7n~$nxVh6vT@4%q*xI&1+DH{2W76tL^U?mbR+^-Mzd zd(YavO}gWm;-M>-gX_I=<<0QvbMSjEcM+NRNf@KI+kG;aal4%+IlU@guie%a@!r8o zuioBs7=D+XpO1%ietJWYR;~U=^5<_gLRYb>HPRxU%v(l_BZ7MbF$2QrffKA^_;l1( zDB$d`RrX{>(d6eXH{2Bi+`tz70h9RNhOzslyk66^Hp^;YO?KY)Kgjmno)h(1!KJ06 zh04{+O_d#`2=1*fhr2cYQ-Wb(5#s*E(B7G?j}@gz`TOKCm_hnN=2Sj>DDO>Nj5?Ml z4&LEtAZrQ-?hDmqkFR-+vc~MljgW~S!%96%arfJ2>#x?Ywev}{5`tckv63=SERPst z*^!fzgYOP8xy3L_*0uYCJqHZLk-$VuG1z^&>~~o@idk=|=tm;rbORx+{zYv+BVyD9 z@1n;VC5oA!p9~t%)`>DRNn46}4cXoIxJHYcUWSra7&wN6XvE#FfuQFE)T#P`nyP9C zcu*y65;$4-!O5|WZezw_B?Af5&~INpdq62M^ou>bPX64;)@X#Q@! zwUCa3LCODZo~t?a!yIA+_7I>k69DKdU)p!wkjekW2XMHtA&DUlDko_e4Qlc~_7TJr z-zEhH3^W9!H$Yehu&l|Mm}GbN-ywyeCxjsbYj+IrNi5K6!iY;3rx!lx`$lB+^f9fW zIMes_7mhDU1iSMDlVtJRj$ES`bwWY8SkfF?8tR<$GRzDTe}&g<1}q4IYN3#$=`&xY zq&xvkJ(N@RMB)4gO;8%c7DA*VY$r?9iyPn95Uv6KArz8od2Tm zCQYEPNPxiS`tK(~AlE{ECJv|E6-*=}dtdy)WiV?QWj}D6TQob) zAAMg?;JTX9GuPP5`Fh{}g5rq4G({<@bxay9m)2V&{trebAbX=TZPf(0ZT z;bn13v#xlhyG~98A~P@VC|h4sjAM+|w6PIJ=4k5$59h~{Y00A$4!7^Hk*B>1WrdYi z`tYwrl`N4XmtA_jF1Pt6ScjX-0^tz@hbMajNQ+0ts#v34`BEhpk*yBZT4&)yFv0&q zZ1frQh#l$kJ!v>FKvjFC(E=`pOMPEhr~qP`(nhHwSJD+>VJa{y{QS_M%!c48z`z-d zx7#?*@bK|n^m1|;U;q~^%uc#6ZbS_BO<7SMEIK7Q!h<1j$ zSnj#4L)*W^8w*oYS$4nxcPd}YN$DAb zr!^8C6t8zcrbc)#b&;Qy7Tv(5AnH*h!5bK{UUUU*gdUqXiBAHvdhFs2E6@@7IE-Jahu3AB#wrz$*g{`*^gY z)0y7TZ}%1V#h0h2+g{M$OEmfjy(}__s@?m+>ad|p7b$Z{ z9k5ObWNRcGYh#!uLF^54KI=RHS=ubK0R5BNjTN?n5?uzvGymY2hFxqV-)^`rv|LC> zd#dXqPlAB70+(Lpy9FbvCXkw-IJE(vAL=k&1-2G5fYSgS%O^#Eumd>)K_XBXZpF|F zec~Ahwp14h0wW-h&L400x2Js=mJA9U=)L{*t?%&5s=;R;%Rk<#Du0nXrWsKbaw&0% zc?qLObh(Ei1N}5Kgn&=LkovBYe}iZ|^+PTU{EMArl%(ACFBt5#>SXlm2Cq6)WFF&u zSC#+zl|8TTPe3Nez%U!f8T0Go*9Z0T@-oHUKg>Fe*b2c6GKuB40K_G= z-8#FLsKnUH;5ox$tGX2K#qp4vYR+DG51!}n*xr7n;KK(m>NY$O^FCc%2t25tpPYf2 z@sd6I?p-KA5(9fDFfHzdI_YK#w6B;wKifY4McBS`>((ugGJSphzrZa^@$)B^6cLr(&WAM_dXU{ailc6=VGQ}FHj z_3MAZHr14!9UKUAT8Dw>$MbJG4s?Ll`9ANv-RQ9`LK}NhP}1}XJf4j>6)q((Cc6un zXiGixkU4%<3!#Af_5lTg%@Qxt2?j4(oasRqG^>~eEw5!y0`}IN+I6ulT-5guH}Il! zTP-ejcGnThI_Pm}&g8%z-G0sv$R?n4Qc6;?ar#y3XY-rL7$ZDELJ<`7YKce@<=eM^ zI_+!6Et4`aZHq)E6b?7nuW!d4ip2BaR~OGdZiMMk7@~2z{=64)WrHw+OTErN1Sv7C zyZP_;G~_q{O+0TBdiZaeLsTaT=%=IMYL5p@({h_=h}_ z;W-kh7DVfT$3ZNMH2)Selja&@cf*IxZn$M;IOj@{kaOUII+41Ow6+ z{y`^<0f#0CTOWAX&cx?9Bg#j35l{>=oC1BPJjC5QjjTA>8;OG%*BYnA5YnvW8V@VI zhW#;pgt|xoY4BDw71GPr1e}T^$`yz?2tOzJi}7P;IX8?T#KKYbCgQ=;DbfpvyI}&See>z& z8#n2A9itOHIg-~un8V0$XO?P1s(9u&5?^M6(L z-SJev|KF!Xl8Q1;Lm6cyISt7yS(TA!$vlLFi0mTSyD3>oRw|*4tZxRC<8E9~zb2KTdK(#55W(>=E&4Kol(3ehd;%q}!f= zf%w=Z^$R&1cVL$&H|5YSa^10Ek)Hw|dJlL6 zu9wNO(UJDSCi~*haUxxCK47U}g+XUswWuhx3QJYWebPiBLSZ z7~gI{c%#~B>i7d>pX}Y>&@ZzRUH{a~B)79{yfxE15<>zG)O~(uk6gN_TLy|OVtB+Z zRpD&pP3*+b`J#Yn>lj!y#2;LkMpPX|YgB{1&7mejfa$KVi(Yy+xfZEfw4VWr+i<Wzgqz zPMzLRDFy0_K(-0-I@*4rfenn^DuuPevCwYzd&cKjYr8VR$D^Sy|aj7+?6Q zp58~*_0}#ab{l3^S#_#I@sAcUU#_$(^wIM5Ut|@IL9?Hp{)$iRq8x2$Ontl@oY5@0 zbk0tJL%R2T`6Y*DKY#eW8{sGb+t99@bA9mD@#O8QSJ#9_SmM^KUfs~%K73TKsCXyrctJMyd@a@$ zSOF2+l6-i8*KN5vuIBmq+&ik}tx+LSd2y0#c4f5&%PVv16+ni;vfP}f@MBtjY! ztXqg6{KU;-6;hdX`PWwPu*Bxq5tVJ_xJ%)~i5hN(LC<|$3yLsK0im9ADs6iBRIJAg z^fWpIw*m=&@4&%)QfL#R8vEsR-wmC6M>C+BunY0c#n6KL9Rq9H3vaEUQB~z*5344P7$bxN;#!jDl%U`Vwb3=C1oF^FWGq5Lx|!NTa^$s+A|^I_v=9B$ez;yX8hMQ0B6{R zEcUVA&Yp3VrCZI2Pt$0Fsh0M^!E3oWZQ6UE^Dqy|_kGTbrAkrx`mW&^uiyG`v}&q1-Ceny{GCUHSIUek(MOQ>$MTiIP|Z z|LE<>=#QJ~KZq!9tj);iFy?B#{Hjw{qjO5oazDjh^4K-lF~R#%P-ej*d(S#sAsDnj z*3XH_Nk@38KZk9dR@UX1WbDR=eBZ%qw;cBbY!EPke!=KBMZd1!x#?H*ql6dZzxsB` z$QJZQdO10`+b*VZ7 zRz^hMKyuIbW3VFzw*5M&@zN+JhAQnPv)Nwe7{dR=H6-f84~ zf5NgCeSqrW!^eAdox zM1N;=#53OHtxY@Iq-PynLed(oRltIRYJkT}Eo_~C4X?z@#Dxjo;yfGf=h)As*&W^QDd6{ z;?JKKSuM2coKtKJ)GpiPGq5WaR-MThD%R~fEtCG>&OZPk zW&nDTPHSr`CYzr(-`^V8Bi{4 z`6WN!ANJDFVC`&f-rPQgHe&+8wWP87J3l*v3iFGp6zlKUcb3K}N5_#s+U=e&08Fyh z%F=QIuiCb4Tk+A1zQ_%G>67gs+2(N5@e0y-{Urh^hr}v+_w28snt{GPnT3krnz52= zYVXftH6;W*dY`^geU-E$qNKDzz7c?$MKGLMy4#&6x;TFD@W9sqpI1XK3qK1z7XcU# z-x;fWc*tVm(nUBB=oSEiOgmyUWemlxX&|wz_bI0?WQoAC2#6SaAP%a_HF;$Y-HV|Z z5|R%vqat3wwMlND$2x9iB_6amr*bXLetanb_2=L!dp}oOXZO1BZ%t{DC$zMf?Vp7I zdL73B&-h0vSR_k8R8QovOy1z(actU-0$Hl8tr@HKyArDalhp~`+1X%x%a zYAtre)-+yUTY5FbH*pBJe)PqVBytjK2U^{#84T7Yy${9(H>W^`!R8eNYES=ULLWMH zm$vx5PSuwCXvhG=?Fb4AA^~Gi{)C~WaQ(g)kUH!UvWA0h=xHE_40~r6F(LRRIAk%g zVfMKAJQr~6~ikGfQV1*4`ol7<K*$soiobVDwv zj#pE_4tFH+Iz_K^gCY(9f@DE)Z1Mdx4oKeCe$`_GDO$+&O5#1g%uOxbbpH1X`h`A)-{2 z`lH%4XC&Ux(alv%w0x<+HkQ>QXT$|8EfO2owOql{klitw%1-O8g4b5wy7>8VxQCZO zz;oTmB6Ey~IT+MW&(7Xxa(v`o(3-9uM#ZO_QmgG_0utU{9hi}Cp_0MyvGb_!4RKr&w^OdPX<^Iao(Ceg=`thbEmDT?z*$ zXLp`FBZ#mWAXk>51%7sVBsZ4^7RsnDIhRJXu;6~^cuB`~q}4_po_}$P7N84~H8&PdZ z_xHW%J5lzBn~0z`$aIbB8}2}~BqTpT9P2tV+HdEoCLs|M!`czWIetc;OC$Q}zt)y) zbRa}956*&PhqB+eap}v?_m3DDgaF%hKA^^k*45=V;z91(qel{b{rw(x`FQ{UkWvUz zv%S}IkDRBp6OuGX#G)jV@9&Gd0ANk|@o`VPeCYtQd&e`$ZVaB!72(HLXh}lQT_r(cA zQ;lL2*}T{!Dmw<9W8nUQND7gRj&swFu4%nT0Jgz;7#*sNloW_to3&1Hny9H>DS!)= z1+hwGww}=ZVY^jaoMZum86-HCdO!BdC1|{k%q)F0L!t0ak~0EC$&#=}pDXAMq;N~& z@43~{3jes@uM6^y9^$`r`4z%L7IRi%86!nv*3hwg=-aTUWBvE&^Vx}KttnlULl<9y zIL4+Y-fS;ciPqHSAA{^1~A9hf?ySo9) zKxe-N`HsVmBDs6@xUdZPV)1j^)f$TL57z7cfnwW z(Kfb^U!M+YTJ}iT@<8GVVA$He2uNvs^^;(Od@Nn)a9(gkl8+4YxP6#VRge)H9Bt0&WQHSmdX4ka$l0(h< zl=!;|tsU0E%X?O00f@xg5qLc02D*= zV$_8V=rE()YWNDAUU8)FUMI@Ltd8Z+{{*oN{H!NSIPs3EDn4-TX*{0X--u}jwdWjivD8oeQf7R;4d7*dFwsj{0J@O^O}WwYOB>puN?62z4p1l%^CO<20)ey$6Z@uJ zvljvB-)(G6M|%!>RvBzVF<>f1ed*Y4SAPrI>S{>tjSPGmH?_ZT1)B0QM*{ICW4RY6 zt}5}e1f((9C_Wz9h-@C>(!{DtoI9vrDlOTB1^y~0H-Ru@HF&c;M7csFe~2~g%Z<$0D7QQIopL!Gs$;XgDSk2) zQta3yV9!TohOP)Va_+**7?!*9l=?~g)6L-==gs2p+s!L~%}N)YUgrH*NaVrJ);jGR zSA`<)MEn!19?F;R2^Yz=FyvKr1$JW+1Z{FAVsgnlys3*JA62_o&nJ_Xm3y~ zPGUHmC+4ub8v=x-NT)NZ%>=zKBX*>5i% zTZ|S*=#Yd7i8%*49Ze^}AuTOM3f1Ta<3h?=K9G0b*APlWoCR({ASHdy zfl^)lfsrB%G#F^)6*&(et8DXT#^954^eTRZOpvD78eT%5Gd!w4cNEF1hdb&h{PObc zLUaVR$bRU>eGINg1HT^Mk!WL}V-~`p3+Q`DK-W)?k`5O#ty3AmbP#IWcCE=Vqz~M06cbwmHBqIwv3(i@>jv< zAlG)Yh)6F8wA{8)_{CsfU?IYDWCWqdXfi8C5|)I)Ggj0Qcq%n;)W(a8L$YtLOmFd1Z6dwQ+ZHg`c#7-7o*kXKn1}ff?wr**x2~DY5WEwn0L?pRd5YZLn z`oZB6M=XViG}}RA1!0Lq4n5QyzPPAQ;aZ3hfl!MHa#NC@40Fghye!L!W6v$223iEU z`PSg*-e4W5{EI)^_Tw=JEB@-lv18+ZCx%w8Sn+k>U95;)rEWQ?r^{|oM3>F;=?_SZ{r z4Nii%B+wHswVJ8x_m9r{N%{IRIOgOje^KX>AK_NvR~F_w7d|uGaEslc8SX4_yo%58 z9!!aLD>SUb^&I`v9a~wbeV1KQ)r>ak7nFd@|=34Rg5gi2}mpTW;}ONivI`4 z|NQx_Ju#ZaRdh#J8-<9Kn>fp0$2{w#0Kya68<#e%IGM)&KMxMxfL6u<{jdGItjENK z4R8XJ=%O2N%~|9X0}Qoun#CA4zJKqFCXhlQ@{PA|HHlZH4PIK)iN0Ft$Tx4^RAQgL zcKtftX%Xgd6~6&)JSz@~H|kI8u(>-{~z2l3<%VQ%P0hr zpxjGO*Z4%T5wY(|MrIpx4o=PbqiMc#Cu0GuQ{7ru;h6)?TKd)1M7OZKI_dr;_ zm_k&COIK}F!TR_#ywRG0<>35e0c82aDU6MVPz@aj1(N%heSO|N2mo2X2XqWiic=V&4GD_{ z@(DjLX39n&Q;I{hr^JlUSI+lD~e%jTU!Ej;V;NPB1ICt-b;Rju!w>~nIL;? zq3*q4QKY9SHv#uZYe#hsk(orePxf~c_agS*e;_tkerb_XRW&s_CKf4#>2yJ&xP=dh z_*SLIfhv+sn&b)zGN9V28B-{{u02zyZX=3PCTr~zmq{h?%6PV&(dW~y;CJ;lRbSs+)kQPuN*Y`50; zVxmki?oHjhdw!?auB_tsoAbRpeB=gSWH^c!)0P$BC=YB$W~>%(20I*4INYH z*|TT+GW0zz0S;pS7p5?%ue4<7Z8FLU$ikBwHF6_a&jwzcx>jzw4>cUh;rN70nCpSi zT1Ed62;xLqm+_s0AGmjI`Jmn*y9KfyZq!^T0~~$Ks3g!i=}5y(eOHlvFA~e;9drDtuB|c9u<%+-pKA`S7`_|$Q)Xu7QSCsE$fN(8q^(r_7^-ytepl}! zX6Ro?R17MuQSD%k$Q+nEHRENuNglfB^j2{;#fKyLeCN#EzylDa*l>GcQ^z1@4<|es z!Q_x8pqk)JUHr>8g)(t7Z?f9Piv9=S@ide+!D#D<>djd+c=|CAa|t+W03tCkRTd+O zBtzduk86%w>)(h+m={6dP(wrLj%hV;i7gA+T1 zAU=UOzb;j~wbA8u#&gk=HJmaLld}p-Fvgef*_m0(RpWdJ(4Fa`b2t~N{R&y*;T8h; zgYAjWKJn(wB^Wc{bRdbl>I4or{Am{Zwjw}M;k=y@A2;*0=krlz7ZO4 z?6%rJ^>|N;&q}_FL_ZTLKfx+(`w0hV`276&b7j5`xM)bk2wg!azjv~Hi0w%F(MP|w zzr0*S^AI_vN9ay zisgt2Isw(hX*cqo5NwIg%~(;-=hko}9lc^jeGthv)GQeEU~)rzi6(Qm@H*=$^PibN z?m|dH@;*=*!5k-rif4m;KC(PejgfJe3SApmhWr^l4avLZYj|HKm+ z6cQ2e#iAk%xLR^H=lq}F>Zo|rOhPZd_u2X*a4U@(u>ah-%$DkcW9Uw()iVowbwV0j zThT%l6?>KSVZ}CqkLn6iL?yF|>~Q)U|8bn+(EoG18FU&>;dm!Phob~`tv@R45YT~F zKri!rcBJ(*9V9V&azq&M$+__J^HZSk$@{F9a+IilNEHpv2cLe@P3F(44Xj4zwra|+ zy4^d*n46(SUHARoY9KFV&H_a~;PcLmb~FqyV86*y&HRA4n`o9iZ&(~q1SAGIB7zcY zR?5-AUo>b^fjdQ;Yuw&$QYwMZ{3jb`c?pra7i}t9XyTXyj*qX4^n7BE7r*teY10^cB_d-5 zMMYnww9v!5ZFh=N6uCi4!ZSCk!fw^MYMmZGgBeHw_!1^k?w}?m^`*p{3X2`x-hT(Y zi7k$J@6oytV-@IJME?g7I2@`=td9Hl?pyPDsJ*7LLWFAG`k$epSpwlHdvGZV?4* zJPoLfCJt(Y4Ydk&J)6Js72IV2-|~}hcY@3D3b8y zljAZ-DdONHwd)^Kxe?1s0Sw*TOL}yz2W^#K=#o{);uVM2pTRT|Q$qa303%2o1{eka zj-%SwIM#zS(%2IVDhD^b^w0OLM8u4>#oErU3Q0!|W!~PdY3e~M$e?PG01`A1P1kuC z$^U6OY5xyB=}Q9%9%{H+l1bK1(ST{1TS6Lj<2pi?a54F)SE1nHx=Lq7l`IT>(Y?ZW z=_~O9me?c*oWrnV8-l_7H|4QcgD`ZzL}ooA@zKOjtAxSNf+kXquhLd}Rujhvd1#le z?!{9JtHNY3Io<}#&d5aXX6Up{gw+mELj*3f>)43*+5oi(K{b^Y8{lTZe&TK+0H26n zdEo$&U4BW_gf&;|tc6KWeZ}(sv*rH3^yoMuWF1i6*GJgfs0q#dfhZo>v&~UJtP1ZI z`-e|oV%M>@?-ip_>d!_U&~mZWy}`FB?En1i-yezwe4?TJAT9oiU2A{<%qgwiakofu UanpI6BTPA{s;%-w+0^&H0B)P+2><{9 literal 0 HcmV?d00001 diff --git a/frontend/src/lib/components/graph/svelvet/docs/images/custom-nodes-after.png b/frontend/src/lib/components/graph/svelvet/docs/images/custom-nodes-after.png new file mode 100644 index 0000000000000000000000000000000000000000..cc7a80074d91b0d997865b8e0dd5da0b7622e41d GIT binary patch literal 40395 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 literal 0 HcmV?d00001 diff --git a/frontend/src/lib/components/graph/svelvet/docs/images/custom-nodes-before.png b/frontend/src/lib/components/graph/svelvet/docs/images/custom-nodes-before.png new file mode 100644 index 0000000000000000000000000000000000000000..c6e37ae783e0cd603627e561ee20b98ae2c7706a GIT binary patch literal 27932 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 K8&vAK#s3Q>dPE8U literal 0 HcmV?d00001 diff --git a/frontend/src/lib/components/graph/svelvet/docs/images/custom-svelte-components-before.png b/frontend/src/lib/components/graph/svelvet/docs/images/custom-svelte-components-before.png new file mode 100644 index 0000000000000000000000000000000000000000..f0026b36a84a7aa38dc5e58f8d7afd03124c64bc GIT binary patch literal 35362 zcmZs@1z1#F+crFOcS@I(w4}rcjG#z|fOLb>B~k-OBOoG3$tVa&NGc#mcZ(?DkW$j! z1M{!(zMuDdzW4t;4xMmM?6t48uCvy}>1wN!5i=1(AP};9cVYSv2$mE0>qCeSp81XL z1^+^DeN^rl5`sU$g!ZxE@ipH&CcXw9j=oQ9yd5A;?jCLq!ajE14i4@<&K|xyI4w#L z2nXaIOxZ9XXY|E!8~=W?8>B|_?Y$NYTY`-p69vsLYLSrJ@zTiie#jN*4afx zdD1jEQ~PKc-;cR`D0%29=AOS17@k;Ca<^ylO@m#(tf@u*YB`Vpzx5zrgh>r#0BYbaJRK7uVaG+nnWtR|5JM7R_M*`J%x^1pJ zkVq9yn;ScO0hFZpRD`(1$9T__GYSQAx=5o`b}ugRkT~Js)GNO6QpXW)tQ?$y!=j|y ztiSzK`=sM9w69Y~b{2!`*tmT))p+&Jl`MiIRxpwmmnedxgz{0&f8U6<>dVsJp&I5W zDG_`loHq5RLF7}F8*_Xfp_9XxMCTO)J=%q`G8@M4*B;!_i@aIpzS{2;olwR3_dB!i z>(mbAp7-?mtiaDq(ytFqq%PAmETj8ePxmy6RjZcmTUK^_klI(6!vjV5E~Mb>XGJGh zdzcFvoPU=R#(Um&(g%aNB1QTNGj4hI#Ohm5cWT%#?;d8`x?%>O9Gu5ks+RcGJHuQ5 zkFzN9q9@Zm*y`FYb!2`Ur0`*KG0j%>s(9AtI{MWdJ_q{nQ$^j?p0IiS?yU~77a9eS zxAR|oMDG4Rx$wcS)Ea|ft`E4Be;O>U?U2&H_hi903E;IfGIGwsub40si)Bmbij;0B zSJk6E4OV)W=wM2S|4fBBxd#U^^14PeL*AQX10e~tYM*570w#7jS@{tLkfA`xz~4ytDd~ey*au%S)1s4D^c98+ps|pCTh|YD8UJYv`ACNJIaZR=g98kEuolN z9O#_wqEdQE6aX%r))=t}??CnYfsdGaUQpys*}cn~8eZtq&M{w8amE;pWn>g}v{Ey6 zw(FA?S5`mu0^YyDo(Jbh_@dD>a=WG3n?8V!&XzHH_qMyVdpozgbafO3SqFbZPOdAg z7Zm2UbisMdA9lmXDAL1?0gB4$0dQiPJA^SE?Y>kM6A9pvmT^i!OK(3BE_QpcM%c%N z>w-NyCnP?kLDf{t65h-y`F+qC>E%O;QRs*9(`$bwUZ<`K^)KQOr>@9>&t$MHaD(;D z<>(Kmp$r<}u~*?`DJdc8Ojvle=_cclCxJXaO2acHXNOmx6@lIE4g;{JS_LAR_Rv9I}Xy-3J)@43E4?S)yg_o5AJR7 z$+OEWP)+&oCpT&pgV%}vTM#{UaY{Y4Q-ZxiLqloh#G@n+K0b_!j>iA-;|I8!&xo0P zcnKpusC@AH@0+iXpjopCzlAba-qb$RkKuNv^paXM!-o4mxnMN~S%voy?=h!@cZUx!5^=3W%CLNg`wYOWaMuQ%oH-BWfN-#Ia2%XMybd9@mGBML(*?~ zRaB(mbE>Z-!K{}>R!0>=)KE@hVBY(`t^{{5ZK7I%3(swv__&D;zt2=3jaK#o-b*VI zCCAR^apy_Cc9s;RGfjzm8QEduBDaLtzW~J$+g$o677-pABKLGyLOjWvIH#VqVp_U7 zWSRa3n2p<*`Z_N!;S9w;Ke{u+@OL$1a{8~EPE%D~-fnR5z(PfgU-t#H6+Fymz8_n| zW|mnsQ)y#-Ob@10=ii5xA?LQZ4nDEow&TDd1LNiMgoo{#D5h~|f8fF_5@5(4E@Cb+PcZCIjwkp>3&%o! z|82YfE-z4Qo%2iZP~03}uH8X{Ww}|TN7bT*r}kcLLb+3IvXXgj10@c&x*0bZZ#-q# zNOGeh(mjipwBv=6j|dH}SCID1klJxh!=M_kCs$As;@>Z>TqUkPVf+-eNRZ)UXmp34 zRxo32={M_HGQGFo^-*e(XrxvUxx;O`veh z@A72o_a9Gi9P_88-QnFpkYl|l%9t^O%h&EuKwz&6P4L{T`WD)E5XmBelj z6k=h~ioy%)We^p`Nk`#L{=)w86N_&UuQ^nD{sf0Tgb=msZ9OSApS=o6R=_>QX?-Gs z&!snC*Mk3>$a-60KIpYC`vF4KkKM;a*mIY&^^Bo?_IJ8>Gt#N!V3fpB@1^s6 z5@B5JpjrANUyVV_6~5q}u1Z*c=NTtte=7O-6k$~4h?J}droD0GUtb>Mj0Y2cJ=>WcK^qF>t}Ef>c)Q|TKVVXqToxCdxAuRa5{gr zmzj0SgtDXRl|TjDe1U?PlokIu0+MqkHBUiN?N&npVN%D*mcd~j$9X(a+3l`*Q_KfC zzA^KO%GnuGULQZj2FKn=L|;y|S94L#|FOeD;#*!aSlfruRba7EY=jijjW^(Qas-}2$z-P0oqUm}}A4_M|8 zE3l0%yJn#Wv>R1Rk;{BbV^ogPnZjOkQP9JF)|FTAd+VNXt0 z!W|D;IX9{=u3uK2V8~~=dRLGVx4txBg*9u@6X&|-HwwR8 z?3-6SA)=WoogjJ6O!2AKA09n{-nOcNCb{^}DMHF#H|x+`K&fpM*NVp`gOqaewy#ni zBZn<}5|K@Celc4foSpQ2>^~hQ);3S*txYF*p+n1~xoD~6dCcEse^$Vjh zQ{U9Ot(&H4R&OG^M`tRGQDP_cqaW%OW|`54G~>+p4a^tOWw~2AR}3HenAB_ilNkp)$B3@(IIQvc9}_ibiY%PX zM$yNyxgo?E5@dgV;eD;kO2pI2wlra5Zx2}FobRA8sW|M-pK5k~byQ{*jCDH3-KwXK zqrqfSmo8Q7LvEAE+sgC{3GZV%^dSDeuAM`maD==2tJJk!g3U?w=2Y-E>Wa8@0_Oy41M1Yl+CV;-L8O_h|4TfsDV{s{)m@&*cJBB* z(DyKHULYMX4$$@;m)wx)@o67Q;_W2>kw^x8zKYsn0>FhRfg5`P=KKmT`|RIi^Tokb z1P4{F1X|$cQ%_hbA2aL@j+MPTz6kRfAs~lVU)(&l~QOmpWmOGR;S=P9kFa z48ls`xX+ooc$YL&rMBgcGAPV_gfFU|t_aK*UvI5-Yn?vZR`RiHgI89qh!44%E2i0J z3Qt_-HBN{s)BB_)VS4S;Tk`U5x#Zt}3JS_pu8Tov>#+#fBQr9TUVPQ7S6T0O!A0X=iYFmBw8S`t$^}){Q$;({?W8 z1W)hs>(RK`q!S{<`;*k4^IsPe3`FcyA>>5tN1}I6KS+FAME(~B`xlV`C}tN{=tA5j zOWHv>Y~3(bPn6u7WE>C3gFb*O7H;-OBFE-^&;kr-_!mLy6&TRosV`3}bQ#`s3grY} z?-9Uey7x5nXl?qRmv87A83m|-XEP-181cWaecFXNNEfLxr!Jhun;$w@P%+di(dzg7p_tg71`U2Cf!O zdcst$f1Ujo%KY=K67<(%m16YQ&KX{57+?Ev0cf;dlrDx=|IbYTmh=XH_L(6q9$<`7 z>M#4=e^WCu;*ZxCOX!oLgVkhY6>_F&5IKpb_Py6F132`y9__o>yMk%dzjl4-rT{Od zmE}bHA|A_KaxX3>&vebj?JutQnBuDz{DmaiwfGgm;sFY|FZYdRTwxdXrH+S&wftRC z$XHj09&U6!dxasoH$yI!N9ZC;KiG2ZA0+*;?a7icthUJz(E9nkfcRQ0;<1Y3_wE>d zz@XWuz%}tIir?&6c|{XEfSslj&)qfxyQyl2 z52d9YoG~mBCPL9tkH_aLJIFgWDq4~_Riilob=)~w{E(m2uFf8Ut2HL}=m$TG?>FT% zCB+E-uxhE;lFp5zTXm`F4mQ0nI6o8@hv)I19**gVyH1L!*9W67PkR20=8Fd&Ie2xjVXa1vWf|kmbv7D`>)$~PE^Mvai1xF`t->f zoL+2~ZHAbQN;oTm=aGv`xPz%&sg}J?_j6_$@-<&38a{2`j|7|yN+rI3%h0q?5C|qL zb^c_XnGv9nWG!Y=8BD@}Llo12H&Ey6 z=f}xN%9T~;U0vw%&5sovHvjZ2K!Lnv&dNG}$^PjM}Z`427vSb zoxCY`t*7g~I7$$8bD_-n>dC`rvul{S`#M!)mA9Moz9^v1czBQ*F0MRfkI_Ig2qhuz z`)5ZfcVU7G)c+%-@Mdr^f8hK717yX5?;)r?r&k-(J@scfk;#HMfXiZpC7>@EsaqXp zE$+!WJhE4QBKVVFS&qhNK=EYynSend2X);1ZU=?vMwN`)ugG7&9yS>9mC(<%N0C(A z)S@XVX$L@-)UdRKxI=9I;LIDpRCqw;)*Jd?fS76W8UT5smU}Y=+Sum?d$w&8qkWD+Jb8-T->OmO2t*=_K& zW$2j$7+ae^-`<%t_zJipyO}+{hOewRDjW>n1mebIl^p@5tjUOIqoq>-9DaY8i2pKP&orwHBA2PA_CuOX{;S*!T3q`>LwZdriM73V)1`+x{#u!hAd^ zgY(y$Sii!=yXOB(Ri~7_Ss7~dw4wYeqi?Sp=T==f%Qy--y|G;3HaH! z$;sHHByu5(2FW7MTnPta%z%AX&4cWjl~5`K+m>WIye2s0brdPRyTq!&b`MeHF>DpKY!LQrqwSt zY;!Ge$%+Mi9%zojK-J?_;Cg6w-^gg~*F&Hb)E{S*Z`|df)@KI7o;1)c8_F3r@AFXq z%l@a3leJ_cc~%f+Xiuw4239M+bTIh{S<4?9Xng-a%iwFklL>JnYmxxKJ}vEzQn%;g zl2}Nw7ULKCD|Mjj6F;!D%!yuhr4bbeG+C-I!3>iyq}3o4z3JwPoSm^_%LtHm53^y^ zZ_BMtGbq@*`K>~hS`t@RWOPXhMq|Cf2xK#$YO)CF6palNV^0Cu zs6#9=l?beJmKAmLdRn37d4WF4)R|gda6px!ge}{|nLq`R+14xpL5H71n|#tN$Z^Te3eXf2~!g z!ogu{40p2*`mGt~?v2(LGuNnE8ktWI7r#ea^lN_Z#t3#f3Qn0SuQe41hq|}gOFt#{ zET-fd2!JjwFatGeV{LJ)fCu8%ue#3%%@JH}Y_z^?f$X#pC>+pwUUEsBzk5~bts#i# z`w1tjn`zY;jmP3A={dp<8NlC0hitDRk>N3HkgHWE*Gaps($-&6LBUx;5&uV!+s}zp zDzaLZgKr>PIb*Oxp`PfF){Tm^B5wzkr@u{IJSxp~bA22*l+7YM7b#kt;JBkbhJCH< z%9OY%iC_`|jhTxJsGfof-+%tR{z;D(4?N)i`+yerUeTC76;)2_BJ*sRobRQIy=SY9?e_Se2HNFP0nNb!y#%MdH^2K^?SM= zEn`p5O9c^{Le%B*gC2FIyiPg%H$a=jVFJsvF8`8(lr-gTfPx&nv$d1L7izqHa7K*Z zd@~cEDbU&ZDcQgp+^+03d%q9aoqRnPCL-Mo+uuil7GMn% zImO!#P|(lLjZ}y2TB+$}-Iruai!bYi-2<)W6U)BN8Rq4%IU}jg|CA}Cx*VSNbds?< z^Hj5ULfQ+s#t9ICDgQII^R`KpDPeRfi8uf2<~I;}Vl~yLA7rZf_ii17=~iA3fIna8nP2N<@_=e%QsY*r+iRL>}p>ygA$)8 z*U;R*$X?|20I-|9tU@9KbIq|xAkq_iW}|49mt()*t=EnH@LhtrLk!g9w|6Ba#8K+? zKCso2k`lvz`UvIa>wk*(DOUO{6?sgQ0KYkj4Ez7q!OmWWL+&dAWZC|TE;Dg%N1dOR zy08GoMFn)T;>17Z+$piUfRX`0eqV=!vNZyaq|&A%IwAz-2X66&Oe!H@#pl=-WQ9Ik zIL|Y@l{W%RvP@0P_BnkxDsA>%P)>xWe|Ik-FlHFe|S5fv7Yk!W|{C?;;J3D{y{dr8Nl*1XM zk~G-}D4HQ@#l#JkfejB9zd>TGX)mKXt)xkLPBNB&Pfij#BWVI|{kKz6l8v6nh@`%7~UQ-7z5eM?rbrp70PM=DWfuPcBcc{B^s)#qQ*7Hc)a z%j#5t`RK_!`UQLe09PYXs(WL0a!p4R0JOud1ppdVg}%C=$aqJZx39}X)ybB}A1|q% z&Y=;N7sqk@0??9QzkX>LKV!7U5Z|EQBvyG{D=VwDN0d0EqOFeNT4S^;SxnKK!Q|6J z-C6-K|F8P4LIW>8rKPO_+rRD*&Kp1hmkp9;5+Uwp|@i<}O7^ zt!Ka$rb;msy#ASrC}NjR45q@{P=3El2Xj$ionoXw%2{BE`4K zDl`m$)keS84B%lQzdy12QZZhTT5#cr7g)3bO<&+ZPXW`2Dh>w0JQfHA6I7#sJC@oM zIB(6nQKE*!B>MCJ$pSPmbwZ*rfDBjKWA=H-$xPk%pB(sNV2OvN080~?fmGaT!0PFQ zL<6YCAEC+nOeDSqAXkjjoGdVc#_PaTl<6#MSdhF^}zaYw?u{K~w-^V}fHo z*zgLf0DD&)n++`C=?+A0r+d?`@pM#PH7R7hjd5uhtMOS6^v#<$ll5NQjw87i-^5bk z(*pqFy*79bXIbDj6}*4zjXxb5Rb1=`FmAYO0%>=6310#UP+9@pQ{cJ}2QA`G!TAd~ zy9)_Sg*ZiykjrF=d>DH3u7HjIfml{JZe|2S>} zj7xuksu@!Bf!tkMqK$T{!DsjnZQN<4$LB2i{oOi9W2Dg8_`tNrV9-L-CO z-jdU5k_Q5252HnC3|a=u z>6&~2FByY^_0rAF4NwecS6A9{9GQ&EvFuwf;L{tGb(gBezMWxQz>-be2lCF^=;ORO z6`F|7u(ze9B&@8gyJx}9?(T(ZnSV~edUW{s7ZO=z*F%n3*Xt5wloSmno?aRV<-C!9l2=nh1EerUId7gs zKALC5k83gFE09hwu*>xLuSZ&aVda_gpPrtunty+ zI=T~?y}Ia(=lP&#L@MtnMZWH;piryO9QziF^hnyd>Toe}aPCuCofrPn?6)t?Nn{5Y*TQYcc z61~aw*cniPquf6wIPX$EBkK3z4ZL#$j);S`U+d}P&D7M0 zQU|s0ExH16otkYSg5yk4yg4-eF6@12>3wJ5C#0@$QG-rV1|&rQH(1Jm2Lx&?L*iz} zB~VmBEM&agA^`~19Bj$J$L9dP@n6B-*Vp&<1jx)0X^rKyfEmPflgSh3?^*~xgDqkx?T0wvnlA; zg{}4Vc2LM-F5llr6rJGLzys}6f%49Yj&*Y$%%rS-JR$O_uC8O_$hI?)Wu1)~TPS4Ej{(vGC3=af`u9|@y?}B)8b9_N_XyK_?L5DJrBGRDs)2*?~9); z1K|h619f(R-YU!||E5$1crQTnw_)|Qc*4t9ea-o5>hoiUTKAcFUH-_?eDzh$-4ysV zCOn8}-cNpw_)zGgq6}1AZaTIF7hNvqa?-TqLYH292|OfOhi7wau&)KfuU*l*jvaI# zVbXb1=3prWbkvdK)M=vJ;&drh=Y=NkC=eYB3kxF#6Tq?-%narNMa7frs6|3{)AZ}+ zstNLHJPKSj3)pOVF*NoO9Ewx1>+_D>G@1*x*OzZiT+JhZ2~k@s4O#^*sBgk3l_dll zCSr%kUB~ntnh2Z>u#A1Gt-Y1#9jcUi;(;_kP>U%kkPj}!tSN=>g8)vUV;Q6 z0VU`r8{;3rDKOr2BwgmGfkC60R9PmgJLtrJUs6`aGG~g+iaEr*RH;I}V1zDHiqU|okuyauo zV!Q{r$LU~PN76vXv)By!rPVgVCh^Wu-o5%x9r2#&6D%T`ta4TnCoM37mM=6N;K zWzEwAM?f<)b7ZN2z;7~aeXQd@!ynoUChTPw^wq~v3Lv*^OjM{F7|;+=Qvp2NopW*R zHjM4>NSh z1pVQgq}Cr`3`VtcPs`=`7#SG}4(b!3F~$jff(<~Z!+RKzw}fb00Ljwt@<5Ofv*4j6 zCL%cj&L8t^$AAul*9|^O!n#q80K)$94-()>P%3IAY)w{~Fdj z;LQ}+0Mf&gE-3+v4zZIs@K(OB`L_B0<6GaX1yCwJkJc5W8G(|mk_}q1p`cM^lPIbN zTr15tx9H+v5r2ntYRLLH`G7KBQwYXu*#6p-YHJl~ufi+AoEaN?S0EnQyT1A$Y16#P zvZ9hDRDo)FS0^Y4jF=c#3L)(s&c9uQcInHYc5)}?j<_-iyJa2_TJU{XmGUAAxn@%W~75Do-|NmvI^x!x|~wM zIZLC=?~I(?h{x^_1IAt?Cb!L<+7`ne9Ojf8OkL5kPh9Id`}|kKtsg&srogM;V&MCG zeF34f1H|6z9=47~kCw#eHgCNSo%cs9pR@CsJu_}*RAAE?m4@7ZMpf_y_#&Vi+{_Ga z`6HVbqClbV$X)Wx!SuV&%ca8j1Qsa;9g^A4X-s|@=;{SSRR&{kSQnj;P@S!?H z%mihifvTU1J?`st2^2JwT(s&t?VII0w>)t~1y=@2J*;!{(VrauXpvATZYSolzofi| znEe!zcj}dJfpP^~=FpdC+Q`%fIUU1}WYKvEIVTEX2?9mX^OzGB05g?$@``*uzJi}V8bGx@YfeJUPHqaLQRm0V(Jwwl zHKLTn3on34J$-f%CEYdN*m4RIgYBya%kO8lK5mri7_4cIbzbbWB-6Mzy{m}lDalC> zLh}zPe&hw}#N`y)2yfq6s`DETD+(e11m%@iMdB{m$T(%^l2hPRD%qWXks3@tmfpUL}N^ zfhOsReX0d{mq-d3gV?$o%JbC1#KRR3VGu~2V4)xSTBtAZE;bfOD$10^o?HmqML;@; z@f;+zQi=O}$Fm0PC3I=;2%2+0e4NA~ThOV)o2m?C74lSp_?I;gY?5|UGyxmVr6t8D z@utV(U?gpq)N&!FQTB{aMCkGxzL;rC<~B3X<~3jZpU}N-!z`;Zq@atUj%sTFn$GTN zY)oyTfJrWroWy<4hdgZ-5D%cjD>g&XGW$T@S8X|R--zLm{U?hzS>E@%2V`h(D(o+Q zI&Z)SX)ntSbu1^u#L03{6G$9Z?_CXM|;<5fG)8SySy4~NtsU$*T*^2|qdyi6FQjf3mnD=(>@hthDOSrBo$mVP`KBlY9>gTOVlv-%z4d)x zD;@(@7QVtcrRV4qlWT|yoQJiL&!1a2ZcIk$8uwst^JpSH4_lc-}5gmrO%&`#b zP=|noBTI-768(dE{=Svt>XUD6w{!3OU3I^zk-*Su;M!^p8v zJ(l&Hmr&TOW#4SeAvPs>)j^AoxR?jl?zViZ4;pxQw&iYe!D5c2m7$81an)?SaR*_V z(X2k5gw~n|vuN`38?=qIjSj%LsBmEb<_)@Vd1{@eFYULzCiUUv|f)nSi0K}wCWk`?ap*w6wI*GjL37Db%r>CZ>gItbX|xGes%8&3liTH}qUw$`Rr zu@`wEJ0H`L>AIm+d)!FAgfab-wCkY){sg|8*aes*8-_T?wXtj^4i9T*GjLGjro`p# zh5+#ZSsT@q3&IWa?`aC?`0yEaraf;kF*8$v6v_{(gTah-bO2B<8s zby#@QG~_mH96*Q0&^KPtuif}3h60q$vsgK5&-{z7?r_+ZIwyVTTTBd5Yl^; z&#xg~q(Um85y$=y9P&ckWXzUQZrjTbD$GQ|Df{VV~Hn^yD7>1E7QLLtRQ)90M_ax zYkj3P--ojD?u__`Ms(wx;6HAr5JrF|x?B6;hkHp$mR)L1Yv~6{;LH-Vv>{dKGKr&_YRJ5?D_KYz z?5hHsX*{iXsHwVh=XPR7R&Vr2V-{;G{!60zo}7t|v~F{M)tx1|f$#G6#cJ--uh=yX z=}kpGJlD4^&ymJ$^P*9DiK)qy+F}r>2Yi46D4ZCu`|h6`0Nre>GQ^HR#!w?FxuKyU zQaV15BUAI`F4ZV^9<5B>>Du}_HE};i)+S6GR2!2tUdRHdcCeW8*>nBh>Jxr|+}cco z+&fD)=zF8MamY@fkiGi#%8jf|ae3OK(kK>vp+Em)Y_fJ_0&5N}a)DmxnT*K!c^m0J z|JB34r}t?TiL?3uAt2u%Ssp+3-y7R~$>>+@V%+0l@%$Hd>J zh+z4yU8@y2=1dh;Gve(Ta~n0FDbsjk3Wf4Md{W|dBEq< zq1WqN-0(tAnCF|GOq~Z?$%2k`5*~6afZ9yGKk4M4iNKoPdwg>1n6scWIeS;{%AYSy zo0pv1EM#(s7w%wBUcgJ&RyK883^#b6YIk44`f{~(riB3Cg!j2nnsy|R7H_RUzU-!C zgCXipgQD0#6nvb2B#VrnxYCPzcQj`Can21bF~Y&=mW#_sqWzI9-d!k3xSLtH%b2Ot zVj>)q=x%922nS~m#Zr}F;fE!Wzs-MRfkVSr?Y7wc`pEE@7MP`4nK!Pl?03E7w~Ebo zX+@xMQ5y&$F(#()Gd?UU#Zz7L#_qD9yEyGD5Kep3v%=J43bHjzy~>97H$Pm{hATG8!9-hAS;}#NSxy<;n_tI{zg9hVh8U*3kkmf zrtiwn;qYpS2zjg>wEjkhO%XuqL>!S1nsCg6$Uyt^oO`w{UXOB^U%4|_?q_z=J^&A4 zVw8XdC;4@RXM1eCfnI&iks9RQ2=97Q?Z%KZRNGX|BCF)_ZWWwov-Igv?TFG$lY<2T z+f_a)@ZnL?#pk`zm{tl=f@m_k8;Q_;%6SUN+?R}xnpa3GoIPBzCv0ZoU)xE`+%uT( zUtybj5nVKHt+ZbPRI>X=RS41?fK8cXpYZMOJ}ax+L!j~A>$hqpn5a%MYo?O5dFD~Q4Iyas)IKAYFLbF! zwiO|)5of`yo&#i?w%H+&(#34_u;Mn<3fuh))npZp>=vp2p29w*yj7mBTC!tB%LUor zkjD*^#X*mSRblIjim%gd2NlbkepmN4YbGo^n0EiKT@sAT|F2yVKZWsolJJrg;zP;{ z@nyG4H+8t0h{L*0*NPxk@^8pu%FyOlQ+^=hztmUeb$AxmXW+kcq3O<-U$jwN^!QmS zW=}*8nVjD?EkD^NS|TCWkolO2%01;- zv-6Eb#fg*O31Ol`1R$Ru1fSk>MV*1_bF0H)Fz*d)u#!*Mf}dC%pMTeXFsDjEP~H+A zQtRcrU4<}jw`_Sz?s;xJb%wpEt|q3ZeE2d!6w8sdH82_;N_%=X5>_(|xw;ZULN6f4 z7Ou0Tt|k;^79F9m9!Z>=Cw7W0TFg_^?R3UiPN8J7SGe@|QH)bCuGZ0>>Ya<9a4a=^ zlRYM8r40FsRmL32YqDnpo0pXj=YQ|iK;xq2A4Nk5hHRcBhjTDjG#_Ve58qX?XqBg~oH}OV;A5#9pLJiksHwlk3N5<)mTbjby|BPR! zj7xTsxCV@!x2GPa^b(oRJ#}*)vn)ZG%tl?wrXo37-Ji)`B-vFg`nQw_QYQQDAY|hb zFUH5KPb@`|D|?ky-2p6ji^6Mbx799RCirYrJKP^RdLxy6B4HMDoY%8?8%fyLr0mc2AvZ!=;mhKRZPp}0zwj5T-4^zCO? z;PzL7T&)?;;}S<WwRu#zkp`$0~z%=+qrQeOlOND)B>*efL zEA(^|{Kxk5B;joT*A9LNk|Hljl3tITj!<0LYfU3JRbZyq-1mU^Hsi|B}4LR$c19W!pg{CDkYs(6Bh$c;VL(cswDS<=~~6+g}U6 zk~;|R!6`#3YWBp)1m5=;F2GD=R&EpvsFsN{Xo@{*zPShXph*=mOH4LC82Y*A3o@qpFZ6?TH+%2zzs`X!xYh&n47 zzl$`vF_bvN=dO$2a$=@K)n4_4)xZq=w}Q0m-U@T89~6&zZ=3Df>J2Nrs~!6JFD*3* z-K%zqXVGM>O%$&lR8RvjLydt&Gm**D>BZhOI zQ7ByaE^IBm?-Me!M)3M$B{EYC%4KXVDoc7Oc@BLp(+l{o4J!o`r7)QIZ+d7RvTb&< z*E`=q`VNH)qzp@OmxCh{cNU)PCcn-&e}3l+A{(xMf)0L3X{|WM>|r-I;`BINoekGA zC{1cRFM3L@``!#|>|&Br&%z{fc0cZYD)lebOpivBYc6b$#*wahj^4rMbn+!~mU{KQ$=*%x{B zZHallbNI~o_pKgz5QHA4ZdYvx+JGoF$P~SpjWWWaZGP}RNqaf|Y-&0({)I+S+z zSYupFCTX^YOH`c^u9UmV_~t+>9$8f#+J4T+ z7e9kvduL5M_&P0Emz58rZ5MmAbi3V*h)v}Hp_z2)9ogWE4c3T5M$Nfq0tHsJ^Sr|07TD*uyj zfj^*mz)h$vu-C!tq-R!I@<`ikgTQ3v4rW6ra})@+g~bd;lT5^Rz9i%V;xe}$s@GNo zBlmA&jP1w)jznSj8zbpY_QIs@skzzN%k0!j=FOImU41RDRMYCv3 zm$txK?WO)kY%olGl^zp=5VVRBAu%$-I72mHpAO5K??RSmLph*E#5dKzuQ7le(28NK zvYNnNYM=cJObP*bom5#k)se~eG~CtK9w+y3zgb&BI@f0ZiL+f)=Vj_x)Jr$z$%@Z2qGT%Pe6pD*@)2l97x+4_6bgKULq z;!WbYW)S2eo5U>SsfSn!D#+Fa+IKSqt3L>lUNhLP6*rW z=`XU!lXl{vr~rkl(?t`InIe~4qSVY)xCVCR$YV@GyKd4!1eCqano?L;xE}Zg;yx>y zgSm>#VB~Urrcn)Nm!T|h)L#8^x*4%6a0Oz4mu@qhBL`gP9xa)fNH}VdUH0gQ0g2MZ zug4Yds;a1W``a(HEv(% z$m_>g-mjg`=Fpc`n6s;BJ}*fntM*>jUHhc7Y^9oEx%s`N#4r1MRjUnYrik+x0jg?imI22bZjX(}kG5K0bss zu#!$klS3o9lNG)Ttd5&`bO{vYL=0uitR8YvC?4vfK+(WJwudcvS6Na@YN3n4suNu3 z=fLhpZF#^|B{Fd#=J3lS*@Z|NkjS8bK!#-(NvAzK$m&7fAm^wfnw&KrL?D=T6!vh{ z5}Bevg|zM+e4emO09n|!#l86{CxqWRM+q`fW;PZiN9iYlgThH2XFXP^6|mREu(!yL zX5>QzOXNOX$&47eT9IjKJ83>q#AHC^uE4gP%Wvc3(GCOYZDOQfciTy1f5&p?l*O^5 zPkR`Zf@L2*d|EuXc;IVAq_wDQzk-b6^ioD2{kt9haNme!y3E3k_ND@LqQmL#mBU`e0g(xGl zQW+Up|KonYzki=TecpN>&-2{(bzSFqoX2sT=k53aX1Y3s(`F!TcR` zXNuexIe)D{jM(3qT9H%c!T$`qlUw-DYnxx~JI#5}mU^l)Bg1A9c0Fsf>6sQ-l43_1 zojQfRzDj}vR*#lXq6cZ$1P^)}#P*H;to+qP$zhHLT=_?D-mvFp1S-Ku=02T%&3f+B zo7foFAw#Y70I5j+K!w2V^^vbbBU|z~jC^T6<52~!+`YLcninQp3;q5$L4be!XxRUu z|H4r@Il0kqdHGE^$QMvn6ue4y9V%O!O7&=9(Y36;K-Ers(O8#?`T`XsJ4)@9g5nIERCyBWZA& z&4=oEqiob#)wNPK2 zbR?!lwluHaF6f(k4_;E3O1Am^D`=bh-TLQWBn1{%ot^g?9-fnfZHk^(iH$h_9ctVD zZE1=-`GYn*;;xb#SuW;C2hea_@M3|eO-e#UMho9bc5|Px2+EAjFDuoN*u1>a9MV$1 z$5?cENZ~HW^$-ndSnsmpe3&2^7#Qk)?c+Y#R^E8xgoi{iOXD+Gl=x2kFVjahdtY`T z>|g;41AOoHxVpLhj2{0>Nd#z|Qpxn&VC9qlxy*-6=suNVKaP9+<15$Cfd8A9;#lo) z2y)0oFNepm3t_YiJ;$WWf8tYXVKDll`$q72qO~p4^FKRc#rdGEHe_i>7X++(`;XCG ztXb?-yLjJ3#oDr#`;zMAnwE^P_gl9e;>ogt#wiD0WJ@k;o@67sa8>n16Ex9OkSVTT z`?y1Wm+FTT?+zny&m)Cdw%px=BN8GKrHh>8ky50TBSk3wL8zxg{xnS{#+Xa{DeZW@qqbi#|;QSzgcIY0}jWymZ(CQDqA z>;hy>Bmb`{+tI4YW3$(iEd2JyDlg~}%MX99oMdYqa#9p_&aSUbF| zrM=twlP{cZ2-h8BoXRq1hwAzd+J`4cjQ&qz<$Ce(!>fh|Noy*$=mY-a7vEyr_36{M z$8yeVRp||R#zvIR85Z0*s>#r2kL}=D6<%DeH1^%7Q z{aW$;RXxIQXk#?T*W0okHJ+U+ksKC2q`B$d4-&FUu1tPNqp8`DD=F?!qPtwZCc10C zSvZWcdyd^V`F8IwMfdHJ^BbVft^OLL|5c8QolhDclk}XHg6!rIAFRmF>- zVnNyI^a}z-SvuFvW*3 ziv1^%>K?p$dANJ(pS1gzYKtVN_l|v$d$G1&yv^~sDmu0=Ri`SSYgNUO`})rMd-}R2 zZ2CE^=+VcCBsx)%JrKXN;J*Q?`mZOa7Vc2y=ti_2c>f%xxzG=}rh9n!#|HJEiDQGd zHu6~k8&+ba74}1y{;9~CbNiDpSkb2?cjnzcqDS{8#tKleyk#krq=Px-)uK@+zPt=j z2nr5}L-uXH?GFxh?96@e#0vf;&cog>oG;652L#sloyvZHeVTAZz*OdSp&5QXqSg8~ z=Ygym!zE#$Q|7p4mgvSiEw*X=ylC6d6A2Ai9^8Q{gfb>z`M_HXX~|a2vu8Qvj(a|4 zDib|e%AS5AsFtaw{5Z?!gA0SdHpI-z7~XAuxG^&Io^6{ZRQTJQ@ASeavj~TfB-y3*_gH=U-<6V5 z3rT-d-PhluBm-TBe!hvx;DGOhnK6=1)X=BGFmNS(2#pXk#^0iEc1%&d^LN+#@hHz*dkf0{^48hlyWgP9EYXdose zQ@D4L^T<{I&Iq?XI7F8qcA}$PXXw+X0s?fQ86GC-4kpHTXBMx&K*)`yP9i+GyeS4v zYX;(M=snoUgU$wv2I~WG7TOSP#}S&zik_lqIzx{J?7m1C1aN>GPI+b6Q(6VCvHCA22K75JS+Gb7cLPe=!a^EA&EQF@R;^(C%1c>AT7+{chvn4JQ8B z6j^(OS@h6P>!QZBn*5Lm+^6m7DT{QM-c&HGV*j%g?En_dOz%!XN~3IHyOlNZLM9O| zh@D^WMoU=3Eo(!`=J%2ius^AKY0q1DR`I13>$%jgb#{N9C-N@}>8n?-#xnUfX$UX} z|Jfd@T$mAm?zR10<@2ne*sNhsdVm-m&HI9VjAUT~Pt!cOOLt#2AEfwK?CYs+MJWaH zn@sntzT6(a-Ri5#bB%&c*GfP@q(~&>PQXZI@A{X`t@oAv-+n&tunt!E_=_j*@$>5E z=S!=%zI|NT{Q2we=FIG@2EOjC=x9?8`r5U|?Y61b0d%Y*k9>vCEgwoY@6CZ)TrUe0q9JQ_F}cJOibd`4<)z?mT#K>((t=_{N_0IZ=?2I=nGM5N>E_sBtUJ zMrv2hVA{QV_iJ98sP0v!!m*xUtB1$vkDNI>Ze|nnbYEeJbGoFe=^`~{YJ$!}M*Lr% znyP9`5$;#t%^mKH-0YnV@0~po6r|SE)5FZp9`WUi#lW05nyOYe1HGu*^xMxs$alIpV&UWGXe*rX3wNvN(?Uib5}luw;6&e){KOK_j$ zQyHqNst_WLBog)X^lEBqNN8zkiPOHhzCvWFFjL7V*5vxwW+9g=vOM%gdNg`KY91*PcClX5hmGsJ#V~r=YYn6L$B_Temb%o6v{Gp--rhw*~UZihQ} z?}p+C;<^aqFKWTHwY8;vFsKUR^?iMPtD|8|GQJD84NXm&xxKKA*E`4w$;W& zSy)Ikn1l_@>6nA|yD~TDffG%Ri^1@raul}z19<`8uRw`{N=jUV zgM&+Hh%UtR4I{HK|DFW@-&l9UbfpN)?tE$@VJf+c0JZiVX&P6r9)d+34W0}+#xy`; z+1)oWZ~{B9p|P>nu2@5a)ymS6L^Od0R(M29aVe=A?RH^iFRNFXJZ{(Qu;){5qS2G- zbCAO(2>tA)i#&6(vohQQIe77 z-jFA0Xl|~b^Uf|RVx^&>xzjpXVD?h)#0gzrU&W%Lq8W!l>p}rxVRDQqse%1Ha$(`h zy`&^!W(pAF>UgxY%%u-(IGDI7aW-0P)jFp)JuRohebFIJSv*KzXnGsn9)J%TQb}-! zYl^e=u%j=U2}Ps;LaZE@Af|xGa6U2;$Dc+fCgEje3J=b1qu_gFB5~5x)aU4vuiMNw zLu#Mz_bt9LHA;P6SgsUPgvPv-@RM~5JyJ<@=ze+ee${6E#i++vttiRPmLTjl5!R!e zdGF`Ed*gSXom7^~ou2mrHZVO)DwMbwopN2YHs#-7U;&1%wg`F`d2SN*9OLe+G~7c& zL&kghmyG74AIs?({hXNz9-6z+?QrDUwSRE^Bnf3_p9P7FE8(!^}_!qvJOrLkpO`Rh4$^E!{#6ccl7l3dVG!fM>DT4tD=I7 z*jM#q!Hw3L(%B6SNA%;0O(n(m@7MP8Q(FEpNREAhaFEavj&LBJsE<31&5RAAkz;K2 zcWIXB6v6>(vy=7n^P6elk>}^8V;&PO>GLhyfGg0rq{&GB-gMic&j)(E@4g%V)Ew4q z#QAL7eU7{1^;rCmN|P*Ik;Xd-31J8qSjZ2(j5sQnFQe}}Tr*Q0JjInOR~!VT_wL>6 z@Y;Z^s@5{Nby5@93uf){@$s&%u3#)MVcVXcpVu=m2=8->=yPgZTb#!H-QSHu+RX>UIi-Da_vaH#KFF`>v#I_q8-&n-@)<9*G!}Fzx5Ykvc+8(K&NUB9SB z)(sZhI|kp5jz%igw6Ng2WPsFz?1pt97`@VWoBIP%%XfF%!k`V*jdX}(VtFv-H+pVt zKs*vVEX`1imX59v9T)}~s=U`eU*&KspWKz)Zg=ng{qd#QULRCMg|;oMNHN$xxQ|3L zpwk;JU=M88qeqX<{QRkd)+uzo0_WgV{a(!2PFo&|$m;QU>8N(*4)(6S=h& zh!}Ht?mD$T(1jHViO9tga@(2|ruHc@tfhgl~*vOA1Nj0i%%`=&pm{<~V zPu`Ww?cJvLy~IRY*=;Nlnjy#&Gk^S0U!2rfRTm(M(ILm_zju%AaZXP6y57;F8VE+#Ha1po z%rGi8;>Qn{vd?ZmM&9vbT2Jl%(qXc^KH9L_V4{TzBaK1Fm!U9;PfNS~x$>G;USCf> zdGX-w@NfzqRew(Yz*WJH47C%{5x^?CaeR$9Lqr35TbluafAab)HX;>tMhCfwBpTi` z3}}Eb!_3Vc{o;kBh=@py)0?_6cL5a@UhJqpfBw9F+PvW}mTjNfu5$`yC&~q4pO5FI_<7d0>M!$kT zSYMwO*Lw2YxhSOf_mfw!mxPgK!SWDfEx11izsU#AuQX87oq1&*C0)H5T4V^;0HuM> z)ia3MxJ?9~w*i{#vGCaE1|yHGWCOgHsRSqJYnKYC|zeN$XqJlObIxVcm$5`(#vF4h8I_Q18D!;g-N zwXvJre9ugRQ!lV*52cEV3i{K+jh`LCUdJ~%fYvkx9!6jQ+}rFIFX+J(3ZuS3BO|&} z$k78aGvk1r!lU3$l9G~wl{4Ah=_0R{+dGCbcjnhGU8IEe%j7lS1RnLyJ`JRhQQ$U4 zIFU#kuU`L|J#AU=J4ec!jXl9K?Kmzhgp`)a*B)4TU4&Wg#u4_j9FTBln! z^sR=Pud2Lach+=05~sGcDr0N{T*hn&Dp*`3aj52nJE?4EMW{6ML^8(Ot6+ zQ4AH;w+mlCcEpo7^QA*bq~wYE+S)g6R-q>AbIQp!%Q23^9!H2GavRWsi@fmu{R~l2 zQ9v3P5mjq2tp)Rp zwE@+LZP@LAz{!jc#Tmz`Mxa7~1OgStGSyg;e4m@sMh41Jztw1sq31-Z#tX52UYI{y zLjt6?c}0LeF)c04>e+k@8_HEIj+{K>q#8xT^uX%WuIPxV>5%PCMLG&HR4N~zXCD!w zS&wJtmbdT{NsSMFt8p>l&uK7admM(`-4`Z~63uudzh|=JsOGM(O(rSM3C(dIBSymE zgbY+&|7ZEVl}#krC$1>IHro#euOKu12WwXC^0#l5QL;TME93n9 z`7>7Wb$i=JxkWy)p^?8}Vr6AzePsL$Q0jjT}5jGZqAWi8iZK}MhCg7BX&lsiO zg;xQYLt9_fw#ZR^Bwg^{O(+Ez;|)#k&Ro$tmq4~H?$DjqCA=s`MvVOmIb*!xEfq7t#{$2LBXR#ZtVo0kK&hJNr}KWJaKd}zQHk-y#6an%q`&?`s1S`b%;bC(W zi>8wI1-`79M)Q%zJ9^-;Msw17QbSMUzD5JKv_C1-)a$NEE@86hgO^Upb>dNnV9`POD zgrHWxHplhaSOjfe#h3%wQZF+e#-s-oVk~|k=)kuSg#Hy>vU*cmD!g|u%~^8~N=6<9 z_0nI1#XHcBELP$&7>fAuXxXpI0swv(Q}&b9f>iA~(xNJVR?r1OjUwJ=7}GfhitU*I zl`)v#7u3iw*lXgIPR`DxB>Fk5M3x7+A4Lel_@!{|Cr|p-KmG7sa>Y=gE_wRm1qBHk zJA1ct;oLL}V~M#4O_RtdxNBqD%P9L<^dNGui&1F4#hA125t5Sp;Q-m`lx|ob_ZPlp0^DO*RihAh7`mQ5g-@>pbvZX9v`R< zIE?=7V{}qGnE2?OBAdU`eCiD2ZL`%x#x5i*0988VWLHR-#)F27x~*~r7*@Z z18z3tFw}^IJdYZlP{4sO@DXwtS?B{-*KS$js*f51J&IVP3eM@dw-H#{GV@HpX&0wYT9qWk#bTo|Uj8dqNbSx$`6 ze3a)Z8&^K{z?lflUm@5xK-%4_`v&QZHX<~3b)SU9Z>%aQ$K(P=RBwDDICE!%An+mh8{6uZ)rxt9kh1#9Z$2(;}N({r<80 z+*wd)$L>oKE`r}^2p`{C|3%0{sBt`+d9N8AzVfnbvn_D!z|F3t9B^mgut|&@j|s^) z_*+3-B&xHVoQQ*xco&8S+6Xca4-fEjMtOZ2+AEk33ux3G{{r+E>T*yhMy96J@Lpwf z?f~9LPpcL90=W@q`P9rad6~Vl?yJA8h`Kqi4OJpPYZCPxL1BADh)7;U`KHA5Vzt$k``o%?{-IO&dkl-F*!L2nj**b zS$=-xXSZh1w_&vPZTX3M^wINFA+?s&cP5<%ZtVv{qh6-}Zsb?4a!c3f6cPJ}^AyZbT|1 zR3^78?{b1Vp|`;YfI3C#rP7kZ70H(Ur5He9SKK}5he22b8FBo0PR6#u`4IJBz&#`) zEr7}~chJT*2-|vwhE34MtqM&6I{*yB`YomsWqos`HS2NW9dm=-X0r>%Y z{8WVU!l5ZIB`f(<$F0iJQVx6u;5~uuS$FQl4V7{JC zMWUbu&N-bUEbJ9ltIl!19ft!WUIS8a%TWYoVMFR6^;+ITEDWJK|(@;8JQnV z_+0;_Y}Hdly>apAo%PZbVD|4c6lD0b=I`}#zv#`ZQ%`Mna%UQGdb0@KT(a@inlJOR zTri~(T4UO~b%VQczB#ev6s*}%)igEQm#=zdJuewS5hB>uQ~?R_;4GIH00enZ?nXzj;O z{{r7Ao{FbMHN>|Fp$tG!nVFl5s2_WD@dlPy%rNcI_lfuja_R^s5`-VzS^P;wMdk3| z1xk1CN}_B$ckY~nlT#=t0VHM=n0+K3<>p4>Y+jm%*ygB@ii(T(PF{X-rK=%mfcCBV zmX^!Ft^Nt^BkF@(=43J_Po8|C#wz66tbNV8cz1q?ACxhuq2IMDzhK4#IO!WOb{%k7 z|M|HR)o7tZw-7iA;^Yzxtdo-jCIp3GwOl^E-aB3{T*Z75lXqWSsPu08X(L&)i&J=w zDJkP_JoS*O)JbV$bMB~iCQ6z|_~t;HX-m56mP1!`mO(a4b#9F+({zxjd%KpQLxg(kQpM)L*MTR?vbBdwUnVqpONXY4_yzhQl z!)TWSuAk&^qW#+8#1a$~v}zN544uMoEL%^txv5c1zD@l^L|oYnuX%Q)p1d$i3{B2W zUS*#<#*BRN2L0{LAVwGyqx~?nx`CWYnfVCKMzh*hNZ1Z0 zP!FT{X7zn%FUI7(s-Pv{kk<_JXTyiROqnzfm3>(|RaSVgMF}|s;gcX9BO)S*(cgqn z15XbTpK}8$F>nM+zAOLj0xcmE=05b3c>4Rpbc+6 z>pvJ7dJMvgRFj`E;~7FgFb}2~D5%)KAwIfKCY~LiD;>E}Kc;SAK+njlbmZbLTM_A` z)|0^Yvi2RL&|`_wG+AXLKROrq5zyJc+b`q=BNwjzDcNygXL?4G2%% z7!i70fULj$uZEB zx|c6s<_!3WVyCeq{jdkN2C2GfrI3dJY4}O95x?*Ik<&2P_YuTF)N(!xEn@T7!8=^- ztzXM&kYIF!JmK+ygUxEF#8ts#oZ`Z}m;W0Lr4cX$0tclLZcq=)@QK|bK6jVMWV`ML z4b6FT6=s%Z5x%S0)~X z;IkJ4*x#+SU&hh^!ZREeU8*24^?WjMd|yI~>5z6PH;3llknZkoANZAK0*zOxKX)|X zY=Duvi+dAcU1ONJgyBSGJeBY<;5nB+3E8>Gb1}i4b)LY_t|}PkSqI9)apLd zB}njgQc{e_5qK#PUn;s6canq zXng>3AAYBQ3+Ow2b_`$xYB`0BsnK~%M@M1mU=}&Nk7ffA5%mu}mqW~1^Mz3!eHOZ$ z4<4D2i9v8F;Kx;VWIp4CU1P>nii?vpfsu*?6$vr44`>RvkfP0|j9EWpam^ooKrtK| znV_wW0`K^otJE*u#PQIx2L_L$6c-j{%4^!U4h< zS+9{I9bP#HwadHG0|Y^Zd=?aL0BDQ+TuS|e6;$fc@d%{Y>y-ERpC`-{s0k4hLip;_ zc0lHxxtydJV*i4!+J=FEaLi-bPoF-O`4$O^ZcWTCHkO({KBpx`Aj6I}Lg?wZ@_myE zJQu<1{Wxdbu{fLwEfH3NrLz7Uv@~-P!YtLv*@2B6oJ$acD4v;c$?r)us6eG}^(-?a zg!Bw|Qmb~~XH8c<76~OKzqY4dBJO_5e1F;5%^GY11MbWTE2_0PUqjL7^v3v)yk>oC zYiqV}cTv$n0yuGS*!=oZW%}BI11m+pEQqPpO`iFLcc2z~cO4H9bpL01&K`tew_6)}{t|1!MhS&z72N zMJbtCP;lqe18W7`ibt)sEPoD*CU4b;ga5^?h14)`wrJ4hNzYS~Y=QTCnppPk(7&%} zUtHehTreN9)*OjCR;Mg@cJFBRG+N6g?bU_~Ct3r8+g%Q^VHGUZ$>*4|G zt|z#K{=vjH2o7jOsNCTbk(<;|4`rk2aUp%+?<=#LIWwB!j%AzjeP`Ye@tTsmJdLMx zzItX_A5BVodEg9jv{*B1R*dh9op{)A{&JOe>2~M##tF_atG9wC<6h#-DW|SGVb72WMvV7=sP}cjU#Pq zZ;wJbtfP%B>If$%CpA|Ki`@;)Ov3KLPz}b$zVl(knY^3?RlW1cJg#JQZ9r^<_HUS> z8UvsS*EWL>%45Q;M>xRi;a2686O8gT?0E>~6KGZGK;-LqipwNR+S=g#71-&UcS`wc z$gtiRSC?HY!@bJ&1|TI!MA=T|FgUlzvg1_ikQySm-O5N|K>4!_m(b^CKp~C_Mb$R3R*tIf#Ne~&i`#$u;lbsA9gqs{fb6O&6}@U%6QR=r%oKl)qM#y1u7QSz z?<#S*#U@UL7*po_s+#srqq>{V589-|+kvcv z%Sp@8aqpy|XL|`K8G@03=?P4&!_O4=Lg>MS%9J8Hq3tO+Y1z#B)o+3)iu}U4b1f~+ zr^VR_+eJe6A zN7>^(@t(!cB1?IhP;uX6XqNYZ>^N1F*!*6D>;WoK_!|iP4oM&rbteQu0#kixZJqDd z<+s9-)1Z4v7A9=0dECZOhlYac&{0%ms;i^qgnT(OGefBF|J@*95h(P!aD@TS%;u`m zSc{bD=;{hfNYElyL1N`4T(uzGk_gB2L0MT347B|Er~hJZf`#Vd^EMW_%)jNI-5|pZ z`!BW=&Txcg$NA)xAp6j@yF`qOiHQLB1Kyc9C+O4R012i5FXaHo5r@M~vJEvW6%;Px zUqx0L%yn)KFiY7wFh<2u2uPA^bn8V7WN&4BN;;v zhapYHZUZT~ULA?Vp1`S!caWaaR0FsO))+knI`+R0{7N}4l=$)l%tWEfP-56K0+x3Z ztqIC78otGZJoX0-jvpxrSY8lp{2v42J>y>+plXgejQt9^3L=aS;1dtyj&#NM z@(XrbI*6y~hZG!pL~x@~DPSnx9`VM5AK@5I+j>8#W;;eM&&?XC_d%OF_|<`?Wi2#h zy{J1d5m|TUkBH%t)`%fNW+7lk{P|AUwc@WldUksIX*@)zxnaTRkUEB<);K@ zr<3KKMDGNo-6zfMutM2xfpgw1~anhl;ofY8@ZuMJ*G z%6#-l;C29P4l5qZ`Z=BU9@^Nu>!E7KsHv_(jq^TZxOTa zRT-In&fP#t*EM08?X+BKi(djzxxsk`a$iBlHF0ujoMn9Asl-djv@*!+(K> z=r+Uf*kSJ>SCY_E)WVs6BB+kMDk&T+K5+KNH`#-sd!%KG+PHm7>J|I-AiR;r=x8Y} z#BW5>Otp<=TE7HWZ+>s0)dwy-DT39ylbozzxAcTA>l^hx)k>0BP@B`g+DeMN2$KqEWk34N-gr-#5J^|7JKP1yWEZQO#)r*A0v~6u z&fh%N@o^O~@;2&M$?@CiuqRV_Bx}_!Q^9mZ=NRUzsZ*t6eQ2-fWtt*iV3<{pH# zX&lbTYF~a}1WcU0u38?6K?VXVbv8cK?NK)tQU^<9=LR}B^d0Fgybn&{uxn+HyLLwF zu`0JAe~i6(Pkiy9OA``^I}r^*1yT2iekr;{hZtJuGj9#B zPni`ABTnu|GD0fL)^64_za;w32c1)8NbcfH>kvkE-*r~uN&kT}&fclEt&HmU0Kx^) zfW>mPD315=uBEnJ(iR45LukTNsY=2#9b~rT;-cg9vYYj?-T0EIG)cS;=$3rTf;F+- zj_!IGD>tfMJDbuWI4|mT>NBT-R%;;w0pC23akUPybl=(}Jgj)wmL-gYFYd`_S#6+| zhW@%lGmJR+y$M2m>PMB5`Rs*0U*tYDeOh!4gE8OY!gO z_bXExBwBP%oluE@GJE&U#bl+y%+A{_BX(ctxPu-9ng)bBo5RLHqnqb#TMRV}=~y-DFcBFt!DVz@B61;`hUq$nq}Gp{MOureyVMsP$==I2SQ=-xdb6$2o;-=|qKLh{6Z7TaG8SNBqJ+gWGC;7+ zgQpQXbch`!BL2~4;6=@tgYY}FZ9*ome{rrjRG}xcqBW9{x9;yB9l_CH5)zv5qenDM zz88Y{fv#^2=RHtVnyXoXrN%&@{ESzH;G4VUWgpu9o2YLA9|Q6T5fDIe{?}y#SFp=K z0cp+5)uMM>f1T6Rf*wlwvL6*oJ$6EA$pY;D6O;BGjUGWzgJZ zOqg%mLf}fKi-)UZLy3nix(DLjqL$o1cDssY?A2_R8#ygn=I$3DGKu?Imem#@rmo zPpCeGYY7}Kj8@4#9f*F!GY23SGZ7uJr2Z!yo#EX?0S6g5raqF%26ceR@;sPcACSH* z92}AM4}C>%Gd9~*Ui)S7KW{D3_94R+qp|r0j}a7@?E*iGXBwejnexw7s8p(3t2QwE zzy$H-(Ml&(iM6N5wnyb>uQ$_1+(Q0x#;HajIePL)pzvQq@%k9*DUu=F8Xob9`M8s{ zRzw`U82k2wzbJ0{C?ln@+j^&2qwN-R&`k<^@k_2>-ue=|EOA1_(#<|$)HdOZ2z5?X zd`<%V9)w;7hYAOVvp0bI<*;qOx8qU*-yGb0rjkul?WrDswvm5$6TIc&7sf86g6MB` z50JHzfp`Y}_}8z*z8!~Tn>FnN){U5!k3Qy_$0IN4 zM^>1>DwuBg;oS4HYh4<=8LN-jG@Z7{Homd-B_BwYDBueJawf%~gCNf`GSqdHO%@YC&`765qYFUp`LcEihkvkQFga_ZZBdOvNFX{_bc6Xf$Kvfj7QJe zkjIZM`6v@CAc3{PcvwM9C2G=oC53y-@-QnBU49@C2-%EieI}eUFjRn1&Gk0$?Ltcu zk*jpF;}>oLMnRnW4VTSVj(4k+=-`bb+!b!6+;kjL4QOT(pOb{^>fQF{FQVdo3sE@j zUWpN5b09jwVFdbJIkG7w#2Xuh;y5!upNV*B_s9tUzZVU@Wu3`m@H0dz3h45sZZ{H5 z7=xjDX$vQ*ekLaSoJlf6cA?d=7M2ap`v=B79Kot9thK=*a@Vx=)T|E)Cr{xBJVG3s zYrjpD_|$ZWKRFoQ>aoDhNvE6`3r$|RNe~gF(b{Ui#NeE_;h1oAW1U&N7p%lXb5`sv z^HOT>zmA8sPeWu&8n}-Rl0K(PFGEw??amYun=h~L!w1d-sqNdlFs(w02e|~jBBvg; zS{D}3@q4iA2py$ojX5WkI{!dx;y_@{8J?&KHS=NL@i-T95_vw^!m)*JJ)QtQWli=? zO_r7u<<_nag+_XYkB!7l^FCcEPdhZbpN$q?opz_4?Cg}~=6uUxfJuZOAxxo7Iq(6| zL?{cWHuf*t^l){mC=vEu~>wALbR*Du&Cm?QtofUTFk-y_SXW5)T^lN;5vAbJw1OT zqvF@k^$kyxhf3PpXT;e|UwiE>+Pe5_BR4pDu9V}D0(qF>&p&>%W_D_OlBuY=2D?K% z`}&ZO^?GKFOwDiK%Mb{FOsTPcgP%1B4=2OFBrV@TqTKN$beUhyEfxY-&T@u@E497Jv0ju~)6T50I~NX}+||47b~ZUbpj{#Ge>_Q_ z6a%wV{g`D{>}NOoH)HGe%>LWIH)ZcJjHt!C>h!2tTgoKW?P&rVYU=4MvQj7iIthJ> z-x;saNFEho?KnYM@f&@{o=0{|vMq4U;AQ>9*GI+W-D%lVEs_WnX;Wf+HYU>Cm}|IKb(?i7Klp=x@sHN6 zFkN!K(-cSH(z=^rN4(3xvPV=j{Z-eJTl)*GiYJx$ahaXXD<>uv=Qnq*`TK7dWW*I6 zdLP?$!`+qtC4*pW+`m-RXJys}UAY}A*NFRE9`JZ>ig^2}<+0bPxjplvwPDQ)6c?F^ zOdjV!t*Ws2-@k-2bGBV&9*Z+V0RKoUiX-l~z8QFi`${zgOvid7d2<@y{Qkq%|E-_k ze{Y#FHn7pPm0722Zn7(~p5>%Z`0*nRNCmW^^xBukSSiNL^6nU&D+|{xn~`RWv^ipe zTTNBF!Ze~r;lFLZx<$jPI?noaG%E=nEIpCC1pyebk7uB~xwRLom*jwlt)w}#UZIJD zZi82x;Re0keZ!T%zkGFT?aK{f;qx&Qh{2r~f;Rz)guKv3|{xskJ{R`2Z f^n3IG<9v`&x1_`1%#VH&{5q;_c;uC)W$6C{6rvX! literal 0 HcmV?d00001 diff --git a/frontend/src/lib/components/graph/svelvet/docs/images/html-docs-after.png b/frontend/src/lib/components/graph/svelvet/docs/images/html-docs-after.png new file mode 100644 index 0000000000000000000000000000000000000000..37380b30ee59505c18a05e9ad2d42059bed62b7a GIT binary patch literal 91129 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 Y+$B!OTHR_%lOKYihhOX*1F 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

    UUYuZ@V9yJ|D#~`EHu_N%YUo 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 literal 0 HcmV?d00001 diff --git a/frontend/src/lib/components/graph/svelvet/docs/images/html-docs-before.png b/frontend/src/lib/components/graph/svelvet/docs/images/html-docs-before.png new file mode 100644 index 0000000000000000000000000000000000000000..bafc046b64aee85bfb04e46de36bb0ee105855bb GIT binary patch literal 147120 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 z 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 z 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≶iE!nrX)xr;Gdz7cHQ*;5h~Fmo!oUi58ht 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%0AXU2Rnw zN!4P*97B6bDPu_pW($~x!gs~DmYaS4T4ON0Gp zx^5Ze{8g*~;b7axTu+eX5th*ba1P$4bpH5T`KHdE`@xWu2U@V5F z)?{I!Ga(~)$znPNu4kB_{O?nRktB|EH*%N0))k9hAhB1K(8dVF4a8hqt8T+nBB9?g zLMr5Hw$X3J_nE=AEC{{t`|X;juCAMjE>E(nmM_z7E^lQLAx3-;hEygX1VQDU$~^d3 zA$KTU$dRVI63>Rp?_a{b-M=ApCW}89c>=2BB8d;o#uOV?f>j$vf(GzPJ_+HzTmB(i ziC1O23$@eAck}QZLuDxaU+Q~bJd;{Hd4)KcqT#$@@~uG+vA-O>oct=zJ=O1pUp2bb zM*ZG=y{0<;*x{DB9yz+%Fvdpkv-82aUU>}-IPPemjy=j%Rv-|*^B@Culr*Qx@sqoT zBCtxW;kSLWEGq8cQF5tkXKf{2$B{8DVnAHpPw!Os)lztnam z(Y&m(PDUb&LV;5oHEit+JMDfSo*&M;)z*NLt4%Y-1l0)QCaA73*f|PCUFycWpKwJa zdm3kX759Zmo*8Gy;yrBg9VE zE5O4~PEM|?uW#bzl?scPP`bo#)t-voPnCv5xbxFg+*W*St%=$0$T~iRT(gkzVs09ubkZ_v zX+enYo(b>}!yNSxBNeopgw(@Uut=3K{6@rhnm%hRV2 z{iKd;jmh+*oBE+AT-oz*<-sxwO?H^=1n5y%+1Rd%x2-|I80y5kx#Q31wU;lA$J~DZ z+KAG-v}mN4VIZDDsd_(k=al;9IAf=GERb5X{7fxuni_L|0T-cN^@kMWc3yRT-_Z0a-CDK1^WG?r z?@E%d;@0oKEcmBB&BkS~sD&$SyUA<)y(R8p;k%_?% zJvjJoYNF6^Pfk6&a3=Q6H`t8&m^~qALTP9eocXV8BD6#{6mVUcX7NZmOxAbrjP@b< zGP?Y)Z$uw~A+Z9wB$U_V~Kbv~2Gx|*)x?k7jP z(8ly-`L!Kq`aoAdayRDMS{%o`6TwYsAw+Xkk0a{WhMQ@O0mnVgomY^uqd=E(!*^NQ zWt^6`fG|kv;Y?-#rid+SH#sAtZGIb6G_68U$n6E1-ZMDB_YDk>3D!Y?fwJ4wl>d4xVT0W9yj$c+~uow-wQS`5&YP|dl|R# zQI(10p?X8bNUgJFjR6a-`Y#a;@XlSNsx1)H9`;W9c( zMKZIQz%x)*(&Bj3#&r1Got~CWJ5`yblLEiaOc0M zVQ_c)LZTy@&e$vpphF-|fJsy8R=QMGd(1MuP|X5q+}7~Lj&|nRRzIz8Y%IcFfb3&ELzzqf^wK=soO9ch0}9wN6TQC<$nBES9(|D-Qe1z-Op;%b z15&eV!Of#w6jPbVy{j~H6>9qs*vf;0BcZ+c-hh=nngK&}PVs(bsIeY-(Hgb)#p(3Y z$^P2qD{m!JbNJJ9Yv))D?sy|RUpj-C-Q%|FW%oiy8C7J`How}W_U4Tq>yoFEXHSsl z zxLc`$n-cCmfew@jL6o!R1KXJ$Y7C%hqVpb+zLcfIiRsYvlDFqF^O~}gUnWSW)v6t8 z-`wRXx24(_(HBxiQnDb3BA)3$OS8sYGu2s6p{)0DduU;ZM5L%B`&Y|01rO! z*Bw6r@G=+n`@UZ8o??5nHy-=i$ADNylK6q6!bsEG;Qss_;M|MOiX_jZp)ASNO@v7m z6{_u}5|6Spy>KDfD)4Za)y8I4OElNgM%b-=!AYwYgaap?h=%N?V4|DZBOBND-`r

    5H2zkw>*PlG_Ubn)&kOZ@K*f)2&Y( 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 + + diff --git a/frontend/src/lib/components/graph/svelvet/interactiveNodes/README.md b/frontend/src/lib/components/graph/svelvet/interactiveNodes/README.md new file mode 100644 index 0000000000..9e113c4589 --- /dev/null +++ b/frontend/src/lib/components/graph/svelvet/interactiveNodes/README.md @@ -0,0 +1,5 @@ +# README + +## Description + +Thie folder implements functionality to create new nodes and new edges dynamically. diff --git a/frontend/src/lib/components/graph/svelvet/interactiveNodes/controllers/createEdgeAndAnchors.ts b/frontend/src/lib/components/graph/svelvet/interactiveNodes/controllers/createEdgeAndAnchors.ts new file mode 100644 index 0000000000..e7a08c482d --- /dev/null +++ b/frontend/src/lib/components/graph/svelvet/interactiveNodes/controllers/createEdgeAndAnchors.ts @@ -0,0 +1,100 @@ +const pkStringGenerator = () => (Math.random() + 1).toString(36).substring(7); +import type { StoreType, PotentialAnchorType } from '../../store/types/types'; +import { get } from 'svelte/store'; +import { Node } from '../../nodes/models/Node'; +import { Edge } from '../../edges/models/Edge'; +import { Anchor } from '../../edges/models/Anchor'; + +import { + rightCb, + leftCb, + topCb, + bottomCb, +} from '../../edges/controllers/anchorCbUser'; +import { createPotentialAnchor } from '../../store/controllers/util'; +import { dynamicCbCreator } from '../../edges/controllers/anchorCbDev'; +import { getAnchors } from '../../edges/controllers/util'; +import { getPotentialAnchors } from './util'; + +/** + * Creates a new edge and two adaptive anchor points and updates the edgesStore and anchorsStore. + * + * @param store The Svelvet store containing the state of a Svelvet component + * @param sourceNodeId The id of the source Node + * @param targetNodeId The id of the target Node + * @param canvasId The canvasId of a Svelvet component + */ +export function createEdgeAndAnchors( + store: StoreType, + sourceNodeId: string, + targetNodeId: string, + canvasId: string +) { + // create an edge + const edgeId = pkStringGenerator(); + const newEdge = new Edge( + edgeId, + -1, + -1, + -1, + -1, + canvasId, + '', + 'bezier', + 'black', + 'black', + 'black', + false, + true, + false, + () => {}, + '' + ); + + // create source anchor + const sourceAnchorId = pkStringGenerator(); + const sourceDynamicCb = dynamicCbCreator(store, edgeId, sourceAnchorId); + const sourceAnchor = new Anchor( + sourceAnchorId, + sourceNodeId, + edgeId, + 'source', + -1, // dummy variables for x,y,angle for now + -1, // dummy variables for x,y,angle for now + sourceDynamicCb, + canvasId, + 0 // dummy variables for x,y,angle for now + ); + + // create target anchor + const targetAnchorId = pkStringGenerator(); + const targetDynamicCb = dynamicCbCreator(store, edgeId, targetAnchorId); + const targetAnchor = new Anchor( + targetAnchorId, + targetNodeId, + edgeId, + 'target', + -1, // dummy variables for x,y,angle for now + -1, // dummy variables for x,y,angle for now + targetDynamicCb, + canvasId, + 0 // dummy variables for x,y,angle for now + ); + + // put everything into the store + const { edgesStore, anchorsStore } = store; + + anchorsStore.update((anchors) => { + anchors[sourceAnchorId] = sourceAnchor; + anchors[targetAnchorId] = targetAnchor; + return { ...anchors }; + }); + edgesStore.update((edges) => { + edges[edgeId] = newEdge; + return { ...edges }; + }); + + // make sure to update positions. TODO: don't need to do this for the entire store + const anchors = getAnchors(store); + for (const anchor of anchors) anchor.callback(); +} diff --git a/frontend/src/lib/components/graph/svelvet/interactiveNodes/controllers/createNode.ts b/frontend/src/lib/components/graph/svelvet/interactiveNodes/controllers/createNode.ts new file mode 100644 index 0000000000..2463554d26 --- /dev/null +++ b/frontend/src/lib/components/graph/svelvet/interactiveNodes/controllers/createNode.ts @@ -0,0 +1,166 @@ +const pkStringGenerator = () => (Math.random() + 1).toString(36).substring(7); +import type { StoreType, PotentialAnchorType } from '../../store/types/types'; +import { get } from 'svelte/store'; +import { Node } from '../../nodes/models/Node'; +import { Edge } from '../../edges/models/Edge'; +import { Anchor } from '../../edges/models/Anchor'; + +import { + rightCb, + leftCb, + topCb, + bottomCb, +} from '../../edges/controllers/anchorCbUser'; +import { createPotentialAnchor } from '../../store/controllers/util'; +import { dynamicCbCreator } from '../../edges/controllers/anchorCbDev'; +import { getAnchors } from '../../edges/controllers/util'; +import { getPotentialAnchors } from './util'; + +/** + * Creates a new Node when user drags the Edge and releases mouse at a new spot. This functionality is needed for the "create new node by dragging" feature. See TemporaryEdge.createNode() + * This function has no output, but alters the store. New Node/Edge/Anchor objects are added to the store. + * + * @param store The Svelvet store containing the state of a Svelvet component + * @param sourceNodeId The id of the source Node + * @param targetNodeX The postion X where user releases the mouse, which should be the x-axis position for the new Node + * @param targetNodeY The postion Y where user releases the mouse, which should be the y-axis position for the new Node + * @param canvasId The canvasId of a Svelvet component + */ +export function createNode( + store: StoreType, + sourceNodeId: string, + targetNodeX: number, + targetNodeY: number, + canvasId: string +) { + // create a new node + const targetNodeId = pkStringGenerator(); + + const node = new Node( + targetNodeId, + targetNodeX, + targetNodeY, + 100, // width + 100, // height + 'white', // background color + { + label: 'new node', + }, + canvasId, + 'black', // borderColor + false, // Node has an image + '', // src, not sure what this does + 'black', // text color + 0, // borderRadius + [], + '', + () => {} + ); + + // create new potential anchor, we do this because if we create + const potentialAnchorRight = createPotentialAnchor( + rightCb, + store, + targetNodeId, + canvasId + ); + const potentialAnchorLeft = createPotentialAnchor( + leftCb, + store, + targetNodeId, + canvasId + ); + const potentialAnchorTop = createPotentialAnchor( + topCb, + store, + targetNodeId, + canvasId + ); + const potentialAnchorBottom = createPotentialAnchor( + bottomCb, + store, + targetNodeId, + canvasId + ); + + // create an edge + const edgeId = pkStringGenerator(); + const newEdge = new Edge( + edgeId, + -1, + -1, + -1, + -1, + canvasId, + '', + 'bezier', + 'black', + 'black', + 'black', + false, + true, + false, + () => {}, + '' + ); + + // create source anchor + const sourceAnchorId = pkStringGenerator(); + const sourceDynamicCb = dynamicCbCreator(store, edgeId, sourceAnchorId); + const sourceAnchor = new Anchor( + sourceAnchorId, + sourceNodeId, + edgeId, + 'source', + -1, // dummy variables for x,y,angle for now + -1, // dummy variables for x,y,angle for now + sourceDynamicCb, + canvasId, + 0 // dummy variables for x,y,angle for now + ); + + // create target anchor + const targetAnchorId = pkStringGenerator(); + const targetDynamicCb = dynamicCbCreator(store, edgeId, targetAnchorId); + const targetAnchor = new Anchor( + targetAnchorId, + targetNodeId, + edgeId, + 'target', + -1, // dummy variables for x,y,angle for now + -1, // dummy variables for x,y,angle for now + targetDynamicCb, + canvasId, + 0 // dummy variables for x,y,angle for now + ); + + // put everything into the store + const { nodesStore, edgesStore, anchorsStore, potentialAnchorsStore } = store; + + nodesStore.update((nodes) => { + nodes[targetNodeId] = node; + return { ...nodes }; + }); + + anchorsStore.update((anchors) => { + anchors[sourceAnchorId] = sourceAnchor; + anchors[targetAnchorId] = targetAnchor; + return { ...anchors }; + }); + potentialAnchorsStore.update((anchors) => { + anchors[potentialAnchorRight.id] = potentialAnchorRight; + anchors[potentialAnchorTop.id] = potentialAnchorTop; + anchors[potentialAnchorBottom.id] = potentialAnchorBottom; + anchors[potentialAnchorLeft.id] = potentialAnchorLeft; + return { ...anchors }; + }); + edgesStore.update((edges) => { + edges[edgeId] = newEdge; + return { ...edges }; + }); + // make sure to update positions of anchors and potential anchors. TODO: don't need to do this for the entire store + const anchors = getAnchors(store); + for (const anchor of anchors) anchor.callback(); + const potAnchors = getPotentialAnchors(store); + for (const anchor of potAnchors) anchor.callback(); +} diff --git a/frontend/src/lib/components/graph/svelvet/interactiveNodes/controllers/util.ts b/frontend/src/lib/components/graph/svelvet/interactiveNodes/controllers/util.ts new file mode 100644 index 0000000000..2f3256b9ab --- /dev/null +++ b/frontend/src/lib/components/graph/svelvet/interactiveNodes/controllers/util.ts @@ -0,0 +1,75 @@ +import type { StoreType, PotentialAnchorType } from '../../store/types/types'; +import { get } from 'svelte/store'; +import type { NodeType } from '../../store/types/types'; + +/** + * getPotentialAnchorById will look for the targeted potential Anchor that has the same id provided in the Svelvet component store. + * + * @param store The Svelvet store containing the state of a Svelvet component + * @param id The id of the targeted potential Anchor + * @returns The targeted potential Anchor object in store.potentialAnchorsStore + */ +export function getPotentialAnchorById(store: StoreType, id: string) { + const potentialAnchorsStore = get(store.potentialAnchorsStore); + const potentialAnchor = potentialAnchorsStore[id]; + if (potentialAnchor === undefined) throw 'potential anchor not found'; + return potentialAnchor; +} + +/** + * Finds all potentialAnchors that matches the conditions specified in the filter parameter from a Svelvet store and returns these potential anchors in an array + * + * @param store The Svelvet store containing the state of a Svelvet component + * @param filter An object to specify conditions. + * @returns An array of potential anchors that matches the conditions specified in filter parameter + */ +export function getPotentialAnchors( + store: StoreType, + filter?: { [key: string]: any } +) { + let potentialAnchorsArr = Object.values(get(store.potentialAnchorsStore)); + // filter the array for elements that match filter + if (filter !== undefined) { + potentialAnchorsArr = potentialAnchorsArr.filter((potentialAnchor) => { + for (let filterKey in filter) { + const filterValue = filter[filterKey]; + if ( + potentialAnchor[filterKey as keyof PotentialAnchorType] !== + filterValue + ) + return false; + } + return true; + }); + } + // return list of anchors + return potentialAnchorsArr; +} + +/** + * Finds all Nodes that matches the conditions specified in the filter parameter from a Svelvet store and returns these Nodes in an array + * + * @param store The Svelvet store containing the state of a Svelvet component + * @param filter An object to specify conditions. + * @returns An array of Node objects that matches the conditions specified in filter parameter. This array is non-reactive (ie, you cannot use information from this array to force a re-render of a Svelte component) + */ +export function getNodes( + store: StoreType, + filter?: { [key: string]: any } +): NodeType[] { + let nodes = Object.values(get(store.nodesStore)); + // filter the array of anchors for elements that match filter + // Example: if filter = {sourceOrTarget: 'source', positionX: 35} then we will + // return all anchors with sourceOrTarget = source AND poxitionX = 35 + if (filter !== undefined) { + nodes = nodes.filter((node) => { + for (let filterKey in filter) { + const filterValue = filter[filterKey]; + if (node[filterKey as keyof NodeType] !== filterValue) return false; + } + return true; + }); + } + // return list of nodes + return nodes; +} diff --git a/frontend/src/lib/components/graph/svelvet/interactiveNodes/models/PotentialAnchor.ts b/frontend/src/lib/components/graph/svelvet/interactiveNodes/models/PotentialAnchor.ts new file mode 100644 index 0000000000..883f191304 --- /dev/null +++ b/frontend/src/lib/components/graph/svelvet/interactiveNodes/models/PotentialAnchor.ts @@ -0,0 +1,34 @@ +// this class is for the 4 potential anchors that appear on each node + +import type { PotentialAnchorType } from '../../store/types/types'; +import { stores } from '../../store/models/store'; + +/** Class representing an anchor with a Anchortype alias */ +export class PotentialAnchor implements PotentialAnchorType { + /** + * creates a potential anchor. + * Users can create edges by linking two potential anchors + */ + constructor( + public id: string, + public nodeId: string, + public callback: Function, // callback is used to calculate positionX, positionY based on parent node's data, and set the anchor position // TODO: rename to something better + public positionX: number, + public positionY: number, + public angle: number, + public canvasId: string + ) {} + + delete() { + const { potentialAnchorsStore } = stores[this.canvasId]; + + potentialAnchorsStore.update((potentialAnchors) => { + for (const potentialAnchorId in potentialAnchors) { + if (potentialAnchors[potentialAnchorId].id === this.id) { + delete potentialAnchors[potentialAnchorId]; + } + } + return { ...potentialAnchors }; + }); + } +} diff --git a/frontend/src/lib/components/graph/svelvet/interactiveNodes/models/TemporaryEdge.ts b/frontend/src/lib/components/graph/svelvet/interactiveNodes/models/TemporaryEdge.ts new file mode 100644 index 0000000000..45e9cc8676 --- /dev/null +++ b/frontend/src/lib/components/graph/svelvet/interactiveNodes/models/TemporaryEdge.ts @@ -0,0 +1,58 @@ +// table for the "connecting edge" feature +import type { TemporaryEdgeType } from '../../store/types/types'; +import { getPotentialAnchorById } from '../controllers/util'; +import { findStore } from '../../store/controllers/storeApi'; +import { createEdgeAndAnchors } from '../controllers/createEdgeAndAnchors'; + +import { createNode } from '../controllers/createNode'; + +import { getNodeById } from '../..//nodes/controllers/util'; + +export class TemporaryEdge implements TemporaryEdgeType { + constructor( + public id: string, + public sourcePotentialAnchorId: string, // this will always be set + public sourceX: number, + public sourceY: number, + public targetPotentialAnchorId: string | null, // this will be null until the temporary edge reaches another temporary anchor + public targetX: number, + public targetY: number, + public canvasId: string, + public type: string, + public edgeColor: string + ) {} + + // HOW: (1) Get the source/target potentialAnchor object + // (3) Get node id's of corresponding source/target nodes + // (4) + createEdge() { + if (this.targetPotentialAnchorId === null) + throw 'cannot create edge with null target'; + const store = findStore(this.canvasId); + // get the source/target potentialAnchor objects + const potentialAnchorSource = getPotentialAnchorById( + store, + this.sourcePotentialAnchorId + ); + const potentialAnchorTarget = getPotentialAnchorById( + store, + this.targetPotentialAnchorId + ); + // get node id's of source/target nodes + const sourceNode = getNodeById(store, potentialAnchorSource.nodeId); + const targetNode = getNodeById(store, potentialAnchorTarget.nodeId); + createEdgeAndAnchors(store, sourceNode.id, targetNode.id, this.canvasId); + } + createNode() { + if (this.targetPotentialAnchorId !== null) + throw 'you should only create a node when you are hovering over blank space'; + const store = findStore(this.canvasId); + // get the source/target potentialAnchor objects + const potentialAnchorSource = getPotentialAnchorById( + store, + this.sourcePotentialAnchorId + ); + const sourceNodeId = potentialAnchorSource.nodeId; + createNode(store, sourceNodeId, this.targetX, this.targetY, this.canvasId); + } +} diff --git a/frontend/src/lib/components/graph/svelvet/interactiveNodes/views/PotentialAnchor.svelte b/frontend/src/lib/components/graph/svelvet/interactiveNodes/views/PotentialAnchor.svelte new file mode 100644 index 0000000000..bb47b5285b --- /dev/null +++ b/frontend/src/lib/components/graph/svelvet/interactiveNodes/views/PotentialAnchor.svelte @@ -0,0 +1,169 @@ + + + { + // imelements drawing an (temporary) edge from a potential anchor to the mouse cursor + e.preventDefault(); + if (isDragging) { + temporaryEdgeStore.update((edges) => { + if (edges.length !== 1) + throw `if you are dragging, there should be one edge. We have not implemented multiple edges`; + const edge = edges[0]; + const d3Scale = get(store.d3Scale); + edge.targetX += e.movementX / d3Scale; + edge.targetY += e.movementY / d3Scale; + return [edge]; + }); + } + }} + on:mouseup={(e) => { + isDragging = false; // prevent the new edge from moving + + // only do update if temporaryEdgeStore has one element, and if that tempEdge.targetId = potentialAnchorId + // otherwise don't do anything (don't even update at all!!!) + if ( + get(temporaryEdgeStore).length === 1 && + get(temporaryEdgeStore)[0].targetPotentialAnchorId === potentialAnchorId + ) { + temporaryEdgeStore.update((edges) => { + for (let edge of edges) { + if (potentialAnchorId === edge.targetPotentialAnchorId) { + edge.createEdge(); + } + } + return []; + }); + } else if ( + get(temporaryEdgeStore).length === 1 && + get(temporaryEdgeStore)[0].targetPotentialAnchorId === null + ) { + temporaryEdgeStore.update((edges) => { + for (let edge of edges) { + // note length 1, refactor store to single tempEdge instead of arr of tempEdge + edge.createNode(); + } + return []; + }); + } + }} +/> + +
    { + // mouseHover is used to decide whether to create a new edge/node + mouseHover = true; + // our mouse is over anchor, so set the target anchor + temporaryEdgeStore.update((edges) => { + for (let edge of edges) { + edge.targetPotentialAnchorId = potentialAnchorId; + } + return [...edges]; + }); + }} + on:mouseleave={(e) => { + // mouseHover is used to decide whether to create a new edge/node + mouseHover = false; + + // If you are dragging an edge, and your mouse leaves an anchor area, then make sure to + // set targetAnchor back to null. We do a check because there are multiple anchorpoints + if (isDragging) { + temporaryEdgeStore.update((edges) => { + for (let edge of edges) { + if (edge.targetPotentialAnchorId === potentialAnchorId) + edge.targetPotentialAnchorId = null; + } + return [...edges]; + }); + } + }} + on:mousedown={(e) => { + e.preventDefault(); + e.stopPropagation(); // Important! Prevents the event from firing on the parent element (the .Nodes div) + isDragging = true; + temporaryEdgeStore.update((edges) => { + if (edges.length === 0) { + // say there are no temporary edges. This means the user just clicked on the potential anchor + // so the current mouse position = temporary anchor position = mouseX, mouseY + const newTempEdge = new TemporaryEdge( + pkStringGenerator(), + potentialAnchor.id, + mouseX, + mouseY, + null, + mouseX, + mouseY, + canvasId, + 'straight', + 'black' + ); + return [newTempEdge]; + } else { + throw `there should only be zero or one temporary edge at any given time`; + } + }); + }} + class="Anchor" + style={` + height:${anchorHeight}px; + width:${anchorWidth}px; + top: ${y - anchorHeight / 2}px; + left:${x - anchorWidth / 2}px; + `} +/> + + diff --git a/frontend/src/lib/components/graph/svelvet/interactiveNodes/views/TemporaryEdge.svelte b/frontend/src/lib/components/graph/svelvet/interactiveNodes/views/TemporaryEdge.svelte new file mode 100644 index 0000000000..6c777a4551 --- /dev/null +++ b/frontend/src/lib/components/graph/svelvet/interactiveNodes/views/TemporaryEdge.svelte @@ -0,0 +1,28 @@ + + + + + diff --git a/frontend/src/lib/components/graph/svelvet/nodes/controllers/util.ts b/frontend/src/lib/components/graph/svelvet/nodes/controllers/util.ts new file mode 100644 index 0000000000..8f78a85a5e --- /dev/null +++ b/frontend/src/lib/components/graph/svelvet/nodes/controllers/util.ts @@ -0,0 +1,16 @@ +import type { StoreType } from '../../store/types/types'; +import { writable, derived, get, readable } from 'svelte/store'; + +/** + * getNodeById will look for the targeted Node that has the same id provided in the Svelvet component store. + * + * @param store The Svelvet store containing the state of a Svelvet component + * @param id The id of the targeted Node + * @returns The targeted Node object in store.nodesStore + */ + +export function getNodeById(store: StoreType, id: string) { + const nodesStore = get(store.nodesStore); + const node = nodesStore[id]; + return node; +} diff --git a/frontend/src/lib/components/graph/svelvet/nodes/models/Node.ts b/frontend/src/lib/components/graph/svelvet/nodes/models/Node.ts new file mode 100644 index 0000000000..48ae5749b2 --- /dev/null +++ b/frontend/src/lib/components/graph/svelvet/nodes/models/Node.ts @@ -0,0 +1,213 @@ +/** this is where we create our node store */ +import type { NodeType } from '../../store/types/types'; +import { writable, derived, get, readable } from 'svelte/store'; +import { getPotentialAnchors } from '../../interactiveNodes/controllers/util'; +import { stores } from '../../store/models/store'; +import { getAnchors, getEdgeById } from '../../edges/controllers/util'; +import { getResizeNodes } from '../../resizableNodes/controllers/util'; +/** A Node class that implements NodeType interface + * @param {string} id The id of the Node + * @param {number} positionX The X-axis position of the Node (left top corner of the Node) + * @param {number} positionY The Y-axis position of the Node (left top corner of the Node) + * @param {number} width The width of the Node + * @param {number} height The height of the Node + * @param {string} bgColor The background color of the node + * @param {object} data A data object that user can specify; possible keys are 'label' and 'custom'; + * @param {string} canvasId The canvasId of the Svelvet component that the instantiated Node will be on. + * @param {string} borderColor The border color of the Node + * @param {boolean} image A boolean set to true if the Node needs to display an image + * @param {string} src The src link for the image; image and src are closely tied and a src link is only needed when image sets to true + * @param {string} textColor The color of the text in the Node + * @param {string} borderRadius The border radius of the Node + * @param {string} childNodes An array of node ids that will be grouped as child nodes of this Node. This is for the GroupNodes feature. The current implementation of this feature works one way but not the other (when you drag the parent node, the child nodes will move as a group but when you drag the child node, the parent node would not move along) + * @param {string} className The custom class name if user specifies. This is for the custom className feature for Node. + */ +export class Node implements NodeType { + constructor( + public id: string, + public positionX: number, + public positionY: number, + public width: number, + public height: number, + public bgColor: string, + public data: object, + public canvasId: string, + public borderColor: string, + public image: boolean, + public src: string, + public textColor: string, + public borderRadius: number, + public childNodes: string[], + public className: string, + public clickCallback: Function + ) {} + + /** + * setPositionFromMovement will update the positionX and positionY of the Node when user drags a Node around on the canvas, reflect the changes in real time in the nodesStore, and also cascade the changes to all relative elements like Anchors and Edges. + * @param {number} movementX The mouse movement value on the X-axis + * @param {number} movementY The mouse movement value on the Y-axis + */ + setPositionFromMovement(movementX: number, movementY: number) { + const { + nodesStore, + anchorsStore, + resizeNodesStore, + potentialAnchorsStore, + boundary, + lockedOption, + } = stores[this.canvasId]; + + if (get(lockedOption)) return; // don't do anything if locked is enabled + + // boundary sets the boundary of the canvas, or else it is false if their is no boundary + // check if out of bounds, and if so return without doing anything + const boundaryObj = get(boundary); + if ( + typeof boundaryObj === 'object' && + (this.positionX + this.width + movementX >= boundaryObj.x || + this.positionY + this.height + movementY >= boundaryObj.y || + this.positionY + movementY <= 0 || + this.positionX + movementX <= 0) + ) + return; + //update all necessary data + this.positionX += movementX; + this.positionY += movementY; + + // update children + nodesStore.update((nodes) => { + if (this.childNodes) + for (const childNodeId of this.childNodes) + nodes[childNodeId].setPositionFromMovement(movementX, movementY); + return { ...nodes }; + }); + + //update all the anchors on the node in the anchorsStore + anchorsStore.update((anchors) => { + for (const anchorId in anchors) { + if (anchors[anchorId].nodeId === this.id) { + anchors[anchorId].setPositionFromNode(); + } + } + return { ...anchors }; + }); + + //update all the anchors on the node in the anchorsStore + potentialAnchorsStore.update((anchors) => { + for (const anchorId in anchors) { + if (anchors[anchorId].nodeId === this.id) { + anchors[anchorId].callback(); // we don't have to worry about setting partner anchors/etc; + } + } + return { ...anchors }; + }); + + resizeNodesStore.update((resAnchors) => { + for (const anchorId in resAnchors) { + if (resAnchors[anchorId].nodeId === this.id) { + resAnchors[anchorId].setPosition(movementX, movementY); + //resAnchors[anchorId].setPosition(movementX, movementY); + } + } + return { ...resAnchors }; + }); + } + + /** + * setSizeFromMovement will update the width and height of the Node when user resizes the Node by dragging at the right bottom corner (where the ResizedNode attached), reflect the changes in real time in the nodesStore, and also cascade the changes to all relative elements like Anchors and potential Anchors. + * + * @param movementX The mouse movement value on the X-axis + * @param movementY The mouse movement value on the Y-axis + */ + setSizeFromMovement(movementX: number, movementY: number) { + this.width += movementX; + this.height += movementY; + + const { anchorsStore, potentialAnchorsStore } = stores[this.canvasId]; + + //Updates the anchor so it follows the node's position as the dimensions change + anchorsStore.update((anchors) => { + for (const anchorId in anchors) { + if (anchors[anchorId].nodeId === this.id) { + anchors[anchorId].setPositionFromNode(); + //anchors[anchorId].setPosition(movementX, movementY); + } + } + return { ...anchors }; + }); + + //update all the anchors on the node in the anchorsStore + potentialAnchorsStore.update((anchors) => { + for (const anchorId in anchors) { + if (anchors[anchorId].nodeId === this.id) { + anchors[anchorId].callback(); // we don't have to worry about setting partner anchors/etc; + } + } + return { ...anchors }; + }); + } + + /** + * delete will handle the deletion of a Node (also waterfall down to delete anchors and edges) + */ + delete() { + const store = stores[this.canvasId]; + const { nodesStore, anchorsStore, edgesStore } = stores[this.canvasId]; + + nodesStore.update((nodes) => { + for (const nodeId in nodes) { + if (nodes[nodeId].id === this.id) { + delete nodes[nodeId]; + } + } + return { ...nodes }; + }); + + // variable `anchors` is an array of Anchor objects on the node + const anchors = getAnchors(store, { nodeId: this.id }); + for (let anchorSelf of anchors) { + const edgeId = anchorSelf.edgeId; + const edge = getEdgeById(store, edgeId); + edge.delete(); // this also deletes anchors. TODO: maybe this should be renamed to explicitly say + } + + // delete the resize nodes + const resizeNodesArr = getResizeNodes(store, { nodeId: this.id }); + // there should be only 1 resize node if option is enabled, 0 if not enabled + for (const resizeNode of resizeNodesArr) { + resizeNode.delete(); + } + + // delete the potential anchors + const potentialAnchorsArr = getPotentialAnchors(store, { nodeId: this.id }); + for (const potentialAnchor of potentialAnchorsArr) { + potentialAnchor.delete(); + } + } + + /** + * setExportableData is going to construct an object that holds all the node data that can be exported. This method is used for Exporting Diagrams feature. + * + * @returns An object with all the exportable data of the Node. The format of this object should align with the original format of node data user provided. + */ + setExportableData() { + const exportableData = { + id: this.id, + // canvasId: this.canvasId, + width: this.width, + height: this.height, + position: { x: this.positionX, y: this.positionY }, + data: this.data, + bgColor: this.bgColor, + borderColor: this.borderColor, + textColor: this.textColor, + borderRadius: this.borderRadius, + image: this.image, + src: this.src, + childNodes: this.childNodes, + customClassName: this.className, + }; + + return exportableData; + } +} diff --git a/frontend/src/lib/components/graph/svelvet/nodes/views/EditNode.svelte b/frontend/src/lib/components/graph/svelvet/nodes/views/EditNode.svelte new file mode 100644 index 0000000000..84f3f20a8f --- /dev/null +++ b/frontend/src/lib/components/graph/svelvet/nodes/views/EditNode.svelte @@ -0,0 +1,146 @@ + + +{#if isEditing} +
    ($nodeSelected = true)} + on:focus + on:wheel|preventDefault + class="EditNode" + style="left:{currentNode.positionX + + currentNode.width}px; top:{currentNode.positionY}px" + > +
    + + + + + + +
    +
    + + +
    +
    +{/if} + + diff --git a/frontend/src/lib/components/graph/svelvet/nodes/views/Node.svelte b/frontend/src/lib/components/graph/svelvet/nodes/views/Node.svelte new file mode 100644 index 0000000000..93b707fc0d --- /dev/null +++ b/frontend/src/lib/components/graph/svelvet/nodes/views/Node.svelte @@ -0,0 +1,92 @@ + + + +
    + + {#if node.image} + + {/if} + +
    + + diff --git a/frontend/src/lib/components/graph/svelvet/resizableNodes/controllers/util.ts b/frontend/src/lib/components/graph/svelvet/resizableNodes/controllers/util.ts new file mode 100644 index 0000000000..f8bc6dab57 --- /dev/null +++ b/frontend/src/lib/components/graph/svelvet/resizableNodes/controllers/util.ts @@ -0,0 +1,28 @@ +import type { StoreType, ResizeNodeType } from '../../store/types/types'; +import { get } from 'svelte/store'; +/** + * Finds all resizeNodes that matches the conditions specified in the filter parameter from a Svelvet store and returns these resizeNodes in an array + * + * @param store The Svelvet store containing the state of a Svelvet component + * @param filter An object to specify conditions. + * @returns An array of resizeNode objects that matches the conditions specified in filter parameter + */ +export function getResizeNodes( + store: StoreType, + filter?: { [key: string]: any } +) { + let resizeNodes = Object.values(get(store.resizeNodesStore)); + // filter the array for elements that match filter + if (filter !== undefined) { + resizeNodes = resizeNodes.filter((resizeNode) => { + for (let filterKey in filter) { + const filterValue = filter[filterKey]; + if (resizeNode[filterKey as keyof ResizeNodeType] !== filterValue) + return false; + } + return true; + }); + } + // return list of anchors + return resizeNodes; +} diff --git a/frontend/src/lib/components/graph/svelvet/resizableNodes/models/ResizeNode.ts b/frontend/src/lib/components/graph/svelvet/resizableNodes/models/ResizeNode.ts new file mode 100644 index 0000000000..a23fec9317 --- /dev/null +++ b/frontend/src/lib/components/graph/svelvet/resizableNodes/models/ResizeNode.ts @@ -0,0 +1,73 @@ +import type { ResizeNodeType } from '../../store/types/types'; +// import { writable, derived, get, readable } from 'svelte/store'; +import { stores } from '../../store/models/store'; + +/** A ResizeNode class that implements ResizeNodeType interface +* @param {string} id The id of the ResizeNode +* @param {string} canvasId The canvasId of the Svelvet component that the instantiated ResizeNode will be on. +* @param {string} nodeId The id of the Node that the instantiated ResizedNode will be attached to. +* @param {number} positionX The X-axis position of the ResizeNode (left top corner of the ResizeNode) +* @param {number} positionY The Y-axis position of the ResizeNode (left top corner of the ResizeNode) +*/ +export class ResizeNode implements ResizeNodeType { + constructor( + public id: string, + public canvasId: string, + public nodeId: string, + public positionX: number, + public positionY: number + ) {} + + /** + * setPosition will update the positionX and positionY of the ResizeNode. This will be invoked when the Node that this ResizeNode attached to is moving so that the ResizeNode will follow the Node. + * + * @param movementX The mouse movement value on the X-axis + * @param movementY The mouse movement value on the Y-axis + */ + setPosition(movementX: number, movementY: number) { + this.positionX += movementX; + this.positionY += movementY; + } + + /** + * setPositionAndCascade will update the positionX and positionY of the ResizeNode and also cascade changes to related Node. This will be invoked when the user drags the ResizeNode so the position of the ResizeNode and the width and height of the Node would change accordingly. + * @param movementX The mouse movement value on the X-axis + * @param movementY The mouse movement value on the Y-axis + */ + setPositionAndCascade(movementX: number, movementY: number) { + //declare variables needed to interact with the corresponding node to this resize anchor + const nodeId = this.nodeId; + const { nodesStore } = stores[this.canvasId]; + + //Updates the width/height of the corresponding Node + nodesStore.update((nodes) => { + const node = nodes[nodeId]; + + //sets condition so node cannot be less than 20 px in width or height. + if (node.width + movementX > 20 && node.height + movementY > 20) { + //Updates position to this resizeNode anchor. Must be done within the update method so ensure the position doesn't change if the width goes below 20px + this.positionX += movementX; + this.positionY += movementY; + //setSizeFromMovement will then update the anchors position as the width & height changes + node.setSizeFromMovement(movementX, movementY); + } + return { ...nodes }; + }); + } + + /** + * delete is going to delete the ResizeNode from the resizeNodesStore. + */ + delete() { + const store = stores[this.canvasId]; + const { resizeNodesStore } = stores[this.canvasId]; + resizeNodesStore.update((resizeNodes) => { + for (const resizeNodeId in resizeNodes) { + if (resizeNodes[resizeNodeId].id === this.id) { + delete resizeNodes[resizeNodeId]; + } + } + return { ...resizeNodes }; + }); + } +} diff --git a/frontend/src/lib/components/graph/svelvet/resizableNodes/views/ResizeNode.svelte b/frontend/src/lib/components/graph/svelvet/resizableNodes/views/ResizeNode.svelte new file mode 100644 index 0000000000..53c593bdd7 --- /dev/null +++ b/frontend/src/lib/components/graph/svelvet/resizableNodes/views/ResizeNode.svelte @@ -0,0 +1,85 @@ + + + { + e.preventDefault(); + if (isSelected) { + resizeNodesStore.update((resNode) => { + const newResNode = resNode[resizeId]; + const d3Scale = get(store.d3Scale); + newResNode.setPositionAndCascade( + e.movementX / d3Scale, + e.movementY / d3Scale, + resizeId + ); + return { ...resNode }; + }); + } + }} + on:mouseup={(e) => { + e.preventDefault(); + // don't need to set $nodeSelected = false because Node component will do it for you + isSelected = false; + }} +/> + +
    { + e.preventDefault(); + $nodeSelected = true; + isSelected = true; + }} + on:mouseover={(e) => ($nodeSelected = true)} + on:focus + on:mouseleave={(e) => ($nodeSelected = false)} + on:mouseenter={(e) => ($nodeSelected = true)} + on:wheel|preventDefault + class="ResizeNode" + style=" + left: {reactResizeNode.positionX - 10}px; + top: {reactResizeNode.positionY - 10}px; + width: {20}px; + height: {20}px; + background-color: purple; + border-color: purple; + border-radius: 50%;" + id="svelvet-{resizeId}" +/> + + diff --git a/frontend/src/lib/components/graph/svelvet/store/controllers/storeApi.ts b/frontend/src/lib/components/graph/svelvet/store/controllers/storeApi.ts new file mode 100644 index 0000000000..12500f9099 --- /dev/null +++ b/frontend/src/lib/components/graph/svelvet/store/controllers/storeApi.ts @@ -0,0 +1,131 @@ +/* + + +Important functions (in order of how likely I think you are to use them): + +findStore(canvasId: string) +- Input: canvasId. There can be multiple Svelvet canvases on the same page, and each has their own store +- Returns: store +- Notes: You will need to call this function on every component you make + +getNodes(store, filter) +- Description: this function returns of list of Node objects +- Input: store: the store where you get the list of Node objects from +- filter: an object where you can filter the array. For example, if you want to find nodes with an id of 'sdf-2d3fs' and positionX=35, then you + would set filter = {id: 'sdf-2d3fs, positionX: 35}. + Right now, you can only test for equality. +- Notes: This is a very mongoose way of retrieving information. Given the relational nature of our stores, maybe it would be better to use an SQL-like syntax + This array is non-reactive (ie, you cannot use information from this array to force a re-render of a Svelte component) + +createStoreEmpty(canvasId: string) +- Input: canvasId. +- Returns: store +- Notes. This should be called once every time you initialize a new Svelvet canvas, (ie, only in the Svelvet.svelte file) + +populateSvelvetStoreFromUserInput(canvasId, nodes, edges) +- canvasId: this the the canvasId of the Svelvet component you are creating a store for +- nodes: this is an array of objects containing node info that is defined by the user. NOTE THAT THE STRUCTURE DIFFERS FROM THE NODES CLASS + The whole point of populateSvelvetStoreFromUserInput is to convert nodes into proper Svelvet Node objects. An example of nodes is in + $routes/testingplayground/index.svelte +- edges: same as nodes, this is an array of objects containing edge info THAT IS DIFFERENT FROM THE EDGE CLASS. +- Returns: store +*/ +import { stores } from '../models/store'; +import { writable, get } from 'svelte/store'; + +import type { StoreType } from '../types/types'; +import type { UserNodeType, UserEdgeType } from '../../types/types'; +import { + populateAnchorsStore, + populateNodesStore, + populateEdgesStore, + populateResizeNodeStore, + populatePotentialAnchorStore, +} from './util'; +import { populateCollapsibleStore } from '../../collapsible/controllers/util'; + +/** + * findStore is going to return the target Svelvet store with the canvasId provided as argument. + * There can be multiple Svelvet canvases on the same page, and each has their own store with a unique canvasId. + * @param canvasId The canvasId of a Svelvet component + * @returns The store of a Svelvet component that matches the canvasId + */ +export function findStore(canvasId: string): StoreType { + return stores[canvasId]; +} + +/** + * createStoreEmpty will initialize a new Svelvet store with a unique canvasId. + * If you have multiple Svelvet components on the page, the stores object will look like the following example: + * const stores = \{ + * canvasId-1: store of Svelvet component 1, + * canvasId-2: store of Svelvet component 2, + * canvasId-3: store of Svelvet component 3, + * \} + * Notes: This should be called once every time you initialize a new Svelvet canvas, (ie, only in the Svelvet.svelte file). + * This function will initialize an empty store for the Svelvet component and should be followed by invoking populateSvelvetStoreFromUserInput to populate all the initial state from the user input. + * + * @param canvasId The canvasId of the newly created Svelvet component + * @returns An empty store for the newly created Svelvet component. + */ +export function createStoreEmpty(canvasId: string): StoreType { + stores[canvasId] = { + nodesStore: writable({}), + edgesStore: writable({}), + anchorsStore: writable({}), + resizeNodesStore: writable({}), + potentialAnchorsStore: writable({}), + widthStore: writable(600), + heightStore: writable(600), + backgroundStore: writable(false), + movementStore: writable(true), + nodeSelected: writable(false), + nodeIdSelected: writable(-1), + d3Scale: writable(1), + options: writable({}), + temporaryEdgeStore: writable([]), + nodeCreate: writable(false), // this option sets whether the "nodeEdit" feature is enabled + boundary: writable(false), + edgeEditModal: writable(null), // this is used for edgeEditModal feature. When an edge is right clicked, store.edgeEditModal is set to the edgeId string. This causes a modal to be rendered + collapsibleStore: writable([]), // this is used for the collaspsible node feature. If the feature is enabled, store.collapsible will be populated with Collapsible objects which will track whether the node should be displayed or not + collapsibleOption: writable(false), + lockedOption: writable(false), + editableOption: writable(false), // true if you want nodes/edges to be editable. See feature editEdges + d3ZoomParameters: writable({}), // this stores d3 parameters x, y, and zoom. This isn't used for anything other than giving users a way to access d3 zoom parameters if they want to build on top of Svelvet + resizableOption: writable(true), // option to turn on/off resizable nodes. + highlightEdgesOption: writable(true), // option to turn on/off highlightable edges + }; + return stores[canvasId]; +} + +/** + * populateSvelvetStoreFromUserInput will populate all the states and set these states into the Svelvet store initialized by invoking createStoreEmpty + * + * @param canvasId The canvasId of the Svelvet component you are creating a store for + * @param nodes This is an array of objects containing node info that is defined by the user. NOTE THAT THE STRUCTURE DIFFERS FROM THE NODES CLASS. The whole point of populateSvelvetStoreFromUserInput is to convert nodes into proper Svelvet Node objects. An example of nodes is in $routes/testingplayground/index.svelte + * @param edges Same as nodes, this is an array of objects containing edge info THAT IS DIFFERENT FROM THE EDGE CLASS. + */ +export function populateSvelvetStoreFromUserInput( + canvasId: string, + nodes: UserNodeType[], + edges: UserEdgeType[] +): void { + // find the store + const store = findStore(canvasId); + + // populate store.nodesStore with user nodes + populateNodesStore(store, nodes, canvasId); + // populate store.anchorsStore with anchors. Note the userdoes not explictly define anchors; anchors are calculated from the edges + populateAnchorsStore(store, nodes, edges, canvasId); + // populate edges + populateEdgesStore(store, edges, canvasId); + //populate resize Store + if (get(store.resizableOption)) + populateResizeNodeStore(store, nodes, canvasId); + //populate potential anchors if "node create" feature is turned on + if (get(store.nodeCreate)) + populatePotentialAnchorStore(store, nodes, canvasId); + // populatate collapsible objects if "collapsible" feature is turned on + if (get(store.collapsibleOption)) + populateCollapsibleStore(store, nodes, edges, canvasId); +} diff --git a/frontend/src/lib/components/graph/svelvet/store/controllers/userApi.ts b/frontend/src/lib/components/graph/svelvet/store/controllers/userApi.ts new file mode 100644 index 0000000000..88922d33be --- /dev/null +++ b/frontend/src/lib/components/graph/svelvet/store/controllers/userApi.ts @@ -0,0 +1,18 @@ +import { findStore } from './storeApi'; +import { get } from 'svelte/store'; +export function getD3PositionX(canvasId) { + const store = findStore(canvasId); + const width = get(store.widthStore); + const x = width / 2 - get(store.d3ZoomParameters).x; // user input is shifted so that x=0, y=0 occurs in the center + return x; +} +export function getD3PositionY(canvasId) { + const store = findStore(canvasId); + const height = get(store.heightStore); + const y = height / 2 - get(store.d3ZoomParameters).y; // user input is shifted so that x=0, y=0 occurs in the center + return y; +} +export function getD3Zoom(canvasId) { + const store = findStore(canvasId); + return get(store.d3ZoomParameters).k; +} diff --git a/frontend/src/lib/components/graph/svelvet/store/controllers/util.ts b/frontend/src/lib/components/graph/svelvet/store/controllers/util.ts new file mode 100644 index 0000000000..4eceff659e --- /dev/null +++ b/frontend/src/lib/components/graph/svelvet/store/controllers/util.ts @@ -0,0 +1,382 @@ +const pkStringGenerator = () => (Math.random() + 1).toString(36).substring(7); +import { + rightCb, + leftCb, + topCb, + bottomCb, +} from '../../edges/controllers/anchorCbUser'; // these are callbacks used to calculate anchor position relative to node +import { + dynamicCbCreator, + fixedCbCreator, + potentialAnchorCbCreator, +} from '../../edges/controllers/anchorCbDev'; + +import type { AnchorType, AnchorCbType } from '../../edges/types/types'; + +import type { + NodeType, + EdgeType, + StoreType, + ResizeNodeType, + PotentialAnchorType, +} from '../types/types'; +import type { UserNodeType, UserEdgeType } from '../../types/types'; + +import { ResizeNode } from '../../resizableNodes/models/ResizeNode'; +import { Anchor } from '../../edges/models/Anchor'; +import { Node } from '../../nodes/models/Node'; +import { Edge } from '../../edges/models/Edge'; +import { writable, derived, get, readable } from 'svelte/store'; +import { PotentialAnchor } from '../../interactiveNodes/models/PotentialAnchor'; +import { getEdgeById, getAnchors } from '../../edges/controllers/util'; + +/** + * Creates resize node on the bottom right corner of the targeted Node + * @param canvasId The canvasId of the Svelvet component that holds the targeted Node + * @param nodeId The id of the Node that the resize node attached to + * @param posX The number of pixels on the x-axis relative to the left top corner of the targeted Node + * @param posY The number of pixels on the y-axis relative to the left top corner of the targeted Node + * @returns A ReziseNode object with randomized id, canvasId, nodeId, posX, and posY + */ +function createResizeNode( + canvasId: string, + nodeId: string, + posX: number, + posY: number +) { + const id = pkStringGenerator(); + const resizeNode = new ResizeNode(id, canvasId, nodeId, posX, posY); + return resizeNode; +} + +/** + * Creates an Anchor on the targeted Node with infomation the userNode holds + * @param store An object containing the state of the Svelvet component. You can access the following through `store`: nodesStore, edgesStore, anchorsStore, etc. + * @param userNode A node that the user specifies. This is NOT the same as a Node object. + * @param sourceOrTarget User specified information of source or target + * @param canvasId The id of the canvas that holds the Anchor and its attached Node + * @param edge An edge that the user specifies. It should target the userNode as source or target. This is NOT the same as an Edge object + * @returns An Anchor object + */ + +function createAnchor( + store: StoreType, + userNode: UserNodeType | null, + sourceOrTarget: 'source' | 'target', + canvasId: string, + edge: UserEdgeType +) { + // edge case + if (userNode === null) + throw `you cannot create an anchor without a user node (for now)`; + + const edgeId = edge.id; + const anchorId = pkStringGenerator(); + + // userCb is the appropriate source or taret callback from userEdge object. It is + // possible the user to NOT set userCb in which case userCb will be undefined + let userCb: Function | undefined; + if (sourceOrTarget === 'target') userCb = edge.targetAnchorCb; + else userCb = edge.sourceAnchorCb; + + // create anchor callbacks + + let cb: AnchorCbType; + if (userCb === undefined) cb = dynamicCbCreator(store, edgeId, anchorId); + else cb = fixedCbCreator(store, edgeId, anchorId, userNode.id, userCb); + + // Create a new anchor. + const anchor = new Anchor( + anchorId, + userNode.id, + edgeId, + sourceOrTarget, + -1, // dummy variables for x,y,angle for now + -1, // dummy variables for x,y,angle for now + cb, + canvasId, + 0 // dummy variables for x,y,angle for now + ); + // return + return anchor; +} + +/** + * Populates edgesStore of Edges. This function does not return the edgesStore. Instead it sets the nodesStore of Svelvet store. + * @param store An object containing the state of the Svelvet component. You can access the following through `store`: nodesStore, edgesStore, anchorsStore, etc. + * @param edges An edge that the user specifies. This is NOT the same as a Edge object. + * @param canvasId The canvasId of the Svelvet component that holds the Edges + */ +export function populateEdgesStore( + store: StoreType, + edges: UserEdgeType[], + canvasId: string +) { + const edgesStore: { [key: string]: EdgeType } = {}; + for (let i = 0; i < edges.length; i++) { + const userEdge = edges[i]; + // { id: 'e1-2', source: 1, type: 'straight', target: 2, label: 'e1-2' }, + // source is node.id for the source node + // target is node.id for the target node + // We need to get the anchors + const { + source: sourceNodeId, + target: targetNodeId, + id: edgeId, + type, + label, + labelBgColor, + labelTextColor, + edgeColor, + animate, + noHandle, + arrow, + clickCallback, + className, + } = userEdge; + + const anchors = getAnchors(store, { edgeId: edgeId }); + // check that we have two anchors for every edge + if (anchors.length !== 2) throw 'We should have two anchors for every node'; + // check that we have 1 source anchor and 1 target anchor. Since sourceOrTarget is typed to be either 'source' + // or 'target', it suffices to check whether there are two unique elements + if (new Set(anchors.map((e) => e.sourceOrTarget)).size !== 2) + throw 'we should have one source and one target anchor'; + // get source and target anchor + let sourceAnchor, targetAnchor; + if (anchors[0].sourceOrTarget === 'source') { + sourceAnchor = anchors[0]; + targetAnchor = anchors[1]; + } else { + sourceAnchor = anchors[1]; + targetAnchor = anchors[0]; + } + + edgesStore[edgeId] = new Edge( + edgeId, + sourceAnchor.positionX, + sourceAnchor.positionY, + targetAnchor.positionX, + targetAnchor.positionY, + canvasId, + userEdge.label === undefined ? '' : userEdge.label, + userEdge.type === undefined ? 'bezier' : userEdge.type, + userEdge.labelBgColor === undefined ? 'white' : userEdge.labelBgColor, + userEdge.labelTextColor === undefined ? 'black' : userEdge.labelTextColor, + userEdge.edgeColor === undefined ? 'black' : userEdge.edgeColor, + userEdge.animate === undefined ? false : userEdge.animate, + userEdge.noHandle === undefined ? false : userEdge.noHandle, + userEdge.arrow === undefined ? false : userEdge.arrow, + userEdge.clickCallback === undefined ? () => { } : userEdge.clickCallback, + userEdge.className === undefined ? '' : userEdge.className + ); + } + store.edgesStore.set(edgesStore); +} + +/** + * Finds userNode (with UserNodeType; Not the same as the Node) by the node id from nodesStore + * @param id The id of the Node in its nodesStore + * @param userNodes The array of userNodes (NOT the same as Node object) + * @returns The node that user specified or null if not found + */ +function findUserNodeById( + id: string, + userNodes: UserNodeType[] +): UserNodeType | null { + for (let i = 0; i < userNodes.length; i++) { + const userNode = userNodes[i]; + if (userNode.id === id) return userNode; + } + return null; +} + +/** + * Creates potential anchor based on the user input data in userNode + * @param positionCb positionCb should be a function that takes 4 arguments (x,y,width,height) and returns a 3-array [x,y,angle] that represents the x,y position of the anchor as well as it's angle with respect to it's node. + * @param store An object containing the state of the Svelvet component. You can access the following through `store`: nodesStore, edgesStore, anchorsStore, etc. + * @param userNode The array of userNodes (NOT the same as Node object) + * @param canvasId The canvasId of the Svelvet component that holds the Anchors + * @returns A PotentialAnchor object with default placeholder values for its positionX, positionY, and angle + */ +export function createPotentialAnchor( + positionCb: Function, + store: StoreType, + nodeId: string, + canvasId: string +) { + const anchorId = pkStringGenerator(); + const fixedCb = potentialAnchorCbCreator(store, anchorId, nodeId, positionCb); + // Create a new anchor. The + const anchor = new PotentialAnchor( + anchorId, + nodeId, + fixedCb, + -1, // dummy variables for x,y,angle for now + -1, // dummy variables for x,y,angle for now + 0, // dummy variables for x,y,angle for now + canvasId + ); + // return + return anchor; +} + +/** + * Populates potentialAnchorsStore + * @param store An object containing the state of the Svelvet component. You can access the following through `store`: nodesStore, edgesStore, anchorsStore, etc. + * @param nodes An array of nodes with UserNodeType + * @param canvasId The canvasId of the Svelvet component that holds the potential anchors + */ +export function populatePotentialAnchorStore( + store: StoreType, + nodes: UserNodeType[], + canvasId: string +) { + // anchorsStore will populated and eventaully synchronized to store.anchorsStore + const potentialAnchorsStore: { [key: string]: PotentialAnchorType } = {}; + // iterate through user nodes and create four anchors per node + for (let i = 0; i < nodes.length; i++) { + const userNode = nodes[i]; + + // create 4 potentialAnchors + for (let cb of [topCb, bottomCb, rightCb, leftCb]) { + const anchor = createPotentialAnchor(cb, store, userNode.id, canvasId); + // store potential anchors + potentialAnchorsStore[anchor.id] = anchor; + } + } + + //populates the anchorsStore + store.potentialAnchorsStore.set(potentialAnchorsStore); + + // set potentialAnchor positions. We can only set potentialAnchor positions after anchorsStore and nodesStore + // has been populated. TODO: maybe add a check to see that anchorsStore and NodesStore populated? + const potentialAnchors = Object.values(get(store.potentialAnchorsStore)); + for (const potentialAnchor of potentialAnchors) potentialAnchor.callback(); +} + +/** + * Populates the anchorsStore. This will overwrite any data in the AnchorsStore. + * @param store The Svelvet store containing the state of the Svelvet component + * @param nodes An array of user specified nodes + * @param edges An array of user specified edges + * @param canvasId The canvasId of the Svelvet component that holds the nodes and edges + */ +export function populateAnchorsStore( + store: StoreType, + nodes: UserNodeType[], + edges: UserEdgeType[], + canvasId: string +) { + // anchorsStore will populated and eventaully synchronized to store.anchorsStore + const anchorsStore: { [key: string]: AnchorType } = {}; + // iterate through user edges. Note the user never explicitly defines anchors; we calculate anchors + // from the user edge/node information + for (let i = 0; i < edges.length; i++) { + const userEdge = edges[i]; + // find the source and target userNodes. These will be used to create the nodeId foreign key and + // determine placement of the anchor based on userNode.targetPosition, useNode.sourcePosition + const { source: sourceNodeId, target: targetNodeId } = userEdge; + const sourceUserNode = findUserNodeById(sourceNodeId, nodes); + const targetUserNode = findUserNodeById(targetNodeId, nodes); + // create source anchor + const sourceAnchor = createAnchor( + store, + sourceUserNode, + 'source', + canvasId, + userEdge + ); + // create target anchor + const targetAnchor = createAnchor( + store, + targetUserNode, + 'target', + canvasId, + userEdge + ); + // store source and target anchors + anchorsStore[sourceAnchor.id] = sourceAnchor; + anchorsStore[targetAnchor.id] = targetAnchor; + } + + //populates the anchorsStore + store.anchorsStore.set(anchorsStore); + + // set anchor positions. We can only set anchor positions after anchorsStore and nodesStore + // has been populated. TODO: maybe add a check to see that anchorsStore and NodesStore populated? + const anchors = getAnchors(store); + for (const anchor of anchors) anchor.callback(); +} + +/** + * Populates the nodesStore. This will overwrite any data in the nodesStore. + * @param store The Svelvet store containing the state of the Svelvet component + * @param nodes An array of user specifed nodes + * @param canvasId The canvasId of the Svelvet component that holds the nodes + */ +export function populateNodesStore( + store: StoreType, + nodes: UserNodeType[], + canvasId: string +) { + // this is the nodesStore object. THIS IS NOT THE SAME AS A NODESTORE + const nodesStore: { [key: string]: NodeType } = {}; + // iterate through user nodes and create node objects + for (let i = 0; i < nodes.length; i++) { + const userNode: UserNodeType = nodes[i]; + const nodeId = userNode.id; + + // TODO: move sanitizing default values to middleware + const node = new Node( + nodeId.toString(), + userNode.position.x, + userNode.position.y, + userNode.width, + userNode.height, + userNode.bgColor ?? 'white', + userNode.data, + canvasId, + userNode.borderColor === undefined ? 'black' : userNode.borderColor, + userNode.image === undefined ? false : userNode.image, + userNode.src === undefined ? '' : userNode.src, + userNode.textColor === undefined ? '' : userNode.textColor, + userNode.borderRadius === undefined ? 0 : userNode.borderRadius, + userNode.childNodes === undefined ? [] : userNode.childNodes, + userNode.className === undefined ? '' : userNode.className, + userNode.clickCallback === undefined ? () => { } : userNode.clickCallback + ); + + nodesStore[nodeId] = node; + } + // This is actually what sets the store + store.nodesStore.set(nodesStore); +} + +/** + * Populates the resizeNodeStore. If a Node is resizable, a small ResizeNode object is going to be attached to the Node's right bottom corner to react to the mouse drag. + * @param store The Svelvet store containing the state of the Svelvet component + * @param nodes An array of user specifed nodes (NOT the same as Node) + * @param canvasId The canvasId of the Svelvet component that holds the resizeNodes + */ +export function populateResizeNodeStore( + store: StoreType, + nodes: UserNodeType[], + canvasId: string +) { + const resizeNodeStore: { [key: string]: ResizeNodeType } = {}; + + for (let i = 0; i < nodes.length; i++) { + const userNode = nodes[i]; + const { id, width, height, position } = userNode; + const resizeNode = createResizeNode( + canvasId, + id, + position.x + width, + position.y + height + ); + resizeNodeStore[resizeNode.id] = resizeNode; + } + + store.resizeNodesStore.set(resizeNodeStore); +} diff --git a/frontend/src/lib/components/graph/svelvet/store/models/store.ts b/frontend/src/lib/components/graph/svelvet/store/models/store.ts new file mode 100644 index 0000000000..8d6ebae177 --- /dev/null +++ b/frontend/src/lib/components/graph/svelvet/store/models/store.ts @@ -0,0 +1,11 @@ +import type { StoreType } from '../types/types'; + +/** + `store` is a dictionary of Svelvet stores. + * The reason why we have multiple Svelvet stores is to handle multiple canvases on the same page. + * A Svelvet store is the single source of truth for a canvas state. + * We discourage developers from interacting with stores directly; instead use the api methods in + `src/lib/controllers/storeApi.ts`. However, if need to direct access you can do so by importing: + `import { store } from 'src/lib/models/store';` +*/ +export const stores: { [key: string]: StoreType } = {}; diff --git a/frontend/src/lib/components/graph/svelvet/store/types/types.ts b/frontend/src/lib/components/graph/svelvet/store/types/types.ts new file mode 100644 index 0000000000..e4f22dcd6d --- /dev/null +++ b/frontend/src/lib/components/graph/svelvet/store/types/types.ts @@ -0,0 +1,124 @@ +import type { CollapsibleType } from '../../collapsible/types/types'; +import type { Writable } from 'svelte/store'; +import type { AnchorType } from '../../edges/types/types'; +import type { SvelteComponentTyped } from "svelte"; + +export interface ResizeNodeType { + id: string; + nodeId: string; + edgeId?: string; + canvasId: string; + anchorId?: string; + positionX: number; + positionY: number; + setPositionAndCascade: Function; + setPosition: Function; + delete: Function; +} + +/* +Type for a single svelvet store +*/ +export interface StoreType { + nodesStore: Writable<{ [key: string]: NodeType }>; + edgesStore: Writable<{ [key: string]: EdgeType }>; + anchorsStore: Writable<{ [key: string]: AnchorType }>; + resizeNodesStore: Writable<{ [key: string]: ResizeNodeType }>; + potentialAnchorsStore: Writable<{ [key: string]: PotentialAnchorType }>; + widthStore: Writable; + heightStore: Writable; + backgroundStore: Writable; + movementStore: Writable; + nodeIdSelected: Writable; + nodeSelected: Writable; // this is used to stop d3 panning when node is being dragged + d3Scale: Writable; // for zoom and pan + options: Writable<{ [key: string]: any }>; + temporaryEdgeStore: Writable; + nodeCreate: Writable; // this option sets whether the "nodeEdit" feature is enabled + boundary: Writable; + edgeEditModal: Writable; // this options is used to place the edgeEdit modal when an edge is right-clicked. null is no modal, positionType if modal should be placed at position defined by postionType.x, positionType.y + collapsibleStore: Writable; + collapsibleOption: Writable; + lockedOption: Writable; + editableOption: Writable; + d3ZoomParameters: Writable<{ + [key: string]: number; + }>; + resizableOption: Writable; + highlightEdgesOption: Writable; +} + +export interface PositionType { + x: number; + y: number; +} + +export interface NodeType { + id: string; + width: number; + height: number; + positionX: number; + positionY: number; + bgColor: string; + data: { html?: any, custom?: { component: any, props?: any, cb?: (e: string, detail: any) => void }, img?: any, label?: string } + canvasId: string; + setPositionFromMovement: Function; + delete: Function; //This is the method to delete the node from the store + setSizeFromMovement: Function; + setExportableData: Function; + borderColor: string; + image: boolean; + src: string; + textColor: string; + borderRadius: number; + childNodes: string[]; + className: string; //This is for custom className for node + clickCallback: Function; // user-supplied callback that executes when the node is clicked +} + +export interface EdgeType { + id: string; + sourceX: number; + sourceY: number; + targetX: number; + targetY: number; + canvasId: string; + label: string; + type: 'straight' | 'smoothstep' | 'step' | 'bezier'; + labelBgColor: string; + labelTextColor: string; + edgeColor: string; + animate: boolean; + noHandle: boolean; + arrow: boolean; + clickCallback: Function; + className: string; + delete: Function; + setExportableData: Function; +} + +export interface PotentialAnchorType { + id: string; + nodeId: string; + callback: Function; // callback is used to calculate positionX, positionY based on parent node's data, and set the anchor position // TODO: rename to something better + positionX: number; + positionY: number; + angle: number; + canvasId: string; + delete: Function; +} + +export interface TemporaryEdgeType { + id: string; + sourcePotentialAnchorId: string; // this will always be set + sourceX: number; + sourceY: number; + targetPotentialAnchorId: string | null; // this will be null until the temporary edge reaches another temporary anchor + targetX: number; + targetY: number; + canvasId: string; + type: string; + edgeColor: string; + createEdge: Function; + createNode: Function; +} diff --git a/frontend/src/lib/components/graph/svelvet/types/README.md b/frontend/src/lib/components/graph/svelvet/types/README.md new file mode 100644 index 0000000000..85773d6efc --- /dev/null +++ b/frontend/src/lib/components/graph/svelvet/types/README.md @@ -0,0 +1,3 @@ +# Types + +This folder contains types exported to the user, as decribed in feature: `https://www.svelvet.io/docs/typescript/` diff --git a/frontend/src/lib/components/graph/svelvet/types/index.ts b/frontend/src/lib/components/graph/svelvet/types/index.ts new file mode 100644 index 0000000000..a8e729568e --- /dev/null +++ b/frontend/src/lib/components/graph/svelvet/types/index.ts @@ -0,0 +1,3 @@ +// this file exports user types +import type { UserEdgeType, UserNodeType } from './types' +export { UserEdgeType, UserNodeType } diff --git a/frontend/src/lib/components/graph/svelvet/types/types.ts b/frontend/src/lib/components/graph/svelvet/types/types.ts new file mode 100644 index 0000000000..f1d56f980e --- /dev/null +++ b/frontend/src/lib/components/graph/svelvet/types/types.ts @@ -0,0 +1,55 @@ +export interface UserNodeType { + id: string; + width: number; + height: number; + bgColor?: string; + data: { html?: any, custom?: { component: any, props?: any, cb?: (e: string, detail: any) => void }, img?: any } + position: { x: number; y: number }; + borderColor?: string | undefined; + image?: boolean; + src?: string; + textColor?: string; + targetPosition?: 'left' | 'right' | 'top' | 'bottom'; + sourcePosition?: 'left' | 'right' | 'top' | 'bottom'; + borderRadius?: number; + childNodes?: string[]; + className?: string; + clickCallback?: Function; +} + +export interface UserEdgeType { + id: string; + source: string; + target: string; + sourceAnchorCb?: Function; + targetAnchorCb?: Function; + label?: string; + labelBgColor?: string; + labelTextColor?: string; + edgeColor?: string; + type?: 'straight' | 'smoothstep' | 'step' | 'bezier' | undefined; + animate?: boolean; + noHandle?: boolean; + arrow?: boolean; + clickCallback?: Function; + className?: string; +} + +import { findStore } from '../store/controllers/storeApi'; +import { get } from 'svelte/store'; +export function getD3PositionX(canvasId: string) { + const store = findStore(canvasId); + const width = get(store.widthStore); + const x = width / 2 - get(store.d3ZoomParameters).x; // user input is shifted so that x=0, y=0 occurs in the center + return x; +} +export function getD3PositionY(canvasId: string) { + const store = findStore(canvasId); + const height = get(store.heightStore); + const y = height / 2 - get(store.d3ZoomParameters).y; // user input is shifted so that x=0, y=0 occurs in the center + return y; +} +export function getD3Zoom(canvasId: string) { + const store = findStore(canvasId); + return get(store.d3ZoomParameters).k; +} diff --git a/frontend/src/lib/components/graph/util.ts b/frontend/src/lib/components/graph/util.ts index c174b49316..141a301cdd 100644 --- a/frontend/src/lib/components/graph/util.ts +++ b/frontend/src/lib/components/graph/util.ts @@ -1,6 +1,6 @@ export const NODE = { - width: 300, - height: 35, + width: 275, + height: 34, gap: { horizontal: 40, vertical: 50 diff --git a/frontend/src/routes/(root)/(logged)/+layout.svelte b/frontend/src/routes/(root)/(logged)/+layout.svelte index 5a1e7b4b5b..d292b07d0b 100644 --- a/frontend/src/routes/(root)/(logged)/+layout.svelte +++ b/frontend/src/routes/(root)/(logged)/+layout.svelte @@ -29,9 +29,9 @@ goto('/user/login') } - $: if(userSettings && $page.url.hash === USER_SETTINGS_HASH) { + $: if (userSettings && $page.url.hash === USER_SETTINGS_HASH) { userSettings.openDrawer() - } else if(superadminSettings && $page.url.hash === SUPERADMIN_SETTINGS_HASH) { + } else if (superadminSettings && $page.url.hash === SUPERADMIN_SETTINGS_HASH) { superadminSettings.openDrawer() } @@ -87,8 +87,16 @@ ] } + function pathInAppMode(pathname: string | undefined): boolean { + if (!pathname) return false + return ( + pathname.startsWith('/apps') || + pathname.startsWith('/flows/add') || + pathname.startsWith('/flows/edit') + ) + } afterNavigate((n) => { - if (n.to?.url.pathname.startsWith('/apps') && innerWidth >= 768) { + if (pathInAppMode(n.to?.url.pathname) && innerWidth >= 768) { isCollapsed = true } }) @@ -98,10 +106,7 @@ function changeCollapsed() { if (innerWidth < 1248 && innerWidth >= 768) { isCollapsed = true - } else if ( - (innerWidth >= 1248 || innerWidth < 768) && - !$page.url.pathname.startsWith('/apps') - ) { + } else if ((innerWidth >= 1248 || innerWidth < 768) && !pathInAppMode($page.url.pathname)) { isCollapsed = false } } diff --git a/frontend/src/routes/(root)/(logged)/flows/add/+page.svelte b/frontend/src/routes/(root)/(logged)/flows/add/+page.svelte index 3bccefcfcd..7fb738d19a 100644 --- a/frontend/src/routes/(root)/(logged)/flows/add/+page.svelte +++ b/frontend/src/routes/(root)/(logged)/flows/add/+page.svelte @@ -55,7 +55,7 @@ flow.path = `u/${$userStore?.username}/${oldPath[oldPath.length - 1]}` flow = flow goto('?', { replaceState: true }) - selectedId = 'settings-graph' + selectedId = 'settings-metadata' } else if (hubId) { const hub = await FlowService.getHubFlowById({ id: Number(hubId) }) delete hub['comments'] @@ -63,7 +63,7 @@ Object.assign(flow, hub.flow) flow = flow goto('?', { replaceState: true }) - selectedId = 'settings-graph' + selectedId = 'settings-metadata' } } await initFlow(flow) diff --git a/frontend/src/routes/(root)/(logged)/flows/edit/[...path]/+page.svelte b/frontend/src/routes/(root)/(logged)/flows/edit/[...path]/+page.svelte index 5f7f242032..d67070d87f 100644 --- a/frontend/src/routes/(root)/(logged)/flows/edit/[...path]/+page.svelte +++ b/frontend/src/routes/(root)/(logged)/flows/edit/[...path]/+page.svelte @@ -20,7 +20,7 @@ let loading = false - let selectedId: string = 'settings-graph' + let selectedId: string = 'settings-metadata' let initialPath: string = ''

    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 CC&h~Z literal 0 HcmV?d00001 diff --git a/frontend/src/lib/components/graph/svelvet/docs/images/node-classes-after.png b/frontend/src/lib/components/graph/svelvet/docs/images/node-classes-after.png new file mode 100644 index 0000000000000000000000000000000000000000..b3030128495fba8c89e0d301df9156233be8293b GIT binary patch literal 16095 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 IY53{?0h+I9k^lez literal 0 HcmV?d00001 diff --git a/frontend/src/lib/components/graph/svelvet/docs/images/node-create-after.png b/frontend/src/lib/components/graph/svelvet/docs/images/node-create-after.png new file mode 100644 index 0000000000000000000000000000000000000000..052f1d646102045fb02d127cc112d106189692ec GIT binary patch literal 32408 zcma&O1zc3`_Afj%D$*$_pr9fxk^@LfiPF-IG(!wsN{57W2?C0ANOy^JGc=5Jcf9(orq>#d;{XU+*HQJ}lY6f|o7E@v}(l*@3T#q~3!$Tf( zNpr_0@*^o@xh_V6BT1?(maumivKTMNXI;v98(cN)#&mV3XLom_R(^?5=&q9Lj#cH) z4;+p%sW&+;+?~_}S&AMSz8APl({)eZEbBLl94>j;aoO`88bk<2s$w~#x=cJ8)?9aE2WaSE%B9*I0Q3RWLfD0 zt1Gs~4tPV0_LOC8JVH!#QQ(tjn{o}GQr#TGH$UIP&TjQ}%*lxh`|77QL$lQ+ImS@N zi4bP;Fs^C&n2+}Sy=0vA(2cdVh1dB-MeHlpgU+<2n&F#&*+Ln?pF7bVe{6#9bom|i z9%Yhqzh-A+AC6bEb6?YD{?!-e}bWCxB zIZ6n-M;oU>d1+JYuya}uxH^;DE=AjiM*_6;`=~EDBj$6)oRmm^&p7u>)CqBnb?h&L zzXgB=#C;}~y@mQNFNPJufa_m^srvc9IQ-0m72;YuYLKe;g3>E)9U2>jjT0~=qu!gQ zhtL>$67opQijK+B7VK}$=kbE2!OtHVtJE`nCmy|wt0 z;0~kS6R^5Je}*BTX;4=e7jAjK#9=yNVy+NLfB73pu*MNQnI0?r#ZmC1#@=d!FTq?e znRwF`KH4Oq73<4JXbkhQEKaE>ui~aaKif%eE@f216WaC<^byh?-vTtDA(H4r7IBDl zN0t}hkJMxvuVeU;AG)#e!K{HzafA>Ln+Oj(3IB7^=GxYlq?#JpAzDNil9hwQ{8xf0 zm8q#|Z~q%oEF65AwL2H8iLU|*7!$xk<>X);A0I1taT2Vw1mGlHGRP5YWSDA6ySWJ* zcE3|oQ&m?7;U*!0q5b}S5;Ciyfwr=;vKJaEojqA)N1qUNvV~|PqqscTHimK~*0i}h z^1$+b{J4{!|7yb7BH3joDvK4wmW-+CBNMHik?|`@MxwYcU&K{NA74r``o+W$uWW~9 z1$$kdJfy*wP#cRoDPzmd&BgBP>+3yHR8#~3Wx68)q8*=xU#w;Xr@n@%$59&AC7gE> z7N53`NmuwpccR8A8txpYs`jaEabc>l&#XL-j-ohfc%5gLYvGuvnSvr|oS~;83XXg= z!n;=aLrZd(Yv z*P}+fHec4z-V;c*Q>L%&Ibk|9MM6PKu1iK(+YREAp(w(o4oCV=$mFWxJwpVCIeE4} zEk@t#!is+ICv8-d%av4WUH7v>UsilPd2R#gaRGBjP&+`c3HqLyzQIOIErlWOfwP=p>pobh6rk3HG_WESy%z#lEAX(d*KFZSbKP{n*%;;qF{RFZAxG zSCbW%BpN#Pw>Ou)4i7^a`D~`z*)XkFl-|7~(bxgu$8D1#8(~NZqNpp9RtQ^hXRWsX zix7l6T_}dxVL8%GN%1Ld-2K@ch0Tf_W4o&98s6U^rRRu^_cEcxPT(W^>_)%e zi3KtVk`ZLc4cGlnsa#l)?0t~y3lfF$^H11iK`zS5LjU?E*wPs6bFimgym$c?xv;Ph zl@p+1AeYFe{29$PR&>&eS9$x^A0+u4adMDDyhaBHegFJGdL)B1(B_ zXSP$$EH~NcB?SBYB-FpGjC-Z}jT)Jnnp&^BPi+wsC7#jk&2=wyV`HOrXSS}!vpswM zQ4hDv&P<3VTc?TL3jR;Cq$DAbKNO}}-WpS43knJCcTniR**QY9+ew^qO8P^4m^vlj z)3561EST0iOt3QMKfP^Mra_7on$^5|$b|sKO_ME9jG_5k7`P5uL#zp2!gN7hNW++U zPA`+H=|#ty#0!J`YjbB!%B&d;$KtQllM<j_Z%mllatfJ z;8%%Wd~kJirc^=5eEaqhp{J&{HQz)J0;C&M;?ePOkoMCMG9Yq#r&M#5rcs5$%VcAJ z|Ll7~LAbzgRW&J)-(jF33heBZ2K@}rB`fJ&E-OZKF*foxu<5HkE6fMz*y+_&RXMHV zlWInWhFZP|wHSQ1yp;T)5JIg!E6Z>S>l$tBHQ8YeZT$iQ*b%j}w;vUllp{DzeiOpM zg7z_r6DA&iRsf3@c%Qnn!V6;0Peb|Q18F&4aGzP*ca`kKDm(CWqjp>~T|sfeH#$0a zc_ZChOkh7J^mJJ7y3}zwt-V=+PHvx6c(!NFnoki>^MwnrTk}!hy?YnD_~N%&IoBy- z+0n2)m`DdIxc)6R5fxTks8cG+@VJ6st+7+GF-P=+3l{WZ!gpqX7D6>Zo6^_$MQBCf z%L~_D*oU{zh1xh1sXt7mP%oeN8I)BSrIZ;GywN%Olxs;SMdT;uTd}3&Yh1a7?gyE% zeR+6i^n(MJCX8i$Xh~$~uK(w8JM365z7swctCi+uZ%;=x8c82G{i0b9J-KEY)^UbEK{jFKIXP9Z&5K3H| z3#NE|Pd>BWv!}TV4TM#~jU+^EVw*e~i%0M0UeWmKol=s+uQV%av9NvjdR{J!QtL^x zOf*6q=I@;?`dcRQZvRZ=T^DA%9EneFdh{o~<%sWWfi{{F-0=B?)W7)g$))UhY>V+=iS&ukI^pdx@t195Sq^58w5< zh3OnLy)W@N)r<4KzzM(Fd=9q{3N$<$JFJVYK_WC+lzZHh{f-toLyR9Dc0 z6NU1hU=`v;vE5ST$JYnWKJrlcwV1GXbuN8nq+4)l_iR^Yt#0?L)2WN~8IoDm)>gu` z@NLOqi|JYRr3T#R)OL$~Hp0idoW}L~OsZmVvqJpNG$F{_1tBm&_PW0&lW5JNM6pV? zl4=durN@f(@0%!&t8_y12vRy9QN8<_UDBuN>xT8LWG9UM#YBKsYxXXWT1E=Fj);vBp*zdo5#Cdv$B_qZwTF zY3?8EFAYF4x4VR_{;2$%53mvysh4?#7gSDu{D3p2Unu}z@GoZc$mHT06)l?>q0^e6 z!J42oQp4c5HpB2$@lcz$rK6Jt!D&_4H|)l0Z1cZ@6P=|YL@v4 z2LT;p%sP_(^m)Xh6N2Ej+qdYlbm8Uh0-^(2q(^doM+CGj!tEX{W14RcHLh+V1f7)U zRf#T)gib!)hbZ;xz@hli{ayHO#d&p!0qe?h)>f)M#Cx?APinf&x zYzJYAS$R_^H~m;x`V_lJ^Mc}Dr%l_`{WMMpXCw!_?bjSRH-czCnh6UAhM@Qm=;m-9U1<9PAcjiI!u@_1?9w*Inj}3<728j8p26#r2CS(E)os_TsWd5&Br!bUz+T;-^ z)1UJ5!M?}B!s6vR!Q^)|vNkk)2+9)3B``LXoo|n+Yes$^=QgUdksHs+vXUB&JM-XS zfaI%ni4S3xdj&fA@|~Fcd>w5!P{$h^)3sdX{y~i>Y$@MVoRjkj0i}z|{`&Qyu@|57 zgeDfbqSy2EY6~kXgfeEmi`4F9|)kw9_1E??NT7N*jrb+lU83z{SRZ{&>;nb@gxMBy?;-=w9oIl zLwJp`tYo`_D!&QKEbz+p;h{2lnH`bX9_-Ii7xQzWUi}qOyowTx(V5FEN}r7rGC=R7 zqwS&|7S@t1Bv-jLJjAdx^!Bw(Q&^ty`lPu;UWn)DOZ6>St`{@tpzVSi<+}3z_2jra zpbz@^C==9(f0wcU`q2Ly){|&i&K@JkEH`OEnUGi&9@bBMn!TJOrQ9tv2Ebcby+cFc zq$yXisw<+O@nnM{Jpw2?BX5(5&e<2N9W8}0^erhCK<5a(31{{O4gg}nQd$#0P^~dD zH|q2`kgFPrZ-M_nZdw&m4+>@}l@gy@Z?msZ#gR7}8bM%F<))?7Dv^jUEa+8f@Ww=$VMBd5rBk?ORG7~EZ&#ff4X zF0IPq8#6d0vdbu6%r01SjgHrCdQ~%Wdm`p?p^${)+5YKE{_hLAK;0!nDA{D(KeC|f zpUnRNhAVQ;<%;SXFv1ydEo^M0n2G(E<#dSEld@`Rs5Eq)#~dCtju-1kMKj5m)u?$P z?fDn%`M##ot+!Ek5gy{%kMFyYav>J2B5vMA# zz%t0B{QAs{)30(YA2{g-0c2P<;YM zc6xw|!DTV?kc(LWh{G$+RtNl=GfyagT0eAIADk=KlIl2`S&o&Ry>mS;Bl6(jK+i`M z8O{TG(r|x&bjW%K)4C&7bI; zfKMy<5#TYi*&GATU=fcKPW?O5*(%mk6(L$Oa->q8SNmPPj0t6I#sDD$^2cPOJc|{8 zJQ*)9k#aLFMaBCk+tXbIBje-afdGheUb05Z8X!9(bf8lJdzUZ#Wb2u%w4%_^L3RBA zn)f;kO-=>_dS8;Spg0W$E%<|RxDL?OZ_r3as#7=8Yo z6hWSo0|~tQE{WnuwVr#jppEeFvQ!lhDV6FXbTzf*jq+T}-ZE;jQ?egqfW@o^gqIyX zv)ocyf@zWv`@sv>$kX4EAbkNGsG?TsD$ea3r|CQk(l>|=kW&)3?zf47+HtZwKj7(W zR7#n^_vK$0{}2u2M!*_^Yj0Hc^2P7ul$4|k>y1+Y_qnVP&Q4DDmhVEcg14uu05g7} zT_B#zdKWBo^->m~8X_VhK%%p??LPv!JBC`Ehj4GJfGDfj)vAkd5`#N6s(%kC*pUlsqbOu>{A zd&1AW0k&yZei{@m??QIVW?+dgoDkXR0ElTuf5(3i$)x^i!D*?LbfMQo2khy`5hYBp zAgLsG2H0x(0JN<@t2}1v-Ojf;=(5rV6y7j5GgQWd7hn}fQ0xWe{5O?cdwbi>lF@Ec zH5(tYqJQauFFwGbJ&pcf_22}F?~)|gigSc(ZaSL4S;ascz6N_gr9z6 zp!k94n8mgr0w5#|s}py8mb5aTnz`2#WuEAv0B0moTK_6Vl$`<~ZoYDG}1)+{W3rrf-GduAC97(gZ{9`=VmRMm@wVy@GgiyKtAa>IP5Km2WS08b*ua|{Xb{cf7*a( z{yHNUK}FGkS*4Kn7?3mtn}7G=i7p?EHXKSDSzmxCFGX0hK7DF5*N8ADPkS-~;(%*C zD(QqhA?#eB{)d+On>WqN*~mKvbOVjwzX#VS=FU-A=|FrZHcd~S3>IpwfQ(gT_aT0t zX7!;&pgn?ul+?cC(~tE;<(iQRTH zpyM|=s~KJ61EM&P-gF)u`Gn`234B_8bS3JbW$r)r_vXA<)AUdw-M_iqMQ;2o-l^Kg zSYO58v~!#V&&eo{7Lt1uQvOw|{UF8I>d|i4n8I{kT~vZT9F1D^;`^%5;k>+U?GOE5 zc8@NZeA?V6nlY;2Osf`L&o;bF>l9a*9{#N8x_eoY448yyKu#4#XPEX9iJS|Ub=C6- zp44r|vr+kun-GW-MqUusV9;_fQfuZjtk=%*Xt!VeHCB0jlBG;4wL;NW6U=~H0_qb# z4X97x0dLhKnaq$<$zLT3;@tOCEG?htxh<0c`APV&mj`3EAbf9oxyR#qeGcp0(9lrq z?@~#o9ie2DBJR9JjTavj5;@UqtLj#B_{bh@#zs+m`uL($Qk)wPqqZo!qJq?Q-s|Of zk?y^yu7I(h8U#)w+^zBhqCTTS%n(iZdJcTU=hoF%JI+l~r9De3tmMPkQ`89q4UY=k zUu(>d2bq7P6aNAM<$j_klHst8K{rX5_xX&ege`3}TstE(*tL zqNro4(uydm3$#0@?E*#yoU12u||NMMh>;O0Ya0PIJ_*1DhP0&7o90;BZ zT89~1*MU^pTKO_QC(mGOgCrql#gT)PG@|`S1Hy-RK#9oDcN4Ps#1MQWtNj_YTY@Ty zyS~Gf1FH|`B<*^UK3fi}5loPoTHB;w11>uy1}Kd4Piw8zCDU*>rf3t@_Ao{pOa%*A z76F*2<@$s?>}yR;%|v%Fr7-g|>1f%HDA|dQb!c#~+1lPPinTHT2x<&U`{#ZdrS9FCP3QhsI*IXAJTlvdU$nF8sD z3;-b}(3K;SPxj%d0_?rU%{;*}G0g1F+X|~nf(|VyfaQNQQ3hc5rW8zYN;S~1*{u8+ z&jKJSN?5q`Wr;3xB%3GDGsW4Fw{XXEs@`0N$h0+B_>{(Kl6WxI@$C5 z=NAIrJ{=ldZk=qYx7ja=lweUC>H5gj^4%_5vO#KSyMFo=<@40y?rLwA;;z%K=gqgH z>k#6z%VP=q*`D)fQ?E@T!7^=4mSPY<&luDTwLb;XdsBi=1!IVb655qCc7CBm`{FK{$LZ4e zds}g5=VRZh=dtug3zU2QM+f&f7Dl2(1DWOQ1=A+ahGed_dDn+tGxZH zsK2b|2}4n>J)c<`55~L4X#rN=%)_;!7p!h)7;~@{j}W`=^3%zs&AVf@MEOEr67ri^V;8I&roA`-e%67K3BPsI;A(d zL|W*k@ral0Dr3WV=StG^EKGjykU+B8qHRM;g6r0!slD*!oUavy_x;tmJ<1ar+iycP zRJUH&h(t~|a&}EPllOHS7Ay1@0gLYw)=ekDhd}Yzo%E~H^J&QVmF|VtwpOY78tMgF zqrJfZ0;7#@aw30@l=4WBT@h^qJ|{dCm6iA5)I8^lX^F3o2r!CFUF$nGE~Hi!pS3Ze zXv|;AZ)zRcjsldIE)J&+bg&_JU7*!?K2D;cr>+@6M&i=P8;`30c5xV;{1k1Ur+eCQ zHm}&yv$@l5$tOnOLp@M*D-c)%Vg9oh)KlCQaOjGR4x_ZHH74J=m?ajz^b%DsuA?7` z!PAT$7x7oKc~)w^>&mGOsgR|-;{yngOQ8nxsx(I~I-g5u?|Fg|AN~IXBD?O}o zk5AaUiwT~`jTY1s*&lFBc`Sw7Db;pa*wFvukaM+}ey?!)L+M)9y^_6yPl@V~qvTf> zLS#MOoD>A2CyX0K=X}~X7o-o0FYl2PkoiJaHESJq$nJ5fLVUmSZx$F`WO1qN-o1tKDDM;h65%44F95^QWa2?aZSW{Y33^ zo^iGVT8qmDk55_8ynQ!!FX_^6tnoJVaSfL1V4n{ZqYZ*)Zj$aZ?+{g9WL~&XY-hE)2zsCFLwxq%eV0B zd5|tM+I!aVfF=`Rw@uqos}Xw zjC592f3D((c`*~Odj*+l;S3cI^VrZ)Aj}~y}u~LOkp;Asx0h%8?~RNMZ!=^GpG{2 zE(%BI=;dEt+n!YF9KKXH=u>Wre5R3s9c9cbtw`qx7eZIkuDvU&bBUqjzJ6=CHTaOf zO_V&6c{2$yaPhcN1nlk$S~KpO+x)J>16-b?aJE!#TEFjk`Z5h{ zy1(#V&UwP3oCc%UY9ssml|Hr^l9G~g>S_VbWOQ^iv${IblDsC1mEV2=0%SbwAg1Gy z55Q9J?p;6#2@7yhoRTtYS3PTztF%qX&*ujK5T(t{WdoeTQsI#BjJ zl`6G&zUNQH3bCCe=RTywJBf-S}w`R(iD_ z#F;}Mn7j7eZn10L6IV!0Eb=uapAQ+`t;;QWw(2($iuwy}79-_DRcwkCp*EAQ+0f)* z^?q7%Yrgm1QDr^vw@CJ{eYO<2Cm(uQ8^%e6#^A#L0WR4&|NdHtw$HZ^=4ECD?U5var@Cw<#a|y2>WM zMW}zwnD-_&BfrNXK|mlT*b{n7HX8aZ{d7QQ5H<(1keKL&a41INQ}+r*gNFba-N01XcGShh5WULVe@^VgW(eOGai z?y&=?KKTdwD{t|0TOFSQ4-KFcONpbp77vffN49^?0$5@`Tg22<)#@ak{7|{tnJ8?weo1Wez=$bmi9qAL#pUt3 zPoz%Oy)`I>Eu!L%Qr_YBtTG8*;S|t=7C#D{CrUk4t>ysybxt1at-S|Nm=IL&acbaa!3$!cmKGP`L za(R}CG~dIqIp^ckJpJXzz@IPAN&)(sfenaI@|fZ2uv6%;YYe#anCSplV`f1C zUUKg7!9XcxpkHJpzV-C42(4x=z&W-B-tRq$VK(fEe-8S0xd|A0Oz~lyqBT?4e%hf3 z<;j=|{48>0Uti;5G1O%-T7x99(wZ&(W}OPYBE!V>_fT3`-_D>Nk?nA*kp*8HV~?}3 zY0bX>srob-5*WVGKF_Gfm?o zk7#hFDov=0%&)x1fgI9gi+L=rU1hgNMr@RC1Gb&9$y4t%?{uEOOZ`p8;UP>1xY-1O zNDw1t{i)r~N+O#D<&ct$cW#b25Z4{Rx)seh)adBcAe{ucoHs`QMs0Byj+msUM$YC< zZwDGuim=HPRY zSJ`oD?`~nBA>`L$NA>DuoBfBF(NSY=d}(Xe3QLPHs^-1FEOK3x1f4FOZ^*G9;~7p@ zF+i^Dd@-xp4)`wNU2fwwt8~Y=^$xs*tD~wXh(EOIY}uyf>2bZ!%!1m`qPk+Mu+~#v z&OoZBXWzx;X29^t^D2f@RB+$Lizq(hgG5Cw3BB`$J@Uu6(8L`!Z*=2!*w3ZZlxt!)DpM#Uc_43=<(9c>_v z&bU5q=&76wtnAHIc65==T`$hOx;TX|3SZ$-IBoe9lM{?mAQ#CxD8~>ULUf8P zB76*0YBYK#(m)2 zY+t>9Y$a`6Bk+CEk1%)M;{iDq_EfAsBW{=e<4?b7;-AVsmf`F6?_(NnS6I!|LM zpW1kvWV~q+^jT;t+X$M|Pex!CD@em{@B3o_IMYb)8lLXV_DXR?%i14n#V}jX)h7x321y;rME?keKp`3h4)881 z;G6_-Gtp}lfe86W?~x^yLiss+WTva^%*T<8*f=%m|2QcBBM}M`glKFF(V9*%jWxb& z`Ke$rUMAF2BoWvRk?UEjH+!rWK(v;S8?8G7~VLp41d*TF*%x zv;)FQR=$*S4H{Ugi6?sAtz6=M{9(n0u%-)?3x^3^*N23-ncu&!eRq?M6SDr6eUesD zRglJQsO!@DF>exW78VUR83tthQ)x(|^3~&d=xdpYkUYhDul~R&ZdwYyln5bqIPqPv zfs?*XK5l^W#BqgW5C?JE`H9g;m(qrb%r&RaQ4w=Uuv0VIZjD z@ELKRWm!Hj(URtU0E~*Bet@8)0Obwu<3$@?)NSG8@iv^T+wVt znJq=M07@}n3b2_i0Q9~+LdA0VXn!_jv3~#lU5uI7uxx_&K9C|U zEG-Q;$^jp0Yby=-$#SLl{4||ldn9@>%MmA>qygo!&XwaIB>@E}G<3iY06>8I@_S_^ z%9*P3AP8t!I$kS7yWGySBw!q(AxTJB@Uz*@o(0X@9h!`mL?Ac)_1sBxF!WjQ!=d9p zAXr&@2<*SiuEvqC_s=~Q4k%ZwT|t#8p6EGBRVTzmDZSU;W*$}35x|Jr;1#ch@MmZS z*6+<@Zh2h9_DQ){=Duh&FsB35QXL*JT$vOe+T6cQv6J$au-KoE}zr!@KT{xL*eUwD; z^VrXmcke{qnxsQ2aLe)y1}d*%$=(b2FEGLXF&-gzk9hZPqRi{Pas%KkRw9AeUbE|6 zDx4;H#yyyWraY@Y_#7#soKd*K#Bholz)1G|4R~E(g?Oj`4DmX;Yg!gqN6PuW7*YbK z%XeTzuq|Mg1I|zrs91jfKbBw|Szsd_9kpL)2Oi|FC_X#tXLfdge9BY6YUkz#)(nJZ z836CF4m2OUj9ioVxDvjU1&mEv6Mev>>f(|GL?i)rVApnbevuG`k{LZ!)zmr)0No8t z#fXr<_)$vK%Syn5{Y@GOTY$2T5OPgUPIfP*wAx_ZFQDJG=dXVH^~d{mY?b(WEAxdCR655*?o^- zL3xTmc>=>M+{Odc6xUg%=C+Knf+#N!EyKUA*eLKntX!r>MnOWuR8Ju1tY1Vp&m4m) zwk{YlbPoYtYOwiFCkgVxKeCW*ttHrdDi&C8{7d*$KS#E3hG#?1f6wcC5@mQ_ITY`5 z07hlT9vOi#n6(9FmQ?70NfB#aqD#1o24Pe*{#%Iqu?FZd4jr2GJ^Nm0*($p5ALxFZ zwGHYsL%OGm5lXIn^>?ByC#1^Bv2QrI`_X_9BriW(b!ozQ4xE_!BeEmKxNQ*c7fSTMF4udSr_TY*zWaqvtBCmxXHcq>HHs;L!fjHgx) zzYUncPKxwvd5e*Z2=5n)$hQyW%#Ex$taK-c?tTJx@Iz@-u||bGu#W>zma(^YG3(s~ zrPy3c3kwT_ab51p?BEu(O<^AJ3gD`L(bGF)IOg1QJi|rr{F0B4kuHk zMqau<7!UEn#|}V^A9>k=NgEj%oOkrVk*%RYk$_TN9z1w(QSp*vs<(P!h+grftNZN3 z_1Z{K`v7(T7r*QkV7B1G_-&lPn$lYVQz0E18~X&bXC7U&L>!BwwIKyEZNPz5RT=jt zaw%*NIn#pLq3}y`rw!(~v$od!`JqH&#Zd1IkXwQB?v^IBk}4t>GYDLAK$Sg;6CdFP z6KkzNgf}bC*$QyWiZP|KtrA)$t9l|fJu?#yQmE4>_8xBFI^;6>{aFtxIG5TmEaE{J zBAIwJtE#q5G-z6rGRk{@dwUxwkP1<;z_0+`BPgCgkb9Q_m>T~UhP(Ifc_3I)%FXYh zWw>wr=yhn16 z9pX4hraILc<9@`*bnOD$kD$V@BySE6qfeE8HKD6)dVSd~722OKFQWG)H>C`sol0bs z?5DwRn4I7-9{_VdoZ;cnGWpsoOi1pt1g1sW920c|I{3C5O+x=kNQ=0jL-Ih4vEK5g zjjnx@KK6S>k2!KCNTP@*&BUodRDO#d^{aiBpv=lZqOcAi(D5qvz-JKFd=E|(2{DCM zNU${IL>LaAPsWF_(F)yzlvEbp&B|>yb~QTLa}b$deO?y2BtdJDIO>H4tm=Rm;ekH* zf-;gQ(7Z4&{tC-XiG2|tnfB!ti}g;w0p=3FzWVCc5G>zM(*0hKjBaGpucKR!pJzQ2 zhQE(}aHiqK#$1Dys{&WkV?10p6(d|OTU3coH^*n^VL59aeLa{r-q(aWr;fsf4aDPl z=An{wqPa}?*)CBFJTgnB#($p9K1729VXDOD&`h>!?(P7stHDXCfIyB>=F_J%{Wtt^ z4^+pnjc>E7PY#-lW+XU_rmaRe+l#U`7X*c`KVVHA{lGmsH4QI%^$8;qPoJ*g=<0B? z)>Gi9i@xix<%s=k%%h}PL%NuOo-)FQ#ia5Hdb|svZzy3Ll`sdUc2|T0Kx%>t-RESS zyy!C3w7;3)T<%@3UU8)!vW55t*1l+J&Z06m{G-8wEPxet*g>rW@tx+iA`&B(UFZGn zbUYrh-;N0eFFuF=4TRaRd@JX=Y~9?ei+Jcs1y$M7^%7!F62LH5&hYPEo%5ZyvkpKL zLmb&9@*lfjtqIMySB4cgN9h%I;t<@jT}87*Aop19J+>-V50r_&#Z!~lYukxwV4dER zhu?TId6%-ggntblpsOY#uoP{<$$7+zsKc(RxVqcp-9$25-0IA$A-La{r`Ps=7aFvi z*75RbOoB-l>@<>=YL-Qu&=c>%pLcBmEhlX-##D3T{j8C?jG7NPdqdJ#8f;DIOg0eo5r@sHl}wL6>HcYU zg;ISj33~z0Rt@Ls-Kq~FCkA&cq!i^(tvxS4_LRc^BxIF&>E5I2qb}W9IM-}M8T_rY z*}Dogg!cD?^cTK!X-uIN%rh*8zAtK}6oO3f&r~}?lgI7E3h^O);i*1k{T$5q1^gLm zyOaFeJ$inB5Cv*b(e5QZT7y!zS6X&o(;asBjLZYUC~erl`o)2d6D{R=gv@?R;Qh%G zLkvFaGa8Q`{Wcq4DrWq=wK~QGjQ8 z_h4~fHPF*olU8UrdSp!LPrnnhi$d6oj_G>?Ao|7kNojUGMZ?F1Z!VkzpBR9v+UtYj$4g zaPx%V1zjt!RZj-qw{mr*ASxuXnwtsTVOneN{mCA1utdMN)!6n(Ix5rA>WOyDpD*Y3 z-O4+imc?@+LO1H6O7|hW?fDanL!wt0l}sx}i)RCSTd>QAXoJb~9V2#6tKo}(vt@oy z4z&Bb+158)IP-po{FQ(k9?MXQ_&}AYeS0#~Uu2SEfe9@hv;KCq3BBo6JG?eAP!Y@b zijsgYHjfXgz`lyl1?R-W0NDIlBpk*<9(GJ;nwS3+j5In7%dr@)4SrRqm2WX13^X(V z8vGOURp8bJdIqq%D5ME~vE;K8rjr3vvStJ6eczfHdbt1m`NL`6Ps301Lk6^Z5q1mT z-YKC#yjJSpR zQA^|cI&Db{S1(KqEUfI_P_w@mzROahONpc>=rZ)0@t427XLr@raMtZSvX_xe&DR&G za=6p6k@Sv>St~Yo=F`hLs!*JrTk`&MH{9A;?1|tXAb97E5@C0D+;<+1`s`{eT$3r>h)K4GeSUEi*v=hA z^Q@4%~+@$k6| zLlUiOMtIDXW7ycTnII$P=#2r*tCp;<;i0}-NZ)r?z6Ov`T$+3=mnt-`!arQrH1?&C zdhhRcbuR4V0gFNOOBde;9w`qM+cKbf4Yr-!g<#tpZtVCrz)x5$Uw z4B@k4FPvb+2B9f2yXkmm;rjNKsG@oNaQ7H+_%tpe0>*}sohf$xXN^AqN^fa*Sly~r z(<*1cl7=Ltp`GdaPN8{vLU1>Ie-b8okaM;}mK-wMu+AR%61?|y$isMrQF0ty_wWh! z7WXPbz>kW=kLTL=A*7UVVdOP~<5uN5l-RNJQ}9J=M|`~$oA}0TWBG)o(2g*e@#N_b7PQ7lFja(A?sqiUkzBYa zhJ^4B5@DqV*#(Vq?kPRtv|_WLZQn7R&&O1qaG{9Zz!2NlY93ofC-k*=R#N))bQb?7 ztplm*XM84H^zfnVhrx^s``>QFBM*UWwitV#8Yt^3s;VEuR{Gk$Xz0Ee?EAx(h3hr? zJw4=SlHPR;B`co6zzOnJD+GP>my2jjxtlMRIYxvGn@G|cCKTaSPmfV2?`z^?Ta13w zZ7|_UnE6FHCdTPa09%g;&u^_aYG33pmHs{Y01!>N$Y3E+XD9xLtYjtPB_Y0RQ}6x%jWDB;tEws5gxhu%f`RlWLs;Uz|8lKs%S1|U7JFlPjXgD3{$p#o zA$;X|uoNcewcj1afe)YNKG3QmzQ|YmUc1R&@FU+JjQjU2`_J0$zI!4LXi=1hzIU`Y zEjKq;JX%OVzMcwhOucu(xA5h8v$;6l=X#@laAlxZdlDC?5HRnT zBiM4fI`S10A{*Sup7d}7|MWkM-Uf`;Z4UZgu6*l%NIkk!JH((R4;~W}l>3n@rnnfG z0s|AEU!yY1#2XtgE(Y#lJWmW=|@R^?Ye+t=#wy04fSy!4Wqa+$x^JEXEZ zk$+1X z21b9|q28ZN;~{UrJj)1gQHXjBbIZ1id9NN2B#4;7sI=nSzsJ#rlwj8ab8|P{?|N`s z0B{3{dej{c0F56cA)N4%{XoPurVqgrG*UkIP>ajeL`&&|PrZN#0I(~`~F&>Xn15_2uT|M(#erbx=^G{ETDpPrti;_m=|yKGIi6wE)8BSzW! z!Gj)dFx>$%7PtWefaK*-fO&YMr3G#n0XogQpHTOVm@!u&Ep`Ew0f`0D-5}BkDBT^> zDc#@ouK%~^?3pvO=bX*39GvC*@;=XV$94VcE-ro%flz~AU7QG90G5bT|8{rf??AR{ za?PUo>hBbQIaH3Vz=HiSRdJ^T^qaNL%k?bqjAa7xA8BhtGapM2>fx0Yt2T4K)2r*) zW8-3S04xAU{@AywY_ofEk5+{lrON>(q60&?7sCHXTBXYtiF*^!-{|q>&JF z^E(Vcig$xbpnO)DdRspOAI3L>L*@Okn*@M8G9olq8|7e9;Ubd(x+Ug41L23FO;D?- z^U&WWB|SVH@O=8Be1hS>!b*|?EjQ{CM?Rq`MI(JUyQ`u>$`Nu4=C@_>rWmXmFoU%! zh5mJY_JEfY#LB!zpAsIFO>Or+Gt2f7+q@l+mxqwfmOlJnWf|at6Jou4^xrrG&wr9O zYcn_9pX}_N2EER4xcK-x#bR~qIpck|()p8KCh&Q)rM?gO4$YP)lIS1}u%GQTJ}_t7Xo zUWgDRF)^_Oml;HJ0(ye5e}j|$pKJoD+&l+QKs;&!#1c zgGDn|yz}GhoSXkwAOR)$F$SI6{6|Z4xSh%x5K+_$PO)_w;Nk&HgQr=5`m%f?!6jD3 zZ436NzEz9ST>+PD-O6l`n;h(&Gv!WNUeCZ9v3uftR9jLKmEQ-h;9l&u>`2{3X+l(r z0AQCmjX&70p}!&FYi4?!_Np_;Fe%_#Q%mLhz9!zm27|+0Qmcp zDD$JciWh5?an2)-CN@KmGRX5&uyo4Cw=T#FMGag~m&eO3uQ9 zxxAJ2KW64uuq_Q<3<}}_A_svaApHkhUrI`fA(bUJH+L^W2oA-={BAk8LyC&7Z?;q3 zdB%=3-bj_dNF*c4N_=r~Mf5u%ic$21CBMMWlPmXq&6fLp&Z!5U zO{*7Qww-IxNVK)(oSaIdU@v^?xLLPe2Re)3!9h*?roA&y5s%}7eu33Lf3VKvV3|Nz ztzMKay{@fsndES#3N+6-YE#qG(`)r3Rm&c6F%n4*#g_H6;L*=kjANydZNiq@&4j63 z5%|r-@8C1J&4uEqjdO=u*41b894CE)trGrV!Uz*XogV!8F%9fakRRHcNza?Vy%(^> zY^1Odn=877hb|*~CEb?#`A*zMka>=cex`}~mLQ%DaD0yl`A`b~^+%iEdJK*tLRpoE zSO^bV5EcjHzyBMV6?Pg-CbqAB2+wUBYAhluD=2}%Qaa@D_m1N(5wNRHk-8O;?fmUY z@44dc#BC)n(Un@$hdvLfc(1tr6+|znw~%*2!HWgoJJib2s6b&EnL<3x(f1FNv@Q67 zzEi2|&-ZP$;Ko560`ub4F6?!#^|fHkCB$@msfWDS*ZXGJ?a#vmW&gX|5!q6JLmwo7{;7ITtt&vYSkHLISK7KsPAaZC zRb4f1MlZcjBi_p+{TRbPvz{fR_;v&x$Q5}LRfx*T-&^Hnayrn5_R*}1F*R9J(5{+L?t3omqrB8{r`Vd*r>OlcE4Z>$#CqkMyeEdV^vzL8gof8 zxCmjig)Of3Ip2p#vBeRaTeh1)&*V|Q%~bYscD7*VM93b?DMzy`lb3PfjC_KSE|;v$ zI!D^zHDBaPFGfuTxH_5AA;Cf+S1J}z**Pt?VcEYD)7I8dSN{NP<-HusB)QH=`c+qR zU_X0%Rd&diPcBLw<{sEzJY@I)_EV=&9oW$u8YJu+x!`5cyA0(#ao%(?s&Pb~n3$MW z+d4S&O9k};4J_34PBG6Z5pQ>lBd4)(yYB#%f zPnI@|o5=DqVVift@hBT#7$LoY=W)>spLl4}9OGe|1v?=oW;^~tXw=}Nyu21`LG1N= z$b^GQgMzAxtBM+=3BOi?CKS#Sb0d=E4-=C!BV^M=M>jBoyqms?*(Sviif271_m$mr z@jRXN5UFvXhv!dBOw4P&ramq3Qs-%R%e;%F4}(5>Y?L`t_AvGDbi-#pk+a_PCf-Nd zzG(#XLfCKTJRHj71Dl5<0_fZFqLIRMMY0fmm(3jLOWka$U}7HcOpt?`{4Yl zeKj?t_xv(W#h~{j95Zyr%T`JBp_6n6TTHWU<*j*oEp|+%>#vOU9O;{4zyrCu3a5Jh zRRXmLB^DNz#+@FFm!qa9zfhnX}$HneOEKc0X3|sOR5^ zArIf9ooxVIv(SW|#@?!G>m);n=W!dmpd~q)ZWN5E!NI|AY|I_K6XlsnAEZA;MSTE+ zG7#~)Tx8>R!tkg5G9j|=;J4(UdshzM{CSY}e(lUq2)WudqH);$j=Z}0Csb?giYOg% zXMO~10)RAG^-9?!D%_NpA}S>%JT{gzD?6J>R5USQyNIxNcY}=<2C$J)I4t}kH2ATx zv0ob+Xg+`b{4Mue%~s`Pg+rw4_GG$Nj@sIAE(yZiR^c#52MK8YKP|DZ&4TlGu1VeF zQGMMNHGBg2PjfH+QFA$7!V;p%;lPF$`om*Quc@IRVONvY*Qa7rNg&)x%;qr+g02^R z?B!549vQbjs$LvKSb=%GBkIUy7M zTy%{~f>#u4)~Er-oJQ|0pp z0eW1#*lk)JHM$GNb~UvK=##InF8mK`j(27_v+CcR?wK)47EMnZev$G{t&jMfA|43K z5F^p!#lIj#2fM1}^XFLWPTRAM28!ie0s>l!Jv*oSh8=W6*HAZu!AQLD-$^%ol4?@g7Y zUSD6=t$TBaiwp-rcAROXBig;wT_N=Mrmus7I*@fvYxXK8Y@QoL6hSg z8UvEjtt~r7?s`}$acm|&!_H(gAt&Z~>*ELYtrFp*5SxkhIyx<}#~{}7<}TSxR$*iO z#V>5uBQqnGK}Rg5dKC3k`xT#8vy4d6b7&1sd4FsknK%2OS89IN^N(VHXe)wgDgHJHJ&F8PB@N0qm)2M7%1%12aR)0poN+2<@ zR5&Zk;@@GTEOiZyk1)E;X6jsYYaAKT@o6Zw7twz9_O`(t;sf9pms%JXRwhM7Ma&&h z3p}dE-BILi8KxjI^o#S)&ne--Cx|+;)xF(~KzRPMqlu7kX+#LqJpW?ZH|)z_9#=QD zpB=11f*V-7eOujJ0{4RA@SvCpB9oqx!%50s00maTOn==w0ZmQK45Nk~bN)nLyK!E` z%GMLl69~_0*Xu+a>?bU2Y@^g2nW>sR0q%;Z1Gm1_Pl)mG5X7*lO2bqGDR^yyn!JmW zl2SA1mjf#*1bdT&a6pm=Ds!N)qgb#)GWs*VlHo(C6y!Ya3F_%_2)&ErF^K?Iss#`O z1NZcG!M8!0|E#zpzxaCy>`KiL5xKNKto&HeZ;U@3iYq6T8OsWnO&!Fb=hP|qQ8{Kz zy`6EzQPg;>j}VDLjVSVZ850t~B(cm%uN6#8&S@%syyO-VdE>c{2Bd?>rVtK zd{o^sORNYw$&f;WY51Oia|RuqHa$?G!*{ zCcuaO6cd9|JVveZIR4&i>w8UvjH8poy5TA4Si$QY`x|v&<2YFD%LK=DPpXaTpVd|8 zCI%RlFavhT+bY)Gwx8>D{ET6TVNkOLWjMq$R$C=z+i-Alw!#!#f4PIb=vwb|dFsU2 zL^!Z(KKTY(v7XfSh#-8HP+H@ZDiA?_5p%&lJ3Bi)9D1@3|5ewR)%BS1QtZLc7N9@} z$2m6s3~1=wZTA2}gK;@s%BB<@b!@~yh*mRbK1Dk3@kN zeus}N?zrkEPd*e=9CN9e+4)NBptV*-^@n;}~gBpdxzuMF;a zKu!$oBKbviAw5vdgA59_Z*rmZ#Jv%=eZ!4vl_x6N+AQqsF>j)f!j&*e#Z**P!xKy( zRU<1a%hATKbi7o*(C}_ItR7pS0pCHun8uA_JI{vvWi&L1pdUqUxH_JKIF~zj?kGNf z?9*=kalqP-s|R`&MJ1)+AQS5(GKrQHg_nTz0$v4^<8^iJgERtk-;edG5L5%%wy^1K zQkwI*HW)ixTEl8{?~s+lcJ7P1^kU8(?s~-wIj%DzgSNdE93BSf(Ckkrjj$k5Brq%t zcl!Ow3|uk%A}lZ2z=Q9L6Fe=fWESl9WI{m?bQ{ERniaCHm~<|Kly0TKW68^_+OR|& zwoiosoO|({<1Z~cpZOhpBro>bw+Lz<4^D=OQ+T_oZEC@Ben5e~9aNN=Mp+4_pviPw z3}y$114MNCv@QxR5;mzz+cI(}kS~p1hdQ#fNmFl6=Tl6%(7B=_eS4?dbUD|BTQsNs z=^{RTZU1zP(7^d%Y0pap<=M;;(P_4X!To}_6|bg*xeThf>?_upR3AUahJe$6-rinQ zo?u#8MWs6r(*1^|dEee}&%RqVJG8b{4M+++>Y00#9ePWc&a{ykU?!K%QM0Zn#({g9 zDj;4VM69b2JONT8S=}X?$BKLr?i*;h_3KJoF~}SWr8SXwv^#T{JV@Kqb9_5FO$q_1 z9Pc>!Ui_vO`3I@L=ToU0ll$9Ue*=ujjxXLc0nady=)W75VWvH^T5u5PFg>in*jve+ zeEwzfjAw7FIKbjzanaiO!JO%@b#)IaQp+Y+9(g>fAcKn|`Mw8BeBMTkq)7dod!t#d z6bD^5i}z1v!)=zlBAVZVUzW%9xPS49IV24Q#@s+&9}G= zYt+|b|BQZsMHM=*Qm8%Lot0RAP^GC$hd8N7(S~Zo&7A&?#ope+->Slwt(Gxi68M^V zo{#&5DjGcEIux7VjPKJE6zzt4Tm6~uzkaem^`lzkF3Llu4sNwhzkH1O{YvrD&7P5j zsaDj7GEO>_0ZqrZ%Obo3E1N{Z(0I0FTaC!r-ZZ{MtD@^_OJ^4CniU~Ad&1q;LFM`q z3$2^C;dE9(H@=iI5fW#YR*}1KjMbIro%@!E3CKlQFH_nr9Y*6IjM zyq@_wRJ}-dn8Y04yz=p3Ht`CN7+N(|q((8d4qPCZ@tqB~_vT$p65naxPEkQ3cIxT( zQvXesk^M+wb1(JuK3%flt!g~_;C*M~)`7pfj+b0hTrXPZu`C9DBmL;dm-MKTb27Ul zC`2IswkLu2#Vs)^wY_ENBGqy6js1XKPibt>OxBvlJM zA2gQ}RQ&=~2SU4T$oIq{zc)YhL`n|Ar!tMcBxJwcoz<ZW65%NYi!GP<@6rP2 z|KKT{jrQ#~;vyk0J52h}=+FkRu&@t*&0`BI>r#8FoHCGUa5t=9!gj@ZIOH{<=^^q=Ep&D zI7p14KmV~!u2Qbv7Ww;&XltQfhk4+$@`BQFGpzOTQi}vW3-qxo191VX-XCDHM0hR1 z(m4M;D?92rWsX`3@!wEHn;sg&|4QtWaAiZo7XuQFF_)*$o@D~&TK}FXoK{Z5&s;%U zdtn@Q8Jlr7m_7-=tnP)g1x(nH*;?bFqr_)x8F}Pu+jT$}ioH!r_KC*KrLBJPCzPYs zg0I(?{oBTGNA7;w6S=5&VKKgkIsZqDZRNYN;~MXU0eje!={vZQNJw<(h%*A_g7#gC z_un2%{iHbW74|$)N%5|?p;sF@%ReH&ksjcYzRg03a$Q1(aZR`}H@TGl3t!?;CV21Q z`GiQ^d~ zGfM|fh7WL3!N<4Ti5Rwb!5bn1v0i!G(uQC!xFMUYG*h>C(*GIXvuvzxL7L zC&#SQ9zp#yr844|FN<67T{Nuc&w^H8wrRW&Cl+Z4wuag zqXH|iolpT9wl-R5P!US}?9JvV9z<(EF9S%NT5Pxg2cz6a--~0Xs{$dCyay4M&*jot ze&Hlb-R0(PZwn@Yg`viBu`L)NJwU0BncFD=WMt}qMie5t6qS`jT{RY?q3Q+*Z=P>H zHfj;$v7&~ldQiEY^nc#*9FKy~KUz=MsL)S3FXk%(77q;w_(S|??XC@aRsn$zn) zp+eh96hd?cQ&$%NFY@giPw~a*XpZ=fbjD9rF^Y;(-k*Dov-3rmyZawox;I7&dU}a_ znwA-4$-h9HN@PeQEtz%tkytaf=H-ftN`eIC_GD#iclBI^tCM+jV)=`uS(6*Fnyq@F zAK#ZbIXV50H;AN6OLcvcAKzhYCl|CFGsnF7+Sq}Ak{?(>W-`we-) zZ4EC5=@!@7^6-eivuA6fr+q=PBLUv(8Gd*tm2%Sc_i7dbsQ2iNiWHh`luH@~!*0Lo zCgR%g<|L!n{_q38cTVZh_s^~*huAGMb}j!hS=msab~q;_F2lM%C~)TYl3NJ){9pj-JRt8cuala?vJ~n_%6TFLKn2^M8{Bz>|{`-&=p! zG61HrpJCNeXqbGe(iHhDd85{V@!qA0(eC-VMf5KKZIYrcrlH*-$eUo)YTN zxi+x0Z;}=(e~I)!DcbK4IWe1}7^1y7xVis~a#?sa=LfslY;H-ac%VtarUC zkx~`=s7){zVdi`Owey#ao2?d~Z8FB~RbfeAr7QQ0XKBd;2ctHMeH{7Pw(-K|YJrau z4wg|)M=F9(+sjQ_=EffdYeLe~2@CGV6v37IT$lm7q_67g(~{W}ycoK6ixZXB6cT!D zx-ANpQjCtsosf-1;#1^@oIfri!&;-#2!0g4x0l}iM6k3?QlP4#zPC=#cb-kRCg8~1 z(P!W*v10O?&G__B=4p)zO2zK}jl63oy=(b7f$640aeGY@`6J(eMb#T$@$)0;CS(++ zmvbL$R>QU2Zp>+KJ%nCnKqj!nX{Jtot~M_ZlCX&XW_8%S!*%3QG5ARu>p zElIja^$X(sQWAbf(G)cVy59|bFnk-{N4NFAa^s}_cKbNLpn&u-FJKzdpI6_A)pAC% zQZ&u+#QI6nJ@F$M{6jG5{6ZpJl>YdKvPZ=H-oR4V<=8{Jt6u`+8@bOkpB5%Z&UrpS zy6NujXqHTy*I3f99J?xsi)8FPRw$VBCauLFV>~;ObIVch6cV@&yZQbrf={{1Y^-S8 z?fJP7V?=vR8DtJ!F`^Em-!^#P{?Y{8ABC@bFBRK(HagTSE{0-b^!EC$2~FrF0+@Hh zJMKqbvd?l3rQdG!pOb8$t}g6u*|+F)GHnk(wfpV8$lTd}!TFA3w~B(kaLOlaRbgSO zhc1?5slRN(?dLI96|JZbv#7$}`XPziW#n$AtDla{gbhx1@g**GlN(0lVL|a&jy8SE ziz&&3H+|nG4{F0w94`j(#xGux;nRvoq#Qh#kh-BIefdGB0=wy^uQlOxUxTJ+I<%Ty zq(o{Nt3CYd%EH`DHS+z!u9i;)Dl}r}c(XODVxH6)_>r^^Xclj|-1{f5Wm{QW`?I=q z-oFoN;?q$Bz3{_V$s4b0{T}?4GY`Z<4jm!8W zp4@FQ<(<#VFOr7NzxE#vViJ;p`nL}D9--|%58j_UP9^`c0(HOd)T|}{!ue(~#*dR; z`Aj0f^Kd5>?%nYhv38JSw0%R#E^IGv=A|GZ=5!@zfJNRr_O+y;$oG!O-#_3i zxio{zVe``Y>|}cwm5S{Vxl@9@l<#iiB1NB12YS>MKJ2JQRylcLdZSuiQs%Io5jo6A zV7B67Q6j0;(OZhdb;b8?@Tl_RZ~VuG#y4Nv$g5D)pDY}xvODTr(5qaWo9kJ!_r{fT zXnwS$7;x%MsVP*Qd40D_?*W~Zhm3-Yjc9>|aZ8bjYwlI|2nvT`6K2!9RR)?mJhC&1 zZe`7=;#<$Q`+hVVpDY#{2P1t*Q}M#oDw6Eh?v#3}NRCUJ_~C-SiN0ffiPvsGIXa$TO30fPJ0fl>}Y6$U@b( zpnOUnH+yB2}XTVFxmyp|FHp4I3Mw5}-q8jZW$o^JLc9R!#IE%#m3GjcK5 zR5pV8;+w)$R@?8di3j>Bgixi@(A=7G(b`|kZ;~J3>|5|9rcElRD$1{4>cF=`GPd+S z)a#EV4#+a=`pJE|xELbQmmWT@L$P?Tat5x42ra=e>fX1S!AAtL#*W_gUbKGQpHJG#C7G|)Q zVe6|QlrglHvp@P_)|$M6e?HH~yS=*rWA9;8a#Vl1fP46sfAV&43FU_l0aYe>sZ&DZ z^Cibay#aJ7Z(GUPFGnQji$u$*dgZ)F&zhv&-Nmw1)95a1YgZq#eD@#^c%XMHaFyzE zqq5q`fgL5xjqt|s9aWP@iIn|Q-2PYhEsm#(mv->czcy2)gkrEhkf497vg7w#nA0nI z8qZ1!Nte%YA;<020R8^dN6Go>r1W&|^9Sc*vzudy`CE4^QsvIqu1|;lzE3FKBG4VY zV(g`<#<*|z%I~T!ZLuS?FnoU!V{ao=^mOKM|8#lMmG>V*|IH%2KX+VJF6UPFe#&U^ z*=s#}qu7YQUF4uOr99MK%6#S3@MavvSIO6IJs|M93|CV1$I(#ElC>H>h^@nymzPW2 z31r`3zM~^1(lfu1V8Nm*#`>vbh4jGlq*|PB{YPt;`;C1?sIuQL2HXdKQnyOgf=l{RBM6@bFVW+bXP^Z0@KN1b>TkN8g>6!r<&%`!I*L zEtS3a$6GD(F~4mgv^{UO#y@#b-_oE5lM~Y{>gbwmkd_1{fiqc+8e0(5a5EwBUS~=~+r6}*k2xY?nl|;OUrKP28J%^K$ygd4r ztH*X8_hUsTGz9p}Hy$+us8ohgY>g#kW`M>LctU^;oBd>!?i>SJ#v-;)Z-9dqq)24b z6cj*D87>bTR)%u?y{^7KhvSP*0l-1m2LHhU&7KOIR-@lA#r{0`vn1Uxz+)jq9U#to|}Yp%x?(Tql?V3k@2C19#~7O z^;Pj^UDPc30giDn1)2Cqq^5?oe@a`wFRQYV(0T4X0^Iw<1qet%&53~5jf>;O8U2Th zp{I22S>x5CA+q6zCY*&9e7x0FY=p_BOZ#qAY#?`2hhDZ&2$c9B-~s-#`^X1`KH&RA zG`3gLjmA7`UqqT;0W$3fDDX}(9C&|t zGN!`G$%fC_m7>)>K$YkSRQL`781Ed<4{g$gD}lNLp+miDVL?F~0MoToQCUzN1griS>>*gYzTy~GeTys&+5-TV-w52S``rqUm6Ci!}i}Rmda^e zL;=4hTjb4Z9(Wcww%J|=lKVI7n(6%2I;3*V0Khr*NuB_~yMWlv0jY$&JUMI|a9NRU z9EQ>CvSYa{l~OWsMrEG5yK-*|rKqC`9}OD|eo$qL*%JsIFTX9-_W2*tOKCsO+v2dt zTa{BbdYp7X-hh91zrJ3*E4Tac7FNtpROpM!CveLrdXGL5+B9M2yeE34#ayU522CV4 z%cC|5m(@@5VH6+l&v|NDM^p(d9=Y$YBs(m|8Q6dPY3Vaz7tn5=&N}CWju^X-bfs;l zs<^$*dQ6zu+1V%MLTp~Ye$D%8vcj~u%eE4ogqTRGe~KxHqTO1s1$xrI%Rj-_B2y7c zGK9cUEjq%mMiYT>H2$mFhL30<(aoH1vBhA4@)fu%;2j3;>8L~}CSrlwRVjMoC}RAQ zh)4<)6+sjMs{J`RITq`K|4jGT8{mKm8Gdxz$j$MQWKRAif1u!mjrfEbx;#J4OMk%c z-hgP4CU5VG(A!#w2yDRHK-G%49^l4`N-`};z5nyR-1dMNP>8-}A>-0z$a*~(4SsFi z5>sSI#wOoV(%j|vj$nTHRA!7d>s`0^{`T-#oc;ZS_@E`8XRot*-8FVp}a|XXkxj!=0;hVWDjW>ZT@5 zbg+~eW-JuNLRoP}&fpBToe19G@VDS$+D!-Dl_4av0}#O$bLX4(%D&rP8_ART!s^+@ zdoNxtr3ccrEJaG;*Uv-%OXIHZ`fq-G`UzJLKd`#h??t?ba>pSI_1lK$_2s*Uzula= zrRHdGaWy+5#Lz9dZIyQJbumZ&u&rcbWJLb?^XH>qVpR!`hIyD~zPIToQ$dGSCb(ct z2nw&bly8WFuUM9r5*OXj`IivfFSv5Ty4lZGJssiW7f zfA0=76cXfXw`Ct~f()eN+h_O`7K2$z%`+!kcFCi-2b56wwzbLPQVC*K&$@FC4h>}* zRah}fO40(mtpF{FS*dPRLPAhh77Ki#lJi#tv`t52iCQYi(g|a&yVmamWVH~=^Zg-^ zlaO&bvh}?7X4XRn{{qxy4OiC}|5xb(>`@EAn0qm4m#Cm)0mA9yjJ<-iv~<3Mo1iKv zb72#MO#oqydt=nu@a`bPs3K@T()$tx$#Lpcb+er?GanxjEFSP!Dt5o2J;J*4xa1wn z=r>6CR*Xi~)=s|i%o;O!_owXUxXb(MnLyk!#yFv0yZIxyv9K#UMtrU0S$}?jR>su| zW@d;Ih5&sK4|GD>nEun&f=w~FbRZT2P5I3ab7q#adkMvZJzE6Tfsq} z6g^FLrseS8bU#v7-PUfMuu{`dd1)%aHyo~Zb98@K5o#cPGWi)gVsXu{l>{RrtWPzm zL>w7#(NX9;w)haDo-t#OSES0POMn8jEVhRthC|fPpn!FKHjvjmA0KG7qX=NlT=C+b zdT>MIak7OFd&AKHzEkpHKekEO1Yc586nrxCaF8x6VYW5%BEdw3Jb#3K9i$S=F;5ns zc%PHN>1b5jOxWeH1|cT2Zk3&$dhL`|IlyqWvrOoJgX1t*vnbMcUVeS1iSyF#+knlN zI_Jk+cM?_D8umM=fxiTFLID)y6`>O>zzuSsy_tJ|0_hOhvxD|k4aw0OJ^sLWS0L$X zLNGYsnD7)<57OaOjYz3$5d?P!G2Ly;gK$n>DICzjrCWjossIA~p|UfXQO+{`!q_l< z5ylrN&-KWXI@Ptc72gKG{}s%jq$#_N0!oWMSq)M~N`?WkK^G(4NX|hQmJM=PDmTa% zhCi)&@n|#!>1++BXg!A23Bna%=mB$HYTk~$ys~0`ez?x}w#&rIiY@y|S_DW?8X#^9 zinZqVIxye>FmE;{+Ld5xR~u?G--2vRUPd?(5fpBVu(KPIYiZy1_xFc1mgP~S*CI5K zCX9N5155<0af@D$RFWg^_oIA7Dl0Evcq8U7*acNl?dCTqKXRU=t+-od55>jAv|jZ> zb#`&GyXs{HOm<@8&uz;xt|gGSOnZUc{a;Gp1P%d#*E($s-`NoZNTC@{&+yw&lx^Z9 z#6+9{2SuLYF_){GP>+|&mY=&-Tx`O)_3PLCfG7M;l?;V{z4-Z=aWf+M&2d2*lr z(rwlj34*{LgMh9LK@-0I^B6Wc8WeO~YX&rg8NGZ0Asc~BqUfd8)*fs=Ac0wDx-DLy z`ij@G^Qoy`bz*f168LCpwm^@>)ibTEC8X-xxdd~2bt7-H4w7KGEkQi$yBH>M?A0X2 z;n9bpb@AsjrnwAHLr+obJ1Y&3v_5hg;f2z87A$n%M_oK13gY zaDFEvE35xSq9h#wV!e(d6KDeXf1023Q%Fi(C@n0ty;jbS98a{hp%$MLTnu8e>HsME<46dH21}hGwx~BYzVE=q$lrwJQ7e_2E7${4~ z9b1=wAI@_5R}lb$5~!`=HX$S*@N^4wI1!2$fbA(jOjExlBqv00aBzU|J;7*Vf{>&a zeW`0hIRv13^7 z`65CD{v;@4J$RKoYhO`6n5)QbK4Mo%4RflV!~ZWqS=6UbAGr;xzCx>zAn73t1q?=H zC&@6YWg}Dm2$hOr{BIHse%tqmvPVaHrqMnmV^~?ujze986m|py z?(QCA@jn~+14TySZ`S&eK}&_0$&OBPMo!apoNKz8<}%K)L71RL8R-5d9-EVA+n7qC z{M7C&kGu+Wt-h-5jJ2HTpW{h%6S zORw|RU9?p>;ALfH9d9+mrsi50zH0R{K5U<+ttMB z#5_f+y!YjNH*qP2aY4oODr)VXs=CXrf>IDB8XgFzH3&vo{LXh*lZDN8Qze_VU8}<> zKANZ`p?*yt*7`=`g_XgF5Ks@WWc)&9rDvkC?uuXtVoOJr5yW7u?!OztbST%xCi%`R z=bsRUy!Y(3Jm$Eqx4mbL~%WxoMF4UuIx&xF%%_bwuRl;gP_J zpYVlX9K{~PH6ey82*k1Hyl*7m`d@fLPdoE=S`Ex)umaR>-=uK{NT zBvL`&^Xyv$$cpYhRbYRTx(q;hDTw;yN}VY=T#G!nc(1-Ic0_RXNS9`Egs5-vHt|ZH zK<1-AKj=&rN0)99#$L^@Pg3Io$4my5g%bf9MYy~@Eo(qfW3wqjMp~UsK9smPk_4qK zStuG*cdBu@JKZ_U%a-Xc?1!?$`vuDX)HNJ8ctOAAb8exNuieGtwh?3|NL4G;P60dH z^dDr~c%e|5DX1a33Y{=P=#JK|cG-?E!{UmIF0&?wS675H6Kf=W_*Op#Ekv@qg3K}#K0>5 zb(5GTuXS9wRW1CvXcN(?o*N;7$_TM68^M9#nCtJMl7>PUXc7<$>F5LivCN2921jbx zdw@1-ad9z7Qeenv>9(%rxjvJZhK2^?Qw5MNA+$+e3kPS8$6I>oFUST&{UPY9ui z>iI)FxSKg%D?ut=$nFa6bSkziM}BT`Gk(qEt+z}@|JRTZCHvnD39K~#8$$w*Bw7WZ zz6GrYu%Ryxap3Y1XDEZq!0M|uA}jy@s|n%1?);^<`%Q0hi+g=iQIf;OqQHVcAh_}`q+dfIcM`yVXACs( z%!%yhuizJ|v!uKl2KeWNVHye^le@@hy1cPBcX2mzGK0Lcv$r*S=4|3*W@hJXVehhs z(k2Fh&_d*;pR0MKZMS%OP)?-m-InhD(JQr+PjrV9S9D;b2GAuxGQuPXePQ#WeF`(< z-izQT?t~ba+|HQt^$2V!3_4c%$0+dvb4Hb#BHtM$+8yr-^kPIr;&zg;&rFmq)cyHW zB-ADjwPI{COJ``*e!X=qqAZ@6TUR_(*En?Prk;)vB{YfnNQ>c5%j{=c@=$^R_4!Xc zH8t=!H0-%d5O|@0%q;vRBjI!Agu8q2L{qL$()4%qrW#g=WuCK=1QZqN9zgTx2tP@v z5|w#CFoGoe&8z1QVqc(cxAp!~PGBV{N-}O+1ZMtZ`a2CsyVs|Sm~@?g4a*Uf4U+tL$%q<8(VJ=>E2)PI3pT>ABoWn+ z%Mr{RcDCl5Wf&tZnZ#*7ykXC7pb*5b(C1bjivJOLGsc4(!6`tASC+onh}XqIJHW*# zPrZj0>p20cDrZ3f^6CHK!yhCGYRr#*=YNKo$HL4T zo?)x0%Lt{f)zXf*Qhhg#o8`xbtQ^$G@X9bJ5FSq7pGX^Ck5$TVu%+Nptk!krN+B9c z`)(Qo-nk=ucrL<~5@7}Z@mW=EQizvL)ge>vh@6&a5om1Soa&#qw0M6QGLY5~?t^r104XMHEn5zK7ub8qE_> z#RuT&X74){`qk6mst_mlRAJ_~q@y;jx1oI7uB8-(mbSCL5}&JJnKOT zP??LnDrs~ExUgmmsCl8evs*(b+UVIqfz~&6H7Rao1123c5LYV)0;hKr7zsnA>F00< z&8x}C$d*oOo)Te!h?Q*RYiVggj_AR%1KB5Oe`MS~j(-kfZnC6^Su!goraYlwO@)c^ zs~~kW14+1J=0={me)JPn5Gr5V+Gs$ivrt1WE-qLn(q85U^00*Yt1xx%SeucdA>aHi zwP4MHC(J`+s8lfJ6+K0y)1~$&t4UWqO=o+1_PFni?#*C0Cy>LLYrX)6Gw?AP4wm|h z%wcrJ@p=&l$meEDkLFm2M4}mL!1G-Xh=rBa%HcDvO6}@C_(zyId~(S_fOTqaWTf3& z@{WX_9+ivU`a(!y$|>0=t3*ajTwL6_S#-bNUfEqu3Ek?ctsvHcIa?>8bPUwHVA>6Z zcR+>lXnJck^gCvo+~{Io(30U8Z&sPr@5d>;Tvzt?ZW-a%&m0bs%rZ0D*|#zkA`n$_=SD~q-7p1-eU2;u|FhLo<3Cp0R37sWsh`%Qe0t?nTV1{3g{=1M#N zuAFW8gD6W{mO!raUHD6a_)zVu3|;~}lPv{yqxFaOI1MczP&T$VnC7dR_PH~k(-M$% zC2EKFCx~zgfh5o!lH3!>`S$$;R=MqBRLh4GoJ(E$^p{3`Cp((;7WWfNHC0z9wW76N zG0HQyU|4?v>4b@du!|$O*{ZOj`DVuY#bd&eXh(celJMo0(}ga~a8iv*vx(<%U&j!l z2$`N9ij5R3&P}6;=Toj<$1QE9tL{DIx9eVmrS>&yNe5Y2T6SCUK0tpyC(Cjop+(Bsg-U!+9DSlIVwcCzaP_a zDF-YC*!kX%C#nAO8{zqLVq%nkQr?eI-ooBKWOzMbaWA9~eji%$5}bv+@oT9%@y9g5 zMiNu58;wdD%p@wc1um|xbd-3`?zJjRfvv4#b~I^f%t2*kY~rmLw%77ZS4=Td>v@f{$&vyR{|d>nmOtBnJ*r zR>rRbub6jnIP5Pyr!y!HK*tB6fp<X+B?Fs6i9{T5N( z6EAk67JWna_!)BjLXLn0twfJGA+0>&$@cV{_jxOb^OsWLpMFTl#r-W2{!7L1-ya%N zR<-GLxQdJHSJsVRtTXLe?+E`ny={3GyyfEoA)OzKV)ynHr}oIBDctVwQV>5Kz9dkj z{t)S8>?E~SNYKp)=l7*-uV(Mtk1WnJIhSO2@^I z9E7K?n`j51_|B*HDrfF?QBA=*%QI>G%D8Q2Q+qeVz0a%$c&^&SW%sY!QX;uYE+LR( zec`euQ>;Ntq01&>@WC`f7l>r>t{|OO0Te`DQH+b)LgLi~(4=1vBb zbba0uh&TJ-x%tL)QMLW)wZE~XTT^s5+VPA$8-=%=?YdU)!xdZ3hHAJSS19pY4^y6Q z;1!=OTIZucW)=n{;#8QK0%94zeBr(tXK!+t&wb-?@B@<1}$$~wY5R5)-k24*_GqKm*9y#0G2^ksG(mAShG-(b3 zIEwJ5DX3EZ=+so-PC#xEb7Ny;pjQPRjaY;!*LSML@o|RVsSHIR>u0yMWzM22s1muj zyECN1oa*G&oHaC(V%8i4B0he+V`m)#Dof;|5zSaM&4J_M;sO$aV-Jc1GJ?csJeKG2 z?pb{_f;B`|%rd6EZzjbyZ>(H5998%;gAI)t{BstPN!hFQWMcW-gD5r%NX+1d#XkP6 z-eG!xV0{`Pn+|cHO;W|$oGeq(NAGm0%OWF==4Robww4ldrI0`~>}G+j-$GZOQ*xO- z>%*2MeusZ(p$OwjWJOwMtIF%NkR=ro=(S(+17SAIRzAh@8*|mE0mPm=oDvTm{J1y6 z%mY9=sT$os_mZS2ncQ{}Qe`5lhwr!v&)L=GLcPT@M^5JL>S9il#y44?1$GA%n9Iin z@=i@mD86_%qf+AcQTo6wS-#bfHsh(AL#kqDPd>WC?fCWCLa&ZCaHwQYzK`ncw`5oQmTrT`*m z_yhg3YqptNZ!sFL)!UHo{$wHG_|QC_-`G9&K?-Z{zgXgw`bK4c z;U?k<=07ou86>ioS!gQ6Ps$|kb}vi+^x}1wvoIlzot&)wQ4amG^Xz^bTZVrV^;U<$ zqC7(?KS#{S{=j0;{+|pYCFuIcYzhxMxx3Jz{i6ZZdP=@Dj&~bLDB$-0F?03!jc)|L zL=@fmSM8HXXAL!OZm#DMsNg5 z4CB&oPin9AnUr5u+@GRi!fp`>S}{9>t(2u7M4 zvuoCpHVdq~`ocb~f`J)#h$D}=hO~D3!h-Y#Ofhdy?bnz3Qr|n?j(a21jPR|S+caIr zV!ajGu4fggLH)His<)fhpr0MT}ef@NoF7dl5At(xGAG}m0>Ne)IQ)W^eC-@{?@9hksCBniy zHxEyE~_}6!+P)XEBV0M_l(|o|`Td;CnCUz%1U{+ao>1ss?M{ zGv+u($8i2p9>sn+*(ulEKpY|%il?~5mt+TNo(MTuW0_8o77w*wj4wII4G)Sykp&2| zz28gACc|9Th$^xry_8ey! zrwd|&!~gRLxU|B&7Js>PGRiKaJ|Rm2RcSZbd$BXGlz zMG1>W+3y)@&KpZ>Ybk4MmMb6e$r3G;R9G-rrO&*?JVdDbt8_22r3LLhJb1?=-h-OP zO;>Roz^>TurWM|oZpbp`SFRKtK1b zIy!E3u)R4@0b9B`*2s*A9S2J-pJ4^8Ty?x!JF=@7;qa={FMX z?am9Yv_}N>(Xg9tirwc34`Us05TJBu&~*?>S5sm255wXtq9#WC2m7@x$}^GP8Qqdb*+fipY| z37?l7=K;&ox1C=f>)dxbKd+geHS1II+f%Qx>xQnatwC9t0?0)IlPl1enNc~vZ)|RM zl<74&Z006KxxNXd2(;10FplGd%G;xMfFjdB+4PqUUslQzDxKtXb{qgTSD&k2iy3XT8%HD>MA z;{Y4Jf$L_v%wYh0HS<6WNYm3Dl?unc&@9qYC8C1`N!}?`3u|ImldPV%6JPU8RmzVY zSgq$>cM?PrA%OJ&iy{EQo453W%4!G?nCIKy=T$O~k_NP(B3MCpxl(XW?~J=rrM!~e z@H68|QB7xTj*tc93-KiDSZq<2*4G$lX7vj>!qGvp2a`4=nEFLof~hbpYidO!9`enX zJtFMV7ruO{R8vqnV;(_eY3CZJj0vcxlm2uTb%$ZaZ{aSff8nZ=7{{jh3IM1X6v4Vj zK|xVphYwLyRFq^8c?D|@wc-;E9+Y=uP<;lYhx34m51`lyJr}RevEZx?9}gd&Qyn@J zHA6A4FeRQHOez1tM+raSRzd*0XE`58(Gn2s-a_*tg^^eK){=TyuzbujL)Q0xHzNbU z2g<$|55!Izh9m!u7y#bgj9uo{0I)^4a)(j`0lMTB*DHH&|BAbR$2i7J%c7FWpWx%) z7Y6Bijsz0^^%7=^kSnuZDM6wHptv5>f&5gWjiG=9Oz{LEU35G;sk9zh|2%rm(2k)1 zK=k2x^GF?;x;hB<(*SY3so3H5hIbVYgYU?w2JYSg1C^y@Qe&<--kWYNqslr}QdERw zPE?4@B(3=_{X+pm^29~|^SI3r27AafsRu8B@T$kYEWA4Nw{pdvBFDbP;AUqNhWEt0 zV64a2WKNJ2p>!^_=EfEN;UH2|s_fUVq{3)WnOo|Om^ zesVay*Gonp+ut{7L)KfdZY)Ag`seno^~%JMH)vB%iliM?&(zt5}F54506v!;Y2tkO}A`03QOaY;1l< z-RtK4(4r5xGX>u8lOQLknHDu49opSHbTF|@e5L&OOJ{-!o4VN`UgZ?7AYl@Mz1#of z_WCc2?}F83+Y64nJ>T+hety2+oC_qPWIk^pfPp_Mm*{?4D|{0aNAq0s`(&vOr%5kP zn#al~lX;@--hw~=KWjAGKxtRocEPNFK41_N+NaPqyy_(2vQH~{ef=VT{OspF(l7G+ zsom24lUEsH}~Gw zRC(W@iQ;9qrezl)x&bb*77!;o4(Zsp1c3ykUi|iNkaShC5CdSIt_1%Fn73UGv@K1) z%dD|Vl1}(%d77D>tu*RFBMZKhG@#!2J}aBcCl-WGDBJUW<7o%R>H;JaP^gB5#N=SZ&ZhZg^c) zLql#+^U0k!#;leWDljd4+GqfrtzsRYOLP2jbA9Q!F+!*7u^jYwT$yI!GNk)Y-HQR_ zef;@aYZ_er-h`G9^M<`G^V47g(PT0q9~*$7*!J3oRy*=m420OaJ+(Ge|( zfjtL9Lr9j&M!|q3Gjn`6gK{H)BsVucc5OL;e{f;!H*Z+M?UH!+E4Q zllm;fYYlx|az2tJ6^ajy5CLFc`7h-L_^`V2^rE7T-CYujS4K5!%ZFF7pQ)~ianOS1 zIJf@d{m7G)-#8h+v4~pQ1{+vJ`l}*90PcFo#}R;oyep)yhomz^JzDhXU|=2gX)}1? zOiOU~3mWa3``W;O{kPi|;yecAuFJN9zhsuyPjqD-Q2Dqu=oSW0|{9=j*(8s)qe?@ zjsGF9|32CHOi@!(y>t)LpG=2Gu}k>Fsqp|d`%*hP%~H_fHQt+i#jYnx!nmY*@1M@u zooe#OCNCi&F+;(G{XR5rxo17I&pvv8acgg@%en1VbYY?8p|5)vu0;l)ZG^TamBr_x znxBI^<+%z;E2VV{6r6U8t=^ioHspX8IvCHqart@qVd*2f13Z%dF2v_BK65EA)sAo> zxc?Fm8Ua1wq)9j8Wj{Pwytq9`n6cf0n28H7+0pLAqpz2sm?)(zMb;T zQelel)G76#YPdo(!j0d3X*QmxC~&!5eSpZk^(sj{tgPQEYf>>V5TAqhu@!6rwhAt^^y&ka%~4cv@-XX>dU%_-DZRm1Vs50eUIgPlXqLhC_JI_1(2j!tIr4n6 zt~JQs2a&4T<|7J-_V*t?RGNN|%UN(=YQK}_I;mBEdvj@2H#<5x3BUq!47R7M*OPZZ zT9DJxc_<_-Txr~crRzGO4hZS9nW@%bOe{-=FqDYve=SB{QU37p+04w`Nh3QLvet!0js{kdSN5Nfr&Oz24_ekMK z?=#H`2x5J>FZ1T;38Wn!Ee?pfO$FUcq1*u?aTb8CLN~r9%D|x znA>4zf)y2zt#o_kfN3?_E0?D4pt4ubVAoLtn8&@#FS|T)-mZM+dL0}zn96V8fAelI z`OX&$Nb>NyE0*sks&fTAcUC;;$C z-SB-l*&fBd->s{keA)~OVTY#qxq~>yj&%fPL(k;IM8XO=7^Omi$r-dGS0_uaX%=iG|$SJ|T$(>oC^#WthaG8VSBK}AJp zqtQNr$l&}{YpXMT>U|Jy(4FqS@X2*+5}cvY`Qd8c+(~6Jml+m74aSw4g%yD1Uj7}g zOnuBJ11?4KNmt2`0rjjOzvnhj2m`0N)VnsytDd45E4 zg6T&4`^`GydXF&m@Y-5FNV`e2=-b9z z5DArb^Fm(NTLyAKK`z_+)$)OV!RK-(r#5Fx2&jol7Y<(s_Iz(Y02c7`O{>i`SM%9Q zI3#RXIK%hmylThN&aSs306oNZ58M(^1}-@tfs%1qh}&mvP1VHK?@* zzPy&HRxh!J?nm%}$SJB*XV(LYLh(sHYuvXc49yr~QM#8Q1(Xk}3V=2!a{fCW86l20 z=j(77|03mK+Dhx?t`vxdv0MdCutLmvz$4A}6n|7jWM2J#BCywt*iRYuLSt{cI*e(c zUA&mA+yB8*zH~IM+*j9jZL8~b&|^01JZ+Xl2T0JYtUG{p5dO2*b~(RS0g@*V56@Dp z+{W<`*?)Kes5`Dt7kvj$^*-#>{AzM%KP@dcIamt7H$L5+2fA11y!&G0ueP!`oX^K+HI3$7BMUyO(pE6=8F1D+Aj?A zxmpyapmOe8%pl2RabGbd;T@i<`NeC!p4#*2VILBZNvq!t_kzI%^Fbxn7HHR$n8XQ= z-9JGQ-kXbX=(tCUL+%Bv1xAltF2ny_FEFxHr4y$D+|zfN>1-|z4nF{CM42B01&%se zYU()WW^!!oHT3I?pO0;AZGryubUHNE;4uKZNK7OiS5$-%(lvMU;;#ysIm?2>L}8x? zn5eT#W8XS|AS^7I*ykS)tIkcmKWY^IKZ^~c*QYPU{;Cac`{3o!(6wez^=Y#9?zkrp zta5O0wC@CHFcAUVgv8@3AG5s^`Wy7Vi-;#z;r{_@u{%8^OoK5mBx>G{=J4_#o(U|? zj|_4t82>k(DXD=ElReKC3x7>adPqGL);nKmov?W22pMjr?BXwjMy+DE^snMxE!UvB zdB^npF}n%dQ|2ezu08OcLPBy=zSeUYh2L`|pU}H`)tHBAh&AjEbDsXzw5N<{_!4VL zXZsjUT|M^I&X(Jlp--aV2?zol{dlnknmFlC<;4K zOAk+U9Kb!}b}xLdAuX|Yp?}QI=J-SockXS3lQ;~=w^;0{j8MiLz>4!tHoe&Kj#m$& z@hN-R?J}Y*aq+HP?J2~)8}Z$B`LXM+N***0EuGFdUKrD~&T!#c+xgNg-lk3qm>j6= zG512`ne`vd|5veuRF4cf0{g}G>=Gs|5z?}KqRJ=6>z7)9_^rP=EEIU>S;?g5q9Dwt zI~I}T_Smu0hQHMt7EwggwamnSK5AD7Sb#{O^~k`D2ECouc9gocu=0`4uyATiXfKhB z5m+c)-Q21`Mju^~<2|tg1%$HLIpc@ZdG~4Iz2+`FYLR})ECPl6@e)wkUG_v5RVL3_ zc($?hwI1Gjt6a2|J=|`j@oCq-r8I)tRq&sh{esS(R+hZh#n|Cz51f96Pi0XNPj^8fw|Dc7^s=t+y{10zuU&ku?J=EMEq8%oGL!Aj)J3YQ#RF6hN7B!! z7@AzlX8Tp?fIbN}S{mdY?k>#F2t#INHM(hm3v&VO-OJHvP`ArAN9Z1sr>BOe)wo)A&!&s zt^zxOhj@+OBcjl5_vdf^Lse0CsnBz_W1wCn>}XZG2gv!Cj=>$sxADzaV*IfAtbErrK#nU9b0$Q}OxeJ=3rc%kDB#FcTt0pgMgOH}gliOT=TS}CGEsh|!nXkIH*L=w0L5QqNF! zw#{>_ckSRr>Tpe=bQyZIhz5)gh`a#`!u>GP;43yF7O`3KR~18ey?z$2S%?#X78Jxi zAHWl8`Pd3YpK)y+YJ?U@0oa)(~@@zNUmP&*JKOo>s3 zn<;zZ8mLROU!%+L{(Xx`DRrtrWXEd7a-iTY-A?s1V~PIT5V;$I-dlZcsy$a`q=JH* zG=?$!J!*Bqz?M11Z<`uA|e+w|_^7AT`iRvv-74bi}vo zEY-BLkG$5QjP@CPZyqqyaQJ5*V z%+jjoqKUCv9Qp}w_7;aaqWOb@ZYUlz?=nE7r+I33xi8#NLO;!ApyJz zsE_T!A$n8y0gt@Ri(K16i1uU6^`&`%lSYlXXNUMJl1qjk)K>s5nV}?Q%1Tm=+XSal z69?Gofc3_>GC3xbkW-KV<_RPiV8^+f`xkfGYNPsn9U)0ouEGQidb=pVN<<{HtW*KS z3{|2mloF<}kvl`+fP{gXunP-DDR448-jdIg2w)X*SiBwk3smQfPmUU+b;Se?&@IC{SnSy`50 zs9`w1vN$edd7#P)5}W0 zaE&<&R}mM99K8xk{#JocDhb?u;9jP@LYu9#@5_l63xlQdN4p|IvBt*6{6RTwG+kw8 z7|{XzEbEAlt>eyBrw+TiH;#n_f906-iUmsj^nq2tv?ws>4JK#$H96~B zf}CKa%96smbpvUCqERmEVhA}0c?lHih@XX;j(-XPfl~}P$e_uaLTcn`3?n}XG97*bb@dnB_vfq0e6}-WH6z*sls&TEc`MPH^B9 z6alKagZCjZ1eD~IcpFRuBjd`HBT}<8#l$ffp2+rS#^RYT5 zYS}RxH*|zSF>kbaUQIR=P>1H$g9^10%@_$WZO-8|2l^j`ol_qsR$=hZ+_ zz=Q?#H~$V=5z26l&Bmw~jQ$d|?cQ2q92^i}I|4ikvAvZYFpY(gPJn3+WVZVls7r25 zauMuASfPNEL%ln9S|^t?4d$P<(&Ko;h^)%W*ez*(Ui5(HY%Cby@+#xjz(?i+j}Jt@ zoD{$^vs)k2PWjx|k6}Mr#Y>yKHVM=V7q&S zWWqI_k0<&flpn{(Fk%AHME6=8u=kn6IaygB2k52Ms>`-=#&k6_LXfy~FDh4tXWfj8 zoDMee!&A;mjO6X=d6fopST-O;fP`3sIQ~)!A=^o53wIExC#qa8^x0`tVR?d#1duBFSDgR{ zts6v9q3;ZwnprBzBhb>_+ldj8nHzC(XZ>8>aUjRjVq_bSM7;m|8xV9z<1iY~%aBk1 zj~>cSXVY8d^^rY@BAxH^2&XAE2WG{uo;-b_Jcyp~ZKn-z;&~*luE;KZ>`gn653K=FM3dcJf4^&~$ zJWOjbmkk0y2mRx2j6|AM7t-Ff!I6Z?VN%|sZv(3h^#(Ru8erNCnAD`HtYZPV%9!Hk?B z6JuT_tr80cypjg?>~1!TQ70hW4Gd_0dQpQJTMhUR5N7RRZBiU6^ zP3Pg1?Q9He^$QKW!wTH9nMH5X@jT^nr25gov%N%0OzKbe(CQ)u3ux_ST`%(K?5FQq z!etE+Yn65+s`A>}h9w5k+kYlF=IjK-bSVcwwl$&)<@{nE{&Ev|5B-6}@lg#+vxx-I z6eX#$YH_uEUuuZ=FJpgI+zIYO0on#dRwuV{IBn<;)oRfpR_4RRXFdK-2$-6RRcr!F zc&06LP$M|SzezjGQX4kE#u)lZLXm`+J7uF$zj?LB?b*nj$Rv!uB)fqee9y^W0VB8O zn~b^015{OVtHYBdEfwIJ_HuQV*pX-aK_~A~{=Z8X&p5IJ%eF8=B!2=1aS|9w`>)Z3a z)M-Ar*pl*D9G{O=@fF9T5ej6PDk=P)bsA9V1W}mI9-ElB7u^>CJg;TxAzemf!5;xJ z%ZBa$*Eaw6?=1{Q0y0fzu;Fp>Y-ib@w2i*9KM292lB6Y&kdi`~Isx%v zR6RZN>sSBr4lhagb5$Z9US3D7Fw<%+Ai0CT!73O*W`B{+%g5I_yct8A4HWK$1$`h* z1P7y)-OzlJ29Z1R^Jll&Q~ILmqZ`6eFJO8Ef3;{XVUG2q?Db zzAh?zkp1vW!ul0g>f=Aw2_X;qi1vL2**^kyMD7fB#kc<&B*o3lZ5r-7|*VK z=y02%u#RVJN!Ue2lE7ab$FuSQHX9z6?Vv~Xrx8yp5oDUFQu%5{P-@Ly4!{p+Glyx+ zwi~KTcajkeU~N3vo8`}@D?nN~4eMr+dFk$yD;2390BVtDeF`w5ygtl zo~`DYh5xctUP$<56uu&1#Qbo&{Z#bL!MWF*Y)pLm7{S#?#^3YlF^$H4y|+Da$&h|G zvTFZ+whT0ejb|x3Z{I6vz{K8w%p2WtujgQH)~_hiH6DXy#N`*BoXS+H#8uio6$-CM zA;#lD*@Pn+0{+RrKd-s$?0)sTi)BSaVSY zf{T2Vmf8mS4@Svx;9moy_ELd&JOM~K#2?pO6qQP#<1#WmcY&pCM0>Ou2M34J8Ry~! zmt#VbR8>d!;A*00807H*Vh_B`xVJUXTn4z;TeYKE%)W_SCnp zM5~(P-4LY+pm(KC{z`{{AVa?MaCP9|PjPwT&6-=&K^M&pL4KMOR$1H4dnD=jtJPcB z=W=#&C4zg%Z*i{=dGHxLI;XG@v#|`xv3CuoaC3e*v6*x1qw3P{5IOl}B5-pCAN~0= z5J(1jF6u~mgjJ^&hkwC?K}qb~ROD*Ei&!`#ux2CyOZ90%fo3;Lc{4D`oWkAPE~#42 zVfMyAxq|qWd+%6dpamd(D!x~JzDq0y=U8HAO95k-H-|}WOGqn(+s;f--J;LKx_P&U z86S29ztz>jfodT2RB6gp*RhAVe!FS_ESe6B-lxmp3T1`T*?N#{FVM$28KOn}OLgj2 z=A4InK0kdEWmU{5f7Zk9^Km`Xms;3;w;RX^!A~+g?naAUY^YX#INj|Lzv>cSs_dhd z($FBq>1yY1JBN)eo&xm@o2?##JOGz}P9@evo}jxs%SIKDg`jI>Zc!h|q)0?lqX2ve zKq{@J0ah!d^1+q_2dg&75=eu~*-J$Fo)VWq6{2Tb%MPqXY2Qn02#} z6U7>Epk4KWxuX7l5y%#Rb%sEYl2GeWE<3Uu2j0v2o!Z%#j>2x+e%VZC7gKE@eh-kO z`2fhSU}C-G~fJ`la=G*rOhUFsToyo~{G?|~WwkZld{oKYrliKh+eFLPhEs)zt|qQZnK zqgs#Dih-O9DlrWa+Om{nN{}kQzAg+~Kd<8cLxmRtoS>`&{p*NFzNxVs@9Ynw1VByb z)}&XU=+@-@YHxEmL$v7#ktXPjq|brXRz5D6@wCBtJ-e>1?&#KXJTJiq7|Of+?_s~Z z&E&V&-&_Zk3vk!spQme;4A>TfDca<=Ls1J9uNDxQLlrwhZ*{>K(8mf`Wy0?Rn~RHn zXog(gqlo^7XEUUxS|nES1?I+1v;$R-JOOURM7;|++ld95^Ivu!wyN(5H`9_eF=5as z`3|N`V3`fGA~3q=DWzk5@px#p+!+KEel!ytZ*TA1&au(akHjo*KQHi~CBMoP^L`Oa zc7*`3;@FA#WCbV7<}i#I2AXPu<2 zDsB%mZ?D!z!4%Le5g0#zCw{55X**>H1tj0UMO9lVy70G}jw)K=Vh&G3dDn2XpG8UYF ze!wr>reZa{sZ|YVA7i~upLNO8>V6`AF3+l4PmrYl{wY$zW7TgagY1t;;Ui%PxA|Z@ z2!j27hG;_||CrSwMZ~%HTcrZ)Y0eI#GNj8u$YQ;QEjujv-mLrXuY|K3_ePK>i+J zB1s|kiQdx9(BENybe)rK{Gv{n)s-AH{u}O{lv!!`p6sDTQU8UHPc-0I&`|w zmO^}eNXcFh`?i^q?0@p?F};~IT8ap2FTcGjV7BzRp`B(Ctx+s(Bb6OuPkm*Ps_5F| zPkeN@5@+A(!@(khqi~ob_d|%xJvT21<;A|%`eK^F+?u~-kMZ%k`!f*?IOzqJ95T0! zqMH&K!Ux)C)7ygv!Zhwhy0-tg*M7T=%4dsij!%&`qKnVrrKS?qZH^*VO=+=*=7ZpJ zpheX^T6T;6z5U=$4dkj#!>{cd%6ca1Pke2{>2+p(dBrjRyGZ3*S#|Zb97F!Q~N46O@Yba?GbB?WfKd>s3Q|rBy7V)P=b)5N_>l`Mta<?-_OQZuS8h+0cd1mWy+Oeb4h>^yYi3(I3hJ5F$}&B0o5JJ{o7E9& z^7z0KN6~2C>(^zp^zEMCJlZR4h;u#!T}oXP6`o#|(*_`%sn%Ksxeb);eT#k>oh4wK zzzBINYZH89Ds87>%Kv3ZQFk&=W?>D>_T%jJwks~e>f%5WB6zZnxa2abAhR}vg_Ugq zN&xgwHWehV^VzH3pAfObd?XIdIh^vAyS+}|UBPA=vJ^Z#nP{5t(GWy?-Co@_IDQTr zpt&v~3X_T-IOv}=N)@99O@?!_dFCR@ND&{9G&o&Lt=_*+FSE9UG@jfITQG2IqN*C? zSCmaO1Bd`aanRDrN)iwdYunY!_V(zz4d|LpiDjBrk^kVi(Iy-6ZN7)5TGW$D*@cDj z7CQuOi}+m}fz558ck{Gi$Eg9y3SCCQ%pa;76m$p<$#LgnZbXsTD|#E>^v6>?5d^NN z{`@HZVf?Mvtib0ymyW?C)OP4b|K-dk@Kh(|)9g+#SerS6e`&P(U+l~pwIP%Y5$0Jt z1n{&(5{s?LEcavu?-(EIBvr=^w&?sFYa?~9)+H4X6m+p zEbQg@FUdw1+#UcX?CP41nwK>-Sfyhz&Bi6wh^j2f@3}R#94R{Q3lTMzO}%=4#}D|J zO!hKF8Q5@YHUb~K#P*xOGFRoylusUDR(VbrTA5`Y9+vV7s1{m$so~M&!K!a$R{g`- zWkpD&?3M8&j9i{+RiQp%)7RCe`T7=kymz|ZJzWdO!g?No%d4a27mXD@Z^!;9U7Ljo z;;^#PbGA*av81e1`vtMTob%RMc=LC>3?-F^mw$)5t5N&8Ir#-p3Qku5zhrj~cG_LpW>J^;tv3NHnBXN+^Alr{Efw{eqbvk?LPnKVJ}w5>f&;fdNb_*_0(PN(#|N^- zTU^9!qxBiE!)y;2I>@B>QlG)PmX|f5=Yy#y|KSCI6%#qTd>vcrT83k*tT)ohzqZ^R zugs7k!MX>`nt+|n1+MUdq9605WG0f6{1U3p4PFQK07Ugi8!E1pm-mS;I1O-`Nb_zr z;(;@Wj_q0oMnFZh;Y}yubi;^*U^pUewpq{~I8i`{ARq$lq~!lasS3G+o_nqoX%4dA zhYVw`R6uC}M(x=vR*J~Zy;BA<9H*XCXetz14>&WRQP}W>19o(kA=gq{p4zr zK@JH57mQ>LT(eW50UfkctPcOdq;eRGsEEk^Wm3C-eWB^FK+aOQo;73r(M--fa z$@B$2l4a65wSF8`4@gfy=L7C^>)7e^_SIt)WM0=#wq?$r{@pLAci=%;RFo*&7xj6| z(|LijrOo5u@_K|P@&jMqz$)R(L=c34zLm^Lf5duD{dD*4E64uP8=?K z(6^q^RaUnkDa7m2LXeIRLy%Rc*-Xf?Q*ja=;s20yEW7lQs@X@-9p ztbK32zsAV}I9i5RZ9d%lH1iB~ja`$YxAYq|OTH$uv{*@22`iu~;#7`C%YA_A_{z$) zlfwv?NBLiSNBrM*8vV1g#E&J{InNPSJ&RBJAcL>KTmhNZtV3l0+6TG>i*r**$3(bt zMr|&X4!A~vf1P!T6^fANjh;$-Cxcv005f$zyr&*t0&uU4gdg)Pbq|1IbA5fSBFo{% zt*TB8zz^7vLiYeNGBFYKJLEyC2L~^LzDO|PWma2To9Pce!m#Ww<>kY#VcQsB$FW`Zd{m2GY8 z>>#&V2m}6%5J@@!_jXZ z*D6inUmyL4#vcjz|4!%s2lxNE#&UCeTRKa{uMfTqZCwODI}l?@13hMnM(-sBDe(aJ z2z=?l(?=&9g)epn0Tqp1T`Eg!b@c;i9?;L6dcv)u`rtq)0g{m}A8vy#o~WoOaNH$Y zB6)PsMlxx0;nXm1$7T(75{RsbE@-m; ze=VW>$36c?Zvl!5AyyFR8fh1v79$C#qllE8axFUpITum>YIaslZV89GEkO^Vsj%ZrOZp48U2^iYOa44}&)w`l3& zK#~z)qYq+y2#A+NE2Z4ml2EV{3}_OWOaq&Stbjro7$rmd;K;3A#DI|toXt2-8R!jc zEW@_m-QAUCPFRT|{V#j9fTe8y6LNnCvfvJH!WkRB7jfNG_V1TMYd@W$poc+aKorjI zxY5D*Qf=ofYeDzX4nO>kW}a5uSI7M6BWXgxI+;sJ-XYsq#E@NG0H=A1d9@-v1(*Z- zoK>%#{|PgFtvz;xq6pf1NIMydNr_99nvf5VZI#f170e~#g>&wVG?ax#85%Mr5gZ3p zd+8oztLNX}AT^>sSHl5aMgQZ65uiH@3`YEShYy_qNFX~YpWcESeBhBbOC$fcSIusb z5-ALVpa#2XNF#f_0HUya7$lkHhcuuOqiL2S_sal%&^kz#0IYcfU_k}>De!8PJ~lKa zS*KwXhC$sAPX@~+BH zkn$ckt{r&jzmkPDuix|ZouCcNHoPn@Ur}an2~^|4R9815Lj!o>ZU=25n@+F-dmE*z z&#fkZ0&OToKshR5jybE9+hx<=CG{ylYd83Cfshqks34fFLYKUj(v_#Wuz zzxAhmOroa7+R6GjPtS!nd|+#~j)6KH_wrO)Bq|*U8v|wa*;ck(oZ+7=GZlM+XsxiB znMn-U7P!yUVV#FS4L`b1o%d+PF$;YzK{AdJTn!yNGn+|(5gCZ0Up3B8X56+Vlr>0c z<&#C<;SFilV6kYF`p@p<4F?nWXB4WD{r4sz&yrMLw*SL+9lF}Y@o`DVIJ>(oqM{x* zr)_;vJG0SYVCNix)d!jF?{u_5wT7{@p_6#zc^|kYUOyjX`3zP$*PU{G8``7b+ciUi!Q=K>Waku*T9WnbfgCk5Dkj zy-!l;oQqzxx)?{hFc_mH)UhCckx_8r{KV?u`qtuIBzA=oD}B!9*UAruZ__9{~2FiA6Z^s{jJ_$y*<+) z|7?i&z5?3W0ymaHs;)9|ur@+Dt-Nm0X)6H6B`CtuRyUVU=f82pU$oY6+#x;vsA9gX zUMa}SKn)r*sL>-oy$nvB3Y?$6Zfs&Q`XWKhS)SYZhT;!WEx4|g&Lb4_3k!QVA~KCd zGffI(Q&PenJre)&<%@ND%%1iaF9Hxd8m#>_vPVKCKi(J4zWU*5M%HUBXV-nGoOecr z3>WP^23sF+;{(l$LQD#SjS2*ZPiU+%e^-pKVnZ6i2DlCS>d40G0=VrsstiqhN=m!m zzklD}-tOOVKEUd6sCf}}lcd!B`O4j6Xu(h!BbReTP#rpSsKmU;`V0pM5b~*vn8#~c zS@Gx!u?n(i?TXDDef{*dm?-`OOBf|xaKMxr?kX@+tf8UN=Wko_vG@CH)LhYRTdFMd zYR>jgyUmX+38JRQeZt+!nlG}Ocq9l(X}S4+_5?~qPK#%5w4w=g=0zO%7cYwzWv)Vy zpC#=1tOvb3p^(OG!9@W|L;NuD5;^T>%45<#4jvH@v`1~y#=Tz ztkq_sD~0Ru6)s~@c8Nh*ZAq>m7zVYCshl~p%mHuGOPR>md#Xlt#QP;C|% z?-Y<6{5j@ScfyV_voQh zK0xkJXpw4pv~#6xRxvfm>!T%W-ulkzsakgLcHYlZ$yyE)_M$>x%6a^lr~?rbUroC; z(u&UE7_J z_E-V4O6NUCSHG}wF@!XedyqlQS7bt8WD*e>$)I~rh889|1lN3`Cp~)Ksei0To5R{) zz6|a-KS~wCnuPhOoPAzj*a<=YskKRxwV<2eB-BQzVzcI^9zIC=maK)VOQXwc%(>iu z#O{#Mn~7&{A%>pvccFI6*+#SB6}oS+J20o=*1uA&O6+iTO4ZYB*-MVa=ajJe5?bHy zcnIkcx5No^847&A)J(iG^nI^~9;K}J5J|2;Dae9;&>{?#9gh2?6CUlcmaO3cK8>~m(A6qfq_CXEhT znl>!S4?x6^K@`q3`SkSkhBM<(djE|~oG$}IW)x-8S*EVRs(Ua^CvN!)=1Aa`NwcxD z=Pv#XSLc^Q8T;>*_W@^~*k_iMY(I16j5SvXC+GKK*@Ur-7`3Di1|s|Dghf!8iFc09 zJg#rW;U^~pCI2u+EcfQa%mi6%zV;WqtGLVw8;0nR>Rsg7-iNb)ZU#cto~lv@OO~#2|Bie*RfCY4<sHTANAAy)HPW8fT;h;DNy)v6daPCDGQ)4-W%SNDt z`%%O^cmJu?=~`&rNSkKQb+W9JJ}M=St2i~7yRX>sqLKV{Cs(zj;+=##gX^e|T%!1y z*E3YXxTn?~aeLc)dfFgVA+A`H-`QhLyi@4+n!de4o@2L;Mq0F(D555UPxID{(o$vw zQCPI(*L<9vm^*O-lr)g}U@5all!@%kn>RT8&Er+cTFg5S?v;WV*8WLKWvW`{cE`(? zy`u$L9335B4G!vB)Inha{qV{tEbkDE@ha-$Lr$`g83B%QS)4LVerb=1QcR_9ZCEfp zXQN|9R!)xK#2E#|?23vCsHmIMPoF+b1z#@}tIW6{VR z2dOb!WoV+Q`*Tw0ZpMWU)yIAn=Bd~JdoPO5R!i?@+~*BekyZX9Cunr`Y{bR%n;ckX zC6b-pMMHD*@X=9Q#m$X{_U`Tw?Oci`$;CZRN|dDgCo|o)^hU2K`K(BWhll59Y(&@8 zDB`4!KpHs0YuTk#mOT6@_o%V4Nc;gIQbp4HE3Iw3evuGCdU#eCh2tYJrNoZHZD4|vXYCi5*hO36*_sZ|CT`S zdYJFqjqX&1QsaAkZ>k`XNw5iP1$E~1n* zw6p|SOUHN^5H6s_nB^WOxcWM5xM|SIJ{iHjR|Tc-ll$5wuh zB}>{+2`Lh}26=PZHOh^TrZf)6WaQbvGa%bF> zx{kj7*3L31{_U2+neFGLRagg5Luq6i8tkG`l0euXs$K5{ZK_^nM<9H}iL*QqQ zK$9fyZ}X5JQ2Fd$nkWr5V;+a9CmgRuEV^=NqK@zo?1=;C>LQ7f0MrBG!iK#kcQfod zEbjD(Pz4fVcIbM+*Vvf7<~Q~U@rbv}{@~A40~wq`>OgWBC{n(X_EaNu4qKQM{RtAq zvCh=j2;@R5>)FaZ4l=4mCaejQ>c?+y-@!nwGW)34!CGc#n8Z<-=HN|**sOdyK9`~F z_eXI^>640m_k%EmF<+X%P9}kTymjNwH~ZjD>GL*sny;>3oIxjjERPgOd29Bmo75YP`Sfj_z)a3m5jnAZ9Zw zAkLhqwVwF{Mtt!?`~3OyZl0$}GCOwc$S)|!42WwqFq|fL>%Y1}Vr=V;kB_(R&o`W{ zyC%s6CJEol`o8_nN(pcuNY)klvrM>^^yw?7#?RF-Kb^u|R0ZXSKlX3U|6gOx6_R~num(C_lN@OEYi70`xMZdM%WRhl-_2+67GaqX|2xRJf} zetwFO)YrJHUk)A1OC!+<-KEXeh-%c4sO`7c?;y0tMDp8pm?2L;otkW8Lbm=^)5!B= zDLYB8AJ%9)3+S_EmDKeG6}ayl-lc#+m^0>>jnXHx};`vO_Ir2AK6hTZaPVCwDmPkiag&}7{hM9X#1 zo}oKUiJlC_AJiH6{NgfzKk z<`=|`fhvL24R~KuuQE40x9s2b16z+ho=vDYAASllva+nQs0h{Yr>nzVY0ybloI}UL zFUJdw!-o&%IJH^xWCn=jd3{PISCMZv0+uIPDmY4RJB359TLdqg4I@rsT-yhQJk6A3vt^ z(ph#taR3%UkX_MYWub*h2bro%k*!J6ho>?v-}v-tS`tIxs|N$1f+A_y&ea#Udw1MP zk(q2^XRoq2Fg5Ks_|Ku&FSG<%0C0@X;WTfoxfuZmapC{`Lipgsu3V+3BbL=3HZSiT z;*xRLjy9RlzgI3u5M;}6cCn0snb^B``&vidodZV9jA={!kZX#?OZ03e*fs(v?a*>J0`wMgA zZUqkQTo%8TCSKbhegT0k$lj7%deFnExj2-eoy+e*_g(kAbPC@o#n=;qD>X!)Vx0DI z^*}SLXj-P=tLws_?oD|RtpdD(hnzGamPVbivP`{gC&2<*F3b8T7JJq$%T;hVyqqB3 zV&Pi>rA1&v23|OWi3jXAhz4XU6HgEvhI=N*t_CC7In}LBRJ!v8+i>|T_G+$-@owIR z>x4DPc<;(C=;&6rDBQvOnMkHrl0ZgA{!Y+N_?wYmo>R6YBV(N)o)JKFUP|nlCOdYQ zzCH2FGsk@Oyp;8GG7$3oRE{5~5)~CS07A8#)!Eghe)8nDO;>E-pPqxax0D$e6%ENh z@$vQbz5nU>Q?094_d^X}^;i=r4PEleGJ5h%qk>VP0ClI{uil9LfcMWl%_FgWucJ!(eCUQrmBsdCT+0kGNDrR$Yp`Gp(EQgv%z#el#7e;WhG zGHi9-tF81@dg1ioVrEHXk zpdSnVx#RnLZ3Ix&>ova({%aNu~m(gZgL?+N7X;E8*oDggTuKEK$QX}vj2_Bef ziIAvkXY#BNiajecedIL{D4UIhMFd?ii1|_uulNwuSA6QY^1g-gkZ9oJF+ydFg3?7< z9}`1@%ndLY0l=rYu8!weXXS4+CKR9+0V=Dt;yqZvdyOWR$cfV>PVby@| zMr392k#v=RPwUV6{#qK$(&~x*h2%qx0?%V^ zI12BJ1<+Y@rOOz+KrD10$i+&?UjK4}pmO3!H-l(;!%}uad2_YLtj^~M9X-9v*ZzG( zf;ratYVeu+ObpTpaAO!=JTfZ{*sMOrN0y-dW@5p}rr-ZHh5Nqmf~0#oKVkNb=Smdc z&yUkO=dy2tJ6wr}iAZNP>))#bCf7xjUn5GdE=-Os4V(+r$i4+QSv505uVo+QY{4Qk zh!QKO<&`&nZ29-vr#oADyfW@ze&hL>gPrC~x9%kni8Skdf0Ml$)_SPw*}u#TVi<6l zNStA`cH)-L*r3wX_cSdWXj-a4uqZ1lvwrgagZQW17`rF$V^UIfxLOoc=3w%&M)P}Z zDSKhh&}}nuq(VkyFi+E5O}kRFnAFs5Ag+{}=~C^b%4|BvrX4r({hv^V9V}0RlKCIp zySEb^(2urwltR#rq7<^A;6?-b$mDX;nf1lPct?*+h!l=dF;eE<;{1144iA?{Q6eP) zAGyK|&=H!JetYi=H{eT;Z^GJ>$d_>0YL{&T6>L6+g@9{-t)Sz1_cw((RShnjKnF=V^v%E*^TX$J%W97Y7L*cZs+0uR*O(|N z_9ZO%e`(W=TNu^r-^CDe*h+o?z%=ZJSe5$-pHVzPVlFb_gy3Jihm*fqjc!HC-YBS5 zS1S?|$X*A*qY_v-$Ym)jo`96o-wmLC#2Hl5Qw7H0K}ktDH)g$Y%YOO~2HfZ$s5SS|=uBNIZ??Ep6C$Npk_XAKmSs ze52*Cif?N%40Nj=h%~-D`K$Ztcdc+VbA(CLwUt|@H)El&umg_ZbA2MDezf;gcf_x$ zjw8`}{ij4M$%I8wn*lJ0&$zg3;17b%14VBZWVIOW+zkQhsiO(~coau)-1)4@)3_Q* zxWK^o>}hr3n`{C#|6Vo8gBGhUPu0|qKpFrU`LnXa&J&0cHsHU58wC)1zR+Uv1f_w`29VJYvwtmtHOViKHf$SH*pPxh{E-TB)&d!d~amcbL zzIDVo14Rxn=a`Q3Qdz26CmlKsL@d=8^_=f^1R;m*0&1(ZdU4K;6VGVD=M896ZDe+$ zpHNO$4Xyhhz)Feou*;}AW-{FJZu!87;CewKQ6fTw5wz0!a>59w>=@I=~=C7Z6FcV1Y9+z30)rz=Lh$hbJ*rrr=Vpn)O(T3q;q*tNmv_oQ8pkO>G11~c z5}%q@rqn4G^cN$}a+Eu?>8@U^9y-wO)&oND_;qGsCZvL-PIpV2$nQm1Zvrhu`PuCL zm7ZJ9nGDJ#)U{ihBms(|I&ZFJ%bXqTeV|F&(trBMV=>$BF_}4-%%KV?=3ai_V)T&$ z3>VCCuCVgOp0JkWf~MCc6~PAFFqi)}bJBUOSs}SOi9NGdq*F4CMZ-F0+~hGi93A1v zHKHvtxiRFb@a!oppd_&*SPz=q+}!4+uP@^h6GvezhPW?l zGWq##(!e_EAyF#1*u!I1^!9tP-V2)w^HO|8h_0lvUYp)MUS7h+!I9;+`3HEQCX&Zl zeB6pMQ3^OD=6_bkQ{j)(sMr(qf~wcW#l?e63R^Iwy%fDS90C~#O<%rptRU)Cb^hr- z+CbJ*fIZ+XWFP`13WEg@8JI`S9vrsDJtJ(Skou%9z0ToM8TplKKw@;$%f0)#wH-u9 zh~UslX=`i$fU%tofZ`#`+IVZ+4zF*eZ87QTuppzzHR^~?ab^1VYsBbllJ7Vkn1N!D zo@fqHM5xd+lXl{_pg3v5go2Qqp+nz=DW`UBoF9$Jx!UQe0u&uE z38ia_@N3zTc^Sszit9?$N2P>XwaGNs`ozj8 zQ>&eJB$#ijFdy2xH1b(J_#ky;TF~rFhX84g2-4=}JKnPLT>ZTA9%jwe8n zEG{E*+%jNrpAj*L-6`odW#F5MCw@$Z){O2ZbaL2V_4)yy<~WV(1P1&BS*kKU>Uef{ zcv~_bjFIcn!5lK;?B;9RQvVBQux+xoyzTF&1TpvVXDzskYq+`|-1G@jN7W9`4&Q*J zps!yY(PoY&97OoWyzAY+{(=)zN?d=51gTHwoN6_*m&CTyWMGg5B$}Z~P#ljz0V84y zDmjEbOs)faZx5bzYRK=+mLhd=F|1GP_bLl)xgJb`00CSVk1!HV2%lQmwQCm!Z-|?# zJgrMs$We@;0`?2$GxZUzbIVPR74z$dS(q6^VKXb7pNc`(O2S1!XDKl@x~zzgz)`?H zkP>c03bKFFVnN^ArXkL;@EGIr$eoAiOp7fV5I15I6GP5ARqf54`wEI2T%>Lj*$GIC z*N=v+u?Y!ONI9u`TZ>HYmxO{^VO?s*2S!*@XINcQ^&hQ|sOBy^IfZrK`#vZJCJXYg|G-$v%u#g?_x*8g%%tgMe8~X?2mJmV`FA&ZkZt_1dX!|_Xo6V){ zt4JWqfE0gL_bb@lh7~HYDL}z~^oRk5pluy@gIXmRxjyUT~bWqpe3lscW?NTkTD5>dcc{}<#^cL6*{R0Ep zWo0a2=B$joV1Kup5s2O&sZwBF$9#Q{)`uGunGmxg%vb)y5g8F5@hrcLzG>9qwuj3! zmQPgXel*ryL!TuQ&!boK@?Q(45Y~HB=~dFZtbBLqp zxz@3J#DJl%m1@tktt|WbizapQlNXhU^{x$?Qs>z(S#<8f)mMnh0dH(oTorg+5YoA1 zZ73u}i}rhr)@IG9Oy4K)YSNw}st|z>@*)z-ydY9cjWm_?ziHXHiEh)mr*?UC^Z4wI zOZ#{Bj;aI)HL6VFx{gx&b!_&WDn!?x)cL}?xG<3B*js<{_S&Vl96IT8)f)x=2F02d zbB__bU>GpWD$0!E(MH*EmQEIoOA6m;e+y)#p#)BP@*6D`8Tx(pFSMsEEu-+zq$|sN zWbpI>dvu2?X$H`6X+^Cf*9UBL0~kV)F!wtFPbaX4TtH|)@hlu*qQv=3?(FOYX^}Rn z3d{h4A|O>gU645i79AROEU4IO-Ue z&}Zgom4SRvd2iB&9YL#5R%T?-g^oOsk5@eNh`vMD|7s!!JF-{Oe_Hcb&R?&3Fx5Er z!nKo0>+=I!Ehb6XUpgcfjW+QdpEBD!byHe;s^6~#HFxceM9<~;Y@j!JFN;=sWXhs> zWo&Y=#byD=lbHKacP11wrGyVox}WX}E2fg)IF5oYUN5jKKONdG5jH$C4FA&Q_7Mm0 z?{~0;@tOQKoEdyJjgs&G^8;uz#{E3r<=mfzX&YvL5PgNca2-~LHAFs|VPdTJmp)Ox z@~GB%?4&FSiZm1h~K`-SO$y=T~dQuEzX`56PW;1i^bq)qhn5(+_*z9 zA0%Xmg~8h6SY^#0>y#=(13n&1(5xt1AOo>Jd>@JC_6yi-01W{2#hS1+sLcX{T3Bu% zb#?#j4f; F{|8^z-NXO@ literal 0 HcmV?d00001 diff --git a/frontend/src/lib/components/graph/svelvet/edges/controllers/anchorCbDev.ts b/frontend/src/lib/components/graph/svelvet/edges/controllers/anchorCbDev.ts new file mode 100644 index 0000000000..82c531e8f2 --- /dev/null +++ b/frontend/src/lib/components/graph/svelvet/edges/controllers/anchorCbDev.ts @@ -0,0 +1,170 @@ +import { rightCb, leftCb, topCb, bottomCb } from './anchorCbUser'; // these are callbacks used to calculate anchor position relative to node +import type { AnchorCbType } from '../../edges/types/types'; +import type { StoreType } from '../../store/types/types'; + +import { getPotentialAnchorById } from '../../interactiveNodes/controllers/util'; + +import { getAnchors } from './util'; +import { getNodeById } from '../../nodes/controllers/util'; +export function fixedCbCreator( + store: StoreType, + edgeId: string, + anchorId: string, + userNodeId: string, + positionCb: Function // positionCb should be a function that takes 4 arguments (x,y,width,height) and returns a 3-array [x,y,angle] that represents the x,y position of the anchor as well as it's angle with respect to it's node. +) { + const rn = fixedCb; + rn.type = 'fixed'; + return rn; + + function fixedCb() { + // get the two anchors + const anchors = getAnchors(store, { edgeId: edgeId }); + if (anchors.length !== 2) + throw `there should be two anchors per edge, have: ${anchors.length}`; + let [anchorSelf, anchorOther] = anchors; + if (anchorSelf.id !== anchorId) + [anchorSelf, anchorOther] = [anchorOther, anchorSelf]; + + const node = getNodeById(store, userNodeId); + const { positionX, positionY, width, height } = node; + const [x, y, angle] = positionCb(positionX, positionY, width, height); + anchorSelf.positionX = x; + anchorSelf.positionY = y; + anchorSelf.angle = angle; + // update the other anchor if it is a dynamic anchor + // Note dyanamic anchor callbacks have a check that prevents an infinite loop + if (anchorOther.callback.type === 'dynamic') anchorOther.callback(); + } +} + +export function dynamicCbCreator( + store: StoreType, + edgeId: string, + anchorId: string +) { + const rn = dynamicCb; + rn.type = 'dynamic'; + return rn; + + function dynamicCb() { + // get the two anchors + const anchors = getAnchors(store, { edgeId: edgeId }); + if (anchors.length !== 2) + throw `there should be two anchors per edge, have: ${anchors.length}`; + + let [anchorSelf, anchorOther] = anchors; + if (anchorSelf.id !== anchorId) + [anchorSelf, anchorOther] = [anchorOther, anchorSelf]; + // get the two nodes + const nodeSelf = getNodeById(store, anchorSelf.nodeId); + const nodeOther = getNodeById(store, anchorOther.nodeId); + // get the midpoints + const [xSelf, ySelf, xOther, yOther] = [ + nodeSelf.positionX + nodeSelf.width / 2, + nodeSelf.positionY + nodeSelf.height / 2, + nodeOther.positionX + nodeOther.width / 2, + nodeOther.positionY + nodeOther.height / 2, + ]; + + // record angle for later. We use this so we don't have an infinite loop + let prevAngle = anchorSelf.angle; + + // calculate the slope + const slope = (ySelf - yOther) / (xSelf - xOther); + // slope<1 means -45 to 45 degrees so left/right anchors + if (Math.abs(slope) < 1) { + // self node is on the left, other node is on the right + if (nodeSelf.positionX < nodeOther.positionX) { + const [selfX, selfY] = rightCb( + nodeSelf.positionX, + nodeSelf.positionY, + nodeSelf.width, + nodeSelf.height + ); + const [otherX, otherY] = leftCb( + nodeOther.positionX, + nodeOther.positionY, + nodeOther.width, + nodeOther.height + ); + anchorSelf.setPosition(selfX, selfY); + anchorSelf.angle = 0; // if the self node is on the left, the anchor should have orientation of 0 degrees on the unit circle + } else { + // in this case, the self node is on the right and the other node is on the left + const [selfX, selfY] = leftCb( + nodeSelf.positionX, + nodeSelf.positionY, + nodeSelf.width, + nodeSelf.height + ); + const [otherX, otherY] = rightCb( + nodeOther.positionX, + nodeOther.positionY, + nodeOther.width, + nodeOther.height + ); + anchorSelf.setPosition(selfX, selfY); + anchorSelf.angle = 180; + } + } else { + if (nodeSelf.positionY < nodeOther.positionY) { + // here the self node is above the other node + const [selfX, selfY] = bottomCb( + nodeSelf.positionX, + nodeSelf.positionY, + nodeSelf.width, + nodeSelf.height + ); + const [otherX, otherY] = topCb( + nodeOther.positionX, + nodeOther.positionY, + nodeOther.width, + nodeOther.height + ); + anchorSelf.setPosition(selfX, selfY); + anchorSelf.angle = 270; + } else { + const [selfX, selfY] = topCb( + nodeSelf.positionX, + nodeSelf.positionY, + nodeSelf.width, + nodeSelf.height + ); + const [otherX, otherY] = bottomCb( + nodeOther.positionX, + nodeOther.positionY, + nodeOther.width, + nodeOther.height + ); + anchorSelf.setPosition(selfX, selfY); + anchorSelf.angle = 90; + } + } + + // if the anchor changed position, then do operation for other anchor + // otherwise, don't do anything. This check is so we don't have an infinite loop + if (prevAngle !== anchorSelf.angle) anchorOther.callback(); + } +} + +export function potentialAnchorCbCreator( + store: StoreType, + potentialAnchorId: string, + userNodeId: string, + positionCb: Function // positionCb should be a function that takes 4 arguments (x,y,width,height) and returns a 3-array [x,y,angle] that represents the x,y position of the anchor as well as it's angle with respect to it's node. +) { + return fixedCb; + + function fixedCb() { + // get the two anchors + const potentialAnchor = getPotentialAnchorById(store, potentialAnchorId); + const node = getNodeById(store, userNodeId); + const { positionX, positionY, width, height } = node; + const [x, y, angle] = positionCb(positionX, positionY, width, height); + potentialAnchor.positionX = x; + potentialAnchor.positionY = y; + potentialAnchor.angle = angle; + // potential anchors don't have partners so we can end here + } +} diff --git a/frontend/src/lib/components/graph/svelvet/edges/controllers/anchorCbUser.ts b/frontend/src/lib/components/graph/svelvet/edges/controllers/anchorCbUser.ts new file mode 100644 index 0000000000..69e4d86bcd --- /dev/null +++ b/frontend/src/lib/components/graph/svelvet/edges/controllers/anchorCbUser.ts @@ -0,0 +1,98 @@ +/** + * These are callbacks used to define anchor positions relative to the node they are attached to. + * These may be provided to developers as examples of how to write their own custom callbacks for adjustable anchors + * It calculates the position of an anchor (x,y) coordinates given a node parameterized by (x,y,width, height) + */ + +/** + * @function rightCb - This is a callback function to define the anchor position on the node to be on the right side of the node. + * @param xNode - positionX of the attached node + * @param yNode - positionY of the attached node + * @param widthNode - width of the attached node + * @param heightNode - height of the attached node + * @returns [xAnchor, yAnchor, 0] + * xAnchor - positionX for the anchor + * yAnchor - positionY for the anchor + * 0 - this is angle of the anchor with respect to the node. The right anchor should fall at 0 degrees on the unit circle. + * @export rightCb + */ +export const rightCb = ( + xNode: number, + yNode: number, + widthNode: number, + heightNode: number +) => { + const xAnchor = xNode + widthNode; + const yAnchor = yNode + heightNode / 2; + return [xAnchor, yAnchor, 0]; +}; + +/** + * @function leftCb - This is a callback function to define the anchor position on the node to be on the left side of the node. + * @param xNode - positionX of the attached node + * @param yNode - positionY of the attached node + * @param widthNode - width of the attached node + * @param heightNode - height of the attached node + * @returns [xAnchor, yAnchor, 180] + * xAnchor - positionX for the anchor + * yAnchor - positionY for the anchor + * 180 - this is angle of the anchor with respect to the node. The left anchor should fall at 180 degrees on the unit circle. + * @export leftCb + */ +export const leftCb = ( + xNode: number, + yNode: number, + widthNode: number, + heightNode: number +) => { + const xAnchor = xNode; + const yAnchor = yNode + heightNode / 2; + return [xAnchor, yAnchor, 180]; +}; + +/** + * @function topCb - This is a callback function to define the anchor position on the node to be on the top of the node. + * @param xNode - positionX of the attached node + * @param yNode - positionY of the attached node + * @param widthNode - width of the attached node + * @param heightNode - height of the attached node + * @returns [xAnchor, yAnchor, 90] + * xAnchor - positionX for the anchor + * yAnchor - positionY for the anchor + * 90 - this is angle of the anchor with respect to the node. The top anchor should fall at 90 degrees on the unit circle. + * @export topCb + */ + +export const topCb = ( + xNode: number, + yNode: number, + widthNode: number, + heightNode: number +) => { + const xAnchor = xNode + widthNode / 2; + const yAnchor = yNode; + return [xAnchor, yAnchor, 90]; +}; + +/** + * @function bottomCb - This is a callback function to define the anchor position on the node to be on the bottom of the node. + * @param xNode - positionX of the attached node + * @param yNode - positionY of the attached node + * @param widthNode - width of the attached node + * @param heightNode - height of the attached node + * @returns - [xAnchor, yAnchor, 90] + * xAnchor - positionX for the anchor + * yAnchor - positionY for the anchor + * 270 - this is angle of the anchor with respect to the node. The bottom anchor should fall at 270 degrees on the unit circle. + * @export bottomCb + */ +export const bottomCb = ( + xNode: number, + yNode: number, + widthNode: number, + heightNode: number +) => { + const xAnchor = xNode + widthNode / 2; + const yAnchor = yNode + heightNode; + return [xAnchor, yAnchor, 270]; +}; diff --git a/frontend/src/lib/components/graph/svelvet/edges/controllers/util.ts b/frontend/src/lib/components/graph/svelvet/edges/controllers/util.ts new file mode 100644 index 0000000000..4802e155a1 --- /dev/null +++ b/frontend/src/lib/components/graph/svelvet/edges/controllers/util.ts @@ -0,0 +1,82 @@ +import type { StoreType } from '../../store/types/types'; +import { writable, derived, get, readable } from 'svelte/store'; +import type { AnchorType } from '../types/types'; +import { getNodeById } from '../../nodes/controllers/util'; + +/** + * Finds all Anchors that matches the conditions specified in the filter parameter from a Svelvet store and returns these Anchors in an array. + * + * @param store The Svelvet store containing the state of a Svelvet component + * @param filter An object to specify conditions. Example: if filter = \{ sourceOrTarget: 'source', positionX: 35 \} then we will return all anchors with sourceOrTarget = source AND poxitionX = 35 + * @returns An array of Anchors that matches the conditions specified in the filter parameter + */ +export function getAnchors(store: StoreType, filter?: { [key: string]: any }) { + let anchors = Object.values(get(store.anchorsStore)); + // filter the array of anchors for elements that match filter + // Example: if filter = {sourceOrTarget: 'source', positionX: 35} then we will + //return all anchors with sourceOrTarget = source AND poxitionX = 35 + if (filter !== undefined) { + anchors = anchors.filter((anchor) => { + for (let filterKey in filter) { + const filterValue = filter[filterKey]; + if (anchor[filterKey as keyof AnchorType] !== filterValue) return false; + } + return true; + }); + } + // return list of anchors + return anchors; +} + +/** + * Gets one anchor (source anchor or target anchor) from a given edge + * + * @param store The Svelvet store containing the state of the Svelvet component + * @param edgeId The id of a given edge + * @param sourceOrTarget A string of 'source' or 'target' to specify which anchor the function should return + * @returns The source or target Anchor object of a given edge + */ +export function getAnchorFromEdge( + store: StoreType, + edgeId: string, + sourceOrTarget: 'source' | 'target' +): AnchorType { + const edge = getEdgeById(store, edgeId); + const anchors = getAnchors(store, { edgeId: edgeId }); + if (anchors.length !== 2) + throw `there should be two anchors for a given edge, there are ${anchors.length}`; + // there should be one source anchor and one target anchor. Return the source anchor + const anchor = anchors.filter( + (anchor) => anchor.sourceOrTarget === sourceOrTarget + ); + if (anchor.length !== 1) + throw `there should only be one source/target anchor`; + return anchor[0]; +} + +/** + * getEdgeById will look for the targeted Edge that has the same id provided in the Svelvet component store. + * + * @param store The Svelvet store containing the state of a Svelvet component + * @param id The id of the targeted Node + * @returns The targeted Edge object in store.edgesStore + */ +export function getEdgeById(store: StoreType, id: string) { + const edgesStore = get(store.edgesStore); + const edge = edgesStore[id]; + if (edge === undefined) throw 'edge not found'; + return edge; +} + +/** + * getAnchorById will look for the targeted Anchor that has the same id in the Svelvet component store. + * + * @param store The Svelvet store containing the state of a Svelvet component + * @param id The id of the targeted Anchor + * @returns The target Anchor object in store.anchorsStore + */ +export function getAnchorById(store: StoreType, id: string) { + const anchorsStore = get(store.anchorsStore); + const anchor = anchorsStore[id]; + return anchor; +} diff --git a/frontend/src/lib/components/graph/svelvet/edges/models/Anchor.ts b/frontend/src/lib/components/graph/svelvet/edges/models/Anchor.ts new file mode 100644 index 0000000000..daa9b25b51 --- /dev/null +++ b/frontend/src/lib/components/graph/svelvet/edges/models/Anchor.ts @@ -0,0 +1,119 @@ +/** + * This is where we create, update the Anchor store. + */ + +import type { AnchorCbType, AnchorType } from '../../edges/types/types'; +import { stores } from '../../store/models/store'; +import { getAnchors } from '../controllers/util'; + +/** Class representing an Anchor that implements Anchortype. + * @param {string} id The id of the Anchor + * @param {string} nodeId The id of the Node which the instantiated Anchor will be attached to + * @param {string} edgeId The id of the Edge which connects to the instantiated Anchor + * @param {'source' | 'target'} sourceOrTarget Specify the Anchor is a source or target + * @param {number} positionX The 'X' coordinate of the Anchor + * @param {number} positionY The 'Y' coordinate of the Anchor + * @param {function} callback The callback function that will determine the position of this Anchor + * @param {string} canvasId The canvasId of the Svelvet component that will hold this Anchor + * @param { number } angle This is the orientation of the anchor and is used to make sure bezier/step curves are rendered perpendicular to the node. Angles are defined along the unit circle. EX: 0 = right side of node, 180 = left side of node. + */ +export class Anchor implements AnchorType { + constructor( + public id: string, + public nodeId: string, + public edgeId: string, + public sourceOrTarget: 'source' | 'target', + public positionX: number, + public positionY: number, + public callback: AnchorCbType, + public canvasId: string, + public angle: 0 | 90 | 180 | 270 + ) {} + + getOtherAnchorId() { + const store = stores[this.canvasId]; + const anchors = getAnchors(store, { edgeId: this.edgeId }); + if (anchors.length !== 2) + throw 'something is wrong, every anchor should have exactly one other associated anchor'; + const anchor = anchors.filter((anchor) => anchor.id !== this.id)[0]; + return anchor.id; + } + + /** + * setPositionFromNode will invoke the user-defined callback to calculate the position of the Anchor, set the position of the Anchor in the anchorsStore, and also update the Edge position accordingly. + */ + setPositionFromNode() { + // calculate the new position of the anchor using user-defined callback + this.callback(); + const { edgesStore } = stores[this.canvasId]; + // update edges + edgesStore.update((edges) => { + const edge = edges[this.edgeId]; + if (this.sourceOrTarget === 'source') { + edge.sourceX = this.positionX; + edge.sourceY = this.positionY; + } else { + edge.targetX = this.positionX; + edge.targetY = this.positionY; + } + return { ...edges }; + }); + } + /** + * updateEdges will update the edgesStore based on Anchor's change. + */ + updateEdges() { + const { edgesStore } = stores[this.canvasId]; + /** update edges by deconstructing edges store and setting its new vlue to stores[this.canvasID] */ + + edgesStore.update((edges) => { + const edge = edges[this.edgeId]; + // this means that no edge was found, just return without doing anything + + if (edge === undefined) { + return { ...edges }; + } + if (this.sourceOrTarget === 'source') { + edge.sourceX = this.positionX; + edge.sourceY = this.positionY; + } else { + edge.targetX = this.positionX; + edge.targetY = this.positionY; + } + return { ...edges }; + }); + } + + /** + * setPosition will update the positionX and positionY of the Anchor and also cascade changes to related Edge. + * @param x The X coordinate of the new position for the Anchor + * @param y The Y coordinate of the new position for the Anchor + */ + setPosition(x: number, y: number) { + this.positionX = x; + this.positionY = y; + this.updateEdges(); + } + + /** + * Anchor.setPositionFromMovement works similarly to Anchor.setPosition. But setPosition is more powerful and we recommend using setPosition whenever possible and in the future, setPositionFromMovement can be removed. + * @param movementX The mouse movement value on the X-axis + * @param movementY The mouse movement value on the Y-axis + */ + setPositionFromMovement(movementX: number, movementY: number) { + this.positionX += movementX; + this.positionY += movementY; + const { edgesStore } = stores[this.canvasId]; + edgesStore.update((edges) => { + const edge = edges[this.edgeId]; + if (this.sourceOrTarget === 'source') { + edge.sourceX += movementX; + edge.sourceY += movementY; + } else { + edge.targetX += movementX; + edge.targetY += movementY; + } + return { ...edges }; + }); + } +} diff --git a/frontend/src/lib/components/graph/svelvet/edges/models/Edge.ts b/frontend/src/lib/components/graph/svelvet/edges/models/Edge.ts new file mode 100644 index 0000000000..de1fdef8b7 --- /dev/null +++ b/frontend/src/lib/components/graph/svelvet/edges/models/Edge.ts @@ -0,0 +1,97 @@ +import { findStore } from '../../store/controllers/storeApi'; +import type { UserEdgeType } from '../../types/types'; +import type { EdgeType } from '../../store/types/types'; + +import { stores } from '../../store/models/store'; +import { getAnchors, getAnchorFromEdge } from '../../edges/controllers/util'; +/** + * Class Edge that implements EdgeType. + * @param id The id of the Edge + * @param sourceX The X coordinate of the source Anchor + * @param sourceY The Y coordinate of the source Anchor + * @param targetX The X coordinate of the target Anchor + * @param targetY The Y coordinate of the target Anchor + * @param canvasId The canvasId of the Svelvet component that holds the instantiated Edge + * @param label The label of the Edge + * @param type The type of the Edge (options: 'straight', 'smoothstep', 'step', or 'bezier'). If user doesn't specify, the type will default to 'bezier'. + * @param labelBgColor The background color of the Edge label + * @param labelTextColor The text color of the Edge label + * @param edgeColor The color of the Edge + * @param animate Boolean value to specify whether the Edge should be animated + * @param noHandle Boolean value but looks like it is already depracated and can be removed without damage + * @param arraw Boolean value to specify whether the Edge displays an arrow near its target Anchor + */ +export class Edge implements EdgeType { + constructor( + public id: string, + public sourceX: number, + public sourceY: number, + public targetX: number, + public targetY: number, + public canvasId: string, + public label: string, + public type: 'straight' | 'smoothstep' | 'step' | 'bezier', + public labelBgColor: string, + public labelTextColor: string, + public edgeColor: string, + public animate: boolean, + public noHandle: boolean, + public arrow: boolean, + public clickCallback: Function, + public className: string + ) {} + + /** + * delete is going to delete the Edge and also delete associated Anchors + */ + delete() { + const store = stores[this.canvasId]; + const { nodesStore, anchorsStore, edgesStore } = store; + const sourceAnchor = getAnchorFromEdge(store, this.id, 'source'); // this is a bit wasteful + const targetAnchor = getAnchorFromEdge(store, this.id, 'target'); + anchorsStore.update((anchors) => { + for (const anchorId in anchors) { + if (anchorId === sourceAnchor.id || anchorId == targetAnchor.id) + delete anchors[anchorId]; + } + return { ...anchors }; + }); + edgesStore.update((edges) => { + delete edges[this.id]; + return { ...edges }; + }); + } + + /** + * setExportableData will construct an object that holds all the edge data that can be exported. This is needed for the Exporting Diagram feature. + * @returns The object of exportable edge data. The format of the object should be as close as what user initially passes in to Svelvet. + */ + setExportableData() { + const exportableData: UserEdgeType = { + id: this.id, + label: this.label, + type: this.type, + labelBgColor: this.labelBgColor, + labelTextColor: this.labelTextColor, + edgeColor: this.edgeColor, + animate: this.animate, + noHandle: this.noHandle, + arrow: this.arrow, + source: 'dummy', // these will be set later + target: 'dummy', // these will be set later + }; + + // set source, target on exportableData + const store = findStore(this.canvasId); + const anchors = getAnchors(store, { edgeId: this.id }); + if (anchors.length !== 2) throw 'there should be two anchors per edge'; + for (const anchor of anchors) { + if (anchor.sourceOrTarget === 'target') + exportableData.target = anchor.nodeId; + if (anchor.sourceOrTarget === 'source') + exportableData.source = anchor.nodeId; + } + + return exportableData; + } +} diff --git a/frontend/src/lib/components/graph/svelvet/edges/types/types.ts b/frontend/src/lib/components/graph/svelvet/edges/types/types.ts new file mode 100644 index 0000000000..57917fc098 --- /dev/null +++ b/frontend/src/lib/components/graph/svelvet/edges/types/types.ts @@ -0,0 +1,19 @@ +export type AnchorCbType = { + (): void; + type: 'dynamic' | 'fixed'; +}; + +export interface AnchorType { + id: string; // note that the user never specifies an anchor and they are generated dynamically. id will be a random string. + nodeId: string; + edgeId: string; + sourceOrTarget: 'source' | 'target'; + positionX: number; + positionY: number; + callback: AnchorCbType; // callback is used to calculate positionX, positionY based on parent node's data, and set the anchor position // TODO: rename to something better + angle: number; + setPositionFromNode: Function; + setPosition: Function; + updateEdges: Function; + getOtherAnchorId: Function; +} diff --git a/frontend/src/lib/components/graph/svelvet/edges/views/Edges/BaseEdge.svelte b/frontend/src/lib/components/graph/svelvet/edges/views/Edges/BaseEdge.svelte new file mode 100644 index 0000000000..372a63d275 --- /dev/null +++ b/frontend/src/lib/components/graph/svelvet/edges/views/Edges/BaseEdge.svelte @@ -0,0 +1,109 @@ + + + + + + + + + +{#if highlightEdgesOption} + {}} + /> +{/if} + +{#if arrow} + +{:else} + +{/if} + +{#if edgeTextProps.label} + +{/if} + + diff --git a/frontend/src/lib/components/graph/svelvet/edges/views/Edges/EdgeAnchor.svelte b/frontend/src/lib/components/graph/svelvet/edges/views/Edges/EdgeAnchor.svelte new file mode 100644 index 0000000000..4e64c945fc --- /dev/null +++ b/frontend/src/lib/components/graph/svelvet/edges/views/Edges/EdgeAnchor.svelte @@ -0,0 +1,14 @@ + + + + + + + diff --git a/frontend/src/lib/components/graph/svelvet/edges/views/Edges/EdgeText.svelte b/frontend/src/lib/components/graph/svelvet/edges/views/Edges/EdgeText.svelte new file mode 100644 index 0000000000..1630bf4df8 --- /dev/null +++ b/frontend/src/lib/components/graph/svelvet/edges/views/Edges/EdgeText.svelte @@ -0,0 +1,49 @@ + + +{#if typeof label === 'undefined' || !label} + {null} +{:else} + + + + {label} + + +{/if} diff --git a/frontend/src/lib/components/graph/svelvet/edges/views/Edges/SimpleBezierEdge.svelte b/frontend/src/lib/components/graph/svelvet/edges/views/Edges/SimpleBezierEdge.svelte new file mode 100644 index 0000000000..6293bf31f9 --- /dev/null +++ b/frontend/src/lib/components/graph/svelvet/edges/views/Edges/SimpleBezierEdge.svelte @@ -0,0 +1,159 @@ + + + diff --git a/frontend/src/lib/components/graph/svelvet/edges/views/Edges/SmoothStepEdge.svelte b/frontend/src/lib/components/graph/svelvet/edges/views/Edges/SmoothStepEdge.svelte new file mode 100644 index 0000000000..f9bd3f6fb6 --- /dev/null +++ b/frontend/src/lib/components/graph/svelvet/edges/views/Edges/SmoothStepEdge.svelte @@ -0,0 +1,176 @@ + + + diff --git a/frontend/src/lib/components/graph/svelvet/edges/views/Edges/StepEdge.svelte b/frontend/src/lib/components/graph/svelvet/edges/views/Edges/StepEdge.svelte new file mode 100644 index 0000000000..0e192fcd5f --- /dev/null +++ b/frontend/src/lib/components/graph/svelvet/edges/views/Edges/StepEdge.svelte @@ -0,0 +1,8 @@ + + + + diff --git a/frontend/src/lib/components/graph/svelvet/edges/views/Edges/types.ts b/frontend/src/lib/components/graph/svelvet/edges/views/Edges/types.ts new file mode 100644 index 0000000000..48a97a8582 --- /dev/null +++ b/frontend/src/lib/components/graph/svelvet/edges/views/Edges/types.ts @@ -0,0 +1,58 @@ +import type { XYPosition, Position } from './utils'; + +export interface Node { + id: number; + position: XYPosition; + data: T; + width: number; + height: number; + bgColor?: string; + fontSize?: number; + borderColor?: string; + borderRadius?: number; + textColor?: string; + clickCallback?: Function; + image?: boolean; + src?: string; + sourcePosition?: 'left' | 'right' | 'top' | 'bottom'; + targetPosition?: 'left' | 'right' | 'top' | 'bottom'; +} + +export interface Edge { + id: string; + source: number; + target: number; + label?: string; + labelBgColor?: string; + labelTextColor?: string; + edgeColor?: string; + type?: string; + animate?: boolean; + noHandle?: boolean; + arrow?: boolean; +} + +export interface DerivedEdge extends Edge { + sourceX: number; + sourceY: number; + sourcePosition: Position; + targetX: number; + targetY: number; + targetPosition: Position; +} + +export interface EdgeProps extends DerivedEdge { + path: string; + centerX: number; + centerY: number; +} + +export interface EdgeTextProps { + label?: any; + labelBgColor?: string; + labelTextColor?: string; + centerX: number; + centerY: number; +} + +export type HandleType = 'source' | 'target'; diff --git a/frontend/src/lib/components/graph/svelvet/edges/views/Edges/utils.ts b/frontend/src/lib/components/graph/svelvet/edges/views/Edges/utils.ts new file mode 100644 index 0000000000..8685e6e3e8 --- /dev/null +++ b/frontend/src/lib/components/graph/svelvet/edges/views/Edges/utils.ts @@ -0,0 +1,84 @@ +// enumerable values (static) set for Position +export enum Position { + Left = 'left', + Right = 'right', + Top = 'top', + Bottom = 'bottom', +} + +// interface for XYPosition to use in nodes and edges +export interface XYPosition { + x: number; + y: number; +} + +// type for z axis positioning with D3 +export type XYZPosition = XYPosition & { z: number }; + +// interface for changing dimensions of Viewport +export interface Dimensions { + width: number; + height: number; +} + +// interface of Rect divs in zoompane +export interface Rect extends Dimensions, XYPosition {} + +// interface of Box using XYPosition of nodes +export interface Box extends XYPosition { + x2: number; + y2: number; +} + +// D3 type array for Transform +export type Transform = [number, number, number]; + +// +// export type CoordinateExtent = [[number, number], [number, number]]; + +export interface GetCenterParams { + sourceX: number; + sourceY: number; + targetX: number; + targetY: number; + sourcePosition?: Position; + targetPosition?: Position; +} +//needed for getCenter funciotn +const LeftOrRight = [Position.Left, Position.Right]; +//used to determine the position for edge text on a Smooth or Step Edge +export const getCenter = ({ + sourceX, + sourceY, + targetX, + targetY, + sourcePosition = Position.Bottom, + targetPosition = Position.Top, +}: GetCenterParams): [number, number, number, number] => { + const sourceIsLeftOrRight = LeftOrRight.includes(sourcePosition); + const targetIsLeftOrRight = LeftOrRight.includes(targetPosition); + + // we expect flows to be horizontal or vertical (all handles left or right respectively top or bottom) + // a mixed edge is when one the source is on the left and the target is on the top for example. + const mixedEdge = + (sourceIsLeftOrRight && !targetIsLeftOrRight) || + (targetIsLeftOrRight && !sourceIsLeftOrRight); + + if (mixedEdge) { + const xOffset = sourceIsLeftOrRight ? Math.abs(targetX - sourceX) : 0; + const centerX = sourceX > targetX ? sourceX - xOffset : sourceX + xOffset; + + const yOffset = sourceIsLeftOrRight ? 0 : Math.abs(targetY - sourceY); + const centerY = sourceY < targetY ? sourceY + yOffset : sourceY - yOffset; + + return [centerX, centerY, xOffset, yOffset]; + } + + const xOffset = Math.abs(targetX - sourceX) / 2; + const centerX = targetX < sourceX ? targetX + xOffset : targetX - xOffset; + + const yOffset = Math.abs(targetY - sourceY) / 2; + const centerY = targetY < sourceY ? targetY + yOffset : targetY - yOffset; + + return [centerX, centerY, xOffset, yOffset]; +}; diff --git a/frontend/src/lib/components/graph/svelvet/editEdges/views/EditEdge.svelte b/frontend/src/lib/components/graph/svelvet/editEdges/views/EditEdge.svelte new file mode 100644 index 0000000000..9118426fbe --- /dev/null +++ b/frontend/src/lib/components/graph/svelvet/editEdges/views/EditEdge.svelte @@ -0,0 +1,153 @@ + + +