From 637ec684f0ef9d9d831efc4c031072ab66b4541c Mon Sep 17 00:00:00 2001 From: Louis Chan Date: Thu, 5 Dec 2024 11:54:49 +0800 Subject: [PATCH 01/22] Delete SIWE configuration related code in portal frontend --- portal/src/AppRoot.tsx | 11 - portal/src/ScreenNav.tsx | 12 +- ...nfigurationAddCollectionSection.module.css | 24 - .../Web3ConfigurationAddCollectionSection.tsx | 247 ------ ...urationCollectionDeletionDialog.module.css | 23 - ...3ConfigurationCollectionDeletionDialog.tsx | 68 -- ...ConfigurationConfirmationDialog.module.css | 31 - .../Web3ConfigurationConfirmationDialog.tsx | 267 ------ .../Web3ConfigurationContactUsDialog.tsx | 62 -- .../Web3ConfigurationDetailDialog.module.css | 31 - .../portal/Web3ConfigurationDetailDialog.tsx | 187 ---- ...Web3ConfigurationLargeCollectionDialog.tsx | 53 -- .../Web3ConfigurationNetworkChangeDialog.tsx | 54 -- .../portal/Web3ConfigurationScreen.module.css | 33 - .../portal/Web3ConfigurationScreen.tsx | 821 ------------------ .../Web3ConfigurationTokenTrackingDialog.tsx | 129 --- .../probeNFTCollectionMutation.generated.ts | 46 - .../probeNFTCollectionMutation.graphql | 5 - .../mutations/probeNFTCollectionMutation.ts | 34 - .../query/nftCollectionsQuery.generated.ts | 65 -- .../portal/query/nftCollectionsQuery.graphql | 17 - .../portal/query/nftCollectionsQuery.ts | 39 - .../nftContractMetadataQuery.generated.ts | 59 -- .../query/nftContractMetadataQuery.graphql | 11 - .../portal/query/nftContractMetadataQuery.ts | 40 - portal/src/system-config.ts | 2 - portal/src/util/contractId.test.ts | 61 -- portal/src/util/contractId.ts | 46 - portal/src/util/networkId.test.ts | 33 - portal/src/util/networkId.ts | 87 -- 30 files changed, 1 insertion(+), 2597 deletions(-) delete mode 100644 portal/src/graphql/portal/Web3ConfigurationAddCollectionSection.module.css delete mode 100644 portal/src/graphql/portal/Web3ConfigurationAddCollectionSection.tsx delete mode 100644 portal/src/graphql/portal/Web3ConfigurationCollectionDeletionDialog.module.css delete mode 100644 portal/src/graphql/portal/Web3ConfigurationCollectionDeletionDialog.tsx delete mode 100644 portal/src/graphql/portal/Web3ConfigurationConfirmationDialog.module.css delete mode 100644 portal/src/graphql/portal/Web3ConfigurationConfirmationDialog.tsx delete mode 100644 portal/src/graphql/portal/Web3ConfigurationContactUsDialog.tsx delete mode 100644 portal/src/graphql/portal/Web3ConfigurationDetailDialog.module.css delete mode 100644 portal/src/graphql/portal/Web3ConfigurationDetailDialog.tsx delete mode 100644 portal/src/graphql/portal/Web3ConfigurationLargeCollectionDialog.tsx delete mode 100644 portal/src/graphql/portal/Web3ConfigurationNetworkChangeDialog.tsx delete mode 100644 portal/src/graphql/portal/Web3ConfigurationScreen.module.css delete mode 100644 portal/src/graphql/portal/Web3ConfigurationScreen.tsx delete mode 100644 portal/src/graphql/portal/Web3ConfigurationTokenTrackingDialog.tsx delete mode 100644 portal/src/graphql/portal/mutations/probeNFTCollectionMutation.generated.ts delete mode 100644 portal/src/graphql/portal/mutations/probeNFTCollectionMutation.graphql delete mode 100644 portal/src/graphql/portal/mutations/probeNFTCollectionMutation.ts delete mode 100644 portal/src/graphql/portal/query/nftCollectionsQuery.generated.ts delete mode 100644 portal/src/graphql/portal/query/nftCollectionsQuery.graphql delete mode 100644 portal/src/graphql/portal/query/nftCollectionsQuery.ts delete mode 100644 portal/src/graphql/portal/query/nftContractMetadataQuery.generated.ts delete mode 100644 portal/src/graphql/portal/query/nftContractMetadataQuery.graphql delete mode 100644 portal/src/graphql/portal/query/nftContractMetadataQuery.ts delete mode 100644 portal/src/util/contractId.test.ts delete mode 100644 portal/src/util/contractId.ts delete mode 100644 portal/src/util/networkId.test.ts delete mode 100644 portal/src/util/networkId.ts diff --git a/portal/src/AppRoot.tsx b/portal/src/AppRoot.tsx index fefb5929c9..b00a7272d4 100644 --- a/portal/src/AppRoot.tsx +++ b/portal/src/AppRoot.tsx @@ -123,9 +123,6 @@ const AdminAPIConfigurationScreen = lazy( const LoginMethodConfigurationScreen = lazy( async () => import("./graphql/portal/LoginMethodConfigurationScreen") ); -const Web3ConfigurationScreen = lazy( - async () => import("./graphql/portal/Web3ConfigurationScreen") -); const BiometricConfigurationScreen = lazy( async () => import("./graphql/portal/BiometricConfigurationScreen") ); @@ -564,14 +561,6 @@ const AppRoot: React.VFC = function AppRoot() { } /> - }> - - - } - /> = function ScreenNav(props) { false; const skippedTutorial = app?.tutorialStatus.data.skipped === true; - const { auditLogEnabled, analyticEnabled, web3Enabled } = useSystemConfig(); + const { auditLogEnabled, analyticEnabled } = useSystemConfig(); const app2appEnabled = useMemo(() => { if (effectiveFeatureConfig != null) { @@ -220,15 +220,6 @@ const ScreenNav: React.VFC = function ScreenNav(props) { textKey: "ScreenNav.mfa", url: `/project/${appID}/configuration/authentication/2fa`, }, - ...(web3Enabled - ? [ - { - type: "link" as const, - textKey: "ScreenNav.web3", - url: `/project/${appID}/configuration/authentication/web3`, - }, - ] - : []), { type: "link" as const, textKey: "ScreenNav.anonymous-users", @@ -387,7 +378,6 @@ const ScreenNav: React.VFC = function ScreenNav(props) { skippedTutorial, appID, analyticEnabled, - web3Enabled, app2appEnabled, showIntegrations, auditLogEnabled, diff --git a/portal/src/graphql/portal/Web3ConfigurationAddCollectionSection.module.css b/portal/src/graphql/portal/Web3ConfigurationAddCollectionSection.module.css deleted file mode 100644 index 47ad698914..0000000000 --- a/portal/src/graphql/portal/Web3ConfigurationAddCollectionSection.module.css +++ /dev/null @@ -1,24 +0,0 @@ -.addCollection { - @apply flex flex-col gap-y-2 items-start; -} - -.addCollectionField { - @apply w-full; -} - -.addCollectionButtonContainer { - @apply flex flex-row gap-x-2 self-end; -} - -.tokenTypeChoiceButtonContainer { - @apply w-full flex flex-row gap-x-2; -} - -.tokenTypeChoiceButton { - @apply flex-1 px-6; -} - -.tokenTypeChoiceButtonText { - font-weight: inherit; - @apply text-sm leading-5; -} diff --git a/portal/src/graphql/portal/Web3ConfigurationAddCollectionSection.tsx b/portal/src/graphql/portal/Web3ConfigurationAddCollectionSection.tsx deleted file mode 100644 index baecf37751..0000000000 --- a/portal/src/graphql/portal/Web3ConfigurationAddCollectionSection.tsx +++ /dev/null @@ -1,247 +0,0 @@ -import React, { useCallback, useContext, useMemo, useState } from "react"; -import cn from "classnames"; -import { Context, FormattedMessage } from "@oursky/react-messageformat"; - -import styles from "./Web3ConfigurationAddCollectionSection.module.css"; -import { createContractIDURL } from "../../util/contractId"; -import { NetworkID } from "../../util/networkId"; -import { CollectionItem } from "./Web3ConfigurationScreen"; -import { DateTime } from "luxon"; -import PrimaryButton from "../../PrimaryButton"; -import DefaultButton from "../../DefaultButton"; -import Web3ConfigurationLargeCollectionDialog from "./Web3ConfigurationLargeCollectionDialog"; -import Web3ConfigurationTokenTrackingDialog from "./Web3ConfigurationTokenTrackingDialog"; -import Web3ConfigurationContactUsDialog from "./Web3ConfigurationContactUsDialog"; -import TextField from "../../TextField"; -import { useErrorDialog } from "../../formbinding"; -import { makeReasonErrorParseRule } from "../../error/parse"; -import { NftCollection } from "./globalTypes.generated"; - -interface AddCollectionSectionValues { - contractAddress: string; -} - -const defaultValues: AddCollectionSectionValues = { - contractAddress: "", -}; - -interface AddCollectionSectionProps { - className?: string; - selectedNetwork: NetworkID; - disabled?: boolean; - initialValues?: AddCollectionSectionValues; - fetchMetadata: (contractId: string) => Promise; - probeCollection: (contractId: string) => Promise; - onAdd: (collection: CollectionItem) => void; - onDismiss: () => void; -} - -const Web3ConfigurationAddCollectionForm: React.VFC = - function Web3ConfigurationAddCollectionForm(props) { - const { renderToString } = useContext(Context); - - const { - onAdd, - onDismiss, - fetchMetadata, - probeCollection, - initialValues = defaultValues, - className, - selectedNetwork, - } = props; - - const { - hidden: contactUsDialogHidden, - onDismiss: onDismissContactUsDialog, - } = useErrorDialog({ - parentJSONPointer: "", - fieldName: "", - rules: [makeReasonErrorParseRule("AlchemyProtocol", "")], - }); - - const [validationErrorId, setValidationErrorId] = useState( - null - ); - const [activeDialog, setActiveDialog] = useState< - "largeCollection" | "tokenTracking" | null - >(null); - const [isLoading, setIsLoading] = useState(false); - const [values, setValues] = - useState(initialValues); - - const buildContractID = useCallback( - (address: string): string => { - const contractId = { - blockchain: selectedNetwork.blockchain, - network: selectedNetwork.network, - address: address, - }; - - return createContractIDURL(contractId); - }, - [selectedNetwork] - ); - - const isModified = useMemo(() => { - return values.contractAddress !== ""; - }, [values]); - - const resetValues = useCallback(() => { - setValues(initialValues); - }, [initialValues, setValues]); - - const onChangeContractAddress = useCallback( - (_e, newValue) => { - if (newValue != null) { - setValues((prev) => ({ ...prev, contractAddress: newValue })); - } - }, - [setValues] - ); - - const dismissDialogs = useCallback(() => { - setActiveDialog(null); - }, []); - - const handleAddCollection = useCallback( - async (tokenIDs?: string[]) => { - setIsLoading(true); - setValidationErrorId(null); - dismissDialogs(); - - let contractID: string; - try { - contractID = buildContractID(values.contractAddress); - } catch (_: unknown) { - setValidationErrorId("errors.invalid-address"); - setIsLoading(false); - return; - } - - try { - const probeResult = await probeCollection(contractID); - if (probeResult) { - setActiveDialog("largeCollection"); - setIsLoading(false); - return; - } - - const metadata = await fetchMetadata(contractID); - if (!metadata) { - setIsLoading(false); - return; - } - - if (metadata.tokenType === "erc1155" && !tokenIDs?.length) { - setActiveDialog("tokenTracking"); - setIsLoading(false); - return; - } - - onAdd({ - ...metadata, - createdAt: DateTime.now().toISO(), - tokenIDs: tokenIDs ?? [], - status: "pending", - }); - } catch (_: unknown) { - // Error handled by parent component - setIsLoading(false); - return; - } - - setIsLoading(false); - resetValues(); - }, - [ - buildContractID, - dismissDialogs, - fetchMetadata, - onAdd, - probeCollection, - resetValues, - values.contractAddress, - ] - ); - - const onAddCollection = useCallback( - (e) => { - e.preventDefault(); - e.stopPropagation(); - - handleAddCollection().catch(() => {}); - }, - [handleAddCollection] - ); - - const onCancel = useCallback( - (e) => { - e.preventDefault(); - e.stopPropagation(); - onDismiss(); - }, - [onDismiss] - ); - - return ( - <> -
- -
- - ) : ( - - ) - } - /> - } - /> -
- - - - - - ); - }; - -export default Web3ConfigurationAddCollectionForm; diff --git a/portal/src/graphql/portal/Web3ConfigurationCollectionDeletionDialog.module.css b/portal/src/graphql/portal/Web3ConfigurationCollectionDeletionDialog.module.css deleted file mode 100644 index 74b0213dd0..0000000000 --- a/portal/src/graphql/portal/Web3ConfigurationCollectionDeletionDialog.module.css +++ /dev/null @@ -1,23 +0,0 @@ -.contentContainer { - @apply flex flex-col gap-y-5; -} - -.contractAddressContainer { - @apply overflow-hidden text-ellipsis break-all whitespace-nowrap; -} - -.fieldContainer { - @apply flex flex-col gap-y-1; -} - -.fieldTitle { - @apply font-bold; -} - -.removeCollectionButton { - @apply p-0; -} - -.removeCollectionButtonContainer { - @apply -mx-1; -} diff --git a/portal/src/graphql/portal/Web3ConfigurationCollectionDeletionDialog.tsx b/portal/src/graphql/portal/Web3ConfigurationCollectionDeletionDialog.tsx deleted file mode 100644 index 7118b7f20a..0000000000 --- a/portal/src/graphql/portal/Web3ConfigurationCollectionDeletionDialog.tsx +++ /dev/null @@ -1,68 +0,0 @@ -import React, { useCallback, useContext, useMemo } from "react"; -import { Dialog, DialogFooter } from "@fluentui/react"; -import { Context, FormattedMessage } from "@oursky/react-messageformat"; -import DefaultButton from "../../DefaultButton"; -import { useSystemConfig } from "../../context/SystemConfigContext"; -import { getNetworkNameID } from "../../util/networkId"; -import PrimaryButton from "../../PrimaryButton"; -import { truncateAddress } from "../../util/hex"; -import { CollectionItem } from "./Web3ConfigurationScreen"; - -interface Web3ConfigurationCollectionDeletionDialogProps { - nftCollection: CollectionItem; - - isVisible: boolean; - onConfirm: (nftCollection: CollectionItem) => void; - onDismiss: () => void; -} - -const Web3ConfigurationCollectionDeletionDialog: React.VFC = - function Web3ConfigurationCollectionDeletionDialog(props) { - const { nftCollection, isVisible, onConfirm, onDismiss } = props; - - const { themes } = useSystemConfig(); - const { renderToString } = useContext(Context); - - const dialogContentProps = useMemo(() => { - const networkNameId = getNetworkNameID(nftCollection); - return { - title: renderToString("Web3ConfigurationScreen.deletion-dialog.title"), - subText: renderToString( - "Web3ConfigurationScreen.deletion-dialog.description", - { - collection: renderToString("NftCollection.item.identifier", { - name: nftCollection.name, - network: renderToString(networkNameId), - address: truncateAddress(nftCollection.contractAddress), - }), - } - ), - }; - }, [nftCollection, renderToString]); - - const onConfirmDelete = useCallback(() => { - onConfirm(nftCollection); - }, [nftCollection, onConfirm]); - - return ( - - ); - }; - -export default Web3ConfigurationCollectionDeletionDialog; diff --git a/portal/src/graphql/portal/Web3ConfigurationConfirmationDialog.module.css b/portal/src/graphql/portal/Web3ConfigurationConfirmationDialog.module.css deleted file mode 100644 index 19667ff4bd..0000000000 --- a/portal/src/graphql/portal/Web3ConfigurationConfirmationDialog.module.css +++ /dev/null @@ -1,31 +0,0 @@ -.changesSectionContainer { - @apply flex flex-col gap-y-1; -} - -.changesSectionTitle { - @apply text-sm leading-5 font-bold; -} - -.changesSectionCollectionList { - @apply list-inside; -} - -.changesSectionCollectionListItem { - @apply flex flex-row gap-x-1; -} - -.changesSectionCollectionName { - @apply shrink-0; -} - -.changesSectionCollectionNetworkName { - @apply shrink-0; -} - -.changesSectionCollectionContractAddress { - @apply flex-1 overflow-hidden text-ellipsis; -} - -.changesContainer { - @apply flex flex-col gap-y-5; -} diff --git a/portal/src/graphql/portal/Web3ConfigurationConfirmationDialog.tsx b/portal/src/graphql/portal/Web3ConfigurationConfirmationDialog.tsx deleted file mode 100644 index ab6c5ff401..0000000000 --- a/portal/src/graphql/portal/Web3ConfigurationConfirmationDialog.tsx +++ /dev/null @@ -1,267 +0,0 @@ -import React, { useContext, useMemo } from "react"; -import { Dialog, DialogFooter, Text } from "@fluentui/react"; -import { Context, FormattedMessage } from "@oursky/react-messageformat"; -import { - FormState as Web3ConfigurationFormState, - isNFTCollectionEqual, -} from "./Web3ConfigurationScreen"; -import PrimaryButton from "../../PrimaryButton"; -import DefaultButton from "../../DefaultButton"; -import { NftCollection } from "./globalTypes.generated"; -import styles from "./Web3ConfigurationConfirmationDialog.module.css"; -import { - getNetworkNameID, - NetworkID, - sameNetworkID, -} from "../../util/networkId"; -import { truncateAddress } from "../../util/hex"; - -interface Web3ConfigurationConfirmationDialogProps { - initialState: Web3ConfigurationFormState; - currentState: Web3ConfigurationFormState; - - isVisible: boolean; - onConfirm: () => void; - onDismiss: () => void; -} - -interface FormChanges { - siweEnabled: boolean | null; - networkChange: { - from: NetworkID; - to: NetworkID; - } | null; - - tokenIDChanges: NftCollection[]; - - collectionAdded: NftCollection[]; - collectionRemoved: NftCollection[]; -} - -const Web3ConfigurationConfirmationDialog: React.VFC = - function Web3ConfigurationConfirmationDialog(props) { - const { initialState, currentState, isVisible, onConfirm, onDismiss } = - props; - - const { renderToString } = useContext(Context); - - const dialogContentProps = useMemo(() => { - return { - title: ( - - ), - }; - }, []); - - const formChanges: FormChanges = useMemo(() => { - const changes: FormChanges = { - siweEnabled: null, - networkChange: null, - tokenIDChanges: [], - collectionAdded: [], - collectionRemoved: [], - }; - - if (initialState.siweChecked !== currentState.siweChecked) { - changes.siweEnabled = currentState.siweChecked; - } - - if (!sameNetworkID(initialState.network, currentState.network)) { - changes.networkChange = { - from: initialState.network, - to: currentState.network, - }; - } - - // We remove all collections if siwe is disabled - // Remove all collections if siwe is disabled - if (changes.siweEnabled === false) { - changes.collectionAdded = []; - changes.collectionRemoved = initialState.collections; - } else if (!sameNetworkID(initialState.network, currentState.network)) { - changes.collectionAdded = currentState.collections.filter((c) => - sameNetworkID(c, currentState.network) - ); - changes.collectionRemoved = initialState.collections; - } else { - changes.collectionAdded = currentState.collections.filter( - (c) => - initialState.collections.findIndex((cc) => - isNFTCollectionEqual(c, cc) - ) === -1 - ); - - changes.collectionRemoved = initialState.collections.filter( - (c) => - currentState.collections.findIndex((cc) => - isNFTCollectionEqual(c, cc) - ) === -1 - ); - } - - changes.tokenIDChanges = currentState.collections.filter( - (c) => - initialState.collections.findIndex( - (cc) => - isNFTCollectionEqual(c, cc) && - !c.tokenIDs.every((ct) => cc.tokenIDs.includes(ct)) - ) !== -1 - ); - - return changes; - }, [initialState, currentState]); - - return ( - - ); - }; - -export default Web3ConfigurationConfirmationDialog; diff --git a/portal/src/graphql/portal/Web3ConfigurationContactUsDialog.tsx b/portal/src/graphql/portal/Web3ConfigurationContactUsDialog.tsx deleted file mode 100644 index 3205024217..0000000000 --- a/portal/src/graphql/portal/Web3ConfigurationContactUsDialog.tsx +++ /dev/null @@ -1,62 +0,0 @@ -import React, { useContext, useMemo, useCallback } from "react"; -import { Dialog, DialogFooter, IDialogProps } from "@fluentui/react"; -import { Context, FormattedMessage } from "@oursky/react-messageformat"; -import DefaultButton from "../../DefaultButton"; -import PrimaryButton from "../../PrimaryButton"; -import ExternalLink from "../../ExternalLink"; - -const DIALOG_MAX_WIDTH = "33%"; - -interface Web3ConfigurationContactUsDialogProps { - isVisible: boolean; - onDismiss: IDialogProps["onDismiss"]; -} -const Web3ConfigurationContactUsDialog: React.VFC< - Web3ConfigurationContactUsDialogProps -> = (props) => { - const { isVisible, onDismiss } = props; - const { renderToString } = useContext(Context); - const dialogContentProps = useMemo(() => { - return { - title: renderToString("Web3ConfigurationScreen.contact-us-dialog.title"), - subText: ( - - ), - }; - }, [renderToString]); - - const onClickCancel = useCallback( - (e) => { - e?.preventDefault(); - e?.stopPropagation(); - onDismiss?.(); - }, - [onDismiss] - ); - - return ( - - ); -}; - -export default Web3ConfigurationContactUsDialog; diff --git a/portal/src/graphql/portal/Web3ConfigurationDetailDialog.module.css b/portal/src/graphql/portal/Web3ConfigurationDetailDialog.module.css deleted file mode 100644 index b06ab7fbe7..0000000000 --- a/portal/src/graphql/portal/Web3ConfigurationDetailDialog.module.css +++ /dev/null @@ -1,31 +0,0 @@ -.contentContainer { - @apply flex flex-col; -} - -.contractAddressContainer { - @apply overflow-hidden text-ellipsis break-all whitespace-nowrap; -} - -.fieldContainer { - @apply flex flex-col gap-y-1 mt-5; -} - -.fieldTitle { - @apply font-bold; -} - -.actionButton { - @apply p-0 h-auto; -} - -.actionButtonContainer { - @apply -mx-1; -} - -.deleteCollectionButtonContainer { - @apply mt-4; -} - -.footer { - @apply pt-3; -} diff --git a/portal/src/graphql/portal/Web3ConfigurationDetailDialog.tsx b/portal/src/graphql/portal/Web3ConfigurationDetailDialog.tsx deleted file mode 100644 index 58e8ee82ae..0000000000 --- a/portal/src/graphql/portal/Web3ConfigurationDetailDialog.tsx +++ /dev/null @@ -1,187 +0,0 @@ -import React, { useCallback, useMemo } from "react"; -import cn from "classnames"; -import { Dialog, DialogFooter, Text } from "@fluentui/react"; -import { FormattedMessage } from "@oursky/react-messageformat"; -import DefaultButton from "../../DefaultButton"; -import styles from "./Web3ConfigurationDetailDialog.module.css"; -import { useSystemConfig } from "../../context/SystemConfigContext"; -import { getNetworkNameID } from "../../util/networkId"; -import ActionButton from "../../ActionButton"; -import { explorerAddress } from "../../util/eip681"; -import ExternalLink from "../../ExternalLink"; -import { createContractIDURL } from "../../util/contractId"; -import { CollectionItem } from "./Web3ConfigurationScreen"; - -interface Web3ConfigurationDetailDialogProps { - nftCollection: CollectionItem; - - isVisible: boolean; - onEditTrackedTokens: () => void; - onDelete: (nftCollection: CollectionItem) => void; - onDismiss: () => void; -} - -const Web3ConfigurationDetailDialog: React.VFC = - function Web3ConfigurationDetailDialog(props) { - const { - nftCollection, - isVisible, - onDelete, - onDismiss, - onEditTrackedTokens, - } = props; - - const { themes } = useSystemConfig(); - - const dialogContentProps = useMemo(() => { - return { - title: nftCollection.name, - }; - }, [nftCollection]); - - const onRemoveCollection = useCallback(() => { - onDelete(nftCollection); - }, [nftCollection, onDelete]); - - const contractID = useMemo( - () => - createContractIDURL({ - address: nftCollection.contractAddress, - blockchain: nftCollection.blockchain, - network: nftCollection.network, - }), - [nftCollection] - ); - - const tokenTypeMessageId = useMemo(() => { - switch (nftCollection.tokenType) { - case "erc721": - return "Web3ConfigurationScreen.detail-dialog.token-type.erc721"; - case "erc1155": - return "Web3ConfigurationScreen.detail-dialog.token-type.erc1155"; - default: - return "Web3ConfigurationScreen.detail-dialog.token-type.unknown"; - } - }, [nftCollection]); - - const displayedTokens = useMemo(() => { - const totalSupplyNotAvailable = - !nftCollection.totalSupply || nftCollection.totalSupply === "0"; - - // Check if collection is ERC-1155 - if (nftCollection.tokenIDs.length !== 0) { - // Return tracked token count over total supply if available - // otherwise just tracked token count - return totalSupplyNotAvailable - ? nftCollection.tokenIDs.length - : `${nftCollection.tokenIDs.length}/${nftCollection.totalSupply}`; - } - - // Return dash is total supply not available - return totalSupplyNotAvailable ? "-" : nftCollection.totalSupply; - }, [nftCollection]); - - return ( - - ); - }; - -export default Web3ConfigurationDetailDialog; diff --git a/portal/src/graphql/portal/Web3ConfigurationLargeCollectionDialog.tsx b/portal/src/graphql/portal/Web3ConfigurationLargeCollectionDialog.tsx deleted file mode 100644 index 98a5588ce5..0000000000 --- a/portal/src/graphql/portal/Web3ConfigurationLargeCollectionDialog.tsx +++ /dev/null @@ -1,53 +0,0 @@ -import React, { useContext, useMemo } from "react"; -import { Dialog, DialogFooter } from "@fluentui/react"; -import { Context, FormattedMessage } from "@oursky/react-messageformat"; -import DefaultButton from "../../DefaultButton"; -import PrimaryButton from "../../PrimaryButton"; -import ExternalLink from "../../ExternalLink"; - -const DIALOG_MAX_WIDTH = "33%"; - -interface Web3ConfigurationLargeCollectionDialogProps { - isVisible: boolean; - onDismiss: () => void; -} -const Web3ConfigurationLargeCollectionDialog: React.VFC< - Web3ConfigurationLargeCollectionDialogProps -> = (props) => { - const { isVisible, onDismiss } = props; - const { renderToString } = useContext(Context); - const dialogContentProps = useMemo(() => { - return { - title: ( - - ), - subText: renderToString( - "Web3ConfigurationScreen.collection-list.add-collection.large-collection-dialog.description" - ), - }; - }, [renderToString]); - return ( - - ); -}; - -export default Web3ConfigurationLargeCollectionDialog; diff --git a/portal/src/graphql/portal/Web3ConfigurationNetworkChangeDialog.tsx b/portal/src/graphql/portal/Web3ConfigurationNetworkChangeDialog.tsx deleted file mode 100644 index 556b669d23..0000000000 --- a/portal/src/graphql/portal/Web3ConfigurationNetworkChangeDialog.tsx +++ /dev/null @@ -1,54 +0,0 @@ -import React, { useContext, useMemo } from "react"; -import { Dialog, DialogFooter } from "@fluentui/react"; -import { Context, FormattedMessage } from "@oursky/react-messageformat"; -import { useSystemConfig } from "../../context/SystemConfigContext"; -import PrimaryButton from "../../PrimaryButton"; -import DefaultButton from "../../DefaultButton"; - -interface Web3ConfigurationNetworkChangeDialogProps { - isVisible: boolean; - onConfirm: () => void; - onDismiss: () => void; -} - -const Web3ConfigurationNetworkChangeDialog: React.VFC = - function Web3ConfigurationNetworkChangeDialog(props) { - const { isVisible, onConfirm, onDismiss } = props; - - const { renderToString } = useContext(Context); - - const { themes } = useSystemConfig(); - - const dialogContentProps = useMemo(() => { - return { - title: ( - - ), - subText: renderToString( - "Web3ConfigurationScreen.network-change-dialog.description" - ), - }; - }, [renderToString]); - - return ( - - ); - }; - -export default Web3ConfigurationNetworkChangeDialog; diff --git a/portal/src/graphql/portal/Web3ConfigurationScreen.module.css b/portal/src/graphql/portal/Web3ConfigurationScreen.module.css deleted file mode 100644 index de0ce34cb3..0000000000 --- a/portal/src/graphql/portal/Web3ConfigurationScreen.module.css +++ /dev/null @@ -1,33 +0,0 @@ -.widget { - grid-column: 1 / span 8; - - @apply tablet:col-span-full; -} - -.actionButton { - @apply h-auto leading-4 text-xs; -} - -.networkSection { - @apply flex flex-col mt-2 mb-4; -} - -.networkDropdown { - @apply mb-1; -} - -.nftCollectionTitle { - @apply font-bold mb-2; -} - -.nftCollectionList { - @apply mt-2; -} - -.addCollectionForm { - @apply mt-1.5; -} - -.addCollectionButton { - @apply p-2; -} diff --git a/portal/src/graphql/portal/Web3ConfigurationScreen.tsx b/portal/src/graphql/portal/Web3ConfigurationScreen.tsx deleted file mode 100644 index 4944828e47..0000000000 --- a/portal/src/graphql/portal/Web3ConfigurationScreen.tsx +++ /dev/null @@ -1,821 +0,0 @@ -import React, { useCallback, useContext, useMemo, useState } from "react"; -import { - Text, - Dropdown, - IColumn, - SelectionMode, - DetailsList, -} from "@fluentui/react"; -import { APIError } from "../../error/error"; -import { produce } from "immer"; -import { Context, FormattedMessage } from "@oursky/react-messageformat"; -import { PortalAPIAppConfig } from "../../types"; -import { useCheckbox, useDropdown } from "../../hook/useInput"; -import { clearEmptyObject } from "../../util/misc"; -import { useParams } from "react-router-dom"; -import { - AppConfigFormModel, - useAppConfigForm, -} from "../../hook/useAppConfigForm"; -import ShowLoading from "../../ShowLoading"; -import ShowError from "../../ShowError"; -import ScreenContent from "../../ScreenContent"; -import ScreenTitle from "../../ScreenTitle"; -import ScreenDescription from "../../ScreenDescription"; -import Widget from "../../Widget"; -import FormContainer from "../../FormContainer"; - -import styles from "./Web3ConfigurationScreen.module.css"; -import { useSystemConfig } from "../../context/SystemConfigContext"; -import { useNftCollectionsQuery } from "./query/nftCollectionsQuery"; -import { NftCollection } from "./globalTypes.generated"; -import { createContractIDURL, parseContractID } from "../../util/contractId"; -import { useNftContractMetadataLazyQuery } from "./query/nftContractMetadataQuery"; -import { ErrorParseRule, makeReasonErrorParseRule } from "../../error/parse"; -import { - ALL_SUPPORTED_NETWORKS, - createNetworkIDURL, - getNetworkNameID, - NetworkID, - parseNetworkID, - sameNetworkID, -} from "../../util/networkId"; -import Web3ConfigurationConfirmationDialog from "./Web3ConfigurationConfirmationDialog"; -import Web3ConfigurationDetailDialog from "./Web3ConfigurationDetailDialog"; -import Web3ConfigurationCollectionDeletionDialog from "./Web3ConfigurationCollectionDeletionDialog"; -import Web3ConfigurationAddCollectionSection from "./Web3ConfigurationAddCollectionSection"; -import CommandBarButton from "../../CommandBarButton"; -import ActionButton from "../../ActionButton"; -import Toggle from "../../Toggle"; -import { useAppFeatureConfigQuery } from "./query/appFeatureConfigQuery"; -import FeatureDisabledMessageBar from "./FeatureDisabledMessageBar"; -import HorizontalDivider from "../../HorizontalDivider"; -import { useProbeNFTCollectionMutation } from "./mutations/probeNFTCollectionMutation"; -import Web3ConfigurationTokenTrackingDialog from "./Web3ConfigurationTokenTrackingDialog"; -import { truncateAddress } from "../../util/hex"; -import Web3ConfigurationNetworkChangeDialog from "./Web3ConfigurationNetworkChangeDialog"; -import { FormModel } from "../../FormContainerBase"; - -export interface CollectionItem extends NftCollection { - status: "pending" | "active"; - tokenIDs: string[]; -} - -export function isNFTCollectionEqual( - a: NftCollection, - b: NftCollection -): boolean { - return ( - a.blockchain === b.blockchain && - a.network === b.network && - a.contractAddress === b.contractAddress - ); -} -export interface FormState { - network: NetworkID; - collections: CollectionItem[]; - - siweChecked: boolean; -} - -function constructConfig( - config: PortalAPIAppConfig, - _initialState: FormState, - currentState: FormState -): PortalAPIAppConfig { - return produce(config, (config) => { - config.authentication ??= {}; - config.authentication.primary_authenticators ??= []; - config.identity ??= {}; - config.identity.login_id ??= {}; - config.web3 ??= {}; - config.web3.nft ??= {}; - config.web3.siwe ??= {}; - - if (currentState.siweChecked) { - config.authentication.identities = ["siwe"]; - config.identity.login_id.keys = []; - config.authentication.primary_authenticators = []; - } else { - config.authentication.identities = ["login_id", "oauth"]; - config.identity.login_id.keys = [{ type: "email" }]; - config.authentication.primary_authenticators = ["password"]; - } - - const selectedNetwork = createNetworkIDURL(currentState.network); - - let collections: CollectionItem[]; - - if (!currentState.siweChecked) { - // Clear collection list if SIWE is disabled - collections = []; - } else if (!config.web3.siwe.networks?.includes(selectedNetwork)) { - // Clear unrelated collections if network is changed - collections = currentState.collections.filter((c) => - sameNetworkID(c, currentState.network) - ); - } else { - // Proceed with changes - collections = currentState.collections; - } - - config.web3.siwe.networks = [selectedNetwork]; - config.web3.nft.collections = collections.map((c) => { - return createContractIDURL({ - blockchain: c.blockchain, - network: c.network, - address: c.contractAddress, - query: - c.tokenIDs.length !== 0 - ? new URLSearchParams(c.tokenIDs.map((t) => ["token_ids", t])) - : undefined, - }); - }); - - clearEmptyObject(config); - }); -} - -const DuplicatedContractError: APIError = { - errorName: "DuplicatedContractError", - reason: "ValidationFailed", - info: { - causes: [ - { - location: "/contract_address", - kind: "__local", - details: { - error: { - messageID: "errors.duplicated-contract", - }, - }, - }, - ], - }, -}; - -const ALL_NETWORK_OPTIONS: string[] = ALL_SUPPORTED_NETWORKS.map((n) => - createNetworkIDURL(n) -); - -interface Web3ConfigurationContentProps { - nftCollections: NftCollection[]; - isAddCollectionFieldVisible: boolean; - showAddCollectionField: () => void; - hideAddCollectionField: () => void; - - maximumCollections: number; - fetchMetadata: (contractId: string) => Promise; - probeCollection: (contractId: string) => Promise; - form: AppConfigFormModel; -} - -type Web3ConfigurationContentDialogs = - | "deletionConfirmation" - | "detail" - | "networkChange" - | null; - -const Web3ConfigurationContent: React.VFC = - function Web3ConfigurationContent(props) { - const { state, setState } = props.form; - const { themes } = useSystemConfig(); - - const [activeDialog, setActiveDialog] = - useState(null); - const [selectedCollectionIdx, setSelectedCollectionIdx] = - useState(-1); - const [isTokenTrackingDialogVisible, setIsTokenTrackingDialogVisible] = - useState(false); - - const [pendingNetwork, setPendingNetwork] = useState(null); - - const { renderToString } = useContext(Context); - - const { onChange: onChangeSIWEChecked } = useCheckbox( - (checked: boolean) => { - setState((prev) => ({ - ...prev, - siweChecked: checked, - })); - } - ); - - const renderBlockchainNetwork = useCallback( - (networkIdUrl: string) => { - const networkId = parseNetworkID(networkIdUrl); - return renderToString(getNetworkNameID(networkId)); - }, - [renderToString] - ); - - const onNetworkDropdownOptionChange = useCallback( - (option: string) => { - const networkId = parseNetworkID(option); - if ( - state.collections.length > 0 && - !sameNetworkID(networkId, state.network) - ) { - setPendingNetwork(option); - setActiveDialog("networkChange"); - return; - } - - setState((prev) => ({ - ...prev, - network: networkId, - })); - }, - [state.collections, state.network, setState] - ); - - const { options: blockchainOptions, onChange: onBlockchainChange } = - useDropdown( - ALL_NETWORK_OPTIONS, - onNetworkDropdownOptionChange, - createNetworkIDURL(state.network), - renderBlockchainNetwork - ); - - const openDetailDialog = useCallback(() => { - setActiveDialog("detail"); - }, [setActiveDialog]); - - const openDeleteConfirmationDialog = useCallback(() => { - setActiveDialog("deletionConfirmation"); - }, [setActiveDialog]); - - const dismissAllDialogs = useCallback(() => { - setActiveDialog(null); - }, [setActiveDialog]); - - const onSelectCollection = useCallback( - (collection: CollectionItem) => { - const idx = state.collections.findIndex((c) => - isNFTCollectionEqual(collection, c) - ); - - setSelectedCollectionIdx(idx); - }, - [state.collections] - ); - - const onAddNewCollection = useCallback( - (collection: CollectionItem) => { - if ( - state.collections.findIndex( - (c) => - c.blockchain === collection.blockchain && - c.network === collection.network && - c.contractAddress === collection.contractAddress - ) !== -1 - ) { - // eslint-disable-next-line @typescript-eslint/only-throw-error - throw DuplicatedContractError; - } - - setState((prev) => { - const existingCollections = prev.collections; - - return { - ...prev, - collections: [collection, ...existingCollections], - }; - }); - }, - [state, setState] - ); - - const onRequireConfirmRemoveCollection = useCallback( - (collection: CollectionItem) => { - onSelectCollection(collection); - - openDeleteConfirmationDialog(); - }, - [onSelectCollection, openDeleteConfirmationDialog] - ); - - const onRemoveCollection = useCallback( - (collection: NftCollection) => { - setSelectedCollectionIdx(-1); - setState((prev) => { - const collections = prev.collections; - const index = collections.findIndex((c) => - isNFTCollectionEqual(c, collection) - ); - - if (index < 0) { - return prev; - } - - return { - ...prev, - collections: [ - ...collections.slice(0, index), - ...collections.slice(index + 1), - ], - }; - }); - - dismissAllDialogs(); - }, - [setState, dismissAllDialogs] - ); - - const confirmNetworkChange = useCallback(() => { - if (!pendingNetwork) { - return; - } - - setState((prev) => ({ - ...prev, - network: parseNetworkID(pendingNetwork), - collections: [], - })); - - setPendingNetwork(null); - }, [pendingNetwork, setState]); - - const onCollectionUserActionClick = useCallback( - (e: React.MouseEvent, collection: CollectionItem) => { - e.preventDefault(); - e.stopPropagation(); - - switch (collection.status) { - case "pending": - onRemoveCollection(collection); - break; - case "active": - onSelectCollection(collection); - - openDetailDialog(); - break; - } - }, - [onRemoveCollection, onSelectCollection, openDetailDialog] - ); - - const showTokenTrackingDialog = useCallback(() => { - setIsTokenTrackingDialogVisible(true); - }, []); - - const dismissTokenTrackingDialog = useCallback(() => { - setIsTokenTrackingDialogVisible(false); - }, []); - - const onEditSelectedCollectionTokenIds = useCallback( - (tokenIDs: string[]) => { - if (selectedCollectionIdx === -1) { - return; - } - - setState((prev) => { - const collections = prev.collections; - const updatedCollection = { - ...prev.collections[selectedCollectionIdx], - tokenIDs: tokenIDs, - }; - collections.splice(selectedCollectionIdx, 1, updatedCollection); - return { - ...prev, - collections, - }; - }); - dismissTokenTrackingDialog(); - }, - [selectedCollectionIdx, setState, dismissTokenTrackingDialog] - ); - - const onRenderItemColumn = useCallback( - (item?: CollectionItem, _index?: number, column?: IColumn) => { - if (item == null) { - return null; - } - switch (column?.key) { - case "name": - return ( - - {item.name} - - ); - case "contract-address": - return truncateAddress(item.contractAddress); - case "status": - if (item.status === "pending") { - return renderToString( - "Web3ConfigurationScreen.collection-list.status.pending" - ); - } - return ""; - case "action": { - const theme = - item.status === "pending" - ? themes.destructive - : themes.actionButton; - - const text = - item.status === "pending" ? ( - - ) : ( - - ); - - return ( - onCollectionUserActionClick(event, item)} - text={text} - /> - ); - } - - default: - return null; - } - }, - [onCollectionUserActionClick, renderToString, themes] - ); - - const collectionColumns: IColumn[] = useMemo( - () => [ - { - key: "name", - name: "", - minWidth: 179, - maxWidth: 179, - isMultiline: true, - }, - { - key: "contract-address", - name: "", - flexGrow: 1, - minWidth: 103, - maxWidth: 103, - }, - { - key: "status", - name: "", - minWidth: 103, - maxWidth: 103, - }, - { - key: "action", - name: "", - minWidth: 103, - maxWidth: 103, - targetWidthProportion: 1, - }, - ], - [] - ); - - const collectionLimitReached = useMemo(() => { - return state.collections.length >= props.maximumCollections; - }, [props.maximumCollections, state.collections.length]); - - const selectedCollection = useMemo(() => { - if (selectedCollectionIdx === -1) { - return null; - } - - return state.collections[selectedCollectionIdx] ?? null; - }, [state, selectedCollectionIdx]); - - return ( - <> - - - - - - - - - -
-
- - } - /> -
-
- - - - -
- -
- - - - - - {props.isAddCollectionFieldVisible && - !collectionLimitReached ? ( - - ) : null} -
- {collectionLimitReached ? ( - - ) : null} - -
- {state.siweChecked ? ( - - - - ) : null} -
-
-
-
- {selectedCollection !== null ? ( - - ) : null} - {selectedCollection !== null ? ( - - ) : null} - {selectedCollection !== null ? ( - - ) : null} - {pendingNetwork !== null ? ( - - ) : null} - - ); - }; - -const Web3ConfigurationScreen: React.VFC = function Web3ConfigurationScreen() { - const { appID } = useParams() as { appID: string }; - const [isConfirmationDialogVisible, setIsConfirmationDialogVisible] = - useState(false); - - const [isAddCollectionFieldVisible, setIsAddCollectionFieldVisible] = - useState(false); - - const nftCollections = useNftCollectionsQuery(appID); - - const featureConfig = useAppFeatureConfigQuery(appID); - - const { fetch: fetchMetadata, error: fetchMetadataError } = - useNftContractMetadataLazyQuery(); - - const { probeNFTCollection, error: probeNFTCollectionError } = - useProbeNFTCollectionMutation(); - - const constructFormState = useCallback( - (config: PortalAPIAppConfig) => { - const siweIndex = config.authentication?.identities?.indexOf("siwe"); - const siweChecked = siweIndex != null && siweIndex >= 0; - - let siweNetworks = (config.web3?.siwe?.networks ?? []).map((n) => - parseNetworkID(n) - ); - if (siweNetworks.length === 0) { - siweNetworks = [ - { - blockchain: "ethereum", - network: "1", - }, - ]; - } - - // We support 1 chain for now - const [selectedNetwork] = siweNetworks; - - const contractIDs = config.web3?.nft?.collections ?? []; - - const collectionMap = new Map(); - nftCollections.collections.forEach((c) => { - collectionMap.set( - createContractIDURL({ - blockchain: c.blockchain, - network: c.network, - address: c.contractAddress, - }), - c - ); - }); - - const existingCollections = contractIDs - .map((c) => parseContractID(c)) - .map((cid) => { - const collection = collectionMap.get( - createContractIDURL({ - blockchain: cid.blockchain, - network: cid.network, - address: cid.address, - }) - ); - - const tokens = cid.query?.getAll("token_ids") ?? []; - - if (!collection) { - return null; - } - - return { - ...collection, - tokenIDs: tokens, - status: "active", - }; - }) - .filter((c): c is CollectionItem => c !== null); - - return { - siweChecked, - collections: existingCollections, - network: selectedNetwork, - }; - }, - [nftCollections] - ); - - const form = useAppConfigForm({ - appID, - constructFormState, - constructConfig, - }); - - const openConfirmationDialog = useCallback(() => { - setIsConfirmationDialogVisible(true); - }, [setIsConfirmationDialogVisible]); - - const dismissConfirmationDialog = useCallback(() => { - setIsConfirmationDialogVisible(false); - }, [setIsConfirmationDialogVisible]); - - const showAddCollectionField = useCallback(() => { - setIsAddCollectionFieldVisible(true); - }, []); - - const hideAddCollectionField = useCallback(() => { - setIsAddCollectionFieldVisible(false); - }, []); - - const saveForm = useCallback(async () => { - dismissConfirmationDialog(); - hideAddCollectionField(); - - await form.save(); - - await nftCollections.refetch(); - }, [form, nftCollections, dismissConfirmationDialog, hideAddCollectionField]); - - const onFormSave = useCallback(async () => { - openConfirmationDialog(); - }, [openConfirmationDialog]); - - const formModel: FormModel = { - ...form, - save: onFormSave, - }; - - const errorRules: ErrorParseRule[] = useMemo(() => { - return [ - makeReasonErrorParseRule( - "ServiceUnavailable", - "errors.service-unavailable" - ), - makeReasonErrorParseRule("BadNFTCollection", "errors.bad-nft-collection"), - ]; - }, []); - - const collectionsMaximum = useMemo(() => { - return featureConfig.effectiveFeatureConfig?.web3?.nft?.maximum ?? 3; - }, [featureConfig]); - - if (form.isLoading || nftCollections.loading) { - return ; - } - - if (form.loadError) { - return ( - { - form.reload(); - }} - /> - ); - } - - if (nftCollections.error) { - return ( - - ); - } - - return ( - - - - - - ); -}; - -export default Web3ConfigurationScreen; diff --git a/portal/src/graphql/portal/Web3ConfigurationTokenTrackingDialog.tsx b/portal/src/graphql/portal/Web3ConfigurationTokenTrackingDialog.tsx deleted file mode 100644 index f5e551392a..0000000000 --- a/portal/src/graphql/portal/Web3ConfigurationTokenTrackingDialog.tsx +++ /dev/null @@ -1,129 +0,0 @@ -import React, { useCallback, useContext, useMemo, useState } from "react"; -import { Dialog, DialogFooter, Text } from "@fluentui/react"; -import { Context, FormattedMessage } from "@oursky/react-messageformat"; -import DefaultButton from "../../DefaultButton"; -import PrimaryButton from "../../PrimaryButton"; -import TextField from "../../TextField"; -import { convertToHexstring, parseHexstring } from "../../util/hex"; - -const TOKEN_ID_REGEX = /^0x[a-fA-F0-9]+$/; -const DIALOG_MAX_WIDTH = "33%"; -const MAX_TOKEN_COUNT = 10; - -interface Web3ConfigurationTokenTrackingDialogProps { - isVisible: boolean; - initialValue?: string[]; - onContinue: (tokenIDs: string[]) => void; - onDismiss: () => void; -} -const Web3ConfigurationTokenTrackingDialog: React.VFC< - Web3ConfigurationTokenTrackingDialogProps -> = (props) => { - const { isVisible, initialValue, onContinue, onDismiss } = props; - const [validationErrorId, setValidationErrorId] = useState( - null - ); - - const { renderToString } = useContext(Context); - - const defaultValue = useMemo(() => { - if (!initialValue) { - return []; - } - - return initialValue.map((i) => parseHexstring(i)); - }, [initialValue]); - - const [value, setValue] = useState(defaultValue); - - const dialogContentProps = useMemo(() => { - return { - title: ( - - ), - subText: renderToString( - "Web3ConfigurationScreen.collection-list.add-collection.toke-tracking-dialog.description" - ), - }; - }, [renderToString]); - - const tokenIDs = useMemo(() => { - return value.join("\n"); - }, [value]); - - const onTextChange = useCallback( - (_, newValue?: string) => { - setValidationErrorId(null); - const tokens = newValue?.split("\n") ?? []; - if ( - tokens.length <= 1 || - (tokens.length <= MAX_TOKEN_COUNT && tokens[tokens.length - 2]) - ) { - setValue(tokens); - } - }, - [setValue] - ); - - const onProceed = useCallback(() => { - const hexValues = value.map((v) => convertToHexstring(v)); - if (!hexValues.every((t) => TOKEN_ID_REGEX.test(t))) { - setValidationErrorId("errors.invalid-token-id"); - return; - } - - onContinue(hexValues); - }, [value, onContinue]); - - const onCancel = useCallback(() => { - setValue(defaultValue); - - onDismiss(); - }, [defaultValue, onDismiss]); - - return ( - - ); -}; - -export default Web3ConfigurationTokenTrackingDialog; diff --git a/portal/src/graphql/portal/mutations/probeNFTCollectionMutation.generated.ts b/portal/src/graphql/portal/mutations/probeNFTCollectionMutation.generated.ts deleted file mode 100644 index b3f5146b1d..0000000000 --- a/portal/src/graphql/portal/mutations/probeNFTCollectionMutation.generated.ts +++ /dev/null @@ -1,46 +0,0 @@ -import * as Types from '../globalTypes.generated'; - -import { gql } from '@apollo/client'; -import * as Apollo from '@apollo/client'; -const defaultOptions = {} as const; -export type ProbeNftCollectionMutationMutationVariables = Types.Exact<{ - contractID: Types.Scalars['String']['input']; -}>; - - -export type ProbeNftCollectionMutationMutation = { __typename?: 'Mutation', probeNFTCollection: { __typename?: 'ProbeNFTCollectionsPayload', isLargeCollection: boolean } }; - - -export const ProbeNftCollectionMutationDocument = gql` - mutation probeNFTCollectionMutation($contractID: String!) { - probeNFTCollection(input: {contractID: $contractID}) { - isLargeCollection - } -} - `; -export type ProbeNftCollectionMutationMutationFn = Apollo.MutationFunction; - -/** - * __useProbeNftCollectionMutationMutation__ - * - * To run a mutation, you first call `useProbeNftCollectionMutationMutation` within a React component and pass it any options that fit your needs. - * When your component renders, `useProbeNftCollectionMutationMutation` returns a tuple that includes: - * - A mutate function that you can call at any time to execute the mutation - * - An object with fields that represent the current status of the mutation's execution - * - * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; - * - * @example - * const [probeNftCollectionMutationMutation, { data, loading, error }] = useProbeNftCollectionMutationMutation({ - * variables: { - * contractID: // value for 'contractID' - * }, - * }); - */ -export function useProbeNftCollectionMutationMutation(baseOptions?: Apollo.MutationHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useMutation(ProbeNftCollectionMutationDocument, options); - } -export type ProbeNftCollectionMutationMutationHookResult = ReturnType; -export type ProbeNftCollectionMutationMutationResult = Apollo.MutationResult; -export type ProbeNftCollectionMutationMutationOptions = Apollo.BaseMutationOptions; \ No newline at end of file diff --git a/portal/src/graphql/portal/mutations/probeNFTCollectionMutation.graphql b/portal/src/graphql/portal/mutations/probeNFTCollectionMutation.graphql deleted file mode 100644 index dab707fbf4..0000000000 --- a/portal/src/graphql/portal/mutations/probeNFTCollectionMutation.graphql +++ /dev/null @@ -1,5 +0,0 @@ -mutation probeNFTCollectionMutation($contractID: String!) { - probeNFTCollection(input: { contractID: $contractID }) { - isLargeCollection - } -} diff --git a/portal/src/graphql/portal/mutations/probeNFTCollectionMutation.ts b/portal/src/graphql/portal/mutations/probeNFTCollectionMutation.ts deleted file mode 100644 index 1792cf7cb6..0000000000 --- a/portal/src/graphql/portal/mutations/probeNFTCollectionMutation.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { useCallback } from "react"; -import { useMutation } from "@apollo/client"; - -import { usePortalClient } from "../apollo"; -import { - ProbeNftCollectionMutationMutation, - ProbeNftCollectionMutationDocument, -} from "./probeNFTCollectionMutation.generated"; - -export function useProbeNFTCollectionMutation(): { - probeNFTCollection: (contractId: string) => Promise; - loading: boolean; - error: unknown; -} { - const client = usePortalClient(); - const [mutationFunction, { error, loading }] = - useMutation( - ProbeNftCollectionMutationDocument, - { - client, - } - ); - const probeNFTCollection = useCallback( - async (contractId: string) => { - const res = await mutationFunction({ - variables: { contractID: contractId }, - }); - return res.data?.probeNFTCollection.isLargeCollection ?? false; - }, - [mutationFunction] - ); - - return { probeNFTCollection, error, loading }; -} diff --git a/portal/src/graphql/portal/query/nftCollectionsQuery.generated.ts b/portal/src/graphql/portal/query/nftCollectionsQuery.generated.ts deleted file mode 100644 index 268dae003f..0000000000 --- a/portal/src/graphql/portal/query/nftCollectionsQuery.generated.ts +++ /dev/null @@ -1,65 +0,0 @@ -import * as Types from '../globalTypes.generated'; - -import { gql } from '@apollo/client'; -import * as Apollo from '@apollo/client'; -const defaultOptions = {} as const; -export type NftCollectionsQueryQueryVariables = Types.Exact<{ - appID: Types.Scalars['ID']['input']; -}>; - - -export type NftCollectionsQueryQuery = { __typename?: 'Query', node?: { __typename: 'App', id: string, nftCollections: Array<{ __typename?: 'NFTCollection', name: string, blockchain: string, network: string, contractAddress: string, totalSupply?: string | null, tokenType: string, createdAt: any }> } | { __typename: 'User' } | { __typename: 'Viewer' } | null }; - - -export const NftCollectionsQueryDocument = gql` - query nftCollectionsQuery($appID: ID!) { - node(id: $appID) { - __typename - ... on App { - id - nftCollections { - name - blockchain - network - contractAddress - totalSupply - tokenType - createdAt - } - } - } -} - `; - -/** - * __useNftCollectionsQueryQuery__ - * - * To run a query within a React component, call `useNftCollectionsQueryQuery` and pass it any options that fit your needs. - * When your component renders, `useNftCollectionsQueryQuery` returns an object from Apollo Client that contains loading, error, and data properties - * you can use to render your UI. - * - * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options; - * - * @example - * const { data, loading, error } = useNftCollectionsQueryQuery({ - * variables: { - * appID: // value for 'appID' - * }, - * }); - */ -export function useNftCollectionsQueryQuery(baseOptions: Apollo.QueryHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useQuery(NftCollectionsQueryDocument, options); - } -export function useNftCollectionsQueryLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useLazyQuery(NftCollectionsQueryDocument, options); - } -export function useNftCollectionsQuerySuspenseQuery(baseOptions?: Apollo.SuspenseQueryHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useSuspenseQuery(NftCollectionsQueryDocument, options); - } -export type NftCollectionsQueryQueryHookResult = ReturnType; -export type NftCollectionsQueryLazyQueryHookResult = ReturnType; -export type NftCollectionsQuerySuspenseQueryHookResult = ReturnType; -export type NftCollectionsQueryQueryResult = Apollo.QueryResult; \ No newline at end of file diff --git a/portal/src/graphql/portal/query/nftCollectionsQuery.graphql b/portal/src/graphql/portal/query/nftCollectionsQuery.graphql deleted file mode 100644 index 8740d884e7..0000000000 --- a/portal/src/graphql/portal/query/nftCollectionsQuery.graphql +++ /dev/null @@ -1,17 +0,0 @@ -query nftCollectionsQuery($appID: ID!) { - node(id: $appID) { - __typename - ... on App { - id - nftCollections { - name - blockchain - network - contractAddress - totalSupply - tokenType - createdAt - } - } - } -} diff --git a/portal/src/graphql/portal/query/nftCollectionsQuery.ts b/portal/src/graphql/portal/query/nftCollectionsQuery.ts deleted file mode 100644 index 00c942abc1..0000000000 --- a/portal/src/graphql/portal/query/nftCollectionsQuery.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { QueryResult, useQuery } from "@apollo/client"; -import { useMemo } from "react"; -import { usePortalClient } from "../../portal/apollo"; -import { NftCollection } from "../globalTypes.generated"; -import { - NftCollectionsQueryQuery, - NftCollectionsQueryQueryVariables, - NftCollectionsQueryDocument, -} from "./nftCollectionsQuery.generated"; - -interface NftCollectionsQueryResult - extends Pick< - QueryResult, - "loading" | "error" | "refetch" - > { - collections: NftCollection[]; -} - -export function useNftCollectionsQuery( - appID: string -): NftCollectionsQueryResult { - const client = usePortalClient(); - const { data, loading, error, refetch } = useQuery( - NftCollectionsQueryDocument, - { - client, - variables: { - appID, - }, - } - ); - - const collections = useMemo(() => { - const appNode = data?.node?.__typename === "App" ? data.node : null; - return appNode?.nftCollections ?? []; - }, [data]); - - return { collections, loading, error, refetch }; -} diff --git a/portal/src/graphql/portal/query/nftContractMetadataQuery.generated.ts b/portal/src/graphql/portal/query/nftContractMetadataQuery.generated.ts deleted file mode 100644 index 3fc53df146..0000000000 --- a/portal/src/graphql/portal/query/nftContractMetadataQuery.generated.ts +++ /dev/null @@ -1,59 +0,0 @@ -import * as Types from '../globalTypes.generated'; - -import { gql } from '@apollo/client'; -import * as Apollo from '@apollo/client'; -const defaultOptions = {} as const; -export type NftContractMetadataQueryQueryVariables = Types.Exact<{ - contractID: Types.Scalars['String']['input']; -}>; - - -export type NftContractMetadataQueryQuery = { __typename?: 'Query', nftContractMetadata?: { __typename?: 'NFTCollection', name: string, blockchain: string, network: string, contractAddress: string, totalSupply?: string | null, tokenType: string, createdAt: any } | null }; - - -export const NftContractMetadataQueryDocument = gql` - query nftContractMetadataQuery($contractID: String!) { - nftContractMetadata(contractID: $contractID) { - name - blockchain - network - contractAddress - totalSupply - tokenType - createdAt - } -} - `; - -/** - * __useNftContractMetadataQueryQuery__ - * - * To run a query within a React component, call `useNftContractMetadataQueryQuery` and pass it any options that fit your needs. - * When your component renders, `useNftContractMetadataQueryQuery` returns an object from Apollo Client that contains loading, error, and data properties - * you can use to render your UI. - * - * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options; - * - * @example - * const { data, loading, error } = useNftContractMetadataQueryQuery({ - * variables: { - * contractID: // value for 'contractID' - * }, - * }); - */ -export function useNftContractMetadataQueryQuery(baseOptions: Apollo.QueryHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useQuery(NftContractMetadataQueryDocument, options); - } -export function useNftContractMetadataQueryLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useLazyQuery(NftContractMetadataQueryDocument, options); - } -export function useNftContractMetadataQuerySuspenseQuery(baseOptions?: Apollo.SuspenseQueryHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useSuspenseQuery(NftContractMetadataQueryDocument, options); - } -export type NftContractMetadataQueryQueryHookResult = ReturnType; -export type NftContractMetadataQueryLazyQueryHookResult = ReturnType; -export type NftContractMetadataQuerySuspenseQueryHookResult = ReturnType; -export type NftContractMetadataQueryQueryResult = Apollo.QueryResult; \ No newline at end of file diff --git a/portal/src/graphql/portal/query/nftContractMetadataQuery.graphql b/portal/src/graphql/portal/query/nftContractMetadataQuery.graphql deleted file mode 100644 index 733d75b6aa..0000000000 --- a/portal/src/graphql/portal/query/nftContractMetadataQuery.graphql +++ /dev/null @@ -1,11 +0,0 @@ -query nftContractMetadataQuery($contractID: String!) { - nftContractMetadata(contractID: $contractID) { - name - blockchain - network - contractAddress - totalSupply - tokenType - createdAt - } -} diff --git a/portal/src/graphql/portal/query/nftContractMetadataQuery.ts b/portal/src/graphql/portal/query/nftContractMetadataQuery.ts deleted file mode 100644 index dc13ca96e1..0000000000 --- a/portal/src/graphql/portal/query/nftContractMetadataQuery.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { useLazyQuery } from "@apollo/client"; -import { useCallback } from "react"; -import { usePortalClient } from "../apollo"; -import { NftCollection } from "../globalTypes.generated"; -import { - NftContractMetadataQueryQuery, - NftContractMetadataQueryDocument, -} from "./nftContractMetadataQuery.generated"; - -interface NftContractMetadataQueryResult { - fetch: (contractId: string) => Promise; - loading: boolean; - error: unknown; -} - -export function useNftContractMetadataLazyQuery(): NftContractMetadataQueryResult { - const client = usePortalClient(); - const [fetch, { loading, error }] = - useLazyQuery( - NftContractMetadataQueryDocument, - { - client, - } - ); - - const fetchData = useCallback( - async (contractId: string) => { - const res = await fetch({ - variables: { - contractID: contractId, - }, - }); - - return res.data?.nftContractMetadata ?? null; - }, - [fetch] - ); - - return { fetch: fetchData, loading, error }; -} diff --git a/portal/src/system-config.ts b/portal/src/system-config.ts index b03ff927ff..a040e2072a 100644 --- a/portal/src/system-config.ts +++ b/portal/src/system-config.ts @@ -12,7 +12,6 @@ export interface SystemConfig { themes: SystemConfigThemes; translations: SystemConfigTranslations; searchEnabled: boolean; - web3Enabled: boolean; auditLogEnabled: boolean; gitCommitHash: string; analyticEnabled: boolean; @@ -263,7 +262,6 @@ export function instantiateSystemConfig( en: config.translations?.en ?? {}, }, searchEnabled: config.searchEnabled ?? false, - web3Enabled: config.web3Enabled ?? false, auditLogEnabled: config.auditLogEnabled ?? false, gitCommitHash: config.gitCommitHash ?? "", analyticEnabled: config.analyticEnabled ?? false, diff --git a/portal/src/util/contractId.test.ts b/portal/src/util/contractId.test.ts deleted file mode 100644 index b4629aea48..0000000000 --- a/portal/src/util/contractId.test.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { describe, it, expect } from "@jest/globals"; -import { parseContractID, ContractID, createContractIDURL } from "./contractId"; - -describe("ContractID", () => { - it("parses contract id", () => { - function test(uri: string, expected: ContractID) { - const contractId = parseContractID(uri); - - expect(contractId).toEqual(expected); - } - - test("ethereum:0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d@1", { - blockchain: "ethereum", - network: "1", - address: "0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d", - }); - - test( - "ethereum:0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d@1?token_ids=0x1&token_ids=0x2", - { - blockchain: "ethereum", - network: "1", - address: "0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d", - query: new URLSearchParams([ - ["token_ids", "0x1"], - ["token_ids", "0x2"], - ]), - } - ); - }); - - it("generate contract id url", () => { - function test(contractId: ContractID, expected: string) { - const url = createContractIDURL(contractId); - - expect(url).toEqual(expected); - } - - test( - { - blockchain: "ethereum", - network: "1", - address: "0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d", - }, - "ethereum:0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d@1" - ); - - test( - { - blockchain: "ethereum", - network: "1", - address: "0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d", - query: new URLSearchParams([ - ["token_ids", "0x1"], - ["token_ids", "0x2"], - ]), - }, - "ethereum:0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d@1?token_ids=0x1&token_ids=0x2" - ); - }); -}); diff --git a/portal/src/util/contractId.ts b/portal/src/util/contractId.ts deleted file mode 100644 index f9f0b7d49a..0000000000 --- a/portal/src/util/contractId.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { createEIP681URL, parseEIP681 } from "./eip681"; - -export interface ContractID { - blockchain: string; - network: string; - address: string; - query?: URLSearchParams; -} - -export function parseContractID( - url: string, - skipAddressCheck: boolean = false -): ContractID { - const curl = new URL(url); - - const protocol = curl.protocol.replace(":", ""); - - switch (protocol) { - case "ethereum": { - const eip681 = parseEIP681(url, skipAddressCheck); - - return { - blockchain: "ethereum", - network: eip681.chainId.toString(), - address: eip681.address, - query: eip681.query, - }; - } - - default: - throw new Error(`Unknown protocol: ${protocol}`); - } -} - -export function createContractIDURL(contractId: ContractID): string { - switch (contractId.blockchain) { - case "ethereum": - return createEIP681URL({ - chainId: parseInt(contractId.network, 10), - address: contractId.address, - query: contractId.query, - }); - default: - throw new Error(`Unknown blockchain: ${contractId.blockchain}`); - } -} diff --git a/portal/src/util/networkId.test.ts b/portal/src/util/networkId.test.ts deleted file mode 100644 index 760a0c6fc4..0000000000 --- a/portal/src/util/networkId.test.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { describe, it, expect } from "@jest/globals"; -import { createNetworkIDURL, NetworkID, parseNetworkID } from "./networkId"; - -describe("NetworkId", () => { - it("parses network id", () => { - function test(uri: string, expected: NetworkID) { - const networkId = parseNetworkID(uri); - - expect(networkId).toEqual(expected); - } - - test("ethereum:0x0@1", { - blockchain: "ethereum", - network: "1", - }); - }); - - it("generate network id url", () => { - function test(networkId: NetworkID, expected: string) { - const url = createNetworkIDURL(networkId); - - expect(url).toEqual(expected); - } - - test( - { - blockchain: "ethereum", - network: "1", - }, - "ethereum:0x0@1" - ); - }); -}); diff --git a/portal/src/util/networkId.ts b/portal/src/util/networkId.ts deleted file mode 100644 index c13ab49913..0000000000 --- a/portal/src/util/networkId.ts +++ /dev/null @@ -1,87 +0,0 @@ -import { createEIP681URL, parseEIP681 } from "./eip681"; - -export const ALL_SUPPORTED_NETWORKS: NetworkID[] = [ - { - blockchain: "ethereum", - network: "1", - }, - { - blockchain: "ethereum", - network: "5", - }, - { - blockchain: "ethereum", - network: "137", - }, - { - blockchain: "ethereum", - network: "80001", - }, -]; -export interface NetworkID { - blockchain: string; - network: string; -} - -export function sameNetworkID(a: NetworkID, b: NetworkID): boolean { - return a.blockchain === b.blockchain && a.network === b.network; -} - -export function parseNetworkID(url: string): NetworkID { - const curl = new URL(url); - - const protocol = curl.protocol.replace(":", ""); - - switch (protocol) { - case "ethereum": { - const eip681 = parseEIP681(url, true); - - if (eip681.address !== "0x0") { - throw new Error(`Unknown network Id: ${url}`); - } - - return { - blockchain: "ethereum", - network: eip681.chainId.toString(), - }; - } - - default: - throw new Error(`Unknown protocol: ${protocol}`); - } -} - -export function createNetworkIDURL(networkID: NetworkID): string { - switch (networkID.blockchain) { - case "ethereum": - return createEIP681URL( - { - chainId: parseInt(networkID.network, 10), - address: "0x0", - }, - true - ); - default: - throw new Error(`Unknown blockchain: ${networkID.blockchain}`); - } -} - -export function getNetworkNameID(networkID: NetworkID): string { - switch (networkID.blockchain) { - case "ethereum": - switch (networkID.network) { - case "1": - return "NetworkId.ethereum-mainnet"; - case "5": - return "NetworkId.ethereum-goerli"; - case "137": - return "NetworkId.polygon-mainnet"; - case "80001": - return "NetworkId.polygon-mumbai"; - default: - throw new Error(`Unsupported chain id: ${networkID.network}`); - } - default: - throw new Error(`Unsupported blockchain: ${networkID.blockchain}`); - } -} From 7db8c2cf0db5afff69ca14dbb3ec5fc850f54f4a Mon Sep 17 00:00:00 2001 From: Louis Chan Date: Thu, 5 Dec 2024 11:56:21 +0800 Subject: [PATCH 02/22] Remove WEB3_ENABLED from portal backend --- cmd/portal/server/config.go | 2 -- cmd/portal/server/server.go | 1 - pkg/portal/config/web3.go | 5 ----- pkg/portal/deps/deps.go | 1 - pkg/portal/deps/providers.go | 3 --- pkg/portal/model/system_config.go | 1 - pkg/portal/service/system_config.go | 2 -- pkg/portal/wire_gen.go | 2 -- 8 files changed, 17 deletions(-) delete mode 100644 pkg/portal/config/web3.go diff --git a/cmd/portal/server/config.go b/cmd/portal/server/config.go index d11e7728d5..f419be27ca 100644 --- a/cmd/portal/server/config.go +++ b/cmd/portal/server/config.go @@ -60,8 +60,6 @@ type Config struct { PortalFrontendSentry portalconfig.PortalFrontendSentryConfig `envconfig:"PORTAL_FRONTEND_SENTRY"` - Web3 portalconfig.Web3Config `envconfig:"WEB3"` - *config.EnvironmentConfig } diff --git a/cmd/portal/server/server.go b/cmd/portal/server/server.go index 5a93121564..0128c99347 100644 --- a/cmd/portal/server/server.go +++ b/cmd/portal/server/server.go @@ -38,7 +38,6 @@ func (c *Controller) Start(ctx context.Context) { &cfg.Kubernetes, cfg.DomainImplementation, &cfg.Search, - &cfg.Web3, &cfg.AuditLog, &cfg.Analytic, &cfg.Stripe, diff --git a/pkg/portal/config/web3.go b/pkg/portal/config/web3.go deleted file mode 100644 index 8801cecd07..0000000000 --- a/pkg/portal/config/web3.go +++ /dev/null @@ -1,5 +0,0 @@ -package config - -type Web3Config struct { - Enabled bool `envconfig:"ENABLED" default:"false"` -} diff --git a/pkg/portal/deps/deps.go b/pkg/portal/deps/deps.go index 018236dee9..592766bbae 100644 --- a/pkg/portal/deps/deps.go +++ b/pkg/portal/deps/deps.go @@ -55,7 +55,6 @@ var DependencySet = wire.NewSet( "KubernetesConfig", "DomainImplementation", "SearchConfig", - "Web3Config", "AuditLogConfig", "AnalyticConfig", "StripeConfig", diff --git a/pkg/portal/deps/providers.go b/pkg/portal/deps/providers.go index 239968f24a..abb2e1d38c 100644 --- a/pkg/portal/deps/providers.go +++ b/pkg/portal/deps/providers.go @@ -31,7 +31,6 @@ type RootProvider struct { KubernetesConfig *portalconfig.KubernetesConfig DomainImplementation portalconfig.DomainImplementationType SearchConfig *portalconfig.SearchConfig - Web3Config *portalconfig.Web3Config AuditLogConfig *portalconfig.AuditLogConfig AnalyticConfig *config.AnalyticConfig StripeConfig *portalconfig.StripeConfig @@ -65,7 +64,6 @@ func NewRootProvider( kubernetesConfig *portalconfig.KubernetesConfig, domainImplementation portalconfig.DomainImplementationType, searchConfig *portalconfig.SearchConfig, - web3Config *portalconfig.Web3Config, auditLogConfig *portalconfig.AuditLogConfig, analyticConfig *config.AnalyticConfig, stripeConfig *portalconfig.StripeConfig, @@ -111,7 +109,6 @@ func NewRootProvider( KubernetesConfig: kubernetesConfig, DomainImplementation: domainImplementation, SearchConfig: searchConfig, - Web3Config: web3Config, AuditLogConfig: auditLogConfig, AnalyticConfig: analyticConfig, StripeConfig: stripeConfig, diff --git a/pkg/portal/model/system_config.go b/pkg/portal/model/system_config.go index c5484013c2..24c48528a6 100644 --- a/pkg/portal/model/system_config.go +++ b/pkg/portal/model/system_config.go @@ -14,7 +14,6 @@ type SystemConfig struct { Themes interface{} `json:"themes,omitempty"` Translations interface{} `json:"translations,omitempty"` SearchEnabled bool `json:"searchEnabled"` - Web3Enabled bool `json:"web3Enabled"` AuditLogEnabled bool `json:"auditLogEnabled"` AnalyticEnabled bool `json:"analyticEnabled"` AnalyticEpoch *timeutil.Date `json:"analyticEpoch,omitempty"` diff --git a/pkg/portal/service/system_config.go b/pkg/portal/service/system_config.go index 6d49668c7c..536e294041 100644 --- a/pkg/portal/service/system_config.go +++ b/pkg/portal/service/system_config.go @@ -23,7 +23,6 @@ type SystemConfigProvider struct { AuthgearConfig *config.AuthgearConfig AppConfig *config.AppConfig SearchConfig *config.SearchConfig - Web3Config *config.Web3Config AuditLogConfig *config.AuditLogConfig AnalyticConfig *configlib.AnalyticConfig GTMConfig *config.GoogleTagManagerConfig @@ -59,7 +58,6 @@ func (p *SystemConfigProvider) SystemConfig() (*model.SystemConfig, error) { Themes: themes, Translations: translations, SearchEnabled: p.SearchConfig.Enabled, - Web3Enabled: p.Web3Config.Enabled, AuditLogEnabled: p.AuditLogConfig.Enabled, AnalyticEnabled: p.AnalyticConfig.Enabled, AnalyticEpoch: analyticEpoch, diff --git a/pkg/portal/wire_gen.go b/pkg/portal/wire_gen.go index fa245abe9d..55feb16e2d 100644 --- a/pkg/portal/wire_gen.go +++ b/pkg/portal/wire_gen.go @@ -378,7 +378,6 @@ func newSystemConfigHandler(p *deps.RequestProvider) http.Handler { authgearConfig := rootProvider.AuthgearConfig appConfig := rootProvider.AppConfig searchConfig := rootProvider.SearchConfig - web3Config := rootProvider.Web3Config auditLogConfig := rootProvider.AuditLogConfig analyticConfig := rootProvider.AnalyticConfig googleTagManagerConfig := rootProvider.GoogleTagManagerConfig @@ -391,7 +390,6 @@ func newSystemConfigHandler(p *deps.RequestProvider) http.Handler { AuthgearConfig: authgearConfig, AppConfig: appConfig, SearchConfig: searchConfig, - Web3Config: web3Config, AuditLogConfig: auditLogConfig, AnalyticConfig: analyticConfig, GTMConfig: googleTagManagerConfig, From 8e5a3f6e0b8bb5fa09d2a839cca027f871b3354f Mon Sep 17 00:00:00 2001 From: Louis Chan Date: Thu, 5 Dec 2024 12:02:26 +0800 Subject: [PATCH 03/22] Remove web3 related things from portal graphql endpoint --- pkg/portal/graphql/app.go | 37 ------------ pkg/portal/graphql/query.go | 32 ---------- pkg/portal/graphql/web3.go | 46 -------------- pkg/portal/graphql/web3_mutation.go | 60 ------------------- portal/src/graphql/portal/apollo.ts | 4 -- .../graphql/portal/globalTypes.generated.ts | 36 ----------- portal/src/graphql/portal/schema.graphql | 45 -------------- 7 files changed, 260 deletions(-) delete mode 100644 pkg/portal/graphql/web3.go delete mode 100644 pkg/portal/graphql/web3_mutation.go diff --git a/pkg/portal/graphql/app.go b/pkg/portal/graphql/app.go index 105013be2f..af701efb78 100644 --- a/pkg/portal/graphql/app.go +++ b/pkg/portal/graphql/app.go @@ -14,7 +14,6 @@ import ( "github.com/authgear/authgear-server/pkg/portal/service" "github.com/authgear/authgear-server/pkg/portal/session" "github.com/authgear/authgear-server/pkg/util/resource" - "github.com/authgear/authgear-server/pkg/util/web3" ) var oauthSSOProviderClientSecret = graphql.NewObject(graphql.ObjectConfig{ @@ -601,42 +600,6 @@ var nodeApp = node( return entry, nil }, }, - "nftCollections": &graphql.Field{ - Type: graphql.NewNonNull(graphql.NewList(graphql.NewNonNull(nftCollection))), - Resolve: func(p graphql.ResolveParams) (interface{}, error) { - ctx := p.Context - gqlCtx := GQLContext(ctx) - config := p.Source.(*model.App).Context.Config.AppConfig - if config.Web3 == nil { - return []interface{}{}, nil - } - - if config.Web3.NFT == nil { - return []interface{}{}, nil - } - - if len(config.Web3.NFT.Collections) == 0 { - return []interface{}{}, nil - } - - contractIDs := make([]web3.ContractID, 0, len(config.Web3.NFT.Collections)) - for _, url := range config.Web3.NFT.Collections { - contractID, err := web3.ParseContractID(url) - if err != nil { - return nil, err - } - - contractIDs = append(contractIDs, *contractID) - } - - collections, err := gqlCtx.NFTService.GetContractMetadata(ctx, contractIDs) - if err != nil { - return nil, err - } - - return collections, nil - }, - }, "samlIdpEntityID": &graphql.Field{ Type: graphql.NewNonNull(graphql.String), Resolve: func(p graphql.ResolveParams) (interface{}, error) { diff --git a/pkg/portal/graphql/query.go b/pkg/portal/graphql/query.go index 24ef9d3026..c4739da4b6 100644 --- a/pkg/portal/graphql/query.go +++ b/pkg/portal/graphql/query.go @@ -6,11 +6,9 @@ import ( "github.com/graphql-go/graphql" - "github.com/authgear/authgear-server/pkg/api/apierrors" "github.com/authgear/authgear-server/pkg/portal/service" "github.com/authgear/authgear-server/pkg/portal/session" "github.com/authgear/authgear-server/pkg/util/graphqlutil" - "github.com/authgear/authgear-server/pkg/util/web3" ) var checkCollaboratorInvitationPayload = graphql.NewObject(graphql.ObjectConfig{ @@ -273,35 +271,5 @@ var query = graphql.NewObject(graphql.ObjectConfig{ return plans, nil }, }, - "nftContractMetadata": &graphql.Field{ - Description: "Fetch NFT Contract Metadata", - Type: nftCollection, - Args: graphql.FieldConfigArgument{ - "contractID": &graphql.ArgumentConfig{ - Type: graphql.NewNonNull(graphql.String), - }, - }, - Resolve: func(p graphql.ResolveParams) (interface{}, error) { - ctx := p.Context - gqlCtx := GQLContext(ctx) - contractURL := p.Args["contractID"].(string) - - contractID, err := web3.ParseContractID(contractURL) - if err != nil { - return nil, err - } - - metadata, err := gqlCtx.NFTService.GetContractMetadata(ctx, []web3.ContractID{*contractID}) - if err != nil { - return nil, err - } - - if len(metadata) == 0 { - return nil, apierrors.NewInternalError("failed to fetch contract metadata") - } - - return metadata[0], nil - }, - }, }, }) diff --git a/pkg/portal/graphql/web3.go b/pkg/portal/graphql/web3.go deleted file mode 100644 index 565313ddd3..0000000000 --- a/pkg/portal/graphql/web3.go +++ /dev/null @@ -1,46 +0,0 @@ -package graphql - -import ( - "github.com/graphql-go/graphql" - - "github.com/authgear/authgear-server/pkg/api/model" -) - -const typeNFTCollection = "NFTCollection" - -var nftCollection = graphql.NewObject(graphql.ObjectConfig{ - Name: typeNFTCollection, - Description: "Web3 NFT Collection", - Fields: graphql.Fields{ - "blockchain": &graphql.Field{ - Type: graphql.NewNonNull(graphql.String), - }, - "network": &graphql.Field{ - Type: graphql.NewNonNull(graphql.String), - }, - "name": &graphql.Field{ - Type: graphql.NewNonNull(graphql.String), - }, - "contractAddress": &graphql.Field{ - Type: graphql.NewNonNull(graphql.String), - }, - "totalSupply": &graphql.Field{ - Type: graphql.String, - Resolve: func(p graphql.ResolveParams) (interface{}, error) { - source := p.Source.(model.NFTCollection) - - if source.TotalSupply == nil { - return nil, nil - } - - return source.TotalSupply.String(), nil - }, - }, - "tokenType": &graphql.Field{ - Type: graphql.NewNonNull(graphql.String), - }, - "createdAt": &graphql.Field{ - Type: graphql.NewNonNull(graphql.DateTime), - }, - }, -}) diff --git a/pkg/portal/graphql/web3_mutation.go b/pkg/portal/graphql/web3_mutation.go deleted file mode 100644 index b3dbee0d58..0000000000 --- a/pkg/portal/graphql/web3_mutation.go +++ /dev/null @@ -1,60 +0,0 @@ -package graphql - -import ( - "github.com/graphql-go/graphql" - - "github.com/authgear/authgear-server/pkg/util/graphqlutil" - "github.com/authgear/authgear-server/pkg/util/web3" -) - -var probeNFTCollectionInput = graphql.NewInputObject(graphql.InputObjectConfig{ - Name: "ProbeNFTCollectionInput", - Fields: graphql.InputObjectConfigFieldMap{ - "contractID": &graphql.InputObjectFieldConfig{ - Type: graphql.NewNonNull(graphql.String), - }, - }, -}) - -var probeNFTCollectionsPayload = graphql.NewObject(graphql.ObjectConfig{ - Name: "ProbeNFTCollectionsPayload", - Fields: graphql.Fields{ - "isLargeCollection": &graphql.Field{ - Type: graphql.NewNonNull(graphql.Boolean), - }, - }, -}) - -var _ = registerMutationField( - "probeNFTCollection", - &graphql.Field{ - Description: "Probes a NFT Collection to see whether it is a large collection", - Type: graphql.NewNonNull(probeNFTCollectionsPayload), - Args: graphql.FieldConfigArgument{ - "input": &graphql.ArgumentConfig{ - Type: graphql.NewNonNull(probeNFTCollectionInput), - }, - }, - Resolve: func(p graphql.ResolveParams) (interface{}, error) { - input := p.Args["input"].(map[string]interface{}) - rawContractURL := input["contractID"].(string) - - ctx := p.Context - gqlCtx := GQLContext(ctx) - - contractID, err := web3.ParseContractID(rawContractURL) - if err != nil { - return nil, err - } - - res, err := gqlCtx.NFTService.ProbeNFTCollection(ctx, *contractID) - if err != nil { - return nil, err - } - - return graphqlutil.NewLazyValue(map[string]interface{}{ - "isLargeCollection": res.IsLargeCollection, - }).Value, nil - }, - }, -) diff --git a/portal/src/graphql/portal/apollo.ts b/portal/src/graphql/portal/apollo.ts index 4780a63210..f431e62e92 100644 --- a/portal/src/graphql/portal/apollo.ts +++ b/portal/src/graphql/portal/apollo.ts @@ -38,10 +38,6 @@ export function createCache(): ApolloCache { }, }, }, - // NFTCollection does not have id, so we must teach Apollo what is the key of NFTCollection. - NFTCollection: { - keyFields: ["blockchain", "network", "contractAddress"], - }, // AppResource does not have id, so we must teach Apollo what is the key of AppResource. AppResource: { keyFields: ["path"], diff --git a/portal/src/graphql/portal/globalTypes.generated.ts b/portal/src/graphql/portal/globalTypes.generated.ts index 9fd7aabeeb..2825bf63df 100644 --- a/portal/src/graphql/portal/globalTypes.generated.ts +++ b/portal/src/graphql/portal/globalTypes.generated.ts @@ -66,7 +66,6 @@ export type App = Node & { id: Scalars['ID']['output']; isProcessingSubscription: Scalars['Boolean']['output']; lastStripeError?: Maybe; - nftCollections: Array; planName: Scalars['String']['output']; rawAppConfig: Scalars['AppConfig']['output']; rawAppConfigChecksum: Scalars['AppConfig']['output']; @@ -365,8 +364,6 @@ export type Mutation = { generateTesterToken: GenerateTestTokenPayload; /** Preview update subscription */ previewUpdateSubscription: PreviewUpdateSubscriptionPayload; - /** Probes a NFT Collection to see whether it is a large collection */ - probeNFTCollection: ProbeNftCollectionsPayload; /** Reconcile the completed checkout session */ reconcileCheckoutSession: ReconcileCheckoutSessionPayload; /** Updates the current user's custom attribute with 'survey' key */ @@ -458,11 +455,6 @@ export type MutationPreviewUpdateSubscriptionArgs = { }; -export type MutationProbeNftCollectionArgs = { - input: ProbeNftCollectionInput; -}; - - export type MutationReconcileCheckoutSessionArgs = { input: ReconcileCheckoutSession; }; @@ -507,18 +499,6 @@ export type MutationVerifyDomainArgs = { input: VerifyDomainInput; }; -/** Web3 NFT Collection */ -export type NftCollection = { - __typename?: 'NFTCollection'; - blockchain: Scalars['String']['output']; - contractAddress: Scalars['String']['output']; - createdAt: Scalars['DateTime']['output']; - name: Scalars['String']['output']; - network: Scalars['String']['output']; - tokenType: Scalars['String']['output']; - totalSupply?: Maybe; -}; - /** An object with an ID */ export type Node = { /** The id of the object */ @@ -575,15 +555,6 @@ export type PreviewUpdateSubscriptionPayload = { currency: Scalars['String']['output']; }; -export type ProbeNftCollectionInput = { - contractID: Scalars['String']['input']; -}; - -export type ProbeNftCollectionsPayload = { - __typename?: 'ProbeNFTCollectionsPayload'; - isLargeCollection: Scalars['Boolean']['output']; -}; - export type Query = { __typename?: 'Query'; /** Active users chart dataset */ @@ -592,8 +563,6 @@ export type Query = { appList?: Maybe>; /** Check whether the viewer can accept the collaboration invitation */ checkCollaboratorInvitation?: Maybe; - /** Fetch NFT Contract Metadata */ - nftContractMetadata?: Maybe; /** Fetches an object given its ID */ node?: Maybe; /** Lookup nodes by a list of IDs. */ @@ -624,11 +593,6 @@ export type QueryCheckCollaboratorInvitationArgs = { }; -export type QueryNftContractMetadataArgs = { - contractID: Scalars['String']['input']; -}; - - export type QueryNodeArgs = { id: Scalars['ID']['input']; }; diff --git a/portal/src/graphql/portal/schema.graphql b/portal/src/graphql/portal/schema.graphql index f2fd46121b..5d8e3bcc93 100644 --- a/portal/src/graphql/portal/schema.graphql +++ b/portal/src/graphql/portal/schema.graphql @@ -66,9 +66,6 @@ type App implements Node { """""" lastStripeError: StripeError - """""" - nftCollections: [NFTCollection!]! - """""" planName: String! @@ -508,9 +505,6 @@ type Mutation { """Preview update subscription""" previewUpdateSubscription(input: PreviewUpdateSubscriptionInput!): PreviewUpdateSubscriptionPayload! - """Probes a NFT Collection to see whether it is a large collection""" - probeNFTCollection(input: ProbeNFTCollectionInput!): ProbeNFTCollectionsPayload! - """Reconcile the completed checkout session""" reconcileCheckoutSession(input: reconcileCheckoutSession!): reconcileCheckoutSessionPayload! @@ -539,30 +533,6 @@ type Mutation { verifyDomain(input: VerifyDomainInput!): VerifyDomainPayload! } -"""Web3 NFT Collection""" -type NFTCollection { - """""" - blockchain: String! - - """""" - contractAddress: String! - - """""" - createdAt: DateTime! - - """""" - name: String! - - """""" - network: String! - - """""" - tokenType: String! - - """""" - totalSupply: String -} - """An object with an ID""" interface Node { """The id of the object""" @@ -650,18 +620,6 @@ type PreviewUpdateSubscriptionPayload { currency: String! } -"""""" -input ProbeNFTCollectionInput { - """""" - contractID: String! -} - -"""""" -type ProbeNFTCollectionsPayload { - """""" - isLargeCollection: Boolean! -} - """""" type Query { """Active users chart dataset""" @@ -685,9 +643,6 @@ type Query { """Check whether the viewer can accept the collaboration invitation""" checkCollaboratorInvitation(code: String!): CheckCollaboratorInvitationPayload - """Fetch NFT Contract Metadata""" - nftContractMetadata(contractID: String!): NFTCollection - """Fetches an object given its ID""" node( """The ID of an object""" From 133efdd2c7368fd625031db3983969c2dce32192 Mon Sep 17 00:00:00 2001 From: Louis Chan Date: Thu, 5 Dec 2024 13:14:21 +0800 Subject: [PATCH 04/22] Remove the display of SIWE identity in portal frontend --- .../adminapi/NFTCollectionDetailDialog.tsx | 168 --------- .../graphql/adminapi/UserDetailSummary.tsx | 23 +- .../UserDetailsConnectedIdentities.module.css | 20 -- .../UserDetailsConnectedIdentities.tsx | 273 +-------------- .../adminapi/UserDetailsScreen.module.css | 4 - .../graphql/adminapi/UserDetailsScreen.tsx | 29 +- portal/src/types.ts | 45 --- portal/src/util/eip681.test.ts | 318 ------------------ portal/src/util/eip681.ts | 121 ------- 9 files changed, 23 insertions(+), 978 deletions(-) delete mode 100644 portal/src/graphql/adminapi/NFTCollectionDetailDialog.tsx delete mode 100644 portal/src/util/eip681.test.ts delete mode 100644 portal/src/util/eip681.ts diff --git a/portal/src/graphql/adminapi/NFTCollectionDetailDialog.tsx b/portal/src/graphql/adminapi/NFTCollectionDetailDialog.tsx deleted file mode 100644 index 3cbc045182..0000000000 --- a/portal/src/graphql/adminapi/NFTCollectionDetailDialog.tsx +++ /dev/null @@ -1,168 +0,0 @@ -import React, { useCallback, useContext, useMemo } from "react"; -import { - DetailsList, - Dialog, - DialogFooter, - IColumn, - IDialogContentProps, - SelectionMode, -} from "@fluentui/react"; -import { NFTContract, NFTToken } from "../../types"; -import { truncateAddress } from "../../util/hex"; - -import { FormattedMessage, Context } from "@oursky/react-messageformat"; -import { useSystemConfig } from "../../context/SystemConfigContext"; -import ExternalLink from "../../ExternalLink"; -import { explorerBlock, explorerTx } from "../../util/eip681"; -import DefaultButton from "../../DefaultButton"; - -const DIALOG_MAX_WIDTH = "80%"; - -interface NFTCollectionDetailDialogProps { - contract: NFTContract; - tokens: NFTToken[]; - eip681String: string; - - isVisible: boolean; - onDismiss: () => void; -} - -const NFTCollectionDetailDialog: React.VFC = ( - props -) => { - const { contract, tokens, eip681String, isVisible, onDismiss } = props; - const { themes } = useSystemConfig(); - const { renderToString } = useContext(Context); - - const dialogContentProps: IDialogContentProps = useMemo(() => { - return { - title: `${contract.name} (${truncateAddress(contract.address)})`, - }; - }, [contract]); - - const columns = useMemo(() => { - return [ - { - key: "token-id", - name: renderToString( - "UserDetails.connected-identities.siwe.nft-collections.token-id" - ), - minWidth: 100, - maxWidth: 100, - }, - { - key: "transcation-hash", - name: renderToString( - "UserDetails.connected-identities.siwe.nft-collections.transaction-hash" - ), - minWidth: 221, - maxWidth: 221, - }, - { - key: "balance", - name: renderToString( - "UserDetails.connected-identities.siwe.nft-collections.balance" - ), - minWidth: 60, - maxWidth: 60, - }, - { - key: "block-index", - name: renderToString( - "UserDetails.connected-identities.siwe.nft-collections.block" - ), - minWidth: 100, - maxWidth: 100, - }, - { - key: "timestamp", - name: renderToString( - "UserDetails.connected-identities.siwe.nft-collections.timestamp" - ), - minWidth: 205, - maxWidth: 205, - }, - ]; - }, [renderToString]); - - const onRenderItemColumn = useCallback( - (item?: NFTToken, _index?: number, column?: IColumn) => { - if (item == null) { - return null; - } - - switch (column?.key) { - case "token-id": - return ( - - {truncateAddress(item.token_id)} - - ); - case "transcation-hash": - return ( - - {truncateAddress(item.transaction_identifier.hash)} - - ); - case "balance": - return ( - - {item.balance} - - ); - case "block-index": - return ( - - {item.block_identifier.index} - - ); - case "timestamp": - return ( - - {item.block_identifier.timestamp} - - ); - default: - return null; - } - }, - [ - eip681String, - themes.main.palette.neutralDark, - themes.main.palette.neutralSecondary, - ] - ); - - return ( - - ); -}; - -export default NFTCollectionDetailDialog; diff --git a/portal/src/graphql/adminapi/UserDetailSummary.tsx b/portal/src/graphql/adminapi/UserDetailSummary.tsx index 3a7ada0330..dfb2dd1958 100644 --- a/portal/src/graphql/adminapi/UserDetailSummary.tsx +++ b/portal/src/graphql/adminapi/UserDetailSummary.tsx @@ -7,8 +7,6 @@ import { Context, FormattedMessage } from "@oursky/react-messageformat"; import { formatDatetime } from "../../util/formatDatetime"; import styles from "./UserDetailSummary.module.css"; -import { explorerAddress, parseEIP681 } from "../../util/eip681"; -import ExternalLink from "../../ExternalLink"; const warnBadgeStyle: IStyle = { padding: 4, @@ -17,16 +15,6 @@ const warnBadgeStyle: IStyle = { backgroundColor: "#e23d3d", }; -function shouldRenderExplorerURL(addressURL: string): boolean { - try { - parseEIP681(addressURL); - } catch { - return false; - } - - return true; -} - interface UserDetailSummaryProps { className?: string; isAnonymous: boolean; @@ -108,16 +96,7 @@ const UserDetailSummary: React.VFC = ) : null} {rawUserID} - {endUserAccountIdentifier && - shouldRenderExplorerURL(endUserAccountIdentifier) ? ( - - - {endUserAccountIdentifier} - - - ) : ( - {endUserAccountIdentifier ?? ""} - )} + {endUserAccountIdentifier ?? ""} {formattedName ? formattedName : ""} diff --git a/portal/src/graphql/adminapi/UserDetailsConnectedIdentities.module.css b/portal/src/graphql/adminapi/UserDetailsConnectedIdentities.module.css index 5ffbb97aa1..34ea2fffa2 100644 --- a/portal/src/graphql/adminapi/UserDetailsConnectedIdentities.module.css +++ b/portal/src/graphql/adminapi/UserDetailsConnectedIdentities.module.css @@ -106,26 +106,6 @@ flex-direction: row; } -.NFTListCell { - display: flex; - flex-direction: column; - margin: 4px 0; -} - -.NFTListCellBtn { - margin-top: 8px; -} - -.NFTListCellBtnLabel { - color: inherit; -} - -.NFTListHeader { - display: flex; - margin-top: 12px; - font-weight: 600; -} - .buttonGroup { grid-area: button-group; display: grid; diff --git a/portal/src/graphql/adminapi/UserDetailsConnectedIdentities.tsx b/portal/src/graphql/adminapi/UserDetailsConnectedIdentities.tsx index 5d6d927924..b3bf639c5e 100644 --- a/portal/src/graphql/adminapi/UserDetailsConnectedIdentities.tsx +++ b/portal/src/graphql/adminapi/UserDetailsConnectedIdentities.tsx @@ -20,29 +20,14 @@ import DefaultButton from "../../DefaultButton"; import { useDeleteIdentityMutation } from "./mutations/deleteIdentityMutation"; import { useSetVerifiedStatusMutation } from "./mutations/setVerifiedStatusMutation"; import { formatDatetime } from "../../util/formatDatetime"; -import { - LoginIDKeyType, - NFT, - NFTContract, - NFTToken, - OAuthSSOProviderType, - Web3Claims, -} from "../../types"; +import { LoginIDKeyType, OAuthSSOProviderType } from "../../types"; import { UserQueryNodeFragment } from "./query/userQuery.generated"; import styles from "./UserDetailsConnectedIdentities.module.css"; import { useSystemConfig } from "../../context/SystemConfigContext"; import { useIsLoading, useLoading } from "../../hook/loading"; import { useProvideError } from "../../hook/error"; -import { - createEIP681URL, - explorerAddress, - parseEIP681, -} from "../../util/eip681"; import ExternalLink, { ExternalLinkProps } from "../../ExternalLink"; -import { truncateAddress } from "../../util/hex"; -import LinkButton from "../../LinkButton"; -import NFTCollectionDetailDialog from "./NFTCollectionDetailDialog"; // Always disable virtualization for List component, as it wont work properly with mobile view const onShouldVirtualize = () => { @@ -81,7 +66,6 @@ interface UserDetailsConnectedIdentitiesProps { identities: Identity[]; verifiedClaims: VerifiedClaims; availableLoginIdIdentities: string[]; - web3Claims: Web3Claims; } // eslint-disable-next-line @typescript-eslint/no-unused-vars @@ -100,7 +84,6 @@ type IdentityListItem = | LoginIDIdentityListItem | BiometricIdentityListItem | AnonymousIdentityListItem - | SIWEIdentityListItem | LDAPIdentityListItem; interface OAuthIdentityListItem { id: string; @@ -138,16 +121,6 @@ interface AnonymousIdentityListItem { connectedOn: string; } -interface SIWEIdentityListItem { - id: string; - type: "siwe"; - address: string; - chainId: number; - verified: undefined; - connectedOn: string; - nfts: NFT[] | undefined; -} - interface LDAPIdentityListItem { id: string; type: "ldap"; @@ -165,7 +138,6 @@ export interface IdentityLists { username: LoginIDIdentityListItem[]; biometric: BiometricIdentityListItem[]; anonymous: AnonymousIdentityListItem[]; - siwe: SIWEIdentityListItem[]; ldap: LDAPIdentityListItem[]; } @@ -201,7 +173,6 @@ const loginIdIconMap: Record = { const biometricIcon: React.ReactNode = ; const anonymousIcon: React.ReactNode = ; -const siweIcon: React.ReactNode = ; const ldapIcon: React.ReactNode = ; const removeButtonTextId: Record = { @@ -236,8 +207,6 @@ function getIdentityName( return renderToString( "UserDetails.connected-identities.anonymous.anonymous-user" ); - case "siwe": - return createEIP681URL({ chainId: item.chainId, address: item.address }); case "ldap": return item.lastLoginUserName ?? ""; default: @@ -297,109 +266,6 @@ const VerifyButton: React.VFC = function VerifyButton( ); }; -interface NFTCollectionListCellProps { - contract: NFTContract; - tokens: NFTToken[]; - eip681String: string; -} - -const NFTCollectionListCell: React.VFC = ( - props -) => { - const { contract, tokens, eip681String } = props; - const [isDetailDialogVisible, setIsDetailDialogVisible] = useState(false); - - const eip681 = useMemo(() => parseEIP681(eip681String), [eip681String]); - - const contractEIP681 = useMemo( - () => - createEIP681URL({ address: contract.address, chainId: eip681.chainId }), - [contract.address, eip681.chainId] - ); - - const openDetailDialog = useCallback(() => { - setIsDetailDialogVisible(true); - }, []); - - const onDismissDetailDialog = useCallback(() => { - setIsDetailDialogVisible(false); - }, []); - - return ( -
- - - - - - - - - - - -
- ); -}; - -interface NFTCollectionListProps { - nfts?: NFT[]; - eip681String: string; -} - -const NFTCollectionList: React.VFC = (props) => { - const { nfts, eip681String } = props; - - const onRenderCollectionCell = useCallback( - (item?: NFT, _index?: number): React.ReactNode => { - if (item == null) { - return null; - } - - return ( - - ); - }, - [eip681String] - ); - - if (nfts == null || nfts.length === 0) { - return null; - } - - return ( -
- - - - -
- ); -}; - interface BaseIdentityListCellTitleProps { icon?: React.ReactNode; as?: "ExternalLink" | "Text"; @@ -818,59 +684,6 @@ const OAuthIdentityListCell: React.VFC = ( ); }; -interface SIWEIdentityListCellProps extends BaseIdentityListCellProps { - nfts?: NFT[]; -} - -const SIWEIdentityListCell: React.VFC = (props) => { - const { - icon, - identityID, - identityType, - identityName, - verified, - connectedOn, - nfts, - setVerifiedStatus, - onRemoveClicked, - } = props; - - const externalLinkProps: ExternalLinkProps = useMemo(() => { - return { - href: explorerAddress(identityName), - }; - }, [identityName]); - - return ( - - - {identityName} - - -
- - -
-
- -
- ); -}; - interface LDAPIdentityListCellProps { icon: React.ReactNode; identityID: string; @@ -916,12 +729,7 @@ const UserDetailsConnectedIdentities: React.VFC - account.account_identifier?.address === formattedAddress - )?.nfts; - siweIdentityList.push({ - id: identity.id, - type: "siwe", - verified: undefined, - address: formattedAddress, - chainId: formattedChainId, - connectedOn: createdAtStr, - nfts: nfts, - }); - } if (identity.type === "LDAP") { ldapIdentityList.push({ id: identity.id, @@ -1126,10 +912,9 @@ const UserDetailsConnectedIdentities: React.VFC { @@ -1250,20 +1035,6 @@ const UserDetailsConnectedIdentities: React.VFC ); - case "siwe": - return ( - - ); case "ldap": return ( - {identityLists.siwe.length === 0 ? ( - - } - /> - ) : null} + + } + />
{identityLists.oauth.length > 0 ? ( @@ -1440,18 +1209,6 @@ const UserDetailsConnectedIdentities: React.VFC ) : null} - {identityLists.siwe.length > 0 ? ( -
- - - - -
- ) : null} {identityLists.ldap.length > 0 ? (
diff --git a/portal/src/graphql/adminapi/UserDetailsScreen.module.css b/portal/src/graphql/adminapi/UserDetailsScreen.module.css index e896e0945e..54f29908e5 100644 --- a/portal/src/graphql/adminapi/UserDetailsScreen.module.css +++ b/portal/src/graphql/adminapi/UserDetailsScreen.module.css @@ -6,10 +6,6 @@ @apply flex flex-col; } -.siweEnabledTabWarningMessageBar { - @apply mt-5; -} - .screenContent { @apply flex-1-0-auto; diff --git a/portal/src/graphql/adminapi/UserDetailsScreen.tsx b/portal/src/graphql/adminapi/UserDetailsScreen.tsx index abe282e6f7..23a4068b53 100644 --- a/portal/src/graphql/adminapi/UserDetailsScreen.tsx +++ b/portal/src/graphql/adminapi/UserDetailsScreen.tsx @@ -48,7 +48,6 @@ import { extractRawID } from "../../util/graphql"; import styles from "./UserDetailsScreen.module.css"; import { makeInvariantViolatedErrorParseRule } from "../../error/parse"; -import { IdentityType } from "./globalTypes.generated"; import AnonymizeUserDialog from "./AnonymizeUserDialog"; import UserDetailsScreenGroupListContainer from "../../components/roles-and-groups/list/UserDetailsScreenGroupListContainer"; import UserDetailsScreenRoleListContainer from "../../components/roles-and-groups/list/UserDetailsScreenRoleListContainer"; @@ -302,8 +301,6 @@ const UserDetails: React.VFC = function UserDetails( [setState] ); - const web3Claims = data.web3; - const verifiedClaims = data.verifiedClaims; const identities = useMemo( @@ -334,11 +331,6 @@ const UserDetails: React.VFC = function UserDetails( return level === "readwrite"; }, [standardAttributeAccessControl]); - const isSIWEIdentity = useMemo( - () => identities.some((i) => i.type === IdentityType.Siwe), - [identities] - ); - const dataStatusBadgeTextId = React.useMemo(() => { let badgeTextId = null; if (data.isDisabled) { @@ -443,19 +435,13 @@ const UserDetails: React.VFC = function UserDetails( itemKey={ACCOUNT_SECURITY_PIVOT_KEY} headerText={renderToString("UserDetails.account-security.header")} > - {isSIWEIdentity ? ( - - - - ) : ( - - )} + = function UserDetails( identities={identities} verifiedClaims={verifiedClaims} availableLoginIdIdentities={availableLoginIdIdentities} - web3Claims={web3Claims} /> { - it("parses eip681 success with address check", () => { - function test(uri: string, expected: EIP681) { - const eip681 = parseEIP681(uri); - - expect(eip681).toEqual(expected); - } - - test("ethereum:0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d@1", { - chainId: 1, - address: "0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d", - }); - - test("ethereum:0xdc0479cc5bba033b3e7de9f178607150b3abce1f@1231", { - chainId: 1231, - address: "0xdc0479cc5bba033b3e7de9f178607150b3abce1f", - }); - - test("ethereum:0x71c7656ec7ab88b098defb751b7401b5f6d8976f@23821", { - chainId: 23821, - address: "0x71c7656ec7ab88b098defb751b7401b5f6d8976f", - }); - - test( - "ethereum:0x71c7656ec7ab88b098defb751b7401b5f6d8976f@23821?token_ids=0x1&token_ids=0x2", - { - chainId: 23821, - address: "0x71c7656ec7ab88b098defb751b7401b5f6d8976f", - query: new URLSearchParams([ - ["token_ids", "0x1"], - ["token_ids", "0x2"], - ]), - } - ); - }); - - it("parses eip681 without address check", () => { - function test(uri: string, expected: EIP681) { - const eip681 = parseEIP681(uri, true); - - expect(eip681).toEqual(expected); - } - - test("ethereum:0x0@1", { - chainId: 1, - address: "0x0", - }); - - test("ethereum:0x0@1231", { - chainId: 1231, - address: "0x0", - }); - - test("ethereum:0x0@23821", { - chainId: 23821, - address: "0x0", - }); - }); - - it("create eip681 url with address check", () => { - function test(eip681: EIP681, expected: string) { - const url = createEIP681URL(eip681); - - expect(url).toEqual(expected); - } - - test( - { - chainId: 1, - address: "0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d", - }, - "ethereum:0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d@1" - ); - - test( - { - chainId: 1231, - address: "0xdc0479cc5bba033b3e7de9f178607150b3abce1f", - }, - "ethereum:0xdc0479cc5bba033b3e7de9f178607150b3abce1f@1231" - ); - - test( - { - chainId: 23821, - address: "0x71c7656ec7ab88b098defb751b7401b5f6d8976f", - }, - "ethereum:0x71c7656ec7ab88b098defb751b7401b5f6d8976f@23821" - ); - }); - - it("create eip681 url without address check", () => { - function test(eip681: EIP681, expected: string) { - const url = createEIP681URL(eip681, true); - - expect(url).toEqual(expected); - } - - test( - { - chainId: 1, - address: "0x0", - }, - "ethereum:0x0@1" - ); - - test( - { - chainId: 1231, - address: "0x0", - }, - "ethereum:0x0@1231" - ); - - test( - { - chainId: 23821, - address: "0x0", - }, - "ethereum:0x0@23821" - ); - }); - - it("create etherscan url with address check", () => { - function test(uri: string, expected: string) { - const url = explorerURL(uri); - - expect(url).toEqual(expected); - } - - test( - "ethereum:0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d@1", - "https://etherscan.io/" - ); - - test( - "ethereum:0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d@5", - "https://goerli.etherscan.io/" - ); - - test("ethereum:0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d@1234", ""); - }); - - it("create etherscan url without address check", () => { - function test(uri: string, expected: string) { - const url = explorerURL(uri, true); - - expect(url).toEqual(expected); - } - - test("ethereum:0x0@1", "https://etherscan.io/"); - - test("ethereum:0x0@5", "https://goerli.etherscan.io/"); - - test("ethereum:0x0@1234", ""); - }); - - it("create etherscan address url with address check", () => { - function test(uri: string, expected: string) { - const url = explorerAddress(uri); - - expect(url).toEqual(expected); - } - - test( - "ethereum:0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d@1", - "https://etherscan.io/address/0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d" - ); - - test( - "ethereum:0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d@5", - "https://goerli.etherscan.io/address/0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d" - ); - - test( - "ethereum:0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d@1234", - "address/0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d" - ); - }); - - it("create etherscan address url without address check", () => { - function test(uri: string, expected: string) { - const url = explorerAddress(uri, true); - - expect(url).toEqual(expected); - } - - test("ethereum:0x0@1", "https://etherscan.io/address/0x0"); - - test("ethereum:0x0@5", "https://goerli.etherscan.io/address/0x0"); - - test("ethereum:0x0@1234", "address/0x0"); - }); - - it("create etherscan transaction hash url with address check", () => { - function test(uri: string, tx: string, expected: string) { - const url = explorerTx(uri, tx); - - expect(url).toEqual(expected); - } - - test( - "ethereum:0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d@1", - "0x13aec95326ee5d0ba5d09d814746a7580a7d2a8bf5fb907b6fa398112353abd3", - "https://etherscan.io/tx/0x13aec95326ee5d0ba5d09d814746a7580a7d2a8bf5fb907b6fa398112353abd3" - ); - - test( - "ethereum:0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d@5", - "0x13aec95326ee5d0ba5d09d814746a7580a7d2a8bf5fb907b6fa398112353abd3", - "https://goerli.etherscan.io/tx/0x13aec95326ee5d0ba5d09d814746a7580a7d2a8bf5fb907b6fa398112353abd3" - ); - - test( - "ethereum:0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d@1234", - "0x13aec95326ee5d0ba5d09d814746a7580a7d2a8bf5fb907b6fa398112353abd3", - "tx/0x13aec95326ee5d0ba5d09d814746a7580a7d2a8bf5fb907b6fa398112353abd3" - ); - }); - - it("create etherscan transaction hash url without address check", () => { - function test(uri: string, tx: string, expected: string) { - const url = explorerTx(uri, tx, true); - - expect(url).toEqual(expected); - } - - test( - "ethereum:0x0@1", - "0x13aec95326ee5d0ba5d09d814746a7580a7d2a8bf5fb907b6fa398112353abd3", - "https://etherscan.io/tx/0x13aec95326ee5d0ba5d09d814746a7580a7d2a8bf5fb907b6fa398112353abd3" - ); - - test( - "ethereum:0x0@5", - "0x13aec95326ee5d0ba5d09d814746a7580a7d2a8bf5fb907b6fa398112353abd3", - "https://goerli.etherscan.io/tx/0x13aec95326ee5d0ba5d09d814746a7580a7d2a8bf5fb907b6fa398112353abd3" - ); - - test( - "ethereum:0x0@1234", - "0x13aec95326ee5d0ba5d09d814746a7580a7d2a8bf5fb907b6fa398112353abd3", - "tx/0x13aec95326ee5d0ba5d09d814746a7580a7d2a8bf5fb907b6fa398112353abd3" - ); - }); - - it("create etherscan block url with address check", () => { - function test(uri: string, block: string, expected: string) { - const url = explorerBlock(uri, block); - - expect(url).toEqual(expected); - } - - test( - "ethereum:0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d@1", - "1234", - "https://etherscan.io/block/1234" - ); - - test( - "ethereum:0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d@5", - "1234", - "https://goerli.etherscan.io/block/1234" - ); - - test( - "ethereum:0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d@1234", - "1234", - "block/1234" - ); - }); - - it("create etherscan block url without address check", () => { - function test(uri: string, block: string, expected: string) { - const url = explorerBlock(uri, block, true); - - expect(url).toEqual(expected); - } - - test("ethereum:0x0@1", "1234", "https://etherscan.io/block/1234"); - - test("ethereum:0x0@5", "1234", "https://goerli.etherscan.io/block/1234"); - - test("ethereum:0x0@1234", "1234", "block/1234"); - }); - - it("create etherscan blocks url with address check", () => { - function test(uri: string, expected: string) { - const url = explorerBlocks(uri); - - expect(url).toEqual(expected); - } - - test( - "ethereum:0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d@1", - "https://etherscan.io/blocks/" - ); - - test( - "ethereum:0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d@5", - "https://goerli.etherscan.io/blocks/" - ); - - test("ethereum:0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d@1234", "blocks/"); - }); -}); diff --git a/portal/src/util/eip681.ts b/portal/src/util/eip681.ts deleted file mode 100644 index 9612519ebf..0000000000 --- a/portal/src/util/eip681.ts +++ /dev/null @@ -1,121 +0,0 @@ -const ETHEREUM_ADDRESS_REGEX = /^0x[a-fA-F0-9]{40}$/; - -export interface EIP681 { - chainId: number; - address: string; - query?: URLSearchParams; -} - -export function parseEIP681( - uri: string, - skipAddressCheck: boolean = false -): EIP681 { - const url = new URL(uri); - if (url.protocol !== "ethereum:") { - throw new Error(`Invalid protocol: ${url.protocol}`); - } - - const addressURI = url.pathname.split("@"); - - if (addressURI.length !== 2) { - throw new Error(`Invalid URI: ${url.pathname}`); - } - - const address = addressURI[0]; - if (!skipAddressCheck && !ETHEREUM_ADDRESS_REGEX.test(address)) { - throw new Error(`Invalid address: ${address}`); - } - - const chainId = parseInt(addressURI[1], 10); - if (chainId < 0) { - throw new Error(`Chain ID cannot be negative: ${chainId}`); - } - - const query = - url.searchParams.toString() !== "" ? url.searchParams : undefined; - - return { - chainId, - address, - query, - }; -} - -export function createEIP681URL( - eip681: EIP681, - skipAddressCheck: boolean = false -): string { - const query = eip681.query?.toString() ?? ""; - const url = `ethereum:${eip681.address}@${eip681.chainId}${ - query !== "" ? "?" + query : "" - }`; - // Confirm the format is correct - parseEIP681(url, skipAddressCheck); - return url; -} - -export function explorerURL( - eip681String: string, - skipAddressCheck: boolean = false -): string { - const eip681 = parseEIP681(eip681String, skipAddressCheck); - - let prefix: string; - switch (eip681.chainId) { - case 1: - prefix = "https://etherscan.io/"; - break; - case 5: - prefix = "https://goerli.etherscan.io/"; - break; - case 137: - prefix = "https://polygonscan.com/"; - break; - case 80001: - prefix = "https://mumbai.polygonscan.com/"; - break; - default: - prefix = ""; - } - - return prefix; -} - -export function explorerAddress( - eip681String: string, - skipAddressCheck: boolean = false -): string { - const eip681 = parseEIP681(eip681String, skipAddressCheck); - const prefix = explorerURL(eip681String, skipAddressCheck) + "address/"; - - return prefix + eip681.address; -} - -export function explorerTx( - eip681String: string, - tx: string, - skipAddressCheck: boolean = false -): string { - const prefix = explorerURL(eip681String, skipAddressCheck) + "tx/"; - - return prefix + tx; -} - -export function explorerBlock( - eip681String: string, - block: string, - skipAddressCheck: boolean = false -): string { - const prefix = explorerURL(eip681String, skipAddressCheck) + "block/"; - - return prefix + block; -} - -export function explorerBlocks( - eip681String: string, - skipAddressCheck: boolean = false -): string { - const prefix = explorerURL(eip681String, skipAddressCheck) + "blocks/"; - - return prefix; -} From 0e9641407b0afc68c252cbdd4996c9e48712ab3b Mon Sep 17 00:00:00 2001 From: Louis Chan Date: Thu, 5 Dec 2024 13:19:08 +0800 Subject: [PATCH 05/22] Remove translation of removed components and screens --- portal/src/locale-data/en.json | 81 ---------------------------------- 1 file changed, 81 deletions(-) diff --git a/portal/src/locale-data/en.json b/portal/src/locale-data/en.json index d58a5d8fb9..22e1c9d600 100644 --- a/portal/src/locale-data/en.json +++ b/portal/src/locale-data/en.json @@ -151,7 +151,6 @@ "ScreenNav.authentication": "Authentication", "ScreenNav.anonymous-users": "Anonymous Users", "ScreenNav.app2app": "App2App", - "ScreenNav.web3": "Ethereum & NFT", "ScreenNav.biometric": "Biometric", "ScreenNav.mfa": "2FA", "ScreenNav.external-oauth": "Social / Enterprise Login", @@ -459,15 +458,6 @@ "UserDetails.connected-identities.biometric": "Biometric", "UserDetails.connected-identities.biometric.unknown-device": "Unknown Device", "UserDetails.connected-identities.anonymous": "Anonymous", - "UserDetails.connected-identities.siwe": "Ethereum Wallet", - "UserDetails.connected-identities.siwe.nft-collections.title": "NFTs", - "UserDetails.connected-identities.siwe.nft-collections.name": "{name} ({address})", - "UserDetails.connected-identities.siwe.nft-collections.token-id": "Token ID", - "UserDetails.connected-identities.siwe.nft-collections.transaction-hash": "Txn Hash", - "UserDetails.connected-identities.siwe.nft-collections.balance": "Balance", - "UserDetails.connected-identities.siwe.nft-collections.timestamp": "Timestamp", - "UserDetails.connected-identities.siwe.nft-collections.block": "Block", - "UserDetails.connected-identities.siwe.nft-collections.view-tokens": "View tokens", "UserDetails.connected-identities.anonymous.anonymous-user": "Anonymous User", "UserDetails.connected-identities.ldap": "LDAP", @@ -592,70 +582,6 @@ "AuthenticatorConfigurationScreen.columns.activate": "Activate", "AuthenticatorConfigurationScreen.columns.authenticator": "Authenticator", - "Web3ConfigurationScreen.title": "Ethereum & NFT", - "Web3ConfigurationScreen.description": "Authenticate the user by crypto wallets and NFT ownership. Their wallet addresses and the list of NFTs owned will be available as user info.", - "Web3ConfigurationScreen.siwe.title": "Login with Ethereum", - "Web3ConfigurationScreen.siwe.description": "Add a button to the signup/login screen for the users to login with their crypto wallet such as MetaMask. Enabling this will replace all other login methods. See the {DocLink, react, href{https://docs.authgear.com/strategies/web3#platform-support} children{list of supported wallets here.}}", - "Web3ConfigurationScreen.network-droplist.label": "Network", - "Web3ConfigurationScreen.collection-list.title": "NFT Collections", - "Web3ConfigurationScreen.collection-list.status.pending": "Pending", - "Web3ConfigurationScreen.collection-list.status.indexing": "Indexing", - "Web3ConfigurationScreen.colleciton-list.action.remove": "Remove", - "Web3ConfigurationScreen.colleciton-list.action.details": "Details", - "Web3ConfigurationScreen.collection-list.description": "Add your collection contracts here. Authgear will monitor them and verify the ownership for your users.", - "Web3ConfigurationScreen.collection-list.add-collection": "Add Collection", - "Web3ConfigurationScreen.collection-list.add-collection.contract-address": "Contract Address", - "Web3ConfigurationScreen.collection-list.add-collection.placeholder": "e.g. 0x06012c8cf97bead5deae237070f9587f8e7a266d", - "Web3ConfigurationScreen.collection-list.add-collection.metadata-error": "Failed to fetch metadata for contract", - "Web3ConfigurationScreen.collection-list.add-collection.token-type-button.erc721.title": "ERC-721", - "Web3ConfigurationScreen.collection-list.add-collection.token-type-button.erc721.description": "Non-fungible Token standard", - "Web3ConfigurationScreen.collection-list.add-collection.token-type-button.erc1155.title": "ERC-1155", - "Web3ConfigurationScreen.collection-list.add-collection.token-type-button.erc1155.description": "Multiple Token Standard", - "Web3ConfigurationScreen.collection-list.add-collection.large-collection-dialog.title": "This collection is not supported yet", - "Web3ConfigurationScreen.collection-list.add-collection.large-collection-dialog.description": "The size of the collection you entered is too large. Please contact us if this is the contract you want to use it in your project.", - "Web3ConfigurationScreen.collection-list.add-collection.large-collection-dialog.contact-sales": "Contact sales", - "Web3ConfigurationScreen.collection-list.add-collection.toke-tracking-dialog.title": "Which tokens should we track?", - "Web3ConfigurationScreen.collection-list.add-collection.toke-tracking-dialog.description": "Enter the token IDs of the NFTs you want to track and report in the user info. Type in a new line for each item.", - "Web3ConfigurationScreen.collection-list.add-collection.toke-tracking-dialog.placeholder": "One token ID per each line", - "Web3ConfigurationScreen.collection-list.add-collection.toke-tracking-dialog.item-count": "{count}/{max} items", - - "Web3ConfigurationScreen.confirmation-dialog.title": "Confirm Changes?", - "Web3ConfigurationScreen.confirmation-dialog.siwe-enabled.title": "Enabling Login with Ethereum", - "Web3ConfigurationScreen.confirmation-dialog.siwe-enabled.description": "This will replace all other login methods. Users cannot login with email, phone, username or social / enterprise connections. All your current authentication settings will be lost.", - "Web3ConfigurationScreen.confirmation-dialog.siwe-disabled.title": "Disabling Login with Ethereum", - "Web3ConfigurationScreen.confirmation-dialog.siwe-disabled.description": "This will set your login methods to the default values.", - "Web3ConfigurationScreen.confirmation-dialog.collection-added.title": "Adding NFT Collections", - "Web3ConfigurationScreen.confirmation-dialog.collection-added.description": "The following collections will be added to your project.", - "Web3ConfigurationScreen.confirmation-dialog.collection-removed.title": "Removing NFT Collections", - "Web3ConfigurationScreen.confirmation-dialog.collection-removed.description": "The following collections will be removed from your project.", - "Web3ConfigurationScreen.confirmation-dialog.tracked-token-changed.title": "Changing Tracked Tokens", - "Web3ConfigurationScreen.confirmation-dialog.tracked-token-changed.description": "The following collections will have their tracked tokens updated.", - "Web3ConfigurationScreen.confirmation-dialog.network-changed.title": "Changing Network", - "Web3ConfigurationScreen.confirmation-dialog.network-changed.description": "The target network will change from {b, react, children{{old}}} to {b, react, children{{new}}}", - "Web3ConfigurationScreen.confirmation-dialog.confirm": "Confirm and save", - "Web3ConfigurationScreen.network-change-dialog.title": "Changing Network", - "Web3ConfigurationScreen.network-change-dialog.description": "Changing to a different network will remove all saved NFT collections, are you sure to proceed?", - "Web3ConfigurationScreen.detail-dialog.recent-added-info": "Syncing chain. It will take few minutes.", - "Web3ConfigurationScreen.network-droplist.warning": "Switching to another network will clear your NFT Collections", - "Web3ConfigurationScreen.detail-dialog.contract-address": "Contract Address", - "Web3ConfigurationScreen.detail-dialog.view-on-explorer": "View on Explorer", - "Web3ConfigurationScreen.detail-dialog.network": "Network", - "Web3ConfigurationScreen.detail-dialog.token-type": "Token Type", - "Web3ConfigurationScreen.detail-dialog.token-type.erc721": "ERC-721", - "Web3ConfigurationScreen.detail-dialog.token-type.erc1155": "ERC-1155", - "Web3ConfigurationScreen.detail-dialog.token-type.unknown": "Unknown", - "Web3ConfigurationScreen.detail-dialog.block-height": "Block Height", - "Web3ConfigurationScreen.detail-dialog.block-height.description": "{currentHeight} / {DocLink, react, href{{explorerUrl}} children{Latest Block Height}}", - "Web3ConfigurationScreen.detail-dialog.total-supply": "Tokens", - "Web3ConfigurationScreen.detail-dialog.tracked-tokens": "Tracked Tokens", - "Web3ConfigurationScreen.detail-dialog.edit-tracked-tokens": "Edit tracked tokens", - "Web3ConfigurationScreen.detail-dialog.remove-collection": "Remove Collection", - "Web3ConfigurationScreen.deletion-dialog.title": "Remove collection", - "Web3ConfigurationScreen.deletion-dialog.description": "Are you sure you want to remove {collection} from your project?", - "Web3ConfigurationScreen.contact-us-dialog.title": "Contact us", - "Web3ConfigurationScreen.contact-us-dialog.description": "The collection you entered cannot be added.{br, react}Please contact us if this is the contract you want to use it in your project.", - "Web3ConfigurationScreen.contact-us-dialog.action": "Contact us", - "SIWE.disable-first": "Your project has enabled Sign in with Ethereum. Disable it{ReactRouterLink, react, to{{href}} children{here}} beforing choosing other login methods.", "VerificationConfigurationScreen.otp-valid-seconds.label": "6-digit OTP valid duration (seconds)", @@ -1912,13 +1838,6 @@ "GetStartedScreen.card.action-label.invite": "Invite members", "GetStartedScreen.card.skip-button.label": "Skip this", - "NetworkId.ethereum-mainnet": "Ethereum Mainnet", - "NetworkId.ethereum-goerli": "Ethereum Goerli", - "NetworkId.polygon-mainnet": "Polygon Mainnet", - "NetworkId.polygon-mumbai": "Polygon Mumbai", - - "NftCollection.item.identifier": "{name} ({network}: {address})", - "MFAConfigurationScreen.title": "2-Factor Authentication", "MFAConfigurationScreen.description": "Enhance your users' security during login to prevent unauthorized access.", "MFAConfigurationScreen.policy.title": "Policy", From 2c2936a3871d43f7396365173ed5f72d25bead00 Mon Sep 17 00:00:00 2001 From: Louis Chan Date: Thu, 5 Dec 2024 13:23:03 +0800 Subject: [PATCH 06/22] Forget web3 related config in portal frontend --- portal/src/types.ts | 24 ------------------------ 1 file changed, 24 deletions(-) diff --git a/portal/src/types.ts b/portal/src/types.ts index 7e961dba49..94e3bd580a 100644 --- a/portal/src/types.ts +++ b/portal/src/types.ts @@ -598,20 +598,6 @@ export interface UserProfileConfig { custom_attributes?: CustomAttributesConfig; } -// Web3 Configs -export interface SIWEConfig { - networks?: string[]; -} - -export interface NFTConfig { - collections?: string[]; -} - -export interface Web3Config { - nft?: NFTConfig; - siwe?: SIWEConfig; -} - // PortalAPIAppConfig export interface PortalAPIAppConfig { id: string; @@ -627,7 +613,6 @@ export interface PortalAPIAppConfig { oauth?: OAuthConfig; session?: SessionConfig; hook?: HookConfig; - web3?: Web3Config; user_profile?: UserProfileConfig; account_deletion?: AccountDeletionConfig; account_anonymization?: AccountAnonymizationConfig; @@ -815,7 +800,6 @@ export interface PortalAPIFeatureConfig { audit_log?: AuditLogFeatureConfig; google_tag_manager?: GoogleTagManagerFeatureConfig; collaborator?: CollaboratorFeatureConfig; - web3?: Web3FeatureConfig; } export interface AuthenticatorFeatureConfig { @@ -856,14 +840,6 @@ export interface AuthenticatorOOBOTBSMSFeatureConfig { disabled?: boolean; } -export interface Web3NFTFeatureConfig { - maximum?: number; -} - -export interface Web3FeatureConfig { - nft?: Web3NFTFeatureConfig; -} - export interface IdentityFeatureConfig { login_id?: LoginIDFeatureConfig; oauth?: OAuthSSOFeatureConfig; From 34611c2a4ee39f7a8cdaab668bb301ca34e807f3 Mon Sep 17 00:00:00 2001 From: Louis Chan Date: Thu, 5 Dec 2024 13:30:58 +0800 Subject: [PATCH 07/22] Remove NFTService from portal backend --- pkg/portal/deps.go | 1 - pkg/portal/graphql/context.go | 7 -- pkg/portal/service/deps.go | 1 - pkg/portal/service/nft.go | 116 ---------------------------------- pkg/portal/wire_gen.go | 6 -- 5 files changed, 131 deletions(-) delete mode 100644 pkg/portal/service/nft.go diff --git a/pkg/portal/deps.go b/pkg/portal/deps.go index f7381477b6..f3d13d54c0 100644 --- a/pkg/portal/deps.go +++ b/pkg/portal/deps.go @@ -114,7 +114,6 @@ var DependencySet = wire.NewSet( wire.Bind(new(graphql.StripeService), new(*libstripe.Service)), wire.Bind(new(graphql.SubscriptionService), new(*service.SubscriptionService)), wire.Bind(new(graphql.UsageService), new(*service.UsageService)), - wire.Bind(new(graphql.NFTService), new(*service.NFTService)), wire.Bind(new(graphql.DenoService), new(*hook.DenoClientImpl)), wire.Bind(new(graphql.AuditService), new(*service.AuditService)), wire.Bind(new(graphql.OnboardService), new(*service.OnboardService)), diff --git a/pkg/portal/graphql/context.go b/pkg/portal/graphql/context.go index 85e9eaa063..8938755563 100644 --- a/pkg/portal/graphql/context.go +++ b/pkg/portal/graphql/context.go @@ -21,7 +21,6 @@ import ( "github.com/authgear/authgear-server/pkg/portal/smtp" "github.com/authgear/authgear-server/pkg/util/graphqlutil" "github.com/authgear/authgear-server/pkg/util/log" - "github.com/authgear/authgear-server/pkg/util/web3" ) type UserLoader interface { @@ -159,11 +158,6 @@ type UsageService interface { ) (*model.Usage, error) } -type NFTService interface { - ProbeNFTCollection(ctx context.Context, contractID web3.ContractID) (*apimodel.ProbeCollectionResult, error) - GetContractMetadata(ctx context.Context, contracts []web3.ContractID) ([]apimodel.NFTCollection, error) -} - type DenoService interface { Check(ctx context.Context, snippet string) error } @@ -200,7 +194,6 @@ type Context struct { StripeService StripeService SubscriptionService SubscriptionService UsageService UsageService - NFTService NFTService DenoService DenoService AuditService AuditService OnboardService OnboardService diff --git a/pkg/portal/service/deps.go b/pkg/portal/service/deps.go index 274eec4532..26b01ba0a9 100644 --- a/pkg/portal/service/deps.go +++ b/pkg/portal/service/deps.go @@ -47,7 +47,6 @@ var DependencySet = wire.NewSet( wire.Struct(new(SystemConfigProvider), "*"), wire.Struct(new(SubscriptionService), "*"), wire.Struct(new(UsageService), "*"), - wire.Struct(new(NFTService), "*"), wire.Struct(new(AuditService), "*"), wire.Struct(new(OnboardService), "*"), NewConfigServiceLogger, diff --git a/pkg/portal/service/nft.go b/pkg/portal/service/nft.go deleted file mode 100644 index be5c707dc8..0000000000 --- a/pkg/portal/service/nft.go +++ /dev/null @@ -1,116 +0,0 @@ -package service - -import ( - "bytes" - "context" - "encoding/json" - "net/url" - - "github.com/authgear/authgear-server/pkg/api/apierrors" - "github.com/authgear/authgear-server/pkg/api/model" - apimodel "github.com/authgear/authgear-server/pkg/api/model" - "github.com/authgear/authgear-server/pkg/lib/config" - "github.com/authgear/authgear-server/pkg/util/httputil" - "github.com/authgear/authgear-server/pkg/util/web3" -) - -type ProbeColletionResponse struct { - Result apimodel.ProbeCollectionResult `json:"result"` - Error *apierrors.APIError `json:"error"` -} - -type GetContractMetadataResponse struct { - Result apimodel.GetContractMetadataResult `json:"result"` - Error *apierrors.APIError `json:"error"` -} - -type NFTService struct { - HTTPClient HTTPClient - APIEndpoint config.NFTIndexerAPIEndpoint -} - -func (s *NFTService) ProbeNFTCollection(ctx context.Context, contractID web3.ContractID) (*apimodel.ProbeCollectionResult, error) { - endpoint, err := url.Parse(string(s.APIEndpoint)) - if err != nil { - return nil, err - } - - endpoint.Path = "probe" - - contractURL, err := contractID.URL() - if err != nil { - return nil, err - } - - request := model.ProbeCollectionRequest{ - ContractID: contractURL.String(), - } - - data, err := json.Marshal(request) - if err != nil { - return nil, err - } - - res, err := httputil.PostWithContext(ctx, s.HTTPClient.Client, endpoint.String(), "application/json", bytes.NewBuffer(data)) - if err != nil { - return nil, err - } - defer res.Body.Close() - - var response ProbeColletionResponse - err = json.NewDecoder(res.Body).Decode(&response) - if err != nil { - return nil, err - } - - if response.Error != nil { - return nil, response.Error - } - - return &response.Result, nil -} - -func (s *NFTService) GetContractMetadata(ctx context.Context, contracts []web3.ContractID) ([]apimodel.NFTCollection, error) { - endpoint, err := url.Parse(string(s.APIEndpoint)) - if err != nil { - return nil, err - } - - endpoint.Path = "metadata" - - contractURLs := make([]string, 0, len(contracts)) - for _, contract := range contracts { - contractURL, err := contract.URL() - if err != nil { - return nil, err - } - contractURLs = append(contractURLs, contractURL.String()) - } - - request := model.GetContractMetadataRequest{ - ContractIDs: contractURLs, - } - - data, err := json.Marshal(request) - if err != nil { - return nil, err - } - - res, err := httputil.PostWithContext(ctx, s.HTTPClient.Client, endpoint.String(), "application/json", bytes.NewBuffer(data)) - if err != nil { - return nil, err - } - defer res.Body.Close() - - var response GetContractMetadataResponse - err = json.NewDecoder(res.Body).Decode(&response) - if err != nil { - return nil, err - } - - if response.Error != nil { - return nil, response.Error - } - - return response.Result.Collections, nil -} diff --git a/pkg/portal/wire_gen.go b/pkg/portal/wire_gen.go index 55feb16e2d..3e6307b4e7 100644 --- a/pkg/portal/wire_gen.go +++ b/pkg/portal/wire_gen.go @@ -308,11 +308,6 @@ func newGraphQLHandler(p *deps.RequestProvider) http.Handler { GlobalDatabase: handle, UsageStore: globalDBStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - nftService := &service.NFTService{ - HTTPClient: httpClient, - APIEndpoint: nftIndexerAPIEndpoint, - } remoteIP := deps.ProvideRemoteIP(request, trustProxy) userAgentString := deps.ProvideUserAgentString(request) writeHandle := auditdb.NewWriteHandle(pool, databaseEnvironmentConfig, auditDatabaseCredentials, logFactory) @@ -356,7 +351,6 @@ func newGraphQLHandler(p *deps.RequestProvider) http.Handler { StripeService: libstripeService, SubscriptionService: subscriptionService, UsageService: usageService, - NFTService: nftService, DenoService: denoClientImpl, AuditService: auditService, OnboardService: onboardService, From f0a3c84f5c8c1f1c206a7ff859b46d4dd6c19e22 Mon Sep 17 00:00:00 2001 From: Louis Chan Date: Thu, 5 Dec 2024 13:42:06 +0800 Subject: [PATCH 08/22] Make `x_web3` absent from user --- cmd/authgear/background/wire_gen.go | 14 +- cmd/authgear/elasticsearch/wire_gen.go | 9 - cmd/authgear/pgsearch/wire_gen.go | 9 - e2e/cmd/e2e/pkg/wire_gen.go | 14 +- pkg/admin/wire_gen.go | 26 +- pkg/auth/wire_gen.go | 2366 ++++-------------------- pkg/lib/authn/user/commands.go | 8 +- pkg/lib/authn/user/model.go | 9 +- pkg/lib/authn/user/model_test.go | 53 +- pkg/lib/authn/user/queries.go | 15 - pkg/lib/config/environment.go | 5 +- pkg/lib/deps/deps_common.go | 6 - pkg/lib/deps/deps_provider.go | 1 - pkg/lib/feature/web3/deps.go | 25 - pkg/lib/feature/web3/errors.go | 7 - pkg/lib/feature/web3/service.go | 137 -- pkg/portal/deps/deps.go | 1 - pkg/redisqueue/wire_gen.go | 34 +- pkg/resolver/wire_gen.go | 22 +- 19 files changed, 381 insertions(+), 2380 deletions(-) delete mode 100644 pkg/lib/feature/web3/deps.go delete mode 100644 pkg/lib/feature/web3/errors.go delete mode 100644 pkg/lib/feature/web3/service.go diff --git a/cmd/authgear/background/wire_gen.go b/cmd/authgear/background/wire_gen.go index 903b7cafc4..e032908089 100644 --- a/cmd/authgear/background/wire_gen.go +++ b/cmd/authgear/background/wire_gen.go @@ -41,7 +41,6 @@ import ( siwe2 "github.com/authgear/authgear-server/pkg/lib/feature/siwe" stdattrs2 "github.com/authgear/authgear-server/pkg/lib/feature/stdattrs" "github.com/authgear/authgear-server/pkg/lib/feature/verification" - "github.com/authgear/authgear-server/pkg/lib/feature/web3" "github.com/authgear/authgear-server/pkg/lib/hook" "github.com/authgear/authgear-server/pkg/lib/infra/db/appdb" "github.com/authgear/authgear-server/pkg/lib/infra/db/auditdb" @@ -515,13 +514,6 @@ func newUserService(p *deps.BackgroundProvider, appID string, appContext *config UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -538,7 +530,6 @@ func newUserService(p *deps.BackgroundProvider, appID string, appContext *config Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -661,7 +652,6 @@ func newUserService(p *deps.BackgroundProvider, appID string, appContext *config UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } userProvider := &user.Provider{ @@ -773,8 +763,8 @@ func newUserService(p *deps.BackgroundProvider, appID string, appContext *config AppID: configAppID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: serviceLogger, WhatsappConfig: whatsappConfig, diff --git a/cmd/authgear/elasticsearch/wire_gen.go b/cmd/authgear/elasticsearch/wire_gen.go index 383fff13d8..71341c827e 100644 --- a/cmd/authgear/elasticsearch/wire_gen.go +++ b/cmd/authgear/elasticsearch/wire_gen.go @@ -30,7 +30,6 @@ import ( siwe2 "github.com/authgear/authgear-server/pkg/lib/feature/siwe" stdattrs2 "github.com/authgear/authgear-server/pkg/lib/feature/stdattrs" "github.com/authgear/authgear-server/pkg/lib/feature/verification" - "github.com/authgear/authgear-server/pkg/lib/feature/web3" "github.com/authgear/authgear-server/pkg/lib/infra/db" "github.com/authgear/authgear-server/pkg/lib/infra/db/appdb" "github.com/authgear/authgear-server/pkg/lib/infra/db/globaldb" @@ -417,13 +416,6 @@ func NewReindexer(pool *db.Pool, databaseCredentials *CmdDBCredential, appID Cmd UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -440,7 +432,6 @@ func NewReindexer(pool *db.Pool, databaseCredentials *CmdDBCredential, appID Cmd Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } sourceProvider := &reindex.SourceProvider{ diff --git a/cmd/authgear/pgsearch/wire_gen.go b/cmd/authgear/pgsearch/wire_gen.go index b02207a3bc..9374408960 100644 --- a/cmd/authgear/pgsearch/wire_gen.go +++ b/cmd/authgear/pgsearch/wire_gen.go @@ -29,7 +29,6 @@ import ( siwe2 "github.com/authgear/authgear-server/pkg/lib/feature/siwe" stdattrs2 "github.com/authgear/authgear-server/pkg/lib/feature/stdattrs" "github.com/authgear/authgear-server/pkg/lib/feature/verification" - "github.com/authgear/authgear-server/pkg/lib/feature/web3" "github.com/authgear/authgear-server/pkg/lib/infra/db" "github.com/authgear/authgear-server/pkg/lib/infra/db/appdb" "github.com/authgear/authgear-server/pkg/lib/infra/db/searchdb" @@ -402,13 +401,6 @@ func NewReindexer(pool *db.Pool, databaseCredentials *CmdDBCredential, searchDat UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -425,7 +417,6 @@ func NewReindexer(pool *db.Pool, databaseCredentials *CmdDBCredential, searchDat Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } sourceProvider := &reindex.SourceProvider{ diff --git a/e2e/cmd/e2e/pkg/wire_gen.go b/e2e/cmd/e2e/pkg/wire_gen.go index f430a4d08d..11b955a2f3 100644 --- a/e2e/cmd/e2e/pkg/wire_gen.go +++ b/e2e/cmd/e2e/pkg/wire_gen.go @@ -37,7 +37,6 @@ import ( siwe2 "github.com/authgear/authgear-server/pkg/lib/feature/siwe" stdattrs2 "github.com/authgear/authgear-server/pkg/lib/feature/stdattrs" "github.com/authgear/authgear-server/pkg/lib/feature/verification" - "github.com/authgear/authgear-server/pkg/lib/feature/web3" "github.com/authgear/authgear-server/pkg/lib/hook" "github.com/authgear/authgear-server/pkg/lib/infra/db/appdb" "github.com/authgear/authgear-server/pkg/lib/infra/db/auditdb" @@ -471,13 +470,6 @@ func newUserImport(p *deps.AppProvider) *userimport.UserImportService { UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -494,7 +486,6 @@ func newUserImport(p *deps.AppProvider) *userimport.UserImportService { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -714,8 +705,8 @@ func newUserImport(p *deps.AppProvider) *userimport.UserImportService { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: serviceLogger, WhatsappConfig: whatsappConfig, @@ -764,7 +755,6 @@ func newUserImport(p *deps.AppProvider) *userimport.UserImportService { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ diff --git a/pkg/admin/wire_gen.go b/pkg/admin/wire_gen.go index 660b72782d..32265f5c91 100644 --- a/pkg/admin/wire_gen.go +++ b/pkg/admin/wire_gen.go @@ -47,7 +47,6 @@ import ( siwe2 "github.com/authgear/authgear-server/pkg/lib/feature/siwe" stdattrs2 "github.com/authgear/authgear-server/pkg/lib/feature/stdattrs" "github.com/authgear/authgear-server/pkg/lib/feature/verification" - "github.com/authgear/authgear-server/pkg/lib/feature/web3" "github.com/authgear/authgear-server/pkg/lib/healthz" "github.com/authgear/authgear-server/pkg/lib/hook" "github.com/authgear/authgear-server/pkg/lib/infra/db/appdb" @@ -526,13 +525,6 @@ func newGraphQLHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -549,7 +541,6 @@ func newGraphQLHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } userLoader := loader.NewUserLoader(userQueries) @@ -701,7 +692,6 @@ func newGraphQLHandler(p *deps.RequestProvider) http.Handler { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } userProvider := &user.Provider{ @@ -813,8 +803,8 @@ func newGraphQLHandler(p *deps.RequestProvider) http.Handler { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: serviceLogger, WhatsappConfig: whatsappConfig, @@ -1777,13 +1767,6 @@ func newUserExportCreateHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -1800,18 +1783,17 @@ func newUserExportCreateHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } userexportLogger := userexport.NewLogger(factory) - userexportHTTPClient := userexport.NewHTTPClient() + httpClient := userexport.NewHTTPClient() userExportService := &userexport.UserExportService{ AppDatabase: appdbHandle, Config: userProfileConfig, UserQueries: userQueries, Logger: userexportLogger, HTTPOrigin: httpOrigin, - HTTPClient: userexportHTTPClient, + HTTPClient: httpClient, CloudStorage: userExportCloudStorage, Clock: clockClock, } diff --git a/pkg/auth/wire_gen.go b/pkg/auth/wire_gen.go index bc01fefe7a..7ed5ac45c3 100644 --- a/pkg/auth/wire_gen.go +++ b/pkg/auth/wire_gen.go @@ -57,7 +57,6 @@ import ( siwe2 "github.com/authgear/authgear-server/pkg/lib/feature/siwe" stdattrs2 "github.com/authgear/authgear-server/pkg/lib/feature/stdattrs" "github.com/authgear/authgear-server/pkg/lib/feature/verification" - "github.com/authgear/authgear-server/pkg/lib/feature/web3" "github.com/authgear/authgear-server/pkg/lib/healthz" "github.com/authgear/authgear-server/pkg/lib/hook" captcha2 "github.com/authgear/authgear-server/pkg/lib/infra/captcha" @@ -518,13 +517,6 @@ func newOAuthAuthorizeHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -541,7 +533,6 @@ func newOAuthAuthorizeHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } idTokenIssuer := &oidc.IDTokenIssuer{ @@ -907,8 +898,8 @@ func newOAuthAuthorizeHandler(p *deps.RequestProvider) http.Handler { AppID: appID, Clock: clock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: serviceLogger, WhatsappConfig: whatsappConfig, @@ -957,7 +948,6 @@ func newOAuthAuthorizeHandler(p *deps.RequestProvider) http.Handler { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -1448,13 +1438,6 @@ func newOAuthConsentHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -1471,7 +1454,6 @@ func newOAuthConsentHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } idTokenIssuer := &oidc.IDTokenIssuer{ @@ -1837,8 +1819,8 @@ func newOAuthConsentHandler(p *deps.RequestProvider) http.Handler { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: serviceLogger, WhatsappConfig: whatsappConfig, @@ -1887,7 +1869,6 @@ func newOAuthConsentHandler(p *deps.RequestProvider) http.Handler { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -2498,13 +2479,6 @@ func newOAuthTokenHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -2521,7 +2495,6 @@ func newOAuthTokenHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } idTokenIssuer := &oidc.IDTokenIssuer{ @@ -2751,8 +2724,8 @@ func newOAuthTokenHandler(p *deps.RequestProvider) http.Handler { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: serviceLogger, WhatsappConfig: whatsappConfig, @@ -2801,7 +2774,6 @@ func newOAuthTokenHandler(p *deps.RequestProvider) http.Handler { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -3555,13 +3527,6 @@ func newOAuthRevokeHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -3578,7 +3543,6 @@ func newOAuthRevokeHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -4124,13 +4088,6 @@ func newOAuthJWKSHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -4147,7 +4104,6 @@ func newOAuthJWKSHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } idTokenIssuer := &oidc.IDTokenIssuer{ @@ -4531,13 +4487,6 @@ func newOAuthUserInfoHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -4554,7 +4503,6 @@ func newOAuthUserInfoHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } idTokenIssuer := &oidc.IDTokenIssuer{ @@ -5026,13 +4974,6 @@ func newOAuthEndSessionHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -5049,7 +4990,6 @@ func newOAuthEndSessionHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -5676,13 +5616,6 @@ func newOAuthAppSessionTokenHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -5699,7 +5632,6 @@ func newOAuthAppSessionTokenHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } idTokenIssuer := &oidc.IDTokenIssuer{ @@ -5929,8 +5861,8 @@ func newOAuthAppSessionTokenHandler(p *deps.RequestProvider) http.Handler { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: serviceLogger, WhatsappConfig: whatsappConfig, @@ -5979,7 +5911,6 @@ func newOAuthAppSessionTokenHandler(p *deps.RequestProvider) http.Handler { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -6760,13 +6691,6 @@ func newAPIAnonymousUserSignupHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -6783,7 +6707,6 @@ func newAPIAnonymousUserSignupHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -7003,8 +6926,8 @@ func newAPIAnonymousUserSignupHandler(p *deps.RequestProvider) http.Handler { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: serviceLogger, WhatsappConfig: whatsappConfig, @@ -7053,7 +6976,6 @@ func newAPIAnonymousUserSignupHandler(p *deps.RequestProvider) http.Handler { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -7775,13 +7697,6 @@ func newAPIAnonymousUserPromotionCodeHandler(p *deps.RequestProvider) http.Handl UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -7798,7 +7713,6 @@ func newAPIAnonymousUserPromotionCodeHandler(p *deps.RequestProvider) http.Handl Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -8018,8 +7932,8 @@ func newAPIAnonymousUserPromotionCodeHandler(p *deps.RequestProvider) http.Handl AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: serviceLogger, WhatsappConfig: whatsappConfig, @@ -8068,7 +7982,6 @@ func newAPIAnonymousUserPromotionCodeHandler(p *deps.RequestProvider) http.Handl UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -8922,13 +8835,6 @@ func newWebAppLoginHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -8945,7 +8851,6 @@ func newWebAppLoginHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -9165,8 +9070,8 @@ func newWebAppLoginHandler(p *deps.RequestProvider) http.Handler { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -9215,7 +9120,6 @@ func newWebAppLoginHandler(p *deps.RequestProvider) http.Handler { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -9965,13 +9869,6 @@ func newWebAppSignupHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -9988,7 +9885,6 @@ func newWebAppSignupHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -10208,8 +10104,8 @@ func newWebAppSignupHandler(p *deps.RequestProvider) http.Handler { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -10258,7 +10154,6 @@ func newWebAppSignupHandler(p *deps.RequestProvider) http.Handler { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -11007,13 +10902,6 @@ func newWebAppPromoteHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -11030,7 +10918,6 @@ func newWebAppPromoteHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -11250,8 +11137,8 @@ func newWebAppPromoteHandler(p *deps.RequestProvider) http.Handler { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -11300,7 +11187,6 @@ func newWebAppPromoteHandler(p *deps.RequestProvider) http.Handler { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -12049,13 +11935,6 @@ func newWebAppSelectAccountHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -12072,7 +11951,6 @@ func newWebAppSelectAccountHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -12292,8 +12170,8 @@ func newWebAppSelectAccountHandler(p *deps.RequestProvider) http.Handler { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -12342,7 +12220,6 @@ func newWebAppSelectAccountHandler(p *deps.RequestProvider) http.Handler { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -13069,13 +12946,6 @@ func newWebAppAuthflowV2VerifyBotProtectionHandler(p *deps.RequestProvider) http UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -13092,7 +12962,6 @@ func newWebAppAuthflowV2VerifyBotProtectionHandler(p *deps.RequestProvider) http Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -13215,7 +13084,6 @@ func newWebAppAuthflowV2VerifyBotProtectionHandler(p *deps.RequestProvider) http UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } userProvider := &user.Provider{ @@ -13327,8 +13195,8 @@ func newWebAppAuthflowV2VerifyBotProtectionHandler(p *deps.RequestProvider) http AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: serviceLogger, WhatsappConfig: whatsappConfig, @@ -14215,13 +14083,6 @@ func newWebAppAuthflowV2SelectAccountHandler(p *deps.RequestProvider) http.Handl UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -14238,7 +14099,6 @@ func newWebAppAuthflowV2SelectAccountHandler(p *deps.RequestProvider) http.Handl Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -14458,8 +14318,8 @@ func newWebAppAuthflowV2SelectAccountHandler(p *deps.RequestProvider) http.Handl AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -14508,7 +14368,6 @@ func newWebAppAuthflowV2SelectAccountHandler(p *deps.RequestProvider) http.Handl UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -15235,13 +15094,6 @@ func newWebAppSSOCallbackHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -15258,7 +15110,6 @@ func newWebAppSSOCallbackHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -15381,7 +15232,6 @@ func newWebAppSSOCallbackHandler(p *deps.RequestProvider) http.Handler { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } userProvider := &user.Provider{ @@ -15493,8 +15343,8 @@ func newWebAppSSOCallbackHandler(p *deps.RequestProvider) http.Handler { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: serviceLogger, WhatsappConfig: whatsappConfig, @@ -16477,13 +16327,6 @@ func newWebAppAuthflowSSOCallbackHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -16500,7 +16343,6 @@ func newWebAppAuthflowSSOCallbackHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -16623,7 +16465,6 @@ func newWebAppAuthflowSSOCallbackHandler(p *deps.RequestProvider) http.Handler { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } userProvider := &user.Provider{ @@ -16735,8 +16576,8 @@ func newWebAppAuthflowSSOCallbackHandler(p *deps.RequestProvider) http.Handler { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: serviceLogger, WhatsappConfig: whatsappConfig, @@ -17719,13 +17560,6 @@ func newWebAppAuthflowV2SSOCallbackHandler(p *deps.RequestProvider) http.Handler UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -17742,7 +17576,6 @@ func newWebAppAuthflowV2SSOCallbackHandler(p *deps.RequestProvider) http.Handler Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -17865,7 +17698,6 @@ func newWebAppAuthflowV2SSOCallbackHandler(p *deps.RequestProvider) http.Handler UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } userProvider := &user.Provider{ @@ -17977,8 +17809,8 @@ func newWebAppAuthflowV2SSOCallbackHandler(p *deps.RequestProvider) http.Handler AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: serviceLogger, WhatsappConfig: whatsappConfig, @@ -18983,13 +18815,6 @@ func newWechatAuthHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -19006,7 +18831,6 @@ func newWechatAuthHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -19226,8 +19050,8 @@ func newWechatAuthHandler(p *deps.RequestProvider) http.Handler { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -19276,7 +19100,6 @@ func newWechatAuthHandler(p *deps.RequestProvider) http.Handler { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -20010,13 +19833,6 @@ func newWechatCallbackHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -20033,7 +19849,6 @@ func newWechatCallbackHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -20253,8 +20068,8 @@ func newWechatCallbackHandler(p *deps.RequestProvider) http.Handler { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -20303,7 +20118,6 @@ func newWechatCallbackHandler(p *deps.RequestProvider) http.Handler { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -21042,13 +20856,6 @@ func newWebAppEnterLoginIDHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -21065,7 +20872,6 @@ func newWebAppEnterLoginIDHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -21285,8 +21091,8 @@ func newWebAppEnterLoginIDHandler(p *deps.RequestProvider) http.Handler { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -21335,7 +21141,6 @@ func newWebAppEnterLoginIDHandler(p *deps.RequestProvider) http.Handler { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -22076,13 +21881,6 @@ func newWebAppEnterPasswordHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -22099,7 +21897,6 @@ func newWebAppEnterPasswordHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -22319,8 +22116,8 @@ func newWebAppEnterPasswordHandler(p *deps.RequestProvider) http.Handler { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -22369,7 +22166,6 @@ func newWebAppEnterPasswordHandler(p *deps.RequestProvider) http.Handler { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -23107,13 +22903,6 @@ func newWebConfirmTerminateOtherSessionsHandler(p *deps.RequestProvider) http.Ha UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -23130,7 +22919,6 @@ func newWebConfirmTerminateOtherSessionsHandler(p *deps.RequestProvider) http.Ha Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -23350,8 +23138,8 @@ func newWebConfirmTerminateOtherSessionsHandler(p *deps.RequestProvider) http.Ha AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -23400,7 +23188,6 @@ func newWebConfirmTerminateOtherSessionsHandler(p *deps.RequestProvider) http.Ha UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -24135,13 +23922,6 @@ func newWebAppUsePasskeyHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -24158,7 +23938,6 @@ func newWebAppUsePasskeyHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -24378,8 +24157,8 @@ func newWebAppUsePasskeyHandler(p *deps.RequestProvider) http.Handler { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -24428,7 +24207,6 @@ func newWebAppUsePasskeyHandler(p *deps.RequestProvider) http.Handler { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -25166,13 +24944,6 @@ func newWebAppCreatePasswordHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -25189,7 +24960,6 @@ func newWebAppCreatePasswordHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -25409,8 +25179,8 @@ func newWebAppCreatePasswordHandler(p *deps.RequestProvider) http.Handler { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -25459,7 +25229,6 @@ func newWebAppCreatePasswordHandler(p *deps.RequestProvider) http.Handler { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -26198,13 +25967,6 @@ func newWebAppCreatePasskeyHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -26221,7 +25983,6 @@ func newWebAppCreatePasskeyHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -26441,8 +26202,8 @@ func newWebAppCreatePasskeyHandler(p *deps.RequestProvider) http.Handler { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -26491,7 +26252,6 @@ func newWebAppCreatePasskeyHandler(p *deps.RequestProvider) http.Handler { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -27229,13 +26989,6 @@ func newWebAppPromptCreatePasskeyHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -27252,7 +27005,6 @@ func newWebAppPromptCreatePasskeyHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -27472,8 +27224,8 @@ func newWebAppPromptCreatePasskeyHandler(p *deps.RequestProvider) http.Handler { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -27522,7 +27274,6 @@ func newWebAppPromptCreatePasskeyHandler(p *deps.RequestProvider) http.Handler { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -28260,13 +28011,6 @@ func newWebAppSetupTOTPHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -28283,7 +28027,6 @@ func newWebAppSetupTOTPHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -28503,8 +28246,8 @@ func newWebAppSetupTOTPHandler(p *deps.RequestProvider) http.Handler { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -28553,7 +28296,6 @@ func newWebAppSetupTOTPHandler(p *deps.RequestProvider) http.Handler { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -29293,13 +29035,6 @@ func newWebAppEnterTOTPHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -29316,7 +29051,6 @@ func newWebAppEnterTOTPHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -29536,8 +29270,8 @@ func newWebAppEnterTOTPHandler(p *deps.RequestProvider) http.Handler { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -29586,7 +29320,6 @@ func newWebAppEnterTOTPHandler(p *deps.RequestProvider) http.Handler { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -30324,13 +30057,6 @@ func newWebAppSetupOOBOTPHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -30347,7 +30073,6 @@ func newWebAppSetupOOBOTPHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -30567,8 +30292,8 @@ func newWebAppSetupOOBOTPHandler(p *deps.RequestProvider) http.Handler { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -30617,7 +30342,6 @@ func newWebAppSetupOOBOTPHandler(p *deps.RequestProvider) http.Handler { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -31355,13 +31079,6 @@ func newWebAppEnterOOBOTPHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -31378,7 +31095,6 @@ func newWebAppEnterOOBOTPHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -31598,8 +31314,8 @@ func newWebAppEnterOOBOTPHandler(p *deps.RequestProvider) http.Handler { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -31648,7 +31364,6 @@ func newWebAppEnterOOBOTPHandler(p *deps.RequestProvider) http.Handler { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -32390,13 +32105,6 @@ func newWebAppSetupWhatsappOTPHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -32413,7 +32121,6 @@ func newWebAppSetupWhatsappOTPHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -32633,8 +32340,8 @@ func newWebAppSetupWhatsappOTPHandler(p *deps.RequestProvider) http.Handler { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -32683,7 +32390,6 @@ func newWebAppSetupWhatsappOTPHandler(p *deps.RequestProvider) http.Handler { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -33421,13 +33127,6 @@ func newWebAppWhatsappOTPHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -33444,7 +33143,6 @@ func newWebAppWhatsappOTPHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -33664,8 +33362,8 @@ func newWebAppWhatsappOTPHandler(p *deps.RequestProvider) http.Handler { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -33714,7 +33412,6 @@ func newWebAppWhatsappOTPHandler(p *deps.RequestProvider) http.Handler { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -34456,13 +34153,6 @@ func newWebAppSetupLoginLinkOTPHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -34479,7 +34169,6 @@ func newWebAppSetupLoginLinkOTPHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -34699,8 +34388,8 @@ func newWebAppSetupLoginLinkOTPHandler(p *deps.RequestProvider) http.Handler { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -34749,7 +34438,6 @@ func newWebAppSetupLoginLinkOTPHandler(p *deps.RequestProvider) http.Handler { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -35487,13 +35175,6 @@ func newWebAppLoginLinkOTPHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -35510,7 +35191,6 @@ func newWebAppLoginLinkOTPHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -35730,8 +35410,8 @@ func newWebAppLoginLinkOTPHandler(p *deps.RequestProvider) http.Handler { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -35780,7 +35460,6 @@ func newWebAppLoginLinkOTPHandler(p *deps.RequestProvider) http.Handler { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -36526,13 +36205,6 @@ func newWebAppVerifyLoginLinkOTPHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -36549,7 +36221,6 @@ func newWebAppVerifyLoginLinkOTPHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -36769,8 +36440,8 @@ func newWebAppVerifyLoginLinkOTPHandler(p *deps.RequestProvider) http.Handler { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -36819,7 +36490,6 @@ func newWebAppVerifyLoginLinkOTPHandler(p *deps.RequestProvider) http.Handler { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -37577,13 +37247,6 @@ func newWebAppAuthflowV2VerifyLoginLinkOTPHandler(p *deps.RequestProvider) http. UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -37600,7 +37263,6 @@ func newWebAppAuthflowV2VerifyLoginLinkOTPHandler(p *deps.RequestProvider) http. Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -37820,8 +37482,8 @@ func newWebAppAuthflowV2VerifyLoginLinkOTPHandler(p *deps.RequestProvider) http. AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -37870,7 +37532,6 @@ func newWebAppAuthflowV2VerifyLoginLinkOTPHandler(p *deps.RequestProvider) http. UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -38618,13 +38279,6 @@ func newWebAppEnterRecoveryCodeHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -38641,7 +38295,6 @@ func newWebAppEnterRecoveryCodeHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -38861,8 +38514,8 @@ func newWebAppEnterRecoveryCodeHandler(p *deps.RequestProvider) http.Handler { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -38911,7 +38564,6 @@ func newWebAppEnterRecoveryCodeHandler(p *deps.RequestProvider) http.Handler { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -39649,13 +39301,6 @@ func newWebAppSetupRecoveryCodeHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -39672,7 +39317,6 @@ func newWebAppSetupRecoveryCodeHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -39892,8 +39536,8 @@ func newWebAppSetupRecoveryCodeHandler(p *deps.RequestProvider) http.Handler { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -39942,7 +39586,6 @@ func newWebAppSetupRecoveryCodeHandler(p *deps.RequestProvider) http.Handler { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -40676,13 +40319,6 @@ func newWebAppVerifyIdentityHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -40699,7 +40335,6 @@ func newWebAppVerifyIdentityHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -40919,8 +40554,8 @@ func newWebAppVerifyIdentityHandler(p *deps.RequestProvider) http.Handler { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -40969,7 +40604,6 @@ func newWebAppVerifyIdentityHandler(p *deps.RequestProvider) http.Handler { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -41707,13 +41341,6 @@ func newWebAppVerifyIdentitySuccessHandler(p *deps.RequestProvider) http.Handler UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -41730,7 +41357,6 @@ func newWebAppVerifyIdentitySuccessHandler(p *deps.RequestProvider) http.Handler Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -41950,8 +41576,8 @@ func newWebAppVerifyIdentitySuccessHandler(p *deps.RequestProvider) http.Handler AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -42000,7 +41626,6 @@ func newWebAppVerifyIdentitySuccessHandler(p *deps.RequestProvider) http.Handler UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -42734,13 +42359,6 @@ func newWebAppForgotPasswordHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -42757,7 +42375,6 @@ func newWebAppForgotPasswordHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -42977,8 +42594,8 @@ func newWebAppForgotPasswordHandler(p *deps.RequestProvider) http.Handler { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -43027,7 +42644,6 @@ func newWebAppForgotPasswordHandler(p *deps.RequestProvider) http.Handler { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -43771,13 +43387,6 @@ func newWebAppForgotPasswordSuccessHandler(p *deps.RequestProvider) http.Handler UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -43794,7 +43403,6 @@ func newWebAppForgotPasswordSuccessHandler(p *deps.RequestProvider) http.Handler Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -44014,8 +43622,8 @@ func newWebAppForgotPasswordSuccessHandler(p *deps.RequestProvider) http.Handler AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -44064,7 +43672,6 @@ func newWebAppForgotPasswordSuccessHandler(p *deps.RequestProvider) http.Handler UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -44798,13 +44405,6 @@ func newWebAppResetPasswordHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -44821,7 +44421,6 @@ func newWebAppResetPasswordHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -45041,8 +44640,8 @@ func newWebAppResetPasswordHandler(p *deps.RequestProvider) http.Handler { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -45091,7 +44690,6 @@ func newWebAppResetPasswordHandler(p *deps.RequestProvider) http.Handler { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -45827,13 +45425,6 @@ func newWebAppResetPasswordSuccessHandler(p *deps.RequestProvider) http.Handler UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -45850,7 +45441,6 @@ func newWebAppResetPasswordSuccessHandler(p *deps.RequestProvider) http.Handler Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -46070,8 +45660,8 @@ func newWebAppResetPasswordSuccessHandler(p *deps.RequestProvider) http.Handler AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -46120,7 +45710,6 @@ func newWebAppResetPasswordSuccessHandler(p *deps.RequestProvider) http.Handler UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -46854,13 +46443,6 @@ func newWebAppSettingsHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -46877,7 +46459,6 @@ func newWebAppSettingsHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -47097,8 +46678,8 @@ func newWebAppSettingsHandler(p *deps.RequestProvider) http.Handler { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -47147,7 +46728,6 @@ func newWebAppSettingsHandler(p *deps.RequestProvider) http.Handler { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -47916,13 +47496,6 @@ func newWebAppAuthflowV2SettingsHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -47939,7 +47512,6 @@ func newWebAppAuthflowV2SettingsHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -48159,8 +47731,8 @@ func newWebAppAuthflowV2SettingsHandler(p *deps.RequestProvider) http.Handler { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -48209,7 +47781,6 @@ func newWebAppAuthflowV2SettingsHandler(p *deps.RequestProvider) http.Handler { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -48973,13 +48544,6 @@ func newWebAppSettingsProfileHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -48996,7 +48560,6 @@ func newWebAppSettingsProfileHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -49216,8 +48779,8 @@ func newWebAppSettingsProfileHandler(p *deps.RequestProvider) http.Handler { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -49266,7 +48829,6 @@ func newWebAppSettingsProfileHandler(p *deps.RequestProvider) http.Handler { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -50011,13 +49573,6 @@ func newWebAppSettingsProfileEditHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -50034,7 +49589,6 @@ func newWebAppSettingsProfileEditHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -50254,8 +49808,8 @@ func newWebAppSettingsProfileEditHandler(p *deps.RequestProvider) http.Handler { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -50304,7 +49858,6 @@ func newWebAppSettingsProfileEditHandler(p *deps.RequestProvider) http.Handler { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -51061,13 +50614,6 @@ func newWebAppAuthflowV2SettingsProfileEditHandler(p *deps.RequestProvider) http UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -51084,7 +50630,6 @@ func newWebAppAuthflowV2SettingsProfileEditHandler(p *deps.RequestProvider) http Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -51304,8 +50849,8 @@ func newWebAppAuthflowV2SettingsProfileEditHandler(p *deps.RequestProvider) http AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -51354,7 +50899,6 @@ func newWebAppAuthflowV2SettingsProfileEditHandler(p *deps.RequestProvider) http UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -52113,13 +51657,6 @@ func newWebAppSettingsIdentityHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -52136,7 +51673,6 @@ func newWebAppSettingsIdentityHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -52356,8 +51892,8 @@ func newWebAppSettingsIdentityHandler(p *deps.RequestProvider) http.Handler { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -52406,7 +51942,6 @@ func newWebAppSettingsIdentityHandler(p *deps.RequestProvider) http.Handler { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -53148,13 +52683,6 @@ func newWebAppSettingsBiometricHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -53171,7 +52699,6 @@ func newWebAppSettingsBiometricHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -53391,8 +52918,8 @@ func newWebAppSettingsBiometricHandler(p *deps.RequestProvider) http.Handler { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -53441,7 +52968,6 @@ func newWebAppSettingsBiometricHandler(p *deps.RequestProvider) http.Handler { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -54176,13 +53702,6 @@ func newWebAppAuthflowV2SettingsBiometricHandler(p *deps.RequestProvider) http.H UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -54199,7 +53718,6 @@ func newWebAppAuthflowV2SettingsBiometricHandler(p *deps.RequestProvider) http.H Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -54419,8 +53937,8 @@ func newWebAppAuthflowV2SettingsBiometricHandler(p *deps.RequestProvider) http.H AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -54469,7 +53987,6 @@ func newWebAppAuthflowV2SettingsBiometricHandler(p *deps.RequestProvider) http.H UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -55244,13 +54761,6 @@ func newWebAppSettingsMFAHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -55267,7 +54777,6 @@ func newWebAppSettingsMFAHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -55487,8 +54996,8 @@ func newWebAppSettingsMFAHandler(p *deps.RequestProvider) http.Handler { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -55537,7 +55046,6 @@ func newWebAppSettingsMFAHandler(p *deps.RequestProvider) http.Handler { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -56283,13 +55791,6 @@ func newWebAppAuthflowV2SettingsMFAHandler(p *deps.RequestProvider) http.Handler UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -56306,7 +55807,6 @@ func newWebAppAuthflowV2SettingsMFAHandler(p *deps.RequestProvider) http.Handler Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -56526,8 +56026,8 @@ func newWebAppAuthflowV2SettingsMFAHandler(p *deps.RequestProvider) http.Handler AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -56576,7 +56076,6 @@ func newWebAppAuthflowV2SettingsMFAHandler(p *deps.RequestProvider) http.Handler UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -57323,13 +56822,6 @@ func newWebAppAuthflowV2SettingsMFAViewRecoveryCodeHandler(p *deps.RequestProvid UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -57346,7 +56838,6 @@ func newWebAppAuthflowV2SettingsMFAViewRecoveryCodeHandler(p *deps.RequestProvid Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -57566,8 +57057,8 @@ func newWebAppAuthflowV2SettingsMFAViewRecoveryCodeHandler(p *deps.RequestProvid AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -57616,7 +57107,6 @@ func newWebAppAuthflowV2SettingsMFAViewRecoveryCodeHandler(p *deps.RequestProvid UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -58379,13 +57869,6 @@ func newWebAppAuthflowV2SettingsMFACreatePasswordHandler(p *deps.RequestProvider UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -58402,7 +57885,6 @@ func newWebAppAuthflowV2SettingsMFACreatePasswordHandler(p *deps.RequestProvider Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -58622,8 +58104,8 @@ func newWebAppAuthflowV2SettingsMFACreatePasswordHandler(p *deps.RequestProvider AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -58672,7 +58154,6 @@ func newWebAppAuthflowV2SettingsMFACreatePasswordHandler(p *deps.RequestProvider UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -59445,13 +58926,6 @@ func newWebAppAuthflowV2SettingsMFAPasswordHandler(p *deps.RequestProvider) http UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -59468,7 +58942,6 @@ func newWebAppAuthflowV2SettingsMFAPasswordHandler(p *deps.RequestProvider) http Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -59688,8 +59161,8 @@ func newWebAppAuthflowV2SettingsMFAPasswordHandler(p *deps.RequestProvider) http AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -59738,7 +59211,6 @@ func newWebAppAuthflowV2SettingsMFAPasswordHandler(p *deps.RequestProvider) http UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -60511,13 +59983,6 @@ func newWebAppAuthflowV2SettingsMFAChangePasswordHandler(p *deps.RequestProvider UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -60534,7 +59999,6 @@ func newWebAppAuthflowV2SettingsMFAChangePasswordHandler(p *deps.RequestProvider Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -60754,8 +60218,8 @@ func newWebAppAuthflowV2SettingsMFAChangePasswordHandler(p *deps.RequestProvider AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -60804,7 +60268,6 @@ func newWebAppAuthflowV2SettingsMFAChangePasswordHandler(p *deps.RequestProvider UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -61566,13 +61029,6 @@ func newWebAppSettingsTOTPHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -61589,7 +61045,6 @@ func newWebAppSettingsTOTPHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -61809,8 +61264,8 @@ func newWebAppSettingsTOTPHandler(p *deps.RequestProvider) http.Handler { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -61859,7 +61314,6 @@ func newWebAppSettingsTOTPHandler(p *deps.RequestProvider) http.Handler { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -62594,13 +62048,6 @@ func newWebAppAuthflowV2SettingsTOTPHandler(p *deps.RequestProvider) http.Handle UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -62617,7 +62064,6 @@ func newWebAppAuthflowV2SettingsTOTPHandler(p *deps.RequestProvider) http.Handle Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -62837,8 +62283,8 @@ func newWebAppAuthflowV2SettingsTOTPHandler(p *deps.RequestProvider) http.Handle AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -62887,7 +62333,6 @@ func newWebAppAuthflowV2SettingsTOTPHandler(p *deps.RequestProvider) http.Handle UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -63672,13 +63117,6 @@ func newWebAppAuthflowV2SettingsMFACreateTOTPHandler(p *deps.RequestProvider) ht UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -63695,7 +63133,6 @@ func newWebAppAuthflowV2SettingsMFACreateTOTPHandler(p *deps.RequestProvider) ht Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -63915,8 +63352,8 @@ func newWebAppAuthflowV2SettingsMFACreateTOTPHandler(p *deps.RequestProvider) ht AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -63965,7 +63402,6 @@ func newWebAppAuthflowV2SettingsMFACreateTOTPHandler(p *deps.RequestProvider) ht UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -64738,13 +64174,6 @@ func newWebAppAuthflowV2SettingsMFAEnterTOTPHandler(p *deps.RequestProvider) htt UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -64761,7 +64190,6 @@ func newWebAppAuthflowV2SettingsMFAEnterTOTPHandler(p *deps.RequestProvider) htt Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -64981,8 +64409,8 @@ func newWebAppAuthflowV2SettingsMFAEnterTOTPHandler(p *deps.RequestProvider) htt AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -65031,7 +64459,6 @@ func newWebAppAuthflowV2SettingsMFAEnterTOTPHandler(p *deps.RequestProvider) htt UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -65805,13 +65232,6 @@ func newWebAppAuthflowV2SettingsOOBOTPHandler(p *deps.RequestProvider) http.Hand UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -65828,7 +65248,6 @@ func newWebAppAuthflowV2SettingsOOBOTPHandler(p *deps.RequestProvider) http.Hand Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -66048,8 +65467,8 @@ func newWebAppAuthflowV2SettingsOOBOTPHandler(p *deps.RequestProvider) http.Hand AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -66098,7 +65517,6 @@ func newWebAppAuthflowV2SettingsOOBOTPHandler(p *deps.RequestProvider) http.Hand UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -66884,13 +66302,6 @@ func newWebAppAuthflowV2SettingsMFACreateOOBOTPHandler(p *deps.RequestProvider) UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -66907,7 +66318,6 @@ func newWebAppAuthflowV2SettingsMFACreateOOBOTPHandler(p *deps.RequestProvider) Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -67127,8 +66537,8 @@ func newWebAppAuthflowV2SettingsMFACreateOOBOTPHandler(p *deps.RequestProvider) AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -67177,7 +66587,6 @@ func newWebAppAuthflowV2SettingsMFACreateOOBOTPHandler(p *deps.RequestProvider) UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -67950,13 +67359,6 @@ func newWebAppAuthflowV2SettingsMFAEnterOOBOTPHandler(p *deps.RequestProvider) h UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -67973,7 +67375,6 @@ func newWebAppAuthflowV2SettingsMFAEnterOOBOTPHandler(p *deps.RequestProvider) h Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -68193,8 +67594,8 @@ func newWebAppAuthflowV2SettingsMFAEnterOOBOTPHandler(p *deps.RequestProvider) h AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -68243,7 +67644,6 @@ func newWebAppAuthflowV2SettingsMFAEnterOOBOTPHandler(p *deps.RequestProvider) h UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -69008,13 +68408,6 @@ func newWebAppSettingsPasskeyHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -69031,7 +68424,6 @@ func newWebAppSettingsPasskeyHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -69251,8 +68643,8 @@ func newWebAppSettingsPasskeyHandler(p *deps.RequestProvider) http.Handler { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -69301,7 +68693,6 @@ func newWebAppSettingsPasskeyHandler(p *deps.RequestProvider) http.Handler { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -70036,13 +69427,6 @@ func newWebAppAuthflowV2SettingsChangePasskeyHandler(p *deps.RequestProvider) ht UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -70059,7 +69443,6 @@ func newWebAppAuthflowV2SettingsChangePasskeyHandler(p *deps.RequestProvider) ht Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -70279,8 +69662,8 @@ func newWebAppAuthflowV2SettingsChangePasskeyHandler(p *deps.RequestProvider) ht AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -70329,7 +69712,6 @@ func newWebAppAuthflowV2SettingsChangePasskeyHandler(p *deps.RequestProvider) ht UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -71123,13 +70505,6 @@ func newWebAppSettingsOOBOTPHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -71146,7 +70521,6 @@ func newWebAppSettingsOOBOTPHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -71366,8 +70740,8 @@ func newWebAppSettingsOOBOTPHandler(p *deps.RequestProvider) http.Handler { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -71416,7 +70790,6 @@ func newWebAppSettingsOOBOTPHandler(p *deps.RequestProvider) http.Handler { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -72151,13 +71524,6 @@ func newWebAppSettingsRecoveryCodeHandler(p *deps.RequestProvider) http.Handler UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -72174,7 +71540,6 @@ func newWebAppSettingsRecoveryCodeHandler(p *deps.RequestProvider) http.Handler Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -72394,8 +71759,8 @@ func newWebAppSettingsRecoveryCodeHandler(p *deps.RequestProvider) http.Handler AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -72444,7 +71809,6 @@ func newWebAppSettingsRecoveryCodeHandler(p *deps.RequestProvider) http.Handler UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -73180,13 +72544,6 @@ func newWebAppSettingsSessionsHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -73203,7 +72560,6 @@ func newWebAppSettingsSessionsHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -73423,8 +72779,8 @@ func newWebAppSettingsSessionsHandler(p *deps.RequestProvider) http.Handler { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -73473,7 +72829,6 @@ func newWebAppSettingsSessionsHandler(p *deps.RequestProvider) http.Handler { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -74233,13 +73588,6 @@ func newWebAppAuthflowV2SettingsSessionsHandler(p *deps.RequestProvider) http.Ha UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -74256,7 +73604,6 @@ func newWebAppAuthflowV2SettingsSessionsHandler(p *deps.RequestProvider) http.Ha Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -74476,8 +73823,8 @@ func newWebAppAuthflowV2SettingsSessionsHandler(p *deps.RequestProvider) http.Ha AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -74526,7 +73873,6 @@ func newWebAppAuthflowV2SettingsSessionsHandler(p *deps.RequestProvider) http.Ha UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -75298,13 +74644,6 @@ func newWebAppForceChangePasswordHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -75321,7 +74660,6 @@ func newWebAppForceChangePasswordHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -75541,8 +74879,8 @@ func newWebAppForceChangePasswordHandler(p *deps.RequestProvider) http.Handler { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -75591,7 +74929,6 @@ func newWebAppForceChangePasswordHandler(p *deps.RequestProvider) http.Handler { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -76331,13 +75668,6 @@ func newWebAppSettingsChangePasswordHandler(p *deps.RequestProvider) http.Handle UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -76354,7 +75684,6 @@ func newWebAppSettingsChangePasswordHandler(p *deps.RequestProvider) http.Handle Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -76574,8 +75903,8 @@ func newWebAppSettingsChangePasswordHandler(p *deps.RequestProvider) http.Handle AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -76624,7 +75953,6 @@ func newWebAppSettingsChangePasswordHandler(p *deps.RequestProvider) http.Handle UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -77359,13 +76687,6 @@ func newWebAppAuthflowV2SettingsChangePasswordHandler(p *deps.RequestProvider) h UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -77382,7 +76703,6 @@ func newWebAppAuthflowV2SettingsChangePasswordHandler(p *deps.RequestProvider) h Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -77602,8 +76922,8 @@ func newWebAppAuthflowV2SettingsChangePasswordHandler(p *deps.RequestProvider) h AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -77652,7 +76972,6 @@ func newWebAppAuthflowV2SettingsChangePasswordHandler(p *deps.RequestProvider) h UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -78414,13 +77733,6 @@ func newWebAppForceChangeSecondaryPasswordHandler(p *deps.RequestProvider) http. UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -78437,7 +77749,6 @@ func newWebAppForceChangeSecondaryPasswordHandler(p *deps.RequestProvider) http. Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -78657,8 +77968,8 @@ func newWebAppForceChangeSecondaryPasswordHandler(p *deps.RequestProvider) http. AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -78707,7 +78018,6 @@ func newWebAppForceChangeSecondaryPasswordHandler(p *deps.RequestProvider) http. UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -79447,13 +78757,6 @@ func newWebAppSettingsChangeSecondaryPasswordHandler(p *deps.RequestProvider) ht UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -79470,7 +78773,6 @@ func newWebAppSettingsChangeSecondaryPasswordHandler(p *deps.RequestProvider) ht Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -79690,8 +78992,8 @@ func newWebAppSettingsChangeSecondaryPasswordHandler(p *deps.RequestProvider) ht AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -79740,7 +79042,6 @@ func newWebAppSettingsChangeSecondaryPasswordHandler(p *deps.RequestProvider) ht UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -80475,13 +79776,6 @@ func newWebAppSettingsDeleteAccountHandler(p *deps.RequestProvider) http.Handler UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -80498,7 +79792,6 @@ func newWebAppSettingsDeleteAccountHandler(p *deps.RequestProvider) http.Handler Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -80718,8 +80011,8 @@ func newWebAppSettingsDeleteAccountHandler(p *deps.RequestProvider) http.Handler AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -80768,7 +80061,6 @@ func newWebAppSettingsDeleteAccountHandler(p *deps.RequestProvider) http.Handler UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -81514,13 +80806,6 @@ func newWebAppAuthflowV2SettingsDeleteAccountHandler(p *deps.RequestProvider) ht UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -81537,7 +80822,6 @@ func newWebAppAuthflowV2SettingsDeleteAccountHandler(p *deps.RequestProvider) ht Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -81757,8 +81041,8 @@ func newWebAppAuthflowV2SettingsDeleteAccountHandler(p *deps.RequestProvider) ht AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -81807,7 +81091,6 @@ func newWebAppAuthflowV2SettingsDeleteAccountHandler(p *deps.RequestProvider) ht UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -82564,13 +81847,6 @@ func newWebAppSettingsDeleteAccountSuccessHandler(p *deps.RequestProvider) http. UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -82587,7 +81863,6 @@ func newWebAppSettingsDeleteAccountSuccessHandler(p *deps.RequestProvider) http. Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -82807,8 +82082,8 @@ func newWebAppSettingsDeleteAccountSuccessHandler(p *deps.RequestProvider) http. AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -82857,7 +82132,6 @@ func newWebAppSettingsDeleteAccountSuccessHandler(p *deps.RequestProvider) http. UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -83595,13 +82869,6 @@ func newWebAppAuthflowV2SettingsDeleteAccountSuccessHandler(p *deps.RequestProvi UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -83618,7 +82885,6 @@ func newWebAppAuthflowV2SettingsDeleteAccountSuccessHandler(p *deps.RequestProvi Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -83838,8 +83104,8 @@ func newWebAppAuthflowV2SettingsDeleteAccountSuccessHandler(p *deps.RequestProvi AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -83888,7 +83154,6 @@ func newWebAppAuthflowV2SettingsDeleteAccountSuccessHandler(p *deps.RequestProvi UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -84626,13 +83891,6 @@ func newWebAppAuthflowV2SettingsAdvancedSettingsHandler(p *deps.RequestProvider) UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -84649,7 +83907,6 @@ func newWebAppAuthflowV2SettingsAdvancedSettingsHandler(p *deps.RequestProvider) Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -84869,8 +84126,8 @@ func newWebAppAuthflowV2SettingsAdvancedSettingsHandler(p *deps.RequestProvider) AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -84919,7 +84176,6 @@ func newWebAppAuthflowV2SettingsAdvancedSettingsHandler(p *deps.RequestProvider) UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -85653,13 +84909,6 @@ func newWebAppAccountStatusHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -85676,7 +84925,6 @@ func newWebAppAccountStatusHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -85896,8 +85144,8 @@ func newWebAppAccountStatusHandler(p *deps.RequestProvider) http.Handler { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -85946,7 +85194,6 @@ func newWebAppAccountStatusHandler(p *deps.RequestProvider) http.Handler { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -86680,13 +85927,6 @@ func newWebAppLogoutHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -86703,7 +85943,6 @@ func newWebAppLogoutHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -86923,8 +86162,8 @@ func newWebAppLogoutHandler(p *deps.RequestProvider) http.Handler { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -86973,7 +86212,6 @@ func newWebAppLogoutHandler(p *deps.RequestProvider) http.Handler { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -87772,13 +87010,6 @@ func newWebAppReturnHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -87795,7 +87026,6 @@ func newWebAppReturnHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -88015,8 +87245,8 @@ func newWebAppReturnHandler(p *deps.RequestProvider) http.Handler { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -88065,7 +87295,6 @@ func newWebAppReturnHandler(p *deps.RequestProvider) http.Handler { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -88799,13 +88028,6 @@ func newWebAppErrorHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -88822,7 +88044,6 @@ func newWebAppErrorHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -89042,8 +88263,8 @@ func newWebAppErrorHandler(p *deps.RequestProvider) http.Handler { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -89092,7 +88313,6 @@ func newWebAppErrorHandler(p *deps.RequestProvider) http.Handler { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -89804,13 +89024,6 @@ func newWebAppAuthflowV2ErrorHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -89827,7 +89040,6 @@ func newWebAppAuthflowV2ErrorHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -89950,7 +89162,6 @@ func newWebAppAuthflowV2ErrorHandler(p *deps.RequestProvider) http.Handler { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } userProvider := &user.Provider{ @@ -90062,8 +89273,8 @@ func newWebAppAuthflowV2ErrorHandler(p *deps.RequestProvider) http.Handler { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: serviceLogger, WhatsappConfig: whatsappConfig, @@ -90928,13 +90139,6 @@ func newWebAppCSRFErrorInstructionHandler(p *deps.RequestProvider) http.Handler UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -90951,7 +90155,6 @@ func newWebAppCSRFErrorInstructionHandler(p *deps.RequestProvider) http.Handler Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -91074,7 +90277,6 @@ func newWebAppCSRFErrorInstructionHandler(p *deps.RequestProvider) http.Handler UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } userProvider := &user.Provider{ @@ -91186,8 +90388,8 @@ func newWebAppCSRFErrorInstructionHandler(p *deps.RequestProvider) http.Handler AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: serviceLogger, WhatsappConfig: whatsappConfig, @@ -92074,13 +91276,6 @@ func newWebAppNotFoundHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -92097,7 +91292,6 @@ func newWebAppNotFoundHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -92317,8 +91511,8 @@ func newWebAppNotFoundHandler(p *deps.RequestProvider) http.Handler { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -92367,7 +91561,6 @@ func newWebAppNotFoundHandler(p *deps.RequestProvider) http.Handler { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -93101,13 +92294,6 @@ func newWebAppAuthflowV2NotFoundHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -93124,7 +92310,6 @@ func newWebAppAuthflowV2NotFoundHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -93344,8 +92529,8 @@ func newWebAppAuthflowV2NotFoundHandler(p *deps.RequestProvider) http.Handler { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -93394,7 +92579,6 @@ func newWebAppAuthflowV2NotFoundHandler(p *deps.RequestProvider) http.Handler { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -94146,13 +93330,6 @@ func newWebAppPasskeyCreationOptionsHandler(p *deps.RequestProvider) http.Handle UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -94169,7 +93346,6 @@ func newWebAppPasskeyCreationOptionsHandler(p *deps.RequestProvider) http.Handle Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -94389,8 +93565,8 @@ func newWebAppPasskeyCreationOptionsHandler(p *deps.RequestProvider) http.Handle AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -94439,7 +93615,6 @@ func newWebAppPasskeyCreationOptionsHandler(p *deps.RequestProvider) http.Handle UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -95118,13 +94293,6 @@ func newWebAppPasskeyRequestOptionsHandler(p *deps.RequestProvider) http.Handler UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -95141,7 +94309,6 @@ func newWebAppPasskeyRequestOptionsHandler(p *deps.RequestProvider) http.Handler Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -95361,8 +94528,8 @@ func newWebAppPasskeyRequestOptionsHandler(p *deps.RequestProvider) http.Handler AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -95411,7 +94578,6 @@ func newWebAppPasskeyRequestOptionsHandler(p *deps.RequestProvider) http.Handler UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -96089,13 +95255,6 @@ func newWebAppConnectWeb3AccountHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -96112,7 +95271,6 @@ func newWebAppConnectWeb3AccountHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -96332,8 +95490,8 @@ func newWebAppConnectWeb3AccountHandler(p *deps.RequestProvider) http.Handler { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -96382,7 +95540,6 @@ func newWebAppConnectWeb3AccountHandler(p *deps.RequestProvider) http.Handler { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -97126,13 +96283,6 @@ func newWebAppMissingWeb3WalletHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -97149,7 +96299,6 @@ func newWebAppMissingWeb3WalletHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -97369,8 +96518,8 @@ func newWebAppMissingWeb3WalletHandler(p *deps.RequestProvider) http.Handler { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -97419,7 +96568,6 @@ func newWebAppMissingWeb3WalletHandler(p *deps.RequestProvider) http.Handler { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -98154,13 +97302,6 @@ func newWebAppFeatureDisabledHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -98177,7 +97318,6 @@ func newWebAppFeatureDisabledHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -98397,8 +97537,8 @@ func newWebAppFeatureDisabledHandler(p *deps.RequestProvider) http.Handler { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -98447,7 +97587,6 @@ func newWebAppFeatureDisabledHandler(p *deps.RequestProvider) http.Handler { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -99181,13 +98320,6 @@ func newWebAppTesterHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -99204,7 +98336,6 @@ func newWebAppTesterHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -99424,8 +98555,8 @@ func newWebAppTesterHandler(p *deps.RequestProvider) http.Handler { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -99474,7 +98605,6 @@ func newWebAppTesterHandler(p *deps.RequestProvider) http.Handler { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -100334,13 +99464,6 @@ func newAPIWorkflowNewHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -100357,7 +99480,6 @@ func newAPIWorkflowNewHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -100480,7 +99602,6 @@ func newAPIWorkflowNewHandler(p *deps.RequestProvider) http.Handler { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } userProvider := &user.Provider{ @@ -100592,8 +99713,8 @@ func newAPIWorkflowNewHandler(p *deps.RequestProvider) http.Handler { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: serviceLogger, WhatsappConfig: whatsappConfig, @@ -101303,13 +100424,6 @@ func newAPIWorkflowGetHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -101326,7 +100440,6 @@ func newAPIWorkflowGetHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -101449,7 +100562,6 @@ func newAPIWorkflowGetHandler(p *deps.RequestProvider) http.Handler { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } userProvider := &user.Provider{ @@ -101561,8 +100673,8 @@ func newAPIWorkflowGetHandler(p *deps.RequestProvider) http.Handler { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: serviceLogger, WhatsappConfig: whatsappConfig, @@ -102234,13 +101346,6 @@ func newAPIWorkflowInputHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -102257,7 +101362,6 @@ func newAPIWorkflowInputHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -102380,7 +101484,6 @@ func newAPIWorkflowInputHandler(p *deps.RequestProvider) http.Handler { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } userProvider := &user.Provider{ @@ -102492,8 +101595,8 @@ func newAPIWorkflowInputHandler(p *deps.RequestProvider) http.Handler { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: serviceLogger, WhatsappConfig: whatsappConfig, @@ -103201,13 +102304,6 @@ func newAPIWorkflowV2Handler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -103224,7 +102320,6 @@ func newAPIWorkflowV2Handler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -103347,7 +102442,6 @@ func newAPIWorkflowV2Handler(p *deps.RequestProvider) http.Handler { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } userProvider := &user.Provider{ @@ -103459,8 +102553,8 @@ func newAPIWorkflowV2Handler(p *deps.RequestProvider) http.Handler { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: serviceLogger, WhatsappConfig: whatsappConfig, @@ -104172,13 +103266,6 @@ func newAPIAuthenticationFlowV1CreateHandler(p *deps.RequestProvider) http.Handl UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -104195,7 +103282,6 @@ func newAPIAuthenticationFlowV1CreateHandler(p *deps.RequestProvider) http.Handl Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -104318,7 +103404,6 @@ func newAPIAuthenticationFlowV1CreateHandler(p *deps.RequestProvider) http.Handl UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } userProvider := &user.Provider{ @@ -104430,8 +103515,8 @@ func newAPIAuthenticationFlowV1CreateHandler(p *deps.RequestProvider) http.Handl AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: serviceLogger, WhatsappConfig: whatsappConfig, @@ -105217,13 +104302,6 @@ func newAPIAuthenticationFlowV1InputHandler(p *deps.RequestProvider) http.Handle UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -105240,7 +104318,6 @@ func newAPIAuthenticationFlowV1InputHandler(p *deps.RequestProvider) http.Handle Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -105363,7 +104440,6 @@ func newAPIAuthenticationFlowV1InputHandler(p *deps.RequestProvider) http.Handle UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } userProvider := &user.Provider{ @@ -105475,8 +104551,8 @@ func newAPIAuthenticationFlowV1InputHandler(p *deps.RequestProvider) http.Handle AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: serviceLogger, WhatsappConfig: whatsappConfig, @@ -106228,13 +105304,6 @@ func newAPIAuthenticationFlowV1GetHandler(p *deps.RequestProvider) http.Handler UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -106251,7 +105320,6 @@ func newAPIAuthenticationFlowV1GetHandler(p *deps.RequestProvider) http.Handler Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -106374,7 +105442,6 @@ func newAPIAuthenticationFlowV1GetHandler(p *deps.RequestProvider) http.Handler UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } userProvider := &user.Provider{ @@ -106486,8 +105553,8 @@ func newAPIAuthenticationFlowV1GetHandler(p *deps.RequestProvider) http.Handler AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: serviceLogger, WhatsappConfig: whatsappConfig, @@ -107274,13 +106341,6 @@ func newAPIAccountManagementV1IdentificationHandler(p *deps.RequestProvider) htt UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -107297,7 +106357,6 @@ func newAPIAccountManagementV1IdentificationHandler(p *deps.RequestProvider) htt Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -107420,7 +106479,6 @@ func newAPIAccountManagementV1IdentificationHandler(p *deps.RequestProvider) htt UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } userProvider := &user.Provider{ @@ -107551,8 +106609,8 @@ func newAPIAccountManagementV1IdentificationHandler(p *deps.RequestProvider) htt AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: serviceLogger, WhatsappConfig: whatsappConfig, @@ -108134,13 +107192,6 @@ func newAPIAccountManagementV1IdentificationOAuthHandler(p *deps.RequestProvider UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -108157,7 +107208,6 @@ func newAPIAccountManagementV1IdentificationOAuthHandler(p *deps.RequestProvider Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -108280,7 +107330,6 @@ func newAPIAccountManagementV1IdentificationOAuthHandler(p *deps.RequestProvider UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } userProvider := &user.Provider{ @@ -108411,8 +107460,8 @@ func newAPIAccountManagementV1IdentificationOAuthHandler(p *deps.RequestProvider AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: serviceLogger, WhatsappConfig: whatsappConfig, @@ -109011,13 +108060,6 @@ func newWebAppAuthflowLoginHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -109034,7 +108076,6 @@ func newWebAppAuthflowLoginHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -109157,7 +108198,6 @@ func newWebAppAuthflowLoginHandler(p *deps.RequestProvider) http.Handler { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } userProvider := &user.Provider{ @@ -109269,8 +108309,8 @@ func newWebAppAuthflowLoginHandler(p *deps.RequestProvider) http.Handler { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: serviceLogger, WhatsappConfig: whatsappConfig, @@ -110148,13 +109188,6 @@ func newWebAppAuthflowV2LoginHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -110171,7 +109204,6 @@ func newWebAppAuthflowV2LoginHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -110294,7 +109326,6 @@ func newWebAppAuthflowV2LoginHandler(p *deps.RequestProvider) http.Handler { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } userProvider := &user.Provider{ @@ -110406,8 +109437,8 @@ func newWebAppAuthflowV2LoginHandler(p *deps.RequestProvider) http.Handler { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: serviceLogger, WhatsappConfig: whatsappConfig, @@ -111297,13 +110328,6 @@ func newWebAppAuthflowSignupHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -111320,7 +110344,6 @@ func newWebAppAuthflowSignupHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -111443,7 +110466,6 @@ func newWebAppAuthflowSignupHandler(p *deps.RequestProvider) http.Handler { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } userProvider := &user.Provider{ @@ -111555,8 +110577,8 @@ func newWebAppAuthflowSignupHandler(p *deps.RequestProvider) http.Handler { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: serviceLogger, WhatsappConfig: whatsappConfig, @@ -112433,13 +111455,6 @@ func newWebAppAuthflowV2SignupHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -112456,7 +111471,6 @@ func newWebAppAuthflowV2SignupHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -112579,7 +111593,6 @@ func newWebAppAuthflowV2SignupHandler(p *deps.RequestProvider) http.Handler { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } userProvider := &user.Provider{ @@ -112691,8 +111704,8 @@ func newWebAppAuthflowV2SignupHandler(p *deps.RequestProvider) http.Handler { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: serviceLogger, WhatsappConfig: whatsappConfig, @@ -113574,13 +112587,6 @@ func newWebAppAuthflowPromoteHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -113597,7 +112603,6 @@ func newWebAppAuthflowPromoteHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -113720,7 +112725,6 @@ func newWebAppAuthflowPromoteHandler(p *deps.RequestProvider) http.Handler { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } userProvider := &user.Provider{ @@ -113832,8 +112836,8 @@ func newWebAppAuthflowPromoteHandler(p *deps.RequestProvider) http.Handler { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: serviceLogger, WhatsappConfig: whatsappConfig, @@ -114705,13 +113709,6 @@ func newWebAppAuthflowV2PromoteHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -114728,7 +113725,6 @@ func newWebAppAuthflowV2PromoteHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -114851,7 +113847,6 @@ func newWebAppAuthflowV2PromoteHandler(p *deps.RequestProvider) http.Handler { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } userProvider := &user.Provider{ @@ -114963,8 +113958,8 @@ func newWebAppAuthflowV2PromoteHandler(p *deps.RequestProvider) http.Handler { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: serviceLogger, WhatsappConfig: whatsappConfig, @@ -115836,13 +114831,6 @@ func newWebAppAuthflowEnterPasswordHandler(p *deps.RequestProvider) http.Handler UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -115859,7 +114847,6 @@ func newWebAppAuthflowEnterPasswordHandler(p *deps.RequestProvider) http.Handler Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -115982,7 +114969,6 @@ func newWebAppAuthflowEnterPasswordHandler(p *deps.RequestProvider) http.Handler UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } userProvider := &user.Provider{ @@ -116094,8 +115080,8 @@ func newWebAppAuthflowEnterPasswordHandler(p *deps.RequestProvider) http.Handler AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: serviceLogger, WhatsappConfig: whatsappConfig, @@ -116960,13 +115946,6 @@ func newWebAppAuthflowV2EnterPasswordHandler(p *deps.RequestProvider) http.Handl UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -116983,7 +115962,6 @@ func newWebAppAuthflowV2EnterPasswordHandler(p *deps.RequestProvider) http.Handl Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -117106,7 +116084,6 @@ func newWebAppAuthflowV2EnterPasswordHandler(p *deps.RequestProvider) http.Handl UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } userProvider := &user.Provider{ @@ -117218,8 +116195,8 @@ func newWebAppAuthflowV2EnterPasswordHandler(p *deps.RequestProvider) http.Handl AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: serviceLogger, WhatsappConfig: whatsappConfig, @@ -118088,13 +117065,6 @@ func newWebAppAuthflowEnterOOBOTPHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -118111,7 +117081,6 @@ func newWebAppAuthflowEnterOOBOTPHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -118234,7 +117203,6 @@ func newWebAppAuthflowEnterOOBOTPHandler(p *deps.RequestProvider) http.Handler { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } userProvider := &user.Provider{ @@ -118346,8 +117314,8 @@ func newWebAppAuthflowEnterOOBOTPHandler(p *deps.RequestProvider) http.Handler { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: serviceLogger, WhatsappConfig: whatsappConfig, @@ -119214,13 +118182,6 @@ func newWebAppAuthflowV2EnterOOBOTPHandler(p *deps.RequestProvider) http.Handler UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -119237,7 +118198,6 @@ func newWebAppAuthflowV2EnterOOBOTPHandler(p *deps.RequestProvider) http.Handler Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -119360,7 +118320,6 @@ func newWebAppAuthflowV2EnterOOBOTPHandler(p *deps.RequestProvider) http.Handler UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } userProvider := &user.Provider{ @@ -119472,8 +118431,8 @@ func newWebAppAuthflowV2EnterOOBOTPHandler(p *deps.RequestProvider) http.Handler AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: serviceLogger, WhatsappConfig: whatsappConfig, @@ -120346,13 +119305,6 @@ func newWebAppAuthflowCreatePasswordHandler(p *deps.RequestProvider) http.Handle UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -120369,7 +119321,6 @@ func newWebAppAuthflowCreatePasswordHandler(p *deps.RequestProvider) http.Handle Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -120492,7 +119443,6 @@ func newWebAppAuthflowCreatePasswordHandler(p *deps.RequestProvider) http.Handle UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } userProvider := &user.Provider{ @@ -120604,8 +119554,8 @@ func newWebAppAuthflowCreatePasswordHandler(p *deps.RequestProvider) http.Handle AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: serviceLogger, WhatsappConfig: whatsappConfig, @@ -121470,13 +120420,6 @@ func newWebAppAuthflowV2CreatePasswordHandler(p *deps.RequestProvider) http.Hand UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -121493,7 +120436,6 @@ func newWebAppAuthflowV2CreatePasswordHandler(p *deps.RequestProvider) http.Hand Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -121616,7 +120558,6 @@ func newWebAppAuthflowV2CreatePasswordHandler(p *deps.RequestProvider) http.Hand UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } userProvider := &user.Provider{ @@ -121728,8 +120669,8 @@ func newWebAppAuthflowV2CreatePasswordHandler(p *deps.RequestProvider) http.Hand AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: serviceLogger, WhatsappConfig: whatsappConfig, @@ -122600,13 +121541,6 @@ func newWebAppAuthflowEnterTOTPHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -122623,7 +121557,6 @@ func newWebAppAuthflowEnterTOTPHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -122746,7 +121679,6 @@ func newWebAppAuthflowEnterTOTPHandler(p *deps.RequestProvider) http.Handler { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } userProvider := &user.Provider{ @@ -122858,8 +121790,8 @@ func newWebAppAuthflowEnterTOTPHandler(p *deps.RequestProvider) http.Handler { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: serviceLogger, WhatsappConfig: whatsappConfig, @@ -123724,13 +122656,6 @@ func newWebAppAuthflowV2EnterTOTPHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -123747,7 +122672,6 @@ func newWebAppAuthflowV2EnterTOTPHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -123870,7 +122794,6 @@ func newWebAppAuthflowV2EnterTOTPHandler(p *deps.RequestProvider) http.Handler { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } userProvider := &user.Provider{ @@ -123982,8 +122905,8 @@ func newWebAppAuthflowV2EnterTOTPHandler(p *deps.RequestProvider) http.Handler { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: serviceLogger, WhatsappConfig: whatsappConfig, @@ -124852,13 +123775,6 @@ func newWebAppAuthflowSetupTOTPHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -124875,7 +123791,6 @@ func newWebAppAuthflowSetupTOTPHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -124998,7 +123913,6 @@ func newWebAppAuthflowSetupTOTPHandler(p *deps.RequestProvider) http.Handler { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } userProvider := &user.Provider{ @@ -125110,8 +124024,8 @@ func newWebAppAuthflowSetupTOTPHandler(p *deps.RequestProvider) http.Handler { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: serviceLogger, WhatsappConfig: whatsappConfig, @@ -125976,13 +124890,6 @@ func newWebAppAuthflowV2SetupTOTPHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -125999,7 +124906,6 @@ func newWebAppAuthflowV2SetupTOTPHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -126122,7 +125028,6 @@ func newWebAppAuthflowV2SetupTOTPHandler(p *deps.RequestProvider) http.Handler { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } userProvider := &user.Provider{ @@ -126234,8 +125139,8 @@ func newWebAppAuthflowV2SetupTOTPHandler(p *deps.RequestProvider) http.Handler { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: serviceLogger, WhatsappConfig: whatsappConfig, @@ -127100,13 +126005,6 @@ func newWebAppAuthflowViewRecoveryCodeHandler(p *deps.RequestProvider) http.Hand UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -127123,7 +126021,6 @@ func newWebAppAuthflowViewRecoveryCodeHandler(p *deps.RequestProvider) http.Hand Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -127246,7 +126143,6 @@ func newWebAppAuthflowViewRecoveryCodeHandler(p *deps.RequestProvider) http.Hand UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } userProvider := &user.Provider{ @@ -127358,8 +126254,8 @@ func newWebAppAuthflowViewRecoveryCodeHandler(p *deps.RequestProvider) http.Hand AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: serviceLogger, WhatsappConfig: whatsappConfig, @@ -128224,13 +127120,6 @@ func newWebAppAuthflowV2ViewRecoveryCodeHandler(p *deps.RequestProvider) http.Ha UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -128247,7 +127136,6 @@ func newWebAppAuthflowV2ViewRecoveryCodeHandler(p *deps.RequestProvider) http.Ha Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -128370,7 +127258,6 @@ func newWebAppAuthflowV2ViewRecoveryCodeHandler(p *deps.RequestProvider) http.Ha UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } userProvider := &user.Provider{ @@ -128482,8 +127369,8 @@ func newWebAppAuthflowV2ViewRecoveryCodeHandler(p *deps.RequestProvider) http.Ha AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: serviceLogger, WhatsappConfig: whatsappConfig, @@ -129348,13 +128235,6 @@ func newWebAppAuthflowWhatsappOTPHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -129371,7 +128251,6 @@ func newWebAppAuthflowWhatsappOTPHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -129494,7 +128373,6 @@ func newWebAppAuthflowWhatsappOTPHandler(p *deps.RequestProvider) http.Handler { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } userProvider := &user.Provider{ @@ -129606,8 +128484,8 @@ func newWebAppAuthflowWhatsappOTPHandler(p *deps.RequestProvider) http.Handler { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: serviceLogger, WhatsappConfig: whatsappConfig, @@ -130474,13 +129352,6 @@ func newWebAppAuthflowOOBOTPLinkHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -130497,7 +129368,6 @@ func newWebAppAuthflowOOBOTPLinkHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -130620,7 +129490,6 @@ func newWebAppAuthflowOOBOTPLinkHandler(p *deps.RequestProvider) http.Handler { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } userProvider := &user.Provider{ @@ -130732,8 +129601,8 @@ func newWebAppAuthflowOOBOTPLinkHandler(p *deps.RequestProvider) http.Handler { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: serviceLogger, WhatsappConfig: whatsappConfig, @@ -131600,13 +130469,6 @@ func newWebAppAuthflowV2OOBOTPLinkHandler(p *deps.RequestProvider) http.Handler UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -131623,7 +130485,6 @@ func newWebAppAuthflowV2OOBOTPLinkHandler(p *deps.RequestProvider) http.Handler Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -131746,7 +130607,6 @@ func newWebAppAuthflowV2OOBOTPLinkHandler(p *deps.RequestProvider) http.Handler UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } userProvider := &user.Provider{ @@ -131858,8 +130718,8 @@ func newWebAppAuthflowV2OOBOTPLinkHandler(p *deps.RequestProvider) http.Handler AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: serviceLogger, WhatsappConfig: whatsappConfig, @@ -132729,13 +131589,6 @@ func newWebAppAuthflowChangePasswordHandler(p *deps.RequestProvider) http.Handle UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -132752,7 +131605,6 @@ func newWebAppAuthflowChangePasswordHandler(p *deps.RequestProvider) http.Handle Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -132875,7 +131727,6 @@ func newWebAppAuthflowChangePasswordHandler(p *deps.RequestProvider) http.Handle UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } userProvider := &user.Provider{ @@ -132987,8 +131838,8 @@ func newWebAppAuthflowChangePasswordHandler(p *deps.RequestProvider) http.Handle AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: serviceLogger, WhatsappConfig: whatsappConfig, @@ -133858,13 +132709,6 @@ func newWebAppAuthflowV2ChangePasswordHandler(p *deps.RequestProvider) http.Hand UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -133881,7 +132725,6 @@ func newWebAppAuthflowV2ChangePasswordHandler(p *deps.RequestProvider) http.Hand Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -134004,7 +132847,6 @@ func newWebAppAuthflowV2ChangePasswordHandler(p *deps.RequestProvider) http.Hand UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } userProvider := &user.Provider{ @@ -134116,8 +132958,8 @@ func newWebAppAuthflowV2ChangePasswordHandler(p *deps.RequestProvider) http.Hand AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: serviceLogger, WhatsappConfig: whatsappConfig, @@ -134988,13 +133830,6 @@ func newWebAppAuthflowV2ChangePasswordSuccessHandler(p *deps.RequestProvider) ht UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -135011,7 +133846,6 @@ func newWebAppAuthflowV2ChangePasswordSuccessHandler(p *deps.RequestProvider) ht Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -135134,7 +133968,6 @@ func newWebAppAuthflowV2ChangePasswordSuccessHandler(p *deps.RequestProvider) ht UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } userProvider := &user.Provider{ @@ -135246,8 +134079,8 @@ func newWebAppAuthflowV2ChangePasswordSuccessHandler(p *deps.RequestProvider) ht AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: serviceLogger, WhatsappConfig: whatsappConfig, @@ -136112,13 +134945,6 @@ func newWebAppAuthflowUsePasskeyHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -136135,7 +134961,6 @@ func newWebAppAuthflowUsePasskeyHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -136258,7 +135083,6 @@ func newWebAppAuthflowUsePasskeyHandler(p *deps.RequestProvider) http.Handler { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } userProvider := &user.Provider{ @@ -136370,8 +135194,8 @@ func newWebAppAuthflowUsePasskeyHandler(p *deps.RequestProvider) http.Handler { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: serviceLogger, WhatsappConfig: whatsappConfig, @@ -137236,13 +136060,6 @@ func newWebAppAuthflowV2UsePasskeyHandler(p *deps.RequestProvider) http.Handler UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -137259,7 +136076,6 @@ func newWebAppAuthflowV2UsePasskeyHandler(p *deps.RequestProvider) http.Handler Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -137382,7 +136198,6 @@ func newWebAppAuthflowV2UsePasskeyHandler(p *deps.RequestProvider) http.Handler UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } userProvider := &user.Provider{ @@ -137494,8 +136309,8 @@ func newWebAppAuthflowV2UsePasskeyHandler(p *deps.RequestProvider) http.Handler AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: serviceLogger, WhatsappConfig: whatsappConfig, @@ -138364,13 +137179,6 @@ func newWebAppAuthflowPromptCreatePasskeyHandler(p *deps.RequestProvider) http.H UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -138387,7 +137195,6 @@ func newWebAppAuthflowPromptCreatePasskeyHandler(p *deps.RequestProvider) http.H Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -138510,7 +137317,6 @@ func newWebAppAuthflowPromptCreatePasskeyHandler(p *deps.RequestProvider) http.H UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } userProvider := &user.Provider{ @@ -138622,8 +137428,8 @@ func newWebAppAuthflowPromptCreatePasskeyHandler(p *deps.RequestProvider) http.H AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: serviceLogger, WhatsappConfig: whatsappConfig, @@ -139488,13 +138294,6 @@ func newWebAppAuthflowV2PromptCreatePasskeyHandler(p *deps.RequestProvider) http UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -139511,7 +138310,6 @@ func newWebAppAuthflowV2PromptCreatePasskeyHandler(p *deps.RequestProvider) http Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -139634,7 +138432,6 @@ func newWebAppAuthflowV2PromptCreatePasskeyHandler(p *deps.RequestProvider) http UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } userProvider := &user.Provider{ @@ -139746,8 +138543,8 @@ func newWebAppAuthflowV2PromptCreatePasskeyHandler(p *deps.RequestProvider) http AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: serviceLogger, WhatsappConfig: whatsappConfig, @@ -140612,13 +139409,6 @@ func newWebAppAuthflowEnterRecoveryCodeHandler(p *deps.RequestProvider) http.Han UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -140635,7 +139425,6 @@ func newWebAppAuthflowEnterRecoveryCodeHandler(p *deps.RequestProvider) http.Han Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -140758,7 +139547,6 @@ func newWebAppAuthflowEnterRecoveryCodeHandler(p *deps.RequestProvider) http.Han UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } userProvider := &user.Provider{ @@ -140870,8 +139658,8 @@ func newWebAppAuthflowEnterRecoveryCodeHandler(p *deps.RequestProvider) http.Han AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: serviceLogger, WhatsappConfig: whatsappConfig, @@ -141736,13 +140524,6 @@ func newWebAppAuthflowV2EnterRecoveryCodeHandler(p *deps.RequestProvider) http.H UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -141759,7 +140540,6 @@ func newWebAppAuthflowV2EnterRecoveryCodeHandler(p *deps.RequestProvider) http.H Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -141882,7 +140662,6 @@ func newWebAppAuthflowV2EnterRecoveryCodeHandler(p *deps.RequestProvider) http.H UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } userProvider := &user.Provider{ @@ -141994,8 +140773,8 @@ func newWebAppAuthflowV2EnterRecoveryCodeHandler(p *deps.RequestProvider) http.H AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: serviceLogger, WhatsappConfig: whatsappConfig, @@ -142860,13 +141639,6 @@ func newWebAppAuthflowSetupOOBOTPHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -142883,7 +141655,6 @@ func newWebAppAuthflowSetupOOBOTPHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -143006,7 +141777,6 @@ func newWebAppAuthflowSetupOOBOTPHandler(p *deps.RequestProvider) http.Handler { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } userProvider := &user.Provider{ @@ -143118,8 +141888,8 @@ func newWebAppAuthflowSetupOOBOTPHandler(p *deps.RequestProvider) http.Handler { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: serviceLogger, WhatsappConfig: whatsappConfig, @@ -143984,13 +142754,6 @@ func newWebAppAuthflowV2SetupOOBOTPHandler(p *deps.RequestProvider) http.Handler UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -144007,7 +142770,6 @@ func newWebAppAuthflowV2SetupOOBOTPHandler(p *deps.RequestProvider) http.Handler Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -144130,7 +142892,6 @@ func newWebAppAuthflowV2SetupOOBOTPHandler(p *deps.RequestProvider) http.Handler UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } userProvider := &user.Provider{ @@ -144242,8 +143003,8 @@ func newWebAppAuthflowV2SetupOOBOTPHandler(p *deps.RequestProvider) http.Handler AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: serviceLogger, WhatsappConfig: whatsappConfig, @@ -145108,13 +143869,6 @@ func newWebAppAuthflowTerminateOtherSessionsHandler(p *deps.RequestProvider) htt UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -145131,7 +143885,6 @@ func newWebAppAuthflowTerminateOtherSessionsHandler(p *deps.RequestProvider) htt Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -145254,7 +144007,6 @@ func newWebAppAuthflowTerminateOtherSessionsHandler(p *deps.RequestProvider) htt UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } userProvider := &user.Provider{ @@ -145366,8 +144118,8 @@ func newWebAppAuthflowTerminateOtherSessionsHandler(p *deps.RequestProvider) htt AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: serviceLogger, WhatsappConfig: whatsappConfig, @@ -146232,13 +144984,6 @@ func newWebAppAuthflowV2TerminateOtherSessionsHandler(p *deps.RequestProvider) h UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -146255,7 +145000,6 @@ func newWebAppAuthflowV2TerminateOtherSessionsHandler(p *deps.RequestProvider) h Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -146378,7 +145122,6 @@ func newWebAppAuthflowV2TerminateOtherSessionsHandler(p *deps.RequestProvider) h UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } userProvider := &user.Provider{ @@ -146490,8 +145233,8 @@ func newWebAppAuthflowV2TerminateOtherSessionsHandler(p *deps.RequestProvider) h AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: serviceLogger, WhatsappConfig: whatsappConfig, @@ -147356,13 +146099,6 @@ func newWebAppAuthflowWechatHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -147379,7 +146115,6 @@ func newWebAppAuthflowWechatHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -147502,7 +146237,6 @@ func newWebAppAuthflowWechatHandler(p *deps.RequestProvider) http.Handler { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } userProvider := &user.Provider{ @@ -147614,8 +146348,8 @@ func newWebAppAuthflowWechatHandler(p *deps.RequestProvider) http.Handler { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: serviceLogger, WhatsappConfig: whatsappConfig, @@ -148481,13 +147215,6 @@ func newWebAppAuthflowForgotPasswordHandler(p *deps.RequestProvider) http.Handle UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -148504,7 +147231,6 @@ func newWebAppAuthflowForgotPasswordHandler(p *deps.RequestProvider) http.Handle Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -148627,7 +147353,6 @@ func newWebAppAuthflowForgotPasswordHandler(p *deps.RequestProvider) http.Handle UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } userProvider := &user.Provider{ @@ -148739,8 +147464,8 @@ func newWebAppAuthflowForgotPasswordHandler(p *deps.RequestProvider) http.Handle AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: serviceLogger, WhatsappConfig: whatsappConfig, @@ -149605,13 +148330,6 @@ func newWebAppAuthflowV2ForgotPasswordHandler(p *deps.RequestProvider) http.Hand UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -149628,7 +148346,6 @@ func newWebAppAuthflowV2ForgotPasswordHandler(p *deps.RequestProvider) http.Hand Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -149751,7 +148468,6 @@ func newWebAppAuthflowV2ForgotPasswordHandler(p *deps.RequestProvider) http.Hand UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } userProvider := &user.Provider{ @@ -149863,8 +148579,8 @@ func newWebAppAuthflowV2ForgotPasswordHandler(p *deps.RequestProvider) http.Hand AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: serviceLogger, WhatsappConfig: whatsappConfig, @@ -150735,13 +149451,6 @@ func newWebAppAuthflowForgotPasswordOTPHandler(p *deps.RequestProvider) http.Han UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -150758,7 +149467,6 @@ func newWebAppAuthflowForgotPasswordOTPHandler(p *deps.RequestProvider) http.Han Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -150881,7 +149589,6 @@ func newWebAppAuthflowForgotPasswordOTPHandler(p *deps.RequestProvider) http.Han UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } userProvider := &user.Provider{ @@ -150993,8 +149700,8 @@ func newWebAppAuthflowForgotPasswordOTPHandler(p *deps.RequestProvider) http.Han AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: serviceLogger, WhatsappConfig: whatsappConfig, @@ -151861,13 +150568,6 @@ func newWebAppAuthflowV2ForgotPasswordOTPHandler(p *deps.RequestProvider) http.H UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -151884,7 +150584,6 @@ func newWebAppAuthflowV2ForgotPasswordOTPHandler(p *deps.RequestProvider) http.H Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -152007,7 +150706,6 @@ func newWebAppAuthflowV2ForgotPasswordOTPHandler(p *deps.RequestProvider) http.H UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } userProvider := &user.Provider{ @@ -152119,8 +150817,8 @@ func newWebAppAuthflowV2ForgotPasswordOTPHandler(p *deps.RequestProvider) http.H AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: serviceLogger, WhatsappConfig: whatsappConfig, @@ -152987,13 +151685,6 @@ func newWebAppAuthflowForgotPasswordSuccessHandler(p *deps.RequestProvider) http UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -153010,7 +151701,6 @@ func newWebAppAuthflowForgotPasswordSuccessHandler(p *deps.RequestProvider) http Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -153133,7 +151823,6 @@ func newWebAppAuthflowForgotPasswordSuccessHandler(p *deps.RequestProvider) http UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } userProvider := &user.Provider{ @@ -153245,8 +151934,8 @@ func newWebAppAuthflowForgotPasswordSuccessHandler(p *deps.RequestProvider) http AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: serviceLogger, WhatsappConfig: whatsappConfig, @@ -154111,13 +152800,6 @@ func newWebAppAuthflowV2ForgotPasswordLinkSentHandler(p *deps.RequestProvider) h UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -154134,7 +152816,6 @@ func newWebAppAuthflowV2ForgotPasswordLinkSentHandler(p *deps.RequestProvider) h Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -154257,7 +152938,6 @@ func newWebAppAuthflowV2ForgotPasswordLinkSentHandler(p *deps.RequestProvider) h UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } userProvider := &user.Provider{ @@ -154369,8 +153049,8 @@ func newWebAppAuthflowV2ForgotPasswordLinkSentHandler(p *deps.RequestProvider) h AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: serviceLogger, WhatsappConfig: whatsappConfig, @@ -155258,13 +153938,6 @@ func newWebAppReauthHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -155281,7 +153954,6 @@ func newWebAppReauthHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -155501,8 +154173,8 @@ func newWebAppReauthHandler(p *deps.RequestProvider) http.Handler { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -155551,7 +154223,6 @@ func newWebAppReauthHandler(p *deps.RequestProvider) http.Handler { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -156261,13 +154932,6 @@ func newWebAppAuthflowReauthHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -156284,7 +154948,6 @@ func newWebAppAuthflowReauthHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -156407,7 +155070,6 @@ func newWebAppAuthflowReauthHandler(p *deps.RequestProvider) http.Handler { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } userProvider := &user.Provider{ @@ -156519,8 +155181,8 @@ func newWebAppAuthflowReauthHandler(p *deps.RequestProvider) http.Handler { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: serviceLogger, WhatsappConfig: whatsappConfig, @@ -157351,13 +156013,6 @@ func newWebAppAuthflowV2ReauthHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -157374,7 +156029,6 @@ func newWebAppAuthflowV2ReauthHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -157497,7 +156151,6 @@ func newWebAppAuthflowV2ReauthHandler(p *deps.RequestProvider) http.Handler { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } userProvider := &user.Provider{ @@ -157609,8 +156262,8 @@ func newWebAppAuthflowV2ReauthHandler(p *deps.RequestProvider) http.Handler { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: serviceLogger, WhatsappConfig: whatsappConfig, @@ -158441,13 +157094,6 @@ func newWebAppAuthflowResetPasswordHandler(p *deps.RequestProvider) http.Handler UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -158464,7 +157110,6 @@ func newWebAppAuthflowResetPasswordHandler(p *deps.RequestProvider) http.Handler Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -158587,7 +157232,6 @@ func newWebAppAuthflowResetPasswordHandler(p *deps.RequestProvider) http.Handler UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } userProvider := &user.Provider{ @@ -158699,8 +157343,8 @@ func newWebAppAuthflowResetPasswordHandler(p *deps.RequestProvider) http.Handler AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: serviceLogger, WhatsappConfig: whatsappConfig, @@ -159587,13 +158231,6 @@ func newWebAppAuthflowV2ResetPasswordHandler(p *deps.RequestProvider) http.Handl UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -159610,7 +158247,6 @@ func newWebAppAuthflowV2ResetPasswordHandler(p *deps.RequestProvider) http.Handl Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -159830,8 +158466,8 @@ func newWebAppAuthflowV2ResetPasswordHandler(p *deps.RequestProvider) http.Handl AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -159880,7 +158516,6 @@ func newWebAppAuthflowV2ResetPasswordHandler(p *deps.RequestProvider) http.Handl UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -160783,13 +159418,6 @@ func newWebAppAuthflowResetPasswordSuccessHandler(p *deps.RequestProvider) http. UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -160806,7 +159434,6 @@ func newWebAppAuthflowResetPasswordSuccessHandler(p *deps.RequestProvider) http. Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -160929,7 +159556,6 @@ func newWebAppAuthflowResetPasswordSuccessHandler(p *deps.RequestProvider) http. UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } userProvider := &user.Provider{ @@ -161041,8 +159667,8 @@ func newWebAppAuthflowResetPasswordSuccessHandler(p *deps.RequestProvider) http. AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: serviceLogger, WhatsappConfig: whatsappConfig, @@ -161907,13 +160533,6 @@ func newWebAppAuthflowV2ResetPasswordSuccessHandler(p *deps.RequestProvider) htt UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -161930,7 +160549,6 @@ func newWebAppAuthflowV2ResetPasswordSuccessHandler(p *deps.RequestProvider) htt Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -162053,7 +160671,6 @@ func newWebAppAuthflowV2ResetPasswordSuccessHandler(p *deps.RequestProvider) htt UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } userProvider := &user.Provider{ @@ -162165,8 +160782,8 @@ func newWebAppAuthflowV2ResetPasswordSuccessHandler(p *deps.RequestProvider) htt AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: serviceLogger, WhatsappConfig: whatsappConfig, @@ -163367,13 +161984,6 @@ func newWebAppAuthflowFinishFlowHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -163390,7 +162000,6 @@ func newWebAppAuthflowFinishFlowHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -163513,7 +162122,6 @@ func newWebAppAuthflowFinishFlowHandler(p *deps.RequestProvider) http.Handler { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } userProvider := &user.Provider{ @@ -163625,8 +162233,8 @@ func newWebAppAuthflowFinishFlowHandler(p *deps.RequestProvider) http.Handler { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: serviceLogger, WhatsappConfig: whatsappConfig, @@ -164491,13 +163099,6 @@ func newWebAppAuthflowV2FinishFlowHandler(p *deps.RequestProvider) http.Handler UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -164514,7 +163115,6 @@ func newWebAppAuthflowV2FinishFlowHandler(p *deps.RequestProvider) http.Handler Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -164637,7 +163237,6 @@ func newWebAppAuthflowV2FinishFlowHandler(p *deps.RequestProvider) http.Handler UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } userProvider := &user.Provider{ @@ -164749,8 +163348,8 @@ func newWebAppAuthflowV2FinishFlowHandler(p *deps.RequestProvider) http.Handler AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: serviceLogger, WhatsappConfig: whatsappConfig, @@ -165615,13 +164214,6 @@ func newWebAppAuthflowV2AccountLinkingHandler(p *deps.RequestProvider) http.Hand UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -165638,7 +164230,6 @@ func newWebAppAuthflowV2AccountLinkingHandler(p *deps.RequestProvider) http.Hand Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -165761,7 +164352,6 @@ func newWebAppAuthflowV2AccountLinkingHandler(p *deps.RequestProvider) http.Hand UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } userProvider := &user.Provider{ @@ -165873,8 +164463,8 @@ func newWebAppAuthflowV2AccountLinkingHandler(p *deps.RequestProvider) http.Hand AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: serviceLogger, WhatsappConfig: whatsappConfig, @@ -166852,13 +165442,6 @@ func newWebAppAuthflowV2WechatHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -166875,7 +165458,6 @@ func newWebAppAuthflowV2WechatHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -166998,7 +165580,6 @@ func newWebAppAuthflowV2WechatHandler(p *deps.RequestProvider) http.Handler { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } userProvider := &user.Provider{ @@ -167110,8 +165691,8 @@ func newWebAppAuthflowV2WechatHandler(p *deps.RequestProvider) http.Handler { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: serviceLogger, WhatsappConfig: whatsappConfig, @@ -167977,13 +166558,6 @@ func newWebAppAuthflowV2LDAPLoginHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -168000,7 +166574,6 @@ func newWebAppAuthflowV2LDAPLoginHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -168123,7 +166696,6 @@ func newWebAppAuthflowV2LDAPLoginHandler(p *deps.RequestProvider) http.Handler { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } userProvider := &user.Provider{ @@ -168235,8 +166807,8 @@ func newWebAppAuthflowV2LDAPLoginHandler(p *deps.RequestProvider) http.Handler { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: serviceLogger, WhatsappConfig: whatsappConfig, @@ -169089,13 +167661,6 @@ func newSAMLMetadataHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -169112,7 +167677,6 @@ func newSAMLMetadataHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } idTokenIssuer := &oidc.IDTokenIssuer{ @@ -169575,13 +168139,6 @@ func newSAMLLoginHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -169598,7 +168155,6 @@ func newSAMLLoginHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } idTokenIssuer := &oidc.IDTokenIssuer{ @@ -169818,7 +168374,6 @@ func newSAMLLoginHandler(p *deps.RequestProvider) http.Handler { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } userProvider := &user.Provider{ @@ -169930,8 +168485,8 @@ func newSAMLLoginHandler(p *deps.RequestProvider) http.Handler { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: serviceLogger, WhatsappConfig: whatsappConfig, @@ -170431,13 +168986,6 @@ func newSAMLLoginFinishHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -170454,7 +169002,6 @@ func newSAMLLoginFinishHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } idTokenIssuer := &oidc.IDTokenIssuer{ @@ -170941,13 +169488,6 @@ func newSAMLLogoutHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -170964,7 +169504,6 @@ func newSAMLLogoutHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } idTokenIssuer := &oidc.IDTokenIssuer{ @@ -171626,13 +170165,6 @@ func newWebAppAuthflowV2SettingsProfile(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -171649,7 +170181,6 @@ func newWebAppAuthflowV2SettingsProfile(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -171869,8 +170400,8 @@ func newWebAppAuthflowV2SettingsProfile(p *deps.RequestProvider) http.Handler { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -171919,7 +170450,6 @@ func newWebAppAuthflowV2SettingsProfile(p *deps.RequestProvider) http.Handler { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -172665,13 +171195,6 @@ func newWebAppAuthflowV2SettingsIdentityAddEmailHandler(p *deps.RequestProvider) UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -172688,7 +171211,6 @@ func newWebAppAuthflowV2SettingsIdentityAddEmailHandler(p *deps.RequestProvider) Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -172908,8 +171430,8 @@ func newWebAppAuthflowV2SettingsIdentityAddEmailHandler(p *deps.RequestProvider) AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -172958,7 +171480,6 @@ func newWebAppAuthflowV2SettingsIdentityAddEmailHandler(p *deps.RequestProvider) UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -173719,13 +172240,6 @@ func newWebAppAuthflowV2SettingsIdentityEditEmailHandler(p *deps.RequestProvider UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -173742,7 +172256,6 @@ func newWebAppAuthflowV2SettingsIdentityEditEmailHandler(p *deps.RequestProvider Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -173962,8 +172475,8 @@ func newWebAppAuthflowV2SettingsIdentityEditEmailHandler(p *deps.RequestProvider AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -174012,7 +172525,6 @@ func newWebAppAuthflowV2SettingsIdentityEditEmailHandler(p *deps.RequestProvider UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -174775,13 +173287,6 @@ func newWebAppAuthflowV2SettingsIdentityListEmailHandler(p *deps.RequestProvider UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -174798,7 +173303,6 @@ func newWebAppAuthflowV2SettingsIdentityListEmailHandler(p *deps.RequestProvider Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -175018,8 +173522,8 @@ func newWebAppAuthflowV2SettingsIdentityListEmailHandler(p *deps.RequestProvider AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -175068,7 +173572,6 @@ func newWebAppAuthflowV2SettingsIdentityListEmailHandler(p *deps.RequestProvider UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -175817,13 +174320,6 @@ func newWebAppAuthflowV2SettingsIdentityVerifyEmailHandler(p *deps.RequestProvid UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -175840,7 +174336,6 @@ func newWebAppAuthflowV2SettingsIdentityVerifyEmailHandler(p *deps.RequestProvid Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -176060,8 +174555,8 @@ func newWebAppAuthflowV2SettingsIdentityVerifyEmailHandler(p *deps.RequestProvid AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -176110,7 +174605,6 @@ func newWebAppAuthflowV2SettingsIdentityVerifyEmailHandler(p *deps.RequestProvid UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -176876,13 +175370,6 @@ func newWebAppAuthflowV2SettingsIdentityViewEmailHandler(p *deps.RequestProvider UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -176899,7 +175386,6 @@ func newWebAppAuthflowV2SettingsIdentityViewEmailHandler(p *deps.RequestProvider Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -177119,8 +175605,8 @@ func newWebAppAuthflowV2SettingsIdentityViewEmailHandler(p *deps.RequestProvider AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -177169,7 +175655,6 @@ func newWebAppAuthflowV2SettingsIdentityViewEmailHandler(p *deps.RequestProvider UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -177940,13 +176425,6 @@ func newWebAppAuthflowV2SettingsIdentityChangePrimaryEmailHandler(p *deps.Reques UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -177963,7 +176441,6 @@ func newWebAppAuthflowV2SettingsIdentityChangePrimaryEmailHandler(p *deps.Reques Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -178183,8 +176660,8 @@ func newWebAppAuthflowV2SettingsIdentityChangePrimaryEmailHandler(p *deps.Reques AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -178233,7 +176710,6 @@ func newWebAppAuthflowV2SettingsIdentityChangePrimaryEmailHandler(p *deps.Reques UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -178986,13 +177462,6 @@ func newWebAppAuthflowV2SettingsIdentityAddPhoneHandler(p *deps.RequestProvider) UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -179009,7 +177478,6 @@ func newWebAppAuthflowV2SettingsIdentityAddPhoneHandler(p *deps.RequestProvider) Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -179229,8 +177697,8 @@ func newWebAppAuthflowV2SettingsIdentityAddPhoneHandler(p *deps.RequestProvider) AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -179279,7 +177747,6 @@ func newWebAppAuthflowV2SettingsIdentityAddPhoneHandler(p *deps.RequestProvider) UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -180041,13 +178508,6 @@ func newWebAppAuthflowV2SettingsIdentityEditPhoneHandler(p *deps.RequestProvider UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -180064,7 +178524,6 @@ func newWebAppAuthflowV2SettingsIdentityEditPhoneHandler(p *deps.RequestProvider Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -180284,8 +178743,8 @@ func newWebAppAuthflowV2SettingsIdentityEditPhoneHandler(p *deps.RequestProvider AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -180334,7 +178793,6 @@ func newWebAppAuthflowV2SettingsIdentityEditPhoneHandler(p *deps.RequestProvider UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -181098,13 +179556,6 @@ func newWebAppAuthflowV2SettingsIdentityListPhoneHandler(p *deps.RequestProvider UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -181121,7 +179572,6 @@ func newWebAppAuthflowV2SettingsIdentityListPhoneHandler(p *deps.RequestProvider Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -181341,8 +179791,8 @@ func newWebAppAuthflowV2SettingsIdentityListPhoneHandler(p *deps.RequestProvider AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -181391,7 +179841,6 @@ func newWebAppAuthflowV2SettingsIdentityListPhoneHandler(p *deps.RequestProvider UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -182140,13 +180589,6 @@ func newWebAppAuthflowV2SettingsIdentityViewPhoneHandler(p *deps.RequestProvider UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -182163,7 +180605,6 @@ func newWebAppAuthflowV2SettingsIdentityViewPhoneHandler(p *deps.RequestProvider Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -182383,8 +180824,8 @@ func newWebAppAuthflowV2SettingsIdentityViewPhoneHandler(p *deps.RequestProvider AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -182433,7 +180874,6 @@ func newWebAppAuthflowV2SettingsIdentityViewPhoneHandler(p *deps.RequestProvider UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -183199,13 +181639,6 @@ func newWebAppAuthflowV2SettingsIdentityChangePrimaryPhoneHandler(p *deps.Reques UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -183222,7 +181655,6 @@ func newWebAppAuthflowV2SettingsIdentityChangePrimaryPhoneHandler(p *deps.Reques Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -183442,8 +181874,8 @@ func newWebAppAuthflowV2SettingsIdentityChangePrimaryPhoneHandler(p *deps.Reques AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -183492,7 +181924,6 @@ func newWebAppAuthflowV2SettingsIdentityChangePrimaryPhoneHandler(p *deps.Reques UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -184245,13 +182676,6 @@ func newWebAppAuthflowV2SettingsIdentityVerifyPhoneHandler(p *deps.RequestProvid UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -184268,7 +182692,6 @@ func newWebAppAuthflowV2SettingsIdentityVerifyPhoneHandler(p *deps.RequestProvid Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -184488,8 +182911,8 @@ func newWebAppAuthflowV2SettingsIdentityVerifyPhoneHandler(p *deps.RequestProvid AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -184538,7 +182961,6 @@ func newWebAppAuthflowV2SettingsIdentityVerifyPhoneHandler(p *deps.RequestProvid UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -185304,13 +183726,6 @@ func newWebAppAuthflowV2SettingsIdentityListUsernameHandler(p *deps.RequestProvi UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -185327,7 +183742,6 @@ func newWebAppAuthflowV2SettingsIdentityListUsernameHandler(p *deps.RequestProvi Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -185547,8 +183961,8 @@ func newWebAppAuthflowV2SettingsIdentityListUsernameHandler(p *deps.RequestProvi AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -185597,7 +184011,6 @@ func newWebAppAuthflowV2SettingsIdentityListUsernameHandler(p *deps.RequestProvi UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -186291,13 +184704,6 @@ func newWebAppAuthflowV2SettingsIdentityNewUsernameHandler(p *deps.RequestProvid UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -186314,7 +184720,6 @@ func newWebAppAuthflowV2SettingsIdentityNewUsernameHandler(p *deps.RequestProvid Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -186437,7 +184842,6 @@ func newWebAppAuthflowV2SettingsIdentityNewUsernameHandler(p *deps.RequestProvid UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } userProvider := &user.Provider{ @@ -186568,8 +184972,8 @@ func newWebAppAuthflowV2SettingsIdentityNewUsernameHandler(p *deps.RequestProvid AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: serviceLogger, WhatsappConfig: whatsappConfig, @@ -187346,13 +185750,6 @@ func newWebAppAuthflowV2SettingsIdentityViewUsernameHandler(p *deps.RequestProvi UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -187369,7 +185766,6 @@ func newWebAppAuthflowV2SettingsIdentityViewUsernameHandler(p *deps.RequestProvi Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -187492,7 +185888,6 @@ func newWebAppAuthflowV2SettingsIdentityViewUsernameHandler(p *deps.RequestProvi UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } userProvider := &user.Provider{ @@ -187623,8 +186018,8 @@ func newWebAppAuthflowV2SettingsIdentityViewUsernameHandler(p *deps.RequestProvi AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: serviceLogger, WhatsappConfig: whatsappConfig, @@ -188403,13 +186798,6 @@ func newWebAppAuthflowV2SettingsIdentityEditUsernameHandler(p *deps.RequestProvi UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -188426,7 +186814,6 @@ func newWebAppAuthflowV2SettingsIdentityEditUsernameHandler(p *deps.RequestProvi Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -188549,7 +186936,6 @@ func newWebAppAuthflowV2SettingsIdentityEditUsernameHandler(p *deps.RequestProvi UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } userProvider := &user.Provider{ @@ -188680,8 +187066,8 @@ func newWebAppAuthflowV2SettingsIdentityEditUsernameHandler(p *deps.RequestProvi AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: serviceLogger, WhatsappConfig: whatsappConfig, @@ -189502,13 +187888,6 @@ func newWebAppAuthflowV2SettingsIdentityListOAuthHandler(p *deps.RequestProvider UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -189525,7 +187904,6 @@ func newWebAppAuthflowV2SettingsIdentityListOAuthHandler(p *deps.RequestProvider Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -189745,8 +188123,8 @@ func newWebAppAuthflowV2SettingsIdentityListOAuthHandler(p *deps.RequestProvider AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -189795,7 +188173,6 @@ func newWebAppAuthflowV2SettingsIdentityListOAuthHandler(p *deps.RequestProvider UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -191169,13 +189546,6 @@ func newSessionMiddleware(p *deps.RequestProvider) httproute.Middleware { UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -191192,7 +189562,6 @@ func newSessionMiddleware(p *deps.RequestProvider) httproute.Middleware { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } idTokenIssuer := &oidc.IDTokenIssuer{ @@ -191422,8 +189791,8 @@ func newSessionMiddleware(p *deps.RequestProvider) httproute.Middleware { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: serviceLogger, WhatsappConfig: whatsappConfig, @@ -191472,7 +189841,6 @@ func newSessionMiddleware(p *deps.RequestProvider) httproute.Middleware { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -191991,13 +190359,6 @@ func newWebAppSessionMiddleware(p *deps.RequestProvider) httproute.Middleware { UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -192014,7 +190375,6 @@ func newWebAppSessionMiddleware(p *deps.RequestProvider) httproute.Middleware { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -192234,8 +190594,8 @@ func newWebAppSessionMiddleware(p *deps.RequestProvider) httproute.Middleware { AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: whatsappServiceLogger, WhatsappConfig: whatsappConfig, @@ -192284,7 +190644,6 @@ func newWebAppSessionMiddleware(p *deps.RequestProvider) httproute.Middleware { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -192981,13 +191340,6 @@ func newWebAppUIParamMiddleware(p *deps.RequestProvider) httproute.Middleware { UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -193004,7 +191356,6 @@ func newWebAppUIParamMiddleware(p *deps.RequestProvider) httproute.Middleware { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } idTokenIssuer := &oidc.IDTokenIssuer{ @@ -193527,13 +191878,6 @@ func newSettingsSubRoutesMiddleware(p *deps.RequestProvider) httproute.Middlewar UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -193550,7 +191894,6 @@ func newSettingsSubRoutesMiddleware(p *deps.RequestProvider) httproute.Middlewar Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -193770,8 +192113,8 @@ func newSettingsSubRoutesMiddleware(p *deps.RequestProvider) httproute.Middlewar AppID: appID, Clock: clockClock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: serviceLogger, WhatsappConfig: whatsappConfig, @@ -193820,7 +192163,6 @@ func newSettingsSubRoutesMiddleware(p *deps.RequestProvider) httproute.Middlewar UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ diff --git a/pkg/lib/authn/user/commands.go b/pkg/lib/authn/user/commands.go index 9ac733738c..50b282d743 100644 --- a/pkg/lib/authn/user/commands.go +++ b/pkg/lib/authn/user/commands.go @@ -25,7 +25,6 @@ type Commands struct { UserProfileConfig *config.UserProfileConfig StandardAttributes StandardAttributesService CustomAttributes CustomAttributesService - Web3 Web3Service RolesAndGroups RolesAndGroupsService } @@ -51,11 +50,6 @@ func (c *Commands) AfterCreate( return err } - web3Info, err := c.Web3.GetWeb3Info(ctx, identities) - if err != nil { - return err - } - roles, err := c.RolesAndGroups.ListRolesByUserID(ctx, user.ID) if err != nil { return err @@ -74,7 +68,7 @@ func (c *Commands) AfterCreate( groupKeys[i] = v.Key } - userModel := newUserModel(user, identities, authenticators, isVerified, stdAttrs, customAttrs, web3Info, roleKeys, groupKeys) + userModel := newUserModel(user, identities, authenticators, isVerified, stdAttrs, customAttrs, roleKeys, groupKeys) var identityModels []model.Identity for _, i := range identities { identityModels = append(identityModels, i.ToModel()) diff --git a/pkg/lib/authn/user/model.go b/pkg/lib/authn/user/model.go index 6acbb6b762..04461d777d 100644 --- a/pkg/lib/authn/user/model.go +++ b/pkg/lib/authn/user/model.go @@ -293,7 +293,6 @@ func newUserModel( isVerified bool, derivedStandardAttributes map[string]interface{}, customAttributes map[string]interface{}, - web3Info *model.UserWeb3Info, roles []string, groups []string, ) *model.User { @@ -333,12 +332,11 @@ func newUserModel( CanReauthenticate: canReauthenticate, StandardAttributes: derivedStandardAttributes, CustomAttributes: customAttributes, - Web3: web3Info, Roles: roles, Groups: groups, MFAGracePeriodtEndAt: user.MFAGracePeriodtEndAt, - EndUserAccountID: computeEndUserAccountID(derivedStandardAttributes, identities, web3Info), + EndUserAccountID: computeEndUserAccountID(derivedStandardAttributes, identities), } } @@ -349,7 +347,7 @@ type UserForExport struct { Authenticators []*authenticator.Info } -func computeEndUserAccountID(derivedStandardAttributes map[string]interface{}, identities []*identity.Info, web3Info *model.UserWeb3Info) string { +func computeEndUserAccountID(derivedStandardAttributes map[string]interface{}, identities []*identity.Info) string { var endUserAccountID string var ldapDisplayID string @@ -368,9 +366,6 @@ func computeEndUserAccountID(derivedStandardAttributes map[string]interface{}, i endUserAccountID = s } else if ldapDisplayID != "" { endUserAccountID = ldapDisplayID - } else if web3Info != nil && len(web3Info.Accounts) > 0 { - first := web3Info.Accounts[0] - endUserAccountID = first.EndUserAccountID() } return endUserAccountID diff --git a/pkg/lib/authn/user/model_test.go b/pkg/lib/authn/user/model_test.go index e925d83016..4b6f3a26c3 100644 --- a/pkg/lib/authn/user/model_test.go +++ b/pkg/lib/authn/user/model_test.go @@ -160,32 +160,32 @@ func TestComputeUserEndUserActionID(t *testing.T) { // }).EndUserAccountID(), ShouldEqual, "user@example.com") // }) Convey("ComputeUserEndUserActionID", t, func() { - So(computeEndUserAccountID(map[string]interface{}{}, nil, nil), ShouldEqual, "") + So(computeEndUserAccountID(map[string]interface{}{}, nil), ShouldEqual, "") So(computeEndUserAccountID( map[string]interface{}{ "email": "user@example.com", }, - nil, nil), ShouldEqual, "user@example.com") + nil), ShouldEqual, "user@example.com") So(computeEndUserAccountID( map[string]interface{}{ "preferred_username": "user", }, - nil, nil), ShouldEqual, "user") + nil), ShouldEqual, "user") So(computeEndUserAccountID( map[string]interface{}{ "phone_number": "+85298765432", }, - nil, nil), ShouldEqual, "+85298765432") + nil), ShouldEqual, "+85298765432") So(computeEndUserAccountID( map[string]interface{}{ "preferred_username": "user", "phone_number": "+85298765432", }, - nil, nil), ShouldEqual, "user") + nil), ShouldEqual, "user") So(computeEndUserAccountID( map[string]interface{}{ @@ -193,7 +193,7 @@ func TestComputeUserEndUserActionID(t *testing.T) { "preferred_username": "user", "phone_number": "+85298765432", }, - nil, nil), ShouldEqual, "user@example.com") + nil), ShouldEqual, "user@example.com") So(computeEndUserAccountID( map[string]interface{}{ @@ -210,19 +210,6 @@ func TestComputeUserEndUserActionID(t *testing.T) { }, }, }, - }, - &model.UserWeb3Info{ - Accounts: []model.NFTOwnership{ - { - AccountIdentifier: model.AccountIdentifier{ - Address: "0x0", - }, - NetworkIdentifier: model.NetworkIdentifier{ - Blockchain: "ethereum", - Network: "10", - }, - }, - }, }), ShouldEqual, "user@example.com") So(computeEndUserAccountID(map[string]interface{}{}, []*identity.Info{ @@ -234,18 +221,6 @@ func TestComputeUserEndUserActionID(t *testing.T) { }, }, }, - }, &model.UserWeb3Info{ - Accounts: []model.NFTOwnership{ - { - AccountIdentifier: model.AccountIdentifier{ - Address: "0x0", - }, - NetworkIdentifier: model.NetworkIdentifier{ - Blockchain: "ethereum", - Network: "10", - }, - }, - }, }), ShouldEqual, "cn=user,dc=example,dc=org") So(computeEndUserAccountID(map[string]interface{}{}, []*identity.Info{ @@ -256,20 +231,6 @@ func TestComputeUserEndUserActionID(t *testing.T) { UserIDAttributeValue: []byte("example-user"), }, }, - }, nil), ShouldEqual, "uid=example-user") - - So(computeEndUserAccountID(map[string]interface{}{}, nil, &model.UserWeb3Info{ - Accounts: []model.NFTOwnership{ - { - AccountIdentifier: model.AccountIdentifier{ - Address: "0x0", - }, - NetworkIdentifier: model.NetworkIdentifier{ - Blockchain: "ethereum", - Network: "10", - }, - }, - }, - }), ShouldEqual, "ethereum:0x0@10") + }), ShouldEqual, "uid=example-user") }) } diff --git a/pkg/lib/authn/user/queries.go b/pkg/lib/authn/user/queries.go index b6d9fe3826..3371532ddb 100644 --- a/pkg/lib/authn/user/queries.go +++ b/pkg/lib/authn/user/queries.go @@ -44,10 +44,6 @@ type CustomAttributesService interface { ) (map[string]map[string]interface{}, error) } -type Web3Service interface { - GetWeb3Info(ctx context.Context, identities []*identity.Info) (*model.UserWeb3Info, error) -} - type RolesAndGroupsService interface { ListRolesByUserID(ctx context.Context, userID string) ([]*model.Role, error) ListGroupsByUserID(ctx context.Context, userID string) ([]*model.Group, error) @@ -63,7 +59,6 @@ type Queries struct { Verification VerificationService StandardAttributes StandardAttributesService CustomAttributes CustomAttributesService - Web3 Web3Service RolesAndGroups RolesAndGroupsService } @@ -153,10 +148,6 @@ func (p *Queries) GetMany(ctx context.Context, ids []string, role accesscontrol. isVerified := isVerifiedByUserID[rawUser.ID] stdAttrs := stdAttrsByUserID[rawUser.ID] customAttrs := customAttrsByUserID[rawUser.ID] - web3Info, web3err := p.Web3.GetWeb3Info(ctx, identities) - if web3err != nil { - return nil, web3err - } roles := rolesByUserID[rawUser.ID] roleKeys := make([]string, len(roles)) for i, v := range roles { @@ -175,7 +166,6 @@ func (p *Queries) GetMany(ctx context.Context, ids []string, role accesscontrol. isVerified, stdAttrs, customAttrs, - web3Info, roleKeys, groupKeys, ) @@ -260,10 +250,6 @@ func (p *Queries) GetPageForExport(ctx context.Context, offset uint64, limit uin isVerified := isVerifiedByUserID[rawUser.ID] stdAttrs := stdAttrsByUserID[rawUser.ID] customAttrs := customAttrsByUserID[rawUser.ID] - web3Info, web3err := p.Web3.GetWeb3Info(ctx, identities) - if web3err != nil { - return nil, web3err - } roles := rolesByUserID[rawUser.ID] roleKeys := make([]string, len(roles)) for i, v := range roles { @@ -282,7 +268,6 @@ func (p *Queries) GetPageForExport(ctx context.Context, offset uint64, limit uin isVerified, stdAttrs, customAttrs, - web3Info, roleKeys, groupKeys, ) diff --git a/pkg/lib/config/environment.go b/pkg/lib/config/environment.go index 9ea1272fb6..d0eaef0c05 100644 --- a/pkg/lib/config/environment.go +++ b/pkg/lib/config/environment.go @@ -18,7 +18,7 @@ type WebAppCDNHost string type CORSAllowedOrigins string -type NFTIndexerAPIEndpoint string +type Deprecated_NFTIndexerAPIEndpoint string type DenoEndpoint string @@ -83,7 +83,8 @@ type EnvironmentConfig struct { AllowedFrameAncestors AllowedFrameAncestors `envconfig:"ALLOWED_FRAME_ANCESTORS"` - NFTIndexerAPIEndpoint NFTIndexerAPIEndpoint `envconfig:"NFT_INDEXER_API_ENDPOINT"` + // NFT_INDEXER_API_ENDPOINT is deprecated. It is ignored. + // Deprecated_NFTIndexerAPIEndpoint NFTIndexerAPIEndpoint `envconfig:"NFT_INDEXER_API_ENDPOINT"` DenoEndpoint DenoEndpoint `envconfig:"DENO_ENDPOINT"` diff --git a/pkg/lib/deps/deps_common.go b/pkg/lib/deps/deps_common.go index a211af1245..6bbf5cd7e6 100644 --- a/pkg/lib/deps/deps_common.go +++ b/pkg/lib/deps/deps_common.go @@ -44,7 +44,6 @@ import ( featuresiwe "github.com/authgear/authgear-server/pkg/lib/feature/siwe" featurestdattrs "github.com/authgear/authgear-server/pkg/lib/feature/stdattrs" "github.com/authgear/authgear-server/pkg/lib/feature/verification" - featureweb3 "github.com/authgear/authgear-server/pkg/lib/feature/web3" "github.com/authgear/authgear-server/pkg/lib/healthz" "github.com/authgear/authgear-server/pkg/lib/hook" "github.com/authgear/authgear-server/pkg/lib/ldap" @@ -600,11 +599,6 @@ var CommonDependencySet = wire.NewSet( wire.Bind(new(identitysiwe.SIWEService), new(*featuresiwe.Service)), ), - wire.NewSet( - featureweb3.DependencySet, - wire.Bind(new(user.Web3Service), new(*featureweb3.Service)), - ), - wire.NewSet( workflow.DependencySet, ), diff --git a/pkg/lib/deps/deps_provider.go b/pkg/lib/deps/deps_provider.go index 3847097659..0497178f1f 100644 --- a/pkg/lib/deps/deps_provider.go +++ b/pkg/lib/deps/deps_provider.go @@ -35,7 +35,6 @@ var EnvConfigDeps = wire.NewSet( "CORSAllowedOrigins", "AllowedFrameAncestors", "RedisConfig", - "NFTIndexerAPIEndpoint", "DenoEndpoint", "RateLimits", "SAML", diff --git a/pkg/lib/feature/web3/deps.go b/pkg/lib/feature/web3/deps.go deleted file mode 100644 index 54edb018a8..0000000000 --- a/pkg/lib/feature/web3/deps.go +++ /dev/null @@ -1,25 +0,0 @@ -package web3 - -import ( - "net/http" - "time" - - "github.com/google/wire" - - "github.com/authgear/authgear-server/pkg/util/httputil" -) - -type HTTPClient struct { - *http.Client -} - -func NewHTTPClient() HTTPClient { - return HTTPClient{ - httputil.NewExternalClient(5 * time.Second), - } -} - -var DependencySet = wire.NewSet( - wire.Struct(new(Service), "*"), - NewHTTPClient, -) diff --git a/pkg/lib/feature/web3/errors.go b/pkg/lib/feature/web3/errors.go deleted file mode 100644 index 3fd7eb5771..0000000000 --- a/pkg/lib/feature/web3/errors.go +++ /dev/null @@ -1,7 +0,0 @@ -package web3 - -import ( - "github.com/authgear/authgear-server/pkg/api/apierrors" -) - -var ErrInvalidEndpoint = apierrors.NotFound.WithReason("InvalidURL").New("invalid endpoint") diff --git a/pkg/lib/feature/web3/service.go b/pkg/lib/feature/web3/service.go deleted file mode 100644 index 30dd1ec31e..0000000000 --- a/pkg/lib/feature/web3/service.go +++ /dev/null @@ -1,137 +0,0 @@ -package web3 - -import ( - "bytes" - "context" - "encoding/json" - "fmt" - "net/url" - - "github.com/authgear/authgear-server/pkg/api/apierrors" - "github.com/authgear/authgear-server/pkg/api/model" - "github.com/authgear/authgear-server/pkg/lib/authn/identity" - "github.com/authgear/authgear-server/pkg/lib/config" - "github.com/authgear/authgear-server/pkg/util/httputil" - "github.com/authgear/authgear-server/pkg/util/web3" -) - -type Service struct { - APIEndpoint config.NFTIndexerAPIEndpoint - Web3Config *config.Web3Config - HTTPClient HTTPClient -} - -type ListOwnerNFTsResponse struct { - Result model.NFTOwnership `json:"result"` - Error *apierrors.APIError `json:"error"` -} - -func (s *Service) GetWeb3Info(ctx context.Context, identities []*identity.Info) (*model.UserWeb3Info, error) { - if s.Web3Config == nil || s.Web3Config.NFT == nil { - return nil, fmt.Errorf("NFTConfig not defined") - } - nftCollections := s.Web3Config.NFT.Collections - contractIDs := make([]web3.ContractID, 0, len(nftCollections)) - for _, collection := range nftCollections { - contractID, err := web3.ParseContractID(collection) - if err != nil { - return nil, err - } - contractIDs = append(contractIDs, *contractID) - } - - ownerships := make([]model.NFTOwnership, 0) - for _, identity := range identities { - if identity == nil { - continue - } - var ownerID *web3.ContractID - switch identity.Type { - case model.IdentityTypeSIWE: - id, err := identity.SIWE.ToContractID() - if err != nil { - return nil, err - } - - ownerID = id - break - - default: - // No supported identities - break - } - - if ownerID == nil { - continue - } - - nft, err := s.ListOwnerNFTs(ctx, *ownerID, contractIDs) - if err != nil { - return nil, err - } - - if nft == nil { - return nil, fmt.Errorf("Failed to fetch nfts for user") - } - - ownerships = append(ownerships, *nft) - - } - - web3Info := &model.UserWeb3Info{ - Accounts: ownerships, - } - - return web3Info, nil -} - -func (s *Service) ListOwnerNFTs(ctx context.Context, ownerID web3.ContractID, contractIDs []web3.ContractID) (*model.NFTOwnership, error) { - endpoint, err := url.Parse(string(s.APIEndpoint)) - if err != nil { - return nil, err - } - - endpoint.Path = "nfts" - - ownerURL, err := ownerID.URL() - if err != nil { - return nil, err - } - - contractUrls := make([]string, 0, len(contractIDs)) - for _, contract := range contractIDs { - url, err := contract.URL() - if err != nil { - return nil, err - } - contractUrls = append(contractUrls, url.String()) - } - - request := model.ListOwnerNFTsRequest{ - OwnerAddress: ownerURL.String(), - ContractIDs: contractUrls, - } - - data, err := json.Marshal(request) - if err != nil { - return nil, err - } - - res, err := httputil.PostWithContext(ctx, s.HTTPClient.Client, endpoint.String(), "application/json", bytes.NewBuffer(data)) - if err != nil { - return nil, err - } - defer res.Body.Close() - - var response ListOwnerNFTsResponse - err = json.NewDecoder(res.Body).Decode(&response) - if err != nil { - return nil, err - } - - if response.Error != nil { - return nil, response.Error - } - - return &response.Result, nil -} diff --git a/pkg/portal/deps/deps.go b/pkg/portal/deps/deps.go index 592766bbae..29241a759f 100644 --- a/pkg/portal/deps/deps.go +++ b/pkg/portal/deps/deps.go @@ -76,7 +76,6 @@ var DependencySet = wire.NewSet( "SentryDSN", "GlobalDatabase", "DatabaseConfig", - "NFTIndexerAPIEndpoint", "DenoEndpoint", "AppHostSuffixes", "UIImplementation", diff --git a/pkg/redisqueue/wire_gen.go b/pkg/redisqueue/wire_gen.go index 1f0e485346..81d855d5b3 100644 --- a/pkg/redisqueue/wire_gen.go +++ b/pkg/redisqueue/wire_gen.go @@ -37,7 +37,6 @@ import ( siwe2 "github.com/authgear/authgear-server/pkg/lib/feature/siwe" stdattrs2 "github.com/authgear/authgear-server/pkg/lib/feature/stdattrs" "github.com/authgear/authgear-server/pkg/lib/feature/verification" - "github.com/authgear/authgear-server/pkg/lib/feature/web3" "github.com/authgear/authgear-server/pkg/lib/hook" "github.com/authgear/authgear-server/pkg/lib/infra/db/appdb" "github.com/authgear/authgear-server/pkg/lib/infra/db/auditdb" @@ -430,13 +429,6 @@ func newUserImportService(ctx context.Context, p *deps.AppProvider) *userimport. UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -453,7 +445,6 @@ func newUserImportService(ctx context.Context, p *deps.AppProvider) *userimport. Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolverImpl := &event.ResolverImpl{ @@ -673,8 +664,8 @@ func newUserImportService(ctx context.Context, p *deps.AppProvider) *userimport. AppID: appID, Clock: clock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: serviceLogger, WhatsappConfig: whatsappConfig, @@ -723,7 +714,6 @@ func newUserImportService(ctx context.Context, p *deps.AppProvider) *userimport. UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -1241,13 +1231,6 @@ func newUserExportService(ctx context.Context, p *deps.AppProvider) *userexport. UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -1264,11 +1247,10 @@ func newUserExportService(ctx context.Context, p *deps.AppProvider) *userexport. Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } userexportLogger := userexport.NewLogger(factory) - userexportHTTPClient := userexport.NewHTTPClient() + httpClient := userexport.NewHTTPClient() userExportObjectStoreConfig := environmentConfig.UserExportObjectStore userExportCloudStorage := userexport.NewCloudStorage(userExportObjectStoreConfig, clockClock) userExportService := &userexport.UserExportService{ @@ -1277,7 +1259,7 @@ func newUserExportService(ctx context.Context, p *deps.AppProvider) *userexport. UserQueries: userQueries, Logger: userexportLogger, HTTPOrigin: httpOrigin, - HTTPClient: userexportHTTPClient, + HTTPClient: httpClient, CloudStorage: userExportCloudStorage, Clock: clockClock, } @@ -1639,13 +1621,6 @@ func newSearchReindexer(ctx context.Context, p *deps.AppProvider) *reindex.Reind UserQueries: rawQueries, UserStore: store, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -1662,7 +1637,6 @@ func newSearchReindexer(ctx context.Context, p *deps.AppProvider) *reindex.Reind Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } sourceProvider := &reindex.SourceProvider{ diff --git a/pkg/resolver/wire_gen.go b/pkg/resolver/wire_gen.go index de9d4dc074..bbd4cb1426 100644 --- a/pkg/resolver/wire_gen.go +++ b/pkg/resolver/wire_gen.go @@ -37,7 +37,6 @@ import ( siwe2 "github.com/authgear/authgear-server/pkg/lib/feature/siwe" stdattrs2 "github.com/authgear/authgear-server/pkg/lib/feature/stdattrs" "github.com/authgear/authgear-server/pkg/lib/feature/verification" - "github.com/authgear/authgear-server/pkg/lib/feature/web3" "github.com/authgear/authgear-server/pkg/lib/healthz" "github.com/authgear/authgear-server/pkg/lib/hook" "github.com/authgear/authgear-server/pkg/lib/infra/db/appdb" @@ -554,13 +553,6 @@ func newSessionMiddleware(p *deps.RequestProvider) httproute.Middleware { UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -577,7 +569,6 @@ func newSessionMiddleware(p *deps.RequestProvider) httproute.Middleware { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } idTokenIssuer := &oidc.IDTokenIssuer{ @@ -807,8 +798,8 @@ func newSessionMiddleware(p *deps.RequestProvider) httproute.Middleware { AppID: appID, Clock: clock, } - whatsappHTTPClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, whatsappHTTPClient) + httpClient := whatsapp.NewHTTPClient() + onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) whatsappService := &whatsapp.Service{ Logger: serviceLogger, WhatsappConfig: whatsappConfig, @@ -857,7 +848,6 @@ func newSessionMiddleware(p *deps.RequestProvider) httproute.Middleware { UserProfileConfig: userProfileConfig, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } stdattrsService := &stdattrs2.Service{ @@ -1332,13 +1322,6 @@ func newSessionResolveHandler(p *deps.RequestProvider) http.Handler { UserQueries: rawQueries, UserStore: userStore, } - nftIndexerAPIEndpoint := environmentConfig.NFTIndexerAPIEndpoint - httpClient := web3.NewHTTPClient() - web3Service := &web3.Service{ - APIEndpoint: nftIndexerAPIEndpoint, - Web3Config: web3Config, - HTTPClient: httpClient, - } rolesgroupsStore := &rolesgroups.Store{ SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, @@ -1355,7 +1338,6 @@ func newSessionResolveHandler(p *deps.RequestProvider) http.Handler { Verification: verificationService, StandardAttributes: serviceNoEvent, CustomAttributes: customattrsServiceNoEvent, - Web3: web3Service, RolesAndGroups: queries, } resolveHandler := &handler.ResolveHandler{ From 328216c36408bbca90b3f1b92e61aeeba3422f56 Mon Sep 17 00:00:00 2001 From: Louis Chan Date: Thu, 5 Dec 2024 13:45:42 +0800 Subject: [PATCH 09/22] Mark web3 config struct as deprecated --- pkg/lib/config/config.go | 2 +- pkg/lib/config/feature.go | 2 +- pkg/lib/config/feature_web3.go | 8 ++++---- pkg/lib/config/web3.go | 10 +++++----- pkg/lib/feature/siwe/service.go | 2 +- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/pkg/lib/config/config.go b/pkg/lib/config/config.go index 47239d9061..a563503703 100644 --- a/pkg/lib/config/config.go +++ b/pkg/lib/config/config.go @@ -84,7 +84,7 @@ type AppConfig struct { Verification *VerificationConfig `json:"verification,omitempty"` Deprecated_OTP *OTPLegacyConfig `json:"otp,omitempty"` - Web3 *Web3Config `json:"web3,omitempty"` + Web3 *Deprecated_Web3Config `json:"web3,omitempty"` GoogleTagManager *GoogleTagManagerConfig `json:"google_tag_manager,omitempty"` diff --git a/pkg/lib/config/feature.go b/pkg/lib/config/feature.go index 275a3c22e3..34024d16e5 100644 --- a/pkg/lib/config/feature.go +++ b/pkg/lib/config/feature.go @@ -44,7 +44,7 @@ type FeatureConfig struct { RateLimits *RateLimitsFeatureConfig `json:"rate_limits,omitempty"` Messaging *MessagingFeatureConfig `json:"messaging,omitempty"` Collaborator *CollaboratorFeatureConfig `json:"collaborator,omitempty"` - Web3 *Web3FeatureConfig `json:"web3,omitempty"` + Web3 *Deprecated_Web3FeatureConfig `json:"web3,omitempty"` AdminAPI *AdminAPIFeatureConfig `json:"admin_api,omitempty"` TestMode *TestModeFeatureConfig `json:"test_mode,omitempty"` } diff --git a/pkg/lib/config/feature_web3.go b/pkg/lib/config/feature_web3.go index c5ab2f105e..3732006c4b 100644 --- a/pkg/lib/config/feature_web3.go +++ b/pkg/lib/config/feature_web3.go @@ -10,8 +10,8 @@ var _ = FeatureConfigSchema.Add("Web3FeatureConfig", ` } `) -type Web3FeatureConfig struct { - NFT *Web3NFTFeatureConfig `json:"nft,omitempty"` +type Deprecated_Web3FeatureConfig struct { + NFT *Deprecated_Web3NFTFeatureConfig `json:"nft,omitempty"` } var _ = FeatureConfigSchema.Add("Web3NFTFeatureConfig", ` @@ -24,11 +24,11 @@ var _ = FeatureConfigSchema.Add("Web3NFTFeatureConfig", ` } `) -type Web3NFTFeatureConfig struct { +type Deprecated_Web3NFTFeatureConfig struct { Maximum *int `json:"maximum,omitempty"` } -func (c *Web3NFTFeatureConfig) SetDefaults() { +func (c *Deprecated_Web3NFTFeatureConfig) SetDefaults() { if c.Maximum == nil { c.Maximum = newInt(3) } diff --git a/pkg/lib/config/web3.go b/pkg/lib/config/web3.go index 4f9fe57354..5fb3662054 100644 --- a/pkg/lib/config/web3.go +++ b/pkg/lib/config/web3.go @@ -18,7 +18,7 @@ var _ = Schema.Add("NFTConfig", ` } `) -type NFTConfig struct { +type Deprecated_NFTConfig struct { Collections []string `json:"collections,omitempty"` } @@ -40,7 +40,7 @@ var _ = Schema.Add("SIWEConfig", ` } `) -type SIWEConfig struct { +type Deprecated_SIWEConfig struct { Networks []string `json:"networks,omitempty"` } @@ -55,7 +55,7 @@ var _ = Schema.Add("Web3Config", ` } `) -type Web3Config struct { - SIWE *SIWEConfig `json:"siwe,omitempty"` - NFT *NFTConfig `json:"nft,omitempty"` +type Deprecated_Web3Config struct { + SIWE *Deprecated_SIWEConfig `json:"siwe,omitempty"` + NFT *Deprecated_NFTConfig `json:"nft,omitempty"` } diff --git a/pkg/lib/feature/siwe/service.go b/pkg/lib/feature/siwe/service.go index 0669799f1f..837290cf21 100644 --- a/pkg/lib/feature/siwe/service.go +++ b/pkg/lib/feature/siwe/service.go @@ -53,7 +53,7 @@ func NewLogger(lf *log.Factory) Logger { return Logger{lf.New("siwe")} } type Service struct { RemoteIP httputil.RemoteIP HTTPOrigin httputil.HTTPOrigin - Web3Config *config.Web3Config + Web3Config *config.Deprecated_Web3Config AuthenticationConfig *config.AuthenticationConfig Clock clock.Clock From f15d3c410d30e59d6adeec380634784f6e36678a Mon Sep 17 00:00:00 2001 From: Louis Chan Date: Thu, 5 Dec 2024 14:50:51 +0800 Subject: [PATCH 10/22] Remove web3 related code in authui frontend --- authui/README.md | 9 +- authui/package-lock.json | 182 +----------- authui/package.json | 9 +- authui/src/authgear.ts | 4 - authui/src/web3.ts | 279 ------------------ authui/tarballs/.gitkeep | 0 ...bbbe5088e128cb24082972e28d87e76d156.tar.gz | Bin 1683226 -> 0 bytes .../en/web/connect_web3_account.html | 10 - 8 files changed, 6 insertions(+), 487 deletions(-) delete mode 100644 authui/src/web3.ts create mode 100644 authui/tarballs/.gitkeep delete mode 100644 authui/tarballs/jazzicon-4fe23bbbe5088e128cb24082972e28d87e76d156.tar.gz diff --git a/authui/README.md b/authui/README.md index 2e03e36e78..c975b89291 100644 --- a/authui/README.md +++ b/authui/README.md @@ -10,10 +10,7 @@ make generate-material-icons After that, commit the changes in `scripts/python/material-icons.txt`, `authui/src/authflowv2/icons/material-symbols-outlined-subset.ttf` and `authui/src/authflowv2/icons/material-symbols-outlined-subset.woff2`. -### @metamask/jazzicon +### ./tarballs/ -In oursky/authgear-server, the connection to the URL `https://codeload.github.com/MetaMask/jazzicon/tar.gz/4fe23bbbe5088e128cb24082972e28d87e76d156` fails very often. -Therefore, we download the tarball, and use it directly. -We also updated to the latest commit. -See https://github.com/MetaMask/jazzicon/compare/d923914fda6a8795f74c2e66134f73cd72070667..4fe23bbbe5088e128cb24082972e28d87e76d156 for the changes. -The changes DO NOT cover runtime behavior changes, so it is safe to upgrade. +As a workaround, we can put tarballs in ./tarballs to install dependency from a tarball. +This usage is not encouraged. diff --git a/authui/package-lock.json b/authui/package-lock.json index ffd19215d3..bae2923980 100644 --- a/authui/package-lock.json +++ b/authui/package-lock.json @@ -12,18 +12,14 @@ "@floating-ui/dom": "1.5.4", "@hotwired/stimulus": "3.2.2", "@hotwired/turbo": "7.3.0", - "@metamask/detect-provider": "2.0.0", - "@metamask/jazzicon": "file:tarballs/jazzicon-4fe23bbbe5088e128cb24082972e28d87e76d156.tar.gz", "@sentry/browser": "^8.33.1", "@tabler/icons": "1.107.0", "axios": "1.7.4", "cldr-localenames-full": "44.1.0", "cropperjs": "1.6.1", - "ethers": "6.13.2", "intl-tel-input": "18.5.3", "libphonenumber-js": "1.10.53", "luxon": "3.4.4", - "siwe": "2.3.2", "zxcvbn": "4.4.2" }, "devDependencies": { @@ -50,11 +46,6 @@ "vite": "^5.4.6" } }, - "node_modules/@adraffy/ens-normalize": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz", - "integrity": "sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==" - }, "node_modules/@alloc/quick-lru": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", @@ -3352,26 +3343,6 @@ "integrity": "sha512-FNYbYIA8WEff/+A8iMGstZhArpgy5ZxZ9uQRsBQ+qXsiKTYn3WjxpCmJRw3CFUOqFlQSZDkC3v1y3BijRnE1Pg==", "dev": true }, - "node_modules/@metamask/detect-provider": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@metamask/detect-provider/-/detect-provider-2.0.0.tgz", - "integrity": "sha512-sFpN+TX13E9fdBDh9lvQeZdJn4qYoRb/6QF2oZZK/Pn559IhCFacPMU1rMuqyXoFQF3JSJfii2l98B87QDPeCQ==", - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@metamask/jazzicon": { - "version": "2.0.0", - "resolved": "file:tarballs/jazzicon-4fe23bbbe5088e128cb24082972e28d87e76d156.tar.gz", - "integrity": "sha512-MRAS16noz1VASRr3rwPTVXZzlnQhijR01Ty2PQtzkCr32p0vo6x4doEW/IjnjThK/l3tGuBycZS9PHqkMxVTeQ==", - "license": "ISC", - "dependencies": { - "mersenne-twister": "^1.1.0" - }, - "engines": { - "node": "^18.16 || >=20" - } - }, "node_modules/@microsoft/tsdoc": { "version": "0.15.0", "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.15.0.tgz", @@ -3460,28 +3431,6 @@ "node": ">=4.0" } }, - "node_modules/@noble/curves": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", - "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", - "dependencies": { - "@noble/hashes": "1.3.2" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@noble/hashes": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", - "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -4008,44 +3957,6 @@ "@sinonjs/commons": "^3.0.0" } }, - "node_modules/@spruceid/siwe-parser": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@spruceid/siwe-parser/-/siwe-parser-2.1.2.tgz", - "integrity": "sha512-d/r3S1LwJyMaRAKQ0awmo9whfXeE88Qt00vRj91q5uv5ATtWIQEGJ67Yr5eSZw5zp1/fZCXZYuEckt8lSkereQ==", - "dependencies": { - "@noble/hashes": "^1.1.2", - "apg-js": "^4.3.0", - "uri-js": "^4.4.1", - "valid-url": "^1.0.9" - } - }, - "node_modules/@stablelib/binary": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@stablelib/binary/-/binary-1.0.1.tgz", - "integrity": "sha512-ClJWvmL6UBM/wjkvv/7m5VP3GMr9t0osr4yVgLZsLCOz4hGN9gIAFEqnJ0TsSMAN+n840nf2cHZnA5/KFqHC7Q==", - "dependencies": { - "@stablelib/int": "^1.0.1" - } - }, - "node_modules/@stablelib/int": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@stablelib/int/-/int-1.0.1.tgz", - "integrity": "sha512-byr69X/sDtDiIjIV6m4roLVWnNNlRGzsvxw+agj8CIEazqWGOQp2dTYgQhtyVXV9wpO6WyXRQUzLV/JRNumT2w==" - }, - "node_modules/@stablelib/random": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@stablelib/random/-/random-1.0.2.tgz", - "integrity": "sha512-rIsE83Xpb7clHPVRlBj8qNe5L8ISQOzjghYQm/dZ7VaM2KHYwMW5adjQjrzTZCchFnNCNhkwtnOBa9HTMJCI8w==", - "dependencies": { - "@stablelib/binary": "^1.0.1", - "@stablelib/wipe": "^1.0.1" - } - }, - "node_modules/@stablelib/wipe": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@stablelib/wipe/-/wipe-1.0.1.tgz", - "integrity": "sha512-WfqfX/eXGiAd3RJe4VU2snh/ZPwtSjLG4ynQ/vYzvghTh7dHFcI1wl+nrkWG6lGhukOxOsUHfv8dUXr58D0ayg==" - }, "node_modules/@tabler/icons": { "version": "1.107.0", "resolved": "https://registry.npmjs.org/@tabler/icons/-/icons-1.107.0.tgz", @@ -4752,11 +4663,6 @@ "node": ">=0.4.0" } }, - "node_modules/aes-js": { - "version": "4.0.0-beta.5", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz", - "integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==" - }, "node_modules/agent-base": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", @@ -4855,11 +4761,6 @@ "node": ">= 8" } }, - "node_modules/apg-js": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/apg-js/-/apg-js-4.4.0.tgz", - "integrity": "sha512-fefmXFknJmtgtNEXfPwZKYkMFX4Fyeyz+fNF6JWp87biGOPslJbCBVU158zvKRZfHBKnJDy8CMM40oLFGkXT8Q==" - }, "node_modules/arg": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", @@ -7117,38 +7018,6 @@ "node": ">=0.10.0" } }, - "node_modules/ethers": { - "version": "6.13.2", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.13.2.tgz", - "integrity": "sha512-9VkriTTed+/27BGuY1s0hf441kqwHJ1wtN2edksEtiRvXx+soxRX3iSXTfFqq2+YwrOqbDoTHjIhQnjJRlzKmg==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/ethers-io/" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@adraffy/ens-normalize": "1.10.1", - "@noble/curves": "1.2.0", - "@noble/hashes": "1.3.2", - "@types/node": "18.15.13", - "aes-js": "4.0.0-beta.5", - "tslib": "2.4.0", - "ws": "8.17.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/ethers/node_modules/@types/node": { - "version": "18.15.13", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.13.tgz", - "integrity": "sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q==" - }, "node_modules/execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", @@ -9507,11 +9376,6 @@ "node": ">= 8" } }, - "node_modules/mersenne-twister": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mersenne-twister/-/mersenne-twister-1.1.0.tgz", - "integrity": "sha512-mUYWsMKNrm4lfygPkL3OfGzOPTR2DBlTkBNHM//F6hGp8cLThY897crAlk3/Jo17LEOOjQUrNAx6DvgO77QJkA==" - }, "node_modules/micromatch": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", @@ -10436,6 +10300,7 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, "engines": { "node": ">=6" } @@ -10988,20 +10853,6 @@ "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", "dev": true }, - "node_modules/siwe": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/siwe/-/siwe-2.3.2.tgz", - "integrity": "sha512-aSf+6+Latyttbj5nMu6GF3doMfv2UYj83hhwZgUF20ky6fTS83uVhkQABdIVnEuS8y1bBdk7p6ltb9SmlhTTlA==", - "dependencies": { - "@spruceid/siwe-parser": "^2.1.2", - "@stablelib/random": "^1.0.1", - "uri-js": "^4.4.1", - "valid-url": "^1.0.9" - }, - "peerDependencies": { - "ethers": "^5.6.8 || ^6.0.8" - } - }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -11961,11 +11812,6 @@ "node": ">=4" } }, - "node_modules/tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" - }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -12406,6 +12252,7 @@ "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, "dependencies": { "punycode": "^2.1.0" } @@ -12440,11 +12287,6 @@ "node": ">=10.12.0" } }, - "node_modules/valid-url": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/valid-url/-/valid-url-1.0.9.tgz", - "integrity": "sha512-QQDsV8OnSf5Uc30CKSwG9lnhMPe6exHtTXLRYX8uMwKENy640pU+2BgBL0LRbDh/eYRahNCS7aewCx0wf3NYVA==" - }, "node_modules/vite": { "version": "5.4.6", "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.6.tgz", @@ -12812,26 +12654,6 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/ws": { - "version": "7.5.10", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", - "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, "node_modules/xml-name-validator": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", diff --git a/authui/package.json b/authui/package.json index fb49e65e00..4a70502d4a 100644 --- a/authui/package.json +++ b/authui/package.json @@ -25,10 +25,7 @@ "process": false }, "overrides": { - "caniuse-lite": "1.0.30001653", - "ethers": { - "ws": "^7.5.10" - } + "caniuse-lite": "1.0.30001653" }, "devDependencies": { "@jest/globals": "29.7.0", @@ -57,18 +54,14 @@ "@floating-ui/dom": "1.5.4", "@hotwired/stimulus": "3.2.2", "@hotwired/turbo": "7.3.0", - "@metamask/detect-provider": "2.0.0", - "@metamask/jazzicon": "file:tarballs/jazzicon-4fe23bbbe5088e128cb24082972e28d87e76d156.tar.gz", "@sentry/browser": "^8.33.1", "@tabler/icons": "1.107.0", "axios": "1.7.4", "cldr-localenames-full": "44.1.0", "cropperjs": "1.6.1", - "ethers": "6.13.2", "intl-tel-input": "18.5.3", "libphonenumber-js": "1.10.53", "luxon": "3.4.4", - "siwe": "2.3.2", "zxcvbn": "4.4.2" } } diff --git a/authui/src/authgear.ts b/authui/src/authgear.ts index ddcd0d1fb6..459fb172e1 100644 --- a/authui/src/authgear.ts +++ b/authui/src/authgear.ts @@ -41,7 +41,6 @@ import { PasskeyAutofillController, AuthflowPasskeyErrorController, } from "./passkey"; -import { WalletConfirmationController, WalletIconController } from "./web3"; import { init as SentryInit, browserTracingIntegration } from "@sentry/browser"; import { LockoutController } from "./lockout"; import { MirrorButtonController } from "./mirrorbutton"; @@ -118,9 +117,6 @@ Stimulus.register( ); Stimulus.register("authflow-passkey-error", AuthflowPasskeyErrorController); -Stimulus.register("web3-wallet-confirmation", WalletConfirmationController); -Stimulus.register("web3-wallet-icon", WalletIconController); - Stimulus.register("lockout", LockoutController); Stimulus.register("mirror-button", MirrorButtonController); diff --git a/authui/src/web3.ts b/authui/src/web3.ts deleted file mode 100644 index 1310062762..0000000000 --- a/authui/src/web3.ts +++ /dev/null @@ -1,279 +0,0 @@ -import { Controller } from "@hotwired/stimulus"; -import { handleAxiosError, showErrorMessage } from "./messageBar"; -import jazzicon from "@metamask/jazzicon"; -import axios from "axios"; -import { SiweMessage } from "siwe"; -import detectEthereumProvider from "@metamask/detect-provider"; -import { BrowserProvider, Eip1193Provider } from "ethers"; -import { localVisit } from "./turbo"; - -enum WalletProvider { - MetaMask = "metamask", -} - -interface SIWENonce { - nonce: string; - expireAt: Date; -} - -interface MetaMaskEthereumProvider { - isMetaMask?: boolean; - once(eventName: string | symbol, listener: (...args: any[]) => void): this; - on(eventName: string | symbol, listener: (...args: any[]) => void): this; - off(eventName: string | symbol, listener: (...args: any[]) => void): this; - addListener( - eventName: string | symbol, - listener: (...args: any[]) => void - ): this; - removeListener( - eventName: string | symbol, - listener: (...args: any[]) => void - ): this; - removeAllListeners(event?: string | symbol): this; -} - -function deserializeNonceResponse(data: any): SIWENonce { - return { - nonce: data.nonce, - expireAt: new Date(data.expire_at), - }; -} - -function createSIWEMessage( - address: string, - chainId: number, - nonce: string, - expiry: string -): string { - const message = new SiweMessage({ - domain: window.location.host, - address, - uri: window.location.origin, - version: "1", - chainId, - nonce, - expirationTime: expiry, - }); - - return message.prepareMessage(); -} - -function truncateAddress(address: string): string { - return address.slice(0, 6) + "..." + address.slice(address.length - 4); -} - -interface GetProviderResult { - browserProvider: BrowserProvider; - ethereum: MetaMaskEthereumProvider; -} - -async function getProvider(type: string): Promise { - const ethereum = await detectEthereumProvider({ - mustBeMetaMask: type === WalletProvider.MetaMask, - }); - - if (ethereum != null) { - return { - ethereum, - // @ts-expect-error - browserProvider: new BrowserProvider(ethereum as Eip1193Provider), - }; - } - - return null; -} - -interface MetaMaskError { - code: number; - message: string; -} -function isMetaMaskError(err: unknown): err is MetaMaskError { - return ( - typeof err === "object" && err !== null && "code" in err && "message" in err - ); -} -function parseWalletError(err: unknown): string | null { - if (isMetaMaskError(err)) { - switch (err.code) { - // User rejection, no need to show error message - case 4001: - return null; - // Unauthorized - case 4100: - return "error-message-metamask-unauthorized"; - // Request method not supported - case 4200: - return "error-message-metamask-unsupported-method"; - // Disconnected from chains - case 4900: - case 4901: - return "error-message-metamask-disconnected"; - default: - return "error-message-failed-to-connect-wallet"; - } - } - return "error-message-failed-to-connect-wallet"; -} - -function handleError(err: unknown) { - console.error(err); - - const parsedErrorId = parseWalletError(err); - - if (parsedErrorId) { - showErrorMessage(parsedErrorId); - } - return; -} -export class WalletIconController extends Controller { - static targets = ["iconContainer"]; - static values = { - address: String, - size: Number, - }; - - declare iconContainerTarget: HTMLDivElement; - - declare sizeValue: number; - declare addressValue: string; - - generateIcon(): SVGElement | null { - // Metamask uses 8 characters from the address as seed - const addr = this.addressValue.slice(2, 10); - const seed = parseInt(addr, 16); - - const icon = jazzicon(this.sizeValue, seed); - - const child = icon.firstChild; - if (child instanceof SVGElement) { - child.style.borderRadius = "50%"; - return child; - } - - return null; - } - - sizeValueChanged() { - this.renderIcon(); - } - - addressValueChanged() { - this.renderIcon(); - } - - onAddressUpdate({ detail: { address } }: { detail: { address: string } }) { - this.addressValue = address; - } - - renderIcon() { - const icon = this.generateIcon(); - - if (icon) { - // Clear previous icons if exists - this.iconContainerTarget.innerHTML = ""; - this.iconContainerTarget.appendChild(icon); - } - } -} - -export class WalletConfirmationController extends Controller { - static targets = ["button", "displayed", "message", "signature", "submit"]; - static values = { - provider: String, - }; - - declare buttonTarget: HTMLButtonElement; - declare displayedTarget: HTMLSpanElement; - declare messageTarget: HTMLInputElement; - declare signatureTarget: HTMLInputElement; - declare submitTarget: HTMLButtonElement; - - declare providerValue: string; - declare _provider: BrowserProvider | null; - declare _ethereum: MetaMaskEthereumProvider | null; - - connect() { - getProvider(this.providerValue) - .then((result) => { - if (result == null) { - const searchParams = new URLSearchParams(); - searchParams.set("q_provider", this.providerValue); - localVisit("/errors/missing_web3_wallet", searchParams); - return; - } - this._provider = result.browserProvider; - this._ethereum = result.ethereum; - this._ethereum.on("accountsChanged", this.onAccountChanged); - this._getAccount(); - }) - .catch((err) => { - handleError(err); - }); - } - - disconnect() { - this._ethereum?.off("accountsChanged", this.onAccountChanged); - this._ethereum = null; - this._provider = null; - } - - onAccountChanged = () => { - this._getAccount(); - }; - - async _getAccount() { - if (!this._provider) { - return; - } - this.displayedTarget.textContent = "-"; - - await this._provider.send("eth_requestAccounts", []); - - // Get account from the signer to ensure the requested account is the correct one - const signer = await this._provider.getSigner(); - const account = await signer.getAddress(); - - this.displayedTarget.textContent = truncateAddress(account); - - this.dispatch("addressUpdate", { detail: { address: account } }); - } - - async performSIWE() { - if (!this._provider) { - return; - } - - // Ensure at least one account is connected if user has rejected the initial request - await this._getAccount(); - - try { - const nonceResp = await axios("/_internals/siwe/nonce", { - method: "get", - }); - - const nonce = deserializeNonceResponse(nonceResp.data.result); - - const signer = await this._provider.getSigner(); - const network = await this._provider.getNetwork(); - - const address = await signer.getAddress(); - const chainId = Number(network.chainId); - - const siweMessage = createSIWEMessage( - address, - chainId, - nonce.nonce, - nonce.expireAt.toISOString() - ); - - const signature = await signer.signMessage(siweMessage); - - this.messageTarget.value = siweMessage; - this.signatureTarget.value = signature; - - this.submitTarget.click(); - } catch (e: unknown) { - handleAxiosError(e); - } - } -} diff --git a/authui/tarballs/.gitkeep b/authui/tarballs/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/authui/tarballs/jazzicon-4fe23bbbe5088e128cb24082972e28d87e76d156.tar.gz b/authui/tarballs/jazzicon-4fe23bbbe5088e128cb24082972e28d87e76d156.tar.gz deleted file mode 100644 index 0b44d79658405017b93243ba5d32acbb413b3ff5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1683226 zcmV(zK<2+6iwFP!000001MEEua3sZb0u09uU@p#m2(B`HtFu?qY5%L$>X3x?R;$y3 zq!qiX`_yq+&Cc}h&S`dLnVFTez!iiFa930e0pd6T6N4!yBqqg`tCEnoLM1+m7$;!L zl`?S%#V7bvaTPHnB(Atj-s_p!zkXMTu(|DGZne|h@4bHA@7vu=iC@m-Wi`vonF8fS zs&$?F;)N0lh1e&Q=1-^$cKLz>gMOdiI~WYYd-&$}cI7_=T3Sk3H+T(DYN~3i)^4r( z=E41nlmR~x)MAk;#z-(n{ef&YO9#B+F!lMvLe?MjhW$f>e(Dd4;XyhW5`6<9?xUu; zQ_fvE&fjv2B&dpOy|eGxI1ZGD!NGx*p4;_P-3UZb{apu4$l661vek)bh>bi$LIBvVr24TEY5$*HoeE>V$W zD@27Bsz!<`^jDV@szGnAkF2ANO;dxP=Jf@SNEh{vo3R-w6O;4Jii zAmk5r^#3N5b20zfvLuV{N>N?`#~S+I=MS{Z|3EP4@96(cC<N3SsmZA>Bc_@sq4+YYh^`uL2pvdmKCGyl6iyb2CLEy4Zh?n zW=BGbyrD_U_BQ~fiqy3T)q7kf4jdIC_ZEJuDGmtg1n+abB z5<&zpr9hlhDHWYnf`NDY2)rRu>nr%fWV=hGMYU;+NqTcxLSrpcUSYF_c3gy4f}v`a zDqg)nVIE1A*9+Bm48v`8q)9oln}CEv|6Go^Ty$A7Tmp;){w8kX+_zhlbi>oe4q)2r^lS&5DkIr;~vS!3=2BCw-^o?4gU?5QM5+3vf zC>ByeGBlG6x3dmjjxWmwz$)@!7PMN8W@*xU?nS{%LKWsON-PDq#QPO3$Vl8 zj@leA>&@ia7G*_>^%51NoFr6fHdL??#S(n3gC69@YQ$8neT#7KTg%eJL>46-Nvf_3 zP%s9@k^9J!CK>inaeiIa{5Di=(Ac-yGco=A=6Ob^CX@ou^Z404+y?yi&Vnm1$nASrZ}Y)|W)xl=AoGQeVY zD~m-6rPvmT=;)QUQ$*G|JU;Wg8qRP|8KxQIN0(3HldiRbQ)&R zcJxYR-BJmrvPac*)bzBDai-DESVp@pDZnh4tGXuY(*sdv+^SV;CkoCg(jQls6j|j( ztEnt0HA^6YTO(Tat~T||Qea$6hI@pvCX<3;01Y0G#xGgR9mvouFUAeJ-=h^Oy6CCF z@(kugVJH;v3PK>{rM!<1hK48=L#VRF!LYznk@xunL67Oh>7F(Op^Yu{5}!Nd_WM_f z+g)ur%Tn@s8p#w%TWlWc;P&SwsbK(Sna9>unw&+*S{+LtcUM)k25WxJp zaM=JJOg9;{0bB%(GuD!7?OF>)0XEkyn5LCjeV?t;X${-%G8;*yV&nC^0#C(dHmb77 zY-Ag|rZrmifh<@ShKBW5gV{JkX2QhmH-ce{gN%+6#~#aKC+5<#b7@Bd-%7l$w`Cbt zm{FPK$MNzKU(tJdZMxUwVw=fXdBEoKV@@@1lThFnDWk*cSRH4*BWBi*IFLk!*WHS? zmGkvUBPmCY9wmEBKxFp_ahR+-cC1}as!e_gzDc_6dzl04CKHkjS`HIe;Kt9RBAh48 zYtg~e(!urD&CxDV0uofIdeJ#eEi$)y-qe%xO^!Qmm{};SI16{xn2)ZOHRhL=%2`>` z3y2$>I!RL%Y~r?hVbE-OoP60RKtH{pmSxeJUF_xJ9aGrH|33Ck*5QM!=xei`Nc|8r>S=Hs@pxLsWP;mdf*U*cw~V~E?Ru`tMw9f%Q<-FJ zDi%q_>NP-ZZB*A`t>HSPsjU%f4ghLM#uj}I%A!`oF_X*IM&oL=##h(U=C3JHtB(LV zjuPXnQzNq`8d48$ow5ANn!ky5W&;?5%)rD3Ix{=nE^Mj3?!*TlQaKm?f15dOz_Et^ z@Arp7E&1PI(AV+*H=#6&e$rMtZFc}ymD`n)u+<2mtrn}Zb!?~0WwqLf@;P_0M7w-Q zV@6Cb@E>*ZtGz90;_g^h@QS{nus=van!Vm3J{JlHeE|`|6tB-e7|sn21p}dM_*|uu zY+l5z{2C@2YaX{XO>NR~P2Z~g~8)|wxmaxUyYOlBFhafO`|aOncCD71bL zcrE+yYsvowyaNNB{ol4p~s|o`(0%zCKSTqbqz#FQ|r|$#|SC^?h!v zZ~GpAN>m5eX0=*FUv5{8)8@`op zUvH<{H7csYLOb9{QD4)0Q5Ez?mQz1%d{LxYo{BDOld!2Zx_z0VDwgZ>w^&w~P?LuG z^@BY#Y_DI$bwRC@e6{bS5`UB=WW@z{7=QBv6)nC131=@e_tTja{kBX4-9nVe-lbP6(v)WKo!jTN7YhA zlkx?F^a#Dg@AZ4DQ7y;KRs(NLI6}%>Y^m#sayN>E}vBw zDJN8kRa65;V4ZCR2(=VJwW?I2yoL!&%uPd23|ToYJsBgZ#6l=PQ?L5tv5+baMQ75bP~Qs_Q$6n1Y?LN;^~=KD&+-a*MwObIN+b0X$;337N~DlrGM9=0f=D`oU4d^v zY^t9env4NyNu)S3!$qR$cwz=y1JZOdf)vce4ot-l#Ac!~?3iG!(}^TBoCB`14*evO zjHeJ|VlIu$Nicu_VED3|3jxeYbjqG=KjN58u>|$^2LmbbJvrm-b?q=eWMUqi;TS|2uzmA2}$|C4vFsu^#(a zq}{>V3UEtmwX3JMuaDzWJScEg6|)t}cBfQ43)D}tcs9O5*l{6jY#pbPaYIU$7SLeO z3K8%~5E=wE$JD)Z&}&{?&}d2K1=gx)S`WlpK|3U?TCR+mU6wJuX2NARG!U-b258u; z@8-DS5?BN&uZ%eGE(p~eqr*}$PjpQfaac(-cS*@R0G((QMjRop*Fij^!=BP8$8~qx z+nwxo1;@?T-!N#)R_HRP1BGCF&{D}#R^v6irBhNh1AkUQ2S&+YE6WN?YMTeh_Hmqx z82kbbY)K_bxtOJz-p>XiN-#1!qGb&X5uu?gNy}6=`36ua*iUvK48E&H;76V+>{5u5 zw|~Sz2ON265pY!0GRgA70(2Y)l}}~!xEiouqdHC<-t4qdnZ5uX48v|qxZ}x9049rj zK>Gar{BeGfH_yFtIPC_pSwcqa^8!82R)#ryujM$8ha518r6lBKNOca!(j!xYNC3fm zEqn|^C4BDP+e>cc2!URB_t)q3mX__iGF4V#Z;C%>!ALM!WOByhEo;H9;!t*u(Ina; z*ru)rfcKMW-YB>=wXBFe=AR5sPcP|1HoKV6l$B}|kTij95og(+ zxPsm1TkjXovz4Xby&zYO}`5pz&Sp&M>XWtWZ1KXbP9^~ye$ zwd6nOZ}I>A-caZM*JhL!fj!D?b#{Aw;cz(W>_?}?pgbPgc6Luh2M4@f^JUh|yr>|6 z%yoe-f#AfzxLGUm+Cp8w!N7#qXV#b;C}NHKW!K04?N1}*d&ub03h zW4~hpJpxgmO+#LlA&}5i6P9maC_LdeYh)yjxh`3`Y?9{>h6Z955jro)wVDavP|WME zf#i;zPs(BA@{i8o#(o48z z%JA;-L^OS5Hb!tVN4a7AATns_5eHQq_=57{C}_%I49`usiW(!1x%7l9>|hm!WXN>% zdOM^ahXpe1F<)}S9<%>2#I z#H|m=H)}L?fv?x`)K6VPu}qWcTe|=7moe+r~duNu~+;5 z=a{IQi6LzjJB!$v2F+xC<1hQIrZmyDmk^S~cDf8$+#>z`f!7vVhz_vOF%mk&Sl;NL%S_~JK5`3Z6R znLpfi`?miS-{1C?hvfL=ov(go;PstP&%b!bC(nF-cxLRXGnZ`Jvh_X3H+S4N@l|s2 z3g1n;f0T~wzVR7$nXOZI z{o+65(W8&u_vFs}^UlcBZ@u!3$@{O`db;n-Cog{HW}bWa^mG66wSUC<}-Uj6LQ znbWuNPd|IpHG5y!zU8^TpM3k>%kKWcy~P)IKHa@z`F4Kswv)rx9lrMWyYIc`#f$&u z%r5`0-);Qw#ou}(s=x8mi!OXyfBw;*-nI2+?n_rbzW;;6KRf)0#X(tW7zjxd*4^QuGe+PUYk802bK>QzDZxnB)m~dYkKF`RsX@}E-4Sz{Tl=f4~SlW zq}-wE9}a!=I_8$iiZnmw?n5ay8YUF)_FBNhUvS2^YkJR21Ib|^fCA219 zO}OeSeA$MeSz?}Ah%S^aWgzfB{C-JM{xpLcn&13RI8D2A&5h!j|5F0-$?&IUjMJLz zOeV%LmL+z-3`@B(j0#yWA;>IN&Ve_dEXph@R;WE;%<$r4dUE{)`LPcF(j8gxyL%)) z;)cImX%yU@T%3rc>yf{pFnjYi7ev`(hhNjqh_B3-1q1|yAf2GZNh84i3lkr~+ZMXP?i;nOzWtQf{55V}UzQ|hwb{BDXl*FWWY;P&gmPcAMu&D8LqOn*f?A@BA9Anto8D0xj9TZ|7nQCKlT=f ztlaS}iw=VCa_P5-mIJOmTzbwG@1M)^I`mfD1Ho9&=VFxvuVdcH*v9%k7jz;J3vpqt zi6wr{dqjr~G%qAA4x-CW-mp&mBrw7!#Kai$HY;Jo+(oMXnsLOdoQ4si<7-}5n}XeP zc!#f&nf9hqy!HQWK^7ULU{<96arh&!mchDcW;Yfii``yUfh1UrE8Cw%to;zFWk)Uy1`b43i4P4Xd@PWlk!$ zRG(IU38K?}?{DzkAZX@lb%d?&)*Dw<*JN=e-(;^muOH{+Cs)b8bkRhyMfpT^(lrPT z+DME&vN5nFvON+)*?pLhD8hyYkMvt}(WMB-{ETu7pUhDhuN*bETeD8G+a1{&-0b%`0&(EZ7N@I)AP9c z*v$(W_DMN3tm93DazT%kHs{#2u{&d4W8QD?2?oE;|IP73_=lgf1)2m+yI#Fs!~N?% zS;V`Dr}wS6<_!&AKY7jb?Om16+dR9@pBz7ntLyDvR-aa9yfc39I}vQ%{;j9_x2bc_ z{c6|hfuChnP1YeZb-!=y2v564J&Zh}dCZ_IxfR?LE;-ixt9cUm6c8;}D;Fl0)803- zo};bA3-Nt>ETW{>Ez$ix+P%v<`Ua!6K)z+a9jhU0xpv-|u2r#fEczYl2}+O0jmIY? ziburQru=sKO`};OWPM#j*xc41uepJ_vAL2z_Iy<|BaxkvKbWpj!ef3jDM?6q)qCFe z+B?Jb_04lm*`-YV`2NZQYf%&ByZU}>;BbC0_44<#pGL*ZsZwE zJ`#bq?%c1GSS6Z`9k87Gb|E(>XBGT2q$sd6sEpE^<^w$sg?*Sbi!944#XnJ1q4yMp z6+f}LjrSIMkGvX5$f4}MWsz;cVUf`h9rpFM_mk-RBK#lp{xo=in7l*xJEeCY-FP2n z8)g&sG;BYCApX@OSJoJ{jL$yI3Q&dE(L@!MmoMfr#QAs}{%ko)+LYVm*-UjCMj^z3 zKiBX#Jnu%U>7@Po?D61hY(`=;C;ldDxb^_;FHp!^mOOswV{ciqE_1l*q*|cdHo5{9Oj|d2dr$wuy)a=vD1T6L|}_wI=c<# z^$&c#@D8)+36HNq$FEoSi=;!XfE<`Vyog(un<`~qf3ezhOx7pM)C~0yrLcY9mvbfQ zE3Z3O1shnI+JM1TSoj%VY%j+5KmMvZm;Av<(ddbhn{VCz(N|8PSNAGBsszj}+d0mQ zD|PMl)Qx=0+w#oE=z8gTzU);m*`-Z>t}y($*LS{iGR1-C+%6$2zOUP~&@$`bnX}MU z|1vnOSHyRQYud+I^&mOewr?xEtfNf95b;j+kK4LPm;KY(lbRHJuwJe<$J=UW@RaWC z%NJv!hUCfY>iC)YIhzLF-5b+mI##fnJd=WEAKq!s-xofx^XBb~_R|_hQ-;E4){ft{ zZtZHkCLHA}%R=%ud~aaSD=HDIsw?X(SsOMBX@3@-%1|Ux?CY}0-}@cgO=K8hNE{sz zefIU2_+jCD^VzQnJ**W!yQ|zYNT0c$x(sh7SfyGS40$0Wod(fHXwNQe*Ub;qbmB(O zDDZpd7g=gGgTWDd)M-4PMz))Dv#vXp`)hag2+Gr&dz-zM3|6blw{J|@&p&S%@l9|? z|1N7ZtoT4Z2l!YG8n?|=dT*U^?9u+0o4>MH$zwiU0kT_OCZO>pH( zh|QI2|CX!$d(#s8@9+OQ62=E#A--(gx%_x!68y*2#Os-a|IsFj|JzMQTTWT|@~Ca$ zWNG=~pZ|rmAvC@e+;DjQ+WE?r`;Y&At}1IiI=JjLZKI>_qW|)RxP|?D9?(RJ9f;{$4R=oUTVq&~}0=xnO+?Q8y zJ9~a`G4tU5;LP$bCI6vE{=Z%f{owC+Gjn@a7s-eJ*LUpy%aEmq&3{??;Qa5f{=U!f z?-^cx9zNdx)csfeU#Ymp-zUjl%iFxa#O%_B6u+>jfCTUV^3?ybtNwqT|NFac|GlgJ z|GulPv!#>VzkYs5>c0~9@6P}I$_EH9(uadpR+INeH57yK;sqiO%Gd&2w8 zrVyP6S;{0@*X3igA7rv|`1`L_VD#=`Ge^gv+1U@WKN5W!W={In^Cb5}WzXrmwB2XV zeAnTi9EY#Dx&WopD{n1V<+=wkJ4`n7;lWQClZI4NH z>5fwo4}1|3-U$A>pd85gdx&WS4}KJ-@h4e+IfHnDac7YF5188)-VvmVA+et|;{FP= zJQM$Y&QI7?Fu(Ez8erLn9szPw_L{95w*>BT9Q_pv#T@DV|hc2Du&FNE! z>$z#O&Yu{Gw684MZAy2YdXf}WmCHyuG^eHBfR3x(By@V=DX&9EYB|Uisgme;x{>#W z(&1vD%bIdmGD)6~GM{)$;`(9t?O_MD0W@W>!q56VpI)?j2K)$@&|hrA7Da7e<=Od! z?t5|JxPvFC9d7l{DHP((t3z3vMvt5UPT`SNY{S2N)@=u9|9khj0>L@D{DM5 z@EAPgg$@kr+g{|&GxQzU0Ozsac&n?}~C zWJBsfI%+`zT*po+(g=Fud$!e0;G_J^goHzWl?OK?QF0@sx+d^PY;J?w_FuFT#s5ih z2E6^zma?PlNhM0|GwCHpk1x;v72}hGgVjvnN9PGs5ahwQz6Oq91xx4fYPLVZ{mw5G z*8K&V7uh=x=ajzh7VeNbAUeoDJ$Q#{HX`cck!LI~oz&gHcS!-C)_X8znLCJppu^t7 znm$P!OxIj$n(VZWx2eomiUWzl6FhLq8oF#MD9~IBfqIh1WAnY3(a1{eE3_ z9==G{CIYM18@Qm14t-hL>#)4YUIC?x3tT^8{ad^v>M=J<$ilEdihoPV&6f;PTAui& zYgykGmpn&Ozr6FrJIaK;`*$SJlF{j32q>B?ZVL9|`fI(77a>E5jeyF#M*i zxVJcb?RTDrhBxOY`Es*ygAs{P%K0s>QG=VltPgCjmkXDDWiv4&r_L@nOC+s(ce>9~ z#y@y?rWxllG94=~!6*hEVN^#y{_t0e=VrF@*`kq^_5==DUJ@puAP_2L+9-16jS>zbw)W7wjroru1)3vzu|W<*PXFOG2m$W%znMuWYrDdZmIg08~s^VQtOZ98_(S5mAk z`p)F8*T~u*uPJA?&#+%gq(6<+1&b2|FU21{8ji!OGT=tzuW_WtjcX{i@EK`Ib;Gig z(7bP=-Vh@a>o z2vs8*jC-Uh>k<2JO&Qn3od9J9C%{p_A^K6+owk77|FVl#Uyen`Bz$syq?~w*>Cw~i z+k9jxiL9TZ)8ThQ(&6c3=`70Gfd>zYvZ6nl)#ggva9PDAh_2#R-YhaG-+3HJto)y0 zv7itg%qR#eA?kTN8?(f7+d>vo8Xk6af=dECq7VZ`X+@Rdy>X#H0xSXReh*zW(k zq1dh>8hbMyC?CtxKF0j?1}i+CwSx$!1?!2Nuyk0QP}L|qM`SqVtMwq z@l1!jV{gkk-fABHKm18{CwcnR(J<}|;R${|Lx}pmf;eU-?s|ffOBeg$dcQ;bmIfa* z*K>w!Df#`Xm@|AWk*KJJmVuu_WMQ-|%t)oUm5LrcPG4uh(P`~41qDer;jl{mJL0F@ z%@KHZbgpe@la&{eOfAXLo-&1K1We6WPedw^sYDan*Pam5bCh`ko!Dw|0qbArigKx^ z{)tl%iWh$;lZb@pYZCGMa9LB1oP@tUbz=}85WwGC)Du^igA*5`G7`S?q*f38Yi^A)tY#t*H4$E2*Huf7*? zJTKNMHqE&djrxm)4sPjp<`+LG(kk+g3YQsBxw-y8yu^Yk?Vp~c!W=|TIk{5 zm5#k^+zn5o{+q7x#w6NL<3!2a3NI6*v=wcBm)ZPxUF&82|J}{L4=?|_uBY~v|J_Xk zH#@rjrmM)4^Z$hWe?tEM|B!D80a2dl{oA>@)K4nnd`8|Pjc9B#b@(Xj z59hwtF8DF4sG=mK{#>T8g4o)+G$cP?+}h^-$D;Qqe9pFn{fIe|2-MToUhOYSxG@9M z-))MUf)qcxz7R616|<;xhcUu!5LG&Zb@)jXL#)Lt=uOG+@pSH)DY)k*>Ql&gPOI@m!c}WpiEG@182fKGzZ}2_haa>aUOgG6j2hOPy4K`cHf*>+BzdBp zg>)o3emW4?`t$cNpQTh)zY&SxTLghKiucp+A1L#l;kV^$(?1u=9}gk#lYVZoZ5+ru zh^F3?bsrt!=1btX)!mJ&v1`Bk&90qrxNe1gV}JT;l&^PI(H@_W$g;lmPC(avhN}aj zcP?FE5xzSW9!wO;ND(LFV~kpqmLxk~(cdfzY5u^#+jKHK7qOC8aovm9rnEo!yy#}u zdw?Sqx%E)rVdnKHrM@nmWKv>%toUSUf2z)>2lR}dILBNxrbdTm0JBiN$3A_s(LP*# zVnZ|CK($3#Bd5CHXT7ukG2e@Ug1 zk~#SCm~aWC`^J14*)iENl8C0`#Nt~GEz!lS1H;R1C+Dp1yZ5ZWR1@TLiBo<-Rm3j! z*$lD{9(ib8a?S}r;ku1PRj|C+$Df~|guv4s+mKUk`lXg=t4zBEw+-kpg{!1@=65^j z_!(nI^|dpD+67y>jkae|CXHt;)q(DcqECn%p}I|T5Gyy5&H!(R&7=1MRXe)S!xl~6h3aUIoe^_Ii?BKyLC;CwIZmZ5UGf-0G@ zV`1wI$-4%qC5(RkwS0spQ-AF$hjnW38A|6Wlem^P`$RZ*#z1eR@@>=V_^9Z=H|yGs zXjaaDcz0i&Zf<5gefOI%8RJr6g%RaT~daCZ8a<%E| z25Ptck^o=gt;LosMbYu!WFZZ7StSLuUgrlt{`j4{P*0H+lk88VIgs0Y*bAEMVoDvI zAs(CYGVQAJOMPl_YkiO*5R0ZW8^HoVD=q)my6yH&eC?Tp$E_u%+J zsapI}`@!%z)AYd$>Z<+CkilpvnwGTt^)j>_X&%w6LjgXruWce-$S8kX6Bp2A-?Io$ z?4Z7Q^}$C&L|R1Jy14t(OfcmRYN`EvEh25n-;(=a=jM#*Zvx!-`_L7S7^tE@OXtgu zuJm_Uk>9gO_XVcu`XxuvTJ(*LZpyG(ap9K!`Lf|)$el6GL1Z|tfPwYR#zHZ!fL|7U zhl1=JAtkBW1!I+}U6}IVa8Z{e-?A$6-@G~W@p0df|LY&?owy~=BR$<_@t^Bh-XSpk zjVRLMRHOdz_ECbR+Se_drsxPG{Z!jeVkD*HZj6j7DBO5e?3(slcUhMCg4qq45L`h7 zLr0J1_l)#?Mx0GsD}T_U)IIUtCXfQ4V(``k z$H_>6pM)oFf2NB5=R82ZvG9$^fZ{_S`!I#}7fKmz!KlVskoE%r;Q=iIZQj-5sqNXe z4pb9eF?qd34uyV9E=zQyjW}8Tqtb1&z0Csc2`5wcH9YajHKz3X2`qhfXD(fqL0)r5 zPZG%dMfnO2vu_Kd44GWGI_J&QN&Gl1tC<`*E=mu1w0y4F2-4UBF%+a&^(Ha@lLC-$ zF@PTTt4u5WZp>-|ec+Cy`<3(X|M){#r+;PW%c(}zB79q^&@ zxo>NSAxkZj)x$O0HjUsk$q#SDCt;c;yizJ?x$p>mk-7)n%5Tf)%JTpnIfVM3F}~%J zyqlci%haC%g_c8vrKxNtw~53NHL z1_g5MILqN$Qz{{DqpML7gZ}xQRx*;3-*_3sK=lkfTo+J#143FL8t->#K5}C|@7>2~ z>RznRIm}-`Zw!2$OC8cBe!y#O-nVVLn)*pYo8uUjG!or8-Hg3jM$IwYe zUjKvPyf=hLOd;a@fSUL1Zu;nzi>0_~^|t!=LoIJ{x0io@Qrjr)=CxhAtcc=G(g&22tO`B8R=-RxO=+%aoPLU++v&_Bl6k9bgt$<|J?D;pP#)}Rx9^h*H+_t>O;#rKW=p8E|Mz8ZKZ6yKXY%1 zVcPoGJ?Y+F{E8H&sP6FpBlDR2EdQm-3}ixu}rw$FA8RIBCwyZtw(y!dj*ZyGiq zU&IN7{k~?Q914XMDw8z5Ssm-!4NT!d zDD^f4E6J!J9%F1*u#`JaxA_{iW(H#q?+`H#N45Dzt6{hPh2DR zqHbCGjcTd7Y5(zuee-AE5q7U5+3ct9sB-=S)c*f5K>ryM?+8A|kC4K?=`ND(=#h|G zcgO*nP5bdwA?c8vXE|Na?KP->w=;foj(phN^hxu;8d+-nu|cZmd_kuJIC=p}E| z&){-;d27GJZgi1trbUML19E$&(oei`2pm1-+6W zIOZ$1kTcfOp5uhmd>BU_)p=s&j+dQ=;<>E#U9R>+x3xsk*{atfQR#5z4CZ|ohGc>_ z;fW)d@00)AVE!{d0pBjXLBfW84D$|rm49RU4~22aLA8OD&3Dq-Tn8!i2E z0ma&q6g;~gBMnM{h6R*u96oGAFljenQviQHChE;D#NBk|i~2LjmtgF?eL+ew zIu>$nI@c=YabyaWnD}HbzMI%MbrD0m>%Ek`0E*_sJOYadRJ|=$AIiH}L_p7qncyMR z{r;Z>lb4&i1w>E6lN|P_ICJkvuyQ|brD>lqzgOg_XY28Q$A|LRdqsZ#)8O;?d^o_) z?1XT3sUYU8Ek}Leqt)pmwVVcY6)!RoMFRyBdPg(JS6@0!4uMMNIE$V?z7Bi60S-&A zUpinPM=Z8Q43TC0o{MFzf7qs->~0A z$uxrzDwV9d=_cZ$`bO^eGJr5=AoiEGG|ELI%c1k2M=8|#!f^40Ps7ypg0es>V^3Nm zJkDEra-OAtMRmroTSl>e_xopy_?kU}c_XTQyO=gsE=v*S+!)$Z;*htPE za=tCCIf}H=kS{7TycOmHYJ&Wf6 zj@nEM+O|jafBaq$_7oIjl3edJai<}I2h{(NAN2e3?H|yk3WQduD0~CfWBahUZiW;M zJrs0dLz}rcgQ7IDxr`SAjR9klj@%?H$%bo3Ms9lf)!m;kIKl@B65F% z598m+bPGH-9z^o5Av$l%m7sYy!@IwSgX?9Kt&;=LkHL)4PmiMvGmBmxHJ3X91q1rO zZ0k+MyCgxIvMkJXWN=x6eNDPe$%x%7gVo_tGPHEe3kh zLgay)J!@^9pllm2fCQ{Fy@pzgr#stHm)5`CXIqCGJl=o;t*?v*apwWA6eoJ&bWS?0 zsa+7jGkczBdbaKg#bEQTbz}I=(%L-(iql~C!c)i z-az=hUZ{2^5)%GOIHm`X0p7_v`Z@TWiX)u~zo_SR(s#B^)m(lc%|I+r*&OgfS4^B|Cpmx0T9pSirf$ z**Z3o3KkpiTqgGGZg4mVOt`lU+Ap<`Qi)lG#?sjoWSUZZ*40ZyYkBDH}T6d9gB19l*1W#+;_gNo3euB%vw7xIix=2 zbOOxoIX+A4hW#?`d)9qG6Ze9jdoyEmC!qWEq?H9zpa^LvJ_fXXN%%aG^n+VKbj>s{%W1{*|LVjvpz5aH%>+ea_r4Jqa=G z?Q_qvZZ3!nVNn5#XaqI2^41X=I*JCLPC>$7?;cX`gR})xe58NzLmQ&nsY(We(>~NQ z4K^IfmgPxXzyv~A8R6F-L|oG9`R9%3F`&jR@*6&g7|rvbi*ALWn~U{2iZWb?-RWUy zkpt7{#y1M9QvOJE{ORrO#?}e8omj;XH&Kfyb}Sh4jH2!R8B<{Oc0(pHQiis$?_LkcSZg@XeW>`bFR5o) zfyE*bFw7Tf`OG=H7^L?y1ksQTMBlC#0QH|?AL}J`$13WzEk!;Jb~Nb)szFvO9K?Io zWE#K9$k&ADNu8?sjFuBtPmCB(@VF-Xu758R<>Mr&c9S^jmX78;<>EJvbtvkZ?ptDA zEgHDQ{jMo+FIanN(ZA#%sZ*py3}tLHALRI+O-!a5`ZjSTYSsDd^1<6!h{!DHhCn?4jKK1nk~J<}}f|LG&Y$Z#;R74zgh`{AZ;R z)!(}!y>U%eOJ8{{qIv*+0x3ErZ{W4>ES<->;n|ha*Mx$zHAf3ZiNqoNAUz%N5)RRd zq+fV)!J7td%5G+U(n<%FzJuTIhXmVQ)V;cATMo@RUKkl6^*)$ti=xJprGr~jUktk) zoX4Rzl%4^V2sG1JNzWxdartJ;&EW;iQMcEXQmFVZQJe7vQ!k)ONSx zk!#2agE-J)9t;G!BT_d`3cQJdrisC^%=aT`)4j(P$@+oYi>a6v{n;ei(ZUD0|Du7` zAZU>Wws(SY-h2M1A$}xd?sM1C7d6YBy`pQB^@<*#o!D)0lM8qw3a(PlybljPTrfdi zqu^;IT{k{365TJx*xgq%Kul#9I!;bz{nodrjZ6uSfV(WKD!l*fEc%~N(ScuU{Fr_& zoVre|7X zM`v5#y@1ruJpIP7#%qV_70vcyC@<@0+eFp|o}NOi=@I4MyZA;`FO77#es^whJ=4F=mO^KOP#=sOL zXz@!K;8#fQj^mNPmP^`x`v*N$Yur}!Ddt(Dhm??!>l3bqL)lu)Z_H!f_ttMP94}v{ zgtm=DLPK~ix}U46X%fH4$1M0xwI2jD{A_1DQ~wk-dpN|(05d?$zYv6?oHYMX8%-2O z0#GH!!j<;1A?L8~rXohpuUREfGeHg~6DV!HRa_0m0*dKa-N1~+DiXU~qGy(#^5g=C zo~!U7Zuaf|da$y)ZE7glG@!ZMF@zB{oqlAiA!_cH^H6BqQuWD@% zRXhOKsn(ag-WkH|8Vh#UwI7P7{{vG(6KFAp(^Y!^Iij{Lz_Twz>z1wVoe~a~Mn#9) z14j4Aw{$Z^KJuG0(pfCVTKyy0(9O_mN!gbosaYn(R;#;9!$hQ>$loHrL+8@3cQ4zX zZslh1L4VCHAMR_;7otT>NmUgq=bm5#^;8F8nSuUeC6ct~hGE z8hLwrn1)bY|6)q2o^A#L^7MZ|GQOqQS-wdl3>K*tGJnzs#`G779=6|8500=1^G(U?dqK9AB!rM&Nu=)v3mw4n%$4VtU0PGMrrYigM`+k~hW~s9d`g<$vHbu;z zbWl)&JAbT?V33zx0;_|Qh+GqwyKhV)L|Y1nTP>$(w;zfcr^!A)CjPy)@|1n78hO>N z3PHf#XL1FFJRoP<@_H`Y=E_P!g=xFfXi#i@d!Ul-ZmpiD)Yb0~E^+v-b9=x^!K~uQ zr&L+&J4KXcX_r9u=ZNg9|AijIIr~2nJ@~ea#}<75WB$aM^lYnS`jHU)ZsPp_4=78J zdV>p;OM($@Qi9bh)^-|1L1Z=%YtV_8#2j|}$U=Eh8tNm6Cll|=2C|^xhTAFPMpR1E zy+L@MM4--8+~~=3Biop`8EYPHUHMy1m%v=>@YfIN>d;aU>Z1y}bmjY#wGMG1#qTra zp>KJ@iHywCS%L**bS3>?r|esCvD{1QXWi=^o~jPY^A|JH+2pY|h}?i-yGh@wcn#sbOgMGT)y z-4C!5<+ip2?h9uW&m=~5Bgl6fq0OfAK06t zo#kKhzI!nND0Pw1-PZd9*Sx@bMwYOAjaA|Uj9woth`Zi;WfV=h78kFq^hrLBDpg&} zUKc0;id@dIhWP%VVJF}v-x>}jHx{m%*XD4F-~8X^B7qgG;>Ff;^30b=Kn%0fFE3(q zTiu1@q#>pAV}vEM-lpy`xZ;r`sE(4w$90(P%{2)4o9KnkV5fsj8S%44s(n0LN+tu- z5fE@ihXRZOF$tkDUGTF%w0s@|*l)`U)a{*9h}QRPh}^8KI!k96?aMOKoW3lhLJEb; zGiE~{C7e35ZH7kMONeM{>%q{LN;Az|8@d=@TAfrC$!p;eXBaFv^CS1bj zcy$|4oz%prR(w#T53VzEB*TgXVpXEU&Y<3zH_AJCWt&&?QEkp2>f(5FXtaMhB4QcWg5)>MY&v+?CFwRh-f zLqsN1^(CFFkKgE|X|aD%$<~fIj+CRZi{$<2!!6l5p05+0AHOj!@EdQx&`g!l4BGLX zeBS@XyTY#L3pmTFzS6dzjCl&$ywP~7iyd;z3*|Q*#n{^$kus`gP;&Bm-rzE*x>lj? zZNP5q{5Lc)kkuQwn7<>nJG=V~@v(pjxPhtF_S(0DWRdowlwis@Zr8{W z)7SlP7`X~xj|-?=Pf%%QF#hf%WaCOVO#{1vHSqE;dRcVu<>Qf}wKr!A-?7ZoXTPkn z%1<1vUkAo5?@l~NfiApVSoe;LijjU$X$n46?nNW&!_zNy7R9$#6(PGkKA4{lr=!mk z?|tWT(HeqVg@CidAN*P27~RyLYtN4QFw1!2no!mcAIL#v(TtET2T-yVjqF&M17k+P z^5Dk~8{?=}T9HOFwbyQRX9dT{VPjxWpzC`sL$$6$_{R4OGc*(=+^MxA2Lzf?8$LkC zO4#zt8(#*om01agN{5gwbjAA5tNNauSE^p*;Bw{MU+AMmeE?k}aD(dXJvEZXfY*~> zXfXc*z08kAA(yGT8F&q|xntnQhi*%hrF(xSuAl8}t?5nL<*OW%VyPqZF813{$bpcC zMO`FTPyc$?=RWH)ITUn>>h&f93U+dIdw@eHG3KDV$DxFE{ias!s%}dAC>8o7UUp-Y z;SS4JyUix<&Rnh1u&wOS;SYKjoRw;*2zlvjDw#gEm(^ZOSq- zp~%|a?{gqT6NqUA*$K-I8k11%b|z>iQM}K2e9CE+*89AHz3gx3)qQw_j>YKD&tGV( z*{SR}%(#e%u|W^Mmoi6&{Uk_vDD?4aB8}!^1;Im^$CULB2J*$4NL zbr3is65=K?_P)GHeP}GGkLV$n^x$*3=O%~{BbtIyjpE6xuX9^N#IXkXSlzB1NhmFj zSAWzWnT;T~_a5n&{c)fY(++g24S&-c-NF!Cn@jM|f{R=GtxMfVq5{VHyYx|F(S!|Z zA{JSA`HhO}NoW{#>6KNpyDLKZIK(O-GEhsApN_p#yAh76_aWWYiwf&1%#+s+9E4s? zrqTSh5)*=!FNab}93zJ7cGDabSL)NjL^x*5zZOX91_w_Bv+UM?ELG|?5hsW$FKX>2 zJXBc4rQnrFbnm41hyn29efO5h3cs6gpN{zC9zB=Ci1$NH7ABb4<0#Rqsgsb>7$Ctb_x$h}iEeqgA+deG_PA_6GhzVC%e=0y zArxJMOSyT5MLl!9ycDhP$eU#^R>|mKjiEF9F^UQ!x_(`o%u?+`E^- z+V}l*;k%=F)qn?cKXN@~>}Foc;00u_HtY|mpUsemSpb`6Ggm%=pVk=No!`EigKI}; zu%V&k&!FoPLo1YoQsd`8%+86q^v<+k(2 z9!wtcCHU!cf;0o`PnY(gwZ_xg;n;v21!c#@?Fp|v=d9hz6q#+$A?0H>9j430dYz}w+IN_GE*5;g0*3+u!0FdH zhXp3AWlkWev;V013#^jDTA#_wuX6`mXSnNnufKwcE7tiGVT@E`BUn}%#=v7GgGw(@ z0dsf+KL~d=J?twFwEIw(%A2zak=(4#Pau4V1|k};9(3>p;MDhk%7^GEhd9|_1}k+Y zVQDo1*!{wl{Ce1PxAgZKQcS7q;u!bl0FLi8T%y7dcA}tQ<+1E$u`>X1#|}~NBviD3 zQ&2c<^HI)z`&Pzo`e&soaLK2@)`2Kb*@X)Wa|G2>j3hzoQ`p@_@MuzdacxSH+60@Q zGG-aX!r1Bfk@}d_T}WXAr>(ntC<5$Iqk}$QTgibqD-3qZPYVgWFf$_lX_-J>5TDX21Wf7&l^p12cwzHPnjHdLbYDnsCwuhxJ5~ku2bIdDAb6` zdRRV?^6+MpqH;6SXD*MeH+L@VGiI)c7zr~<9n^dBQNg?`xbJQa{W);ZN(|-Seux_B zFHq<=(kbB@N0gBWgx@hfrW1>KE5&WTo^4>61-w&;)lA&Tp8Dk}gtoaYNIk)E^TdkN zKQddMx=AsbOR{Os0i>?;52POnzccv=d2Q7^xvuXOQE_~ z7GLLP`F)Dz5)He~>vEc9m1m{(`a%=(6>$;MEqVWYfU=v6=Nx8X3#1`P?EBO(WOPhO zwmgf8-4LkCD@qbEB&B14R~8Jm%{LC+Da?H<6RQxzjB^Hpf~@4Xhel2o91E%325Xsk za1#q5>ziX$R~5&SJ2I%6poX{KjB5SMqyLZcvq4<{%=Cg1BqK6>CAUqWBJ4HCHwbrW zS4(9XK;C!_5B>$-I9RB@yE5TR%jI>tFYDW&xO6%VnV9U zr+t8lTGPi>##oiq^U^74V+$4&)n+i$kBgBCtCac=Zaa25i5upVO8*ciwXX2hXKT1U z`EGlh_e4umLHVgtGCW{-dX};RTMb>={o=Dn-_5+1uzC+WZb1U(Fu@(4 zM6B53a1bd=sTaPRx(9zm7Oo7ue>rm{$41rsjl%wAC4a8cxdilo%i6!jUl;yO_`S#V z8&92>27C-U`u`#2@9+mK=X)7Un3|yla`2=~ak@5OJ~kEs|D{hZV)992)pi$|%>6Dz zuQ`*_1Vrn}sS5h~Jzg16GI7<3VJLcX>a}{$Mu=NWyNvJuo%;D7J$bXawG*iBdknUM z66bfPO{T=o@n_fmfcbh{+&_kpPdkxvs45 z?k4;}qK~FZzT*3h!$;q{;?QsmE`>KP(D{zly#ug`_-AX*87RrM+jKKuXqX%v`2{_R z@%4Jqwa|fuHWpoF!eJyf>JRUDoHoF3-{&z7<<|xKgWn}%LaxiNN1Midzf>qt3UBzi z^9kaID;dVk*-JZ%ltcE|2Ek2$br4KFZoHW$RYN`KY0}W|E`&J%tHAF=cuWo{?ISf> z9xg-#p!?bcE(9uy0nzbbbB5QnxW|q3^Wd{qoS+(|qXYTM^ePTPhTZqh`=t$>R8@q0 zgoIx%6k!|?yZ&>yAwQC0paF1JFKM^<36*z9|&&X^Vw*)kxR4~-z z4OZJv z+pZF{GbCmlIKnG^38G_Bt9}H&0d)tVGe+8F7ENIJ8ZwL4l&ZP8+4XWoCw=cK=M)5c z&$JY%?o>X{tgHfW0`xO)rDva31hG#wQqbiOWF@0;Ic$%v=JG45kQrnv%{`)nU$`^* zvjS^=so+3JR^AWd)1fb1AM z2r!fkfitsbEl@b%hZ(XT3W?^~(R<;-I6BUW#ddEXz!!GgfqGDTk;cOl>UJC!!+OP* zK@5C4^<*Ej@ZF5lXGxfQg`|NBno@I4{9L*MAlMLoZ@fo~q2=I?q|cfqh`&;gms>q2AoamrJHBukHW zJZNgC>$yPQvuB*2`N~5#n#^&yirGm*crY>+zA++)bJISOrT_NLP$|PFuB)2!Ktgy^ zwaM#2ti!pXyNXA#%GSdN93*#}tFt>(A4a#yD%8dfP8KrHIqpIX9a^ztOYVo%#|6A? z4d0Zcq|3yXuNZaiwQLihz*R}Vv4D@!L@^2UQ+keS?GS!jj}mKvkkMST~UfSFfo ze;=6yey#EMfh&Dr7Aw8!E~}MU3*Thzro_RYh{fQuMp{sf1JC%226Pfx$JOkX<(2Z^ zl>*$~*@i&;c2xQB-U}_|TMz*d4=`oPW&g*!017BjU~Bz1tL3XSvkrq%yL_%D6+0=4 zmB6$~xORaT*eP`!XkjTag~-`KNf6hCw znM>5WN!-{y^Sx$}V!uk+_K2`s3}lljWH|s69PwGa2JY{TD9}6??|p8z($a*`z{A`- z>#iM!Hv$^~tg9ww0aK3LrH2H3T>!OH$Byp}*$qdWxSzI5vzAjbRw+*ZTCOW|0$meP zFuGShrr``Rz$ReP&R+2mZE|!!wZ=NG`tj~;I>I2_J-Zr01yaVwJYTJ#0Lx$}5LscdM$_PnAZ z#AXUl@S*{T(tv*TQxNw&hcf2eYjk+u7Mw_aDDpKyS+f)078~3>~!e~?Xp@k)$Qp%q*(H1>k4=hz~RnQ<0Yb?5XFx^9vBrwe6 z9h#jK2$Kqs1NEBjM&Gdc(|8B7bcFb6oH)gLfsQ$^_w$&G_}OYW?{J&Th>y}D`;&5m zMBG1m0CgX))&`3vy>tnnMxvS)I88u&GIW<9!;3O`h{gzmw}%Knk+N>b+!UR`;h^#O zq0sJyM`!B09-GNJeW&2I*SDw&)aK(9__{fKB!^w7gJ1Cj5$-Kth!6KgmPy-0#*bzAjv9ly zRSKKE8qo#z>P~q=d~wvTiP%3|%f|&;L{pyZQwvtcWh{j+$Fa>Mv_XYWmTwlchs;-9 zx!>P`7-J2Qf6~?6*~?iM`ENUz20E_2^4yQR4BNv;!A})i)mlq`x#Y|BL52WISB601 z=Chb@KHJp%O^4JisTYS42GgV8o{uz9RIp8N<>G0s(Q)FKuO5*mJP%@v5(U2>D=#7| z%C8E4Ju;|W?W$=Rw;AKMVv%#qVNul7k4wN%I~d5arzL2Y%Au#eby;66Fn#q#d@O4X z?`nG^&;J;uACfFm${+4d`c@%dkkJ6JK8Lz^@Zyf=V_J*npJg_iygloHnsjWSAvet) zubo(BAHk0>3m4A?OE3CeOyHIY;oF>kR~$AxQ(AA%gTkp|F@CN7#O{)a)W;L@$4Ji} zfPF-4%OyWx83`X^#tb6hO!?U1)uo|?%zxJ7A z)^}>X%9XK)ER@=Zm9zLg=VlonBJq-Osjdg*m^hc{namFnJ0R&wjIeLQFjNX2_);>Z zZFB$pR{tt7*S*`euy^j`-)6pcEbn&F=Q#W;XlACc2+_5~_@|Qp5W5ZZ1CHj@vyh#iV7#M-9WJgQp%v=O zTj;!^qVF;Xkr|6Txc*#)M#`M*DO^54(Sl%{bNYVY9ofDMe}f>cGWOAbgY5PnAbXs` z9nOTOk53kYJWte@zi4;^jG_`BDK{?;%_K*e!an{)IMe0GZ1?o=fz%i9s@;N%81e`> zMY+dXMa%eSLGxr)FUJo(J?yDep9fv6aWR(@wVOU?6f-yDzvyJ~aAsk)`ECX#;jA@z z9~!79hd$#&K$jFIzJToNg)fh<>(9)PRfF;3x8%1e@3h?&ybqEOU_{ne_Ft;9QRPCr#j6_4qBI--qu9Df;oYqtJa!V?+u32>x9Er+-nW!w zZ-?te-(me`&93M5<;#KIaoM6&J@YSVYj{S*mabGcw}`JNvdBASP4l!bb3_ z(oQ8R7vn$#=CEKF!VBU(;PV%~^ow=-e$4%;$`x$Mq7N*L#$zWT=7(-8|LH-dN8fG7 zUUpsi+<%Fy{v{S=!a*b)NTl$;A?>KhE%E-rku|Px>$M%zn&D$LmOfW1DQ2(7Sognq-dX7{^POw6sIGJuvw+;Kz z$+*PGgq%Lq?19(Sq*NM_=ePiQqL=G%VtrT{ekg1Y@em!Z&Evm--F0v4zwXR-Z~P5H z@zIi5a!dFNEAd(~=i3G8TEeWX-#r=*|8oT3X9BRTjdlEr3=Wf;vdd;qEC>{pHDT-} z0>g=-tXZSquEgd(X32@BiV#xlpgM3XT5Cf5zFM>3e1+)TL3)ublTyfYwhJ(7$~lU8 znhB>1_hEjO{6=CULD=g$5iHkSL;MDQjB~F7KFNjYt62=OU=R!o4~|~xn%1iFT0}KZn|IZQ3I+5i=#o~|x3hbnKk@hJ#H2+6 zn^b2F$;hkaeywR7D~OIzdZpcVxbjZ%o9i}_*K%f@7_Eyozz)h+ts%MsiKUs++FBz- z*Ivki?(^8&`d%1AOs|)p)f;Q*8uj-XwkEfDWnbJX!idlK$In)S&VKnwq-2SqDITd- zwgc`ZE7D+oZ!fJOL7oO3@&Rxvs>-fTu7o?;E?i&`oGhioTD^SwKp>wXuz8+n`j3mG z5zrc=crD~{ha$1+E!`4ZPMvnp0Y9`>HmX72S4<}Km~{X%>ovPCJ=RE^l||m&QM(V{ zV3Om^yB_BMBG(H?n<$=iVYsM8)c2|snQTizhqgbu*zXRhYuZg|iKq5So!W^FW_<~~ zmSf$-cw^A}!FBi&{u9L%cz_2~9hnc=>7Z;A-x#{V7=fG0+^SB9><)}VvYe?`)Gm0Q z^R~EF_!_QZhR{eC8z%}g5#zj4m0cG3u`13E{;XuW?fn_3kI1|8g@%Kq6CJJZ-BT!a z@+jBK!RNwk%gAe3&WxtwM9D%miRtShY)Y6he*vS)cM>dObIf^8@p9FKvbogZ{mhD2 zQK(trmohRAj>&~wlXlz3GMdE^JAb36dN1ALxB)h+&k;IM;-cU|39^j5c?_>S~4q^on z*Z1)OFenEaaq>0_s8N$t#424Dw*)M-fuw=&jSzE^SK86YeX(kGOVys8dv_N>d(fNL zXY-kNW&xr7Jhp8kQczI26$&p2647@lxyAG&Arh+=5V|WtxZ!TLquDs#{!>4BPQ%kB z>*CHAXeIn(a?#1b7HTNS9qID36S1X7@8k)6 zARgLGP6q+V`gdnLur`iLitTdmW9=aqIO>d*p`fkzI}V1`63J^9gg2#kPfLP|l9jv! zunTh@bjM%8SG7B@c`Jc$!(xgSNoc5ITTsaBpNaiySvO4B3Q4lhDzFk&dl<^pg(~Rh zHJj^;l*xrDqTtK;86o(HgcO$dgG-XwZTx=y4=Q0iN~gy=999Xa=u`H8rf~Kyg5T|E5Re|mjUr+wXXy+Avd3A;cd-Supwk9h*teczN6E_ zA@J@9u=n*!)CupW>r{~!6T1WI zBvUdX3q><68Hfybo`p8Q{C)vT* zfW13ZO)YCzB#kdz!+`Gx&86Yxe+=JP1hXon2*?o^H~N1!$6N#$ba&q#M8+U$?(Mb1 zM!@6cHRUFK?lV&-kdYyNR~LCmJv=_ajg6$vL4Y=O#XyX3`E!A5NxEmqqzfntS&Se5 zxRLV*9C2F(p4}e`!6J_dY60C8)o1C?^t?^krB@{-t3pS|Ikc)2%0n&wRuii3u& zxl(-$x5xAQoZrNMGYbKloJZAm&@o2_JHWMH5>$c{=*SXHw|pCnmz`;YG3 z2C>lc6|m<*q-6_<;p+E1Zl1yJH+)=%X5;nP0x>~W48dbOvyfBRD0mz`Chp^#9o@s+ z4I6=$gD04U;S1!(Lb6y2ygLH?N_<}itvXLx@}X9SE)fkkLL*}hf~aU07wc!u7V43~ z?0p;L@}XS}bngK}Ky%BvO?%HA_#snn`U?k{!t2q%Swq2g`ux^XK{#W6MZF1u@&J0a zIGc-2B8A*C>Jv*qW+NDWQSp+}huUk>=UV>L6`b0qnv4Bg0+A_eAPouzJe6!_{{-`d z(?D=JF$tDHOc?cwGFD{t)IQbeDVKLoMXQa~SL4Fs^j*uBStMa%pwd&|48#zBJ8cK4 zPbI3K{RTGx>IMM@xj%5WK(kKq^p+J!&%Ncwl+<7s6p^^60*BW^OncX35%xwk)E+x~zTD4m0 zyBnd;&OX8)BKd7xnxzlq`}hr6yuOeM$6~wVB*40*W$pudd)RfWjJiMPtef&*jXJgl zE#+RXEcQNRi$QvThhq(pk4Q|vm8t8QTjZ^EoW>dCo@vJJ3M$4CKzzhcDQ|#B`3eWk zFh5Qshm+1Pt)G&AG?lX7W4MWNZ}6U2EA$w(sdED&)I7)SZ5= z0pz5QM~AP{>#i(R5($qBV*oWhcSmH|TH(pQIXFve?&u#M~L{_%Q~JTj_Gh7!DgXH%G%o zL3cQQ-}HC>&;v5)hGZL#vg`-0AWt%L!d6=y2KH zd)GAL*uOr30V6s##3tDYIBPowi9Usf2znzeQwp*D+KpW)Eb9L6PF;XY(3zK{Z+BuM z&2jel1@><%vt>C3aLT4*I**eOKf%+aQ%Y^|%aYwcLG{5gVyQU+mU`p za-f5X276#3ALDxmG@xp(?dpboP^x{4sk5vG{{&#fD)C3NnVJ&ww`}5xlbFX2w&7Qt zn#PsJB}ZQi9X)^Ey-#cCNk0~SiN@1$=lQ*Oi6lq1u$ zZ)siTisNhH2y$T5 z7mzw5h{adHPM_2+MeXMw^evss=@&c*41ckyvj;wExD`JI>3M%+@`1!@!+u~C44I-J zMa~aK`+`r~a5*Cb#nnlm$1{-pMU*H3*8W+Fv?RJGEzwvz1@0;@tb-#vZW}Z~1jUfc^wEbjP?nfKZm_H>>g4_p^nwE>!yf z(pL~h+Wjyvp{=)@<{Yt=MHr!V4f{d>!Xc1%cZm)7rC}5pYe1oc!8ms_uHn^daXIVY zT?D}7v!#j&3jKoTE$@B|^1+{ip4*X!3{qevJp4*0xLfguVBZTBmH5TU;nqv7_qjZu zf?P>ui+&}lvBCgnz7T5=#4m;{In%@azun$JvVRCbQpE z2cIbM6xWR?B9Qs@+P7pcb0+S01Y_#ABgBlZB^IZz>JvlgOI+Dqt8+P6#U@)-cm6)} z3;|>2hQA}bPt<92L)D1xmvv#tRfvMWG|~fZ*Uddfe%f;-8*Qb!5}E8(!lP;;G|DjQ zX}_-_&z;eKA9c2>x;AzaY+;<)-DP{ZkLNDxRgQK&`2O7>MN3b$*eTwE(Pw<;ZcKS_ zfICRewPhUP2@S@fC|=AZ>t<)ECRfzRUvr*G-hp?ZhoZZFn9fY>2mcssk{}24A4Nd# z=TkU_e34&!)Gdyg)-O{nDtW9c*7Kc0O8C{b)|Rd3PS3vVls24LHEqM*V1-=C5r`>z zm&c*=E@vy|CD510cv&&Pl#VqrN0&}oB&iXTUAS$p@J+cImH6AC%f9(44}6JS%dPOo zX@geCOIU{JThNZKV{3Zp5QoFoduj*LIBXjOK!$X2jdeB|F@K&cy^<;xNw% zFb_8_4)r+ALMDno)RJ?-xW^D&5aT9h&jYP3x$WL zGL2I%^KKCzRG(FK9}JZK0d=ct)4}Yl`pYqgkp-Nk8w{i!x*!)tga(I@rvNgz=z?O}K$bGd((=ZNcG}YyK#VVLQzG+t z`T|lgYh*~eoCN9T1T>0PHy<|wrwD-O*jnvVm{TS5)A{e?yY8y~+b-S7;=Wa+m)bZH|8o&44FCs|`>i1$9=5c3 z9#C0Bw~IzjC#^TgT1qmZ;l~#hy@z^#6W)e}O+Xp_P}RsQLv?G45f`bn1CR5{vvvME zO8Cx3T8>yMj^H2jv{6sH-oJR`pYJqctH!8pR;J;2b@CZY<^K7qo4)S?z;{~_M)CMe zEVm^f^xYqqt6A(i&G7Ck5i^K`Nndz-9!| zQg7eew(f=MP>W7ha`SPLZZ9jLNt(Xu!m#G>i8>YS1l}F)Qg=m*sLw9IK5mB9^!Fru zDLp^GgEI;XQL?q>3b|MMF=#p`ExXM`n+hen5wcfmJ7VNkPyOlQzz)qAuTogJucYHBb!Ny3x zICTM&@Z0$GF3;M-g*t#s|9lx4CV6X&eJj+WNs!L2KM)16uOF~uusaOT=6N5f!bIyr z#qsmoKU^r6e;VVnSH@Sc#GeN0s-HZrV>D8Nvh=`<9`(Ro_`YBfOoNmz%N&959KUad zOpjDpo^&C1xnndhl$OCwZ5X9U<7SN$;Cxh1COny{1!&hOmh8V-f?&&P+LG;|Ei~29 zK48RSzL(v0;8PP|^WT5=ChX2DpAu;=Nv}m`adVq=`IV z60$#ZI6TRAB2JX3#zY(WAO5ZfqLJr0HSMFILDWFETDtrNLee?^knsFzN_pVv^|7U7 zN*{*&-FZDmcnW+xMhc3@Q=akv{{D>E=63tcD#Llru%D~&?=GZ0q`C-&vJXsY2Jf45 zMyEEsE!FrQbuwsO%1?JEM~BB?Ai#p7l!}9=XV;mk*FZ~6C9ZULZp0Xq>j~}nSo5$Bp=DaTgM*529HW2#3^)e+X#-l0m>%X zP>LHjB+ZqW`r>DZUVZC}WvNPJj;6TeH%kOqDmHM?D#9JOJ!HR9tNo(yFh)Gw8(YY+ zrn!;=Z=U?6&IHnnlm~rX09Ez>oZK?WFqw*5hena_B=Nnin$x)$#v<^l>(P?HtO4&w z?2spf3l_Z~Rqkn>eq+&-+u>*xbl8O7ZjWCA*0jSg0vS_fXOg z3qQibw*<$`!1e)}o&&0ytmUB+e?wFqgve~a=;mTJ)Pp|Vd*X4Hl@pMn*B2K9cKcOQ zFkx2ITX&*jW?yL8fpS+<(k`ZXD?=V~N6GI-%%EWwV-JvR%~?@EvhdRKMEB@2YqN?> z{g<5;5n#Cc#s+-9_4gHC+?7(Vy_XV5%~hfDI|^bYYDL|iUwQ9(#vC+0RLp=kR~@NT z{}ebO8RB%p;UFH%#15u}&CSO;_24jai2;q+@7Rn^r);`^2tCGkKVOHVh_{D;7zw~Q zEzPX!Xu;pcO6pnv>*{sHa9)!9#plQjy#ve|;U-wbY`gP>9Rqdm}RRIu2LhXqIPYXD~m? z`;v8YZ|~S>PT;&(x8ePu*(t2?*>e=gI;ek*cv6xmiulwbQ|_e?CI8U{Vgy_8JhvMY z1;$muj{(ZBO$uK4jo=vs2K`SS(3YCd!{CMgC><&bV`GO&^H>By*mXpDLz z2CSlY9k$)ip65l%Na~g!Ty;`x54umL!y*T4x64s|&-6dcx|KvpHB2r>L0QUzqe#uX z)*fIgREzCuPcLR3-hsb6?3QX+^K@Q1g9)k=FrE|Ui088$bGdJOtS>z0UDwAV&xpYr z1rmT>>eoc1$70ZPfY@ZEmzt(r>ywWE6r)xm8c`e(Vp{tnbb=^B@Se`2Cl>`+CG$6N zOIL!};$E`6VgU$6)80S35LxO)EtZ5SIow+r;;A+I<^evIWG^N98GZUDFYfb;mHlog zaE}X$c|5Q3TSCeolQOFw)b=Dw|GmQ?oFX{bqV^E%V13)xTJVMIVVMM~(ABkkVT*dckHd1zDG%daKJD*O17QBfs{aWtZ6X^ne~k-kCH5lD0EFzjLIg9ilaYMTBuB>n`XzhJA( znW5Pa&vp1d((qp)CAbs4Qp-@+*x=q!vjjsHmuF;P-!@k*bfq=VZtBcU7@w4EWqh`O z`^d?r%6+Z65j30I0(eod7r@EMdzTTVsWD=;Hy3=ZHUzyzqM`%g1{Ze$)f>x(Q}c=< z5?Fd$3tG1xpquiFipp=e^z>k_6R_;m0VaC`Db-*nH3@)f5gF@V|GM;4gKI?Z0P-g_ zM!j3TCA{u|(3^MRtKv7NINuMq#ouXPo2@AJA5;;g-flDasC*wxXl{%&F&O>@yp%|x zAfZD=aCiwywIb|Kdqo2BoS)LH08rAt|6~G zo>toD?0OghDbGi*Inog4B9kBB$af-^pSc}hYd}c)$x}M;mz=^X>={^bRF*TM{d1H_ z>D{d+Q@YM6gb?0YU3Uk(NAeC{y66C(UBL3%rOOffU_<69$Yjl0qr>5GS8qPD1622* zNs49sGa&+cnD$iR%@gZPfl9NA!*T)K9Wm_QQxy5*@{~^L;Qp<%m$(ah^!0Yi z3W;qOi*AB*`7&9fM|UUmCzo4f?j7q9fl4U*oCy2Z3WmZ*6?ZJI8fIba9$h==uaQ$r z{j9IXftUVswETzqp~?6`_y=q`Wmh~24R6Lz^&<1$bhzFx`1rJp%i8CJjc<}6ohM1d zFWUri476)H|3uU++a9D$e^B!AL280pHm@Tj85Pr~n^Qi4TDTM*->_Fu7qOQg*7wEC zuk@!t92{7=%3HV<7Aaq2Ix`M=G4~@a-W_U?f<7DrbJ)k?nH661!X3#5lQ#I~QGxaDnBM5IjNKbx6N7qv;NeXHK6?UM z@j&Fbw~2att~d~435DQ|HGg?)cS1mtRj2xnjfzC3*^3)p zpowgZ@sTTCgNxtGRo;51K7vWwUlO{2QO&;L25S2JG~k0m=QQrT+ooKP zo%Y;ir}Gp}RR(Vg1lPGO3ioO`ZBB28G$^xLF(Tkac;ei93F(&H6k8YB_@_-c_ZiG+ zl8}q7-6I-hGym!t(1j52sCpX_bb(Aq{sw=p5!&>ZQ;+>JhH)Ovj2yyj0ae5~VKs=3 z5PIYA1NK3C2s&+a9snj4Y@|8-$e1d7E9x&W1V8V=>5dW5 zCZ2RkX{4?MG$>~a(DX4W2#n{mWuaU)e*EVJB8|p)dgfE=VcX>_7p^b|* z8H2L`T!>qc5A}owhq)SoZ%%-?f%BTZ&9bT;Lpa%HEx9i4+-~B6cLaJiSZ-JWKVTGd$$hK4lhC@24`TWCwfd$LuDdI_Njsa6m>_0Lf(6CSY49p zLnR#9T2xEtcY4kBE~)l9BJSz(@5ErsL$zJxn09gXJEuMYb< z=UhP+6wDjD|IGWb@!{v!RTt^6m*M8y3S?J$zr6pY z$SA=K!y>|Rsb z3u`4`T4jk(4F6VW0H{lz@(}k^Z zxFoUTO+s!HWkT5|u%~*Q*gg+|DFlY?5h~mX_z7?Ti1R<9w(nOVQ+XIjs9wjb!}D30 zfdJx>)SGJAQ;1`=U6%4YnlOExGBD~{N3#_i-i+d{Iy|Sh9-i!4BuL7x53hCG11}q8vaK)d5ZSVbZFilR6;k`N>67TaC-oh&2C#` zBgZx~V=~GFwh919!rh5(=G#lMS}zj#!D@I@lJ$mqp&v~tv)KY$@ne8yg9#L{H7mk& zW5hc04iJz+CKN~d*m*aWdsOVG3NFBG^~J*hr;p0 zBSP!)%{)KOwq5D6o~IJa>W{+?_ffQJuijRm;d^?#!w1`NB{{mZn}g67(qG4r2|v0K z>yF1YB&INS6k_cN?l{X~`>vC>O1utud%;T zok6jf6~04&^YrWOuzI>A=8d~*@_kqtchM|>0r9O3HZ!Us-^2K?!VRAv#3+8dPE@uC zv5%Ja=AL8@=e!d2VMe0mF2;T1Y+@#&9lHOkS`y_9NIn4{H+)sC5L*w(cGfMoxj|~x z>D~sOX9ye+KeDERcxU19Cvg=c>FWqiKW2)qnpEp(c(UUDHxTaU#c+t~x0J|Emln}T z$2_PIWxE}FfB(sQS=?hh3ll4N0Q52Hp04BQl(&d+e-m@hycIMmHSu+Z+uyY@G4=YC9`uQhh3PFWz zN(_Dhk1QblGn2~z)V~MY1^TgPp*Y0FsKFPn9jwrH0Bbjf^Nz$3EnSfKoi9?+@EDJ; z#X~bVM4c7W?)a%Y6#N4o*<5K>Uid|@Qm{Gu^Uyt>5M(vqvDzM5mK@4rQIjZZQQ9TJ zglKDwEn2iGSpaCH$5rme{TQQyJ;JKW=oVfF*&#&Sq)#Qq+Gv+NBMq)6QZ`UCA-fQ}@ zWeZY3WfvUlPH5xGE4+_G)b8?s@#$t6!TtC~I~dhXfao=u{7rd~iB``5sf<8#wdLr( zDk%JehCk?^pX6iFoVR$MX5%4|$dOJX8F*o2Lcl zpEP9K=KNO3p`I86-|bD?Oh$nlSZXx5?1rZ+x8S7&gPi3WRHhK=NLl%B+9T(BMgSzu z`<}5w53AQTIG>7w))Ea~LbVin#No}AI1=`-Uf#i)iX!8s{#||%1HFgxOEUGVa$BbQ zZd3>0#tG-fXHdw2CCO8=CW(Gqf+#hJL}9pGFjic%c4f%biJZnlu}*%k`uVR+N_nkT z-)y+gV)%kgF1~beH9!u7>k_Dk?Fc^#KL?`MgIe~+s?h$&C!&ZgfLNAVI6 zU3qZpeq=(FxLr@!oaFJ@7>}nnGXi7T?FJMO*7Si7#v_e zlY_TUcMlKkS=hLhLjeDye^4QqL^pMBA`aAk9okgq6@^LFhs!&N!S6qQ=O1&bLlD?! zxm)IX+!6H5QNRe^mw>d+3dFs~FC2FfZs1|a#EEtTv|Yf*pzcp~@Rx@yqv4?aevW zO|Wt(ue$iBXz>+u;vz;uFwQmf#>Ukr%g5k2tCTz^c+7xe;4!~|Eg72LU?l;luAEC40)_nNI;RWx3D|yKx)B^6O<@d!Zy$8bO;-^Bti{xAW&_w<`uxi|yHVjb=Hp$nmN#KdTP!qEqEskR?0nR>RJxFgsv& z-uF?{#Z8Z++ed=*o1nQqyei_o3x!!$Nl4t+@y@51xqfZtJdl?=?{UOWQcB}1sj+&j z2OaT&nK;K)o5TFRvQ1%F*7v=-FGZ=sKe1y8%$v$|s(169e4Sot`y^8FpeQ|$6LD7k z3~Fa4!UHxi*SkZ7KwHixWF`3{0r5SAd=Trc;_MK8#P=6wKm2WnsziaC-r*|4oh)ZY zvOh$mIy|~sE(!FDm=VldhLvD8)IRbFGuE9BcB?HxQ45SmFp2e-E*LoM#?$j*T?`?i zX->_|0u1g=F+h7zN^cU4+-pHNm)w3LAyK)u@Ut!&@cmu;3k)yOtY9hEl87_>6HyAf z$tX$NWKv>Qs5UDYL_?%JP$?5Bjwa_K23G~I7>jp&=@1Bdf3sL~_~s-6;$?FgKD4J=CWT1-#bv!&YMts^SEt& z(3r1pIR>ILX~x~Z2ona}O##lD{#@S*EW2u^2j7Y8xXDyJ`#b8Kr{^Xg;a9F(BxIQy zg&p!XfsdNmktT&7O_;fs;kLn0CM8L9*eUG!8qQl5;M|*&<@9U(yf&m_mia>LRCER` zF1aScByjzT(#w0K#gZH0E4*7-d{oqL!otR@vT30p9CPJi?3O5pFV|_e*9#`9p=CFVHv~_ z$K>c`m@N4yECIxBgvj`DWIdggwm|n04!Ij6&n9g1p`vHz2vG^6-xXq1=M4BnUt*YD ziP1xXZ49Zz_ifj&f3Ue2TAl*sNB_hdrqlziI*u15jG!4Ylad8?;#7c|DI(+{Ix&oy zhb7gE`DVdl|0%yg&i?g_if$?Vm6sRW{scHeHD5>Yhv}@Xt@T{K7hjh5iAxvI+Yb2| zO3F5LZ^rFlgC0i@JLB-$e_8OWHiGd*qc1IZg>*g66*w$Xg=E9P_w}_wgBMU|%GW?l zA6{BI;(Jjd^GZ50L49Id{rxI9*`7R7t;et{v~nIvE0;BKPse+hsvBmeuBlu)r2i!Q zyN--&6b8Oi>UoUndQ7IKU|occSv@H**he}6JC8GO>V_08m{kjIt9xF+eu1v-R-|}kO-cLQ>R|81z{cR~4{v-ij~tY;^tG`9Y(qCR z=^VvO8dns9U}MTwMySXB6t}aRoq;BG;F&tp3n+jiqvNNs@-O~At*Jxzklc$ZFfj<3 z3K*+y!@QmFuWMe}@Ta&Ffq58v``?P-`BIQj(-P!6HbT84wPk@P-t0x?lKCI%PAHuL zn?L-CV_)6DjWq%jLZmy1MZp0WM_Tzb zcrOmBni3pim**S3lqPNh+{zD<1}wKA+)d)6t3&uuz_Wb%yyxl#bb$j!N&B#LuJPso z@TW=W&G>U(#xi~zG3AC|TR#13O|+l}{9c>#g8^!MTAFp|zFNN7k2DXaFg))R>H@<0 zL&JqD1*iqRZRhE1U;i}TxibB+FV$l_&Si0`S?wf%s88$Dk-q7d=1BNwo%(PE3U0%i z;Yvt)3kqgvjy`jEo(A88k4+(j{b-+LxECn}cXiU}Sz;8pJF%SfksbwnXk+sK17PyAfs#_dn&zj2;V(-&PL>Mhf1oXbi!3 zAD_bfKtgjn>z#JIJt??Z%MK;nb%~thS_kW3^EP!HPlPUNM(Ktik>{jfmUB$5BP%>= zi-@eP5X&2T_lbWaCxxA64mMKd)&mDudlUFid%L^>UX0jFyvTx15dr)&5YrjF_Xb!x z;l1ZV2;6^XC`Uevl@WNWSBDqtWF|d9n8R(*#Qyz}7vdl{@t*R24Dv3y2uFmjEtZ zaOb2oJ3ZR3aO+3Mtmi)wKS@^~OPHMsExC3oz7Lv)+^-d}O1^&D{m2GjMO9!@@{%p} zu;+Tuut?h$`TFh2ijfD?A=e6CFd5ZyMolqWS&$qLXeu(@n5sE|8CJ< zP?Pa>=OQ+Nk-lETToi@;a*Bwk;;bLGUzpzHtHSz<>vrhQn{WidoX-0Pt`h;fS_&&CRp&l~eyYDJwo7=Dy_DNYI zuTL}K)zV6&ISj^e+b)JoR^)JD^jmTUcoRL;js>GwtQ!$!T z%ea_wWc~eTJ)!Dt=UgAcZ(6=Tt<~aqlK@c8znFyU)GKc1t7q0M_&tuAwPbxy!(f3S z@9lfpHRCP_@OPQxrYh!MAjNhggxn6%9Cwn#DER+?i%L-p8dfV)rRlgSS-`vTgJjg_ zUlqQAYL7ylRHk7}RHJO5DjCY+z04!Qn(n({>E+54XB3RB2J88`}Q(?>J2+1OyS zGtQp<@d-#e3yb`pfDp0$X-47-hIoH-ubnpw5Us!~{_06WZ5)B8sAb zYvkvCZH0J+R-gUpQ}38bi{<-p!+^7!Cab@m1M(m50+^t_^lU(D=Acj8dOG&~&%`de zdr8nAzwi|%bR3CDf|3A;iuH=#{L1Wc$EE|G{5tn|J~ZNW^JQ`Oh3v>(q&u=iG4pk`xY}&3>T90MI_&&AcJ_Er%3COrYdBwTqM|bK2O(5f4bEb|Lzq zdvsFbUlLWXFLM=g7CiXNZju-NlfC?k)+fexaB})D)~&2?wT8x872ck6M=>C22d>ox zlLW+v;7gNFtMXj!t^#9&(3e0Qz9jtN1?uqNjVu^bhfUjmo+1V||3W(Mk$ItOq!e?y zqa4E7q2XcIX|Kfy{;Pl-`q`pMRC3LC<7C(p;7W#s?+qMieV1oMMv<_LyJJYVT%}fj z{>tg^%IB~OxJ_|~)2dt`bW@Y`V@XCW$Q~PNqZC81Tw?``LAhL<_Uk~F+OGKhutYGdoTL}nGVnW zCY{88C6nR&a&X8x9;6@2lF13Sk>q$3x<1iuH_G9YuDP?V`uHDTTM_pC4S7tsnuD-6j6GdFv#U>3r1Md$P^W(Bdi;+u>q#EW z+IJ$T1W~vN!S^rn47Z5vr= zDFG3YW>r8yN=lkRDe3N58kO#5K~lOKmhN6^m))7q-}4^t_dfr?eZ_gjdCqaq3{T}@ zGnqv~Je@9%;zT;)Exy9z4<|eT=xSMkxgdtp+4GI+*tG6KGY>b=B&#TgZo`?qXOp9~ zWi+YlzTL5`cd@3#pr=>Vi!qz?Su}C;uj6C%K>n8R#1W|@{+#v_UH+b`AEhVo`j_3u zyJkfwR*&_v+WSh6x2MYfvESmN}tUHrxLMQllR=^4|97EFF9%6x+ip{N?7g~ zY7!diR8&*Mx+H*-;6%Kb4XXk>{Hv7OoR?VZO9>Jhp1b3dXNZ0)x{-PSsVJXkZT{_v z$~Eg3ccMRbh(9+MP827JK(QJC_nmb$HHrX2AhbLyIX7{59nhk76V5rZ_5+7)ngNqu*vDNQoUvy1{Or!J0 z$ty3uL)k|6io()>#PH#2)pO{9VcRQUKilKBc8Sfx-Ucu~gnZ`b+_158 z8^_uO`r`()c7f2_bpVanAdLa!tIIu^K#IDfw=!_p&GAn8Zein?Ak;%WeVOg*r(R0)3sg4z(R zN`e%k-0jSzY^^-k4Ik6Tv#%;)8y4EQ1))?_@TBRq!5aL#-2nP%dTY4fjl1~%!&Aib zmKZZe%aoaKf%+<{G_mh;MGvH*Q>Mw0UQaFWH@)~jY#AOm`=rUCa-T0Oqq$3nWX|;n zOWhi!{A~myu^-j@0pyJb>D|2=rq^1}eegQu3%*~Uv5IYAmlHSag2|TsKwn1XYh*35 zpPyu8JdNwF+Lr@Wb(&vTK^;gJ`fB5VA0IA0&@LjBoC;sYCIVBeTRn%cgZkHy1Q6vz zbDU>RJoCd^;om1)xarp!Rcpoi8>Ht+ z_Q{S^zHf6u*~@;FEa{BrI0BCx^1#xNvrfOfMA`6-9~E%g(2vwJUXrcZvd7(2z&o4X zUyXVakpr4h-0#6k?aG-%eHIl9&C$$9%Ss*fyA?%kU$BkIKaTo~+Bhu14X&db*EvAe z!#ZK7Tam2&=#c>6*DF>$-tBlG<9@);M6Gggk{%EZ|Did63OI%)EqQ)bX(A~^2wf*V z4zP+r8K*-r+i=@~b4@%K0V&(NtaFj)8Po8{&WyUHsQnOmiEzVBw|^uvpdEen~B7Bo93Ca7r3A}BA5Jm4Tu<>isW9|`$f=r1R-ugRL;LG4pB1~Kw$c6ksisL7%G!{*Hte|q=$p5zCgrut^j7R+<70i!yD7P*ug3gE442mi zExRl4KV17)d|pq&D%JL$>*h>;L6{w)EAyh_Qz5P7Qd1-07fu#7H2Aj1Inyil4eg|J zm7cJlC0eRCXL)G&Kd_D;K&lu-bX+?yzUt7m>`FD;$y*s9zt!9BhmOU!rG zUsYQQTU+OlOk(o|A>xa^*Dow!!d|u`8V>NiLId>R6Qw+|>{pk)*aQzq`MQ1wj_dQ! zH=v_=ai*Pdg^QCTYZ|TJ$ba`}1j?5_ylsFC$}A+(zHV(;M9syz&^V1g#gn~BlXo6^ zCwBmi5CD5@K~k&QZU-t$h#6-sx6#1bt2*|7_%d4S0teN{H7SUB5R%x3^=sM0Io$ z2)DeMjBA$oW>@S~+OAnN7|i`dS~`QA@Q9O6koK6A|CfX)PjN5S<5$`4WdL3=j77=C z%a&M;Rcz>t@lHXs_MoQhm8|=gl}8T}D&#`Krn>Y$jNjw>Z6x}WJo+V*z{p&Df6Au6 z$6&5UdF8*7AHijS%$r@QVW&<-|KayM}TfGMrfdQ^6%7xCr%oMr9IqQ6LFWkCvD!tVcM1AgtP-Of(c{9?^6KPPEE%Qvxr|4=bnI zgx^t_e$N^13^5$I#V7g^X63JKU_H(>Av|QKUgy`zk9b`Q1x<8ZfQqy49z!FSCG(UB zjg`D(o?U9!jPhb7P6Xh-gKMzIC^330P+CYETOrG#&AkgTp?it`4CdT?ObMgOUD(sp z(du3hvGt|U3DVjG>Rkwbv0Mb8>KJ`kQ*<&iX-|`Rg5A)SmVo*VEbgNwSl6RYP)FZ0 zM3orVmlgQU{qHfAMO6Ly&8Pmh!TL4R!!S|foI16Ff9F!BzLF?nsE$fQb0AI6hP62Xow0Q}qMko5ciQ%{BlELFTUy5r`Jr0{ z)l)GYx4ysnU#FWCmHsnY|A8Q?@4Db6d}QWHlW1i#3VZkgm3xlzl!?C9q68W>L5~K2 zVbNwmR8!e9Mk7wEn&7;4df>2&%E#JGJKth)yqp#$E~(O(2Bwlf)>cd%nt#f{{+B?T z#_qMkp^xlm|En>|vz^IoJdf^twsRjq0)>WR-_&tE8y{$~1j+_WmLCJX@ib8cx_!7x z5$cP=tzWf-M+GwoNC^X^t)T`BwVigHOO^@RkTj%Qb4)9V9ilQ@)n&e3!S8rk#haE+1)tNlUfo$xu#{U5}a6ob7zXtLs*OiUD z89hvcd1p~}kozR_;k2K>$lqx011B^Moq-H$U)pEJ5bNDw zl8Ec7y1Y(XBpiP^c?*@}U$`O5{W`V^f92*TrQ<;fyc#zDE)kY^gu&+Uq>Lf(YDE;DDw(OseT23m3|1W^} zQgQzh+DFQgALK{xxu0ynG6;-Rp9BLI-xT`UaxNS z_em56el(+kht=#Z7G)bUFE0>5HR&h`Xu$)eE+6m#bB{6|rLW!??WhmC$EBLpsG;{~ zxzz1J(f?T1RK`r)t3PNT9I5RPP%25fgcXmkT|e$h9SS7g3yVmLh5Yo?gm=bMwALuU z4uh(7itH^@%)kOvRRLPpwUNpOR^Q3_r^4N)nI6loU+SDfVxqV#03dRf*HV`vtm)M^X@Z;o9})qyj>$u?jVNQw41&0Y$T%vC}*B=O2%D- z_D8AElAJOF6<_!dvN!+FfZ5Fuvf9tGm%Mb*RT?>^2Cn z%pOk2cBFh4d*kp=H}nP^M(7Nn!idSY5F0QXHS&|16|_1zPp>re9*U}l{HkP4zIs!H z>Al`NDvP-kI7#>g6sxYl-3GtTB-!{L&2fvKPtp~OJzl^z>ty4{Men1JmyFM=fc5AL4-tC`|@ zD3$|~h)EbtAEg_evkb8uv{bb~Hg%3{N=!Zpcn^zeR&bMDnAH9Ak>k~~$I7A~KB$#H z?758P;8kDivwQG)MujWgnHA9TmM6y}qD}*`Z33Hwh>HdJ!0s;fOLQu*jx#X90%!hP z!j>s}xsn!htqsRm?ABW`UD(1Yr{*=lCwCH{+ec;D_4#IBXJYtxeLlUngwbfE(JchH4Uo2_# zuf#~rRb`938TgaAZDu^iR;yy%BK+5W0Hx6l{K;uOY0(za4%^=p-Y@LkxW>pM9~wD^ z;#uzImZe==&ef-5@hW=g$^YQ6DT{(_06IXg*?qDjc>KoiJv5%R*jc4+`m~JrVe{%L zFm==Jis}-4W02`h2`Xn*1f8;qa#{t3KX9RA=`DgmL9PQRkvVepee988Km8av5XQ zzm8O54bbpjj(b>4@y_`uuw27L>;bjhZP49CjhQaWO%Vj3TW`66c<^{s z`5+4V3Z~A)04g)S%_q18k`a z`UnDszRQ{aq)O}PiH&D=b2_H!1HnLgnM(5GLebT;sNMOC^ER@VziEc-A%c?Nt4muWXCbrMk206PEVlsCw zoLT7`Qi9HbX|M)$1bcd}#0Wf|po|YfqG*ERgPp_~R$qDlmj-?13&ZE1%zjWuAG;_p zGjROO`X9JgR?N|=qe$a-(>P=*a2uMdxh-f0!OBh_y&lJq#|59kw2u+xHY`Qxg+({^ zt6O6eV4b`eP{PCiMW3iwcT)o|#!^d?c9B*wkH775uPbj)sQKL;nT?$l@t5{CM+Xw0 z4$*%!dc^G9W3k__uq^|_E(2MpXAOuv=(KW#ll*FZz3Fm<-ugLwEF$MGLc7(WUl*!Z z1+_Q}*O(4fEhw9Bq9(_3D>wQSgq_|Cv2%J8Ob!#}vFmu+TkI~p{;2d$;1LLUZF6n@ zJsWpd*)Nno{U}r+E^336wc!MFQEzaHB!!my+-?N1VqoxTd^h$y6ffZBEx9)*&0P)d zdyb`hdVA}?g6AG`v9we<{9x~QxW}V*ylKU;5C*d_mCT$_%i0I z-V%eM$l0UX)mgcb8>6M!9Rgy0A-8oXRCrdpu_=CRvg8k>)dR}6y^fI*9^&&J)4~&3 zw(rb#rIUp5bwRl={V^m-ar(@5!8$V9-yzo>R|;m(eUL-gYDK>Ifdbef-suM!ruhS2 zw6votbp96!h@;N+d;P+U+5@N-=tLGP!008+0$#OV$Qay>{PxAx=PN^%NGGsF8dlP| zf$)+Ev()Re`)iTEHF;1HjkdyDcV`yO$-qG#6r~x~X%(GjQwD5{IDcZhl38UCIW$JpVI z-{yTMWta#)0fc=24s6*z1=hhV==jY0JhNt)g_4!Wtty}$OTw;J41G^edFMf34}rg= zxex;KlvLrnLZ=>xE$vyl&PBrDwCj)paS(iSVaZ40jnJXP=_PzTawl~0Auer(U_7m9Ep_p zJ;4>t7rL(CDD5%o1e;W;g?T>yu?6UvrOY9qJU@Q>s?gDz`5O9J`6k4d_~%|bj$Na# ztNxS$`NL85F9Sz}yq`@Om&i2)l|}{*fJT(gWy<12;Z0Gfh=2q~#jp(cs^^B1 zo2eW2!dk`03`p(_jeGRDOA8-0%&#}!PyeBP8LB~ggz)~#(r-*)XMrVTyaQCCW8roa zx|GW&p<$yTlk5qBTl8E5rYmT{ubKle_sz>=g!tAA$>Vv^6y}YtnbKnerr0NPht~f%S?8rr5ARWy zlp!#r%_P?!ZBaiBzBy!0G+&;&qYF)ubeDV_4v2E>`iasgL{maMS<(V+$E-9`UF>{dH*|p$bPhXICauC zQsnlt>5HNaUc4jwxP2;+Oz^l|5q+ZI_vNt!5T{smjF@YLu{dGV%0=$Zmp!MxT)eTX z`Y}kiYVhJks3@OFY=B3|vm)w?@2=Ozdtu@+0sY3j?|I39IZib6+>mw()_c4BrBW6A z?GstM7zl$jP&HVuX(!p+ph5yOxQd-XjofE4YiBx%CJ)*dw}fP(GWh!#{|7+J{{>)$ zi}#OCO5;shQr0@ChzjDZFs=a)W#~1AX`26gqo}4_p~5~70lnwGa_`6IpHKp4+Vc|l z%Ew7T#qzH{Q4cE{yN9{S&+lDwzFZ_*{y*NQigS?kSvD zZ4c6Ncxn07yo}52dsj35N&m%~Rw0l}k!ii>pDtun0PU}!tY_Wb&7@F90kQ`r)bE#> zC8eOB5gB&tG1buK0ltP65O3NbJJ=iDfT{J`<`(e)g;VdpMaJa*(cLER1K^Mxn=5SdC%Ieax;oKk zZWrj8X9A7o#fi`hJ4+IayGE*q49L>tzA5hh1A|>A`fmb1xIT`{tkB5er`-@4$Ra|- zwLuXb`-f`?S3=d-3-eC;crpp#N48xzgc(%Jx920$I!9KhO9ZbEIKo|zOEEXKTs~R< zR})@D?1wjwUKGxl-7+>SSrdHI`XB`9VZwdyOPJ83J_Rr3V9KdfqOp74xYc*KbtKao zoiP*CboKZ8V_qp{S9UJ3Ic$F1vB=A%LFcd8L^-6JG+tJ3K7P37-lg^?!yYdfkdgd1 zQHX98&-M%CfW%lt;)|u7vp%+OA-VLZ?((@;_UI-pQg%NQd-0#C08}OG$42H>G%KD} z4cO|W2hFl0+=ZXFq`F!^FQHT-zM^rgC?a5@8A1g)pN_mWw(+~lwJWf3@Niz^9}ll_ z+$uGZS;gmPMaJ>VIu;j_9RAy5Saf5UH+Bg2`xt6Cy7AYg&@NYkxr+dQG6>ibmIU-1 z)h9{n9DE)t1yVX>r`wIJRL!}|qvux>n6QnubxinUqANqUtu|5!GsWQ;qNHMPs==q9 zfJJ|ry~@*wolv-+uaBqN9%|!40JlJ@4{4mYd)~x`c&PTl+^Nfy$2?sETr>_Ui1cLYUZpfO=m>3i^mKF)x2U%2ykfAAnav#t$GH zRfEkfjUuztfE^$n(t?N#uT)&4(#zPk*!M?fCc$u#``~dDj2MHb|Dzb-*>us#uSYOu@zVqmof6jMozKGWL zPjZWoX4+F|l&wc--rUjTb1?Xg1qVMM_H1w%j|_iM5B9R&!Bw}iyD|1qG!C2} zA{NTOO^Dhp%XTaIVy%L1YbgF!oUq!2=5uO8*QjQJ_vJHzuPBS60&PVem6fWcp{n;Z z@H+$EBu#6(+1lY{*~;yIiJv-@heXwdzEQM!&CKH~ZDkD@=%5wDR8fxz0XVu?V$jZU zh1-3S4%O%MPr$R8d?6j*hNphM4RjEYKIEQ`V5FS(@xP_Dgk?E-3r~dt$Rp_wXMhCr zEgrk(?+R8RWjtds$~KUmv2+uDiR=2YWj;D&6s`lis?XrGB)dfQJ!|I(7XBa%I@R&^ zZ9c`rK5oFiyV%m710r)!OJ|4X7vv9`<3TJ>04^9W01dukoR(}^g6l)y#Qf^$SQRT| zoL`_a|^QXp@hSc;q8n_ojuN%q*Zz-g{x``KTIJP4**u8s>C0@OtKBZfh;BkDc$o@G&@*WxQOI)aqy%x;XuH=Nj&(OR=om z08(KHSOsvGTq9izPv4!UyE~~UrfJ~(DoGuyS^!Ua*#my;$qFj_D54?%W~u!$Fy&)1 zZ!zf+#J%*C-xS}Q_%SVS5#d8l%xvhFGg%dv{fkOTE^!@yS%RO0IneI8{E(`<${&r3 z$d)bZ6qeiG`j%wMt6HTP1s_YdX;3FhoU(xA05y#>QrL|I-xd;>=3DTozFawleSP4>c2->G_E z#EYc;pKOhA_r>`FYj>-IF~*mZ2EV+SjXMx>kjkPB9~s07jAUEIw!^Hi5&JJbco?#* zank{er0FeeSViH})hd_s$+yL@)NunBC|}#gD9&b(e8}`A>6h&o88(|ghJ1%Gn9@*# zs?2!{xv*^;WsL3XCdtv~l=U)>oVv(o#g0(#gYXHso}$(na!6kD(gpWL^Sm2*bz-2T z-VQNX(u}4s^PqRS3F%Ovf+;*#3}~Z8HBVjjI~5V3!U3ixw|JzhID+3XQoFCh_o-UB zydD_ezEiC4J=uS9Qsq(#EZ$y0%-qan8TuE{qGlc>_KMW@+GWo%P_+t=LKwl_G*YRO zB5i~p=Vo0Bq%=QJxco92Pd0C63}Aw(M0Tg}U1{z_$pf_jdyCv(R7d-nV zQQ$MiJ3A;LF6_g5wjTqp*7*^}|3D5k!>2V)AWyQ`Q1U&)LG{Bf(n}vg@001wlX%R* zn+?dM8UMk(Uy9;(+`))FEM4xk(niXK-;iIOej%KX2~tU+^EAeVH!_(&V^8=pOoDP} z-~;?&PfVhPA%l3Rgb^Ahbp+%7qHIeST>s6H<()4=-q#U_qlya(=i)C$IB+9O&2lB_ zXAcuPPwh&(qfzhgq*>s9*c?v)F5BV1l``u~hB!ev4;ToM`&q~Mt$ zuzJO=(f&*15ELZs0M>83&votsE8>q)$MA}andSyT0T!b7|Jrf2Rm?N-t9P4>(wR6& zBew2)DV!%5(?gsXu$Z;>$?_kbD?2QT8#s$!eyZ70!k4|>cxsvq3YK9_9 z+Ip$c^PW^9rH4fwBRv#24|!_=(-1a3*#JkPLQR=k&jBRIHN7um$W^${Ud8Yzc>6ybKU|-q&iAz|O(| zR!M&44Fb5Q&wC|Z+@=Cj;TiWgO8y)=1bg0WUn6L|I!@l=IY#S?eJ4f{M3V)*bQo%X zN}I{(=TvoAW_2om{+lmM5%R}rEGAcSb8t{v1BQJ7Kn-C6tXH$(rl~uTR3RbXU=)IJ)ip zz5_aYni$({?vQ)e1r3Vr@2nD|WPS;htZk%R`mSzyNw*GG)*cDC<+Z8-)^aw@A0cT* zru^Gt$z;Jz_$c-3V+kTaUR&x0S~{8W-tFV8LQ}9g3MRj|ik3FLzvsAPR(bi&qao@V z-Q#YqYz1O|tzG@AS%M*;!MHRyj z7adxwnWG%9I!E4sc$%O&`wKg}U-?CL_1`|h+-jA3x*qo`Wkm;<-<0gnd+Q-Ns&1eB z!*J`t=bU6?9FvGG{u(*`)x+!3nN9~Ttuo0*O_8ot8)?1 z8Jg@{Rp?6@a^y3EQ{JAJU7Do-FnaOfQ4ycINhO6&kM^xxqyMRiQ6NWF!?@k!+m#H9 z{ug!7tRNnKRFyPg#`oJvR()~{u<9aZJpN`k+9%;bnokwdDH&W+^%d z`sYB>rN-WydW{rd0I`OETR&72zvO3pVlS%t>f5_3Vlie9)ZeJei{~) zN?!L$z_UIW81zU%CIQp94V52PeWSaVB1Rvu$h>WWYP_xb05i->{rPg`PMs5c_H}4r z8r5U2xQOzadOdRI~)oon9pKf8r6Dake&+V@iidlpsVN zv(eq_fNL3nzFJ#LT$D>kQXn%e9O?+Q+5u>bB>>sC!T25GW1g+RBXZaChxjY%F1KUP zy?*fDm%!6DfDS{e`J2JnC7;}{J5ohQb&l_%cCdfb?LFq(DWSei+KU7$Wl32v!MG6G zXP8Ybr(<%R;fbreP3?6;46A(959xJ<>AogG8ir6GR-W8T71Vhq6cSL?O7r;B$gbUD zcc#3^xjEy z7Z&>tKu4e4ZO6ZE(HSP|*yP&q)ZC(bZTXx$l`%91yYl#pR0v%_x0!QlBw{gnNyRFU z_L>OWUe`!tW{l|K{e)PFfO4noK;y7CvupUvnE$y$fNJp8c~`VFRJl7`bOW^LCf)QJ z;gWX#weX<%sQM`N?D&Eue`Iyt+%1O!dd}IB6aXYq&fL7J$lPZ9nm;Pc7+~7Ke)F7b-w2#uTYr{7&fHnR4Nw>( zcWXpn^{x@sHd2_wXmQAm5*GQeUXtJ9dd5x4;7)#6ehh1^_QpfWuGQ$P?&>@wY2$i@ zHY*Z*6^!#q*YEzL0UwCet+3DRpod{bqHs=VW>LTl;*b^$eF(boszaB|74ZRKR#D@( z^@~13Yq;n&zDm^7b08ou6`1S>M&ku5cSIaN^<}~K)%0Dz=%{QXeujo6*}wP3hT}?`3-M?! z$mgqGZE%RJFZ@K?nlR29`)2encIOnaUldKypgclU+0Ybyp5Dx}t@!Ov(0K|>6qYUs zUWoN2$#UUW0p^9<@*k{~YIJv&>%_fu(g15u5cpZOr1$9^NC<>MYvfKC0rjEY2JKYn zPx|pCjMr{g$I2cG1S<8#oT$*d6I{z{0eGrvku!~YNVTv-VXdTANVN%<$g}06JlJCL zRBjHp^Oy{eSO=MQ#2GEyuCi~8)YggF%YD z$bOU@%-{t{Udg}EpU1l7A0jaa6~|DIR>R2qL^;jNg6uMqSNU!Gl3YF?1{aZbeZ6Fw zS>Ieej)H#jM+Iw5U1!!Tj27C@QOA=oO_HPRGA^NtuwE86$TQDUlf9~Nh0N^Y5jnW( z$2Bmfsrn%?pvC#BHc30fji?uffz4AvUw>$3OOR4sll%MBXaI%i1tKKcw)R8vgU`rL z2RnRT-=Pba3|;OP#7hM0a+u$_h`Y&w2jwzS>?8$gaxoPGW?`TxeB-K z!aVmYxk0;(X82wM=X@~}R`K|<7kf^IMM*EQIJIB$YhO7M`6rCKC6>+9!Ai zftX!S5$#Mt@QLwaB72$13(E_Vt8&ljKe>^+?r{=8{M5VLs(T}a85|g;R=C9|mTOm| z^P9Tc5WPz&SZ7Ipqdt}j=60}(h?v}4S(mY0z!Y5UonAVyBhtsZ3b6Jj$QrckZzOUC z;f^N#Y&@uQr6b{&_>-lD2heHYo&wjryW2I10Qk6CW3=M_$>&R$;@T%OMv4miy_YAN zkJYI+fWah0b{XKI^kej>tEhDXk8-w3o1h1@&MY$?U5ajlWR2UUs_|EA>HYhpZ$LlG z-nYriykbwNhKST!aebK?vX=1@iAheR*K~dEef1zliaRpIE1C#dwTQIz#V!d z>{&BzxW6vo8Yu4iFESrs0K52;1D03ECbriHl9{a9I)Y6v!4TVNB`cWi@sj}eKd-|< zS>y>yNZl2-hrtfk6)!ivs8x#%4AnA7hExkyoB!ceuX<=dy>TG@t&>8ZIx5$R$<7j= zrePoV!vX3o|Aybg5t&XaP9P`Z`0%E%iO=Mj18tQT@RyQc5c`fFNT=>9)wI8o;0WL3 zk;=iioRp~yy!`JrZ6O-t+_s+5nN zI3k?Ng+}7Etk!w!)SRwdKq`e>faO?h6I6~3Ir(GEtTDEM*UQPnD&35n_#v;6A$Wi_ zd_@<9XR+aa_j-aJTD)V@Dlv{a26m&-Lnm-)F5w#>`h-%xl#uW`ON(FLOB<)CbzU0B z#GIABjQT8vPTa^}AKi;k3~<9?9T{8w82ezRq(5)@Mt#=H1@oa}J9iA56JAH-4L10T zYw>(2P||f9Bo9HooSl$qsmfDm@4nXsjfQ;9c0^&7Io7g25D{{)2&zxZ0=aZ+l-A-& zH`Sa>T7ykV)%-YOA>t5T;o6?N!49^D2k=bxJSpSdj5A#>5Tp1*u7 zyM4GtY4Ym0iVUx7{VAzj+o(&WP``Nc!l|82U#fEGcPKLZqXT~ZrMmx^vNE(e z>ip2}LqRG4BtTN((?R@~E$X+Tt`Ueneody%z4lQpAoAwpn2z{KacSbP>mi?k2ym%O zcnw?f@`93%nMgvc=oU0bD%9qmWsRT3rxDihdK2o0Qa|ts{b`DU&ESiddgm*!chvS_ zZ@3j}F94K096#A>&D^zTXKn3W|BwNh|~Qp90Cd{-0V6@Es% zVXMknQS&?{5+i)yhR*N(ZR=eTIgZ-{o_xAri2-5wz%aW^FLdR^-sbNX`1v>Bfilg* zjh-?%>D7;a{#uToC16T)!H|Ha5Q?Pp8$S@McAte->Ey(W?_|oTD4Q>_EwoQQ4B;!W zCn@s0P+=6tQm50X@Y2VvO9evRP`22~?$IRQWl1UuM>cAoQilCAo=Wpu>&m0drDzz{NZmR=O$ms^C^UyLp zGvbd2|*LI z^>8GHxE>IVjy-=_GS~W`Kbl5GjFO(S7i+%*HLO&17omXC<$k zSM04{94vOr1;~p9l*O?aw2HZpxrCVyZfm_ZVOvOYC_2NlH-9|43p94Jimi`>>~No9 z=RG{T?hDYoYZ-nK(=|E_lX%l&);%IF&3Hz|6!*U%aW0=aW^_3u$0CN~I}k1fks?Bm z`@0Td7pVAZ*^~7U6z7ZS%LpY%DN~^8VO876g?tJgR3*Hh^V!HB52RcsQH)%-TcUU$ z^8L5CX)o#r^y?6RP+w#G(qj*wb^keiTZU8{lF7u0{gd(Ywy)kPee#t5vis?1+Enz2 z_9*>9@5u4tX3CcbpHGW+Y_oTec#(*5GCbgae6V|}(?=zQ*+C2-4kxS5k;^~)@pc#I z)=Om1GTuG<7y2KV%Go*-Mo3*eR7-_Ym7Da4vsqHl`d{XjGxqfFvFlDV4e`$ggPr~QO$qJ9Zj+E#PI`)u&_5ba|~a^_-8@N+dRuXuk z+0?j%?In>Mx|(qJP$w|UIki*lcr_s?{KJDgk==)7^hfXr(qXyWtS&lWr=1X;8kY@EhuX^cKC)c|55W*Mq3hS>}AN#c>oddX++s?0K7#@Q*s( z0Fw&%e5fEF#N{3JascRx1Ec`{%oQ7SEvKj{lPk-itKS4W$xBy=wwcpC^*%gk zhvQ59G6dANkHi44Sec{ol%GuxLD@mz(S=6%{UE3on)G)QMP$Ig8ZqsSw_Cl4I}1$u z@b+)y0BQ)lZ>Z}$faK771Nnm`@y7>?j+II1dcQN7lPlW4`R^Nr17+7F=!1RieZHG_ z9bqB_G7>aUK7z~MN_Q4f294w9Odl;zuOVZcy>|GPjMKH#S*%1 zU>?S_wU&aF9?vXyfOI?wzf7()pLN0WH1W^&_S;b(WJ2XZRq*sax!XS3wVr_~)B^F9 zTD_z?$p3z0x9SX>Tkp{`K8Rvrr@DBZYkitak*-oVEp8tu7y_g)o33ahVXKlR1&0C5 zXGzZI14`-k_ju^o92gEa6p+cJM~Kga>BE}9tzjX7Ra+Ls6TU^tfQ~&l^N-_*34~tH zn+e#foPsmRLCYKcZhdhz?hmZS#Wbw=EhJ(9Ie^BXr?15Z#`^^k*IxQ}xIA5{o&lb0 zY>n!8v2qsR^Y}_Wj&zPNMBTa7dMkgZ(_hz-Uv(L=D?$s5@1t7UYptF--8AX|)OtVZ zmxUqB4h|{PTc6;4qVeOPT24LB1VNGGj8YxXb!-l}5IY7?$z5O~lG8fB} z{|LU+>Msc9S$4sffLv%X5)Ca9$N{?MaJxT~lq)HRZ6t>~TiCxBvP5sz5Jw=%M)GUJ zmrC1+J;W){-iI1hP@K2mDRI&g1f1w^Uy=W{k{{T$??na#J5;y9xP6|Gyki@=YV}l{ z*m{xvZD8sZ(HK+i!g^CgZWX8oL4&rFu$R_P)OtWrA#|& z8gba}nWdZ@l{6fD)1K~z@SgxHqx0qkE{lbxlud?4Rz6P7^eui9odS@3mnW%!Q?<=9!%C&&k9bj5IS`<*XmB~Ks40s~0R ztBU5|6k_)v-3yU;D8Q2D!UKadttY=KzNdocL0VrnY}Arj^exlE_hX=p<6fC-viuelgrz;I9!8yXC)m4Uc?ovx@S@=*|#$C<}&cGO5Jw;mUn%5_#|6 zBr88c^nme%^)zA6mlabM-Rc1(_wIZa0$SAb_wGFT_5g%UjYVQgei1_6>*djQLmdT^ zBb{9Ox-5BjOI|(ljVQ4u@XY}cQWx(fPr{|N*Z!Jxt8f4LzI{}ZMS2-5WbAawWVuNN zQfu!63<3`K)`n;bcMKm`Nr#jbVoGG{!O9~_%~>&%67tb45G%k`4{KWgb0FyxkQlaF z0*bVMd7_SP=Nd~b8-8R>|8;ru&jTAww?RY}9}nXTC~g|CghpvE1=8|T>;j-!OLr-? zStK22r1JYe$+M`LJFYqVs3+B_fWk5C>CSs_0l!xqreG8TtVP=ZkjyEG@KMM35rz^2 z+_(_(cT`B&K_C6tL)FJa$?N@?KLQU(k~Vzz#Kv3UlE{%yesK97MM8t>49 zekrW{T=eZ@ZdI}y4?oC?f~^@-SSW8pVDX>_&LM1RT@_mPrX4Z{(3e{fXm5(W)F?xZ zfMSLK?vy}hT)T5YES>IiUXr`PbaaGm)4Yp@oV^Joc~oO!rbnowDOHPs3xDe3+a`03 zLYITG*=N~;9>yi|O04p=sz$o6pMh?h((|Py;wvs*7q{IreM{(QTT#=x8*8w`fLpG* z^hulS8-pJ=KjU2@@FeALO4k0#X;$`X&>Yi+lRAr>zrf>PDc=29y>n>Ce#^FxXGPp2 zErc;fM3(ur^3%^D`kl38)GTjY2-!jV?qki<=J8jyDLz}xsiz>U7jv4w-hfxirnsv+ zb^rOp&|KR~^wq6NIq0$OT?byro1Jj!q!(!pQ zycn{AEL+}ZH9VM|??_vpTM@C6tYD)_{=)LdCa+nU<_mig!Ww8dQkaWYjzYQ85RQ0U zuGHMGZV4;%CJj&G!M&scJ$;J0)!fyY^x6@mwM4Jmyc0!fAPJzGDJ#0ah2kN^p{0>I z$$Du|^7vcAVh0^*#$9be{7p+gQB^(bX9{H#ey1{fcVL%O`I}2R?@oOn9ei79sp;+a z4S#m_(2eN=`aM(8I}sH0qPZfae1%4(!ZC)Xz~{PGWTArJtOIKqD|I2KnBNzpGPRw! z7z#)5=oI1iK&Gf*4TZG{9KI}0;?lpNbA2L_Op?O%e`5MSCTU)>+*NvmIXCts3AklOjL@w7`3Nhs!BU^o8=in7Q+AJM#5c9ZkJNuR`BGF z#^+z6+HpkeSHWTADKtlPgRJ-f!4AU}UhGLW5FvC(iR@9`Am$Uwt+6p;_{7(jJ2 zM}yVShd53QARdRJVA%F}Pi%4i?`J@s2TqKLbHjZ= zPw692_~Y&6tn37GPc`M2tyJ%WEvVie49QP>rI`K)JtmS()k4f2|DWGKl-MOz^$KH` zG_C%)Bfkbgp4(3PXR};WZ|a`oc}$4{KCgZ0Ank-r81{fyg{yG-`;ZNDE;a%=(+W>r zt-%~A^~yj8PYIZwUT+K1p#S?V0Ivi?z!40Fzr*|xOIOZb@T|_Dc>UrDzU+zDz?*wy zA9gcDJ~U}u`iYR
gSON*DL4V;a>9mu$$RD%N7tBwNi1HbNjxvFVu2ndKSR-Yp zB67YLV1WywD&2fHvl}r2tb&x!f}r9#;G`1T`V8{H#FN7tHpL?vNPz&ekSfl?b4%op zQ5E&=*ei;DyqB}}%Ti;t%O1teq+nh4$IA$W%o!tYy9pNS?UPVG0TbhA`Nd@RjbMgF z*!nBiIo@i5(ZHdX#hbWEUpxtUL3VYf@0!PCIx-JeZov}yvX1f%MZjo z#YYrFx&|ywF}|dg&%r*Q6wW;;tO8O(N`4>AtkW+J8ykYik)BVG(2?uU}@hv(e1+*V&-&IwQBAJZD(` z+6&>VjBj_OD;neYYbjBz*Q0jGql#}-dKn3c@Y%jP(Yy(K^_&wi%ye4r3YR8vt&-$r zu?K7E{@ST6zY&i2i|lPZUs7a#_~2=7KlWT3i*Uu6x*u4*q}{H5KoGihg^!FPAYNNn zKQqMF0<4G_?S`kvZ2I1Ov#XJ@EA{mz!Xi!IU{%6&5xrY-2k-H2rh?V$!vG?7vuyNy z4gF=Tzp`r~kh?L>U4C3uQZGHZMvks4JL}A4(#87);sS-F8<~1e56tfYd19FJ4eUC; zIjphR71TAE%i^pKQFfrZ+zdbE+Ca}ABM-+hn~`F$xWoBE%=gm_cf5h>>;h@t_cl0y zx!ZKS72+`tnh!)VS?lAE(g&^M z^_U6+XO>DZ$B5HjVtseI^qH2Hu^_2-*G>9e&pt4JhR{`Ta6u6U-^}>a%(Fbm{z%sj zziEgTC8Hx5{tov-zU0Hc%%bE}N{q~u@2H=JDzVngmc`}#Wu zP*f$U;-8=3IYA#zK#GnCuf#vIzjS12nPb*|x$!vJOCJxNHn}t0De_(nJZU#ay-_l0 zPb-De>p@{#6_S4O(xOgq(yzz98T#n-ob^Zj0JP^c!6NL+SprKtghs}Gsgr~Xrce+~ zaal4SsYdYTQqwJTNfe^yQid{h9#YxY|Aa`$p})_EeB_CNEtN-E*#f)I@RL=?G9Q_M zbXqnO5PP~&i~?n_>;I&oV&4aAh89ESh@MWw?d;$4vDJpu@7*rr%`HaBT;0*u-%Son zmhmR7zkfO5CIy}jFbXyQo(ImxaK6|{Mu?`XNv=UdPnM5JaR}ep^waF{OT3_IKkx|T zS|0r9QLeJt{urI1wo!>ud-M4{rbxlGo<&)&jQE>R8k zL97%sdbtWOEJ|<2pICQBSEvzjEoyfX(DDb;A)Tzk2IJ{LaAG;GLjg74=C#ho_dH+Z z0z}$hTG{KGZ~f#~(M#(xaz~`Ox_EEF38?>J14LN*>UCS z)8(tAf{k}49v2OB{~r0}$N9kNRn~XF`_eSI(yQ6rR^*Oj!l(3>d=Mu#5=r3KxafVq zBXoo`1JY$bno0ov9pSvtxcpg;ugtMg84=~s{SUf(x51c;iv6O4?1j@0`ZAGGgEyWx zvyS(69SV>abOEanQ9~es_6P{Hw#;3bs2TR#)4iZxl+tG8FBo-<3EH;)dVgK`68TeI zzeiGg6Q~-Hc3Q&I5Z>cAWi|vL_RalkKvr>3? zYuzSpgZ?{(4M)Z^^S)}${MOnp1FHwYg)cu=4q|oqAT{!Ai?eay1nkNwVRV>zf>n%* z4&GwZG}p@xIyH~uH$EGZvY3k9#ZZ<2igsS^1V_2UF2P3WmubPk+b7)|4qj|pqM%{Q zKYmclwF>PjSpBkRGd4M(xxt%+DQ;gg#fDja=#(z>T4QGLFV=X&jE`$ z3oo}ss^lL-+6p&9>;M*WhVNb3b+<6%N+v1rF8UAq!1%G&9^&Eb&C3IhW4qZgmA#!g zt6dLWh==4r7CKGxxbE>_p}n<~F;i5wMK3dmltuRS>yHHN=y0IcD9=7FHuT{N-oSle z0-pRQphZH|xC{Q9=6fw6ZVynwzER6R&FdHeI^fswIYy_>q2>>J0Q^zk*}p^sz5A4-5cAiRDfMBDhS&!t0|(F&v|Id9 zC;W9k?6*Z)GQ4wjQFY~Jwx*?zAAk>znX)vZXZoH zVgAnoJww10Px#I&C$DAB3vw~3ue=U>En(DlUFr}S)J0A+AQDIgky zre1@R4=+HNrMVuZ`{ZQ>swuBFCeePs4Vf<3;$IB{VG z@g&&ceY(c*_gg0kK|sZg_D5%2zVXfS_zk?mHK|hk4%3W9OZ?ZF+TPa6uC6@~3pnL;0_YcXe=dA53b?aZ=U$z>8hIIDL`p>RLJ7R zET~B4%RXjs74(h2R#Wv-_^YVYTxh_ah>=ilE7-j4myt$-J}m}ztX zo8Ez8WCmN)gT-GrkXi4B4LHETl|iTd`XlN?WD7dg5iZ-1w$yBHE?!3bw=vG+Ire*O z^v{9(7Pu||Vw!|3^KtpK$R~}_AdIMoU>4r} zT`LjvfiTR4vsE?i@2BgD`C^3jZjXr_t?exSNLAL!9{BV%t%iY8dmdqc$ z?(2As#PiQ!5f@DU;NoP~IU^D%h02C6=?{Njftp#kqSZ7fE01kI>w9xWGcrR1sSr3= zBcrUrKNr?@lW-1Q!iY#JN7IGwjizhSjT$ynN1(Q(N@6jPhymw_1`^;Qz|fHg4iM3e zkoc8J^s57-ztHRf_MsYU>jtMSq}fZ@IJC?kIaG$7ToiJERilfWhjtr~jxmn5-s-Q( z<9AQ^zk-@?!TCkV0aQ3dORd4(FR$Q6DumdtTmxwL;pgJ#{gpdi;o-Q*yDe1wcW*7Z zDrem+UqpN)1fdfXh_CX{lMZy3%RS*&BfeqLHr;{eTM%mQDk%*VqE2ySx|xHGAi3Wp zCXMpfPg&Ne%%DI&iwpM)rlb%5%5hfUU{6Lfy7DqN^?9bj&`piX(U&ZSLH@Vh=k?&e$%Q8>a)Qr?$r7=A@Zu9e&2J-J{tJD2cc5b7ahh710 z1hN*%AYkjZ?sZVSd(ZVR&+i02qW2Kwh#&@Bm6N4BHF zc{Y%}=tHsh22xw(SW%f#kt@_9z~YYZX@;1%)2+m&inmHq@0t9~I65<_pv`#_PHLp} zjZg>;;wYWYAn#d~o@&7McO+e(Bjyz(;A?VO5C$Q8DAStK5O&aGP*&b;C!#0!-dUiC z-1>*dzPEdl;q5bS_=8QnIdJKS?-?h0Q24m=I>~o<0AS9={5C|5pGhTK3%Fi2KKZg|I)1A*3(ZORAybtZjExe8Ot(In@Xen-cYF>a9gZ&F9{h zx4x5di{8~7qKwP(xuq-nmg@Rd>bIoYZ(r2^JC^XhRK_{qRyu=Op&4D>39T1@0+AFF6P2I>{+^ zzn|#}E4_aN{PeI*4RqR)F%aSvvI6z6C4s94`Ki>jM=Ot7frnph3ED~6e0oUe?g8s7 zH!fS)dxw#_cU)0Dn+M0IbVV604MwKV#h^?9qk3>>4cCAn17r58&Xo_{rzuSWRsA2#RmebqT@<M)O~Rdb<>ovABD?lMm&>|MN~zrb@%cGggYMk~ig*vu4kCpP z@gYH5_(=+#If%-?cnp{l1)>KVFC}l>{{|0z7qkOwt8P;HOrm~9)iyx!+*jIzX&NpD zX(z_71g!Z)7Ie*50Kl8@=4H8@d#%8&q40*Zn6~WZa!}($3%#o#@hdcZqZV zAeH2SMO2rKd3VN^$zM4#YN%%e5&PYE(}R0sd5JkN=7?CX z@DWX~tuhZjnd+6ZdMDFhC^?h(zSaCl3CaI@!}k*>tFnXt{D706=f_{d-%L$AwG}Kpovq zs>GFz97U)xSPrU}-xZx^wF^?U=sWjc$as6%mGv9Pa&05@~zc8(VSEo6PgzS}fy{3SQ>tK@5e&v8h|LFWt?$3*LEX*2meln2CVq zuN4GHWo}4*HIZ&ghE$QzaTwg_@8^xHk>}8~DVh7mWlEiS?r-m`tV6eG+C!jY8Ra?g zLgH*4M$F4k6?T%%%yjoU(oDHklgeyC4JM%z0EhhUkv;lww2I50!`4iJS{sK!{ZGBb zq<=6}{!k0wK#pKH2pV-OsNX1;MU=(3Ym)QPd^ppT8~>$ODvg=mo7eY$5O+Af+#nn& zF+4F-Tf@>(h~_`zPPD$K>6^?_{zmzv75<9DsS{Kc9x(^U-RYP z0XWXyRA^>YZYcTwwqx&t`~(k5QkVGDKpTgHD_Dv`y#8v%;!pvug6ij8aL;Ns$5|7< zmcQ^6YL>AOo8CD=ekzJ9_u&?8jo?60Zew!*&xR=wBiZm#ofFaK><}SEJ~=Nk^XoU$r64GK}0V&Mh76-i7r=?kvmFx;N-hk@zVmVynvfoNo_$?_>1UK zrfmT)uz##X&V-xY|B*87B+v$3HimxIXWhEZZi!3M5TaWFF3G)+x0CFfgHOhWd?Qc( z-tOi9SLraRHDR}pM5xyRL_J^G-j1dmM(o4$eA1%d+F$CN`rf}Td1E*BA)jbguIxZ- z7!9`gwnu)Fv!vFM}+&SOX%=31fvxoL#2Toa} z8boQ&&}(KVsFEExcsT4Z^Pz2Or4|$FzvwTK%xd~_nEQ@)nAWSgmylyYwu-xYL>1F%g|sZ`pGXD2jQWAL zSJ_`O{a&={B7iS5Jhk&&CS{w2#4X(}=&+^}T?je&os+-)p-yn{)+K8B1fa4Tgf*tp zNnqdRR}nS%L2LF?G9I|m9-)ZLDeyAikRX&($kda~O5Aeq6xpRs5QNJ${vekxyO>0J zhc-ev*{|8Ft0S<_*8J^Rx#U%BRYnMt^8$Pc;Qb|_aWRJwbCz3NTngA21zNid-PxMF zj{F|*Vh2`fgft9X5C;8?gjfR}Q81{L&%H>J{x>AhMQ{&l&{2_9Knlnk(vVp#N3F=! zj%LYXxo6lySep&E73ax09XPx9fb7TNNM4xG_@mLBj~9X8?|XcQvMmZ9CriduJTjA*B_a%+DFBlcFf7rdLG`Cro0lLmjSGQ+rwr-*s zf0oI09KzyW^R@!q1vqFm6*hn>%kA578i1Twp^03+k>;KOk_Wde*gY1&kOjx$#+{b7 ztWOLAMAx$|?gm}3b}_>HYp6H^7tc9!!PdaKn+imTk0k?=tf2cNy$TXdAm$dNShUWf_ev zw%;>5r>INI5hE`Y1ZXc4cRD|-1$X+fnAx^P^9yinO-~Q@ZiYb7;?Sap@%U*(5%jLI zIAM}TZ2f9jAPu!0z$rK{&s?lybd)s+Z;Eu7giVCIHqGe~Ty~AQ2Guz@$|uo;L+945 zT8TjvgKKuPWm8wC18y3m*NKwdVCM2*#TIk-p9|ETi+mr8eb_&Ka$hL;Yj?mJ<=^c| z{vom9QQW~EO#9pO2vo<@Qv?1QviOL|2=4=fO=i!R69kfDfm$x=zhSxej#2&_u*vE> zr<9!se=tHPcpKNthXiH@ejeIkRsP1(C!LXRiG36>zp3BuADJT)=AlOU^dA^U@xf=!Gj=8TqEzS* zCfroAI7q=IUY~SSB5($r1Q26!A&r8_eW+Wp;um@&9awPtTlRFng+;gH`z`W^ivRj? zD@<#y^yq2%*-!-fSBq|*Bjt(d-IHsC^l6#>a|Z2`!z~SF-t2d%fLa<`bGqW6B{%8F z2w=XP)DV@hO0O>8!pDH?W8)%-cQz{LrS-3Nxv#3e+pVfLv;K(F8NVGDLD}4zX_e@9 z{nk00e_8@h?j=9h%S#L(sw>V)3PEq*?X@W6D@@qvv$B)hj<5KGAsMwk+17t(M{jDWC@(5YfSx@{i zP1otEoab+k=)t?B@QX*d zx>C{L+)G#j|@piNcYwbI}_e^%?tpCn^Csw{LajAxL`^?D_<8id z)@`DJs;r2+a}E~CWHq^wkZ8Dx`pXAKrc1uCNN*EYvst(P@=53hzC?2473k~(DMLHO z#q|?zh}V61t#PCaSU?5x7~94rG}qNW*gy(9NPsn#IHze$^>jFUbx6`3L5XB#Pvb1P z<@>zUoeJxShWs(HspK5Y2096UkOnFqkUo}S4f)s!`!ZMu3QL(6qqv(&1^^q!lw2Z& z`_mG=-P45qGH9fp&upXO;3p|$len4=u+Hr?xz3hVb?<2W1+~6Ptf25ah`Lis2KJ|? zMu{Z7=}_epw{84^5$XtVjpPQL2w}p;Zw7< zQPVqB(}vCWBqVL1thyqiDA68Yue`SCtv=E{RhR+sO*g+@Bbq>wCk!=kf(-0G=v+YLtcuA-JIRGP(sg2a}L@6}hS=dy>Gj$eg3RQm9&k(Cn@ z_|IJ>Uu7x?+Y9t*3vLZ4S2Sy&ub-Agabl+yQ|@Xk91hb6NIlRcR#1WLB{QZNKw?ui zJoZHif83ixokTGTeN^EPILoKMylfw4RK z?EX-thIEgUVIo09VqloK{#|+SK}oRi^ski&1(CO>=P&U`R`jkytO%~w{PxcV?-5|& zuiE>QwKa}1mr_uJbwQKqdOp9)8Nba&BJEbbI~jl17PM@Mj%>KsCmWwjcLwMF{l_qn zdrYxza0`kG3d+HNC8eOta;G#p19=56;S%>9bq4Rcn6#C=C>+Ih0V7cMymd(1^jCHI z8x1GFy=PQ|uIqn@fV>HMB~mb%qbXpueNZwj%A=L6P26)r9W)gd<@VwRQT@Gz_{=08q|Lca6@DbNsR}*m3(S zHg~Tval;n>Jv5d}Wd(lqDpe46knH60Hxwv~+s99qWyk7;*CZs(`%qP z24ws^-2E}rTZbPO!Ai}ild2n@n#L%CW_JzayabrNBYqWJ+lEQs5^GrSZ9o}SfyeiL z_?TrkL_xXRBorb(@}kS@63bQXH^h2Q`J7!wQ+0Rxoz}~EM>Q8lzR>pl_g1=W?zWxMNnNs}pxCNM0vEn`rptZ*%k#K$kL&%j^s>l4my^Jti zU)+g42efD1-E8JRYS9-$(HjV2`%DaSq!S+YttH&O;lu}&Sg~5|JYVU*m3v)u9|s5$ zV9ktnqXLVwCl@yEbA=_Qkd?ZOE(Pw-RW|}kB>BGNm1p5#qMq9yT#ap1m7OuI_Q5Ua z5`~h~X7%{sAylFMsX1zn-R~@4K(z__e)4e;dPEhVR0uUPZX%!BUbX!**w%kBX;0(L z3a)4H&iwhhIu;>)S9t|O(e3+aOu!y$G-3z-oCVU8{l2YPP1`_vM{4ndAUgo-w zd5@Z1GE}g5A@%igcFix%w#-Uh6H5I|G)wUZOz;6l+qFzvYE29yQm>V8T^ln?sKtEb zmpD*7?$v?u;qckf7YAd~uV#iLMbj}?*&RyAMcFGD>=Y%tY|p~XW`}jdJS3Q1Xe)v3i;&&t*%h=?LOlVS3ly$XlUT%Oh)ei9MhKDo^ZnZ_ zXg2joHpyXmAyUWva6Q9F>85_i_ugTai9}bU^x?wA;EpXN(i>&*#`$tLd6*`3F=vn6 zb}BA=eeU%YKjaweB7c4(XUmSbz={1;;SWKk`^^*_n4pobh6-AW5w*>3q!PDd5xuP$ ztCQComfMDFZtmFqvWbnj9pGF19wNsa%3s_P{P3z3J%k=RnVcB!*;UQ&nab3Ci+etB zHT6eKPQ29fG1o0ezE<*3Yp_JGLFL~3m)es9-2#!K46PSQuT86X!COh?Xdp)CrTLS{%U8;xgOLi)(p_o*FeVp;vHrMUk8F&yB z5a2$&ApnobYzvfsdkcKe>%2;)#}T=>fsE^&>?R^feHg}<3U?=gT*NJ+PGElu5@+sT zy9Q>pV@FU)?hZ}ir=&ekBoo{qYv;VD?J?- zMvE)C#c*-mNPvNSv6R=15Z4Lse$)p2Hu$+MU{5f(iccw>fDOO5WuPlFMwyoJriG!6 zU9JkNNI-0=JO{uI31w6hc*12#FWhaZ!x07Pq&XGY-YP5mXi&76T|bx(yc0m&w>pry zlTlWA$GD(_DHV82u)ButHv=sZ6_}epkq7Zfk|gz z*+g#08b}1czjyK3hw|UJO@>-)ADa+N7xBI#z9I>VQcFE*c*-+Bkj z^3<7aArCRcsdm9_aE$vGQvW;@rWRH{*tF5Jm`NnPt9R*%H(&DHfUy)=nPDAaZ93)? zIT0x7vzmarHDEmm`mQF!f!9YxV}yv0dvHc1awF{A=I|xHk8h*5P`N}^iygKpf8W*2 z82ES!^m!!A;r@I(?#psHd@a9^ttnqYO@Uqb9d82BcFI}+C7@1xW>7N4J$Hg}8oHg< zj>@x*yp3KW{#9i4)J;9_9C9aRSxW~Bb?aZ9T`q5!vMhjuw{uqx>J8)|0fX9@-BRz` zKYqp;H?Q;F?ifH7uIwQpkX`lo>odVIrt{Z-%{ex+_|hneUdLDE#S!ega96G}t1}f_ zIxos_CB)%(o-_132=-)3_2^ldF@im4NngVfz2sG$9vdF$xD8@HT;tP_;2-Q6UnFUX z%G#@tmTY`i$Wy6i9nzB{9OKKyoJ*c&(%kc%LZ)_Vz$x~_>-osPqOvb4nJb*EkR^jM zm*TM4j0gM&7k(6%;fMoS=K90@zfbC3<&9Hr3wW#)@R0j5W$Wv|t6Oc)Kt86RtyqWm4%OF*4u@e2w_glI zG{(;8t@%EsMBt5*&IWfP<$g}d)tJHA1N+}Tto8KmR9h5geO=)1y>NXb=EXhAYrR%7 z3Z^$WIqxRLtGxm|)O?vGE+z^WXmohv%GBCmi=UqgE+eP8K4@@W1qeoW9DEGBN&OEG zc5vuA!u`7A6TYYJEHKW);25L6mF@GttBQ6|&?`Mx_B$({J=uKt$Q?nDiN)O(uYJm+ zCusuBd}^eP7#y1{S{lDi^tL8LHy3|U9yHtACos48Bdre8c;=CCKuM7Cg}{@&)fm)6 zO5QFmvouJc3yNKVn!KHZ(oO*XlZeiIN=m(I&4sFffyDItiOrUUN~lktV@Ojd7oaC=!NDuLJzOQa>y!y8>zTby;Sh^sPX*L@S@^N`sw7sV7*H6ev{fH z+{g~7gxP!$kW2UfH*E-?8Q^4eY*{VQ9EGUYsUiP-;P!o-eTw`|scCw%GWYuq>NjZH zhRUseXKOtx`>rM;4l~fu9lE#6fJKNr30mmVO!3B*N-LFt3tKELeli`WpDIGHwd z(~e^S+uE-@&~KavD>PjD2#w;;V%|gH(?yOub5(P_h|szB6_*zYlr(KlJi}P5%M6!# ze31tH*}FvQ-Y&o@%C3xEc!#ND4ZEWrOMME_ag|bPLuAsaB-c#mB|#5r(1y$)hY0RG zK6?pm`}+a-dkgaSNB8l2PF|{M zI(gVLi9uOcg*Y99`Fyn7+Nf={JeRtWmA!MFJY-Gyn}=N_*!AQ-y88ijhh+~0&r898 zdGo*BApiw)UvqGZSPhy-Jsx(9?#X%`emaS2KF_dr>jLTzaXk7&-czRt-59kX$rjR! zZ-9{tq2}p7VO12PbJ5vYP0w`F7J=$t!e92tTbcfS5-x9!%7BJ_O#QZWffqXfqtps6 z@Rof_5PtR9LJsp9c4)~v=RmYL z<{Fk@aFJ}JiFfR{HXnNL7{cxXSiF&G1G#+KVj}bbS~=2L$8m9ibzKPUfAf7O?Lusj z@v)Y-n>8^HA#XvwYCNj*^@s!+-Vfp5OU z|EWc6>d!Ruqnfho3G2}ocTzt3vQe51U-@7#Mw{`yq|LKaL?FH}EXQR2_6bbpBK#-h z)NzX>EOrLq+ZL@mj9AouK67 zdd}gQ<#(`X1)NKJ7*_s}m=N!Z^Wc0q<+D)5MD71*(Lur^2l=k>^0&m>xQ*ZP zl+k)p`x$4xwAobCcOE6-1Al4xmW<*jddojyEw|Y*g8;`N<%^Ju{8ts6rs1fcHlc6- zdsJf-0ubS6F2GV=y;wu2*u%!Rufa5_(B0k3e*=vNYwl5&?mD8qM(kF92B!nOX_)Vo zG7jZ;bh|>C#N9Ta-%uE~=FuR$HnIH3`H=bS9U>sC80C>km|dD9@!IBRkeFz$UnZd3 zKCyHLxpDBI>Hc=>LY=C|i-BKS`*RgHVC`8Eg(#A+_SxKq09in$zePi;LB=>ILYP?3 zQ9deV-}YyhSoc!N;e;FCg7J9G$We<6IhYtQS#Zbs%9JmRZ4FCh8X(@o1 zJ)y%A#9Dkg)2`VACB*`^beh9 z#P}1|2EFfkR}K*(jxP^LFu$FBS4%Odg8oeK&l#mb`aX2A7F1M|%3kpWlV;a$*VMtB zBzjiFZv^2_PoJFz;Cp-Xv%dLv0h5R5-C>;*jMzHhIA)$3P9u8d2tTUCQH*+j%v#3o z%~@ybsxSy&M@ec>h@am!dSH=a)P_k1OfR5;87No`%`v;&+4z)C74YG(Kb=G}xa`0w zzve+^4Z=^Nw*kXup10!>NzD<9YROI5~>=Y9PUq#*DTJ_CKE)X>(c>$U!) z{9``Fe*+9fbfZBg6mHi!S-ggvZjvIPkNFnZ41g`M^ch=?yk8q-HrH)mhe}i8fz(kp zu5{OW>GIDK7b+5*sw9d}L=y*?kwvGE?m#^|@Xy=R>01?=e`;A=0zo33L(Cb|Q4H-^ zIsjIH**0v|;$vK%bq~gHwyJInD~NngF>uRes<%((UMK1|iV7?^^T=n$wAs;Dw@(F1 z<2CN(nK^xGSy)C%tD=6aLn5G?*-G1(`jycpD-baoWQKye@gc zs}6hw+4I8N|L6It&S%A*)4kbVz?3ZUu`zUju71_*m2RY)#qg|)FWrqfdOl7`IoV|} z-*j=TPE^0%i9ocL2`R+H0`t}2@9h$LQ2y|6?}>N*AZgq>v~JY=cA?%rcP3HVOqpG; zuj80d63wLwjYS~u3!ywe6+UN4lUf}}W_s8j6z^|Ctca*RGkIDFY8&xf1nXCC0~Lo6 zSJXQ?mo%uvqOkca8`L&-OMF)N-WqU+4|8B;5)s=3cdpJan^o+aG&Vg(kge$f&oI~( zvn6?f^*y+oEMI-*9z*2ots~f@?nQ(Qfhb^6EUBh5WdoltHf(ijet1G$?>)kja6Qtv z%`R;_%yo)UZ0R)YOd1rJ71Kv%c7ET1!?{1>mr9?1?7=EdoRTPUdk}QSku;F^K^i~1 zKvO_~Qow(C=j`<|3xV4YqfL7o=4Zo~=0^6;#BBZhS1xvBK-vjZa}k5sI-T<{R_v7t zr{Jt4o}lxFuXkojWCOyU!kcZ1=1^p{D_wA=>n8p?fNGiTPnM7qcwr`MBA(3eq)lFK z^zhdugWavOy{8slASecF4rKNQsX66q0`yal7jd_+-0nw-QNlP!)JEw8m{sHdviE4bK;$4Z{Lla zDn24e7v=6<<=hNHM{5LA(S=B4!)H|@VKtJVsBh#_1$)`v>vb78)qk?JGGVyu1X+$z zb7-%2k?^d=oC#0>5eEDqIlarng=F|Rt)t;#T&;%k@qY*hgn{S18-I&J(tS0qZ+7qB z!~+3h>owCq#MY;k_J|{SmT(DS(xGOV-+S9e4r9K zD@dVrylmZGY2mVh`p`+0Wq$P6sW$j-`QlqlQaZ~`A|?|OLEzWm3xdGp0Giw6NYUuJ=U*`aASTq?+D@LyZ@I3LG{k2bU@yl0M}0R0#qV%ieosSAU3E zf*M93=a&$v;S(uSy^ux{#Ix>wU=c8cqCv4Ug;xUgP@^R*3>d@ERveaW>xilM-VK72 z?R%cDJ^ggedq>mWtYdc(YbOyEe-Y{D|Loo%f?vb)aAg?x*b;iWf%YRzH?QJj?C@c2 z8#`P!sGiQm>L+Ik){U)xHk}vjcawXa`pSw!#&<&LOW^N^ZL& zEV^Rfjia?L>{^Jj#hiBUS4e&O!(7Q@-3t8};jdz`IWAzQh+~)?kc$`M@3s8WCGCVC z>>iF@!WEePEhztdv~d^<-_Cf#v08=Vi5-MGHeelC__%p+0q*h^Xo6F=fxF*fUnr-0B-#)ER-I?Nr`jwA?N>uy*BaT**KT&g%IpVgIr~IF#|**BkgY zYTwZS`W->t;0|BDn5Y`-)`Ie*R+>WkowtM%IXVRJB=xrX^2(E$SL?`$+zYe6+7|(} zBfrkiVG-=TLmFuIHpN*3o|o1(p3l8=n{BcrIN6z2d@vfA#>v%I`S3AK({|E9`1d14 zT6(QG7-UU%o#dixr{oWgWPH45>?%!DY<76=z}98ytl8HNAA@=4r#0H84&7}NH| zR$2*Yvt{S2ZrM!mEW^fu}ktTS>vwW0b#X1XgSE-@A zbnou_1RrsTUBlkN%F9{a>owG!x8}g^ZMA^QdKR(l_gDuC3R}Oo3|r`e)jeBCJ_syP zq0)ILpJ7PMYVi4~f>2x7yWL2C$9p{>8lN>$A<9mqy@G+gD;MtFOg^0ySVtLrvZcSK zJ)~WB8fXOcih+%g;Qi^N-(Yhn{6H(TabL+Yl>(l3^(^#dpz3n?-ySQtx+`;FdLqE&4fmvGFeodvxu763BoISDKQux`F7<|VM|=M`_XwM z$!_F~9xA|jFhi1!vHBHx+Hh^etQ=1E_o}7EBWr+^&<(@P`YYS?{ zZg>GDtAV!P$-HrYxH(ESx_K7?-JIVjX}k_gZ2_~_kskF~KqJeWEaEPpoHzI>`{VZ= z-cXg5>CiJ^X!TvfTO zK0y1!I**-}KP)(p6l6IAk!6$UK^iyAWG`L;*H8VmNwwLQhHZjqRX# zj-sdM(YeQG>^q?qZg>O-{@_HzTcuiZuTr>&YXpCoCE!G{&}sB~8;d|bWZ%9JEv5a9 zLuC1*w(;3`yR_K{dyN9fzd**A!3KJgiaMG28ENe=K+em$*yWra%kRlr=#q7Q$RJbj`1bKTb z)~us?(a90={NQN0Ew}CmMoChr{)8>bbrz_6E4YD7xx|?_Sw|*JEOs`MCz2||!JdBt zXp>(Wd|U<&y)1aV<9AFHggp^k$^Yj4<+h9oVi8}m3Cbgjv}^Z8Hk__T0v88uhWbATh(L}mIq%g-F%+`i@sF^ut`ngFE0bnV~`7O zFD9^dTF~iJ$2$vtUH#`aoYQI-f^7>E>7_-VWM}RI^QEArO+n0bEyJMLYC`dfZ=MlA z`1KLry9}5OK*8$(D*@>?S+XWSi+|J$w%5FdLi8X?W}xtP>fy~hoOVyt>)2w%e-xx) z#>v*=Z)j}M?<-#-u~;uiYWm$k0DwoKI(Kx@Z0Gz7Uhc1<}E9|Rrs6jriM0v z=tP-Kd`WT|S7gq|VBqthl6E+~re`HFGH%4OUB@AJ?!$Ao0`sTKfA(wT^^*-u_q$vY zuG&~-8QyyLG0T?Z!8&PT*!9%shu6DhJpCU&%Y0vdulgzP?{BLLep0a&HLHAqCMw8` zu~$4M61-N+x-MGd&{6AT?{7wFLd-DWWOP~bIvd(+8Rxu~m7PJ`f{t6^k2K;1Q-Z;n zdPeNdno!P7yRqv}xF645QGPf(agg;2CVLhz@hJ)DC&>Z2^xu{q(=PqX(M|AD;pyz# z@sgjX?s!=m@RKK>cVH^=w+?vv6q*b_yDfFVwj~y+asP3lsqWMJ&w8P9p`VN9{@MkT zJ(uBd?TJat4?4(e46i5t@=rje@4iFxyU^oIh;Y&P%x*}ml%3-Y-V1%i&vuCXvHbJ+ z5AZ`J1t`FU0ZfeBYZ-yX9TyhYLxOJk3UQvLL-DNZSn=~(pVDFlu=3n~WT?FP=c&fV zk;eA9+S!U-!Lx+kp(7?IwX{zF!oVYR|5F%nLB0m74dYh!lWXVb40y`>gi>(-b@ApY zQhT^wo4_`DjsUCu`3 zIhf?yvzC2GDmK1CGeAVVd@0PW z*ulSgf~qWoK|eFJ%khXCyMybmZy!-^pnrq=Z7{9bDUW?>OU6w;8)D6ZF8q0_;DW~; zH;OT(UfesqFPm{AQ+-GSlV@ag>+p5keY{nGmY041_oo|x!qD@)B2sY|TY@GjpkL|; z=6e#LG<|lL-ET~o=F=amjbP}@k<%AD0_fqNqW-bd5HpTRU&^%eS`>q8jQ4RgF?Ps{ zPRRt2PW{z-m8FB>=E-c-`ac8&S--GW;QwYHo(U8m)Ke+T;(KURmKJRA8Q#_@#)Jxp|TGBn~DWPxOt=rLbC;sGAfKu*6L z#Lq~-cAtYSn&c0EQxKb#3f|2AzuyAj&8(rBuqG6Kdn^9YYaF>Iyno$nx3bdiCp!D~ zsF)dnixQ0EEn)aYSbb z-EZ7E+VQ97M!Vo&ii9sOq@kk(Ce!7Dgh#v75bdD)G2)xfsCWYhQ|E3fzGT~_nPVL; zVcSZi3XZ;%z()uKsEFEn5_DC5T}&2tg}Kg!mb5V)8yc;TAB&SPxUv6)uNX9HrYj?zljy0Nd>%~QR@=VUgj{2`|DfR5+OO7oxw)VY-9MSs;zFvTlUdGw2UR+f9{lP2lQKnxtV zE%aeb@KdK`QX@v?Vf!r_+{)@(!Z1Gnj-(LO5&RoRblFwv#02hqS@xE{q;N3rpJ3yA zbE*gird|t_F>Fw8#-C!Wl~v?F`DI8kNE|Kwfdle5HO~j?U&@3*MZA1of6<94J&$E@ zDr6G0i=li=O0bJRJ2}!Br$oz@dJust_9m=$DW7JMeS(*aimAW!hWy7h3S-3hjUM+q zVjJdG?}&z8{}z~biV_->R?YL?HTgC+l4U)C+HaQQEUIO51HYXN6hX@rTsRn4emL~w zzl(6hP<7lz=rb8J7)FQhcg~;}NX=BwwFh@u-!MJT))=&uHN412mXgW|f_*igLp znlWcg00m7LGC3Lw-YWyQ&2VCsH9a9#=sreZ7$6Evp?|Bk1( zwxG?~(bZ8pFHtW7rQkPln&fgDW2b_`q)VYmi@T+tw)nLGdvNlRJz=l|3M(RiV=&8q zdcji-#f=?E{jNTK{sDEz?jeR8D|HxvpP2wzDLQJULD`=lslVG<&bL7e1yD!>_=aL( z8|1HmTKM36L|xwE*PC<1BV%Aju1WaijzD*R0w4kC%q7~5$lP@S<>UW9n$A2Ps{f1s zpH@*QlHF9YlkCYdm7);ImUSvy60+}ZQDhyv5R-(gW0!U8`;vW&!C11JVVL#aU*F&3 z_j}xb?;r1T?mg!`U+;U~=X!u{>WbSdT}<>d?}2tctr97FD&eUCD#WO_chC@Z`?)4M*owXSLh{uw zHzzwgK46=lt){HXRmWT^IK^Mwf4*(@0YArQjU-}(#g!w+-7f`_?S0WWWd8GvLeP-G zN+`;S%v+PZ2ge&06dd_bF1$b_7>kF&?TBaT^s|$F?Y>UxYdjVvmizmv^nO7*+quTi zsV|+k1fL~sXI0in_W(vwxAjI3;HT~Ju(4CF%jCmCkn6+3d(7g&VKwQaGB(b^a&AS; z-~}yB|4_kw8grh$*VPp)3$_8B@6XB%18j*+uO!CWT*Cj?MtTaYzi-d`V;v6(R}ttA z?EX=p*_O)T4!M`t*PNqT*QO?d>KapHq`_}}V-PH@Azosz{wVg_vcEqRlX%ILW#y{* z1om2y=7o40fnUPXP`u+sP2aPZq9KbT72`0;ps~OPdp{epd#l?;h4M!~h&;8$a8+?Xy12u;C$~D;2Rfa#>{=p6T|#Ifm&>K+rU&|%6G*) z#LA~FmgJYr{Rvw@YQZ4!O!@JhFGfG15#RH7GVg$+6vPD9X$=$ezYnOar@N2FU!%&P zWr~ztYNd?&vygm+01bWJ()>>h-dN*w(}R1jSI&NV`}V5L6j|$ruFkB%#lZ&9&Fe|{ zm_-N({>oD1S6bcjvwFfi*!TD3Y05z$d-%sHe12|8gH4tQFTr_-_U66-jsK$oBsYm2 zxcM3o(a_1Wh87Nq`T~lG;NZWeA0GJ8ko!}QR6$kf4X;Sw{tnszzcd~FZJ6Eda%vD# z&HBo?lGav2nf4D%#x@}3GNA8R&U^4y>jzv5YS;#IPGuLu#t9Ev7d!?I(6u;BwgAG~ z@2|(T+?-!~R~T5;E;(oNEQh3L62t;bpNI%{jXnJ2o>jl4FH4z~-fU4wQQ=noEq7Y+ zGxI^~MAuOCw{cIwj^y6od)lvsaZ84x)`jBd&byqYz?J^4SA6q6AKJp(d7|WJ>IcmI zFYG|2oearUn*#ScXMhQ_+Uxu;F zW4 zB>*a-$uY@ZnHG}abOtx?VOF7l|%(bIF6|SG(cy zBh=k3?kl~KY;BJ^07KF^?zop^Iy`d6WT5&67m&UX0Xos2qB(!^Z}LFxYr^-9fs?Uc zo}SrfaN$LCJ8VE536AlFFbDn6aTKh;2P0_-e-jDW|qEjmSM z`Q?}OsiA|{-PB?-HX8|Ys(^Hg+(${17ld*3i(Kgs`+c(ifB)wPtHa!q8h+elNpqR^_-Lvk_@BxxnR`OvEEb5uBH_<>12^8EV`zul(X?p&ShX6OzTkddXvlhfZ!u2ESt-J0bu1R!o?8s$8BrqQEuxt>^WvAT6U|0Bn` z-?Rf1qXgxA1ub#V)Grx$gwmS9%>$am8(TfFVEhkG`iA(WXS5Q%3sFw5jUnMsV9;%@ zcY1i&vHhB&C(~oI8)Kk})E`Y$#nb~+b;&s0$TR834<5hU8OKp+3dRsT$^av_eH(G_!G#W_z4RD`I$Klw z8)qLgo+A+9CzV;jvtnN(+ELx|r%JkO5#JL{bael&wdVZ<2Cl@oPo3%DeoYFd23(;@zYO#x`NQn=4esR0$xvk2IBJgC>QT**Uzl@QEYcc|Ctga^#gNaiA*J!$>y?qYnBxcCY#2; z9?)tnAr*fN-8L0QKX+QIL5{TN2iq%oFMTxas+a1>4~^H)|C1Wz{6dTh8NmncIH~;D zDM|U9-j&nr1>!ZwTq@SN;a(b7djUAhcYOS#zi~hy>8>9&*$)3}G$i>sWRHV=_!B`? zf?L47UI328t(&rY6u1T8MI$!jO$*4~2P)Q3#}PV1)~M^x-)8anR_OIe@*^cjUCQyg zYa*lm(7osbM_)R}^Sq03TcIH^(`gkpx1=pYd4#|X15p$DuLI2pJ;AR{4K(g-?~w98JtJvPuHg_jX|-nK zS52+m<4yHscoM|_=gokHr1e2R*gsENLm4qZE^*kZE;qOWTu418&P$&MSiK#O!cS-) z!t1uNQ^a8|e7)sSE80n^J_LyQB?hC?|oAhv%c>L&uVjdosU%1B6J z5Y)51@3Vvl=zr#IU(MaEI^|rjNJhD8Mguia$stK68@L4)Qj`b1yXos|OJ1_8rTWTD zH^_V4AJ(I=Sm!~Y|`--W_b$xT8@+_(jL2=4b{Dc=Iv6C zmkI*+R2s|Wj#fU*!sdt`sQ7B9;RI4#UOxJ;#*MAG6~Ao9VbnMqQ?2@buh@mC0n2Thh?g+DDMiP5^|r=Dzjv z~(UNZoZnMbqhZqB3dhwQUTM0mZ0*{sM+DY(p%vGx3}rxnD~10FUGrbL)3xhWbFL4I@4Rs zht^c_Hu4WR%CG{O9{)%>{YYG`8Y*81!LhQ5T~~z&+PX|NLc^Gh8nE)160xmJcH@N= zkWStEbhRt{GL;nz`WHCyIb8oUId|hvz=m$XY8{lQ(d?u6s`;KSQHZcVJn^%bUSP4( z<+qp2$m?b!a4jEt$c`gxX+_qUOT0`3Xm!d~9Hb}aP!UB*h{k{j{w%*EFY~H)U3 zwM>SskZ#l>0h@)Xh>nWWrx-uozH(80vztptm4fTH-4yhFmgaitng-+6`7(da7yMa< zF9uKgsWPo>X6uZ3m$~N!^G)4nkDS?&n(S`1FNBJoz~fT4@M~-+5dVB*VM+5`&fTrW zXIvHTOT&q$XDn6o#&g(OcH10O}B>dt?d0Yf0SKWJ9+LrLgDe&4u z1rg9(JgNQk>!%eSNR8QR3}B`JU`#(feT$WhxCvfdb?w^9-^@JxdSp5wMwv;u-i65D z!9J$<=k1Ei!2@#JSsRiT0~~Jo^f;)~jmZZIXU?j~N~{CVk_00t2TNE^;$BmsF^gHf z!P!kULyhNF51CH;QIP~ijgQq`qwo;M%&H$3U0v1{Lr5PdsDnc}Ny;B#wD9ghhB zGYpZ7_d2#60s_x&f917Z+|GD+?g5919nA-5c}gcB6@19*Zv38OcRDMb3q{gbB1Ry~#fcoe?LMQHSm4!Uv# zfy#xbM*!1>mF1shbOZHphvj|oeFeUdlyp*@ z(st@6t-Z$kdFc99m_O-RH_AT2>C*3FO|wV+T!3x~1@Ud{30NzEcg@7yyJP;^CcR;A z7OECQ#Wf+5qjKd|xt8Ji`v5^wN8w{NyVX7k(5#y~LD zM+l@JVGY87Es-|{!$76$YY}r%`#pBJpKeVfH^L%f8@a7l0{GG|N!IqZdv2>8%rv#m$DG2;0BZJ(^wZzWTCfJY?F>(0&mAgiK0lePj+`b)$26;F6ZbQ zJnxqpbT(6EG3O5dV|eR00|i3P_0O$~=kk7l9+z@3I|Uc*ap2!QR5-XxhNg!yy@gM-@5_kW%LH(McR$0S}A@3;WF z`brGjl`A(Vz#qz6i_+%6{VRG;=@j5TRh&FuhkfR4=h8T7>mM%ZyMJo*w&t+=wV(B1 zK`GR7859|G&jcnzAL6K{AWbe5*jlgZv83(NHbo|dCIJ~}BsS>)Yk9D@=s0GJoT+8d zXhAYzSSv2BQnqHckSXO}2kexF6ZLB#V4JM3=g`o%P%adg#Ox;~ zYhdR-gflokdQ=I)Yf2KSJ}>iMXw1rVQ;Kvb=#Mvtpp{X$e{v73Imqo#=hc*XU?;bc z{zq(dQnmYzF3s!5${sKP^!!~SW1iFXn~5xSr!dzbQed!KsNxz*Wsk7XdJKDEHwRPr z(&K*#GPq?&bFvE;6o360e_UP&%F~AD)}Q(9r9gVEus=6EZC|edZqH9bn^gUTr8%pT zqq3OVPgn-C&(DT~VbouZ#ujM@FmqLw+*$Z8^u*(xO|$b|J&1Q0KA!!}FRXiWjD)Nb z;D!F@tgH@9ZnK848foUU;0lmUg=rRV<8xdGL=tjBMcKsqq8ktQ;kLh#`XAZvo_hNA zV^{6!r4#qs41R2sM(ZHOT*r}-8Z27`lh`|MwX5;&`hq6idO|NF2cJVqXRU7xE57Ai zWPQJn-B(IdzNX2g{7owSTS^F=8F%5mzn;J3+>D>$BvftK)f?`^Tl|a6e91tPZ`WlZ zF?GM8B~*aIcT3}@a-_RJ)2-dDB30=e2@+xgYe$-LX-Qlxn#=Xx(JW{kR&Xf=U5O0C z2?bQXj1fTTZqg!tEo{pr-oq6m_@e$&)hLK@2Zv|71>Ox@QGq=3LGD4{fMBzXfsQj% zJyS*lP&ZxV>{@$B-5LKkw;&JxZ~C1T7w?-MB355%pm_$JgYH5-I{Jw|{J)ekU}t6{ zp1=9ba%Tk#1Z$=Qu5SA-oD*TbynB=8bK5sUo~7#)>_hO7n?3FZm}w4`?`?A)Ubcjc zi9X6;ZNDPvEuE#}-sWIxk|VT2QVL=CZls9hR(9&UtxWrf+qo*hF)+v^kyURz%Y)XA zh8k(1r?txC`pSdf-2L#K6#l)F0&P-QCwHD~VY7+P#qGF2Ma zVzVF;BX!d5w!^gy#S>Jt8p(ZT&8mUJ3oIvPWvs#x4bK~_wn+zEmu^n>Rsp8Pz>d-? zL(ls=1Gk4X|0JtI-`K29gjUZlCmFx_hk{gLFm#ySctJJJ)vNQ`7`VXQNSRi3ymK)5 zMdE~GUoFP*{DWi#kP;G{)vns)ziaOS2H-#Zrj>m|mWLA4UwR}e%*?XA1}iI;JEe0PzMPqMwsP=V2DKRJd!+|^KoeQ7 zj$dg7YI+wC+Fl+1;tR7*C-&WwYWSz?4Wd+2V*WA)M_ONL*u&hip`WT!)8fxH#7l<& z8V=x7p0mzcIuBbVwLz7+I{GOe@QHd*KgawgG&%&ybwg4fSP>fw>ee|2kw9v-Ml8Nljri^Ma3WR zvE z90w^Z-WLCxpZU71bQu`GqZxuXok0Av(wlQ_cDo=+KVdfD75mcCGFEHaXqiLGnmhgDdHa#&z7{ zg3_J7xq~Giprw?9P`&AaS3yj6zrQO&PW3vKCv_R=*tH^HHA|&O2Ck-6ZunGI@r|HO zGwtZSX-^r$-r0|7B%8;5>{74NTd*&;%VN*lF1yx5ZLiG5mBCY+uCrt7o^`pz=ueBR z!S??X6Ln!KKfg1q!EA6!j@W%P+yv&Z9IANHO#e5KM4wUJ0?A8|?iCG(muv(x|3L!6 zt7SlvICx~~lj~iH--0O)Z`aJ!dGIHr-jP)bU^dnfe%WWYl z@=qZ&CNqZVT%#*`Bw2Ks>eOD>%I-68I|5pWa^r^z#Dt5Dk=u$ob@_ zPxFiMSPu$yN8L=*lIEmz{naM*OU#uy@W28{ehdUp=H2p?UxWER0=l*Bi16n?cCadR zmk(+D`Y)hsfEb6y3zdG8JfU_YR#?EJtKW(Flh=B@=?%9b8^ZNEp6s)lmI5qIJKx>Y zqn?QT-?4`KfA1W2Pjbwnzfx?dB2!Qu73Bx^3MVR=BUsNFb5Fru`5G;jo=;y%fV~56 z4T#Q0{tD54+Haw>$7ELfSMkcovNcBNdAh>yzM|7_DQ%Rkk-CQEL?T1K2g$SPtE4I5aA{PYTblRErDj5| zYoC=4;%@IB%0!j5$zOo&$br5O!u&3IB8h$%zF)=x!Ag5Uq)3_OFPa6hZ!X6l0;>bi znuJkGU%O_n&XW{|J0dh!V@z8q=`9mUNuT#dB6>YaNIh<8z6kxTTf$fZAKa*evVaF()lU}Y=DJFwY0bWUa{my5w9snp=g z-3LByjP`!dwqE?vB_gIhV^t0Q2`X)WDUp`3_eMW1XgtvAgx_y`M4Qmdn|4-`qI<1r*kL2h^pYE+w$1^Rt@b1><-z3uF#K!jSHM3JJh9IjF6opUWa6TG zggtfdJ<~o`u=LlNgMgb5dtZ)kWdIp;H5|i~7GMHND5SrEhA#rVB;*R4^$#QN-` z4a5ua#_z8=UEYiT`nm>5L_mu&QWb;EUoqbX6b5TAiWT6b|CQvcr+Cwqq2wLtyM5V1 zV|vT&bsFL<*l+uOAr7OT*Ll~0OMM=E%^-I>f28Ju-QV@+u#pi-pDYi(n&8AuiyW=< zFqKCXW`_~Bbwq_0FJBeA!Jd=Ruf5klFHOjEXISE-moZFBnrUwW@=b=_3MtIjhS?vA z4wGRzrYE7`UyHJ5P2>C9urfb%sjikI!XDDr*ZW~Dp?VKDkH6ZwQJ^jv8#^q9_OM*S z6T~ljh4++EY7G=^z!C~pb_!c=F>0{m8@CClq5}?S;fgMSC1!OUG3)8VW%TVI$H4Bi z$nhkIj*G9LE4>YT4fn)Z@aNz1hFtbiu6*q$$4vq#dmQWQyO*h1{g8yE^|xIPvB@&% zC!!cacl)B$zg=?e!__KPoo`mCBT|n#pFA2t9FfqQ$8ttDsmJy-UY55>!CFVDt#gEz zB~=%r*&iU(SH!s+UokU$eWK5b!R7AYNC zvM|etp37AdQaq{szhq$hmx#-+X6{@2?#pny&ph`2elj5r(2h*fwk*WA*Z)w!Nw#4m z;js^1)2VF zI3l8U+V&$SNY&>i>^r8L$3c_Vq>6sl+wh-Pzjr+S4tWs|bGw4vcTg2HB69A-A1)$7 z^(UrE9Fxr#;;@enGo?e-#u4{4C!iDO7t5CyVv)7PsyO{h>MprH4 zYbkzH2<3eg5zLi+{W0LD2J;qAq$VXFJUp_R=+oustKGwYWZwDfj;MX0<7(m ztSb)+n0abwdJ%AsJIc4JZv!3l1O#E~OSqZRjxBpn^m|Ni=H%D3o;QHzMX z(mToPu%pSrySL9@eQ*F@mK=IwjA;+?eUP2H1aCxnF4lTGcKxL#o{ip)RR4u5H3y`B zz5F!L@XD+vxa!(5ElM#YdIi^j29u+Gk8kRJCL?ohHSQncWNCGBaYm=X=2t9qdt-)+ z{cn^L=QwciHdvwO+l`t+Y(~K|($r$!Vb?=nn}zTv9bgelqvb;R7Bvvlr&^GOugs(dj@%upXS1~@)an~iD>2w0{`7$Okev%5eKW= z-{dZhe;6%uJ@xz(FuW~t${YTqA+-I${-NLMi1MiCr1Q-==8JH>r#ZeLhYaLf=SL3L zMU=8`0QN+_dM6*JzQMFvFo~!Y3;GN}TyL#{z#yuC7h&6|Dk(EJ^ZV0}^q?6&x;~eH zT|th-FuYklkd?eI27A^ZRKGkILGPN-@9#@(9u-=L|64P;zbK%8d!04G)KoWi3e%Au zWFJcFWiE5z>4w|XO#I}CV2jJkK1a>C%k;zwG9jkMLY)kO7B#T`+KH$ZteLn7IJDe6 zU6zJTrL>Y9Lw|$nV>{3tsyg`(Ecipt^+TUZx@%@-_ywme(?fEqOxC>6y^_$*VW8M* zg&uB6Go}6C6F|&}mi28o;ih2ZT!P|5nGihI?^!P|8 z6hO@^>g=1o3au(GLYGobY!1*r=ZHon{;oC;Cmbd;ulaqSyBkYFs+N41jeD$CJjzmN zC^V|*L&w5M#(qD7_1~XRWpq11i%5StDMxZ;qSRu&<1Fc`Qb`#so+n`+S^QRxU_IlX zFdFHV=j)0rcTYo(7Lku}aN_IVCq=`X#tOU&DIZvZ9y5~KSNH7$2YLP^A&??aA($@; zH3YUv&QLs$*+pWL@v*8U@$CAv5Y@&=SC1JtA2P5xXGzCWO{)7C+(LtWd7mx@8XVDd zj@#@sZ$X9pj;p#*V%?RWr~kcEP$AtXB?s`WX^;FuHhAIY;;M{W|KEvGg>Lm_lNa2qgz3<$$wrxiVF|t5+#& zFt`*wzj-&XE_G11O9RE;C06v2j9M-ZBcdt<@vCG^At=xVoV?kySexFT4qd0_e+5EB zu3Qg!ed?Nw>TZGW0_$w8$Mtc~7cWwME+dr&ZOoDb&h#}?iLa}|n?h+d_1?L`Fa zFXV(%mka<1TQ`EVzp1@hNgIZVoEPwCbW_Pwi{u9~m7z)eV6{gU(TAUqzmyl4xR7)l z?Y4!soWfMWwr?^geLeV+&IO%0%*Zb@f9v{+{!eC6h^Yb{m|(2GqiXfzH(~e_tnT~{ z&H(JH2Fs!ava0F~?-}sX3W9T9ntiWpJtt4exCcbuNOXs_yPoJL2^!O z{|SBDnmYN}2c&3-(ZgNNjOWZMPyk<}%;G(Ls)7Dr;3Dg`zWT^;0>dgA{)~e10Hv%T z0axbusAlL%74m~r^%V=a{Nu?czvSY8tu+!Y=MjA&JhJJ1b5IWrV%7zX11dL=}CIVC4*{tnCVEnBzIVSD=BsVn{IR;aR5J`hmr! zk-!iceHWT1BYL;=3(=blXCGkLr(lsCK)VU)E4{jxlYQcJJ>I5kPfEn^w3COxgc=4I2YObE46oe`U3_qQgLb)yH^037T*k-S{RSV^uB7Iw z=2Ts&zMqi~!k9@Fs^eu!S0C-c%SY^w;T1q!_?_5-dgk7z%FP z&Aq*m@c}dzWayP)rS;w0prTY8?J)X%ak=N^%boVat(n%|k3V{bS%-d#Z4u7~1?7<2 z$~?J5R3eW6BV!G}+5c)CuHVR;Mk%X*ywmP$3^Pmcov%XBvH*Cn^gj1KDI;E?TT_6LU}2@qxxcIIAp{IB@L%By?(2d zZc1l)l-g@$4F7enfwBcVUCFtKy@Ni3S|%Rc;yvS(yN~>5o+2x*sTb7Q6z&;LIRBkaiU`ppb6HmTd^;A8!EOgQ|h{^6tSG;rBH@s<~8Xzw=X+Yi1@ z^U+PS?R6fQsXNh%{@c83Zw$N_#s4Q7#0RC+E2bS@Rd+ypYodBiuA4f#G=MFhXJv1Q zbMb4s4rqy)f6-DL{3w$ubdUv@y%|=PUo4d!@J-3p4nNc5Si7A3L)39}MiiF7EKfI) zkXcF-FS(4&95jXW&juUpy86QRuWH+O-bh$o9KPerJ8D)!#qZH60AV76uu#HqqbtdQ z(CCMLyfY8;3g;$;R&^wv=UD5w=2(3iYG)62wKbBA`bSy?q^YWXADo*;7KRtAedw55 z2xU**bfDGp0cpC^FQs#99cp$|R+gYN|GJ|&ATT_)7ndhyXrr~a>89i} zBr&=d&;C7W0FS0m$?WjerP!(p*kxKkYfBj3VUzELaM^^Rg!ynlB{)0J*_uWr_)P(7 zi;zk`oZK@g>sVC6KA;%p)6*v+kld|zC)4_B7#s$Q;gB3rX3+2Nou$BrTs|}3)lht1 z;CD!9i&aZDV5W|USpFdB-P4-V@Xu8IqupTI*3sKIFiGRAY2ynf^YmIUA~bC=CC z#BYVhun0)`Iu?w7^;FwT2>=aVLI_zX00}~+Y0^@^WUy%m=%HwgBvobj*(lB8KZxp6 zn%IqfDWP7`6KJY>^2_AZ5Y&7SD`5=`qY+wMm!jlrz(t?KX9*h z&+Ue}4ooTNF^TxwT~ZpRA8;!ZDqOX?Bka59>YCjr0z(P35?|L%{*`7~Q}$RQ$b18<;k` zI+N3kBl)eL`DKa;*q5W9a4*dK(x~ zdmaibmDi($=Ug6D(COX$+$ms7g`sC|kOhsj?*BtfS#oMQSh^{F3!Dh#;Db6)Q(U#L zjdD1{;mY^kbb`Y}!0%F7I@-Z99VDWw{tl9>hn;UViETl@q2W7JCs}e%_x&3`3hp`= zpQIkc5z>aKmM=G_Ckr9DuU}7$?(0VbDMde_Q0DPRlkXS4VQlO&s+L-H!z7_~HY$Op z;*&AlzpIt`c_<#*e#&Rvyszs=T%+cE900d|>GK0twczToiXQ)OQH{;{3`;SJ&H>y? z2EtSH%fWxbf$>T)Ms0~H79dpfQICt_yYz8VWY+zRKv;1>QM%r0atPD-mTn+te5d1Tw!{?7Ns*BD_%ba`bsd%Dj)~9jeCyTUj`}{yl-Sgcp|Y?)S4tLo3{A_MbwP z*5uyUS7-VnIvCgpDysMA59>@2eCw5wgz42a1v-@Kx#~5?DjllEnn@?Ct zYy@M*&T`M+=>Z}_dEba^13zAoC_nQVG=sI3c8Re8Upmv?lMKIbcXrs~&{J!U*J01? zN#dC2t+qb(yhN zrG4HFqNK?J3-_^a=5p8{Lx#T~t1UngMkki_UURMOJ3;DDlX{pl@gCrh1?<1IgvCZZ z#G#)#zIfD!gYHvZHz}z@={LIPX&Rx5HUVQ=Ly4Cly2B?tl8z`Pn#zzo9^Z27PL{Rb z@)9bAUI(83EozKet(WRE`2#sOQ#d^@B=Fj4`8@*R0f>{LkBu{f>Zv7_=z*>a{Vo4h z+H01O7qVJ;Tm?D|D&dhvF`@sF; zC}?eGkB;>jYBHXf|98>rsm@*w)>5@D^B%)K%^tfY^;X6@O#4c%O5Iht$IuOu$Px5H z((E-fN?_fy5JAv7Fj~)BE9~2iYoTh--8wmCh^-4ImB+R$_Fodb9>tI9~rqq4`v^qrp;iULrxLXhm`Mkz7<+ul6VsM>GZ`AhwPH(|v6&nm(b zT;e~$R!(lfs6SLxs}@73J`m=HrXPDtrTl`%S~O4GZg@ajN+gUOW)PBY1=5LqBSj^k zsUIzW(CCaI`EeJ#FZE3+#_v8ORYK`Cng{PnE;4a!@U2+6@{TZ><;A=VT!1K$s4V?9 zbSFT1YLeC3J5kdA^_kZ{CEXoZk3kJSsHtuD3)cA@q@@YwG-M@OH)nmkvjiwpk+!sv zwG)8cJ;D}5l#_EO7P)KkeYK>3(#cw{xJ7w5A+xrA{be8m=h}wXG6F#-cXy&OYEpPE zL`sgoMvbUHTDhv!i-xoHv3|Oz$6pF4?WC8Yi!d7_V=eb+qRE59QSh)DftGSnD4|C` z8e^V(@)>!s3rY&wjX&n6+r7}=kMAR)I2PILB=*r>UFEVt8{LC>OA*sN3FmJHB2~v5 zgd0IoN2n*_;*2CnUrEE|3d+i$ORlOe@EZYVwB^#QQmK1Jw}v633aMvg922yVraXf) zQT2V;;14onbcxCZ(qv_2_BJ>v=I{K=UM8!0fl;|0|0#8qIfY{OEmMBi{Jrz_##vZN z;5)wDarWvfd>Upfrwy`M7~%)b$%7@=nAx5S>Z_cZ8ret__h0UVP)D`>B|D_z|G-N& z!pm)!nT6ZiVWf&@r+qG-Jz7*33Oho*CRCEn{-Go0rygkwNX$OJrbbUTeU$%hxeX7y zD+Y?%3z;#cRTEIvzOhoxvWQW5#A|n4M%Y5%+zxGHvnt8MYGVb~O{pif?%TbtYz9ablDTI0% z>!ueeWBnWA9`~f_G=$V5t2vjr51qoE;8Ewcw_NaEsT-Yb(5W-$1x*}2!znOUC6GSIt_F5bk9hdIW8ZMboAJW@OdkN!&utu6~r(OE?@)7FVZni`ty}8$xzyn-8g_JHzR21j12joJDv0Z{t}Voi%-&L^X(4G^KI+KFBVYvx zAH_S|ChWnlO87K?v|0K~U%v=6K+kgNZvK{#&a&bbC5NBht`Bz?diY(2G{(I9`EB4| zzG$i&z&UrJvwRA6+guLP`RhuTvHSiW1AdOjxUBQ3UIW7ZL^JwDUoGMHSG#Q78Cqa| z+U}=Q0V(``82mh$@|E__*Q<=2pl3ms?&_F$AIFRFb2N`1rN|mxZ^W$h z)QdCC1BhTMFzUCumHF$@#G$!!s08=d{-7Ib*6#w|hYxVR6W5#csH&0*xpSZV_R&@G zXYvDIpA#?>_$zhgJJn2)oy5(<_3En&JjNWL{kkY=I?O;gorc6X#ec=WI(~DNfjS2G zJ-@Ttc+U5t(Vf$*?;b*r$gcO=K6Dxj(qY8){X!RYZq!bjUL^d#jYOS<^E^OPFb06+2x;}DPM;X3#Df3lcGo>nyCKy;x)bxmb&`@HId zh`)CU&ZYFt5m_+qL;$-4^P^ zTchR)Jv*Z)YNK0g|Jt20zzakGU@oC30(#Pl;ZXe=K1J>7z)<>qbeRM5RUw_;J-=*3 z7J1;#45gt|71Rnk{JYgGIL3OXr?Dl1-j4&~3Rtbr0(Uk2>8&k``zIK>;^>2a7sB!$ zHc>FyR;NahB5NExa3kJuy6coOBGoQj;0hjjZN_)XnLx!*xd`utm-v^cumJtt7Nu2- z-#j(p%oS^jqu_~*tEEP?$E&A4Tn#(>c|-Ho_|v#Q*L!aKTu6}@KCWx?&cx~Oc9x8S zv5yn1LLQ$Tcg3Ms2$jetbK$1L!P)z{{CZa8@bz5WywWd4LBTbO;L{21x{7gR#zYKs zA6zn;@+^v@+8{t16;z^tx(uQX6yyiOB%u04j|w(d$8%)Ud6LgBf<~z?IHeDUb7o!7 zN4zVH+#lb@;y=C(rd2fFaz68&cAP2BAL8KNi5pT<9r5eoWPTNvQu8pGhG+^pVQmVe z)Bg4v>b?!ZBR<3DKEoAf^4SOneW&emNI7gJMHOH{AONx6RXhh(rqC^K25cy84q><% z0`Hj%?>Ss}=L`)F?GCp?$pUK{A6leX!PQt}%z2_x?&`s--MJmkp5xhJx%RUr%a_bMbI*a2pP^kYo&St>m1%V3=lh-p&Hn)cIAv=l zrF?5}IQhrFmLI%lXacPA}upJpe;mx6#zk zKMh(BL5W}O`xv*Y@F>6UDg1PbXJa7_f9eYd-lv6g3Dt!v#O+b&dP#Jw3wp~$wcK|v z6(d|r-`+i$^0HPGe6Blk@EUUt?8JA!x};s_@3anZLBchGC;g7Pf|Z%kzocWKvz16f zCmoLbIJu~|K^jhwyfAm~>4M)t7uGi!dk~hm@)cM?i^qQjYw2^xxvTZA&jl*+rp1_S zBOYj!Cem`P%eMTC)zJ+jJ?$8G$u#0Q~CQ{|mSIF(laGtiBkD$X5 zqS>$f4{bWly?d0<;v#{Qu$IPjA7DSMJm!T_|4-!TJM$w z0=nJaJqyz|kRHZ}MM)>e`k|SB-4~{H=Qm$P_|a0IEF*MjIxQF#)5iPmo)4Ur9}QM- zL5;FY+gCg_NB(iZGF3k;YNFde$hJk8eK`CxX=~W1d0CMKzo&8qn+6@5N}L%-H5xjy zaK>LiV^pr_4KRE<=y&p7p#{K60y9pX{5^Sw@4xq%3o37XPF+k0Pm!G4`{XpP^zk^? z4*$XTtk;u!W^c>lW6}N>8a{BrIG&LsA!dHpxV;*yZ?`95fI|`+$?0?0OWAYo%^sy_ zx>haiVbt7e7gCzhFQ$ZAN{!pD+u=;%e8r?fx`5+HS zPJ?_9-|_mNF|3}0Z76Ry{)2d-Cnc?K%Sy8u1MWY3qzgp;z?J44NQyvVR@U z0(}cIQywjZp`;U!W<#WoLyVXQ{Lek?o5p&KC{(P0h`O$a;_yb0ca=U#4JJpmuyJ8lwy0qTa=f9e??Av(nvp+Sck( zGq9}rFUCelO54DN#tJ$n`>oDhYYzzCHU-s%;*)4XzS_ZiSN=ZhB&M!&PL)Eu{SZ}LPqIC&6FoSkqlYsWA4Lbi&UY%m;YPy&$xzMG#l0iAXKggo|B5Qe$hhKX8^*_j=-%j_O9mG-3 zBWd4omZ}O+?JfQ?=@!({`1|{xb(URUB;NSPa^HJh9fx~^5axydiFf=*8%6|G>%uH; z_^Ng1Z^ppSPeec~|Ly!7dMVt!`zu+RWD5ozh%7cUV+tEd}=P)_SvHp8#JlwAP2;Bk9m({i8iIWo)Fc1E3(PAOqL~zb%pb z&|GDcp?%HLV?(~8La5{_W(kKf3O1uE@jx}Ti(+IYPxH6oQcT^j$K>@r3`;R@(uR&} zp0U)2??}`ET-FBXJ+B{3e|a;-5-`%o{N#nS&@_<->o_a=6<1>i(H%T15&Z{JIiI|W zs6K*~(lU^}y@EP}ad$@kyHCMmx-7#~1&;8hwYbB4^L7{zhbAV$ov3kt4kKtVb(i23 zSG#Z2GwHI2@c(88Kq$VNx}~(T7qs>WcWUnY&E#STk8Ar4GU7!TjooTxvj?86O33H% zLQca$`2*W6q3rggO`L1T!jF43&L0L;S1ja#7f>pFFvB+J{O(?bB)GW=UB288*HnLn zx&Q@asWTEuc$kD;^=)3fMs~R*e}+OZIPx)<&Gjp=0mmpeZNvOd`p~#sj2DAP<@{5>3%1!qUsB0Yr` zrv1zWHfRdR+wqBS_NU^bVdc{sI8E?UEpX4bWnMrBl^>d>DI=jvGvSfen6yQskvaWq-LZ9ktnbD_p&Xcm4f(t^b{Kn31)X|OW zouh7(aU$Tu%M*jPB>lH^hFW5OOPG2N{T&H$PW?zr5KNRNM+~H^m|Dy=y{Y>XG`Urk zJ3IN2G9?SjNJe%e0z9jF2PP*kbpXD2ktS&Eb7^!R;sy>Nk{nnE9#cCLg=*nh3AOti z>u>$Q^|=JhQNXUJd~Oi6JJ)OJT6($HJj;gv;FOWr9?u`{T@unOW`Kk+b{rtJ7Y}GOq`1YAk`|>W3{mfzbLGkF*&KDATfIu-P1T*(2`*XN1w{koTyCQz&5ps~}RY-MA z|D7e+KgXJgV`l*QMX3IiYjQ2W8^3vn8>4U9Eifqxs$^-pS5YEokkON#JlxM{+Gtu! zZ}WI1|96-yO`~b;ng_p{KRot#-|=ETkQBi}b?beTC!nV$;(+`z{J;X8c$Dk$-JYrT z6jkN^N3Gwh9rWfLd_QEULzwJFk4h#Di@H4qjwF&Q44O&!Yi2Y zsYy->ie)`pvKw}f)_xIzx^eBJUcNRdgCYFC8$^tMKX6QQB!opRWOvQ&wnLXU5F@^JGR~uh@uyIzH;Na3^Nx(oYDU-M2y?I zkuVKgk4*t#KLbiBc**0mlk~b6IBKsyTv;;a$EWSr)@j$l^({zVc&(O!{orMZ0l9c# z^Kh%H1NAejJsHD>5yBi@?x;9Pw?Sjr|J6VMnsFR^K~DAN6La-d62@IC^`VAV?DVpp z`TER>qX%gXoj!mu9_G{22*2#i2y+u!J%h-sYryk>i|#$lH;aBFhF>CWiIuZI>1o)f zG(&RPOb-s5zLmITeXN%@T2t8ru9CExx%{I248SLI$JigvluM#<@i5?6i_mO=`S4_H z^2-}ber8JIy3|#5j0~a&+9ZmIK6(fuRd=AXysA*as3AFr4@#+p341K~S4GXllXTK= zvtL0kDwFh>C~UuCBsiECz|$xnEC84tHTE~ptRB2|F5T?+7^D@S6@=LJZKo%gSp`2S zJZ*-IM5TjC+C0KeZ24cxV?5G!k{O5X7dn!GfVnhxukPHtJ+}m1bpJ>oF;~VC+S{?e zQ9lVtxOZ6KQQQ3G0W9s1x5BnF)vG}kycQZB4i7p-^HFCvuTG$AVFLA99Psm`fuj?> zN6WoB^2$V@^4;sE5q@ZLFQ9lEz;jlQ>`~fMS44c4s59yJnZvpvbDX|7wlRYK#+kmi zUn6FPFa4I*nw;egQx05dWzuwX`4O=`K75f zyv?iU}m|bmQezT!#?tUBI$RH5h~qZghnYV9AGSIACAi@!bl9miQ`J&YWhGf zXYYcm-+7*^gn#<-$6xdY*=;oazN zlrS6CD-{G(aFG`oL27>BuWffJZDO;T%iviQci{agoBEc z?#SD(98?#9)>frHURJvLZ9dsw1UhCE?=ZT{+53Y`T4EYahCu)Uu0KPc_qT%N>Thg8 z2{Rb4TOx1^w~(5tE3X|pNl_+7eo)lk6bwjs@@N(5Knp;oOGLqsr-r5%)*E-~6scQk zr{@K6_;5476is)L4RP~(U!Wpn@YAE<oZ(aOA# zv-+{og(_&?lDsT~8WuM$rSkK{l2Z;oODm47K*dBO^0Re29?Q?@jbSg_#M_$tQ;6>D z&r7a%&!&usTdG~6k(uN^Iv63M;ZY-X!ry6X$D2vKrO$P%R-5;%uLZb(+%>OA`hoAi zX{2OK93Yx%xqvu90hTemd7A{|PGASp z?f|^@WJ%JyZ&PQKJH8)+oQ|dlaHLH4UT2jiI}XK!M$>8z=5lwO6E(iQfBq08dyCee zKJ_?aW2&ZI&;Vpri%WJylTNsYuN*_~8YIDq#6Cl{w0z$ejA9a!(eMF#9xYP06_C6Q z=u#6X@FpkztS@_Qcwbs#7dG-}xE)?ccS?pPOjm8^J^!9In23dPXhqt=d=QT$RK_{G z3P)2oCp@Tq!`j1LsBavHr))3TgK3V=B`WPvaG#RfCL$|Pg(Ldz-G|fwfs_R7YcQ9< zfAWS#G+m1kOq})JFg)0qSt#s+=Po0t+lF?V)<<2*IydRx{xspz3`&5xrzX3L9jdex z;oka1;|38*8qqM+LM?-IxIDhHY|a zZJJuy;S~ZcCqlALu)a;#>9)+?`4x`ya&B#V(qt#IUmL^bDk87Q5^TbH)AskcGQU<| zXjta$aBJckDb?-YJn6^%)zu;3=wo=V=$%Mc`F=e6`_R9gM9H`L1ZD_Pl_iSWYix8O z@ve<3s&AGs_3h^fz{eE_ z|NTPB&e1&S!WzyHg2C`;hiCbcv<^B?KPzV6s>1oeWQYA)E5!n(qdjQG*l~zDP{&(l&)$?2R|L-O2GKF>iV_o z@0gONP@q5>nKpL%+|-F|h&_V@Ds=$16zt}zJ_?z?&N?Tam^V|qUQomxZBF?JvT{oJ z!}!eJ==~EjFzev2bOTo@I$H7NVb5OT*X9~9FZ-1C-@R^x*BWpdxc@92h)KqHzKF6s z7)Cu~qfwr4_SA$!KjwmIsEnlKv~Jymy6&3(Bu=lN#4sGB+5M&);YQOieDgnaT+Eva zdr2$mg)H2tKFz2LMavY!c7y68G?tWOPW3?#^tFWse;x~4X?0qVjH=MDd#|j%4CAjC zrXIvXw?9L~ao~jw=7P&AtLTzN@-F7VGW5I)BG&}1=E5kY^%H14brbK>t(!&gd6Z4U zW*5Q@k0sRxIPh8{uz7^)Hzn#Pz!y!`LX6NB7f=;1$OQ?P(YCXc1GK^YnmhZfcZIot z3+ig3V=N732GH1e`x`& zOA#XR7&mjx=0I_vhe@6E8>YE54{AlN| zC3hnp4B_Bx2dDztNGzb={Y|oN%j!hxYZ;qjht$=}H$x-*a!h~R;*jj$NtBKs z0{QE^3AAd)C=L-XJKG|M&6g$IGo)7S8yTy*!dtkS-IpJfwk_!5f}U(87ov=smk#<< zaH}4fu>G=M)!rN}qAbAst&{diSN)FiFTKYEr;gLV|NNI9Xd}i?&XKwQ{8tYZQN>mD zgH|7G@Xbc-yxd3dzc@`se4?%UbM|}8pI`auh>`xLB}C)f?uGqE+~sS zxNauT2l#sA%Y(BeufNKtJ8;bo3#tlTtw_NG;`$dvgw`~}J|HtW8oTj*v$@$hW*8U6*&f!W{T}wzs zq~g~_lcA`A1@{=f>%3vYXUylq=5LqGk>)mFU2xl<$h&%3OOAqhYrUwXjYL$?VY@hS zy<0$#KG)0rtg8#t$3J*!eYlEX;zp!^`T zw)ii>IgU`RGVhIl>JU_2pT~88i}g{!PsvAFfL8?kXEL#K4%0{r4%~FC^;0abSWZvO zm5Ty3w)za^zXcS79YQgfFnG#oiALzX^CIqbZ%+E=8%THwiz(DPOT8w^mGaUenIChs zmmpTL9f>Fy3=Zzl`2j;|IZcvW4YY~|T7Re-E|YLf;WUXo$O{QCpq+$VSwJbYWA~3n zKwCibTo*Kb)~*-kU-Yla-};}Q6A{q9_ry3^DLeL>-`a}wV=c~Rovz249q0HFvRCeq zvv0fz0lavD?<2)X^Fma#AX%bb@x`lP(|8D(vZZg6vIL8TUPj8&s5?;=gab|w*@Who z(ftUMHN=1Cl%6tl!&X<;r(AcO!)Qn9@ha+pxsg~>_*BpDyYzLqOAyVd4v!yO`LuIh z_epGLm>=Dk0;)W?d<6A;hdz<=3Egs_++0m>^}2PWla$u!b>JoK42*37h~K`P7DS5a zn`@W$ZSu79gJHBG>1CKK(=w9jv!pl?o=d_;Fz^RA(oXN-riWhBqNXqlbog>+o8C+T z4Ic|{dN~rb*TL4CF^3MlAQ0JsxIEZ$A}ujBZur{y9J0H3+NfSL5L0R})ZPylW;})KDHnzjm8c=MgN5p4-vf zONcleUY;BO8a=$t_Z!hx(UiwsEt-uHcuWT*yD)#KF7YvG-pV_fd*K`#e7eR2n8Wj_ zPj-WNkxik3K%zXuV+AnvG-QbPoSd6xF`s+GEGp0?Z*-0gZh$ ziYC?sT~o0wJe&u`J(kmHm}sy=v+it?@LgKTWk@xq>lq|Btt5J?Xus-q?{2~~I3v{k zi!Oq25BKzTO%52kQ>#cnPeYv(f4j+kR`|FYTD?i&tgh*I`SQi}5e=^>5jX7ZxUAU; zI&k4dl3jx|`S*vV1|Cy$6MwAsD87qq>59g@Swz@TRai7^sYgg1)2(MSM4sllqKZIg zVb3X2xA2x(d{4q>AUlw9UcbDsE0xC4Fxj61-V7I4_>q_5Ic#Sv2kt-TScb*GC#JFc z(qj#cyKc;s2lZdgnmC@KYI%<$Y0}bQJLJIc z9a`*Hs-suG+;pY=aa<&hHT-2F4x7|!Qpc=6AjjgQZ+HV+9d#}JD5efd$p<<>BMZaF z^q>=^hGh0L5I6RY{%opwG*b3%!8*zG>u}ofRgM&H{;ml2!_traGM9tt zZ`89P{B3M%Z#+Y?9JX9fOcyo$u&XP2@>0q=jQwIj^eTS6sP*VU64Wr6voe;b{_H&* zW#XgsU3?M!o9zMr4%fHj{rp=g;}0c4b{!CIRsZM+1t#g%Z}I;{-dc(VB5%la);>&v zB2)Pdzysqbrt2mj5y&mG-9VSQW&ue;%>FHXyH`8y@t8W-`r^^vh>ts;DheIS zJz1AH$}f@MrYiDB<>W&qHxaZ?kpwxbz$a>`*lvkv>IZ{OD3Y7=jUC(7kn(GmpXdfg zJ8&l4UhGtmIe1InLjBz;=kKmxBxK5z0(ct|tl(HiEus2cPlJ_9>kh75aXI^^_+-tT zKS=Sr|03mAt(S|F^pOV8xsxJWnjDQES|m=|rCIn>4bRs43De(R?nO~id)-gw9V^z< zVB<9nCKavqh|e(_FoCYgTSNvDaUa8jM`0kA8T!-alY@sPKQOZk8^!f1Z1~1JBz)%m zo!-5!!E{%g3Zb?Kv=tM-=>YHvLTQ^f;9}t0)Ee|-0=)5U1fNd}=nnB>&lx{4yN+90 z60X%DL)$jaA;D`pB1>?M8u$j zW&N*#cHHE1yh1z>tA6lNU6fsW%gMB(-*z^4z=@9-<&FD5r2pgA zDdH4Y3x;ZpNKWI;N@iF%7MsARO`6Uc5;RIQvws|k;2$-qf(8tBmMfI}2asV8G+^Vj~wPEV|2KPJfl%ZPx_ar}0 zFGbvhAa|`E5n+1ea%b7yKc0>63LLy zLob?-9ve+OO7U74^BPnNKK>V)(Gfnn&Bx0d$E6Pme3KT`e9m69EhOYzv|1PhURoDB zAp9$t)e+o!UATrZ?&iX*Se^O1BJ+>v*w$OkI4mVcI>~~{*=t$~WpB>)kP?4Dk5|Xe zEPZCAp%b8RI=U0OO=Iooph+kl^|G<7ai5&d^d*zh+_)ev&f;k0vzr$vFqTQlhZ}#R`vc?(>#a$&q{E z&ognXy6+0C{62QaKU62_TzxxAAmxjAnAV=mD);OJ!yU@Msx(9pfUFrUj1b0bU+~vw zS_|k$G4wkKH$P;h55FzBc#3z~>?ia(4w~FB^IHWO`eEulN~K@8XP&2vM8iME@Vt0T zD|3{PEVwFbp0{p$RGw&iCF?sXL}W84+Z`{mh-&8*`9zC~hjBuUwCiA$1(I~A2kwke6Y;>(>$X{W2>{qZZz^k@kL;5wHxy^xPqjjN}UqMKoMiMUQ<~W zf7A5u>rB4vmG2nEV?F}|Q|*lV!%^^`u>8@YHxY3E?~Hn@N{rA41>cyU)B`CVmy=7F zqaI|h%dq-2Wbl%|vC1~|--88G_^;d1mrwE2qB*r~}{zEEzz(RO&U7R7IQya#S~VnVbX^ByYwy@+OwbMR?0ShMug z^8KC&I|70O&oP>Rh^b`iMi>(TN^{^QtCFM)$hSo>^>$4fYzm|+GoNhVhbwZ3@XtMk zM(M7%K)u^w_J1rHY%`d%WMDx;u(nY$pQsV@9Ym}OqI%Om*tL=b^#Qf7ccG6sq-GC* zYdJxv<&;i#mH;~s-AP>=h&QzA5{Jk?ha~PVasNtFfXX0vb21eNG}0e`^M#7~z=A-b zjR$S;RPGkRt8@DwQ2d0oQy4+5VQR^Rmmz9V0Un`WY}X&CKw-B|NUJTH)v7%bp+`fu zs#gza-RXFMP=pn(rTaApE}LT4M^^CNXA11QFdM$Fz_n!QF>iD1NmHg}X%44lBEo?7 zWEH7HLp12FVfHwN-0qf#Tvmc&f3bT1#!g#|7SM$Ch4n2dgQ*yCo#5c)U75MFFGOQl z+WvOP&5OC%w(QN+z45yr_cl>sUza9!ujJ<7syaKXpqq45=G9xT1z6s&!pm178J}N) zfukZ9^)ASLlDq_VBu%HZVV9z0b;Bxhn2y3-A-o{;183he(*QkBk%U}x-d?8_Ey8u< zA7)MvFw%*M##Ue6cmJS@HwIfn`%DyKP-W(m!3sRcS&nf@Ndf3l3n4@G@SkJNyvTgH z{iMK6==~Xz^086$fMHP?e2AwX@46GEmnywyE)H)#NLAPvPUHd#SAix9$|yK!AI^xb zf%Bq&xf(FEbpD#XJYr*vZkf{s?WhM^G}?)oq!$(i+0kKCEYPJJ_*{~_ErY) z%>qFs+reC{?5(LrQwSSa8UaSu-Sz% z3icvNw;(Ni_olrr@o2qT23|qZZK$fk0gQd`UJ&VpS+kw~Ou*Qbkul&<>_Q90$cuxH zaj;gBiowdUR5$CwSJnVWK)AnYZ9#s?^8!c@8p_N&V*6-1r-BxKRN{vQn*Igkt!r>h zOd_G>@(ZPYNKDFwmeE&xt?hLrRFYq-v!$}XmZb+Xl%S%#6k-k6$|EQ!cN~l`b^t7z zR<0IIaQ1z7T|g7BSOY(BsM&6ys9v!*FIab=I~uMECNI0@>>y%j8OXt2)N$CI3pd*v zLG5CUyLul)v4n0U16^Hb+{vo}J+a0JO`T~Q;Z%&{`rFKC3?sUDuY0UsH)a!fu4KSO zg&pEOtwUqAI7g()MCD{Ll9dsoLy(+|fGYS!u ze#R|f;wLKik@@^-Rek+7nP%U~Rf5B9^R)l_3)P73vQ}epI4h)8!O+WLsJ_}#&T;LO z5zo`hZ(b;!qe=ZDyk?_WDVJXMt=0YvJxBn0S`$}G0ua&xP47Zapucc~Cm{Nb4{eUN zrRSjuNe$AG3PKIp>!aI9#jN{tegqlF-X3WpH{yrGD)$G&j{%GF;e`H*y;85nI5_QNG9S1em#bydOq#}hFxG+BJk_LHE)&^fy+ zSwB!QA{&*zUJ87DH0C631MscKq>E~8^A+Wp;V?$cl_NL)+{y^;mANsC@upRuEfI-y zHlS%mbWOwSXuI&6Ny$#f2|?cTKc9HT92K9w*zvuC=)+EjA5q}R*nJZGqfW%71wCm)tl9p+y;2o|+}%4a7=x5> zW;^9PS=v~R3F?Xu4HtQ2TDbJC4nMqzR$1u{znRimOCOnC)9=_w>Fd#&kJyDY_W;M7 z%`LznIrs6wELyB!0a~hnO#_*6)Di~w`S#d06N*=oSBcPW$ ze2dL^>I}~H?klv4#Jv-{?#9o9OJD=rZ4T7jo_b4yQXY14P!SGo;FQ3LyHrA-SBU^BHJ3d_~}6|EuxEa_X_C zUa`mZdEvQyd*2Jx+lpuA#>&;sByKCWj%~kJH=up8T5_zCPsloLJ-H5AP@`CrC1BGQ zF6LB+PaoKfh#x6VMUl%ezwVxkzU zPT}H5tu`sI(?Bxxk%q+Wgtpq(h64dM7L&Udcdy161QzuW=d_Jd~s zgC0pNuP_`Txuk}`zK_~RTKuU#!S}3XeDy^U5|x@Ay{v~?@#9cYC7?z_&yZZdR@Pe9 z;IH~o3OIPYPl93(qa|0#-7t=8A9RVo;mNF5t)L=xmKPZ@5NLJE{b((ChTVy$=6Q4a z91&gx*S>rRsYcNg1@21`V}QX#41PZdKUl;qyLE!LJUwop+ZfCTb>LwSL!DmFn_P_N zemo$(4V(nE^u)X1vk)?xHlyR+yWH;mNGCjqx7L@&Db8omX=rZnc?=VbM=O%y2|=so z%3P@nyIz|@Bv+>QXWjrk;){UM$eTmfZS+Z92CMXQ#D{7fpZcPY|J6Zwp=)MiiL}Tt z^tYywgub)YMlLL1lefx1K70lqRC-j#wioRpHt5${lK$auROT}lVJvdb4erIu2B2Q`hHDIcJ z%x6Bk z1>;EJea7#^F?`@mB1y_mRS3>(^JZF<3wWsaY-}X92d9`QpsBfx$7H6|+VX!ol1_r} z-!;i1;XhTZG-JN}e$A{G{2d=Ieo1YnP$CHx4V7le+=S|OpH!5(Hq0jQD2#)QclF8gduUXMbHLU=(ROfA=n|tuj0?+^|nIYF@hg=*=;vkCez4 zC~hS(>h+3Wzt~2NJ8{GEU|L?U5T`&eto-U(+k4Ei!AO&?LYZG?t|7r-KxTXaCzwD% zRFE<(gZnF*R&rQxCI@({@}AsD?=sh9ht`g&`)Ak3!0E*D7-kMPq{P}ybTEPlG81RN`x zRZx`t1*bPx*hKJf#m6r5O9|9s$#^g#=1P)fkPijXdwIa?xc|opRukG(vyXO{6knBu#5%gh&t9t4O zU$&ofQ*#EKEL;+lYAwU14DXZ&UU8`O%bR1tMNFhn;N@bWaF&=OQmxIbYTe?eP}{*- zFES1N0{H!17E*OBzM=nk2r>#bg9KAJ=)e~e=9Pr-U;OEyhQZ;CF~gra9IMojOH?f- z=fxONHYKnp@dH1{+N59iH`@YmIQhJO?0D$l4T926s8YtFtn-?o?<=8}F>!%r@GbWn zZW(&G2qxF-kvH78XkeZ}fA|z{lvhU=w?xlDmxtYF!DnVP{>d;ICaQS(Q8hCLTKa^- z?=5Ys*0G>VfCu}t{&`FUvyR!YkX+LG<~a*XI9)4>7D`dE8y2u9^$+k1dMz%f z#6JmT;5H^;oK0BJb$dz5q>L&h%$fc>d^KkXC%O6lkYxuRFp*4GNy9}?;{owdaa?r7 zO_=_f-tVy_5a`(Vsd4;9v(m5X_dpKDtH}YkhLpuu@Y1o+ifDg=hKtIg^ufMqJRoWm zOylmt#MgoPtE|PliP-|GRtndT5t;&!ai*5`QC7Zff2G9%8s6fXcOP^L<9F}AOJKtT z>RAb>sgW>u^Qf$35=BWr%=PnezCRg8)Rk1y~}vg=!iIWx|6EbU$3pGGMCAr~_M?Jz*eI@r6{((hP<+KW0n<(P9o zl*U1)&x`%WFw!#e*$;eQsVAHy4|ZXzuO+k2-bP&ANQSrMEzw-rKs7^;igo>)A?k{3 zQBS4+98#!?9GJcZ{*j@$xgRk-p_~|#HCKP5+B9}LN3^~BlEk_>yLLt8@3U^7*AgW@ zCv)E`*iao$7K_`{{@ZF4{2A)|W9?2}8RmV>V!|r#*ka0M5`}qX#Rilp#M4D0X<}m* zt9_wx;e!Cwxt+x{o^TAyxA(HTmFL-aiW+1#7Ak)?pZUkw>L)ODuIc2^156y$i=Sc= z??E15-s}LjNB79D=PJmwDSSBK8*{_Haw^-)^51{?b;t9 ze!aZ%Nv`4iY>U3x^khj%BMHc6C1=8Y=XWc?W~Q58N*YBmUPBDrf|~$aVpT)moNaW# z(GOCDQcQ826f3-#=fMstKh>~*?x~su9bSb=K_@_oGBR)rj22eRxzZz-ypCty{?BnJ zn=s4WgO-DY>jTxrhDFw*_E~paPv1Ym()dT)uPyUu{2M%!KvFUZKJF_nCbwTUOY-Zh zZ7ETMm{uh2j$?*s=ieOoHp%32Y$b3{We!FGQIL?ZM3sym}M7p_!j6MmgT3&~Y{#YmG<&DBdG||3tc>G&xGqZlxcX6ADs+ z`4GdVP{<0_=5A*H=tV98ivS*nwxyUJVT^(`-MJfu1rj&MNP}L%NdCmX ziX$%Qa8!tCkG@88vtpKhO~X`2Eenyyal+$(tV2y&!SLuie!uYL93Al9HS*hP@3&QM zc0j*VhD&Y$UP~A`WO%w0rwM^R%!3=0MPoFYsoNv=ynKZq*ziUn@Vh4%x35MeUteAvjDzd zW+8-Ieu_XxET(Sx-2_gvhxDj=iXNV&id_`HE4C~5P;tZCj1L!e)ZStGCXbLqf~Q(Y z?qv}=FJ6C}+z$V*?gD7feDU|va8UY(N!%Es^;@s(fvtzb_g>d-=2mHeqhr|y80PlP zZ0M@B0;bSG#u|=!WMV@IGKL{EFz3*9>4qIpc^K3KiEgBV0t4vkd zh{Z79t0lpvTsl- zIp@2=uq(DMEWD4{pFltNaw+R`h#KZc*f4d@N#Qkms@KfJik%~`QD#YTA|`nm^G_GO zx*vSa8i7y;Igvm*FJMR>Y=*vU^gN>GW{$e^Ec`iH!_kN4gp%?VMI|l(b~xZGt#v(Y zrH-}9+`e?4=TGG7Kdh#kMl;y(UEKzF)IcseVe0U0yn@TCtS?dPAsC68^m)+RK&xuZjlt)+W^hx;EsTOr-qow zV-L0SwqDZ03uIBHwXvI282wco>;#$FkK2Z33=mls)~a)h*ndaB(Hx^q(+qQolU zi13ECSwqNFa&rS%I4Ztf2627HoRU)ZBlorcKr>+O8*d6N!Xhts0h>EAT#WR8&%PD% z{c~517yB?X8nNmq**-cqKXQ&{a-C%W4w-4^3a< z57qboUr8!S60%ORC3|FzNr)s0S<56Od-mNeD%tlf%ZQMO?7Ok=j9u2j*!LOR40rDR zy+7Z_T4a>^Bexr$`Q1tik?M>Agmos38m>H*kX{7}~;VG;e`t|o{u z!7q3@fP@892+8m|tgrOZfeWIt^RfDn2Wv+QsP8Wcu|~x7$V}T8fetAtr7PnO!xQbM z2U?ewvg5yuED~@tl?KLb0?W$8-<^mj%h@46;Diw5*a_+`GKFH-gjr6O_ILMx$5kwN z<9)WtXQxE=h5yuF=dsR%Rsn@+wqzMdqUC$}-KE~#v&O#N#`mlgc5ozP;Q}QmkkvtD z5PsQ?wDVpA)(kaY0}+g5F*m1}iU!j+@=n)GhVUQ%=u(OmvhSXj+4BCG4Z~}zavf)# zK3T@WS%ov?w^yH2Cg0uaz$~6(nCk*tUXZ6`U%!7g_7AnmewI8^_jSp1wJ`QmV+3*D zHMl1t3e8Qg2>fja{)qvWMpxnIPIwhoNJZznxI7d!23+ZJN^;c7+8^8X3+2=)bA80A z^INBX!RZ>{6`FoJB2HFfW!xTlk*HHM&BOflkpqEdb%j7*mjlu-vkk+MDr6Neal)9+ zwt%Utzb(g0i5H-aG)%}To71lGxIgE(u;^^DwY!tgKo`gm0n9{f2hYHCle0^U`6xY* zs_@30V0P{+v2?e47K$+*#Ne&%&9i zqaM%NfSW|*$O*%w*y&H(_YX1~+XWBd5El4rsj=LeUhfYRMj8APyTc<<%LnH9Kp$dN_w7JZAZm2|H!tk+rH4VYvc53 z=B&-;WWqzGDZRJg2nR(y3M7k7an~WfNeJ$J;{<#(Rc~eK`z-)zw6%go<% zMvrA`dZn0`brQ|U!P5XQMPYC4^0s&n38y4xtuusoKaM+Ydh=W^`vZ$eJn)?R=tTXg z@2MIouX%v=wa~}&h1(~+AqAa>6Gn+qyVZ0Hak}BSh<1z={MDb5dJ%q0rt%u;8$jwB>)%5M9A%7vl4aP6EqxR%4KR)m-c`h75 zk}~e*Z@)AkYU!WX>Vtozpwuv@9ak>z$8(qV_4*>T1gWa&V&#`tgYL)Q`d- z!j&JMO0okFbqxI3 zvh*CD9>!z2o@4%GG*^wwmF)0O*Q{(VklTDnQVIf#g!2kSc}YbARP6R4?Ri$o*gQv7 z5W$-26r-;+Uvw6DknFV*YBii-rMkB|;?W+Wp2`4+@|g}~H9m3SGt>j<@{oAHca#U zR!-+Kzrskj8+^g+BRaWCHnetV$Yk!;gm6a@I$id-;&Oa*gf!%${Yf&uLE|fuhT+6v>^jL#;N~qe0PIW!ul$;p%hx&Ct2L=@gao3V z?qOn~`};WZltvd|xH;xxyQ4jV&{~rH9S`NhK|G9t&?j24*UrB#@|)h*e)$b~e;=bw z5KGuSW$?Jx9|gYvlROsIz3b-!5D&K7#y^MnQse1QZgethEHCQhkW5`+!))-A!P>o1 zv6{2t#W!4DKcvM-3w;pNnqfzrutdVYn}Ol*0As&90k1LaCHwUvPVm3{oi+gHIG=Ph*O+S9p(8Ym@;*NZjpxuA_7D zTb9HL3F(eANO9K^Fmp#fG06>#8sL9c0}+mB)W)6CMa%LWSS83mP4qf}eRySIIUR_) z^*ExJP;l-!3R5rx2k?_IfMk~f-`53RX zXr~>M2nDQiaYveQWq<5GHkBauE=KKNy4>@bK;u4U2NwLHoqin-cXgpAs^}Q^Q}-90 zRJL&+H*t;+tlh@QAi+zD=^rMPgu6yzzk{KsJU*`N&2h?PIupMD7{jz=mJI|J{tI6s z9O<(2VO)Rpno$=Q1FLQF{L=&n52djkfzfT#EyvQ==(o797h-7|-Iqc7P9tF~T*5vA zf1SWI?mRzd_gB9O6AGbwoNhvLF?xo(0{&q0#hNBqTql3?Kd1lKGMu6U8QQ?5|LgfO zEMweA-g@!=&QZc6cQ!Z|43hYi-w{YWqCbVbPNQVt)mzqc{=2$g-*34<$|uHamTyKC z75ly@NuZNBx6ZShc#YMFwb0|mL*GhYHFEM#e&FAq*{;to>~VTas^STG+lyoz$A6InczM+6V%`fsB8gXC=a*nq4;XJH=tcPqW_K{UOLeh&Uxa1s`&GF`p-Jvc$S z;4%3H6s1n~Vm47a39?(5SV4T9T04eW)ji(CX5fCJ+ioo_CR8YmLl4ehRYluWY&$7bC_WpMSrp(mT>R9_!|AJ6veos5@A1OGl=LB6K8w2MM z)j8mSFao}A!lNbkQZbUl>HUf=IqwIzkM47IrU_)uQma@chIqbv@uc1iA2kf-@vjy0 zIFxW$iks(^fKElAJE`#j${O+Eb0`m;A^bP;?iT%+T?jI2Cm|*^65sGlgU?UvQ#x_E zGXhC02DT0Yf0x^$Jg=Y1=qaJTjUR$EgZ{S`eJMY_u0Q_+6}};X0-?@CQ-V}&fc0y% zL8sn^kq-WNoG^Q6j86l$d|;4?SI|Gau2bmI&!xBkqYJQ&3a;g35}ANxCan60P-7ZDfByFD3smg*86_r; z)G)YH{OdyGs#z7{+eLxFFu0IT$}17cp0*HiwvMv&n@6s~$10y$&F@~u;x$(}W~u9v zts9-!6{3F_|I$-u++x-ve;GAK+xzfr>y2DCj;BW*tUC3O{^ ze~iBT=*h+O|4c&O=r2s*7V`@TFX882agVfV+}e)OCersS3Zv~Qva;_Qi^lFU^zMrt z0`3ZBk47Q9FvNLy(EPF!VWpi-MhxrGHIu&ogooa!7tl?>y5y$WHB>%~{=7Tc;9^mn z)-*9)hT#UiNz){iePgTVAK8bXDCq%=?D#ovsMB?CmDIVLO1QEKq#*J$1nhrhAnWX{C^g};u~<>3A#nCD{#-j%Y^b3DOMNrmV%Kd*L2Gn`z>5aab2|RcEbm& zY}AcDUJZ3~D7{S_W9i+CI$C)mLD(I@adN|8f{f|eYg?e+?l?wHl5k$JN5-UaqvgxF zz6-WbEAr`Lkc>L_7G55ic;2c{^Rr_x{gUzXJha@2`^v37(2AUCkGXd;feOHhY@UM+ zC#{wz1R$H6JtH{qzwCZZqXn2>ZS@X-v3K-4VD7Bz5CyxCP@>4)I>uPiwGUtD(OH6@ z#low*#`8M}U67gsO4^xX1eUSUgMm87=@J);Ub3(R)4Ypy0>US_UNJb@xd zP(^gQ`|=_!q}B^7QOJg?6_Y4C1Im6U?n2TrhHwk;#~OGKH1ssyJ@x(Cg!O{&!zabi zk>TaXWR@6UUqXb~HAgvDg@nB=-O2td^mFb_J&0;XF!?$9>m~Qscz42yj~C3V(1COY)WAPh!pH%9T_DLXL+>~o!%Y;&JbFSum0LP-bqxbcU)G1;nhywFJTcd6f&kivcy3l;7%YcHI zCIxZCyJ#NT44mu0WM?R~-MQ#@5UfNO3Wtzz5C3x)-1`m%5Qt-sGqrZwNwQK9H;&w3 zXNCQ=#;aLbaid6R>iCm`8}-sZv4>TDF6jmiHoq}_7az|}SHC8oC>S5#fW!4UuAO>5=_&xpl_zkE>4^@fvb$^2Ej9m1b z?P73pbC=9K@RykEX&!LD{HwPHbK}cDG7C&-wj<1d1}dFiWaZmS+HWqCJs}&<-c23y zm%fymF@_7lFXr-my7St^zYyn2L3@0ua zg|&>v4z{bm|IOq{nJqs><%0~(m_vv3;ed=o8RsKs6R-csf%usp8g`He*j{KfJ$^x{D>oN&4ZCgVH6FeKCY(wZ|jx#wKcSiUl6-|;Ap58iII+4<9Jhkxa znN7R<+w0@wCt&J0Jox)PoAWJnSO>sB3ATVgI$u`#4TwWGtw?B6OXCLO6P#3roJ{=y zG8v^E6{~>LG>rQw(=UdT^v95-{zL&&$TY}lAf zF!(1ZqWIQhsV`R3UADpXp6TCSds0+LnTuL5RjED^4O82-uzg`!iXA_xj?mh=@U(a6 z3Wuxvk3rQ$T+~E)x&q}f^>1U+2!9*;k$MZ1t*s;PpyP9Bw9V?Xj zNORW+nqH&%knKWL48@E)g?-;f36OF2bsF!wnC)(TU((xvnYMO6WqF&25pKefuOba6 zv*BATYq!CI`_L)@4K-Z>$NJ#A1fAuPfb#jS4mi7tZew%Xdhzh+AoZis%+=Tk#;tLq z5Q6&Bj4UiU5c{5_QxS8HQWCL;6eg#A*s^s>cv4r{ae_H!yi>dk@@7O<(@$tqq6F6NJFbi=JRnac zKD;M$eGiZ&DiD5x91kRR55y9&Dwnp4|A^!uul~lr5U^#M(zS}r^qV{0X^1E;?IdYl zvUDi7ItThYr={{j58We>JxKc`1dv0F0G77pr7gRc|zkph%A`D&p-9~H<(_^T4@c_aUT%S+-htvbVW8`ZYS~U)~vT-6IA(f7H4D{ez?NY2DlYM698?ClU^L)0Lte z!0fE_U-Sn^a5J2#W+V*NVL(fS!U%>)0I*I%`DBDsFg1NnXx z{!dQXTh7FuXZ0n;o!#H5JKr0fR?D>WUDxQO@Xgyf>+^hpblLNgtDM4rsHz9?ukY3C z8u(MsM$oY-3VB~Q{%Zb_c`tmQTu58o)-2)s9G#G2spGbzj$LeQP^EDnw$mf4kudKz zMA&ZJsJ=`RYUKF_d&Of7>)fwE8h&pT%Rgq1B;k|@qXJyP>0fWYWxYl{{#}4 zR^kq}M3__Q!8&+!yB+a5cv`R=+&y?J*s*mU;9Lam0)7j)t1jsk<`1=}T2cqK*lzI< z^2C|PQ~(34xq&69cMmd1#G!k;IR!A!2EcXT2jx9lG@n+lg`o3g<|LQ8a#5LZN)I;DDvDrU^%Up0Yb4@lnFO zsNti_Tf0}82~HfnPSgg7n&k_uTRS3(kl_PGA8Mt%WN-b{URccuEl4Ytc4;8luj1Vd z$;l97>G6s2wUG*4X{&A<^q?i^x0xTfP_>LOElEC4XKA9?IQ|^o*Cz9sIm5J*4$S;( zgsA$TmZ(x@a?AyJGP&|jKJbUQIzLTJA7byc_ixnF>ni^p1y12nJWKTR&1*Xdhs1H= z)25r0v1kU$i?7>vB9R6ii9Xkvr{1QW)jBLITLo{47@jJsJvRf8hs`dbHLV%Psn_Jx{c9r&JJ>U;ng)@^b7-tUqnvlG@9~5 ziFMGEW%hoi){{ltNpAOWz^Bts7y5sVbsl3%2!_v`j&ypEyA|GGwqrzel=;}oM8=&z zlzJr@h7uwb^h4|Z1aj*A2*wZ2TdX+nioq~2?ict-H;23b1)hL0vT&}YX-9nYZo!&mWs!B(}GSIgL6xH(Th0@`=orYnBj}sRjM(DhQ&93%R&dRG6 z!B2aRwWKM%`?wyjpMC6?J5V_%X#K_^tr`Oy2|a)$@LV5&@uZ~wp8SI2gvK`pN}+&T zYGbrLxZLoLL_sxzl)W}^42vm;_M_HGy)9!JWZaz&G=rb=UfY9|ZJq}ciGD@6&bIo- z=(gPv`d1%mr4Rm%6ayh{2fG*Pd1Nr>+xLfCF1gdxEKX={9k#DUr=!=_#*@bGw`Z2` zg4@>4eSJ?~qzpM^D7;uk%WTt-o|!!@gwE>(E6e{1Thuv7CccmYV+;jALG$`v?8=^E zX19XX#I20b+XHP<=j@(PDt-yAX|pp!)kbVj$WBfal$?U6Zw53fdI*Pb!h3a0a%_zI zL0-o?H{tFpx!=#Mt7OPtVqgb=}wbGC+NFe5d-lL8KaCHOkrP*KZPg&#sMK0_@+(veZ>q z9LED4jPQ4>Z%%rd4XT%4j1QgPbuTQ2`s2`FMC%ZxuUED)y^HixiC6Yy&fGr9ekO5b z?VS6P6pG7Hv8H~%%%cvKJvOT;<(h2{^rj}DBx#rT&;PtfJQQbs;Y)J3%u!4fuy8y5 zfu7;_pCiS{m=p|f032NAx? zcLk85P>EkR0kLTH3uEVc1^V>CeyO`N_3^zhS@V_~PVg|%xoy3ez4p(TQ9$cqF&aF3 z;H|LxkDJpt;A*?z;>XZ2^oOx)u-Es3#8mI;P>iO|vd}%AZ~*6WI&NWNfuo0}^`GzS9VvY2pH(G!{mF0f!3nq&?y71HG*53&PtcYDgrKeVG zA`3ZhX}|m0a$pDMcLywMs*+QnR`mi?EcF(+pQLcZ;gguHH-UnPdbt4ydxYBi;q!-w zzM#Bbj=;9F{I3ruC?G*>I{6oD*#5#Rts6I5rDEXj^sNS_v&=f8H!lbIr*P+MFL>$7 zkx_~Y0-M%e7rq`?+Mq@UmJVsu5s_UnL24lWk{X^q4Ah!>(_YN{;eu50N-nAa_pndZ=u=6 zX=OCnzclf4_Fk8b9zjz#Ug~<;PaU!~YoCV!*TS>-jQE~l_m7=8tp?@Vd!!wv=iH%W zjqyMvRyo?;z)lIWcpC83RQsLQ)a~h$T!Rk8Pri&Jks@7CY!ErM;KkEAaG!wrMAX4j zUWqzTG&xDD+1eX$`1k%}%*i5hFgAhFfa|WJqQA7p6FjEOMi4F*gTiGQb724VqqA~$ z7U;f?dS=E}KGC!Bp5xgyq%fZFQuChO`}-Y;mz}76qw#cAsHl6J*boNkNxuzTc5;M1 z_o0rZOgiLWfdwXw-S^2yY=6urfwV4kscF=f^P2Q}+GOz>et z>yS)2k~Y?u<9NIe^UaShK6_g=2I>0CROtg&akwlXouMuZ;=#h>>!c!3#v`ec>^FzJ z4lqVwUV*z*s~(37?#FK;8?T)YWv8@n|!NiDm;h1Fxa&2e*A}NpYz$-9d zZmYjY{|_PW3S2OR(FIe};(i!IA}`}@8Xx<_k76>2++92A$xAV@xL}-~eM6njyQTLs zo#_|P^*zO7+d?ow-&m-`-bgp+ggC-~QjAM?#{Udcy}COKd@p&UakPaNR+$Zts`y{o zV4fBjk@2#afY{VxgZ0Sf#X~12S8ae^ORsB1nBe=+;RM2Qb_oh*n>^I9A*-Zbu-eYC z?uq~NTFFwX2zI&*_l6_C3jghN9bCcz}r3Mk)ixJ@?{{(A~v z27BEqd*pOP;vD2&6`XTpulvm0#STd4z(SnB)s2+9s8Pd778Lx|Ol3fI1@mRtix^d42|O~(BLDii5fCZ9`lmQOj-laI?t-dC9fJNtuiE}?yMB_>aDF`+~BQh(Vv z#!5f5&2z}}1qW%=yM7X2-%8>Zr4>rt>t6D`w|J3$Q8~c(b!0`4=&u>8gz@#IT;lRG zy`nhI$$V`E_OAZ*9uDEbaN=sx zW^0tkJ+Urr{GS9Op~s=&TWIe`N+ZyVd*^|CnCi0;tcMs5s=T>ND8^(z(+*hqus&5I zl;vJ+{0j&G^Y253c;Joj=Z;Q{zEW__*fEAD7`W;`H<{|Q9N(Xu9(4dH-3{&wJ4WJB z1X7T5#EU=U1RX)LskK%j+6?qIuBg#jaq@aR=QYxKo8r`k)Gl7bx?PU|LJ4Ag$b2}0 zg&cNuMwFI*hG8)CIiUElZ;_BkS0Kjvz%&D^T_T#1j`(3P{Gq?B=Gy`Ay%Qwq-$8Bb zKMoiJ+3`e{`Iw?!gx7PABEQPZkouk{9@T!o>)7AmEqka&F)l132qfUNK$^Xk%w`eCw;7G{&D$96syh1y z|33%zczR-JToeXIHx!&H&#srR=Bgrlrg_)J^9& zanj92igg7HOz0ZyZwksO@6WJ_7|cj9tmFwM4Wz`cIs$*1MAC2JD$wFj57b@@SS%8#Et6*NhT5|6{3I>q>@j65y{+-=e>GO893`M z!F}gKUTw&BB=M^Imq)Z?4!5U-&g8SMnCPEVe(NszJL ziRf8U96(7;0*}~7hnxNwzQ{A%iTh$}Ej(!;xPp#*e`}Tl_iQ)fw(4ZtjZ0|wqhH$d zju3eMMl4sWuB&b@_B$}}N}IY|imb9}Fer!Y%S=E$qcTc!Az(W2sA7EW(AQOu2|MSv zCPw!g{4D%LQ(K_-p-uz6dIt#{*@ME?5%|32JhU%hXhLYY6$Z6-cQhDg?$=Dj36_8u!k&s?}pQT0|EiY4zxz&)b+Cp zZO~raFb`RfJTe_NvIIcA=jOu%mwY>M9q}mGg0mlNl^ER=2;lk6yYoJjTzsO+j7LWx zpPaOoMPHHjU^)Gx3WdryN}$@Ed`jh|RZbQ7-+*K1|2ilt%9X~yI~uFcB%?Z3G2_s+ zwsS2V$idbgY#S88hryNJOz?OR*=Q{F@D*uq(Ryukk>(y6o+Qz3w;XsTSl_tZ3~=_| zCUb*fdsPET_u)`qk1V~$spNNUhLWySE0|la6A5C)&~6OorIlf=FXWL%738ZMOKE>m z^H8rJzD<7cy!z)Q?<3LD`^RXQm0b1|8Nz!IUSsKWi+J zNW8U9{iu>Om2XoNP5E<3V4fa(&GcKHMym~>YVpnE>E3XPm@An+5v}6?R+ixthiA0o zO}JWmlbsCoh69`O?%CNa+YiH5M9#aq&ZDOgOkYaR5|AQr#EeG3bSt19&_EGm8T;IU zY7=aGQ(t<0R5J}&dlJ}zh*)@a#|nIz_~SJvE5o#e$3_~z1SC59i{9UrxVwfdBm0j% zhCc1isHcLYm_DF13A^#ZWqJSb;if`tv3iBd9>)R8$-Y<%>&LH~QAeg>;+JiUU1nf#o%{Mmgh`+NEmdb(?kXVd}kY({8-1u)67PfX0RAgGJlpNae#8x`8} zqnuFe-i<4LCz0Oh#Uw(W_a8&tG6t@{WF)YBq}Ed$_5ydS-KiY{03aECYP*807uiSb z6qxY$L97|D5oPnA^~C6q!mgtlCB)X8M61QQD$28-!lMn++ z`R!;p-FISSkkdAOe|NE%{PL)ma4EK91^7xpz5xyGS~utjaHSyT{Tl`(A1*S~L%7!w z!WvDJcF}M?!;%T>DI(Y1Bl%(|W(Q<F_y-ZJ~i0gMoJ zD%|i|Zj=-(b4>Rm{s})hbTC#a8r}_v~knj(a@`6B$-Ez#8@GKH3u+(kBLsERhC1 zrJkio8Xe&3)=+K%-GA01gOEHtcU%&eHszx!iWFQwLexPg+F}&#Rti|4*rGk!ug0`sOvO)_46wXrmuMlbd26gd@yfbyW)d z_z#Ou-erP+Cfsw719)=gNU~u-G87%`)#hqbsWV6syYW$p+cA-H@+v`W)4If_NgKvtWGArAW;=QGp$NJ8M_dhXwrJ(|Nz2u;w%B{K?*?Z@1 zO78tU(W7m`d7s7TlXF#_2|1DR<6lO;etVhnN+5Q(6Yh(oA8s*1$(?<8CqDbCM?Rsm z;Z1;@h5@O7`+-LbKfBuMn1c?K*}VPBa7+Ef(n}F|^u|#Bfb_ zUyKM)y%dTB3Z!p7v=*KI6aW&`SAv$$FDmY;5d=ap^UBO1%jGA71YzB9q;+5M4~Ox+ z8J@%ka2FE3)v9ePJR$d#U!J#@1V_ScSRg0o_8 zIzUE%txR~a?Yld;OHAUwM~8N7(KWlt`mQd&n%T2Lmo^sr_6L3x=Q$bek&lxZyaFN4 zjS*Lyd(`RLRxGf~I7ZB(&r6{@#wprX70jW3b_e5P!t$M>2e28yT%I}G>$p*pi~#u% ztUapbBYmddfB2S$)bxau^51ey!sRbLCqIKp+CQUVy$OaYMl z&1Ubads;7Y&4KTD7S0_;OSdnWtm;HrYDk2}d25ynS>3GBZu5fH!q(3jR9 zU9gru!>ue5J})G?{VbmxRD_o~r3*OHFS2}5ZuN@o^7fXw<$f{puU-8}uV%OViY6lf zP|=-&V#AdImzp8wt5vt%P1nPG!0*c4W6~T0WxRQ?OV=&a`})VEQO zta0b2HXg1Q{5Q4aRAWW6p^O|{LX#SF&KXog-JnhrD*7({uh5Q$^JINc6JP#aIM-aRB5gdf_pp#dZW?If3 zC%-G?DB=9W;m<|Ehq(_(aInhz-sL0|PrGXnNPx;7eXLmR6ahEwRF)n9VrSs*Wnf0@ z@Avc41^LxCaEz|oOKVQ{*7#l2;`H!HIcw6hQRED?-hqiHbarx90e@aYjfYQd?1QP?mrC>)Z(g^NIK*?1g`b}g%OaJy6$ecI>((OGVS%7CD;pScp zFC~X2#&7=o6+S{FCmcti|8F=*<{B)Yu{m1&<;(ZSjcd0vCjFMMYYJa$10>Q{Fvk(s z{=FT^7eESPco^BcgMcl}wqRpsU$eLbl(Py@fye~PGcaPwZizk|e%p6IVmTDdDwUjm z(Tye3m}zuCiR|C=IkY)|LKIC;(uEd0LSwl{yu=JVJ!8Z+H8P~I$kIyi#9%EIn=Jyp9Z9^(H3t>dGT zyN6X9ULD0PU~VHK0bb<(K0;i+1;Y&r%?7ZavpzVc@_wzV0Pg3zr>u@PYYCT<6%F{`0p41BRX84Ttnc^NLFQc8uTN2Et6h4@+z_}fJi?@E=w9A zVzsASV#FF`RGww|$t9kJO~b(9(CYfB#?xy7K6AtTPk;)56RX$Rel=UoIpFY*$<^>K zd#KksUkwziA{X~0m8k^`(+br8F@}Eqvz7N5e00Ydb z`*`b4Y4iUGH1QwDU;|M%_fCVLLv@}D4p+6LKXZ%W2{QeM#|n`mKkf$DeB<3IMnZy6 z_bS4;3)@P<84>AChLcWqYH4RFN8%-~;eQ;p#RvNIaKf5#KQKIx-Qg<@B&a*yfM-dJ z3-qN@Oz_mUTr3ya{u*Wd^mv~cctnmG3_5d{dWOIvm$C*+2E2vn_bdB9fcL3x%Irh| zYbq8b6feqtHfwJc8#9j0^5TTs$x(>AKO(N?oCPq9KZn{*=0SEpI<3J8@3&lhKhNE< zj$IXn^01An{*X^Tm#W&0)e7bdPhO;akq9CbT-)mT+-%=_)v1$w%W>%~%JBX9{yo*G z&8HblnHP^5c;au2R(eau7JI!KUC=%$@%lBt+>Wxpm7L9S<@#qNqSYLlcn+EuSKfg? z^Z4kh^(gG*v-*)oHBMaa2&l(Ik-zEaia?;=4Fzf(-kdVlvjc|i1 z`w$i2E6oc9Rgfc)H`(v)Bj*v_P7x$TX?fyRGc&uDOSe=9Nl8e!RaoOgxe|R0KXV=t zj-`#vDV@EVhij<3`vGztMLPZbv`?}T;~l9ijIWIiAsZGE_d8&YL#Ifh%+2b^3xulG zrwV5*m%kOBc_0w>UlwV0Go^^7)fA?~KO>P-56AaWopVKgy)@GXcJaVnAbT^qzcN!y zwC3NPj7*I9f8kBtw+0QAvzv$(|BXt>+o?O zMsGh#VKEJGcDLa^CU}m{#jUSV=5nD1=G9+7BI&pwx++gu{Y@zKK`>gHAL>^Nn5{Y; zNplbSh3mtS2QcC=gP&!8*mG#%`310Qd-C135+fH2oA}@qiON-#DDvEhDq0-I(nEyb z^1t!eBTEE8 zVP9L^r+ zpT(Bfs-=raee!V}=2%)km=obPHMr>0in+CKP#HX!2-be=)yPXnU8&REN}R4m=2i4! z3R@9tr;8Eop9jaDE$&2mD_^E{u~@(w*c}p!@YAC?F^=}<&x4CZ@Gk&w*ih5EnX;HdQpQL$}s=?S} z8q;A`3eI_&X)&3C;RC)tUq%w|)7`86llD|V(U*>CV!wT0^$@uiO{WfEfZ8m-`$UY!}I($leq5=9IST@;%sHVK8-`(bhs|_>V>NRE!{E&3{F+rtS_@+Ly9=*CHrwqSU6sqELG-DBBPl$jH9O5i>rZP zr@>9egQI8^yhKW3f`v$qCiDSs=U%plUg{ct6hQtbImVs^NXDY1j<0+-oR0GGbN09Z z+TDUYKZH%!|A;;j@IRj>}Pw{P8d;gni6n{TW=q{e*^gQ94nsymd1eb4{-5O z?xU9{NvNHDlxOmAV~wJ{HZd$0p-CHdob9nnX;mKi%5S+e061KAsM$w%gu~CoFr|@B zeTJgqu5l|ia2t7ITH(e}a4Oz??E+E>?(c_#NVw{ws&AWYy<5wuIqUO>IAtaPFJGB1EX>c0RzNoPL-{DnvjJ)89)OPRI1m5&R9e-B{E!Awcaot}pS-`s!fFVg%r zyZF!^=mRQvC*~h`$9{f#o*;&SCQg=+N*iz3X7Xej?!VoA2sW%D5-lUzF`rfsG8-)v zeC_`{7Cj(i72+y?5-^G{IJye}*JLXb^}1Frgoz-7|lM%ppApt_6}x?4}U9V482 zI;ZkIjp3)`2$^$J17z#G@6+!Co>`x~A66;vtW7%4jE2~*-*}`p!UB}FpiN7p`)|S; zN?$(*;!&p<+utaxD_0`ZB<>JC!kgt?-83BO6yRvb#TRG44JZrogyPy@Y7UElwKosi z<*yW*x4j}o{npi+s82Czj1s)l|3sd(8_Nu5iAwlu2B@aczbvMlEuK)CBV6u`zK4dh z#UbAn;QN^Ua#C?^njV_NWAR_9Ks3*jS`z9xeB6c0DW#dMezW<2gfMCo9E1;{Fa?N= zugf2ABIx{7C$e9Hy=FObkL>sLLBDtUdnCpiaGfHF&HbObg{jJw)d+G&YzEUQEsz&p z%>MSn5SV#cdNU8mCl1UHV1KE``-xrL(zkqyiLW{tX#ytiNWpbcYZ@xRgu0($V37KQ6T>cYXUZ!28LGExIfx?G z;5R+l(hsX|AD%@j!_0JR4jGwFcVIHF#CR0?-SW~DdjI+g`pAo$;3P`4o49_sLkWE2 zGK_@PQ%3`oE$;5-4IK7f?m-#?n?Q!F_11_iNu9_yFgC6yg5mDUJ%Dyi{+h4C{p_%& ztvY)YfO?bSc_?}#s8vJr2b^_1)W289@M+E3Nt~C*8i<`jc-7_;$VtK&d$9+6Sf|qU zj$-xs_)}1(AMDNGsNN{3ukXju3LqORGvto~UUUqmoX$O6-n4y$MV89JHX{2ve@(ec zx``lm17(bfY-}yql4A-7uIGawi?`e!z08uch1uq2Dffvl7MWu7z)V&;%~teemj}ns~HTaE9umI$q-O~Zg(IGwz>gWf&G23=j-V>$9eXB$GbCR zCtJ8o@!L{f6zs93KR_jy1os5=mn3hPsq95{ChhmWd`E~NP3m{*bacMmEUSe!J21Lz zd->!m`6G5!=taS^$2diuKK7SZR%1sGn~c$E65mfm(H&<$shoplCZb-3>QOJW$cC`X z$hD9Iv@QPeA0R&HKehb@9xE&OC5D?nn#3^z6g(oyqSmqvqfeL^lo^E|EfsG~ zL`3>ibcRD*(PmF@BJ+krQ_eT)nMC(5)VVpo=1eDnFGu~`{TM7(k$3o~bn;cK8GD72~fC>1IHQL}bU4X94# z-$^D37jNYjx_7SgJFS7i`;vReoEuZW@O@u+IBmCSz7 z8Sa;K;mFJ~JLTce6QNh@i^XfW5QO`3s&L5BD)WO&H_uvWd+3eV#?gbRaiF_o*e^H{ z8&bR4a3I$&#;V0hV*gbwhf$$}zxCebumy@Pi%tdV&gq}CltyqO%5JY%(F=B)zkB(RwFABEX93v- ztk#Hpix7vhMSkWkVl<K;X;W0rT7zF zS8;%}P*zpI*G3|`6C(fL@xV`=OA|=rF?%df8iND8!y%tmk+(QTr({i>=uU6Lx1m2) ztHT|ZPSu~MaSLicI#3_zyRCsFKs$gJwfLQi(dly}`~tLiM5Z9^A-&OT#=}M}faEn8 zk~e&%UhVdK$asxJgNXi|$YA+ z8Zngy@>49%K!+ADrxFM$V3pRkHC-|u6fheNz7X(Wvb3#oWsm;Gkma}ALX9JA;9cJ& zok}*7G+F36+tFiXdZ`b>T&BjcSgIL40###JD6&X8eZg7T%$Hxlr7h-g9*n$!VMqLm%^fIh#{-xs@0zu^HlSM9f`x+F#Q4Y78R`& zj#O9Ld4|o0jO2q5AISF)T8|}lJK!x68u$+@Z}f8s81e$pL^P3iyM&wRn5^oN(A5{{yWD>(|{zg=CoQp}16t z9EKE83qU^`CmydFhRn`W|AkWtKisUr)py`(-<2&fIxpr($glLy@u&Whc`^&{G}+J* z-2ax?zrqi*RD`WpZXUG!OPUDJ^A;nFG#7gOSb-ymvtS=!0`=Mi(IE>d`>s$zJ`{@F>wX29`x1qA{$m~0spvr(TywLRS^iosfO82= zaQ<{|3d#6Cj`bAR4u3>F=$MTh`OJdLbJDE3<|htq8ywz^$gkCj%zsTcuC-FWipwDJ z5F%K*R{`0#ZO*9>A&PJ11C*_3>2RB@4Pwv3q%7OtlIWeYNbiTCd)83@S|$Cq^Uj~e zaiI)WotNlEJ$f4w=6C%2-~Mms_7wQw{hM(6*_Qu?(;Xy@v@9oWnLJ*`Pw5rP&@{bT zL0yc00CnlL1bz{{-U+}U&oLRJ{@K1Kt(akX;+bHUC{G5{q@Jj6!i7dy(aE|MsQ?Ld z0FL}LU=Gh84d}${{xeiTajD_#nPM48wx;w4-fe`iTYSnq($@%bYhy`ak@wkPy374) zkik=hVMUo|(aFAJXr(MbXJWGsA6A^p8HS9VE4`n6iWs7x!2!TKdctV1eigx&dL@So z<70OFD8>4<=5A4njeK8Gj0z~`22KZ|lQ989iR)P4UJGK!sS^XH0om<+ov8STrByay zbCZSGPcj}r435V4gPnuvG+mkdIIp}v@0)zZWE%^&@#p(}su)uKx;XX~cq@MKe&aE4 zP6Jxn?^JtI#rwhb=eOOLQU(&7<%C6CJ!X<3T<$V%o0}eaH9P&AI8yt{{`04V znJV!$=;R1c`|A^FX(KXQ^{6{EZf7smk@gcWC2I=G-S(14q8~Ej#c*ovDUUwJj4a>` zmUc^?8rB|`n*|agj-gaD@;h;-yhQ*%kJtgeBq47dA#3x%N73Klhx}#XAf~?^!`FJ8 z`3zfaD!aFdoYN_8=)@GcyGQaaJA^aNdzB+V?;RNjQh^D9?WK|cl9cw2|C+i zt>4>hB6MzI|FdW-=lTAQ@hd<-E;%)FVP6G|z2JF2N^-4^kX78Dl=oSqs<%xzPR_oE zd34Niwzg!SrFc+OFCzvoyTVbKj!)YoB+)ugr)*+5o7C8xWGqcr5e~)y!J_WOZSsKs ztl>qSZ@X&f7l_AQGDA$@c_EavFpVD>DLQT=IIwu7gaKRZ-(>o9Gel)>1=nu`nX477 zmlhORr+o|X*?MuZ;{i1z^8Co?OP_}`!jQBY$*@oV;BLI*=>D-IGqJ0&4csyAc2Xw)%uWIBm%=KISok)XwH?KU=)v0S zE3?k6Hg^qRq9cZ-CrQCt|81O;9C34QSNZi- zzi;l}M)Hm+!51Dh%dk7gq)3#mBJM$T1zQD`U@cdWZ2q1bSbjfgHf)GKj`C!8x z8i7ec12zpE^Ei2E2+!HMXBu)#_!GR=D3enL$iuE@nlJc$bKrUaTjnQvWL%X>1Q`hC zQVYY9YD6Bf0FC2@ewme;yw#)`jnf+#CO4ZIw|_E&@*5_n3aqu<&}WY?0v|sU4B@av z;4uN$O2?=586z+#@75~=-}S%+*K++{U8*wk6i@_F4>;2TKv(&n>@9G|9;{g4GgPrp z4)K=5DZgQevQvdEyzfEE9=w3*ze*5(+}b9i=HH~f>r zdEmm(6LV7QxeiTk5>M{JXFdkt$`^-cker3@$P=F0Z*y4C^)dyw`T9ovLr7tswxz|5 zsKFbDgH1e|xvdimxW+GKB6@m^gBo-j(M=Nr+^IkW6O-KaV z@>7E2;vUdL@99;$zQg@`P_eIj79KlDYY`>@JVa;Q*Pf}%Crw!8d6ajj`~L@dvKaX2 zy7cfOIu%ZLZBCJjKqopKkgJvv|GMW_RUmF(tz7((Z_=~)$Q`b9p6jB zV>q2$tEe=(cv(T*IWndwIW*Ue8FMiWFh(<=2gkJ%cbcwIhr-u^+hn$~D-fSTlCB_< z4>eqDv?UxF%?!9FJUn%!T73E*SEJl9&2jz{GBV^+xZh3A)5(6!GxqVs;d>sBI*>6h z&ydkOk2sHO&)*&Nbb>WrcVKwg9;x49`-!=W4Q4z@lFv2sfdn>+PgB-#u}j6p#X0MC zE35@<7F0air4yq^$6aXY&ui_odqIikp`g^ab_3SIF@k4y!zhY)%pPLfd(nw>2n!!L zJtA9QnM=~XnZ3Hoh)maJq0|V>1ZoR4CS4Wt9`J-B{GR;NU!H+MuTTI8_ z39A#_OK+1O-fF=NktWvv(f(>Z5}@Tn!KcXeKtrzHYe1`UuNA4fT=yTrY4?7E%{in* zly>M(UNRRd5TFi+ho31WQb;r|Q#ZPuu7I1H@5<<`_53MXMnFzHMCv=93&x+w2FdYLQM5w&~fCxC`%u8`)9wAf-TS!qIsGoIxD*$#DT%cC9 z6k1FnBADX#R#%2J6=A!pL?@xTc<=X;>apb7+r?sAo|n~y#Zr z3k*(nw}cU z>$d!RPG0?nZu-mqqp9edO-AN%iOUUFD7auG8v{<_MCOPL@S-BXQ0z zTrb!e&ZYA?Jpc4pK);L0L0!YS0c3Td3^cKKX;a;n!&>Q(9^mbL*+l_Bt%{3ub2DwrJvc5FpYQh$>}V7Yljw~TOa3+%U# z8kM|Nsdjq&-)`NVeDmw!-#06MQ?6jmBF#oky_O`*@Q?FKg@FO&wCO^B9;ksoIo~|( zCLX^Y2`e(GmP5z6s@+(O-#)}WKUKh^5|4qwec=HN4>@uHBqR}v!^9RslpNczw|}R0 zcP#JUo&m0_2$iw9LJiG9#d^Nbt9&u@3_->Kl<00|lIDBwgofjMuk1j*hrPDc!Wem* z^X|pp1=_{Mgx+%BlD^KNTv!IlT{yFJWzRZL{2*n%*qosw=(X06b}*!R#FHZN?v?%9QxTiKh@xR_u`Z5Nmv{3c%8nTT^h2?#&k%F zK_V#V0(((*#h2&FBf{z*o9g?L@m&T}YiWUSAAl zZ`0jDYztf~dabbXK945dy?S#(z?6)(_ z+Rkjp#N+b%&rYiMlzwyHIPcgskKQ6iOiS49=FN^{a>*|LA~926rGu$*MOV;`r0o75 zW3LvYf{-Un-PZe3SK#k8V32CY>8(ea;3rl&iSpXr5={4K_8$&-S*^ilv!KZ}^K4Q3 z`=LKHdb7G*$at?yAk|wA;DwuujF~S9Ee-t;48oj4vqCnDPAh~whif}=Jgj5Gsb+TG3z;sQRn(pF-n+gtx z_Sr0+H{rABy)YR+2wey$lY>dSF~I2%pZ?1M?-_ODzn?hCtda1qP7#eql93r*?QJ42 zfH|G}(ES`x)Glm&+0JoMNrh)@^KStrhuTg$Gw7|@NcAw1pA2|_dWEkkpNvQ#@(|SX zz1eLTd1>|$DepYf;w1zRxD84wKrcG)Z73{Q5a`T4gpN3NqBWjsl12hF9n4tM_*5M5 zZAiUe5}mjhyVI@+ZwoIJ7}vP61*D+iN81{W3tz0kZaUa@IB(I~c`dCQS^HXakj<8G zHw9QA2?f7U+qO9Ey3p!JGnpnHZZ5D53XFd_0a`HeNul-8p~Ih@K9MX|QMuwBuLsoB zu=6~rzwUA#R4DJFPT1Mx@wiuC=tF})Mc>p`tu;`N@mz8>KvQVgFdH<4|IBv~Oz`XGmdmlg#m8LjBECx^vpV;6ND;-sc z{_S5%@>T8O{&56s;JK@!QbbD1mXSWHS<^gO&zr1IsDXY3lScFj$XHxG0f$C2E4bOv z_3;+*OY+O6ftl3JarEa&=m9~}o9|?rjn1v)yZ4$@C2JP^q!3c@69HgyT*YRKvC07pfW|xRdz#K0L*qj#QF2-Qpf5=RA7eMc|<=ffw51dkoVdPI6 zXpe2psH3^Z-i(2m+nqEc1Rbrl2*4iDDx$*-`CWtef;1N#XcI6Nvu{r@n~vt&Gg61c zPv19h7R$)PC*kXwRAOtQoG)a(CyiDS!W;fjC73Xgo~%xmuK$4l1WKMLXW9FZlTzS3 zC73n|SaSsFPAGFZ%@o3U#onpR_)z)1f~{xQ@H>{4@F-Cd4ct0lA!Pjr@wB;^3p)oa z?HY-ycvPAeE@_ROUzZFYjqMH%CD1>o@v{~igl2AiT>1Q?6@X@|2?DW*NFXgw(Y=QFPDwYmJNNplf8=}pOU7u9_-Xd$dhZw5JyO+MD+?h zsjV-31${j?Xa$f}i<$pJmFs@CyX6zfT4JMqbwBq?{e#DPqFyN%pjCAdJ3Me5mbjja zgrD4p9=^W|$6YNyM?M6zql(7|UW7+bf0VlCf`s)Ch~2O;q+u|f=^%Y!^DiKhKa8Z16HN{_tk^eLZsi+kM zyBFZUHR%U5U-YVfSwk%)Oq4|qu(MqpD%X#_^s$kYQMPAy&PMC99qWyRrOJqjfX!n4 zLk(W^+7FMskpipW%Y`kvU%xUig4DKO%QFZQ4=>K#YsSU5_E=175u9j=$Ftc&vmac< z9tRVoZq5?tQx6u)l>@&=!G1BXbR1vk_gb9e7yzU`xo8NI#MEDt@7U_;^}xnM)^6_P zh#0t43Y=iZ<6@tw59a30E{wqSr(9Wvb6&xMe*`|#tspH@*GVJE1bU^leaz!XjDuQ0 z)s*aO89PoUDtprR5Wt9=*85`Bp>Zcl>RsHl#{eGn5!|pi{-IJV+v{QcSrJy_o0Z9r zt&)t#^67X%Y#R-h1{sIyp7w~#*??IGa_4O{9JX#1Q$S%ag7r?F)R1l~sWmg|ZEzE* zl{Wz~JVh>k<0u~~s?oy*=m#AR>OM^XEQd^LNx$u0(q{MR=qNqG;r!y(_qfz2(xb;L6J(O-E{1=&?vV8L_TPK@7On~``5&70 zitT1~(a!Ox=dcq~(G=6i%cN@OUH4`^RVb-Gc9Lviguj=52= za}6{fu_wVt*wFRt{-4Yf<#z8somcC->kK7mHjXY&z2ZMOk@SpBU3wIKmizH@D)Q>s zEkiO-uXGM!l|Wh;f(bx?)-mXN(LwJ(@HNUMWv*0wUoda;vD3U*uu;w+A!+(Cij(r9 znQfpPpMc&cwQgS+0PKtYuPzVG4Zm}e{^}v`{y?&eBwV~hqP#w6s$%>yQpx)K?kOo) z+ToG?yhGu2e3a#MkjaILc|B#~F={qR6jh&3GW|_POg;Z$loyT7qLqZyh@2qaj(hn0lpuLo-pYs z{%K~tlKEgG%B56fESA~97|LeK8|t+R-mHK8@r~DC=>k>oQ}w{j=Z}=DNRn-_K^NXI zoqrUK(*E+{3N_XBwr+{ZdCtQA-xWO=C=GIJy2`2lqRbCZv2okR^`<>&y7n7GQ+^9< zzrMaFf9W_}BsaJRdo^B6#)1cCQK(oURlOTMl=5PUeEK!`IcYg6caSUt zOJtMqM1)L5c}zz*GRChmtqr{r20sb2eZTtB{knA;f##Kj;4vw$M6VOM=2Y@m1YaE) zI-nVq%n7|6$wdr_>M7PMY%(4afbCY`&o$n~}9vd{o>($Uy0H#j-<;78yh4 zq2#ynFNe~7B=Q&gIWb*IMpXZLqeU*`1-=b zB#)LYC-%qS6A8Gg{qh|+lY-2(P}lkSBZwtG()`4CzhAmGNfsVp1}b6*5&VCFWN?ve z{bFL_Bv-27L_sfa#NYMw-|Q$PRv9*uv5Cs%5h7oR&}|Olu)Yb?sKjA0vzK!P@!w|7 z-|M@315ld#OLpSLIC2B10EZT^^9$b~bQLz0gI)$JYOy<&r8|MY()aI+)cOj$vflc# zFD9KsJ0#EVtofgPe&kn1oEMEqZT*4=rejb6y3`3#4!dFSxds-1w$?hLHH4%vf%#d) z_AIe}ZvZIw4+mHWkcuwb?_3j62ipvz0iAKx1v{X{%If~F#hE;ZW9n<1z@tUX**>Zq zQ$rK&4rCe0;`@_zps4wKfuCwJmfZ2+B>3}RJ#pw#$jivr?|Lva^dh-@uRpxzqKxn+ zvw=YaK*dj6eycxzbt~_p5gWkm$F#k%Ed5U)CWY`HRO(w>?8wHG9d-G`xdAERBdXaK zK8fe74%}97HV4>nIPg6i?Ao>|Zn->Fv2J)9it*dyxb>-d@39PYDcXg%1qCXofv>$u zBIWCj(0&v>j`UHREQt)a($$1nz9kfvE~$+}PItY&mu6X|-+|{}`mZmxgAwGytti>A zgeZm=Q`PrW#UoQK{_XK@NzcGj8K5k{V+N5P`}xnF3qqPU2VPOTM&}$3(>-DyYQU{rY^}gs> z8pL-r#8pYwi6jJnUR0~MA}Z2UPN73LtJ~-N%haEJ>~~tD9|l{l4(rUbc+20~Wcv zxwhr)WpbrETEJY-xbxHfJCH_$B_xPGcw<6&#y;7DLK!>?28c3wm7Oo%j|M%p+4i~F zb|muOyuNJbQBsdi_MXh{Km26y2w$9EAg`(1(Ou}@IowM>fpO>s9O@RNtg_EGgOWx9 zi)a+w`b6y_oLT}#>Z>?~V|0y^#bLm1;`J|&LpG%g)b_;axw8DbE{`K2Bq=sybpM;S z*4y%C*!#;$gP*76&+hgtq+tv2DJ$lS5>p#OuXD^YgF*l|fZ z+896gt1n}qH~(1S;k{yD`wE+$JCg2C%FYLlTqe!j5)6?q9H{xv$p!d;b^#^=B`SV1 zZ7L-+P57mM$U6`#&V4aT;>RJJ7!KEZ(M)-Pyo~TG-ps`oJJ0MBchYC7-4BnWAvLsn zmMmaVz3{&SiWQpw6+gR;T))dX5g95Y#N=!2$X3w&m%lkWJh>#lko;|@r6nZ_Q>j*% zz&@iHN-AD9O$13(vhEvrR-~|FVPBvBZcgZL+vcJLP=^6#s(uJF&XB$AqLJ?R&8!d~ zC<>~;*)~sM707tlbg!B&7#3U-TV^NH??rguKR7(F@ffFw82Opvb>C( zfNDm6^TumJeH^-hV1rnS8mH~}ph`|BZBwXWvfo-$XW*X9zx+tyPAPLj=fc&B=(7b`Cc@7@Nw0^Tm%qM;>Jk;r5$*3hyy^Rh8SnI)DUESH8me{{^e0_{guc6v>i978lOwOKl1HXx5pbjU95HCyZnPe)HY7AO9+>F;YH>1 zK)+pXdtczoTT}Pve;qP|9UlJ2Ba8JEqQwmb`saZ@S5KZY{vZ{INH$~c_wG&>hntaS z-vs;2ML6T(XCsMtql@s;`Pis0dq@;XrUGQ|E&9G*KY%g>m!r?i4 zxve&o($`e0%0}iS#Rk^EXNq?ZwdCwgDGg*LW!<=_uU)9x^;>MGRSIcwXGY2ki%wVX zeh2YBJZ#t9MmF+^5(}dix*u7B>%Hk6z>&@Yj-D}uDHjI^rRGlUo$U{s|D+!g3xMea z)Jp>`Peirk%Y>xb2NkLdat62I4;KxdMFFK0#dBBq-aNPZU2YRHd~V6fv@Ch2CIclW z{9cwbDFTZ{Mlsh@Dme)2)H^=+*m__t8qX|l!(--@jCX3E4*>w%mqFlO50{PqkMiNP zO@zLlO(2r4AM_oj0Uf*pOy&}b9jJSB29f%W7O*AU$sLmrOa^`|A?o29^0o)OY|=&; zWwa&L{H>7tHn*VAugz@^V<9kqFUIyf*{;z>C&|tREYTpxPN%(JP-_Y6B)_H!)`X_)JPukl}9fX#|Em9T1)=4(H23K zVQ}A7Oy;auedlne@_F`N*pKT^D&*KhVm}Q8{*~5#ej4Opyhq>8sqnKE9hUX&@heR9 zD@rj_w;20$WRJEj`Z|EF)g5j}eONZ4asB5~>amD!$LTKx-FuZ8a)nT}{his(Y73XP zJmIfAYBj-f1@>#m(*Y}?F^eZWE3Xep}db;e`W%jMuK8}jQdyV zY1@(NAEzYsApd%AhK33%9Ft^a+)ERXPO*MeqQ1&FI?9lAoBTee1L{|XqQ^MbN;U_QGS5~*G4$`}LY5>m8K9$+ zsM6kR35GQT$VR&=k!^1Z{%avLb}298DOw*dxOxrtTts~USuU@Bf|ZH%%k29sB9p4J zXJz`#fMwk^vU)S6xT0&7eYZk#dF?&IO!L4xaWR*FGknd5&3dAg3BveTAvhEH(zXpsG2W|WSKj7!`@mK~gx z|3&KWf>XH1^JHC|yYLM+puEqvlLV)sTppVdJtxKn#@4nk$H+%wiwgVqNQ9x!B&U+l z#i&T2Nkt-jv6vHhTv(Vh6lV9wg8cTc0`#Ww+I~CQjW7|h3K4XuEyI9na3k(0yH!+f zwxqD!iDQ|Z|I%%@P172(*p6yET}93yu;+hqBB?zVUGe#P%cX;4L;ME%0c;mWL~@Ns znN0^+NSBmYekY;5L5miztzr(f#B?BdUu=vt!m$)3TJ$rlDDBN+#+VkT<#?RVkcI$6&2IFtS;3}dro*i&u2g=j6ih%MfWUqvVu(A*t z?g^k!@D1bqHxlYSgsjlH)W6lMt2LpYfojy{F@>L2Vt9B}fzOL8w*U-LWNibNwsm;5 z^Q%rh5pjZ%`8tf$q+c4L3Mg0Nt^su-ktuzc@)|7?)=1E(kxP}xYQ=wDmiD_h9`zY{ zDxN0%1-5Fz>`E&o9?4TKZx$*+v+g6aZrF)k38)_n)8qdm&|(Pr!iJdMtK{JFpB>a{99%aK|2GheuKzR85TFl$8Z z{`f}ke0H?-NsA*dY7eMkJmf~uWAHRN)_-0>wIyvt|{ocWh4csoiJ&XT? zf?g-lWul$3Fe{Zl(}(J)zRWN#2^Ot0i8q_&KLf}cfaq5?Gids|kpgH9H%n$i<9hQ^ zJsHpqU8uRec!-rRinNr!HbWA4t_dris1x#xJ8&CuJ6VwFwt3<56gz8N?z6nOVsZlq z?J~mfNjUuLjokbmhG84g?Zid${1Y+aUN-(hP+c+2l4N~>zjpHDozH}QYy|L1a-eD_ zXa!+!FU4(P6L{VsBIzdV5|7*>;D-0MrCF4o8al9eD_W~@rXRJr#1s>7W7pcFIUrv= zQbx*tW!3E;X7>gzCQ!FoT2!w7!?6lQ$I^&WQW@*uFz56U3Kgwtr|3ihy-6_1YBskhu_fwS;zFq@=S30 zpeSI}JJ_RNSsQFY0ur0HtnF%D*gE+`_Ek)!orXh=(E0jY&_AWZPAk^l{SZVH(IhFT@P z=v2lG4)6*i$)H88)hBXaqT3Wv#QRUufGi^T0Vot2d%iXL&)VlM->k;WMI@yT-58Y&(m! zoOJZ!-<5Qrt#SKdNqf#Z1!)Qu=$qMo>uK`PknDmc?cJ+u4 z5_#8(#-&bNLHFphKhs1ynapN~IB3(EOG*1CZ&~kpFCs46x&F}$=q^OPXip5T?z;H? za)149((@rfog23xpU*el%2MF0%4csSxo(x>fsroQh0Y9X=NnnEP2(g1jG$rJD@l*b zrNw?=lHkXmIk3_2%N&VXyiq`e;$3fYalb%1@bGhaR8BLJd{WFYJeT=b9W^`39F2~k zR47lIm@nhXSG&u5wM~s;8V><$><_%7P+n(GWX=x3DncB(ta~nfTf-4tojTXhj`nON zS^xk`SnVTrj#FMM&-j%8Vy9Z?$w!A@wNkpo&PU zOC&J-aADcA@x*-No~_u(Yr~9p)u#iAv*LEg?EATwSft_~4zK5%4dP$xId2HkJUE9;^FIArQA+z3(mQek5%vr&8V8r z0$FygtL(c%wDAWv`Q$LH4)AbFBUTnWEJCtIasU>7L~z&%0Sq z0FDmX{Emm+(G$i|jZ6L}e~XehoLOx4Rs&74LiVs_;GfXOEL_6t)!$gtCSfLc<_WFl zZC2rX^C;6pc!e3T>+Q+M(&>%*U3$7HX__G$`Fng(q1hhw)Ke)LLyEigZz~s%;zgne zm=7fM-=E(-jE${3fShX`K$6Bip%|mMe_`=QNzB9R*e|4WUlriLZzYp3wZ7`|C)=In z4BW`71zv|$LmkoV$=xhmgB#S%ELe`i2{WO*^O%C6a9LnBbBA$*F|FGtN zW$k01yc7`xC~V4}1w&qmgc1PCfVPB6W^t2fw_Fdvt30|6uhN=)S_NK7 z6F`f+4NuZK`Se#-V^7YFTMMOZz>TP;eWz(Y9YplPdQ-@zZj$f>ilJzmBA?G(chv^(M2N{@@%6yr&pR zbrrthq0nmyL_4KqG6=FE{fJA~>xRtENhM6#dMRK@mwnn$<89;1w~KDkl{UuODDj;J<=f zUtq!iwVqJuG#o_T)lO1UgRqqhhPD)flQAsvo=$C?mqU+mXt+yPJjSI{t2m8g} zc_Ef?I4k>RjSW~#*M%!D%@{}z-u)f;>}Z%neAT}V*(V}f|8MzN(0KI^o>+;KdASebhnA(D0Hiy6Ry#|2P;dqroIye&{I|irmHQ<=jJzxPjRyz z?34pic0E;k-_R8bwjEu-p9Z*1mr>Exm55c@^1a>Gh<14W(6Jik!=qW<$LLaOGiQxsGL*PXbkOMXML?@=cXB^-|!+(*=%dw4?({_%GV9d$z& z*jAlRL}6+(Hkga8?|cm6e)Sod&5+0H-!aIQhw63~20@EuJJ09KKRe?Vk@Kpc(DxV0 zQc3XTYrtz5zrxso5JD!vt|Ho(z$8lFBH$W_^01UkNFQQ2+cP-%!NhIxfws}@iDzd| zOd)p9i*-hCK57GD~W6OLqn$cs1`#p4`?q`3}~Y4KmX3Hcrr+axPH~^9`x}MM^g4_R3i!9PX^L(H*f2-;SUc$eZTO75iWC5 zYuGFSLG;I^xHg4fv@hSN^5zwm{ct}p2;hYeiBxN!h-Fux z@YLqP+XBT3rP8_@ueDfFEH<;3I?+O@A!xfKRnQazKGoiQs=hsS>6%6 zGTRjOh;?r+=tag}aNiq9<|>rZ1C)bqQy)o56W$Bxru8>mg}@C!T*#(}RQDEsYC~!i z_?FIL!8$kHmp7N9f#3BJCyO%*J%BzqU&9vOs{kMndogk;jP?6D`00xN$h^BOx9ejW z9LUqLPhayl^oOP<_ra17jo@1F^Galh zk+sUP-U7~*46mJs=KL6t`9m`Y!Ma>8Rb{rGzEzVX0P$ne4=NL?C;YZiFAX$3Im;RU z2(_!2#kzdiIYJ4IN-RHmu*$|xYL^~ED_1_Bj z@HixNf9>R{P%|*5(P&O|#o8JCNLon07S3{CQt1aDeFlGBV{1K6iLZg&kbQt{MqKMl zYaVrYwNj6WXbA_)!PP9|PV_r|r^0~r(w~5BqcLM7#kG}5;*`BNFE}QGz4sc!M8m;N6FZ!7BHE-;I7|d{Y z%XK;!7{pmSRD#ZUs^)XKD2_xzzks4#fea^NV|#S1)r{n3J6n zBY*l%p$p=uzC1GTJ_CeE-U*KXh*_b=)0=DW>n0VHiL|||7klS?`PUh_ulMT1(muC} zJPL3&4p*v1;O;y@U#(fQFfofT%*q|aO^34pAJR%L<1rs2YR{F2c3pzc^Y$;V$^gku7yG#q>Q`ASC$1OeP@rq)WGO$B|HU2=_-KBYqc<@)7RzXK#;?&@xcn zY}k@@GbXnQKr2VX00z9di=`dK`!me*#7yMGyEdS0`Xcq%$e}o@}FVm{?(I9 z-oHdTy*O_Ho4a#A`~{SL(>!~@%A@sqv}(*-Z`#V-1IqE1hfWVypPrkE9<8GL<`*Pk z7;m3CLHV@bWif(q5+(jrJ!})hn_dDTF*xiThR}`GETQ<*33hW`SIVO;)PF znT0B(%g+pY_yE*9^(Eo@mYkZ3`vR7~6CTSA4J)@&Yn=7<#Ke?4e)4vZv$ooSFTcJG zOV`$jxz9Ezw)SNHOaZ#vW!kA??$JJZ_vLY0Wv*iPz{AEi=6Ds&J!JWdJ#yYfhIQ&V4BUtwkpSsVBEAwB4}`@y zp=S=TKCyshLJ!T|T)ZxQN4`K3A}jv+<{r$%r<2J{QG|Bm$KPs$45GZ9XyyC3p=5XZ z;moPshb&2Z^$rxQjc#P!g{!d$C79;2ff5^$h`MGwLM*UeyniH~tE|w1+B4$XR5pE0 z`KqE!eG!x}{dmQQ04=f~XMbm+O;Eox9|7!>a>1x=*{7?>07z{D9oUIX2hM0dIWsBQ zR1N9qdwh_4nKqfR2u9cmcoWn=FsM-XBgx5-PBOsGt|H8)Ho{GG*7$#9{CPZ7|NqAi zS1LtP*+QBmWX~>Q?E9W5+ax=oLb9Gp*_lFi#!e(;%R1S!Z&|Vp21C{{mKn~RbG<*` z-}Srxx&A!=oZIX9d_0%?*{FsXUD-Xhcl+eE9$xFYS*F6R!c;jsPGT40qUe&@ z>0=%gR2rDm!fb#5;%vkt2Cc(3#4M3mD7l!Co_JPnv1+aS$4Ge6Eo_UY5-tXg^y(N| z_39d09Q6JmLDqZWpx8vVx46c9=?^XzUOeWZE0lxXzwg;+y8hxvT|ZTEt+X#Bm#X+N z!$4#pjimh6BVkr^_V9tfb#J3Av2Jpt;w$jz)W{{2SSQ`#3#P;V75=w9-7A_3SS8i? zCw82LZ^bi${;Hpz|MbP`O!zmG&bJ`!4tsdHUCG1|RXgJZUDw>o^W?JKM}3d0tA6&A)j%zcF|s`yiw({m9T#PfWi|>iOiC#CuJC zE0TP2rwl`_vZ~=g#t~MW(ejPKZh*Ox^KN(m-xC{0Hi~Iy#%8uHQw*}!CYoJb+(iLQ&@|Su4~NENBe%6%RIs0wRK&<<7j~8d ziCRuPf019nnumd7**4pgw`cu!jf=VIdtS5FAxSra|JZrW8_B_j?MRP|WS!&2ADWL8 zRRbR>Ixjaugk9WH)MdWjp+L~pYA+IZ-K-l!dWi>SMiDXB%_rDKoBU1XDt4$dJ;(Jk zZP~4x{ru~6+CUnao>h(Okm)a(yY6;$UPKPK-qVnTGrx_6LM8q+;c&qh>J`rWIP9(_ z;#zcQ;E&;g!n@~zmA^D`o5V>Isf2^uMdC zw9;SZ@jXE$*r=W3AKFZR>%y9#_v zM4&ol7o00GyC|x@%&t8DO-sp>Zn$d{x31X+=23o^@6<{%1hgv_8Cz5ouiKJGMUr3G z&p*2HW$u}ZLFf964&q_A0`S#d>_(!{tz8}AeKWhMDQR)8Bt4f=(I{RUtyO*f7DwUk z+A(HlUDY@~@A}7%OD{N+koC{~8p^1=v0=!C^U$fe^MtMrtiTE?BmgD9$95bQFoOEp z-M75IXN4Iv5c7HJGP;Xmxz|p->b~s^kDaH#4LA_3d_31_KEqXu z)2g6V@bHS1&kjC5qg9>0&pd}Tw$ox{0hx$N=$#u*uTK$$glr6=cWE7VQG;MzbL_IL z6^KTe88m+XPMRH(ICP#_96j@fCx7(0yGhRaLxL6nY^2y4Q0xYjP@`REVI$#SCW0#@XdNynObkM z{o?RA&z*r2W`-wt0L^mGeS%_L&nt*N(EUBbZmIXJ^bn{ZWAY*X3N#Z|VB@%VhZu99S;{X88Pd858|1siyGS-QYu0lLXI4;(GYe}p*qiCTLM|@z#a#Et8MG& z9A!V1pZQ`CX?*j^-L`HAt7y5t7|M|JJp4PzYCdB0P`~s{Q}2saoZ$2qG{oz3+n(~N z$CrzmS!kIIem)5@)FLtMr(aGl#h?E}B{OmkmkKI^^11&<}MSE_id(3#FV zj+?M8WomW0Oef@Th@;t{?8?_>%m4T>bjPQcq;@H+gQu%g0ivwJboE{rFL7RjEfc^c z*AtUQR7TnCtBb1(D+9+nv{hg6yhB9sTfepX={`ylfb&FLZQt!S0z$+Bs&gkie5APK zn?{sX2O>%5;s3mhjQ;T3)H@%E@S<9jtBLFlX#w??pwO+*Hm{&yfOMk(Yg*_eR}6-@#7DiJ7jb)YrF}_-uUcZ zX3O)(ulGiN{#K^-l_U|xXyAt*^S5@1=oQ@sp$|bV3elWIF!N1QZWcdwnk|C)WnpM7 zCL_5X@^A;s<)DCn{v(f71{zO!G|k^WNn01;+dtDk7)yC8QK%Y!F)`y=rJRA{f%3mf zH&((+`uOm3MxmXl6|qU5eK^Zl{zlf?nkLwr)Aa_r+o4d;Iy~OjqGy&0>B!@Fo$9B-Uf=DX z%$))k*+tK}Y z+8ij&cR;TP^d)qejHl@?p5yZo0EmXv^z?rsA{H6O zZVZvdGH9HC-P{4&8yN;2#gP8c=XCH3r%$&1eDI(Bk>k@lul9CaZzf>_Ua=2Yp2s{@ z%udguO%6*keXoiN+@HKDB$4qS0B7)_<=>mb zmIymL;Kd|(MZ;uLAj51s4>%--;CNjTxOraFsbcl-0NWvw8J(_lv6cJR?bUHZVbLeKozYQ}v@(m;kcs(uKScbIS!K=b(_y6ovH zv4&3*E%n-wRer=GS&@9|D!MS1GwY>$+uCwgbgGYeI)lFxXp;5~zCv`X6Y z?#>H1DZ8sgi+fK(TPa2KJ&eMVpu{p}+T*Ur8>Ns{?lx?S((6j4fg;;RS!n}Gyw+Mv zMCJQLcCe9v*h~LC8j84Tr*Cl!x(Kn_gElun_oVLyS>2?%<+}E|<-RH4Df@M;HoY7I zshY^~z1J9GANC?Os7WFYp_pDwR!vBGD`R!jBV9 zb$W2e)3;(rKjdYX>w`r*KwCpEM#N$qd-Id(oiAvtj=Cvu!e=AdYz}}&dLKc?doJZ<1&4^;_V&kCFDOJY|Du zuXEUYj=N%l(BF4+PA{v9IuN1m^&nxZh6N64|N3f(xyKH)i7t0roUf!`+n(H&3p8j+ zFSUEJKSW>FO1eD4w&iu$-+lIa`|to~R&Fp` zT;a_!uu%N$%V@PEZe&u*RbV*c+)S8PS*LYJnKfd#!oX2BPI^b6w zK)RK|yMRj~duc(w3j5jf-6W$kmlnKr_73>JwI3n`@&hPrKq*kSn|3Z;nRb(3`&F*wa3no~ z&t)OS?@;E*G*3w;B= ziI>8UD5Zm?$IgnkR=RLN__odrX3v}Vkz0BFZ`elmZFfb>Qd{ZzJkhI~LJi+Fs)yU$ z+D>roMT|vx&ShO?P0BwrGm**>cc5^kB6^Pl3;v`(?LT%27ZZ+f**ZtaZC4{mgh5yw z;AwGvAm;lZS}}n_I`eFglr}91`A9$_LOZHL$knVPez4B@w+l*U~%}l${$P5NhIl=gfqa)BIT|l-&&kyX!!k@fX`*u_HsCR8E zPhgoUwvp3gJ_$)@55R38usP#=O+&m>XPpIis}s9$i{&m99+;LbV?nnD zn*qxUz>||4sz&A5FiGXh)aWwZb|hbSe+AG(_TqfM#8QYQO2>%2h4K~*2 zi*>kR`o^6>k8IN?Y6h!qxTur;qDO<)^8;*g65m(wh^$i=A3)w2Si}1pZvxV>BIWk) zNq+3)p#`zh9s<0!69D>6-^67j)OaS+7OMZW9HMibx9#CRVwW zc1B!*UU&Ho3UC=*!Hdm18g>Q6pX|_y;6_8}J#(%`&&NmDMO&IK8JSaN1R$0+tfQ@@ zv{7p~LgK)yP)D=>doH}K^*~do><8V6XR*#4lfG=gYNe0~so%?`x4fmBXDQE;Flo9q zLsOq=B(`-E7^5OFaB9p;om=h|ur`B-M<7(XWzmj{-%*?M+wS4$ptNVgGxwnU9(1iB zFb>S+KP;Y1oB5%68}#lhkaH6b)8|4aq+M=qynTe=#UP^(vE<0B@n3u)kp!53FP5Si zt~UPM>ICruo%jwQz(?DEV!IekIhqUq;xYmGVTk{X-PeqG0{Sc&q7RA8Qxxw?VaHQ$X^fYEWX6 zxYy27X|J_5{aV}C{2TjrZOKLoSz!S6**)3SUoTUbZ0{3{=>G9bS~EGvMN8cUyw7i| z@B^Pwh~)fI(@^=U-i)RT-)PvLFur;5h%f2laF2)e_A-box59|72WqH>+@)#gNkr{m zvtBlM#y9q~L-zUID$1SYC%delTbe`#yEH;>T}pUM>#W&tKYqbQ9Yt6`y1eiU0HYQK zOMcVe|9p$bS)5YPelR{vOopPBQYxdQot86gV7C2+G?}kD@E_?!lLO$Fb59&VO0s+x zhT8S=4Mx8ppFhENoW-S>OdT&*tW>!fXD_A>J(@-4TMPNC01pP%^IyNOhcu6bz zoPbS8Qc_WCT0d0rK1lz^E$H!$iLL}WSjZ5z35B^7JhhpUZeEFobNOX-S1D|P>KDn~ zAMTrmQBzsb$8JUtr;Je%r&y!z5?1)p*>Meb@t@~|e@)F4WvD*P3N&2kVtUcW+ku?q zW~_U5*A#PA(KS;cT=%{JmceKV;pG(}n-~GubtO;jnGnJ(aMv}QQ9fs@47Y*o@+|BO z39=_}%@@!d-c)l(56iASf-8b%{vt^r8yYx392Mqp!cQuhXs%e~UyhMXIrR!NY@wD6 zt)TWzhGN?$u0N57^p0Sge~4U!aFZUT)nY;Whumbxlb`*Upj-H^-cHP5J2n!R=#|-5 zS(ZXFVjG5khFA?x6wNWyvfkq-Kb&=J9Q=7==0+y_7fzfoo+g}$tM|IRT)PH7%z&M@ zkzL63LUuB(b@IX_w!vdA0hhRAAl+Aa>xac{E#{T}#4F1>6i1xn0q+s&I-8})CdgFU9BoJY<(t3~m{RGkAxk5y`W8Tj>AE@^)F790zMlT3a-kmHeBlF z?ZBopE@wPQHD3V}>fuNCApAk_lTwN2UJz!&sPLS@L2lYpcEbQ$4%x81I%$aQ@YeCx zySX2v@P>u*rcZA`p#zBKjdp@{@+WTi*#h<$gnS5&Yz0dw;x+4<;%Mi3+om;b%PL5b zMVtkmy}(VqK;Sbcd>@9+B=X8Zr9L^Z#R_V43-;eRaNX$JxhmF0`%G$(=9l$n`R6xk ztxybHuQz-4o!Zr<@(VA)-DY3OV&c%*a`>jS_apiDaLPxco+H#Bcp*XX+Uri;d4O-+ zOaLkqsbY7+uMChUlEnOpha}9Ev)0m%dty>hVma_FTXN59tC^J{a2@jwC8tCG6E+6b z#6~DWUrYNGzPX6RuQblln&kmUtLA}N zIm0jYBzbYzp7C*3+>D1Szv~C=g`m&ZnzGDZ?iXpHa?&w)FDI4Ox4x`kT`JW1{zYPE zJG|?8G#WAo_0m0qKx8`jL*K-H98Rt#%i5Rbxt1vsuj>#vD|lussqJjmR>scp8wgmz z#_tGoE^FHWo=a!UzH~&gq>ntNaT~Ne@X*>_9m4v%=rh?yjY5n6Nf+iE@7VCMTzuWVs^4VFYmwizHARm;ZZ zzoc{Z4h`sTKXqjR!=|`GA&>|B=L2tXq9nGF>ZLEivfz_@{}cq@9Gl!}a?5>7)dJ6r zO_xM3FrqGx2@q~*?KIhAMTUYsUP89|1SA00eIVjoPmU;8kHm&AgoNJwsT++wHwP3h zh`9pqXl{vKJVaxVmdKOSBG^{(@5ne{^7@Y2Kz+Zxk&-Gy44+g-zmXMEjsx!ZD z*mhHu-sE%=)$6{{K;NINNgN_ZfFQW%7Z3?K@A+MT6y1v1u-vGlX4`A5w`xn~SZ>)1 zL%&N7+Jf)V-xV+3BOvcBd~Li7PgHW6!d#-}=lK6~UPiV}TMd1iorj6J5MHu{e{E(= zb^SerJA2^YIWwapw6OBz+JpeHt?umQR@MK8ewysf#)PouV}&oVfj_!{3m5}P`_1a_ zFHv{|ZH*vY0#%VwH$j6bka^kxgHZ5_z~dStnBRNHd#7sc1bi3-R-xP_6gOE+4*IpW zD*yre`{QdDpiBx#5PNBMlh*&9)Th4QSram3u}LYv0u9`7Z&{KYcmp-Rf$+H4Zuv1h zx)-wn^1P2?NUdEW7I~A(XDG}ZK95{?fQVkE0JUaD}t&JizWI@Rm`T1v$|FY$|I~kH+vp7f@9X4%uTw;gLMDXyR?t_(pHAH@-r(lan7Uds*o)P| zSaNvhDJ^MB3#-yoG2TNboTj^ z%5tXz>>k<6;^u6_W-+C^whMgQnTYOp^`+t!cp zh|5w*jzMOtUFzV`J6(1M>RmxPr-oF+B)^L&nxSZ zJl;tI;RfP`0Dv6z-bC4C@aMNXb31Q)p5Ymd&IHnoiL#y0hzT5P3Arrt+;Z`P)GSwr z)sn6GgrX%*_K6E>R`+Gvci|zH)tSkdh+G%lgVNCa`b{%9~^OjiA9p_ZUv<{E+L0dd}czS zwDG&i4?f{)iiksEz~m~ny>@5#-AS`Lk5))oi;3L{VGN*tVC8sl4e`8&`H9Kt0$=OT z{ZPuJ8!~W7G0jv~*u_qe4d#JnyVT-OP@3RrlQVFH%vH!5iTBw#S2uFVfEI%MrAMM( z?KW?I__wzX5u(v>r6CWM{F}vi}6JM4N8JRVhFSnCkQACol3@48zbkDk9prg z_1E;=QhzI*7Lg5U!r4^+S$@(0uf$^I^_YP>;Xc);EAc61Ou3b4Q|9WtLd zZ^HUFh+?DARzJWF{f)<3_oALBu;{H_ITv6>dH;{4cF)Z8d4b;`MXBsJI!^Ohjm|ZF zZ-zIbn_z2VEvyVb5d8ya#leLN7i_;EERAEQ()0CxQ28e=*!n&7s{N+1T_r2s@+)2NYY;fFjC-+bxZmz= z^b~T^NbauEpE*{{SR3(U8x^r%bsoKbsflV6^QFG353MyVhTJL@t%M_@rUxJ=vq9e1 zIfDYU@RR0%Q3KpeV%jOqlz!8vfUJAxrdUjcIsn-hW<^>lD-dy|PD+`+tp$!m#8G$P zdIAcL(s-dtuE`thSqJ{w9FMsrfB(hs&BfF9&O59}c6GJZAz zSGbwFoz|4qM(&<)aeoSpQyKZB=Twvb;xT`bZOGkERloFkvhgJ#ii}fAL~4K-~bjE*c=mH*(!sP zU^yNy_6WX#49NP0<;Bt>8*biyGsnsYh!ZEt-JAdV>5a`OMH^U30gKCmXC6B`>{)wp z+l=LaPvPi22+x4O~ua5f+*$k%?#!P=9J5>3F` zAAR;A3N!(C9EDUNf>%qFW)Shz*%joNV+f_W1iXH?uRs`7{1bb*-s{_5`9JIr@`=L% zjq424;1C{;QTa7z+Ljy=*cmHzoIt3b3_9b!%n=^d+X5%f!07bK^IQ_{jyALtE;%K6 z#|Wa)<2~6WtKG6U5D#=M)X&$p#i(UOV7~kEpZhvUAErqlJQ;O(5AmpAL4&1rwo_L0 zJZ18jo1uAUI)gmv(ONdJbJgv#dySL!9k2dqm-$boBsNZm`kf1OYgT4BWfawg{@f7gxUEd*8g*3Sh5qR(H~n8#NH z!n;}Ij2+MYdX+wr9qU6?Gx%JnJfzzxR|Hg<nFEUuWX4)Ss}k*Xus~=Ei2o0w z&v#(n+@4}}gv3YuVsb0%zgz~}FIgI+y%5Eh__SiMQktNnjHg}~+?s&Q3%v=~r$<)hE?W%#T^ZU2 zzKj3_Jlt!kwvO8 zOx{f~B%3;%L1==nbQY27n$O)yv!v9mOcqv&J&0l#q{$PYfc(YxhJ2nsHPRmfAm~xU z&z#I5IP)ERIJ5Mh=NOge*^*rgr50(QlxkJ6|5zw@4G|K-_6M7dHJ3l0cp{b58Wr`m zn3-pxca}n0a~>MVKUcH(;B@mM+I7TDF`hF-jy6p9FL1oKgV;s_QXUm+oywQ-XTq$* zLhJc9KHnHn0sGd02Q1aCY7T-H1MdLiSC(hUvOphNt*dTTqvfuunFJ)}dW=#IcKK2T z8z=@YIqO`Kel{|t5g^f!7iJ!Uf8P5=!L(0x9(m)EI|`3WL3KQq03V@%S5WzhUR`W} zF`9{d5MwvBlhLiS>h4CfhJF+~by`BJ=ZiMH3YcInv(Ry(D`(%z+_5<~jETWMf(pCM z=aI*ko1)zU#8wW@7_^|`E14MC) z*}DL#-~L00+z`3}+v?#B+(c#}Tx@jKg#M*H`Pj%1Bzy+IY>oymf_$p%7o^c;&eS*KCdAfB1XiZ0Wzoq>qF1hLFWrCn$TLpa zzMO7%dGGBFT+YHU3N_wb$fPV;x*uBmnHy)z{a^7zA_M} z$1uhd`l}n|I959J&ZgYMb>KO%!-wbv>kI`|T3#g^jUcaUt72L#$G;zoeTEqnjf%dw zw@eg}Zj?QOcbJJ@U4op$5tzBM*DLO#V7Pi&knYIVSl#F%wjs&ZpPKm|56s|kWw9Uk zX7npyGm3>0w7=xMZ6p6Z>llCO)IDy;H3XO3t?R%Q?neRe*pt3Rr1PY~+S}5h*Gw9u zf<+vYO4AFgmj{iuDCMK(%C`#mz4WZvxGM}AG}@oPZAM%HWc_yprjHMh-6txK7brrb zfRw-E5ny9k2pQa}0tgGhMjWm{M{a>Ij;%u4iWGNJ^aeKd(>;MA-5%wkP&W$7m9W!G z#1%No+q}AXlZX9|KBJv5@5Y4aLfi$|uRV7EuSZ^9&Utz*g>#xG*bG5t}WCg2^ z#yl`(`Kjt}3@kvnq2|?GrMZj|hrL5n2upu~60o!C#~KjsF<(G)1Vn1a{;HQ5qB^sl z5J=dMI}AlRR=YdN&w@02ePa5PT!v#Ak=kO1D_#S%43!S>n+C z6G5vGeX~0d*N(GnNx|fV)6Ao%aDtzZ{So3mh;z`oOi{Q18>EMijuWzOd>4&+I6?PQ z07*c$zh#bHV4gTzLl}vOG}6rX2m^%kf1jXVY_YVVmSI7c6&&y)diB8k2t~fM(T=E? z>4p%D)0wa3wvx{+A||2&KU87*M3o4-0lPDPAB&gCjOW{U8{l8B^Mgp;7>qtD^zyRo zDm{MZMhd@|9#~U5xWq$v17(uS!#%Kc)$Zp|J zW7%7-Q@HIbHS*({L|h#o-Sd{}6Go$RO~f7E6w3J17>!>h*BahNJio|eBO4{jZKOdl}HE@VgC zZ@32Q)P$~m2m#+asD_NZTe}g^R|ssY$-+VwaAq7*X!l*IdC{WK>xaC&5cP@IfZ%;0?cL*m#u?3tFcx43`cG?EsU47Ap>@(cXvSbhvR zM*+S?iu!ttPsUW{PKkXQ{DrhUmlG$fVt_HqP*;FAg(K~=MP#6GB5k0W9eMJRnLPA} zl3WN=3&nD`oQXV}dX>Nx;OwVg%JXE}6G@wMgNO*26=+4&#AY?UGr#_x@wEWPnw%`& zWDAw+C@;H9xvS7~`4BEa%w?n5GZCSG3q)igpBsl5gi+jgZk4ya2PTqS}>S zPTC@~r6;*~-G7Gzyma4N1B|VuJUA4wOu)uf#A9U|m>mkcft6xVa$6TBpnDe>FR8(7 z$!uywO9#nkQ41jH-_&QH!*g1Z$}FwOnIHE~NV#tmquA}rH&%&`6o737OO@FfI}Jvh z_)gqJB~k~R7lU07`9pMdv8x-!1c~->?H>0tFl8Ir6?||%lhkS&qta63bU__75g|ZU z*0B~v(ELrZNeo4lg_RF4y5t#Ec-V2e&OTgv+C_wa?1`a&39#| zLJ!cCc{)q75pyb|esqG| zeuh;NZh$uo710}NzNN%EPo_OJ`fJ^@968r!0PhooCebC!_*wkjv~Jzz-AT9vWI86y z6x))-@;pPaG>%c`-ixSP{k5T##3}aSN6toBTBIXvsGC3P8dKnj0;9ln_yM=ktyd5XP>f!he1d2KyEk_Zk!1IuFzYsa zZW`MLp5AD@EEj8TpBevS%R3`GvvW$Ky(^ef#8Q}Y02$5>4{o-Q!w;MwyV;A%1QkEmJui^#Y!QZ%K zvS|RncPNx*E6FdK@xnK~^xWw(P=Ulq+8OBn;EUIvc*=qL)1pr~5zR0NS9~RY;E__G z>&J6DZr1n*B;*aP>4JzE2an?+L7}c))G=i;9T@?1;<5j+*05A&NC-Q?fjlo`wAvaPRmSRG>Pz5Lb-|Rfec~t<~ zN%~_)_CuD)9z1x9kqiB}Xr%E@F20RVsN1`gg&$ZaU|mvs>)nZ70R^%Qv(nwv`ffxz zW68yMU)P6boPjGwU1iMTB$_Te=XMsy7LILB?2(1Fqzgojrw-%g%7vh?{aO+dKTT zv3h4~T_APOjzZMR;j+h!F7tdp93R#JV=2MTj6xV7rpjD`;;t8gUF`}dTM_Z8Nc`xZ z>F*Gt6DtVRrl&-R@n&GHl4s(>6n%~8uF*Z;JM`PQ5Vp=qQVC`CP#^w0dZ&5xrf&#@ zyZDFNW>d^5O=4ZUd`jOXTO;nQa4$ct@hZ~YqM_p4pNxE+KzpeNSCw)K!*B9=t5Hb& zHevAQ^t=5$=<+Q?qeV4d{q&@0`6rP%(80pf*Y9Pn%ID^n4}>541z)75XC}RYK%Jhz z^6Q4~mzKI~xIgxeu{P@l4zEYIEQIH-kcbIu#qLfflE{m<{~)EJ9i~Jd!BIdEB)EGK z>9y=k0n0~0+48{9!7a#rhd?1~39;0eQBe!b$C!4DHh5YR8qe6jC8F^BPP$-Q18tz$ zZo%8$y89c)n`0MoquWIpA`josn>v9#Vpts0n``6NA4-DAeP~z^7;(A`vXsIJWLdMx zRj-eD^Aa;^-|4sZbvJ@+sxK0%vb?!AIOP~9yDRdwsm zOiI~@&~x?T(!6A}hK7+$KR`KH{TRKU$_I1c=kpQJM%dHLtHH!Q(gmk$lYligrD|&* z>p;TH)v?W0obY`^Jie#LB5A&yFk8ZrD)k2&np9niNc04P24!gg0g&iHQ3$Ev zj0KU9jD;qh#j^avw0y1UyumPmhiep@*Q=Abv~%!WQc0ePA45Tw&@QL&gIf%+U1JZz zBn+&P)l66fdhg(<-KAb}*;PaE%RBGw?Y#+TpjNc7|0lfuhJgGcH0nknZ~WZz8uA)O zba)M;IS#%o4D34IH_tMH%pslRkl0D%@)dF@r^H(^<7W~*`K|peYxFmdTqsKkc-FQ9sxlu7tloJ)A{BwaM>vp&u9#1`dd2XCVhyj6kT&s?H00$mKnss` z$q0;TR+pZ=>^KGx5>cJ8n`o5aR^TSiwVq|mRecS={O1~TP{IyfkAty~Yo@{%tTdV$ zdi0C&c+dV8G1lKuLT(9_2>Jhvi!mPmP8Lc4=88S{L@3jrhtCb3|5=D1N-HH`cfrgV z=-c3RB_D^DN!;EVhB#wCsPQLwO4I2YCKRS54W{5MB{~cF;Z9CA7M}80C7_j^xyE;Zi9AChzX>1P7{&~n_g_S8u+Pxc?pASU? z)JdI$3hW%*1tM2K>`#gsZQYhPUF_rFyHSzMmc70OQab2rt;~e(V9jVx`RrqeHcxC1 zmTSqW%cqKn79-S;eWv|xP0U|6I0O8oevs@O1f~$NzG9YCZ?O zeF_~ud|B3X<-s*to#YR7Z|eK)M>dmE7trQhp)a+IeOVxq+xg+ER6LgF3o67U!KLH@ zm1mior4(SlgO|SzGfeClaaR^bDt3cJ?FYGRVanhr7hv&p6RmtGNff+i_3 zWv4P;;gPw*R&ef(7cr*s@IqRok9T>(<8!GT!f51k`-z@GR6q%_=-DwwX;VRJX&EW6 zt`#sOEU;RmD9l-~gq#H~H~y2|pPurww(enr^r}QO;82uvk4PTs z29j6Tebx&=5C2;=+8~Y9s!megz-ZB=jTUP5W#fX^flzW$LETQdjmHmI0VlEt`cBt( z?~ZeLNBzRJ9honB^`ZFN zFX5B&MtYOz?f&uR5AQLcAE?_0?ELyOtY68hH(5K!Xf+a`YwfQq@B~tJ*H1l%5JizI5C~30LKy7`Jka;_x zc%Rx`g}tAyX&6wFIfSTiPBeDMk&M0o`N0R@d7r?D@@k>27hU7GO_>Fn_|J{-xY4hm zdu2F8EL(Orh1M1$K`YXiC_rNt$dLEFvnB1UUH!oJq17B*@E2R-$RRB|yXAX2GqD?C zsXqhE%)kjmtT)N)$xBX4N{>P_;_O>pW=SG~-}of_2vOm*8|yFo&Oso7!iS0&Li{Pz zPcx`8oPKwF4gMbYnIwCvLfn$&T$5%DO=@D9)`c4^$KSYK)1IQtaGy~Z?XsmOG1-5j zxfnGuA4!><+%F70Ar8?lEN~k}J-8dCOJ3SX=dt?~9TQ%Ef7ADy+4E+MH(dwMCizW9 z3Gj*grw=Ps119XDQC0F~_dWsi^QV^0mNtwHE?ykdPn8M3d_qZH@Zf|G=-hu!6AZ0WK6f_p*l^ zz%kV!&+M%r{L3?k>fMQuRag1+1Lm39wZ0X-1N7!*Q_Gbh21Pg5#v;$0cYUG*3Ec@O zJ~oHG{kiX25=NcPb_x+zuBVY(a7Cl@a8tnk*AB}cmYx)YvL15aFy3N#K?jaLe97a` z9tE@9#eTp4IHg!A9jb3OhBs6}ufL8=X+M~;;tQJ?X{d5Bht)jij7rA6PUs09^W*LX z*p*m*7NWXboeS=`3Q9%ha7etl$X67#@lmIm*5|I1jsa^>(2drAILr=DbNIm`6^!2@dm$k3_ z_moF}fR#GoOcw-X)El6>71=e$*%Mw%uQ{O<*T^fQFCU)k(J8D9KUpV z!51jvfBI!gd>#zQi)8(CD6$PHSbzt5r#T)jF@9L734c}$jtVPsO1EgA3?K%|Ir~>N z3%jpyz7rVRb!M^@4K*b@cVd6+3MKf@I&ggeNcthi3qCjEvJ=!n@p_S+4|~zG@2DGJ z5e!NzJAeFsoqC&Fygc4>J62^cI&jgzPYalG%aw-2d~Jgc^b%O@t|m0no_q6 zv|)L%mu+bT7C^$mg`#(&_n(-&D$6c17{s;RbC~v})a^a2Irf3M#zhon-8<Hb5UPenAJ8 zw^%XQ1R7^Pu5y6eKM0%{RURRt(}8jg^`jf!N@dk;qq(;qB|Xe`uuYw1sSTCb9Q)j} zk-^U7`tQ++DJJdT3BuOK!xxfR39K^18`Ts2R16T7P*bBzYI;J_yNbGtbroMx`E_QAfUPZ#(G8`8^d!J!06Zi#qx0gN7 zy&s1iO$>rhD`|IWrI;U~OhQdDBXE| z>)*Z*-FymqXotUIwL|?4w=wwPY+@=+^G2Zk6S8c6xM}zb zlh@CWSpnO;xDUn{cEHRlTI|17(5}4l55TxayL3N!v-sE8#08Y3+BXt{Z=UA3IPmi% zndI6+MbPBtOD1*$iy<>(^K7t`GbpRWGf2FqUeT->@RNHMxEWNM)hfuw`{p1iB16Br61?yN65q`7#V}BuOqh!zSs=03fSeij??ccyK%Dry+ zd`Pzk+ig9UC%hNB=P_~CVWkadAx)CQJqtq`k-SlAK~V#pz5M~uDQ<-{w@1n0HD-Gd zexDRqD2ubyYfIFJs+YC)ZlH>HZK6_7FoM8Z^)MNg0oBb#;j(dlF-1%{qE#_GGWSb6K+a+wGD@o>wZ$ij>C}s{kXK9l0E(dWXJ*DwJ$Ud zy_h$3veU7ByMjTCWcxFEbmZy66uS8qX~?dlWccKWqeEYE-DquHLw z9}K^9{6RtZB`(0PRu|+=_M={um~H#8eE4)q20}LddwL@;1E1?%O}sRJD)!97k9k{EhwSIOq4D zqY?RSKEM&5@VQ#+m=LdUkN02)y>rWn+P4$GWO(thc7D(?A+POP57rqc&*9zvPf*ff zD4wnrC`P58ck4(L#T|VUm--r_F?lZie#r0MKfr5{w7m5cmV)^GP87F>srS1P&(c+m zM}N4y6?+8lq!7!$YB5@__f|d=LtCi4cq86uxqbZ2&A$z*q{yv)^IN`H{S-QLp5}bV z!xnNv7_y>|1y+P*4v?dd)`;2KLxc_e^eCtcW_h0bHz+?`i`Ks4IKxwCx<%)!G|hT@qubh6(jiZ#fdui~>NLv{?_w z^^Tx5vm|SK&ULD+Y@S{`i|!HJ29|%RwIa)HHSWszOKO|h>Fo-AU7#YPKa%

_dKL z0MyphHe$^;9~jSm7EaOezuni1nH>3z6&uovDtL`&wAnqDr-Q%xs=2n45YAuDojlT) zES76Np1tZIWksWTXVpHZ2-*z%1J0`^A%cl!Ce*$tUy(Li`6IGBb`t9r?w4oFzgxE~ zyHIqNJc)34c^hf&(z6^M)&6=byyZtT)Xp3Obg=i^{oXs4)v%yc#Z4U!)0Xx)me{(E zlEYh!VG$-vmtWIwM20m}RDHAFct=68p>o0ZCZ=sJ2U7j8jjrpFRo4`YpUpofFmCI1 zA=z`>ug2YoZm04`A^BW6w~!L zv-@>tD5U8(u0KRa5^eW7aeIfT)ph)Twn87S=^Gxd^nf8+xQVmM;PD(K_Lj1z?u)1e z=2|_q7d>nEux`(w6dC_T)xyzG=I>WKtkd09wao~>q!({l|8MO z14-QKCkjY7csbU8_R`BTphJqX|6CQ8BZ;hoj5F@{E$c*Dwk z_`!LNH7+PMyP9k-X>U+~FW)Cytdyre%!e_=x>ik*KiyTUv#`(=;3+WzxB-}e1J?k$ zWt88vO7)n@$)mIIu<3Uyp%a!KW`T#jo^{;8*ZfCNcUC6lzc(uS3B?}cgmO!Iw~>p2 z(fiml2aK10sF)vvb=S#5Yq)gJDPN}f$tMj3i^CpsI z8OB3%Ybg(n!oTcw0XeN(I*~_+hd7Gj`1b=TBYXub2_7Ye`*Qb0m!6U1kCq{H;MNIT zdiFR=raXUXH$Blkpv<05zsKN}&H<8d_mGiXH$y4!#oj)~1@tklWe0Z+`%RpT&R{7C zHZGJ{L$ebaddCHv(R+Vp!=Ttv8lwm5=s(+cX zjY>!)@D3_^9&j<(Z&L9baIK}<$Y!(`5n)_;vXeqp>F?>% zKBwFtjeSl;o&%n{cmXe7_4ksna`4TQ{lc5w2dp|0hwxb-f?w~7epH9)5EkyJ&i76c zuBfbDPR8~k8zC!OP7SJG%c#A2S%S$ICzIgWJ0^{sDef?3p&T*t$^swsB?Ws6Y!sh| zEW4!<&{@9zya!+%0`}r?8cFQ>`+j%x1U0h+Pt*J>ZgHNS%Aw|woTH#na&*z3+5xK8 zWs1;mIGd$5p9wvy(DvM#*Q7D=I*(%p);7>Zs!ZbW=s`ks&3Wt8nHqnP@CiXo?k+~X z=;^w%BsObkssdT8h-u5($aAXHe zm)Ljq;7cv078P`=0uM}cg6zl6{vGQ<%dS<%RvM=*hX1nENNFldER^x64~^bzj476evY?o+ueKmoK?P zC0XYJ^H=xBN-my+vRC}tU;^>!dQbTWrfrL1yX;HjEC22U4RizTX-8|LH!Xa0;ZRj| z$nXZR%3%F23`O?x@;a?@ZRWd4PV3|YGMZ0K;Pl<^Uf#X;_Xo~Ge_mF|<}Z~CQ>#{% zJs(m^WwSRYXxK}^Cl`lf?y5=I|69Cl!g3t-7m&@I(bqDx&G+W@`F52r8LAiSV6|A` zl{tI%xNI73^Xv4|{!nhhlpc!~|&oJr%HyZ@_ol#Og6) zU)=k2(co8?oA)&Gq#__*NP+Us74j&}2UCd%4*c@H`KrpS%Ypl<9CChivagKVWbVnB z;}c`z6ZIyMZ+2tep;socd;1M5i2R53gicCS=$5WS*$q6*@6Jodb@)A~ys#r~GqrE|U z>-y-+SE-j)Uj=qz50`Nd3L-66Ne^F2JRg%@W^*`oLm2+q^1q)5acBG7O+Q(QOcdJ$ zF$_g$vM=D$q>K!wbRS-(a@WLQGHu{6;ARvlybI+Aol(B(O<}R`&tQRPdBtcQrl!ie zd&(~uEnxMb8numL!o}dPo_J3Ii9%AilprJPzeoH5FmvNvFKPwz z9ZvF#JpY{Pk`IJqhc%yly}gTIpR!XiD6{Yk*vRj8`K^Gri+|mPl)Mz&NJGN>bm24b z%;4Ez+4%^mfokcy?_TZhEY}s~zk1aC$#;Kzf#Z10(0B9w3mIv^FMM~KI_NQ^@$f&rIKWB-%LnW=@x zclas4G_D@uDoMx}p&i~D1T6SJ&jA!pI0dJjPcpd*67T3uQ^vk}Mt;K9Oj=59t^m(^ z(mGz4S6XvYr5Pa)vsbGAiNWNr*U{#G8B(m}-pEKO{kr|o74_;_8B_2e?s2~fg zo#2e<-FG9MYqf7uc+aaSoLj@3ZYvQ}hdEf29U$y|Z^vmjGb80lro`Wo8g*!voQUOs z>OPwqt%#cIwvM+@XMft!j+A=A=s~ht)rt8%r#L+JF*RE3DMv*@O!-AH@I>J@{PiCD z$ZIgUG*iWIUtYzR&i34bkqccLVtK0pVl=C%0T05#q_F1|&Dm!`=B)sYIm_xB)+)Cj z)7+MP_#Z4#j+C5cH$eNJc3XCJI)p=SPTl%jxCcXoN z`6nULK@6Y#s%>zFLk_gF;ujbTJkJwOWB(Bs22f9LkPeMFF#X0plv+&VZDiJvY7ArYw{b}!X}!t;^9U8sznTPft#S)Z*?0+dDM%0 zG~*9{)b7R$L4TTkXP~Pv+M2&+B^*Hj2hz?U$7P#9YxQHvNrHsHZf+)7@{u$?v%lE>!N{^GL1l@+I0Mv>t8ke0t)4O=~%FFkX zJWqMSX+MF}B^il^eXWnqoIzayuB}roa5+@31_^iYh)7GEkNx8M^SxYh6a2~dJ;Rhv z*W|(hnnd9wHTK&?23iLSL(kN|Ldh_M+=r72Es7nlBELvbT2}glWIC;qiteE*V>B{No@EmD@UcwKWySM!CB;Q z-@{&NOWZN%4p=|la2;nOYO@(kGhBF=1~16%t#Wq!X^$|Lhq9Bq{d-lvgrE5o_~OkX zl$1SW$QLALFRtOsmta}xO+8!r~_9pEa- zUM)|6hHbLS``co*?U+!5L4EPEDIa5>Fa37nmfJ00L($sTp>X;n9+37p`F4<+*0U#H zhOtrIlV&heVZ$2%^Dr0_0Hqv{FA)1O`(XJ%Ftz?)Vf930o#0K=@8bI1f~g(sb1oMy z13Iw6>NMvXC3(L19z@@bxT6e~euI5Ipg;qZdgI{p3ArQ=Kz-e~xnqRm$SqV^LwHf< z=*9^)Q^4V&)G*P8nEJYWEx|O?n$Q_+YZDVfNa+Yta zC6Hx*Jf{TPvyEn!4}V>bGxr&ZV;dGr$48RoM5b`~+q+&=h~00+b)!ZrF_>If{nn zK4lR(6I`#ZQ5|^3>{ZcJMkU>dY2*6sSaOIr?CWD* z@25XbR>Kk5gyZcFxwBnUWAC)?Jo>aerF9$3O9bFf+JC+On<9bL6QrF%bm0JJmY_To z@$8YHg>W0}Z~fntU&5mVKr2qm;`JF#_69j}I`l5Aa{vH$^ISICjb5?#_diRCd$c#4 z%elYg^XsQj?%X19%*+3942vTuWnLdpM#tD;l@){GgE2wI{vI7?fipmV_AIqqeEi(E z$9jrrg4U$h$io%wIUt4kJ$Gbraq;=;JF&BgHX$D_ESA#TOSqGO4S>epq_@CTCE2of zOlky8c6$tTK#>5~Qw+0IQLbFNxURlCBfNQ5eB-IXSC_kx9BGyT8^;zdyEI3?NjKQLjqADX%atY^h*w!gD{ooht9!v*Z#ye@1AA9Q;I-&uMf3 zH`#FjeHHKq{#*#u2;grUf!zV6U^~f+Fa`q_e?x1L>vVJ9naBsf223ItA|FZ6@-~(? zEw~-yC!2s5*(~M1U%{u#?7vy&R-d5hi@vET4B|12N&d6aEbu1Vwx+NolfsYZiWoqWveS)(HWE@db!r*U`~JA3I@J|7c0+3n1EPW>S5n29x}BZM^g zm~%l?`?`}zEA#jJo1M4HoY$+L)CX=71IHHF5sj>#3+U#BbEl}jPdvN2pDx^boc%4r z8#7GH;X@4NNF5Atj9}_@d49d{vuNt*+qbr!YYreV3*SuB(Tk3|#T~speu1lcS3}lf zpY=92PmM3i@5#GkR6O|zF_oD`-72~Lb*+$L7uS0{8G2=^0vcDf9-UAd41U)&M8GM% zt8CJGe>t*dJig9;f9gv_A%@FK{dv7KW%hw?G5-H^L zO@FdvYS4T6$9cl3V&as9|K|3PJ**8gG@p!q>a%6Adn)+4!t4RNW^fV9PXz=N`-jGc z<2i$Lbt@Xs^>!Lq_18tiTkLQJcn2y054!wZ?CCR)eC=Dw^zST+sgj47Ts+2(F{%G5 zobr5Pp+z4h;YPk!NJ=S#rhZT9o5|J9o0NQjZG zfe=9YoLolTXWVWG3pzH6hF4~=_C&y?%6H8^B(%ktI`i+G&^OHv+#hoLt;J8hf~)kG z$IeTY2ljtZN@igKd@qz~lGe~{HoaB9-F}W6bk%19KSy{s)L0zz-(n~7S=b6*+qdOp zsYdbz{ggepxxFfM0hUqNdkdI`tQ!yz$GCMiC}n+c2~xtCm801uzId=x7xS>keD!{#lbk|$aq z*^jtHI1J&uGlcrmfsHtWQ~`%CNu`~k_@c5%rmm|D+8X3Vrz zJA(EsJfh%y=+P@bM+yq*C1zPq=_}4@#si~pDM;D`UhwIC_WBQJ^pg(2p7tPceLsuR+Dy-EjTWz0w;eKDKt3zGvJcX*N#^!(H*o>YFe}5u@}Tb7Cyhb z&R0IC3xK9EkOBwnjpou1^cpncyu#bDqAH^2&1aXCH1)>pQ}#Wb=@YW#&T#q74bCy_ zi@_qmq{)!KmPq=ySlN`R=M`YK zLt{Vl9N75v-B=1WkBo2Ng;Zeu#b-I(?T7qz(qBCud{3ksA6-H%g2|1?4#(TyXQqBg z>|Ot6qO!N~$F{!f!k0^v!UI=NCo6%kuVx-<@0VTL5H^QgY~m%3mZEasF{g76y@|*|j#A5oh!~}8*}0~f!bmccfVGd^qrSg<_YcJQ%%9co@s47B zbZG{0t`OU8NjBKKZtCsf)JQY&f~NNMTLObfw>s#P-XC-Qi#MEtK{hw`*A^fYI+=aM z8gZxTj!jg$<(<8~Jidn01}QNyGx0XJ)Q&d1G;m3@i~w}z9m&&fAXyuhd6`A3`)tRT zs?K-7=Hna-s1}5lfKQI1bzm&=NND=?kj*tRiO=Uk$B%eYIqCUI3_f6X%FAWrg}`^$V$#k;6RJSeE0bg5CnStPWsh z5I6FE<~=Z0$M9$R*U`e}RD^MAIZ!PEnBV$#j=LUFngEdiCm-OC!a%TA#*O zTYMK+-I(M)Fj7?a4hhNYnkv>KEWQ*!p{2TbDS*V~HaR3b?MSxT1E-F+t&UE`zflev z;lp}6e^xF$go>IR(4TF)C6{-m+b_-OP)b3eQg|BP)DMZK>S;lNcoT>%CD90du&D{Q6SH;Q0%rY*&=0 zBv>k7pX6_ECPH=R3A$tPaFJj{+Iet-O}}3VKjm^gJlgAvPkj76sOKh7Eg6I4miQ03 zeRt!kk8&Enp80j5hxs<=nb)$O@zMKTqEFK7rRoK*!x(2sw+|*gTQs>2soyryKBOX- z()1t)uxxK9Xa`QThg}<~851+a@c+hAO5^F;$}ohyM{inc9Amhe^FUCb@>8hPc*ww=BuLbJ~XUO)k3quw*GD(9M zV=9YB$s3nG{>If%j^vglEEo6HH1Gx1&noVnoWA})K~8gH#dq|%q^7T6LOV_?E1g?Z z*kj9ewQ}wEDlZtfZ4u#EmbcGdmBGLB^ye@a1lW1A%>pb4;-=kC6Df>w;W#F@vXyvu zM)?s=u75uPon_z|*2>jXBt)UT40~qJUUZznD9H{e^4e7~5iluEfy6DWNH}sM%~~Pm z$9&U`g*5H2WW8aBubN}ite-M><2N837z(PHGTrOlDYDm9^kw@F$eR1V=u`|4we&uH zEEW$Rx&OD|8%cF~pKtICq3A9nzc>DazoE^*)F1k&@0Xijjx1%Aq;TrS0FoAeKTRC3 zBi^X?+ciCHYBT*%0Fo!=;w8!x;NPWymc4D@*ysEHiZm94#V_#)q0di9YbZ9e6|qx2 zd2lR2YRn{oO{GTZYh1mXp!#@@js*&J4ljZCkS(G^#|fO{z?ljRvI z!7U_>KkK@-&{;^_JndD_kW_D|bI&VCJ{qus4l3Op=7BqubY1aB-_Z9Rq5)fF+3Opv zZ>sb9fhRk_2UUL+bxAwkEz}Ce3J%}eXUzmC+)j6$KdUE2Vb2;Qm87y<+S@|PDjwfz z9uDLWXU{Y?{?dzVOE1#z1Sls)-$^@h^oShAjUBU?zTO0~AE*}r4BObk&bJSewGl62 zq0fM~kaV2a;~?rilp^B{YMVqx-OWG`qz!FfbENaJpS8nauFnuu$7Z>Id`nxuO9N-6Y3K5BbD(4;c{w=l+f!k*|4hC>M z@elU$8iPQZ%ik8SZK76ilmnRfX=m(m5%tV=&PyIuXEWUcxLCnLAWa4f+XS>e@_{G4 zx|4D%-#H5`fuDsSYf-O$lI&_|q6kzi4Oyk(@VHbsIn4bbGl3NrY)5K=zVa?sl;r1- zbf{l;4jPyC9(zjpew5S1vm;ER)?WqDrI@?z&r=1SrTpd3avX?UEXTaL$B?-vbMz{l zHb+_QiQTjOvw#-2&E0T}>Ss;s=O!|=Z+>T9sO39*UN7#Gr0;uP46H*9F=BEH>+-p4 zntTiE!cz)8O8)pCzL5|=eHa6dW!uNDW_`kavaeVB^a$^NR;os;DcM~I)Hth^adatI z+$$wel69*>(`BOVKrC-`6D@NJ=a^z5XqWT}=i8&Zp!abK84EYmAV$6@ike6M*d-X+ zUiN$M8U{|A3IhFie>|HPgfoccEnWae06Vgcm$&j?hT{((%c`ki!KB6!TX^E;^2HOY zp{{O>zGTthU3Ng;C?2ckm%>YK6lITlWwm7V##a?Go-Y8OkzN^mQ;bA5@sr+h?&&VQ z{~+{zEt=>uZaWfrrIU($URNPlAM@uTL#fgcvHSrf87`s~4pLd`N^a5c=rshD)<1~E zs>_yKJmDA6PjWb6XB;Yock2k!Dj^zf`bPJcW#@P)I})pgmPgp3zUq{|T}1jM>&h}) zpM=-6AlsIhlS?Zu!WgzI4pyPuH|z74~}S$#r`j zSS@+#?mMKbH&dSV1z386b##u+`i4k%a)t4(?8!-7@uvlZuS?Isr{{6yW_-I^$ld{TLt1wo?D8S z<59g-v~XT8j{W-d3#CQfl?=dJY|ju`{;9}7ahS$Ck^zeAKh zy?sZt$u&+NI~~d+wy%)a*jchsEK&(7>PE19;=ejUp)eA>GB@jXSuOoXoNLb{lOF#y z&Lx*~@d5Y2xjof5TTgf4OrUR;&n+t|_(3{2Vc#TIehXfP(2u6}?>fgKTVFYRbX)^e z%Y9u)RWNhpb|61+?_VXtgqTe3r@ssZnL%prmhVK@u?{dNwTz}#-pcU(G zrd&6lcneDDQUck2g*gvSGO~18@Pq#)-gGd8N6&n8zT^D)4*W^<9kznrQC96o>O6IX zT0L5nV6AZ0G(Tcav4$wd4>{e3yRQ3Qg7&(C+Aoz?$&iqebgv8#6y4UQL&*mIhT=6- zx>H>R7}(b^byhU4{E_3N?_1j&V7O6fUf_4AK!pD{0}x4OGj@oEHJ_E#1_(1AoN5i- z|3{%6-qnCtSht_b&jA^)Re5*01Fyus&!n zpn3pYxdzT{awmKP$CK$6#UxgDu@gzDfBwAD%3pj>F4YihMaURN!{0J4orLSD)eG%< zZ7C%p?BLvD9{-mY3}xKs-bQgGe)&A>G8j*mHHGg6x@s@7dPVUuhY=0a6TG)7Jo{Ac zZO_5Rb1bwbBA1_^3EA%a_v!uZJ0*_Bc$E{AHXdn8PTHBf1>Ll+@fXowT~_XkGh^hU zmGi|I`@9s_v_?`4eo5UGbp?&K0u^J+IYmo;^I|PtU8X!LxbZdvG6@&WQ4Bg6q&4th z&RTSgTo@vZqcHLxYHjN3wD~rSKJ(8nyG^+G-wnF=+1F~j=NW^_$7r#Z0|A>Ce)RUW z-yi)OC*>nsgZAf%#hN-yeZE{Tr{Q@?McKgEeG4s=ak`_!EO)ym7hvtH;v6 zEpO6^IsPv&#V6mmi_dE0#mW+k;&9ZragCtc_G;FfB8Hx?up1aU{|aATwglfCOLwhH z-8QHcCZm6`;($LtJGYT?Vt+ag;h;mYL}XS=Rqq=L%cLUf~e#7X(#C zT<`|ponn(X#R(`wuUw`bjLv{az=TdON*f%ZDn%iSC#$9Yb2+x^Lj7Q^!4a%_Am$^m zr^Zshq+ z|~pQOZaj3t0n9e=(eEy-11~V8n|0iJgHj`mK#F@56N{a1d>;O>4N9Kd}t;Pd9Pk> zrJE|Y1<003yfSNCLO$h_4?pH%sxxih5F73v6Egu825Wx+R%_VTo$~(_15S=15K(D{LZ0Fc$AMP+*-hHKYPNU3j z^8a5jCZ!BjUt~Snjhx(jWka_f9$u%5M0!-gW@&JuhWC2@UroMh$x6*=~xMKE`d?@5KW+#j4+~&l=UrMH^NJ$6`+H0sjcmQ<;C6O4H z(1ogph_&gpyrwHuPI$Eox!W#WA^YMP_e?tA><>R=DV}_`|KC`){0FSYO6@M}hLSFq zidJpiS}t=`E5#89+S@#3`}y#0#xX78Ua?7ycCM-M4*dO_k#$XeGv%%n=j)#gZtz`? zG|m?mjLDrnJB&Xv?g&pgRrNT&Zf>!u>2%#Lc^LU2UHbPe*O464n17ic;U~f61w$JX zSJ-nHMg-hg5>YHJMu+qG)!HYYDM&iaov?d4diJ)R=iW;0ka{I_akmz$uplTlq0(T#H)rMberq0}j46Ke$r1rE!I!ts;_tmfK#ycF|vC3@_d(yhMoUcM{ zQh>D?m54^CwFA2V;nRI;Ztm1jlWXuoWBwlEkG9XE1;dqh3GD1ANUTpnEiB2hgzk`N zNt+#Ud2~f-`PzCjq^{ zxS;cX>n)$&|5Et0{&V57ZhYpwD*ky1;sMGS?K}S|RitIP3%kTv^>}ZuN{LFLzb*0k z1%5Bxt6Zlj(>q4SDFMj|`NxmqfjCm#g@Ouqof&{)?olKR$fJ>?;z>9=3koUZkC z%CEEW_86x8O?V#puf^fq;0|Sjx?gt_Oh4*Zih&<9{QgAOioMeN_UWrs=@Pao_-RWJ zIO!3Td5Fhlp$dIVDke{N4H>*8g^{|yoiHY-Lq&~fVpoSPl)L1$2(rbxFHFkpI!H7@ zBM_KV*C_yh@Eyt?I8tIR8Ps-DYd39J2hm^i-K?yoSEN~%-lZ5KyB-I93(OU7%P@;9lGs(iqyTM## z^!>i@0XfNczqMpgAQM|E5Cgp2>$cb-lb~eEarr;PwbtGlT$INUfb(x(|I-&Ds24#@ zX2m1+A1ADMI#?F|U#l#Mh|T*mluXLA{S=51uA zHH?XskFUM|@6tz_PZuamIcEl3b#y$G`859D1j-?Tw>>|27+G@_R8|LMDx5wHFee^ojud9RgIo*Lon9cS8JuCj!f zqVAQzHnnUAm_wvnS{tIQqq}W{J5%%B4S^oaMoo}4!IOH2d7_ggC_2maTt%&N=B?MA z-#|xMa5*ZDMg&HUQZO?Fx8r=ze5SK!QjM+mbm%I7SDVC_-8~)Nvt?KM!AZKg>a9Mt4Ir43C{tzA@Z4H4T~UNHuvcSkh@#Bi3+iD?qkXUvN^SvKftT zFj)`|?*QNHzCa(XW@g~MEQ?Wir13M986nuPe)hiU;+~%)T&Ydk5?u3G9&Lx}}snTDRa>t)#X``3?AW#IQR$PH3 zYagdyW~Y)mqk!KI*GhxT$G~I4>KIPxaj{J+%SdyQmy78TQa@P`dpF&;50(u%@~S>a z2g#C72@il8G~|Ev+$IqALD@$@Rbge(i%7!!@Ii1ile$WPs}UdD>aa9mpj}SHtw^e! zBe$Qu{uAo~0K)gA+*AXva)`N{1!Z@}^s)ExO>f=Jsvily2^P7%TdawQx5_{Q4Sa)3 zd1X%byPWtosK+bz#Y4w$NP`zcFY9R9F{}|Ju&2K2Ek2-!{@dVHIEtOi90$7G>R_^J15<9WAymZj@k~eFC5+CwL!1w&r5apWdV-E=JR4%~DZtg` zH3;Odc=@k>d~H|%>R5q^-{ZYZ{_~U267CLOTSkc?oMBVMOSVtCi-a`qKT0!79aB`Y ztuwp#5#Gp#T2*}{EBczXuS?5*w8^|`*4N0fr3|ks#XSi?{!0^Ol)Au+_M`j z?%XhXZ$XD4_Ra$8*8k3|w__WxF&wWMbJfLQA`R#I56b%~J01n*;-4e0o+@0TmLrhz zz!l#IvMHKdM~ydQ0lD$pkGP&o4`39I>^Mku7BvD5NtSS^*>9EJ6o7XE*ve}jo6P!! znyURUzluxIdT-9sjSQfWXwR%RR#^@o&Q?w>8?qvOnwZRCi3Brx^ZEPto?CI1QpV$rqIF*POPi9 z%(7qJ($d9yH%D&(tz@RPkRUJ8${*;V`QL=Y`vgt%u^^GChUk$`JO%in&vKH6FFsnv zmv}7xvnp6{f7hy`NXf5STV$Mf2sj_YzJa=P&!lO8&cg-m2!8B8a|Gxp4okkN*?ij9qbr8`R zuYGY)X1ZJRYa##gZ{I!E%=;=lwxUjv7yg_nyAq2Ie(BZh>L-!PMTq&!wyDy7UNkR` zQuaq?vRP%whr%4L^t9QW2L;;Ou2gxxN3Y*PcU>{DZvT1~Q+xGle>*3a z(tUxu!OU{!hrOk7SbZh8`sbH=8X=>+v-)g{Usl2JzIN$?dF+W&eQrKw} z@!dxty}dYzKahJcsuS6dx&-$*D{79VYeo+Toqc(;j@z#+!ZneI=@~!9{-ap%LE@ny zh8WJh?iDxaE8-YB9+L<@i-d;V%=+**XQw;K=mJOX%{Q}=`%oKW?#o1H z*mT2aoH$ff&bqO)7ly^hzm|9MY`iI1VLR>)w;s3u_}uUVVwr(i<7{K&$RzZ+ydpf7 z8S25>sF#!K>BI$ggxc;Fw`x{=XX#fzuHIi(FLJkBIKe0Mv6sb1-`VGU)jf}QG>{C_ zKb8E0SGN<7=u;VmjG2NPT43cc$nhKO37vMEbOZ{;q>S>p>nDzJaN|LF28HbqWzJ&{ z`3Y}k8-mN|we_XH<8s~?Wg_;=xkDZihBy|7Jf{+0-^WiD<_}fz{3%Wfd@Yb@3EQ(rR8vms(GTNL0d-DO|L zxxR%1_UOq&NNut+hHRhTMjUFslDM$8L^UcP@BD{2W0tHwMquL!Zhhl&HflS(XymJb z;C;Yc8WwsCZ%DvgP>Kf4nnkj$C{xb=iC;yyp=)mi&ukIkEAaEem;>zmi4jt%JUJ!# z#|PgXDsCoJHpfP^xzT7Axbb57M!JL2=p&s_#E*Bp%>tK@apdoa=R&Uuw0hp67&^B6>A%1e11<4+1b(F26G23IfuNR>VM+6jf8PK?HycMFG9Q`M)x1;1J+(SCR(=nhGG1yF^m zp#W;V(Fh6MzLV09xZ|=aCit^h`MGw2*o)>kvSI=JWA*~aYqF8c=Gma@XE{#(!|S%5 z{|inrrj;rFqk2_2SvCHCNsVDhJZs3wjb2}79ME@&bdY@h ztGNcMV-my>lXmenlkt57#-o+_5n}VxUhbOxG)djw;Urj0|4t$ zQXrrG?gt0%kxikNPY#2{>_v-~N`bvWZi>V@spkT~@85&Pa>YN68vg;>Uqzut1WcVM zkZS&j%>Fej12>c)XN{jj)GZ#G^>vY_+$lED5^p_3O;`)DwUl=I4{(oII`Ty%O zTmM7H<6hrnQ<8G@ni@s6I?zALMWK4OMEnQ$LlDmjq3=KE5%z`L zy_(Z;_L#WKE#-6k@0Pp&(Rc1f&jNNX65q88Rq4)GJl_=J3!y0s8brJN;YK`EJ6rlo z;vCa66>B_b8%-VxOl*FCJu!|~rB6*n&UW&OgHEK_51?^E0NWHckrEOH< zsRGgo9qApU28i?;LP>p|>$|`GoxATD-#KI4f0L0l=lqqq=E_)OxxNY~Nb<-ukvFe` zWLVl~`L}>KJ&n@QIc6r40~a~1W63OSj`-V&q7e)NKyjz;?cYxbL93TSX6W-<-T~Ms zx{YuZg{^e|dG^Lc)|!-G?rJ6Qfz1ruQRKxhd{sLP@;m&LaDCH2DX zD`ZXFs5F@P#KBxr*@^5nYH;&W`klmt7yzG>`?!eYL$GK=E3u@lq!%Aa;jOcRdhHXk?*#y(;x=ZiHq1(1wFSRXNGHUqH^Uf*P{*ByJ$o`eXQ$--27^Z;XZh$@ZZFilqiM3}K}-z1Kb(fj zI-!{N(98vwqw63wdlFuAC$X7_uo5SBXJ=orQ!kZ`>_<^!AXW3TVG)$bq2j9h#y?+P zpnl`Sg~FDUk1ZnPpRA~#|Kwd66^HfSdA^XUaCBBb^w}~w(8-C;QtTn%X7%?#V_5I` z$-1;_8bP$>1$QMX;r164^~ih2;jwp#^C>@3@y59J6B9}oP|3&yPP3(o4Ifg5T^3TSkWB97UL3(&U|1(yr#s~mz2!s zFl^A8g=5{Co4>Gtfysbs7@y+T19x(&Ec6Nu+@1Z)CSB;3MUbNRh%>o88Gon!6dQZa zFb=T-<^j+Uy3xLMhH^!dl z^X5;Nn!W7zYzCG>=obg!@W{59^O+vz(5X5gAD$dg>Ypw03?Eiatdv27za6NS6tBEQgn>7_xj865#uJ@UOe4g!er% z_njoSj2Z5V{pY^Fjn6%7SC3xA#nmgptw~?&@wH{K`%U2)u0Kf(@qly3mnb&&j~#3s zTAu$oMQlSvBg`g`!$=5yNL}T;ERs=cDghIA;**qe5 zeK*2>ou{Y%@lRiC*>jFNNh?L`izYK|V1wP|+i%avwSUD^=XZ)x!; z8`ZV=_!=(P^A#Z8m{+h1Oz!MD^sG&`iU2k7fTiFW;fK_@962JqE%_AWwqJt$93-;+ zs0n0ihF;8E6;=J1H`M(AhI}#*2mffH3hcCN>;Z3SZr%-l9{}rt9Yq^CWc3I1kYKNM zV6(3muBzv-k0#w%@tpaxoOXxPXys}3M=R9HD>Kht=AF5#ruD2~R?R71oPpfl;%BLT z{>u4qT>;vg#ck!&x0Byu58A&;-0^GexDXPQe(lHyYCeZjzMO>$Awb&n~5f*=@J`Y4UN`B}RJ;hKSAZ_5UqYN9if z^J}A=E_(maSZU39Mx^N4Moe_#$UcI*U%Y?u#S=dk_vv0(!lNF<^OM>KXC&TO9JXjG zwWqbJG;8A3zNLoD;cYca&m&W7uAP(KKtcqt+=r5h+H9$waW|ZNqV58TIs{ zq;0XhP@YkF)$VbhSpTZw(PTgF!ltNHODh;i!I@NJ1Q}u#6`;<;rzIs57JqL*^=`a) zX})9lbb~*%y^HtVt(R)96amiNNND@aYHxmL;^R{B5%~v^{Nv>3{kYY?$$-Gg4}pX(l@$d>+LkZ_dX3vt}U^mQ9s+; z@>RDPy1mxwdq#{7UHn_8$3W}%;Rns=tThV0xdTMw=U>Th4)8RY{G>A|A>@i`r`0|C zfoHIZ&L_Q02=Ul=+sLs-et5zpfk?vkcuRI}C$eQ&0|T_1t&ca>4WnH7E?(sb%IU{* zdN-*?N-e17%@u8%>MDBZXAE6ci&gwDbQnPyR0dtyM2>VL(`S~07~ zC%XkkXre)ubC1^?k5AFcLPppkk4or)^lg#+IQ)+;LRweEG&%+Yj0`3IL`cIo+#*_U zT0cn>nkv}3>>^p>hOaTMl)KN83E;HoZ#IdG(#Boefo~r790(r_K(|u`uO=${p8_w` zxA@3ZtYtd(R)z4Kf>!LLCfE4SzWzyndD%BC zKT%y;5191IJQ5(GA|hcr(T#h{`2_iMbor=~d5G5fqU$l;M;@zEDK_(jjZ! zd-;GA-mYA%@iWs5;`PRsrq$j7e^9~{bZjhQC2{1dDM2wPwI>%XrYDja69?%9K5t&d zyyKfou92*r$QyFA@Q^KCBt(Q{ocD~L8+klPrae5BFSfC6WKzN8)7^<=y5GAv9Grin z_o?3dYXCDc@aDl2YC7=HO6$e#q1U$=Y}eYJ?0jdr^(Hg9>v8j0sC!VPut;m?pXcnP|LVnM9W|3HeeJ|U|hq6KST-oUi*3)1S8nIY+4#|{^!K5YeW zTin*1`P;?i{yrO3%hAZS5OCC!^VDt`~_tMLnLBFk64Zu|=nJ8gWsi8hY9QG7$ef;qV!H^gZGCszV3IuFVj6Sn=*wY9Kqzs4o$^bOMXG+W;Czqw1PJFIt>r zJ6Oeovs%ZZa!~s2XJMK#9)*|BZl~s;BqGuUUjaRl;xC|&ghcCiNGMC4F*&O?U zf5@bf#94YJrQFcuWv*? z45}ooTml8`@lkP@t0|v_j-^hE60_W|Z8M$Idz2$!w!)OW^3(p{f{XAF=5yA3t8l@S zF#3PXU_tJOr7w_^ayA?}?tzV`SShj=J)B%C3IptMqOlGRGhc9goq+W3T4T|Mb~P z?+0K9y3YKO^5#N4J;BY655jq)uDLJIow0s!J?UfhWfy9XOy#=|T<_%%R-Xsv>AZuZ znEKTxa&<&IQMNd`jn6eFz5(4t3_bA%N+q$$a0N#~&XdFHvopTfo?Hj+;sr6JS2Pady# zOitxt?e#sZp2YH(uYJC&8a&FDWErD`q zAVIz`=ccYjCLjJ>Vc5t>a(A3~WuC|60s< zg1p!Ci+J#Z{(q#7^avK``!w)dOpu@$i1@Xbp8chwg~%s+w-YsTo8-x5uxe$vZn3@e zKtivy-~=)4fOFf)$Q-le57K*1sd*#m{DnRA7WH?wWxASJ;F_aNmEse7AmC4FTV5?kQ5DC-Y~XK!svDy@_r_412e!d4 zm-gC`zxtG`r)A1n6w{^Q;dmp={Ya#I%ZIIJQCFm$t1KG%oGa@NvFluc?A}evi3)61 zKv!mzWoK+l!Jz*ItjWeP|Gv0sr35*`=vi(XlA|y0!;+5)E6=?cc(osPbqGFX)cO5& zbh*_*0B|P4gXu zW8eU2y({n>;yq*Rge923$X#56M^lC+bQL<#AYbVBtya>O3&~~M zF`6VZH@3TOSk4d_f(QBpIYL}JpGp4fHKgMA7m|C0m^F$;iK;(!7#&x;;V5xYhWA%O zl|G5S|Mm1B_`7eBE1w*{@@zjR&qoG#TlDL(`ChwbN!UT!hz*|ImNFcKy+RF1f6q(dW5-EJm&Dc)i%&%2RS3^i&-+5t*d<$q9%;?Ya+H+93w1*G{YmV^xw9U1R>Uvazb6fL_G{UTrIfp+&S)oavYo0{+ z7b`)x0dp`8Q^V^tUQayUEEoQM#QtNL(lP5@x>$!pl~uZ_ zq%?lHfFAJvz7CDy`W%^<%6a3bB4po%a_E`Awu71>s>%L+)2;EU;DAQ*O8zo@O>4Hi z*K_*4Cf0sY#pp|%v12-9DGSwGpJJ+{tm%FMJ*a5S-4NjQp}O2KI6oS+x_ehCeZ0$9 ze;*FXFI$;GtG<3uza1l}2mXq5!5^p1126InvE|e>{6+FhqPwP=kV`-!O*_AM(XYpn z(S&@qX7u+jfUp|%$Ry%lFEcYZbXr|Tp5kQ9b`LC!3{6B)F&XGmTrp9mozNUA^Ardxtzb zz73dQQGNr_M}`XJ1>aK>Ej~lGU*KiPdLEZ?iARC+6_pQkm9h#DBy^&quh*eTUSZvD@$6?hSEtgXm6i+yMaPINlReE7L z3G^2}b4wh4tMQG>W~pxMW^+GWqa$La@`voJO|?Iii2ai+Ju>T@MMzkPIO<&q<6aqG z@2mdG&W9ecclgdh%N$87=9V=gaSSbDzTQt<9qy(1Fo3(vL-{?^N)IZ=xx?)Kd?Ap+ zgQO>(QG^TIiM~D+3#*wY29dbMllTIEz{9Q#s^npK0q*L}# zuY`c#R2k;)e>2^c%2P=wyuZ+dGQSbjcL;KATo-A&OXti7=N6N^U%hsW14lb331RaPX+o zElVYKZ8`IacJnycKL;}Rp!wNqMpfu4M7JAaYtK+X4Egy-@LDV^2faCn^QDm01=LrLr!L6O! zG6UG@I3fi8J@DRKOukaIOdlroBG>sf@S(KKKPX<_U!)+sn4uuuypKtnipf?}YYVj7NcX4>~0Iu^gNXlm{BZ2Gl1t0ak+nnaYEAX?np*%0w z$M^#F1!wtFIG00};;zVI|@e;jSW12(1#*m*mteE)B zEFOs9NlnVWj4eLGbND_!8M|xnI6gIfIyKo+Q7z-O_aNrSe*1+2861dhKTXV`pS7|# zwj|qcBxZ;2!pwhCll0*&rVoPtwpY~70o@;T9Z8;UMb;f!b-#aJ6yyd*=)M)LAV%ph zGNR_12u1K!MiPd9u2KMhBU)3z?%Ni7ciGt2%2GgPc=6pY2djckBAV(HRnND`={9vX zmV3mW@CSNH>R>pYhu#_wKoMv;zsvC;j!M$cSOJ$?bUqn>^Y=ww$0*TWkrrOvUkz*6 zN#EsA_j|gF>9zWmcOtH0yK?hy)I>k{R%J*le%oIU@`LlR6Si6-1^5cL+XPJzJ9{nFm-lQoYWljH)&ecMnro?haeXrC59skj zrHn0aV;;Py2s$!8dnJyR{IE9w1HEkDJgW7Eiq0rA@D{@&zVUdWSMF*72X9u~RJZp3 z;5d)T_kiGzY?Sw~+u}Bl>WlMl4iOQQTetNNZ=Frowu<}9!`ru`-22&Jw_J2zO@Q?k z4sM1;-}gkPYSI@VvQf(MR@aa>Y|lZWpT@BKO}C8#9mN|oU7q95#$Mlk3%B1RdCf|R zj>Q#@UcPX7XuvdAP~@gO`6=05?e^p>=yb4x=e+EfS>`5d++C?SfC?g=E*=-vyUWJQ zZ~9grnvwA~dcne=El84!XSe6g#UpE8+~R6YtbyK)lIFYPcrmbr4kCXpnP{|2{Ksb3 z!Cq1V)DnlH1{}5n$?>n7xCHP0M3p|O+`DVPjYL5&E#E!$7l@jJx(N56Fi~enlnof& zFy1tRqvD=f2GU>F?+|Rclr8D#%pEe{U3^9)sUZ*)USpWg!jTvpE+I2NjGdU^R_9=( ziedrfRVIPD1IW5mXY+U9P+n>#tJt7WytGIo!T#w{j1dRw3AyU#2|V#O6+9af6adRl z<|7u(?4_iIg}4UcPh;~HN%uvE+zIQ5W9SjR^XRZX{#-ow%tbu{vKsYH4oVAW5RVe; z8L&*&;QcM-^n)g3Ze`|ZQ4$;^U;~If#YcY;cru(&5Wi_&1T4f~mw)kr%+`f^&YN}G zNf6{#gSRxUFUf`Bb;{rex5)^Q(qo6Q8%qT0?v++925dpftPm6D=#BB0bwi(}V#@+T z_?qwgG23axdGcwhB`nsdZ!=gS&L!#y^g7LVzQ>ab7U;_1tEEuta^hZ4=9T9}o{W(p zluh*0SCk*@uwT)apJ+qBX2|(hLSAO&bGO!#_5(1(91`z-$%1wq^;_SmSKEtxOCb5X zEe-xZz?d>x8V`-Fft`)r{lT0IJzNj#FOXm5#vQ{)v#k3Pp>~o!mJnHa*4XG4Ifq|r zY=kP}+udws`GO7#!{yND##UsiaOgHAxvG_(+G2op82U?WTv=XU-1=&rS6+C_*+odx z5YR9YmZ$m`+K+OYAk}RYiu%4x;P~zAgQo!$)L})wxk@IXLV}+2 z*y?+3iv(VP7VI`(>Rv8(O*nz$8Y|4haYtmqCNRYw@}+iBXKo2rD*btK=nqxC89FC_ z7&q=HARKWl@Dob33w|%{cKx#{)7UA>30gAD0#?zGg6|Xj{oXP!PWG z6=%7dEeBmffm2G@+Mp%hD`t^X4VY=k*W;BEbmQCQOoXiy`ePF>UD*$UhW2acxeQ0T zz4*2M+FATO$oq#$z^iwD=Y8MzW8TGW_^rITx?d9f^s#%; zCiRR^KL5e~Jf4NvzoAxz)exVemG7fZ+jP6sDE%X}@-d}r#7VLek$^Hl525Ul7`T52 zx7$1p7P4-2{n8vl`7H0xw+uEfTiJiiUQ?#haNMzR{lI@pr~A8l?6=BMa#hb*gfqk0 z%&i-j64p3N>_f79n3yeuI`4?yieX0Y(Mfe6q!<+cSa@4!Xh)tQrzM0RA=bEt!B_&8kq$jQrve4INThZxuG!xDS3lGDMc{U z4y9<8l&C9{{!qs9=dE~dxYe}LXR~yB`JPwz1{P(Ruth=Q_mUX9kkRyC489OWT9&$5 zCe{9ZnaIoc*I_p9n^y-Nog*Lo$_T$*ZyaDm&8NKseTeR)cc>B&Fy4W0ppD7HLZoZK z-w9I?RNNXQPZix_yghE<4zKT#QP93cP&(+f^i5-F3XXcMzrk1?evjq5NW~Fk$AI7 zZr?BmkCD4o^`5^^c>jPCS1Qsz z=i{t6gPvWLXPp7gM?HUEX?}t@JFb&W+0Fx8TW71gJLkT+N9yt%#O2a`9${kM0wBg_ zako7a$ofIZ-If;}aTg6I)@m*~0R8Mcy0ro!Q%#G!i7IHU5lWp~_e zc~HeS7rrdT;xSN^1&U*vLzB{^QgZSs2yW23L$AR7Ncw&ryvIQWviWFtgLBOa5i${z&Z7*l)ZRU#?n7H6<5f#deDluj~*Lrsl`*^mB z+jt{%mRe-cDXH3Tltu~*XGxZO`hr5cjf{(%$s?@qPsd7?~jGQHmgCG$VoJl2Z(Na^oDhy_T^?*EE) z+&!Lt7xsnKUFG+~(2hvBfqJNx)TZo{UrDP8xB9AiT~BQhVkc2IHA*otPenjdzx-ws z4J%G&9s9?%hLJks7b*+5X&U_daRuC_;1o(!_LbQ^T%mHkVL&FeNGtO^xT1Ll!tuAu zof*TYk`PN8Wt!CG5Ot3(d##1W=T$mr*+r(%p6`Hv^|{U;<70dDBc)F35_mB!RHYy` z?S)!p^#!>`>-ZLYBo|X)IVWM)m*xK$+Q*B;WM{OVQwXA|ipp9~T(uN(B9ajjU83*j&;Od@eE=9s8?uw`GTJ>eg*- zgYCN8&&kviPhtWDs!-I|r_eZJsJNhYcUL)2P8&#ERQ6TGiRNW!&Wys^{IEkWQSwE}c~(uGn-$+@40p;b7IFCLacX zT;}OM6m-^sa{QE}I`)Uzgc zVo~YC>ZWC1uu{J(!0c(ZIQW0#0~z9B1Lmst^$1jeC#bY%LBmb|J@5NmPLncwSgc|rc)u0>DcPw%#TJ=EQ69JlY! z#2L|q{7(NyV#rb7M$RW*)%{Y#>@pkLlZLyC8-l{g!&EPPzUWhX1WgEn@*Y+A;L64T zG4Sgvknn@Ff@;BcqEisNpXMApuRKRQnz$LOHkcNC>pEbVEN$C*ExP8-J+JDd)ow-) zmr5UH1)cP7VtE|3=4T9!bz5FM7SSKSzpd%zFA@9Tv0Z|4kS|}bA8whPiR&k`SE^iC zjh~JZsJ2nztQp3*H6HBe>LlrXo8zh2vUue`k2vx^{BUgqb%Q*@cJo6xc9H?wbLSsH zN-y;k%?N)@Kl@C84PBWVTX2rJ&WTj02x)RP4oCN*SzBdx6lP3_y8$BoJco1l?DuRg zUeDODrMgTgHs;(|UvKD{4*Rl}+`wp=Js?38qe_YC`g}1*Gfh&d%2hp$zv}yeJ*qZp zsKHL6xyG-g3PrnW(VZY)bPgMN+D`a(?^+k&4y7dmTT9yx<+t?f93z)LzT5D#9VlL( zL&*%mYsxQYh!)ayUkSX4@!(nq?vdBJKa%l81p@ZiMvNWoU}yeZe&5(g1BYyUV5y_` z%lKM<)Wa8fvwo^D*WLr*Tu*xQRjoJ2&*@l4pf8@cg#Y>{*+SWIz(%9uGV*>^_!P!l z;q~_d4C;hvlUSqM97NWznabCPj!6HaObX}vDSIh_O=8hnY$>c8Wlm3dB9-UIy6_A? z>)vxRepWo|M+*rJ5*UKCq0jMdKJ|9nPd|dz5PT;wZ9ILZyuMQHZqd1I#4g3H!F{p+ z6csQ4eQKlH?AG5`)!~SERtyj71fr$pUu#!OK!xPp9;L5 zu)Y#g%fi5Hstv+J9XjddoGcY17c&DSptYdJ?;Qi1xSr?hFkL7p2Jke0_1RF`XF~3{ z2TqcJKzskskhz;=m@BdE85tj-Xmt%-L#^Hfbp}y0RrX`v!+J%IYQMa&`$0m)jx${t zwAv2YpU$vk1ArWW0>wQyo>i|-m#_9rV~U;)Xj;4qwiFhS<@Dp!)Xkp3ntm#@ zpNii&e8u{1;tGn=JX5{&-sbM92%P?w4dp&GJqH%7h<3ZlhRD*(`LWN1(LcqK@8_8z zCgiR~L94cu$PmjJNTKMj1OAU71+zVAXV-C8GRwa}sU?5&vo}wJ;%AMUdT%tqb>-+9 z!5`U)=%Y4?089#cya8HuOEIt7G(LmE6U`w?ks*0)NID?6_sakQ(T|7bw5XY2YI4RQ z5a%#(AMnPZ8c6$wcpHMuD)8bTFPH)9Og4r2tGI`a;`NH3Q@H@zdhc!kd73y~Mv{is z$SmQj;%td`vu4VoQ8^+HO4=MQG5kvDz%ALg*ZdJS&7i^%- zFqynT{rU(P0`+nM5c2a?rtDw0A5R%#m

+DD^IDL)GrvkA}3q%ouJ4cT4IR@4_u{ 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

tpA>K&o7mtuUG0QdN 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 =k1}a@lfDTkD zU@B?BdG$N~9Q_3}5Hla#oyMcQx^;1IpFD4s$ME1zLt{|zOsSXQs1QHT1?vVkO4Jn^~dPf&iWg_@4)776a`>NS(B?Y zCy^L@8@cF9j`ZY7B%YW~af}2-$lJ_LP(Y1-GtrIII~bEP-uw2C&Pi4^^V>4ZtNR=$j4@vzV3Vc69sj%SJq{ z3ap@9;&SEc0lcb1^YozUGSV=S!eVLNiw9j;PFswwDQ^?mcUZ}=U)Q zr87^^sUte~z<93h8`rFClq-LIchq5{5(3=dAH+TNT#p>Q)Xb%vzsjv7l{=bwujPdm zFDo#{iZ3mhvHtnMfPtUIkZjcbi;@(DoOyU@RQFv*aa2=@jNL+c5xo)@Hjq#>tAOQ27d0phMzXaRWAc5h)tcym{{G~_>H!u6 z$5r*boBMGQ(7%ov!5lOmQ!v(qoujQ9iqdPMlbPRVq}0pMbmgR-1IG(k=h=Tbk((Mj z@|>TGEDoYR4A;x;L8Cc8-=3{_a(B1 zpeP8@G=tz)QO>Ggou^f!ZbgF0!wl>s0ueN$<&FZ#t zHRXnfDP-8gVQ}2!5iWkHCgj7@?A&&aaQj>wKvDWz;fUNlxH=3tuqx+%+lrAPntWku z)u88XISJ>xwakraCBhok0)*VyA7#b>g^GZsV9<5#I}I6~_j-=Uf8TF-@tqfivBDi8 z?Y}&9RIOg*t1ENI))ZJVnH2k{fz0;h^BwjRavLts&M;J&GR0**lIVj3R!KTMOjX zIpS)pN53vk^B{^JL+0qt)%+H6b&$9f=R8kLNR&LgMc62;es0OYnRfLjO5#U`9cI%_ zG3bu;4VKph2Eg}2QaUhn>kmo4^Kq}4^SNKW2Vr1>!q)o+;Vh@XxA8Ctzi$BbvLmKX zq#F`;S)Wp-fs&lS!A4nuA5+8kr*l)C{U47_8Bd%0Y@z0FP?-TF0EI4i6-r_m=v+2i zZti}Tzpc`pdSbv3S+z{zSYj6U(vteauQe;W(*=10BUMpeBM@B~11DhhemQGwUBZyM15kQV#0 zKu3xp-TgH(p);>uov~J5echBjMfO&-{RYe~f{IdjQupNomQ)a5@7n`g!1H=vj^vOH zBk%Kl27_n5tFim;62_%lVz)@7Xll!LT>F3IPpq1d0NLmJYzK3eqheGy_|{Cjj9UFRddulx}w zo?NzeofX)OVxRqpU%q`=ER-pzucufy8yedG`k((EgWDwUp7YH^QC0u_cSD=$Q}pcv zlOuS;1}?TR!R9SZUW~J5tOnzK3Fqw(f(fw9z*L|+y*TxZH35}% zZ5oZLEAq7;{b$WfUF)Pb@Mz^weyJ76akS80dn! z>4ShSE-DzPm1jenU+)UoW8Y1F&knk4DjxKMDP-m}>*42>XNuTV>Ybd!XePaZuU?gZ zuG>Ldc;!o#wfJ+&dubcqY(lgX($Y+L(zuL*$8YLS&rN^0Y%%Cu!*kN*Jt`nb_q42v zOS7w+)C>g!p1fDbZ~R(YIVo}Cqm|y7eCcW+<=9D*W^zn=j;JJTME$VEljDR0KRy58 z0Mp~mkkvlN^4S4GKdU`QLDgH^{aBHDs94cfi52eR?riulBL2~Wi_&Y;Y_)4S6)!Y+ zW(s+gA8);rIHdInkc2a?IbSi$eH>%ZdOSj0D%+H^C_~TWegU;Ux&-@HzlptI3C^E@ywT?LEt5)DJFwSYb8hnb% zcDx%thXW=?D_~qE7agiyuT+w#u8sV>-}DP(9SgmJgqHGS%1}||ExDfuJ5gL!bipIg zy)wx1c#8KRvw&|>z4m23Np6sB)BQb<0oXN{cTAm=Q%RDtS6`E<$!%KsT^)m$GA2qo zPODq4g`Sw~*wcYf4O-5_vqmcK*8V*s_#pKvkl*&OGDE2!+h>nT*cPAlSNsWr=U-1Y z12`M|bjROCJzRRi2|vK}vB39%SHtkra;^h;*!^GHLUWz{6QxrHI(uL%fmN#IQ zykhb=>{SuHPRQW`s0-qB$a%9p1mi&(uI-?4eJ2+y(nbKT`+=x=OM&>@99 z(QU9fd|#D;@~~g7>dUg=E5U09RL7+XCf1R422o?6(SkM>FWWt+s6*+!_`#au0iL7e zuB=Z57;hlecX+}#%Am{)@Sx8m3++7hv<5v@&2_&M!r2q?Ooq_=&$D=%Syb_HL1O(_ z`V@i-N4iK>62^A>T4a}O|DB_!NP(1Y>*ijL2N{hN5XMn0_#EAEoLdUNHR~e`8s+&D z2J-Kj;vKH;Z$%%WqWkRMYpbs`d)h}XBk-SIpXIPTeX%&LxJ3w5Bcxdi-Q!qC#4#Jy zurSU6uZ+(L6m;*!ZNnLoo^f1Hng}+aK0!EwinKCv#Tzm*JOPw2R_gPJAGJF?Sh&}s zQIX!%@&-y~RRx8ODnmKGN(a(fqi^#rs_L8_@L;uB53RhKHHQAlv?cr5siOg$)rIY) zSaVin?WUj3oaN}?eo*CPPU@JumXRn!0Gvw%O^`&6yebGw@o%>wEcM z_Qs17MxFYkcdl}Xy9e@Y01w~Z`^}L~^Otb%hv_|9hRh}M7?!Y`6?!Ws@BYXXNb?NAK-O?ay`pm8 zD*MqC=t?~s>fJ<#T3v1<(xP7QaJz2Y|D38NZ=doJi~=%R!wSW`MvZ58{b9WL1qPdK<-99+4wJ8qy6^?*!6Ab#X zI@XaB%t0UXBNuE)+OMPoawdwv}d81 zSC>KmpwK$`?_|KXoy4Xs1638ezm zYXud>%}>ON*cNleb7*fSM#QAjr*i*#`tpfhJs60t7u(4)hUXy5Gd8G?!6A z-|6L`1Pq~0xSzcR``hqM-3x0UjdqZ97aG%}8HeW2lE*NN_>O_DGUP|C$HTCQH_*iT zn*Q)U_{zJ(ZS^?RTt3z}4AMp}?BKe?I8t(T!AO*|mXC!0NJUq44JDwh#AUHw7M z3vvq<=$@Rgt7u9oD!^%yEB2$Y=u_;Q2Jk$z=P0WrS>T5D@fiUa`}W&&Dj5>EYaZjT z+6o7*5xll=W?2|KCLYKpVF$IYLApNjZ=f3l_7Y%sTPOpfdkS_{L?zb~#m?cED@42g zFICrFwzY<_p-#~|$bnt>8w zT~2T<{nYOgwynsx;aG5f1JAez3GD(OHh9h$gWVMv8o6L?0ALEyu*oJ3|KYcItk5bd-s}_h%i0lA2V|Bvs!9GH^XWM3*2+Rk$ipr6xk)8{rpB+* z@s1+vK91l4{C`)UbZO-$^b>ERUR8slknL{SpvNC5?kt!aj;Jlm)5*{ zd&OF>S0H>hFd|%;fOpq$3nFwki{DVS_|*OViP^HlUNTSUwd$3972%pu9hWU?nnN~` zVr_+RHU06QTem*`sCqiKK6Ix)S9R}r39$GqI(_TKsJg)mw>kRWFL$*yra8y+I6e2r zrR;bBvEWF*7(JC!_r#5qcLu4(t&BfoV`>RBYAb8F&*0aSh95SHfVLYTuAe7qh>ecs zw{zlZjU%_Ro?w4Pih;!tS3EKBip&R`w84*5!Chgvs@N?|ig?H)(mVI8DRyOkPg?7K z)E{^mMG~ATBj zFJ#syb!L3Re{P1gXF|iQG80bOeg8}IZR1<)VMw8Vn1!dseQJ)(OP| zl)r#CG-T`PZ!BW3;;o3t{f}g6twC;gI# zRLrus9Sb{DJG{NTjx!{9NQZrzVvlXS)pIT;V=4pc4o z=8^_Olvmd5GJSA_p6gCOskOlJR6+6g$qZmC0}#*Bn2vn-{3^$fpO9{N(X|Wq?veJk zd88r~qj1brbWe2XlK&lVkRqasH%-O1!OHD@((Nas{~a#R&o_0udZwpGN5vwI#W3G& z*+Jt6!rEKNRWy0<;|p7I@5z(0TE`R*>glzzn=f+*)Si8Ve&As-AjwISE%fyZ#)u^ z%qD{&e;!8*`I-i|Z_BK34yM9!VCbxp0z~f*`fL}EjAxa}#q&W+2j4T(FRY`ULX@t( zLRo<#S58S>udChx4U_fz5d@G$2GdSyKi4#(bXV2kb~^=jfq5UPR3}mfs04d+QxkiC zy?-o`UX}c5>2)tw#I2xq<aOxb0FDh*o3%N}R{kTvTCeE;M|hK~8DNj+1>> zTZC|FL1=mNRzq#FaYX$?!NeuRZ3={*lY6LKV8dkpCXNxNWlsQr@S*xLIABlrqu{dD zhay?J5Wp(4`7Voe6Rv^$_d(o|jFoj23>Vi5`q)6E(UO~3S4HR$i?p2f_-!%YLN$Jc zpF~Vj`R~{@5B$~KzRW8LNs0H!w>XWzZyyG1j?zG5Gg^f7!g??kUPMgxWFt=@3A`gM zuluL3^)a+8y){vLgc8iqMnHQ1h*k0!M?v%tDQ`#5o^CCsw~?ncDH8J|RZng&RRFomY@!#a635^TX(x3YIN5fqzU+5{bR(vDeO%x!X3O%(A4YdfOzb-X8UD0uO&v4}wkA zfTAtr#Oo0Z&g_lkK2g8@=Vj!7YgSzpZQYqUxgb$ycx`NUe|PL*8W6z_b*;h@AW)^| z4CEp>`yIx^D*D7gvJ1GAl86HH&?Z9D7C$BtSX?9SpDbZ0cC)kZ+?I$%z8_yA2sS}$ z3Jvc}YG?YTzcZ3HaNLiz)hbORlJ1&2m2H2Inu4S2T$BZ2dLu0{hUmrux)-dPMki>* z1A#m{MFq1=U3~Is%+oNP*137Ai^UB5yW3QA7Ne>ein56AGx5X)SQ7 zw4UcRokYq)qC4-y{+>aDR>|YRG4Pc)?g%$L4i6a=Nc(OkJ?D^&EOJMAeA2ygou57xvJmRe%f`ze_5 zxL{c|n$%?J?y-(>AiY$A)~%bdn=ms*uPYXmS!c>0{dsm1;72nTe`_qC+ccYv>*u%s zdz(N139bh_jh+=>8{(CNbhRI`iyD@8bqz>aY_}X4e1fezZ=djfH&gETdRnHF<;X@X zVe=M&9B*<9-H4m&wi6|coN2Zpp_Rw?9_^+PNYmM$$wKSmHmj-{bl##la)oCv5bDzi zKRI`zKpN&aua(Wos?nx*Z0?>`_<0PPEtdVY;=*jxh3l&ET3OK=?*Td^K+bEVY)Fkw zXSGb#e57ow?Ed|9Xx)Wz1gO9ke8d_{mEHj>hmcJ^LYZqmvwRlGH}>wN#6GuV+SBf9P?P?mcJLv-ho(h zTJ$}Dh^c$qwD7rWH`ZVr+%KPT>!sedW>J1=oT@)b*hJc4No;dxU=`p8Gp7t?2JEqG z(B+%>?ubBn8JFJ}on+M1pw0kX^ry@;dcRZiNxtACox~#9g4GKk-`WYZ;^YK+7w)ao z%zt$qJzCKG*D;6x46PjA3CMWi6_0(azeS6AAeK9sPxnIhF%4f(WqcY6%UUDvk&(Pn zTyKFq18k&gv`Rmic+Xi!!GyNj*-+5)EwOv#H?qL2H=aK~bH6NmJ~?-9=p&(%FfWgv zj*(5+{koR8xcPe&6k>h8TGR$t*rDCQ*s{TJV*-t-LL@_T z{V0#lR{69ts@+-$b+J%ozaNY!w@e95q{J!J|_4ggQtzKXJ!d#E^PI`<&zDZ>`7vU__O@>K=-AkG;x*>%tK)_Vt6uuO-(= zrw2HG8OwWpGtikl5m9*WCF=LA+~(;zjwIu@X5DHJQZzgo7?EOnwWk5rc`u}bcyd(K z>^1)$m76mL5xLO`4e}oOlJuM|6!oLO|qa zVacJR8X#N>_ryVNosQur4{SSzI}aXW8#K;KFo}HWNtE9DDZA7CWnLqwlqjr9-w3HM z0u|TOM>LBcf|AzQbiq_DHMvXLBk~!sN%(%GC|K3dwf{xt^WOs+O9IUW(sUgg3I`IA zhlM%zkOA@*z4*7WL3i`@c!ib7>>nQoF`bs(`~Yv%kxdmdi)Bamb4MG7oP}`)X6Jjr z?m}0!_F?hU&D}R@mV&b(0w{%7e7qGi3m&6JhfSnE+#7*WP?HE%p>t(xQ_z!p8Fm62xM+W&g88 z+No>3@YnZW5MIyLK#cMCuzVF1=A43*wWZidW&&8f=qDADV2UH{XGtdOyghK<7@$SY z1($3|98rzgfpMVbUlR;+iN%g~llgVuVh(Pf*6?fci{X5o5*|@cs7}DnQIiYJx#?T% zJEy`A&xdgnbsI4YXV;5Zn;RN)dx@9f2EsX^Jw${2lu0!2shKFWbfHO`wsjX5IdhfEvsUyPs}eh=V6u7692lO-DtH{Hs;*KvbC!r3`3pQ zS)Lbs*Opn2dwn)mfaNhN0^^{ezxKGu)x(dtrBooZW)3Ob>sowI*#M${ixkz!^0Aon zPiKYheDRlbias+#E=2Q@p?$Sxq0H9leU!?{jtF>tFJSM)9JnGm3xyNm@Chh)u4KFG zW-FQD2@ycO1v*Y)`v9+Z?F7=bljf%YT@1i{F3EdeEfNJg;xb$u{rg%?ZykpSAnveZ zXw#{-Q6y_+)u5|=QPu~PUmJ%&#Soq$XLOvQhpAKazjounO;YGgR5ntO{sdH~5zc?^ z^M>1iT8FTJ570!OzZi!hzpH#Q)2HY`42?$+aGh?z=MiCVNql^5oK_aJasFZ z3p_pgu?!D;fy2?ti5#(T$4OIbb)0aNnOCtPfpbxROA6)z6R+dgzkSqovF%+H`*++_ zu77ELeuE|PPB!WO_Y}l;M!OGp1F|@alTRklfnwmf+V2lov+uHVF&ri^_XwO8p-_n}{SYdX$J)Lw+zWf`6xQTEP9OP>bIev$mnonu<) z?l+V)|FghHw*lAanK19Bb;}LMo4%mJ%5D?G>%9OWnP|zNgNxD?7$vwW-M(%{MVeG#9Rd?4783c1|6X)Jk|j@HK!GIBgAgU0t&eT=?Gw&4JA;QEdXo z3zLl1>GmYoa!k{)-LDEVKe*=c73e^`)0=B#3YXd0MagLx3vJN8UcZ@1SaQS?@TPqR(03E6+|T%(?mF_N=}U zBcgW(u|n;20x;sL$qEJO9}A z@%%IqzpnMYgJ^r$JwgOE?_8l{j8!#OAN5=!!qmAHa}v+&+ueaSc zecmg~PM0mlOLhSaGx!n8gkH^GR1=Gte6l!mfL*!0^6dv5ImP?#)=sVNtFxXX3)1_* zRCvgwGlALaih)yK95?qARqyIr%z)H8Y^WOW^Q-m@!fP-enZ})~)tXKWy_~TXZ6EI3J;$@D` zW%smTWxsY8Lq4w}4qk2J_&r{3VrZq(5lUS8Pb(j;{yBviUsMu=wSKDFLc9AeE2t(} z4a=1cR9@r7*(ps5S0z#--L~`laLV%=D&7-Nw!px#%c|;&Eto60r>P9{B>-cEA~vE2 zz@b+G;}|PvqT4r$5H6B=*=7w2E05jZQWK%90d&pa<{WVK!*Vev42)O=Hku*Z)h@{f zG*V$5+HMW~T@(rn>mu&o!EVl+=K;d~aIivW+yZ%1p>I0~0bBX6M4I7>#bm}@adIN; z^GnRH#6!$pe7a-W=jC5&oaBEUo4s-1iAluR2tTwEi8Y`wv|kp*z7O3Hvjp=i9^du7UC*G85@DAfLG6(*2r(Kofqz znmFk;{6^fe|LMV%@5jU)3;3zp4aPE zqnL)Z!@m<5$*cpRcz_sm2@kdFidIp&v2Bf@q=Fs|c!6VMjVVT` z%V*g}3QF3{K*KTbrb!HDfD`E@ha&vmnsAu;6n!TH$c=_c{xD}(PX#P-0hEq^`-Gi{ zp~<=U77c)kIe%hv`69bixGFRg}iFT4ZN zG>A7W?7mv*48i(?*HWQkX34DXA?@fgNV*%IMwDU|j}e;1$x3hjN3$b8BkDm;aAoOY zoq%vA!U^WGLrwH$F~iZw{;%!Tm#k1`Q9EX(bQm@x!sH*MA0di%70mt6pB3aqx!8oN z`yKR;2|ggCQ3FvDstJMt-vwt0TSWGKzK@OiCp=@RFB682xu0-D=U`*dO9?|dG4LNw$#Ub#sAwvXFv;Fn^z z_@z7qaG`}|%}5kK#E};kRp@;**gcI&JQB>MpJrFy_$QwUBfE0s+*k`e%7P5medLB+ zp}+zOF9HcCkrW7pH;8Uh5ABM=chDx=6a54%+BTr$)X_H`ei9`emZF)mdhn;_l_@REajUv zq(F*f$+3C7Il$12{CP{(gS5tQ7aUUMIK&YQ7C^2>knSbQZ3A(J0VXi7%8Dwv5m3dV zCG6cN)!3^8I}e6ojfVj3biheE_QBke4NYq zoWFhXzjnRam*(8IJo>*9V$zF7+rL_BvfmafJdSvPO{CKPQQzyOf(dzxko=ac!99&O zii=?mBkVe~K8D%f`8PEqmHO^?O3uGB^PjswMF~!sa2-`n9D=SrllTKmBkCpJZxn_~ zc3JJ}VCETpbBUeDKa}zsABn1R<+*kFWO!T~GRNFVzR#+kHav+C**<2B*s&*a;c0r= z%K={2hCnjG-BIQZo4^&!HVIAsgu;jvOh0sG&Qi_#btEmOZa$e20bO4#clgE(rBID> zutoI1PUG$G%LS>qfB!FvkX*#%=xjN@Mu=*0)#C`6|2)Ti(363i1on2J@30PJ?~iA~ zcFdmdHYSjHuROraHLgg4PziF7s}))eq?krc(eQ0=XoL;8RhbY@q5*V3ZLTisXS_DeR(^q*3?K;w&^Pmqnl+q;)RP@C|NksmXVKhbs>ry?@V zKIL3Xqt$Sx?+Vv0#4o?wy5Qgh&oH#6Je5ONPLzCC7KA6tIm;Lhpc_f8To2%cGPgGX zIPw7TYq{>@$&erAVmqKs9>_$l;GdZ2rp7QUa8! z$7MH_hqTO_Tp8^d2rH5vM&`-9h*4%_cV41$Qis0zC}F98EmlbpQ0dIrQd_`AhC&c>P#C zSLeI*8cU`x;Ek*Dt-4+M?>w3mxz1b&vYc;vkdBY^Bnjk=RR5!pI1In*Q7(*KHtD%G z(*rw=HaR|x-!~$E;LC1-JjZyc;P3ON{G_CapQ?Z2cow>*7x3)U-4cV+kj115*#*p` zyhJPHgmFP4B}vYJ%OlLwsCq;aT*bp+pq2vVR<5^F|L4?o@(aL$QA9Tck1A@s)hdnB z%<<`V9A2KG!~0A?#|`dYZ6O2qe&*0Lr1D|K_{QO0IV>c6-7I)!#jV>(8cJ^EjTcFN zlb%OofvX%3>gB)bubZVhrqDtHs5L}Dg~IW)-kaynw0pVJ`QFphu&N*KvF3OFJ2GR+ zvua|Pi#G+#OCnDLBZYcM9_a_pLUJkyg=n}zABjr0^&Jq-j)9}r%4AQ}wB^$r!kpK- zONVWa4FU=FY-)o~l)K2yp!Y$TCh?r$w|aZ7I6`tlnTK^z;2BHMii*e{kaaRGaFA&W zM0!0k0EFQVv%Y~~#fW^J-g)8iZ~BV_wZS9{}to;bpIQCK8iqIpx5aLeD0;o$6qRX`1GbbO9z1IM-8Vnv6#2$VKA7a*tllL5QQjXJ%9 zD6K9<5qx1^Cn_Jw-=C>26Gis61AWWn?z5y#amMW ztUI^v`CTFxUT$$KxHAv-ydVag5sEuc#-@=FCak(^N{n=1_|e@jR@~u$rl5WMTy-<{ zrUYsj@p|Rc!WN3;6kdVXsRHf-OH%4iXQ#mBF*#w1-A&@3=1f9QgXz>0mkXM;s7BQg zo2};hkKeIxxJTH1-4gNJeE)-=*ab`g)&Rx7Ur--8s&Ss)WOuHr=tZ3lAxC-P$WI5w zt%e$57t>ff;w%#A>uD;jYe1KYTXc)3=vN3l_HnDP%~myv$P>s@9;i6M#OB^SwV0Do ze=GxzcZru#JSV%3`4%tDCgL4JWpiS7MQWz~g`JJH13%$O;K51FWH+#9w32Scv75V7 z{5C5GzBTRnfl}8&<>6De5W-&;vC5a<2N;>^h>EtyMf}xq`GE!0mR{+ZG`8CRCUo|32fCZgE`B5K|obL`v+7 z0Ec3&bv>I6A?y!jp#i~aBJ6;bmQEaU8#o+>7Q+5V*EDD!x5b;d%}ehn3&YGb66nL~ z?d7z$=aa5>|01U!t?GTwR8dAx&+oaiVFe@kcm5Th&7X)eh=`J3z=K?%*AlrIOg^iw zqepEzqo=SzMDQoAL8R$c(J2NtO_(p=SP{3z$G5kCxqbBLzrx5+N;8%PgL{+cO%~^H z=?tXv<1O~T!}dv?h!W0rrg#nDjIt%%E2gSn{^@@vmGE6@V^V<$=0Xt|Z(^p$I1kyx z32(s{m!Jw#vh|+)J^gv4`;2C=130b76!!Pn)$?V>P7X1KKp`&;C1SATy8jl5G?9O? zK2*SV)d5nK^qDIeDCvf!&biFAh;PlTeV6_jH!x}1MmRmNM`r27w2~)T-Z~Z{XZ#SC zO9})z5ih~yRx*(00xDFl4RYp{4?dhzRQo+9!Z0|b%OGJ8Blqcj@TJ+$o1wMno=z6- zgk}2P7*n6|fi39ECbV*kSE->eNP?PL6STqWz`5$to03v*1%vZ_7bn%4o- zz5QKVy=T32M6>n9!A;Gjj9?#*;Ex^hhr8!eQxDS#>Hx!y`3H2FP^kwvEVUt=t>kFj zeH^oy{q5XcEh#aMj>rpyy~eVwAtK1B;@k>}>i1 zd!Jwd(P6hvd^TM-bk=8vB;#U|@=Tx=D0>QV&IKSXRCZQT@aweou~!VK-u212{LrsH zZYKF%x)M|}cLiN`V5t=+5dCLqfRzqpEg7$x<$_(KJA@Zb<~y9Dr7PFz zc?qh$MUoBoQT;kSkrN_?^_8^jPgi{0ES>}()Vvn2*^&4iHoQ^D7$PIketW~N?9RH| z^P5kjp|=XWZsV57h$MzNUQW$88hJ0;k%N@!Za!dpnI}y=+_gUd-(fk-=#*@Jp_Vb1 zOsh#r=yM#>a4E)$0Ss5!;m=&DcY3t z#qwZ3U;oYurEu0Am9JNmSlrj(%zQS!)#tW5pZ=ZY4KVc9Em#Mxrvs_si=W8lg($a8 zGZ(x*qebQk!o+7@-VpCJyW7Q@t0MT3cwc1&Fi&6+y)p0<|DW zpa6o%z3$)@2EJmp_EERx@t2uYy0kMl-aQ>DkGrk^6<_u}Nvd!MuJ)L9nP&)_(uV9| zf28;32N7nH73T6Y!6X=e?BKv|^cz=f8GcHWD1704&ZMMtM#;KbU3^Mm7(i@a@-nAd zo4c3i0?IC;a z`=|c|^e@1S`#~TqRZ8YwpH-!Mvg1KT>zKkbbzGgGiyt6H=L{7f3{?u-pAlzvM&z&`I4*y znbcu)qnwT0`s%%5VLu|hLj#`wM1>~7XC7Ro-CVn5kNurOhrP{lFQlC97>GOBc^z!k z#q5aB13mbewsX@;OgwDO!uJWn6W|yjeFSVjXDqi!wtsld{AvN3{cxY;WWWz>A?_o_ z&QcBh928ye)O*}DXL}t6sYdJW3KUj5ZprI79?BVQR-5CBZ&X`+XE~Q5MEJss|mcSY6jMVYEX{7tdwXEg7>*7kpo zVg5~s>o6L}pa)KOV~$e8DgV8*3}6`qccn`Qt$@+_V$>K2Rr#=9@iu&gcXFL|^1nur z8+ZMBuFsvFm-M+l?Fb$%CDnunFO6ewWplKs-Hv0smc{LPgZrT%_lyi!D9e>`1?{j=)(qrl2FE9n_J?FBq@I!f0An@MwLc_oEHP+!+8RU z?wbU$jxSDI4nY|Mu;*o0pT-~?2OxGYmF;$1$UYGJS>`evPly^`My17AK~uEXoV(h5 zJ3>}Bk*!)ZQ&VmXf-~FPzIMW$5exlrqIzu{nl}cKjI1#>y6%MeZBKZ56 z{bHZH$~q9A{Oo#&W`pQB6c{MpSB5nFX373QcW{o41`(XxvivBHA^A61^ezOoob zlgJT#X)Q8IqW^b|IeBiJ`WDJ?3-)1MSXp}w2;YPK7xmZnUTY>m8_Hl8Q7Si0qEvH_ zv>bR?5!)7$WYvTk5zhV%4}PFP2KD~uHoS>7{wp+QM>K}!n}D~x0oHYNi?-1r)I&9O z6%yG*na{9avCw9vhdR((El4SSVqmL&WP&(|L)-2Pf6w_)@XOjsriRF`x6#8boZ$yz z_Z!2{uq81bf23|D&>=9+XL{A;a0=RiCCCbo_;xMSJ_jASHSwiPzE4`A`)BGkWJUE) zA!$Oe>4HznNVV?OOZU9UOHE!ag4*6PPHG9~8b-sGiO_EN6)~4K_XY73+TNZ(BO>=; z%PqWXb(%Bb&ldwJXO8v%o_+juZ?9~}nC%4-e===U@5h4Q8#-|fLjKwSOhB{0<`4Ez z_yTzugChcF$xDxR`4uuUAfHmuqP`syFH2}4qt179Y2`~ITCw!qHMcvY576^Nky_H; zv+((c!~p~hDt-+?;iwyyd_qv6L!ZG>)odkxyGXfN?g10DrOUCkAbD_1yv{Fm*CZF$ zA~84=sUy;0o&j~g1w`1}PXU0KDg#zUt;ofO(#Iwr1cD=oW?}j|N$)hm!FgZlDpKrt z%ehsMl{n%ke;(0i_GTc&6_QNWjs7%>EB**8zB=*YN403rEeeDEsq8qmy0Mq7zgv&a zBQcNPBhsdm#GI-A6g>IqYM;jgE@C#js3%PvgVR}JI9IM;B{_S3{ib@Mn5>J>Zq$Ii z9kEWI>y6WygtI0McZW@(%SPmkzXz>nHK%slSqJJ-WK5aP&W+|x zmPSlQ|Hh4x#H+6uj>`->E0HM#v9Aq31ueVoIo~{XW&fdM!^W=M8%?C(-sT&7>Yq-q ztu`FBALwyo>H4c`fQWeMfBx01u=+D>$FB2T5rH+C7lXXVx4r#mbY@f&)`T%A;_s$S zocbmhA#6stXpSt4C7an7DEH}2y-u)3^R``o#Ib=cF*!LI83c>c((P7{y7fNTR8)A* z#Mfw|K)s^Asg>S3WbNkjG^r254)&(^s{xk>2u@F@$=fHou`e7TmfZ3)^c3u^a3rZ$R$+1iB_Gi|=^qi@Q5!w zH!ek|KYz7+Xp&8cU$$CraVFle2U;=!aQz)bLHqhV(GpYY^XoE`FCz+@8B9F4OpPzVSC#t$L#P_HhS8E^?5(k)VObCNy;q8_PTV?O%6814e0xx)#z;q0~` zd+V_WZijz*3{zG>Mt}>uoVHb#1I6=CF@Kv^;F%_JODcSY=F!LVa}oBP04n#BLZT8x zGmA`2H5L3rMdAI$P?4J7X!NhFHz(iFG9j$bvz}n%*>`~CLeDD{=F|!wPcXj;r5SqU z{vIRDa9MCV&|T#sbBL>p8u|z0e;^9JE?)PgyTk#@IGQRpM`GM{H}&p0G}Ik*)>0-MsN+eZx_o+4dWNZ0CO__Zs>w@ymG`&j8peNegNENIQg`j!uF^FhYTgIl%}Ppx)6ce0U-jOqb)`eM zN#6n6_EHXq5_ zO6SJTFpMDd@^erqlB;uaU3Y*W$&;M>bo8(p&oJTWaW+ABctu3poUfzR?>^`maP9 zOb#Ab6e`+wsWH6Bw6QwTG`pE+Bvp7Qh*1d>$ZHQxl3BpMz7x8EI&6@M0Q~ML|GeKg zN=Y`}wPX9RUv`__88b5TDQ0&|<}R?=_Qt+x@8CZMN%`RM&T(9DYg~qX%|393MChyA zSMrkP5LtzU=sZ4_ye*XEn#(cuoqBGITOAk4JtG4!GrX)zp9!v!6p{b@6E)-L(Jffo z_oW~j!H5~M!Mo(@O+DMyR1Q=(LQ6uDdMVKofyl)aj=0z9fw7JWTNISW(?ncKiJL4zF?w*Xf?{ ztIA^F4#G(px0NrMCBt}9#?j4V4`aNy{pP?6oZo-@Zq9iPoZ(9CoHHcR1 zWK-mQRfH!fJN!Z`E5|<~?CEuXR*CI=$QG+Z~u&Bnny4ZV{`f zc$hH{9AJ9c4J}9d5lZ8LzRZKdqh;9VSIqc(-X9i(h4TvXbr{(PCcz(F@cSP{sRG<(JDsp8*{-1Y~?J}?!8c`yx!CJXhNht=eV)AUQ$KG&=@B~gSs4XUtum|>MTt7dO+zLV5y4!*WwRePszD?33Vibsb-{_0hF*t8a4H99^aErV zwO3B+Rg_o@9omjRAQ59l??^-0hG-7oxNc=CppVal0r|`4lmd z-tirNuYU+XpJiwY+7uct=1i=@ulchf4TxpQ{m86f@sbbSL3b9q_&-5}i@|X51{?e` zu7iSU)v6gyggZ+)5Z7{WtStJ$5?k44M_ud%6T2Uws+iKu=&k1EGD!b~{Vi1VXAu)4 zasMpzaVKXY7xt2ckk@pe6lU(H_tEuI(P@BT`3l9g_}rRGFQ$`dKQ4!YQE&8xoh2QI z4yPY|@cT=CM%_q1)4>4!@Z$8n^xvtjol@v|wBXSG-8Kqto!?LKoBlqJOq0I>n`(@D z$mhW-D2;Lbn4f>fSFeHcsgl8X4(`^2u$CA4bbUx?7Q5f%+OJ&O;U3Z4;^mOLx2mJT z*B9?~2Lkio5DV7f{Gr+hV+OLf^WVd*N1&rOxcN5!)wR>0mQRa4C>%qWgGMl{4w$Jo85j| z$4>YF*5los7tXZwa^W8AXAv*eGVnq{X8AgT_#mo?P{eIO&Jy&s>|viU_Ls@jHfk7L zt9oGaQXr+7@Q>#W-dOCV3&6#+w>=z*M2v%+^SQ(A7g7*1%;0o9HT>k#^9L3C+a5gu zK9G6vBQfAib#Z5ly)5W9aM9UXyLc5U5`fnLApny^xvoohMq@?>!GKs(7oq~IDm}M^uP(i@x}*P;_g|b4{*o}Q?;U0qGUQ4^~`-cVki$z_(4^WtBSF7&C)j6cE*$kxR)XM>08WL73 zLkzp6RyFV^(Y{NJ^u|@H`kk;GnLDy{HmfoJ?iba3*LdokQ8oOpdTlv5cX0Blq(wqc zkZLf;r$D|ylJynlyGCH4_8zpLKEFi*@fqWWP;eBFga*AsJS{DKyu zEaD>d5kPbE(NW<=@zJQJ5_Q}Y(2Uk$d#B{MwwXT38Nm#OxNgL7en#v0V0v7~-@=1C zYwrDFbr%iHPNXO9{OCB$qklyV1zmk#QSn%-=XR)xAuHaijihShTm1#2v4_N1Vixyh z?_Wryx%#5VIe}Wtm&Idh`1I|fLlnx~P$dTegl;4d2=h1M@)+Zuf+LOoX5cR4lx~rq z4z#ck|6v{1v5k~Jg{NT)iqU4UqJmF4=x2}FC_r0BAPYm&Dq0Cq9kcVXJ)cgFqLYZ& zx}quip3qHI{hdF)3qC*M{Z+nm19f)bK&UB9<$(=Kv5CYM(%A#;Un5JG(r)snauQ-z zk&N@mqOm6#Tgd4hWL{}B8R(zpI6( z#;83?C2qJ753sfG`g`R(@7r4w4iqr+Bf%fNiL1A42h(2N_gJd@-15Sd(EzNxyZk-r zmaV}r;QEuF!SYmqk{>;*^ue%A|-gKiFo&@$wXk8TTMxTeh2NpS!C zaU>&2z@6`lpVx);X+yrA2`8l7tTQGuUn_kQzYF&oo5grYD#S^`wmb)ZZ?wtYvW^1t zqWscuGcdbo#!~cp0i|y;(BW%~M*Ia^l)Q5Zrx*v!FXAN&5m++UE)ZajUxuW>U8(Ac z{Pbex&-<`tX7`U|twiM6(a3i8WzC}&qP;+031s^Kl2h0`X(o8F-JGcvaUA(-vGyKp zTE>^0br8GLHV=iCo@LCHX|FG-qUi5kN}d_PRFw}<8r^7Gwkk*^DXs)H0~aHXL! z4s|!NhM1ZvjqL%vV?9lsHTa(;0Ek@fnj%nmgCe!a#?fw9(ZAhtt_`?Eqn^v?x|0LB5x zeqvc$%MWBm{gkqPCcuDFCcCKRG-V3C88uObWWgg@RoPJL4}4C_%uk;bZTlo7mT&F8 z4M|6@k9?8)90>)AEn@cRMuNvPfNv$A2_rS^>s$vk^)4zSpfY$gix3L!(h-rFF!q+e zg8T*>2xmt7GPg!S5gOR9B^^k&H<>@&BO0hrBWU59A`YNdH+0oe;Uy$>aw|lg51797 zqYq`Ob2pGPu7ofjj$F=Qz@3EWM{Oas%CP*@vmeNxg|W_Ex8Qjw{*myCn)0o0`jSEh z@>|a{9&?^99gOa9^#A-UIp%!YiILR<`r2@~Gc_uii>=Uz<| zML=!1j#Jn_;3;_aobW?sI6I4%&Gn(pxhuBrn&-uL5ETqkFkN7u{W7tzj6?T$AMp`= zID_YV2%7{df+iJBb}?q84P>5+utP-*6}DbsPmv1s_W2HS8YK&^bDgs@q9TDQ(EMHK zzdnqu>m`ZI%JdX0Q{_Eb$2hfUi1q7dE1!T2l`d*w%z0r#=XGo4om`Bq#VN)QyEOxv z_WR^2^_agG9P}^uVd?d~=*io^Hf@f5xQIX4)HYcsd;JFxd|hude$L3JrGjoOJWrN_ z)XIR*s=W|v<=s2}55Pvsw|N~37}`jM1_HOa(r0_@bnkY5m)K1;@Eg!q266Wz3sxC_ zdWs$dk5>pt-_Y@?{POYcT_(3LdMbvrM+O(;)73sZ*CPWzS!Qe=+XCr219LaAK5NX_ z_kmnMWiUNIgN8-W>IkAUnrS5g_b5}_{OR-6TfMt?n&=&0z^codKRsAd_&7#)YT#lE z9FrFR2>xiDP z>y2Rq9TU;CRtLdL;zzaG)Aweh)V4qK97Jzf9-t1jY%cB`DzHUGqb^t~k!NYpRrgI5F* z=PNq@L4#^V_E<(6C&AP*=wwfr|KL{zxG&op2ZXl%D*B3-+OB#HC6=A5FdeHXplM2Y zLxn89J7vuZBm6nwtYU}@8+6`Z#+a8C;2F9phLEn7V89FvE0jW50@qu{r;K{%7oQ1J zt`VogHEsJuSd8lk%!3#DTcjlZZv9QUO9tJ3F3SnyzYLkLUhzX05bMzE+%5KvXIf!V>1~o}2Aoh*UQWf)prs9~yHpz;iKfW~faKO)ZW!HK)ZYXoEdjzleZZJi>vp~Xe8vn&d1nmFf8 zbkYS=xBpXls_3A7dkwNfn;&ab+EXPN?gRGXU-RAdE-*KzXZK>XYmqukH>9=$B8YH! zrKG%}Xu>~-sF3rRKmX`4CT}(&EsdKyS@^^9L9^4aNNlNP%zq^rL0Zc4?d%0^eA!6a z2UQe6G|R8|pxz4pG^QXbkU%kre9|*)3P}hG=V#d>|190E1mG~q0&1r!l9+&`_pe<4 z1c_{m<6_u>6r;~q2$=Nw^SU>HpH#`lX3h60_wPYIUF?RJf*BV$Vf}s-jd%DS{IK_* zKcqAFnzU(<9Ha9SP~u7i1NgwYj_0EvM&ukGW__wytq9Q347s+|)`xQ)oL6qTEPVLB zI@|^J>z_KZ-bDx~YK=oB^a%RCVvm|&Q4g1G33rbodlK@(OuVP>6Tk>JUA`<_XSsG$ z;ziuN-ByFn_;(M)3KQ~{R_+om($Jn}9!49O@<6@e-plAZ7P=>W^+2Kw{UpgLNEfdmcanX^3J=cvgjZl~ zHFv0v0uR5nV)ug_8djbNX~pXPrwlaHpwcvt4(J5n&XP*{N{Cx%A|^f=IXAO-9=dZV z1O5zp1j_sT^Afi_j{Qh)>OC{&tnPNQ5}( z#_#*b5vt|A@C%&!JO)@2`UYSQM31d3qCLjrM1qKle#2ev$#hIij2{lKGANVL1Bk*)49)%`9wQHngpfVig64Y=5au%UTv z$Xwm5X@J|MF89|@XD6q^6H1JWz0zi%^pRio0KJR7}Oy*&h%Zl6b@=CA# z;UT6gk?Z#-)Ym$xHOiZ31N5a(7YwR%zr1uND68Q1*ds>ke5K{9yT%?U(IC@@pkLnc zJ8+XaLKSxk7Oweu&2@1>(jQ_cytdQk$U;j!vN#x;k0l-)uLFgam^6y1&AIg3-lmg5 zRk3g9)-;`e@PMdt=#i<>D@%Xoz$9dINbYAF{PAdC{`c?PgaO0G)YVXPJx4KAEHWwhY$^2qiq*q3 z#b=~+Q!p{7;@mIHz-M}u_A0;!6!B7)*9Y@Ma-e?{NC?H2RTPaJQFdD&QG38=W_|hG z5H$p*ZTFEhsEv|yZItokO|JDL#=bDPaS?>Mh(6?jtN>g{Ijc;yH&G7Uzri)VIm#z zN6KY7*c9ymYmVd&PA7H%;Yqacw1Qk(KJwT~~< zyR+6mf1+`&>07#(dC=(hz~#@(&8E8VH<%)Sq6VLsS6#hW@uy?s{zryv$l^x3@V)**c`@G`Pih*B>ZSE<+ zUZ?q9gj}r7W5DoJ`M-uU@w9z1OcmZmZJt16XAAJo?a!323=j;uNSm-H7{{M|tSi*A z0p|YJEIok&o%Uf{C&_wqXsein9-2AeEeNkk9DkwFjoXT~eBkVfyBaq70)J@h^gN2! z!m31rB_xPg`=2-kB%SM3CI3p{j2e1zbOXN@{7B0g5~7x+5`&Jjv>D%vYfqS*>af9t zA%XoPH&8kSfoKiy9iBr6Io^mq(t}%$G$E!(?kU!b}jGgw7 zjH%b{!oqWj8UgbZ0S`%-XrW?qoc_Td{dtWSPtA0r)1WC->NImudSO=WH-_Q;4j^%I z;al8SbRt}U_Ahu;v!Rfm9QtS08uNT%LHIf0g($R%rYwYT)Z)Iy{(S6{**sLwp1xQg z>Cw9|ZW)90&cF7!l@!az)6BA~e==H(s`|Y_8Jw;`kv7h<2ak&G;Z#}C;@w4-WPeMW zUT1zBcy*Fi;~jBGV4(g10a5(-aRw3pQbpt8vb#bIYU4!se*NQfR{!wtp%Nt2O6O_& zaf^;SO3-%Tw0|i0sc97hn>vddreF>&TyH=z0uW7*cZVvC zP$~gsQU{Z7>UuY!qqgz;_CUfYfvb%z1x7Uns}}Ie59xrhjjIQN9o6;3zN1#n`5-*0 zZ4gL11t|PU4%oqyk8;WWOq2jGk-p&hBP!A{ey!J)PE z^uY4)Z{=odNfVPCL85&yT`b`lZ zDLf46B-dghr%2u%s=*HY7=Y(w*C0OX`H?@y9$6BIU#WAD3vQ$_^k8V*gVbhODDxYw z>0pyPjBgLm%I-OZlWic#3V`S0kj7o;&#>q(;Dn$-fY-QFGkNnM>Gx-leN3)xcbfkS z%O50!pZTLNZnxxKlmZeTMXz;ipR@DumorQsQopmSYg|K!A0$_A_6t`jK&v5=pT4q zXO|N?ocatN6vq2Ai=*nvdUr}siX@}`>teY#SKSNWUABqXqDy{WduzAWM_)Q>ky&Ne zc1YwZeeyzP;ulIYw}i2^*CtTl-o3|lTOGq~QY42Gm<{@9ad*r$KEWEDfA{?O!fuzm z;DfF}e@Ns-bOZq+ow_@5z(8E&9F>YW*P<6cyaTRhBy%wLwjZ|K?E5%kk6ijXWmmkh zmo`}T?Jn=e&leWZ>rRl-J-8hO957EdRZ1JhcRKlfy^K zfjh<#=hK89nl%Jj+V7#!C5>%o9W4PRTBsp^;s9|q8F>A?3L|!*{`3+Jg`5f(P#%!ba{UQ54T}G zm=a<{q0Pr2jR|^CiyuGN=k`L;TM0LZxu8&T{qO?u?C9gej|obW`2NikHJh=Va7fV zgbLh|5C-l}72wL<^tpTe=^p$J%X;_Uy+7w8%%nj(QuMUf(87*^Y+gUHyor{WI&Be+|Ao>* zgXajtQ)C&m^aWX-O~WeUB`TKpco<8b#P4r)Tk?R{&q`t0XelHaZ5HN!6r`_%tj91L ziNe)aHdAyZI%M11$-Ly=%uABN9TVPN38xultaE?LOWjFX6P_OsH}URlJ_xp;{SwOLf|@JFqE?u zDfcdOl}r97;0V3phU8k)-WU%+OE@J@TUG@#_A@A8xG7eW8R^ms`3-g-$``B*&d0wW zcg+_Mf7#-&r=tCMx2q&V3co>=BalrSc2>CQ}GdyB8HT6QVa{ zE_}LZH0&lao>!b>C~BjVel&+lI{btb1Oqo8{#L0#=!s2AXq$isDFCUeSF$&_Rck>Q zIXYDHLZJ(SQ&E~zaI3o4s>JCht|?Czj|oW2U}?dW*Uuu68zT$pBDmEXC#d*oxDjLl zM$?m?p$stW)%Nn#OW7eW9Zbi|0F$~<@22pVVJ@BfN@Kr_zuEmw@BRX1eVr~l84;X0 z)ZazvlCtXL=MSnxl*7tOlCP3#aFO8G6s7{-=wH=V!3e5gvl94-fwi)BXW_p9eGI^W zS?CJ$BFhj2BXBp<>Iz{)@CC%?3Hyl$BTcN;Iwh8{vN8bmx}W5&w)@{tw9;8;H|Lc8 z^Yo`Xsg(K#^vW?qc_ZlJE|a$vH@yN>f8O1+^NIYIHPXY0uI*=KS8_Wag-S=3;Hh~w z(Tg{bPv8eCO!%k+QP9J?i}hJ8A$%?oKXHXY5lJP4n0p`xYt2+pB^C7u(x1q!2UbiY z?=ck^Uf5#8O1$VmeBGby#%F_JCMj0MrK6h8zQl%qtaZAOmLxq}TjWFf2KkcGE)UQTg3+|(C4$c9;py6m3D+e^i88+HR47PbZz}EWc!pSOZ7Ii+- z=ebC}7d8y5_6j&)Z+po_#PM!J#Zn-R?V_42;Ah*krXz|iXa@gg$D{#L! zJElCSw7X0JlAAmH81$JuN>BfzlG*kV$-hmG6@v>?Haoud&qIjE6_563VeG{7Usz9Q zLW4e}*xG&Ei0PxMyMkaJ`uS@0y!PX7&(|N5jNKB(YmuiOW5(RE5~}T6GMZl(Xu@FW zK~m1m>(L9V1NP)(eaYW^+c4a&PUrS0j#etzG{HwS7_}<{1`@BS)0uzz(AQTG-I;EV z^82U;MnZe#|hpY2T;UCR9-f-_1{I-H+t}$8^3OHpl#Zn+JYC}j- z$)(K4KW2ahtnquJ`zlkX!W^vRrnndPgNPo@;x~>j_WO0c%aBr zNUB62ixmE9{L|}ygw%jP-S>FgkgNV3CrlhxyY)flP_lM$A5O>5Yl>a^EpTh8@)sEz z{(=;C_Sn$?LzMWxvj7G z1PtQoK_GM4ht`-6PTeMgC?LVJn5~oO%eh2?7mJv86r5muPcM+J`RsB6D`+`MN`&1C zZa$^q1+OMS4>vwS-@AqPWs`8x_3huEZUkR)31`y02fCdTRL~qt*Vm8q-LN`UU|hWO z8TAZ;E#j>n?|r4NIIjZj9^n$EE=2w`Gn)R@T4D6jqdgda5mjU>`^*@XV3S4i1=`zw zgC}ui3n=Usk&0pj0`XO=k&(z(NPEvQ|KuV8n=9jDA6;MmyqcZG53s{nfEH}>{U1hg zd+d`U*js-QA4d30B@J$K7)FzX>QlN) za5VGZ9Qx}Z?O4FI0X%<2QqxjQ!y0MmXSJsD5`Ux$LdJ3_rH@$Su&q?mz$9YwtPU47*4+&OeWaK%$lR7+Jq>`6b&2VxA2!3;aV zFVIRvUJ)!#GMX6m_;so&_iD4AmMw>duQt3K0EiTbOhOvo;~Mvb>P}cyGvI~ z`<3rljz$mYiRQ0#dAi7FOO59&}o>i5aclkjPyX>M6K-^ zJZ7u3<)I$@`@ko#3kmPgGc1wl1(=%av@W*?J=dtbQT;enj zAI%6LUyY0_SXgct{b49k0Z8@|S5kBeMa*?SqiRK8?}tqf<6F%p}f)=TPfBF0NV=q0UNhqzw zHfIhmwS+g!0$r4L9ci89ejkj3N!ePi15?^nQ=d zQ`sXFEH6oBq56G*#H(7;WYyJxQ+B2Y7N4j_V60D|;9xcCe<7fq-;fZ{jlml z3hq&3NS)YJY75tx&!`Ozzf0WV?RnegXtANo)ChyVzcGR4=7cxbY)1AqNux77z^lT4 zw=S*0m5TO~eXJS}DD3aK55Fhc{QAuRr&V<#o$l$JP2dgB#c&h-|0vRdW; z!*R3b6=6ccgYi5E>${fW+Bow1Bk@Ym8mrWD@}RC`Vn#a^*IgwmD+on zCc>)mK6rYG!7iO`yGj#x>&E8R;Qu1r&bye;c@IrDNWK~Om$yq$7XvI@H3r~P%Joj> zuWlX}leYFbUr-{gBgh&Z(&VehJabSPc2?`Giz(e#OI|=|_99emr=aYu+D5cV`h6ZN z48ViA=Ctwf(Z&9E8Y<*lvK~J|?;av`8~LT*ew~v2+cvG#uhD1w6RvZiI7YPb-9Ja= zf(2%fX9_4X^D6>Y{A+G$CH-{&dFmg?aQ`_ks}qEO<@8d+H$=#T%laVoQ>g0(&8uVh zB!P=KiqaVW5!2SZ0^2*)fhqrI^AsJjeq(+Hr2ri<#)CbPrL#Y74m`=o+A}Y|_3~j8@m@%hcPgh>Y+N$-Srn-%oe0RkwOxjmJeETBv-r>M+D_$X=-lp06 zWhJQlpjP6q$|~U~F{IUl$lHtTPHe*saPh}|it&wsG}SCwMAhGi{Ry)f$cwyhAl%Mg zdEzLuaZYP^J4t6>I&T%eo@59H6FfHTe{U*7@}z*h-ecAi$zaQVttV_V7LDt5l#3}o zn790n<8N@7QHWY=}ufRw5g&mUW? zmHHf>V~PXILcKdl+sCPOUY|Z>Nz|>xE~<$c0wQz%AqbSYzbR~k;Tb@xfMWGf4W?71crulV}s^#oAtaE zknGxns6yE!lyaNnrS3l0TWj{QYp+5YqC~%$|9P=LIhglTM;>yJZ4pn;!AgBb?&pZ6 z5s?lOG%4!e3an4zBEnas=JsUy1gpPlW@*pU9q1;K|z0TkSLYN z7G00|FpX&OBl4mdm9;q`^HaF)+;iX1;75?2$VV+v9DDOTwV{kP?S1{;1SbvCns*OM z()^>VDgGc^7=n3HiQLJE6_4_qYoiIk&t&HxS*&tLDJ$$%UC++h+RgSpQr5*AamR8$7}l@2P02n*2pmthFTTAX1=rd3+i z0BMXQTze2&wyDAjV)yJigbRF6j0N4qu1;;fSSu5@jBybqI1$-DpJKWp6NV=iPMwTa zy~zDs4g2MG@^3OVVmIt67YmSRrt^R;stK~r28HjSAg3+68ML7GuI;w%r&HnNb8EtE zF{Tdh@OnYUHgsg>Likii6MXh@Vd}+)bszwJ180mro;)qHQ#%++hwcfV6GAV>&^>FY z@Beleb`b+{HD)!py_$GX}^FD;l>Eu z;D@qGV3R5dF%F&*E^iR)ZpnQlWBXQi*Ipp95(^N6?k-~Pyj9f8_%B^qAHY%}pQ`h^ zTgGy)&b!PjAN?3aF2+EVZ)YM4#*=1FV{m`Sq%_;r-x4+gmvNC1&*rxCiG)jWLJh|}pi9b95Qf}Pqd$yUKcrM_n^lMS~XJ5j= zaIM9&4;ih6!hDGe45XdT8oC`KNVN`|-MN>)UUfy!)oa?*kIL{X8+$XBfL zJ7djg(a#>4|BF8kqcYW22@{AD>G=Whfi16Id?v^@T=`OyS^_pvfYV*+qfmTeOw)wzg@RtJe+TbIhl2)w-9SIKtDn=ffbK0%}WVxje=1-IHgnnG`Pyz z)Wha^k)^g{@z*G5vyp!(S8Wgfp@gj`0%l3r{*gr-xHk!X>}lzu9s2Rf@%-L~X<5z> zm+|pbKsTjFCj|%!4-Y9<_jBFP&a=5+VnUGlN3|+tP8neofITv<_@pfzU?BOh_oaa^ z&uj4F+z=l(EV6_nKT%D7gdea5Z5|xgMIFE>K;Am)%&(*-_c$#+qNm_0-6tbkP6_Qe zlIkyk*^pGJz`D+YFQJ#UnH5seZZg1^{>>Q zztfH!&Il%Vw&2=}kuyWLQ9XZ17OHQun=YyFe(ruOj}?>nsbbxRj3!kUoIj0m`2=6^ zkuSO*T+{n}gYT2Oq;vJw7?A7pKDg9bHOr`YXT#NuPe~1&-G%jFNS(P2zcZu%S^aMI zzXr*5oAwt_-FsIGHDNt33RrkIVB|O*X9#^PoO;YVmkr4(;g9}e;Zu-wCjv5}48kU0 zRh#x8kptJWv9PhvVxh>;q90uhlDdir!np!&_m*6Jc2BvxEM!7NHnv|$Ywo*JDuQOj zu48Ix??|B1oD$v0;%lT5%TZbExQ+RlL9JsZPsvM@Vn}oU8&XrSW zjn)C3@c8;YQ6}R{S0S(Cv1`$DABa_Na7Q~B)Sv7rDaR@#I2%F`e)K4d1XJR-&CEAE z1I2g4H2U-pGSAg+p@D_6uP&Iaa{ML zOzhoR!A>Uw7y>W;w5*vhFATjR*i>5}gI)%5J#{SX&YW1&35;42gsw84wVu~iCM;rk zt>X!}`2LaSFXit>ZeXmY;zXg!$tpRB6nyMT`0@1*=0~5ENY;m;=hF8PkG0xj8bIyQ zh9}kyFT0Sn6@meL;6k)yp4DOFvoJ(?&FQyAGojF5ol=_{q2j?lWi83*y`Kw8TZ6g6 zNXLX13qQIG*eEmQ9?kCvSr{kuORp7-E2gD=HDY!@>99HRe0Vdok8@AiEk{!3;&ji> zQ;_PrnKZT4irKySk@mVA#l&4EdTU$DU5-z*-GcsEiL#Tb-7A zHCnH>RC{}=Hvy3U>EAsi9%b}0J(p0`QvR-<i79->`Rq0FqI-c--v}MqzWqOVoXLP*xqjL1Kw#L-VA4X z!67)Ci-vQoaBf@a%WfhHG2}(Xvfz(~n9=?Xc746qK+*kj%2!5fjyGdv$9H+5J6ilZ z!;w<@7qplyOUWKAB%hF$JS^%=$lw>0qLF?+%Rcw86Nu&S9U?TXx47dr?a!_DplkzM zx4wNSKz1ajpNTL@DMrQEX+HA{i|Rytsp7L=F@9y(l!B6E*wsTLDg^SabAMC4xs`zl zeXstmPwQ5s`F;<~e#ek!4HiRFQKR=lVkvV=XTi1Gb+ihM#7Ady2B10;jZR7@C6I(K zi-pb`doV{Bk*r1pB`%8 zR`jrI)5r#_`CK7+V8ft|%*cr@Ll9!f7285S#Pl3NPgxsyp$oC@yD$4Nj)@sacQIdn(gdh4$Prn2B?xJ=B%@} zqV*5~tP8Sdrey+gk*<(2TOj!XevVo^_@X-Mm=+_oSEh*$dSDDJDUKG+%Lb7LdER$^dPM3n$a-xLzI{d2ghrdt#d-I5 zA>kXMkBEu|zqlQ>!A;)2P}2<3+qkzn@C(4WQ@tFMNxbZCj#w$oWys2w&GaJlC$iN>jOZ zfi;-wv5IBwfAFk%>XJ-o;tVE^NlnPWmXuzT$7|zOL#GQdh@SMj>a!I{lM93_zT?XO z{#y+IldbUS^$u4So875vy{4i0?Y@Dsd=bZ6jO^uT#Y^Y2f8?h-_2K-TqCs^PCA!zr zy;gxH0?Zm(rG7N<4(wZty#DaVJO_E==SxBD{zNzHcEt(Pi?O zp`7BGSj_$xolHjI67-UHoz&vi>DI>9iS5?b3G>l_BY)TC@-ro!{&vFFl3RuL@Y4^g zFgeb0Flq(BA0G2%_;nHwE&xZ7*f2&&<{6|Ed2oZUD*|MXR|*motx`9L@iFo$J#W0i z9`~7p+cT}0y<7aUf!GY+VCL38BQk{dbH03hlVLDWx~F1}g`b?PiMva;%6!)2D^t?0JVjm!=Iw#5 zgQuANz0?^v4r3P7w`f>(V063YMeDyokl?`=2$p;Q2P=YhD$pbi`V39Vc-i!0CM>{Y zWssf0XrgapFH-*cv0rX#*Z&rH2NL;M+KnXU(r$+}El0yyDVj&}H-vR^lXj8|QUHTv zgfi$-b_HsP0{j9~9~+>6O4AW<;);W)ICOCr%jkS;w%fD_3gt}6Z#NVy<$ECh8vhZu zc)#Pk1z(POmAa0zjW~BL*oH}fx5SQeSdsNjBwOt4>>nnUe1>p1t8R4J9$Ib5lQzh; zNzj6a#dT84^T;J{&dG^iK7sl4LMZs%P4~Hm+*sf^)#fZYVDs^VcX?Nf6`9>BtG*@3 z44OR&ed;=_qByPe5mcPS{p2B`mr z1n&rb8ylk)u9F{$(_3J}*Fm?K|8?S?Epp4Q^?ut>*C{wEG>dQ2%8L<^yADJ{49~wS4Pf zU0H%Bj7*;NRXO-PuyRRy2ZZnGI3^k$db0~cs`wF2=%52p6?o+hflv`R(ZUYA59W}N zvN}iv3B2y$Ugv3<`Lb)vN{{EpZ>hX!m?hQyZPbL+U>Do5!XM!G{^k}ePo=J4S82=g zY?u5y5n7!b*a41^uDdA{)i|1N$QrG7AdJUseUpp*LWtCG#7vy+=}Iqs+ZvfD$znD0ZH7_YI9ZVom*%kO((`^91Vgc6Z z-NKICM*c31UTQ4jRDzC8)g`_Yre(J@nfzwj2PIDrWn?cAen(Z}Yn4s%S3hH2`2=$v zFPWc3=V9*O0l*Pch%=C8#`-TNTTn=|4*c{oCIe(T5Iv=RS{_cqar0&=G3%D;bb=8y zE`JjSfGD$JXuekd+f?hirO1sMSPG3m^T)TrXSbN-FTdWv5A4Bgafo?U=dx*;6Q5yZ z<0v#NU>36^RQjP5*@PCRC35v2Bg~7by4jp_}73Z3-b zaor*w+~6z5XwDe0HM~{;i{#!lVX*LlJdZsy@L93-Ct>iOHvlfqBTK^mrKBpXR+%!ugOucN8`W_bHw94b{ z7h-wkWfXwHz49EEY%yQaQhd3fQa<)1OWk@Vcx4sa2q!dh=a}hY73J zi8v|p!jKV54fP}H;+=MhC#Y<%`)_b+!D}K91cT8&lTQLfnH_kCks%*CBLT#M_(vv3 zk>~N_Si~6c48>y#7zdY6Xi+_W|G)-)tRysrQ@J6g1tRTuQ2*KSMdAOv^n~}_A|;&& z%!#$I8T5h>c?{FJwipG0%tm8Imop=0mIvG?qUhZ*H(tFeX#six+wm<|;TO`IoBO49cHI_EI{WYsH-2**g+A zE_h?AR#IYOX2NRW8h2*Skw^$TIOCdI-$kYfX~TzGPm7Ub%`c8-^!Ap@-T z2YA=?Qur48@8i6JFIxRDCXUDO83&3j%Q+NHEB=$V|B+4BgU09|NZl{lDgMb_NV#C2 zAArh`2@`&1!a*wQAi+$#K*YH$uLha{5p}R6x6i~8F{!PVrxx^gMj%;bP?(N7lX9TD z=R0g=@2GDLsj5oh7I#WhB|!LgV-<~fO&FpACM>hV*y<K}o%*nrOFZ#=IPTqia)Sr19j7B z3(z%4Dn|H(U0*6vJJmlsV#y`zno*cTE>|h=`+F#^Zn^uq{~hqB1=sdW0lNfv_4i-Q z(-%|HQ{$gYJgnX_H@#_YP96hge;wcdCwc7bF4QAUF6uk}BS`zl{cFh>Ua^wzt2Iju z%QuMF&$oD$HDl{eGO5)WPiUo_-7P!F35K_5ObQ(on4mu~Lb<`w8kTD$%vNpDzVE)E z&mV@H&2r|nL~%30v7vmcXw(=cuWLx$@_^LvRqM;A|In}ByIF6H_`Me#1k!&#E*<*#DN4Yq29* zMPAV#{~g*uRXVP7=&LUyq+`mF*Rd)uIPoO%CL(tqMkMt3>i?^fATuw*drSI;j;(uP=`A47Zel__)VdX{mMK$M+mP!AeaAX-BrUsEJeh6{JIW>V>!>GBCEsY7>4qk$w)JUC@ky?B(xe zzu4uR83x`-IoSV)b=#3u-?EdB-|FdCVRg?W<)Ff#j=ve0u=jSZ7w!q~poLG&y(}>T z&~J!)RoJ)q$EJ4C$*~BN3pd46^)}-Xs$HOjI(e-81EE%3H1LqpDN5olyTrjy$bk`U zdx$nW6T|mD4Vf~V21eERpwM59%+MDCKDtSh7&G&SYJ`bC#uIA*d*BdagD$l2bW)?Z z=t=Z1ZIk#ZHN>Jn{*fZnHi_WF0dniGzKCgU3OXY&u0Rw76@kIzEx?^hFo&gYi#^Yd z8BZt>|M`{f{ zn=6(&cM&qTk%h5j+P>pYa?LFwtEaSk^c^V`NDsGBMd^ED(=ag#-V?ifpr7p)qWYpI zXn?=x*bH5NXGCfpn;)2uhAFi6cWklO4smt*8k~%Tu9Nkhp)!u4%67kMz4NeNge;ch zubt-V$}fzzP_eYC?LZv(-xeCW0et?e$?}BhPolSLVAij~a)813BRC#Vp2ae8dc>asT$iSJ1V)ls{92x-w$e5#_z>aSAd5qH6bwtn6>l4?! zyQTprYEI;mzilk>U0SmG&+fp^I|55PiAAEn!YmU<{Cd8S*inXl>wj7IvXoJ$ip6p9X=CzKJgdV(JS)S99m_u z?bw2?S{KGkzcH;8^MJW9%Yp$xT7mBjnV|r#;2?`T2bYI?ZrWhzpt$X&{=FHy=#u3B zQb60Dv#jFopDPdNH*z5Nuyd$(M@RpBl6FmxaZ$fbZqj5%zr)te6u3t zTM5q+Inl+zdUjrvZ}O7?oo;yLWnOjr3hdR3d$lnCgU3bw%T8RAOG7~0b-5gqpfki4 zoVz>)W(#buQt*IW-FCWu+u0iS9U@lMaVgK3gE0Mdo^u{v=3jl+B!=t>K5K|iPqcqv zdDAhWS-cPP5krJ&GxXL_V`>`HmdY_-(ZiFTDqn9;e}O_hRz9ADAA$N?gcvHSY`k5Hug3b*qMJf20O7 zF9F2DfyMhkB(qLd2y8}6V9-QDLMS+i=`FFUMh0M?01ex}G95MYLu!lOY(X+U*J*UA z$4`#PDG^@uy56TcJ{u6y7@;BY%GZ}S4iKJfcyN4^cpi4~W&P<3`CY}4Y2a{8XKUs1 zz86E{tHW!Da!H2`L{8igl5NfEUfl-$`OlcA(4IOm+3-)FYiAjkYgh8C=mKTAsQW+u zL&<5Iv=$o;TYz@AWTkTnk(o6zLTm-GbFb?7k&hK2{y8!J!fXw>q#H1gy$th_9FLd{ zTzT>rBJrqByfQD9);Nu*Z8#Dtnr)LKJZf~#v6-+PcMN;e){^@{nE-r<4>{}qN|N9p zHHEZc#xo-VVsR4Ug^sVeF1l}ZOLL>4g&x?Ns$Za0)1on$X!}Nuw4^YO;CE5pR8j2Tkq)xIv6ovwr`7W7Ps_g@(Ph%x@8eQF@V@MFDHF+oEH*Lyep`-?q``V(ds`yhPyECS25p;cW zf_c0F4gBVv7@bR{*h5_mpdN|5C!o*&dl`w5TVy@P-0#S|`3%>qc&Pw~n~!JjD-FsqbcoOlCI8$&G0ZZ}S`ltRCl?e_ zXB+IB>=LcwZXBxzHkc~%1MPWpNQz%{1%pK*H1-0|u2->?K-DLVp=gQt3c|DFz60SH zL^pVP!boAg3jzOm0A%>cY$WkFgz)Gb^E^8Yz?`LQx70POK|hUm)TKi)Bh^X@BA`je zoZft|^}Bk56HI(hvK?(2MA#m#{6e@5S@i?h?7nJCw8mY=XC&VVS&E?R?w?lOHa{}O zHwbWE9}YIRL}#V0lC)n?ukm&xOD7=Vucf&vItwOW?XYF(=qrLjr%bNecPNyCA8(*u zoR*C(E==>;FD1Ox=}*})^tdOee}c6goiSyqLF+qje&`E(4(0zXrZ{$;0>Z(g<;V}D zY8{~(E6{dZIGPbK;Fj7k77&;ar8`B~0%YuVg%w6g6wr22%T>rQHmlRi3o_)NCzpSAfWV)h!E*W3%x_6hTc0! zkkE?|N=RTbbKn2H>wcJTvu0+U=j`+R_N;TZQb#$mQizaNXkGR#+UwbZ`7;qmP|DGF z?GEAJ5yJgAo;u%l+ zfee^_2^}Hy0-9wh((A{`x4`>Dw@pAkRQ2l*$pb(){JDG}>$y7j9sVl{4awdEQu|%k zD6v;#<29MchA8uA6MHkeTJ1Z$1Z`#CRvh_YLn;O^IksFFe14l^(;)M;>c?^AU;53P z7B>N51~TZ%h?|xE0wMArJvN}-K|nwUBHd$+&6l53-@j~pCAc#fY{8A)pC5& zfqNMx=`AhB9&A;Q%n2*5(^yuDp>y@2 z@njF*(hthDYYaSH>cON4LLw`gtqb6KAV0_|{K@cm zT%M9Nm3`JqX&{EqrgeXslA;vEeSc6VcKv&K$tf}76Qh1z-2qra=xfz$uoKH z^wwRNBe(JA>e-u?e^XS%R8;Q-vWG`u?^Ax*i%|!7adkS%MSVCSl;F_dU}-%!NgR=X zxn0nr#?oe&Fh+4T4H+6=GgK&7+nPGhajMHLv{hqjQpn1AKcMqv+ceV{sl(4dby+NiJK($q_ zVtxb2FQeP5v^*=Zj9J+I^it}*Vg9__)^H!JtPjsri{>KDYijw~Gj8dL{X9xm%I!SD zzbtKNIEX4lUiv)c=~Zc_+xbvdLjI79`9i46|ERKDy<}=&@i7?-G*yo%o#BI7paNz*5E)le;N|j1{@HTM}lvkl@zb29m>55frbaxii6Za$D-Av;O}X zXojc4IXs$v-v{_Yw(qw6 z_TcSb&pqEm`n~`yz3=t=e+MBl{$*T_Zq!>oF$+@Z_N09ITjqgBN}kQ4~^e7sxozQs$g5E$NL4rty( zYFv*ZlrIuS0cB1p66vFRgWHC&bd|N{?jG|%n&c=hl_5ON$`NSf03=lG2jo_`E*Tn$ zCK}H9knoA_CGaall~`Ue&YY^h3qB|N1!L*QohRT3TaU|7Vs^V5p|Se7IW@$!!`X90 zPOEiw+>vxY3!n)*f;}@harLV71{hxpU$cOxjsW^e6mj?s=ZF5Dx6yTqi#55cJ?nk@ zzu%lS**Up4s6tacS8#ZQYXsqU<9{mllDzU-*yD4B``cc@Zz_dJggZ6myWhZ1U7Y@#b@qHQ#B{IB(N^YX<8JkM8((US&I)5dZ{F%dHneYSoSG zxTas>9V)xUMg?}I5pznGPdQ)y#v}yRRF>>54*XnDf4uDNi!{$79kKt{UvMJhfPxqo&|eE?37NqOG)Gxb-=7r<@$N!QK;de|obqL&*R zp#f0Sz_qY9|19Zs?M0oGTKrWv5Z4mMN#o^!$4!xa-NE!dan)X*1VSQk2Hm4b8BC>^ zzlT0Ot%D{!jp!m~JTC8@;W38k^>mGy#t|Lx1M`vx(~C0fuX`Q%BuJ*57v4dIc2KY1 zts)cSaElN7Wq%QtUpsW1;HhGu88CvB8F7V(p-6F>dYhA6j{qsRdELbuicvfcWYgd- zm&IqjI@S^U&x#Th-R0_>hEF==^1&gOE^cWYyMl<)bk${?b_r-s={3VIY7_$K&d0wnPJpz1 zZO4ofun$Y~0(W&Hu^)!+hBtqD=Cgn+tFQZuEFC-f(ku^mb;@`TM~TZHn7oE4x#1dt zv@wzD^AASM_v{`qJ7C{X-cSF10v6JpE%cD}jw0x`PJr$B-$$7r*C~!v`$L49sM^jM zt@Dt$+cTc+QEc?(%Xgnt0Uq}zD_^^KSHRB7U@SaHFO*0VXvUOyolJ$N;cuFQ@CQF| zZ}H>+{y`f2Y#Gru+?aoAs}c+?G~g=+0FuyOd-K${dm}!C7+;ps)!kd*?~& z@hx2Aai702RlvzX*W8{>1t+(o1R%abKIjo1dEQqW48uXX9hp>5B3f)Gq*7)``094Z zXk!K5LVV=M5ue)t*=CsY+NOZ+Y4k3MzT+F+afmIut!FkZ%wX!vE=in9t4<7-<@D;1 z9!d<(kexngW41MJ*ZunZO0H4zjvC|H&T_21B_2-S1CNl$$LKpwkN7+xom(&?>$7w^ zWW&w!gWP*(&_=+{^RWWf8&EqwB(Al(Bv7Kl5atBxxuDos7lnOM|M%_F$UPy>GV*_o z$0x4F%&H|sgzXVx(V^&HpxTFucWMkY%A$Bh(YxD|0;L+gZTwLW)&vti=Ng3vW9Acr zgR{cKb=cl>aa8!d84y@vykS-`A;&y2&X8Ndg?PO9MC5i;+~B{; zbH?h|-?60V#lq>s5&fF#8)2Y zynRn6FqOg$ARUR5)$?y?fUVHL*venY{!VE-Erk*nnl0GF`dk|8@BxUVfR7%Zq?x zt_DBHS!_zp)>c}a@ALE0S#t;p4(vRL3VKiePue{g*!?8Gqo_tN756JW`t9r>X4<62 z^M=t+je@`t7ixxa~1^EP!*d0_7u_-Rvd)|vABckQz-w^GjhPnlB2@F&A8 zLF(Zn5TWcYnt+vmanGc5U)V0i9KaJ|GRCQ&w$`kbca*+$G)x!&>c`k>IK z^N2?X9PQ*5D7DPqjpf@>}|D%CoWI~;j8%4f7iBDTK7?;rTp%I@6RY5&FGS^ zg1g-nOf#D+7>7kPew2%Zotby|KDbiOvTInZ*aj)RL|R(&h;^L>hVY{MQ*F0zjYV#V zE8=#f6E2Pt!qH|G0k^ljLI>kZ705{2y-)i`hrK%D?-@*kI$}ubd8g&Rg2yW9?vu-% z5YOsE^G*VF@zqN!u_da0C}%t}vbRPgPGSN`K1T5(5=T>)kgH^yU%vZ-5?|UGSYOcE zzO5kgO}@n@T?yMg8qkD&U7OtPM6ZqV8QlDe{MtfZHqqhBxoLW=h;>lX5?a_(j>Mhc zU`Dj{++ykyA2M65Q6}M452RGwO_!6b!r*-jtg%rj_x(KUVD)y>Q=eBxLQO75hyQ;1 zO?>D-)itMH-fj|G1P*ciNBm!3%TECRi@I^WTOH zFW1a&ymJ0KCSE?e$xE|}i8{4N9Z*T)zi`z~_ZMbVw!)w~N9+vrJDBQr6#mprV^)bn zMbP*=iNsi`;XBwGz&+|a8`*(Sde6bgQ}*cF-<2pMy5&<|UyvMEnHeP$l+bQjbrX8$ zO*0%{dI{~D2Gwy1KC@$i(L7ed{`xtd@7uCmWS1}o07@$Z1a<+bG59J|5iIf zk4*?r0+Oddx^9iokL*c*z|12QZ71bBC1369wDrBz&o4bQXs# zoKES{TIxHKW3{D}3R6Y<*uQoBU^^ZRuw8n{KLw%_c*X&5%-iYL)wNqKY`58eALWHh zFu}oSehCXfF6a}^<;i)`?_D^x0rU`YZM%eai-^K+J{@bvf1Ldg@nda4rvmcff*!LW zH0?M0a94Xbo1~T=aMp9<8Y5fhdSHJ!^JlJ!jI2!UMiz+Pf9ullR?U=;+tAl)Q?eRN z0x@UW{W;Bmqdj>C`mO_{<&zh@C89zST(()2pJbm2)<7F(VE14AbG5#cN}Z?b*1Lhh zgectg=F^~kmUIS@RSaVRZGon}I0jTVjv4h_ISt(zm6>q`ayXOcy7H68VaEq8*&-8x zyHIWtuD!ZU3kP)*F%rvfr!70n`Hln26y8EnD?n{CmR1#!0~cJ*5fEykIlC?srU}b( zD0RB(KWEh{=Es;|^q_RWq_=El$DcF{f6nn=o5G)~j8P@`P+_fk9hxi^=E%ABV^gMhmV9Q5M@C!CE$ zVuHE-ZU$>_H!38b1$Jf{AmdX_xeq0OWaVAm0?wdtzf<;v50-s%iLP1S4PL6^giH-5 zqqtzR;{hw$vEw$))w0GOk)!U1PUwHF& zmm~+k7Vb6huvw!3qY9`bag>7f`|flcfF53%fVof2?ui4+wnQ^8+SuFyCZf`L0C#Cn z?EB}Cox7!L4mLK8p-*H(v`9jcg3+50`=zvTF9C`s02Qy9vW%%B$|I{%cr& zEky_{IROMPr$v8#){BI-g>X_)U23LAOEp`LQ>n1&!-+q*`}q#ZUv#rVuOR>C>9%F+ z2x>%VPM~kfvtB38U^LsiaIiO>^lwrBITzHky2Ruf3Npo=-mzj)^uY_xZ@U(eDnTAZ z2KPaR+t)2Vlx6cYrDJMMB=IQ zdw?KlMC7_X0=3Yv2fO??;36XN2DyL>%8)$`UaP)vk(j>>Pv zoQ5g}+>;pi*M%hdfh_lEfIHh9HZ^u1prRXx%2&r-u?r8rt2Y?453K+OkOe$(5MmE6 zZ_eHQXR3R2K#y7S&;u79%;@$-GknhF*QxuQ2Cu4iHvEbJGotd<+zq_%8)d^=X+-;V+KFIA@q-@owXr3L(y4e-729Ga+U zh?uK&x;CQ41`po2jBvS6rJyjHnNji=LZtU11>SX_5b@*x4lp)yTo2LySWKtL(UBhK zan$eX6=doafE|7hMNpM-FA4P6Xs2}w#svC#@>fR^a+N9+MUYw~lu=bG$O%9K)v>#^ zdU&-R4*vo>oOy!9W%NIbY&ue$fIbNOi#qjV7csK-Ym!t1s)^6f%qZa$DiiHRBX~oE zQVM;9QHog8@|&+g6SO0fx~&34SOVKM*%7^ZFksvCzMS{*01EimLd7y{Vbh%)O^6fB zUv++XcRc$3aOP=~-UPA*@S;r}Pryc)=JgCLki7!O{}LFAPLP^%pK*n+2|o(IDG0Ei z?EZ6r#+$+GbCfWT=^&=#ne0pS0z-*!8;i_=Pv`lkSo^v5ax^@urfs{`fChJ7+Tl`m z{y7`57j#3SZCQ)nHsxg#bh?STs`mozD}rw4c?oEq66M-L2Z!oV)~+5e%isKGzpZx1 z`p?nNP-Fn(_UD29F4^#c)}6lSR!UmdQh*zNo*7Z~00GuITD~i%PrGzk$@T9^X^XYoA5rs! zA>6fsXG8~X(qAT!_1Y zZvAhKuNHKbfRpqiGn(i;(}!J}Vt(r?KZpHNI9DUPv3c9uq^S=7h&V%3fZRlPKPuns_>Xy63h%=^eDR+- zFP(h;{Ic%%Ya){;+5>K^>JQofRd4HP|Im0YAmeAASzDOK)ickto^F4Rj*gy->m&bx zz2^>pBvYGGsYlgQH(g^>J-S`zRzz2Nd*!6Maog$v5c56%?=WC`-V=6GtiYq&!m!P%x5}LyOcOO zc-}f}QHq(y^P+5|mNpQkKSW9Tjmwo$fHg?zH+E#MP_|PVu$xE6NV|}KAT`PQaBjxp zq3RalS+|2Q570~p9aH5x!)_8a7~YQ@pGk<|!I_po)$>2j%dJ@ZA-`8tg~Y*J>jGVB z5#{w6drxy}V4$Ssv>k`kTdCDx-aEf>69KkkWWig=2NLmsIC8Afasj=` zBkBsj$4oE1!uT}yuA*#~%`#|79l#PO-Y!5FF1c^_l)8mnBH-bfdVHs+oR;eS6Q17? z|8U1nyT^M?*=GKrFmo69*k4Cc9^xbh?G6m*2t{EJ^ewU@kU}aPfoDU}^JponU(aebTQAffC5~j<9O!i*#SA9FZbpGt zW$5va&-g@Fc~WGL1hf(fT=o2OqnxR&W>v2p1g!dy3ga@}c1_E?a%)tdrS$=z5v--I zXe{F;^&c=nVF$=6JX!b}P)<_sdl%h`1_KqETXEEno3c)&POim0sMm(v7@qqxe?xRx zZu|u^cPUA;R1fOdA3WO^^sr$Z5ZBbOhkdcNO%6kfM=&;)U|;kjb)R5$roih{P~&H( zt$oxiDE<$$@!GNfZel&_G_m$Y`H(Wu)zK$Biky#r0RBQJi}iVNHgU)iQ%Z_|*?;)~ zzwJgVU9*J!p&<7Ts*UY#E@f2R0+btb@4+zpMN#SBSlouwp)eA%{A@3Lg9z9{hAJwU zZ`)H=5{ccciw|*w&tJg{x&-{3zXQVM0H}-uaF9? zV6_FE)ql|#@W4b5bEohb`4$QRc1sEmb;OgpzhvQFG zBPpixw3ObU2w*H4$py$MU51nFu?GDFpLNmQ&77%|@b=`Ath_xI^?)ZK4waBL4Xnd< z`u%Wew;yc1F@+F=yFL$0(W0t-_f?D~E?}%jsq_l3TBwFqFbCa}70l`UVNkdQc^s_- z&w7xeyhszf!EBdjURuP*+VED1{5w*grHY&6AJI@qn5&i|JdN)R`3I#C^}E^wXtFu9 zm`(ThmUF$rFW3dnHYZpZZhX<{P3kjUbzElholb2JzRi<=0-N@0YFe_JY5fcx_i&h< z1-;acF}voHFz3DymHkqpI16y7HPHD>9DGUrJ(DQ&dM86}X6N)$t4&fy#s^>Ca9(u@ z(XYB+iO#$HTp>N}D?02peMX{Nj;1UUuFbsi59kbA`N%TFyFI_&MqAI+sXP6~?e;iY z8UMP}-h;^Gq?>-Qb9}U6wJf6}D4~<;_c6TXk@nZ(Z{U9E``CXncYVQJiVz$$gOby} zGgs=t^w2D|14kZzzWY1dFmI~qpg`w|x@Beuu7)xoC?yTmoLFQe6g{m5DsnB7N&Rnl zQ=UZvLjJSYx2dRlP-pm)z_OHHF$r-i(Bi*3&Xf5fetse0(rqQ1l!18Z>gnofS3Dsm z6CP0Z&E+1gHMmXq5IIfQwVx9SRHhVP*K)dtN99@Qu2?!l0%eQivc`uRgjrsM?UsD-;X_vYfIGXWMu?pq}TGmrG7Z{FJ^G&j=$s6 z2yQ>Z0n39#=r6mieG7A7O#W@$l`|g;DXp!~6|t<)6z({Dw)*`xA0=M?yOKX?53Lb< z7fRp+GHGRwk_mrTFCPnY!_@>Z@fl&NDP?nPp;R*oA$l_$sQ|yf-^vLL-Rjo6qH?P1 zbFG}P=m>#wnPYXkCFM!S-^U=gudu(|>=(jS!dJxAzer<97hYw!SGI@V`cZ}WaH9YG z4t8)4ZD3$Bpul{p zf+bZ=B{}`2iuWmARA${7Dai$?H;C)pQe2N2}Dv|JqW+NEHoLC#lun zY0rZ%%meT?5TB~JQ+wU|rVw;P(G)fb6j3;P--8_<-h;QOAaFv?%m$*_8uk9{h1a;U zEBlKDoMdSAm%c3=Z(#f3y7vW(Dzj%yC+LycAuGH<+zKksEDMGk{J)z`eGC!3@r#pU z0a_z2M@du*9UK8dyZFD=3kt`U6VT&ZNbnVN&$3Dr<1hsyVV7-2ogUcmUk)g(XrrV| z<6a~m0g12;r_lk3(>Uf@<%%a^>QFwOlw^kN`ZVZrKW?@cnF`18_3ufx1oYL4*i%+8 z$Hg^Qb^3si9XlOo5_8gCCBZ4%+Rr-;{`IW+IW7hT2ch7HDL-vZ+qVmgl021MFqesA zTN5n3O8jvEuiA;5VH`ptOxoWVStp#fxhr~4{A{o`MmavC`QajD!u zHe4}>vDBw3>icxC$JZ?zv!7KjdPnSf4e!qk1i>*YfMB_T`F$-% zGrCCO?$2^W_QJ#jV`nc%&7^X^u&Td!awvNbz(Q~~$^%y=WID~csL>z6lBVUL-hb~X z2dMf7cKC^&#O$plb{CPFIEqj^2wo%4@F+Ta%I_PUpWfjF%(w)?G11TKLa zW;d^#F(%7>=xvtdlv|}fdhHAH$RDBqZ721>!P}`1qf?#0AEOofon`h>hF!h=rBA5$ z;GaeLh3tUwgCI{5;gywhh)7gury^AI*4MNj;UyhPs4X*CMoFl&O_&+Vg~9h|)jI2m z%BcG3O3wWk*V28wcj(~5-OO8<&_nny9)+Kn6?cd`=t+sU(9gdR%>qkOqv8-R1sSGx z@g$5q9NCTAn#Yk6F`YRd%pUsBOE10mNrYDs;C)$-zbR=Im#2Masq~|rUb+p?*v{;Y zCvbn&;}Z}wM0_Lv?w?c);#~b6v-nA>^WW=sQ<~;M3n*?lt=$3Aw~4IQY$rV2!EZYM zYM}J8dLMhHjc>QfRcx9)1mzlCIU-UosjYT0)K3e zes0AKT!@78fyb}L4tDyHY4yd1<4R+4ZE$0e)iElT)<}w+x&JhE*10YDdPrrm-D0BZ z?JiZH$RX9HKBMEFSXA!oyq}a9YSKbdFYZ?{H>jiRlGH%9HX~--^(LZTfCFei6Txv> zdyOR5ZkQ8DvGHwNM?9j3a+#bs^H|`k*cvT`nHj4d_wy?V{f^wm=}v9Q7spSzf%*pn zjTEajlX`iS5N(ABxI4!E7HQG&}rhLueg?K_T=7w2xKmfzEFH{{us-_9&5x66see{lmDigCk|BKePt+IU<; zy1(N3)Xi^*dqgFTh@oXRL^`2V<};M40qZwl>-BG2zz|h^7!)^$Sb*F<@$Tfqzf$Fc zh7w1)AM_n3^SI%+QKmZZSS#ib0HRZEwjX|%igj7tM1Hrxd#@;KOl7yw1k6|CN1B?9 zuDx4KfAOtIRJWFnVxto_(y05f|8$ha^FJMl5bH;se&WwN$^1VOE6-*=UMM^}Wx?BH z;*-Z3Bg+OgZ6FdoaTMXLxKQqP8-9hEa}pPu$whG%<{~O(2WT5ED~ zp(`h@a1dSFkxWYY+G5i0gDElxj*=b=L&L*O=-0py;+&*p*RbS z+2zqjLiZeX4Z;pVa_p4OAENkJ@Jnx&TuCv zLKy}7u;v1=7GJPLnOK-u&UYcUxNX)n&uZ@pp1!hok{Ro=St z2P%6>G|8o0+F~+%r}EYmaPmLg)n9?Leoge?-_l~W9muG^BovRxI6VLU_h=S10gs|2 z@ft%Xuq9W+UhluB(|f0A<@eiT77QcihX7rrgwI3MjSlH<9fE96Wsa83 z>&5TD^Y?wZuv7vcu3&xooVCaqSW8@4AXmv*u8z2X_>epRPx+~hMY05={r0X+ow|}A zOhUHH-7f9D3h=nkM{+yyKq<&We&fcT{$c+Cfx+{8rDkNd0>IFf(t+B|{%K_NW}w;! zG=FC6?ds2{ePg$4;8f5g!XauosRwHMbJx_V`Ec3wzgtnmlt2Sv3ApeIbVxW5ORllb z{Ndfor@9DF{vdSucs4#~d>>MRyc>OlEZEwxXJoX*JdtPH&VVqEC|4 zLzEd+;_>IQ5lftaM#Hizw6u|NbP0Y+dT`C?NeyhGI4F+75l@#{DY3RA50=(TRjT5a z2~!l+Vq8fR=R=7jx!(IQKRW=*;rK!t4vaKyzbdK!!yUCge|Vrzz8RWTXX3O)PAGU# zyEVr|9SBRZOVhfczd|9OdG*=4PqZcnmzUud#G_xcanZy5;<$oRumk+^3$Lrdo9~}w zr&N$7pFHp9NnPox)cNsdXTX>IFnP97y3GdnuA=obmM5wkb<^L~wOU1pF#0a8>=`w| zdnAa6H!ylj()q(qiUbxn?9Y2o3ip$+?g@b6)SItfkf#~g?y3{lqETPaK+Ig=Dc z4rwFd7nu1CE|U=1G*K_v-VqnBu*v*~Q~m~E4?CbM)-Ij~GZr|-MQm&f*?~Ng(6vi| zCJ$^nLvCk0%FL?b)p-s&77QP3IRG<_4H6KnksYd0lD$0!(K&rmvnlF@)g>>*%FK&%(<~Qhx zg_R5vwcf?oHX6QoAb)^0h*pO=NC<1;R@@Xyo+78>|Lq67qBnIq`w>1A2@jF5y3~T7 z|7jNUp`~ayrh4`fzoA$aJ?!~lYTq=SGNQC}vv#TO>+T;sDsyZ7-pR7wi|^E}BI!%| z;K>T_*!J%a3S;}>7Lpt%F!eFwKaXlL(pE~;mTrAQD(HZPA0zJ&{v0b+pg}fCSYKx7 zQXbnYDivW`YMJ=Adl0T_0WH`5(8?(2MknZUC355TR>P%Z#rYO=ddoZS#UEk%BGa%| zh<0Mg;XBV=w%0JnZsy5pq)A^IQ2Kz^=HX$<*1ebJrG0Q=F+LTxKw{x*A8{KUGP`{M zG({({U`qcAw;K-I@vEi5^7Aan2QYsGJYAh8^z?8>E2rW8$qzr|;lg}qOkkd&8AQk? zFQmYBzB?-2A1~KJ^i5|;ebnYLuat9dYNDv&N_ASC&)W@(8I?aeCb2o(tv>-_@;F2> z4jlrC(F+5(8xtt*;G%OM`ycJJQfyL1s7DOnnU=7;kZ}mNh+h51Vt{%i?+y3?F)cof zscPbZVH|vsrsz-Xz}c-K+oLF`Zd_e?H7>2ru;-d^WbB3kqGk2xgtbdM<~RJRP-g&n z;Tv2_y-gQQ`_kpbM8rsAOQPx$o-0FeMmNmVezo?D%DH)uLj+4Vfmbp3)ENe}jmKhGi%3 zjRit|+JY5}Q5S{joUlhJi!Wzt00)o5lQ;=|Zhs&9>fYaRyY5~QjWW5Z508U-FcD~( zA#D*@Q0w|l@6m|CsGrx9GJyM#gmP>eCSw+)A_W;r zNyub4tzWIor7Ix^v6{5Sf`r)Qpaf}XT&~loZMmuxTk+u85~JMH1k6DO31>u=pMw_2 z_F2CWY|X#TkCWAV=07o55d)D!9*$6^@iZ}=DE|1AcJVA@ftBz6l_O`m;Hvf@DheX4 zWFxD4j&eyAN-3`u^SbJ)vgw@#jo}gU%ym6-+X#=rr@`+R+9y8bJy`7}MbX{|+B5k= zKg+qP1ra#sWS>6ex!Viwzf6Xx;->}B&onDzj4r|nKY+vxSo81pQ8S(OQgM;X{XH$U zDOC1ONEjUEWWg8g711d

8 z$!Pgjnz@g0Q`;B#MXV@BsRB@fKV+IrNm)qxK;v7)H5RKDD^dc_?_n=Q0PF#h1Mny0 z#l5I8or4|_ZspGqgFf#?=|X0E%*dR6T8qtd_W&i=A+-CwR}r~O;(i;?1oU2j<<5q} ztGBz)>|we)Q6)6CPjHwiHZjq>DVE;v85a3kM1NO9J=#GE1}6f9@|nKk9JC`|NZE2^ z|A6CpVc{_3`<)r|VCs|=5eWH_1mp2@AdeXb!~aHEuGjIE@em?`C~hxHdwj+^RiTeN*{cl7n-j5L%( z@}y@6J}B691%(krVfK4we*6`{qw{BVT#XKx#XySb4j7_EapfGX*3g9xFf0g6k{_5- zcGz7X+5oj_{J;Q6c+TVqAw=1ja|{3Bdl}e&*R@HQeHisFyyX60Ir|+Gq>MMJYc@Eo zjYXD}Szy?OMH|y&TEo_z`S2@`zW3ziH?4BV#t~1N-7E=XcsJgcD1Wko4ZFvFVei!C zy#U@)_uI?0`pFcG&$<%FNWB49!8w)sO&hp4su-`L@=If>6Is`I6^ljLN?Y|{J`Sk7 zduD~%k^7=D{q^H=$;hgq7-T$@%MIpI%Ccrg|cB(C!_2GVE+xv%;ON~)FvAyLW?z9((on($m$v)1C2ULZzQ zTcflm|eFd$0))! zU{8m*2Q)NXmQu0pmL)B_FjN11^4Dk50KrZggt*61?!hAPrTzm6wV z#WBYt;!3?8MI+b7bzsp&Tz?jRIkm&UoW3hib1L*d4K z62-vv{(^RR>)`5Q!?N-P1^6{Wav#G2zm{9SHkJk?eu9@vEv<8#1DB56 z@97MXk)7WE8Ze!g09Qb$zZD5=ly{XBL$;8bjYgOJA?4A;D;3Cn`Zsp;2=u#dNjrKx=Lt! zAI#9M(*)Pk=EVtcf=f3RxNs12?RM_7!c0%=Oz(Sg%{~sg55kUi4Q?3i?o5ckx-Ivo zv8(vcS@}s_#v1)+es5=7EexKlq!zX@7TG7bb*bL#aC}>4DE-J>d?D)T?_ltjK3(w*88W)Uu5 zqR9r-sGAP(04{BS&Bpp!4pNWg!X~m^JQa?x{};<>@5Ia>eq}pDzZ6uDUp_$fQVLQ9 zPXYU%`K@|uTC3}5sn8;AH#l4T-Jv{G)#RPFkDz{Y6Rm0g(tAl{g2Hu$H+{JN<)CH; zocU;&f?JKsv?lIFI6?X#XtPkrlzb5CuJGg5LgvU)1Q1Q&coq!asTK9|HEl+0Vq;_& zsNavDmszW3K2}SCSqE^r*R`SRkeY^YJ6usGmcIdCW#SP3gLRDazKST9kG$%1u8B>d z>}|3GE$KFH%48qRjHNWvx$o9(FX;C;iMWO5`&})6v4W&_5Z-}f_cQheiUN_2x%#{H z=vVV^PFE}+UCEd0fm_303v0v8RA$LIVwC+u30nz%Hk{MwOX~R2c03M!Z?yMz^qj}j za=_-3wtqP?QZ1&V`H2vz`tE=mLg6NLb{f8;r zlZLe07i?hteBxNM-w zlu`i>%tZ~hqIWnrV?b; z&kMhMv6c{RMa%pt9^7{m((}#yS~0wN3g+Si51&n|v*NsqH-`=nOEN#b5rqaPf+KM( z=YV}KQ;XzeFWGC7iOEnKU=Q?PdVNvU>`v5M6V!}t1IkanXyyFqI;q+t``N=Nq>VU;@0 zyM}$R@;j^4g47D35{i0CdBZi^=P@NNyFER0gjO!S4L{OZ>&t<4f;!jyb9-juLf zsTbV4?)ViipJw6c9$;{=*z8jXUC=4lY(;Nw$B3&?Wf~q=^_(cVxZ@XRR&V9K8pCix zo}`Ru;;FDGo4?Pud;GzSUyB|0JZGyxwi;YyShDR1UM8R4jC^O#-Q@1{1vG#Bwm|dU zjVHVO_Ud@l2=a-+_S}tncVg0d8gpz&oBj>hB!DW24=^SpxVzht8w)xTcQyeb|C40Q zF6JFTXx-REZ}IYDXW(m+Z(Cz_bu<5bqqpV|Dgm6XCo9iXE&bJa0hYcovU~Dp#H;Ob zbfM^CdplD2$`L9Q@wd10>n>rY@kJue?d$HfB}GBwzm!&wOv=j~M2coR+V1;p%bhK1 zPU5S=nUldYzq=he%EDSEz86P1obH-_D17<2elc<*tFe0K!s{t8|4%ktL!a$4)o9Y( z(^bq0SMbhV(Gf0fkXfpE5?l2|?wb)#uR<0C48 zgq~?5)MOYNG~Uyc6>;oRh8g15;_3Ny5Ls&MOnFeW0V_eeJO z#EFT69)dVEs)3AVxvy7BjM{^5>~9M#DWE~Mwc8#pj##9mv_b_R zk?64=mwq~cu|q!aBa8DM(lT9%mKkw^e;n$37K)6eZri5t^+Xc%-i|33cJJTrb2o>h z){!2d`w_v8xE=XP{1AQFIM`KFP*e(H`wN`;0lfNiPfg76+xepU>l+d6+atWuODj`} zsq=7gan<5X^K{2m>CaZ)_rAG7e>e0m11Kd&l_v5d?;0PB2BE@c8t+`Wu{d#62QRA_ z_!7nM-tYvOuWk3(qQ2-PO&kPU!`j@}f!CE+CU7GZx*5?;u-fQ&W6DSX<4aB{^K$zD zNk~J>-(cI49f^L$dbP`s*>W041EI!UlO#Dgs6U0RGxs0N;@cZoTWMb{=!<|`2EXvv zlFnPQ`?nS)f2vTP7f-pTui|@*i9g?cHAM*)lUmj%i>U|lRTupl>Gye(X7oE{>c`u? zYpW_D)@HjAt`S+c+&@<-{JSez(mpg%^sPW~NT0Q-XSXOZ2-q*Q0KZx zDk>3Pt!uvXJ;R+Lo?tk3z!ZwROc*woDtPjCzeqS7=03{RVNaUWZU5$xk^k4j_(+Ge z_PG?o?4sn4>zT3TNH%Oa0jO5C^4(TkqIP%??u}>fqDu=!jty_+QnH%012~?WHFRAD z3`84E>J*mkjqZE~#$L`+;sl^~=sS0z#TGQe=UaI4dzQr&hQ|zXggl`Eh>R*XYx)nt zQfV_+Q4u~mNzGTc6VqgLesPXI(M&)IAD>waB_d0J*4+K?+>GMpiYBs+zr)Te+0}{( z3oaiZl>enTVkSjhnNZg5#2q>so+zyGYuCo@oZ`$q|B1H^%e-={hD4#GCUf%~iHOAo z)WOfCXV8mfjE6*9CPxl4W0u#w|GPh8XxlOI6@F?(>I!M<)$NJr2llJL<$3W zb1l&Wemd;ISGRBt6w6mPAH2R?P(#u2k2^p%Pyi4M3tYuJ?OZmgM~vaR;wtxpyG_>N zWO4!C4Kn;oA=XRuQe?D>T*j?Y(JKm`1D9UP1TnNIJUGjq4xvcJ@+pMs%WijcP&U&m_uw1zWQvGIkvs%}r$U18+~ zA`Y9s@%ta``8L2R)#6|ycxE0x4pAPSd0@)WPOQR5@gBbM<``9JK3JuZ)o8DlYHx}6 zED7|wiKf3j)l`+t4(v_h*m&#{6#5}Q^@5Lt=?VTMLN~(p?t?24fH6oOWLGHi0AonDbY1)l5pT6VNmZf!yX2fH+ffKetlpKn`edOX7S1VJ9) zz*aJ!a$KTr=lzPSuI9e^N6gNv+x=A@OivP5f!?v-X@~MZ<4m=1;RV!ar3pE%H{ZpN zN%$UMs0NO2T*p-YWN!s{oCYW6A1kBBC#o##nO0l`4TmTjidO@-w~_B+?Al=#0{dh$ zWm|nxek&Q#6*~S$aucO|%L%$Vi2}j$yRgmxvJ?F{aiHG!hzwh`MnYv zc}by+WvazG;KD=i^SDkT7DqSyrn~$OPX4#}gj7n>mBuS{1s3RU>4De{9*@>fp^Cb~ z)1_=%$NswQOT_9!hj`aC6**QEW6F*(<%5P+p|9`Q;{dP?Bk5iA>|4nbyHqf^?-okP zf|3>OOA7fsCBz1=-}a_dlYhH~V##c~Tmyg&y1X!TN-&O|RG^;~4_m=HTg(y;^t-sj z;#7W1&osU`PVJcN2*-2A)TQb{)(!;Q`n)j-%GG8wj^6-;RFeA_fxTdQYg#v#w_6GV zrcq2$NbQbi3NK6^Z&{BMb8d`{!Xatix^oTZFiKy;;RC7L-M_ow_$Eei+lfLcJ~-Xh zkO0YvI>fWVNjmY?{WzruL8}0n&)y2$*Pa|4q@wsBw2`U0f2yG^{bN>@+-`f;s)gHr z^=^f($nV#irN;~7g`u@92|VR$m0=wu96^vQHSkbrG|!1NH$I@0S1uyAbr3P8Y4@aE zG7`IRzv?7ckSdU4(H{2AjySZyY=!y5s=y#F3zhn6bx>D!IxrS3=y%a0;<)?f|I+f6 zf*?5-BnFm}HqsDkgI*^{2>cXMDZKb-c)V;2%L(c@nDHAT+62fVK_L2=xSg4F*qON0 z5YYD01hh}CWN`T4N&O=ogSR2#o8>!jTg?#8bpm6x9PGXZGO)(^(VV@AaMdS*v7Cv* zTy5C1{8#zK>BVQGo?zjr0~=!C(~i9uKbrdvf#*ee)=UI)tQ3ck-Mld&^K3l5SBv#w zXi0)SIHY+k40pQc<9MnjQ72A?@!;@V2fAt?mgh_zR< zcl_6NboLxMQ@eYfU+pUB*m4%bq4gZG&;oRy!!gMV4lWw)00f!PiTHo*Ka6`X$0D519lsqw$@~ zN$-hrs}|0Cn2tpMsqIN?1<%39@pnhQ{rCK^As~`EP|`+-3BoyBOF0czch_YX9r25A zykf1t#tDb`Kn#I$6Yqr=_SA&S2Y91NMO^&jmP{>(+B3U)Z@CTZg zU8u8Ay*M?vp@Nr9u@StTwg+^#F?FXyGDuGz-KfVQ zC*cZ#e+ikWmXVZaEHWi>PEy{~(u6D^KI7aP74V`x|8>((L*cDe6f)6zvtylbjoku7 zzjI2QuGUVFVElschtefke*xXkuG;*0xI`aE#iOd$Z0>hhh`>TkvB;fEPW|Fl_A&Vv zN4{Ln?b!u^2aW~4H5}NY92&kK>AH$aXZWptd0JN*D%mLPVp#>)cLbQoPkj2O$~<2G zcw@R<6bONq+O2!LG-nFSwb*5WDcoBV29xo20%rr%RQ0DxXB($Ca64nSJW=Npn1?z7 zll-)3;t|La5l+JeDsy=p5e;mAY}i;UuyVEh06lCo?O$`=o#(Zo3v_A2qoVs#zg3djP7%!h)<*RGEy2o-XC4^g*Gq%$N}OJJajtBq zOSk~<5|d$Y!{xWl6+>pr=O@9hrUsqH6tQ4g&QAp_{#jkRz78?jH>oz-s9TngL)f;8 zGVFz-F^uf)Q=kvOY(}96S(2^EL(FCP`$F6&5IiI^PswySrf1Ji~P2K2%g^xp2Z8;DcORS5dr(CGvM?z zYok0tcKL+SyHSr>kGs$t+@s?eSK1xy9g_=j#GZkhV7|3z?HR65`OH}w?viOzr+EY zGLOL!AYH*vu0JPd_vVkcGHpiul~DfG}?h9p7{C;<2TTF8=gGY+=)e%$evTvIlkV6E-%)gCof7 zP>)-5xy09Eb65RB?F#TNI@;)r*k{O!Nc^%L>U7lpejd?e_2~y`^%bwArPf#1cDQ6j zq-(MBJO%IHLQ%AWY#FUY^uQQAoEZH0m-mYHut|@c$_rKPm3(;zn{dGN0W9Qi1wChn z1EcOIF>HnGKc_E@hy5y@b*Sop?iq!aM-@`I+QXez+SK1dloS!*UA16bv}QA2z0GR> zxBM_)<~(l~1^4}nfQ~(h_~8IUVOnf8L|OW^88wlcii>#dXDiS}Y`;`f?sP5!|S&BYV4`qW1#-;+>UW+Q$A9v%Pr@TGm^WBC)(Ln0n$IJgo+48PM zkRh<>y|!g7kC|*p`~G@seUFWMb{VkBbi7#M;qcMEsQ+U0fS=$~SjN&F@;c%!N6 zUmNe4ImB$O9n`xO3LlaPwBdv@_&dFD81^d5)pT9z#`>}K^1jTl?1ea?FPXR-LTdgm z4WMRCF=$KgbQhRQNmECg)^0^%Ojo}TUyl$p|3Wj2fKP29+e2Dh+Ay(O$R*@Br1PgD zNxJ_Y>S)JL^59ZOr`-;w0~d;iMN`tED|_He;g6km+=>6Hl%dws52$!3^aO}?WOgHM2Stf44P}HGS>qvI0Y<$im zIt*ZE-;Yy*h1Fq7Ha7T+=E9+zTqhrD?z+}N<8+niYRZf{SbNy+wfZwMspA>3`iCFRItKRAznCSorE- z6z*CZKt(l{QMUbpj)7i^-o)s2g2I~78g@x0=gt&hPAzbNFM~onTuT{>aE<#iN&=L+ zt%im5+o3$eX;dgPmv}#Xy#AMMd-@5d-A=swFKC;p!wuwf1225b;d3w@GqH;rr2IN( z7xEN$>IO<}nZt71Zo-risygp6!wN#s=ocwBloIi6rGnYt_yhgc?1je184byMm~wUa z<=m`q%CdnaSk$_)ePDa^+?VFpI4bQm_h&i^H(7L6H;2n0(TeP#56|aE%&HJEb0S4$Zb+7+HX;T|y+<$QGS6YdqqLF>%zqLrQDoveN9)=~$ z0r+~rXAjo})26_v1l(C2tvGs`e!OrVww}bDtWjL7p{j~->c+;7vmS1AoFa7v(Bk<_ z{U0gJbHT-Qk!)knSyi5vhQr-4C9zo<%wf-~OdE0XT%^B2pazj9}u?_v74X5>?MxGy+HTo((A|SQ=0wAcTp<$)JcZQ zhWQ`{2iMs!B&k9V__1f|g z_^6YD($|91j~=GD;Dg&CkNaRVey3!D0c=)VqQRD4sWjJ0%Ec74DYkqu4A4FG;%0o_ zQ$s!YKUpo1HU?YCpRfyfwQs1U8hGb>htDDsZ=UxcQibK_QuZ!5Aw!gUwj-5PLnVXt9+5|6msY?(Mk)@kM4 zz2hSs|NLbjwHfh&^{SlUH#$AWvnLVnjN+egN!c)HOhlB3{%LuL7b>`Nk!3u%GAi4m z=E8>-x@zoMh~Au%yji>UB*^B`Pv21Nh`+~`q}4$S|E{1O&2GZ*sIXKHHvV>DNGG;& z{)|)WicZ)=>Jam8pXTD1ug9zPL4ab`8Mhnhw<-l`!xKx-!PjbZ>EoTz7?CVW&@MqP zNN)M*JmICyg|J;_MCSSeDP{%4I?!?{%j%>5VIn(x=N%9=?@mU}t>sTrh^}n9fy7IV~Li zdK5yFlNpGYh>MI5&f!p9oX|k9bJn&3(}|AXjUR8K$8+3Wnw6`KI3oW1(E3c={>@Qs z)qz-C<_5k>oyHB4)J^+;15kJAaBT*kD*RD5{X#0dc~F-iX%}!@l|J5n!vnh9EO5F< zQjLbHE|7sIA(BtkXji^krqw}!!P-`b{iT>uS=-F(KYpn9sWUvHB7&)C7GP@ek5yMi zZJE~{bmz7Z4ct7hU`IkNPIGKO0`~fFeNdo>d#jIC%vlz!%4E=BfjAXE0mACGv#@xAb!0k|U3 zdbfwJU)T4y(VY{x#XaEq;G<`{|2`kdy;n@sfqW@kY~&t2+?v|n(1!Tw5x8GgiWKOy z7F;GqIGUfSEKsFXJ8VdH)01^hThA5;$ z^wHzmamvPBZi8DSb!Oi)m%ENuwt-9Ir`tIxMZ-d{;u`IP5gUu*jo0tszZ4AmefF+c>oL!Z$hhes zf7da-wAJL^WJN?ElJWz3H0@+oz;tj@`~Y!DBlmZwwU*V-nAdDjgiT9+3mvy%8q+WD zSx-u{#J{~R$@vnsh24|oE~LZBoeJM~&9@#ss_&vGq~~4t-^df2IwQBVv2k=w@jUW+ z3+b;x_b0??*OwK-si%Wknlhh($aRYE$J^Bl9zQ@K|J$S|;Gs?jwtZIV3z_5gzXT_k z17v#*oLR$+s|LQk^Y}lcpQDtw?h-;6Y$&5$uh}x5SJTdqg9U5~qibHIve zV=@%sHn?%>T0Ve;M?dgUM_HiYe!xKMd$CTdc-kAC4o|ttj%iFaY;W`9%T>DxuIc*$ z5JS88D0GU-r&hTWbxcw#tFm;{rfMOYDTT=NuL;i}-060<!B%uk2#bb+!YGK zci5@l9?Yb-|LyYOcD0850fGqA&IzN@${OPn(m&-{?)w_J4vm91I^eJ`xKDgn2pgCb zN*EWAAB3!f?a%y0-Cf>rc}>hT_af+-Do!7SXtz4kc#h_Ux9!!Z>X_u#?Y$UtS!jAU z27vSAT+Y4ST*}YDvk{91v%PD8$!n_)+?>9jON*TuA)+6cL}^JtsLv3ccBkF~I53pF z(3;liDSfR2o;pkuyIL($I{ABjF$D@`>|o%LyFz7N0Zha%3_R}s1~`dR@Jb!EUQLS{ z>Js6(+|OHC-kzx&>Q&Y8fDS$U8eug>+p@1dhE<5k)2s}hZ#wMq*vEN>QODtD$p7dhZQT0uY zGRnP?%A^<_K^PwwlCmjm3q$^XQ-OUaY2Y7guY8Wv{ofl&DK4OE*Jnawo>2XLA*l^n zyFDhb{Inc*zwrrZGld+xwn})3QHK)_a4Z1*B91|B?oWirS_cOQWVdq=@qoKviR5o| z(?FFd{)TDuFrJ8(B?OdaeuK`CFlXE2t>E?R#U~6{zvVxE@c**_7^gxj+x>XM@iqp$ z$2NXBEXXf_Fe~lZhq|OVgG(ANwYMK=${2k3Et+h27Cvp^>cBfQMcn>Rx9`5)w7kuG zt1r{TP&+gM27S;mQ(O~2ox*7o%_>MIY*|zSfiHmXX?Gk~Pic|wtzGoe=CA`ufoHD~ zv+S>-M%V^$+pfjbfx^IvZVHF#0u4bM2ts^G`iMTt{dox?oYR8GfxGluPAilYL%D8F z|1jv5PoLi915^HPtm`l%%+cY z``-v!Ky_2M$~LGNup##qHAq#zqQV_+`BdzfdGYXPjJp`vzTp`gC)W7;H2vc;m`mln ziFw*EPMxYxCIi$ zR|+lG%X82I5xqneKMnLxU)zOuf^X-T z5t)~)3CcoUyXD+x@SH*t5T~d?r>GuyY6X$SR(Gxgv7bPP~rrNodR;m4C6>U?|V*Jlw}uI_<=Sbl+@g?{!7?@oae@&KtzJU=AE zYQ}#Cv`lexPA3m+6~<3M)y|NQ`DS9ZJK+MXF@Wqf&p5055%!^tG?XY?ffJOlXNLU- z(vMPlT#zM5Meeox7L;wDP2c4D-83WLX>5lgIbw@njfiTZR!`v$#;4!VI>DK)_CV)d z^af@01m;`RyQfPCJK+w7wR29r%tHcG6IOhyl?ZR`50nn~an2L^M$9gGEy0cJ-L}0K zesVLE+>PAmcC;j{mo((RbgXTcueWj`f*=t(xK^LNrU~6_)rC(z=9sH zN9{!_K71-%V97AB{L12gY6!ousazAftHYV<(4Dg`(k?y?U7@U;DJ>Rq4@kl)q?J<) z10@UYgaPZiW2SZg(f60z+0*cURs=Qu*Qvs_k87*puh<7E-fHPO4i1Zv^JI)1WC;OB z5^_(_MeROSj}=9x;Ze$SM%v(x!73&2jtVqIiCtJ(07ky!dV(uq-SJ>cFxzPoF&(rP z@)Yw;?+*#b4nDVJjx8k;ZdSU7lY{zz95;v9FvvZ#J7?Ic9rL~8>>AAO)O+X}kYEX^ z!g`@^HgVrb1dW9wdAMP<=Fc=|61<1DxGv=-vdgcB9oMuE;kdViHKVip<*}mv+pZ1y=)^w>wY2p=6dT;pBs-i@8K(svuxYHatl!C)vNZ zY#RTQhi$E^YL9B^P&v@=+QT^bmVcck0->nd4b<2?&|~?^<;5SZVM7L(eF0vhs=pQK zy$1KLTp^+^0UYL$7QI5xD9cMm_rwYS*yw6pRSFuG0bXlT0Bv3-2+E3G#}-SUtI8LGw|V65|~04n5cD>tEP2t_w)*@l&3BQ{5Rdzgt-Mte8@H*T+vg9%jM401uf* zyWY-z`%g_lEh5JQT{vy?)Qmh=ZLu-v=_n8mXH(=i0rkHaof@Ln+ZMw<&o|#^=n8&s zES=HG9GzdT-|;omOC~2>0_@(;0UgifIujqy_MZOHjx@P_bwZ`Zg>5Fg17`QVaWfLx z`;3&pmwhTMtv|cWrE4iC(1IHnJN@p$9JeM1{AK~Mq&bR|m+O(fGQ zI3*^XwQbAssO29eJ3{hQv|XAtl+Q4LyKYBf9x}#{jpcw1jSiVTo;!NcN2hkZ9FnN^Ck^H z38+95^D>78J1n&2F|8aE?C2NT(g;%6$<}sayA`M8h%P*gue96};#_V&MpZ$-d{`of z0KEa$TB{>`R?)AxzB65(V@xbQP)tOW!IfoHQ0G8DnrQgwaZ&PO)M`9w=I`L(hz>%HHC-y&#~=hn`T+Ba~VyQ*?RDiNIy zw%@2oyI~%e{(s1>-%*vw=`t=@N+F;2ICpCMLOVut9!V~DS~EKXzrpc;J&t_i(0+^v zldGui@{IDybd&kZ6C~}!%Y6f9-^dNyl<$xmju5xOy??dFWTWb`5=yH|LIHeb8Ieq6 zcGG2og;Zt}$F+D%TW%XtJ20XLS}$COwTDecN)IR#PG~jSwgzS3ug{*2>cmdcZ@4=e zPKl`RLaht@9$y#$h%1PSXSZ$gs;>Sscn4aPFD*pH`g15#&aAO>Ck)N>rn&k`QpHo> z=RCvu$>ZRm2j!+B0#N(TfXeM7;G)0Qt0MoDG(s-6{pvxbY z@B9jiNugapjgmQbSFO65750rTAd;NCQF{l&W6^1VL%|AiFA>(#_Fc!leq18PX>=2M zyrsoBAbOz`$r=%bGhV?=-!_?LBGvEQUzkBOp}eiX5KFjnp0PIS(d+c$Yvj*aGswTH!{|Jj>3ETn($X( z=X?EPQ5Y<@8hH>aU`&yC=+=U|sgk`oz;Rp0Ok8oRV(#pd1f?V}%{?S)7tB?-a|LrM z#@N1#aac&@-Y;%g*)O8Z;zMINK2_U=r_xH{qNC6}?)ve-Fu*}hT0pOW#B000*$v7h zrXE+F`ia%6J5DGXLH#8g5LOCjYz;IplzczpvR~RmH)xMbOS7@VWeYfRLN>_vMGbog@I&<>e84^~kP5tNY=C#SyXxjhR-Lw!GqJT#FTqzqf~ML= zbn6Q|%o7gS#Lr2KdOWTT569^*0v;O=Ypv#NTsH_y%VYqpI+hCD?fxvp2}qJK&?~Hi zSF=dH5uD4)d0Q)X8$r4=^^t4uL)@tdho`%ys8n}v{y?)XB4*4B9%1e#F{HhSpeLe) zju2#$fF8VL29%dpOp?&}78GIhMkPAshUNM={l9N$2p`ZzwrQ=9d5j9%LA6s>UhzxC zW>HE(WJuU!orS&o54x?2*l9=uMH7`j4ThJ#OPO{r;NmHPiCeyBMSX5%5^hbQ&QpkI zkFB5e*;sF#=-*@b4I9lY?N*JaNPc5nM%|iE;)MO^^P*x&B)Te2-&}J{&Pv~h!_*H| zudcwq;MP;~SLL?>eP{63UD$8q$f}2d&c$wIJ1bK{8UBei-n9Bz68{&twv0I}_0!!= z|HT6SN=Zx7QF@=aQJRzv?jgxfwvPi6HaDWUIa=Db1a06Kwa3bZ*z>s6#vkSpC4j$fCQ7%P`@HJ>B-fM zxVgLw;os-SSQeS!GvbmZmV8ZT-K?$!>v-PJSb0lAp2%AEcf}UjQp6OTL zt#&^iGv&y<-ZY2@JdGdBd}jTnA@(xejdOF@wO@QWhN6@{0F84LtJK)pD zz)>ve_vzeKT{lo?0r6a;@vZ{=?QW*3hu@NkZ1gQaW&v$W5=e!0<@Z76UIqj}=RLHtLN%N@DdZDOYk)P$f z+^Vg1e%N-g%>t)X5hptuTr-|nR|y* zbt_1JC}jc1MKl+(3ij?T){RtWJ)^`PmU z(N8~|EmJ1s7A_Kme(E0Q^2B!lp~(LToRaVPR8axZW`|f29lG;MBP583vr>Q^7BAdiA?qUAfR(sZ8w>I z`!lS1BcLYU5Waa`5;6f-p8fnr^=yM)fS3E=(8Qq^hl#JO-u$`Z#U77Y2k<2@)yoC? z+MiCsou*;_lvOLekeYT-XZ-T~EHKkdg;|s&kj2ZyvMk_xWJUvD>IT#*%!NqAMky0A z9K*qEJmJL(O81@G0`BjG43XYxtL916_UIlq=aWPr`=#V6%ad6bc5{h3ex-6*hMjfG`yl@u^!LJk#Aj(MNZl|r6-ZczPxJ>8?oJA$j*m?T{lKTcb5SGt z853}Y#lbNM4GdnIh0Ww5{N~QiuNBc) z0amwqyMJ%wyH`^-d?ikO{9tZAY=80r*X-}hk?#f_B96ztU~}yEL#9N!3`NYJzYd8mWb-%GF_=WLlFlDb?dqh~J-!|O=gUR@AAL8w zu$QJ;mjs>%qdQfX44X9UnSA^9zuVNZ;1)piI*+LRTbZu#CU@0+ba(pMUxJ0Mlfc+M zmNA#Y9|@~Gy6peIzZ8uPbMHKlWx$*_%*u-L(6uet!AW=$<>?b>Mp-Yg_P6wL0Uu1X zv{C4_rQa?mqUbqMG5Ws^7bvR8!MCD`M|P?cioE`aHxu1KY{U=Tn~@I+K9badln%b` zTwieID_}P;Jzf<;m{l-E56a1E^_So>la$1BRf4t|h7w805%@m)i`Kaj>zyp0ESoXC zI+P%+c8oOjB;$5J85nzn&~zU^m{MLej=HNX@*XN*;WBt~{HUpn?yIBa*+HY~Kk)@_pmpx#EcZt%%)_{$J=(#aS!g#Ij_@vbC>beOzU-}%eXxBbzLGo7** zO7wnH3`@Xi1Bgn{Xh-fw13lgdTEdjsqyP1SXFtcMa}4A+%EUWeQ|nu2L%-tQI&z{z zCQ;DdK){wx(KOYo?Z3X9OX<+cffG7lVB0ftbBf#$Y+cvbfw`Xe8i9Xk!|IDF z|9Ay=|9*K;t^vcs=GJgT@MmgB2Qp3Y#0l6EkGOB}1`JDu-=nA325<(JGw-ZAsh$ZWdoE{O2q71*b)*13VIVxS ze8Xj7b(04e{VlbO%a<{|zob8clQrXk>eII3izA=A81yk)sR`5gJ0KPe6BCEjV(zQE z#^z%nvYq)}e>-gR5Bd_0&wchQsv8A=89};lUn#d>dV6_>4GMj3xft&Qy$yJA|3ZHM zyj7I3np3ao-**YGxwvfnwykUF>F(Y6sKos{=t4mw4EBFUIyUpV&_7j|Cf>b8syw3Wpr_dQO#iIxzI8Q9$~MKQtdRxx z0mQCh1noW0F|X%ZJx{&d2s)z?f<~-IShYXs{8pa@g32>0fg_M6xpE+J(&Z6vV z?%}d1dN*LNX+K?z2O|39?0alG;X33cWsX7;qC7ZWp7M22{W_BZduqQ+c*@-PkoOl? zrmW`Iy=jE;gXT60bA*tq^oM(_hwQ{}g?`2S#3;q$cE4YIB)JSAekx{XLahF=fA-A3E7lm`TWuRVYm6!6}B(iDTfp%DCHw6pO#sDewQs6_|uAwV?a|+m^$yOcOWuv z_=902xPdfL_vk}cgXk-eV~ukBuj;-SG|c=;$qLPPhK6|Ib)5M!KH^EWv`P&{FNfxR z%)GFDt`%#`!;h*3iMy}y{^{WBPfC-$UslE^bxL4e_^sO%w6dfgm<-{`8Va2K6-ec8 z3+OY@K$_pzA9tzaznMU_4~!%C?7mx68RmS5Sr3(MIrX76IfW9|0sn?97ozqQLJEZK zuRfjDlcxwH))UUi5gj8|qo(dEtZf;e>8`?E!pO&&@7dK_t)wnZ88o>+y;Yqp8~oTg zzA0A6pG6X6r|wN7?{E$8ECAcvK)eu7N_PX4CmZ2<=mNPSL%wEEj|l?#UK3h*HbIHxkoj)cC)dKVcHnO_z{%yeB_ zfZ95;9eWWLU$_ocG@!Hp&mZP-}{EypzvywapmG(Qrd0$V3C+*85{<%X$ zCsQijzfirF8t1a`jK?2*bDK)`;MpS`VpK}XkmNn+g^o(en<#Qi8`12gB6NXQWW(1j z%xywDUVJ}IIBa@kk2y2#`%nL>qCM=P3dERPzn;cNQjh5ELuw`iBfPFuoUvHVjk9?@ zk-&@sRQ6S|=T|jsOdA#nG>A9!O#hUJMvuJrZV5bT+z*zY>#!8Fc)QzpG9M z@nsYvD&j482QQdea1n%uzWn8SVA{a;wOTfh!!%W+^)h%ucJfO+@%A+KG&IzMj-L42 z<*jvVp&U{F48^y#<+~!S*sI?FRy+(!KkLxiZO?Nhkf`x#a&j&$Z=tz&n}bKf^QgYEtYvq~8L4 zWIca@e*l(y#w7sU+qqI3hgAq;(%G~-PZ~HYe1Yf57j$+T%!10YY|SilYR9}*)&0UK z_t@c5Yd{|B)R*@IeOIUmTOx345$*6jUuQt)-H+QzbIwIXNpBGCKLSa5Em{uO&L;*? zn1hes{GD%w(vxHleaixlti~!ep>UIe9cJJ{0c8k0w4P#uI%8bD|(9qIt_0hrNUOLvL)%~ zw)z_-t;C;04~YZX#POa=HVC=FxkG0d<#FSl#_`@`{cu{k!zUu@gv`U8jp>|jIdR43 zQ0bbkuE`HLh|FwJ=587b>G_7?=F2})fov+$f49$Nd=n#YI>$-g4i_xp`N#ij=Z;06`6DATOP@a1SY;MD=)Q&KK*vOspt@n~L zdnhln06##$zaXsBk2^`S&(s~UJs`x^fkNQ}EmJ>YhSX8qkCR#8N{xr0&}q12`E0VT zYXz7|{P~67>veU13$lu8An&@L-T91&;K*-Z5wV|{{lMa;Kkx~|q22eXucYGX`Tr!T zlaq4C^rXhB;VMeH;|Pz(El6G`D;I(GQE* zRt*CW4%EFJ*wGNmTtV@L;M^jT@*Yvc%5l*Ex||Qx_zG`6|4Dw$Kdd7ftpqhF*?Uqu z4{(8|N8M@sFS91ALLEx-{v-|PK4cj-Jo-CUuqao(p#SIIZ$ik_u>aMCo_9S83K?;N z?Zod&E5$#@-ZC*?mvr3bax{H&b;3z>a#uM|WKpnLx_&#qJQTGLAnlyTGU=O}`> zR4z8L%D@+gmuoqi9BQ)Uf?o}fJI*ja{1-hiB1SnBqe6@49)++@Yf%KOw0f;@B8%$+<6IC-xY&J1gXG3X4m&qKyvJpw}K?`&K6~Xuv(VzH(;N65CDnnH#mBuYo)nA2 zM$u9Cw>N~u@?B`b5r>@xxpSgecEGa*M81Ki@9%;kekAsBg~RBw#p=M~)1ft+p$j;8 z*L5jKU+Nt12`_}i*G`e6r{E9Lgw?ReONCvuyFL>EXnFl#+1_jz6EVV4!#mqGi{&p+ zA)O&m5ZUI1!7!B38!aH21zHAf#C$=?c|@9lVG~_&k;-g*N-Lb_D{lBsoMrU%zV{u^ zm(ayy)w3^*WM|-5+JC(2U2qn5ox#K*wvV&#%b7pVHy3ozgZ08RRDR31t#&tia z>Oz#%g0o9QPe~l@Z5znT$9fi$Tj&Wr5|{X<(VnKQYDvwxj3|0--2Bi0!a@UX`qBKc-m7HwajP zI=iqIWpr%D#QYOm87a;%s2}-C+Jz+W0}dw1z@VHWl;i|BQ}E$j{BdWQ5|Kqn5eo?I z$Jm(j`1V9mJn9*xhI*AKu*C*=6EXaAMWG9Xo%6}^kaI7GEu~TvR8dYVTw(O_&*jCo z8q&#iJacjoW^RH-0_dKQbF-h{o;b*D0COqbzb_rPe%hoEsw)gX818Ev)_Cu3xo^j+ zo0w~j(7|0~ysv2Nrxt~?^LxSb>I=+!-&)Ep!xMo*O)DK&muN^fn7**)mA3EtjRX0j zkf8OG5o#-dRf>Em5l1I-26Hy?Ia;w9<^NlFDPCB7XfpfM9d$D=;g#D}Yp=zExD+t+~>tq4C!zYa}X+x7GH?E4c; zYgh0W;s|3;eowHe2}$rqVqJ@G!a_|GhOdFkG#?1X3Ey6utyc2@$T{nKh{>ydOnUJ@ zEm;K%is7x32)W5@&--@uztdIzM*692MW*~a3iVdm`d4g--@x3w>){Rc>D()PnF>_m z92tP6^u5J38iWDgs1;le`p5hxIO3Q5y(|%p2M+khF(d->MK#iYvj?^}ock!SjL@7X zyi~oW))KDxO&-#>0SRPME?KryU|c(X!gGFQL1hTy-@}k~a8J%Mdp(y`p%4TwR|1B7 z-M}a;VOspl+FRK03k_RSpl<*c$k3te^-`y``6xH^mK_p*9nXh+Z&ii|Ra{CF7Pe(S zhoh^P53gE1}gr?&2L65WjQBbTBYDa+W_^6S7ig? zHdf|6eV>Zx1AaqZkOhZ)2cbk`h!WI>dqa{tl+mJRuJ*_{ zoC0YgCRpq&2@w8^+DqND?#`0Yh8GJpU~C?w&gwt%*{}y){9PDlf~)tUH#eZU63)r+iXzd<^#y4Z~a zUSrs#>7;xsWg`Id5())*xQ9tFRXAQ;j|eMz9Yf(Dp%`cX?%Ca1M%|hM&QK-_vb}d~ z9F2qtM=OkJKXsu_P>=a+RY1gR(0S~-Qx4?qEBp#Lcj{Rv!W_7}bWIXAj2MRakAU^x znb}J_fmY-@4Yq;Lm69Oaqwk@Mgc-JpK?@dwOi19YCaL-k+#nBM_s_z((S)NQ+(b>7 z8478vpMN#rX9Lght;mEz_zN6D!c-ZhZeWfX9b)5F8VwAJQUsBxaIUCNO8wF9;8#36 z^m(A?pF6{ifcn0&B^!azAMj%ziBlx|@9*Q95(vNWDBdfpk_=3&le?8xc3PJWDPbfO0eE=saUiRo z?60Ydt;ZjFnMz$JqfE}tG$Uq~G-s^;b}#7sGZDl1FVCp`m8*8^67kh*N-srO52_qN zYtstKFa6)XICZhYx?AU=SNiN8c2=P&{+&ZEWr}R50zX|&yVL0P#{UQ>7Q|b91HN0w z!;9!Zei4|ZTKO=dOX?jPN&Nx@QaAOxio%a5tsw zsyf4TECO)5=vJq(j7qRPsImm*JS%zx-n$@+nFj_^I%Ow5^;!-fpI9AUD7|pZ?}1U(v-~4DB1w%Ou#!Gfdc*99O589}$9faX4$`ysB}f5>#&zjAZ)oDJ za4I~M)Ci9hjV+C?bXLd6xXi_-TeWAxxT2&81r-g#cTD0jx8hm>o*61TXF z)Q;X(fjEs$;ZJowEzR3CqQx;=5eF8Ko;_c2XANs;xsP5bM8!u`N;@}oBj@1J%rg37XML#lj6FnD1Nc53)h(U<>U$i_+ zDoV}RLjLY)!8;QYqj35p+!c~IZpqGe4c~fWpL&H#Z<+W*dF{?>6lp;4QUo&1W+~$e z8PA(V;dBu0f*H_9Kf@Ik6C|x6>RY_|nEW!F&?Z-zCW4?xNb4Ef@*#e48*-IZMboxv~KcW0U?F`TXdy355ltCOQ!4obl zOw21DxEBp-ng;rmHT65OF3)2g74Z6TU=gn@pF2XHH+=_d+x?C*mZL`&4SUG(8wQB) z%}6|LALJKDU*_W;|+#4!(dm|nT5qaFMYK7;vx51l~q;Tfbr*pfz&_r0H zeOq~{)um;nUsqe^p{>%cf~%El5V8BbY_syz3ae{Ny!SiZG_Q11ZDlxnN9wuAz{42n z{pjGXpWYtbhQp%FEpzj1KZeM@tSJ*Hwx8i1CP3+@Knp#Q4BOT8VUmuCTXwJMA$sEO zaq#&0OMwL0{HJdho=}fWRK&To#`$^6F>IfeM@7Z0gm%>}W<4hB2A+{@Uyd#Rzcla7 zw;X<3Nx?d>Y61`OivB1(-m((mG52~RWplDac!m1P^SrsTj^iYW1 zbSb7XU5)8p#HHK&Fb^{@Vgsul*)-|*H}Mcoyyunt0qXJRr0A*&HFcH+u{}j?+i}f= zR>IMm!v+8QW;|;9yMvc~I6U?nA)_l`Q^+GO;J|55UcG_go}ZDWA~G?aJwNis=Y zCHc)#bz!(QH|+4$Q33*i|3lN6heP@O|G!csB*{)w6iJ9IWt*f(h_bI!mTV#W?yl@1 zNys{O$(DUL+4p@X27|FP#xOHx?)&%te6Q>G|2fyWuGcx|d7h86y^c$1{(jkVK<@q> zi~9WQTC0VQRSajNV9igXYzb~tDe!pFQEKXrdPi8ZYzH@+zlz>p+Uy(peH9-kY-Y*G z{WO2uy@72Pbjw0${htTk&X3TFgvDgv2ME^*8q*?2l#YhmCx~#s z{TmDwE+ox;Tv2fy>a0CfrJ!-RaQjQ>pZ}r%=)b#a$FRp!G#qGyc}e+<#J?!(9lJTd zWwXQ(zL+?+YXZ-jdObj#y0HP@R?Tys3xwF5i-=p}FIEx0eV!9RMOwecIh%bLsWVyX z8RFTPZYj4*-}0d>B%$Xyv`0Y7SVHcka0O)Q^qlQ4NTXjSOFOE;k9;E9%FL}*16*Oc zjch16(2(Mgt5J0x0_3G9Mq51@R?C=yva2O=24)maQL?Wv72N}ZWZj~3rpN|%7h}mt z=e;g?4Ys|SL`IYn#g_^;qUP|dgeLKw4y49X>WTBEe)t#o-MCDO>%^$M;3FUm#zv!}B zT=$u0$FK-g$ta`&^Z)uqjyYdIbs&it_A&7;Xu|^~02J_HB}s@EnD(IDj#|uTi-L#V ztw;kfr^qW-Z?`^c<~f+m-R*qJqxYdr3{OJsuI!uWzbrT$$5S0&ghHMcipWcI(<4n- z=Jy#S$Fx#Q7E?Om*H`0&Y(#)3aBM~*-_PX}B0o^ty zp#loO=g|@C*Gtdp$qe*`uXf2Xx4IqP1e_M?X}0);p8I~8UY8eJUq)=2AX+)Rq+s$F zGTJ8_{v@J zzbm4{i2()XXAFQOKft*svZzfUl$zgDit|=wx5n>55RkIT+wuWC9bMB zgbm5I6^{48iSL8Hk96W#*f6L={?|zA2m%^4H?=xa6L0f@p$d)v+G#YOmD7&_&SQt3^o3RY_ zME0GV+qG|oBsF5gLzl}W!--c^TalUl??ePI2|44e5mXYWwzoFGFnAU4P(;Q+`>#qmRE?OIHb!22VU!Ry%tsd04xC`;i6T=8CzQn_U$a_h(KmV zE7}sV8ZfS#5Zi(LLw!b^Ery>^H+Z;Ck8kO{IZ?vc@F%PJd}5FL^#(i#V^Fw5^`j*Flb*UZqN2Z8 z&f@mLwwaTpib1~CH=RT+7TD72lV7;72YsmCd2ahRCXXonWZH9UpF&7UH+@1zh1)o? zRIV9_F?}=NTSFDsJa9U0GkVq9jop9AGa()+4m`T)%-`bUa*o=6@sD~YwB8k-)-3do z5b5o^rqDugwvgARR5j|WSwoKDP}!c*3!dhaW+QB2Qfz^6UV6uqKx$>P+l`ZZDvTXQ z^qR9K(IHaRyB{bj_Ja7>+o`>joSUA5e-RH)Z?+ARG>Oc^fR5z{kc|zmT76SZM#Nw7 z^ap$~#)L=~PQrqoWQWpa|p_)j1dV(&oP zSN3|$*FWTlT0=6V-x@fS*pDMT&89on@fdnWRQ8c0Yp(;B>sHn!K(-&AnR`4jKW_5+ z_i~cU{qAGq=Mft7K!~_l(kKZK#1&ZKE^*hlmn)xYZ$R(G>^tBRg+8DQU*BHm=E@9$ z6=#dmRderJQrj;F#l_Ojp!yR{N5r%h_(2@jv8=$DvM^V?D}EMQzna)5&jjLQ&{?Hn zs!gP-J9Dh8wr&mJ;YAf5*CXcpGE!y6A?UlS@B$6(IZ~cPcIt3AOe2t?pn{J_RN2PB zD*N@MlMgl2Ajsh+)t@Hfz z7_-9$3|BC3eioywF9;3+^jO3}q;*y(^bqIm)X{CbNm^I12t-U|86C$cke=v%Gkl4K zkNh~l<+_Ughes+K?xny`_S&7Sb z4&CnP9^av?r<@BI<||9U7W`vy_&}3^rx+Tg@<7@V!}sH;;TYIGbc*SAG+aYwL)A2z z{GA%S0hP zRMPYuVsAzJ9UhqPhX2t3$kXQ2QM00?Bbc5vlQz79imT9^Hta%S=1^;J5*dT7l^b0t zJDNW{_oD;)-i!KUF5u)p!pn7KN^X=aq(~C@K5N9D2sLFhttK4#JfoiE&5wNN2hU#U zm!T4nF~Bl$__~3is~MPi=z?m_u9LMvTiC0c9f%dyI}38mWVM9 z#zb;CK6Vm#N8G2@iJBj`p=}l}AvnSqe{2;J(jX)H4lJyC3UsRkH97!jk?m*$4o3EH zszJCF7_+GOaoJpyBGk_u^s0bR*iY;8%v-=bfKYU_IF>&6v7%l37DOb6Q%$K@LGUT@ z-s`D%WSme71vUqIY?;bwPtEnNBR^2i%JsR`gFP35);I`9;~Nc(6r^Zm8JwVa^my(N zHthz_W^k!X?@B!6F+8^odpk4lbBrxU=_Grf4oiSqux3qaA~idJmPpqv7i)jJCb<|s zB40@ozXM%F-Cl#JeyL+E+J`Y}FJTHFgqeN=N#Wz4$sFzx2hzWzOgiK-2&l)Inmhqr z?M1o_O#`hi?wDE&%g3#Flo3>hl_l|-)QF0Tcj)#<4g*&l%}%>n`o@sZh&($y0D7wk zzH6ce1=#+!Vfov2t-mvgKi_r@?zwcfs@oh&6vSRXxz>zw^Y0ab?3}P@;x>BdnZ|#P zSmR#`?J=6wgAn3~Y=yoltCKxgE2`R7_!b6~J`3E&z*Pay#U;3fT ze` zYHM5#jyb4|1JE|`5qm^N>RZZSI%Hc4SUL0R29s@H7-R%r1lK z8}GIkej4JvxG_P^&64jM6pzW4@xW1`l8a zuW3G-gfrL1xzu6&_YSqZ6_#6mf4bzz84qz6k=Q=_7`3WD>a=Z$qqe`BQh*SD+NY`( z7IHe=GKl+zM@yFA<=@7C3X#8Tgr-pRAHVM2Ol_u0G*@3kd3oL*LNpSoxf^0>j6?9oBH>DV2(5@MoKRrhE`eH{uqQGYkVQ9h?#pW-75$7=w zjJ7;R(oy13)ac_3lFAm5M*YGOGJKnvkv{MRCF%fw7mA$U(K=;rG+c#7@d9=^odTI> zyCHlrkbFlV01nphlf+kqu%zl^Jq8!8Kq{f-d&|*z=w_q|3-(;nvq|hLX1^fH+UF56 zkJG;&mzB;@Wtc=(!ze+X0cidUK}|&bxXV!Xg7_nq%Kgl9CInUjPx~ z5tYToLya!L+(vYg(qvMqJ>gs@>*Ouj8 zp)(O?&hNpZU$GD?SwjwrONu}82h5y5zgPH_`S1?pE1#h;k35xq)mtZfJ;%c3z%g>X zP1_oxKVmk$e_W<18U17P)!&LXA|+S8H^$qmZ}Q);!rIqVT&NE@onuaTcet}wCRMBj z=k%et&9&>jeX`6*wV&6?|Njdhmm~WzdJYKL-$wTpGxY#C*X}U`TMLmC7=BK#;ZTF| zx^Ns-zGY_%>2D;Gu$TEw0;&-@c7%c1_1doqFM{;5a-UKPj^XT$8xQV56L{1%#G-U7 zaQ|laScck)AYb@;y_NlFBbHMhd(IL1qhId%b*%2=9vM~Nv!l+=b*HTu^{#m;GKlmQ zB`U7hZ1BXa@17`z`9{Va(77IQp<1NdI$O9Hm`jT>6!$hdsjSmH0gn?)%BTi%bno^+M2(JG(v31nNo&RgafE=(4chCH&KrqJxI2cju!@$qQ!EpYmgJ=tgnRWP#qRg zxI4_*=%8-za|~NnxmN!j8V$@SU_FJuJ+cZgzwMms;<3?-nD6N9rU*9-1yEUrEbUiyg9JAmEgTYiJyb2fgOsKFvHUqpa6x42ZGih{Icz+m~EQyT`GC} zq!3%n5g8sSwv2F{g2jRQ=d?_Ls#m87vm#k6X*pewGAw>KCuff7?OQGj8oYKG%XM4OBFiUiwk;Pn#s zj!4VzC)86dzc+JU4l7@&1-5`gEd4He8Ro`b8z(tQ`yV`cQ^nh2IiP69W+J8^O4HWP z+?!;}?)Je0_#XH(ilY}*mN}^R5q8ulSI#Cq+uOiNh+Al-OZ?ZVi8*% zhX{A$oprE|OJM-IpTWjkE0Js=pQ!9QzP<@d7Y=+Me;zJ7n#N&%GKfNwZ%SCeP}}h6 zh%+%GU9wksF{sir|KxtCyDxrNQE=el4~Pr?5>`8S4_Ya*$nvcH>#ZNbKA5iF@ABxr zk`niud&PIAK`n`-91FGdIB@h?hDSH+e$#a`bM4S3myYeVK}T$70HcmsK&dXrz&Ql% z*Ye;n0#F{XJQ)v!AdMi$Ka~FKfuH=GT12a~qt=Tvb5sX(PnkR5H9qxo2^rMZnUU8r zQy@`i1(8islY0o(CN7s5NoE8YXCnW7z{GaYdIlxhmaZaOpt4;e4DBOAnENAJoXq{3 zW1NCzzAA6PU>Ml5dL@Tv?}p5vKTCEwU<;O&-pLkb#*ZHcbn$BqQUo-Vyr~z?2~*1E z{q(CwUq+>ua|OIfT|GsR$!dnz6aRcGrE={X=9_SVeV@GoXo7fBI)FMBc(Wablhg<% zF+p$4te5CtvRx4XHh!Q)Ii~>AHemJR-7UpTSaAru!9Zq(_{(oia}R7)$hF$NITq_b z9#XnzPah zaILr~WpU}T?e4LDr!eP0$IZ%B0sdpoky_rgS4vK`M{1nh|) zi(}EM&|no9?Fg_0fvXS$It|wNdhvH}rp1?0I9=$r2JN_fo}yG$-$l$I{NDq*ZM0Yn z!Q%rpAm~ZU_o+3*=_s~25_8VejP7f!z)!lj0xv21A0VNLK&t0R@_LYL`sIeJWtU?f zKpzT+fe%#0IuGuJ+1+#F{MVs~^c(XX#D0N@QV2@~8M^KNWs2|oJ$3u{2g^K-2h@Ly zxi4)2gI|Fn!O~pSCjBJH8?|HOFb!n(ygBr)+z=O-i-i5M8wqRX_n`I?;1d3>N`i6u zR2n0NE8F7pNsXtV?P}~PE5djH+sF3>N7P5BsrPAoCA#_ov_nhDL~T znb%cyBJ=vQreO{+6m71R?vV8Q?OPhB3DoDgT2sEZ?ueLs14NJR`701-<6$>fp-kC@ zClYr@M-RjULjfk4*Et~q0g1t7!1H^kLxes;H8=y~lJUFE2mKt8Q7J&UyTts5NBT>; z&=|`8#{gIu#=%XYdIgO0$-R7{S+J+YFgSZ@<^x zgct_kj%R}ccin#f^yNT)Tk+(gAUjLlRv0@lB>1hwPn7z47%;svfFksrcuWzaxi!8tJ zfOb#>(#?>I_Vc#5XZfW7u*aqvTp|^fkdDK@&UV4&pG-#STNy#RBGcF?4nq>=QZbP7 zd4B-dJVbti3V5Ip^t(0`xX(P|Qghm%PXc5>y7`aQMu`8oWz8Y}H8TwdpDP!IZ!)ck zX!u%Fkq-6ws<0YbMLgv>-eH>16SB*!l{yYdurtnAuq^ZNeR+I?Lg_)N^@<-I9Scc1 z+*1nUr}^ZhUTqHKnDtk+9SyosTbtd#K(kttO$JMG!pn8j@cYh=0N>QUMk5OR{wFtp zZ6s?Np{7A>db(!0j(BH047VhmtRuirNh525eyr-$Q8;wPdg8awZ4M+b425tx#|u%G z_Z8I49SyjAjTR2GYQfKMg7HWg@I%-6n;yt-m;+nj;w={$N|o!)m4KcS?_UNre5tyk z;;ba`_lTD&pzNn-1I-`nKhG|n=_nXd)l{8PQ61z@PI2{;1(1uODLGz05?dyBo_kx zxzq*Zn83PQ)ux<&L_p8-0_{>c;3H=ryz-D=iiM4TR&9C3e4Vo!0o_Ib@EMGrNp0O& zaDpZy#F^Chberoh9&T$PLAih%6)*rZ(n7_&r2+*41Wad*Pc^i`L#gI~oR)82NWFe{ z*WfR?`q3M5an#69zGRm$k}N~Ozi$Y|NSLP0gOWn=JW!yE9?O45?B7XMWK~t52l)1B zzr2<0>%YDfwVf+!Qrp^#d1gRGrMs;9B01ikgj3tqt}zq)P=TSD(V-=tLQ zFZ;+M^|_v?cjZ21xTmE!AP>5%qf}0Z{Eh4Gi5BL8)VqbnjIgDlMBw=qw-+6#w?DkU z8Q!ebeO4HqDh6Fd6&{w^nIUWZyMpjP5;`__MVRwqlC-d9cTctXfy;W&FeJf?=pWs3 z`ZSqEfYE2y(%j>2&JD%~l`pY2@k<&vuwfhB!foB>IeXEu@XcBDSc|z`R8n^lOY*M% zbbvApznva8(c~k-D#i1w=iy6AQcWr4?a;rnNc`~JXOvIto!=(pm>ymprV9}_zS;AW zqDHD?Be=(2GmNBN`!e()jYNSh@1tD<$-|1Wg--^^jyN?#T|)F|#=p2vEuZo5?XyuL zmG8a?LBH#tNfFeKA9xsqe)^HCNkF%lGC9@T=8Y=#j=;qfCQ?dv;J&Mn-S%~K`Msxi)G^G7&;R}DJ$50{ zNg&OG4KB0aBym-UQ{920hebFsK?6CeV=Sjl!)av;xb8#5j6L60 zO{;+AGw$)oA=H*9*=O^sS(oGs7N8OdxeGuSVJX()(c2I=_tW~7tpfudU@RVrmrv7F z)L_3I4a_1T$)GO;HM!#?VKAieccCBst;Fk4U{Ed0$-R=)l5_Fn0>Aj z@Xw@ss|QX;!SX==T=z#W<839d&%X)0zgtc1%zzyC^V5N6L{U))HqH0cAC9N}(fjTO z4|xe>u+vdg^8F~e@QloifFgGg>m_THL6U?>Vdka%-pOD5f;7R)R*j%SC3XEsOIb)- zuuxeh5K?m_eo;k8YaD@|?Ur(NHQ&8T5Z|vMc8tR5UcbvN!~t_3#L0t!C(mJxkMKVW zHskf@dp90L0=6DaNkQ|V*3BFh^%!xC3}&*vt?ywoNqmwlzDsPkia0PoW#~iwiPo0t z$2|>(D5UnQ5bK2DnTQK)Y?JsAE1U#vr24NFl&W(MYu3a? zR4++QE%p1s@F0IcPhV18f{A-S@NSrDmjqq5vW7wFr(!wEXpC^;H*oivq#mcgdOnmb zPBgS9vNzpA)^`1&78C&-FpP~{??I;>Q-jF-Mff#F-xWFG+^XPxU~draP)a=5D_oE2<8|3+y*Jpm(KzqqUN|p=5Ed{5)NaP)%LZzN|Gp zf%|WnSjYV~JTtRI7Ub%my!Df9{}%ndJP9ao5MWq>n+9ENHVeA-P~siEIZ5vOrHPU( zN_tRcqhbfk`N50Tgzmd zakhT0ZF>s8^tQ#{%uC#Ar31Q<(GqjY-92b|=xSD#B1PaN5IIB~|5Y^vJ@va+BP{_M zK_a`=Jf1tA&u)N=-rbc_mQxuAKMm|5%TeD5hy{8&?c_zXJ3-K(7oeX;@#a3drmpav z!NcN8c{yE12h)cLb01Kf9jMY6IuKGaQ0Wiq^1S6A6{arqmrf(q%tMI)Ki)V4HlHZH z(7u-{Oz9)JJisvrh$trmJ~)T>bz8&z@f=G`e>!3E#BrxeQ*mj#iIkQfyvIOF% zRAGVU`qmT)G88l)XpaP#lIqWqpOAf4X{0g_m4=MBp9zax4W9|6BEC4~)hw6f=9fbE z(l4Ue`hiENxpZV&0h`a~2fSBD zt0#1f1-uaO4}b}@GCx}yaEjXa9Cs8%)sYUYlh90uBvBx3ij2(=>aiNpxEG-2!AH<7 z3f-5GC+e%r)D%L9G>ykVD#cU+T%ie4Q$xF@Z`@d?Xx#4L$LCaB;`I`Dr-5hmb3K}n zEb*>!#^u^idQhY*DJG5-v(LWz2NaV>tHSdlVVBnoxqF@?c5j(ply=k?XE(?uxM_2wsy`c1o|`y*K?w1!YDWseYy@eS@n){ls^f4I7Z z6w$985i2s0nX5kF0aeE&Esg{y;Q{BK`gAXh5m5hT5h1W%csW%R!UA@cfj~h`$vdrh zB`|p?AQesfb_K~<_Ec8)yh`FNcG2T>DX_7G50dCy;dl$h+cmQ<$sWp1vmc1;I65Rn z@ZMnkvy0n5&%~0xKV&CtGD_m$V9Wazx{j7+g*I7-bDd7+l+Qb^A!>>KCI_f^y_u^s z@q^G9LkbIZj)<~+N3Z3dA7z*^0*;RWZ|wz~+?ULPCfSF%CAOK-Z+KsSc9gxtjPb`a z8w#dCjA~69t$^-2>K+ayHvh?a(~riTeFZJKyMw_Y2OtHtYAHsj0SvwO{=%`N3`hu6 z%H{(A&bp(HLn?7}!g~+?^y0S?v-V(4J?__g&XNfz2_Zq2ufSbLLvVHpd9bv0M5Tb5 z*UfGUdspaR6vjQgN|hZaY4fy0gU5(*LV@C)oT(V`Kbl8K3yQ@3F6hq_Z7wJ+ZuY&x zX+K*~0mz|aA0Bw`#||98(8yt82AeBPDwCdj@MCT+valY9~G1@6_8d&ur!NfBbF%d{@3CY@X^v4ZQmn6rfDqgq{Hqos;{upf{Ja zUsJV7$0A$z*Y$*TyW3J&W!eDCsNaSz+goUnqX)l+Qo%qYagJrIGFT@J&0cc&v7L~y zaocJQDmYfL3sN>dAO}}n>BsL3#{yG-Ccr5dvuEKGhGWXr48H^r(+A(3x-L}6beG59 zYY|nQ(U1j;8&>JLDXEC$izQFH6$mov;7-`(&+lwF`(9)Ytt7EcjPzKj^~d%p1USzo zuA_~h6Ryh#`y5tZ)OR392I$`TfYj@<+fhU|Vu;HW#{;}s#yBZSJxupC$@UY1O19R0Z2ymeWzra*kN;cuBhz_egXqk*Oc;Oz~fNs6H zHp$Pr+)YN@B_&PikFLS4i@CP|R9OSii1n5!Agcv#ngR9;L`9IKJ-7TfkOm*lYt;J2 z#lg72@5Q;`1Ofx`=Bph zA>(Z)Q2$|=8uIq$aQH9wxR6!Y68ey5nJ2RRU$pQCWw%qu&y;PRFZS)Ws0&XuQ#^*Q z+!ZocxO<-Yj>@Sx`4fuH+!#qi6=1An%L^_OEIG6)b+ZCkz_~lnT?=1l$zwVU@PWnu z(i4w^g!o^->pJi}67ra+xz{=JhbG+#LzLi(IviqzGm>YleH&( zFTbbq?j9fHvW6GGW`*slBfF?<$9|1@CbbtC{M-ynnHCJ~l;a%{b@qlfF03;KJSp4(df`SUVn>9lAUSy!t>6Qdt zlZiwABUm+k6e4Dqt0qMGiIM`puY9Tn(LuCEU z?g#(g>dTvnf{V&PwlJvmW8KppsGV#G>TUp{tAJgsghywWY$fCD7YxqDGQ4l*()8FEBtzjkL9badCI{D?~CIo)rUfPVKDz)S7-aX)#^{c z(YrZB+YMR*^Yx!mKF1u(QRlDDBHa5>zw3U;1o>x=p4mSW_US{4+eyYmmJU*N=sDzy zMdUzc!+=Azqy?WGvr-#}Viy6mo(M-X+pTK<8+#3|H@&*>!^#uy^V{|AstPVmTYfO!f6%@}T6DH~M>%S%Gly?YWZo zJ9giyBjuPmC9Nik;WAyQ{8OeXl}NmO_ccn6Tpr{qkPs;l`;k(K1o$cI@xa^DC%%Nh zw`wiM!?L@DAqnd<$jNsvsO^hH?e&>=UxAqFn5wPDyOB)ujKAMP z%5KvzQFll@lA4+oRjg=LdpPl;1oNUBdbLh&oR%!5%nO1flsJkh3;6ppzuZnyd6#VKmlthswTO6`t&YXFX@;|@a<6C)%X7teWs(+o zYWZuru6A4a9SWa`PB85&6Un_6ZWcD%v2)}R$^4Yz9Y>q2{&mq4!=H)8LKhypU7g^? zz$8zN=UhjHng&K)EzQguigTIB2IT8b2YJsF0_1gKf#}5e;alU9hu_-Xu%#FWY}(5H z^|W8Q(Z-Q=en*_{uf;yyel+l_R?h5*ur`RZh^}MVd5kIgBZ- zxAhdaX)y98QBHC=fOPaa1vImbh+OMv_9<;G{FDxby!=j5%NKdW1OMNpB;=aFkSl# znQ|lh{9m60#WtGxlOBizQE0J7(SCX?I=LIUN;Z7ZDQh$7tY|b`+}TwBu+7DoR5o4u z`TF9XR1tj zhEO6SMdx(}!R4(0B{2?=F1tkR^(A*IjqYs&T13RvU0rKDy z`9hUG&G`6Ke%YL*+35r8<}j@Y__#lm5~g&NshoJzCw2U5&{w6R#V(&P!!${d?;j{F zS3OSiuk{cHfGl4Ixd4Fxc8Q%bLJunQ2cQ%wv`H%T3n*&&!xuo8c!OuQ&EcEQ)oCy< zQMTr$$@&Md1Or=`IN+)Lg!=u9nTc0vj-U2eE#qOzI}h%*T@x=V&$6vJWQA(@Oe?-V z{3f!-({Zq`8ougO&m>awcq-vN5LpKAA|ro_*yVFUCL&^7j;9%uNyZBG9XIT94RZ^%>1g+oH5|F zivlB~SvkF1SBy%`Y}E>SbRncy$`=H zMW}QX)Nv;;6Mu5QNJVu#YWr`M%jfA8*+={O^=$!Ep2whT|M3q<$ZB zH-2(ty&KNDm8-0Dgc4jb9N<+hG8~S#_tHuMO#Q%NHn3C0tAJHp!8m47tRXt5n6muH zj&z71C7$I?_g{seP(skkuy~2UND*DZ{x!Wj~U-5mi z!Fs9f;kr2Wi1I)ldSLKFpYjZW22+?(9_b5(y2Jf9@_$OL4B2k9aQT<}cdYnF6{pQ0 z0xsObz}sw-^BzKm30<{NCX|;5MalE3t#uyXykr)?%$ax&!StIjh>Aj$>%uHS&?FyD8osQ&@@fG3YldLWQOSjxfQtY;D7|Zry&A=JYVllUSpJ#M z243ngb~`wG?&>D2=$i)yq5SG5 ziV!Y3+;k2myIpQz-%Bd<5<|!S8X*`iETKokIR2eWv>eOhXnDLpu_xA4Q$vV-==7OL z1E?lc{75Buo32403k5c&D-k`L1m=Wd7PmAaEV@9MR1_z@OV&`rCGmc^&*zJmw$zYw zeCT}j&WFos#ZX6+XqA8X%ZKuT&P;s1y&miFq1}nmZ!m%p%&qF*cmB94&cM4aT(ghj z_hy$>JWymG%?i$H_MLx1R2v8gsR3=w7=y|(Gzw4TP`?6=y(El8mAkAHXdY>Hpenkf zxF4}`Tzc{%;&IAcX67exN=30~8r@rlTvnO<#}%OK6Ouct+0mB+Oh1ZDY_uP7Ik`V~ zaW9B`{NQfT!8Os4U*=Q|dj}H7L0gU8Rqc@aDIkT|)x=ME4)OxhZBfEe)ZDLdPj9#? zjn~X%)$uOhg>h7}wh*ePOcC?rKKOx;-{2uQFX4lW#S|ztUvNlCaR==gh#DNg^L`GL zOK9t9CS?JmxyGFRBBquei%6HZKEwa#BBI3j7XQ_NwKNTT48m#IvFl63iD&=2vCm1d zLq4FnOx}-oO*6*!|Ix2vo?Wmt8SOJ2I#GDCwF<(fA-59f7Oo)l0EI1BbJ++=Ee4v2 zG;tN+(*)PG{X53lJjAxb)Xg6ssM}?Kl+Ow~Q%r*opz7Z9bCzX+39}SdQH58$BE~tFlIX5WqVDml#+&o1XLCGX!g5s|#sUYm9=~wphGq2yL5I2)N+T5vC zPiSLeB!)&>%HuGx|I$_k?K@ys^c|X*=HYiAsVgph`|!rEV_uCoC<2+vG=2&5Acc9p zxyIiY$8;^;hdQWbGEagkkUVx{0@C)g=sj_`_8Rq+A+}{PQ?BUZ&8b z5U~Yy|9R)y%Ot!=87V>WY1GyP=LEmqi?@%`&1&*kp}G{za(;}+#v9O!(#k~ngKUl( z{yj7UM*CV@1N2j9f^3T>wPs;L_MyEFe2INwn8{LaK`GOz9)yt zufg}oQOR~rco#D$su7$nkLt;dw|jc~jxqG`Ed?XU0?B|yp=?WniYW4R+0CfF*)F2H z!XMPmFc4kR2G9C_4Oi>;LRz|br1q_c(wg(uQBl_K@sZiidlpWF z;egvFfU64{3cjA-?3+3QU7bb77EK6Ho*tr|hf+Oen7tkDVMK4)>K-35zyAB`351oa z<}`;@NmGJO7z+lytFhRry_EwOB4gu4xI`?Hsj>HJd1qJF!!vbCo)fnpYzVa|Gne;9 zhJBN8%F7yTtn$2y(H_La>&|JD-53AbGt`##`V#}pdURp6(~r_(*V@iqoC%tlSFmmV z!9!s(q&@{sU5(5ri`)0|EfkY{BbFIelfMCPTi0lsnPAtU8=3dQNhe~GFJMP8S}Z~1 zYY2UG1}z-Eh`*gsQB-@5+kbCpqS4hR`rP+Ego#M{=LAY1iJth?;W}Y|$^SCfa;2V; z5a|FV{S?Ia$&X)#1>F7@B0Ht=wQ)xzMYl_Pu)QTsC*6R8^@$bh#UNECctRqffa384 zu9)$v63jGC_mHh}@8scS+rO@Dr10&r6?h3rHoCZ*MQQZ!=i{TUoRjiDC9-uDV-*+5 zc(pt=Y(Iobyp#n$u)Of3?|d{x$LP1kYF_B@viwM*`5{bmvk#?`#61__60~NoKv_2d zdUQ%O|ENi()lq7%QZPh$yyu0ycM%VLN8>Mwj*N!a+UfTQ{opDAY|8uH{=8s1aCug> zzI0MZO};MY7{OxBOLZSz75bW~WPZRT)$?o@&GGF=ANigEXxxGNNZ}HXA=;|)eS}jo zceNf$*5;$ToV%c^XnT{!Up}|Jto|$eL8sH(zQfLhI`wQ@4!cO} zyR3)9S^;6izx?Mb18%ABAnm&pp&pu`+O50X;GR1@1_cM7QYsa$4geD5T1|O>9W5`A zW!d!9UWsJrwew`Yxvi`)6de&Le@XIK{w?us)yq-d66OIwG!wdr3>NJ-fAWea4&YOh zYnlqWiB9t#duEe5g6%ZF4Kl9ncfrgI)#at{y{b*}ni5PM26a1;7x>7dUg9&;9#JE{ z0S2JL^P%f*M1QHG7IE8GLsp*aF#R8!*n_W!tnx}v!;|oHT0+{l-=$vKE+k^bJ`s{) z(W^wBmv=*Y6y)AV}>xx1ul?<>7JEe z=qyL7`a8fc^zZJ%@c~E8_Vex_P?>T6&L4|xuKgbSBAW{oLI1B<9QQ*f^UwJ{GrA0$ zIA~eAz#yWjTiobl1QZZayNc0Iz2o=|QJeYT?u>$Kbg5lCLmi^Zz{+4NlUE?zCMbAByZYdSa(Zx0Voy&cvSpiA`OGQh876e$hn%3i0?q zS{)YSdm;}fU)x?J$1L!SuP&I@rak8wCMlFs3qldokDnozyAE8X9*aC^C;WY#(YQff18w{i&A~^e~3o~NR5)Ekx z*5(+Od93I0+PR+I0+B;x$9AWnEKiv>=6*)SAzzT;%%i@Sp#30VP*B1Ntvf@RE-$>_ z7;{o@SHly37CZWe((+}Mn0;7%Z%5tkhO<naLcz#=Y0&G%B66t$khNzpxc!5!XwR)&~JU zxga~(a%HnrFv!qHR1Kt4cr~m&hCkV2Aj%VPdng+L$S>%1OBnK}+V4%75HkAcA+~s7 zzFDt--K8KVo8G2TjyNDGcwr{W8|_c-H!y2Ii=7@^%&|g@w}fGcK+3i_ z0@4(HNx_q9%k!L;htcbX9u%vSTZ+)PHMtPsQr2zwVMjpbjQoLQi&)yfy56FVec7RR z4ZL=wFC1ci%b&l$yS4Yhk?kJum}4-1nJWJ5Ev3I9p{9@K(63u>-qk7X)j6@pvH(^s z!oa_(Q%j=woh6Q_gNNi2gt~ddQk#s>1F^VQ@kBb&tUK~l;a~yN*5&8j{tUfq^Kc@$HUTLVYnAc z?=C&U0r^(ql&U9`HB^AI278Mbr2z-`#*05-YE8}cQ{M$xS_A~x=Ty|vpEh1^3TMl) z+B7>)a!XD5f~)#)#5Jb6R=j2a-d7>56-ENOu;qd^Y{EfP**0@Y{N8)Aa=;HisYfn1 zswH68lBC9_=!UYMfW=(jr>FYukVLTdxEO9B0{@b+<>O{YO%4GP^USB^vZLcrA&&|s z9Jg&MegHhJsO)(=ZoeaB^cqg=C3$`PmDC#?-@V)2HM2wUbMWy`B?6DKJ#G!M{ky?O zI+Yr0hc*gIHri~5zZLfEN2PtG$He`(hBUR2fULKmNRo>$1p}N2rc+L*pW1SD!`MHR z9x=;_h9X*8(S_y(Dw7tB+LpspUOrH3l*`yNn6r@6XL5Is>)Gj~(8TAu!kWcELA;JK zK9kBi3}40%Uqr{Th@D$~1ybb)vQKN2!fzVuGREZHe{Dv!vipU3A+Oyl;gZ|8dCda2 z=wxi$y@hz}9s&=VarnI~gr&MZs*uJ3;dFaB*X7@fJ6Q*>hq;&%N9SRqYphBa4Q&6y z&u6<`T9NGq@gV@&5H>#Yh=MT}VBAr}`2>*iGUl42=Ty3IvFd`=@Mxhn?P17BZ?+HE zLx|<`Y0GhqC9XQAFb}qRBLZG5bRk6u|5eaTB+ITUPu#S*d7;Rd09%eK#@_{q6wa2* zEg#XPQ3}_F3!fb!1;MdOSf*%DV=7l3qwG8U9<^-jLYd3JA!9f2apT{cdd5;9B4e9i zdsp0OZS!-g8gBZ1CSrGz!`yyFy0B;W)qs+Y z(`8Ewo3gb}`I4XhI3(Y2?DB)b_yYE%QeyXeZn!3BHl<9et6ke1|IX`@$*ZR>O`hwp z5JkDE?w`Bdm>>M_0E?VD*#DSovGpOln>yfm_hzCCMYrIe@^;zJtQSGX{b(0 zl4B1fq-)Y3X(WXsp}L?1p1k1`_LT3@gcgGn$7$#9vHe>&1|H(* z0*tuoKq1n)3A9QJ6?`Au*m7?7I2t&gG4;An@SZR2Z{9CMJ_7Ju%hJ5L!>@`QJ%`+L zOb4+q@X~&jV2$HLiSy&$T7UNqYQJSDS+TOw5?5}yJuqea*5^*H41XPanZm7kOY8*_ zu)nSbwi1$_Y*B*6Ny=8_sm`sq_5|tvPX^#^Aa zMyk$95pA}Q^A%N5f<6t(!S`DddEKaitKy+gCf`%aSa(vn;_-t>$U)`bqg%j-_1o6Z9=`?ISo2tdg4R&ERWwed zsp-;01<#u~>%Zpr!(h)BzHn4r(%0Q1Ouw6kBY`jCZp9G?^DPvd$!Qmh}OEwdLof1H5q4NPs_JisLBc+CymB{pOTTB?5Zm-y@`y@vD3MsP3(}?3RWHAA38{ z13BdDzru{s{w@*CW`a>nQVQmF0?8*;P1nGzb2Z2NrSMnlx1HBZP}Z)U7p_91{8iu+ zwilvj?SEqtufK{}&{zjRQ3rug?F#GJ@}FiTnC$Wk?jr`E;$yJZ0hvyA0(z8)@~57a zqlp-ToGt+Bu3UW5pe{>+bH~e?ojaNwKnTpTt;P#-4ssFuqgI}d0Igcu>W@5 zoo_A_QI41#0b9kpR$s$oGnKx%40&(-E!$xcV3lW8N!oAwJbI1dNb_#0r+w!st=DTd z*#{IW+glg6(mq`K4!;+SKnV8kd^@p@p<%Fous*}ips#eXAJFPXnm66vrPKwXUi#Q5 zM`#wmxgj6F*tG03SLJpN7P`uu{)R2w+N&pQ4e`)knvL=q)?#!8AsV>@cR9q~?8Kuk zBC0NUrgVJ1v<>F~r(di=R2liP7J-9H&a$1ZmrGkP`Qn?CljcofZ%@N#{n^EDQP}zQ z#TdF_)5sqmcu57DfD=7{`-ipDpUi!%(0c*O=(q_P$Ut3D@cJpBlmu^>7W5cImFi4( zyyt^2?~J*6kM;Eqe-Np8t7~IgcMP?wEZ7sySp=-vQL8(Z*d|(7QG@4hh}|Er#Wkzr zwQIoXOE{=z@41Qb$g2YP;=(KQH0n~Fx0|{FsdBEW;3ry#@0q#{MuSwz8WJv_4-FeC z@*Ocme=(RA2f{-$05mWE00ygxXFD~om#Em!P{tq3)7kT~Q&lZ%-Z1fy~3xW8&}$p(7}$ zn-VG0NIduHSe7&TVI`uY-qD#V+pN*wBsn~#W7*(ivp)0s(&6yLtK}i+p{fHvH24Ya zvT50Xi#PNL@Ji$SJ>(ozA2IOZ9>tZx;Qp6ZgC;_40g%V9XLZDU$=(doNq9yaiJr0I z#v%$=;e}|KDs=m>{~Z0h=;BvBvnMbr9aCvgGIOTuPITx8^Tq$nLai@JHmDUj{8P6- zf6|W%^s%drU9VkO>I8%Y#Fl(6n&YO`HmmdG8Q{rjz|K5qF4tIDy4+C~D%o`J7z_`0 z`6#NSAlU$xx!!4j;+9F_mEiYjG^WrmD5d3BTFLKpU#)CuDT$GDzriq<0sOqbq4(@} z+JA>tQdXJ$kvR&jU+=+d_fiF0`D~SV!g&xD@pywZ`T5H@!Kt-KY z`AFpt$faOWt#RnOF!^fp?H?!?z><;O@I_PyLy=6?6SGhf3mn8(wK#o_WiNDRqyrdH_ip-!dz}xiA|hy=XD1Km_{x$y>}n_ zQ16@&wt*H|l8hf)N1h5=KoaE!A5j*u&yEJ*WmYYLreVYz*#WcgC6h}i46Ut>ad)uw z`Lk3jovfo#jhs!&NzL2QH`JVxxbVm&@h*sU6MhYtG*iCGciMmBKQX{j%OVfq{!4*J zjh^T$PMwo*$JejcN@5N{wVFoHi<4*fU>iSz)g$TouWXt{8Go{Z>44gEneBg zh9F;d*;UmVn&Y&qeTX8O`6`0A2is+zm8j1=%Volc1>!_nG;g54#=C81nah=6i0kbt zcsWPaf$rRKcVJS+$rYz^n6n^v{7G+!Tg(v{4CT06aOEyv7VM)AR$Z~<>Dsrb`+0rS zw*m!Ll+*)qc;*y;3Jt4L+7);$z6`F%3h+~;Ux0djWldP2Er#8ALX(S8r|hZ_W^nka zO}K@YVvzTFtP$?LN5eC%_kKH{PB!6a=b@7S;J?NPtX}vhyKxd99tmD?d6U-Zu()r!Cw7MGBxYodUS^kRs$jKarTwo-N1X7Hf9pdTIr>I zBEP59e7Dti%~2K8HF0KM#fPKDv$Z!eXNec?5|zJnii?!wou#ttsM80D_WV0oBAi^| zI%F<-mK64o;%}H|iL)_M{ml||d|38-^Kr1+S3`Z3fo%8QUlGkE`&w4R3(0=0fE9fM z>uy0T;(lY|C0k1t#~pYwXmgMAF~cUjO?D39zXmUBV%n0uK;jI}%tj$T21tI%Vk)2mDYOt^xqte6IouCkNUvqHei4D!$3 z0dki@GkB52xb`104jvbH9j#+dDlQnCzbWhW3stN+{of9JwT7)Lv&HxgkjL2M6mos) z{oBH9U{LuiJyQh&Vw}tS-asfk{`IL;7W!E8ZP)^OQgUHee46Nz2z|P~>m%2%5JypI zSn`UTMvWj{`24PEga2qHH65w*UI(XBL;2xDm(Y4=p`Tp5%(#jeDN?V1ee+Plz28p{ zv2K_LbAri~yet{RWrl_PIcVTn^X9M9Qdz6_=YlRz0pFA@Pc>Qrk-y@1oik7Nm1G@H zhhreyeL$;CTsY@?Fo|BZyN44@`Tu_bfRlBKR?=K$XQ{XqoK)jGn!TI`tx{mu*>r1k zjurSTJC@P~?N9M(VHumk9|em^r@Tet$g)G^_D1k~FM%#{eRg@6&s42)aY|^t9gpb# zL}OR`$|p751q!(GqUPmEIKrP#bmK4DVhs=`?BihF5bNPEzD%da-~#W!I~;L3YcA2x zTDr@_EduDBskJK##dAGb%cO|7y{0^!MuuEgjb6->4!@%JyG^TR8-4&=?nZ%0VHA-* z`SIhjz_%XO)H8CG2ARIz|Jz=lD6+fmI5|`POV$LM$BT=Dc{hRQ_3FpWXcL-M#Qm=> zL&Fw>?-G{@`|s9K6)Nz#z0lE8lKY~nYB!?ky#SwE$Ej4KbD(_z-!tW(H|j(V?V_#m z4PZ<2_OmMWUTw3|j(eBBI%#YQ6901*S`VS~xKwMPcf}>7?5+Ww)-Om#2mlG1%D(i{ zVr6+LbH@`g@$%Gb(AwZl8! z+-v$WPzl7hex@Z#{FV^rE43{5>RBe~K=+?UiJ$o=M-SPpST>L@ zqPKwE1ZY+9a%P}2k67Zh``5b5tf`k-l8=`D;Ep=JzdRn9fteb7U4dN`N(0VI+jTlX zPIN%;=V`mOG1me0(scxjk=LQNB-Ggj@8N8hIh1wA%xcMyUDk*ItcfN)kYM}{G=p!F`KeiMuN6vlb|Do9r=!I7$<_$19N$qmF_-Wb0H&dY#VA{Ke$!*JzY z@i&|Ik{;5pkPkMu?dHGke-IldCizisH@xY)uXSswp1!+Aj0;Rf?>;p|1-!PSb~lgC zcEL4_Vj{Ndu9I}!Bo>;M9<&~iVGEdf#C#{r7e86`(mUXZXf6t(Oa;ZOtZw!pvj|lVHTHVbub?$}Qu`q86 zR>`m2?^9M-dQHC=c#fZmY84=H7~byI#|kd%c8$aGgL2N{vLnO`iis|LWQ}AOZippl zjD&402^#|;-}^cESY{+i+^K3+V)W}zA(!IeR!gT0w(k7-AEemG)<>z9|CN7D6+%LX zB2X8uKa$ug;6i0kad=CGs_?=`sUqT1s(e+>*UdGbM9seherBX~yJ!YeD`j&VLC~EP z@1f~SRI}Eqf*uk%t=b4>K4ty3A?RFUWmrGTt9juUdXo65KycbE;FQ@Q!?Wu-w`mhk zql`S!qyhX2fP5|B8MM``v^|I!NodE%9#@NOjxoo6yK}b0(#QGBD3C_t*d1R%TvVZb zFZ7ckZ5#IRslzTYp>bCo;0j8G8_9o&{&&Ep1nHDEg)L^CbTk=eTPOce96WK)??X#0 z{tK=4*dRTqW86)+bbdo6(qz@+Lc!c9kgip`5l;y9aZ^cFVSu&Hfp1;fL*?1MBp0K zX%MqC{v9=RF*CPH3hbk_=cw}m^R(a=o9-{SMcp=m-1pC{)}1(b4ZIqk*!3Gu#oz0@R~s932i*pCOzeux zUKq*F5Y+CTqTg)iRqbW6aYo~=R)Rf7kor2ZX#HR+mw27a1JPziqR>zY8^_(NqeUF)bQroK)!LP{rLmbyejP3Fi_8N z`nF+ve}ocW4v~mG%8AJ(kf|(q5EV9R5S-sx3ZJ;8xnqK-l=Z9DzIL5W9LQ65&aAa* z@{TIdB7XhqXT5L-{G+!@5fTTH<`nm40}R4>9i9Ez&(8`Ae+Piw61OV1nbnE1i-n?Z z3T5gI9CKQh(X9xX#!rHZzu^Y9`n09c4i1%6XpSbFJ7(TWtk_!+9X*2OkK)APn^j}D z^Q-$y?gsRSV$m)|l=}WLw{=MH5Gg__5y6h#MmB1Pn+VTJsHn`&Asu^X2jDlU*g(+q z0nX9cCxn*b$6-{8W&Q2+9J*bVZqZ78{;5#X=%M5Dng;Pw-zFR_wQI^^yyu_Rc zhw{snZj_crQ0{!A`PEy3*Y4R1fo{Hz$$+Au@6Sjox^L)kjJyu#yD4R(tK;ZMrXZOh z^C7<rjwq;Zcu{r#@L79V#L+qiNbfU!tkhlC?fK>A^c$2 z?Xi>UaT1PPW^*9xyDrTAXZFqdU^+xi*6LpAE{x}b*VCbEq4YliVF6T_d-w9{nxJAz#OC3(5CuowV@c~Y{*5&oW`vRs4Zj(G z=##(CL-4O7UoSXd|PnQal}kifvbh}klB0bS~$RxH08i5c3=_1vfP~jWs?`H2Hp1y3oo3vJ9-l{ zsb9R2|8cQpOSq1jU3{Q^pzTWeAt2+a^i36$*Ys7hjKxJ9; z4`(W!Z(%N~R}M`T(pXttS4ybaAgNp>JJ`aj^yAN{oTxvP>Q|R{VT_MxN3K!yQBq^m-Z;<15fWO?e_wrm zp;fym0y16a6pq2ij+Zq?wm8P_Pi>RJqZ31~eua$Zfj637??I(|P{5M+uaYblmu0o) zd;ILWemL=X0^r_(zK9s=8k2)A^+DYkJYyEaIFfH#E;&5Btu3Zp?j?D-*>>~>IoeTx zWGe#wD~3-gkYs~8r)3MuoN>elfz4S`N3ATby9o2vS-F<8WseBj!=u8$vPy1(Ec zrx?808{m%G6Z5ltzJ2pjIT#s}YqmTVz{SEe3t%j(<5ObxMR*$$!fjc zy~6$K_V_kT2AuuHIi=EY=rTxjC%=Cz)coj@ipTdk;Lkvz%&gD0I5v``L+2_}J0N;r z%uGnc(G?gX}*MCG`^$KBNnY*DSxEmC(=o?wS;n zlH~q?@@q)Y!~Q0Py56FxBC@E?fby?hoA6d_0@3PyzlG00SFZh}DeFr@y+2-yl{L&P z%6&@luUIv(i+>EByA{Gu`9r}nJxcJZTjfot+z8Qrt0$2^u*WMeO|U{V#QLF55bO#Z zx5^<-QswZqz>3#j-cD;x!5MF}Qq1NNA*ilCU=K2XE)NoAmD_T7D1yvr7; zz!!^_W&mbDAe#ns(=j`(-D21=PV%xW14#lV6!2NGar65rBlPq5y**_n5z-Sa!DFN~ zXdI6Gf&Q?4``yJq(8M8Kebp4~gWUag$kZCNe@8i)gFR>VSTCrFCnFTVn;f@vZJAxu z@+sxT$FF(1;6+DlatFDr3I@e}D;z%`(H>g93dHSMRrTHlJ9J)yQivb;d2qy ze9)DFV!(ruR`c>TcseoMNZ}}PSr7de70`PIo=y_y3+Pd^x9I{LyWqRb;^PviHFr^i z-npxQT(P&5=Z0TX3O`T7z=cxv6z+$g(uE!hfVeFI@lj7!qG!>c(2vxdvsVq5;4lYz zSS|}NRs)y+b`jON3bbZ6+Mz5cz03w5{^0@X^OaiKko_sLHqrJ_tHY&OfJ|A}*9-%S zFZ)a5(O&J&1)j&mm@^@}h{v5oHU#6sb@x$6aWK|7L+<5^pSKE*h~Bt79v@6xXEBQP zu*~jr!LKW^>u#F>{ecU4!)ETotoY}R`$(CfIWkA->tT2p=^|X~wErnM&J6M}DMI|1 zOMfKKV{Y}@AFiFcyh6fC-whV#TU5R4nVq8ES0@<5>yntGbS&^+nn-w>1+IM-aXy8QLyw;zj?_!>wk z0%9M0qDnO2kE672Ln~PYqYd2|Z_i(=0z{-2x-$UA#x-d_%e}91YySaf26TFP_&5yW zzHSt~Ig6Ov)^>g0*>gnMuhrelGJl6>vei)eQ7q>y*J2X=UWJ0)A~QVQjNv1Fq|#S7 zr$it=tW8!y%XAEhwJ)D2c;i0Zvaz`EVnq5PV>~30 z+H=gkFRrEpocH?{!@p@!bCsT-qIX#KTR2BqKzFQ5F_ zWmtgdl=D3v`Iky5gR{+3r}G$bap;2;KpMXuA`J`Qmqq)In(P1)xFO=3*#}mQD|ESF0VbR zT$;4{n*!aVK;;Sthi+^P;?=q} zk0YcUFhAjP5*{TqGF&v>-Sf=3BH_)-91L5pJOlEq3EtdEfZP>}U##`}-sG%-3w!J^ zV~+=~K=%_bB7S_f`=}F=i(|Y!1@UZ-D3y(FQehw0>GC0)-`3%`y$9+Ie^K>!bI zrjY-28wH)s-AAj8Rh)?rQCD`51CzYA*!VY)_1`-8@28ClXZ<44WP&s;5qcI zh+x|euY1By&wGXm2aXtgWeruI0vY02?h!4PV;A9z==Csp4~_GoJtcqX1L z76BKuk1^d}d-Py=53W@%*EXrg#>s-$uyFnX{j@#KUyX(ME4JCtnuR!+ddVZ|0b-$aM*N z(CF`fvM0T%D2=*+u9;0vPeu>zE%@(u1n_DP2)>1S$Dj+O!7lJ<_tNi-Y`|S9iCByH z{(?XOoEr(7)5FWdes+vj)-T+QJTHtdXBkCFd-N>tk5~O(eDbC{ICYN^cZ%L~f@f>U zQBu2Si2VY_1}0Q|Gi0eMmp~-yejC=2IIVx9a`v;x_kAE7K3@7G?Cwoa`Xy9W`d*6) zyB?~Zdd==^(+gf%N4oO{0DNxWdydm&qUHm{V)V7-M;`Rni0fRA+7M!M2&!&|=H9Mv zd-T-FKfP}GSvg+LwJR_{L+3OdfX zcj37KRp(NZlZK3%%R~Fv-6ZC9r%p_cmF5}M+rlx+;KX*+=CKe~B0bB)>J|2uLCn7l zR}Q5pY^}i`$>OikuiW^8FYB|K<*r`3&i7>imdhjzedE#|ci{*qelYkLy1o`w=pWmu zx;sGN&{dr-4)e$jIg>9P~x;(YP5E|y3 z<}#AujBpp@(9_qoF;lAlL?lu-fRi8<<{@XEI(aW!Z1?|J8Tb>3sR3Lg^kOMk_|$>=*uduxd^SPn4Vx*F*qj-`5<{z?&Xhb8z!@ zGTwiePv#k8+<_gkypLL?ppRA|n@I+bF_KVGp+h0mW9yRTq+#*a(KZ|v(2aVVbDTTB zsBl*p#EZiDz?5uCdMzn~Ha!rvvS?wha}M0il1n9YS3QaZ>XXn7^QC%oyO+$5X%`Kg zlGNq}2&XPQs?0CZ!M!C~nc~wkdVbKLd7Oj;^N7FsEAGt;pA-RW4&c(^b~kA1P5k7% zaOmcxHv>5rW-1C1WzY0tKxk0K(Qb`*Npt)i2b4~R4N4ef{f>E+_F_S1?vbSM#QF|+ zdOb%d@gP~Q<9{jeAUioCI*@EFM>P%FW}mpG@?3d0ya=B)_gu66me>UC4+{a-hZdZl z-_2%3&tPgK$W}Xht*DMx zC|UGHMDb7<*Lqa81Wxd2J?M#}TxWZ*Sq!6-K&?a*_9xw061QvT%rva-5v2YQjL;^0S7 z6C*YRW;()Ow<+)f$-&1lxq4Fc*J&{Fm3sH<^83X+T8UGS#9#a+e9;%N>$}~k)3|as zR{Q?gEIPVc@fpTY7Z(7YdS8GV35dU_QcBk!Fsar~nYzfQb$fRZ-FQ5*D^Al|d7*my zBKK6WnM(MARHQ-m``b6~L^$&fzNcV#Ux|%EbJvUEj$8tFY$*NwpzJwPKS$t`C@fw? zJ-!p*j6jS3B!N+9Ion&_sPuo(BOyiQPlXnMW@^C=xHUAE!hY0CbE32D<+MPeS)Z~l z8IZOD=B?Z{UYS>itt)w784RjTc?V=W4rVL3Lc>E4&u-mEIl@Xf|A#7dgVNQ1X*f^- zWd3k#=Y9rP?`%x}jZy2o52D$qUHiL-unnJ^fg@gsN;`)#)KBL1C7|Zsb}Y}g_OO6! z-<0NIhbSo-KGN=Q!!g}%k5#G7tvy@l*G^+7KKzDPlO<>izFYk?EnS?$6NOI9|^s zr27Xop6{aJ2QGf^k+-YJRyrfLdG`}W(HU{?wUyRROv*!?{b6OoOskH!Bf)o&`aZOZ z9j*dpStBMS&-TH7v6XD`~+4N9q1dV?6%bDSZ7l)oRpkvXO!V`0(j_Z6w zAXx5$yCg@1;q5$&+NgBx>QmLGJ4U(36kGD^W#+)=iP|e*QUKNJ8(&f+r6xgRvm*BE z#ZK5x4X0y{+4GiU;~OeMTivM4VF!9IvvnfR5q-`Kar);fG||Av2ldYDjWw|S(6RB{ z$|^d#<>Aky3dr9fzFDlfak7#3$i%y9`Kv!NU7NY3PA6LA)+>>DSB2s*G>5?e-NlE} zn*G7|)qO3jIX~#jV6VXSj+_f4ym=TdQ))OBzdt#uiNh=O!2`AgstA_&IXvUqiLr~4 z=U$W9?$=p)>R?(R)!0V=iX5I@H0+h!U%6T`$EvnVBh4=HAg61+>$;d#_j$YcsSb8E zO_xP4S|>Sb&b@=~{x=S{*|f00#|sCy!0>Cu>0yU}a!>#(K-9l0_yq;?o=rWjkB3^y z)C&(>>~DdG=3kuKOB42*ovtyNTC8`%&tyD0gf2r@ZuH)xEfXjrb{|IBFmZ*c{wTKP z0Ct}OA;)NAoe zpWkBkhf1RBBSD%jLTLfu`}ihr_d zxlm}d%a%HLWlOJ3q|Nifg(dNI3ZZO%KQC!IMV77?FZ7_J7FB>!D6ys{C;U9)X71B9 zqDLJ5M0LLj?bRalD<+AJXA}^v>>RJtp|sB+UWhL(0eavE(h0b|_ygyjRwS`Dc;u+t zEUX3-Bh&pxK3@%LH{+)8O=PEuDM22b_n!ZCWCZ!nemIjfXT1eeAh^ugZI0(lYn++} z+_Yt!6a}p=T_ClRgn|jvAv*{>4WJ&t54l~hQ&~}Hg0dtuAgc(if#DUG6&KpE45%a3 zy2<)r&m^00i%&LP?ng#Ot@|I3;z7P3f<)N-ql15x0dX5{{5Ru0Wy(1`Mcs>~+@H zLmxyg;1Z$y?8jQ%_1DO%YzATV0%eF%Mw(7%pup(lM&3rC3fH- znfyUbr&}+8r0}Tp)cd(=M#Xok#+p@p7o8&cEwhi*4@!_oP|4K(3PM4 z(`vT%+4yL0Uwhi6EXDcu6cND#oh-OX5N3Rg$EZT7_$1>6CU5ZmHtOaO9B<;0XucZwoONY3Mf|00~2k+S=Jn*i%X5zn|q2gD_J|A(ls zE?@$LW{wQzn)`*CuFVKnM*{5HjH1Q{HA9pGWf-p$Cbq|m%K4YA_1rPCp%+OSHA%s> znyedY`Zu4-RqxGpK3=$Vp7?0?_i9~c?>tm@S@C_!gFqQ7Nf`WIZm(Gf{h|1rd46sB z&Hnzb*ywNa?=!SuAe;=qJH5L7^>!8*0 zKT_37XfTORpAyQ;zPrjnLHvcY2Z&8WKH!@Sc;@grCB1}lcM&f44?63)IUbA^8=rny zDt)2Om)$1yNxeBB_v2llZ1Uyiitm4?e+sBmk_MkxGuh!DFm1YBFUw?Hfrs?BJxGrK zPbFGT(4Q%ueISv?(7e9Nc!sG@&W1D-e3X)PzK7b{WxqtyF?O z+TH_8eobHzal%;UHQjH+>p!%3-)UV3zQWvvo&MO}D@JyJ+`tFIK57{v;>G35Wlmr* znxJgSi_MT)H6359B#kG7Px+4vdA+0ImWQXz_gOS0`A$O>S(ghKC+P0bU2S`|`NeE6 zz~Q_WQo1h=4uB0Gxrd+& zqzJviRuEHzPCl+bK}kFx_|v|XYn4-U#= z7fl9gh$o@RzCtqg4DVoRaJOp^YiQ`vwD4pZMWaFK`2&+<>8Xpha;#?Cy3m`;F|R;K zG%#JPY4zs_u5ak!V+E6@6vL{jAg~paH0qU3Y!~86;D(YHfj8+J>+PD8fyB@ws2a1K-Y`b5a@n zoDmiYmt(H0mpL@`oQv+8Y7AC0%?yd^Q*7LhfdUdOexkxlnfq&Gh*1(=n(NJMLtSal}dW@Z&oF`Sf_8~2%BHJKP=<{H@^!Ybu`}nb_GXQI?+?Qj@bafUc zfzQ!A$FppmO|%4wa39N&vRr9g@`;(aMs9(vEmP}%jxS#=`v9Wg6d;XW` z5?e8fHyu@cQCz&o@XiH6`?=$?ohDHNisWk0t&(HNcr?)Dv1Q+G|9;-wv&6*0HwtK# z$;Ut}>;+yn?l+6=+_mT*d+nVA+5lz$SePRXq^m72bGhwNvUF|8DG=gkg4$rj`&{z6B4H@?2}c> zs9C+&pApY_0!Jcm1qV`@WDPo|(Ms=E_fdZ?3@|-po{l>^{R=cm86!Pl+uTkISSswy z8`dpz0`h1hBqBYYH%@PUDa|akvaA|NRf;tDcMPqjK2-waXHj++Aj=>|z*uFb(EEwf zT_WluAP!DWlgljcB`M(LJYjz%=n~FsU*1t}O;ETyE$GR1pP@62g0CjaCf}OEMqn?&tq@2(Z`imOF83=pomJb?)qD*zG#I8%c9Rm1uye z_A^C?Qhw~x8tPpJd#XrxRHG%vafyiE9TsA%J-IsRf1t|Yf{4wQ6X*hO3Yb=zum zBHr|{bHNGSUa69O%8Em!Pc`^}KDq6)M+Wo3Gv$X=tK(WfBg5=2Rws2cpk`rCCXf<& z0&lUMzqX1QATNnM_%&>RI)24Y+laQBAf)Er+f~M7d6i%bm^+@;p8=P0 zylNjQB#D7M&McJqXJ1E|fq*LuC(Btiy=&h%VoR$B|Bh-Z+M-8c zJ0b!qUBHM)@6u~Tq=O)+bb|EWrNdE>E&|e}gd#=h(rf5QmmqZj|GiKXwXp)$@u{M&{>%{DmD)MLpMgg@KZzgzXA{_3u$yDj-pL{|rd( zIHN?u$L3HEkvW54<@Aq0f~qsLCmoZ+2)xUD$^l^Y*q-50FZ#B_NhcJ+G2{=sd5GI? zq|P)?Y-7Vw#6eQ<4bHS(w1FS_X&~sUtP?x)5i0z8XLcReec%fc<@<^nVoKc5yfSzj zRE+wI)FTwep=LTHJvR!=n|uuj*MpFwcSpc~%K2PrGo<-p1(BVB(Q=IzIuYJV!3}@@7x! zbE$9tgI1k{Zz*O&Tn#?<`A0O_In0aL$?q!*sXkUC61b8GOTz)76gW3Qm(%UF*mqu7 zaHNN3=mR4h%r47tGEF&-eKJr-pj7MMnxD$bdtf4U^zCYi5iz6)mMHV%{q25^$CIdn zFxXN5ikd&MJ$bQqhH0iRR|+no53`5l4ml2) z;(1REt2|EXUCl{Ycv@oYmg7UiC;zOJWdkX-;`O%)gN_4#Ty<_xbZGthr4T5dd|fTS zgeZEqQ=>HHc@YwgA+6SfzD>d_%ocW+WHz(}X0p7PexPnp@X~~%vWMyb?b^K2+>JVC z$r!OToX`{%5&0fyt~{uE&2>o0zr0o|%=$fuh=@C2y`1Gdd% z5!m_dK4dk5rqEvU*x~eZR#cW3b^Iy@k|}(;t>cF`nq}IBcW?t3xN-r|E^mUmwt1Qoottr{0|~eA%P44m+i?4w(KVAr|i561wD{bUM{r zHO!xLTz+cJeiW|NASgsxIek-!qY79{MnM?8tpMB{W@Zg`gJN5NmXaSPb3{2?w#!=k z8Vj;U0X5d_XW=pODg9vTO9>OquE9zB^X7sjAHH=!-AE62v;(VBZ2`a55{|(OUgp{< zm2Uan3zvE9`CTS&=+Dn%+ET> zhv;{z&~Pc;=r~I9?$c#UxA;hCybIp`lDG#IZ%+Llt5F^;Kxb`KYiF*Oz0pG0AYYs+ z->jq#0RzQb3~PQrcRHq`+}FAfS)7*to7YKjeD*)KM)e*P(*BMmk2@rM@GWeGo>7lV zu zpmSwh$Z3iTeof0as2A8wDs-%57|fcpX932_WAkNQ>c8AgkOePS#RX7$bArc-IVZb> z%<<(ViXS;kwGR}hyc%EnOv-_iOJHWpBHLh&wIlIi@Cc!@fSY?lDFE+CaZ2s#Q9a-mnD?Hm+sc$SLN zGiv?$m7>+`79XNJy8Fu-&pl)L*R7fD*F|X3HDCMJ%Wn-mG)Obt6xc{}aZFuec~5PU z@idHbYsf62i9#WpNUsCK)ES)6Fw4cjr$v86{50-+9;7<=M zjL)1u*4v&c$Fk{KX~tnRbz&-q`=6DcO;wgDcQK^VyDq)_7s>^U*t`937v1|t zse^ysel>htVbJQzuZglo*y|0VjD+OWtRPw>M!<@vRO=QfuncoZi@&Kdy?#jgbiCd*Yf0xRHAp?nDFp|NW*(<$c+6H*$h5J{g=;;7Tl$df1;W+nu@+PDiUKS9amAm zL@>e&z~DGna$-G*;R60(+^UyT-ePX~&sVdhjF^1!6wApKv6C)ILlU*}i3XUAd_|B}_*lbMoLoo1g58=;a6nQXZ@RvOb!U4pQ9D?kc+(>0VvC zNMb(u^cJs>6chA293n^bX)q{g_+Q{De?NK~w+dyq*Zn3~SrtUiS&S^r4>S5IVcMlP z36zmO^>@3-2ayS$sWRI*WaQUu0%{+k$PAi}&b7u~$xrtotiajkeb;(%noeoz9OEtTi6CbGrArFuP&w34gi5e?0$jZC=vHMWQ-RjZ_3&$o1>Y0lN#D~^4+ ziYI9QgWRaepSptAm)t7U++**?pfp?_y#4<7O5?=ElpmyO4mI|pHrMp*))YMywYsA# zuRr^KJ+A0mrKlftom)M50$RMNbFAt?{5VFYxm(1+D?Rjr*aE%3cA=t>`jauV)ea*@ z_Z*zgpa4ATn>!!5G|`y5v%KL^Us@zt-ytl6RdD*#;SGL7<0oslFJ}#(A;Ze&ALh^9 zsrTvw@JmDA9-{h?z~S{bk?&l8aA_H8iY~2&i67y}ih>gtAsW6}-I1IFT|3`H^rH-> zyEgJFL4wGY53!lHeAtVdri-%-KS-r$u(E$5;oYvvTv2lV+Tg{p&^6OUdISG}pXlOa=Wmt9?Bu zvT0t8{&0ojw{cA@2dG&+{(N<~#Fr7W`$l4#3bpOWO3&Oa{I%@vA z_`=BrRHV@4HPZpVIqpc8`dowE_*2f~HED9NK_-f{FYfx@{IYNdXC;*`XQ_B_G!z(k zmx%83)%a+{?`G8&J-6<1L!GQ3tn#a8?xxX`+IWxMKYu=%2aqU$=)R(W4aDHDq;OsO zt6on7MCtBpgOc$1rweaJHn%OyfjO^YY|WX6zH*CIH*#5R0v2WXF6~9z!F~IDlpr;a z#pKtnjGZ`wT_&IH_VQ_lCs({w?$v2pCZ}ZdMK{Mq1HgW+pii6oe$6^bS z!}VW)(ksUk_n;@#gHEeA00?)qS#0|^!6Ls-3|z7e51sff{=oCw5+In;fn((d+n%t? zr4i9Eld#_t$po~l>p2T$mFSo0s>Iu7v&#e?zIMg=css&}fDL3lt79=PBrelcr{D> zE48u|`mT$u?BnFUx_OTsK|jkL(XENZc=cw6zxKwBXE1;TQEAj!M3eQ)UL@#W(bd_&R zSx%i1(5nb$0`RFhz~KlN{v!J!T$&&*fG^)W z2dcph?~exz^anu%t#BY_?Nh;H{75KTRtq+^PdY$ZeA!=j^L)uy3Q&DTS`eGg$#{v{_T6FEq5!kc&c8XCZ$2YD9ZZiRnDEat zoAbwC^CQd(6-0Ac6>k>HFvQ1`vjE{Z*l&5^tmt28ZY}kRRR%+n?rp@R8_nsSw4P@o zj*O$_+c+{M>eiD>H&4#fJ266ZIcsE4=+zp5ehv1$o%e*-NltcaXeGw{JVTNjH*q|+ zVr&k2>Am7W5O`2z6BD#UPgva>k;9b*N71e9k;-#p;ine@%W(J(lyb(rRR{ZIRn0!{ zd~Mm&jZYN3Tj*q|y4)*ovrK~+|0G5zPECD?@FyI96{8%?!z7fV!oHw9L8EHNK6K3( z(j{r8(G3qvpBLq*gm;)Oo-J+iq2M+7;txE7G z$ehCYZ7$azTzJv91;bf))Xd^XLD9@;mGyzfMri6a#37ZTR9=gxnyXDd(qnI1To&a< z8%<<}ILX5@zDYr1Z*VO?3dUJ&oNPK;%_+7@$-z9BcyKKHhV*`9=XY-gKr%H!h-V3K z4RuOCA@F_7UJ?C>Cu8aI!^}Ulk_FntCwb-_b;w&}ok<#3uLt0sGTgv4JU*h!^UR{B z9)oq=#bqB+Z8@N!O%~vo9LU8BG_g86SPQq8y)ys?b8_|p!@7bp#-sF0Pa^&mL%G+T zbuLfdd5xfHwmiFwzo+>EpWy6qqE`rv9{0Je66L^&J;KX4qyQc^bpUvt_-T<`zIzlo zWWqXPaeoVhli`X}YQH@wY=(VKxutf{f7_(%#b*Er{CG(Dq8S7O7EVP9Wqa>dBv_J3 z_Mk?WN^N{^eUkkVG`VyTgi9M{AU<%QM*~?`=Q^r#E1x@^!yfSCVbg6{{S0R=w=jk8 zwlor?yz@v2h8KOAP2+=S1f`6Ri5G;-Y=DBel)3cgV)u_;6ki~|pSrZc=|Lr`6BZ#n z4YanR1^>Qb3h-65l#p+j1$G#K8(ZxlA`Vf$1J5J^n~339gT7y-CWJKI*_0sJT_-B9 z`Db^6W>(?PVeetl;SkMedpJs6_{W7xY*F`6pByBSz2|UJM?q;TV!3(=u;vQGDm>de zsXK>rbCv)B1ioJ>+V!8OQSMHpr@$7^nr9U~Yh&J5SJPXg`o=T!p0hvt&f!iXe2zx- zkV=J(EE0MW4|Jre+qLDEXQnt2NHwq?N>ETMKIBm9OgE9|f&V4i8cz_PR36w#Sq^_j6C-jR>hL1ddtM zh9&4ekWnL(a-$kvp&chs{7wFFNo5yK{8nX)79RGXuMKszT$xl+_{QD&jjy0nEKqp$ zU%5wf8_qO7pKid~e6)rEyN>Z3(Wu3Vgl?2y9LoC7tFPk6l@CEb5S{x~Z`Sikg~0`J z#E{nF%Qli8*d_VsMWkEjsDrX)Df1Pyv}$rgnP?n|XL_}$Z1%4`)ARJ|y3(pG5wS8!NQ{j=VxKu$0iba*)g0a z+hzxwX-MuBzi;?WG7$yu`V^MDRC9dK zZ)LLhQ(%jvf}%!iWDl~og(9yuQ|m5Gw%UKteoqNeA%nlGj>w8++z6~H_ROXfsV|6z zCyV(LLTy+?$1Qzn*U?j8lP4~tY|%6BNTg|T2C*hzLS&HCKiJoM;&pp=FubIIv~$7R z{2me|@xyQcVbl-1@!%Ew9M*~SjR$2<9pv;vPbs_MT0kVKW)h(p?$B{DP(|P`)*FlS z&Z6n7#Q5e&L(w7KfuwlK$%@C+V?Bs&BPFcELmW-1;n>H|8w3aJKBm}*@F<84aQh*I zhni383Lx)wmRs!TxQ{>TRo__nsNUGqS#{&ef`U$m2PPcGPDw2+^XzVb;Sb!%s1;D9sv<2qoJqE~k$fxl}kC6OCsyqCXL%uF?Pr)qF(6KH)t zGBQ``3bluY?3v|#+d-1L;|Z@fuA|E*FqEl2;(LNbt1ON;9~gK%zNik&kHdkRc~9*N zRP|`NRaX&UX$BGS3#)lk#+<=@NEBhAJ|_Ej%_#p zf%uumSKxad$A9c_|K~1%1>@g8w_Ly*QSPh7e_-U+)ms8$%IWcstpB|HaJ%$akUi>b z=EHJZWK()0!PmimthRGeH?Tw}xB2DoB=Sh1Sn>DKvs-2Ld7(tYHKY4@ln3rZ^~w)B zwJ&BC8#*F+U!n>z4jHN3hva%SMv`Re(SW?%xO?6yyhwXf3yeo4T znx*sfP*pj){=fvdju11{Uw08Y4)p>Mt|n*_76F*N0BlF{1AmpS!Ecl z$;ItJNoTH@{n`i6jsltbp`Sn1WmXIu_&6HM-iVYSgs;Nt2F7Wvie7OtUcO713MWX8 z!?Hzbu%f|{u*C~?0r>GL$B*q*o7#pkU?CButSZn5$;+Hj>`>B$>Cj^7paHWGMdV%a zz@XjH>aBFEE3a{(G;45fxF`5F!zHjy!~S(gNc)$Bx!flwz%DKXcWpVMIT>m%ROTyF~0@1)Ee(l_C}IttaZgip1D|J>P$d3^2S3-nZVj;I^f+| z{gpV-{Aed==2L{-PnqiCFga#FDW{n|FYd@5S7OrEO=b5ab###{#y_)ONVqjn5uZ6V6pun=38)p z*wvDoP#glvu-~ zWaI$-$_lbmxiz+=$l|Y$i_}#a7es?!vaKxMK1T|d!=5kInhg9*vtNaRYvUnYf`5Vuge(B#1pVojwQE~gJT{4j@0gvrax(aY%?{G?QNX;=Yld&(<#=JckT$S-|b%=cojv4_F4^T=s)55&bKI?%vg<*cKp{ z&nri5ZC(g{_E$Js^7_j;vHto@kowaP(oB^C{%Wa*V-}nFfl@sJ4g-m4NuJkGW2V*b zZxco=_x8Vf8EC71QLZ1yStmTuP|h@1@B(1+(y?S7Bu; zS5uDQJzq^NafwR>KZ5ze{ag00hhQa2r@hUG`Iqs<)M>iS;6f9B{{8}8yWn5ltu_zJ zlW_YU+W9Os;N*kh<>0|)T9P5J>=VZOmGF9ps5)Rg1w}}0vP%d#t2VT!$iGZqSti!r ztRnAFujt=WO#fNHT%tTPIst`?FqH9ZY)z&XBMA#-Ml741X^sYfW=yR>Flf9J&&rY)=O zM+vb7a z^85oq&xD{H8x7FkH3hiNVFk6Y59>PMm?Ep)cJR5cxh4QnNf-Wv&nL8lQ`Bb=-AHSk z7;$0pQ4_=3vN`7N)bBWI&K15~9d3fh*qm6wL&SkEX|V^L7><*771r(uAc4XV{t z8cl}kP`2BMzrm0vek2hlmxJj`VQ5m?E7u>YIrwHw3tNvCItogeznSXOx2G@{E`yit>(1WYT@<_hVU0o6S0-(a6hda-&^%lGXU z&b(8vad5V)KD2Vp=c`q28hqW9I2?DK;j5xRr|?#ei*nEl4ms(zc|c!k{r3VK;B3rS zz7nx2a~}|-u%>eR@_~}Q4XS`v0RBxLkY>HG4yu}iDKi`K>!Bk2pVUKWfz(LEOoIET zyRZv1qO$pjhw8&;sJk2XRNn7HH19f{i!ar?X?O7zG77WKDjieXn@Rcd0*@$v3g&es z+C#XvC+D6QO(O#&#vj1JXdW}h3@D@_LSkS2KUbZI1&tzchx49H2&=DKhm(k3phkiP z&L)s}ckjtDN7g$m$Poc-XQ94>X}jT;Wsk?;WIF8~(wjDz@^5OAD- z5LN;36MzGV7%#TuJV5_GkF@@t8QV!=2MT-Zy;a_Flx0JNQsY9ptE;VX{*}Z|2$JUx|EknM91j0 ze&bo(O#um17*wzT1&}H}tC(SV!{&{gUdU+*9xX8R8hjtRG2)3lRZ}pL{m^PHo&@ zDjh$XtWu5*ohaS8XIIt)E?>G#5U9o(;Yl!W1u}~bDe}Ii6YQ*{$6uVozhQq~sywp^ z9MAt9r_JVOS&c819?sVc3Q~6EG5r9KDVPy`YxhVyZTOtXVJaUo{7)?_f>L8U@amR%>Uq_4T;Ji(J=!kyfs`uE} z4j_HTu4mxVq~a?~D$*q$?s!xglKXA+z~(kJ*p zHdF9V5tR*6khMQ#6o+KQFE!)-RGZ999aj4Y2N50U5Z&k%Jdi~~F}0aSUcdg1CK<%F9x;MxFE$aKM?!6&@)WOYm6bbw(>zg4fr7WUHHqe8$>HAwu=v(r>kdOlB z1oS(*PGj%fmxJ2w%||?ay+bVIKN9!HsTTS_60QW3iaHw}4rZ;$;d4FCPUJC-#6_GPnF z-M{#Qi&GS*wdYGB8HPr8w^#)0GO+{DqK4LwH&oAHBo1Gj*S=TxzNWi%#XSZPBtN?S zI>K4fgHu-0!6u~jCLe8DB{W&uTF5AEGNe8#7}x#ngcR=*C(xs-)=?FgWUaXhb zEk5Hus22GRyI=_XB%Iy)cuT-UL$~v~h24IF{CrA3SP`$uwYzkCU7&bZ1?Bew(MxkB zzUpToJpJ1APtrG0oyfhEjL3VtN`APibB0-A zWmKvl5m^VP<~Lkk&VLAlht)|H6)#t6uby2akUnwyOzLIDye2Hq(07cQ{6<5UUzQV3 z^56we!Rz~N4z#C$L7ixIU)gcJu5$M(Eb!knvD!Cs1Cr5r{vjU*r8f``456>ie*>yg z-ApEyI&KICgIBrPf6Jl|)>%xBNKQ6yLBT!)lP}sf=jAq!P-9A&zR**ntfTXe>4ojh zsn4p1s3xe5_sbqUHN6C`@ya@y)ZwmyCy|ur_jM8aNXtD+F@0c26WrjCQNA~j;R;>_I z;Lxc^i!7_GJ&?>$2tVoZjJpN}jE3*n#>+G89Pnfb;I1a~e`8d_AW7RSt)R*(I`UTx z({Kf%qIvEufX0!^ow_VBaQ&RG3@0F+A81LdtlN$Wfl+-QD^a8;qHz(XOeQ8^f)%e z?F~?&rVpvEqxnGPH7$9$^hUP;@Mpn~tK>e1x}kn&%f@Nz zWiJCiX+uuE55FVFGrSmW+pf3@cf)mix?wA3(+_XZ?!%k$zzp>uPWm38Qwpie$wke+ z<|hTf{#s2xu#^%%6+)mSag-NtZ9~Xd2I^-#oC@*c1szfAGMvodRllUR$`4DdW(Lan z_y0Z~x?C>8_6hPMa7%53ZU6Nyy5SnJme^!GYMH3aLCYleXkK7d(J(v3Um1~gc(W4Y zuXqhr@yy-xDKACdDIXL&4k^zGV5^fcZn}kPPodVp&6ftsj*Ig5gk6!G_8z)1e+3X> zaowawTcgHdK5I;@m2g`u@<{QaD5t0u?ic_>ojm$qt}>D&J{6rbE?p6|dVM=a`8w&1 zgl{bf6g)$U9G%WH#ZS8-Wt5d-I}oeaHI3|bhqH4|^!GnWX4?C=ggn@223^;q$aSKS zp+H5&~6eD#Y zA6xE)2bavkLnms^)re2NNdkQiiP!98L>{ZOwa0wAa)Y)at{ysmpL&Yc8cd1x`sIqI z+;{wpDK27TURtx7q>2r$G6G0J@w2I8fq)ewadQAQkjNN97-(u%Xo9(Y9R4*7qe}RA zBU`;PJ{w-g6MARrZ}8DlAb9UI-P?hAcxg~E;I77H?rEEwI$|c`EnZA9^aH3%%ZX#) zvz*z!*NPFXQcvR2Qt-%srlm{4G@pvXSK-p?9Ae^0iUi(<7T^uxT}28^Q=nxUA*GF! zGuian#0S)osLR5ND%vBp)c0d=-Mh`I>JMi+qBX(p*NSDR$4-l+W2x?an_t^S&fq#r z-UkQFunI>(46{HvCf;+K9THm%7hhd1_d#aH-GFYWJagKZ%V6umEv+E&!oHyP0^a!V z&w-U&MTW*L+gsLG9;Bu|-b-?b_3=_I|yE~O;|u^zR$$ac-)Rot?;>MYOHot!;A87WM*m?8o0J2thw>H^^?iTsw7C zr-#}*%g1m6PSmZ?9i_K8x|D?%{)wN~AB1cvRX_#JP>S!@8AFAcdE0nTq6ff^2ju1c zbuowjo!_bIX14OtrL!^$_!K5T@^_NUBjkS2(X_(B__7Oj1gdfioAjhYc#0vp}QYI@niq3OQwNaajy)v7(0~f|CBY|QM0ve%DS`TqBlD?I{Y1bl16gPqNHls72T5%J&gjE8YXf)t+LB+>ufxkgst;FwX&U=i7g&}TnVPU z)HDUF&!op*P{MQjpXJw67XwUh&C`X1yr)@J9>r7(uB6u?RnuSKf18OpLbQmZkxiaE z5xg=_YTz9YuS!!9jFOd+o_iA^SUME9pFp0M2;jQLH(iHavQldkq!$qpYPn{UX!Qncv;N)6$k+&H;Ri;yk+=*v0W4sq-U8$vf==yPbMtU6MOwj7cNLV_iTb@My3E zCLCFf$qcp@j3q0FSBa(P5UzR?6Zx63)c%uOsTPEg@~4mJjs*HHTxP5oxpyRQ9!_)* z8$63jLO!LLyHlZw0-c+D>1Bt?t0{Z764&p_o2+TEW23tO&O}=1g+qbH1{54{PRK*d zZJ)H&5?H>vRnJb}pX;J5%a!H>(^OVt{M4H7eui_MLATfSO6H^dm`7Y#)!L8|YW_lx zQu$>;#ZZaQ*2D#OeBjCItZ&$0mk~$X1WVu3yCw4=EF2|rVbOdMMoM)u(n1($^@*ug+N|;_kA9AkjD(Z8qG(bNBux0@?kgma$nP88Q zg8#6++F2d@#A#QQtIpixbEuuKX;cx7Ea(!_o4zAsrdjfwPhA0f?@rj<%K=vixBOk& zE-zn8X_pcg_mzkfPlH~Q7|ZAA#ouLw$S_l+_z_ceQKSHsAa(~BbJ5C{EpO7${^CL) zqi0PqGx+mcvk4k5-uezL5pZJy#%iJH+FGd7CHfKi0Q~12eG!?a(c@Taw@y4++5Z5r$y1IW^ zZ3R?VD?CoS7+!>!PuA{S?3JX%z%6!N&MfGfQ?>e!^(Me%HjFkbM0f@_b?@RCA8fz4 zn82mXqzp6>cIk01T>GC@l#Hz{(Z9iVH}^08itm2^(}rz4l=se-=NWTBtR5y zeML@tlcIpkiMuEJi{g4Z|7MiM4b#i_goUNKSP`67;bTJ1hCko$AV5R`MSdx5?Ay$k zRrc`^Dm@>yCnl4cbXPy!96Gf}3-A%_E66W~3cQ^3)KSJy-@j1bqE|YpTeOg>LA_mx z)wBm_;v9Jws1Y^3O(J z=na!x8q~M?y~+rh1#y*RspCB=mfxcbB7!shpSLcBy8l-#QuiQTU&`4%a(oo)Ljjfd zk)4{qOW2}WCd?xTZHJ#7^`fcTk$Z+do7z8^q{-`WgHj#yFZ%n?;3GwDPQBwL>O{nt zw^6K;_l`m_Higy=ANwonSFev%aixejw(f#%v}0yuw0~nM@=koxtDwytg!O$oKzA3e z{qrGmA?^dQ&S54p>w#ZNsCAq)!Hw!uTHMn%<_xQ7V4&Z%;&lo@=!K6z0Tbj^e#%Wx z>2n3v>TAe~Z;;T9y}efTnfxBW1b!_i(9J?gVM$qSFK(_<2C#E+T=aIq2jF)mvN7VN z*bksb`@Yv3Q|I3fX7s4%^}15#{%o|p=N0sY@D$ePc@G#>7`=(AbXf_MkCI5H9$Nhb zh5A1w3e}ewE`*&m4)t8yrwMDcp`X+Uy?5?LTL;}7`F6ws$H!{)aE`xPhrEuDJn=X} zj){n*LKS;Yj*@8pVBdxAlCq+@tO8EaX;v3aj*Ncx%0P(#OR~5_?IdQ=V$GQq_YdA& z{0M1E>^ImO=j6+v#cFIOwfhS{@RuBz--Dc$O*lr#%fY!+e?raGoi8T}iXNTgQH_hn zdl%}okj?>AOk0;{T8N@qwdJ9;uYJ%@4u0cPCrHbwPA(lyfeAtO95CTqt<18wT8+!t zyOGh*(Zv)gwD|F75`gWhJSika@PtQzPdGXmH>4JzdaT1*?8-iw5ay^%FaRr;25Aby zx&*lGkOZ)t;zIqQHLPD`>@V^$_$QA*u17oiySV)D@z>l~1UU? z-@7Q3-5D&+Sw5($4*L7|$zQ0g_hkgPAuBl5vwVw}`$>qH-p{9s3cT?QL;t)dvmZv~ ztBGMfqyiCG`fyjz#Ll$*Ko7i&7kY%*y7@WDi+Uqt`?Xk(7aM-$aj`^Yn<(RzI{{!C zC*m`iHcK!()~TfrhB8G+oyV-mq<2}qQ{7#mwE(s|yQseW+kqNNo@nVey>I?4H2q4L zd8TXOMqh*1v~zlh+1SY+&l4J~*>%f#3;9RyfZW|T`{Q(bBuqy;x@ZxkP*3_tH_;NI z#v?X*vPW0RXmSzP%k^-?6s?>D_JuT^*6G(LH+RZ^TweVE@)^Avy+O3mO&2>mwNOh^ z0}R-oD%>KH({YQPO-Ys2YwF<4E?-@X<{h1&UZ1J}c|O;Nh!NN1WCHV^-_GjLEU;#D zdLa7r7JJHFXpeL}1h% zhW++N#4077=dd}cJ(q2IsrD^q7mkYpcv6B!V1sbjm)O*6vR}u+Lbqi31Z(JJte7(q zw;_Ep&pyo0D;)dND`np zw+Fm8Ab+5uP=ESwX`S%@d+8=)X~(*uQQ7UL_*Zfp_T0|x-q(fBVeKH*XL!G1bFM#S zaN>wQsqMr_`j~;1Nt?*Zsg1?g+iF!HuM-PcxCmW%A{De2T=Oae;;b5>UL34!G%*^R zazPl)fs!T~_g?T0-;8P3t?!#~%p2NEG$~`Qo!g9e);;xWz@CO9N9_b|FMB9Q-yVj^ zJRCUIb3Q`EA&l@#t*2JiirW%ru({vCi#%5nKw@EVK6nOnjl3~3*2*{9v(qEd`oIzK zwa?f&j>%FjE^*N7*QN4R8oqK@UGhNjztU32dv^(EmkZ*Eo!4(mKc9^0fx1ow5=ION z=$Q>yqLZ*Uy9r@qPAN9*2wMG8i;*XEy;!hwPjUa+2EbZ>q#`AcN-FX&CCxiq`ePpuvX6>j zB5#1`{_{Fao56OQbde*vg(1m$6#rCI|No9Chy2N2#e$eOG3Q2kN4K6S;Y*o+oxnk7 zC_eV&9CEB+%7X4Jz9&;uSjE|dC|YcH38na>1{DggUa2$=xW+}Y{oMw4m19YP zk#CLBe9ifiL=u=AZTm3FtY3-o59-^g;oqeLI{QCA)h>)tuf>0$iumbrw73y7Rnlfa zO-02Mo%KrA-4WQOS5;6+eZeEZ5D6(uFZk)czwK}@ol$n}37hJR)M+Xw(!XVvWEm)E z3vSmoUD#bf3n}VO-5I*s`u?Q@KKj`kdJ8TFF!h=c91RNmvLO=*!fVOx>d&tIbm%e~ zjUJZ!&CG)384H|*Z1y&)ZV_4*CLgipca~QIM1q@nhAc@&;2U1#_ z#fO~qxbNK^-@T~vzpeDB;k0*08EDDhtGBL#UL6gtljs82Ubz zwt9V*m)*Xw8IvHk%PSv?Zi91#4MYv`U_15rbGYO^9W#?Tn*XIDR;OU${x3I)?R{YM z8(wZKUgOOoAbAR%n#bx2iU~u7(~!jx(g70J#BscX$X;frtakVJ1gsr9hb+* zsohZS>4EX;ci!@^dwl4033rtTk)1apX@Fi{PyeCUdt&*c*33iwegcoGdq-E6>wq$= zb784b^TUkOfFa_;$V#B`*n0~Mq46b*6SvCFDW-&FAHOdz6tEBam&BS|JC2O?V|;@j z7`p(uyF%mF*6TL?k>26P)VnCVqw-10UCQFsV*e7}LB=(x8jXO1RxBvZ^T6-bgo8)5 ztw*q}gQRR!8kDCHHX5huul8pO?kIa*wn)VfZ@?{=)L%pXU3%S?4^W~fxy&S8}p?A+emrs5n$+3O& zWr1nn7Auq&j@C-N6oZCg$R3s>^dEP^cX$wCD&c_jy)J-}_&VanOHy|(RN$Zce#@tY z`W5~1n@iBsGR;af! z>@5lP55w~OLRaOA8jc-PI^H)8`DYMY_fYSVzQE7mAI0y#JZy)?DH}7q6bMb zgBy8ff`^8F)oZAJp<+M#X!M}*D>P7h8dcC6*rQN89|w=t-UXBhW-vg&jW{BOfA?vf5ufbj0*GXep&w*DLa~+ zy{}f=hD%BzFBIqYqM^SytMhoN(`rp5j8d6DHLZt!qnB2pZ%2rK6U0|V&m(0(RQr1j zvGc)mK0CsS+`XeQCn@3*=O6UNK zrM9hZ;zJkMqAj@I6_w7+3*Dx1JkX>Z$wA|;`n|QssgXZCyzgk>Y@2#X64k?u+}N?9 zH%_5Eq)9WE6Lbxp8hVe^qsEEr zBwSU(px>2m{zqW@pHsE=KUc1Fo(}EAe$%8oEG~^9Mq9src|;AmK2X3|0coL`RPNvW zPEfyietC2M{N`v)1y(~&SmJ9rv}RnV7_`6QT`iqH_!9*R^&e8_8M#z zuFDn)#YulJF%D9NHyXKoHJwdEx21YsR0)1&yptvc_I=BKpW^A=jw3-N-#~VIAo4cU zQTOgXe02*b;lg8tXQ4JeA$i9!>`35s-1Z0z_*;8!uAaMptga%Ta~Hx5SO{1?&VGXfHW|3H$tHy6gl zbpxKv+Hzzn=Dll6I{&PZP51 z-?}>ft))PA{8V}3hXugB6IlL4HI?TYwpG{)4e*Gha@DzFdf#dU{CuUhZ~vgO*2Ha( z>}2y1L3V;3mxFatni{5OH8B_gMUXZV2Ce*SksJSG+l4 zMAP;Ut4NB(gPt<@fEsq|x+aLzlVG?@o4`YRp0`*i`&KD!*sljw#-YJt3et!#ynt03 zvjiPdoBL_mmD?t+m>$1=xGj7w3&ehL{fkCOvE6p76Z{~*!wYT3Drqm}`|yW1uqd9Q z{k{+d7LJio$)(tLCj>)3@KVqt=w8qx;2|paH6zEBM~sG0!9$?#$C+oR6*@Y6nOXCO zdi9_H|LGKq$W0ZcVh@A;nwKW#MdTc8zkJ^OpfyPl;hEd9mT^c=V&D4i?RZw2buxXzu`*R1 zV6|N^0ZpQ*#a9uh)uzIS@Q3YvI$;hgZ}!N_%JgoP(cYmiyQ;+?zcxEp7b#?-gFn{( zP_$v?5u2~aI}dyd0yFn-RZY?0@(wE11#g`Vr&JWkQ{5 ze0}biN|u-3pG+sui;ec+FoDOkW@@*?I6Y9UjDypY^qn3qxz~PgDYFhg$KD_x422rf z-%;Ugi<4cZ%!0Pee2d7)3jWPHg)yiYzw)oiy14v&tZPu&-x0%tF$6^Y)Sb9t#7p5- zA#=P22w5A@Xdigv-427q4Bep7ggoDvB$t~+Uzm&v4gcmnFDyQslP07o?_?yM&Td$ z2zDf%kkE=xJOh1mXOurV|6qAklA;|g1H6Z3HdRuGcfaU>Gy&c?MZ(A71v`7?dAJ+N z_||b9QyIjxEua>hl2M->S#arXE%hiWYyI5FKmlsG=>Ju+o3ZOSlyUqCsEMzk!MI*H z{t~JVQt$o(5#E_dLR0MEHl_kC;V{=W_92uN+xe6cV4!$!QI&+Ukm9kbBL8pcd%z5B zS_X7n3*N#owh)iJH%R88$_IMySwA?-1YNh@yr=cn$Z0>;Z1UYaKp}~v0{xHw86$ns ziVD8&5-9NqE{-0dQbuSH>3{)YwMR?R5ZfFOd;w|`4SJv-iw z+s>#RycS6g_xRL!iI>Tvlca2APVI~pk#UM_|>e}6f zJ=Hrz5FZ%jn60clbg(}|OdU;4pCU$c*=oQMR*_|IY<}WZbNUh?QFS{v7Y}87Qe%bs zJAb`s^lno5*Ze@D#|gTyoWC^1%~&Kq$hkDz1xfCyZ@fOovJuZs{2m(sgGgu!>+tPy zB&w=#K{=@y{gKb9XSLX|QQg-+32rx@UJtST6(~=)I^4JixQ4vompvlF%m(y{BYy8nLoZD5C6+cDlTe(& zG*B^-um%;rN&ih_azprTIrTKs$$F{=l~@XO)fmSMdwxAd@Ziw~L32NnJUchn?2cQ` zA~WCyg48d*h@P2Uk-Jt~!QgUiVh0WHj5IfI=oY>Du8ZHD6 zp^SW!tvD8OjxK1v8B-k(zv(X$DMbK1#GPGsMp>X6cQENid*<@;m1g<=FTg!ScBg^K zdWaLeY=Ie|bFHw6evDxTeQ&Egzkzs2*VkXZIyWaa2SuyZ+1@{gt)Uo{ZBPW>Qu`Rn zZw9fCFKj*m7IB}>UQa|6-I zdZ0w6J{t*C#m8PI{|;CrBYxI?1wEFLc2%VSn^z4T_L;GT&|CMpgN89t+&}(ijk{?A z#-@MfSK~hq6>5HcUc4j~I!jZ!N;-R7{_`-KI_rV(Ko=CZy(aMI!s95s*NjO=KFEx0 z2QH*xQ3vI6|G;@N{3+>4SI$Ka(eT%L+DW+=9CH8@nCAV1 zIF*8QB8=D)Y1YMyh{aR1x-$$4MV)6&p>g!Vg~j#HBE-u6$C54I|HINjvs`kSZ-a2D zok2bH-r!k!a`BBLftiaDEa5r>FXtc7|1dUWyG|H!IX~@%e$d?|J+lXXE)Ol6PyIzA z-expw(^8Dst&>&${MA5s-OXn^-X3CiYyu42W4aSly`Gj|U0>J0`1XGdD3fh$TXwDAU;2zmP6xXSA_>A(DkOgY(Ly(o_xaT)Ht*7W^b1)abx;}*y5uZGpu?K zCQzahKF1yjW=ad>Ew&7nmngPRTpZKA30BZhksG;wFD4*BTA%`c-oBVBKFyjl>@mJp zCq{aCvpDe?x7-s8p;oz#k?Awfiv>3H4G;106X8rJL7S7%S@%x>!Yi298N1s}QiN{u zzFS(F`v&=%o-p+XTs1gS3!Fvl{-X1Z>m1vegRbNB^ZNGS$0gBr;cKUKSzbfzW}nH z3uQ&Nm}f<%9QD{WWxaRFx)pl6w+7?g(_x*0%7~w{iJv7SI6kM@e5F>;PQHhjUu5Wf z_B}+%IivmC6%h|y)q~bxLoNT;kFR572_CU)v_IkHS2CnAKcRAIjFtcpmQ3TVW)EPy z*t|YQ!&k{10PShLWz5YJp;GM7lc$*^#a1*9eQR1~fVAF64Q*XwHtL6{Qw@Ol1RHV-H`hg}A77M4O(HpYj$ z0#;3++4sgJD6!;R&mQ5GQHA>T$+%1TukRFlVSBBQ;iuHrY|4M?~EHV8gDeHKF zwOEp_CBPNd%a(RM^^se57EmKUw|c~}{-pIG!ih!fcnuB*Y(38qhMIq10<5ca;XOED z->q)EJXYp+1A^>EopI!}Q0L3^>2b=$BT!cc`V&C>Z!OF>;;0kY{9bRnE5%)A^&rhiIlOHXv=CT})*f2aD zWp{a2wsq^-`qb|IBr#OyPY>Vz7k+^@IB5t5U8#9t;C1zBWaG?-bia zaqpv|E-oct_b=h%g{s}j6zLP$tzeA?ccTgL{&ZrEDPuSRIdGnrNwT!9#arN*_&k=U zG59yW#&`vu8qvEzgG;wKCx(b!tgzW1;naQ@6hF`mgZ!%CO`^{K1iKixg4`s9Bx|An z{fh&0*LY8Wq%YRPDM+|qBX0-kp&Z*jn)q{^^=!*{l;-1bxdCnfiOWb{ItuF&S?H2Y z#zg^HL_N&X3#Lxk@7Vp(bfu&4(2}v z%4L2ZUNkSS$E{~Ss-pOzs{SDJA3C2f4h@C?D-uuVG`>kA=7Kq;m>YjNY;$;WqxHtU^Jey>8)2_+Ugwwm zLiv4ik0L>ee2!PQ3eK%hw+mS0{&20XFVBY0DR3g9y&D{E7V8Dh|o+sM}qHO<~qDP(S zkaz24Ut#n#i&%Az{#$92$-Wjs&cscR$S!VO3D@e2Pmq?Rq%5%L4D4ji`N8%o6yTaaU^x;hwIb7|?Ft+w!kv zpLCUP+=AMTW%kST73dIx8H?qs2pruoq?(1YGp5W$WxTYQgy)7crN$u1o#rpRoeoLn zfVPfG&yLiAYv)0P8Z^)zlMwUFd3~TYX##4$C@v**;~zX#Ui2$X6R>#zz9QLL70nwI z$vGB(6{Gptz|rM5{qIWIb~zP!J)e7*L;1M!wOssHF`P9ME$!ZNqOlKvckw~#B)8m= zJ7+a$rM=0;_dWFeqSva->W)fTKC`-$aRtb4?z4W9@iZF=mf-RTGyip=k+;CDQm)4N z*`1ueh%1dS(Ap9_t9K-RDW=&HBlN(rGBx;=`j<`f-(!6d2Api8K*9b-w2<2LPTtJp z3o;snk7Ehw9GraTTNqvJUH?jozSFw8O>$O1X=l$iyf;ha4R!2~v`?j1O1rM*^39qz z%IfTCYEs21f6sp)Jne!RaG{Wj7X#jXYaTO2(@yJ%{5!+*)wcn`_kv)`7?k`%g$%RT z==k>xR!1DJ9%+HDmpn^7KjO&Di9RbRAieSY|EzPF!)VM@y~^>IQ8l4YOH?jO;fhoY zDk9{vwGjUr)@2QG1KaDbspO5O+&+qhe?u((Ag}v)j%*NqkRSCLZo`jC+XootP#;d= z1yjkM8+wd&YD7}DCH_QAi)=Od_KqQ_Wq(?n9siW(Bd6!sYBo*v46ypw>V_f^qA@qkg z#$uRrlQSt3pCh5SmGOp_wcN^#3W-4p2#UL^Z2dy<9WIeN>I+nd|GRNkF7gj5Vo$(Z z)oysn2LA3rprnsY(2Z%hExpb(*(%@Y|L2aOBj5V8e*sid0I z@5{W2dtZ{V3zOa!bH2*m=XblK%oTvAaTJd>ILB7Dn6GUsMu}`IKG%Nw<6+B#-qS@R z_r4AOKDd<)3fJ$@=l|Vhr8P4%ZDEE>x@qaW<@^dAEKqu9{>_nA!Ra~tW>v#@2`cMP zy24Vt9xGy*DJ;0)JXz6TTG;1l(YCKlRRWW%Ftvzmo}vLZm+ZlZ-jvB8VWY}njk?1_8y=MY$mS{c_X)5zWN8ES`56~ zKUEqc@Z*T_2zxI`?Nqxtc6)o~7T*#Q(0+uT6q`il^+7NCE=e4JvuGw>zuAlUNbjK3 z(7^ZWPPw9iL{}GiP63+Kuf=DCt>Wmf@@T?OG9A=3j>Jvofh6-~Q?jV#uW?VT&+r1> z+E_3>EE`b7nOlg&R`Sdi=gpvQw8X#>v4C#xpm2T4*Po~5Z)4R*653SU*Z}YKz^!Xg?|R9f-^op?y((GlO#m+t`OA-!B=M(Us3}(Gz(v`DVKeByRe1V3&c|v zjDwag*j)P^@Zr126L7R4MmFg$$XW~KIwkB1*xV43f%&t7E~NzAoHHfKLJaCk+u98w zj=McuAEUL$kFPD{&dBMa_&z$6-LaB#K79{{U zD6f1&^~7#NcVaBDY65s1;QyYJw33{3an|J((z z?y#!%6OislF3Hf=`fCUErxbqhdSj%*+@m&N`bT({((b{@`#m#;M?UuUu+mVr`JW3{ za0k06#@p#40uGQzvW2gR=?5b03zY#-^5SLd`n^H+P!VXjfE zj+E2EN*+Xbs)urj<=d6&5Vk5S=kL-VQ7h;N=ury#b$9jV>^H>TsXYo8JRe{Oedz0S zuF)bJh`neyQ+z;bH+Z~~y|T|n^sBfAfI)wLikoeGK}&amtm%={+ASIvQTg{yIBwmo zng;^FmCNs5F`@F0mMAc&DHjprz)nTZnXa!Sve`ZE@3>{+lL~4)N$chXjlbL64kwW{ zlYW@-2^rL%rTx00dIQHndB)*nm;p)U5N2d2!*xlPqWJsR!S0xTF1}iN`+W@kUC9=! z6riIaZuQZ^#efO;qNcpVmxK69>cYXDKx$xT7+x84lX6`E?EJEdK{V}9R-9&2a`yXN z=K^ZcP)k|sjW>Vv-ikLtaZKD&_ELDVSa&t}8i0b< z=Vdi@Op@^LrFlTYd>3TRCq`qWtBBr?oZ$l_5^1dLx&+nc-=gotC~eUiXDYLgr*u$FF$AZHVGP!xY7@Eho_ zKj;v5uFs+tXL~17XG0jc_RiUmWSZ&>1v4#M_$;e3fqW%*J^Zxcs;mPB_<@GFj^Q!S zLqp!{c|;$e#uotUji!^-3UGE5bm;GGtB1=D3CBhEWKO;ww?wzU2?S-_(jqj(&~%vzvwn3x zU1Bvqa219aJf_UOc6_wcef2Wml~Bo7mwTxnnTLFef;>P9gNI%J)KQ4U6kkE>Yl0Mc z(kc5=PVP{EMbgq*VSVm}7x%OM!H(O5f9Xxc(>PXVp9U%FGG|KNAI8-p=xKnD2nt&^$#Sq1P*&)bUAPJss8 za`PdiaYWY@Q$t1(uie3fi-a^V9D6OIulRaSKd>1DQJnRjcHDT2Y`8l&1}Wn9?4iEA zo;GnLR$MB}yoUz%>VdXe357?sCSgwXaUUWGbG2ggRDiJhFe?$qK@D_8=D$ADO7?`E zxhGU%5Da6K!@I{>yL{DtzTc&k>Kuu=VmJglyI$`QIaxvnZU%C-{i^;_ZgGbwmAPr=N^vSk5K3w|d=ttX0CZJvBcmudETYNedx&eb@P4$hX zsL9`sAYbAW_D1zf`{3(6o33E{-O(DZVT2fTi0!;(N4mTe*uYrQ$tto!de);IFolu=pEj-+ScHT_&#N zxsJ!$53;=laDM{rSGJ3{H_S1hvRFSq6xU)$UkyvEVEYH2s+r4vVP5v|Ss!RwTRQ-+#0vC}^non{e^(-zftajU0%P|dvfk@&U$@mQ z8RF9zjY|X~IBG%L<}d8}EhYDr9;i~ryp{_N(x$xQZBFV@6wrJBk$LC#pIK}j6=|gF z1x)nl9=7^iDv!i2+=CU@2#r51LT#1iX~*QhJ}bOir4KwVUr+rqpb)RJ$mdAC@B<5D zEenUci4&#Qr!nzDUAl{fr>_6Z)Y{wVuA)W$YJ;hX+8V1KeJq*To3K zlY11nsRW4(wWq%+|6Zn{EAC{%#Q;!@uP|%Y(}(Qup9~HrbW%|$(KfeS@ZY@I`qoL9 z0REgg+<#0+WP-ULDR1q4h;~#d(GRYwdYJT>m6VbpQzYB9Tf5DlbyOLotz?Waa1!{d z09WH}xy1z>G-$Pzk(ppbElbiJn(;lRi`oj;U|j`%*RegdM8n0mZ1@bM}yYCKZTQLg!oB2uJ_5JD1Ha_lm^Gx9)G zMXd~v+(bu)ha_m2Heb(Nl4R~NL>$^~uNPP;CP7{g|IAz|45Z8{l`JF)jB z`Mv=0A;<8~S$@R3`A^SbCfcCKROYQDnp0b?Bl9?E(d0o~UCboHP7zV`z*~ILE%CcS^Z_yrbwar}oD9x9BI*Z#V87O-@aAyrgR-LzXO7Tb;w4 zETKg7L2f`Fe4pTpuSJEAwxF|Z5(ozv7@E7T(KG%nr3f3mcYN!Oj)b}8`W6xW*Xp$( zAzL}8I@e(VDEVF--YL+;RPcJX#u20S2AATf)bxC1SAgR&rXjiZ6nGibNQ9X&wI()i zB~lnb!8A5OxX#o`Z{wcvozu&f4Ga|CN9&x1b2@Xy2f^=`cixl)D^TJo1Aclb z3`64N1lf`)3yOob!Gt7;t?BQUh`T4mx4CqJ(`#PzJzomjyj%f_Lhpa}mz{zZ-BE@T zt{qK+pM`Z3OtU300ItahL;>Em;tWf63ehHJezfAK2V|>I1h%bOpVB0X~BCA z;wgiK%8}-zPVzssT%GHTNIS!N(y!NzUSpAYr}#1GO0cq8>+_BB4rICH+1SkCcD1O? zWPb+T-qi(xV$7LHV_bApjVx)?&p^JK-AHIKegNIRD<4eH3>7X;Z&}fY0jae2@ zcm_~9eK@_k*qh^rRY`jk7RQS)T;bQ(-R(`K;)3Kji^j3>pK&dEwE~db*Pt;Qli{JX`k5`d{eiG+`w; zFuZM9h_Sz|3XhPD-k*pzxUmL7;&#H@kPlV9FGP46j#UD|Rss?t ziEXY57v|;C=xGBCHW1#MXrrku98zh!@f=Qlt+WMd#Lq{+o#&i43M9l6=Uj*>iF)#< zsXIBK#@HB-OdUGHfk{+>6;PqqMy-^D9LkN#U1PNfCeRF|w12|~ zQRelxT5c9WzMuZ{KwuvrtAyw_Y#>4o%~`JiS`<}#OD$R4T|?(p)W(KX-GOz*HuB&j zsBpuap#ACP{JSh{9nZ(*tqUU=Co!f#Oz)x9nvVoE&>w{CFU$lR!Ix8?Mj)fNfMI9k zPB|x1A?9G)c%H2X#;83%*i4;1F`iTLh=OkhjoRHs6;#4LH7>Jki3U*jE2_Rpy(Rii z1WfIUx|Q&L)84ijTdyhg2vDJYbn79|lXx8)Yp4B#<$hQmIdX zGOtY6VBKR(x{1T=KuVfc+j+tAlBG@N&q_Eh?5EF9hM#|s!O_iM7mi(apb7#m@W)Cx z2rM+%qvB)L1@Wsdb=uE?57>CKT4OU9eCF}+k$^M=Co#$0*&t9vTZ*f$9#-W@a z2?b2UOQC4Y+yYp2LGeE3po_Bf69bI2US&LtF@ZOixQ6to%>06E9VAcw(=kSR-ae~( z>}v9mb+5S+n|HZL;;Y#A%w9rWt|K#(ggq_q!3Vfonl&->965*+N8n?{FaH%_|MdbY z;{*ci;PpGfRd0W7y}c*k$kZ5T#reL-lYm91U2yrgeILF3PFLh1jn%5^Q{JazL z83HjfJ*Yb7J{2m+>7zL?{OXk8wOx?o9Yth zO-X_QRi(J*zbPNnKEgT14Z8?-TZaG? zeqj4>d%m*o3{4ED=$BCX1u4C|b@_1uwb<8vgNVC*FKi0P95k6!fz3iG8Tm*dqV*MgEu9A%yf?*3+A}x^s6PsYG)UK;iSe?}y=$h-dG%pGcHn z1Y|^ws=v+9IU%IkLHYUGzt9JYIJ+#A?n9bs(1EeoY|G$W!Nsq2M`7|Rh0W}}`Tv7r z`}{lmw>V^w4AqMkYdPMnXg_=T8XpxY5`}Wc zb1`hH%QBw*d=sc@*E$VN zpxP49@g$mjUP=TSm-^rA!UMiqcJ@CATdUg!r)1alQYb?>MkE=+$`0gIzgIF{BM;Ar zc|^+jHk&8u^F7Eb>qqdU$VlUNSlcRNY=_J6_{h_79Er{6+YIM`c~lq7PSZm7B~cW# zYu+73nCO9|3i}_g=jTl;nZuelQ-NOeFrfN_on?+o)sCA`&xGzaMESi4VsDR0iTHAtF~eXHqtJ*400BNTx9eS{st_1QA_Lq3J? zD;3Ylm;n7bY|80-5yQv!Ko#_br^qZ76PiUc03Hk@sHfC8%Jd0z8+FCRBlh@KE<~fH zNiJk_zCKWHT9yPDGwuP37IvQ22FkK%TX5$W0c%t-m$!M`$nLh%HEP8 z&OK;2OqfZ@?X{+NRV0fsg7Eunv3#$SO4VMd^RVr@t0j<`)dPM9KG}W zE%UPt`q&Xj z51pQ%+GqzB$zn4Th*je#?`}hSaq9=a#kXceicm$FEudrnQ;!caV+_AWGH3O5rjc*n z%B>5y(BJG70PX;-L9!f_JZ_nG#mAnXJM#3&nYZ8Tm0u0+u)j3I_TI)7+g1C>gt=_h z!iEKysaCC6uRuQQesb}Vt8Y@ia`+K=Yy}*-ybMyVfvP`rzAbKo{WEaANO6o%@IyZT z@3)@@b$wAJkg^`FqNe?hUn%Rc>xCD86pH&`F&*c5Q&=SAWwV2LX-UXNq3liagQ1Sf zRUAA5U}6)y@#x+<{*?`SIsV0s*w;4m(sq+Lim!{K(9ISFayX|_fgg`Pn#!gl^mKSJ2$32*)1I_*fnW6`NgD%Tkp{-!F^a{dpe)afCAP!3 z4psN8`9Y5Xcsq`x&$?l2=_g@oVM8ya{5?sX^i75QcSkU$TOvh&yeE1nFY}iM%cGjF z0FHFZMoKi=k&T442@9)<|5<(n9c=#!vL*kP;NlK z%er*k)4<&V1h5F6=zyn5m!h}TEy}P$m#kNp5|>uL8m*&uoId%O{sUE0q3;Qw;$Nox zSo3#(80kMv7`)HETJBeazY)N$9ai zGdE#vIqm`qPQ?TN21xAZ_6e5%@PS5?(a3S|m~5-1tfx?|AN~koq3*#^Q|UV9ZX-4|4kJ?(%f+!as`+ule5nwFXiJSS)HhvwB%d zH8wj&O<{Zan@DNeJyyo&_i+wWqMdzMckndUena=Z<7FK04cVJyO7anTA7$hfrC}-pQhS*#0@4=8dtB<8w^- zq;CJzNPfhd6Ep5i@HLja!3{g)d%;d)zkZE{mnZtA+KSX8gdCAsKY~}Y_KyFU>k4iB zbhCs$Ry#+hh^K=u5#_U>J&irH$@Yf0lQo4SXp=3wNEaTy3i_7kZp+N#A)I|(J293^ z=%;-3v!I2je8FQq|EGVwmD^7+0R`P^)dL=*DOi z0ru(M)4N9jid844~h#QNlZTJ*%$fXv*PBdttA#Aa@5QH z7P%gOwcO}ewChurjj2Bq9g%dX%LfzAd1nfAui&IX+-;&5)v)WiV z1}!uLWeF=ki&v_ml*As+XgjWb(o}NaL1LoUfl5)2=eq)dSN+)WRq)D$EGP;iolF!j z=LvDpl6uh3V+Y-&JA>y|Q|RW?{Jz53-Tv2q%&exxABYNSFj62v@MI8M#R9=2XpSn5GrYXVbaOu;E zbo-h3vOwtxzxN`kUO&(LF!C+!k9nF#X&C1e-6Y0AD^PsTIxC8E>AKC?6=^ok%6WXD3^T zM~;a+saN`D0)3P|$s`rD?zTy#+d#Q?g&RGN>l`5e@no!T>W*fz0Bc;L5t6IvfQ&T6jb{D;(uX>>N}(HyzT9y^2T^3!b~#?6@~n<_G~z( z=^fK`y4=N#WrQ`l?U;8$-0;rSCluYAC?GrZ!tH1@_>$sXxPXU>BSy9uo%3MgS2-c1 zwfVA`{%L6Zh_D6VgS&Vo_6V7FC#4h}k9pVHd=hPMQOIhLBxEL0cmQ!} z?QIhYxKID*R%_brILPP@aMaG}#Yqu-ulJe=C5;MLh~K>wh~_1?rjF7R$c&kg!Y3qG zdmTnh@`D2XBamqkI6FHQ8p>DKf%xU)VQ{2^!V%58jn828>yQ?@b#cbR+-KkXJRz* zl)$w!Ny+??yPJ28%pvsqusk?rZ~7sUgII0U1vgZ>H8WV|Jr#7iZ}E2LLp|W?7S`1j zFiaKR=79_#Z(7F_b~3^+fuNQf=u(A8Qg8xuX4cZ>Z$R-dT!f`j zURimyBRl1~lp-wa@efYKZH3wjHgo7$tbyL^!AbI(VqU&9RQaJBJfS*g%kL5h;n+aU z=Km9$cuJ$~!6lkCWa5OxZ64mz1pekLi+^7qoC<6RCyHlPS)84r3-fIu+HSZPcmK!< zVZ`^Y3H2h-XOjwS*}dc0Ln$ao8oTwVuDC|tcv-#Iu=Y`+N0{W&lXqRG=NPBLj<6Vk zwRP9v{o^PZJ4Zi!La^~xTDct1AsSNpjgZ&ScW}Kc%GqH7RG{MQA4wsmFSQ9!^BJr2 zTQ(U&faIBUMKAf(fa!~M?Hr2r-`QP4mxmO7P262u8W#ALtZP5(2LFg@+%9^;GW*YP z?n6PuzQOS_csbJ*ODOq20;2%B6w#Bcm62y1G-_8)e(tmcKCxi*%p)o8IpJTpJ!4u+ zyLu_@77G9=AVXCHYbmS0II+YP-|2I)Bg6-16g8d`d*zS_lDVPobLV|fT_gPf4I6%I z>w$vOPhAcmoj#;v$ROByK6FvqL7KUeL| zP9hXJBPTjyT9Ymkyy#NNGi?EL`!qtDY+Y#PetYRIYb!5Bmj%63P zL6fIpQyjfqCYRorLRU&!56G<(2m;v24Y*Kc3`9AwvrO4(V^awouDf2ZnF7Z}H&RwF zmz_7>D|&v)U9qp}M9`}&qxKV5YeFBox#DDPR7-x-`0jyP;I1tiY4-C8;x;4ys$zrR zga2TrBSgeG%%;JETV>ILE@fz#xL^7nR7nt+eW#BrByVM~PFz`1@CfSj2i-1oHC(rH zGuDp<8dH1@VYpN^9S}d>WA2yr~P$Q%qMi{~C(s_o04(_}NtA`@EJNvP41k)Ko`sw*1_HAzjPc!9(DPT@eEX zJ@Fw^{i1@(z#%~)V{oyzOb!|i&Lh$M_?w_mTW-`K^hsuyqKmc4|M%F;F)B=Ms^`I# z``3hQ6C4^ZWdPmC6&yR^kQLW4gFIBlyYPbVWHxO)jwK!|_x?QN2rykkaUymzIq(Os z4asdZv9b+_sEg6M%&Rrbr7`epA~#q6uupliBpN`|1@Csre!4Po1yc&KP~@wWu34x* z4S7iM5Au{j45In`-n7rD#UNue&@txe%30#46!qG@Y zoa7vAvCE}@#3AO-;ign?h`e6(u?r#1=w-pT5~WzzChSs zXk$^(G`Ad}Xz_d)=7;2Sd+#Y?C_e=-4j^<}_&&8H2625_{W@`cxm{w(Qp6;p+yV`0 z90^1<6u;DKvz8!4a4Zx1O}ZaO4DR5lQ-KEzX2Tyi{rt#56T@RRi zsSQ?$;x(Y{bK{I%2eC)w;}=A6ZUCH|>y$rVT+dLr`^*d-0m$I9tsejIUG*c)(-?T) zKeuYwJ2rcpS}Bb-_#E2eavu69=sfVuJ3_abs_vbB)E&aL7-lV15qhBU zvadwk;ffq3E#0Q2HYH!PMvE^O=PMO%oN|yG+b2WW@$;2$Ymu5?A~y>KW_08h@3;znQ*!=5w7HF=*mYm1d85BykrHcS_pE?ZRlC6I zY3Je-?SHX-x~G(ue3{(;X2AJ0vh%n2qC&=WdgHaTluP!dM1?CR3f~OWUdol8pH)EX zFv9It-$koQ1~+{RRfo>I|NG{^Q)YDsVKsUy!y6*Ik{@a)iFEd5f&3EsH4mZ3q}4~j z#4m$GJKTNa5AA1PHNh#j(yvYpkS8@xR!Fmt?Brfi8~oX;NP!8SJ9-VYh#z^VEj{_P zGEp$5QSBqo;lE=?!L;VBc0%}LD6sVpy#%;8E~@DDolq_}s813`x(z@6ay7@B*c+to zs7avVg=V@psbli4DcElYLeXR%O{Fz{`k+Z*><2VA@aeWEzruhI-hyZ9Snmxcq~WHt z2^-jusRRn_z`_+?NKBAte-g1HC}$qO^yDoaN`0GX$MCzN?)F4wwOHQAmj$8AJh7%X z=3Xr?i75Nb{B1pKaVTHUGPe+ph`gC|o$2;=#r0{xlJ>6eD9-aP?u4Vkv=!%bfq4{O zczUV*n|13HP|kt~Z&eun6xCn4w->wc>-GN!9nBj*!k25)mMk-rvL`%;_#u5Ez9pcm zL@GH06@|&ekMLhz4E7LjlBo8XuwL(aj<53Wq&pRTyK^5!!5ZYDn#wY(!(zzj_diUL0?-8I9_mFQVZzGv-pP?oghdhQVZ(+T>VzykTr?CC0Nt{gcG&)P6UTP zH-b^X32hZ2gI%H`*Z$vY{TCXqyylB7Woq{2+ZtvO$3W9d7O%vDiGPwS{oEFJut!*Cr2Q_Qx%m05! zXoIWx(=S=+B8BI#^e8;x0_UDUv>Uo@U(SOG2{63)XNdok-0OX5iw|*p&pOo{#sxk- z;k$bOEct^}@}za5V1M;(+i8VmE)Ka{0-}385++nS&e$D$jJWX`1ryd3 z3+g#(hUo>aji5a0;6PEz+0FZ}8jCO8+lWp=5u}&GiDjum?G)1_>dFsR2Ws*yI;W(yzEsVPr)yz2Mnjojq{Q<)T@u)8a2ih#AhXxdC<_3&~h+X^YV&*WV zP*@5x4`&HU={(HAayj$n=4@D2Gj{z&@*-Tsj*bPkE}vhTjpbPzk9dh6&=4MQapVrY zj*z|Wg>T!CPhzBQ6n|=X1!;CqQ=G4>I zYmJsT+dENq-0d2|bIAJch)g_G?6i=Dp=i{op%#L*-q5P}5=ZXtMZcRGXs!686!hXBDXI2}B=OR&Zz zIKiz6?(XjH-c5Jc$?uu>nR(}&nKLv0^YP4=x~{&fYTxT#Yu&r{Zs@}B@p+c&I2>%D zKIAO&^+`BOq~HfUuZ|dE<41=^nNL|q!B5g`4#hKjv3lwWsrvE1{$L^oMjX$+TR1*E zg7eZ^AIH$Qpq$sh83OpQUy2+sh|FMv4-ijjlsctwEq~XUao&a*ioph#X=&H5G?(yg z!W~Du$@R1jJA;;7%Zm9a@|S@;-}jbscBNRatv<$WN2u;mB^lcYenWqi@N?$edmQbM zz(^hX{cA9D#yh2V+=5#;6M@v{HBS`3z+BFRC`IG2bo=r{BvOnzK%$R0!jA zgzVm2ti|0y8V22iZA!=RU1VlK2Op%}raXwsw!^=`@7-jO6CC}rw|JK-FM+ohBgBKC z@XD{hf~5w5XCR?#_qV!VEl;`Pi?-06={zLx*2Q9_bygmQyNrBH`U}H}sh1)bLtOPG z%mFyEC#^$B+&j+7aBVpBJ+1#zZ4NA-f~HZXMIA<8Q$0{FiQV^SewQ@O=5NLY_YPck z$$>veS!0ztmtXf<4+`DCZmPfe6-3oI-&f|i-}t{b7c){!?|4)cJ8SaG73;4(|C?M0 z#V3)O2HG{XY?edYAeTEr#~zHOcXnn(gJZS;A`|3zYJCf6pw31wLzA~EUv94bEQ;qw zEu_2xamc)ZSyCZCJyf9?_pkOm;Em8Wr`0lwf{^#W&x=&nLf~1o>U&p+s66Q{8kaZV zgjHC|w(OOWn(Jq1Unu$H>2;FyyCa zZ!h*-J9rfl%YWHW@MN3iaI?^?at5wUT9AIsUPm)LEYV;8MfiFj9+%0_Z$kcmNn!jq zDKFlD|FnTaLQ?EQco6Rzd;!%+@bwFh+zL1%2OpA`bmsIFdj%jR{3TfiGsb#^N5&E3 zGC@_sRz%0}?;%>t9;x5o+!YN${GlWBPiC)~SHZ6~QKd%6H>u|$t7x*fMsDBkVWp=w zpVXJH!E=yV64qjJsSLa}`$<%uo@2)_H zXTwNnOi|e%%!zr)oX;#GA%=LRff?>-j3FP|{gwi#{U%kI)$kL>S^a{zd7hsPn_s)v z59J{UCB$ja%XJdle6sAc!9T&;;0b?fSUm7!P0|Wb>q>dz>n-7qw0=bvTC~Bz=jHVf zx?^bu5aA$m=5kUxL)IQbe)_HxvVy*A;+n9PQEmdGq`+6VUkQWP4XfXUEh#a~lG*WV z%mw>?)xSjkt_C|JN`Vm(DNH`E_P;v^nr^T4whk08I<|iti6PF`x8)vK>f4>j&cR8y zEh9d~a-f+k!lXx9p9{)%P=ka$2}^OPQC}W7`tzDI ze+gWMxJRY8A^CqLY>%Dly`Z3eu$ec5uAm8ISSpOsY`fLvl5suJ#l>RP>q~-e)-jpP zY^A*OBtl(E4PN0@U>Z{TL*#fTYez1@OmRkfvlzHEh+>!4-uD6z4k7m{(?&o@*@Z#~ z66}NAbG)vE>tsLI#X)lP_BQSVhwVfPeW}#r|=hIydol0YV zYX^nmHDTbLkzSy-_Xpf9UQ`uTQxDxSpiXI!Z9nRX?KSdl6mWzOdHl!JRO5ksN0a2)Y=Nud&o${9ZhpH17U)1anKyF zN8^W1B5}*5ct#}w-rGVf6<(Yn*6fce6Z&b?=ddji+j~_9v*~g|jj4Y-q|tl6|HaRn z9rM(?u`3hv1(Jg+ygjh4-e12i{q3I}jM)^$ltI+U{U_=#8@%3z4bG^X2S5iY7`jnp z@WQNNp&NJSci~9Z3mdA#mtVF2>XFc2^fEVoIENR9C*#tZy)B{QpPpE9hVcX5M8qpT zFEkQ2A!t=+!d24opB9YhkMy5B5Hi9L5ng|Hpcu0(gPcMC{0Z+*EFDK+`x1Diuf$8u zC(X5vlKAs#avu%*&wPA0^Ah&Z;G|N=O8^;jw~-cVW8w$dL}KWPj@=nqBKG!F+i^k0 zNsg#Dob~KZ|A&#IC_m#Mrq=>^FOTaNDUDy*l&LiKUPWOQsp>3y2)**HD)KA`^<~b_cUr zCk>HchsYGMrEb;Hp?gyTeXD@C_sQa0;FskS8hA`OV&=qSv>+hq+`8Mn(EkWTP0qqHr(_cPP!jW0-ijHTuNwenpf$KC;`Gh%Uo zJ02-Mi1uN)>3;ROIR&^Z;)FSj#d2Z#4{ib{%+dhi;IUnDk_FioC+5e+XInvnE;mDWsxuP$gv3ZS9*3Jp8ewInVHMfhTjqDvzBZcF}+Z&BEL5e z_1VRtR;fNcMjTUCcrZ(4pC_oMSHLOVTcyjcyS2z~udubVveOxQDqk}nPZ$RM*aPFZ zY$j)`K!H~~dF&J2ufWZKe(ge2l>z@MU11f7vm_s}rLWoI<4fw+?YkMkr`0#=+^m4m zbD=)~@AhbQfxX7X(M0Hjk?OnPZTFZe`fK3>rf%o}z#a{}LU9htHhA{QN1Iw&nRa?L zgh)7U9Q3u=hE&L)Oc5=yJI^+;`;!D2DGm#u8CVoEfYcLlTEN8}ELRVrpolt^mFd_8 zsZ?KDGoMUIpMnE3|@s~azN0{2cqZ`>p&0FBlF4`E*b6~%HOF9OUs}K zOek!x8O1>nz(#wI5|D!#m7n3Hn<9TAiFPHXZB$(F2N@HPi6H*2^xMvv zTGDNG0{^F76tAUJBhm1`(aP?CE-sxL??;2b8!Zzyx%P!|GH+WrevpuO$NJ~b$B;(N z*LL_E_q6g~HZARygc$E~n~cE|M%S!8qD-AmIUBmP5E)_E7H{^L$Xx)&()BPWhtaOm z?MMoO`-nZj5Bb^Uh09`9=DtdHVY13$F4bi=Xep*#Q8$d$vf_?#e&;e`3U1VDeO#Go zZ739f_+~3%rIYjz#vCcen~&lrL{ZRa4gi#rfwe{5PLja$Hl7jH^CUlN9xEOOB+7aKo(IuigKo&(L$|Ka28Q&*FV5W69b#RN0RKLtK&(p2A9pmV9s?fb zLO{ayZ7Z-Jc^R{OCpQmxb9xxnxdK~s8s^9(ycH}scG`IP6==_ASgAQ?+Y4~Hy8#DM z6dgy)zR{=g6bILG0CF8qwI(>1Ze+3AZ2Cd2!z<@QaWTSD>#ISy^<(azRsc21>6DXa zbbd|(w{8%NH^qQl5Xv9UeNHr(*OjsnrUQ4T5ty+Id}{Z zr(*9@cxdeBXH@P%FTH*w_{?T;H1PU}#M9{tGFy-@TJk7YHLG}39 z!oTfBc;PK^qh6}?^E_q<`TU{NgFO~tK#7f7xN`>GF_z1a1cQ5H4MH~4VE$yvVR&vV z+l0LKUlHz2R(C~BA6^`&tktW$re&fbx)^j|Y_zPngmT}}RLuoga>xDfIdrhhxx}=- z;2Ckfj6*Bx>2g-dB6~kAyY6I0{7!S{>x4?TP5;ojSjsg#T~KN{RJO1QP9hUj_!Hw2 zbC-DF!$YOM;LAZ=F+70Sa=J@R@UFci;@OqzV_kP_m{I#B z!EnpDD`|t3Kd(0zsK#;{MY*<(MIV+@77~01R+HFG;k$)!dkA5JuHMX_A9+8GHu;GB zRYzx|eq>J!7_Pj63o7e8WvzsZ^7(KDg30))!P9Z!%Z>90XrnC^Wz{OSb|B4oJjA64 z;@0PovlT)9^=eJK$f0EGCE~0n42X385paM6m@XA3+%Dl|xsI#}1 zMO!L!F`~9c_oI@hMNI?WzkdAX`|gK$ix=wd@E4WX8&PCR`~B-_2^aS3Q}weg&KVdJ z&BNd2aNJnF6~bKrc6PV=nB&Mjr`x0(6_oEn=8bk0csOQTR{!O@2MWJ*Kk5EG20N}d zd0!S(paLMpU9jc1ZMnN!fb`s3ZbjhhIienHFI|OzUq8=Lp;A-xG#1$oSiV5qB4D77 zl34S=QCe8vA~5W&7UL{5T^Qpdc7SPz+6FQ*1j@pM3MxucOz81-;k)9`KG7v=&R6IgGg{K zmcvskOhT}EdC(2$=1RrnPee)=ya2)j+GDD*D0^9R^8nojE!#M9@C?0E{c{S+$bJoc z!-1VYZcl_XGr9uYHXWb2j_+Me5Yc)TJ3t4VlzPIW`a`~)zV*qE#p%T>hRBqc;Ljgq z6QP?o;6Ibl4744FA;(|rk>F1}LrCcBqsqT~d@wuq_s1A2K`2phL>a+bDsEH&=HZj6 zMYX@>QB*>qAe6u|LQ#CUlx-EJ2o7J%CR9b;JNeRdLdGuT`C@8$qb@dnL8D+HdrBUq^UTa0K%~)eSBv&Od1Hj;A;F zMy{l4#Mt@13P~$jJaCBw{NO`Nei|S>z|=6~aVSGK?_WPQ62tDlL~ZcodV{ov^M;^n z$q#o=WKs$9LiNI|M}T=FcYzCUq5!MGnsu9zTlKu|y`RO_SD~AP-`TZJJr=#oK1SDhE3e+ny6dX6l|Djf76FMv=H@~O~p zG1Q4oNo_KFH0;8`awBA-T3?JHnScOCG9}mN;X7Luu-D>?)$Th|ZtBn)!cHOEy+0WL zuB!NbH$*vYN82RYSnY%s48s}gy7Wc`LPi`y+@f5cX@_zy&zW%8c0w%{e}INMfsMys zs5+y5=zXri^?Gfl66uY*`lR>o7O)<_9Pf#~=oPA~EkE!`%91P1fe(m})Htf-?FY=4 zxl+&XKTHNFXuAX|yw=w6?uLVN7XSS&03+EH&{hUSQgeV0=18MN9Fgggvt>kY>LIfU zF-!jO^pzvBPR374?ir=nH4Als-7a>KO*q?6C%}c!DhdTE^F;RpUpnj{s{}K!ZGCkj z!Phd;dt;^co|yIzLq9%e0t*Ztaw350=&l3a%gl`6;9tWqh|UVb49uwa(Do8qzfy_@lZw*;m2F-*?D?W*W^lT?n#5U(nb%l|UW2&60;(}*5F_X!v3~%=*lp!A*X26Jg4rhj!Z&r=&SVmf zUWS)!zeG<#DF!aQVr|JN*O$G_;^44(P$IB`L|=&9GV;&3GD^GAN~8$~Y>$Dw8d}Fo zOxb*0+{itlhCio`?7u{N!Hh_w_A}ji#~I&pF`!5UFkb~vmrNi-Zy7kAn(KpCWc{u} z-Nwc0vTB}_%ark1gs%NLy=RxzRlw~j%!`mF+5+8O%|*K424`KZDmDUD$x&HgdTPvc z50okN=@`v`WqAaU>vJ38B6kg2YBmx5lN#1QbOw6i2sjOM$8;`XjQUFV*qS^_NetR8+b#y7oUIxcU!Tlx3dMEJ|CanuyhxgWRTI!Fu6sYeGL z*d42oMPiQ~buAL(tX?7_q-4zV^}y1wk`qwrucvUNtIB;33+N6OYG;G?8VkT`83HX= zRZ*}#E{OQ_(W8z#*Jc07C5eQWc$p`%^8UmVVf|jq1K7J#iH6abK{`Q8S1DyUn|e;Kk?A`jP4BON=g>Y(4OZ=e5Bw!I zi;$Bkn?k>VHfHjG9`rp+Yh8qkBntQC$@HsvUPF#jS8!NcUe%{gO=#^=zNmM?o0leIz9Ix%yLJZpL zuJ$ryIOXq{Y z1B>sf@gGQbWKW^vs1ce?EKeU6mBQRMV|%Dl_Sl)S{|J-od02RZQb+6Zw6{qswPR=#=tK+{8t z)G}yzuI#hbKoDhhUhjcws~USWzaC^}GG~O)mNL)^EN$DW_2T5B3E< z&ho0xs_HMkOw;b^4A@}J30ty74++0x`BT(+$qw8yC3h;}apG?0=_0TrZ}Nn5J^ReI zV?(~3NG$KHqUx#~&TdTpq1PnvVn4w76}8M4qTc5zO_$wr$(Lm00l|@=LFp9P0s8Z>lZmc1Gh3sKT>LW zM0JBE66F>Dzyi-J=m_aRvcjuZPVr(~|tb>(hR^P#f?(y?U!yiv~UsUSsLa5Oi0{yx;I}A07 z1&Jw{3{XScU=X@Wf7C$#`ltT;qy5XurfbRjqh*I(b|7x8MgmOqccu9Sre*IbV!Lps zP6DsBUtY{Xl7QAVTXtEwE*s_!24f30DhNhewF5dn{}}JNmu=Z?M^&Px%FngCeCk1c z{JNhcx*2}Tf&!$8XZ5>xcLj7-V5%oEBd>v$D~xaJ5Qaj@)R?b_mRaB&AmVa>qvQnY z(4#7Zn(qo8FpRi}nSDoB`x;fE*NnWI!Ke(p7&^1CQAb$1pf?lYVCC(pMbSQNF>ejx4lZ17RtwKLJ#yUJfx?ido(=nXm21+t7_veqpbAOvoyUe zG2lzA9?)#bCFr3-^=?fXM*AQbi4chtmIVj@pxp792|EL~;gW+RpBud(1AcA;8}qX3 zQIjj5dchTAMjj-NHi~ZzjfJ9&k+3T*l14!2Xva5au31FjHwgTt6jTn3U*VCN7V*622>Sd$Q5$eV1{UM3mAZzp_EMSZ(5MXt zP6uLVSeUHDrL+W*UpzK7=bUa5=zU2;7mn$M$$zf0G;H^s0##3H=vNfd!a`>DMAIFs z&q0C!y9|@*gZcYpf_7G?!b!i@&i!C9apeRxX>ju!&KHitNn20i^qu2?1f9FCZweQd z*1E5a{Fbn#2VFB+n^~mG`ZKXOz;lr;Omiqsq=m)=~c`OJ&(9YeWKV zx5q250uM}tN-WlCEvj##m^Ug<=FWH>INzvbhTx*o?3sH^k-U^ z8K!^m_Vowt_g;)u|C9lUIKfX6I6NLDvuiV#d5kckoF*Lo6o~)?VbX_fwD5Dra*!$J z-ruE?4Zw+!+*KHgdV0GIq}zV|MiAVl2bv&KjRaT!5L98E1H!ea11(ex(KIznGmzHi zk!q2EDXOSvX!qRYUarz^z4LJjZQApD&Y>HX(yZ{~?u9exQiUHD?tI~^dc^JOGL#gs zMXzrc{FsK|Tt29zO%EY|WTcphtF^|5W9Vm>Pa^xs6I2Jp{lZW~KY>MjPRT102RG4v zj2#{L9&{>y32BGB7N4p|G>3OC>_R37B~|$mqzJuB(ceF(k0rlX<|~$;FPe@~Dv8?j*sh1@(J-y})yz7foQ0llp=`cY-AUjbQ8RW+w!OTiPM~hSctV$95c7-B{AxVB&iI&I5)Bcla!wR82(5UF7>?MeR2N% zD)yd(h;k4FJVE*+KVxR|N^3584YBamhb3k$S(Z?#ha~!l#*H9y#n0tic5^`MHhvEx zrqD_Uk$@v5fW!ajbNdYs8*J#A>Z;IKy55^qvF`v+56F2yM;d(>v6egrZfQjD7j&7t zYzOumwy2L~4PR`tK;IR|wFl`_f9-zg`NvR4XH7*YjO%Bs2fpo{p5k7pBn_2Ou04oY zH&|8_m@@2b`LvCIC<9$<68JKe2(b&4!dMYyAGxcobhun|Afe~a%dw1&qd#+_Vnp@J zzLtln+O8gkJUKEM;(ztRhyVx>I?{fT_=*tAgEX0Eq4gT3@!wwL;)ZX3(a@*l8*SJT_=Ob$k3)&^XP6BG#j*xc&)8PKg60pF)x%bZs-yUx7n&Y( zviD9(HyY3^&A2>QS8UgQ{?K56coy%Po4Aiwrl?~*{U%j@X&-<`&Al7LI19q(zkW=d zL=^|IK&Vy50yhje_*S-*Ouh(`ow3qGESo#g=ih`6pE}9DM7Nc;l#9fz(R`xT6ssQz zZkfzz8@DHB-TjoNoAR~#WVn<%lm)N-DbCHkoTEuHd){l97Q@p^Pja0KPzHA;D2-W( z^A1_GHDsi%_N3H(kvtkPrM4<-o~JFT8GhkFm+3QvAFqyRv3SW-9Z5eYESMRfVqzF_ zIaqfbkO*5VPifr-&vqZ=eQkQQ-+1{LmmH2=7D#P93dxTo9st<_`*7K04H$U4S*J>6 z>~5V&7EwV8kh=VlQ$S;AK#bj5dY2lx>M2Kq#)8cUL0~Y7>i&w##soh6c)wP0kLIwP zJGK|-k9S4wt_z z->kmrlfrlCkZNlVMC6pFuM4KzVm+MR<)xy`(Tv8$VCUfOZn0Kv341VS`gi*`z{wsY zggW8udya)mw*YBSE8j=(17e^&<vqOnQr0^9r5KBI2EN|Md{cRQh-L=veyb_`X$2t6#KKiy2J=)x z6*xU!7-opSNdEll3=}Y*_nhY<^k}vnyu3G6YSIE53--{*GX!3B)~?iVqimd{i8Rjc zSnoH&`tB_xS#w3ZL8l}4q7ub#St)1I*diI8>Hg5smqM0E_ULI9``~cDpfFI+Mhn4K zEd~jkq8^+ZuS$AU)k8r$(&=#%kUJ*on0hrI$I$1dIS}kTVcwP`S+D1Ep*0$x2@4#R zp1$}bkB{wW^uaj2k`H&_wM=&j!bquws$LiMIOqLklc-Uu1{dr)@5K!AtMTxD4=qeg z$$i86$J^XTv{kA^GhjP)yi`#S_jy<^h)z@FLi0ggR{c{pj;t5gG=yAZ84-TjBjV#0 z0-rlz>hJ=*h<}k^Jj3b(Nwc9`Y$UNiY8|gX5!eR4(@p>g6H?vhVga_PpW9vc@LLKH zi#60--eYH7StJH0w&tChkqJ{XO`7l@3nSm(M=gO~;vdpv{|HO#rL;OSkFU=SK9Xq%0eR z`%_p7PU}kvwzX9zoX_IExyoDo4sqP#JCt0t;4CP|vW8*K5^=x{cR7opS z@H_Fl_&ZCS;E)3JBzrbs*W1v4>Ffl9zmCZ2c{Q%l#b&hn=(~Vy--6e7G~1yZ^gw5x zL*PpLCB97o$&26ns3i^E7j5V#&ygWn5gPTa`p>2-+LirpuNB`FgZPVGx9-RC0URx{ zr{MGkx-$DR=esqXU1)5M&Wm*6L%=5!D)enRfWf`~2FAH|Dflbng`h3(WAY1cESv(- zKR=KcSda5bP*)p+smmNWsGfV0EziJkw|jCP4dX3l_?X}_rV1P6*^RjMOR^so5-3HC z&Z0;#G3~HVk3tpD-+yolvNd;Qf)UxI8$%8!9ET?`em~_4VBJ?E z-mHg^4$RIw0Bz-N<+v_FbIKz9EQ^!w);LTqcvPk9WTf(=!1?a7FdK@C$Fu0(9q=Nf zA>!Ap)dP_$w%7&l^pa~G|Dh<>tnt4n;SNPwc3#AE=pEGuhEVrB#3=4T4J;*ItRXK2 zaGAg;?DtGgNXuqG*FYED&HES=+O+$IFz3rS!#L@PMmJOlN)@#cBLGwwC3~7jF{x(ufH28ImNPrXP(LW!|@}rBvC&vuu=hZ1)u_Z(2 zgh6~euTkvGpU2oy1_2hL=fww`YkH+eLq!;rkVpz_XcK~zw5}S#R;vYi_A*G58?{3$ zmY1`M9d1H) z&&U_l$8?;d7EyU`@L}dEIXNNKh)Uu&9B&(klKDE_KO@on9@1A#){CnnHTB|?7AFBV zN=|9mW>+y%Yon52#ba*C@eZx)!YZh8Wkyx|2o`FaIsq(>Rg%s@&b5Og^J>=-(n!$+ z#FihD3xUuB!j{2JH!(4N2eeXShwRyB<5StSwp=A7uN?Xw?c@+|gH9;0_4L6_+Yk#Z z;*OC9=o1yTMI7>rGd;@$;4%{!2qoJxqEgE6Tm>)c`srBHiM7rMbGfdCH7bXAj)-i+ zL{s&>ic2e?L<(9RQD7LWSPL=4XrhVM0;S@Da_WsE#S7^_LruADr>x`juZm-IPGBI> z;do`rG#=55np>Q#J8>m#*G6^D46P5-pg8QG9A7L00hf#VJJ}tV=`@ocp^W>xAGb{8 zD1gp4OoE$xJ-t#~(fw=;69APIs#jq(1PKz-vy@l=mO#u!f;cbZXg%YNxUq0LuaD`k0w1yr(C@?>u=g9#tWNW*TO*4WexM@r80!zNl&<4ne<3SMJ{-$vm6D@* z2hyC6rf-xOEF zG>_3{8QlBW--*I1^24Oj7r+-lu2E3lnalH7bD)Z-5hsRc78CHl6z^*ct$O9v}&ZpvTNLlg5i*}fBle+^fg<)0DXp_ed1%x{<&3H!|x#o@|50VV|mGB zKaxoGS48Ims2{qCexnl$-nxLW0KXJ86AehxKD*(#5y4!IAAGJ~&p*_n8DAM#1F?K@ zq>J+A9If;`!YZ$}pzBBA8xn^cju)JniEfcqL4qE7D;Mys&y zL6L}kVd+`%7}ErTknIh^Weqc07EZ6WjM%cdi*DDOx5@yRLUIQc82S9v+kZdr8nWL(WcasLygY^bqep*GavY(wXvl zUs&0dVJUks6N%WMB(HcPiykbb28{`rohPFvF&EeJmF}dG|U_ z@Wj!_1ljR^8YsrNugG0g&a!?$Bp7Rbs(>mpLMD6MYgERU3y)jzWuARriR>TP8_m>ZTBRbHIgC@r}?0 zqDSMf^pP`TCbT)tXWIQVpt7@ZEej{GZypT2A8)_C2Ywg0siIeyewOatP4|IQK{Y{QJ3uqIs~8esio3+-%|q-5yN} z4@BV=vo=pgW~Uwr;6hO#FR+Nd`xeHzNzdqbH`a$_iwl(0DHMI0^E;s-=toK!hm8T? z0}eSd5-K5Hl7@f@{Wb)ax*EnLp3N>}o+L_Jebe z1~KPc+~Y8%t}(u5pGX78fJ_jdpM))%lCaaL9y&j+uF=xRhs|nasprH>Zo&g)ElMPoc;`U~^ z5@WBKc74aW!QM^{d7LC1>C7(uwS2h!ACS?p22-jy#jPfZHY}fPEN<&wCYHGc9jAqS zeYb;?r>_vF%lf-AINQ9O&U}tf1MO{PF7Zez`k9gE<4D+@FA#@P~$v;JXsoI@4e{y*Y3mK~XX?|HggUU&MQ-_Pa z{rWF0Hee+G^2Y8kJn18Z*u9a+c`yxM5}5mn@o)b}`TYGJ^76LbzfM5H58 zQ%yT_cUB>sb2LvtBFKiSf#_@hr0H8NupGP3A$7U9%5xKPbd6Q6!Max^bvzHc&*f)D z-hWe);?KSeQL8BUSe~>n_g=MT7Qe=Z{MUbvv7`cW`IxQoNUYc@15B# z(I97&sqceSGEIMZ`TWHQOL9P0w!gx<_?Qtn$Ex&yzjcGum?xf96pvW zs;HpYTT`|f7?1%R>;VZyu}$T6hb<%t^u=^3kUZ{ve)iA1+*T1ALMd@St=?JS{tsk# zAl=aopVs~9%l?$XhKjbOFo*pA)7UsO-v>*JJ&lwDy{Ww@P}SQus=q5f1ti|#g?-*B z(mewm7}CvMY1v=I{8ngue8_fLDsQv?5V#hA=2wk|z2>OT4cJuuG=A}~{1kqV|H&_| z_n*|^=iy8hrvY_b3bm>>yqvx6Y@SsoJ6M<#CKF_@hZ&vO)3-I$3IK)_rK=oo))EOo_pjRvin^?F~0k_25u|Nq?I5)U5e`tDu8`qt!0 zPJ5XLKpRF?9*DI*oN^az7}Z$ROt1`euK@s0K(N2(_U|5WIHE)l*{XuKXNk!r&)AMjsF)8Ha?H?l>T}m8-~^ypT?~mW*Sf*`f6N+W7aH)f!{2Hpy#O_ zo^W~D*36)x3D17Y|VhG1v zr2h2o=)*w3tK{iOC;3-|wc`2TXQ?z$X^XlZH#Jw;YYJn3e#{J@EQ$DD7jL`~P-Ri& zu|UvbQF+m$7~mevf=W8&wb61oFaM?TW2W|}HG4IByllvffTxZySM!V~tK@3Wn$ z9z_3Hy|DO`WA*s#%K#o012^TXmFB8_Gy-~zYiOw&pKz0mP0F9*sDq~#x+PubJvoI>YwIe$*w!0_7DEA z&BT)J_My=3zc{#~Oy@WHs^6|*aTS4=L~KJkeTs{J!cxi-#+REg1Bl zGi#d{Gq9DAZ6z`@T6yfNJ^GT-wqslIe2VCIlBW>O7C$Q`K1&gu~oh?~J0T zi}(Q;-d_Ar6!gvX8b~9!M!~*oc@5#fT&@fOzsdqQ$}Yfg4M7wF3XnRuvCDWX zd7;+#AkgLwtkk(`sgT{`BO@D4oI(2*Dm=dfJk_Ku&@soS!fxhUC^t=7(kGt3rvf*h zFUD_nv45^%<$U_a!h5VBF?L*N_Xu$SMn!Rm!QV4wEzQeCCEcnkg5C~~P3Dcws1vdL zaiEbmP-5%liTd%xPDSul zVEO1pkb@yBd68?&Z3FgL&$uSudKw6k`#FAyEZ8kYaP3XikkoMw?zwx)zj<;S~an1A-Jk?Tb1)SXZlr7 z>+pO?=X~LFxnGma(5Y{!MyVdj-F#Sjc)Q-r@(MgBlA%w`a$CS826L)M)bzSczp6cABK5| zoNJhQ>Wh-(J*htaj)K)96Cu<}L2Lj1H`MOznRCA9~E}v9r>|XFYJpkt|pw2Bl!L9PQzNjk5n}#liNtzPlncXSn+~42* zMmIxVg2ole!I&ewD3u+OJd|6TMI(5{Yx!>6clq@coVOaR@$RK?0_k7iGJk>dU!WRb zU8?d8_Pd|tKUyUi0lj;Eky%ur?#Xy9Uw5V`s1;z>5&)+gLmg#gg2F$5?@GL|huiRM zz!&b3&>uzGdvS@~g9Wc#|81%QltadqSQ)4fIB}S`y1Y{p_DTHp4*Akex)CrDxgk>8 zw>$>?RbK4_E^a806cSnBqUN#{n0hm?R#lPylAK5p&(&HoZauYf8W>9fV!i-SI8Dsf zj{Dmx=myUgP*JG}Sy;X}_c;ZcIQHHHQfCN;3L!Y*TLZ=)+Ye*1U&i`cL#aF3AP+m! zfGionK&O+YMu=yXqcGqar#RBJlRHux$YU+rB&WX%LlA1z6q+A4&491FUsHpd&_FO9 zrdz6lvomfI(Hvhs8c#A<0r(+)Nw%KjB?t0KCS?ZXYeIv*$JVuMbWcgV;#J3`G;Gu) zMh1saB=mLt$a@&%TY5&K@PG$x!xU|Y$5>^r(;*;G``6uosu&b!$1CbSK`Xkq(oNQg%9bMn2t z2rAqZweWB((|UaulkMt`??}Oetv8fya(i?!-z=U$gn9;O>7wTvc!M8|_#7J~Ik+rb9W`P^qZxQ6e zCf%H<0n346gwF%Sr5<&TvY~|IC3AMs@cRi{0(*0yhl6_?^nL%q5!R{ zg(6bIj(h9@>44hcK``nI>tckge_hpUWrkzuEO+STl{6NlCcVSdr?a*YmpI8sG z<*7_0a4tN2oNSO2A8x%E1~eF3FjEx$Bttd;jSr{DHPcDZv_U|0+)V1XJxlJpOPi+0 zhXl|R?ds>mLx{dMt$l>>A}U=ksVKM`pJqd-l~LiLrNO>4EEJ#?YJ5y&;j2bRh=ACt z+1?q!U}$r4Ah2-ymVX=eL zJb|BN4Ysu#xYoPU0`yc^x7Jrf$FDo?XcqS==;SM!$>)4;r(99mHXg@{Us}FAW%&pJ z{l+h|%N_SIl^}KH*mxI9%R(DJ;TK43J|%0Y@l=fA-Qy(&%ID?@1aDZp7{1lKS$|IZ zeE#o+uMxY^hGIxBCcow!EcO$rZ8N@;1hZ;~i;%%5)*y;>PkF`~=+1mDno{CA4uu25 zbF#-w3Xv4LSv|h8?WOy_Y$w$}y*E0RuZC$Pv!mD!i=LF|8YD&S>v`jFc%BRBU;SY< zQ0h4)kUdn&N?j8sMqB%o`MlWQM~pT;SId-%=}Gje2t?KJ9fMvz zwM}t+{Yv>`SpI&}d|3E*x}ev_EkS5Gj_>8^bBwr%6 zQv^;sVE6He`2I5>&hgcPmd<;i=xjFcNuE>;OKh-QN#umPB-mS;U%AXM=I8an{SBTE z^X$8l#F(v<1~Z0iuZ^el@snr&8wjK;yOlMbQqn&C7pK95pZ>*Z?wfZ(B*5*`{LOu7 zvFL0VT#_|szE`Vv6UdmVz{&xj6j#vlo9-L;L^Sc=N7ab-Bd4o9PzEnb9k9g0Fr;Nv ziIo0?P&Q>^`yX>+^=-%VL(z=EuV7?Abiz-@qswJ& zp59tpR*s{E9~2}>8_6-gktNSKt0D6SrYUm&1JM6A0&_+zf!qXZH6hVs+2@iS-!L)W zZv-WN3^xqREPgKZ{`r%71)-PEq0QE!eu!aiv8(su${EE>?wEUki!X{RRP-1A9ET?Y zKNNLE&PaD>n+4Veh6~jjkLE6#n-*BwYbW>21Ibk344osjW`R^^3x>xp5|uHJ@7^c8|iR6sz%c+ukeiOKh^6=TMHCe8g?d7 z2y8~7)P*#AcpIJZ?4KK$iGX9vl0+j=0LKAjQZS&DwP>@Vw6a&}tVu1(^=qqZAx1A_ z@RI>&+H3G9(R@_M9sw@B1*X*-VX{T2U0114^^Kh3ksoGM!AW7JeYs;tv)m<$$sOf> z2Px*OCo=j~JU;c&m~AU&NLULl3-_P$y;Ac#z^K0TH{!Zsf2CN6y33?3e>?3wL^v?8 z4&>EAPc9ttt`^R+^G~R}K0>Y$dEbGAocqsgMteQLSUf5xhsV6A{C(F6&HE`|8YjjU zQux}fA*rDvil%Q_D`tx}C*;YG@o=52l4q=wD+?~LVm zcIvNphIoEFxyoQuiGHU=PdFa_5umt^MLmNzKcon_o6#Vt+dR)dx_yg?eq4XM{3?(+ z_Exm1IJ1?G*FmS+9Mi5P7kk$q)Rrj+l~Ej{3cYw(LOrePx_(&IXB;}04*UIU&Gw;D z-%I-YTc2O{j8(hxY;AYw`gb`tk%QIG3h`z5zDC=CKl!nqTvaK)W6edW`~q`~H1xcF zkq@|7nAt@=<(R&O!ulH=H^XGP-5!=wr&d@_6;Jk-1`uPdT(-Dx3QHD&Fq`~0z*a-T z0wbb^DYc&6KL84F z(U;IGD3~`xZ-gfg28}b*X&=o&-O6W!M_;i)uf8rLf@9Kt=@gid-g|Ywuqpvm$N@a> z)k0Sz8t^?h_im&}RlqU8FQy$>9tQGfM;I3YoI-r}=s5^5b1r+Yb91umzBPC4(8GVF z;IuRb)}MR30+8Bhk8xd*-HgmvGSgUa{dm&g{*k#`{y~h5U_9Ik1zVudyO<);J>O*2 zoCp6fJYBC>^Bt)jBN`J0^gc%_eQ-l%Pkb4azXpq>SMjvx{&34wKq~ACY!#M9Z``I+ zI8BYX>#dl*=y?-o$1JP^2P=-aQ#)PM0SjkHQcj1H?%q)gp=r>XZs#?04TyLk*NewX z-x!G(>m!xjxZ-r#VeO!!eh^hJc%-b}nLIq{D*PBd`AhHfXU?d&W0~*WjK9E=GbZ{5 z4H$xD6@4cl_ZXH@^fKBCBW8KFfX|D2CeH78iE4Ltc9nDQYp`=)Q-OO-0Fo@P$7A-3 zkt5gD2_lvYUTQ5lp>18C{`AGUy#IU~uVXv>N53lStWlJ+kpZE-)l23+Qad{}^nrwYFV zLsMPJL_fX0qEUyJAsez+QTYHz|S+XL$9yBuWJCO6H{I%UphR& z9|2ewsIzs|XYyb4!xt&ex~?%KHqwMdK7NI2(+f5v-Fj-j$tF?*_GTr*HkV9aK1=8U z5_C(gjgYeNNe!D`D4an_8hjA679kN0Ksi3+ENVW` z)951~h3Y~$vBChQ3H^KS8E$MWo}{vPm+{ARMe05IKu6r;*5)>fN{5r4-V^ct+`#W` z$AyE6Jx@peET3+&rBl2zsAbOsv#DrJtIBTi`C@0$47cvh6E9P+?#2Y#O-(^h|02QdMO=l2!jqtLTv7ju?I)CekvSc%bf>w6Rxw0HrmTnYfXa<{J_d`IZeQfYK!-mBL1ZQ#rD(|U`8{rj;U zHNW4zshAPkw&VK*28?86x>j2=YqD#p3#+Oji#u0Uw}B1DBN+Dh{LeN&vM31ce;+7P zPbdM()ijPMUDtE%ff5oL={|)usd_igU#!h)pW~FS!DKYES(I5n0a4j)d(y6Zic-`@ z4#73f^yYpf#kk{4ruJ3VUHp@oIb4yBs0o5o>bSV)J&|R2FL>HgIaVy3I{FVZL{P_K zwzj!Ad2C-zBn#s||0Pm&9OZpW-5o)JyFP;>HGltwu(`Q3*O?Fj?tGxp!5MW#k_Dog z4-NI3c3)St+q}2MJf-#&l_pc-T8$XDk`uRu(VGc_}*DmiX zPkQvq)h|AeG3-;9RNHr~P#CPXguQfY$#W7pL#TY?@_8}e5XfqRxJct0MW&R*Od4q| zM$Kr7IxSqQH^zY68E>WM4XXRykLF zaIbd!mg=1mnJ`5Qi*S}O=LafIq(f^O!Jqp*-nx4b)@9F=i>p4;U7-6yRys-(JoAp2 zHH6hs7+G<^K4%oBd8Czo_zE}QHQxDe3eBQVK+Fxu-EFg=Jem0=eo{stE-6{2m*5H5 z@s5Mi=fT2UPr!8aT(6k@#M6C@X4#8e;R|0pzK1qLCJ?3c#%7WEZ%xJ2%ywu~h8+e4!&2k>;VoR7|J}7!}^2r#e zmm3g;M2Z-~*F5+cj^SGnaO42cmkst{4$K+UVb*gNE?m8MeOOr!qGN(LVTBK%4q%}o zAJAp^Bz*F{N7P;7{?(!t>RSgu5yXQ~MWPMwVe!bR){6l?#Cd!rJL4$$#qF%Krcim= zZH{2s4G)QJjlTqax06Uwyy`aY&wB`59L9*Jx=$G^GiaR9S+P=n7S)nxcCt=T?k|%g zR}hw{U+(0A6)3d_4X5Q-bIQf;>?SPKH{hka-)xqzw9U7>KMGYIXF9ar>T(!#p+>pv zk$&6%(QgwXJfxZ?*E@G|D21s|Ms?VGW`{IOj2@qxbrH@mNHXEY=Wf(Z^QYgMsIHGvSrQ-`APNV(qfYcdh7BB{l$Dj9-H{yyp&Yd9F}@Eqg+XegAe?2 zW=!kfcZidnI^)>eYX63w{-=<15qK#fX6qhn>`e=josUX1lB`X#*#tsLaQ^)VO`OHOVW}@SBEwCvZ)IL*55>gtP(imhH8Yn< zy!}iD)Jl`{m_o))!4?^g6F1Nj_xC%0)2YqPjyFrTH5@|6oAAD4NpM51B?VMby z=%|CVuL)+wR+f{M3)qEWIwvP~e6G15AYy&oTc9K&>Cb4Lp_l)+(u=0eNyf}rodmvH z2F#kjLcI}%9k0Rjz>;HMbV0g!IRVt4G^WSr4&%5-2M`XoM*2bv2{`s|pvjRI$b%#H zF4cPUpVnAvE(=svUTZ~!hi{SeB4zUF;i2_=cBFedgQKBiK&1&jdaQjY1D z9J%OYjDPAQY~SC72sWH{Qs_l*jj*rGx3^J;swnavtp$zJ^j-`kPr$lx15=S{0#|hRFDYg(_=euqPQ<5AwSJ%<1I*6BC5-%xP6(%s znu|Ay`Os?4h#m$_ZE-V!3f&fRt+fxFzlvGy*%OqxvKXz)!o#!w$9kbqdl|t)?Tt5Q z%QcwnErKSEcC2aW?ztspJ#eUCla$#4@WY#;ROZyaH{hkB;^RKooi@N?L9!o?ad4|^ z1iZo?m&!TRY%p68r;#6{=`Hjxc>+-}W;GdNXWQ!8`hQEuYPO(2v7Ml-n!xw%39h!i z#Lom3;E@4^UwDqxlIo%Y-r>*-F(8(wq^f!tU^_)XF3)d|73XMBAAIV+63dfR$RPRM zvoFNY@O&hH?QeCS+&L5X6eukcps6WM3ccjP{3ol+--rn9Z$|551p@QGt@7b^Bb7$g{F=%}u`w2H)(=y*2y}xhV zhV;GMJx?KBkc|lW$^OSz78**SEG88}u(LCv`03VEvE~bxtSh0;veD<@(~yP!(Ts@0 z0tGIc6@s!x*r#Fre7`-uw*xYtcxR+=MP6>J;u7S!e7gK-E8Uqmnta%hmBY53jkah! z*vnlbCr=$#u9!LrTcvt{2vy->82M2bt$Gp8LosGtrHpm=tlWJ+I#9V15Ql){nsM;z?Z-pE(3V;NELJwse>D;C-wTPLa2R&jB89W7N? z7E+p$em3yo9L3a6(s9udIl$Cy%Z#SGgvk;xqW8`00ne!S;>3Hx{rc5l3tVjt6#11L zD|io>*X>x<=m2yeR4kuxcukMtQd^ZVel+cQtxvmfG>bFDpZ%WW==ycH64`W=B9E@V z=Tk0+G!io~wW;SSP$atnjk)9d{rdO208~c{aYeFuUyjOJa&O4l{tjVLARGip=y2=l%TjOTw02UlX(%th)8yte6z|Ex^zA-6cerTCz zdhu1UX~S>P#(Z{2xRe;Jr;P*i>PPWYC} zw&RZ(?*ZZur0nhi5`Y2|-x|5`i)-^0;Y930IwyN{%5>FY_-#I$?G8(Su?qgSt#JsH z09Sd>_>DyN-woScPLzYBv7Rt^@HA*$o%(v%bbULPSPl-%oDo_EQOTn3WqUV<@b!(Y zB_`adnu&lTErDln`Y(dJDS~G97OccGccw4|d0C4W`!1W&2coFMqqM#6e01Sg6F=F- z!t9c{h=|N`T@eLal~372(=TR|?dF}jc#u&6>{oG*_QgAXYQr z(0Lit>Y8+e45DB<@m+fT<{^LJOppHH*-;0;14w(5UFVmN@Y?iW#)f@gHBN&70{$ z>kaK%J#+UQsLAvd{jd7^UyBEwu}d3$dyCFWoMXExGTaPTR@7_eImA5R4PzHpJWy8H z1Ezs7A7IAam`219VDWNq4~t7ik{*1OB=b5*xY_bRsqG`;+>s_@yF<~?922kjPoF~L z(hit2>##Lh=koliyR|rUP3gi(K`oatN8*ju*tG!O1{9=xwZPuTms&XaS%{%(1 z6`Y^pHwyL9h^LOlE4>M{Y4JR=VSOgVS4hf5fSH=OE|-LA5wtas^IsOTr z-8=mH`90 z%`a{Zh4kMgQOubVXqs2Vri1Yoscr|libjp}X}Ddp419orH8|cdCzxMM@Rr0t&gqv? zWyW3~YDDjLeceXS$#hQAmD-`}ov3e*p$exwd_RYNrTcB(O>RK@RfVmP6b9|0@#J{6 z!_T6K_7@qw(#gHpF)@D>1;Tl2L&hEEHIv?`8$=EEicF7Xg&eRF8*kLv>_0~E?7grC zAOPx40S3E(n$E4YSYmnALj&5oTDW~KNkc?ca?Fb{ezGAM4F|Y*$WVE*oCU6keD02u z9Ef}V_hYiQYo5+f&&~z5C>(g#N3y8Q7m?$0aY?hv(g(G|#TgBh{H2w$Ba=7Ze4Yjd z5*(oBu#;T@l`rRkAwCR_uaY7s%C(-EFmqR5fLkqSaH+(8(2bl3eQTv*Qclc9x(X|Q z)5!k)dr++L?4UFsV!&KiM&!CYq6vqH*W1FYT_!x2E4QAgLX2keYd+?F3LkyGjy4^Twz=smD)+<_MR0pB5b&z(-uHNZ z1qbNLzVK$g0eho~@~9Y7$}3LZKzF!&bN$vNDa98f&0IMgj*fdvP=>D9xY_AG(3D#> zv|1?nx{HvnIO^qD)jo*kgM2?@fsa5Aubl8oNLhYk+HA6JbJ2{dVRQ-6Osb()j80Tk zs;IjFF{jQ)ymiYWRLZs~--do9s;|Pla?=*P6!y86TKs!-@|SD3dgJ1wr#xt`z}J2H zLD^Gm4|i1afmxXjdB8Xab{%C7FB~)S zI_n8~%YG%KT{9JA4N|m3rzYX+J&3W_`Z*-ll*=D1FbI;6= zNDxmF_uv8*a7uV}5q&-E z2iD`b8ovJ<{J+8f8~ne)|Gy1h85^$VV*bkBc2z@X&0-nPKhY!KwbL$&A)QDUiB5d< z33=@o$PMw@(_EN;PxRLCE0`ywTJ{iJU9ChHWheD52MDhCXC2R(3HGSXzv2X2Cp1ly zo8`P98XM(Kr1MfxuW5Nd31i9xPu=w4hKiXqqXw_zMxh6Y^a{|IG*z22UC$F@ql?L# zlt`0fNk78*;PQU4+@d3utfap9sT(E(@Z=TE81Vs$ZUvnGfcN`taozM^AXx@xEV5oG z!NTWvWs5>=MwE;+gi+&V+x!LTgE{&;9jV znF51$(tiAjAPuOKi5-Du`!velL-au?77pPKt_i(L|JTWXs)|W|c|tJi`!D>tC&5>E z7?ZHM)b|TrQU7rbN@;KH?_rK6jn~;8o`2-fj4C{;BqO#TaDBZ3CRJzl?yjfe_(_+G z`5y(u`~wvSseiM5Nn)(N`;vIyKs*ybp?Etm(cW^ohUwIMP4}_D*JM%SgDaKX( zR@Z6F>4R0S6QwlQc%kt2&>HKda{zsPyhttOi2MBGIIX8>c4<=WpOCY-U%$AzavC*@TLO53@ae0y z`}>mfV7Q{MC&P`im0bF@4#EHT-2dR*+`>8NLG$)g>ZB!KzdM_1XEh}k!QT}Q;ne%c zO|DP!xu)vK>7n}c9_Mzt)&m^pC#Is|ZJ{6PiE_rz-;c0})`7qN-86P??4T>~jnaqz z$9?j9AnusoEcl-Q1!N4{x_;MVr+DV*|2k;CBEd)G7^xK7p6Hu8u<>Kd*B4abQ^*v- zxat^EmhdiSDzGVawQe(@{MVC6?z}%ZI2h)!ADl9>Qi)Apg{p}FKRml@4-g5Xpno0A z9}Dsey-xV>s_!7onpVb%l!f6FBW6CzGLkm=iYjgqRP~)V_8zzA05+7~KQ9~ks>dWT z`Y%Fl_7x!i>aWvNC)Ptk(0D%P3Ms27VsZaPkO}Som?4L4}bC^B^v6A=m}M7M#V|rqmt8DE*Fbq zHAH||DwoLO=YOY{f6X!O_G)wtm5L(3c0>Heb`=qACiq{?d^yVgHGexvZV!U^%=0f4 zS1KZZt5R8Ql8#Dj<@rm{n*6^|yQ2PHtlQ$`gAJ>Prxl3b%V7p{^Q?>DXE6dDauwWfDyV-HnMAaElQRDjmknWy-W z51ZCZX+!-5LMC`0nKOY&7{~y)W_#yt$|){5Sf<|G23~6bQoG9r<2BVrl-oFKZKPq30`cl`6jW z$9Trw?{eF?_y+SKCO`R1^5NKqfI?quhxF!Ix`l5TzYF$+`sz#GuGcZo)3Tg z4c%1WPtxP<*b3+YN-Fu4^UKTFpoSlH&>vMd1*x)fliig0M=H&ze;vj@#8!X~;5IAY zQ=WNG5X5BxBjZ1gCDG;Pj4q;==Z{%4j>Z#npDQNkhY5eYqxtu9A?^7jGBllfq}z(A z&lRaO1~}&z^~BE(y8;^_vbeFxXWVQWK~`d9X5>5=|7|LkB>cntfcIc5Apn`j?B2Hc zm_ndBemVL&v4;M$bTEC=C)F?&Y1Y( zeoF5Cl^C1<>BZZNFi92#Q%(7gpIDwH-FIgvGE~21pf5=bkoPfF9gNpbdXsOfA{rus zYj!{FgzZLCR6P;CktIM*Qe>q+e!qX#+5Zkt2L0jthM#$8=<)q}jlBE;2&t)=ZTmJ( z!CK&H)K5hso&tV8d-B+lpCOZJFy{37r$ke8lO8%>ztX~$-rRr%zC^RIZD7CWuIc_& z{Qn&k+p5>`bKH})K)R6;D{DJh1zEwxmItR_4$rA-HC(40_Xoa=gW~^md}Lt`V~cql zZhaxEBS*Zmy{1{vRm`ZbB@hsDNuXHrwySnge%PwGr;IErRnVJbms2N%jCW61%NS|t zDyK*PIrx7l*#8cN9)|PvE=;=hZDAEs-V^TevoWWi&EcYI+|z+I8xk7P*x9BYq(lsX z_oE%Ih^cj3a++IWFiTVf&)X(8-pIF;dOrtpLwXf)%IVy$wTuj-OJ?{}g$ppTNZ5K8 zSu1;LSS$MVQYb@erA--L#%st+GDvVUTga8kW6HfP$R>c0{$sa-p#LR$joAajT0=^q zs8chleb8)}tqq>M@}!Y0%|G8|ukwDsL_JQtu~d`a%6Ew9 zF>a(OjQ;g4mxflDtrU?AxlQa(!@xnEo8ol6nBL&1RG#0xbDE29s`vJ(NYs+P|5qy! z{67Hvez5^~UO&0kzO`a?O4d8j&f^-Tk)1O7GO)PY5fkQBm~s2T6&ItN)Rpm$g1#9? z&hiEyTV3o&{P9b9Su6dh>nV}R(8c)2e44l>-;~Ibhbwy0dR(f_xlbzh36P9A>a<-o zOyvLMb^bq*`M)>iH&;$&N)HSw_E0Xzv{QqdjQ3xvuy(q{v(?^PhD$8!-At`o$KI+* zxvrAF4;dx%L6H`^U`9R1#?|`%ne^I{bwcoybR#*Ms{{>8rIg%=hK6EhGz%}WDST5i zRU&a~U;_Zy4aIr1F-e0rO?cpiz;aWB;bvOoMkC5F=_h+OtYyE_Z8 zs?AT{4r|wNIT$#TP7;SDz5AceBL8copL9-IzGWlJ1-Tu~nPhbF@)Ae)ECP!T$|e-< z3ec^zu_us=Cc3;IpV^gf=VYmWv^aM%r&llwId#H`N}Ndhwp1&ILn<^_rM=FaF8NX%+DCFB&4k|3^lIK9JtpErlkyqLW$K$%JI#eZH>C z^ICuP3qw>b^CTB)s4@OCH(r_kC;p<*1QlERez)>o!Y6X+9nyRkd6mMDQTDoh_EK4+ z9gS-(eiQRU>_invL@&ctmHCY+o1w(gHW89>1N}w8`w$BizJJi{{Lj&BFzr&&N%Huc zcjFjvQ@M8B6ck0yLUnn5X*@Z2KM8t|xAbuEh}Xvo10CN>J2hh`QzQHsVz&QZfbeKkKS0mCW!lezRu>fof2^%WWRwBDb{cQ*;?iN zGJ<@t%JwtiXO2RQ_@gIKWs z4yD&b3CN{yr=5RNAd-Eka%N#)Qa5C|Rc@ey(zo$C89~}pKn#Q!?Qpj37l;*$$uI{j zm*$)3-?G=ErpKlJJ_N3-3d911Z*a7$jalrQx9rOrFXgrH>eDMCs?A=~I}(0mjL2av z48#>O$cjIltADO|7DXO^Wx?gz<2vr2TLqR?5R7i~r8H>K<*uou+L2W@k$1uP<%OY- zZ2aTzV1t#qt6hOZ_hlG3f#r2CQ+^ZyUu$V)n|(urlPF4maUwj_QtT_M`@Qe)TRypK zxAy~+zKi#tu^-P#sK_CWmO2;a{r~E1&9eXot=xN|%6&bG3TQ$fO2^}VhWppZkiR4< z{8~CLi_Iyf$2aVOQ+$K zhG?bGf3bQ=`fpZAvQYJO-cD9arTb#d5r&IjWlqj9hna1p?5rIeQKToRgx?_l?yH6a z3cHeGOYD*$L%s@`qj6W)WMwq+-CV!X7i{|8>}k6kzXLc*(GogQ75H(&`sQf|ONTpR zO0nG;T4q|wXqd}SRk2SH$`0vcN*PtugRkSi-c`iJTUlL1(!Mg+(!(`0rf;}t9wN6>`ympDJ?|| zD&`kRCil~h3lhltZ)@qrLcWhQ7ZQru3bfSwFMO3OGG|}e5gfrb0U41CL>vIa0R5&U z%?(YgZJ@B#4w__0G3y<1H(4B1NYuPK(0cPEsyN>LUov7Yu}QTyO~s)Inr}n!1VWkq8-5_4^GBaC{sms~kk$MA7qSMtZtu#=^&+K9r7_ zh^CKzVrR}o<3`*G68x>MRD)Xj(StiFc>z`W`ou>`sRscJUvw`E82E?}1{Q!x5eJsS z{1Xx*N}>9s)%fK||2(~Muq%Zx0qRHfXb@t}qv-Ogf70S+=Q@nt>kVgK;ddZL1mzK( zoBntwDrI~rr6Jo3h7>jn@D{q8^sT7=Scn3V?ST(g9EW4t072+2fk4}hz^aJr6Fn6R zCpHDhyZmD_2q0^PYN)hq(kHwHHBeH6YDR{IQ{3W!5A+IaC`QjKXbd>3kRo-Dw(xj0nu2MK`_2}(?&Xuv=O=SQ}0V^MWMy>Ent z_aI0I%0B~2ecY`#%!hZirt+-5N1wTX&=VRrK*}>=4}2)9{%UE~DC4ad>ci|J)J29$ zBzffBz@l)fAIz4m*}39*qrvY}@jnEj8 zI|i0jsAYyWPKwDS0=!%|fDweI|5e}q17!K?Zeay%u`lV{WsH@q<+jypq3(EQrUP}?nnVSP^qj;7PqVu9Sy1abunbwHtS?Y?g<20+p{ zZuV1LN9mMnug(WI)roJaa_nZtwF859j$mhV36v`#xHS1b_XgUDg0!Np>*{iU!}e2e zjjj}AtFmsjwJP)jjvU&EwV-FC#aSgl5eno7+^rtXJ>9#1`mL=UpQ=(Uszen00gpr_ zw>IN+41EvJsFQ3AuxHw~=_rV?M3RvWW|s!d#x}Xs@b?<$OQMoyPM4{^IfwlX0>Nq~;-l8G|qyDt-a4JXj0a%rwj<6aXA?=nI zzE^W5xBPSKvv)>EGMUGiZQr75$86YmN&qGp6yEJ)&PQmC_Em&J{i?gsEXKh82_kaQ z{nzYPeyfD6v+=QfQvQ(Ay6qv2NDZFvlHq%xevYdONd%`CTYG*r(}1@Pj+*%*1hOc|Pu=KAMtHbf&Xg9_MXzc+_UK0tNuu=!&nb~< z4lw8~@v;yx@AiI?uC$g0FQN3jBVQ(F8i@s!?6x!E$37!I;z(p|W@b`r8`XfnllDqP z^YYVLq`U1(q?VyKPUV?(Z(%fc^TE-lC{|gdUHiZvv9{q%U?H?o-`nY}mz*>yV?Aav zufv`!yiWwxTMA8X4>%4l>1zBkK)LLSbkp`b@KP6_9pm44adf*x{Ic)45DTjnddr}d z!uqFP-==tVBuOIj&Tb)0OQ1C@TAXuzHJN0;^!q`=`SMTarf7>Z`Ex*R7l>LA@iF<{ zzB`&oNW>T|j}njoV&3+`3Ji~r6W8fuKqzx$c(_T~PXVg4rX7xD#5zWpJdcba55C+B zM|zA@;nSfV#@J}+=1-u@?_1jkB!!8r^XvVG-OO^KTLRy%m*TOI`nClhf>p(YH(7JQ z!rnY*UDos8LoYHzUy+cmfw_NjZYkzQnl%eSV|z=WmCXcprIvIqJ7UA_*7&<@MV0x} zH{36JX+F9&8kPXEjQn3B+05QpGOYPWZ+F~Bohk78UDz*zyCPJ~)6UJcB)D^SMivKf<2UWeCp>pc%NEgt`iTA-j08tA(O>5W|c;??0x?nZPi=fM%l;p75&D+Yk>r@bd; zwGL)!c!`Gx-!c4rAyb#=|DJpp-jz0uvZ*Q}VY)l6h3BzJ+U1*4mLf?iL2mi`Y1aIW zH#J0!TkWDw12|d>$yUfhNwq%}J{Z{Ut$&-uSnQVM>H|7?r7jcX5G1$-jMp0oAr7xP zP&lbe)nTIz*SX=hpi|q!?ndO;48kE%5rAsuEYZGSv7U$t7vv+oumJALKf2RSlFMYiv z^=5axV>$L~HrfkqKidZ;AfQHtm42=sS&>MW4<6H3f|`B(F0oapVwh3*4vJ>(-t5@~ zd`ihE3|hL&8*KAqn28uuxQ4fcHb3=c{gI`PQsZQWGD7W*{ z%JiGCpS!Bjn`~>^(YV*|s}E@AFGS!1$X9LYMjz@uN$jR`KRfR%Y#q4!A9rbeu7exO^B%S9qQcW_3_*Hz`fBL&Z%sNZVG5j8SOC4r79it ztOC{#ZD3u8&nT5D2zAHZi7$1Vw^43o;abtM=o}F0HKh7^1p0l1BuR!avYr!}Kbwk# z(DYvg!g$HSTQe%qH3Qw>*qRY%k|&2TFcUjN^dC`R-b*^Y1@yfju|hP=H?NiuMGs6R zfE_Q>83J5*0?eI>#qp)>vu>2K zZ$qPi%454O;5TsayB&b-LP-7omGQfkH5Z;k2z-&_SPaW*iXA%T>AShumlq@&tOC%#p&p0F4q*vYC_-cdnL*w`@1mw59HtuH1 zOPqZCXE{Evg2jjN?g2t@o$~@3=0MSY!SZ$Aa|v9nqVf*B;3&Fl8M7JPlXSl?e*JPX zQOe??J(l2)e*99)ssMf(Hqs&eXFbRWfZi;-J2^iLT}MfYayJ|{p1}HnvKh88Us_L; zCGHrJWjnzA%*iqOTJUbcbe!um|;}T%0!ZCz4P~Ykb_!$lKwO^*} zi{GFlGd@xzPrL02gJaeJXsa1fd$o5{N!D+Nr^jOAw>L#@4@>>HmSgvb>O}jLm1_{g;=NALt~4Dz_rG#Pt?PIpwm92?ErM%) z5960z23_`J-OICS!9s2W?5R$D-c`4&dXrZeWDMe9ok|nn?|uz+zXs_#NP%?bCTnql z_ha3w=V5fG;CjAQP1xmH9Wq5tc=ifPC8)2Cfo92<@reXI8EtbDd^<}sQ&=HNZ?~9bXw!O!cQKl9o ztaWI3ZBGJCA#H1V->>c8Pxn~Z7NkHX{9>O3-RieAS`c>_S@SCu?xmsgrXLv*Vg9+l ze?e=l1%6euW7PmjK(@cltp;8uAqp)J@!#YqFBn+3>m+r**xvFawHh-|l zg)x~tJm5LJKN~IDKhwc>7f|mi-%E>K%-jY>Do3Q;^@xbqnrJMpS>BKG&;mt11-u7$ z8#eQIeH(y2r!JdLb;;g`8`+g%2c|12_@TvJ-tA<}^CXON{?P8|jxsDWR6_6ev=%92 zGP*n^Hv`Ls^gPNz4E}`L(~aiVHM95pIT)FF(O3m6kXRqAS6Xeu)=~!+lKfYMh|&O< zmS14y#Fnjw?d1J$wjJ=EHV_#vu`E#e!hOwysG@DbufQ-GM05ZjtKVcTYEPyN-drcx zqx1Gt_9U@>5R`Zz_k;J!v`)KFo+O!DN+7G*r*CdD*QA~yzxmJtG;;_Q3$UN@vwHKR za$;(iTA*f&QwxOU1SXmUGj2I}eR-auX>p##TG600yNE7Hcx-S7|2`B&-)Q4E#Q@Ia_NnCziPHFlaoG zy6YRPAINSOCYa<1GpMt5p;~xc^FajFjq25v7C|*Y?|ByeZV88lZYc|+YL(UzlI5&? zfXkMrcGDh>k|gzF?h z{piC|iJ(DP%2K!!sQ`Z#pR)`-BgvR9HWFO@09c*Sh$wBDEp6>Dp`N1a-8FgFm|XyQ zp!Ar8mh}Dy1y$ZstccTP1?Ud7lH4XBCP4ZdxXNL;B-;XN23T1o$;1;mOR^slGQ11Ph@M^ayc<7L-gq!%+Ie_P_W$6X2RJR46ROi#QL^u!(McI0|kf2Vh z=c;$QS?&frPOYZK)GQOQ()dD;kr}%kG^)>Kub}M?$Wr|Ma1ft_5#hRz)JhauIjak;qrtd>LRV-vdCx*J88o zG$5M?h=eZlY2jMRm?$vy&IPV?@`h&T!Wun8DaHY@fLygY8WX$TN-J@@pAVJrXFY8k z!nWi6XzEYR8$v|a9dAhQpCfkwcR|fT>d}g-0gNRzRP|2@KC7W-5OJ?sj4 zaLe4k2d=npJ&I8r@5zQnNyx3aEIG6JtbZET=bI5!73EellcTe=!o*gRM*@hyBJ9O9 zta^|wt$9!?RO7hZCtP?Ujqb|sz<#i!-yXyF&%NbG;V#O%KtEI7Tc;$lEITAaAd{2a z?n?>Jtta}`UxFuI`>T~J5peUd+yI+*;8TGW%R&mGjsDY-dE|0e>MD%UmnX}C_-Y3U z>5FLl-ThPM4xEswknQ6IbV=B9pobmB{L+ZqcQ`FjnH1Cy*=g{7?vk=})l^||2#~Y` zzf}$;_$A)*nYLaaVlGB|9ZXKj^0f8Wq-*w22;@?wL8z9>@H*aE+D&*Uc311xnBy@s ze?tc|S`73wnb?)aLBMmY2WE!365+jnxpTi?>4P0HTe(s4=3=ngA@Zd{8V@%6KiuAn z0$Y_9Ym&#Pi@WivJCyPaecjCf?8# zsZ6>X`f+~tIqphr`Rb&>OK00#_p(+6qxNYCV*v_`LV|0r`j#AydzOF;u4HPDctekT zmEJ3Q&-y!1Z^1Fbfzf-?i37PdeDx}F7m#~^o+?tIaxd?ynl@i(Oeby*^1Iz%x2Zb` z`=+O~M?!2YV^Y&xC*UCdjFVVn0>)>IxwQus9|d~9X{7fB`^fSpj~wqVlsa>i$NUs2 zcS_{;r}t!w=;R$=yX&3W_uIgCv{iX6#&zu9JN>#4;;92C!J(lWfRCWPpQ0S%K6`(z zwc_H}tWTt*RTa7a<5g9Ovxj0H$U28rR+e)3(EbHK0&;)zK74Ff5h>S zpEdY@W!q5BXmZ#OJsSsd{LOlI>*-^ItaM%}Z{FUWdf|#YfWlW-#?rn}01{2UYhSOF3;EeLb9#FomXD3V98Z z9-=F&`0eV+SIVXU>+LOYqXiD?tEZG)Qf(=Ddl!5KSfK>%nJQv=`6_Q3I)^fxRitstpifg)TPAC@ z7Qs2U;AsCXoC)L@l{JTg>jphFum;=#QNKo&w9^+%b+dSZ8kMOAt*AqQ59EUzGcHJ) z^hsF%g*UF=xb8%%K@_Nv!f&`InZJ7ldG|Yb_7#unkU8Fm`xp0Tn5;a*hNL%0Uo;mQ_M&oq+JqfLPccef0K4m z1`2Fj5vog(V3W~7qQ8vN=~Vk zK?fzJ^!j=e)@Ig!nwND3%y9xBq28}{D#ZeZnmv59&p2EGAOjA@KLm~rIX4$- z?i%r!$I|qIG3@O-EKh$rOAdp1l8-%p(+x(6qhr$3>JkSNQUbfB$2WSI^~SU0?36Nr z>Rs3y_XA8a-0wx!k9%Dbi0L-R^O+n9G8~X}fyjN-0d#7ui&Ug0g;f^PQ2^qpvPQ4# zE-Oj?z-Gv3+oIiR{JURU^k?nQX%;lgNDo|9U1*Z&;usHGf2M93+(tpo*+5*LLP06r z=qn@wsD6-FKZ7M1G&*pcLnKfw#bpJRHC!PPi(^U=20hb&nng)SA)#%&V0ogz$T?*~ z{q#qH-0n2Nl0^`Y*!QfFHJQ8gwXR1<`_|40gxofjuD9P&;Vq!75-kz4x&E z!>AfG8!h5g=v}P*OQ49tHe-7z3e;&)M`r$IQLwrn@Y%%^kI!KpR@edCSP0iy^Y zB~A|sNY6(9wozYO&)>Tr&v@xAk+c)p#M6T7mlVl6uns2R^)ra7P{8QLIq8zysB;cT z?CxF0fjNu3n`8XEEFQ6Ur5>>ECp{JA{YtDY%rEqNpD5y00ru0D?sx@v=OhC$2*cuYzg~UWNPsVV|wW`hLe)jV-VU7ys{_O8+LG>)6 z{v+RT@bK{ISzyeckM%Q~%KfczdZ>-wCaiN5}y+MYKk6 zP_jN9&;G1F8@(MiGsIXDDUmdrJbU^2j!pl~P^a!gmuH?|K6zLXC>a1*fq0O#a*Cd9*j+oU!OVCaC?iVdxn?lw(NmekgI-7F%ZntLqPK8 z?=c}SW|i%ybs)NYUzl#*?^j)DLUp=%Cv0O#ok!7@+SivTj-A!%6aWhdtVC)@)R-n8 ze|mzW2NcR-c>l%XNXa6 zd&)=KVd6IL7^{Tr5jKAcJ85<8Ak$LhEI7vZijdWiSY9{%lz^prLiw+tx=XLE7_!4H zrzc_?r{MkRNn}5+guOXn5~XIx;U_(+u0jX<=AOmpx9WSR*tc777{FY_5@_fv2N42- zkxtuZ>D8~RpgTi&^PN2mG<1vzc(0|Q_XE3_qU{f+9&}ZUDa3~seJe)0b6GnluESi< zkJig_(OIaH=1Zu9Z+s>jwEAa{BX~<+wI;M#wX&YV9Yf3!pFTbv$5oD9xKB~JW#{%-mChhYWuFM(12mP0=`BM;g&;%+{_`?NIX zQpXguaV8Z184+GrJ5F#n!FV)+gh}VuJ@y5Pr?0;OSloHUH>V8moR%+AcmiDI1i=#c z>g%5{wBH^X_iK5l(G+Y_YwE?Nkmts?EJ&&9UcZ}CSDu84${RyN)n>}JGWGO^z<$gt z(S0&IHSaJL*}L~{_lr|yGv35t&yhJtVrt!I%Z9HOiTRZkAPoxKUA((p@{_p;4Kb)A z8^)7Z5%?(Gy^`BJ90?xxD55l{$xv{wLHoeT)k&$r*y~ou6iv_03n-fL)90%Ru9f zbx95Hn-8R$Lazy}GaYAhd%(@HL~iFs<^BO!NM=CluIWFiub9^#ReIGP zbs{?X;X6M2&ktb`i3hBU3juPxaanIDV3at=#K<2(!Lnd80{6tH`Y_Rz@OL?NIX}cw z{2i&nrUwqqk37LOl$jx*x^AE5g)ZT(RDEVE60Be`VEG_ru4RwBZRq-R(aD#N&w=U$ss;V`VtK z`5GhDJ4#!17g2ijg>porhJs(pCo!AU%uiVJC$zn#C6#(PcC%k2hx1pHi~4L5;W5){XYU&wc%z5jL-}}OK~A)`ulWH#s{F^|*18XIOCh6+(gm_k zjH1(&ji|Z_&_>)Xjw<5G&yT_f6gI_p{U(jO_=u(_c$^&ZZc)e>&ZdxIr+G0Kk~z2HZBqy70t}Xp4aFs?0j(k@BaeOIj7LQ zMAcghB5nWHO+E{?XPTekYhfLyA<>^Rb{;Jk1VurZG@$Ot;>HRdLc%<+B_7w%rbCZX z80=Jtuno9`PBi6lnV38IDIyrFHgJfAzQv#_w)k@0ai#bhvd{+l*Y~Z`<;cZ^aX+E( zQ5@tG1D&kB-NtP`>pvfPX%T`O3(u>}0;&1>u)tyx8;5~r*1*RtZ(|@88pE3-cFjar zzaA+0{c5%oebRzsiCg}}_UeJs7d~+)DJ#gWxikATI<{5doua`)NBGtv=-(y>}J9*zsv`LW+EU=Y^ZT+`AUz9wpTOGane%} z2a?j6@*%}##XS@_6bH0z#1^j5y`YndKDZs;ulEZILsmijYziIDu^mkiV@p=1fre82rt1Yg`NUUj^~#x!)%EdQKuXCt<$+a%d;hfVsqz#12d7z3LL zy9XzD7c+Q$OTXNk|HqLR4r!}=05$iaIUK^R>$nR8=r$A#)^92xx$%|9)bxff)GvJ( z^aad8RWZpa!J3|)9qZ=0Pic76iJQw8p;KsN8yf7?FUQrPTK@D=1~?Hb8~@NKVkkE? zgl1zAq2~aLZ9U%|!2B5C)%_ala|D5dl0HjyvqS1|y~@*e0ep#9GxW=`Qg7{(?CI@o zXpTrim*cUH<$F(Xl`y;fnDeoeEu^nXK{)>IbruCDxc9%VXn!de`b7*29W6t7jATC%&kVB@Px-jU>qK3n~Pb>yfqF7uLhx94Ff-r{OguPgl0iPVYBmjT{Rh%S;H`24Ag4U?QPx6z|6mV3y*B_&z&*^UV_IUaotk zGOEdkD_F4k-<;f!rEr~f>JYzi=zW-^{TYZ`hkF!LpiWo24kilCE$%OmEcN;uP4x>x z0)a#)X>f?d)R^ULm3=Fs-cwD8`(eXDz5;u^ANYC#iO`82^26&EAZKz6Uf=oAcXfAg z>EZ)hBG&R6PR6UB^Pha|bzteq*x4q^j}g5Ak9=TPBrLWMm|wTQN3FAf0c1PJwzmoB znf^2J7KF`o0Ld)cC1m9=4VrxzW`^zTLe2uWq3Oj(XJyCdhs(d6$mp-WacX^zGH2g{ z&7Sei`Q^8A)_gd7HY=kmcov90r&{AST2uHU;dxk*==RC6&K|YJnK*0ZvJ@`+GHJ7x zXueH5jmoct&4Qpvzn7bkYR{9Xs7p^(x(*3LxE}jY7C!2X#_gX(UqWLbyoNYbH?Apm z8OMQGf8tFlV*z`VNwTkfm$2UyfU<2W7l^zTZK#;_VYLz0c`0Ce63oWB%+(#lPGDgTK4QCk3VfN5n`p)kxLVm_SYW=b?0edMJ4%v3xem)AX!NKju z8omQp`a;m1FnASnrPXuS5>i5!cGt~+%oagm{_mWGh%v}_D}EO3b$CbA_nfbS{XD?y zzLSrhb+~gJREI+*EkSiBF{%V;`uygFhVbu;l_>+e?9*;>TJm?p`>+?gNpy9Y%I?5bP+w8Mwpf~kVZR3yg8aAn(c?rk0 z{zpRZcboS9SRZN*!bb>7Y>z|kV{h|p#ep}DKgOt@hTH?(B#-a?G#wv*A+2ohP9+f% z;f%X;{V`kuj80)Bt7i-9l`I8XB5n5%#}ZrLclkuu9ENjQWfO5Fs1c%=Xk;<8B7eT0 zW-@V$S(*IIc<`E( z{`Ok-~MK*MehB@s;dEyPf85oj#%4g;4yM^>(!5z)b!7P+p!(&c{2$Ygi z%|W@>_>GZa;B3(UW9^jZaNYLaSoTFfX**J;^9cJo8CU`J#?%On>M=^Nas zw!xf5=o53-JJ4S13i6^)@n>mCjDPgA(b71Vc*9;^bOr*fI8 zdgs3Q+7!ZYYwSXD+sY$Jfst>oOxS}+IPQ#+ZVf^~gop-}N2hZK7o;04?v5|$zi2O6 z$L0`Y4kS8)-t@P$7)&BIH9eIhSD?Y)#O&n6D@=`fz_^S9D-B3l^EcKHN^!&5a3FQ<>K~jAL14CUlOZOgtBn_pnjU08G9Q%}G3X!J)8<|2(GNWm_G zsBb6GQnsM$$ajo7lzL%9$A>EM_jN`aryP4FyX3VA%F8J!yeAIqdHV z+GXp%4lE6U1CKkt-4O~|!H0Wd-)2po*ebHdvja(^+dTCGT(Y-vkEcFrfTS=sgEu>Q?}Xi9`$j;I0u zAreEj9n_2AV(3VamcOEoPrd&|OM6~(ISs-I=?$`-X{5=E(0zkQPr3$y=EYGbfn!QO z$B%(xFbWQ%ci(PwGY`mBZ2lcO;&I4_IBO&83(GB>ubs{8GKZ57N6`6lG3WFC{^T$3 zUuBqpObM^0v(U=UQpswC=X@NTl0Vi^ov2{E&{@MS!P&@|hw?b;z0YrHxEqG#@cJwf z^`7`Nq>^~gjc9qyhqe*6@beOM0QR43A1>TF0De8qVLN#5TR_|dx+;c06hJ*BWuY3A zjh7e`7DAm_PR?yLoXxIrnjB6|`-FyL}u{ku)gDX7pO8*U4A`5F>? zaOl^^iK0BAPLxR`9I%=g1FNlF0*1C9&vL;5e2@^pz}4yfiuN7od%iK7G1L#VvL_&D zWFVuZl$N!Ah-R#yt{N6KiU9(=N?k5f;_4G|@V$Snv%#H`Xccofvy zTwYu%|4uO^HWb_^RGM{K4{HT_kX+UYJX2rE%iT4m+UB5pADd6~->|67htz1<_J`|~ zetjgO?tMCV!||jD-pVeV1%I6RJ$=k)q*G{kO` zXZBu^uvdBg`5a)YRSanh+7gFifiw+(_(hWN&HOdo#-ZZ}puMM&d9Xljn#e+F8Xx$y z9lA()+ui-k;7=^vOnB;*KuN`83uy6uCGRG%)Y)YsE(=ZNxIA|tJ`nqE7(olvg5TzS z*<#Pmi%UxZHa~N4(-_mLBvT`Vqn{bNGlTGVQUphu0~f#SQ6B5YEV>IoJ}f&$+hfHP z_e}WN>~>Dq-E$mDN?ytB-=cgm{n_I0wUX8vx{x1R7~g9}um)y34gv}0(pwuFk+_)F z?yx}T$5V1o3`W*}Zyjd=`s)euXF8_pcfUSm_Wk_WU|ozukW)@WB}yu+XJ>;q8^uI| zQbTY~f4=az=LA*f^Yo{~%;3WSC2M$3;*}Fa4sQ_cxL_v!c8ITSLJA6+W2QOGWMNPb zGa%u)emmqxb&c7@mZ#EMmQUkaz7$lG%^KY4oseu5E$G6^B~Ykb)6JTA>|k%oX}EQL zHiN)(Ao9B=O6QAP^zJ_*iK-7<`H@L{`=K>&gAiXHZuoLoHoO^4&pMFo~-A zrKutL(`f^xscYDu%mqIl^q8oQ8w5M@+_1F2XUaIf{2`;4Y9m*lqXmZiK=O5hPjOET zbdf(=>nV9YlQ)bV8Um8q2!&B$} zQ%!sF;7B6+Se?%k1{>FGCBafBe>V~FlT%fX8ibECBEcOi;AgZH?C+q@Y-Emx?`utA zKEuL3cg6@%9?0$R{FBF^sJtXN)1idLA@IYS|7n}*=yHlp7n%PdS-O~)0Cyt}DDUxh z<+m_e#b;mC^`;dbYxD5ye(pqX7(Dshe!q`T`R|yDO4^#RAy+smt3*Kk=ncm5o=4U# z?1oVh1J+TQcdY-WapckewEB?3f{&5f^4#F`v#apx>lLvb_zzU3H*W9^~I>46I9u@oBC?*2pvaXdtuM`>T1y6 zQWNZFg zYR+iiikyUWH)}#n&zUI9YtTZU3PW`5?Unvt&G)~t_&?<@MEI^fcqMdtd&+m2ZH{{u zWSPW><7KY<(6l<({L=;lQm zzlh#2`t8D!ubIO%Z;L(MxhUhYL;mfe%!uC)6`zck_!GDw;Ci<8rm@hH%rMagHM6s+ zehv1A5rPR=$)+Cn9heqW>6U$+mS)cuBkFB_X!Q z4?If=uyS9KNU-J7u0Q^_*%6;2s>!rJYTe{mXnp?$k#qF!`QL5#HR_(}zMt4#CrQR} z4udWU?eKqrn0YPF^PdC-7_)^b*PEnL=ZeqCli4_aA#RSMT7ndh5|A2VeTS(vB}FRAZ0ky9AG>O0sV z22zH=k9j?^r~~k>RD}mhw|h3--YQiRA5<)1BSqTu=AB%ispQ5gP@=V2wv_jm}tWHGh+!bd6=_Sof>^Oq4R z#!KuE{}2CFx|H<)VTzeC`m2hpM*M?eI!s_Uf;Xt_t2EzpwI-0g2Dp}S%M@k>nU|p+ zy;WYD7YPZv-XRpob|;^Uesk+bzX*S}8@GlyBe2p!uD!e@D|Dqc}@sChkv*%N8HpaKRo(Yd?96YIOo>VY6?rZ zoZopF_X#6$v~02=AL4#R25*zG{4LNW_gh;j^H$8~;D5Y0s<)*5pSTnT7lB#>}0Ug2-+lKU~z!39goUZ+2NF=NFt+zw_@iaZVI7;^sl$A z-WK_7isdi{EWZK8lCPoTrs%*jBTuV4kM-7nkIrBhEAIRsa{2M8Dz%3Zp1X5HcMg#%8F@GaObC!3di^ldAI{X*^6 z|B6anyZ!3_DeTwyuGm`1J4C>zs@4Y-^d?u`qx4m5zb8$|M=|pxUX1WEQ_W6R?K>7z zPrJYcda#WTWuWI>f13i4=pEcY>)Joq zY^vPiV+cSkH`&w5v6Z~&lzsDYio5qRf#LxgJP>NW!pAqQU@=ftaZTyMq0XaHPg@XX zSj_}aL(y*IOOW5b7L<{%A=(`x>^#C!xUFywMdCBVGo4_)1hwfZ*Q7i#KvVsV_B~3a zE(MVU3!*~8qo7-Bfk>#j&%0$i@!1pKsAgM#sin)%xiM=l;Xo+Ky`eOT zbiiBok484gYmsj$1vNV`ra-b$X-`TlxYM2ix>sN9?Axyk?P@VUh?lnoI%`xW4L^v?^A z%bvb4tjeqC`n#|GJt^9znEu7Ys|sv(Uec|M-XT z04OX-k?kpW4%yJXe{_(zILmcV;P#xj*F+E{;C|CDREA$`0B0)>lU&wG*KUV-(AsYC z0kiUs&m?B^(|~o#IiJt^&GmMosiKf$C-EqzYO%B8@>W-8*f}M0+0A6T$1V_xQg2_j z`4E)xQHK0n;mrb8H{`t>hoa0$me#z%_)cx&C#4gFG(&sl6l()0AhWr!E^`v_G^Pz* zo2`-BsrtohCrpX$JNk1unITu6NOcr_pXD#J^o-GhyipPC&>5Pkpn1dnj-+mLM{Z3w z9vKI4f9V5{&-$<=yS;+PQoF||WT%eraTDGmyVEb13E56f@%B-?%VrGbyhKjgRG?e{ zTN(WZ;%2U-IF{KFE5|W6giF=ifZtlW9!Hg`8%KD(`-iOAeiQ}*?;jf&zTM4r!qzq({sF6EleB*!@_YN__iG1TbE*Ig{662gzuf~GLR&`A5oJev4A6>4+ByWW#lxR%#hGn34nI7WbUn* zzl%ruP#w>`B?(JmuXM~<&QA_M$Z>+lmKRuj3VyLzm%S=zBEVtd&BmNiS_t&oLxI)M z&ubx*z+C9fnw$gl)vBb~k{=L#;D=+>k^@-5{Vx>|M-hyVmxgVL34*>OE^?xGm54 z`p7$m@+6Kt;qQeCL?`7}g{&$P|Is63_9}S{?}e)>7B6}dt|xJ4z9?yXcHBEn1+J$% zh;}RRa+YGIodpZz8lR7R4Cr*3KhuZ1uoQp5(>0#mB34b?b-I*)S~_FOU^!Pqq?(iuHYM*n|-LMH1Zl-_F?DcD;x?% zBL;cNC(7-_852?tDXP!#=r1_TQcSvP58&-4lkBh5f`@*vRkM=*Ta&wJBv?AZ`c-u z80NvZTn4~E&O0Y3uOP<#M?DHYa(pOlG^MQV?m*x`9_rNz37EfqatKcZFJJrGQZ4q! zktrn=H8}aKpM$@6r|Ra_na5Bn-S496{4PiYA_1>fZb)vzSA+Tvk?{59zppi)5V>JMuV~kDF;(Y`)>;bf=AezJy z9n=&JvVzi*tQ)5oAY!Mhnr#Q1tzpAD16CKK)hCeO5g-*F z+_W)InrVNkDb4ziy5$@A51<#Zv&gjX+i7kmYG4B5K5$CJ@HrNsY~6)~2TM<>xMd;E z+Ob2F*17fe3HjN~-cTi8N013u|5EGTSF8y1o80yU?zU!Gj=`Lccsz0;IvpIL9(E!Q zmCd)xAiH~%%(oLV>pgLk^LPa3EG0M>(aarSHMPZ8&GQx-l){FlJZHLF0n;wa=|ENP zK|NQ%P9Oda9;}%+M16ba)Q??DgH&(oMboqPgc9kz@{!jOG)LF?pX%*W1p!8ReHsd2%L-0QSuMXv}- zu=-oq9G;3LDNgkoTySN70vLcJKK=G!?I`FmN!gT%9z^+vYa{4^r85bSJS(L!|7|LL zgE-174iT?@(Q5?h=^Q<`=PLf+acZ3$@o5I3WpJY7!et7HkM!Osz4}~5hke)3y@k9s zkk@q8f)L=bRco)-4$Yn#Uq<0J{Q2LWr;R5p{p=o5yvy*nOa;m4?>TE}6EAhHazD6o zsYa3e78!@hf(+g$i^`KG@U0R?LqyUfsOUUi|c*WkrJ6wE6B-{JXd ziC@(1k$~}qSn8v$Jk94_nyb=&s|bqx-S}M1cz56L&+ZZAm{HaK!EWrUh*7XX<_Itv zg*twwnXG%E0ySzo(0=_o!eH`ygIV_f5mn{y1f$ivsCM1|qvLJzpjOf()$hh7B?Y%V zk5;WScPmjXYiwf%O`vw-RSdi))8j?f)?Sn|sn2zU?JSlayXnRD9hvy%?wy&Z~Ho40k$)%!&yf8WHg z{Zgj$rM$TB`u1Gk|FJ=Dy6ge%EAX(S+^dX1R8x6$E&M8LOvE=xR9ZaA=P;&ot^~RC zSr*EhjQ00Oz?ns77w!MxoT$0`eOra0Z|1kjr>^nAi5I@`_}-~On_L~UkPHI(TFztK zV9$0nRCF64#V;Rnmo##dK%YZ2R$H1#(p=8RUDUz%Y;oaOdhuA{nxl3;fF)cl_n4-i z5^sbYc9fQFxm0sYwl!y?lEh5x8)!cJc{N%IqkoVJvj_~tQuX8)JO)&C2L|Ff4^_SYifO$Pn|A1kV1^{LMu zI1U|tTB!teQcecp!0=WUNNS1jw|_hoGBaxY2m^ofk@IKXjXN)H(ld$NIGLy0t9YQX zTw2{5e6i*QxmL`0dW0f(M(Vf$n_k&OjX&8d`Ri940^5x(`Htnrrz~v*N;2cb*YIZ7 zDSgsEkqav37%@J)Rz*V;DU&AS+G`GivspDv*f7+(!aWxlamp+;erum+7a~_QUw?iU zVjCD}$SRv6ysSVYdsHq!5-*u6FCHBwx><8ed09j_WPg|eoA@@Aa-|D`x}@JS2nX$y<2mVDRt>!+bBw}`B5x0uKMxRlhnWzI!fx}Va?p>NyY;!=li z*o_d{4rtoI=y8OA8{$s+X~%ZknSaxuMaX^z7}J-0=Ub$H^RWqjBMYZlV^Ika4m5wE zte&4vz|}cDXiA{b83ZITKhAM+ztjpadG$a_=xzmFW^ByL%A< z5x%!A?LBF_ACDwHv?qvMq2i$z$|9+97lvG?p)=o@HVtxk5c{BptBToS!tBGyOu^ea^p;?aO=16ZRBrPzJy7Glzn^3uvw+Vn z!df_^=M8R_aEAP+a)z2m=xxt-q(_^H(Um>8IBCeA!@Ij>Q%9}cZ4m3*hNI;eea3O! zJO<30%f8+}qDtX9Sj-fl-5j4_$Gb?1L#6_|gv7T1W|&e&)np`$zU?_2&J?A{(r|=U zd!_pEO)yo?73L<)yQ%7pz2VD4T_7ImM@&Owt@{pRSbA_pc&89@6SJOOD&x&B?76j& z;PfY-wrn4zzU!;JhSA_jQAZVjDgBu!*A97ipGv8@_-ye5x@d&MiZz9`<%h z3)6AG+#Hn#QPu}ZnT61@hA!tnF3P|qj?4XHEm9lD90(g)>hHqEtfVQj2(xQHLKUda zL+eC(W+nE}@ zMj6M$YyF9Nc!m>l-GH{v;up`&Wq-}JN9H!UEP?tb=+u*OQ|7-GnqJyNJv?_BRpY8D zh8(k@wL-%-1f21yfwQu(C*i4-7a0rBBrz19z-79+{dz8Lr?<;bPx1Nwj@bFo$~j;L z7g@~I;dxrkqB#bbuaQp`Sx|)c;mYc&Xzu zool`@V{F|PFsi|tct%j7Zbw0jX+W&&LhZGdVEFX?2dAILB@Tz8S%(N+O^vB19gnSp zD!a0;TGfjLu*nN-3^G>=mVDW3mp|r1oxd+%gHs+Uz4H8X_+h0(oe%DLz{+#&zQo<+ zM{YWmVlQ_-Q^?V-1)gZeGay}hu~H{W^op{G^KCM`+WQT10@=C405?F$ze)TPx25}( znT2*x16OEEE^@b37{5bn?4EWoejVyxMUWH91aN~HY|cFl`WYS@u`ist%Qf?GH_WcF zagD_vuW;L3{CZSTng!q>;zc`lnV#tEse>rLa9Ud3+Xc<+QxY?;m|jxpVpZJHcYVxHnMp4r+QPy1VpXu67uLdxl6QIEbOJ+3KMp@i1= zMqI^jNUS?Kyd#*TF<4)v(Hsn*Gf{zUJ;ph?a+d#oK!SWv*OyPF{_nUrNpVV*p^O>#tA#o?AEvIe=9w>nv5_L!f~~UWb#IC5U$`;IJ*V*-C};r3 z`K9Dee*CAaJijP>9gKPa%)$RXxqQ66_khA=>u;smnETdd{Yd+CoQ zHjS?${V1>Zum%X4p*9AEEn5~$q{s_g+T$xTuD+V8XEf ze<%C3jHvm?NI6Npx6& zuwxR_Sj_T+XJ3gVuk-C*D_IcP;`QiT>`*CV z3JS*aOqiXE^$54NovEIG*YP@v#}}PGA$fvwUC$5vtH-z&Nst9q*i@OuYku*m!Ao{b z2mf>f-D$;O7WBK1@1qMj6boTVBpweDLn*E>?smYMGGX6yiRw=#(MEdk=mw8NgV&Iu zIdJhvlL$>u1ukrf8PoQM48{Secfs~g8pXxxnlt}mYq0CE8ahBANgH@T4nCenu=W?U zboOu+sP(IRne|CWPD6W-m*-w2Iu%aBp6D1XG&tw7^2;#tu@t38$3Zsedo7yuAgqKO9eB&rNuv6jy zJ9is;*)B;ojN_ivsk%;7|64jKK+0*t39v#byb^3hJ2| z(B;hT9PMWfn=;xE;KDjeuOz8{f$yCgQnI(ypQ;N zk#l8_FmKw`zVwDGch`U<8K~NIn_B>yR>|q1`5J##mih;_)+`t|Tj5Q8O=0W_Z&Vxx z0rA+Ij6WdHtjfoUQi$BY_p0ZG;FaujFYys)DH|~i>(ml~9FILj6>T_u5AtsyGCzK{ zok=%s;Ikp!`}rx$y8!m`lGJA$4UyFJ5*!1cpO$239-4BQTwJtDtY~FVOcj1o)&xFC zJzw7{5AjP(yndFL1i8uYPXIm7Hq@f0UMg}waaT*X>I3X%OHez1S6@qtH~0uxtCgV> zAMRE}LXdy!6E=UI8!;(HonaBF@mAfLFNZmB<+SA=oh$oZnVLuZ*Ch>TUH2!Ur_02S z%}+Iz+(qDbMV96b-O;0}`=PmO@QU?wc45l6NnkUc{50awO7_#WrL)^l`p4jn9<*=7 zw$R+8Z@1vl%BS$UogrDs`U#tC&K@~+%KrP!6nv{7XT-&)+~7A^|m~|wT!9>h^BuXMi7sI{5SlQi=ks8B8zC{-vuy!S+^l=ABwDd-JJ;GuMsOS zjw?d@aw2`X#i-Vs(YO`VmRLIQ2QP46aUUw4xy|p17BX28J+rzQ`FUENq{6H|^UV2v z`=`HZ|9q)!+ev-*oE7FF^N96t<&W*>I9>|H&a(YYS|)QU{)MNJq=um}{FH8m|AgUW zVGnR8uI{F(l2?mDmc)+TnJ18~(;nF#H$&@9*Jgh5fC^>)#Y2hE>tC{z4Fnt?gI_F4 zs?$C;?sT1u5INij(p(iU1>ityhHUtw{A@hsFQi31&DZu_)ajg+;rja)rwmMYY%#5# zq9&z!V&Gqd;s^gdEE>{jsNQ-oBv{sF@;py|5NhxQxzhIX*CmFeqaNW`ZhKCq3Nn72 zKQBPKsAFp+V1rcdzY918DjLMpu+GFCxzKN9#fYV)9%cg*#GFdR0+_g&Pd+;Z^BZJ;Gh%@t5$oY9F~Xv7oEHA z4+P+8M3)MQe>@3C^&2oaD6Js8H=TNqKNcON966ojSTp#9v?OQo{2d>jVA&>`8g!cr zDW9D(=ElHSHCL3~LYV9n{}yO?k^H(?LnJM)IJ6UpbGs^fRV%{fGi}XB#*0sF-OL_q z+S}eWlh=K|LKW0dka9-F-9UWPU0l*hK^hhDAw!;D_FCq2mYY??jn}&2(m3f$P8&a? z3{;4pSh0%1hW7`2H>viqFXm)MEymVr@Bcj73T-~q@~ge5H5%h1rTF25@ z?s?^$l=4;9iIUHg4?4uX55qRki0J&{i-UifVLs=d_^wfQHND@X%E-MCgtNMukh%HM45wE}@wT!xGzoNA8l>#fF--O$0LN9;I zFCSHYbM^|O>x>;Tn7U!#3(;2MTjnO8(FsF8A!ULX+)VaGROyqZEC~dW0RX2P%*G{? zU6t)FpG)QXy-E4tbfUZ7Fjm&H9+V}KUHvI239T;F7GIumm2mBP{)mdYmx0>YE$ZZV zGiIO>Foar2C)ITk#uhxAgpVX817DtsHWg^dZUMsdhP9ykR@a>hHN!PXmJRFN1J3?x zMiVb~89m(nq2r=omV$#-i%UYr`11(o)vhvmjn{ZQYz0W);@ik|PygV!gHyty1$G$j z441!L%S*Xm(2MN3R4EdB6q5oyT&~SJxQ2nx@UrbdhgI-IQ1d`+1MO7W>h$|`wf-97 zvI#ccQTQh-aa*(3fbJKWeKk^p z^jy|u-M_qz$@0~gOT^~ZjQMm_h}N}ph2QlssMdko-Ck6CJ4CyHR9 z^Pbe{iL902iUHIO7t|dmF$Qmkjv1E1-H3dhSV+cMu<<61uFxC3nB}lC6z5aS=UpOF zBGL19pYSirYZ}4kl(>4V$#t7~d!D&lM}}?#ghcMc9j#Z~zNga-rfm$TPmw?FT6Fty zVz5q(Yp4%(*=uNg7OK92o_l7Sb816M>D^pgu~vWCZ=v}c75^`3CC#AI?g9Fi^fu$b z@995LtuoFPyQp`5wQdk12$!e^9UX~Wx4zsUk#M}R%=N4{4TYh=f>e90G)>e9J- z6w`z2>Qk{RDtAKFo{U1rJJ83HbV%m7X8}u+_;3Yj1W-?)Ji<}M&{hmM%M}x7-G>U@ z___>+9sss6I%lhtByAPvlsCo(&5~0L$XVKp`7hmzht5pW5z0%?%#>^{c16f#2HiCY zy2SqQ%lH|RsN~xIRc?4-c3dR}Wlh{WH(9;BXn%Fu|K~#Dx>dWI8ttE%FO%<=uYUG= zzQjDw@FczVdWy@Tl29F=l-9LKw;Q{vcr~$Y(%goZ7hf#!#$3wccoRTg1*K}91Zfu8 zQf0(EYG;^{(1DNgFjt)V5S(UK3Zb7PzxN}u0VNi(T;k!7t;LYLB=I*ja}X_`aa&+E zfBPZw*_!}r|0c}U@a1PuSm`?2yb_bOv^QwSNLo|HL@9{KzjsxQcZ3R#O=j29;`c%h zF5^rEa~EK7YYf1qewRGI=@0+4=RENiGp&9job0#erjHXTXQ;3FEx%*9>(zT!eP^p| zL%0Kao~sr;mFUC;misNrn`{GgW`muov?a*W{I#%bHTe zarkeRH~-)}Ao3U)N)O4CJB;KQ=!%l5#Y8S)(r4ebr4|}#;0=~ZUi}@*8lMWq62|I= zlL>0Cpu^vgTu<5J>W%qrhXlXmnjKf7n!qO<%y;Vb@!pmAh0$#6dyGp?XW5@g*jZlb zIbWdTqYiwe^YIta3_Y)7fLpC+4e`{1Ei) zvB|^H;59U&Ooq7`wb~_UB^;V}jaIOS&p)i2#{o)#aQRJG*x6EZc`-Av6mCZMsChtE zef~k?+YZ%NGN-OCUv1MTK?K$&e;(9*{enx1EW)o|^g%A?Dk=L$*)I~Fm@oaIu?#q~ zD_D-5av5;Xd*;zFMk$n3Vs*W6q2>o9(t0tzlZ9AHjzNm;)?cnU+kb}cNGE1OJrsrK zd{MNMD`J>@k7?+=HZiJlGqWya{^I%s`=L?GB%-7oU~l%a9IA||jdjI8ihdQ)Quniz z9LIOz4818n!ii=DDhZ{D&nUPZ-*%eeMg$scqY~pc?0g^E4}8)McA0 z=i1y8_|By2vD-ymedh#rGXLJhk-C`-=37`w$}-^rLW`esod*l?`vN?1yp^o2;7GNL zj=Za=cz2?exH>~$bR6xe2-kq<(i>JvRTqPMInst*QvL~i2$G`tI!g1!)74e@W~Oov zdw}FHl?S^HJ5(n|ZB+c#SMvHANd8brR5cKxNJg*$se)7n3l zbk3DfVhL2q?Wi+6C2C*x%wn}Qs|0wr!@c|h)=<&i`lR~5{|lgqXP#g@9Z(o6EFw}hR21r{)!1+>TE zx5`*81bi_M&+%n=cZJ|}X#R(-^LW;&OXH~8xVgo*KM+G-{Ssc&x-*QyYgNX#2)yh= z^gYDKcR*K*;pooV$A3Jxno>zuW?#jA=}~zpP)N*1zxb=9+4_A%@?v?IrBYA0+78T- z`pOGco99J=pNs`n!R)`7o4s=JFLh&^ z|4L38&x~4TnyNlVrRF_^y@tqN0o%Cz1wx-7q;m|vfeN7iIG@F$SS&gTySnxMC?+rB z4dm8O42>R#|5#-Cxq4PM+kYs;moE9B!!j*UShVJ5N=}@fx*cSbazEp*g$(Yks0lHN zR%~;=cKMEI*ioONGqzveifKK9PlI3AfLg!g_d27Ks2CH?sq?d#e5+3R*eDlf1?|-NbjyK zDXokQ2b7^kq`nMY9e@u4LI+JaxNj)3b+WX+J$P6y6Eczx+JzDGOt})>Zyx3{{7vui zKj*-|RBg>sdR}+^Bni6yLA|d&5!ik#T$X)QCWD0|zt)tfS%8_vsZC z1KjYVr9x_*zot+Y>YXr+fAJ$+<-fg0FfoQJQr~EaKWZ?WT6PJI%qU)mSlP7K;W1r+3H2uR+nb@Lc-_Yckkt`=aZ_7wP}4# zSso4ZjnlNboy%zWBjaI1#3o-0+L-fCDdo)V5LVzkiawGUVdvc<5WlZ`F!uoWO3I2P z9QB&+$x`l@0>7JV&D{@R(4LTqz#G3c+Ss$Ahc8s|w&JhD*Yh9f1VxosD-KXyg2^zu zGIV)dOrv?2c@N9yy(a%k2={tiP1F;od2_YJ)bhT0?t-}bx!p5+;0KhbK7E0%xk-ij zC??f(TkMFB>1xr<eETQ-qj)K<~YKj{`L)t6@dfW zUKgVt=*`jIN7vl|FZ;yy#^GcvM;Re|i%~W8%V-Jw4dD40QwP>gK<5;;AGvrNe{sW% zyoo~z(4&nmLzY9FVq#2aqIdC%&_@*eXZ@9aSUSX(ZyVK>E@AT`p3Z0^EY#V8$U=&0 zKZJb?UPqe^2>x_90s6%YtVj3KpotM8+JNA}E|Y;l=MNnRKGJB4C&DU_(kqEc(1O}@X`VDdN4!0JBFziJ?n*!*8pg;$`u4gqc=w}D z@Dns`l+Jbbv~}fZ0pC_vRk8TUr)A{EN($#^&4x07b#JO`z5hPMxj17D4$Yoln8GG+ zvEW61ZoLG@6xQY_sFECLAh_#nSh@N175SNNC^!`$i-4BdP(hge)%q&X`7zrzyqkBk zdVz?VhGO-*^+w_v!Ok+EJ_~HA9$NsZPd_CyEf`r6IUv{XM^7~5f?Ois%5lgZe17iV zbvP5%)g~&#(b=ALV2ukRWOo_*#ALNiKyQg1Cr}rKRI9#b{qNM~iM_3ue8`7$TgXiN zE4G$q5^=0eeuTnqIi0T~_5RS`1iYM%FPDhD(;w}ZZhwaa{@$8slQ%csuMOa-r-4y} zmBe*C3kE*krj}fW`i#?L87P4iUR^}>7W3D1?xFPkyy5HbM>^^c@19rKSLTJ^Z1pN< zPU9BFmvE0Pciy**1OQ|5v3$&7p@kpH0U0;kB)yzB(Ut! z)j&6PQLaa4Am0W7?%UtIUu_67jl^u$6&vC-U-#89vhq)V>dbTTmwl zz#)FD1jR#uUQX{i>+QK_2m~Uo40=IL;+>~iJRW731ojw@V*N>aG^LUE zIqdQ6^5w0r^da=Z2Ui%5o!`bg?<)wNJ^E!SmU_dUqseYuf_S_po_y_1IfaH1v6NKe zP0}^~queVb&kYwcZmF8RxwR-2|4xyoM5aOO^UM*4X#FQ}^d4Tm=WBvABHR)>=L%_M z8}rc1uYkyoP?AhU4d^zlsvn4{3j-llbguJ&3d+BCp6JYNoXYB~E);g3ERK3|`pIX< zA`9fg5=w1W}ox@Muv* zdbUk{YqMInX7zEWCAf2_9{*v6VnM)_2w^DP0zTv=I?(|y!{!HK6BnMQQ26cN`Et@u zB9_|e$2+?oET`ViA$~6P6jUO4yKE8CSpR{7$!!E}@|wkOi@zIAl_B2~`WHRfL$4LY z))C4Ou-^acGP^~5#Grq8xUnFUq>c?g#hU|CBQEH&`P2h+fOH2k6;}JUoa)`Jt9JO3%Gq;=D^!Vg7r0# zcZHu_fK6$3p^Flk*xPKf!`;il2d~LDH4UMfz1NiQqfiX^n@kQllO+Uw`YR%J{rwPr zhW%{)7}fR+)-S|r4S*PE4x~JyB#{&I{ya5)_Ru1k{Xq`Q&?d}}jNc=X4a@{Zr+|`d zJpJxZ`fcas9W7)3GNdBMjQBLukB_gzWta?Ezb1XsbUv75a`&x5fiogS3u)&!Lj`2$ zmz}955YLO{{|-c4Vknre8vW5)D71oA^UI|n_%?7uyPl|W6l12U=xMuErZ6AD6&?4k zxM&-GK0XxC05tQwz_y%IIz+x=t;uIHe<+*jx(e9%({l)|;H!%kn`WPfR5a~l{3XqZ zmig~@aZ0)$Lwg1lSYvRBr(jY1EWFx-$p?3qlF>*780$nJch!&nVSgZpzV9FYKkD@* zw$8>7$vp1WjOSeVW7wgzzXrxk4twUaZ6S6Er<3Tv$CUg$vQnary{C5%e^sJG!cq7i zeSRKaB0|E6cbpHwj#gau3YPiI*Yk^eE5-?sJ>uItiZOfxqVLH3AmoGW7WKSx?P@*?ZA!sg%ks~YIzc-l*vy?e zRI*;V8zD^VbmI!RFW_{oK&;WWgOT*@+6*2~R2hv-+w6Rb*S}<1wb~LSi2Sgmdnc}N zQitGX6~aeV{>(ss98qJ4=youO4JF!0@S5RfpwnRUg~8Xe<>nh-AME0Oe&%~bUhs7w z=d7k0?7A66F$J)KvnR$E^@)df?)+S|p%PN;eDX=&peU#)c=?FO;bOwc^&4c*l^*XD zqP%zpWAX<-*4G`X_#ogo1UyH+BGaWVwn!+r_eV0ssZhs@i)QMFI$#umeC&=%n-D)J zOg5T-(6x0@ugh&w)jEztSP{X)H~X28Y3kSRh%o!P}+#>dS5Pg*vVJBHvLRlySvH(*Av znfYD=xmB46bYo&~4~kWDr2TPkVNh!qwQH z>zOP!iybWprkbm9SJqLP91#j?TTt;4NAiF<{8Nw@zU>If z04t%L`t&yF=>0|4nHVxHb{?qy2bhi}Us!`VTxWC?|I)9_X(Rq_h0}rDP%g#m-_0_K ziq}>Cr{LBD99_-FUhjWjMnJu6M~juH^sCw41N?Q_K3_H!a6|UFyU=h*@fKXMu=~i# zcM_iMA?)DSE;8)2&n^nE7IEHrq7!^&E$qU*!ZTccl1FB>GG1viw5Ik4ot9V3uZ#t^ zoU9$9zdd=0B9+O>_#^&vtgA^V#aHveMX?_)1Cgb`;paO-3i;~tVDMJijetS;56}t@ zb$@?)ij;f_0d#L~K&h3F8tZIqmIy3ehjIQM)3~mi2@S<=k8^ZFVQ#OYC^0>}i!`3Z zU|-e&$OmgrIQoscI^L4aPw8%^R>g4_sE1xPFGuq)9QGZ6dWgICKn9*pzgE(mEWEFT zepArEEb&}qJF8nno z*(ZI_6^Nq*?kEaPm=o31LVh`UL${kbJFK<8ELssG(x6x+aPkO&ezNL}zS?G*?Qc0x z*w+cKRGQE-LOIU7{);nU1W5x;^uzu5oqoUib>kQ71=FvV7w_ftnw8Mqe)PEOCzZy% zmldJ|T#5Tnad-w;{cbsh({QAL;p;4qaFMk2IySxQi3-d^u?49S&g7KO{DNklQHL(-ORbAP!$UK?}Q*oS`~c+R3L-+eMKv(-d_?&B=hXi90Iy zwk(#X0uIZrbeG>D7Ja)1v+1VX1;{sGdBG z^Rpr#)ZF^MhdTcWF(9UbXSG)B)|Qk`KrZb8LYNfR3-EKV8%tuNMM1kS(J~Ew^Z-+% z7!;%UTsW?$R}wmzzjYb7m&5Hn@q#(PQBYB#Gr<1L0|j$9=oYR6qLRQqM0r zfbZw^IP`VU@Cs&*NPkw9 z#hfzwK@P{8cT{oz97`yBri~b9SbXsy)g7#U4rNAgw8bPYd1-M}-1GJzZXJVsOHkb~ zHTzQS2FFtEW})%uTs%sd<-BYTL^mqkn{%G=D#sb=F`RDij@ zJ^|y6Pvu$v(vjjwZoZ##L=2_CGO^dO-h9EAELlu7lOad4hDxQhp*Ri6W54g%QygQ8 zceVbtpU%~kqm}Kp9b~?kv(Y$-hC-e$9`tLQn(RohPW#oUQQE+Q!`}wGa%^8aH1ar~ z%qLn8bzXJ;170>gE{KwWSspk(0TX!-ID?60*C!(XsbrNx;atxDWj`vH+^Th3Y0zIg zp|ZlMKRAdugs+0uYvAX2G5ei7{-ts*ll@L}^_#W4P-~O4hl-~Aw>#|3I+oE%bNSz+ zFzBjNbg(7t&86jQ#jV;SODZQdFHof@J4UQx+U@6hhXmIxr>=EmLk*>DBwwgFF{36sTiRh-9SdJh<<^>@~LT5sOuebToAMEdVb|h#?+GMnk!;{Mmb^c9r zjw&6of0VcQ;bn!5uzxj|0I`prJK*(X+J&|)xVtX(tn=fp5c8Ucza+=F^}pJi)2`T%Y~~q*mu)v>%(fbO)#dM{_3T*qF!< zi>@7iY#5xSc}BtY^wPjc#t-o@*9zAu^KYV$&9*pYZtG_iw)N`D>jtAh|3BV=<-MOG zfvS1?og*3#X_7~p_G|4^%n!0qUcYr-y&E{tf*+Z?i0|5Nus(N9f%`_YWOaOzrCyY! z_g81;=Brc|3pSJECR83JzGi(wQLb>z6>4vX?l?}o`Aaio+rP|XPvbdP0CD}gst+2% zXwFm1zLqJ!4~@OrM}Ex z#iFoO_V96L^(b-XfNAB3)arTU&TX=BP0H0oS-;2QJOtKbIM-W6Fy+BUH(g`xZEm84 z@@J?$J5C(pRxYl)7UQnd>%0mZH(`|WIEz%O-^wwz1{Z-q6)H|~*G_N7+F-+@iG3m?p8=2A_lzJP@ zw?;$_0Sj$aB!F8(eF(81fV+Y$cWJA$KOZ4#{V=sT1ejs-wYQS9GO3hH_ut0c(_>%f zd)OiPeArn=KK2NnCF=pcmIQ96x?^_uo2cM;jgIw6nYif4zmbaBFvm&d(9)o)cJz-? z8oL-}<0Hydn<%R$VQ#`Qh1d@2b7^weG7_jUth~efjrc>4^Br9^-mn_PR6-UB8%HRi z4P<&@yFU7~BlP%ea-8JlVsH$eX9Ti=ta7o=Z5x=@HL3d0qsLoWR)k$W?&T{KT`X0u zVBdvNY}uQtYgWh;VTXO3P9jivkl5&UVsCXJWo z0GcKku|QLA2gQHfroeHB7(oIMY37pkP^o^KsX|_%1*)_YV2&s!#po@YS6^g4a=__rBGD zT}SXGK*;$X!{l9fF>y;X&9Y+{l3zRDckZc3jmptgi}PEpEabd1iIjzu{cGZHutiF? z7z;r6hCWv;**o8UU7u**E1CIX2-QgQ*r3yg zsf3e7p9K<%=Q%IGnaHyBh_`%7y#4zEM>UHm`0d->*nO`Jo&JNVG4>{Mu6fj*&YN#| zhzvwr3GncD92ObrEZKOmx)OxAr>>``Niog8QYb6x%EG%SS3O(r{>eVq0I3TEz= zWs_gO^`CCYojM!)(oV5_on`40fAaM7dZ*v){fCPx&lDYs!wZ4w)((Def=jsz(c0?` z;Car+Y*Y^!`hW+Ae5b@o>{B3*{W7+4-|*;+Z?3Mo)i2&A+3C#~VPFh8I(H;ZLA)1} zP3@v2@ecl{egCky{UA&}*t}l-Qc~s%^8H8!e>l8q)QiBky!G>}tPfvSP=8^5w}NX( z)WH4^PHB+#Em1GJhb|eOBvbejux z|Kk&dHKaHH-swtDgR$?$;OqeZ!pAga6|b)~u|~X3{qv@Y>Z`FU_qZmcmBcy3VJ)Lu z`ShUr>G7v@hKJ9Hi+t3JBQ#uPS9Ih3d^pq}&C6vdCPXACeoVF4O%y1L*w_=Or&4W> zMCq^2W}Ik8MfhxObCiAgwYaxK@>^r|#L9o8{tsa&#Drkms!gK@z52UXw2deo+3(oq zRLCE`J{R21u?BKxMa_?xODVesbR)j!fz4^=LlOnyCb+MVlgp3;kHOTOW& zD{Fco2X%c5n8BON$jjA&o);wRpf0`fUnMAsScLshVE&z%4E$Ol3myLbuoT7SSzSh-?^OnQr2=Flh_AK*p?R{}<42nH ze&O#(cHqP#n1NwGanHg>oR4y&$mHRRC-;aSnQ7tRb*G7Jy0;ArG36UmJf9h!-#AoP z&b;~XYOtgr)RXRjFG~E~8mWs6$Q1gz^h-rt0{Vj`dCfg3vBpcujJurz z*~y}j@aacKcP~OS53Jy%rQSFM_jzLEG+oV4tg&B-jF<4sVc+S)n65?5hwo}*W^XP> zig%DnWhDIFzfv#i9$>L4$8X+Fz-~>>tMrNr~)7-NyMG5aVO5YES*kn~O{cgAeO>FGFKD|2Uvwy9;CuA*?hH^rx zKtMHoNi{};#`t@Dez;@czvcKH=f%HVmfuofTxltn(@+2=-i-JLdH7seX@q{4pr*EB z_5l1EAqj~fAs$qpys3W$>VCK8s?1jp!8xT}oxM@qS*YA;I)c-d1M9GwjMjC~ib8lf zxbe}Q=$@9p3u#$AcZU(I2+p2#2z^vRbC%^P(#xL%X^DXJ2XIWAFH4-aC@Ef(mjGTn zaE;4fG#kN643h2*#I_FmH0d1k>(U+hJ<_2c(01LxOaA@j1Fad#Jr~!d0#h?yMHc%9 z=TiH4sY#sm@3>Wd;-CyspO&3lk%1vJ+~r8`3%ZKm=5 z$Ih~u3Wq#jV`@}hXtg>nJFPyv&;jovki+_2FFV~-NMBN_r+oI{Y2=L;+NB$E8Y@p8 zOXyG6AXtUPmh3%C3AE!HzVuFKSq&TZhkhO@7MNa-`;3>zq-tW>Z5r;hi7+d32yQ$R zlo?0}PioI1@eS#uq1rIOtM#g7I3WFp=O}%jt^N38b7NA0Go9GC#kE)vcK!~z!mG{3 z!GVRx_`7Fapy=G>V47Wk;gVFh2(U?%d)caU-y_TuOWJ0Uk0cx)-mSu7!jytY?lSHu zkCB~nsb7@26id6Bd{dz}9jZIFPTn%@Y2%P5&YgOCt|+}@)o^<_9Q9!{&=>YQ=Gf;5 z01Z=q9TopyPIDq z+clx@GVN{fF`A2`uiu>O0VYs=4(vnAH4-?fOfUX(p-y)&&D{u=%=lH*%_w_5=1W!? z_4RZosD0Ujw>gtVz58sM*E3TO)?m}U>SoneL~Fe%rDj}Ac7BE1)?O8eZa%$x*2jjC z^D3Kv(tA}|9&|C$Q^vg+^FM6wgSQJ@ee)!?CLO4@-&!~>>TK(3+K-^%eqkFYrjXY$(fA6Q5Yg}r4|6u|Ee!Hb~9Itlff9*W% z)|aOwTV5?`Kv=ck4xH=mTAQ!Z+l#*5r-Jiq$E1WI(us~z_{59JUuw08>kX%VZJpl^ zGmHlRd6Y$ZYXXfWz?(d7Y&&o73|EQ~^E^}+8>!MiGW&OjztbS8lxM8}@$EssC=%dG z7U|2Y@8AdS@hJoiq*kS|f21P1QX^HTvrQV=op4Bh{B(Edl0H?d2Y zA2;(7gU+MX7#2s}{u6aGW(8+83bU;gdk;SWR+k?Q>k7o}f64G3QLJIIOB=WD>-=SrRb{EAkqLvvv< z9OeqH`@G%3^2vwIw}pxA;k-Z7*Thvg$D5>$S>H&S zL~rIsA5aSyk00lA%S$!+372Bt5;NS2=7)cdHYR`FQT~DC7Q%3e{J46eX;6Lfjj-kW zT{X%q4S~W0c9DCtLl9!4f#$8`>7lcntksUvLy7^eUaGiIuMCcPL9O%AnJqR}35Oo@ zeEFUJNof_5?`7FEc1FtJkhi%wcZzIxUC0slKp;#@;(KQhlXF7$2bA^ZwX3o8D6kM7=5@p=9XA%e~Z&bDO7L2b`z*`05PlJ9* z`(|GnPL z#aM4?Iq5^6F<@)Ww||PT@<^CuW|?27nEF ze3z6N$T#KUG=+<9XnTTBT1%T?=416rBKfeybGe$Yq{&!5uFbd!CwE7;Vv4nV@`)5&`AUI+Yx9! zfT}#0wmoK=ICt67NOa&Ok7p7mjIAH^v`G(B4>9^Io&=gEQXF9X%Y%K(HbKJQ8a+4rFkWTMqV}0eFa3Ls;N3Q@-NVt5*LkI z1IrNN(K?^NN>c^`4e%;rMoUE+de~$ZBV)3lr(dBSaWlEkz&q{Vc4)NBILQ?`Ih+VS z(^%N7B{CrGfER^FHSdDt|IiZ&*^e7PG>yj$mZTVv46mU7Xyv;VL)MN}Qrlj8O_E8T zC0_Z}9Jk}7`!CBJeD(jQBEAPbrb9#mru?nq zcii7Z?4dT4zOstF3ArWg`Rb~)_jI?3cka9^gA&bOSP70UCBC*h?yQt+G65e+<49S* zTGn?}Wn3+O9Zi*FSIvjodGqQV57(Mc6n0?8?TQHgH05e((EGt{h6;&9!n@Q=>Mo4W zSLHE#A(gHK9K?LcdwAC;d|0vIXoGLI5cXxy_-d4WN+v0+w>FUoote?h9pF5+mC=8X z>Vz+0>emk*cj$5s4rxPut&4=R!_IRnr_@S*T8A zMFEG?6Y?p-yD$8hr6zn_NJNh1knt6JS)6rJHf{x8v#MEYrcV`nOhBH_Tz@57iHb^$ z)<_?~ECbq9orvY+Vx*h$kU@iwHj!9c93lWW{#5YxV`NOY11geb8amu4bXNmxV<=3! zTVe`RG}5d9g-9(r>!bahStLJkYEi@ix8t)+DyE z2nV1ZP<D(&z9^8G|kcGgY;64gWlCLvQ4FuW{}&!s%1)&LC<^;+jMfupa&fgEZ?$ zmAx1Wb;UFe;wKY{u&bkJpn4K?5;5M?aM&dg>J{^^bjl7rva*`}8!NvD5X)NGAnZy& z0U8Ko^fH#sw#LMiYPtXe0$}X(a<*Y zHX%YWbifGOhJKnVO&zTmQtQSYP4vM-sVxrM0+~86?~1xx5`~MeP`M`U3h>xml#0uT z2rN_9?ewEJo~qb?rwc1q_=Di%hFJ=^-S%(l899da0D5$#@R_o{#|{(hctkSl0l{_t zx~J>NEg_w|E?sXRzHbClVX=`~ugY0Xg4r9urC9v=I1&ZYmqHJGa*5&v7~X0`^Ct^L zxMty`@%auVkq_hv*LrE9ZGO+>LEmA=PwnFcwY$cb!X(sBljy4C=J5#BvD=-7ZN)F| z9e28uzDPl{Tlk@90YPX&iKu}Xf4V%%u0ldxKllzZ?Mxz?>={B16Y5fGaf1DM$zowl zJP+79Or#Ix=TDCI3e7b`(h}iFcOn9I#ODV+nLw9K64Q0LKfz~RAv4?1Qq_&m3>G&HOYaB(4D<;-r5$>d$-F~Lfziqrkxw438w*b`oU zzqYZK{+ZbMxInlhth9XMF=Lr8DeR@nnJfel{7clZs+0`{MCnYO=Q711vh=?MAY_Q8gxop0RFZY&Fj?!cZFFp)F*?D4)! zi6UcJyM;ISq#}%p3e=0^lr5&ht)f;Ujd~n4XO=bnykY9bDzLfF@;JTT#86}7Do^52 zER^O$tTf)LL9+iGxMlR)7K+^=K+v;J*PlPG6h{x}dK%PT6wa-rY`J4UA z-9uimmzgI$z{uB9pmnwE*S_^W*7N6A`WomxE}u?2O$vHpusu`*4ioI(5~SuWh>`E_ z&Y+|?JoW&|BhYF73F@N}U*oVva5~U>_WoomCh_gLgv09-+jrmr7%DiQFo!F16+r!S zRlTEBwkE zN0`KT#W?4Ul)JO5{7HkBZif}%^D9@7#p&YTFAc(VKR8^aKfzH8KY1OEMde~(SiNgC zfAaX|+}AqQhZ}Wxf2)p3My=JlIO}kA<<7^SAUr91rLXE^=QQQ5zgk>Goi>`z-n}@( zGW_K`?$oz@$-nQGeB{+g8Ugn=?>wH(`P>XrP~m=A5Idc7%cee#f>iRN$_&p&KBJjJ z6%!r5&SPaB$uN+4`EjOCEvQwmEg>vsk>O%`Pk3^4p=vl|b{-_p+r9`Zz1y!EMLuxh z-4;gEI&Mf?7y*rONv~2@9-Lvap`Y3!`_Od5O}U2fESb}UFNx2{NFO|S@Z}>-?0m|@ z`<#!-9_r+hefoImFivIS?QEyJ&Ys3J@DD(Dih9oGPEl@WJ2w38_r9F|j#>-oKnWhKia(C6 zU5fIy?V;9p{bt=4@>#20u?59eU6&!%3EjK1rNwI}elCQw9*WFe6}rZNy&)tJ{k3ui z&I+SVD;1&-`lk0X5>na~K|b4U5o639N9J#FvwXN?DNVFgN$3Or$oUb6jcoVl^+Sk! z&xLFFzdiVzF3&5Q^5&py(8{(MF1=`N>;;pNSr!_*ly!%YcpX@{X8>?hP-Q0OeJA`L z069R$zX7d%{BGTIC8%thg_>;bH@*`~CeLjJYDnjNXOZi4J{=8V(BfI2=V}zIAtC+@ zc?+6zHI+jnC_GHN;}+Det{_BKNexg8aLbEcsjmaAXP^agHO^zJTb;8WL0`m)Bas%X zpN5mpDwF#l=k4aI^Pw_5LyMo1LN1v)XQ%np91u|3^qhsGx!Ypf`2qh6FB~$=WqCsm zL)*eJ0)77GOLVW2ZsY4m^=yxw!q%EQm&+Q;P!b%eO0#L6KKvRXs_$D+3tfZ#U8su_ zLbcE*(YKhgm@oO(q-VP9KD6cb(OHI61{Hc$PoXz^(6MrUV>X75!+=bcSEP9kKeO9N6nsY zRh?@?U3Xls55fqbjg{_Wf^|x_(PXMRiQ{pza@V$g;@K%HojG z&i2wEvI*EFvq9kV9S-1kE3V4yggZ??%ZE9w4JUK}4i(({N@+fIGoJoFbY7V2CJB@@ zaeiI}?SE~+v;5E!G&(};7Q^d?A`Gr5 ze-B=wi))MJ>i0#xrK{g9Zj&Jx)?Na<(g5lSxR#k|mi!nJu8tdxu|0KtPS)*d{O2kp z2uKORpl20ugt)(lH|AMsMT^-I@`3K}Cu0;lNFQiuESPWUxK_^p`RgU*z4R3*ofWtV zMC@IqNE~Z5XlyPZ=R5~5J8+gnFJ_h_9SWBdtO2)U zldr)qqFc0Y$Q&Z8TO01gI+rX8&U@WgVf4H}Kg^sk~E~oRLaX34hfv0y}0;GKtN&r{5|QXudL!Uw9D6?znOdc#uE_`L{dw^dhhal~oHZ zl`9+zOIW^}P})wlFm^-0=OgSswN~0u1rXY!{Qy>IdR#-b5i+0uDT>Lv}{Ha>L_ru$wz7U3iPl=2GQ%NtC^n%JU4^6L&V zGNJv$NtX^_-k{P2u{ktAFu&{5vm8rm0f(;by{kE>RlqoXQ>pi{^G=(QOkaN8b_)cv zC*J(o13p{=EB^pIO`ew={eJmvFJ1s{FVxxHz3MYa-dY-_x&w!ZTV*zXI)H&6pc*}- z_~hja{e(Xn%|dqr z08CmCR&23sZ%oFCLahNRDBQ^K4uw7QwZF^I7fa+@0g7#G?BiZ=#QLWOF)WegIOfdcA|38YVY4h{8-bJ%oc zsm`Zd1N-^ni3#^(h-K|3G2IZwK(3Lk-d7^5);q0gVpU&f@6Y?LpyLeIx*3if6w58s z3i`fQ_ji})>~UZ0h)uY4xa~M<$iu8^IQRg;u9Z+$pzU;le0mUBl@(=>SM%ZWokz6Z z;AcZZ$|=#_Hl^+6ibP(fA!f&DjI%cg(6lJ9S%r4KqQ+_Pf?Rz}Upe?-&p1hQwwaKoly|o| zXC$!2<1t@qcP?Y*}MOWGe|kx++7Yscdvf1!A2 zdF8aoHaF$wd~Bx^mTlQ%pPaC_^7Q4^{ULe5UMGZb!rHtmceU6-#Bfr4qN+c1^7U@= zNx!&V>THbll8o#}eq*4SIAT!}WBUqcb38i|`c?d#yu_dF?Z@rpvD>&F^g@G>ZOH+b zS|G4~q5q(`V=&2(ZCUeu?9kq0#>S(vg3}KT|D#> zQHYy|NMOTAl94k_mA3yJ5s2J3_Ilvz=t z=RSA%ZoaQEaj|qAds`$*a-ZhY2I1W=R9gh?*1Og74Jp`YVa%Lbl>0L>v92Y`9S7Gg z%D2u3u$Ehd)}Br%iI=_Km6)IfzU|8!VW>1-lc4bg{gbuo;tmkp*BBWokF{`I_M2hR zKSL(au1+FZp-yivaMOGeeNVA|xX)3g{$h=2eWG+!i2FiPIP{$^7Ul#UAC-OAStpW6 zO-h$j+{nUP$7$Y!>3DBt-{N^Ri!WM2otHp)vX=`?mk>59os1ij>t+O{1I!ZqR;NF) zauQN3aWYc%#WhGWRA;^rB``dBLg2yT%|+%M3&|CZA2>eOzYUmw>Be~E9qa)wyoOn5 zJs{HeUAw6Mkq(r|Yd>o);x>7NEoMiQo{%5~wrzGU`V$w8bC?DZe9ba}ejng~c;>Z= zPR$RXg!?eI%Bc;N(^fAM4++pWtm@r`e*K*Qr!|1N;pOTb-$x}V9PfrFb`j%zZ^5wM z@%LKvU>ZIi3Nx5-&hz&gN)w z+!%+i^1WK-w)({ZL&-sZb=hjuAp~|nZ(tLC>Fr<@Xma)r4_Ioz zH{CmsHrp>#)(`&*alXY;1^PcR2AmrAWwEG5WxI8o7Y!MIa(-f+&g+Yarn{xbfaYhw zwrywwi{I(}3GI`qd4f8IhEFHcWRgAZ4wY5Eybp3cx9q62ZyiGEG+xYL`*Q20LwqBr z{VpBhWcWg94p#B*Lp=uBy`?>!t(97ZJMwXFpU=~HQMFvVYWOH2fhUxUe~o4-rf0b` z*_>sY{9><&Law>G?)!LzR2Kd3J?YPOq8nRHPyEq6sN#f~wQ9LXbz!J)T=z zSAPlN5VZ5i6q?5NrxaE=ep4T>zgMR&OAZE$DW?&C!+zHDP}%byUrO7hT5SRJn$Jp8 zW`QHwD7T?9zAHZRJ-;|@B7_yb%X2si-1E~F*xGAX@Uc%Z7&Rql@HB7m^3oEp2#N); zskH))gqwci(-Q&csjY{E7P=F#h-)8}+>NXqd091pWTv^|CIVLW0Jt@xt=pfaVPgKm z(666A&k}>6Z46&SxauQ-%r}}h8zHo{eRx}`-6KFHjbgKI4!~=7*P>SI^7{6E3x+cP zjm-NpQ3yOg(dWC?90dO?*aIC7or$H|A77?+0U>#G?fOy+Mu9> zZ?aY43+Ng3)I=;;^d0reK<;`_fy|E*XehaJSk!vX+GycjTj%emTFVnvezSCAi(;0o zzB_ex>!noHWw*wWGpiNk%2P&7H@V$P=>s8vvXZ-@gWrdWp!*fvOTTf>F zR3CF8bB7{o19K$&6Y4M#Wzm~I{=+PIanoD00W5yIjT3W&NWKcz`kbQXRsojZ%JjK( zD{f#h`u{`Jdq*|Vz0txd0xBR1N);k1pwgsEjev?u6A+Oa5a~^NXA~3!q$tu$=)G5| zk=}c+p@$9$Eg{LweSdd-cYXiQoLTEUd+%rObJm>mk%rB?PoVR!w4@AtdRpTn9r{7e znB!wAs0^tluQ7Leu0fwItOhgjV)^v-aRao6e+VW&z4e9zFt-Rr75G*^8wWXPX7L6; z=h~6x)u@Zw@B9TpWclPq)tDcB$fZ^us(62GDJ)VAtW@@mmM|25eE|0*C0u37KuJ?? zV>p2|iZmU91>)msTn{LDO6HQ&Lq(bkl{gO}WQokp(7ywT4kGYR|Kzw`eARGsUxZX? z5A>mp8ifsVLz?XfJ-PiT^ zI+(lawx!VA_>8*eVI?Qd_%i7)HBbJ)Jw?PirP@@F23<)UI;wP`0A|q%$Z9+{oJ9F) zCXq~cVn5YaU#j>4K6?UOs~JCsOE~f`9M3R))JRB5c$VnfFB(REA#NBo>T7pP?7T2Y z%XF}};Rb<7m!QF%a>5tGTF>THGEho1SGqCQ{^m39p;^iG`H1}O5F>5@N?K-UN6W@{ z=VFdY{SS}}3JgyCCVGk@&@myJp-bWxlNA{eIiTeoae-aiV4m(LM30xk2eSta*5Ir1&ws0=gi&@B}0h0WJ`3^@-i+7{KV|5%~i8 zLK!{6O`iX_2{qywpA2haPppuPx1&^EZwZo595<2eLel!gOuc(qQV_@$gv->w~KCTJP8BKLahWCd(?mh_T6Wnm)ezRM$oi6 zPuD!bt$iGPEeTpEZAQ<)4zFcjTSCb7Ono~!+ZIYqJ4q$I&Eck3Jo*P@kiFEl$kfdO z*9>+1CyykfqSgGnMEp%biMQ7rMV-E=Gah2r!ak+D;;C;>UWz(KpGxJ^-GQ5__v!p%QV{7j!SD=eg+JAp+X8U1ZRdEax`nVHItRyvodq45Hf) z?T*7^kf>f)h_wOyl;cijC1SV$Hv3no-NwPsEuIf8Z~fe*vx);>*$Ee_cy@PRCRm@r z9q0-hO~OkPaLP5l&uYmgwf{gv=jN!2I+i26TC92lo(=nJc;gGOzD0A`_dM9>lxx6_ zjiDXE85IP)>=|fN&(LhLxcZx6RfveV8&%W!^VaRyz5jO>K>ro6_bXK3>uy3{4$bY& zjdAAU9QT8`@}tDVXFH}umJ#2~qo99u!6R{913&%14~ckc0E@h!t0SaC^7B5eKi>Q~ z@(IoXTY&C96#$P6KarVTA+zJ|n*gC3A?3(foD5f1z0C|fsCw37htY6!cntptY$E;< zgmeka?t{6GhrE4(O~QKqs8S%1D%s`w7%r>+3UqDY6JZG9C2ucscJpG%a447SyR^*7 z<<#TpTO-KA060W4KaP}#P7YAQUkiLqn1ddUf_u*k)sTG|HO`SoG=77eRh0=-KJb=P@N zgD=6P2XgizXY%7qdxd&Ik29%I&dn16tRyMV(r|U@2ej;Y{D27GAcWDr9c+fai}xL! zp|I>{nGJ*NF@hId{YA!(l6JGI!b&Ok;W(Ysrw?Z|xF4JS5Q)BVRsCmwi@J~%UF|pC zUhx|%ADLErE%$Rf7=^^_=gr_TS47g424&N4F$w!G1@^U4$=%3Ro2TT>_jTiqQ$tz! zQqnK89}}K0DEQk$(gkxNs0x1~C|&&nw0HT>5%l3HU#YK;!I;_%_MV4M%a)-6IOI^s z8cI14%jCbjHUMqVT>JcQC+?4c6h-Kbn2DYQKi%K#R>ziKa8tl@vg3At{aZq=&1*lMwC*#V|oTBB}A^DWrel<$RGYAf|#&!31*{d5zaiX&MyZ^B$|p z?bI66I&$M6Nvx{kBWvNJ8Xo{J0_^WYE%2W(pLJ#?f$Hrs-N&z!!UJVs=R-w-zkeK# zs;mC%CVZ>?(+sny-0lN8UxdEx8RCc3r?Hig%Gw9zIuFuIikF$jI6jF)3Gsl`9QvUv z2m?Ben+&fM(U8&E1-a86UO8!SGj+lZTlyG=e>@Lj_MaqQmsyz>Yymv0w`PaMGuNrX zL*07+{W+fTCvKx)nEO@@R;Vn*{ZJv+`V+LbltRTWnTsb=2OHPqmj4*Watng>WRxmS zBjxDvUiDh#bFz38Ys0tWuA&K^_dvPPEJ3NKOip1V+I<~8E!nXLq{L4ryo&2wN-s}27CtH@RqoLP$<+$Mh256 zH*DKIvA7AQjvi_s{8cFg>4-PZ)G@2TSK<?T83+zW) zj!_kVfc?8LdF9VQ5OnF#vW#gSxZwG{1huj@q+YCnN<&xpPENF;<{(A9E~blsu=t7% zQZpoZ5D_;q^mq%mSd=Y!&K3McigvN<+INSXmiG=uw2^c}Jzy~X-=yZT17nISR6#94 ze4m?SmJmpkiL+59Sb!@>Z8$)$1FvTrT_*}hMp3r{8y~+x$qEQCn%K+xYPps7z75AT{|-+LJ1b5EZ|J5 z;UJP?NGgu)y7ZNOhKUq#mZART5PbIP4X1!HVN?8VH}xFlhJGENKk9vpI#jrhB9!hv zc;Ehz&6q_eA_{GerLWBE6-po*SYm^D;|}?bKi7Ir^MAHps*rGww2mvnfk^jZLRFu& z@{#N~6yrgUe@COQrP)$W}BZ;C!}&g!7*M*-EZs{KQcb$=50BnU<`` zdf7doqu@3d}-;A)3=`ql~|4= zUcV`Zgyg3~77Zn2sR;>tLWq&nK(fL;e=(+q-yvIkig_*IMsq$NLH$_b@i%}f8GCQ% z+ck!Ho3+}0D1KuBYvfRQ@lC_T`$_2MWzvU`7JmF%0JOpFXSFT5qkV)kzE|~`Xr{h$ zOYlJ{oL_TdU@e&|pXozO{bFS?$`uM;r=R&K6)xpjbI6nw>rEELXiXz{Hn&P+S6MB? z;6@LC;nTRc$dj|0vBCI44Z0kqm}67x1*>i+GMShFjY!dxWOzyDVbJ&0QZb^2j(_?N zYG?01IrBNrbn$=bwqwVCf!@wiF@!wd)G%0ON7JGQ9uhYY8@$e{1^v z_dy&>xK3F^iIZ=!+bOwAz?SbFkAVY$$e*gnJLILd`1bAZBiN9%0BGi-)ZbeMnTNq& zbU+S*NDZNJPrOdmvOF2ck|=Fuyp5$yVK)LU*YB3YdfELb9~KKOJ}7Qt^YX(iLD(su+~Iv}KrH)s(tHzEFjs zQv7wDQR*DGOs+0sBrhW64YS;+Zev^@2(NKxBU|9}Ki8`0?;7K4Eu|84E1t=SKbtRebMd`%Ds%Z>AY+9eR|ZRV7-SbyX~m8)E{ZzD4{(kcVSWe*i zckNyxZqjG`EaE^|?8uWG7#w^6S22ToeSH2Bp|3Ddqz)ws+39{A>4w55BVB6azV(jFG3Cr0Q2v@^lort4@60VWX{C(gd@%rP>XkDz3*2NL z%Cw>VcD48CzcHR;Csx+6t%h6G8cFuKqtluu_s^YceO`sCn|&*ZMcZ~=d{?=8w_q#m zN@@vUX~0`OV4V}e^DwR6jhY-uM9Wu|Q64<59;=8Rlgdb`c5?VuC*!%i)h6fq*iUK? z8AcK~7tBCI=yeg@e!b|C7mpv_Z;?z_)pr`%_@=JXvA_h)e%kb^D!Hc89lYrii9yFe z$Yr}ZIf5ohl+TO0R8m={_f5+KU0fJWG?h(RfN#g83jX&Cg%*f&DF-YdC5L@n@Ilp| zmwpMTde#6n+=)gdd`@%CCF+1257YWJm1X*EFbX8mrwDb!eyN>dbUIeMQMvfwH6e^E99nx*v zSqeqJH>{FMAJcNGJ%J3m7B%k6CsO2YfkUdRWXHPuXKP1)hso4OgFTQhIKg~Ii@vm0 zTT4zrmJXIg`A(1LlnetWad5}zV(Xm-FauwiQ}ZmYzWS>r;K1C-=Kc1MGvxIP(Dkzy3&*{z#1_)@jlClE2x&tE=VU(3^U5%Wh7eFoiD8q6L#@sj)j zIX~>Kfj(S~syr`6X|2+~-+7JAy+MXs&wi26@A=En^N^*w6nBNrD??TWfilfkfbmiJ8QktsIqyLs?vg?? zQR6x;&iDLkb&)=&Ebtvc^Az})L70cIrFp&X*PJ}T{ZxpF3mPA1kS-td0i)C4zS^i0 zW~)s{yus(Y$UPf=x}if@Q7S;Hz3)}_pg3vLDp&c_I?8=&HYq()4=7FcW(iLv@UkV;XLE%*f+uMzTVVQ4DG#17wg~p4@gktO$|~!6we#nj4c6_wSyZU zqC*^CydH;L!@~O0SP^acGQ96rQOsDG#|8I-&Ec*G*cc zgjkl!aaY>~H6bF79#;3m-?evL7*8|ZJs)7Rm_6(%1E_xZeY#RlA|zSQsF3m>zRtKg z_lO33p|lF{b#L@j8@}&%OxqeN(y&)^`{<4U#I3%-E0Y6QpAz{*(V&QujM{#z{CLwh z8y@1Ef{1zZt^2@&kU-jUgJ4a$n#E0CbTN=qrtHFpj*s>!`q(iCF90-tBP5rO#6F>} ze${I)AQ;I$EpU7?zx>>1Y!B95wu%Bq7LGeFk!LRLt#eYaU}L#ygF@r;$TV%JUL01a z_uYCS>-5ID5oF{D4cKDFSgT8i^TtJj%Rpl4bBa^Bj)~Q4Tpuz5-dzCQOmHU~?2frU zi8r0z_n@M%{Elv`?c)fze@v0 zZzZ51(%|c=)ftRy7%?)}Q7S?r-)E?Q@si9KA?~#RD|5QPnE5zT=46qnFih|Jt|hDP zOOSz0(b5BK5#-fWvRFEWrzZdLqpPNimaIIH;fUNk7n&o8s?`q`^7f(gRypeTzcsDa zd}py=O;RjVq`Z1PI;+WMp&zbz6k1XJaj>;Qgg`4jpugXua)m;!aFzQ|cvG^Wn1-k+f( zo9{1lbWSq`*8`s?D$TuRR9Wu%6oR6Nkc(xDfXmZ*^wTp&->LzI9f(T%v}{KY^Dk#$ z2p&z63i~2Z;rqM;Ht>V1NN_u+k``{d7yc$%o zgnEo7NcMoDw#s9aWWmhr{I8d&gjo>*trzQ7&S}N=bhvJDIGny@4 z-R#>xZJN)!BNPPH%5mm@K5KfH?Bw%$=H58lZZ#7mO|aljzTS<nlcyxlrT=wB@Py*FD_S?mZ;>Yn1vl zN}9?=U$_>o=Hu1s57D!a}=!=y5J!pR2Q0Y8<`iD!CS!`OM_PIM>W{~jK;KUzK4W~l7?%pFLk zFCxaP7m^*N!4HGOV-C5-t2M&&t$G)BRt}N-P+9U6(ko`r_XIY&*#*Q5Jq!&)SvX$@ zv`n-HHJ^{l^Qg8WwTEdpgclUR8Bybml-Qx}U5NiYvtgPnc^{m-K{z^-LDoDy{(Sm9 z_4(JrsJT`uAJqN62NZ3#fX=`jy8 zrycwTP^@^q+=Ym#=kX4{?#0J=%*)GQWC^4o&bL`|GZ;I~e}=A@=1&zzXivgoKOB?x z5-W<}Cr-b~J}*g+UP1{;NM(avkS_Q+>g{8ar3@hFjG?RQib8#B>0@+i-pasB7MH{1 z}GvWvP}J?!@lS@MZu1nX@=&*#Ex5{+wh{}1^0E|E`92{JH!X}b?1Rzv#7_Y2d9qYF9_7K zqwIS`h1u$%;~fqhymsa!E*j!!`h3y%9+o!{`fqaKbt&>^=KgA3OB(U`IEE#pWe4w$!*lvMLNFxw$90zEtI(4DmGAcbx-;xf6)c)T)}z|rG~zF$NF*%N2$HUg1HFjl zfCrL?Pna~AB>83wGIpnb_zq7C{vmsC%`B@+sazR!W(cIE`>kkTN~m5XYL=$p8F4!+ zwM|myQRwEZ@Y#*pANJ!PGU~h?RRB`?T?OIQ`#R_Pd&&V`Zv*-f(1}@1nrSZD zKK}E2DiU>n^{4kyw(|SG`>dQD+IzxF5Z|Q z@R3<z9zNqVzHUaw*XE4hy^CEUGKAA_OPw{l^NZ#&UE;V;MI^OKPFV zVoQBCQ6_-`);mN_XNNzEmx1NM3pOL}96Qx)Bp(4oRRmBv-v|reuYT9??9Q))Hn#N- zB(poe4S=iouEZ!Jd|-)#b&V#!jKs681Xo>vsopOn#UCLb!Zu5ZNd4Xdp1LtOC!nYu zBecvIcRpEnTpKM}I~g;7_v!e?;NW@{-fO(eb~8oKpOXe=*dlQzLc~Z$XrT zs=C8RyfUvXA~m|;5@xhbPl5PX;!F~^EO_iz|6+y|lO{l6Ec#L2$CVY->AUy-yuhRV z*4GC=$Zfb{DBO+2UkC~hhi(epT6tUk{PjBQP2Z-h{wI=k#bv@tlKo31$8|}L`cHd~ zCmtLMTp7S{Iyc|rSwXk|N|)s9eKhYlmKPgY^-=fISjPfDqxrnqDcm*vjt^K7?TkyP zxIolhucQpE0_GYeY>-0;k9mq+xa}~;s*4EmIC#YU0818b@sDThX?fsR6I+1z!Jixb z`|#2f&nMxAvLWoW=Fk0aLtm}E&(Be1=oiQD_a-ym8j=_hyyu9s--av5eN<>Qo(P1& z0|ntnYiF=`8X872f|pGLm)<57exS{~C_DC>bs(Vw`11`eT#7Ik;t(EfRlBHklV$(d z(>8d|__Q|3nm{4>8I`E)Z>x#Emh+XSQfcL4&6QcU>o)O5QHL=Fq--iXvGi5>#$Wdm z50hw8RKKL(V0>C$fwS#AS!Q0N*0QmKts?tzb4)c_b1UyN)z8ME2y25;rApSUvW72` z3m3nVPds9Li88#FhbZSYb90hV#)msa!5+wZC7-M7Fmao!Dc-p3f;j925tE0*!{c_D z19IL1Ho@`J){s|LE!X}V*J|xd8EuHpC*i1KYOVL6mtEbTOg$jp*i1?fp&VYCR zHDH(gF}S-q!4aSF~eM?{Jca)$xMRZqM%yxVS?Fl!7(=?cfYvmVI*@ z3Y&o1+&nVn1nW8~u%FFZ`i+b=uV$(R{TrQ`XJ{~#u{$f2Y<|8&-g4U?@CAc>mo&7U zFr`^1y8VRAN;46+8ZfhK9{L9^Py+56LY?3PLmGGT{nU_hn zxgHbO=j>gSZ`f>Rn;P=fvbp5BKy_&>N<)V0jvL2Y|m{qyJhDjG?qy%*9hWls9i{A1#? z;Q_T#I5$GZ=Ubm_jOs!=Sh%j94r%yLgOfKq@NgJG*L^UTtQG#gsBd+R{^|1NZJ=NH zjoIg<_gAZPPn-j}%3LLMwGIk6YKVlZQzJalyw1Q-GxP;qmxe;I(n1HywSVGAtc0dgN{4Q)L!gA92^Z_c~{luJ~#jCJDcT4)}PR0ou;sxhE?|wGFmN1E;&`Twv)n#b2*wr_X z|5`4UA=5cvB6?X~x$H`I=1x$^ZDg*XcKq zMd2l_Vi0WnRN7r@Zl1{oF%p{wpU$Imm8~-6)Fh|hlcez|6ns4UF*s=Z>Gn0DVeVOY z6o3tu8QoDi;hE^AAL5VpO-SHHD!W&JQs?N$X@+>4W1$$54E^G7i3JPj$-APrLLRso zXQv(;*5elj0p5Ki4eLdYbMa*^qUhDZc|9z;1#d|ti0X;B-5Bt6C<+bEQw4`AKz{je z;hI;>VL;s+`pMx&v_1LuW0Yx%#Vmf4_1zr%#TS7N29bBq}dZsOdtI!>((d)--_CJ@kI<{e}%lyZG0}8CMQ|00@_V?yWU8bfb1Msq-~tkomsEzO{E0 zs&#A-;~?5DL+b$Gi})KMF-`2_0-kD22MjDHf6IE%^UZ&#=nSJhfCWCPyDNOLe)cN~ z5^hCYT1Qk6@pwlBPJ0WVWDA?z9&XoYlZtSGylsK&!l#d z^*b;zn=!Q(Su?HUZSjaFO}w)V<8c3V&28d-NBslmzfdJE83f6a8v{k(8zwHssNyZn zzcX*ve*mwFM?RPbf~T4{sZ%mALq+F1-Tye33eTXA8PCauIMX_$gH+P#^hLyLyGcZ= zV)=Uuk?0Hog@qWqmJN$FQOEu?Bvf46P3vOTng{t=3*%9??aN|O=v`JkEPFo?DlrCh z2(;nT805d#PpR5F&>aoNYV3A(NhTAm8eFUwtCg3%{~L;`≠e<_SR=R7D=(i+`Jk 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

s>w&%6?{H;56OEM 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%0Aqa=BZ;@$q3ag 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%0A#*fg{& ztJaVm6XpI5WVMrB=)u%0A`C{y?W4U=Jo&Z)(=eE&F$Xi05)1&$z%dxj&zo_t$3dn= zvCL`g#1ZSS-^*!-(7{hRWrJY)&l-c~sNc|Mgj9Qp(G$7pu^RzB{!&Mot-Ke{<%{ZA zw~@L8;o9@U2G1{GSiL#IY7q0 z3(^+rTuq#?{OaG= zGx-anWb!;KY)9bfc#Pry3(Cz3242;xo$Ve*u77_UP?B~>MYi~SQ`j`W`F|(Xe78Tj;E7qw!^gkf z9SbZs+GC}#8s5}v7m&@#o8u8QN;{xC!Q~Y3(}H^~d!_Mi@=qYG3DDjo+(u_1h(+@k zD89^@3l&FLcDwr;{iOt4Pre!WdVt5K&BEQ!7hkjywfb~dPDe}{eD`LGbDisA8ZL=6 z(?1r3f;|3|@=1dIlkn#=us<%l2TFnHLFm5Z+GiWFIH>9kDf>19mb_N2x1Hv`S3;zszYw~VH`E?GE<@NG!Z*yP!iEu=~AT1-!PwlHS1)sc{%Bn`06r;Rrs z{LSc%Umo#b;h?uQNxnn52+WB*Py3j_A9*BiNyemtPCwsOBEQqJ81*cxe%ni=kK~5Q zSIYJ`^zs|O_kZql*ZnOf$x`9ChN)e4G?GFLFR`6S&Cr~v1w@jHWQ{IudGD0+4n{Tg zUVF;y6=nLHBk(remm@ox5z=xKOGQAseH&T%4W>FGvEuu*&UN9pR@d?KfC(h8TtqJR z#T!oeQSk4Zd2ok?J|#rvwvez?{Hrjc)li12CvcW_wZ(_wQ&GU~p(w9*_!Zkj(zu5j ztzLEmZ(|y^mh2uZyI##r;d&8)f$xn|{O4z{1l`wMGqv(Hs|GA7(HtG(tb)`7t1F*) zLHKdVbGHStR$#Ul7IL6fQ^Roo-J{S0e?{r|hjY!PZ(36XjR4bnrMG7ixi_XcoTO10 zM5zc-YxEgigS(9*e3(W!pxuT9os7(QJ$69Q_LVfmLz;-xC$*mbPxNVvzG=OT`B6Zq zc$9PFbt}i*2U1MM6L}_DV;1v}{zC)PW0Gwjtb_em=NmKTXYm79Z^j5EQJD{S(vZ(W z*Ffvxt6BrljdlSTIZRIfbDgsq(1|lOSa`U)#H^}s|L>I~UF<$0?ibu1tU+#a_llfM za%W{I(3Pzp1og-awz-_wTwh=4kB1LSV^$Yi}uR#O)7d4D0MPvPytnL;I(cOJrecEWW1G_eD6;2OUaiGSZ zBcbya+-B3U^V0W)$-8g;0m51Hm8JW8)awPMFaM{O<~(YyIQT)R%7kFKoyZ1UYruZ+ zdy0zNjhU!D*g8-e=V&BU4zk0ldP;Y&8W&B~gFM&pX(iw!fhpr}ks{ucpIPO2(XY93 zLiwh=pNKFRH2r8|FDHC=Y5ryB#x-+3r5M_CkaqG>il*yMg|Ez7YWZYd40mzV1^oW& z&yWcyvr}c0v^Ozdmq>BD&&q+D_*$wC^5~h|uWK#Rz?V&=^GCLNc5m_d&!@;p9DEhI z@~Wh300|e}ad_9UBc$Vt<5C<4C1J}KjYnhLP1FvADJ;bn^t@8AAC0bfN|C}@Kw1D6 zfIlz78yxbR;ms&#QmY0HNd?lTRI$eoj-^Ve=l*whdJTBtXJq7|YlMI7UgJsN}0sa0`VucO1g5NYGN zr(hp^Od>=QcniAIyEjUV|CM1^q$nE17*(KfFaLthd&!Y9sZGGhC$+!eBM;)t`Rhv) zl!0;B&EjtWjo+E3^lr&KGi5-MKj6AW2Fsrk{fNUOhd3y&nY-?3DW}$)h-_P>fdO+qZvzBIm1@T)b78<@g2Rur(wY@hI@O{Wl63 zuXD6!4o4=A31-6bZi&=!Z$J85(%L#fltZuS#=^;@vTbN?y&k}yxfGn1W$^jtUK8xd z-uvxgQ;38QZY}xnYUC)d;KqGrdL!F`u95SzEe$VkaetH9=Mc`_yL2!53fRYI(~hSG<0z z5uuCH+1EScE8DUhyjFw_622e{z_d!R4-CBeA;2j)){`&^j_&Xr?i@d$WQReYcM$0q z*XBWp9nJR%Cip!z$aIg;<|vG?@yU-sqZwd*^>1vDTXt>4J9~k{i-!szE)!?`X|D%M zY7I&t%{?#A=HonEl*b?F*<2`?eP=`&zn%v%ms*(0_AUJ6#iaXqx%nBS80^6gG=h1V zR^wkccv9p*%UEPx7{$`S&6L-_rj)k8Bu25!eE#V370#tPDh9 zV$m(}{3ImYmC@s+u}W)gCs8ZQQ`X>0U}QfE<~eX)vXfd`Y<3m><)C*lB6G%z*aJ8| zxit9u(Z*03@dZ5unn?2lsKoxuT9Rdn{W<{+kZz=TC7hkatat;wVw9M&QrWy=xNT=* zdPum=$rKs_b}WA)TIF$_Bh7k|%P`C)ACtziIJM|&=ZpMfp@)O%aAog+e|vL!T`{0T zL5zPw$UnEqod|GcRS$0NAYoJ;3@v-L>ryp0D4E%*CJ-l4J_%yVF;aIIoI8HnRKEGS zb;~B`*l_}SqZ3}i*-s4j3Xerf2j~#bwN?yf8pV&jC0-c<7is4(=h(n`=mOkbRy1^- z!<)-B#+4~z=?bW>XIRpsa9#7wJgB~0iM${t8{^DXL7Fv)191i$J_D+6A#F-8#4cjf zHbv+>9la#M4nBdn+m!VnYHR}Icp-I=V=|)4l2-F3f2Zr;$cHV(fZhSeM*F?7mV3w_ zQlR)=jlhun`3sMNm_Obj-{5%8Bd4J`ka!ek={7Jy$bYYYDI8nPv38%EltnhncByC; zQna59cM`!9YAyE{CoiKKYwSnEKtrKZJfy5tULzWOR>Oi7tMBCN=ia`Vic6htOoR@fxNK{IUsQcnTIt% zRfYjPC!Y##I}o9)DLZ^Ez(T;J@X5&{=?#3mti~tUvkiYI$5RS?foUvJ@|1kIH@fkF{HqriS9QbFeQxDp+saenwPXb_(id^kJLZ*6#K%tiSwN*2-?&WJy}j zN%=l)k?W7w9qU`L`5~lse8-|w`TX`bCqU0nEGjma9w9@^-)}=t&zy^EZcqPn!&^a? zrud8*d240V@t2<&oaVTR&KYudWHGZ0B5X3<7-4nO!l8VPF<6{>%HrBBK|JvDf$Y^tuG1A1}o zx9KYm@xPlqYcAe8=|5fd>5x)EQjD?`cPDAXKraksV@Y^G@YuISP#t z8uwZ1xvQNEQVaHQwSbY&2&-l?NiU_hHy^lnh-{?GuhKFwPq7rlbGrTMqW zr-LUDn}~_dCC(&1i(^Q7w~g8Y17^SQKP}xubP82MtJkufJjK>=9R%}JYMIwf;D;1} zi#oU@vevVg`2+d=Cz~r(SIEe&V{|cI;XWi>N7vBLN@lFR@4ifpC0XzIC9m47N#u6{ zSqCuG+hzMGseqQd5%(@SAN40!P9PF9jX=o}w8~*MsfO%SBz1)u!JH_Gs+-bb{;wk5 zjQ_*zyb_VB#ZuOu9)I(-3Bh7#@knivWATlq_0^U; z>0k9OA~bKHA$EYw0a#RwB{tB>k1Y;8b31Sso^K{*62vSPXj)M?xVIwThk5uB4PPD0 z5U;xa-t21(9$-h+;(<}x$x&Y+P^Zj`Q3m=qR7pqEoV<99Wql#HcZcDwGZ$y{h!~tw zD(3-UlbuUz6^;_J_uRj zPZ&}fe=4+>pv`>rM1|Q%1sldk9x%qdofnQgJj_o&6WrO*A31mYi(ouGKV=+4z4%hZ zz?KH4MLp)XQ{^?#?I*1QvVM3J_~5$Oj;svn6rhZVS(G-Rt{E+UlA_7Z(@%j+&hs~a zP+1nuy$; zNp~6me!M=ZEz}?VxV>I?g%7!CVGH3C%1OhGt}deh^UxDd9IqpH~EQ{rHIr`*8-BwYw+T zID8{b@fM`MD%9k0z0~V-WsL4yfMfr5DzvJ8W-$Gp*k<1OlewBm-)_MNu+ImyA*E1h zd4~;&+)Fn-w+oBZHh8ys5+;nGqB|LsRKQLqA|uqR1wkL>r~moY;WdvD&`=;=+HQ50 z@(rO>=CF9oXJ4Gp`?*LAPJiO2qkz#9eVQ0p7k2f`ENvNU8630$Nz3oP3*1KGj@oQ{ zc#ft+-hTBq)b>8|(fsz&tT0>RPH4h*PU>*wE3N;u^L)k0{X}MLycrR2rGL#4mIS{hib)WHetJ02%_e)|BE zq6+D4=@#tP$n+-aX=h{(yL7}C!jm(^jIO~LTBQu^+&lIB@$)=-N?}}b%zT|~JX?W} zPksv9Ygam^#kx2U8R557-g3-8)_f90Cr_wr#AxCPzl=5k^e$o@2|3-wHrQiFulAnW zDm6b?mL802$Fg0YvL+4bk>rX&>_%}Lfh)UOUfKUpZ_XHs?VCak)In*ZkAx8 zPgjk%%J!)@^0&^lP*35vsS^Kc>V_jOE}}zs%e!$flI}V;0}^Q{a!jX_dJ`pj3U`^; z#!sbLhnA{u1Gv=Et)A7E?~kE92|La-*DIQhTl^;-df6i|SysD-fKX&mD?>%s2Y1%{9E}JnSa1nw{ zxaagPja+y;jKzzvbDIYeCnT8PrzZ2)yMpdrY3 z@l2iNSHJy`(Vyo>06Qd*Ta~o?BU-}j95v=Fc&7j6#VJH~1~>EVTr|%Juz_exp-jl0 zC$KUKb!`hEbZTaVI^jxw$bEiP9!mf2?GaRPiH`pYl%1&?V-+i0{~IBNAYKlcnia>z6qfdej` zktRulttUwPb^S@rWpuY1TMx0kQ2}>0SStM^59Zz^fhpUf)#lg;{sRU0eGgqE5~jzT zFQ!ZM510pm5uSur_THq$!A~~Z*G_L%AlI<325=#tGos+%G3Bkd+R7m3a=ECE_vg;Z z;q6MPuQ zjN3U6eOl6dKRhg}c;lXP2pBLoNzFmGK574&i$`#+c2B?zC0i+CZX6ISXFiu_7tV4N zt(Na>LegdS&QRMR>Sa)#D)V@%pSyOjBIN<<{Yz|!CW}(%Uf^U4BUzql+4;Z1P_`&z z0bz%#t@HPV2&m$M(}>f-;Kbbu0VC@eEiX40juOm6rmpD zKaSS9D1Wd6%~KPDKAW6XBLKB+hAKCEX?d(VV-^}u{R5zvn)u1}0 zIrp8qgUgL;FL2lEmaT*HkFT<-k%SecXe|hZda;^py5o9e^|IC1^LH|>w%=3E z)#r{Os%ItbzeW~cJCyP$JG&qj6g0!6x zxufz&i`5#tuD{Whs)8QRyO1R>*W$*$4PLqt{>Rmy-5N7i_wMq;Uni^ahYL*GaE-1R z{!#Exf?+c8@oVw6dXw!v>aQP&mmBKfBZ2~rR@|jNiKvGNL3zu!rEnW+_a${eiW!fb zqjvV0@NJ~3x4E~ZITeP?*knD4+xVo$$Qg|QN)GQbhHoFQmq9@%PDZ@O;B9QACC^Zw z8`1Aao}*>F;f}%Hun zcH6Ais&;D^iHp4$Or6KwkFF-)#i5=xK}*RTetk$yzn=(i6uo_h_^yBGRht|I4@blq zxc>K7cnst4-Gx$Aqim~xqhQAd@bGi+NWmTs)q#!cT-(}N^iKXfV+A+8DT-%d2-^Ps z<*F|noEc(SGRSnc9F(6T38G^?=mjQ#2Ogy zU}ck@P_vO8K-EUJ9gnmfr4fNFGDTQi-Dur$P|LN}T?APw*#1O&e*^xqvjg`1-qVJ& zL#M&fsl>yPoPDa>R9BLh=&fpMr8F$;XjNp8Iiudr3*KPGj;|50pHz^Ew03*#zX#lX zEq{$jmjG&T`LvI^Lh1Ama-jshXcQo8(z>HV$DPM;Z|56*hZwj@oIk93ztG|yl@t3wIAwgPzVs&x@Ag)d!ip>FqH<*uvYJ{%2fhD9Feg-) znH$OddBbwO2>8r|CrHrR95P#u54LJwj;KleWujb@?~=}vP5nSeb)DWh{vQD+7Q<umjbgSv^<&#mV?+$n{9$akicVT9c!^(zBl=tbYIvQ zANO0W=QQJ=V(%XRPejJCC=sV?H2mthwNLzxf{f@NkZKn9jw()aC>lqabyyh)xL#3d z-Zt?1!qW82tZqWPyS%*9ymkGZX*J7MqMpk(g>Q`yq9rs%r1aL8IQz|p2T@c44Y@Q+ z{BIPznQLCO-M!)X1-4Jdz9GDF?uHpXA{gP*Dbu{Ue7WE>(TBtzx&rWX4McoQJi<0Y zyM|^9cATvm43hU!dvP&MF1I@+Pdueg59PVhPo3)$nwn@B=@HR$OCl2U^*^XV>_3}_-uR( zwNv+#=$0my)J@rzR-+77BC)tCi+LH8GQDT4rM=X;CWVw>+`=KcVGw$pGEQdR^aqc!Z;X{5Ljwm z@WImRbz+3v#BgB4{@f(lB&>^jh0>cqIRW-pea>e-ls3Lt_F?v4HrQ?Darg0 z?iY=s=V5z-OW0-ie?z4PzBxPBZ~yzG1Qw;UdV5PYW&97cgB{=r(T6BUd30uN&npKr zVTQkD=ilUpZvOd9at_6)$4lhMmNxG4_K0sUOubSYK-~&Aq;Q3Vz`;fZ6EqO{e^Q9!#C(K7pi>{*=m_$R1DJ#aivcG`lv9QpOq0#p)P(31UNN z{cFUeKZizR&s@xa8tDwSkU^-1HV8dwhUU(yVO3efsl113ZcZaMNb8HwFQJ*vWX*Jf zTOnm>-?lN;N9!oZA&)y1!R`t40;ECxCk*z*?t&{<@lQ7wY06_bY}e0@w?mxa9)R9C z{B*cQV;5vnqVQbL~0f0@Q88v4tmLXJ`ZkPW(YJ=E{)^Vk0jBn#H-^IQrA42=Rlq}o zj%y+z3QPPv*6%HQ1?(e*{za(6KW-RGcUhXn#d#eQU#%~3lDhF-LhKtaUF2M2Z}=I6 zCcXoz6^x@yF!6-82-L2i%!nSG5EUn|#jEB$!NX=M{SO!+O7I`BP5ljsrj9AI6Ized zAJ&VOrHi%t8Cmy;AbLV=b{wv9FJ4{UlA67_p!z}VUPL%Yg8~N+g@x#76qS7 zx*Ua4Pizhc8+Y~vUNax3KsO6Vv+VOeuT=VV4W^9$UfNV?e$r6krmqJL+1U|PIoFgw z9NQ~bs_fSY5eHKiJML%k7OS?S6E}b;f!E#1WJLIQ`BnT6V?d1+2H6iOb_@=|8)J{* zG`$i|W!W3#Bq#6_$-i~^>%;r;;5DQ(rC7|L6s{vUr?vc+EtAQhsTSKJW_c#|E8LkQ zJp-Xmi&Jjq{o|^2pO``z(yG~qJ5OfY?(DW$+=>MaN8c5@-#^dl0jY=Li6jKQMM!7| zSh3CI<3*iFtld6!d4fSMg>(9Bwl+r%TGF1?ooc4uYk*uC*dw6mTSUqIMy?v)bG5X^ zI}A-9z7pZ`QX^RVg9~2ht6S_@e>BP4X{n!@!qCS7Qf$@t=vCp!RI}D650Bz+Y4t!2 zB@&yk??5mWG@PV78lstU-BxPMk*EcFQhegble|x`q<)`^Afj|q4V?MqZO{>TdS_Z-;l~u*c1^)7~NmgZya`N%aoeKY`mF zvfEBTlh{%;Rvp0iuaU!U(y)>zb+1P z7v!4-_lz0^r?GAk{%XHKG0Vwpo0Y!i>gbeVBDLP7wUF)*5bVthUhHtP!L}<5dl(D9 zx>85Y*5zR!`mX?>$3+JBtslrjQv2DcjC~G#op6=NwM2`r3O`TVcFPBt1DmXM#pWA` z_FFCNRAU#^e}?MY8{%02&QITiS1Jdf;mfQ5dKdo5yT-~Se0>K%CUN9QLKk?OmWOYk zSJ2==BlSGKjJi_GotQ8Ye7N`9SGvafa@wh{FS$#r=>-eiNd2Msh0KrtP@DkJUvJ^N zK`vKmb64h9OekcFG#HG{R%Pei4!5iK@$m3A2D{vX?{9JU>6U{#8HCG1Cj=i>KWLf( z@d?IW6RqtVF#sZur_et_iB6oM+D(h9t#8?-2XQ2Ni(4QNIc6Y^zPP{_xRC&i>CipL z!=aiqtBSJr`!sc~-|FM&^2StiULS`D%88;EF%xau`LNZ?JBlXuv6R{IJT=dnLKDLD ze={&dyjVT5q5B#cwzZ=I%Rw%Fpf|S70QHl>bLP5lQAqsN8i{Fs%y3HVHnh-fXxWWE zuhVnNb4lW0wYlx7frUx>zpdBu|H1nVKPe$?Oz{@H`8XjQ39AYGxaxE|&zuVS*>Q5h zdj*cglq_(nj(xD2P2av}+g!dK`bAIgAZU`{$L}9fN4Kbk83wZCMl=%9{5JiiaMfv4 z39ek=B4v!k7?9RS*R2c9sx^{7ToqUAvHgN^3fe^!K(SG9XTcT)R3dl3o8(qn?D!7J zD8LIetO^}#??2%q6qa9bYfP=Px2-@DR8ys*|Ayz0#!kadxk#k~4%tWV=sJCe%5Y&sT%~wPF1z5oq@6Dg3M;yKp@K?&snzsfW4|t-Vj>T&{&1 z&(_uFba+Rrd22JiV-bthEVOJZ6(0kdI=2QlK7zm1bb>yfM1~t}HFh3VH!&FLnLs47 zz+VDzYZr#UZWizZu=@hVQ6Fl;h*(AgH-;6X;#{cs<(OSCN964+V?pWIvoyTZ#N5*4 z;uvUo;|!6>U3bs>$J8^QQ5Bt*o7%?DvCyquxH#DJ_t3~y82)$=$?UvqbuYU6zMd*i zV$TrB`?INIS*vUQcflj$_k>S`U7j)GU@>Ve#HR!9^aBr2$bXh-k6M;HEFDUjr1S*? zB!5>Gl|mvH&1oHnXZ;pvfSvQ@&j`N;JpNGoTpe(Go3cUBX-3!Kx{<$rIQ0na@{2-x z9*{8_2(LGMrps>|X}<^09Y$WfaaXo}8w}O)NDT2wmdB(O z4nHfVQ(F?--i>Z1Mr*k(va69jc=z20Oe=-ZVxKdoe>JOb!aFXh(Ul|_-Npc!pMH5U z`W0yt`j~*zc0CxjY}?dgCW?)QsK)Okzif(}URsj=mCXvIEqlLuH zt@*fgx0a|<5}U^#@{2YhXYZ50nM}IlM~6m`o%E;Se9kXm!a5`%?)IFK zfBXC8$6Ov-=5s#_c)dUp*5_odRF{LfPp7JO9vk_J_@XDuANl`2v3nA7NWtqZmG&LF zGLiATTga5@FTQH4*0B0)J9McJ;_^Nro9cdbK`0+;`z9BOo zZsFZ1bo>24jYGW(ID(LlYazFB-957#`wm@uu6G7(d%d_c@I1Y=*ZCafl=TUYXUj*2 zzoODh0KQxxiy~3dE#Hma@9YV>P|QBw0GPJh-UFc0$KE>4T#;YsUEkrfyPPJwYW>gy zxEMw@jpNNRE7Q*Rq0!r?0>9EGT8;vK^2$NkIPOMB>-U`x=D-%Wfyc9unBkx`JXibu zHNex5ws~{yHFy6AYWXpdrvtTYl=_!Z2Tz>b@Bl9-5QuBEwv%$yA3;)$#0BW<{+sK4 zBdAFMF{?Y@v!A~r@`JQ)gxC#7*`&HUZ^72!C&>4Z;WYTqMOg!wu($e^`-26a2$iSE zl;IZ*ssuTYiW*yKFGBlVNM!67>Zo8D%TEelR2h@qv43RS*=9g`i(jgP>4WmIfJ+IR zS+KMqW7-`g`%_4$20SULPn#*nNn>2={eOE~jXb5GU>gCWSpwfmR-GcxfCxp~UwkFd zCtO;^G~?}Egx=m_e15137@=IpzQY#g{4JtgvVrZu;GXUZv;*|@Vb*T*=@JI49W!g{ zj;XKPy@Axq;Qvz9IQrsnDZdH1B3YT(1nQ9!^@SlcPGy%bf4H86irQP;>z3{)lWsu_SslT`ry?@ii?e*fHi|Gi;zG0qR9@BDD4H6DVC1lU=$5jmO5e%7c=D^ zCh9p8Fx?LpA0hFjQ_>@)r|d{m-LuA;Mle0o`wXSo&#pq+w{h6-VpJ#e^QRaCK`e3X z%H!*wj`%;RaYrSP(0(#Gz`i|s8upYh>*)Qp5%mYja?pt*m7+Kykfb?dLov~ec}_g# zbqFbkmNx6cYsE*{;`LMLV+X(vZ-kC#@*T4SkaaNL-yQFj#WOJCQfy>eo!fy#A#4wI zfyb-Vzi)XGaWoOR?&ocZe-@!66Yg`LMZN8ozDLjM< z;$C`XCePqdB%@JJi1NH(ST9_4UY+Aj+R^O}rS=V|^2CWSJ|?K24ptrg(vQx|7n(Pk z%hL8<=8^mI-d!hR1|gF$0Zg9>Z2*1*uFC)+^`&n+QQFr(UFcH$5hOsg9)Mf*2)%s? ztw*3L{{PU$(94-*Edk1N=U&Z(BXT}lM7?(^^0O0WT5UwGjK`iBX12uxt zoW_^0DsJ1&JbVs~O+0mgLJs>$Tll;09J0&DK93E&7DR*@w4Wi054>g8RnW$Hu9h*E zYW7+;p*~zb8zgBHsv-}%2{~jIb1?DjmLE!|@ap(h0Di=1@prLpr}?S4y2RbZS4)R* zfX)=xiFrYSmU49~yh(oj0D42l+xP{7yLW3&yQZw$sC_N#Qs zUmN|~NY6kq2eq$IMbWXIaz)((2(OQ1>HG6|c>m)j`u< zt9P-Gm%}8wcMKYfsyW%7eVKqO-ot683eEs?M}C?^{%J?-9tI4Y8(Tj%i7J+zqWExV zfiQ$cxsu8aZLY_PpNBVY|5~A)5a5l;*>HaL^>4&hOyk8woK5F~v1zm6l`#Wu_vzn3 z?&*KqgBq9|Sa6Kg9@9C_eO7NM#*Tts+IDXWiDm_o5{bfRKI*mdApS3 zF>~l2C8Ny`=y*f&>)!~BD;M03nX!pm_b>`hL-bd>{JGwg4*T9{9^=(R=rb;U*-SYi z_+aI|xmx0YP=jZ_?+Q!>L#e?T>h{USa&GkKG2LO4)&^--De^jCV zm)dyf0-dxB>^KD5SK#G3swi}#xN!Z+_5qOgvAn3?Xco74G?)JlW8v2UZH8#SK{Lid^RH= z9is6))<*CO>In9E!<3m74d}z2xc?uw9%739bb58pRH{MD9;Dz5E z?6=#if3>wj=}1XSZ|?fc@I=V|Cj|X8g2>LV3$tiyR3+?YC}B?4j*m=RWmP+~hDg0t z&+-o`sa2(9(J2AZx%mEM(S68o3?Jmuw5SAjDo0)W|BfnAcy&j$fA#At8$u~?gc+N^ zs4o^;f%={k5QH=p<&PlWHZ+5@A#6)MLsfU2iq?R_*J$aaAzpwm&H()GQTDtjpK-;} z75pxR-!j@nKD`i1gDmQeN`SUdXu7Q~*U6ixvLJRBy5W6aAaM7pS&r)cR+`Jcd7O4O zeBqII!!WKG94wcZC&UXtzavE+iJqh0@Yg}>t`(<@wIMI)4}sbb1VX&l82nQ;6&bTa z$t|ikKt5mysc*p=g{%oU9O)TL7SZk8MP@j)?O$uV8{ebP50O5XlJ}muFR^g`c*kqy zvb$a6nl)$gr;iZQ2-v}XBK|^4+HDeTSNz=TpZQEi1I!N=0+vNY0|gRyrWEY|cp}ek z+TWsku8rXby=70!Jaj{L-ibnQ)1k5V1o}mYqLW~MyvcZ`4Qa5tI@ujpP4D9s6QS-O ze-^&r1TOH5Oy+OuPV@iZ$|(q1C>rU+TcpIuh@5o5;Mm>V`YUaZ|W{(xqB&h-A>QzgOmkH1~^Y3N%!11SY7mdGO|JL`u844&1Mrgv%%9zK^pD#C3^A7QjO@JLGe>>@}>OWzrWo#=dQoXGZ&~Ih&&v`&>j)!WZ{&HzcSNS1$$19 z-8^OGS&UUosILbe1|B)YZr;H=`}D>Gz3tGlHC(l`Y2y}?(1C$jh=SfX<#=);_w2j% z$gXyU6CqzUP>hjiaSOWvbi}W=Lj52t^;m#7nZsD^a)&(&ZH;}9aavJ}-Nok*b$h#j z@O>G^6UeU%;Y~<+&t|;^kB3X1ea;dgpC^cY>|BIepw;S&Cfu~ky_8q}w6m4dtG~a# zPi0**7Qv6ECXdGtmM7_3a&k|y5qV_1Kx}B~@n;y!qx%P{}M1j>zK7n5( z%;bJn(FMHYyNI~J6RL4+u^gybp8hOpPA)x&>`HG)p_-$So-nB153LUXLx*``&}Ljz zZU6%F`Y_R~SnmY*!R;w}zO_uF&1D}?3&(2@+h zVq>32kV>}}=py(>OfytIVOpbc_M|n1Sf!)0`Mg?mG*h0fryi6X+*O?LuN|VYU{_iaS&b+uHLFh&`6e#Hv`D3$%OT?{W z_>Bwm@jE5P&g|B%pHd;MP^s104YfC&XCdIzT^N?01q~y)sO@r@3fzQk%fp_f2}Hqm z3Vtq;ODf_fPjz5`eoH3nA1BXaP26v4o0a9xi7}{uzn}dZu9MMiSYHs)HGXs#LoLwEgZP$c`_p|pI8>btb(;;QU=3eaK7#0!=8Viqy@%_tlF8kKHewFNR$wrBdL zA6X-D=*KrXUc9Oxbd1g19n5USTdtP-^u6`<1kF8dc6}1eW|*R%h)4N6ThsO>Jic=H zYke8BWpQiiTB=;Mw0yM`aH@Xt+Y4lxj4dp_LKK=q)1TB)Z#4&g+(1z~Rz)pT41Ts_ zu{H}hb^gCQ@QXEk2L1J3y2=qjd-JtLf+nlRv;AW4l}!6ZMdL`L*r~B+53?gvB`R1# z`>h{$EZjz2=`80w`KqpP_UlGjpe5$w)5+v*s)ZWF*yGrjh$b1iae2M9u+zzIYLKbT zpZqm}hn%C_?Q4+F-`6{qSnbItL{m9$OtT_{l|k2YIyL=P49NUY#^!DIEGT4GDUa|+ z${3VxnUN@jx^;}VGR1INrN&oNo$rZ~8?sFpN*9G|zqYOz%PGqC*GvbviPqb<54m3d z6ND6Y_|8SDr^Wp<{}{>%I2e^Mr$jPMYLnljE$ z4(i5lg>lgd7SPDMe(K4h-Aey-LEhpj5Ih(_ragllWlQ@0xnYqT_>JbdYp2c`HA6-> zBZH&-*F=1MiEE=Klp4;$-uYZnIm&O^HkrmqDuA!$vRB74zwk+S5eHfqtp-e_i6otd zn!~~jCFNVmNj%EScG}|#er=kMFlbym>1Mzy@*Qhwk1b@M}cPW^ua)+;Vivu#$sUS#F|(M3mG;bb14MzxQCn zdr=Hal^LD7Mv*kHFlqRY=RLdvFLk|s&?6U+HsjazO|x;6IK(iTN3LL1#WI!t4ThA} z`PJ@XUJ+jzq6<;LqdxM;=b$ZknOJ`=)vkRS*b-J&t(X_g5SK_$aA5nlCTYZ5&8f| z*4jL{cV&qz=JO@3v|Bc)hM!U8_(6=@+C`pZ)kCrfxYkl@C(0}$Y;8MO$V6aR6BgfQlpt!B% zB_0AQs$5KS8E4%)0@p}>q7%I_xQx?E`S7M##QJPpLE$Du&Ff>Yp5eH?UA}%ZdsKrZ zWs)E^hgtlvx>;_h(vXY4W!U{MQ)FFV6`F$R(;(3!)*0@RRC^fn1SVRD;6WqTT&>;_ zQd%r+hRdN^m8gMiGX%jrZy~_gY>yh(U@^vE+uR$w05DF#nfl;MI*&Y`rmT>u+-snw zxODL*`n_M3(oyc_+{M~y{tC9k*jVPLH28BHRVbrk&Hi<=fi&1n`Syj&%u3g1tq1?A zM5{C}hg*-GJ{8(1*P0#4U5VtaxkEQsYL^CGzNGy?InW72Ra;TbH>`4=oJ6E0Q>C+G zQNO?|PNX3=1ir!N>aSOGoj0*7Cp2brQg1t^$SE>&J=ETd=-*0OkZRi>f$-t!S@Y$@i)aZNCD#B&M!3s zv?*B4vI58`NI_AjoYt6y5jJGiSA+xVqkS;bCHZqx6(+Y^*+GkObFFZXQKvRHt)!;J zmH@n$CrR?Nu&ve=N(0~Dr2IGjGCOmpJq_!DWs148!waD{Di8X!)1bkk#BVQC`@Br^ z_($%iOQ{KKrCZxhkuNuSIp$X#HY)Ai{rqqP$|Uwf?%Z|Ve7z7gJ5=ed>HA(0b@qFi zdICa+WnORMVSDOQ&;=QQnSY_SURW0EYm|Zv8LsySU=F+0D?CbB9H+Op)`8TE=LgDg zB0Z5l?{6I!*AfXjf4~Q>9|E7#??5POA2}av>*UoJF@d6EA*FXs--s*h9rZ&2EE?S3 zOHj~z-ykA$-a8ffBOL4<{~$;ec0ns3mW-9NR~{7urW=p&t469mC6mtaIN4 zgX+{e+;@8|0loeW-6a-Z{bvzk@>xJcrz8Z!;bFuXMVp;a)MV5j@Hc4v6NJ@jQn8Pf z0$aUf^B9|F8vs8*z`sW!A0Zk)7dzSxsQ(k~_8f3DN?&<^d7}%5mPUWCTpWJikM$$c zVh)oQTI7g>NzN5db}eU%1o8*&(M?q3Jx!FAf~ts<{hL7GnUirwTKk>Pbk6y(2T`UuM2zs_X7}#aV41ICKtoqv@_`&rWeiop=1am z7aRAhJRYGfbQ_04p;cnUe z3*gdsiuRyo-ccHw#9O9>Ry%1V!t$_Fi}?b1FlRb8yE|a`y|50*fVS|+3c-&M*OvC~ znNv<;DMIe+ZgdgQ#@O&3uAJ#Q`1Adsg-3WANa_XZby_=gmZ7LkAeo;us2ZWgRF&t_ z&Z6bI%z@i^>5pDWU0Aj}mD(rIAN^dnkR7S@dXLa1^Bp7M2HJLA8-#zuhGK-a$<|!4 znu80;2Q%O+qZv_kgU(K5Hu(S$HV@p)yibW!U&1WCy({_UyRUlZ;^}(lc7Y1SB86Sr zgYpM~G>I1}-DQHxlimD3Q9Fxk#DlJCs8Ys8@URX zf-YZ)=B4vDvk~Qe!a5*mKoE`u2;qGpVto$=2ZG6&yX*rc3Puih)so}CTz$06?#W5l zvPIvR?>S7)RnTfqN^MS}y>nmr@(eGyZ@)Qo$Z)7EM_h_75HlyV377YylTQK@2KJWGsh&GjFdeb!PJGvj^o0*NGN|G<#Se_&zWGBF2v`WnDh z9b{JB3-9j7Tr&kwCz1Mn&pDv1J9SlFnr-X!G%`!@AllOLX+AK z)rg*y2MRoU>RY`INU23m1;%C2CTo>Me#}N@621d!X1_8Wdj7cW`A7;3MvzUzLy@IG zMp7cw6rKKLwszU}F(U=C>IVhclQ)K;&QEB#8a@^$l9fjE14sD_;zA>p;R~Cp^$k1p zvDO)Qx4EE@t%aTY8*S!9>So?AsI4;zql>kB&o|Mz)Hg4vmH*Awf9=06cS-a6w9@G3 zRi3T7MP4;OLYpnHH25!uK5G2rWuU4!0@YV*LrFLPV((jSEE4}ZR3GHfeiyQ~lY_3H zzCe@cUA)jb@Nf}g7e7314BLRTK_Rfqu~1PX+V}g1TDNx7>a&K!ip7ubeqw-DvtYmV zdAzY2sKE~SSaUTm^NbeeGZsg@kd%gfpjw4>KC~hh1`#BQXH_R*a#XkG!>BC-#JVs} z7TmsJik?J|<1%ua1N@?xA@cpYLNAy*Jw=Y8!!uhM+A_I!2ZyFmr`2M%d%jLgBbexG_MTg#jC8+1JG=Gq z@N=(v?y1T18=ubS`-#uw>miHP={|EDSveGmtYq(>-Xv+9u!!a(^cVmXLP3KZe~8L} zRm%tYD|Ov1U;%}9inOoCE)aPNZ9lfOMNL~;eXUZRDj4|kty}6Uaro`4JNr2EmOJ5o z#++=-Su&0uU!_|B^bUS>9Fnt&VVilb92V@OuZ% zAZ@kjsEhYZW}5cEOH>DW^D-jlM!~9;Ue}HW&u0^C74gmW+kU(^w(mZ?Y{&pU^{pW? z{|ok^k)=v#FKKD)ucI`)F2Pfla*;Mex%(+LW2o`#Q*G|GCu`B>J`YwLm9#?hZsVj| z#3*)yh)xGhk58f(kKERzzT4@>DF{Bdo4*s)w`;6#_S8+5sH+9_oMelC15OJOLY~BNi$P`KPFowlK=xEnhAY8zekH+o1W9}xGzhX z6%@fC%f-S67Doyt@OgXO>@koIvze?|zkP6;aT=|Wim2!{f&R7_Uy?U-hNqzvqFGNK zxNOB4T@h2kP=6ed*Q-PcueD+K&D2Mu2tiirog7Hj;qf~L2@Ka7?u0fbAUxRD83gDn zITH{v3^EgFhtJ|QV?z+d-LEQ*AZu;9#wg&dK4yur3eRSNTia_<}NCBBP*)(p_n0n&yk(&WWe435iWgT zO`u*Z^FL_ZejVFM)vt1^V}Q>f(<<39d1CJ(Dm%@7;=T#AHVG@?HK*h5LgS0`%K{ti z!||v1$v=bVW#%{U>~_N0l8^jKTvs&6b`K-N`E82_iHa9D63iTB!FOy_kB!H%V-;h~ zZ#>K(B9_qmqqH2&!+A#uniSdo`X%@M5}X;z8qO}*dG1>zF#cA-@%$yqJl19H?XY)y zsft!k3iA3!b;B+o+`U+p6L5EMCx7^9IlO}`C5u>94fcNle&-B7+5nmT^`;F3W}6YT zHGLmhqzv;t=JsIe1}}w#W^7znsf|7+GO*3|0jBe?BmO<)%_Hh@;D!pa5nuYEu9amnB}ahuN|>$DF7#J$~4mT(-t z?t_ckBmNE-fi0`%h{ax>#$MGl;YOLP z-Dcyu--cY&o-Mu=_A*?{HZBZ06$4#AAzvE=3UItWe(A`Ik$6aXi zP5E?Y9uDXH2-!xkcFa1ij6U_3oUVok4&A&ta&${)2q+>5N#pHZx6Wj4n%*BUzRD9W zAhc_xdw=ea(9MmYm*&|IjTzEgkO3W}hHc32vSA8T(Oummw=L<)N8t z;{#IJCxhZ@lcUFs80!jvr)T(>!<9G-b|kAiiZku z{}kTtgPLppMZbaz0NdAz0*6xPtqHc)~JJl%Myy z@5NB^u+bGrbCbX`eo87u{SK5&b-BTgIUS|A&3>uz&Zn?(ikG=br=kN8|B=Sie4*&ymPQ; zlc}}iR81Nfyh_m|Vq|%-W`~#M@woR#Dw4PXs%!u5Lbic;dsO2p`K(Rv>vZ_cyTxqE z9Nu!kMsOTE%Xl`3(JXvq(#J#h>=hPUpO?m=WHeHw!8G?7WxB%q)pq065&c zJ6L8%(y~7DjAfk{eDqoCd{u)WEg>wIwDxq)J zN5*Uqt+*Z$10r3!b@*lN%;>u+_~tRxeaEJ9y#=KKgZfy+#xC{7AB^h~Ub73=*_9TZ zYr*AqrWBJpfNxlWJ%qsJv^HTKgfFT@^mGqj=@JXS9$PJ&V|g8)UVG+8<5Ao16YhbJVQ=lD3$ z%bsao-?UCN>X@K97WIDUNzmw>O~k^qnl%MM-!B}@pGiOmw4Fm;w?Xk1 zdgDXE6ua3ti!Q=`zG#Mb)1NDb;q+euBJs3KSlok~C$>DN(h3G1E_FC9Y_yUn5 z$A<2Uh3M$G=>H&CJiW(W^|oJ2njn@0AB3mig>EFY=E0z)vC4f$lMZK3?w(I%|r>xg-m?X zJ2!)F!4(M8mG2)DKmW2I(LNLN(zJX=mpaY~;7l98P6Z_>@7Q#no(QpRjoW zcW<DFL^lKys=ub z=3?4i4F_(}zZUr+eioaud1#M#m^KLrgWbtnKgn1;c1=|Dl2;Mdnu|PaS>GJKf1*33 zTi$<10P8^YlM z;ZP3EwMQ6E7ct@Mg&g0SlK*B+J))d$csM6JtOak5kvBsq0CSrf((g;mo(xRjB(Hx< zIVHtZ3^3m(K3Rtq3f`6FD{o2M!;`A>Sy0rT(nft0gVqv(&Y~+Ua;M!TONbhJ0JJ4^ za?;s44tAgBzb}P9yz}G8e?B`Y+1GXP$(sc9=iDy= z{7L0W!G9NU8h+IdP0?e^C3Xx2!;#-!Dj@UmovwT zze4vGO?96GP(Pwx?*aatC^RziB--14_8(I;8H9DVm&(~yL72Zy&MeanRBMR=@y7W% zZM9X_CNF2J<(4Ir$lu7`a1XWciVs5}(_e+KJ@VBQkO+&IK#ZvR1=hSpPkt{q-B{ zHK_H)w)GE!IuQ{)gX?qC#j)4(5{5>-)8WN@DtL&%c`vc z&!>DKi!~44hTY92Cf|Af-gM@<^^pcHG#9(^@dmiM5}hIz`4&t2%>rL{Wm;~A;uhE| ztuic*OjT4js#DYO4NZ3@Al7QtTGMHZvnqck`^univ*_asu~5FL;`S#0S>{=K)*cpK zC3@?&ZzCFKjQwT_ct}U4yk!9fz&#q*m4$)2J>8l3S|;XOcfYSjtmWnx#+n97^rb0B zR+SG2+av^Fg|bBm_nk<8e1R&NxoqbNMQiBAWJq)ZxJ&Q|YtL|Q?S5xfPFgU{hSiT) zVm%>T^`TtM(3is=b6KM|2cYCBSdM?;mm+HHWy)FNnt8?JE_e$8~2*?90@@oPqzsIeX@BM5m*y!8!3n6k~LcKH)mta|b0&AE7 zsq+NreM6zd zPdoDAv)rQDtzBxHb)ISk*h>k1FFD~c-A$AD9h|l2?qSRNV#`~yNO11{1Ir(?Hn>cB zjelg&%wQME3s(1&>U-kzbD_Uj#`G5w`#7E`$nd5s^^OOa4l!XuD~Y_TO9+ir0Wc>7 z(kO;TOsR7+y>@t*1E!9K_PSxz5I45qGe0YAR&@Ny|Vqumk39wgiS?9ofL!(9$gDCVcz2?oF;7wEmy} zlo5V1ut-83&B-kABh9TO!PeCx}&K?Tg%0K=|@?V+NB!a$L$? zq4^K=kt}9h6ET##i=T3yVM*ne+Zy%n6`Ll^bws_E2J=uO!JjYe)m(?xrjg7B&{K`O z1fQ0Vd}$)yzMqeT+FIWXZ$=N_KZDn^_TIe4sY*Ivy#hSF<3^DDOr44H{V36IKQSqN z(<@Z85Q`)WPeiW_mh+gY$xx2#2R(4e+J2b5)p-3vnr*AZ?M(A8d>)%b20l>l-To~G zyhvELx_et$$l36T)8C3WLG6e^g&eOw?vaYv#CeZLN;7CKS`waj-@>u{cXOm5R|)#j z3+f1K+m%_kC6QbYAs$NjXD?d7UX^MzC0@B`UKy3d!(wH1wvNyKS^Z7f=iK>$0LKGA z)-x?s<(Y1Dg^I<+cLo#lO=S8hzs>16b-w?B<91lBVKj;g43u|Txj>`?W{_>_=g1?GUtNMx-Y!LX8tH4brSS0W|HSbuK{EpN{T=uKzMj*HsZ-d-RXBL{ z@vauM0xa%vx^7#x-Nph0Yzh+kHoYhqU$Pz=jIP`nzbMb!nel|N*)A;_n{j>!Spw#F za$U!i+|W3c3Ki&QMep_--;ZVkkKMDT-))i zh@>e>cb80fT@2jllN%DtscGF)Bn;Xw{f5VcR+r{|qULDZ<-hvjeq0p>5dg5)P?4{! z;WllEkC{#eH3RgJM>psbqbMSwmH^(CKeZDh^rj2`lYKShniSWe=ooaX(etE zjE{IQypmT1AE(!25iM`To56L2j;gW$1#F~uHT?;=HvpF&I2nMOrMq5gZrTUO%nByk z#-Z=p*U#Z2t3rvlG}?bbxAK5^+$5}Z`1~*U7piZd9zE;bB)_q;3U|2}B&_If1IU|R zt-?$|2D=+^esow_lHE||Bdx?E%XJ-X{m zwt(Qv1Zeb7f5?hpcM)mImYNY>Fvdt|KDuUM=!+A)PxoyTmh1Cc6*jdv4z+mgDW97h zjWV^=ULrJ~)eg;)2nlD+r;xe0_o@#L%elP6o|xQkgn3 zO|diO`T=bS0`8v{GR3oW<_vG^{SzV}c{WQ7`rz6i2>(#{@_X#Il1>WyLXkH>~j<&)f_%1oF# zKZB=aF$#|d2mCZI^>2BUo~yskS8rfe=D>b{!6)(3Af;0_H&!Ng&Xh75eC`i}g!U%-esF zI4@ML+DoCDY!9!4>6Hcgpz_C%`P4@*a`oQ675MHhl8Ly9+dM_egKBlN;lT&M!?tmS zvi9cr&fh3=llX&^n$}I?&V^>~K!@AE+UB|r;jl^JyNhz_*f{n<34Wug>mVU+6-$!3 z{sq`p@EY#oKhSyC^l23yoS^_`gS7kQnof&ck0h%A%oPn!P)=|w(<6I#d!X4Z=ak-i zG>RyAmzv^ZLaNiVf@T-#PoJApmhiB;Ae3_MTa0GquI7;QK9*>UU2AhS@!O5=i_uIw z0ZGKpu(K2w_n_Vxd_ed0a$p1JWJio%)t`YJk&V1#xDXL=MW4B~)$I#oXGq`j>Ef@b z+H~R%^R5Zft<2s$BS_4i`Qs0Qv0BK{`6hMFB#(FS&3n?2#qwI^)%fLIo@4@3V#+rh z!W)7y5qL^Xp7XT$!aJ{V2$d^cx@ptP%?~G=|5&P-12}S4L~b?nc@3*~9+9wR(A0x% zV-1mi>n>UL7Jlh)1)fd%`UuIS7Rb#^M@^;B>AWWw4qWoqZl(RH<{*Pva2oK?O(Fm5 z*f45RSzDI5Y`KF!bi*=UpNrP~7UJ?~xS6xD@X z0cpQuuWo=3PUF$7Uh~M!qk%d3ID~S2QjrP9^1=L@+sKKH_?MNt*pK@q51djKve6y zTLQjnzAuKAmo2x+FYULN2V(V0{9iW`f=D|eL_`LL0pTN*eS7H1v$jni!)NjrB%Ikm zpGLIjUBs6wd<#Z8S1W`IXe!X?xEk!4x>@e|JO?^nPCKT=&+JS5q|%8%?QNM6#Lq$o zXmRj^OHq$c7j>oHUj0$jd~eg~&k<~1!jm}OyeDVmbs+Ne9w(HuOD)E|3f$a;bq%r^ z8ixV1JY+y??!C9igt!v8qzh3@*{<9(UQO94A3gGfRE9)|FSG*{B9h-cn_q0p2^g(; zO}E2d4Myzad#PR#29p7+_e|bu7$=sq#Xy2}zhI6FNAdZ360doOptP2vK}E&pa$W}T zH@L(f0g$-K=8IfvaUZr-Ddiz$cdjl)(;YBII``5Vgfk31*2+7u<~L#~kwDtu0OJ9qvcMUbB6L-dI-Xe6Z}>VpOJ| zYP*Jk=S9D4ikZ}piHm*r;PwjA?_e1*RA>+xh4Kd?E(N?r{RBgiIww%9GLyM?ISn|<#OLnxVSumqJ{8UZW3`R@iv$$rn7w)(uj!4; zB>#&Nm;oG!3@1m^o8jq~ne}q-Uh7N;e~%xNn&(wy!1m7RjGh6}Yi^U)9m#SG@pD`Cubi=urVN;xb+R!_3im6bH zS4O=+=&Vwku)U-xYp$k0_AC(~Hp)VCTR{1|Th;||N?uFyts;nHOCqPMcJ#r*pKKqU z(MTbAjq`!zb&bzq+|>%k`w4xZ3bpYIp2;Ix3!A8%XP$m=Zq7&At4`H$UL3r3L){hX zSv9N~3fkei57CO*5FXcpH>EAs6z3u@c#fdU)$SWXmkA1&;+}!> zUm*)ZQh!NO{(3GILFt}>$zZ$*E_)N6{IQ=f$w~|-mJ&R`+d4YqfT1Z*8(R257r zg92h=Xzo1t{cl-H-Y0euu!l1{(G{WFsbin{B%4N8}p#XQf_{zTXy@%-i zX@b4&&E#tIVDl}hm>j1vqL3tElaQI_`_q}S#uC%SPFn7t#QkC#kmw_KG4hF|CsZkhs>9%7x)(iqTP`)lYY(MjY_ZZKqS z835ld!ik^zhDb{ayn5sK$qXW40Oq45kL_mMOZ0uxPEU|SKRQ8v1+KyZ-o1Hn(`g^Scq5d>5DNXxS+D8= zmJ~0{!c*{zmBk@&CoANS$qGZ4Zuy)WQ(tRQ=Dn^>%YCSkoFu5%Ep~coPPZ@0A#nh@ zvI#RcN0WkG#)MN5h#E_pT~#OlB~dS0!yOVTKCW{0BvL!sx0@=d_jy>_rpu z1$@GzJTIJ?UUc*YY?N$pUhYw1)9Jr9LWj|8JVWg=0y(wEVbvS3by%hryZRQM_MGkv zR3=?_pve|_E2)sUh2=SId2;-~>#7>`j6LCb@Q>JRnSP5>kUJ+F z(x*Ru9UpdOz&N4c-oTCeH?Vom>vzs{2OQnEkMi_F$Wi!{wp z26+Z+)Hd)dq5Qq{g~kXmWcf(_3&aF&=QRX@RjsO0q|2jX!$V#1)A}^PA z?Je>RyVA%JO3^NVG}+QI)`8ca~lMit+r4l=-9k#Nss{ zdI){>Q4@Kgi{i~@V9}j99S%w1CC@^wp)Vjh`{BjwOT(szD<~VzLBw)LEm=5F2KMeq z7dYmB(yb#&&j?xZ#~+U41Atf&{4Xf;X)5-LjOx)~WOdq}2*b-SY}flNcTI4drNrT+ zv9|hx$z7!D3S6v>H>L^Org(ymrum~-e@k(*qjB{i_PHN|r^W+Rru+&vM}$0zt&u%_?j%v5Y_@&yMwXoIH3gWY6n2z z7EQr8N#HQa-2Khxn!0dL{)_<|#MA5MHZg}wi}BBMf6-Ja+2B^Lx&B4MEIky+E0i{+ zZ;HIvt#J%|IlZhXZJ$qFFQ0Z=&Yp>;<-YEwC7%&-MesK;pwBIfjEA>~pR}kdM$a|vpT3B-5Q%h^t>6;@}amdC0fp(nl!%owNI z11MA}L-~H%7<9o3UD?U2LNrAc8KoEmyAHs`s-U<<`EdEPxsZi)sKML=`;gapE zytOhjS(l0)b-8i_;=zwZ2&Y$Xa6a+MGT>$lJyN??7In{b=yGXQA7HCPV=A4U2ww1+ zISk5v{EJwhaXoe#Ae=9Hxi#(*kWa4NjLRBa8GJ-9jGuQ*L(9&e_P7SedvU>OVB70W=oyLJp2>lX9%YGIkl5eO#(I6%`rhUGkG? z{zwbJuv7y-81hhIKTII=3_?Y}FQM)XAyS+^(bQZ1Q}s49ZL51I%|@a5O)V)HY(OpD z5EZ$0pC{-A;vww@^lwB7AS{Z!bppvG!9+@@{Khoa!bGPbYg%9&J3(k!Ja^}^94a-a zxz?d&RWCwWeKEt2QZy~^Q=JA4jUnL+b3zD3H#%vvobwOUi^wixaVMvZ#oyV`iqCoG zGQ6ctNB1tli;SW>12Jn{_v%8%t@7ier*FVWU36TbcbvR`csKW{8T7&}rX0v9x|Z}l zCldClHxSclvAWgv#*Exqd;eIXn~>B8&13B+MJ;wUDaEIe5a|`jC5lM}g!YFQa`Wq-#TBBzT^*yb z^IZ=iIN&5J8$q#NX(XSRE@;~a5e=Zw0rCC&Qj~)C*tGD(KTjw)+7nFbAq~e*smftw1g^QUuY917Zmg;4h4^P8Y*6^ z6l)9Lgp}nSSk|GTXCHB^?J#?eX4!cZ7IyTTLVAmsq-)3V;~ot?DU07Do*&zTSw<{Dy4Do-D2>a>q^PdvcK*}zJy=#hmt-pX2Kg8aW}7=xTs$TWHUnxdDkK=E8thiQzqMhOV6H24(k`oXVDhR z>oN>uHQxd;*DgB-VM-^n zH zu~fSj%5kEd2rb+Dk+=gLZ_A&5@37yaG;?=CJ3YpIs%1YT#GBfSl|FWWg&o!HUfG3l zC+y(49)Yu3&L-V9#DxC_<8uP-iD*tvn8_9&egWk<3f`R4I#f&YqrOiNL62DGXl&Ie)VM; z%QM0+iDMl=M*dlll`O!-#DXTWCw2ZsDDk?96lWbU7`Yv8x@Va;SziXs7i5TvOerIs zaL*0g`E@AZ8ARyFn4v}HJ@391?s_KxV$x|kKN?i|@t!@Zgi7j<>*t|-KsLT{Hf5cV z{j)5Ptk_+ny%f(48Z0oWa6rn#d!t&rl9CbnARV^gBNPX@hDxKCjzRR z4!Ay(2NXWL+3W!Ua3!uMd^aC{fubfH@h1hdg;{a%o95bcSaQos_QORBO1Y+f>9^|! z1E|tWD<{6kgzSBoif_z`@?diPBvkN~8%A(>5VPyH1nCj1DMrIj@z%7O*tiqp|bJ$}Z|xc4QvA zv8H0L+PKLrS?LNU5s>F~Gzwgq`pW2^oJ)Ul>#5XB=PyM5srhTBq=F=&hPbwOy$;Bwg7Pkv(0wlAu`R7(U1&tIR)lKrHW~a5i^cvi^^KzJ8>@%yuAAkQd}4xcTLK0z4G ztDa)76JHW2J!6} zA=R1;gY5H%<(OH!t6xp5ww__4bs4nu#nZ7P*U@OFt`wZ)98~(7(%8%9{2fy=ZZU5i z0_jV~2pou}(+L<&WA;b7W?dtz>+d={y%P1u4!Rszm3HAj!OzmF`a{d2YYHOM1nVD^ zo*)XGdFgugnDJ|U^81Xz-Ev57UaC$Y5<{Jp&Ex$PHMh&23?21oGj*CmVYs)JdoWQc zU6oaM)#+gC+TbEA`=zg1OKVdF7iJgMAvyNgTf;g7I3xsIlk9&s1Yh+{v9tTbZE(cXF6^jkbTikY0HU#TDsBaSK0k#;5oumAUp%uOmo%I9Y z`BwlP`z4zRSY{8C9B2xekaPC912Vp**B-vne8-`w{qXHa-oe#!8NBWoU2(We*iDzNnDQ-$N;QcEeOr0NgtM-?qg^% ziaT}WNpMm^<|F1xF~@BA-;Ba6wP0T&!2=9EMbQRq<^RI4J{5Z*yxWhePve%wWtsQ2 zAxVtv0os@KD#sZ3wjgWuyGMabr0c_&!MqJr_2<;N48%R8`G^8fBFw2|jX@xyt4mZV z{|h0C<93hGGdwjU)aT{@8G2jx*WY9s)leCBAaj^y){aaIPZ~LFk-a~2Z=u4Hiqf#a z&*I*-Q>R{BN0Z2>jJo}|7aw!cOgMT2U2&>Kj}@kwtau(T#~q?}L~laL9}-57x5v>t zhkj&k$RVVgc83?=pIesLS%z9USb!9mA~41KuzEd-{cSRozcGGRjxOFO(sV8lE^>XP zQ|>Mg&@t3lV1-{FRLyyD54FE(D=-Kj1Dl5c+z^@P#enhE7wDt%iGS_~lj=SDsoH)2 z#~qM%3OEcKKbFJIWPLW2?QDmS4vE~)tSH z!Q~(Rju|)m)fLREj?-xis?c0onfn1g+Ju`{N9H{~Y>7y8q(#3apya!rl`Y#6U%2XLs!0hp!(-b~96V-0)0ostD?Ka#z!g zbF+G;r46krhi)RT;s-H|DNbkj@(1~NRKLboXbQ`7bSA+H5+Ck#5PtI|oN7`p3dcDO z=`Xph&2^fKTwpbQz)3#?U_~yv_#8})lECWDt|DVmI^e)tan#x7|nIH z+q_Z;s~O<%x7|N0(c49`*w&aM%Mv~{SI}~LcEDS93aiP&k;x1->0esj>7bQU==g&# z!1$`G{|NTP_`8ZEgq}dN%^Sm7tMV3#t-;E5BhyU1tNoqtK$jPsOcQ#Doy|oK)q$-k zI)Ee+poZ(s^dpC#>-*Y^?Zx5Yb;D;ZpdxyabP^tq$=h74E&9^&!e=BXGO4cdFE4Ex zPy!s?3adUEHJST;_FKLjm{9qKEymAyqbC>Fg-S{?ew4$LZb2Mda)ZvI@1b>lc9k@K z#`aWz?g(G_72$wr)!dlHq8i$fpd-{uXmcy{UX^Dy4s{*LlFJAt;yaPpQcBy8$s1w=Q$8s_3D zCN$jfgB%`!7?u4l$t~&}@wOesa`+P_c2;$oLqhL^DG|>ebmvKABK#McRP^sKstxFC z)ZCsGS`=iW)rv5U>v5W4*4U199Vw~&+O~Mo49y`%gY7_*fbFC*f?O%(NmpI%sq)IZ zh_5E`SOSSN{EpjR@gAk&&Ffv3)fL^jn2n|on_l_>w}@AKp%*>$Z@ynAscKIRIC+;( zPAV@P7W-O@F#lj}9`W0ta$&(bo)(nsTh^aNb!&e6QZDm~EwI~(wIdes{Ow&J9YAhF zb56+TaIC11*^A1e+D<>Y2M%v62TZW?#GP0#9|BJWq&iN%J!KKD%WzrumB11g9VCcY zMp6KKacoBlgA(W0llee_hw8$dASnZsl9;9@RB|D(OODKVl|pzkr}xNe%J{)2h7-V{ zZQzmRs!bIWiD3;@ZKCXPBHYNmTSEBS?N78jh_(-|1bQ>u8A!9!Hz3ckIql=;&dj#+ z;4R4|GRF|xjQ#BGv7^750e3XxfG>WX$k34P=t_zWq*ay5(de=G8=7L^>t=;w2j8t` zQK8fyQ#j2c+M}dp|94@>GJCFfUMi%+`MK2bLaY<2ZEmKTpJc?Z@4;HrQcB?*b6{*1_LtsGba`|C#4+`^*W4zZvLCBJwP@&%y>Wpv2k?#5f2TvIUu<36 z6^g+xw8N(E{U(st77hT)!;MuLKPCPawC%w!;UFT9%7_+1ewubNY=^#{S<_eWExjzh zmGWfQTEczkWiVVHQVjcrOE{~t>CJp-28)sXCjZ{3xBw6oGKyo8zKUE86>?69R#ly_@cygNwlzacIb1P)~a=!G zP^z)*j>_mo(Ic!FI{w5-x^W<0=VB8Ve*Jm{7{cbtlAs~q&m{d7_{tu~MyLS~m5f{_ zA&d#hz5_u8-bDG#aUf~cS|D|#1Eoda9)&jAP@B2$!o0u2?o{;oRDiAyUzt*b!PDP( zNky;?T%<0*r))m(z1BwYW@sc5;rOv5V9jPhk=$lYPl)$GXIY5q4`uS#bjUv6>$906 zH1h-DFsLhL21#=z=!I+{a$CQPCl9k;B*p8GVu=9V`!y^aU;l=45MH$=x|X^oCLClU zbeKDl==&)KrE-mVmUj@5;OM$nbRE|+0qCnUekwW4`TP&aAEBr`A8zz!^$Ssk>X6^f zHJoZ5KS#?T$;f&fjNvrG!|~Q8VX#%)itx)5&Aj#D>Zcb!Q3$}tVWovY#1)Rc?xDt3 z+C9sw$1;{v^`X*_OSK}v++1GWi|=n79a)YCBH=ymqepPC=ECOqN079sd7$(9BzpQ( zMPd&kp!0{a*xkhaSsl37VG)4JczNC^^_-c^McC^f!8xe#2^7N8WubU4x3#)1VTv@| z+kfKg6zUi`YV(l>Aep__l*fT6Q?VBqFS#wE=1iNR0EG1^&5?CJf63rL-asWZb53h! z`$y=Ld9EsBSsS%#)@a@m)Z|g)LyMY`rvWs(t{xXZ-+Q6#%ce*<#F6fM_M|vycx4mE z(~8K$!>Y!ae)x{xe{;=}!akmfI7?=qj*$0+_Y=(h&T8&ZS3nF(rLG%CxN7yssM|hY zmKXJ&-X&1GLcoW0^huW;@zb`UrDLw5opocDdW+<79a<9U+wulxG@s|%Arr^$0?V%0Rf?ArQCF1geLvqg z6)^nW0R93iR@+-7(Sw55GBfLUoLlnS|(A^`58pL4sZ|^V)^{-RY)Wz11RutsRuL9h8^xg zhs79FV)O&sy-mm>*djX!UwKO66yfK8LtOq7+o{0jDSguBB!NJYRtwP_SA$jw!@1;nkHQ%>ZZHu4}gt;219a z_`8Yc?x8I7eh1~SPqt&jqMWuXU09p|FI`%4LbUKfvqDj~P24eo{!d>p&e;T&wyYPU z@||Hz;2qgeb=tqMMaUnkgCE9<-K!ay#bd)wffIeu!CPL={@CwiC&wp(%>URpa)sda za~_)Y#a)p;iwtRhl=26}oWbMGh;zdnkLYqig7vFjY?v8zM|pSeRjo7Myw@>ZfP(!) zYIKW%jRm`+kqqg}+E%YO3k);O7Bsb^+>NFU$0QHjcPXsi6Qg82&@BD_TsPU;#@FZ= z_Wg?uGD8oYyV?Fc3Z(0D{wCjdHJpNY8bep~F;>rqZ?sDoj|R*sBAeNO;MX;Tc$X7 znYwo#tDe%!iN*B;2E0)qb%B9`^;my?=HK$~PjwtOXAu?AWfC6P!B8TGkm*$n@vuf^ z96YD-X#nAbfT6vM#b4|-uERaeY!?A_>t(AS_JvSSs#}Fu_xK@F)`)u%5Q%k~dUmnh z3pt~i9J#&N+%KyGdF$23W#u-ptWZ6b<5CA4K|%$wwL?}ylUi-F_4N)agV`4MEkS38 z)$!Rc0s&D%aKWYE4uCty;u40-9Y4Y^zOaFF5+x?R{yg&4l-2g{KqOx|T-oP>=0Vxa zh+<3#y(I0mgn{Ud5j+xkZ{nP0X$eKW5`8(97C1)38V7e_PsZ0ep!cP4dm*Iq{Z(8X zrNn2WcUoSbXsR5{6n0@3b{XMg1}twLIq<)|w+oYecpv}v9i#ZeWzlpXIEp_jHY91} zs2O)!@_5_A}Bc_b$3_r5Ae_ zY(ZhXT#rA82ilkrjTx4LWpA^j&~W8qDjYsk(;bd_Yy{oCa^?oED+*?ETDs{Fjg`911Xkj)ooSIyIvDt1L^vu3 z4d=mY3PWqS{3h`1^3p8akih)n4EA}hU)Q8xGx#ybitV3wdkeh9_Vc1fzT1p{FSM-U z7=f$-I9YLc;Rh+8g$oAh>Sa~)=3YNRx`Vy13DE)vIq91xdb^h|cpAVM29Q$f*^KV~ zVl;Mg(FdO3P?sbqD=?&ZW~VVYa|5zF7QzzE%J5)s34CFRm25D}`sR z?=eEpXFtogoia5UzMZ;m0!teTf!9Q7$_v}J_5K{H&3o}z@uq$jyXKRp46D3vU-Eu4 z()q{sqEvqH!Jp!N#oIaI{BZrAav$ASqbcj;TksZwvcepP&mWz1U;__#-&t_oZ6Gx2 zWt(k{OjgTPdW}PALYn!gLGJ~z;4NhIQ65D&ahW8vE4+f-jic&KB2NU17HW9PXqVfVwODoSr=nqi8ouqj0pbaNEQ zIzLFZ8S7mQ6@%*WAwDHn?*>n22sjcprC(s}OlN0b9TVV#DEKzY)rN6=zc$@zsGRoK zeQArrnN6=pdt&)TZmmsbCE`mlX}TX??xPN7#0p)m!zuTsk;PJ9vh61(;eH}~0QIN` znEv1xf5=KmV3SI)1Ki0;<|5OF(Sy3I)V9DTm0e1w=IxMD=-S}ikSgyVe14UlQ&+ir zfI8b}3Gj6UUq)<5!pK*W-g@ymXY}Cyu+k(V*!%~fst)YofD+s1tCuthMLPPN5{KP` z-!KHX&6wDeH-_SqPnn0PACZ?%$yqDjwsR4If_^4u`Sn3ODw=u7^m8vgF?HIp|6NV1 zl|B@F;GI9BL;9LA$h-ai2_fYdw-Ge|v8%Vb_k*v_i?T_$==5dlTR$X;5kO8+Oye$= z5BIbQ##I1lqPYWRo?*{R!xEpzq+m$4@F6T}DzN5#b)2#MOf2#T>ggwj{wcNqxOvXI zuveH=OaTTE+O4Rrc=%H#Yy!@BI*wPzuH%Y>j`56AZ)t%0GW#lu=PjaNAOi&DN;w*b z(pnuQB##u};KMi-1tl7KOulTvb6JgcVdGbWo$%NBb?(o+EpiR&y)YpUzed5m*{s2~ z#{bq9N_G0j*SC>?Z}~uN2?{?j%7cR1;}H9=k~|(Bj3>Vl^nztf?#6N;_j{s)UiY{}W|xyA zi*UtpQAPDS$D&3(i0K>Q2k~@1O&H{}-9cGEBHgJnVsEk5;&BaH0~<-0IjYTzPRly+h+Ajc5=Q@TxR>m{Jm~+gms`flv{3amp^Xk z0S!2=`2T45>ZmCG?{5oHK~Ygr5mrDzx}{ka6qS+^$rULnmkxmz**U_4h66z*t(Fx9C>H-r4#q~_@Qm4z3CF| z7|cNz@2SRL_+6#r?~v2X&eUJsx>#E1pWbY%Y>2hy)dl4hi-ge?b-#Cy!p{B1l3GQ| zpLKou7&e&fe_HZ<#P>%`*7^*G_nWu(b?LqNha8#R#O0*fGoB%L=+EX}80wNeL!&m7 zR5p=PNezNYp?qsGi8i^pX{ha1yz_F$172K0Zzb6K@}T|h7gqclasVktWyrnv6pd?= zywf28Gsi+u?tJD9mK=D7)K4>OzhZ*fAcNS%>Yx%86Zc+Q>KA zdKp?M+_Kyff0X*zI6U-IBoI~xK;%lQoG7&$%E` zHBCrpuI3^hNJpk{7Q;GY7{^s?p6LIkqUrYjD!4(4uHPPkCx#=l3wLo^QQ~gbmBakjILA!4pb=B0oX8z)> zP{C`-l0C(82{L*Fiu7viVx-~30U~}cMV->|%HKPd)neyhKn{AFQd5d7hsmEdOor1^ zHg|anfa4LUVF9K4$_(Q({uEgf*@n#H*gs6%`FZT>!Fam9r33hNpdmxViWg~`*yFyW zM88|-yeGXWQuY*ATXK}W=z&A#QI zXwYucp9djD;8hFr8`?#{1{6@+vM>)OL>jb?+yH_51WX6|b8=0ejsYsV`C#=1UIWvG z;etzduE?C!*nW87PRG!Ng*Q*IpGCM20dfH;*L38=MLcw@@m85oRoy!Al~9%ADj-i3 zkW8neF4DIfputW-*L^FfsaZFn+iZT({CdQm zP1eE)BIuO`BcVNhnS~#@Pg_3nYc0I^YFvgn>gw3{JNXz(6C9|S0V@UwW{BCWk|=Zv zt?!~D=!r92JWx#`NDPzj%1G;ls~M6nFwEU{`_FOEX{sQH;ed3lV@kJ=wVGbd)FnTc zuxzQ9AK^GE@-jsvLKqsyxLn#UUG~U5+yCH8QBxXEwDC!)q_qV0x#;Wd!2=cfKMi4d zY)k}fS=RSCtku&3DE!6uQ6re|GqNl;7oAtmvx(@_jzg&FvUoz&m;aTvESY&94Ds>} zVTIVb^x?4i@s|nVO~t&_C62V7dcO-5y`MfO!^g5_Rz;fvP?B3SIg%|a2uUwy|Gy;x zn>g~fvla+qSZ+7M_=RG2`tQd#{yINW-!M72W$&?)`WRGmfd=cvpCSgfva=)oR@wiS zx{i8~g^I?w*BoOTOXAD~-S4Vy79TFl@9+5c@th!4iAJ86)$rV_vt;IM*r*@yOM?}$ zvcZSQwb0X%CFF1g*n@x^UP}!`2Ft+z#t5JgD>O)_?$o^0=CbpVMhoc9)&88JKOM*Fe``K_dC*?7LCGb)ncFvJw5s`e-e^6A7h0|(#kb8! zR|yR0&|qY+G~owHHCzH@{Ml!6lCLjR5aU(SYsKTiYv|J-IB9LF>-0(qOe z(X#i{TAr)Dw5P_O2hb2B#j|CK;Q-M2nZOro467?cec^zWEk^|*oSYEw3_SV*lABu| z-e6!MVKl3@vZRz?3r<=s>p{V(gv-tpN3#z(A~*lb_mN+!kz(&<%YZG2DR)bwN;wVq zQ2ZMDT`CT0Qp{Xs9ku0E@t~iz6(3~!yJiXLym^*#p85qmOIz?s!k;kyIMZ$KdFRs{ zb0A9XH?VSnBW1)83gq{QIMm-SHCs0aD-^E5s>Rp=kVq(hcjV*m!b{+uJHVjTj5IoS z6uMdgF|FV9-664OMpy2y=pGudez3V=)m?BT601LurZMd{py}3o8~bK(Iq}YyxBWSs z(sP}1ZECOW0q6VjZ#js3XP?kw_M8koE53SYGhl+O<>6M;mjLzqAtR9#+`hr(S?Q`* z2e&zq=KEnQ-2+3fZVr$|7s|4YC~c?N+#mbO->AqCq@k`-nB{{T?}2TD@W;BX#|*|~ zm2&muBF_cn{=dy)2ie=r69L<S$EeLO9}o{?;`x@EIsh;s2qb+%WbH3Y^Dc+ z`wCpVQ^P=A`JMRfjnRgq9`^jg}(U-9YMv^ zHL@`LcryKy2wC+&=xd7FU)b+>fP{E^ER?sFkV10(4-4uN0=Vg?56 zHyJIpqKK8SiJCnf#70pf?|u~eku_XrO<}&L`2G6<%RKH1Dk$?RK-UwDeS+%O_?P(l zC8u`Dxp@XT)AfQMiq}6&F&1>PfhV}*O}y9Chl4QnH$v?J(b_kJu zI~74+pV?>z31Jby>y@mBRFxBtO@`aoyRJ{Dk^!rY7stbGdbwLKE3vivXFl!w*?go? zyggmgxWs-r@mZ2`a#ylS+@%{6B!+GK0VG_HGm`PxdWA*iJ%dAlpSIntsI06WB+ZH0 z(2Y~VYHkxFW5}8XoVMPpS#m^a9*rRf_KH4TIe!v3*#JeaVhJq*)?1oYpSXnY$C#bv z7J?)-kl`{4Am$18R@SChFc4Ek4$PX}6q-5XK|A^wd?^8)kR#DR80P>I1kv*wFd2x< zqHOk@ll{xEX#Z048+xc}xaeTJoV53-(Hi$EgRkzS72=F_%j_P2W;^7Bw;m9#F~Z{t zzIP-B(z);#7Lg64-R6z!yo(-pwt)@Z_DJD?&+tJc33dRpxUuoV<3#1TMRXjt@mk1D zx)U(%AV-fm3)sOAz&1RxaA;cfi{D=#UXQrbyN2g9KkcCX=qi~Bu;jk$I?FNloh|g$ zyQL_am~N>P(8_vx&hPvZbV2%IzGR2yKmv1gG z^3qyQ-J4;3Od;(-=KAq)@vkoDz4LPaoG4ynqmHix&}TqxSvZc6fxR-S`0+i3mJ41X z@+M1r^7gS{ndp8*SB?`EHEmeu>JAw;ke{Gk0r*;L6 z!YcCAf3K!U)fhS7aPgl`U=Y9|lkiWCdnfn`7v)mIJ#@V@?R4v;t?f#0L{R-p1AbbQ zv7U3Gl(h!##>XuxWQlY9=g#}vN>Av^@@d{n8fNH!_3km9c~tKe{ohX)EW7=$-hC0^ zo=xN7pve&1=6in+uqIsf{p2epQTe{9%Wp+*_{A$-UroPawhyi98%1D|Lj0HVCH`Fk zW_^iL#x6PnIC@?bs9xQ*kr~Tc)Htv)&HKcCJf)^Lly}*qFM1Ks(q~N56~l1FJLo?L zM~&ZUg8q{@5;ByJUU&)?ZAYbJt4$*g;Mc?EpWac;Pp5=O5w>fbfCL6XFch!+TY|NDm@$Kh2M~}DlkcrNkf{TD2A7JP^buKvZx+LY= zOXKSH)!lVmG;cd>cmFwakd@YVu#$fOqbqUh0A)1TQe2Hv;UG&K(X?ITWv!(NmsxhS zCH`*kbL}sZv0(c3# zwc$ksZ8$8Kz+RX?A@Q^y`7dg?yNZ4PBFgF-STfL+z)s@eH+Rc z$BbQlGcYC02K=o1&-MTd*tUPH$tSyB&&;lG>Nk8&{(C3SZKw&}Ju3gi0e@gOfP+De ztv2It4}+4z%JPdp8NWE0lN8C?M4JV;3<@5AN)2+l z1Cra6b{`Sk-`zsc-=a;28h+;%QPb;Zkwq$XKZb)W_Joi8_G`f|Y!E{}j#W-NA%fb% zN?2LcXX$zdDi%#0Pzq8Dz>ZLqZ@Ir7aIQZ5eVizteTvoV`7y0{>gI_w26k%03?SPZ z%l{_1{k<(SvcxJtp4rwJ{yNa>p9)M|F+Cpepz1yz2=B<>rX=5C;MqDZK6hcS{c-fW z-#5mAXU{mr7s{|vABRw_kFL|Y^WIGSQmpjV}G2f>*^kXmXJo18~ zi`;Bhc3Z28@Vjj!$^V#yVsBNQXmjxKs9^+K@zQa@O~=GdYE<{u;B1cSXHyT>&{C{O zgAQ@!XD%|co2&Il?=Gwl4X)y@^4U?hyU?^hUo3F!e1_##TozHl61Lt_CAr~1=M&bK z84vh^FJD69i;?lDwbCK&MmXvP+za!OSbwr4HsJBP{N}l&(|dee!=;UtK+A7|^=pl2 zwu!$JmjNNO2zwERzF=$!Un@4f^74MCB-hukv35c^55+gDLTg2KFDuqk`rhaE0=w3C z|14=hWY5e$q3qioC8p!wIz|0oBK{pNN@Xg2nS9B=U^Y*C{-P34oTfoHYuXC+1G>&^ z#*Z>0EQLn(w7rOC;EOkw84TBqd6k~p|1~TeGhn_aPob(0F{Wf5R|$~7o6axy;W|X> z6Pz6R@t|E$?XwiLps^~l7QWJ@2nXs3W{KGnHoZN*G|S7MWF)?P&+P~Fhhq1>)6jje zTww33NK+4Q9QdK1j@;}Wjb9sGWAxOBKY#U?#@vg#nGHBbLVFEc$YFj?^riK?{aeZ< zp4HTozi>GC5zx3P)0gy%t;O=Ym zdJbl2~|{aD@o z2W&s*opoX;t0cT*ze9&fSRek-;>r|Cy-D+%5UXDlaQq*9N}LZUy$dIqqyzscoWjI$ zuPG%N2=;nV#r~3!9t#)6527;sh+ZDUy(G9X#h1J$s_^0?P;7he#4vo? z?e(~+S>hn#(35WE-{zM$ftAr^8lKb^pVqv91Y>wX)~Ce&)g~gaxX;oLI4WV^xYH%M zEOJGC4(#xxXJT$b5H)kFK-!*z$Z7(vN&P!@I03-tihCaw(-z!!xoNC5*SL=vIqqGy zP6dSh|4ONW7B*em7<1~)A3giMf7-C!m{sJz19&6ENrp5jK;!?{OlBN)D%hC(@{?!j zT>Tj!-_%&)SIrZU%-D*HY5|^e8WLjvY}{C6a5D>?Vro$5`zWpU$G*~J58rMAp5+&j z>cL$vIhXZn97Pr}bM(mtOD^`wQ3eq-mP`>qkvIuksnP*!8NrvYL(#6YBP1z6rIzuP znkiIuyt-n#i4qZ{H=n*ZDs@b&QcfEBi${4apmT|#!2`%!a%Dj_g2%`&g+VaPCk%W3O`a=fxN2CaM3Ers}nED8%KrP`TBih5b~(I_t&fvYQF*_YL(JcLty@ZV zA0i*@k2XjJ$XskNMn{_oxEMSs?(VA-LDQWnT>5MHHA%1@-(H4+Iqiq#L;W8+ywt`GgTcuYdMJkgZBqfSFJ5XOpRzZq`Q67YVoGvPmAve{_~lZ%_~zJzaiSihe!5i6;IGpODMp zZbpSbLL`AT)$XuvE zu6jwrU*$eXts)(%LLzX{WqI*kt3Gi5$t4mxl|20RwJMWNWX>CkWnlDVEN1(@WmI@; zS>q74I!QQG2EJnsY9K$*Qz7@nP(gXj>xI5YPnk?0zE5incNMNoA^I6n@YJlqtH|aR zL>taidoH`!zCpZ@1h<0m&PGs)0B=h_pf3pQ>z4!9G{=KP*}W^-=|C?Dc!iQ<4ks{l z5I48bA|63=r@3j$O~;Z(4iu1oII1V>i;(s^ch)h$3O%* zaR=%D+=O~{<};)CEiZ^b6vE^L4>R3HJ^GYz*r{BItaoYy+7BaRV6H}K7;NP-2HFm= zQ3r?~zvyoi)WI7sZR#WC7lrhO28$f$RcS$iOi?-bvjQFk=tLAf(uGrm;Dic9ch#cd zxbI_@zRNxZz^FGnmFd>lkYgQ26)9tPhMDiv*z1#@;Bi^e&n_Xn#No{I3kG@r8#g0G zdci8~XP_U~mI1$1*cN}3tq+ErB$To(5ETW+9Q8FO4S-BHDw`C1mVq1lNiy92ZL`@c zXDBiRI1TBSz>GPmiap$_hvJ+zX0=}qBA@EGc1md*JN;w?lwAdXZE8%Y)OFYu4ooyG z|GHJ$M`^FGzuLwcisxZ-dBE>p42d>L)JTf!r`I$o7@}(6xUUaH;u@oq@KP|;p^774Z)g>z#^6Cac z$Kvj-*LBCV91nV4N7lE<0d2oDLua2DD)I*Yn|7bs%6+vt|2NO)9tJ$x%zclib@{aI zo&2}Bh+!Ua`O?75W?r^cAMd`Xa(wl1b4izxF7!@s9Z7_({Du^cCg*buukB{emy~655)CR7nna zsSqnz*GhH4-L)#^5!Bz7nxfnx3@fL6CkuU^`bN@7M;dY#18ohVix&hS7d@Nxylg*I zTlh_8iZ?ht6953QwRf3h1=!1pYW0v+Kp1EG~=;~WQ}|q z+)L5eHfa+l{?p2vseKV}4G-MEUIvMcD3UwycUmwN*BT(@6eTcGe(HG-W+`Wx({b}E zl-mjOBSnzmnAAuG`0S(uRZQq=B?-IN@yBIeM(md1$HU6Ifgf3wO;>>rk`v_rJKQjZ z4vRa_UyQZ`$1^he>!K7sw)!V~5S2R+ukknD1BL(WKXXs7rMFlPF4@!v{I3%KM>F1X&<935@HE1ifK^{$00%)i9F zE{SW3mxtfNk$ya-(c^lLptpwK<{2t0FCHstKah;fC?WrcK)HBS&HC8#`U(j=!9swz zkGMQcc&+dD@Y8$Er7ygUu$B3acq)1%g?oc=d~$J=MTC%3QkrTL0nGj74Px&BD7qc5 zSGyyP)?UupZ?Dh*y~wNsTG`j8u533)7cM^tcr^#>Fg1iBqnRFQEww!IXWG0mbr}Qv zT8ymtC`3^%hR;8MH$?BA@cWiqa5OyRF7Z53aUTwHC4;eQZdA_4>QCT;JJvRPyU`0z z$-W^F+}rxR)>SfnPZ$n5qM`WN^&ab8nuKIdS!w7rGjX?XySsIRO=^r}zh5jW@E#V}$||WXV;J0=7Onxw4TNYT%&5l(VopMBf%>pFNZxn_b#k za7S6%ahb_N=CUI{0n>Ajsv=hAXjtbth_sdY1Sv}&_-j3~8)tQtFUScHDR0$UA4;=MxG2W~)l$&o9h%b>`vIaLm_+@|$1f zu;*~DQWl)E-m{lgp?t|(Ls{S~WfFm}xPNiUO3m~0e@v+Ro1qjG97jnzj=L8kQ)hgpz(cNU+=o=-v zojU{C3`oJz9ty1^GsbZ+sWu zVRcVq?7~IxHQPm3_<+E4h0CGs>rJO31SAu#y1v@8FFs-+W z(0*Q&#e5~X<=$te19^a}W$)JtD!u%lsNO1^MBFXn%YJbgo0j+A({6*yZ=t?;K%apA z?KA}0ApwQgMnsBo%RQUp@yIVvbH~F&r+ODrw;=%lO^tUx$p<~5J@W{^l-Dq=y!e-~ z3byNKJ%dzv7B!~sy68v!;pY!A+VziY>8|X4=47wWu-z-U;f}|qQJzyjf-+$D&;?yq zsvd9dH1nQ#*Y0SIjfg-Uu}5{F7jBqGFajQ_Z=hy28XdV*bbsPRv{~^>!>lT(M92H( zV>$!3F@$s#utOeBDIB5VZe^J2B{rnO!;MhU+N10x0=*p6g077Z*m4w(G>TrcjUAAf zGkMmA^OE9(Lz^%^6DQy=cNz>*yN~gHQ*N~uNAdfPx^-(ZpIX;9fP9}u4Nk?)PYbYq zB``&>dPhLxN>b6yo8jcj_N>K6U&!MO%UIBMbx?t^awJ#z`4-x;Q7SSSaPhyN% zfXpGPe0XPnW*jToS z53DMQ`Er!U*B;V)Lsj)})T#!S(c<0ay|2I4zV#^`c#c&pTIo3J(``t?5}NWYzz^xl!DKY%Z7camR$)@Zxz@Sbr^ zD`uo?htG`(8khZ_v_mL$+1b4#PquNn-6sY}s*s7PIIPA3>ovYn&d2@bqh*Uh!t?vr zB`38>$cHU!xK^CUo1g>~IiU5wsGBn2m$a??RP@emtFmrt&lWH+pbx z{2t#8aMdxjl%^k9-ip3$nzJ>ByorHzwp)vM2f$xu8g@lL9MggGLL9d9t+oCD za-fgK7t($}R3st}|*{{Z{2h&Y4Bpz_y;8_^YIlKndo8En< z)Po-V53Xw9DxjVzTmf`f{TzN_UfLR;!lczPlhY96KNo|1#}rB*_9+?!A|r6GEN?CQq2HKf0E^%d%uSkZpGzvD}4^w1qv6k@GG3F8{oQTIqjcC$PEM0jyF? znA^)ED)4lL%SB@{r|+h9CnZpHuZkDBPp@{iuHXqY#xcYDD7dVq&9{jUmX7DTDG+m! zy%}kvsWp?3GO_m+S9`%CR|zG))NtD&_9U8%A|lK3!tm>kPsg%$4Xc*Pz0WZE6EvBnQ6bCX(<-=YD?AJ>^7RolE*9Yw>|- z&`SEZm0BmT>&dUkY|)JTJrE8ON0~kd)y5b1RI>er$3*wAN(xUT_3~QhFBvz(B z*q-&s%Q1q`1$+~*tbuIi<>Ep#Zg_FhYQ_yrk+-d#@#6W|$hUQBw(LeqcoiI2UgRlU z&>@guCZaYmnDnKMKc9uA@>mFRCs|W$SMe>sqJH9f57J6a-omQBO$5E085zIA@8MD6 z(3{7wQsX4fjMd?S$AMTM$4s%~+O@1m|>A^dET>_}BH1E{zBh~xsPPa5^#4&6@@+KDcbZ@qbuy+;Hxl6T9S zk<3fC@>&3^&Vh7;SY!w8ry#tg*xo6D1q-Ltwwd@pEt}!M5V_i1g;t~=H5}+av;nKB zp`&n4jyxN;y8UC7JN?L4CGfjm;1kyy6$VtXs$BOvK(kTYHWCpGHZI~C-BNpHb_e>A z&42uEOU_artPYgck=+(Y=&jfrGu#G0;3bzX)tjU34PESWB-0gM_N95R)8a z4Z5#t%_CPaRxC3d062QUx;OFZWE7KFxw`wL$tfLZUEVy%w>Q=zq&DQ$5X&94{y4;K zDgzS;;>Eom6cpT*m^M4)-19M7{a3O*$YKQ9?kO^zXMh*?i&K$mmXP(!R-tB*r9lQ9 zzq8)QKNQiv4VA$v(S==V@k1y#^&{Ldqr9gaBb-n|=P6EuJ=>xaEN z?A7ES+U{qbwOAS4^?NOzuH1O3bmP|a>&Cs!fw=Y?_dnFl2suC!MoaFMk}o&=6Ep2k zY!;3dy*|XoEfMtOF8#w+lXry!Cc?%M{}SIXX|P~lLnn+FRY{gDc+=fid8M&jMh<@c zW;qh*wrV?9#r+d-q7H)tAD%W!G3RM4T1uA^jbZPPhtZ$>8Xfr?F)wA!%aF+ti^c83 zwr?i!8f?UHod(g$jA!I>Z&#*v?+c|QjbYV99wKcI6xz5aV9kR3GeEF%>3Lprc(z)k zm@9NbU6SME+J#>!(afYbQU;t8R~{8?9Lx4ci|C%ZT^EM1(cJoTJNEF|7q=&OryJi+ z#NB#)mVcY;#=Q$yOX4CrEhk^y+a0~{FF}l>mpe1`K@GQeAqrbqVIbJlM^Sc&O|Q+~ z(C{DioOzso%=hDwIpZa+6|q5fUtzuPQ8{h1nzpKjgQfDGdm2lDWW6z+o^IwMr_Xou zj6@6TAk{nCgVx{Qzf@ofK-ztI9*3W4MLmbCO0fEdZNsX`9{}XbS4%0Vr4@Lu32;1t zi16JAmspJG3G(p}Ikp*jJ-@2VFu6*6F)>|D@YWZb3$Mc32g%y{x|~8LR9aRY!A~l|cpq zLV?(UXKfFWE!J*)_^>}@KPpxbEE3->44%h)gnP+n-w`9j%KP4ebbA91kchi?K1fJy z(=vRS&6Zo3O8rx~irCkaU84K_BZd$mo14#n5EoWj9)HtW&?a;zQCInJ zawu60;4zcA-0}55S$BA3Ea_n25v)Y}ItjC1`0cSz!cZjg&K~LyD&NR+-_6rP4rPxf zos3WbOUjM+W?;Qo?7<$O$lqoP5KYq187D9if8lo>VzKVypRBEo zG9(wLlPgP4zUhrq_7EG#dOBlWXJLX*PLy>U=P*hG)XTN+NO}FEkia0)?M&Mdtf&Jp zOTT_p1LZcR$-oag4se`w>d}D=GHNn=0>?U_wGvBy*&OU=p&u;5tpWz0VDG-2-akYh z`A;ubyQ+v0frpcD|B>(8M}l&{1_(Jh&gQMu%>Ta&pm+vMPilAOZ@`^Yu-!18x(3Xc zSnTGX7@_89-t8PK=D!h2xR{S!3EQMAJtZ%sCHlK3`Nb!r9OaoN#3g47vulUdk@WUw zDXLGHpIn~3prp@Zcs{AozOt>odf;XyUqB#;6HI%EHIzB+b13uu)}?Umfw&O^LAhL z;9ReL1HmL*4m8D3PKeZT|HO^M<-BJso*wiLwE9QA=0uw*0bZ1 zaM-<90*rBmQB|zfnu0Qi`b!?D{(dB%p9ONS_%=oK&np>1oHtF!MjTl?8J7NhW~(|f zE(|NI;tgeZ)4e-N6{)5ddp90P(Xbd_&4l*G4gG9xr2=*}Dh3~6F5*LmeBU_Ki~r!% ztBMax4ZIG)tCiA3BMx73M%iu73?f<>kArUcvcNeEc~e&S$m0@@{S^TlQd7~KvzpaUdXm+Cd^>2v4~$-f<&Pv) zc5Uii@1M#N29-mg(=^9V;FpOef@Y{Ax0?&E<8yZOd4{o$k)Iszr!Z6RV}+oqs#3!u zIk!6g^gg}m6DTVZJGnTp--2VqXS1w$znz_PIeh#!f8qM^@T@1D!u*>nFhln_Xh6YW z^v57Sft$s9jK!PMK&~{P!`{RN>5WJhB<%FR$%#7<8V0$Up^ztC$6l}R$X?{to9GvY zH$uVUhJ~lnyL&W6J_Yv|Be49}D97mg3{G?<0BR}aT^0S-?u)oijTUUyNAdJ@q;W#O ze1F(8#xJ~79~j-f(??ur!v>Z#<0B0uN`C(NZl@l4%^-?02cKBN+yhd2kmDH5n9WOK z3;BrPFF-uzU~sTEZ9_>|?-6~b32sA#z2 zQ6ibv>3i_|{#hFXHX5L<(gm#WSqyhmy)-tXv6Qm_uQ>NdA>iqbGX+6YEk`C?bd`fh zdPNCZ!r33JhOA{vn(gVU*dC&?%Qm4S+0~hdV&)RNPH9zVB((IuXoYRbb6}_!ck`TP zsMQg0i%#WJ!fDP9WMnk5`C!i2%Y1-OHY0|YU72>37}9?hbH~{l zGXZw6Xx`nZytz-{wtO9!xvgWn$=9ct`JV%gND4%xqsUmyGbye`Df` zw6RKp%S?^7E23Yzm;dTOZUBO{hHR^V2(~R+6-smlhsQ!9E=mp=eIYW5$qa};6sFaB$XiTjWCqI$xB zqmpMJL<{l_A5{GYi|buWy*J9>f!9vw(7tO1*5I@Smt-iIO3*OuLBJl`jlZr%dToAq z{N&%r3GSQ`NzNx#M}3tWh#{xggVEg6Szh{d!lgAOfBes{(ZZ2?LRhMD062)Qdwh7( zJrMVE4gsGqOLp@diL(oRf)@0*R5amU5@w$q`SND>dC*<$TcIqp+KQ|L4H>3*^bnKp z`sylMCe}`R1m7_$4O4Dj3d1iD)pMN)hO=m8-8dx2Cmg>Fo8${tI-Yp1r5af(4rX6 zD*4aUUeKy3l{k27n#7Y0I6$TX9zrVP$P;pGC)1>;X#l@8SzKS*hwWWN2VxhlS!9SD ze8mR+q}ul&MEDwQC&QioCB*yp0p%9?9m|iWf#I)uUG@m@TbEk=ZguGE-xoYsb4ZcL zq4!K0u0dbMCpmIiYyTNn1(_?YBBk!meIL*=DdRXmG~yYZ9F{M=@fW5al(D^Vxs9pB zNh5Yw+8ul}{;z;(S1G@h_WGHlgAV33T2Eh2n0FRp zf5!>k>;u{`SGvYcT43IFp)n`TLye`#3m|HTRR}fZbX_4>eUoVcrkTK+X{0Ey4Y+2L z^S{U`gVOJI_$eoV@%4Y{%;D}nx(0fnPiGsv6Y)y_&xgi+7t{GJ3CKJcSo!vB9<@PE z>||I(#{o5ay9Gt%IRH&SvcFS~!)Y2-lK7QR!_~ajh0OlkGx=K=-DkXae=lZo41gTh zfdjjn1U>GuH)7S+&x=+=;f|e;@fcspV;QgLfY5>1bY14M0f7CGVHL$&C%5lD~mvG*!S@XchSi&&*}%~!E%LI=~` z0t#AsNiVYSujHEYLhMjBU(KA0Td?#dqK>7LzNYE<)q>lV3$8kybG3iG;h78 ztw=X~j9CIRT1mJI5L(VD3|z6oMzHf?z=6=Ertnz)NWsPa%kTYXk zCkxh`FD}Oc^d{Q(;&-cRo>#y`DS$nNpl-Tt%1@1WRL)U#4|`y3Zs9dq?5ufUh;kn-NHEd21F&wcB2 zJ;er6hKJY{-7q> zHxE2y8Z+#bmyR{Atztd*gr38D$HRZSalqnJ$}o1yPj9Xk`|0S&e2y4jnbHGUR6{pd z;JA@@a}Ek{mDH7gPHBJ=h%G)YPCw?=_ujL$AhjmZTb*Z`6}=cou7tDw#Og$Lol-_)ZBRt`PjB66iq8s_1L!mOw7kJrQBU!$?ls0-!y zip97V!^f{{hj13Yi?Th>FvuQV4jxK&`RevfWsZ%sSl%{BXeQ?i$Aq13x#ZMGZ%#UY zo$ej(4S%a*{ooo=Jn&gH;@Jy2gXxJGy(ReLy2rxiwuGmh*qTPYlqN?}>vJ~u>B`v4 zfWhU18|bO#;2~-=0XM!hJ~rA#3f-H!^&ms0aoTm3BAR;%H{eF*`~E5F&g96hHt@vq$){C+nH{cTk%dP=t2EP!;6Fyp{FFtx4S41@ar;wf{X@F7^#{+4X(4EfTi~yU7V)U2}a5(;M4# zw#c!0KrWe^NY{d;Gn-|dc|ESzMauSK!FY5iU>rL7+#A)?ajxk6+*btPE>n3c!oGK; zip*SjGaNg)jV5kR%Pb|Jy%m=?&lpc0M`vXIYE%Cax{Shh0B$i$<*)BXAoo2jvs*Ex z9XKT@s0m))rnA`Wujz*u@sW{$Yek{c3ewK^*|69wu);GG!Ce>^;9@Lb2lB~7x7OgT z$5)_472lhUXzA@OgQSR@wfxO%b!&#IUmA;;eGy*@{!vgZEyktLk%s|mzrG7-h6wow zZ-@*peUb6j(>n>K*|1cAd+gx%c+@(XL4#7pwcm}enwKTLcr{d!8-l&x>~FEK47S4In3Z zOd5l_chhzF8V)>ODYV1H3CyK3&c(b^c?Hh{jU~R1!f{Socb+jiV)r%~a>?$Gf_kNB zB=5*WAKX_l{jFxC@2Iw|$l0g;*hwL@q21kL{#Z~YUL%pT%o91Cgh#Oh5Abl{>gKYt zhI+p#Oe7=p*7ZI2hXh^$q;atK4=oHc|88*`UAl6K4e1J5;4u*-6 z+5U6GOVH$j5ItN@(Rc&WD*L)FE7h#h;l3S&v4uUAOou#^O1yF`%qxIA$l@-1AGrbh z#F3>d|U3JRJMMZH)*B83dHDZY6SjiTf0xs zY7w58cneQUWvx#M%O&5_O#C@rdgx5idvqZmyr8QoRX;lB&kjON9H!b&7>3IDtsZm& z9@N`4=7a~<6D=w9U%LN<+Z~rhvCyfkCD7K~0L^0Tx$R~V^v-sC7QneqEGeYNqABc7 z-d=xNN+!PF-D~;JBOg2{c4jmB^bj%{5su_wgmGJPI?$Y)?A@pFKq^0txU=_zCt`$R zCPd1DeU+~ zq~52!k$MeHicHM$wX(m24mng#FfVTR{a8NCJ48?*Be{TAG~x4Dk{v+B8Z{2Xnq|I ztO1S^u0qB@kEx*r2H+$PUwyH6G}xyYn*_+FSa#OxMO+fHTmBBD`{Fyyd)btKG+mmk z^DLZkpY!TX8fvN(X$!7wX+c87^VE?t+su!b(s%r|nkbQhQl1&-#Ir;2Gz4)UX(Zsd@BBEt6yx6?7%dQ zV4kZjF|fixFzn+HFwlPFbU{hB(vMit_Dh1#+Nd@=QnhTR-HzW`0j0d{1~T( z^GSPiSk#mj2JJpm8Z+Hg7=QWB+thdSL)FK= zH@PQ&;oF|<)hB)Xf)>rVux#Z^OMotnk`3(WTkpYw`* zO-1bnDgy@&0zcO4x^#UVcJPBL@;(O!$Yv3DCl27KaU>9UMVmEp;WJD{1DFEu1A@&? zqhnp`h)`=jxO8V$IqYt*|s=C9}kPc7!<4>FN2^*HaaGWSpP#x+)`8{^}N#3O+3LUQnE}1c<7G6M}jP!{fv>_gLia=*&smnhS zn$Pecpr2U<-WW2b6UV&=6UW9olN)ZIoB#2M?N`oMTbc;~tr)vCITeI5#g9*H;O*E{ z{g1H(@i;h(!RN7p(;Vfl*wiCAUfGY7f=4nxz(A!?{Yp#PU&JcGH2%xvj7EjZ_`9$- zhY0BBCe~vG{G#%4Lw2$wwtLH@y6xj{vKW_D#vP9eIqYhG&a`Jsga1heC3IhlVr3q= zz(D(t`{ljcSAG45;U+Ye`|Mc4B1^m?pt3D{@jt99wEq z#Vu`Au{xBIOd~?#hW70P2Jhxlx%W2^!+=x|cI8)9*JLq}Xyb9xhm9ASnYucG96{b2 z=w!+MO=U4p-mTHyATurF;)}g>B2w%5{>t-m^J2cL6`=yDqv`}HUM44K-TxUC%Z%gS zNef9Ks$ZE7>yBLUq84)VugBaf&G;kw;o%)1aEHvNwj0~k0lcP+R_+*BV|On}e0UF# zc)mvOA@>izqh-e>o8Rd#9S8wbQYtL{xUzDr)j@q3Rnv~VWIF910RUw1qSH=_LJn_b zvG?0b7>fPC-hF}gY0@HU*}0kr+lLfD+bd^Tv>`<5iD3jSkv{ptt&{4=HeCA2QBc7g z^VA2#FlLaqJ=%8+XijW=$T;Ue?&_E6ZbbTV&u5v`Wb|w@MN?rFCr|Z;TTU#pDas!y z8XC5vIjhXi@f|EL_OYsj95;|Y$)~xaLUn;8R30F8Ck=2^|Gs-nXWzYKZ@2*tqqg`B zd^M`d=dH<)W`fX7d>eJsgv!^OF$Z+A{(VT5VI(8e@&w{mhnYNK+X$VWS#q7Md9y~5 z9!L8g!Vkgp?VC1#R<}VF_+lMJeQ;l2D%;ENj;f&!2~V3?Wae#y7qM zYt@;kgqZ`B(`&Oe#92S2&sX{&@}0xZ043;D8;0#Gyb%%XbnRom*i9R_K}}$&-ZRIg zieS!g5E6lXhgeVKgfOHj#^n$V-(=&Mm7Jnz<4_=bdQ7n}D9?`x_LAXSYO`IzJ6f1@ zKhy+9gDUXBzIRw)J9;tnWg%Y&qs>rgEPX-RgJ`I%yU_m0Bg2Q`V|i6XQ9PG-i!pXH zB4x+RVMaZFQe#o~H`Vif;N9QNcU4Wd?FbCGy*BJaXlJ8Q;;Jz2u z9Y}wz*B@y(-~}xk=(H%^Vug1#zH_}w6<<<$!(rkf%NAjG@1@t0yOqFmoZZL{hQeTQ6npj=n~{!=?kgsoxJZA4 zeh!wLbLD0v@@zL&sZs5U;;^kt23%E$)Ur(X%4M}SKD3xT+4n2bsR5B<@cDiy7*vIj zI(xVgEuK}J+X>3xhE zX8mhh8~qfDmw|^Z%d;B$uqv^*Z+g@4@ppS78S-*60c7Tv240M=9bfaLW-%5gukdXc zI*9qA@iy!0Z4C5cCh!(^6ZwfNK@z%bOvzz&De{K5nI0wqlr~&9D7y`&-Z8h_KQ@GW zVKEXi8Yc-#sw+HZZNGe6p?zyf8XgFP*ZFp0$BTSD-cA80z0$yo>7#u?VTMpQ^X?Y9bF&ipi^hnDl|*rKy>PPQ{#&Y2s0UbDmXVW3 z{zr4+NE<~XFV^3g~YW%psS_TrpctA-kAHN1*PKG@bDl< zD4hTI_v={fJIJVJTNXE(5$+D>l=H(WZYm)7%StcW64;ZkRvnhW)K zuo$ql&U`atv*~I3XOlK_+MWD4qKIKskDl|)IX!52L+m< z&^#~g=d(`-Uqk|RnDqo*WErZsgRl!w^+v)HR5}JUpC~;N#L?@UfIKuWFXP86#fFx! z_=#Yrwn*Qf8_qgBk zvgiJMk=ef$x&83w>lc&H*^v@Z;DmFJ!MVJQ^({2}Ns!J?Dko3z)f4Msh44=|pQbg*YRDC95ZdMDQ6qz!G29 z1$1b#BTq!A8G3FYg?Wg`;C(3z(~sm$z-NOiMG7aVWlgiaS&GP`)r|B%N?FS3@Ilc= zRQgGZZdDjzU|N5WgfMp}s)zZp@X*FFVx{8{PI98QQlRO}P3Mnv8g3y>AE{9;+Au zfzNJHPJhmHxwBNYJ#~NkSO?^_M$Zi$QP3BUJMe(%u~iztPzs*qLa>D@9ACSu>`R(M zccn6onTCQ-LWmg9g+FvN5!UMiq9v`7Q?Zf~2g z#TvMGVrL_rwZv)+r?05cyPh2V^244SGh{L$w+;`-d7g1m%g88va)R)MHq*HsffPH@@ zp+&&;UUTE4L`I;NSuXn?l-S8V9Vh`|CmgG1#vk!(XK3>*r5&(WczfpA z+p$uo=bA!=+WLWGHi(1kyTEyC@a0nELog*dr+XtYQZs!u1pWfcoI5o<;;k`473Qp{X3!Jkjgk9!F(xw98^aSN%q_`r|+o zYS09-4w`GO6f}WBJba|#tJR-cBXJ{+4sbgqH;ifn=0~T$tmZ*=Qxap* z2Kux_3=ls6OROovO1>hb$SraeR*UBZ+wV(Xzq#U^<<7LCCr#G73t6NB@vT@T-(w2x z=X=8NKm@!@UN}OaQZvghHS1r22EkPLh!bM-C{d(Y2bT8LYpAuz+z|mJfOWC+R$oq( zhsyU~ESuT$a_7L-!5~3nB`hXStUV;`{p1#;p)dEbI+>hG)OQGK!?F5mKtgKIt?nkm zgB=b~N*eHN6LlXt2?0ZR@aALo8ayj1bH~p5|AIEzPDAH<$ht+FyO)p?2H)X$WvKK{ zpVRW-w7FH<$sqj_UcUPi)w4Iw&jQYvQ@LwV1MMDk+)W+%R+`n1EIhr2%HBlE&)R#i z`-b}nv1+uryU&9nw*a+YsO0lMp(nm?sPR|s6k#(gQ7br_O=LB(BO+O_%IC1Bd&0J# z{7rSXX59Vv4?>_>nyzr>S#aTWgxaV3vhdqFZvrw}qk4E15jlW-$!g$H>!LHBSHlmL z6&%5P&~8e4?X!p(aI2&e?n6++>@Z@Hm!2wqD=YXfJ_bChr*gD(hsIz@^+4OW(HPRn3KjY zm_F)BQmyRRp0|9!H9FPU9VE-cthy9PMjbpbv4_9atvz!Hd-awn5D@msdifda%M@_F z>)jIc7m(^M{+$;SFKI;cS82=y$PUZ>0o>>Uj%k!xiI~gRh@au}*cH-u6^k}xH1gNp zZtFS9uR`vgfPRs8p(24j359i;p3~~<+fR-D+2QZ;JX44thJ|&XhDzNj&P!k_ZVX{J zClwFG?5G>vrfb$RY9!*W$uD73GHvM=e%%9cm3G(D6L1>LeL2Xwwz=b_Wihd2bcbu+ z?_*`ccw?T$OhRSZ4Fn_JO!jYQox=joG(s7tFUY_KWwJbtEm zSV#zp7Bef%I0$xbq%f&uII!aekc{9-H@3e>v-JJ!%b`hW-g(qdLUC!WVZU)e?7hr7 z4exN53PXA#fi~hV%wxT`SnO&(zZ_}!mUDO@FaFrfQBmvKMHZid5JAuNKyR@t&=H9o zs|F{8@YZ}-l(Swa{#OGt_G8;e54-=@qc?$aUO3A1M7t(aJxijb{yb=!2@ULv~UquC|aC|EF z233|AtU#F3KS^9VtYyawJ&d~!ch-F9?!Z1Bz_y!#9)!cqxB($xQ+(aNL$deDp;HI8 z`zE;(>>*crO9_0DxkdV|cNMN?jK%oD2cud|dea*C?@VfTl3c&GtL2z*S1UT&ZCVo6a}Fd7FoSWDtqql{qfKV!~Kh}lQGN_ z0=#ZW9mmKRR4&{+u-!X~Dc?5gxWe2W$4Eza1s13LzS@eiD|`E@I|ukl(DQl}wv12I zB>n}wQG*nmnZg6t*_nG}60X|wI)y^kTRUL#QMvzBPVp)8oOc!ZhxYQtnaqK9`0U;B zo)bjF-DN!HnuX7C^buBTNqP2P&-f#JyWSI@c({{-j$PG|X;|CD8QZIs9?v0Eta=1p z3YFU<@9?PrK-NLjrK=aPS0qcGh27*7F#K}y`_GTMu6IVvnC0kixIb!OPm63s=qh^L zFsfoM%-A;D%YA&c{LA#2n$d%1NKU=y3eA-i^EPEI< z(xO>RDXGx7GWBeMgv_zYtsFqoq^maPibfSa_wbfaxLmqZhngE^{9FC4na^na<)auf z`q7f8JxC+-g=#8%`AI81K;}0V;A`ARAt#eRrQ(;(bT?RQv%->m_t*>n2h=ZgEaGI=DtoMnMoagylhk?{O$JlHpjc(gtLB9I{;~6zA z5NDgs%SH4fGqxs+wqf2A5VGruTH%4VDbT)&&gBC0hKpo0;UOP9I`$ECXIV?3YEy-x z2Rg-K_P9qQ8V?_@w~u}Z&5N+>#;|uFpSAZP|IrV0Xi*aRpp_V`-QY7(i)K|%N?mbJ z1fbODj@O~A#c+O9!XxJ1p$HCi^FbRZ1xPPlL49dn^QTo#w_ex1(O<;SR)qaA1@$9) zWzwYFV*7;-tkAjJXcehbuzg_wt4mAkj9E%#01mS~sDY6n6+Tg)9FZ`wL3)%qcJdes z!)H%YW>XJ7>t~ZN7ZS>aK3>g92Ruqn6d}wN`=}I?3T>WVn&knx4S7+^jr=fJhT?Z# zDx28kEMUdA>5W9e!RxzARpLcWd>fPovhH`f-JlMHi?BQ-o!TH^d}k%Q5Aam=xlCX> z?pVQIqe?)f4Ke#w3RjdVdcb~)sEtOM94Vprw{>UWTW}x)O{Ur>t+9XCa&h#Df3sOO@`5Pw2kOKp&aA*q_suPB(6aOntTK>a*Y3|W5r z`};cU*zp5*2Ix-Lq~ndhRl56UBvc;D)@DGrJ{KFj_vv}AAX)H)ug!jX+|RnBxuu}H z_0vfyIJ>P&qy}y*f2kltF^gX~MU-1b`IProe{aNGQIeT@Tj)(57UW;=%jmnWNN~sf zC`l-pph|M=0m0PNj8YHV&`mJp}Pct35b`;mXnIhGqa?=e8f8V?Dq3sID>$p`3v_b9P!k= z+wqum8&=k|{Ll&qc8) z#g>|=`yaFBVN{?%oLSC7AX6f$Abhz6=ZTtu-$iIG4g1>Yb3XlG7HfKvd#JI*$i$Fp zf4%h_>;j>!rLN-Qk#D85o!RWN+L8Up|6stZ@l(M_Z$V-QK}lGok{o*)zK$<8D7yeL z&{AB*_$-bmB}6}2RuokCHVR-^fOpc5k5MwF3H-&)jNb-HNP`MhJbDX^EFh84wLDeP ziEfZ|?=p@^W$2nqm?Z{pj^C1p9`cI=gNKrK@sdT+-h^G1j{5t%QVu?~uy$qT6Ag2| z^6ORhC<~>PY)#lJ%c30ITW?vOwW??D7?{;vq+nn2yFe+9ptF1=p?H215$v5NqHLGi z1GO!pMqPh~rR(qrxcllQ#jn8g7_Ab_Qcge2NV!eOAOPPMVbzw0l)u|$&L#lIF0l`A zYD01q`M-J|t<{hGc)a52v=3%jYz`pjf4$uyrwqbZ^UAu4jb_4q~-iLR=;E7?gBzg?$c7Kx>QA_fT+`q!IO&HFb~#tmsRc>b_%+y_fkVI zu+roe=xiL?B^*}PGms58K7@ZsdTV7D0nhFVL1+16+o1B&P`E7}wkpL=^(HA_{ATad zqQ{PKFyF)a{ssEtXg>M*4rflfyp(=VA`w?|AgjMib@ww?R^6nxv9{P;C%jc-L9O`; z;#_tswoe19vO^vGXlJ`8!S|yVgFRC7Ja|H@kF4pv0q_4FUCeImPLFt+#ZR~&J3U_7 zQ0lVoDr(h%-U>SZYEzGMW205ew%Xo(=FQtuj(}8&eD>z2O~uVRT=!A}tA8vO^e};S zsI-l1dhvmblyx$Et+*1tX=0BSmZs+*Z{B-Mpegz^LFLu3Z6(k?IpxDf-YlP~e)sk0 z4g~=W$S!S3dztsw@|{IF&{tCJKr3H*V63!W9KzEIKDp;W{*~D%{Gbn>ppUt!eR{&I zZoOKIqmaycACy8T>v2PRP!&V-#$DZB>)< z9if}|vB*ULt>@2=5=Wq~{uN3fXK=##=B^QqZP?#XVfA36l{mVb6o&2>e4uqYe=oxt=xa`;`pmDg5)wgQKBW-T{Zd?a5!^>Xscayo&KB2}L7I$nN$HkJ~j0qYjmeF88w9Ie1(kcle5^*Fw?r_hk2v12Krjk_`1f z;1M3>cEU|mz7CBGVjd=fW_gY;JZTp9kS*MjLo2ukZ*cv{3gbuk5BEB|*kEpi^xHX) zrI)2t8Iz!h9tH|plDX^OFLI<8F`i-JVB#8OM(6%Wl|!Z~q$kaUz9{2U@9VCR2z~L^ zdl-j_05AtfZg2EI;3l~y{`zuJ8f;}US54-}Foc|5ve?sG&B&*Nh{IhW3SNP7&9h|r zt@J`b#g@k{C{Y;7S->$t@p{mq$SiSF4;^cjUHM}4`$f^C%z;VI@C}BuPEepd%y_P? zZ5ku{;<@YfR8GQwpsCjiGLB=Xj_TP9$?D#Qc$J|>TkYqRxL4Myl;tvwt#mBhWRPG* z`W9ssNNOB;yo7jqauJA&YKAf1hfh6Qy12h4%SEM& z&H~Carb|yu`){r5_{JV^Y|GV>l}mpd+*%2^k|U;iutIY3-6FnJAF`TjHDvXU-rO#U> z%{D3i_<>hSlR=9qiWz6k;h%!=WveuC6~GVuBEbIO_ZduGz{Id;QM9%m@fb7T8>7!}e%$HS!WKX&6 zB8__db8ksS^c7g>Ht^0eBb7PNI#84huw%>&P9N@CfwV6@%BVs6hp!cCT)GJ@8XR|umm1ny% zZdp(Rf`O-Er4H2-Pw!~}DBj3Jm?-Hs8iygoodH7Bq5qsF*l2!Ig zvB;RR1&Z+IT2T~2&NCCd zDY=rd3S&?HX?c#icylB<3nui5!4>HlcIgyU%_`>BrS&IUR_s_T0gZDAQ%yBuW6{9T z)pyYwa*?^gO%3>DsAYKhu)?EH#`MvU^vWIhQW{($UNeQl4?IKXB{HNr)Nj=vC`X-s zX(0#yHuC4zm)x`V)HP=EIl|tPkSR_hsTP$yc$5I2>+JJ{EHzUMBY1Q zTzCiiNz|nI16dtd9~J0#RVp__C59(wE>JI%<4$Vp&BN1;GXrw)ANC|dm77bFBeXE3 zJWUmYAF4vGffAjt;0%wmI{EuZ1P-&I$TESYAIA_0#Z^_z8m-06ePrFC0Cc;11*xuY zITmFHT3l6G%E1He&7`FuWmMcnz)LH42e07-T`s+AYNxjP5Q;dM3s?u z=QZH`bs#lnz5YwXJ)T1>-Vf$wW{~-I_w@D}$j1sNOJeWavepj8w}hNdsdQS!Fi}Y- zOC0EVW@Y{)>ZIj^mf44TweK{)jN4d?HPSQF=YLbb?8vD_xrs51Q_)6=GyMUDY;f07rWfu zCdB>d=LtYew{5~gTVj{9HVFhm!(YZm!N zSSBVQ7tfF~EOpZu#Cgk~IF2qChmB)vShEP6nwu;JC?xWEwt zpTYpSRF;d^DL!?ORw;bh8BA>4@z!^1_YAwQPr=QV8;{MLn62;pmFsBxtpfr3;piwK zpS^|;{-1>@U+W`TSDr^M%+Ui0tLg&Yo_yE-tH@3kOpL#-&|0vA!)InzZ@W?>n?+M5 zgM%oUi?S`3H$ug1-PE3KHdoCvw~Gk)IbGdPt9BR=zD;^)?H-OX7rI?#z zoVVDZF{L0Zi|P{JhmWQcj#g55U}onQC4@hI?&jv1IjQgxQMl(G%tHTc1Jy{zbRJ!} z(SnVRfGeLHMa``M)~O2cg+KQ(pCN{w6aCZ~TkUNwVeMZR<=hFnzF5GOxZV_>A z`{#0##5H$JkUX~^#gX4|%EG#*pUq|SKX;rRQ#3k9!n#1p+%ng6e@*IBcdc@eTpb!6 zj2|vNRF(`1>0+SbPH^!;^{=44#jihXHJ_M37zM)b-hvKyPviH#c~n1gsGr^RgCy@r z!&BzM5bupY_iag}n&L;g8aYA6t8 zos#}G3j^pBY{tE6jG3+dSeOtGf1p=*viJVjOVuQNw;zGbMl8#=)q8VG*1pGv3}RP( zXX0or)j387+JCD;iH5*o##@TPmz$Rdl@!Rjo@+*)d8?SEY6%ZP)~Jq{>jOXA%w{4p zQ^^@drsIf7{_O$Et4zm_SE9geyw_3!14ba9p*dCl#n0xc%l~CwkykDl$hB6bm&sI| zg?lJaeG&IR<`hQ{zI}0RDm%in9{xWFJw5{#mGOc31=7xWOQZ!_BeH|9C`T-LCE5@bGwP9m^ zuleqF?dyJ(2$AzW2{iW|J>PKE%sx-IB1pHbQGd4kZGPSZq~gk>uG4CAH-Xu|kAAvXY`wh# z8Z(P{l_-#+w}eIada6w1tT#v;w7O#s2}qw6ams?NWDhuZko`s#2zXLbeU2JzYyxFO zP0~HRX#tgpZuT-KIK=H-gFB#`e1EPX9=6L9@Uj*`vq$l4eG})Zmn_ zSud>pHX<$dkdG3WU?r%e1CBBlAT}hNWF5tycU3?_=LM5`;MWh`L2kKsnq08^j7WrM zDdn)7&*C<4opN#=60kogecuxNob`40!vueT-r+?qI7}~_nS$ruO~_kMu~?;(<#5(6 zTz*AUIN`hWT6$@dM=OF9DgHAU{JI5neVZ&T{p6BN^#SP$lKG%Jj&U#ds%h6V!^3TlwRtsj={ALYh~W z*Ga@@rrdj>!~t#IALi*~MhE^LN@N6l5uUH(83$6Y{eI)^^#6AOXiK!$7;^sjBq~5cGHL7fCCe1RqolMQcMp%r_nN8~q^$GAW>K>^Wj>w|A_G+#p^@-f z6@#p*SOQC-xeWaJazlj4qys4MLLo2d?iINmMx>?aLLEsrN8@U4MIilGZ`nMRmfI;* zZz>xC_DVlz(lhl{r0Cx9bU3c51$fX|{JjBF|Mq}Q+MDs?e2gKRZJc*P4*w8`CPXu{ zB?Kw{ecTOCPe&%SSrL@S)lu5QGu&s`ZtV5#Q&1Xubq&87O)C`c;D#^Gow%LxnTWFG z9Vc&YKKs^A&`3lJn5}QvxckTkgBLpJS^#1-g;AyO0r7SwL-86P#uNko!I3>t11aiafzSS+R35BV9yy@^&PW-Kze0 zlsFxV{Sh5C()-;Tbfgul@1A2B?01+>{P97snvJhRz%{my+{6Y8x!=(h9Z{d3?~UtCBgJ3twB>JCxZMJ8Zffo2 z%>4eTwM09s#gQ?8AsTsFBOhET2p2VUFyl;EBiW%FAbU+`&TJT5KMb4CZr6Ga=ltcou@EzsYfNvdM(8TPcKtx=XrAF zh`MQ7OUjP_wx!@IWH`D9S&7gYD8e@T*8`t5hw0t3A_pthg@7S3`}k?#in zV9TvgGS@FxM#`1jirkkjSBdo_*WtmhGn0XPyKQyaiN(m5Q&Sy$86(J_*k`;cFrQrO zgC25*!_Uez`aemR?u4dz=pN)}S)1kCO12`;yI+EqW6%x4#f0fO=s&;BbXoY?W8wm~ z)TZ1UShRaPp&L?kECwyjBV7M|r01Y0Z=-n37{2rMFweVR16_08e_lmA>jb9j!--k= z^w3GR@65x}kHNzSo& zwSciTq5eC^d3<*BP;FGyO|Nc$s~HU8xeW9~MB6?7Ps{L~8JrO5CBTH(ldfINDzmDc z*7Z=N?~hit6hO8uBVTJ@QZxFrvrk(;PEgh5oX& z!=_x=_uW#HuMb3$aGkU=s!T}uh)c46Z2>&gAYex*#T7JGmU1Qjg6ngNPoUur#C^$z zBaijGHY=H5T{5@3e!_RO(gdata>;MxZsIDPFL%%1_O9RGM6o6XRo|f4@Hq8l`Vap) z1uOYV?;&Ju0_u0MdR-&!4VE{oXqP4Sb~h399+%vJ&id!OiAJIi@jY&7}}pK zel@(rqiL{yn836XXFo8jZWF+B7WOD!`0aNkCZ+MDuOwCUR^=1Q#KHKB;CbD{dn+80iM~7^d7>Jv zmQdI#()aYeqN9a~HmYR=yV2ukvM{b5-Bv!;Cu13t-L#_+``ztHT2JINjP%ca1( zrF(~nkHpRPi0I7$l+ZBmHj`P+z6P1$3MYip0#8VHeU*KYlf$POE~Ytko}jkB%Onkr zaxo|KE#qlF#vTpK>Bm4}ELrWq`I4KVS6YXO;DOZNp6kF3z5AaA{)jCTII`Esj8D_< z!ncv0;^|LeD}e7k9_9Ie^KJ9UtQtk%3W8;Hc0-fS!zB0t3A^wJo-J7xww~~3E|gw@ zDT|m$>=JT%0R&uFK6XZWJ(*&biJHce22_bH7ch6>Yey}9P4{1aq$*zH(13n9YA??j zq=pJNjonLD!~KJ1I@p$uuuzL8viuJCfaMaz0dDla6{$XzBIGxP3ZZnMa=|l3BxUb`jS8*Q zm)kLB(12n>45h;%1vr<`BLd%kcmj}%^oiuL!B5F|!jVn)6PH0};dYECW8LyVPWj8# zN>>Y6`1f0SV7iB371W9%yDqPj7p9(6DE7l%%(Ypo#dXj23`-wC=S<{Wir`2D=d`T? z&&lq>XwDLJwirfF17ByrbVl>pueo#Ynx-&txp+~Go3~Koo#NbGo7pe;k6ailu!61n z9tnohVVU?defBMz1AnrCV)*i9O2ugGQU+ka7i&OBzTw8xK~6z~&fGxW?dd-Z_O@kj z_hAZ(9cRXJgzT9;+QXitA>t&I@10!{8N~2ej2~N+F8o3A#w#}7erl9W1a^9<%S8y| zTenJL^{Wt*!FB-}y(g;JD=CA8i6848bG@mesrfXWrg6gFIaNIF*x6zH(ZHpmKi@#X zPwm^&4>tCp`UL&dN2?~^zTE|xvXvD6t(}G732_6#reTuMZjmNCPqijk=sA&)_|#fN z5jTDRFGAzx!TrzK`r}p~XatP{J_ekCr)h)bQkV6{M>|n-)#_Ytrm8OM)|GCc*UF4B z=WoGE3V#s%Ai~2U%&5XCreIP#e?`ytk7PgGfd2GxjbI0cmjCT5fCA0z*hk@t2v$BL zUswBzu-%QQ05_%UIww^$(@PD`4$iFBKNf+r=?OUE#Ep3C1o6+M>u@WZ_RL1MWJY~8gkWH$t6!Sg}njMaO6FNjjeETo|l2l z;Y2X<0FE=V2_<$7Jc6`uZJR_; zA`yQkvN_GJR`sv}8xyQaCG%G&2W4KRjE{*C5z5C>@VjZ%FYrxQC{YkFa;@T*asQ)= z2)Cu%0ZEN|mTTI?@a>HEc*OE8c3^1YO3m^xLs@nHUjx>w80(X>60qtL11pqP=auPp z(|2aHzv^M!d-xt63FgAZ04H(1Y3|6n={`iS32M|YJht9FzgjUIP0mPJ@Es#ZveySB zyMsI%V8@r+slYFJ>NA0iWMLWkao?=jOU8XxNjv9Hz6Z|uY zIL^?|JVOrD3ij^6*792CQOZZE0x^&27d6g9o2gHIdY`Z~rK~Z11J1*GyoP5@L1uGG zRU=hO-)W_3D!-_~E3?p1B0a1_n^4Vz8xFr6wFsQ|UqyhQ9v1_iYmAhY+2y7HLqNR0 z|HwJad*e9K!kgAF(ab%8oKM3JMY)2CPac_)oQo6>Qw~b*ecr?cdq+f`2tpbd?`%0= z$neZz#kRNpn^_VgJ-s*cYtwN|j#^$~8x~B`L?tRfQYh2(0Vi8Ik%5lv3?7586w8Ez zDh#(--oHDlnVHvJo{6L=zQf3Rhp<|>{vDDTeAHrJ8KDtQiih7sS`d)`7O1%^SZDeuJu zMfjqN9Znn2{=3=+Q_@^NDMEkjrK0J#(1-mufU`v&kY|SSm<=Ev{lAujF#N*>o0@Hf z&f!wuW>avZ22*^N8KdvrZ2e9=7i6qOjydQMriBfi-i`K zr;bUh^$&KX++r)Q8t;85A~P;BMdQXPR+(r2cXWiUtI*5Cv`uf-deAi#6DLo-4GwUD z)O?++{ucdLq=7P!koZ`a*T)nV!m)!GH|!t`fHb&E-+^z}@rFrDk%&A8v{MJjj-LW&;kXW8Xo;Bsm(hD_?a}n zczJvELr&K54sccgj^=pYQygg>l^~yrra&E%x)O;rH)sjRi2;#Hjmce;-6V!ON(bWh zfaaKX^)H(^Z{I<#Ts*^IDwTRm^nLJk=RR!De-PIxsnYtlL;WkT0B#l)C2W_ibfb{o zY@b^g9O|Ym4rY<@hw>?6{cy`;^+SJa@ViLq{*j(d07+_Ng1xgBg>=87Jz-$?Q$tqI)d_p;0Le^qrw`J7~k?j<9llFum z2D}s|e$-%JII{QcrDuvE?7M)xyhG7Yxn&BMl2PnfJ2Kj~u!(PTbGewA>$^rRr|R98 zGkgNj3JJ-naR-m)RP?eccG+kRZxx5(-Y3&b#$wDT^3bk_<*$0;#K=34Kr9PKjsW;_ z5vM*1-I;pohj0BHkrO%dm_+z@lV|}`E3%x1G5Z)51l(7MO728>lE>%ysmI*KG)ynf z54A*QEYTfYE-aF*o&R$KR$hL>3``J|AcbH!a3(a`fVvr0e9-{%Wf50{oW%2i#;_uG3KM>W1I1BKHl<1gpGxA3*`f zIo-wi>(M9bZ^J1!KmHy@FVwrSYG%S2ZWb91*n`6(W?8(TP3S6)$1q#MOz7vUFik(+h$6_`YW2H#P4c(aPY09pCU?%{Wj zgIS!GMW!uW8ya+_$H|zxfEKkllOjp;3HA%VPWgMkhl+8+54iIJj)QLXCt+sv%6U)z zB1%X9vykWh6C&eMKIcESBJNLHEuzQnSx+EAM^60))2`ht>tV5wV)eL7^^k#{wtxnT zL@PRS{qC?sn|#{DdNWITyn+a#=Zf3c%K|kA{o^k=xrC>pYzIDOnLYe_2cdB+^|PtY zLN_mc-%~R=QnZM*EMr>a<%Fp*RNDLMS@&~Z!UuMYR6H$gQ5-guvnsjs)I&fFs=t53 z;oBpnknf`Jt?#YTo*dPAUv(tNj!pPS8i9cyU1+kyj$=pU0{lEFk)_8yW$(8zod_bC z6n~(H)e$o8rr}We8~?6_a4!ETh((f%s0O}GxoxK9*iu$ADkJlUovX(MXdnd1Fz6+8JU*1#V3n)o=*j&LQx3vtCFUO2gIIW zSY?!4K6Wnk0@H1vbOEytmKB3^y{vY>DPlyl@DizcWr;@ll{>@pZ}k5KLtTHSzk<-o ze+*8(`iUQS*99M^n8cB;OkYZSClvu?vsQ%JGqWep3LSG3X_;V?nb*1A^sBdp#qIlU z{6Ct`GpdQ^eb_2eEQp8-NQp|5B9Y#Sih|N2A|f>^9i;cVA_#&M=^!N{O}g|>=v_d1 z4-kqFTBu1#cHigsp7Z~(Uv|%#J!fX_d#-EG>^-ZG-vjL`foIu1rvX(`%o=~( z(R_7p&JQoxs?`W$5mn&FP^`#>9E3^QzFkp4ZWh=anQk;=3}ooFfXRd>0o-7qzzr$X z!^ZXy41s=2yc-dFc{O3!*a^+pA~47Q&Qq;6KW%u~LBN;tH2;n$RHNn?)3ElR{9+b~ z^nS_Z_~@XLi0)b<9wl^F0u1w`&GVu>6>Y9ROVJ+0#NnA%F(6Av-&>x|b^-~RNvzQ< zO0wUfqe#z1IJS6L75iTlWr1W62l~^^%NY;AAD1T5Yblxs(FNf`-UM=C(I|W3WrYtK zakI~T6Pi}L!)-<80w&qzA551vIpq(e|Dy}McK={f+=Gk{wjOG)cDr&ZBXEr_%@ghN= z%=Yc|{|uVZPNCM>MY^w7K@Z|ED`+pX<`-Zb&cpdK!uFDYm>6|~mh+!D0j1Qj*|~>Y zVZ8~2aDz4WoN)anNdxJc+PsXb&{&Q546NIjq6_I@|B4iT^3QpC2kfp_eoE4}B!RBF z|2#y%3J7X;Dr~f0E2)K&1VNca8`Aw~O+Ci2=imKG6(*Uf4SQs2|AJ@s>jx23;o-j* z`|6fK#S7jdwqV|GyR#ydn+JTtFb3PFMqu0X55OWARy1Z1K2xgfWD1xj#MC_Dyn;Xgek z#-W;{L^7e@=U65`n&7G`^6RE0yhJ;%pJT- z5y{lBME;9CGT_fIq2khDk|d^R-okf=|9AJ~Lr2{@!Y_hJ0++BcP zRrd?e|Cex=!XYC^xrY;yOVmkPBEYNoL(zWlms;+XVPc;4o&CKFLpS*lqem#^`*3)z zWB>XJAPbsDV!|H-B$RQ$>R;jx#hI99bsdUbc6_&vQc{p7n0U`M2Jfppf+BE3XO95%?FBU=ts{n`iQ%5TUl8#$XPFEYs_|F%>tBe5n)LsMmBo$149ycq%W1}tt| z`Ys8k4iiU;XnT_xghIESte@C@u1l<;mPq_H^GHl^8(nBrxA=7?we{$t?tozhUzNuw z(}(W|wTw649*EXW*bjBQSD1RX!gLj!RFW_aIDV$Imn+B#)?d7z{rYLfl_=&@wQZY_ zvDm5XKLnV&+mF>**5tYH)OUDMv|eZ!B@|mHKM0hvo>gB((AUQvG7aC3Z_O6Ug825I zbAPk7#zE(sVUU_4A9T4{BPk4e#JwHXeRaEIer!YrrPB0^ngwQ)IdmC6gT`3Wj&!u&Wl0_m!!kf z?>F|c#GrnFh=8G`5#?}!d%y5|PQq(XC``q|%5VPhPPlUvHt)kNq2C-~6y^|w;{bg% zzoX(`O33WVv@>`^4(eM3uBY@Mqk+IX*CR1E7xS}@z2V#41cD4~Q`_gj4a zRQq@6??XWx^64(mh{6{f`dA?bTY3;JeR&gAf`b8$d|?%gKO94|}A0?UK%wxMJyNoOoie z^c3O5t=GEO6~HH#Gmpka-dy(qGZXqOfyvY-;I~dpS+V+Htxd*(b&2=@5dH=8Nb|)q zt?xtu?$O_Mh<)Xt%Wq1)zIcBMsL}aI>9epOX-JiM@l!Ae6v-4ADDl=;ET!}ut-73| zIvWl1<^78eC-w}_zAOL-@G2A??icora=%aES}nc)NntL=w=}8KpPvLAA7C~&;lalO zuYX(InM8jPQWvVvIJT$*l{!{S^RfRSgpq~467Wm69y}|M^{!_)!Wg(z3jD$@d;QMM zyhaLP`!P&Hh7gfG=ZflZdsp`N7a_g>RQ(hkTJp0aM$E(^@8X=xz zP6eoIpGRIq?=JlO{P4la6yy3o5)MV8!ebESd+S<%5C?k4Y`o%R;3D*F=OeWEeuwC| zbstZR>%p!QP<4biHV&8O-^T;p7MOO{!PxB;}`|~>J4nOQUF}wL$ zVE+af&<-`%hq?TzwUPW?@nBW%@kWc4ug)o6N5oA;+VG9Qe0eE_V{^ao$7yyDNyyjw zdoF+&Kzy|Oh*(+W2I%y`=kz<@V2${?6*7%Tm-U7jyUn#UXgDx=>9s9#D>@zzC$`l0 zWceldqYefBay_iSIQw2Y+J>^^p}tH=J1BkAFo+)cZ^37xr@;KYBmBr9)$DSQ0!SQL zSc_ts(o3L@DCBchXZ6WhE|!iFn377(#ZVU5$im90D-^_6KM(!&_g6Pp^(7Zo41cB7R^7)RL{^ej}djJm^m-*%XkO;$@G?XDNC zV7_xv83qx*=dqKpYb1|!i+jr$-~H>;fq9EHf0WOZ=B|4#F@1CJ8&%Szjrb2_!XeMf z?Zm1R@RhuwNBy;%K_bSk3TcpeG~%vag5G|cyM9^a#5=S48$03}aYGj!22L-dZX3^D zH)nNYyL=TaPQUTrip*Q*IxgFemd@@K@110hJ^p$0w(u7;JNaxyyl!pwzH7+2pG)Y0ueDP0!v58cDm z!v377@A=gj8XG6usvI#@)eAffr=H4!wst|XApid911JY#I(v#KchCG_p9YHtrYbsQ zLzDHp2%%bfuaxd8B}ZG1V_>WFIHV|rg=A3yt>Ucuze-WkZt4aS9ARCUn_`*Z51#C- z)Yd!WkoW+iybGY6%hjk(p#|zaVQUB)5r`G$r5=?wz2df^Lg5p?=(usPs~ic0QDXOY zH#QRr1diXnS;pN7qsHMKznCbZ@S*rBFd}h4oVw|OixL*Wp}I4ao`)&VOI$Pdo~u>*EH-n+?|gSFQItG-}D^+*A4_z~%rg9)a*L15W=rm-}DI_=FDR z*sEAyR;7s8z!0rF2&;6+To(GX3Egt~M65UtM5!N4tiHXBc>l@6Wdp4jP#RHC9Ai}q zHc3TIw7q$zZMa_-0Fzle66Og&*BUfAsYDn5|KGC19C5_TJE6B;DWtME*QY?q)>N-inyb*+ZyMo@!W&>QcC5NqTw-FK7Sq z{ZZ13AtIlqG`3ZD&wsr#eYX?~!=~-3P)?Bj72}@{J(q)a&Ok;;<%byt4|-vL-79PU z+Hbx)-7)8Jd7!0iq<#Rrez+M2=}tarcClq!LQPKde9gdUXS1+Ylg*(+LehimNJIoY z&D!=y*qNtv0{e`KFPGtan(0u4B*k+(h2Kt^OY0nM=1WgDh%63Lfa4OH2T{wmh@!-UpTvf^n>I@{u;w?&m;B@_#pOLLEzEuyBDExjqu|igF%F?qv(+$WmV{G z4jpklOISrQ-SY;;RByXh43l1DC#p94I06!y@PdXGZoBnBp=rQ%c4*i>sV7BEtMegS z4fr4R;kFPU+fW>6V6snOwYuwv1ux!%j=Q7}n}KR)8lFLy5MbvtpuYn=4Xb>WCL(p8v-i*MKWlWj z0*LpxTQRc>c-`}Ztd_4h4OlHpWrMV_D%$cQqAou_g+=dH1nfPBwTn)VU(?H$MJ|THC&b|>p}M_&z*k2qBV(7xb@CNk z!HN*jFLKgQ_kv8XOGE}L6hP+|^Y%YRm^iKjwN4mVlj78~OK?$puN zvpjN7K_46v-MJ%!+~paad~KfqmKK#8`#3rz=4j<)k`OkjPhE(&jWzrKLP(5Rd}R^t zvn@CgiSZuQaLy#yv=8lwzcQT*EVUb)fSw#%QK|?JW1#1|fR9vFPn9byKAchO{$ zDS&4OR1YTUJH(C@cv_6gH;PL2lTgZg3gzIJJy#CEv3MJf)H|Ua+HVAdWU>$v%8`j1 z=WxyAH$PAf&QJntffq6!KZ`yTJ>GWMVmRib63uwOBpww>_nA{sa?gv`R@e zKJJ2w_sISHekb)l{28z9XXY-Dqf>z!CLpu2l2I8EN@-B-m!E4nXewQ}xkqp%{MQI} z@mV4}@X)?c(eOmH85k6<gf_shiMKQI+5ydn&#Q8#M!X#z32A zY5qid&3*ij$C8#62!1S8$C#eu8b7i``M>SckG7VPU8!%D1(q-z*XQzYL*5P#{b4CC z^Li7a1JhHA|12ZMe_Y3i?d~jhYyLXN$DU5!V>N$B^0}@i;Vtt9@y$$ltnt}F-|sMw z*gS9VC;_d#@;WnKuTuU;YD6@~LE0wj=iKbUt_=D+qV@gt!BX7dGsPvmF$UoFe-Q$J|5)0$HYApPOX0JwzCEWnpes|IyF`tbIcEZyr%q z1`)qjqev(jsIY*}(Kp~WM^epZbWwQ*w6X%RkcRqC$r1@4)=|s>6S!Tv9%3c=Z+UgF zE4bAKNHl1#pbrp)Q?FCk1Ey|FNfhE1TmmoU(KvuIv8#9Btlh|U8Bc!ihnaWY2L<-g zE-$d@Qjh`+5>|l6V>#tj8jAd#(yd0nT}=bz2{+Us=H{II@kg1f*v7^uwl}5KPeay3 z4$(+3^(ZvUSeB|r^frR7+kkTZ7CC;~OG_^*jBFl{ZVHGaH4aAH>Rhk#gosr@%IJEn+kuh&s-v5**WPS69lS z)aZY+;V;B-8s}r2hQ%bsA9c@yE_Gl8)}ThI^7Ra%otCw{b$uKe)o|RG$Lu_TbKIdu z@7)PB9WVd6?8V+#($)w2zSVNH`-D1cxA2=C3;M;0lh^x#L>|h^n6N=x{;YlUR2jDV zxWYrm8JD>07_B{EAhM&81TkQK?3aoZCYeD>YMU~Pk{5;HLv>LhF1SMTsZiv0^58cpefKC{ z*t9^#m8PJFwo)J;Oz>7sdSw|#9j_J6_5EcG1mdqe{)bxUH#vhTX|6E__WW$F&Zu1j z75dGvFON{C+tS`^KrnKIed*>Su>X7Ck;4ATP)XLK+h-($Az?O1fgMxgiDVy{xd$r= zK0xw8*N=g&>aQz{fp+61ZDh#C%P>HKRp+{I)IK~AN|7!%-BEfQtRC&b6^%}Zo_8Un zzqO{}CbDlQdP1yAg}=;*lTs_#-yT^JGe-<5SjYFRN2rNZt)Dl zXlgl5WlKh2=Wa)O$3$BUFrCqCzL=U z?X`$K?>kJ(x101z)O~Ug7ZPnji{7MHpvLQn#HamTsq)`qnjcg`qv84YKIWxB^xX(D z)?+R{=cS!*aZy@>J)9oRB*@T%tL~Kh4?t}d z^_=c6G2-^#@HZCHVDyzwXSF{;&ekuTuC_rT)lfW$sU@DEi9ZkVWr6}wQUs9Mjs8Zi zX_Fx{+<_Qil8j=Y%zcrBneo(Ye@2uQQ-+GuAxbPTG%89l$&-|&{r(BjsED$gt|MTD znL~6^Mh7f<%3e`~iy*B?4DQFxx_pns9z$P=`@ypnpbWiw;K;JH&JS_x1+6xm491@oCahhzeozMu4M2-TR%3{RHio^6Jk|HU2r+*Y z%7DJsqXni43lq-!1woROVdnDYX49kfsWtrgGs9?=DFo?fRM(Am=a=AT1K?+r7Cy0W zpjTfV&)>+dd_Ld}R54mB<}&1MmHN7XEvVcrGJ2lgVIXy&^{y#rj6RGM7*UXH1^oJa zUUOh9#`$sXwV%&4UmUd3C2;UOowGRDG`FdGvX+~22M+JZyj)FI;aI!h33r&$dp5;W zcrobNe@k2+w2drSU0%mq9IH3ZaQpCb{4%4njSrNUvMK^&CYY%e?{gxgBrT#|Pt_5F zLau!4KQYnA(DyQ6_r#STc~Qv7 z^03tokGEjK)Ud1|3SRF#miqGDJ`o(kA)Y^mLb>v<_JQ)u!0-=HyzxIuE&t6YaEfr9 zrF9v8*jP;K-?IYg2Mlu{`nBoo`gRkhCuOo7bO=UPdEu_++?b{-H7p%C63OU zLKemM*Z7qkDEb5&V4@JIF+jb>b5<6!%vlfRp_*?|T&aOUVp+_lv~ zh(#jgk+?S}@REcQfK2`MHKu=bmfOwp6f&?Ywkh>-A7$?JC``2u&k+JockX@I31^lS-e1O*5f?{w%o1C-pf)`vV! z{o`<3R-AAz4QwAk*#D{aX#md!Ms zbtHs)f*Zw(KMIf?($JN^xA=v`{t7c?4p4>Lb_e$n2diiI(JAf|&AmY_fGN?D)1huey=AB3bZ=5JMz!on$5Q7@u{7D^C>Fdx^fU>;#p;q z>mEiOiiJMD(~X@$Z(}^E_nC<08jj0Q&|AM~j8oZ2ccnIHSt`0GNQ$E4 zI-vKlL)CTsR)>f!SOo_N+so%#-ObBrTMh*65?ew(cxJGOT^0}i`}ji62bwoNeOUs1 z!6QsnmNOS0z5kSCZFkVO&-Q4j+k|^nP~v8$^4Kp6$(m^|_w(|>;@q!p7oypg3Oy93 zZ)k&mQZ-f{&!qwJrPZM?BTOs=0MkqDMiu2Fz+KYAVC@c=f=7H>+37WQ4Eym?#4m<@ zrV+$4##Mcq07rrAe@X6M>dnz2Q!lPm$)Z%@DGOlrc~F>XbPAjNx81@RZ|iNoX2`=a zq*uQG#@r&Lv~x*SbbOUzf?_tcu~SnR@M zxNz|y)Bj)z2Ae+PKK=}8;X^oaHKGS)BVZrPKM=QmBPpr* zW#bPoo@%TEidxVp#p2x*lbFz)~p1yOHJ zsBiq1D&I<=&G7Pn%OQMQnYq!yH>URH6C!O2G*t8};Q)W@E-A<%O^f(xk94wXvYFk8 zgn8R4qo4c>z@ZHwzKzs%m2>lh)y+)cJMO7{O@zl4aH%2kk*{`N0TuvlJL9Wuu(V zsI*&=4?pcB z(rmRU3Og~qE2@e+OOS4yNS49R&U@k&{(@C0-feJpJwZPD!}wU2P3f!WsCidstt6k% zy86*PT0ceDTV#-jcDzg&-LOb=V8f`LfKeb~%ePf~Iqb3D<}Ke*W-gv0rHqPmx1hER zVhQEZL3VzGtFX*3j}QpQ$0aQ<%BGbnq zcYpFGBhjLfIU3QN(VR0f4?Qe=JOC)_>T#7v9Cv+a6yu$MI#!&gm8f~9(DUb;N8O+F z9pc7aP5WsA?n0PKtg=gQSa+7g`co6`QB=~VW~j+NI+=-~^(ett|KI1{yuOa=q)LYa zJpGB$z3)H6>>Q3dbJD(B8x;3Pj{Xwyc;Q*a!r-izoj6=RSX|gTJ-THSJcJf=<04^6 z0m!=jPM`jpn{ZER1B_Y0@?QoeQ0s3P-n(kxI#r*1ofR5w_y9*>ZR#|q_J01%N~r$4 zkeMkX9~T2vdtaP5m zO$!5*<4(km&TUDk;Wk);p1ESytzLI@gcRRLq*Ku~xX05NEIFQnBE3r&@d-rsdm4i) zjOe$RMPG&Q7hqIm#Ezd*R|Fu!z<4S@p%M+SA2EF%RpT88f?+)R0=OMfXvo1jera~= zHj+`PBf@bjnNjQ*^@QqJOib_^!L&7f$NEMhG8VAGc_+>+m~iC5feqky?jepWeMXr8 zqhz-5a~{~AJ?=gyn}>vO-DkOOLEDtPWE|A})gyKsPZtUU;$=w$Oi?%mR_>n_FY_Uh zHX0aSBB4|vJF&1oSIq$LWI&Y&)^0?*T$kkKN``*z6;m9$@muJkE!{K{rt?+PtZX-R z_yBJ2WeZxB1AykiYWxLgiYD}#jeX9X1Q%L+%0YX?-4_vb73_cl2h{Ei=rE2K<13dJ=+N_{tx+mJ*QR2|u;FqZ3EjX+LfVwWIm^hLS4>qt+4 zm_d8!@tjbR0#rM;Av^c3`wM5}Ch=T|ZDlM=x{rLp+VXvy*?;qkG)V%sK zTz@v{7$?*H2Qjq#rRsX=35311{qoM9LIY&P5wNPP&>z1x)W5JRox=uk=5e8W>Gs<~ zDk<&R;c{G%{S9#3UP6R^8=(WHM*|Z9m&^?jjpq!5tQdEO-G+`Mj~&g;Sd#mX|HDa4 z2i{S&FWyb${T4G<)N9z1u+IK{Xgg%*&Z(l57G2|U*hxMrN9QDNXv`o7~p!}T2+k`#M499gH? zAwtom?0grVvdCe!Qhujp;wZgt}{-)GfayTbQ6>20S38Fv&VM!wDv)Q6THoH5(y zK?P&oSD*!f1TUZF(gDNO=5`t>Z}}=ASA~BPR#b(;u|DTB@8er$(w(zc(Cur=Lqs+1 zN{pXx+eP*o%A*$wv=EN4bawAOuYFC%zIj3*Gy}MOv=B2A7PJV^mE(FEjN&8>VPEjc zXzkvQhIe=>eeFdQ+L;-rw?LeGOjrPx@}~STNa>JNc{LVONQG=pKbJE(3|2q{5a=?= z%C^x8pbjNqr?jPCWomzCx0iei_*9)g&I_um?#YmD(%gmi-$KmF@ny6G>9BLw zDuU*UgowHf6h@?P_{q|CK1N@-J_S6=519K=+G0m3G?Lz6^gW$;g-R@~T>(T%g5;@1bwg*h0%b|`gWp{|^PD&ifY#n%Zue0-nYM0|?EF~l{XhI5= zIsZ?Kr03-_Me<{sQr!>4PE)brdxe-iIqz!Hnd$YEgun~hM1p`Rb%|tkA-)AMG3CDJ zIOUw8C~oQQ194nGM?!tWqdJ?wbT8^VdEj8ENKUd^!q)5A;UKDW6Ce}5xPV$;$ZM^$Y%x-p6~ zfZCq^A77O;;4CxJP{|~u=k7gBSav95!s;Rkx z18ulPE}uWYxW4W+WKd+@iTYe{7(@i?&kDQ$av7I9O4Nq3@5zomqQ=1~nGD`~niRDE zfw0To7x$3|r;gmpe*#VT*T*GCj?vSP_psyZ1@7Jd9x$e-dr+hIF7ZH?ehQ$fp9*-K z;va8TfO27lYW27k(pC7Lt^%x`h~q+3EP=0Z#nV&yQVQPzG(8Q`*2-aI90o_b(kc3y z#c`cOCqoSs$a(CE!3gVDM>?jV79XOd(m%z2fTW{3HA|Fy&nQICa{#2)e>xtL=3W0U zHzce;Ul-iPou=N_HLpJkVc|XhxQ!yPjGl??qf6}ppIy7yHU$U3 z3X;$pOj-0ma)knsEdVt6MQ~h}+01#bncfKeA7_MrDIq}yjhhz%2SMB(9s#%VhT zfPbm(y)=*55%$5BYe4!}#K!Lpm$AH?v}-7?IK=crQ1@a{n2TQ2gWj&l2lp<7F9fFv`A3Likp8%X(rG2h2Ft~~R0Hz`b$t25|}v3h)TiyhT) z5h!Fv@tHZNF+u2ysMN&hBOvO39|LR8^+WY1&}S8^;@2aN;_#df`QF8k#Rd8 ztXRa90(uDBhg@7-ko;LFCB|-b#w77m|2Kb5Kg& zH=7Jz`cTb6x(C-oCxC!8pt5a|0#}5p9Vk*%y2T4bopQHlK_d1oqkFZ?*brE&zyKz_ zX~XOD-!3k*p|XezoKWU@r99Eeu8mzyd2{=I3nfslQE^G8Bm)jZc*_N#+DU5NR7WAm zlLQAu)pnXf<$WxE;W68x8H;oqLM*xXNYcYlliaCnj}$Sy_Xd@a0@{)Fm_=)*1^830 zPgscVlH?@U9!}k&e2QUoZB1V;bM`7Iv-rPS0QGLo*1u0Xb5RMxkDKTVTVkHSGhtS? zz-c@))9&$3ga}NR<2{vIJu`5GfjU7P6D z8r`(uGc{uUQO@EK%jM>#39yvg{#Ct;mj3g2W;%`A4}yCfD7POV}ijqf5k zJ=ePzC~6$nr-;N(F36ar{u)RO;K}AiEmfCu-VAP~_0PODH zQ1g>avV18{M!#0vn2K;5aa?3M`i;Eq^z)t8^GQV5+dEXppVW0ph-on?B0qkF>Z5)- z%aOC49$9iQC4dJ&0@vFg&!q+11mfP4lA0)|#$JJqW$!9AYyU|>U=WMXTbMTZA<`m* z$2)KvQ4NvW(MFRZaaYpd#c2w4$~FU7*_33Zn(2N-KK1mf>A*Yh3twt08PJI@*honE z<@4+hJY$L!k5IOD@t8PIwNgxhr~--Ho>&PkOl8q$e3FsDChgDeF}COA(_y{)Jg8aW zVe_&^U$vyvqL@0XfyqQKibtb`%i4-?w#~Lc+S}{Dpf&Pj`g#UmLj-L7`|_?56wNFB z;OfACA^IuozrhL9D`f3m(~nmD)X-#h@I#mH%~bNMw5nbr6=wW^qwCt>3xB`9Psd%0 zgAxw=^t#F6Kc26B(9B@KX!JtitfxKcyC-d*8MMFr5=3Dh6+^D*eF>n9Rx+>zf3mhL(|$MRsR}Ki-FpGrFv#@6f)BFno z!QXpOS|ni&C`!B6`-?y)&ffHi)kSiKtSA-OZ!9Kno% zTe;uFqVz41-gKny1JW%(fd-my0D13oaIAhqD1F?Z_n}dUGyzD*PZZ3)>|!)zJpQfA z)J0O-rvT4Z#ECGhClHs!Zt#`^3m`hxA3itF#+he(-|ktYDExx{k?F0(mbOa2?U!!5 z78fO1${n`RD=Jwn16nqz5fw5U-W36UHykD=i$)iokn^;Q^&^R;#~AE$Z7V`K|RWc;WHhc8|<443ysLo|~Q|*d#k#;KUujQ*}S11tGb5uxZs8g1PNxmH(kFT+63KJ@kloVE_T2{?)Y-PVa=ljaM?y4 zj5!pes!<;)+;$DZ!J>oKzxq>sH9E1zuQN-3t}}WCumlJ?^pxUf(esfpfRpL_!*A=I?~(0TLv!*cbnb_DFW5uk-^6Lt`bn zp#SguP|6yM-%xp^%sTtXLFsvHNviWY<9F9%E_(I*%||^i8o`RsA8c9%?@}6jfUa8s zYR#q@)NHj|keR<#9tl$tiFz552X|}^VCDn{*xna)qWtn;K*s6VTW^QFKzZd{P9Sy$rO<__P&`pBPU}W! zZ!PKG7FUmGO)?cajoxbr`k#ySo8>Lj3%}SxqSFK-^_pS_fV)&R3X>x=`zPgYx3ZVI z_Q9@&T}VHrbG9H_teKxm=@wZ^QyY1|zz+j!ii-485MWq=26ezfJXa$)4{>0Eb zh`Y4O(Qe7w@snedWd^ee6kYW5oG-g|w zJAh;IS6mkiU{c_K$jJK%0;;8DE%yZ{Ih~1E%tO z)FbpE9?Ga1-|xbJ+VXd0C%*GkNa2wtDs(RAGm>jQyRjCvAOZZ6qq<7xH9kdYg6q4l zH=RZz>I;Z0?3}eKs>vN3`?ox;B!m8Rx{A&}qwhZUw3cP9x%uAm{LOOnN_V@L!Ay16 zwLw>Xy&k4r4qmO)dB@Tsp|m!Fy@T@c@)dS5vP}5lpfz3US8@d(@d8bHBG1p!wsla`*7ObYj!Y`?b8H>BFGPHJ>LGi$(Kx~jW4IewBTQ;IQM zTByZojJzoS^p;MMCSZbM6}o)7OWr=7*KNr0}RLV6t*ObF!)|DV!aja>P|oPcZ^j?q-`LFZxBD5y4D}w(Z2{}-$Q~wch5q=OSL)JG7#jHSp&%~5 z;za!q#tj$U{#W(jOyIWX#`*RDVL+b0vrJ}G*oasRauxD9G!!^(+JhHc_36;})|2o$ z_xqCH|N7G=%So%X4CpRror~A{Tq+Ru41(1|%+0o)zvhH`IC(b_3M84#@4CLxiB&|p z3?s%@bB79}h-8n;z{TAuJZ@6GG(NbmmiOgbi*K#vn#i_TX)y z&vc0>)NzDdW~%k*CvkS4;h^uU4OY}gxg`>gd@s?_Mej-xIp6UTLB)j!5)^0?f zLEJe|CY2N|bn!;^GR#)y%M}3)3X;(wCe*RvQdMRDh?ys=!PlX7J_FzvXy8d9e`S38 zr4`wRc?h|#q7;|KPeE=HAdkPM^PbPy0MUcOU!edI1!k`VXkQ z@U#Q49Wx|xV1$Q2T(pA@ZmZNozKPmRM(C>Lf_eYj?wHqyQ5%2jy^@sog5c7B77=&0 za4|cMfOrd(k(s)IaUh(KRQYukEv2ax7*{VtuUNsi==g75EpeHSB7P#Nc$`{5Qbiq0 zG*QLq^`0aIr$f1%kn3;EUje;s-R zg$Pg*E*jwIU*1QPcWIhUgH!hv^xh?wG9H&%%a_V5^?El>GCO74lm7%+PAH)moA?wh@d52!o$yTWe@E&UeXiSf6DDe__U_kKKmL`v#|ZhVD0 z+h7VF!HRA>=vRpta(meRuv_C5@knSW2fFd*Fs;(MBEl7&Hk1XW{Cy$d36l)h(p~}v zh>6y~1KxC)#Vu%Tu`zNI`ba%655`#Z0Vh%%E9D1+dQ_DAP|*HNOH;o6<@9DK`VdAy zaGYXs?V&5PNYt62z|qH#2D3l8=Dz|@vg&-*aa{``0Br{FnF}B@qJ$d|Zb5_j3yMql z^1~eOTktV*`+qQ<4Q;ahiiyWDb;e+h^gaJU6$wqNT{Dkp4IsBrP-SU>d|KFWoQR>2 z3?KY3(N;cr<^A5FX(rUvf3t_eBMDuSgaprl0W69A=w`~4RHHF85%x3`r(nPCtapIW_#K5`m0WV?ETf+KfhM6D-k9RDperz<=o8H%e=fSlOp^K;@VqFCNdd^0KTO5%g~eYPcJqVUZxx ztwrQx6+LvC0Ee;t544kK^@UR9RV#r{J&7!m_!Uh?*0_Ue#^dYB<{|PnU-K^+r`d=i-=z^b?|q8mQkKyxWJF6#nsJ?r_&c zIk!9$po(6)5EE?9^%p=i#ztY|vDM+8`^&^`)2r8rrArsejd^o$f7bkhYZRimg4d2X^Sy?ab7XB-^ zb!DGP!=kdy)h)zgOadrb=Zh0itr)XXCSmpVnC3m!fN2pLCZY`0Jc;bJ;P1mwaU{d|OJKe0*LE@@D=OLzY3 zXfa_wWE8x-h}YduHg|sw@%TMc4x_+#q+Tf(Y{h)A`9W#VdA!wrfWRJgfdjEdyDZAar-*9Tqy0qh=QB{URA&4}SFKKmQYPP3AqJ zI%N%2_YX~jY+l7mdRnpj{QEq!11wO~>ekX{J{m3dSX}3}gGlSB-Eyt9d>`NTfO8oo zu%9w`f659~|HR5@BMfHdP*wsxAvSispZ}Ei@dpJ%athKk33Ckhx^qAteU%&z{JQ4= zuIkzIJfaX?huI34JgH0ZLnkpPaP8LWXrC}Lc0v$oXXOv+n^P+!u6jrlw^N;SXz>97 zaT&hH2rDR#M)_+;2m_!I1B|mO3sZ-PsRbt)qdVXH(VZL~SH-7Mn_$qK{C#)D$OEWI zF$5xU1FqdxUj?{ik(RiI{S-260!kiyoFO)eIkQ4SbX?$My-PX70c9(gp(&LWN-1al zOdUQRp|Pv>XFXGVDbxgVjKpJCRXEHyzR?+oeaIHEXS*Xzf2C~8GvphI>}U%G6*O9i z;j=2lj=O7pc&6Sf?AM+mo2l+7${&u&o+5$LZ(3S~*G`!Phtb4ItRN4k>vq-?cdBYV z<2&k*pcW}|_2uh1A>@rpjW6wLJJ&QnPW?^ZXQh%zrvoBeDbxQtCe z;PV5*hcw=OPdrwuXr=`?IZB}i#Grne{!SXJexkZW-CL6njzXXkra6fcFm2sG z@PvYeozjqcmqIs5Obg9OI?d1iQ+A&=NRIA_XHlf+i89PW=_?cVTmu2SIL#d900xjl zr>UXQ&>>9+?kHON`HJ9ET>fpt)u-Z6yQ`4n_yq~_dn=zu#L_p3z)d(SnA(-1YKy$@ z{E~plqCyy$A2NzM_fDuZFQZl?>hv_|yjsr)loiY_U-mRLZW>^kY9rLjAwsZs2IC+j zeLYcqfD60ex=-(QIiLj`gI;9FO{15t*5so9SGJ*Z8VH6B12RdFjS77~vl?`@@20mI z+1G_6pu$59+C40r-7d@3`a9yDf3-KglfN$l z4~D%!7F}FswpOw9L{c^+QNpEPT`~@Ac=$hU7>izCo^VM-A&ZcN)qJ0`kxb)wshBQ z3M}T62~vgTPOBj+$9eVA#2L*G@?97r$eIcn(FK@kgl#zsa4&pREcVElZe+9j&4xUEj_m zwjv}j<^E#x;wA&KP!zfJ!|(WKQs4=BemDC>W*|sEdhRf7Yu~f+U3Y>G`a>{xyT}#( z=c~KdJN$)CPYU#v{_6^lo1nV_JRwi5L~!^B&ck%9{0@9>P)A_8G|^V{Uq)0{HX=bE zFlH`5MD}#Zf`XdNLyNTkIl19?Hv=2m z%|b}+7k0ncAGzF3zS{J;N1j`t9?Og|;WVi6GlYFl99!<*zJ?pP9#djlS-1JdHHxwO` z^z3eG;Dyy_f;SjiM`c$QLj+@Xj;<@+GnFV}Wst(KgNHR|{Ko4F>2$8O8(X~NMm_UU zH85+TxDG@k?)S7YD_iLPC+vwQ)5!k}mbb?sFq*$7c;)S&@ zlxEpCMiqa;9U>oO{EaN6yO6TSA!N8R5(w-6vd=For9b?dCG_3Z%b+6+;X0sBc;0^{Yjs3YV_6Fpndp1D7l}2W@l3~9EJqshd2ZF0NzkbN-^UmGkzunO>97AI5{c^0IfM8EjieDeVl1uhLL zc$(g(330Oj1S=WH;HQT+0**tJWQ-;O{wawtJUp%UJEU6uYverVHJMow(wMr{|LZM$gwr_ygj&1LE{ zq*V_7lc$uzu`Bc0>ybXqbifNfL_zWEpPc;|u-7E`{NvT2azYC`B*zmlKobgI!FDhRtk?n~q2b9_1cZg^k zYM{{1pC-S$49hb|E7;|~f)GU+09^l4`NUJ(rL{E>J_D1wKx$7uuUP; z;efZP$wsy>cGlK_4>~th{ksIpy-XqMOT=Xtd;=XeWs(1QUFE9SB;b+ zxf(X;_p!^TVG*R@3H|BO7Zi>J#omXxx2;WeKhD}P!T6}cdrcyo!|*!@MrR=NikswZAUaB8a_^OQ9h}x!)OJcLTlTbwL3|*%u22 zuWXKxBeU>!Bd*l+@plg)Tbcrt%Q@;9#9y00^6U0sD1 zp}k5>U`N$mq6kc$B#b68T0O#dJQ1=hTy0N<2Cr*bb?Q1IG|7qkH%R>dLD~%{g?ki8 z6t`Im&d82Eq8A;L37V0N-9w??B)$c{3%BLfF0W$PA2$-ReCpVdy$S|-2Z-tY=$HCR z22x!(T`V_LTvGFjQm`rHeS(G_JQ;6J>;VyqhBqC5z-#6vOaits0>(WT4ra}-XQZ7t zi3CJYY=A~sf+ZyrEG2hImzUfMhzfrE;OjjJlAFc@EdjctA)51+$Y@8ubZHt@`@VOD zvez|Rpe1?-=H_tsuQ7nXSsdl0sKSlndQgf|lG1wp>hgoFu*2PGh#69ug;;Zq@6$KC ztEod~oQzbBhJiP~Q;SSc=o(TI8G$3dT=vDG=pZA#X8aTPTIhY0%g_(_(Y+jE&WELPaw0qoU|@Ybw-n zh)Ri8+`27Z)==MG{S^n;)sXhT1|g*Fqm2OD*@NHU0%|^xd z!=}-{{-sk8zzl3Pj=z~JvT=)>Qd&B9kELL;M^@2bC=V~NEJdX0liBoZIYBIK!=)hW z`3WaI_112#Ogqig5%*`9lU}$(R6k>XR zf1m2v*16bYde3y9%9U--vZg=qj26!sNqg}JFj0K91p0XYHZ-$0E3B-AUHF1OxApUw zQNfXldgCVpR(!3-IUk@IFyF{ShG12~$lh3J*V~7$3byBmOzsEW>aR>G1L2L-ya_}^ zX7WMwc~GDmy#QpTHSeBtr#H8*#}BPkjii$Hthx+x7o%xOFdaBoH+Te?kNV9WJSo7V z_&Myhr;cQ*1>1)7z*UQ;)qHH4joat@?w*s}-Riq*uaS`%8M+&YAv|0t-ebdh%z()D z_mH3RvN0-v-J#=vpR##2DBe*S`fo%+8o?Z@p2@xI9Y4<3oO_f8DV@&l6Oy!m*Eccl zsBo}*77=D<{`1pCGCE@NKQpwF>&7tC(D%gYQw{2@8G6YqDo&tJGPH0y3oBXfk zez88LeuuItFUT=EwYJHO?>*m)+$_6~Q<1GU49)Y_)P5PlN64c&|58U=*L&bC!N4Rx z<3KFliMhEi;=NEcrPL?i)B(U)>FhDy=!u*=L^RuG8H>M-x-8`QPOmyqgcvHGa~s!= zKkbq04;8*|;IooUm*Pht119gdtFw5xO6PVboB$Eeu z6aO)DJVfJ)U+LQLH#cB`uekh^1o`8jOt6wWK658RUW$2qWe2Kuqby~G^u?{Cp7i-H z1!G|X(LjX2!`r>TLGRoX~qM=yIYR^-=GpZ>7Io3bhWCHRwo`HV9mn2!u*_`gO}a=KIj=_ln7q3 zfKUKgeEO6M{X1D1{exk>pL$#4b;Q}?7Ny-~1x5QgN-8LkL|~#RTCJWp5)D1V_=grJ zC~-HnCW<%61RU}ifL-soltxGZ?auAyD30LmY*3B(`p9MlGPZ!#<#)HFO&~J2hn6{Z z&E~|d;3>o;8|thMWoUOyr3BOG2aQd|_dK^k##*f(eO?@%Q7lG8TsXguia#GAj3X-` z@X?QP`tj9$03i0%N3W^?6?Os`w>_PNeIg4q$PYrl4ub=29nv4V9FwuRByXb$7?FYqwi?|uD^OHw7g$l z1}S7nnc~xZ{%@i9q0Dtm_=P)9h$iZw%BDb{34+Rg`1nt<(`XWKKgeoHVL@{`d;%+c%GC1b zgt?rvG#e!yk8GEDX2h;)f2%aJB;i|}9+41DYt{`+z2n}3Z&3;xmP@HC{wb%5+?O@) zKyy?k_h(I?aKrFIqz81=6-pMg){$|}Yt~_6=cgOwQBjhyh;SFh0 zCu`}q3;5lW%YS)i<2=@dbhX79frY2%GAbh%&rLNF(`>A1;S4i_ws+RXTU@_5h5D`O zx2;7y_YlzHb`9~qe_dOR_#<}IjeZs3Z5f#+R)-EZ(6hw5%Bu?jD`Fun6)zYLlT9IM z^y@@b$WYIg>KHoNViKOZe^e{zsCiFB8SmEG4ZKxB)HzK**xu9$-GV2|5bbJdae*A|CMw^qH`o+4*qc2vPLO$v%1Ud#}``p^2wh~yU-@C#Ll%=ub{*!g8a zH;#~gPDKT7A=-Ay`_L8T1}BPO9y`qb*IlMY@F%6gnS)dA_+HS!yADhb_?U>^Rrb!< zlHO+K0>-2Q)d@Ig^C-yt_!BZG1&H&E3gYFyQn8A5f4m8~utBOj@bc|({WotbQoTvM zDempMru{GfAa2yF5KDGj#-nCU7)Z0%gaB#Dn*X9UKI;N6_xm}%7|6n1Wwkw=+mu^h zD1fT}jl_CXsJd2D_J(NXXGSjvX6xR$DZm+1SgNE};#;VmdUX`26x*QCbcp6|P4(0t5ShVpu_~Wz1yld2j zlw1TRD3_*zgewPR@t+-R?v2L;xB@XJ|rh;+;1bsT|`MQky}*% z6*40RmbHA2AnzR@lL&haG6y8$92;H%B!&%O2GwGY1$UJ34%1NYYKD8ZA;7zbxCbQC zVMn78hBPt^$^maqt@7DU`kLt7Zm?aB0MMZ3BE>b!Ou2%ntg2Sgu(?)_TfMRrR;3PA_3NHC|?{ zUWBXD)IcWo+uN?UPSf9R0^!qlDU?1GMi@dr8kuVA`~rK$SnwpfPU&aw3esMPxw5vm z$moOYGYJRv@8>sBf4v6N#yDFUoe$GgH3{hj(mi}ZYtP_{%&q1jY~a#V3SHr<96U?a zk8&FVD@xGD>D~>v)dkGv$G6m+J`rNVm!7OKL16n{=r;dQC>w07`MR>q1xE z#Kxda;Yj$-QhtK`F_HD^clD89vpAT$wpv;uU>F)x(TzYodcKOOT15Hm53OEm*v;S1 zPG(#1aWD77EvMdopq}=K&#~Hhf6_H&#ZgFX!nVLgZ!^WGv3#eN)_&yU?ts|JPe|>U zO~?`1qANXfv$)HF^KBYPT{$FA8fse3zsH>-jPfP{SMdobrM!s$;c7A{p|k*bQNHfo zIm@Fme~a1f;?peg`#&h~1!p7Dz!K^eZz#eHye#J%Mfz)$Nto^)+yeeLRiM2XM2~hw zh7N(h0$TecC2l{MQC`O=b8qX%DslZ3Ci-S18VEsu%$#@1OSo55^E_mignpQ5PHf01 zOTA3#Iw|`6T}WTc`;DpGQnb$tYswT@5tnw!%cKH4+pXA{?$L%AdZR{$Ezy&b48e-N zf>lcW5^W+z$MOYKV58?Jc8LB0Ej~pgnw(IIq}%OHeKt)=z4j7XL7FjX-9T~0M;zLw zLhRQ3ts8|+4Io=8jttj)w8Pn3}e)nUZxtZm|@jlxBkGjF}A>B0oSRv=+iUQlTp?~AS zn*V;5ku^*^M)jXI2ol$?Tkl=^gL%BfRASvRdgw)M@@G^=m+VIFPN_{|Zxf2Pn3Qij zP*A^19!C*(8Ti7>$6pBkOB{)Y3`ef3j{$3>Bn#_7;tAR}d#n1y^TommLJLmSpD=yb z%u>WfprGDEuAL_on9#qeBRGb3x(C4(aB8`btyZ{Ke=4o0w|feiQw2hw-OYLVj}#h; zeFVx;pAbLC0NAham>C)jr$j*G-f*h;4n=?YOA=3jHCPd_&vYvH^~N8EdNuU`7fL-1WoRy+1;VzfgB3pTsFV0H@?fd!Ps&WUNXJtdQt%&}9biDTf*s zxN^JoX;Zs4Z*t(ZtJGHf>hZfFu%14bxs(FM530!-E+Fh){6$R8&ucPR4s%*`NcSIN zPAxm8dchd2`}XOVcBV?6`_0v3<{rdqd8MpW$^Ga(|3~z%E_|-(FUl+Z)^)>m6psj_ zR4k!OvscKN6Qostlv#I21k9)9(}&+7E9CA-Z@bL^n8^iTNTj-xBG%fd#*{Gga*pu( zUhX|@r?PfPy6jS1+DK*^tc9YV!!dr!KO?KVaam#yJ=vs@xGpfO*ZTGS%NFVDT zjdfp;=5I&}7IkKuJSiYSspfb@mO5K*7*|N|dmq_(H`(>s<-KT|ls$w=m8mGZteUO5 z`>hD|if*g8mxSF3_n_5Dz*p1g8YabmJ@BQl-x1Sz;DsA@y%GVxAyrc$!Jx2T6&1zI z!2JNpHjaHyU~cvV(YsPQQXYF4ua%x6nK9UdFbZAMTnDPfDdi*LDLx00XAN%gzsyho z)~yXNDbnxGe=y$)jx^t&>>E#0=@Qw-u4A5I60gaM6x>EqOU^~nv?ijt@kMBC6fbn_)Re!qC1Xan31zA$mqYcI}f zO+!~OAn@zAub|eQ`xz|IGO1LzLu3oy7P_VI7UD{PkT6Q|2ZePDzK@wV-dtw`EbmV} zohX96W%yLQl>Bw7Nhvi3kVXwdottQ@_k^aqVr;T69#p`EXGKDr-6MOMWgv7TeZZ@a z^kSuD-qtX)5o9K;NVD4{81~AY`ZtWg!U=R~5}_*ye(v zX1Dc4?mMicQ?tgLmz>a4E?aCT7b^{hHSsM>scW}iAVetu6qx>jwtEj{5fEEM2(Mz* zqwi^AEoW96XG>)r!*rLq9YFucYC0v*K&@9@k&k;;{K*zysHS)CXimlXnH>;15ir0S zE~N#ri$+|Nx-Wd{xq2>0yNK$kbjlG?!=Sww=`)u-={SLtBD!0oHtG-6i#o#yu=r<7 z5bXQB3V+kvW)2P<(?ju^LCNwbkKcl;-XDamU1G0BJtnQf3bi_R^``lCVRiF%>MbwK zdp)b;uK8UQjR#|TEA@Rdk2?1ea?QQg^h6zfIiH|lF*XGQL=q}#j(-bS-Nkp@Gyazcq+0T zFp|CjO)I*Jw(Z*P!v*sbtpLwvix*ov%_h+?w-&gcJP-=GS+R%~n!i3&1f&j$cXE<) zzey=O+TY)rRFe+aJYyjCzNo0>WJxy?8U(d`{fFP2MiXHkREzj+ip|3WXD})D_%OW# z8t^@OZ6LAk{wE<3s4lV{91m(DtQ#syK*n;DUf0b?_1_J>aVVgIVrF8=D{U|1-u-NNX&g~=@Xbpq5X`4=)rt3_>;Ie5>^#3`7+s zq#$6Fp#N?Lbo3^A4sI69tja8Qm6j|2M+d6QH@*Ps@Oy9Vx?u7jzA5?>a%|6u#doxp zVU%uSA9a5IajqX>4N#3{R*AI5;=#Xd4olr0ar`llxDSu1={`zOJ8nB48Ok83OBql* zD!kx;6Q4560?hIsjZQ>W+??_fKb>r3-$t}Cd1>}_Zdy>^igmMZ^tB1yk?5oo!pSyIuo35+^zD#d;&?$aF6Kw@SOGmr@rio1r znzOI&QGP%I9#=!1WuS|>>lF~Qa?g{c?^>!PnWXr>?E0AU+@iU?Z%++`q9A^D_q;`f z`!D%FvS59pO{8T|xftX9+hFVLSkHZcs&-~B8ay1(UG4nruW6d6E$70>-BZAM!=PDB@W{qa#W*gem-^;(?N z{Y*9&QXEcr@lfR1R|2Nm?P~Tf$`B*;bMmy`esmzZwUTahT$U=Zfl)t~UiJO~o{e(~ z#ET|@R)Nqo!QN%m-SgM2FRYg}0Pl}I%Y3ho){5-ETbd~@fQL_R5)I|{yNiHNw`q5P z3F1E|e3x|N4)?(u;;n;>=^tZPnP!2(=kd@lVeBOINqj&S`m(3ni*Y-=&F(XK>4gyO zEshN0v3q$th1aTW6U*F*!{`~l@DwCD`q>0*!*62p8@2ek9w2WX^^HIkP~eaIRhRnS zPAaNAg2nZs4sy3JF}{8O*;>Z=i-Hi?)YaeAjb405%Ok^0(qLBvBBRL0z-l=N?;?Bh zC5F4&%~}MwhYb|kOnOQ5sDXONoVOX#a)!32Q6nX^q<*htyrZG+6+Db~pa&Y51Zq?% zIWT2@jRl}%^Rj1pTrng;M2)+vk~lK%eVaW`f$lW;8w zggWK4KT=xs3l?+uH;1)A25eH)*Bg&PsR1r)2~#Kqg_F{NKh+*?R612 z{^EN0;5{W!S;}s8q_yI#?i)}^`QJl1GE|~D10|uGpQys?5X%U+*CMBYtq!uz*$0+V zQS#C|t`EBY9jI(|JFcnv-^q(-U3$w9TATbOP;XovmUqVEw*K`Q$f@X20X%_g=N~y$JG1$u z=YhB9)2eP^R>BdQN)af6km?_1KRzJl0mT?jU}W_k^Y1GhCf?hnIjbq%ccG*;a>YV6 z_DtZC`^mOfxiZ^GFUnCjCj~f&zwnnhnu2ruqaPg$#+5J_(vQ8rypmC|6XTy@oE!RF z6v|EqJm{&Ys#yW?oOk{MyG@za>&@_!ls6Ha<#I_{t{i`O1qIP_X6m5OX5^SV_z! z`oVEUK~mmu{a>H*R?jIB+0(+Lz6@Wpx9Zo{27QeRQ1ZQLe;+Gn*rWlRSFlcqFX$qu zM9|RJbQSAPz@l`rWL8inAv%*GmDEYaJ1fzC*WW2ZZ|35=CdlYFL*_$yu?XScQr03j zAm?%g9E3l7UcOsBTk(~lxzStFf3whKB?Wl*N?@2&4itZLUxp`8nL4TznkNFzIE+YS zS0W}_52i$mOA`T3sf=lEapD7*Z1FQ4OC;PIr^ zDlos`+k1S<`Ohc>c_9VkmXRi3oaZt{L_dSBM_*!wMh~F)*=FG&{UNF4m#tMAc6K?M z=?Co7V{OhOF^pxGanUL0ir~^fHd2<~9_OQ@M(5JCmh9x?f6@|QMiPww2(2XkqAR+@ zd-tjL#y=GMDg3JP-!w?(boux{Sl0rRj&Je9UXA5)LX2O<4~BX%g@aH=-LZK}?fg!z zg7fT&X{rboZ17G%iy2L#wiIL`r`K0Gf%a0UUKuNJWo_#brcbtlA~QH0k-FcXZByp&Db!b1K!tfd^oh6?#73h#CCg%| z4X8Jh^k?W*OGMVOQ8XD~MLifeGCv1~;8+52hp9(}d%@IODKDy2ZTD{ZB{;MmI$E-6 zACLVMfPPM)?gj{FNYAWBl^K*E;$5s8hq~hr;O0xWr2hd^j&!;+<~dJ_VC87O8_QAg~&wf%8;h&BnTBs@hMpW>txI^p-nttms?o0s=3p>}Z!G zY=7IBo)edV(VZE+zNHb^!Mh^xlluvgHV%SwZ^BFAEwm&18{wGKU75zr-}+V$bDxo0 zQNzZ`;Zv^c(-M;ksa8DD9pVJ#!hvB9?B-uFqEGxUsB2TaZW&LE3AD?zFP8}>(S5#U z%w(1&JJK>k5}tT}@raUy4A{#CZd8N2wC+PTF)}FWtesKHJ>1Uj6`5%Hv(2GB`h3tnS@bWUgrR2h-DHXl)Omfu!4B@%&F%a$pLm{dtBhRMj=K5IkpHo13< zi?cBm{r8gUwBpWji#5cHyc#c+=H#N3mFR)YHJDh!%Wj zJ&k|-dJ;3{@40+b%7E2RTK%4N@k;vuP#{F^W5FmZIb>hjuYTfy#lP8TxZ`}K#Wd$q^Ni+)TFPL#=Y1Ud>d`=|QUO<%QK9Q~n=e=`3;5&H24%*mEu{gdJ zYAqDiktvK`2il11Pp(;q&LDjA*FVs`?z#uI^&r}!697BAI6unD>PThcWMh#gjX0C4 zw=^I0xEIzJjzdw7^2*vndU=vet_L42o8l#xxxCj+PBms`AI4;}exdPZjx2rOw=!z} z7=Jy@xu}i%Qh-VFU5RZ5cb?wtD(4~f`1mh-$xl=0xmMwM*FUemc!MWwPDuE4+|nFw z`{LqgWL4(HwxmMm{SA^TJxnwrn0O1n6ZYMS?Sa{-I&Q2YOS7?we}&{rpmyJq_zE(7 zSo(9T3>My-4#XAKBsii&KSv5AJlRl$7I)1l^{ijJ0j}D%UQ8A>@0jHf#p@R^v&=vD z4dbke8h#e4TG`o$$fjB?qve_O^LCWZZ`V!pE&;)%$G}vFVcmWN=FvbGr0er#3C;Lo z5(bxl>fnD6MNG*l}2YByq{pTN`{c_$9il7ToXw^gTCwLQ%ie#lLv@=zWS<6-?2HEesPof-JQ zszl5I5A)>qb_Zw9?!VE3MMK6c=O@w4)IepEZ&1o16h{-1~#VP8cN&W@C5{w_E#14?rDo)bC{+a~6C@R>O zr-;GG9=*d}BWURX8i#yFfo+?JuBZ9Z7`;#3@snrKeB*pvlYK-pSX%jaux-v}OV8V5 zw=WbAv>w9Bq0TnPb}jO8tk)4Xnp0@=vf-aM7+)Q<%3QBfqe_y=h{lVm%kov-+lMdyQb zWZO_X3jt45_gOW2N7A45ti6oIS?3qHG7X%cK(LddZx)!)t|P2Ho7d1rV&I%0^sVX= zNu{7|6Op*2c<~>i1!ER1|5BT@;5kx)cxCddHMtH4XVDxMSTl=lqJb~(cWvbb90p%b zJ{1_d^z&U;>vMX6F|QhyyH{WQX8k^xmdjOik1hI9+u8p8*HOJUdN}TNRII%Y2u9r_ zA;H?vG|(J@(wFN)U+J~u!9Qepbz@jk+dLo2@+pbcC1or2S**YgR?b3IO#ysr0o&a( zOb$Iyx1;S8jz^Wfo{*b?j9wfOeF1&rPVh2fe-jRT-0FSpJTirn=?0tv;B^~WJ_eui zR`s-}f(eMvi>Tn;53(`9y8p=w(%O2o4%bFVW3|WnwLHbskDRVm29%Dpu1EL4te?L@ zL;@JPm`e$}G?OhOy5s#vBM>;!uSt+n5{@XVU@>j(0K21sGGcDcCcNl@W_W(w^LJ#} zl7gH&f`nGGjORS8+I_QqiVNj`Bi<;3r>V1Ex~jEbyZrPUCt+yj`N=4vNh?h#63X0R zmbZmiO->B*KiE&yPdFAOvAZ7ctuvfgeHK2%!d)uD9ONDJx$*D~Dd{aZJ}t*1)`N_H(1mw*T)Ge4X9PMABE|82H(rN? zfmSEL!ab@7li%7M)s}*n-m5vYE5Qw{n~w%;IG<1iF#h>ojYoH<30M+ZOwW!$J{|Y^ z8BnD;<~UKBs6JP867wVKTo2|d1=>CcS_!LD`aAaqywMJE(4|i6h!QK}(Z)Vn|=Rbxs%Vxt^kmAKSHdm_IQIu|=b zF2$i_{sL43EA{BCW=DepH?1i}@5!&_IK5roGQeXb;tqHJJQ2GD21%vO-Em6w1D}4| zBEYd`WsQnYQ194nDXwgFL|8RK5Yn2w>sMePr71{jenUVKCvYGO2FF9ap_C`h^%~16 zJgrCF8Yjw8Lz#1yGiV&S@CMh4=h9Ka;T*1EPs91b1T9aL;xYP$(d=_RsNAJdi$-SM zmvLUK`xJiNrMnb*F;O=UO_%SnVh#`n^8PL}r+@>Pf5H&?obLp2=djeW*N-8e=!s{~ z>(7{VG!u8Wd$I%T?tHI38x*WRoqCvDRBf8NR>YJrx2N;AAE1WP^4hhzb<1X)~}3=ag_Afn4bMGH2t|mI_fhIrLhnAJ9Ck= zTg2+s1x#cnQo3NRQSiwUirS#D7 zPTrx^SA5zL)72|Zw;nITr;YE-qFQ%HEv}62$UfQBm@5?uqFTWsUDsF^dkHqQjl*dX zknNpZ&d(h`_L=N}`Abj&pVD5iU%Fpyxhm-q_94~xaG&gG5n*=YYf|gIWSe_8`w@xm zcYXoyr_SXQclCz$Wrypv+zLB)_2-3jLGOmRd&fdgl%kR#Wh~+rqWp)b{qYZq$`nRl zkVmc$U~?EmzjYiO{qYG@!`B>p9xR!e|NY3F2;{a_8Xcjyo68Ux7AXHu-zfo*|LNBw zAXnLLKKERwmBr2t;;+vw49o#1almfZO%m3?$}3*~DV=m5vz-J2@JTEZE!B^j{`+H; z$hyRl>W)mkJ`1+>q0Q^IzEk6M4%u|Ab_KQmG;N9b(J|bVfG#@0(;-|^yquXB6+TBa z(plg|`{U#*`-rmAaBG$>wt>35lUa@LlY4@S=XvXn=!eQ9UNbxWHbg!;g-t-Ix!&96 zM(iUIh@}J{r$z4qwWQEBbt&k9o}r4w)uruHJPuYr|56V3%jUuJsaLT_rQq#T&@s*sw|dF6m!xmV5Q4m?<@zd_thfGb3E81i41C^h|vhuSD;Euzc`aAqqk- z-gnMPl_})B$Pb)(yv2WhwY2!zeW-B*Be6%?8c?14)h)a$gPT1pITfP_TSNX(oC{^z zkU*GjTN={V6aHOvs7h01$aOoSOIh*Ic4PL7niu=G_)#J{7T72S*6qQwlv9C{c!g@C z%#eR5=sip;@7g*d7y92MGlkkq5Ptt@2EZJk9}gHjXY$_kTz`pUZ^xVvW5%SM{T+zs z3UZpjy$hyK5%i_m=xE3Gp~6mqAcCagCEk5_^dziOr&?GH$Mk^hgi#`Yq0)6D%-HihhY;{VdVckeND3O$*Ut|f6MwM$tf;ez_#oQ z#oU=MI}}cAfsrVt02QAKDtv@qt$L9rNXO4nmA!jIhr&_BeF_aG@j_&2CX+K|h#eaj z^0+RQ{D|axtmZBDJ8=FwAT27ipx9KSX&TINX^Sb~t|e#Q#%u9YrcQ)<^b>O@m&apP zNm^FY<}c9KmqKG9tM193Dyz=skSVMCv^$}rLr~-#X+j*{8YiWD&++Bt)5EEu%pz68 zMrd+NWR3Pu7>}OiOGu*eg3LPWelMwm(0ym20eVKVHg}x7W&hm~_+>&0WVBBW?7qxZ zi3r{OXmFpoQeXB90dbhmtemr8u?j5CsLHLUxoUE-RBJcnQlSp~7TRX^X2Ck8@7KiY zy=st$vU3M2Sc`ON#WLwx{xNB6Dta^e(QA$pw7}C(Kpvrj37(6={}Fr!z;?>ln~odh z?&NMd#qak2?1dSeezb79|CA=|f&f84zQ3*Dvv+8%8h6FrpVZ0fGU~)|Is{Lo)bLXJ zeHi1IgnS+*bFE`Gvlu8yJ|GkrXr@{Hf6s^-qW;ln@#>|?QnP>21*x+>99nois_iCMbbu2 z{q9__lMLfhICt^*X3j~yTVi>`7SQavlU^s`xYp$Dh@I_f=$i`|R9g32pHnzk7&O`? z4Fx!}|M7Ckx0cj~QZu}++57+Pe4WGZ>Gto?SZ4W}&%3)66y8?d zeW2EPsN5}5bRpmsZ2ttuv~ilWftr}b7C8noeoGLgL@wa5P&{NDuzT+ z2I|2NItj~=!4$SVn_*}Cx}Mw~VtbL>ZTqu~@4w48gTthqotF~SM(ZK}e)mEzCb}{T zOD9HTd+(*hZ{0#mj|6p1L87J-l&EvvCie6X3lL69vsyYlb!{(8vv>Vy|q9j`h63@R2gmsk>CP%FT53!i;lEb06Bm3xU zc12o6@7}t`aVu?$Zyrx;mgHmrN!0~8Huih7dtOpXgwVaJ%KE4Lr>6|PUl0up z=)iUNK6>f}1h6j~?q{m?%VWk5x!Htw4u5{waDw>7GtLZgFMr19>*m+qKc-9%kn}~9 zpRr);D*mQpw3Ueu>nUS#}TOl$t_W(5e5@E7-~yWO6@4#w=x^VVi_ zUv%SkG}`*kP*?u>g30i)(`C3yQ1AJEV>L?RLC{xa$28=n(XW()JgA}DJ-b^O&Kmc{ zA=CJIf#2BG$C+*%X-ZVPiYqdc5yv%I-X&AU>>c~CSIr;kJlB|3IX*(`h=z|>6gOX) zmc^hoUMsx5oC-kmsbi$VLi6-`DN=Ih2PVklu^~yUotNFp+S!2ene|R}%kP#?ZpOOH zC<9$}rUPL-I%7=d=>-y|O@;QTBQgQD`HT%ne!~lfQyAwmZ+}i&hi*EkLX&8ht6cuW z&u`|NmUxT^-_p5tx+Ltjzm4=Y8)nM~n1+*YEDvdI5YR24rmL=>EW(V70LvCsD(c)j z7qBo@ED#ABrrkPn%Hz=eL`(vpxOR&e%o~9NaJ2Riu*Wo4?&@?4Rg1Ko*Yj~sZO+(N znwQOL=zt%|aIsWl8b^er!Euv-X)BA)r{M5IvkAc4g4Tq(xK!!%9QIw=(@yM-$qAwg zb5ZnN=vN0y(onm*?r~7A(}adJ#k1DQXw$o(*>e1dHZ)CeVx+AG^}~4`n~m;X4+F+P zUGzRHNo^O?a*h+uLD5>8yke@mptfxF^Au@$EeEhHN@nSv{Qec#Sk*Wrap3S?pc@eZ z9EDX*Hir^?#uP?KJ-($%kAhH(Xwo(CP3R77au86r0Q@Rs2h(y8z_>qDc1xdU%5aGU zs~Z)$RSuoM@nVWVDa}6bVIi-yBU#O0qhH z=3zeZ(sSNU=WQdSudw@b8oe(NP@RG>e$Jn%Fv6TzUxain~$KNpWX~sj{Cw} zp?*`5!i)zLjik((-U!4vdLGJvd5CY9jkbo{^WAZo{W@E@+?4mrrQ=16?)jP^*^^}^ z7>o-J!CnQuknDFHTkIXuvhLy|Q)1piRc;a+ z*r+&*jxFE~T7=>2V_QRtf~iEjJg47J1Mg?oZK{$Cebzrm+u#Aej7QLq7|a3c_&9nU z;}>+R-Ws#<>Tj;$=RR|Qr=BzD=&)z0AK=1>~gW*=U6yE@H2`Lhv!@;GEI zT2pvO#eXHZ@QxzJPNF9gFLk9Fs7K++*XWgIo(lklS6jaUWudOaE>=H`S4uC6`^0GW zryN2%E7ER)P>JH+kKVtC!^?3`H&9o@*%w(x5Z{#w%l%!e5C;g0cG6*J)WOSb^f!Q? zG`i$ysAV*>I`RLA_zSnFzV~|^77Gv&k(3&h5|NMwfe{f=Qt2KLDd}#Gf(R1QCBhH_ z(hZU$-QC@tL(agNbAGS)=efSu^AGI%?0fBd-D~ZA_Ab3@MJZo#-Ls|ZJi9nmGPX8> zca7)=R1@aJ(97_>;J!Wsj2VO{hrJk@-X-JAi{lk^x zKP^v8PuvZCcyF_o1~9Ff37(&c0*>`du6r~Er4TsB;oe3wP6lxq;W0Qa)5K(SeGx&= zdqlS)Bu8*JEd6Qp_u^JnekH$?@;JB6+`8;MK7PGww@Z*-UhdL6&pPC6;!lQS(K~3t zY|BOhh8Bk5?7dtMnO~HDb$iE5;A_zGa&fC*8m-UE4a`??rb1Wl8dAk~CS)ve*!(E9 zd~`U7cvqHtLo?}h|MoxR5I+C&f26?u`t+9mqrfxF(^J@GCVaC`B*h11>?MwdZ-v21 zX9qJiU!{Gp->*PY=yzsG`5O;hIs>(bPuOj1<~|9hfD&^*M)hK$Bt64^Wa-91dk37= zgm}N<2AYt5U~nN>8(o5AEADe+K1plAJ6tf=IZxIN`y;{Z+t7qxD39eq0@Qc&2wNQN zR9vNcoXOkZpIx~9;QdW6`H(S82S8{-x@<`S)~}AL7k$%EQ;!(_6=M!Mid!Zy1siCw zcf^5TsQLc+(`yv|q=4%@!Ph67=P8L!(U-`@+g%w?48gHyZom6OhXK0*;Nt8_`Z>b4 zRhLZ6s?5k_M+6OQ-vOsxsbI;=jdoP2M$iVP?-yKaR;f`=Qaes!&J(i@P+k!Cvzxeq z_&ODwY7V^q5AzE^daa7Sjt~iGcMx!vY~>yw-UynPW8_;ySG?iGM5^VB1Vg4ciWy(t z@R)_TiH)JidrrUG&|3u~c-0D0_GSL!?g~BLBm4Rb`?(CV2G=ID@sFu{fA1=!1`K|; zK)qN=SS*#(i#5vnTU5A?$a}mWyAUHU z^G{vAu-I&w5KMhS;4kl3SK#?yRYzaI-&uv4Jd|f0Wh31PO5l~oCdVz{Dvj*Wzjo7i ztHq61Zb)#YKoOIrWOFBU$Cpp`UpyYe#rgR0+(~-{JI<^LeHhh12c#r~Lac`r%~P#t z9-RBaq28s4&g1c?$KM-w>mCx^i=|m42kjC<1U~7BiZZHL+yZW^Vv$OVu^iAFQB=VN z6K$f-DqpQt{ROfrnOMDtidB(c@4{*U088Eh8a z;GUbY$3kxsPxaf*vsU~y=+P%Gv{s|~HT9H3@hwl`VjJ1V9i6q_-kh8@-Q z4E&Kp{2TVq9?vj%{)4Wv+PWVO6dF0b--<8qK%IenI89XTVRL$vH6`>kvMp~;%Z|xU zT2>FL`+Z>CV;^7AV@XCO3aw6nV&aQa4A7+4B^+r*zop?V)AL9hm z1R|RrQB=J;{))-&2Zj%C=?Uejolxk`e$>petsFg2-B80Upw05PJJeR9ZcaG3pM$Ow zvI!&CP{*oS-|2 zvK}$@YnCQMC4zsvW-VuScqqu{-))7*BTO?^P+|~c24KQ=$M(L9^P{IfgEZlXE_D(mW}WadDm4uqK8{ohJAyq3&Jp3_ zYWx~E;LR1_anQZZDXr?K7aJ^6L?4RoyrNwL2J9;%Q|CTWp6fm7d~ddG9LWhiNV*6A zezptCLGKhz$6>oi*;s)_tiff^5j~ssEMCWd5u^Ra#*?FJU1Yc5^+EV~co;TXi zPbFZ`d*A1&>sFm8S#w1=7?}qhQW%l;qssog#G#h(1K^3cp5zwmo5ehxPw%mGD{3dG z2bXB~U3h45fr%(Sy^V;XHx{N?0KVSz(mdc>Z=hxGd8sdYteD+1khm~=1F06u=OFkM ztI*cORvoN&o%i!gE@GdsR${YFthz(|kE@+HcBTDq_DK#A7(xil%Gu-17JdKO6{7 z;%zz$!d-@+fd_nZhQhC$PX^AKftp<)jiS3|9CmTSSUdnqUnYX<{^shu|jUs zp0$Iz?^Si$p?6oCbdQ?q3Dl^7Qml~0FGYoJ6$Hr--_zUMGfri)j6#bye>phCA!ORv zl)r4v{s#BVTUX2^@*^m&>rhdX8n2wGe0mv^OY%16SSQ!C=pKLX-}FvYTmb`i?Bh;B zvv-GUMi9o5k4R3VYh68VJrAHKu6jF$G1)OQxeUTn%scR=%sNV|TZ>&r6z?en%?qfx z5)WOsxJx9E(NF%xZASa0Y3lR9DjiW$^62K4=A)go$6yO0QL_ryG5s<7or>=uJ zEjt|O!+CLDaYPMM%pgVKpllq9xP=|St?G<;NX(nLa+$9CA4HR)H{y$7x$@oV5L43HeoDTg?q-} z0I<385%AR>2H%qq?CU<>nDd>hG#OJgJf*NF8V)Nb8FaygANVOPRBU$89KW0^SiuZa z)>P2{<){RrfR%BW76H8VmTDK}^?!J!vlZnG{bxg2=xG3~hm2po5G7Q$f-yN?tGMhW zeuOP9S~RG%MmXl>ae0ICq~;rlN94CXWX zoCY9&y2gXhTKM9V$$fIKLQ%wx#hELSU1Pe;giI=5o6x~y`CcdWN%)o{TnF>+Z7nhG zyG?nStwoHz95KJvbfoM!UxUmUt~vg#{j>ZBtVE)urXJ=@Z8-q`yqGJY1|ft2K*xHni`LUb`Hh01<8H8X%i0q{^M2)2bn-v4u=s9 zlYh{K;Ocgn12p_N%-(zgM~bz33=EvYkfFHqRXzysqNmo5nXpuwgg>6n($m1P$cWC) zg(=`c@MeqC?R7b*#PuN>Ic5k;Nt|SE^h231C9fD4y-D%BK5b(9A4UlK`zov*0E1Ai zx?(Bv4b36ARTBT95ub2An~JgpBr7LBABZl&?=UgVpKcu|q|YWIVdq5WQm!M^vrERG z61UDV1qrVN1UXRsnnx}J8sYiX(1-38zi;l z>m(LG8*vw&+rsB6LjmM`xFS;eC*;(BZ=f9S294lnH#rZR`QI8)4p2WCzFiBI`9hTs ztaGs7BLJ>*dwUAc$BMXgb%wV}e)9i#k5mKsG*73Pb7`0O@r<()Q#+WusrZd8`+~G`h6E?X#M`=F7h%bb! z>5SFJLXNv`=40D%5$JD^BTureLB{<|E$fNwb~Mu&=AJY# z5uYfSOwP-pLe#3eg(QM)Ri+X}Y7Rdv&@qA5nKO4Kfj++_mWxlD0n7SPSWzM%c)cCI zh{tqdN-ogDWjux>QOI{z85kLZx1A!piho zGWj{hU7z5ot*YmLX8sX$+;ef-8jRdTi~PUrg}pY8wYQo(FkH)k)EQhxJ0|oQnbv`t zu`xaWu>Vhu2qb z$$&HL*PSdnkAOLq{8WaA0{L|J5i8HWr()XYVF@M~dP#Oib~Lt_^sw0Io$QX*(bDg` zN1-2x_&HM7L3MtDC=tZm|2#pFp>!8~Jr9sT4)2T^ zzMl@5_7P8aPaVd#;lP+n^byAIeCk9lg2smO^TWi!t43F2uS44Bm-Z&>hW|;RVn}u2 z_|?VU{DlZn5GF5$qkQAvtAaBwn<@=B_l+61 zsaP}GY%QrD;4ClKZm5CkBH$F(R@%%_Vsc~S0-TC|yA7YV0jEcJA^e_xuGiiZs!D3p zsWxU|9R;xbu3?6HI|lxVh+H0oh$Ye9}8UbGkuFQtA4*OL9SMiWsee% zuC3C0(r{IBwKX@cYGKQAyz;4>pXgI&MrlBA@(MrR+rem9}=s#<@Ia@ZG^`HGL( z>`$q`HWZx-OWN_w73WD_zpF69rk?V3gYE!^b#@-`mifwHx#vkkui1+8n_is@Ian6=rsG2D9z zsw@gp3JKbyM! z`qOSv-z7ITWqbGP*5W|2^`-5#*Z;YFIk@4u#>mXMH2b7h!%7HSJ83LPYjws;47%M_ zHX3?)n}H5C(Ww+yFU2Br2}v<}63;K~`v%OR&f-MtrgD3x3g)rcqlKbZIMiL>Nmc|h zyd?>LOp?m50e7wO9RxT#Gxx6_7~_yJ@dHRq{z379=oD>h;)aEKQAvY5LHVl%yB5uEFSX5Jm27Z zp5R@vAo2(O0*iaVQp&>w>`hFRvMf=st~tUy*5%PR{d~{`N>TYc=iNp!GdI{?-*Ww< zcVP_sTCRbW0x#AAeksfP6_h_b#WWrQRei5dyr#Z!;ez&sq2Cy|we{s9k_zULD9)rn z`3(D`O0K#n-dlJ_+(gs0yl@&5z*iq_{?sae|ATy68)`oR*Wx*hiN3%HubX1)u(M}oWlAB#Z{pdpoc?isMUllw>E?0Ge+rB^|CQ}WS);8 zUlLC9Y6&IPdP-uL-vF)GT3dE!j0-%dho?4FA23zJBJSX|gPmm1Rsm~5P}}Z644>QA z#a7wWecfl7h=-onFz;NYwfIX?a!(TA|63t;633;HsI|UT3^@U87Ap zeb)5%7*QT`jG(ZJJVr$UnZxi+9*H4+Is@Lx@zBrnT%Z0cgiv5Y^$v>@rE;q94EEP! zux$zLPSN`MIr}4scmU36FODl&gHdf0?MAF!U)j z)ckRNauhKN->`Sd8XD=dpX3v`@Aq6`vF$0?fu;{qwOI7 z1d>$0oDKIid#H<5^~Y3;Ob4m_#i`KD1aFkZJN=c?Ku9^!pBm!$43l$Mi;9SG2uumN z)RC;kh11YYuA`1AlW2D&UJS z7~LooUFB{l_54t8gf{S^2ls){gJiwuRqfLwbf84VE&n|PT=^UT$R+; zdBY*-d;0#6L+uBgYVF#GpSaFCrkCX#2v?{;6(0(g?$NLS*7)xo?98G$ZCM_lZ~6Iz z*T9xaXBZH!$}A^FWylB6gZh(<1CC6u_4n(K8EP*>wVqTnGex57nk&i=G3zYAr7KE? zB1OW;MPuO{U6N+Oz$+vV^)wo^AiDX|evU5n0;&sRNo}PM+!&56Eb30M#f_=3Up-c#*6dujUYaq+#J*^a z0EQ9MH%45B!H%t<)*2|C>91n9z-xsUlWCx4pAumQL$IBmcAf8WS{F#2E_!>Y}8IZg4r%G?grvg zU=4mxCKIsEq$W5k5d~*0Jh&>MI)s@NaVG>oW`-7n5BKO8d3&kO+;KUT05ksDOJkcg zRAbQ%*SdA7PZLE3vCmhj?$!R);UTuh4UtsL<@8)qurkGJ1Lyh((|d#rPPF8i#^wL#h}j=IKw5UU{;N}vRkB(?m^Ej|6idFb%ZF9FsO zKv$ETa9NLhZ@r74)hK&y@ax+kzT-|Q>$pZ?mb3Iv`FzD4Vt@#`Ep$Bmh{Ac3?|-M~ zn%6$SLKg?eZRZsONVJK*jR~_=miDGB?rC6sw~+K^cEf|+Lnrx#K+}@ zvrhd&3Un_7<5B0y_EwAWWWx);Z zOzwqlqvq9(RPaAbPRl$!;&;$EfZ6!Y=i6gxQH6?4jkUv=@L)KcVeX)j?lGPa9Pzx4 z>o{%hIVw+k2GfWGY?XyIeJ+`IUb9E|Ko9c1p94yjUdNTaF}wIs8nigXv9a(4SU(G; zJIEy0t1KKL$djXspY%_LE9C9XEPP1C1cOZ@kFV2W!)$aKI6?)Armk50w24?vJir0d zIL@!hw18(g;TF_qzX8q|9|b*CKe#BihYA&PH}ui!R*b%6-%Jk7h@N{CHeGEm(5v~m z&T^*uNk0p9p>zbMyzdjlzYCPS0gKc=emcB@G7T9HaK}5>ygZ)K#2$1Hq|tx{MJm{! zw*eAb;U8;0Qo*61A@j?a!N)mlSPapLDtqD9>G3zUWUazo1=oiDv4mzm@i{dEbxk?% z6wf<6C`~RGYT14q+mZJ^6iy{*f8AJf+btJ7ojQG$LF;jzr>xs;zdN9xKKPF3 zA0h?`_qxE8=irPlq>TdUd@gVH5zZ>>rQx9Ef_c!R>sB8nus2hcK6F0+wr~o0^`zjt zGH<+FZ(*NGKsan(4>#2-cHZafTdEZmnS6GUlK%&F>MecfLynt%!Khyq4|}D@BL5Np zVe>St`7HO7pm6c`i74?reZ_~J71p04MDlB>_NPa5S>Hpbx$}4tq6P3du6PwbdtJSI zYTuw%(MvN9kb2jV-zmMQwtm@v7FG_wgWf@(t3p@y4h{#pAyPcqJ7zH4rutfn!6W%*O`PK?s zQHbY5F)5V7VwI~(age;k2%1T221NqqplgfY`ataDCXhN+%JaylHg z%QBT=z~Y#40s*gja`F@sk97f=;bQwscP{Qs@~VTLt1lI_?y7L_0#1obv;l8WPlSvu z#qQ&GwqZFa90e0=7iD7%9X0O~J;R;fBoZvLPQ0KpmCl$Lw=---4Z-vevPSK&A0$q) zFLQ11Pl~wTYsl8V_9(=n9P>hURI`5$;0hlu8{2^+NxD)%cMHBJ0;!w~PjBH& zMdFFzwAruNoTb%{m)PB5X`rLF^hju6!8O>(vo;*ANkJZWV8;F#=FTYZ4_wFIlQH7A zqh&5iUO)Ut2ZN9I#O<<>G(!BMzy9(hf#0q~MEvgrLV{NXo`7sAkIwNi zoiWd#4~CI5^Dx`WLiRDoXb|Au=o-Z0d5UB-?G5n>wbbEPa4D0#1Rmn}lJNKY=#T&K z)>6*E6d3X7e&iXwYE8Wc3O2I-V|)_f!JPD<_?+&T{vj1p^OeVLU;nnw#fyZ5CiG|I zm2zT(0v}vo&PF*2IS8Wnu`;|8!m^yThccN~F|@a3m?^HfgbA67D=75yb)%TCG2hj) zd%%Blq}L;t8XpR693OO}AvJfsik}$W>x`k}I`*!kNXwl1RDYU&m?Gg}}CkUk{7uXWomzG~7R^^hs<74P0)#>i)L{kZygTAn1id=xTO zFVSlpSACKw{|@w%`8o>33(OM(AUs;U(qaPZ$#0@Ynezdi7-2g6uyrib58jDVwCku2FR zhM-B&A*~DNdW7)qW$!`mp4N<@@LeIXaRzOFTy>w(o%`Y5X@A|uKYGD~D~@$fE24WS z1W1?pHrL<#q5fl)(_Gk!XL@k(M*|}h+(^hIM8Iwd(%u)Zx2H2HA`^bT#0AlL-T5+9 z^~95>FGV`$3~_P2js{%7G5Cb3&z;!oh+jth<&Ejz!OPP<>1`!1^qDPsan|Ybi`!W zxJ2W3*>KEjJD3&vrB?HAq)^&o*%*d89Wb$6Pb~eV`7}kA_>Qjz;hHS{tFBa}E^S~3 z`l@Og8-0RAv8LS9Bfj5oaiUUvSU?a45=% zmUfnM-Rr#!`plvj(SaPdsk-TUi!>urLw&5^dj-xP)zMAyLXQyo<9e*5w$tN)&?qd0 zp(_#)mV+wecK&!7x%#bY?}U&uzJis*kwC@ZO3lO{O*9Y9;{8MW*?$918_8R9lz%ER z{<`4%XW-jdA#4>0UY~(5BqHU9H(=o$HU8teTkGP_rc$Zy<27{q=gA$o;vpve@f5z!q#woZ17nAz+}|bqSo?lRA;l>Llp0P7{Ahl5 zpKEe;^jF4@+eS#Q%X`}>!FHjtwWNF5n;koP@;R|jc^^d32gjN2{D4WSx>mJ` zqf52o4M4tDxTR)qwRjaUn4aE>+Ur-p?;ri71OidARpI3SiS$ue=Gye|UP2HwJyhz~ zo)Ls(AsumGIGQQnTw9A{F(1^@hKb25ef)M&<2An|?2|4^W^?ZR_-T_ofZ>OT?cx(m zc#>?nkBE=b120BkKJB6m?&8{MVfhlKFTnGEZdP-}Qj(vj!wss#nQ1!<3+GXpIhE zig@-W>d0Dqaa)njGCt&NNe^=wVfeNYN3mP|xkzez=CNtVG~yGlG<+q*_iL}07gwLx zkAw59?|kB|m_AkU@SC@n7W(^zJ#iLSb%=A4(U^c#riSj*zmK5IR7`H|Rqch^FXp+H zh$7_)m`*iSNwY`GLx)r`=?P|Gxrbu#{-ifC&pqQ{%Py^3q*FO#gU(5&6VL8^%yp z4H5=pHe=>lRPq!0Xu^#B_K!MtP~+%t%>s zc_s9=xZ*N}j63`NDQ@HsJK*2XSNooL^~)!EG}4C>mGSb(V#d)f^v95lf?TorZK@|G zMzveG{{98b)1!z%n6UDESQd>Hl@!=SJ+yThxNoD$4K!HT7Yptzl#{L>BPa6W0d5W- z_3GRT`Q)|cr^fnL&*+j08ooTcQHF$`I8GfPGI@w`Kp*?dzt%5x$JgGh(=_;Vit5pp z0tLR-cTM9f18%B7Z}K^-8#;DJ1|3EKgJg!NFHl)hxeJ$yVo4;geMnWL#=hu{O70(3^(IxqFUjCuCg)Y;pLGq zojTlCCHPH4|3CJ4arkh_UEFr@AbSf1bOB?+O5=CxC$AS!KY~6thAO^^x(*cfq54~* zW(o2t$-6d0gkw?-DEhM%BTp6%Rdq2@T=%T<5&SwAR)dlPI(~>nU)-K-Z%GIhtiFBw zruwU5E4>Prhbb^Skfaf*Q2}2B!$u3rzX`7;`y;=XVMK_RBSbvKu8+?W5U#E4p|xyS zK56K2sS;R;!bJ?!!ecQgVl?`3z_{5d!GS>D5DJC*DEbzb-6ef3mlGOE6m(y zi_3(b275!!dnh01i*rc?pY?_n1#fyyF;B5N*rxi1+-HaRQ^R|0s!sB1y~3>gZawgBI<_=K5J;WuNvGj@j6m*hh%KX+L7O> z?>tgpK{cKs_=(_nP^PCt)kt2d)@~guOiT5y&J3|uMLlHwGtV4~h&OPc9uXqvIvV7W{*#yQj^a4U*B|Yvtf zTU>=ZQvE-k)B5@s+79=>RyYGwh`$YBbPv(c(6tJeaqapav#ZtJPb&yms$s;u>vPw= zR^-If7a|PT6SFpHcBAW=E>67PlX3o-0H2RBRqK+Q)b{HrwytlMnI%7O*~)b1&Ed&M zezXYiI$>lOF5VQ7-BbGZ@Yq5;kR$8>V?-p2tz$0{Zoi*Yvp?_}!I9af`iBNjde1d%;7D~3gEMoi{%22~2R$NQi%|6M%y&kU?+S)ZFrv#_d1w9M=L zXWX`bm2c)4s9A(x9JE!eg;03>R{N6-$=q;ZLas3UrM(B!fO!}4ezTE>+g{(9$=3l6 zHyV6-8$rYJ5>cj1%;2{b{8<$@JE!&pnlpMJTn`(7m&idfMJ%TJD zT_rPr5SyBx;E7{n?d-7H8y&|B9+wK!OQevsXA7$Tu3EW|j7$th4a1k$_XFM^UKl!o zCzGEqz+|k*@!wt*psf+|g70WR6Gl|-zoDqu;n;|nJwV3Q?RSnJ>E-v}FDWk1(|h>p zWJq3{Nagiy?8ooEsj$L_DB5My(P}tL<-&9Wh<*G{3G@1(95HNM(Q!s6{Ic5bWg+hw zaaJp~niPxn>G+W6Vb7k?7{y;rus9aoDs^p;jAqRHQut8=X& zQ#7Xs_6WDqR)F#dj+SH#z|4?a>?uRCw!!n@Jj_LJE3$w}aBzonbej_rHiRm{pfOG7 z{A~}Y0;q^zGuo0!;k^=q=QH;o}m{6eF@Lu{XuWO+T-hlJsXs|o2o(t5Ngx6XER#i z)1y8x+`tDX@6_6V97jfk5x`={eN3cK7c^0%kKAt9c{^Hb$T_5PvVqS9?KkjzYLSsJi?d}uVg;>mMRuFHPH%y|fyTMbHi74bn;{pQ;im=q$%%X8Sh z$InT&}Cq-|=WqjQ0;zlfpbD`>iA*~aqm)SSPDq}((FxDxi-)cE2iN%eCE@Ei0oqkbZj3(m0QD6 z66b3R`NBQg--j@JAbp8fw6CANSt2_^_52ce0^Mt8PY$$@)4IdS)T)abY!&Ti9r_uq+?I(0R-p z7ypxdfPC`H0A!tfrZY&@imcu+h5P)0eA=;!0{~Je^s>);NM;=uXToDpu@MpLX7TGp z4wXkckabQW;h#6b|E#V^2cPuqw%|2(L9;)-cRM{Geszs4N^Er}%7s+;1~%u3N(G$t z9A5ha&vbhaO@MU(el4QSK`lYBMoVptc)e+kiqJ=TK-PR ze@c;#H-o^(BooJ@&)x`k?t?U601LR%E^C92W+-mq75MbrYw&T~12{S*U!1oKw zo*K_^bQ=2M(lPa1kDiJ$ELY7%p*)AUx;jyd>71>y&|I~;#S}a6`b{mI(}oy%cCH*@gN!iRsuMB+O^7_glMd!t*c{X*YYIas|QGDs?LIfg5PKgX>@$yGG8(M z;c6H%yCZ+3{O&D1*(Sb>IV>g(ddT>fk?6k#k)E@r1L}*IhYXCmB}$URT4v0-6Z@QM zmv)5kRCRpEJ|HQi50`&fGlTo6;E=9Nt8tu#=^Ec}sJs&JoN+suH>_5>6!~A}5L5BK zfIpBuH1T3vQPsl_ti4xyYo55!PtN2B9GQ8vQ=>%*?smFzEww6{wtCtEwhkK4FLoIQq59xzk=am{zbAGSKpC&m z2NB$PYe+Mq=lMn7PVT{@GYb1OKB?)GQ`za8d%ru7cP4kA;s0Sulm>v4*(#Tz4#sjg zf9_}tIQ@cb{rVTDzDjZB_c?6pzW-Vl_EDV19W+VYghRZE^jFtvkNb0i%=u0(u2lXf zoogmB1&W;8!^IYzu*a5@V2Txd{3_PJ11+jkhsj_y^2=Q%L#v*$-cU_c<V2E;A3wKp z?h5|rk~$4iF}LJ)&8J#1S0&**V#wM;Q=JFi`^lhiT{PiT)^G7OWfnVYeFe=hWQKum z*t+0-rR#$4X?-l^ots@;MvmZj@I9&74GV_7uQZ~s@Ysbuhqu+DrxBTPjRbI|MY?C} zN6LDctb?}UGHQ7P5iZ5BxgVe+}h~#-4C)QppXASJs+J80qekv zRg4q#>L-{gP4VdsLH3LdguRxrF73s4xHkzw=S@B#mw%r}=y5wJ-$!f*1~1e*iMiTW zDtWy!zDWl^DJB3!^8MhzjO~cX3jxW};Q2l4%{^}bJ3z$0^zCWI zr@KZ4hPHMWHe>5bZKnVqWGvS4%Qr$g(7gJqps@k}8V#&eTZH327)hD7w}D?iR0PXC z4gpoa)~jyJ;g~Wp*7~u4`M+5+a9J}D1Bph%psd2X8wXauljJs_B@$t4Lz7KGvWtET9 z+Cr@%J2{gx#*u7*(t}+EycTmEcfOou7@NR7M{x$<*X&Q=L~jQU#)$($v7j7e!!|YZ zd4~Ry?k@2D0;u}mzLzei1>DAPKjQX1ykUcvByh6#@??n&q|)>JhZOo{2T#E#+?Fb2 zeml2vKErEEU{nvGdSgKOGmsxIe1djve^*C-7;|OmdIPbYi`sI;MB0r3x?LU%**SPU z8UBeE7IM_Np{b(F?GSc^wB!p$+8u(b5^{=zpDuZ-(i%_~?hcaG#4&9Reagj!)4y_c zV3NZQhcnCqNH`F3eb231t@h93ckjl5!R|urA%$;N9c*cL#CNeooM&X)sMAc+$p&a` zsLBphBSk%M8-4ttgdF=~H7|Hb{(9yu1Dk9P-M=%E*Pw==Qn$t!Stu}P?@eXg?gSU< zZKp6G?M9TYpD&cZ{9KKsTIs@m7qrg*l>14fKl{o3RTekzY z_3GDqGEgc^Wa23X__}p6k2>orzB_I$jH9?cbY)%!8am>HK~wXfN*CpVW-P_L|CLV<#Imo?IVbKS0_|08;#sd$r1E4;ji;(lQpTzz&a^sjYhTIQoo&LiK zY39cd|E{*rtc(j~2!!N@tacZwwg2yyWPr!Bajf7q2hK)CltQ^J$x;My!XoFo>%<%O zP+G$Jb*+#t^MEM5!|34-adRWnu7$lXH>UR1Cx7}pXFEr zT6LPQ+K*8tyC@Q<5J!GHXx0M}H(>bqea{DBABghungM;}d+6y3Vk8zb9JBe+h11sf z&nX*745H|!!6WVl@p1TflR@+{((VVl^iHn+)(&Ipa$Zy=FBYkKlyZVXR^Wv?#sfc+$F=ugEqjk$9Zh`F4d z|2)))^BkrfGD$XKJikZS>q6Xefrn18h<23oDUhctPu57#x*KN5io^~q0C#rcyEIKc$>q!FSX}gD=qtAP;)QiKA&8hHf*<;)rAD=g zD*wo=$(K7cVBy(te{aBa7e7O#K3!pMs@1e=&jHS$PoHnQw6kY$4C%gb%&k=l0+>@I zI_|*(hQ&igs>*A5Sl6wR1Tk3D?~BQx=jaCF84mMd;r>a>H_(Rpi`WXj<*>A(mtpAV zGO$^Gwy{VT4D`y6cO|s~gWN~9HF=2JR66@O=oqCS zSRRH|wfr~_|C7g=w*tRlxkbdrfY<6m`o`I)MYYUmhAZPKK-+nW%vYL%nP95qwO!y- zCL4rSh13_AWw>d<$&b6hjAy{spp-jt_f@VN3+dn9X|5~izY3~qIj*N>SsR}#OS(Js z(ePc}C#&6jOr~EU$9JADye|wI$v)fvFuBY5Sw$wR+<;Tqs3)M=H?b4`_~=hsu(t80 z{oxxrx4V!nG5+(tYvY0tOAxCQ{B{ssnVzjJRPfwE%gN`nK8Ydtl$g%J441wh5|JmYhS2ITtsXGyO zr_Sv6kiyr`Pv1XCTDvhFrdFZ2Mxjb&$UunjJo`B9Gq*asM(jLf=tba+TBvlqM_4#> zrSmfRB(LgIirE2v5Yi(a!!cR;*cw!2w$@ACohRspAh%H)(U3QCP&$tI#(h}bR~#pb z6=ftGR5+4KxgMM5*%*wm`57uqZyGi%?%xhbNx`k0eUU5uVGQJk}OyD1a z4UchshUJukJk5V#i+x5|MpKco9ePen_6Bq@*95YUk#XqzFRR~tdlLnmoektb)%vy3 zuMI>sZeR78CaCUSdp;F=0~-6A_=lQ@w5w(-`&>G^SkH!Qt_0xm3wtZ>4bJgdnkYN1 z3PK70`=OI86K-GulB(!0YbI$VwBUrNS19mgsMhYsm(KZfKpSKS68AB!pr6WH3X->>!2bxG{IN^mjmhcDVghmOQ0BShXO5WL(C_tl z*4jPlrosr|P!&tr0jo$|eqzuz%-(+-#P%ivzi8p{dKrCbFm2FQKiiLz6m8AqIy@Mz z3NezfsL1h*T4;dZf}o7>eyZb0SFvxS=k8SoD%fnHa0wHOdNI~RKj#Beu#E{rZkKI* zRyj-6`i@c_7v#-f`MR(O;R*ZvtmFNLC~1)L>L0!r9mY>ZbOx}PMjSl7)??MR+U3u^ z0A0O?tXijssg-^DTJSrc4STlI84sdepXlMYKg4>oiDMT;lJ4}EJW7rY8J{iN+Q`Ol z5Pn(i`(Wk1BgN+cLGAZnkFKN?tRPfv6~O$BqlCEe7e?<5{Z=j5*WIAb7>H3E9_|y( zPE|b~&|jm3iQKV;T$jx6z;(y-K~?kI@I5Hu2u~cD90<$r!4&%?pXVoitj0I^!jbid zPeF=dk4wZykylPw%p)Km{B;^^w|6;oYyrQ2S3nouk!vQ{x_4%7mFeDB0^e@*6l)NM z1l#WpIP~jmEn}7=?$?4fzn()n`0z0J=Gq*t1y7Z$yrCQpOrcsrtfi%j;}5bfW6Uv8yoTvJA* zEHQ*N2LCZ&t|`Z5eSC3kE^C(W8%;=d7=E@mDg7b2frzgW(cGE7RbLp4GFk|Jt!&?O zwM>8s-$wi(|H}0wPg{+z;O)CwzV`@mvntQa}qJ}kFhZ4m~A|v!as6Hs6403QD#&vlt=IQ za-;UXKI?63Ljp~$p)Ie29^@OPa}Uqluahv$!QEVKm1u$Jq7j*8OPG(gWD?NcyoPQ# zMo8_FHNn+C<=u*PFeV78OXZ$}#n@oAS5abw1^4;46$f_2A%^5?#_iV#Qz#@1O16!*{ee)=tei7Tq%VRXYKwqZYe@l3uIsT%i#T z{*M!QXr0Djq{K-^v3}*3N8;GFIe_W{y<06l4XiS643Ezom@jgN-kqd9f>!b)kXb7S z-rQ$U%X1*{_?zWxrZ9&M_nrJQ+J`O2C$h1RpeZ(SDZu&@g!up&=!w&z_SLUwY0p1Hd5fL185ie;=CUN=rpRoU%~-7 zh&&hG0i31x#;Qfb{*mgeUT4ku4ksNR43*##Zo&d4>q-(Xoo${|umjXyTgs0Xu)-?dp2ZY4Xm`L@?Dy zhkT|+>e~X7he4Tf3h4e<E5#Rt4GjSCO%yN;_Gm{kr$VU~Gf2V{qEW{n+TIQRB zCMK~9X6-f-s~iy5W06n1mk5@Nq|fO!P0`Jvh;RHRQ}TklFn)2td*jLUeiLPxKeY$h z$y!E_@_l34R1PvFQjK80zh_K8k9IldZT5;#csc%Z|3|>%4D1%57b;Mj=c9fmeC+`v z5DstcbMOE03wY62O52ig4p8+x`xmLvb-I1Aa3jcGhVD+y>u+X^uut_ z(iG9S4Ft_W@$ar`KJ(CL-MxfdvEUmiXPskh7-q)r$aoCA=xh}#II!wD)D=yqMEoRo zMZI>&*p9m4Q8wwb3~!^Fh<#wD0e-v;_#VOR>e=tc%4otYWHsTE6p{ zI$Evk1H2;MgiG#*>!~hBA_aN1JD*&mz%-B6{C3HFNDigsMzyuI_{m#$__FzK19|E7 zQh-@E1Gmc>ei&HBC0jsaiWBeqmOqu|(sQ*y2@LR#C?rG-6;ezl*BV`x7z-`nh=;E9 zy$IY4#7N5^FD;V}Rqm5TgjXP|lLL(NAYT}**BH-xUo0SRP1&=3?b#RYugFcy?sE)7 zuZHb*KEoHs2|XW3^Lzu|$6Hr7B6E@>q+dE1ESw`)jXb`8L&B1>T4?#!Ie;Yl{+$rJ z6@(=5Y3)3aB?a74T~Ys!nErQRCBl}1Xglfo>Hq~4vk!Eu|6LD+ho=?>E8d@T0uY;k z=r8Eu3BH3x7QppUJ_1JB?;c%?8y(`Bvm{BuDBvoe+-oOn33O{P-^-rbYkN@G;i8u@ zOPI3mc!!P$c|Ng~lZd4?;+Sj;JZ#==3NnU<#gSd`-!x?3m8H$7nsVEwe@^l7E6tl} z1nZZDC;)n>ZYfj$!?h5zU(?lcKoJrt)eOL1Zo!ZdFLQz393Wbc5h|@aO zTaDNM!@ffCQzWYtV1P{U!gs%9D;=%ErPy%<*FV z`)`lyh>T`YNBeYZL|)BaFD*bBt=hbV4ul%kUSX@xEZ802A3lJB+RVG)*mJLu3L3`X zUjk!lR}49b-Ss=59Eya&T*)JU3=;r18z(iAIf(>LKR-}e+^;J?N&dv zzuZex!ku?Ke@*=~Bj@WK$?cCnXYct@hrp5sjWYD5e@oyEZpgN?xY)i2;EG_=k8dj9 zkSP1`z9EbfJZ6suSU^4nziWg?z@-1PvZBuy2jxEOQl5RnpBx@b|4IZ5vG%2FUc{4@ z4e`9b8;U>2KTu)cSJ3S(oDe7w-R?<6K={@a(gdWsWV}lPkyXM1S4>wTmKKT#x2C;M zkoRLOUz9yQ8$eF)pG^rkrCMZ9CRxf2dnx7IiIU0mBRK1c`^JT-xcB027jJ3wK&dh`zw z=hQsB=UkShOeyofgA47JTF@ z$3VJ%hnBBr8|gUKYKc~4+Qf$k;qY-J+GZ-+sNvj%@3pb{18kxab^$?=sw1U#9k8ox zaJ#-d01CRX>s1L1-VX+tu3v>Zyp&+D$&q{t(#%$}Zw_D}gY!H!HF}UYjEave z8sJr3n7kA7ThV(PKfNIXl7{RYKr5N7`)Q3d;1$JtJ0h&mjV5y+Nr(@^-~L(u5Xc?I zQY!gJ=#h0pJqex1+E{!HlT^cTj%D9i>JUdPso+OSI5`BGNjOcL=qGSrU;B9dwEM9b zZsh05azEcuKD|7aMKBYl9C!9qlVA@`RvzVq|pTa~P9gJF7 zY&Uc~fWGO4E^eR;GA0SC!kn)ahA`pC8%Mw&>T#;MkhiWds@#S}*~?vQtiUkN1TLqJ z6fGdQZ+0ND4t<*Y0ws^%KFN$4rJ6ju2v9rW`}utVz}fsec)ud^Qt+FDl5?=P56v-v z!`f~OoHAgal(!|3|h$I0x;^D>@0w6qM+iq zeOD26V#KZJ4ta0P<-YRv(b|~G^P3JRJ-lzXz_gaF-Q>q;q&uwsn$@B*$69(Pd-8DA zKk|u6;(xxtV(8^}K3?c9jl*4kxMO)B@4F|dNGK?GaCX&oR1=;^@p-`PJoq;L<9N+A zc~_2ihr7QU#v#ADft$Ye$cwv#CCmZa4`jTG9zIYm5)+D?fS*EVg- zH+H8w29vX6;Ub!b-7+y9dh(_k=2*iJB5iXwa@UKQo9>Xtu;0L6?p2`-+Zp#oIeEXxw#^KT z;EwI11ye2Hf>nzr>9}MKNC)OVI`^+id!cFb@*_QPnh7&hVcSwfGDC*7Zns^C1JX#B zyYSa>6LK#YyU%?vD9-nTtQF~4ax(--brvOpW={29pWnXdotbW^bSC0uIRg%$nCCG_ zIPx&Y3yP!9@L7~y(m;V5^(A5Ek~JE1%TFJL099D`>L8Z%{^xtE@A`@!m$s>tDl|8< zSrr>xyJm~oN1_Qhq7=`A$w-Jm`r)R2rFhI6Zs0ob&HJvr@)h`QW=%J$&%QYiw?Kg% zK(u}fj6~MMxzU-a7%9TOtuch{cZoPHj&;^Sp4IPWYj^NS5<{p1{zszm-5{;o1{4U)Yh7ISC8apz_OOyA+X zo5o%2x{r)L09dpNGN)&8avm_YAD#F(hsT5N@-9kAOitN{ckY;?w~7mf61p+U3Ce%Y zivs?*iX%5-R>^+yLHFJiyz4v;2B3nZ>@X%3Zo0mAX3qtL%n3-xHM5ExErMa;N6oXs z){%EI{!Ra7J#L}unD}`84_%@y=TyzC)m`od|J$xP`4=Cptwz0Nt^Q5BtAF!OYtBJP zHucN!D(if>1thUoxJXX8PAml_>AlLC=$Lu<>$Yrjt~eIvhOMz-ED@SRME^B?~~Qh1Zj^LhwDg1EdOgew2VCqA{H)p-2@t$bKQ}o1u&R zS4gTYhet=JDKF^|vBT63^GZ4MOEq{T-RH=6`}bkH{%0#rF!Xq}noV4u^6e!xz}c@W z-_SEXyh6Mb;Q4%#+BPL$2CBJ4#N0ZxxZzcr-idMCga@NO$Qz&LA&2=gdOJ_%~f)A(HzsKL9W7LD?Abw&-HZm}Rmpccj8VN$wOd|inIU8_J zfM}*7Z)5+}wr1W$`3sc88-ux+$Qxetm5~8WNU+ zT7KYvo^9$sbi3Vczq=5IM)rExkoI|c-k4!AUR;%JdPPV)4*DTN@4T*i=%|h<@6YxF zRu@WCzGKXtzV!y==zf=#5F0_z+sOCf7E<^Ylqu>lv$$`R!^siG|N2WiC9i2hO#M*H5Y zh5HQs3Jh6D<@SL_XpAGf-`O8$Z2(#)6lQMU^1Jkp`M5Uz?oRu?E(%XPT3YuN*Hhpp zjy3aH!p39Dhvv`bnQ+w?Z7idNZygUG!U+&Q|8essTcq4FAOEAO4`a8W0SeDwXDp$< z0*OvTaA#lqkni(;D(|h@mH!MnWbWt)mMZM6d=c-!Jc4Zw;6ivT2y&mcK`{93zQ6Os ze==4t^$^_!+j&DbYIpDnzobMExNGFE9lxBRsC)`@{?sNKrb`3db7|zKQ@(fO&Sz6S zOHp1#uO)^3ffX!fYlS5zOC1>}y!{e?%g~Xw5;hJy8)Jt)-&F4!f;O0Z*;2fF?Gs5X z58+=X%5P&VSW^VQbE*_uAA#P|83#_%DWUCT<&1bvAbB(W%u1goaj zb;b-Z0t zjnjF!kvN87^S?tzVQ|;vUBF$sTMi;GhWiqVGUSVyKiO=5V5t_`_gm@~5W?Dnlz@5?uPzmLqLp`20JYNv$NsAlyX}{MTx>Nn2&hvl zV`G^wzo>R2jw8H6IyBF}CLUMY&`FAJ;rW>1GiE%^Std(l<#j$<0N;T*e0HRGpUh=A zkrjBWnDbP+5#bGK5?I&Y5_vp!PJqWnlbhF!40!TbQ zDDu@CR*aDPAVy*Z-wVO`1;vLE2PP9#W-@!Kg=0D{7v5VKyroi@<~W2C2@{&Jt!OW4 zSm-V+RsAO|8Q0?Z)(Bi`TXlf67?fVwaME$AlFjcDvW>QONe|* z#afWg;M+NPmSE9h=$1W)@EW~E)yb3pBD2ur$T=Wy;4E>rcm1gkyhk2}#f${ODUCnp z1t4&*ldpHJ8jz#X;^}QZQjJ3xzI@cWz#i(fi(g2QG)v#ue)yMu zq5V9Gqc2R?S5_9DruTq0rxun6===HvrqPzwh593y{V*}qmn`M9r0Cw4;ytu*d~CXL zzL7NCJNF&ebNn;9`+(xyCE*1`J+zw(GEj zKRX)sw@2mFfT}UiG*~C#qM6%ioJIAL526a`No|A^>)fuesHy2du|z&LLd9hXMI?4j z9OyJL+mey=BIc@@b$WiYi=5H3I?SOeyF)%bqDHqt{p)*0&ubl_XN0fXdI=#T-PHRn zboZM{i%Ij=h!XX>VK7-oiY38VK;kDQJT%f{*|}pVN3*qRk*>L5wW=NGr1R`Tp1Jnx z+2J1FL3)P*sk8R_hR~^BofMKV%sJT_406$gsy$L z=Qh=S4U}JQ<}|l)sUy?J5vT`;HlJ{qrO=|2?XWvmd#E>{E>E?3EC z33o|PpCmWs1s3!bE*kycw9@U=UAF&IvarQaf{M?fE}qaB={(Kl*|ER{ri1%n zx@3v|Tp9bE3s^<+&0wu6n7p$C4HYHS!K-xt^;z;PU^lROzgBRsV&MzRKIosJRs6xR zBk20;5JZx(eBeyn&ygL9l5mlUbf**v?^}lAxl&`J%lVFS;FA04&uDlLm}wa`T^6b` zI|Q>hQ~;=q|8PZh8!xI3V!!B#Lbs)+@!!xRuY*{^GgN6qZwrahF}dIXHdE<4NZb{P&~0=KhYw|Hj-uC1&__iw?;sn5yDy%!V!& zb26`oS4i8ABXY*;R4>A+cDn3c^i)%kO7&U(v=O-{tJQ%nN1Ugadv1|vDVV8pXJWyN zI7U>bGP1J9?Em+nEZZWQITKvdrA^s-KlxXzC6>k~a7sc+>xsQ@^uiGLg5=ABh^~!U})-b(8L(kB){U}IKk4vnH$AH8 zmVVhcRcL_v0z!Lw?eH8`GgvZQ@TKqkkW4t+n&=SCAk$z~D(M=v$^8GXw0(^`l7~U} z1vi63`7&L>CdA1fWQA?|{sG`$N8PM2JOP{yAfxv&;a`9ap0f<2y5G>(Y(5|l=KPMi z_fzM^B|c_6U4PIS2?U0#U3-xTKZ1JQ*C#tX8q=?{(=8s$S2i-jPSpSxq6G3?5w0*p zOP77hvb|#AXyM#5*;Co#HX}J|o2OE&egc1(|8KgP(RzaqvDehS{do`(%rg2$7$z%xb_9tKnZSamDt(0s*OYI(V{Sw^(=m}i zyuRBe-Ih&&QZ#MKlQunuspAI{Oa3O(0=svU^j)Uylghtp4@!)*lNfkniS^j%gvICCo*~Y=FP0rY*mH%wL9_u5XaREx8hZL9z`QZ z{-s~Xj@xKeR$g2&=yOh z#u2=4J!LgYB!@TM2Xxd2s^@}@xOR5u0EV^uwq+l77J&(L8F$LX%&~8ePVn@sKxn7y z8}Q#~szWI1T%qb8-nRwud!|wM3bq$N6Cq9iEp~=LJW#X(jU?g`C4G{$%i0V1$}txR zYc&_rrrBfk=HxblWq0O58Zd6*i-dKmv*S7L=)X|J7_bhY{J8~(IC8;y=+6el421Mv zAfnfH6q1at<2g5KqGufO-+D;&vI~|WA-eZq^vaJdc2d%>3?re>5>@`47|D{-zkD{w z;bQtB%(10GyQ|EAjiB!4cHZFaeqQuOVyb$vy1cwx@VS}Ad4qfHWk=lL`DW&uv9B+) zKO`>+=e@x!P__T93Zx#KMzHv!35Q(t*dr!g`2HO5;8 z^kTt1_ZWD64t%;*bvK!N3kqf9g}W~{h`zOvZ|swD63!&$ZhY!695M;B)_+4(=xX_j zhpmfLThf8l#zWsP1Mkq~) zkCcQJ(lKZ_Df9g^C&K-!1Bm22P^1GvngR(lR|h|dsH6iXKd5slSVu_QzV+6rxi$5{ zdfN`_D>}TXIK3l!6cS^rhrahTJm>RwuTDcdQ~UR(BBNe_6UGDRkR!4-2s4f4|GT_sRL;1guZWEruJ=;@gw^3p< z038`cAA>iK_k{_Y9+%N6q@E7V zfq#c{#tu1&zw#Z+>$E-le4W+=M^^%d&hOtw^tUdY(_Twr$PbQI19n$c>vW`B|4lYu zAZ8w3A~dS57VQdfyI+p1*2@McAsc*HV!pu0PveLm^(^*G1y7^cv{SG9Yp9dT>29mDWr8hbP3o7Xl9<)=8?6RM;U^gAh(a zSs3sqJ30vr%69oI4{Wl@vKBo>=yK=-6-!YpA5=fwjgQ!S2j;>&JQ3gT+WpP`&$#0& zOAfSnj8B9q=&ya-vp4u)^R__^{OhQ*H>Q{CUz**Z!F^*)BV!GH8f0>)MdNqz>w@bC zds>uH$MNDC|v;D<|^MdM#v0HJnn z>bVo``mS*_AL?7_J5}iqeHy#8TCu3&Gg!Bc;V*XE`sKc+h4r5J+%;RiYgIHdGQJua z1XZb~q3P(0Mv9Im`N|pEmEx!Z3{T_5oioov&+gkeG*(<(*Mtvloq~Pt^tKy3mWWdxzMFei+32m06Ha(q84gZNM8%*e@?aXLHuxGM0Ujba7H8p7p8VST$6eu@A9|cvj zK2yGdYtP{9M;L}e562*=Bn*;#)^bY6Upw*O5?!Kg@fUybd{BuYoaIa3_NaW8-7<3S z;_?_(6yW}3Ghm+b2wN|szHuCslChm3?8-(f4KGq9bRHw`gu6mq#(34+m(*38^&;;b z10L@D)&rvO5#ix}#@dVQT?Ex;0;=_?Qyhi`KzL67$tp4LzWBPqC!*z$!SU&yd8CT; z+Jdw^fu#x|JsT$cYxhD{D81w^-!-qo2l1QW2k-kOJQ1%PHPpYy1AQ@>i*09U+z2E;Xv40(%&|Etn~ z+NRD>JF7t)XM@nPoV@MZhLhoi7kw30Ca0cC!(fN3ue6Zl2f~db?yZ zPKv5Lk25)MNnKbOh@%8pUs}fbe|n+<0XGZ22Dur02>N&q5+74I+5X*7mBW+U!i9Br zz67aCldilm4ZqfBK%GDjFoYPW-(EtNQ`c+VwN9MwJ`*t3uR_(_0Tv&6tf#nB9xS6? z*oYoN`j$t@l~xqKZb+7CmrVPFBb)6npNype$~b$#^aI0B2zl)>) zqU)G0mc9FOi$jm-mD67`G9%(bXvN!}&vK2T86x{EL4DOlO#9cow7Iw&xEP_UB!Zz9fN?AtM{b)XwaFoVsqHlfUv0gSL%%kKh#aOSi;cC)d7}LLk#g`x3(QNkYEOtO zG$6&)V*M;jZ(?W@=e90mB@cc}Pz0@xypUdD@Uk)YhMe*88*Lz5 z&-#+|fB2GwWWOsIZ<5(sMy7x*kOzBevEDOvPML=cdnteil-rNOo+I4hgOm5Uyi_#V zAgg-{*#<%^j*$Em9`7O~tOK_mUm*Ho?D3komsZn#J;pra_lh6F8z%4;|3^;TmZ_>l z2V*CG;Xtim+z+vh>bM+0*wxT-^jZISspAv86dtVjtf*d+ec|8l4<-uoj#hFAO^X34G|cy_@W7)`M!N zCm;N4sVN zy&x*#NU<(nrg)-}HyEc{4YecuL~rZ(1KE@-gqHJ^JY!rVj)$k}>yhg8hAJ=Q+=bMV zZ1-9OwPOdYpQ}JtZ!QxmH*XZ9-HGg7yrzxgVTH z5+}ptQhwDpuKs;t6-nF9N?v94M8ijnzu`3-JR;7s1d7&XjiG6OS4Nd8N}s@nGi!(E z{l`oPE@zyGwfBD65K4XSIxVv=)h@mqrEoXVdJ<-0G6HV|voc5+tr%G==3S?yync1A z>OEPx1#oR_1-fdha7a}p)auO8wW!MSaQH$*`?CBlb%4`mrqH87Dn@lEA6XTYjM@7T zR}hMGUVl>zyl=F~q~0l3E@$|=GHX(DZbzKvnF1HG##~Xzbu6xA*S;D`a`lVdOv#JL zNo!@MOWI!!161#(*j%B3QMl!hZ_S-|BIw6=EWAB%*<4L{{?m1N>c5sj)=k$?pSAi_ z*-&S>0Lj4SB8T5PLN)F#IGGC1)*cL)T%r#;{Dwnc=e0MCPaiPZJR^G1Avi4Z^ln=C zr^i{{V_y9kQx2!A_x?QLa`wKCWd6-a?@l|6l~iq|Tj3)>2?M9qu$1b{gM(faUAo|h zDKywBeY*(0CkYRW>-67z^O>Cj=89ix#+XNQ*DD8fF3$tGkWWPFCpg{e;fmN!apW4t>5Ox*#->3~ z08PetejId!7;hO(PH6tNcB0v8D>|41U6ERT#@~t~W#U z|3cA{-19C>I>rRV9Dt&+#T^OUZ&G*hBkQ#ANo3G?Nql=AoR?I7SlqB_oypF?{NSft z8;}R`;Rg`h4iAP)qMpK)Z9JQCGw`i|i-Skk`ZPPNXRU3&$Nqcd{~~SXKZw|VSaSUb zQSJ5&g~{ou#d41Y)7S2eJd8aMecv5k3i?6*6jNJpUBs;gsr78f-!#amdq8HTw`pU6 z#JTB763kc*oi4-KS%YguLxWBmgsXVYIjszA{+Y$|97eYJTepY)gCqL-b)Ba^!u#Hv z4pTaom0ucVhhj-!`+pnybO)l0>lH16H?SEWw*1cl@ij!ta}|(gZAZdZ@{BK#mVfzA zxyb-@Qg>7oIYYqZ7vm=Gv&A5N=dY$E9Mi*c~CKIZl79{ZVEVN5JyFo#YpI3-c6PmW9Yz}hy5>x6*v0uXI)DhoILo*`URe;qc3d!yKE*=UF5%G5oJAulQBSHeOAP zoRt6aIy0Dy=7{tTzfPzr$4f3RkE1|t3gMG*c_<|B9{q(Hg^q>_N;Ej|)P1Sd{NatR zV6Kz%+NjH2ylXC?4q;w}*Igab<&d~vA+*h%+r?qEf_c24x9H#E z9;6PyoI=U3(%s(lEN+WKR(En&k={Ez4pSar7x51utM4D&m`4w^tZODG9J$Oyw6!7$ z(VT_!)9Cq`EKZ*?Sy3a=CS1&Ehe?Miw)y(kXU?*o(RCjQo^u7)DpLq@Tv6$$FRIs@ zBc5!@t}E%q@+B$TD2sIE5cqbd@85Zj7qSM9tS*+XhCQtR7!7~NIPm+3y=aBE%&vj% zM-vVc(L9N<;*0FbxXi>+oP98EMq}-Of8BR-E1aS=4uU!&m?@c~fK5<;;}S)CR1M2g zYL`@C{p>$%FW~UX1Y^SRh+4GKH@4SX_4WVKR_8 zobUCEc{73g~a5!WoLrHtfzG@*F-j#+}+jcY~1& zgzF<>)v%)dm4po(9qB$pWZ-5(ss|;nH}K?T`f-q*Ou=I}Q~d*stwGR<#k|M&I{5D; z#ZS~q6mVozzBuY@-u-Cf+E4nPEk47qt_YZoF=Hbtm7qEx=J4W#pk20sxQG16!~1p* zodm|Aidz<9QMW61A~EfVqpIDv^p&N2E5`}FvBh<>j&v?__Q)Z0jUwkvU%_otYI_Zd zcdw~5C!zPO*UE0oT*29XM z9G}VB0BQ<^HZ;6fa<=7tpC(>a?;`;uB`&A=uU0-KgRCS?j*a{^zaOsIZ%$K-R0$&% zpE>8?%OSDSdtTxZfZPC}Y|oRrj89%_`u*GC^+nxjf(tD3jTb&tYB;7iqe%nZ014vh z6bEVD7VceFyCA{=rS7{wbM)IJivnQ)vn~FCp!M@tKkgIm>|Q)hDK5cXVydBoSu;wX zNq5bE&^LqTWJX@7OJB(1j`vUdm*8{Qd+s5=HSkxMx7SN3Q<{UX+d?)!w@eHcJ0Gnf zsLtF&mY7;aJu|^CaeKcivA~>n< z!+|^)-(u#p^Hk0kG3z*6i}|Y-n%L-wOTKk8DssIL^}tp*4=f@JsR5&cZqM_%?Yt7ET!@mGGxI@_1glW-0%V_ENJ5i@$rivD{NSM z({Q%?r6DVhk99267qHb_-3L-uPj-Qb%c;ASl?Rq>czlqJ>Q1BdImYFvdY0IDrf%z| zM4sj7t5dvKM87|+@k?k*(V+>J@N;}i z2-ezo`_Ec*b^Qi6ejd096CO<-wNgF%^w_B6PbTx-S5$Aspx$>Jw+)__UlA!?`acl% z{{tcOK=NvJgznP;jT6v5$=(lZuW6CyxQ#Nbyc4gSwA_Dv*F%c@P3*R!8I0F1ARq(4 zoO?kOj8}6I5rBrj$Qb_w&h*y;rOTBnH8-zOmXsSj|6KgIi$EIp6kRC=(&Szf-)-Q|8B5*MVW^lwhbUtA?`YXO{H~_W*Oi5f7?Rw(GIs_5TP6A? zIsCo1;eF7htuw!Y@1zXVy)M3O!`~%oH#`#m4-fqR;StdY(Hfj@QZe;-1*MKd@mA6+ z3q?2kIZkWfP~>ut{ZP^Klev}amSa|A6|XiS)`LsF+HYW>_w-M>5##ntcm187PhCch zV~HzGRY!JkkBS7Piu5Y%Fi*{=Q;#bbLn!kPzk%AOhesA2-cD^%KCc}N^|Y6Mv)@@? zN*g;rDil8eKS030dFV8HyM`l-(VO&k9`tG@B2XO+ZYJ5hl2_V!m0kXRIVGt`m~PT* zzLNwa+>IcQHCCaBbjLHPo8)CaQ9)L8d7ymbC*t#@g}8~u2W|JOZoc39PcfWmt1#3H1eZ2Q~<~P8{>~4eu~2C>#y|{PoV_dOz#>(=&$fBHsW%!=7T1- zoPu${TeA}~Ql+NPUU&O?<-b7RC9|}xAd%hM9`^zG`KJISMxYZ6^As*I6*s2|yO9i2 zs;0}VyuI^`6NyaUn zp^b>yJ-!|Lk?4i`jC*$)9EB>3xcKVDntoRxr&-7cdRSy6;KPd!ZVW~C1Gd;SN(XjZ z=(wHZ9C@Vp2(#f9$G@6%nevaMvrkKlteSOwJJUxjD(fUW+cC3wboT6~>c!=|#N+ng z)Yypn=*@+}GrsPQlJgH@zaoz*VccIP-mOWB_;?}HGw5O^xLwf&x+Z3eF>+XoV|DyR z_SXTl`YjRCnN{#nhb&9=z?I{($tOGc+h^~keYWI8o49*OWOajnE7}MALNa^-ozKvB zI`(-nq>RrY9lna3Yk=>PTYcpgfgeg#!e%Z;XkbZ5APO~;N1f*-A~$E)uabi#oJs<11cqa^fTtW^ zI$oC?m9{}0iYIv1*UIV~V)3f~rPebgF}V4OEA+h-8ZGUeIAo>A)>jb%RmHMn z=EW`!26u8C&Ph9{T|jRReu>MAYhfPCRvw3y6G=+L?+gfC-)i%=Af24QrCGU zuwto2BU2M7VXSrf$rfRrpXt9^YBiRdqB{;D5&XR+?ym6Dfkjc|$^F#7*68s^QF>@_ zgNa^8f{Xel8@jP|p6Q+CE#b{i1=f_>{-1ruZaJnkU)P}|Y6{*^FkWvr4NgT^Vd=-B zH~Sv9s&hTX!zrN{Ze+Vpcv&%~fjeg^v(Sg2OEGrqv_}n2-=k~UN}-jTL1u%$c2yy^ z1UWqNJLt&XuoN6+I(gOUAts;aPke@sZJi!#OXh!6%p@+`bvT;qtJgDVtmrVExpS~W zrxNsq5hF`WiABExqU3+QvIsZN6Z`>4SFV&K9$6H8BFga@d|m=sN>8;T1Rn`!fCCrC zh@JZ(fR^D2UpK`xQ0$j=*hwBS`G<|{rs7g721jdQK^J<%qgytD@fKp~;IqX~xc`?n z*^G9l_L#E|J!LO-;1r=_6c~!Wyym zPNWQ3KXx%Yc~11Md#<~sE?7<|!IQ$7Q7JB_BE{AYGIgfM!==y z;nS03{hBL)Jnd2S#`}svN9{u#~G$f2eQu*y9-YT7JQH~yI_ykP?%M~pUmR{^CFnD zZ@P)Fcc`BxAO^6MI_v-47zY#{V>MS)tha7eNjjb6r^1Y0u=w$;^-`v5pR&jQ$H{+& zMe%oA!mtuVvLr!LqliQS0m;w`5+n$SN~S?1BSAnwfs(95C5Vz51PKyF5CowmXPTU$ z$vHK#o9?c9{onVTGv_%o@Ab?)U#l*Dd+oK>-nBPSHOQN|f){iq#>@$$;oOiD^`g_22lLA;DmrJS2FGD$E*zWT8bp8fDNcltYobq>y#= z+v9yOX^Dl<+7porZ3Z0L>SRMU zf8y2-+;o-o9r#es7A^$dMbHbZ;J&D)fZMPGE{y~vFwoC!$o!bQ?@DK?!rC4&-2<;* zv&X2y8yv-Y8qHqJ`{d5fu;N>NKC~T?NBn1xN6GeODE`Ao@LL{U2kWQrAQiRiuS{`NJP01zQZ!)`8AIofd_#L4h zmR!q2!0@5r(+akmP;>oWn29Pcdk|QfOOksDirV03Yv3Gp&mmD65i_&B8`KQt!1vcb zw}4eDKlQdn=g#X@kfg;*+9pv@Mo0KZ(e&Z?0)a@UndO~t#dd8N<>GL3Z6x&aJ{4aE zox!uIf@(VYpPpYw#}3$~w9DcBQl3_}LY;bSl8-_jxP8iN$LfBp5x8>^8LvS3)8&M} zPp{on@qC~Q>_&tu_K%U;3#Z-uB$2afAN(1g@};y-UQKov132Q;-^`OGqbk3#J_uj} zOd8dKP3C$n>C_b$TQ}ecU~_qzcPOTjW@ytOw}|4`go8FTtRxnm!?W+V>Pc}wd$DCC zI?+Jp{!Y2~vBK(8V0mc^vVYDl?>}Ptxo9C>9L#ulcSjrJN&T=8j1(Do7pL3>El)1l z7EhUpUFW;TLKt3WrVCg63IC3Aedy>PtXco|IO<2iooi8-{zz8$RjFa4OvR`4>0$X# zM$QE5^027SJ(!}`H3>38)cPX4#UF{10o^mZ6a_qDA+=w$l;&aMKtJ0 zlwNz%^3qkgOtC)(PQxNHqGA8o%)6FQ6BfkuR)8ct)@!SUmt-Iii7~aU$BwmY$x!sc zp)=GZDq?%&JN~}rTFlzhZHZXixGDVw!TyofQD2D$sw5?P;dVqbXaa0`5WX+jq^4r> z+oFT1H9s6%L=$tHIJn~FGy;yL8J@S;RU_yUzGKln2JWNotTW<1}^Exwk(E+_tHVfB{^3^nmBusJ7lw{n4 z@abBX9pPvMi(&okeSO{shVI7+&WtbS>6A+bWWbn%tu`=o z+MQA&(^uSldS%oHtCh!WbD7UW<0GF2X&YV;S4*jidqsv8G!Kr&2{J!<W5UuqlZg-+=>A znNfe%V?dpDz8LNAn$>Sku8-V}CbpwUG5BZhH-7*2)c<7S|5o7QgNYB+bEv7S7cT~r zB1Jyo#thfT-BiAX7@2-;oj@8b@li!luJ6E$%bqn ziMn&UbbHWSMvWJPFsdYYTLJb6Uc96xU!=m5|G_#gwzOm$8A1F*3w=5ed|VSXTOL5) z-M#-+vhT5jN1%9?V1}rU00;Xq!;7j5Gz{NoZL5BMJt=>AkxWNGUU2m8$d6zeg8X=gcm}Jy0;)?1WFjS!}(NAptINTs;U=M)J}40rN*Up$cOLB z$<(h8T||G9mm4|Don%{abcb#}DGeb=fJ#+jqD%hNyKK)Mi#5GxvZOHY%KMv~cC!$> zI>SNHl_%{v@sj4#k3427E|-x`*Cb0tNh`{>RYECMsi!e>t^UBC5ffi&B5eZ{S>|uVmtk6w_~@ zTK&?+_!mZde8{wg`AgG0nywZukV_OFA1Z(!qKCw@0J<`orwgpMj|V)t(v z4+$np6z9J(XC!U%Z5El=UyfHg)x_oG`O=VP@yPZ|Ymwa$y)a;SO5?x3EMWvlK$ko5 z@X5mjGsdzv8Xk}KGk&0feyHmN!%)9_;q{Chr%w8koTTSp%_8Mp-tN%6c=6$;|3BC- zaj*QRWM9@y3NS&mdKt65i7b<=9FWVK_I%*EKD`)tVo?L}Cr=(S)=MbaR=R_*$3tr;8aQZ`Hy7J7W6Aw(KgtA|Iz(8GqG>aLhZP8M~s&1P`Ls(u% zJ&h>iRU3}d=ZMP1nR&kU`@WY3%P_U)Bdz7gRFTR88sLZLYW|KjQ1pn~IKsBuW3UM3 z_Pql;z>PY-Ig96KA*DVDfL#tetei~?%M#Ng?ET!a@n0T7sUJGLdcfE}rI8tCS;8qK z-}*9YaO&gKKg~lZWgge|J2?7=BxORsV_U^|2i>nY!TfVs6nvo%7<@kI7&RaCjEjXh z?`2X3rAufqNQq9FuAh9gXiWmL-+oG@E7{-YyS<>zr^3+QTs5L~@8Ks)F4LGm8opP) z@2Zr!)!73sM-w{)t0I8lu@7r47@GG_fFWi`V|}lv-^LV>{ffV{f>i7avzxjp{n3N_ z1o?25;S8}af3({Wv2FnB88u@&@~q!qT(@da{eCO{Vk?qHy;Mqea2VDV#&tvb+$aQNP@P9tzmpr*KrWm!f6>mR9*0nNy^-M$dVU(bJ_Yq% z3R<1voXAh)@G7KQ#GrvjXyYW(`h^h@^RoA+;iOt))`QCtNfJqiCouD1VI4Ih|IMIL z#3Gn9d*=N!I_sX1YDB^`MEGdZyi-78symuZq`$GSYDFp2-g==X2rAAjV#IzY8n_Lt z>1=mh8mNC2B$hFaT`9NzdC8sVd82ptciei^QV_|x&Iqd&ZTRT#67*PLwKyNUS&OYH z>h$>eljbDQfzA!T0!`3RpCyU*;YH2B`vCYg`wuV&vQLA~%c&`)A+yL|9Ofs}Q=Nah zdr&2;h}b~pj4y9Nnd!54(Eg+5139rwDrBaQ@}pj>9`7$^gI(ijXk%w@1t97&sTy3R zT4WX<1Pyv24ZJ(_T$_NJ_$C_b90$|3b$l3`tJQ#m?xSz)A6fBd+c^@a2xPs`AXdwz z)dJ{Y7Yj*}K+!rZ_5?gp&4aIO%#&)~N36Igxf6%CO+ORZzImmQw<>0ZeElB_pSVe9xA>Gv5KQPN0TXkb5z6-l; zhoh+vu3=Pwn`YHaHnNS`i0Ip*_Y}VbZ@boA&w|ID#rN`UK7{m6kVj~YJtVO+bGZ(F zA|kUhMRohmSC*qwnVWxb;xzdo6{dqy=b*>o`eJK~W)J-~px2_$V&W zeL`QZ>E2APLK*)O@;xqLoJLcIG9WSW5_FFjOBDEVnh+t3x_|g&;B^8^c2GG_$?fJd zZ>`>A)GM$?ax0f={anlHOM-#zra|3K?eRJP^+np8pwIYKrHpTSh=cO=1QVTbQ*9RS zHQ@@r+Jx7?cD6j~WI#GtTcqoExYvt=2Gl3U4^-jC$OK8Tz+|4??=_^$l5W3$@~~4p zDaoMv(N3a#C1>&U`s={Ql+VI2z1b&rb7%gUs#|I_x`OBLy}d0VzrglhyPaQ3{MoZ> z&&27)A!(u&9*&x$T+2z=u?LCnS^0&OYp^2tYipmY_BsO$t)hk%_g9%%-h#kZ<+*ql zU0D33Mq9j|fx~0XR<5EIi61J2j%1JUA60HU@aj5xANbx?j*3wmqewwP&V89HM^lQY zo|$(R`Srxkgp}rvjHXX4{>=XanT%OG@ZL=^i(4><2CvIUE|p^Wq`1`g`gsufVjC0? z0~|qJu%n32Y-faI?4m>_aRQ5u&%UFvVq5}w5#`M9*2$n=>91I^F^&I+nkkSpw6I1jNK~ zo1B^KFTNzAI+)M^{+NIgS5Ra2Y!%b$K;)A!p!x824!`35=r%nCyC>1L_caUSo2|9J zaP$MNXo)r7+=}jsr}Xx~=e&v9t3*VyfmWw^ZJ|0~Y8?v1F;78$+eTywn3pO(TZ83B z9VmtOs!!Gk98Itp5fd;gsI7ZiDbXg~s++F+SQ*&jx)Arp^$ z6l9bBL)c5|RzL6?acSD;#Ie0=W&Fu_^GJGX(>L@+nD(Q61@*K;k5zmE9o<0i{z=8O zil6$Aek-4`!D^Vh-U5Fw?^3Qh1{Y&@oD-;hB?|$Z&^PhXl z1waW)&;%YO1m`E1h+EUJ9j+~K=PjFE^*_&^USG>`#@tOmB6TF_nlybjn2VBFW9Qrp*y6l(We4T82(O?R zFu65`aKI;oGU`_1I>f)cXEjVlmXfAr_AZ=e_+LKSi-o;5%evUdrc zDp2}6jcA8F3Gwqrw7MoKEgN!kbP&NSe<{Q+5d*YN1NX(yH}|jz(}UOBJ`_Ha4)8JA zL3ZpICh~EN%@m>L?(tc5a{gM#MQJFkm8MqsH&wv~_QPxP zLUX-+S_jH16k$X8qHF~TxyIVAIY;F~OQ#YD6_^7MF0qy_u9jcB{Qj25g~VAihEmvU zj2z(-BjWygY`|^Y!?{>F zte_~Bx4f%zRD{` zR6U_F(M`a3*wPABN7)!o`Fv$I0S_pp7gizhW>iK;6gNlF?Ka%fO{GcDgng@g>*yD5 z{IFcD1CJYLy0VN6+y$0jKUB^nKG_kmIi&(aB~~_u$8L1LcngnyY+_00N~F0UES5dO z8+zAyI3+s%lxp*0X~Ympkyo*iX1v3s0A%WRT=Gy!BP7(x1Fh946eJT4#T?wClhkuE zfjkahdIDF11^A-kwhxq!#3DL88Xj18dprGd`l~1WfZ`)B3e$Xf!03OR-|kU{_4sOf z2PcZr__5k7`APwk$JX5&1XU9lqjOC8zk?(y;r5gAtwV#X6^z#m1;-F0P)EV`BL9(n zrv>XjtAy>6OQ10P1@)sqlL*-kvw4c84B$r>oaZNo>E*9Oai_sw(wp4kPp>$_&`(qo zqXI5o_^NLr^2|s${=wDKl;+XD#bGf)rnB>JmJ0)41^dpeM=cQWIIiKhYzD6IpYnVZ zqM#PX=kT3!H1h3TyI5eXlxYJ2E{PR3Bk%D84yk}VouOR=B#nkK-Ta_N+SFTvcrM6B zX_eP=*7@%C(212&a>TJSHf2|B=tRitc=^ycm$H`qn+rpie_t0UBhu66FZAG-_9fOt zC!TB^pk^3zPnht?yvP;TnZZ}lr$i>lc)i3@l->$C$kRQg+V>fuj2F7%+oKb#@F1gc zG5Bg@o}{srr+zus~`_-J4UDR)Md*$*sPzY;dUjM!H_8yq|! z`CemHZRhBE5+Aj&{p2$P!{Cb~!i;J2hCd>$a$u^m^377tlA}0+a!vUbr^vTee&g05 zNc%Dy6rcippi36O#s}ZtgGV3GPJ^Z9M{j^E&&c1&Yqc*1^WTrjZj15#yR2LPSG8A) zO!lOHC-By%%n`7QY1U%>Fsil%9mvk+@UmPg_OITe#Jpduumv8Q}tKL8$3@(2sZ&e=p z7m8Mn>wLLq+sP5OuEmn7m8IIoRK+FB<>ClB zcZ0h?N7`bOh$)ixNU^Cufof<>s`x{n_Q^7`2;eIV3OBKYm8feY1+fQr4bH zN5m3g0_gpmXnTQf34|=8X0RlWgHKy(=~QWpR3ai4avO)al{BRumN$(pp%~gODdycd zLCNCM59;AwMS(#Lur=8ym-eyL-|vy4Wqd2TZ-JYd;F3K900L>L@^*1^&0GjOFqAo@DVcIl7xI_?Bym_;-~-0fEDDE z83?m=8kBY6x=XD8buGDK?);O-Vqqv{PgtOI3|Mh(5NbO_sRA!-7u=%HCt~q}^@s5K z{??_Ty&LL%k@OBKZ;ka$p2luI^PT}tCw>Yj`|KR!j*n-P?II7nOz#oR97^7}*lyaS z6k4d1pwd>nZMy`t)TqJLz!_qTmT>W>^I{KEnibpe#o~wMfpIFTHeZ_$buFQQRMZ9F zb+CA21~LXa{pW1WSasf``_zA)4S)6u-rrWo^gV`0l_x6VU7ThWBxc%h;lXP+nUZg5 zqML;@-)hEWA;Z`WU3#f=^w~5E$pprewZF?*x5q_7jq4!$E*$Uk_m~qoYuON-K@C*? z&6L~`^FlNboMqHYOE^V5Qx(6m1Dp|i#0-^wHjX144yI2yE;j5J@1)mA!TT=1y|SFL zOuW4|++n*?A~E_f1M#-Xa0f-0Z}LP_0`2AH5-keFahH}A(!V|(cp|)|uGCB}mU52T zE~4h^Vz7XeZw1Z%OW@X?ezTN1Uu*YXWyO%Z%e4LZe6R2edsiQJVk*AVG``x>;~3c1 z3jQgGR2@TU0q7m|&ipQV zO1HU*6z{%hN@c`c{>A8+^SqQ&me{&)zV*rIn(OPe86m^4(_bYI0x8C(By_Y zEGS5a5~IF6Z9{!d?2mOlhL1gqIRXlV<9R`L%0NIB!etXBr%DUNhIJ+~es+ zSbV2xrz1%x2cfc#O<)BFsD7m5TXG^%tGZT-kpF{VcwTpt{ds!u!d%$z$z;QdddaX~?-SU;N9n>)gke*8nSwe*(7d_C2 zhn|yqtwSoE2ed8(o#jHmR#7MFuZ6W^DY5h-Dq#!a~tT8zQzyCpN)6WtdE@uia13P+Yve4$mu)* zIu8tc@U03;CNi}o1 zP7d>&lvHTMHO;k@E_^}GGTi@wU9!+sqe&Ssm9|sSs}B$^v4};ehDdVh89F-o-a)w-g}w2 z+}a%cs9?&S@xwLnQL0maFlzv@gzo(2Lr~EYwiZ`MJ_m6^6(PC|r%3t1JTzi!39n1u z=`mJEel$z+cN(?|=Dl77a-3r&kGVmLf&|d;2z!Y1@(P(>79{92_^8o$hJyNu_3z83 z#CrBa_n#qnsi}07!AEV529YHa+OCns)0B^kw1IU+a@%=G&7>qxCKvY6ERGzly1HZtANp~>V7x9` z458X@#d>|^S&djzN*<$N;--f~AKO995L74rWB!e7vGLYk7g`(QIB1)5-i9T@8>=L^ zy@ok@cpiI$H4~TaoH;T9SH&mvl0Uw^&#lq2sRq^pnGEEzdN0lh*gb=mPKh=?v^+Qo z<_QGt$d#cU9;8Yd`~qW%>5UsS<$cZN=g=)@J$}R(Ugt&hx`@$7%&`gk!Rh8S1@Er~ zCc7ZxE0ALv5T;kC(VorcEx@#NCN^^C0LAg@f*2`L^>YH`$OYVh0&f@65*-t=YUu`| zTNzXMbtjJQbu))5Hb<;`8J2A&?0t+r@UDc!aTbqjtY1GLP~X&Ri=2+Gv95W0F?Q?6 zdn}Msiki+M$psF2!{{Dl*i;@Sq(U*+sP@jovn_c)rfvLD@qqn_a;nk*&k50)CALd; z;_e#!>H{yZx=Aq4>kzS~T5NlIi!o~W_d+C#>peUs?OZ`-AAYNN7@&%Qe|CLT1|uA1 za1H!*ms1Gq3FOv!hXb524t9!o629}|&PVJThfsK|+7Rrjbzc?jdTwE8Q~ z<_GtrwGX@%fe#<6?%GN%6ALCK!VXPTdf+|0M}Iwoh_=VAzLLHp z%!LcN6}C=65qD-tm>;NqVInbSyc{5h{{k;aI~sq0`=JdzyD=eTA$G%Wk&33mqf1IZNWO`1Y|2zPeAx#tI(D zbccaD^>7BWKa?0q5IMnRces!>V8tmF;fj{X(g$o*@I%2Y*P87f!Tz@c{TJ8Cd~#K3)iw zk46PfpbXY{_P-J(MVrE-pKFn62Ir^%mEQECOzwhLiGyirZzAi>s&>~TQ1J~pTQbW z(YDJ9j)_f{S0Q$Pkg@U88Z}qLeR`=&DolD$DlAMw-tdODJ0-c+U5e(te(lalYV^Rv zOLx&6rL7n7OLGkr7oHQtoeM4AuGqNMN;5t!dvWj5)%RqS`(b+9&&+zm>((`Ln?7%3 zd%bT@FyuEd{T{HX7Ti|%P=4j>ZiNk7P_trVV46gbVaU<7YHi>JtZ7I)AE2HYd473& zmjZZ6LIV-P_Q;bC}w}WS|lEprKvIXFC?+&lLYAP;Q>`$Qoi^b$x zEK0Z=?vy^}*|ATMzbu=I^PB7u?|uVfh{t56`zLDsRKHp=BaJ)rc!ZnqqR^4BN8}Gn5M4C7gFila;S ziuKDj)P#CvE|kyCT+Iw2c2IvL6EeecTwK3O2alHiOm+M<6`J=(x4c$id^QzM!q}nR zs^hBLU)%zhi78uW(Bd!AL>wf52q99RW%Uf26Nv1i!)?UohLjZvf&V*uYL;3(s&mv;X- zQ_z`Bubvu`O3~bxapLw}fkQ{|4c3X(P}&g%u_#CFYh79oZ_W91XRsQ-!6ORt4_EwK zBiEUSw9_qzDQ%W%{hEfC_D`#{q2H4Teai_fS}}KsGc}?Rz=z^1UUoe^d7Qr`0g_-! zypcSEjAe>@uRgZ1(=q*g_f)p&pEqh#t%K-B^wK`1kc2l}!2-%6uNyH*mz)ss@b3V) zh+ak*1pC(CsQ7No@^SLg0n1T&d+Iul?NpKqwaSZbWW3Q(as*D5tS_Apneicq zln(g_uD^`RDEGNf;qvUha?xK+xrclnB0uL`r8Sba$|*o^n7~D3%4keGvH*H3m=!|R@mu`D zJ055d4c~kP`4J2jI`@?Qf%WR)1-FF?&@~kuxv@7FiKJ?72zPVeksu&W@CEKiu#+wI z`7dy8$IDduAMYgFuRbq8tIU{5u1Qo0q{-PvYO-fm7+kvR+9gGqoH{m#H82IV;)){sA6*g}!nwrbLINlvmnQ-SYugP*p1uViL13cYIm zxf4aq?B8bq%ar5tuccdSH~LVPbuF`eI8vaA^n9u>siU>1i*LY5tnk!Vohdz}RoIPY z*2_N|UiUe`>{c>z16V5&p?dQOryVcqFTX!hy;`0O>DF~k(7m)$tvtZb_-3hNj)MH- z{F$V6!Buha`kPTmEwof`3C?H4i6tV)6Nm%Uyjeqo0w;==K&5@5zzm)D80LHBN9}uq zkxN6O&uP-0ZJL8#uTR27A)lm7i|g6n^QyI2?*-gsJnH;Go{~DooBB8ZfNZTSCR~gD zcuTJ!$gTwX3$86EJk=Maf z9NE2pf+|%-zD23PFQksftOCv5l7Z^M39j>D24~8~sJgD9L#-B%~KS&Ne4>27E zvaWos?vQ?aV9vY#!I4TtqEtovZt}RA=UFLx(})&^#lqk2z!@;OHpOLeybXN`l<4K( zMr}L7Ls)k8u{mrK;)$Uy&q`IA|3}t5g}6HW``LK37(}LxC`WV zfSyMoC@ivYQGeW+ImaO7uXk!*QV+QX*x1~WrT+&#|NlTwp?cEK?@8E-vBLmvB3R6& zHMpV_Pu2j{Edikts4wZ0`|a z#g_n}krj$={7Lg#9^6mdIE2SpFtv`~OSU09uv3Mcyjq(Ejvod!>T?7Qqe4o(DnPP9<{mhza9@9XkpvHj*vWD4y9RB`;rMFLvgEfA#JV7eH24MrHoR#gw z`0XQ)@z+%AaVRBBm6@o6=Gk~j2jkJ-k~Of4o!C~e%6$G?}^Qjc&d zjSgR?a$vc;Mc+gB$lCmM?n>M5s7sQeQeh80=!Tq$9<>7W--#-LuDL+xXJ>rx}18@rLgHN$$w3!J^oL3X)&e2PC7Z3$e z&a{3((J0Xb=<^1aVtLZg;h#tKJ-!w@?I$#}bPTocEc8c5Q!;JKv?1c}t{5DAVs0 z%tdXHGtSGify>t)d{Wl_YP|%%jubm2_z{}E+}5`j_fO#xWCteOQJfaC_XeM+V!`TSFfZgz=>u>+2bqhP7*qZWmRx@Oyg4ELbBGEHAT%-ixC&h+?~4~JgfU+g}F zGmM$;=Wz_gRsVy=?q6u02>>$|5-t2+>zk)m59))x(6Ba~R{fe6soLT<-N~QSLzRNw zRu$dKWXm`}ea*o4r47k0yOV?68w9ny@<{sWZsB(Yk3xdk=cAqw7n{2}((*QZ%?HR7 z1uR&|$GM&fmcE_4$T}=Fw^fx*St1tIWd#!1cO&-PUvbC|!Qih>VIpD{gkq239r!^l zd(q)Py(KzsnE;s+HwT_{kZ2eh*J&gkHFQ>HQ_5U-(=h+M+=Vco!Pg{7R5w)U#Cdc8go zj;MFOBbs_F=1`t$5l=Aq9e4Z!hs{Z8zjl|9M6pm*eVF>eeXg${6;oAmbK8HGejo@! zaFmIU1;Pmx-JZVpJSd_!uI&Aj@p{mxt_x>@{OSkKck6L?u#)YsGynQ5WkvFwo#1Z< z6BPpeqmmX6jeDBU%tW3pZ0{gCv3px)@3&y==)`xJFYwA5xI&T-?JDe8^iKWQxm@tX zRo)-9RDy0h1V?L*5E^zAtT1r?E5J<4zb+QC z;2DF6l*(rqU;$BH#yAUP&nV9U-=0UGLLAcHcTrnopnyQ%LNbzs>J75Wui=_e5r*EBzQ$Xx^tJ)YFdg1@(F zKC5vXXF1#UQm)z@Ntjh8V_+-5_dRJ@E@{K^o~o*cZKe=@$VAGJ zDQRFYf52MHCz^J{puH!Ih+eA>_eSh}%n78i6_Ikhpf8#N+JEK3Z*BRxn>C%F?*mzP z9S(wM6QQL}$lXrKDd32$VhtT^b_uKXQn0iQbisS>{6#Wk4}&(A(Vt25V!VEoN5W0V zcQqcEkWGJHy9!Q{%_*u==Q)4FaY@(HX$B6*2``<&Uy(k~q(mKSdG`mB*yD*IJjDx( zIR(vg^}KJ=oUnHNQC7fDyqp#B9R(tvQSLYKF^g){yVSW0Y~K5)S%z2AtSq5%K2n?@ z*jjR}@}4|+ESIMoIJU(o=aL3{@cz1yk*s+mR(CutFz##Nn%V z_w&6|%-HiDTY_tRVH=|*K)UCu6U7I`qR)fu*SbrsY4&0^|hh8f0!cyoqaN)TXctzT%Uc>HhH!~j#UcUk2d7!y&x8yRxj!LP( zmZ8uN{Sl&wAkMLp7NmoiDxk(y`-Aco+c+{%xoz=>H5Bn3`so~x2|Y_+vO$AE(O8e) zJk?)(?a`lV&WSgks(zC6t;?=F`R6MpYtCKTA__l<#rOoDE@fyelQ=YV1NQ=?F#YjV zT#T?Vd!67h+m$++u}dmWfA7+~5XPnbb>=CV?n7y3lg{^ciOcY6=kr>Xt}ZYChJ6_qL|5 zKm9Q@LN0z5xZ1nM$3)jad;O`HTFdPa5y?2>!LfkkQ5&zM9~;PaOW@L?`Vu|)8BNd( z@1;~BWLqIO?>&048C#cEN%x|3-Cnk$qB$pzwI&+v?H$epKNx%|$r6)k2D1XwE)P0B zg&1`REk^v-CzMR7u`#!kKA^pA#q*;?bt6<%vo4ZUc|Q%d#cRGfDrdyQP=O3|mV~%t zK=x!!fNceMti44?1Ws_)lFpRDRy5+*>!m&?*yginWN|}83X%In3yA?f&IFCSWnb^A z5H}<#u7j6Q)SVc=;#JABG%B;5N9=ZHvPMB|NH|h089M&F*8Bx~RG-dD`{=XT!_H5~ zylg^ z7SDoKy1a^lxAZ2gUj6{wpVTHuPaW~m8w~U&jls}9jR5>O;xd3Zj*EU!2vma zsonC}u#dXi$9TlTS7pP3gepo)?VJaf;gEFCr-SiRp@_6GaIa@L*=bj{#~kXg0zP-5 zpFoKbqlTe?2IIoK(eN9Plu4zQK$w$U6q6Rjd=a~2 zDJA|=hRkazVW}UszQg(X!5_yY3A{QifG%Gm>(6kq?j{cX3QC9u9u?w<)OKBpPsT11 zLhiJ^-hy)x7}u34czItXc1R9)vb@TSFN0gh%-FxGt$g$#OT&z>n0jLH;<6|>tp5xb z#@Hh5(GVqmA0)OoIAmpi7U0sF@9js(T+kJR_?a#k7&U%ZFuBnG2kamo+^IbqF`n2i z5|5NF?>UQx1FBvtuO(JV3*tyqu@^^dIrm!ky58RjH~SDRc{?H__}krI0aej7qtvW# zwFRIWG&P zf0mT@&o7f?YyXgr_2G9@ltJMcuS`b{2zk?)5+Fzf)x9gZsiAD@hebbpxQ>}vHcnG; z-YcC?lrFzF`s_sZx5C>kLFn=;B3F<0do%LSH=YddaZ?(@aG@VBeDuej?&nyvG(Wic zfolcwB=U1L!lNqyK2SSLR2KYwtkob>zJ4r7j5)~NG00Lb3h?GQVLu!ebaS!h=wD|t zB%{2>=?xmNL$)m8$H3B8$N8dui1GQGjLyqWbZ4T>F04x^a12OKDYiiublfTTDBvU{ zQB}f$hn7e1LP|Q$0AoIiX3!DI|GnKPC-a|IKtBiVrRTc-oq9fR-cCw&Aw@|R-4fRO|OizwUzj!Pyh+*fqs`*3){ zJ}}0^R{Y9Or3~*GWah0HEL!%2F7aICIP{Gm5%SH?x=Fj>-WzC|!04{o3cr!1$5bY~FOx_k;i?9@sef%92_FygH z(rDl9ZQw*<>f=u~kv0NjRm80elP<04d(B%c9q;X9)i0H#t{HUw9deK`Lh7F;C0?3T z-YV!u5ZL5Iog7#Wt+h8&nJD8fj*QHI>0H96-nh9|J~Iau9aQE?D?rcZ4s@~LQn#)8 z!UQ=Ga^r~kS_t>OxI?g|@sq))M%1D6h`%pc!?>f^mycd5byHQBd%OTLl-M#lgCrnE zIB}TxawT{(1LTMuag)!lm&P(f2U?~UiJP3B3Frd37N8sSHd=GTXw zb%uqdzG(=xns|8LoQv$a%kvEybub#;(c))-^_z(sg9zG8m5K2 zi}8h#thbgJuMD4gV-qfNi{N3C=1nx6aj(CT1aonidn+E_zmfGrE2crDx)VB~c93@ZXUNsmOj`BeAl4~iQ!dqRsZK6I~ddYNi@!JeE-cxvQZ>R8u68GQbq zP)nG)>2J@^Z-0v@^1jhbZ_q%85p(}_zXMf&lV;NcjU)=6v!v(9JF=zw$rW{J(D*(8 zCH0*lR0C)pl_Ml{rK+H4OFseNs}l5beTG>x3!vlvJuYFN{jK=6=;|116j>5srg9t_>8zJbywQWTAD)Rj*CRXjj+n^1lRf-ZPOTUT!g>tWfIez}{)~JJ zIWdJR=;QM`zkC}svNUQ;McYjQ=$#8K`^FC6&8TBiVzF27ryu{FFC&e)8T}GWYVvrmRbt zw2;n=<%~bfIk(@@CNs|eR*ld}SxvX#3~gKMJ;|e@y|oP7E~m^;x&WA{W(Iz|`p5^< zjO0CiaiOaqm%|{6TuBHe0Y(rz-KDYWwEjy?0_vpCHG>$TbVgDiVV;82@sU1csVuO{ zs2!F*KB4W#6U`X*Eb$VLFTT)i5jjcFQ&WZqlU{Jto~eAWTYuONYs+tkQ^BNKWeKpQ z3>(q-bKVB;6+!#nlF`0}JjS!@IHcMqyk-e}(=On8>bcAj+ocING!Ut_e}br z8H+$3FwTBgnF+*Ni+1P z2eRNK^z1j?B4!2toyuy5DdK7TBJ%0uB}S@!=GK?~B({~@hFB6~ktG#7BT7wO|LN>c zih21p-HH~i=kZwN14u9{;4&D7d1@RBH%D?PRmpz;ws$;EAZ%0+hRg3xR;D~qjgab( zLbxr2CuRb#8O^AalwV4$G3OU}<>wuuhVa$!NbJ>ng&W%ch-GI9U=RT}h`93drau`1bAX+x-s$K(})w_MHm0jDr#B zzYiciK71pDIy*4h-&P~)ThOp=0q-{QunAR_;%aL!PIS=ccBGj){dFiBqZdhDW3{{i z14uFLPW1z4x%MUvKQHIcRa#2kD8*Y?i9D~RL zs2kJpM&Jo>pt$n%_dt!$VA^-QoX07OIboR;PDEYl#`wkr&HuzeKm8#is#91E9FnLd zAj-A#KDT9^fGpCHtI!?du>Wq)5y&45uAC-_@gvue?Kh$A-1s+em_BAmpbb44OMO*M zUyJ!40>z+Qo3tolF!|z2O^`gbLT*IAwL%!zt5WUjJDb!3Vl5toiYpu;Lkb3+ zPpfmCz6bH6j5V@xgvX)W^yt!+cAmKFJ_0QXuBBv@m;9iZO08K@+w)|y8 zqm9_Zy8Wp;Sd;YwK>(6{^q`jOELn_ATJvmzL%tIIDQ&x-G)aK6x~%3uZ{SipsBc}q ziR3m=v4y;e_^pJCPJP3)H2JCP$K!B=%yF_oX12l3e0$39Bf;PMb}trtBibp)0G>`v zojN@cTY+f$K$YoKP;l_|GS7B32gHnQ{LqQE2EDDG-gc1)-n#wi#g=h}1Fvi%4$9@J zZ_!fnl_NdMf%p$Rz7ZWiJ_wC{gg04aT+?a%`t%d)O6r}x0~&d|R32Ll2ITE~>h`Sn zdV8}g9Yk9i6V=(a>Zi1N@%ysAIVcB1QKQA(seUMVu)IZ?pWP~Z4=&)=_zTPcd_2^r zAADHtiuGIT_;VTYpgFm{pxB9E9Qd?R$kl?uBJ(HJk>UznbGVLtHt8p0x-FBCmEcgs zc%KhsCUruIvmMDaRDJ!t86UQUnE{@`pmlN#c(DTuN4g0?Y%4!V%_oS7Z)|QstJsRu z0cjTc*npdcfrM#>yHi^ZoY2M*0L7ioud=JY`TVt1Aa;^TN@Nbt9pc+;_J5)`H(5M?%$VbD&FJ2dWU;)I0F@A{jS3Hx>~a9xygwY;AADna~g$uv)7|! zXcN;X-~21&3B%+^y=ch(6?9kA&LZMjYa^8H^@#Hq@wnKe>Dy=cmut^7<^(i^!#4nE z@|>`)EK3X1o3?dKzB+B~_DI-#t9rbHcpFacghjOLHsco1_uAhB#0kBLz8&dEY6G5u zx54sl3@iF|Mqeq^atbFByLtdt-I?q4^MyXxRGr|=GUzc*i|mN~C}v+kh3#`$#0K&6 zF5bjBRd!(aH*L?X+tJH zwow}_q-Tjm%i~|cUaqy=1B^?JC^wvVx9U7wn$YEpFTo{=cSQ2F>Utl)`eb?s>L$ky zox^qv3)$ddr~m=C2I5T?K*pkyWptV2Eb2KJqOLr2rDYnYC1S=lbhYM3q_#YtTuT`K zn%=A%V_1hvUnH~q?rdx=JtmR`oaNl(Ekwo1R2$87~b( zSp`#GkuaU$^A~Oh2E_AIdd`58Uj+-*yi~UY-~H~B134c;NEDIT?YLiVohl>ZI`0F1 z@NDk~L33gu=QZUAjFhx~oO}O~sf{r*SnAtYpIuxbC6z&l9KKPxz z@kgMEw!GOTzgXAE({R^AJb+GGz#bwvev2Q=Sp0{?PJF(rdM~ z8H>kjk1`ccXHONK)J}UFhGujy3cd!JiVJguIak39G#-6ZYyd2uIpxRI??L-j4Zu?H zm)$$a`1#Mf(gL8+DhzmZEekrv@9`0U15H?rB9a80shl?N%@H2Ni^`5TDz$xF)Qnom z)Es37axcG>S%srM`R#bcElOvuzdundnpY5ErvBCTqBl=6iSfsyZ5cdf7$?GQd1`NJ z8Y*GB?+H3PU!%e$zy`8E${}`b&yhC(HRrvjd54nH*kyTb%PteYBMrl8vSaP;r)hlQ zZ4Gv`x*3SazgoUZ9x&6msKD~%!|-bjLRX%Hr`y3-7=GjYDzZJ;+u;Hb zwtETe(97#zVT@(%21?@E$tcY^OWl;g;0i}>BKkP#A;~zPjH-0zu_cx0_c=AN+QOJr zFKeq377KarK+zlLP=qY#oLpHQk409nw!iQQr|abxSf(fY?4DqK-iyy|Yxmwf_I2Q3B9d`g|gn$4X=8 z0VV}beQmq`4Gm=xy;J;E_^0b!Qo*>#}>M1JS(IW zfpc{-_e&02m`Y%5@vIsUU)S4#=RpC6Is;f5DQJZLDoEJcvKd7NGm8g^f_7f{Gx)va|5q zwPi3ih1n+#=!BY9kzF-&WId|K&V^>RmvjqY4^;wgj0aZC2dMuwpnSp_Fzn+HH4WZO zhlQ0BabEtb7gZz_fdj}g0lo#bmhB7-5A`p(?BfM_0cpqhFlf(sFLL_H>~;stkHz=V z=B*jfp!9l9>}G5@#icfGY2o&L+?F|kHG{Z@`orF)^#$)yh=x(6Lqf{#<*V1$988o6 z_|#`p(5aqC1n5;Oj>n(65juM0>v#7496NZxSmjPwe?!97^7Na~etGuhro}olx}MnM zoTQs%Bn={`e=#<`MV$-Cvrm5q4U7XK%d0vy__=E(w8A5 zqdG1aw280#@D4G3wYMd=5l(@q4(mY5ttLIRH+0up z{?WFCA1G*0b(zi=gav@ZDVFk}NByP_uI03W>T+M&-9deoFX9Q|mj3adl~N4K0Pl0Z ze6Qa&`k<|Sjpdh)!^=KF`dXr(tvaa83$pOg+iUgHT*OKwpkm*1aV=G8Ge zU+n9@72>ZbN!>7I-nF=_tVuQy;&1@%=OQBS3j$=`f<8Gz^mk5M4zDLNQVdZD$o+iu zk#Py;wQIcDzo=aQ!!lQ*b#y;a>v6Zbi%jE-3T{>WaFO!)>5 z-c?=Z)FZ^D@G}toLmSH!jD<4q@9u-qAV_xgBSX( zL>wZC%<=KwOTd%o5;Lz`?DxAEK}Y(0=WB@1Ne!~j&nU7Ckt@Jc@JbVInowHa6b}T@ z)Fu3)pUR08!L`rE7#|`ZrqzWp^uv{Z#c?U59iq z=uAApwDdzz)Iji&%p71d>r9ZazDty9Uh9c=u^_Jw07Wr*mhNu&JH>2~HG=gNo3ormfXs=m7$hwC#^x^1jcd4kqyn`;C z!nt3HY5tPH8q5N=9xs5W4g7Ub$JuZ@#*hT8ke4@WNbd)WcEHE)2r3`cK&?HQ6-yoo zYH*M*OW(?6n5!PT@@9&X)@E>zD6Ut3C|;`cdGW!?RNe>iOokChJlr32t?-G=c{8+d z1{E*{Q8$7!UK8Wixw&C5Gq1!bZZCUFDB*+%Pe&tZ;-K6uxq0^WjcJ#R64h`o;xDdV zqVZ$n^RPg|%KjP*$~*b+GSi1_Pz*wM<2=A!g!&p9MLTde$<`gzLSrgmv~cJ{V?kQ; zgh&;%k!E~>{Hx4iUDzr@3GA-|l%Qd@jN6cveDvvYoyQ>I=MMNh00Zr$!1PB?FL4t!^HzZyTpMp z^;1~dy~T8qTVNki>to;+<7465103?hr>GOojk@+ws5|kMf5%Eqi=ao{NAXD*>+QN% ziZY?`^t1E5ymw*A+CLHJTeB6ofR}mqW0&x2O`{Tj;Kco?3Ond7tT7qKCq7t`F{{Xs1u#grWCM74@K2L zAupPAbJOz)20yji`r$$NcOpI5Jy%;9IkNe0-A{1JjmhPUC_iq(+FhNSH!d)KPOB}H z*!vbsG7f(@z4vG4L8B}pmd%NO@F#NS=TU0&=6#cva$vRC$@hUbi4e`kw7l@b=!bT8 zn0RbLFPyTa9ZF3IWN?sCp&8ZKMZ=cS&?U3omrM~)1BcI$9__{ld+by$^Jqj?_qdwC z#y6*{*PwtyB##n24QOvSe)IPDcP&&jFEPdQjuI}x1C2(U_v`Qfj$Zs0y zT_zUbI|O(>q5Wy_Yig_qm@AW1skup_x*7NFiycV#Ra9jG<8Bl6!YQ;YJ#ut6;gUdj z;++nTe)#yC93=WB0oVr`X&J{+)Qa7%=pG{N2gVO7<4b$rZYKOGhaaShm+Qvl_^sTO zT#|NbXDKTx~y z^U#19P4ANf%7bo7ZVRG!_#o!|y^dx;pbGTx%_I;P#JL z?(Np^Z10OL>*%ZdyVouXQBwTNUe(tJZbcqqZu3ESTxu};DHseE`QC3I<>Q z>b1c16>sp%a2>yP=kYBtR;AR$-|EKv^&1_S&--ZiwsOOxpeLlI;GY*!DhQtnMiCFx zl^Y~H)GYe8d4b~LPy}{C{3Cj`u1!ZKVM>kW;2)}M-;khGm+x9yEMvg^`euLz{}k^MSwGY?1sx-abl`>- z;~iHeFf@J@6=U`rT1cy^8?J}CQP4$e@(w!ya)iY@WP6=T^!3-#{%L41ZYQ z1n*k=sh2`c+bco?)9~L6zgWMN=p3WfL&`@NjPf&iNPA{d-{_;L=nv4Us!Y6-)_p6j zOykRMa(=7t|5+68eup}hSm9?oKE0rLusp zD)d|kg8;(oma^F|W_SGZn(b!Q=UvX_ZShBWpYq$`k;_SH)w!b3i!wP&r}%eC(gl#W zt#g{;&i)i;YKr1-uckDeITKr@d$6Mbs)KC1fcXWkmzp=Zly z3ri{2IeF>Cjwv*Rk1zhQ^wxpaLWgeWOwslL7Q5paK`!VIRb4BkZ<$cT6K_eTy*;o_^h~4f5rJy+OR*1nz8nE4FFwK%Hw_DzH^A zBn@TIibA#6+**=~AVbSf6rOIIu%WnnJ?*JxGBjj((`|F`#O`uI92_yWQY)-Q1JI>G zWZdK+VIN%Uto*g#FA;ox)3JY8)KPO0=9-z@2MHf~m}kH6y;{vNZ4!M>Drv*|Ptw6^4G^D^jlKZ&YM978(&pfzQ43aPr2@lJU} zJ#9Khr>-WhmlWo4tOCoq74vqmsG+GTL%+X6kP4)}|3UX1aM-1ZJ3|4KjXwgoRn5Ne z(vjd}2Z#fMv`g)^9*=bh)eVYGvA;=~9ckGCfL$ST@t3J}&vDJLu-a>;zAJRN0~o;R zpqJKk()8d}K(L_5@oF;dA8upw|3UdeAIj)?5jNpcK!o=SYOnRGJU#)Uel^|@+7M}E zFb&~iyn|x(ZQ9FWLWv3(BG(@VjNEtDR~;-rIY8i)r=N+c|Xt&~r3be`vB;W3jWS5I2 zK=P2*@L|oY##s`oQ~` z@hFs{$|8{qPt?5?xP*tlB(g8D>jWP@_XxwhT2nEMl2|*gJ$DFSDcBB@m*;3Tc3I}N z{j)OVpUC9v;)URRXGM{BarnnFu$2|J-z@=NaL=lv-Ea7w&bL9v3*>ysgx_Ko8;wnzVe+_&KY$GIGFF}DD{QDB4H%O;T zCnrVSUp?EX;N&r>))_;=Cmcv-&@NX~vgqXtC#S3<{dV}*v|e~eS&_4Z+pArejo0+y z?~q(=qqO{0RGd&nqxg!ie$v$*fL_DqI@C|Xd0xjd1~Pm`9HEdO!s{G3|Fg7=e|>0OyA|`~^?FBN#Tw=T*4*VdacpRy zsRQK-+zP(tKSu?>c&K`GweXXS!YIl(@<+I$6P@65J~k_x{;ODYJBBM0V1Uh>!~BMn z_JN;qQDAVl9No`$0R?i3!rFK``q_ z3Df?`j1?d&M}KgTsGjvS%{!w3iux?xO79h3>U(2O>(N`|`67ZaIJi%xLT2q8H>!F>F z_!f-nfsmVWMf-}#2~WX*_8~gf_mtQrpq~6O4f1#ft&|Pd#vH~+g(^e(bTL16Q5PZ0 zK@psR-wXq-pxk_lk)Gr=?YZ?cST%xz{e_^>ymx#rWVi$zwF=|bkSY|Iz`s>}-gZj& zm*tE4Z})71On<$;B8czczdPb|za5jnpsT3}2J-mW+Y;m4Apw5~`=Nd>JYmk8T`%j- zo)%WS3M1TNrp6-^$)C$@Cj%W9Z2#gBE{%I^&HUAnI`pCAr5^*~lQHcsrcLc467L=s zzDZFG`xJ4b*V<<+lTh=A)_{1^a=L=YrF*tQv|XQ#Gyur23s%SAbJ*bgcesMy-v}5$ zw=(j*i5{vC{Hl%(ft6nC^^7v!{>{D|4T zOqCLuUKxd#fgTE4U#YuS^adykS8ixJsX0phlUA4Fc^sumPRlOlJvuaL>399!E2@Nl zAP*S+Sj)KEtHyR&IM(KWfh_Z+g+}&C!2M)3%94>Qtzt5^CttpEKB@TPqB!_gVjV^I zBOMtfvcAfiAI$9n{#}k5Yu%Y=P>#fk14LP>Qx0+b?h`&}#XL$H)Lca6S24O3`hPtU#QM?v6Y@)h*M(cOY_77PBr~TY3r~wq$A-watCBshz0DY=S&U)RYYd$LLQ^m3Zy>p@d`(FxNP0V5i=ivK^_y~~oX zpbb9jjoFWRH?HP*B{+StsuyK?7?1&lmBLf3Ztkxxp<7hs%0eTr9Ns>Ydf-O%t>aJT zs10YL6HRIRKV$TJx9%5K5u305d=5F(KiD&?X*)Xl%ZYwYfy=kocYGA5A%+Y9D);4Q zS%o~ItFAPD!6Cd;z7oVY0W*r?XsReOydodU@;^_F z8?6Zaw^7fF`u?R`|5JlgNhF(F$w8t}1dVBt^jkBh=4}nT+a)#{zBc1q`{+}WDAC99 zW|hyPfv%C-VN1G`!_w2MP)9o$wc7y@yVkOErZ6VIp5)B|Fx&%L8E`+@15W0h4qwI^ zV4{&Ru$LJGkns+__1!z)5D7J@IqGZo3oagy-TB9JqrCq&p8FR=(erj%vMs1t$iove zCgRirXZth@(2>C6jpNdR@d)@}!Abrs_p(YPct025j;8p0Bsq*VvnhF5%D~j7! zeuFnB`W>sLWQmR4KmL03=l|Rs(t~s4(>eHbfU;o=5&FgY5o;~vIZ8*uI|3R^K4>xH zJzG-OERfl^RzBkH;^6;oxxIDc6=-2;MCI%83N~T|1q&6m9jhnI;Iw*@edw0rY)p$p z{@=~;zmaXdq(1#Y6FV$`ZcMf@e3+Zm8uS}VP5<{S~`wg{hR)q|LgSsvo@kPCyE?!V`y09o-$Ehrl$Irekcd!wsYs- z&B;XW3gsAV5-?QRWsK|TU+Tp`(vRbm*3d)y`b#9(~cUKSK`9A z9(WRCJVc!Sj#bAoN|igi#i7rK%R*~_O>aYsF!FvYrq4uMVs2zlv`*n2)B9LM7sLy_?SMjLUYQ;2E;`eK=p!37jh|sfwsH_Lyuh zD3Iak;p`_KDX{Q{qNTGk0n47C=Yd|sjQsIk;R2lUMEb)av+4%VrS8dnEf@skg7+_7P-cQg#CN3<+w{rJ-Z6= z3HJVL{PwrJsrE-n*@r;J!Y1+n*726`_-*U)*Hvg@AO5S9*1c3bDk10~$H&vf1kpl=@dVn?fEYr27Ib(n!^}X&Y?d_M71of zJ;TF8vGA1<-rDa3-&(?Mjk-n(zRMP)adm3Q@!vmO$f}>ikO=$adjH>N8xy0u|I68h z^1A=!w&R&s;P%-j5Ydh#F)PL|#wcbiIf>MWz6o2zi){n#U!dHT6~n+|soK*+fc&xV zDtmX8#O+PnvdbxkZL3oMHIDb}xAy-U=T(nA_jS1Bc;X0!nSyQjYMs5lqlI+fPCCHI zxVstAP~Z|70EMKWnn>(cygU)Rz%S~S86arAPGuh}w^!+5u)N~T%ez9Oz?FD>e55{{A18iq4q%(B znSHTiiCcsbug)RYrV%R!$^YR?Ma@IBgN2h?rP19d4>)piJQ>#h6+U}o&#BF00AgPc zz&gKSm_e+(2E#NwUmc?XOVH@%iwWYEyHI4~D`Leb_=LqKG2xu-!Mj2ALxZ+vj_lAe zXd@VGrzNv~>I7_~+`7pMEsl!~U(deYMk6AZ+MN zJwT0pmBH_we{jpv-V6>Q@2dEFZ_HwWRD&V2mshPMFm9W4DH*h2KBZbGT*}LH^fb^iB6Usm zo%So%{b9oH)sL2_`d5n3N)pS$+Vl)Yk53dVQa?-5D&u|}4S7!tYD+j5@)q2=_PZVS zyd9c$F=$2(>f*`3qRR>w4$;qPgD)@@57RJaI7xV%7Y}b8rbm0WV?2q7 zTRgzz;%4!D%^blQS=LAz^o@=e@)iG(`ybx|;ORPf&BlC}Sw#E$*krR=X>TFxIdjp; z^-iL_ad8*!|@_o&G-39_jEHCzb{*rbIhUEsmI)Se>LtrFU^016+ zz6>Io4KIEgjdj!%AZO+=QVi6U0j(qMy$`2(SmOKB^NFam2<4kG9a%*whb?VDs8prnIR_sAiA>(v$K7TKIDH3J&rA$>Twz1M3$OG!Keest*GtNuyln^tUUy zNi4>Cx}G!UIzQSSt8+dZ%g@Clj1^?#^>Y3YuBdlV^5n18 zCI4D|sreW}qZ{cM-Tj&3tLBlD_eKpZ%Y-?KTl_4=;EzBmqS!>M7e55eTvj%! zT~uEbm$6mR$7@xuV&7b@`=&hhV;P#y>8r5YIklO=vfG+t@7K)?CjxuGQwEuzDRpQ2 z+#SfIan~S%aXZ2sWRwMQi?{P1`I(1DtpYEt;Fb+e%)}`b6oZNQ=@NM{x9%b06`}NG zW))$+w?CTsl?dyF;!O~52>TwaDhawBgHt-;J;VgB7J=&uP!uuuNiF|9)7pEWml|6d zG{|V{#2R-EN=mPve?_zn@tX;f6RRV-IJ+~XJn6VFNTYA6bssVgj$I)!YTPymA5>FF z=}>IN!KSdB%J^;v{~{M^?kq|6;v~hcA4;KA3m5H95Pw&HDlW(vJB>B*bqlGnY$S6K zYrNO|;cay5by-J(L=D8VwN(Cm+I-@)p}gfo!MGaX!`)rDXYb(Mma7;L-V0sKdmY|N z(&7MYxmO)bpArX^|D4J@jzixMXx1%mQOzAqBj0F@qavoo3&bFF0?L%eHHrn2v zIb9Fie`ZI$tz_0Vi%f^qG0=XE=>)&Y%4UnSePC^3GEpo1^{pgX@C6AWwZ%H~dNQ~+ zXvLO0apM#sZy;6d(CT|Gt}yH&CCChf!M_sBHb+R3pFSDh{YCZ7vG+y9txvx#6I(;{ z6UxY4KZFA}#ZpY=4<~V4JWC#!thEJD5EkB1b3QnR7m6L=BS1e=prcEQ&mnJFlF3ir z$OvQ6h10p$5+&yE7-J8)H~8;WsVy~|feG=%g8K~R*Lx8YRxiP=Ni1^}alLpTM&fGD zFc34RA3KpVQnS0g3S7o6uVO+fpRPBvA3hM5fpX)Do7qB7oMcSA+5GL_kxV)PGS-tl zB6DO#0S1^%#v2ArS{Vl6r?X3fZ=6*`;n-ZB`>&|~hI;1Uc^zm?X`ZX*IX_!BVxY73 zmi@j_i9dBgTiM0zsJzao9-t4-YpC9XssL>?3bw!{ZhW~==EcjMVM{AjyQbgC{{(adt5pqutD;DCd#$<_Qq^Kj6sbSfN z%|9)V?3HtDFM z_lQaQgBhj$Q_tw@+E~#?Ib?D;$_jTooa>+zE%ThwQbOLmr zjpR8wV_thaCD&3uhYt~h1nvqs32Qxja`$sG^LL&1iKl980_PsL>iu(tBjXzNKj;e2 z8DftT8W|HB>X^nBF<;=1HQ?U%Lt&o&+F(6hszTUmAk!ME{?on3 zmenIc`J{xc^$5{dujj{lBtmO`Z>em5EQ@0F3+NPCqQ}4E`%6c4`2S_@tSB`$k-rdQ zZ=+6nTlSyY(U$O_m>-PQa#{5~wy#jW%vp>#AXgYnb|Q|}z(RB%ltw-N(cbh`ZsrP= zs7500{!E0(qjTTh{!4&c@_#*oWBX=!zVMpEwI4Lyt@Et+-!GaJs!?V~e|p#Z*G6H+ z*Z(mL4cmVjM)d^8I6sfxjmmZXsczs6V+ivHC7KD0b&LxJD}+QWaWAijp?3g^&&a&7zH=K9~{ z_^*T=5RT9gJ+E0kQq*H zeBF6-9PQ8gjCh>E`DO?3rZY$EEpnfdKls+C1d8PAMQz~x^b6*KsYVc9ZP^w@d4SxL zYo%v;b`-)S@kihP&*b^<4*I?tvG*reqBP3!XgNg+8hCDl#;nWWg9u$7O^dDl-J@`N& z9QiF1+5WtG zaEkNxxEr}o>?25IO0sUO;us1)MQwHPMYS3%ia&~>{=Zb?|6$)hr{zIB!F9nm z-QYyUM&kl_vGfcnp}3#!tK{%|UFFC`$TlM*2>RMqU14+Z!k-|J+B7X;Q8q5&#lC4C zwsvHgpUzesyLfQxUy&vLFCzb=OxK>S#m_%zB!WDl5y#B!@`6CXfh~{Ur$Nt}6(f_O zi@v@Y?L@dfSa4e}T&esQ&D^WL+n%G90%o9Ys9~USeCKvV2C~xc?BeDcTX|2{8LPnu zk&!m;EPo`kZRq?!4xQPxS)l`Hz!=k)t_ua&22%*=+675t{ZrW8&`zux@0vQ z2_B;KCVq$H?hiE?)__jd(n*&gNwD|ek8g%Blw?sqzxYMfzel5IA>R*$jLNUy$8DF% zT1uPo^C0+cyA^5`#waLT2_2Tl3`{(SicvU)->(WO;S{wO8wNK zkl1%9apQCMaL9qpQbOYu$eq}Awj!NQ-489xAuM^^gL1yl1ynHpB+mlQz+3R-&#`VtlfI}#MDa(|=ML*HTV}CmQ{>lX14bY- zf;Ybnp>F59hx(c~RsR~GU1lojIl66;@b{ci|^9??nDLX zu$+hnHtW_eZfvtq`Pn4m`3PR$JMc~F>yU9%ylSpdg6%qCU39VWw^L})wd+0^k zN_N%SQ99dxoPp@t-%7H*W+e+&xN2$<_blqEd1q^Rf5Ij&SpAJI0IhEpqU9qBQGw#O zq6&zIzywq)WtxP7-Xfv86C}8Xz>`dpAG{GT{`lwl--qn$a?|^zT#FyZg5PPovoY{= zU%EDAk56dg;=v=QUw?P#+e%;PN=1YeSO?L+l;QOxz0Gu91EiH}txia=@sDW`eitQR z!rcc4EkUe&bgTA9u@H&0BUkzR)|U_O;E22(AMR^??GLy%uiVhs=UPhmQ?SWcXKvIH!=h6q zH1tCz{#`lx!w0;_j%bK}8_UAT$V$b2WKGNMaZG-y?(LylX^RG4E7|)g0tS?E7u-C% zMOx%V?RQd%-T_uZ;Oo=I3vo)kVPA5~n?~kHhE|I}VhY)2LKP8MF%=*-ZC-JI*!`|E_Zrx_;$CcmQi)y29t9SwG)o#=&Ewqcew=42@ zXjYinjVP2f2^Z7lmL{(tk5GI4x45A=R3J^3Sp%oF(%=Opmv7lWs=^P2yWwugBlzvd z?we*>g676f&vU|_Df+W09UMF6fui*U8{5}ZmJbnB9*yp7C4s|zyRT@nehDz-lt`7- zJp2f)8GwR{D%b1KxLL08Kd$M1&09e%Hd-w->tf|9#dtK~=de8Z?UjYiAXdME4m#@j z+H?8O@04OmiW~JQk8kuq@@kVHi*d^iaL#;8g-Q$Aiqe7>T?c+2a~!>VI5*HF8j;)i zf;YhiYFX(8qlj5uBoivtK=*Iu5osxh3yXe@1P88PzCMT7exKqCjdb}zQ4O!`=w2r z<`k2b>%=GBty^VLQvrvwhNr=HixR3&^0hA%lt{(a44H01WKFlcBukB-d_JrrP1mSW z7b5~LThGj1a836NJX$Odzy>Z(!;-G9p^Bd^pTZO`MQxydeqj_xnuG(I?iVakL>*H} zJ0S^UJ%ng+Z@?_%e(BRsk>Xy;S+MLF_2$G8pqMR3g`z9s)r>Ibj#60fp3X>Rs@h|*8hMW#i4vzfFRn9DK6DXeepSx{H?Cy)5FBC!KdvKYhpq8&BOHrCG z;@WQkG)10WI2e;nc4NFRB*sxZyvDkUxvXjJx6fN(brcwb*k6H+V_;?+)j}$l?4QFe zxu!!dIdxq}uC=69VV$(C49k*>iVuFj;gEr>cFGcmWx-I$Yjo7}_+Z78)F!%*(Wvme z(3qPOqocB2c%Rb$>p%9kE0IZCMKztF?s)3mQQKmcSY=^hyxhg*3fGAErbiMkX`z(y zzB|JF#6EyhXsIOP7ES*zbMe%N6W_#OF3kOAhql27&7A(+aN!@p9pdtV>q0*Bg5tuZ zUbJoFYAY{xmyEiQ`8nAv39W6IOt>;A8TbXfgm@Dur;(WSrZ-A0HkSq83af4P4u+_( zT-f@3jlivE#B`t3hAZyDu8V?^)v~r3xvYL z#CYX2cMlyvs0Kwg-Z@0fJH2yqH-w;f-i{7hSy1rrl|zH{`l81{k~KN3m-{nl#w}ma z&-e~Ee1`@`9*KKZ@75hJsx$q?b?0JgiP6!9%sU5#wvfkWsx?m>Z^lx8O?3KbOk>k!&&*u4iinOg#{WdBDLrtd&)hl3BID6obcb?=Y z=OqKpjC<03K#-PP@5XNAitlaDHUZK3srtFAo<&pfV`9)Pkw#kM#pOp4-UMPl5Pc`- z1l73eHSv4z;`Vw`7|Hi=VWM^;U=@18%0?<)3@zBg$7n_HlpH-PY`1Ry3neJczw;Hc%#`JvsuNUG~ zA+!os-QRaub7EqI!2-KC1am7|j^Q2xsnWmV6VA^&qN*-j+9Q`Lt7J#C%N?L1H?x{g zF;ZZ~obi?tc5N#?yF6}pVzxh~-9P{=ZKr0pqFa*qMZqav&)vSz^0boXLPTiPzpJ3~ ze^$ZC_?3ZPN~4hfQWr!!A-A8NGY>-rzg3rm7p;SW$lcuB!ukZi&EF{?OumjT)HR7x z7CeRd(|2LzavP~W_6ddQ?i*xSHhNN8DkD|bIT(QI!tCO;oHDxW{ zPyE*h#Vi~f!~eRfpgAM9U&A!6SahV*@)DcNl_Zw^eWGM32>tFx6MRnwQ z#$UHwJULne+~b^0-} z0vS$-#U;;_^}b~?=;rrDaIxPEReB<}?CMh-;s4XervqaxjO{A6pA_aV{2PVr`}|*~ za~}OiCn&rx|F^`Lw%1*uIvyq4oz>_2BJm%5m0td7Y|+ABi;{vEJ)o6UsA&%J`ddtR zB05WoTHNgSC2@<|i)EH|9OCBku$T!R`?tQFsoOU{8Y`l|i6Jct{-zTC@V-pX|AWmI zG(6}Q5) zRD$eXS6!u})03yt!cA79!m94`_vtzx(xDU<_yXxrH_<4`$pnj=6!h~u!Aw#_^1hg zxOX3LFt(8Uv-@PPc{3&6<4(jSCxo5rY0cxzIAWU*!|~GvTOOv4nqe-Ox^r;m)}_1q z;IofPm96cNHgPpZs+QLECvv%4TtVgo(v}l^Rw`%^d~iEEY1vZ z0`69XZ+asxkQ&c;_xTlJE;X65Au0dg4mZv|%&t1Q=HYfayO4#b**2ujoeFI^g}vy} zMnrt2+nqmL2H$`7UPk_t;M+ic!&<{{iZyfrXl22+u)<^5_n#}~A4a6o=l#jwCwp#$ zw>X$@)<)%7^!u%oP20ZC5lfXwR!jw^tukk5Ic=Oe<0nd3(-%X2eyiE>v=jv)y%`pX zSj|4+X9`yaH=2CTb6)2=5LpggFHe)#txO>Y(Xi*EEYK65fiCx=C)#4}Ko`YN!uGw#ukpWhB%0Dgn8$twQo5HV#=EP>taB|G4YNmY-d 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

8*lCsG)-sF@O% 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 diff --git a/resources/authgear/templates/en/web/connect_web3_account.html b/resources/authgear/templates/en/web/connect_web3_account.html index a7caa86eb1..a6c42a8350 100644 --- a/resources/authgear/templates/en/web/connect_web3_account.html +++ b/resources/authgear/templates/en/web/connect_web3_account.html @@ -13,20 +13,14 @@

-
@@ -36,24 +30,20 @@

class="hidden" name="x_siwe_message" type="hidden" - data-web3-wallet-confirmation-target="message" /> From 1cfee2954525eaf084d0766fc2a72798e5561220 Mon Sep 17 00:00:00 2001 From: Louis Chan Date: Thu, 5 Dec 2024 14:55:15 +0800 Subject: [PATCH 11/22] Remove web3 related error message in authui frontend --- resources/authgear/templates/de/translation.json | 4 ---- resources/authgear/templates/el/translation.json | 4 ---- resources/authgear/templates/en/translation.json | 4 ---- resources/authgear/templates/en/web/__error.html | 12 ------------ resources/authgear/templates/es-419/translation.json | 4 ---- resources/authgear/templates/es-ES/translation.json | 4 ---- resources/authgear/templates/es/translation.json | 4 ---- resources/authgear/templates/fil/translation.json | 4 ---- resources/authgear/templates/fr/translation.json | 4 ---- resources/authgear/templates/id/translation.json | 4 ---- resources/authgear/templates/it/translation.json | 4 ---- resources/authgear/templates/ja/translation.json | 4 ---- resources/authgear/templates/ko/translation.json | 4 ---- resources/authgear/templates/ms/translation.json | 4 ---- resources/authgear/templates/nl/translation.json | 4 ---- resources/authgear/templates/pl/translation.json | 4 ---- resources/authgear/templates/pt-BR/translation.json | 4 ---- resources/authgear/templates/pt-PT/translation.json | 4 ---- resources/authgear/templates/pt/translation.json | 4 ---- resources/authgear/templates/th/translation.json | 4 ---- resources/authgear/templates/vi/translation.json | 4 ---- resources/authgear/templates/zh-CN/translation.json | 4 ---- resources/authgear/templates/zh-HK/translation.json | 4 ---- resources/authgear/templates/zh-TW/translation.json | 4 ---- 24 files changed, 104 deletions(-) diff --git a/resources/authgear/templates/de/translation.json b/resources/authgear/templates/de/translation.json index 495b68ccc0..d771ba2cc0 100644 --- a/resources/authgear/templates/de/translation.json +++ b/resources/authgear/templates/de/translation.json @@ -88,10 +88,6 @@ "error-no-passkey": "Passkey wurde auf Ihrem Gerät nicht gefunden. {type, select, password{Melden Sie sich stattdessen mit dem Passwort an?} oob_otp_email{Melden Sie sich stattdessen mit dem Einmalpasswort an?} oob_otp_sms{Melden Sie sich stattdessen mit dem Einmalpasswort an?} other{Versuchen Sie es mit einem anderen Gerät?}}", "error-passkey-empty-allow-credentials": "Die Anmeldung mit Passkey wird auf diesem Gerät nicht vollständig unterstützt.{variant, select, phone{ Bitte fahren Sie mit Ihrer Telefonnummer fort.} email{ Bitte fahren Sie mit Ihrer E-Mail-Adresse fort.} username{ Bitte fahren Sie mit Ihrem Benutzernamen fort.} other{ Bitte fahren Sie mit Ihrer E-Mail-Adresse oder Ihrem Benutzernamen fort.}}", "error-passkey-duplicate": "Sie haben bereits einen Passkey auf diesem Gerät.", - "error-metamask-unauthorized": "Sie haben den Vorgang nicht autorisiert.", - "error-metamask-unsupported-method": "Die angeforderte Methode wird nicht unterstützt.", - "error-metamask-disconnected": "Der Provider ist von der angegebenen Kette getrennt.", - "error-failed-to-connect-wallet": "Verbindung zum Wallet fehlgeschlagen.", "error-page-not-found": "Die Seite kann nicht gefunden werden", "error-page-not-found-action": "Zurück zur Startseite", "error-app-not-found": "{host} ist kein gültiges Projekt", diff --git a/resources/authgear/templates/el/translation.json b/resources/authgear/templates/el/translation.json index 1aaa2b83c7..2b6f91447c 100644 --- a/resources/authgear/templates/el/translation.json +++ b/resources/authgear/templates/el/translation.json @@ -88,10 +88,6 @@ "error-no-passkey": "Το Passkey δεν βρέθηκε στη συσκευή σας. {type, select, password{Να συνδεθείτε με τον κωδικό πρόσβασης αντ'' αυτού;} oob_otp_email{Να συνδεθείτε με τον εφάπαξ κωδικό αντ'' αυτού;} oob_otp_sms{Να συνδεθείτε με τον εφάπαξ κωδικό αντ'' αυτού;} other{Να δοκιμάσετε μια άλλη συσκευή;}}", "error-passkey-empty-allow-credentials": "Η σύνδεση με Passkey δεν υποστηρίζεται πλήρως σε αυτή τη συσκευή.{variant, select, phone{ Παρακαλώ συνεχίστε με τον αριθμό του τηλεφώνου σας.} email{ Παρακαλώ συνεχίστε με τη διεύθυνση email σας.} username{ Παρακαλώ συνεχίστε με το όνομα χρήστη σας.} other{ Παρακαλώ συνεχίστε με τη διεύθυνση email ή το όνομα χρήστη σας.}}", "error-passkey-duplicate": "Έχετε ήδη ένα Passkey σε αυτή τη συσκευή.", - "error-metamask-unauthorized": "Δεν εξουσιοδοτήσατε τη λειτουργία.", - "error-metamask-unsupported-method": "Η ζητούμενη μέθοδος δεν υποστηρίζεται.", - "error-metamask-disconnected": "Ο πάροχος είναι αποσυνδεδεμένος από την καθορισμένη αλυσίδα.", - "error-failed-to-connect-wallet": "Αποτυχία σύνδεσης με το πορτοφόλι.", "error-page-not-found": "Η σελίδα δεν μπορεί να βρεθεί", "error-page-not-found-action": "Επιστροφή στην Αρχική", "error-app-not-found": "{host} δεν είναι έγκυρο έργο", diff --git a/resources/authgear/templates/en/translation.json b/resources/authgear/templates/en/translation.json index a4cafb1817..d8918e3928 100644 --- a/resources/authgear/templates/en/translation.json +++ b/resources/authgear/templates/en/translation.json @@ -88,10 +88,6 @@ "error-no-passkey": "Passkey is not found on your device. {type, select, password{Sign in with password instead?} oob_otp_email{Sign in with one-time password instead?} oob_otp_sms{Sign in with one-time password instead?} other{Try another device?}}", "error-passkey-empty-allow-credentials": "Sign in with passkey is not fully supported on this device.{variant, select, phone{ Please continue with your phone number.} email{ Please continue with your email address.} username{ Please continue with your username.} other{ Please continue with your email address or username.}}", "error-passkey-duplicate": "You have a passkey on this device already.", - "error-metamask-unauthorized": "You did not authorize the operation.", - "error-metamask-unsupported-method": "The requested method is not supported.", - "error-metamask-disconnected": "The provider is disconnected from the specified chain.", - "error-failed-to-connect-wallet": "Failed to connect to wallet.", "error-page-not-found": "The page cannot be found", "error-page-not-found-action": "Return to Home", "error-app-not-found": "{host} a not valid project", diff --git a/resources/authgear/templates/en/web/__error.html b/resources/authgear/templates/en/web/__error.html index 71b37628bb..0915412e4f 100644 --- a/resources/authgear/templates/en/web/__error.html +++ b/resources/authgear/templates/en/web/__error.html @@ -46,18 +46,6 @@ - - - - {{ if $display_error }} {{ $info := .Error.info }} {{ if eq .Error.reason "ValidationFailed" }} {{ range .Error.info.causes }} {{ if (eq .kind diff --git a/resources/authgear/templates/es-419/translation.json b/resources/authgear/templates/es-419/translation.json index c2fcd3bb46..36edb51bb8 100644 --- a/resources/authgear/templates/es-419/translation.json +++ b/resources/authgear/templates/es-419/translation.json @@ -88,10 +88,6 @@ "error-no-passkey": "No se encuentra la Passkey en su dispositivo. {type, select, password{¿Iniciar sesión con contraseña en su lugar?} oob_otp_email{¿Iniciar sesión con contraseña de un solo uso en su lugar?} oob_otp_sms{¿Iniciar sesión con contraseña de un solo uso en su lugar?} other{¿Probar otro dispositivo?}}", "error-passkey-empty-allow-credentials": "El inicio de sesión con Passkey no es totalmente compatible con este dispositivo.{variant, select, phone{ Por favor, continúe con su número de teléfono.} email{ Por favor, continúe con su dirección de correo electrónico.} username{ Por favor, continúe con su nombre de usuario.} other{ Por favor, continúe con su dirección de correo electrónico o nombre de usuario.}}", "error-passkey-duplicate": "Ya tiene una Passkey en este dispositivo.", - "error-metamask-unauthorized": "No autorizó la operación.", - "error-metamask-unsupported-method": "El método solicitado no es compatible.", - "error-metamask-disconnected": "El proveedor está desconectado de la cadena especificada.", - "error-failed-to-connect-wallet": "No se pudo conectar a la billetera.", "error-page-not-found": "No se puede encontrar la página", "error-page-not-found-action": "Volver al inicio", "error-app-not-found": "{host} no es un proyecto válido", diff --git a/resources/authgear/templates/es-ES/translation.json b/resources/authgear/templates/es-ES/translation.json index dd99f16245..273883ddea 100644 --- a/resources/authgear/templates/es-ES/translation.json +++ b/resources/authgear/templates/es-ES/translation.json @@ -88,10 +88,6 @@ "error-no-passkey": "No se encuentra la Passkey en su dispositivo. {type, select, password{¿Iniciar sesión con contraseña en su lugar?} oob_otp_email{¿Iniciar sesión con contraseña de un solo uso en su lugar?} oob_otp_sms{¿Iniciar sesión con contraseña de un solo uso en su lugar?} other{¿Probar otro dispositivo?}}", "error-passkey-empty-allow-credentials": "El inicio de sesión con Passkey no es totalmente compatible con este dispositivo.{variant, select, phone{ Por favor, continúe con su número de teléfono.} email{ Por favor, continúe con su dirección de correo electrónico.} username{ Por favor, continúe con su nombre de usuario.} other{ Por favor, continúe con su dirección de correo electrónico o nombre de usuario.}}", "error-passkey-duplicate": "Ya tiene una Passkey en este dispositivo.", - "error-metamask-unauthorized": "No autorizó la operación.", - "error-metamask-unsupported-method": "El método solicitado no es compatible.", - "error-metamask-disconnected": "El proveedor está desconectado de la cadena especificada.", - "error-failed-to-connect-wallet": "No se pudo conectar a la billetera.", "error-page-not-found": "No se puede encontrar la página", "error-page-not-found-action": "Volver al inicio", "error-app-not-found": "{host} no es un proyecto válido", diff --git a/resources/authgear/templates/es/translation.json b/resources/authgear/templates/es/translation.json index 93c7174c66..111b4c20de 100644 --- a/resources/authgear/templates/es/translation.json +++ b/resources/authgear/templates/es/translation.json @@ -88,10 +88,6 @@ "error-no-passkey": "No se encuentra Passkey en tu dispositivo. {type, select, password{¿Iniciar sesión con contraseña en su lugar?} oob_otp_email{¿Iniciar sesión con contraseña de un solo uso en su lugar?} oob_otp_sms{¿Iniciar sesión con contraseña de un solo uso en su lugar?} other{¿Intentar con otro dispositivo?}}", "error-passkey-empty-allow-credentials": "El inicio de sesión con passkey no está totalmente admitido en este dispositivo.{variant, select, phone{ Continúa con tu número de teléfono.} email{ Continúa con tu dirección de correo electrónico.} username{ Continúa con tu nombre de usuario.} other{ Continúa con tu dirección de correo electrónico o nombre de usuario.}}", "error-passkey-duplicate": "Ya tienes un passkey en este dispositivo.", - "error-metamask-unauthorized": "No autorizaste la operación.", - "error-metamask-unsupported-method": "El método solicitado no está admitido.", - "error-metamask-disconnected": "El proveedor está desconectado de la cadena especificada.", - "error-failed-to-connect-wallet": "Error al conectar con la billetera.", "error-page-not-found": "No se puede encontrar la página", "error-page-not-found-action": "Volver al Inicio", "error-app-not-found": "{host} no es un proyecto válido", diff --git a/resources/authgear/templates/fil/translation.json b/resources/authgear/templates/fil/translation.json index 43a810097b..9fdb292dbb 100644 --- a/resources/authgear/templates/fil/translation.json +++ b/resources/authgear/templates/fil/translation.json @@ -88,10 +88,6 @@ "error-no-passkey": "Ang Passkey ay hindi makita sa iyong device. {type, select, password{Mag-sign in gamit ang password sa halip?} oob_otp_email{Mag-sign in gamit ang one-time password sa halip?} oob_otp_sms{Mag-sign in gamit ang one-time password sa halip?} other{Subukang gumamit ng ibang device?}}", "error-passkey-empty-allow-credentials": "Ang pag-sign in gamit ang passkey ay hindi ganap na suportado sa device na ito.{variant, select, phone{ Mangyaring magpatuloy gamit ang iyong numero ng telepono.} email{ Mangyaring magpatuloy gamit ang iyong email address.} username{ Mangyaring magpatuloy gamit ang iyong username.} other{ Mangyaring magpatuloy gamit ang iyong email address o username.}}", "error-passkey-duplicate": "Mayroon ka nang passkey sa device na ito.", - "error-metamask-unauthorized": "Hindi mo binigyan ng pahintulot ang operasyon.", - "error-metamask-unsupported-method": "Ang hiniling na method ay hindi suportado.", - "error-metamask-disconnected": "Ang provider ay nadiskonekta mula sa tinukoy na chain.", - "error-failed-to-connect-wallet": "Hindi makakonekta sa wallet.", "error-page-not-found": "Hindi mahanap ang pahina", "error-page-not-found-action": "Bumalik sa Home", "error-app-not-found": "{host} ay hindi isang valid na proyekto", diff --git a/resources/authgear/templates/fr/translation.json b/resources/authgear/templates/fr/translation.json index f62af83f56..3123d70027 100644 --- a/resources/authgear/templates/fr/translation.json +++ b/resources/authgear/templates/fr/translation.json @@ -88,10 +88,6 @@ "error-no-passkey": "Passkey n''est pas trouvé sur votre appareil. {type, select, password{Connectez-vous avec le mot de passe à la place ?} oob_otp_email{Connectez-vous avec le mot de passe à usage unique à la place ?} oob_otp_sms{Connectez-vous avec le mot de passe à usage unique à la place ?} other{Essayez un autre appareil ?}}", "error-passkey-empty-allow-credentials": "La connexion avec Passkey n''est pas complètement prise en charge sur cet appareil.{variant, select, phone{ Veuillez continuer avec votre numéro de téléphone.} email{ Veuillez continuer avec votre adresse e-mail.} username{ Veuillez continuer avec votre nom d''utilisateur.} other{ Veuillez continuer avec votre adresse e-mail ou votre nom d''utilisateur.}}", "error-passkey-duplicate": "Vous avez déjà un Passkey sur cet appareil.", - "error-metamask-unauthorized": "Vous n''avez pas autorisé l''opération.", - "error-metamask-unsupported-method": "La méthode demandée n''est pas prise en charge.", - "error-metamask-disconnected": "Le fournisseur est déconnecté de la chaîne spécifiée.", - "error-failed-to-connect-wallet": "Échec de la connexion au portefeuille.", "error-page-not-found": "La page est introuvable", "error-page-not-found-action": "Retour à l''accueil", "error-app-not-found": "{host} n''est pas un projet valide", diff --git a/resources/authgear/templates/id/translation.json b/resources/authgear/templates/id/translation.json index c58f7c3b7d..fe009693f1 100644 --- a/resources/authgear/templates/id/translation.json +++ b/resources/authgear/templates/id/translation.json @@ -88,10 +88,6 @@ "error-no-passkey": "Passkey tidak ditemukan di perangkat Anda. {type, select, password{Masuk dengan kata sandi sebagai gantinya?} oob_otp_email{Masuk dengan kata sandi satu kali sebagai gantinya?} oob_otp_sms{Masuk dengan kata sandi satu kali sebagai gantinya?} other{Coba perangkat lain?}}", "error-passkey-empty-allow-credentials": "Masuk dengan passkey tidak sepenuhnya didukung di perangkat ini.{variant, select, phone{ Silakan lanjutkan dengan nomor telepon Anda.} email{ Silakan lanjutkan dengan alamat email Anda.} username{ Silakan lanjutkan dengan nama pengguna Anda.} other{ Silakan lanjutkan dengan alamat email atau nama pengguna Anda.}}", "error-passkey-duplicate": "Anda sudah memiliki passkey di perangkat ini.", - "error-metamask-unauthorized": "Anda tidak mengotorisasi operasi tersebut.", - "error-metamask-unsupported-method": "Metode yang diminta tidak didukung.", - "error-metamask-disconnected": "Penyedia terputus dari rantai yang ditentukan.", - "error-failed-to-connect-wallet": "Gagal terhubung ke dompet.", "error-page-not-found": "Halaman tidak dapat ditemukan", "error-page-not-found-action": "Kembali ke Beranda", "error-app-not-found": "{host} bukan proyek yang valid", diff --git a/resources/authgear/templates/it/translation.json b/resources/authgear/templates/it/translation.json index 8f4a61ddac..1f2c26db09 100644 --- a/resources/authgear/templates/it/translation.json +++ b/resources/authgear/templates/it/translation.json @@ -88,10 +88,6 @@ "error-no-passkey": "Passkey non è stato trovato sul tuo dispositivo. {type, select, password{Accedi invece con la password?} oob_otp_email{Accedi invece con una password monouso?} oob_otp_sms{Accedi invece con una password monouso?} other{Prova con un altro dispositivo?}}", "error-passkey-empty-allow-credentials": "L''accesso con Passkey non è completamente supportato su questo dispositivo.{variant, select, phone{ Per favore, continua con il tuo numero di telefono.} email{ Per favore, continua con il tuo indirizzo email.} username{ Per favore, continua con il tuo nome utente.} other{ Per favore, continua con il tuo indirizzo email o nome utente.}}", "error-passkey-duplicate": "Hai già un Passkey su questo dispositivo.", - "error-metamask-unauthorized": "Non hai autorizzato l''operazione.", - "error-metamask-unsupported-method": "Il metodo richiesto non è supportato.", - "error-metamask-disconnected": "Il provider è disconnesso dalla catena specificata.", - "error-failed-to-connect-wallet": "Impossibile connettersi al portafoglio.", "error-page-not-found": "La pagina non può essere trovata", "error-page-not-found-action": "Torna alla Home", "error-app-not-found": "{host} non è un progetto valido", diff --git a/resources/authgear/templates/ja/translation.json b/resources/authgear/templates/ja/translation.json index 8fd1358ceb..5b30054580 100644 --- a/resources/authgear/templates/ja/translation.json +++ b/resources/authgear/templates/ja/translation.json @@ -88,10 +88,6 @@ "error-no-passkey": "デバイスにPasskeyが見つかりません。{type, select, password{パスワードでサインインしますか?} oob_otp_email{ワンタイムパスワードでサインインしますか?} oob_otp_sms{ワンタイムパスワードでサインインしますか?} other{別のデバイスを試してください?}}", "error-passkey-empty-allow-credentials": "このデバイスではPasskeyでのサインインが完全にサポートされていません。{variant, select, phone{代わりに電話番号でサインインしてください。} email{代わりにメールアドレスでサインインしてください。} username{代わりにユーザー名でサインインしてください。} other{代わりにメールアドレスまたはユーザー名でサインインしてください。}}", "error-passkey-duplicate": "このデバイスにはすでにPasskeyがあります。", - "error-metamask-unauthorized": "操作を承認していません。", - "error-metamask-unsupported-method": "要求されたメソッドはサポートされていません。", - "error-metamask-disconnected": "プロバイダが指定されたチェーンから切断されています。", - "error-failed-to-connect-wallet": "ウォレットに接続できませんでした。", "error-page-not-found": "ページが見つかりません", "error-page-not-found-action": "ホームに戻る", "error-app-not-found": "{host}は有効なプロジェクトではありません", diff --git a/resources/authgear/templates/ko/translation.json b/resources/authgear/templates/ko/translation.json index 619ecccc79..08fdead86e 100644 --- a/resources/authgear/templates/ko/translation.json +++ b/resources/authgear/templates/ko/translation.json @@ -88,10 +88,6 @@ "error-no-passkey": "기기에서 Passkey를 찾을 수 없습니다. {type, select, password{대신 비밀번호로 로그인하시겠습니까?} oob_otp_email{대신 일회성 비밀번호로 로그인하시겠습니까?} oob_otp_sms{대신 일회성 비밀번호로 로그인하시겠습니까?} other{다른 기기를 시도해 보세요?}}", "error-passkey-empty-allow-credentials": "이 기기에서는 Passkey 로그인이 완전히 지원되지 않습니다.{variant, select, phone{ 대신 전화번호로 계속하세요.} email{ 대신 이메일 주소로 계속하세요.} username{ 대신 사용자 이름으로 계속하세요.} other{ 대신 이메일 주소 또는 사용자 이름으로 계속하세요.}}", "error-passkey-duplicate": "이 기기에 이미 Passkey가 있습니다.", - "error-metamask-unauthorized": "작업을 승인하지 않았습니다.", - "error-metamask-unsupported-method": "요청된 메서드가 지원되지 않습니다.", - "error-metamask-disconnected": "제공자가 지정된 체인에서 연결이 끊겼습니다.", - "error-failed-to-connect-wallet": "지갑에 연결하지 못했습니다.", "error-page-not-found": "페이지를 찾을 수 없습니다", "error-page-not-found-action": "홈으로 돌아가기", "error-app-not-found": "{host}은(는) 유효한 프로젝트가 아닙니다", diff --git a/resources/authgear/templates/ms/translation.json b/resources/authgear/templates/ms/translation.json index 19dc0fe99e..8cc3670891 100644 --- a/resources/authgear/templates/ms/translation.json +++ b/resources/authgear/templates/ms/translation.json @@ -88,10 +88,6 @@ "error-no-passkey": "Passkey tidak ditemui pada peranti anda. {type, select, password{Log masuk dengan kata laluan sebaliknya?} oob_otp_email{Log masuk dengan kata laluan sekali guna sebaliknya?} oob_otp_sms{Log masuk dengan kata laluan sekali guna sebaliknya?} other{Cuba peranti lain?}}", "error-passkey-empty-allow-credentials": "Log masuk dengan passkey tidak disokong sepenuhnya pada peranti ini.{variant, select, phone{ Sila teruskan dengan nombor telefon anda.} email{ Sila teruskan dengan alamat e-mel anda.} username{ Sila teruskan dengan nama pengguna anda.} other{ Sila teruskan dengan alamat e-mel atau nama pengguna anda.}}", "error-passkey-duplicate": "Anda sudah mempunyai passkey pada peranti ini.", - "error-metamask-unauthorized": "Anda tidak membenarkan operasi tersebut.", - "error-metamask-unsupported-method": "Kaedah yang diminta tidak disokong.", - "error-metamask-disconnected": "Pembekal telah terputus daripada rantaian yang dinyatakan.", - "error-failed-to-connect-wallet": "Gagal menyambung ke dompet.", "error-page-not-found": "Halaman tidak dapat ditemui", "error-page-not-found-action": "Kembali ke Laman Utama", "error-app-not-found": "{host} bukan projek yang sah", diff --git a/resources/authgear/templates/nl/translation.json b/resources/authgear/templates/nl/translation.json index 26ec5765a7..cb28c6d891 100644 --- a/resources/authgear/templates/nl/translation.json +++ b/resources/authgear/templates/nl/translation.json @@ -88,10 +88,6 @@ "error-no-passkey": "Passkey is niet gevonden op uw apparaat. {type, select, password{Meld u aan met wachtwoord in plaats daarvan?} oob_otp_email{Meld u aan met eenmalig wachtwoord in plaats daarvan?} oob_otp_sms{Meld u aan met eenmalig wachtwoord in plaats daarvan?} other{Probeer een ander apparaat?}}", "error-passkey-empty-allow-credentials": "Aanmelden met passkey wordt op dit apparaat niet volledig ondersteund.{variant, select, phone{ Ga verder met uw telefoonnummer.} email{ Ga verder met uw e-mailadres.} username{ Ga verder met uw gebruikersnaam.} other{ Ga verder met uw e-mailadres of gebruikersnaam.}}", "error-passkey-duplicate": "U heeft al een passkey op dit apparaat.", - "error-metamask-unauthorized": "U hebt de bewerking niet geautoriseerd.", - "error-metamask-unsupported-method": "De aangevraagde methode wordt niet ondersteund.", - "error-metamask-disconnected": "De provider is losgekoppeld van de opgegeven keten.", - "error-failed-to-connect-wallet": "Kan niet verbinden met portemonnee.", "error-page-not-found": "De pagina kan niet worden gevonden", "error-page-not-found-action": "Terug naar startpagina", "error-app-not-found": "{host} is geen geldig project", diff --git a/resources/authgear/templates/pl/translation.json b/resources/authgear/templates/pl/translation.json index dc99662295..14c3528932 100644 --- a/resources/authgear/templates/pl/translation.json +++ b/resources/authgear/templates/pl/translation.json @@ -88,10 +88,6 @@ "error-no-passkey": "Passkey nie został znaleziony na Twoim urządzeniu. {type, select, password{Zaloguj się zamiast tego hasłem?} oob_otp_email{Zaloguj się zamiast tego jednorazowym hasłem?} oob_otp_sms{Zaloguj się zamiast tego jednorazowym hasłem?} other{Spróbuj innego urządzenia?}}", "error-passkey-empty-allow-credentials": "Logowanie za pomocą Passkey nie jest w pełni obsługiwane na tym urządzeniu.{variant, select, phone{ Kontynuuj za pomocą numeru telefonu.} email{ Kontynuuj za pomocą adresu e-mail.} username{ Kontynuuj za pomocą nazwy użytkownika.} other{ Kontynuuj za pomocą adresu e-mail lub nazwy użytkownika.}}", "error-passkey-duplicate": "Masz już Passkey na tym urządzeniu.", - "error-metamask-unauthorized": "Nie autoryzowałeś tej operacji.", - "error-metamask-unsupported-method": "Żądana metoda nie jest obsługiwana.", - "error-metamask-disconnected": "Dostawca jest odłączony od określonego łańcucha.", - "error-failed-to-connect-wallet": "Nie udało się połączyć z portfelem.", "error-page-not-found": "Nie można znaleźć strony", "error-page-not-found-action": "Wróć do strony głównej", "error-app-not-found": "{host} to nieprawidłowy projekt", diff --git a/resources/authgear/templates/pt-BR/translation.json b/resources/authgear/templates/pt-BR/translation.json index 159717934d..ec512b967f 100644 --- a/resources/authgear/templates/pt-BR/translation.json +++ b/resources/authgear/templates/pt-BR/translation.json @@ -88,10 +88,6 @@ "error-no-passkey": "Passkey não encontrado em seu dispositivo. {type, select, password{Entrar com senha em vez disso?} oob_otp_email{Entrar com senha de uso único em vez disso?} oob_otp_sms{Entrar com senha de uso único em vez disso?} other{Tente outro dispositivo?}}", "error-passkey-empty-allow-credentials": "O login com Passkey não é totalmente compatível neste dispositivo.{variant, select, phone{ Por favor, continue com seu número de telefone.} email{ Por favor, continue com seu endereço de e-mail.} username{ Por favor, continue com seu nome de usuário.} other{ Por favor, continue com seu endereço de e-mail ou nome de usuário.}}", "error-passkey-duplicate": "Você já tem um Passkey neste dispositivo.", - "error-metamask-unauthorized": "Você não autorizou a operação.", - "error-metamask-unsupported-method": "O método solicitado não é compatível.", - "error-metamask-disconnected": "O provedor está desconectado da cadeia especificada.", - "error-failed-to-connect-wallet": "Falha ao conectar à carteira.", "error-page-not-found": "A página não pode ser encontrada", "error-page-not-found-action": "Voltar para a Home", "error-app-not-found": "{host} não é um projeto válido", diff --git a/resources/authgear/templates/pt-PT/translation.json b/resources/authgear/templates/pt-PT/translation.json index f959b351d4..cf1d61d9e0 100644 --- a/resources/authgear/templates/pt-PT/translation.json +++ b/resources/authgear/templates/pt-PT/translation.json @@ -88,10 +88,6 @@ "error-no-passkey": "Passkey não é encontrado no seu dispositivo. {type, select, password{Entrar com senha em vez disso?} oob_otp_email{Entrar com senha de uso único em vez disso?} oob_otp_sms{Entrar com senha de uso único em vez disso?} other{Tente outro dispositivo?}}", "error-passkey-empty-allow-credentials": "O login com Passkey não é totalmente suportado neste dispositivo.{variant, select, phone{ Por favor, continue com o seu número de telefone.} email{ Por favor, continue com o seu endereço de e-mail.} username{ Por favor, continue com o seu nome de utilizador.} other{ Por favor, continue com o seu endereço de e-mail ou nome de utilizador.}}", "error-passkey-duplicate": "Você já tem um Passkey neste dispositivo.", - "error-metamask-unauthorized": "Você não autorizou a operação.", - "error-metamask-unsupported-method": "O método solicitado não é suportado.", - "error-metamask-disconnected": "O provedor está desconectado da cadeia especificada.", - "error-failed-to-connect-wallet": "Falha ao conectar à carteira.", "error-page-not-found": "A página não pode ser encontrada", "error-page-not-found-action": "Voltar para a Home", "error-app-not-found": "{host} não é um projeto válido", diff --git a/resources/authgear/templates/pt/translation.json b/resources/authgear/templates/pt/translation.json index ef783c6ac7..0811ab1493 100644 --- a/resources/authgear/templates/pt/translation.json +++ b/resources/authgear/templates/pt/translation.json @@ -88,10 +88,6 @@ "error-no-passkey": "Passkey não foi encontrada no seu dispositivo. {type, select, password{Entrar com senha?} oob_otp_email{Entrar com senha única por e-mail?} oob_otp_sms{Entrar com senha única por SMS?} other{Tentar outro dispositivo?}}", "error-passkey-empty-allow-credentials": "O login com passkey não é totalmente suportado neste dispositivo.{variant, select, phone{ Por favor, continue com seu número de telefone.} email{ Por favor, continue com seu endereço de e-mail.} username{ Por favor, continue com seu nome de usuário.} other{ Por favor, continue com seu endereço de e-mail ou nome de usuário.}}", "error-passkey-duplicate": "Você já tem uma passkey neste dispositivo.", - "error-metamask-unauthorized": "Você não autorizou a operação.", - "error-metamask-unsupported-method": "O método solicitado não é suportado.", - "error-metamask-disconnected": "O provedor está desconectado da cadeia especificada.", - "error-failed-to-connect-wallet": "Falha ao conectar à carteira.", "error-page-not-found": "A página não pode ser encontrada", "error-page-not-found-action": "Retornar à Página Inicial", "error-app-not-found": "{host} não é um projeto válido", diff --git a/resources/authgear/templates/th/translation.json b/resources/authgear/templates/th/translation.json index dfba0187f5..a580101d7c 100644 --- a/resources/authgear/templates/th/translation.json +++ b/resources/authgear/templates/th/translation.json @@ -88,10 +88,6 @@ "error-no-passkey": "ไม่พบ Passkey บนอุปกรณ์ของคุณ {type, select, password{ลงชื่อเข้าใช้ด้วยรหัสผ่านแทน?} oob_otp_email{ลงชื่อเข้าใช้ด้วยรหัสผ่านแบบใช้ครั้งเดียวแทน?} oob_otp_sms{ลงชื่อเข้าใช้ด้วยรหัสผ่านแบบใช้ครั้งเดียวแทน?} other{ลองอุปกรณ์อื่น?}}", "error-passkey-empty-allow-credentials": "การลงชื่อเข้าใช้ด้วย Passkey ไม่ได้รับการสนับสนุนอย่างเต็มที่บนอุปกรณ์นี้{variant, select, phone{ โปรดดำเนินการต่อด้วยหมายเลขโทรศัพท์ของคุณ} email{ โปรดดำเนินการต่อด้วยที่อยู่อีเมลของคุณ} username{ โปรดดำเนินการต่อด้วยชื่อผู้ใช้ของคุณ} other{ โปรดดำเนินการต่อด้วยที่อยู่อีเมลหรือชื่อผู้ใช้ของคุณ}}", "error-passkey-duplicate": "คุณมี Passkey บนอุปกรณ์นี้อยู่แล้ว", - "error-metamask-unauthorized": "คุณไม่ได้อนุญาตการดำเนินการ", - "error-metamask-unsupported-method": "วิธีการที่ร้องขอไม่ได้รับการสนับสนุน", - "error-metamask-disconnected": "ผู้ให้บริการถูกตัดการเชื่อมต่อจากโซ่ที่ระบุ", - "error-failed-to-connect-wallet": "ไม่สามารถเชื่อมต่อกับกระเป๋าเงินได้", "error-page-not-found": "ไม่พบหน้านี้", "error-page-not-found-action": "กลับไปยังหน้าหลัก", "error-app-not-found": "{host} ไม่ใช่โครงการที่ถูกต้อง", diff --git a/resources/authgear/templates/vi/translation.json b/resources/authgear/templates/vi/translation.json index 5a2c5f2e9a..b03d0e2d17 100644 --- a/resources/authgear/templates/vi/translation.json +++ b/resources/authgear/templates/vi/translation.json @@ -88,10 +88,6 @@ "error-no-passkey": "Không tìm thấy Passkey trên thiết bị của bạn. {type, select, password{Đăng nhập bằng mật khẩu thay vào đó?} oob_otp_email{Đăng nhập bằng mật khẩu một lần thay vào đó?} oob_otp_sms{Đăng nhập bằng mật khẩu một lần thay vào đó?} other{Thử thiết bị khác?}}", "error-passkey-empty-allow-credentials": "Đăng nhập bằng Passkey không được hỗ trợ đầy đủ trên thiết bị này.{variant, select, phone{ Vui lòng tiếp tục bằng số điện thoại của bạn.} email{ Vui lòng tiếp tục bằng địa chỉ email của bạn.} username{ Vui lòng tiếp tục bằng tên người dùng của bạn.} other{ Vui lòng tiếp tục bằng địa chỉ email hoặc tên người dùng của bạn.}}", "error-passkey-duplicate": "Bạn đã có Passkey trên thiết bị này rồi.", - "error-metamask-unauthorized": "Bạn chưa ủy quyền cho hoạt động này.", - "error-metamask-unsupported-method": "Phương thức yêu cầu không được hỗ trợ.", - "error-metamask-disconnected": "Nhà cung cấp đã ngắt kết nối khỏi chuỗi được chỉ định.", - "error-failed-to-connect-wallet": "Không thể kết nối với ví.", "error-page-not-found": "Không tìm thấy trang", "error-page-not-found-action": "Quay lại Trang chủ", "error-app-not-found": "{host} không phải là một dự án hợp lệ", diff --git a/resources/authgear/templates/zh-CN/translation.json b/resources/authgear/templates/zh-CN/translation.json index c5d87984aa..e4cfbc4c7c 100644 --- a/resources/authgear/templates/zh-CN/translation.json +++ b/resources/authgear/templates/zh-CN/translation.json @@ -88,10 +88,6 @@ "error-no-passkey": "在您的设备上找不到Passkey。{type, select, password{改用密码登录?} oob_otp_email{改用一次性密码登录?} oob_otp_sms{改用一次性密码登录?} other{尝试另一台设备?}}", "error-passkey-empty-allow-credentials": "此设备不完全支持Passkey登录。{variant, select, phone{ 请继续使用您的手机号码。} email{ 请继续使用您的电子邮件地址。} username{ 请继续使用您的用户名。} other{ 请继续使用您的电子邮件地址或用户名。}}", "error-passkey-duplicate": "您的这台设备上已经有一个Passkey了。", - "error-metamask-unauthorized": "您没有授权该操作。", - "error-metamask-unsupported-method": "所请求的方法不受支持。", - "error-metamask-disconnected": "该提供程序已与指定的链断开连接。", - "error-failed-to-connect-wallet": "无法连接到钱包。", "error-page-not-found": "找不到该页面", "error-page-not-found-action": "返回主页", "error-app-not-found": "{host} 不是有效的项目", diff --git a/resources/authgear/templates/zh-HK/translation.json b/resources/authgear/templates/zh-HK/translation.json index a7946c1326..de16fc1cd4 100644 --- a/resources/authgear/templates/zh-HK/translation.json +++ b/resources/authgear/templates/zh-HK/translation.json @@ -88,10 +88,6 @@ "error-no-passkey": "在你的裝置沒有通行密匙。{type, select, password{請使用密碼登入。} oob_otp_email{請使用一次性密碼登入。} oob_otp_sms{請使用一次性密碼登入。} other{請嘗試使用另一個裝置。}}", "error-passkey-empty-allow-credentials": "你的裝置不完全支援通行密匙。{variant, select, phone{請先以電話號碼繼續。} email{請先以電郵地址繼續。} username{請先以用戶名稱繼續。} other{請先以電郵地址或用戶名稱繼續。}}", "error-passkey-duplicate": "此裝置已有通行密匙。", - "error-metamask-unauthorized": "你拒絕了授權。", - "error-metamask-unsupported-method": "無效的請求方式。", - "error-metamask-disconnected": "已從區塊鏈斷開連接。", - "error-failed-to-connect-wallet": "無法連接到錢包。", "error-page-not-found": "找不到頁面", "error-page-not-found-action": "返回主頁", "error-app-not-found": "{host} a not valid project", diff --git a/resources/authgear/templates/zh-TW/translation.json b/resources/authgear/templates/zh-TW/translation.json index 84f8f43dbd..b844982287 100644 --- a/resources/authgear/templates/zh-TW/translation.json +++ b/resources/authgear/templates/zh-TW/translation.json @@ -88,10 +88,6 @@ "error-no-passkey": "在你的裝置沒有通行密鑰。{type, select, password{請使用密碼登入。} oob_otp_email{請使用一次性密碼登入。} oob_otp_sms{請使用一次性密碼登入。} other{請嘗試使用另一個裝置。}}", "error-passkey-empty-allow-credentials": "你的裝置不完全支援通行密鑰。{variant, select, phone{請先以電話號碼繼續。} email{請先以電郵地址繼續。} username{請先以用戶名稱繼續。} other{請先以電郵地址或用戶名稱繼續。}}", "error-passkey-duplicate": "此裝置已有通行密鑰。", - "error-metamask-unauthorized": "你拒絕了授權。", - "error-metamask-unsupported-method": "無效的請求方式。", - "error-metamask-disconnected": "已從區塊鏈斷開連接。", - "error-failed-to-connect-wallet": "無法連接到錢包。", "error-page-not-found": "找不到頁面", "error-page-not-found-action": "返回主頁", "error-app-not-found": "{host} a not valid project", From 6df1951f433d23ca35fc0c4e2669437ae11fd0fe Mon Sep 17 00:00:00 2001 From: Louis Chan Date: Thu, 5 Dec 2024 17:15:07 +0800 Subject: [PATCH 12/22] Remove /errors/missing_web3_wallet --- .vettedpositions | 1 - cmd/authgear/background/wire_gen.go | 4 +- cmd/authgear/elasticsearch/wire_gen.go | 4 +- cmd/authgear/pgsearch/wire_gen.go | 4 +- e2e/cmd/e2e/pkg/wire_gen.go | 4 +- pkg/admin/wire_gen.go | 8 +- pkg/auth/handler/webapp/deps.go | 1 - .../handler/webapp/missing_web3_wallet.go | 89 - pkg/auth/routes.go | 1 - pkg/auth/wire_gen.go | 1759 ++++------------- pkg/auth/wire_handler.go | 7 - pkg/redisqueue/wire_gen.go | 12 +- pkg/resolver/wire_gen.go | 8 +- .../templates/en/web/missing_web3_wallet.html | 36 - 14 files changed, 392 insertions(+), 1546 deletions(-) delete mode 100644 pkg/auth/handler/webapp/missing_web3_wallet.go delete mode 100644 resources/authgear/templates/en/web/missing_web3_wallet.html diff --git a/.vettedpositions b/.vettedpositions index 69329285c2..4c05be41c9 100644 --- a/.vettedpositions +++ b/.vettedpositions @@ -172,7 +172,6 @@ /pkg/auth/handler/webapp/login.go:115:28: requestcontext /pkg/auth/handler/webapp/login_link_otp.go:121:27: requestcontext /pkg/auth/handler/webapp/logout.go:71:27: requestcontext -/pkg/auth/handler/webapp/missing_web3_wallet.go:78:27: requestcontext /pkg/auth/handler/webapp/panic_middleware.go:68:61: requestcontext /pkg/auth/handler/webapp/passkey_creation_options.go:43:28: requestcontext /pkg/auth/handler/webapp/passkey_request_options.go:52:28: requestcontext diff --git a/cmd/authgear/background/wire_gen.go b/cmd/authgear/background/wire_gen.go index e032908089..0b25bc533c 100644 --- a/cmd/authgear/background/wire_gen.go +++ b/cmd/authgear/background/wire_gen.go @@ -303,7 +303,7 @@ func newUserService(p *deps.BackgroundProvider, appID string, appContext *config SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: configAppID, @@ -322,7 +322,7 @@ func newUserService(p *deps.BackgroundProvider, appID string, appContext *config siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, diff --git a/cmd/authgear/elasticsearch/wire_gen.go b/cmd/authgear/elasticsearch/wire_gen.go index 71341c827e..9a6bcc2b23 100644 --- a/cmd/authgear/elasticsearch/wire_gen.go +++ b/cmd/authgear/elasticsearch/wire_gen.go @@ -205,7 +205,7 @@ func NewReindexer(pool *db.Pool, databaseCredentials *CmdDBCredential, appID Cmd SQLExecutor: sqlExecutor, } remoteIP := ProvideRemoteIP() - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: configAppID, @@ -224,7 +224,7 @@ func NewReindexer(pool *db.Pool, databaseCredentials *CmdDBCredential, appID Cmd siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clock, NonceStore: storeRedis, diff --git a/cmd/authgear/pgsearch/wire_gen.go b/cmd/authgear/pgsearch/wire_gen.go index 9374408960..52e367501a 100644 --- a/cmd/authgear/pgsearch/wire_gen.go +++ b/cmd/authgear/pgsearch/wire_gen.go @@ -190,7 +190,7 @@ func NewReindexer(pool *db.Pool, databaseCredentials *CmdDBCredential, searchDat SQLExecutor: sqlExecutor, } remoteIP := ProvideRemoteIP() - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: configAppID, @@ -209,7 +209,7 @@ func NewReindexer(pool *db.Pool, databaseCredentials *CmdDBCredential, searchDat siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clock, NonceStore: storeRedis, diff --git a/e2e/cmd/e2e/pkg/wire_gen.go b/e2e/cmd/e2e/pkg/wire_gen.go index 11b955a2f3..882b729a6e 100644 --- a/e2e/cmd/e2e/pkg/wire_gen.go +++ b/e2e/cmd/e2e/pkg/wire_gen.go @@ -259,7 +259,7 @@ func newUserImport(p *deps.AppProvider) *userimport.UserImportService { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -278,7 +278,7 @@ func newUserImport(p *deps.AppProvider) *userimport.UserImportService { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, diff --git a/pkg/admin/wire_gen.go b/pkg/admin/wire_gen.go index 32265f5c91..6966459414 100644 --- a/pkg/admin/wire_gen.go +++ b/pkg/admin/wire_gen.go @@ -314,7 +314,7 @@ func newGraphQLHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } remoteIP := deps.ProvideRemoteIP(request, trustProxy) - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -333,7 +333,7 @@ func newGraphQLHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -1557,7 +1557,7 @@ func newUserExportCreateHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } remoteIP := deps.ProvideRemoteIP(request, trustProxy) - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: handle, AppID: appID, @@ -1576,7 +1576,7 @@ func newUserExportCreateHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, diff --git a/pkg/auth/handler/webapp/deps.go b/pkg/auth/handler/webapp/deps.go index c7afe48e24..52c3ae208c 100644 --- a/pkg/auth/handler/webapp/deps.go +++ b/pkg/auth/handler/webapp/deps.go @@ -93,7 +93,6 @@ var DependencySet = wire.NewSet( wire.Struct(new(PasskeyCreationOptionsHandler), "*"), wire.Struct(new(PasskeyRequestOptionsHandler), "*"), wire.Struct(new(ConnectWeb3AccountHandler), "*"), - wire.Struct(new(MissingWeb3WalletHandler), "*"), wire.Struct(new(FeatureDisabledHandler), "*"), wire.Struct(new(AuthflowLoginHandler), "*"), diff --git a/pkg/auth/handler/webapp/missing_web3_wallet.go b/pkg/auth/handler/webapp/missing_web3_wallet.go deleted file mode 100644 index cdfe6b7b07..0000000000 --- a/pkg/auth/handler/webapp/missing_web3_wallet.go +++ /dev/null @@ -1,89 +0,0 @@ -package webapp - -import ( - "context" - "net/http" - - "github.com/authgear/authgear-server/pkg/api/model" - "github.com/authgear/authgear-server/pkg/auth/handler/webapp/viewmodels" - "github.com/authgear/authgear-server/pkg/lib/config" - "github.com/authgear/authgear-server/pkg/util/httproute" - "github.com/authgear/authgear-server/pkg/util/template" -) - -var TemplateWebMissingWeb3WalletHTML = template.RegisterHTML( - "web/missing_web3_wallet.html", - Components..., -) - -func ConfigureMissingWeb3WalletRoute(route httproute.Route) httproute.Route { - return route. - WithMethods("OPTIONS", "GET"). - WithPathPattern("/errors/missing_web3_wallet") -} - -type MissingWeb3WalletViewModel struct { - Provider string -} - -type MissingWeb3WalletHandler struct { - ControllerFactory ControllerFactory - BaseViewModel *viewmodels.BaseViewModeler - Renderer Renderer - AuthenticationConfig *config.AuthenticationConfig -} - -func (h *MissingWeb3WalletHandler) GetData(r *http.Request, rw http.ResponseWriter) (map[string]interface{}, error) { - data := map[string]interface{}{} - - baseViewModel := h.BaseViewModel.ViewModel(r, rw) - - provider := "" - if p := r.Form.Get("provider"); p == "" { - provider = "metamask" - } else { - provider = p - } - - missingWeb3WalletViewModel := MissingWeb3WalletViewModel{ - Provider: provider, - } - - viewmodels.Embed(data, missingWeb3WalletViewModel) - viewmodels.Embed(data, baseViewModel) - - return data, nil -} - -func (h *MissingWeb3WalletHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { - ctrl, err := h.ControllerFactory.New(r, w) - if err != nil { - http.Error(w, err.Error(), http.StatusBadRequest) - return - } - - identities := h.AuthenticationConfig.Identities - isSIWEEnabled := false - for _, i := range identities { - if i == model.IdentityTypeSIWE { - isSIWEEnabled = true - break - } - } - - if !isSIWEEnabled { - http.Redirect(w, r, "/", http.StatusFound) - return - } - defer ctrl.ServeWithDBTx(r.Context()) - - ctrl.Get(func(ctx context.Context) error { - data, err := h.GetData(r, w) - if err != nil { - return err - } - - h.Renderer.RenderHTML(w, r, TemplateWebMissingWeb3WalletHTML, data) - return nil - }) -} diff --git a/pkg/auth/routes.go b/pkg/auth/routes.go index 23cfe7116a..f4c556e1ef 100644 --- a/pkg/auth/routes.go +++ b/pkg/auth/routes.go @@ -445,7 +445,6 @@ func NewRouter(p *deps.RootProvider, configSource *configsource.ConfigSource) ht router.Add(webapphandler.ConfigureForceChangePasswordRoute(webappPageRoute), p.Handler(newWebAppForceChangePasswordHandler)) router.Add(webapphandler.ConfigureForceChangeSecondaryPasswordRoute(webappPageRoute), p.Handler(newWebAppForceChangeSecondaryPasswordHandler)) router.Add(webapphandler.ConfigureConnectWeb3AccountRoute(webappSIWERoute), p.Handler(newWebAppConnectWeb3AccountHandler)) - router.Add(webapphandler.ConfigureMissingWeb3WalletRoute(webappPageRoute), p.Handler(newWebAppMissingWeb3WalletHandler)) router.Add(webapphandler.ConfigureFeatureDisabledRoute(webappPageRoute), p.Handler(newWebAppFeatureDisabledHandler)) router.Add(webapphandler.ConfigureForgotPasswordSuccessRoute(webappSuccessPageRoute), p.Handler(newWebAppForgotPasswordSuccessHandler)) diff --git a/pkg/auth/wire_gen.go b/pkg/auth/wire_gen.go index 7ed5ac45c3..8486552190 100644 --- a/pkg/auth/wire_gen.go +++ b/pkg/auth/wire_gen.go @@ -306,7 +306,7 @@ func newOAuthAuthorizeHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } remoteIP := deps.ProvideRemoteIP(request, trustProxy) - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -325,7 +325,7 @@ func newOAuthAuthorizeHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clock, NonceStore: storeRedis, @@ -1227,7 +1227,7 @@ func newOAuthConsentHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } remoteIP := deps.ProvideRemoteIP(request, trustProxy) - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -1246,7 +1246,7 @@ func newOAuthConsentHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -2268,7 +2268,7 @@ func newOAuthTokenHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 siweStoreRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -2287,7 +2287,7 @@ func newOAuthTokenHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: siweStoreRedis, @@ -3316,7 +3316,7 @@ func newOAuthRevokeHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 siweStoreRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -3335,7 +3335,7 @@ func newOAuthRevokeHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: siweStoreRedis, @@ -3877,7 +3877,7 @@ func newOAuthJWKSHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } remoteIP := deps.ProvideRemoteIP(request, trustProxy) - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -3896,7 +3896,7 @@ func newOAuthJWKSHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -4276,7 +4276,7 @@ func newOAuthUserInfoHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } remoteIP := deps.ProvideRemoteIP(request, trustProxy) - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -4295,7 +4295,7 @@ func newOAuthUserInfoHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -4763,7 +4763,7 @@ func newOAuthEndSessionHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 siweStoreRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -4782,7 +4782,7 @@ func newOAuthEndSessionHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: siweStoreRedis, @@ -5405,7 +5405,7 @@ func newOAuthAppSessionTokenHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 siweStoreRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -5424,7 +5424,7 @@ func newOAuthAppSessionTokenHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: siweStoreRedis, @@ -6258,7 +6258,7 @@ func newSIWENonceHandler(p *deps.RequestProvider) http.Handler { appContext := appProvider.AppContext config := appContext.Config appConfig := config.AppConfig - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 authenticationConfig := appConfig.Authentication clockClock := _wireSystemClockValue handle := appProvider.Redis @@ -6282,7 +6282,7 @@ func newSIWENonceHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -6480,7 +6480,7 @@ func newAPIAnonymousUserSignupHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -6499,7 +6499,7 @@ func newAPIAnonymousUserSignupHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -7486,7 +7486,7 @@ func newAPIAnonymousUserPromotionCodeHandler(p *deps.RequestProvider) http.Handl SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -7505,7 +7505,7 @@ func newAPIAnonymousUserPromotionCodeHandler(p *deps.RequestProvider) http.Handl siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -8624,7 +8624,7 @@ func newWebAppLoginHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -8643,7 +8643,7 @@ func newWebAppLoginHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -9658,7 +9658,7 @@ func newWebAppSignupHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -9677,7 +9677,7 @@ func newWebAppSignupHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -10691,7 +10691,7 @@ func newWebAppPromoteHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -10710,7 +10710,7 @@ func newWebAppPromoteHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -11724,7 +11724,7 @@ func newWebAppSelectAccountHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -11743,7 +11743,7 @@ func newWebAppSelectAccountHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -12735,7 +12735,7 @@ func newWebAppAuthflowV2VerifyBotProtectionHandler(p *deps.RequestProvider) http SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: handle, AppID: appID, @@ -12754,7 +12754,7 @@ func newWebAppAuthflowV2VerifyBotProtectionHandler(p *deps.RequestProvider) http siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -13872,7 +13872,7 @@ func newWebAppAuthflowV2SelectAccountHandler(p *deps.RequestProvider) http.Handl SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -13891,7 +13891,7 @@ func newWebAppAuthflowV2SelectAccountHandler(p *deps.RequestProvider) http.Handl siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -14883,7 +14883,7 @@ func newWebAppSSOCallbackHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: handle, AppID: appID, @@ -14902,7 +14902,7 @@ func newWebAppSSOCallbackHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -16116,7 +16116,7 @@ func newWebAppAuthflowSSOCallbackHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: handle, AppID: appID, @@ -16135,7 +16135,7 @@ func newWebAppAuthflowSSOCallbackHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -17349,7 +17349,7 @@ func newWebAppAuthflowV2SSOCallbackHandler(p *deps.RequestProvider) http.Handler SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: handle, AppID: appID, @@ -17368,7 +17368,7 @@ func newWebAppAuthflowV2SSOCallbackHandler(p *deps.RequestProvider) http.Handler siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -18604,7 +18604,7 @@ func newWechatAuthHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -18623,7 +18623,7 @@ func newWechatAuthHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -19622,7 +19622,7 @@ func newWechatCallbackHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -19641,7 +19641,7 @@ func newWechatCallbackHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -20645,7 +20645,7 @@ func newWebAppEnterLoginIDHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -20664,7 +20664,7 @@ func newWebAppEnterLoginIDHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -21670,7 +21670,7 @@ func newWebAppEnterPasswordHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -21689,7 +21689,7 @@ func newWebAppEnterPasswordHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -22692,7 +22692,7 @@ func newWebConfirmTerminateOtherSessionsHandler(p *deps.RequestProvider) http.Ha SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -22711,7 +22711,7 @@ func newWebConfirmTerminateOtherSessionsHandler(p *deps.RequestProvider) http.Ha siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -23711,7 +23711,7 @@ func newWebAppUsePasskeyHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -23730,7 +23730,7 @@ func newWebAppUsePasskeyHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -24733,7 +24733,7 @@ func newWebAppCreatePasswordHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -24752,7 +24752,7 @@ func newWebAppCreatePasswordHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -25756,7 +25756,7 @@ func newWebAppCreatePasskeyHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -25775,7 +25775,7 @@ func newWebAppCreatePasskeyHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -26778,7 +26778,7 @@ func newWebAppPromptCreatePasskeyHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -26797,7 +26797,7 @@ func newWebAppPromptCreatePasskeyHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -27800,7 +27800,7 @@ func newWebAppSetupTOTPHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -27819,7 +27819,7 @@ func newWebAppSetupTOTPHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -28824,7 +28824,7 @@ func newWebAppEnterTOTPHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -28843,7 +28843,7 @@ func newWebAppEnterTOTPHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -29846,7 +29846,7 @@ func newWebAppSetupOOBOTPHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -29865,7 +29865,7 @@ func newWebAppSetupOOBOTPHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -30868,7 +30868,7 @@ func newWebAppEnterOOBOTPHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -30887,7 +30887,7 @@ func newWebAppEnterOOBOTPHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -31894,7 +31894,7 @@ func newWebAppSetupWhatsappOTPHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -31913,7 +31913,7 @@ func newWebAppSetupWhatsappOTPHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -32916,7 +32916,7 @@ func newWebAppWhatsappOTPHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -32935,7 +32935,7 @@ func newWebAppWhatsappOTPHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -33942,7 +33942,7 @@ func newWebAppSetupLoginLinkOTPHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -33961,7 +33961,7 @@ func newWebAppSetupLoginLinkOTPHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -35003,7 +35003,7 @@ func newWebAppLoginLinkOTPHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: handle, AppID: appID, @@ -35013,7 +35013,7 @@ func newWebAppLoginLinkOTPHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -36033,7 +36033,7 @@ func newWebAppVerifyLoginLinkOTPHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: handle, AppID: appID, @@ -36043,7 +36043,7 @@ func newWebAppVerifyLoginLinkOTPHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -37075,7 +37075,7 @@ func newWebAppAuthflowV2VerifyLoginLinkOTPHandler(p *deps.RequestProvider) http. SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: handle, AppID: appID, @@ -37085,7 +37085,7 @@ func newWebAppAuthflowV2VerifyLoginLinkOTPHandler(p *deps.RequestProvider) http. siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -38068,7 +38068,7 @@ func newWebAppEnterRecoveryCodeHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -38087,7 +38087,7 @@ func newWebAppEnterRecoveryCodeHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -39090,7 +39090,7 @@ func newWebAppSetupRecoveryCodeHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -39109,7 +39109,7 @@ func newWebAppSetupRecoveryCodeHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -40108,7 +40108,7 @@ func newWebAppVerifyIdentityHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -40127,7 +40127,7 @@ func newWebAppVerifyIdentityHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -41130,7 +41130,7 @@ func newWebAppVerifyIdentitySuccessHandler(p *deps.RequestProvider) http.Handler SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -41149,7 +41149,7 @@ func newWebAppVerifyIdentitySuccessHandler(p *deps.RequestProvider) http.Handler siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -42148,7 +42148,7 @@ func newWebAppForgotPasswordHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -42167,7 +42167,7 @@ func newWebAppForgotPasswordHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -43176,7 +43176,7 @@ func newWebAppForgotPasswordSuccessHandler(p *deps.RequestProvider) http.Handler SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -43195,7 +43195,7 @@ func newWebAppForgotPasswordSuccessHandler(p *deps.RequestProvider) http.Handler siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -44194,7 +44194,7 @@ func newWebAppResetPasswordHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -44213,7 +44213,7 @@ func newWebAppResetPasswordHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -45214,7 +45214,7 @@ func newWebAppResetPasswordSuccessHandler(p *deps.RequestProvider) http.Handler SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -45233,7 +45233,7 @@ func newWebAppResetPasswordSuccessHandler(p *deps.RequestProvider) http.Handler siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -46232,7 +46232,7 @@ func newWebAppSettingsHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -46251,7 +46251,7 @@ func newWebAppSettingsHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -47285,7 +47285,7 @@ func newWebAppAuthflowV2SettingsHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -47304,7 +47304,7 @@ func newWebAppAuthflowV2SettingsHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -48333,7 +48333,7 @@ func newWebAppSettingsProfileHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -48352,7 +48352,7 @@ func newWebAppSettingsProfileHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -49362,7 +49362,7 @@ func newWebAppSettingsProfileEditHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -49381,7 +49381,7 @@ func newWebAppSettingsProfileEditHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -50403,7 +50403,7 @@ func newWebAppAuthflowV2SettingsProfileEditHandler(p *deps.RequestProvider) http SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -50422,7 +50422,7 @@ func newWebAppAuthflowV2SettingsProfileEditHandler(p *deps.RequestProvider) http siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -51446,7 +51446,7 @@ func newWebAppSettingsIdentityHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -51465,7 +51465,7 @@ func newWebAppSettingsIdentityHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -52472,7 +52472,7 @@ func newWebAppSettingsBiometricHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -52491,7 +52491,7 @@ func newWebAppSettingsBiometricHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -53491,7 +53491,7 @@ func newWebAppAuthflowV2SettingsBiometricHandler(p *deps.RequestProvider) http.H SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -53510,7 +53510,7 @@ func newWebAppAuthflowV2SettingsBiometricHandler(p *deps.RequestProvider) http.H siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -54550,7 +54550,7 @@ func newWebAppSettingsMFAHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -54569,7 +54569,7 @@ func newWebAppSettingsMFAHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -55580,7 +55580,7 @@ func newWebAppAuthflowV2SettingsMFAHandler(p *deps.RequestProvider) http.Handler SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -55599,7 +55599,7 @@ func newWebAppAuthflowV2SettingsMFAHandler(p *deps.RequestProvider) http.Handler siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -56611,7 +56611,7 @@ func newWebAppAuthflowV2SettingsMFAViewRecoveryCodeHandler(p *deps.RequestProvid SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -56630,7 +56630,7 @@ func newWebAppAuthflowV2SettingsMFAViewRecoveryCodeHandler(p *deps.RequestProvid siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -57658,7 +57658,7 @@ func newWebAppAuthflowV2SettingsMFACreatePasswordHandler(p *deps.RequestProvider SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -57677,7 +57677,7 @@ func newWebAppAuthflowV2SettingsMFACreatePasswordHandler(p *deps.RequestProvider siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -58715,7 +58715,7 @@ func newWebAppAuthflowV2SettingsMFAPasswordHandler(p *deps.RequestProvider) http SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -58734,7 +58734,7 @@ func newWebAppAuthflowV2SettingsMFAPasswordHandler(p *deps.RequestProvider) http siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -59772,7 +59772,7 @@ func newWebAppAuthflowV2SettingsMFAChangePasswordHandler(p *deps.RequestProvider SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -59791,7 +59791,7 @@ func newWebAppAuthflowV2SettingsMFAChangePasswordHandler(p *deps.RequestProvider siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -60818,7 +60818,7 @@ func newWebAppSettingsTOTPHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -60837,7 +60837,7 @@ func newWebAppSettingsTOTPHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -61837,7 +61837,7 @@ func newWebAppAuthflowV2SettingsTOTPHandler(p *deps.RequestProvider) http.Handle SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -61856,7 +61856,7 @@ func newWebAppAuthflowV2SettingsTOTPHandler(p *deps.RequestProvider) http.Handle siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -62906,7 +62906,7 @@ func newWebAppAuthflowV2SettingsMFACreateTOTPHandler(p *deps.RequestProvider) ht SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -62925,7 +62925,7 @@ func newWebAppAuthflowV2SettingsMFACreateTOTPHandler(p *deps.RequestProvider) ht siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -63963,7 +63963,7 @@ func newWebAppAuthflowV2SettingsMFAEnterTOTPHandler(p *deps.RequestProvider) htt SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -63982,7 +63982,7 @@ func newWebAppAuthflowV2SettingsMFAEnterTOTPHandler(p *deps.RequestProvider) htt siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -65021,7 +65021,7 @@ func newWebAppAuthflowV2SettingsOOBOTPHandler(p *deps.RequestProvider) http.Hand SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -65040,7 +65040,7 @@ func newWebAppAuthflowV2SettingsOOBOTPHandler(p *deps.RequestProvider) http.Hand siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -66091,7 +66091,7 @@ func newWebAppAuthflowV2SettingsMFACreateOOBOTPHandler(p *deps.RequestProvider) SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -66110,7 +66110,7 @@ func newWebAppAuthflowV2SettingsMFACreateOOBOTPHandler(p *deps.RequestProvider) siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -67148,7 +67148,7 @@ func newWebAppAuthflowV2SettingsMFAEnterOOBOTPHandler(p *deps.RequestProvider) h SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -67167,7 +67167,7 @@ func newWebAppAuthflowV2SettingsMFAEnterOOBOTPHandler(p *deps.RequestProvider) h siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -68197,7 +68197,7 @@ func newWebAppSettingsPasskeyHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -68216,7 +68216,7 @@ func newWebAppSettingsPasskeyHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -69216,7 +69216,7 @@ func newWebAppAuthflowV2SettingsChangePasskeyHandler(p *deps.RequestProvider) ht SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -69235,7 +69235,7 @@ func newWebAppAuthflowV2SettingsChangePasskeyHandler(p *deps.RequestProvider) ht siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -70294,7 +70294,7 @@ func newWebAppSettingsOOBOTPHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -70313,7 +70313,7 @@ func newWebAppSettingsOOBOTPHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -71313,7 +71313,7 @@ func newWebAppSettingsRecoveryCodeHandler(p *deps.RequestProvider) http.Handler SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -71332,7 +71332,7 @@ func newWebAppSettingsRecoveryCodeHandler(p *deps.RequestProvider) http.Handler siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -72333,7 +72333,7 @@ func newWebAppSettingsSessionsHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -72352,7 +72352,7 @@ func newWebAppSettingsSessionsHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -73377,7 +73377,7 @@ func newWebAppAuthflowV2SettingsSessionsHandler(p *deps.RequestProvider) http.Ha SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -73396,7 +73396,7 @@ func newWebAppAuthflowV2SettingsSessionsHandler(p *deps.RequestProvider) http.Ha siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -74433,7 +74433,7 @@ func newWebAppForceChangePasswordHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -74452,7 +74452,7 @@ func newWebAppForceChangePasswordHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -75457,7 +75457,7 @@ func newWebAppSettingsChangePasswordHandler(p *deps.RequestProvider) http.Handle SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -75476,7 +75476,7 @@ func newWebAppSettingsChangePasswordHandler(p *deps.RequestProvider) http.Handle siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -76476,7 +76476,7 @@ func newWebAppAuthflowV2SettingsChangePasswordHandler(p *deps.RequestProvider) h SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -76495,7 +76495,7 @@ func newWebAppAuthflowV2SettingsChangePasswordHandler(p *deps.RequestProvider) h siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -77522,7 +77522,7 @@ func newWebAppForceChangeSecondaryPasswordHandler(p *deps.RequestProvider) http. SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -77541,7 +77541,7 @@ func newWebAppForceChangeSecondaryPasswordHandler(p *deps.RequestProvider) http. siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -78546,7 +78546,7 @@ func newWebAppSettingsChangeSecondaryPasswordHandler(p *deps.RequestProvider) ht SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -78565,7 +78565,7 @@ func newWebAppSettingsChangeSecondaryPasswordHandler(p *deps.RequestProvider) ht siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -79565,7 +79565,7 @@ func newWebAppSettingsDeleteAccountHandler(p *deps.RequestProvider) http.Handler SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -79584,7 +79584,7 @@ func newWebAppSettingsDeleteAccountHandler(p *deps.RequestProvider) http.Handler siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -80595,7 +80595,7 @@ func newWebAppAuthflowV2SettingsDeleteAccountHandler(p *deps.RequestProvider) ht SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -80614,7 +80614,7 @@ func newWebAppAuthflowV2SettingsDeleteAccountHandler(p *deps.RequestProvider) ht siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -81636,7 +81636,7 @@ func newWebAppSettingsDeleteAccountSuccessHandler(p *deps.RequestProvider) http. SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -81655,7 +81655,7 @@ func newWebAppSettingsDeleteAccountSuccessHandler(p *deps.RequestProvider) http. siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -82658,7 +82658,7 @@ func newWebAppAuthflowV2SettingsDeleteAccountSuccessHandler(p *deps.RequestProvi SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -82677,7 +82677,7 @@ func newWebAppAuthflowV2SettingsDeleteAccountSuccessHandler(p *deps.RequestProvi siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -83680,7 +83680,7 @@ func newWebAppAuthflowV2SettingsAdvancedSettingsHandler(p *deps.RequestProvider) SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -83699,7 +83699,7 @@ func newWebAppAuthflowV2SettingsAdvancedSettingsHandler(p *deps.RequestProvider) siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -84698,7 +84698,7 @@ func newWebAppAccountStatusHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -84717,7 +84717,7 @@ func newWebAppAccountStatusHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -85716,7 +85716,7 @@ func newWebAppLogoutHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -85735,7 +85735,7 @@ func newWebAppLogoutHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -86799,7 +86799,7 @@ func newWebAppReturnHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -86818,7 +86818,7 @@ func newWebAppReturnHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -87817,7 +87817,7 @@ func newWebAppErrorHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -87836,7 +87836,7 @@ func newWebAppErrorHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -88813,7 +88813,7 @@ func newWebAppAuthflowV2ErrorHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: handle, AppID: appID, @@ -88832,7 +88832,7 @@ func newWebAppAuthflowV2ErrorHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -89928,7 +89928,7 @@ func newWebAppCSRFErrorInstructionHandler(p *deps.RequestProvider) http.Handler SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: handle, AppID: appID, @@ -89947,7 +89947,7 @@ func newWebAppCSRFErrorInstructionHandler(p *deps.RequestProvider) http.Handler siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -91065,7 +91065,7 @@ func newWebAppNotFoundHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -91084,7 +91084,7 @@ func newWebAppNotFoundHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -92083,7 +92083,7 @@ func newWebAppAuthflowV2NotFoundHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -92102,7 +92102,7 @@ func newWebAppAuthflowV2NotFoundHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -93119,7 +93119,7 @@ func newWebAppPasskeyCreationOptionsHandler(p *deps.RequestProvider) http.Handle SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: handle, AppID: appID, @@ -93138,7 +93138,7 @@ func newWebAppPasskeyCreationOptionsHandler(p *deps.RequestProvider) http.Handle siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -94082,7 +94082,7 @@ func newWebAppPasskeyRequestOptionsHandler(p *deps.RequestProvider) http.Handler SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: handle, AppID: appID, @@ -94101,7 +94101,7 @@ func newWebAppPasskeyRequestOptionsHandler(p *deps.RequestProvider) http.Handler siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -95044,7 +95044,7 @@ func newWebAppConnectWeb3AccountHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -95063,7 +95063,7 @@ func newWebAppConnectWeb3AccountHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -95879,1025 +95879,6 @@ func newWebAppConnectWeb3AccountHandler(p *deps.RequestProvider) http.Handler { return connectWeb3AccountHandler } -func newWebAppMissingWeb3WalletHandler(p *deps.RequestProvider) http.Handler { - appProvider := p.AppProvider - factory := appProvider.LoggerFactory - handle := appProvider.AppDatabase - appredisHandle := appProvider.Redis - appContext := appProvider.AppContext - config := appContext.Config - appConfig := config.AppConfig - appID := appConfig.ID - serviceLogger := webapp2.NewServiceLogger(factory) - request := p.Request - sessionStoreRedis := &webapp2.SessionStoreRedis{ - AppID: appID, - Redis: appredisHandle, - } - sessionCookieDef := webapp2.NewSessionCookieDef() - signedUpCookieDef := webapp2.NewSignedUpCookieDef() - authenticationConfig := appConfig.Authentication - cookieDef := mfa.NewDeviceTokenCookieDef(authenticationConfig) - errorTokenCookieDef := webapp2.NewErrorTokenCookieDef() - rootProvider := appProvider.RootProvider - environmentConfig := rootProvider.EnvironmentConfig - trustProxy := environmentConfig.TrustProxy - httpConfig := appConfig.HTTP - cookieManager := deps.NewCookieManager(request, trustProxy, httpConfig) - errorService := &webapp2.ErrorService{ - AppID: appID, - Cookie: errorTokenCookieDef, - RedisHandle: appredisHandle, - Cookies: cookieManager, - } - oAuthConfig := appConfig.OAuth - uiConfig := appConfig.UI - httpHost := deps.ProvideHTTPHost(request, trustProxy) - httpProto := deps.ProvideHTTPProto(request, trustProxy) - globalUIImplementation := environmentConfig.UIImplementation - globalUISettingsImplementation := environmentConfig.UISettingsImplementation - uiImplementationService := &web.UIImplementationService{ - UIConfig: uiConfig, - GlobalUIImplementation: globalUIImplementation, - GlobalUISettingsImplementation: globalUISettingsImplementation, - } - endpointsEndpoints := &endpoints.Endpoints{ - HTTPHost: httpHost, - HTTPProto: httpProto, - UIImplementationService: uiImplementationService, - } - uiService := &authenticationinfo.UIService{ - EndpointsProvider: endpointsEndpoints, - } - resolver := &oauthclient.Resolver{ - OAuthConfig: oAuthConfig, - TesterEndpoints: endpointsEndpoints, - } - logger := interaction.NewLogger(factory) - remoteIP := deps.ProvideRemoteIP(request, trustProxy) - sqlExecutor := appdb.NewSQLExecutor(handle) - clockClock := _wireSystemClockValue - featureConfig := config.FeatureConfig - redisLogger := redis.NewLogger(factory) - secretConfig := config.SecretConfig - databaseCredentials := deps.ProvideDatabaseCredentials(secretConfig) - sqlBuilderApp := appdb.NewSQLBuilderApp(databaseCredentials, appID) - store := &redis.Store{ - Redis: appredisHandle, - AppID: appID, - Logger: redisLogger, - SQLBuilder: sqlBuilderApp, - SQLExecutor: sqlExecutor, - Clock: clockClock, - } - userAgentString := deps.ProvideUserAgentString(request) - eventLogger := event.NewLogger(factory) - localizationConfig := appConfig.Localization - sqlBuilder := appdb.NewSQLBuilder(databaseCredentials) - storeImpl := event.NewStoreImpl(sqlBuilder, sqlExecutor) - userStore := &user.Store{ - SQLBuilder: sqlBuilderApp, - SQLExecutor: sqlExecutor, - Clock: clockClock, - AppID: appID, - } - rawQueries := &user.RawQueries{ - Store: userStore, - } - identityConfig := appConfig.Identity - identityFeatureConfig := featureConfig.Identity - serviceStore := &service.Store{ - SQLBuilder: sqlBuilderApp, - SQLExecutor: sqlExecutor, - } - loginidStore := &loginid.Store{ - SQLBuilder: sqlBuilderApp, - SQLExecutor: sqlExecutor, - } - loginIDConfig := identityConfig.LoginID - manager := appContext.Resources - typeCheckerFactory := &loginid.TypeCheckerFactory{ - UIConfig: uiConfig, - LoginIDConfig: loginIDConfig, - Resources: manager, - } - checker := &loginid.Checker{ - Config: loginIDConfig, - TypeCheckerFactory: typeCheckerFactory, - } - normalizerFactory := &loginid.NormalizerFactory{ - Config: loginIDConfig, - } - provider := &loginid.Provider{ - Store: loginidStore, - Config: loginIDConfig, - Checker: checker, - NormalizerFactory: normalizerFactory, - Clock: clockClock, - } - oauthStore := &oauth3.Store{ - SQLBuilder: sqlBuilderApp, - SQLExecutor: sqlExecutor, - IdentityConfig: identityConfig, - } - oauthProvider := &oauth3.Provider{ - Store: oauthStore, - Clock: clockClock, - IdentityConfig: identityConfig, - } - anonymousStore := &anonymous.Store{ - SQLBuilder: sqlBuilderApp, - SQLExecutor: sqlExecutor, - } - anonymousProvider := &anonymous.Provider{ - Store: anonymousStore, - Clock: clockClock, - } - biometricStore := &biometric.Store{ - SQLBuilder: sqlBuilderApp, - SQLExecutor: sqlExecutor, - } - biometricProvider := &biometric.Provider{ - Store: biometricStore, - Clock: clockClock, - } - passkeyStore := &passkey.Store{ - SQLBuilder: sqlBuilderApp, - SQLExecutor: sqlExecutor, - } - store2 := &passkey2.Store{ - Redis: appredisHandle, - AppID: appID, - } - defaultLanguageTag := deps.ProvideDefaultLanguageTag(config) - supportedLanguageTags := deps.ProvideSupportedLanguageTags(config) - templateResolver := &template.Resolver{ - Resources: manager, - DefaultLanguageTag: defaultLanguageTag, - SupportedLanguageTags: supportedLanguageTags, - } - engine := &template.Engine{ - Resolver: templateResolver, - } - httpOrigin := httputil.MakeHTTPOrigin(httpProto, httpHost) - webAppCDNHost := environmentConfig.WebAppCDNHost - globalEmbeddedResourceManager := rootProvider.EmbeddedResources - staticAssetResolver := &web.StaticAssetResolver{ - Localization: localizationConfig, - HTTPOrigin: httpOrigin, - HTTPProto: httpProto, - WebAppCDNHost: webAppCDNHost, - Resources: manager, - EmbeddedResources: globalEmbeddedResourceManager, - } - translationService := &translation.Service{ - TemplateEngine: engine, - StaticAssets: staticAssetResolver, - } - configService := &passkey2.ConfigService{ - Request: request, - TrustProxy: trustProxy, - TranslationService: translationService, - } - passkeyService := &passkey2.Service{ - Store: store2, - ConfigService: configService, - } - passkeyProvider := &passkey.Provider{ - Store: passkeyStore, - Clock: clockClock, - Passkey: passkeyService, - } - siweStore := &siwe.Store{ - SQLBuilder: sqlBuilderApp, - SQLExecutor: sqlExecutor, - } - web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } - siweProvider := &siwe.Provider{ - Store: siweStore, - Clock: clockClock, - SIWE: siweService, - } - ldapStore := &ldap.Store{ - SQLBuilder: sqlBuilderApp, - SQLExecutor: sqlExecutor, - } - normalizer := &stdattrs.Normalizer{ - LoginIDNormalizerFactory: normalizerFactory, - } - ldapProvider := &ldap.Provider{ - Store: ldapStore, - Clock: clockClock, - StandardAttributesNormalizer: normalizer, - } - serviceService := &service.Service{ - Authentication: authenticationConfig, - Identity: identityConfig, - IdentityFeatureConfig: identityFeatureConfig, - Store: serviceStore, - LoginID: provider, - OAuth: oauthProvider, - Anonymous: anonymousProvider, - Biometric: biometricProvider, - Passkey: passkeyProvider, - SIWE: siweProvider, - LDAP: ldapProvider, - } - store3 := &service2.Store{ - SQLBuilder: sqlBuilderApp, - SQLExecutor: sqlExecutor, - } - passwordStore := &password.Store{ - SQLBuilder: sqlBuilderApp, - SQLExecutor: sqlExecutor, - } - authenticatorConfig := appConfig.Authenticator - authenticatorPasswordConfig := authenticatorConfig.Password - passwordLogger := password.NewLogger(factory) - historyStore := &password.HistoryStore{ - Clock: clockClock, - SQLBuilder: sqlBuilderApp, - SQLExecutor: sqlExecutor, - } - authenticatorFeatureConfig := featureConfig.Authenticator - passwordChecker := password.ProvideChecker(authenticatorPasswordConfig, authenticatorFeatureConfig, historyStore) - expiry := password.ProvideExpiry(authenticatorPasswordConfig, clockClock) - housekeeperLogger := password.NewHousekeeperLogger(factory) - housekeeper := &password.Housekeeper{ - Store: historyStore, - Logger: housekeeperLogger, - Config: authenticatorPasswordConfig, - } - passwordProvider := &password.Provider{ - Store: passwordStore, - Config: authenticatorPasswordConfig, - Clock: clockClock, - Logger: passwordLogger, - PasswordHistory: historyStore, - PasswordChecker: passwordChecker, - Expiry: expiry, - Housekeeper: housekeeper, - } - store4 := &passkey3.Store{ - SQLBuilder: sqlBuilderApp, - SQLExecutor: sqlExecutor, - } - provider2 := &passkey3.Provider{ - Store: store4, - Clock: clockClock, - Passkey: passkeyService, - } - totpStore := &totp.Store{ - SQLBuilder: sqlBuilderApp, - SQLExecutor: sqlExecutor, - } - authenticatorTOTPConfig := authenticatorConfig.TOTP - totpProvider := &totp.Provider{ - Store: totpStore, - Config: authenticatorTOTPConfig, - Clock: clockClock, - } - oobStore := &oob.Store{ - SQLBuilder: sqlBuilderApp, - SQLExecutor: sqlExecutor, - } - oobProvider := &oob.Provider{ - Store: oobStore, - LoginIDNormalizerFactory: normalizerFactory, - Clock: clockClock, - } - testModeConfig := appConfig.TestMode - testModeFeatureConfig := featureConfig.TestMode - codeStoreRedis := &otp.CodeStoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - lookupStoreRedis := &otp.LookupStoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - attemptTrackerRedis := &otp.AttemptTrackerRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - otpLogger := otp.NewLogger(factory) - otpService := &otp.Service{ - Clock: clockClock, - AppID: appID, - TestModeConfig: testModeConfig, - TestModeFeatureConfig: testModeFeatureConfig, - RemoteIP: remoteIP, - CodeStore: codeStoreRedis, - LookupStore: lookupStoreRedis, - AttemptTracker: attemptTrackerRedis, - Logger: otpLogger, - RateLimiter: limiter, - } - rateLimits := service2.RateLimits{ - IP: remoteIP, - Config: authenticationConfig, - RateLimiter: limiter, - } - authenticationLockoutConfig := authenticationConfig.Lockout - lockoutLogger := lockout.NewLogger(factory) - lockoutStorageRedis := &lockout.StorageRedis{ - AppID: appID, - Redis: appredisHandle, - } - lockoutService := &lockout.Service{ - Logger: lockoutLogger, - Storage: lockoutStorageRedis, - } - serviceLockout := service2.Lockout{ - Config: authenticationLockoutConfig, - RemoteIP: remoteIP, - Provider: lockoutService, - } - service3 := &service2.Service{ - Store: store3, - Config: appConfig, - Password: passwordProvider, - Passkey: provider2, - TOTP: totpProvider, - OOBOTP: oobProvider, - OTPCodeService: otpService, - RateLimits: rateLimits, - Lockout: serviceLockout, - } - verificationConfig := appConfig.Verification - userProfileConfig := appConfig.UserProfile - storePQ := &verification.StorePQ{ - SQLBuilder: sqlBuilderApp, - SQLExecutor: sqlExecutor, - } - verificationService := &verification.Service{ - Config: verificationConfig, - UserProfileConfig: userProfileConfig, - Clock: clockClock, - ClaimStore: storePQ, - } - imagesCDNHost := environmentConfig.ImagesCDNHost - pictureTransformer := &stdattrs2.PictureTransformer{ - HTTPProto: httpProto, - HTTPHost: httpHost, - ImagesCDNHost: imagesCDNHost, - } - serviceNoEvent := &stdattrs2.ServiceNoEvent{ - UserProfileConfig: userProfileConfig, - Identities: serviceService, - UserQueries: rawQueries, - UserStore: userStore, - ClaimStore: storePQ, - Transformer: pictureTransformer, - } - customattrsServiceNoEvent := &customattrs.ServiceNoEvent{ - Config: userProfileConfig, - UserQueries: rawQueries, - UserStore: userStore, - } - rolesgroupsStore := &rolesgroups.Store{ - SQLBuilder: sqlBuilderApp, - SQLExecutor: sqlExecutor, - Clock: clockClock, - } - queries := &rolesgroups.Queries{ - Store: rolesgroupsStore, - } - userQueries := &user.Queries{ - RawQueries: rawQueries, - Store: userStore, - Identities: serviceService, - Authenticators: service3, - Verification: verificationService, - StandardAttributes: serviceNoEvent, - CustomAttributes: customattrsServiceNoEvent, - RolesAndGroups: queries, - } - resolverImpl := &event.ResolverImpl{ - Users: userQueries, - } - hookLogger := hook.NewLogger(factory) - hookConfig := appConfig.Hook - webHookLogger := hook.NewWebHookLogger(factory) - webhookKeyMaterials := deps.ProvideWebhookKeyMaterials(secretConfig) - webHookImpl := hook.WebHookImpl{ - Logger: webHookLogger, - Secret: webhookKeyMaterials, - } - syncHTTPClient := hook.NewSyncHTTPClient(hookConfig) - asyncHTTPClient := hook.NewAsyncHTTPClient() - eventWebHookImpl := &hook.EventWebHookImpl{ - WebHookImpl: webHookImpl, - SyncHTTP: syncHTTPClient, - AsyncHTTP: asyncHTTPClient, - } - denoHookLogger := hook.NewDenoHookLogger(factory) - denoHook := hook.DenoHook{ - ResourceManager: manager, - Logger: denoHookLogger, - } - denoEndpoint := environmentConfig.DenoEndpoint - syncDenoClient := hook.NewSyncDenoClient(denoEndpoint, hookConfig, hookLogger) - asyncDenoClient := hook.NewAsyncDenoClient(denoEndpoint, hookLogger) - eventDenoHookImpl := &hook.EventDenoHookImpl{ - DenoHook: denoHook, - SyncDenoClient: syncDenoClient, - AsyncDenoClient: asyncDenoClient, - } - commands := &rolesgroups.Commands{ - Store: rolesgroupsStore, - } - sink := &hook.Sink{ - Logger: hookLogger, - Config: hookConfig, - Clock: clockClock, - EventWebHook: eventWebHookImpl, - EventDenoHook: eventDenoHookImpl, - StandardAttributes: serviceNoEvent, - CustomAttributes: customattrsServiceNoEvent, - RolesAndGroups: commands, - } - auditLogger := audit.NewLogger(factory) - writeHandle := appProvider.AuditWriteDatabase - auditDatabaseCredentials := deps.ProvideAuditDatabaseCredentials(secretConfig) - auditdbSQLBuilderApp := auditdb.NewSQLBuilderApp(auditDatabaseCredentials, appID) - writeSQLExecutor := auditdb.NewWriteSQLExecutor(writeHandle) - writeStore := &audit.WriteStore{ - SQLBuilder: auditdbSQLBuilderApp, - SQLExecutor: writeSQLExecutor, - } - auditSink := &audit.Sink{ - Logger: auditLogger, - Database: writeHandle, - Store: writeStore, - } - sinkLogger := reindex.NewSinkLogger(factory) - searchConfig := appConfig.Search - reindexerLogger := reindex.NewReindexerLogger(factory) - userReindexProducer := redisqueue.NewUserReindexProducer(appredisHandle, clockClock) - sourceProvider := &reindex.SourceProvider{ - AppID: appID, - Users: userQueries, - UserStore: userStore, - IdentityService: serviceService, - RolesGroups: rolesgroupsStore, - } - elasticsearchServiceLogger := elasticsearch.NewElasticsearchServiceLogger(factory) - elasticsearchCredentials := deps.ProvideElasticsearchCredentials(secretConfig) - client := elasticsearch.NewClient(elasticsearchCredentials) - elasticsearchService := &elasticsearch.Service{ - Clock: clockClock, - Database: handle, - Logger: elasticsearchServiceLogger, - AppID: appID, - Client: client, - Users: userQueries, - UserStore: userStore, - IdentityService: serviceService, - RolesGroups: rolesgroupsStore, - } - configAppID := &appConfig.ID - searchDatabaseCredentials := deps.ProvideSearchDatabaseCredentials(secretConfig) - searchdbSQLBuilder := searchdb.NewSQLBuilder(searchDatabaseCredentials) - searchdbHandle := appProvider.SearchDatabase - searchdbSQLExecutor := searchdb.NewSQLExecutor(searchdbHandle) - pgsearchStore := pgsearch.NewStore(appID, searchdbSQLBuilder, searchdbSQLExecutor) - pgsearchService := &pgsearch.Service{ - AppID: configAppID, - Store: pgsearchStore, - Database: searchdbHandle, - } - reindexer := &reindex.Reindexer{ - AppID: appID, - SearchConfig: searchConfig, - Clock: clockClock, - Database: handle, - Logger: reindexerLogger, - UserStore: userStore, - Producer: userReindexProducer, - SourceProvider: sourceProvider, - ElasticsearchReindexer: elasticsearchService, - PostgresqlReindexer: pgsearchService, - } - reindexSink := &reindex.Sink{ - Logger: sinkLogger, - Reindexer: reindexer, - Database: handle, - } - eventService := event.NewService(appID, remoteIP, userAgentString, eventLogger, handle, clockClock, localizationConfig, storeImpl, resolverImpl, sink, auditSink, reindexSink) - storeDeviceTokenRedis := &mfa.StoreDeviceTokenRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - storeRecoveryCodePQ := &mfa.StoreRecoveryCodePQ{ - SQLBuilder: sqlBuilderApp, - SQLExecutor: sqlExecutor, - } - mfaLockout := mfa.Lockout{ - Config: authenticationLockoutConfig, - RemoteIP: remoteIP, - Provider: lockoutService, - } - mfaService := &mfa.Service{ - IP: remoteIP, - DeviceTokens: storeDeviceTokenRedis, - RecoveryCodes: storeRecoveryCodePQ, - Clock: clockClock, - Config: authenticationConfig, - RateLimiter: limiter, - Lockout: mfaLockout, - } - messagingLogger := messaging.NewLogger(factory) - usageLogger := usage.NewLogger(factory) - usageLimiter := &usage.Limiter{ - Logger: usageLogger, - Clock: clockClock, - AppID: appID, - Redis: appredisHandle, - } - messagingConfig := appConfig.Messaging - messagingRateLimitsConfig := messagingConfig.RateLimits - messagingFeatureConfig := featureConfig.Messaging - rateLimitsEnvironmentConfig := &environmentConfig.RateLimits - limits := messaging.Limits{ - Logger: messagingLogger, - RateLimiter: limiter, - UsageLimiter: usageLimiter, - RemoteIP: remoteIP, - Config: messagingRateLimitsConfig, - FeatureConfig: messagingFeatureConfig, - EnvConfig: rateLimitsEnvironmentConfig, - } - mailLogger := mail.NewLogger(factory) - smtpServerCredentials := deps.ProvideSMTPServerCredentials(secretConfig) - dialer := mail.NewGomailDialer(smtpServerCredentials) - sender := &mail.Sender{ - Logger: mailLogger, - GomailDialer: dialer, - } - smsLogger := sms.NewLogger(factory) - smsProvider := messagingConfig.SMSProvider - smsGatewayConfig := messagingConfig.SMSGateway - nexmoCredentials := deps.ProvideNexmoCredentials(secretConfig) - twilioCredentials := deps.ProvideTwilioCredentials(secretConfig) - customSMSProviderConfig := deps.ProvideCustomSMSProviderConfig(secretConfig) - smsGatewayEnvironmentConfig := &environmentConfig.SMSGatewayConfig - smsGatewayEnvironmentDefaultConfig := &smsGatewayEnvironmentConfig.Default - smsGatewayEnvironmentDefaultProvider := smsGatewayEnvironmentDefaultConfig.Provider - smsGatewayEnvironmentDefaultUseConfigFrom := smsGatewayEnvironmentDefaultConfig.UseConfigFrom - smsGatewayEnvironmentNexmoCredentials := smsGatewayEnvironmentConfig.Nexmo - smsGatewayEnvironmentTwilioCredentials := smsGatewayEnvironmentConfig.Twilio - smsGatewayEnvironmentCustomSMSProviderConfig := smsGatewayEnvironmentConfig.Custom - smsHookTimeout := custom.NewSMSHookTimeout(customSMSProviderConfig) - hookDenoClient := custom.NewHookDenoClient(denoEndpoint, hookLogger, smsHookTimeout) - smsDenoHook := custom.SMSDenoHook{ - DenoHook: denoHook, - Client: hookDenoClient, - } - hookWebHookImpl := &hook.WebHookImpl{ - Logger: webHookLogger, - Secret: webhookKeyMaterials, - } - hookHTTPClient := custom.NewHookHTTPClient(smsHookTimeout) - smsWebHook := custom.SMSWebHook{ - WebHook: hookWebHookImpl, - Client: hookHTTPClient, - } - clientResolver := &sms.ClientResolver{ - AuthgearYAMLSMSProvider: smsProvider, - AuthgearYAMLSMSGateway: smsGatewayConfig, - AuthgearSecretsYAMLNexmoCredentials: nexmoCredentials, - AuthgearSecretsYAMLTwilioCredentials: twilioCredentials, - AuthgearSecretsYAMLCustomSMSProviderConfig: customSMSProviderConfig, - EnvironmentDefaultProvider: smsGatewayEnvironmentDefaultProvider, - EnvironmentDefaultUseConfigFrom: smsGatewayEnvironmentDefaultUseConfigFrom, - EnvironmentNexmoCredentials: smsGatewayEnvironmentNexmoCredentials, - EnvironmentTwilioCredentials: smsGatewayEnvironmentTwilioCredentials, - EnvironmentCustomSMSProviderConfig: smsGatewayEnvironmentCustomSMSProviderConfig, - SMSDenoHook: smsDenoHook, - SMSWebHook: smsWebHook, - } - smsClient := &sms.Client{ - Logger: smsLogger, - ClientResolver: clientResolver, - } - whatsappServiceLogger := whatsapp.NewServiceLogger(factory) - whatsappConfig := messagingConfig.Whatsapp - whatsappOnPremisesCredentials := deps.ProvideWhatsappOnPremisesCredentials(secretConfig) - tokenStore := &whatsapp.TokenStore{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - httpClient := whatsapp.NewHTTPClient() - onPremisesClient := whatsapp.NewWhatsappOnPremisesClient(whatsappConfig, whatsappOnPremisesCredentials, tokenStore, httpClient) - whatsappService := &whatsapp.Service{ - Logger: whatsappServiceLogger, - WhatsappConfig: whatsappConfig, - LocalizationConfig: localizationConfig, - OnPremisesClient: onPremisesClient, - } - devMode := environmentConfig.DevMode - featureTestModeEmailSuppressed := deps.ProvideTestModeEmailSuppressed(testModeFeatureConfig) - testModeEmailConfig := testModeConfig.Email - featureTestModeSMSSuppressed := deps.ProvideTestModeSMSSuppressed(testModeFeatureConfig) - testModeSMSConfig := testModeConfig.SMS - featureTestModeWhatsappSuppressed := deps.ProvideTestModeWhatsappSuppressed(testModeFeatureConfig) - testModeWhatsappConfig := testModeConfig.Whatsapp - messagingSender := &messaging.Sender{ - Logger: messagingLogger, - Limits: limits, - Events: eventService, - MailSender: sender, - SMSSender: smsClient, - WhatsappSender: whatsappService, - Database: handle, - DevMode: devMode, - MessagingFeatureConfig: messagingFeatureConfig, - FeatureTestModeEmailSuppressed: featureTestModeEmailSuppressed, - TestModeEmailConfig: testModeEmailConfig, - FeatureTestModeSMSSuppressed: featureTestModeSMSSuppressed, - TestModeSMSConfig: testModeSMSConfig, - FeatureTestModeWhatsappSuppressed: featureTestModeWhatsappSuppressed, - TestModeWhatsappConfig: testModeWhatsappConfig, - } - forgotpasswordSender := &forgotpassword.Sender{ - AppConfg: appConfig, - Identities: serviceService, - Sender: messagingSender, - Translation: translationService, - } - rawCommands := &user.RawCommands{ - Store: userStore, - Clock: clockClock, - } - userCommands := &user.Commands{ - RawCommands: rawCommands, - RawQueries: rawQueries, - Events: eventService, - Verification: verificationService, - UserProfileConfig: userProfileConfig, - StandardAttributes: serviceNoEvent, - CustomAttributes: customattrsServiceNoEvent, - RolesAndGroups: queries, - } - stdattrsService := &stdattrs2.Service{ - UserProfileConfig: userProfileConfig, - ServiceNoEvent: serviceNoEvent, - Identities: serviceService, - UserQueries: rawQueries, - UserStore: userStore, - Events: eventService, - } - authorizationStore := &pq.AuthorizationStore{ - SQLBuilder: sqlBuilderApp, - SQLExecutor: sqlExecutor, - } - storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - Logger: storeRedisLogger, - } - sessionConfig := appConfig.Session - cookieDef2 := session.NewSessionCookieDef(sessionConfig) - idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, - Config: sessionConfig, - Cookies: cookieManager, - CookieDef: cookieDef2, - } - eventStoreRedis := &access.EventStoreRedis{ - Redis: appredisHandle, - AppID: appID, - } - eventProvider := &access.EventProvider{ - Store: eventStoreRedis, - } - analyticredisHandle := appProvider.AnalyticRedis - meterStoreRedisLogger := meter.NewStoreRedisLogger(factory) - writeStoreRedis := &meter.WriteStoreRedis{ - Redis: analyticredisHandle, - AppID: appID, - Clock: clockClock, - Logger: meterStoreRedisLogger, - } - meterService := &meter.Service{ - Counter: writeStoreRedis, - } - idpsessionRand := _wireRandValue - idpsessionProvider := &idpsession.Provider{ - RemoteIP: remoteIP, - UserAgentString: userAgentString, - AppID: appID, - Redis: appredisHandle, - Store: idpsessionStoreRedis, - AccessEvents: eventProvider, - MeterService: meterService, - TrustProxy: trustProxy, - Config: sessionConfig, - Clock: clockClock, - Random: idpsessionRand, - } - offlineGrantService := oauth2.OfflineGrantService{ - OAuthConfig: oAuthConfig, - Clock: clockClock, - IDPSessions: idpsessionProvider, - ClientResolver: resolver, - AccessEvents: eventProvider, - MeterService: meterService, - OfflineGrants: store, - } - sessionManager := &oauth2.SessionManager{ - Store: store, - Config: oAuthConfig, - Service: offlineGrantService, - } - accountDeletionConfig := appConfig.AccountDeletion - accountAnonymizationConfig := appConfig.AccountAnonymization - maxTrials := _wireMaxTrialsValue - passwordRand := password.NewRandSource() - generator := &password.Generator{ - MaxTrials: maxTrials, - Checker: passwordChecker, - Rand: passwordRand, - PasswordConfig: authenticatorPasswordConfig, - } - coordinator := &facade.Coordinator{ - Events: eventService, - Identities: serviceService, - Authenticators: service3, - Verification: verificationService, - MFA: mfaService, - SendPassword: forgotpasswordSender, - UserCommands: userCommands, - UserQueries: userQueries, - RolesGroupsCommands: commands, - StdAttrsService: stdattrsService, - PasswordHistory: historyStore, - OAuth: authorizationStore, - IDPSessions: idpsessionManager, - OAuthSessions: sessionManager, - IdentityConfig: identityConfig, - AccountDeletionConfig: accountDeletionConfig, - AccountAnonymizationConfig: accountAnonymizationConfig, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - PasswordGenerator: generator, - } - identityFacade := facade.IdentityFacade{ - Coordinator: coordinator, - } - authenticatorFacade := facade.AuthenticatorFacade{ - Coordinator: coordinator, - } - anonymousStoreRedis := &anonymous.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - messageSender := &otp.MessageSender{ - AppID: appID, - Translation: translationService, - Endpoints: endpointsEndpoints, - Sender: messagingSender, - } - oAuthSSOProviderCredentials := deps.ProvideOAuthSSOProviderCredentials(secretConfig) - oAuthHTTPClient := sso.ProvideOAuthHTTPClient(environmentConfig) - simpleStoreRedisFactory := &sso.SimpleStoreRedisFactory{ - AppID: appID, - Redis: appredisHandle, - } - oAuthProviderFactory := &sso.OAuthProviderFactory{ - IdentityConfig: identityConfig, - Credentials: oAuthSSOProviderCredentials, - Clock: clockClock, - StandardAttributesNormalizer: normalizer, - HTTPClient: oAuthHTTPClient, - SimpleStoreRedisFactory: simpleStoreRedisFactory, - } - webappoauthStore := &webappoauth.Store{ - Redis: appredisHandle, - AppID: appID, - } - mfaFacade := &facade.MFAFacade{ - Coordinator: coordinator, - } - forgotpasswordLogger := forgotpassword.NewLogger(factory) - sender2 := forgotpassword.Sender{ - AppConfg: appConfig, - Identities: serviceService, - Sender: messagingSender, - Translation: translationService, - } - forgotpasswordService := &forgotpassword.Service{ - Logger: forgotpasswordLogger, - Config: appConfig, - FeatureConfig: featureConfig, - Identities: serviceService, - Authenticators: authenticatorFacade, - OTPCodes: otpService, - OTPSender: messageSender, - PasswordSender: sender2, - Events: eventService, - } - responseWriter := p.ResponseWriter - nonceService := &nonce.Service{ - Cookies: cookieManager, - Request: request, - ResponseWriter: responseWriter, - } - challengeProvider := &challenge.Provider{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - userProvider := &user.Provider{ - Commands: userCommands, - Queries: userQueries, - } - authenticationinfoStoreRedis := &authenticationinfo.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - } - manager2 := &session.Manager{ - IDPSessions: idpsessionManager, - AccessTokenSessions: sessionManager, - Events: eventService, - } - oauthsessionStoreRedis := &oauthsession.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - } - interactionContext := &interaction.Context{ - Request: request, - RemoteIP: remoteIP, - Database: sqlExecutor, - Clock: clockClock, - Config: appConfig, - FeatureConfig: featureConfig, - OAuthClientResolver: resolver, - OfflineGrants: store, - Identities: identityFacade, - Authenticators: authenticatorFacade, - AnonymousIdentities: anonymousProvider, - AnonymousUserPromotionCodeStore: anonymousStoreRedis, - BiometricIdentities: biometricProvider, - OTPCodeService: otpService, - OTPSender: messageSender, - OAuthProviderFactory: oAuthProviderFactory, - OAuthRedirectURIBuilder: endpointsEndpoints, - OAuthStateStore: webappoauthStore, - MFA: mfaFacade, - ForgotPassword: forgotpasswordService, - ResetPassword: forgotpasswordService, - Passkey: passkeyService, - Verification: verificationService, - RateLimiter: limiter, - PasswordGenerator: generator, - Nonces: nonceService, - Challenges: challengeProvider, - Users: userProvider, - StdAttrsService: stdattrsService, - Events: eventService, - CookieManager: cookieManager, - AuthenticationInfoService: authenticationinfoStoreRedis, - Sessions: idpsessionProvider, - SessionManager: manager2, - SessionCookie: cookieDef2, - OAuthSessions: oauthsessionStoreRedis, - MFADeviceTokenCookie: cookieDef, - } - interactionStoreRedis := &interaction.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - } - interactionService := &interaction.Service{ - Logger: logger, - Context: interactionContext, - Store: interactionStoreRedis, - } - webappService2 := &webapp2.Service2{ - Logger: serviceLogger, - Request: request, - Sessions: sessionStoreRedis, - SessionCookie: sessionCookieDef, - SignedUpCookie: signedUpCookieDef, - MFADeviceTokenCookie: cookieDef, - ErrorService: errorService, - Cookies: cookieManager, - OAuthConfig: oAuthConfig, - UIConfig: uiConfig, - TrustProxy: trustProxy, - UIInfoResolver: uiService, - OAuthClientResolver: resolver, - Graph: interactionService, - } - uiFeatureConfig := featureConfig.UI - forgotPasswordConfig := appConfig.ForgotPassword - googleTagManagerConfig := appConfig.GoogleTagManager - botProtectionConfig := appConfig.BotProtection - flashMessage := &httputil.FlashMessage{ - Cookies: cookieManager, - } - authUISentryDSN := environmentConfig.AuthUISentryDSN - authUIWindowMessageAllowedOrigins := environmentConfig.AuthUIWindowMessageAllowedOrigins - baseLogger := viewmodels.NewBaseLogger(factory) - baseViewModeler := &viewmodels.BaseViewModeler{ - TrustProxy: trustProxy, - OAuth: oAuthConfig, - AuthUI: uiConfig, - AuthUIFeatureConfig: uiFeatureConfig, - StaticAssets: staticAssetResolver, - ForgotPassword: forgotPasswordConfig, - Authentication: authenticationConfig, - GoogleTagManager: googleTagManagerConfig, - BotProtection: botProtectionConfig, - ErrorService: errorService, - Translations: translationService, - Clock: clockClock, - FlashMessage: flashMessage, - DefaultLanguageTag: defaultLanguageTag, - SupportedLanguageTags: supportedLanguageTags, - AuthUISentryDSN: authUISentryDSN, - AuthUIWindowMessageAllowedOrigins: authUIWindowMessageAllowedOrigins, - OAuthClientResolver: resolver, - Logger: baseLogger, - } - responseRenderer := &webapp.ResponseRenderer{ - TemplateEngine: engine, - } - publisher := webapp.NewPublisher(appID, appredisHandle) - authflowNavigator := &webapp2.AuthflowNavigator{ - Endpoints: endpointsEndpoints, - OAuthStateStore: webappoauthStore, - } - authflowV2Navigator := &authflowv2.AuthflowV2Navigator{ - Endpoints: endpointsEndpoints, - OAuthStateStore: webappoauthStore, - } - errorRenderer := &webapp.ErrorRenderer{ - ErrorService: errorService, - UIImplementationService: uiImplementationService, - AuthflowV1Navigator: authflowNavigator, - AuthflowV2Navigator: authflowV2Navigator, - } - controllerDeps := webapp.ControllerDeps{ - Database: handle, - RedisHandle: appredisHandle, - AppID: appID, - Page: webappService2, - BaseViewModel: baseViewModeler, - Renderer: responseRenderer, - Publisher: publisher, - Clock: clockClock, - TesterEndpointsProvider: endpointsEndpoints, - ErrorRenderer: errorRenderer, - TrustProxy: trustProxy, - } - controllerFactory := webapp.ControllerFactory{ - LoggerFactory: factory, - ControllerDeps: controllerDeps, - } - missingWeb3WalletHandler := &webapp.MissingWeb3WalletHandler{ - ControllerFactory: controllerFactory, - BaseViewModel: baseViewModeler, - Renderer: responseRenderer, - AuthenticationConfig: authenticationConfig, - } - return missingWeb3WalletHandler -} - func newWebAppFeatureDisabledHandler(p *deps.RequestProvider) http.Handler { appProvider := p.AppProvider factory := appProvider.LoggerFactory @@ -97091,7 +96072,7 @@ func newWebAppFeatureDisabledHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -97110,7 +96091,7 @@ func newWebAppFeatureDisabledHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -98109,7 +97090,7 @@ func newWebAppTesterHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -98128,7 +97109,7 @@ func newWebAppTesterHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -99253,7 +98234,7 @@ func newAPIWorkflowNewHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -99272,7 +98253,7 @@ func newAPIWorkflowNewHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -100213,7 +99194,7 @@ func newAPIWorkflowGetHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -100232,7 +99213,7 @@ func newAPIWorkflowGetHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -101135,7 +100116,7 @@ func newAPIWorkflowInputHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -101154,7 +100135,7 @@ func newAPIWorkflowInputHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -102093,7 +101074,7 @@ func newAPIWorkflowV2Handler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -102112,7 +101093,7 @@ func newAPIWorkflowV2Handler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -103055,7 +102036,7 @@ func newAPIAuthenticationFlowV1CreateHandler(p *deps.RequestProvider) http.Handl SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: handle, AppID: appID, @@ -103074,7 +102055,7 @@ func newAPIAuthenticationFlowV1CreateHandler(p *deps.RequestProvider) http.Handl siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -104091,7 +103072,7 @@ func newAPIAuthenticationFlowV1InputHandler(p *deps.RequestProvider) http.Handle SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: handle, AppID: appID, @@ -104110,7 +103091,7 @@ func newAPIAuthenticationFlowV1InputHandler(p *deps.RequestProvider) http.Handle siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -105093,7 +104074,7 @@ func newAPIAuthenticationFlowV1GetHandler(p *deps.RequestProvider) http.Handler SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: handle, AppID: appID, @@ -105112,7 +104093,7 @@ func newAPIAuthenticationFlowV1GetHandler(p *deps.RequestProvider) http.Handler siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -106130,7 +105111,7 @@ func newAPIAccountManagementV1IdentificationHandler(p *deps.RequestProvider) htt SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -106149,7 +105130,7 @@ func newAPIAccountManagementV1IdentificationHandler(p *deps.RequestProvider) htt siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -106981,7 +105962,7 @@ func newAPIAccountManagementV1IdentificationOAuthHandler(p *deps.RequestProvider SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -107000,7 +105981,7 @@ func newAPIAccountManagementV1IdentificationOAuthHandler(p *deps.RequestProvider siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -107849,7 +106830,7 @@ func newWebAppAuthflowLoginHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: handle, AppID: appID, @@ -107868,7 +106849,7 @@ func newWebAppAuthflowLoginHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -108977,7 +107958,7 @@ func newWebAppAuthflowV2LoginHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: handle, AppID: appID, @@ -108996,7 +107977,7 @@ func newWebAppAuthflowV2LoginHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -110117,7 +109098,7 @@ func newWebAppAuthflowSignupHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: handle, AppID: appID, @@ -110136,7 +109117,7 @@ func newWebAppAuthflowSignupHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -111244,7 +110225,7 @@ func newWebAppAuthflowV2SignupHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: handle, AppID: appID, @@ -111263,7 +110244,7 @@ func newWebAppAuthflowV2SignupHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -112376,7 +111357,7 @@ func newWebAppAuthflowPromoteHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: handle, AppID: appID, @@ -112395,7 +111376,7 @@ func newWebAppAuthflowPromoteHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -113498,7 +112479,7 @@ func newWebAppAuthflowV2PromoteHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: handle, AppID: appID, @@ -113517,7 +112498,7 @@ func newWebAppAuthflowV2PromoteHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -114620,7 +113601,7 @@ func newWebAppAuthflowEnterPasswordHandler(p *deps.RequestProvider) http.Handler SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: handle, AppID: appID, @@ -114639,7 +113620,7 @@ func newWebAppAuthflowEnterPasswordHandler(p *deps.RequestProvider) http.Handler siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -115735,7 +114716,7 @@ func newWebAppAuthflowV2EnterPasswordHandler(p *deps.RequestProvider) http.Handl SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: handle, AppID: appID, @@ -115754,7 +114735,7 @@ func newWebAppAuthflowV2EnterPasswordHandler(p *deps.RequestProvider) http.Handl siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -116854,7 +115835,7 @@ func newWebAppAuthflowEnterOOBOTPHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: handle, AppID: appID, @@ -116873,7 +115854,7 @@ func newWebAppAuthflowEnterOOBOTPHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -117971,7 +116952,7 @@ func newWebAppAuthflowV2EnterOOBOTPHandler(p *deps.RequestProvider) http.Handler SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: handle, AppID: appID, @@ -117990,7 +116971,7 @@ func newWebAppAuthflowV2EnterOOBOTPHandler(p *deps.RequestProvider) http.Handler siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -119094,7 +118075,7 @@ func newWebAppAuthflowCreatePasswordHandler(p *deps.RequestProvider) http.Handle SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: handle, AppID: appID, @@ -119113,7 +118094,7 @@ func newWebAppAuthflowCreatePasswordHandler(p *deps.RequestProvider) http.Handle siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -120209,7 +119190,7 @@ func newWebAppAuthflowV2CreatePasswordHandler(p *deps.RequestProvider) http.Hand SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: handle, AppID: appID, @@ -120228,7 +119209,7 @@ func newWebAppAuthflowV2CreatePasswordHandler(p *deps.RequestProvider) http.Hand siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -121330,7 +120311,7 @@ func newWebAppAuthflowEnterTOTPHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: handle, AppID: appID, @@ -121349,7 +120330,7 @@ func newWebAppAuthflowEnterTOTPHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -122445,7 +121426,7 @@ func newWebAppAuthflowV2EnterTOTPHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: handle, AppID: appID, @@ -122464,7 +121445,7 @@ func newWebAppAuthflowV2EnterTOTPHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -123564,7 +122545,7 @@ func newWebAppAuthflowSetupTOTPHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: handle, AppID: appID, @@ -123583,7 +122564,7 @@ func newWebAppAuthflowSetupTOTPHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -124679,7 +123660,7 @@ func newWebAppAuthflowV2SetupTOTPHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: handle, AppID: appID, @@ -124698,7 +123679,7 @@ func newWebAppAuthflowV2SetupTOTPHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -125794,7 +124775,7 @@ func newWebAppAuthflowViewRecoveryCodeHandler(p *deps.RequestProvider) http.Hand SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: handle, AppID: appID, @@ -125813,7 +124794,7 @@ func newWebAppAuthflowViewRecoveryCodeHandler(p *deps.RequestProvider) http.Hand siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -126909,7 +125890,7 @@ func newWebAppAuthflowV2ViewRecoveryCodeHandler(p *deps.RequestProvider) http.Ha SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: handle, AppID: appID, @@ -126928,7 +125909,7 @@ func newWebAppAuthflowV2ViewRecoveryCodeHandler(p *deps.RequestProvider) http.Ha siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -128024,7 +127005,7 @@ func newWebAppAuthflowWhatsappOTPHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: handle, AppID: appID, @@ -128043,7 +127024,7 @@ func newWebAppAuthflowWhatsappOTPHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -129141,7 +128122,7 @@ func newWebAppAuthflowOOBOTPLinkHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: handle, AppID: appID, @@ -129160,7 +128141,7 @@ func newWebAppAuthflowOOBOTPLinkHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -130258,7 +129239,7 @@ func newWebAppAuthflowV2OOBOTPLinkHandler(p *deps.RequestProvider) http.Handler SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: handle, AppID: appID, @@ -130277,7 +129258,7 @@ func newWebAppAuthflowV2OOBOTPLinkHandler(p *deps.RequestProvider) http.Handler siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -131378,7 +130359,7 @@ func newWebAppAuthflowChangePasswordHandler(p *deps.RequestProvider) http.Handle SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: handle, AppID: appID, @@ -131397,7 +130378,7 @@ func newWebAppAuthflowChangePasswordHandler(p *deps.RequestProvider) http.Handle siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -132498,7 +131479,7 @@ func newWebAppAuthflowV2ChangePasswordHandler(p *deps.RequestProvider) http.Hand SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: handle, AppID: appID, @@ -132517,7 +131498,7 @@ func newWebAppAuthflowV2ChangePasswordHandler(p *deps.RequestProvider) http.Hand siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -133619,7 +132600,7 @@ func newWebAppAuthflowV2ChangePasswordSuccessHandler(p *deps.RequestProvider) ht SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: handle, AppID: appID, @@ -133638,7 +132619,7 @@ func newWebAppAuthflowV2ChangePasswordSuccessHandler(p *deps.RequestProvider) ht siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -134734,7 +133715,7 @@ func newWebAppAuthflowUsePasskeyHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: handle, AppID: appID, @@ -134753,7 +133734,7 @@ func newWebAppAuthflowUsePasskeyHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -135849,7 +134830,7 @@ func newWebAppAuthflowV2UsePasskeyHandler(p *deps.RequestProvider) http.Handler SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: handle, AppID: appID, @@ -135868,7 +134849,7 @@ func newWebAppAuthflowV2UsePasskeyHandler(p *deps.RequestProvider) http.Handler siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -136968,7 +135949,7 @@ func newWebAppAuthflowPromptCreatePasskeyHandler(p *deps.RequestProvider) http.H SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: handle, AppID: appID, @@ -136987,7 +135968,7 @@ func newWebAppAuthflowPromptCreatePasskeyHandler(p *deps.RequestProvider) http.H siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -138083,7 +137064,7 @@ func newWebAppAuthflowV2PromptCreatePasskeyHandler(p *deps.RequestProvider) http SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: handle, AppID: appID, @@ -138102,7 +137083,7 @@ func newWebAppAuthflowV2PromptCreatePasskeyHandler(p *deps.RequestProvider) http siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -139198,7 +138179,7 @@ func newWebAppAuthflowEnterRecoveryCodeHandler(p *deps.RequestProvider) http.Han SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: handle, AppID: appID, @@ -139217,7 +138198,7 @@ func newWebAppAuthflowEnterRecoveryCodeHandler(p *deps.RequestProvider) http.Han siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -140313,7 +139294,7 @@ func newWebAppAuthflowV2EnterRecoveryCodeHandler(p *deps.RequestProvider) http.H SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: handle, AppID: appID, @@ -140332,7 +139313,7 @@ func newWebAppAuthflowV2EnterRecoveryCodeHandler(p *deps.RequestProvider) http.H siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -141428,7 +140409,7 @@ func newWebAppAuthflowSetupOOBOTPHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: handle, AppID: appID, @@ -141447,7 +140428,7 @@ func newWebAppAuthflowSetupOOBOTPHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -142543,7 +141524,7 @@ func newWebAppAuthflowV2SetupOOBOTPHandler(p *deps.RequestProvider) http.Handler SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: handle, AppID: appID, @@ -142562,7 +141543,7 @@ func newWebAppAuthflowV2SetupOOBOTPHandler(p *deps.RequestProvider) http.Handler siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -143658,7 +142639,7 @@ func newWebAppAuthflowTerminateOtherSessionsHandler(p *deps.RequestProvider) htt SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: handle, AppID: appID, @@ -143677,7 +142658,7 @@ func newWebAppAuthflowTerminateOtherSessionsHandler(p *deps.RequestProvider) htt siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -144773,7 +143754,7 @@ func newWebAppAuthflowV2TerminateOtherSessionsHandler(p *deps.RequestProvider) h SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: handle, AppID: appID, @@ -144792,7 +143773,7 @@ func newWebAppAuthflowV2TerminateOtherSessionsHandler(p *deps.RequestProvider) h siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -145888,7 +144869,7 @@ func newWebAppAuthflowWechatHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: handle, AppID: appID, @@ -145907,7 +144888,7 @@ func newWebAppAuthflowWechatHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -147004,7 +145985,7 @@ func newWebAppAuthflowForgotPasswordHandler(p *deps.RequestProvider) http.Handle SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: handle, AppID: appID, @@ -147023,7 +146004,7 @@ func newWebAppAuthflowForgotPasswordHandler(p *deps.RequestProvider) http.Handle siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -148119,7 +147100,7 @@ func newWebAppAuthflowV2ForgotPasswordHandler(p *deps.RequestProvider) http.Hand SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: handle, AppID: appID, @@ -148138,7 +147119,7 @@ func newWebAppAuthflowV2ForgotPasswordHandler(p *deps.RequestProvider) http.Hand siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -149240,7 +148221,7 @@ func newWebAppAuthflowForgotPasswordOTPHandler(p *deps.RequestProvider) http.Han SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: handle, AppID: appID, @@ -149259,7 +148240,7 @@ func newWebAppAuthflowForgotPasswordOTPHandler(p *deps.RequestProvider) http.Han siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -150357,7 +149338,7 @@ func newWebAppAuthflowV2ForgotPasswordOTPHandler(p *deps.RequestProvider) http.H SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: handle, AppID: appID, @@ -150376,7 +149357,7 @@ func newWebAppAuthflowV2ForgotPasswordOTPHandler(p *deps.RequestProvider) http.H siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -151474,7 +150455,7 @@ func newWebAppAuthflowForgotPasswordSuccessHandler(p *deps.RequestProvider) http SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: handle, AppID: appID, @@ -151493,7 +150474,7 @@ func newWebAppAuthflowForgotPasswordSuccessHandler(p *deps.RequestProvider) http siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -152589,7 +151570,7 @@ func newWebAppAuthflowV2ForgotPasswordLinkSentHandler(p *deps.RequestProvider) h SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: handle, AppID: appID, @@ -152608,7 +151589,7 @@ func newWebAppAuthflowV2ForgotPasswordLinkSentHandler(p *deps.RequestProvider) h siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -153727,7 +152708,7 @@ func newWebAppReauthHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -153746,7 +152727,7 @@ func newWebAppReauthHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -154721,7 +153702,7 @@ func newWebAppAuthflowReauthHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: handle, AppID: appID, @@ -154740,7 +153721,7 @@ func newWebAppAuthflowReauthHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -155802,7 +154783,7 @@ func newWebAppAuthflowV2ReauthHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: handle, AppID: appID, @@ -155821,7 +154802,7 @@ func newWebAppAuthflowV2ReauthHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -156883,7 +155864,7 @@ func newWebAppAuthflowResetPasswordHandler(p *deps.RequestProvider) http.Handler SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: handle, AppID: appID, @@ -156902,7 +155883,7 @@ func newWebAppAuthflowResetPasswordHandler(p *deps.RequestProvider) http.Handler siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -158020,7 +157001,7 @@ func newWebAppAuthflowV2ResetPasswordHandler(p *deps.RequestProvider) http.Handl SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -158039,7 +157020,7 @@ func newWebAppAuthflowV2ResetPasswordHandler(p *deps.RequestProvider) http.Handl siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -159207,7 +158188,7 @@ func newWebAppAuthflowResetPasswordSuccessHandler(p *deps.RequestProvider) http. SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: handle, AppID: appID, @@ -159226,7 +158207,7 @@ func newWebAppAuthflowResetPasswordSuccessHandler(p *deps.RequestProvider) http. siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -160322,7 +159303,7 @@ func newWebAppAuthflowV2ResetPasswordSuccessHandler(p *deps.RequestProvider) htt SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: handle, AppID: appID, @@ -160341,7 +159322,7 @@ func newWebAppAuthflowV2ResetPasswordSuccessHandler(p *deps.RequestProvider) htt siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -161773,7 +160754,7 @@ func newWebAppAuthflowFinishFlowHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: handle, AppID: appID, @@ -161792,7 +160773,7 @@ func newWebAppAuthflowFinishFlowHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -162888,7 +161869,7 @@ func newWebAppAuthflowV2FinishFlowHandler(p *deps.RequestProvider) http.Handler SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: handle, AppID: appID, @@ -162907,7 +161888,7 @@ func newWebAppAuthflowV2FinishFlowHandler(p *deps.RequestProvider) http.Handler siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -164003,7 +162984,7 @@ func newWebAppAuthflowV2AccountLinkingHandler(p *deps.RequestProvider) http.Hand SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: handle, AppID: appID, @@ -164022,7 +163003,7 @@ func newWebAppAuthflowV2AccountLinkingHandler(p *deps.RequestProvider) http.Hand siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -165231,7 +164212,7 @@ func newWebAppAuthflowV2WechatHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: handle, AppID: appID, @@ -165250,7 +164231,7 @@ func newWebAppAuthflowV2WechatHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -166347,7 +165328,7 @@ func newWebAppAuthflowV2LDAPLoginHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: handle, AppID: appID, @@ -166366,7 +165347,7 @@ func newWebAppAuthflowV2LDAPLoginHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -167449,7 +166430,7 @@ func newSAMLMetadataHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } remoteIP := deps.ProvideRemoteIP(request, trustProxy) - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -167469,7 +166450,7 @@ func newSAMLMetadataHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -167928,7 +166909,7 @@ func newSAMLLoginHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } remoteIP := deps.ProvideRemoteIP(request, trustProxy) - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -167947,7 +166928,7 @@ func newSAMLLoginHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -168775,7 +167756,7 @@ func newSAMLLoginFinishHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } remoteIP := deps.ProvideRemoteIP(request, trustProxy) - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -168794,7 +167775,7 @@ func newSAMLLoginFinishHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -169277,7 +168258,7 @@ func newSAMLLogoutHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } remoteIP := deps.ProvideRemoteIP(request, trustProxy) - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -169296,7 +168277,7 @@ func newSAMLLogoutHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -169954,7 +168935,7 @@ func newWebAppAuthflowV2SettingsProfile(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -169973,7 +168954,7 @@ func newWebAppAuthflowV2SettingsProfile(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -170984,7 +169965,7 @@ func newWebAppAuthflowV2SettingsIdentityAddEmailHandler(p *deps.RequestProvider) SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -171003,7 +169984,7 @@ func newWebAppAuthflowV2SettingsIdentityAddEmailHandler(p *deps.RequestProvider) siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -172029,7 +171010,7 @@ func newWebAppAuthflowV2SettingsIdentityEditEmailHandler(p *deps.RequestProvider SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -172048,7 +171029,7 @@ func newWebAppAuthflowV2SettingsIdentityEditEmailHandler(p *deps.RequestProvider siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -173015,7 +171996,7 @@ func newWebAppAuthflowV2SettingsIdentityListEmailHandler(p *deps.RequestProvider SQLExecutor: sqlExecutor, } remoteIP := deps.ProvideRemoteIP(request, trustProxy) - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -173035,7 +172016,7 @@ func newWebAppAuthflowV2SettingsIdentityListEmailHandler(p *deps.RequestProvider siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -174109,7 +173090,7 @@ func newWebAppAuthflowV2SettingsIdentityVerifyEmailHandler(p *deps.RequestProvid SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -174128,7 +173109,7 @@ func newWebAppAuthflowV2SettingsIdentityVerifyEmailHandler(p *deps.RequestProvid siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -175098,7 +174079,7 @@ func newWebAppAuthflowV2SettingsIdentityViewEmailHandler(p *deps.RequestProvider SQLExecutor: sqlExecutor, } remoteIP := deps.ProvideRemoteIP(request, trustProxy) - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -175118,7 +174099,7 @@ func newWebAppAuthflowV2SettingsIdentityViewEmailHandler(p *deps.RequestProvider siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -176214,7 +175195,7 @@ func newWebAppAuthflowV2SettingsIdentityChangePrimaryEmailHandler(p *deps.Reques SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -176233,7 +175214,7 @@ func newWebAppAuthflowV2SettingsIdentityChangePrimaryEmailHandler(p *deps.Reques siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -177251,7 +176232,7 @@ func newWebAppAuthflowV2SettingsIdentityAddPhoneHandler(p *deps.RequestProvider) SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -177270,7 +176251,7 @@ func newWebAppAuthflowV2SettingsIdentityAddPhoneHandler(p *deps.RequestProvider) siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -178297,7 +177278,7 @@ func newWebAppAuthflowV2SettingsIdentityEditPhoneHandler(p *deps.RequestProvider SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -178316,7 +177297,7 @@ func newWebAppAuthflowV2SettingsIdentityEditPhoneHandler(p *deps.RequestProvider siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -179284,7 +178265,7 @@ func newWebAppAuthflowV2SettingsIdentityListPhoneHandler(p *deps.RequestProvider SQLExecutor: sqlExecutor, } remoteIP := deps.ProvideRemoteIP(request, trustProxy) - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -179304,7 +178285,7 @@ func newWebAppAuthflowV2SettingsIdentityListPhoneHandler(p *deps.RequestProvider siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -180317,7 +179298,7 @@ func newWebAppAuthflowV2SettingsIdentityViewPhoneHandler(p *deps.RequestProvider SQLExecutor: sqlExecutor, } remoteIP := deps.ProvideRemoteIP(request, trustProxy) - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -180337,7 +179318,7 @@ func newWebAppAuthflowV2SettingsIdentityViewPhoneHandler(p *deps.RequestProvider siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -181428,7 +180409,7 @@ func newWebAppAuthflowV2SettingsIdentityChangePrimaryPhoneHandler(p *deps.Reques SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -181447,7 +180428,7 @@ func newWebAppAuthflowV2SettingsIdentityChangePrimaryPhoneHandler(p *deps.Reques siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -182465,7 +181446,7 @@ func newWebAppAuthflowV2SettingsIdentityVerifyPhoneHandler(p *deps.RequestProvid SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -182484,7 +181465,7 @@ func newWebAppAuthflowV2SettingsIdentityVerifyPhoneHandler(p *deps.RequestProvid siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -183454,7 +182435,7 @@ func newWebAppAuthflowV2SettingsIdentityListUsernameHandler(p *deps.RequestProvi SQLExecutor: sqlExecutor, } remoteIP := deps.ProvideRemoteIP(request, trustProxy) - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -183474,7 +182455,7 @@ func newWebAppAuthflowV2SettingsIdentityListUsernameHandler(p *deps.RequestProvi siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -184493,7 +183474,7 @@ func newWebAppAuthflowV2SettingsIdentityNewUsernameHandler(p *deps.RequestProvid SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -184512,7 +183493,7 @@ func newWebAppAuthflowV2SettingsIdentityNewUsernameHandler(p *deps.RequestProvid siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -185539,7 +184520,7 @@ func newWebAppAuthflowV2SettingsIdentityViewUsernameHandler(p *deps.RequestProvi SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -185558,7 +184539,7 @@ func newWebAppAuthflowV2SettingsIdentityViewUsernameHandler(p *deps.RequestProvi siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -186587,7 +185568,7 @@ func newWebAppAuthflowV2SettingsIdentityEditUsernameHandler(p *deps.RequestProvi SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -186606,7 +185587,7 @@ func newWebAppAuthflowV2SettingsIdentityEditUsernameHandler(p *deps.RequestProvi siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -187677,7 +186658,7 @@ func newWebAppAuthflowV2SettingsIdentityListOAuthHandler(p *deps.RequestProvider SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -187696,7 +186677,7 @@ func newWebAppAuthflowV2SettingsIdentityListOAuthHandler(p *deps.RequestProvider siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -189335,7 +188316,7 @@ func newSessionMiddleware(p *deps.RequestProvider) httproute.Middleware { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 siweStoreRedis := &siwe2.StoreRedis{ Redis: handle, AppID: appID, @@ -189354,7 +188335,7 @@ func newSessionMiddleware(p *deps.RequestProvider) httproute.Middleware { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: siweStoreRedis, @@ -190148,7 +189129,7 @@ func newWebAppSessionMiddleware(p *deps.RequestProvider) httproute.Middleware { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: handle, AppID: appID, @@ -190167,7 +189148,7 @@ func newWebAppSessionMiddleware(p *deps.RequestProvider) httproute.Middleware { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -191128,7 +190109,7 @@ func newWebAppUIParamMiddleware(p *deps.RequestProvider) httproute.Middleware { SQLExecutor: sqlExecutor, } remoteIP := deps.ProvideRemoteIP(request, trustProxy) - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -191148,7 +190129,7 @@ func newWebAppUIParamMiddleware(p *deps.RequestProvider) httproute.Middleware { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -191667,7 +190648,7 @@ func newSettingsSubRoutesMiddleware(p *deps.RequestProvider) httproute.Middlewar SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -191686,7 +190667,7 @@ func newSettingsSubRoutesMiddleware(p *deps.RequestProvider) httproute.Middlewar siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, diff --git a/pkg/auth/wire_handler.go b/pkg/auth/wire_handler.go index 2edd825bf0..be9336e5c3 100644 --- a/pkg/auth/wire_handler.go +++ b/pkg/auth/wire_handler.go @@ -758,13 +758,6 @@ func newWebAppConnectWeb3AccountHandler(p *deps.RequestProvider) http.Handler { )) } -func newWebAppMissingWeb3WalletHandler(p *deps.RequestProvider) http.Handler { - panic(wire.Build( - DependencySet, - wire.Bind(new(http.Handler), new(*handlerwebapp.MissingWeb3WalletHandler)), - )) -} - func newWebAppFeatureDisabledHandler(p *deps.RequestProvider) http.Handler { panic(wire.Build( DependencySet, diff --git a/pkg/redisqueue/wire_gen.go b/pkg/redisqueue/wire_gen.go index 81d855d5b3..1a8829f9e3 100644 --- a/pkg/redisqueue/wire_gen.go +++ b/pkg/redisqueue/wire_gen.go @@ -218,7 +218,7 @@ func newUserImportService(ctx context.Context, p *deps.AppProvider) *userimport. SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -237,7 +237,7 @@ func newUserImportService(ctx context.Context, p *deps.AppProvider) *userimport. siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clock, NonceStore: storeRedis, @@ -1020,7 +1020,7 @@ func newUserExportService(ctx context.Context, p *deps.AppProvider) *userexport. SQLExecutor: sqlExecutor, } remoteIP := deps.ProvideRedisQueueRemoteIP() - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -1040,7 +1040,7 @@ func newUserExportService(ctx context.Context, p *deps.AppProvider) *userexport. siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, @@ -1410,7 +1410,7 @@ func newSearchReindexer(ctx context.Context, p *deps.AppProvider) *reindex.Reind SQLExecutor: sqlExecutor, } remoteIP := deps.ProvideRedisQueueRemoteIP() - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -1429,7 +1429,7 @@ func newSearchReindexer(ctx context.Context, p *deps.AppProvider) *reindex.Reind siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, diff --git a/pkg/resolver/wire_gen.go b/pkg/resolver/wire_gen.go index bbd4cb1426..4f03bb6dec 100644 --- a/pkg/resolver/wire_gen.go +++ b/pkg/resolver/wire_gen.go @@ -342,7 +342,7 @@ func newSessionMiddleware(p *deps.RequestProvider) httproute.Middleware { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 siweStoreRedis := &siwe2.StoreRedis{ Redis: handle, AppID: appID, @@ -361,7 +361,7 @@ func newSessionMiddleware(p *deps.RequestProvider) httproute.Middleware { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clock, NonceStore: siweStoreRedis, @@ -1100,7 +1100,7 @@ func newSessionResolveHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } remoteIP := deps.ProvideRemoteIP(request, trustProxy) - web3Config := appConfig.Web3 + deprecated_Web3Config := appConfig.Web3 storeRedis := &siwe2.StoreRedis{ Redis: appredisHandle, AppID: appID, @@ -1120,7 +1120,7 @@ func newSessionResolveHandler(p *deps.RequestProvider) http.Handler { siweService := &siwe2.Service{ RemoteIP: remoteIP, HTTPOrigin: httpOrigin, - Web3Config: web3Config, + Web3Config: deprecated_Web3Config, AuthenticationConfig: authenticationConfig, Clock: clockClock, NonceStore: storeRedis, diff --git a/resources/authgear/templates/en/web/missing_web3_wallet.html b/resources/authgear/templates/en/web/missing_web3_wallet.html deleted file mode 100644 index 68b3a1eb3e..0000000000 --- a/resources/authgear/templates/en/web/missing_web3_wallet.html +++ /dev/null @@ -1,36 +0,0 @@ -{{ template "__page_frame.html" . }} {{ define "page-content" }} - -{{ end }} From f07827f760aaf2d93689325b542586753ebb3a3e Mon Sep 17 00:00:00 2001 From: Louis Chan Date: Thu, 5 Dec 2024 17:34:32 +0800 Subject: [PATCH 13/22] Remove /_internals/siwe/nonce --- .vettedpositions | 1 - pkg/auth/deps.go | 6 ---- pkg/auth/handler/siwe/deps.go | 10 ------ pkg/auth/handler/siwe/nonce.go | 59 --------------------------------- pkg/auth/routes.go | 10 ------ pkg/auth/wire_gen.go | 59 --------------------------------- pkg/auth/wire_handler.go | 8 ----- pkg/lib/feature/siwe/service.go | 25 -------------- 8 files changed, 178 deletions(-) delete mode 100644 pkg/auth/handler/siwe/deps.go delete mode 100644 pkg/auth/handler/siwe/nonce.go diff --git a/.vettedpositions b/.vettedpositions index 4c05be41c9..88cb827f01 100644 --- a/.vettedpositions +++ b/.vettedpositions @@ -36,7 +36,6 @@ /pkg/auth/handler/saml/login.go:296:3: requestcontext /pkg/auth/handler/saml/login_finish.go:41:9: requestcontext /pkg/auth/handler/saml/logout.go:86:9: requestcontext -/pkg/auth/handler/siwe/nonce.go:46:38: requestcontext /pkg/auth/handler/webapp/account_status.go:48:27: requestcontext /pkg/auth/handler/webapp/auth_entry_point_middleware.go:31:31: requestcontext /pkg/auth/handler/webapp/auth_entry_point_middleware.go:32:35: requestcontext diff --git a/pkg/auth/deps.go b/pkg/auth/deps.go index 38116d546d..e2fd798bda 100644 --- a/pkg/auth/deps.go +++ b/pkg/auth/deps.go @@ -10,7 +10,6 @@ import ( handlerapi "github.com/authgear/authgear-server/pkg/auth/handler/api" handleroauth "github.com/authgear/authgear-server/pkg/auth/handler/oauth" handlersaml "github.com/authgear/authgear-server/pkg/auth/handler/saml" - handlersiwe "github.com/authgear/authgear-server/pkg/auth/handler/siwe" handlerwebapp "github.com/authgear/authgear-server/pkg/auth/handler/webapp" handlerwebappauthflowv2 "github.com/authgear/authgear-server/pkg/auth/handler/webapp/authflowv2" viewmodelswebapp "github.com/authgear/authgear-server/pkg/auth/handler/webapp/viewmodels" @@ -33,7 +32,6 @@ import ( featurecustomattrs "github.com/authgear/authgear-server/pkg/lib/feature/customattrs" "github.com/authgear/authgear-server/pkg/lib/feature/forgotpassword" featurepasskey "github.com/authgear/authgear-server/pkg/lib/feature/passkey" - featuresiwe "github.com/authgear/authgear-server/pkg/lib/feature/siwe" featurestdattrs "github.com/authgear/authgear-server/pkg/lib/feature/stdattrs" "github.com/authgear/authgear-server/pkg/lib/feature/verification" "github.com/authgear/authgear-server/pkg/lib/infra/db/appdb" @@ -245,10 +243,6 @@ var DependencySet = wire.NewSet( handlerwebappauthflowv2.DependencySet, wire.Bind(new(handlerwebapp.ErrorRendererAuthflowV2Navigator), new(*handlerwebappauthflowv2.AuthflowV2Navigator)), - handlersiwe.DependencySet, - wire.Bind(new(handlersiwe.NonceHandlerJSONResponseWriter), new(*httputil.JSONResponseWriter)), - wire.Bind(new(handlersiwe.NonceHandlerSIWEService), new(*featuresiwe.Service)), - api.DependencySet, wire.Bind(new(api.JSONResponseWriter), new(*httputil.JSONResponseWriter)), wire.Bind(new(authenticationflow.JSONResponseWriter), new(*httputil.JSONResponseWriter)), diff --git a/pkg/auth/handler/siwe/deps.go b/pkg/auth/handler/siwe/deps.go deleted file mode 100644 index 870babb6fa..0000000000 --- a/pkg/auth/handler/siwe/deps.go +++ /dev/null @@ -1,10 +0,0 @@ -package siwe - -import ( - "github.com/google/wire" -) - -var DependencySet = wire.NewSet( - NewNonceHandlerLogger, - wire.Struct(new(NonceHandler), "*"), -) diff --git a/pkg/auth/handler/siwe/nonce.go b/pkg/auth/handler/siwe/nonce.go deleted file mode 100644 index 7ab474be2a..0000000000 --- a/pkg/auth/handler/siwe/nonce.go +++ /dev/null @@ -1,59 +0,0 @@ -package siwe - -import ( - "context" - "net/http" - "time" - - "github.com/authgear/authgear-server/pkg/api" - featuresiwe "github.com/authgear/authgear-server/pkg/lib/feature/siwe" - "github.com/authgear/authgear-server/pkg/util/httproute" - "github.com/authgear/authgear-server/pkg/util/log" -) - -func ConfigureNonceRoute(route httproute.Route) httproute.Route { - return route. - WithMethods("OPTIONS", "GET"). - WithPathPattern("/_internals/siwe/nonce") -} - -type NonceHandlerSIWEService interface { - CreateNewNonce(ctx context.Context) (*featuresiwe.Nonce, error) -} - -type NonceHandlerLogger struct{ *log.Logger } - -func NewNonceHandlerLogger(lf *log.Factory) NonceHandlerLogger { - return NonceHandlerLogger{lf.New("handler-nonce")} -} - -type NonceResponse struct { - Nonce string `json:"nonce"` - ExpireAt time.Time `json:"expire_at"` -} - -type NonceHandlerJSONResponseWriter interface { - WriteResponse(rw http.ResponseWriter, resp *api.Response) -} - -type NonceHandler struct { - Logger NonceHandlerLogger - SIWE NonceHandlerSIWEService - JSON NonceHandlerJSONResponseWriter -} - -func (h *NonceHandler) ServeHTTP(rw http.ResponseWriter, r *http.Request) { - nonce, err := h.SIWE.CreateNewNonce(r.Context()) - if err != nil { - h.Logger.WithError(err).Error("failed to create siwe nonce") - http.Error(rw, "internal server error", 500) - return - } - - h.JSON.WriteResponse(rw, &api.Response{ - Result: &NonceResponse{ - Nonce: nonce.Nonce, - ExpireAt: nonce.ExpireAt, - }, - }) -} diff --git a/pkg/auth/routes.go b/pkg/auth/routes.go index f4c556e1ef..6b910b8b85 100644 --- a/pkg/auth/routes.go +++ b/pkg/auth/routes.go @@ -6,7 +6,6 @@ import ( apihandler "github.com/authgear/authgear-server/pkg/auth/handler/api" oauthhandler "github.com/authgear/authgear-server/pkg/auth/handler/oauth" samlhandler "github.com/authgear/authgear-server/pkg/auth/handler/saml" - siwehandler "github.com/authgear/authgear-server/pkg/auth/handler/siwe" webapphandler "github.com/authgear/authgear-server/pkg/auth/handler/webapp" webapphandlerauthflowv2 "github.com/authgear/authgear-server/pkg/auth/handler/webapp/authflowv2" "github.com/authgear/authgear-server/pkg/auth/webapp" @@ -113,12 +112,6 @@ func NewRouter(p *deps.RootProvider, configSource *configsource.ConfigSource) ht p.Middleware(newDPoPMiddleware), ) oauthAuthzAPIChain := newOAuthAPIChain() - siweAPIChain := httproute.Chain( - rootChain, - p.Middleware(newCORSMiddleware), - p.Middleware(newPublicOriginMiddleware), - httproute.MiddlewareFunc(httputil.NoCache), - ) apiChain := httproute.Chain( rootChain, @@ -293,7 +286,6 @@ func NewRouter(p *deps.RootProvider, configSource *configsource.ConfigSource) ht oauthAPIRoute := httproute.Route{Middleware: oauthAPIChain} dpopOauthAPIRoute := httproute.Route{Middleware: dpopOAuthAPIChain} oauthAuthzAPIRoute := httproute.Route{Middleware: oauthAuthzAPIChain} - siweAPIRoute := httproute.Route{Middleware: siweAPIChain} apiRoute := httproute.Route{Middleware: apiChain} dpopApiRoute := httproute.Route{Middleware: dpopApiChain} workflowRoute := httproute.Route{Middleware: workflowChain} @@ -564,8 +556,6 @@ func NewRouter(p *deps.RootProvider, configSource *configsource.ConfigSource) ht router.Add(samlhandler.ConfigureLoginFinishRoute(samlAPIRoute), p.Handler(newSAMLLoginFinishHandler)) router.Add(samlhandler.ConfigureLogoutRoute(samlAPIRoute), p.Handler(newSAMLLogoutHandler)) - router.Add(siwehandler.ConfigureNonceRoute(siweAPIRoute), p.Handler(newSIWENonceHandler)) - router.Add(apihandler.ConfigureAnonymousUserSignupRoute(apiRoute), p.Handler(newAPIAnonymousUserSignupHandler)) router.Add(apihandler.ConfigureAnonymousUserPromotionCodeRoute(apiRoute), p.Handler(newAPIAnonymousUserPromotionCodeHandler)) router.Add(apihandler.ConfigurePresignImagesUploadRoute(apiAuthenticatedRoute), p.Handler(newAPIPresignImagesUploadHandler)) diff --git a/pkg/auth/wire_gen.go b/pkg/auth/wire_gen.go index 8486552190..cccc47b198 100644 --- a/pkg/auth/wire_gen.go +++ b/pkg/auth/wire_gen.go @@ -12,7 +12,6 @@ import ( "github.com/authgear/authgear-server/pkg/auth/handler/api" "github.com/authgear/authgear-server/pkg/auth/handler/oauth" saml2 "github.com/authgear/authgear-server/pkg/auth/handler/saml" - siwe3 "github.com/authgear/authgear-server/pkg/auth/handler/siwe" "github.com/authgear/authgear-server/pkg/auth/handler/webapp" "github.com/authgear/authgear-server/pkg/auth/handler/webapp/authflowv2" "github.com/authgear/authgear-server/pkg/auth/handler/webapp/viewmodels" @@ -6243,64 +6242,6 @@ func newOAuthProxyRedirectHandler(p *deps.RequestProvider) http.Handler { return oauthProxyRedirectHandler } -func newSIWENonceHandler(p *deps.RequestProvider) http.Handler { - appProvider := p.AppProvider - factory := appProvider.LoggerFactory - nonceHandlerLogger := siwe3.NewNonceHandlerLogger(factory) - request := p.Request - rootProvider := appProvider.RootProvider - environmentConfig := rootProvider.EnvironmentConfig - trustProxy := environmentConfig.TrustProxy - remoteIP := deps.ProvideRemoteIP(request, trustProxy) - httpProto := deps.ProvideHTTPProto(request, trustProxy) - httpHost := deps.ProvideHTTPHost(request, trustProxy) - httpOrigin := httputil.MakeHTTPOrigin(httpProto, httpHost) - appContext := appProvider.AppContext - config := appContext.Config - appConfig := config.AppConfig - deprecated_Web3Config := appConfig.Web3 - authenticationConfig := appConfig.Authentication - clockClock := _wireSystemClockValue - handle := appProvider.Redis - appID := appConfig.ID - storeRedis := &siwe2.StoreRedis{ - Redis: handle, - AppID: appID, - Clock: clockClock, - } - logger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(handle) - featureConfig := config.FeatureConfig - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: logger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } - jsonResponseWriterLogger := httputil.NewJSONResponseWriterLogger(factory) - jsonResponseWriter := &httputil.JSONResponseWriter{ - Logger: jsonResponseWriterLogger, - } - nonceHandler := &siwe3.NonceHandler{ - Logger: nonceHandlerLogger, - SIWE: siweService, - JSON: jsonResponseWriter, - } - return nonceHandler -} - func newAPIAnonymousUserSignupHandler(p *deps.RequestProvider) http.Handler { appProvider := p.AppProvider factory := appProvider.LoggerFactory diff --git a/pkg/auth/wire_handler.go b/pkg/auth/wire_handler.go index be9336e5c3..c9fb309109 100644 --- a/pkg/auth/wire_handler.go +++ b/pkg/auth/wire_handler.go @@ -12,7 +12,6 @@ import ( handlerapi "github.com/authgear/authgear-server/pkg/auth/handler/api" handleroauth "github.com/authgear/authgear-server/pkg/auth/handler/oauth" handlersaml "github.com/authgear/authgear-server/pkg/auth/handler/saml" - handlersiwe "github.com/authgear/authgear-server/pkg/auth/handler/siwe" handlerwebapp "github.com/authgear/authgear-server/pkg/auth/handler/webapp" handlerwebappauthflowv2 "github.com/authgear/authgear-server/pkg/auth/handler/webapp/authflowv2" "github.com/authgear/authgear-server/pkg/lib/deps" @@ -114,13 +113,6 @@ func newOAuthProxyRedirectHandler(p *deps.RequestProvider) http.Handler { )) } -func newSIWENonceHandler(p *deps.RequestProvider) http.Handler { - panic(wire.Build( - DependencySet, - wire.Bind(new(http.Handler), new(*handlersiwe.NonceHandler)), - )) -} - func newAPIAnonymousUserSignupHandler(p *deps.RequestProvider) http.Handler { panic(wire.Build( DependencySet, diff --git a/pkg/lib/feature/siwe/service.go b/pkg/lib/feature/siwe/service.go index 837290cf21..a6e8972535 100644 --- a/pkg/lib/feature/siwe/service.go +++ b/pkg/lib/feature/siwe/service.go @@ -16,10 +16,8 @@ import ( "github.com/authgear/authgear-server/pkg/lib/config" "github.com/authgear/authgear-server/pkg/lib/ratelimit" "github.com/authgear/authgear-server/pkg/util/clock" - "github.com/authgear/authgear-server/pkg/util/duration" "github.com/authgear/authgear-server/pkg/util/httputil" "github.com/authgear/authgear-server/pkg/util/log" - "github.com/authgear/authgear-server/pkg/util/rand" "github.com/authgear/authgear-server/pkg/util/web3" ) @@ -78,29 +76,6 @@ func (s *Service) rateLimitVerifyMessage() ratelimit.BucketSpec { ) } -func (s *Service) CreateNewNonce(ctx context.Context) (*Nonce, error) { - nonce := rand.StringWithAlphabet(16, Alphabet, rand.SecureRand) - nonceModel := &Nonce{ - Nonce: nonce, - ExpireAt: s.Clock.NowUTC().Add(duration.Short), - } - - failed, err := s.RateLimiter.Allow(ctx, s.rateLimitGenerateNonce()) - if err != nil { - return nil, err - } - if err := failed.Error(); err != nil { - return nil, err - } - - err = s.NonceStore.Create(ctx, nonceModel) - if err != nil { - return nil, err - } - - return nonceModel, nil -} - func (s *Service) VerifyMessage(ctx context.Context, msg string, signature string) (*model.SIWEWallet, *ecdsa.PublicKey, error) { message, err := siwego.ParseMessage(msg) if err != nil { From f35b840a55d219c412c2ec382cb85da260376f3c Mon Sep 17 00:00:00 2001 From: Louis Chan Date: Thu, 5 Dec 2024 17:40:49 +0800 Subject: [PATCH 14/22] No longer support verifying SIWE message --- cmd/authgear/background/wire_gen.go | 43 +- cmd/authgear/elasticsearch/wire_gen.go | 43 +- cmd/authgear/pgsearch/wire_gen.go | 43 +- e2e/cmd/e2e/pkg/wire_gen.go | 43 +- pkg/admin/wire_gen.go | 83 +- pkg/auth/wire_gen.go | 7725 ++++++--------------- pkg/lib/authn/identity/siwe/provider.go | 41 +- pkg/lib/deps/deps_common.go | 7 - pkg/lib/feature/siwe/deps.go | 10 - pkg/lib/feature/siwe/errors.go | 10 - pkg/lib/feature/siwe/nonce.go | 8 - pkg/lib/feature/siwe/service.go | 149 - pkg/lib/feature/siwe/service_mock_test.go | 145 - pkg/lib/feature/siwe/store_redis.go | 81 - pkg/redisqueue/wire_gen.go | 129 +- pkg/resolver/wire_gen.go | 81 +- 16 files changed, 2339 insertions(+), 6302 deletions(-) delete mode 100644 pkg/lib/feature/siwe/deps.go delete mode 100644 pkg/lib/feature/siwe/errors.go delete mode 100644 pkg/lib/feature/siwe/nonce.go delete mode 100644 pkg/lib/feature/siwe/service.go delete mode 100644 pkg/lib/feature/siwe/service_mock_test.go delete mode 100644 pkg/lib/feature/siwe/store_redis.go diff --git a/cmd/authgear/background/wire_gen.go b/cmd/authgear/background/wire_gen.go index 0b25bc533c..3280665a5c 100644 --- a/cmd/authgear/background/wire_gen.go +++ b/cmd/authgear/background/wire_gen.go @@ -38,7 +38,6 @@ import ( "github.com/authgear/authgear-server/pkg/lib/feature/customattrs" "github.com/authgear/authgear-server/pkg/lib/feature/forgotpassword" passkey2 "github.com/authgear/authgear-server/pkg/lib/feature/passkey" - siwe2 "github.com/authgear/authgear-server/pkg/lib/feature/siwe" stdattrs2 "github.com/authgear/authgear-server/pkg/lib/feature/stdattrs" "github.com/authgear/authgear-server/pkg/lib/feature/verification" "github.com/authgear/authgear-server/pkg/lib/hook" @@ -303,36 +302,9 @@ func newUserService(p *deps.BackgroundProvider, appID string, appContext *config SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: configAppID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: configAppID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -440,6 +412,15 @@ func newUserService(p *deps.BackgroundProvider, appID string, appContext *config Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: configAppID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: configAppID, @@ -814,7 +795,7 @@ func newUserService(p *deps.BackgroundProvider, appID string, appContext *config SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: configAppID, Clock: clockClock, @@ -825,7 +806,7 @@ func newUserService(p *deps.BackgroundProvider, appID string, appContext *config cookieManager := deps.NewCookieManager(request, trustProxy, httpConfig) cookieDef := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef, @@ -865,7 +846,7 @@ func newUserService(p *deps.BackgroundProvider, appID string, appContext *config UserAgentString: userAgentString, AppID: configAppID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, diff --git a/cmd/authgear/elasticsearch/wire_gen.go b/cmd/authgear/elasticsearch/wire_gen.go index 9a6bcc2b23..67946e8c56 100644 --- a/cmd/authgear/elasticsearch/wire_gen.go +++ b/cmd/authgear/elasticsearch/wire_gen.go @@ -27,7 +27,6 @@ import ( "github.com/authgear/authgear-server/pkg/lib/deps" "github.com/authgear/authgear-server/pkg/lib/feature/customattrs" passkey2 "github.com/authgear/authgear-server/pkg/lib/feature/passkey" - siwe2 "github.com/authgear/authgear-server/pkg/lib/feature/siwe" stdattrs2 "github.com/authgear/authgear-server/pkg/lib/feature/stdattrs" "github.com/authgear/authgear-server/pkg/lib/feature/verification" "github.com/authgear/authgear-server/pkg/lib/infra/db" @@ -204,37 +203,9 @@ func NewReindexer(pool *db.Pool, databaseCredentials *CmdDBCredential, appID Cmd SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - remoteIP := ProvideRemoteIP() - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: configAppID, - Clock: clock, - } - logger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: logger, - Storage: storageRedis, - AppID: configAppID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -271,7 +242,7 @@ func NewReindexer(pool *db.Pool, databaseCredentials *CmdDBCredential, appID Cmd } authenticatorConfig := appConfig.Authenticator authenticatorPasswordConfig := authenticatorConfig.Password - passwordLogger := password.NewLogger(factory) + logger := password.NewLogger(factory) historyStore := &password.HistoryStore{ Clock: clock, SQLBuilder: sqlBuilderApp, @@ -290,7 +261,7 @@ func NewReindexer(pool *db.Pool, databaseCredentials *CmdDBCredential, appID Cmd Store: passwordStore, Config: authenticatorPasswordConfig, Clock: clock, - Logger: passwordLogger, + Logger: logger, PasswordHistory: historyStore, PasswordChecker: passwordChecker, Expiry: expiry, @@ -326,6 +297,7 @@ func NewReindexer(pool *db.Pool, databaseCredentials *CmdDBCredential, appID Cmd } testModeConfig := appConfig.TestMode testModeFeatureConfig := featureConfig.TestMode + remoteIP := ProvideRemoteIP() codeStoreRedis := &otp.CodeStoreRedis{ Redis: appredisHandle, AppID: configAppID, @@ -342,6 +314,15 @@ func NewReindexer(pool *db.Pool, databaseCredentials *CmdDBCredential, appID Cmd Clock: clock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: configAppID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clock, AppID: configAppID, diff --git a/cmd/authgear/pgsearch/wire_gen.go b/cmd/authgear/pgsearch/wire_gen.go index 52e367501a..7c32fe40c3 100644 --- a/cmd/authgear/pgsearch/wire_gen.go +++ b/cmd/authgear/pgsearch/wire_gen.go @@ -26,7 +26,6 @@ import ( "github.com/authgear/authgear-server/pkg/lib/deps" "github.com/authgear/authgear-server/pkg/lib/feature/customattrs" passkey2 "github.com/authgear/authgear-server/pkg/lib/feature/passkey" - siwe2 "github.com/authgear/authgear-server/pkg/lib/feature/siwe" stdattrs2 "github.com/authgear/authgear-server/pkg/lib/feature/stdattrs" "github.com/authgear/authgear-server/pkg/lib/feature/verification" "github.com/authgear/authgear-server/pkg/lib/infra/db" @@ -189,37 +188,9 @@ func NewReindexer(pool *db.Pool, databaseCredentials *CmdDBCredential, searchDat SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - remoteIP := ProvideRemoteIP() - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: configAppID, - Clock: clock, - } - logger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: logger, - Storage: storageRedis, - AppID: configAppID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -256,7 +227,7 @@ func NewReindexer(pool *db.Pool, databaseCredentials *CmdDBCredential, searchDat } authenticatorConfig := appConfig.Authenticator authenticatorPasswordConfig := authenticatorConfig.Password - passwordLogger := password.NewLogger(factory) + logger := password.NewLogger(factory) historyStore := &password.HistoryStore{ Clock: clock, SQLBuilder: sqlBuilderApp, @@ -275,7 +246,7 @@ func NewReindexer(pool *db.Pool, databaseCredentials *CmdDBCredential, searchDat Store: passwordStore, Config: authenticatorPasswordConfig, Clock: clock, - Logger: passwordLogger, + Logger: logger, PasswordHistory: historyStore, PasswordChecker: passwordChecker, Expiry: expiry, @@ -311,6 +282,7 @@ func NewReindexer(pool *db.Pool, databaseCredentials *CmdDBCredential, searchDat } testModeConfig := appConfig.TestMode testModeFeatureConfig := featureConfig.TestMode + remoteIP := ProvideRemoteIP() codeStoreRedis := &otp.CodeStoreRedis{ Redis: appredisHandle, AppID: configAppID, @@ -327,6 +299,15 @@ func NewReindexer(pool *db.Pool, databaseCredentials *CmdDBCredential, searchDat Clock: clock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: configAppID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clock, AppID: configAppID, diff --git a/e2e/cmd/e2e/pkg/wire_gen.go b/e2e/cmd/e2e/pkg/wire_gen.go index 882b729a6e..59bcfea393 100644 --- a/e2e/cmd/e2e/pkg/wire_gen.go +++ b/e2e/cmd/e2e/pkg/wire_gen.go @@ -34,7 +34,6 @@ import ( "github.com/authgear/authgear-server/pkg/lib/feature/customattrs" "github.com/authgear/authgear-server/pkg/lib/feature/forgotpassword" passkey2 "github.com/authgear/authgear-server/pkg/lib/feature/passkey" - siwe2 "github.com/authgear/authgear-server/pkg/lib/feature/siwe" stdattrs2 "github.com/authgear/authgear-server/pkg/lib/feature/stdattrs" "github.com/authgear/authgear-server/pkg/lib/feature/verification" "github.com/authgear/authgear-server/pkg/lib/hook" @@ -259,36 +258,9 @@ func newUserImport(p *deps.AppProvider) *userimport.UserImportService { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -396,6 +368,15 @@ func newUserImport(p *deps.AppProvider) *userimport.UserImportService { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -770,7 +751,7 @@ func newUserImport(p *deps.AppProvider) *userimport.UserImportService { SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -781,7 +762,7 @@ func newUserImport(p *deps.AppProvider) *userimport.UserImportService { cookieManager := deps.NewCookieManager(request, trustProxy, httpConfig) cookieDef := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef, @@ -820,7 +801,7 @@ func newUserImport(p *deps.AppProvider) *userimport.UserImportService { UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, diff --git a/pkg/admin/wire_gen.go b/pkg/admin/wire_gen.go index 6966459414..582d685199 100644 --- a/pkg/admin/wire_gen.go +++ b/pkg/admin/wire_gen.go @@ -44,7 +44,6 @@ import ( "github.com/authgear/authgear-server/pkg/lib/feature/customattrs" "github.com/authgear/authgear-server/pkg/lib/feature/forgotpassword" passkey2 "github.com/authgear/authgear-server/pkg/lib/feature/passkey" - siwe2 "github.com/authgear/authgear-server/pkg/lib/feature/siwe" stdattrs2 "github.com/authgear/authgear-server/pkg/lib/feature/stdattrs" "github.com/authgear/authgear-server/pkg/lib/feature/verification" "github.com/authgear/authgear-server/pkg/lib/healthz" @@ -313,37 +312,9 @@ func newGraphQLHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - remoteIP := deps.ProvideRemoteIP(request, trustProxy) - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -435,6 +406,7 @@ func newGraphQLHandler(p *deps.RequestProvider) http.Handler { } testModeConfig := appConfig.TestMode testModeFeatureConfig := featureConfig.TestMode + remoteIP := deps.ProvideRemoteIP(request, trustProxy) codeStoreRedis := &otp.CodeStoreRedis{ Redis: appredisHandle, AppID: appID, @@ -451,6 +423,15 @@ func newGraphQLHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -854,7 +835,7 @@ func newGraphQLHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -865,7 +846,7 @@ func newGraphQLHandler(p *deps.RequestProvider) http.Handler { cookieManager := deps.NewCookieManager(request, trustProxy, httpConfig) cookieDef := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef, @@ -903,7 +884,7 @@ func newGraphQLHandler(p *deps.RequestProvider) http.Handler { UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -1556,37 +1537,9 @@ func newUserExportCreateHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - remoteIP := deps.ProvideRemoteIP(request, trustProxy) - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: handle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(handle) - rateLimitsFeatureConfig := featureConfig.RateLimits - ratelimitLimiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: ratelimitLimiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -1678,6 +1631,7 @@ func newUserExportCreateHandler(p *deps.RequestProvider) http.Handler { } testModeConfig := appConfig.TestMode testModeFeatureConfig := featureConfig.TestMode + remoteIP := deps.ProvideRemoteIP(request, trustProxy) codeStoreRedis := &otp.CodeStoreRedis{ Redis: handle, AppID: appID, @@ -1694,6 +1648,15 @@ func newUserExportCreateHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(handle) + rateLimitsFeatureConfig := featureConfig.RateLimits + ratelimitLimiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, diff --git a/pkg/auth/wire_gen.go b/pkg/auth/wire_gen.go index cccc47b198..b2c7bb34fe 100644 --- a/pkg/auth/wire_gen.go +++ b/pkg/auth/wire_gen.go @@ -53,7 +53,6 @@ import ( "github.com/authgear/authgear-server/pkg/lib/feature/customattrs" "github.com/authgear/authgear-server/pkg/lib/feature/forgotpassword" passkey2 "github.com/authgear/authgear-server/pkg/lib/feature/passkey" - siwe2 "github.com/authgear/authgear-server/pkg/lib/feature/siwe" stdattrs2 "github.com/authgear/authgear-server/pkg/lib/feature/stdattrs" "github.com/authgear/authgear-server/pkg/lib/feature/verification" "github.com/authgear/authgear-server/pkg/lib/healthz" @@ -304,37 +303,9 @@ func newOAuthAuthorizeHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - remoteIP := deps.ProvideRemoteIP(request, trustProxy) - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clock, - } - logger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: logger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -371,7 +342,7 @@ func newOAuthAuthorizeHandler(p *deps.RequestProvider) http.Handler { } authenticatorConfig := appConfig.Authenticator authenticatorPasswordConfig := authenticatorConfig.Password - passwordLogger := password.NewLogger(factory) + logger := password.NewLogger(factory) historyStore := &password.HistoryStore{ Clock: clock, SQLBuilder: sqlBuilderApp, @@ -390,7 +361,7 @@ func newOAuthAuthorizeHandler(p *deps.RequestProvider) http.Handler { Store: passwordStore, Config: authenticatorPasswordConfig, Clock: clock, - Logger: passwordLogger, + Logger: logger, PasswordHistory: historyStore, PasswordChecker: passwordChecker, Expiry: expiry, @@ -426,6 +397,7 @@ func newOAuthAuthorizeHandler(p *deps.RequestProvider) http.Handler { } testModeConfig := appConfig.TestMode testModeFeatureConfig := featureConfig.TestMode + remoteIP := deps.ProvideRemoteIP(request, trustProxy) codeStoreRedis := &otp.CodeStoreRedis{ Redis: appredisHandle, AppID: appID, @@ -442,6 +414,15 @@ func newOAuthAuthorizeHandler(p *deps.RequestProvider) http.Handler { Clock: clock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clock, AppID: appID, @@ -543,7 +524,7 @@ func newOAuthAuthorizeHandler(p *deps.RequestProvider) http.Handler { } userAgentString := deps.ProvideUserAgentString(request) storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clock, @@ -574,7 +555,7 @@ func newOAuthAuthorizeHandler(p *deps.RequestProvider) http.Handler { UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -959,7 +940,7 @@ func newOAuthAuthorizeHandler(p *deps.RequestProvider) http.Handler { } cookieDef := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef, @@ -1225,37 +1206,9 @@ func newOAuthConsentHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - remoteIP := deps.ProvideRemoteIP(request, trustProxy) - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - logger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: logger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -1292,7 +1245,7 @@ func newOAuthConsentHandler(p *deps.RequestProvider) http.Handler { } authenticatorConfig := appConfig.Authenticator authenticatorPasswordConfig := authenticatorConfig.Password - passwordLogger := password.NewLogger(factory) + logger := password.NewLogger(factory) historyStore := &password.HistoryStore{ Clock: clockClock, SQLBuilder: sqlBuilderApp, @@ -1311,7 +1264,7 @@ func newOAuthConsentHandler(p *deps.RequestProvider) http.Handler { Store: passwordStore, Config: authenticatorPasswordConfig, Clock: clockClock, - Logger: passwordLogger, + Logger: logger, PasswordHistory: historyStore, PasswordChecker: passwordChecker, Expiry: expiry, @@ -1347,6 +1300,7 @@ func newOAuthConsentHandler(p *deps.RequestProvider) http.Handler { } testModeConfig := appConfig.TestMode testModeFeatureConfig := featureConfig.TestMode + remoteIP := deps.ProvideRemoteIP(request, trustProxy) codeStoreRedis := &otp.CodeStoreRedis{ Redis: appredisHandle, AppID: appID, @@ -1363,6 +1317,15 @@ func newOAuthConsentHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -1464,7 +1427,7 @@ func newOAuthConsentHandler(p *deps.RequestProvider) http.Handler { } userAgentString := deps.ProvideUserAgentString(request) storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -1495,7 +1458,7 @@ func newOAuthConsentHandler(p *deps.RequestProvider) http.Handler { UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -1880,7 +1843,7 @@ func newOAuthConsentHandler(p *deps.RequestProvider) http.Handler { } cookieDef := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef, @@ -2267,36 +2230,9 @@ func newOAuthTokenHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - siweStoreRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: siweStoreRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -2404,6 +2340,15 @@ func newOAuthTokenHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -3315,36 +3260,9 @@ func newOAuthRevokeHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - siweStoreRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: siweStoreRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -3452,6 +3370,15 @@ func newOAuthRevokeHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -3875,37 +3802,9 @@ func newOAuthJWKSHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - remoteIP := deps.ProvideRemoteIP(request, trustProxy) - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - logger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: logger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -3942,7 +3841,7 @@ func newOAuthJWKSHandler(p *deps.RequestProvider) http.Handler { } authenticatorConfig := appConfig.Authenticator authenticatorPasswordConfig := authenticatorConfig.Password - passwordLogger := password.NewLogger(factory) + logger := password.NewLogger(factory) historyStore := &password.HistoryStore{ Clock: clockClock, SQLBuilder: sqlBuilderApp, @@ -3961,7 +3860,7 @@ func newOAuthJWKSHandler(p *deps.RequestProvider) http.Handler { Store: passwordStore, Config: authenticatorPasswordConfig, Clock: clockClock, - Logger: passwordLogger, + Logger: logger, PasswordHistory: historyStore, PasswordChecker: passwordChecker, Expiry: expiry, @@ -3997,6 +3896,7 @@ func newOAuthJWKSHandler(p *deps.RequestProvider) http.Handler { } testModeConfig := appConfig.TestMode testModeFeatureConfig := featureConfig.TestMode + remoteIP := deps.ProvideRemoteIP(request, trustProxy) codeStoreRedis := &otp.CodeStoreRedis{ Redis: appredisHandle, AppID: appID, @@ -4013,6 +3913,15 @@ func newOAuthJWKSHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -4274,37 +4183,9 @@ func newOAuthUserInfoHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - remoteIP := deps.ProvideRemoteIP(request, trustProxy) - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - logger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: logger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -4341,7 +4222,7 @@ func newOAuthUserInfoHandler(p *deps.RequestProvider) http.Handler { } authenticatorConfig := appConfig.Authenticator authenticatorPasswordConfig := authenticatorConfig.Password - passwordLogger := password.NewLogger(factory) + logger := password.NewLogger(factory) historyStore := &password.HistoryStore{ Clock: clockClock, SQLBuilder: sqlBuilderApp, @@ -4360,7 +4241,7 @@ func newOAuthUserInfoHandler(p *deps.RequestProvider) http.Handler { Store: passwordStore, Config: authenticatorPasswordConfig, Clock: clockClock, - Logger: passwordLogger, + Logger: logger, PasswordHistory: historyStore, PasswordChecker: passwordChecker, Expiry: expiry, @@ -4396,6 +4277,7 @@ func newOAuthUserInfoHandler(p *deps.RequestProvider) http.Handler { } testModeConfig := appConfig.TestMode testModeFeatureConfig := featureConfig.TestMode + remoteIP := deps.ProvideRemoteIP(request, trustProxy) codeStoreRedis := &otp.CodeStoreRedis{ Redis: appredisHandle, AppID: appID, @@ -4412,6 +4294,15 @@ func newOAuthUserInfoHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -4762,36 +4653,9 @@ func newOAuthEndSessionHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - siweStoreRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: siweStoreRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -4899,6 +4763,15 @@ func newOAuthEndSessionHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -5404,36 +5277,9 @@ func newOAuthAppSessionTokenHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - siweStoreRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: siweStoreRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -5541,6 +5387,15 @@ func newOAuthAppSessionTokenHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -6421,36 +6276,9 @@ func newAPIAnonymousUserSignupHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -6558,6 +6386,15 @@ func newAPIAnonymousUserSignupHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -6932,7 +6769,7 @@ func newAPIAnonymousUserSignupHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -6943,7 +6780,7 @@ func newAPIAnonymousUserSignupHandler(p *deps.RequestProvider) http.Handler { cookieManager := deps.NewCookieManager(request, trustProxy, httpConfig) cookieDef := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef, @@ -6972,7 +6809,7 @@ func newAPIAnonymousUserSignupHandler(p *deps.RequestProvider) http.Handler { UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -7427,36 +7264,9 @@ func newAPIAnonymousUserPromotionCodeHandler(p *deps.RequestProvider) http.Handl SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -7564,6 +7374,15 @@ func newAPIAnonymousUserPromotionCodeHandler(p *deps.RequestProvider) http.Handl Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -7938,7 +7757,7 @@ func newAPIAnonymousUserPromotionCodeHandler(p *deps.RequestProvider) http.Handl SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -7949,7 +7768,7 @@ func newAPIAnonymousUserPromotionCodeHandler(p *deps.RequestProvider) http.Handl cookieManager := deps.NewCookieManager(request, trustProxy, httpConfig) cookieDef := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef, @@ -7978,7 +7797,7 @@ func newAPIAnonymousUserPromotionCodeHandler(p *deps.RequestProvider) http.Handl UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -8565,36 +8384,9 @@ func newWebAppLoginHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -8702,6 +8494,15 @@ func newWebAppLoginHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -9076,7 +8877,7 @@ func newWebAppLoginHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -9085,7 +8886,7 @@ func newWebAppLoginHandler(p *deps.RequestProvider) http.Handler { sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -9114,7 +8915,7 @@ func newWebAppLoginHandler(p *deps.RequestProvider) http.Handler { UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -9599,36 +9400,9 @@ func newWebAppSignupHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -9736,6 +9510,15 @@ func newWebAppSignupHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -10110,7 +9893,7 @@ func newWebAppSignupHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -10119,7 +9902,7 @@ func newWebAppSignupHandler(p *deps.RequestProvider) http.Handler { sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -10148,7 +9931,7 @@ func newWebAppSignupHandler(p *deps.RequestProvider) http.Handler { UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -10632,36 +10415,9 @@ func newWebAppPromoteHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -10769,6 +10525,15 @@ func newWebAppPromoteHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -11143,7 +10908,7 @@ func newWebAppPromoteHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -11152,7 +10917,7 @@ func newWebAppPromoteHandler(p *deps.RequestProvider) http.Handler { sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -11181,7 +10946,7 @@ func newWebAppPromoteHandler(p *deps.RequestProvider) http.Handler { UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -11665,36 +11430,9 @@ func newWebAppSelectAccountHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -11802,6 +11540,15 @@ func newWebAppSelectAccountHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -12176,7 +11923,7 @@ func newWebAppSelectAccountHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -12185,7 +11932,7 @@ func newWebAppSelectAccountHandler(p *deps.RequestProvider) http.Handler { sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -12214,7 +11961,7 @@ func newWebAppSelectAccountHandler(p *deps.RequestProvider) http.Handler { UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -12676,36 +12423,9 @@ func newWebAppAuthflowV2VerifyBotProtectionHandler(p *deps.RequestProvider) http SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: handle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(handle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -12813,6 +12533,15 @@ func newWebAppAuthflowV2VerifyBotProtectionHandler(p *deps.RequestProvider) http Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(handle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -13187,7 +12916,7 @@ func newWebAppAuthflowV2VerifyBotProtectionHandler(p *deps.RequestProvider) http SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: handle, AppID: appID, Clock: clockClock, @@ -13196,7 +12925,7 @@ func newWebAppAuthflowV2VerifyBotProtectionHandler(p *deps.RequestProvider) http sessionConfig := appConfig.Session cookieDef := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef, @@ -13235,7 +12964,7 @@ func newWebAppAuthflowV2VerifyBotProtectionHandler(p *deps.RequestProvider) http UserAgentString: userAgentString, AppID: appID, Redis: handle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -13813,36 +13542,9 @@ func newWebAppAuthflowV2SelectAccountHandler(p *deps.RequestProvider) http.Handl SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -13950,6 +13652,15 @@ func newWebAppAuthflowV2SelectAccountHandler(p *deps.RequestProvider) http.Handl Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -14324,7 +14035,7 @@ func newWebAppAuthflowV2SelectAccountHandler(p *deps.RequestProvider) http.Handl SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -14333,7 +14044,7 @@ func newWebAppAuthflowV2SelectAccountHandler(p *deps.RequestProvider) http.Handl sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -14362,7 +14073,7 @@ func newWebAppAuthflowV2SelectAccountHandler(p *deps.RequestProvider) http.Handl UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -14824,36 +14535,9 @@ func newWebAppSSOCallbackHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: handle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(handle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -14961,6 +14645,15 @@ func newWebAppSSOCallbackHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(handle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -15335,7 +15028,7 @@ func newWebAppSSOCallbackHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: handle, AppID: appID, Clock: clockClock, @@ -15344,7 +15037,7 @@ func newWebAppSSOCallbackHandler(p *deps.RequestProvider) http.Handler { sessionConfig := appConfig.Session cookieDef := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef, @@ -15383,7 +15076,7 @@ func newWebAppSSOCallbackHandler(p *deps.RequestProvider) http.Handler { UserAgentString: userAgentString, AppID: appID, Redis: handle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -16057,36 +15750,9 @@ func newWebAppAuthflowSSOCallbackHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: handle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(handle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -16194,6 +15860,15 @@ func newWebAppAuthflowSSOCallbackHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(handle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -16568,7 +16243,7 @@ func newWebAppAuthflowSSOCallbackHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: handle, AppID: appID, Clock: clockClock, @@ -16577,7 +16252,7 @@ func newWebAppAuthflowSSOCallbackHandler(p *deps.RequestProvider) http.Handler { sessionConfig := appConfig.Session cookieDef := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef, @@ -16616,7 +16291,7 @@ func newWebAppAuthflowSSOCallbackHandler(p *deps.RequestProvider) http.Handler { UserAgentString: userAgentString, AppID: appID, Redis: handle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -17290,36 +16965,9 @@ func newWebAppAuthflowV2SSOCallbackHandler(p *deps.RequestProvider) http.Handler SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: handle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(handle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -17427,6 +17075,15 @@ func newWebAppAuthflowV2SSOCallbackHandler(p *deps.RequestProvider) http.Handler Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(handle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -17801,7 +17458,7 @@ func newWebAppAuthflowV2SSOCallbackHandler(p *deps.RequestProvider) http.Handler SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: handle, AppID: appID, Clock: clockClock, @@ -17810,7 +17467,7 @@ func newWebAppAuthflowV2SSOCallbackHandler(p *deps.RequestProvider) http.Handler sessionConfig := appConfig.Session cookieDef := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef, @@ -17849,7 +17506,7 @@ func newWebAppAuthflowV2SSOCallbackHandler(p *deps.RequestProvider) http.Handler UserAgentString: userAgentString, AppID: appID, Redis: handle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -18545,36 +18202,9 @@ func newWechatAuthHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -18682,6 +18312,15 @@ func newWechatAuthHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -19056,7 +18695,7 @@ func newWechatAuthHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -19065,7 +18704,7 @@ func newWechatAuthHandler(p *deps.RequestProvider) http.Handler { sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -19094,7 +18733,7 @@ func newWechatAuthHandler(p *deps.RequestProvider) http.Handler { UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -19563,36 +19202,9 @@ func newWechatCallbackHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -19700,6 +19312,15 @@ func newWechatCallbackHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -20074,7 +19695,7 @@ func newWechatCallbackHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -20083,7 +19704,7 @@ func newWechatCallbackHandler(p *deps.RequestProvider) http.Handler { sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -20112,7 +19733,7 @@ func newWechatCallbackHandler(p *deps.RequestProvider) http.Handler { UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -20586,36 +20207,9 @@ func newWebAppEnterLoginIDHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -20723,6 +20317,15 @@ func newWebAppEnterLoginIDHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -21097,7 +20700,7 @@ func newWebAppEnterLoginIDHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -21106,7 +20709,7 @@ func newWebAppEnterLoginIDHandler(p *deps.RequestProvider) http.Handler { sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -21135,7 +20738,7 @@ func newWebAppEnterLoginIDHandler(p *deps.RequestProvider) http.Handler { UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -21611,36 +21214,9 @@ func newWebAppEnterPasswordHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -21748,6 +21324,15 @@ func newWebAppEnterPasswordHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -22122,7 +21707,7 @@ func newWebAppEnterPasswordHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -22131,7 +21716,7 @@ func newWebAppEnterPasswordHandler(p *deps.RequestProvider) http.Handler { sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -22160,7 +21745,7 @@ func newWebAppEnterPasswordHandler(p *deps.RequestProvider) http.Handler { UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -22633,36 +22218,9 @@ func newWebConfirmTerminateOtherSessionsHandler(p *deps.RequestProvider) http.Ha SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -22770,6 +22328,15 @@ func newWebConfirmTerminateOtherSessionsHandler(p *deps.RequestProvider) http.Ha Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -23144,7 +22711,7 @@ func newWebConfirmTerminateOtherSessionsHandler(p *deps.RequestProvider) http.Ha SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -23153,7 +22720,7 @@ func newWebConfirmTerminateOtherSessionsHandler(p *deps.RequestProvider) http.Ha sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -23182,7 +22749,7 @@ func newWebConfirmTerminateOtherSessionsHandler(p *deps.RequestProvider) http.Ha UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -23652,36 +23219,9 @@ func newWebAppUsePasskeyHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -23789,6 +23329,15 @@ func newWebAppUsePasskeyHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -24163,7 +23712,7 @@ func newWebAppUsePasskeyHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -24172,7 +23721,7 @@ func newWebAppUsePasskeyHandler(p *deps.RequestProvider) http.Handler { sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -24201,7 +23750,7 @@ func newWebAppUsePasskeyHandler(p *deps.RequestProvider) http.Handler { UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -24674,36 +24223,9 @@ func newWebAppCreatePasswordHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -24811,6 +24333,15 @@ func newWebAppCreatePasswordHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -25185,7 +24716,7 @@ func newWebAppCreatePasswordHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -25194,7 +24725,7 @@ func newWebAppCreatePasswordHandler(p *deps.RequestProvider) http.Handler { sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -25223,7 +24754,7 @@ func newWebAppCreatePasswordHandler(p *deps.RequestProvider) http.Handler { UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -25697,36 +25228,9 @@ func newWebAppCreatePasskeyHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -25834,6 +25338,15 @@ func newWebAppCreatePasskeyHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -26208,7 +25721,7 @@ func newWebAppCreatePasskeyHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -26217,7 +25730,7 @@ func newWebAppCreatePasskeyHandler(p *deps.RequestProvider) http.Handler { sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -26246,7 +25759,7 @@ func newWebAppCreatePasskeyHandler(p *deps.RequestProvider) http.Handler { UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -26719,36 +26232,9 @@ func newWebAppPromptCreatePasskeyHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -26856,6 +26342,15 @@ func newWebAppPromptCreatePasskeyHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -27230,7 +26725,7 @@ func newWebAppPromptCreatePasskeyHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -27239,7 +26734,7 @@ func newWebAppPromptCreatePasskeyHandler(p *deps.RequestProvider) http.Handler { sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -27268,7 +26763,7 @@ func newWebAppPromptCreatePasskeyHandler(p *deps.RequestProvider) http.Handler { UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -27741,36 +27236,9 @@ func newWebAppSetupTOTPHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -27878,6 +27346,15 @@ func newWebAppSetupTOTPHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -28252,7 +27729,7 @@ func newWebAppSetupTOTPHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -28261,7 +27738,7 @@ func newWebAppSetupTOTPHandler(p *deps.RequestProvider) http.Handler { sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -28290,7 +27767,7 @@ func newWebAppSetupTOTPHandler(p *deps.RequestProvider) http.Handler { UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -28765,36 +28242,9 @@ func newWebAppEnterTOTPHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -28902,6 +28352,15 @@ func newWebAppEnterTOTPHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -29276,7 +28735,7 @@ func newWebAppEnterTOTPHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -29285,7 +28744,7 @@ func newWebAppEnterTOTPHandler(p *deps.RequestProvider) http.Handler { sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -29314,7 +28773,7 @@ func newWebAppEnterTOTPHandler(p *deps.RequestProvider) http.Handler { UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -29787,36 +29246,9 @@ func newWebAppSetupOOBOTPHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -29924,6 +29356,15 @@ func newWebAppSetupOOBOTPHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -30298,7 +29739,7 @@ func newWebAppSetupOOBOTPHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -30307,7 +29748,7 @@ func newWebAppSetupOOBOTPHandler(p *deps.RequestProvider) http.Handler { sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -30336,7 +29777,7 @@ func newWebAppSetupOOBOTPHandler(p *deps.RequestProvider) http.Handler { UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -30809,36 +30250,9 @@ func newWebAppEnterOOBOTPHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -30946,6 +30360,15 @@ func newWebAppEnterOOBOTPHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -31320,7 +30743,7 @@ func newWebAppEnterOOBOTPHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -31329,7 +30752,7 @@ func newWebAppEnterOOBOTPHandler(p *deps.RequestProvider) http.Handler { sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -31358,7 +30781,7 @@ func newWebAppEnterOOBOTPHandler(p *deps.RequestProvider) http.Handler { UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -31835,36 +31258,9 @@ func newWebAppSetupWhatsappOTPHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -31972,6 +31368,15 @@ func newWebAppSetupWhatsappOTPHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -32346,7 +31751,7 @@ func newWebAppSetupWhatsappOTPHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -32355,7 +31760,7 @@ func newWebAppSetupWhatsappOTPHandler(p *deps.RequestProvider) http.Handler { sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -32384,7 +31789,7 @@ func newWebAppSetupWhatsappOTPHandler(p *deps.RequestProvider) http.Handler { UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -32857,36 +32262,9 @@ func newWebAppWhatsappOTPHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -32994,6 +32372,15 @@ func newWebAppWhatsappOTPHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -33368,7 +32755,7 @@ func newWebAppWhatsappOTPHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -33377,7 +32764,7 @@ func newWebAppWhatsappOTPHandler(p *deps.RequestProvider) http.Handler { sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -33406,7 +32793,7 @@ func newWebAppWhatsappOTPHandler(p *deps.RequestProvider) http.Handler { UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -33883,36 +33270,9 @@ func newWebAppSetupLoginLinkOTPHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -34020,6 +33380,15 @@ func newWebAppSetupLoginLinkOTPHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -34394,7 +33763,7 @@ func newWebAppSetupLoginLinkOTPHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -34403,7 +33772,7 @@ func newWebAppSetupLoginLinkOTPHandler(p *deps.RequestProvider) http.Handler { sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -34432,7 +33801,7 @@ func newWebAppSetupLoginLinkOTPHandler(p *deps.RequestProvider) http.Handler { UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -34944,27 +34313,9 @@ func newWebAppLoginLinkOTPHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: handle, - AppID: appID, - Clock: clockClock, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -35416,7 +34767,7 @@ func newWebAppLoginLinkOTPHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: handle, AppID: appID, Clock: clockClock, @@ -35425,7 +34776,7 @@ func newWebAppLoginLinkOTPHandler(p *deps.RequestProvider) http.Handler { sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -35454,7 +34805,7 @@ func newWebAppLoginLinkOTPHandler(p *deps.RequestProvider) http.Handler { UserAgentString: userAgentString, AppID: appID, Redis: handle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -35974,27 +35325,9 @@ func newWebAppVerifyLoginLinkOTPHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: handle, - AppID: appID, - Clock: clockClock, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -36446,7 +35779,7 @@ func newWebAppVerifyLoginLinkOTPHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: handle, AppID: appID, Clock: clockClock, @@ -36455,7 +35788,7 @@ func newWebAppVerifyLoginLinkOTPHandler(p *deps.RequestProvider) http.Handler { sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -36484,7 +35817,7 @@ func newWebAppVerifyLoginLinkOTPHandler(p *deps.RequestProvider) http.Handler { UserAgentString: userAgentString, AppID: appID, Redis: handle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -37016,27 +36349,9 @@ func newWebAppAuthflowV2VerifyLoginLinkOTPHandler(p *deps.RequestProvider) http. SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: handle, - AppID: appID, - Clock: clockClock, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -37488,7 +36803,7 @@ func newWebAppAuthflowV2VerifyLoginLinkOTPHandler(p *deps.RequestProvider) http. SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: handle, AppID: appID, Clock: clockClock, @@ -37497,7 +36812,7 @@ func newWebAppAuthflowV2VerifyLoginLinkOTPHandler(p *deps.RequestProvider) http. sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -37526,7 +36841,7 @@ func newWebAppAuthflowV2VerifyLoginLinkOTPHandler(p *deps.RequestProvider) http. UserAgentString: userAgentString, AppID: appID, Redis: handle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -38009,36 +37324,9 @@ func newWebAppEnterRecoveryCodeHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -38146,6 +37434,15 @@ func newWebAppEnterRecoveryCodeHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -38520,7 +37817,7 @@ func newWebAppEnterRecoveryCodeHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -38529,7 +37826,7 @@ func newWebAppEnterRecoveryCodeHandler(p *deps.RequestProvider) http.Handler { sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -38558,7 +37855,7 @@ func newWebAppEnterRecoveryCodeHandler(p *deps.RequestProvider) http.Handler { UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -39031,36 +38328,9 @@ func newWebAppSetupRecoveryCodeHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -39168,6 +38438,15 @@ func newWebAppSetupRecoveryCodeHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -39542,7 +38821,7 @@ func newWebAppSetupRecoveryCodeHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -39551,7 +38830,7 @@ func newWebAppSetupRecoveryCodeHandler(p *deps.RequestProvider) http.Handler { sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -39580,7 +38859,7 @@ func newWebAppSetupRecoveryCodeHandler(p *deps.RequestProvider) http.Handler { UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -40049,36 +39328,9 @@ func newWebAppVerifyIdentityHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -40186,6 +39438,15 @@ func newWebAppVerifyIdentityHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -40560,7 +39821,7 @@ func newWebAppVerifyIdentityHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -40569,7 +39830,7 @@ func newWebAppVerifyIdentityHandler(p *deps.RequestProvider) http.Handler { sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -40598,7 +39859,7 @@ func newWebAppVerifyIdentityHandler(p *deps.RequestProvider) http.Handler { UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -41071,36 +40332,9 @@ func newWebAppVerifyIdentitySuccessHandler(p *deps.RequestProvider) http.Handler SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -41208,6 +40442,15 @@ func newWebAppVerifyIdentitySuccessHandler(p *deps.RequestProvider) http.Handler Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -41582,7 +40825,7 @@ func newWebAppVerifyIdentitySuccessHandler(p *deps.RequestProvider) http.Handler SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -41591,7 +40834,7 @@ func newWebAppVerifyIdentitySuccessHandler(p *deps.RequestProvider) http.Handler sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -41620,7 +40863,7 @@ func newWebAppVerifyIdentitySuccessHandler(p *deps.RequestProvider) http.Handler UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -42089,36 +41332,9 @@ func newWebAppForgotPasswordHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -42226,6 +41442,15 @@ func newWebAppForgotPasswordHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -42600,7 +41825,7 @@ func newWebAppForgotPasswordHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -42609,7 +41834,7 @@ func newWebAppForgotPasswordHandler(p *deps.RequestProvider) http.Handler { sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -42638,7 +41863,7 @@ func newWebAppForgotPasswordHandler(p *deps.RequestProvider) http.Handler { UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -43117,36 +42342,9 @@ func newWebAppForgotPasswordSuccessHandler(p *deps.RequestProvider) http.Handler SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -43254,6 +42452,15 @@ func newWebAppForgotPasswordSuccessHandler(p *deps.RequestProvider) http.Handler Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -43628,7 +42835,7 @@ func newWebAppForgotPasswordSuccessHandler(p *deps.RequestProvider) http.Handler SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -43637,7 +42844,7 @@ func newWebAppForgotPasswordSuccessHandler(p *deps.RequestProvider) http.Handler sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -43666,7 +42873,7 @@ func newWebAppForgotPasswordSuccessHandler(p *deps.RequestProvider) http.Handler UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -44135,36 +43342,9 @@ func newWebAppResetPasswordHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -44272,6 +43452,15 @@ func newWebAppResetPasswordHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -44646,7 +43835,7 @@ func newWebAppResetPasswordHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -44655,7 +43844,7 @@ func newWebAppResetPasswordHandler(p *deps.RequestProvider) http.Handler { sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -44684,7 +43873,7 @@ func newWebAppResetPasswordHandler(p *deps.RequestProvider) http.Handler { UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -45155,36 +44344,9 @@ func newWebAppResetPasswordSuccessHandler(p *deps.RequestProvider) http.Handler SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -45292,6 +44454,15 @@ func newWebAppResetPasswordSuccessHandler(p *deps.RequestProvider) http.Handler Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -45666,7 +44837,7 @@ func newWebAppResetPasswordSuccessHandler(p *deps.RequestProvider) http.Handler SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -45675,7 +44846,7 @@ func newWebAppResetPasswordSuccessHandler(p *deps.RequestProvider) http.Handler sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -45704,7 +44875,7 @@ func newWebAppResetPasswordSuccessHandler(p *deps.RequestProvider) http.Handler UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -46173,36 +45344,9 @@ func newWebAppSettingsHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -46310,6 +45454,15 @@ func newWebAppSettingsHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -46684,7 +45837,7 @@ func newWebAppSettingsHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -46693,7 +45846,7 @@ func newWebAppSettingsHandler(p *deps.RequestProvider) http.Handler { sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -46722,7 +45875,7 @@ func newWebAppSettingsHandler(p *deps.RequestProvider) http.Handler { UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -47226,36 +46379,9 @@ func newWebAppAuthflowV2SettingsHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -47363,6 +46489,15 @@ func newWebAppAuthflowV2SettingsHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -47737,7 +46872,7 @@ func newWebAppAuthflowV2SettingsHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -47746,7 +46881,7 @@ func newWebAppAuthflowV2SettingsHandler(p *deps.RequestProvider) http.Handler { sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -47775,7 +46910,7 @@ func newWebAppAuthflowV2SettingsHandler(p *deps.RequestProvider) http.Handler { UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -48274,36 +47409,9 @@ func newWebAppSettingsProfileHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -48411,6 +47519,15 @@ func newWebAppSettingsProfileHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -48785,7 +47902,7 @@ func newWebAppSettingsProfileHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -48794,7 +47911,7 @@ func newWebAppSettingsProfileHandler(p *deps.RequestProvider) http.Handler { sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -48823,7 +47940,7 @@ func newWebAppSettingsProfileHandler(p *deps.RequestProvider) http.Handler { UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -49303,36 +48420,9 @@ func newWebAppSettingsProfileEditHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -49440,6 +48530,15 @@ func newWebAppSettingsProfileEditHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -49814,7 +48913,7 @@ func newWebAppSettingsProfileEditHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -49823,7 +48922,7 @@ func newWebAppSettingsProfileEditHandler(p *deps.RequestProvider) http.Handler { sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -49852,7 +48951,7 @@ func newWebAppSettingsProfileEditHandler(p *deps.RequestProvider) http.Handler { UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -50344,36 +49443,9 @@ func newWebAppAuthflowV2SettingsProfileEditHandler(p *deps.RequestProvider) http SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -50481,6 +49553,15 @@ func newWebAppAuthflowV2SettingsProfileEditHandler(p *deps.RequestProvider) http Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -50855,7 +49936,7 @@ func newWebAppAuthflowV2SettingsProfileEditHandler(p *deps.RequestProvider) http SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -50864,7 +49945,7 @@ func newWebAppAuthflowV2SettingsProfileEditHandler(p *deps.RequestProvider) http sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -50893,7 +49974,7 @@ func newWebAppAuthflowV2SettingsProfileEditHandler(p *deps.RequestProvider) http UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -51387,36 +50468,9 @@ func newWebAppSettingsIdentityHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -51524,6 +50578,15 @@ func newWebAppSettingsIdentityHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -51898,7 +50961,7 @@ func newWebAppSettingsIdentityHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -51907,7 +50970,7 @@ func newWebAppSettingsIdentityHandler(p *deps.RequestProvider) http.Handler { sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -51936,7 +50999,7 @@ func newWebAppSettingsIdentityHandler(p *deps.RequestProvider) http.Handler { UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -52413,36 +51476,9 @@ func newWebAppSettingsBiometricHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -52550,6 +51586,15 @@ func newWebAppSettingsBiometricHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -52924,7 +51969,7 @@ func newWebAppSettingsBiometricHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -52933,7 +51978,7 @@ func newWebAppSettingsBiometricHandler(p *deps.RequestProvider) http.Handler { sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -52962,7 +52007,7 @@ func newWebAppSettingsBiometricHandler(p *deps.RequestProvider) http.Handler { UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -53432,36 +52477,9 @@ func newWebAppAuthflowV2SettingsBiometricHandler(p *deps.RequestProvider) http.H SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -53569,6 +52587,15 @@ func newWebAppAuthflowV2SettingsBiometricHandler(p *deps.RequestProvider) http.H Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -53943,7 +52970,7 @@ func newWebAppAuthflowV2SettingsBiometricHandler(p *deps.RequestProvider) http.H SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -53952,7 +52979,7 @@ func newWebAppAuthflowV2SettingsBiometricHandler(p *deps.RequestProvider) http.H sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -53981,7 +53008,7 @@ func newWebAppAuthflowV2SettingsBiometricHandler(p *deps.RequestProvider) http.H UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -54491,36 +53518,9 @@ func newWebAppSettingsMFAHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -54628,6 +53628,15 @@ func newWebAppSettingsMFAHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -55002,7 +54011,7 @@ func newWebAppSettingsMFAHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -55011,7 +54020,7 @@ func newWebAppSettingsMFAHandler(p *deps.RequestProvider) http.Handler { sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -55040,7 +54049,7 @@ func newWebAppSettingsMFAHandler(p *deps.RequestProvider) http.Handler { UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -55521,36 +54530,9 @@ func newWebAppAuthflowV2SettingsMFAHandler(p *deps.RequestProvider) http.Handler SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -55658,6 +54640,15 @@ func newWebAppAuthflowV2SettingsMFAHandler(p *deps.RequestProvider) http.Handler Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -56032,7 +55023,7 @@ func newWebAppAuthflowV2SettingsMFAHandler(p *deps.RequestProvider) http.Handler SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -56041,7 +55032,7 @@ func newWebAppAuthflowV2SettingsMFAHandler(p *deps.RequestProvider) http.Handler sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -56070,7 +55061,7 @@ func newWebAppAuthflowV2SettingsMFAHandler(p *deps.RequestProvider) http.Handler UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -56552,36 +55543,9 @@ func newWebAppAuthflowV2SettingsMFAViewRecoveryCodeHandler(p *deps.RequestProvid SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -56689,6 +55653,15 @@ func newWebAppAuthflowV2SettingsMFAViewRecoveryCodeHandler(p *deps.RequestProvid Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -57063,7 +56036,7 @@ func newWebAppAuthflowV2SettingsMFAViewRecoveryCodeHandler(p *deps.RequestProvid SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -57072,7 +56045,7 @@ func newWebAppAuthflowV2SettingsMFAViewRecoveryCodeHandler(p *deps.RequestProvid sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -57101,7 +56074,7 @@ func newWebAppAuthflowV2SettingsMFAViewRecoveryCodeHandler(p *deps.RequestProvid UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -57599,36 +56572,9 @@ func newWebAppAuthflowV2SettingsMFACreatePasswordHandler(p *deps.RequestProvider SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -57736,6 +56682,15 @@ func newWebAppAuthflowV2SettingsMFACreatePasswordHandler(p *deps.RequestProvider Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -58110,7 +57065,7 @@ func newWebAppAuthflowV2SettingsMFACreatePasswordHandler(p *deps.RequestProvider SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -58119,7 +57074,7 @@ func newWebAppAuthflowV2SettingsMFACreatePasswordHandler(p *deps.RequestProvider sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -58148,7 +57103,7 @@ func newWebAppAuthflowV2SettingsMFACreatePasswordHandler(p *deps.RequestProvider UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -58656,36 +57611,9 @@ func newWebAppAuthflowV2SettingsMFAPasswordHandler(p *deps.RequestProvider) http SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -58793,6 +57721,15 @@ func newWebAppAuthflowV2SettingsMFAPasswordHandler(p *deps.RequestProvider) http Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -59167,7 +58104,7 @@ func newWebAppAuthflowV2SettingsMFAPasswordHandler(p *deps.RequestProvider) http SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -59176,7 +58113,7 @@ func newWebAppAuthflowV2SettingsMFAPasswordHandler(p *deps.RequestProvider) http sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -59205,7 +58142,7 @@ func newWebAppAuthflowV2SettingsMFAPasswordHandler(p *deps.RequestProvider) http UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -59713,36 +58650,9 @@ func newWebAppAuthflowV2SettingsMFAChangePasswordHandler(p *deps.RequestProvider SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -59850,6 +58760,15 @@ func newWebAppAuthflowV2SettingsMFAChangePasswordHandler(p *deps.RequestProvider Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -60224,7 +59143,7 @@ func newWebAppAuthflowV2SettingsMFAChangePasswordHandler(p *deps.RequestProvider SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -60233,7 +59152,7 @@ func newWebAppAuthflowV2SettingsMFAChangePasswordHandler(p *deps.RequestProvider sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -60262,7 +59181,7 @@ func newWebAppAuthflowV2SettingsMFAChangePasswordHandler(p *deps.RequestProvider UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -60759,36 +59678,9 @@ func newWebAppSettingsTOTPHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -60896,6 +59788,15 @@ func newWebAppSettingsTOTPHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -61270,7 +60171,7 @@ func newWebAppSettingsTOTPHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -61279,7 +60180,7 @@ func newWebAppSettingsTOTPHandler(p *deps.RequestProvider) http.Handler { sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -61308,7 +60209,7 @@ func newWebAppSettingsTOTPHandler(p *deps.RequestProvider) http.Handler { UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -61778,36 +60679,9 @@ func newWebAppAuthflowV2SettingsTOTPHandler(p *deps.RequestProvider) http.Handle SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -61915,6 +60789,15 @@ func newWebAppAuthflowV2SettingsTOTPHandler(p *deps.RequestProvider) http.Handle Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -62289,7 +61172,7 @@ func newWebAppAuthflowV2SettingsTOTPHandler(p *deps.RequestProvider) http.Handle SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -62298,7 +61181,7 @@ func newWebAppAuthflowV2SettingsTOTPHandler(p *deps.RequestProvider) http.Handle sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -62327,7 +61210,7 @@ func newWebAppAuthflowV2SettingsTOTPHandler(p *deps.RequestProvider) http.Handle UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -62847,36 +61730,9 @@ func newWebAppAuthflowV2SettingsMFACreateTOTPHandler(p *deps.RequestProvider) ht SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -62984,6 +61840,15 @@ func newWebAppAuthflowV2SettingsMFACreateTOTPHandler(p *deps.RequestProvider) ht Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -63358,7 +62223,7 @@ func newWebAppAuthflowV2SettingsMFACreateTOTPHandler(p *deps.RequestProvider) ht SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -63367,7 +62232,7 @@ func newWebAppAuthflowV2SettingsMFACreateTOTPHandler(p *deps.RequestProvider) ht sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -63396,7 +62261,7 @@ func newWebAppAuthflowV2SettingsMFACreateTOTPHandler(p *deps.RequestProvider) ht UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -63904,36 +62769,9 @@ func newWebAppAuthflowV2SettingsMFAEnterTOTPHandler(p *deps.RequestProvider) htt SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -64041,6 +62879,15 @@ func newWebAppAuthflowV2SettingsMFAEnterTOTPHandler(p *deps.RequestProvider) htt Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -64415,7 +63262,7 @@ func newWebAppAuthflowV2SettingsMFAEnterTOTPHandler(p *deps.RequestProvider) htt SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -64424,7 +63271,7 @@ func newWebAppAuthflowV2SettingsMFAEnterTOTPHandler(p *deps.RequestProvider) htt sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -64453,7 +63300,7 @@ func newWebAppAuthflowV2SettingsMFAEnterTOTPHandler(p *deps.RequestProvider) htt UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -64962,36 +63809,9 @@ func newWebAppAuthflowV2SettingsOOBOTPHandler(p *deps.RequestProvider) http.Hand SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -65099,6 +63919,15 @@ func newWebAppAuthflowV2SettingsOOBOTPHandler(p *deps.RequestProvider) http.Hand Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -65473,7 +64302,7 @@ func newWebAppAuthflowV2SettingsOOBOTPHandler(p *deps.RequestProvider) http.Hand SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -65482,7 +64311,7 @@ func newWebAppAuthflowV2SettingsOOBOTPHandler(p *deps.RequestProvider) http.Hand sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -65511,7 +64340,7 @@ func newWebAppAuthflowV2SettingsOOBOTPHandler(p *deps.RequestProvider) http.Hand UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -66032,36 +64861,9 @@ func newWebAppAuthflowV2SettingsMFACreateOOBOTPHandler(p *deps.RequestProvider) SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -66169,6 +64971,15 @@ func newWebAppAuthflowV2SettingsMFACreateOOBOTPHandler(p *deps.RequestProvider) Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -66543,7 +65354,7 @@ func newWebAppAuthflowV2SettingsMFACreateOOBOTPHandler(p *deps.RequestProvider) SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -66552,7 +65363,7 @@ func newWebAppAuthflowV2SettingsMFACreateOOBOTPHandler(p *deps.RequestProvider) sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -66581,7 +65392,7 @@ func newWebAppAuthflowV2SettingsMFACreateOOBOTPHandler(p *deps.RequestProvider) UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -67089,36 +65900,9 @@ func newWebAppAuthflowV2SettingsMFAEnterOOBOTPHandler(p *deps.RequestProvider) h SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -67226,6 +66010,15 @@ func newWebAppAuthflowV2SettingsMFAEnterOOBOTPHandler(p *deps.RequestProvider) h Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -67600,7 +66393,7 @@ func newWebAppAuthflowV2SettingsMFAEnterOOBOTPHandler(p *deps.RequestProvider) h SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -67609,7 +66402,7 @@ func newWebAppAuthflowV2SettingsMFAEnterOOBOTPHandler(p *deps.RequestProvider) h sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -67638,7 +66431,7 @@ func newWebAppAuthflowV2SettingsMFAEnterOOBOTPHandler(p *deps.RequestProvider) h UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -68138,36 +66931,9 @@ func newWebAppSettingsPasskeyHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -68275,6 +67041,15 @@ func newWebAppSettingsPasskeyHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -68649,7 +67424,7 @@ func newWebAppSettingsPasskeyHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -68658,7 +67433,7 @@ func newWebAppSettingsPasskeyHandler(p *deps.RequestProvider) http.Handler { sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -68687,7 +67462,7 @@ func newWebAppSettingsPasskeyHandler(p *deps.RequestProvider) http.Handler { UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -69157,36 +67932,9 @@ func newWebAppAuthflowV2SettingsChangePasskeyHandler(p *deps.RequestProvider) ht SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -69294,6 +68042,15 @@ func newWebAppAuthflowV2SettingsChangePasskeyHandler(p *deps.RequestProvider) ht Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -69668,7 +68425,7 @@ func newWebAppAuthflowV2SettingsChangePasskeyHandler(p *deps.RequestProvider) ht SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -69677,7 +68434,7 @@ func newWebAppAuthflowV2SettingsChangePasskeyHandler(p *deps.RequestProvider) ht sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -69706,7 +68463,7 @@ func newWebAppAuthflowV2SettingsChangePasskeyHandler(p *deps.RequestProvider) ht UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -70235,36 +68992,9 @@ func newWebAppSettingsOOBOTPHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -70372,6 +69102,15 @@ func newWebAppSettingsOOBOTPHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -70746,7 +69485,7 @@ func newWebAppSettingsOOBOTPHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -70755,7 +69494,7 @@ func newWebAppSettingsOOBOTPHandler(p *deps.RequestProvider) http.Handler { sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -70784,7 +69523,7 @@ func newWebAppSettingsOOBOTPHandler(p *deps.RequestProvider) http.Handler { UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -71254,36 +69993,9 @@ func newWebAppSettingsRecoveryCodeHandler(p *deps.RequestProvider) http.Handler SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -71391,6 +70103,15 @@ func newWebAppSettingsRecoveryCodeHandler(p *deps.RequestProvider) http.Handler Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -71765,7 +70486,7 @@ func newWebAppSettingsRecoveryCodeHandler(p *deps.RequestProvider) http.Handler SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -71774,7 +70495,7 @@ func newWebAppSettingsRecoveryCodeHandler(p *deps.RequestProvider) http.Handler sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -71803,7 +70524,7 @@ func newWebAppSettingsRecoveryCodeHandler(p *deps.RequestProvider) http.Handler UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -72274,36 +70995,9 @@ func newWebAppSettingsSessionsHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -72411,6 +71105,15 @@ func newWebAppSettingsSessionsHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -72785,7 +71488,7 @@ func newWebAppSettingsSessionsHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -72794,7 +71497,7 @@ func newWebAppSettingsSessionsHandler(p *deps.RequestProvider) http.Handler { sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -72823,7 +71526,7 @@ func newWebAppSettingsSessionsHandler(p *deps.RequestProvider) http.Handler { UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -73318,36 +72021,9 @@ func newWebAppAuthflowV2SettingsSessionsHandler(p *deps.RequestProvider) http.Ha SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -73455,6 +72131,15 @@ func newWebAppAuthflowV2SettingsSessionsHandler(p *deps.RequestProvider) http.Ha Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -73829,7 +72514,7 @@ func newWebAppAuthflowV2SettingsSessionsHandler(p *deps.RequestProvider) http.Ha SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -73838,7 +72523,7 @@ func newWebAppAuthflowV2SettingsSessionsHandler(p *deps.RequestProvider) http.Ha sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -73867,7 +72552,7 @@ func newWebAppAuthflowV2SettingsSessionsHandler(p *deps.RequestProvider) http.Ha UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -74374,36 +73059,9 @@ func newWebAppForceChangePasswordHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -74511,6 +73169,15 @@ func newWebAppForceChangePasswordHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -74885,7 +73552,7 @@ func newWebAppForceChangePasswordHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -74894,7 +73561,7 @@ func newWebAppForceChangePasswordHandler(p *deps.RequestProvider) http.Handler { sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -74923,7 +73590,7 @@ func newWebAppForceChangePasswordHandler(p *deps.RequestProvider) http.Handler { UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -75398,36 +74065,9 @@ func newWebAppSettingsChangePasswordHandler(p *deps.RequestProvider) http.Handle SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -75535,6 +74175,15 @@ func newWebAppSettingsChangePasswordHandler(p *deps.RequestProvider) http.Handle Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -75909,7 +74558,7 @@ func newWebAppSettingsChangePasswordHandler(p *deps.RequestProvider) http.Handle SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -75918,7 +74567,7 @@ func newWebAppSettingsChangePasswordHandler(p *deps.RequestProvider) http.Handle sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -75947,7 +74596,7 @@ func newWebAppSettingsChangePasswordHandler(p *deps.RequestProvider) http.Handle UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -76417,36 +75066,9 @@ func newWebAppAuthflowV2SettingsChangePasswordHandler(p *deps.RequestProvider) h SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -76554,6 +75176,15 @@ func newWebAppAuthflowV2SettingsChangePasswordHandler(p *deps.RequestProvider) h Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -76928,7 +75559,7 @@ func newWebAppAuthflowV2SettingsChangePasswordHandler(p *deps.RequestProvider) h SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -76937,7 +75568,7 @@ func newWebAppAuthflowV2SettingsChangePasswordHandler(p *deps.RequestProvider) h sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -76966,7 +75597,7 @@ func newWebAppAuthflowV2SettingsChangePasswordHandler(p *deps.RequestProvider) h UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -77463,36 +76094,9 @@ func newWebAppForceChangeSecondaryPasswordHandler(p *deps.RequestProvider) http. SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -77600,6 +76204,15 @@ func newWebAppForceChangeSecondaryPasswordHandler(p *deps.RequestProvider) http. Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -77974,7 +76587,7 @@ func newWebAppForceChangeSecondaryPasswordHandler(p *deps.RequestProvider) http. SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -77983,7 +76596,7 @@ func newWebAppForceChangeSecondaryPasswordHandler(p *deps.RequestProvider) http. sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -78012,7 +76625,7 @@ func newWebAppForceChangeSecondaryPasswordHandler(p *deps.RequestProvider) http. UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -78487,36 +77100,9 @@ func newWebAppSettingsChangeSecondaryPasswordHandler(p *deps.RequestProvider) ht SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -78624,6 +77210,15 @@ func newWebAppSettingsChangeSecondaryPasswordHandler(p *deps.RequestProvider) ht Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -78998,7 +77593,7 @@ func newWebAppSettingsChangeSecondaryPasswordHandler(p *deps.RequestProvider) ht SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -79007,7 +77602,7 @@ func newWebAppSettingsChangeSecondaryPasswordHandler(p *deps.RequestProvider) ht sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -79036,7 +77631,7 @@ func newWebAppSettingsChangeSecondaryPasswordHandler(p *deps.RequestProvider) ht UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -79506,36 +78101,9 @@ func newWebAppSettingsDeleteAccountHandler(p *deps.RequestProvider) http.Handler SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -79643,6 +78211,15 @@ func newWebAppSettingsDeleteAccountHandler(p *deps.RequestProvider) http.Handler Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -80017,7 +78594,7 @@ func newWebAppSettingsDeleteAccountHandler(p *deps.RequestProvider) http.Handler SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -80026,7 +78603,7 @@ func newWebAppSettingsDeleteAccountHandler(p *deps.RequestProvider) http.Handler sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -80055,7 +78632,7 @@ func newWebAppSettingsDeleteAccountHandler(p *deps.RequestProvider) http.Handler UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -80536,36 +79113,9 @@ func newWebAppAuthflowV2SettingsDeleteAccountHandler(p *deps.RequestProvider) ht SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -80673,6 +79223,15 @@ func newWebAppAuthflowV2SettingsDeleteAccountHandler(p *deps.RequestProvider) ht Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -81047,7 +79606,7 @@ func newWebAppAuthflowV2SettingsDeleteAccountHandler(p *deps.RequestProvider) ht SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -81056,7 +79615,7 @@ func newWebAppAuthflowV2SettingsDeleteAccountHandler(p *deps.RequestProvider) ht sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -81085,7 +79644,7 @@ func newWebAppAuthflowV2SettingsDeleteAccountHandler(p *deps.RequestProvider) ht UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -81577,36 +80136,9 @@ func newWebAppSettingsDeleteAccountSuccessHandler(p *deps.RequestProvider) http. SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -81714,6 +80246,15 @@ func newWebAppSettingsDeleteAccountSuccessHandler(p *deps.RequestProvider) http. Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -82088,7 +80629,7 @@ func newWebAppSettingsDeleteAccountSuccessHandler(p *deps.RequestProvider) http. SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -82097,7 +80638,7 @@ func newWebAppSettingsDeleteAccountSuccessHandler(p *deps.RequestProvider) http. sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -82126,7 +80667,7 @@ func newWebAppSettingsDeleteAccountSuccessHandler(p *deps.RequestProvider) http. UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -82599,36 +81140,9 @@ func newWebAppAuthflowV2SettingsDeleteAccountSuccessHandler(p *deps.RequestProvi SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -82736,6 +81250,15 @@ func newWebAppAuthflowV2SettingsDeleteAccountSuccessHandler(p *deps.RequestProvi Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -83110,7 +81633,7 @@ func newWebAppAuthflowV2SettingsDeleteAccountSuccessHandler(p *deps.RequestProvi SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -83119,7 +81642,7 @@ func newWebAppAuthflowV2SettingsDeleteAccountSuccessHandler(p *deps.RequestProvi sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -83148,7 +81671,7 @@ func newWebAppAuthflowV2SettingsDeleteAccountSuccessHandler(p *deps.RequestProvi UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -83621,36 +82144,9 @@ func newWebAppAuthflowV2SettingsAdvancedSettingsHandler(p *deps.RequestProvider) SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -83758,6 +82254,15 @@ func newWebAppAuthflowV2SettingsAdvancedSettingsHandler(p *deps.RequestProvider) Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -84132,7 +82637,7 @@ func newWebAppAuthflowV2SettingsAdvancedSettingsHandler(p *deps.RequestProvider) SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -84141,7 +82646,7 @@ func newWebAppAuthflowV2SettingsAdvancedSettingsHandler(p *deps.RequestProvider) sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -84170,7 +82675,7 @@ func newWebAppAuthflowV2SettingsAdvancedSettingsHandler(p *deps.RequestProvider) UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -84639,36 +83144,9 @@ func newWebAppAccountStatusHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -84776,6 +83254,15 @@ func newWebAppAccountStatusHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -85150,7 +83637,7 @@ func newWebAppAccountStatusHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -85159,7 +83646,7 @@ func newWebAppAccountStatusHandler(p *deps.RequestProvider) http.Handler { sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -85188,7 +83675,7 @@ func newWebAppAccountStatusHandler(p *deps.RequestProvider) http.Handler { UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -85657,36 +84144,9 @@ func newWebAppLogoutHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -85794,6 +84254,15 @@ func newWebAppLogoutHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -86168,7 +84637,7 @@ func newWebAppLogoutHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -86177,7 +84646,7 @@ func newWebAppLogoutHandler(p *deps.RequestProvider) http.Handler { sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -86206,7 +84675,7 @@ func newWebAppLogoutHandler(p *deps.RequestProvider) http.Handler { UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -86740,36 +85209,9 @@ func newWebAppReturnHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -86877,6 +85319,15 @@ func newWebAppReturnHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -87251,7 +85702,7 @@ func newWebAppReturnHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -87260,7 +85711,7 @@ func newWebAppReturnHandler(p *deps.RequestProvider) http.Handler { sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -87289,7 +85740,7 @@ func newWebAppReturnHandler(p *deps.RequestProvider) http.Handler { UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -87758,36 +86209,9 @@ func newWebAppErrorHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -87895,6 +86319,15 @@ func newWebAppErrorHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -88269,7 +86702,7 @@ func newWebAppErrorHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -88278,7 +86711,7 @@ func newWebAppErrorHandler(p *deps.RequestProvider) http.Handler { sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -88307,7 +86740,7 @@ func newWebAppErrorHandler(p *deps.RequestProvider) http.Handler { UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -88754,36 +87187,9 @@ func newWebAppAuthflowV2ErrorHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: handle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(handle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -88891,6 +87297,15 @@ func newWebAppAuthflowV2ErrorHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(handle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -89265,7 +87680,7 @@ func newWebAppAuthflowV2ErrorHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: handle, AppID: appID, Clock: clockClock, @@ -89274,7 +87689,7 @@ func newWebAppAuthflowV2ErrorHandler(p *deps.RequestProvider) http.Handler { sessionConfig := appConfig.Session cookieDef := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef, @@ -89313,7 +87728,7 @@ func newWebAppAuthflowV2ErrorHandler(p *deps.RequestProvider) http.Handler { UserAgentString: userAgentString, AppID: appID, Redis: handle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -89869,36 +88284,9 @@ func newWebAppCSRFErrorInstructionHandler(p *deps.RequestProvider) http.Handler SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: handle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(handle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -90006,6 +88394,15 @@ func newWebAppCSRFErrorInstructionHandler(p *deps.RequestProvider) http.Handler Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(handle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -90380,7 +88777,7 @@ func newWebAppCSRFErrorInstructionHandler(p *deps.RequestProvider) http.Handler SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: handle, AppID: appID, Clock: clockClock, @@ -90389,7 +88786,7 @@ func newWebAppCSRFErrorInstructionHandler(p *deps.RequestProvider) http.Handler sessionConfig := appConfig.Session cookieDef := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef, @@ -90428,7 +88825,7 @@ func newWebAppCSRFErrorInstructionHandler(p *deps.RequestProvider) http.Handler UserAgentString: userAgentString, AppID: appID, Redis: handle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -91006,36 +89403,9 @@ func newWebAppNotFoundHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -91143,6 +89513,15 @@ func newWebAppNotFoundHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -91517,7 +89896,7 @@ func newWebAppNotFoundHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -91526,7 +89905,7 @@ func newWebAppNotFoundHandler(p *deps.RequestProvider) http.Handler { sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -91555,7 +89934,7 @@ func newWebAppNotFoundHandler(p *deps.RequestProvider) http.Handler { UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -92024,36 +90403,9 @@ func newWebAppAuthflowV2NotFoundHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -92161,6 +90513,15 @@ func newWebAppAuthflowV2NotFoundHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -92535,7 +90896,7 @@ func newWebAppAuthflowV2NotFoundHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -92544,7 +90905,7 @@ func newWebAppAuthflowV2NotFoundHandler(p *deps.RequestProvider) http.Handler { sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -92573,7 +90934,7 @@ func newWebAppAuthflowV2NotFoundHandler(p *deps.RequestProvider) http.Handler { UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -93060,36 +91421,9 @@ func newWebAppPasskeyCreationOptionsHandler(p *deps.RequestProvider) http.Handle SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: handle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(handle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -93197,6 +91531,15 @@ func newWebAppPasskeyCreationOptionsHandler(p *deps.RequestProvider) http.Handle Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(handle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -93571,7 +91914,7 @@ func newWebAppPasskeyCreationOptionsHandler(p *deps.RequestProvider) http.Handle SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: handle, AppID: appID, Clock: clockClock, @@ -93580,7 +91923,7 @@ func newWebAppPasskeyCreationOptionsHandler(p *deps.RequestProvider) http.Handle sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -93609,7 +91952,7 @@ func newWebAppPasskeyCreationOptionsHandler(p *deps.RequestProvider) http.Handle UserAgentString: userAgentString, AppID: appID, Redis: handle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -94023,36 +92366,9 @@ func newWebAppPasskeyRequestOptionsHandler(p *deps.RequestProvider) http.Handler SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: handle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(handle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -94160,6 +92476,15 @@ func newWebAppPasskeyRequestOptionsHandler(p *deps.RequestProvider) http.Handler Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(handle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -94534,7 +92859,7 @@ func newWebAppPasskeyRequestOptionsHandler(p *deps.RequestProvider) http.Handler SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: handle, AppID: appID, Clock: clockClock, @@ -94543,7 +92868,7 @@ func newWebAppPasskeyRequestOptionsHandler(p *deps.RequestProvider) http.Handler sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -94572,7 +92897,7 @@ func newWebAppPasskeyRequestOptionsHandler(p *deps.RequestProvider) http.Handler UserAgentString: userAgentString, AppID: appID, Redis: handle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -94985,36 +93310,9 @@ func newWebAppConnectWeb3AccountHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -95122,6 +93420,15 @@ func newWebAppConnectWeb3AccountHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -95496,7 +93803,7 @@ func newWebAppConnectWeb3AccountHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -95505,7 +93812,7 @@ func newWebAppConnectWeb3AccountHandler(p *deps.RequestProvider) http.Handler { sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -95534,7 +93841,7 @@ func newWebAppConnectWeb3AccountHandler(p *deps.RequestProvider) http.Handler { UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -96013,36 +94320,9 @@ func newWebAppFeatureDisabledHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -96150,6 +94430,15 @@ func newWebAppFeatureDisabledHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -96524,7 +94813,7 @@ func newWebAppFeatureDisabledHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -96533,7 +94822,7 @@ func newWebAppFeatureDisabledHandler(p *deps.RequestProvider) http.Handler { sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -96562,7 +94851,7 @@ func newWebAppFeatureDisabledHandler(p *deps.RequestProvider) http.Handler { UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -97031,36 +95320,9 @@ func newWebAppTesterHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -97168,6 +95430,15 @@ func newWebAppTesterHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -97542,7 +95813,7 @@ func newWebAppTesterHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -97551,7 +95822,7 @@ func newWebAppTesterHandler(p *deps.RequestProvider) http.Handler { sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -97580,7 +95851,7 @@ func newWebAppTesterHandler(p *deps.RequestProvider) http.Handler { UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -98175,36 +96446,9 @@ func newAPIWorkflowNewHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -98312,6 +96556,15 @@ func newAPIWorkflowNewHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -98686,7 +96939,7 @@ func newAPIWorkflowNewHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -98695,7 +96948,7 @@ func newAPIWorkflowNewHandler(p *deps.RequestProvider) http.Handler { sessionConfig := appConfig.Session cookieDef := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef, @@ -98734,7 +96987,7 @@ func newAPIWorkflowNewHandler(p *deps.RequestProvider) http.Handler { UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -99135,36 +97388,9 @@ func newAPIWorkflowGetHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -99272,6 +97498,15 @@ func newAPIWorkflowGetHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -99646,7 +97881,7 @@ func newAPIWorkflowGetHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -99657,7 +97892,7 @@ func newAPIWorkflowGetHandler(p *deps.RequestProvider) http.Handler { cookieManager := deps.NewCookieManager(request, trustProxy, httpConfig) cookieDef := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef, @@ -99696,7 +97931,7 @@ func newAPIWorkflowGetHandler(p *deps.RequestProvider) http.Handler { UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -100057,36 +98292,9 @@ func newAPIWorkflowInputHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -100194,6 +98402,15 @@ func newAPIWorkflowInputHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -100568,7 +98785,7 @@ func newAPIWorkflowInputHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -100579,7 +98796,7 @@ func newAPIWorkflowInputHandler(p *deps.RequestProvider) http.Handler { cookieManager := deps.NewCookieManager(request, trustProxy, httpConfig) cookieDef := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef, @@ -100618,7 +98835,7 @@ func newAPIWorkflowInputHandler(p *deps.RequestProvider) http.Handler { UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -101015,36 +99232,9 @@ func newAPIWorkflowV2Handler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -101152,6 +99342,15 @@ func newAPIWorkflowV2Handler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -101526,7 +99725,7 @@ func newAPIWorkflowV2Handler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -101535,7 +99734,7 @@ func newAPIWorkflowV2Handler(p *deps.RequestProvider) http.Handler { sessionConfig := appConfig.Session cookieDef := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef, @@ -101574,7 +99773,7 @@ func newAPIWorkflowV2Handler(p *deps.RequestProvider) http.Handler { UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -101977,36 +100176,9 @@ func newAPIAuthenticationFlowV1CreateHandler(p *deps.RequestProvider) http.Handl SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: handle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(handle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -102114,6 +100286,15 @@ func newAPIAuthenticationFlowV1CreateHandler(p *deps.RequestProvider) http.Handl Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(handle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -102488,7 +100669,7 @@ func newAPIAuthenticationFlowV1CreateHandler(p *deps.RequestProvider) http.Handl SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: handle, AppID: appID, Clock: clockClock, @@ -102497,7 +100678,7 @@ func newAPIAuthenticationFlowV1CreateHandler(p *deps.RequestProvider) http.Handl sessionConfig := appConfig.Session cookieDef := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef, @@ -102536,7 +100717,7 @@ func newAPIAuthenticationFlowV1CreateHandler(p *deps.RequestProvider) http.Handl UserAgentString: userAgentString, AppID: appID, Redis: handle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -103013,36 +101194,9 @@ func newAPIAuthenticationFlowV1InputHandler(p *deps.RequestProvider) http.Handle SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: handle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(handle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -103150,6 +101304,15 @@ func newAPIAuthenticationFlowV1InputHandler(p *deps.RequestProvider) http.Handle Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(handle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -103524,7 +101687,7 @@ func newAPIAuthenticationFlowV1InputHandler(p *deps.RequestProvider) http.Handle SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: handle, AppID: appID, Clock: clockClock, @@ -103533,7 +101696,7 @@ func newAPIAuthenticationFlowV1InputHandler(p *deps.RequestProvider) http.Handle sessionConfig := appConfig.Session cookieDef := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef, @@ -103572,7 +101735,7 @@ func newAPIAuthenticationFlowV1InputHandler(p *deps.RequestProvider) http.Handle UserAgentString: userAgentString, AppID: appID, Redis: handle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -104015,36 +102178,9 @@ func newAPIAuthenticationFlowV1GetHandler(p *deps.RequestProvider) http.Handler SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: handle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(handle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -104152,6 +102288,15 @@ func newAPIAuthenticationFlowV1GetHandler(p *deps.RequestProvider) http.Handler Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(handle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -104526,7 +102671,7 @@ func newAPIAuthenticationFlowV1GetHandler(p *deps.RequestProvider) http.Handler SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: handle, AppID: appID, Clock: clockClock, @@ -104537,7 +102682,7 @@ func newAPIAuthenticationFlowV1GetHandler(p *deps.RequestProvider) http.Handler cookieManager := deps.NewCookieManager(request, trustProxy, httpConfig) cookieDef := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef, @@ -104576,7 +102721,7 @@ func newAPIAuthenticationFlowV1GetHandler(p *deps.RequestProvider) http.Handler UserAgentString: userAgentString, AppID: appID, Redis: handle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -105052,36 +103197,9 @@ func newAPIAccountManagementV1IdentificationHandler(p *deps.RequestProvider) htt SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -105189,6 +103307,15 @@ func newAPIAccountManagementV1IdentificationHandler(p *deps.RequestProvider) htt Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -105582,7 +103709,7 @@ func newAPIAccountManagementV1IdentificationHandler(p *deps.RequestProvider) htt SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -105593,7 +103720,7 @@ func newAPIAccountManagementV1IdentificationHandler(p *deps.RequestProvider) htt cookieManager := deps.NewCookieManager(request, trustProxy, httpConfig) cookieDef := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef, @@ -105632,7 +103759,7 @@ func newAPIAccountManagementV1IdentificationHandler(p *deps.RequestProvider) htt UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -105903,36 +104030,9 @@ func newAPIAccountManagementV1IdentificationOAuthHandler(p *deps.RequestProvider SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -106040,6 +104140,15 @@ func newAPIAccountManagementV1IdentificationOAuthHandler(p *deps.RequestProvider Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -106433,7 +104542,7 @@ func newAPIAccountManagementV1IdentificationOAuthHandler(p *deps.RequestProvider SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -106444,7 +104553,7 @@ func newAPIAccountManagementV1IdentificationOAuthHandler(p *deps.RequestProvider cookieManager := deps.NewCookieManager(request, trustProxy, httpConfig) cookieDef := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef, @@ -106483,7 +104592,7 @@ func newAPIAccountManagementV1IdentificationOAuthHandler(p *deps.RequestProvider UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -106771,36 +104880,9 @@ func newWebAppAuthflowLoginHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: handle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(handle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -106908,6 +104990,15 @@ func newWebAppAuthflowLoginHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(handle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -107282,7 +105373,7 @@ func newWebAppAuthflowLoginHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: handle, AppID: appID, Clock: clockClock, @@ -107291,7 +105382,7 @@ func newWebAppAuthflowLoginHandler(p *deps.RequestProvider) http.Handler { sessionConfig := appConfig.Session cookieDef := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef, @@ -107330,7 +105421,7 @@ func newWebAppAuthflowLoginHandler(p *deps.RequestProvider) http.Handler { UserAgentString: userAgentString, AppID: appID, Redis: handle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -107899,36 +105990,9 @@ func newWebAppAuthflowV2LoginHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: handle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(handle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -108036,6 +106100,15 @@ func newWebAppAuthflowV2LoginHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(handle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -108410,7 +106483,7 @@ func newWebAppAuthflowV2LoginHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: handle, AppID: appID, Clock: clockClock, @@ -108419,7 +106492,7 @@ func newWebAppAuthflowV2LoginHandler(p *deps.RequestProvider) http.Handler { sessionConfig := appConfig.Session cookieDef := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef, @@ -108458,7 +106531,7 @@ func newWebAppAuthflowV2LoginHandler(p *deps.RequestProvider) http.Handler { UserAgentString: userAgentString, AppID: appID, Redis: handle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -109039,36 +107112,9 @@ func newWebAppAuthflowSignupHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: handle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(handle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -109176,6 +107222,15 @@ func newWebAppAuthflowSignupHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(handle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -109550,7 +107605,7 @@ func newWebAppAuthflowSignupHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: handle, AppID: appID, Clock: clockClock, @@ -109559,7 +107614,7 @@ func newWebAppAuthflowSignupHandler(p *deps.RequestProvider) http.Handler { sessionConfig := appConfig.Session cookieDef := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef, @@ -109598,7 +107653,7 @@ func newWebAppAuthflowSignupHandler(p *deps.RequestProvider) http.Handler { UserAgentString: userAgentString, AppID: appID, Redis: handle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -110166,36 +108221,9 @@ func newWebAppAuthflowV2SignupHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: handle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(handle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -110303,6 +108331,15 @@ func newWebAppAuthflowV2SignupHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(handle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -110677,7 +108714,7 @@ func newWebAppAuthflowV2SignupHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: handle, AppID: appID, Clock: clockClock, @@ -110686,7 +108723,7 @@ func newWebAppAuthflowV2SignupHandler(p *deps.RequestProvider) http.Handler { sessionConfig := appConfig.Session cookieDef := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef, @@ -110725,7 +108762,7 @@ func newWebAppAuthflowV2SignupHandler(p *deps.RequestProvider) http.Handler { UserAgentString: userAgentString, AppID: appID, Redis: handle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -111298,36 +109335,9 @@ func newWebAppAuthflowPromoteHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: handle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(handle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -111435,6 +109445,15 @@ func newWebAppAuthflowPromoteHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(handle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -111809,7 +109828,7 @@ func newWebAppAuthflowPromoteHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: handle, AppID: appID, Clock: clockClock, @@ -111818,7 +109837,7 @@ func newWebAppAuthflowPromoteHandler(p *deps.RequestProvider) http.Handler { sessionConfig := appConfig.Session cookieDef := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef, @@ -111857,7 +109876,7 @@ func newWebAppAuthflowPromoteHandler(p *deps.RequestProvider) http.Handler { UserAgentString: userAgentString, AppID: appID, Redis: handle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -112420,36 +110439,9 @@ func newWebAppAuthflowV2PromoteHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: handle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(handle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -112557,6 +110549,15 @@ func newWebAppAuthflowV2PromoteHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(handle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -112931,7 +110932,7 @@ func newWebAppAuthflowV2PromoteHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: handle, AppID: appID, Clock: clockClock, @@ -112940,7 +110941,7 @@ func newWebAppAuthflowV2PromoteHandler(p *deps.RequestProvider) http.Handler { sessionConfig := appConfig.Session cookieDef := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef, @@ -112979,7 +110980,7 @@ func newWebAppAuthflowV2PromoteHandler(p *deps.RequestProvider) http.Handler { UserAgentString: userAgentString, AppID: appID, Redis: handle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -113542,36 +111543,9 @@ func newWebAppAuthflowEnterPasswordHandler(p *deps.RequestProvider) http.Handler SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: handle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(handle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -113679,6 +111653,15 @@ func newWebAppAuthflowEnterPasswordHandler(p *deps.RequestProvider) http.Handler Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(handle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -114053,7 +112036,7 @@ func newWebAppAuthflowEnterPasswordHandler(p *deps.RequestProvider) http.Handler SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: handle, AppID: appID, Clock: clockClock, @@ -114062,7 +112045,7 @@ func newWebAppAuthflowEnterPasswordHandler(p *deps.RequestProvider) http.Handler sessionConfig := appConfig.Session cookieDef := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef, @@ -114101,7 +112084,7 @@ func newWebAppAuthflowEnterPasswordHandler(p *deps.RequestProvider) http.Handler UserAgentString: userAgentString, AppID: appID, Redis: handle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -114657,36 +112640,9 @@ func newWebAppAuthflowV2EnterPasswordHandler(p *deps.RequestProvider) http.Handl SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: handle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(handle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -114794,6 +112750,15 @@ func newWebAppAuthflowV2EnterPasswordHandler(p *deps.RequestProvider) http.Handl Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(handle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -115168,7 +113133,7 @@ func newWebAppAuthflowV2EnterPasswordHandler(p *deps.RequestProvider) http.Handl SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: handle, AppID: appID, Clock: clockClock, @@ -115177,7 +113142,7 @@ func newWebAppAuthflowV2EnterPasswordHandler(p *deps.RequestProvider) http.Handl sessionConfig := appConfig.Session cookieDef := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef, @@ -115216,7 +113181,7 @@ func newWebAppAuthflowV2EnterPasswordHandler(p *deps.RequestProvider) http.Handl UserAgentString: userAgentString, AppID: appID, Redis: handle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -115776,36 +113741,9 @@ func newWebAppAuthflowEnterOOBOTPHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: handle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(handle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -115913,6 +113851,15 @@ func newWebAppAuthflowEnterOOBOTPHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(handle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -116287,7 +114234,7 @@ func newWebAppAuthflowEnterOOBOTPHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: handle, AppID: appID, Clock: clockClock, @@ -116296,7 +114243,7 @@ func newWebAppAuthflowEnterOOBOTPHandler(p *deps.RequestProvider) http.Handler { sessionConfig := appConfig.Session cookieDef := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef, @@ -116335,7 +114282,7 @@ func newWebAppAuthflowEnterOOBOTPHandler(p *deps.RequestProvider) http.Handler { UserAgentString: userAgentString, AppID: appID, Redis: handle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -116893,36 +114840,9 @@ func newWebAppAuthflowV2EnterOOBOTPHandler(p *deps.RequestProvider) http.Handler SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: handle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(handle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -117030,6 +114950,15 @@ func newWebAppAuthflowV2EnterOOBOTPHandler(p *deps.RequestProvider) http.Handler Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(handle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -117404,7 +115333,7 @@ func newWebAppAuthflowV2EnterOOBOTPHandler(p *deps.RequestProvider) http.Handler SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: handle, AppID: appID, Clock: clockClock, @@ -117413,7 +115342,7 @@ func newWebAppAuthflowV2EnterOOBOTPHandler(p *deps.RequestProvider) http.Handler sessionConfig := appConfig.Session cookieDef := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef, @@ -117452,7 +115381,7 @@ func newWebAppAuthflowV2EnterOOBOTPHandler(p *deps.RequestProvider) http.Handler UserAgentString: userAgentString, AppID: appID, Redis: handle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -118016,36 +115945,9 @@ func newWebAppAuthflowCreatePasswordHandler(p *deps.RequestProvider) http.Handle SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: handle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(handle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -118153,6 +116055,15 @@ func newWebAppAuthflowCreatePasswordHandler(p *deps.RequestProvider) http.Handle Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(handle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -118527,7 +116438,7 @@ func newWebAppAuthflowCreatePasswordHandler(p *deps.RequestProvider) http.Handle SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: handle, AppID: appID, Clock: clockClock, @@ -118536,7 +116447,7 @@ func newWebAppAuthflowCreatePasswordHandler(p *deps.RequestProvider) http.Handle sessionConfig := appConfig.Session cookieDef := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef, @@ -118575,7 +116486,7 @@ func newWebAppAuthflowCreatePasswordHandler(p *deps.RequestProvider) http.Handle UserAgentString: userAgentString, AppID: appID, Redis: handle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -119131,36 +117042,9 @@ func newWebAppAuthflowV2CreatePasswordHandler(p *deps.RequestProvider) http.Hand SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: handle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(handle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -119268,6 +117152,15 @@ func newWebAppAuthflowV2CreatePasswordHandler(p *deps.RequestProvider) http.Hand Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(handle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -119642,7 +117535,7 @@ func newWebAppAuthflowV2CreatePasswordHandler(p *deps.RequestProvider) http.Hand SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: handle, AppID: appID, Clock: clockClock, @@ -119651,7 +117544,7 @@ func newWebAppAuthflowV2CreatePasswordHandler(p *deps.RequestProvider) http.Hand sessionConfig := appConfig.Session cookieDef := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef, @@ -119690,7 +117583,7 @@ func newWebAppAuthflowV2CreatePasswordHandler(p *deps.RequestProvider) http.Hand UserAgentString: userAgentString, AppID: appID, Redis: handle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -120252,36 +118145,9 @@ func newWebAppAuthflowEnterTOTPHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: handle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(handle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -120389,6 +118255,15 @@ func newWebAppAuthflowEnterTOTPHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(handle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -120763,7 +118638,7 @@ func newWebAppAuthflowEnterTOTPHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: handle, AppID: appID, Clock: clockClock, @@ -120772,7 +118647,7 @@ func newWebAppAuthflowEnterTOTPHandler(p *deps.RequestProvider) http.Handler { sessionConfig := appConfig.Session cookieDef := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef, @@ -120811,7 +118686,7 @@ func newWebAppAuthflowEnterTOTPHandler(p *deps.RequestProvider) http.Handler { UserAgentString: userAgentString, AppID: appID, Redis: handle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -121367,36 +119242,9 @@ func newWebAppAuthflowV2EnterTOTPHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: handle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(handle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -121504,6 +119352,15 @@ func newWebAppAuthflowV2EnterTOTPHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(handle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -121878,7 +119735,7 @@ func newWebAppAuthflowV2EnterTOTPHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: handle, AppID: appID, Clock: clockClock, @@ -121887,7 +119744,7 @@ func newWebAppAuthflowV2EnterTOTPHandler(p *deps.RequestProvider) http.Handler { sessionConfig := appConfig.Session cookieDef := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef, @@ -121926,7 +119783,7 @@ func newWebAppAuthflowV2EnterTOTPHandler(p *deps.RequestProvider) http.Handler { UserAgentString: userAgentString, AppID: appID, Redis: handle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -122486,36 +120343,9 @@ func newWebAppAuthflowSetupTOTPHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: handle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(handle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -122623,6 +120453,15 @@ func newWebAppAuthflowSetupTOTPHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(handle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -122997,7 +120836,7 @@ func newWebAppAuthflowSetupTOTPHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: handle, AppID: appID, Clock: clockClock, @@ -123006,7 +120845,7 @@ func newWebAppAuthflowSetupTOTPHandler(p *deps.RequestProvider) http.Handler { sessionConfig := appConfig.Session cookieDef := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef, @@ -123045,7 +120884,7 @@ func newWebAppAuthflowSetupTOTPHandler(p *deps.RequestProvider) http.Handler { UserAgentString: userAgentString, AppID: appID, Redis: handle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -123601,36 +121440,9 @@ func newWebAppAuthflowV2SetupTOTPHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: handle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(handle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -123738,6 +121550,15 @@ func newWebAppAuthflowV2SetupTOTPHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(handle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -124112,7 +121933,7 @@ func newWebAppAuthflowV2SetupTOTPHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: handle, AppID: appID, Clock: clockClock, @@ -124121,7 +121942,7 @@ func newWebAppAuthflowV2SetupTOTPHandler(p *deps.RequestProvider) http.Handler { sessionConfig := appConfig.Session cookieDef := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef, @@ -124160,7 +121981,7 @@ func newWebAppAuthflowV2SetupTOTPHandler(p *deps.RequestProvider) http.Handler { UserAgentString: userAgentString, AppID: appID, Redis: handle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -124716,36 +122537,9 @@ func newWebAppAuthflowViewRecoveryCodeHandler(p *deps.RequestProvider) http.Hand SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: handle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(handle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -124853,6 +122647,15 @@ func newWebAppAuthflowViewRecoveryCodeHandler(p *deps.RequestProvider) http.Hand Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(handle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -125227,7 +123030,7 @@ func newWebAppAuthflowViewRecoveryCodeHandler(p *deps.RequestProvider) http.Hand SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: handle, AppID: appID, Clock: clockClock, @@ -125236,7 +123039,7 @@ func newWebAppAuthflowViewRecoveryCodeHandler(p *deps.RequestProvider) http.Hand sessionConfig := appConfig.Session cookieDef := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef, @@ -125275,7 +123078,7 @@ func newWebAppAuthflowViewRecoveryCodeHandler(p *deps.RequestProvider) http.Hand UserAgentString: userAgentString, AppID: appID, Redis: handle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -125831,36 +123634,9 @@ func newWebAppAuthflowV2ViewRecoveryCodeHandler(p *deps.RequestProvider) http.Ha SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: handle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(handle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -125968,6 +123744,15 @@ func newWebAppAuthflowV2ViewRecoveryCodeHandler(p *deps.RequestProvider) http.Ha Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(handle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -126342,7 +124127,7 @@ func newWebAppAuthflowV2ViewRecoveryCodeHandler(p *deps.RequestProvider) http.Ha SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: handle, AppID: appID, Clock: clockClock, @@ -126351,7 +124136,7 @@ func newWebAppAuthflowV2ViewRecoveryCodeHandler(p *deps.RequestProvider) http.Ha sessionConfig := appConfig.Session cookieDef := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef, @@ -126390,7 +124175,7 @@ func newWebAppAuthflowV2ViewRecoveryCodeHandler(p *deps.RequestProvider) http.Ha UserAgentString: userAgentString, AppID: appID, Redis: handle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -126946,36 +124731,9 @@ func newWebAppAuthflowWhatsappOTPHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: handle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(handle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -127083,6 +124841,15 @@ func newWebAppAuthflowWhatsappOTPHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(handle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -127457,7 +125224,7 @@ func newWebAppAuthflowWhatsappOTPHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: handle, AppID: appID, Clock: clockClock, @@ -127466,7 +125233,7 @@ func newWebAppAuthflowWhatsappOTPHandler(p *deps.RequestProvider) http.Handler { sessionConfig := appConfig.Session cookieDef := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef, @@ -127505,7 +125272,7 @@ func newWebAppAuthflowWhatsappOTPHandler(p *deps.RequestProvider) http.Handler { UserAgentString: userAgentString, AppID: appID, Redis: handle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -128063,36 +125830,9 @@ func newWebAppAuthflowOOBOTPLinkHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: handle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(handle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -128200,6 +125940,15 @@ func newWebAppAuthflowOOBOTPLinkHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(handle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -128574,7 +126323,7 @@ func newWebAppAuthflowOOBOTPLinkHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: handle, AppID: appID, Clock: clockClock, @@ -128583,7 +126332,7 @@ func newWebAppAuthflowOOBOTPLinkHandler(p *deps.RequestProvider) http.Handler { sessionConfig := appConfig.Session cookieDef := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef, @@ -128622,7 +126371,7 @@ func newWebAppAuthflowOOBOTPLinkHandler(p *deps.RequestProvider) http.Handler { UserAgentString: userAgentString, AppID: appID, Redis: handle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -129180,36 +126929,9 @@ func newWebAppAuthflowV2OOBOTPLinkHandler(p *deps.RequestProvider) http.Handler SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: handle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(handle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -129317,6 +127039,15 @@ func newWebAppAuthflowV2OOBOTPLinkHandler(p *deps.RequestProvider) http.Handler Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(handle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -129691,7 +127422,7 @@ func newWebAppAuthflowV2OOBOTPLinkHandler(p *deps.RequestProvider) http.Handler SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: handle, AppID: appID, Clock: clockClock, @@ -129700,7 +127431,7 @@ func newWebAppAuthflowV2OOBOTPLinkHandler(p *deps.RequestProvider) http.Handler sessionConfig := appConfig.Session cookieDef := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef, @@ -129739,7 +127470,7 @@ func newWebAppAuthflowV2OOBOTPLinkHandler(p *deps.RequestProvider) http.Handler UserAgentString: userAgentString, AppID: appID, Redis: handle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -130300,36 +128031,9 @@ func newWebAppAuthflowChangePasswordHandler(p *deps.RequestProvider) http.Handle SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: handle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(handle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -130437,6 +128141,15 @@ func newWebAppAuthflowChangePasswordHandler(p *deps.RequestProvider) http.Handle Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(handle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -130811,7 +128524,7 @@ func newWebAppAuthflowChangePasswordHandler(p *deps.RequestProvider) http.Handle SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: handle, AppID: appID, Clock: clockClock, @@ -130820,7 +128533,7 @@ func newWebAppAuthflowChangePasswordHandler(p *deps.RequestProvider) http.Handle sessionConfig := appConfig.Session cookieDef := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef, @@ -130859,7 +128572,7 @@ func newWebAppAuthflowChangePasswordHandler(p *deps.RequestProvider) http.Handle UserAgentString: userAgentString, AppID: appID, Redis: handle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -131420,36 +129133,9 @@ func newWebAppAuthflowV2ChangePasswordHandler(p *deps.RequestProvider) http.Hand SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: handle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(handle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -131557,6 +129243,15 @@ func newWebAppAuthflowV2ChangePasswordHandler(p *deps.RequestProvider) http.Hand Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(handle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -131931,7 +129626,7 @@ func newWebAppAuthflowV2ChangePasswordHandler(p *deps.RequestProvider) http.Hand SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: handle, AppID: appID, Clock: clockClock, @@ -131940,7 +129635,7 @@ func newWebAppAuthflowV2ChangePasswordHandler(p *deps.RequestProvider) http.Hand sessionConfig := appConfig.Session cookieDef := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef, @@ -131979,7 +129674,7 @@ func newWebAppAuthflowV2ChangePasswordHandler(p *deps.RequestProvider) http.Hand UserAgentString: userAgentString, AppID: appID, Redis: handle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -132541,36 +130236,9 @@ func newWebAppAuthflowV2ChangePasswordSuccessHandler(p *deps.RequestProvider) ht SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: handle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(handle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -132678,6 +130346,15 @@ func newWebAppAuthflowV2ChangePasswordSuccessHandler(p *deps.RequestProvider) ht Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(handle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -133052,7 +130729,7 @@ func newWebAppAuthflowV2ChangePasswordSuccessHandler(p *deps.RequestProvider) ht SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: handle, AppID: appID, Clock: clockClock, @@ -133061,7 +130738,7 @@ func newWebAppAuthflowV2ChangePasswordSuccessHandler(p *deps.RequestProvider) ht sessionConfig := appConfig.Session cookieDef := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef, @@ -133100,7 +130777,7 @@ func newWebAppAuthflowV2ChangePasswordSuccessHandler(p *deps.RequestProvider) ht UserAgentString: userAgentString, AppID: appID, Redis: handle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -133656,36 +131333,9 @@ func newWebAppAuthflowUsePasskeyHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: handle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(handle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -133793,6 +131443,15 @@ func newWebAppAuthflowUsePasskeyHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(handle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -134167,7 +131826,7 @@ func newWebAppAuthflowUsePasskeyHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: handle, AppID: appID, Clock: clockClock, @@ -134176,7 +131835,7 @@ func newWebAppAuthflowUsePasskeyHandler(p *deps.RequestProvider) http.Handler { sessionConfig := appConfig.Session cookieDef := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef, @@ -134215,7 +131874,7 @@ func newWebAppAuthflowUsePasskeyHandler(p *deps.RequestProvider) http.Handler { UserAgentString: userAgentString, AppID: appID, Redis: handle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -134771,36 +132430,9 @@ func newWebAppAuthflowV2UsePasskeyHandler(p *deps.RequestProvider) http.Handler SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: handle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(handle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -134908,6 +132540,15 @@ func newWebAppAuthflowV2UsePasskeyHandler(p *deps.RequestProvider) http.Handler Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(handle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -135282,7 +132923,7 @@ func newWebAppAuthflowV2UsePasskeyHandler(p *deps.RequestProvider) http.Handler SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: handle, AppID: appID, Clock: clockClock, @@ -135291,7 +132932,7 @@ func newWebAppAuthflowV2UsePasskeyHandler(p *deps.RequestProvider) http.Handler sessionConfig := appConfig.Session cookieDef := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef, @@ -135330,7 +132971,7 @@ func newWebAppAuthflowV2UsePasskeyHandler(p *deps.RequestProvider) http.Handler UserAgentString: userAgentString, AppID: appID, Redis: handle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -135890,36 +133531,9 @@ func newWebAppAuthflowPromptCreatePasskeyHandler(p *deps.RequestProvider) http.H SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: handle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(handle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -136027,6 +133641,15 @@ func newWebAppAuthflowPromptCreatePasskeyHandler(p *deps.RequestProvider) http.H Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(handle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -136401,7 +134024,7 @@ func newWebAppAuthflowPromptCreatePasskeyHandler(p *deps.RequestProvider) http.H SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: handle, AppID: appID, Clock: clockClock, @@ -136410,7 +134033,7 @@ func newWebAppAuthflowPromptCreatePasskeyHandler(p *deps.RequestProvider) http.H sessionConfig := appConfig.Session cookieDef := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef, @@ -136449,7 +134072,7 @@ func newWebAppAuthflowPromptCreatePasskeyHandler(p *deps.RequestProvider) http.H UserAgentString: userAgentString, AppID: appID, Redis: handle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -137005,36 +134628,9 @@ func newWebAppAuthflowV2PromptCreatePasskeyHandler(p *deps.RequestProvider) http SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: handle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(handle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -137142,6 +134738,15 @@ func newWebAppAuthflowV2PromptCreatePasskeyHandler(p *deps.RequestProvider) http Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(handle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -137516,7 +135121,7 @@ func newWebAppAuthflowV2PromptCreatePasskeyHandler(p *deps.RequestProvider) http SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: handle, AppID: appID, Clock: clockClock, @@ -137525,7 +135130,7 @@ func newWebAppAuthflowV2PromptCreatePasskeyHandler(p *deps.RequestProvider) http sessionConfig := appConfig.Session cookieDef := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef, @@ -137564,7 +135169,7 @@ func newWebAppAuthflowV2PromptCreatePasskeyHandler(p *deps.RequestProvider) http UserAgentString: userAgentString, AppID: appID, Redis: handle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -138120,36 +135725,9 @@ func newWebAppAuthflowEnterRecoveryCodeHandler(p *deps.RequestProvider) http.Han SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: handle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(handle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -138257,6 +135835,15 @@ func newWebAppAuthflowEnterRecoveryCodeHandler(p *deps.RequestProvider) http.Han Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(handle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -138631,7 +136218,7 @@ func newWebAppAuthflowEnterRecoveryCodeHandler(p *deps.RequestProvider) http.Han SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: handle, AppID: appID, Clock: clockClock, @@ -138640,7 +136227,7 @@ func newWebAppAuthflowEnterRecoveryCodeHandler(p *deps.RequestProvider) http.Han sessionConfig := appConfig.Session cookieDef := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef, @@ -138679,7 +136266,7 @@ func newWebAppAuthflowEnterRecoveryCodeHandler(p *deps.RequestProvider) http.Han UserAgentString: userAgentString, AppID: appID, Redis: handle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -139235,36 +136822,9 @@ func newWebAppAuthflowV2EnterRecoveryCodeHandler(p *deps.RequestProvider) http.H SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: handle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(handle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -139372,6 +136932,15 @@ func newWebAppAuthflowV2EnterRecoveryCodeHandler(p *deps.RequestProvider) http.H Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(handle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -139746,7 +137315,7 @@ func newWebAppAuthflowV2EnterRecoveryCodeHandler(p *deps.RequestProvider) http.H SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: handle, AppID: appID, Clock: clockClock, @@ -139755,7 +137324,7 @@ func newWebAppAuthflowV2EnterRecoveryCodeHandler(p *deps.RequestProvider) http.H sessionConfig := appConfig.Session cookieDef := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef, @@ -139794,7 +137363,7 @@ func newWebAppAuthflowV2EnterRecoveryCodeHandler(p *deps.RequestProvider) http.H UserAgentString: userAgentString, AppID: appID, Redis: handle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -140350,36 +137919,9 @@ func newWebAppAuthflowSetupOOBOTPHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: handle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(handle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -140487,6 +138029,15 @@ func newWebAppAuthflowSetupOOBOTPHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(handle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -140861,7 +138412,7 @@ func newWebAppAuthflowSetupOOBOTPHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: handle, AppID: appID, Clock: clockClock, @@ -140870,7 +138421,7 @@ func newWebAppAuthflowSetupOOBOTPHandler(p *deps.RequestProvider) http.Handler { sessionConfig := appConfig.Session cookieDef := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef, @@ -140909,7 +138460,7 @@ func newWebAppAuthflowSetupOOBOTPHandler(p *deps.RequestProvider) http.Handler { UserAgentString: userAgentString, AppID: appID, Redis: handle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -141465,36 +139016,9 @@ func newWebAppAuthflowV2SetupOOBOTPHandler(p *deps.RequestProvider) http.Handler SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: handle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(handle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -141602,6 +139126,15 @@ func newWebAppAuthflowV2SetupOOBOTPHandler(p *deps.RequestProvider) http.Handler Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(handle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -141976,7 +139509,7 @@ func newWebAppAuthflowV2SetupOOBOTPHandler(p *deps.RequestProvider) http.Handler SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: handle, AppID: appID, Clock: clockClock, @@ -141985,7 +139518,7 @@ func newWebAppAuthflowV2SetupOOBOTPHandler(p *deps.RequestProvider) http.Handler sessionConfig := appConfig.Session cookieDef := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef, @@ -142024,7 +139557,7 @@ func newWebAppAuthflowV2SetupOOBOTPHandler(p *deps.RequestProvider) http.Handler UserAgentString: userAgentString, AppID: appID, Redis: handle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -142580,36 +140113,9 @@ func newWebAppAuthflowTerminateOtherSessionsHandler(p *deps.RequestProvider) htt SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: handle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(handle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -142717,6 +140223,15 @@ func newWebAppAuthflowTerminateOtherSessionsHandler(p *deps.RequestProvider) htt Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(handle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -143091,7 +140606,7 @@ func newWebAppAuthflowTerminateOtherSessionsHandler(p *deps.RequestProvider) htt SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: handle, AppID: appID, Clock: clockClock, @@ -143100,7 +140615,7 @@ func newWebAppAuthflowTerminateOtherSessionsHandler(p *deps.RequestProvider) htt sessionConfig := appConfig.Session cookieDef := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef, @@ -143139,7 +140654,7 @@ func newWebAppAuthflowTerminateOtherSessionsHandler(p *deps.RequestProvider) htt UserAgentString: userAgentString, AppID: appID, Redis: handle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -143695,36 +141210,9 @@ func newWebAppAuthflowV2TerminateOtherSessionsHandler(p *deps.RequestProvider) h SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: handle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(handle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -143832,6 +141320,15 @@ func newWebAppAuthflowV2TerminateOtherSessionsHandler(p *deps.RequestProvider) h Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(handle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -144206,7 +141703,7 @@ func newWebAppAuthflowV2TerminateOtherSessionsHandler(p *deps.RequestProvider) h SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: handle, AppID: appID, Clock: clockClock, @@ -144215,7 +141712,7 @@ func newWebAppAuthflowV2TerminateOtherSessionsHandler(p *deps.RequestProvider) h sessionConfig := appConfig.Session cookieDef := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef, @@ -144254,7 +141751,7 @@ func newWebAppAuthflowV2TerminateOtherSessionsHandler(p *deps.RequestProvider) h UserAgentString: userAgentString, AppID: appID, Redis: handle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -144810,36 +142307,9 @@ func newWebAppAuthflowWechatHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: handle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(handle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -144947,6 +142417,15 @@ func newWebAppAuthflowWechatHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(handle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -145321,7 +142800,7 @@ func newWebAppAuthflowWechatHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: handle, AppID: appID, Clock: clockClock, @@ -145330,7 +142809,7 @@ func newWebAppAuthflowWechatHandler(p *deps.RequestProvider) http.Handler { sessionConfig := appConfig.Session cookieDef := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef, @@ -145369,7 +142848,7 @@ func newWebAppAuthflowWechatHandler(p *deps.RequestProvider) http.Handler { UserAgentString: userAgentString, AppID: appID, Redis: handle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -145926,36 +143405,9 @@ func newWebAppAuthflowForgotPasswordHandler(p *deps.RequestProvider) http.Handle SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: handle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(handle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -146063,6 +143515,15 @@ func newWebAppAuthflowForgotPasswordHandler(p *deps.RequestProvider) http.Handle Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(handle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -146437,7 +143898,7 @@ func newWebAppAuthflowForgotPasswordHandler(p *deps.RequestProvider) http.Handle SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: handle, AppID: appID, Clock: clockClock, @@ -146446,7 +143907,7 @@ func newWebAppAuthflowForgotPasswordHandler(p *deps.RequestProvider) http.Handle sessionConfig := appConfig.Session cookieDef := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef, @@ -146485,7 +143946,7 @@ func newWebAppAuthflowForgotPasswordHandler(p *deps.RequestProvider) http.Handle UserAgentString: userAgentString, AppID: appID, Redis: handle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -147041,36 +144502,9 @@ func newWebAppAuthflowV2ForgotPasswordHandler(p *deps.RequestProvider) http.Hand SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: handle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(handle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -147178,6 +144612,15 @@ func newWebAppAuthflowV2ForgotPasswordHandler(p *deps.RequestProvider) http.Hand Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(handle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -147552,7 +144995,7 @@ func newWebAppAuthflowV2ForgotPasswordHandler(p *deps.RequestProvider) http.Hand SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: handle, AppID: appID, Clock: clockClock, @@ -147561,7 +145004,7 @@ func newWebAppAuthflowV2ForgotPasswordHandler(p *deps.RequestProvider) http.Hand sessionConfig := appConfig.Session cookieDef := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef, @@ -147600,7 +145043,7 @@ func newWebAppAuthflowV2ForgotPasswordHandler(p *deps.RequestProvider) http.Hand UserAgentString: userAgentString, AppID: appID, Redis: handle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -148162,36 +145605,9 @@ func newWebAppAuthflowForgotPasswordOTPHandler(p *deps.RequestProvider) http.Han SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: handle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(handle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -148299,6 +145715,15 @@ func newWebAppAuthflowForgotPasswordOTPHandler(p *deps.RequestProvider) http.Han Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(handle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -148673,7 +146098,7 @@ func newWebAppAuthflowForgotPasswordOTPHandler(p *deps.RequestProvider) http.Han SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: handle, AppID: appID, Clock: clockClock, @@ -148682,7 +146107,7 @@ func newWebAppAuthflowForgotPasswordOTPHandler(p *deps.RequestProvider) http.Han sessionConfig := appConfig.Session cookieDef := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef, @@ -148721,7 +146146,7 @@ func newWebAppAuthflowForgotPasswordOTPHandler(p *deps.RequestProvider) http.Han UserAgentString: userAgentString, AppID: appID, Redis: handle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -149279,36 +146704,9 @@ func newWebAppAuthflowV2ForgotPasswordOTPHandler(p *deps.RequestProvider) http.H SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: handle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(handle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -149416,6 +146814,15 @@ func newWebAppAuthflowV2ForgotPasswordOTPHandler(p *deps.RequestProvider) http.H Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(handle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -149790,7 +147197,7 @@ func newWebAppAuthflowV2ForgotPasswordOTPHandler(p *deps.RequestProvider) http.H SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: handle, AppID: appID, Clock: clockClock, @@ -149799,7 +147206,7 @@ func newWebAppAuthflowV2ForgotPasswordOTPHandler(p *deps.RequestProvider) http.H sessionConfig := appConfig.Session cookieDef := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef, @@ -149838,7 +147245,7 @@ func newWebAppAuthflowV2ForgotPasswordOTPHandler(p *deps.RequestProvider) http.H UserAgentString: userAgentString, AppID: appID, Redis: handle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -150396,36 +147803,9 @@ func newWebAppAuthflowForgotPasswordSuccessHandler(p *deps.RequestProvider) http SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: handle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(handle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -150533,6 +147913,15 @@ func newWebAppAuthflowForgotPasswordSuccessHandler(p *deps.RequestProvider) http Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(handle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -150907,7 +148296,7 @@ func newWebAppAuthflowForgotPasswordSuccessHandler(p *deps.RequestProvider) http SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: handle, AppID: appID, Clock: clockClock, @@ -150916,7 +148305,7 @@ func newWebAppAuthflowForgotPasswordSuccessHandler(p *deps.RequestProvider) http sessionConfig := appConfig.Session cookieDef := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef, @@ -150955,7 +148344,7 @@ func newWebAppAuthflowForgotPasswordSuccessHandler(p *deps.RequestProvider) http UserAgentString: userAgentString, AppID: appID, Redis: handle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -151511,36 +148900,9 @@ func newWebAppAuthflowV2ForgotPasswordLinkSentHandler(p *deps.RequestProvider) h SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: handle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(handle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -151648,6 +149010,15 @@ func newWebAppAuthflowV2ForgotPasswordLinkSentHandler(p *deps.RequestProvider) h Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(handle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -152022,7 +149393,7 @@ func newWebAppAuthflowV2ForgotPasswordLinkSentHandler(p *deps.RequestProvider) h SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: handle, AppID: appID, Clock: clockClock, @@ -152031,7 +149402,7 @@ func newWebAppAuthflowV2ForgotPasswordLinkSentHandler(p *deps.RequestProvider) h sessionConfig := appConfig.Session cookieDef := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef, @@ -152070,7 +149441,7 @@ func newWebAppAuthflowV2ForgotPasswordLinkSentHandler(p *deps.RequestProvider) h UserAgentString: userAgentString, AppID: appID, Redis: handle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -152649,36 +150020,9 @@ func newWebAppReauthHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -152786,6 +150130,15 @@ func newWebAppReauthHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -153160,7 +150513,7 @@ func newWebAppReauthHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -153169,7 +150522,7 @@ func newWebAppReauthHandler(p *deps.RequestProvider) http.Handler { sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -153198,7 +150551,7 @@ func newWebAppReauthHandler(p *deps.RequestProvider) http.Handler { UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -153643,36 +150996,9 @@ func newWebAppAuthflowReauthHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: handle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(handle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -153780,6 +151106,15 @@ func newWebAppAuthflowReauthHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(handle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -154154,7 +151489,7 @@ func newWebAppAuthflowReauthHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: handle, AppID: appID, Clock: clockClock, @@ -154163,7 +151498,7 @@ func newWebAppAuthflowReauthHandler(p *deps.RequestProvider) http.Handler { sessionConfig := appConfig.Session cookieDef := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef, @@ -154202,7 +151537,7 @@ func newWebAppAuthflowReauthHandler(p *deps.RequestProvider) http.Handler { UserAgentString: userAgentString, AppID: appID, Redis: handle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -154724,36 +152059,9 @@ func newWebAppAuthflowV2ReauthHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: handle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(handle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -154861,6 +152169,15 @@ func newWebAppAuthflowV2ReauthHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(handle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -155235,7 +152552,7 @@ func newWebAppAuthflowV2ReauthHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: handle, AppID: appID, Clock: clockClock, @@ -155244,7 +152561,7 @@ func newWebAppAuthflowV2ReauthHandler(p *deps.RequestProvider) http.Handler { sessionConfig := appConfig.Session cookieDef := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef, @@ -155283,7 +152600,7 @@ func newWebAppAuthflowV2ReauthHandler(p *deps.RequestProvider) http.Handler { UserAgentString: userAgentString, AppID: appID, Redis: handle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -155805,36 +153122,9 @@ func newWebAppAuthflowResetPasswordHandler(p *deps.RequestProvider) http.Handler SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: handle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(handle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -155942,6 +153232,15 @@ func newWebAppAuthflowResetPasswordHandler(p *deps.RequestProvider) http.Handler Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(handle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -156316,7 +153615,7 @@ func newWebAppAuthflowResetPasswordHandler(p *deps.RequestProvider) http.Handler SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: handle, AppID: appID, Clock: clockClock, @@ -156325,7 +153624,7 @@ func newWebAppAuthflowResetPasswordHandler(p *deps.RequestProvider) http.Handler sessionConfig := appConfig.Session cookieDef := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef, @@ -156364,7 +153663,7 @@ func newWebAppAuthflowResetPasswordHandler(p *deps.RequestProvider) http.Handler UserAgentString: userAgentString, AppID: appID, Redis: handle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -156942,36 +154241,9 @@ func newWebAppAuthflowV2ResetPasswordHandler(p *deps.RequestProvider) http.Handl SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -157079,6 +154351,15 @@ func newWebAppAuthflowV2ResetPasswordHandler(p *deps.RequestProvider) http.Handl Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -157453,7 +154734,7 @@ func newWebAppAuthflowV2ResetPasswordHandler(p *deps.RequestProvider) http.Handl SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -157462,7 +154743,7 @@ func newWebAppAuthflowV2ResetPasswordHandler(p *deps.RequestProvider) http.Handl sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -157491,7 +154772,7 @@ func newWebAppAuthflowV2ResetPasswordHandler(p *deps.RequestProvider) http.Handl UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -158129,36 +155410,9 @@ func newWebAppAuthflowResetPasswordSuccessHandler(p *deps.RequestProvider) http. SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: handle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(handle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -158266,6 +155520,15 @@ func newWebAppAuthflowResetPasswordSuccessHandler(p *deps.RequestProvider) http. Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(handle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -158640,7 +155903,7 @@ func newWebAppAuthflowResetPasswordSuccessHandler(p *deps.RequestProvider) http. SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: handle, AppID: appID, Clock: clockClock, @@ -158649,7 +155912,7 @@ func newWebAppAuthflowResetPasswordSuccessHandler(p *deps.RequestProvider) http. sessionConfig := appConfig.Session cookieDef := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef, @@ -158688,7 +155951,7 @@ func newWebAppAuthflowResetPasswordSuccessHandler(p *deps.RequestProvider) http. UserAgentString: userAgentString, AppID: appID, Redis: handle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -159244,36 +156507,9 @@ func newWebAppAuthflowV2ResetPasswordSuccessHandler(p *deps.RequestProvider) htt SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: handle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(handle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -159381,6 +156617,15 @@ func newWebAppAuthflowV2ResetPasswordSuccessHandler(p *deps.RequestProvider) htt Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(handle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -159755,7 +157000,7 @@ func newWebAppAuthflowV2ResetPasswordSuccessHandler(p *deps.RequestProvider) htt SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: handle, AppID: appID, Clock: clockClock, @@ -159764,7 +157009,7 @@ func newWebAppAuthflowV2ResetPasswordSuccessHandler(p *deps.RequestProvider) htt sessionConfig := appConfig.Session cookieDef := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef, @@ -159803,7 +157048,7 @@ func newWebAppAuthflowV2ResetPasswordSuccessHandler(p *deps.RequestProvider) htt UserAgentString: userAgentString, AppID: appID, Redis: handle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -160695,36 +157940,9 @@ func newWebAppAuthflowFinishFlowHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: handle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(handle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -160832,6 +158050,15 @@ func newWebAppAuthflowFinishFlowHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(handle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -161206,7 +158433,7 @@ func newWebAppAuthflowFinishFlowHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: handle, AppID: appID, Clock: clockClock, @@ -161215,7 +158442,7 @@ func newWebAppAuthflowFinishFlowHandler(p *deps.RequestProvider) http.Handler { sessionConfig := appConfig.Session cookieDef := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef, @@ -161254,7 +158481,7 @@ func newWebAppAuthflowFinishFlowHandler(p *deps.RequestProvider) http.Handler { UserAgentString: userAgentString, AppID: appID, Redis: handle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -161810,36 +159037,9 @@ func newWebAppAuthflowV2FinishFlowHandler(p *deps.RequestProvider) http.Handler SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: handle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(handle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -161947,6 +159147,15 @@ func newWebAppAuthflowV2FinishFlowHandler(p *deps.RequestProvider) http.Handler Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(handle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -162321,7 +159530,7 @@ func newWebAppAuthflowV2FinishFlowHandler(p *deps.RequestProvider) http.Handler SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: handle, AppID: appID, Clock: clockClock, @@ -162330,7 +159539,7 @@ func newWebAppAuthflowV2FinishFlowHandler(p *deps.RequestProvider) http.Handler sessionConfig := appConfig.Session cookieDef := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef, @@ -162369,7 +159578,7 @@ func newWebAppAuthflowV2FinishFlowHandler(p *deps.RequestProvider) http.Handler UserAgentString: userAgentString, AppID: appID, Redis: handle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -162925,36 +160134,9 @@ func newWebAppAuthflowV2AccountLinkingHandler(p *deps.RequestProvider) http.Hand SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: handle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(handle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -163062,6 +160244,15 @@ func newWebAppAuthflowV2AccountLinkingHandler(p *deps.RequestProvider) http.Hand Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(handle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -163436,7 +160627,7 @@ func newWebAppAuthflowV2AccountLinkingHandler(p *deps.RequestProvider) http.Hand SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: handle, AppID: appID, Clock: clockClock, @@ -163445,7 +160636,7 @@ func newWebAppAuthflowV2AccountLinkingHandler(p *deps.RequestProvider) http.Hand sessionConfig := appConfig.Session cookieDef := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef, @@ -163484,7 +160675,7 @@ func newWebAppAuthflowV2AccountLinkingHandler(p *deps.RequestProvider) http.Hand UserAgentString: userAgentString, AppID: appID, Redis: handle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -164153,36 +161344,9 @@ func newWebAppAuthflowV2WechatHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: handle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(handle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -164290,6 +161454,15 @@ func newWebAppAuthflowV2WechatHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(handle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -164664,7 +161837,7 @@ func newWebAppAuthflowV2WechatHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: handle, AppID: appID, Clock: clockClock, @@ -164673,7 +161846,7 @@ func newWebAppAuthflowV2WechatHandler(p *deps.RequestProvider) http.Handler { sessionConfig := appConfig.Session cookieDef := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef, @@ -164712,7 +161885,7 @@ func newWebAppAuthflowV2WechatHandler(p *deps.RequestProvider) http.Handler { UserAgentString: userAgentString, AppID: appID, Redis: handle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -165269,36 +162442,9 @@ func newWebAppAuthflowV2LDAPLoginHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: handle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(handle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -165406,6 +162552,15 @@ func newWebAppAuthflowV2LDAPLoginHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(handle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -165780,7 +162935,7 @@ func newWebAppAuthflowV2LDAPLoginHandler(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: handle, AppID: appID, Clock: clockClock, @@ -165789,7 +162944,7 @@ func newWebAppAuthflowV2LDAPLoginHandler(p *deps.RequestProvider) http.Handler { sessionConfig := appConfig.Session cookieDef := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef, @@ -165828,7 +162983,7 @@ func newWebAppAuthflowV2LDAPLoginHandler(p *deps.RequestProvider) http.Handler { UserAgentString: userAgentString, AppID: appID, Redis: handle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -166370,38 +163525,9 @@ func newSAMLMetadataHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - remoteIP := deps.ProvideRemoteIP(request, trustProxy) - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - factory := appProvider.LoggerFactory - logger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: logger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -166438,7 +163564,8 @@ func newSAMLMetadataHandler(p *deps.RequestProvider) http.Handler { } authenticatorConfig := appConfig.Authenticator authenticatorPasswordConfig := authenticatorConfig.Password - passwordLogger := password.NewLogger(factory) + factory := appProvider.LoggerFactory + logger := password.NewLogger(factory) historyStore := &password.HistoryStore{ Clock: clockClock, SQLBuilder: sqlBuilderApp, @@ -166457,7 +163584,7 @@ func newSAMLMetadataHandler(p *deps.RequestProvider) http.Handler { Store: passwordStore, Config: authenticatorPasswordConfig, Clock: clockClock, - Logger: passwordLogger, + Logger: logger, PasswordHistory: historyStore, PasswordChecker: passwordChecker, Expiry: expiry, @@ -166493,6 +163620,7 @@ func newSAMLMetadataHandler(p *deps.RequestProvider) http.Handler { } testModeConfig := appConfig.TestMode testModeFeatureConfig := featureConfig.TestMode + remoteIP := deps.ProvideRemoteIP(request, trustProxy) codeStoreRedis := &otp.CodeStoreRedis{ Redis: appredisHandle, AppID: appID, @@ -166509,6 +163637,15 @@ func newSAMLMetadataHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -166610,7 +163747,7 @@ func newSAMLMetadataHandler(p *deps.RequestProvider) http.Handler { } userAgentString := deps.ProvideUserAgentString(request) storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -166641,7 +163778,7 @@ func newSAMLMetadataHandler(p *deps.RequestProvider) http.Handler { UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -166849,37 +163986,9 @@ func newSAMLLoginHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - remoteIP := deps.ProvideRemoteIP(request, trustProxy) - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - logger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: logger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -166916,7 +164025,7 @@ func newSAMLLoginHandler(p *deps.RequestProvider) http.Handler { } authenticatorConfig := appConfig.Authenticator authenticatorPasswordConfig := authenticatorConfig.Password - passwordLogger := password.NewLogger(factory) + logger := password.NewLogger(factory) historyStore := &password.HistoryStore{ Clock: clockClock, SQLBuilder: sqlBuilderApp, @@ -166935,7 +164044,7 @@ func newSAMLLoginHandler(p *deps.RequestProvider) http.Handler { Store: passwordStore, Config: authenticatorPasswordConfig, Clock: clockClock, - Logger: passwordLogger, + Logger: logger, PasswordHistory: historyStore, PasswordChecker: passwordChecker, Expiry: expiry, @@ -166971,6 +164080,7 @@ func newSAMLLoginHandler(p *deps.RequestProvider) http.Handler { } testModeConfig := appConfig.TestMode testModeFeatureConfig := featureConfig.TestMode + remoteIP := deps.ProvideRemoteIP(request, trustProxy) codeStoreRedis := &otp.CodeStoreRedis{ Redis: appredisHandle, AppID: appID, @@ -166987,6 +164097,15 @@ func newSAMLLoginHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -167088,7 +164207,7 @@ func newSAMLLoginHandler(p *deps.RequestProvider) http.Handler { } userAgentString := deps.ProvideUserAgentString(request) storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -167119,7 +164238,7 @@ func newSAMLLoginHandler(p *deps.RequestProvider) http.Handler { UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -167461,7 +164580,7 @@ func newSAMLLoginHandler(p *deps.RequestProvider) http.Handler { cookieManager := deps.NewCookieManager(request, trustProxy, httpConfig) cookieDef := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef, @@ -167696,37 +164815,9 @@ func newSAMLLoginFinishHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - remoteIP := deps.ProvideRemoteIP(request, trustProxy) - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - logger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: logger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -167763,7 +164854,7 @@ func newSAMLLoginFinishHandler(p *deps.RequestProvider) http.Handler { } authenticatorConfig := appConfig.Authenticator authenticatorPasswordConfig := authenticatorConfig.Password - passwordLogger := password.NewLogger(factory) + logger := password.NewLogger(factory) historyStore := &password.HistoryStore{ Clock: clockClock, SQLBuilder: sqlBuilderApp, @@ -167782,7 +164873,7 @@ func newSAMLLoginFinishHandler(p *deps.RequestProvider) http.Handler { Store: passwordStore, Config: authenticatorPasswordConfig, Clock: clockClock, - Logger: passwordLogger, + Logger: logger, PasswordHistory: historyStore, PasswordChecker: passwordChecker, Expiry: expiry, @@ -167818,6 +164909,7 @@ func newSAMLLoginFinishHandler(p *deps.RequestProvider) http.Handler { } testModeConfig := appConfig.TestMode testModeFeatureConfig := featureConfig.TestMode + remoteIP := deps.ProvideRemoteIP(request, trustProxy) codeStoreRedis := &otp.CodeStoreRedis{ Redis: appredisHandle, AppID: appID, @@ -167834,6 +164926,15 @@ func newSAMLLoginFinishHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -167935,7 +165036,7 @@ func newSAMLLoginFinishHandler(p *deps.RequestProvider) http.Handler { } userAgentString := deps.ProvideUserAgentString(request) storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -167966,7 +165067,7 @@ func newSAMLLoginFinishHandler(p *deps.RequestProvider) http.Handler { UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -168198,37 +165299,9 @@ func newSAMLLogoutHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - remoteIP := deps.ProvideRemoteIP(request, trustProxy) - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - logger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: logger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -168265,7 +165338,7 @@ func newSAMLLogoutHandler(p *deps.RequestProvider) http.Handler { } authenticatorConfig := appConfig.Authenticator authenticatorPasswordConfig := authenticatorConfig.Password - passwordLogger := password.NewLogger(factory) + logger := password.NewLogger(factory) historyStore := &password.HistoryStore{ Clock: clockClock, SQLBuilder: sqlBuilderApp, @@ -168284,7 +165357,7 @@ func newSAMLLogoutHandler(p *deps.RequestProvider) http.Handler { Store: passwordStore, Config: authenticatorPasswordConfig, Clock: clockClock, - Logger: passwordLogger, + Logger: logger, PasswordHistory: historyStore, PasswordChecker: passwordChecker, Expiry: expiry, @@ -168320,6 +165393,7 @@ func newSAMLLogoutHandler(p *deps.RequestProvider) http.Handler { } testModeConfig := appConfig.TestMode testModeFeatureConfig := featureConfig.TestMode + remoteIP := deps.ProvideRemoteIP(request, trustProxy) codeStoreRedis := &otp.CodeStoreRedis{ Redis: appredisHandle, AppID: appID, @@ -168336,6 +165410,15 @@ func newSAMLLogoutHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -168437,7 +165520,7 @@ func newSAMLLogoutHandler(p *deps.RequestProvider) http.Handler { } userAgentString := deps.ProvideUserAgentString(request) storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -168468,7 +165551,7 @@ func newSAMLLogoutHandler(p *deps.RequestProvider) http.Handler { UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -168515,7 +165598,7 @@ func newSAMLLogoutHandler(p *deps.RequestProvider) http.Handler { cookieManager := deps.NewCookieManager(request, trustProxy, httpConfig) cookieDef := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef, @@ -168876,36 +165959,9 @@ func newWebAppAuthflowV2SettingsProfile(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -169013,6 +166069,15 @@ func newWebAppAuthflowV2SettingsProfile(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -169387,7 +166452,7 @@ func newWebAppAuthflowV2SettingsProfile(p *deps.RequestProvider) http.Handler { SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -169396,7 +166461,7 @@ func newWebAppAuthflowV2SettingsProfile(p *deps.RequestProvider) http.Handler { sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -169425,7 +166490,7 @@ func newWebAppAuthflowV2SettingsProfile(p *deps.RequestProvider) http.Handler { UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -169906,36 +166971,9 @@ func newWebAppAuthflowV2SettingsIdentityAddEmailHandler(p *deps.RequestProvider) SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -170043,6 +167081,15 @@ func newWebAppAuthflowV2SettingsIdentityAddEmailHandler(p *deps.RequestProvider) Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -170417,7 +167464,7 @@ func newWebAppAuthflowV2SettingsIdentityAddEmailHandler(p *deps.RequestProvider) SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -170426,7 +167473,7 @@ func newWebAppAuthflowV2SettingsIdentityAddEmailHandler(p *deps.RequestProvider) sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -170455,7 +167502,7 @@ func newWebAppAuthflowV2SettingsIdentityAddEmailHandler(p *deps.RequestProvider) UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -170951,36 +167998,9 @@ func newWebAppAuthflowV2SettingsIdentityEditEmailHandler(p *deps.RequestProvider SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -171088,6 +168108,15 @@ func newWebAppAuthflowV2SettingsIdentityEditEmailHandler(p *deps.RequestProvider Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -171462,7 +168491,7 @@ func newWebAppAuthflowV2SettingsIdentityEditEmailHandler(p *deps.RequestProvider SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -171471,7 +168500,7 @@ func newWebAppAuthflowV2SettingsIdentityEditEmailHandler(p *deps.RequestProvider sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -171500,7 +168529,7 @@ func newWebAppAuthflowV2SettingsIdentityEditEmailHandler(p *deps.RequestProvider UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -171936,38 +168965,9 @@ func newWebAppAuthflowV2SettingsIdentityListEmailHandler(p *deps.RequestProvider SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - remoteIP := deps.ProvideRemoteIP(request, trustProxy) - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - factory := appProvider.LoggerFactory - logger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: logger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -171994,6 +168994,7 @@ func newWebAppAuthflowV2SettingsIdentityListEmailHandler(p *deps.RequestProvider SIWE: siweProvider, LDAP: ldapProvider, } + factory := appProvider.LoggerFactory serviceLogger := webapp2.NewServiceLogger(factory) sessionStoreRedis := &webapp2.SessionStoreRedis{ AppID: appID, @@ -172031,7 +169032,8 @@ func newWebAppAuthflowV2SettingsIdentityListEmailHandler(p *deps.RequestProvider OAuthConfig: oAuthConfig, TesterEndpoints: endpointsEndpoints, } - interactionLogger := interaction.NewLogger(factory) + logger := interaction.NewLogger(factory) + remoteIP := deps.ProvideRemoteIP(request, trustProxy) redisLogger := redis.NewLogger(factory) redisStore := &redis.Store{ Redis: appredisHandle, @@ -172135,6 +169137,15 @@ func newWebAppAuthflowV2SettingsIdentityListEmailHandler(p *deps.RequestProvider Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -172509,7 +169520,7 @@ func newWebAppAuthflowV2SettingsIdentityListEmailHandler(p *deps.RequestProvider SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -172518,7 +169529,7 @@ func newWebAppAuthflowV2SettingsIdentityListEmailHandler(p *deps.RequestProvider sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -172547,7 +169558,7 @@ func newWebAppAuthflowV2SettingsIdentityListEmailHandler(p *deps.RequestProvider UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -172729,7 +169740,7 @@ func newWebAppAuthflowV2SettingsIdentityListEmailHandler(p *deps.RequestProvider AppID: appID, } interactionService := &interaction.Service{ - Logger: interactionLogger, + Logger: logger, Context: interactionContext, Store: interactionStoreRedis, } @@ -173031,36 +170042,9 @@ func newWebAppAuthflowV2SettingsIdentityVerifyEmailHandler(p *deps.RequestProvid SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -173168,6 +170152,15 @@ func newWebAppAuthflowV2SettingsIdentityVerifyEmailHandler(p *deps.RequestProvid Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -173542,7 +170535,7 @@ func newWebAppAuthflowV2SettingsIdentityVerifyEmailHandler(p *deps.RequestProvid SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -173551,7 +170544,7 @@ func newWebAppAuthflowV2SettingsIdentityVerifyEmailHandler(p *deps.RequestProvid sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -173580,7 +170573,7 @@ func newWebAppAuthflowV2SettingsIdentityVerifyEmailHandler(p *deps.RequestProvid UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -174019,38 +171012,9 @@ func newWebAppAuthflowV2SettingsIdentityViewEmailHandler(p *deps.RequestProvider SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - remoteIP := deps.ProvideRemoteIP(request, trustProxy) - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - factory := appProvider.LoggerFactory - logger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: logger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -174077,6 +171041,7 @@ func newWebAppAuthflowV2SettingsIdentityViewEmailHandler(p *deps.RequestProvider SIWE: siweProvider, LDAP: ldapProvider, } + factory := appProvider.LoggerFactory serviceLogger := webapp2.NewServiceLogger(factory) sessionStoreRedis := &webapp2.SessionStoreRedis{ AppID: appID, @@ -174114,7 +171079,8 @@ func newWebAppAuthflowV2SettingsIdentityViewEmailHandler(p *deps.RequestProvider OAuthConfig: oAuthConfig, TesterEndpoints: endpointsEndpoints, } - interactionLogger := interaction.NewLogger(factory) + logger := interaction.NewLogger(factory) + remoteIP := deps.ProvideRemoteIP(request, trustProxy) redisLogger := redis.NewLogger(factory) redisStore := &redis.Store{ Redis: appredisHandle, @@ -174218,6 +171184,15 @@ func newWebAppAuthflowV2SettingsIdentityViewEmailHandler(p *deps.RequestProvider Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -174592,7 +171567,7 @@ func newWebAppAuthflowV2SettingsIdentityViewEmailHandler(p *deps.RequestProvider SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -174601,7 +171576,7 @@ func newWebAppAuthflowV2SettingsIdentityViewEmailHandler(p *deps.RequestProvider sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -174630,7 +171605,7 @@ func newWebAppAuthflowV2SettingsIdentityViewEmailHandler(p *deps.RequestProvider UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -174812,7 +171787,7 @@ func newWebAppAuthflowV2SettingsIdentityViewEmailHandler(p *deps.RequestProvider AppID: appID, } interactionService := &interaction.Service{ - Logger: interactionLogger, + Logger: logger, Context: interactionContext, Store: interactionStoreRedis, } @@ -175136,36 +172111,9 @@ func newWebAppAuthflowV2SettingsIdentityChangePrimaryEmailHandler(p *deps.Reques SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -175273,6 +172221,15 @@ func newWebAppAuthflowV2SettingsIdentityChangePrimaryEmailHandler(p *deps.Reques Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -175647,7 +172604,7 @@ func newWebAppAuthflowV2SettingsIdentityChangePrimaryEmailHandler(p *deps.Reques SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -175656,7 +172613,7 @@ func newWebAppAuthflowV2SettingsIdentityChangePrimaryEmailHandler(p *deps.Reques sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -175685,7 +172642,7 @@ func newWebAppAuthflowV2SettingsIdentityChangePrimaryEmailHandler(p *deps.Reques UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -176173,36 +173130,9 @@ func newWebAppAuthflowV2SettingsIdentityAddPhoneHandler(p *deps.RequestProvider) SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -176310,6 +173240,15 @@ func newWebAppAuthflowV2SettingsIdentityAddPhoneHandler(p *deps.RequestProvider) Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -176684,7 +173623,7 @@ func newWebAppAuthflowV2SettingsIdentityAddPhoneHandler(p *deps.RequestProvider) SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -176693,7 +173632,7 @@ func newWebAppAuthflowV2SettingsIdentityAddPhoneHandler(p *deps.RequestProvider) sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -176722,7 +173661,7 @@ func newWebAppAuthflowV2SettingsIdentityAddPhoneHandler(p *deps.RequestProvider) UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -177219,36 +174158,9 @@ func newWebAppAuthflowV2SettingsIdentityEditPhoneHandler(p *deps.RequestProvider SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -177356,6 +174268,15 @@ func newWebAppAuthflowV2SettingsIdentityEditPhoneHandler(p *deps.RequestProvider Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -177730,7 +174651,7 @@ func newWebAppAuthflowV2SettingsIdentityEditPhoneHandler(p *deps.RequestProvider SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -177739,7 +174660,7 @@ func newWebAppAuthflowV2SettingsIdentityEditPhoneHandler(p *deps.RequestProvider sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -177768,7 +174689,7 @@ func newWebAppAuthflowV2SettingsIdentityEditPhoneHandler(p *deps.RequestProvider UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -178205,38 +175126,9 @@ func newWebAppAuthflowV2SettingsIdentityListPhoneHandler(p *deps.RequestProvider SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - remoteIP := deps.ProvideRemoteIP(request, trustProxy) - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - factory := appProvider.LoggerFactory - logger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: logger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -178263,6 +175155,7 @@ func newWebAppAuthflowV2SettingsIdentityListPhoneHandler(p *deps.RequestProvider SIWE: siweProvider, LDAP: ldapProvider, } + factory := appProvider.LoggerFactory serviceLogger := webapp2.NewServiceLogger(factory) sessionStoreRedis := &webapp2.SessionStoreRedis{ AppID: appID, @@ -178300,7 +175193,8 @@ func newWebAppAuthflowV2SettingsIdentityListPhoneHandler(p *deps.RequestProvider OAuthConfig: oAuthConfig, TesterEndpoints: endpointsEndpoints, } - interactionLogger := interaction.NewLogger(factory) + logger := interaction.NewLogger(factory) + remoteIP := deps.ProvideRemoteIP(request, trustProxy) redisLogger := redis.NewLogger(factory) redisStore := &redis.Store{ Redis: appredisHandle, @@ -178404,6 +175298,15 @@ func newWebAppAuthflowV2SettingsIdentityListPhoneHandler(p *deps.RequestProvider Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -178778,7 +175681,7 @@ func newWebAppAuthflowV2SettingsIdentityListPhoneHandler(p *deps.RequestProvider SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -178787,7 +175690,7 @@ func newWebAppAuthflowV2SettingsIdentityListPhoneHandler(p *deps.RequestProvider sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -178816,7 +175719,7 @@ func newWebAppAuthflowV2SettingsIdentityListPhoneHandler(p *deps.RequestProvider UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -178998,7 +175901,7 @@ func newWebAppAuthflowV2SettingsIdentityListPhoneHandler(p *deps.RequestProvider AppID: appID, } interactionService := &interaction.Service{ - Logger: interactionLogger, + Logger: logger, Context: interactionContext, Store: interactionStoreRedis, } @@ -179238,38 +176141,9 @@ func newWebAppAuthflowV2SettingsIdentityViewPhoneHandler(p *deps.RequestProvider SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - remoteIP := deps.ProvideRemoteIP(request, trustProxy) - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - factory := appProvider.LoggerFactory - logger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: logger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -179296,6 +176170,7 @@ func newWebAppAuthflowV2SettingsIdentityViewPhoneHandler(p *deps.RequestProvider SIWE: siweProvider, LDAP: ldapProvider, } + factory := appProvider.LoggerFactory serviceLogger := webapp2.NewServiceLogger(factory) sessionStoreRedis := &webapp2.SessionStoreRedis{ AppID: appID, @@ -179333,7 +176208,8 @@ func newWebAppAuthflowV2SettingsIdentityViewPhoneHandler(p *deps.RequestProvider OAuthConfig: oAuthConfig, TesterEndpoints: endpointsEndpoints, } - interactionLogger := interaction.NewLogger(factory) + logger := interaction.NewLogger(factory) + remoteIP := deps.ProvideRemoteIP(request, trustProxy) redisLogger := redis.NewLogger(factory) redisStore := &redis.Store{ Redis: appredisHandle, @@ -179437,6 +176313,15 @@ func newWebAppAuthflowV2SettingsIdentityViewPhoneHandler(p *deps.RequestProvider Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -179811,7 +176696,7 @@ func newWebAppAuthflowV2SettingsIdentityViewPhoneHandler(p *deps.RequestProvider SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -179820,7 +176705,7 @@ func newWebAppAuthflowV2SettingsIdentityViewPhoneHandler(p *deps.RequestProvider sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -179849,7 +176734,7 @@ func newWebAppAuthflowV2SettingsIdentityViewPhoneHandler(p *deps.RequestProvider UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -180031,7 +176916,7 @@ func newWebAppAuthflowV2SettingsIdentityViewPhoneHandler(p *deps.RequestProvider AppID: appID, } interactionService := &interaction.Service{ - Logger: interactionLogger, + Logger: logger, Context: interactionContext, Store: interactionStoreRedis, } @@ -180350,36 +177235,9 @@ func newWebAppAuthflowV2SettingsIdentityChangePrimaryPhoneHandler(p *deps.Reques SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -180487,6 +177345,15 @@ func newWebAppAuthflowV2SettingsIdentityChangePrimaryPhoneHandler(p *deps.Reques Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -180861,7 +177728,7 @@ func newWebAppAuthflowV2SettingsIdentityChangePrimaryPhoneHandler(p *deps.Reques SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -180870,7 +177737,7 @@ func newWebAppAuthflowV2SettingsIdentityChangePrimaryPhoneHandler(p *deps.Reques sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -180899,7 +177766,7 @@ func newWebAppAuthflowV2SettingsIdentityChangePrimaryPhoneHandler(p *deps.Reques UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -181387,36 +178254,9 @@ func newWebAppAuthflowV2SettingsIdentityVerifyPhoneHandler(p *deps.RequestProvid SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -181524,6 +178364,15 @@ func newWebAppAuthflowV2SettingsIdentityVerifyPhoneHandler(p *deps.RequestProvid Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -181898,7 +178747,7 @@ func newWebAppAuthflowV2SettingsIdentityVerifyPhoneHandler(p *deps.RequestProvid SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -181907,7 +178756,7 @@ func newWebAppAuthflowV2SettingsIdentityVerifyPhoneHandler(p *deps.RequestProvid sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -181936,7 +178785,7 @@ func newWebAppAuthflowV2SettingsIdentityVerifyPhoneHandler(p *deps.RequestProvid UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -182375,38 +179224,9 @@ func newWebAppAuthflowV2SettingsIdentityListUsernameHandler(p *deps.RequestProvi SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - remoteIP := deps.ProvideRemoteIP(request, trustProxy) - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - factory := appProvider.LoggerFactory - logger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: logger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -182433,6 +179253,7 @@ func newWebAppAuthflowV2SettingsIdentityListUsernameHandler(p *deps.RequestProvi SIWE: siweProvider, LDAP: ldapProvider, } + factory := appProvider.LoggerFactory serviceLogger := webapp2.NewServiceLogger(factory) sessionStoreRedis := &webapp2.SessionStoreRedis{ AppID: appID, @@ -182470,7 +179291,8 @@ func newWebAppAuthflowV2SettingsIdentityListUsernameHandler(p *deps.RequestProvi OAuthConfig: oAuthConfig, TesterEndpoints: endpointsEndpoints, } - interactionLogger := interaction.NewLogger(factory) + logger := interaction.NewLogger(factory) + remoteIP := deps.ProvideRemoteIP(request, trustProxy) redisLogger := redis.NewLogger(factory) redisStore := &redis.Store{ Redis: appredisHandle, @@ -182574,6 +179396,15 @@ func newWebAppAuthflowV2SettingsIdentityListUsernameHandler(p *deps.RequestProvi Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -182948,7 +179779,7 @@ func newWebAppAuthflowV2SettingsIdentityListUsernameHandler(p *deps.RequestProvi SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -182957,7 +179788,7 @@ func newWebAppAuthflowV2SettingsIdentityListUsernameHandler(p *deps.RequestProvi sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -182986,7 +179817,7 @@ func newWebAppAuthflowV2SettingsIdentityListUsernameHandler(p *deps.RequestProvi UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -183168,7 +179999,7 @@ func newWebAppAuthflowV2SettingsIdentityListUsernameHandler(p *deps.RequestProvi AppID: appID, } interactionService := &interaction.Service{ - Logger: interactionLogger, + Logger: logger, Context: interactionContext, Store: interactionStoreRedis, } @@ -183415,36 +180246,9 @@ func newWebAppAuthflowV2SettingsIdentityNewUsernameHandler(p *deps.RequestProvid SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -183552,6 +180356,15 @@ func newWebAppAuthflowV2SettingsIdentityNewUsernameHandler(p *deps.RequestProvid Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -183945,7 +180758,7 @@ func newWebAppAuthflowV2SettingsIdentityNewUsernameHandler(p *deps.RequestProvid SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -183956,7 +180769,7 @@ func newWebAppAuthflowV2SettingsIdentityNewUsernameHandler(p *deps.RequestProvid cookieManager := deps.NewCookieManager(request, trustProxy, httpConfig) cookieDef := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef, @@ -183995,7 +180808,7 @@ func newWebAppAuthflowV2SettingsIdentityNewUsernameHandler(p *deps.RequestProvid UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -184461,36 +181274,9 @@ func newWebAppAuthflowV2SettingsIdentityViewUsernameHandler(p *deps.RequestProvi SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -184598,6 +181384,15 @@ func newWebAppAuthflowV2SettingsIdentityViewUsernameHandler(p *deps.RequestProvi Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -184991,7 +181786,7 @@ func newWebAppAuthflowV2SettingsIdentityViewUsernameHandler(p *deps.RequestProvi SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -185002,7 +181797,7 @@ func newWebAppAuthflowV2SettingsIdentityViewUsernameHandler(p *deps.RequestProvi cookieManager := deps.NewCookieManager(request, trustProxy, httpConfig) cookieDef := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef, @@ -185041,7 +181836,7 @@ func newWebAppAuthflowV2SettingsIdentityViewUsernameHandler(p *deps.RequestProvi UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -185509,36 +182304,9 @@ func newWebAppAuthflowV2SettingsIdentityEditUsernameHandler(p *deps.RequestProvi SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -185646,6 +182414,15 @@ func newWebAppAuthflowV2SettingsIdentityEditUsernameHandler(p *deps.RequestProvi Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -186039,7 +182816,7 @@ func newWebAppAuthflowV2SettingsIdentityEditUsernameHandler(p *deps.RequestProvi SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -186050,7 +182827,7 @@ func newWebAppAuthflowV2SettingsIdentityEditUsernameHandler(p *deps.RequestProvi cookieManager := deps.NewCookieManager(request, trustProxy, httpConfig) cookieDef := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef, @@ -186089,7 +182866,7 @@ func newWebAppAuthflowV2SettingsIdentityEditUsernameHandler(p *deps.RequestProvi UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -186599,36 +183376,9 @@ func newWebAppAuthflowV2SettingsIdentityListOAuthHandler(p *deps.RequestProvider SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -186736,6 +183486,15 @@ func newWebAppAuthflowV2SettingsIdentityListOAuthHandler(p *deps.RequestProvider Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -187110,7 +183869,7 @@ func newWebAppAuthflowV2SettingsIdentityListOAuthHandler(p *deps.RequestProvider SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -187119,7 +183878,7 @@ func newWebAppAuthflowV2SettingsIdentityListOAuthHandler(p *deps.RequestProvider sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -187148,7 +183907,7 @@ func newWebAppAuthflowV2SettingsIdentityListOAuthHandler(p *deps.RequestProvider UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -188257,36 +185016,9 @@ func newSessionMiddleware(p *deps.RequestProvider) httproute.Middleware { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - siweStoreRedis := &siwe2.StoreRedis{ - Redis: handle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(handle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: siweStoreRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -188394,6 +185126,15 @@ func newSessionMiddleware(p *deps.RequestProvider) httproute.Middleware { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(handle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -189070,36 +185811,9 @@ func newWebAppSessionMiddleware(p *deps.RequestProvider) httproute.Middleware { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: handle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(handle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -189207,6 +185921,15 @@ func newWebAppSessionMiddleware(p *deps.RequestProvider) httproute.Middleware { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(handle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -189581,7 +186304,7 @@ func newWebAppSessionMiddleware(p *deps.RequestProvider) httproute.Middleware { SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: handle, AppID: appID, Clock: clockClock, @@ -189590,7 +186313,7 @@ func newWebAppSessionMiddleware(p *deps.RequestProvider) httproute.Middleware { sessionConfig := appConfig.Session cookieDef2 := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef2, @@ -189619,7 +186342,7 @@ func newWebAppSessionMiddleware(p *deps.RequestProvider) httproute.Middleware { UserAgentString: userAgentString, AppID: appID, Redis: handle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -190049,38 +186772,9 @@ func newWebAppUIParamMiddleware(p *deps.RequestProvider) httproute.Middleware { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - remoteIP := deps.ProvideRemoteIP(request, trustProxy) - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - factory := appProvider.LoggerFactory - logger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: logger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -190117,7 +186811,8 @@ func newWebAppUIParamMiddleware(p *deps.RequestProvider) httproute.Middleware { } authenticatorConfig := appConfig.Authenticator authenticatorPasswordConfig := authenticatorConfig.Password - passwordLogger := password.NewLogger(factory) + factory := appProvider.LoggerFactory + logger := password.NewLogger(factory) historyStore := &password.HistoryStore{ Clock: clockClock, SQLBuilder: sqlBuilderApp, @@ -190136,7 +186831,7 @@ func newWebAppUIParamMiddleware(p *deps.RequestProvider) httproute.Middleware { Store: passwordStore, Config: authenticatorPasswordConfig, Clock: clockClock, - Logger: passwordLogger, + Logger: logger, PasswordHistory: historyStore, PasswordChecker: passwordChecker, Expiry: expiry, @@ -190172,6 +186867,7 @@ func newWebAppUIParamMiddleware(p *deps.RequestProvider) httproute.Middleware { } testModeConfig := appConfig.TestMode testModeFeatureConfig := featureConfig.TestMode + remoteIP := deps.ProvideRemoteIP(request, trustProxy) codeStoreRedis := &otp.CodeStoreRedis{ Redis: appredisHandle, AppID: appID, @@ -190188,6 +186884,15 @@ func newWebAppUIParamMiddleware(p *deps.RequestProvider) httproute.Middleware { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -190289,7 +186994,7 @@ func newWebAppUIParamMiddleware(p *deps.RequestProvider) httproute.Middleware { } userAgentString := deps.ProvideUserAgentString(request) storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -190320,7 +187025,7 @@ func newWebAppUIParamMiddleware(p *deps.RequestProvider) httproute.Middleware { UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -190589,36 +187294,9 @@ func newSettingsSubRoutesMiddleware(p *deps.RequestProvider) httproute.Middlewar SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -190726,6 +187404,15 @@ func newSettingsSubRoutesMiddleware(p *deps.RequestProvider) httproute.Middlewar Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -191100,7 +187787,7 @@ func newSettingsSubRoutesMiddleware(p *deps.RequestProvider) httproute.Middlewar SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clockClock, @@ -191111,7 +187798,7 @@ func newSettingsSubRoutesMiddleware(p *deps.RequestProvider) httproute.Middlewar cookieManager := deps.NewCookieManager(request, trustProxy, httpConfig) cookieDef := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef, @@ -191150,7 +187837,7 @@ func newSettingsSubRoutesMiddleware(p *deps.RequestProvider) httproute.Middlewar UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, diff --git a/pkg/lib/authn/identity/siwe/provider.go b/pkg/lib/authn/identity/siwe/provider.go index f4de3c148c..84b9403c79 100644 --- a/pkg/lib/authn/identity/siwe/provider.go +++ b/pkg/lib/authn/identity/siwe/provider.go @@ -2,24 +2,16 @@ package siwe import ( "context" - "crypto/ecdsa" + "fmt" "sort" - "github.com/authgear/authgear-server/pkg/api/model" "github.com/authgear/authgear-server/pkg/lib/authn/identity" "github.com/authgear/authgear-server/pkg/util/clock" - "github.com/authgear/authgear-server/pkg/util/uuid" ) -// nolint: golint -type SIWEService interface { - VerifyMessage(ctx context.Context, msg string, signature string) (*model.SIWEWallet, *ecdsa.PublicKey, error) -} - type Provider struct { Store *Store Clock clock.Clock - SIWE SIWEService } func (p *Provider) List(ctx context.Context, userID string) ([]*identity.SIWE, error) { @@ -37,12 +29,7 @@ func (p *Provider) Get(ctx context.Context, userID, id string) (*identity.SIWE, } func (p *Provider) GetByMessage(ctx context.Context, msg string, signature string) (*identity.SIWE, error) { - wallet, _, err := p.SIWE.VerifyMessage(ctx, msg, signature) - if err != nil { - return nil, err - } - - return p.Store.GetByAddress(ctx, wallet.ChainID, wallet.Address) + panic(fmt.Errorf("siwe: SIWE is deprecated")) } func (p *Provider) GetMany(ctx context.Context, ids []string) ([]*identity.SIWE, error) { @@ -55,29 +42,7 @@ func (p *Provider) New( msg string, signature string, ) (*identity.SIWE, error) { - wallet, pubKey, err := p.SIWE.VerifyMessage(ctx, msg, signature) - if err != nil { - return nil, err - } - - encodedPublicKey, err := model.NewSIWEPublicKey(pubKey) - if err != nil { - return nil, err - } - - i := &identity.SIWE{ - ID: uuid.New(), - UserID: userID, - Address: wallet.Address, - ChainID: wallet.ChainID, - - Data: &model.SIWEVerifiedData{ - Message: msg, - Signature: signature, - EncodedPublicKey: encodedPublicKey, - }, - } - return i, nil + panic(fmt.Errorf("siwe: SIWE is deprecated")) } func (p *Provider) Create(ctx context.Context, i *identity.SIWE) error { diff --git a/pkg/lib/deps/deps_common.go b/pkg/lib/deps/deps_common.go index 6bbf5cd7e6..150175c458 100644 --- a/pkg/lib/deps/deps_common.go +++ b/pkg/lib/deps/deps_common.go @@ -41,7 +41,6 @@ import ( featurecustomattrs "github.com/authgear/authgear-server/pkg/lib/feature/customattrs" "github.com/authgear/authgear-server/pkg/lib/feature/forgotpassword" featurepasskey "github.com/authgear/authgear-server/pkg/lib/feature/passkey" - featuresiwe "github.com/authgear/authgear-server/pkg/lib/feature/siwe" featurestdattrs "github.com/authgear/authgear-server/pkg/lib/feature/stdattrs" "github.com/authgear/authgear-server/pkg/lib/feature/verification" "github.com/authgear/authgear-server/pkg/lib/healthz" @@ -525,7 +524,6 @@ var CommonDependencySet = wire.NewSet( wire.Bind(new(otp.RateLimiter), new(*ratelimit.Limiter)), wire.Bind(new(messaging.RateLimiter), new(*ratelimit.Limiter)), wire.Bind(new(mfa.RateLimiter), new(*ratelimit.Limiter)), - wire.Bind(new(featuresiwe.RateLimiter), new(*ratelimit.Limiter)), ), wire.NewSet( @@ -594,11 +592,6 @@ var CommonDependencySet = wire.NewSet( wire.Bind(new(accountmanagement.PasskeyService), new(*featurepasskey.Service)), ), - wire.NewSet( - featuresiwe.DependencySet, - wire.Bind(new(identitysiwe.SIWEService), new(*featuresiwe.Service)), - ), - wire.NewSet( workflow.DependencySet, ), diff --git a/pkg/lib/feature/siwe/deps.go b/pkg/lib/feature/siwe/deps.go deleted file mode 100644 index 172f9dab6f..0000000000 --- a/pkg/lib/feature/siwe/deps.go +++ /dev/null @@ -1,10 +0,0 @@ -package siwe - -import "github.com/google/wire" - -var DependencySet = wire.NewSet( - wire.Struct(new(StoreRedis), "*"), - wire.Bind(new(NonceStore), new(*StoreRedis)), - NewLogger, - wire.Struct(new(Service), "*"), -) diff --git a/pkg/lib/feature/siwe/errors.go b/pkg/lib/feature/siwe/errors.go deleted file mode 100644 index ca2c3d99b3..0000000000 --- a/pkg/lib/feature/siwe/errors.go +++ /dev/null @@ -1,10 +0,0 @@ -package siwe - -import ( - "github.com/authgear/authgear-server/pkg/api/apierrors" -) - -var InvalidNonce = apierrors.Forbidden.WithReason("InvalidNonce") -var InvalidNetwork = apierrors.BadRequest.WithReason("InvalidNetwork") - -var ErrNonceNotFound = InvalidNonce.NewWithCause("nonce is expired or invalid", apierrors.StringCause("NonceNotFound")) diff --git a/pkg/lib/feature/siwe/nonce.go b/pkg/lib/feature/siwe/nonce.go deleted file mode 100644 index 67e4121a9b..0000000000 --- a/pkg/lib/feature/siwe/nonce.go +++ /dev/null @@ -1,8 +0,0 @@ -package siwe - -import "time" - -type Nonce struct { - Nonce string `json:"nonce"` - ExpireAt time.Time `json:"expire_at"` -} diff --git a/pkg/lib/feature/siwe/service.go b/pkg/lib/feature/siwe/service.go deleted file mode 100644 index a6e8972535..0000000000 --- a/pkg/lib/feature/siwe/service.go +++ /dev/null @@ -1,149 +0,0 @@ -package siwe - -import ( - "context" - "crypto/ecdsa" - "errors" - "fmt" - "net/url" - "strconv" - "time" - - siwego "github.com/spruceid/siwe-go" - - "github.com/authgear/authgear-server/pkg/api/apierrors" - "github.com/authgear/authgear-server/pkg/api/model" - "github.com/authgear/authgear-server/pkg/lib/config" - "github.com/authgear/authgear-server/pkg/lib/ratelimit" - "github.com/authgear/authgear-server/pkg/util/clock" - "github.com/authgear/authgear-server/pkg/util/httputil" - "github.com/authgear/authgear-server/pkg/util/log" - "github.com/authgear/authgear-server/pkg/util/web3" -) - -//go:generate mockgen -source=service.go -destination=service_mock_test.go -package siwe - -// siwe-go library regex does not support underscore so we define a new one for this case -// https://github.com/spruceid/siwe-go/blob/fc1b0374f4ffff68e3455839655e680be7e0f862/regex.go#L17 -const Alphabet = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" - -const ( - SIWENoncePerIP ratelimit.BucketName = "SIWENoncePerIP" - SIWEVerifyPerIP ratelimit.BucketName = "SIWEVerifyPerIP" -) - -type NonceStore interface { - Create(ctx context.Context, nonce *Nonce) error - Get(ctx context.Context, nonce *Nonce) (*Nonce, error) - Delete(ctx context.Context, nonce *Nonce) error -} - -type RateLimiter interface { - Allow(ctx context.Context, spec ratelimit.BucketSpec) (*ratelimit.FailedReservation, error) - Reserve(ctx context.Context, spec ratelimit.BucketSpec) (*ratelimit.Reservation, *ratelimit.FailedReservation, error) - Cancel(ctx context.Context, r *ratelimit.Reservation) -} - -type Logger struct{ *log.Logger } - -func NewLogger(lf *log.Factory) Logger { return Logger{lf.New("siwe")} } - -type Service struct { - RemoteIP httputil.RemoteIP - HTTPOrigin httputil.HTTPOrigin - Web3Config *config.Deprecated_Web3Config - AuthenticationConfig *config.AuthenticationConfig - - Clock clock.Clock - NonceStore NonceStore - RateLimiter RateLimiter - Logger Logger -} - -func (s *Service) rateLimitGenerateNonce() ratelimit.BucketSpec { - enabled := true - return ratelimit.NewBucketSpec(&config.RateLimitConfig{ - Enabled: &enabled, - Period: config.DurationString(time.Minute.String()), - Burst: 100, - }, SIWENoncePerIP, string(s.RemoteIP)) -} - -func (s *Service) rateLimitVerifyMessage() ratelimit.BucketSpec { - return ratelimit.NewBucketSpec( - s.AuthenticationConfig.RateLimits.SIWE.PerIP, SIWEVerifyPerIP, - string(s.RemoteIP), - ) -} - -func (s *Service) VerifyMessage(ctx context.Context, msg string, signature string) (*model.SIWEWallet, *ecdsa.PublicKey, error) { - message, err := siwego.ParseMessage(msg) - if err != nil { - return nil, nil, err - } - - chainID := message.GetChainID() - - var expectedNetworkID *web3.ContractID - mismatchNetwork := true - for _, networkURL := range s.Web3Config.SIWE.Networks { - expectedNetworkID, err = web3.ParseContractID(networkURL) - if err != nil { - return nil, nil, err - } - - if expectedNetworkID.Network == strconv.Itoa(chainID) { - mismatchNetwork = false - break - } - - } - - if mismatchNetwork { - return nil, nil, InvalidNetwork.NewWithInfo("network does not match expected network", apierrors.Details{"expected_chain_id": fmt.Sprintf("_%s", expectedNetworkID.Network)}) - } - - reservation, failed, err := s.RateLimiter.Reserve(ctx, s.rateLimitVerifyMessage()) - if err != nil { - return nil, nil, err - } - if err := failed.Error(); err != nil { - return nil, nil, err - } - defer s.RateLimiter.Cancel(ctx, reservation) - - messageNonce := message.GetNonce() - existingNonce, err := s.NonceStore.Get(ctx, &Nonce{ - Nonce: messageNonce, - }) - if errors.Is(err, ErrNonceNotFound) { - reservation.PreventCancel() - return nil, nil, err - } else if err != nil { - return nil, nil, err - } - - publicOrigin, err := url.Parse(string(s.HTTPOrigin)) - if err != nil { - return nil, nil, err - } - - now := s.Clock.NowUTC() - pubKey, err := message.Verify(signature, &publicOrigin.Host, &existingNonce.Nonce, &now) - if err != nil { - reservation.PreventCancel() - return nil, nil, err - } - - eip55, err := web3.NewEIP55(message.GetAddress().Hex()) - if err != nil { - return nil, nil, err - } - - wallet := &model.SIWEWallet{ - Address: eip55, - ChainID: message.GetChainID(), - } - - return wallet, pubKey, nil -} diff --git a/pkg/lib/feature/siwe/service_mock_test.go b/pkg/lib/feature/siwe/service_mock_test.go deleted file mode 100644 index b02a8483c8..0000000000 --- a/pkg/lib/feature/siwe/service_mock_test.go +++ /dev/null @@ -1,145 +0,0 @@ -// Code generated by MockGen. DO NOT EDIT. -// Source: service.go - -// Package siwe is a generated GoMock package. -package siwe - -import ( - context "context" - reflect "reflect" - - ratelimit "github.com/authgear/authgear-server/pkg/lib/ratelimit" - gomock "github.com/golang/mock/gomock" -) - -// MockNonceStore is a mock of NonceStore interface. -type MockNonceStore struct { - ctrl *gomock.Controller - recorder *MockNonceStoreMockRecorder -} - -// MockNonceStoreMockRecorder is the mock recorder for MockNonceStore. -type MockNonceStoreMockRecorder struct { - mock *MockNonceStore -} - -// NewMockNonceStore creates a new mock instance. -func NewMockNonceStore(ctrl *gomock.Controller) *MockNonceStore { - mock := &MockNonceStore{ctrl: ctrl} - mock.recorder = &MockNonceStoreMockRecorder{mock} - return mock -} - -// EXPECT returns an object that allows the caller to indicate expected use. -func (m *MockNonceStore) EXPECT() *MockNonceStoreMockRecorder { - return m.recorder -} - -// Create mocks base method. -func (m *MockNonceStore) Create(ctx context.Context, nonce *Nonce) error { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "Create", ctx, nonce) - ret0, _ := ret[0].(error) - return ret0 -} - -// Create indicates an expected call of Create. -func (mr *MockNonceStoreMockRecorder) Create(ctx, nonce interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Create", reflect.TypeOf((*MockNonceStore)(nil).Create), ctx, nonce) -} - -// Delete mocks base method. -func (m *MockNonceStore) Delete(ctx context.Context, nonce *Nonce) error { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "Delete", ctx, nonce) - ret0, _ := ret[0].(error) - return ret0 -} - -// Delete indicates an expected call of Delete. -func (mr *MockNonceStoreMockRecorder) Delete(ctx, nonce interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Delete", reflect.TypeOf((*MockNonceStore)(nil).Delete), ctx, nonce) -} - -// Get mocks base method. -func (m *MockNonceStore) Get(ctx context.Context, nonce *Nonce) (*Nonce, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "Get", ctx, nonce) - ret0, _ := ret[0].(*Nonce) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// Get indicates an expected call of Get. -func (mr *MockNonceStoreMockRecorder) Get(ctx, nonce interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Get", reflect.TypeOf((*MockNonceStore)(nil).Get), ctx, nonce) -} - -// MockRateLimiter is a mock of RateLimiter interface. -type MockRateLimiter struct { - ctrl *gomock.Controller - recorder *MockRateLimiterMockRecorder -} - -// MockRateLimiterMockRecorder is the mock recorder for MockRateLimiter. -type MockRateLimiterMockRecorder struct { - mock *MockRateLimiter -} - -// NewMockRateLimiter creates a new mock instance. -func NewMockRateLimiter(ctrl *gomock.Controller) *MockRateLimiter { - mock := &MockRateLimiter{ctrl: ctrl} - mock.recorder = &MockRateLimiterMockRecorder{mock} - return mock -} - -// EXPECT returns an object that allows the caller to indicate expected use. -func (m *MockRateLimiter) EXPECT() *MockRateLimiterMockRecorder { - return m.recorder -} - -// Allow mocks base method. -func (m *MockRateLimiter) Allow(ctx context.Context, spec ratelimit.BucketSpec) (*ratelimit.FailedReservation, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "Allow", ctx, spec) - ret0, _ := ret[0].(*ratelimit.FailedReservation) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// Allow indicates an expected call of Allow. -func (mr *MockRateLimiterMockRecorder) Allow(ctx, spec interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Allow", reflect.TypeOf((*MockRateLimiter)(nil).Allow), ctx, spec) -} - -// Cancel mocks base method. -func (m *MockRateLimiter) Cancel(ctx context.Context, r *ratelimit.Reservation) { - m.ctrl.T.Helper() - m.ctrl.Call(m, "Cancel", ctx, r) -} - -// Cancel indicates an expected call of Cancel. -func (mr *MockRateLimiterMockRecorder) Cancel(ctx, r interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Cancel", reflect.TypeOf((*MockRateLimiter)(nil).Cancel), ctx, r) -} - -// Reserve mocks base method. -func (m *MockRateLimiter) Reserve(ctx context.Context, spec ratelimit.BucketSpec) (*ratelimit.Reservation, *ratelimit.FailedReservation, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "Reserve", ctx, spec) - ret0, _ := ret[0].(*ratelimit.Reservation) - ret1, _ := ret[1].(*ratelimit.FailedReservation) - ret2, _ := ret[2].(error) - return ret0, ret1, ret2 -} - -// Reserve indicates an expected call of Reserve. -func (mr *MockRateLimiterMockRecorder) Reserve(ctx, spec interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Reserve", reflect.TypeOf((*MockRateLimiter)(nil).Reserve), ctx, spec) -} diff --git a/pkg/lib/feature/siwe/store_redis.go b/pkg/lib/feature/siwe/store_redis.go deleted file mode 100644 index f633fb2758..0000000000 --- a/pkg/lib/feature/siwe/store_redis.go +++ /dev/null @@ -1,81 +0,0 @@ -package siwe - -import ( - "context" - "encoding/json" - "errors" - "fmt" - - goredis "github.com/redis/go-redis/v9" - - "github.com/authgear/authgear-server/pkg/lib/config" - "github.com/authgear/authgear-server/pkg/lib/infra/redis" - "github.com/authgear/authgear-server/pkg/lib/infra/redis/appredis" - "github.com/authgear/authgear-server/pkg/util/clock" -) - -type StoreRedis struct { - Redis *appredis.Handle - AppID config.AppID - Clock clock.Clock -} - -func (s *StoreRedis) Create(ctx context.Context, nonce *Nonce) error { - data, err := json.Marshal(nonce) - if err != nil { - return err - } - - return s.Redis.WithConnContext(ctx, func(ctx context.Context, conn redis.Redis_6_0_Cmdable) error { - nonceKey := redisNonceKey(s.AppID, nonce) - ttl := nonce.ExpireAt.Sub(s.Clock.NowUTC()) - _, err := conn.SetNX(ctx, nonceKey, data, ttl).Result() - if errors.Is(err, goredis.Nil) { - return errors.New("duplicated nonce") - } else if err != nil { - return err - } - - return nil - }) -} - -func (s *StoreRedis) Get(ctx context.Context, nonce *Nonce) (*Nonce, error) { - key := redisNonceKey(s.AppID, nonce) - var nonceModel *Nonce - err := s.Redis.WithConnContext(ctx, func(ctx context.Context, conn redis.Redis_6_0_Cmdable) error { - data, err := conn.Get(ctx, key).Bytes() - if errors.Is(err, goredis.Nil) { - return ErrNonceNotFound - } else if err != nil { - return err - } - - err = json.Unmarshal(data, &nonceModel) - if err != nil { - return err - } - - return nil - }) - if err != nil { - return nil, err - } - - return nonceModel, nil -} - -func (s *StoreRedis) Delete(ctx context.Context, codeKey *Nonce) error { - return s.Redis.WithConnContext(ctx, func(ctx context.Context, conn redis.Redis_6_0_Cmdable) error { - key := redisNonceKey(s.AppID, codeKey) - _, err := conn.Del(ctx, key).Result() - if err != nil { - return err - } - return err - }) -} - -func redisNonceKey(appID config.AppID, nonce *Nonce) string { - return fmt.Sprintf("app:%s:siwe-nonce:%s", appID, nonce.Nonce) -} diff --git a/pkg/redisqueue/wire_gen.go b/pkg/redisqueue/wire_gen.go index 1a8829f9e3..e46d974936 100644 --- a/pkg/redisqueue/wire_gen.go +++ b/pkg/redisqueue/wire_gen.go @@ -34,7 +34,6 @@ import ( "github.com/authgear/authgear-server/pkg/lib/feature/customattrs" "github.com/authgear/authgear-server/pkg/lib/feature/forgotpassword" passkey2 "github.com/authgear/authgear-server/pkg/lib/feature/passkey" - siwe2 "github.com/authgear/authgear-server/pkg/lib/feature/siwe" stdattrs2 "github.com/authgear/authgear-server/pkg/lib/feature/stdattrs" "github.com/authgear/authgear-server/pkg/lib/feature/verification" "github.com/authgear/authgear-server/pkg/lib/hook" @@ -218,36 +217,9 @@ func newUserImportService(ctx context.Context, p *deps.AppProvider) *userimport. SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -355,6 +327,15 @@ func newUserImportService(ctx context.Context, p *deps.AppProvider) *userimport. Clock: clock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clock, AppID: appID, @@ -729,7 +710,7 @@ func newUserImportService(ctx context.Context, p *deps.AppProvider) *userimport. SQLExecutor: sqlExecutor, } storeRedisLogger := idpsession.NewStoreRedisLogger(factory) - idpsessionStoreRedis := &idpsession.StoreRedis{ + storeRedis := &idpsession.StoreRedis{ Redis: appredisHandle, AppID: appID, Clock: clock, @@ -740,7 +721,7 @@ func newUserImportService(ctx context.Context, p *deps.AppProvider) *userimport. cookieManager := deps.NewCookieManager(request, trustProxy, httpConfig) cookieDef := session.NewSessionCookieDef(sessionConfig) idpsessionManager := &idpsession.Manager{ - Store: idpsessionStoreRedis, + Store: storeRedis, Config: sessionConfig, Cookies: cookieManager, CookieDef: cookieDef, @@ -779,7 +760,7 @@ func newUserImportService(ctx context.Context, p *deps.AppProvider) *userimport. UserAgentString: userAgentString, AppID: appID, Redis: appredisHandle, - Store: idpsessionStoreRedis, + Store: storeRedis, AccessEvents: eventProvider, MeterService: meterService, TrustProxy: trustProxy, @@ -1019,38 +1000,9 @@ func newUserExportService(ctx context.Context, p *deps.AppProvider) *userexport. SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - remoteIP := deps.ProvideRedisQueueRemoteIP() - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - factory := p.LoggerFactory - logger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: logger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -1087,7 +1039,8 @@ func newUserExportService(ctx context.Context, p *deps.AppProvider) *userexport. } authenticatorConfig := appConfig.Authenticator authenticatorPasswordConfig := authenticatorConfig.Password - passwordLogger := password.NewLogger(factory) + factory := p.LoggerFactory + logger := password.NewLogger(factory) historyStore := &password.HistoryStore{ Clock: clockClock, SQLBuilder: sqlBuilderApp, @@ -1106,7 +1059,7 @@ func newUserExportService(ctx context.Context, p *deps.AppProvider) *userexport. Store: passwordStore, Config: authenticatorPasswordConfig, Clock: clockClock, - Logger: passwordLogger, + Logger: logger, PasswordHistory: historyStore, PasswordChecker: passwordChecker, Expiry: expiry, @@ -1142,6 +1095,7 @@ func newUserExportService(ctx context.Context, p *deps.AppProvider) *userexport. } testModeConfig := appConfig.TestMode testModeFeatureConfig := featureConfig.TestMode + remoteIP := deps.ProvideRedisQueueRemoteIP() codeStoreRedis := &otp.CodeStoreRedis{ Redis: appredisHandle, AppID: appID, @@ -1158,6 +1112,15 @@ func newUserExportService(ctx context.Context, p *deps.AppProvider) *userexport. Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, @@ -1409,37 +1372,9 @@ func newSearchReindexer(ctx context.Context, p *deps.AppProvider) *reindex.Reind SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - remoteIP := deps.ProvideRedisQueueRemoteIP() - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - logger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: logger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -1476,7 +1411,7 @@ func newSearchReindexer(ctx context.Context, p *deps.AppProvider) *reindex.Reind } authenticatorConfig := appConfig.Authenticator authenticatorPasswordConfig := authenticatorConfig.Password - passwordLogger := password.NewLogger(factory) + logger := password.NewLogger(factory) historyStore := &password.HistoryStore{ Clock: clockClock, SQLBuilder: sqlBuilderApp, @@ -1495,7 +1430,7 @@ func newSearchReindexer(ctx context.Context, p *deps.AppProvider) *reindex.Reind Store: passwordStore, Config: authenticatorPasswordConfig, Clock: clockClock, - Logger: passwordLogger, + Logger: logger, PasswordHistory: historyStore, PasswordChecker: passwordChecker, Expiry: expiry, @@ -1531,6 +1466,7 @@ func newSearchReindexer(ctx context.Context, p *deps.AppProvider) *reindex.Reind } testModeConfig := appConfig.TestMode testModeFeatureConfig := featureConfig.TestMode + remoteIP := deps.ProvideRedisQueueRemoteIP() codeStoreRedis := &otp.CodeStoreRedis{ Redis: appredisHandle, AppID: appID, @@ -1547,6 +1483,15 @@ func newSearchReindexer(ctx context.Context, p *deps.AppProvider) *reindex.Reind Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, diff --git a/pkg/resolver/wire_gen.go b/pkg/resolver/wire_gen.go index 4f03bb6dec..9aa4286856 100644 --- a/pkg/resolver/wire_gen.go +++ b/pkg/resolver/wire_gen.go @@ -34,7 +34,6 @@ import ( "github.com/authgear/authgear-server/pkg/lib/feature/customattrs" "github.com/authgear/authgear-server/pkg/lib/feature/forgotpassword" passkey2 "github.com/authgear/authgear-server/pkg/lib/feature/passkey" - siwe2 "github.com/authgear/authgear-server/pkg/lib/feature/siwe" stdattrs2 "github.com/authgear/authgear-server/pkg/lib/feature/stdattrs" "github.com/authgear/authgear-server/pkg/lib/feature/verification" "github.com/authgear/authgear-server/pkg/lib/healthz" @@ -342,36 +341,9 @@ func newSessionMiddleware(p *deps.RequestProvider) httproute.Middleware { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - deprecated_Web3Config := appConfig.Web3 - siweStoreRedis := &siwe2.StoreRedis{ - Redis: handle, - AppID: appID, - Clock: clock, - } - ratelimitLogger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(handle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: ratelimitLogger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clock, - NonceStore: siweStoreRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -479,6 +451,15 @@ func newSessionMiddleware(p *deps.RequestProvider) httproute.Middleware { Clock: clock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(handle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clock, AppID: appID, @@ -1099,38 +1080,9 @@ func newSessionResolveHandler(p *deps.RequestProvider) http.Handler { SQLBuilder: sqlBuilderApp, SQLExecutor: sqlExecutor, } - remoteIP := deps.ProvideRemoteIP(request, trustProxy) - deprecated_Web3Config := appConfig.Web3 - storeRedis := &siwe2.StoreRedis{ - Redis: appredisHandle, - AppID: appID, - Clock: clockClock, - } - factory := appProvider.LoggerFactory - logger := ratelimit.NewLogger(factory) - storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) - rateLimitsFeatureConfig := featureConfig.RateLimits - limiter := &ratelimit.Limiter{ - Logger: logger, - Storage: storageRedis, - AppID: appID, - Config: rateLimitsFeatureConfig, - } - siweLogger := siwe2.NewLogger(factory) - siweService := &siwe2.Service{ - RemoteIP: remoteIP, - HTTPOrigin: httpOrigin, - Web3Config: deprecated_Web3Config, - AuthenticationConfig: authenticationConfig, - Clock: clockClock, - NonceStore: storeRedis, - RateLimiter: limiter, - Logger: siweLogger, - } siweProvider := &siwe.Provider{ Store: siweStore, Clock: clockClock, - SIWE: siweService, } ldapStore := &ldap.Store{ SQLBuilder: sqlBuilderApp, @@ -1169,6 +1121,7 @@ func newSessionResolveHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, ClaimStore: storePQ, } + factory := appProvider.LoggerFactory resolveHandlerLogger := handler.NewResolveHandlerLogger(factory) userStore := &user.Store{ SQLBuilder: sqlBuilderApp, @@ -1189,7 +1142,7 @@ func newSessionResolveHandler(p *deps.RequestProvider) http.Handler { } authenticatorConfig := appConfig.Authenticator authenticatorPasswordConfig := authenticatorConfig.Password - passwordLogger := password.NewLogger(factory) + logger := password.NewLogger(factory) historyStore := &password.HistoryStore{ Clock: clockClock, SQLBuilder: sqlBuilderApp, @@ -1208,7 +1161,7 @@ func newSessionResolveHandler(p *deps.RequestProvider) http.Handler { Store: passwordStore, Config: authenticatorPasswordConfig, Clock: clockClock, - Logger: passwordLogger, + Logger: logger, PasswordHistory: historyStore, PasswordChecker: passwordChecker, Expiry: expiry, @@ -1244,6 +1197,7 @@ func newSessionResolveHandler(p *deps.RequestProvider) http.Handler { } testModeConfig := appConfig.TestMode testModeFeatureConfig := featureConfig.TestMode + remoteIP := deps.ProvideRemoteIP(request, trustProxy) codeStoreRedis := &otp.CodeStoreRedis{ Redis: appredisHandle, AppID: appID, @@ -1260,6 +1214,15 @@ func newSessionResolveHandler(p *deps.RequestProvider) http.Handler { Clock: clockClock, } otpLogger := otp.NewLogger(factory) + ratelimitLogger := ratelimit.NewLogger(factory) + storageRedis := ratelimit.NewAppStorageRedis(appredisHandle) + rateLimitsFeatureConfig := featureConfig.RateLimits + limiter := &ratelimit.Limiter{ + Logger: ratelimitLogger, + Storage: storageRedis, + AppID: appID, + Config: rateLimitsFeatureConfig, + } otpService := &otp.Service{ Clock: clockClock, AppID: appID, From 38d71581cf172fcff5f3a9dc2acb4eb36ca2ad0c Mon Sep 17 00:00:00 2001 From: Louis Chan Date: Thu, 5 Dec 2024 17:42:41 +0800 Subject: [PATCH 15/22] Remove github.com/spruceid/siwe-go --- custombuild/go.mod | 3 --- custombuild/go.sum | 6 ------ e2e/go.mod | 3 --- e2e/go.sum | 6 ------ go.mod | 3 --- go.sum | 6 ------ 6 files changed, 27 deletions(-) diff --git a/custombuild/go.mod b/custombuild/go.mod index 2d3a1768eb..df46205fdb 100644 --- a/custombuild/go.mod +++ b/custombuild/go.mod @@ -50,7 +50,6 @@ require ( github.com/crewjam/saml v0.4.14 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/davidbyttow/govips/v2 v2.15.0 // indirect - github.com/dchest/uniuri v1.2.0 // indirect github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0 // indirect github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect github.com/dlclark/regexp2 v1.7.0 // indirect @@ -138,7 +137,6 @@ require ( github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 // indirect github.com/pquerna/otp v1.4.0 // indirect github.com/redis/go-redis/v9 v9.7.0 // indirect - github.com/relvacode/iso8601 v1.1.1-0.20210511065120-b30b151cc433 // indirect github.com/rivo/uniseg v0.4.7 // indirect github.com/rubenv/sql-migrate v1.7.0 // indirect github.com/russellhaering/goxmldsig v1.4.0 // indirect @@ -154,7 +152,6 @@ require ( github.com/spf13/cobra v1.8.1 // indirect github.com/spf13/pflag v1.0.5 // indirect github.com/spf13/viper v1.19.0 // indirect - github.com/spruceid/siwe-go v0.2.1 // indirect github.com/stripe/stripe-go/v72 v72.122.0 // indirect github.com/subosito/gotenv v1.6.0 // indirect github.com/tdewolff/parse/v2 v2.7.19 // indirect diff --git a/custombuild/go.sum b/custombuild/go.sum index 0869e0f9da..b394afb9b7 100644 --- a/custombuild/go.sum +++ b/custombuild/go.sum @@ -116,8 +116,6 @@ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davidbyttow/govips/v2 v2.15.0 h1:h3lF+rQElBzGXbQSSPqmE3XGySPhcQo2x3t5l/dZ+pU= github.com/davidbyttow/govips/v2 v2.15.0/go.mod h1:3OQCHj0nf5Mnrplh5VlNvmx3IhJXyxbAoTJZPflUjmM= -github.com/dchest/uniuri v1.2.0 h1:koIcOUdrTIivZgSLhHQvKgqdWZq5d7KdMEWF1Ud6+5g= -github.com/dchest/uniuri v1.2.0/go.mod h1:fSzm4SLHzNZvWLvWJew423PhAzkpNQYq+uNLq4kxhkY= github.com/decred/dcrd/crypto/blake256 v1.0.1 h1:7PltbUIQB7u/FfZ39+DGa/ShuMyJ5ilcvdfma9wOH6Y= github.com/decred/dcrd/crypto/blake256 v1.0.1/go.mod h1:2OfgNZ5wDpcsFmHmCK5gZTPcCXqlm2ArzUIkw9czNJo= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0 h1:rpfIENRNNilwHwZeG5+P150SMrnNEcHYvcCuK6dPZSg= @@ -428,8 +426,6 @@ github.com/redis/go-redis/v9 v9.7.0 h1:HhLSs+B6O021gwzl+locl0zEDnyNkxMtf/Z3NNBMa github.com/redis/go-redis/v9 v9.7.0/go.mod h1:f6zhXITC7JUJIlPEiBOTXxJgPLdZcA93GewI7inzyWw= github.com/redis/rueidis v1.0.19 h1:s65oWtotzlIFN8eMPhyYwxlwLR1lUdhza2KtWprKYSo= github.com/redis/rueidis v1.0.19/go.mod h1:8B+r5wdnjwK3lTFml5VtxjzGOQAC+5UmujoD12pDrEo= -github.com/relvacode/iso8601 v1.1.1-0.20210511065120-b30b151cc433 h1:mLbKGKe5gDGHE8uJLYMmA/fkp/htaXEMl2Hj0k4xfYE= -github.com/relvacode/iso8601 v1.1.1-0.20210511065120-b30b151cc433/go.mod h1:FlNp+jz+TXpyRqgmM7tnzHHzBnz776kmAH2h3sZCn0I= github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= @@ -469,8 +465,6 @@ github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/viper v1.19.0 h1:RWq5SEjt8o25SROyN3z2OrDB9l7RPd3lwTWU8EcEdcI= github.com/spf13/viper v1.19.0/go.mod h1:GQUN9bilAbhU/jgc1bKs99f/suXKeUMct8Adx5+Ntkg= -github.com/spruceid/siwe-go v0.2.1 h1:BroySys6CyUzeyNppTseEOT/w56xTdOfcmECTI7rnuc= -github.com/spruceid/siwe-go v0.2.1/go.mod h1:MHpHbptGsM3lHth2L8quhZ9ipiwST8zsJH1CjWpeO1k= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= diff --git a/e2e/go.mod b/e2e/go.mod index 1d7c091698..1c4a703f7e 100644 --- a/e2e/go.mod +++ b/e2e/go.mod @@ -64,7 +64,6 @@ require ( github.com/cockroachdb/apd/v2 v2.0.2 // indirect github.com/coder/websocket v1.8.12 // indirect github.com/crewjam/saml v0.4.14 // indirect - github.com/dchest/uniuri v1.2.0 // indirect github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0 // indirect github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect github.com/dlclark/regexp2 v1.7.0 // indirect @@ -137,7 +136,6 @@ require ( github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/pquerna/otp v1.4.0 // indirect github.com/redis/go-redis/v9 v9.7.0 // indirect - github.com/relvacode/iso8601 v1.1.1-0.20210511065120-b30b151cc433 // indirect github.com/rivo/uniseg v0.4.7 // indirect github.com/russellhaering/goxmldsig v1.4.0 // indirect github.com/sagikazarmark/locafero v0.4.0 // indirect @@ -152,7 +150,6 @@ require ( github.com/spf13/cast v1.6.0 // indirect github.com/spf13/pflag v1.0.5 // indirect github.com/spf13/viper v1.19.0 // indirect - github.com/spruceid/siwe-go v0.2.1 // indirect github.com/subosito/gotenv v1.6.0 // indirect github.com/trustelem/zxcvbn v1.0.1 // indirect github.com/ua-parser/uap-go v0.0.0-20241012191800-bbb40edc15aa // indirect diff --git a/e2e/go.sum b/e2e/go.sum index 268fb13a28..ae7090a3ba 100644 --- a/e2e/go.sum +++ b/e2e/go.sum @@ -119,8 +119,6 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/dchest/uniuri v1.2.0 h1:koIcOUdrTIivZgSLhHQvKgqdWZq5d7KdMEWF1Ud6+5g= -github.com/dchest/uniuri v1.2.0/go.mod h1:fSzm4SLHzNZvWLvWJew423PhAzkpNQYq+uNLq4kxhkY= github.com/decred/dcrd/crypto/blake256 v1.0.1 h1:7PltbUIQB7u/FfZ39+DGa/ShuMyJ5ilcvdfma9wOH6Y= github.com/decred/dcrd/crypto/blake256 v1.0.1/go.mod h1:2OfgNZ5wDpcsFmHmCK5gZTPcCXqlm2ArzUIkw9czNJo= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0 h1:rpfIENRNNilwHwZeG5+P150SMrnNEcHYvcCuK6dPZSg= @@ -420,8 +418,6 @@ github.com/redis/go-redis/v9 v9.7.0 h1:HhLSs+B6O021gwzl+locl0zEDnyNkxMtf/Z3NNBMa github.com/redis/go-redis/v9 v9.7.0/go.mod h1:f6zhXITC7JUJIlPEiBOTXxJgPLdZcA93GewI7inzyWw= github.com/redis/rueidis v1.0.19 h1:s65oWtotzlIFN8eMPhyYwxlwLR1lUdhza2KtWprKYSo= github.com/redis/rueidis v1.0.19/go.mod h1:8B+r5wdnjwK3lTFml5VtxjzGOQAC+5UmujoD12pDrEo= -github.com/relvacode/iso8601 v1.1.1-0.20210511065120-b30b151cc433 h1:mLbKGKe5gDGHE8uJLYMmA/fkp/htaXEMl2Hj0k4xfYE= -github.com/relvacode/iso8601 v1.1.1-0.20210511065120-b30b151cc433/go.mod h1:FlNp+jz+TXpyRqgmM7tnzHHzBnz776kmAH2h3sZCn0I= github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= @@ -459,8 +455,6 @@ github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/viper v1.19.0 h1:RWq5SEjt8o25SROyN3z2OrDB9l7RPd3lwTWU8EcEdcI= github.com/spf13/viper v1.19.0/go.mod h1:GQUN9bilAbhU/jgc1bKs99f/suXKeUMct8Adx5+Ntkg= -github.com/spruceid/siwe-go v0.2.1 h1:BroySys6CyUzeyNppTseEOT/w56xTdOfcmECTI7rnuc= -github.com/spruceid/siwe-go v0.2.1/go.mod h1:MHpHbptGsM3lHth2L8quhZ9ipiwST8zsJH1CjWpeO1k= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= diff --git a/go.mod b/go.mod index b70485ee18..30cd9ac413 100644 --- a/go.mod +++ b/go.mod @@ -79,7 +79,6 @@ require ( github.com/go-webauthn/webauthn v0.8.6 github.com/lestrrat-go/jwx/v2 v2.1.2 github.com/patrickmn/go-cache v2.1.0+incompatible - github.com/spruceid/siwe-go v0.2.1 github.com/yudai/gojsondiff v1.0.0 go.uber.org/automaxprocs v1.6.0 golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c @@ -148,7 +147,6 @@ require ( github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/cockroachdb/apd/v2 v2.0.2 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect - github.com/dchest/uniuri v1.2.0 // indirect github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0 // indirect github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect github.com/dlclark/regexp2 v1.7.0 // indirect @@ -208,7 +206,6 @@ require ( github.com/pelletier/go-toml/v2 v2.2.2 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect - github.com/relvacode/iso8601 v1.1.1-0.20210511065120-b30b151cc433 // indirect github.com/sagikazarmark/locafero v0.4.0 // indirect github.com/sagikazarmark/slog-shim v0.1.0 // indirect github.com/segmentio/asm v1.2.0 // indirect diff --git a/go.sum b/go.sum index 4ac45695fe..02efee2cab 100644 --- a/go.sum +++ b/go.sum @@ -114,8 +114,6 @@ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davidbyttow/govips/v2 v2.15.0 h1:h3lF+rQElBzGXbQSSPqmE3XGySPhcQo2x3t5l/dZ+pU= github.com/davidbyttow/govips/v2 v2.15.0/go.mod h1:3OQCHj0nf5Mnrplh5VlNvmx3IhJXyxbAoTJZPflUjmM= -github.com/dchest/uniuri v1.2.0 h1:koIcOUdrTIivZgSLhHQvKgqdWZq5d7KdMEWF1Ud6+5g= -github.com/dchest/uniuri v1.2.0/go.mod h1:fSzm4SLHzNZvWLvWJew423PhAzkpNQYq+uNLq4kxhkY= github.com/decred/dcrd/crypto/blake256 v1.0.1 h1:7PltbUIQB7u/FfZ39+DGa/ShuMyJ5ilcvdfma9wOH6Y= github.com/decred/dcrd/crypto/blake256 v1.0.1/go.mod h1:2OfgNZ5wDpcsFmHmCK5gZTPcCXqlm2ArzUIkw9czNJo= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0 h1:rpfIENRNNilwHwZeG5+P150SMrnNEcHYvcCuK6dPZSg= @@ -438,8 +436,6 @@ github.com/redis/go-redis/v9 v9.7.0 h1:HhLSs+B6O021gwzl+locl0zEDnyNkxMtf/Z3NNBMa github.com/redis/go-redis/v9 v9.7.0/go.mod h1:f6zhXITC7JUJIlPEiBOTXxJgPLdZcA93GewI7inzyWw= github.com/redis/rueidis v1.0.19 h1:s65oWtotzlIFN8eMPhyYwxlwLR1lUdhza2KtWprKYSo= github.com/redis/rueidis v1.0.19/go.mod h1:8B+r5wdnjwK3lTFml5VtxjzGOQAC+5UmujoD12pDrEo= -github.com/relvacode/iso8601 v1.1.1-0.20210511065120-b30b151cc433 h1:mLbKGKe5gDGHE8uJLYMmA/fkp/htaXEMl2Hj0k4xfYE= -github.com/relvacode/iso8601 v1.1.1-0.20210511065120-b30b151cc433/go.mod h1:FlNp+jz+TXpyRqgmM7tnzHHzBnz776kmAH2h3sZCn0I= github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= @@ -479,8 +475,6 @@ github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/viper v1.19.0 h1:RWq5SEjt8o25SROyN3z2OrDB9l7RPd3lwTWU8EcEdcI= github.com/spf13/viper v1.19.0/go.mod h1:GQUN9bilAbhU/jgc1bKs99f/suXKeUMct8Adx5+Ntkg= -github.com/spruceid/siwe-go v0.2.1 h1:BroySys6CyUzeyNppTseEOT/w56xTdOfcmECTI7rnuc= -github.com/spruceid/siwe-go v0.2.1/go.mod h1:MHpHbptGsM3lHth2L8quhZ9ipiwST8zsJH1CjWpeO1k= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= From d487d29d6d270b7b2d1ec3a1bb0a2b15755c6d98 Mon Sep 17 00:00:00 2001 From: Louis Chan Date: Thu, 5 Dec 2024 17:55:32 +0800 Subject: [PATCH 16/22] Remove x_web3 from user model --- .make-lint-expect | 2 - pkg/api/model/siwe.go | 42 -------------- pkg/api/model/siwe_test.go | 47 --------------- pkg/api/model/user.go | 1 - pkg/api/model/web3.go | 102 --------------------------------- pkg/lib/oauth/oidc/id_token.go | 1 - 6 files changed, 195 deletions(-) delete mode 100644 pkg/api/model/siwe_test.go diff --git a/.make-lint-expect b/.make-lint-expect index 2c08312c1e..6ebe8701d0 100644 --- a/.make-lint-expect +++ b/.make-lint-expect @@ -6,8 +6,6 @@ pkg/api/apierrors/tags.go cannot import github.com/authgear/authgear-server/pkg/ pkg/api/event/blocking/util.go cannot import github.com/authgear/authgear-server/pkg/util/accesscontrol pkg/api/event/event.go cannot import github.com/authgear/authgear-server/pkg/util/accesscontrol pkg/api/event/hook_response.go cannot import github.com/authgear/authgear-server/pkg/util/validation -pkg/api/model/siwe.go cannot import github.com/authgear/authgear-server/pkg/util/web3 -pkg/api/model/web3.go cannot import github.com/authgear/authgear-server/pkg/util/web3 exit status 1 pkg/lib/deps/deps_common.go cannot import github.com/authgear/authgear-server/pkg/auth/handler/webapp/authflowv2 diff --git a/pkg/api/model/siwe.go b/pkg/api/model/siwe.go index 348be45bae..49f24d711f 100644 --- a/pkg/api/model/siwe.go +++ b/pkg/api/model/siwe.go @@ -1,51 +1,9 @@ package model -import ( - "crypto/ecdsa" - "encoding/hex" - "fmt" - - "github.com/ethereum/go-ethereum/crypto" - - "github.com/authgear/authgear-server/pkg/util/web3" -) - type SIWEPublicKey string -type SIWEVerificationRequest struct { - Message string `json:"message"` - Signature string `json:"signature"` -} - -type SIWEWallet struct { - Address web3.EIP55 `json:"address"` - ChainID int `json:"chain_id"` -} type SIWEVerifiedData struct { Message string `json:"message"` Signature string `json:"signature"` EncodedPublicKey SIWEPublicKey `json:"encoded_public_key"` } - -func NewSIWEPublicKey(k *ecdsa.PublicKey) (SIWEPublicKey, error) { - if k.Curve != crypto.S256() { - return "", fmt.Errorf("Invalid curve: %s", k.Curve) - } - return SIWEPublicKey(hex.EncodeToString(crypto.CompressPubkey(k))), nil -} - -func (k SIWEPublicKey) ECDSA() (*ecdsa.PublicKey, error) { - hexKey := string(k) - - bytes, err := hex.DecodeString(hexKey) - if err != nil { - return nil, err - } - - key, err := crypto.DecompressPubkey(bytes) - if err != nil { - return nil, err - } - - return key, nil -} diff --git a/pkg/api/model/siwe_test.go b/pkg/api/model/siwe_test.go deleted file mode 100644 index e9d2816734..0000000000 --- a/pkg/api/model/siwe_test.go +++ /dev/null @@ -1,47 +0,0 @@ -package model_test - -import ( - "crypto/ecdsa" - "crypto/elliptic" - "crypto/rand" - "testing" - - . "github.com/smartystreets/goconvey/convey" - - "github.com/authgear/authgear-server/pkg/api/model" - - "github.com/ethereum/go-ethereum/crypto" -) - -func TestSIWEPubKey(t *testing.T) { - Convey("SIWEPublicKey", t, func() { - Convey("should encode and decode key", func() { - - Convey("valid curve", func() { - key, err := ecdsa.GenerateKey(crypto.S256(), rand.Reader) - So(err, ShouldBeNil) - So(key, ShouldNotBeNil) - - hex, err := model.NewSIWEPublicKey(&key.PublicKey) - So(err, ShouldBeNil) - So(hex, ShouldNotBeEmpty) - - decodedKey, err := hex.ECDSA() - So(err, ShouldBeNil) - - So(key.PublicKey, ShouldResemble, *decodedKey) - }) - - Convey("invalid curve", func() { - key, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader) - So(err, ShouldBeNil) - So(key, ShouldNotBeNil) - - hex, err := model.NewSIWEPublicKey(&key.PublicKey) - So(err, ShouldBeError) - So(hex, ShouldBeEmpty) - }) - }) - - }) -} diff --git a/pkg/api/model/user.go b/pkg/api/model/user.go index aaa65bc64f..e7cc5c9dc9 100644 --- a/pkg/api/model/user.go +++ b/pkg/api/model/user.go @@ -18,7 +18,6 @@ type User struct { CanReauthenticate bool `json:"can_reauthenticate"` StandardAttributes map[string]interface{} `json:"standard_attributes,omitempty"` CustomAttributes map[string]interface{} `json:"custom_attributes,omitempty"` - Web3 *UserWeb3Info `json:"x_web3,omitempty"` Roles []string `json:"roles,omitempty"` Groups []string `json:"groups,omitempty"` MFAGracePeriodtEndAt *time.Time `json:"mfa_grace_period_end_at,omitempty"` diff --git a/pkg/api/model/web3.go b/pkg/api/model/web3.go index 8b616af130..ff74ae5ad4 100644 --- a/pkg/api/model/web3.go +++ b/pkg/api/model/web3.go @@ -1,107 +1,5 @@ package model -import ( - "math/big" - "net/url" - "strconv" - "time" - - web3util "github.com/authgear/authgear-server/pkg/util/web3" -) - -type AccountIdentifier struct { - Address string `json:"address"` -} - -type NetworkIdentifier struct { - Blockchain string `json:"blockchain"` - Network string `json:"network"` -} - -type Contract struct { - Name string `json:"name"` - Address string `json:"address"` -} - -type TransactionIdentifier struct { - Hash string `json:"hash"` -} - -type BlockIdentifier struct { - Index big.Int `json:"index"` - Timestamp time.Time `json:"timestamp"` -} - -type Token struct { - TokenID string `json:"token_id"` - TransactionIdentifier TransactionIdentifier `json:"transaction_identifier"` - BlockIdentifier BlockIdentifier `json:"block_identifier"` - Balance string `json:"balance"` -} - -type NFT struct { - Contract Contract `json:"contract"` - Tokens []Token `json:"tokens"` -} - -type NFTOwnership struct { - AccountIdentifier AccountIdentifier `json:"account_identifier"` - NetworkIdentifier NetworkIdentifier `json:"network_identifier"` - NFTs []NFT `json:"nfts"` -} - -func (s *NFTOwnership) EndUserAccountID() string { - if s.NetworkIdentifier.Blockchain == "ethereum" { - chainID, err := strconv.ParseInt(s.NetworkIdentifier.Network, 10, 0) - if err != nil { - return "" - } - eip681, err := web3util.NewEIP681(int(chainID), s.AccountIdentifier.Address, url.Values{}) - if err != nil { - return "" - } - return eip681.URL().String() - } - - return "" -} - -type NFTCollection struct { - ID string `json:"id"` - Blockchain string `json:"blockchain"` - Network string `json:"network"` - Name string `json:"name"` - ContractAddress string `json:"contract_address"` - TotalSupply *big.Int `json:"total_supply"` - TokenType string `json:"type"` - CreatedAt time.Time `json:"created_at"` -} - -type ProbeCollectionRequest struct { - ContractID string `json:"contract_id"` -} - -type ProbeCollectionResult struct { - IsLargeCollection bool `json:"is_large_collection"` -} - -type GetContractMetadataRequest struct { - ContractIDs []string `json:"contract_ids"` -} - -type GetContractMetadataResult struct { - Collections []NFTCollection `json:"collections"` -} - -type ListOwnerNFTsRequest struct { - OwnerAddress string `json:"owner_address"` - ContractIDs []string `json:"contract_ids"` -} - -type UserWeb3Info struct { - Accounts []NFTOwnership `json:"accounts"` -} - type EthereumNetwork string const ( diff --git a/pkg/lib/oauth/oidc/id_token.go b/pkg/lib/oauth/oidc/id_token.go index 81e79d3cbd..9fb9141d71 100644 --- a/pkg/lib/oauth/oidc/id_token.go +++ b/pkg/lib/oauth/oidc/id_token.go @@ -272,7 +272,6 @@ func (ti *IDTokenIssuer) GetUserInfo(ctx context.Context, userID string, clientL } out["custom_attributes"] = user.CustomAttributes - out["x_web3"] = user.Web3 } else { // When the client is third party, we include the standard claims according to scopes. for k, v := range user.StandardAttributes { From 613e6cefd2daac63fc5772dfaf722e72151a7eab Mon Sep 17 00:00:00 2001 From: Louis Chan Date: Thu, 5 Dec 2024 18:14:20 +0800 Subject: [PATCH 17/22] Vendor HexToAddress and Address.Hex So that we can get rid of the dependency. --- pkg/util/web3/eip55.go | 4 +- pkg/util/web3/eip55_vendor.go | 83 +++++++++++++++++++++++++++++++++++ 2 files changed, 84 insertions(+), 3 deletions(-) create mode 100644 pkg/util/web3/eip55_vendor.go diff --git a/pkg/util/web3/eip55.go b/pkg/util/web3/eip55.go index ade5f3eea9..b38b2e849e 100644 --- a/pkg/util/web3/eip55.go +++ b/pkg/util/web3/eip55.go @@ -4,8 +4,6 @@ import ( "fmt" "regexp" - "github.com/ethereum/go-ethereum/common" - "github.com/authgear/authgear-server/pkg/util/hexstring" ) @@ -24,7 +22,7 @@ func NewEIP55(s string) (EIP55, error) { return EIP55("0x0"), nil } - address := common.HexToAddress(s) + address := HexToAddress(s) return EIP55(address.Hex()), nil } diff --git a/pkg/util/web3/eip55_vendor.go b/pkg/util/web3/eip55_vendor.go new file mode 100644 index 0000000000..3ff419c77a --- /dev/null +++ b/pkg/util/web3/eip55_vendor.go @@ -0,0 +1,83 @@ +package web3 + +// The file contains the vendored code from "github.com/ethereum/go-ethereum/common" +// The entrypoint is HexToAddress and Address.Hex. + +import ( + "encoding/hex" + + "golang.org/x/crypto/sha3" +) + +const ( + // AddressLength is the expected length of the address + AddressLength = 20 +) + +type Address [AddressLength]byte + +func (a *Address) SetBytes(b []byte) { + if len(b) > len(a) { + b = b[len(b)-AddressLength:] + } + copy(a[AddressLength-len(b):], b) +} + +func (a Address) Hex() string { + return string(a.checksumHex()) +} + +func (a Address) hex() []byte { + var buf [len(a)*2 + 2]byte + copy(buf[:2], "0x") + hex.Encode(buf[2:], a[:]) + return buf[:] +} + +func (a *Address) checksumHex() []byte { + buf := a.hex() + + // compute checksum + sha := sha3.NewLegacyKeccak256() + sha.Write(buf[2:]) + hash := sha.Sum(nil) + for i := 2; i < len(buf); i++ { + hashByte := hash[(i-2)/2] + if i%2 == 0 { + hashByte = hashByte >> 4 + } else { + hashByte &= 0xf + } + if buf[i] > '9' && hashByte > 7 { + buf[i] -= 32 + } + } + return buf[:] +} + +func BytesToAddress(b []byte) Address { + var a Address + a.SetBytes(b) + return a +} + +func HexToAddress(s string) Address { return BytesToAddress(FromHex(s)) } + +func FromHex(s string) []byte { + if has0xPrefix(s) { + s = s[2:] + } + if len(s)%2 == 1 { + s = "0" + s + } + return Hex2Bytes(s) +} + +func has0xPrefix(str string) bool { + return len(str) >= 2 && str[0] == '0' && (str[1] == 'x' || str[1] == 'X') +} + +func Hex2Bytes(str string) []byte { + h, _ := hex.DecodeString(str) + return h +} From 61721758bef2402fe5264f002ce17f647190a620 Mon Sep 17 00:00:00 2001 From: Louis Chan Date: Thu, 5 Dec 2024 18:16:07 +0800 Subject: [PATCH 18/22] Remove github.com/ethereum/go-ethereum --- custombuild/go.mod | 3 --- custombuild/go.sum | 10 ---------- e2e/go.mod | 4 +--- e2e/go.sum | 10 ---------- go.mod | 3 --- go.sum | 10 ---------- 6 files changed, 1 insertion(+), 39 deletions(-) diff --git a/custombuild/go.mod b/custombuild/go.mod index df46205fdb..7414ae90e6 100644 --- a/custombuild/go.mod +++ b/custombuild/go.mod @@ -39,7 +39,6 @@ require ( github.com/aws/aws-sdk-go v1.55.5 // indirect github.com/beevik/etree v1.4.1 // indirect github.com/boombuler/barcode v1.0.2 // indirect - github.com/btcsuite/btcd/btcec/v2 v2.3.4 // indirect github.com/cenkalti/backoff/v4 v4.3.0 // indirect github.com/census-instrumentation/opencensus-proto v0.4.1 // indirect github.com/cert-manager/cert-manager v1.15.4 // indirect @@ -57,7 +56,6 @@ require ( github.com/emicklei/go-restful/v3 v3.12.0 // indirect github.com/envoyproxy/go-control-plane v0.13.0 // indirect github.com/envoyproxy/protoc-gen-validate v1.1.0 // indirect - github.com/ethereum/go-ethereum v1.14.11 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect github.com/fsnotify/fsnotify v1.7.0 // indirect github.com/fxamacker/cbor/v2 v2.6.0 // indirect @@ -96,7 +94,6 @@ require ( github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/hashicorp/golang-lru v0.5.4 // indirect github.com/hashicorp/hcl v1.0.1-vault-5 // indirect - github.com/holiman/uint256 v1.3.1 // indirect github.com/huandu/xstrings v1.4.0 // indirect github.com/iawaknahc/gomessageformat v0.0.0-20210428033148-c3f8592094b5 // indirect github.com/iawaknahc/jsonschema v0.0.0-20211026064614-d05c07b7760d // indirect diff --git a/custombuild/go.sum b/custombuild/go.sum index b394afb9b7..97bc194217 100644 --- a/custombuild/go.sum +++ b/custombuild/go.sum @@ -85,10 +85,6 @@ github.com/bsm/ginkgo/v2 v2.12.0 h1:Ny8MWAHyOepLGlLKYmXG4IEkioBysk6GpaRTLC8zwWs= github.com/bsm/ginkgo/v2 v2.12.0/go.mod h1:SwYbGRRDovPVboqFv0tPTcG1sN61LM1Z4ARdbAV9g4c= github.com/bsm/gomega v1.27.10 h1:yeMWxP2pV2fG3FgAODIY8EiRE3dy0aeFYt4l7wh6yKA= github.com/bsm/gomega v1.27.10/go.mod h1:JyEr/xRbxbtgWNi8tIEVPUYZ5Dzef52k01W3YH0H+O0= -github.com/btcsuite/btcd/btcec/v2 v2.3.4 h1:3EJjcN70HCu/mwqlUsGK8GcNVyLVxFDlWurTXGPFfiQ= -github.com/btcsuite/btcd/btcec/v2 v2.3.4/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= -github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= -github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= @@ -116,8 +112,6 @@ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davidbyttow/govips/v2 v2.15.0 h1:h3lF+rQElBzGXbQSSPqmE3XGySPhcQo2x3t5l/dZ+pU= github.com/davidbyttow/govips/v2 v2.15.0/go.mod h1:3OQCHj0nf5Mnrplh5VlNvmx3IhJXyxbAoTJZPflUjmM= -github.com/decred/dcrd/crypto/blake256 v1.0.1 h1:7PltbUIQB7u/FfZ39+DGa/ShuMyJ5ilcvdfma9wOH6Y= -github.com/decred/dcrd/crypto/blake256 v1.0.1/go.mod h1:2OfgNZ5wDpcsFmHmCK5gZTPcCXqlm2ArzUIkw9czNJo= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0 h1:rpfIENRNNilwHwZeG5+P150SMrnNEcHYvcCuK6dPZSg= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0/go.mod h1:v57UDF4pDQJcEfFUCRop3lJL149eHGSe9Jvczhzjo/0= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= @@ -136,8 +130,6 @@ github.com/envoyproxy/go-control-plane v0.13.0/go.mod h1:GRaKG3dwvFoTg4nj7aXdZnv github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/envoyproxy/protoc-gen-validate v1.1.0 h1:tntQDh69XqOCOZsDz0lVJQez/2L6Uu2PdjCQwWCJ3bM= github.com/envoyproxy/protoc-gen-validate v1.1.0/go.mod h1:sXRDRVmzEbkM7CVcM06s9shE/m23dg3wzjl0UWqJ2q4= -github.com/ethereum/go-ethereum v1.14.11 h1:8nFDCUUE67rPc6AKxFj7JKaOa2W/W1Rse3oS6LvvxEY= -github.com/ethereum/go-ethereum v1.14.11/go.mod h1:+l/fr42Mma+xBnhefL/+z11/hcmJ2egl+ScIVPjhc7E= github.com/evanphx/json-patch v5.9.0+incompatible h1:fBXyNpNMuTTDdquAq/uisOr2lShz4oaXpDTX2bLe7ls= github.com/evanphx/json-patch v5.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= @@ -282,8 +274,6 @@ github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+l github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hashicorp/hcl v1.0.1-vault-5 h1:kI3hhbbyzr4dldA8UdTb7ZlVVlI2DACdCfz31RPDgJM= github.com/hashicorp/hcl v1.0.1-vault-5/go.mod h1:XYhtn6ijBSAj6n4YqAaf7RBPS4I06AItNorpy+MoQNM= -github.com/holiman/uint256 v1.3.1 h1:JfTzmih28bittyHM8z360dCjIA9dbPIBlcTI6lmctQs= -github.com/holiman/uint256 v1.3.1/go.mod h1:EOMSn4q6Nyt9P6efbI3bueV4e1b3dGlUCXeiRV4ng7E= github.com/huandu/xstrings v1.4.0 h1:D17IlohoQq4UcpqD7fDk80P7l+lwAmlFaBHgOipl2FU= github.com/huandu/xstrings v1.4.0/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= github.com/iawaknahc/gomessageformat v0.0.0-20210428033148-c3f8592094b5 h1:i6r7zTbhSdHbhCVEJsM8W62F7MvxXfkpkwGrvfL+sFw= diff --git a/e2e/go.mod b/e2e/go.mod index 1c4a703f7e..96e97fb508 100644 --- a/e2e/go.mod +++ b/e2e/go.mod @@ -56,7 +56,6 @@ require ( github.com/authgear/oauthrelyingparty v1.5.0 // indirect github.com/aws/aws-sdk-go v1.55.5 // indirect github.com/boombuler/barcode v1.0.2 // indirect - github.com/btcsuite/btcd/btcec/v2 v2.3.4 // indirect github.com/cenkalti/backoff/v4 v4.3.0 // indirect github.com/census-instrumentation/opencensus-proto v0.4.1 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect @@ -70,7 +69,6 @@ require ( github.com/elastic/go-elasticsearch/v7 v7.17.10 // indirect github.com/envoyproxy/go-control-plane v0.13.0 // indirect github.com/envoyproxy/protoc-gen-validate v1.1.0 // indirect - github.com/ethereum/go-ethereum v1.14.11 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect github.com/fsnotify/fsnotify v1.7.0 // indirect github.com/fxamacker/cbor/v2 v2.6.0 // indirect @@ -84,6 +82,7 @@ require ( github.com/go-webauthn/webauthn v0.8.6 // indirect github.com/go-webauthn/x v0.1.4 // indirect github.com/goccy/go-json v0.10.3 // indirect + github.com/golang-jwt/jwt/v4 v4.5.0 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/google/go-tpm v0.9.0 // indirect github.com/google/s2a-go v0.1.8 // indirect @@ -101,7 +100,6 @@ require ( github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/hashicorp/golang-lru v0.5.4 // indirect github.com/hashicorp/hcl v1.0.1-vault-5 // indirect - github.com/holiman/uint256 v1.3.1 // indirect github.com/huandu/xstrings v1.4.0 // indirect github.com/iawaknahc/gomessageformat v0.0.0-20210428033148-c3f8592094b5 // indirect github.com/iawaknahc/jsonschema v0.0.0-20211026064614-d05c07b7760d // indirect diff --git a/e2e/go.sum b/e2e/go.sum index ae7090a3ba..65686bc4f2 100644 --- a/e2e/go.sum +++ b/e2e/go.sum @@ -89,10 +89,6 @@ github.com/bsm/ginkgo/v2 v2.12.0 h1:Ny8MWAHyOepLGlLKYmXG4IEkioBysk6GpaRTLC8zwWs= github.com/bsm/ginkgo/v2 v2.12.0/go.mod h1:SwYbGRRDovPVboqFv0tPTcG1sN61LM1Z4ARdbAV9g4c= github.com/bsm/gomega v1.27.10 h1:yeMWxP2pV2fG3FgAODIY8EiRE3dy0aeFYt4l7wh6yKA= github.com/bsm/gomega v1.27.10/go.mod h1:JyEr/xRbxbtgWNi8tIEVPUYZ5Dzef52k01W3YH0H+O0= -github.com/btcsuite/btcd/btcec/v2 v2.3.4 h1:3EJjcN70HCu/mwqlUsGK8GcNVyLVxFDlWurTXGPFfiQ= -github.com/btcsuite/btcd/btcec/v2 v2.3.4/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= -github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= -github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= @@ -119,8 +115,6 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/decred/dcrd/crypto/blake256 v1.0.1 h1:7PltbUIQB7u/FfZ39+DGa/ShuMyJ5ilcvdfma9wOH6Y= -github.com/decred/dcrd/crypto/blake256 v1.0.1/go.mod h1:2OfgNZ5wDpcsFmHmCK5gZTPcCXqlm2ArzUIkw9czNJo= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0 h1:rpfIENRNNilwHwZeG5+P150SMrnNEcHYvcCuK6dPZSg= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0/go.mod h1:v57UDF4pDQJcEfFUCRop3lJL149eHGSe9Jvczhzjo/0= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= @@ -137,8 +131,6 @@ github.com/envoyproxy/go-control-plane v0.13.0/go.mod h1:GRaKG3dwvFoTg4nj7aXdZnv github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/envoyproxy/protoc-gen-validate v1.1.0 h1:tntQDh69XqOCOZsDz0lVJQez/2L6Uu2PdjCQwWCJ3bM= github.com/envoyproxy/protoc-gen-validate v1.1.0/go.mod h1:sXRDRVmzEbkM7CVcM06s9shE/m23dg3wzjl0UWqJ2q4= -github.com/ethereum/go-ethereum v1.14.11 h1:8nFDCUUE67rPc6AKxFj7JKaOa2W/W1Rse3oS6LvvxEY= -github.com/ethereum/go-ethereum v1.14.11/go.mod h1:+l/fr42Mma+xBnhefL/+z11/hcmJ2egl+ScIVPjhc7E= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/form3tech-oss/jwt-go v3.2.2+incompatible h1:TcekIExNqud5crz4xD2pavyTgWiPvpYe4Xau31I0PRk= @@ -274,8 +266,6 @@ github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+l github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hashicorp/hcl v1.0.1-vault-5 h1:kI3hhbbyzr4dldA8UdTb7ZlVVlI2DACdCfz31RPDgJM= github.com/hashicorp/hcl v1.0.1-vault-5/go.mod h1:XYhtn6ijBSAj6n4YqAaf7RBPS4I06AItNorpy+MoQNM= -github.com/holiman/uint256 v1.3.1 h1:JfTzmih28bittyHM8z360dCjIA9dbPIBlcTI6lmctQs= -github.com/holiman/uint256 v1.3.1/go.mod h1:EOMSn4q6Nyt9P6efbI3bueV4e1b3dGlUCXeiRV4ng7E= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/huandu/xstrings v1.4.0 h1:D17IlohoQq4UcpqD7fDk80P7l+lwAmlFaBHgOipl2FU= github.com/huandu/xstrings v1.4.0/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= diff --git a/go.mod b/go.mod index 30cd9ac413..e07e9c2420 100644 --- a/go.mod +++ b/go.mod @@ -64,7 +64,6 @@ require ( github.com/Azure/azure-storage-blob-go v0.15.0 github.com/aws/aws-sdk-go v1.55.5 github.com/davidbyttow/govips/v2 v2.15.0 - github.com/ethereum/go-ethereum v1.14.11 github.com/goccy/go-json v0.10.3 // indirect github.com/stripe/stripe-go/v72 v72.122.0 github.com/tdewolff/parse/v2 v2.7.19 @@ -143,7 +142,6 @@ require ( github.com/Masterminds/goutils v1.1.1 // indirect github.com/Masterminds/semver v1.5.0 // indirect github.com/alicebob/gopher-json v0.0.0-20230218143504-906a9b012302 // indirect - github.com/btcsuite/btcd/btcec/v2 v2.3.4 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/cockroachdb/apd/v2 v2.0.2 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect @@ -178,7 +176,6 @@ require ( github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/hashicorp/golang-lru v0.5.4 // indirect github.com/hashicorp/hcl v1.0.1-vault-5 // indirect - github.com/holiman/uint256 v1.3.1 // indirect github.com/huandu/xstrings v1.4.0 // indirect github.com/imdario/mergo v0.3.16 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect diff --git a/go.sum b/go.sum index 02efee2cab..3b531d6ce1 100644 --- a/go.sum +++ b/go.sum @@ -83,10 +83,6 @@ github.com/bsm/ginkgo/v2 v2.12.0 h1:Ny8MWAHyOepLGlLKYmXG4IEkioBysk6GpaRTLC8zwWs= github.com/bsm/ginkgo/v2 v2.12.0/go.mod h1:SwYbGRRDovPVboqFv0tPTcG1sN61LM1Z4ARdbAV9g4c= github.com/bsm/gomega v1.27.10 h1:yeMWxP2pV2fG3FgAODIY8EiRE3dy0aeFYt4l7wh6yKA= github.com/bsm/gomega v1.27.10/go.mod h1:JyEr/xRbxbtgWNi8tIEVPUYZ5Dzef52k01W3YH0H+O0= -github.com/btcsuite/btcd/btcec/v2 v2.3.4 h1:3EJjcN70HCu/mwqlUsGK8GcNVyLVxFDlWurTXGPFfiQ= -github.com/btcsuite/btcd/btcec/v2 v2.3.4/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= -github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= -github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= @@ -114,8 +110,6 @@ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davidbyttow/govips/v2 v2.15.0 h1:h3lF+rQElBzGXbQSSPqmE3XGySPhcQo2x3t5l/dZ+pU= github.com/davidbyttow/govips/v2 v2.15.0/go.mod h1:3OQCHj0nf5Mnrplh5VlNvmx3IhJXyxbAoTJZPflUjmM= -github.com/decred/dcrd/crypto/blake256 v1.0.1 h1:7PltbUIQB7u/FfZ39+DGa/ShuMyJ5ilcvdfma9wOH6Y= -github.com/decred/dcrd/crypto/blake256 v1.0.1/go.mod h1:2OfgNZ5wDpcsFmHmCK5gZTPcCXqlm2ArzUIkw9czNJo= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0 h1:rpfIENRNNilwHwZeG5+P150SMrnNEcHYvcCuK6dPZSg= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0/go.mod h1:v57UDF4pDQJcEfFUCRop3lJL149eHGSe9Jvczhzjo/0= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= @@ -134,8 +128,6 @@ github.com/envoyproxy/go-control-plane v0.13.0/go.mod h1:GRaKG3dwvFoTg4nj7aXdZnv github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/envoyproxy/protoc-gen-validate v1.1.0 h1:tntQDh69XqOCOZsDz0lVJQez/2L6Uu2PdjCQwWCJ3bM= github.com/envoyproxy/protoc-gen-validate v1.1.0/go.mod h1:sXRDRVmzEbkM7CVcM06s9shE/m23dg3wzjl0UWqJ2q4= -github.com/ethereum/go-ethereum v1.14.11 h1:8nFDCUUE67rPc6AKxFj7JKaOa2W/W1Rse3oS6LvvxEY= -github.com/ethereum/go-ethereum v1.14.11/go.mod h1:+l/fr42Mma+xBnhefL/+z11/hcmJ2egl+ScIVPjhc7E= github.com/evanphx/json-patch v5.9.0+incompatible h1:fBXyNpNMuTTDdquAq/uisOr2lShz4oaXpDTX2bLe7ls= github.com/evanphx/json-patch v5.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= @@ -283,8 +275,6 @@ github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+l github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hashicorp/hcl v1.0.1-vault-5 h1:kI3hhbbyzr4dldA8UdTb7ZlVVlI2DACdCfz31RPDgJM= github.com/hashicorp/hcl v1.0.1-vault-5/go.mod h1:XYhtn6ijBSAj6n4YqAaf7RBPS4I06AItNorpy+MoQNM= -github.com/holiman/uint256 v1.3.1 h1:JfTzmih28bittyHM8z360dCjIA9dbPIBlcTI6lmctQs= -github.com/holiman/uint256 v1.3.1/go.mod h1:EOMSn4q6Nyt9P6efbI3bueV4e1b3dGlUCXeiRV4ng7E= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/huandu/xstrings v1.4.0 h1:D17IlohoQq4UcpqD7fDk80P7l+lwAmlFaBHgOipl2FU= github.com/huandu/xstrings v1.4.0/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= From 97325a31693168aaa3d4ae8e63d69e418d4790e2 Mon Sep 17 00:00:00 2001 From: Louis Chan Date: Thu, 5 Dec 2024 19:21:49 +0800 Subject: [PATCH 19/22] Add authgear-portal internal breaking-change migrate-resources migrate-remove-web3 --- .../migrate_resources_remove_web3.go | 177 ++++++++++++++++++ .../migrate_resources_remove_web3_test.go | 150 +++++++++++++++ 2 files changed, 327 insertions(+) create mode 100644 cmd/portal/cmd/cmdinternal/migrate_resources_remove_web3.go create mode 100644 cmd/portal/cmd/cmdinternal/migrate_resources_remove_web3_test.go diff --git a/cmd/portal/cmd/cmdinternal/migrate_resources_remove_web3.go b/cmd/portal/cmd/cmdinternal/migrate_resources_remove_web3.go new file mode 100644 index 0000000000..334a4ffb66 --- /dev/null +++ b/cmd/portal/cmd/cmdinternal/migrate_resources_remove_web3.go @@ -0,0 +1,177 @@ +package cmdinternal + +import ( + "encoding/base64" + "fmt" + "log" + + "github.com/spf13/cobra" + "sigs.k8s.io/yaml" + + portalcmd "github.com/authgear/authgear-server/cmd/portal/cmd" + "github.com/authgear/authgear-server/cmd/portal/internal" +) + +var cmdInternalMigrateRemoveWeb3 = &cobra.Command{ + Use: "migrate-remove-web3", + Short: "Remove web3 related config", + RunE: func(cmd *cobra.Command, args []string) error { + binder := portalcmd.GetBinder() + + dbURL, err := binder.GetRequiredString(cmd, portalcmd.ArgDatabaseURL) + if err != nil { + return err + } + + dbSchema, err := binder.GetRequiredString(cmd, portalcmd.ArgDatabaseSchema) + if err != nil { + return err + } + + internal.MigrateResources(cmd.Context(), &internal.MigrateResourcesOptions{ + DatabaseURL: dbURL, + DatabaseSchema: dbSchema, + UpdateConfigSourceFunc: migrateRemoveWeb3, + DryRun: &MigrateResourcesDryRun, + }) + + return nil + }, +} + +func migrateRemoveWeb3(appID string, configSourceData map[string]string, dryRun bool) error { + err := migrateRemoveWeb3_authgear_yaml(appID, configSourceData, dryRun) + if err != nil { + return err + } + + err = migrateRemoveWeb3_authgear_features_yaml(appID, configSourceData, dryRun) + if err != nil { + return err + } + + return nil +} + +func migrateRemoveWeb3_authgear_yaml(appID string, configSourceData map[string]string, dryRun bool) error { + encodedAuthgearYAML, ok := configSourceData["authgear.yaml"] + if !ok { + return nil + } + + decodedAuthgearYAML, err := base64.StdEncoding.DecodeString(encodedAuthgearYAML) + if err != nil { + return fmt.Errorf("failed decode authgear.yaml: %w", err) + } + + authgearYAML := make(map[string]interface{}) + err = yaml.Unmarshal(decodedAuthgearYAML, &authgearYAML) + if err != nil { + return fmt.Errorf("failed unmarshal yaml: %w", err) + } + + changed := false + + // Delete web3 from authgear.yaml + _, ok = authgearYAML["web3"] + if ok { + changed = true + log.Printf("web3 is present in authgear.yaml: %v", appID) + delete(authgearYAML, "web3") + } + + // If authentication.identities contain siwe, then + // authentication.identities = [login_id, oauth] + // identity.login_id.keys = [{ type: "email" }] + // authentication.primary_authenticators = ["password"] + + authentication, ok := authgearYAML["authentication"].(map[string]interface{}) + if ok { + authenticationIdentitiesContainSIWE := false + + identities, ok := authentication["identities"].([]interface{}) + if ok { + for _, i := range identities { + if i, ok := i.(string); ok { + if i == "siwe" { + authenticationIdentitiesContainSIWE = true + log.Printf("authentication.identities contain siwe: %v", appID) + } + } + } + } + + if authenticationIdentitiesContainSIWE { + changed = true + + authentication["identities"] = []interface{}{ + "login_id", + "oauth", + } + authentication["primary_authenticators"] = []interface{}{ + "password", + } + authgearYAML["identity"] = map[string]interface{}{ + "login_id": map[string]interface{}{ + "keys": []interface{}{ + map[string]interface{}{ + "type": "email", + }, + }, + }, + } + } + } + + if changed { + migrated, err := yaml.Marshal(authgearYAML) + if err != nil { + return fmt.Errorf("failed marshal yaml: %w", err) + } + configSourceData["authgear.yaml"] = base64.StdEncoding.EncodeToString(migrated) + } + + return nil +} + +func migrateRemoveWeb3_authgear_features_yaml(appID string, configSourceData map[string]string, dryRun bool) error { + encodedAuthgearFeaturesYAML, ok := configSourceData["authgear.features.yaml"] + if !ok { + return nil + } + + decodedAuthgearFeaturesYAML, err := base64.StdEncoding.DecodeString(encodedAuthgearFeaturesYAML) + if err != nil { + return fmt.Errorf("failed decode authgear.features.yaml: %w", err) + } + + authgearFeaturesYAML := make(map[string]interface{}) + err = yaml.Unmarshal(decodedAuthgearFeaturesYAML, &authgearFeaturesYAML) + if err != nil { + return fmt.Errorf("failed unmarshal yaml: %w", err) + } + + changed := false + + // Delete web3 from authgear.features.yaml + _, ok = authgearFeaturesYAML["web3"] + if ok { + changed = true + log.Printf("web3 is present in authgear.features.yaml: %v", appID) + delete(authgearFeaturesYAML, "web3") + } + + if changed { + migrated, err := yaml.Marshal(authgearFeaturesYAML) + if err != nil { + return fmt.Errorf("failed marshal yaml: %w", err) + } + configSourceData["authgear.features.yaml"] = base64.StdEncoding.EncodeToString(migrated) + } + + return nil +} + +func init() { + cmdInternalBreakingChangeMigrateResources.AddCommand(cmdInternalMigrateRemoveWeb3) +} diff --git a/cmd/portal/cmd/cmdinternal/migrate_resources_remove_web3_test.go b/cmd/portal/cmd/cmdinternal/migrate_resources_remove_web3_test.go new file mode 100644 index 0000000000..1052d48e0f --- /dev/null +++ b/cmd/portal/cmd/cmdinternal/migrate_resources_remove_web3_test.go @@ -0,0 +1,150 @@ +package cmdinternal + +import ( + "encoding/base64" + "encoding/json" + "testing" + + . "github.com/smartystreets/goconvey/convey" +) + +func TestMigrateRemoveWeb3(t *testing.T) { + Convey("migrateRemoveWeb3", t, func() { + test := func(srcJSON string, expectedOutputJSON string, expectedErr error) { + src := make(map[string]string) + err := json.Unmarshal([]byte(srcJSON), &src) + if err != nil { + panic(err) + } + expectedOutput := make(map[string]string) + err = json.Unmarshal([]byte(expectedOutputJSON), &expectedOutput) + if err != nil { + panic(err) + } + err = migrateRemoveWeb3("app", src, false) + So(err, ShouldResemble, expectedErr) + So(src, ShouldResemble, expectedOutput) // src was modified in-place + } + + toJSON := func(anything interface{}) string { + b, err := json.Marshal(anything) + if err != nil { + panic(err) + } + return string(b) + } + + toB64 := func(str string) string { + return base64.StdEncoding.EncodeToString([]byte(str)) + } + + Convey("do nothing if the project is not using SIWE", func() { + test(toJSON(map[string]interface{}{ + "authgear.yaml": toB64(`http: + public_origin: http://localhost:3100 +id: app +`), + }), toJSON(map[string]interface{}{ + "authgear.yaml": toB64(`http: + public_origin: http://localhost:3100 +id: app +`), + }), nil) + }) + + Convey("migrate authgear.yaml if authentication.identities contain siwe", func() { + test(toJSON(map[string]interface{}{ + "authgear.yaml": toB64(`authentication: + identities: ["siwe"] +http: + public_origin: http://localhost:3100 +id: app +`), + }), toJSON(map[string]interface{}{ + "authgear.yaml": toB64(`authentication: + identities: + - login_id + - oauth + primary_authenticators: + - password +http: + public_origin: http://localhost:3100 +id: app +identity: + login_id: + keys: + - type: email +`), + }), nil) + }) + + Convey("remove web3 in authgear.yaml if it is present", func() { + test(toJSON(map[string]interface{}{ + "authgear.yaml": toB64(`authentication: + identities: ["siwe"] +http: + public_origin: http://localhost:3100 +id: app +web3: + siwe: + networks: + - "1" +`), + }), toJSON(map[string]interface{}{ + "authgear.yaml": toB64(`authentication: + identities: + - login_id + - oauth + primary_authenticators: + - password +http: + public_origin: http://localhost:3100 +id: app +identity: + login_id: + keys: + - type: email +`), + }), nil) + }) + + Convey("remove web3 in authgear.features.yaml if it is present", func() { + test(toJSON(map[string]interface{}{ + "authgear.yaml": toB64(`authentication: + identities: ["siwe"] +http: + public_origin: http://localhost:3100 +id: app +web3: + siwe: + networks: + - ethereum:0x0@1 +`), + "authgear.features.yaml": toB64(`rate_limits: + disabled: true +web3: + nft: + maximum: 2 +`), + }), toJSON(map[string]interface{}{ + "authgear.yaml": toB64(`authentication: + identities: + - login_id + - oauth + primary_authenticators: + - password +http: + public_origin: http://localhost:3100 +id: app +identity: + login_id: + keys: + - type: email +`), + "authgear.features.yaml": toB64(`rate_limits: + disabled: true +`), + }), nil) + }) + }) +} From 5d6f8121990ef2688b7fe1e97b263acfe1644153 Mon Sep 17 00:00:00 2001 From: Louis Chan Date: Fri, 6 Dec 2024 18:21:56 +0800 Subject: [PATCH 20/22] Remove the type Deprecated_NFTIndexerAPIEndpoint --- pkg/lib/config/environment.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/pkg/lib/config/environment.go b/pkg/lib/config/environment.go index d0eaef0c05..01ccf728ae 100644 --- a/pkg/lib/config/environment.go +++ b/pkg/lib/config/environment.go @@ -18,8 +18,6 @@ type WebAppCDNHost string type CORSAllowedOrigins string -type Deprecated_NFTIndexerAPIEndpoint string - type DenoEndpoint string type AppHostSuffixes []string From 80412cc8bba42288442c5d25dcee5d69c1e48962 Mon Sep 17 00:00:00 2001 From: Louis Chan Date: Fri, 6 Dec 2024 18:24:35 +0800 Subject: [PATCH 21/22] Also rename the fields to Deprecated_ --- pkg/lib/config/config.go | 2 +- pkg/lib/config/configsource/resources.go | 6 +++--- pkg/lib/config/feature.go | 2 +- pkg/lib/config/feature_web3.go | 2 +- pkg/lib/deps/deps_config.go | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/pkg/lib/config/config.go b/pkg/lib/config/config.go index a563503703..ef78262a7a 100644 --- a/pkg/lib/config/config.go +++ b/pkg/lib/config/config.go @@ -84,7 +84,7 @@ type AppConfig struct { Verification *VerificationConfig `json:"verification,omitempty"` Deprecated_OTP *OTPLegacyConfig `json:"otp,omitempty"` - Web3 *Deprecated_Web3Config `json:"web3,omitempty"` + Deprecated_Web3 *Deprecated_Web3Config `json:"web3,omitempty"` GoogleTagManager *GoogleTagManagerConfig `json:"google_tag_manager,omitempty"` diff --git a/pkg/lib/config/configsource/resources.go b/pkg/lib/config/configsource/resources.go index 9668151a18..2fa1e35235 100644 --- a/pkg/lib/config/configsource/resources.go +++ b/pkg/lib/config/configsource/resources.go @@ -361,14 +361,14 @@ func (d AuthgearYAMLDescriptor) validateBasedOnFeatureConfig(appConfig *config.A ) } - if len(appConfig.Web3.NFT.Collections) > *fc.Web3.NFT.Maximum { + if len(appConfig.Deprecated_Web3.NFT.Collections) > *fc.Deprecated_Web3.Deprecated_NFT.Maximum { validationCtx.Child( "web3", "nft", ).EmitErrorMessage( fmt.Sprintf("exceed the maximum number of nft collections, actual: %d, expected: %d", - len(appConfig.Web3.NFT.Collections), - *fc.Web3.NFT.Maximum, + len(appConfig.Deprecated_Web3.NFT.Collections), + *fc.Deprecated_Web3.Deprecated_NFT.Maximum, ), ) } diff --git a/pkg/lib/config/feature.go b/pkg/lib/config/feature.go index 34024d16e5..2d985ce22e 100644 --- a/pkg/lib/config/feature.go +++ b/pkg/lib/config/feature.go @@ -44,7 +44,7 @@ type FeatureConfig struct { RateLimits *RateLimitsFeatureConfig `json:"rate_limits,omitempty"` Messaging *MessagingFeatureConfig `json:"messaging,omitempty"` Collaborator *CollaboratorFeatureConfig `json:"collaborator,omitempty"` - Web3 *Deprecated_Web3FeatureConfig `json:"web3,omitempty"` + Deprecated_Web3 *Deprecated_Web3FeatureConfig `json:"web3,omitempty"` AdminAPI *AdminAPIFeatureConfig `json:"admin_api,omitempty"` TestMode *TestModeFeatureConfig `json:"test_mode,omitempty"` } diff --git a/pkg/lib/config/feature_web3.go b/pkg/lib/config/feature_web3.go index 3732006c4b..356ed2de65 100644 --- a/pkg/lib/config/feature_web3.go +++ b/pkg/lib/config/feature_web3.go @@ -11,7 +11,7 @@ var _ = FeatureConfigSchema.Add("Web3FeatureConfig", ` `) type Deprecated_Web3FeatureConfig struct { - NFT *Deprecated_Web3NFTFeatureConfig `json:"nft,omitempty"` + Deprecated_NFT *Deprecated_Web3NFTFeatureConfig `json:"nft,omitempty"` } var _ = FeatureConfigSchema.Add("Web3NFTFeatureConfig", ` diff --git a/pkg/lib/deps/deps_config.go b/pkg/lib/deps/deps_config.go index b2593697db..6fc95deba9 100644 --- a/pkg/lib/deps/deps_config.go +++ b/pkg/lib/deps/deps_config.go @@ -28,7 +28,7 @@ var ConfigDeps = wire.NewSet( "Verification", "AccountDeletion", "AccountAnonymization", - "Web3", + "Deprecated_Web3", "GoogleTagManager", "AccountMigration", "Captcha", From 6a617fec43f0faf8e9391c74d879e6e42793b2fd Mon Sep 17 00:00:00 2001 From: Louis Chan Date: Fri, 6 Dec 2024 18:25:20 +0800 Subject: [PATCH 22/22] No longer respect the deprecated web3 config --- pkg/lib/config/configsource/resources.go | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/pkg/lib/config/configsource/resources.go b/pkg/lib/config/configsource/resources.go index 2fa1e35235..8fea3a52f8 100644 --- a/pkg/lib/config/configsource/resources.go +++ b/pkg/lib/config/configsource/resources.go @@ -361,18 +361,6 @@ func (d AuthgearYAMLDescriptor) validateBasedOnFeatureConfig(appConfig *config.A ) } - if len(appConfig.Deprecated_Web3.NFT.Collections) > *fc.Deprecated_Web3.Deprecated_NFT.Maximum { - validationCtx.Child( - "web3", - "nft", - ).EmitErrorMessage( - fmt.Sprintf("exceed the maximum number of nft collections, actual: %d, expected: %d", - len(appConfig.Deprecated_Web3.NFT.Collections), - *fc.Deprecated_Web3.Deprecated_NFT.Maximum, - ), - ) - } - for _, identity := range appConfig.Authentication.Identities { if identity == model.IdentityTypeBiometric && *fc.Identity.Biometric.Disabled { validationCtx.Child(

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Π_->jw(7Y}dN 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