From f09b95997c18570fd26e260e4f5b16dbbfe56826 Mon Sep 17 00:00:00 2001 From: ghiscoding Date: Thu, 4 Mar 2021 22:04:34 -0500 Subject: [PATCH 01/21] feat(rxjs): add RxJS package with abstract usage in common lib --- .../common/src/filters/autoCompleteFilter.ts | 2 +- packages/common/src/filters/selectFilter.ts | 2 +- .../interfaces/backendServiceApi.interface.ts | 7 +- .../src/interfaces/columnEditor.interface.ts | 3 +- .../src/interfaces/columnFilter.interface.ts | 3 +- .../rowDetailViewOption.interface.ts | 3 +- .../common/src/services/backend-utilities.ts | 17 +++- .../common/src/services/filter.service.ts | 9 +- packages/common/src/services/index.ts | 1 + .../common/src/services/pagination.service.ts | 14 +++ packages/common/src/services/rxjsFacade.ts | 89 +++++++++++++++++++ packages/common/src/services/sort.service.ts | 7 +- .../interfaces/graphqlServiceApi.interface.ts | 8 +- packages/rxjs-observable/README.md | 21 +++++ packages/rxjs-observable/package.json | 50 +++++++++++ packages/rxjs-observable/src/.npmignore | 2 + packages/rxjs-observable/src/index.spec.ts | 12 +++ packages/rxjs-observable/src/index.ts | 2 + .../rxjs-observable/src/observableWrapper.ts | 21 +++++ .../src/subscriptionWrapper.ts | 25 ++++++ packages/rxjs-observable/tsconfig.bundle.json | 14 +++ packages/rxjs-observable/tsconfig.json | 24 +++++ .../components/slick-vanilla-grid-bundle.ts | 2 +- yarn.lock | 7 ++ 24 files changed, 328 insertions(+), 17 deletions(-) create mode 100644 packages/common/src/services/rxjsFacade.ts create mode 100644 packages/rxjs-observable/README.md create mode 100644 packages/rxjs-observable/package.json create mode 100644 packages/rxjs-observable/src/.npmignore create mode 100644 packages/rxjs-observable/src/index.spec.ts create mode 100644 packages/rxjs-observable/src/index.ts create mode 100644 packages/rxjs-observable/src/observableWrapper.ts create mode 100644 packages/rxjs-observable/src/subscriptionWrapper.ts create mode 100644 packages/rxjs-observable/tsconfig.bundle.json create mode 100644 packages/rxjs-observable/tsconfig.json diff --git a/packages/common/src/filters/autoCompleteFilter.ts b/packages/common/src/filters/autoCompleteFilter.ts index ca31d1a5f..b808dc891 100644 --- a/packages/common/src/filters/autoCompleteFilter.ts +++ b/packages/common/src/filters/autoCompleteFilter.ts @@ -167,7 +167,7 @@ export class AutoCompleteFilter implements Filter { if (collectionAsync && !this.columnFilter.collection) { // only read the collectionAsync once (on the 1st load), // we do this because Http Fetch will throw an error saying body was already read and is streaming is locked - collectionOutput = this.renderOptionsAsync(collectionAsync); + collectionOutput = this.renderOptionsAsync(collectionAsync as Promise); resolve(collectionOutput); } else { collectionOutput = newCollection; diff --git a/packages/common/src/filters/selectFilter.ts b/packages/common/src/filters/selectFilter.ts index 8bb197775..db1c77775 100644 --- a/packages/common/src/filters/selectFilter.ts +++ b/packages/common/src/filters/selectFilter.ts @@ -150,7 +150,7 @@ export class SelectFilter implements Filter { if (collectionAsync && !this.columnFilter.collection) { // only read the collectionAsync once (on the 1st load), // we do this because Http Fetch will throw an error saying body was already read and its streaming is locked - collectionOutput = this.renderOptionsAsync(collectionAsync); + collectionOutput = this.renderOptionsAsync(collectionAsync as Promise); resolve(collectionOutput); } else { collectionOutput = newCollection; diff --git a/packages/common/src/interfaces/backendServiceApi.interface.ts b/packages/common/src/interfaces/backendServiceApi.interface.ts index 6784cdc10..d99ec8d2a 100644 --- a/packages/common/src/interfaces/backendServiceApi.interface.ts +++ b/packages/common/src/interfaces/backendServiceApi.interface.ts @@ -1,3 +1,4 @@ +import { ObservableFacade } from '../services/rxjsFacade'; import { BackendService } from './backendService.interface'; export interface BackendServiceApi { @@ -34,13 +35,13 @@ export interface BackendServiceApi { onError?: (e: any) => void; /** On init (or on page load), what action to perform? */ - onInit?: (query: string) => Promise; + onInit?: (query: string) => Promise | ObservableFacade; /** Before executing the query, what action to perform? For example, start a spinner */ preProcess?: () => void; - /** On Processing, we get the query back from the service, and we need to provide a Promise. For example: this.http.get(myGraphqlUrl) */ - process: (query: string) => Promise; + /** On Processing, we get the query back from the service, and we need to provide a Promise/Observable. For example: this.http.get(myGraphqlUrl) */ + process: (query: string) => Promise | ObservableFacade; /** After executing the query, what action to perform? For example, stop the spinner */ postProcess?: (response: any) => void; diff --git a/packages/common/src/interfaces/columnEditor.interface.ts b/packages/common/src/interfaces/columnEditor.interface.ts index d5641352d..8524aed1e 100644 --- a/packages/common/src/interfaces/columnEditor.interface.ts +++ b/packages/common/src/interfaces/columnEditor.interface.ts @@ -1,4 +1,5 @@ import { FieldType } from '../enums/index'; +import { ObservableFacade } from '../services/rxjsFacade'; import { CollectionCustomStructure, CollectionFilterBy, @@ -26,7 +27,7 @@ export interface ColumnEditor { callbacks?: any; /** A collection of items/options that will be loaded asynchronously (commonly used with AutoComplete & Single/Multi-Select Editors) */ - collectionAsync?: Promise; + collectionAsync?: Promise | ObservableFacade; /** * A collection of items/options (commonly used with AutoComplete & Single/Multi-Select Editors) diff --git a/packages/common/src/interfaces/columnFilter.interface.ts b/packages/common/src/interfaces/columnFilter.interface.ts index c8077a4da..9b985981c 100644 --- a/packages/common/src/interfaces/columnFilter.interface.ts +++ b/packages/common/src/interfaces/columnFilter.interface.ts @@ -9,6 +9,7 @@ import { MultipleSelectOption, } from './index'; import { SearchTerm } from '../enums/searchTerm.type'; +import { ObservableFacade, SubjectFacade } from '../services/rxjsFacade'; export interface ColumnFilter { /** Do we want to bypass the Backend Query? Commonly used with an OData Backend Service, if we want to filter without calling the regular OData query. */ @@ -48,7 +49,7 @@ export interface ColumnFilter { model?: any; /** A collection of items/options that will be loaded asynchronously (commonly used with a Select/Multi-Select Filter) */ - collectionAsync?: Promise; + collectionAsync?: Promise | ObservableFacade | SubjectFacade; /** * A collection of items/options (commonly used with a Select/Multi-Select Filter) diff --git a/packages/common/src/interfaces/rowDetailViewOption.interface.ts b/packages/common/src/interfaces/rowDetailViewOption.interface.ts index 8acd250b3..11fd8efd9 100644 --- a/packages/common/src/interfaces/rowDetailViewOption.interface.ts +++ b/packages/common/src/interfaces/rowDetailViewOption.interface.ts @@ -1,3 +1,4 @@ +import { ObservableFacade, SubjectFacade } from '../services/rxjsFacade'; import { SlickGrid } from './slickGrid.interface'; export interface RowDetailViewOption { @@ -72,7 +73,7 @@ export interface RowDetailViewOption { postTemplate?: (item: any) => string; /** Async server function call */ - process: (item: any) => Promise; + process: (item: any) => Promise | ObservableFacade | SubjectFacade; /** Override the logic for showing (or not) the expand icon (use case example: only every 2nd row is expandable) */ expandableOverride?: (row: number, dataContext: any, grid: SlickGrid) => boolean; diff --git a/packages/common/src/services/backend-utilities.ts b/packages/common/src/services/backend-utilities.ts index c7a12489e..6ddb11fbd 100644 --- a/packages/common/src/services/backend-utilities.ts +++ b/packages/common/src/services/backend-utilities.ts @@ -1,3 +1,4 @@ +import { EMPTY, iif, isObservable, takeUntil, SubjectFacade, ObservableFacade } from './rxjsFacade'; import { EmitterType } from '../enums/emitterType.enum'; import { BackendServiceApi, GridOption } from '../interfaces/index'; @@ -42,7 +43,7 @@ main.onBackendError = function backendError(e: any, backendApi: BackendServiceAp * Execute the backend callback, which are mainly the "process" & "postProcess" methods. * Also note that "preProcess" was executed prior to this callback */ -main.executeBackendCallback = function exeBackendCallback(backendServiceApi: BackendServiceApi, query: string, args: any, startTime: Date, totalItems: number, emitActionChangedCallback: (type: EmitterType) => void) { +main.executeBackendCallback = function exeBackendCallback(backendServiceApi: BackendServiceApi, query: string, args: any, startTime: Date, totalItems: number, emitActionChangedCallback: (type: EmitterType) => void, httpCancelRequests$?: SubjectFacade) { if (backendServiceApi) { // emit an onFilterChanged event when it's not called by a clear filter if (args && !args.clearFilterTriggered && !args.clearSortTriggered) { @@ -54,6 +55,20 @@ main.executeBackendCallback = function exeBackendCallback(backendServiceApi: Bac if (process instanceof Promise && process.then) { process.then((processResult: any) => main.executeBackendProcessesCallback(startTime, processResult, backendServiceApi, totalItems)) .catch((error: any) => main.onBackendError(error, backendServiceApi)); + } else if (isObservable(process)) { + // this will abort any previous HTTP requests, that were previously hooked in the takeUntil, before sending a new request + if (isObservable(httpCancelRequests$)) { + httpCancelRequests$!.next(); + } + + (process as unknown as ObservableFacade) + // the following takeUntil, will potentially be used later to cancel any pending http request (takeUntil another rx, that would be httpCancelRequests$, completes) + // but make sure the observable is actually defined with the iif condition check before piping it to the takeUntil + .pipe(takeUntil(iif(() => isObservable(httpCancelRequests$), httpCancelRequests$, EMPTY))) + .subscribe( + (processResult: any) => main.executeBackendProcessesCallback(startTime, processResult, backendServiceApi, totalItems), + (error: any) => main.onBackendError(error, backendServiceApi) + ); } } }; diff --git a/packages/common/src/services/filter.service.ts b/packages/common/src/services/filter.service.ts index 9a61ee174..cd0b13b23 100644 --- a/packages/common/src/services/filter.service.ts +++ b/packages/common/src/services/filter.service.ts @@ -33,6 +33,7 @@ import { executeBackendCallback, refreshBackendDataset } from './backend-utiliti import { debounce, deepCopy, getDescendantProperty, mapOperatorByFieldType } from './utilities'; import { PubSubService } from '../services/pubSub.service'; import { SharedService } from './shared.service'; +import { isObservable, SubjectFacade } from './rxjsFacade'; // using external non-typed js libraries declare const Slick: SlickNamespace; @@ -61,6 +62,7 @@ export class FilterService { protected _grid!: SlickGrid; protected _onSearchChange: SlickEvent | null; protected _tmpPreFilteredData?: number[]; + protected httpCancelRequests$: SubjectFacade = new SubjectFacade(); // this will be used to cancel any pending http request constructor(protected filterFactory: FilterFactory, protected pubSubService: PubSubService, protected sharedService: SharedService) { this._onSearchChange = new Slick.Event(); @@ -114,6 +116,9 @@ export class FilterService { if (this._eventHandler && this._eventHandler.unsubscribeAll) { this._eventHandler.unsubscribeAll(); } + if (isObservable(this.httpCancelRequests$)) { + this.httpCancelRequests$.next(); // this cancels any pending http requests + } this.disposeColumnFilters(); this._onSearchChange = null; } @@ -646,12 +651,12 @@ export class FilterService { debounce(() => { const query = backendApi.service.processOnFilterChanged(event, args); const totalItems = this._gridOptions && this._gridOptions.pagination && this._gridOptions.pagination.totalItems || 0; - executeBackendCallback(backendApi, query, args, startTime, totalItems, this.emitFilterChanged.bind(this)); + executeBackendCallback(backendApi, query, args, startTime, totalItems, this.emitFilterChanged.bind(this), this.httpCancelRequests$); }, debounceTypingDelay)(); } else { const query = backendApi.service.processOnFilterChanged(event, args); const totalItems = this._gridOptions && this._gridOptions.pagination && this._gridOptions.pagination.totalItems || 0; - executeBackendCallback(backendApi, query, args, startTime, totalItems, this.emitFilterChanged.bind(this)); + executeBackendCallback(backendApi, query, args, startTime, totalItems, this.emitFilterChanged.bind(this), this.httpCancelRequests$); } } } diff --git a/packages/common/src/services/index.ts b/packages/common/src/services/index.ts index 3e8be239b..f17529572 100644 --- a/packages/common/src/services/index.ts +++ b/packages/common/src/services/index.ts @@ -12,6 +12,7 @@ export * from './gridState.service'; export * from './groupingAndColspan.service'; export * from './pagination.service'; export * from './pubSub.service'; +export * from './rxjsFacade'; export * from './shared.service'; export * from './sort.service'; export * from './textExport.service'; diff --git a/packages/common/src/services/pagination.service.ts b/packages/common/src/services/pagination.service.ts index 66f3f3d77..e871329a1 100644 --- a/packages/common/src/services/pagination.service.ts +++ b/packages/common/src/services/pagination.service.ts @@ -15,6 +15,7 @@ import { import { executeBackendProcessesCallback, onBackendError } from './backend-utilities'; import { SharedService } from './shared.service'; import { PubSubService } from './pubSub.service'; +import { isObservable, ObservableFacade } from './rxjsFacade'; // using external non-typed js libraries declare const Slick: SlickNamespace; @@ -345,7 +346,20 @@ export class PaginationService { onBackendError(error, this._backendServiceApi); reject(process); }); + } else if (isObservable(process)) { + this._subscriptions.push( + (process as ObservableFacade).subscribe( + (processResult: any) => { + resolve(executeBackendProcessesCallback(startTime, processResult, this._backendServiceApi, this._totalItems)); + }, + (error: any) => { + onBackendError(error, this._backendServiceApi); + reject(process); + } + ) + ); } + this.pubSubService.publish(`onPaginationRefreshed`, this.getFullPagination()); this.pubSubService.publish(`onPaginationChanged`, this.getFullPagination()); } diff --git a/packages/common/src/services/rxjsFacade.ts b/packages/common/src/services/rxjsFacade.ts new file mode 100644 index 000000000..26f2dd6b3 --- /dev/null +++ b/packages/common/src/services/rxjsFacade.ts @@ -0,0 +1,89 @@ +/* eslint-disable @typescript-eslint/no-unused-vars */ + +// +// ------------------------------------------------ +// THIS IS JUST AN EMPTY SHELL, A FACADE TO RxJs +// We only provide interfaces to be re-implemented via an external package with the real RxJS +// The reason we do this is to avoid adding RxJS as a dependency to the common package +// while also making it extensible to be used from outside. +// When user whishes to use RxJS Observables, he'll simply have to use the external +// RxJS Wrapper package (which will depend on the real RxJS package) +// ------------------------------------------------------------------------------------------------------- + +export const EMPTY: any = null; + +export function iif(condition: () => boolean, trueResult?: any, falseResult?: any): ObservableFacade { + throw new Error('RxJs Service "iif" method must be implemented'); +} + +/** Tests to see if the object is an RxJS Observable */ +export function isObservable(obj: any): boolean { + throw new Error('RxJs Service "isObservable" method must be implemented'); +} + +export function takeUntil(notifier: ObservableFacade): any { + throw new Error('RxJs Service "takeUntil" method must be implemented'); +} + +/** + * A Subject is a special type of Observable that allows values to be + * multicasted to many Observers. Subjects are like EventEmitters. + */ +export class SubjectFacade { + next(value?: T): void { + throw new Error('RxJs Subject "next" method must be implemented'); + } + error(err: any): void { + throw new Error('RxJs Subject "error" method must be implemented'); + } + complete(): void { + throw new Error('RxJs Subject "complete" method must be implemented'); + } + unsubscribe(): void { + throw new Error('RxJs Subject "unsubscribe" method must be implemented'); + } + + /** Creates a new Observable with this Subject as the source. */ + asObservable(): ObservableFacade { + throw new Error('RxJs Subject "asObservable" method must be implemented'); + } +} + +export class ObservableFacade { + /** Observable constructor, you can provide a subscribe function that is called when the Observable is initially subscribed to. */ + constructor(subscribe?: (this: ObservableFacade, subscriber: any) => any) { + throw new Error('RxJS Observable "constructor" method must be implemented'); + } + + /** Subscribe to the Observable */ + subscribe(next?: (value: T) => void, error?: (error: any) => void, complete?: () => void): SubscriptionFacade { + throw new Error('RxJS Observable "subscribe" method must be implemented'); + } + + /** Pipe an operator function to the Observable */ + pipe(fns?: any): any { + throw new Error('RxJS Observable "pipe" method must be implemented'); + } +} + +export class SubscriptionFacade { + /** A function describing how to perform the disposal of resources when the `unsubscribe` method is called. */ + constructor(unsubscribe?: () => void) { + throw new Error('RxJS Subscription "constructor" method must be implemented'); + } + + /** Disposes the resources held by the subscription. */ + unsubscribe(): void { + throw new Error('RxJS Subscription "unsubscribe" method must be implemented'); + } + + /** Adds a tear down to be called during the unsubscribe() of this Subscription. */ + add(teardown: any): SubscriptionFacade { + throw new Error('RxJS Subscription "add" method must be implemented'); + } + + /** Removes a Subscription from the internal list of subscriptions that will unsubscribe during the unsubscribe process of this Subscription. */ + remove(subscription: SubscriptionFacade): void { + throw new Error('RxJS Subscription "remove" method must be implemented'); + } +} diff --git a/packages/common/src/services/sort.service.ts b/packages/common/src/services/sort.service.ts index c9341dced..0629faa55 100644 --- a/packages/common/src/services/sort.service.ts +++ b/packages/common/src/services/sort.service.ts @@ -25,6 +25,7 @@ import { getDescendantProperty, convertHierarchicalViewToParentChildArray } from import { sortByFieldType } from '../sortComparers/sortUtilities'; import { PubSubService } from './pubSub.service'; import { SharedService } from './shared.service'; +import { isObservable, SubjectFacade } from './rxjsFacade'; // using external non-typed js libraries declare const Slick: SlickNamespace; @@ -35,6 +36,7 @@ export class SortService { private _dataView!: SlickDataView; private _grid!: SlickGrid; private _isBackendGrid = false; + private httpCancelRequests$: SubjectFacade = new SubjectFacade(); // this will be used to cancel any pending http request constructor(private sharedService: SharedService, private pubSubService: PubSubService) { this._eventHandler = new Slick.EventHandler(); @@ -308,6 +310,9 @@ export class SortService { if (this._eventHandler && this._eventHandler.unsubscribeAll) { this._eventHandler.unsubscribeAll(); } + if (isObservable(this.httpCancelRequests$)) { + this.httpCancelRequests$.next(); // this cancels any pending http requests + } } /** Process the initial sort, typically it will sort ascending by the column that has the Tree Data unless user specifies a different initialSort */ @@ -358,7 +363,7 @@ export class SortService { // query backend const query = backendApi.service.processOnSortChanged(event, args); const totalItems = gridOptions && gridOptions.pagination && gridOptions.pagination.totalItems || 0; - executeBackendCallback(backendApi, query, args, startTime, totalItems, this.emitSortChanged.bind(this)); + executeBackendCallback(backendApi, query, args, startTime, totalItems, this.emitSortChanged.bind(this), this.httpCancelRequests$); } /** When a Sort Changes on a Local grid (JSON dataset) */ diff --git a/packages/graphql/src/interfaces/graphqlServiceApi.interface.ts b/packages/graphql/src/interfaces/graphqlServiceApi.interface.ts index 3e0e7d7cf..09c7eb8f8 100644 --- a/packages/graphql/src/interfaces/graphqlServiceApi.interface.ts +++ b/packages/graphql/src/interfaces/graphqlServiceApi.interface.ts @@ -1,4 +1,4 @@ -import { BackendServiceApi } from '@slickgrid-universal/common'; +import { BackendServiceApi, ObservableFacade } from '@slickgrid-universal/common'; import { GraphqlResult } from './graphqlResult.interface'; import { GraphqlPaginatedResult } from './graphqlPaginatedResult.interface'; @@ -13,10 +13,10 @@ export interface GraphqlServiceApi extends BackendServiceApi { service: GraphqlService; /** On init (or on page load), what action to perform? */ - onInit?: (query: string) => Promise; + onInit?: (query: string) => Promise | ObservableFacade; - /** On Processing, we get the query back from the service, and we need to provide a Promise. For example: this.http.get(myGraphqlUrl) */ - process: (query: string) => Promise; + /** On Processing, we get the query back from the service, and we need to provide a Promise/Observable. For example: this.http.get(myGraphqlUrl) */ + process: (query: string) => Promise | ObservableFacade; /** After executing the query, what action to perform? For example, stop the spinner */ postProcess?: (response: GraphqlResult | GraphqlPaginatedResult) => void; diff --git a/packages/rxjs-observable/README.md b/packages/rxjs-observable/README.md new file mode 100644 index 000000000..e9b12d94b --- /dev/null +++ b/packages/rxjs-observable/README.md @@ -0,0 +1,21 @@ +[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) +[![TypeScript](https://img.shields.io/badge/%3C%2F%3E-TypeScript-%230074c1.svg)](http://www.typescriptlang.org/) +[![lerna](https://img.shields.io/badge/maintained%20with-lerna-cc00ff.svg)](https://lerna.js.org/) +[![npm](https://img.shields.io/npm/v/@slickgrid-universal/observable-rxjs.svg?color=forest)](https://www.npmjs.com/package/@slickgrid-universal/observable-rxjs) +[![npm](https://img.shields.io/npm/dy/@slickgrid-universal/observable-rxjs?color=forest)](https://www.npmjs.com/package/@slickgrid-universal/observable-rxjs) + +[![Actions Status](https://github.com/ghiscoding/slickgrid-universal/workflows/CI%20Build/badge.svg)](https://github.com/ghiscoding/slickgrid-universal/actions) +[![Cypress.io](https://img.shields.io/badge/tested%20with-Cypress-04C38E.svg)](https://www.cypress.io/) +[![jest](https://jestjs.io/img/jest-badge.svg)](https://github.com/facebook/jest) +[![codecov](https://codecov.io/gh/ghiscoding/slickgrid-universal/branch/master/graph/badge.svg)](https://codecov.io/gh/ghiscoding/slickgrid-universal) + +## RxJS Observable Wrapper +#### @slickgrid-universal/observable-rxjs + +An RxJS Observable Wrapper for any implementation which uses RxJS + +### External Dependencies +No external dependency + +### Installation +Follow the instruction provided in the main [README](https://github.com/ghiscoding/slickgrid-universal#installation) diff --git a/packages/rxjs-observable/package.json b/packages/rxjs-observable/package.json new file mode 100644 index 000000000..f375a7f3b --- /dev/null +++ b/packages/rxjs-observable/package.json @@ -0,0 +1,50 @@ +{ + "name": "@slickgrid-universal/observable-rxjs", + "version": "0.11.2", + "description": "RxJS Observable Wrapper", + "main": "dist/commonjs/index.js", + "browser": "src/index.ts", + "module": "dist/esm/index.js", + "types": "dist/commonjs/index.d.ts", + "typings": "dist/commonjs/index.d.ts", + "publishConfig": { + "access": "public" + }, + "directories": { + "src": "src" + }, + "scripts": { + "build": "cross-env tsc --build", + "postbuild": "npm-run-all bundle:commonjs", + "build:watch": "cross-env tsc --incremental --watch", + "dev": "run-s build sass:build sass:copy", + "dev:watch": "run-p build:watch", + "bundle": "run-p bundle:commonjs bundle:esm", + "bundle:commonjs": "tsc --project tsconfig.bundle.json --outDir dist/commonjs --module commonjs", + "bundle:esm": "cross-env tsc --project tsconfig.bundle.json --outDir dist/esm --module esnext --target es2018", + "prebundle": "npm-run-all delete:dist", + "delete:dist": "cross-env rimraf --maxBusyTries=10 dist", + "package:add-browser-prop": "cross-env node ../change-package-browser.js --add-browser=true --folder-name=empty-warning-component", + "package:remove-browser-prop": "cross-env node ../change-package-browser.js --remove-browser=true --folder-name=empty-warning-component" + }, + "author": "Ghislain B.", + "license": "MIT", + "engines": { + "node": ">=14.15.0", + "npm": ">=6.14.8" + }, + "browserslist": [ + "last 2 version", + "> 1%", + "not dead" + ], + "dependencies": { + "@slickgrid-universal/common": "^0.11.2", + "rxjs": "^6.6.6" + }, + "devDependencies": { + "cross-env": "^7.0.3", + "npm-run-all": "^4.1.5", + "rimraf": "^3.0.2" + } +} diff --git a/packages/rxjs-observable/src/.npmignore b/packages/rxjs-observable/src/.npmignore new file mode 100644 index 000000000..083a3140f --- /dev/null +++ b/packages/rxjs-observable/src/.npmignore @@ -0,0 +1,2 @@ +index.ts +**/*.* diff --git a/packages/rxjs-observable/src/index.spec.ts b/packages/rxjs-observable/src/index.spec.ts new file mode 100644 index 000000000..52c6e322b --- /dev/null +++ b/packages/rxjs-observable/src/index.spec.ts @@ -0,0 +1,12 @@ +import * as entry from './index'; + +describe('Testing library entry point', () => { + it('should have an index entry point defined', () => { + expect(entry).toBeTruthy(); + }); + + it('should have all exported object defined', () => { + expect(typeof entry.ObservableWrapper).toBe('function'); + expect(typeof entry.SubscriptionWrapper).toBe('function'); + }); +}); diff --git a/packages/rxjs-observable/src/index.ts b/packages/rxjs-observable/src/index.ts new file mode 100644 index 000000000..80a8437b9 --- /dev/null +++ b/packages/rxjs-observable/src/index.ts @@ -0,0 +1,2 @@ +export * from './observableWrapper'; +export * from './subscriptionWrapper'; diff --git a/packages/rxjs-observable/src/observableWrapper.ts b/packages/rxjs-observable/src/observableWrapper.ts new file mode 100644 index 000000000..6bbef5337 --- /dev/null +++ b/packages/rxjs-observable/src/observableWrapper.ts @@ -0,0 +1,21 @@ +import { ObservableFacade } from '@slickgrid-universal/common'; +import { Observable, Subscription } from 'rxjs'; + +// export const EMPTYUniversal = EMPTY; + +export class ObservableWrapper implements ObservableFacade { + private observer: Observable; + + constructor() { + this.observer = new Observable(); + } + + pipe(fns?: any): Observable { + return this.observer.pipe(fns); + } + + // subscribe(observer?: any): any { } + subscribe(next?: (value: T) => void, error?: (error: any) => void, complete?: () => void): Subscription { + return this.observer.subscribe(next, error, complete); + } +} \ No newline at end of file diff --git a/packages/rxjs-observable/src/subscriptionWrapper.ts b/packages/rxjs-observable/src/subscriptionWrapper.ts new file mode 100644 index 000000000..d63dba073 --- /dev/null +++ b/packages/rxjs-observable/src/subscriptionWrapper.ts @@ -0,0 +1,25 @@ +import { SubscriptionFacade } from '@slickgrid-universal/common'; +import { Subscription, TeardownLogic } from 'rxjs'; + +export class SubscriptionWrapper implements SubscriptionFacade { + private subscriber; + + constructor() { + this.subscriber = new Subscription(); + } + + /** Disposes the resources held by the subscription */ + unsubscribe(): void { + this.subscriber.unsubscribe(); + } + + /** Adds a tear down to be called during the unsubscribe() of this Subscription. */ + add(teardown: TeardownLogic): Subscription { + return this.subscriber.add(teardown); + } + + /** Removes a Subscription from the internal list of subscriptions. */ + remove(subscription: Subscription): void { + return this.subscriber.remove(subscription); + } +} \ No newline at end of file diff --git a/packages/rxjs-observable/tsconfig.bundle.json b/packages/rxjs-observable/tsconfig.bundle.json new file mode 100644 index 000000000..7c6f72a9a --- /dev/null +++ b/packages/rxjs-observable/tsconfig.bundle.json @@ -0,0 +1,14 @@ +{ + "extends": "../tsconfig.bundle.json", + "compilerOptions": { + "typeRoots": [ + "../typings", + "../../node_modules/@types" + ], + "outDir": "dist/commonjs" + }, + "include": [ + "../typings", + "**/*" + ] +} \ No newline at end of file diff --git a/packages/rxjs-observable/tsconfig.json b/packages/rxjs-observable/tsconfig.json new file mode 100644 index 000000000..277dfa292 --- /dev/null +++ b/packages/rxjs-observable/tsconfig.json @@ -0,0 +1,24 @@ +{ + "extends": "../tsconfig.base.json", + "compileOnSave": false, + "compilerOptions": { + "rootDir": "src", + "declarationDir": "dist/esm", + "outDir": "dist/esm", + "typeRoots": [ + "typings" + ] + }, + "exclude": [ + "dist", + "node_modules", + "**/*.spec.ts" + ], + "filesGlob": [ + "./src/**/*.ts" + ], + "include": [ + "src/**/*.ts", + "typings/**/*.ts" + ] +} \ No newline at end of file diff --git a/packages/vanilla-bundle/src/components/slick-vanilla-grid-bundle.ts b/packages/vanilla-bundle/src/components/slick-vanilla-grid-bundle.ts index e7bb2671c..bb77e1483 100644 --- a/packages/vanilla-bundle/src/components/slick-vanilla-grid-bundle.ts +++ b/packages/vanilla-bundle/src/components/slick-vanilla-grid-bundle.ts @@ -1184,7 +1184,7 @@ export class SlickVanillaGridBundle { /** Load the Editor Collection asynchronously and replace the "collection" property when Promise resolves */ private loadEditorCollectionAsync(column: Column) { - const collectionAsync = (column?.editor as ColumnEditor).collectionAsync; + const collectionAsync = (column?.editor as ColumnEditor).collectionAsync as Promise; (column?.editor as ColumnEditor).disabled = true; // disable the Editor DOM element, we'll re-enable it after receiving the collection with "updateEditorCollection()" if (collectionAsync) { diff --git a/yarn.lock b/yarn.lock index 030f84552..b9e4736b4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9991,6 +9991,13 @@ rxjs@^6.3.3, rxjs@^6.4.0: dependencies: tslib "^1.9.0" +rxjs@^6.6.6: + version "6.6.6" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.6.tgz#14d8417aa5a07c5e633995b525e1e3c0dec03b70" + integrity sha512-/oTwee4N4iWzAMAL9xdGKjkEHmIwupR3oXbQjCKywF1BeFohswF3vZdogbmEF6pZkOsXTzWkrZszrWpQTByYVg== + dependencies: + tslib "^1.9.0" + safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" From 12dd88a3a4b85103b163d87d6025367037f5eae4 Mon Sep 17 00:00:00 2001 From: ghiscoding Date: Sat, 6 Mar 2021 18:38:52 -0500 Subject: [PATCH 02/21] feat: create Example15 with a working POC using RxJS & Axios --- .../webpack-demo-vanilla-bundle/package.json | 3 + .../src/app-routing.ts | 1 + .../webpack-demo-vanilla-bundle/src/app.html | 3 + .../src/examples/example15.html | 74 ++++ .../src/examples/example15.ts | 326 ++++++++++++++++++ .../webpack.config.js | 3 +- package.json | 14 +- .../src/extensions/gridMenuExtension.ts | 5 +- .../interfaces/externalResource.interface.ts | 5 +- .../common/src/services/backend-utilities.ts | 172 +++++---- .../common/src/services/filter.service.ts | 27 +- .../common/src/services/pagination.service.ts | 24 +- packages/common/src/services/rxjsFacade.ts | 102 +++--- packages/common/src/services/sort.service.ts | 21 +- .../excel-export/src/excelExport.service.ts | 2 +- packages/rxjs-observable/README.md | 12 +- packages/rxjs-observable/package.json | 2 +- packages/rxjs-observable/src/index.spec.ts | 3 +- packages/rxjs-observable/src/index.ts | 3 +- .../rxjs-observable/src/observableWrapper.ts | 21 -- packages/rxjs-observable/src/rxjs.resource.ts | 44 +++ .../src/subscriptionWrapper.ts | 25 -- .../text-export/src/textExport.service.ts | 2 +- .../components/slick-vanilla-grid-bundle.ts | 67 ++-- yarn.lock | 251 ++++++++------ 25 files changed, 855 insertions(+), 357 deletions(-) create mode 100644 examples/webpack-demo-vanilla-bundle/src/examples/example15.html create mode 100644 examples/webpack-demo-vanilla-bundle/src/examples/example15.ts delete mode 100644 packages/rxjs-observable/src/observableWrapper.ts create mode 100644 packages/rxjs-observable/src/rxjs.resource.ts delete mode 100644 packages/rxjs-observable/src/subscriptionWrapper.ts diff --git a/examples/webpack-demo-vanilla-bundle/package.json b/examples/webpack-demo-vanilla-bundle/package.json index b005ebf9d..448dbc0ee 100644 --- a/examples/webpack-demo-vanilla-bundle/package.json +++ b/examples/webpack-demo-vanilla-bundle/package.json @@ -37,6 +37,8 @@ "@types/moment": "^2.13.0", "@types/node": "^14.14.31", "@types/webpack": "^4.41.26", + "axios": "^0.21.1", + "axios-observable": "^1.1.6", "clean-webpack-plugin": "^3.0.0", "copy-webpack-plugin": "^7.0.0", "css-loader": "^5.1.0", @@ -46,6 +48,7 @@ "html-webpack-plugin": "5.2.0", "mini-css-extract-plugin": "^1.3.9", "node-sass": "5.0.0", + "rxjs": "^6.6.6", "sass-loader": "^11.0.1", "style-loader": "^2.0.0", "ts-loader": "^8.0.17", diff --git a/examples/webpack-demo-vanilla-bundle/src/app-routing.ts b/examples/webpack-demo-vanilla-bundle/src/app-routing.ts index 028778c2e..eac478d95 100644 --- a/examples/webpack-demo-vanilla-bundle/src/app-routing.ts +++ b/examples/webpack-demo-vanilla-bundle/src/app-routing.ts @@ -17,6 +17,7 @@ export class AppRouting { { route: 'example11', name: 'example11', title: 'Example11', moduleId: './examples/example11' }, { route: 'example12', name: 'example12', title: 'Example12', moduleId: './examples/example12' }, { route: 'example13', name: 'example13', title: 'Example13', moduleId: './examples/example13' }, + { route: 'example15', name: 'example15', title: 'Example15', moduleId: './examples/example15' }, { route: 'icons', name: 'icons', title: 'icons', moduleId: './examples/icons' }, { route: '', redirect: 'example01' }, { route: '**', redirect: 'example01' } diff --git a/examples/webpack-demo-vanilla-bundle/src/app.html b/examples/webpack-demo-vanilla-bundle/src/app.html index fe98b4e66..c9c368b13 100644 --- a/examples/webpack-demo-vanilla-bundle/src/app.html +++ b/examples/webpack-demo-vanilla-bundle/src/app.html @@ -72,6 +72,9 @@

Slickgrid-Universal

Example13 - Header Button Plugin + + Example15 - OData Backend Service with RxJS + diff --git a/examples/webpack-demo-vanilla-bundle/src/examples/example15.html b/examples/webpack-demo-vanilla-bundle/src/examples/example15.html new file mode 100644 index 000000000..13a342857 --- /dev/null +++ b/examples/webpack-demo-vanilla-bundle/src/examples/example15.html @@ -0,0 +1,74 @@ +

+ Example 15 - Grid with OData Backend Service using RxJS Observables + +

+ +
+ + + +
+ +
+ +
+ + + + + + + + + + + + + + +
+ +
+
+
+ OData Query: + +
+
+
+
+ Status: +
+
+
+ +
+
\ No newline at end of file diff --git a/examples/webpack-demo-vanilla-bundle/src/examples/example15.ts b/examples/webpack-demo-vanilla-bundle/src/examples/example15.ts new file mode 100644 index 000000000..eb494158d --- /dev/null +++ b/examples/webpack-demo-vanilla-bundle/src/examples/example15.ts @@ -0,0 +1,326 @@ +import { BindingEventService, Column, FieldType, Filters, GridOption, GridStateChange, Metrics, OperatorType, } from '@slickgrid-universal/common'; +import { GridOdataService, OdataServiceApi, OdataOption } from '@slickgrid-universal/odata'; +import { RxJsResource } from '@slickgrid-universal/rxjs-observable'; +import { Slicker, SlickVanillaGridBundle } from '@slickgrid-universal/vanilla-bundle'; +import Axios from 'axios-observable'; +import { from } from 'rxjs'; + +import { ExampleGridOptions } from './example-grid-options'; + +const defaultPageSize = 20; + +export class Example15 { + private _bindingEventService: BindingEventService; + columnDefinitions: Column[]; + gridOptions: GridOption; + metrics: Metrics; + sgb: SlickVanillaGridBundle; + + isCountEnabled = true; + odataVersion = 2; + odataQuery = ''; + processing = false; + status = ''; + statusClass = 'is-success'; + + constructor() { + this._bindingEventService = new BindingEventService(); + } + + attached() { + this.initializeGrid(); + const gridContainerElm = document.querySelector(`.grid15`); + + this._bindingEventService.bind(gridContainerElm, 'ongridstatechanged', this.gridStateChanged.bind(this)); + // this._bindingEventService.bind(gridContainerElm, 'onbeforeexporttoexcel', () => console.log('onBeforeExportToExcel')); + // this._bindingEventService.bind(gridContainerElm, 'onafterexporttoexcel', () => console.log('onAfterExportToExcel')); + this.sgb = new Slicker.GridBundle(gridContainerElm, this.columnDefinitions, { ...ExampleGridOptions, ...this.gridOptions }, []); + } + + dispose() { + if (this.sgb) { + this.sgb?.dispose(); + } + this._bindingEventService.unbindAll(); + } + + initializeGrid() { + this.columnDefinitions = [ + { + id: 'name', name: 'Name', field: 'name', sortable: true, + type: FieldType.string, + filterable: true, + filter: { + model: Filters.compoundInput + } + }, + { + id: 'gender', name: 'Gender', field: 'gender', filterable: true, + filter: { + model: Filters.singleSelect, + collection: [{ value: '', label: '' }, { value: 'male', label: 'male' }, { value: 'female', label: 'female' }] + } + }, + { id: 'company', name: 'Company', field: 'company' }, + ]; + + this.gridOptions = { + enableAutoResize: true, + autoResize: { + container: '.demo-container', + rightPadding: 10 + }, + checkboxSelector: { + // you can toggle these 2 properties to show the "select all" checkbox in different location + hideInFilterHeaderRow: false, + hideInColumnTitleRow: true + }, + enableCellNavigation: true, + enableFiltering: true, + enableCheckboxSelector: true, + enableRowSelection: true, + enablePagination: true, // you could optionally disable the Pagination + pagination: { + pageSizes: [10, 20, 50, 100, 500], + pageSize: defaultPageSize, + }, + presets: { + // you can also type operator as string, e.g.: operator: 'EQ' + filters: [ + // { columnId: 'name', searchTerms: ['w'], operator: OperatorType.startsWith }, + { columnId: 'gender', searchTerms: ['male'], operator: OperatorType.equal }, + ], + sorters: [ + // direction can be written as 'asc' (uppercase or lowercase) and/or use the SortDirection type + { columnId: 'name', direction: 'asc' }, + ], + pagination: { pageNumber: 2, pageSize: 20 } + }, + backendServiceApi: { + service: new GridOdataService(), + options: { + enableCount: this.isCountEnabled, // add the count in the OData query, which will return a property named "odata.count" (v2) or "@odata.count" (v4) + version: this.odataVersion // defaults to 2, the query string is slightly different between OData 2 and 4 + }, + preProcess: () => this.displaySpinner(true), + process: (query) => this.getCustomerApiCall(query), + postProcess: (response) => { + this.metrics = response.metrics; + this.displaySpinner(false); + this.getCustomerCallback(response); + } + } as OdataServiceApi, + registerExternalResources: [new RxJsResource()] + }; + } + + displaySpinner(isProcessing) { + this.processing = isProcessing; + this.status = (isProcessing) ? 'loading...' : 'finished!!'; + this.statusClass = (isProcessing) ? 'notification is-light is-warning' : 'notification is-light is-success'; + } + + getCustomerCallback(data) { + // totalItems property needs to be filled for pagination to work correctly + // however we need to force Aurelia to do a dirty check, doing a clone object will do just that + let countPropName = 'totalRecordCount'; // you can use "totalRecordCount" or any name or "odata.count" when "enableCount" is set + if (this.isCountEnabled) { + countPropName = (this.odataVersion === 4) ? '@odata.count' : 'odata.count'; + } + if (this.metrics) { + this.metrics.totalItemCount = data[countPropName]; + } + + // once pagination totalItems is filled, we can update the dataset + this.sgb.paginationOptions.totalItems = data[countPropName]; + this.sgb.dataset = data['items']; + this.odataQuery = data['query']; + } + + getCustomerApiCall(query) { + // in your case, you will call your WebAPI function (wich needs to return an Observable) + // for the demo purpose, we will call a mock WebAPI function + return from(this.getCustomerDataApiMock(query)); // turn the Promise into an Observable for testing purpose + } + + /** + * This function is only here to mock a WebAPI call (since we are using a JSON file for the demo) + * in your case the getCustomer() should be a WebAPI function returning a Promise + */ + getCustomerDataApiMock(query): Promise { + // the mock is returning a Promise, just like a WebAPI typically does + return new Promise((resolve) => { + const queryParams = query.toLowerCase().split('&'); + let top: number; + let skip = 0; + let orderBy = ''; + let countTotalItems = 100; + const columnFilters = {}; + + for (const param of queryParams) { + if (param.includes('$top=')) { + top = +(param.substring('$top='.length)); + } + if (param.includes('$skip=')) { + skip = +(param.substring('$skip='.length)); + } + if (param.includes('$orderby=')) { + orderBy = param.substring('$orderby='.length); + } + if (param.includes('$filter=')) { + const filterBy = param.substring('$filter='.length).replace('%20', ' '); + if (filterBy.includes('contains')) { + const filterMatch = filterBy.match(/contains\(([a-zA-Z\/]+),\s?'(.*?)'/); + const fieldName = filterMatch[1].trim(); + columnFilters[fieldName] = { type: 'substring', term: filterMatch[2].trim() }; + } + if (filterBy.includes('substringof')) { + const filterMatch = filterBy.match(/substringof\('(.*?)',([a-zA-Z ]*)/); + const fieldName = filterMatch[2].trim(); + columnFilters[fieldName] = { type: 'substring', term: filterMatch[1].trim() }; + } + if (filterBy.includes('eq')) { + const filterMatch = filterBy.match(/([a-zA-Z ]*) eq '(.*?)'/); + if (Array.isArray(filterMatch)) { + const fieldName = filterMatch[1].trim(); + columnFilters[fieldName] = { type: 'equal', term: filterMatch[2].trim() }; + } + } + if (filterBy.includes('startswith')) { + const filterMatch = filterBy.match(/startswith\(([a-zA-Z ]*),\s?'(.*?)'/); + const fieldName = filterMatch[1].trim(); + columnFilters[fieldName] = { type: 'starts', term: filterMatch[2].trim() }; + } + if (filterBy.includes('endswith')) { + const filterMatch = filterBy.match(/endswith\(([a-zA-Z ]*),\s?'(.*?)'/); + const fieldName = filterMatch[1].trim(); + columnFilters[fieldName] = { type: 'ends', term: filterMatch[2].trim() }; + } + } + } + + const sort = orderBy.includes('asc') + ? 'ASC' + : orderBy.includes('desc') + ? 'DESC' + : ''; + + let url; + switch (sort) { + case 'ASC': + url = 'assets/data/customers_100_ASC.json'; + break; + case 'DESC': + url = 'assets/data/customers_100_DESC.json'; + break; + default: + url = 'assets/data/customers_100.json'; + break; + } + + // Make a request for a user with a given ID + Axios.get(url) + .subscribe(response => { + // Read the result field from the JSON response. + const data = response.data; + const firstRow = skip; + let filteredData = data; + if (columnFilters) { + for (const columnId in columnFilters) { + if (columnFilters.hasOwnProperty(columnId)) { + filteredData = filteredData.filter(column => { + const filterType = columnFilters[columnId].type; + const searchTerm = columnFilters[columnId].term; + let colId = columnId; + if (columnId && columnId.indexOf(' ') !== -1) { + const splitIds = columnId.split(' '); + colId = splitIds[splitIds.length - 1]; + } + const filterTerm = column[colId]; + if (filterTerm) { + switch (filterType) { + case 'equal': return filterTerm.toLowerCase() === searchTerm; + case 'ends': return filterTerm.toLowerCase().endsWith(searchTerm); + case 'starts': return filterTerm.toLowerCase().startsWith(searchTerm); + case 'substring': return filterTerm.toLowerCase().includes(searchTerm); + } + } + }); + } + } + countTotalItems = filteredData.length; + } + const updatedData = filteredData.slice(firstRow, firstRow + top); + + setTimeout(() => { + let countPropName = 'totalRecordCount'; + if (this.isCountEnabled) { + countPropName = (this.odataVersion === 4) ? '@odata.count' : 'odata.count'; + } + const backendResult = { items: updatedData, [countPropName]: countTotalItems, query }; + // console.log('Backend Result', backendResult); + resolve(backendResult); + }, 150); + }); + + }); + } + + clearAllFiltersAndSorts() { + if (this.sgb?.gridService) { + this.sgb.gridService.clearAllFiltersAndSorts(); + } + } + + goToFirstPage() { + this.sgb?.paginationService?.goToFirstPage(); + } + + goToLastPage() { + this.sgb?.paginationService?.goToLastPage(); + } + + /** Dispatched event of a Grid State Changed event */ + gridStateChanged(event) { + if (event?.detail) { + const gridStateChanges: GridStateChange = event.detail; + // console.log('Client sample, Grid State changed:: ', gridStateChanges); + console.log('Client sample, Grid State changed:: ', gridStateChanges.change); + } + } + + setFiltersDynamically() { + // we can Set Filters Dynamically (or different filters) afterward through the FilterService + this.sgb?.filterService.updateFilters([ + // { columnId: 'gender', searchTerms: ['male'], operator: OperatorType.equal }, + { columnId: 'name', searchTerms: ['A'], operator: 'a*' }, + ]); + } + + setSortingDynamically() { + this.sgb?.sortService.updateSorting([ + { columnId: 'name', direction: 'DESC' }, + ]); + } + + // THE FOLLOWING METHODS ARE ONLY FOR DEMO PURPOSES DO NOT USE THIS CODE + // --- + + changeCountEnableFlag() { + this.isCountEnabled = !this.isCountEnabled; + const odataService = this.gridOptions.backendServiceApi.service; + odataService.updateOptions({ enableCount: this.isCountEnabled } as OdataOption); + odataService.clearFilters(); + this.sgb?.filterService.clearFilters(); + return true; + } + + setOdataVersion(version: number) { + this.odataVersion = version; + const odataService = this.gridOptions.backendServiceApi.service; + odataService.updateOptions({ version: this.odataVersion } as OdataOption); + odataService.clearFilters(); + this.sgb?.filterService.clearFilters(); + return true; + } +} diff --git a/examples/webpack-demo-vanilla-bundle/webpack.config.js b/examples/webpack-demo-vanilla-bundle/webpack.config.js index 0958c0532..ae36a9552 100644 --- a/examples/webpack-demo-vanilla-bundle/webpack.config.js +++ b/examples/webpack-demo-vanilla-bundle/webpack.config.js @@ -82,7 +82,8 @@ module.exports = ({ production } = {}) => ({ new CopyWebpackPlugin({ patterns: [ { from: `${srcDir}/favicon.ico`, to: 'favicon.ico' }, - { from: 'assets', to: 'assets' } + { from: 'assets', to: 'assets' }, + { from: 'src/examples/data', to: 'assets/data' } ] }), new MiniCssExtractPlugin({ // updated to match the naming conventions for the js files diff --git a/package.json b/package.json index b4d672c1d..f87eb6a18 100644 --- a/package.json +++ b/package.json @@ -52,10 +52,10 @@ "devDependencies": { "@types/jest": "^26.0.20", "@types/node": "^14.14.31", - "@typescript-eslint/eslint-plugin": "^4.15.2", - "@typescript-eslint/parser": "^4.15.2", - "cypress": "^6.5.0", - "eslint": "^7.20.0", + "@typescript-eslint/eslint-plugin": "^4.16.1", + "@typescript-eslint/parser": "^4.16.1", + "cypress": "^6.6.0", + "eslint": "^7.21.0", "eslint-plugin-import": "^2.22.1", "eslint-plugin-prefer-arrow": "^1.2.3", "http-server": "^0.12.3", @@ -67,11 +67,11 @@ "jsdom": "^16.4.0", "jsdom-global": "^3.0.2", "lerna": "^3.22.1", - "mocha": "^8.3.0", + "mocha": "^8.3.1", "mochawesome": "^6.2.2", "npm-run-all": "^4.1.5", - "ts-jest": "^26.5.2", - "typescript": "^4.2.2" + "ts-jest": "^26.5.3", + "typescript": "^4.2.3" }, "engines": { "node": ">=14.15.0", diff --git a/packages/common/src/extensions/gridMenuExtension.ts b/packages/common/src/extensions/gridMenuExtension.ts index c3958913e..f3b86a983 100644 --- a/packages/common/src/extensions/gridMenuExtension.ts +++ b/packages/common/src/extensions/gridMenuExtension.ts @@ -19,7 +19,7 @@ import { FilterService } from '../services/filter.service'; import { SortService } from '../services/sort.service'; import { SharedService } from '../services/shared.service'; import { TranslaterService } from '../services/translater.service'; -import { refreshBackendDataset } from '../services/backend-utilities'; +import { BackendUtilityService } from '../services/backend-utilities'; import { getTranslationPrefix } from '../services/utilities'; // using external js libraries @@ -37,6 +37,7 @@ export class GridMenuExtension implements Extension { private readonly filterService: FilterService, private readonly sharedService: SharedService, private readonly sortService: SortService, + private readonly backendUtilities?: BackendUtilityService, private readonly translaterService?: TranslaterService, ) { this._eventHandler = new Slick.EventHandler(); @@ -176,7 +177,7 @@ export class GridMenuExtension implements Extension { if (gridOptions) { this.sharedService.gridOptions = { ...this.sharedService.gridOptions, ...gridOptions }; } - refreshBackendDataset(this.sharedService.gridOptions); + this.backendUtilities?.refreshBackendDataset(this.sharedService.gridOptions); } showGridMenu(e: SlickEventData) { diff --git a/packages/common/src/interfaces/externalResource.interface.ts b/packages/common/src/interfaces/externalResource.interface.ts index 533cadc78..e4406af72 100644 --- a/packages/common/src/interfaces/externalResource.interface.ts +++ b/packages/common/src/interfaces/externalResource.interface.ts @@ -2,8 +2,11 @@ import { SlickGrid } from './slickGrid.interface'; import { ContainerService } from '../services'; export interface ExternalResource { + /** optionally provide the Service class name of the resource to make it easier to find even with minified code */ + className?: string; + /** Initialize the External Resource (Component or Service) */ - init: (grid: SlickGrid, container: ContainerService) => void; + init?: (grid: SlickGrid, container: ContainerService) => void; /** Dispose method */ dispose?: () => void; diff --git a/packages/common/src/services/backend-utilities.ts b/packages/common/src/services/backend-utilities.ts index 6ddb11fbd..04c65ff71 100644 --- a/packages/common/src/services/backend-utilities.ts +++ b/packages/common/src/services/backend-utilities.ts @@ -1,109 +1,107 @@ -import { EMPTY, iif, isObservable, takeUntil, SubjectFacade, ObservableFacade } from './rxjsFacade'; import { EmitterType } from '../enums/emitterType.enum'; import { BackendServiceApi, GridOption } from '../interfaces/index'; +import { ObservableFacade, RxJsFacade, SubjectFacade } from './rxjsFacade'; -// construct a main object that will be exported and used by unit tests -const main: any = {}; +export class BackendUtilityService { + constructor(private rxjs?: RxJsFacade) { } -/** Execute the Backend Processes Callback, that could come from an Observable or a Promise callback */ -main.executeBackendProcessesCallback = function exeBackendProcessesCallback(startTime: Date, processResult: any, backendApi: BackendServiceApi, totalItems: number): any { - const endTime = new Date(); - - // define what our internal Post Process callback, only available for GraphQL Service for now - // it will basically refresh the Dataset & Pagination removing the need for the user to always create his own PostProcess every time - if (processResult && backendApi && backendApi.internalPostProcess) { - backendApi.internalPostProcess(processResult); + addRxJsResource(rxjs: RxJsFacade) { + this.rxjs = rxjs; } - // send the response process to the postProcess callback - if (backendApi.postProcess !== undefined) { - if (processResult instanceof Object) { - processResult.metrics = { - startTime, - endTime, - executionTime: endTime.valueOf() - startTime.valueOf(), - itemCount: totalItems, - totalItemCount: totalItems, - }; - } - backendApi.postProcess(processResult); - } -}; - -/** On a backend service api error, we will run the "onError" if there is 1 provided or just throw back the error when nothing is provided */ -main.onBackendError = function backendError(e: any, backendApi: BackendServiceApi) { - if (backendApi && backendApi.onError) { - backendApi.onError(e); - } else { - throw e; - } -}; - -/** - * Execute the backend callback, which are mainly the "process" & "postProcess" methods. - * Also note that "preProcess" was executed prior to this callback - */ -main.executeBackendCallback = function exeBackendCallback(backendServiceApi: BackendServiceApi, query: string, args: any, startTime: Date, totalItems: number, emitActionChangedCallback: (type: EmitterType) => void, httpCancelRequests$?: SubjectFacade) { - if (backendServiceApi) { - // emit an onFilterChanged event when it's not called by a clear filter - if (args && !args.clearFilterTriggered && !args.clearSortTriggered) { - emitActionChangedCallback(EmitterType.remote); + /** Execute the Backend Processes Callback, that could come from an Observable or a Promise callback */ + executeBackendProcessesCallback(startTime: Date, processResult: any, backendApi: BackendServiceApi, totalItems: number): any { + const endTime = new Date(); + + // define what our internal Post Process callback, only available for GraphQL Service for now + // it will basically refresh the Dataset & Pagination removing the need for the user to always create his own PostProcess every time + if (processResult && backendApi && backendApi.internalPostProcess) { + backendApi.internalPostProcess(processResult); } - // the processes can be Observables (like HttpClient) or Promises - const process = backendServiceApi.process(query); - if (process instanceof Promise && process.then) { - process.then((processResult: any) => main.executeBackendProcessesCallback(startTime, processResult, backendServiceApi, totalItems)) - .catch((error: any) => main.onBackendError(error, backendServiceApi)); - } else if (isObservable(process)) { - // this will abort any previous HTTP requests, that were previously hooked in the takeUntil, before sending a new request - if (isObservable(httpCancelRequests$)) { - httpCancelRequests$!.next(); + // send the response process to the postProcess callback + if (backendApi.postProcess !== undefined) { + if (processResult instanceof Object) { + processResult.metrics = { + startTime, + endTime, + executionTime: endTime.valueOf() - startTime.valueOf(), + itemCount: totalItems, + totalItemCount: totalItems, + }; } + backendApi.postProcess(processResult); + } + } - (process as unknown as ObservableFacade) - // the following takeUntil, will potentially be used later to cancel any pending http request (takeUntil another rx, that would be httpCancelRequests$, completes) - // but make sure the observable is actually defined with the iif condition check before piping it to the takeUntil - .pipe(takeUntil(iif(() => isObservable(httpCancelRequests$), httpCancelRequests$, EMPTY))) - .subscribe( - (processResult: any) => main.executeBackendProcessesCallback(startTime, processResult, backendServiceApi, totalItems), - (error: any) => main.onBackendError(error, backendServiceApi) - ); + /** On a backend service api error, we will run the "onError" if there is 1 provided or just throw back the error when nothing is provided */ + onBackendError(e: any, backendApi: BackendServiceApi) { + if (backendApi && backendApi.onError) { + backendApi.onError(e); + } else { + throw e; } } -}; -/** Refresh the dataset through the Backend Service */ -main.refreshBackendDataset = function refreshBackend(gridOptions: GridOption) { - let query = ''; - const backendApi = gridOptions && gridOptions.backendServiceApi; + /** + * Execute the backend callback, which are mainly the "process" & "postProcess" methods. + * Also note that "preProcess" was executed prior to this callback + */ + executeBackendCallback(backendServiceApi: BackendServiceApi, query: string, args: any, startTime: Date, totalItems: number, emitActionChangedCallback?: (type: EmitterType) => void, httpCancelRequests$?: SubjectFacade) { + if (backendServiceApi) { + // emit an onFilterChanged event when it's not called by a clear filter + if (args && !args.clearFilterTriggered && !args.clearSortTriggered && emitActionChangedCallback) { + emitActionChangedCallback(EmitterType.remote); + } - if (!backendApi || !backendApi.service || !backendApi.process) { - throw new Error(`BackendServiceApi requires at least a "process" function and a "service" defined`); + // the processes can be Observables (like HttpClient) or Promises + const process = backendServiceApi.process(query); + if (process instanceof Promise && process.then) { + process.then((processResult: any) => this.executeBackendProcessesCallback(startTime, processResult, backendServiceApi, totalItems)) + .catch((error: any) => this.onBackendError(error, backendServiceApi)); + } else if (this.rxjs?.isObservable(process)) { + const rxjs = this.rxjs as RxJsFacade; + + // this will abort any previous HTTP requests, that were previously hooked in the takeUntil, before sending a new request + if (rxjs.isObservable(httpCancelRequests$)) { + httpCancelRequests$!.next(); + } + + (process as unknown as ObservableFacade) + // the following takeUntil, will potentially be used later to cancel any pending http request (takeUntil another rx, that would be httpCancelRequests$, completes) + // but make sure the observable is actually defined with the iif condition check before piping it to the takeUntil + .pipe(rxjs.takeUntil(rxjs.iif(() => rxjs.isObservable(httpCancelRequests$), httpCancelRequests$, rxjs.EMPTY))) + .subscribe( + (processResult: any) => this.executeBackendProcessesCallback(startTime, processResult, backendServiceApi, totalItems), + (error: any) => this.onBackendError(error, backendServiceApi) + ); + } + } } - if (backendApi.service) { - query = backendApi.service.buildQuery(); - } + /** Refresh the dataset through the Backend Service */ + refreshBackendDataset(gridOptions: GridOption) { + let query = ''; + const backendApi = gridOptions?.backendServiceApi; - if (query && query !== '') { - // keep start time & end timestamps & return it after process execution - const startTime = new Date(); + if (!backendApi || !backendApi.service || !backendApi.process) { + throw new Error(`BackendServiceApi requires at least a "process" function and a "service" defined`); + } - if (backendApi.preProcess) { - backendApi.preProcess(); + if (backendApi.service) { + query = backendApi.service.buildQuery(); } - const totalItems = gridOptions && gridOptions.pagination && gridOptions.pagination.totalItems; - main.executeBackendCallback(backendApi, query, null, startTime, totalItems); - } -}; + if (query && query !== '') { + // keep start time & end timestamps & return it after process execution + const startTime = new Date(); -// export all methods & the main so that it works in all modules but also in Jest unit test -// export every method as independent constant so that it still works whenever this is used in other modules -export const executeBackendProcessesCallback = main.executeBackendProcessesCallback; -export const onBackendError = main.onBackendError; -export const executeBackendCallback = main.executeBackendCallback; -export const refreshBackendDataset = main.refreshBackendDataset; + if (backendApi.preProcess) { + backendApi.preProcess(); + } -export default main; + const totalItems = gridOptions?.pagination?.totalItems ?? 0; + this.executeBackendCallback(backendApi, query, null, startTime, totalItems); + } + } +} diff --git a/packages/common/src/services/filter.service.ts b/packages/common/src/services/filter.service.ts index cd0b13b23..6ea1ab74b 100644 --- a/packages/common/src/services/filter.service.ts +++ b/packages/common/src/services/filter.service.ts @@ -29,11 +29,11 @@ import { SlickGrid, SlickNamespace, } from './../interfaces/index'; -import { executeBackendCallback, refreshBackendDataset } from './backend-utilities'; +import { BackendUtilityService } from './backend-utilities'; import { debounce, deepCopy, getDescendantProperty, mapOperatorByFieldType } from './utilities'; import { PubSubService } from '../services/pubSub.service'; import { SharedService } from './shared.service'; -import { isObservable, SubjectFacade } from './rxjsFacade'; +import { RxJsFacade, SubjectFacade } from './rxjsFacade'; // using external non-typed js libraries declare const Slick: SlickNamespace; @@ -62,11 +62,14 @@ export class FilterService { protected _grid!: SlickGrid; protected _onSearchChange: SlickEvent | null; protected _tmpPreFilteredData?: number[]; - protected httpCancelRequests$: SubjectFacade = new SubjectFacade(); // this will be used to cancel any pending http request + protected httpCancelRequests$?: SubjectFacade; // this will be used to cancel any pending http request - constructor(protected filterFactory: FilterFactory, protected pubSubService: PubSubService, protected sharedService: SharedService) { + constructor(protected filterFactory: FilterFactory, protected pubSubService: PubSubService, protected sharedService: SharedService, protected backendUtilities?: BackendUtilityService, protected rxjs?: RxJsFacade) { this._onSearchChange = new Slick.Event(); this._eventHandler = new Slick.EventHandler(); + if (this.rxjs) { + this.httpCancelRequests$ = this.rxjs.createSubject(); + } } /** Getter of the SlickGrid Event Handler */ @@ -99,6 +102,10 @@ export class FilterService { return (this._grid?.getData && this._grid.getData()) as SlickDataView; } + addRxJsResource(rxjs: RxJsFacade) { + this.rxjs = rxjs; + } + /** * Initialize the Service * @param grid @@ -116,7 +123,7 @@ export class FilterService { if (this._eventHandler && this._eventHandler.unsubscribeAll) { this._eventHandler.unsubscribeAll(); } - if (isObservable(this.httpCancelRequests$)) { + if (this.httpCancelRequests$ && this.rxjs?.isObservable(this.httpCancelRequests$)) { this.httpCancelRequests$.next(); // this cancels any pending http requests } this.disposeColumnFilters(); @@ -276,7 +283,7 @@ export class FilterService { const queryResponse = backendApi.service.processOnFilterChanged(undefined, callbackArgs as FilterChangedArgs); const query = queryResponse as string; const totalItems = this._gridOptions && this._gridOptions.pagination && this._gridOptions.pagination.totalItems || 0; - executeBackendCallback(backendApi, query, callbackArgs, new Date(), totalItems, this.emitFilterChanged.bind(this)); + this.backendUtilities?.executeBackendCallback(backendApi, query, callbackArgs, new Date(), totalItems, this.emitFilterChanged.bind(this)); } // emit an event when filters are all cleared @@ -651,12 +658,12 @@ export class FilterService { debounce(() => { const query = backendApi.service.processOnFilterChanged(event, args); const totalItems = this._gridOptions && this._gridOptions.pagination && this._gridOptions.pagination.totalItems || 0; - executeBackendCallback(backendApi, query, args, startTime, totalItems, this.emitFilterChanged.bind(this), this.httpCancelRequests$); + this.backendUtilities?.executeBackendCallback(backendApi, query, args, startTime, totalItems, this.emitFilterChanged.bind(this), this.httpCancelRequests$); }, debounceTypingDelay)(); } else { const query = backendApi.service.processOnFilterChanged(event, args); const totalItems = this._gridOptions && this._gridOptions.pagination && this._gridOptions.pagination.totalItems || 0; - executeBackendCallback(backendApi, query, args, startTime, totalItems, this.emitFilterChanged.bind(this), this.httpCancelRequests$); + this.backendUtilities?.executeBackendCallback(backendApi, query, args, startTime, totalItems, this.emitFilterChanged.bind(this), this.httpCancelRequests$); } } } @@ -808,7 +815,7 @@ export class FilterService { if (backendApiService && backendApiService.updateFilters) { backendApiService.updateFilters(filters, true); if (triggerBackendQuery) { - refreshBackendDataset(this._gridOptions); + this.backendUtilities?.refreshBackendDataset(this._gridOptions); } } } @@ -851,7 +858,7 @@ export class FilterService { if (backendApiService && backendApiService.updateFilters) { backendApiService.updateFilters(this._columnFilters, true); if (triggerBackendQuery) { - refreshBackendDataset(this._gridOptions); + this.backendUtilities?.refreshBackendDataset(this._gridOptions); } } } else { diff --git a/packages/common/src/services/pagination.service.ts b/packages/common/src/services/pagination.service.ts index e871329a1..5c1a93bbd 100644 --- a/packages/common/src/services/pagination.service.ts +++ b/packages/common/src/services/pagination.service.ts @@ -12,10 +12,10 @@ import { SlickNamespace, Subscription } from '../interfaces/index'; -import { executeBackendProcessesCallback, onBackendError } from './backend-utilities'; +import { BackendUtilityService } from './backend-utilities'; import { SharedService } from './shared.service'; import { PubSubService } from './pubSub.service'; -import { isObservable, ObservableFacade } from './rxjsFacade'; +import { ObservableFacade, RxJsFacade } from './rxjsFacade'; // using external non-typed js libraries declare const Slick: SlickNamespace; @@ -39,7 +39,7 @@ export class PaginationService { grid!: SlickGrid; /** Constructor */ - constructor(private pubSubService: PubSubService, private sharedService: SharedService) { } + constructor(private pubSubService: PubSubService, private sharedService: SharedService, private backendUtilities?: BackendUtilityService, private rxjs?: RxJsFacade) { } /** Getter of SlickGrid DataView object */ get dataView(): SlickDataView | undefined { @@ -88,6 +88,10 @@ export class PaginationService { } } + addRxJsResource(rxjs: RxJsFacade) { + this.rxjs = rxjs; + } + init(grid: SlickGrid, paginationOptions: Pagination, backendServiceApi?: BackendServiceApi) { this._availablePageSizes = paginationOptions.pageSizes; this.grid = grid; @@ -327,11 +331,11 @@ export class PaginationService { const startTime = new Date(); // run any pre-process, if defined, for example a spinner - if (this._backendServiceApi && this._backendServiceApi.preProcess) { + if (this._backendServiceApi?.preProcess) { this._backendServiceApi.preProcess(); } - if (this._backendServiceApi && this._backendServiceApi.process) { + if (this._backendServiceApi?.process) { const query = this._backendServiceApi.service.processOnPaginationChanged(event, { newPage: pageNumber, pageSize: itemsPerPage }); // the processes can be Promises @@ -339,21 +343,21 @@ export class PaginationService { if (process instanceof Promise) { process .then((processResult: any) => { - executeBackendProcessesCallback(startTime, processResult, this._backendServiceApi, this._totalItems); + this.backendUtilities?.executeBackendProcessesCallback(startTime, processResult, this._backendServiceApi as BackendServiceApi, this._totalItems); resolve(this.getFullPagination()); }) .catch((error) => { - onBackendError(error, this._backendServiceApi); + this.backendUtilities?.onBackendError(error, this._backendServiceApi as BackendServiceApi); reject(process); }); - } else if (isObservable(process)) { + } else if (this.rxjs?.isObservable(process)) { this._subscriptions.push( (process as ObservableFacade).subscribe( (processResult: any) => { - resolve(executeBackendProcessesCallback(startTime, processResult, this._backendServiceApi, this._totalItems)); + resolve(this.backendUtilities?.executeBackendProcessesCallback(startTime, processResult, this._backendServiceApi as BackendServiceApi, this._totalItems)); }, (error: any) => { - onBackendError(error, this._backendServiceApi); + this.backendUtilities?.onBackendError(error, this._backendServiceApi as BackendServiceApi); reject(process); } ) diff --git a/packages/common/src/services/rxjsFacade.ts b/packages/common/src/services/rxjsFacade.ts index 26f2dd6b3..1b9eb53a5 100644 --- a/packages/common/src/services/rxjsFacade.ts +++ b/packages/common/src/services/rxjsFacade.ts @@ -1,89 +1,97 @@ /* eslint-disable @typescript-eslint/no-unused-vars */ // -// ------------------------------------------------ -// THIS IS JUST AN EMPTY SHELL, A FACADE TO RxJs -// We only provide interfaces to be re-implemented via an external package with the real RxJS -// The reason we do this is to avoid adding RxJS as a dependency to the common package -// while also making it extensible to be used from outside. -// When user whishes to use RxJS Observables, he'll simply have to use the external -// RxJS Wrapper package (which will depend on the real RxJS package) -// ------------------------------------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- +// THIS IS JUST AN EMPTY SHELL, A FACADE TO RxJs without making it a dependency +// ----------------------------------------------------------------------------- -export const EMPTY: any = null; +/** + * A simple empty shell, a Facade to RxJS to make Slickgrid-Universal usable with RxJS without installing RxJS. + * Its sole purpose is to provide access, as an Interface, to use RxJS with Slickgrid-Universal without adding it as a dependency. + * The developer who will want to use RxJS will simply have to use the extra `rxjs-observable` package to get going. + * + * That external `rsjs-observable` package simply implements this RxJsFacade + * and is just a very simple and basic RxJS Wrapper package (which will depend on the real RxJS package) + */ +export class RxJsFacade { + /** + * The same Observable instance returned by any call to without a scheduler. + * This returns the EMPTY constant from RxJS + */ + get EMPTY(): ObservableFacade { + throw new Error('RxJs Facade "EMPTY" constant must be implemented'); + } -export function iif(condition: () => boolean, trueResult?: any, falseResult?: any): ObservableFacade { - throw new Error('RxJs Service "iif" method must be implemented'); -} + /** Simple method to create an Observable */ + createObservable(): ObservableFacade { + throw new Error('RxJs Facade "createObservable" method must be implemented'); + } -/** Tests to see if the object is an RxJS Observable */ -export function isObservable(obj: any): boolean { - throw new Error('RxJs Service "isObservable" method must be implemented'); -} + /** Simple method to create a Subject */ + createSubject(): SubjectFacade { + throw new Error('RxJs Facade "createSubject" method must be implemented'); + } -export function takeUntil(notifier: ObservableFacade): any { - throw new Error('RxJs Service "takeUntil" method must be implemented'); + /** Decides at subscription time which Observable will actually be subscribed. */ + iif(condition: () => boolean, trueResult?: any, falseResult?: any): ObservableFacade { + throw new Error('RxJs Facade "iif" method must be implemented'); + } + + /** Tests to see if the object is an RxJS Observable */ + isObservable(obj: any): boolean { + return false; + } + + /** Emits the values emitted by the source Observable until a `notifier` Observable emits a value. */ + takeUntil(notifier: ObservableFacade): any { + throw new Error('RxJs Facade "takeUntil" method must be implemented'); + } } /** * A Subject is a special type of Observable that allows values to be * multicasted to many Observers. Subjects are like EventEmitters. */ -export class SubjectFacade { +export abstract class SubjectFacade { next(value?: T): void { throw new Error('RxJs Subject "next" method must be implemented'); } - error(err: any): void { - throw new Error('RxJs Subject "error" method must be implemented'); - } - complete(): void { - throw new Error('RxJs Subject "complete" method must be implemented'); - } + unsubscribe(): void { throw new Error('RxJs Subject "unsubscribe" method must be implemented'); } - - /** Creates a new Observable with this Subject as the source. */ - asObservable(): ObservableFacade { - throw new Error('RxJs Subject "asObservable" method must be implemented'); - } } -export class ObservableFacade { +/** A representation of any set of values over any amount of time. This is the most basic building block of RxJS. */ +export abstract class ObservableFacade { /** Observable constructor, you can provide a subscribe function that is called when the Observable is initially subscribed to. */ constructor(subscribe?: (this: ObservableFacade, subscriber: any) => any) { - throw new Error('RxJS Observable "constructor" method must be implemented'); + throw new Error('RxJS Observable Facade "constructor" method must be implemented'); } /** Subscribe to the Observable */ subscribe(next?: (value: T) => void, error?: (error: any) => void, complete?: () => void): SubscriptionFacade { - throw new Error('RxJS Observable "subscribe" method must be implemented'); + throw new Error('RxJS Observable Facade "subscribe" method must be implemented'); } /** Pipe an operator function to the Observable */ pipe(fns?: any): any { - throw new Error('RxJS Observable "pipe" method must be implemented'); + throw new Error('RxJS Observable Facade "pipe" method must be implemented'); } } -export class SubscriptionFacade { +/** + * A Subject is a special type of Observable that allows values to be + * multicasted to many Observers. Subjects are like EventEmitters. + */ +export abstract class SubscriptionFacade { /** A function describing how to perform the disposal of resources when the `unsubscribe` method is called. */ constructor(unsubscribe?: () => void) { - throw new Error('RxJS Subscription "constructor" method must be implemented'); + throw new Error('RxJS Subscription Facade "constructor" method must be implemented'); } /** Disposes the resources held by the subscription. */ unsubscribe(): void { - throw new Error('RxJS Subscription "unsubscribe" method must be implemented'); - } - - /** Adds a tear down to be called during the unsubscribe() of this Subscription. */ - add(teardown: any): SubscriptionFacade { - throw new Error('RxJS Subscription "add" method must be implemented'); - } - - /** Removes a Subscription from the internal list of subscriptions that will unsubscribe during the unsubscribe process of this Subscription. */ - remove(subscription: SubscriptionFacade): void { - throw new Error('RxJS Subscription "remove" method must be implemented'); + throw new Error('RxJS Subscription Facade "unsubscribe" method must be implemented'); } } diff --git a/packages/common/src/services/sort.service.ts b/packages/common/src/services/sort.service.ts index 0629faa55..aace3be5f 100644 --- a/packages/common/src/services/sort.service.ts +++ b/packages/common/src/services/sort.service.ts @@ -20,12 +20,12 @@ import { SortDirectionNumber, SortDirectionString, } from '../enums/index'; -import { executeBackendCallback, refreshBackendDataset } from './backend-utilities'; +import { BackendUtilityService } from './backend-utilities'; import { getDescendantProperty, convertHierarchicalViewToParentChildArray } from './utilities'; import { sortByFieldType } from '../sortComparers/sortUtilities'; import { PubSubService } from './pubSub.service'; import { SharedService } from './shared.service'; -import { isObservable, SubjectFacade } from './rxjsFacade'; +import { RxJsFacade, SubjectFacade } from './rxjsFacade'; // using external non-typed js libraries declare const Slick: SlickNamespace; @@ -36,10 +36,13 @@ export class SortService { private _dataView!: SlickDataView; private _grid!: SlickGrid; private _isBackendGrid = false; - private httpCancelRequests$: SubjectFacade = new SubjectFacade(); // this will be used to cancel any pending http request + private httpCancelRequests$?: SubjectFacade; // this will be used to cancel any pending http request - constructor(private sharedService: SharedService, private pubSubService: PubSubService) { + constructor(private sharedService: SharedService, private pubSubService: PubSubService, private backendUtilities?: BackendUtilityService, private rxjs?: RxJsFacade) { this._eventHandler = new Slick.EventHandler(); + if (this.rxjs) { + this.httpCancelRequests$ = this.rxjs.createSubject(); + } } /** Getter of the SlickGrid Event Handler */ @@ -57,6 +60,10 @@ export class SortService { return (this._grid && this._grid.getColumns) ? this._grid.getColumns() : []; } + addRxJsResource(rxjs: RxJsFacade) { + this.rxjs = rxjs; + } + /** * Bind a backend sort (single/multi) hook to the grid * @param grid SlickGrid Grid object @@ -310,7 +317,7 @@ export class SortService { if (this._eventHandler && this._eventHandler.unsubscribeAll) { this._eventHandler.unsubscribeAll(); } - if (isObservable(this.httpCancelRequests$)) { + if (this.httpCancelRequests$ && this.rxjs?.isObservable(this.httpCancelRequests$)) { this.httpCancelRequests$.next(); // this cancels any pending http requests } } @@ -363,7 +370,7 @@ export class SortService { // query backend const query = backendApi.service.processOnSortChanged(event, args); const totalItems = gridOptions && gridOptions.pagination && gridOptions.pagination.totalItems || 0; - executeBackendCallback(backendApi, query, args, startTime, totalItems, this.emitSortChanged.bind(this), this.httpCancelRequests$); + this.backendUtilities?.executeBackendCallback(backendApi, query, args, startTime, totalItems, this.emitSortChanged.bind(this), this.httpCancelRequests$); } /** When a Sort Changes on a Local grid (JSON dataset) */ @@ -512,7 +519,7 @@ export class SortService { if (backendApiService && backendApiService.updateSorters) { backendApiService.updateSorters(undefined, sorters); if (triggerBackendQuery) { - refreshBackendDataset(this._gridOptions); + this.backendUtilities?.refreshBackendDataset(this._gridOptions); } } } else { diff --git a/packages/excel-export/src/excelExport.service.ts b/packages/excel-export/src/excelExport.service.ts index 782f7154e..3b13ac16a 100644 --- a/packages/excel-export/src/excelExport.service.ts +++ b/packages/excel-export/src/excelExport.service.ts @@ -59,7 +59,7 @@ export class ExcelExportService implements ExternalResource, BaseExcelExportServ private _workbook!: ExcelWorkbook; /** ExcelExportService class name which is use to find service instance in the external registered services */ - className = 'ExcelExportService'; + readonly className = 'ExcelExportService'; constructor() { } diff --git a/packages/rxjs-observable/README.md b/packages/rxjs-observable/README.md index e9b12d94b..ca0b8a0fc 100644 --- a/packages/rxjs-observable/README.md +++ b/packages/rxjs-observable/README.md @@ -1,8 +1,8 @@ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) [![TypeScript](https://img.shields.io/badge/%3C%2F%3E-TypeScript-%230074c1.svg)](http://www.typescriptlang.org/) [![lerna](https://img.shields.io/badge/maintained%20with-lerna-cc00ff.svg)](https://lerna.js.org/) -[![npm](https://img.shields.io/npm/v/@slickgrid-universal/observable-rxjs.svg?color=forest)](https://www.npmjs.com/package/@slickgrid-universal/observable-rxjs) -[![npm](https://img.shields.io/npm/dy/@slickgrid-universal/observable-rxjs?color=forest)](https://www.npmjs.com/package/@slickgrid-universal/observable-rxjs) +[![npm](https://img.shields.io/npm/v/@slickgrid-universal/rxjs-observable.svg?color=forest)](https://www.npmjs.com/package/@slickgrid-universal/rxjs-observable) +[![npm](https://img.shields.io/npm/dy/@slickgrid-universal/rxjs-observable?color=forest)](https://www.npmjs.com/package/@slickgrid-universal/rxjs-observable) [![Actions Status](https://github.com/ghiscoding/slickgrid-universal/workflows/CI%20Build/badge.svg)](https://github.com/ghiscoding/slickgrid-universal/actions) [![Cypress.io](https://img.shields.io/badge/tested%20with-Cypress-04C38E.svg)](https://www.cypress.io/) @@ -10,12 +10,14 @@ [![codecov](https://codecov.io/gh/ghiscoding/slickgrid-universal/branch/master/graph/badge.svg)](https://codecov.io/gh/ghiscoding/slickgrid-universal) ## RxJS Observable Wrapper -#### @slickgrid-universal/observable-rxjs +#### @slickgrid-universal/rxjs-observable -An RxJS Observable Wrapper for any implementation which uses RxJS +An RxJS Observable Service Wrapper to make it possible to use RxJS with Slickgrid-Universal (with a Backend Service like OData/GraphQL). By default any Backend Service will be using Promises unless we use this RxJS Observable package. + +This package is simply a bridge to it possible to use RxJS without adding RxJS to the `@slickgrid-universal/common` list of dependencies, so RxJS is a dependency of this package without being a dependency in the common package. ### External Dependencies -No external dependency +- [RxJS](https://github.com/ReactiveX/RxJS) ### Installation Follow the instruction provided in the main [README](https://github.com/ghiscoding/slickgrid-universal#installation) diff --git a/packages/rxjs-observable/package.json b/packages/rxjs-observable/package.json index f375a7f3b..a4acd1b4b 100644 --- a/packages/rxjs-observable/package.json +++ b/packages/rxjs-observable/package.json @@ -1,5 +1,5 @@ { - "name": "@slickgrid-universal/observable-rxjs", + "name": "@slickgrid-universal/rxjs-observable", "version": "0.11.2", "description": "RxJS Observable Wrapper", "main": "dist/commonjs/index.js", diff --git a/packages/rxjs-observable/src/index.spec.ts b/packages/rxjs-observable/src/index.spec.ts index 52c6e322b..7617e9210 100644 --- a/packages/rxjs-observable/src/index.spec.ts +++ b/packages/rxjs-observable/src/index.spec.ts @@ -6,7 +6,6 @@ describe('Testing library entry point', () => { }); it('should have all exported object defined', () => { - expect(typeof entry.ObservableWrapper).toBe('function'); - expect(typeof entry.SubscriptionWrapper).toBe('function'); + expect(typeof entry.RxJsResource).toBe('function'); }); }); diff --git a/packages/rxjs-observable/src/index.ts b/packages/rxjs-observable/src/index.ts index 80a8437b9..20ec82fde 100644 --- a/packages/rxjs-observable/src/index.ts +++ b/packages/rxjs-observable/src/index.ts @@ -1,2 +1 @@ -export * from './observableWrapper'; -export * from './subscriptionWrapper'; +export * from './rxjs.resource'; diff --git a/packages/rxjs-observable/src/observableWrapper.ts b/packages/rxjs-observable/src/observableWrapper.ts deleted file mode 100644 index 6bbef5337..000000000 --- a/packages/rxjs-observable/src/observableWrapper.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { ObservableFacade } from '@slickgrid-universal/common'; -import { Observable, Subscription } from 'rxjs'; - -// export const EMPTYUniversal = EMPTY; - -export class ObservableWrapper implements ObservableFacade { - private observer: Observable; - - constructor() { - this.observer = new Observable(); - } - - pipe(fns?: any): Observable { - return this.observer.pipe(fns); - } - - // subscribe(observer?: any): any { } - subscribe(next?: (value: T) => void, error?: (error: any) => void, complete?: () => void): Subscription { - return this.observer.subscribe(next, error, complete); - } -} \ No newline at end of file diff --git a/packages/rxjs-observable/src/rxjs.resource.ts b/packages/rxjs-observable/src/rxjs.resource.ts new file mode 100644 index 000000000..29cb9b4a4 --- /dev/null +++ b/packages/rxjs-observable/src/rxjs.resource.ts @@ -0,0 +1,44 @@ +import { RxJsFacade } from '@slickgrid-universal/common'; +import { iif, isObservable, Observable, Subject, EMPTY } from 'rxjs'; +import { takeUntil } from 'rxjs/operators'; + +export class RxJsResource implements RxJsFacade { + readonly className = 'RxJsResource'; + + /** + * The same Observable instance returned by any call to without a scheduler. + * This returns the EMPTY constant from RxJS + */ + get EMPTY(): Observable { + return EMPTY; + } + + /** Simple method to create an Observable */ + createObservable(): Observable { + return new Observable(); + } + + /** Simple method to create an Subject */ + createSubject(): Subject { + return new Subject(); + } + + /** he same Observable instance returned by any call to without a scheduler. It is preferrable to use this over empty() */ + empty(): Observable { + return EMPTY; + } + + iif(condition: () => boolean, trueResult?: any, falseResult?: any): Observable { + return iif(condition, trueResult, falseResult); + } + + /** Tests to see if the object is an RxJS Observable */ + isObservable(obj: any): boolean { + return isObservable(obj); + } + + /** Emits the values emitted by the source Observable until a `notifier` Observable emits a value. */ + takeUntil(notifier: Observable): any { + return takeUntil(notifier); + } +} \ No newline at end of file diff --git a/packages/rxjs-observable/src/subscriptionWrapper.ts b/packages/rxjs-observable/src/subscriptionWrapper.ts deleted file mode 100644 index d63dba073..000000000 --- a/packages/rxjs-observable/src/subscriptionWrapper.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { SubscriptionFacade } from '@slickgrid-universal/common'; -import { Subscription, TeardownLogic } from 'rxjs'; - -export class SubscriptionWrapper implements SubscriptionFacade { - private subscriber; - - constructor() { - this.subscriber = new Subscription(); - } - - /** Disposes the resources held by the subscription */ - unsubscribe(): void { - this.subscriber.unsubscribe(); - } - - /** Adds a tear down to be called during the unsubscribe() of this Subscription. */ - add(teardown: TeardownLogic): Subscription { - return this.subscriber.add(teardown); - } - - /** Removes a Subscription from the internal list of subscriptions. */ - remove(subscription: Subscription): void { - return this.subscriber.remove(subscription); - } -} \ No newline at end of file diff --git a/packages/text-export/src/textExport.service.ts b/packages/text-export/src/textExport.service.ts index 3fa290e3c..4984f7c08 100644 --- a/packages/text-export/src/textExport.service.ts +++ b/packages/text-export/src/textExport.service.ts @@ -57,7 +57,7 @@ export class TextExportService implements ExternalResource, BaseTextExportServic private _translaterService: TranslaterService | undefined; /** ExcelExportService class name which is use to find service instance in the external registered services */ - className = 'TextExportService'; + readonly className = 'TextExportService'; constructor() { } diff --git a/packages/vanilla-bundle/src/components/slick-vanilla-grid-bundle.ts b/packages/vanilla-bundle/src/components/slick-vanilla-grid-bundle.ts index bb77e1483..2ccdbd529 100644 --- a/packages/vanilla-bundle/src/components/slick-vanilla-grid-bundle.ts +++ b/packages/vanilla-bundle/src/components/slick-vanilla-grid-bundle.ts @@ -9,6 +9,7 @@ import 'slickgrid/plugins/slick.resizer'; import { AutoCompleteEditor, BackendServiceApi, + BackendServiceOption, Column, ColumnEditor, DataViewOption, @@ -17,23 +18,19 @@ import { EventNamingStyle, GlobalGridOptions, GridOption, + GridStateType, Metrics, MetricTexts, + Pagination, + SelectEditor, + ServicePagination, SlickDataView, SlickEventHandler, SlickGrid, SlickGroupItemMetadataProvider, SlickNamespace, - TreeDataOption, - executeBackendProcessesCallback, - GridStateType, - BackendServiceOption, - onBackendError, - refreshBackendDataset, - Pagination, - SelectEditor, - ServicePagination, Subscription, + TreeDataOption, // extensions AutoTooltipExtension, @@ -52,6 +49,7 @@ import { RowSelectionExtension, // services + BackendUtilityService, CollectionService, ExtensionService, FilterFactory, @@ -60,8 +58,10 @@ import { GridService, GridStateService, GroupingAndColspanService, + ObservableFacade, PaginationService, RowMoveManagerExtension, + RxJsFacade, SharedService, SortService, SlickgridConfig, @@ -125,6 +125,7 @@ export class SlickVanillaGridBundle { extensionUtility!: ExtensionUtility; // services + backendUtilityService!: BackendUtilityService; collectionService!: CollectionService; extensionService!: ExtensionService; filterService!: FilterService; @@ -133,6 +134,7 @@ export class SlickVanillaGridBundle { gridStateService!: GridStateService; groupingService!: GroupingAndColspanService; paginationService!: PaginationService; + rxjs?: RxJsFacade; sharedService!: SharedService; sortService!: SortService; translaterService: TranslaterService | undefined; @@ -266,6 +268,7 @@ export class SlickVanillaGridBundle { dataset?: any[], hierarchicalDataset?: any[], services?: { + backendUtilityService?: BackendUtilityService, collectionService?: CollectionService, eventPubSubService?: EventPubSubService, extensionService?: ExtensionService, @@ -277,6 +280,7 @@ export class SlickVanillaGridBundle { groupingAndColspanService?: GroupingAndColspanService, paginationService?: PaginationService, resizerService?: ResizerService, + rxjs?: RxJsFacade, sharedService?: SharedService, sortService?: SortService, treeDataService?: TreeDataService, @@ -313,17 +317,18 @@ export class SlickVanillaGridBundle { this._eventPubSubService = services?.eventPubSubService ?? new EventPubSubService(gridParentContainerElm); this._eventPubSubService.eventNamingStyle = this._gridOptions?.eventNamingStyle ?? EventNamingStyle.camelCase; - this.gridEventService = services?.gridEventService ?? new GridEventService(); const slickgridConfig = new SlickgridConfig(); + this.backendUtilityService = services?.backendUtilityService ?? new BackendUtilityService(); + this.gridEventService = services?.gridEventService ?? new GridEventService(); this.sharedService = services?.sharedService ?? new SharedService(); this.collectionService = services?.collectionService ?? new CollectionService(this.translaterService); this.extensionUtility = services?.extensionUtility ?? new ExtensionUtility(this.sharedService, this.translaterService); const filterFactory = new FilterFactory(slickgridConfig, this.translaterService, this.collectionService); - this.filterService = services?.filterService ?? new FilterService(filterFactory, this._eventPubSubService, this.sharedService); + this.filterService = services?.filterService ?? new FilterService(filterFactory, this._eventPubSubService, this.sharedService, this.backendUtilityService); this.resizerService = services?.resizerService ?? new ResizerService(this._eventPubSubService); - this.sortService = services?.sortService ?? new SortService(this.sharedService, this._eventPubSubService); + this.sortService = services?.sortService ?? new SortService(this.sharedService, this._eventPubSubService, this.backendUtilityService); this.treeDataService = services?.treeDataService ?? new TreeDataService(this.sharedService); - this.paginationService = services?.paginationService ?? new PaginationService(this._eventPubSubService, this.sharedService); + this.paginationService = services?.paginationService ?? new PaginationService(this._eventPubSubService, this.sharedService, this.backendUtilityService); // extensions const autoTooltipExtension = new AutoTooltipExtension(this.sharedService); @@ -333,7 +338,7 @@ export class SlickVanillaGridBundle { const columnPickerExtension = new ColumnPickerExtension(this.extensionUtility, this.sharedService); const checkboxExtension = new CheckboxSelectorExtension(this.sharedService); const draggableGroupingExtension = new DraggableGroupingExtension(this.extensionUtility, this.sharedService); - const gridMenuExtension = new GridMenuExtension(this.extensionUtility, this.filterService, this.sharedService, this.sortService, this.translaterService); + const gridMenuExtension = new GridMenuExtension(this.extensionUtility, this.filterService, this.sharedService, this.sortService, this.backendUtilityService, this.translaterService); const groupItemMetaProviderExtension = new GroupItemMetaProviderExtension(this.sharedService); const headerButtonExtension = new HeaderButtonExtension(this.extensionUtility, this.sharedService); const headerMenuExtension = new HeaderMenuExtension(this.extensionUtility, this.filterService, this._eventPubSubService, this.sharedService, this.sortService, this.translaterService); @@ -667,6 +672,14 @@ export class SlickVanillaGridBundle { if (typeof resource.init === 'function') { resource.init(this.slickGrid, this.universalContainerService); } + if (resource?.className === 'RxJsResource') { + this.rxjs = resource as RxJsFacade; + this.backendUtilityService.addRxJsResource(this.rxjs); + this.filterService.addRxJsResource(this.rxjs); + this.sortService.addRxJsResource(this.rxjs); + this.paginationService.addRxJsResource(this.rxjs); + this.universalContainerService.registerInstance('RxJsResource', this.rxjs); + } } } @@ -934,6 +947,7 @@ export class SlickVanillaGridBundle { // wrap this inside a setTimeout to avoid timing issue since the gridOptions needs to be ready before running this onInit setTimeout(() => { + const backendUtilityService = this.backendUtilityService as BackendUtilityService; // keep start time & end timestamps & return it after process execution const startTime = new Date(); @@ -943,11 +957,18 @@ export class SlickVanillaGridBundle { } // the processes can be a Promise (like Http) - if (process instanceof Promise && process.then) { - const totalItems = this.gridOptions && this.gridOptions.pagination && this.gridOptions.pagination.totalItems || 0; + const totalItems = this.gridOptions?.pagination?.totalItems ?? 0; + if (process instanceof Promise) { process - .then((processResult: any) => executeBackendProcessesCallback(startTime, processResult, backendApi, totalItems)) - .catch((error) => onBackendError(error, backendApi)); + .then((processResult: any) => backendUtilityService.executeBackendProcessesCallback(startTime, processResult, backendApi, totalItems)) + .catch((error) => backendUtilityService.onBackendError(error, backendApi)); + } else if (process && this.rxjs?.isObservable(process)) { + this.subscriptions.push( + (process as ObservableFacade).subscribe( + (processResult: any) => backendUtilityService.executeBackendProcessesCallback(startTime, processResult, backendApi, totalItems), + (error: any) => backendUtilityService.onBackendError(error, backendApi) + ) + ); } }); } @@ -1167,7 +1188,7 @@ export class SlickVanillaGridBundle { this._eventPubSubService.subscribe('onPaginationVisibilityChanged', (visibility: { visible: boolean }) => { this.showPagination = visibility?.visible ?? false; if (this.gridOptions?.backendServiceApi) { - refreshBackendDataset(); + this.backendUtilityService?.refreshBackendDataset(this.gridOptions); } }) ); @@ -1184,10 +1205,10 @@ export class SlickVanillaGridBundle { /** Load the Editor Collection asynchronously and replace the "collection" property when Promise resolves */ private loadEditorCollectionAsync(column: Column) { - const collectionAsync = (column?.editor as ColumnEditor).collectionAsync as Promise; + const collectionAsync = (column?.editor as ColumnEditor).collectionAsync; (column?.editor as ColumnEditor).disabled = true; // disable the Editor DOM element, we'll re-enable it after receiving the collection with "updateEditorCollection()" - if (collectionAsync) { + if (collectionAsync instanceof Promise) { // wait for the "collectionAsync", once resolved we will save it into the "collection" // the collectionAsync can be of 3 types HttpClient, HttpFetch or a Promise collectionAsync.then((response: any | any[]) => { @@ -1205,6 +1226,10 @@ export class SlickVanillaGridBundle { this.updateEditorCollection(column, response['content']); // from http-client } }); + } else if (this.rxjs?.isObservable(collectionAsync)) { + this.subscriptions.push( + (collectionAsync as ObservableFacade).subscribe((resolvedCollection) => this.updateEditorCollection(column, resolvedCollection)) + ); } } diff --git a/yarn.lock b/yarn.lock index b9e4736b4..c2c63b368 100644 --- a/yarn.lock +++ b/yarn.lock @@ -327,10 +327,10 @@ resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.2.tgz#8f03a22a04de437254e8ce8cc84ba39689288752" integrity sha512-HyYEUDeIj5rRQU2Hk5HTB2uHsbRQpF70nvMhVzi+VJR0X+xNEhjPui4/kBf3VeH/wqD28PT4sVOm8qqLjBrSZg== -"@eslint/eslintrc@^0.3.0": - version "0.3.0" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.3.0.tgz#d736d6963d7003b6514e6324bec9c602ac340318" - integrity sha512-1JTKgrOKAHVivSvOYw+sJOunkBjUOvjqWk1DPja7ZFhIS2mX/4EgTT8M7eTK9jrKhL/FvXXEbQwIs3pg1xp3dg== +"@eslint/eslintrc@^0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.0.tgz#99cc0a0584d72f1df38b900fb062ba995f395547" + integrity sha512-2ZPCc+uNbjV5ERJr+aKSPRwZgKd2z11x0EgLvb1PURmUrn9QNRXFqje0Ldq454PfAVyaJYyrDvvIKSFP4NnBog== dependencies: ajv "^6.12.4" debug "^4.1.1" @@ -339,7 +339,6 @@ ignore "^4.0.6" import-fresh "^3.2.1" js-yaml "^3.13.1" - lodash "^4.17.20" minimatch "^3.0.4" strip-json-comments "^3.1.1" @@ -1360,11 +1359,11 @@ fastq "^1.6.0" "@octokit/auth-token@^2.4.0": - version "2.4.4" - resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-2.4.4.tgz#ee31c69b01d0378c12fd3ffe406030f3d94d3b56" - integrity sha512-LNfGu3Ro9uFAYh10MUZVaT7X2CnNm2C8IDQmabx+3DygYIQjs9FwzFAHN/0t6mu5HEPhxcb1XOuxdpY82vCg2Q== + version "2.4.5" + resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-2.4.5.tgz#568ccfb8cb46f36441fac094ce34f7a875b197f3" + integrity sha512-BpGYsPgJt05M7/L/5FoE1PiAbdxXFZkX/3kDYcsvd1v6UhlnE5e96dTDr0ezX/EFwciQxf3cNV0loipsURU+WA== dependencies: - "@octokit/types" "^6.0.0" + "@octokit/types" "^6.0.3" "@octokit/endpoint@^6.0.1": version "6.0.10" @@ -1380,6 +1379,11 @@ resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-2.2.0.tgz#123e0438a0bc718ccdac3b5a2e69b3dd00daa85b" integrity sha512-274lNUDonw10kT8wHg8fCcUc1ZjZHbWv0/TbAwb0ojhBQqZYc1cQ/4yqTVTtPMDeZ//g7xVEYe/s3vURkRghPg== +"@octokit/openapi-types@^5.3.0": + version "5.3.1" + resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-5.3.1.tgz#a49d119a1b9e47b7a9f5133ab14be2d8afaa183d" + integrity sha512-TvVk2QuIA0lQZcIMd6xbdGaGDVeNYIOa3l1ZVagAIk5K3t/WMYbcg4BISNDhzdVhm/TgQB26frAgd/GV81aHJA== + "@octokit/plugin-enterprise-rest@^6.0.1": version "6.0.1" resolved "https://registry.yarnpkg.com/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz#e07896739618dab8da7d4077c658003775f95437" @@ -1393,9 +1397,9 @@ "@octokit/types" "^2.0.1" "@octokit/plugin-request-log@^1.0.0": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@octokit/plugin-request-log/-/plugin-request-log-1.0.2.tgz#394d59ec734cd2f122431fbaf05099861ece3c44" - integrity sha512-oTJSNAmBqyDR41uSMunLQKMX0jmEXbwD1fpz8FG27lScV3RhtGfBa1/BBLym+PxcC16IBlF7KH9vP1BUYxA+Eg== + version "1.0.3" + resolved "https://registry.yarnpkg.com/@octokit/plugin-request-log/-/plugin-request-log-1.0.3.tgz#70a62be213e1edc04bb8897ee48c311482f9700d" + integrity sha512-4RFU4li238jMJAzLgAwkBAw+4Loile5haQMQr+uhFq27BmyJXcXSKvoQKqh0agsZEiUlW6iSv3FAgvmGkur7OQ== "@octokit/plugin-rest-endpoint-methods@2.4.0": version "2.4.0" @@ -1424,13 +1428,13 @@ once "^1.4.0" "@octokit/request@^5.2.0": - version "5.4.12" - resolved "https://registry.yarnpkg.com/@octokit/request/-/request-5.4.12.tgz#b04826fa934670c56b135a81447be2c1723a2ffc" - integrity sha512-MvWYdxengUWTGFpfpefBBpVmmEYfkwMoxonIB3sUGp5rhdgwjXL1ejo6JbgzG/QD9B/NYt/9cJX1pxXeSIUCkg== + version "5.4.14" + resolved "https://registry.yarnpkg.com/@octokit/request/-/request-5.4.14.tgz#ec5f96f78333bb2af390afa5ff66f114b063bc96" + integrity sha512-VkmtacOIQp9daSnBmDI92xNIeLuSRDOIuplp/CJomkvzt7M18NXgG044Cx/LFKLgjKt9T2tZR6AtJayba9GTSA== dependencies: "@octokit/endpoint" "^6.0.1" "@octokit/request-error" "^2.0.0" - "@octokit/types" "^6.0.3" + "@octokit/types" "^6.7.1" deprecation "^2.0.0" is-plain-object "^5.0.0" node-fetch "^2.6.1" @@ -1474,6 +1478,13 @@ "@octokit/openapi-types" "^2.2.0" "@types/node" ">= 8" +"@octokit/types@^6.7.1": + version "6.12.0" + resolved "https://registry.yarnpkg.com/@octokit/types/-/types-6.12.0.tgz#8376fd60edfd5d1eebfeedb994c6bcb5b862c7a1" + integrity sha512-KwOf16soD7aDEEi/PgNeJlHzjZPfrmmNy+7WezSdrpnqZ7YImBJcNnX9+5RUHt1MnA4h8oISRHTqaZDGsX9DRQ== + dependencies: + "@octokit/openapi-types" "^5.3.0" + "@samverschueren/stream-to-observable@^0.3.0": version "0.3.1" resolved "https://registry.yarnpkg.com/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.1.tgz#a21117b19ee9be70c379ec1877537ef2e1c63301" @@ -1633,7 +1644,7 @@ dependencies: "@types/istanbul-lib-report" "*" -"@types/jest@26.x", "@types/jest@^26.0.20": +"@types/jest@^26.0.20": version "26.0.20" resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.20.tgz#cd2f2702ecf69e86b586e1f5223a60e454056307" integrity sha512-9zi2Y+5USJRxd0FsahERhBwlcvFh6D2GLQnY2FH2BzK8J9s9omvNHIbvABwIluXa0fD8XVKMLTO0aOEuUfACAA== @@ -1814,13 +1825,13 @@ dependencies: "@types/yargs-parser" "*" -"@typescript-eslint/eslint-plugin@^4.15.2": - version "4.15.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.15.2.tgz#981b26b4076c62a5a55873fbef3fe98f83360c61" - integrity sha512-uiQQeu9tWl3f1+oK0yoAv9lt/KXO24iafxgQTkIYO/kitruILGx3uH+QtIAHqxFV+yIsdnJH+alel9KuE3J15Q== +"@typescript-eslint/eslint-plugin@^4.16.1": + version "4.16.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.16.1.tgz#2caf6a79dd19c3853b8d39769a27fccb24e4e651" + integrity sha512-SK777klBdlkUZpZLC1mPvyOWk9yAFCWmug13eAjVQ4/Q1LATE/NbcQL1xDHkptQkZOLnPmLUA1Y54m8dqYwnoQ== dependencies: - "@typescript-eslint/experimental-utils" "4.15.2" - "@typescript-eslint/scope-manager" "4.15.2" + "@typescript-eslint/experimental-utils" "4.16.1" + "@typescript-eslint/scope-manager" "4.16.1" debug "^4.1.1" functional-red-black-tree "^1.0.1" lodash "^4.17.15" @@ -1828,60 +1839,60 @@ semver "^7.3.2" tsutils "^3.17.1" -"@typescript-eslint/experimental-utils@4.15.2": - version "4.15.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.15.2.tgz#5efd12355bd5b535e1831282e6cf465b9a71cf36" - integrity sha512-Fxoshw8+R5X3/Vmqwsjc8nRO/7iTysRtDqx6rlfLZ7HbT8TZhPeQqbPjTyk2RheH3L8afumecTQnUc9EeXxohQ== +"@typescript-eslint/experimental-utils@4.16.1": + version "4.16.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.16.1.tgz#da7a396dc7d0e01922acf102b76efff17320b328" + integrity sha512-0Hm3LSlMYFK17jO4iY3un1Ve9x1zLNn4EM50Lia+0EV99NdbK+cn0er7HC7IvBA23mBg3P+8dUkMXy4leL33UQ== dependencies: "@types/json-schema" "^7.0.3" - "@typescript-eslint/scope-manager" "4.15.2" - "@typescript-eslint/types" "4.15.2" - "@typescript-eslint/typescript-estree" "4.15.2" + "@typescript-eslint/scope-manager" "4.16.1" + "@typescript-eslint/types" "4.16.1" + "@typescript-eslint/typescript-estree" "4.16.1" eslint-scope "^5.0.0" eslint-utils "^2.0.0" -"@typescript-eslint/parser@^4.15.2": - version "4.15.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.15.2.tgz#c804474321ef76a3955aec03664808f0d6e7872e" - integrity sha512-SHeF8xbsC6z2FKXsaTb1tBCf0QZsjJ94H6Bo51Y1aVEZ4XAefaw5ZAilMoDPlGghe+qtq7XdTiDlGfVTOmvA+Q== +"@typescript-eslint/parser@^4.16.1": + version "4.16.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.16.1.tgz#3bbd3234dd3c5b882b2bcd9899bc30e1e1586d2a" + integrity sha512-/c0LEZcDL5y8RyI1zLcmZMvJrsR6SM1uetskFkoh3dvqDKVXPsXI+wFB/CbVw7WkEyyTKobC1mUNp/5y6gRvXg== dependencies: - "@typescript-eslint/scope-manager" "4.15.2" - "@typescript-eslint/types" "4.15.2" - "@typescript-eslint/typescript-estree" "4.15.2" + "@typescript-eslint/scope-manager" "4.16.1" + "@typescript-eslint/types" "4.16.1" + "@typescript-eslint/typescript-estree" "4.16.1" debug "^4.1.1" -"@typescript-eslint/scope-manager@4.15.2": - version "4.15.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.15.2.tgz#5725bda656995960ae1d004bfd1cd70320f37f4f" - integrity sha512-Zm0tf/MSKuX6aeJmuXexgdVyxT9/oJJhaCkijv0DvJVT3ui4zY6XYd6iwIo/8GEZGy43cd7w1rFMiCLHbRzAPQ== +"@typescript-eslint/scope-manager@4.16.1": + version "4.16.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.16.1.tgz#244e2006bc60cfe46987e9987f4ff49c9e3f00d5" + integrity sha512-6IlZv9JaurqV0jkEg923cV49aAn8V6+1H1DRfhRcvZUrptQ+UtSKHb5kwTayzOYTJJ/RsYZdcvhOEKiBLyc0Cw== dependencies: - "@typescript-eslint/types" "4.15.2" - "@typescript-eslint/visitor-keys" "4.15.2" + "@typescript-eslint/types" "4.16.1" + "@typescript-eslint/visitor-keys" "4.16.1" -"@typescript-eslint/types@4.15.2": - version "4.15.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.15.2.tgz#04acf3a2dc8001a88985291744241e732ef22c60" - integrity sha512-r7lW7HFkAarfUylJ2tKndyO9njwSyoy6cpfDKWPX6/ctZA+QyaYscAHXVAfJqtnY6aaTwDYrOhp+ginlbc7HfQ== +"@typescript-eslint/types@4.16.1": + version "4.16.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.16.1.tgz#5ba2d3e38b1a67420d2487519e193163054d9c15" + integrity sha512-nnKqBwMgRlhzmJQF8tnFDZWfunXmJyuXj55xc8Kbfup4PbkzdoDXZvzN8//EiKR27J6vUSU8j4t37yUuYPiLqA== -"@typescript-eslint/typescript-estree@4.15.2": - version "4.15.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.15.2.tgz#c2f7a1e94f3428d229d5ecff3ead6581ee9b62fa" - integrity sha512-cGR8C2g5SPtHTQvAymEODeqx90pJHadWsgTtx6GbnTWKqsg7yp6Eaya9nFzUd4KrKhxdYTTFBiYeTPQaz/l8bw== +"@typescript-eslint/typescript-estree@4.16.1": + version "4.16.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.16.1.tgz#c2fc46b05a48fbf8bbe8b66a63f0a9ba04b356f1" + integrity sha512-m8I/DKHa8YbeHt31T+UGd/l8Kwr0XCTCZL3H4HMvvLCT7HU9V7yYdinTOv1gf/zfqNeDcCgaFH2BMsS8x6NvJg== dependencies: - "@typescript-eslint/types" "4.15.2" - "@typescript-eslint/visitor-keys" "4.15.2" + "@typescript-eslint/types" "4.16.1" + "@typescript-eslint/visitor-keys" "4.16.1" debug "^4.1.1" globby "^11.0.1" is-glob "^4.0.1" semver "^7.3.2" tsutils "^3.17.1" -"@typescript-eslint/visitor-keys@4.15.2": - version "4.15.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.15.2.tgz#3d1c7979ce75bf6acf9691109bd0d6b5706192b9" - integrity sha512-TME1VgSb7wTwgENN5KVj4Nqg25hP8DisXxNBojM4Nn31rYaNDIocNm5cmjOFfh42n7NVERxWrDFoETO/76ePyg== +"@typescript-eslint/visitor-keys@4.16.1": + version "4.16.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.16.1.tgz#d7571fb580749fae621520deeb134370bbfc7293" + integrity sha512-s/aIP1XcMkEqCNcPQtl60ogUYjSM8FU2mq1O7y5cFf3Xcob1z1iXWNB6cC43Op+NGRTFgGolri6s8z/efA9i1w== dependencies: - "@typescript-eslint/types" "4.15.2" + "@typescript-eslint/types" "4.16.1" eslint-visitor-keys "^2.0.0" "@ungap/promise-all-settled@1.1.2": @@ -2507,6 +2518,18 @@ aws4@^1.8.0: resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== +axios-observable@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/axios-observable/-/axios-observable-1.1.6.tgz#08cec29faae1a9e1a766fb5e2e9d07eae406e1d4" + integrity sha512-demLOWURdp9YDFV9zXY6m8TXuIpY0tHUKKt4nsMJ48tQy+5pjZc22PjgxZL7nGojsICzSKZDly6EI12VUTssdQ== + +axios@^0.21.1: + version "0.21.1" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.1.tgz#22563481962f4d6bde9a76d516ef0e5d3c09b2b8" + integrity sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA== + dependencies: + follow-redirects "^1.10.0" + babel-jest@^26.6.3: version "26.6.3" resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-26.6.3.tgz#d87d25cb0037577a0c89f82e5755c5d293c01056" @@ -2609,9 +2632,9 @@ bcrypt-pbkdf@^1.0.0: tweetnacl "^0.14.3" before-after-hook@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.1.0.tgz#b6c03487f44e24200dd30ca5e6a1979c5d2fb635" - integrity sha512-IWIbu7pMqyw3EAJHzzHbWa85b6oud/yfKYg5rqB5hNE8CeMi3nX+2C2sj0HswfblST86hpVEOAb9x34NZd6P7A== + version "2.2.0" + resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.0.tgz#09c40d92e936c64777aa385c4e9b904f8147eaf0" + integrity sha512-jH6rKQIfroBbhEXVmI7XmXe3ix5S/PgJqpzdDPnR8JGLHWNYLsYZ6tK5iWOF/Ra3oqEX0NobXGlzbiylIzVphQ== big.js@^5.2.2: version "5.2.2" @@ -3498,15 +3521,15 @@ conventional-commits-filter@^2.0.2, conventional-commits-filter@^2.0.7: modify-values "^1.0.0" conventional-commits-parser@^3.0.3: - version "3.2.0" - resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-3.2.0.tgz#9e261b139ca4b7b29bcebbc54460da36894004ca" - integrity sha512-XmJiXPxsF0JhAKyfA2Nn+rZwYKJ60nanlbSWwwkGwLQFbugsc0gv1rzc7VbbUWAzJfR1qR87/pNgv9NgmxtBMQ== + version "3.2.1" + resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-3.2.1.tgz#ba44f0b3b6588da2ee9fd8da508ebff50d116ce2" + integrity sha512-OG9kQtmMZBJD/32NEw5IhN5+HnBqVjy03eC+I71I0oQRFA5rOgA4OtPOYG7mz1GkCfCNxn3gKIX8EiHJYuf1cA== dependencies: JSONStream "^1.0.4" is-text-path "^1.0.1" lodash "^4.17.15" meow "^8.0.0" - split2 "^2.0.0" + split2 "^3.0.0" through2 "^4.0.0" trim-off-newlines "^1.0.0" @@ -3747,10 +3770,10 @@ cyclist@^1.0.1: resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= -cypress@^6.5.0: - version "6.5.0" - resolved "https://registry.yarnpkg.com/cypress/-/cypress-6.5.0.tgz#d853d7a8f915f894249a8788294bfba077278c17" - integrity sha512-ol/yTAqHrQQpYBjxLlRSvZf4DOb9AhaQNVlwdOZgJcBHZOOa52/p/6/p3PPcvzjWGOMG6Yq0z4G+jrbWyk/9Dg== +cypress@^6.6.0: + version "6.6.0" + resolved "https://registry.yarnpkg.com/cypress/-/cypress-6.6.0.tgz#659c64cdb06e51b6be18fdac39d8f192deb54fa0" + integrity sha512-+Xx3Zn653LJHUsCb9h1Keql2jlazbr1ROmbY6DFJMmXKLgXP4ez9cE403W93JNGRbZK0Tng3R/oP8mvd9XAPVg== dependencies: "@cypress/listr-verbose-renderer" "^0.4.1" "@cypress/request" "^2.88.5" @@ -3785,7 +3808,7 @@ cypress@^6.5.0: moment "^2.29.1" ospath "^1.2.2" pretty-bytes "^5.4.1" - ramda "~0.26.1" + ramda "~0.27.1" request-progress "^3.0.0" supports-color "^7.2.0" tmp "~0.2.1" @@ -4361,7 +4384,12 @@ env-paths@^2.2.0: resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.0.tgz#cdca557dc009152917d6166e2febe1f039685e43" integrity sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA== -envinfo@^7.3.1, envinfo@^7.7.3: +envinfo@^7.3.1: + version "7.7.4" + resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.7.4.tgz#c6311cdd38a0e86808c1c9343f667e4267c4a320" + integrity sha512-TQXTYFVVwwluWSFis6K2XKxgrD22jEv0FTuLCQI+OjH7rn93+iY0fSSFM5lrSxFY+H1+B0/cvvlamr3UsBivdQ== + +envinfo@^7.7.3: version "7.7.3" resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.7.3.tgz#4b2d8622e3e7366afb8091b23ed95569ea0208cc" integrity sha512-46+j5QxbPWza0PB1i15nZx0xQ4I/EfQxg9J8Had3b408SV63nEtor2e+oiY63amTo9KTuh2a3XLObNwduxYwwA== @@ -4553,13 +4581,13 @@ eslint-visitor-keys@^2.0.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8" integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== -eslint@^7.20.0: - version "7.20.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.20.0.tgz#db07c4ca4eda2e2316e7aa57ac7fc91ec550bdc7" - integrity sha512-qGi0CTcOGP2OtCQBgWZlQjcTuP0XkIpYFj25XtRTQSHC+umNnp7UMshr2G8SLsRFYDdAPFeHOsiteadmMH02Yw== +eslint@^7.21.0: + version "7.21.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.21.0.tgz#4ecd5b8c5b44f5dedc9b8a110b01bbfeb15d1c83" + integrity sha512-W2aJbXpMNofUp0ztQaF40fveSsJBjlSCSWpy//gzfTvwC+USs/nceBrKmlJOiM8r1bLwP2EuYkCqArn/6QTIgg== dependencies: "@babel/code-frame" "7.12.11" - "@eslint/eslintrc" "^0.3.0" + "@eslint/eslintrc" "^0.4.0" ajv "^6.10.0" chalk "^4.0.0" cross-spawn "^7.0.2" @@ -4572,7 +4600,7 @@ eslint@^7.20.0: espree "^7.3.1" esquery "^1.4.0" esutils "^2.0.2" - file-entry-cache "^6.0.0" + file-entry-cache "^6.0.1" functional-red-black-tree "^1.0.1" glob-parent "^5.0.0" globals "^12.1.0" @@ -4978,10 +5006,10 @@ figures@^2.0.0: dependencies: escape-string-regexp "^1.0.5" -file-entry-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.0.tgz#7921a89c391c6d93efec2169ac6bf300c527ea0a" - integrity sha512-fqoO76jZ3ZnYrXLDRxBR1YvOvc0k844kcOg40bgsPrE25LAb/PDqTY+ho64Xh2c8ZXgIKldchCFHczG2UVRcWA== +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== dependencies: flat-cache "^3.0.4" @@ -5102,6 +5130,11 @@ follow-redirects@^1.0.0: resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.1.tgz#5f69b813376cee4fd0474a3aba835df04ab763b7" integrity sha512-SSG5xmZh1mkPGyKzjZP8zLjltIfpW32Y5QpdNJyjcfGxK3qo3NDDkZOZSFiGn1A6SclQxY9GzEwAHQ3dmYRWpg== +follow-redirects@^1.10.0: + version "1.13.3" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.3.tgz#e5598ad50174c1bc4e872301e82ac2cd97f90267" + integrity sha512-DUgl6+HDzB0iEptNQEXLx/KhTmDb8tZUHSeLqpnjpknR70H0nC2t9N73BK6fN4hOvJ84pKlIQVQ4k5FFlBedKA== + for-in@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" @@ -5429,9 +5462,9 @@ git-up@^4.0.0: parse-url "^5.0.0" git-url-parse@^11.1.2: - version "11.4.3" - resolved "https://registry.yarnpkg.com/git-url-parse/-/git-url-parse-11.4.3.tgz#1610284edf1f14964180f5b3399ec68b692cfd87" - integrity sha512-LZTTk0nqJnKN48YRtOpR8H5SEfp1oM2tls90NuZmBxN95PnCvmuXGzqQ4QmVirBgKx2KPYfPGteX3/raWjKenQ== + version "11.4.4" + resolved "https://registry.yarnpkg.com/git-url-parse/-/git-url-parse-11.4.4.tgz#5d747debc2469c17bc385719f7d0427802d83d77" + integrity sha512-Y4o9o7vQngQDIU9IjyCmRJBin5iYjI5u9ZITnddRZpD7dcCFQj2sL2XuMNbLRE4b4B/4ENPsp2Q8P44fjAZ0Pw== dependencies: git-up "^4.0.0" @@ -7562,12 +7595,12 @@ lodash.uniq@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= -lodash@4.x, lodash@^4.0.0, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.2.1, lodash@~4.17.10: +lodash@4.x, lodash@^4.0.0, lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@~4.17.10: version "4.17.20" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== -lodash@^4.17.21: +lodash@^4.17.12, lodash@^4.17.21, lodash@^4.2.1: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -8020,10 +8053,10 @@ mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.4, mkdirp@^0.5.5: dependencies: minimist "^1.2.5" -mocha@^8.3.0: - version "8.3.0" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-8.3.0.tgz#a83a7432d382ae1ca29686062d7fdc2c36f63fe5" - integrity sha512-TQqyC89V1J/Vxx0DhJIXlq9gbbL9XFNdeLQ1+JsnZsVaSOV1z3tWfw0qZmQJGQRIfkvZcs7snQnZnOCKoldq1Q== +mocha@^8.3.1: + version "8.3.1" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-8.3.1.tgz#b9eda6da1eb8cb8d29860a9c2205de5b8a076560" + integrity sha512-5SBMxANWqOv5bw3Hx+HVgaWlcWcFEQDUdaUAr1AUU+qwtx6cowhn7gEDT/DwQP7uYxnvShdUOVLbTYAHOEGfDQ== dependencies: "@ungap/promise-all-settled" "1.1.2" ansi-colors "4.1.1" @@ -9468,10 +9501,10 @@ quick-lru@^4.0.1: resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== -ramda@~0.26.1: - version "0.26.1" - resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.26.1.tgz#8d41351eb8111c55353617fc3bbffad8e4d35d06" - integrity sha512-hLWjpy7EnsDBb0p+Z3B7rPi3GDeRG5ZtiI33kJhTt+ORCd38AbAIjB/9zRIUoeTbE/AVX5ZkU7m6bznsvrf8eQ== +ramda@~0.27.1: + version "0.27.1" + resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.27.1.tgz#66fc2df3ef873874ffc2da6aa8984658abacf5c9" + integrity sha512-PgIdVpn5y5Yns8vqb8FzBUEYn98V3xcPgawAkkgj0YJ0qDsnHCiNmZYfOGMgOvoB0eWFLpYbhxUR3mxfDIMvpw== randombytes@^2.1.0: version "2.1.0" @@ -9638,7 +9671,7 @@ read@1, read@~1.0.1: string_decoder "~1.1.1" util-deprecate "~1.0.1" -"readable-stream@2 || 3", readable-stream@3, readable-stream@^3.0.2, readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: +"readable-stream@2 || 3", readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== @@ -9984,14 +10017,14 @@ run-queue@^1.0.0, run-queue@^1.0.3: dependencies: aproba "^1.1.1" -rxjs@^6.3.3, rxjs@^6.4.0: +rxjs@^6.3.3: version "6.6.3" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.3.tgz#8ca84635c4daa900c0d3967a6ee7ac60271ee552" integrity sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ== dependencies: tslib "^1.9.0" -rxjs@^6.6.6: +rxjs@^6.4.0, rxjs@^6.6.6: version "6.6.6" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.6.tgz#14d8417aa5a07c5e633995b525e1e3c0dec03b70" integrity sha512-/oTwee4N4iWzAMAL9xdGKjkEHmIwupR3oXbQjCKywF1BeFohswF3vZdogbmEF6pZkOsXTzWkrZszrWpQTByYVg== @@ -10496,6 +10529,13 @@ split2@^2.0.0: dependencies: through2 "^2.0.2" +split2@^3.0.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/split2/-/split2-3.2.2.tgz#bf2cf2a37d838312c249c89206fd7a17dd12365f" + integrity sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg== + dependencies: + readable-stream "^3.0.0" + split@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" @@ -11161,12 +11201,11 @@ trim-off-newlines@^1.0.0: dependencies: glob "^7.1.2" -ts-jest@^26.5.2: - version "26.5.2" - resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-26.5.2.tgz#5281d6b44c2f94f71205728a389edc3d7995b0c4" - integrity sha512-bwyJ2zJieSugf7RB+o8fgkMeoMVMM2KPDE0UklRLuACxjwJsOrZNo6chrcScmK33YavPSwhARffy8dZx5LJdUQ== +ts-jest@^26.5.3: + version "26.5.3" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-26.5.3.tgz#a6ee00ba547be3b09877550df40a1465d0295554" + integrity sha512-nBiiFGNvtujdLryU7MiMQh1iPmnZ/QvOskBbD2kURiI1MwqvxlxNnaAB/z9TbslMqCsSbu5BXvSSQPc5tvHGeA== dependencies: - "@types/jest" "26.x" bs-logger "0.x" buffer-from "1.x" fast-json-stable-stringify "2.x" @@ -11304,10 +11343,10 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= -typescript@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.2.2.tgz#1450f020618f872db0ea17317d16d8da8ddb8c4c" - integrity sha512-tbb+NVrLfnsJy3M59lsDgrzWIflR4d4TIUjz+heUnHZwdF7YsrMTKoRERiIvI2lvBG95dfpLxB21WZhys1bgaQ== +typescript@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.2.3.tgz#39062d8019912d43726298f09493d598048c1ce3" + integrity sha512-qOcYwxaByStAWrBf4x0fibwZvMRG+r4cQoTjbPtUlrWjBHbmCAww1i448U0GJ+3cNNEtebDteo/cHOR3xJ4wEw== uglify-js@^3.1.4: version "3.12.4" From 83ae27c7af3473879e8ba47aac85eb9762bb0816 Mon Sep 17 00:00:00 2001 From: ghiscoding Date: Sat, 6 Mar 2021 19:08:33 -0500 Subject: [PATCH 03/21] chore(deps): update yarn lock file --- yarn.lock | 64 +++++++++++++++++-------------------------------------- 1 file changed, 20 insertions(+), 44 deletions(-) diff --git a/yarn.lock b/yarn.lock index de0d87109..46e55b987 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1402,11 +1402,6 @@ is-plain-object "^5.0.0" universal-user-agent "^6.0.0" -"@octokit/openapi-types@^5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-5.3.0.tgz#29e3faa119da90082dc653ea74c8bb345d197bf7" - integrity sha512-5q2qBz4iZ0xS/DEJ0ROusFbN4cVlbJE9GvOByen+mv7artuGXfVhONqcuRd7jYN2glTmCnzcZw+X6LrjRVqs0A== - "@octokit/openapi-types@^5.3.0": version "5.3.1" resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-5.3.1.tgz#a49d119a1b9e47b7a9f5133ab14be2d8afaa183d" @@ -1505,13 +1500,6 @@ dependencies: "@octokit/openapi-types" "^5.3.0" -"@octokit/types@^6.7.1": - version "6.12.0" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-6.12.0.tgz#8376fd60edfd5d1eebfeedb994c6bcb5b862c7a1" - integrity sha512-KwOf16soD7aDEEi/PgNeJlHzjZPfrmmNy+7WezSdrpnqZ7YImBJcNnX9+5RUHt1MnA4h8oISRHTqaZDGsX9DRQ== - dependencies: - "@octokit/openapi-types" "^5.3.0" - "@samverschueren/stream-to-observable@^0.3.0": version "0.3.1" resolved "https://registry.yarnpkg.com/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.1.tgz#a21117b19ee9be70c379ec1877537ef2e1c63301" @@ -4291,9 +4279,9 @@ ee-first@1.1.1: integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= electron-to-chromium@^1.3.649: - version "1.3.681" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.681.tgz#facd915ae46a020e8be566a2ecdc0b9444439be9" - integrity sha512-W6uYvSUTHuyX2DZklIESAqx57jfmGjUkd7Z3RWqLdj9Mmt39ylhBuvFXlskQnvBHj0MYXIeQI+mjiwVddZLSvA== + version "1.3.682" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.682.tgz#f4b5c8d4479df96b61e508a721d6c32c1262ef23" + integrity sha512-zok2y37qR00U14uM6qBz/3iIjWHom2eRfC2S1StA0RslP7x34jX+j4mxv80t8OEOHLJPVG54ZPeaFxEI7gPrwg== elegant-spinner@^1.0.1: version "1.0.1" @@ -5106,12 +5094,7 @@ flush-write-stream@^1.0.0: inherits "^2.0.3" readable-stream "^2.3.6" -follow-redirects@^1.0.0: - version "1.13.3" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.3.tgz#e5598ad50174c1bc4e872301e82ac2cd97f90267" - integrity sha512-DUgl6+HDzB0iEptNQEXLx/KhTmDb8tZUHSeLqpnjpknR70H0nC2t9N73BK6fN4hOvJ84pKlIQVQ4k5FFlBedKA== - -follow-redirects@^1.10.0: +follow-redirects@^1.0.0, follow-redirects@^1.10.0: version "1.13.3" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.3.tgz#e5598ad50174c1bc4e872301e82ac2cd97f90267" integrity sha512-DUgl6+HDzB0iEptNQEXLx/KhTmDb8tZUHSeLqpnjpknR70H0nC2t9N73BK6fN4hOvJ84pKlIQVQ4k5FFlBedKA== @@ -5455,9 +5438,9 @@ glob-parent@^3.1.0: path-dirname "^1.0.0" glob-parent@^5.0.0, glob-parent@^5.1.0, glob-parent@^5.1.1, glob-parent@~5.1.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" - integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" @@ -7051,9 +7034,9 @@ jquery-ui@>=1.8.0: integrity sha1-vLQEXI3QU5wTS8FIjN0+dop6nlE= jquery@>=1.8.0, jquery@^3.5.1: - version "3.5.1" - resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.5.1.tgz#d7b4d08e1bfdb86ad2f1a3d039ea17304717abb5" - integrity sha512-XwIBPqcMn57FxfT+Go5pzySnm4KWkT1Tv7gjrpT1srtf8Weynl6R273VJ5GjkRb51IzMp5nbaPjJXMWeju2MKg== + version "3.6.0" + resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.6.0.tgz#c72a09f15c1bdce142f49dbf1170bdf8adac2470" + integrity sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw== js-base64@^2.1.8: version "2.6.4" @@ -8178,9 +8161,9 @@ multimatch@^3.0.0: minimatch "^3.0.4" multiple-select-modified@^1.3.10: - version "1.3.10" - resolved "https://registry.yarnpkg.com/multiple-select-modified/-/multiple-select-modified-1.3.10.tgz#753e8c40f2e60f91b2cc36f0d874d532aeae53c5" - integrity sha512-CVbw9hIYa8VyBYpk9cv2+6jTKt/zFKILlWgy7x0C/jUlNrQk8+X7RW2XUMAYX2Oguyk287tD3YOhrLmc1jXqaw== + version "1.3.11" + resolved "https://registry.yarnpkg.com/multiple-select-modified/-/multiple-select-modified-1.3.11.tgz#dedd1eac1229cbc210f11f39fb1a003f6d064d56" + integrity sha512-ljf3XEQjePY5QN7g3sYAhhBOHmSr1JSQuqQEVrNbFr6KVQ+G4MVh4NFhAF3OC/KwnareShXG/b+44MsVq0lqSg== dependencies: jquery "^3.5.1" @@ -10025,14 +10008,7 @@ run-queue@^1.0.0, run-queue@^1.0.3: dependencies: aproba "^1.1.1" -rxjs@^6.3.3: - version "6.6.3" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.3.tgz#8ca84635c4daa900c0d3967a6ee7ac60271ee552" - integrity sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ== - dependencies: - tslib "^1.9.0" - -rxjs@^6.4.0, rxjs@^6.6.6: +rxjs@^6.3.3, rxjs@^6.4.0, rxjs@^6.6.6: version "6.6.6" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.6.tgz#14d8417aa5a07c5e633995b525e1e3c0dec03b70" integrity sha512-/oTwee4N4iWzAMAL9xdGKjkEHmIwupR3oXbQjCKywF1BeFohswF3vZdogbmEF6pZkOsXTzWkrZszrWpQTByYVg== @@ -11592,9 +11568,9 @@ uuid@^8.3.0, uuid@^8.3.2: integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== v8-compile-cache@^2.0.3, v8-compile-cache@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz#9471efa3ef9128d2f7c6a7ca39c4dd6b5055b132" - integrity sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q== + version "2.3.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" + integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== v8-to-istanbul@^7.0.0: version "7.1.0" @@ -12047,9 +12023,9 @@ ws@^6.2.1: async-limiter "~1.0.0" ws@^7.2.3: - version "7.4.3" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.3.tgz#1f9643de34a543b8edb124bdcbc457ae55a6e5cd" - integrity sha512-hr6vCR76GsossIRsr8OLR9acVVm1jyfEWvhbNjtgPOrfvAlKzvyeg/P6r8RuDjRyrcQoPQT7K0DGEPc7Ae6jzA== + version "7.4.4" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.4.tgz#383bc9742cb202292c9077ceab6f6047b17f2d59" + integrity sha512-Qm8k8ojNQIMx7S+Zp8u/uHOx7Qazv3Yv4q68MiWWWOJhiwG5W3x7iqmRtJo8xxrciZUY4vRxUTJCKuRnF28ZZw== xdg-basedir@^4.0.0: version "4.0.0" From 276fc601b5bb535f0c2a2e98a7c2afaefff5f29e Mon Sep 17 00:00:00 2001 From: ghiscoding Date: Mon, 8 Mar 2021 23:08:32 -0500 Subject: [PATCH 04/21] refactor: turn backend-utilities into a service & fix all unit tests --- .../webpack-demo-vanilla-bundle/package.json | 4 +- .../src/examples/example09.ts | 2 +- .../src/examples/example15.ts | 98 +++++++++---------- .../__tests__/gridMenuExtension.spec.ts | 9 +- .../src/extensions/gridMenuExtension.ts | 2 +- packages/common/src/index.ts | 2 +- .../__tests__/backend-utilities.spec.ts | 29 +++--- .../services/__tests__/filter.service.spec.ts | 22 +++-- .../__tests__/pagination.service.spec.ts | 35 +++---- .../services/__tests__/sort.service.spec.ts | 16 +-- ...utilities.ts => backendUtility.service.ts} | 2 +- .../common/src/services/filter.service.ts | 6 +- packages/common/src/services/index.ts | 2 +- .../common/src/services/pagination.service.ts | 2 +- .../common/src/services/shared.service.ts | 4 +- packages/common/src/services/sort.service.ts | 2 +- .../__tests__/slick-vanilla-grid.spec.ts | 28 ++++-- yarn.lock | 14 +-- 18 files changed, 132 insertions(+), 147 deletions(-) rename packages/common/src/services/{backend-utilities.ts => backendUtility.service.ts} (99%) diff --git a/examples/webpack-demo-vanilla-bundle/package.json b/examples/webpack-demo-vanilla-bundle/package.json index 63073635b..f4ef2928f 100644 --- a/examples/webpack-demo-vanilla-bundle/package.json +++ b/examples/webpack-demo-vanilla-bundle/package.json @@ -37,8 +37,6 @@ "@types/moment": "^2.13.0", "@types/node": "^14.14.31", "@types/webpack": "^4.41.26", - "axios": "^0.21.1", - "axios-observable": "^1.1.6", "clean-webpack-plugin": "^3.0.0", "copy-webpack-plugin": "^8.0.0", "css-loader": "^5.1.1", @@ -58,4 +56,4 @@ "webpack-cli": "^4.5.0", "webpack-dev-server": "^3.11.2" } -} \ No newline at end of file +} diff --git a/examples/webpack-demo-vanilla-bundle/src/examples/example09.ts b/examples/webpack-demo-vanilla-bundle/src/examples/example09.ts index 8158df7e3..81a5aca26 100644 --- a/examples/webpack-demo-vanilla-bundle/src/examples/example09.ts +++ b/examples/webpack-demo-vanilla-bundle/src/examples/example09.ts @@ -142,7 +142,7 @@ export class Example09 { * This function is only here to mock a WebAPI call (since we are using a JSON file for the demo) * in your case the getCustomer() should be a WebAPI function returning a Promise */ - getCustomerDataApiMock(query) { + getCustomerDataApiMock(query): Promise { // the mock is returning a Promise, just like a WebAPI typically does return new Promise((resolve) => { const queryParams = query.toLowerCase().split('&'); diff --git a/examples/webpack-demo-vanilla-bundle/src/examples/example15.ts b/examples/webpack-demo-vanilla-bundle/src/examples/example15.ts index eb494158d..38069ae61 100644 --- a/examples/webpack-demo-vanilla-bundle/src/examples/example15.ts +++ b/examples/webpack-demo-vanilla-bundle/src/examples/example15.ts @@ -2,8 +2,7 @@ import { BindingEventService, Column, FieldType, Filters, GridOption, GridStateC import { GridOdataService, OdataServiceApi, OdataOption } from '@slickgrid-universal/odata'; import { RxJsResource } from '@slickgrid-universal/rxjs-observable'; import { Slicker, SlickVanillaGridBundle } from '@slickgrid-universal/vanilla-bundle'; -import Axios from 'axios-observable'; -import { from } from 'rxjs'; +import { Observable } from 'rxjs'; import { ExampleGridOptions } from './example-grid-options'; @@ -137,19 +136,19 @@ export class Example15 { this.odataQuery = data['query']; } - getCustomerApiCall(query) { + getCustomerApiCall(query): Observable { // in your case, you will call your WebAPI function (wich needs to return an Observable) // for the demo purpose, we will call a mock WebAPI function - return from(this.getCustomerDataApiMock(query)); // turn the Promise into an Observable for testing purpose + return this.getCustomerDataApiMock(query); } /** * This function is only here to mock a WebAPI call (since we are using a JSON file for the demo) * in your case the getCustomer() should be a WebAPI function returning a Promise */ - getCustomerDataApiMock(query): Promise { + getCustomerDataApiMock(query): Observable { // the mock is returning a Promise, just like a WebAPI typically does - return new Promise((resolve) => { + return new Observable((observer) => { const queryParams = query.toLowerCase().split('&'); let top: number; let skip = 0; @@ -205,64 +204,59 @@ export class Example15 { ? 'DESC' : ''; - let url; + let data; switch (sort) { case 'ASC': - url = 'assets/data/customers_100_ASC.json'; + data = require('./data/customers_100_ASC.json'); break; case 'DESC': - url = 'assets/data/customers_100_DESC.json'; + data = require('./data/customers_100_DESC.json'); break; default: - url = 'assets/data/customers_100.json'; + data = require('./data/customers_100.json'); break; } - // Make a request for a user with a given ID - Axios.get(url) - .subscribe(response => { - // Read the result field from the JSON response. - const data = response.data; - const firstRow = skip; - let filteredData = data; - if (columnFilters) { - for (const columnId in columnFilters) { - if (columnFilters.hasOwnProperty(columnId)) { - filteredData = filteredData.filter(column => { - const filterType = columnFilters[columnId].type; - const searchTerm = columnFilters[columnId].term; - let colId = columnId; - if (columnId && columnId.indexOf(' ') !== -1) { - const splitIds = columnId.split(' '); - colId = splitIds[splitIds.length - 1]; - } - const filterTerm = column[colId]; - if (filterTerm) { - switch (filterType) { - case 'equal': return filterTerm.toLowerCase() === searchTerm; - case 'ends': return filterTerm.toLowerCase().endsWith(searchTerm); - case 'starts': return filterTerm.toLowerCase().startsWith(searchTerm); - case 'substring': return filterTerm.toLowerCase().includes(searchTerm); - } - } - }); + // Read the result field from the JSON response. + const firstRow = skip; + let filteredData = data; + if (columnFilters) { + for (const columnId in columnFilters) { + if (columnFilters.hasOwnProperty(columnId)) { + filteredData = filteredData.filter(column => { + const filterType = columnFilters[columnId].type; + const searchTerm = columnFilters[columnId].term; + let colId = columnId; + if (columnId && columnId.indexOf(' ') !== -1) { + const splitIds = columnId.split(' '); + colId = splitIds[splitIds.length - 1]; } - } - countTotalItems = filteredData.length; + const filterTerm = column[colId]; + if (filterTerm) { + switch (filterType) { + case 'equal': return filterTerm.toLowerCase() === searchTerm; + case 'ends': return filterTerm.toLowerCase().endsWith(searchTerm); + case 'starts': return filterTerm.toLowerCase().startsWith(searchTerm); + case 'substring': return filterTerm.toLowerCase().includes(searchTerm); + } + } + }); } - const updatedData = filteredData.slice(firstRow, firstRow + top); - - setTimeout(() => { - let countPropName = 'totalRecordCount'; - if (this.isCountEnabled) { - countPropName = (this.odataVersion === 4) ? '@odata.count' : 'odata.count'; - } - const backendResult = { items: updatedData, [countPropName]: countTotalItems, query }; - // console.log('Backend Result', backendResult); - resolve(backendResult); - }, 150); - }); + } + countTotalItems = filteredData.length; + } + const updatedData = filteredData.slice(firstRow, firstRow + top); + setTimeout(() => { + let countPropName = 'totalRecordCount'; + if (this.isCountEnabled) { + countPropName = (this.odataVersion === 4) ? '@odata.count' : 'odata.count'; + } + const backendResult = { items: updatedData, [countPropName]: countTotalItems, query }; + // console.log('Backend Result', backendResult); + observer.next(backendResult); + observer.complete(); + }, 150); }); } diff --git a/packages/common/src/extensions/__tests__/gridMenuExtension.spec.ts b/packages/common/src/extensions/__tests__/gridMenuExtension.spec.ts index 65ef9cadc..49376fda6 100644 --- a/packages/common/src/extensions/__tests__/gridMenuExtension.spec.ts +++ b/packages/common/src/extensions/__tests__/gridMenuExtension.spec.ts @@ -3,7 +3,7 @@ import { Column, SlickDataView, GridOption, SlickGrid, SlickNamespace, GridMenu, import { GridMenuExtension } from '../gridMenuExtension'; import { ExtensionUtility } from '../extensionUtility'; import { SharedService } from '../../services/shared.service'; -import { ExcelExportService, TextExportService, FilterService, SortService } from '../../services'; +import { ExcelExportService, TextExportService, FilterService, SortService, BackendUtilityService } from '../../services'; import { TranslateServiceStub } from '../../../../../test/translateServiceStub'; declare const Slick: SlickNamespace; @@ -76,6 +76,7 @@ describe('gridMenuExtension', () => { const columnsMock: Column[] = [{ id: 'field1', field: 'field1', width: 100, nameKey: 'TITLE' }, { id: 'field2', field: 'field2', width: 75 }]; let divElement: HTMLDivElement; + let backendUtilityService: BackendUtilityService; let extensionUtility: ExtensionUtility; let translateService: TranslateServiceStub; let extension: GridMenuExtension; @@ -122,10 +123,11 @@ describe('gridMenuExtension', () => { div.innerHTML = template; document.body.appendChild(div); + backendUtilityService = new BackendUtilityService(); sharedService = new SharedService(); translateService = new TranslateServiceStub(); extensionUtility = new ExtensionUtility(sharedService, translateService); - extension = new GridMenuExtension(extensionUtility, filterServiceStub, sharedService, sortServiceStub, translateService); + extension = new GridMenuExtension(extensionUtility, filterServiceStub, sharedService, sortServiceStub, backendUtilityService, translateService); translateService.use('fr'); }); @@ -809,7 +811,8 @@ describe('gridMenuExtension', () => { describe('without Translate Service', () => { beforeEach(() => { translateService = undefined as any; - extension = new GridMenuExtension({} as ExtensionUtility, filterServiceStub, { gridOptions: { enableTranslate: true } } as SharedService, {} as SortService, translateService); + backendUtilityService = new BackendUtilityService(); + extension = new GridMenuExtension({} as ExtensionUtility, filterServiceStub, { gridOptions: { enableTranslate: true } } as SharedService, {} as SortService, backendUtilityService, translateService); }); it('should throw an error if "enableTranslate" is set but the I18N Service is null', () => { diff --git a/packages/common/src/extensions/gridMenuExtension.ts b/packages/common/src/extensions/gridMenuExtension.ts index f3b86a983..a267e5374 100644 --- a/packages/common/src/extensions/gridMenuExtension.ts +++ b/packages/common/src/extensions/gridMenuExtension.ts @@ -19,7 +19,7 @@ import { FilterService } from '../services/filter.service'; import { SortService } from '../services/sort.service'; import { SharedService } from '../services/shared.service'; import { TranslaterService } from '../services/translater.service'; -import { BackendUtilityService } from '../services/backend-utilities'; +import { BackendUtilityService } from '../services/backendUtility.service'; import { getTranslationPrefix } from '../services/utilities'; // using external js libraries diff --git a/packages/common/src/index.ts b/packages/common/src/index.ts index 20d014e63..364c78334 100644 --- a/packages/common/src/index.ts +++ b/packages/common/src/index.ts @@ -1,6 +1,6 @@ import 'multiple-select-modified'; -import * as BackendUtilities from './services/backend-utilities'; +import * as BackendUtilities from './services/backendUtility.service'; import * as Observers from './services/observers'; import * as ServiceUtilities from './services/utilities'; import * as SortUtilities from './sortComparers/sortUtilities'; diff --git a/packages/common/src/services/__tests__/backend-utilities.spec.ts b/packages/common/src/services/__tests__/backend-utilities.spec.ts index 7aecfd011..247121469 100644 --- a/packages/common/src/services/__tests__/backend-utilities.spec.ts +++ b/packages/common/src/services/__tests__/backend-utilities.spec.ts @@ -1,6 +1,5 @@ import { BackendServiceApi, GridOption } from '../../interfaces/index'; -import main, { executeBackendProcessesCallback, onBackendError, refreshBackendDataset } from '../../services/backend-utilities'; -// import { GraphqlService } from '../../services/graphql.service'; +import { BackendUtilityService } from '../backendUtility.service'; jest.mock('flatpickr', () => { }); @@ -11,8 +10,9 @@ const graphqlServiceMock = { updateSorters: jest.fn(), } as unknown; -describe('backend-utilities', () => { +describe('Backend Utility Service', () => { let gridOptionMock: GridOption; + let service: BackendUtilityService; beforeEach(() => { gridOptionMock = { @@ -30,6 +30,7 @@ describe('backend-utilities', () => { totalItems: 0 } } as GridOption; + service = new BackendUtilityService(); }); describe('executeBackendProcessesCallback method', () => { @@ -37,7 +38,7 @@ describe('backend-utilities', () => { const now = new Date(); gridOptionMock.backendServiceApi!.internalPostProcess = jest.fn(); const spy = jest.spyOn(gridOptionMock.backendServiceApi as BackendServiceApi, 'internalPostProcess'); - executeBackendProcessesCallback(now, { data: {} }, gridOptionMock.backendServiceApi as BackendServiceApi, 0); + service.executeBackendProcessesCallback(now, { data: {} }, gridOptionMock.backendServiceApi as BackendServiceApi, 0); expect(spy).toHaveBeenCalled(); }); @@ -59,7 +60,7 @@ describe('backend-utilities', () => { gridOptionMock.pagination = { totalItems: 1, pageSizes: [10, 25], pageSize: 10 }; const spy = jest.spyOn(gridOptionMock.backendServiceApi as BackendServiceApi, 'postProcess'); - executeBackendProcessesCallback(now, mockResult, gridOptionMock.backendServiceApi as BackendServiceApi, 1); + service.executeBackendProcessesCallback(now, mockResult, gridOptionMock.backendServiceApi as BackendServiceApi, 1); expect(spy).toHaveBeenCalledWith(expectaction); }); @@ -70,29 +71,24 @@ describe('backend-utilities', () => { gridOptionMock.backendServiceApi!.onError = jest.fn(); const spy = jest.spyOn(gridOptionMock.backendServiceApi as BackendServiceApi, 'onError'); - onBackendError('some error', gridOptionMock.backendServiceApi); + service.onBackendError('some error', gridOptionMock.backendServiceApi); expect(spy).toHaveBeenCalled(); }); it('should throw back the error when callback was provided', () => { gridOptionMock.backendServiceApi!.onError = undefined; - expect(() => onBackendError('some error', gridOptionMock.backendServiceApi)).toThrow(); + expect(() => service.onBackendError('some error', gridOptionMock.backendServiceApi)).toThrow(); }); }); describe('refreshBackendDataset method', () => { - let executeSpy; - - beforeAll(() => { - executeSpy = jest.spyOn(main, 'executeBackendCallback'); - }); - it('should call "executeBackendCallback" after calling the "refreshBackendDataset" method with Pagination', () => { const query = `query { users (first:20,offset:0) { totalCount, nodes { id,name,gender,company } } }`; const querySpy = jest.spyOn(gridOptionMock.backendServiceApi!.service, 'buildQuery').mockReturnValue(query); + const executeSpy = jest.spyOn(service, 'executeBackendCallback'); - refreshBackendDataset(gridOptionMock); + service.refreshBackendDataset(gridOptionMock); expect(querySpy).toHaveBeenCalled(); expect(executeSpy).toHaveBeenCalledWith(gridOptionMock.backendServiceApi as BackendServiceApi, query, null, expect.toBeDate(), gridOptionMock.pagination!.totalItems); @@ -102,8 +98,9 @@ describe('backend-utilities', () => { gridOptionMock.enablePagination = false; const query = `query { users { id,name,gender,company } }`; const querySpy = jest.spyOn(gridOptionMock.backendServiceApi!.service, 'buildQuery').mockReturnValue(query); + const executeSpy = jest.spyOn(service, 'executeBackendCallback'); - refreshBackendDataset(gridOptionMock); + service.refreshBackendDataset(gridOptionMock); expect(querySpy).toHaveBeenCalled(); expect(executeSpy).toHaveBeenCalledWith(gridOptionMock.backendServiceApi as BackendServiceApi, query, null, expect.toBeDate(), gridOptionMock.pagination!.totalItems); @@ -113,7 +110,7 @@ describe('backend-utilities', () => { gridOptionMock.enablePagination = true; try { gridOptionMock.backendServiceApi = undefined; - refreshBackendDataset(undefined); + service.refreshBackendDataset(undefined); } catch (e) { expect(e.toString()).toContain('BackendServiceApi requires at least a "process" function and a "service" defined'); done(); diff --git a/packages/common/src/services/__tests__/filter.service.spec.ts b/packages/common/src/services/__tests__/filter.service.spec.ts index 1cf0cd3f1..4979d8c32 100644 --- a/packages/common/src/services/__tests__/filter.service.spec.ts +++ b/packages/common/src/services/__tests__/filter.service.spec.ts @@ -25,15 +25,11 @@ import { FilterFactory } from '../../filters/filterFactory'; import { getParsedSearchTermsByFieldType } from '../../filter-conditions'; import { SlickgridConfig } from '../../slickgrid-config'; import { SharedService } from '../shared.service'; -import * as utilities from '../../services/backend-utilities'; +import { BackendUtilityService } from '../backendUtility.service'; import { CollectionService } from '../collection.service'; import { TranslateServiceStub } from '../../../../../test/translateServiceStub'; import { PubSubService } from '../pubSub.service'; -const mockRefreshBackendDataset = jest.fn(); -// @ts-ignore:2540 -utilities.refreshBackendDataset = mockRefreshBackendDataset; - jest.mock('flatpickr', () => { }); declare const Slick: SlickNamespace; const DOM_ELEMENT_ID = 'row-detail123'; @@ -113,6 +109,7 @@ const pubSubServiceStub = { describe('FilterService', () => { let service: FilterService; + let backendUtilityService: BackendUtilityService; let collectionService: CollectionService; let sharedService: SharedService; let slickgridConfig: SlickgridConfig; @@ -129,8 +126,9 @@ describe('FilterService', () => { slickgridConfig = new SlickgridConfig(); translateService = new TranslateServiceStub(); collectionService = new CollectionService(translateService); + backendUtilityService = new BackendUtilityService(); const filterFactory = new FilterFactory(slickgridConfig, translateService, collectionService); - service = new FilterService(filterFactory, pubSubServiceStub, sharedService); + service = new FilterService(filterFactory, pubSubServiceStub, sharedService, backendUtilityService); slickgridEventHandler = service.eventHandler; }); @@ -1111,6 +1109,7 @@ describe('FilterService', () => { const emitSpy = jest.spyOn(service, 'emitFilterChanged'); const backendUpdateSpy = jest.spyOn(backendServiceStub, 'updateFilters'); const backendProcessSpy = jest.spyOn(backendServiceStub, 'processOnFilterChanged'); + const refreshBackendSpy = jest.spyOn(backendUtilityService, 'refreshBackendDataset'); service.init(gridStub); service.bindBackendOnFilter(gridStub); @@ -1127,7 +1126,7 @@ describe('FilterService', () => { isActive: { columnId: 'isActive', columnDef: mockColumn2, searchTerms: [false], operator: 'EQ', parsedSearchTerms: false, type: FieldType.boolean } }); expect(clearSpy).toHaveBeenCalledWith(false); - expect(mockRefreshBackendDataset).toHaveBeenCalledWith(gridOptionMock); + expect(refreshBackendSpy).toHaveBeenCalledWith(gridOptionMock); }); it('should expect filters to be sent to the backend when using "bindBackendOnFilter" without triggering a filter changed event neither a backend query when both flag arguments are set to false', () => { @@ -1140,6 +1139,7 @@ describe('FilterService', () => { const emitSpy = jest.spyOn(service, 'emitFilterChanged'); const backendUpdateSpy = jest.spyOn(backendServiceStub, 'updateFilters'); const backendProcessSpy = jest.spyOn(backendServiceStub, 'processOnFilterChanged'); + const refreshBackendSpy = jest.spyOn(backendUtilityService, 'refreshBackendDataset'); service.init(gridStub); service.bindBackendOnFilter(gridStub); @@ -1149,7 +1149,7 @@ describe('FilterService', () => { expect(backendProcessSpy).not.toHaveBeenCalled(); expect(emitSpy).not.toHaveBeenCalled(); - expect(mockRefreshBackendDataset).not.toHaveBeenCalled(); + expect(refreshBackendSpy).not.toHaveBeenCalled(); expect(backendUpdateSpy).toHaveBeenCalledWith(mockNewFilters, true); expect(service.getColumnFilters()).toEqual({ firstName: { columnId: 'firstName', columnDef: mockColumn1, searchTerms: ['Jane'], operator: 'StartsWith', parsedSearchTerms: 'Jane', type: FieldType.string }, @@ -1208,6 +1208,7 @@ describe('FilterService', () => { const emitSpy = jest.spyOn(service, 'emitFilterChanged'); const backendUpdateSpy = jest.spyOn(backendServiceStub, 'updateFilters'); const backendProcessSpy = jest.spyOn(backendServiceStub, 'processOnFilterChanged'); + const refreshBackendSpy = jest.spyOn(backendUtilityService, 'refreshBackendDataset'); service.init(gridStub); service.bindBackendOnFilter(gridStub); @@ -1219,7 +1220,7 @@ describe('FilterService', () => { expect(backendProcessSpy).not.toHaveBeenCalled(); expect(backendUpdateSpy).toHaveBeenCalledWith(expectation, true); expect(service.getColumnFilters()).toEqual(expectation); - expect(mockRefreshBackendDataset).toHaveBeenCalledWith(gridOptionMock); + expect(refreshBackendSpy).toHaveBeenCalledWith(gridOptionMock); }); it('should expect filter to be sent to the backend when using "bindBackendOnFilter" without triggering a filter changed event neither a backend query when both flag arguments are set to false', () => { @@ -1234,6 +1235,7 @@ describe('FilterService', () => { const emitSpy = jest.spyOn(service, 'emitFilterChanged'); const backendUpdateSpy = jest.spyOn(backendServiceStub, 'updateFilters'); const backendProcessSpy = jest.spyOn(backendServiceStub, 'processOnFilterChanged'); + const refreshBackendSpy = jest.spyOn(backendUtilityService, 'refreshBackendDataset'); service.init(gridStub); service.bindBackendOnFilter(gridStub); @@ -1243,7 +1245,7 @@ describe('FilterService', () => { expect(backendProcessSpy).not.toHaveBeenCalled(); expect(emitSpy).not.toHaveBeenCalled(); - expect(mockRefreshBackendDataset).not.toHaveBeenCalled(); + expect(refreshBackendSpy).not.toHaveBeenCalled(); expect(backendUpdateSpy).toHaveBeenCalledWith(expectation, true); expect(service.getColumnFilters()).toEqual(expectation); }); diff --git a/packages/common/src/services/__tests__/pagination.service.spec.ts b/packages/common/src/services/__tests__/pagination.service.spec.ts index 79a91792c..4b6f352cf 100644 --- a/packages/common/src/services/__tests__/pagination.service.spec.ts +++ b/packages/common/src/services/__tests__/pagination.service.spec.ts @@ -3,7 +3,7 @@ import 'jest-extended'; import { PaginationService } from './../pagination.service'; import { SharedService } from '../shared.service'; import { Column, SlickDataView, GridOption, SlickGrid, SlickNamespace, BackendServiceApi, Pagination } from '../../interfaces/index'; -import * as utilities from '../backend-utilities'; +import { BackendUtilityService } from '../backendUtility.service'; declare const Slick: SlickNamespace; @@ -18,13 +18,12 @@ jest.mock('../pubSub.service', () => ({ PubSubService: () => mockPubSub })); -const mockExecuteBackendProcess = jest.fn(); -// @ts-ignore:2540 -utilities.executeBackendProcessesCallback = mockExecuteBackendProcess; - -const mockBackendError = jest.fn(); -// @ts-ignore:2540 -utilities.onBackendError = mockBackendError; +const backendUtilityServiceStub = { + executeBackendProcessesCallback: jest.fn(), + executeBackendCallback: jest.fn(), + onBackendError: jest.fn(), + refreshBackendDataset: jest.fn(), +} as unknown as BackendUtilityService; const dataviewStub = { onPagingInfoChanged: new Slick.Event(), @@ -43,13 +42,6 @@ const mockBackendService = { processOnPaginationChanged: jest.fn(), }; -// const pubSubServiceStub = { -// publish: jest.fn(), -// subscribe: jest.fn(), -// unsubscribe: jest.fn(), -// unsubscribeAll: jest.fn(), -// } as PubSubService; - const mockGridOption = { enableAutoResize: true, enablePagination: true, @@ -87,7 +79,7 @@ describe('PaginationService', () => { beforeEach(() => { sharedService = new SharedService(); - service = new PaginationService(mockPubSub, sharedService); + service = new PaginationService(mockPubSub, sharedService, backendUtilityServiceStub); jest.spyOn(SharedService.prototype, 'gridOptions', 'get').mockReturnValue(mockGridOption); }); @@ -375,20 +367,21 @@ describe('PaginationService', () => { const postSpy = jest.fn(); mockGridOption.backendServiceApi!.process = postSpy; jest.spyOn(mockBackendService, 'processOnPaginationChanged').mockReturnValue('backend query'); - const promise = new Promise((_resolve, reject) => setTimeout(() => reject(mockError), 1)); - jest.spyOn(mockGridOption.backendServiceApi as BackendServiceApi, 'process').mockReturnValue(promise); + jest.spyOn(mockGridOption.backendServiceApi as BackendServiceApi, 'process').mockReturnValue(Promise.reject(mockError)); + const backendErrorSpy = jest.spyOn(backendUtilityServiceStub, 'onBackendError'); try { service.init(gridStub, mockGridOption.pagination as Pagination, mockGridOption.backendServiceApi); - await service.processOnPageChanged(1); + const response = await service.processOnPageChanged(1); } catch (e) { - expect(mockBackendError).toHaveBeenCalledWith(mockError, mockGridOption.backendServiceApi); + expect(backendErrorSpy).toHaveBeenCalledWith(mockError, mockGridOption.backendServiceApi); } }); it('should execute "process" method when defined', (done) => { const postSpy = jest.fn(); mockGridOption.backendServiceApi!.process = postSpy; + const backendExecuteSpy = jest.spyOn(backendUtilityServiceStub, 'executeBackendProcessesCallback'); jest.spyOn(mockBackendService, 'processOnPaginationChanged').mockReturnValue('backend query'); const now = new Date(); const processResult = { users: [{ name: 'John' }], metrics: { startTime: now, endTime: now, executionTime: 0, totalItemCount: 0 } }; @@ -400,7 +393,7 @@ describe('PaginationService', () => { setTimeout(() => { expect(postSpy).toHaveBeenCalled(); - expect(mockExecuteBackendProcess).toHaveBeenCalledWith(expect.toBeDate(), processResult, mockGridOption.backendServiceApi as BackendServiceApi, 85); + expect(backendExecuteSpy).toHaveBeenCalledWith(expect.toBeDate(), processResult, mockGridOption.backendServiceApi as BackendServiceApi, 85); done(); }, 10); }); diff --git a/packages/common/src/services/__tests__/sort.service.spec.ts b/packages/common/src/services/__tests__/sort.service.spec.ts index 00b71f9db..d24d64fa1 100644 --- a/packages/common/src/services/__tests__/sort.service.spec.ts +++ b/packages/common/src/services/__tests__/sort.service.spec.ts @@ -16,15 +16,12 @@ import { } from '../../interfaces/index'; import { SortComparers } from '../../sortComparers'; import { SortService } from '../sort.service'; -import * as utilities from '../../services/backend-utilities'; +import { BackendUtilityService } from '../backendUtility.service'; import { PubSubService } from '../pubSub.service'; import { SharedService } from '../shared.service'; declare const Slick: SlickNamespace; -const mockRefreshBackendDataset = jest.fn(); -// @ts-ignore:2540 -utilities.refreshBackendDataset = mockRefreshBackendDataset; const gridOptionMock = { enablePagination: true, @@ -88,14 +85,17 @@ const pubSubServiceStub = { } as PubSubService; describe('SortService', () => { + let backendUtilityService: BackendUtilityService; let sharedService: SharedService; let service: SortService; let slickgridEventHandler: SlickEventHandler; beforeEach(() => { + backendUtilityService = new BackendUtilityService(); sharedService = new SharedService(); sharedService.dataView = dataViewStub; - service = new SortService(sharedService, pubSubServiceStub); + + service = new SortService(sharedService, pubSubServiceStub, backendUtilityService); slickgridEventHandler = service.eventHandler; }); @@ -904,6 +904,7 @@ describe('SortService', () => { }; const emitSpy = jest.spyOn(service, 'emitSortChanged'); const backendUpdateSpy = jest.spyOn(backendServiceStub, 'updateSorters'); + const refreshBackendSpy = jest.spyOn(backendUtilityService, 'refreshBackendDataset'); service.bindLocalOnSort(gridStub); service.updateSorting(mockNewSorters); @@ -911,7 +912,7 @@ describe('SortService', () => { expect(emitSpy).toHaveBeenCalledWith('remote'); expect(service.getCurrentLocalSorters()).toEqual([]); expect(backendUpdateSpy).toHaveBeenCalledWith(undefined, mockNewSorters); - expect(mockRefreshBackendDataset).toHaveBeenCalledWith(gridOptionMock); + expect(refreshBackendSpy).toHaveBeenCalledWith(gridOptionMock); }); it('should expect sorters to be sent to the backend when using "bindBackendOnSort" without triggering a sort changed event neither a backend query when both flag arguments are set to false', () => { @@ -921,13 +922,14 @@ describe('SortService', () => { }; const emitSpy = jest.spyOn(service, 'emitSortChanged'); const backendUpdateSpy = jest.spyOn(backendServiceStub, 'updateSorters'); + const refreshBackendSpy = jest.spyOn(backendUtilityService, 'refreshBackendDataset'); service.bindBackendOnSort(gridStub); service.updateSorting(mockNewSorters, false, false); expect(emitSpy).not.toHaveBeenCalled(); expect(backendUpdateSpy).toHaveBeenCalledWith(undefined, mockNewSorters); - expect(mockRefreshBackendDataset).not.toHaveBeenCalled(); + expect(refreshBackendSpy).not.toHaveBeenCalled(); }); }); diff --git a/packages/common/src/services/backend-utilities.ts b/packages/common/src/services/backendUtility.service.ts similarity index 99% rename from packages/common/src/services/backend-utilities.ts rename to packages/common/src/services/backendUtility.service.ts index 04c65ff71..85427ba5a 100644 --- a/packages/common/src/services/backend-utilities.ts +++ b/packages/common/src/services/backendUtility.service.ts @@ -36,7 +36,7 @@ export class BackendUtilityService { /** On a backend service api error, we will run the "onError" if there is 1 provided or just throw back the error when nothing is provided */ onBackendError(e: any, backendApi: BackendServiceApi) { - if (backendApi && backendApi.onError) { + if (backendApi?.onError) { backendApi.onError(e); } else { throw e; diff --git a/packages/common/src/services/filter.service.ts b/packages/common/src/services/filter.service.ts index 6ea1ab74b..c89f6ce6d 100644 --- a/packages/common/src/services/filter.service.ts +++ b/packages/common/src/services/filter.service.ts @@ -29,7 +29,7 @@ import { SlickGrid, SlickNamespace, } from './../interfaces/index'; -import { BackendUtilityService } from './backend-utilities'; +import { BackendUtilityService } from './backendUtility.service'; import { debounce, deepCopy, getDescendantProperty, mapOperatorByFieldType } from './utilities'; import { PubSubService } from '../services/pubSub.service'; import { SharedService } from './shared.service'; @@ -277,12 +277,12 @@ export class FilterService { } // when using backend service, we need to query only once so it's better to do it here - const backendApi = this._gridOptions && this._gridOptions.backendServiceApi; + const backendApi = this._gridOptions?.backendServiceApi; if (backendApi && triggerChange) { const callbackArgs = { clearFilterTriggered: true, shouldTriggerQuery: triggerChange, grid: this._grid, columnFilters: this._columnFilters }; const queryResponse = backendApi.service.processOnFilterChanged(undefined, callbackArgs as FilterChangedArgs); const query = queryResponse as string; - const totalItems = this._gridOptions && this._gridOptions.pagination && this._gridOptions.pagination.totalItems || 0; + const totalItems = this._gridOptions?.pagination?.totalItems ?? 0; this.backendUtilities?.executeBackendCallback(backendApi, query, callbackArgs, new Date(), totalItems, this.emitFilterChanged.bind(this)); } diff --git a/packages/common/src/services/index.ts b/packages/common/src/services/index.ts index f17529572..b7f5e3417 100644 --- a/packages/common/src/services/index.ts +++ b/packages/common/src/services/index.ts @@ -1,4 +1,4 @@ -export * from './backend-utilities'; +export * from './backendUtility.service'; export * from './bindingEvent.service'; export * from './collection.service'; export * from './container.service'; diff --git a/packages/common/src/services/pagination.service.ts b/packages/common/src/services/pagination.service.ts index 5c1a93bbd..1fc9a6ea4 100644 --- a/packages/common/src/services/pagination.service.ts +++ b/packages/common/src/services/pagination.service.ts @@ -12,7 +12,7 @@ import { SlickNamespace, Subscription } from '../interfaces/index'; -import { BackendUtilityService } from './backend-utilities'; +import { BackendUtilityService } from './backendUtility.service'; import { SharedService } from './shared.service'; import { PubSubService } from './pubSub.service'; import { ObservableFacade, RxJsFacade } from './rxjsFacade'; diff --git a/packages/common/src/services/shared.service.ts b/packages/common/src/services/shared.service.ts index 4564807c4..b6481e377 100644 --- a/packages/common/src/services/shared.service.ts +++ b/packages/common/src/services/shared.service.ts @@ -59,11 +59,11 @@ export class SharedService { this._frozenVisibleColumnId = columnId; } - /** Setter to keep the frozen column id for reference if we ever show/hide column from ColumnPicker/GridMenu afterward */ + /** Setter to know if the columns were ever reordered or not since the grid was created. */ get hasColumnsReordered(): boolean { return this._hasColumnsReordered; } - /** Getter to keep the frozen column id for reference if we ever show/hide column from ColumnPicker/GridMenu afterward */ + /** Getter to know if the columns were ever reordered or not since the grid was created. */ set hasColumnsReordered(isColumnReordered: boolean) { this._hasColumnsReordered = isColumnReordered; } diff --git a/packages/common/src/services/sort.service.ts b/packages/common/src/services/sort.service.ts index aace3be5f..4cbada692 100644 --- a/packages/common/src/services/sort.service.ts +++ b/packages/common/src/services/sort.service.ts @@ -20,7 +20,7 @@ import { SortDirectionNumber, SortDirectionString, } from '../enums/index'; -import { BackendUtilityService } from './backend-utilities'; +import { BackendUtilityService } from './backendUtility.service'; import { getDescendantProperty, convertHierarchicalViewToParentChildArray } from './utilities'; import { sortByFieldType } from '../sortComparers/sortUtilities'; import { PubSubService } from './pubSub.service'; diff --git a/packages/vanilla-bundle/src/components/__tests__/slick-vanilla-grid.spec.ts b/packages/vanilla-bundle/src/components/__tests__/slick-vanilla-grid.spec.ts index cb9d7b7b2..5e7e09e47 100644 --- a/packages/vanilla-bundle/src/components/__tests__/slick-vanilla-grid.spec.ts +++ b/packages/vanilla-bundle/src/components/__tests__/slick-vanilla-grid.spec.ts @@ -1,5 +1,6 @@ import 'jest-extended'; import { + BackendUtilityService, Column, CollectionService, ColumnFilters, @@ -40,7 +41,6 @@ import { } from '@slickgrid-universal/common'; import { GraphqlService, GraphqlPaginatedResult, GraphqlServiceApi, GraphqlServiceOption } from '@slickgrid-universal/graphql'; import { SlickCompositeEditorComponent } from '@slickgrid-universal/composite-editor-component'; -import * as backendUtilities from '@slickgrid-universal/common/dist/commonjs/services/backend-utilities'; import * as utilities from '@slickgrid-universal/common/dist/commonjs/services/utilities'; import * as slickVanillaUtilities from '../slick-vanilla-utilities'; @@ -54,15 +54,9 @@ import { ResizerService } from '../../services/resizer.service'; import { UniversalContainerService } from '../../services/universalContainer.service'; jest.mock('../../services/textExport.service'); -const mockExecuteBackendProcess = jest.fn(); -const mockRefreshBackendDataset = jest.fn(); -const mockBackendError = jest.fn(); const mockConvertParentChildArray = jest.fn(); const mockAutoAddCustomEditorFormatter = jest.fn(); -(backendUtilities.executeBackendProcessesCallback as any) = mockExecuteBackendProcess; -(backendUtilities.refreshBackendDataset as any) = mockRefreshBackendDataset; -(backendUtilities.onBackendError as any) = mockBackendError; (slickVanillaUtilities.autoAddEditorFormatterToColumnsWithEditor as any) = mockAutoAddCustomEditorFormatter; declare const Slick: any; @@ -101,6 +95,14 @@ const mockGraphqlService = { updatePagination: jest.fn(), } as unknown as GraphqlService; +const backendUtilityServiceStub = { + executeBackendProcessesCallback: jest.fn(), + executeBackendCallback: jest.fn(), + onBackendError: jest.fn(), + refreshBackendDataset: jest.fn(), +} as unknown as BackendUtilityService; + + const collectionServiceStub = { filterCollection: jest.fn(), singleFilterCollection: jest.fn(), @@ -322,6 +324,7 @@ describe('Slick-Vanilla-Grid-Bundle Component instantiated via Constructor', () dataset, undefined, { + backendUtilityService: backendUtilityServiceStub, collectionService: collectionServiceStub, eventPubSubService, extensionService: extensionServiceStub, @@ -1143,6 +1146,7 @@ describe('Slick-Vanilla-Grid-Bundle Component instantiated via Constructor', () const promise = new Promise(resolve => setTimeout(() => resolve(processResult), 1)); const processSpy = jest.spyOn(component.gridOptions.backendServiceApi, 'process').mockReturnValue(promise); jest.spyOn(component.gridOptions.backendServiceApi.service, 'buildQuery').mockReturnValue(query); + const backendExecuteSpy = jest.spyOn(backendUtilityServiceStub, 'executeBackendProcessesCallback'); component.gridOptions.backendServiceApi.service.options = { executeProcessCommandOnInit: true }; component.initialization(divContainer, slickEventHandler); @@ -1150,7 +1154,7 @@ describe('Slick-Vanilla-Grid-Bundle Component instantiated via Constructor', () expect(processSpy).toHaveBeenCalled(); setTimeout(() => { - expect(mockExecuteBackendProcess).toHaveBeenCalledWith(expect.toBeDate(), processResult, component.gridOptions.backendServiceApi, 0); + expect(backendExecuteSpy).toHaveBeenCalledWith(expect.toBeDate(), processResult, component.gridOptions.backendServiceApi, 0); done(); }, 5); }); @@ -1165,6 +1169,7 @@ describe('Slick-Vanilla-Grid-Bundle Component instantiated via Constructor', () const promise = new Promise(resolve => setTimeout(() => resolve(processResult), 1)); const processSpy = jest.spyOn(component.gridOptions.backendServiceApi, 'process').mockReturnValue(promise); jest.spyOn(component.gridOptions.backendServiceApi.service, 'buildQuery').mockReturnValue(query); + const backendExecuteSpy = jest.spyOn(backendUtilityServiceStub, 'executeBackendProcessesCallback'); component.gridOptions.backendServiceApi.service.options = { executeProcessCommandOnInit: true }; component.initialization(divContainer, slickEventHandler); @@ -1172,7 +1177,7 @@ describe('Slick-Vanilla-Grid-Bundle Component instantiated via Constructor', () expect(processSpy).toHaveBeenCalled(); setTimeout(() => { - expect(mockExecuteBackendProcess).toHaveBeenCalledWith(expect.toBeDate(), processResult, component.gridOptions.backendServiceApi, 0); + expect(backendExecuteSpy).toHaveBeenCalledWith(expect.toBeDate(), processResult, component.gridOptions.backendServiceApi, 0); done(); }, 5); }); @@ -1821,6 +1826,7 @@ describe('Slick-Vanilla-Grid-Bundle Component instantiated via Constructor', () }); it('should call the backend service API to refresh the dataset', (done) => { + const backendRefreshSpy = jest.spyOn(backendUtilityServiceStub, 'refreshBackendDataset'); component.gridOptions.enablePagination = true; component.gridOptions.backendServiceApi = { service: mockGraphqlService as any, @@ -1832,7 +1838,7 @@ describe('Slick-Vanilla-Grid-Bundle Component instantiated via Constructor', () eventPubSubService.publish('onPaginationVisibilityChanged', { visible: false }); setTimeout(() => { - expect(mockRefreshBackendDataset).toHaveBeenCalled(); + expect(backendRefreshSpy).toHaveBeenCalled(); expect(component.showPagination).toBeFalsy(); done(); }); @@ -1968,6 +1974,7 @@ describe('Slick-Vanilla-Grid-Bundle Component instantiated via Constructor with dataset, hierarchicalDataset, { + backendUtilityService: backendUtilityServiceStub, collectionService: collectionServiceStub, eventPubSubService, extensionService: extensionServiceStub, @@ -2039,6 +2046,7 @@ describe('Slick-Vanilla-Grid-Bundle Component instantiated via Constructor with dataset, null, { + backendUtilityService: backendUtilityServiceStub, collectionService: collectionServiceStub, eventPubSubService, extensionService: extensionServiceStub, diff --git a/yarn.lock b/yarn.lock index 46e55b987..002d30e43 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2516,18 +2516,6 @@ aws4@^1.8.0: resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== -axios-observable@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/axios-observable/-/axios-observable-1.1.6.tgz#08cec29faae1a9e1a766fb5e2e9d07eae406e1d4" - integrity sha512-demLOWURdp9YDFV9zXY6m8TXuIpY0tHUKKt4nsMJ48tQy+5pjZc22PjgxZL7nGojsICzSKZDly6EI12VUTssdQ== - -axios@^0.21.1: - version "0.21.1" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.1.tgz#22563481962f4d6bde9a76d516ef0e5d3c09b2b8" - integrity sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA== - dependencies: - follow-redirects "^1.10.0" - babel-jest@^26.6.3: version "26.6.3" resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-26.6.3.tgz#d87d25cb0037577a0c89f82e5755c5d293c01056" @@ -5094,7 +5082,7 @@ flush-write-stream@^1.0.0: inherits "^2.0.3" readable-stream "^2.3.6" -follow-redirects@^1.0.0, follow-redirects@^1.10.0: +follow-redirects@^1.0.0: version "1.13.3" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.3.tgz#e5598ad50174c1bc4e872301e82ac2cd97f90267" integrity sha512-DUgl6+HDzB0iEptNQEXLx/KhTmDb8tZUHSeLqpnjpknR70H0nC2t9N73BK6fN4hOvJ84pKlIQVQ4k5FFlBedKA== From 14b24e6728c91d8daa619eaabe20cd238804e9bc Mon Sep 17 00:00:00 2001 From: ghiscoding Date: Mon, 8 Mar 2021 23:23:21 -0500 Subject: [PATCH 05/21] refactor: downgrade jquery to 3.5.1 --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index c59f61229..994780734 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7022,9 +7022,9 @@ jquery-ui@>=1.8.0: integrity sha1-vLQEXI3QU5wTS8FIjN0+dop6nlE= jquery@>=1.8.0, jquery@^3.5.1: - version "3.6.0" - resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.6.0.tgz#c72a09f15c1bdce142f49dbf1170bdf8adac2470" - integrity sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw== + version "3.5.1" + resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.5.1.tgz#d7b4d08e1bfdb86ad2f1a3d039ea17304717abb5" + integrity sha512-XwIBPqcMn57FxfT+Go5pzySnm4KWkT1Tv7gjrpT1srtf8Weynl6R273VJ5GjkRb51IzMp5nbaPjJXMWeju2MKg== js-base64@^2.1.8: version "2.6.4" From 2f0c2e56a7414cebe17b8dfa4f83982881b196dc Mon Sep 17 00:00:00 2001 From: ghiscoding Date: Tue, 9 Mar 2021 23:57:41 -0500 Subject: [PATCH 06/21] tests: add few observable unit tests --- .../__tests__/backend-utilities.spec.ts | 54 ++++++++++++++++++- test/rxjsResourceStub.ts | 44 +++++++++++++++ 2 files changed, 97 insertions(+), 1 deletion(-) create mode 100644 test/rxjsResourceStub.ts diff --git a/packages/common/src/services/__tests__/backend-utilities.spec.ts b/packages/common/src/services/__tests__/backend-utilities.spec.ts index 247121469..d9840c4bd 100644 --- a/packages/common/src/services/__tests__/backend-utilities.spec.ts +++ b/packages/common/src/services/__tests__/backend-utilities.spec.ts @@ -1,5 +1,9 @@ +import 'jest-extended'; +import { of, Subject, throwError } from 'rxjs'; + import { BackendServiceApi, GridOption } from '../../interfaces/index'; import { BackendUtilityService } from '../backendUtility.service'; +import { RxJsResourceStub } from '../../../../../test/rxjsResourceStub'; jest.mock('flatpickr', () => { }); @@ -12,6 +16,7 @@ const graphqlServiceMock = { describe('Backend Utility Service', () => { let gridOptionMock: GridOption; + let rxjsResourceStub: RxJsResourceStub; let service: BackendUtilityService; beforeEach(() => { @@ -30,7 +35,8 @@ describe('Backend Utility Service', () => { totalItems: 0 } } as GridOption; - service = new BackendUtilityService(); + rxjsResourceStub = new RxJsResourceStub(); + service = new BackendUtilityService(rxjsResourceStub); }); describe('executeBackendProcessesCallback method', () => { @@ -117,4 +123,50 @@ describe('Backend Utility Service', () => { } }); }); + + describe('executeBackendCallback method', () => { + it('should expect that executeBackendProcessesCallback will be called after the process Observable resolves', (done) => { + const subject = new Subject(); + const now = new Date(); + const query = `query { users (first:20,offset:0) { totalCount, nodes { id,name,gender,company } } }`; + const processResult = { + data: { users: { nodes: [] }, pageInfo: { hasNextPage: true }, totalCount: 0 }, + metrics: { startTime: now, endTime: now, executionTime: 0, totalItemCount: 0 } + }; + + const nextSpy = jest.spyOn(subject, 'next'); + const processSpy = jest.spyOn(gridOptionMock.backendServiceApi, 'process').mockReturnValue(of(processResult)); + const executeProcessesSpy = jest.spyOn(service, 'executeBackendProcessesCallback'); + + service.addRxJsResource(rxjsResourceStub); + service.executeBackendCallback(gridOptionMock.backendServiceApi, query, {}, now, 10, null, subject); + + setTimeout(() => { + expect(nextSpy).toHaveBeenCalled(); + expect(processSpy).toHaveBeenCalled(); + expect(executeProcessesSpy).toHaveBeenCalledWith(now, processResult, gridOptionMock.backendServiceApi, 10); + done(); + }); + }); + + it('should expect that onBackendError will be called after the process Observable throws an error', (done) => { + const errorExpected = 'observable error'; + const subject = new Subject(); + const now = new Date(); + service.onBackendError = jest.fn(); + const query = `query { users (first:20,offset:0) { totalCount, nodes { id,name,gender,company } } }`; + const nextSpy = jest.spyOn(subject, 'next'); + const processSpy = jest.spyOn(gridOptionMock.backendServiceApi, 'process').mockReturnValue(throwError(errorExpected)); + + service.addRxJsResource(rxjsResourceStub); + service.executeBackendCallback(gridOptionMock.backendServiceApi, query, {}, now, 10, null, subject); + + setTimeout(() => { + expect(nextSpy).toHaveBeenCalled(); + expect(processSpy).toHaveBeenCalled(); + expect(service.onBackendError).toHaveBeenCalledWith(errorExpected, gridOptionMock.backendServiceApi); + done(); + }); + }); + }); }); diff --git a/test/rxjsResourceStub.ts b/test/rxjsResourceStub.ts new file mode 100644 index 000000000..197c91ec1 --- /dev/null +++ b/test/rxjsResourceStub.ts @@ -0,0 +1,44 @@ +import { RxJsFacade } from '@slickgrid-universal/common'; +import { iif, isObservable, Observable, Subject, EMPTY } from 'rxjs'; +import { takeUntil } from 'rxjs/operators'; + +export class RxJsResourceStub implements RxJsFacade { + readonly className = 'RxJsResource'; + + /** + * The same Observable instance returned by any call to without a scheduler. + * This returns the EMPTY constant from RxJS + */ + get EMPTY(): Observable { + return EMPTY; + } + + /** Simple method to create an Observable */ + createObservable(): Observable { + return new Observable(); + } + + /** Simple method to create an Subject */ + createSubject(): Subject { + return new Subject(); + } + + /** he same Observable instance returned by any call to without a scheduler. It is preferrable to use this over empty() */ + empty(): Observable { + return EMPTY; + } + + iif(condition: () => boolean, trueResult?: any, falseResult?: any): Observable { + return iif(condition, trueResult, falseResult); + } + + /** Tests to see if the object is an RxJS Observable */ + isObservable(obj: any): boolean { + return isObservable(obj); + } + + /** Emits the values emitted by the source Observable until a `notifier` Observable emits a value. */ + takeUntil(notifier: Observable): any { + return takeUntil(notifier); + } +} \ No newline at end of file From 8b58900836f75f2dd829027b0bff69817b115cdf Mon Sep 17 00:00:00 2001 From: ghiscoding Date: Wed, 10 Mar 2021 23:23:09 -0500 Subject: [PATCH 07/21] tests: add more unit tests --- .../services/__tests__/filter.service.spec.ts | 27 +++++++- .../__tests__/pagination.service.spec.ts | 47 +++++++++++++- .../src/services/__tests__/rxjsFacade.spec.ts | 63 +++++++++++++++++++ .../services/__tests__/sort.service.spec.ts | 26 +++++++- packages/common/src/services/rxjsFacade.ts | 16 ++--- 5 files changed, 165 insertions(+), 14 deletions(-) create mode 100644 packages/common/src/services/__tests__/rxjsFacade.spec.ts diff --git a/packages/common/src/services/__tests__/filter.service.spec.ts b/packages/common/src/services/__tests__/filter.service.spec.ts index 8d300d853..b409f75f4 100644 --- a/packages/common/src/services/__tests__/filter.service.spec.ts +++ b/packages/common/src/services/__tests__/filter.service.spec.ts @@ -1,7 +1,7 @@ // import 3rd party lib multiple-select for the tests import 'multiple-select-modified'; - import 'jest-extended'; +import { of, throwError } from 'rxjs'; import { FieldType } from '../../enums/index'; import { @@ -29,6 +29,7 @@ import { BackendUtilityService } from '../backendUtility.service'; import { CollectionService } from '../collection.service'; import { TranslateServiceStub } from '../../../../../test/translateServiceStub'; import { PubSubService } from '../pubSub.service'; +import { RxJsResourceStub } from '../../../../../test/rxjsResourceStub'; jest.mock('flatpickr', () => { }); declare const Slick: SlickNamespace; @@ -114,6 +115,7 @@ describe('FilterService', () => { let sharedService: SharedService; let slickgridConfig: SlickgridConfig; let slickgridEventHandler: SlickEventHandler; + let rxjsResourceStub: RxJsResourceStub; let translateService: TranslateServiceStub; beforeEach(() => { @@ -126,9 +128,10 @@ describe('FilterService', () => { slickgridConfig = new SlickgridConfig(); translateService = new TranslateServiceStub(); collectionService = new CollectionService(translateService); + rxjsResourceStub = new RxJsResourceStub(); backendUtilityService = new BackendUtilityService(); const filterFactory = new FilterFactory(slickgridConfig, translateService, collectionService); - service = new FilterService(filterFactory, pubSubServiceStub, sharedService, backendUtilityService); + service = new FilterService(filterFactory, pubSubServiceStub, sharedService, backendUtilityService, rxjsResourceStub); slickgridEventHandler = service.eventHandler; }); @@ -513,6 +516,26 @@ describe('FilterService', () => { done(); }); }); + + it('should execute the "onError" method when the Observable throws an error', (done) => { + const errorExpected = 'observable error'; + const spyProcess = jest.fn(); + gridOptionMock.backendServiceApi!.process = () => of(spyProcess); + gridOptionMock.backendServiceApi!.onError = () => jest.fn(); + const pubSubSpy = jest.spyOn(pubSubServiceStub, 'publish'); + const spyOnError = jest.spyOn(gridOptionMock.backendServiceApi as BackendServiceApi, 'onError'); + jest.spyOn(gridOptionMock.backendServiceApi, 'process').mockReturnValue(throwError(errorExpected)); + + backendUtilityService.addRxJsResource(rxjsResourceStub); + service.addRxJsResource(rxjsResourceStub); + service.clearFilters(); + + setTimeout(() => { + expect(pubSubSpy).toHaveBeenCalledWith(`onFilterCleared`, true); + expect(spyOnError).toHaveBeenCalledWith(errorExpected); + done(); + }); + }); }); }); diff --git a/packages/common/src/services/__tests__/pagination.service.spec.ts b/packages/common/src/services/__tests__/pagination.service.spec.ts index 4b6f352cf..e0d794cda 100644 --- a/packages/common/src/services/__tests__/pagination.service.spec.ts +++ b/packages/common/src/services/__tests__/pagination.service.spec.ts @@ -1,9 +1,11 @@ import 'jest-extended'; +import { of, throwError } from 'rxjs'; import { PaginationService } from './../pagination.service'; import { SharedService } from '../shared.service'; import { Column, SlickDataView, GridOption, SlickGrid, SlickNamespace, BackendServiceApi, Pagination } from '../../interfaces/index'; import { BackendUtilityService } from '../backendUtility.service'; +import { RxJsResourceStub } from '../../../../../test/rxjsResourceStub'; declare const Slick: SlickNamespace; @@ -76,10 +78,12 @@ const gridStub = { describe('PaginationService', () => { let service: PaginationService; let sharedService: SharedService; + let rxjsResourceStub: RxJsResourceStub; beforeEach(() => { sharedService = new SharedService(); - service = new PaginationService(mockPubSub, sharedService, backendUtilityServiceStub); + rxjsResourceStub = new RxJsResourceStub(); + service = new PaginationService(mockPubSub, sharedService, backendUtilityServiceStub, rxjsResourceStub); jest.spyOn(SharedService.prototype, 'gridOptions', 'get').mockReturnValue(mockGridOption); }); @@ -372,13 +376,30 @@ describe('PaginationService', () => { try { service.init(gridStub, mockGridOption.pagination as Pagination, mockGridOption.backendServiceApi); - const response = await service.processOnPageChanged(1); + await service.processOnPageChanged(1); } catch (e) { expect(backendErrorSpy).toHaveBeenCalledWith(mockError, mockGridOption.backendServiceApi); } }); - it('should execute "process" method when defined', (done) => { + it('should execute "process" method and catch error when process Observable fails', async (done) => { + const mockError = 'observable error'; + const postSpy = jest.fn(); + mockGridOption.backendServiceApi!.process = postSpy; + jest.spyOn(mockBackendService, 'processOnPaginationChanged').mockReturnValue('backend query'); + jest.spyOn(mockGridOption.backendServiceApi as BackendServiceApi, 'process').mockReturnValue(throwError(mockError)); + const backendErrorSpy = jest.spyOn(backendUtilityServiceStub, 'onBackendError'); + + try { + service.init(gridStub, mockGridOption.pagination as Pagination, mockGridOption.backendServiceApi); + await service.processOnPageChanged(1); + } catch (e) { + expect(backendErrorSpy).toHaveBeenCalledWith(mockError, mockGridOption.backendServiceApi); + done(); + } + }); + + it('should execute "process" method when defined as a Promise', (done) => { const postSpy = jest.fn(); mockGridOption.backendServiceApi!.process = postSpy; const backendExecuteSpy = jest.spyOn(backendUtilityServiceStub, 'executeBackendProcessesCallback'); @@ -398,6 +419,26 @@ describe('PaginationService', () => { }, 10); }); + it('should execute "process" method when defined as an Observable', (done) => { + const postSpy = jest.fn(); + mockGridOption.backendServiceApi.process = postSpy; + const backendExecuteSpy = jest.spyOn(backendUtilityServiceStub, 'executeBackendProcessesCallback'); + jest.spyOn(mockBackendService, 'processOnPaginationChanged').mockReturnValue('backend query'); + const now = new Date(); + const processResult = { users: [{ name: 'John' }], metrics: { startTime: now, endTime: now, executionTime: 0, totalItemCount: 0 } }; + jest.spyOn(mockGridOption.backendServiceApi as BackendServiceApi, 'process').mockReturnValue(of(processResult)); + + service.addRxJsResource(rxjsResourceStub); + service.init(gridStub, mockGridOption.pagination as Pagination, mockGridOption.backendServiceApi); + service.processOnPageChanged(1); + + setTimeout(() => { + expect(postSpy).toHaveBeenCalled(); + expect(backendExecuteSpy).toHaveBeenCalledWith(expect.toBeDate(), processResult, mockGridOption.backendServiceApi as BackendServiceApi, 85); + done(); + }); + }); + it('should call "setPagingOptions" from the DataView and trigger "onPaginationChanged" when using a Local Grid', () => { const pubSubSpy = jest.spyOn(mockPubSub, 'publish'); const setPagingSpy = jest.spyOn(dataviewStub, 'setPagingOptions'); diff --git a/packages/common/src/services/__tests__/rxjsFacade.spec.ts b/packages/common/src/services/__tests__/rxjsFacade.spec.ts new file mode 100644 index 000000000..4083dce3c --- /dev/null +++ b/packages/common/src/services/__tests__/rxjsFacade.spec.ts @@ -0,0 +1,63 @@ +import { ObservableFacade, RxJsFacade, SubjectFacade, SubscriptionFacade } from '../rxjsFacade'; + +describe('RxJsFacade Service', () => { + it('should display a not implemented when calling "EMPTY" getter', () => { + expect(() => RxJsFacade.prototype.EMPTY).toThrow('RxJS Facade "EMPTY" constant must be implemented'); + }); + + it('should display a not implemented when calling "createObservable" method', () => { + expect(() => RxJsFacade.prototype.createObservable()).toThrow('RxJS Facade "createObservable" method must be implemented'); + }); + + it('should display a not implemented when calling "createSubject" method', () => { + expect(() => RxJsFacade.prototype.createSubject()).toThrow('RxJS Facade "createSubject" method must be implemented'); + }); + + it('should display a not implemented when calling "iif" method', () => { + expect(() => RxJsFacade.prototype.iif(() => false)).toThrow('RxJS Facade "iif" method must be implemented'); + }); + + it('should always return False when calling "isObservable" method', () => { + expect(RxJsFacade.prototype.isObservable({})).toBe(false); + }); + + it('should display a not implemented when calling "takeUntil" method', () => { + expect(() => RxJsFacade.prototype.takeUntil({} as any)).toThrow('RxJS Facade "takeUntil" method must be implemented'); + }); +}); + +describe('SubjectFacade Service', () => { + it('should display a not implemented when calling "next" method', () => { + expect(() => SubjectFacade.prototype.next()).toThrow('RxJS Subject "next" method must be implemented'); + }); + + it('should display a not implemented when calling "unsubscribe" method', () => { + expect(() => SubjectFacade.prototype.unsubscribe()).toThrow('RxJS Subject "unsubscribe" method must be implemented'); + }); +}); + +describe('ObservableFacade Service', () => { + it('should display a not implemented when calling "constructor"', () => { + // @ts-ignore + expect(() => new ObservableFacade()).toThrow('RxJS Observable Facade "constructor" method must be implemented'); + }); + + it('should display a not implemented when calling "subscribe" method', () => { + expect(() => ObservableFacade.prototype.subscribe()).toThrow('RxJS Observable Facade "subscribe" method must be implemented'); + }); + + it('should display a not implemented when calling "pipe" method', () => { + expect(() => ObservableFacade.prototype.pipe({})).toThrow('RxJS Observable Facade "pipe" method must be implemented'); + }); +}); + +describe('SubscriptionFacade Service', () => { + it('should display a not implemented when calling "next" method', () => { + // @ts-ignore + expect(() => new SubscriptionFacade()).toThrow('RxJS Subscription Facade "constructor" method must be implemented'); + }); + + it('should display a not implemented when calling "pipe" method', () => { + expect(() => SubscriptionFacade.prototype.unsubscribe()).toThrow('RxJS Subscription Facade "unsubscribe" method must be implemented'); + }); +}); diff --git a/packages/common/src/services/__tests__/sort.service.spec.ts b/packages/common/src/services/__tests__/sort.service.spec.ts index d24d64fa1..45da9a78a 100644 --- a/packages/common/src/services/__tests__/sort.service.spec.ts +++ b/packages/common/src/services/__tests__/sort.service.spec.ts @@ -1,3 +1,5 @@ +import { of, throwError } from 'rxjs'; + import { EmitterType, FieldType, } from '../../enums/index'; import { BackendService, @@ -19,6 +21,7 @@ import { SortService } from '../sort.service'; import { BackendUtilityService } from '../backendUtility.service'; import { PubSubService } from '../pubSub.service'; import { SharedService } from '../shared.service'; +import { RxJsResourceStub } from '../../../../../test/rxjsResourceStub'; declare const Slick: SlickNamespace; @@ -88,14 +91,16 @@ describe('SortService', () => { let backendUtilityService: BackendUtilityService; let sharedService: SharedService; let service: SortService; + let rxjsResourceStub: RxJsResourceStub; let slickgridEventHandler: SlickEventHandler; beforeEach(() => { backendUtilityService = new BackendUtilityService(); sharedService = new SharedService(); + rxjsResourceStub = new RxJsResourceStub(); sharedService.dataView = dataViewStub; - service = new SortService(sharedService, pubSubServiceStub, backendUtilityService); + service = new SortService(sharedService, pubSubServiceStub, backendUtilityService, rxjsResourceStub); slickgridEventHandler = service.eventHandler; }); @@ -477,6 +482,25 @@ describe('SortService', () => { done(); }, 0); }); + + it('should execute the "onError" method when the Observable throws an error', (done) => { + const spyProcess = jest.fn(); + const errorExpected = 'observable error'; + gridOptionMock.backendServiceApi.process = () => of(spyProcess); + gridOptionMock.backendServiceApi.onError = (e) => jest.fn(); + const spyOnError = jest.spyOn(gridOptionMock.backendServiceApi, 'onError'); + jest.spyOn(gridOptionMock.backendServiceApi, 'process').mockReturnValue(throwError(errorExpected)); + + backendUtilityService.addRxJsResource(rxjsResourceStub); + service.addRxJsResource(rxjsResourceStub); + service.bindBackendOnSort(gridStub); + service.onBackendSortChanged(undefined, { multiColumnSort: true, sortCols: [], grid: gridStub }); + + setTimeout(() => { + expect(spyOnError).toHaveBeenCalledWith(errorExpected); + done(); + }); + }); }); describe('getCurrentColumnSorts method', () => { diff --git a/packages/common/src/services/rxjsFacade.ts b/packages/common/src/services/rxjsFacade.ts index 1b9eb53a5..227bbfcc0 100644 --- a/packages/common/src/services/rxjsFacade.ts +++ b/packages/common/src/services/rxjsFacade.ts @@ -13,28 +13,28 @@ * That external `rsjs-observable` package simply implements this RxJsFacade * and is just a very simple and basic RxJS Wrapper package (which will depend on the real RxJS package) */ -export class RxJsFacade { +export abstract class RxJsFacade { /** * The same Observable instance returned by any call to without a scheduler. * This returns the EMPTY constant from RxJS */ get EMPTY(): ObservableFacade { - throw new Error('RxJs Facade "EMPTY" constant must be implemented'); + throw new Error('RxJS Facade "EMPTY" constant must be implemented'); } /** Simple method to create an Observable */ createObservable(): ObservableFacade { - throw new Error('RxJs Facade "createObservable" method must be implemented'); + throw new Error('RxJS Facade "createObservable" method must be implemented'); } /** Simple method to create a Subject */ createSubject(): SubjectFacade { - throw new Error('RxJs Facade "createSubject" method must be implemented'); + throw new Error('RxJS Facade "createSubject" method must be implemented'); } /** Decides at subscription time which Observable will actually be subscribed. */ iif(condition: () => boolean, trueResult?: any, falseResult?: any): ObservableFacade { - throw new Error('RxJs Facade "iif" method must be implemented'); + throw new Error('RxJS Facade "iif" method must be implemented'); } /** Tests to see if the object is an RxJS Observable */ @@ -44,7 +44,7 @@ export class RxJsFacade { /** Emits the values emitted by the source Observable until a `notifier` Observable emits a value. */ takeUntil(notifier: ObservableFacade): any { - throw new Error('RxJs Facade "takeUntil" method must be implemented'); + throw new Error('RxJS Facade "takeUntil" method must be implemented'); } } @@ -54,11 +54,11 @@ export class RxJsFacade { */ export abstract class SubjectFacade { next(value?: T): void { - throw new Error('RxJs Subject "next" method must be implemented'); + throw new Error('RxJS Subject "next" method must be implemented'); } unsubscribe(): void { - throw new Error('RxJs Subject "unsubscribe" method must be implemented'); + throw new Error('RxJS Subject "unsubscribe" method must be implemented'); } } From 207150b9ae3464e247b27a07e75fce47171a22bc Mon Sep 17 00:00:00 2001 From: ghiscoding Date: Thu, 11 Mar 2021 22:48:52 -0500 Subject: [PATCH 08/21] tests: add missing unit tests --- .../rxjs-observable/src/rxjs-resource.spec.ts | 44 +++++++++ packages/rxjs-observable/src/rxjs.resource.ts | 5 -- .../__tests__/slick-vanilla-grid.spec.ts | 89 ++++++++++++++++++- .../components/slick-vanilla-grid-bundle.ts | 17 ++-- 4 files changed, 143 insertions(+), 12 deletions(-) create mode 100644 packages/rxjs-observable/src/rxjs-resource.spec.ts diff --git a/packages/rxjs-observable/src/rxjs-resource.spec.ts b/packages/rxjs-observable/src/rxjs-resource.spec.ts new file mode 100644 index 000000000..83d696014 --- /dev/null +++ b/packages/rxjs-observable/src/rxjs-resource.spec.ts @@ -0,0 +1,44 @@ +import { EMPTY, isObservable, Observable, Subject } from 'rxjs'; +import { takeUntil } from 'rxjs/operators'; +import { RxJsResource } from './rxjs.resource'; + +describe('RxJs Resource', () => { + let service: RxJsResource; + + beforeEach(() => { + service = new RxJsResource(); + }); + + it('should create the service', () => { + expect(service).toBeTruthy(); + expect(service.className).toBe('RxJsResource'); + }); + + it('should be able to create an RxJS Observable', () => { + const observable = service.createObservable(); + expect(observable instanceof Observable).toBeTruthy(); + expect(service.isObservable(observable)).toBeTruthy(); + }); + + it('should be able to create an RxJS Subject', () => { + const subject = service.createSubject(); + expect(subject instanceof Subject).toBeTruthy(); + }); + + it('should be able to retrieve the RxJS EMPTY constant from the service getter', () => { + expect(service.EMPTY).toEqual(EMPTY); + }); + + it('should be able to execute the "iif" method and expect an Observable returned', () => { + const observable = service.createObservable(); + const iifOutput = service.iif(() => isObservable(observable)); + expect(iifOutput instanceof Observable).toBeTruthy(); + }); + + it('should be able to execute the "takeUntil" method and expect an Observable returned', () => { + const observable = service.createObservable(); + const iifOutput = service.iif(() => isObservable(observable)); + const output = observable.pipe(service.takeUntil(iifOutput)); + expect(output instanceof Observable).toBeTruthy(); + }); +}); diff --git a/packages/rxjs-observable/src/rxjs.resource.ts b/packages/rxjs-observable/src/rxjs.resource.ts index 29cb9b4a4..f67dad8ec 100644 --- a/packages/rxjs-observable/src/rxjs.resource.ts +++ b/packages/rxjs-observable/src/rxjs.resource.ts @@ -23,11 +23,6 @@ export class RxJsResource implements RxJsFacade { return new Subject(); } - /** he same Observable instance returned by any call to without a scheduler. It is preferrable to use this over empty() */ - empty(): Observable { - return EMPTY; - } - iif(condition: () => boolean, trueResult?: any, falseResult?: any): Observable { return iif(condition, trueResult, falseResult); } diff --git a/packages/vanilla-bundle/src/components/__tests__/slick-vanilla-grid.spec.ts b/packages/vanilla-bundle/src/components/__tests__/slick-vanilla-grid.spec.ts index 5e7e09e47..45b69c56a 100644 --- a/packages/vanilla-bundle/src/components/__tests__/slick-vanilla-grid.spec.ts +++ b/packages/vanilla-bundle/src/components/__tests__/slick-vanilla-grid.spec.ts @@ -1,4 +1,5 @@ import 'jest-extended'; +import { of, throwError } from 'rxjs'; import { BackendUtilityService, Column, @@ -52,6 +53,7 @@ import { HttpStub } from '../../../../../test/httpClientStub'; import { MockSlickEvent, MockSlickEventHandler } from '../../../../../test/mockSlickEvent'; import { ResizerService } from '../../services/resizer.service'; import { UniversalContainerService } from '../../services/universalContainer.service'; +import { RxJsResourceStub } from '../../../../../test/rxjsResourceStub'; jest.mock('../../services/textExport.service'); const mockConvertParentChildArray = jest.fn(); @@ -96,6 +98,7 @@ const mockGraphqlService = { } as unknown as GraphqlService; const backendUtilityServiceStub = { + addRxJsResource: jest.fn(), executeBackendProcessesCallback: jest.fn(), executeBackendCallback: jest.fn(), onBackendError: jest.fn(), @@ -110,6 +113,7 @@ const collectionServiceStub = { } as unknown as CollectionService; const filterServiceStub = { + addRxJsResource: jest.fn(), clearFilters: jest.fn(), dispose: jest.fn(), init: jest.fn(), @@ -144,6 +148,7 @@ const gridStateServiceStub = { const paginationServiceStub = { totalItems: 0, + addRxJsResource: jest.fn(), init: jest.fn(), dispose: jest.fn(), getFullPagination: jest.fn(), @@ -162,6 +167,7 @@ Object.defineProperty(paginationServiceStub, 'totalItems', { }); const sortServiceStub = { + addRxJsResource: jest.fn(), bindBackendOnSort: jest.fn(), bindLocalOnSort: jest.fn(), dispose: jest.fn(), @@ -704,6 +710,25 @@ describe('Slick-Vanilla-Grid-Bundle Component instantiated via Constructor', () }); }); + it('should be able to load async editors with an Observable', (done) => { + const mockCollection = ['male', 'female']; + const mockColDefs = [{ id: 'gender', field: 'gender', editor: { model: Editors.text, collectionAsync: of(mockCollection) } }] as Column[]; + const getColSpy = jest.spyOn(mockGrid, 'getColumns').mockReturnValue(mockColDefs); + + const rxjsMock = new RxJsResourceStub(); + component.gridOptions = { registerExternalResources: [rxjsMock] } as unknown as GridOption; + component.initialization(divContainer, slickEventHandler); + component.columnDefinitions = mockColDefs; + + setTimeout(() => { + expect(getColSpy).toHaveBeenCalled(); + expect(component.columnDefinitions[0].editor!.collection).toEqual(mockCollection); + expect(component.columnDefinitions[0].internalColumnEditor!.collection).toEqual(mockCollection); + expect(component.columnDefinitions[0].internalColumnEditor!.model).toEqual(Editors.text); + done(); + }); + }); + it('should throw an error when Fetch Promise response bodyUsed is true', (done) => { const consoleSpy = jest.spyOn(global.console, 'warn').mockReturnValue(); const mockCollection = ['male', 'female']; @@ -923,6 +948,24 @@ describe('Slick-Vanilla-Grid-Bundle Component instantiated via Constructor', () expect(component.registeredResources[0] instanceof TextExportService).toBeTrue(); }); + it('should add RxJS resource to all necessary Services when RxJS external resource is registered', () => { + const rxjsMock = new RxJsResourceStub(); + const backendUtilitySpy = jest.spyOn(backendUtilityServiceStub, 'addRxJsResource'); + const filterServiceSpy = jest.spyOn(filterServiceStub, 'addRxJsResource'); + const sortServiceSpy = jest.spyOn(sortServiceStub, 'addRxJsResource'); + const paginationServiceSpy = jest.spyOn(paginationServiceStub, 'addRxJsResource'); + + component.gridOptions = { registerExternalResources: [rxjsMock] } as unknown as GridOption; + component.initialization(divContainer, slickEventHandler); + + expect(backendUtilitySpy).toHaveBeenCalled(); + expect(filterServiceSpy).toHaveBeenCalled(); + expect(sortServiceSpy).toHaveBeenCalled(); + expect(paginationServiceSpy).toHaveBeenCalled(); + expect(component.registeredResources.length).toBe(4); // RxJsResourceStub, GridService, GridStateService, SlickEmptyCompositeEditorComponent + expect(component.registeredResources[0] instanceof RxJsResourceStub).toBeTrue(); + }); + it('should destroy customElement and its DOM element when requested', () => { const spy = jest.spyOn(component, 'emptyGridContainerElm'); @@ -1136,7 +1179,7 @@ describe('Slick-Vanilla-Grid-Bundle Component instantiated via Constructor', () expect(refreshSpy).toHaveBeenCalledWith(mockData); }); - it('should execute the process method on initialization when "executeProcessCommandOnInit" is set as a backend service options with Pagination enabled', (done) => { + it('should execute the process method on initialization when "executeProcessCommandOnInit" is set as a backend service options with a Promise and Pagination enabled', (done) => { const now = new Date(); const query = `query { users (first:20,offset:0) { totalCount, nodes { id,name,gender,company } } }`; const processResult = { @@ -1159,6 +1202,30 @@ describe('Slick-Vanilla-Grid-Bundle Component instantiated via Constructor', () }, 5); }); + it('should execute the process method on initialization when "executeProcessCommandOnInit" is set as a backend service options with an Observable and Pagination enabled', (done) => { + const now = new Date(); + const rxjsMock = new RxJsResourceStub(); + const query = `query { users (first:20,offset:0) { totalCount, nodes { id,name,gender,company } } }`; + const processResult = { + data: { users: { nodes: [] }, pageInfo: { hasNextPage: true }, totalCount: 0 }, + metrics: { startTime: now, endTime: now, executionTime: 0, totalItemCount: 0 } + }; + const processSpy = jest.spyOn((component.gridOptions as any).backendServiceApi, 'process').mockReturnValue(of(processResult)); + jest.spyOn((component.gridOptions as any).backendServiceApi.service, 'buildQuery').mockReturnValue(query); + const backendExecuteSpy = jest.spyOn(backendUtilityServiceStub, 'executeBackendProcessesCallback'); + + component.gridOptions.registerExternalResources = [rxjsMock]; + component.gridOptions.backendServiceApi.service.options = { executeProcessCommandOnInit: true }; + component.initialization(divContainer, slickEventHandler); + + expect(processSpy).toHaveBeenCalled(); + + setTimeout(() => { + expect(backendExecuteSpy).toHaveBeenCalledWith(expect.toBeDate(), processResult, component.gridOptions.backendServiceApi, 0); + done(); + }, 5); + }); + it('should execute the process method on initialization when "executeProcessCommandOnInit" is set as a backend service options without Pagination (when disabled)', (done) => { const now = new Date(); const query = `query { users { id,name,gender,company } }`; @@ -1199,6 +1266,26 @@ describe('Slick-Vanilla-Grid-Bundle Component instantiated via Constructor', () done(); }); }); + + it('should throw an error when the process method on initialization when "executeProcessCommandOnInit" is set as a backend service options from an Observable', (done) => { + const mockError = { error: '404' }; + const rxjsMock = new RxJsResourceStub(); + const query = `query { users (first:20,offset:0) { totalCount, nodes { id,name,gender,company } } }`; + const processSpy = jest.spyOn((component.gridOptions as any).backendServiceApi, 'process').mockReturnValue(throwError(mockError)); + jest.spyOn((component.gridOptions as any).backendServiceApi.service, 'buildQuery').mockReturnValue(query); + const backendErrorSpy = jest.spyOn(backendUtilityServiceStub, 'onBackendError'); + + component.gridOptions.registerExternalResources = [rxjsMock]; + component.gridOptions.backendServiceApi.service.options = { executeProcessCommandOnInit: true }; + component.initialization(divContainer, slickEventHandler); + + expect(processSpy).toHaveBeenCalled(); + + setTimeout(() => { + expect(backendErrorSpy).toHaveBeenCalledWith(mockError, component.gridOptions.backendServiceApi); + done(); + }); + }); }); describe('bindDifferentHooks private method called by "attached"', () => { diff --git a/packages/vanilla-bundle/src/components/slick-vanilla-grid-bundle.ts b/packages/vanilla-bundle/src/components/slick-vanilla-grid-bundle.ts index de4f903c9..ccee54a42 100644 --- a/packages/vanilla-bundle/src/components/slick-vanilla-grid-bundle.ts +++ b/packages/vanilla-bundle/src/components/slick-vanilla-grid-bundle.ts @@ -673,12 +673,7 @@ export class SlickVanillaGridBundle { resource.init(this.slickGrid, this.universalContainerService); } if (resource?.className === 'RxJsResource') { - this.rxjs = resource as RxJsFacade; - this.backendUtilityService.addRxJsResource(this.rxjs); - this.filterService.addRxJsResource(this.rxjs); - this.sortService.addRxJsResource(this.rxjs); - this.paginationService.addRxJsResource(this.rxjs); - this.universalContainerService.registerInstance('RxJsResource', this.rxjs); + this.registerRxJsResource(resource as RxJsFacade); } } } @@ -1318,6 +1313,16 @@ export class SlickVanillaGridBundle { } } + /** Register the RxJS Resource in all necessary services which uses */ + private registerRxJsResource(resource: RxJsFacade) { + this.rxjs = resource; + this.backendUtilityService.addRxJsResource(this.rxjs); + this.filterService.addRxJsResource(this.rxjs); + this.sortService.addRxJsResource(this.rxjs); + this.paginationService.addRxJsResource(this.rxjs); + this.universalContainerService.registerInstance('RxJsResource', this.rxjs); + } + /** * For convenience to the user, we provide the property "editor" as an Slickgrid-Universal editor complex object * however "editor" is used internally by SlickGrid for it's own Editor Factory From e92be02da5f56eb0a1caba494f7f2931eb5bf664 Mon Sep 17 00:00:00 2001 From: ghiscoding Date: Sun, 14 Mar 2021 18:31:31 -0400 Subject: [PATCH 09/21] refactor: add RxJS to SelectFilter & demo --- .../src/examples/example15.html | 4 + .../src/examples/example15.ts | 41 +- packages/common/src/filters/filterFactory.ts | 11 +- .../src/filters/multipleSelectFilter.ts | 5 +- packages/common/src/filters/selectFilter.ts | 48 +- .../common/src/filters/singleSelectFilter.ts | 5 +- .../src/services/__tests__/utilities.spec.ts | 29 + packages/common/src/services/rxjsFacade.ts | 32 +- packages/common/src/services/utilities.ts | 23 + packages/rxjs-observable/src/rxjs.resource.ts | 8 +- .../components/slick-vanilla-grid-bundle.ts | 126 ++-- test/cypress/integration/example15.spec.js | 630 ++++++++++++++++++ test/rxjsResourceStub.ts | 8 +- 13 files changed, 878 insertions(+), 92 deletions(-) create mode 100644 test/cypress/integration/example15.spec.js diff --git a/examples/webpack-demo-vanilla-bundle/src/examples/example15.html b/examples/webpack-demo-vanilla-bundle/src/examples/example15.html index 13a342857..4e415b4c4 100644 --- a/examples/webpack-demo-vanilla-bundle/src/examples/example15.html +++ b/examples/webpack-demo-vanilla-bundle/src/examples/example15.html @@ -21,6 +21,10 @@

+
diff --git a/examples/webpack-demo-vanilla-bundle/src/examples/example15.ts b/examples/webpack-demo-vanilla-bundle/src/examples/example15.ts index 38069ae61..e2f0883de 100644 --- a/examples/webpack-demo-vanilla-bundle/src/examples/example15.ts +++ b/examples/webpack-demo-vanilla-bundle/src/examples/example15.ts @@ -2,7 +2,7 @@ import { BindingEventService, Column, FieldType, Filters, GridOption, GridStateC import { GridOdataService, OdataServiceApi, OdataOption } from '@slickgrid-universal/odata'; import { RxJsResource } from '@slickgrid-universal/rxjs-observable'; import { Slicker, SlickVanillaGridBundle } from '@slickgrid-universal/vanilla-bundle'; -import { Observable } from 'rxjs'; +import { Observable, of, Subject } from 'rxjs'; import { ExampleGridOptions } from './example-grid-options'; @@ -21,6 +21,8 @@ export class Example15 { processing = false; status = ''; statusClass = 'is-success'; + isOtherGenderAdded = false; + genderCollection = [{ value: '', label: '' }, { value: 'male', label: 'male' }, { value: 'female', label: 'female' }]; constructor() { this._bindingEventService = new BindingEventService(); @@ -57,7 +59,7 @@ export class Example15 { id: 'gender', name: 'Gender', field: 'gender', filterable: true, filter: { model: Filters.singleSelect, - collection: [{ value: '', label: '' }, { value: 'male', label: 'male' }, { value: 'female', label: 'female' }] + collectionAsync: of(this.genderCollection) } }, { id: 'company', name: 'Company', field: 'company' }, @@ -113,6 +115,41 @@ export class Example15 { }; } + addOtherGender() { + this.isOtherGenderAdded = true; + const genderColumn = this.columnDefinitions.find((column: Column) => column.id === 'gender'); + if (genderColumn) { + this.genderCollection.push({ value: 'other', label: 'other' }); + const filterCollectionAsync = genderColumn.filter!.collectionAsync; + // const editorCollection = genderColumn.editor!.collection; + + // if (Array.isArray(editorCollection)) { + // // add the new row to the grid + // this.angularGrid.gridService.addItemToDatagrid(newRows[0]); + + // // then refresh the Editor "collection", we have 2 ways of doing it + + // // Push to the Editor "collection" + // editorCollection.push({ value: lastRowIndex, label: lastRowIndex, prefix: 'Task' }); + + // // or replace entire "collection" + // // durationColumnDef.editor.collection = [...collection, ...[{ value: lastRowIndex, label: lastRowIndex }]]; + + // // for the Filter only, we have a trigger an RxJS/Subject change with the new collection + // // we do this because Filter(s) are shown at all time, while on Editor it's unnecessary since they are only shown when opening them + // if (filterCollectionAsync instanceof Subject) { + // filterCollectionAsync.next(editorCollection); + // } + // } + + // for the Filter only, we have a trigger an RxJS/Subject change with the new collection + // we do this because Filter(s) are shown at all time, while on Editor it's unnecessary since they are only shown when opening them + if (filterCollectionAsync instanceof Subject) { + filterCollectionAsync.next(this.genderCollection); + } + } + } + displaySpinner(isProcessing) { this.processing = isProcessing; this.status = (isProcessing) ? 'loading...' : 'finished!!'; diff --git a/packages/common/src/filters/filterFactory.ts b/packages/common/src/filters/filterFactory.ts index 3f528e7eb..fb91077e8 100644 --- a/packages/common/src/filters/filterFactory.ts +++ b/packages/common/src/filters/filterFactory.ts @@ -2,26 +2,31 @@ import { ColumnFilter, Filter } from '../interfaces/index'; import { SlickgridConfig } from '../slickgrid-config'; import { CollectionService } from '../services/collection.service'; import { TranslaterService } from '../services/translater.service'; +import { RxJsFacade } from '../services/rxjsFacade'; export class FilterFactory { /** The options from the SlickgridConfig */ private _options: any; - constructor(private config: SlickgridConfig, private readonly translaterService?: TranslaterService, private readonly collectionService?: CollectionService) { + constructor(private config: SlickgridConfig, private readonly translaterService?: TranslaterService, private readonly collectionService?: CollectionService, private rxjs?: RxJsFacade) { this._options = this.config?.options ?? {}; } + addRxJsResource(rxjs: RxJsFacade) { + this.rxjs = rxjs; + } + // Uses the User model to create a new User createFilter(columnFilter: ColumnFilter | undefined): Filter | undefined { let filter: Filter | undefined; if (columnFilter?.model) { - filter = typeof columnFilter.model === 'function' ? new columnFilter.model(this.translaterService, this.collectionService) : columnFilter.model; + filter = typeof columnFilter.model === 'function' ? new columnFilter.model(this.translaterService, this.collectionService, this.rxjs) : columnFilter.model; } // fallback to the default filter if (!filter && this._options.defaultFilter) { - filter = new this._options.defaultFilter(this.translaterService, this.collectionService); + filter = new this._options.defaultFilter(this.translaterService, this.collectionService, this.rxjs); } return filter; diff --git a/packages/common/src/filters/multipleSelectFilter.ts b/packages/common/src/filters/multipleSelectFilter.ts index d13e9ed35..ab5dac0ef 100644 --- a/packages/common/src/filters/multipleSelectFilter.ts +++ b/packages/common/src/filters/multipleSelectFilter.ts @@ -1,12 +1,13 @@ import { SelectFilter } from './selectFilter'; import { CollectionService } from './../services/collection.service'; import { TranslaterService } from '../services/translater.service'; +import { RxJsFacade } from '../services/rxjsFacade'; export class MultipleSelectFilter extends SelectFilter { /** * Initialize the Filter */ - constructor(protected readonly translaterService: TranslaterService, protected readonly collectionService: CollectionService) { - super(translaterService, collectionService, true); + constructor(protected readonly translaterService: TranslaterService, protected readonly collectionService: CollectionService, protected readonly rxjs: RxJsFacade) { + super(translaterService, collectionService, rxjs, true); } } diff --git a/packages/common/src/filters/selectFilter.ts b/packages/common/src/filters/selectFilter.ts index db1c77775..b3e69deca 100644 --- a/packages/common/src/filters/selectFilter.ts +++ b/packages/common/src/filters/selectFilter.ts @@ -12,12 +12,13 @@ import { Locale, MultipleSelectOption, SelectOption, - SlickGrid + SlickGrid, + Subscription } from './../interfaces/index'; import { CollectionService } from '../services/collection.service'; import { collectionObserver, propertyObserver } from '../services/observers'; -import { getDescendantProperty, getTranslationPrefix, htmlEncode, sanitizeTextByAvailableSanitizer } from '../services/utilities'; -import { TranslaterService } from '../services'; +import { castObservableToPromise, getDescendantProperty, getTranslationPrefix, htmlEncode, sanitizeTextByAvailableSanitizer } from '../services/utilities'; +import { ObservableFacade, RxJsFacade, SubjectFacade, TranslaterService } from '../services'; export class SelectFilter implements Filter { protected _isMultipleSelect = true; @@ -46,11 +47,16 @@ export class SelectFilter implements Filter { optionLabel!: string; valueName!: string; enableTranslateLabel = false; + subscriptions: Subscription[] = []; /** * Initialize the Filter */ - constructor(protected readonly translaterService: TranslaterService, protected readonly collectionService: CollectionService, isMultipleSelect = true) { + constructor( + protected readonly translaterService: TranslaterService, + protected readonly collectionService: CollectionService, + protected readonly rxjs: RxJsFacade, + isMultipleSelect = true) { this._isMultipleSelect = isMultipleSelect; } @@ -523,10 +529,33 @@ export class SelectFilter implements Filter { } } - protected async renderOptionsAsync(collectionAsync: Promise): Promise { + /** + * When user use a CollectionAsync we will use the returned collection to render the filter DOM element + * and reinitialize filter collection with this new collection + */ + protected renderDomElementFromCollectionAsync(collection: any[]) { + if (this.collectionOptions && this.collectionOptions.collectionInsideObjectProperty) { + const collectionInsideObjectProperty = this.collectionOptions.collectionInsideObjectProperty; + collection = getDescendantProperty(collection, collectionInsideObjectProperty as string); + } + if (!Array.isArray(collection)) { + throw new Error('Something went wrong while trying to pull the collection from the "collectionAsync" call in the Select Filter, the collection is not a valid array.'); + } + + // copy over the array received from the async call to the "collection" as the new collection to use + // this has to be BEFORE the `collectionObserver().subscribe` to avoid going into an infinite loop + this.columnFilter.collection = collection; + + // recreate Multiple Select after getting async collection + this.renderDomElement(collection); + } + + protected async renderOptionsAsync(collectionAsync: Promise | ObservableFacade | SubjectFacade): Promise { let awaitedCollection: any = null; if (collectionAsync) { + awaitedCollection = await castObservableToPromise(this.rxjs, collectionAsync) as Promise; + // wait for the "collectionAsync", once resolved we will save it into the "collection" const response: any | any[] = await collectionAsync; @@ -558,4 +587,13 @@ export class SelectFilter implements Filter { return awaitedCollection; } + + /** Create or recreate an Observable Subject and reassign it to the "collectionAsync" object so user can call a "collectionAsync.next()" on it */ + protected createCollectionAsyncSubject() { + const newCollectionAsync = this.rxjs.createSubject(); + this.columnFilter.collectionAsync = newCollectionAsync; + this.subscriptions.push( + newCollectionAsync.subscribe(collection => this.renderDomElementFromCollectionAsync(collection)) + ); + } } diff --git a/packages/common/src/filters/singleSelectFilter.ts b/packages/common/src/filters/singleSelectFilter.ts index 1366b476c..7f00f27cd 100644 --- a/packages/common/src/filters/singleSelectFilter.ts +++ b/packages/common/src/filters/singleSelectFilter.ts @@ -1,12 +1,13 @@ import { SelectFilter } from './selectFilter'; import { CollectionService } from './../services/collection.service'; import { TranslaterService } from '../services/translater.service'; +import { RxJsFacade } from '../services/rxjsFacade'; export class SingleSelectFilter extends SelectFilter { /** * Initialize the Filter */ - constructor(protected readonly translaterService: TranslaterService, protected readonly collectionService: CollectionService) { - super(translaterService, collectionService, false); + constructor(protected readonly translaterService: TranslaterService, protected readonly collectionService: CollectionService, protected readonly rxjs: RxJsFacade) { + super(translaterService, collectionService, rxjs, false); } } diff --git a/packages/common/src/services/__tests__/utilities.spec.ts b/packages/common/src/services/__tests__/utilities.spec.ts index cf3c12e01..e7bfcc1d2 100644 --- a/packages/common/src/services/__tests__/utilities.spec.ts +++ b/packages/common/src/services/__tests__/utilities.spec.ts @@ -1,11 +1,14 @@ import 'jest-extended'; +import { of } from 'rxjs'; import { FieldType, OperatorType } from '../../enums/index'; import { GridOption } from '../../interfaces/index'; +import { RxJsResourceStub } from '../../../../../test/rxjsResourceStub'; import { addToArrayWhenNotExists, addWhiteSpaces, arrayRemoveItemByIndex, + castObservableToPromise, convertHierarchicalViewToParentChildArray, convertParentChildArrayToHierarchicalView, decimalFormatted, @@ -174,6 +177,32 @@ describe('Service/Utilies', () => { }); }); + describe('castObservableToPromise method', () => { + let rxjs: RxJsResourceStub; + beforeEach(() => { + rxjs = new RxJsResourceStub(); + }); + + it('should throw an error when argument provided is not a Promise neither an Observable', async () => { + expect(() => castObservableToPromise(rxjs, null)).toThrowError('Something went wrong,'); + }); + + it('should return original Promise when argument is already a Promise', async () => { + const promise = new Promise((resolve) => setTimeout(() => resolve('hello'), 1)); + const castPromise = castObservableToPromise(rxjs, promise); + expect(promise).toBe(castPromise); + }); + + it('should be able to cast an Observable to a Promise', () => { + const inputArray = ['hello', 'world']; + const observable = of(inputArray); + + castObservableToPromise(rxjs, observable).then((outputArray) => { + expect(outputArray).toBe(inputArray); + }); + }); + }); + describe('convertHierarchicalViewToParentChildArray method', () => { let mockColumns; diff --git a/packages/common/src/services/rxjsFacade.ts b/packages/common/src/services/rxjsFacade.ts index 227bbfcc0..9b997ed41 100644 --- a/packages/common/src/services/rxjsFacade.ts +++ b/packages/common/src/services/rxjsFacade.ts @@ -37,6 +37,10 @@ export abstract class RxJsFacade { throw new Error('RxJS Facade "iif" method must be implemented'); } + first(predicate?: null, defaultValue?: D): any { + throw new Error('RxJS Facade "first" method must be implemented'); + } + /** Tests to see if the object is an RxJS Observable */ isObservable(obj: any): boolean { return false; @@ -48,20 +52,6 @@ export abstract class RxJsFacade { } } -/** - * A Subject is a special type of Observable that allows values to be - * multicasted to many Observers. Subjects are like EventEmitters. - */ -export abstract class SubjectFacade { - next(value?: T): void { - throw new Error('RxJS Subject "next" method must be implemented'); - } - - unsubscribe(): void { - throw new Error('RxJS Subject "unsubscribe" method must be implemented'); - } -} - /** A representation of any set of values over any amount of time. This is the most basic building block of RxJS. */ export abstract class ObservableFacade { /** Observable constructor, you can provide a subscribe function that is called when the Observable is initially subscribed to. */ @@ -80,6 +70,20 @@ export abstract class ObservableFacade { } } +/** + * A Subject is a special type of Observable that allows values to be + * multicasted to many Observers. Subjects are like EventEmitters. + */ +export abstract class SubjectFacade extends ObservableFacade { + next(value?: T): void { + throw new Error('RxJS Subject "next" method must be implemented'); + } + + unsubscribe(): void { + throw new Error('RxJS Subject "unsubscribe" method must be implemented'); + } +} + /** * A Subject is a special type of Observable that allows values to be * multicasted to many Observers. Subjects are like EventEmitters. diff --git a/packages/common/src/services/utilities.ts b/packages/common/src/services/utilities.ts index 259e28cd5..ea3b8ffb8 100644 --- a/packages/common/src/services/utilities.ts +++ b/packages/common/src/services/utilities.ts @@ -5,6 +5,7 @@ const moment = (moment_ as any)['default'] || moment_; // patch to fix rollup "m import { FieldType, OperatorString, OperatorType } from '../enums/index'; import { GridOption } from '../interfaces/index'; +import { ObservableFacade, RxJsFacade, SubjectFacade } from './rxjsFacade'; /** * Add an item to an array only when the item does not exists, when the item is an object we will be using their "id" to compare @@ -48,6 +49,28 @@ export function arrayRemoveItemByIndex(array: T[], index: number): T[] { return array.filter((_el: T, i: number) => index !== i); } +/** + * Try casting an input of type Promise | Observable into a Promise type. + * @param object which could be of type Promise or Observable + * @param fromServiceName string representing the caller service name and will be used if we throw a casting problem error + */ +export function castObservableToPromise(rxjs: RxJsFacade, input: Promise | ObservableFacade | SubjectFacade, fromServiceName = ''): Promise { + let promise: any = input; + + if (input instanceof Promise) { + // if it's already a Promise then return it + return input; + } else if (rxjs.isObservable(input)) { + promise = input.pipe(rxjs.first()).toPromise(); + } + + if (!(promise instanceof Promise)) { + throw new Error(`Something went wrong, Slickgrid-Universal ${fromServiceName} is not able to convert the Observable into a Promise.`); + } + + return promise; +} + /** * Convert a flat array (with "parentId" references) into a hierarchical dataset structure (where children are array(s) inside their parent objects) * @param flatArray input array (flat dataset) diff --git a/packages/rxjs-observable/src/rxjs.resource.ts b/packages/rxjs-observable/src/rxjs.resource.ts index f67dad8ec..cea3b3792 100644 --- a/packages/rxjs-observable/src/rxjs.resource.ts +++ b/packages/rxjs-observable/src/rxjs.resource.ts @@ -1,6 +1,6 @@ import { RxJsFacade } from '@slickgrid-universal/common'; -import { iif, isObservable, Observable, Subject, EMPTY } from 'rxjs'; -import { takeUntil } from 'rxjs/operators'; +import { EMPTY, iif, isObservable, Observable, OperatorFunction, Subject } from 'rxjs'; +import { first, takeUntil } from 'rxjs/operators'; export class RxJsResource implements RxJsFacade { readonly className = 'RxJsResource'; @@ -23,6 +23,10 @@ export class RxJsResource implements RxJsFacade { return new Subject(); } + first(predicate?: null, defaultValue?: D): OperatorFunction { + return first(predicate, defaultValue); + } + iif(condition: () => boolean, trueResult?: any, falseResult?: any): Observable { return iif(condition, trueResult, falseResult); } diff --git a/packages/vanilla-bundle/src/components/slick-vanilla-grid-bundle.ts b/packages/vanilla-bundle/src/components/slick-vanilla-grid-bundle.ts index ccee54a42..34cd08014 100644 --- a/packages/vanilla-bundle/src/components/slick-vanilla-grid-bundle.ts +++ b/packages/vanilla-bundle/src/components/slick-vanilla-grid-bundle.ts @@ -128,6 +128,7 @@ export class SlickVanillaGridBundle { backendUtilityService!: BackendUtilityService; collectionService!: CollectionService; extensionService!: ExtensionService; + filterFactory!: FilterFactory; filterService!: FilterService; gridEventService!: GridEventService; gridService!: GridService; @@ -323,8 +324,8 @@ export class SlickVanillaGridBundle { this.sharedService = services?.sharedService ?? new SharedService(); this.collectionService = services?.collectionService ?? new CollectionService(this.translaterService); this.extensionUtility = services?.extensionUtility ?? new ExtensionUtility(this.sharedService, this.translaterService); - const filterFactory = new FilterFactory(slickgridConfig, this.translaterService, this.collectionService); - this.filterService = services?.filterService ?? new FilterService(filterFactory, this._eventPubSubService, this.sharedService, this.backendUtilityService); + this.filterFactory = new FilterFactory(slickgridConfig, this.translaterService, this.collectionService); + this.filterService = services?.filterService ?? new FilterService(this.filterFactory, this._eventPubSubService, this.sharedService, this.backendUtilityService); this.resizerService = services?.resizerService ?? new ResizerService(this._eventPubSubService); this.sortService = services?.sortService ?? new SortService(this.sharedService, this._eventPubSubService, this.backendUtilityService); this.treeDataService = services?.treeDataService ?? new TreeDataService(this.sharedService); @@ -530,6 +531,9 @@ export class SlickVanillaGridBundle { this.sharedService.frozenVisibleColumnId = this._columnDefinitions[frozenColumnIndex]?.id ?? ''; } + // get any possible Services that user want to register + this.registerResources(); + // initialize the SlickGrid grid this.slickGrid.init(); @@ -614,70 +618,12 @@ export class SlickVanillaGridBundle { this.gridEventService.bindOnCellChange(this.slickGrid); this.gridEventService.bindOnClick(this.slickGrid); - // get any possible Services that user want to register - this._registeredResources = this.gridOptions.registerExternalResources || []; - - // when using Salesforce, we want the Export to CSV always enabled without registering it - if (this.gridOptions.enableTextExport && this.gridOptions.useSalesforceDefaultGridOptions) { - const textExportService = new TextExportService(); - this._registeredResources.push(textExportService); - } - - // at this point, we consider all the registered services as external services, anything else registered afterward aren't external - if (Array.isArray(this._registeredResources)) { - this.sharedService.externalRegisteredResources = this._registeredResources; - } - - // push all other Services that we want to be registered - this._registeredResources.push(this.gridService, this.gridStateService); - - // when using Grouping/DraggableGrouping/Colspan register its Service - if (this.gridOptions.createPreHeaderPanel && !this.gridOptions.enableDraggableGrouping) { - this._registeredResources.push(this.groupingService); - } - - // when using Tree Data View, register its Service - if (this.gridOptions.enableTreeData) { - this._registeredResources.push(this.treeDataService); - } - - // when user enables translation, we need to translate Headers on first pass & subsequently in the bindDifferentHooks - if (this.gridOptions.enableTranslate) { - this.extensionService.translateColumnHeaders(); - } - - // also initialize (render) the empty warning component - this.slickEmptyWarning = new SlickEmptyWarningComponent(); - this._registeredResources.push(this.slickEmptyWarning); - - // also initialize (render) the pagination component when using the salesforce default options - // however before adding a new instance, just make sure there isn't one that might have been loaded by calling "registerExternalResources" - if (this.gridOptions.enableCompositeEditor && this.gridOptions.useSalesforceDefaultGridOptions) { - if (!this._registeredResources.some((resource => resource instanceof SlickCompositeEditorComponent))) { - this.slickCompositeEditor = new SlickCompositeEditorComponent(); - this._registeredResources.push(this.slickCompositeEditor); - } - } - // bind the Backend Service API callback functions only after the grid is initialized // because the preProcess() and onInit() might get triggered if (this.gridOptions?.backendServiceApi) { this.bindBackendCallbackFunctions(this.gridOptions); } - // bind & initialize all Components/Services that were tagged as enabled - // register all services by executing their init method and providing them with the Grid object - if (Array.isArray(this._registeredResources)) { - for (const resource of this._registeredResources) { - if (typeof resource.init === 'function') { - resource.init(this.slickGrid, this.universalContainerService); - } - if (resource?.className === 'RxJsResource') { - this.registerRxJsResource(resource as RxJsFacade); - } - } - } - // publish & dispatch certain events this._eventPubSubService.publish('onGridCreated', this.slickGrid); @@ -1313,10 +1259,70 @@ export class SlickVanillaGridBundle { } } + private registerResources() { + this._registeredResources = this.gridOptions.registerExternalResources || []; + + // when using Salesforce, we want the Export to CSV always enabled without registering it + if (this.gridOptions.enableTextExport && this.gridOptions.useSalesforceDefaultGridOptions) { + const textExportService = new TextExportService(); + this._registeredResources.push(textExportService); + } + + // at this point, we consider all the registered services as external services, anything else registered afterward aren't external + if (Array.isArray(this._registeredResources)) { + this.sharedService.externalRegisteredResources = this._registeredResources; + } + + // push all other Services that we want to be registered + this._registeredResources.push(this.gridService, this.gridStateService); + + // when using Grouping/DraggableGrouping/Colspan register its Service + if (this.gridOptions.createPreHeaderPanel && !this.gridOptions.enableDraggableGrouping) { + this._registeredResources.push(this.groupingService); + } + + // when using Tree Data View, register its Service + if (this.gridOptions.enableTreeData) { + this._registeredResources.push(this.treeDataService); + } + + // when user enables translation, we need to translate Headers on first pass & subsequently in the bindDifferentHooks + if (this.gridOptions.enableTranslate) { + this.extensionService.translateColumnHeaders(); + } + + // also initialize (render) the empty warning component + this.slickEmptyWarning = new SlickEmptyWarningComponent(); + this._registeredResources.push(this.slickEmptyWarning); + + // also initialize (render) the pagination component when using the salesforce default options + // however before adding a new instance, just make sure there isn't one that might have been loaded by calling "registerExternalResources" + if (this.gridOptions.enableCompositeEditor && this.gridOptions.useSalesforceDefaultGridOptions) { + if (!this._registeredResources.some((resource => resource instanceof SlickCompositeEditorComponent))) { + this.slickCompositeEditor = new SlickCompositeEditorComponent(); + this._registeredResources.push(this.slickCompositeEditor); + } + } + + // bind & initialize all Components/Services that were tagged as enabled + // register all services by executing their init method and providing them with the Grid object + if (Array.isArray(this._registeredResources)) { + for (const resource of this._registeredResources) { + if (typeof resource.init === 'function') { + resource.init(this.slickGrid, this.universalContainerService); + } + if (resource?.className === 'RxJsResource') { + this.registerRxJsResource(resource as RxJsFacade); + } + } + } + } + /** Register the RxJS Resource in all necessary services which uses */ private registerRxJsResource(resource: RxJsFacade) { this.rxjs = resource; this.backendUtilityService.addRxJsResource(this.rxjs); + this.filterFactory.addRxJsResource(this.rxjs); this.filterService.addRxJsResource(this.rxjs); this.sortService.addRxJsResource(this.rxjs); this.paginationService.addRxJsResource(this.rxjs); diff --git a/test/cypress/integration/example15.spec.js b/test/cypress/integration/example15.spec.js new file mode 100644 index 000000000..34452ab9a --- /dev/null +++ b/test/cypress/integration/example15.spec.js @@ -0,0 +1,630 @@ +/// + +describe('Example 15 - OData Grid using RxJS', () => { + beforeEach(() => { + // create a console.log spy for later use + cy.window().then((win) => { + cy.spy(win.console, 'log'); + }); + }); + + it('should display Example title', () => { + cy.visit(`${Cypress.config('baseExampleUrl')}/example15`); + cy.get('h3').should('contain', 'Example 15 - Grid with OData Backend Service using RxJS Observables'); + }); + + describe('when "enableCount" is set', () => { + it('should have default OData query', () => { + cy.get('[data-test=alert-odata-query]').should('exist'); + cy.get('[data-test=alert-odata-query]').should('contain', 'OData Query'); + + // wait for the query to finish + cy.get('[data-test=status]').should('contain', 'finished'); + + cy.get('[data-test=odata-query-result]') + .should(($span) => { + expect($span.text()).to.eq(`$inlinecount=allpages&$top=20&$skip=20&$orderby=Name asc&$filter=(Gender eq 'male')`); + }); + }); + + it('should change Pagination to next page', () => { + cy.get('.icon-seek-next').click(); + + // wait for the query to finish + cy.get('[data-test=status]').should('contain', 'finished'); + + cy.get('[data-test=page-number-input]') + .invoke('val') + .then(pageNumber => expect(pageNumber).to.eq('3')); + + cy.get('[data-test=page-count]') + .contains('3'); + + cy.get('[data-test=item-from]') + .contains('41'); + + cy.get('[data-test=item-to]') + .contains('50'); + + cy.get('[data-test=total-items]') + .contains('50'); + + cy.get('[data-test=odata-query-result]') + .should(($span) => { + expect($span.text()).to.eq(`$inlinecount=allpages&$top=20&$skip=40&$orderby=Name asc&$filter=(Gender eq 'male')`); + }); + + cy.window().then((win) => { + expect(win.console.log).to.have.callCount(1); + expect(win.console.log).to.be.calledWith('Client sample, Grid State changed:: ', { newValues: { pageNumber: 3, pageSize: 20 }, type: 'pagination' }); + }); + }); + + it('should change Pagination to first page with 10 items', () => { + cy.get('#items-per-page-label').select('10'); + + // wait for the query to start and finish + cy.get('[data-test=status]').should('contain', 'loading...'); + cy.get('[data-test=status]').should('contain', 'finished'); + + cy.get('[data-test=page-number-input]') + .invoke('val') + .then(pageNumber => expect(pageNumber).to.eq('1')); + + cy.get('[data-test=page-count]') + .contains('5'); + + cy.get('[data-test=item-from]') + .contains('1'); + + cy.get('[data-test=item-to]') + .contains('10'); + + cy.get('[data-test=total-items]') + .contains('50'); + + cy.get('[data-test=odata-query-result]') + .should(($span) => { + expect($span.text()).to.eq(`$inlinecount=allpages&$top=10&$orderby=Name asc&$filter=(Gender eq 'male')`); + }); + + cy.window().then((win) => { + expect(win.console.log).to.have.callCount(1); + expect(win.console.log).to.be.calledWith('Client sample, Grid State changed:: ', { newValues: { pageNumber: 1, pageSize: 10 }, type: 'pagination' }); + }); + }); + + it('should change Pagination to last page', () => { + cy.get('.icon-seek-end').click(); + + // wait for the query to finish + cy.get('[data-test=status]').should('contain', 'finished'); + + cy.get('[data-test=page-number-input]') + .invoke('val') + .then(pageNumber => expect(pageNumber).to.eq('5')); + + cy.get('[data-test=page-count]') + .contains('5'); + + cy.get('[data-test=item-from]') + .contains('41'); + + cy.get('[data-test=item-to]') + .contains('50'); + + cy.get('[data-test=total-items]') + .contains('50'); + + cy.get('[data-test=odata-query-result]') + .should(($span) => { + expect($span.text()).to.eq(`$inlinecount=allpages&$top=10&$skip=40&$orderby=Name asc&$filter=(Gender eq 'male')`); + }); + + cy.window().then((win) => { + expect(win.console.log).to.have.callCount(1); + expect(win.console.log).to.be.calledWith('Client sample, Grid State changed:: ', { newValues: { pageNumber: 5, pageSize: 10 }, type: 'pagination' }); + }); + }); + + it('should change Pagination to first page using the external button', () => { + cy.get('[data-test=goto-first-page') + .click(); + + // wait for the query to finish + cy.get('[data-test=status]').should('contain', 'finished'); + + cy.get('[data-test=page-number-input]') + .invoke('val') + .then(pageNumber => expect(pageNumber).to.eq('1')); + + cy.get('[data-test=page-count]') + .contains('5'); + + cy.get('[data-test=item-from]') + .contains('1'); + + cy.get('[data-test=item-to]') + .contains('10'); + + cy.get('[data-test=total-items]') + .contains('50'); + + cy.get('[data-test=odata-query-result]') + .should(($span) => { + expect($span.text()).to.eq(`$inlinecount=allpages&$top=10&$orderby=Name asc&$filter=(Gender eq 'male')`); + }); + + cy.window().then((win) => { + expect(win.console.log).to.have.callCount(1); + expect(win.console.log).to.be.calledWith('Client sample, Grid State changed:: ', { newValues: { pageNumber: 1, pageSize: 10 }, type: 'pagination' }); + }); + }); + + it('should change Pagination to last page using the external button', () => { + cy.get('[data-test=goto-last-page') + .click(); + + // wait for the query to finish + cy.get('[data-test=status]').should('contain', 'finished'); + + cy.get('[data-test=page-number-input]') + .invoke('val') + .then(pageNumber => expect(pageNumber).to.eq('5')); + + cy.get('[data-test=page-count]') + .contains('5'); + + cy.get('[data-test=item-from]') + .contains('41'); + + cy.get('[data-test=item-to]') + .contains('50'); + + cy.get('[data-test=total-items]') + .contains('50'); + + cy.get('[data-test=odata-query-result]') + .should(($span) => { + expect($span.text()).to.eq(`$inlinecount=allpages&$top=10&$skip=40&$orderby=Name asc&$filter=(Gender eq 'male')`); + }); + + cy.window().then((win) => { + expect(win.console.log).to.have.callCount(1); + expect(win.console.log).to.be.calledWith('Client sample, Grid State changed:: ', { newValues: { pageNumber: 5, pageSize: 10 }, type: 'pagination' }); + }); + }); + + it('should Clear all Filters and expect to go back to first page', () => { + cy.get('.grid15') + .find('button.slick-gridmenu-button') + .trigger('click') + .click(); + + cy.get(`.slick-gridmenu:visible`) + .find('.slick-gridmenu-item') + .first() + .find('span') + .contains('Clear all Filters') + .click(); + + // wait for the query to finish + cy.get('[data-test=status]').should('contain', 'finished'); + + cy.get('[data-test=page-number-input]') + .invoke('val') + .then(pageNumber => expect(pageNumber).to.eq('1')); + + cy.get('[data-test=page-count]') + .contains('10'); + + cy.get('[data-test=item-from]') + .contains('1'); + + cy.get('[data-test=item-to]') + .contains('10'); + + cy.get('[data-test=total-items]') + .contains('100'); + + cy.get('[data-test=odata-query-result]') + .should(($span) => { + expect($span.text()).to.eq(`$inlinecount=allpages&$top=10&$orderby=Name asc`); + }); + + cy.window().then((win) => { + expect(win.console.log).to.have.callCount(2); + expect(win.console.log).to.be.calledWith('Client sample, Grid State changed:: ', { newValues: [], type: 'filter' }); + expect(win.console.log).to.be.calledWith('Client sample, Grid State changed:: ', { newValues: { pageNumber: 1, pageSize: 10 }, type: 'pagination' }); + }); + }); + + it('should Clear all Sorting', () => { + cy.get('.grid15') + .find('button.slick-gridmenu-button') + .trigger('click') + .click(); + + cy.get(`.slick-gridmenu:visible`) + .find('.slick-gridmenu-item:nth(1)') + .find('span') + .contains('Clear all Sorting') + .click(); + + // wait for the query to finish + cy.get('[data-test=status]').should('contain', 'finished'); + + cy.get('[data-test=odata-query-result]') + .should(($span) => { + expect($span.text()).to.eq(`$inlinecount=allpages&$top=10`); + }); + + cy.window().then((win) => { + expect(win.console.log).to.have.callCount(1); + expect(win.console.log).to.be.calledWith('Client sample, Grid State changed:: ', { newValues: [], type: 'sorter' }); + }); + }); + + it('should use "substringof" when OData version is set to 2', () => { + cy.get('.search-filter.filter-name') + .find('input') + .type('John'); + + // wait for the query to finish + cy.get('[data-test=status]').should('contain', 'finished'); + + cy.get('[data-test=odata-query-result]') + .should(($span) => { + expect($span.text()).to.eq(`$inlinecount=allpages&$top=10&$filter=(substringof('John', Name))`); + }); + + cy.get('.grid15') + .find('.slick-row') + .should('have.length', 1); + }); + + it('should use "contains" when OData version is set to 4', () => { + cy.get('[data-test=version4]') + .click(); + + cy.get('.search-filter.filter-name') + .find('input') + .type('John'); + + // wait for the query to finish + cy.get('[data-test=status]').should('contain', 'finished'); + + cy.get('[data-test=odata-query-result]') + .should(($span) => { + expect($span.text()).to.eq(`$count=true&$top=10&$filter=(contains(Name, 'John'))`); + }); + + cy.get('.grid15') + .find('.slick-row') + .should('have.length', 1); + }); + + it('should click on Set Dynamic Filter and expect query and filters to be changed', () => { + cy.get('[data-test=set-dynamic-filter]') + .click(); + + cy.get('.search-filter.filter-name select') + .should('have.value', 'a*'); + + cy.get('.search-filter.filter-name') + .find('input') + .invoke('val') + .then(text => expect(text).to.eq('A')); + + // wait for the query to finish + cy.get('[data-test=status]').should('contain', 'finished'); + + cy.get('[data-test=odata-query-result]') + .should(($span) => { + expect($span.text()).to.eq(`$count=true&$top=10&$filter=(startswith(Name, 'A'))`); + }); + + cy.get('.grid15') + .find('.slick-row') + .should('have.length', 5); + }); + }); + + describe('when "enableCount" is unchecked (not set)', () => { + it('should Clear all Filters, set 20 items per page & uncheck "enableCount"', () => { + cy.get('.grid15') + .find('button.slick-gridmenu-button') + .trigger('click') + .click(); + + cy.get(`.slick-gridmenu:visible`) + .find('.slick-gridmenu-item') + .first() + .find('span') + .contains('Clear all Filters') + .click(); + + cy.get('#items-per-page-label').select('20'); + + cy.get('[data-test=enable-count]').click(); + + // wait for the query to finish + cy.get('[data-test=status]').should('contain', 'finished'); + + cy.get('[data-test=odata-query-result]') + .should(($span) => { + expect($span.text()).to.eq(`$top=20`); + }); + }); + + it('should change Pagination to next page', () => { + cy.get('.icon-seek-next').click(); + + // wait for the query to finish + cy.get('[data-test=status]').should('contain', 'finished'); + + cy.get('[data-test=odata-query-result]') + .should(($span) => { + expect($span.text()).to.eq(`$top=20&$skip=20`); + }); + }); + + it('should change Pagination to first page with 10 items', () => { + cy.get('#items-per-page-label').select('10'); + + // wait for the query to start and finish + cy.get('[data-test=status]').should('contain', 'loading...'); + cy.get('[data-test=status]').should('contain', 'finished'); + + cy.get('[data-test=odata-query-result]') + .should(($span) => { + expect($span.text()).to.eq(`$top=10`); + }); + }); + + it('should change Pagination to last page', () => { + cy.get('.icon-seek-end').click(); + + // wait for the query to finish + cy.get('[data-test=status]').should('contain', 'finished'); + + cy.get('[data-test=odata-query-result]') + .should(($span) => { + expect($span.text()).to.eq(`$top=10&$skip=90`); + }); + }); + + it('should click on "Name" column to sort it Ascending', () => { + cy.get('.slick-header-columns') + .children('.slick-header-column:nth(1)') + .click(); + + cy.get('.slick-header-columns') + .children('.slick-header-column:nth(1)') + .find('.slick-sort-indicator.slick-sort-indicator-asc') + .should('be.visible'); + + // wait for the query to finish + cy.get('[data-test=status]').should('contain', 'finished'); + + cy.get('[data-test=odata-query-result]') + .should(($span) => { + expect($span.text()).to.eq(`$top=10&$skip=90&$orderby=Name asc`); + }); + }); + + it('should Clear all Sorting', () => { + cy.get('.grid15') + .find('button.slick-gridmenu-button') + .trigger('click') + .click(); + + cy.get(`.slick-gridmenu:visible`) + .find('.slick-gridmenu-item:nth(1)') + .find('span') + .contains('Clear all Sorting') + .click(); + + // wait for the query to finish + cy.get('[data-test=status]').should('contain', 'finished'); + + cy.get('[data-test=odata-query-result]') + .should(($span) => { + expect($span.text()).to.eq(`$top=10&$skip=90`); + }); + }); + + it('should click on Set Dynamic Filter and expect query and filters to be changed', () => { + cy.get('[data-test=set-dynamic-filter]') + .click(); + + cy.get('.search-filter.filter-name select') + .should('have.value', 'a*'); + + cy.get('.search-filter.filter-name') + .find('input') + .invoke('val') + .then(text => expect(text).to.eq('A')); + + // wait for the query to finish + cy.get('[data-test=status]').should('contain', 'finished'); + + cy.get('[data-test=odata-query-result]') + .should(($span) => { + expect($span.text()).to.eq(`$top=10&$filter=(startswith(Name, 'A'))`); + }); + + cy.get('.grid15') + .find('.slick-row') + .should('have.length', 5); + }); + + it('should use "substringof" when OData version is set to 2', () => { + cy.get('[data-test=version2]') + .click(); + + cy.get('.search-filter.filter-name') + .find('input') + .type('John'); + + // wait for the query to finish + cy.get('[data-test=status]').should('contain', 'finished'); + + cy.get('[data-test=odata-query-result]') + .should(($span) => { + expect($span.text()).to.eq(`$top=10&$filter=(substringof('John', Name))`); + }); + + cy.get('.grid15') + .find('.slick-row') + .should('have.length', 1); + }); + + it('should use "contains" when OData version is set to 4', () => { + cy.get('[data-test=version4]') + .click(); + + cy.get('.search-filter.filter-name') + .find('input') + .type('John'); + + // wait for the query to finish + cy.get('[data-test=status]').should('contain', 'finished'); + + cy.get('[data-test=odata-query-result]') + .should(($span) => { + expect($span.text()).to.eq(`$top=10&$filter=(contains(Name, 'John'))`); + }); + + cy.get('.grid15') + .find('.slick-row') + .should('have.length', 1); + }); + }); + + describe('General Pagination Behaviors', () => { + it('should type a filter which returns an empty dataset', () => { + cy.get('.search-filter.filter-name') + .find('input') + .clear() + .type('xy'); + + cy.get('[data-test=odata-query-result]') + .should(($span) => { + expect($span.text()).to.eq(`$top=10&$filter=(contains(Name, 'xy'))`); + }); + + // wait for the query to finish + cy.get('[data-test=status]').should('contain', 'finished'); + + cy.get('.slick-empty-data-warning:visible') + .contains('No data to display.'); + }); + + it('should display page 0 of 0 but hide pagination from/to numbers when filtered data "xy" returns an empty dataset', () => { + cy.get('[data-test=page-count]') + .contains('0'); + + cy.get('[data-test=item-from]') + .should('not.be.visible'); + + cy.get('[data-test=item-to]') + .should('not.be.visible'); + + cy.get('[data-test=total-items]') + .contains('0'); + + cy.get('[data-test=odata-query-result]') + .should(($span) => { + expect($span.text()).to.eq(`$top=10&$filter=(contains(Name, 'xy'))`); + }); + + cy.get('[data-test=page-number-input]') + .invoke('val') + .then(pageNumber => expect(pageNumber).to.eq('0')); + }); + + it('should erase part of the filter so that it filters with "x"', () => { + cy.get('.search-filter.filter-name') + .find('input') + .type('{backspace}'); + + cy.get('[data-test=odata-query-result]') + .should(($span) => { + expect($span.text()).to.eq(`$top=10&$filter=(contains(Name, 'x'))`); + }); + + // wait for the query to finish + cy.get('[data-test=status]').should('contain', 'finished'); + + cy.get('.slick-empty-data-warning') + .contains('No data to display.') + .should('not.be.visible'); + + cy.window().then((win) => { + // expect(win.console.log).to.have.callCount(2); + expect(win.console.log).to.be.calledWith('Client sample, Grid State changed:: ', { newValues: [{ columnId: 'name', operator: 'Contains', searchTerms: ['x'] }], type: 'filter' }); + // expect(win.console.log).to.be.calledWith('Client sample, Grid State changed:: ', { newValues: { pageNumber: 1, pageSize: 10 }, type: 'pagination' }); + }); + }); + + it('should display page 1 of 1 with 2 items after erasing part of the filter to be "x" which should return 1 page', () => { + cy.wait(50); + + cy.get('[data-test=page-count]') + .contains('1'); + + cy.get('[data-test=item-from]') + .contains('1'); + + cy.get('[data-test=item-to]') + .contains('2'); + + cy.get('[data-test=total-items]') + .contains('2'); + + cy.get('[data-test=page-number-input]') + .invoke('val') + .then(pageNumber => expect(pageNumber).to.eq('1')); + }); + }); + + describe('Set Dynamic Sorting', () => { + it('should click on "Set Filters Dynamically" then on "Set Sorting Dynamically"', () => { + cy.get('[data-test=set-dynamic-filter]') + .click(); + + // wait for the query to finish + cy.get('[data-test=status]').should('contain', 'loading'); + cy.get('[data-test=status]').should('contain', 'finished'); + + cy.get('[data-test=set-dynamic-sorting]') + .click(); + + cy.get('[data-test=status]').should('contain', 'loading'); + cy.get('[data-test=status]').should('contain', 'finished'); + }); + + it('should expect the grid to be sorted by "Name" descending', () => { + cy.get('.grid15') + .get('.slick-header-column:nth(1)') + .find('.slick-sort-indicator-desc') + .should('have.length', 1); + + cy.get('.slick-row') + .first() + .children('.slick-cell:nth(1)') + .should('contain', 'Ayers Hood'); + + cy.get('.slick-row') + .last() + .children('.slick-cell:nth(1)') + .should('contain', 'Alexander Foley'); + + cy.get('[data-test=odata-query-result]') + .should(($span) => { + expect($span.text()).to.eq(`$top=10&$orderby=Name desc&$filter=(startswith(Name, 'A'))`); + }); + }); + }); +}); diff --git a/test/rxjsResourceStub.ts b/test/rxjsResourceStub.ts index 197c91ec1..5edd5836c 100644 --- a/test/rxjsResourceStub.ts +++ b/test/rxjsResourceStub.ts @@ -1,6 +1,6 @@ import { RxJsFacade } from '@slickgrid-universal/common'; -import { iif, isObservable, Observable, Subject, EMPTY } from 'rxjs'; -import { takeUntil } from 'rxjs/operators'; +import { EMPTY, iif, isObservable, Observable, OperatorFunction, Subject } from 'rxjs'; +import { first, takeUntil } from 'rxjs/operators'; export class RxJsResourceStub implements RxJsFacade { readonly className = 'RxJsResource'; @@ -28,6 +28,10 @@ export class RxJsResourceStub implements RxJsFacade { return EMPTY; } + first(predicate?: null, defaultValue?: D): OperatorFunction { + return first(predicate, defaultValue); + } + iif(condition: () => boolean, trueResult?: any, falseResult?: any): Observable { return iif(condition, trueResult, falseResult); } From dd53eff2db818b343e062b6721f591fb8848890e Mon Sep 17 00:00:00 2001 From: ghiscoding Date: Tue, 16 Mar 2021 21:49:13 -0400 Subject: [PATCH 10/21] refactor: add RxJS to all potential Editors & add to demo --- .../src/examples/example15.ts | 50 +++--- .../__tests__/autoCompleteFilter.spec.ts | 121 +++++++++++++- .../filters/__tests__/filterFactory.spec.ts | 81 +++++++++ .../filters/__tests__/selectFilter.spec.ts | 156 +++++++++++++++++- .../common/src/filters/autoCompleteFilter.ts | 55 ++---- packages/common/src/filters/filterFactory.ts | 2 +- .../common/src/filters/filterUtilities.ts | 92 ++++++++++- packages/common/src/filters/selectFilter.ts | 80 +-------- .../src/services/__tests__/rxjsFacade.spec.ts | 4 + .../src/services/__tests__/utilities.spec.ts | 32 +++- packages/common/src/services/rxjsFacade.ts | 9 +- packages/common/src/services/utilities.ts | 20 ++- .../rxjs-observable/src/rxjs-resource.spec.ts | 7 +- .../components/slick-vanilla-grid-bundle.ts | 31 +++- 14 files changed, 585 insertions(+), 155 deletions(-) create mode 100644 packages/common/src/filters/__tests__/filterFactory.spec.ts diff --git a/examples/webpack-demo-vanilla-bundle/src/examples/example15.ts b/examples/webpack-demo-vanilla-bundle/src/examples/example15.ts index e2f0883de..b1173c31e 100644 --- a/examples/webpack-demo-vanilla-bundle/src/examples/example15.ts +++ b/examples/webpack-demo-vanilla-bundle/src/examples/example15.ts @@ -1,4 +1,4 @@ -import { BindingEventService, Column, FieldType, Filters, GridOption, GridStateChange, Metrics, OperatorType, } from '@slickgrid-universal/common'; +import { BindingEventService, Column, Editors, FieldType, Filters, GridOption, GridStateChange, Metrics, OperatorType, } from '@slickgrid-universal/common'; import { GridOdataService, OdataServiceApi, OdataOption } from '@slickgrid-universal/odata'; import { RxJsResource } from '@slickgrid-universal/rxjs-observable'; import { Slicker, SlickVanillaGridBundle } from '@slickgrid-universal/vanilla-bundle'; @@ -57,6 +57,11 @@ export class Example15 { }, { id: 'gender', name: 'Gender', field: 'gender', filterable: true, + editor: { + model: Editors.singleSelect, + // collection: this.genderCollection, + collectionAsync: of(this.genderCollection) + }, filter: { model: Filters.singleSelect, collectionAsync: of(this.genderCollection) @@ -76,6 +81,8 @@ export class Example15 { hideInFilterHeaderRow: false, hideInColumnTitleRow: true }, + editable: true, + autoEdit: true, enableCellNavigation: true, enableFiltering: true, enableCheckboxSelector: true, @@ -116,38 +123,33 @@ export class Example15 { } addOtherGender() { - this.isOtherGenderAdded = true; + const newGender = { value: 'other', label: 'other' }; const genderColumn = this.columnDefinitions.find((column: Column) => column.id === 'gender'); + if (genderColumn) { - this.genderCollection.push({ value: 'other', label: 'other' }); + let editorCollection = genderColumn.editor!.collection; const filterCollectionAsync = genderColumn.filter!.collectionAsync; - // const editorCollection = genderColumn.editor!.collection; - - // if (Array.isArray(editorCollection)) { - // // add the new row to the grid - // this.angularGrid.gridService.addItemToDatagrid(newRows[0]); - // // then refresh the Editor "collection", we have 2 ways of doing it + if (Array.isArray(editorCollection)) { + // refresh the Editor "collection", we have 2 ways of doing it - // // Push to the Editor "collection" - // editorCollection.push({ value: lastRowIndex, label: lastRowIndex, prefix: 'Task' }); + // 1. simply Push to the Editor "collection" + // editorCollection.push(newGender); - // // or replace entire "collection" - // // durationColumnDef.editor.collection = [...collection, ...[{ value: lastRowIndex, label: lastRowIndex }]]; + // 2. or replace the entire "collection" + genderColumn.editor.collection = [...this.genderCollection, newGender]; + editorCollection = genderColumn.editor.collection; - // // for the Filter only, we have a trigger an RxJS/Subject change with the new collection - // // we do this because Filter(s) are shown at all time, while on Editor it's unnecessary since they are only shown when opening them - // if (filterCollectionAsync instanceof Subject) { - // filterCollectionAsync.next(editorCollection); - // } - // } - - // for the Filter only, we have a trigger an RxJS/Subject change with the new collection - // we do this because Filter(s) are shown at all time, while on Editor it's unnecessary since they are only shown when opening them - if (filterCollectionAsync instanceof Subject) { - filterCollectionAsync.next(this.genderCollection); + // However, for the Filter only, we have to trigger an RxJS/Subject change with the new collection + // we do this because Filter(s) are shown at all time, while on Editor it's unnecessary since they are only shown when opening them + if (filterCollectionAsync instanceof Subject) { + filterCollectionAsync.next(editorCollection); + } } } + + // don't add it more than once + this.isOtherGenderAdded = true; } displaySpinner(isProcessing) { diff --git a/packages/common/src/filters/__tests__/autoCompleteFilter.spec.ts b/packages/common/src/filters/__tests__/autoCompleteFilter.spec.ts index b2fc357a5..169ba4ba5 100644 --- a/packages/common/src/filters/__tests__/autoCompleteFilter.spec.ts +++ b/packages/common/src/filters/__tests__/autoCompleteFilter.spec.ts @@ -1,9 +1,12 @@ +import { of, Subject } from 'rxjs'; + import { Filters } from '../index'; import { AutoCompleteFilter } from '../autoCompleteFilter'; import { FieldType, OperatorType, KeyCode } from '../../enums/index'; import { AutocompleteOption, Column, FilterArguments, GridOption, SlickGrid } from '../../interfaces/index'; import { CollectionService } from '../../services/collection.service'; import { HttpStub } from '../../../../../test/httpClientStub'; +import { RxJsResourceStub } from '../../../../../test/rxjsResourceStub'; import { TranslateServiceStub } from '../../../../../test/translateServiceStub'; jest.useFakeTimers(); @@ -652,7 +655,123 @@ describe('AutoCompleteFilter', () => { const promise = Promise.resolve({ hello: 'world' }); mockColumn.filter!.collectionAsync = promise; filter.init(filterArguments).catch((e) => { - expect(e.toString()).toContain(`Something went wrong while trying to pull the collection from the "collectionAsync" call in the AutoComplete Filter, the collection is not a valid array.`); + expect(e.toString()).toContain(`Something went wrong while trying to pull the collection from the "collectionAsync" call in the Filter, the collection is not a valid array.`); + done(); + }); + }); + }); + + describe('AutoCompleteFilter using RxJS Observables', () => { + let divContainer: HTMLDivElement; + let filter: AutoCompleteFilter; + let filterArguments: FilterArguments; + let spyGetHeaderRow; + let mockColumn: Column; + let collectionService: CollectionService; + let rxjs: RxJsResourceStub; + let translaterService: TranslateServiceStub; + const http = new HttpStub(); + + beforeEach(() => { + translaterService = new TranslateServiceStub(); + collectionService = new CollectionService(translaterService); + rxjs = new RxJsResourceStub(); + + divContainer = document.createElement('div'); + divContainer.innerHTML = template; + document.body.appendChild(divContainer); + spyGetHeaderRow = jest.spyOn(gridStub, 'getHeaderRowColumn').mockReturnValue(divContainer); + + mockColumn = { + id: 'gender', field: 'gender', filterable: true, + filter: { + model: Filters.autoComplete, + } + }; + filterArguments = { + grid: gridStub, + columnDef: mockColumn, + callback: jest.fn() + }; + + filter = new AutoCompleteFilter(translaterService, collectionService, rxjs); + }); + + afterEach(() => { + filter.destroy(); + jest.clearAllMocks(); + }); + + it('should create the filter with a default search term when using "collectionAsync" as an Observable', async () => { + const spyCallback = jest.spyOn(filterArguments, 'callback'); + mockColumn.filter.collectionAsync = of(['male', 'female']); + + filterArguments.searchTerms = ['female']; + await filter.init(filterArguments); + + const filterElm = divContainer.querySelector('input.filter-gender'); + const autocompleteUlElms = document.body.querySelectorAll('ul.ui-autocomplete'); + filter.setValues('male'); + + filterElm.focus(); + filterElm.dispatchEvent(new (window.window as any).Event('input', { keyCode: 97, bubbles: true, cancelable: true })); + const filterFilledElms = divContainer.querySelectorAll('input.filter-gender.filled'); + + expect(autocompleteUlElms.length).toBe(1); + expect(filterFilledElms.length).toBe(1); + expect(spyCallback).toHaveBeenCalledWith(expect.anything(), { columnDef: mockColumn, operator: 'EQ', searchTerms: ['male'], shouldTriggerQuery: true }); + }); + + it('should create the multi-select filter with a "collectionAsync" as an Observable and be able to call next on it', async () => { + const mockCollection = ['male', 'female']; + mockColumn.filter.collectionAsync = of(mockCollection); + + filterArguments.searchTerms = ['female']; + await filter.init(filterArguments); + + const filterElm = divContainer.querySelector('input.filter-gender'); + filter.setValues('male'); + + filterElm.focus(); + filterElm.dispatchEvent(new (window.window as any).Event('input', { keyCode: 97, bubbles: true, cancelable: true })); + + // after await (or timeout delay) we'll get the Subject Observable + mockCollection.push('other'); + (mockColumn.filter.collectionAsync as Subject).next(mockCollection); + + const autocompleteUlElms = document.body.querySelectorAll('ul.ui-autocomplete'); + const filterFilledElms = divContainer.querySelectorAll('input.filter-gender.filled'); + + expect(autocompleteUlElms.length).toBe(1); + expect(filterFilledElms.length).toBe(1); + }); + + it('should create the filter with a value/label pair collectionAsync that is inside an object when "collectionInsideObjectProperty" is defined with a dot notation', async () => { + mockColumn.filter = { + collectionAsync: of({ deep: { myCollection: [{ value: 'other', description: 'other' }, { value: 'male', description: 'male' }, { value: 'female', description: 'female' }] } }), + collectionOptions: { + collectionInsideObjectProperty: 'deep.myCollection' + }, + customStructure: { + value: 'value', + label: 'description', + }, + }; + + await filter.init(filterArguments); + + const filterCollection = filter.collection; + + expect(filterCollection.length).toBe(3); + expect(filterCollection[0]).toEqual({ value: 'other', description: 'other' }); + expect(filterCollection[1]).toEqual({ value: 'male', description: 'male' }); + expect(filterCollection[2]).toEqual({ value: 'female', description: 'female' }); + }); + + it('should throw an error when "collectionAsync" Observable does not return a valid array', (done) => { + mockColumn.filter.collectionAsync = of({ hello: 'world' }); + filter.init(filterArguments).catch((e) => { + expect(e.toString()).toContain(`Something went wrong while trying to pull the collection from the "collectionAsync" call in the Filter, the collection is not a valid array.`); done(); }); }); diff --git a/packages/common/src/filters/__tests__/filterFactory.spec.ts b/packages/common/src/filters/__tests__/filterFactory.spec.ts new file mode 100644 index 000000000..90d899638 --- /dev/null +++ b/packages/common/src/filters/__tests__/filterFactory.spec.ts @@ -0,0 +1,81 @@ +import { Column } from '../../interfaces/index'; +import { InputFilter } from '../inputFilter'; +import { FilterFactory } from '../filterFactory'; +import { SlickgridConfig } from '../../slickgrid-config'; +import { CollectionService } from '../../services/collection.service'; +import { RxJsResourceStub } from '../../../../../test/rxjsResourceStub'; +import { TranslateServiceStub } from '../../../../../test/translateServiceStub'; +import { AutoCompleteFilter } from '../autoCompleteFilter'; + +const mockAutocompleteFilter = jest.fn().mockImplementation(() => ({ + constructor: jest.fn(), + init: jest.fn(), + destroy: jest.fn(), +} as unknown as AutoCompleteFilter)); + +describe('Filter Factory', () => { + jest.mock('../autoCompleteFilter', () => mockAutocompleteFilter); + const Filters = { + input: InputFilter, + autoComplete: mockAutocompleteFilter + }; + let factory: FilterFactory; + let collectionService: CollectionService; + let slickgridConfig: SlickgridConfig; + let rxjsResourceStub: RxJsResourceStub; + let translateService: TranslateServiceStub; + + beforeEach(() => { + translateService = new TranslateServiceStub(); + collectionService = new CollectionService(translateService); + rxjsResourceStub = new RxJsResourceStub(); + slickgridConfig = new SlickgridConfig(); + slickgridConfig.options.defaultFilter = Filters.input; + factory = new FilterFactory(slickgridConfig, translateService, collectionService); + }); + + afterEach(() => { + jest.clearAllMocks(); + }); + + it('should create the factory', () => { + expect(factory).toBeTruthy(); + }); + + it('should create default Filter when no argument provided', () => { + const newFilter = factory.createFilter(); + expect(newFilter).toEqual(new Filters.input()); + }); + + it('should create AutoComplete Filter when that is the Filter provided as a model', () => { + const mockColumn = { filter: { model: Filters.autoComplete } } as Column; + const filterSpy = jest.spyOn(mockAutocompleteFilter.prototype, 'constructor'); + + const newFilter = factory.createFilter(mockColumn.filter); + + expect(newFilter).toBeTruthy(); + expect(filterSpy).toHaveBeenCalledWith(translateService, collectionService, undefined); + }); + + it('should create AutoComplete Filter with RxJS when that is the Filter provided as a model', () => { + factory = new FilterFactory(slickgridConfig, translateService, collectionService, rxjsResourceStub); + const mockColumn = { filter: { model: Filters.autoComplete } } as Column; + const filterSpy = jest.spyOn(mockAutocompleteFilter.prototype, 'constructor'); + + const newFilter = factory.createFilter(mockColumn.filter); + + expect(newFilter).toBeTruthy(); + expect(filterSpy).toHaveBeenCalledWith(translateService, collectionService, rxjsResourceStub); + }); + + it('should create AutoComplete Filter with RxJS when that is the Filter provided as a model', () => { + const mockColumn = { filter: { model: Filters.autoComplete } } as Column; + const filterSpy = jest.spyOn(mockAutocompleteFilter.prototype, 'constructor'); + + factory.addRxJsResource(rxjsResourceStub); + const newFilter = factory.createFilter(mockColumn.filter); + + expect(newFilter).toBeTruthy(); + expect(filterSpy).toHaveBeenCalledWith(translateService, collectionService, rxjsResourceStub); + }); +}); \ No newline at end of file diff --git a/packages/common/src/filters/__tests__/selectFilter.spec.ts b/packages/common/src/filters/__tests__/selectFilter.spec.ts index 7e4fcd24e..23a342fac 100644 --- a/packages/common/src/filters/__tests__/selectFilter.spec.ts +++ b/packages/common/src/filters/__tests__/selectFilter.spec.ts @@ -1,5 +1,6 @@ // import 3rd party lib multiple-select for the tests import 'multiple-select-modified'; +import { of, Subject } from 'rxjs'; import { FieldType, OperatorType } from '../../enums/index'; import { Column, FilterArguments, GridOption, SlickGrid } from '../../interfaces/index'; @@ -7,6 +8,7 @@ import { CollectionService } from '../../services/collection.service'; import { Filters } from '..'; import { SelectFilter } from '../selectFilter'; import { HttpStub } from '../../../../../test/httpClientStub'; +import { RxJsResourceStub } from '../../../../../test/rxjsResourceStub'; import { TranslateServiceStub } from '../../../../../test/translateServiceStub'; jest.useFakeTimers(); @@ -794,7 +796,7 @@ describe('SelectFilter', () => { try { await filter.init(filterArguments); } catch (e) { - expect(e.toString()).toContain(`Something went wrong while trying to pull the collection from the "collectionAsync" call in the Select Filter, the collection is not a valid array.`); + expect(e.toString()).toContain(`Something went wrong while trying to pull the collection from the "collectionAsync" call in the Filter, the collection is not a valid array.`); done(); } }); @@ -803,8 +805,158 @@ describe('SelectFilter', () => { const promise = Promise.resolve({ hello: 'world' }); mockColumn.filter!.collectionAsync = promise; filter.init(filterArguments).catch((e) => { - expect(e.toString()).toContain(`Something went wrong while trying to pull the collection from the "collectionAsync" call in the Select Filter, the collection is not a valid array.`); + expect(e.toString()).toContain(`Something went wrong while trying to pull the collection from the "collectionAsync" call in the Filter, the collection is not a valid array.`); done(); }); }); + + describe('SelectFilter using RxJS Observables', () => { + let divContainer: HTMLDivElement; + let filter: SelectFilter; + let filterArguments: FilterArguments; + let spyGetHeaderRow; + let mockColumn: Column; + let collectionService: CollectionService; + let rxjs: RxJsResourceStub; + let translateService: TranslateServiceStub; + const http = new HttpStub(); + + beforeEach(() => { + translateService = new TranslateServiceStub(); + collectionService = new CollectionService(translateService); + rxjs = new RxJsResourceStub(); + + divContainer = document.createElement('div'); + divContainer.innerHTML = template; + document.body.appendChild(divContainer); + spyGetHeaderRow = jest.spyOn(gridStub, 'getHeaderRowColumn').mockReturnValue(divContainer); + + mockColumn = { + id: 'gender', field: 'gender', filterable: true, + filter: { + model: Filters.multipleSelect, + } + }; + + filterArguments = { + grid: gridStub, + columnDef: mockColumn, + callback: jest.fn() + }; + + filter = new SelectFilter(translateService, collectionService, rxjs); + }); + + afterEach(() => { + filter.destroy(); + jest.clearAllMocks(); + }); + + it('should create the multi-select filter with a value/label pair collectionAsync that is inside an object when "collectionInsideObjectProperty" is defined with a dot notation', async () => { + mockColumn.filter = { + collectionAsync: of({ deep: { myCollection: [{ value: 'other', description: 'other' }, { value: 'male', description: 'male' }, { value: 'female', description: 'female' }] } }), + collectionOptions: { + collectionInsideObjectProperty: 'deep.myCollection' + }, + customStructure: { + value: 'value', + label: 'description', + }, + }; + + await filter.init(filterArguments); + + const filterBtnElm = divContainer.querySelector('.ms-parent.ms-filter.search-filter.filter-gender button.ms-choice') as HTMLButtonElement; + const filterListElm = divContainer.querySelectorAll(`[name=filter-gender].ms-drop ul>li span`); + filterBtnElm.click(); + + expect(filterListElm.length).toBe(3); + expect(filterListElm[0].textContent).toBe('other'); + expect(filterListElm[1].textContent).toBe('male'); + expect(filterListElm[2].textContent).toBe('female'); + }); + + it('should create the multi-select filter with a default search term when using "collectionAsync" as an Observable', async () => { + const spyCallback = jest.spyOn(filterArguments, 'callback'); + const mockCollection = ['male', 'female']; + mockColumn.filter!.collection = undefined; + mockColumn.filter.collectionAsync = of(mockCollection); + + filterArguments.searchTerms = ['female']; + await filter.init(filterArguments); + + const filterBtnElm = divContainer.querySelector('.ms-parent.ms-filter.search-filter.filter-gender button.ms-choice') as HTMLButtonElement; + const filterListElm = divContainer.querySelectorAll(`[name=filter-gender].ms-drop ul>li input[type=checkbox]`); + const filterFilledElms = divContainer.querySelectorAll('.ms-parent.ms-filter.search-filter.filter-gender.filled'); + const filterOkElm = divContainer.querySelector(`[name=filter-gender].ms-drop .ms-ok-button`) as HTMLButtonElement; + filterBtnElm.click(); + filterOkElm.click(); + + expect(filterListElm.length).toBe(2); + expect(filterFilledElms.length).toBe(1); + expect(filterListElm[1].checked).toBe(true); + expect(spyCallback).toHaveBeenCalledWith(undefined, { columnDef: mockColumn, operator: 'IN', searchTerms: ['female'], shouldTriggerQuery: true }); + }); + + it('should create the multi-select filter with a "collectionAsync" as an Observable and be able to call next on it', async () => { + const mockCollection = ['male', 'female']; + mockColumn.filter.collectionAsync = of(mockCollection); + + filterArguments.searchTerms = ['female']; + await filter.init(filterArguments); + + const filterBtnElm = divContainer.querySelector('.ms-parent.ms-filter.search-filter.filter-gender button.ms-choice'); + const filterListElm = divContainer.querySelectorAll(`[name=filter-gender].ms-drop ul>li input[type=checkbox]`); + filterBtnElm.click(); + + expect(filterListElm.length).toBe(2); + expect(filterListElm[1].checked).toBe(true); + + // after await (or timeout delay) we'll get the Subject Observable + mockCollection.push('other'); + (mockColumn.filter.collectionAsync as Subject).next(mockCollection); + + const filterUpdatedListElm = divContainer.querySelectorAll(`[name=filter-gender].ms-drop ul>li input[type=checkbox]`); + expect(filterUpdatedListElm.length).toBe(3); + }); + + it('should create the multi-select filter with a "collectionAsync" as an Observable, which has its collection inside an object property, and be able to call next on it', async () => { + const mockCollection = { deep: { myCollection: ['male', 'female'] } }; + mockColumn.filter = { + collectionAsync: of(mockCollection), + collectionOptions: { + collectionInsideObjectProperty: 'deep.myCollection' + }, + customStructure: { + value: 'value', + label: 'description', + }, + }; + + filterArguments.searchTerms = ['female']; + await filter.init(filterArguments); + + const filterBtnElm = divContainer.querySelector('.ms-parent.ms-filter.search-filter.filter-gender button.ms-choice'); + const filterListElm = divContainer.querySelectorAll(`[name=filter-gender].ms-drop ul>li input[type=checkbox]`); + filterBtnElm.click(); + + expect(filterListElm.length).toBe(2); + expect(filterListElm[1].checked).toBe(true); + + // after await (or timeout delay) we'll get the Subject Observable + mockCollection.deep.myCollection.push('other'); + (mockColumn.filter.collectionAsync as Subject).next(mockCollection.deep.myCollection); + + const filterUpdatedListElm = divContainer.querySelectorAll(`[name=filter-gender].ms-drop ul>li input[type=checkbox]`); + expect(filterUpdatedListElm.length).toBe(3); + }); + + it('should throw an error when "collectionAsync" Observable does not return a valid array', (done) => { + mockColumn.filter.collectionAsync = of({ hello: 'world' }); + filter.init(filterArguments).catch((e) => { + expect(e.toString()).toContain(`Something went wrong while trying to pull the collection from the "collectionAsync" call in the Filter, the collection is not a valid array.`); + done(); + }); + }); + }); }); diff --git a/packages/common/src/filters/autoCompleteFilter.ts b/packages/common/src/filters/autoCompleteFilter.ts index b808dc891..16220cf91 100644 --- a/packages/common/src/filters/autoCompleteFilter.ts +++ b/packages/common/src/filters/autoCompleteFilter.ts @@ -17,11 +17,14 @@ import { FilterCallback, GridOption, SlickGrid, + Subscription, } from './../interfaces/index'; import { CollectionService } from '../services/collection.service'; import { collectionObserver, propertyObserver } from '../services/observers'; -import { getDescendantProperty, sanitizeTextByAvailableSanitizer, toKebabCase } from '../services/utilities'; +import { getDescendantProperty, sanitizeTextByAvailableSanitizer, toKebabCase, unsubscribeAll } from '../services/utilities'; import { TranslaterService } from '../services/translater.service'; +import { renderCollectionOptionsAsync } from './filterUtilities'; +import { RxJsFacade } from '../services/rxjsFacade'; export class AutoCompleteFilter implements Filter { protected _autoCompleteOptions!: AutocompleteOption; @@ -57,11 +60,16 @@ export class AutoCompleteFilter implements Filter { valueName = 'label'; enableTranslateLabel = false; + subscriptions: Subscription[] = []; /** * Initialize the Filter */ - constructor(protected readonly translaterService: TranslaterService, protected readonly collectionService: CollectionService) { } + constructor( + protected readonly translaterService: TranslaterService, + protected readonly collectionService: CollectionService, + protected readonly rxjs?: RxJsFacade + ) { } /** Getter for the Autocomplete Option */ get autoCompleteOptions(): Partial { @@ -167,7 +175,7 @@ export class AutoCompleteFilter implements Filter { if (collectionAsync && !this.columnFilter.collection) { // only read the collectionAsync once (on the 1st load), // we do this because Http Fetch will throw an error saying body was already read and is streaming is locked - collectionOutput = this.renderOptionsAsync(collectionAsync as Promise); + collectionOutput = renderCollectionOptionsAsync(collectionAsync, this.columnDef, this.renderDomElement.bind(this), this.rxjs, this.subscriptions); resolve(collectionOutput); } else { collectionOutput = newCollection; @@ -209,6 +217,9 @@ export class AutoCompleteFilter implements Filter { } this.$filterElm = null; this._collection = undefined; + + // unsubscribe all the possible Observables if RxJS was used + unsubscribeAll(this.subscriptions); } /** Set value(s) on the DOM element */ @@ -501,40 +512,4 @@ export class AutoCompleteFilter implements Filter { .append($liDiv) .appendTo(ul); } - - protected async renderOptionsAsync(collectionAsync: Promise): Promise { - let awaitedCollection: any = null; - - if (collectionAsync) { - // wait for the "collectionAsync", once resolved we will save it into the "collection" - const response: any | any[] = await collectionAsync; - - if (Array.isArray(response)) { - awaitedCollection = response; // from Promise - } else if (response instanceof Response && typeof response['json'] === 'function') { - awaitedCollection = await response['json'](); // from Fetch - } else if (response && response['content']) { - awaitedCollection = response['content']; // from http-client - } - - if (!Array.isArray(awaitedCollection) && this.collectionOptions?.collectionInsideObjectProperty) { - const collection = awaitedCollection || response; - const collectionInsideObjectProperty = this.collectionOptions.collectionInsideObjectProperty; - awaitedCollection = getDescendantProperty(collection, collectionInsideObjectProperty || ''); - } - - if (!Array.isArray(awaitedCollection)) { - throw new Error('Something went wrong while trying to pull the collection from the "collectionAsync" call in the AutoComplete Filter, the collection is not a valid array.'); - } - - // copy over the array received from the async call to the "collection" as the new collection to use - // this has to be BEFORE the `collectionObserver().subscribe` to avoid going into an infinite loop - this.columnFilter.collection = awaitedCollection; - - // recreate Multiple Select after getting async collection - this.renderDomElement(awaitedCollection); - } - - return awaitedCollection; - } -} +} \ No newline at end of file diff --git a/packages/common/src/filters/filterFactory.ts b/packages/common/src/filters/filterFactory.ts index fb91077e8..a12e2dd15 100644 --- a/packages/common/src/filters/filterFactory.ts +++ b/packages/common/src/filters/filterFactory.ts @@ -17,7 +17,7 @@ export class FilterFactory { } // Uses the User model to create a new User - createFilter(columnFilter: ColumnFilter | undefined): Filter | undefined { + createFilter(columnFilter?: ColumnFilter): Filter | undefined { let filter: Filter | undefined; if (columnFilter?.model) { diff --git a/packages/common/src/filters/filterUtilities.ts b/packages/common/src/filters/filterUtilities.ts index 252cd0d9d..ea75c4413 100644 --- a/packages/common/src/filters/filterUtilities.ts +++ b/packages/common/src/filters/filterUtilities.ts @@ -1,5 +1,7 @@ import { OperatorString } from '../enums/operatorString.type'; -import { htmlEncodedStringWithPadding } from '../services/utilities'; +import { Column, Subscription } from '../interfaces/index'; +import { ObservableFacade, RxJsFacade, SubjectFacade } from '../services/rxjsFacade'; +import { castObservableToPromise, getDescendantProperty, htmlEncodedStringWithPadding } from '../services/utilities'; export function buildSelectOperatorHtmlString(optionValues: Array<{ operator: OperatorString, description: string }>) { let optionValueString = ''; @@ -9,3 +11,91 @@ export function buildSelectOperatorHtmlString(optionValues: Array<{ operator: Op return ``; } + +/** + * When user use a CollectionAsync we will use the returned collection to render the filter DOM element + * and reinitialize filter collection with this new collection + */ +export function renderDomElementFromCollectionAsync(collection: any[], columnDef: Column, renderDomElementCallback: (collection: any) => void) { + const columnFilter = columnDef?.filter ?? {}; + const collectionOptions = columnFilter?.collectionOptions ?? {}; + + if (collectionOptions && collectionOptions.collectionInsideObjectProperty) { + const collectionInsideObjectProperty = collectionOptions.collectionInsideObjectProperty; + collection = getDescendantProperty(collection, collectionInsideObjectProperty as string); + } + if (!Array.isArray(collection)) { + throw new Error(`Something went wrong while trying to pull the collection from the "collectionAsync" call in the Filter, the collection is not a valid array.`); + } + + // copy over the array received from the async call to the "collection" as the new collection to use + // this has to be BEFORE the `collectionObserver().subscribe` to avoid going into an infinite loop + columnFilter.collection = collection; + + // recreate Multiple Select after getting async collection + renderDomElementCallback(collection); +} + +export async function renderCollectionOptionsAsync(collectionAsync: Promise | ObservableFacade | SubjectFacade, columnDef: Column, renderDomElementCallback: (collection: any) => void, rxjs?: RxJsFacade, subscriptions?: Subscription[]): Promise { + const columnFilter = columnDef?.filter ?? {}; + const collectionOptions = columnFilter?.collectionOptions ?? {}; + + let awaitedCollection: any = null; + + if (collectionAsync) { + const isObservable = rxjs?.isObservable(collectionAsync) ?? false; + if (isObservable && rxjs) { + awaitedCollection = await castObservableToPromise(rxjs, collectionAsync) as Promise; + } + + // wait for the "collectionAsync", once resolved we will save it into the "collection" + const response: any | any[] = await collectionAsync; + + if (Array.isArray(response)) { + awaitedCollection = response; // from Promise + } else if (response instanceof Response && typeof response['json'] === 'function') { + awaitedCollection = await response['json'](); // from Fetch + } else if (response && response['content']) { + awaitedCollection = response['content']; // from http-client + } + + if (!Array.isArray(awaitedCollection) && collectionOptions?.collectionInsideObjectProperty) { + const collection = awaitedCollection || response; + const collectionInsideObjectProperty = collectionOptions.collectionInsideObjectProperty; + awaitedCollection = getDescendantProperty(collection, collectionInsideObjectProperty || ''); + } + + if (!Array.isArray(awaitedCollection)) { + throw new Error('Something went wrong while trying to pull the collection from the "collectionAsync" call in the Filter, the collection is not a valid array.'); + } + + // copy over the array received from the async call to the "collection" as the new collection to use + // this has to be BEFORE the `collectionObserver().subscribe` to avoid going into an infinite loop + columnFilter.collection = awaitedCollection; + + // recreate Multiple Select after getting async collection + renderDomElementCallback(awaitedCollection); + + // because we accept Promises & HttpClient Observable only execute once + // we will re-create an RxJs Subject which will replace the "collectionAsync" which got executed once anyway + // doing this provide the user a way to call a "collectionAsync.next()" + if (isObservable) { + createCollectionAsyncSubject(columnDef, renderDomElementCallback, rxjs, subscriptions); + } + } + + return awaitedCollection; +} + +/** Create or recreate an Observable Subject and reassign it to the "collectionAsync" object so user can call a "collectionAsync.next()" on it */ +export function createCollectionAsyncSubject(columnDef: Column, renderDomElementCallback: (collection: any) => void, rxjs?: RxJsFacade, subscriptions?: Subscription[]) { + const columnFilter = columnDef?.filter ?? {}; + const newCollectionAsync = rxjs?.createSubject(); + columnFilter.collectionAsync = newCollectionAsync; + if (subscriptions && newCollectionAsync) { + subscriptions.push( + newCollectionAsync.subscribe(collection => renderDomElementFromCollectionAsync(collection, columnDef, renderDomElementCallback)) + ); + } +} + diff --git a/packages/common/src/filters/selectFilter.ts b/packages/common/src/filters/selectFilter.ts index b3e69deca..c42336d5d 100644 --- a/packages/common/src/filters/selectFilter.ts +++ b/packages/common/src/filters/selectFilter.ts @@ -17,8 +17,9 @@ import { } from './../interfaces/index'; import { CollectionService } from '../services/collection.service'; import { collectionObserver, propertyObserver } from '../services/observers'; -import { castObservableToPromise, getDescendantProperty, getTranslationPrefix, htmlEncode, sanitizeTextByAvailableSanitizer } from '../services/utilities'; -import { ObservableFacade, RxJsFacade, SubjectFacade, TranslaterService } from '../services'; +import { getDescendantProperty, getTranslationPrefix, htmlEncode, sanitizeTextByAvailableSanitizer, unsubscribeAll } from '../services/utilities'; +import { RxJsFacade, TranslaterService } from '../services'; +import { renderCollectionOptionsAsync } from './filterUtilities'; export class SelectFilter implements Filter { protected _isMultipleSelect = true; @@ -55,7 +56,7 @@ export class SelectFilter implements Filter { constructor( protected readonly translaterService: TranslaterService, protected readonly collectionService: CollectionService, - protected readonly rxjs: RxJsFacade, + protected readonly rxjs?: RxJsFacade, isMultipleSelect = true) { this._isMultipleSelect = isMultipleSelect; } @@ -156,7 +157,7 @@ export class SelectFilter implements Filter { if (collectionAsync && !this.columnFilter.collection) { // only read the collectionAsync once (on the 1st load), // we do this because Http Fetch will throw an error saying body was already read and its streaming is locked - collectionOutput = this.renderOptionsAsync(collectionAsync as Promise); + collectionOutput = renderCollectionOptionsAsync(collectionAsync, this.columnDef, this.renderDomElement.bind(this), this.rxjs, this.subscriptions); resolve(collectionOutput); } else { collectionOutput = newCollection; @@ -201,6 +202,9 @@ export class SelectFilter implements Filter { $(`[name=${elementClassName}].ms-drop`).remove(); } this.$filterElm = null; + + // unsubscribe all the possible Observables if RxJS was used + unsubscribeAll(this.subscriptions); } /** @@ -528,72 +532,4 @@ export class SelectFilter implements Filter { this._shouldTriggerQuery = true; } } - - /** - * When user use a CollectionAsync we will use the returned collection to render the filter DOM element - * and reinitialize filter collection with this new collection - */ - protected renderDomElementFromCollectionAsync(collection: any[]) { - if (this.collectionOptions && this.collectionOptions.collectionInsideObjectProperty) { - const collectionInsideObjectProperty = this.collectionOptions.collectionInsideObjectProperty; - collection = getDescendantProperty(collection, collectionInsideObjectProperty as string); - } - if (!Array.isArray(collection)) { - throw new Error('Something went wrong while trying to pull the collection from the "collectionAsync" call in the Select Filter, the collection is not a valid array.'); - } - - // copy over the array received from the async call to the "collection" as the new collection to use - // this has to be BEFORE the `collectionObserver().subscribe` to avoid going into an infinite loop - this.columnFilter.collection = collection; - - // recreate Multiple Select after getting async collection - this.renderDomElement(collection); - } - - protected async renderOptionsAsync(collectionAsync: Promise | ObservableFacade | SubjectFacade): Promise { - let awaitedCollection: any = null; - - if (collectionAsync) { - awaitedCollection = await castObservableToPromise(this.rxjs, collectionAsync) as Promise; - - // wait for the "collectionAsync", once resolved we will save it into the "collection" - const response: any | any[] = await collectionAsync; - - if (Array.isArray(response)) { - awaitedCollection = response; // from Promise - } else if (response instanceof Response && typeof response['json'] === 'function') { - awaitedCollection = await response['json'](); // from Fetch - } else if (response && response['content']) { - awaitedCollection = response['content']; // from http-client - } - - if (!Array.isArray(awaitedCollection) && this.collectionOptions?.collectionInsideObjectProperty) { - const collection = awaitedCollection || response; - const collectionInsideObjectProperty = this.collectionOptions.collectionInsideObjectProperty; - awaitedCollection = getDescendantProperty(collection, collectionInsideObjectProperty || ''); - } - - if (!Array.isArray(awaitedCollection)) { - throw new Error('Something went wrong while trying to pull the collection from the "collectionAsync" call in the Select Filter, the collection is not a valid array.'); - } - - // copy over the array received from the async call to the "collection" as the new collection to use - // this has to be BEFORE the `collectionObserver().subscribe` to avoid going into an infinite loop - this.columnFilter.collection = awaitedCollection; - - // recreate Multiple Select after getting async collection - this.renderDomElement(awaitedCollection); - } - - return awaitedCollection; - } - - /** Create or recreate an Observable Subject and reassign it to the "collectionAsync" object so user can call a "collectionAsync.next()" on it */ - protected createCollectionAsyncSubject() { - const newCollectionAsync = this.rxjs.createSubject(); - this.columnFilter.collectionAsync = newCollectionAsync; - this.subscriptions.push( - newCollectionAsync.subscribe(collection => this.renderDomElementFromCollectionAsync(collection)) - ); - } } diff --git a/packages/common/src/services/__tests__/rxjsFacade.spec.ts b/packages/common/src/services/__tests__/rxjsFacade.spec.ts index 4083dce3c..7e485dfaf 100644 --- a/packages/common/src/services/__tests__/rxjsFacade.spec.ts +++ b/packages/common/src/services/__tests__/rxjsFacade.spec.ts @@ -13,6 +13,10 @@ describe('RxJsFacade Service', () => { expect(() => RxJsFacade.prototype.createSubject()).toThrow('RxJS Facade "createSubject" method must be implemented'); }); + it('should display a not implemented when calling "first" method', () => { + expect(() => RxJsFacade.prototype.first()).toThrow('RxJS Facade "first" method must be implemented'); + }); + it('should display a not implemented when calling "iif" method', () => { expect(() => RxJsFacade.prototype.iif(() => false)).toThrow('RxJS Facade "iif" method must be implemented'); }); diff --git a/packages/common/src/services/__tests__/utilities.spec.ts b/packages/common/src/services/__tests__/utilities.spec.ts index e7bfcc1d2..76544123a 100644 --- a/packages/common/src/services/__tests__/utilities.spec.ts +++ b/packages/common/src/services/__tests__/utilities.spec.ts @@ -2,7 +2,7 @@ import 'jest-extended'; import { of } from 'rxjs'; import { FieldType, OperatorType } from '../../enums/index'; -import { GridOption } from '../../interfaces/index'; +import { GridOption, Subscription } from '../../interfaces/index'; import { RxJsResourceStub } from '../../../../../test/rxjsResourceStub'; import { addToArrayWhenNotExists, @@ -40,6 +40,7 @@ import { toCamelCase, toKebabCase, toSnakeCase, + unsubscribeAll, uniqueArray, uniqueObjectArray, } from '../utilities'; @@ -1500,6 +1501,35 @@ describe('Service/Utilies', () => { }); }); + describe('unsubscribeAll method', () => { + it('should return original array when array of subscriptions is empty', () => { + const output = unsubscribeAll([]); + expect(output).toEqual([]); + }); + + it('should be able to unsubscribe all Observables', () => { + const subscriptions: Subscription[] = []; + const observable1 = of([1, 2]); + const observable2 = of([1, 2]); + subscriptions.push(observable1.subscribe(), observable2.subscribe()); + const output = unsubscribeAll(subscriptions); + expect(output).toHaveLength(0); + }); + + it('should be able to unsubscribe all PubSub events or anything that has an unsubscribe method', () => { + const mockUnsubscribe1 = jest.fn(); + const mockUnsubscribe2 = jest.fn(); + const mockSubscription1 = { unsubscribe: mockUnsubscribe1 }; + const mockSubscription2 = { unsubscribe: mockUnsubscribe2 }; + const mockSubscriptions = [mockSubscription1, mockSubscription2]; + + unsubscribeAll(mockSubscriptions); + + expect(mockUnsubscribe1).toHaveBeenCalledTimes(1); + expect(mockUnsubscribe2).toHaveBeenCalledTimes(1); + }); + }); + describe('uniqueArray method', () => { it('should return original value when input is not an array', () => { const output1 = uniqueArray(null as any); diff --git a/packages/common/src/services/rxjsFacade.ts b/packages/common/src/services/rxjsFacade.ts index 9b997ed41..fcb919e7f 100644 --- a/packages/common/src/services/rxjsFacade.ts +++ b/packages/common/src/services/rxjsFacade.ts @@ -32,15 +32,16 @@ export abstract class RxJsFacade { throw new Error('RxJS Facade "createSubject" method must be implemented'); } + first(predicate?: null, defaultValue?: D): any { + throw new Error('RxJS Facade "first" method must be implemented'); + } + + /** Decides at subscription time which Observable will actually be subscribed. */ iif(condition: () => boolean, trueResult?: any, falseResult?: any): ObservableFacade { throw new Error('RxJS Facade "iif" method must be implemented'); } - first(predicate?: null, defaultValue?: D): any { - throw new Error('RxJS Facade "first" method must be implemented'); - } - /** Tests to see if the object is an RxJS Observable */ isObservable(obj: any): boolean { return false; diff --git a/packages/common/src/services/utilities.ts b/packages/common/src/services/utilities.ts index ea3b8ffb8..22d01645e 100644 --- a/packages/common/src/services/utilities.ts +++ b/packages/common/src/services/utilities.ts @@ -4,7 +4,7 @@ const DOMPurify = DOMPurify_; // patch to fix rollup to work const moment = (moment_ as any)['default'] || moment_; // patch to fix rollup "moment has no default export" issue, document here https://github.com/rollup/rollup/issues/670 import { FieldType, OperatorString, OperatorType } from '../enums/index'; -import { GridOption } from '../interfaces/index'; +import { GridOption, Subscription } from '../interfaces/index'; import { ObservableFacade, RxJsFacade, SubjectFacade } from './rxjsFacade'; /** @@ -1011,6 +1011,24 @@ export function toSnakeCase(inputStr: string): string { return inputStr; } +/** + * Unsubscribe all Subscriptions + * It will return an empty array if it all went well + * @param subscriptions + */ +export function unsubscribeAll(subscriptions: Subscription[]): Subscription[] { + if (Array.isArray(subscriptions)) { + while (subscriptions.length > 0) { + const subscription = subscriptions.pop(); + if (subscription?.unsubscribe) { + subscription.unsubscribe(); + } + } + } + + return subscriptions; +} + /** * Takes an input array and makes sure the array has unique values by removing duplicates * @param array input with possible duplicates diff --git a/packages/rxjs-observable/src/rxjs-resource.spec.ts b/packages/rxjs-observable/src/rxjs-resource.spec.ts index 83d696014..b1b135797 100644 --- a/packages/rxjs-observable/src/rxjs-resource.spec.ts +++ b/packages/rxjs-observable/src/rxjs-resource.spec.ts @@ -1,5 +1,4 @@ import { EMPTY, isObservable, Observable, Subject } from 'rxjs'; -import { takeUntil } from 'rxjs/operators'; import { RxJsResource } from './rxjs.resource'; describe('RxJs Resource', () => { @@ -35,6 +34,12 @@ describe('RxJs Resource', () => { expect(iifOutput instanceof Observable).toBeTruthy(); }); + it('should be able to execute the "first" method and expect an Observable returned', () => { + const observable = service.createObservable(); + const output = observable.pipe(service.first()); + expect(output instanceof Observable).toBeTruthy(); + }); + it('should be able to execute the "takeUntil" method and expect an Observable returned', () => { const observable = service.createObservable(); const iifOutput = service.iif(() => isObservable(observable)); diff --git a/packages/vanilla-bundle/src/components/slick-vanilla-grid-bundle.ts b/packages/vanilla-bundle/src/components/slick-vanilla-grid-bundle.ts index 34cd08014..a358790c4 100644 --- a/packages/vanilla-bundle/src/components/slick-vanilla-grid-bundle.ts +++ b/packages/vanilla-bundle/src/components/slick-vanilla-grid-bundle.ts @@ -501,6 +501,10 @@ export class SlickVanillaGridBundle { this._eventPubSubService.publish('onDataviewCreated', this.dataView); } + // get any possible Services that user want to register which don't require SlickGrid to be instantiated + // RxJS Resource is in this lot because it has to be registered before anything else and doesn't require SlickGrid to be initialized + this.preRegisterResources(); + // for convenience to the user, we provide the property "editor" as an Slickgrid-Universal editor complex object // however "editor" is used internally by SlickGrid for it's own Editor Factory // so in our lib we will swap "editor" and copy it into a new property called "internalColumnEditor" @@ -1175,9 +1179,12 @@ export class SlickVanillaGridBundle { } }); } else if (this.rxjs?.isObservable(collectionAsync)) { - this.subscriptions.push( - (collectionAsync as ObservableFacade).subscribe((resolvedCollection) => this.updateEditorCollection(column, resolvedCollection)) - ); + // wrap this inside a setTimeout to avoid timing issue since updateEditorCollection requires to call SlickGrid getColumns() method + setTimeout(() => { + this.subscriptions.push( + (collectionAsync as ObservableFacade).subscribe((resolvedCollection) => this.updateEditorCollection(column, resolvedCollection)) + ); + }); } } @@ -1259,9 +1266,22 @@ export class SlickVanillaGridBundle { } } - private registerResources() { + /** Pre-Register any Resource that don't require SlickGrid to be instantiated (for example RxJS Resource) */ + private preRegisterResources() { this._registeredResources = this.gridOptions.registerExternalResources || []; + // bind & initialize all Components/Services that were tagged as enabled + // register all services by executing their init method and providing them with the Grid object + if (Array.isArray(this._registeredResources)) { + for (const resource of this._registeredResources) { + if (resource?.className === 'RxJsResource') { + this.registerRxJsResource(resource as RxJsFacade); + } + } + } + } + + private registerResources() { // when using Salesforce, we want the Export to CSV always enabled without registering it if (this.gridOptions.enableTextExport && this.gridOptions.useSalesforceDefaultGridOptions) { const textExportService = new TextExportService(); @@ -1311,9 +1331,6 @@ export class SlickVanillaGridBundle { if (typeof resource.init === 'function') { resource.init(this.slickGrid, this.universalContainerService); } - if (resource?.className === 'RxJsResource') { - this.registerRxJsResource(resource as RxJsFacade); - } } } } From dd5a16c211cd55ff2bce3d1a51e1c246a4bbd848 Mon Sep 17 00:00:00 2001 From: ghiscoding Date: Tue, 16 Mar 2021 23:07:09 -0400 Subject: [PATCH 11/21] tests: add Example 15 Cypress E2E test suite --- .../src/examples/example15.scss | 1 + .../src/examples/example15.ts | 12 +- test/cypress/integration/example15.spec.js | 105 ++++++++++++++++++ 3 files changed, 116 insertions(+), 2 deletions(-) create mode 100644 examples/webpack-demo-vanilla-bundle/src/examples/example15.scss diff --git a/examples/webpack-demo-vanilla-bundle/src/examples/example15.scss b/examples/webpack-demo-vanilla-bundle/src/examples/example15.scss new file mode 100644 index 000000000..05c404aa8 --- /dev/null +++ b/examples/webpack-demo-vanilla-bundle/src/examples/example15.scss @@ -0,0 +1 @@ +@import '@slickgrid-universal/common/dist/styles/sass/slickgrid-theme-salesforce.scss'; \ No newline at end of file diff --git a/examples/webpack-demo-vanilla-bundle/src/examples/example15.ts b/examples/webpack-demo-vanilla-bundle/src/examples/example15.ts index b1173c31e..4031d19d9 100644 --- a/examples/webpack-demo-vanilla-bundle/src/examples/example15.ts +++ b/examples/webpack-demo-vanilla-bundle/src/examples/example15.ts @@ -5,6 +5,8 @@ import { Slicker, SlickVanillaGridBundle } from '@slickgrid-universal/vanilla-bu import { Observable, of, Subject } from 'rxjs'; import { ExampleGridOptions } from './example-grid-options'; +import '../salesforce-styles.scss'; +import './example12.scss'; const defaultPageSize = 20; @@ -22,7 +24,7 @@ export class Example15 { status = ''; statusClass = 'is-success'; isOtherGenderAdded = false; - genderCollection = [{ value: '', label: '' }, { value: 'male', label: 'male' }, { value: 'female', label: 'female' }]; + genderCollection = [{ value: 'male', label: 'male' }, { value: 'female', label: 'female' }]; constructor() { this._bindingEventService = new BindingEventService(); @@ -64,7 +66,10 @@ export class Example15 { }, filter: { model: Filters.singleSelect, - collectionAsync: of(this.genderCollection) + collectionAsync: of(this.genderCollection), + collectionOptions: { + addBlankEntry: true + } } }, { id: 'company', name: 'Company', field: 'company' }, @@ -83,6 +88,9 @@ export class Example15 { }, editable: true, autoEdit: true, + autoCommitEdit: true, + rowHeight: 33, + headerRowHeight: 35, enableCellNavigation: true, enableFiltering: true, enableCheckboxSelector: true, diff --git a/test/cypress/integration/example15.spec.js b/test/cypress/integration/example15.spec.js index 34452ab9a..9e4f3f26c 100644 --- a/test/cypress/integration/example15.spec.js +++ b/test/cypress/integration/example15.spec.js @@ -1,6 +1,8 @@ /// describe('Example 15 - OData Grid using RxJS', () => { + const GRID_ROW_HEIGHT = 33; + beforeEach(() => { // create a console.log spy for later use cy.window().then((win) => { @@ -627,4 +629,107 @@ describe('Example 15 - OData Grid using RxJS', () => { }); }); }); + + describe('Editors & Filters with RxJS Observable', () => { + it('should open the "Gender" filter and expect to find 3 options in its list ([blank], male, female)', () => { + const expectedOptions = ['', 'male', 'female']; + cy.get('.ms-filter.filter-gender:visible').click(); + + cy.get('[name="filter-gender"].ms-drop') + .find('li:visible') + .should('have.length', 3); + + cy.get('[name="filter-gender"].ms-drop') + .find('li:visible') + .each(($li, index) => expect($li.text()).to.eq(expectedOptions[index])); + + cy.get('.grid15') + .find('.slick-row') + .should('have.length', 5); + }); + + it('should select "male" Gender and expect only 4 rows left in the grid', () => { + cy.get('[name="filter-gender"].ms-drop') + .find('li:visible:nth(1)') + .contains('male') + .click(); + + cy.get('.grid15') + .find('.slick-row') + .should('have.length', 4); + }); + + it('should be able to open "Gender" on the first row and expect to find 2 options the editor list (male, female)', () => { + const expectedOptions = ['male', 'female']; + + cy.get(`[style="top:${GRID_ROW_HEIGHT * 0}px"] > .slick-cell:nth(2)`) + .should('contain', 'male') + .click(); + + cy.get('[name="editor-gender"].ms-drop') + .find('li:visible') + .should('have.length', 2); + + cy.get('[name="editor-gender"].ms-drop') + .find('li:visible') + .each(($li, index) => expect($li.text()).to.eq(expectedOptions[index])); + }); + + it('should click on "Add Other Gender via RxJS" button', () => { + cy.get('[data-test="add-gender-button"]').should('not.be.disabled'); + cy.get('[data-test="add-gender-button"]').click(); + cy.get('[data-test="add-gender-button"]').should('be.disabled'); + }); + + it('should open the "Gender" editor on the first row and expect to find 1 more option the editor list (male, female, other)', () => { + const expectedOptions = ['male', 'female', 'other']; + + cy.get(`[style="top:${GRID_ROW_HEIGHT * 0}px"] > .slick-cell:nth(2)`) + .should('contain', 'male') + .click(); + + cy.get('[name="editor-gender"].ms-drop') + .find('li:visible') + .should('have.length', 3); + + cy.get('[name="editor-gender"].ms-drop') + .find('li:visible') + .each(($li, index) => expect($li.text()).to.eq(expectedOptions[index])); + }); + + it('should be able to change the Gender editor on the first row to the new option "other"', () => { + cy.get('[name="editor-gender"].ms-drop') + .find('li:visible:nth(2)') + .contains('other') + .click(); + }); + + it('should open Gender filter and now expect to see 1 more option in its list ([blank], male, female, other)', () => { + const expectedOptions = ['', 'male', 'female', 'other']; + cy.get('.ms-filter.filter-gender:visible').click(); + + cy.get('[name="filter-gender"].ms-drop') + .find('li:visible') + .should('have.length', 4); + + cy.get('[name="filter-gender"].ms-drop') + .find('li:visible') + .each(($li, index) => expect($li.text()).to.eq(expectedOptions[index])); + }); + + it('should choose "other" form the Gender filter and expect 1 row left in the grid', () => { + cy.get('[name="filter-gender"].ms-drop') + .find('li:visible:nth(3)') + .contains('other') + .click(); + + cy.get('.grid15') + .find('.slick-row') + .should('have.length', 1); + + cy.get(`[style="top:${GRID_ROW_HEIGHT * 0}px"] > .slick-cell:nth(1)`).should('contain', 'Ayers Hood'); + cy.get(`[style="top:${GRID_ROW_HEIGHT * 0}px"] > .slick-cell:nth(2)`).should('contain', 'other'); + cy.get(`[style="top:${GRID_ROW_HEIGHT * 0}px"] > .slick-cell:nth(3)`).should('contain', 'Accuprint'); + }); + }); }); From 1e72c251789b9613e73bbfaf31888fb7acb2f0d5 Mon Sep 17 00:00:00 2001 From: ghiscoding Date: Fri, 19 Mar 2021 00:03:41 -0400 Subject: [PATCH 12/21] chore(deps): upgrade to RxJS 7 and fix deprecations --- .../src/examples/example15.ts | 4 +- package.json | 1 + .../src/services/__tests__/rxjsFacade.spec.ts | 6 +- packages/common/src/services/rxjsFacade.ts | 7 +- packages/common/src/services/utilities.ts | 2 +- packages/rxjs-observable/package.json | 2 +- packages/rxjs-observable/src/rxjs.resource.ts | 10 +- test/rxjsResourceStub.ts | 6 +- yarn.lock | 535 ++++++++++-------- 9 files changed, 316 insertions(+), 257 deletions(-) diff --git a/examples/webpack-demo-vanilla-bundle/src/examples/example15.ts b/examples/webpack-demo-vanilla-bundle/src/examples/example15.ts index 4031d19d9..de5e24b09 100644 --- a/examples/webpack-demo-vanilla-bundle/src/examples/example15.ts +++ b/examples/webpack-demo-vanilla-bundle/src/examples/example15.ts @@ -136,7 +136,7 @@ export class Example15 { if (genderColumn) { let editorCollection = genderColumn.editor!.collection; - const filterCollectionAsync = genderColumn.filter!.collectionAsync; + const filterCollectionAsync = genderColumn.filter!.collectionAsync as Subject; if (Array.isArray(editorCollection)) { // refresh the Editor "collection", we have 2 ways of doing it @@ -150,7 +150,7 @@ export class Example15 { // However, for the Filter only, we have to trigger an RxJS/Subject change with the new collection // we do this because Filter(s) are shown at all time, while on Editor it's unnecessary since they are only shown when opening them - if (filterCollectionAsync instanceof Subject) { + if (filterCollectionAsync?.next) { filterCollectionAsync.next(editorCollection); } } diff --git a/package.json b/package.json index f87eb6a18..b6b86a62f 100644 --- a/package.json +++ b/package.json @@ -70,6 +70,7 @@ "mocha": "^8.3.1", "mochawesome": "^6.2.2", "npm-run-all": "^4.1.5", + "rxjs": "7.0.0-beta.13", "ts-jest": "^26.5.3", "typescript": "^4.2.3" }, diff --git a/packages/common/src/services/__tests__/rxjsFacade.spec.ts b/packages/common/src/services/__tests__/rxjsFacade.spec.ts index 7e485dfaf..4488c658b 100644 --- a/packages/common/src/services/__tests__/rxjsFacade.spec.ts +++ b/packages/common/src/services/__tests__/rxjsFacade.spec.ts @@ -17,6 +17,10 @@ describe('RxJsFacade Service', () => { expect(() => RxJsFacade.prototype.first()).toThrow('RxJS Facade "first" method must be implemented'); }); + it('should display a not implemented when calling "firstValueFrom" method', () => { + expect(() => RxJsFacade.prototype.firstValueFrom({} as any)).toThrow('RxJS Facade "firstValueFrom" method must be implemented'); + }); + it('should display a not implemented when calling "iif" method', () => { expect(() => RxJsFacade.prototype.iif(() => false)).toThrow('RxJS Facade "iif" method must be implemented'); }); @@ -32,7 +36,7 @@ describe('RxJsFacade Service', () => { describe('SubjectFacade Service', () => { it('should display a not implemented when calling "next" method', () => { - expect(() => SubjectFacade.prototype.next()).toThrow('RxJS Subject "next" method must be implemented'); + expect(() => SubjectFacade.prototype.next({} as any)).toThrow('RxJS Subject "next" method must be implemented'); }); it('should display a not implemented when calling "unsubscribe" method', () => { diff --git a/packages/common/src/services/rxjsFacade.ts b/packages/common/src/services/rxjsFacade.ts index fcb919e7f..3804236e6 100644 --- a/packages/common/src/services/rxjsFacade.ts +++ b/packages/common/src/services/rxjsFacade.ts @@ -36,6 +36,9 @@ export abstract class RxJsFacade { throw new Error('RxJS Facade "first" method must be implemented'); } + firstValueFrom(source: ObservableFacade) { + throw new Error('RxJS Facade "firstValueFrom" method must be implemented'); + } /** Decides at subscription time which Observable will actually be subscribed. */ iif(condition: () => boolean, trueResult?: any, falseResult?: any): ObservableFacade { @@ -43,7 +46,7 @@ export abstract class RxJsFacade { } /** Tests to see if the object is an RxJS Observable */ - isObservable(obj: any): boolean { + isObservable(obj: any): boolean { return false; } @@ -76,7 +79,7 @@ export abstract class ObservableFacade { * multicasted to many Observers. Subjects are like EventEmitters. */ export abstract class SubjectFacade extends ObservableFacade { - next(value?: T): void { + next(value: T): void { throw new Error('RxJS Subject "next" method must be implemented'); } diff --git a/packages/common/src/services/utilities.ts b/packages/common/src/services/utilities.ts index b9601397e..1987d7980 100644 --- a/packages/common/src/services/utilities.ts +++ b/packages/common/src/services/utilities.ts @@ -61,7 +61,7 @@ export function castObservableToPromise(rxjs: RxJsFacade, input: Promise | // if it's already a Promise then return it return input; } else if (rxjs.isObservable(input)) { - promise = input.pipe(rxjs.first()).toPromise(); + promise = rxjs.firstValueFrom(input); } if (!(promise instanceof Promise)) { diff --git a/packages/rxjs-observable/package.json b/packages/rxjs-observable/package.json index a4acd1b4b..6ab279572 100644 --- a/packages/rxjs-observable/package.json +++ b/packages/rxjs-observable/package.json @@ -40,7 +40,7 @@ ], "dependencies": { "@slickgrid-universal/common": "^0.11.2", - "rxjs": "^6.6.6" + "rxjs": "7.0.0-beta.13" }, "devDependencies": { "cross-env": "^7.0.3", diff --git a/packages/rxjs-observable/src/rxjs.resource.ts b/packages/rxjs-observable/src/rxjs.resource.ts index cea3b3792..4e1fe0740 100644 --- a/packages/rxjs-observable/src/rxjs.resource.ts +++ b/packages/rxjs-observable/src/rxjs.resource.ts @@ -1,5 +1,5 @@ import { RxJsFacade } from '@slickgrid-universal/common'; -import { EMPTY, iif, isObservable, Observable, OperatorFunction, Subject } from 'rxjs'; +import { EMPTY, iif, isObservable, firstValueFrom, Observable, OperatorFunction, Subject } from 'rxjs'; import { first, takeUntil } from 'rxjs/operators'; export class RxJsResource implements RxJsFacade { @@ -27,13 +27,17 @@ export class RxJsResource implements RxJsFacade { return first(predicate, defaultValue); } + firstValueFrom(source: Observable) { + return firstValueFrom(source); + } + iif(condition: () => boolean, trueResult?: any, falseResult?: any): Observable { return iif(condition, trueResult, falseResult); } /** Tests to see if the object is an RxJS Observable */ - isObservable(obj: any): boolean { - return isObservable(obj); + isObservable(obj: any): boolean { + return isObservable(obj); } /** Emits the values emitted by the source Observable until a `notifier` Observable emits a value. */ diff --git a/test/rxjsResourceStub.ts b/test/rxjsResourceStub.ts index 5edd5836c..a475373b3 100644 --- a/test/rxjsResourceStub.ts +++ b/test/rxjsResourceStub.ts @@ -1,5 +1,5 @@ import { RxJsFacade } from '@slickgrid-universal/common'; -import { EMPTY, iif, isObservable, Observable, OperatorFunction, Subject } from 'rxjs'; +import { EMPTY, iif, isObservable, firstValueFrom, Observable, OperatorFunction, Subject } from 'rxjs'; import { first, takeUntil } from 'rxjs/operators'; export class RxJsResourceStub implements RxJsFacade { @@ -32,6 +32,10 @@ export class RxJsResourceStub implements RxJsFacade { return first(predicate, defaultValue); } + firstValueFrom(source: Observable) { + return firstValueFrom(source); + } + iif(condition: () => boolean, trueResult?: any, falseResult?: any): Observable { return iif(condition, trueResult, falseResult); } diff --git a/yarn.lock b/yarn.lock index 994780734..404b69903 100644 --- a/yarn.lock +++ b/yarn.lock @@ -17,21 +17,21 @@ "@babel/highlight" "^7.12.13" "@babel/compat-data@^7.13.8": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.13.8.tgz#5b783b9808f15cef71547f1b691f34f8ff6003a6" - integrity sha512-EaI33z19T4qN3xLXsGf48M2cDqa6ei9tPZlfLdb2HC+e/cFtREiRd8hdSqDbwdLB0/+gLwqJmCYASH0z2bUdog== + version "7.13.11" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.13.11.tgz#9c8fe523c206979c9a81b1e12fe50c1254f1aa35" + integrity sha512-BwKEkO+2a67DcFeS3RLl0Z3Gs2OvdXewuWjc1Hfokhb5eQWP9YRYH1/+VrVZvql2CfjOiNGqSAFOYt4lsqTHzg== "@babel/core@^7.1.0", "@babel/core@^7.7.5": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.13.8.tgz#c191d9c5871788a591d69ea1dc03e5843a3680fb" - integrity sha512-oYapIySGw1zGhEFRd6lzWNLWFX2s5dA/jm+Pw/+59ZdXtjyIuwlXbrId22Md0rgZVop+aVoqow2riXhBLNyuQg== + version "7.13.10" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.13.10.tgz#07de050bbd8193fcd8a3c27918c0890613a94559" + integrity sha512-bfIYcT0BdKeAZrovpMqX2Mx5NrgAckGbwT982AkdS5GNfn3KMGiprlBAtmBcFZRUmpaufS6WZFP8trvx8ptFDw== dependencies: "@babel/code-frame" "^7.12.13" - "@babel/generator" "^7.13.0" - "@babel/helper-compilation-targets" "^7.13.8" + "@babel/generator" "^7.13.9" + "@babel/helper-compilation-targets" "^7.13.10" "@babel/helper-module-transforms" "^7.13.0" - "@babel/helpers" "^7.13.0" - "@babel/parser" "^7.13.4" + "@babel/helpers" "^7.13.10" + "@babel/parser" "^7.13.10" "@babel/template" "^7.12.13" "@babel/traverse" "^7.13.0" "@babel/types" "^7.13.0" @@ -43,7 +43,7 @@ semver "^6.3.0" source-map "^0.5.0" -"@babel/generator@^7.13.0": +"@babel/generator@^7.13.0", "@babel/generator@^7.13.9": version "7.13.9" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.13.9.tgz#3a7aa96f9efb8e2be42d38d80e2ceb4c64d8de39" integrity sha512-mHOOmY0Axl/JCTkxTU6Lf5sWOg/v8nUa+Xkt4zMTftX0wqmb6Sh7J8gvcehBw7q0AhrhAR+FDacKjCZ2X8K+Sw== @@ -52,10 +52,10 @@ jsesc "^2.5.1" source-map "^0.5.0" -"@babel/helper-compilation-targets@^7.13.8": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.8.tgz#02bdb22783439afb11b2f009814bdd88384bd468" - integrity sha512-pBljUGC1y3xKLn1nrx2eAhurLMA8OqBtBP/JwG4U8skN7kf8/aqwwxpV1N6T0e7r6+7uNitIa/fUxPFagSXp3A== +"@babel/helper-compilation-targets@^7.13.10": + version "7.13.10" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.10.tgz#1310a1678cb8427c07a753750da4f8ce442bdd0c" + integrity sha512-/Xju7Qg1GQO4mHZ/Kcs6Au7gfafgZnwm+a7sy/ow/tV1sHeraRUHbjdat8/UvDor4Tez+siGKDk6zIKtCPKVJA== dependencies: "@babel/compat-data" "^7.13.8" "@babel/helper-validator-option" "^7.12.17" @@ -153,28 +153,28 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz#d1fbf012e1a79b7eebbfdc6d270baaf8d9eb9831" integrity sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw== -"@babel/helpers@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.13.0.tgz#7647ae57377b4f0408bf4f8a7af01c42e41badc0" - integrity sha512-aan1MeFPxFacZeSz6Ld7YZo5aPuqnKlD7+HZY75xQsueczFccP9A7V05+oe0XpLwHK3oLorPe9eaAUljL7WEaQ== +"@babel/helpers@^7.13.10": + version "7.13.10" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.13.10.tgz#fd8e2ba7488533cdeac45cc158e9ebca5e3c7df8" + integrity sha512-4VO883+MWPDUVRF3PhiLBUFHoX/bsLTGFpFK/HqvvfBZz2D57u9XzPVNFVBTc0PW/CWR9BXTOKt8NF4DInUHcQ== dependencies: "@babel/template" "^7.12.13" "@babel/traverse" "^7.13.0" "@babel/types" "^7.13.0" "@babel/highlight@^7.10.4", "@babel/highlight@^7.12.13": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.13.8.tgz#10b2dac78526424dfc1f47650d0e415dfd9dc481" - integrity sha512-4vrIhfJyfNf+lCtXC2ck1rKSzDwciqF7IWFhXXrSOUC2O5DrVp+w4c6ed4AllTxhTkUP5x2tYj41VaxdVMMRDw== + version "7.13.10" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.13.10.tgz#a8b2a66148f5b27d666b15d81774347a731d52d1" + integrity sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg== dependencies: "@babel/helper-validator-identifier" "^7.12.11" chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.12.13", "@babel/parser@^7.13.0", "@babel/parser@^7.13.4": - version "7.13.9" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.13.9.tgz#ca34cb95e1c2dd126863a84465ae8ef66114be99" - integrity sha512-nEUfRiARCcaVo3ny3ZQjURjHQZUo/JkEw7rLlSZy/psWGnvwXFtPcr6jb7Yb41DVW5LTe6KRq9LGleRNsg1Frw== +"@babel/parser@^7.1.0", "@babel/parser@^7.12.13", "@babel/parser@^7.13.0", "@babel/parser@^7.13.10": + version "7.13.11" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.13.11.tgz#f93ebfc99d21c1772afbbaa153f47e7ce2f50b88" + integrity sha512-PhuoqeHoO9fc4ffMEVk4qb/w/s2iOSWohvbHxLtxui0eBg3Lg5gN1U8wp1V1u61hOWkPQJJyJzGH6Y+grwkq8Q== "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" @@ -1402,10 +1402,10 @@ is-plain-object "^5.0.0" universal-user-agent "^6.0.0" -"@octokit/openapi-types@^5.3.0": - version "5.3.1" - resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-5.3.1.tgz#a49d119a1b9e47b7a9f5133ab14be2d8afaa183d" - integrity sha512-TvVk2QuIA0lQZcIMd6xbdGaGDVeNYIOa3l1ZVagAIk5K3t/WMYbcg4BISNDhzdVhm/TgQB26frAgd/GV81aHJA== +"@octokit/openapi-types@^5.3.2": + version "5.3.2" + resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-5.3.2.tgz#b8ac43c5c3d00aef61a34cf744e315110c78deb4" + integrity sha512-NxF1yfYOUO92rCx3dwvA2onF30Vdlg7YUkMVXkeptqpzA3tRLplThhFleV/UKWFgh7rpKu1yYRbvNDUtzSopKA== "@octokit/plugin-enterprise-rest@^6.0.1": version "6.0.1" @@ -1494,11 +1494,11 @@ "@types/node" ">= 8" "@octokit/types@^6.0.3", "@octokit/types@^6.7.1": - version "6.12.0" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-6.12.0.tgz#8376fd60edfd5d1eebfeedb994c6bcb5b862c7a1" - integrity sha512-KwOf16soD7aDEEi/PgNeJlHzjZPfrmmNy+7WezSdrpnqZ7YImBJcNnX9+5RUHt1MnA4h8oISRHTqaZDGsX9DRQ== + version "6.12.2" + resolved "https://registry.yarnpkg.com/@octokit/types/-/types-6.12.2.tgz#5b44add079a478b8eb27d78cf384cc47e4411362" + integrity sha512-kCkiN8scbCmSq+gwdJV0iLgHc0O/GTPY1/cffo9kECu1MvatLPh9E+qFhfRIktKfHEA6ZYvv6S1B4Wnv3bi3pA== dependencies: - "@octokit/openapi-types" "^5.3.0" + "@octokit/openapi-types" "^5.3.2" "@samverschueren/stream-to-observable@^0.3.0": version "0.3.1" @@ -1539,9 +1539,9 @@ integrity sha512-/+CRPXpBDpo2RK9C68N3b2cOvO0Cf5B9aPijHsoDQTHivnGSObdOF2BRQOYjojWTDy6nQvMjmqRXIxH55VjxxA== "@types/babel__core@^7.0.0", "@types/babel__core@^7.1.7": - version "7.1.12" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.12.tgz#4d8e9e51eb265552a7e4f1ff2219ab6133bdfb2d" - integrity sha512-wMTHiiTiBAAPebqaPiPDLFA4LYPKr6Ph0Xq/6rq1Ur3v66HXyG+clfR9CNETkD7MQS8ZHvpQOtA53DLws5WAEQ== + version "7.1.13" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.13.tgz#bc6eea53975fdf163aff66c086522c6f293ae4cf" + integrity sha512-CC6amBNND16pTk4K3ZqKIaba6VGKAQs3gMjEY17FVd56oI/ZWt9OhS6riYiWv9s8ENbYUi7p8lgqb0QHQvUKQQ== dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" @@ -1565,9 +1565,9 @@ "@babel/types" "^7.0.0" "@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.11.0.tgz#b9a1efa635201ba9bc850323a8793ee2d36c04a0" - integrity sha512-kSjgDMZONiIfSH1Nxcr5JIRMwUetDki63FSQfpTCz8ogF3Ulqm8+mr5f78dUYs6vMiB6gBusQqfQmBvHZj/lwg== + version "7.11.1" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.11.1.tgz#654f6c4f67568e24c23b367e947098c6206fa639" + integrity sha512-Vs0hm0vPahPMYi9tDjtP66llufgO3ST16WXaSTtDGEl9cewAl3AibmxWw6TINOqHPT9z0uABKAYjT9jNSg4npw== dependencies: "@babel/types" "^7.3.0" @@ -1592,9 +1592,9 @@ "@types/estree" "*" "@types/eslint@*": - version "7.2.6" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-7.2.6.tgz#5e9aff555a975596c03a98b59ecd103decc70c3c" - integrity sha512-I+1sYH+NPQ3/tVqCeUSBwTE/0heyvtXqpIopUUArlBm0Kpocb8FbMa3AZ/ASKIFpN3rnEx932TTXDbt9OXsNDw== + version "7.2.7" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-7.2.7.tgz#f7ef1cf0dceab0ae6f9a976a0a9af14ab1baca26" + integrity sha512-EHXbc1z2GoQRqHaAT7+grxlTJ3WE2YNeD6jlpPoRc83cCoThRY+NUWjCUZaYmk51OICkPXn2hhphcWcWXgNW0Q== dependencies: "@types/estree" "*" "@types/json-schema" "*" @@ -1660,9 +1660,9 @@ "@types/istanbul-lib-report" "*" "@types/jest@^26.0.20": - version "26.0.20" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.20.tgz#cd2f2702ecf69e86b586e1f5223a60e454056307" - integrity sha512-9zi2Y+5USJRxd0FsahERhBwlcvFh6D2GLQnY2FH2BzK8J9s9omvNHIbvABwIluXa0fD8XVKMLTO0aOEuUfACAA== + version "26.0.21" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.21.tgz#3a73c2731e7e4f0fbaea56ce7ff8c79cf812bd24" + integrity sha512-ab9TyM/69yg7eew9eOwKMUmvIZAKEGZYlq/dhe5/0IMUd/QLJv5ldRMdddSn+u22N13FP3s5jYyktxuBwY0kDA== dependencies: jest-diff "^26.0.0" pretty-format "^26.0.0" @@ -1707,9 +1707,9 @@ moment "*" "@types/node@*", "@types/node@>= 8", "@types/node@^14.14.31": - version "14.14.31" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.31.tgz#72286bd33d137aa0d152d47ec7c1762563d34055" - integrity sha512-vFHy/ezP5qI0rFgJ7aQnjDXwAMrG0KqqIH7tQG5PPv3BWBayOPIQNBjVc/P6hhdZfMx51REc6tfDNXHUio893g== + version "14.14.35" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.35.tgz#42c953a4e2b18ab931f72477e7012172f4ffa313" + integrity sha512-Lt+wj8NVPx0zUmUwumiVXapmaLUcAk3yPuHCFVXras9k5VT9TdhJqKqGVUQCD60OTMCl0qxJ57OiTL0Mic3Iag== "@types/node@12.12.50": version "12.12.50" @@ -1732,9 +1732,9 @@ integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== "@types/prettier@^2.0.0": - version "2.2.2" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.2.2.tgz#e2280c89ddcbeef340099d6968d8c86ba155fdf6" - integrity sha512-i99hy7Ki19EqVOl77WplDrvgNugHnsSjECVR/wUrzw2TJXz1zlUfT2ngGckR6xN7yFYaijsMAqPkOLx9HgUqHg== + version "2.2.3" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.2.3.tgz#ef65165aea2924c9359205bf748865b8881753c0" + integrity sha512-PijRCG/K3s3w1We6ynUKdxEc5AcuuH3NBmMDP8uvKVp6X43UY7NQlTzczakXP3DJR0F4dfNQIGjU2cUeRYs2AA== "@types/sinonjs__fake-timers@^6.0.1": version "6.0.2" @@ -1777,9 +1777,9 @@ integrity sha512-I8MnZqNXsOLHsU111oHbn3khtvKMi5Bn4qVFsIWSJcCP1KKDiXX5AEw8UPk0nSopeC+Hvxt6yAy1/a5PailFqg== "@types/uglify-js@*": - version "3.12.0" - resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.12.0.tgz#2bb061c269441620d46b946350c8f16d52ef37c5" - integrity sha512-sYAF+CF9XZ5cvEBkI7RtrG9g2GtMBkviTnBxYYyq+8BWvO4QtXfwwR6a2LFwCi4evMKZfpv6U43ViYvv17Wz3Q== + version "3.13.0" + resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.13.0.tgz#1cad8df1fb0b143c5aba08de5712ea9d1ff71124" + integrity sha512-EGkrJD5Uy+Pg0NUR8uA4bJ5WMfljyad0G+784vLCNUkD+QwOJXUbBYExXfVGf7YtyzdQp3L/XMYcliB987kL5Q== dependencies: source-map "^0.6.1" @@ -1824,12 +1824,12 @@ "@types/yargs-parser" "*" "@typescript-eslint/eslint-plugin@^4.16.1": - version "4.16.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.16.1.tgz#2caf6a79dd19c3853b8d39769a27fccb24e4e651" - integrity sha512-SK777klBdlkUZpZLC1mPvyOWk9yAFCWmug13eAjVQ4/Q1LATE/NbcQL1xDHkptQkZOLnPmLUA1Y54m8dqYwnoQ== + version "4.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.18.0.tgz#50fbce93211b5b690895d20ebec6fe8db48af1f6" + integrity sha512-Lzkc/2+7EoH7+NjIWLS2lVuKKqbEmJhtXe3rmfA8cyiKnZm3IfLf51irnBcmow8Q/AptVV0XBZmBJKuUJTe6cQ== dependencies: - "@typescript-eslint/experimental-utils" "4.16.1" - "@typescript-eslint/scope-manager" "4.16.1" + "@typescript-eslint/experimental-utils" "4.18.0" + "@typescript-eslint/scope-manager" "4.18.0" debug "^4.1.1" functional-red-black-tree "^1.0.1" lodash "^4.17.15" @@ -1837,60 +1837,60 @@ semver "^7.3.2" tsutils "^3.17.1" -"@typescript-eslint/experimental-utils@4.16.1": - version "4.16.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.16.1.tgz#da7a396dc7d0e01922acf102b76efff17320b328" - integrity sha512-0Hm3LSlMYFK17jO4iY3un1Ve9x1zLNn4EM50Lia+0EV99NdbK+cn0er7HC7IvBA23mBg3P+8dUkMXy4leL33UQ== +"@typescript-eslint/experimental-utils@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.18.0.tgz#ed6c955b940334132b17100d2917449b99a91314" + integrity sha512-92h723Kblt9JcT2RRY3QS2xefFKar4ZQFVs3GityOKWQYgtajxt/tuXIzL7sVCUlM1hgreiV5gkGYyBpdOwO6A== dependencies: "@types/json-schema" "^7.0.3" - "@typescript-eslint/scope-manager" "4.16.1" - "@typescript-eslint/types" "4.16.1" - "@typescript-eslint/typescript-estree" "4.16.1" + "@typescript-eslint/scope-manager" "4.18.0" + "@typescript-eslint/types" "4.18.0" + "@typescript-eslint/typescript-estree" "4.18.0" eslint-scope "^5.0.0" eslint-utils "^2.0.0" "@typescript-eslint/parser@^4.16.1": - version "4.16.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.16.1.tgz#3bbd3234dd3c5b882b2bcd9899bc30e1e1586d2a" - integrity sha512-/c0LEZcDL5y8RyI1zLcmZMvJrsR6SM1uetskFkoh3dvqDKVXPsXI+wFB/CbVw7WkEyyTKobC1mUNp/5y6gRvXg== + version "4.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.18.0.tgz#a211edb14a69fc5177054bec04c95b185b4dde21" + integrity sha512-W3z5S0ZbecwX3PhJEAnq4mnjK5JJXvXUDBYIYGoweCyWyuvAKfGHvzmpUzgB5L4cRBb+cTu9U/ro66dx7dIimA== dependencies: - "@typescript-eslint/scope-manager" "4.16.1" - "@typescript-eslint/types" "4.16.1" - "@typescript-eslint/typescript-estree" "4.16.1" + "@typescript-eslint/scope-manager" "4.18.0" + "@typescript-eslint/types" "4.18.0" + "@typescript-eslint/typescript-estree" "4.18.0" debug "^4.1.1" -"@typescript-eslint/scope-manager@4.16.1": - version "4.16.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.16.1.tgz#244e2006bc60cfe46987e9987f4ff49c9e3f00d5" - integrity sha512-6IlZv9JaurqV0jkEg923cV49aAn8V6+1H1DRfhRcvZUrptQ+UtSKHb5kwTayzOYTJJ/RsYZdcvhOEKiBLyc0Cw== +"@typescript-eslint/scope-manager@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.18.0.tgz#d75b55234c35d2ff6ac945758d6d9e53be84a427" + integrity sha512-olX4yN6rvHR2eyFOcb6E4vmhDPsfdMyfQ3qR+oQNkAv8emKKlfxTWUXU5Mqxs2Fwe3Pf1BoPvrwZtwngxDzYzQ== dependencies: - "@typescript-eslint/types" "4.16.1" - "@typescript-eslint/visitor-keys" "4.16.1" + "@typescript-eslint/types" "4.18.0" + "@typescript-eslint/visitor-keys" "4.18.0" -"@typescript-eslint/types@4.16.1": - version "4.16.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.16.1.tgz#5ba2d3e38b1a67420d2487519e193163054d9c15" - integrity sha512-nnKqBwMgRlhzmJQF8tnFDZWfunXmJyuXj55xc8Kbfup4PbkzdoDXZvzN8//EiKR27J6vUSU8j4t37yUuYPiLqA== +"@typescript-eslint/types@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.18.0.tgz#bebe323f81f2a7e2e320fac9415e60856267584a" + integrity sha512-/BRociARpj5E+9yQ7cwCF/SNOWwXJ3qhjurMuK2hIFUbr9vTuDeu476Zpu+ptxY2kSxUHDGLLKy+qGq2sOg37A== -"@typescript-eslint/typescript-estree@4.16.1": - version "4.16.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.16.1.tgz#c2fc46b05a48fbf8bbe8b66a63f0a9ba04b356f1" - integrity sha512-m8I/DKHa8YbeHt31T+UGd/l8Kwr0XCTCZL3H4HMvvLCT7HU9V7yYdinTOv1gf/zfqNeDcCgaFH2BMsS8x6NvJg== +"@typescript-eslint/typescript-estree@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.18.0.tgz#756d3e61da8c16ab99185532c44872f4cd5538cb" + integrity sha512-wt4xvF6vvJI7epz+rEqxmoNQ4ZADArGQO9gDU+cM0U5fdVv7N+IAuVoVAoZSOZxzGHBfvE3XQMLdy+scsqFfeg== dependencies: - "@typescript-eslint/types" "4.16.1" - "@typescript-eslint/visitor-keys" "4.16.1" + "@typescript-eslint/types" "4.18.0" + "@typescript-eslint/visitor-keys" "4.18.0" debug "^4.1.1" globby "^11.0.1" is-glob "^4.0.1" semver "^7.3.2" tsutils "^3.17.1" -"@typescript-eslint/visitor-keys@4.16.1": - version "4.16.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.16.1.tgz#d7571fb580749fae621520deeb134370bbfc7293" - integrity sha512-s/aIP1XcMkEqCNcPQtl60ogUYjSM8FU2mq1O7y5cFf3Xcob1z1iXWNB6cC43Op+NGRTFgGolri6s8z/efA9i1w== +"@typescript-eslint/visitor-keys@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.18.0.tgz#4e6fe2a175ee33418318a029610845a81e2ff7b6" + integrity sha512-Q9t90JCvfYaN0OfFUgaLqByOfz8yPeTAdotn/XYNm5q9eHax90gzdb+RJ6E9T5s97Kv/UHWKERTmqA0jTKAEHw== dependencies: - "@typescript-eslint/types" "4.16.1" + "@typescript-eslint/types" "4.18.0" eslint-visitor-keys "^2.0.0" "@ungap/promise-all-settled@1.1.2": @@ -2063,7 +2063,7 @@ JSONStream@^1.0.4, JSONStream@^1.3.4: jsonparse "^1.2.0" through ">=2.2.7 <3" -abab@^2.0.3: +abab@^2.0.3, abab@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== @@ -2104,10 +2104,10 @@ acorn@^7.1.1, acorn@^7.4.0: resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -acorn@^8.0.4: - version "8.0.5" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.0.5.tgz#a3bfb872a74a6a7f661bc81b9849d9cac12601b7" - integrity sha512-v+DieK/HJkJOpFBETDJioequtc3PfxsWMaxIdIwujtF7FEV/MAyDQLlm6/zPvr7Mix07mLh6ccVwIsloceodlg== +acorn@^8.0.4, acorn@^8.0.5: + version "8.1.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.1.0.tgz#52311fd7037ae119cbb134309e901aa46295b3fe" + integrity sha512-LWCF/Wn0nfHOmJ9rzQApGnxnvgfROzGilS8936rqN/lfcYkY9MYZzdMqN+2NJ4SlTc+m5HiSa+kNfDtI64dwUA== agent-base@4, agent-base@^4.3.0: version "4.3.0" @@ -2151,9 +2151,9 @@ ajv@^6.1.0, ajv@^6.10.0, ajv@^6.12.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5: uri-js "^4.2.2" ajv@^7.0.2: - version "7.1.1" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-7.1.1.tgz#1e6b37a454021fa9941713f38b952fc1c8d32a84" - integrity sha512-ga/aqDYnUy/o7vbsRTFhhTsNeXiYb5JWDIcRIeZfwRNCefwjNTVYCGdGSUrEmiu3yDK3vFvNbgJxvrQW4JXrYQ== + version "7.2.1" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-7.2.1.tgz#a5ac226171912447683524fa2f1248fcf8bac83d" + integrity sha512-+nu0HDv7kNSOua9apAVc979qd932rrZeb3WOvoiD31A/p1mIE5/9bN2027pE2rOPYEdS3UHzsvof4hY+lM9/WQ== dependencies: fast-deep-equal "^3.1.1" json-schema-traverse "^1.0.0" @@ -2296,17 +2296,17 @@ archiver-utils@^2.1.0: readable-stream "^2.0.0" archiver@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/archiver/-/archiver-5.2.0.tgz#25aa1b3d9febf7aec5b0f296e77e69960c26db94" - integrity sha512-QEAKlgQuAtUxKeZB9w5/ggKXh21bZS+dzzuQ0RPBC20qtDCbTyzqmisoeJP46MP39fg4B4IcyvR+yeyEBdblsQ== + version "5.3.0" + resolved "https://registry.yarnpkg.com/archiver/-/archiver-5.3.0.tgz#dd3e097624481741df626267564f7dd8640a45ba" + integrity sha512-iUw+oDwK0fgNpvveEsdQ0Ase6IIKztBJU2U0E9MzszMfmVVUyv1QJhS2ITW9ZCqx8dktAxVAjWWkKehuZE8OPg== dependencies: archiver-utils "^2.1.0" async "^3.2.0" buffer-crc32 "^0.2.1" readable-stream "^3.6.0" readdir-glob "^1.0.0" - tar-stream "^2.1.4" - zip-stream "^4.0.4" + tar-stream "^2.2.0" + zip-stream "^4.1.0" are-we-there-yet@~1.1.2: version "1.1.5" @@ -2980,9 +2980,9 @@ camelcase@^6.0.0, camelcase@^6.2.0: integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== caniuse-lite@^1.0.30001181, caniuse-lite@^1.0.30001196: - version "1.0.30001196" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001196.tgz#00518a2044b1abf3e0df31fadbe5ed90b63f4e64" - integrity sha512-CPvObjD3ovWrNBaXlAIGWmg2gQQuJ5YhuciUOjPRox6hIQttu8O+b51dx6VIpIY9ESd2d0Vac1RKpICdG4rGUg== + version "1.0.30001202" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001202.tgz#4cb3bd5e8a808e8cd89e4e66c549989bc8137201" + integrity sha512-ZcijQNqrcF8JNLjzvEiXqX4JUYxoZa7Pvcsd9UD8Kz4TvhTonOSNRsK+qtvpVL4l6+T1Rh4LFtLfnNWg6BGWCQ== capture-exit@^2.0.0: version "2.0.0" @@ -3674,15 +3674,15 @@ crypto-random-string@^2.0.0: integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== css-loader@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-5.1.1.tgz#9362d444a0f7c08c148a109596715c904e252879" - integrity sha512-5FfhpjwtuRgxqmusDidowqmLlcb+1HgnEDMsi2JhiUrZUcoc+cqw+mUtMIF/+OfeMYaaFCLYp1TaIt9H6I/fKA== + version "5.1.3" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-5.1.3.tgz#87f6fc96816b20debe3cf682f85c7e56a963d0d1" + integrity sha512-CoPZvyh8sLiGARK3gqczpfdedbM74klGWurF2CsNZ2lhNaXdLIUks+3Mfax3WBeRuHoglU+m7KG/+7gY6G4aag== dependencies: camelcase "^6.2.0" cssesc "^3.0.0" icss-utils "^5.1.0" loader-utils "^2.0.0" - postcss "^8.2.6" + postcss "^8.2.8" postcss-modules-extract-imports "^3.0.0" postcss-modules-local-by-default "^4.0.0" postcss-modules-scope "^3.0.0" @@ -3721,7 +3721,7 @@ cssom@~0.3.6: resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== -cssstyle@^2.2.0: +cssstyle@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== @@ -3741,9 +3741,9 @@ cyclist@^1.0.1: integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= cypress@^6.6.0: - version "6.6.0" - resolved "https://registry.yarnpkg.com/cypress/-/cypress-6.6.0.tgz#659c64cdb06e51b6be18fdac39d8f192deb54fa0" - integrity sha512-+Xx3Zn653LJHUsCb9h1Keql2jlazbr1ROmbY6DFJMmXKLgXP4ez9cE403W93JNGRbZK0Tng3R/oP8mvd9XAPVg== + version "6.8.0" + resolved "https://registry.yarnpkg.com/cypress/-/cypress-6.8.0.tgz#8338f39212a8f71e91ff8c017a1b6e22d823d8c1" + integrity sha512-W2e9Oqi7DmF48QtOD0LfsOLVq6ef2hcXZvJXI/E3PgFNmZXEVwBefhAxVCW9yTPortjYA2XkM20KyC4HRkOm9w== dependencies: "@cypress/listr-verbose-renderer" "^0.4.1" "@cypress/request" "^2.88.5" @@ -3882,7 +3882,7 @@ decamelize@^4.0.0: resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== -decimal.js@^10.2.0: +decimal.js@^10.2.1: version "10.2.1" resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.2.1.tgz#238ae7b0f0c793d3e3cea410108b35a2c01426a3" integrity sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw== @@ -4047,9 +4047,9 @@ detect-newline@^3.0.0: integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== detect-node@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.4.tgz#014ee8f8f669c5c58023da64b8179c083a28c46c" - integrity sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw== + version "2.0.5" + resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.5.tgz#9d270aa7eaa5af0b72c4c9d9b814e7f4ce738b79" + integrity sha512-qi86tE6hRcFHy8jI1m2VG+LaPUR1LhqDa5G8tVjuUXmOrpuAgqsA1pN0+ldgr3aKUH+QLI9hCY/OcRYisERejw== dezalgo@^1.0.0: version "1.0.3" @@ -4168,9 +4168,9 @@ domhandler@^2.3.0: domelementtype "1" dompurify@^2.2.6: - version "2.2.6" - resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-2.2.6.tgz#54945dc5c0b45ce5ae228705777e8e59d7b2edc4" - integrity sha512-7b7ZArhhH0SP6W2R9cqK6RjaU82FZ2UPM7RO8qN1b1wyvC/NY1FNWcX1Pu00fFOAnzEORtwXe4bPaClg6pUybQ== + version "2.2.7" + resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-2.2.7.tgz#a5f055a2a471638680e779bd08fc334962d11fd8" + integrity sha512-jdtDffdGNY+C76jvodNTu9jt5yYj59vuTUyx+wXdzcSwAGTYZDAQkQ7Iwx9zcGrA4ixC1syU4H3RZROqRxokxg== domutils@^1.5.1, domutils@^1.7.0: version "1.7.0" @@ -4267,9 +4267,9 @@ ee-first@1.1.1: integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= electron-to-chromium@^1.3.649: - version "1.3.682" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.682.tgz#f4b5c8d4479df96b61e508a721d6c32c1262ef23" - integrity sha512-zok2y37qR00U14uM6qBz/3iIjWHom2eRfC2S1StA0RslP7x34jX+j4mxv80t8OEOHLJPVG54ZPeaFxEI7gPrwg== + version "1.3.692" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.692.tgz#4d00479055a7282cdd1b19caec09ed7779529640" + integrity sha512-Ix+zDUAXWZuUzqKdhkgN5dP7ZM+IwMG4yAGFGDLpGJP/3vNEEwuHG1LIhtXUfW0FFV0j38t5PUv2n/3MFSRviQ== elegant-spinner@^1.0.1: version "1.0.1" @@ -4350,9 +4350,9 @@ entities@^2.0.0: integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== env-paths@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.0.tgz#cdca557dc009152917d6166e2febe1f039685e43" - integrity sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA== + version "2.2.1" + resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" + integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== envinfo@^7.3.1, envinfo@^7.7.3: version "7.7.4" @@ -4456,13 +4456,13 @@ escape-string-regexp@^2.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== -escodegen@^1.14.1: - version "1.14.3" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503" - integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw== +escodegen@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd" + integrity sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw== dependencies: esprima "^4.0.1" - estraverse "^4.2.0" + estraverse "^5.2.0" esutils "^2.0.2" optionator "^0.8.1" optionalDependencies: @@ -4534,9 +4534,9 @@ eslint-visitor-keys@^2.0.0: integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== eslint@^7.21.0: - version "7.21.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.21.0.tgz#4ecd5b8c5b44f5dedc9b8a110b01bbfeb15d1c83" - integrity sha512-W2aJbXpMNofUp0ztQaF40fveSsJBjlSCSWpy//gzfTvwC+USs/nceBrKmlJOiM8r1bLwP2EuYkCqArn/6QTIgg== + version "7.22.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.22.0.tgz#07ecc61052fec63661a2cab6bd507127c07adc6f" + integrity sha512-3VawOtjSJUQiiqac8MQc+w457iGLfuNGLFn8JmF051tTKbh5/x/0vlcEj8OgDCaw7Ysa2Jn8paGshV7x2abKXg== dependencies: "@babel/code-frame" "7.12.11" "@eslint/eslintrc" "^0.4.0" @@ -4555,7 +4555,7 @@ eslint@^7.21.0: file-entry-cache "^6.0.1" functional-red-black-tree "^1.0.1" glob-parent "^5.0.0" - globals "^12.1.0" + globals "^13.6.0" ignore "^4.0.6" import-fresh "^3.0.0" imurmurhash "^0.1.4" @@ -4563,7 +4563,7 @@ eslint@^7.21.0: js-yaml "^3.13.1" json-stable-stringify-without-jsonify "^1.0.1" levn "^0.4.1" - lodash "^4.17.20" + lodash "^4.17.21" minimatch "^3.0.4" natural-compare "^1.4.0" optionator "^0.9.1" @@ -4604,7 +4604,7 @@ esrecurse@^4.3.0: dependencies: estraverse "^5.2.0" -estraverse@^4.1.1, estraverse@^4.2.0: +estraverse@^4.1.1: version "4.3.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== @@ -4645,9 +4645,9 @@ events@^3.2.0: integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== eventsource@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-1.0.7.tgz#8fbc72c93fcd34088090bc0a4e64f4b5cee6d8d0" - integrity sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ== + version "1.1.0" + resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-1.1.0.tgz#00e8ca7c92109e94b0ddf32dac677d841028cfaf" + integrity sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg== dependencies: original "^1.0.0" @@ -5098,9 +5098,9 @@ forever-agent@~0.6.1: integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= fork-ts-checker-webpack-plugin@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.1.1.tgz#c6c3b6506bfb0c7b645cd5c377e82e670d7d71c9" - integrity sha512-H8cjLmIxbnAUgxhPOqCqx1Ji3mVHnhGDnKxORZIkkkSsZLJF2IIEUc/+bywPXcWfKSR9K2zJtknRlreCWwGv0Q== + version "6.2.0" + resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.2.0.tgz#d13af02e24d1b17f769af6bdf41c1e849e1615cc" + integrity sha512-DTNbOhq6lRdjYprukX54JMeYJgQ0zMow+R5BMLwWxEX2NAXthIkwnV8DBmsWjwNLSUItKZM4TCCJbtgrtKBu2Q== dependencies: "@babel/code-frame" "^7.8.3" "@types/json-schema" "^7.0.5" @@ -5484,6 +5484,13 @@ globals@^12.1.0: dependencies: type-fest "^0.8.1" +globals@^13.6.0: + version "13.7.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.7.0.tgz#aed3bcefd80ad3ec0f0be2cf0c895110c0591795" + integrity sha512-Aipsz6ZKRxa/xQkZhNg0qIWXT6x6rD46f6x/PCnBomlttdIyAPak4YD9jTmKpZ72uROSMU87qJtcgpgHaVchiA== + dependencies: + type-fest "^0.20.2" + globby@^11.0.0, globby@^11.0.1, globby@^11.0.2: version "11.0.2" resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.2.tgz#1af538b766a3b540ebfb58a32b2e2d5897321d83" @@ -5682,10 +5689,10 @@ hosted-git-info@^2.1.4, hosted-git-info@^2.7.1: resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== -hosted-git-info@^3.0.6: - version "3.0.8" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-3.0.8.tgz#6e35d4cc87af2c5f816e4cb9ce350ba87a3f370d" - integrity sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw== +hosted-git-info@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.0.1.tgz#710ef5452ea429a844abc33c981056e7371edab7" + integrity sha512-eT7NrxAsppPRQEBSwKSosReE+v8OzABwEScQYk5d4uxaEPlzxTIku7LINXtBGalthkLhJnq5lBI89PfK43zAKg== dependencies: lru-cache "^6.0.0" @@ -5717,9 +5724,9 @@ html-escaper@^2.0.0: integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== html-loader@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/html-loader/-/html-loader-2.1.1.tgz#61174d43a4fe97b2a79c3b6206736e6725e13b97" - integrity sha512-L6HUVgr2aeGMyiool2raoBQb8Lue2UTAhUsHvsMLyNxfBHMtOz1NJL1GyE4VbyAoYBK5PJp1I9Aw+FqS3d2eTA== + version "2.1.2" + resolved "https://registry.yarnpkg.com/html-loader/-/html-loader-2.1.2.tgz#17eb111441e863a9308071ed876b4ba861f143df" + integrity sha512-XB4O1+6mpLp4qy/3qg5+1QPZ/uXvWtO64hNAX87sKHwcHkp1LJGU7V3sJ9iVmRACElAZXQ4YOO/Lbkx5kYfl9A== dependencies: html-minifier-terser "^5.1.1" parse5 "^6.0.1" @@ -6376,9 +6383,9 @@ is-path-inside@^2.1.0: path-is-inside "^1.0.2" is-path-inside@^3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.2.tgz#f5220fc82a3e233757291dddc9c5877f2a1f3017" - integrity sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg== + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: version "1.1.0" @@ -6461,6 +6468,11 @@ is-typedarray@^1.0.0, is-typedarray@~1.0.0: resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== + is-utf8@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" @@ -7022,9 +7034,9 @@ jquery-ui@>=1.8.0: integrity sha1-vLQEXI3QU5wTS8FIjN0+dop6nlE= jquery@>=1.8.0, jquery@^3.5.1: - version "3.5.1" - resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.5.1.tgz#d7b4d08e1bfdb86ad2f1a3d039ea17304717abb5" - integrity sha512-XwIBPqcMn57FxfT+Go5pzySnm4KWkT1Tv7gjrpT1srtf8Weynl6R273VJ5GjkRb51IzMp5nbaPjJXMWeju2MKg== + version "3.6.0" + resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.6.0.tgz#c72a09f15c1bdce142f49dbf1170bdf8adac2470" + integrity sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw== js-base64@^2.1.8: version "2.6.4" @@ -7062,35 +7074,35 @@ jsdom-global@^3.0.2: integrity sha1-a9KZwTsMRiay2iwDk81DhdYGrLk= jsdom@^16.4.0: - version "16.4.0" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.4.0.tgz#36005bde2d136f73eee1a830c6d45e55408edddb" - integrity sha512-lYMm3wYdgPhrl7pDcRmvzPhhrGVBeVhPIqeHjzeiHN3DFmD1RBpbExbi8vU7BJdH8VAZYovR8DMt0PNNDM7k8w== + version "16.5.1" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.5.1.tgz#4ced6bbd7b77d67fb980e64d9e3e6fb900f97dd6" + integrity sha512-pF73EOsJgwZekbDHEY5VO/yKXUkab/DuvrQB/ANVizbr6UAHJsDdHXuotZYwkJSGQl1JM+ivXaqY+XBDDL4TiA== dependencies: - abab "^2.0.3" - acorn "^7.1.1" + abab "^2.0.5" + acorn "^8.0.5" acorn-globals "^6.0.0" cssom "^0.4.4" - cssstyle "^2.2.0" + cssstyle "^2.3.0" data-urls "^2.0.0" - decimal.js "^10.2.0" + decimal.js "^10.2.1" domexception "^2.0.1" - escodegen "^1.14.1" + escodegen "^2.0.0" html-encoding-sniffer "^2.0.1" is-potential-custom-element-name "^1.0.0" nwsapi "^2.2.0" - parse5 "5.1.1" + parse5 "6.0.1" request "^2.88.2" - request-promise-native "^1.0.8" - saxes "^5.0.0" + request-promise-native "^1.0.9" + saxes "^5.0.1" symbol-tree "^3.2.4" - tough-cookie "^3.0.1" + tough-cookie "^4.0.0" w3c-hr-time "^1.0.2" w3c-xmlserializer "^2.0.0" webidl-conversions "^6.1.0" whatwg-encoding "^1.0.5" whatwg-mimetype "^2.3.0" whatwg-url "^8.0.0" - ws "^7.2.3" + ws "^7.4.4" xml-name-validator "^3.0.0" jsesc@^2.5.1: @@ -7565,7 +7577,7 @@ lodash@4.x, lodash@^4.0.0, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.14, lo resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== -log-symbols@4.0.0, log-symbols@^4.0.0: +log-symbols@4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.0.0.tgz#69b3cc46d20f448eccdb75ea1fa733d9e821c920" integrity sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA== @@ -7579,6 +7591,14 @@ log-symbols@^1.0.2: dependencies: chalk "^1.0.0" +log-symbols@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== + dependencies: + chalk "^4.1.0" + is-unicode-supported "^0.1.0" + log-update@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/log-update/-/log-update-2.3.0.tgz#88328fd7d1ce7938b29283746f0b1bc126b24708" @@ -7711,9 +7731,9 @@ map-obj@^2.0.0: integrity sha1-plzSkIepJZi4eRJXpSPgISIqwfk= map-obj@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.1.0.tgz#b91221b542734b9f14256c0132c897c5d7256fd5" - integrity sha512-glc9y00wgtwcDmp7GaE/0b0OnxpNJsVf3ael/An6Fe2Q51LLwN1er6sdomLRzz5h0+yMpiYLhWYF5R7HeqVd4g== + version "4.2.0" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.2.0.tgz#0e8bc823e2aaca8a0942567d12ed14f389eec153" + integrity sha512-NAq0fCmZYGz9UFEQyndp7sisrow4GroyGeKluyKC/chuITZsPyOyC1UJZPJlVFImhXdROIP5xqouRLThT3BbpQ== map-visit@^1.0.0: version "1.0.0" @@ -8014,9 +8034,9 @@ mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.4, mkdirp@^0.5.5: minimist "^1.2.5" mocha@^8.3.1: - version "8.3.1" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-8.3.1.tgz#b9eda6da1eb8cb8d29860a9c2205de5b8a076560" - integrity sha512-5SBMxANWqOv5bw3Hx+HVgaWlcWcFEQDUdaUAr1AUU+qwtx6cowhn7gEDT/DwQP7uYxnvShdUOVLbTYAHOEGfDQ== + version "8.3.2" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-8.3.2.tgz#53406f195fa86fbdebe71f8b1c6fb23221d69fcc" + integrity sha512-UdmISwr/5w+uXLPKspgoV7/RXZwKRTiTjJ2/AC5ZiEztIoOYdfKb19+9jNmEInzx5pBsCyJQzarAxqIGBNYJhg== dependencies: "@ungap/promise-all-settled" "1.1.2" ansi-colors "4.1.1" @@ -8179,11 +8199,16 @@ nan@^2.12.1, nan@^2.13.2: resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19" integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ== -nanoid@3.1.20, nanoid@^3.1.20: +nanoid@3.1.20: version "3.1.20" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.20.tgz#badc263c6b1dcf14b71efaa85f6ab4c1d6cfc788" integrity sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw== +nanoid@^3.1.20: + version "3.1.22" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.22.tgz#b35f8fb7d151990a8aebd5aa5015c03cf726f844" + integrity sha512-/2ZUaJX2ANuLtTvqTlgqBQNJoQO398KyJgZloL0PZkC0dpysjncRUPsFe3DUPzz/y3h+u7C46np8RMuvF3jsSQ== + nanomatch@^1.2.9: version "1.2.13" resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" @@ -8292,9 +8317,9 @@ node-modules-regexp@^1.0.0: integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= node-notifier@^8.0.0: - version "8.0.1" - resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-8.0.1.tgz#f86e89bbc925f2b068784b31f382afdc6ca56be1" - integrity sha512-BvEXF+UmsnAfYfoapKM9nGxnP+Wn7P91YfXmrKnfcYCx6VBeoN5Ez5Ogck6I8Bi5k4RlpqRYaw75pAwzX9OphA== + version "8.0.2" + resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-8.0.2.tgz#f3167a38ef0d2c8a866a83e318c1ba0efeb702c5" + integrity sha512-oJP/9NAdd9+x2Q+rfphB2RJCHjod70RcRLjosiPMMu5gjIfwVnOUGq2nbTjTUbmy0DJ/tFIVT30+Qe3nzl4TJg== dependencies: growly "^1.3.0" is-wsl "^2.2.0" @@ -8387,13 +8412,13 @@ normalize-package-data@^2.0.0, normalize-package-data@^2.3.0, normalize-package- validate-npm-package-license "^3.0.1" normalize-package-data@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-3.0.0.tgz#1f8a7c423b3d2e85eb36985eaf81de381d01301a" - integrity sha512-6lUjEI0d3v6kFrtgA/lOx4zHCWULXsFNIjHolnZCKCTLA6m/G625cdn3O7eNmT0iD3jfo6HZ9cdImGZwf21prw== + version "3.0.2" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-3.0.2.tgz#cae5c410ae2434f9a6c1baa65d5bc3b9366c8699" + integrity sha512-6CdZocmfGaKnIHPVFhJJZ3GuR8SsLKvDANFp47Jmy51aKIr8akjAWTSxtpI+MBgBFdSMRyo4hMpDlT6dTffgZg== dependencies: - hosted-git-info "^3.0.6" - resolve "^1.17.0" - semver "^7.3.2" + hosted-git-info "^4.0.1" + resolve "^1.20.0" + semver "^7.3.4" validate-npm-package-license "^3.0.1" normalize-path@^2.1.1: @@ -8941,12 +8966,7 @@ parse-url@^5.0.0: parse-path "^4.0.0" protocols "^1.4.0" -parse5@5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" - integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== - -parse5@^6.0.1: +parse5@6.0.1, parse5@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== @@ -9219,10 +9239,10 @@ postcss-value-parser@^4.1.0: resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== -postcss@^8.2.6, postcss@^8.2.7: - version "8.2.7" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.2.7.tgz#48ed8d88b4de10afa0dfd1c3f840aa57b55c4d47" - integrity sha512-DsVLH3xJzut+VT+rYr0mtvOtpTjSyqDwPf5EZWXcb0uAKfitGpTY9Ec+afi2+TgdN8rWS9Cs88UDYehKo/RvOw== +postcss@^8.2.7, postcss@^8.2.8: + version "8.2.8" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.2.8.tgz#0b90f9382efda424c4f0f69a2ead6f6830d08ece" + integrity sha512-1F0Xb2T21xET7oQV9eKuctbM9S7BC0fetoHCc4H13z0PT6haiRLP4T0ZY4XWh7iLP0usgqykT6p9B2RtOf4FPw== dependencies: colorette "^1.2.2" nanoid "^3.1.20" @@ -9371,7 +9391,7 @@ prr@~1.0.1: resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= -psl@^1.1.28: +psl@^1.1.28, psl@^1.1.33: version "1.8.0" resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== @@ -9434,9 +9454,11 @@ qs@6.7.0: integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== qs@^6.4.0, qs@^6.9.4: - version "6.9.6" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.6.tgz#26ed3c8243a431b2924aca84cc90471f35d5a0ee" - integrity sha512-TIRk4aqYLNoJUbd+g2lEdz5kLWIuTMRagAXxl78Q0RiVjAOugHmeKNGdd3cwo/ktpf9aL9epCfFqWDEKysUlLQ== + version "6.10.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.0.tgz#8b6519121ab291c316a3e4d49cecf6d13d8c7fe5" + integrity sha512-yjACOWijC6L/kmPZZAsVBNY2zfHSIbpdpL977quseu56/8BZ2LoF5axK2bGhbzhVKt7V9xgWTtpyLbxwIoER0Q== + dependencies: + side-channel "^1.0.4" qs@~6.5.2: version "6.5.2" @@ -9818,7 +9840,7 @@ request-promise-core@1.1.4: dependencies: lodash "^4.17.19" -request-promise-native@^1.0.8: +request-promise-native@^1.0.9: version "1.0.9" resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.9.tgz#e407120526a5efdc9a39b28a5679bf47b9d9dc28" integrity sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g== @@ -9907,7 +9929,7 @@ resolve-url@^0.2.1: resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= -resolve@^1.10.0, resolve@^1.13.1, resolve@^1.17.0, resolve@^1.18.1, resolve@^1.9.0: +resolve@^1.10.0, resolve@^1.13.1, resolve@^1.17.0, resolve@^1.18.1, resolve@^1.20.0, resolve@^1.9.0: version "1.20.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== @@ -9996,6 +10018,13 @@ run-queue@^1.0.0, run-queue@^1.0.3: dependencies: aproba "^1.1.1" +rxjs@7.0.0-beta.13: + version "7.0.0-beta.13" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.0.0-beta.13.tgz#f8dd03f7aa414c9f7fde831431e54c4534ecfa39" + integrity sha512-//ll3EfI5SgTfrS5DUjc/uEmyazS0vUDMHqa/GbPR9ubdVLtbrv2bK3y75JyZPfYl1Bq2JbR/IbByhfzfpJyvw== + dependencies: + tslib "~2.1.0" + rxjs@^6.3.3, rxjs@^6.4.0, rxjs@^6.6.6: version "6.6.6" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.6.tgz#14d8417aa5a07c5e633995b525e1e3c0dec03b70" @@ -10058,7 +10087,7 @@ sass-loader@^11.0.1: klona "^2.0.4" neo-async "^2.6.2" -saxes@^5.0.0: +saxes@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== @@ -10261,6 +10290,15 @@ shellwords@^0.1.1: resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" @@ -10605,9 +10643,9 @@ strict-uri-encode@^2.0.0: integrity sha1-ucczDHBChi9rFC3CdLvMWGbONUY= string-length@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.1.tgz#4a973bf31ef77c4edbceadd6af2611996985f8a1" - integrity sha512-PKyXUd0LK0ePjSOnWn34V2uD6acUWev9uy0Ft05k0E8xRW+SKcA0F7eMr7h5xlzfn+4O3N+55rduYyet3Jk+jw== + version "4.0.2" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" + integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== dependencies: char-regex "^1.0.2" strip-ansi "^6.0.0" @@ -10863,7 +10901,7 @@ tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0: resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.0.tgz#5c373d281d9c672848213d0e037d1c4165ab426b" integrity sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw== -tar-stream@^2.1.4: +tar-stream@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== @@ -10963,9 +11001,9 @@ terser@^4.6.3: source-map-support "~0.5.12" terser@^5.5.1: - version "5.6.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.6.0.tgz#138cdf21c5e3100b1b3ddfddf720962f88badcd2" - integrity sha512-vyqLMoqadC1uR0vywqOZzriDYzgEkNJFK4q9GeyOBHIbiECHiWLKcWfbQWAUaPfxkjDhapSlZB9f7fkMrvkVjA== + version "5.6.1" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.6.1.tgz#a48eeac5300c0a09b36854bf90d9c26fb201973c" + integrity sha512-yv9YLFQQ+3ZqgWCUk+pvNJwgUTdlIxUk1WTN+RnaFJe2L7ipG2csPT0ra2XRm7Cs8cxN7QXmK1rFzEwYEQkzXw== dependencies: commander "^2.20.0" source-map "~0.7.2" @@ -11133,14 +11171,14 @@ tough-cookie@^2.3.3, tough-cookie@~2.5.0: psl "^1.1.28" punycode "^2.1.1" -tough-cookie@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-3.0.1.tgz#9df4f57e739c26930a018184887f4adb7dca73b2" - integrity sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg== +tough-cookie@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.0.0.tgz#d822234eeca882f991f0f908824ad2622ddbece4" + integrity sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg== dependencies: - ip-regex "^2.1.0" - psl "^1.1.28" + psl "^1.1.33" punycode "^2.1.1" + universalify "^0.1.2" tr46@^1.0.1: version "1.0.1" @@ -11184,9 +11222,9 @@ trim-off-newlines@^1.0.0: glob "^7.1.2" ts-jest@^26.5.3: - version "26.5.3" - resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-26.5.3.tgz#a6ee00ba547be3b09877550df40a1465d0295554" - integrity sha512-nBiiFGNvtujdLryU7MiMQh1iPmnZ/QvOskBbD2kURiI1MwqvxlxNnaAB/z9TbslMqCsSbu5BXvSSQPc5tvHGeA== + version "26.5.4" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-26.5.4.tgz#207f4c114812a9c6d5746dd4d1cdf899eafc9686" + integrity sha512-I5Qsddo+VTm94SukBJ4cPimOoFZsYTeElR2xy6H2TOVs+NsvgYglW8KuQgKoApOKuaU/Ix/vrF9ebFZlb5D2Pg== dependencies: bs-logger "0.x" buffer-from "1.x" @@ -11200,9 +11238,9 @@ ts-jest@^26.5.3: yargs-parser "20.x" ts-loader@^8.0.17: - version "8.0.17" - resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-8.0.17.tgz#98f2ccff9130074f4079fd89b946b4c637b1f2fc" - integrity sha512-OeVfSshx6ot/TCxRwpBHQ/4lRzfgyTkvi7ghDVrLXOHzTbSK413ROgu/xNqM72i3AFeAIJgQy78FwSMKmOW68w== + version "8.0.18" + resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-8.0.18.tgz#b2385cbe81c34ad9f997915129cdde3ad92a61ea" + integrity sha512-hRZzkydPX30XkLaQwJTDcWDoxZHK6IrEMDQpNd7tgcakFruFkeUp/aY+9hBb7BUGb+ZWKI0jiOGMo0MckwzdDQ== dependencies: chalk "^4.1.0" enhanced-resolve "^4.0.0" @@ -11237,15 +11275,15 @@ tslib@^1.8.1, tslib@^1.9.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.0.3: +tslib@^2.0.3, tslib@~2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.1.0.tgz#da60860f1c2ecaa5703ab7d39bc05b6bf988b97a" integrity sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A== tsutils@^3.17.1: - version "3.20.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.20.0.tgz#ea03ea45462e146b53d70ce0893de453ff24f698" - integrity sha512-RYbuQuvkhuqVeXweWT3tJLKOEJ/UUw9GjNEZGWdrLLlM+611o1gwLHBpxoFJKKl25fLprp2eVthtKs5JOrNeXg== + version "3.21.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" + integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== dependencies: tslib "^1.8.1" @@ -11290,6 +11328,11 @@ type-fest@^0.18.0: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f" integrity sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw== +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + type-fest@^0.3.0: version "0.3.1" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.3.1.tgz#63d00d204e059474fe5e1b7c011112bbd1dc29e1" @@ -11331,9 +11374,9 @@ typescript@^4.2.3: integrity sha512-qOcYwxaByStAWrBf4x0fibwZvMRG+r4cQoTjbPtUlrWjBHbmCAww1i448U0GJ+3cNNEtebDteo/cHOR3xJ4wEw== uglify-js@^3.1.4: - version "3.13.0" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.13.0.tgz#66ed69f7241f33f13531d3d51d5bcebf00df7f69" - integrity sha512-TWYSWa9T2pPN4DIJYbU9oAjQx+5qdV5RUDxwARg8fmJZrD/V27Zj0JngW5xg1DFz42G0uDYl2XhzF6alSzD62w== + version "3.13.1" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.13.1.tgz#2749d4b8b5b7d67460b4a418023ff73c3fefa60a" + integrity sha512-EWhx3fHy3M9JbaeTnO+rEqzCe1wtyQClv6q3YWq0voOj4E+bMZBErVS1GAHPDiRGONYq34M1/d8KuQMgvi6Gjw== uid-number@0.0.6: version "0.0.6" @@ -11417,7 +11460,7 @@ universal-user-agent@^6.0.0: resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.0.tgz#3381f8503b251c0d9cd21bc1de939ec9df5480ee" integrity sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w== -universalify@^0.1.0: +universalify@^0.1.0, universalify@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== @@ -11764,9 +11807,9 @@ webpack-sources@^2.1.1: source-map "^0.6.1" webpack@^5.24.3: - version "5.24.3" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.24.3.tgz#6ec0f5059f8d7c7961075fa553cfce7b7928acb3" - integrity sha512-x7lrWZ7wlWAdyKdML6YPvfVZkhD1ICuIZGODE5SzKJjqI9A4SpqGTjGJTc6CwaHqn19gGaoOR3ONJ46nYsn9rw== + version "5.26.3" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.26.3.tgz#bafd439abac08fbb82657ec855d038743b725ab8" + integrity sha512-z/F2lt2N1fZqaud1B4SzjL3OW03eULThbBXQ2OX4LSrZX4N9k1A5d0Rje3zS2g887DTWyAV0KGqEf64ois2dhg== dependencies: "@types/eslint-scope" "^3.7.0" "@types/estree" "^0.0.46" @@ -12010,7 +12053,7 @@ ws@^6.2.1: dependencies: async-limiter "~1.0.0" -ws@^7.2.3: +ws@^7.4.4: version "7.4.4" resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.4.tgz#383bc9742cb202292c9077ceab6f6047b17f2d59" integrity sha512-Qm8k8ojNQIMx7S+Zp8u/uHOx7Qazv3Yv4q68MiWWWOJhiwG5W3x7iqmRtJo8xxrciZUY4vRxUTJCKuRnF28ZZw== @@ -12061,9 +12104,9 @@ yallist@^4.0.0: integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== yaml@^1.10.0, yaml@^1.7.2: - version "1.10.0" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.0.tgz#3b593add944876077d4d683fee01081bd9fff31e" - integrity sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg== + version "1.10.2" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" + integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== yargs-parser@20.2.4: version "20.2.4" @@ -12071,9 +12114,9 @@ yargs-parser@20.2.4: integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== yargs-parser@20.x, yargs-parser@^20.2.2, yargs-parser@^20.2.3: - version "20.2.6" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.6.tgz#69f920addf61aafc0b8b89002f5d66e28f2d8b20" - integrity sha512-AP1+fQIWSM/sMiET8fyayjx/J+JmTPt2Mr0FkrgqB4todtfa53sOsrSAcIrJRD5XS20bKUwaDIuMkWKCEiQLKA== + version "20.2.7" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.7.tgz#61df85c113edfb5a7a4e36eb8aa60ef423cbc90a" + integrity sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw== yargs-parser@^13.1.2: version "13.1.2" @@ -12190,7 +12233,7 @@ yocto-queue@^0.1.0: resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== -zip-stream@^4.0.4: +zip-stream@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-4.1.0.tgz#51dd326571544e36aa3f756430b313576dc8fc79" integrity sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A== From 9fc66974f49acf97e8e3dc0f2507d569eb1bfe65 Mon Sep 17 00:00:00 2001 From: ghiscoding Date: Fri, 19 Mar 2021 00:13:00 -0400 Subject: [PATCH 13/21] tests: add missing unit test --- packages/rxjs-observable/src/rxjs-resource.spec.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/packages/rxjs-observable/src/rxjs-resource.spec.ts b/packages/rxjs-observable/src/rxjs-resource.spec.ts index b1b135797..1398700f6 100644 --- a/packages/rxjs-observable/src/rxjs-resource.spec.ts +++ b/packages/rxjs-observable/src/rxjs-resource.spec.ts @@ -40,6 +40,12 @@ describe('RxJs Resource', () => { expect(output instanceof Observable).toBeTruthy(); }); + it('should be able to execute the "firstValueFrom" method and expect an Observable returned', () => { + const observable = service.createObservable(); + const output = service.firstValueFrom(observable); + expect(output instanceof Observable).toBeTruthy(); + }); + it('should be able to execute the "takeUntil" method and expect an Observable returned', () => { const observable = service.createObservable(); const iifOutput = service.iif(() => isObservable(observable)); From 7bf5dfc6973451e26743c8a0ef3d984d2f346f9d Mon Sep 17 00:00:00 2001 From: ghiscoding Date: Fri, 19 Mar 2021 00:21:12 -0400 Subject: [PATCH 14/21] refactor: remove unused rxjs first() method --- .../src/services/__tests__/rxjsFacade.spec.ts | 4 ---- packages/common/src/services/rxjsFacade.ts | 6 +----- packages/rxjs-observable/src/rxjs-resource.spec.ts | 8 +------- packages/rxjs-observable/src/rxjs.resource.ts | 10 +++------- test/rxjsResourceStub.ts | 14 +++++--------- 5 files changed, 10 insertions(+), 32 deletions(-) diff --git a/packages/common/src/services/__tests__/rxjsFacade.spec.ts b/packages/common/src/services/__tests__/rxjsFacade.spec.ts index 4488c658b..e333af466 100644 --- a/packages/common/src/services/__tests__/rxjsFacade.spec.ts +++ b/packages/common/src/services/__tests__/rxjsFacade.spec.ts @@ -13,10 +13,6 @@ describe('RxJsFacade Service', () => { expect(() => RxJsFacade.prototype.createSubject()).toThrow('RxJS Facade "createSubject" method must be implemented'); }); - it('should display a not implemented when calling "first" method', () => { - expect(() => RxJsFacade.prototype.first()).toThrow('RxJS Facade "first" method must be implemented'); - }); - it('should display a not implemented when calling "firstValueFrom" method', () => { expect(() => RxJsFacade.prototype.firstValueFrom({} as any)).toThrow('RxJS Facade "firstValueFrom" method must be implemented'); }); diff --git a/packages/common/src/services/rxjsFacade.ts b/packages/common/src/services/rxjsFacade.ts index 3804236e6..8371a6a6b 100644 --- a/packages/common/src/services/rxjsFacade.ts +++ b/packages/common/src/services/rxjsFacade.ts @@ -32,11 +32,7 @@ export abstract class RxJsFacade { throw new Error('RxJS Facade "createSubject" method must be implemented'); } - first(predicate?: null, defaultValue?: D): any { - throw new Error('RxJS Facade "first" method must be implemented'); - } - - firstValueFrom(source: ObservableFacade) { + firstValueFrom(source: ObservableFacade): Promise { throw new Error('RxJS Facade "firstValueFrom" method must be implemented'); } diff --git a/packages/rxjs-observable/src/rxjs-resource.spec.ts b/packages/rxjs-observable/src/rxjs-resource.spec.ts index 1398700f6..debea7a2c 100644 --- a/packages/rxjs-observable/src/rxjs-resource.spec.ts +++ b/packages/rxjs-observable/src/rxjs-resource.spec.ts @@ -34,16 +34,10 @@ describe('RxJs Resource', () => { expect(iifOutput instanceof Observable).toBeTruthy(); }); - it('should be able to execute the "first" method and expect an Observable returned', () => { - const observable = service.createObservable(); - const output = observable.pipe(service.first()); - expect(output instanceof Observable).toBeTruthy(); - }); - it('should be able to execute the "firstValueFrom" method and expect an Observable returned', () => { const observable = service.createObservable(); const output = service.firstValueFrom(observable); - expect(output instanceof Observable).toBeTruthy(); + expect(output instanceof Promise).toBeTruthy(); }); it('should be able to execute the "takeUntil" method and expect an Observable returned', () => { diff --git a/packages/rxjs-observable/src/rxjs.resource.ts b/packages/rxjs-observable/src/rxjs.resource.ts index 4e1fe0740..16fd9c902 100644 --- a/packages/rxjs-observable/src/rxjs.resource.ts +++ b/packages/rxjs-observable/src/rxjs.resource.ts @@ -1,6 +1,6 @@ import { RxJsFacade } from '@slickgrid-universal/common'; -import { EMPTY, iif, isObservable, firstValueFrom, Observable, OperatorFunction, Subject } from 'rxjs'; -import { first, takeUntil } from 'rxjs/operators'; +import { EMPTY, iif, isObservable, firstValueFrom, Observable, Subject } from 'rxjs'; +import { takeUntil } from 'rxjs/operators'; export class RxJsResource implements RxJsFacade { readonly className = 'RxJsResource'; @@ -23,11 +23,7 @@ export class RxJsResource implements RxJsFacade { return new Subject(); } - first(predicate?: null, defaultValue?: D): OperatorFunction { - return first(predicate, defaultValue); - } - - firstValueFrom(source: Observable) { + firstValueFrom(source: Observable): Promise { return firstValueFrom(source); } diff --git a/test/rxjsResourceStub.ts b/test/rxjsResourceStub.ts index a475373b3..1adace899 100644 --- a/test/rxjsResourceStub.ts +++ b/test/rxjsResourceStub.ts @@ -1,6 +1,6 @@ import { RxJsFacade } from '@slickgrid-universal/common'; -import { EMPTY, iif, isObservable, firstValueFrom, Observable, OperatorFunction, Subject } from 'rxjs'; -import { first, takeUntil } from 'rxjs/operators'; +import { EMPTY, iif, isObservable, firstValueFrom, Observable, Subject } from 'rxjs'; +import { takeUntil } from 'rxjs/operators'; export class RxJsResourceStub implements RxJsFacade { readonly className = 'RxJsResource'; @@ -28,11 +28,7 @@ export class RxJsResourceStub implements RxJsFacade { return EMPTY; } - first(predicate?: null, defaultValue?: D): OperatorFunction { - return first(predicate, defaultValue); - } - - firstValueFrom(source: Observable) { + firstValueFrom(source: Observable): Promise { return firstValueFrom(source); } @@ -41,8 +37,8 @@ export class RxJsResourceStub implements RxJsFacade { } /** Tests to see if the object is an RxJS Observable */ - isObservable(obj: any): boolean { - return isObservable(obj); + isObservable(obj: any): boolean { + return isObservable(obj); } /** Emits the values emitted by the source Observable until a `notifier` Observable emits a value. */ From dc4f9ddcd127b4b9d88e89586c454b9de40d2b21 Mon Sep 17 00:00:00 2001 From: ghiscoding Date: Sat, 20 Mar 2021 18:33:17 -0400 Subject: [PATCH 15/21] refactor: remove Facade suffix to avoid confusions - because Observable/Subject are used in some of the Slickgrid-Universal interfaces, it would be better to keep same names as RxJS interfaces to avoid confusion even though it is still the facade that is in play --- .../common/src/filters/autoCompleteFilter.ts | 3 +-- .../common/src/filters/filterUtilities.ts | 6 ++--- packages/common/src/filters/selectFilter.ts | 3 +-- .../interfaces/backendServiceApi.interface.ts | 6 ++--- .../src/interfaces/columnEditor.interface.ts | 4 ++-- .../src/interfaces/columnFilter.interface.ts | 4 ++-- .../rowDetailViewOption.interface.ts | 4 ++-- .../src/interfaces/subscription.interface.ts | 2 +- .../src/services/__tests__/rxjsFacade.spec.ts | 22 +++++++++---------- .../src/services/backendUtility.service.ts | 6 ++--- .../common/src/services/filter.service.ts | 4 ++-- .../common/src/services/gridState.service.ts | 10 ++++----- .../common/src/services/pagination.service.ts | 8 +++---- .../common/src/services/pubSub.service.ts | 8 +++---- packages/common/src/services/rxjsFacade.ts | 22 +++++++++---------- packages/common/src/services/sort.service.ts | 4 ++-- packages/common/src/services/utilities.ts | 8 +++---- .../interfaces/graphqlServiceApi.interface.ts | 6 ++--- .../components/slick-vanilla-grid-bundle.ts | 6 ++--- .../src/services/eventPubSub.service.ts | 4 ++-- 20 files changed, 69 insertions(+), 71 deletions(-) diff --git a/packages/common/src/filters/autoCompleteFilter.ts b/packages/common/src/filters/autoCompleteFilter.ts index 16220cf91..e5cf00eee 100644 --- a/packages/common/src/filters/autoCompleteFilter.ts +++ b/packages/common/src/filters/autoCompleteFilter.ts @@ -17,14 +17,13 @@ import { FilterCallback, GridOption, SlickGrid, - Subscription, } from './../interfaces/index'; import { CollectionService } from '../services/collection.service'; import { collectionObserver, propertyObserver } from '../services/observers'; import { getDescendantProperty, sanitizeTextByAvailableSanitizer, toKebabCase, unsubscribeAll } from '../services/utilities'; import { TranslaterService } from '../services/translater.service'; import { renderCollectionOptionsAsync } from './filterUtilities'; -import { RxJsFacade } from '../services/rxjsFacade'; +import { RxJsFacade, Subscription } from '../services/rxjsFacade'; export class AutoCompleteFilter implements Filter { protected _autoCompleteOptions!: AutocompleteOption; diff --git a/packages/common/src/filters/filterUtilities.ts b/packages/common/src/filters/filterUtilities.ts index ea75c4413..f500b8c30 100644 --- a/packages/common/src/filters/filterUtilities.ts +++ b/packages/common/src/filters/filterUtilities.ts @@ -1,6 +1,6 @@ import { OperatorString } from '../enums/operatorString.type'; -import { Column, Subscription } from '../interfaces/index'; -import { ObservableFacade, RxJsFacade, SubjectFacade } from '../services/rxjsFacade'; +import { Column } from '../interfaces/index'; +import { Observable, RxJsFacade, Subject, Subscription } from '../services/rxjsFacade'; import { castObservableToPromise, getDescendantProperty, htmlEncodedStringWithPadding } from '../services/utilities'; export function buildSelectOperatorHtmlString(optionValues: Array<{ operator: OperatorString, description: string }>) { @@ -36,7 +36,7 @@ export function renderDomElementFromCollectionAsync(collection: any[], columnDef renderDomElementCallback(collection); } -export async function renderCollectionOptionsAsync(collectionAsync: Promise | ObservableFacade | SubjectFacade, columnDef: Column, renderDomElementCallback: (collection: any) => void, rxjs?: RxJsFacade, subscriptions?: Subscription[]): Promise { +export async function renderCollectionOptionsAsync(collectionAsync: Promise | Observable | Subject, columnDef: Column, renderDomElementCallback: (collection: any) => void, rxjs?: RxJsFacade, subscriptions?: Subscription[]): Promise { const columnFilter = columnDef?.filter ?? {}; const collectionOptions = columnFilter?.collectionOptions ?? {}; diff --git a/packages/common/src/filters/selectFilter.ts b/packages/common/src/filters/selectFilter.ts index c42336d5d..e982b75e3 100644 --- a/packages/common/src/filters/selectFilter.ts +++ b/packages/common/src/filters/selectFilter.ts @@ -13,12 +13,11 @@ import { MultipleSelectOption, SelectOption, SlickGrid, - Subscription } from './../interfaces/index'; import { CollectionService } from '../services/collection.service'; import { collectionObserver, propertyObserver } from '../services/observers'; import { getDescendantProperty, getTranslationPrefix, htmlEncode, sanitizeTextByAvailableSanitizer, unsubscribeAll } from '../services/utilities'; -import { RxJsFacade, TranslaterService } from '../services'; +import { RxJsFacade, Subscription, TranslaterService } from '../services'; import { renderCollectionOptionsAsync } from './filterUtilities'; export class SelectFilter implements Filter { diff --git a/packages/common/src/interfaces/backendServiceApi.interface.ts b/packages/common/src/interfaces/backendServiceApi.interface.ts index 61dd1c4a6..0921857e1 100644 --- a/packages/common/src/interfaces/backendServiceApi.interface.ts +++ b/packages/common/src/interfaces/backendServiceApi.interface.ts @@ -1,4 +1,4 @@ -import { ObservableFacade } from '../services/rxjsFacade'; +import { Observable } from '../services/rxjsFacade'; import { BackendService } from './backendService.interface'; export interface BackendServiceApi { @@ -35,13 +35,13 @@ export interface BackendServiceApi { onError?: (e: any) => void; /** On init (or on page load), what action to perform? */ - onInit?: (query: string) => Promise | ObservableFacade; + onInit?: (query: string) => Promise | Observable; /** Before executing the query, what action to perform? For example, start a spinner */ preProcess?: () => void; /** On Processing, we get the query back from the service, and we need to provide a Promise/Observable. For example: this.http.get(myGraphqlUrl) */ - process: (query: string) => Promise | ObservableFacade; + process: (query: string) => Promise | Observable; /** After executing the query, what action to perform? For example, stop the spinner */ postProcess?: (response: any) => void; diff --git a/packages/common/src/interfaces/columnEditor.interface.ts b/packages/common/src/interfaces/columnEditor.interface.ts index 8524aed1e..64fdda433 100644 --- a/packages/common/src/interfaces/columnEditor.interface.ts +++ b/packages/common/src/interfaces/columnEditor.interface.ts @@ -1,5 +1,5 @@ import { FieldType } from '../enums/index'; -import { ObservableFacade } from '../services/rxjsFacade'; +import { Observable } from '../services/rxjsFacade'; import { CollectionCustomStructure, CollectionFilterBy, @@ -27,7 +27,7 @@ export interface ColumnEditor { callbacks?: any; /** A collection of items/options that will be loaded asynchronously (commonly used with AutoComplete & Single/Multi-Select Editors) */ - collectionAsync?: Promise | ObservableFacade; + collectionAsync?: Promise | Observable; /** * A collection of items/options (commonly used with AutoComplete & Single/Multi-Select Editors) diff --git a/packages/common/src/interfaces/columnFilter.interface.ts b/packages/common/src/interfaces/columnFilter.interface.ts index 9b985981c..20d85bc85 100644 --- a/packages/common/src/interfaces/columnFilter.interface.ts +++ b/packages/common/src/interfaces/columnFilter.interface.ts @@ -9,7 +9,7 @@ import { MultipleSelectOption, } from './index'; import { SearchTerm } from '../enums/searchTerm.type'; -import { ObservableFacade, SubjectFacade } from '../services/rxjsFacade'; +import { Observable, Subject } from '../services/rxjsFacade'; export interface ColumnFilter { /** Do we want to bypass the Backend Query? Commonly used with an OData Backend Service, if we want to filter without calling the regular OData query. */ @@ -49,7 +49,7 @@ export interface ColumnFilter { model?: any; /** A collection of items/options that will be loaded asynchronously (commonly used with a Select/Multi-Select Filter) */ - collectionAsync?: Promise | ObservableFacade | SubjectFacade; + collectionAsync?: Promise | Observable | Subject; /** * A collection of items/options (commonly used with a Select/Multi-Select Filter) diff --git a/packages/common/src/interfaces/rowDetailViewOption.interface.ts b/packages/common/src/interfaces/rowDetailViewOption.interface.ts index 11fd8efd9..e52503fdb 100644 --- a/packages/common/src/interfaces/rowDetailViewOption.interface.ts +++ b/packages/common/src/interfaces/rowDetailViewOption.interface.ts @@ -1,4 +1,4 @@ -import { ObservableFacade, SubjectFacade } from '../services/rxjsFacade'; +import { Observable, Subject } from '../services/rxjsFacade'; import { SlickGrid } from './slickGrid.interface'; export interface RowDetailViewOption { @@ -73,7 +73,7 @@ export interface RowDetailViewOption { postTemplate?: (item: any) => string; /** Async server function call */ - process: (item: any) => Promise | ObservableFacade | SubjectFacade; + process: (item: any) => Promise | Observable | Subject; /** Override the logic for showing (or not) the expand icon (use case example: only every 2nd row is expandable) */ expandableOverride?: (row: number, dataContext: any, grid: SlickGrid) => boolean; diff --git a/packages/common/src/interfaces/subscription.interface.ts b/packages/common/src/interfaces/subscription.interface.ts index 8f4f75f64..f537b0689 100644 --- a/packages/common/src/interfaces/subscription.interface.ts +++ b/packages/common/src/interfaces/subscription.interface.ts @@ -1,4 +1,4 @@ -export interface Subscription { +export interface EventSubscription { /** Disposes the subscription. */ dispose?: () => void; diff --git a/packages/common/src/services/__tests__/rxjsFacade.spec.ts b/packages/common/src/services/__tests__/rxjsFacade.spec.ts index e333af466..34bbe4867 100644 --- a/packages/common/src/services/__tests__/rxjsFacade.spec.ts +++ b/packages/common/src/services/__tests__/rxjsFacade.spec.ts @@ -1,4 +1,4 @@ -import { ObservableFacade, RxJsFacade, SubjectFacade, SubscriptionFacade } from '../rxjsFacade'; +import { Observable, RxJsFacade, Subject, Subscription } from '../rxjsFacade'; describe('RxJsFacade Service', () => { it('should display a not implemented when calling "EMPTY" getter', () => { @@ -30,38 +30,38 @@ describe('RxJsFacade Service', () => { }); }); -describe('SubjectFacade Service', () => { +describe('Subject Service', () => { it('should display a not implemented when calling "next" method', () => { - expect(() => SubjectFacade.prototype.next({} as any)).toThrow('RxJS Subject "next" method must be implemented'); + expect(() => Subject.prototype.next({} as any)).toThrow('RxJS Subject "next" method must be implemented'); }); it('should display a not implemented when calling "unsubscribe" method', () => { - expect(() => SubjectFacade.prototype.unsubscribe()).toThrow('RxJS Subject "unsubscribe" method must be implemented'); + expect(() => Subject.prototype.unsubscribe()).toThrow('RxJS Subject "unsubscribe" method must be implemented'); }); }); -describe('ObservableFacade Service', () => { +describe('Observable Service', () => { it('should display a not implemented when calling "constructor"', () => { // @ts-ignore - expect(() => new ObservableFacade()).toThrow('RxJS Observable Facade "constructor" method must be implemented'); + expect(() => new Observable()).toThrow('RxJS Observable Facade "constructor" method must be implemented'); }); it('should display a not implemented when calling "subscribe" method', () => { - expect(() => ObservableFacade.prototype.subscribe()).toThrow('RxJS Observable Facade "subscribe" method must be implemented'); + expect(() => Observable.prototype.subscribe()).toThrow('RxJS Observable Facade "subscribe" method must be implemented'); }); it('should display a not implemented when calling "pipe" method', () => { - expect(() => ObservableFacade.prototype.pipe({})).toThrow('RxJS Observable Facade "pipe" method must be implemented'); + expect(() => Observable.prototype.pipe({})).toThrow('RxJS Observable Facade "pipe" method must be implemented'); }); }); -describe('SubscriptionFacade Service', () => { +describe('Subscription Service', () => { it('should display a not implemented when calling "next" method', () => { // @ts-ignore - expect(() => new SubscriptionFacade()).toThrow('RxJS Subscription Facade "constructor" method must be implemented'); + expect(() => new Subscription()).toThrow('RxJS Subscription Facade "constructor" method must be implemented'); }); it('should display a not implemented when calling "pipe" method', () => { - expect(() => SubscriptionFacade.prototype.unsubscribe()).toThrow('RxJS Subscription Facade "unsubscribe" method must be implemented'); + expect(() => Subscription.prototype.unsubscribe()).toThrow('RxJS Subscription Facade "unsubscribe" method must be implemented'); }); }); diff --git a/packages/common/src/services/backendUtility.service.ts b/packages/common/src/services/backendUtility.service.ts index 85427ba5a..486dd8786 100644 --- a/packages/common/src/services/backendUtility.service.ts +++ b/packages/common/src/services/backendUtility.service.ts @@ -1,6 +1,6 @@ import { EmitterType } from '../enums/emitterType.enum'; import { BackendServiceApi, GridOption } from '../interfaces/index'; -import { ObservableFacade, RxJsFacade, SubjectFacade } from './rxjsFacade'; +import { Observable, RxJsFacade, Subject } from './rxjsFacade'; export class BackendUtilityService { constructor(private rxjs?: RxJsFacade) { } @@ -47,7 +47,7 @@ export class BackendUtilityService { * Execute the backend callback, which are mainly the "process" & "postProcess" methods. * Also note that "preProcess" was executed prior to this callback */ - executeBackendCallback(backendServiceApi: BackendServiceApi, query: string, args: any, startTime: Date, totalItems: number, emitActionChangedCallback?: (type: EmitterType) => void, httpCancelRequests$?: SubjectFacade) { + executeBackendCallback(backendServiceApi: BackendServiceApi, query: string, args: any, startTime: Date, totalItems: number, emitActionChangedCallback?: (type: EmitterType) => void, httpCancelRequests$?: Subject) { if (backendServiceApi) { // emit an onFilterChanged event when it's not called by a clear filter if (args && !args.clearFilterTriggered && !args.clearSortTriggered && emitActionChangedCallback) { @@ -67,7 +67,7 @@ export class BackendUtilityService { httpCancelRequests$!.next(); } - (process as unknown as ObservableFacade) + (process as unknown as Observable) // the following takeUntil, will potentially be used later to cancel any pending http request (takeUntil another rx, that would be httpCancelRequests$, completes) // but make sure the observable is actually defined with the iif condition check before piping it to the takeUntil .pipe(rxjs.takeUntil(rxjs.iif(() => rxjs.isObservable(httpCancelRequests$), httpCancelRequests$, rxjs.EMPTY))) diff --git a/packages/common/src/services/filter.service.ts b/packages/common/src/services/filter.service.ts index ae53964fb..77b49e265 100644 --- a/packages/common/src/services/filter.service.ts +++ b/packages/common/src/services/filter.service.ts @@ -33,7 +33,7 @@ import { BackendUtilityService } from './backendUtility.service'; import { deepCopy, getDescendantProperty, mapOperatorByFieldType } from './utilities'; import { PubSubService } from '../services/pubSub.service'; import { SharedService } from './shared.service'; -import { RxJsFacade, SubjectFacade } from './rxjsFacade'; +import { RxJsFacade, Subject } from './rxjsFacade'; // using external non-typed js libraries declare const Slick: SlickNamespace; @@ -59,7 +59,7 @@ export class FilterService { protected _grid!: SlickGrid; protected _onSearchChange: SlickEvent | null; protected _tmpPreFilteredData?: number[]; - protected httpCancelRequests$?: SubjectFacade; // this will be used to cancel any pending http request + protected httpCancelRequests$?: Subject; // this will be used to cancel any pending http request constructor(protected filterFactory: FilterFactory, protected pubSubService: PubSubService, protected sharedService: SharedService, protected backendUtilities?: BackendUtilityService, protected rxjs?: RxJsFacade) { this._onSearchChange = new Slick.Event(); diff --git a/packages/common/src/services/gridState.service.ts b/packages/common/src/services/gridState.service.ts index 00c95b7d8..22a0f98d7 100644 --- a/packages/common/src/services/gridState.service.ts +++ b/packages/common/src/services/gridState.service.ts @@ -11,14 +11,14 @@ import { CurrentPagination, CurrentRowSelection, CurrentSorter, - SlickDataView, + EventSubscription, + GetSlickEventType, GridOption, GridState, + SlickDataView, + SlickEventHandler, SlickGrid, - Subscription, SlickNamespace, - GetSlickEventType, - SlickEventHandler, } from '../interfaces/index'; import { ExtensionService } from './extension.service'; import { FilterService } from './filter.service'; @@ -34,7 +34,7 @@ export class GridStateService { private _columns: Column[] = []; private _currentColumns: CurrentColumn[] = []; private _grid!: SlickGrid; - private _subscriptions: Subscription[] = []; + private _subscriptions: EventSubscription[] = []; private _selectedRowDataContextIds: Array | undefined = []; // used with row selection private _selectedFilteredRowDataContextIds: Array | undefined = []; // used with row selection private _wasRecheckedAfterPageChange = true; // used with row selection & pagination diff --git a/packages/common/src/services/pagination.service.ts b/packages/common/src/services/pagination.service.ts index 1fc9a6ea4..64e631779 100644 --- a/packages/common/src/services/pagination.service.ts +++ b/packages/common/src/services/pagination.service.ts @@ -3,6 +3,7 @@ import { dequal } from 'dequal'; import { BackendServiceApi, CurrentPagination, + EventSubscription, GetSlickEventType, Pagination, ServicePagination, @@ -10,12 +11,11 @@ import { SlickEventHandler, SlickGrid, SlickNamespace, - Subscription } from '../interfaces/index'; import { BackendUtilityService } from './backendUtility.service'; import { SharedService } from './shared.service'; import { PubSubService } from './pubSub.service'; -import { ObservableFacade, RxJsFacade } from './rxjsFacade'; +import { Observable, RxJsFacade } from './rxjsFacade'; // using external non-typed js libraries declare const Slick: SlickNamespace; @@ -33,7 +33,7 @@ export class PaginationService { private _totalItems = 0; private _availablePageSizes: number[] = []; private _paginationOptions!: Pagination; - private _subscriptions: Subscription[] = []; + private _subscriptions: EventSubscription[] = []; /** SlickGrid Grid object */ grid!: SlickGrid; @@ -352,7 +352,7 @@ export class PaginationService { }); } else if (this.rxjs?.isObservable(process)) { this._subscriptions.push( - (process as ObservableFacade).subscribe( + (process as Observable).subscribe( (processResult: any) => { resolve(this.backendUtilities?.executeBackendProcessesCallback(startTime, processResult, this._backendServiceApi as BackendServiceApi, this._totalItems)); }, diff --git a/packages/common/src/services/pubSub.service.ts b/packages/common/src/services/pubSub.service.ts index a72652ca9..914ff6e27 100644 --- a/packages/common/src/services/pubSub.service.ts +++ b/packages/common/src/services/pubSub.service.ts @@ -1,5 +1,5 @@ /* eslint-disable @typescript-eslint/no-unused-vars */ -import { Subscription } from '../interfaces/index'; +import { EventSubscription } from '../interfaces/index'; export abstract class PubSubService { /** @@ -18,7 +18,7 @@ export abstract class PubSubService { * @return possibly a Subscription */ // eslint-disable-next-line @typescript-eslint/ban-types - subscribe(_eventName: string | Function, _callback: (data: T) => void): Subscription | any { + subscribe(_eventName: string | Function, _callback: (data: T) => void): EventSubscription | any { throw new Error('PubSubService "subscribe" method must be implemented'); } @@ -30,7 +30,7 @@ export abstract class PubSubService { * @return possibly a Subscription */ // eslint-disable-next-line @typescript-eslint/ban-types - subscribeEvent?(_eventName: string | Function, _callback: (event: CustomEventInit) => void): Subscription | any { + subscribeEvent?(_eventName: string | Function, _callback: (event: CustomEventInit) => void): EventSubscription | any { throw new Error('PubSubService "subscribeEvent" method must be implemented'); } @@ -44,7 +44,7 @@ export abstract class PubSubService { } /** Unsubscribes all subscriptions that currently exists */ - unsubscribeAll(_subscriptions?: Subscription[]): void { + unsubscribeAll(_subscriptions?: EventSubscription[]): void { throw new Error('PubSubService "unsubscribeAll" method must be implemented'); } } diff --git a/packages/common/src/services/rxjsFacade.ts b/packages/common/src/services/rxjsFacade.ts index 8371a6a6b..b6f14f0f1 100644 --- a/packages/common/src/services/rxjsFacade.ts +++ b/packages/common/src/services/rxjsFacade.ts @@ -18,26 +18,26 @@ export abstract class RxJsFacade { * The same Observable instance returned by any call to without a scheduler. * This returns the EMPTY constant from RxJS */ - get EMPTY(): ObservableFacade { + get EMPTY(): Observable { throw new Error('RxJS Facade "EMPTY" constant must be implemented'); } /** Simple method to create an Observable */ - createObservable(): ObservableFacade { + createObservable(): Observable { throw new Error('RxJS Facade "createObservable" method must be implemented'); } /** Simple method to create a Subject */ - createSubject(): SubjectFacade { + createSubject(): Subject { throw new Error('RxJS Facade "createSubject" method must be implemented'); } - firstValueFrom(source: ObservableFacade): Promise { + firstValueFrom(source: Observable): Promise { throw new Error('RxJS Facade "firstValueFrom" method must be implemented'); } /** Decides at subscription time which Observable will actually be subscribed. */ - iif(condition: () => boolean, trueResult?: any, falseResult?: any): ObservableFacade { + iif(condition: () => boolean, trueResult?: any, falseResult?: any): Observable { throw new Error('RxJS Facade "iif" method must be implemented'); } @@ -47,20 +47,20 @@ export abstract class RxJsFacade { } /** Emits the values emitted by the source Observable until a `notifier` Observable emits a value. */ - takeUntil(notifier: ObservableFacade): any { + takeUntil(notifier: Observable): any { throw new Error('RxJS Facade "takeUntil" method must be implemented'); } } /** A representation of any set of values over any amount of time. This is the most basic building block of RxJS. */ -export abstract class ObservableFacade { +export abstract class Observable { /** Observable constructor, you can provide a subscribe function that is called when the Observable is initially subscribed to. */ - constructor(subscribe?: (this: ObservableFacade, subscriber: any) => any) { + constructor(subscribe?: (this: Observable, subscriber: any) => any) { throw new Error('RxJS Observable Facade "constructor" method must be implemented'); } /** Subscribe to the Observable */ - subscribe(next?: (value: T) => void, error?: (error: any) => void, complete?: () => void): SubscriptionFacade { + subscribe(next?: (value: T) => void, error?: (error: any) => void, complete?: () => void): Subscription { throw new Error('RxJS Observable Facade "subscribe" method must be implemented'); } @@ -74,7 +74,7 @@ export abstract class ObservableFacade { * A Subject is a special type of Observable that allows values to be * multicasted to many Observers. Subjects are like EventEmitters. */ -export abstract class SubjectFacade extends ObservableFacade { +export abstract class Subject extends Observable { next(value: T): void { throw new Error('RxJS Subject "next" method must be implemented'); } @@ -88,7 +88,7 @@ export abstract class SubjectFacade extends ObservableFacade { * A Subject is a special type of Observable that allows values to be * multicasted to many Observers. Subjects are like EventEmitters. */ -export abstract class SubscriptionFacade { +export abstract class Subscription { /** A function describing how to perform the disposal of resources when the `unsubscribe` method is called. */ constructor(unsubscribe?: () => void) { throw new Error('RxJS Subscription Facade "constructor" method must be implemented'); diff --git a/packages/common/src/services/sort.service.ts b/packages/common/src/services/sort.service.ts index f673bc69c..63f20b26d 100644 --- a/packages/common/src/services/sort.service.ts +++ b/packages/common/src/services/sort.service.ts @@ -25,7 +25,7 @@ import { getDescendantProperty, convertHierarchicalViewToParentChildArray } from import { sortByFieldType } from '../sortComparers/sortUtilities'; import { PubSubService } from './pubSub.service'; import { SharedService } from './shared.service'; -import { RxJsFacade, SubjectFacade } from './rxjsFacade'; +import { RxJsFacade, Subject } from './rxjsFacade'; // using external non-typed js libraries declare const Slick: SlickNamespace; @@ -36,7 +36,7 @@ export class SortService { private _dataView!: SlickDataView; private _grid!: SlickGrid; private _isBackendGrid = false; - private httpCancelRequests$?: SubjectFacade; // this will be used to cancel any pending http request + private httpCancelRequests$?: Subject; // this will be used to cancel any pending http request constructor(private sharedService: SharedService, private pubSubService: PubSubService, private backendUtilities?: BackendUtilityService, private rxjs?: RxJsFacade) { this._eventHandler = new Slick.EventHandler(); diff --git a/packages/common/src/services/utilities.ts b/packages/common/src/services/utilities.ts index 1987d7980..70f1b4bde 100644 --- a/packages/common/src/services/utilities.ts +++ b/packages/common/src/services/utilities.ts @@ -4,8 +4,8 @@ const DOMPurify = DOMPurify_; // patch to fix rollup to work const moment = (moment_ as any)['default'] || moment_; // patch to fix rollup "moment has no default export" issue, document here https://github.com/rollup/rollup/issues/670 import { FieldType, OperatorString, OperatorType } from '../enums/index'; -import { GridOption, Subscription } from '../interfaces/index'; -import { ObservableFacade, RxJsFacade, SubjectFacade } from './rxjsFacade'; +import { EventSubscription, GridOption } from '../interfaces/index'; +import { Observable, RxJsFacade, Subject, Subscription } from './rxjsFacade'; /** * Add an item to an array only when the item does not exists, when the item is an object we will be using their "id" to compare @@ -54,7 +54,7 @@ export function arrayRemoveItemByIndex(array: T[], index: number): T[] { * @param object which could be of type Promise or Observable * @param fromServiceName string representing the caller service name and will be used if we throw a casting problem error */ -export function castObservableToPromise(rxjs: RxJsFacade, input: Promise | ObservableFacade | SubjectFacade, fromServiceName = ''): Promise { +export function castObservableToPromise(rxjs: RxJsFacade, input: Promise | Observable | Subject, fromServiceName = ''): Promise { let promise: any = input; if (input instanceof Promise) { @@ -1000,7 +1000,7 @@ export function toSnakeCase(inputStr: string): string { * It will return an empty array if it all went well * @param subscriptions */ -export function unsubscribeAll(subscriptions: Subscription[]): Subscription[] { +export function unsubscribeAll(subscriptions: Array): Array { if (Array.isArray(subscriptions)) { while (subscriptions.length > 0) { const subscription = subscriptions.pop(); diff --git a/packages/graphql/src/interfaces/graphqlServiceApi.interface.ts b/packages/graphql/src/interfaces/graphqlServiceApi.interface.ts index 09c7eb8f8..d9c4481e8 100644 --- a/packages/graphql/src/interfaces/graphqlServiceApi.interface.ts +++ b/packages/graphql/src/interfaces/graphqlServiceApi.interface.ts @@ -1,4 +1,4 @@ -import { BackendServiceApi, ObservableFacade } from '@slickgrid-universal/common'; +import { BackendServiceApi, Observable } from '@slickgrid-universal/common'; import { GraphqlResult } from './graphqlResult.interface'; import { GraphqlPaginatedResult } from './graphqlPaginatedResult.interface'; @@ -13,10 +13,10 @@ export interface GraphqlServiceApi extends BackendServiceApi { service: GraphqlService; /** On init (or on page load), what action to perform? */ - onInit?: (query: string) => Promise | ObservableFacade; + onInit?: (query: string) => Promise | Observable; /** On Processing, we get the query back from the service, and we need to provide a Promise/Observable. For example: this.http.get(myGraphqlUrl) */ - process: (query: string) => Promise | ObservableFacade; + process: (query: string) => Promise | Observable; /** After executing the query, what action to perform? For example, stop the spinner */ postProcess?: (response: GraphqlResult | GraphqlPaginatedResult) => void; diff --git a/packages/vanilla-bundle/src/components/slick-vanilla-grid-bundle.ts b/packages/vanilla-bundle/src/components/slick-vanilla-grid-bundle.ts index bfabf7677..b1d6b3c57 100644 --- a/packages/vanilla-bundle/src/components/slick-vanilla-grid-bundle.ts +++ b/packages/vanilla-bundle/src/components/slick-vanilla-grid-bundle.ts @@ -58,7 +58,7 @@ import { GridService, GridStateService, GroupingAndColspanService, - ObservableFacade, + Observable, PaginationService, RowMoveManagerExtension, RxJsFacade, @@ -916,7 +916,7 @@ export class SlickVanillaGridBundle { .catch((error) => backendUtilityService.onBackendError(error, backendApi)); } else if (process && this.rxjs?.isObservable(process)) { this.subscriptions.push( - (process as ObservableFacade).subscribe( + (process as Observable).subscribe( (processResult: any) => backendUtilityService.executeBackendProcessesCallback(startTime, processResult, backendApi, totalItems), (error: any) => backendUtilityService.onBackendError(error, backendApi) ) @@ -1182,7 +1182,7 @@ export class SlickVanillaGridBundle { // wrap this inside a setTimeout to avoid timing issue since updateEditorCollection requires to call SlickGrid getColumns() method setTimeout(() => { this.subscriptions.push( - (collectionAsync as ObservableFacade).subscribe((resolvedCollection) => this.updateEditorCollection(column, resolvedCollection)) + (collectionAsync as Observable).subscribe((resolvedCollection) => this.updateEditorCollection(column, resolvedCollection)) ); }); } diff --git a/packages/vanilla-bundle/src/services/eventPubSub.service.ts b/packages/vanilla-bundle/src/services/eventPubSub.service.ts index 2d531db06..00da0ef1b 100644 --- a/packages/vanilla-bundle/src/services/eventPubSub.service.ts +++ b/packages/vanilla-bundle/src/services/eventPubSub.service.ts @@ -1,4 +1,4 @@ -import { EventNamingStyle, PubSubService, Subscription, titleCase, toKebabCase } from '@slickgrid-universal/common'; +import { EventNamingStyle, EventSubscription, PubSubService, titleCase, toKebabCase } from '@slickgrid-universal/common'; interface PubSubEvent { name: string; @@ -50,7 +50,7 @@ export class EventPubSubService implements PubSubService { this._elementSource.removeEventListener(eventNameByConvention, listener); } - unsubscribeAll(subscriptions?: Subscription[]) { + unsubscribeAll(subscriptions?: EventSubscription[]) { if (Array.isArray(subscriptions)) { for (const subscription of subscriptions) { if (subscription?.dispose) { From 8c29cfa534c63e95f226da1bac5bd645bddc1769 Mon Sep 17 00:00:00 2001 From: ghiscoding Date: Sat, 20 Mar 2021 18:45:06 -0400 Subject: [PATCH 16/21] chore: use jQuery 3.5.1 instead of 3.6.0 --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 9ffc69ad0..eae1f63d7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7033,9 +7033,9 @@ jquery-ui@>=1.8.0: integrity sha1-vLQEXI3QU5wTS8FIjN0+dop6nlE= jquery@>=1.8.0, jquery@^3.5.1: - version "3.6.0" - resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.6.0.tgz#c72a09f15c1bdce142f49dbf1170bdf8adac2470" - integrity sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw== + version "3.5.1" + resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.5.1.tgz#d7b4d08e1bfdb86ad2f1a3d039ea17304717abb5" + integrity sha512-XwIBPqcMn57FxfT+Go5pzySnm4KWkT1Tv7gjrpT1srtf8Weynl6R273VJ5GjkRb51IzMp5nbaPjJXMWeju2MKg== js-base64@^2.1.8: version "2.6.4" From bb26b728006076e2e9a3d4d9f8024d6c6736fc0d Mon Sep 17 00:00:00 2001 From: ghiscoding Date: Mon, 22 Mar 2021 22:19:25 -0400 Subject: [PATCH 17/21] refactor: small typo --- .../webpack-demo-vanilla-bundle/src/examples/example15.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/webpack-demo-vanilla-bundle/src/examples/example15.ts b/examples/webpack-demo-vanilla-bundle/src/examples/example15.ts index de5e24b09..a300d2eeb 100644 --- a/examples/webpack-demo-vanilla-bundle/src/examples/example15.ts +++ b/examples/webpack-demo-vanilla-bundle/src/examples/example15.ts @@ -6,7 +6,7 @@ import { Observable, of, Subject } from 'rxjs'; import { ExampleGridOptions } from './example-grid-options'; import '../salesforce-styles.scss'; -import './example12.scss'; +import './example15.scss'; const defaultPageSize = 20; @@ -194,7 +194,7 @@ export class Example15 { * in your case the getCustomer() should be a WebAPI function returning a Promise */ getCustomerDataApiMock(query): Observable { - // the mock is returning a Promise, just like a WebAPI typically does + // the mock is returning an Observable return new Observable((observer) => { const queryParams = query.toLowerCase().split('&'); let top: number; From a97cc1983aff026baeff10061e69df925a72804a Mon Sep 17 00:00:00 2001 From: ghiscoding Date: Wed, 24 Mar 2021 17:45:13 -0400 Subject: [PATCH 18/21] docs: update readme with installation instructions --- packages/rxjs-observable/README.md | 35 +++++++++++++++++++++++++++--- 1 file changed, 32 insertions(+), 3 deletions(-) diff --git a/packages/rxjs-observable/README.md b/packages/rxjs-observable/README.md index ca0b8a0fc..9ea05d424 100644 --- a/packages/rxjs-observable/README.md +++ b/packages/rxjs-observable/README.md @@ -14,10 +14,39 @@ An RxJS Observable Service Wrapper to make it possible to use RxJS with Slickgrid-Universal (with a Backend Service like OData/GraphQL). By default any Backend Service will be using Promises unless we use this RxJS Observable package. -This package is simply a bridge to it possible to use RxJS without adding RxJS to the `@slickgrid-universal/common` list of dependencies, so RxJS is a dependency of this package without being a dependency in the common package. +This package is simply a bridge, a facade, to make it possible to use RxJS without adding RxJS to the `@slickgrid-universal/common` list of dependencies, so RxJS is a dependency of this package without being a dependency of the common (core) package, This will avoid adding dependencies not everyone need and won't clutter clutterin the common package (the common package will simply use an empty shell, an empty interface, without requiring to install RxJS at all, we do however have full unit tests coverage for all of that). ### External Dependencies -- [RxJS](https://github.com/ReactiveX/RxJS) +- [RxJS 7](https://github.com/ReactiveX/RxJS) ### Installation -Follow the instruction provided in the main [README](https://github.com/ghiscoding/slickgrid-universal#installation) +Follow the instruction provided in the main [README](https://github.com/ghiscoding/slickgrid-universal#installation), you can see a demo by looking at the [GitHub Demo](https://ghiscoding.github.io/slickgrid-universal) page and click on "Export to CSV" from the Grid Menu (aka hamburger menu). + +### Usage +In order to use the Service, you will need to register it in your grid options via the `registerExternalResources` as shown below and of course install RxJS itself (this package requires RxJS 7). + +##### ViewModel +```ts +import { GridOdataService } from '@slickgrid-universal/odata'; +import { RxJsResource } from '@slickgrid-universal/rxjs-observable'; + +export class MyExample { + gridOptions: GridOption; + + prepareGrid { + this.gridOptions = { + // ... + registerExternalResources: [new RxJsResource()], + + // you will most probably use it with a Backend Service, for example with OData + backendServiceApi: { + service: new GridOdataService(), + preProcess: () => this.displaySpinner(true), + + // assuming your Http call is with an RxJS Observable + process: (query) => this.getAllCustomers$(query), + } as OdataServiceApi, + }; + } +} +``` From 1d3465a89fdcf44dab8dfeefce4234d34203b10d Mon Sep 17 00:00:00 2001 From: ghiscoding Date: Wed, 24 Mar 2021 18:02:53 -0400 Subject: [PATCH 19/21] chore(deps): use RxJS@next version which is currently v7 beta13 --- package.json | 2 +- packages/rxjs-observable/package.json | 4 ++-- yarn.lock | 14 +++++++------- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index 7033d3474..1af857b3b 100644 --- a/package.json +++ b/package.json @@ -70,7 +70,7 @@ "mocha": "^8.3.2", "mochawesome": "^6.2.2", "npm-run-all": "^4.1.5", - "rxjs": "7.0.0-beta.13", + "rxjs": "next", "ts-jest": "^26.5.4", "typescript": "^4.2.3" }, diff --git a/packages/rxjs-observable/package.json b/packages/rxjs-observable/package.json index 6ab279572..a7bf031cd 100644 --- a/packages/rxjs-observable/package.json +++ b/packages/rxjs-observable/package.json @@ -40,11 +40,11 @@ ], "dependencies": { "@slickgrid-universal/common": "^0.11.2", - "rxjs": "7.0.0-beta.13" + "rxjs": "next" }, "devDependencies": { "cross-env": "^7.0.3", "npm-run-all": "^4.1.5", "rimraf": "^3.0.2" } -} +} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index eae1f63d7..485c28e25 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10017,13 +10017,6 @@ run-queue@^1.0.0, run-queue@^1.0.3: dependencies: aproba "^1.1.1" -rxjs@7.0.0-beta.13: - version "7.0.0-beta.13" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.0.0-beta.13.tgz#f8dd03f7aa414c9f7fde831431e54c4534ecfa39" - integrity sha512-//ll3EfI5SgTfrS5DUjc/uEmyazS0vUDMHqa/GbPR9ubdVLtbrv2bK3y75JyZPfYl1Bq2JbR/IbByhfzfpJyvw== - dependencies: - tslib "~2.1.0" - rxjs@^6.3.3, rxjs@^6.4.0, rxjs@^6.6.6: version "6.6.6" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.6.tgz#14d8417aa5a07c5e633995b525e1e3c0dec03b70" @@ -10031,6 +10024,13 @@ rxjs@^6.3.3, rxjs@^6.4.0, rxjs@^6.6.6: dependencies: tslib "^1.9.0" +rxjs@next: + version "7.0.0-beta.13" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.0.0-beta.13.tgz#f8dd03f7aa414c9f7fde831431e54c4534ecfa39" + integrity sha512-//ll3EfI5SgTfrS5DUjc/uEmyazS0vUDMHqa/GbPR9ubdVLtbrv2bK3y75JyZPfYl1Bq2JbR/IbByhfzfpJyvw== + dependencies: + tslib "~2.1.0" + safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" From 3b84273fee2156dedc8ecb7306db174987634cbb Mon Sep 17 00:00:00 2001 From: ghiscoding Date: Wed, 24 Mar 2021 18:03:24 -0400 Subject: [PATCH 20/21] chore(build): rebuild slick vanilla bundle zip file --- .../slickgrid-vanilla-bundle.zip | Bin 702656 -> 706218 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/packages/vanilla-bundle/dist-grid-bundle-zip/slickgrid-vanilla-bundle.zip b/packages/vanilla-bundle/dist-grid-bundle-zip/slickgrid-vanilla-bundle.zip index ef6add617dcd00e1f4451e9f40b5acad9dd5c483..28da1215c86f7642ad4ac2d867c7a28efb6af597 100644 GIT binary patch delta 373546 zcmV(+K;6H<@hYl~E3g&>1NE+WlNkgYe_d^J+c=W`zE%4lSotuKr(`>snVq>+veDYI zllU%(daicpwm<5 z4flD-V(vQgz2nBw@jUTek309zPJTN1{`bE-J#{YlmisRE7lKF5G6+Xj#6fsW4}9*&&2{-^ z8}E;IEcAuH>QXW05AiX7*ajgK{{8P|`RE39%C{LZwzyBTJIbwqqoX^hL zY8CPogWg6%=aRaOAN*tk|GXAnf6Vdw>mb~)SblyJ2FZ37#LP3FP62KLy@s~&>&IAl zB1UpQI?FKFI8SRR`}9SjQ&TKD(bSZ^nrM9?p@DwvYBd3vk9i2jH{$TIq&&(H|$KF6c&LwkKfTf*@PU+3@y{vgme?w3_pqf|& zeiTc59*#6);D1>=BPZT(d9bYL#*3_u!AChPdUwA{f#kpjPiolV$4*k3tZ0wM z=lmi{8^}L4$}168;z5?ge*vyQtoh<@9&{zDk`*uRPFpKo&DBnJe@6;R-;B4)9Qj&n zTf!IDHfmH*b{E~(JR}>^{lAk04}Pg0ij*9==)4aKvy# zEo~!>_LBMgS1&AhAH-@M_X8J(Y=1NV73N|VOrrb#K>LH62cFvt(4xO-$SnQ7z&0$r z>lf`Bv_vSF*AFV$Mh|^rNw(_=(L-?}0>5WCX{7c7ipu^fe+qiTnu$&Cc+)i?eT7b* zZEiQcVO}O-za8uykjVH|y4fosKSsUwuV*+SV((q-kANIq#j8b6BFE(mvFS-xyCA+; z*dx>=@Pd%L{Ue_DrP?vZ-`iX)*&Tlic4FuWzaO2v?iEe+HBjL%gWjknVz5mYy+C=v zj)w~t@m|n2f8@OO0i?XGUci7M&>rm*D+_(~k9ppcKq4MwQ%IX5$JDU}d zzZOX@4lzFuZlK3em{KN}5mOQ`ZUN6Vst35J403OkAQ5iGSw@JNaJa zpV4Q^Y@<&&o#_Wq#_4CUl+w>Q-?=YlLBrlCe?3Fy$UW3LKYfS-GWUf_l`y-JO$aRv=90ca^?oU zw|_Ep?wObH=Oc&td-dfz^#%FxLWFwXQSzI73=T!I@yDaqsX|zsA{Eej;=6n)eC`e% zf2?q`Mf_;o-ZRm4Ospf_!D76?b!WjDZrJ~_=KlL2zI+f-9KD=5f5K6|8c@ay6&N|Q zzy56~Q(&%Q4pMRk-{8ZQdm9GZ_iV$VlX3+Xn!XQ&TWi_Ohb&yI#e#W13%-NO-)mM`dMxFXPv7Gl1S#(pe`GjC zRtdb8bzYQfEwD3Cv1>iyLSq7SMcAe0V}WEeE<3G?lmTukP!DMJgQnHmD4o*mhySBA z`{8h!ox@^Za(K2tKK(;2`TjuUOJXgspl0^Cj;e>!=djsWvuL6keC@GS*XkIZf5-2+ z_ivcZVb=Osi`M*mNs=qKgC=k}f8S1m?S3Flvzt&&C`|Mb{axJa#bZ~O9^XJiz!N_@ zV8(IZjhwf$>v!ro@QLy5)qu+nW8{Y)OZ@p`&G@M`nW}^xtnL<6c2Ol=`6gF`ft@Vk zBt-80sg`?xLN?uo+=ZtY5*!GrV?X_LmuXOn|It_#p@<3 zKtwVFcyKTKFYPfXxxgt_q$*6adTP(R&@o&$KQ@5SX5B{k7qV;x=Wp0UeF4?fl*1aq zgHBNF$&k#=lP85mwhoerfB9~%D3z4uKV`L^I8O@Wv=Yqa@HkL>d=YHa!ayF1Ot!Wx z&n1yY(fcb>M?_nX?cd`eFfeaqdy-{PqO5tuBm3OK%+q%7Z3y2Vtb#`unI_BXBLB|$ zS@HOSM+*>ROwJ0fY!Dg$p+!cZk|p60t`%G&R{2_%O8`AnyTqUYess61qOfBd9(QOFHRs6eF~VqO1WOo~|igTDozX%=8MB?B` ze1CS&gogpdsd^lm#$I<@4=r=BMX_g@v*rey+awgreP%-rG%&o|(mM)l`%AHMzOe;e zK3vW|et7?B_Tl4nc6sq>_Ltkskptdxaf%*~T2T-UXuc(Xe-`ZKKN@y38qI$!8O`zo z`rMfhX?K81)_%cR%=yr%PedO)4?K^4;6KBO@q!g@b*6!k=g;zy5LZI{ zOg`o3$2Oi2f3mUieQ%aaU>Y468kzB;BWsi}4z?AWD3r6#mvP1G#}d(|KD*laOQ4iX!YTyh%o*GrV>@TF1j{f?$qknyqC3=XzCtQcspFcNPh*;%0 zby9w?R+XU;0+5xUx{SbOVYP9!lWmD;>obFL4@U<}f3jdEqA!@|&Dr7(=w}3~)7L)V zku-_a6XJIiNp{Jk`BRO&yrdUXu)lEo&SC4-VRk-iUt@wTM>YaAeXvMJX`Rjk> z4Q7^Gvx@J({)J`57He-K8`fMSHmtn8%i07ekHU*@?YDfPy&EoB>C&+JTIGwz9-A+W zE7sBif3js$b2*tO>Osej>e_4W0l#;w%uxc}CUcM{2R0vqg9LWefwj?7xul{80;G!y ztf`oR2+H-O&D^!R4X$t_;M1iJl$^REich`g&-~M6Sh$z&X}b1LJuyH16$ERzKOvHz zxFK5|e|Pfz$+K3KHehA(-I{Z+x;TA0Sp*?(e=36?o63Mc!R`g$HDiI?KqF+sV}_ML zxZdN<5Y-j8Ua}ItBKL`6pz_6lQZ_0PceWKnN2Y>+9K$`W2(-yNApX!X?eS}l8yz63 zZW*+}W21LUtPky~ ze}aaiv|{=wt(!iP!umB^fIQvnujyOtpR^*(C;2ZiI$_xpoGyQL=DW~*v}IXK8F|u2 zX6D9p4T~s)M$M3Z(J^$RXS0xVq;K(J$NzsfTwZ1}w(TvKHDWo1{UFy(TgVDIou|U< zAb>e6kH1M|E~(y01C28V>)ygPt=rTJe-DxCuly)xel=YT>mVxEI!Rxb+W1&fIBjR3 zUR4=757bo@Rar#^-)ml!lB2TVtl9E*l>{8+1!DPFs0lDr$9;Iq6d&f zaj>~ao2!Z-=~>2-_Iwm_R?VPICjMX8OK*#UZB&+Zjb14j#wh%w3O9CDr5(nje+KnY z019)Ahn4zynB@J$4JM-q(O8s8B(ps+x zO!)+E&TN7bgBb?GC~q&kC}*i>e+9EIRR_4USt(f>HNq{HJCBg{f~-<$*9g&X~2=HePq}34RuYiQK`wRF_5b#sMD(QJM?=qTdN$Nbhu%k z4~|AeyB_ zo|!rEP=Hq?6G|#&iv%E!T#z-WDHL z0owW_B1N7noPOqkMs^34`(RO34G|gN(%SY0r8(N7H7c&`)+k*T1uM8_apJ<#I+W_? zyz7?~FfAUwuwaCI1;sgte|)f5f+SR(v2p(Cx8IfxwQtk#9(LSO)-GMYk4d6IXshyP z+&$VjpJlxIkyuS7NozrU>1~{2#})Uqhv8h@Tsvx41HomPI%pY1my7+?V?H$z+}?Pv zG~&n2R=nNM95*95#XsaH7l$NQqDlDB&1)@2z}6Sw?P!+0Y4Dg zQM&z$$2Fau@H`M&e38UFEf4C9E#V_-E;MzpG_Ie-i)F|UXFqx@kV#(A)0B(cHoV#R=_AsnyaMZbSdI0;wA8~ z40S}8XWCjj^P<2JO9Th*b3Oz+M_zW1mFOquK%S}V!_}K0q`vqZngeD9E(g{I!%JP> zFYq_#f0|e`>)Awhe6Te`8pZ9wP6WiG;i*Y3=@J!soGnc}WC+U|C(ikJ1uGQfb0p>< zVWd9B#m*wAZ5JNO{&p)Z^wVN6nVQClL*5yKLQ?X4|bErIJu`lafgW{M$K>gme(9XgU0)XG*3NOquwn<8m3DTa^GwZ^E# zq$;jN8CvZpVhRMH{z=)4dW4-9z0d?kTs>c|aS0u?wCU@cta zf5Vd+21I%T9h--b1>X{_V5tvOwVc6W4{B5llSBi`4;X65pGG7H4B>T4(jjtGm;%HQ z5ykYghc;Y|=wO~mj0@Ten2Vn_8lx0cQkTTEpaG9d!6y_Nva`}Ysg&iza>J&Lp9_oW zWU+R6FQxpbc3DeZHcmUGP8GAD(v%yGf2fn*iaz!|3kBwM+p=195?~>!{FobQ)`GHP zD;i3(Vf8s`YX&llp{02e^Ml&N<5nmf@aJ07v)c{bx~EQA!{(lX8aa3xI7@5HD5biU zTX3+@q)GUlvtxTrclo2RxZ*U$rBKGn-G*W#@MtQ^f4MLy6B0EcE+-MwVl`i-e|GJT z#fvpz>)Fz3)a=m=gyoZ?x3siSS%$+=3~q_-JH;IL`B9XC24e zXmoly_kz{QudwPjdr#c?V4h-X0X;rlcmjxe9Dyi2{*~P`xvhGP%0}_&u`;NS+3^xY zBHsn!-D$q9@3OXbyWPnS=bXYdf7A|Q9c!>H82d&;CeW!RH=vOISzw4yS<-%i9X_e{ zMjD~?9)FaJ%ZQ1|icw``tGFoY0#G&kJ7tEYKIryu!u(faqoQA33N(MJSpJ2+YyKWN zGFVzzZvU)VqL!;+(x_yS*4B*<)xkmK*>vT?+pPhb=rck=Sg>ng-KnA#G3{@`v&R+0(R(M?;c3{DI+(>-b9eFsm5Q zu=N5KG)Xf(40PYKF6>hKf3@5;w>55f*EvXKfpXW@2b3!(Kn^4zMs=j|s(L{%4`8&W zQ4LJYSqEg;>aYe4ft(R)aD@g_U6ZF}&sHA{iA-JiK5#j%i<{+3^Lml=tWQZX4l}7R zE~n#5A)~MHR!u<1zVm@@C2B$3x9Fm406O>GY1j?_Hk@ zpVNMCsl}pRLa9nQ(>i*fE_J9m8)q%QrGL_sM;6%~sDmZ6&zT>l?MkOqFC29e@yvDe z>SvI%cZVetcc=m*e}QrGt!n8-W9y;6$|YER8V1?)HO?%{$-F2F;j9H%c~WG}x$_Sm z2Bb^W&xWLYJj4-a;xJvdc0pu@mIvi=Th?xN+UL-<3o5bG^0h{R`ymxFFG_M!^Q2&% z6&T@$l5u=yjonflTI;>RQ&-&M3ig7hL+2?T%D@Oerr5$)f3R#l_bJW)j{2lqHOe{s z?+Noz%c$bAGq~-p$7ckdICa!M?q)H$u3E|OT};~ z3gW$o8U4jGenZEe3*II%K6M%;1Yw&3(6<}dh8L)u#R;Y3QhiJ^Nf)yL?ff4C|1*>oN|@P)Sqm)IninxC+%6Pb)S6MJeGXI_BEcCrgEhw=0S6Tz+<1M| ze{5mGe7pk;N&SlyNG}2uBJIYg4)w?#Bih=f95*^Jl< zhlE<01QXD4DdhT{hrtd>ELjAM0OFBaB1(z!=#YRxtQ`ZeIbUKNl*lG+0BL5>tUYr; zQ#u_Oxgxo*ZVLoHV^BqUAe^a;S zu9i6}M#&bHTm-zC#&lIlrms+!O-t7inhd;qp3fV}R&JY&hLl@qI>y;=3uxkvM~3F7 z!H-7;m2cedu8Y3P%iONsq2(fjl5JAV3(Q#=vlKvGBYMbz=?p|08Z65467z3r@o_lE z(txp=Gv$W#US&mVpY2|lscG$6e`rxUj8!CKSvttB&Oo|&JUenyq_DvRO3u7GaPn(T z_Es~2*8M}L@+5IrBeVK!vf-(h-WgNl@-1fG_zU`JnNnAazIWyl-SNG7&34&-(Z@ql zi^r%jOpU6;!!*rD(#tbJzMVV@XSxjf^Sc1NC2m|PVXoHFF~mdX%z7U0e{**m`rqgd zU|EldMdc*jEH=A3BR)|7rbor=Z1u7{D9u_lvQA~IH1E2DU-dR~RW_jBmNT@sO2h(< zC_C>+-UO}gsjMw+q+o)SGzk@roB`RkGK)<9pbX;sF=^0KozyF{zU(%}l}^3b#>c`R zN&|DvNZU)x(s_dInlyZ(e-n>EpZfvYI?^`RTZc0D%EQ|v_xbcuFel~KXEtoI<}rkE zhnrYo`eA8vVgOFtW3U8LgO&9dS}1)eDd+nm-PV!XOCq%o{Lp8ti?5)}Z` zSF7T1$PUlqH>H?8I%c>9W)1P^0<)mwYf0x7@GuV0-;tj5OSwt-Di!~xv`>4Hajc~U%z+}MoXdIANs%TV zb6uTG)&(oS)m?(j?KazhWx6E#J0LcR-PLx?HC`J>)vGIEf8eWYo%c#?b*Xa;qF6w= zuJtCV>fnQHjoFVYbWeS*&tWcSv*hkpvfbBKzWwcAdu5yLVmoCMI^6T09xq+;d z5N*4^;B$TzQ4vRvQfD6KHt-rRw#snG53*o1Tzh3Xib-~SA?=Y)cb1X?sbm`4&}V*1 zdys&Qo2$(ye>V#o__}|JU!8Q`W&Wbp)w%ZaSBZ^_7l{>+Q$BYF6S?CN;ekVWwc}BG zn$c{a)8$S1HnNLnt$=MVtD+1gc{;|{xt6y-k(*8D;1mWaE|qk-RA&X5?CVi}W3~AT zs1#ggK3MzN>FTMhw{&W+3a|B*QxZ>#BWHk&zK{~>f2accfZM6C4a1>K>C7bp4RehIQhS|-Y^FCjm43@g9FY2zYuI{=C z%PulBA>9Z~@3jF60M+-@VX%R4g3;XERSP4i08*aL-=8iq?egyYlLtOuwgDn;g&vq`sz3^eu59FDi_kVx^ z9du8!?pA1gCfl6JXd7wFx;`(%!3(rg_p$ibqu&9D=dH(NqlY@<^BHkM=&2YHf5PZO z5FG<)-bjuzao2eJbRtGCY?Nr-;shEM`7P|4pAbB#9u7Zk7^<2@38>oAXH$VpVM<4q0ipaUt?FH;Lg>gSo~mJ}5x(`^{B^&(6ReOa$lcL3Xnj}FO0Z_S8~-tkLF znB)nb!9+@mLAK~X)d*>h_fJYi9tsNA{-WG}KaJxpNX^G%NLs_&1P@jN8a8k{Ep@Jc zro$edPo*?Ms62fE_MzR##>NEibEpc2YgM#krV2v_iY#<3uWq2}Lmt@=iECU}2DG(~ zp~9r&DZhLe&JTuKZ}Vx;9R(<^{c6V>FfQJ?aYxFiWUjh9pT+%fTEFz4ZBGX?ygyH` zFusadpR@CD9K&`)UoFCl2&+_;a5m?EG)gDT&IjJtXw>76eplBTKCI;gj41+s=>%=%J zOEKl1bk4YH<`qzV=^M?|*1l<;Z>qVk314o7r{i(icmxxdc7UydwOObYF;vRn^cu+^ z8>F#_1|_cEr`s*64StC$P7oAS(6va1rX=`zD@ci~NQMd_w~Kpv4co70$vN#6uGF)F z?>oFcuhR}=1;iW2o`<)d{v>XH-xH9J5fRZ~-PqeNWD$B!!UFgmQbps-%aaZv=I#(C zyK4GLG#XX(?L1WRoJG(z=#20$5#>v=;~2~V^?)uau{|q?{v2nPD6yFi2_j-06{zxj za+=PDUX@lz%)E|D0}_YDksOk8c!4sc!&{OEu>uZ`9(HWEs)`aFd;$u8$yd{sliMo= z7DgGMf$?0gKfwXJ;nS9MzKXrCItDaMUFR!r?WXcPe!aPVOm6*{trZ@8A3EKM>0dC{mk1f+awOpi$|w;8)BvIH`HQ8FxCs zmR9xUh+E*ytXfoRVD^1N-9VG_$lLQmQD4+-BFyqJix}ZP-lUW=F43Fu=d=DIle!V` z8o?_LB0i?eVDKe>eK>wh9||s+!%z*rdJEvxRH5?L%F)G%ZVvBXJxaz{RK`ePcU|3d zqM6VX(1eGb5Ab@VSS^-}D>)!%{c|_N^!OUK&WFBwlecY;l8&lUL8L2aCHgkxYcDz;{hg-n~()(#KnB`$ODz1xM^m}7*0?h7n`!5e@j<0KrCaMR$2 zDR~aUtw$J;@`b4Hl~CVDW(p@4LfgltG>XWgVl}Zo57C}81Uq+9Ugq!_`Y%zTmI1); z_t|1WTHrxVX`u8`MW?38+h&@_R~Kiv@E)2WGZi*=@c6+UoS_m-FU>Mmygog63uBI( zx$@?&&X4PVuvbwuV^evw28AquX0HUiVPK{65K{0~5{yj1i1qSxCJIf=&NXzf*koef z*IaYOJvm0CS)pufjmw-ow#A);Rahlov1W|6H?)9zctb$ku%8E!ziQU;EtC(fDuR1|mdOYcv<1B(u1W37YH-aVvv$tP zxqYD%DR)kDN0sUqN^g4+_c45+yZl*p4pex+>_b&nJ5*T{)jDk{iceO}TW!{IoV9Gl ztfc?~b0*Ag@JL=5NbGsbhiB0Cq#-YtUkj0g8I{je?C5UA&coXp+jTdDgiv?j&}~vCHHIHg zZto$-eZV?@{a4oN{42f=>r{>vg+kwsvJPD-hzgZ3s~KV8>(%-x9ls6#h73krn;lni zoBVxf1gv;M`e-#7IO$^XzIs969A0xAQq>ZFSAn!ewDzrwoi|(=V8L$JEklL&2YN7@ zAEv~l<~LEatnNd=X7rseDIg;B@G@0bE%vTP+pfm8Zn{*Gsi_neqJ|jVsf}1V(UMPx zyj5e8la>jzyjN&x4N={RVPG-!rck?zz6KUjJI}>8LyTy?YJg_%LI?4ER9q^5 z)d@8S-FmFjZu>H{I$kf=X)g!-hibT9%&N1!S3%V5dMJ}Ru|k=SMwyOAnQ&!nK~n`$ zSGnSI>?xB)9>Uwu*`TXu2ATqy9dLG$Yk9aSnR8Ziggbu%xb$?A}xU(nlHOv2SI zO3A$$_Ej~=%*qA+E^Fat9|W#PEi`6ZKw+TUhdadmEO=Y}{(pN9_Df(wg;W|{mDNM_ z)*~=FIu*7=y|W?-$byZf9J+Ddj5yF*7IlMkM1y~+33KL~^&4^a+EK(o8>G5_uEPNa zT9Y;NV&Qe?L}r;P;|(?DFY>}&clGU1FSZRM911aH0M*^nm#+1r+Y#yQo>WOS$Dy9$ zeuQT^Q@uClwhpNFLmu_&y1pXs-F%8*RbC|%OfI`yj)S7;dShdC#?20^cr{l@7RPzq z7R1#;Y&Tv5rZh1Tj`nt)!&=9G9Fe-K&PvVqq0Q!Ww<2M6TEq`)fjPal44O&tLjhzB z`GdKCrOiO*J4NWe>l$zuE3CVv4(StHOfuO?oEKn|zvA{QOpG3lnQ@!KTP<0o`;0EF z;v1Kx$&KRxl19E6m(BqY7AyFwAlQatC-d2iOn>)EL5+s~O+34a(TQz;ycLdqkNe0; z-NcaWgb&cwCcqjxdDRUn_iD>x7;54|y`Uc@#ab6{(T& zdW9yXu9plQT5~Iv;-p_pl^|3Bw_#wr#h@R@WbP1afFY?l3iZW)r1Ub!!+ISNRzahg zyBW%wMcZFP-^+E!qHZUD`<9ECt;QXWp>1iZP??vwdMt%79XZ!ZB;!sIgv94K6=Fj! zS9E4})OQ4(t&nS~pag|$p8#c4$1uCsa<4MFtu6x_UnExq*Fjx*Hq6!Ho~F1Yp3kqY zSRu6J@ESpj0)~Ey3~o2h!c>S(J8>RFZlK%%$^iQv$vOHjfK*L?NBTS=P(WJscJ=0l zY9vye8>T`7s2l4z6sc73=~#&z(C&axAJRp1Ckzi5IvXJMRIR+fZM*hG)tkClUWjAl zzL9Eqlj)2G*%%+qiQUBq^2)slFw1AEpyN_EPD2!q_-UNt&C4f02$cUTNPOa(Lb#yW zC3De{#=!d-4vLO{!m@4=V%Th36$2W20S*NKu^IsJO*ICEqwdEG zp!Dm$Uo2p2+HSeywN3h^8k}~nRh*m84lS@ihC$41MU3Kn;M=Ne#rY1Cc(_=!smC=` zu8K~Hx^ml0B0Etx^9H{#FYwWOvhWBIkiRtH;sX#N=ZF-43i}g=S@>_1`Vyd+;wuDG!Ama1XbUf$VBgA$a<>m&; z1%o;NJfU%aCJBw2srh+8s~y=nVc2_vPJg8)=($h@g(s;3n#Dk3ZfYu^Sv=~_gJmm% z15VFLjSxG>aT--^ZMDTbEWV`Qh2PEB63oS z4X5E%YmlaK`bp?4UKtXnTsUO*q>mhb78hy(@i-)ZA~34Pmf5)kzHTGqP?$U=1LdVf z<>XJV-Ri5RDufjVcWUT0)I;P>$tRj?@Y9O4icW)+TTyJ5q@J&^UPDeW8EKN;?@;ts5LlN<4Y6g-==rzSL7BbzK zE=XE`hPEC(c?Ap^s%^F&*F?00T=-zLR6Tg#VK{gY4iiNutI;zYKLULx2KrVCeZ#Sl zoa$sAJV5pWri#y0ZEi9c&xX3+&~fjnCjg6_OKgmlYe4AU75d62tZas|7st0iLXRH- zeGEsnzpUNpKk!j_ethH?;c@aW_#ECMsUF*ZC~B#BC~P(G*kS`6R~3d|1m`t}u$3!L z(<#g6m49=AJ2yvqID{H+G1{>Us6L6;j@PbW}JIgF}#f8fK09Q{Ui7-gpUww^n&yR@eC2$5m)82)TqfgVeH89&>S`^x)kK z=pozTHc^U3GN5*XNE7c=Gcl1x!+UBTqDdVNA@DTu$o>s{Ri1u z+6nf{_l5Fs?}r1}iXtXxAj$Gh}zHWRv7Q7M;u@Z3LOTKmtT6V&EL<+!zxsGWMW^~%v~s}~DAOSM;j6|E}ww!IvT z3|^nL`SIA+5;}6@VY}(j6ojoHU^RyshGfg>-)P9$g!8!)CA$1OZ*#c*;l4%QSro|&gYJOpM#KS#?Xa^Qr2b?}e67b6iF_FU-@ z8tF%<9~6pnT9lh^{~dP^R@C5n=-ehpza7_^`GMTTHJ#Xr`@?3@PA96D?RH@cHP5YN zii6ks)edlL?S_|1FtS+qu4Hrz9CJlx18QsITL5P+^5|cn(z@9Fb|KXc|y`{_YPWi__RHtb!Zc+4- zd$`hG{A;&exND(`OLbPFC~6xFW0TC8nL7me`P$jLkCF3gPOMub{GS z$==BcdLFrdS-VZEo3)SZZtW|t!_bXGG6BAJe7D9vr)5?4ykO91C9cAUC#)iEqsGQ- z6;Zn{bO80Np+iw+U5?bOu4}^(+&B7$5gs4xo0fZ7gC`~Njhrw32x`Fij+&3r=46UR zU2phb9{cn!8~E!+e|1=fdgpYhD@ePMmbB!29pj9Dp@yTWF|@Ivm5mT#fPEoX>XO1( z*5^IW%GqgEetkU=>roxd&}#s;kMa)b@k-xBhtw2$62br|Na*}0e%;772)}7uj%cfS z=`~2X_x4$@N(!hXz{s937?p~{f}X-CW-;29B5_)eSDW<9tvwf-CM8sbGt=b~EDVa7 zlp+Lwjgj8PyH=0r(PM1>H#QyvbylKB=ks;Ra3t~LO2Jgej{+6DEVVL7R_N9wU*PC{ z`GC)aVyVw=#*NJ5PMzKCYlrUPm*0DJw)$VE^~*0j0Wnfi!!Uf@ub|&R#1}eg{V>=QW$X0;$`#)u?;ntUC@(L-p~*%U)I1Gvtlm&NsU)=SGb z(p0_7-Mwb#5<3PU!Foi0JK2I=TsVfH?C}ABdzF z4mz(75B7)naigl3K(~fj@+pN6L+da&`O7!F%Og~y(0Q`({<{~X7uYP#uYK$aaQ*_i z09mi_h^L2Tv5=#JPol0sG_(#4o$fw=2mG}Q2r#oObVasz#8p!HozVZ?NT({5#_MEn z_h_GMx7LHEq$M}C@a1wGjL;j|1c7$5@dlBu?Z0hFLm-jg|DX5Lvqhe=U?a^0~W$j31g z#7=orn9rcfveX#M&oGA>b{%618U|o*P^%CS&tmJX!3udmpfC?vQvxsCKOV4bZbsg1 z=kW=>q~TLAK*PyOn;6s-%^(jrLHI_}gsr1j9c^@1P-}$+O@8BYq83d%O0UBLaW!aZ zX3_}Ro{9Ky;eJ))WJIfft1$XOgtmQ3^U1%?dH6+Zy2ACo>(jY}jJW&#jQr>{c&9pu zjG-O5BO4n>UqI5-< zB|;+mz`=P`c4UCjiugbO8EGRrrqQ+9H@LM?zIfcZEE%x2(dT-9&Z9@a(UaAqFTibb z@PE@~$1uCDQ`*+8xnf%jw=F_*`PqeybER>%Tld*^AGq_Krbc~*8P!hBnxuI>#w{b$ zOq_7Fshh)al8hSBe!U+Saeq+MLV3cTx6LS=ZLR}`7BawS*6FB#2ituzC+P>A3a6X` zXWgx(vw!?@OQOYp=H$b;v)N;x*$5CsZQ%S2UNtY0YZXOnu-j#Mg$?j4jSlbBk+UHO^MDq0x$`H>aj+dQScl<>6i{$5x~q ztIcTbfEP7)_WCaL5e|Hq!%$$`^i46WWj8OHqMN86IqIo@yTSmdz7q!|LvXL`zP^O9 zLDW!o8O9h9#~jyYEz`zwG!vmiH#d*7)>}@luYj^_3@z^l>vDZc&oJmL;#F=SEO!r4 z)AfkOJ&6S^bh>`&=A_RW%7kAb0lnlDohQCLlmz;s5Y0?s;-uizy6{p1q-?S|dxoJ} z@Heu2lQ)-tGnRjzf7TYLHNs|1jzx@`7z`+2#!%{}7-po?Ks_|I1d3I{WR%+#w_4Kl zsazcZxul8dOPW9$#2KjxM}<-(=4!%G(TJ*S>7Ca+J>0t)e`4<~T|#~GyGL7aU^g#; z5qXgoBD%(tE6hDfvyX_kSK=hCQ=b~i^{`K(X?|RP($Qv{M=6GanRUNv34$O^oVkn; zZ3czMQSn*wMwyEbMV<9f)r~;a9bXv&2IsaP*%j5AQQY;Vb?fD}^r<#r+Zue>u8L~h zg!`=F(njj@1QFMNd{i}Nkge{@TX;iBGiYzSG0U|9f;oQtys*Z+SdMw!SZoBR5QeGi zrY$pnH?8wqoD)B(9XxH}wWne~=C5*Lr#9qRu3QC&0X{yY1{Kp7z0dq&B33hmU8yr2f%BpB%P_Lxq% z#%Y^B0)qS!yHo2sNPR3#{~pGaqiFlRC=2%7P7GXoJQr(&yEerRbb@+1d)%c8MOY zLR^^ZnKQ6}cJi!oKUBXC8>4=SxjzQBAAsT%4w7nexmK0BP%ZVOH`97-I;-viyxDDk z%Y=eobr)>la&m^eFGPcl1e+on=#sMs!Uot<^>$3I3v|aEXj)(z>*jF zU3f2IvRM@X-q|9bF^BeR>D*wcMlo!E|7-N^3j2uNe_#`lYgU?O0%1@GOgVtMg7d+n zJ!0!sUIor2AFhrihay(tD!Wc3AF?9V1F&2Qc?*o{9ADuIRWDU;1s68wb}z3yP&z@nO`eH&qU zj9u4y!uE9Br&c+7m_ns+7!g-j*%G=^pTM^1bMRbx$CHERNe6(;kjc0QVE`b75`CcZ zWWnVf7~{`s$npix8z{fTy^0=xMBu^v5)W);PrLi^%d?ETH?d}-7ULjBJS+Trb*W9) z+w$HkN-j%0vs!MXN$J?it}j;w9oac*g2V%U3gSeRh#6cg@bVAuJMdbqOWeu>%{KY;*lil0q19zMBB_mt zd+`;A2D0+Sdk2|7Rvh9AqA#u>`XP79OA&y`Tfg+(E&TK94CTT56E|y**89srB~8IA zx*)2g3vOZm9CO2HNT+6hj0+mssUteh41DfnRb8PO!tcv`d?#gyY!FmE(LQoYrU~S_ zs#AJ3^aP~09@A%#k4D(i3pjP%{_2tJTGkfJFWF)GVhd#e@LAhNQioaAl;~2Y(H|N@ z-5q*;pf|rXdPC#4!z_DOKAPKRqUsMn6?fxjd`5_W(%F=nqzQ^GB;k`8 zo0wFeF>L9Jre5AZTQ_{owW}?1-Bi*l{>mV_je<7yt&3IKsYa9IXzDn$l_v8ln_dM5 z>*@O3L5=v`pkUfg!vI(4;8J48uvr9EWEy3V;I`3DcX}gsie}CA_}WaldpeETu!eH@ zfNEdV5Jc=+<=g6it>0kTSCK8w3*GLfSlxGFcgu*PZG&z%K;;qa5k8Nz$GLT84qwa+ zZ?2m{ldy>Wtg{s~bGm8AH=MD)=Dk`O%On`I)U~6Dp^8_pEH(XVm`8+F8zW+cP7zEWz1YQ0I`tT2kZ_ z&MyV0!yRMh!zKF??gq$tS;FYfOulhgO5CQHx5RbS>NLhpP`nZjeK4^gwcfhVNxmgX1d7`ogEFhGI&2$N9bE+iq{t z3G=Ilipjcjf0PtET7&2O2@@KAcx3-2sv2AgbeW6ubdR@zzM7rn2-G^e1Lb}-&K8Rd zmbp`qodcORdzA4WWy=A_fOS8Q^#B$mX5pc&Lt^TF34*%zLQdI6gT(*{`qKV7Zl6($ z@vCp6+BP2EsZIyTR^IrYEasRTr-J~VUD)Bo=}dlte`6rhWv%1yo1uwCuex0zs{c2g zA{BX!E6QcP5@I##hh8CRu3W7stQ0s_UqFOf>O+MK9U}3?L-U6tf(OH*y9LZ`w>yBT z+%5)z7Rds>wc@m^vpMf&c(Nn%-ItNEn<{Dj;7CvHl9wI7MOa$0}wSrBZel*$u-w$837tW@3!d9MHQ~{S z#09Snx|(Hf@+oU6LpEH^5^&yd74Yi<6bHwse~k|jvVIxD`@fEBlz;lVQZE!G9%F!^ z*j?i;wXUiZ-_K|0K?x@>;?5TFm0w+Q$4dB)oq$&yB7B7pkG7U*Q_i^;zaL^fe0$(^ z$vuu&Dc8BESP@j-fTU5p8A;E1Yvv-QcJ*q)4zvjLG`Aaw0K#>Do-MAh$x@)9(&U*LUGK=q6%xJBeY|~yHtMZs=_-fo>+P8l)mqs#RrS(le?qjr zZd9g{9dpEW8rWFPlFMS^e{bBm_EBx%b)sYB@d*B?%ZtF6BR!5ruVLG#LT7l`(Y0v&p!$Hi*}bi#~UPmHLgWcY}j ziQ6R+ji)dp6@cOtif<#Ok)sqoDmWO1^K6_yzH^T6{ttI>IWX7L9$;ybe~n+0jI|iH zX>7L_q2-*RxB09mrUu~M)o=w5VP12;tVvRh!O6qb=+f3eeU$i~i#U64>rPeb2*1KG zT{2q_Xc}q-!zQ3GJy@xIrOVenf$|j#15X-qZY4_<6sN9)^huQ#>Vr`lu3pD_Y-+Cc8|N`zTcq}BRSocf4MVDBQt!O3w7FNJflXawG0ihwpBpBtkVf99$^R-zqsAM zh}?LVornF9ep2IJ**ZH&c0&7iTvrOk7&>#()Lv9tm1|Q3K>b6sL4>WrQ;n2HwPeP| zEWuS-Ync57Eh8$SE)pP=h3Fd_>&-+9`>B-CaL?=>pP1S#1xunke`9tzzm5$G$ag)@ z8?a97eaM`lm7=vZuj9-KouzR7ISWySC}YN)B3Ls)z}TW>g0hnYoHH^mfje_#?f!gv z$$;Elt)WZfGT;q}T)B@2lu23mAae0>jSKhJ{MijJI=d0M+DR>?>(?*=s*ILPOTNP} zAOw0g*ymZH79wWxf0SkTLig3St->McXtB5cD^(ssi*$(T<-Mn5!Da9y;5YlKvRul)n|uR!(p4OWhiz6|z0Q zVJx%~rl!N^!Y<(;uqBJ`e_QfelJ_%LJLZ190xKL2PF){p2ikT(te_qztUBaOdLy%7 z*J%k$_h>S|e@?T=eueW&Ex(?CMk4&_`5n4Xh-&ZJZ*UpuN4x`+srs?zV>q&3rTxz1Q+<*;u!n0R4#lk*WGoS_sL2SD|(8 zw!>hV)u0+Bi>bXK7^@e%x-@J(U557sp5NjZ%`WNZdRn(S2_}$c^joit)ejblL zs=e!;s%+y`=dv;~o()S_>nrPNh8#u1InqqLk#(8xy1hD7GgY@~!8%hzx)_M$^{0wB zq5_VDBNS-C)(30zbvhoij5cLwDxz;#Xqe_?>PWrTI(_Nbl^*8R&w^#t1}IkMht zF;-N%^Kb>5FJVImK5C?dPTPXWnHtu#E9=^pbp2{%yX_}K%Qhgg-a_LJJ~Ey|+oeln zzlIIrOVmgSYm$Sg_8yv=7m@iAnmQbj`4VbPkVrpRdM^To>1t<{pkn(b9odkhkBC02Zj@THHBQ30la){~)VbeiW)J)Qc4nExWz`Aon6m>>d@VC5qBc+~n4G;={ z1(Eo*t>tZ3#xhTvTt|%*4C#Qr@q^_PBjPW2H4)y^i7mRvX^Bqc?b~u0ECZiMe+dqj z;kSKLvb3&m_0ausYn60NfQm61kRiD~D)LV$E)i9Yj$;$w!wx`BuoIQPL~;XykosS=4Dj{^eoE-{pp9YH)pHFzUJ zUnS$g6fvse373jt8Iyp(e^f`vNZ3pUbsHNPzpAWIj+bAF3nd~VsC=Q^nAfKhe0YiK9Iz=B@_vv+p_k?gxEBTdSlu(pvBYpP@$2bwj%$+Tus-=N6 zwHEm5q;C5qAL2B-#>fa!4N_L&f(g5=zMH+;L)2#AQOPQ$2gioj#tZ7192@igV^`P`E7&I!Ze;nTc1Q1=9v_Oo- z8G;;g`V-5jR4IA6X(8J6i`WKMD3RXD(eB>9)M=5kZX{iTWh#pAHQfA|9Iw_!uJ3i};FftFHF^`7%q2AkriG5V+AVj*(5J1Wvk=A#=P z9Z<%|C@BOe=flhhp`zQY*HJMqkrk0!)&M6q6`LP%(tp8HGvwd&zp=La;NF{~3!AD)N0q1d;8ZFzD>FtKyzSU9tjvVM z2iNK}d_dnXf62rcQVuVFhw(&J3n{@LaCH!jzbVu~_PCdN7zcT2d+^5)f5_j?1E60M3( z${OZQlxXu&b}Jwec>sHqvM?LM)B$NnpEj1qxTp*uyKHJ0?PsGLRoJ;+k<@kRtsQ2Q zyEW<_e<~fR4D`GolQVhxz>AVF1i6My-+ue-TgrP1 zc~75y!}BotyKrl3>l^sT4Gy1S{x^p62Uv}MwX^fx*ICfX&j;B~e;|2mO2!!M!9ZXT zbYt<|vyCJOvu?blY-*Ov#9qKS{58tOOw52ITj-udjJRUYAt1`cwq>PDLp_KUCSnzw!I*5P1I4!iLzxuF@a%@M!0{q46;fB0^( zD0aU6+p}+;1vwwALaajo`S!bKPy5?3a(3IX1%y-d%mBoi6ySHywtgUMTlCHZ)6gs< z_(5j%sblVq3|K?1}_24IA(nE@kVVBTB$RMyOUK$KJx^bOdzl5DF5(tgnC9d8gk6wa>f!=bf0Gr} z&_D(IW1bd}uNk1W8qk(e?d0nQDXEYp2O?PtJChX^#P{hqVj;TlV`F5WM9JuWsf@Gh z#Y-y5H|JOFci zjc#xZMDji%o#bj6Iw5N0+X}oS_^9?;JD5^I`-CMtPM}4chk#!va!K` zVXNmf^fb9{|F|Zs+EDrI!j2lY74|d|sC{_7-!?4SbZmWs!j)N4-O!GJe>5|lj0=`g zls)+ZS#av)e3GtMU@c$0qAmm3EVkS^p1z~5z>RS((C~iu`nq7`lGk<0NYiEbJk5|v zdCev>^O{h>TxAO8gcYBF|8@XP0f@^TT+O_LX7&L+U3pj#59&wr%MBEDuQ)Nhs<$uj%s{rl&n z$S~seiUK#Xz)wk*P9_NoU!Ko#b8-M5N?_+Ke#Bf-E1RN&Oy`HsU=Yz4^FE|XV{H%bQ%dVvDT}j)z0@PmYU9Os$tU7D2I%}&s z3-9sVg-3VStpr@;=)Lj>Vm?0@TLQGo=C;hu~Zon z1vVMCv^1mqN!#a4f0?8y2QZfDY{HI`vTOmqVn{*Kv7r!)`-+oR2~boPY-{@y!2HPX zfE~FPkb4L?goL}Lf<4ApwDNP|TB&uIcVzkDTB8bU@^-Ar+ps1Fc4$04&555yKMe2k ziicNnG_?<%0_dM_0EteZDkn`iMIfy0m}Cif*ZusCtLHX>e?J58C@Cwx-jD@4&4C4& zrlpfmA~e5+dY!@$7qEu|UxPYiP>lT2?%}RZALA(h;!DauhYz@7kme*vySl1+!PC56 zxr?eZyoVm8Q@y3RZnRz#7@O_oGuH01)UPe+Vb{O=f;BFnaS5M&WjpdLl|47B5<9U=BMOzld!`_&*ulz`kJR2)2%d ze<~7f2kdhW`?{J=#P24osbD93!CGp531Dg2IyP@1dz#E%f5HdMfT1W}02$->g{`k5xbJz% zgB%Cx@x@;8Vv^!Lzgq?ThYft1pWFb6!$UhvW_q0^EyVEGS~+*^zXKEnHxze64v=3Y z$op!9-{=7O5kSfW6?gt*h&HD=GFA@2e;9xW^89Z1Q<6@QhMkCH*9`rWk$m6s}o5^F7#!CoK>uLHx)rlgk!}j37?3 z&?f>V|@xG}*gLEA3sku^DpO743_`@UDS?R!OdUjpu}#@DH8 zq70MvMv}Hhl2zQ^E3DjA(Et92AhdO{COMGSf7qiRFXRz|Di(YE*IW7}9BE7FVGs;R z5oK)xEN@m4G0qDmjwwF>UdC(*MCkbQ-_hJFpBE!m&lYy~f;Sg&V_3PDpf)=O+?9?! zs0s8g$ZpqgISnwL6?!3&;o^+AGcC!;wHuyJW@Z7uGG!4QWyodyl;O!6zPCgjR*b_E ze=&5wMNheK=>UVr-+Od*aCqehU8bMOl>xV3$hgYQ8=Zivb!K0D40x1hVnnzYLrYDB zr@|rsj;QJhlfOWSK2V4wl29aL4{v=`QM)Hh_+=P5>|`XJMklox6@@dsB0>{7Q;`|S zEE>spp^SPIgdl(vG*e>?vY@^QD<7L9e=HcUjg4`y0!}dCKfYhZJKXg50ldg477==2 z>Tz#Ws$^~GDvWWi@4$sCL4Oh}EDRP4CAXZ&ft~cyQZtJFIFJ}v>4GrS7ElswY$Uym zJokm;-YlJQm8FmDJ#4fXd_6^ZmLEV*>m`FQ39H`z!O`ij_)S{y|K%eRt{w`~e{dkx z4Uvgz6e8@dh+jLHunNwFo;Ogdj(f_Kqr-ZaysS7y@6J-XI?vJ5J-WQWM0yq|&=Aah z^}JrenjlIgP}?=YGH5qh^F(=XP0J9oF=mKHyftxo_*K9?&Wd!BN2#~ol6<2F zj%;JY^U(K@oYX>-73?xoWWjv%e$!DrjmwC1(c!>(4|5GvRJ93o8EV9^ticj-dL+~jY8Tbv zjZ7zneDOtxSK&;ir@~QUIF%{aHsqC&Zq$qih9aGjg^GlLHOKyB;V0c@G6^r_+o)h@ z&bJr4?!)19IH3(mJcM`ge;)tZ@D`rb_B*(Pz48yKDY1b)LrxT;2C&GYgLN zLHH*2FJq;N6B-<(9DNo`T^y|3DP_o@0q}yzeqW2mk8wwa+tG*T-#H1}?kB7>^MuC_+S z*Py3x=-@$jmqfeY#@GItm%tvCTwWIVGb-}zZi-LiF?!9zC!n76Q>7ym;dx1!j_G$k zPILIZ#DC+IfBw>YdX0Z4Y4(wR^U=pY=6Jq=mwbGOKiJmgysF@{Lr+9W#s|_9!6$}C z417qb9NwbP&xHRK1|c5Ch5}G{LS01hGf7KI8RH)|%IVxq&lCDv!SNoO8((2l<20G% z*YrR@=_mY4kXQ@j*G>3@!*YekO!T3IkJq}xw1r|9f3I=^z9LI2dML2m%@+Q7ihrKr zpKtKbxA^Bf{KJy5_@P2K^80S+t(szYaDdY(_B73A^NN1)Gd^Bo*-3IqpEqIG=rI}| z5Pq7Z8U4)YZ}E};z{wr^3LiEXKX{6wN8al!!BNO^nkX9dd{)U$`?f9BT$gZ@BH31JEZF6Nhr1DH`JQ%o-T)i^!j7EJ6^GR|-DVG2l0OcWk*iLC-k zUGN7g0<_{I;}1EidU<5&fxq)h`a7MXUL!tXV?3lK{0dyGaIoO(XXwY69zRzCB~f37;j=mk}QRt3$S=XI4oY_G{^@`yjOVJDNt>c7JQwKCg}{N=7jWDgz>;S5l%x6 zajjQ$4Ap3hy_4Od--7yd^AXPbgnr32Bizd559|g-GEVstK@6knrb+pcqf;Ul=2Y}V zfB#gx&RIUWyUyj4s2QtFCPvMLK#PjFZ#BcWDQxQaKneUF{2pj=c6Me zG+ZTBL`o}(;XulAKx>oI-~e9{93{M*f8;su2{L`V>gl<9dZnI@>FHH6FUvH^o=@hy za|f)rX8P$Jr=swd7qc7qyz4u9<#*}yNcQo%4<|D?B~6mT>ix+qH$YC)39s~YUR=&6 zC}+X({F84j96dSF&WkP(g)0s}ninOf%4s=D3jU#E6n4m!f5jxaA#!%Fl9Bb?f92u@ zD=AB+HcVNJtoM15a+=K0c!Ev`h~5duBKj3*Gi9axF%cYIX960Z3+m}KrFhI;xpMgV zgvc5F%_r$tF5r3gF~b-JA*!C>Ks~2{n#xwQ(IhW9aYl9#AFgmr$MgjB27hHkQ=;)i z`q`K$(sYV)RNetx@lzuIIsN&>f0yPAwsv0K>;@1nC%Rv7N;efBL`8|x(!(D_xTkX2 zO*v(qa)OF);z`ohDG}AFSd3HNGdz3g2kH%c{?Fp`vWLLRyixQkejh1CHqORqUUzx2uhmk|zmq zOz=7QaYUOguO&8Jl0z}UI`Km2zH`RKQ{oNhQM?J;EzMWqB{Tgp+O%Z7XgVT(IJq2g zbLG-_6l~Tghdxkxk(aQff75GXInb4i*ea0+6WtNl=mxh%b{=E>=oki(!|y@h1GbNGqJ8wB&5o$27ATGG0`S7WS791yJ`H{m_C-e?IfS{8U8CA9g^# zh2GFMFy)+FnrRTBGC_|O4Wb}`S&mecKS{Sk^m1DyoP(q9L`H5ppW53o?n|&YaJ0hF z2GSc5>3r%PNlO{f6gQFB)+Ebr!@FN;DQpt4<n2@1)nR0W&`9G#e$YV|IGD;#%Ne-L-#9c$~#3(8Bzm+ECo zr!V5lH9<&c1`9dQ(n=EaCNojc|dWDBQ) zzJb;{z7gv_=ByQ6(IuInD(WmTCMJu+eM$whL5vX_Uo)|Q0h>O_ZVJXPrSk^2pI`w016CX*z3PpxZ}betC$Av4f3&MqoX`TZ$jLp^dx(Y0r8x2!R7EDC zR(Hlk5^iy7@~AyEL1hJu#HUn_eOcitwF2r^e~Kfl!bW=0lZaOsA6a*tK)3KF)=o0& zr!-tQqhw|${GO+oP9Zf>(iYWe_2zVr#ACfB7RWQHA-jVubBarI&d+7$MoG>i^wXW( zGzEenzuZl-(G7hzy@{(iK1P&cP6H+=Jd|55(v|sBIz^@8N{}|)QXJ^Xw~Y5mIq|_4 zf9|N7KS3A9pSpMQg)fTk=i2+7v4`Kn@-PUF;Gb@R7kqxIm;(UBf0%lQsej_XJjXx^$i)Ef@T0WY5(We@aghGqho)N2gQ#EjZ0`ZW$9q3eN9p%ACRK zNk<NSYmigGkq(?1BkKI2_|Bqj{U5dpUUyO#amJCykk%={m`ChVSl=zh5E zeVF(A&;Qo_Fn$~sq@Av)v5A&xy`)U8_5BT@nmmlWOe<106^EwDq z7CU4=(mG4tXx1`%NY4=;h7RG6fMmhSXnuIQNCdgP!td)WB|we?VZ2*|L2ot&jI=TE#`$zMFH+#8I(|Cz{>$s6=#k3|a%lG-jSTqv>(hg` zP9#I65Uw-UCX+lZfR|^asadY^&t3C6dB+1d>7nA1t?_ooJx_`&f5W++oi*l5QEpv^ zz0)_;eYB*ye?Bx{q6tPLN@G(lE2CM;oq@45=)`E%$f*uc2VIic;gt_^GChIT6%gZ9Uro<8waqv%t zyhL+io&SlLl#ELwf^d%~p=#er zibCUSNW2qpXpBJtFCp!gr_IPrgBNZQpqCswF5_I_uNVUg&#&q4Pn7Z}j%WB>_Npm!kSZ01ii42ZHe^;@8l6hETMCd;Tj*07a+oY<(@TC$ zoKrE*3M*+9tc)}huv&yA&w`(>YjScW59j=$ly?K4MRFZ6jIZ>^if@yET$e$~^`)?n z%hXY{euQjrQ(Z!6^;MFnnZ+-w7~T; zONZ}QSOLGHHztN=>A-D?sfr)w9DGCz;5lQ|Q9`u$cHh1|{CWSy#p&*=6A$&0hBO4M zXJ!P^B|}tK(7UIn$4+R>2%>$4W9sd`cyaOmfB4PC$?nU2tH?|LcZQDJ8UR7`JHrX3 zqAzw&cPZQK+e`nIDrx})(JO{a%X@iv{QQmMgN*b52oNqm3ETJ_Bb{JjIeG6-_Aic( z4`04{yU!~|X4Xukg}jBzS$sGyc8}leQXRCo%^d1E<-mfMiSOV2`0nuMcUa%);ojlf ze-qgEi59RP4G?td;&lJu=SGyq{kmzTLlgak%&XVE^4Ir9Z*+PyTU#|L9`xfAHNYG>`O(_1?f&zun#Ab>68V+2`nSy#H$d zm!rkvj=^ZaUP+@Fz!$+YlEi)h69mtIN#gC{!8z?tx|K!TAu70r9{UCnC-I2=7-q`pDHmO?tdwYv1KaxA@+t^sA zT6DZ_7aT*lA8j~(78WQganlsF33WZe4=F|9b?PUc5a0*sBOfRk@D#l-+t_mItJ7n6 zFLX*Hw&bU6v}cir8tJ+he@{Mm!ND1F_;L=I!y&#vwmN>Ivt%Liu^JXt?HU71TJ0;D zab({P@MzmXh?grA3s;>6T8a~kq@ZccIh4L|fa<)o#Hj|Vvwp(P*g1MedjbpPhy~cS zyuu^5K6r2+h>$_1BSuXjoTm)9WmvjaBXIzGFeeXacL40?JN<9$6)07#ZQ2uHcf4 zO(G#?@5vjQb%h}KOX(^Y$cXbCg{R7(hcp_U`?>MP%D764QdUmc=owq%QL)rFgeej- zth$$GaGI~UyJ25)f53S5Cmg{mP!6Y0=rBr)1=p)jgoDrucBCQSiXy%T1vr*rQn{>O zO6gYAK4~u&umy(W-pOlV#`fRt6L%zD_YM!t*VFx9PD9^ehui~B@O1z9Vs~$E|LAmy zA&X&4o4C5M?laSt@&=kW-)DDih(PdoNXbo!;eaVRlKr`~3P@e<5a&mv2 zn4o1ix2YqVKhKaTZET$Q^bq>C%{KR%hmgPu1!!p(j@s!ClAAfK(MuX7=|Di<;&`F3 zgaO<$-1X-8e*!Ei7C!WKZ$mC(_`a`YA&nxOc6~NV1+owGS)SE;fE~D(%t#i(r{%Y7 ze41RB(Jfk^t&gEz2gQJmj%SI>FgUbY?~Wo+=GfodKHL0od%k%cBKl;U^GGbv7qo_gnV$TEZe=4<5F~JArPTU`KyJe8uMDD^b z&PqIu1mPY-mb)(1&O!QP~Odl^wfo{kJgJ;!5HQw zM085ff5&_~MgvKW^dO)Ul!mP&%*$K+2)wjGz71$8-Pn*QbceK@;*gvGr_yoFIO=?d~8Gliof zMLpwYz-OA@`{3p03#gCeIgy8}6>_ze!xh;>o)R!nNcwFUY)y4sq+2z{e7U<0+gRZ{+A% zFCEcVWs1HP&sBrDcbWAveS=^Ei!FR?vPg9ZeSitHtuGXM1Jm#eLqB97Q(>Da4Ys&D6Tgg0Kr1n|e{ymI`D2R?Zjaj zPofg7`Ozr_o#iIR#`Xl!XO}h-_(SgKm3g}FZF_3C9KuLCtdgG_`WkdsqWrmWJ%}gE za%1BFDu!LWr`v^ofe>-(Bltb}BBMBwKrR7g(0-~sVgDv}&ubF%0wDhwt_T5U^ zy~9p~E{)OvYfQ%D*LnW2cFp7>0yqZ90LAoov4Ev`Dvnv`ib*ZfT6OA7w$FiUkfjS$ zG<0SH?@lH)cm$8}?kHXQ0gB6Aj=R43+qVIV&Yk|L{SnX$JI3M}f1-(S$`<#}V^6)o zhI)p#d#FN7xm%E{UwL*Zow3DFAy>We%#YHSTl@?%)tk5UbKG%q5*^n4jG>Zb7JCu; z7#ro&X%c%OKEqcelaurs@?v~PH%hU$z{iqJQ&DU{@5qnEfTD!EzXkTUaQ9b@o;7sF#~WWBq8~NECZR7i@o1%^yF*x>hr;)x z0anXFpKI8!(%COGz&p)zRMd<;&C}_lVp}$DaAdb4hY9D%USG9nv`Nm5AOIe|wE2gu6CFfyywTvFA+Y z@adR0D4#Hu8`eE1=MJ%FzUf?EN!mg0q}3;aiXVEg>Zk=D3lz%jKLxBsqrgQh1^C!~?LWX!OU5$P*79MbJZ>h3f8Ufje}xC0^1d4J6nNk%Ne}@Yc)+f!7kfQ^ZrGJGbubd^(usrtO9q!Tw#;%jm-Qm?$?7cmFsZ(C!WyDLA zQNMjj$vpNW(ndUV#NL}%KVk9}29}Q=<37vN1l4R`#i=Z_~i*$7Dq@H z<74&=xlKM`OaB7L`ND|>#Xt-ir9 zm}Ls+6^oMMgG)!!~9^e7%^>Rvd{R@HAX>#^mEzW8o&ssdn$bb8y1u($4hdbnfGbW#N z0p6h2a!Do;gxPiuu_SH-1Sdvc#H)m}Y*fbm!LWX*cGK8356YzSwA ziwh3$23V9t)sr{tfwNOqrB^8{Ty^C`V1QAhc@jS{g3Myjt01I{%()TAYNB1r0>;kI z*jaLZ9;14p@Oz5Z_5M7tf54Qh<++GPCpuf5mFKAaVS91K*vO=F1-Y<_=F+JzgW{NW zJ}Ag-BHn$U6?FR|H3>00#6-1txMq);J(hU`ncBO!s0zm3qWNTKBw}22F;hr+#u_bN z2(;iGOEK=Fx`OkYqll9HKK$qkcA50qjd3GIyvVQ&lMs3!aBQyTf3y&Dn#ws%SK?SP zEKD35sd~z0J*#n}9F`n6Zd4sfvkqgNUQUv0S4GJ%L4-9Rfz?)ZPMUS9331gn8BVY^ z1>=QNRoA##SNl2|569Lz8ni{!6{~)Y3lPYWdNoK4T; zoU12coJStzGYIYae~Ys@dHu{foe+=$UxhDssxQpCU3j`dU0aEoRK%dv$FwcTCDw@L zCuK4+elm}y?0+A2w`xIm2Mu+aYDnJARps|w%qq~HJ1>1?@W530HpTwZ2B^2Gzz-si zdmo@yQAc`4gG(QWd!_!~H`3g*;i22OT_+Ez%({yQJ}?n4f4IF`I*&R_^~z}RfXN83 zVj%dJ*FTl^Ix$J68L7A&zc(D!K4FG_!g|_tr;eP#F++!Su(N4b>S&ow{xa7*lLBDt zh}+&*l9Ay%E)by#Z`Jj74@1i54TgYE0uH3I66HSEg?+4|yPCY^nyy!X7o5#e%u27< zBi06~rTRkCe?6~-srTN77kL}WbT;rpZyTQ{6+Z6Z<262h<$VQ@XyuOSUt#)xJ^Nwc z$?XUQpunFPa!2V_+21_d*xvEJLS-NP=n8N2jYad4S%Dr^sg3{gKa4xU0E-cgk9WlK zL6y@z5jdB;O&eZ$YukacD&~9>eKwhQZdZZi+JMmM%P15?F_v$OW2#1?~->YeA8g4I-;{W%;^1Vy%%{s53mI}KJ2Xo)q*g|{21Qv zpGIgQsuEI2;PD0$87LXG;d|sx0V?~N-e&o&zts<6qu;E(6Madve6i;R$PE{0W9ug! z>|roSf23wr4G@F%B1~TfI+(;s4}JYqluz9nhx5T0n4XC=-i^10tnw#k{d3reBNZ+} z=VDd_8?#K>f}YId$=TL9uW^LTxQy?nb{1oonGZ+tZ%^*W%P034{F^U-6B9Egf!`QK zd}=m+lGKd_Cc#lbOgMuDlTzEKP|0Xx154u*fBDNdSZkE@3H2#x6EkD3mY~}Glj$fT zcli zhQIkw?sFJ6m?RiPw)`zj0(dQ!!EcewQz%>-nXbCJEp3u4Q4*@^5#MRT->v#klXURPSA0-|Watv*>Js)>(g!@AQt&b> zTHz=?-5hT|L?aO9ZZ(OZY92Afe;Rt_0BbVBD}G>j4f3Jk%T@69x2+!98r9$>Rt+qt z0AIe;acQ_#`R}c(9FL6j`}Wj>D)zLT$7tKzjwRH74N3@jOyC^>`%2bm$b&36S?R0& zCZMCRj#>F*<=!n7q~yC$kCLyXk0D=_!iG#x8X6X6 z)W{K6o|11ud1@uCsuQ_K@flytBs7=-05?F$zxU?v-0WL7>h=w}edArd#kS`*s)bF@ zwX-^Q(w2R&ZNF>V*H-OdZFy9oMNw!8IS}_31E1t`s8ie-RyN-7!**OfkDz6^6oKK62{ zcI^in8{fonocHcnQux;WD8IzwPWy&=Z(faj64p(V$`7JkJt`9iLu&O8>;6``ovXPj z!e|*r;7FyV9>ZXmMtyu+pO>Q#Lil5HG&fn_r3Bi)NWi z4MqZL-$>xa!gR5?Uk3FX<{&igX8&&9<2UA(A`ZvqjSkwd%WFhE!2p3CRQ+IJdNj*6 zHn4gOF6W(bnT)stJVzHa4tK zb6ZJR)?=n`w#6-17N_RDs+gRo=*~lY9^QcaHjQbdb7+UGch4w!EO;lCC$egboQTqkGGh zsur&fm7Hp^NX^1UWfB{@*1TrbbG%}P{_RcB)BG_7QEkca`G56%8l&Z4UlAl@g`t7h z%zB@&t4cUDg{%(u(u&%K>{lMJD$E3wnfD9N3&MLS6r~~NN0}k`D*x31zF0lLbiIDx zCbS+f<)Cz6j3mZ7g|TUd9-n6_Om%>28OFQsT6PoTs~Yo)(;{0R8tO(BsT*kvvMSg? z#Ut~p#)1fuqJNd+Zm04-F7Z4Vp$5O*l*rnwA$fpiB<5`Gp3+*Pv#D zVdqj>;4s8+w4!TM=NKER3E&t3nH)ImG8~ZhAh0Lz*%<>}?xM>oe)QmHio?uybJW=atftnbzlsi2^6flA z*XK<(YDMYFERD|6|6jnrfl!zvzV}us%YSq3d9FFr?tD%GJl>` zJwaoAUF~C}KL7hSsTQmAFJ7@~F6RG#m#>m__1F*Q`yn~(>@a!Eep*RHC2eR{dBEMb&3#xad0s!sgdHjj6|M&u{%?L4_hjZ>8pK10niZux|c!GECOa(k24u=5)#OdXpM^|WhLs|jHGgdc%3wH; z%gFMadCbZglyl!#m%ZQ1JR8cE_^Tg8xFhHYA<&ajJE>X!|JZx?y|%4wVf0muzLZ!+ zI5uflyJUoa1W3XvmlR0Tl(Ipw1*kQWmn4T!@Og~$F6XcFF6T+k7-L>E=hT#KNYd5S zowav^HSgCk$9?F1j){dqQ-2(YDGrpS+fH&opcs!>pdv1{`7COV@9uJMR%zmUTl%%3 zc2(=F#`R@9B$v9Fjwl_BmGHE(*9NLoGaRo>T*uSrH1NKYayjJkSTbg9=~0TJ4L8Vq zpapoHdV+$n7sHr6*jwEL4f^0DCyo_^E@42W*%g@Q7>%aj99s-(n13+ja7=57HWe*n zZb9zBF@vp67{@7Zm0UK!Sk_EWIpiM4VtAI!bKlTVOpa5XT_$Q})9)LbC^_k4hjZGI zL7_rGO0Ba>Ru5M6*FRY5QUwtltjL`-V~-p`y6{r~N$~`XC+9_rV!uXtaEp$DPuF*L zP7k-xPA}{<{=w#5jIM{#vYJ2a6TDEiqV}BGr+&?%n%5wTqD+=xH zQL)#_c@{-~M2!vRG~mer#r5Vz_xHB2r8E%>fVRr(uMW4$f#DQjZ^IG1^>Spg1+H}B zD;DUYo!7f8o%<@_$-BGjdz+Mgg<& zZJxf_K6>esf`3ngS%R~ygM>;({B&HYgY`-Xx@z@hXs*IgjBuY(cR!YwV_jaM;qj+M|x(aO|A!t^c(BVja&> z+2`X*Ba+6)F3yMHMZ<{_9K!|>OMBt__=5Rxz>&ZR^M8n__M>b}gS^2hyuc}NAk})T z4rg!wbmQgv-ixin)6K0TerMpwWH-bJkWt(hdEa1r6x^ZnO* z(8e3JHVUe!E}xPZ7u){ECenB@j;_)uyU?Q1y|i+R8-SA0uE2IQ$TMz(p?8(m4)))i zqW+ZFY=1aVEc9Ljp(lr3Vt=bu<(=2h2Rj)YOGMK~Y%Omv7n=&S4GE?oj3(3+a39&l z&#&OnYgcOP!zjcRGcObrg$s@lXyfoFDu%onSWWnBFa?B4N&0-gf3UlLq}D*)0bZri zJPO~TsV_!c1yZ}x#MaLQ%Xnp&%+`kzs3|?IKYxQmw6ndtO{eHSeX;O2&$kuOKwebf zwzhuRQp#xnj2C)wu(ggp<57&Q!s)ylwQJR4Syt$CfAON5nBJ=Iu#><2Kz5UmR*zEQ%SQjuUz}1p;oC6?Z zQHEJzyh7`T8}L%myNsi6tmpkG8I*4~6++h@TB*&*EOxYha3tP4rU0wHct`s$UVrR} z^+d?#J4flo#Zati;{fB$t3_WOY@NQ`THiE^zsjQJm*f>rsq!-%*weQP{`G&5&HR;# zbn#+@b(Liqo(AP_Z*Sm-tTXWdAB3IT-qasUn8eo3X2AI32*LSN3BBkQ_|rrwr+cq= zpKTok&MQEXP_HM!Nei4+xPhBee}8-LXzN971Dx$Qy&>Mj>9eh)H(OhKb2SA|N^u=U z2`tW4oY0|#HNs~C62cEWVMd3$>p#!e8Hoa5MadN-0}A)+27YhsyguCiY3soqDp2TN zop0~mugeP+;;XAWyQ7EB@}lOEnWuYperKGWPjF^g^<&x6nLSp{=Y4yJlYcbdEU$>#kmt184-g#l^)&xHL)>1(JEwJNbJ_g;Kb{Ki z@M#eoJ87~(G^OL=&taOgUz_302Hgwx73D>i-q7zKqMJ?f{|di%0S~=Y>hF&tmO(+T znageZJ^);WRj2zTkY)IOi@v$b767r?2;txk!t51N;z(SdcpF7&Zd5yOYCMmVp?+uhL_?mP9UJl5B;t5ge%hnq}FLjuKx zw%12rVYsF_`-08cPk$J)O9^T68|SH~AO4kz=|=>hbSu(*l6Jk`JXQVs0^dbkAgKN9F>%?^APuoi(0Jv z$n`Fw;!PC&?yHWsq@4ii%3?Q7*X>fUJDgA6Y^wBSO>FKigyn(NO zxL`hfwj!IV=0 zLU1_~n7Y_+Pe40daSra-PYLh%Cj)rwgF`&_p@2M=fcKOAQh**yAgITFDqxQ#lyHw% zt^z*H7!Ai4KtGClJh)zhs}o=zI}a^ z(QmB%FBMkr;Cfl>Pm;Z0CI{;X;fQ4A+AQ$@ujhY!_+NS zL`pK?DNjX81}Q?RqHGnT%Ho}tj%a)m4LEep*5AE@yBUY<62JK!j&2{Yjo}eS)AgN0 z`oQ9`0QHVn5Wk0)*g$*$3$Rqc8?IjM!hd$H@4|w<+J!wt)46p(GIqju(GZY;2+so@ z8YPt$+M$<8NyR5syftcJN^rDW!<>g-7r{*-T+kK)nLn(!!P*%>60*4BHbu*wuM5{Z zM8)^D1*R9)@!N`%+Cs576pybGhlIkn;A5MPF>;j`2RVCu@ta)zMJ?j+GgX@~yMG`H zzZ~t>+zHo%Kceons6`~g?E(0WPRhZ2C{!PJP}L+JSy=Ub zyDu9PMspljtg%9jN(;n*Tk{1m{Y_X$6xFTpO2@2Z5~9W+j5SNY-wWXbu;Nxw_avw| zAygcO7MiCgvek-wH3oAJizwevntwk-ir3IW_cOQ8tt~wa`#>1@n+)R(Wfb=fb2;`c z^Bc|*nT}#!J|bur;sf`3*ewe>O3;Fxu9^O^J#!IJP|IJcHkyZMfQ~sXFm?*(E1isJO+R zqGODeE*>Mtcf=#&oM7mpNAQYn`rC!~+&48uC=wq*qNZr8B`Pa+R)9gj@VW6ItHV%# zO%)spy_~1ezw|;x0hnce@PFkT)uxC9VL#okIx9<^m9GyAvSdDpF19|5U=j$7kKt`{ zVzhok+eUJ@=er%}q-;9T)35bX-kZum1X!Yi+eyJ3Z|ZcH zMjfpzefM=US?;)=puI{bn_@-Nk_1~$OOhyV>5n$_H1Xc*)02If^MCuLGC#D&m}5IH z=Q$U#UWh$;)ndQR(cchH`<2li?X*^sY!s6DiskbifpKMtjP1Y1q21Ih_)7G2$!Kxn zy`t;uG=Kf|ddYR*63d@2=;r|b{|^3xgqLQ*zw`vG=fLHHw`{j;=FqJ58WLKV^Ty11 z%MxzCnZU;{qS(MJc7JIm#Ad>8X2P%>&y|^%m7m~BTBqZl7@$<0 zEtO?A2*WDVWDnITh-(9rc+Iv!vT&XNth4|}`B-z_6l%`FF;v=AK;t(Ej+87uM>vn7 zuk!Ke8Q;j5i`B{k073oVWPR2moL1`+D2GM7qQ{X0zDPN09k7L30yv(?4rC%6a*-xi z4bHi~XmH-kk$*uKaNHx|cGz4Um-{5ZtQAspHL$#h(BmG181UMgHYz*|gixk=FxO>UkS$HmFwB4Bao zUN}9DmpdmtN`$U*^is;RieBNPHgW5>G)}M~U+sj(m4Cxzc4{X>!!ONvk)q&8`+^`U zy4s}3*hlK9$K-ukrC6|EH!R<0l?|yxp7BZSYL<6mvYGsK@#--hIg0Tzk z?luayRWh0Z|K@uh1JaYlS1ca0Q=|jt7d=yY0^DMuE&F=%i|`whxp#L@UhE!~-!;P{ zhYIve@qeXIzF?&b9sxFFo)=0!U{5wCozJ*cHnQv6ikT=-r$l|o&kIcI_@rBU$j0#E z7z^2P&{ei@s*N7A`AQA~BnG@O5)!yV1FtWBLI#}1ySp*2;j7|!00(uU52W!@Kwn+q zhgd;8hi)tS5cO%9$SKT1+g)5tkDa#;1q*OcVSn4fxP9cW#W`u-o+thzY|eX+9Fyav zrR-$FJ*|vklZV`6wcO@qYjy0@sGXyZ1!_I~9T)=kqLP7drc;V1Ix6+Mws2o}m z${lZTy0{oxSoA!_ev#rCFD}2?1K=fP3J1h^F63p7T32yGhm@bJ zv`kW77&wnwvV2{s$yNs( zey9wXB~=DoCd&bL3+8|udIE4>4i3g8(|q0rDiRRt^9Xgm%-5jOO z(hoU>bBAWS3oNv?!p2@)WJx9W`|fUmt$qm*7Z*7v3I)Rea@R@H3B5eWPz}wd!he2K zH!wz%Hfn$?l}B_cs;RBKxEV&R_i-M>YaU}*w99xfK<|yLCG`353gneo8D%5{ey+r2zPo!_ z$hXilbKSL|Eg`6{pe1@S1!BU*1OO-sAOlr`P@q2WuUEAAB_ydXT|$q8f#ERDOElh? zRDh3a+#2HV;!w$f`xr!%5(okA_ii}OD7XZ%_*641WX_-jElLV5jBg5ciGKoPE8mb* zH4s$+L?3X+c1c$`B1pmjYz)fZoI#{BYg-5eB)wxP5ol%FC+>+WZK@PvXWq(Su$3wyS<8XLb8ap67wL4hNdd)$QFAbJp5f>tNsfolR zAVK)a78Ot4;^Gw_frpmnYRiE74c71-8&rGk4VLp|r6oVpnyR$qi5*95tV4bS21{rH zzw*?V;UfmiLw7B7KjE?P_%a4S;|%~5pfEw4+qiW~Jaty0i%;y2O@ADynv4_=yqK-i zLG&(#`w$J7cv?kXa`inh7wYa#N!PYW5IYP(ZpyQyRp+OG%ZyfBJYjctZTG8{Z(!rq zN?P0HaiqfkK)-3qMP%?oY^BGx*LdN1f$)Pl9EL#A zaM;gJI2_g>4yVKoYX{Xc6MVCwZd77~Kz3?8tcYMvnL?PZidX6^7>-P8iG)(hDhaDn zVwHsT=2IuaHoIpg_~r)5iG&~Km#HzVV3>R{kh86O{=mG328dqJENUMH;n_BrGF*s>@ZI;bh z&@LBB^MLVr9%9INjoXutN26hk+#Y8sDc=!|Qxv%qy4}hs78t*PHb~JtcD-waj0*)l zcgmm{7k@z?X@JaHYC%rMH*s+>CHfrq zg>FDIQ$}!JUSmO>tT)LGCD0&>e#SYR>rveQJ%3vUk{s1KJVjqu1r&n6pA)MYDY(MR zTaV%(g+H2Vg@ZcP%R^LFLRwp4&==*g(DklirjJ$}_?2Ac;4rOpT$0+^tK>ZA_BMIp1*0%tcpGnIbpenZv^#V!%?oh}@ylW9>FRUUQaY=R)FHxJ%CJ6Rfia!zGxf7>49<;1xGf3|yb1 zVtaGS<~(YuaXjB^c;s5U*Y+(-09PcTTuUCnLMeSogQA-*1W7kt3Y2zD4xoradw-ms z@OIS*=ps&M2l>#DSIJR(jG?o5A;`M1(qj~qb&lf`sfrfaAb$yZ)|-(4cV)23iNb$A z)e(q;rqm-0p}_k{65=xbT{^hIXF$O-icgsRJ8$QJU3Mw^vQ`HDRLyI9U@~ z64uue{P)cQmYg2Au4E^qJ;|!z$A1gvpo_u9n$)i|(|SeM?RALWddbmeS@ z-I!oiygGz`76Mw_AuVpK3@uR_QO|2K>%1oNye=+E-WHB|IR+ppQwn*UFMojam`pGd zJVFPy`kCvUHs9l)wmWI2s6%?uOcfZhp>J^+KLnAEjw@9VmN|)}>zOTm=YI7aVXxyN z9_GBX&^HH?Vz~pv8q#bS^**aBS72^lqrkh#Kc8pe1!?jkU)6Ga);h3ZVNZkS4Zfhh z4&}W87F1u(vY_^!a<_8nQh#ST@%llVw!b@Gh2u9~TJri!OKz@dlb$z+p1Oo^q{pr| z_WC@K@i^#U^{lo!>LaULpw(tzI9uv;)79XcmF0wUK`pCsch~>wy9J<*0bJXA8fYCY zb-eT|I3_7|#*V|KqE8IBOJ1%rz{jQ5CVGo6Pu5L^pQ+24IN$R3qJL@Tm~S@~QBqtf zs-JmOJ&>sCA1Xa&fH1h?iK=F*W-b-37ir6~(KN|3jUIC+ChSrx zBfo&MD-cd0E^6_CPOW?jaRmhoT(ixxUaPyi(&SA?@eI>AUGF9eY^b7@T_Ji`SKyunUrzyfd7t&^_VuOM&l6!Cotvy8=XkbgZp?;FGPkGgdif?2#7 zH_o^Yy+kF?VcudGezSIptOhkQYd3Re+EPuUCS1`QGQzrrBStus?<{wm31S+=W*0WV z&u)&w3&ga9{eKHuX>{jUB+cZ@^{Oz-Yy*YE-gLmFMGmXNre>wd@Pp$`hfrFRSxb=d z!NS69o~GW?Okh|_*=+ZW@390olG9|^`9DFO+`x2OtYR6 zp-t`FZ>^>@)mKo{>L3h+N_b;EY6?tKEnLq1h~Y#FmYEuej+Hj*vPb;5)oStls>#7g zH(F~WCVx|uVHjBz79+4vxVg~Y@YM7+&`k3kHp_xYf;2i&kdL!plLq~-hLgpcdAugd zH5!j@3$DV=Sy{8H0-TqHr<@lsarYqcjHK1JBDSCuw3aXhFn>!yr3{a`pyNAcf1Eb15t*RozeN`E zvnI;jSF!67-m@crl-}J{(@MEVG^ zdVeW4o<%4S92}8hCQJzyR8MpL1qv2t&GW)QSp4+*{CeN z_$pGAKb0Iqh_2*l(sqXtXo}{MR#r>razb>|(JUW4XyYNoBpz%uC2uZtRAHT~BI%p_ z_$*lUaO~7viFnwQW$bjBf~;t8x(FgdE`N2AWzp5CK~qfWeJuIdGhl#JZJ9z-8gRq) zKb~4{T89ySXig!b&0)A66FrOVtpQw$eYynX73lo(EA!nMBJSeT| zSCy7=y~1BG6}emvx{b}Nw#L~adOneM0GNequ}D@7JsG~ zU6mo0mJJHQ?tY6)&iDQrfAu#_-NQ>#nH(H1%GoqP>c=g^z6BVvl(Km`Z6}DEkXrD3}So7x0y7N zxgwyEo${A?p=k&3Yjl-Vjn*>WDn8W48(MuPnJBp6EGM-gG$<8g(eQ#&L{vJPE01`o za8S-`x2X#7xWT=wg6@ZU${U=xKGPv*qfvzlr3*X^#V4_y=0XTdlu~#-9e?j3u(A;1 z0q;CTt`=%*ZP2Tk(oG9pY4KXW49SD$?&ICA!kecfO@K6jcj-&w?v`^AA5& zk;`&FkUpxmB9ISPYwYQFtbetq|MU@h-QA^bMLAK`KIGz0X%K1YsQxlH$yg{<#KW5S z7v;0|9M>)P=IKAxv%|!ofD{+m@Q3IImpd=g5gMn2EHna)=mVnJDB?r65wPs1LU$f6 zyt)=*W!sirkSv{V+SUFmGcDho)+5w_QZaku1kV`zrcOjH=h{qQ!++#tzWX{Cw^gYi zG|#K;_{LMoG^qjeH1@pa2*4>Oeo9qcUprvzT$S5*tXotVSi5IvjB;Cs6C7zjM1~6U zM<)meSBA(&+QCIwR)YV8`{2PhP0>v|PM2_{(H0d~9pnGGCtb@yZYCu_cg3_P1USlT zr<$}?jzR59lTfH|F@J`-3#+RfxRZ&lC~w;MxGEgtFi1DkKz?(!UNqaTKQ-5gojyYu zxP9Vriw)aq6nGP)DV~Lrr(UssO3! zD>?M2&nPCbjw+d@>wz$Q$>-LD#3bWqoH%mTqC}-Bw&zv-xqlKjRBENFp+U8hYAKhM zYUV|&0*i>& zLbn$Nksqy561>sT>JZ7aVGwE3{&qLDimlU9Y@JP0!cv>^E`zM1(UPuSs*R~dP={+2 zTv~SMDhQFcHh)@$xeV#o+OT`oYhIcPc}ZHV_$cL9zA8-*0 ziYPMP!WAs=vEESGeyLZfj$zLBJ=LPIS#eIc8caJgJ#|QaIS@G4tMKBCQ2D1qj87iEh(P}VcA^lKUrSO`AV1MMU$xDHHB#VoKReAJDvBc7W zqAog_AmKhh9h4H(ylT3)3j!@xXly1FRT3C-e0TR!RW*375J!a+CzjOh@!2VQIK*{5 zJJA4vB6C*p-&C(kGC1;tNTM^JzIk(9U5EZyEvqpPu$o5yJ10zwUbxHwf+*39ZDfkH zw^?gf?0;yv-H2*gYr<;f(O*aYY^4ne&1vupEF?Gz)qZ3GMH4aoNyS@}o(+RKj!sMy z0!5_g+p6&EqPXExxJ7C?MHrc?$Rj7NHPNFn29Ar( zDF7ce?5A48$al{?xe+r~1(xAohx>aBP&DZ$V=~3(H%#jnqb}Xu-QvShT9oNKtvQfT z3x8Q`(FC3*6I{(WBG_ZDR7=Pe>=e?Ck!X(js9-Hk6!7?x<8cn_OVLL}zTBJBoCkC^-5jE2?R5e(toEc98)#WUL?p6RSW^2;k>F&FN1?dQPTmF zBUa)wbU+VBWn&n_WDY1ot2Yo@LQFJDV_F`z-lav6UZHQH@Ew3Yd^Z5ObKXUOS~x6x z`v4KVAspq=8a~0i8H{@NcArMRM43y?ac?;)ZcE3j=nE|iZGBXmq|!!yqCby3eFzg_9vqc zXHXlje#xCs+|Drag@R@4+JsuHP$sIXl#Asb3_ET}I)+RG&qEH88vh64E+2jDJkRb>{Xe zmfUTxc(SsbK3PF((rGC=P<(S*?B3v3`pitoK@s$flHoZWZ}h$*s^fCXLPY=7(NZSwdGvs#3%&#~+7JZ(bZ%lnM8^fyM@Q59|(zLUbn z9Y|CZl>Xc#bq?j7|AXr4Y%q@)dh^G;QIwp^(pULz_~9rW_b*?iaZ=OBol;Jj8YR%#HBH{Gu(>9 zru3wAJb4BC7>{h#B&7X!Gj+RB&!jcEvYAxzg^lju+0jdpI%3M?PW5K9D^v7GO7#(s zX^_}ADD`T(_V5mHxqrUR+7^2-W|n3c;ecbHcF%(RFp)$+^AD#Rz3Wt~p-+-dH_cZM zjThCM&s+4RVPqVvkjEhaJ2h*6ch_048VU8L8YS925t%E=%2v~)H6fa%d36d)b?J7o zjGTfNuB+Ucy4#`35=()Q2LQe9uueOxwzj$`Uqp*!0PB-}6Mq$L??L@}igOI6RjiAG zSQ^G&iw3V)&?1&}ifZq{7=H%oKV(Vm5M0sYSe914l?oN0R_}yPN(8t~iGB&`p@oGA zhgH=m^F~(73V%Z%Z$Z=XDR-ZrKlAbOL#nYwkn@>9ZQIx47F5ZzBT&U-%sJmdh zB6+4^8PokpTIq0;_3fbgfWA)*KOxs;Y~QPum^9lFFp7maq`{wRSbMOK{M!Kw{-sW- zVyMN}K?FwBm7Gg2GQ#^W({YyRsME~H#udtpyQQ2pSARcwsw0oO94)wu-k9DtKa%nl zo_k-)zFf^Dj|jk-Rn%u{N;y*Kg1f{`2$>?R8ns4dA^xYfZ;g1PtPdj@o)N{PMZZCA zR8+T;5tlwUrVra#{VF@FYk(nkYSmyf3TV>z+mdW_CzXl40f3(Z2U{lbzRX_5$0@nA z6kpYARDUA8+(b#1H974L+^RvE3~%tx9XqG^o+A|6=AnJ8020zI8t@`jSDeSxn!@(d z0u0el9;ejA2O!B1v3RD4g{+Ko{-?AyhHgdFB9r?_5MI1?heLRQbG0%r5!rFdfpVUR{}6CQ{sFN@|m; zTI4ibpv3&tREpi&6k=L>Ea=n`PAs1)K{!?fk|s$g-qddSxVF)sU32=YNwQM@WLn-w z%6}G*qo)kgdr2W<>W~R(v0~A}X)b7(e5n_wZ~~$!3Vl_zOf%e@j(D>Jh%5bVn;j&E ztpq<2ZdL@kqYzkquC0uYfGdi)?yWAnk;rhwo_Ky}Fv?ft%K5yZkP`T>cIJsZlTQW{ z|3)Wj0Jk^r-NS#X_59P4mlC;a%N<3|gMY0YQIwvpf}H&bho2UJt8eP}1w)|*HsQ30 zOM$xzSX$Mk9@85)6vZ2Y94_4M3+N!Jr-)5**G{x7cTNC8{AhUrMSyV-4k6<>RE70I%G*G7PsnZNf@>jHK5ZBWbN3J9JuW zI#ii2LPqH`@zJd*f_72F->oWs=ulh@vEEDkL{tB)nqHu34ctk0iZ`%_vAjxt@M|q* z0&^Z+u3PnB*bbKg^Kc-&Iy(>F`fBJV8@*fn?Q2a?wkLEHiqyz0Qjs_DBY)Rat1YMd zn|#D7F8iw(gM2GA56|QdQd&kRacjD0YKuyMi5j#96HSF6Pvfw76nLkEw#>nwq%d@^ zk#C#AQG;7j50xUEyijNUR&^9-%G{`)Lw`z%8$O?L!Scv<0mVf{+2X%NY*f|vj_rXV zu_BM8@Up1rdKM>u9Eixm&VQ1KO|{S|yZU(^AKnoU$xA4acwd9l~A2)VP9))O@SL*u-TV%?ha)O!5BHyq`g%VO6;r zOfh5B71(CjnaZK-#BVUgolx_m3__PW)4U7mW1nU3s@&-x6yR-MJ%0k>1wMV6OIOr3 zl+ckgC;`sbJNK;6E~o-o;?*R66CvL0t@La!y>EZ9%ennXOlggCs1cFklOf@7ENgho zv%H`8v<0env~Tq0`i{cBVO{;uwCb+T$vszUOJgu3Av=t;Abk8MEctrG{NR>r^-I%Y zm9M)yQSH)6I;t``)PKw_5XEWlLo;EPCB6Yi%iy{gyQZWb{aHSjRS|^YSfMkuHVa2h zL`qEq=*+nq_FQ@#5bU{tSaXuIUQtC!gJTEPO*xN zA7*=#+|__+5~D=Pvoj3fgcZsmQ>_zDc?=Vn*(s09;(wUN5xDCxcX!gAW7-Vr*r!dx zaUA3DUem5`lI6)J*|a_5s;H{g<#9k(tOd~^ozfa^V(w+C$gtgwR#TPglIxoS`E?R# zoFbM6$a#^CHIkZTbWaPFe5~MvPzF&bl{Ig$6_wAsyWbqBD9di{ zwzoK~1utC|Hg1)-f0Fs z9n@L%cA65K#J0rmUQ?4T2CCT6vr9g$G76jIk#R3YlU`-K8j^~h*+kn396g+-S2sna zZIPpiWZ^_bm+5d2WpYAFnp#v^7AdR_N>B@749+-Hm#tX>8GjY!ZNyV!i{RNz(?#go zI`Kt@K^(^K003O5J|tCfkYqsXLzJRpPmv;fRdHX{v_ks7muBPsEDouRDnsQP9OZ80 zqo^OB$E2+3X-K(6+b03iTQ>%lPsBA`eZisWn!#HI7Q&d`FqFMlua8vkSmK}p1U=gN z`Dp!MYu%PjtYV|eF(l@a7T(WNsHc@7vl9v<{h}G!4HM$m>_Y_JXxYc6`_|3@h#YpN5%Gm?dw8Pox#aG`1 z7{a0Ws?&zuf}SCz-NvADy_J6oHq@YO9d#=-wL6Q=%G@5N?K)w0zq*1oV7IwYJ#5?D zcQ8c_%`irBid*k7o4J^t?eo^t`APPuR9Hef;x-sirGF37^4)=a;=Fn~Kg!-XmQWhk z7+99ZF`qSl*sP^(YILI%0>`Efg;Wm7zpc64qW~G;s4L*v3?4kPskSu}Ol57RJ|H=p_Z!dWj(rvMwo&isWBwD%B~V& z+>bn^fPY_1biLb|sz8@vj(&f0r;JZg=d$>k_2{5Nq#7%G5V|s&vg+Eot(<$Twww#`4`li1LWNxamxWMU4M3afykETAm?fR}PjJkN zY8w+@P7e^E1{+XbM#5BT`ed0}ujgh|?Kxr-=uvc4`cw~etB2O838h;n+Oo&>Em1Y! z7Jr4e#cUi@O)stvgmHkmXRbDLgwbU8gHQZRTg22yA3O^f0CfC)%s(vNtn zxe=JyAdB-N8Yw{*u;8|c)oH|Q&__A78CJBeq59G2K_tq>ciM0TI?jyBTDSxF{ zJJ;k&bNU1!^wbsrItvk9`EKhFh8YbxOl3^*7|2{!%mN%WVW}T*jU>qh*N7W3xs?v= zH$dOxi)tBnR!i#9np#dhS~CjHeYEC&k7gagiRrUQ9yLN;(D#k~@e8k(M^_T%6Muop zr|e<{`1>X+48gjK(F;yoPdFcpi=hl(!IXH9FiGZX?@Rqexs%4qYD}7Ly|;mkSs@OP zXKGhroZ{mniLXe?rtA6gDt94n z(5yI1Gd+GVe##7#&1j`3)B}8>9)D1A1cSx|q$(p~FO>Y}o-NU2N>>+GvYb`+v_EZ) zs!O9Es;YUHs^P|#XGVM&Nod*TWS_oa!RE;_Ra`zQWABub5wlQfA{Nb@-(1cO6-B= z$!#67&X_Yd^apry=6a~JHf}1)`6O>Ogr}NQEDL|mLT~jfgi?>IuTx-g0{vv0z!RLV zZtIC>j~l6JQZ_E}Q~7G7jbmCgNkH2%Gf?Uj8Hv**UuwB&!Y|Fbb*9kG&~OXPRbg5R zZ@yVFBNn98uN zQcT5SacmUVgAbPe^GTOcIM44`_Sw_SlyvKKmz+Tfkg!!WU!jE?H-8s5ynbVL-+S6_ zTfA#7JTY}5rYSuvE{;uB5}J@gf%H8ZjnWLK1b3$?6Sx~UZGhc#evfV_POG}B4XUiL&1B1k)ksp@=x2V^ox*R=rndKbl>=*KDS9V%2x?JZlQ--BeMi%H0iZnr?NJxOBeyBidlPUaACac=A8ZW^bW?nWb0JUC4B`+?M-w z9-fEUbp5M^5@T9ige&z@gmXHG!odwwJc>Euzu&Ux$8h;?3#~vSPV4NB+9pQ=RqviA}M&l+KCAkd!09rt$ztcLESQzY!`YD`} zpbvQ^IS>o4CH{dSJY7y( zl(uG81AXIpDK6t2!;pB&aPLw580#b8n7CbZLjK0IHs@Ah6*I&hR5oA73S|+Y4!f@% zP9lA=)L=KtH-K0L+A4q9Yr>6$~0?WAcA;4)dYG6@V<}_-tf{QT84{ zFwlyWaY}UfbArQ1S$uI3Asq;KGRqYx?$ON%CbSt1!<(SZ^Ky9FhXY=T_JTZsQ69aB zM~WsSCFjsp|MDoxu236f0xQ{>1g=1$(x{rt9BMsL6gh z9A71DN=AR1EDH`kZ&-fwmk7Z%wZYFe=_unm%4RkIPG60R8!9DdX>?Ogf0Ap(#C9m_ z6H!adpMh-&`1H7o_5AMcyb!;sW?C5{>p`U7-O;x(AsUygDu*RfP#T}aq~?J~4lp+_ z@luZ>^DRVf0f@wPqg3F0e0+#F6ApLzbrJ)Ol81l8lg4_3t!m?Hj5aUBYe0M(m*M-U z5he|XI&d90@x^6>>3@dV#h96hJq99DtUwUaA9jQgb9e{OUl7Tkp1zfsBYv~2a#pQ! zRUFHiL@{HS?_VcUN5)aI9k&;$#r@+G7j^R`mW3z>JlV}6Fn3RSU`10$?oH7LS`0=H zI30h#lIx?mTYu|Bc*iWrd*XM@yA%!@eGwKyRAkMl0U+aE?2BLXlH0-AwK0eY{eh3VQdYr z*tmr*-j(nq9daPg3lj1VrGe;eGE%RB$bWx>u^<}Pmr*q2=POM(gd`*Q7CK_2fxDtb zMka`hDH;{bj2UfAn9~(z=4woZuST^4)M%Un`=`M7$Ogx2=K+_x*{)eQ%tPx}%ltUw z8YU<4?R!tHEQ)@)>-Wf&E&%Iy1M8Rm63p{LQ37h}QYM00VoT=IZ-ioLtDooyKn#DL z%cxtsXa(8a>2R&E19^18Q!}!XKkzov8{>etW;>BOc{h%S0~*uI;%X>V73iUW33dhL zCxBET;bIi%kXi)^kpKx%3rJH10AQ3|xTeg{jR{l~{6M^ud=1#Cex<77Ln~EWfR)qG z0hXjPw&7GI!PFA2cecu`7Z@w_k@}2PUPk&eONR|ahB3qhGp*t8 z=JKQ47|KIFv^dJ594-fG@;ME3FphQ5m0RGz5p^0WbKXIZ>Q3Xy+A0c+*H)j#{S;X`u5(T zx&txC6?t*6wSKg9pv}ujdqKEVW}DqwaK9dG6P%K-_B>^p^MZo=-K>8T!Nns2PiYJN zrNlhYJg`~a$~ow;5J^&hMC2_0b#h+>ajZ#bpc zayWoTy`iQ6>Vj${lHX9ageQN?*jPjaXL;dFe3ijr(8Aj3gRGw zGoj1ZO-rB5!#20F#wQcDzHdvWz4z}TxQv?c7Qxmt2L8`F17C1v|HEwh|3;p=!WkF5 z2?H6aVNI}U)^H~z$TtAa{9JaO@zAUShLT_HehwMQ--xsSg?azKnt6}WStU|@1TX}t z4;3$-le>RE^uj7mGMlx}!o@JBHIzF)XZ~|A;LD+F%ylKbU`;9P?Aa{#hceQ24mrXx zqJ9hjW(?XjndQ0~k;*3bQP+oYg&jxp>x2=I-2{O$_5jEbJH+8ofaUF^NDpZR`8kP5 z$HTge2|q)#cY@AZtxI+#pdvmR&Kbt_8NK*Zw zkTkaT9%&T$advV)+Iy(b-swlu-a|X>eX4&F->36Y-#~eLLksmCejN2p^z{#hf}BTJ zx5UzFHRbwJ@l|9LEF=5yTOP!MqRw}DoD!x*T4Hl${T)JU=ONJJ{5c&EIX8ppPtGG` zW7rF2<=b%2XIOM*iQ2 zDI+*2e6+y>y$aCW1Her}%}lILXh(O`qa#;?=tcK}RT z2Fb&lR%3mbr;RA=UpAOzp}_!qBTo9m@c_2DLCDM#@&p7!i!&ODlK4Y(gXDD57^Ac1 z#tw-_-B#l{3a>wei2D0}RZ(V7__7n*3H;!*vM}7l6R(pR9>d$XH zK7y~ujfvNg`R5^Eer18@`1yEp(wI2qDYQOAb5TsTns7My3r3xyEi`XT2Zf?NJ(X1g z+KG8sQW|=dMd$H{2Q|m4ibmO&+VtW0{Gm;=s-kK3CGv~iCygVxn{o^d-U7Ts4Pmb?Z}5!E z%5Irso0Ws@!4n}F)u&uTVIIbUMM<9{asb|Ss3Q0yT;N!IG~eO@42xnG!$N;Q*&tLV zLP0$XZq76iPP}#%J;;EpjxvSQ5W603Jv>8KaUM0BAwp#lX$y_|gld1v%$I^Of-suw z)K{ekWa)dLQjF))vkp&T?Uq=-1?_gds7YZU6Cep9m=t=WsHZ$jYq~dR4v0!T;dKb8 z0K7Xz{fTq)OJm=S6TMqK)&W;m&Wyk?b>ndL! z05W-2$^<4>t@)6%2=ogiMFn}Stl$C5)0?$A7v<4)0n0T75mA5T-aKFsaD$>6QHFP) zs};G1W>T$Gg0)vd4TKWxxrrn)H|xzPApuKxc2g=s%~RT&{xay#-Sk47az2Q1nB@97 zE*0S0uPCYp9;t5mI_SKbR%IayFY;okm{m+L=;^0gr$cCK-c@2{>j!R(%Y3W6s2)L6 zW>@!kFe1F$ygz@*U5*qVtwD3z9GNc#`?EhCX^1HJ4fAADDd{ORoHMNt)`~Zs0{!e$ zz<_9z>ew_z3{t}|A%vpYTRA4vbri~S+esb|B4)-dD1DdU(K8BXY;AQ$eMJ5+x}Z7U zDk6`FySiCKm@^W+ime0woumaLmx&F6tv`0TNCD8uNOgY$1u3moD}wE9R)taZi=>Dc z!olF#Fid{mN&w4*HPNSoJf%$OkaX^{ThkSwii8pQ^tn)lQ( zDoPwEF(5MSd7S0Nd?U3D68U2Gt+wZJV7}IM`Rd~4&?Jv9yC?IC9hz?1Z%p}ZCI<42%%|HE4f#t zz|3aB3%#K?@Wvjawk`un2aZ0mc=$@uo_gRxlFnG4Ma6X#C1{61FJx|ND?xwfvcFLF zmrvD*QZ%@#Mj5jCaB(s8E@a~a+4yk!n>!S(4|#v<2lRyC?x@WV;05#E%jWyC`SH}T zk45X_Rvu#XoIhyaEz+2NukYVZ1PyO_qoP*y9*CQopzkhnk~L?Kl5Ifx*yPrbq74^_ zXt)#`){)BDDD%Bs3eHwJZ+%C4Px&6p!>rcC1QE*4w@ zGmC$NdYYOcjBDdt?iZA7=}G&ml6l?e=>OhWN(l(gPJIpO}m>z`AX0`0nN;WnU!jQ~}Dt#5zjhWb{H=&c;$TY0LzmBZS%ayaX)G>299cA_dI zgUdpN@hTS@i#7U-I9&121djOS!00bw^sF(dz^D>kk_&Tdz9{%0m?K7OaZOHPfJ?-4 z>~J)Y8rKF4HL57Um8wL4zCml(g3z9q`)`i+8*k#@ z;|5%qOK22w$>-m2*oX^ca+^b`vlbOcy((z2sGvTCr(CM1*5#nitY)OB(iXicyNb2I zcN&p=gE$SKC)-IT8O`V{$R8K3ZP#F|`4)Lk+7y&YP zi#pZogWrI1-vrF&WfWgr7AWV@(_it}w$+?B@u0YTc5_57s{cTzxL#kl!u1{WwG0F$ z!3X#}jURNkO%O!t&qxVwg-`bbD zmxeX5J1JF}O;GRN4q9yFsCPJMrN2KL7e$I1l<);doC1Tu7vGt&-Ic%q20l)t58Gg< zpvTc1kH4xvEUE3@Je~>0lb=ubpP#-xJ>1&a+Bn+UJac^mrk+}y5-1>*ygwL?;M|8p z>vZl(I^26Y>pMHPxg>w}b5Upunv2?kvZZ*cwV6EFuf&`)+5bTqe^x(!1*xU+@BaX! zW)OdUIIIl&p2+0Ahs~A_S5X;$SU>zw^cAweU6}-trdC zQUj>gaQ&uTOL~^ZL8a6~G!QH*2*rKX4Cc`3FFu{l!DM20AN^fNpbI}1L8smJeks_? zxWTQBd_vNzdh?$~W&Q!m{Po%&m9tQ)z-bDC_fn)M&1H2#?7G;emLk&n-KK7TA2a&8 z=f2XerAKp|Wln#say_Sknh(`%=VM^s3TacP(xH?#%n_!JWU7c-YpxtqtzN&hg=d1B z2gtn>uR$CDr%DI1{nZ&yC-2Ij9BGhO3b67?EcbG(c zGFyQEHrtBsJc{EL{d5IMl2~g+@vBBOJ#rkKkP1r$4#EEVk-q#;%mfeg=nT>0A!Y)E7YD0;UW( zMQ(=Os~HbKtoSh7PwKpw&GhADkx_p-Z%*ka^5%ckv?`)jL6RbdQSBhf|LVPbJCPr! z&)~%=sd{lrCr*vyCdJKo_1qLvLM*l|4erTT(zh+`rFeq#>ACvu5Hb|*YxJ#y|qruYJu|nGR=J&wF3K87g$kndlhqa zdB5$k9Yom-ZI)lVgItxOb_*j<=u~LOX7Yb=EA}xXu|>o&q({utHU=e~cH zP&%02m>zjT5gKWC%`{Nqel&|#3@2F}4^$$@Z*O3jd6+NY{V|4ex$MuS$zWD)pyQe^ zX{ozl6|z(ZqR3fHxtC4Jq3pY2qcRREimk)m&>!@M6$Q#6`|$cRswn!EL-x_-2(VyK zjJZp_{wH&(=gseLaUR!t{gVd?;vawFsg8^4Iui?WuJ95T7lrS{@|R@T8eTa*w}(Uw zw$5=g;UTep{#o@6W7Jt>FS={qze%#sA5herjP9-V~kZMI>?4VVFRy87S zPN8myH7#5#ZDP}`&s^2-FTU}^7+!ez2i|vv%ixQlyRc9RxbK0$Exl#YZexK+)(r>v+fasL&hAhQFAi$!>)bDc*vZk}a=k8v-{AT3q}os@8NZ#C?5yi8;bD*KUO#uX#pP zipzKqeZ*4r(TakPq?&=zEH2aQk7yrR2e#%hy&5Y+vLCdL=8ZM2z7>B$;X&&ZdZQ=i zFA{(n$MOmQGzSf)A02^*zK$%6je>$LSRxqT-Hjr|Q=;u0qwE>Au~f zSOJ(b42Gn|z@$uVZv}rKM^u7W<%~)>!63Nh=Z>(%h+(S3g3bk*Yz>R&X?7JBe(vEO z@Q=*9&cYFyY~gj?=e#6LU<3Ato{(+}4lj$|qTd+0gW}3)L##?*@y3aT^#+2tj>$+g z4iNibq!oLS1T+*18v1(`yAv-$T;(OP2{N=CyVYFvaSgj1xov+88(|Z3U?jM9=`d)`s&yZsB8`ZCb zkrlIX)+}O9i~Q1QAhpM%*&71Ou@Z4sW9+KWP0)v%Vts!mF{331)YCtk_SJX&*G02m zvo)^QpHxEhax&ygRPirS#s6AS#lHj-{}N36ql1Z;N=8*Q`cDWY-ca9@zd=y(KP7ND z^RQybRpk)sgbX^$>{$@k=+lHB|C`1>D;^j`yt>ezEKK)3q(_<|adkw;)ig7pcX984 z-X9gCOEQ1_8S(a8p(pH-b0sDS0BWFs6PY)DD@>U{K8E2-z4lt+fD-+hdu=iYfXd+4 zX*T!_J&t(Ol|J!ZS0@gX*+9(s&k}x|a%SEE(!MmR?Li>8%UUMGMU>qCXz*}W=~bA8 zSD(thdPI#G2F;w89!L2@=kpn4NnfNde;4V?luLhjmdUTvN4J$T77Yi&f0zB5vij_^ zwt>H{^hXil+}dS0llcTdvudl5q=jMv28P)K#Lv7rIH_CDLt}F@60w+56n40(+92)I zX)W`NaN+FnTwyE!jd8KG?C{{HgF%I|Kqg65s`E45;cd3|5_-1ZB4?jHr(UFR%)Wi!U zY1jz`nhZumj%ZpH3P?{Oj2tjdS;=j|!2l4*{CpL5wlSke=R}1kH71W@;&tRmY1G)L z6UEIdxvL>zOM6JGk)(wj*5c6THL4PnIe&i?dL}?CX&>z<#r0=JSjhev=OCWbzVmZR z>#P<;nnk0DSXD0hRh-x^cUeIc@Bz}y+h+J-Mw`5Vk8Y9T&jyMjFPU@1^jsVk(WrLF zvV`B^JT~1li4Xv%LH;~t40;QyF>zEu4gQaxm!E_?Sqv!;i!L0m!&*^;@H2<*d4zv? zvk|MY6Rij5Cvl+x4YMJLpk-F1F?GC+Cu?W=abu7dDXRa-!TY2~L~iEXEHVZd#Og8^ z4r^qVZ3v!qB6qC4xm3^3D`76MMKMiad|psXGm=Hv3XVQuDMeJQ|~*s_q$`Pf|rsC=*qU zXNsz(QVP8Cc)ntG0oTH8x>Yr=tnREG&qC8mg(e|lB%E)Y%$jnb58Ga43PpeZACuP! zS>3=Umm656Z39KxHqb0m2Nr3YE}XJV-K`@^3vZT~?i0$NKC3W~iRorb)pSd^he`78 zFKz1`7X+3~fm-}03)E2Ik2#_tcudHg>5 zIJ28C-bDY?@}N&8@|i6cF-3nc4>gjRW$5x5>{NLHEDj>eu0T&VvjXXs z-fH_2&mDMuhK*5j{0YeLBTt#AT0NY_I7`-z;L|3suBfY zacI60sZxr=o9M!8(yh}Elp5YXmo=mmrNj>!a>~kT$893dWnCPD_qyg-KlGbg&d@lF%eTy4Ox11mPkH>I9(fBQT!$Bk;1>3 zJyIs^k$`Z>D)vZXK`+UL(EY8E^8aRQq^V51|4uulx6|#E{)*-b(%VN(e8;)04(4Xm zS!^m51t%Vcw0-h1dh&UVqC7NfALmR*b!GR~*o~EJRI;}fuyB6@|4wd}>Yl5=lo3YH1P=5`9Bxz$8MPaZfLjvtZTOm<#y4ltR_{y6|Hsxv^+u% zFJ`i_WQJtIEHxKLDtl+3psWQd>nrkWt3%)_*H96M zSBIiVxM?Vo>b8Fl=DDhM&nj^7R9SxB5I5*9T*QEpl^ZIS-%QT4|11^bb*V;FWV{>ap zvXQg!c+XS@H?8rw-EJ@Q|JsimlgZ@7DXj-TgRAmXEoG6aQyWu#~ z)v1~HL%=xU{!US;7W^nf(OMu$e~MSccyTcy22?D(BI*IN#|iEoy$-0Q$yG7RG^7NB z)Qgaxy8$O*E%@epi(^%kQ^6uetr3zu@DMRP9l5K2JM7@^>Q@o=s@!+!;}dmGOV@-3 z7^IVBq``mU5f#&Xa@_vs`pJ`v*n>iA&8E{v5)y@v|D+#q<)8dISbB2N0(`f?0QL9^ zIqQ@OROV~IL^+iSC6E8-*TD%Cj+N5n&7@dbI$`k}TrZxe=UEX_N6M)Fr@j2oaQTmu zuW@MTZ*bZa%)%^660QjPF~*N5Xm_L4m_w^>w6uTZ7R>vwnDH?=YX7JBZOj`Bm-B{? zSyQJ9q~x^}6sl|DM4(ny8^!53mDLb2o??JFcXO(hVJxi+0r}ITu^Y|*P}pL&&jA{r|=do`5oN+9_h>rhv2BMr6 zWypV>cL^;aB(>-~B2MI9SU{Zy12y%5B9&#G86Q!^$*W>;vK$Wk*FdD{K0@?q!Kb>l0XCfgBRXntW(np9+!qmJvrp0{3&JFV$L7Jp!o1LZzH(eYprnxE7RrD8 zZb(2{m5jS?FGh(ehIwR0;Nenmw#uUtzZYh0Xv;>+z(3aT-_<9q*xDJ8YQE77As*_E z9j7N^pYXGcd|u&Ptt;_}CAJ}hADS$l-=DNaXYT%!8(IgIndGk8_C(UTdPZp2M4 z10z4~JTAi`?9j*+Jd`&e?zF*}dTuCT@R75x$w?b*=pT0q}v*btyiD0x;4Sv?j1hBfFcS5k{pfy9)C?=7$tuf9s9qfTP5#v z5#^@mr5Tj@f693hyM+HWE|mUOo|2}xLgIOB<1tfnOk~!q@JeQTA9|?sp?RGNJ&sG1iv^ZVUu&sUh}`n{to`PFKF!w&g%n79pXp&L&|@IKO|*vwBN?= z*YI>K{A(LA0(f)s0OuzqF#Sj`DCuYPf|9ticu(;Z-VUGJe-=BS}XY=uYGenvM{g%E2j;;{t>sV%EbATm~7qqx}T`Zp8jpV()G$+f#j{5Im5`98<6!VC3Ket1Q&!BI_PEU=4 z3oY{t=k1Gki@zHiu544>of$s zYFtIdWjatSx$-#aQ~euwRwFd(C)=>Y68)9hUPT@a&%MSaTqNihy18kjP%#sYlJ);P z-iGQofQ^ne!0}*A_*AeT>BteaZHi-ml4-ZW)BH5t*ZhBzb6&XJFnxMjz+Cu_wde z!Aiu7zg$-R>ZKTYYUYtY7eYfi(X7|ZaYN} zO`EvFdRBiJrnx?nv$@`=UM>1$aYc)`yv{zc)fi8~$!Z#%S)uRNXekf9fuIO3gIii2 zL{9;b`Abb8ncJ=h00@4=Yy2ZT+sFZjukh}!<9ck_d}_q&YZ1h`=N#&WvC{^W!x$?v z&bVX@Gk}zL=kU=BPp_%Z%wKB@rVt~viV;+ylbL^7GMqfcT%xC#8ISd(j?%C+dJiui z_4`-DTeFm%>7K)KFiaO6)*_~x4(6ewvbE)Anj0i`7vOSBoS73Z31Y=TQ}@43A8|H$ zCKMBs-u>$N_dX4uiqjhZi7eJhmnkRy%c7L%B@8=Hy-avqO3vd8!O*BGCl+4zBDxpQ!a}uJM$JqXe6;jIyaRDgFQ|u^Wagy zS(p@P>UHrShtgFTHTsC;Ni+_hCFlql`l+^z6oW zu7RLVuO07QS`_KkE7*1Hb%h?yml2>zh2Qy}zTU)x;?jSLS`(Noinb?SKN=2SLfU^2 z(>L;*ZnckiZ2$LV%v^>oiO*xW;_$FW{omiE9|U*8zwO&9h+;V!wp>%s-(XL)2INKl zFhYR<1s`cFHyobD98~$Y=Rg)6jv@e;Z4aN^=P8_FSj1;zm}Y{jN)ItCH(M`}4yB2r zVv9|$!qx{k05sGhW^>(*k}<3{to(oa;J0yJYy#>o_F^3tAvr{>V1f0#fo=?y<}oR~ zx&pfPkXvT(!LWC>OynVE^SFrEk>C%pe@kW<@VAf7%!aJ(A0pVyjrF~atsMtlCnk}a zzO%o#<#<_?M+Iw(Wgev|T9i|ngRR4@qtorZSFevwe_G#pEy|;lMx`lM?D>EG!L9?i zRGzbagmEcl)?dBad3$=ae|osJv$b)wy}xIa1*)hR=T!FR)BWeCZ%=pE4-a|qtxZ`$cqdXE>d6|D`9r6EX8Gq`u}tHmLG z>jRt-YYw^<*o=np6`ZhvEWu`jtFfPyP|9{dy%?6RGCk3da~?L%!(}|f8OBMv8pQbD za+qc5^>UwAbEpwxVn!1YR=%j&#^|1IzCE^lsnjmt~_>Z%bsbP|rzA{=fP(bYyeP6~0VcEY@1 zmk~W#=0$i#7wDWi;BSA)%D3JyIxpno#34T%hvg6Xa%Tm_vCH|@^0y9qWoiokLzMdt zU_ex4abI~3?nD|c5ljgd2(Uqi{y1KG?mOu@tR#LCAlN?I+C9V!`r3c)um}v{PjPhZ z-{O<}B8vwSc#*)vOneg;m(KuajqpMfHb4*@n*kWQJrLX-)Lwsvp$srumV#*bzZ6W- zL?r8NacuMk&-Z5Z4i+8S{}x{2dIw0jDRsU-eP{9ibXLA!`Nu!I#yB()vtN-gi^A-6 zJcLvD9JS=P2ilZ2@Yzb>#*n|mS6Or(e_-+CC|mM@jqC^>CY%k9JfcU+nD95>!eO$l zgjk0yil&-_ zI3Epx9+bIsY_@h^9lbq;S84t9&HBOK_TG!r-L1pJ^%q<0$~@1~KcZv@&b}A{zcno5 z01vy8gO>!)AKvucFuRDUs_%T${)*p>+T3&5ldVX5^g(|VIhfYWgs zaUQ)yiG##j57O&0ACETeL|f@fUiSS2C(7piVFZUKF1FE6ob)@)a^#35a0Qf^o~i9* z07qXbilu)LgfPg900Ab1@IRpg$_l`~F~EEkwLT2<58j1*@^B&9Jdff6u8>3BG@ikG zMTNvGJvh9%dY2A;=l}b^{~w;k-d;85|8-=`>lYVUbb-JCmWSLBp%b|fC;LZ)*GVq_ z#4F@(l#dC2pE5r~1qFDc9x~T{{{9|Qz1OHcI0k>Oi}UXZe5Y5i850jd6Q1y#o$!1Y zos(Zgtps42N50wsYCtcC#SL_yMkM+S@2xE;i9R zoaB%mmFQP~9gddYbJAaF!Mamc#1)S9a(aGlLj?aT(NJu_enNQNjAfQf2q%VBvz-x9 z34W(n<;aJzx$HHkXs-Hrj2IK7^ADtr;q-q3iFBD>OCc;CV}K|dh)*2Bvq{uDfI{~8 zbY}4uF3XqdR+60>4Z44R4ol^CR!W9U=bN^2plqw6AM3e}HlFJT9O~y;6qRU!ILMdd zt9Q!<3GCI=tagh1t>=BCOYCqtyh0jdIn4XUzOX@1k-QJMG9hfDvCU{|YZ$7wwmE;y zRNLckPD!#)r7bzlZ`9D>vkkmemR+KU%90v@S1F#;6HE>QOXM8OG3QXxV7HnDBoYv5 zMO4Y^csaE^WFo5VgcDatSupZvJR+igy^oGc5E){kll_EoGTYuL1Z$8m7G{{CW$i^fyHWcHvu4kyP;v;ur=7M7{xVpsIn!UPM>@%$HXPYGIl>Q_}Ml~boi$MbCD@}zq>0|h2tX=WtfqwPEYqo8s_nq#9dCDww0=y zPtnLQ2}!6>02=^pt0jN@_j&ie?Y<2JC1t6a>eCgAc>8wu75~D4H(TR8oZ=5xK8*m!Q6C0jt{oa6B#rS%$&hO z`3<5lFi-~DV)2WS3CbksMa5V-7$aNp1b)frK;O0T2qYt?^E*G1DhfiJQv_#)D+ zp?A^-0$0iuXEyCmNOX=_ZEF7jt@9`7_=VhnybJmhY{P`BKc3a+4Te{)fD{5(xEKwQ zHYo#dXYJ%K&)&R#`3%(Sr|(|<*N?B?y?S~2_3Kw}USg8<5o@SzddNh;*gwj@$UR{F zLUg~y6UbG!c$#NI9vHGksu)X~I1bL?)yvmMZ{M9Bz53hH>6=&Ie{=Nh>GM}de|`1p zdz~G?*y|f(pE2!0o<3b+uzv3n#C|V)3*hs2Ca#;X6~ys1OkU;5v}(`8>-p~W_i|0I zzkl)O$M>)Q@@kj;mjW1n>oq_7+fHj%)qQIYopZ-uz%}0g=`y)&&ZnEMO&+1F_x7wwadY<5DVWhGAS>?j0;N=PjgPNU5ii=Q!U`nr){zl?WaW-cbgK1 zdA3@yc|azMnXfl#4m;DKth|F(>v5c@QCl)u!=+8GN3lVRWYF)X{2 zmS}YWx8oaz0J5Yh(hE$LyT~;V&I;4?mE(y#p2Hlb1V7|4gtnM0^F?u)t!{1(yr3DW zQwf>*j~xKB1^bs0QuE+V1W>CFO~Pxui--+esnS)|FrzW_@_w>f5d-?AABWJx-e)Q8cRG) z{BrvJkKa9i^=>O#5P+lbB8UP3Y!N~b#S<)Twoi#qCV(5nVcyV_l@MdO6*G8eUidLX zf%ssvGi(&o2N1snEb5vw+>PA7R&#lMNWi~5KN7&BxWn>)7&ITayk~#&EiZ6-e0e1} z4D5mN?YsQ^)tB}7gS_W>(fLhhSN-}R0r!c&1N}S1Wjed-xphLh9ZPo^A)9 zHkteD(yF|F)y>VG+{^ua2K^pAKAHctd_*AL^)C;=wotgQzdw5Q&8;BV>RurjxmUNO zZRJV^05ek6Pt$srdSB3tEcKQot(yOKz(%V2Nm>6=`C7N!9gdI12s1zN3q0_$NZ)?^ zd%kEV>$++yAWAI8Uz2T{LI%GEy0jRfN5#+iRWpu%W485+0wcuA_giQfwlEc6Jd83 zkUMaHh-vFe+*Celm4ZMqs_=L;!N>sL9xG#q(I!-G>nriH^BSNdxwH&{;NyKKGl zG$4ZLt}|ghcG#enz5Be<+s^A1Zn`j1_iz55Z}a&_^%RRv7|$5b ziTHpfO_E{wb5F86@hTZa@E7zZy7Na^QK_@DkxIm*QsMC|+Uzje3_Nfl+RBK3`-^TM zF%jl1f`BK`=}2VMvD4pS<~#mvDYM_L#49Oc2WBuR2*MrMr12OrRQeRR1~(>IsWh?6 z6!;L8CU*H`Gh04-B%d8CIbNQ~F!E`-kpi-fdW~9;wZY-QCT#vWpMZVWl>M7Ei)5MV z`i!N#Y{ycl?|RgdAyAhAT$b&BIO`|^TB}ksZ>Efv<1vepa;_4$i)bj$kyFRrO!k|R zi{K+*-G;67u<$2)1v!#&3$_nz|I2*C>aHa1w@^<= zmvw|&;xi^ev+Q$jQvHo_#zoJen@78c&eBf*-b1eD)%HV%o1hMPW?c7wLSA?92Iuo$ zrQ|%S0p~&dw|Be-jlKrW39u=8;CjHowH&zKZQw!=41e;6woF#ZhQ0V)VPErJ%<;VR zMNqsX;{x~G)316CTpx3mn(ur2fy0B{df?eS+j`&t_B{vQ4A}QZj@;~c;PSNL%Kti` zrjX~%ZWlY`njP{osmLLJZ_Gp9ScfcXt%#^?T}T|tI;uGt)<7<#45R=U#?B6*9hW=xQ+oSRN35+gMZFio-BQ$?2fj;#B#r`0ekpHm%1ME_O;BB7 zN4yiYU22P9fnz7JOpQWRskNKVD|EoopIibn^*@T#O6uUot}QqKd!UI&!>X8J3Sr$uRr}M zPJ9Lb-@p66|F1uP{YNZ8u4ST98 zty;cX!NQnw*R%YjPr5CDLxg+YrwFr@WkumCBa`=~_Ff(T|IhJhy0%N)?L3^BDcXp}x zjHXP+N86^!DD1#pwrX-233}$vaPp~W3gr)qQGK=Spat21Apmj5KryH1yJIR9Tge;D z>c{QLY^*D{85NL=HwecBiKti$~;ssj;FeRpD8z;RF2VlJ3ae|zUAPQi~!T9 zj&>``6;!PTI+B}e^d(cw8U2%Z?}27UKzWOIw+TA*xEc4}r6dCPlRxKI5&ug@?b>VXwhPNSPjS6+? zqh|WbLdV%(x&KIMTXL-QGd)`GP`A9)*8aXTU9+4eZ(Vjg%{oXEvS| zWTj_ldz?7Ic$*s4&WfHVXf>u!(JC^YWN2;r?228^j_@N!n01Rq=_?BYr{2n202FCU zcZPg6cEvZ;EpM}C!qlQ&wydWpyd6Dtx9x^%YHWu3YVL(Q&h571rOk7SRfl=etrbFl zn=_zA{}wqNkd1Q6=yruizTKwD2tFiNk?-a>--A#uSh0UYWIM7C@)KRY)4j9mTi%s{ z7*$q})xP+I6}^Swo$IZ=ZTm=L#)5x>SklH`ddkg>^^JbJJM}G*(TJ_^if#JJLc7#o zxqp*rTe3IwGu;yJPL&NImE_P`)uHM!}L z%JmlBncUja?fuYN#vnTpT1HEgGS=TM(%7?}+tF7h!=TT>CmiiBy^mw+?f2f!iE>Cg z9u#S6o)jstj>@+t^Q<}%?OThep66#(jhGr2qAaA)WIV*w?A?MPu(Rz3852H3Zp`J` ze#YY)u9Svdu+d%Hp?cilc1NteBK z$pfHRaKWCzJGxvCsXt)J4(%KdC+o%1TY*+5o}ij3+S0zyTZ{myzbE}$wHqs-QSUIW z004>(l0{Vr+ojz~n%-ZEo6g16TPilHf1+)Ux~*r3;rV5pLzb=qIxUgW1@mLzr{`C^ zgMrI{)P`O`yKgDut@A;1MGUYf0u75Ge9BPR$29rtcfM62G7!obJ8cXxt3*TT^l1yO z9bi}4DMf^o^Gc=4a6zxr#qgTrm`s2OM8-z;*j)rW-tKm9VNOg*C-l5_ldt&tf7-P^ zos#6($Dzv;WZ9iAhS#JM(9DdS!fxD*r=#6!yEliI(LABETPgLnmAe|fe@dfbSeKPk zwby)&sO>jRkKr0C1idkLacE~H#H#Tj0F`(MVzuyeSU$~Z8Pbm4hlZ6W1T(K!>7*}> zlO0}=uS<4g)4fCK?Z6lgwkO5Fe?1ALGP@lTZwL|}kEJ2_)84%km2Pg@fWk~yO^e|O zwTK65xjk^c&NcT0T2M4B823osEiwJTku37&rI?sIT3LsWl*TV2z7Aze<&3z&n{qR z!3E*R3HYL%Z55IH3pXHca9m8-TrKCbJg$!06Sn^9xHwS>(#ipdq?CxHG#ndR^!QaK z%4f<2mz%?mU0INI7a2rRanVR{7q^zWv)~}e<9DHpF8js)65rTA#AXit3iBAfNu3VC z-LU{qCiFE_4vEV7lXr1mf23kX>ChC% z%piKLjw06h;RA`q!Ve0({5!(VDF1UA=%Lcp#=B@gZ zjWp#EF!uL(^-@*Ge-z`gf&QVJsG8E{bKWWsfFgeS_;3mj#i&XAFy}ntm z%$^N`009$DeKDh6&^Rd4mG!FNwzhBxAFFDWXJs@kQrQTQx_E_u%g3Iyvd0GuwlNyC z1KM0WYDSP-%It`StMYUNcB>2}e}k?tYlgf5(>7I{RKh{=e~$nK6w&B7Ruq`e7XC|I zDlDH0+Qqz>VrA)HF#*~=4XqFZi2Di;d0~^Df)9V0>>b2O20v>41Kr0P@OOvE5pX1X znf@h!I$L1H!<#ip#=R8OoLN_xOIY`o_q5NITTaz+Q7btU9$?-+UMWlSp9y3!h66yh zi-(=~BZ=VPe>sSjCl=m%5VDJTJ8i9lm>Hp8U8xkfzJPy4wWZo2R+FCPG-@WqV~{4u zZ}Ks2?*2aetAfAg1>a5ZOP}gu`87@o`??Dc5%0?x_hn;Ni-Buo_lh1ZI~`XP{YK~Y z;lXw2oVpL}p#0^Byqw;6@5-F*nw2Vue-uqw=Pm0+f1Iaw=Q5l@>6y|h)~R-G@D&Cl z*~UxKO8EXW5GCNHz*Gu+&SW`&uqpk);Fd3Kc&@;$a{=e{}?CRXpPqmjo=SMW=Inbc|F5i#KN= z(kr-A+tbV_#?erH+}sGJnS2vKl6>htOvx_^+UcjuY>jj@wCg^^@s!bLjM{8*iV;Kz zn2;3iK)%IY3i{i#Gf|G6yThZS@G!t{WhESPeV@*=i ze+*B}$V!l@Y@3itc^+3ueUi4ExFb^`v={_%su@k!I5e4xdX}XnyWnqR=D9K9v7(D8 zo;N(U3`4u|w3%QI5LO472SCNk>?(?N6%n{k_*S=lfvwf;v_f0wlW-!@8L;F|GEt0I zq&~m;qCSt|numKMF%wfyw`^nCg(~MLe?o|!MoE@bdZlr)62%~!h@L=kO^W4vYWDY6 zo$}W2-D=YNwA#MaVgO*VNT?v>wX$RtBY}E^E$pI;t@DyJf4g;F z^aR?#2?!8pj>PVcPwLhu0oyw>0ZW@8_{sj9U&TFgF%ub$dOGPk3NAT6VYasJDZ4<& zj6}AtVj0*7GH$vHGNOov1P+t|0nB3Zp#3owKvr)*{Wx*zRUlPPE4!YbU-&0^OP`Fl z1VRakwqHXMYe)qC;v%czfqgO_e^?EnK)h9bukI6lbv?t7N7!{DroqQROaoybz%lmM zn0xU`hAmicKE7xFFWlo>pEJD(Q}B^n!Ti`3j9o4AMn)&7zx=(C!3a)^hHviIMcuUT zP}2&rb!9dT_EA_8EqP(SgrFv}7!#C&={u&qQrVWcW>DlW)n58l$*B*Xe}@kPGoo^4 zg7M&`y%+rbZB{NRjYUTe{b@pZ62hmk}yJJy9Q8?-FqG# zfOO~t2Owow*|SS_8&4H%YA)JtWtL)tQ=%NRtDkFyH2w`LJW+M-{mRh2h=y?LXu^kd zE_BOt@7FO<#=LWxie5!fe-I#6M=H=g1fmnLe!yTWwx<9e$8nb}m+!v(XY(#^s!h#( z?e%RI>1k9p9B3;a%&Du4JoV`xbIiKztI>)wPbZ*%=NT^fjvQYv#B-T$?PnsZVkXOH z%>ptzGw9$AMq%7ZrB5c`CY!R^d~6nV@iBk4S`DZ&7HV|Q;~|DDf4P20frBfWw;vk@ zdSDxa&oP$g>M5I)3_Hu&h}FNKAViiq5Cmcz_#24Jkt_QM-Ib+J@qsdR39auCt>;yS z^beyOT>UAdx7)h9LcyK*n_XR0!MGCvddms0;{l*Cjm=S%-YU{W%lv$tpX~1&kvi;R z4DTS!CEtqg`Wd+Ze||=I{8FV92HQl59%kASf?hp!@y2bU2rrp_bi!V%OuXgAIm%Yt zi>?mE^4$qLQ`?sGig)enC1+aD?dOfuK!SMtG`s#G^dk-0@&6Et(p{TRyx zaTM7NlYxo38bz+9?Fnlqdc~xn zlR-QPYF^Oz&(^pQ=m$*O+uY#g!q9^4;I;i~x4v@)f70ArQX41Lu&rTB#HXafv(0XW zN#)Mva_0^;WF3svUE@y^O_CCGKDYoKXA3SqpFe&5#3G7_gJXqpWgA+mv4ec2l$tcM z2-{Cs)0{;qvYP-CulQg+*KD~!wG^NJYm?Vk(>&Sz zW-&gUe{rwEjBj06i@a$h>XLVi&lg-vR!$^boqBv1V679shpgySW_LTR?!nB8MQd}} zMkv~w8wli?FE(v19^;E_wSp#K@4(o7U~nN7MY0OKFay0yD$kGsz^_%o?nqS0je|4G zml4S7I|sK~=`=*FZzV>yjr}-cPwhDFOf^K3v1xVK9W z=Qe)dP%0jkKddUh)in>I+4q9Ut09MmT63Cy@5E}I*+8fgm6$gv+d z^pRN=M4qa*B@8Zniog{tS#eRURNZM=tXx5fm(mlf8#N%y_Zl16IuG^$UKHbkB8;RU zltzncJEg8B0$gb986d3~zS;X+pzVhze~Aj$$yD_v$||j;H+JG3DWiUuWBxy3YtvX} zD}c4ZSg)3<)mj*?NTpz_SL8r+8^mNDyi0b}4sl)1ONa&S35QMsU-Ov75EdAQQ>FnJ zyH`zcOj{fjJz_o7X(I28I3E6AQ z{&`H_Mx}>}9!5#@@L|NbUbNxduyJHp8*2GEjj}(0vVDWrp6rhcHtNPS_Ka=9YYFs^ zG+IgzZCh3QasUm>u1C6vlWU>5e_;nG{z{a3db&!;o0!&UGAVa)x=B0&_vuAqYrLnK zqXbXF8U~L5FI>6n215|-JmDZ;`ZAV;vlI8JupN7sTou3a`B*r1!+mZ>JYiwK(-QDL zd|1u^@ucGHV#WYtR)&%`BxN=H?JZ|!qk8R$dJ?Vxu$`fcv*HW8%crN&e=I*nj;?5a zV5}y44IfUxVimt}#0nqSGOTZLhvbCj|I2jc0YHRM{BNLqzs9`gH#aNtlV1Y!8~hTH z(iu4PO#e)ocOH^o z`}>#h3v6ADdwFKR3h3v8Vu4s@cF9x5a;Oex`IB~*KYA3O9p@*hM%wUGX?o!YU=H{< ze#FDzoARVg90o~N!tP#n*#xp0Y&dqt`0#Hx47wdv{9?uW@f2D~eW>1@x{2Hb-MDlTY+VGh`ehM_B@y&7YRO8xo8>JSF^jDs zoR_4zG?mfAq5zd;f3PSEFSO~M6#+Y2Sr}xd;JRLbE_v@ZFbcBR#Pe?<~QZGc;;3~q%{B&zZz zz>{ovw0Z8j&A_rgsY0jDDv?VSoD>7zyPQkC6Hf;THwZw2t3{%34P)Y5ZV>M5XYhq# z7ZW_5igJ^8Y$b=l5?8wawOsoe-3malog5@3yONxXXw!@1@_2KCzDArGZ)b5Ut}9~( zX|ooZB^Spnf4R|U&5^=4(MhLLSgpHrS1D<*;ijqR$c@*y>g8DlPS3f7cAQvKcLjY_M3 z^)&K1aWS9H*6NX@`Nf4P{eU%2LE5K;OLXeEWYGYkl) z&tIGbQr({KV<{KkCfel7jM%f{5+J@()TIm*j>;ZX;49w+jk~P5Di@=W5{1S~*=s>z zgMw1m{rr7(nX{3~^U-HE$mnxj!Jp_sUSGjya5iUjGCGt;f#J|RYLr3x@<gDoORNqgWizVEA*EV{Q@J4e`gjU*QZe^z==7aQ79RO*fKh?*{(_m z8vewL4iz_tA_k4_en910L%d^Mr?v4`9b1dW9~@f%oNyIo+HS>DNTOOe8rj!N?kK#B zF~*<;fwusBIan(HxVZuAML7izj0bU^Rf=*u-?S|ZLiCxa_ROJi!rTX zfApH+d5ChNfBm)X8Iq9V6Yb$(F2Za_fQ^j3jVn|)LnNRBjsEvSvM1giWERC9y0C+L zy~K`&5?foMVNRIUN;Q2^U0yPH)nI0E!w68?TV7j(O^YtsJ4EMbvw<>rz87#4-Z0d#+uu0d|PFX-8r{4Zk%}>)EOE zo=diFDlNzYmRUK3#OCvT&n~#U>l7j=HI%u-y&53AuPwKE)7O^Y(i+XRf8?j@fG>#c z0&J0BxsNG6dp z9%X_$9HZ9|QX((9OeC(GhA{b(WMXJ&D)DXA$(7#rwe^<6eacfjrN`w-S|vH0uEO%h4~%gQDHJ@&-D@sLAJr=5p)9hR@pyCj2lply@n+DP z!Qk#K;{;Q0V*H%0=EtiO+0lm5M_ltt)KBuEZRA7ScpqAFVJWQqCZ(j8ULydXy^+&{ zPr0sDDQltySGW5ze|5?i12+u2Sj~CxHX98YF`Ke;!n6DS8)fy zK@K#V**VJo-nZ3yoiFDPCK%auIc6l0<>m_LlX1dq178sJULH{7{hVJVSE;rz$OEe4<2c|;XEt7 z$xBl%%BczBg5<_uMG7RK(UC}rHEy7e_GL8BVZ}tGKsQKu5M;7d=CXX z5tl{Lk2g2QF2Ej?ou2|R4gCy1jWFhEcSkkt7Tl7h82_@t0QGHvF9Md1azyZ(ys*}y zk_h?aKAeoh^#<5?z(DWiQ+QRR*DZg|2VTrf67i^ z9VLvCf3NBmq%zaJ!-SK^So1J(y8GgEXSHY+b+uZtAFs={LT^Q1H*Z-tPWE(|npHD_ zEHPi#)g=w84n4~6GUPe?Cc{4b90>aW(g+p&{Cx|YyNKu@M84Aa$cX)5280lzORZ~? z1*I=igopwGyDLA{zm`M4C)U9oMv{=GFARe1e^~DfLG!8ou-dRK3=F9Kyh9C%`?oJN z0r#3yIHY;TID2*o%5j~Xh&1liUpNMZ`Z`-{sCcZrqm9cWS{dIAY39}nW8wMtLs6D! zoTqI%BsJQX+~;JrEv@%P;^uJ1*D#uG%#DUoY}} zfAt<;yKqT`H)tDWVDS z0=v=#bqTR@ySQd0Q%ux`W~U;|6TzU)TE_7)uXKWb^THf$>Mn4M-NqsBdWTBwNZaRE z?45j%hP85obxlU}yX=Y!t8tSZ<;`DVZy9xt)+Qjz;2aF9PVhf`&qfuaX4{`0e>S6t zbSJeq4;2yY9~NGmP#i;&LLtsLs=k#7p4cI@O5aih9Md2uKKFXNUNp@Mz{Pn32FTKN z#x-Zgls+j2Urc!39jhsdOA9tuQMXrU2&T)^F$&!D2Mm?=C>mkqNHk^pip8v|)&5cX zVf5fy*I@j$UCfHO>pG)CopTpyf6jiBV`s1ID|YmEICOU@dGotmj8q^UpUi?LF_vDi z7zZ$xMpWb_ds`zQKT zu0}1{0m@z~*iOjOF<|4Wz{XYa4*Fg1q{IcUb{l$_0#4Un*wPP4Js)m7DzVh-!6d;9Q6GhF6(e{NDH;%?||d48pQ zJ-9?O7COe>N?o|r*keDPu0oVajM_v0_xE6{U>%MikCSRQpGocCG`5xc$JGh<8j%Eh z8mWDVYy$-@Gsa0kLk8k$0!@Hc?2({^1#%-)n|A!3VZirA%H}1%jK>gC%RAm<*3GTP z1daxDBi0~WS1ojfe|j=n=jPda;Y}(V-(sFXBPZ=6b|JgQpvY|dN#9H1q+4Iv7<_m; z`{Vs|oy(l2d?iMgK4)BCP!l8}AaB^%=t)?=|Mwf>pfYa~d!VQ=)a+cvFcle<2}he{#>_TnvQEL6<)`i){)a z2!ta+AjBHqN+pY99|1a-naz^*82zf7;|SumF=7e$^hM-ae@n53RS`76eo<$!~%nVx5dTxO%bt^O_Qtn#!3=}NABd~j7+sFpgbI{7W99Cnl?Sh@OeyGb*!B#X0MUtF+`< znPo@Se|l{D8q`#z=zFgixg++xNB0fZ+!*RNe|HU^$?YFr9Z!#C#94(j8B{vyIJv43 zDZkXO%u8L|76%m}9P|=~-4P2FCKjU7M!gCZv5zf=EUvld)j8q?|7^I|>@m#eWY+&8 z75vbTI`;)*wHXkM%IY^Pg3yEL8;p5DF%Y2>e|B|3_o&?Ro_D=~c*^1mmYsb_hTuk? ziSS+aI99*NN}!$uf0cpCXY{#fFBoseej(jIg7Z;Ac!6zfDp*Y1A&x->dQ_obZ~e)5 zl;b!yqtpI&aNzi)=KxW&ey2mqtwU-;rxfr53*YXZm^3OHCnSCMKj-!&u?(g_`ex`_ ze|~{0n|Cs~ZbvwA0!Y5x36LZuSjut`Ifv&dY`e|0OD^mLM|S|7e3c-}ydNN{*T`iO z5TGh1D{t;^>3uNt*qRKEx&!p&>7xB0RK;%(?Yl^#+{QzsHag%=-os6_Boq*;(Pf@y z$~5rha;XisrVNULnsK$2@Y+V$l)oFof2O?6BjqcVc*VN6!r+u0WuPOF(7-DQR;Eoo*3#Jz*a_cMF3d?9E{2)N|f9N;H zA26r;#2<2vCjQVIqe)E2)hF99fw6T1F#)DPx1fJPSVN;%uJg04r3YJE9||XcFi2KF zqfkk8HBJDgEMLyWzf?{KU`7qE|axvvZ-N=f6OyEfesZCrDJP$uFIPOGj99rSgde}$IT)=Q^? zA+J0P3v8$XhJ9VfojP8cP92gl9FWd(w{(=+iD5v3KgZd>FQ<03(aEZHN?TrhxZ_O!bh}O?y9BSZAZM*qKC~x=NG@#~P zU<^r*;_YXf3L{*xWH_a5Hf9kv~s|0X-`t?nEFgYB}WqJVP43kt&7VWbub&{(tY zxl(~^lJ-~$ySPw>xr@Z#5E=)R?cnHIv~aa?gBTt3jGgx~ZjU)bNpeH30r`m?54 zNdV;6OHUOU;IF4DW5M6$3&4o^^4S@y4O&Byn04>qpVx~JMl`rn;7onFln1b~*jeyc z>`sFf!A_~C8)dZ=f4%_u;PdZGwXERaQN_p);2`;ZK$9n%a0y*r=avshVQkWtRvpiq zh`R+&Obia34f}N|!ktK4c%K`GWPB_$Z*Z?`nrcx1y^0H`Q2=?!87>}kVv>TEzaahg zq)&0^PeuLimg}Y83|vlS-fv!gaDqWjX3^7#JEKu4 zJdv+4{kNyWd;XbKSaTz_=?)X`WE6bepO&|dWwU^ME#m@*m}=89Q1?u0H{5}< z<`IS8@i1Jhe*%FhF@)D+LsJ9gv{k}^s-wh>FCaZSlIr(n?Kq+Dh(g2{NYj#&;lxqT z$pvOKJ{&|t5T1A7+bRC!DZ0=U{e>rlmmhJSI9RXhUbA(ED%y-o;dWw@S^@ zeDD1R?bg$^x*u5Gdg*;;N&*9Loxz~3^kv_+f6L&Czx`ZFu5BDaMi8VX<;YRo7yVpE zH?`Z%+TO*B#9paY>1Z-Tg2@w(&OBoeKZGOFH}lsE#y4=i*OL0*_r0s&g>GU|_Gj4FSMu9)l%@=?InHu}?}&M<MI4v zo-LQ`sen-QsIn#i&}~6tDI{!;0t?6)-l9htXtTdJ<=Mxp@EULSH-RdKv<; zUyq8&F^mfcy)@;Z|2}R{W~JAcyVU0;NsWLexnxiZ7DuC+fv8Q=x#jkQEbiqX%R3xo zx9eLbZido8jbz932MRvU?`OC5e^$#Bl}dzP{93Q3xVOz71no2%HK|DbejA6@x|!F8 z>OpEEgp#5pN{Xt(DEBx7HKsn3 zJNk~}wqjf-KuKVEI}00U3ka6o7w;{m*xwi21FfPxw(a=Fbk#xYE%ak^G}0|_vY@lD zKd^3Ppfaez zI3DfSe!rH`gT*!1L&9n@q&yy|p5c$H!AGo!wf? zFXOfI9or(*JM8ch_HS$`YdrObkWEEGU<@VY4d}5Qw2w)=`EbP(iqBd*&?Wb`a%}oe zc=XGsj}NurX}ftGDD{Pn={t{&scm1%Q|etw3p&T{w9mwJuyet$WQRG}hvBy|+H~`1 z`>Zwt(O%~P8;G z5FA!%2aGy5Z*S!!;-s=Dk1H}4xQEf^ojVFUKe4Smr+cqMjf4D7XW1t$03X0zG{Lv@!J+zK_)1srrYbo__Q2jzH`gD2bR64NfNxt&)TsR zvhca{Qk*qo*pq{#f2c>05o*gQ?=ZM>Y{cEQhVfEqf1ZSYgjh4~+oMCnyqAz=LaM?| z&J?fMKjFSD$<>yGhw8lTtQ3CvB)?p@SK}Dmx6x>M9AVO>$J~_pu@KrvF<3p1qZK== zD2W~)9vmF3zp$@p+H9?Z583<`i{MH^c2e*}360_nk*a&*+l$@3EY8lxBI0PWN|tF9 zB^wobe{|tbK-hPd4(#AV;$Sbb)dB|0Ve&<`vLlrqBp0b0#I5chu$BYXUSQStoK)y7 zwx(J6q?nbD9>rN2xCqDPNs>VrYeQB=n2$G)*k@_IpRD%xSNxayW4w9X zJYGNq)s0b;-P;dOmc^&hf=B4y6ptHVwjVF^f3s|}VyEa{pwWZti+RM?6G4`tX!O<7 z5Ao!py~YC(XY};JwXp#3Kj@x(1&yE&HCcAO)@yd@k1B{f!Y+r? zD(-r@ihvYHI~#a8UCpV;*eDSh_RslMWPFI?Kvs*~fK7eiTe9P?y)K`=P#wyj&G6wA zf2_DLo#e|Ya+R>8{_^)m`g!i))QJ}`TLB}J?n#hXG-wG6L`%ANKmx2lCX4itd^oDq zPfYUq0~hk9ve6nOzQA6nYVd_;1XG{ds?An-9I9RRDJxdOUOtET+db~3$|Z7uh+(*d z!4fcli=*~c(mD06)vC;*6n!f^O)Q?@f2n}Y+~wQt+!|^d;E?R<^1G_Uo}H)45jsDO z=uz6$Xqj9hKVr|)c!8=WGQoN3@e-`4Z-ZS?m*8=bis~H5Rm$BPuI&0yf@pXwFkJWU z%YOn-Uv26|u6o30C7n)Hh_m1&h1}laZygL?O~o;LR-!cb{Ue@bNp1ul+~r8$AyNgo3rEFkOi=Q| z+MYa@a_esk$R~MSG+a#kW66c&e@jU0E14G3imy|p8UmZuDDS`j)Zkm(`~nfJ~S-iqN#gkI@aDrl-fAPSVIo`5zDSdN`@XxXhYQV8T*=Qgb4oOi5} z4)pYEtr$@4@PVMV80&k+f01k%>xnhi-0APpquo{+PXX!wz%E$9U;+T3e2nk~r$jE5 zYtKqLQVz~f4(IN^PxGhtyti$l^Wqexq(5Qqg`Mt7|5}B`(Uv24dgyNY=EkMl=AK8af2my$giIfeiI_$H z<;r?ow^F~vr*g$JL@MvDJ0QjZ7$SAGu9Iq|sVs}`!iH15V#wmCy#IW(CjLYd0rx5? zDCH&ZWSv+zGFdDPsbl_ndZ_54FoO^$+V0Ef$iE}O0?A?6)SBXR<75z*v}f-itcm_| zFp9asl0IVBbg==se-5D0qe>>em1OWBROMdcI2qz$-xum+iwlpgD!7MS=FRiGbBsI# zW*rSX$|dQ5qf%^|hw6sx zJ6&6ypVLqde}UAVC|-2!Ft||%QE$5!DxlYX zdL#`csxx_w=QSfE^OEK^vS5>~VKBfGqj)ClW-m5vE`*0-$MOb3TtnOODhUca9f^PM z?dalovdCI96VtAj%95fxUF7s z>wtgDe}RW-nIF0$yK(PqTz<{774g8*tQ`WW}RFK@W4Qjl*57 zvS1`hA6&HU`US9Xt9RTxu6dxj65+MO)&Rly043hl5o#++5>KGWIuOM`Z2ntx zE7EtzIu&ZCoaR;*v7xCsW<~@HHr%%G0a&c~B@zY;L-gR0i&zYJwYIF`@IKaHe`vLi z>O99>7FDYbNulgrJjE%?zx@w~KNIo7-D6^ zpU;|w_{jcBM4_(M$v^>tm+Xs@Z-(oZJy}7UX-94#Z!*bcQHx-jxt!+wDxW-i|6te+z|qaO6GA zeQ!Wjq0fM}19{BMijTlcM7YwbisK^@c$JX*`PEBqUk*KeUF54J5cv8U7UlUZ z<3Gnn1ADR%t~rlAuyP*0I~+Rl7|Y~}Bz+f(0SL90Bc94m82C*C7XE?w?{+mE0zTj? zqLLmC*l+8O8ygbuc5w$qf9wqhea8Eyc8ozr`?pfm_7PS=seut*5v=u=MFS#P+zk-N=x64=JIGRtlb8iGlkUsml<-+NDF^*|VlVXqA%^*KS*MSyNkaP@e|^OEAY zT*PAM>qPnjcoikj^gZBqrx7e-!;H!vQwvkG$Sd=rRXRTflUrEGcTF%r3_&y=dZ&$5 zhIrS;XupK2hXA zA!z|n7_*aysL~?u^GUa=GDHq?OKo|e1(j!Rq8m5M%{ccZb}2%haQ*3Cz`Mb-X_VZV zD7t#mRzI%SdHo^-Lul3&r>@nm7G0bSCf#9>N9;%_)gBm$f99p`rzBh3z04rIyab=x z4YFc&qTFDd7=Lqlp$qT5F6$;j8c;>zHIIyfn7rhEEhO+7##0!PI$YmP57zj1g6=8&_ z%DYkMO|gFJf6+)_PG5OaZCOQ*VfkPQEzF$V0iz%FZf%=m%v1m=dblT{<52a!y3E-O%Jb1@_G(6- z>k9t7$Qe$kui!KINU<$K_o~Q08oak;l-1`=9F1gDf7xVIK#s-y5?fvAqufJa$QSFWXveY#1O;x*E`So7C} zs*n$6e`<%2%on&6&4Uv`wp={iF@C(YlK{i+_Q}PN&StZM4 zlPr>pWGy!5Qu*Lh3+-N)cw$p!0!r#|&+to~oDCMDa?o^!AR0_gFWC=9LUFjAT>3Ib zdf91{f$-=G?35o{8_X1|EtiS+MFl*P+qY8Nf0y-dUnch=^CxDdySSRKrjVvJDb+X| zHO{hsoTVIR>0m1|!e+jiYTy_}@bq5-3kco@Wl}65mcm&94(>cC-BeCw!9avtO#5EU z7eHan&Va7rRuWYro3GV6F8bGTA=h!SeZSW8HSU*SP|on&biydc97AY}y3sESDBv03 zf2L22v0GxC%S6UX3CL2D09oc0!tpe_gCxDc*mMJAI=hK&M3e{3?TCJSp*4FF1v9ec z8gpQuLGx)YB1LWylX|7}gjCl8HHPE^;uhCALMs-9e`SpU;lzrx`KS5>`O($!v%WL71?-!7n@nhO!y~hE@#4LD0>cn>8DttwDg{&3~@DfusERBqTIj#${y>Vwp0Y{>2}+c8IuyZ6H%t$`h`eWC$< zI}5m-ZERqc7Z=3}Fn5t0#GU<-h5^zv(9R)qY*wUk0`L$k<^_z+cw!%9hj2QPtPsuk zr5=OSu#o2QB~6~Ur>AKgT$?}(f7)|7FQ??yvCHK=YNX7pjBsuc@{-*~kUbRAQ_|d1 zD8_9~ipP(oIiJ!?C`Y^lvF)?rnK}(IqDvGXqsku|JpQpPJ~4=vtxiS-TN@Y+0e7%r zm@6_S6petVsFum-s@jYoMHzF%FrXLT%*|zkJ4aFe=Hh-rG=~n z$YvxK@X#aJ%46G@eOGxV^jT@HvI1J&5LW61b3vu`Me1mBbV(XpcfXJRW+1hc=97Z{ zmPRG+yNLzmfF-UhOt9bz49%sOcPeOunU`?Lfw2sW>T`9^*o8D>JbHo}$!DcyYOM_L zH`B4;L`p`y^)M{%sQi)ce?gw1o=|{17*rqz;3Wi;gd^j%@b?7GXU!?WUhVHk934e_ zYED$ezu(kOnL70uISr1} zyi|r-hMA!y$5V>fpjDv=-b4HRmatZqpnfY4wo81cUo(XCeMgYSJO$UCBfWKcqcaKg zYRYNjL9$#GNSfLd8Kyrk;NHyIE%8nb^Pjini+r`hh92`DQff)rKy@ZT1tbJ%vzqM` z?2i;a_DNZ5j$#U%$G|c;cfC%UgU=+ za=C62DP7C*hK8qy=fjh$aD7K{T%V+S@Lwx<5J!<%y#RuyFtiDjsfDnP3@oi*UtZ?R z0^@vF>+D>m>lRv5NyWYpJ47{O6oOjG+`pjs~VF2Cs zxIBR%`fk)E-gkJ%I^|sOwPRHp%YeEGdVzvuO)V6}vJ&tX&39lzvSwr#2JR;@y)aqA zQMFlIP@e>b@!GlqIkEaC=muTMiogCQ`qq8Ib~56~DSR89#-SABkUlz(Z_`;=8+!?zjZGwNydv07e5BBRKZUBk=l zix}dM|Nd_YL#K@*GLoFP|O;so|=cyh*9mqbzQ0A6u5cq9SMGRk# zb*?vaf;%|_!EmH`w&RU3GHcko14zaB684|Pgl{dtg9U`|#TcY8$YN6c{Cv~43?|?& zo=JpF?Pb0y7{9^@!{aDQqDY#sI}b-9eW!q0YOwikvVZfP>W+y_{;#=H>dmVcN3ULfh+#(<_qAg;&)&Q-`%pUv4`OI9yoXcP z8TKL1VwW!7{`rI8PVEh`9n}S73b>~qz53hHskJ%Q)>!V(z7B~CGfn^mkvbY<8L!gk<6Yyr&y|8c{HS{RCTha?Ue``yG z0}01>FRRN}9CKI`e!$CLtuBQJByipDkx1LrxqpAk>Ag+ak8!L?NQc8`44s0sr)Z(I zwGM~)nPf(F>fgyTZ0WTnNP;>NVX-j1LxGij0#;lRuKK=A7++Ukp@vHeER;xz(b6%U zK50c#Ts=Mn9kAki934qpy~loO9uCTixyatU%7OiF@^w~cY|YQ}_H&*iyg>T6ak#b! zG=Kg*6kB*aO1YJb)n*Aflg^4S?>A@czekmXqWrK7(vGpDv+bKFVleQE)=uWO6i{u4Z?C;A@`f<^3>BXGUgaXU?n7$y9wZFg8qDIyEYQCM&Sg`{cMe!7JHQZ+0 zrDxpbfN_^%++~u@k5`PRUK$zm7|@ygy(-Fa6HhUGhyxUDm`LI#TCk8qy(F`)mVY$b zm%sU?GW5flmWAvLE34LSh~ZXxAtO*(3OcURKAandR#Y)P2s#1=#wV*4cNQbwJD!oX zYbWRk0<>h426oB-ilbi|48qofxLrXILY{^ph+{$(f*{0%Y9Iuu=e33)!036P$Hs&n z^6G7%J}cX7*)z?BZ5$BKdRWTzK!2MaKwlW8HlUZN?^d9t^?;Uk0BC6iXlZ3$)*Z(! zJmVGv#x2CSMRJU4Za+X5btKApMN6V*H6)C zT-C-W?Ea@HhFEIFQmWcV+UQw|M9%I#k?(5LNe(aSb8iJwZHH-*Nb}xViSN0fS;}YT5 zDDi>P9()oWkf0ROor6M1868|hYBhLfOM!X@C&D1o9UVNIXJT+(CVvL!SKK_-r7hv< z8JGxqNLO^=<$O7f@UDs>6;?}$C94>4vvokiNnl5|y{j>lAJa%fBInLCgrRKqw1L1j zL=z9SG1A8OBQ>Rw=uTvA!C;Z>p>m5MMh=`6=WGL(!hwN-HZ&&^fGM)pht3H68zz4t z>9L3u$0F`x5wK0FxqnCmql^AmO$>u=RN%D@H)L=snjE3zMJxgto|R7sTy6m$OD=<= zVq3j87q^GVYNpO72yw$ZlOf|IkhHtASCNaT5f4|NmPon0kVdF({*MC8{BpIbmvu2Faa*bAP z_U+QzqyF-7v;f@-8*L!=mZ3TMWgaoR-<;Sxw?qGHhH_bu04lcP43)k=sng!fIFZPj31Jh@}q8k}++Uqc-Hbv`LYaCz|) z2)T3e`(stD@_($nxhb0Ov+u`@KW*}_*(GklV3vV`EHytRfrsL92IxX3IkiOE7PE;? znl;-i{HA&9v19&fb9q7@qU-~pL6XI@OtvNd7Fa0;j29)V`G3MGm_nuyTkVB&)CP_7 zh;Na}`yoSMWsnuMt4U^)oaSIal69RhFQBfF)Z#z{M1Q)|HFh4gbC1P{GO;45S!3MF zu?2dF;+U}Ltnzx5Epj-ZB>L$mFgJKG{%{Nm=M>asCzH$O@sjbnA7a&Ua74QR&!$6f zXbDLD2AbR6P?b{ohPWz*1lhP|!thDAkxY4=-bEAMdv8EkTC&Gp&7Z?ftx+9rN(umD z=9r-rWPjLV6@=*9B3PI=wm@Mjl8$Ucd080cWdW3znW6hZJ?=%AUJnv}d8@hrzrPjM zO>-p=S9U}_w;Noz@y`YVC78h*`jBWl2#L00H71Vt%{tXytPcT!CA`yp+8145giL)k*6g;aK zhkxfIKkrIwV#jO%VdEq1|1CeXo(|6S6N_iPuL-iUh_f{wemot!5jb)cI%=LDADm42 zPRBB7ywO2t8Ynqg!+?R$@=dk)nNep8tS2nJxYfhd*cT|p zb%LLOnlfcq)PC;SmY_E1uqb3N=os&=+!X?oCFI&L)MH!W#;0uM{m71_Ne4;sbAOQJ ze3v&(cAgui#eo%WWeQDWVxb$l#*GI%%**B+yuZ~@N;jY{sk;TYLh%Mz(@G8j%kXHW zN(5+4L?ZRgjS19hA;PJp&}J@|a)?Xe7P^0V_U84=XGgE!et-Jz)qnl?`rWISr(eH* z_2y+aHCN85{qW|Q@LOK^XN)oWlz)T&0&FiStIFs3Sykf+L9vYG2=qdpfXroTiD3BI zPi;#q60}mptTaVan8=OcGoD9R+pZCA1w+@RIkocXy?9z4#X6HAJ4Z09FO4vu0EM3?n%6CDvvj@Js74dasNfkf zOjwExsK3{3?c>Cmt1B2kf|xtHqX-p%TonkyZBs=jBI{(zu>pF27zl1i78z(3gJ=`Ny%lk%vMKN z>wH>t12isyf;8M|m-XXdv0vj%aX7XsS*E1r+~df>*PXV$>oT0??~|{1wWl8-4WHGG zN~^k;Qw80zX|8c1r;Xtgr9q6xI*7ZdJmw7A$>|rFh+EDbAQ@QA&(GxM`uQlaQ*S7>TpSr#kxTr|7HmBzhRd zN}9Q&abV?9J%3gMi~}pNC6!F$x#PICXWV+gxV0F!mU4(4$89|0HUq|O#JG*1363iU z=xf6yl8T{_xK%cii+FZ{y4xS}@&E5S2r^W$jztuzmB&4S-wZIkVW1|86E8GcQE1d4 zG|Eh9lze!?A;zd!LM2-_$vQxH@ie+@9`kjLnj9io=zm`X;Ea?z?}oJ$-8ll4hf);D zdKG^~4?$4#6x@KHe8szD^K(gdP59V=0dSF{kOSclmCRVL6WBBVv&B92Jz1*>dCS-& z?;Hw&h%Ib=>;sR2YLIq1Tdx_)JOWYD1A{aZ4$Sd{kt6MuM>i~6dRu9=$X)cZ2!<}I z)iSSL`U*tratyCU+6aOhmt5`wEHvCSd3#h`=G6vbm`O)%ZZ8Be8MoOrwW*NH7b@JU zqGC;&*(*6*rjFQebHBj^7^Q2mHW!z??gAcvo~4$i7F`@5Tn(1b%VYVCQ}ZuqL;X@n z!7-ZQ*J^Htz3TpcHUrAV5S#DsUxG4CFUPig*g!D5CA*G{=%e+HHz&yj#LqEj%kLBw z53jg*c)^*^3n>_0CWNsw_LJXt_$dBLS{Xj``4#A(t#D5maivqn5!b(f#hvIJ?ELtD zQGZ|XAQarirOl^^DDC)Fz5pu0Kq;&P9Vhhp6{dbc(S0~>3fr_r{v*5QX1#xeh$+NF zo$g~GX`iPGhL!qF9o)BgbDusa;8b{3UgHIwsu_sOu5f41_CVOKTe^nJy$-pgD+#*@ z`nvmWn>`DNn%#*OfyeJtsqBDz&>ob3@8lli6tWa;Jh@96Q5;k~y%FgrNalcZCoSuq zmINm#rXN|qYtBJiREw;Wa9-Og6=QdC(vaIbEY{l)FBA(`i3<}>#7R=4dDCzPvv8tC zf4Rv0&kaKjECi?+N3wDh-(Tc{-^z_`W;yZr96MxJ=2zZ`5!Td2M|+Lz&=EF&VjWSR z5Zl*h*Lm@#a(2C*JiB(yo64?*pN?r;5|AE4fVPmkM~{QYZO}`=!9%)q^f+;7<7fH= zRG={Li?D2!Wu@xuY#jZZUoET8<)q9$McTyJtch?q31BU5WIWj7@fWsk^pOpkKl7Cu zR*wGt=2MCZfcuq?!N5rd^_(C%-4p z%-LEdiRx+^EkzX(T4`)~wA|f~WxHQVzzs@H5DlDM_a+|Elh~n@Xldp(8dvZ-o;&jF zsd))-xKjH!ol+wsoeG)D6+kZ|?4lig#a!pKkaUyYEPE0jHPT(YtM1KzFr32~>SAR( z0r9+1?N06shEq=&UvKlO^Lx~xeMAuo?2vmR8MFiL$9P)}a9OZU&kFGX!Iigk(e`x# zNpyXlN5970Tb{vJf8?pQVr4bC)z?I-9!!@e$ccg3d-!*L#Vg^d{&2a*=u78_>+ zCa9cez_lZ2VYD?$BP57_a|$L5yS}KF!|m2MU;Uo3)o;sJz?QL|SUt8Yr}^a7_eZbZ z37f~g1BG<#pY4E2gh-pxFe2Qj$L8Oc zn?yS~5-$MrLO4+oMBLlny{-peB8Yep&T!IqiGXiCYHQbU*n*dG7o702<>}Wly4-5 zXn>4A`JkAK$|Ol6BLLB|soO(mh&;TkxKZEtZFs1wqDMSN!(@Y`Z_h8A8}1$9^fGs+ z?r52PE7r&0E*+cBca0$Q*_nTsghWT}`@Y%2=9z3|KiY?Sdt~>*RNo@kqPx z!AE57c!x~OVr)Db>*7iF+<)yjDR|9a=`%J>4Kfny?lSH7hDp>D_Ec155QaQlOO_?@ zq(F4|qAHgKPw$TQl5U$o%|zOJP510KWOLx;?euft#<;ToM2R`4rsqr-|KmEYY}KqY z@FCyhPwCOEFNkiP);nIDB0G@S}(J9vxyhd4-O?U^bL55gK53mB!W7`%V3^;hg z=B}oj`N~24EB-?fuZqE2#L03#C?L|(NaK)rXkc*qq6S+<7}m{tnsZPJ35D2y7r9hP zP_Sr!f*KU#x;9b0W*4z^F55d4&SfuDCbUo-q5-$hr+En6LUOPHnpLIpBiK1Z0m3-QSlAJcn^;>E=CRx%?bK%Pk`mAg6qw2*Gb@JyLE)Ra}K zMIVemJi)(40A*8tDMob#hR$n{FO_Y^_nzK?G^)gywrzZf6i zz5eFgqnn%F3~iQTIc)o^6ry4oN_@$80_XQlU2WFftok9mQ{R?8R*N2ChmX&pQ6!%9 zLp2>wxBXj~c&9lIcW1X)E?>ZO!Cpmw%}ZF-M>=*GEUj5*rCb}W{IMnt{C*}p*~jNiY!NyFZxm&3eCFF_@RYhz)$=eo9W0huFTOb8`2?Q=6D^vtx!;jDx7G(q#7OW~osmRDvyX{t@V z$m6w8B&A5v3F6t|2DjMVth;a|1w!g7C5f*ZLZzJb7j25i201nTU;=w2)ft+U5qh_b z%C_r@mu&X}8z#ZW3^ZE$CG#_zUJ}9LLBh{(+IxP&sU>)Tc_OW+!Vs#v%jVs7m#y~# z8-JdUrff`Dq67*I293p8jTnu?!+yXJ&A6{w9HNi>^^Y+|gfO<}8;G`Xy)ELIX%$$? z2yh9q%-3GkvX{+g2=hJq3ce|t_HFq!^kVI?dCJ_g(4(P@^@i^5^CV2n;^f~B;;u_D zd*#RK%iaAos58btYCc-NKzJ=k+tWM-Re#~jBzPNd1lL4*s9T=0BH!j|p&c!@8F=Gd zf7e#t-V}JZOH8=*7?Cu0623UhFgJ0K0Z)33{y4A{@9%}=oq*?9vNsCHDgtcCLyj0% zrp%Om4Rt#5^n)xHToYmS6uVq^9};q3g2Q5|8koZ&GLjrX3>fU6Z&uov-;iOFZI{OQ z0v&&gi(<6|=kxivXKP8_F_~nXtUN`&9^!bq3icv4*JGoxmq{dHgC&jCMK6hDsVHg+ zSRV;HA2x6{AKpERxea+pp!;oN@eGEZQiMco_la|dJF86zpPr%W&o+oYb#&9@^>eFi zsenDDrrP6sFFU#HwihGkU?NmjswY@U-+taqQr=~TX0Mfk2 zwD|p`2ti}Eyw8YzSNqmm8Mn$M8XqvjtMCu!|5jHZ7C zk-dk??CB0Mm<>B%kGs}j3t;o{=-nPWv4g$lz%A@SE6ssT%ikjL-Mzg%-{OM?rU8}M zF!R#={c`4e4dy(nz&xvMCZ6>m6VLj#CZ6>_rite-1N44{aM3-6SXMA-O9AIDh}wPe z1^I$Nn-QOXHH$vemTYbXWv)q3<|%)JeS7u)({YynWv=!wbG3hBbF~iCSApOxD)!>t zLbR~q@_#C!pv^}GZmBOWB3NI9(w{n=(PsZZvPK%!#R{Pj5);~P?qZ~S2}ZGI_bCs| z;glDCm)DGHm)e=%MqPN<`58>_-bzcJoa%+Cp^ml-|oqh?ot=Fcr#gH99(uBc^S>t(pTz_49>07 z^`zN+ZSR`mh@>W>8Le0;0 zwuXQCj2QN02p2KzbZqK#-G-OcFR&uu$pR> zPd;aLIsV|sU0<_Z1Te!8Q_*1LVBUUIu=iTG&1n4Kdfmkd!)UA3sD^(i%Pp84zADdG zMRPIA8ni%^#znlbO6(2)_dd_bC>WQx_#d<(!S5bx^Cd7Z5Z=%!(SvR33e;>lbOymVp*tW0I3vR}xR`i$^Jm!{)biAm~ z{LQwiQ=Rz@>BLgc|Di0_23T|A)c9xolR{n@KbL&d@pB(spOFyF69~~fielG%b4ATJ zm%@DW7S@HtH_*#rxmb)aS*{fwF^9dS72SE9oZqJv-4+9WPLzKiXj7-#+H}H2e=V#h z(r{PD2Pb{ztNs=f^@`>L>xEx?JgtkKZB4=rjobBC1_gnCN`v(!2JM45bM|`JjqfHN znDasU6!QTSkKM*K309jJIx}I#VX4lNR)_;J1Gjr_;gg}YCZbmfQ+;K=-eth-{e62K zf63jRVk7TN-<5ybrq=5@Z7T<`AEKkBlEds-_aMOVIg>CNIm4S*ix2FHAmvv}+Ube= z6qD9sjE(oN#MNRNXS=gX(+juOb+x9=*xJm17etv^TFT5j2z)VsSGzU6sBgjBHJig0 zdKmwHg29F8wP2|c49?gkq08AN#+mmmY;}21PwLDypEG~UXcRRL2(NDo2=QdaSZ;x> zdX^V?Z}09(=-FQD8F%2c!Q#+2YksBY{sy1|`lX`8DI;;~>byif&+kV^{fn!ozsa3s zgZCsRh)n@RHDoAIHNN!^cYiaf2k7LRfKEOGpbhztgj&8~lwDHB$Q@?wxQandUrRN8 zCe-wqM@@h4Nu_H>F)OSMGgi54=xB2rUN=>o{HkZ)@|`LG?a0k4VY6gdIHeee7l@Ue zub$RIa~ZuB@(~yjFe@a=vA?Mt?m@2P=0=2QgXWkBmSO4&n#RACiNrlwMIg^rBw>(O z#P?zc0eyv{Y?)}obH36V!aG5BVJmUfEW8JS)8c>M&R*gl(o~`c?x5FlE20;wWO)A^ zzzBwt#tuGsB)FP?!)SNXQOxIfSk~j{lXw=wAtp{@D^3b;)v*t+--vXYVxdWrPqg z)LMU~Xx`*!t>2QRXx{(K^h3DW7;@_?D%k_#~C4M&rc$UAD8ZHto(jRE2KcH5r&q{{to%CGDCOYYo zNZI|_(l|#FV8L{S-+?s^($X~8EZ=C+2mOCEQD@d$$hkyc6@9S%rM!oDDCGEoq4p*p zU1mS$qh?csSUPJ*SJkE-u><;8jj&S*I@n2%_)P($fuhWp9M1d{sTKSbF;KH)U-XpN zr!mP+%qI?iT~jR6ndln+UF8rba14EygawtHtjpDfM$gDtLBiBJm~mgtan|h z26We+>bfwB4W@r6(<7Z6E3a6%vYZ?%j|-yS(Zp9wb|y}?`wD76D1#_*he1LI|2e;U z39$t7gzna$-t}Y#bx(J<$H{WM)3Se1zrd(-XJGW{f4gb#y0Ae5m`fv?%Uj2$o$s~{ z+%0&3zvs*RW3?%1KRfTpoyLl%0gg&Rc&RDk`gCWn9kB$FN`M9$4Cj_dY{TL={&Q5S<5Z0Sgk=EQldbg6g%GDLzV#s^HoWPg2>GsDx00)6A551~0s|;3@7>FM zQCw!L_pG3SV4cZw2XB18E51$GpHfPFoX^KD0vKx0La6#7jqcHxqyhskf9*^38DIbf zxR9V>KjoV#(7YK^%oUF>Sio7`jMBS2K}i4rJFP{hYAB zD*-w~@;OorV`GhN>F8{r(1w6Qk?tlP@Q%sg1{l6lZpT@{cswtqMw;l=@2)JYF6J#J4pQnZxOxuiRP04lZ_xA9EyG}2Ip zbEbt@w_oS`9F1~=aO-;is1ZuX!kChBP$^O!qO4J8rbw3&R^aFLhEgMT; z>uXP*oTH$f4I!-q(@_ci+<{a)I1j3?d+~hJeTZ+Z*%ON_=K4)kTFM~>s40O_zN2^k>WGdp2}unVk- zEqO~agaMt`I1hAQ?9^IyQB|pQF(H?pe_?-nI#?=Ity)#JYTcKa!cC`1#5I!Z0DlxR zq7=HoBNS9f>sh|&MxYuFb4%BiQ+8CEt}KC#Z=%%I6M^9hK_9cR1oVnphVrU;h2Vc< zhJcii!7xZk5hM(TA7rrECr`3ISzB|%wSluC<&=zGBc~g^M>k=j_TU120p-Ni)|#P8NiNpneO>4~JC@g>O+^@Jz)d*D_^S zL8mh~)y=dMTZX(-1))cn3#6^J4eTthz;$YCvi(vC@7`+gOZt+<8w?e}ee2EHm4px?-ePQ?%4C`~+{x$X2h=I*Eh=QdsKy z=~bAGCf!J|V?jzd-{$l64#IAX8EjIIQxLz37CgvRn zGVHoOW!QOD%CPfeZ~5LXf2w-BIQCB3xN^?fvA$#{_Cy@$*=Meo*Qk8v`>@qj1Vp}%B(Ec`LBIwv&I#u!{EDDlrd zyh8tj$~Um*AS#!982IK%{2<2+Tah9SXea6#I6U z2DQD#xj}ucx;X@v5*AZ^aPVk2h4e(HGHaYAflhy9bL(9%?&vRs}@gVczxL>U3oaz?1xWCKU`aLGfh`cgswajx^lC$ z32(Vny&YsP(A~K@6O6TLN#V!?_rLp4xa4ydF3~d+EWN(c^X?9gF5E$-yHYxHx3??p zYE<6dhAWE8e~Zi|Qt5V5?{QM&Z1SaRwy4!GzEu5|25Y2rkcjMsRSIW`a*dYmn(eva zL}3C{{}GrrJuBU?t=y?0FL2)W^VFeH60j^$iAKU7tBws1rD&GUud*~1D-IkFk-1MJ z{=M1o?Im%(SbC8l>{_{}unNn{CC2WG7M9EUTq+G#e?i44Snj86sI#P4g(`0Fb_`%O?X#+MhMoSy_2zjuzJ=ofQ*S0nD9Xpq$v0 zB`?!hY!u_Rw_b1WzC2Yj7nKY~tp-#$e^n61jNw4s#NiINe%(Fo9}cQf*Tr_2m&m2K zZ*B-FikQCe(5NJ1W!PHHMq%I>`b;Ly;EM#&sbGqZcK?2K!Z5AXmKg@VvyJ`3HWMI^ ztnupYfmcG&VJXZ=bR)Ri2D%d2jiAG-soji*Bi{iHlBl9~)OhWCALXp(a#oWXe;#@w zV3-&@^n5r69(rH)cP{&z)swfG=yFzN;XEInL*E}{-3+LtV5_;W{ zeVx?zbt3vY0jcvPW{&i>Buv+`pKZ&oP&?Wd9c{x{8bf_Oy!LBSZ6;C01bhAZ=hFQbk2lQ{%{z@P1(?`tkN`HLFe;o}-9YVn< zy`n>Yr%sY5rq2l`j_&2U6mw9J(70{&in-bvVAbbAP$GlhVJ>AT5*he=zId7w)hmP>3 z`1Q*5R*njV1dPXMp6Kx`e~UWwf9s4$oofF1ESPdXUXYnwZPQH7wRn{oCbDu=@AQSX+-oPQ1CyrX`NI z5;88|md@fi^yTyfnjIG*7{M`jloD0EVnN;KY_Y34U~knfh^RLj&!)BJZ#3S&_wt=St(s7e;aQ0w?V0eOon$4XRw$Nm_QrBbbGki|cll~CY~W@CJ&m{d_IFx--JHe%>lb)7gjQgs{wUZ# z(l66uoOc_?J>HfR)4;sFy`sw>U(roK!Q-Hx zTR%Xc_4fD(HD?!wVqeu{jm1_Q_p*3yYNd$z5Y+e^-lZi?K~(M#as--+CsKL}DFTGW z;>4PyuwMFAf07PLe%H)92zpPa&yuf={e}MFV_e2_0d|_W__!N zLNTOKVdWx>FbB70H5*R-&7YudokNjof#PCq@^l7JT&xc!>kF#@jh}iKF8hJg@h;s@ z@k%KXgDS_AG7niIJh7GN#0~T%7Nq3CiDfA#mRdgOf2;bBL^l7CI(CotV10OBz9wwP z*_}3{H?CvJK)q}suH{fp~>l+q)mvrw3pZ*azV%B=u*H)sWcVppx38#FNC1A1{ zDmoEgv^m_~db2yE;=(+^(u6yVCW=EM6(Hh+qpfGqWjYDZ!Fja$OGQ0lhG9j)Wq5(% z3gpu4fBIAUdkxeW{N3xl4$NAKb%ut-UM;b#W>;8VdD@V9NrC<|vMvlfS+a;m6yBqP zJC#&}${Mbhy0sTh;u?9*nFa&PaY5wFko1J#C3Ef_O~d(F93*3K4#6;d`frz490Vo_ zE1`1Vz!_nS}h$i zy6A2|3P|iDf&HxMqO}S@l-535gwyd6na#mH=|wi19x}=+eI4Zf9z5!% zQboanKg}k+5rj-re$Ft3Jz})-HHMYfe|wA ziG6Zwh*ugw8n+|MOSH)1t=XA@1M_0u$&jSdVbmDvvW&#b@ieh>30GGXG0Wu=prIR;Av2`LXh=oU6CV$f<^s{`+LuhJx~bF*PF<5`()$V)7BMU0uvZ3~ zSeHUM6 zwrrcPorzUsHZt5?3R?#yrbXOvJjjXwVF*jotU>AE#<{r>jq}{`BM%<%58y$Z%c&KD z+)()&;OG^0Dc28y!N7}Le*nLUz$X~Z^y}8ky`8P2z5UlG2fKfJyLYg=bMky|_vKFR z7pGCRhzqKM%nx}I-QJR?vD?)5?#|xP{=v!Xx38Y<9-KVeJ^F2T_cg^4dPH|0tCPM} zC;a##M2;Iuf>I9F*YS_ub9sFx+(!+maKEXL@oynfZKZH3^aPUcf4<*LbkU%do&z1` z(TT`b7t**R9f5tv9ab-mzu_fq`r@l(?@O%i=EjB)^L1g<=#AZ_l*%NT)~oiB*~pK* zparBd)14L6A`jlCMkaM#Y1%?y9-h9BI{1G^LG?#%AKOOPDh)70})?N=TiBhwxx>?Ph;AIt{wcD&_6NfodYTQ zw8ng9ps&YyCGk|B)jFGr3_1z(4$h}jKas~08BZQl3_d;etr%5Ulgbe2_6?~=OtKeb9~g=^;Tv3jZ=EW1ocO9Tx+Btw2k zhWu}p44FLSLB5~Z$`DP0VTDQXAsO<2L^5Pk5`@?@2ohD&B^X(fEy;u}?S3zLkmCpA z;2lyR-+=+Vf2^_ye(m@&%k_F+Wf&hq$R1J_Kd4h5)TzIpl*JDTgO^AcocB*ouE^Ou z7=1Y5#P8&!`}0pf(#?%wG%rixGwh5_0=h0jODk9pLPVt)BWo7zC8(7`Xcaw{0>oPC0+9DBbAEv6u-^ zW3CQhf88Ja9nofJ&E zE*FGBa3hm?a4hpJ=NA@AeRX>F#i7tl1yR;N08OArh3#OEih#_G0>v&$pppRie@S0# zXo|CyrYna|6J%CUoO9W!P!r#@xw7VQB9PJIiUXtiuKG>xMM_a<-XE|lAaDm6rL#lp zQ@>>NurxwbA&SBHb9FT;tR~9y?uNJFk#{@QqA&~pML~=wp)nHX%r3DVGHA=v{vhUu^>!0#zN|P!wZb06nDJ zJ$#b&!?iWH_Bt0iZCpr23;VTu6OMg{^?c&2(E|y-TIB>xf7w7T+DyNMe^VEUli=Zu zWC5!~(N(e^SO;+Fgmzq9)v z^39uef{q-y!@KKbap#P5e?mY3Fj5`5zEu2<&cllZokQn}QUQt%f_{pf7^l&3jA=OF z*vOuZdrD=3ub~SPD_xXF(8@#Ied#JoN0m00Mey6!o3s)DMYp-vvf;oAj<@WV)c2i$ zTpZPu-dXS)=yz&64s;taJ|wLY7MVDg_GH)1XZbS=issOTXNgA8e~f1J5@V~zI;g}d zVi0Bn06x%g08k_}eBCUY!3{;PZlz1G5z8O=9;6ZGI#2-&n-NnCkV=^JR!f1Vf65@# zpS1&&8U0`p4kz(d6`*>nr2y4GWq|6>mIZWsO0V2zNU_-+LB(%PSn**yV7Jcc)@?$n z)@Ug}wJ#Z%+9L^Mf0M{;Az>B1Z`HR>g+mQO zKW}hXn9>mDPHDbymC0d=&@%ZaAPVgUqe&P2XxUaM=1f_Ztt1Jqdtr+Ic8ga%E@9)< zKv7rOjyEc4Q-!dP9~i%q6f3_9912hPd^X#sQ`o$0V0e2 zenLh4%Gnp6e}tt^SSBi)i2UcDH(bvuJO3bM=YM^&v0Js@-BIjR<;0S)j*3>&_QCkd zmd3jBhsC&DkE=Sg(T!mcN*CP&6$nKkuCm!>LPj6X;*V@RcC~b~-bi~KC$8bq&anaK zR(J+ML=uKC06b;&lY0{hN0{eHJY%XW@XFL4v)imUGWe0@V%ZURW*LV~4_{FBNS&-B9deiIkg`xC z@;uBcx(x5oWqKWr4oDjQi`Y9Y6o=Z*ZPLLhe{G8-%>HgS0A`yQhFmC9E|Qd$D8rZi;)82Z*I#MAyoRhT!v{V ze-}eE74EHdO$WtTmL!o4JK#Kt|3&zeOgG|nEFcm+9c*v{dQ)s#pKzb-)DQDPRw18( zHTIv2G<&X$f@~^SVqX(7rud6I0@|+@4kLy3OFdh<*rcyJLmrvUvupJmJi|rahpS@!=VdEwtImVGJ@-pRI4(AmSV?3YdcQ8oV@ zfp5pZq1FHHwpaxx%e2+hX!hHp;!A#tAY^NwM~QA1Z$DisFqha}ayLBqGW?Ewe;Jn9 zvIVs)t$X`UyxQGc_$ydO$qlZvqK^_sSJzlqcMsdQ_1_(<(wPaX)^_j?V>`vv=>A7D zC*`j|Pl@e7O@CZ{u4>WZEloShoir-lTTK+r0ZZ%iE4wyq2^Bq8`*ajNwj*x$>)El4 zV~YZ5OD~b~OsX73EO@P#1lzT@e+8VCzpWMFECU(NCFCy7B_+wyj2gFL&#s^^0IEfg za9I%!^fiQGS%lafT*xOlxZEpx4Df2PWVp?I24vZtY{(}#+1x9#4Df1^Ww`EqR%B_8 zKIBszeLfSq7=SJD#oUKJ1H!D%M&$0!M)!&=9k^Ol=`KtHQA;Rsl*?)ff35$Wxz4uU zwknf3xXJs(?t$|OjyKINBTM+7l$&;ZR`rG?&{&DI#+@0~wKj_8~sdFIiY$U={J#G8=KW%scvJt)( zu?zS)inm4BCF~Q-jw2ID?O&3FE;8{;p3j}K>*O(9pRC~V= z2p@bNnaQb0Ch;iUo$w>}0e|{4;}CoarCCYD)UIr>grKYlWmrnW$BUJ@O1-5}#xKe; zKkB2xawQ*%Jc^rnjtpG4T+xgP)I4laMmLrk9LcCoNNiN>Z1!wBy)5r)7OlBHN-w|2 z-ZmkT`x;U`K)%I$+S)I3Q`fNJa$M-FL?>-4;~1##Ja5l=q2MsES0|E^gnIavn*xtVi+laB9);R%FZn zN4#K3@P+CJRkkGgFL)kp;C=qf?r7`T$?Fa(h5gkL_qT9SOI9yd0WZxC5I=;F{#Wck z$1%6ykGbnnxPMm6p;W4{4T&VTrc(i!D!IWcR&0#E_%bpa3@Jb{k3ZzJyss;G`{nM| z!O7OkmnXj*?7w}p_xcwp(Usn`J@G%OCq4n$U(BRSPiKWthtxrcU&-of0^*nW&iE-S z)OO18HzJeJ(~V+7s+(y#4dy8k3!Q2LI(xSsOs8zM(|<1{uNyFxWcGLl(F6Ck!S~uj+SnvLO^7eDv=T) zh4(-E#-cPdz+{T0ZAI|Sm)=wcJm!{SK;0kzu=RS!vYkpV+HR&l-{WT5gv~^BbbM1= zN!X3T+<#PoL2PAmEdx+RVYrbsrNr_oQm!w9VAR{&4KHFpDW?O!VokM{lvQhxKq?)~ z!)^p+M!eWt*4fI#`VA~wrj|>L0tf1QOHwjR-Z9F-Su}icg@%ugn6^~z#ah|jDKdt@x;3+Ij2-&eRE@DWB##toW*nP z=_M}-tPP=+{R&+8n3v!v+Ckns;c>x~&>lT{;42)+YEE<$j)H77fgOk0@#;~75oRob znB!FFSV@D9mF~8R7Tt_8<%6s~$1#oiHimuq9f^u-hi$x+HpZDLpfv>G^!GB z?d%hC>tO{k%1WLO?ic$|_R6~$dj{;WG0<1)Ul~}xzT&1(LMQ2LMp8|f0+wENBO*&>UEo0Vmob;dbDJDn&TFbjm0?Q zhG{NZbhZ$kEzD^?-#^&iJ$b$-Cx6m7;nEk{)XkvH^5jP?;2nuEM-7vowCHRiI-8i2 zKm5n*?H338ulL^`o*e8R?)~>}S+kZ$x2N0=qs?lQV`V1}M)>6y|I30rbhlR%w%D`|CHH9~Q z7K9C(eS#V7@v)R}d8fp%N$7sC>sNmMUgn4Ur!@i_SoQ`z%Xv6eg#nxLB`h)-8`0Ni z6dn?dS(hP6MG@Gtl#x_c-Aaf?TXsUoDGwFqDKE;JT<}b258>RLntuv}v~JjAjAqL? zZt<1H)m$W{`&8|ev80tsDcjON#BP86*zLRQR&k_k`>9Q}6wyy!u{SJfAJ!_O7vZ%8l8$=b50C?@w4u!_Wf--L*8r&)a# ziD5Y)?k+X9BGxK}HVG770FE5ETr{ zuRJ}Buroz2Cl-x~wK=8cueRpl?JerlkQN0kjpMCoW`CJSS+TPlGSEZi9aBrJK1O`Z z!zjAffREJXuWg4^27%Zh{S1*H0gnWEv-kRSDF}o=Y#oT17xL?;GCa@GD1d%uwi?K= zpse1=L41Xx%qy1lg zdAZBi=Hy`iH?eM|7pt$E?9uTRtnC#R9Uo_q2is zyU!1H4_}<@Y#nVK?jDKtGak2&zk#rn#$$)F(0`kR6W}*NM5do(x!Ea@<5V8jc|s=G z;wzt56VlImWZxX@p1j!I+OZy6{pFHJx7GE07^6k?b1b{K!}t(YH*LyZfAy`NuH&#`ZRW*3tnxLUsaa@tE(U#6(`Tg{TlNc?z zjeovOVx!<56C3?_k6gZ%DCe$A`$ZG#+-Z5gLXw@}o|EkSWRi$zi8I}p!$ms4x9U!D zguhP`@pUu9+-YNdxok1PXU-P$r(8Ea+(m_6UUS2N6|ASyYPw;TyKZ#vsM=d<8`--w z{ZzD8Yq8a|;3cJ(Q`{;s9jdz0_0qh(9eWrpJCC#8<_SXK_X`0DF|tlvnX0g)>2>hodB( zPPx&PHpu&JoyW6AMYZOYo@qbZeM;vbzoUP*`-sg|e#d^cE6z}XmO)nk-m?@;Zhz?w zPg<6Z_(T(_7A>Ue^8B)sat|ADC7a!uR-}v-W=Y!sLWJ>6=VsPFmn`nmzrxu1!Z#qg zb9yZ8M1S@4Sg?FwD>qiSbaF_`sxXe!7X`ATyJr(r8KG|?o8Yo*bHAwsV>6YY1^EX1 z<_nwF-A{)S|M(w%I+7(b$EnMsD}Ua7mSpBLI8%V?QW}mR+PI$%R?^0BF!>4k&map% zxk+yYV^-VWWtMi#%DzMB_6xcBvy7H3p3gzeD)wvexlnTy&rzR?m}#1oXsqC5C9r{C zXlOb7)6WIJu9a>z3;h#yE>mqTrgeec+IFuaH_xs9HaDNqJ*a(DjV6JJ5`Uaax|1yN znZ4xa9h^6y4rone1rNcwQD)~e((Eaa`}gPwqs`2}R|gkk?*2VHu4q~Yt}i$XlGO2L zw83xTIGgyJKYO~TmRD^E2f3-zL?>Qa%$guhi8LbrFaikcl87jATBU%wI|jq4T`nEp zwVdig(jP5@kzE58FXn*%SAQf6fbzUaV$?C+XF)zK>5(AdUtcwH=};gG6gANTc9@NjhuTK1(^J_<*`I#i6twK`_ZqQ2Uw@n((*HLi)-~!E zmBZMV4_E&^lfqBBV;^Fuzgqq47RcvhS`Vczxb+wE?J|+jMW1;)C2%oJvpA#xETRaC z&kch}L&!=ix!!GcaaDx_+adp2w^%FKZdy03z2)xS!7{fVOSZh!#m8-F#kxsrS~(uD z%_Q2!xmBV-zeJb&NPk?aUl80c61m-OCU*z>Q@$-leSZhPynhm+H_h{e5NTMIB&i$U z%~8fV$L`j7fH*hBaQ6WB_BOWp&4lP9qXAOH&P*1wv-ONh1^40@6Xnkjc6a}KS0*y# z{xJGe$1Td#7!xu)VSfBMcfD#{{rDF|fcA}whBkF^e*6p2c~WxaMZp9fVJG3ILP*83}E`1u( zxk-3gwA-VncxU&Db`~UMAf7!eqh0_|j=gZbl@Ln%@N!l3Zg_!zeIgQ}yQPp<9{S#c zPNV$A-j28%1>%%PD%uc!i#Kw+*z5RCLHcniexudB;S(ON>(F&q)R! zNjIXreZM(PQsTAs`AA%gei(jD!xWP$7kv8*xxMH)yAdgo5-^^Q<kE1@@Ik}a?#iO0NVU~lw12`{4}XrBThs6&+CM+1qxqZPd$Ta&7U&;0 zJS#aA7G;$=g=dU5ISxp7)u5B&2(^&ZNFjLAdIxgaf7zAl5^7YOY{K`n8;kS6X6 zgnxG8ObG;J*6$UD76O9`1>W=b1wa#fk>9r=sTDI4+L#g4MM0)RI1r4`G1is)RuuXE z_$Za0=+CZ2ZhZKZe+1XQ+BZc>I26uH4EV`OtiMFu zfPGo3D53d@T&+6VCGL=x;V_XA4pUW!L4R3Rw<#uOqkT+Fv|LO~v{Xz?eT+)f5Tnwz z^n{8V&&EH{E19GFfW#m`kg*wTW+@v{mnO<6DN)yyH*=S%H}SI2oyn=)dTGJRx z!qAsQNr+)y=Eb~ThVm#JtZb-c2I++?JtCfXBI;Bjaz&Aa;t0}ROP6}haabL#WPiZR zNrB`iMClRV96s&}4vrt;Ut8(O5A#MWml9{WCFtUadm1C>D^tea%qWu`765~SjDwK+ zu?K_rb&Ew|gGoVI(2TG;QFfD*2s^St_7YH{!d08LI%Y#MJi>@IIXXYtN7_KoF!tkj z8^`?&8}*nbwHL)%cn+~?xp1;(z1yo2nrVme zP;TH9D!L|xVUCIcfo}aF=AIK9dJi_KHx3iR$|z?7ilIZ9KgV}~`*L!{&a12-nT46U ze2GU?{uB`dVyi7l7Ox9KNkQTS3PaN6ou^9&G^h7>+aM4xspjL0WAO8Ha@Rs}A-Q2T3 zztaBBdIW2)*-Sl}5XXxAPyuvjQW>7}gj zVZOln)}^O~>;gQ5x00-`riG$L$$!EAQWUy$C1HZEf+)BkNksyTQGcP7eZzIkwB<%W ze7Z5DSHgS>5p|(QfpY0)p<8$oo@d>((b=_Tv2Q91(r4{TC?9AO6Uy$onN#^Kf;i1_ znC(YUff;0k`zW$ZzEG8A(yWu0r}kAmhGXov!>cq!9oFShq_3BY#lw5tQ&TlP2)-peXOm{+f#!&1)yFRC?A27egEAaH+t9+K%;#cwi9{MyDZgEKN!zetCv4;f47I|OiCPB!v9W{E_ei_Mve zE?JFd2tB%rlMgbfh}XG}7qkb+SqcdWr_)ZDb*?7iXu{iM*B!idNr(5;iDg%dl=R+5 z9sIwe31z4{l4amy^Boi>`OfPg3X7j?biZ@c zQAg$PDZZ05gJ|9FI(a8Q7W4T2PV<0BFL*qKwf!r({@ha& z>VH+xp8=)F5sJ?c<2H^nP%s6b0MD%_7w&%ETjRS2VgE5Ne89t?iX}q9xNwBp1HdJ&y zrE9r3N$WuwEC86-Vy8qZ34aNAtrTV4Fc*eL6!svE1~&n?(QG48^C|N2 z=RtTe$^0cKiuXrApMqfl%3_j_nLrmTO+ba}fOUf#ME;>H!@G@R*IS_jteDvz>3^f3 z9HyyIL~|NNuqMz#AX~u3Qw|Lq0`+q=@SRR~Oen7pv6^Aj;iukl*{Og&u7U{Z^K;^L!t>4*=}dx4q74hDf>Ya+b&gG-LzOnmbJJO+2cG|#K@chJ zRFHO@Q^-jSJCdETBr!hFf`Te&(|`3l@7@FTz<%F8-(X24i?ta`)4L2=jpUEf}>oTuu{4E3kO3^e~nluXr8Gi}}nN2Xj zJ;Dy*e}&#zOsS|m?&0wC$r=4Hq#vF=Jq2g^k)#i!2^oDji$AK(oz?&I@%uk*ZuT8) z3oT|r@}WdPRyL&u`6Z#;oS-K$ID!w>Lf7kJZmjV3mOfewA=_$+%!aC*1pGPOF9iJB z!d@1?jIT(t9e@-}Uv1!H7k}v#Xl0|}cTd6&O4$SMo{YeDB*^RF%uKJ@Bn;M>|Kz}d z1ZU3ECy&FY-+_~0F~3(3;vELlZ+o7zaoC~%Ti^V7{t^GU%aqwI?qxQD1jStMjw zdcrPqpK($SWyafla~Vt*#CPx?r*Bn|hwkvd!tRE*;f2x;9B19YgVUc;?g9)MuKR9! z?7FVc-hjb_y$SIR-3^FzF)vVv$4NbUL+LUFq?vtD_1r*xLzAk7uzg0C#rpW$Tcn^z zE=h9DLLRG|r{%0Yp-#MqE z&H5EVQ63oleoOojdSzD=vN?%H;Z#yGXxv1{&Vvu+#eX%Z3&ZGxE@t3lWd9$?`b4yI zxB$Z8qJU0}F3Rg^Dh`5y-2|AZ3jD-W;G=c{*b_M*BrhHszx}X39sD<;clwm+v&ZTe zZmmcki#>ub&*Rb>H{I zpYB>0|9^bn^ZxJfe+GY84QBH`ZT$bdU;97De`K$U7yP+9d|U`2rP|C3DmW~pq(K)Y z=u9YW2LW>NZsQn_-IT6Gz_v#?QaJqr`*8{T$soqqPzW5A#tzt6sC-V!Di)d3TBvjQ@ z!B4tq)h%Ky!M}V)l-# zts&=L*!1baKzCtKTUU}N1xtvZv^W8=vab&Z)_UYXNvO1yd)HHYSj^|_>2U{E zQute|h~l(6?9)eGu4)5yU*OV*xGqz^E@G9Zxd*+{Yj+top@K>HR#?c*jg3FbYo6Zn ze<;{UKG|)q9sM0onw}t>u;MH6=bjT2%l0k4u2i` zpFcRhRf%fg@|hGxgm#9(C(Xc2J4m632WU5c4yF=SKL{g2x|{+17vk>YCqIY@#ZUfB z|4hT_B}9pd>FFF4hi6@=z9BicQ>cUE{11+pDnyMyn&@ckgNdf!xx(0K*6696t7VF? z9>@TF@u`B5sb;3@U^K;29e0{D{(mD)ReXTM>ltO8|BWa^6;()Lism%^Tw9ozGUZEq z6(p=Cmm`Z8>Z{A4ah|d($@UIbyrceDhc)e-UEse?Cy8OnMFTtt$W5VIFp96(=1?Ef zg&a5=+LPep0M5VMLA1#_+ccf;$xLjZ4sM;kfEIsoz;Qdl-+W^gEXDiu=6`!He|+JA zVW&q~k6G8vJsJC3x#hZd5ouf{C++R6T^(PvV7v)ra1p~u9#LslW=S07uFi@)vl>fM zmCRP>ORye|C_Cd6kU5<$2m;~e&y+bH6Do_2={^FhAM-dlr!yhwp90pwMM~UCrlz8> zjl@5%Yg3HPzmpFH{DoA|VSipcjl8we3Ai|c0$4tH7SnwjME^F+&*$^73+i_P6+hkr zcgv(Lu_s84EMa=-LE4lc3%YRs*j^S1l!Y&1;o8!Jq2OzgnRqNBRutE=DY+z5u)t$6 zE4n>SPT;eb@YtbuQ~3+X4VkyNY4sw&x5yDNLQPX8Ta4Fq?23}cc7CFE(;Z;7SWhh^9oaX_gyhb z7rk)l;_r<=KD*uZ1(WH80~N?FtO0NiI;`Dpcze6yt`$5D&@tNC zQ|NIR_fAg0#u&^~G9F?&4~;cO5AJm=jIz$^OLb&(3Ce18mVeIsk8Vc!so$y#@{ztD ze?kwo4|B22a!*RUch=!3R0VZ7*Cc%%YrY%*pzNaWypHK`0l0%*UL3_)FijOcu!w+1 zK_4_9c#Pu#>CyHOxkvwb7adDSa@8Z8Rb`|1R>BI?$ZLXGkgzu)%UfD8TN1S5EVRmS z1Av@yRvB)5ynm=*xPhJ`!#%2ExUt2OW-IuHOQqbIH-@B#>FeNicP(}?JS={~(hJ0c zS3x%E1!pNGTHZt&*0C|T?6SYcE^Op9?^200>*6OUy}(B!H+P}FGHx?$@&d>jcVQPV z`zhTE>rUP8%&+7=VAEM^bb z{zPm)(|_EFA25D5jH3^BJ<`!XTS2_;9rS?vyW`$w7K-gINli;6Oeu1eS~JOCe3AY= znPda;-zs(b{UP5MYtOG>i&YCdgVjb>N7bKZg-vG3L~^|4 zSs0D+vFwGmj>F~B%t2$3^wMZ}!Sg^dV~y7GCAwf5?Zr#@Ml`^$3e1?G6mJ;R7=lx3 z#eW~?snUeVYOd_TfM5@bl}u*NGa{#X(j#bDk-<*2LFM2{R?1H&dl1=e)OF6FgRb*S z@ko^9D6PBNRCzAim#gOT501fOReIS)A zDKcwGj;?|2z|K?o=$PZ4QpNcSQOWn`&2xZ^CCa?xE74<{O7d#8A&Fc}0Ttq8g`X*Y*X9@f-#Z;DU4 znYXeb?$&T%|AObsglI#&C+NpL)_(?*u|rzF$Vf6XP?F3*0;akxuB2ZY2`n%qSQ;zd z20Sh1PMG3ZLreX0xmC4{G^?v=e`O4N7MtGQ7Jt*_pr=SC=HNLeic=?dl9sOH_BMc$ z%#;s|$021($ByfF7vQjFrebR9YI=J+m7BEaja~^VybdHLU97J1-WOtW?0;|k=k^u> z;N>IKLn|v@D-S*JKv?9;5l~UiS#Nd%O6gcz?|Y0KW?!j`j6C_Igmz{t2tGwhLw_P^0A!7bBV0-K7-qxFUqs&a z;09b|$COj>ofMMsj2thW#8=x>dV4%uWLX^TFS0Zo6HFCP<)!Hu%YWvnS@>AtTza6k zShzQBc}e+K77qS0xQ-W@??9S=$3vojMDHEnf$39WCrhr;>r|4Z+gpumX6yGd9)0LS zJ~1XXKn{eJ>Sj;`AQb8O;Z0Y|`@{JFAql~m+?GY=Rj$ZR13eU$FhD)^;p1xdp#>FH zxeDyklRYYzE_;>p>VNhE^qyF}fm~Q3pACyY<=Pr)IYl?-YTe#$f&i@Im*IVzATKg6 z@lF!~>ZCWKZA`{!LrIYrmp`EdNBtrm#`KGG9e}rcJLrML?AaHx64nv;edBXh|0PJ( zt;vi3V9pHKf$KB6O|ephh5)%Oc`nEcEp;y$vuvQ{Gg) z3IH9?k`1bu7@R6O8Q{4t2JM^Ed$1mg#T@ejHiPgM8@3ytx0TLhmsPl?i-t6yuN{9W zkzjT zx5lu`>4J@>RGfg^GnY_zm6b|>Uv8`UZtc)D+W+m-=6}gxX*)kAC<54&QFx3HgFGD| zg9G*R3skB6fH@RQZJAqSWcP1oYDlJ@uQ83*p(qRn_ zFl~`k?|-TtsI@+8iR`e3KKk#Dy@^#c(Ue{l0tWXBrTv)cEorygMrDDCJDhMz>~Hj| zRgN=0-RnUibl5dL*7Sf%2_O|4fTt_rm3%E)U#pqx_QomR7v9-G93oh~p@s>j`txT6 z%{ixXb-EuthvaQ+P2kLfI+~rCZbaF`xp(Ffoqyc{ziZsa1KiS7=55%?a7JJ6ADsy5 zs%&LGVQ@GWB|-#2)u^OxcS1r&wk%IJ+kkMm`*L@?f-pML&zgWF+rU z#u83CB@V%SPNfSt@EGIMr2>Kk6_|-bNX>RgPfo;(=CSN-$Z!j-C*fi?Mc)PrUb2oa zv43V$s;K2VD=x^K-p|^AVhDM2?hY=L=%JhUH{ISJhwl6QJp>VnWRlMy!YiZKt#<^; z2229(?YiE_0pq?A6l?%Lw}a_u0a`M~^YINuMY*hdC=x*VSzlN345V&{?b}_ZSj1|h zLfcwsgiy)`-|@jI)A_IoGSyG#(am{&%73T2U*9q8sC}h7r`+B82+mfNIbQa3lTt@H zFu?r5181AP)7dt=R0s*^3@ytCvD-h?XjxEU6SF=XS88g6LT^X(v19K8)kb+R@wR%DY>;TYJqf4d?g!U+up`DhXc+IHVLZ^0I_klBMjsr-b4;9# z?7&jT&i1tm!KHk$o-SsyAZZ@Fhkqu^9=C-KoCvrh??6LGLl**Bdkx6iYe3d{978l1 z@9kCdd3j}=msjclXIa#t|66A@Xza z1jZm^|HQlb=x@`D{7wDf`n}(yu96@aDu*Q~|7EFwQ=rGeGMtzQ9=hxCObZp!BkhyA&F7TL*OPZ4n}q~Ck4or*^)ojQ~d)KN!4 z1}eWas6%Bl3()`^;2-lO1Trc~Mr9`@N>XtCLKT8i0HW9NFI)5^DSywKnkgzce8VZ{ z>xQLyZCM(IB-qsI`R7uyaZpxpPJ7xF@!a)ZYY$$T52~i%dU{WU-o(nSGvLXOC{6d~$y3Z6Z6G z8Qdnn`$q9}eMY}n%zxH5zjs`}x!IrS@)Qq0PJ`rvtUGI)-#`9Xm=+sY?aEo861p^l z(0X?Xb@CY&8>9O>dK@@Xy-*K9r0zZq0zP(uPCi#E20LCy&=3hz_q?? zlK}qP2EXp+b$^q4b}QuIP-ZqhU~%`1IRH!WJ2+tL@^tatcYNx)sLtYt?B(Ew*BA4x z?kNgXiaqesE6&%e^n$sE`pzFaj#rq);+A4tM`&`5>#2j zTgA-vqJABAblewpEW_x+f_Hl-ukNFhs%z7>IiNxH=6`7HAA9{kuE+6Jr1kq(a=k;J z-MLRxZBkjDcgnW{QB1gTa_7#^ri-L)$9xa}s%XID$krW{mUqp7)B{cGWsQ`%=e-l;g*{9;64+$vl#(c3(c#nYt}K$N0`7= zIF8C@(toyG&aFNqzEJ$nN)^ZyOQP@|R%?n4C%(8g=H)Md2&&hIQfD+X-d|4$QW^pN8=%T_8 zs()I^*Q4}^F6Ca7#il7Qy1k`beL%0(utpjePIiNp%?4Rq_a_Z5;m8*L4oj*smqMhQ zqd5s+D!d&SJx4b!jel2N`MLd4%TpRsQNm^aK)j4rHb^|~X79q|0iplFVnBMospvQJ zN~U`*4e42Y)Lj}z;yUaavy%ECIWg67zkf&q%&B2mu5oTyI~7V64nrSYWdxULMHHq5 zLMM^}T^U1H#_E$ka`;#k--(@>0tAx z;SWCj_vhjF{$}1FwVA$reUag-QJW3NG_RLWpJdh4*dEKHZ=kM4mUgFcsxNWpU70_4T&-C9bYUPX`v?DVsml`lcW8JXfL2Wd+O? zR~qwl^1A;Ucve#3u$y=xUVp+X!R_tJRK^9W-qCy-&=M0!rK~Fm+j&j#uq8qqxE=se zum|}napo{@Zyjs`sjG%=8brz_x4zy-cdh+{lK0_nkoa%`b$B6GBZPXw(Y0{1468~A zgNM}0X5S*ypmq#M)XJvo#j3}2S?tk~58rIa`>`6!DII!cnzuxnQh(JR77s#+@tS6< zywOje5H8X7)3r6RuVB?vjEf1RYgczA!eqG$^$HrjyA(1uQ{A6+RW;Y>JVW0!6nyD) zdvry@^Xu+S5?}eD2WAW?r$;$ZD(kaQ8$a;i)54=O*8@0>WeNGRtZYIo0A*1JDKqHi zxj;L{Dwj4aGWeyaWq-YMKsIz(CfyKR4&e;j0_}EKlLMwvB))hzkeEmrUoC$qDE>EOmvqZ z7$s)P41#IPLhuL~Sb39ys0emc;}`X<;VMg$wpf}}^pt8#voP}ogS{@N_&;@vi+%A< zK0WTM2e58IGb}}uYw4$j_uPtdsTW2^$grzi+QBgJ3&%YzE?V=|lc}9So>sme563=c zNU-xeJlI&w(SMRMpvt{kPak0Koulan`k}AzCLpQbEh!=N2F&GJS4>zwviND|dC9b< zN%8%zP1dFh2Ilvy;t*RM8`Th1Cfuc6izA!^+^Y!cQq`JK^;uEQn1~B=ISnjS{hBog z=IHFEqhO9+DnLcXLhop3oITKg$8*@}0SiFEXH@h8lYhkyb0)$x=SRU=(HS4#YL$`D z7?x^PL=#f4KsAzOFD}Vzme|c=B_JDWIW!ifOsMqD{^}M^szMQ}Xw20WyuD?$K06`p zm`i(XBB)tI!HQkC;*wJJ@^H9X=;n({%8U#lL#J9n>G)2qo{zKfx^N1QfI(KwwyF)+ z%_-d_b$@(nIZkH##n$Uzb`MW>c8|C>oa9yy<0QF;GV}${I;PkhWyrO%nBElp_w!oY znx?U=NE}c~{=l!viUS#rOWH1uuf_;(c&4mkE^kirjU?|A|CKi){8r|QZJISk}oh%H#jCukm2D;g&^0KO8N7bH{$Y&$85GuEy#UBNp z=$uJzcUhre8Ln(4Y9cq8VXP3(l~{J=x)Ss-6ZEj0+~5^gi>Q<_FZmr5ichZ`Y`>&! zPk;D0N8HC*^GsF@@CxOPSVg~^p_ViA-Bmtv6`FVP}a-jJTPkhyovf>Gm+`~_y% z#(?=*=gi&K#aS!JtHpmo2JtJTmU081XT9^PyRypvqPR0X;?gUr!Jw?(w?sz?a~$^Z z2b#xy;jXQz2CNe;r$(q#-?mkFqx!ajB7e&G)9QWHH+d_|c$BdU@2Ko0Zl32=UNO2k zPUgk0RQ}r{RaKe88mY>Ro?dE1swVC*k&&vrjL%A$jaPP5i3ds7Hv8mVJL4}a;Bq_& zylSIsz@vCus2ul>c3+)ry*$|6+WE)H?%($gj|x8S6snbiCaV+U{lg12L3yS?4}Z=a zk2}GX?&$G#hkT@WG)w*hQQs*AxwAL+q1+mzb#;A979)!c8AJVH+AnT8;@MCs)B(8~ zPEu&VNPXNTWWp@$Oq4es!hd{%dX;Jik@E3qv08mg4nf6K-K`{s^ct`B^m6k`hKI0P zx!K?bn?N>~S$YBWsmf|RQvoOx7=P&MGYBPD1*Uv2%PZtOJK50sEoZ0@eE~1jQ~Vfm zmU(hw&pgRR5vWbYEtG1`NdEQ!5^t7Yhv^$C&W7xwxvVlaG=>ZGoHD7Kc_UbGrBOu6%oZPi3V-s^DQb5% z&#qzrzGC!+P5~`SWeKmyiPSgJ3YCmVoZl|5E2z%dG71YwxsA|n%`9nZyz{}0n*0Hd zH_$rnchqyN*@lRi<8KTT*eLfdN>|ajI0fg0HQl^ygwhE5Tt}fwNa6j;#i$a>dXH{q zd58Y@0wN7WR+om>nCy|VRezU3s{Xw`r30S2-pO6RPhfx04z`uc^1KJV!c_*T#+34N zr8Gp>N*bc`9`;rL8Oud#q{z2O}enVq_p zBo!8|wjzGBv6w-|RmhOoaO(S~gAH%DY-QdaZbQcP?R@_6)H^D_zkeQH!~1J^Z#BAr z7u5^QWNe9|(pTQ;u{}EvBBK1cp2c(ZCoDD3VhYkIdh}7e(f?X*6JRT+}`aPDuw8gXty zdi#LC!xN~o9s2aYeX=%)*Ah=G&@7BtUl_TCo9@!~DuP#(r-!aT(o@BW?WdUiq{&C2 zuDn~Yn9lzo&F~EsF5&Zwj zoXdv;u&uE_(FdZcm!cUHladgKA$Y#YAElbO@)H*X0DtiV-K*tCTuH#^T6Rv84c`?# z9J6l(A!96#t?>Gj+dsZsrv)X9&N`X3G_r&5`j{t^f@iU7r4`rLe64MZ9OpgKL1} zx`vCjwSQ6BKEYcQt{cj`Afxb|Etq46Z2C@laom0mZq5UUx#yXn5OBbFM8c31u?Zr= z0X|~Mie(%C@4=;=@(aJZ5iVWMmb(}m2W3(=F1T3iE_Dh1a$xGgzb*Vm=Tf zsFM!eT4sZ;h^H)-RWL9HSF0aLP6(?W^nZifTX0h#SClR5-iQ-M0AfI$zjvu<2Qjm* zasR~bFxDtF+c$~|1!-DJXGZAETw#E~ngjAxTpXSPQrzwVyDQY1Lj{q$D|!e;j|TKj zSvhVVa8#0)PCcj95O+!hAG{^#tWtsFK4B$#xRK+*)h9ytkT!$}5kHU@6+E^KerHos zm>Yjil<2NJ#7bK!>5V9jnr;WFV4^u`I*b>|h=7{ARvyOFWsYYaGV{IdBOsNHAIh*u z=3-1SF<+cf>N;T-0o?*aS50*M?3zuQViq2;!V!)m;zj9khKQ2wMViGk{0Op!dMnJ5 zU8EBDltFa7+AbMnhL~3nibs^rU~U~(CUk!&p@UsIk#Wn=vs?hprt^6r&+Y)AQsw79 zp|i1j0AOxZ6=EEcPVh*HyCxP^niGF2;}!RS#Zgun5B-AF`MP~{3bfucCJJ57KPuQ_ zew;*dEzFo@?qFUX2sF7+zC&`2XNxmR`%{RhK(`LO38GwjSA)|$-+2SMusV{(aBP1d zxK{LmV;AW{{R(nLNT?)Zw9+W%ywp)Cl@A|b5F-#+N=Y+dZ}L;0D2^cT#Rqa0oLRnD ze{>V^Pw-#kvuS)q68;$*R~Rp{{fOu2DS9ZZ=Km8%k6{O!eahL3hIsVIFx_=+eHTj@Lh#?Y|7bg7!3|cmR#=;P!E0olYE&T zX7T)hq?G&HlMU(ZMK_v~cc4Y}z~$=$R@;eB6hrZe)lz(7H5H3q--e1?UEc@`D96{< z*X%o;6r1A&@Un%C8{2=C%-TFb zmBp^Du3E{UZ5D1TS2Z*Z(ftDB(qudtbeFC;2Q9dng>t&p!8R2h|Ip&MaGXut;SIBb z`Ab&>D?sqBpeujrFdGR)?z3k~C7EDgMBG$#r^MQTZIPX1GqmOAEY2vkenS_Z5?Ox( zRR*RdRml~kHMf~cG5a;%0MCCh8>XIPUV0vSL^{W~N|_6ea%_LzM0}65HX#?l zeI)GTu1Zb3s&HhvA(a5KQ57LlQXMAv5!5ZAlsDuQk52bZ63@a^Xa`vrTH{_eAyF6o zeT6$IfA<@G0o(;e-(LDGi9e9&EoDrm+i{YhzbzdJ{9ZFInW=Sr9rXG09VjGWnXGc| z3QaJ=rUM#B00?^jispZs!LzDaeYP`VWIHRf3Oyk*Ii;>0V3b|OL{|wmi_~p~TWxpW zfUA8A$a5B(nP%+qPDr`dv_+j>%SEW&`t~mKd9X-{I5+afW(Y9eIC z1LNqLhU+vQD8+wej3v6gP1mPSe-s6cYEKXaAA}j#8*9l7Dh`Vt^~jHgu<(}e9G_Lr zEg^>zgF^@)rZj6rc*y53C2z}0`E70O>E@q)-q@g+89@Yz+}`Hir(}>jRwXKMMcF?Fh2ePQzK4fz^UwU_{`Zhf{*O9EX2=gcHb;&jy)4qb<@)kIwOJ zcK$Pnz|Z2Dzd|`nCdXb!9r7_F(Kzkk1FIcD4mfZ;k#>%a^S1?M>wZhXza$w5d;SSP z^Bl(?@bP&F1?5<_gCq%q3rc^1A`YDQGJib_Vr2VNu~TqGffZ#J z;SpZMDD;1wXzuCI)F!^_hxMeTdwVee24m=VSa&(W6?|u1Q;KFD^K6*vs`g8cBzW{X z+1wBfr8)9Mb?82sYdQ|@&8;y7(hEk^EpLT#-uU*ms7cPdDf^I{!8gs)XwipP9=fWQ z{7Gdo`I9eHO@2;yIvF!lE$KMLsE(y(U~Mt^PM3dt44^cz-!bW6XVAIn7~j%X$%1&D zVnn|p$wMc1zjJd&6pknZH6>h;yHX%pqD>qd`9RxEZ4nnj4K+#;C`3Vqn89XRT>#qa0o2P$zpP}>W&2o za)y83$#@c&1DAzZa!hul%#Ev0-;5nom}{PfhhrJW1WY?#;XlY$fG;T&N5m?@k#yYG zcf8uz-XxRrQmY7yn@qVGEW`KY+kLubv{NGP(u!te|LhZw67$WIx%TlL!WJt6y~^kH}5O3{s7STmpLAhJ&{UFZm1R0!V*% zBdG79*{;VNoAjvlCJ8wogy6?c3KM^NS81X^BE8)&!!$e#r(t$Ia3B#zmtEVYz5uQfZCeFjiPfI_E18Y;ushtJSUm0< zFaPQ$MX>M7Ai7vkMtGUFP^xy&I6CM|ebbW$+Lf)(tUq>D{X%VoY4}H z@Si=bkR?8GtNH#C#g+%}JLfx}S3XB;qDH4r)HvQ>_+k~Yn9=I0ZUlx{pr}--yd)lM zc;Q+NNT&`M{hUXpXp^7%!enW_5WZVglE_I*3IC)?#9yh}lsidqaRGk_G)dLU1p{bX zlb!TpMjU440Hj#jNJ?0?K1_e)SGQCom-0)wT%aSD>tbyw97v2?Slwx8tHpHDc}=5J z*X{i?ma1>LknUQQ6zWsgAi(Gs;F*T#c+qQgJl;c90`r0@LPn`U^`=hVm)# zYQD;??F)AjibWeGU@13w!g)sBH~QI=sGk){Fm2zlsB*V2@?e63>Ro@)Ow$7#t6Hqe zM#GSK$#4rrFg_p`iz(&^5wig|XghTfBY;x3cfz*(QJe+SwA3yC438${Es3zgvi8mD zYSl;Z8a^WEkuCic_#!K*E$w7Lau)Ao7C&NcWEQKgxx-0{9uCUsA%C}5YvaXQN=WIK zQ+O7+-N?t$bb;YQGsb`EQl5RY-z|7zW&s4w82>;jxdK)l?w$34T>HR)k?9y3g<}uT zw;!U@E%3))mRl&)r!Q((W(rl3hPwaWOKX|1FVeMw8xvay_lqxZ1?35umsUinqwpZ3 z6jc|*Rno8K7WRTckz4plP?=xYoSzHARv0ach}AOLLyBke?sk9Xka34GLk4kkmcx1; zb~7*aLN8F*E1P=5?NbTJ z@E3C)UxXe^L{`EY4}#UzfU8!v)63^zRXB?OO2~XGWgQHiful@(yq2s@*AgmBudU^> z-hlOz&TZF)OniUxH`v9vfm}W1iETFsJ^0{=bbtCI?1oD+rCdNACO}|lLIdR%vb8X` zUs0wrX_X>KG6puSj~Ca9ds`P52|>x4jtQCt)GAe<3oji&DqG;6AfYg2kqV+&K_A6= ztD*p;r(E3(i*!<0Ys&tLZg`?>c8W#1lApG-L)Z?GzBzwV7cd-zjSJXBzv9(Z?mnEX zg>>Hnl}g!u4XF@sSddb>1rp8U44?Gm?~>A3lp(=p#!KOTd1VcF8Dqf=5{*KF0UuzL zD3vx++Ng0Eloa!j49&8l`1%O{7Vs|?f1@v1E?jP;&tH)RM;k7UXT%(iuc_8fxg0z> z61ZmPHtT=jpEiGXJ==@#H-5Cg`1z*|`-{K)_ z8}P}2Y)O!=2`d+2o;UFXGRw1kosgjK8F?GApjOQ8WKYlS->{6@{*9%kxbJL18d=ck zi}Zb+)ectw_RPZTN?WM!&YR_4Ww{;SnT^8^{oj9jLe6Qc3I4tL)BGd;ak(B$!;1)O zghOr+$Ezs_Q_c??aTb}ZS0zRSJB-Rvlir&&0Mb>u1zdO>c- za|C~Y0>2-O#KbIfj){K-+SO{PRAX~>Hxmu(WPOjYZ#}F z9;HyJYbQKEC%~|V_$k}~uSm4;Zy?#gQG9=KF)j2-a6V|a04KaXV7r4O&3K6kEuSmN za#Gn~GxwPLN-@y$gphxcQbRAK+wzd&Y%3j!r_OoMIS*fg8knkd8WXVc&+U7yWyCmNna{trKSN%7+c&kVfqYr-1526q-5@Gu%o z2q@4;g!_T)8u1KFz$hhhv&>)QJ}H0O=R-Xi#0xT=^QeUL$o9$>j5jDdo1NY4p}t$x69xnxaMZ2ZYdto3Y&U4rh@~28(Xcm_XLGP*dnK-c^O%;36bgSIiDs3T zTZcy{Z{O@}9qmHp67!kU4(Jf=5bc{PpoW#8D*iGE7Nko(ltALImf*$bgO=^eu^|?~ z6z5n3W&gQ^YX7-#HxjiAVJzt-&%Au~bE0fnA-Tpw{3mCRl;pVhfcM^izTL zFrq>r1sd)Om&?A@Cu7VjHU@v0Yd!Imq0(6C5MdD+$UR4~7dswS+UcNV?0R?T8g}0L z2<}0%XM*qWio8?L8Qii}U1!=A?B-P)qtUj`%2;NK!{I4&cV^45&M0QbxTa1$BP3*V zW8)8wr>FEA2z!ogMb(g*+uQFqFcH-9H8)Qoi()$io@ox`)z*#=V>FhlXEE;^>oDpnqS)FaJRfl`S~djRezX6a4K zHAz_@OD==rGpRV&zQWuFrNnId{hQZKpr}Vs#P4w=PaBXtRW}GGloLCIqq}aWBpMvJ zRZw4jDpjBjMOEn%kJW!A&IC8yw8$0)x@N(P)@-rI=3-2Kv}F9xU7j#Od;gB{;-Bb3NAxV0>P> z`r>nk^7zICrA9kz0y)z*mU=;CRZEqaNhmgR;=m3S|O zn=XNOB?J|@K{NUkH+E{l{)q0kyy|4BRH(#Bsr-|19vV0)trDztI$G&(8z+VNqyf~< zTh7=ZQ)Mukmc>>W&AaelUfQ(GTJ(a(dZp$j6|9$x(`o2BP`gfr_Q~;r(w1u2K5AV{ z*b|L6i@t^R9h85X6f1x&RVM^;;Wa!rLmX-=8Y;V{@Wj8lS8=l6RHvxvM7od$4!0~8 z_}f44I)5eCj{9_@;6(|>UotbzhG%Qdx%`H~ATd#MRmL_Qkz=TD>Odgp|KHq|HMfx? z>G%B=RPBU^6$5ka$0di$aNDxmGwqhfR=0P@;m}YbBvpT#s?xHkt403zMJBEUkSLOp zXJTJ$u?k2Wg(J@|jSc3AQ5gY1lr;@sxk&2>3L}ag5hexmbRlPv>WGQ?u!i7Jso;I_ zOx&u`O<7N^Gf3QQ)b-GL*}7;Ym|Fe~WC7&g)M`rjH<*4Aj?qK#>N_{wLfcc)OixXS zjEkA~5S?5qd5v(KmCW% zXK9!wH8(No*5sb~xNs}e1RIVxsb#8x^S^b>(OG}^3gK}8wj4tOytPZ~p0u%^$XS69 zUk?$+6g}DT<8zw?PFRHP)M!w6jl*8m$3y!|JJqi8eTIYG6jqH&4mdTQSM^!*{A|%& zK3_IIuV5Dtg+-V~PKoWgXJlK4UtNGTUq>BIZT4~)&8O=3L|L643~3e2LJQQu7zkbx z8)<*og09w4vsIm=Mg#qjvv*@XT3Dm~(At)9NbBiro-lL1tcF2`MGaEH#-?3KS5K!D z+p3~2iajPZRezneA|ex9t~yvBOhOxs8(}R{?q6>QAv^vuWjNi2_cRSgp@I!HyweQiAz8Mwa zs=m5j>b7e83^z0^3L_k7LippTdF=>Fn#%n<^yw2~RTVl*adgbNUhTFAoRIInANc4! z_45(BhWkv&(~du_nS--{IOrvwNHOU!*UvR`#j(eA0#jZLz~}6FbQmjsH(Gy4Z{gim z%c!#ndq}1YfZqA(^xXlOHt@5V%%?Tru9CC?n>q54jpTNc-Pb5_8y}1j<(;VzHvUsT zZ%Uxb-YH;pWUK=^0YeNGhVTN(a&S^#PH-^(+Kg7L3CXPEl|V>mgosYsgv>f#15YGP z$gH`q|FlVoD6N^ZyhGMT3SNK6{gWcl#pXWb)V-bkpA?QU>G`7rJeToxF=XFo)x^8C z1@$|c(mOPxs_y>iNmJ^$>SzfMvy6Uw$A*AFM@x9Dt+UEL>zw7I%u+ROtJZNACD=|KsuDt9Sd>Ys%~Vcc4NmADn+}S@Ym6t+qqQ zb$8c@fiEq_Kr#uE_yxLA2L6HWX=3i6bvc(pGfrte{D^~JG$K=kwv8<+G0y_A^zICt zeRo2EN+%S6yi5a$fgSqqGatD{en5`fdT@CS;R|yDu}X@J$ltWE00C$*Rnve-I_8Iu zD`tvR03*YZ&cy!Vi?-u0q#^QLwKAk6m&T@dz}ob5ejM16fDrBy zRf|h;CeFo;I2NzPy|@)8;*;1HN8*lzhgLHax$v>MMbIA`*WpceRcqoG-g^`-`W94` znO8r7K>*%kT5a>tA17=r8?7a0A7zVa6A0R1YwbB)Rc#}+$YOu)u@}@VmOpQVM92?s zT~pP88Ifsn8k132r;oONRz+zdc1`xIk&F|AVtL3lTu?yh!ztXd&RuJNemSPGhQW(% z60F9R;$E;_7n~+6res^_Tr(bLl(-SW%(@yOn#UUm7^_UALI8T=4twhdqF6{0DABLL z+Hb8k2jjiHe&m08bG#YqeM4+hX>-sS)1jLU3UNr?eh9W|wo>fY1Ln%xI%`mma!FJ4 z*5po&az-<7aWTLmlMo|Do+mA)rDLpk7|b~+pR@GSR7$qNi*bx?p80?T;XKKCLi%$t zxfs&qCuXU9LyP>}L_(ZQPrs>k|H~2?)OZfA(m7xsSeu>}t}jFMMO`!b~+m!)Jc zCznX}O~pB6SfXbs(V!rucs4mhiXRL`wINM3W=!=wrJ59`l+P#UNcp1bXShF;RSTeP z0TSHIrfcwqS$k1g+TP9N2HX3^v=Wk5K?kD%y&L8rhH#;p|bFf@U3_6W_cFUc$K~dT}$ajrEqFnECrajlzN!nIY zn6?IKr=hj?RsTD!2XidG!Nva*KZsZO@<;PB-im*MtMU=6{JMRW>^^;uls@lHDfnbr z@*gy^uf%vIqBZ5PL7YW< zdA!Rcv)dp)4H9IQ2%}zX;45~ayq^&HzT~4XQt&M9BPhS6Yqnt4@gr!yj(OOko40+` zOoXJ9195lC?;`oA;6RVS-NqJ#tO z4PmT?RDWc+Nkj3~RRt*3h>vCNiW+Z)-E){G%D}irQUKj+(`qi4SgKx>9Xe#=C8$l8 zuj8tqJ?&@6md+Deb!Z1~TZ@gG_qcyG4z;n*?U%1Oblajc#s$cI9AdAi$FW&1r(q)& zxlJn4m^YB+&|sPvXe>Ai5fxLf4LNFX}jf; zS=Th(5?#U;kj5`JiVpR;DmzmVXT!&XsJ^`=o2Qi!19fKg@udN>h&(BjcN)r#v z*X}oE$rxT58~tGJ{mi#Y3fOI{8Rlxr^u)P}V(1u} z8Fv?bK^*ybhxmM_PEW2>e1yM%j6fz}A+@b0sjrzbIvj?p?9*R!W?N}mjcm4QlTiVa zrCT!`$pXM7B^SDmDWiD+%kw8y{2MID7=7a!Op!HWBEE~5mpC&?cWi%R!1}zOtyXBK zeOZkDpr&$w4fH)|7eum>(#SC*_e}@Xm0P-YR1&N9w(vvFUdJ<`h|e{u8-?3 zXOlI7HMk%*u}RWS27a+xT`)6tMJjo5npV78t*)4gm*cETid28TT&*tCU2bWdBE7tDmVFxH|lR&rC<6U9(Qmz$E($`s{;qndztk|30|d+ zG-Y4{@j`3)un8j~ty1#OzsRq6@sIe|V?C_(MofxCsx0~EuDwkZL*BDYpM^bVgdWrP zthWxxdgeaOT*H6sNY~)AmTtN^wZodbKZ6^*?^&t%F4yqAADdg|o_Fv5Yy844w>%9k zT4u@U*NRd}^2lVc6FxN8t^9l;<^0p>qM6Ult!?@Btt*Uu7RkghOp4w3jMwNt79^%5 z426sD-0XyvY7sJf?h)Bw6B?XbA>Y~~ypNi3oc%r1LyCVs)Zu;9Oq#&^NaW-bhHGJ3 zW&Hyvq~;HL4%FZ=!*xBKA2#jsP|M)2r}H^X68F9K7~e^qvOH%DaALMch{ZjLFQ_T!& zi?(OMoD6^7Hx6?n592ijkMwQpcg^fON z-*0W>D?S=7ipXwxCr_NO+v$~ErW&jNsBzhWjlYwAo>jXtiYd?wzM9Q6T9vL&vU}Xs zIa)iCD!Fg2HkeUIjyqckYhkL+x!kH|EO}WcU?+b_N5{L@?r$+*!U)dNi|h(hAq4w* zW;g6?pmtOpZYqCkIJFH$C1sx3CM+?#k{ydkmNNXbsqO4q6g!NR`3`QwFhn!p91#nf z`9=_T=kf>a6K#mOCh6-Ro93J4-a@j+38t&tgPnfyHucnryX8*DktCQqudnU*y$)C& zdLDnDPELoWPFbFOWmNYI|*U2}xfdCwzN-1-U}xtal<$r$A82LDjPD zLE@RYysMV?1C0*5$2r35QODW3JIWYg?EP$8n6b|Q6^0XtgND(=FZRF_@@CKxmmkre8+&=B_x69DPNA9$62z&cq$&Y;6UHN}#Y7Y)k-~*lXPnvn zb_Qc{`Hns`Gda)bSX77R{j-wMvE(-Ojjep+F9t3dq?^__4SjoGpK2Ev)4!s$BEa6u zQA#KgxSrM;=5Y^57BG4_?jX7a5fACM3mwcAf6_E_IVGv$m!-)sw;Ux>=xTojQmtB# z5&NCej&Ju$2Xht;s&7bZ$>p$#(o%C!iyQePrhHEx9MrC^-j{}br?=US+Atb5SY*8j z{3Xq9HufYnshlq4>9>>S&W6%;B-B=?hwH78<{;laeSC-vBb>4Ocj}&Yw=AVCa+#bPItd%8Nm(Ix;=_W8-pM}Os5W&jTh0J zPnK29s$x502mL8cVg>tqFIj%QBLs0%J0AzSrE=&aAd_$f(o9i}pt_ZI44OAv4_3&XWs&V9j zB`dKM(t*`i<^tAAVYRLl>kvhiL-O44$vCOyj#Xl0@QVgH&g6flhpcMc(JD#JBzHS` zH@I@JiP%N%%{Ws*>@fqca?A+jNU^D?DnKyAQ{+Gwx?=iYFgI{crs|*qxu@5=*eb|! zOlgw*2wlhd$t9&N&KK+ zLXvSnGJ%f@*O7ny|4aRq;+B|4i5OKY8L}s`pN%+T}j!i|+ zdiAPPa;Xr|5ubG|;E3Y28OnRfY|Bn~z*5ea69DXMcwdGn$?~<|$nCc>6fQ6NW4i zMZnE}u9JV04l^Z@9x3OyC8*|1-*@hysXIyB)q~EVm%8m*T*`FJl-XYIz|JSVoYGsZ z@4X?DJFsOOB7GVx_=L!(w81wWG*(rR_z`#+Zmn-6Sq3Q=s#>FP$@ngTb^w`sx=>@U zmdKkHrH6_3`4@6Z;7T1+Qr!~|oFIEhZVC@(t`2=*&eFW&t zoJ_EVQz>id6|!&Sa$3!`caU3qyI6Y2GEC*Lg`!f%f|Pq~{sKh2{psn2q66vXbub2~ z372r=Nu$-&^J_l;LJ3!mFkJf3b>ZeMq6DVXw*Do8a3pMQ?5wKxQ401!WSd@7k#Qccm#TNo?B&zI@8Bo zrBO;9&lru-85)&C4pXgQy$xL)C4_&aC7&jlT(S2O`6GCz)>J#tFqW&;j6l{h`he-+ zDjpPS z`XS$DbG__q!BU4i?1`h1yf^z0e^<#KV&J5#>PPW68}-Fs{V z2AM=YQV(YF#mI-fsgI~Scv-b_vK%ZGkKYH3^o2bU%;{&wAiW-IDx_$|T%D9^a+h#> zVYQ|yZhsrJNzqJ^DjXFM<$W0W`7JfuVofDZ%169)_* z)CvD9q;zP9*){~M*5M63n%CYM$(teZ#@54djjNRmsm~IPbP#6b#i=b^IwC6y3k?0j zYkXYUAoCjMoUYs3he&@Z=;i0>0{on{GCIl7C5iTA2_`72fj6lmV^aO<&zdty9p%Cm z82J{l#|ZD5>U~60uT{AtQpE8FT$!+$h19qaLMFb#88@WX;= zx6|+By+}|(Ivl>@mCm@%s`GJ+-NcxOIZbUCJJ(6EEOQZ5gkyi&KDaEj`|hsIVj@IC zX+wRH!?>rgNc3_+=X5#iXWaYKL6*V>lN!0!hmA$-Vy^RqZR8nZ3U})m;!$up?j@Nq zong#_?Ek4MyRrT!+k$IElnuY-qDp0gR0jEL>=6~8cg*S{ELap@9>)UdQXD1!b}*Cb zSRQTQ3FT__63l<4>n^M*kCd`=yp()YWR!ed4AgN)s_@B9R>QrQ4q7LvqSbm~d5KDm zN8?#VtaP~r##HE-D8Zv4M3EFfn4kO>tRm>hYF z!^Sg4M&U=!P00m$<<85{`K7;fJ}az_#=X@xC!2UTTU39)S1W9t<8<`o>m9+w9~cae))Hi$IO87EA(e_K5g> zhSTC9>0@vpBjFkSli_z$mto@gutC(@>*P;@y+~(GZSAAF-vti63j%hhpT2K)kfiqB z#$P|5XGt+1Aj0Si-Qxhif)JAwO)|A)m=s(DDj0vOj`AgKqB-AZibbs(T?PiH#3ZXs^ZJ{(}Vep#ro?5a7PiRwkUrYguPf*_o{81(+U*I8W@PMupL27ai`e) z^<+Y3CFH zd@lj$>!LbS_gxaPM`QyDB4u79871swy!KO#gPT{vWW^t1V!y-i#TM$BWgaRlL}q`* zzMsFZ&zg9tQD+ukip70nJ)S}3UN}Qp+FLSMO#bI8F^Y~p5BUkDOZ17}+(yi`hA7TE z=#aKiA&oYwPrz`#S-)v9u0=JnK32QiWc5ZD4P)5d9>F&sPaT`cwR1*JXxZ9~(`^+} z%c^n9ohSAQcEFnyh+VLuob>Gw0R$eOV2&SGLY?rgL()_xN0 z;=$$gO3^%O(3&MNFUT6mw{94Zs<}2{7(Jsi`f}GxgNF6rFQI*R2n|5!D*57 zH0lJ7^mK=jM)g78@=rKxIJXvHTi_bXA`j#f?yfTj(Sws=$6eX-AapFK=|x{Ahv=52 zx1~+pXf~Bim7SYv?3B8PUI4;VTJL0>$_QW}NesVy^^VAHJwxJqB?y15|DnG8>HK=8 zZi`}|ICypXTIG%GLSgza{U&?uHK0!chExq2mc{@e>Eod1#kO8i%>vLR-C}Rrn>82! z1Nc(4y5bz>6cW9y=JTHZ4gCfJYQtX|fF{uA=<&CM-rGj8&UaHlsB$<=T6pZuNH@+Z zIS+c$_6kKFa>p*(rAB{r0+kN}X%*z*RI8Z`Nf^%HkKhZZIIO-`43CIN=Ja$tmmO)i zO5z2PQz1GbM!N7>J=3}Z__OFH&F9vjm-^8#@n^pT)?RRghETCmaIpkxi;0OuX@Ae=N9co<#K`MGQpKD!w!9^zGf!JKMDKsW%+fr zDtZOzbv6Z_KCpi{8J;rnrpTd|iUN)`=(_%^DA)Nw*6-5ZX+X6I9;ntk^t})E{2+(Z zcq!adZ*O=R=~HMMWf~P7)n;1fCiyA&E>wjWI#0!g*?u_aJ3OWDJ_2wp5klMwQu$K0lM_VHCVrg z2eo*0ey%S6DO^{>suDj`2pVYZvzN6nciHggO6=Fym+i0?79jfXOW|BZ+F@G@{F>;| zL!M7-L67Nnc(oLI4OOxo&g%83P`%OGtzyrzfVZk6i1VTU7#Q@E@wd8Mt3e+h-^!CK z#lIa(6c#?)wz2OgKus|pRb8>9odDg*Vdc!$@{1Gm@C1Z<~&-o>qLV`&`zS0Ha* zDizs4()P46!Ve)N;WS(hkX{b(QeiKk#+F=34x!lp`)_9UzFHY_PT$M-^+~a`JA2XY z?Ck8$O(#q)fP#Ka=10LWxn5bh#w^r^oXs|He;Ov^&V-B`9KnRzzsIl@PF9DVjqqYC zCqetsXC7&8Dx58Uo7zrNol43)CRm6h@KB1YZTW^~;upaSr)cO05LXSZnMpK+Z6|he zn98B+tH9SaA72A4Z+f)?LW-E;Z=yHc!qCQ()dWXn&ZMI_<-&5&>>FS%aWI;4sDtTZ zz*56sQeNxOGo6l>W?>XeV73Zu7_8Y+t&qN9uJPdMH(`%5hnLor;k`I*;hFdJB)ViVIYY66Mdh zDX-}F1zK-P8?s4R)CHPyDnWF2kd8*dFzgTGA?Zn=Vp@Ypph%rWbjbS*C{z;?tA9+{ zR6u7QAi%p5Am2y}lHBmqY8;Q4*0-u@TxA{Vj$pm#o;-XWyfHvo;skJ+&6Zn0H(k(> zJm%nkJ$+DX2Zl9zDMazTK^cO269;bs9P<|IUQvxmX#jgjUMSAb^bNoV&z);z40r|m zjX13B@R3+qp%|%{4wy4wRRt3x@=QemefJ)O4~fUg571-U{U7)ymPRy!B zr3Pj{q|^;Gq=)6V10+S%7&jY<@?ywhM%a(HHI}ia9yJd&Bh#fQ*4vgwT?wWt72tkPo_6zB}WF1+-YdAz9pOSGtE0Py<*Hk*-`QhEg_ ze|M+*?_u0=V^^N@)oFAYb}forZK}39P{>!MFh%F=#*xR5l80 z%Z)QBC!Roy+ybsU$JJ4rP#NCyLkOT{Bux*ajIM>(5!v5_HJe9Ov|6s++U?Ch|(^fCF>X-(qH~8zW|pudj&Lq6G9F%+M=mo(%DG7 zN7>mdP)__4pY*=p;_KgvSlJMzhw*x(UG67dnRmab)o1hQsT2_{EDv^ zYsstzZTQz`Fyh*OfVxiFr2l;*B*=5pk#nT)Tr-S!7Oxz<18j~&rrP3)nYL)yzO%9O z`U}HV*zNk|w$Of04`=h!lxWueDvDv&c@*4=gY-p3WUM4!s_v*o-_hvX(OB2X=1L|u zmSRfOSfksy0n0{O=IW93YK-#IG=ZKE3O%iXa@{(H7MpK>io+Y0ZNk~`J76lcTVZ@N z1eoTl259y!@(|%CMGRA&P=nBMW6^fnm!s8jx7=!bIp9T9!)`IF&h}n~akJ}@Oj=D8 z%B*UXS=A^LEsO$wsMvxC3?}A5a=&Z9caO)i`yQy_$zTW2>SHWFurfGFg?7z2+Dg+Ot$rG-3|1 z@4jEe4Awzjzo55H%*e$pO3eW?xUXuEnUxDHo;yK>9|d-!N*Z%6pfH^A;~nCDBF>*} ztgrtk-XTBIGl>s1QEYVA<_2YUqhxwI7PUksw4yD4$byYU9r>}}jLOhj7WI>K)Q5km z33K+F^&7De+tI{BC8Qd$$B75pyfyO@;aBKHW|=DO4F&5j@>1@)LieaW+vXb{r5rNT z>TKw1S@$@1MEb-hby`nxsK>Z7;rY%~J5IPo2C5#BS3y??S>zo|#|TyzbvnZ2s|z;D;tcRJ>Y$zHE6)XDGL3{Phx z7FM!l^0+3N*YixTnUp*h=+}@?m^)e43|YTbM*e%S9(NPNIveWXKC%TVqpj3?IX3z$ zZpNb2=+TfFcPzZsiq*Q$=(H=j^;yH*dX6N2Ssa+L06hRvxq!n8!%Zl5GM!AwQhBEm z)TkfaCX?F)o%<#m(ct%F9eJwT1d_e*A-Wp{SVJ$czD31AEE}Nbfp85K2a)KbrjW^q zEW&@6u=5>6ofK}LM9~|C98%t_)TGzV(ve4lZ=r&o^bx8Ogj(Vz3~;CHttSbYV1^pmHX19~%Q6_|}t4R^YexSkt%3%d~ zk_+^`0I8autn-9W0ckbh#hV+x&GH z6&?V)4QqS!biS0g-ks-9x;rm{-Y*A1IfE@~v*q^Jc0eGN?X;t?^1^)fXqtsGfMjl~ zY?K$hz*dhdFSeM(!`ZA&1+Sr(VSoiF0a=%dfCU?WzJNkaoZZfcVq!S*8k#X&!wwxh zl=!D2zJ3w`+b0MSdh$rge+RB{12L}%eC19#T z5yQyQB%N*!5Zi5(n;Iw=_NM&vga(@=G-{@%7a^^7Wb1?h@+~?(mind_Lg5siw4!OA z0Fk+WbrenWWYC$0^HvlGte%pRB6g2sHLCX7ijhTBMN{7;xcjic-Ka8|?YlhlX2HY8GobWKg3$oMjvB&AwLJYtIoEUR&5 zav_0l+K4$6CXdlTe`#rXdDR=gqO7SjVTBTZ9vd1EZkXXQd3p1#zncr#A;z!=nAgWS zzcaK~5iXq!{|GOl%RrnON8Ckg%Uo85!U*T`{aZ?vxGl_PfvI${x+-0ZR;Ervb&))X zp@@0>IRn*W^z`Bx3z=?A7bMLiTc4l&97YV4L0b=RB8EgEyh>V1A-wM}96VHsiKe4} z$51pHJ_(6O1`^i>5=TQLBQrC2SOwV|m@+JTJyq6!simyD)#;lmu!R;k~?&BQ!;Yez{C1`aopi)_hXo#Y&qO$ed;?M$t}-;_&SxZ%jz0m z`?LzJB_S6PXO>#l%2TdVln%Xr2|Z@n+$LnvNCp&75NhJ191|8|TTpqhl;IH+L2;@p)&+jbVZDM8VjIRDZB;@`LZKOlkdS2gYr2#r1tGer}H~f45%U z{$higM%;@b6V~YF8(TR^ce5?@_Ww>dk38x-ZByh|_3_P-T~L#3^8@Sujt{IGT~VJT zeV2aW1%71I{={BHmsZourpF^YOS|}fye~p!W+CKYl)6h ztyi9ATYYTcd8)mtcu~3c?d4!(@ItN4%gCmd*^!eG+lh##AZ!5vbKH3tf3hyG3zDa4 z4lMLMqMqUf{!EO16q{O1ri78MC^GCBF@j9jF}I197Mejr98WT;zOMrm8S56;0`o2W zI@lneGeAz3lSTe!Oj{FW$cOia=!!zdj#0G4&m?tBY#c3uMoMLfe1mlB#rkYEg1@23 z+M*2g1kQ%M5b$ppSw?-`f67X_sWp}5aU^z*A1oKgk0&{PkuiiE*Pc{m^k6JcgSKb{ zQBU(QS`L;=L^xwF+ve76qGz__swk&GE)ukW4H#35;})K@5;(aShwBQr6lR_a@feu* zg97cD$iWoW!9VIjj6`f$fn|MYWIaaBp-7z5;=&AP;JJUWVlBJDe}6*G1No1|LoFt``v}J9A&>mhRyA>eTm^LZ+X+=cW8VOb!we%*TcIR@5 zpevi;ue`TffOf{Ee-XcLXtx^`5ggV{ByEL88ZOL7dyiMSz_8b-C`p(?@b)^Z+w8jL zw;VLAX!@y*UCG?7o0D;^3eG2H$b@V7I8p%^J_GW!+^eC$KBwFHHVDynM8XrO3mDb; z{J;60Z|<|%Q=a}0)w!ArVHD-$p15>80_Wxn_b*g`sn04Df6$;kDL$2?nm{C?42zYO z645&;;4e@I+dQy}+#nYrZk7}k(zJ5KD!9jJU3U?d|8m{RA`(kl5oU%%I|zbQN^pF8 zu#2$1#W1JndVRMn3$&bc3&%_3NM+~b1l^t7F5PAI?b1hfzl44w7`cT=N5JF`@0Zx; ztg5Rn-hDP&e@g1;@ky&m8>z7kTSe4f41GYIZ0J*5TURBH<+d{v;X|Wu80qrSzG;b= zHGoo5-^lsmkDvyO?{IvhHYZdpY`5WmdF->lY~XJi{nbGx+|KDz*N}EA?QqGJJjPT* zO-NItXk|q!BO$^7GeeHyC6%!(*t?vuv(xJ0=4K?;f22C5q3;1~A0;5t|CYX&j;Ja0 zW`yBfkk|#!1J^`2jJ|1Hm1xU*>9t6?DGyk;PD`jH#Q3H#7`2WoL%z%?vNKwyB8gf~ z7CQ!z8+{>kQBcd0BF=TVSc^h~rj-n@W8`%3`W4qKH1ibi0V^v{fjX7@%aaMCYuTR(rq`$9R_=Q-n+=4mIE53rexrprKDFk`mazCYS2uq^mhXpvsh5k6X`<>-!*$E$T*B-pm}SaCXmfn)Ds78mDs ze>3EX4zGcf-rZ({+i(j=G#~YzNJ`-7^X_new~rq;sLK&_tDmQzGWamGCkw(@zTy2I zp&Eq=l!bQ>UX%7 z;;j-Xs~NQ(ZNJ^Ue0})yK|fGmpWbjs+bA6d`WL(4AC7F`4-+5g``tIEeLbc~U~L3A z-h2Dbgg6#PLk0-6r1P;EGn0C)vw4?I0GN0q|9~QV+8B7cdu-f!>FEt@rxd0tf0c9V z(s!EYA$c0(9zP*;kLw+0S9B-fo@+$}AF@cK!JZ4RAl(YD?=?*c$m^T4VfE_r9zYAA zV_BYxonFwIWPLtJ>j8zApEm@eJ4lv@y*I}M){A7bmbDrfA1J{r%w{GlX7EVbjU<}a z5|b&0Nl?p{eF()gTwyeE`l2Rif0?Vh%M`3-S?E2IuCl|1V@HIeL)z1bfOBvp-qBO` zDHUW-EJ0qAZgat6oz0#S(J7Q_9q@g7d0mhlA#Y`QLwPh81C7iIf9jIg!GmmQT%S!wYzQj$qPAD(s=DWvz`793?c!18xw$lC))A1alEb zcLudtSlHw_u10F%v?KL0ED~RXmi8u%k?rA#4;b!Q4mTrOU4+w*qO|S*nos{t!NW>g z6BaG6`#zmZ&WOX`&B+^2e}jK=L1g6cxGkQuaUAwAYDRVM(LQu>iv;qQwD{#XX~kV7 zPXoS;io(m%@Zp&|4)5P)`$XXbkO+{zt+l^ z&jA-Y0~&jJ?&f{TOf>qlcqRn6O(gy|JMI~B-=$02nl@K+YvH!#e`zjEyRdQYG|qm@ z0oz;$?tQDNkzZp*z2(@XG%wM(ePx!56R@&_qBm&{7NSdCU%(mJ?G|sq zYN)MbLlqVecwQCR?1G##%JaY0s;x<@R@>v+u{#_e{QA=L3BG}t$HrjObav5qvYU5N z@ol^wd+Kq0YXH=`7Y!u8@SqIHzKruh^iakf#wZa}ojCKBe`~utnv2Mz)LSI^g6mMO z>VRT!SSxLSoh#wq%CHYDlSSSoEH4sq)1!&SVu_V46vBS#6r>Cr$%J1a0Uhv^tIq>@ zdI|N7B3iA&^htTEbu*?0Ntt+a9uA|>;BRa>PH(PjEdQ$btPNTn3TI7_MU|R(42WQc zhw5Y)H)XYfe}HJY38brn>8LhqZvLbRRkb+!b43%gE-3@4ALpcF9G6N9nd=zGWh11t zrL^uika+N)59kzNDI)3v;sctN15bJdJj&~=6hT6sUt{h`mVZRty%tAqo%+H^b|YGe zrunH#huUqPxERWDmV>$_ZiBR#=3+%OKossx#b?Q@e`hXn6m`0Bx*JitR|92L7+%<} zYZp{&hOpPS+pV|Y(rH_dZEEm-yB@1?Wgf7GryQva6vkY6@=4X0@xwX`uj>sB&#=Ai z#wEA?#e2P19&@qZhRJLw@d@PHlPj`7<4$LT{7m#CU;X zY+t(ee;VFW8>eW?iF-C?p$rJp=ok={QWN~t^sG`oVT<5i8%9a_)Lp_2Ab>ibY3JYB zH+ssh+1@)UzGGiiT$55OHT?V7iKjz;(DQqybb*R*{-j;CX8+Tv;Z5yb5v4u4m7{1lrZ}#)Xo5gEmC<6mzc(Z5IRO zDV#CY1arkKbqibRiEpNL*?3alhj<;_mI<4rz7M8Pf!gn~d|2F}s{qxkG!yY;;bwwY zf03Nfpi(P-Rpm*t9kREgi!G(J^d9wz5S0;a2iVfL1u-Q2@N>#XelM>WMmz_;9L1Y< z{5oT_{S=y%e#{#?O7Vu&kyuicuYpM~i~Hz71e~)f0KBv1L_-c8IO*K-$)Osyi#Pgq zg?+^SKenOBMJo+GkvOPxryN3E#YOMQf3CRoI+LlwTWH8C%0^ea|Y3-0S)wqc$*z3yvUiD#EAm zybXg)j2676JDGSWaH*;1aE~6amg1J`Ap`b->1YT=KCzOY_+dq{;nLkL(~$@Df5cZy z*D0)Zp|G-$41Xb2cfI=?c;vYGw~>~I6!xttY)=QNY8Ajo8B_{~6LF`N&!H>s6t+#E zhX*tEJvnSRTAVXthA_uJ3_SoTmCOV+FiS2d!Jvg!Q;s8g-bD2!9$fT50#6oHc!;aI z+M`fVo#otviZvTfkc9-XtqdO2C`~xsiOWl|IK8Uy9BX;6CJkmQ+g-E@I<|AvB#8(7 z6vT@-6|*>-;g_tD1yTXSm;aFkO93aBOOgd2e~##I(+jviS9P^!NY1Z{;k^_-vR+ts zMf=DxnKqTns!r)R@%)(pMZ*O85bg>RcJ~qvVt2n%IJ`jBn8>f$V*0`h#RTwan?}+q zvrIJ6XHTO~G>p1S^!j*@erfiI#&L^ThO~TCH_b%VCw~5qI7r7b){ScJG0^yw2*tY@ ze>F)Hl~~BaCp9rK%AGlE>5EW6-cVb&f6X=IG}NEo2;ibwbv?c| zlkT5RV>Yaz>_4I(7&k-}+gACudfnSCfBTxU#ZRK&rxkPEBz888kl{AyW&>0n$)4b5 zIe(fbY36bN%CErt^ulHZ4MQbabaFudgk`D;Me;Psuc4nJU8P*a(GnHGyEESZF|e^f2qrE zs5kJ)K8@ZtT&> zmw**|baA91#>_W0F&~VnG$kXhe;TF<*YN?8aO*+8Va&0051iD&bwC^5YrIWZfy~_N z8ZN6Amp1F9p8DTsja866UJ z4*A9T-)o^vQnC<)@>{g=3I@Fmb?F6`4i-UJG3c9Nq|>+JTF zuh%4>&6kap1+@W}mqV5XQakf!r3ggUEW-_DJVk^#X|sf25t}83kl`&stYQ;>I`Kkt z%NY-R4jJAO+G1u+A|bb^-zmj!<<g9BRFU)w+OTJQLme&tL!f?w`aywYi-w5yQR&9czM~VOeK5fi0eJDp_(P1 zvBm$~xN{vPXW(_BXXNo%{-i67(3m4Vjz;A;ipHxwhC1D5GEKtaI_mZ?`E-x)6sF;! zok)noPlG6wiE)2Z`3*eLUD97<;8`G1V967d7P-Y|1p|K+IR=-eJlhdxTf?zX^C|M{ zE_rpgY!Ojbkyu{Hxq?tR1+t)|`Vqg?%=o(@QbQMfE~6rj8;>Zi_%y@}wF2r~{D?vU zx%hO7cr_CuG$@+ZmUluliWKP3C0#FGE1(l*I6X1Kr;;@#awdMCM>L+oI#mFQlPSIp zl+KP)2dRJIuozAAVe$0NdA|FwJ{2S{QuNr1Ps|s+c^kn$jm#TBsSuS+sw6E$i`dra)MvAeZeQdygc*qctPB z-IngPA5bw)9dLBTWCO=6p;qNI&Hj?M5uH$D z36OuvLim-HmV&q({pBb}6*B{1ad0z5f!R`L4rr$-P;cm7Uc#HD+X$xPD+ZMCdI_B?SD|P| z0mxlGqPYM8Embgy9QZTs{6-;gwfcAfz%d_-*lmh8SgQz**h8R!^Jyq=Uq*N;v zvv|rpdM*Q_V4>)N3^-BK=O_zvR?#q|w&m!pzIo6AhEJHB^M#Pis`dL^E zLiX3KAckRkI}E0^=c;gKfLKi+uG*_Xg}Queb;sPyWkHR~*Zh;<7Jr~&B>za?MSFkk z-RHno=h}f6PTs<4YwN3Y65=bea0rCgGf$3U3R=H*TLo0~fH*s{55jgB?(I75UB|2_ z+ooB7ppT116`&uCcKo!!eAOr}(%Z(El+PI77+T?ME%)}mxTYnoknQ;m%cF%bjsl<$ zyM&9vmMpp^Zpmv&-pzgOm>c>6tnhz0TJ?RP9T40Dv4DD-Eso-Blbt8>PKm8B*Sn;*74j9&SifZCdI}x z)=YI&x{eczpNktQQPqHHq(lyf96Rrk!^XzWJD*{pc}YhXH$luY7dXI5tf%DeABk(+ zo)s;y^@lIWAlGSx3z;jbZoyy4fWl)krLTzpt1ex(UOasNs-S8KK3ON z4pGk)0;xC5`>^*q=0Er*8AGgrH1c0(*Vl1d2H|&81vmC5>-sCIA$Hz%PgS<@s&iQt z8_$MWt@V{|njvn{aGo?1Z)9EOyKc{gYNqNoEm&`AM0W?Vyd_m}P*i^ylxTo*FWCBE zZNAHfLzdH~>`g`Vt&yGJ(LW6Ewv5QNmXFU!#VMCT^rej({O{ z-Xl|0BQ{?mQ|%)*Um}04J`(H4$W%j#&6mhjX^G93$WoArt+&Y5X^!pJ$kmOG-Gsan)kuIjZzCZ8O;@tM6lPDlvdo zEV8(f(uASmegYgHe19_b(oVMf+LouuwkFu_R^jdtQ6=ADEbV`0JjuE?T>s{amE$(0 zk|H9S;_Pj==1GojjO5sSv2t{4PEzC;ZpF@fq=GZV>M3f33UL!6H*iJlCPbbX9kC}Z zazjeQZbH=bJQX*S^r3?fw>_}_oCqbN@iqLdZug{cl&%3H;rt*LzqaAM?MzwbY1{3% zk%FNm&^v!Pe{O%oA?AK7q6a#$#Sb_w@rk^Do6o~}81UG|;XL|w-4sAA>w7(Pz}#9T z9TT8pj80?-xR1)>Q-(`KRik6-BoDAd4?bQMpE)Uymp39iMTXIcr6*;Ie$?St${h)N z{>&*R&X^(^3Y75I1Lf%VG^V_#4r!|j zGpRv**!?_7f%_gB&`cyL7{ItuI;kw6flLD^u4%$+lCan{(OKcWLQjy?0D?2HP+95v zs!&SiT^gevkI=F4?bl^@#6Gc+2<0tR(Tc7;NByrhQ4xEI{4ply&%Ro9A>`*kMR@%j zltTYt2cdu1un%9!pU$7b7envmTe$kw`LnIfHLQQ@tC;)>KqY2-7Q$^>=$gm1^FN=TSs>Nn&hy(YW8l@*M-Rn;gIEUv}X6OkL#=1?xz-AN5)=$NeQ ziT-Xj7=$RBI%e0v`rf|F&_UNjc9Y|cBAnITr?%0M8e z1-^fHsoO!t2RX}cFp5L$K*}n7uu)Bp@O`eWQHtFR;qpZT=wF4XjbkssWZ6lGN=vj| zHP)-KMq^|3hLPd3t9tS(CyF!T6DtO7oYLmQgE(ScD8>tWjY{2*_e=W1#1NLnp&n<$8h{h zRzc-o1(mr9%BQV@@(Wgh4I8mVtH2Y;Xf73CA2>H=Fg8J!pj!+sNFpD=gEG5f0eS$^ zL2!(Wib9!k&drQ;N}71Go@w4%lbHo;YtEVHfdXK@H5Ac1I`mrIqz04d7;C z*mLGWn}jQl8t$nd=49IpDTi0T!vz=|(mprNJY0fv9&@cN`K zSvqcx>9SFeQ23cg7=O|;{7ullnIs~t#vNdMfZ(9y*TO{@m+i7l?@=WNe{pEEDiVy2 zGPgBr1?oWcqIttahG$yxL7)x>YAO8%jgqocEx*XqCIO%$5#a}{vmv~70aDf1o$pP2 zO0~v2se73FQmQRi*`0ty1Ok5yQaZ`350eLk9$o5K&g@08Rl;`%Fb;CY2X7)#7~wiU(v0)l}8knZYkd{IE?`@^*i@bDJ`;S2Nly zZeTnYZSjlRxxitsM;kBxW|)ji14zu_~AtuV-BQ#AAR@j zw=ch?ycdx7;>9;S50k%(Ha0fCf&aP1<4er{#_&G@t1_s!w!Zs14_AweUcR;7ll(U& zV|@9rCol=RG5hZ2N*aGgc_-OW20Zh5YAr} z2%u+`r|B=uBBVS~N);7>x$5)^Q(eQb6k@H3s0wE=Dw|nPadW_CrX{k0+cofb#KmoX z`|XP#zMIX;t#AMK@|%}o!H269D-uAy{qE(9_00tNz0Je|!byL6X#iqP3h=v^8$Xc2 zFS>|=iD;G)Tq3i2wYow55{=?HLN+RO znYw1RJg0QE+aa;)EvH?Bf(OFyfH{+LMFeS-c9C{t_$c&J(hF_cmxXxL$oHw`tY=RKfWqPD=YjLHhoS-Pt%+B z&uhZ!ZIw?j?yFH-@$+XI6ZDR}yxulA`FLo3h{BjjTHn&XfRr;E4NI0&)Ij+HS#Tod ze3PzN;4WXoqAmmF99DnbJFbDJw$P7xKG5i4`{t%(fFt(+jRAD3ARYi;2M0N-RII9&N^`6sML zb^7uFR8ah_y7OEJngS@-i7eZ@^9g|H{>9aU#Mc~^1e#?Avdn)jx+ecQEpv<{zM#OZ zEbvpBXQNSy!kkxA+@w6fhZ5L3iytwU)YQi4wbT3I6BtBv6TM65)Bf%EP}he%gOgpA zY6p4k@OKDbqns>bzIKN>oN9Yq{~uP0e<83ov}e)7D@X%&g12$s-jR`Pr*3bjZfmEe zfMP<+?eMCCR=j^BJ;Z||CqWCKrm`zpdsniyt^m~+dzi0gCaccdtIpf1&Z7rBhv9MF zcUQsY(Q7u!#(?i-3rqw*Y90s5)6_0> z3ZQ?!1tdCws=PGe6oIg|W0E-FP57&OuI}3e{tUo_w5s`fLssat05)KpRbE1g(EMWR zT?Rv3!Y+Rf{0-`)K{0ZYyMy~WeT=94>n|z)3O?YPL7JB!ZR@Jsf~SRBxsR$dyrmvw zW4)#M?zr9&7@O=A6W<3NGj-R^IjPshSOh*sX394`KS2=+up!_)AbS#o*Xe=S2MF|4 zgp<3Mo1Y8p-gJO*#XY5-i&BT>>sA_Az)r@mXIp;}{!d2tvaeY+fUP6tpNd4=1N(}@ zzN^P0@x4NM#6$gRet})4c{L(g#Zd`tsSj&^hFWj2O6LYd0UTKXL(T*LoYl8SuzcXr z$7!h|HSC11Sxe1t04%Fo$L2j`kJHH;_<#v86y<9mV;sM*^+g2t124H>;2=G{*jrvq zQoMgx_lto4uz^pDlUpEhczB1&%x?0ug&6+ol=IjAJ3vt^MsY{v0r^FOe5eQbjUJF6 z0i;S%5$I2bXmeU1W90$-hXIHnukN=$rP&B+*ojE?&Cov?Ney1ZqUP4{O_0AcwB9SG zQ2X$NL4Wb17f}fYs7ne5$N>0m$}zv#ft`PN)B=$a#E2^mn8nIAv*r8xoun!)>EpT9bpQ<-S+8?|Wt2zE?&M72w`td>yMMswi!5ByDRX zUBvCZ#mapJgYSO`BU`s?Q~+sB&Y#gQDh`o2zeb~5{s4#Rpn`*K1-%Tz9_g+ujevjc z%_}0vMX7`|<>%k4gw25v9e@5invfOKa=_edVe&8da}m~tRXZta$YZcz=~IN7Kxc>S zZV8uE4+CzY0~8tC&IpUsl8l_Y;bdiE76@unKEct3eCUrE9>3vxE7Xg{ATcpR&tLRZ z2yYTFfc(8n7YK*fLD*sXnY<`)n}~m$tLNIq8*Whf*N~x-BCqNpeW@RW8^=Sk^CCH=3>AW&iINDQs~D;W+208B;(~W zYFZG608-FQ4KezI`Xa1+XpXR8zE)O--5R*TkpBchoosP~;z#fzr%*}g{HcG-9bu`G z&d}8uwO!wb3(tnZC{b7#&SpxUIg$fA>SmQ@7K33ZF|gJJVW=&jG+bFpyE!=!jE3Dw zHsQ)mAK3@kY%!dChBB@ogr2%3!zhjF?(Y84>96=rS~cLyMt6BF;w-&A$><`zK znkt~VOMqw4Zn}gH2&sbeXG>bPm=7sSv;$e`%8G;|+*qB#*cB5BoQ{$QdO(es5(8hsGs$`BNyw6U>SRPiijT0) z&!3^^ta3NSHI^k?4-}X>=ytm~;ISghT>hbMhXF>2KG2=6a*(0Y&LH_Bj0)JA458;# zsvvOu!)VyOwwqhJY{`GGvzw`PvyF?3wBF$;`T%nev{khU)Ea8U$g<%aF?}GE6`ZT= z=vJna>c9A+!|P}w(=*|@F&fL18yoW4NH=Q6qePia$QDLIz)EC)vgng;GaW^j@@-Hu zG#uPX{5R%savae{B_5*tWQTumbO%prTkhS%o_(L#nxMw*H6MQ>OoQDBMW#32TW-kw z1eu@OGVdVs&M!WIbrrl38HNzy3XW-df)JT6u-8D+gU8ev92e#yUHTO7)!LIwy}BA^ zF!LOtl$UaO!lsI^VL!qR6L()gNzRR3MJLIA;Gni#4PmtF$(&$_*Hd2xtiUk(3_1Li zW@H)K4PkWXgP?zKePQ&`mshgMC>=n_*S_2gFGLQn!)V*va+!_8=oqq&+0E|fiJ1k* z{V>`~f~!Pn?nDN6DMz0rQguga$3(T943vJa_p(ja%g~t)5)K6nFLEmGf-96885+X- z24b1|PCB?jqtRS6nr&_LGYTP%Y7M<&GwT)5cz#xNHq3wK3)TF+a6x4d&?An!w<{~R zNWi8T&`!6llxMO|r>E35@q++QfojqyV}t;)N^==U{xb^r3*2yEW17GRp>hI_N`WC` z3SigH@{2^fGBup+y)mS?#Khp(^1Xt3M&d&j-UkC<0-#EYIfYdtDfW3NI?&=r8P$RH zr02J5rICNb{dSYms1yqCi&y@&vO?o~GtT*%@H}D85?W;L%<9QTiUo)2?p<2uSh?8h zmZZN~8|?4;vJ8q!(`^@mr_ah<9Xo z%{wv7(ou0E9tC*ziT{dHyk^Glw)it2-fKM9l9MQUxiLSEc4z)6*M%r{O(tXFvE+5! zZt#Df7yRcX|M`ahe9M2n<3B7Nss~Zctsa|Oky4L&xB2vCWBzSfKAG0yi4VZXD_+|u zy%NJSVmIVW8y|V;ahm1gVIqFZkMiM}zik7r&8)DTl!OlsZz zLJwUrtz~Bg2ba-xCx2GI#f`%4KRAEKp-W_5w47dXeB>ZiI_B9G8>p7J60Bed(_wMP zAIGrt1QUqocEK9LMpMd1Q5>kno6J- zE3`V!#9G1Big-Art^0z?P->m#^?M#Xe}R(TjEX|`47urT3rGAq_DtFvyp7z zbXs0bM=189(f?CyDYy<%7K$IEi<`)F|>f8qZ(gUsl-ltQm8m)m42`n79>nmDSRu%H;gli z@7>WWm>(Vm(H6hOC>v@bGtEEd6b2(A)gc<#SA1Z{x-a=)R8(@?LcX3qUgKO0#WPS& z{-m29i~W!`OEwfVc05MGIPV&#e^6twT^8c!lO!AyV8vtulUqRTLhO>Ir08Sy@uDi) zam3>vVpAJyaxj*=%UEtHn4+Hb{xTNZ%2<(#vFtydtIbE=Ul_Qb<-qB^5;jGcaJ^yk zcg+xtVE>bx(-`ry%vfc--HT_V23X@_j~Z8sDvm2T5EUE4KxG5Lzvg*Sf2YO{B40b7 z1;;Z+7uLpPx z#KcywTSB`e^&mHe0k@&Af2C{%}4jOQ@%3_I{gc7K~m?pxEr(%_>j@vJEI zEqT8Yk2iv(DdqtlMydF~Y^ZtbvD`jT_;OQbHJ|XTlC1N`EN?K}f3hMq&iGw&_+Y=A zhzCI!($DgjAHoG011>@`CAVUW9811E%S}+B$0J^9F%63F=LPN~@>%-W60dh@q*r{gBWgZnw`pAwyM_JEwL6^;TQnN>11m6Pd}Y7V!FLQ@LVH!t$hy?7akU%D|L z%DY|jj#nfW;#<)We^xyx?tKDFiI$JpVG4mc(#fzq7szC}_VJ-|P6EKWri%Yh1+|vj zC;X~S3y`^SO3m8zJWh?gI>^unSCd5K&^lKsjEn0pg-j|%bvOMJ&_#3z z>$%1mge7~gQn2QZzK*|QlE_?T;{HIK=}ZEbO{^osG|y_C)lqy1y_M4uYf?ktv`AzM z+_~OhJn0>N)~MPzG)m!K@DzFGQz^bt&@7%N4t+z;7Snxonk#B)oKlCxB1`B`nPLM4 zGs}iIOpzbJf89^|BNQ{Ai4!e8bPC)*1c9OiH7w>~iXQc7UL*hA(c{M7t*SVeIL=1K zyIM8st&FdE&!A4_!6ypi_<;LDH5{DOKhNUKiJOXzlHi_49 zX1!{<#}ka9;|Y4K`MV}hc&-+AdnQoz(R};t9>IP4o?HfU1JrxlbX*MT^phCDLZ9dg zq4FeNe>6U8h78ypN$B{aUSS3&gxvGB+^i=l%w$JbVciiJ<1RMN#@CB<8yiKU0j2Q; znP1eWPDgOQuv1{C8$d<1xZs_XsGePo?s3LQmpi<@Y*MX9)Y2kFF3`n||a}As5+(Au#?amayD>&$F_kw0HiJRFXUyk&&2A{9!&6fy%?Gz)VCY?3 zf3VB3q%?c#Fv-Ak&9rc8IDH{b?U}mrC&r~xS5(}$6+TNpV*Hi+%a_m4wc)4Ey?*5j zvh%r-a_{g&cd$4uLa8|1J7C|D6e?=+c>qWD9QA0BGZf=+?@Q#(e&*l!`Gv`RVG;h9 z=ic+&Kl$IHz`!uXPXd?rtI4HF_KfI*f21dx-@8Jm3-U;%uQ!Az3Ju2-^o}9`Bnt~? zo?@(_hj22!b&qZa8$!<-_YBi+yn@Q*QLB{ncfm$FLe!II9dk#@VKrxikGZ_&AL%QR zkrq7R?T&M<#w5Lx@lCNI_+l~?u&?O6EZ5HksVC90l-CIc*@x{!kCi$R!SO<;f5M9% zY<}=isAir+O8r%({wjWvK@K&Hce97$ssmodxh|9P3F&QGyb0}A`%Th3V!fnj;!4!1 z6=J57M$-M5>jm-!W>7ufapMn;$e&Sa7^{hg{8&sr&(TL6%+dow6~&*q%n_>lCHWMr zou5Czzq9l6>iqoV;_I1uIzOMof4{YxaTxuGfSdp60s7A^0{904{1@KgcOa{Cety?I zKcB9zzxo?IPv5|Q7i(ekPl7^pkx&<_&msNqlpgeB{_lErTZi?e>d(e0u+7D+W}_Ke zg~Hj(9gGT;O8ZzUaZ}OQHC0> z9!a*eNY&B?C##Fw7NSz$Bg__%Y##gcWw6!-O|q_`RGTD;N?(@GT3Ms7`xmQ5wKhf0 z{%3V)NZA4Xghv&NQWlL^f6`D(w)C0Q$8(R8JnA%mM!S=y%L^bk;?fC z4ZG;VO}H|e>iJq? zfmB*?^>wz^4OK_2m9u`)H(%lr27}8IQwK1BZiODp4SV6{6xUp(mJ3*h=a$QDMHI6OY&84}>-7j8Wa3aHa*gX~im$*l3^8p#okW8~;rO&~=gnqycfa_P zk`R#~DV|2RPy-r^L=$+xfP2`=82fp+e}sl9WpoX1wK31pf2YJCDbZze5PagyR4(L# zVYDL>QOEftLp7KiOum<}Xq!f1hcWd|q)y0gO;pjUG*od+xk?Iw&thx>Qx_oYU3JAN zab-n4c8j~5m2w7Pl@&=#9;Z$F$&dxt7>DzDvcIx&!20`Ly=DShVcexm!IA>#SW>WV zhH{RvJoW-*f5Svx3O{X6>;pjWFaw?Pa`5Wa{b_nb0ZgVwnFhWLSdwES(&zmxSvuo7 zho?6|5h{E`lhS@+y`qy1wWR4ACsf=%@4ohkl-LvHH(H-OT^NJ-$f5F2%I#YU`up7MxV!?uU^!F$F z`-=X)4Z|=x5hZthB|i|{@AUUq`uhi#ITd9-i{C?rzCk|H-`5P+@HYKDroVgicc1<~ zr@u$^_YJ`x(DQqGen)?QqLe>zM59--S6=CxRv@!fwv^6>M`A2>S2BG}(4yMRCs3^% zNoHQKfAN(RV-!@4WY!IdF|430S7l65vOYV1y7B1V7}_Xbcz@0NoJNj2xTfd@TJcjN-kmr+=f1f;sa|saXfEP|s{}UJ0`Lpf!?+<_8 zeSLYl{q_WJS(jL!28ngeoG`v(xRf;f_UY-dA0BhUc$eY01N`gPmmiMzE>E`K?AnFi z1iv$MtJ#1ERwixPZ@}y*WI7wdeaVBO?S-hs#_+ ze>XqN$ROxH5&FZ)?&Z<(;hVkpyP|SrvCUK>8XKqv%LnFi`*?4gY9T^m=1~7B2Z)PI z{BZE&!QsybSl{X4&f)tL;5vxzur3W0bnEhTcmL@9_USIqJI1`9-yOc+y?lMR^I?DY z;FQvzWBT##>4)P3$k?Z}BRlQ#&GGhIe^ua(>Yo9zw|{hae2U~uC7&LDI5|ZG`Soa* z3hrYjbZlq$^3~z%Un%Xqs_bO@VDEJApV+&7B85Ep$KBnd%bml6Q)nJ(BkS(LSHIuh z;dS1tA=%|?;BBtA>=gjY!Hr zCP}WuXT557Qye}ROqRpyYP;>Xe{z+hS!!LXCdJD_*yl=4SSz2!z$ zSo@i^kwJz3&;^ZT#@V_iOtw@$_f^J^C2*L*n(q8s9#%*1CRJfBP(kIM~BFo^NVO4kUZdSMt4Clv2j*MA~QC(Y2_&9bHHS2v?%x-sLF`(W?i#3G(s~x zy*XJ~-4`4IzQm1uX5|BdH0J{{^4aW1G-?Qyo6LW5g9Kl1*dx8+e38F9wGFVc@(*lQ zwfgt=Rx^I3;HhzCWtnObf4y4X==tCn!u@E&@iV+cW{t77P}fi{mi(A9)mWw;<5>oN zfUfdklQFW<$G(k2r-3^2Mh`+wKW1}&Q-C&z@(d;&wBu0?FKhU*0mgs>7E_>z$oePG zb(Snd9<-yfb}nSFq}9Gsdx-7(4Qw9?1YQ(T2z7O4X(>+ZmV&0yf9Fv8$^@!I4I`R% zpi|2y?2KKYkIUz=G@W1zI`NR zVa#YI>x6=lkHapxf0w}cV#3vEDa1`{oW__RK@KjhI}pLPN}upRXS~NgeiRP7NZ!$B zs~?H1jO(ndWc8Gd!4Nc3m2-XlnIWyis=HZUv9ji#&x9NmYZ0JV;ZHk&t$QZo}=wcg4qoA(rDN{e|ZO7-R}EcVzb2S&f&iK zdb<0|X%u)IOLT#yJl#FM+}_#QJvyCZ*n8L!N4{<>2h22#zlG+__X%EKHcZMG-C7}G zr_1SPHlo6gyeaV>{H;kuW>_sd%T@E>k>YCgw8EK7tfjXmNo}pi#1izq?;FgP<5k)` zUZr8!w+1?mf4}s2hTu7Q$Z5QblkKN@Y3+tUf>Jxy;%G((EW{su;u%8LpanZ z#EINzqg<%^F`X2-(+ldvgXC%Q2tKg5W5d(*ri$;-f24SM2sL}C3hazLOWgCpS=oB` z6oE3w!P@588cML%ZX(2}oYSRdma%@kBeQ&mJN|5TN*g~i5XfmSzv8ca|3{84Dif5n zh~OMWsQqM@;wHSa(W|zS^0a_wi7NpNHwH8|VP7)2)IDOio0&m16jj1t<>mH`e2UF0dNb@GwR1 z88NaM$)u7RNiV-mA`j~*zd6={dR1_FWdLbvq ze^DHcpcKCSBwPW*>qo{WSSxyp5M)L-5}%;J6xL>$NC{Q1RMy?2q)w`{@*)~0BigH? zsd$i^76s@@wt+w8md+6xdjs#2c4eQELcCCy5+HS5*(1DTPSLHvfc+?w#1J*;rs^^c z3wq8^jB2B0ryfArvJQr5Gp*YTL&7W|e|BqIYv^1l6fhh=x4GLC^eCg(FMn6-m(Rr@ z(PZ9^(SYM|TL*)v!0M56o%U@`;NT>fMnlMr?eqZCqFqf2EOva}TMkSW>g!+kvR3*-Y9oqYRnO4JJ*Q^N}h6S_>$ok0yN1y1sr08T)$ zzkl4AOi~Tg!*osv%LjnNUh^A0{Zam+v##_GXHv96^7i6`NAh8)P)j}x41R%bsnPMz z`RA8|;dL#O+?wqaJ*_qr-xGFnQnijvzQ(to*e*^-1gIs|wLK%SZkbjO+vXrHsS1{DA1 zKt1?9J}`ZeVS)=rU}&;iE`&ZTh1v}S6xxHS`Gui_RZF<-YaEvEPyCMcC#DIu&FqF7 z+zVDvB^90X#Dwc95A9QtA)5sBf;}{}7+t(RrjZ;eihv`C-{Bv;}&VdPpr@4D(nrDTWi%L<1;kAe260X*$kHX5SRI|Wtop_oki;$_J(OP z6GH)UtIdRA;_j4(vcyK2XunnF+i- z8aeO?p5PT$HV;D7FYx(*{N``phNx@c4R#O=fPUEFf6owEgn!Ru{USj_P4SA`?-^b- zqVhH6Z(zQD7XX#??U}s5e1G*SvOh}apvg;4u3k=g>`%=JPn(G zP8Rw1#Qs&@{-GW3X;Gl2ZNja3#Ty@VHX5Nnc67Umj->a~JiTFM!VPvkIjYn?%clZt zpF2`vPV~)!s&SIURHF*_5rs8Kq((P?75Sw0Ae+!{e3GQ?>{}66GBNCFWg0==n1QWj zQ0oM3rabAQL^c%7%6~^n=Qg*m$Tv_TO>kdHS3xpgl+-WWA1kndu@>KeqGowq$c8r%7p;=t@*9_>3om}EeaziGQEnIxcgr=`rrMo$s8X$G7F;>mSBRwlVn&gZH$2hQxbmF9!ntk!$u-q%@lIjhResG;EC*Kl{Y`5EQ{aU7Bu#M9&3 z0kT7QYJbL7_yhLz6ZZ6zucyGmz1rUSkz!gW-y;jBUImBudiVYA>2C7PcbLgvWX|Ew z2gx_YR^p>b-931ny!;ju;Yp>P?j9!_FL^3F%k-0-?W5h~#os7{UPR8j!~NalCAEo< zB6aWJWcTQtdynLy0KOBj? zGrFH65&B4VGT5PsxTkVm&7uQ!JG$|I186ve4)S^pCZFkR9F2i9noQili(zMs4qal;O4kc{IE^s#MN~!3sut!BO`6_q#i%dxr;RB?gSD zM#Ig69i0CiKdW9167o(#^=+S^3t{-nnSWkJnL?!s7bIol57v5*wcfX^ZLF8hb)xDs zQC)`;WtEVcvuRzzgwkpjFIf8>)_!L(msc#wP|5F>1>tNqVA^zPm+`ZE!i6%@GjwO8 zhhw5I@bn>^$5HGfY0QTd4hW+PZ;{vPguJwdc;)Qml6)tO^38RWg!4GahGXhevVWk$ zwrlPc9q(lD)$(t<%1?|QXRDu?ma|R z;AFX$uX&(eAwwl80cwq)pW|pb$bGdnT($ppQlL>e-r3&a-PRrYd5o4QmK>gJIx5!N z(({LGu5M$YeT?TVV|>@QY)SVFT7QPTRJPjvO zGkYlWdNQ?pd0Cf?y+>=`$Vh~4?TG0@dNkC?@me4U?^uSBmDRmu&>TfnoLGk+UBNb! zkuWeavxvwXRZ$v24+N%7)qkv(VpcObtJy+KEBmF5X#-VL)vReTepLNR;>WG3C2iJX zjMbY_dgH4q?Wcse1}HNBs@74nRy8fY`bPZ`)u(`vyh9e5jR(gv4rkf*sU<$Lhyam*>D2g_dGgH zb)VvgsOlfM*jg+B?gadap?WjrBOH578>8O3!T^;X*^tK9dpG#Zd5XcR!Z)KQU3J>9UX=JQz;j zpEE-fWI1aFEJ2>(n4u3+*zI(%5_Bd&j-HqFa+l2?koL$|lF{M&Fc760#SWScfI;PR z2ZO*T0*6xBB=eXi!YW(QVNLD|P3LRC4bB27MyA{C65E5+Q-6J<>FnOZ*N5|GD|Cy# zl8z@mxR}di@H%4&Tse1JC}7XaC2`AMmzYbTJ@lAh0rq6jw$r2-eP4 zHlfn5Q1c3hqDC=@v7p{CE7Y|r_D3X(0cwoqqyM?|ovkPe39duP{B zChnZcqR}9`;(yILlx!aGr#-e=_ZUVJKsIkBzp8L_JS@w5svpI#$`3%FlS4}*&=R9( z)j@iI!b<~?^mcUSDl@*}o!+?4pLOv%M=*-mZwao&iIQhBg3r8&(L`A#WRSqa{-lYR zAGCSsk~}z_P6nDYKdIX%on)6OXC^h7?Xc3OgbbpD4-a)#``x*99srA+XPRd?L zaO*1S&?rf}=>Mx0Fx0_eH0=$6V;V_I@?@jW>R@!XegS)Utl~H6T+E7LPnSs>(4%QG zI@`G5H4ZpWFT<{??a0`gru{+k+w+Iv{P{x;|4-+?iK!Zr2z7`;Q#Ct3Nn*%ClRl}q zVw^jJ34e07Hq`uDS;5lyM8Rqd?i}T&La`0n#LR>%f~a=?WIC`HKlzvZrxI9_J^@Qc zi81jT?7OeIqB&mDW0%(;30KExb6ry+Dv@4QD9D!!qR(4E^2?vHu>V`|{Gov1gXx07 zWb@ymG=$f39{v`~JcZhok?E_e(^3~y)oH8hH-D*8;j6H{zV_U7nXI$V+lGMSC1Fb-Q~q@u~J%j$W&W;qV5a`#6QyYz*$_Ua{Rg{Cnx{( z7P1HmE>9W6)UF9ARr5ye!@o(gI^)g|#x9Fbo=7!hfk!FZV!B1u++w>+KQ5*`!?p3+ zQ-}`2-9JuqsJf?ou~p)J;U`-}hBvV2)0)IZm#H2p<9siD$d}L*UTRTG0^P@J!+*8M zsR=^eKSoTbs;3OO0l#>_4U)qve{8r-Qlm>$3rjd(`N&Ya6o!{sIM9Mt{3}EOmyeeo z{N73r`1zGTp%e=$+R=h6qXz((Xvkd`Qb@3@0$U3Ht*Y4&dfBkL^0&JlU|;>4x`Aa~ z{6H0#LNu$;*9tJzkEVc&m(}twyHNC>s*D!9@e)!ZXTj@kCHfIXc%n?BdniNWd6_*x z2b3e8g|JP1=AHv6Mq#6%#<(3VI`!b(udYUm_I+52N52O)LcwvZCKMD$7A&KH;R(*-ww#ke6@3+i&pW*gyJMiE;Bw#r=?DCi%>#RQjD z6PaqUSy@?G`>(V0&JX0{b?xHo=WC)$75h9-D7Fn6ys0Q?T!a3E1u}9rIk7CHGJX)Q ztbCIsNzuJ$X&G4ezx+Cmd&TS*-Dy1tNMboo>mZB^^{5PC4AI>`tV?U<%hC0J%0
af+2xHF)c~ajUr{D+W~${q8s}svjbDty+@q5GG&uh_VLbNy#=+tf$@~P(x4=@ z4~zs^G|FbPhk4k%PY)yG7W(g|FvBz3HQDUiH&p0nL0*ySDF+zzdmMy4(@kK$vVu)u zyxQ|;XIwxft~W18VDy;W3+<$T`{bkLVa_EIBqPR)v$ORJe!~e57fEIyGe)V8YOdF> z#7)Zy)3^EJ?k-O<`{r0o*bDSYBR&#u{Ltlw7ATybzY6*Z3Kbq+&coH9zYLFIxORi# ziMt5BaWVfb&YoDJDYU9gPFhkcZ_87$BI?numhsi|B3ReM9 zrdLo|;7Som-DN>3l0I%&caT|adQ|ZA(CA;#kN*q$I6K?!{PSXVettzS=jYWb(2+|d zB%vXmS+jB!f$1YI$Lm7QXmvkkc9(6rWByoA=~Il}Qa7)kxU5b3MEAHitbT>J>d?iV5eCpWrqJyz83C6~WC3dLE3`EhOt2&;c%kS`w@ zWRfa8w2Aq9Ot}m08Ka3&)?s{thL+7V7yjF?P_e*z4}9x!WPDkFV{UP3Wb1uHWveEY zEp3!ohg+z;Wq#FA(kZUA=J`Cca#Mo^W(YUZ{d8i;^$V`&P@rcAly3(G7Zn9L8qm=j zIf=-)!1o~=#*~H@>adUE&s+=lGd&PO#ijOW-VJIkOp3}#8rer9E`$S=boFCK4b7BX z&P>kD;&;$>^egs%L3&bg^-_4LLY6AXHt46vN{&`mM$sUdVu!J#(JemL^en$w>Y*e; z4$YsYvKIcjJkVTAzq28_lhmq6Z5KhGO1DOljd;Mn6Oba@yw%TG*+!IoZRjrD+VlZx z6FgymT6gzO4llp|Zha#r!Hg22%gI26K{PwnfPI=RIaf7*dAo3v)Wlf$OHjSVQ1Lv3=S z0q`|+tZwXFN(()PH=b5>ZR#*&Lp1?BBOsGQj|Gkg(jElgXISZBiycl2c(WtMNu{lf z?h+iQ46LbtLdzh>%<&DgRoF-kO|u*u!p`)37*7lv#yJfrdsv%YHc~^ciH;Z4ZM=0b z%`Eh)KW1e%h&44v^)I2RC}?o%Xcn5IKYNq05joKBN-aID8FpVxQU7_ujY3KPnS0xTS^+K) z$EJx;7F)uNI>fymAw_0Yz*|}`-La)XnlDY!nL~}WqAkwSpeQj);^1vPiLI&oYQTU5jBFBM@>nBlX>Y(lvCW!)4-`I#flB8_V4JbUqw?FC3Pz)OooipV zN^@lA^0i7Pbyv{aKv(+|A=Ur<)vU$#{EK(Cnxpyu-)*jBBmNKG@>U6P|H5tQZB|9C z$R^Bm2{X;Ts~tW6H9>{Ec&3Ibw+VS*tmYJcVd=Vl&?lLj+L3~3BPY}Nq+U&a+r(&p z*-(TC5CA_%hr=TB==}WI*7FBc&Q(d#OH{Mt_GRd~4vNk<*LWRUzo9zwZ<{>M+YB>0H0R-$0WQsam^ZdSB>GAvb)XFT z4(TH**T&;vE;cC&Lq!^-53a$J=WuO*8GMmrQhlsmSxI~4%1TZ;ujyS1%)=oI@`x$x zyGkUprnN;C_NPe|TMl85Sv7%jZCBq__xGyE`?4+m8iXxeUw75L?wCrQ{nznCCcemMyTu5VoIOa-dF9iLg3vFKEk+mkJQI(SX_P^)BbZ^^ z*%3OEB`>56gE?uOX4z=C*o+2gfXyC5B`#q(nbLTojY`+~xTJ~z*Di^Oh{-NYXk|XFMv_YvvLYlshK{io~{eJb71}1tN`of(F zP=q1{^2_D%?#|)y>k}9F;oCdxr-A%|Vt-2L}Yavwg6$`yK#xkj{-%^84NGW9l*Y=zW3^ z=#Oj(M_B|AX#&4JKKyXBcktGNHrxq0;3tR2r!Mq~bYN%#L!Ad4@I!uGGWI81+TrdX z){cuiqa%k0yHs0|tKmR@)A8-2lU?0G`WTq-bOP*v>Y=VhsKmsU*8o}9hkcPFy-|pa z{r&BO*F0y8;e3s(qhBd`axas1|M6k_J;IWrNo6I&#K{a;1}Y2czWjOb^j*yLla_?d zKF>TpK0LnMeZ6I5C+ik=%-Rf73TGZ_TwsAd5 zZ%h)HCo4wh{nK(v{k+Goc#B^l$XWL*vqJ}mmpkva58m#c zT)zH)?7jP5+t#*!F#0McUrMYZ9GkSOT{6NyLLgz4gcL~Amasvw1*kC+OOgW=d>-Sx z%lYfP%XyMB#+di1Dcg|H+fMgh!J7B$nBzXy_r%SD!<1hU4?#w69K!4fNn6Xu-e|v_S-|${1V%aM~p?-Y#_Mhpib&bvgd><}U5f1$4dy9U z1JDt{9|Y@!*822896(AiP@J{fQMs77wf|d^eafM71n^ zZfx(oT-`H&>YyG2uheMnMeou28sj(vyb>J)^E6V^R8$0Xkzpm>g4R9xlJ>OYh#Xt*taOR=VbEZRwEVI;A z9gpx%3=dmz zin>I95sRwL3%=a`X`R2qR18gp`3r0n!sk>K*=4@8cme3-aP!scH+zRat!}+pr(y_U zH`DV`+4zYE0MrWO-IAp?D9Rtp-d+6(tM5i1Weo;O@V;XPgB*a=$n0NUt-aXUezpB( z7aQOFmFff528dyrjS2vRJhC|}j+btAcMaZuJoe_}Od6|2KTZc4WSzIZ& zx4N?@Ur(kHY`mX)+s~hGi8V&p2*viYlarxX=LR4dR^it>>xVDaSD)DxUgz=R3-Vp4 zSNa)__Teu&&i8+i-~Cku(c=XP)6+^b>=0^PUthrwRcq`6CJH;c`OJKPVKVDm&qB_B zr^nZTzrWa%S%p7#lydm$&C93jJLtj*5Hi$DN^$xEVU{imC$zBnYH$5{eG{AqIi)Gy z$l=rVy|?S@uV!luo~ZI7j#F5qvm~V>4Qqvu4kSdEJYiawFIRt_u{)Aaz{-+SQ3gV8 z*%AC++j_IR`P2H{yVRi8?YiH5b<0kFPxMzqU*j3Ny7Np=YM!c@2Eb19v{UpsP7m*C z!r}R}L!;WCzLKBstcYGWU(MLpt&fQ6;nwr|q?7S%eQon4yxFrIjSF}zAPp8QIUAiZ zI1C@p;(l@#4dIv!*sr3lJC1?8dcOCf+T~gF0jQl3AlF1lAnUrpbfj>a#dSRTlWuVYQ~wK5oIIKY_%sKZf5N3 z7ITeon-Pnh*s05V`S<^NBDmOxWw;MGbGk;fENKYC$1p3z?`P4~8r>A}9T#PuUGc9U z;;U!OqcMKH1l;!2XleUA7MZVqQQd&Kqvt6*fai#Y=)OsG98-Ql@AZ0HfEukuaIgna z{u)^WMC>20I0Iqdz%Z=z@L0-fgE0i>8Du{f+aE(dl}F z`@EISbK^jt%d%d;5eqs?;`3#aVnoTd_}-17y+MHqYRUP}m)ZLS5@7WhV@8yf32emh zg?!u>0E32c9>n2_5hYH4>J8ul%`k{A|IxaLP@T{7PvY`z9DfLO=WNo9g7kv1qo(I| zDNrTOsA#r*`ae|GhcqfmQ8ww9xA0_9d|tuVzr3%$6Tx9+%ap${8V-LUlMHC>8>u$a zSfuB^eVL{S~wAK`&yoW2%{N{j+Ryak<7vlpvyX* z!p{?T{NtbJ@yEZ`rhhBY$$0H^x!im*F^Zx?xV9$+|?D|n4CZxCG-!L{rn zfJb(B#Gb-`ml^xJH)1c_+n9w9-#Z=A-;JDw{oX~sXnJAUERoth*?uzpLjt|7I=yhfnH1BNhyOb;Mrx z-T0jTZu2_f-!CaQQzeVywC!LYCNTFvdDN2mNglfHd5|2i%duZO4jS0I&j;q#x zn1;s6C^VFYm0`kvrK~fG+gSR_c`%vW=Ztr0c?Hfw-XHWBKTbk|-x1|}ZPoY(a7RCt7`Ys6dnvy- z=WsN_xAo0AR?S^mjEW);ibOI@rxhB1|8BLRMh{l@isB~;mT1tFNj&~U3X?A}j1a|R zdiQSdHI74Bz-j*WNLE^UsU6{+oJ*?MiF&lO6fLOqgv?IJ4fnx2wA~ooQot&wDR7@8 z!13TUAOt=0vx(u!(ZUgKQe5&tm%5*Dp22U{CR}~g3Lg6}84w^#w4}uzzWuU)2b&?@ zKJvmTUMGNC7>Dd3yy?$^&C=fpY%LrL!bu>jDcWm^+M1;s;P%f0Zp+E)Frvgz!G}UG zW-0U^vk=iHc9|anIZwSQB97Qk@2k$zLTBmg-I7eucjA-v%X63n0`L6}Mo3J^0ue1u z$rGsma;DkKl{BZnYYv)|hLv%DzY)bG)zyigd~KHU-&O`9fEN|qOiSh{)}#py%57=k zyRVz+V#o6ZU8tPGiZ#s?dAOJu<)G@T;mcsH=2Zmyy(E{8pDSH0N?wS1zr~DC#msY9bePWv)*MO}1 z%WQLZTR3#^pH<+4bYvlaNHYbd_BSAvmjg0jqpt4DvI!+c>SD)7ijd%XO@;SV;gqKm zaEGzJFAX5XiZYU9;MROO!UeE6hi&qWPR2moNMP2Xop3-==-sJ29RzxI$#U6053`^JCKQR^hKIn zH8}O=qQTi$BZDsB$j8Dnx4k+ZcUys3OR$Kq0I|VW5ZOp^xK{eZPCE^d{PB~5^JNo^ z_X@|MDXgKdg(7=@esfcrew-5{j8%aW8e8t7fpC<~a{R_)YiGRn9c=^;*T%n6dH zYfO>MzNDQ(Lhj0SdJFsYB84~TtXmln+Tn{l(Icg_kV$`k84rwxT-7D6n<$I+6yt*2 z+^m&eOEKwzV&JDB0fa11&YC>lcbN@%oPk{H4KSa%w(Rfmuficw?%muxe*SV#eb)?; z+-}e#$`?fYg7q$W*y)J*=TMx}o@`8dHS($qcrS1jvk|n8Ld?i{5KL-oCeAHX4=>jR;`5Yksy zxa!tWghccDI1L_Rqy9(a z5$!K5{F}!&o$>FSX?Yt(irwsODW>v$sOqC@Jjn6ZOrW2|raS99-l1kXJlzoh2z9 zTYl1iGL@vgLvTWkWcdd9g_$9rgl@Tpnl9E*CsPm8&Ih zYz;WNtPGeXRR*k*<$${-^HmQ$0mxT_gK^399FZJrjBI$SL2Y>KFkB;-uLw%c)+>U< zFSyW9_oVZ?#hek(0e6-a6-9EAHq9@f_5q52`fp3IlT66svFGEW)J|z?#L0M%j)`>d zSy@xL>`z*(>+W2Ko=8m$Fh9?dl=R@{W{$1C0+I9coWF*`cmTqyBteE=HZT}Uv#Bu^ z^$kqW=#d)W76mb#ifU@BD6fWb>tj+R@a88J%J4K93`h!JUw)9l+a6)z_rt9J!Qc*m zB`w5(WDWIJHCaw8BR@!QlRs3UsZ?yt@l58#c-s2~7hHbuo)+&=W3yDF8!J09nKmoC3XqfBmw>FC!vO`lStdtbV z{ffz|Ls1z(_73-{n0B?pf`kvi%2560EH0BB-9n%ssU$~<&?wVB@D4m_d8e^|8;DJ$ z*rx9uoM9YY4IK1 z=VEW6iG(MhNchQ?7SG`P{23pAfsY;v^p*id9IW8$HmLU68!Q%!T1!E0G*xNI7yFL5 zT8I2i3>MIJ!qSsK#$OpM4!xDg`;3Rf=gSxZeK-K1fPxcoev{TAi49nZE&PI7*h;+>Bd5|z&?b2v(0SF%-2`L?Fqi7S_;6?y zlRLMzsdJ!Na_bMR1e*vhf$+5eDQ*h?`64Q?45m0C-uyhS{tKL*Grt1M(c4(pdiQyO z=+YhzL#t>w?B{134r>s9hodmY+ClZ~gurg78!J2!$Ww#=6%))+DTM#(*rv(8;V7n& zNQkDalCmla*CbrHm^cx(**!ZUus29fB)XhoB7n`?<1DSAPniyMSF&ueYT8 z>DQLvVG)F`Kq&;Wa;KygKrarOaQkCT&=teaFl^JS-~e0LPHAAiGouXgO4wOKxL*hC zs1*m0!#-0Z(B44bONP`WnqZ4n^A^+_4=|&dAjfs3gL3%wlq|dG(Fa5c*6;ED|GaxQ z5N=}=-S;sZwr2)^u`^=(jGjFNAGE5GP#S>~RTbnwJM8VYfW zuAV8AEhM~ur;Pnja37rv^$wU$1^cK}_Y54o53l5JOIiO@jb|Hr;uOZ`qj9$UMrp(qwA-nE-x@nXT zQ;Y3p)@Iq9hwX7GJE7)haZyAks9<1lf{M}k`7l9F(7Oi5^;Xm}ATY zwn@6$x949Vh@30w-O~onm<;A;i{1#zm8z$^Wt^)LxD_*0mq3+l8l4pCu?2y%^o%U`NvVk*AFzArL{irNan$?zm9 zgVpgW(9tG#_%p7p6c*@h#88Kl40Eq$g#0|wLNH4N7zL0sMXQY7Q`q|uXqEr6;PBPf zm06`t81n(Wdyum;X;AsJ?aj-wi3KRE#}2o8u&8Tt@UBhV&Ln)z=MBZ_pstzDq-Hw2 znRgF=P!F7L(lah(h{@H9HR&Yf-Jq+Jpqj58C}t%<%QImmbS?mA88>C|IjcAV1{Ygp zc?q_NxX;yPLXJsICJ+V7VS7v)JjeEV(v1D2$^ewZQ(Q1)b|5!HEhb}uq+fj(h8+ZC zS}Snei#RV=2fsyqIExr`0s3U#6XKL<3NPb-b>+^x9vL_G(F$ByIRqhQEs+_v{1|Jk z;IJ8#)Gd1oxDuLgG6v?4(e9u*akCya_4v9U4K#G6-D?Mq<$x=cQm!KpV5b!FWMSFO z=EAg_EreRTHcL^&j^57>c)RHHNTiCmxgBI~LtZ6E?=gYSlDRPNCR&eisOsz|2U0_S zFLu5b8i-nL#sV~|aIs^Jt$k=BA3IH{bQwW`kFliWW%~PUaD@+thNr|q+H==L9b+a2>;B5w7f%F-b5Q(sx_jY*>w7uP34)LpO*|W z9Q9%XfK#TF@<^Wm{W2aWE#?h}t$*(Mhs}@pr|pfK87kbKG&2oSteM-aqTnEZqSEoC z4#Xm-vrLt{h3~wtz9Z~+R3^iMmlo>#K$I+YfZ{{K&yPLAik;<3%q?m(o}cm0jXXLb z)n{bSIu6iE2evHgnGn7qmNc*-zdxYD`rE1(Hs4(C)i7J=ET(=xY|}yLj+WsdjusaD z{=$M+7>c&X&7rR^B^>UN=a2kNBvMFLb)ua`?^CV#=AS zj&-@Y>3{Xz91z<8zTJHdjE)vMe)bg{n2b7O2jkRK!-mTy@0u2z=G15x0~x4uc2!}K zn!+s33jI(v?Hv1Ury^R4Cv^j+9vr!JC2V22>{zUBsnixyUH?R6je zh0^n5V_DXkHnC?=ciz~BWqM^~K~Q!D;%NlR1T3LbEB-q!aCjhD8Ej=eD!Njwza*px&~F^ly@m;;uNjbX%FDS&NvY4n=?L3vV!Y zs$F;DOHZ4gMtl0EHOb3TCnKF^eLj0fsHU+J)&pJg=rHW0hAcWv-D;Ue5E^3lUeg#b zAeglvh>MpqzduY7s#|+Gn5Ck9|E#OgOD%#Q7C;UrXx2`a*P@nxrtfXRh@-lNo6H@c z2j8>{gEy#tXgCSsC!nd@-Z3^yT4A1&wA4gcY+OyyNG2x$ z)xBbtZr5<|2(dg1>)CI?kM)Q{73xsoX(|M_8OH)Cn67kjCL%!(>BuTE8W#UxW zCQhY|c9;(?1_tYkQxU{u|0oEvoS8j}PhHh%7eEK08dTy{^ikd;_-%BMv?ON9i#Zq% zP)h5#z(`rVIW5W4^eSD*NxZn&RRHZhYM&adGS+;or+IdNH=>N5SUWWt{1xugxOVyy zSH|h96~?2f}+zfuHJy z)f((EJZjD{V+%EM(pO#f=gskD{aJmN)?clRbkOF`-IgCH4Zv)*m z+o5wTh$L%&;{y#{IePalZP0%;yfNO+qZL`O(Rg@W3hi^w9GhAh-T>7TXQ+wqBenjQ zEM8?>3kQlesWwX?U4|88CcLdfpaSF9;zpAzhMSvo#VYVhoOxcr#{0w6x006In(%~D z(D1_+1ucY?GCXvMi6PnjaVoo3bc1FLPMOTlhIDy_fN-!U4owt}DC6XiTU& zk9ULp6-*ac{{PENY4V1lN;OCHLW*QUaZc*K^)hTek5NE5*dxnVm=r9jndSv^6baFp z=SQJ`whRupGcEMw+vKrS)db;zg;yqm`RHuI)c;fhv}ZvBsdF=dDzzYgh!=c1z1?&UBf4x(Aj9opcs>({i|wri zVVa8o3Dha}LRWEtHBAAo0D?v`IwM2QH6zJWR#p8{27kRWn6q`vJPyXK?W?xNHMc6Q z87gAlN?TZfbh->r5TbhW)5XMtGLa+b;w=}pBVC=bmZ=7Xh(ox<*a zTwx17<3@-JD|r%eSYYs0w>JT}V1Tm=mUT`sVyc!hN+XuX7iJpMLPLw|PwS1i;`-{M zD#yu~Q?}+M2HUOark4kE`Ix$>IG3vo6$4w~-;xvoWE(3X%Tg&u_A)*ou9vgWEJ#0)zjYO)C-up zI~$EIv{0TAG3KPif0}aLBuz|+0L)y32fgzIxnrnMwni^#Mt3gqq)Bgo{W7F? zn!lg65YHiEGlOw9xv3oVx($=Oxxrw8ipoM@W8ocEg1$u3?UI;~@V)dTh>AS#D9E$3NzGsoczWG;>>FB1~52T%{tq4TKGa7sH9c%5$zXOC~ zH#eDA(V)~-B)N!HT6a1+s=v^GO|o-}G!e8RVn!LTJIC|X-aPrYes-9k70~1|AN~+u z;c^#cc8=CG5ewk~Bf3Py8%2odp#zrvP$>Arh1b_YtZdt{3zGHoO}pBEWv1%&X+1=} zEFIUkPVkhmKQl?I#ln~gY?z$PcV8FcwrUlGdVIB=zx+kVRCcvStoo>aO^OQLatw7B)>Lco#$!{P z-!@0`bU4IekZDVTTrkZLULK_t!gS7=ne#yu~~!#EanPgpv$=*FAH2EUWvS36vjckLP_va$IC+` z+=gLnXcDx$nNu8|DRFo{N#RRx%0CVBisnqVe5yC57eRfo^YGNMLuX-xe7Eyun9GoU ztqi+oz2<2}6)??z%2j;CnNs7vrW1mE=#(sR=EVEhhA-Eh)Izv5kXn{T)IP1&s7M-KwQLnmqdOdgsS47eI`D$6c(eo7y z&q+45aI(&q!y$`ei7GOs-yDSJ-io{|sJk*hKUkJmf|OZ*TwUmjtm83~_yg2@QGn=m z)4QG%XtPF*Gr6mlz>w#gn-{uj!-hscl~PEl=-~aMLv%@rD|~cdfCx>tt>ed;S(VH4 z$ay6f!v#EzH`+BV0rssL2ETz-Hkbx*o|r{|@E-)kQ)*Zb$rNcow9>Aa2y;Ui-Duc` z>KcNuirn3QN*faH^C`?xkn9M>bU!jdrH#h^q+_{h&xLR8#|O4SgeIsATvhlr()=W9 zd?vk|CgRL=RFjkAhCtIAgU)t*)zo|_ne^X(M{#~71pRQD_c6ZwB4Hy3J-?P4Tr|G(K4li9hX|53K`LD~?58+W0=b>X(;~O)jQ%M2%Y2ZxN8dkn{ zZYw@gh!6 zPD`X58N9F5)qGws^DlGK(q~tLtX{$#5zGjGuprLo>hy9rZUM4o0skXr2s&_L0e23WUq=;~`p2VSsLYegV=A;ZUEi z;3LhO!pMEUY}5D`D087X>Mf>=OMyB2g(cdy%hI)Y!hh~whW^IqMr8joq1;m%G5Q>T z)HEiz+)uNMKh+2MvmE3wJ}v=i1cdnv{^`DZ(2u3HWdsP~V%W@JS;%dP_jn15w$bld zj`Lup;1WSGSqd9!PaE`Bj4q`7xpTw^rxjk~L-Nn3mE2*Y^3TMPKCbAZp}~QE#ul5- zb;;Q&Jqb@2vXyCV_#eaL8H!EZbL#MaWk&wqPk1yAE>V5|6|;~p5`7)f&zP{uZY5j=H^ zH3RmxUp`)1%pNZxW%}+xOVhpL`_p2#2)8p}hE8aaG`(ze%nmv_s1s|+w*dgw(KX)I z;Ndm9wy@b4RAa%CZCpZTy@f+*!V$~I{=@5H{P21(KJueU zE`@N2cqmgkloMPJ;n+eE&4aUl#3#2ZLw`(b6}msh?z^+J3WZN^H&*3}jWo0>+&Fwq zg`qzXy(pCZxk)M{8bO`9W!Mr&Xp3UVi4%hzsPGO@aK)jh?w;sTnz~2t7^3!?p`$!uN^^ZtANrNVZmp zSMg<)9cW%V&tOZFb7w^fhyUBmyl&jHsa3A_Ce@H((>r*M%u=KvnK3EXBtzk)3A!sv zb;W1eEAEZT{F=^vyb)Y~qrhcdj6GO$%W@2H!SPnN6GnchNCIKF(lcEEm~^kD%aToY zRiGapKc3`Fz^T^_qvN24TruT{!Pe}+%}r;{Y4FsWXm06t(qykED_c#Ic9Ljp=hvxC z)up?IL2?R4#5lD-^*2SAVJbnCkD$Kx*iJgNuGYFJ*+lzm0Qlp7eiPMzZ$Ux&n&S|r z^K1&CSQ-Wcj0dk-v@Di%h${Nw2!9E8H5++$M!iP9M(v45D}3P_mIUFY{HAmJOh|Dx zBcu?$X_F#RBK7{bAq?5y=>j7zb7W3v_=i^3I1Fd>bgJ^&w^5}6=<0p;Nm&H9jWI7J zJ;bma(XgtfW#7;sW}NXT^UNxNSb0-EW}Idx(jtd z9oZL*T_o-dJY=$$lL7`Oe{dW5!~+(CPM=uC{7kHejO1ymVk?h3!lg3P#Fpu(dCf=2 zmE5emrky*_JcYWWle!!u=8xH!*)~6%@{OK(e^g(dVQfgGjP%?rdA%82bTgjLJU_hV0%fTCyhi$EXm489jwSW>k zyJoy04OE#s?nt&el&a4D06gCm)_NAd#~a zgUfj&+B?Lj9>LP4jQQk*nUv#D)>rAKmOo3ctx#7(Kq&qp1MS+V10~wR9lt8vVfNL9 z{GnM|<1kd9E1TiT<&jX*tbbyC3L_r+Fq}j%GerBKQL1hIL5aHA6O(yrhCr&Xs%@UI zca)EkK7*>%hPBPeLwxbIiuEhq=K+o_*()-9#DNC*sW?95FPI*j^^}Q-R^jWn(b@T4 zMpy@$uHx$v>JBo(D&JWP2Pa=IrWZTWnJ#mEMT)3Q-ELe}@|=WMD1U5HPod+Hu znd8taYR(x{g3|QUI1ljz6~(HesU18LSZX=6y&L^A$&i=HJ~NnDyinp!RWrBOQ0^ohv2>f-dA;G$h6`uHTZ@g zxl6D696CtrscxI3c9TPkodeD4#6N9Hg91Oo$QUzG|F{SxIe%GppuQ|lr{NSq2OW6$ z^~n*hODN$27Qyf2+whvpQTMm}y#qaH?*6Wy`RfP1@N>9-3ctDMLj0`-EZ?WVeC9n; z*}djS!U|OEM_5DX1&)Q;gv(5-r83Eu{ZN0~O*fI%)}|D<+aDij5d@yA_@F7qDY4B9 z==^vr8p1i9ZGY1=fDEZ*_!ZkQ0l5((xTAJOQ`F2fTRE5%W+oQehBo&qLXtud`vLnb znG%Sz52Z4wv&90O9uqgJtyHn+y-8EoTjVSRqdAf=o1ttcwP(Vb*}|A8=amnyZLztB zstMhy+KLI?sWHIRkgd>5gVa!Tts0x4IT74cZ=!#-yHc^+6leO45!!-z^HwY8IwbDH zX2C-oOs~$mC8&8*Ohc94HU18aMkw1C`W0nn<(8Sq8wasxD-x?o|0W-~N=$_+ULju+ z!|^t`<&?G{TG*j3mxKleNq<*_=+*rgxt<{sfbx(RFUpF3Yk2@DgbacG?!kfxJT})+ zo&7wEfM`xR1|U4p@JOHnDDfzfpVzn2C;DKqd?O&fWcjm6Ez`vrT-z*=l1EVQb%ndy zsd1?j>-kOxKWG5mzJLVQOMDOw2fL_2DPbjNkRt4#;8L|h>!4z%!oo=~C?ogP zw9|880fGB1SM&Rk*y9G*(jY&@CqvrdXx4DLr@5)`8H-dO5y9%s3j_;Y=i2|!bZY3% z$j8@eOOrSxJ3EXRVSgC>PgwNLIrmDe*6Y`%!(V~v8b-I*C+V%uFVQo*Ku~AB%Vx?f zYyu0Ws(8*Aa!Apf!E~S4x=6%wJkgn4pT|Wf;-;nvbhpiKgu&0}{ul&%FeKKXF7m7FK;>5m0zmlVAIsiS<1{Ud1?#^(}Bkz7$qFfgFUMmEj$t{D%Hu~r0=@BqWkPgWhBU2hbL(IUJaD_>+vHkYg4>fzG#L38cH z=VKVe$1o=uPfIcz#JtdZ7C^*+@jZB(hr*~FGLXe)XM}Hv=j~1JgfEr57oO?phUbWW zI8GUbf_OrY^nX$rVJ_D|13Avpfor5$OIGx6RXq$0s(p3~?F0JKF(q^|`XWdG!IE9^ z(*YU5F6sA^UO1u+GZaL&U9N*Mdjj+GbGZh;>Zc>i&}`%vOh*28%;mIxh>ag;koX7Z zbJT#c53eUoX59GUXgu{)a5TbwDumYtJQW)<&etr5jeo!JHO+GO4YFAZ3?|RkFoY9W zYKPFW;W*@RYiOQ_JQ@$$ZJ6dHbTV)?ym5DyW#ACYy$mG!$MFtty9^VWWtpm3z6^fl zYUwKJ>c}8-*nz~5rfm&hv+#3W4BGC-%b8B$$raCl)H?_bjulHo^uNqUCK=DNx`(As ztX6PND1U<}nl3P~Se)AD&CUJ+BjHnyk_(zhbKzq^|Eh~4B+zHk?l3)nR5dm96vJEY z)E!Lyl1jh8@&K2BJu z8iy{Qy-Df?Vrm?YIKX9S7b0ri!^ccxW+Q{6QGa?iySZmGn{l)F@+%u>wU2@1IpoAC zFqqX;d92{*8sa^A3>hOMd18J%sOykw6NJCVi z!EyUWaUS=RA)_6NLH@iMyG=w*ovX0U2~Mx7>>14F ziIuw+y_!1R(~9c z_nd7qEXin-CDpXau`1Q3?PbjAf!FC(O|t=Za_DrEU{?XlLfBMBF@~XY<0>b{ISfYt z^ST21Fvhh16euFRHX}s@&DipfNh%oH`2+N|!x{SJSKovfqNDt((}w+mo*|{(#<+vM zrGE;kHfDeWkk`s4xW+!;naGT|CkEId>60 z-8->waq&SxXVs>V#=z zkxK^*X(N){J9D`&2QpmJ*THuihxlZ-?rJEU$U>=AbgK;BEMX7c%+&|4uYd6jgSVLb zZ166N{LnmkXx{L1Q};*Bg>Jf5TitQCb>B2pN{<)9m6^4G^+D`w1%h&H>LX8AY&wk! zbk|%cqvVP1rY~5xSlYa^btj&y-zg{an6Uc(JsgpQbmBavNH(G0LX$IAoup4%5Hdux zwxJrCM5_~){F}EJ#;6KDbvp~~?W^f+-QiqPLITwqwg>QiI@g4Z?&-EVA}+DQO4(bU=1v~ zDT2XTQ98_VPHBi0u4`(-h^+7-Y75>yXw$vuuc(lbF7?0rPvOE3%N`p>DfGTP7NV+ zpWFsOb}4F97=Q(fn2i<-YhieZWNt>L1DKj<>36tplFWna#!bh(N(XiK#N6={S1E65 zYu1sQT-G{r(+c0_$ldZ~n|46Qwl^wy5D6_pZ$`C`X>_)Det)J=OY(fQTQ(=`Z{_(2 zYz7@Z3?9a}IPiSoh%zaMGRz56ecr<)nQy#M^^@feJ1Z+PZh8|uMC8mcbijDJHEN!d z{IsOW8Iu;8I?_CSLQPW46>0-ceKj}9Z(`T-a#z_;A`pjRcWejgK&~gMydj>^tT@QC zy|yqe&lIH4YJa7tR3ZYU5>avPgC-fIJ|v=aC_Z`5m1r~1t4l0d<2oBXn6ysS+Nn&Ub!W^-&e+}Ky8aZC?688f-6);1T< z3c2fa?M_tabaXa{>io`(Lpdt)I$Fb|aWgKSv81Tpum;fE? zW%D&!7jlz-%ZEH>_x&gBw!{1C++$n+W0Hc${QSsfbdgCfl*m4k5iiYig3-)FHh*;j zjiaXPIe-Q~#8)hmu>Z1xEI6F|igrlcT_nH9jPWcF3GW3)j1Hv8wQ;Y~H@z1k8yfiF z1+FqQS3bB8jwxuSa3B2Zesm5XKMv;FW7}3$X``Zp2f3`SaF>nzNyrg+w?u zKex8RRaDIC9J43KRXD)z#Wu;B2gaeZXhU{$%xDa%4Q@4T)u@t}+>qE*U#GYQBTfWq z6QQe^BOAU?1|nl;a1-Nn@#WeijH_Aa+1Vv*)P=x0mpXFk0M_vXr2F0<(SJ_X^D`|_ z$m9QMHhXjZ(>yziZz86_=C!=9i|9DYCu^n6DI9Em9{aZ(!t*7pTZFhMt?5Ql0&ihM&j@2aE$4e`zd!trsaEvf6O8q#!O3y)UE~p zmKM=29!4mAJQ+ESttPhF94Lx zwy>@gKJd(wU(>9hQvq`FqO>!!8n_J*`kKG1>jN3;dPt_6(fZU@(jZ`^{z}- zA8~PbqY=tq+rGkY?^`@(ts-81aC{rgEmj>XJ?2*GL5zu zWz9kU?MK`Z?FnQFt$$;5`!9dbe9AnZv}LsOb$*D?qN|#;uEffg5|&63x>n+w%6kh= zi}jxJnTSE#(du_xGi!D%VTSyCs_DHg**Sk+!cPwC-<0Ty`8fccs7o|z`0w0omH_kr-NCqmDG7gE{-ypcWmnSDDF;bX-XMeL?fgbN&ox_}-#lz?- zZ1cPVp8er~SEBtOk8qSnujHPgDM}dybk;xJi}N$oi5bJXHBRzmuzij@P^h>7Y*is= zeqR2>RpteIuEeGnT#u>Ael{GPrEF4Gn=A`10B=}+^S24XH?_gfIB9d^O3G%|0B)b1 zmseCu&eQ5fEq}ncFp7x{(N-v?mY5d`*AnpQamW3|&CPKsepAh?GDOycNWZzEZ)-v{ zE?HF$OQfL2L7I?y3m!Va>-^Nue2Nx17kecj7Z(ks*!pOH7f~r3?&6y?0RpFph6jz+ z23ys}*$8clh8KVyH%_CEaU)6_h?YVR-n$2I>dVsxQ-6$&@{g$~KYepEF-QDnS!!M_wJzkQuyQU@SQ-`E7pc?`LMKTw9}NLxy+W{m;Gs2x z#J>;~frq?VhV~vxkG*Jm$~|ocK+C}l0NdkNbM-vw*55u6dNdDcE`{^XKm;EV z6BMoSqR~_wp{K@hHyl05rn8AnXQJtB>Ui^B9<-%x8pAS^g8nw` z9rXC!){+Dp3N1dZEX1<#Ah0!m$Of`LJYypl8j5Ga8+pV*J}*e50h9)kxygyc29gF1 z#?EM5oW`iRzz<={p(QyeXrYr%8oVdkWJH9xqJOek$r_o`%9uIMVW!8{boiQ7yFgvf z2`|9}Xdk;^dhJZ$dNEcMRYL&uHAOUAmI&8cjG?y1_m=Q>q!6;wt>~z1@4Hl@KDu%#H8b|_5(pl+ny3%lB3C}-TW~LsT&HB)O{>k2s zFr+a&goMO}$nD6_7LioVvta}AWsGLR41bgOle+luI>8!H0NXv!;{xtV#Dcpt&{sWH zLsxx}3nvy5b-@6RB*prVSC&z#y|Vn6{v3@ZLd6fL2p|CuoCx!1B2GB73O0p_Jx5xA zJOMf$T!%@12jUY~Lw*RO9GP$q3v`j?g8)W!Ee#w%0_Na$S>Z`15)b`u(2^?!7rIuIVg1YJJ)fRP3E9rw;yUn6C`Ze5pWX?$ya zclU7b#p)~7x|y^U1Br+Z8LI7vx9Z?a%6XjV!M}JTqOh=R51Gd+R&aJS(Zs z331Eavt0>q+mn036HDkLm^kg(!OI0fU~d# zg8|vw7WQ9ZKGe_vvYe-Ip|^qwqm9FOt}BhJ6bxNcj#2gC$TI^Fg-u1J>n@yofqR@%(Xe6PD@F2BD5J;n^NP`$&$2i}~F4m|y z3_Sg?nR$#sAteHNcv4DMmVf!S*J5_z!)ESA)**+I-6)@uLOg69Ef129CQ5UXXMlDy zieZuS1|&X%_z2)3P-*4J^CM{CkaCly?b27o^_^b|mqP=`h`KeV>+ z1`N55O|uS7_9IbZsQq>=mFE{CJDNcG#5H*+x zXk?X+im%C#1={fo6bv}x6&9K*nEH)+yv5ie+{A_G3hKm3V|oTt2jJ4Ryc~gfSA19X zpuT0lO0))b)aXiM-44{2ZT%!sZ!iF z7U`P90M|)UH@-pvF@G>E7wGKmX;Q|!=Rgr~LeU^$1W?z@bsem2I0Gaz3lVxJXQ)KV z79_*dLzd%N&t6y8aSLW$d;wnS4~fp2%X<46j|(Xu+>|r^ZgV(%^oPVn|EQXPvs-5Y z3UTu*TMtFOUM&+ZXm_KPcCSfiR=C4vuNiy@xJ$o7+hMkSS$~ju6nT98jP&s=41OmQ ze>`TZ{EHGV`2Q`#)3^z*6&wU6YWUd{H3$y!pDs}NJ97Uu9=_n2SO`lE%Y;p{hHD}p z0}BYvE)Ou7Ag{TA;bTAAp=GymdNuSKoX==bo_ZnDa6o^s`$z* zA_x}Zh&dvn?0?zi2lpW+P=mKb09sDT8Z%h#(?tPyXZV|Ze1vL5Em`2q8oFn*^i72* zotYn?))M1f6Z2X3-G%YMy%d2o_5p|zJJ8Wkfa%S&%ywxd`H6{1OU1dIDL+lqWCG(^ z`yozn5^@}t6Qlz7!O!4`sBOac=jStNvsw!G{K)Fyu7CNFC&_&c;ZX9tnCW8`oal zFVc?NN;_^LyKo9dYWN5w7jX$YY*9y*gM)`0w-GQ6X`C*$F_qhxOxVUmY-3_=W7=a( zV?UqF!+*(;hm+ep9OS3OlJiw?v7cW!m;@O`O!+)ieU4Op<;^fKvVSgdpWTJHr(2pk z4^6cV5f#aGddT9zb%5lF_=9NtoHT&}7tAG%kHa7a>5Quy%)$bYh*$j)ku<#Vt{D{n zetvK}%6@22_Sq*>_Cq&if2fo8hqKZ4K-c?22Y+oJeHv{~)cX&XqM%QgSz&&)8iReQ z2rM#6mXTlnR)mS5*Nc}tqz==mRT!eGzeVWsEaZPuY|tr@bF+jFX1^wF5u%)bSr};1# z%6}-2-QC{9l9=7zm#%0nr-vUr^UUK`Trb-kKoSyq5K$u zZv16fGX9(#&&|!8*`t}T!I_NJGz|dE&ri%=Ew0jjWv$;ma4+^R*$7I-gGQM(P;;gc zHQv1=Y>_vIUyWv#TglW5CV36OxZxnj4S(|xKi(z3+w7ykMv0wVWcdexQh5%^!>d+f zby#GLIO?A^m`tO=pnM}q`@_)y_PjxO&SUcM1Vc=68jY6tLwtp#dfFJFtMA4Z$!Wb- zV*^F%ml4tlLD0D7rz&Wm@#HYzLn>Nl#;|=2+y{;QYt~WFK#%8sgZc{^kM`i}QGa9X zH)Q^C1Zbfuuz{bC#s`ftIVj*K()lROL}j^Z!ZG3R8TE?R=e#i!FpBofR8|SeE$%x@ zYwC3#A19Z0YLHcx&9YCU@!iq!T^narW#jBqYQ56&(bsgQhP7(gFm0!3l0I%bQmRyG z%C&*ytHX&(VRc1=N!yQU`V5`}#D6joAt!+k8hdb2AfM<@BAm^_sehVJ0u6j32E>Ekn5TzgciBu#j#~9T2bFI@Zv^DE0v9k38x5j0^Vt!nY z!fCUsdsZ0v-fiBVSbtX|#pi6$oHR$~p~8(2OhzYS3be$0$W%)D1}XSpQZK9>e=_BI z?~}l=edFrb3bCj7|V1Gxp2=gu{Fe^_{fq^_3Mq~o}LP?b->fIC-{Foq4cd`v|RhA)ifNHe_ zbO|%Fy6_`^=nwpn&*-t!P@@&kKfCbxOw;YU<6)Bib)UxNMI5JSO+v3_Ve3*+kH@md zNcLDv)Y#HA%&NvEvV&-TKJrgw;{)0FaPkX06s-?=>wi1+oZuem%@5!;^FPYw`?C4b z#IcV=>!Vf?VRWY7Y4;scoqn$$T#p5A6OGJE(}xu)N!hPlTCUcRvGhJf{EVHvdxW4oA$2}X{m}o4f!8af|c~I#s zz{E$@@Dbf=~WjOzT{7AaG^Q!*dr$;xP(&9%CrmM}&rQ=;r2UAJ5N^DCVjSi$=Y> z+JF2xx3Om3UAr{HCXH})8_1Y|H+IVO`p)U~)%5Zirl;%%|A^`J<@EY+fF@7x+&R5- zHN9en>1ogNA27XhIlXhbV~64X$ahR)faOvOpQNYu2HL3)27dp*a6;&Lt>3aFZJv4E z6SyRY;p@2hYt`h`KlDEW9EJmZ0rqbhy_>?OL9ZpP}3#1psiI&1H-&h{AZZNHDXK%;bH;fnSZ@cj}`H(c=9-Ts~kV_63hr>ov5)0iPOuf~tIQ~`9j#E|kZX9c+ zMq8JI8oq{^rcSB!s*Et!0^f5a8Gkey7~16-;dQIkavTyLlJl|eG%KlRmpi*)3O{us zTBS6nC|f?y;Vgn%>(K&4@)|Y4R|mh1it-uYLoedw>C>w{ zazXw(IyCnC!i_OpI&`6p1S&(k=Q{pbbjdqe`tDnwMV7}(sIe|48pJ|RbAO60VNG&{ z=F*a3mVf$bMT2#uFCG=hJ!^ zkKOLSzv~DT;>R-VwA=o#C3`K`xZPAh2z^z<|MMvK-@)vlUjL+WB9vO5rM!46rGL`0 z)|bSsH-6|SBE0~(On(Dz<4&Ls1*o*^=+Pdh%BeL3;FMDHu3Gqf4D4GYe(ID-w9=O8 z#Ke(I6p9ndWxI`7Xg z>R8oYzrV5-hyF_6iw(!$#em~8+ARDXZ9%%TD7RO1=r!a?;LVg#8j(KW>%|D zW>c$A?n|w{gnyqHO{tlDl3IN-yIOrRlUn_s??y(%=bq?Ara1*Un4lWY9L|Vdq$>9$ zKk@nrdjx&oBtu|&HsB9n^!g1JBxaAg153pR}>z!#HlNq zcv7}|FRtIRnOwi=FM+@fY-x0cT#p+6Zz6QH=Iw1et$*|PHr1DvL*D&4y;)_S&6`!z zsUBMeP?{h|x8WoowzuNzT{9V(xZ@@>vGvHm$_q_U(1vx`TlTRUw}V4n`Nw! zY*#Tlg)y}E?!hQo)DJ59@6*2*8D)m2v24!LFD%(rHY&aGk;CDZfj`%_=G|(7Gx6?P zhpJ+zJc9A2L#T(v)F`)n6czJEg-7S!${SJ9~5#@H9S8phEXf7+UT z+G423++2`xRY*w`hQt48Rr3a*X7Yz<+bC4pjs;*IXrcX~`}~iUW{ztqMIMk;4`IZH z3qg{0sseJYjBTaxafwHm~8{NXu3NCtDm8RCmX3 ze_)xX*stU5@d~wM?x(cEu-2|5V$9Y%tF$DXqMPbaH0g~kO>?PJsLm_aHKWj>Xgll; zgF$atQQ;i255GUPlBVG~WFK9QGz-?oNPoH*?0;4lgZ}K^C}(js*gv?FsQ)fr`?x5u zGj^c#8ZTmgUU-#MzZCn|_Ca$0z9V563CH4u@5uT!;HoNrA7`On(B#Lo{3{>R@|MT+ z)6S`hT3HZzA|YadS|_UG2Dusxs}ZMj8h1^sY3bF_GcN7_+%r8V6CN;301JSB5Pt{Y zm=8WEEfb@L*^3ZBg^4S;@UA;KAfEUbO)_yz=jT&D2a4X7=fIQ}M5_I*1T*ALc;b3d z3@2DBM6?*Xh0lD}d-nhpUCCmMQPBrY71ir*iyN7XJN8A;OpMF!(uVrP!00n8IsKJm zocEbM4hvmxsT--RTLeUr(duiIt$*x%Ig)#ie(uzV_|(YgUt*z82~$%3nUT87ny_l* z?3ox!F5UXrn-GngMUI$Qw<`R^L%+$%oWE2QZhc@aHtecQ)Es?14QMpR+Ypm-x5JL{JtaoSX)=gEX~Ftv@4-h?&A{j)r+?YSC-s0# z2v-M~UX5NN85u@bv&JabUk{;hVRQ<;(WCPh30#h2c?}?&0}0!okic2r#0~~YNl`5v zk*;rU&SS(~;>`kMBU-hwRK|j_+6~Oy@SC!aVKQfuJsX?=e0E9xGPLk;g=OlJ9?c$t zy}Y(O=d+pcH$B^FNev!QMStGo6lF^D^F#4~ECKWxhC|YyU{bBNzXUKOR-jfprBV(t z2(S6cBg`=tnC!5mvq45?!*V0b&!RFYeB1~Ak^2{UbWTQQcxksePYM&*po5_=B3hj~Fv zh8%6(t_??qT;Z=E&K*Ni*xaDa`FUKyY#6sLqC9OLxzV5vfdV$pl7e&rSp$s(@O6y$ z-9&?E&j&ncIBewT0;NPT@OpYOOp4P+RFFiN?-8%udiO4E$p3cZSnGyV4U^wVGDmuk zXIT!trN^1!gQJlgH-9eT#zmA;ccTK@fQ9d$`q*EJd3`|C*eDxGNqAb&5DAYYY72Bu zQ9d4a+Ueut{89G^fJ_(TXS{pxE3pdT_Q4g&wz3PL{vrhKu&RUjavL8U3`D-N*ddJx zZ8s5_@ZBgh2^0n>P>9Cd3B{k{C3iGMe9Es^zZw@9cHNwjpTxyo=W`Fj ztS{o9f0p=X!gV~#<=5fE>&i)shXdj4%za&1efC+~z+YMXq{)!3-9n`CY!awxwRMQn zLJ0)}$?QSmXWt&2G9hRP*@v&W7M`eK#P#e3S)Wd=!YD-wUVXkg#nUT76Hp7RS-;y{ z&7e!YDu3VP$n}J0DUI_NdoQ=hpP!x(mQ^!ESIn4Nal+@6#F-YW=AKlp7HtrPCjW_9 z>T(xHMm4)s(01{U7s{Drfc634aiwQJKvJcans|=14?Cwo!NF*lkDgYARx(ovWk-Be zR`XhLJOCmxmuRJ%U(G1knUUpjjlHLsd>z@M*?)63Y9)fRix6uFUu6vHv=DU=(Ik4T zi}_=m23x!*v;ga*c#1|cj#N^AW`vpWA9Eg(8O>YoQ)uWkn=%YKZG@|O;m?xPdC^rB zQ6d1iGjpra<+N6Li2!{^CHDxLVn3aA)bxhzmhpN0uw{{;!?|>pO;*nCS|erNqd0ot z!hb`?7=%lc8R38Y@cbm*^(N%(Hc6EWd{{WvE`Ag+68cJAt+}neXn{C)ic2qO&<#O1 zEwUnw$zyLkUO6(4A%o3Gh5bnf@-rVCxxuru+!)vpYs`IJtdPNmvjvndIoDaBA7k=r zT#mW52WKCCk>h-k<9w0he39e)<>ffH0)O{HH>?icPk#>baG`mB4?^ZmGd8wZ0kAfP z@i8e!L?J2kw1J9Wh?X<-cZ2awGT3_`5^|A{V}c6>RxYjYB=s8BApZ}WlYIjy?W9Sf zFZS?B416Y8Sa%ZIUg=F2lg-q+a59a;v)YGvM(G(n!c2TNnkqhQ8lWE$en1maWVtcfjMk;J`5F z9XKR_rnt8^Qho4m%cCR8vCOVu&&Sx48-c`PMd--2)zvRH$7V;&3xR4L^ zJc%~=VoNmDmZ+FuOf|{knMt_`1nZ;V%;=+Xfa8x88<4?0e`r_X8&zDVoKH<}J z`HU?Lx~sL&G>e~mFzor?X1Qai?bb5N|9NIO%$M2zfy=ZW2$`xqfU6v7Idch_&@*pg z=%kf)FL60*ht{EjSoBHf%P3M1Q`hnq3M z6-n@1-_I=>e(Eh5;w>3U!LoiMhFw84J-_?es+!#~auS+n-qXr(<-e$sfMIpdBJpmy z44#G)4W4q{;3@ObOLri}E`L+)pCV=dggOPVV-??!t|f}44E_0Mzd(~$FP6UN{)=lS zR9TsDfpO3MajBeo5t2fmO7#!-l(2w#jVz3qc(+sw9&0q^Cjl5#8C0F&7 zxoo<r|6JkB9Q8?gsO@7~A4C47=n20vYFAPpYQh>a0(O*~(S zKeBuc+dMV`4w=i$D-{$~C>aEeN9U(m8b1QO6ZOiCZx*KL+J6pIB&Xr?uBi-eTjNo? z-CpGXYd>m?$KwMfT*>dp=X^1f&-tmmQgrF&b~jH{O5^=-lv@hp%poPAr*M@gsErFQ zm!(WD@Tfn?QDrhepAtJO5soU&IO?MmH<6wU)IR0vASw;1$T0I`3msfu!KbPG#~G` z|Gj$f_$2Y6&`PsOa!-6I5EJ<~`w2kc@w<0}g~ul?z>DF1MvWuPUuBnHHwGAgSU3*re&k;mHj{-?e8?`ZM&gRgOr%>Cn}=~Roez*uaB&oEv zuVjv+)e7u0-~0cTU-mj+4SgNpbLvu19a2ME2ut0!bSiK$r{(5kB&^0fGnrtPIeUYK z?PVfuE&*daGa|rS9sE$b!T@uB+fNFhD!CPR4GRq8DYUMq2**Ezou`h$E2-FY`_0?Q zb*F~RwM4qJ*n8e*fYUDm?Ek&-NhbxE@@8E|S71>yER%>E`YI}+R)YbY`oN*u(oPMR zDZ(XIaXncM4$qtgOc3fTX3w0#>`|q3rD13Esm;#!uNoY-VPq*zgA8teIbjy!6h&9n z`N8Tz!*D@Fkg9vKPJQ>_eU<@aHI@T;V&XwksW&$O5lH>{$Wrq9RDvP#%PO|WZC8!R zRF0rje{}T7n%Cr(K_#V~-^8erZmow|-Hgs;>sQ!H1QjDcCsm^HQ>_Jwy&$e3Wny;? zM5k^e%AXX0tXms*bu!R@BQM0&fO*MX!p}J`e_i~!dy1FlyW*2sp>umvOE4eqfeI>| zf0kBR{4EtMyf zwDKdvK3Wg?xq^R|AG4w>M?mfcR#SwY==-;y9f)1S&z6XK?O=v~t!e?RB}yWrXU`Nk z+jyh!wa(5*xK{PYb(j>TZ*jkB!)-Hc-U_s>B56PBJW_GAw^NL>-8gvUDQ;G&Ex^qU zt__fiO+8J%Zt9V)B&eU&tQizfoEj&++CG}3Y}_EZMYrap?B@sUbR_2K@Q;?+lHEGS z-wF!Pmmjm*HL?AFZXFTAf-M@e*@P|VV3%M^K3TY!p(RajJANxDd>=X>Hlt${!i=DB z$PF{7V5^3SS0g&OwU4hHeSDd?gu%X;8V|=gkn-S5l$w7u`)=$bFugm&r1KdVCUyR? zCc7W`XL`YsT#>(z7pyPLmVc79z(3Sgm49F4yzR|u3Qhli=Q*Tem+^1pmg*noeQJVx zDW1o+A2SVCPj*cQr)9c7r@Omzn$GyI0LFW$gwrcY<2K zytS+xsQLLBIiH&`lHQARo9v#vE#>!k6;q+_aZlcs8q>je??~#}7;3{N30(11AZcQB zxwN9G>wGSM|4tR(PC0UYJ{q4!1>yE7)!ja2hTEsYu5(M5Pg7kysikBp&_T`O8eSP@ zbOP~Zp((2?ZM+7RHNAGsqqM6WPV}reQ^gu47YzApXN4>e%I5% z)V4)`nc&B=MvUesRb3iZS5Tm^Z9bKog+*9!){$+nSEZlWuN)7GdCP|ycFysr z#g?>fO;A^N@HSp`G(NK;kfYnC=S^}NUaiNtR*oh7g9Ocz>-t|@Stfu3P;}H9W*4wt zi}W5Wa{RfdFMgVwoZ98lY&$nNu-aFs+r<-qQd$^A3!PJ|7j?u&mKy)}=$fVcRHqXq zI-Rhj3Xr~pf?&?Ib{xd&{VYHAZo+8&a=&vRj9jMj5+~VLyYxw?dOLBxlSTqD_R~_Ee!DFsu%Aqfs%5x~zIE%~EY@i#k6-nBsMy}w0 z)s4~b0olauD*RY#sFg)LJoX!>aI>Iu=;^AFLB(9ON)8g<^EPzX3VevP4R8W*VEB-T zpV>LGYFHaCmA604=H23^elFf`aSy!TA4?Ic`?E7=nG2k@KM3I^o?w;V={1K;763)z zFWkrgQ|^)N0<`?#HXYmw??Az#BOoPzI-3=Y(mMof6Lzx}Cz<4Cc!DOKu>cy!TVu!;)>w{a zddzyYSeL^kFcJeMAI4QXX>@9ZzE`7vJ@f~Hq&N+)X?+m01rQf3G=c7aZhJle zCio4{_K)zsBc~m{qMMtJ=d*PSs1d(!gsbO1h^QOJnHx|J&undTMETa<+4d&UU7}>f<^x#nI@k9G}$hU@e=@QF;cCCXVA_ zdo^(uu|1nGrzVvRR$FRslh|W_fY&W?at{17Obn-2-M^bYamrd;_Shf<}VGPFMPbK$}&Jx)#phoq`pS=K36CYo|(>WhGl3NP72- zSaV)+UV_}i@!w7N;?yjSS{P4u=g*0-SYnY(CM^vIdz?__&ZB_SH0Cbw;v~Fg+{IlW zQGP+U12|++ah3M*Bg?n4XaH0(r9z2~q-69!u??_2FG|c8 z)nS*C-{asKz}@hQee7j_^16|)!f4nh(}~rOQ8GlslU*qE^a?1D3n0p~3!p>ZXJwh4 zy@s8~ewXMWeGvl!RR*2!>FaGWC{KeYsNaFfqG)^U_v7L41*8ozeXS_yZU=<#_CG9Q z?jr0;a-85rhvzo#e|Vo=3Pwk8-FH?I*ucgq zlll7!u8)D3+C7f}fVO>nj5jhk&9InHM=;qGSC^h>Sa!BR77fBhjqrsnl=-`?RP2g`I{lg7e+dss(scWmR*4DRhHHKLl8#!Csuhx-A6&G>I z+GE*!S%&uYtkll>?)u*0=Bw9l_6~nq-FhQypi@k}IaY9Ed*>yTID;KzdkW*zORc_s zz4goC-uB_{`qui|-sbizyEIT!<)~n#e?HvaIQ-@C>ei4u3w}Szp`Ud1f?RL?4YNcUON}=b@idq#{0foAF6m9S-Th@;lA8 ze>jZJi&$h8D#LXy*0S@fH8^z)ZDB=3-ufj_GlNP)keuakA3s)$L;Ct9oEm2ix?Fe` z50f)Ea|2m_g3Sh3V>?yw%XMV^1eUHcJ<$-n0a4>PTEt_WV+^dbL4yBVjPg9YSnTt9 zC~${ntf|?J#FT9{!4i1`wESZ2?doN67OMe}OIK0NwcK*(c&$`5JSS-hf6uSfsLhoZ zH38P9LxA0~vPdv08e1c(0-_Yd)F5XulhyUaQ8@&EfNwP9+{szS!l3O^8^JBvL2hK3 zA|--r%|q_H2fx67i!Wa;K6~ajPEUigvql6>;K|s_%4oP*#%F8UC@sY)+lq>kT~Kr+ zT9nZlU8rN~g1FQz6h@I zDSw_P0}0|t>S8CpP0G`!fbGV3-3f~zh>y(xwA~yC-Vy3*X&~dfKdsfAcLIGS`ZT z^;kz9+cQ}Fw^5!#ftLWDBF0vTtt@zUg%Z8QTByt-xq7`|rRZ$2HZTkwxq(Gf)1K@CxC1L|E`L%1;ui3LSmZ{z}}N3HiseH)o;t`K2thGr6fTU*T1SugC0{!fkS1^QsA|{zJx%k3y6ZIl5N{3%QHfW;H)_~M|mK-0)$SQ>+ z6m+OZhQ#XVC^v(*5I~X3Ppm7KK^i^=3p>0IjMGiC?Zn4`Jf1#dFQwI}lb|DXomKNVq!en0Aph@HR0uwne`Ef*;=#*m z7LZ&(`jv4dtK%2c@{kG5Hd9WnA$`KgsL?rb4p#f<0|t>NCdS!L87H;vpGSayGKAVKm|Hg zhLOeEE{M)?q6g5j@f}`|JzttJ8U2wVw^r1cLnw#xxLVU2kNq{|hfUgQzLUf^yT83e z>YAKkq5jHG+>fctj=kU-69;XEHO6xHvBvi{O;n%<0M!DRD*Qdb ze4oMVkfamc?H&$z8Oy7oSPGGSk0;I^z-KynJRH_yClr^}>`AK9mWGXmka${!&qu{+ z^Zw7N(JAcU%Ost&d1w=>w7A8dLF)Z&m+0~j1nnYQ^nY_xe=f@p6^8;x_Bo;a)ZKy( zaf_nMiCYw1y0$2~yvHr#UH)lX6kWm=t;i2;i(q7b>=s3rutmG0vq@Xzz?UHD{`Tk3 zL5)5;7Bma8gNi*8M^AMeT?OuFQDj0cCqP~9mhf1KYTKx9y+scis#~L;H2(s$L8>jS zWkBy?AJLG7e|SXIP%brreH@0@?;c!V%a+DtARls{(nNcd#$)Y~Vb+K_5f$<6Yzjd` zZP8_^8nRH!6ejusQMtmY>LIl;~tl7!ZP9;r=@LI8NjW$UNat<7hv zDEU9!S^x3P=Fa-F!;Q`Lt!LeMSYVXHrqV#thEh<3f5P}ut_HM>o)!Dc7_hLv5*D7d zT(SV=7oJx;j`e4od)qsQd+R^%9d50^dcODK@ag*A+x7KVD!zlU>^H`OQxJgDDuF|*BAYg=!2H-B0WW+~pK<%(<8 z!JPTHe=_r8>dax^rp+9;?h|Id`tz-3E{nTnUbp9Cb|Srft-I!KH3B6(h=bA}^7=tC_QsVy}l|2(*_Y_Rt4NYY_L7vuJp8({=)F z!eIr>W*@f#+19%-kT9Hi$}&K>N-BI_>KPjyCALL5Juww=RZ+Q52B2~)P=68>A0hPY ze}}^vp}5cs$0$I22VjX&d3b()?(zTZFD@MPn(y8XzJ`BV9{u#b_8vawk$V7K*LBG6 zE2SL1dh_z>`p(q1gTs@g<`qc@0w?vaNU}`%#q?pZ0o6Ppe1mWF-4>u^F!lMU8GTas zd?fT}jP3wB`6Tcim;yCb$u6x)?4GeXf5}NNMcpLpUJBZjPnslv{23>?`m<}2H9N^B znWBxv9BLQu#3$>Q=glK|^!ecz#~&}ib=yb7ow4`-v-d9CZ6jBL@L!>Pd~70y*-~<5 zXFk$2kL`9Ro^-c+ZS`dKle98SmLwz;zyUzp8VUb>>)v|ZdI6xMc6Tz#nQ4naf1#eY z?)&lZL!vGMRxj=Zxo=;;dh^4J?;|j$k;RRTJM7u2dQg&vZIOm8+g791wM46;dR+ji zzQGhs2m8s)oTO+5p)Hc(Om^Xy?}~bdVOpP8{@M($`tIgtPwnfYM;t{yd3v&dx?cn- zUVj}N*TX5l`SI}eA8&=^*7uI&e+aPMnnzaa8G!Fd(=cxwT=0D&JhI?hv&MQA{kV@b z4YS1I1&bB;z>y%~a)eo!i3TZqmCxUP{3}~FlTB4NC9pG&a>1~F+gznE2mUr6VN}WA z*i}7F5`F;79JBkXOPw18x3o=fq5v=hEre{mw=YY3Hi*u^1gF{h1hWj#e+O_=bN&sYkczh<(rpb@6INy~uk%}@0K2BqOx<6^Ewc#`rUK`y^|`jksje1S&= z+9}w;oDLi9q?^|;~3M|-lTB1Uv9yr zDq$Eh^mAS`|E2;X)5d+)7*r==0eynafqlGc*!Sen$ZvCS2sWI&{@b|Fa3g;Pj*(1q zlGiYtA{;x6$Uy|&@_zy&>|v2kZt9V!)f!@m#jKxi=&h2(PT1VCkV9Cqz|CmBoZ)GQ=>o? zNt3W@!*~8f7i_zx-Br^_eAlVonLaSHmDsSLQ^2Lqmg6>#YSkM8@RiT#LURq zl{5t!mOtP;p2>_MB54=E2TfIO!}@dHEHC(dyk2H}zUsRv=OY)YA|=))lCa8Y|I~gi z9?m{iEc@F`bt1#&YrmhT2dFMCP6(RS#QiUu8=QY3k zyymx^*K6E#>2M$3{JqfTi--C$=B;$(u`U#eh)wG>!vyw$qKEQca-0x;(OK>=oTx?@ zUC&0k@Rlx!DC)2C!)P)HNQRU(BN08jh5A!io(fXNK&K;FHOVW2DC!@IhbvVBaV>93 zo_KhJV?t0Cf5A45$4IB<&vA2bYtpqYA-tM{prT6%ubypZt0zy?)#GoDRwt?yz#NuM;MbK&~5_4m>Wp!85 zQN5_AoU0QVpweQYOmSnGMaDaH8pxcfelr3JUV$tRe_F;3-zrlDi~pbluLlggRs*kh z8@Qwc!w-HJ7&3KBz8Cxq3by5~*NPKd>WgIFwM32*b0+!7+_SFd<{1~F^NxeJk9Q9P z$i4o92VE}8{(}Z+&<8!UKt5L>4-xWW-s?Fzk#fL^keK!zL7}FgP@jO7W& zN`{%rmW#-9WlLBG{y~!wVlF~s_EIf$@s6){J0RJYkY=Pd^DQKa0B#l=t+==Uu`;daLcx`;EDT;`T;OXi3fBoSPNg8_b|NU$D`TzREza=u|%Vi!)`I1WB z7Vr2rU8Wc5CcRA0r0@x`6*Aw#YpBOpfAh<%i|VoU8Xi_fwuTsV)1Wa8AYQ|~kcna3 zv>K*CL30p`uu1c>R4;XyqKHi zrAL`?tQRp_=H-gMw0qskBrE0TZ+Upm$4*0XR0Kc`u-JW#94v$dVbxyZ{=fjv$7t#{#Mq@7NUg9nyKX6Gk=DY zPkEi|*jG%lY_tsxXd5h*i9ZIaM+472H?G8~vSBwrYEEWjlPKI{BJi?AvW3f4a+D$4 zP4v23vlupLF)MzsSRmM+A;X0Ce=opm9rw!FdV502>je)g1k1beOAN4RoY7)#^(Xe-^a*Cn@+N zpIJHn9Z}z9`Y>8(+zCtR@dJpO`7?ufV)3`md)7DZ3qv#H$RR4y@oG}BbMURH9RHrq zwqvaS7lP8GjL}a|=GPc7WIs(2B&N}EQVkcZP1>PHAOlJ_Qs1o-BgY75-}~6c^ncL3 zJMQ|_p1UB}(YmdSW`}YREb2bAWxvRIj_g1|Z!)Uxm zO6av4ci#@ZBOl2`*}a?UFkS;cdq7G(&i*SPj`72N?_;|&0Lo?qd-fwc)yk8ZORFVo85r6fCrL4Pf2kq2v%KR9Iv>-k z=)AJ7WNdBb?DAdCj>sfdhI>a$>3SDMPMwW=5ES{A?hJWs?Mi5Hp+WPw<|vK?KVwi zEFvYOLXhJ<;Hz3#nL-x5{^QdHGE(fbloSaiOO?_6i=zU?C) zb20oAWaqZ_GVtEs*wE;=gQ-6eJ&oLopz5aUU2K=S8+UIK{g&(veN49`IMiKsgxs@$ zwkrOndoONt+sv2VKDak7Fv#upz+zwxyBW~Tb-uhayVcX}fBo=U)*w4ETGp2~XKbE3 ztZ`sHx8tvDfx(LoiX zE2Px85balmKIk!_X73gPfm<3mDwv2F3Ky`z77_LKuCjyKia}z8gzX6U?(GZ!&JM(Y zaJTgjg_Q8xeorRE;ulFOP3p9^#?53fLW~(}l{qr(vxd zx=yTpJwwjYFJlH((FWMHWQ`oGGJ=m@UWpC{E(2;ze+Cupp{0y_=YuYem@!bMTb5}B zwR>?$XbQJ)L#sk!APq8ZAs*t2iSE_&=M4mgfG=jNjS))Es|+i{6}?^;!&{CMG6A9x z8CyktcTwyFyW9N>dtzEUVdk})ekIh`uI=fRl*B%c0Z&w9_qrI~l1{(~GinOENi%_t zc5CfJe~x%Z3%1T~W!UR`?_2f$K^>7{Wlnk9PDeLlyx-OxE^hoKSdT?$L^CTOpH7Gb z=;BR~O-7U$3)xSLE*t56*;+-hH5*f zf1~Dv??8E!pXhRP#Q>60D3VfGK@kl`4r{08Gabq+TxQ36CY zLJUQwF%0$PzxZGB8UKg)&|zdEOE4zY>kvXFbBKh(Xhj{;r~^nv7w7q0u4w-JS_Zg5 zSk}**jmYaiPDHrd@q=f_52oU;?++nye}TMX&+?gkKQ|3t(*|?Z;<;|{N7}=4{oeHO zN7}=4-NT+~@yzu0BW(=whHPyb&&{8&|2JtoH;v!?sGsj)Jn5bn4Fyhs7|gzcqUwqK z@JIYo{{0pzll66Ub7S?B=oy^8di&$yi#I>M@9)8Qk?-kbIyk|)rYa!^IJ=8a3jGOIhF2e% zAM`WbRt1|b8XaShC(oZAOvQz=f7+55(1l3$O1_z%^Toiq!_`6rA~DKoCkY$yY50a4zd^fMf8w10)IR%PzZ$C*h_)&=;7|dQn{5@o|fCJjg%r8kG_)<%ex~)z# z5ecDZ&bz{@&!#ul@jcT)L1imcxb%EP=6&z5m6k4iK2UKQ4gz@~6w-^B+!s`oVkg{-UfJx2MO6d>-kG ztVY3>Aio;0@}gnqf2`8qo&mbkzXUDN-zw6ezZOVr>PFb<_X1z&?f@_8ADgVMKbO@? zKi~+AOZn?7oj*c#E6|xr>G@fRMIaP$3`H@Vx>#`6Eip-;NyW}knII$|ggE}4`0+5e z+{@nX&+LWo9kd*e=xiv8jsrt$GH2`8Gr_+pq%(H}0pTZ)f7!QiJDfSFLKT7O?HS=1 z^MdGpZf>LyPo8NsN}jbJrsS6*1N6~lwn07}zH2`u$&~YZoQG}1M4_Nj%3+CR)$-zy zRhJkVm9zu7ISD07(WAP}@LKq)$o-8?_A^{7t1#D+7?|JUQ&BP29875`lAe z^fa2te`!cG=!^!?6x0{?>gx8+Yy{M#h^DeXv#X?6gJ+YmQAby8YoS*ux7go1FwBAL zh_l`Dra39vl4C?ZJ%Elbdm&r7#uSQ_~Uxow}k z+Xku;MfBf5p>inx{^}yD;0k{7u3!ZzQG(4wfA{hey_X$BkxSaPGIPVnNahCV0U_x9 zcUUR&N+oC5Y(Ku||0k0GG@+CMG8w~1;pg*nlXLMnXSK?~P<{Dptx_(W=C#=5@A9f{ z-k}8<5)!LwB>bWDm0F3HY$cMrs0LVK7To)>5SgxiC2XFu0G-O$2SUEe?qLJ?coq%V7s6r}sl>?F;V9lcsD6HxmL50tA9mNh0vykLPu!(X+vmYO^lShxN zoFwjROk^RQLf^{g<|6qhenvC~e}ygr4IY?^M9hqr2L(P2dgCV5te7egJK^_L6+jEp z9qkbxBv}U%Ksb^RZx7k!2CVysrJmxri4#3wpG4`e0W%2GMY0k&@gTsug>CG&v(8PE z*sLt%S;@S(_~itP_`rK`WPl&vm&vOY zx!n9z$wbBsJ+DQV8}(3qGIq8I5^ke2Q4(UT5|P(zZ?0kQji%qa3+eR@JwQOiWN8X; zA6EJKxqxi^h+XClg{sxKf1a%2JOG}P0r!6JrSHG0h&0JuUtXyTXB&C_d`$Kh2^-YR zcV^@w6l9j<5T=qg3zLmmX*rLO0R541o0RB_e=EU;_+_)?TLh|&I(|@tSg+M>x!rw4UvWsI2zJu59t?j+%8m0MAe^OZ|Rr9UkOT??B zQ_;sDWKk*#U*y$>k!U>8u#@@xm~a1qyN2S z)zy@xyF(V2+PMrXf1MOJRk>t!tw@)GF)?2Vp;>$RflYDvU6A!AJI@P@e2jSrmQA)s z^y?-Y-k&-7d0koCO3!<911U|}a@#O@8DC}VHGBg87hLEEAs5PZr0d8Hv&g&R^DIpO z{95N6MmRsIb`B1Wt+=qxZ)59GSEuNR%!IBL(5@?^AnkhVe{Zwl9(APHs(`%5&bgA| zZKUoT$F(S>v;@dq1?0B@A{__zd2b_40ZppvCCqG{ZECgxuS{?bc9TvYKR7+rjlcp$ zQXMZj6hivA(6^A_7`_!P-oU2?$(QWUb|oUZ-mH{=sM{lCLq2|xuSAAg*%kPYs=5+k z?&IYZ5M5|Ce-o8DW+=H7;5MrbMx7rQ@NwJvH7g?Ak>lI#Hy~bkP*kQh6|FpJYMXSV zqui1p)h%C-a{1&fc9 zp$x9QgkObM`8cPTrJZJ!nXxfz^6n;#$l?&Nwu{e7E^ zC%-%Tf4}NcvKSx1zl-GIH%THZW=fV~r6#>PIym90G382h)nvcr?@y!;LV6K+`v-W- zf$?|$jl%49fqtY@JA1KbCJ-r(Yh7RK_`ze0SbF>zeBG2Q>K4Y;9dD@{D<2^H9oqM| z(sh;pdBJD0wLMo8mqS|tqolm4<_E6(tqVE8f9!JDnJ<&{S{i=%*~-6CZ3~~SQ*vRZ z6?%QDy`65;fPQ{@k-FyfY35nn)3{+GpzVt{Zri~K#>9|#G@4$T6%hd?l;v)u^GewL z*P&1o&lS2W+Dep$?2g?6AxR7?BqdP=o&#$F2xx6te`6|HD*=HM-EB3m0%>644FL6X ze|mD3e*uU-J>__a9ii}-*FSNolwXbyC*W?2&jk5}2YeyUv!q47!>9_1`8t4|2v7N6 zz$AZ%rRZ;N*5s!E1N#~LlF8)}TLz2k(hq>(|B*ok_3yw)xSYpcg7dnBqlU&&_v5~S9pp7kXu?v$R*8`q}? zA^q&;#)j%MfLvI>nf63IAio|xx`bcgpliYBnR`2+p9@MT5>+IJ&AE)CJDjm+&5S*H zlAIl}lewYn@Kc+M;fEkD@K^FgRS>Y1P?Q z+1qr(Wh83W5y20w>sF|{+aU04XtgOrI@STwabb~;vs9brryD~;E`ubb2^oHUva;;3`u$ETHd17Eu=U{CL&^+e`3-MKhh!H09)orH_IUY>6{lqM7`3Fki`&mFTf=>zoB95%d8YgfXAQr|7e|bX2^@2s%;AqzYI)4#$>}M-daGGi+IX57hhKSq z_xwUiRGGBk{I&fA+#2Q9^laQe4?>-ZE=8yrgdEoh2DcE~;q+*?%BrvH&5^F`X%uqe6?n7q_ z3ju1p^mo@)7Yxw8TLd577CFk19%@#~`5a`d>xNO!} zkBOIb|AFG_3ck8RDf;nmdCdM|U%DNTlmuJ`W*MlD_%vl_WGR@A0A9(y`KuLJdf4i* zG4LtPJL*FTqKErrevMWAC~EBSOdqC_RrWdK+gS9OG~mqBe|kRXJ{e<0_giAL;0*K3 zVeh)k6gdQPN6Zuj=NlW&J=Xp9iKs_W!nsokJ(N%w0{9bJ^lB0g>_^^>dkuFD`jiOj z0XW0Az8QCzz)O+{#5420S&8WARe}i`9emt_{?%Y}^~cQ(xJ9Zd1Ta1*1f921^B0=9 zLs5vC6m5q}e;#lVq`#GI>pNC zb_Sc~ZMt`WG2r$G+K&QDM&-DiJV|?JKi^|LDTDkoe|CoMNMPt2;*+*1&(GuA-=*_& zH=b^5sJ{kCyckYwj})Lw?XsFSBJxcOMa_J7*yeQMv)+Cx@&E@j;~TiFnxA zo*+see>cz(#yS0=`Hb>ngy~a(N8%z4=MJnTaUKD9t8$f&uF5U%jx##Ee0$aM-B~3d3ThmONv@9`Xq8 z1q0Nc6B=9g^Ks?PO&Lk`>f^9PBz!hfbhS`|-c&iKMV!7EWEB_lea|6W0XxMC+Hhs> ze{iSG2;sF6?sNuh1(a6k38o%hM?y{9Xk~{HVWHa~>S@$41>+1&!TWuhu5UzJ6=S&J1j1j~-E_Xyji zC`zp;oK)7Nx$OyS1*FNKDtYVG*L*Y3n@dYzg)hUD;0miDKXip)@+S+;bp>A96hzX8 zyraDtUNlaoW{zV~aN8BBbiZ+m2PLWr0r9+QW2A}P>LOJXZyKY2M7(ZiLg`yhe=y#u z!iZN({SsmVj3K^sU6z^44PXwiViE2PRfc6U4Zb}pPUdCG;B+;uw|-!3VUrK2aTQDVHQHwZuH7F56aJ zwr%9Hr5BD#E9|vO`ss8Y2str%e?5c@^2XG%A$D^O-J3Qu>1WBx(Xg4KubF!l$IwmD?{0bhu6#YL)uW{ zO77D(^(-r3Ekn|I(JCC#V>Mf0H43AZ*?@A)?Aw2_@kNq;@_q9zhzH&$f8^+Vv(+cT z3`aCK$PR}CwdRdVz9%vS8tb{v#t5-^VE@d{Q5*QaDK{IoT0ER!dfe5Rvqw%uEf7*J z8S^cCMNEJ!V(j}HyGpO-#wUSAybpN0SLKS$_CnD%pv8J!G)$15SC1ZD@qbR)ve=}o;S0kL{mCL`+ zA*;`6LwlV-vBFCwW<|BWnY;KsRQVh~5Nayx@y(637qAmW8|F!Dmq9BuBuwCc;qpS11!$z6P-#DAId%DPHIE>qgvbM0z0l zr-%IEMSgy<=KtSte`Xs3S~g{k6krNxuz_R{3_`O(Uo+i1NCnS~Z4Xkf!!KTk&KLEv zD%WfN<4w_&7$OuANZ%{!ngf_LmFB*6;DQ%Q#rLgRTn)O9mIs09671rBUt!A7Y ziAEi2lomVEp2irY%k~5 z(JKX1e;h)lLBk6EM{L`uD9hKnby%TNeXYB~-rUtWL66gW*waq@QKF4NpnmgnTqO0-sh-O&H0FV)m)(u znQ1W}qejj=kO|$MfJ+RthbSNXoNqEV;mw^sf1b=gj2>Q_7F+;#U-MTYfSxm^9vH}? za=#K3@O$?ShlD$UfWI78|7I7YY)(ffv#2kPV@hmT&nD0wdr#J0fV(8U=HK|z>`XG@wOQ+r197C9XUt&a1eS%oG$K_tF`7qsi0Kh^ ze;rM$swk;LiL8z_r$~~rh_{51yuYwfw z*P>9fwF4_tlNmX*w>fZOO`G0*D`NYgvZ6?n0Wro38*IUkQ1w#6hC-c_0b5r_wysQe zFb)SNB|*G0b(*O1Dj*~GR+BrbPA2RNe+HPl-vTVA@nMw6z3UL_JLo>tzo!qdMO%;Q z4s=1a2g%)mwQP~ji_L#};J|Gi1Ke=1jVg47wY_}wu;M_50*a#oIYJuP1f zSc_j3RK`G+h;rME-*Z~{KA-csf2k+qF{JzokNA}LbGuPN;sK+IGfeNwrJ>PG#~ADa zCm_RC)yKD(C-BW_^Mr$CTU*?j>xvn=FM^HhdN+oU;nsb4KV36bQ&z0R>M|Vn8_G_l zx6R91MNvd0Q|ih@nK&YgaD8h3JL|n0Qj6i>exbL91WAn}Ube|D31nYze;V@M(2ySb z64bWSq-I!Pt~FkuTHE;x=~UBu*8XC`UV*~GNn>1Z3dt%QN>(8;lvi10d>0Ee(#%{j zt;2^{!;Y`H>yyn=h!nz)l}-*ca5^3Njwl){tMO@#Yf;|Qo6v_Bn2Camf+Mh}nz$!W zE#i}=9LY3D(CGL9q^98lf8s_C_aT`I)ZnHG{ELT6JjUyesgL@rC}3dmt+>G6DhKi~n zLw6U`ha`c!>EFjncv=1Gcd!;SxyvQ2lIfAkn5zjY$5AJ(U}g=G72y5a2Jig#v?-6# zrf*^3U8z&0_%HUp{I%n&qsvm9>I)Ge`ejcQ{xkJ!C5G!tSh8o zZrQNM5+qKY`XQY+)k_NfFvYfofLW5cLu*6{E>XUUr$4O%6+5Po!!qG{` zA)>kdjt9k@e}k%HClv`ii^F(FavYsev^kM8_O5kvk~*GPps%y6G`|SovR0KYZi&=R zP|BA(qLj1%r(A(B7jRLfE4f`-%EzP-V-JW_tQ0h$_k~i;I)x4c@@6Gu_4R!&zYC)t zIn%*$cfh5hICmJK>YVhky_bcmn`DTd$7BFv9TG=Fe{vI{Xdrp7}qN@_$`eWWI?h1I;L$es!A zy(Zi)zEwud39wIx2|=cZzd9{}S=}!!QR}p6iIFL7 z_CoDI+D8+t?HfoFu(Z5G2XZ1hTD=Opq3f1C*sc3OMjgbFvql}cEylCIyDxAQ60grp-cg~54sI6Tf0}M({SLx&Lr*6>ra2HNpAU*%JB@0P zgGs8Ex6aj(qzt_P!S8;)cQDg*?a-%dP_qZYBCF{!y~cwB`%-}J-3|*#k_bMk+amw3 zEtAwym}!$*EFXG$IuxzsOS+^-ZWzliI-(HZ37{l+X|RvfB8(#jy^2 ze>6Yd4Q@G&RJzH5FgM+qkX#G&P^1zXr)As54*a^y@5@;KRV>4hJ0HgkE)D^=!L}8# zB;VSxBua1`P`-1w@|z}hVn9JdtbO*jc*!_*V6Rts1NEuKq?V0eWXJ@IFp>`$v!FQr zbl11a(=j?ji72qWagJWJjIxX9axKT9e}3iErCe-;4!mc!*S6^5MC1w$m|#n9(k3k( zx``LYOo`_iiSdeKC)5j>J#y|T}m?4A}YLCC+f1nHR zuvU}&8}jvl;U3~`^9Fz$H;8jaFZh9f!hXaVq+%{$6X}8m*vYR440!As79`Ss(Oq&H z!^CS6ySH=rpB?2__)&i4u4SHOz-UdXON;!fuiWPnB4tREd2IMtlCSyAD$qpb9_(n! zh4Xi833QRIUYzmPU~!b?X!rL2e{n+?VMI%61&K9OL3)sgi`_*J#_cxR5Imncy3u}6 zaS&jGA)u?ow8n*pC1*oGt`rb~PE;-f69Zol&Igokwz*8FP2g4}?Gh&@2M1Y)|GJbJ zSd^!IC|E>^LXHbLMEBKoxy*rY#f8%pg(3@%P@Q=xQ^89hC;fI*g7NrJf6WE&R<@?w z#avBg(e1jue}Y+8X2%asmvUaGCYzEe+CeL1i+m@c_TU}ByPSYQDu)xi$j<=E+TKuu zh-+Efl4R+BROT_w0N6pT4T)*Z?U2@@o%ck9mUG*i*$iv^+|Fo{j6kApEPWnm@LoLT z4K~8@ZMwt6Ta~)s^k?+3e`A$P4r~MZ>AX^@i(`Ve?QLj!rmbrcLt2TX$L~ajFy4S* zl>~DC@u8{n^SsdtgR-SePAG>y#-z4TV~!plzw>PE3fY9L4Pw8;2Ulz<%}Zl)XpR2I=^tybWA3lUiS$_dK+*!5Uvq z8&ezCdhDP^=k3&|1kMyA(MDjG4d8^{0JM%O1HN{ozqo)%fXaOIlxU-4V3xY*tx6WB$E%Pe==WKo!n+^9cc&a5P5g8=G|+W|#R?UE&YgT#b(SeD-lDbnMFh!_tTrNx)b zLK+g#T(T@9e|O`y3N1gFDmT|cf}CC#?6b)0$&mpj-uk5YqPk7BU!Kd@8;OK7IAS%2 z<=ZL;+`ZQ8GU;uG%=?F)px92YxT#68uu@#N^@49atX4hL9Rvb*`D&pj# z+{du5uhp}cs9_o2a-1^kU>@}pj6;3+36)GXE;!YqrBay0O~DuMc)YBl0!Z{98Eb+pZdnTpF>xSgrWA0k!F2 z>C6DIf8CN~a!6s8k}T*s-l9*H6SS{C9ZV?Nh$fM4NmuU}7A#S&k$3M7sA06Tx13xk zwSS~D{@wjM75FouUHOx^3&h7VGx!Bny7g@L!#Xv$W}Omg;T;61mfGy=aTp8}%7ALj za24k7qvm8*L}JMcb83naiCCWtjQZ@eQJC57PalKS2 zk>%~IoSZEo%Xe26x`grqp)@1tV;%68$6IEa4q9(+uA67cZb04z8;ARNQ?XBZxvj12 zeFOsVJ3wr~mf){X-HU<3t=N~hXMAnXe;}1WN!*XI9GiOI;QLuGOh6eGFI@>eGML6; z2|f>Hf~R7evO;gV!vlWF|~i)-VY_nG$o+As=;&~ecyh&f4@%B z7_*0>2cMFf}U5qKi9az1~0VAN9m zu65uDAU#yy1w2$;?^IDG@Je~#e|cW3T@I>)0~EfJ7w6zOh+oI$(=QMn^7)KppA7$)SKS`w&6)vKAJFML?1ioFf4yT{1Nh5z zFZGr8I)Enx@jhOa+d`@9$zYsfXIJm~M&w+#BXA5fm{ApSG9w9G#9ySCl+toVN>RDW z;-p9EVmkCbz13FVN=0fU*rD5O1iNCVeb$w_W>~zys1J+yJ~%Jo^H=M#HYq4$`mB52 z+Ck&!+3h$)Vh1IOyt#7Ue~urB+g(9sLJ6Ct0yzi_0j>p^OVO?m<^rGWI9n|;?V>TO zj0i8&Ms^mcvs7e}%5GGfmC(#fMYKO$bfg@b)t$+8GxSEJJACl3|B|#j#y}41m_Z_U zS1UC1U{jqOwyT+BP{KY*P67)`t?BlLs6Ks<`RIkm-9yLE)Mg95e`jaSSSee?+{Ig* zH5c5|{j__iCs5F;XOwrC^f|FI0XxG4IkiCDLc*|F@b=`uatkJ`nbfWbS2Zm$c2Br# zOPJo0_)u-|JEsOAo3P7Gb2UyN7#y9Q!Fvk$?x(^B`sq>;nFRc$`P(%=E>3ceA3QzS z-{0SSfj8(F?W{%&e_a0sUjbl3$yJDFiH;Rc+iLm}+l(E4o1dMHW&YE2ov!BS%f8jA zP?zCaie0DbVG%JX4)-csFJVXq3&^vzn>lqqy_oySYyhL|a`KODFr{Ynm0$ z@>%iZNs`SYAaPWjq#2~xhFY+aQ9^*=bou%IV!VCAA1nX=e{}um(OUe{e~h!(Y| z=eo68atQwLY?Xf+EoJ`jZT_?d+572=on_lKKS&>xMh~wq7RL|7ijE(MGD*h|M&CUD zkW4O`%Qf$_=8V4XRP-S}ep+yHdi>z|!)t3HB9@_j_6>Xp{pe|PVB2i?MK~-W#|a0N zz;{X8DQ`qHe>^61At(bI8Ajz{IetJ!{xiG6OGF-NuLRGtj#*f%3$ZI<{Y@~OG?W@d zN6K08p;AznZkS?8In#w!sxN=7RSfA40iy_z*&4*0`JO_Sd5ylcz|PF~_DMn)sJ}5k zAP){p{SzzM{v_1EbM?^%biyEf=w|Rl6gtz7nzG5(e|RMNyX;ezucZe*gG}Kap{qLF za)1J2xc{oM))(Cv!Xau|l_?f?a_dCCZ-Uc`%x4C+*8}Z8* zXmW@lRU>+oZZrB$Em0hCU}@roZYB%d1=@)>*w8?O+t9qh;~)+7IS^1{K7?!EK-4c< zF%X>of4%$i?;!D)+iJ;lk9e(AIIB*r76no$VlMwSY3ub=JQr%MX!GHx3EjoqzeHk0 z@#E&^0E*L%_q6~1%?Nv91oR4kCrjp@AdP z1Z5A;5Nu6Q$;!q%ohi-spK>Ucd7alnk^6HY)aWayTC7AG@|9SpuBEDA$W7p_SP%6+ zl}A5yq2j5`#ns-UXE70Z)Qsij`2{>^dj@h(;8p|EOhm?kRf6_g^ZG3p=P%1o3=&f9 zf9>DZiPTQFs>}5B41186#rx=s6K?pw{Uk)x_dSU?Nb`S@0QyM8oh-#_;MD`*)V=~1 z)zR;iB`iP-VdU>P>5mPIbZP3)sq~kdP--yI)J09HBFmlO@X)e@vK_exp;jTFjy(kNOH2M}pPZJBNltl~v|| z_0DZr$4qpr3nO&&>#P{a?(l)2wH)h5E}`^{^~@P-;q~|A$!@DmroaIF!~rblH~|n4 z8zX+fDG{LZ{a{H)I(+&7SwN=0*}=l!_bGes&bx0Dy&I>wCi4iZL+k`A-D{QpNj*pK z{C~jT^ruhnYtwyf&JZbs;FUvCKB5{@niySyJb>j|!*O|xgByP6HJJIg^XA6q-xh&O zY&hQlhMYec6BUg5%hv<>L91bHQ0c2~i0{SesFa9a-lg&$7MilGjr zjwuZBocI%+34Bn}SSrZosWyoWjB>;o(tpPO_548dMsZ;wNsX77)lqmyqA!%R;c{$R z=1tN;64Rc$gRmz0%cCgv1}pxEgXwY$dLAI7hovgstJvW|q{;{4BpnjJ-<3?IFA&JI zm0|?b75@S^9kbhjlTjUS(wmIcv^K1Me8BuZ2gGpErha1px@+v#l?G_sYh1Q;et-4~ zTRvk4@|70a0=zd=2x^=1{G6tX_zx&gib_Y{Z$mhN5OcT>RuMZm)mj@|ZZh;Pn8Xs% zJVahz3q7mhp9EcoB4=#&fw+{(+O6Q5t`jslrK{4RI)jF<+CRAI{%rWM(^GESHb~Mb z3v5wxmCO;2n3L$V)*Bi}L;Z`p4}X|tpae+o_4?m4`jYOEp?5Q4mCNQ&0?S;ZUi(|V zyRhS9!&404Bq*;?v7e-REKc4`BdGfAn36h2BHV`3!s&wGeZ-UkqJ2n^0Gh8JA>Bxy z(+u-C#}^@1P$si#q?{|tGX=_vinElgptYAA4CPuLEF{Ibp9zQV<+fo`sedSUjMb22 z8@?T{)2JfUvjlWPN1G&*W!Bi0qIR8aS;&bBU1)S_{KUr<3^~<6rd-Lt{MG8VR)<|r z^7`#ZI7h&o{A=T1?`w>x0+TE!AMdgtLnH3>5FpzAYi{xVb4d4y{#ta9kE8W#ljYrP zA+1t~*0cSv^^7p-kn`R7D1RW5x{rS6_Fch1I_-vV2a^v=2Uj0%`6^q|8+j z3wKtwc$_4i1`EU#=-HOr4Pb{KSd+o2bN1v@zVZzi(S~xgST|(sNE3C^(fjQkc(kQB z_jpI<_~Xb#%my5lsv=vzW9NA-;(nwbf`n&N!Ay3!NsXn!PU^oiaNZxZ%f9M}0k z4`n~syU(huT3+OwGJGqdqWo?5n#le3KP4OOy`1Y{sfS(uSGKDa3&lk3;(xXDGZY&C zrM#A0vGD0Q*wtqXMp7KYMbm6vfgrbjCnD?WhekG$5kGtlkoONr;$4HNdP$OO`m04s z^|H?&DTS;JQeN02P5;LXb`!!UW) zUpJdJe1HnEuGb$PUN=yQ)5|ZBd#NP~QsV&Y;7GUmaDrxEi4eU!P} z7{Yi7{ePoQV0&sSX1jO0NO|8-fzb*q7!;xD0(CJhj`mfhN0sCQu1Zlh`5DM!tx3GD zDk@Td!WujZ4q509=qB_U(CaySx67fk^rt;#9>EZM}LvinSe;z1yCG8=(QY*f_l>RZyJdQ zh~%4ho0*jJkr)$QesRElJ1}l-NU|H?4$2K2Pcn`0rgw~EM)$Wi-F7inalL_^xDkB# zR(TDoS=?jzQ4^&Pq>-qN zLRo6V2j7*R+dgu-y?$Q}n1o$wtE&DouoO%xc3CzD-e+7fh?bYgoB0;}y3Ovn&b!0Gm0eshC49~J!ug$$Tc95&H3ko96T_Zo>c3&~3& zJBiy>a-tc7TyX_pMCK3xS*&F}>XUX|W=JN~wz`@@2S3mJGCO{aoiPiQl*wZebbsB2 zW*`b8uyK^}nP?7s(v&}MHmrJ;fs-`vO7PiwU-LFe2Q%?7$P+vk%E3p*q7}2dxyr^3 zM6;N%AoHj9gREJfscy30lz9^^U0Y4i2HpTgAMk8rHL+{hFXB7-n{J|0$m^p_5s~>%DZf?X%68i#K3v2Xx zN`uDqb#7bCj-gsxAwY@`J2IUWE|xXdId37Oe;W}sb*5RYjsOLMMAV@de1G-6ykvY1 z#rfznzc-`LRSADyFisn)D|igCRD6>#6bmR|XgIiX=_sqt>*V;sNTsSxM>*7bWS0=f zl{NfpXu%ug^@z)kqfNO%gWPJgEGt;n8Y-6S+#}LOt(kagy-7%=#}B#ixeZ)@$=6>h z?GgShd61oA(fA5Dw+ya8R)6f7S}g{lWmXuP3_yEql4@vgA?ou3xgx1^kM^)GeJ>pM zl+$dE0A*~n_OA&wE$`1rzTrOK3C;)Pjvt41-{6p)Hffb+L6r{Cp+)g+(gr9EYQsTe zSZJ5?5=U95t8|+#(~EQ?H|J8v@l#Lk&aisoZ)KxQ8nn+TO_iPvR)4JuBz12v`u@awEMT%(MWmmWlA9Qz)tJTkGx1y0ceb_QII@SrGD_4!7xA7TV-#2I-`&lQV~EKOX~;tJ2a>Y9t5^KVWm5=Ahj=_M zVQelhhp;@P=sA9%S{y%^3E&=sZZTI5^#v{Jw`V459bJ>c7qstUQB2A0;~?f;ZsgUR z8g+iM^Mb=9XeM$MV`=XyyvB`9^QTXh* z|HLs{wtqeu<$P`6Tm*8%wg!>Gni1!ULEb1=>FBE5j-X^4w7keZu@N+Z5l2#^p!jF# zlQ*u=!AItLu;#`)1+NU%3`oyNF5+=O{lya3{e4%>C-hkwsj~zQ-coCtH4Bxd^F-Nm z7zQ(qog2`_m2>o3C}&H_l`97n|Mn!3lfXB=wtq~D=o%RaYxmU`5sg_>PR;zvP?zt3|>OYN;opn z3V%<~+18#C>=o2u5wr=az^hqNhk&Kn1x~tPc27BZ6!qfqOLzj5(mXr<)AY`+w@>)zlZsav6FBa5HOq@~c{ILvM>$Y`w-0 z18zg)t)q_vgPTGcP>7_-D!x;&KT1*ArID=!x#8l-I@{Dt=Wz!)=k!!R28)bli*mo) zUU@WMZR_Dkd*GMAiw2O4VOXf)uz%bxFKA2yCxA^=f@WDile~m!;oqtoIevsq>$orehr1AU#$MhkL+81bN<92tuLr&?B_qh$DqgZ-e5l0msf}EOM`K& zya6A+$+!ekO`-Pr3KDaQ0)HD*4vd%C7dgo9|Mg!|NIyDtSCiHp(AL-$6wWwgmm4^O zsg7mj46-9zdMuvUSh3nzu%)PJBeME7msS#5DCM}|BnIt`oOog$)r1ooLGY$J&6#&$ z_n{3`z~Kb6rx_%c8`Kcfr(>Jz?SfEJAzE;XX`k+RD_zxUe)#}j34e)&|7ST7TMJlW z32B2d&nXPDoRoiixosMb8Ss~=Wx}WSEnDYYlHqLP5n9sVKgt>2yFiK!@Lo`F4?gE@ zcD_^FG124yh52-6w&VxCEp(Njd8}*w1bkar`=6(8zdQXur|(~X|N7P8>u*0Kuq#|P z+p(J$-+yoSp?43i#edLVL=UIDGweg1$1YvG{qqMYySf|V2EI!S6$y7geEpw?r_Sa$ zTjPXNhdLx7)z~53CU28mb4s8;VoJgO%!aw!r8-;3J6o&H)}phwf0lk>LUFE$&{EQC z;DZwt?I&rdV#m|QMMq`^tQ#E>{@nCS5mB>fbSR*15D6N)%YT?OfvqM=j=Uo&3A`lj zB+l7&FC3aj-9!oz;Pi^l-`NrwiXy1qx8>z)K|P!aKNRm@uP&m9EEOgd2WGK( zTu`0$Z=cNTAR0P*$z1(7_5&68m=st^h6;9Mzdea;9Dh9z$l{?4qKYZA0L|+ZO+{<< zd<`2eHU!@)KOO76*edc~bGAKvpL0{m8qk0iJm;nIUf8PETgN_?JcqgjJ-obs`3WG@ ztPfMZ*;FL?IfmDOd|_{W2=)qt^AdhAu2EsoY)?p|3H{Wvn3{I$%Bah*&t zQHh5xU2I9RH9A;Q;KMX?fK7!3sNVw2EE{uXG$yyeqGjWLim6>XaVBtJ8gH)WUGzAP z#i)6E5Z(mpEU&UL{5j%!=ZIEiv7PWHDBIHQJb$uR7P=h$(g+eZAJp?2s}Sb33#)i; zSuw0a+_DB@m1Abo9dH078#h zx_`zD3TGBN6OShPJLy3b$9=k`upW50Rj5UkYoal%>mHO<-Es9RZmAp*P_emh|5AO z9bwPY(c?q@>+z^f_3N{2U6c3U!OzF-$*3K*ph(vK{-$%K&V@s}$Ya{xq(f_d7k@!M z)S*Qo`He{pW<&jLoK)K4VuVnx-7&z6=J)|VR`FI2n(d%C@gWJ(A>H{zhPo@#HrwWB4zidb`h6p8HOq>do4o!p`*F-= z+nRmH!MOovU5*s8x&0`OT$zv@fuVg`%1gCxGoS3F-thgBPmOdw_J163eJN3DRv9%={tI-ABiDU*I{l7`v?yZP;0~?`D;AsxOg%W9h0L zu#>J=<|`%MSM$4A-#eiQl(Gd!0_EZ*z-@&lcw6THG?if`R?wHrbr1%zM@6xyUDd=? z7EtLUidmc}W)Y&8*#!u|Bp)QH!Ppi7#$}a5Y~mW*&Y9M|Ykv=>E;xsXbNsu;1P^xF zi7rCh3?j6RT#wBMgywzxKpU z0?L!IuRUROTUAw_c#HY9%32U_!xyT&#`NCk&sB{f_YG{%v}ybIRD!DfOv@NfcZp8M zL;crhw&R}UvwyXquKm`$69*R+HUw{r9!z~}lf_IPxbg_~&br`O2pw5YkSc+BW|l(; zm|xVxWyu`m6=2C8J=!aEnNo0@M#3jDijk0luB8cS1{lY)lFNo6hV{<8DfSFQNM9or zq2NT#b#-x0u3R$fyj@UpMxL~V43g>C&m+QgDy#)N+J8TpiXBh(r0isM(Aut2UR^xv zt*Agl0(%aOE3qJBP=LiBL_;ls(hz0~ubr?(oK#JZPNs!sC=6VAy)AgdBmc2XCbt8o zZzE2nGb@g#ivmEz4)MF@w>+N>APFVsg0?jvdYDBk9MK#h$Yy4f)C5;EKNv;uvxG%} zBp0(imw$QG^vZFl0Czsil|sz(`*Qg=&c7|Oo%A^q{ufhgXW%Wa6k-_kl&OHDcXZG7 zO?AD%H)6jod1! z0;-hKXQ7sJfXfkn!~gN(`#0adIDGT=$J2MO|M$;t-o5_z^t(5&zyG$K+N&4RKzsvj zOs;_b1(%>cF^I2#Ehg{E;w3vPD?BB5t#VWXAHh=4*-RZ3jyV6R>la3namrkrwrUGY z)_-x@CdvjIPdXyaU_!n*qdrHSz-RPnq8RbZD`)jRt&YI{-oQc{~ zOB+?xCTKWO%WYauv1@=vI&FX{F_4?=mVbU?rrjH~%SlmHN|c!NY>wh-xYxe#lhm85 zuUbFE>_Nna_yBE-!paB=a@*=BGX!Ni;sW}AoX8vlM<+8zQjL!J6S&_ei5E{X)IlR# ztzNFP;%~2urn>T!-~jM6w<+L84*E4`>|Eg+W&_b@7x|e|*kk&0)4NV&Nc87@AAgXA z?dY+`7xoG*Gg#Jc*z!W_+M7ql4UI5hQ-*ZYw@-umAX`@s*g9eu)V)D5=Ak>Memy<7 z%@*pB{2io~-G}s$NTo7zzS7OhL&TZ(0CO-~=2e)Bac(rzf|=GQ&Pj1hVbJb1rLzWQ zt}qs_fbbNTFxvz;RRV;WWIc5@qkkR3vdJl3b1vahu}bM>xysguR~t6X+W}Ua$cuTr z(>Cj-!*ajInU;0jFtTC@P7)DYF)R+ z@2}70a^a*hT|Jq9cqUEIpQIKOG?ttcqo0BP`5gXv_Kj%z`~wsnbh^@|WcL^~^&Q#H zASY__m>N1UJ(Bp5uQmMc?S9L00*HYNpxhAxdth(vCiuzMPDT1 z<70XDjI{60bLVXVj(Ie>5gMp!Lh3WV^@0YN@*;19J>yVT@M($)??R_bALE0IXS2-$4siU zl1#An)m$dC3$zUX#K!->AKJ)C$|jL{w$_253IQwN=(9$elcZsMwYKq9E$~%l!Mt*SQX-K zjGf4e#H61=Iwu*7d<(aLfJ!4|E)O{eFNQb}TUI(?J$h_(_J2B45Xn6QU7tlJY@JK{ zc=DT@nl*>{B`dd(y-fw73!f#(OWEgP)y%b?KiA1;H8*VY-a#$oYVN5JxA&bcf%D6b zkaS^Y#Cgx4JKD@KPl!LM<~r!wwo#i-{GcXAzTxk^OuWt(TpRDLTClAL3t?T)r5=>=p9 zvS%yciYlAeLfO0&V(f)dGp|x2B3k+XIztTn}5q)_DmTo7x6=s%cwIjy$FXR0u z`$xY+aoj)VBGrZn(P`Ke$*7yLE0iiGni7V0U^1q@ynn(PIcN-sXNch&w`4zaP`BIt zedLBAG5B;RBLxlvO)!<#uNuPN6R&>yFo$yyO+|}WbgFjpF}J~;WA`Je%5E9_uJ$?> zbg#AcG6C-HyKVO@@oIJ_-UJXp$V{^X4MNXUv6FjTuE^%-Z7SmFh%ut<=#6MoLDL7) zKl!ri_;ST?z+N45Ucizge+a#?C^bX5!HzZERp;!`N;zdhI8M$D| z(rCp}j58>fEPUNCnZi<{3XbJeYrx+3mYw0(3cH&*fkvUA6V;XdRD1-CwiQNXVp?|S z3O|CbtcVpiB5BvTiBI(myW@>^?Oc4SJ6F*}wtx3ZL@y1A>0-es9pNXpAvBTj6BTgM z5n^JTu<2#c$T!@QlMvB z(0yHF@nqp?%BMCk;BbYB#X6-fO{Sc*&^&spDaA0H(B0QzFWHMx6ed?Vin13>qLNk+op448g*#2;uLQ6bw;AgX4D2!5wQyxdA zVhuzggzCDO&`c7SU;~Gr?Lp-Q?%efi2atkX4)F>xT_B}3??XWNI)>4-Q1$e7{=-KdOUwMaejiwU^J>gzhvo}0u z!|P??Pu;U!hgNKk!CyLly4Y3kh*P7gOQNS3?)c^PvhXeRfhptLbim5R+cx?p1Ww`b zoq(?V9wJv3ftZzPk&mrw<9~pj66eE!Cz!-*aZg|Hi5jGl(lDH9ca%=5FL9uueh10g zejfb|5PhUr*=F~oBaI- z)AZWtIisP;n_VJSc&w@_1@Yx=eJlO4FJ)mIx7b#CkueH=OkG<#v47HE-m8`V(znt# z)T(@`qjBZ zWF3UGVtw{t|S-BtTX@uLw`1l2qcoDjc~6rBtn-r zZ<3%4SkFU#tpIg2kLyDY%g@&N^Jm}i|A6%ftj}PL<-=GO6p$(t>8CiZ6XUVS617t% z@Xp;Wt@gW10;H~R2FyWRfzs45QSv1{QBU39#?}aiweI~&vpH_nD*wdy3jWK#IVu;& z51>ZP@dLi+5PueQ{NRLd&fPXQ3vF&k{H03l8jQodMQq~>GO@l0$6qJZrcc0&xVqj` zSWN@Pd#qTRMQyv#DwFHO@rP&l*9h?NT!F}_D$(V718S+F$>b?efZ%V-voqrMOyS8wRrar>sOyWm#7goikL{CNRCzj^*4>3{Y<<_OreF^k0B5xw}FrA+C@ z_fWU}{p;@zL33k0eD~&$e>%Lm>8yk2n6SINu(jz`E=8+C#g^a<|5%mVjd1aP3>P`L zxli@VN7&=jbNK4`fxPvP^^^h~cW-1Goai{-o%_XV^$I48zA}1d(&OKll^HIt-eiSd zA8r1zDSzm~o{D*JNC4dQ6m`jbsqp!8mD=<4A*NLng?_9}{D_bAIM6r$|EE&VILi5q zM3(?~;tGgQa6iSLu%(D7aZEWhAj?5JG&Z?pod~wrO(rZq#Nu7X$`e82O5_d1x)bH* z5Zn!lu{rqfa=4-1@X9TLDObu|+(lZqGm##yn}2zaV+C5dFQt`RZqcfHi%3Gle@4m1 zqhv3KMaf=*a$Bv!_4&O_ZHf&H{rGZzsWZ)ur3;}Sq$gBuo~AM-9MH5oT#j%-)6T%T z7D@p{orf-E^z}x8&1O=U+iJ;@jWkouksFi@xF=Qic>QeJcmu*NYr{*Z8Dc2L`#XNH z&3~WTtk?8|jsKD1=QLF1Fzy+bZ`l=>Fp~B|n{+rJ#pQtAR@du1IU%CyoOr_-L58A{ z8Q99qjTYxNy(Egt{ZyRcwDSyQxJ~pBS*rZE;+U$v%l6%VUo5eO>`fao?8mJ5bPkeN z62Zrs?ICvlu#FHdk>Po4tfJKu92<@0X@8A4?<10%z!3Gg>$4=zIfcJC!aNu<06^>^ zdgyh2k<4uG#KL5~OHly74w|roN&`+n-(!H|_j%pCExvEdU{>y&Swkg&Q{aAjvdn5@B6Z!kC2`rWfw+6X?S_7iYLscAa6DQ%jZVwF|)PMf% zeK8;=1fr$W_o~rM{CQ#}lBHBZW%u(&=_65U0F_uatBJ63L3+ zR5)6hPDC9vIJJHHOD+s1vj61fN zv>lU)Ch0oxD%3-gOxMv~088y&K5fifSPn$ zhY}f}PxYR`;8RMZNOS=SL-FUeE#T1$G%~tQ+NYi!oZtiDE3S;ar__Obe19)a^}bKN z;uRY3P|rVZMLvQafGUAvd+&OV=td_#6`J*U1*exvh9tWry&^J+Y2o}>gXCVzzuVAee|f9g>HpC&oVO4 zvd_u18subJ-PXyp`g?UU{bkVKS4gAX;Rxm=$#zV8{(`9AnOIOLIe)gD3HvMh6x!Zw z3ny81MUqudIS$;b{zqq@{-?v-KON@&!5!vWFn&dn%;+qXcS|+HhhzU>DnwVhioj_o zLnQcj#0t%Nozc(!jx>`rJB^bHB&Jk!1N7xc_mWa$!vTs#=5Q)r{=h2E!7HoIZ=?LR zb@SY>73u7ccS^H+SAV9i@1#tP_&RBo>S|am5mYcrvoNKi!5cfH3G@&l*>r1R|2zuG zP$!}egV^`w{AU)hUxA*{J$U(W!@!x2{oE`QPLS=dp;ftU_@y~?JJ_jX^qkntBvIAW#Ezwo%brzvuXFGk@Pq>g`A2S?*DbXCTxA>hSImjiQBHc1)=tN^ zJ@{<_qlkB$8$+)APxz*q3R@^ip)2d23wI_#Q^WwAo;-R4>nYc4@;R%D@rN)O`;PA< zARJDk@*2}Ai+>JAIlsA8Q;)_EuQzRya^kjLk1EJO-GGzh>*9Q!*B7I#Mt?`;tt37+ z<<#MS?-?V*V7BJ`ztKGnGcjLs_IZ>SXQh>xd6b`xKC{v1tia(oM?3nCpYZY`h4Bh_ zx8(Fy%yN`BNPMRw_2BWD8t@xV-F0ZC??Ar5=GyNHjTT<-bb zp)1@V2U47%c!7UXRIC#SlZP~c@Wbmfn!b91*{dOya>!+LZM%%Fl*{NXd>Kg`V^9wB zsT>i-e1A_p;*fhwPrdUbJ-=U1y`CTg!Mg7oSE}3kkOKI>kzN_|cvnaJC*3Zy;cq7T zb}a_Biz9+$TIC&Eo5nx1AnY$3L4uq$kG5A7whI|8_;upY-%bM9=!1%Z76YaMZ;)$} zq&Ky!ZqhfzF}|gZR32glbpPbK&W5&|$bJ>V4S&50^{+CBKYHY@n@h z(_qJWJ9U=B$R7QmJfYBmgot41O~U%f8{P&kF>oL^R@k)ZmVoXuZaRyxHa@%(-x6w_ z?XAqBK@7I3%8mUgU!k3{gBU~$#~^wKHL*-l)(j}!8d~}g3+d1WA0)q>HQyT6%KgDm`Y#KNBe5{HUX(#T(Po_{Yb5)>)3W?Ux1=wB(LewA^ zVUgluxgqaqrJ1If>~eFX)6tcJe1jauDR~K>C%=~S#l87kpnR66aWt4G_u^pzeSgLC zh}q;MaN5e#A~;13z@-E|haN(bxa8OK#rQjQ!|1?77;oJq>Y8aM+kXrM1w$!UiV%(p zIg)63=$CdQDFbE3!)&dovTjq6>hH#jq@-RXg~q$3<4aQg5A-Fm?G4w)c{A)!jazs< zoF5&O0L4mwvO~rZX~$2Je-?ZCXMeG$f5c)>ZMxcKYhiBOIaUthD!6BF|Cs2|WHE;x_V;aeHR|xM+J`R{2MMF{#NT zaCH00Z`Qfydd-1JK&M2~>UUZJDA8Bu0qyiBv`KY&;RvghnG4xOudEb#cYlArI^K~) zgfi3MH{h*hp8K_5-@nRUJta$~58IoR&EqK9NK?)ZsQ_?nF_v%j%Xy{$lt zoi(GYa$Ak~34JU_*sDSw{HR9)RKOP@FW5?88mKL-7Xd#w!dc-{Gc$ZVCKaK@3gEBH zas~CD#URM#d@Kck%h8~bxqk)x2d;8DdVH2wH5Q(IJZe+^9EW?KuNZ9vOpRNHR?e39_Se}86I-$Kp+{P0~KfQcP)2I zeCItqeDSg;8J=4>&SJ^8g=We{RCj;icS|W3%_*sm$D^!A?0+P!?mgF|ADx1EGWm6W zvrP=6A5IeLRxlQ?J32{*n&mE1AEdwA{?ip6Y4W4clm!6NJof*)qS(*6;a?8q%4js~xfogi{Q- zLc=MQ0>*4H_6f%>PBuhp82aHoW*G>((j-%FQA6Bk$bV8gnj$Yb>D%a75Tt$VDTO0qv8toOes7J;RgL3>)A101P6=AFEhA z32xrBkyp1?jq^v3O4Zoi(P?g{nnvS)KtxQdBqi@`K`*V7lxc4jKmpfoisMI*eh;7| zBP5I!+kc)r@C@u||3oL&ai=R99PkE-=T+jUn_pi21fVK?#L|$Q*wNTx?AvHV;*jF< zE~UA8CV$r0`CN82lcoMZfo@d+lrDn>pmC@H zNE*QCvQ1xIKo?^)F^rMVcT-Y@P)xVpNuh;XmL(kX>zM~L7T(-IR)^p#@aO2LNmzB% zBvf7snxpoL5_&D{s)XKaj%oC8O>8*Bq({dyO<=%gFaBO(E6%&ry&f&D=pgl;A;H0R zcz+SOR@D>h=7+FJtfhrY(wM;8hCe5cGcn<)AHk$WP>SsYSH$SnmxdS2r=amlfd(@l=D(YCxnPOjm0+zTQH_1#2Ps+20cg_V9 z*(d)2Quh<}_oOMm%fEn0P*22v2~2T|4}VLQv6KI0NSbU9RPBDsAeyTi3OB7C!*Zwx zav1}b3s&etUj1Zs2F>b1&!c%8QgANXPpjvqMQaszVO@90=24?W;sW);+86x?PN7cRUUC9=@Ijt;ffpDto7$TXlEk;$J~Yo#EM&Cg|vIvUzH*`NO? zHp`R=pUzP0(A1kYy6bIVW&s;RNX3faR?amKl5in_rfDC5HoWbgm7*w{D1Y2(`TA;8 z{0znnSRAECBGI!+I(Y{t(IQl2GO~<{PsKPM%<9j1v%DA=ign9s zrn$VSJo_vkmzeaYP9<)c#;^pW%ol=dF;Ra)B~SfK{u!;?S;XpeayeK`POEg(^wws2 zzx?PzUpy5*pk&nNvRd&6GJnoo&8dJn)ye%MfUooRZ!${spt z>WV~cg^p>gr(lQeqEWlWIz+A}<=v2W)G>(qTF`HTUKg|h z^}omhbwk$n6u`;i10-|$pwsUKat+Ov5f9X*?SZR$t)!ME!7P8qX8DsRN#p3=nbN&CM)&SkmXU3DDtv@& zi1h1@C(j9%jWOOuz$YaCtQ_;pSB|k$H|%`Q+DY&hZhtq@U1q%J-N2ihy9Klhw~QiO+s3$P{6F^IMXhZlTNr&6lRraS z6X8H#W_nB<{{%?Fo+L0px@R`9LD&UoVoTnV452~iHO>Q_7dy39-Akp5!6fM(_BXqO zrBYp1t$$jz?yFcPr~SKPhSHvg6)4FtIY(kFx8U_J8W!d#r`@SPSW~7ScCb3#q7j(G(W8 zg33%qQmMvmm?cz85~b;sG~3;3^;DupT!6?JgdTcJnma4ZeiYZt!TdD>2%cdZ*Ub{^Js$k8YUQl-trYC zX=pduqS8?2uPjT83vUrZ3#a|$OIlAxmVfocVoBy;8~LVf9}iRL;L-N+X#04yeLUJe z9&I0A#P%_Yqw{_8`7vOL>-CEj0%Yb|o4{(x?pKS9xhj0GYO|_mJ)?ohw}Iu@izG|4 zL5OsryeU?|;eY>*3^PwbaUCQi&|1qKsMJI>a2X~R0q1j?OLc*7!NQ}*Tl*7#?0=v6 z=l-RC?63RR{*`}<4o!RLKkRSz^t?_w0tx|BJy8hhz&8@X+1?i|6dnAP-`qOc(=z5} z?riv?TUG=f=ufF?3u?KISdun_*+#K$eeJ{g=DQOu2UEf9)M!ABX9dyB8V&?d9Byyz zm(7#aywllI-apCS zFJvu!;c3j=tvFPm>B++-6FVkO>v$~f3tUItn?`U0gv<_n# z4EA;Zy8Gj@zuVjI|IigZpUR%EYI?pBJzsSwyJGZw+CT07=x@=E9if8Vr<9>NjfdB& z2*}f`1T2h6?`iww#W1{VA%90j32+K*&(a9;=(`hMf6fn|w4T2_@wka{KW=ZyvedlS z&LBCGBU0M?Jc zcHx(9%Y}#A@Q|5t;pZp%)0nV1Tfs)Xr$c{d0D~|3ERHjfcAvle&VTcFuvI#te4c1F zpj@$Rpzg1y1E$VmxU@MM7r%scF0tIKbc)L_p2J%hrKAV7gdNY9o4>KR2tYG>P6;r4 zSf=3RbKbAnf?~NE`svL^&Rgk#qND7nU++DCVPB~)U`$38WuK>6)S~~t#3(ub$Dg$WX%1-#3*g|m7FeH}jO2yjy(!DcZ4QXs70dVz?_ zE(ZLLE$xIg(7Ta~w+qmFxoB+V0Om*qw=p-FXgYV*AJh^h<$s3>+OZ1{p*UII$Wd>S5}o#_X`fvDKP^8K-2b3`s+ zj2f^K3$YK5K~0ga@*CkZV86gCcpeS|8b~clqdO5OFa=qb)YmMK^ACo@b)b;#Z`#d3 zEl;@`v@6%e+J8BgX1OC2!COi@baw%_JkLrES9k&3nUFmC20XlPfO#QUn<~xsWvS4M z7l>tZw;Py=(CxQh%kqA2W4pbO9xn>vyTDoknd)QV{>Z#^)i?*sM;+dl&By(DVS37_ zKhg5|$~0hp(K?l6ZHK62+ot$qxK=2gcuOEjo};iLLb__CqihEc=&^bPG|jL&%J1E4E1CDWp0Oc9COeYQ}1rT1&MkIpjjNMNqC% zy3`is&woH&0Oy1~hhOxQXOov_pgq4_>P?mg&)P0aU-euxqaBrX&cg^ZmKzqj{;0e1 z6BHYyvSU1P&j4RQpugn&*~QB-%;bEjcd;~e3g`TD|J>t0*~0uw?>=5J1=3LN7*pgu z3#2G^5}~+;-o%2mJUY?L=tNV=C4FV@mB{72QpFC^KAe9K=jG|bu+Hu3!j*?ojp%lE z;jJFMUA_Tt7g>r@@nbRs0pbn@;1XIH2T)l?l-`%h5fsk(AWOhZ)Yr5sUD0N5eQjs6 zPsNEzf;A*J7+n;{M5<532m5QUpv&|kJOek@@-H>jh8;o{1()GDhE$MCyX*V(_W>v} z_~KXlJJ^3kEvpP0iMy<2QK7G~!t%5sLzBWCz(~6=DrLzu8qoRfD~?rC4Jw6re(F_T zI*DgzfajVItb7JBK7G;=-k;3TcrXelr*V)B!7&9>3DAGrvJ@mRPgu;Bdni`(*y7I1 z|A<*?A05&j9n${b4rvDcG4wKoF)h#ZN{yi?=ZAjHK4bc)|}-aEdS<9hso>3 zUn+n6s5JMwukL$Q^b$4fRx%bDd_?VTt9?eB8?JzU&QxZ6wftnCB=XlW5Ae}2aF`!s z%uLnUXFaf=6Sv3B11)67t6AOsdY~SlqmLT&lI82 zV)GT#lR_UzQjG6be=!c6o0#E}qRa(XqAKZDs#QTL!*DQtb-gaKAhgS|lXdK^;@E%u zVqd0zgDRY&T_l^=6=&Uv9rH7>6a;l(ANWq_Y0DO1Iv# zW3;vN0HkCtA=*!iG1?pkHMZ5SW;I=QnN01_>}oTp5tjY*+lk9|+|`VKt&Os(Osim!f0##NCd(XBZzq?@rMN=<(nFVtR=+H~C{8yC!hx=>m$$wrnInl)ucSu8(o z7-d6dl#S6Si{vOi>LvB%x^*mYm}O0~s~uMROqyKh73eG?Y{cO&4UKVbiFW1-TOv6b z%San}H!MkZgQD)tL>oCuA4gF7I6CSUrJ_|%WGFpgi^)*oSZv6Tl^KNmEc1Vh7f1O4 z%#oqMATNwF7;=em+`} z#>sM|QT7r_U{&OE+{;vmGlWzb7NxXzbNJ-uMzqfJ!zbOy$4C4dd=%$$fl2`EYk$LB zI?BG~bwkF4;8iacv4V?8Fdl#Fm$i3W8*BSp+aHd1H~;Z*Yj< z96A(UrQB}U+z0g9%d4{jKdng%{7r?ve+x-_ONCmYVUQg9yz}uzy+(gJ5_Ih6Zc46t zo7T;F_(W_0CGP$54eBoYNu%EQW|j0Nc6nuaS*Qt2G1cymU9yzyB$?T-@tNJK8~Z_% z*~+AU?&+$WfGY;+H1)1&197{5a(EcE@c-<9653`-s-0T=0qgAW$xHbe{g4TiJQrZX zB=lAUSp*@Dqf|v?hI@ZR^rzNot7WVOTBPv7rSa4FfT9Gxh@l56lAyzXJOk zv0ktW;A)e2WUh6ItxiVLgn0{>*s59Ca|NOo&nakMo^(rKt?@IhN4U=s?&WZ1oMfxW zNs2jKvNLT3-{|czzREQhp&`mK+$9wOIt&SHoOnz)@@U_EwC{g@qxRk0&mPlO{HN#a z{(Yq6eoVG)Cfok@a%3|Pv2P$lwk%J3mrU6I+2w0XyhwkaWo^ya;F-FbC06<|uk>SH z=|5~q z_;kz(;PG+$=bwJ0$c@oJ?+Q^s?2KImbYFyqS1?UzG?Ph}=$I;X7QPbK6m!$!a=+ww zjHgmiSAC*Lw+27A=!C$}*=AX>EoIftLn`5bx>ZPM#&m!AER1IzOpy3S#g>?F^-VP? zeQ7&X#O=p11ZoKsDo(bi5PD6uPgPbT9d0Ev?uZ5NjHZ-j)S+qgl531lp1bya<>w#7 zzQ48hT{`Gucvwo8^D)EwPi(%45m{mP^asM2pgqS(j=LQq9K1vqM`-iqlFz6OF>Pkk=@6iIg_OU zI=DtvoqKfUP$oR_uAHn<&V!8B{y{*O)bKKJVQ2;!SHpMa838rEu+(ZrIBS=pK0O(g_@8HOH-GsfH|Ap6U z(QxxK8BFOk*hk$=E?e*BfE-aygFJf%-qC;T14{6H=(CIFAWC)d660mQR>{(mg-TX; zQ0#?~jyI$DG#DxElZdR-bx$Bd!C){bJ!)!D^3u`0$mYT4Qauk`)U0z+FhEBKo4U&l zVKcaqxk@;cIns5NJ=5Hsj(c1x7llzfYqnq~!Yzqk9K}M-<-}$s# zFo-xBp-~aVVf?wc7%7X2_Po99FZ<+x$0^Z6(AT{ynzv<#2C^PD$ev*|?$PtWJvCq@}y@&?cU2gvD?p5z8) zp~os1ZbzeQxaJ`YA&gM*@s>U&$*&g#X)WcM;2pj9cjK#dAV#3Pqi99p)`kUy6zRhk z*=qRgnOAwWi-bKM;fL;zkaNTUuNFWs5=6=J5J?C`%S&`Dj zJTY@|SW|j?!Ed19sp~*cL}DCCS|&U)@heFAZdSAvuX*lQDbwe zq(s~x%q{>tq2(f=No@GKURHx!ieBJamtZ}XKkz+BCd|2@bUJKROj$rmXJxjUX>#VL zY>wu$rc-4GLD-7Di}~0k=j>N$-Ls4;4H}v zrZ4ZV{JhK^W(q^txKe-hYKy~4ti_9ffOxbS3@+N}iOY~dt(mefYe^DZcfu6^ZL3!u zE_LH2K|xpAj+h|gpviL z+re(l4?9*ReG@yxd06&2rkXN2C3-+>&r{g}y8pRw zF9&9*03q`EZzq34@Kz~_cB zqaGExq=kfWn+=V6#ShiET+ge!zft6{h^B|`gxU;69kZfw=7J19oyMQpcKXPtrZ zI8HpvFP=jK&am(yf~Y49hJg9F)KlI~BwS`*C-Immx4?gs(|FAK+o5wKN#P~%;V8Y> zFa9wl$#vl=Q&8~_q?4%TxmNIYEv&oDqYWmx1+K9>qO!&9?ec2;a=A}Mh6x2NX~+ID zOE)x)P{Y)YYIXQC>KTaZwd(@EpFG`f-&vrl85t1BvMy3Mwuy$IyV_aM?2qL#s(yG( z@vymxlX!n#ohXdqUre~5Q>6Fo9hSPdScsje^p0gftqP!mskCRCInaD9?5aq6AWX{Z zmOHHc_~XxlCckGE9Ihr#dUf*t*y#E-K>4DIGp1g zbu>8ls$Wyi+0}so(_UQzDww!Bu^`y1Z*qGZmU)`66eVd#XCkU4>dKp;2I!6Sg>}kQ zeX34B6ay61TEyCx&HPXhFg&8Gu`>!|MT--u^op=%Yz|$rEVB^~4@P>E1I{@5Vw8dS zo7;c>MIe^BGnZi+%Iy$MgO)2hNiCH^P@>yB{xMC6(x9Z<&+R8-=!A z!hN~ZZkYG75}6I`w*Q`{*=ubSWLm*y`+<-lgCHt(yYDcPI*-P3z~IMJy`tqpX#^pXgOl;ur82$uIxv@C%?a?fvB9vj=($Q59l*+cRQ{IlUdpt3ODy1Qt~A~OArIL&0|m3)!X|^4)%W* zdoyCgqbJ1g$`fK1q*YY2u=CA3@hkCHc{?~p$t`}gq>lopSJl{5jrW_k?H(NIa+^I@ zqiyd1<3+{N=m|jMDCN6An~Ci}rGHd@vMRyi&rCgvoz$x58!Z$~2Y1l@mv(Mh9!mQz z_X<&cHY0KK^$nTDHAb6hLqC(^O3Hs+O&pM|mJ^$`cLlK(zpWAQ979>|DdaBhDFw;X zjz@RF&#lZ?6RHG|aC#B$_!Z<~c96JTWXL^SWabJWYkHM%vK((71YB-69dZvhowIzfL4P|cv~ z(XOo-ECqMwL7RH+>MUpPCSN6PAD(--?$kS-%;3RNY})pkIkObpd(3BkW-gKx{CFJh zJNNL~`8J^9@a)kZQJCl}G~U?}fL~q8AVpastdS)`kR{B|%wC#l{fLXXzlVntaq#oA zbf*LcG8eIf%qU-&I;7MtX=C{^DMtxRp-+3PszE-b&J+ zKs?|tA-VF?-mjz`q4FVKTwI8;_Jj!iWvTsaXL8UoPw0+P)J@|tK?gOg0u>@mS(;2z zj6~ymios}dhcPn}on+XVOw)_@O-M&sPg5-J2pNb5DiB$p4WyVm3tE3?!O~z9N1*#g zCePj!vR|-YoQg2_Di=2cp`pn& zrXd0q;2Q$LimxL(Ef#;tBs8V#6n?}$Ku>8lh}cYNmJ%_%3(G7;DXZ8S77_vS3T~cJ zcq)_;ld{f{{z%!rkc`4{2oci>M_iu; zK6l6TcX|nNw|E#a+*lmH0U5FWi-&8IILf95v-xxV?%aq94S<8$}@S3P&yuHW_GVHfv3dBuNuR2)5Qe2=rI4c7GV73b$V zeb}n)J@8EjZ#Vb}AC@0VM1DaDhF|)0x+eK0F2en_SH~Nh@3!7=?Qd>44yWN-A-aF5Scv#z?)h|P3-(|-l~{*#musVun3^H=!8=x0jlTJU@*j*VCR88?kbrY; z7xenO&9&X*wRi81-|TLG+}Zl@MoEK(SB)vaPdWuiK!YGw)264jL?A?JAq2N%aWMhG zO?+qllqG&!#W*05@#y8ULQWmAMx$Vo60zl}DdvB(mrKED#P&V?l2X4lv!di5k0F#{ zew)Aj?%mqX-lp2*Jxv!-c-MIQ|6*JK_UY@p+_ySee15Ll2w1cimc1@|t(l-{m#P&+ zF02B95pw+MgQFNFtpTQiEFu`eS6>CatXUP1i%o5gJjU9G4Hse+-ZVz5zs?b@RsgMt z36g(r3aNy3D$H$_8pM4j*D^p>6vi7kQ((-leC7H#2$sFQUG^jPlk!6FD>hVhNl{e? zX|K}WBy2}eI>nFuSslE5tVO}{eHwYt=;Xji;7F+E$eBiYJg3GmF3}j$G1G?1!q``_ zp+R|#HkcD#U;s=NWjKsfs&urVlV;Z=(h+|sPH97Mno_WWo18D+j>s8Mjir_4<>kp| z?L`((tml`!wz4shQSL18;B#JDM74wLeZtd2D7t-m48dnPkoBu5LJop#Z~@qdS^lbl zgmG{z1sawbDbwJR8VxSRzLFO0jI!~)qD*L4Z|PzAmJH%jvxDeJ9V@4&@=rg?6y$$z z9w@SJXfwl)`O2yREVN}EzR`Jn8%9V*;DwT!kEi^k>{2g zs@z?n05KVkP`Ycg_UJ;>vd*jB184iHG}FC#EaC`z<562)nMaM@XvRFqWz(+o{i#^1 zK9vTb(VI6-*_$)k`mv0*I&)bRLpp!3!fjcckjfJw%Fse78GqdG7%{wOnZpFSUxpW4FiJ0Xg!IWwXd^rkIrj zDk_ou@8tUA$X^Gygc@=VxO=P>@2+nizuuBdX|U+RH|FvS;iW|Y3>wUNAVwY30N|oQ zXBVQg3mX7?|N5~0c6a;3_Q$>B-OatN|K4l>f#OF31Vff%50)%$>`7kFx)bCvi3cgK zx#FQkd5vw%g#<~d!8OdwsMtzBOW`BPloav&-1I`=HI|wLZu2D4EYW}cvJw$PH2+|0 z)S^Mv_?|Q5oduu&qDQlDQPyk~Le3W#BVO-#h6r{MTw0N6NBGX&=-+iC$UkH1fI_d} zgXw|EL&fmR82!32c_4Ee!rV3YKwykqdM9Yo2IdlyOHv4g4#gvzOW|Q3_HZer|LHDM z_Rn^Zlsje*t07DT2t$9oi1q=81M2L48;SK`M*5m6be^`p!$=)A6H5ZlkKkwG;5>xt zFziKj!B-CgvVOgvvYmKYF);)GlK^7HpH*WJIJapJ(v*JxqR!jUd0xKuNt z%GGSeh@aB=kZ8!d3`r^q;1(s2q_omlLJaz{5klU43g;f>QCWYJbDq=fG3cCAQ~{92 z4LgkcY#41WzH&Igi}ZT;)m>RzTB@>gZT(|}`L_^ZeiwWdhsuRfO=`o4e)1CRaHPtA zV>W4&D&HEW@j)qPMaT^+xGps)oFC z;76058-|F>Tws4H{d9i713%KT_ZM-B9Y5NW#GCmpaIoOre3 zPeWM%>VWU51=Z-7tmP}wu|oQ7lyWg4XH-JCc*O*9@UcosrlL#h)pHH_Zr}__E{g(+ zC{kPaHv)f2Z*Q}Xdu}zHQl8RVM{;DOqA{k$mjyQ)A_Gix zzA|;?7r;o9Nf<@*4>U<#KH={9%HR{%d>6}+9q(@cDtEB(rg=mv+rgwEr##ap?lP%>ivx~r_ zww3Jly!LW;^Y!lL-rM7iwf(id&3(C(*7JYn5kL?aQ+pIqlG;f)dEN;kGJ1%OXJ`0eJ}hWjX+Z)ZKujjr*%7_GGrfdJx`<3p6*$SHgO zZCuIbWYz9ZBbX)`KJ2Bux4paXjxpwMnrGlK(?+;+ftA&$)r0<>NhazQ(j}=XT`7Ml zX2-0rlB8)yg!)p6n}WF}Zu)VK5`vKg=&qam6_N$rX`{bN0-<2;350&K$woB8Ij_x4 zBVF;!$${H~Wg63uAPcnNQogj}v){Y%mHP22&L|83QyGnUA5T*_ z8)URMNaE3mn`>!KsCfJYCz>nvKAvkUNc_ zGr(Qpn-JY21(=01<0fOWKq=Fq;DgO;;cI~=M;*u zokG#I1vY!v6;`zSoD?l$^FM$7q$D$D$}={}QtfwH+MEY)?EqD%G*dyG^lI8$NNa=E z|#129=UnSkC_;%)Fyz}b%{s3At!)U8W2 z)}XQwI2WMleEAAS548eQ)7@wt<|q1UM&@b?whMNjyFH=2Ja_s4-8_Gw%Tn{`A45t} zMNMaPZ<*=CvO=nNa3o>XRV(5^c*xL=w#qIe*1k6X?ws9oj1_k0?sj8Aq5A;tG=_#k z=o(Ig1TXZ8oKcq)UHBb|$wLEuKyQ{_jZ^072SGVpLMiv)rMP(8(F3`u$HLM)iLm zC_@;#I9^Su^cp=T2P=h%H!J++6lgiGoLtU%*4z*JCzwj7x?1R4t$ErIlJhx1jez8w z%T4L4>M*g!9~g69t**#9bMTU57L~CL?pa$Q8kLP2r`~cAv%i1*ydtRCKj#{8KbfBH z(f?Ty_XhooiedP(hui<2iQ&C&*~b|0uUKWg0r)woHbcP`|Nd6Koh6c6^_e$Q9;;#M z1to35BIZGTZkbYQ0&E(|{a&NXt1OV&J@c=1lQo*#P2;AOH{IPknC0eU>7{47{J0fP z?VGg26=N8iETVsTTwW;<%!_okkHp3LMJN14qRyMGja~@RH|KRi zh&0Peveb_6?sP*@9{XJ4@$JHN!<`Jg+uPXXg%hI3jWHc9vgcwtK3&SFkT4%Nn<#(1 zySe$_n=(nG@UAf*gCb59^0Aj?dDi^+bME<7aQpFZ2ngdV9URT72mSarp#7xaMvMXr zJie-~6zl`|+BO&F$2t zPz}Rm~2o4N?Xy*4-STwXx|2mwN7i7oSDZ>A4bMKYc$B%!e>KKU6O68gfHd z_t-Dx95T~}6=z|4t8o-087tzUg%W05U1Adu!xBI# zhz5Qu>S_)fAk5CQZb3=>m*{S;Tfm~c>`h=#UE3fhQH&Mw{DlxoBk}TI^ip|?f6W7+ z(C2J`EKcA7!fK=Z?be34UL_ErE0 zGmN6L2_?PHq#aR-VYNPORN^=FH%UB)_8ESS!jvVRR^q^0iC=K$ZbXu(1kAHTxi|t5 zhZ5a2l~kQJX9j7EH%*9iyg}~?K4=)b9ch0|AnCpV4&9>g4gmMiwNZE;ZJ(Xd(Yh<& z`{OX;HtrvneJ6<&Hfx>9g=dUT0RsVYWBKHXIz|m-K%!(i!elx|hq>TIOu>s31uuH1 zk}?U<7EcTET4C_nt_0!hP29fT(%*}8vWom54T*f#@UATJ&z<`;D!3-I%z!1|&1-)e zO+`&J>A#dt<~5C`B2sZ0jOm~2JQ@if#!MJ5Ft16}vmyDs%~*|CmavRvK`j{MhlF#& zNFif;xqpYsk;q3X^`C!rEh-Gar~D&e4fMW&rk3^WG+4Pj>B~oIrjoyD8nME0181V~ zXJW{ECj$R65fARIEvJ(9M{>`qshWSdYZ`|0L{>OYSyc;dd%e1tp5^8-J<)72J<&`t zJ=HNbQB90Z(?T9PYPNuq?{=4XD)YmjJwR;YiYNO6~L z_%rm7#hPVFj~DI&X;Fyc1CAtJ#11~8ZiIiWrGsvm*Fw9HV9YDbFOIlRH1f(a?e5K( zvgM(gGAQ8q6w+?&!yw(NO`~&zML{vvjIerKZu6K3opR0W9e_liS7ie5m<`F`2qRWx zIK8(ww*{Vl+>H;Gk5)5m)M0-b+fEc`;Tgo(&85=U)+iKu8p`_ujuyAFFT zo6sNht}jdcW*o{riNYyV(oK|!kctg~X@?><&Iy#>Vrc3Q!-TL>)|r?`|L_TA4(TB~ zd;+`~m8mq_v$l_99A^3^CO!p-^c((rc%wToHFC+>jjuLH7K9@}9O-{G&;r2+dpdm5 z8k6iI9)e#D-GtUP)VYCZ8%Rq_hTnOz)++OWz2B&;uLgrUT&C_jw%uieSxA>Ga{u8) zUk!$Jdh`A8*Pn$q-#_l=K>qMvb)d*2tMl=#Yd3SQ^L(i?6b5~|Pb`x%1w8Zr(G`b8 zC=Q9}RR+ozKU4!7$AEtqAYFCTzM_2@{`qW9klO%}4^xiE846L1KbIzGD_Wg<^0>p) zrGioUT(yCwy9$8Gh(Ll?HC!MS=ibMcLb-iPE`rN2P9WUAm)zdQtfY60b>1|W3$T8s zy7q-d&q3mQ<1w2W3)?8Xlr>cB7g%S!@Ki}Rz*qPS$>L(FR6T!MrVsX)rWU5V32S^G zM8P>pN>Y6clxlZ}tEy?s<<;=za-UujlM#dkhCZE?M-hgi@kMx+wbNRM+=>ksC&__1 z&5Bs>8VeID^Qx6o2`_?>(_xrxM^FPBq=$Kwxh7wz&NZpm?8}q;J|05cECnAifo8R+ zVOw-!(5NyBG7^905JbYbNLrk6BVXKu(L$A*nVR3xld(xBO}rVoZyD{1Zf-h9k1cb8 zck@3hEYh6q>_9TVx9T_8)hZ-VW-V9og@JN+aM*xoSe*R7zd-C=Q_kg!Mc>syw_kqI z%!_6=a@sBu(7G5thW-CV839&}l$muxTg?+{s+^b0O1ggwJO7R;ZKXmR*1~4sJ$aE% z0t#dvnhTXU4xhY)e_lL?H!n{FVuiU+qTU68%Vt1U#d&CDk%+KitfI)Y87fmIK@yB*rO*_zLs{l3;`P%5a@5sQmL(mQtAJuqb(*q5S6;vPEp#5` za-~sZdWL_#p=4ITk-otQBR};6QABCv5B;e>@Gm$-CcU5pB7qK(pa7AvG^!7Ks=PM) zYa-S(sa(2NX&bWK?-2kmB?`LXeb|TOUuUo`G2XOSNS6Uq*1wwer&Q7(qNMBj=W?nS zJymMD&8Z{NkOg`_QDd`*@MlJlm{R_%wwJ05K{m{A!u2Y_s z1+3w;&#r8@vedc^0~VP@B9erI*5Tpd69!uNt92D-7p(xF>JY(qYEltQJ!vt~u%*OS zzeRX<7j~`5P$J0fa&XfMhuzk9PzUBazlG3LKiM3*t(%rUE`Lu!pQIUt9Dmo!Tls&H zT+sLTS`b97u~#G5aWF7G_&UW%^od$j&GM~9|DYC)owuMa2>lsQq8*{E4MBUuI0KDT zaG&{VaL;a383du%4tnvy@JJ_xfjD)+f$HmssVP#-2BBRYl;0V4 zLJ;Y<;eCfr0xo@^KBPB9p+4i!De-?APATmYOfbJUH62l*%r&cu-em+U7MGnvTSA#K zm^wSk9ZJfQkbu98DyqjbfA~aWDAK5R6Mz%XIugGw-3k1;8=hZe-I-|VFuZJ~*)?)8 zXQMdCx~&9yL2d@;k9PcOSBsg=28iLlAlZ7W9J1o%8RS+RLolubDiGt;}&XRbns4Gx* zet!H`c-Fcit&8B27-Pd};naUQWxZn)=uxNT@;tQ`DJ9^4W)Lk)I~7*}E-d7(DU1vGc3HlrH`J4kfYW?jzeAcLT;ZT5J8W-u#?5_ z;wzG@2OwL+%VqY$LrMl3->CoHi?D^#drvr1~pFe`)3C$!GlI&dX7nrTA%g(r*| z=yG-ptgnr}x(r5B@NUI_sm$P1$%kJ5zryyizwC$779D5pzy~UkQ4R%+C!TjOI`TZP z%ie&Qg}n*!4Pbu<1HD)sDBwQ^G#3Q>IPQ`!GRz7$2>zJf?tT+FdYK=ao zc2CA@_P{y2LOcGn*q>uw?4fK*fNR+r0Ij5Fw|GBgNkF-tNsPy*#hTYsY1;1~9Lq~d z(FS%SrM(O|iE&7!Fl(^dw@V>>{3~0XRX~ zt)S7AHHv?x<5QCCB$T`SY`h=n@Asx>_WKJylaO-z!Sx4nPUXx?@&TJeINahE&A0Gg0b6NJ3_W2Y&n(2Sc z)l&)`Q>o>T3k1$J3xRe3>+MqB_hoOn4_O}xiI9J#O(0;DG1TR7lbm(|fUgvX{T~m+ z)z%r6y_T*B>K;J$Se*r~gt7}2L~=r+K{%3B5?VK)k!Qgt^7b0Ep<(pN6oqhUYK%{0 z=|VKbX@_cdIN=Mco8o@kDvzL7X825Wb46mCD^N26Op+WDa!>cI-`#L^)cbEjd5RI! z-4B2DFFq!tzWI~3AF}pCA#qN7L&~>+d;jzQXVK0NHGU*5Ae|3M%7|F{1?y+17mxgbpz;J&j9B6`w+LE}iB}p&F&|8ShmDV1>I@G!+ zMSYRXQZBUJOo_oUFHTyRw^sE-9~Sh*QZ2+2m8GpV>6~{!xgx*q>S}%HUDwzeBXnD! zfniAsNRSLJ=+9Q3f2Z^X>gYVZN%E=#aza5Doy8T$4qh(}!elTa^6cTW`m+~i!6<(m zn1?Rp2P+h(Y6P+^xR*<|QQ-(;LI?CtXM@)G@jxvgNL7W(LAsVjnI^UTId?I5jd&kvUW zws!RVJoMYJuh{{4_Kb@f%K3pF9Q1#-2DN=DP1B%-a7xv=acEt&mySGu`xIbeLBj`i5 zwi20ry@%;!!k!+rU^|7!x(+K&@xxX6sLd6MpwtXJ`VhBf#J5Il^(gnDS9*Vg&&Ga~ zG9TX_6T7m!{Aa~DAm8vOjgjTcU*}rkKMWY?Awv*oekU(}0)7j*tghs{{H$kiRtA7f z-LcKUaTk^FB?U3xb?41q%C$R|44Z{4*H>IRnCGfiz65q?EcJ4C7~sFs(8ovFyB4QSEQe=L8&rngSd@n4D- zNsL$_ny~YO9384pqxg#Bknxyqb`Px(`m^A34+)8eY_#1H!>`u&WGry4g-Eulrp}O$ zF9UH8e{eKZ9L?cjdh@-XKR@@G<*Y-QpK;sEeHqSOilgnj$zh(B=J@v3ZO>3G7n7^AWr$tG`vb&y24BVfqI^uSn+;!3#kGcfK$LM7@U z#WXOnGM}I`x*~!eL|}@Yro<~}u1cyZ$*tf;mDKqBJNZB?LJ2M{=4sW4>DM{}hcu=_ zmyce>6tRQokA)9>QIBZR6fLNL^buHZCKoCsAr;b&?Pdv?bb@~@Xv2l(dZ{vY3wKiG zd(?rU;A@czdnf{sG_SxBxg;a-gTM-FfGx+z@ZCFjP6_|i@eMdDMcMlxIS-?ELeA8&iYR!cyy*ICzT#ioF6b-h9pI=>X4aKjFjN#{J@5W(T98i=U z^ma&l;Hgj*-ph{WYtu$-2r-{w&tl{`&(jT~Q5aG7ZxnwIJ}G8y`e$&6%O{^#HNMsl zd-_z{up7XJm@{s-!`s_s@0nthfXva}UP71sxO03A=GCGTN={DX|B*N_obkIFI|*IbGR<*nxr3M)2-%T zz?0I~A7XzPH~=rc%k%v>3r4BNYN|8{sHtH38$9T7k96o45U@%AIf#yA%z*Ct&q@i> z%PwIRljOC+>~Xw5p^$L2V|F>#PH^r9uMZOy+`7T*JXg`ZRj1i1qu)Gs-?|qP6bb^1=l#)6BLV7x2WAM>te+@lA_cU)) z={alTCn!h3M*}bSpo};oA~tyoWROQMh?lD=;K>r*@0uapBWMHI{o^YGlO-~3=(f&M zl=2JcJkSP24wJ?v|vkm+k2-`+|r>O;3;Lw*w*a-rL}wB1o#vctsc z;GBOvp7h`0N&i#jQUB9i&ibD!4*Q>qr=4y`v#SHoIc*KdMF07s=lmN+p1YiJ*Ab^n zo@F1x2=^h39`|9s`;bn@GwcIxjX8j({16}^LEioOy z9(QHlyW+IF#TDLXO}0>2sN^orz}|nQP5ggPVehRi`PM1k?|oa`RPSjm+1qeHm86^Z`{XC{o0#qx&ybAKkzIYo%0-qqsU0a!}IEJPrDuoMFNRogcVi^7Ep!% z#PFXaUv=h4T=}c?gpGQn_Y(e&N2D`~&)ZZoBWW6(6Ol%7;GDuS1lg_)0KB{L6@!0p zPt?yi1`n@az&@^5Z3i2fEPQM}&6EXf#vF{i))+-rXvH7rsn&$ZLe1AIm>&wBRu#nnO_8<~M>HB}2K?n3izERI)O`O8c8;!LW@{3|oZ1Ksy{RX~S zu%{!cINKvTl8(63mKKa=Ep1_7R(l>ZQ=8s9H>+i>Qv&v7$azSHTC$RH@QJk2X~KN0 zA&xr;Ba%qFc9_b>dIr=E&l+LdpZ{ZuT5~!C*_nw-R}12fCiz(4h8IWlb9(NIkN9zR8N3ULUdQn;7;TQmB_|v*YF|QP zrncFfzo3&H#)B!~T<0_%UU%?Tco(LbXdsM^_~8;o)Cire2bi51_=K%!GR<(EBK7$S zTYyY_<&XG%q|#LJl(2%Pxf6er9*`q60ZhNwPDZw1y4N-p|f~z(2qN; z4OTmV?3j_2m#L@aWrFNwRfw+TE*l6qFfce8YhE5ayX;1o;)z4=h}VA-VT~kCi;L;% z!VoYQo8I24zv+h1vm`Ut@B}RC>`81g^4Q$o22gt)_{De_QZ5z>3w7I5=4ohWGOO!u zbbC8e$g1^7uLynC&^c{BU0mcNOvNJE-}uk%EuRLj+M*v~S>#@O=!5siG}n%U4t&nE zv(r$>aoqR}U|2l+O5cBO98w>yNX}21o`}}=F4Ab;ei##$mph$KAiFVSEiViQPF4d} ztDqG}^!f@egKz}UX5&HC2H|e(w;*ww-+IsE4p@rA)?#aqUYhdfCWi!^PuBw50L`3l zsiZvsWvsV=Y|E;UkL*;^4lpa!0x)wBYl)HhNM1wQ01k8flXidRg^9N}*2hcfGD-D%{n_in)Xc}N)uaIA%_RZvtly@;>Y zNAym4HO;a(+MZ@%X#Y@H zgZ7R$!9Kl>=p%oC0Z2tza*Zy;l2qN^8k{xT#dq=GQyY@=G0_4Ne=L+YgPI$msD=S= z+D4Kr&LIeC2~Ov_FOI0rF}dlYj{+5@VMx31aXDkrfU@fR26pMo9<|Guy~=ann0iNS zVNY%^k-jJKjAd(UofS3qdiAba2}n+#d9-FCb5B~0+($WyVJ?UDg{7&(_NrDBfscsSChspY{LlM4c_?7Y{! zIlUum<}rVru!NiSllX`&o6Uf?m5zOvW$=d0V-#W4AO=!)q3@8OiVT_Un~c*DAaIa~ zDIUVl&5f=7wO8*pkKgQWZ5;1z{^R4;?&b#29;UsZP5uRbk0?^0uOyW~MDO6xh{cb1 zzDF*2Sxn-4m~;oKkRZoVGGRnHI4vK7%kUhN0@i;|{sT^Zee>PB;}2`UY`t0A-`f7* zTE%yTSs6~yXQSX;N=oJ=WDFr_3g}<^$&@&~K|9~+3oH{S*M@-iuziCOl|e8S(+O#pO!WK^)0GV<8m6t3Qx?z;A(BFXH4fYYxgYmaLqzGgY@KOJ z<}P8%Ho<}CRO%xAo4i}lW`PTAdn}}BDs!BNQ83z28RdGrnBhw*mGutv^1YP=xnDs^ zy9Y=9g;T&WRB0t*3islr{n&YBX}9ZEsgHjPuYbX5c6WKTT#-5E%f0R?(Z#Jfa%SJu zYINz)061LS)3K^$l1sm11|SXwn&#(bMhdHKajgy8`3@ zbl&U~wIj+{PW)4!m@E={%`>F#A&OJ^xgM|K?0(qZKNeKjKy1Ep@D>-vdj#P%si}V( zQz7>$+oBgM4X3iV`EGN)jD+Gvz^(u`QVVLG!|YN@G@x2Qi}I#G2q^6cCKD>A06oC) zt~Ql4)Rci4*@JwCd-NqZlWPbrWaev66z_V|B6S^kz2( z6hp`xce8h{hm76O|Ft`R?t6!aIsJd%^K)6i;1z`aW%R1{_aQ5WP44|o&xepU#>wM^ zunGKL4@QG2sNxv!$kB`nhgo}1WK8R3tEL*MC$&cmoi~~Ok`)z}nq8%JLJ1z?0D31( zt;80}v`ek0H)r_?U-EWc*MMW&T8BbWrT4frfP)uhU=Dh@0@PEjd~xyf%N2hWCh|Rf z_8G!dAr0#iaMEb?$r2D(m-MHr+nSaP^cb>W+o#$&f2x}>uhQy&qPRqb%D4OP-}Ux6 zNH)s5KSe^=3!r%x#DS!a--FaE#(7a!^q8H}(D8ht8MQ~{n@_p2lfFx5AG zyUyR5453^8gv^eXZs(IY51)T3bURE{6thkMr$jG8owy--*>LxQDl5AeakSQI_iU|h z<N*p|IAW6oy2@^^0&cY=82s2ODC{-P$pC>&66St%N&1dPSe?#}mwZk37YU$J6z_ zF^fz2W+|PH$3fCy0v$A~cDTuwb`l}K(*GNuA%60j4Rns zd-eZ3-hO?|$2Qi^)*YWw09?~QDi@x?!ms%4?_bxzK+eSthW&qS#meD327=a}TCM;F zKR+c1l?ImuNC0d=lfUn+{lb8|7hGbMa|XEAwIt)Uah4fwhCOb{&w5b(kBr(w|gEG0~8{{ji3;9(93k@8}uRcmO|qMGRe#-f!~!+Z=e=? ze&VknQ=D1+uDDqT@n~sGKbek~R=x)lUW0~z!HrUnKaYasoGcxGK6$qC{qxVtm|DyH zm#zkt?1hzt&KprE%TKXRAz*#V$QcsbY-z9XaoSBcH6u_p1d@MB?nTj0aF=-gpq%4`R>eNIezN50$D) z0j1Ta0ziRLQd_!b))Z#|vf2pnR6~VSKm|Hnhj(OXfW=%Al~PStj}r2RM6JvzL_gJr zM~GiFd80S?LV)jgt-*ACyUBgG?X|ZjQ=)6Ur5 zD_O1ojw1`IT;Z)|)_YsM7aKPGRax9HI(NX{-Oc;?bW?V%x{(B$lp{&)2&~^v$2bjl1R;{fnl}k0T4W*3r3QwX!bi zFFJ&_-90$Q{mmG6Z8-cuu6Eal*aYOsb;N|KCz3F`l?XhS&eW*xZY1oT`64c5Z& zwrktPQS$-j2NtfivYE82yNW0DNmrOL#)Wc*n)OtFcv$NN3i}sbahXhtUjSLuFBPqL zqocENe~c+OR_n}hl}oskOE@b|h{-?tplAIvxq|ch6`YG#=Z?NE`y?U2dQ3oViFIy*t02tW z@7utCa|oA8-FF3WFoD7#3HYzzLJa>EUo$ZlJUJcQg^pF?&O!GFWw+Gq52fAcW(U~~ z_s~gzgHYxy?Ig7|Pj2velxDPcscFr#j-8hSQ>2u6drWW0l`0wYw3F`Uq+h2AG@1CB zm5-QFNOLialy_LU^07lH6y4ITD2r`FWpsOgOC^ASUb-~ba#E+AAj_Vs(Y3ID zA9lfQNN}P~Kw+9Hbf!_@${4sZ4wqPgD}?({fGa%609+XZm*qyP1ws^1l&M4*IAaQs zYHJ^nK`G>AZ{?@{4_*52&;9SaD|wBCXL~uWiVSoOwCs>~te^x-J5ZyuN9Z3c`Kv1q zU^W8CeDF$q_Yxsaaq-P^e>;4Fi^ep6*e#SragHvH+~*Yk;i5P8s}Y{Ke5#s< z&E~V7rt2`4mfX(trf_wrc~g{jD2q>Gg+3iIv1(LmNr0JTrqaAxrj@t%UGzE-b4R;W zI+P}w8HG_%0i7bt653MRiEo{%)p3i>;tX5WD`z0aPt`eW=^7g4)H~bVZ=ofB6gH5k zU^xXd7y8a5!Hk!n*a&UaN0^h(WH8MrOV7N-)v;YI5Wc3z%Hg97wj6AP(etdDTLhISp7au88I}8%#eya6P3WWjpahyr>s~+uMbajJMRi%K0*Xpe3d!OIcSC z1oeT!VNHaHa2*1IU<)#?;>uy&{t{RnQcn+zwFp*;y!&ArUDmdD9sZcVLdwo56#a&f zmk=tLN7up!H7qMwj^1GlE2|DU2z6~hv=&x8Kh{0Xi=vXb1@O(Xyg|!hozkHfMtMWf zDN>4C2;tgzk+Z#CUQJ(r5H1U^rq7-U?1H^dF~TU2Zf)&_2=hQ|lq{(AY|}{ESa%sW z72sSa^a>sGP++FZ?a(a=&#v1yNqp4}eXx)~)lJH+b~B#^Ep-DQK2`p$xfvX5ZA-|v zWnl$kDJVPJOPOIg&jr{q9=w3IC=3)L!_CeC*wA@l+jt)s32qvHmbe3<5h!TJmq6<` zkaYpEr(@DpT(txN9qmOa*zKxlpOSc*nb#O_dGPu78U4*z#@EoMOfTxFHl z>w=D<#(;0klYXmVTUOFT3FD!HnXwE(?dbN%QZd+$A$eh(Ln$YyByiG=c$`XZ_#fyo zeR?RDtUjg(6GeA_2`17a(ClEMrfda|G=jainTnD?Qav`*L=I2eoV3B_q@t(P*qo`I z`x@+lIo*L1PhIuX1Nro5RX>PTTbl6_P`Qy>UHAtsXxF?lYeJrA?HUjIL035^8nNew zKcY-m4pO-G{jfjmVm=Bt7sLa)#VQ>M8p_a?F`v}we6D5>6U@5KPx%NPS;I6_?Jn6Y1`%42U;?g%9;hp>59>) z{KRM{O+?vwoE9q6fngznbsj$1Ob5Y)`N{x284As%rMvb)lO9h1;{z7AgU_gN21bw# z=H$eZ`0odQr&@P>4o*vtoRMV_*Tpy?B@2)viT2}yOy`J+RXYM%d5dAkD2sZaq{6@2 z${kmzQZ?$YMqr*xQ9a0bYaiZh?j3Jz?hDU7#mnx+Npjt~ z(mC281?(V0o|c78rx@9gSK96j-DgR%hCve+#H_pn5&baXpfTpalq zO2<@x=h1-f4C1irF}#wdLV1S%MM2@ACt$d686k{(3N`wcyevMsuqXg`wI zSQ)db_pC*iTcMg4Wbo-U{w!cc*G+P_s|=l%zWew0SGC?6TK_QE& zB;Ip1icTx@f{%kzpZdkL1~Xa>h0k^*e6~%04{OcPuTkTO)!Dq6-OgDiJT3dnN_f)a zMH*x!uw-l_%K65hN3W+EbG3d06ALKZwYkfFG824PIGG!Y1m|Lli72X7zfD!-eX&G*M^?{+uWHvV#TQ!O(2`jI6Y^T+KNg*TYV_h9_V1y3njmQ1x^Eg zmY2wcZX#mzTg(X}`T{Pgqj^l^EH~(dJ2xnoSD;24w|eSXJ^9;R$d6il9i}@}_zmM} zO69BzDo^(oRvhUpZ56DQ$VJpLbUnnHhFUJmLITU#(oAZ}0fi~s=D>>ZFqkpWkji9x z_6^~HmO&vYqpLo?5BSj$YjZq*$*uv1-!n=>mw|KQoeHKX&Wjg!7F6$S zBZUQ}*hc8Y#*QRG{#ozFNT>m)9LOGbbD|QiGv5;ttNfM00vqN2dEs(86DQ$J+34-- zM=G13(tJ8ipRsIESMsxjes-3`zY%O%{cX}u z=(neuEHA#@tsfX<^ksifW!Gvu(tbEJ;+lxg#$rYtPa{SG<@EP2d&~Z&%VxdaUx&>5 z>-psKiNEh^aoxX$7T3^!!fCbv&#kwZdfE~9W$ymrlMch&Ne~h3&!sG$=s#hBHc!vUVq$V+u zlenmygr=yO7+n=-GU-pc%dkhBw~)R>;6w2O3f_lZ`rlRZtQS8^e6c~}Fk*dSbQvPv zrR!A$uPC<jo zVc9G1pfE4I2w-Bzj`%Vcw?h%Kw4u&Y_Z;u}3&BAI8n9aOg{JQaa zjSZe*!KeLGSnz3a!HyoS74Hk+e%@_7Y~@gT_x|A%rqXbB zBO`f+;DALmD9P{D^!yttCv=5HV#>>U>q@}Xc)w@A&soU^(Vtz4K|Hs!!x!_s-v#M% zZO-<{_$t>X4G1skLHTyLc7X!lcjPX%CggdR%eS+CQPI-DTPOz+?Ol-337$@w`-p6M zpuISnWffk|!=SmRo1hkO)OfT+pQyMA5q$w4u@uuXMuGR>(M~yAP~Hf)FK1h>#>PRJ zRF0c2HoVQ==NgLGCZ-yU;T+5jhgLW9(Nh2f({AXGc(ZPl_ju?gpBf*y9v}1awcZHN zb~!qK@#S81vz&9E^uM9L`+L?MQzNS0B@-_Y~h29+%(h-NE|IJ#em+V#bbRmB7Q z&4IhCqn=GmO8u5)3fQRa_$FVCJGg7T(2qM}&w2@^U6e&K5hnDLS}M|+Ow)_Dwkb}O zNOHdY)~RJ*$DR+H<2rB}RdF0W?X9QZ2YGIPolt%tIUSft$C^nbJM{Y656G#M(<3N! zjc0CMV|-6Kw# zARBr_i$^X(AqONf_E`Ch`!XX(TA~&JqC{CV?AEawbbdTxDZhfAHMm~MLUKn~!D2Ok zxV;7U2XaMOwf2oTX%tsQJBaf2teYtI`msT=8SZFm7o=?|T^XS(^MnZl>qp2}u{uI( zriklynA^R*lw!RIt{ZMD4}XWI#Yc zUL!x_3A0DE51Ren^$`%w+7D&;CUb12u$W9wDV@Dw_5{;@Lw8Pe{OX!5n?e^JvGO12 zm%1t)3L&y(eVS(R7(attt^NYDj;mA%_Z!B9uItJ{=7@P6q3A^E4dx8;WKxQM0!Y{u z6j^r;J=1F1Y(Wn__v{W+)G9d5cYZDw5T=-0HKQ2UWD-A8;JJx|!R8kMl>pV9;Be8^ z#zVg&eZ}4?Iv_gl92P;veC^)`z3`iX{9)J_e=Uoh*JQUbIU;0d6s# zX4?_ZKBRh3miYgPqvs5h?Oui6B@`t8(oOOaP&?DpJ^DXxHx=|8V}mGvTeyj?58yBh zapaWeUA7wRk}SF2AfQP4{wMh|-OJ+1E=eg@xFs9X8;v5ImNTJ2waD4)L6%#ck2SON zvD5B+>@+-!UO$GK``)S*m{5%Wt*+6C=1^CpFAi6PuDzCG3*>bjAIb~fv1Q2Vt__EA zv<0>P=y|rs3E*V|i#fJ`D;UXn`Ynf*T;I2XdE740SFB@co3&RJ%%uVPqSv0evLLkJ zrW(rsmWTY5L>xeiU&CQ`;q`BrC9OMi%{Mg#{|dV5&K&F`XOVZ=Gp#C6(6i!xO1je` ze!xP>&axd|b8{MJly2|P&8Nh+yNn72+a{}JJ~EoSjINkv9PfgE*O&^_%!;spHb6U7 z_zV`wf!4L7JpLW0hY1LZFGi66bqudGDPxE`if*Iv@0`O8|UZd^8 zus{6d`9&9TL>s3Dk6C|Fd&gAv*wm#%;Jx(uzhDI5e}XAM-0OJiHPXE^n$qc}9fmGR z8(dW<80RT7-BJF3&A$-eBfU+?IdCEg`?#&s6Td7-TB4*D$Tlb=MOs3~1V4frGnD#< zoaWKx?j-RzOojH4bzwB_WEUiAqhGObTIKJ4r7wWbpzzyDUnTJ;5`Cmh%4j`K67=h( zBY}5q#w9krcJtvAbSdnD&?b3x+dF`tJ*6+k*_l&~BbW+*`WcJnhT*iVS#<_CVr6hE zG7KFdNF6>Y^bK|u6g=xE&Z39wXRf!K`_%Q$<=k@?DVk>N`9?_j*t9`~X2*qS-2d(_ z^GPsGi8wv-=4K$U-sK77sDRblK7$kSI{dt=P?jLy-h?3|xrXUReM@U?QQ6wGE3nX2 zKGRW=n_uC70VPif<;e0D_k3YKA3&LA{`8Xj8l6zViejf!GYf`kYuLlEJobwb0mX<& zN9hEG02Z8Y`=x2ObA|zlhDX}+Y6I_vf`d$X zrw?L{=MRk(3nhoejJ)JWLs*21H&2&UNiG0~5`#SmW~M}IKzQKkn}QE#sU-L8*~^u` z{JgwOAv1t@6^Y(9?o%?z9eoS(1JFk}2ggzG`1p#PPJ+RwV_yC3__+P!@{htJay^1v zyrXb`9A;qIAQ*rV_-EmWpnm7@3Hc01kf+!UvhJ9+NiTi6%8%LE&ma)LipSjr%40H_ z_Bv{j&l!n^X$v1XZ4GkB9_A<)awiV;k11vGeoeqrCFvccM%UGU}OuHMCwh2!^eg}YvV zvHtXT2gvH9*YU?F1lvq7I#M+sgO(h-#k=Fx9w!vv$&lH1Nek+5iD3_)ILbbXnvt?Q z+A2(2?BTG}YLm|aRHE*-Y|_~3wQgG0$Fx;4C4Nf{+AYaK(aOE=yqwX9eacgf2-o&5 zC}2y_iNhlw7&z4wcp+4}qqKp}D98|hI@kxs2D~BVdI$Q zC>YV}W7rzf?;*s9lGJlnYLh_)hrmLsEDXpj(y55i;gkM%GI#}6!Nnw&^OGGd8+}ax z*kNlr&&^W?aX`bU0BlN5m3t!F1-`9N*Ah!YM>0mh#C*N6yGbUOrk9Ks7o2u~T{wpC z$hX^c-)N^qT(Kq1bl)=lR&jmAF1_1ZcH>yJI~gI}o@P)P-CL#fe4ok;G5w)fQ6jzg zZsesZOo{eb{CzI?VQq5xiMW65H)3x7n2wE!@?Cw4m#}sK_VdYzO8pcH_C4Yc>sN&Qy8iij6 zLPIKHaJr?PFEjISVH#R)yw@zF5l)E76Z8V>5so8tT(%K?IFQFwECi5bXG=d*NKonz z(TJ2I?q({yoVI&4ici}I!~#km7?|l9IXgqwQJCqG&%zst+)9?0%k4FP!-^NjNoNeP z*JL}{o{$K}^2%SeBcDhdWTve8f;RzN#9{B_?mPa9xfRmi?Fj1Nm^Sbshb)}F&P77b zdLj7F6J?BV8;!L2NI(0_Fbz+`QJ6vQ<%@7Qgqj$BMY#?56bl@*?OGems3@zDduXc3Mwf;)lMXo7-v%CFq=lIpXPUtbXy_Gfx&WVYc@ShzlHYPst%4LKCA(tod zyTd2nv8*VXNz$O<$9jPA8@^*IFf>|RG;PTck`xt+)fYsGWj}m>Rxz)W!zW-i#Q&NX zTz=9Oc2E0-a0)AvTaFtl29E1A0}Exixse3t=kSLBl+?(avk9#ml9pNdiO*R(2PxKp zlJc0V4;%dDEj1aZ_)=~dsMzJsI9m#j6zh)G5f070m?Jx{XmsLvoqxwtZ!R~|dsZg4 zdQN%Ogd%@xLT*rh53+$1Rs$!HbQlf39pH#Lfn{_wdc*Rop(IQEim!5Kd*zuzq3EIo zEPp7^w9knA@@n=XTFq2OPuF)W%-vfRNj*WYb)cFVI)fu!`BmDeA2Npqj4Zp5fU4bS?IjsW2aH|uvg4;`MbSiYj4;>X3efE8>vc7M?McmQ;bj= zGd7s=^ed}v#W6DzBJj=l2U5xfFbQ#IuTSK<3)~nP4WUsu^zn>$L+;ND+_RtM4mvfD zt!>N1r&2O6{GQigb| zbe_WV9$+K3!X+XU+W~_z>ivVXN76&oG1bMz5w;tDb+UL5Jp|gGmI~&{^YhSWtC5w$ zhP_~MG2ptG_4M*JSSR-5zY{W9OIaUO>g;iOQ>=gZEO|D1mQdOI*|S_$S#aLmx$6#* z=~?~(D2>?UnQ2*Eh#?f|y?xUD>Cb=|mt;g)gDQZ4Fwp=Sl#9rog}M9cvi()d6iAX` zaOsMF{J2sYTsuEc2nyhIOi)E|ZB+R=@zWk;>IKdUGA2{zNfFXgnki0T8C4)1?OJER zqzl7hT<%vC{fUP96q0m9?}z6hURVQ+lwv|+__N`Yj{IHFJBy+$*vxt<+&iy-oPjn&EEhteK}ayj1gsl{l22M2Jr;yg zXdVV)m}oRlBH=p&e$3);^i<1*JCF1zR5^Q$;nH|a?BV#f8tt?@!xL=eF@z7}rL zq7!DR6Hg$EKFd7{Nd{k$j}Z&1#cWjW6y)6-mNmS4<0$4%DexL3#|689$U)dzY_V$V zzDoIDY)$1H*)aD@OAygd#>22h|9>eVXSCS`{=M?k^2Kv#{Icapd-PrIE629|I38u;1a_6{L+ItX9#3!zbP3zh z4jubl91K+xWwU{21v5wYhLH}?`$|#^EsGQrOzgZ^!eue?5$XoC#GaWLvGQ)K!qethqPYdalxDC;70(Kw&`EaeVk>Ct}`Dw=JC zXJ-WX+7Lg6OW{3eF9l=pwpa?%K}#Y>lEha_Q^0od z^#-Z_d`Jr4vwF9=+`y!Z;Z5=yYabq-dhIwmJluQc(I4rbz25D=gUbN?<0e_Reegdo zkN)i8e{b6_umNrM{Ldb1&^~wp?>m1ke+Ty@E81kc?IJ-c`r0y3z9;m5&K;xxJ+_7P z{s$Hs{ZhnJaF1iu2TWa*=#M9en3nTW_lKYSME&@|w_`uL6;Ty_jRy@5xEJ*<2y;}yuvheNJGo=*!hJ#)=A88p zy5x#_M|Tze78njOX1FGQJt-4lE0Xu}sU6s`>VmawQ?Lv&FY&qzfjJwMp@Ladp)M0s z-^3UFi~+?57`4l=t-}_N?Rrfbv0Og z;v$_k+!`L2l*>=Zke9g(GS7MPOQX11Nl2WIOt|hdj|XmrroXZDPzxn#&%aCefP_l} zxE39~6MT)A=G}UK&*0*%=sq(pW-l*8lX~MluLGKCE{`Y7^O|kS5~HIn>-swJ?I@L% z<>f!2O<&Jd*b`PF*ADA(Jh!*sFJm67yA&=xf$VJ7L|p?yGYK7(Tj)AMEp?kK6Nc9C%#r)6OW&u=w9fFHh>5v+WW+^ju1i7u|(lPOP)DI4T&YPj@3KFcy@ zm4mp1UsXhZvcRw|1Bm^Rv4EjxJ(zkm;4|eHNBm0J`pv{0CoQ$a$o2`Y;Ri}C%lNE# zNycY%(Jgz`QdyqWPdhWw%(z6dvQ10udOwa$)50RGtH;V3?B2Odpx&Ty9p^#m4iutf zXV?KPau&HrJ7|_6dg|JT0mZ(&?6m0=s=$BgT$go!K5F&vHdss0qKCf{dBxGnQqa2Yc!VqmLDU@d*55MKwF5x$J29>e7WdJ5mQZ3vH z09^JCiYk`9izsNy-eFx!ps_pPYj`eri?l_5#iAC43@J41NusP?Y@hYmeW@Pt&UUme z=B~06!T|bmsObNmds{(Y_L`nl)llXzwRfp;h^hPpEV!=dr|M41W1q@GlS(6#zEEHi zS`|kl0tLi}Eqbob!t*IT5G)SKj+Lp2OZtwJ2RT!rHoY8q0^R%s3zuA-1eS9ts+z(>7~M=(N>8d;(jMsEF(0*G_G4Gi_m^Gfd)NR2df9 zdA?>j)QB#7OjjY&GHZ{F{E_m1Mb%A2S^L5WcSwbTlyZrp*b>0<1UH&EBQ=Vbf;(fp zqg_4TFiwe~4ohy2!A7762R2&#B9?wQ&kbGSI3q3i)+SA=60- z`Lu)$@tqXh70xvrtRR_`j0NrPIaEPFDjABx@tz|UM5>aJpxu3jD)K#lv@gM6V8_b( zbtWDe)~UISwjWz#W$^=yq^=S*8dI8v^5J|(loy&B5I3;I(l?j!*p-T%htXu3u@NKn z6sZ718X;t`4)NE1ye>N?T0M`s%x#aQ^8(!*5KfCm>a&~iyh!bVwzJ@HIERhZd*{ro zV-Rx@_Z@8e%o-v-n@hicj>(tIId@#0&P$+>1OD(y2Yl(43IslcT1Y0Uy@uC~5UqL` zMQ|O1fHHgzV`!w-F~|oF-FptAT~dxgM0wA<4pe^XBqcyepZk`q>fE|6`1PK(%Z(kn z0y=ZexYkb&1%2QrWlGO>X1DJ-gPr z$z2$5KcHAWU&UO0a%LJE&r*Z_1RhtQ&FAhh^SmkJp%$4ZeXB`ZBs2q(Eyu4KHD4ft#99~hWZ26y6TCOzO zpsALnt9~-|g zXNTB>3a)&5xns@KH@Mm!9ar7m%ESZQ;4ws#z>yE69i{Jo3u!;cMi^Y1cA(T_<;I`U zb7u_3r3-mIQ0)pq(}39w?sYDK?raXF%H{xxvPN7+x~P9&x`;OP2P7!2M#~$B;#eR& zTU2C>{*4PWkhaz{F&Pqf{5c)1! z$uY@RTOLn;Nz0>3R0Ky8K-q1kakgZa?26s8b9TfY*d4oIpV%=wWA`YKwk&k`#>e_j zA}E>g7H3#28y&=P;?T|Tub?(f{PYW$DByRQ7hQjJ*9uw7gs}1ABX4BR3WVp_7%LN1 zRoQY4Vw?T!q(GBEfi{&&m=tI86V-u9;c=EAlL}gYCI2?gV}JmqqMLO(voVjdxyl-l zCfYIc@ae-0USR8ncDz_la2%%h!*028!)j4a=m9WFD;Lr-ZFKG(2knZSqF{z?4Ic^R zHAK^uI#R;}jIo!$@naDzCJGc8mf)datVySngM(quBX>I&Of8K%6I86u+VWJ7qj_yvG4!hN(MHZgH=2S zWQ8!rxNN~;JWJ^;q`i!3hh;I@<#Z{@zAh<$_Yp(%GA8O3#1t>5my+UpO;H?39jY2q zy^5(ug)!x;>6N5>T@Dl6piXiISi*q9u4mIWcuVZPpe%0hc6uw@`@3$>8#3$cf(ovD zGlM(+LGFydw!`mg`c~ z+*`jS?(Wg_NOt$u07ek^gYKLIS+-3*5L?w1!|gmwA7nc}rI$B3EnRcauDOiC4SRM+ z-L+m(+&f55E@4`!-ldFS)Bou>LK(@pH*u$$$Kf9^YsA z<3GqB$Nm7qQ~aspy&?|rr|Bnoh?nK?HG9cEvJdP%J7I6wuk080j{U~|&0ev8&urhf z4A_THt@s{x@0eyaa9P~F^yk7jcb;I2cdVZGZdEDu<>6z^G_i{*1#{Qj- z?%}=0q7Z??@!V76(cnQ9pjCpsh8W%b^j?ncW9Lz#7m9qAYoku`J)5pezMie;*QJo( zwKy~xo=$&Kq>G^t=Y@z?XL&7uF)GdD@ivi3ut$CxMX)tdCIHsMS?opoIHK~S8wi%g zkdK(xC(wR_x2_@VvyxAsdK5CV))bZCa-TLI0rBW^d;;yafv{v~M?%ySX%l4sC`EJ~ zd1UcD{3P0m8^kr@-9}Go<3o5ETGLC!tv-SJM^DBuqyx$033NZ<%gvB~r5N=6sN$3{ zsTW``if7@AZWZf^r+!cB9w+Q*`!bD5IHVP<%CV7F1+ur|1<_VVtY6aHrl$CERRR#W z1Q*k9NhM#6{S(Ya%EGWlR6x1}$JK0lw^;qiJ9N$3qfwbYkHV^;UmYgMX4ZRKbZ8F` zVS_uI_7c`Ez@eY;mv3@^=%z($yz|fxDKunOO+qtXN&|;1czr6=kayr&t`T1}pcveY z5@%HH4LTj;o6@ty zQ=FNok!Yvr@7|M6eH+QtVTv7SdJBkkHB`_g6@MA6*7ck>jkzp;^yY`V&ajGh(==xD zQR;d+{Z*_8>S%DN<1TvAN*fpaCMfEGrT}hcJ+7mzZMREeU*n`#cncf29=F{vdJ=4J z+FZeH(pVc|?mtB7+{mUM$jn}K3<8DsHf|6!zmLr7?FruznZV=FMgv?>V%@)abVM?+X z-c27hU!cXe+GbM`)li0aPw2xK7n@B@)I^!xiAw9uh615O!ML8(hRw^HO+(b2O-NA; zRh(@$Gos>uA`yk`rCZ-@7DUxzLdj7$`TAy45cO^*kx+vw-E1~DM5XzJlq#^@cC(qI zic~5S;t*$<3`iX(3)tKy;}8g*D!i&!LmN4YZe!gqnXJI}aogpZvPFOm*XTV~paOW{ z*PG2XF=H!K$;sEa;%c*55fzt{q|ypiUT!wa_?#Pm8kcD?<8rgP#5^A2T&~i!uFPCs zjS6);V20&3UGY}@+f*55u7~FxJkI%Mb8hRv1$4rbUMt>DvCB>78A_b!nmzWRU&K{1 z`ui9DO+No)`saxn*0vXIBa$sM`nzqfkD||kX7M+_=Y;5^`=0da0f|q)s)@&V8)zI{ z2HC!U*HgK-**DaC$A^xg3SV@Ec>J-xBVK#^+g~Qn&2~%EPy%L>jQUwn%21}B1pdSO z`ljKZuQ^|Qny>4{LciOFYu~xT#O3jfT*x@vlh-(su4aC6P{dT&xYT}Utyr6oICW3R z%p1|5+z{#3p5UcaPXdl5)kBQ3)ZwL6PixPAONpiA6oPLdS|$AmFy!bfH3wqwGWmEl zTYRXS_Jfkek7kPnOcJ$T2ZXPs$^gPAk7WhX^IPPbE=RE4IKndo(Ch?3e zo;_P^$MLx-!VGtW0#ltWQy_E4Pkeyq@I7y5&@VAxw`HNRXO!Iw=4A9XRgjUwcZzC% zccY9;ahJ1XiM*SD$-Qf4I2?sp-cCP0d}Tm|TTww>7&dmnuHe>0X?)b26q4f7?x1qU z?q(~qQB}Hwv)blq)}B%7dr|>QsHi|g__8Pz7MH4y@}%5XDO!7y%BWQrM@%awC!MYM zwPa@01>dP=D18~1VJlJxH@wsH?=WD0#0(bkW44mHB)k({m?K+^#F?u6W98lrtH8k+ zt;9Fegdt}3vSky|W`;ja0ztDE*&ZV$*1;Ybf@lI-Bw%9`YXnhzHtoVO(u?Sa694?J zuD=@&&L?{wA>7(C*y%}c(t2IkcWyojq`}mUePh=5#$$W%jXa;u^Z$MUjM{~N;D(+( zyZCcz18Z5%&tVz=F7sFtbFMn@8$K&1MdZzE#kH9Jmy2(n;AX~lJt~XP$ycRe&=Pjy zT64-&nQe#^dNo&_ndGblm#ya`R>0#5yQ|_uIWn=bOEdbV1u0Xqy@R}q-%cdRhG1b| z4{5Zp6Ua6ocJyFTe&>US`eq=1)^yOWAH?wnv@pTw4xs4)v^}^h+v|aAWpHuR4sI%O zp|v;S3x{Mm*E7&z4w`ZaxpS(zg;Y+EXN4Do3qGF#K_L#6Z8LxrJ_~+dwhtqXk9$D5 z&8u;TInz7JXrb(+*cCGEGr*q7DU_pz;lk=MIUma#z{OlN^j8uX%79S!b*OSeL5IpqMQ;ZC7A6-P zx1jpvV%BB@u?(_nZn?zz-PP;wx@U`rKN+8)z|J|ULF{T299l7sr458%#uZrFBTdMe zM#oepN_T@Cq!r=2dq??yN-xO2Cw7#m1Rzv0##wABq&^AMFQjtg(ww_X7>i9H^}a6n zBB5~+9a;=8GeYB%I^4IW@~wL!sHB^ATCZo#>0M@M0X3 zio~x!*dC;odF9a*JphQINe9^-s5pqaedxg5@%8Yct`{88VTGiB|FGhK=#%N(eeF1s zOE(*kbH%O<81k5U_}Z5$EL1SxQm2F4iyn(UTCL)#*0=m!SrojAKAcvzt~#HZp~tV= ztvEOeGnpkl4BWF#9y;<~)mgEw`TYAueQ(0?Iuesch!MPVu@q6mRkYwswhbe6pDaYeF*J=D7WjZhmS zFSAakW|fRJQJhecc}*&4JK_%AZH?j#hX*f64!$FNv9Fzs_Ar#p`Ki{Mfd~jW+=iif zuB$3kP$z4@YEUeyF$@&wi3i}^JOJl}B3ti3Xhz?SMm6+*Mh9^>aghFQx&o(IEC?ee zp=8pBnBVjHP0Qti1p0Txjdk*tv0&2`U63^ zFn`W-vt|#LLpbVOy(6=FN5tx(au255!>G|t;hu>#C*0!0-IkMkkcCFjoc6m%2G%^Z zxU#?;no~A^QWna}IqmEoI$7tmr+j2c%@f}K{E|Tt;qP`wvFUGqt_mC(oxqd zM>RvNNc`JqWg#GC7pY$+i3;q17;Z|6i(a7zIUtip8o*h?R{HoTjdf{FK|jS=&`#y0K~O zLrlbdca*g7P5b|f8*{UHo^2t^G@50pBg+CL04Dw4#MUmR}XJxzKKZALHK4VlVX9`~1gXY&^CvMlTeEx)$v z*gVW1W))w6Tx?wOLvyEBoYAGYCr<*Q|2ZIk zzQUs~Um{C*N{~gO34{bJRGQa3QBu-F<=nvpm7VVU-W}9+r;%&B*E#9YZn_qh(jC)f zcGp9Y^NAm-_=OufpULPwYzVhWml_O~Q1UE|x2B`os171u11HgK)!W1~FResbDP%7m zz9-NQV2;n$V(ewBI8~`wH1R7g%S1|lJzR>5ii@{G16;bqUCDb-ysF3AM}xn5P@Wp% zvVc!gU&e;}JALT%_Ey=if=^`%n#?4XjDw#1eu3OLYvD_`X4wfm&EpQ%^3b&M zf$!{5I)1E0i66IcL%~swC9l>gYG3nqRxXq$k==d!Sc1?-jAgU6ppu2cmHn*$1!#N6 zv-!24Gx>`N-~jbu3ojqn+DknY;PO>vaLH!QCBQ2h$q}KC>nyN6Sr- zAIPX&u4Z!~yX!B|%UF<^tFT}r8aXo&jxfl{jym+D9G)S?IkF!f@>7XWY+_cbU--t#vIqk&DVluX2tj2J~kXA_i6)mFypWs{{3do)Gg2U# zn@xd$aY-G)Y;+d7crT_@lH0}vU?$vZrAfJAJPQ-r0*RbTGHZIB z;37$akXu$>7h(w@6KQ?Z4waax0;T2Y9-Di&1JYDKr7YgfaoW za(i~0b@W%hw@MLzgiJUxH~<0)x}w4jgYi-n`Q+ljlS;NAUc5h^TyQ$DH%x|m_19;} zkTj(Xp6XBOjQE^AUdviJCc$KOr5w@OW_b@K8P*-Y^ls#8*0TTfTyY}YzROf6-fbR= z-u4dO<^71nXpokre}jHB;!0b0P7N39*oQHd;h;Cl4^4T0#d#rN_NB)J_A~Io89+m8 zTpYUH7L0d8zaNA)qj)jf>NgG^4>Edd9KC>*djV_l0*)#DybDmk7Z+tmw3k>RpNsDQQY&tK}v}xPqxBfzvj32g5ElNC2gpbZ?_tVZC&hTNcI-#sl5Ot zCtB^`_7PZrSx5lt=S~Y`%X+!yD3^BC-Z8{jK`%eg*5DnjRMb&6GLG~qEtsgVUS6ln z3`q^kKPw(3cB=FDVBmk0xJqb;R_9q7`?~Tyu_n%YkZJs8)?6V^Fdq3BC!Cdrd-@FR z;?=aHyHbxEk~fB4SJfZn>xghhI^4p-y-v8>iaT=|UxF;`T0;}N?HF=9b% zdKg20q)Jhg+^?g8i;H>O!x{3;<^`Bhw_Rve4r^uaI4l07h${ZH*s1f5RO!>bY>5Xi zEI3b8MJf6G@?0u7o{WeUFx1%&C{@1uA_t!bAD;?ydA6X8c2VhAS}aTkF+A>TB$;$`WOg4JV7L-^C8w zrg$AS`RasFz)`Y-E*xR2z&curngfG-BdJoC)20Kb+jTi_CXdoS0}7Gcs5O|_qy7i0 zZO;V(bBC!9?Kbk;CESH=bGYq{5sd2I{AMR7DK{tz{3oy3M{xYmK@{^UmB6hFuWU z``~PMdi1+yM^Q@iT|E2KS)Bv}0%DARdej}r@Jk3ri7_c-%Z5()gw5^FNZPG!%vg1@V$l zhbCj;ok@?dNv-PDjbn!mj5x@D_GbW3K(N1jz0~9Ar_KIwFXuih+)>1;FERqFFI3vS zY?^vrf^u1b3n5mvBLph!6ln1XJsFM|?FxGiRXNU|fr2@US?vCZ_h~9*{rNX#L2KbQ zI-l!~oHx2Ba4&(MK#}?xlHCa+vIGafu*)p%R1a{*v-Y2BJtyBzi80GgN;8qZZuq(bkNo! z)E+|`LKI48(sR1MjgW`+QK9$HDD9$98uuzwz@*-bSF-F!%0` z2%L_^4h`qZZ6hVZ>}=TSwiAhMe^uKJk5q?izf7R9_kWj72%;x~{k!KdeVwJ@L})ka zlLG9tI^esr7;7h;jdsTAPlIzjTFzF2=2I&4GBrPKLFT2r(u`ueM_QSe@25ag#eib zbcD93%-Oj!lxF})m@fJC@ZDW>>xvFStArmq1T; zDomlbV^m5LN?EL|Rl8B8e^X*~sGtqB<$m!jkqS|6mg{P#C5iQqsa}G0u5L;r%k00I ztpSwkQByCK!w<)j@w@_uM%2@w6LO^UJw_VT2i?nm;M*D;ujn`)cf$7|44Bn4`7bf6HK%5XL~F$iIAZ zuF7^#|MMqs(=WFF6l*_U+!W%)_<9HkQNYR@We)Gcb9z7f&Iip609gSXRRs!{T7xL5 zOJU%IxWU)Mvhd-XRI7v8pr~cI41iTt;;FL$R+8*pxmXO;-_Um;AP)XgLp_0lN6kSq z8oa3m6Ma7exGRh1f24%TL4iARS@MP7mqvUQEkNShb<=8WC{P1QWG<-TKF^f)NfTDX z8vO}8<^<0*bV}nf64R^>kLJ4r)mMhRBvR@{E7ouueyiqORRE6{)udi}1*fS#<&pRM z5}18P5z3)rDP&>6XC?e15?<;_r?VXljI`4W_B5N8xteJ@rg_%u9Q!3eTjG);04w1iDgf`{& z$_haM=s-I9G1pc!*}IANm;4>azy*NZUg0d0@y&w2ZKaHK3fNLV^9OMQfgZ|A?NWc) zuBB0p(d9G0e^Xz|Z;1(VU;Ms&X}>`H}TR5?iV(d&A7ES?`w;zJ>a z>d$O#3Ck3h2OsmT?%MZi@(5jebp!VD{Ip^(udW1hFoTCIFH82Sl%RyhqPwh^e&zCC zOLkn{EStPy28{Y2EwfG~P2N;YE~oSXLf>ZCQkClO?r<}g1T zzZCyFWQU5?`6wu_|96B%+>Fb0WUw3xtH%6B1uE6Y~Ya*X<48 zFPo$J0zn*)xBv8?iM?6j8<)rMnKexObN=>ee>vUsM#F=ShQxpW5C8b<|N3GXnJ*1q z(L+yoy$H+l#Zgf|s2s(dd}-et{#!pvIED@R;_%$_o4*`}+vPv{G8a1F9Dus#&UcKlk*(d zjnSR5VI2wx<*WI0v%j6fVs`zsnqTb1e+O(Ir<;7WyIem`XN%p33-?mNe6?QXm%IG^ zZa7^o-mWfYqFBDUe7D#xZWl|Gyzs4DPx`}0CnSSg%>`)zg#X>`S70U!N&tGD1a{b$?ZiXo;FN^u^{vvRbQJO?l=RKOl=wx;Avzd5oXIu=>Dt_(^#`tUd_Dy@y|$x3|-;-2wfK-1M~#Q=|1` zz8ctGELH%{UZKppe3-shpb{LEfB0?VATQQq{zWjB#Sk3eI7a9Ip z>oQVvZljL)yT_lV^ZYNXAJ)IDoWOM-w$AM7b}<{?=D#lT&DZY87xXJg*&PLffW6n3 z#c1xo7k_`3>{+2la^J3-;=#|!`Qy|oEmF!psiLnTpa_O)0^zjD5De?$YXTUuZs zX)wJsMrEz}0F(1;F(>XF?e%>6Ve5><@3D9@72mhH5G97Q`^9qp_39h%b)~R?!avh0 zRhCLt-z2a18f9ZrI{$6)@VMUWrmNlQM&oxIjc1Hz=vU@dWZv6`=Zx;B+keaRpDUvo zG?o3A#Y1iu-52Y_Znu6Af6I|^Kipt)skNv2a+%+i@A`~Sb&3Y;HAma~^)DFhUsjJ# zyK?Ad$(^|0-z!}~xlV#avHl2(UCi5nH(IU7>heJQ)2H3q*2KkaF80XW2JVaLo!B)j zQ>Z#G7ua2f`8%=8Y)`X zVyzI5otng_Uv79eYG_@ysgTMe!Y=eM-Mn3_F2sfqHPqyejEbRAF>Lst>1HG7L!i3l zdx|ou7ou>iTwR(pC&qBLUamJ6ZRAwz&Qe|Mt<816=K&u2B3X=kA!={^BBRxPIZ3*H zkz}2#gr}{5-IhG5c&3Z-{c3xvi}SvFe%I=OgV+W7?6fSO{K zJuKCVBM5rnpzD|EJMUsU6)fPq>&IHE?)6ha*C9BIu01-7`Ybr&L;K^^T6tgJk2?;a zZ1{))Xw=3VP3I9@++!AW?UGCH<-(WeeFq?ad(sh7El!oq^H6ur^?aC$U|w28U`aRx7i{UhzDoFhSIt3fRu_hCvVj>TBTQ!;FhOfTlIM@a zrCJS=QJ6{@gInQhb_P$GIS0B|6aH_mHoimW%D~vXKx8qnb!gmxFdD zQpGzRM|L`i*+@{5dZCnYFBN)e+?L5vXTA?msQp_l^jiS5O1{MlUi@l*($qc}WFj6M zU0t${I+Ttd%X7Af_NEWK*ZP#Ju%Xkml7JzC%k!V1#AsTC>)U%(+*BT>E_HF-B~=;7FM2@)t@;1`KbE06x;X}eq8eHf~9 zof?RJn^P~<3(;GoTNxA$nay` zcr>RPB^Ma^X_RN zA;=;v?GMdmAiFwLX1DIzNoz@?tG1GL0cN!$dkMV*Yl-?cS!>u@!f2S6g9$9IK`k!})4%eXd$+ zqKvY|rV^^<#uj7`cKns?+uy6!8)~bztuWWxw!Sagw%1mW(TT7HJZ;4a7`3*gI@D>p zrNg#jMTdGJeKr3>6lZsL$z{d7M5DRN+~D#}gxErP+K3N-lc!c>U$G-|e)30}9IB@!bXHeZX%i zYaxY(eRgj>_{xuqx*IH^$#%W0y~N@Dv26pZy<6|zECtJ4@40-_-gsHeSO~OZgeJ5O zUbl-DEGIXA^9*x32&zq7e1KrD=nF3GgEox{(I$>41)+8$2qyMH)K2_-aM{-kYd?<2 z!1#JS&ntFxQc0$4ysD>3WmqDPMbjOfM;b~vjVCbI@qEQ*TkT&vwur&t6`q(r)TI@QKda`xIL)t!7RCv8oCP^NzjsW`{Alf2~+XFt?b4!C;L zmS)ZKMsZSYP)1hF{4C;*g3C3>UD(~}Xe9GP%@#RqKB={x+N;Bo0(VV8sY>rKwJ%9g zEgIk5S8LW45K=TDP3!~-=tH&77i&XZl@9VO+NZrX9YaHNu-p7=E&w#&HtAeQ>shIV zUw(LhziFxyX0chU%78kd6$j^%W-B6Io7mSp@K-zt>Zk3_BHUA`AWCp) z5AWAcQVXC7#tzncSgf9Q25Vz2wj~nSR|FmQ)~hnE0#|iXHSa|)0^8HwdNXJ#Iei#D zKJ2Sn+hTroMWzNMIcNQ^UdD`&C57V2okij@V*k1lc5+KezpBcd>U7=>IW>0AI)a8` z8h#HqAw>te2qUj-U!t{t-{fLeua+PFRuPx2ga;Xa6f_Qfu>zBZe7Dv-TMlT`KmPgi zbUP9>#cSTaqoA*%TzU}O9-MMuXLY|`%<^U?Me#_nZopLAKo40c{b4$t)}_?x*`f(AE80vABwUH;X%+dCMONd_&*wJa=qW2l%+@X80Ck6WhYq0#?&s(iOx>|w4@_-U_7&lGwNy=uc! zT~H%CKvtS{$}K?cxuYP0wY1o~F5WDEAMdAM|0BQnQ=m;Su02v{*;m!hd=VL1#I=&6j(NPG9cI$Ls!BBD| z?XXa#_NKv$pX_|p1ITDseT(C}7U^bY{& za51d;l9s;eyqWiy9;X9;O1H^(0?_rGzkMKWOq}6NFtM$qbFrL?!vN|2+rQT+*lE04 zjcTln4!Eritm_9@F@ABk*r;OPl{^VsKWOh>OMa(&L-i)wYL|mO*ioe@zv)$LuFS1> z>$h*0c{i#*jv$)n!ZDEV*isYd8>(Aj->qy7_#LX%px$FnzMa(fx+A!3m zof@i+sAS-*Z~Y4LbY-p)FsMD4P?u#+15W!o*P);d1^pMre$}jtOs5r%iKBe@njTae zeBFDEthL)ZZx5lParx^~vKb-07R#RXItetbc$>1El1Praq>%hS5?T^-{stwz#B7U8JRo`b9|0-Lc1|hI|eMl7C zU@}&!3TA2O_L9gBU{D;FZ@f4hL;=~{>fgcxdz^}OiVRQcPll`MJ7-khLp3%XJi7^4 zYZzdA)<~Y!1`oxCqNB%jy2eaHn?eAq34+^pnIrlv^vB;l7t2~p`ZPI7d(u4bMD3Nt zc%sHm{Jmv=Agkw+dkwoMY09z+o({jKXz&!PO*4j1)~5XG6RjQwu20`)+un8>?4P{l zldkl3dU%<}n>?&Oj-;_i)pnSBAmS_{U8rvF^Qq)5o*q_e$Q_E-qLBDeG*JIj05y$u zk}f6Sos0nJoyVp3RyJ((PBS@Y}UUV#C*4AEOhjTyD5I^5e}{G z@%?o5ZfcMRX)RlaQ2B{6cHAael#mPmTpe- zr|D9+#*+2`l!YUrBpevY5awV-oN~50FN5@d)V(^`2ZXYBv=3~wp3j>m)F195{Pb<2 zjS%MXJihf0w#X1_nd}8&`FD4B^CR198R#bO(`XA23zIM(KhJ2hWw38IIs9i2G%XIT zpxDxTXw;5b7O0wggI{dC+r{$T0ak~FZ&FLhRISAsDx(U?%|ALYi}dD3`Fp{c%?)6G z=+?U(T2Ka4$2GB=F1LFH{pp9xUK`>T+doWDbcY$O1%|E8C|JDFnwD&K5i>kAq%2C1 z^ln{EkYl)-ovcm!*Gqm0jMsAdp@H|M)xNz*u@?;W!c7^GYTh;ElhlG9H2U30F3H@N z#c9d#vvRf2hnFgBw6xkTo$=XTu!xv{<`&)x?Q<8w5|n$|db8IYT~u=P97cRQRUFl$EYS*WK(am|#p;eg4?m3rV7TMUGzK#+z9(GLyXg**UI6I@k48W6YNo_jTESPYAB~QhjLJ zK4^cVW|jF;cP&0ZkL?>UyHeAzFLftIUz$kx2Y5_VDWJi|(f;osn6|{x?zAcz3}mq& z6-#SJrpQzX;FzDwutf}?#ZD|2vxBk$tRiA@!C}uzsXUrgOY&68QdF`YJ?=zo%_*%M zPC5@pOsMTl8R`^K%l^-QojXrn^=W3>&`SEM3viY2q@Ya(HpJL_9R{A;iR9|bg(2op zG+fJD)iztS5jDBZw~=BlW*Lcx?x!oUt61o=bi5OT(Ng%xj90wTh+%MB>L3KFP~r+B zf#X5Ct`2EfRi4$|x1S^V>Mm8ZXV^Kkv)+rZUgFD5;U7KP{`}#8cKKvTQ3~9%!p%1v zZl}woBlzp>;a=~S)9pP3u=Ol!`Mj%EkXnLh3Q#OXL0-8x$-L+_iKJ=OM!Sk-@jlpj z#aQm(8E2DoACH^$`w#ZzOdBbIz7$Y9^2A zl~TCN#(e_|$6O$PU7)vF(sq)AdOi7WB@7OU38%AN)5J4LupzNhY4&E-I3eKJ5aW5R z^#_~!VVkBcRjX?A=HG$oF1ZbI&7A4`v?<%WroJ#y@2Ax=+bHx)oW8k zJhH*)yU}d9-sUpqEtR$Ou6BU{Kh@A}>N~W!US7!%8=Ti2nI6&JmEol2xTg%@ND2ua{2~l;lLcq7bn@@Ms3kpN??e^W< zZ{B}DEC>Gs=~2bSYWt^G_q*NW#kb%7^2;xyUxLwk^Y&ZpA1M0DLGsi;z52=zIAqc* z2U6?r*YE%I3cI%-ivM1H_dk$l)tUe4)wS;pl1Vo3vPm$C2A=pe2}hYHHujO5;YB?1 zl8Kj%qHGX}UlUaL-=c+Y(S-OTI{ohNUSEG2ahh5ZJ(`o<*fp*NSAvbf`9bV_Z&%J= z1W2~8E-On$u@(zv)4(*aqXOU_i5Z$c3O`yzxPFaY&{aM+(Om|0{f%R~4r4IL$SL@n zV9W&kp2?VTJBne2xq!r|dIJN&`eW@$6>z_EYZhpaTG>Yauqb(`!0`4-K+>jus>}c-D%0Y>n)`KXqg9K^ zO%c-AH$&>7ez7dnhBh51r$$vsV(iqlr8Azis+q0pViHmvZf?>&7 zQWKoiGBIciTPg!D+D(}A#5S9Ia*cnTzsUq%#kNZh%Mh5_n`y&K!&f%7Cu7@6Sey3t zb^157P&G4s{cV?T;l7>P+gTa?t78?pY3>jA+H#sR2CzSnh@7Unp$ZJE)~_bF*%ZaK z#1}_uz9?cg>+g!Cjic*1D)B=D9IS(Hh&)$mqQkMbT6V9=o<7UEbfU9uwY`7i&$VVt zeb2P?@082ZNe{AzTmAhI`{@s{ow0K00DHJ0`{DIBj@R<+t-%*Y zco^-n;Bi>@NJwO${e4Hgzwe6p_lGh6zANhAcg6kt!^nT%75neIqW^#WVf?@EOaSjY zQ^5NpNT6{2QA_{7&z95e_K$yhRkr);Z<;U4$B&w=MT3Xvpk74xAFXq=xsRWExc*v- zA*Bm0OmK~qPnv{uSP_n};h`A~N0XM6-h(E0;+lLTZcBRy-PhIhq3Qr54(O)`0ppji z+kw|uZQrkVBOXOVSD$}2>eRt8j|e60W9Bl3nH?QDfNSR)CoBDp+j=UK?zQ)(CFipo z#$5auz2O=VB&F4f zsPyCq&)}!v$Kc092Tv~>#G}xgcnKXXC!Rm>TpTd*RNP1MHJ*vnsJN$+{8}7WQ9dXe zz>`cCq35V0`>=l;S1Yo-#cHuzXgRrTMv|T;IH*W>r2O`y9jT&^om@nl39Ts*X3*lg z&{nWi(Gc`CZGF?=jFqvPW3<)EsY{EWWe=$3buw*0ZDy)=_K$R_H8;aQOkMm`xX8GK zwI#2VykWl}JqtT6N?j|;ox<3_e9dd7mbR?kAbw2+JF$PSesZJpoNZJyQEx}d)(b;e zO%CVPw1bD6LM#KBby`V%i3n6pieWaSl%;luN;9igf#SQx`+Qy~zJ?$4zyykQFPMDE z5tKqLo9#P?!_u;AMy_rKFDpB++1@%FGVEhZJU0DVyCR~=x>~o}=xZm^WD!y-0UM1F zj1U+B#Rz{&@S}Vz$QqrRL3ihSj?WAI=1IpFuD z`SM(8zG(ZYGukFQ6!r5=BP;2OBuJNkF2nIHA<6*1lA8|rUx zQnR71|>4;JR7g7pK>^Y^NyTwn}9GiV0ayU|F7q}eTiUm4`N>$Oq zZG@i_e67;wKl_7^Z^-t|ElJ;RbNoF2)Aw3%#D=7lt~YD6<}-~FPi9vbS1i~fx0t%V+icgU<)W9)*=jr2EwOq6*lLK_Y3I(4 z*kNR+BWWC=x`oj|37??+!XYI+r*!pxdh|D{?#yqUh4?vQJF~p2nqT^^1;s{aQLuG# zAVCl)^wXzTm}`gGQN@c@?YCpt!Av6nNgyWi+Qk)Tr>Sf((E7 zRoSA!=J@z&mz_LobW(_5=^(>TgLxEfDw$5Qk#0#=waW{RTGbmzTjdxGgZ!#EM3O*! zqB(3IK`Bcq6l$?wUjQ##;}*Qgz((8YJBlsBa$Y4ZOijDUF1CtHoN7xS%3SKit=GaQ zUp&mk+Pqjf-qu;H?jRb?)seeXp_6|Ll=eAqsz##%?JZ)L%sC$W5Hc%xZ`Kp>&zTB1jkB)79b8$9ZZij4xX&S#vI`EkU zYKiSD>#1&oXYqD;&bW&B;l|4U%$8-5@}yt2{BI80bKzP{0;<8-FH27f0-b+?V8JDy zc>Io`fF+)-5QbO|*SzbL^8fgl^}EA>q(uKy$nj4*?v~?eKEuzcyFHM+UPJ6l_FN~U zllRu7b!nv1`ef5t>{vz`ia*^@nWzOHu)ANZep9r4Ska^L(-sZ)CmY9Sn13C$aSAGa z)ip)mkUji-rV(oTwsN=Db|ioIQ;n;V_d}oAFS3O<&)4H6mq&j2C#T*fqo9{q!K;0J zhPkTTBxPfw>kY|>8FWoNUtPxz5FyRA?2)wOQ- zT0n-Ep#10B2!3L4NM)q~6C-@AE+Wh4;e4vE8&%iKA_nW}x7^Z@ij9A$^t`+;2fNa0 ztKG)<7}4c3KKSMK_tq~zyzgBW9^Yg+_!9gM=uL20Pq}&Yf7w~B_iN4}wwNxZ#+B49 zzAlR-b;W-?ZFh^i52|bFdVNXKFLEZ|UYKs!C;EtyD7?5^}r1)YVp6S79x#?ET;^K z)%4x1!AC1)8zYaZa!&QZaQ#RcZ1U~ra94xFl?0dkFcsj{YJJuyoy{X{i%-q*P^Ra6W|ufkmB2~|y0bh*l%dKrIvDY% zHC~W)#ntz>n(u#<0lc^|NRcut=uD!vHRRaHL`ULLu^=anWOZrA$vVjp?UXTinWozU zWgXR3TXf`3+t9wtLeFyDZw~BC*2VH}u@Nis?0&JF4?4GNY?FtY-8b%Zf$lvG$iLq; zv5cqT0h3R{18QGVX9KG*`*VU?3sz?E+1%gfW%%l!*B*axzE-?B;CxxM&ZaSW#^u`o zX#=b4L#sctGH%B+X7LFavtC1gepK}ioisgf;?1l9L%&E)?G#^s49nJ~U;7L2ZZE*B zRoKDCv~$*2lbw0Dqd)r@Ox!b3{7JdFlZ>^IZU!&kO)Ho8tZrMAVH{|TtJeS_YlNgspaZ7lVej#Q2uuX#L*Wt*t=QL7POAbRD z`97EljKEE%Z5Op;o#y8OXL z{sVtYMrSPnh;?9C{&{fUnT`p@1kzdGsLHB&9op8y?&7HmCzzDS60PQ!l`Nn#u;-qP zD$UuSzJzo-c-b>gukY%gHlU%Qb{rizF6p&i==@XnFdwDK>&wH+rrPPqqS5Ur<+k$+ z_~Oysl$o{Zc4mv5_rJc@IlZRJNV#mUO;LaMEY*)ccGbz?Qy!$6dUxy)8uYK$cF?Id zb3jr(A_1?=Iorw}9TCj^bH%801s`?g`!}9<<+*g5(QP7c6Wm3(iN&>GrY6w=4XE^ z_G8UK(KODgHY(U2+G~s2G86E0xhzdtEIs$DR~cTX%KJka>juL#i`j7Pqiym02hV}f zcWo`|VC!1$`JGl_-mCD@-CGxy&jf$Y%ZI{Hw;%P`CWD2hx)3a=lzQiJaFilv;HPl!)>yOF| zUF08j_y7bkl&F+XH?w;gu-`G`SSvwK65IxP^igxtwT7*4&y8wY-)oH_x9)Ml-dSyJ zG&Dl!tCF|es~a@ z@GBdfifjrRs_b!OsW|Maw0KV(vdt0#`S!LD$YvB^Ytrdr;u|)!&Mx zUFnzHL(P2y_!etWOVfJ6z1`MdPNe@#jNd6_PqAHEstZR;`;e}jobrDhb;^Zpls3sB z+exI@NV<}Wt-|jck2R0ssgV4!`_%nRco491wIFGsz(^%#ns)2Ewb#B&ZPY@q84pmR zQp8%uf|E~zi7#qqd{G!dQ^}iX5Xol=3YE7oDbQbg_4kJp!JZz)x(G{I0M+aOQ^`M+ zHJGWXY@*e~zV#ShGRA*qr7>lgd?=YpetS2~@5;)!keQ*xVPfBGH$0y=RdQO?>y{l& z55=kl1$NzJ=BMp_nAX>>8~eU%)>!|nOp02y>=vgk-4NNer-HhyX)G$FrGIVgx-BVm z!uCv2VN$>t|uoM><$pmcvLhPS@}`nrtmuOUJ6 z_>asP+M{8|2=cJ6Wdb0(8r?mxNMod{P%9xTwLsQ2!Cg}%i_QaPsy9$E7Jy$br`y4+ z$?e^v2utmkjiNmxdeD?!?SR3v-{ZUP%E7lcb8jXBncd17omcUF7k z_)h(+j1V-3D3M!ej4Wfx`$apD4WyNpIf}==TFW>Gll%kO%Ii_j3W=f9AVSS&@x(XcuLnCMEG0<#mzV$0}AQr!rrJ;at+Kcy9x*i*&XWc0Kk9`O84%B{;Eh?-I%1($hz&~M=xs6^;KCkE{_M2+NU(>au2v! zYVYeoapaI<4?n#|B?D`%-@X++iUZXVL#sAnF=cO?1P!MNyKcO~LeQZ%DGnQQW%;y!o+cTh1ZSr#obWZ1*@jM6%ye_AY+mkDTxZ39Df^kY|fLUG)2t%$+&l1if zJctF%DJ!r$@X|?H{Fy+e2l<= zD)qOEAGw)lC3}%o!oiUznD_=!@NK>;uL_4-6-h#!&N&#R3~8qc?J4r0;<02YX^c^S zE46PBb`(NJP?tR09SSi$o6Winjm-qQ4X~0Ln~tYFI=Lw9!DaEy(`rQovfBvS=re`` zO&O`8A$#sON(iFp(NP1d)PC+*$Yx+UT&{l+i$Kqj=yi>8OsCT$$MGa+^Vo4v-6P>~ z652UHHOjrv5TA=>D$iT=J3%R;>-hr30bb| zYf5%|JIl-Qn5+5vO(73u%>lhGSm^c}C>6kirR2^d8*< zQG5I>gmwIG8a_?p4cNtQA8l4DHj8ptvF%GQ+g3t%i zwaD#g-;b>3l2>-1 z_QMT7XXWYGsYOX_`$9v>P&tMl(GwW>){bgFrD>E62$*9rOUdp8L^6_?42+NmA_ zvJ#Y^0Mn|eV{l#6Jp*iiC!ZXxA65cVGj(8&Im6YHRl11$0tl zUKEOxsVK)8ZglGg$B4Nc0g#AUtp`I_lUXdj@hQKzZl z&JC1L^Wp00;Z}TiW1P?;c3$hJxK7mL1M2-t`%|k5@iw0uCiH6gFk{nMGNnEbM%t_^ z496{c;A0x3>wGBM`1xRX9~-kG=S}^fJe}dEAS(ayIm5G6L=t>vYtHoFXUpk!`^P`M zqG`9y^Ph*W{$|D>tACDZze8KgJfE#M)I7`ay0CpsxlcmCQmI9#_3du6{yD!Gg_RWU z*|Xu<0D(s5iXUVAJhM}sd6xpJ2PYL7zn}|(^yhZoOGlySka-sjky2lrmp-ZoGZ@Xq z9+LWm0Dj!$?>-BB9Sy({c?+|pm*AI)ss}oM#S%c%-=Q@ialCXH59#OEYfr5K_e1~J zPdvBFT%(e0S*^*nbNx#`x13T>)msx=Blqyz6hAhpNQR&4>4FU2x*dG--A=G3<kd8il#LDRp>Rk_QaN!OUI>zZyAs#7X;>+&UOmmv)@Bp3?p)J2nYUFe2w87=hhR0@3E*BRy=62J@i2qT9S8*?LsgJY=)}ClzBG{<33+LmV1q>?=%gT6~0oW z*q*k|y{NDx$%okEH)7LSn+yBhoj(gc-fh+o`%220k01YhqGsAgC5~46YBhHhY@K|% z%^mNf*-^{5j%mmij6m1iRKqAXIhblMEw&t&E%qdqm_Gf~HTHlC_ONYL-NCJZ3>L|1 zuwQ$01{{A-;ey$$+B&GlvZ%lsy5#%m>fN+BEC`;UUFUs5Rbi>)>NURRj4Tvs>5_uA z-cRSEB*8;%H&L%%M$(N-(?vQ-!Ju|*qnJ3B(ei9A9S~NF2bSPhRslzxCe{49>{RN= zF**ikynb9D6-qgo3zYj&B#`dEHZ#$Q-pj&Aj$nVZp3i>^kis}WKeT8uJ_=f*;z3wd z$~}9&|2U4d$gYm=^XD475esSuozVB#8y* zZN4nHu^uFszspyx;d45|r^>!vJ_p#&ZeB&!?Rx&f={KUP$f@TTrh}g4NqQmXXwQ0e z2man&+nP|LDa@MFSziDc!5yA87Tv&lKHY!(oNvCyfCi2ief7FBA^IJom|Q5_LW4A+ za!T$^h>fyDX^&`^`F8B!lneVOUC9YLJa}k3zy9}!C;0g-^S`||gNIqM(z73PVPEV@ zWLx!FHlgoxI%FS}=6JYfqGrvy(s!$QKV7?5%QMDR3(oXul4*bHh)tKrJ6MFJC#`?) z_ud9;;YAA|kX7Aa7Y)NuEc%jC5`+2F>v9Alxdb+PH;HJYi(^oAL64Bb?SClKLrpqKy zqpAw`?ZF#u8NlN*dvlkLDo>FcT91GBrDYT|tXbUSyO6|b7(@$@Ie&Eg*YynArM~sF z9w;yZ8H%G5g`uJCyD}sC3fd1R4fiW)a1!^~P%MpIWU~3=j$z05*YBkEjPL4rnCsj_ z;~A?*3)Lf55CqR3mg$Uof+p**JPS&HJ_0RGz5qsTy__7ymS?n-=W{*Mt{H!B@C5z7 z46Vv7NZMaj?D^=h+48-wRlB%_K2nhIZoT>3-VDLOci}{zP9mhQM|S&g8_5FjmpC7^^mzNMA%XS_1x#fr3wsJhXp*_2^22` zg6Vel`y8#zQSb9iQL#~deq?xqkm8NR638xq%%JzgZ;~2iqcoH#qGwT25ROVWVb^q) zCA=$$I6b5{0`I?SyPLG7E91YrrP1a~^{I5k#!<;Hr5R~3&!(<%YHCe<%Y$xwE$wkD zFZrA6kv&rl3cA>sy%~y~D{KW!CEBxv`|YZ2=+<7-`Q23dy+9YO$7(IBSedS;(Q+^M z@zW4iB7h|CKc2R`#oY&`mmabQ9e)X=NNaPqS^t{r?X{k5I4Vggs;XCSjQKT<@Y8)| zIc?K`IHAdD3eEoFL#T@RUf=_HWoaR;eBOQW=paBS%tYY_sgkq7%WX$jP4=|vwsVjEu`nK|y6-uR>ah93*r{^LyeW#X-ZGR~+YScW`9BB-BpclQaXa3R^aHKq;;INg732JIRE*Fm% z%Bx7!7lVCYh=HSb_vA(Ke+v5KH#rFk^wTKu!l0szfRB@ggdv@`n15C^PmzbYsIXY= z-LLj!&HgGO7{&4z?wE)7zfhy6Z$WfT zZUj&V7XdsC*!9H;O+xUg!MMkMQolE8ZTILqxdF3-r5U>_`I*AWZ;S2#UpdZznoDA%Qin zWzB1BlxU;sIGJcx~^@WO@+ZVm3$DWyPlRNGf4VOlj z!VfNggjk(@rnkQy_%3A{)fsy*)HeP(Am#y3@Vg_V9hAq=xWnkBL!Z9K&;)aWL2{Hd zdjE0fWq8Dykz40{byjuxsfhL840t8D5ob#0?Cp{~ij86O(lcx$$_!m_u`!VIo>DZJe4Eyfe@SL3) zJaM!1BC}aXT1YDU{LlBQa6=~Vj`R1VUra(Bs>meh0cu}w%Y6Fl80_@EX8j0$(iIAH zHG9GO)Ie)iGJbXzavil?`Jdlh@y(i%!San|~^lG;-`Bpa9<^JB}>R59^DUw+blMhuph zK{n6zCq^o!bk=WGHwMp|XlD((&ODU1ZeenkmK8m7HEuS44VHWH(H9c4dap40)ZwT^ zc=XxxMfcward=6-#b)7!)jCoq=(_L3kdDqn6ndM4^@*}(?fYy|)D0Ijn2UX92p45n zX=ZJ%$PgsIZJ8S|*VkY-^c3oXhtsfhOnJ=X#T0>=gYI&_qH5K25~bxbv6FZVw@c>` z3+xI8T0hsnkpx(}z49!y!s%7CU2x#AOLNYf-<~ESy)OI70!S97m|XW1`?fh3F_SdO zdnr_etERFXX@q+!ntw_ikzu+5Yqr5nm^SIWn@mfkmtF(2NpktG4Kx29#Oip2Dlhv$$tq z>H*#~sVVxrJBLBd3~}w2>HZyKeUod0n0ZbMObh>sPs!gL4avErSCXTn&2XjSUs2a4 z!WF;=vvoeE?WoZn|J|8_ezT>wRiFCXctO@0jFO&p@4iFF~OEJX19sN7T6ftlpB|)lo!v?PaK-w4sG!=ch zH(HfSyU`Bownl|K7p#SL$S))fQQ-+1s7r4wyZJHWzff_pRB8&n@c$x>pKPHcMYFz)>cb36MEw!Rs^W!#PF-dzS z$I(`jgeWELJm&OxSd#^tR&A8l(1HM&O*#RBTrrP+V~I-!J1M zBiPb%mW*JeE~Bxo`Ad&3f6=PoVc#Dy!Lmang=m{^XjDDEdw+>BP!JrW;9?WKo_f65iFRj zO7Rb#DbuH$S@`%eb|5sG*|j56{)7ijY>3TdApv^~P~=xP(ZBSC+#89HzB-z3 z(E`%uIASXi>YUX8I7P&W&5D`oQ(0g;1rw!vXx6dNA5?(_0o3wm*s(}umSPGqzVesM zD7H3oRMH#Y(I|wGn&Et#H4%J=s1-&-HUwW4*|I0H;X_SmYtq!NXjN=?Xw;IZUL*r7 z&@G%h{;O z5A<>R{?s8{s!aI6AVmEzSx#1M*kY5X0XlQ_}>>*E;fyKNSJt+u1GIp$(R({VwtgMrIT02fX zPJmR=t#;Eq!>95yY;?QbB$4WDS3poB42k&pJDLbhiKhYM3ufhqiuo+ZSwdVOAC9cz zX4*h{zs)0R7cW$QvQO#*Vml;^75exMwXYv%4<3lMH`)!IZl~SBsxl^E+Y3-0D9YQG zAfLG4nMfH__{@VS>!Im7-Ee*M=@qXXeT&M2-wwbt|E)=CTCr}}toUGr-Slmjn3Lzn zm9Z$6Yjttm3PtJBCn)B-+>rM~Ux}MRh^27lxdt>D#JnU~m7R~H&xQxpJHu% z=oIliJN`lXq`jKj4E;-biQwNu);$xkh8eJFjvq+K2^30QHm5*3JifJHcsgZD{QD68 zN8y}8GeJPMj17Q$2=EfNVyYpjEzv*%_gxE z>Di67TL7@q0bQYA$UOuxxIfUOs;PTLil>F(8&Uv%#Gva3$ye3SckkR&qnue8(hp1B z1R(`&7L!Lah(vgAT^zAIb*c=Qz@)XCEc_Yr8=x7vgv6<3#X(64DIrAR6Mz``5cotI zuQ&rgV~ua5h+zSlC4PR8lKeh$5O!;=(Rnt-WLc@o*ic|IxAJ^XjJI)9>6yr}c`KN( zz6E8qZ7P5}ABbwH1`~+gVlq2UEmbk@2A>!{lZ(OJoPW;McWk-VceWcn=(Pql}7T3Y2eZ{VjpD7|OIOJqHG65E%!btca5 zsJWSBnv|gqVpbE!PqW>fdoV2kTxVteO9~>}L-DxmzZM{keIiU`Rh1W{%`5fDZt~MS z#x(zdrQFP9-w8}4KC4AO^pBd6D8@RJt>I| zO~)$LK%81%!#b}HXUS;T$HcmuzOPB(%5IKH`n5}Xi33=l?QkgA`lY3Mn(LJJLSp{J zxIQYZU$t020{*F)aIXbkp4a?|NI*K=l7msBy?UMqx~ni3O$V#U)>JpiCRS@UlfOIs zC*iZkwG?}tqP*~e>9@~+j-xcKVT*eG=1t}o2*K1;q`g_++0w(2`nkQQeltKeG4pi_>_0_#Veea^#M z%rbiFN`2iJwRV5zQxjK>9k;MiU@47YyeUpk#*DIS_m#obkwyT>eq(pL9Te)5u+3>@aKpPPC%XhAgwiSQ-5x zB`uc+Yov!V3B5m$Eh@zymReuH>(aYIx7qloYqU!!Cn;Mci@vGaSajsBI@N^0doLO| zG>`A#PCom!q!_iQqmGPp2qqNPP45!czE(WlVUI$S3zzd=6d zK1o*c6h?J^GMgl(gS2?s`Y{BEB$oXl@Yp$N^bP zrEbLuwO^~XeR$>GdZMZ-@el?u)PQ6nJA0lE91}fBBu4m6&MSzKLB&n5=*S#?*E#SS z^iu`h7S8RfzA2HGw=b?E&brQ=nvjC>06DW@=!>q`Eyq^`ohe`*krJ$oItA~i5LIPe z3*m~OCO2%br{4@CFOOk4`&l`CsWBdrxV4-3Z@ob$MVlgKNE)({No*yDL6i0&OT97G z=yq2(#B8IJ5_HtXPqISvv5^t3JMn0%o1WrtZLGWOQSCjLAg7~N$q~lXO~grod+b`y zP9X&@GkCUAx-@(SC7H*82mHZ&eO zD(tMN5@*W9wF6Ca>v!aTJCHssxvTFJ0X=Lm@PFF~13e}Lc|0xIybihryoBROXpi3<77&aNPfOJ{AY`#46zginIEn?2dp-wf7eitfdY$Q4! z7vy-LioKcYMM_qy{G}EHatFZ
Uc$#l%rGjG6v;Fp*ZFv1^nQ}GOO4gv_n#!N9z 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 delta 370051 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ðx#L)>ro%TTJR`Q^c>15)fXPjV^A-a|?B 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 z޹mR2d%=Ys0RsQ1nSL{DvJp$`9SYuf;h6M$r%1HPrj_XK!EM}3MDIIuc&z8>9 zeh&bou5bp#Ag(}ZYMCh6ke1c9{Po+z+uP1Oc$Nvf%L`kXUd2$9DwIzN_VBM&xmj};?#O!`0beESCq+Vf25MQ9TnL|Jtma;qdBpTBz~S;_sV+ z4(u842iplio1URAnGF>_e<7hgPah+!B2V;VOyYZdq}qYH+5bNidd5-Cdc>=QjmM7w z{{-ig{|Qrygc92nO#`tUG(%&JC2K{ng-$YI`5_kXDwLiGfGd$V;Ny;@n}c^YD8**m zf17{B_0@()ZUIcWROaF=(!8CK@NiuxJ&qM<<-QVDZZSp6?kOUGhF_v&!%?zV!=hxb zK)EePVf*}E#paC-4E^{jxl%}TW8p&R2I+BCo1>|W2?sRo4woZb(6lpfu7y-ULFb_> z5q-Uu+h#qf%T2Y&qO~wnCCCj52HcS7}dPCM67gxdrcF^i@DR+v(?_nE%C&x;|pkhy7nhW(HgpY}oUN<8>ju|0pp z&hNJo!XeT;k4aUOdV*1-u~@AU<9#@|2{ciUyFQD;oRj~HBgDZF0RVgs(L=BEi)dzg zCl(s@E=B?T#%sd%Dh=2L`VIpezsu|9ZSf6MW6iU*);u24XZ?)yv~C}jC0yL1_@DNo zwv91&==<{5`$v+{Fp)oQPGCMnI5mIB{nH!}b?(dJc$YW{*L8bn=%Dg%?~4J^As~H@ z=h)ZZwfDI<{ovh_LN2{7EA_n;IgS7=9VsNdOQ+i*C!FFG9!Tj5B$6dNsj##HPDCy= zIJJJzuG79xb$a;ZOuiR_6_E#(bX~P)G1)cYhViv-no}gwmTW>a8Ek=1SyF$S&$vJ( zKURcK(LHo8fh;e|e|}}#jBGm}F&C+E&sG7!dnM$YgUfuigkbvlxMPY**)i#86t6t5 zd^JSTbQP>cOtHrsWG9u^hE1gOT`y{hwa`VctANjw@GW9Zr}HfuKux--LkTp{r+QDJ z@hQEeNOS=SLvj1HDd5pdG%|nMPTHrA9h}eu?kg^hy{FWHeEc9z^{!974K98grTEl#%6Er6aFk+Mx_tT#mwv;e|2K8y z9~v9lxm9s?vZb8@%8dn3?uI+sm-p244{g}XLqAZ7)3*UmA=z)^mZR33M2$}-tAshqCvflY1rCVK+R274u&M@Y~3 z*uhf{xF|O;3ypM9HocMa*tZ9Fc6`GRI=Ti7aKqeOcXx}K?^KxmECc;4`;?trM@86S`j9NR>~{)|3_rZ?N%0;{eFSoM_A zz@6%UH2U-xhq*5fbN}EDb1fLZ0w6OAh4Ow-GpxDnA54X4OILw?>O+VG|Bg_iS*J4k z*&j$VNzrL6D3Fj+(GJiTEjimB`(q9`V&;D9oo&E7n zar)rO)YZL|sR3UnrBYoE%O!#eMqw7Fx2X5T&M1H$5+w89nwvk5d@|Gt&%?myeUbb} z=CNOap3z=-@$fVQXS(d?W)ZOq+58$xm79hgnnSySttv*(iFFdrW*>klWz!{i|L@q1 zv|&8yHf3RoHKn~E^T1IdEnbEs-vYynN_uR{OychpD(&%DaUfzb&8@{*G~D z$d!MKZ>lM`g%Su|k@uXtGx0lxH^A?McIZA8vca+{r{9~O?9sc(&%Sbbb z)|~%0x~Cx$^A%&CM|p8x8o{CxB=8+}X*Y>siXqi@&>FD_$fuYh+8cE9poj`9XC z-|0v`cyfO(8~lph@6A`M{k`I=^Xkd$j4>FqAe}`s`&DeFpp!IMv599B;x9N+_J*{b zP^ZGPa5EFRht$Q}Rp>x?hN&SvV{e{upGevuLADv@lc~P83WB5j6L2UHw2_NHmq*KH^ef& z#f^VZ9%2S`cjda)hL)R%dL_a2z4O&C5yW?Q?UDR7b8Cu>yggmps?RjovEEjmWk0b; zKPX2iw01&3FmyU$eB?B5ZZ6)i2OG<8+O$(ZcNsUW!59GH%TUX`U z{FIH*gzO*&(ZVu_-a}0+Aj+Bnsat(RA7XzY9XjCs==TGD7h>&#Zw>G}W2S^HXd5Iq z@5vYtc%hEix$CHBzN2VyoHX9toiyV5iq_m0wi#P)>YbhY8?q!! z3dt_Fw+fD~=^ruKQyVWg>57{hw~m#A_(}k{q24fg{atq6_&sIv`ltNjviXOP zv&&$9g-JEBrd>Q99+77$`8XZ_H+~vf%Q!tVw_UV7FRJ`KJDAku;aR%9=y&T}bF*Tb ziSJH9q~-6pf~`bf=?ApZAJKm%)#Zi5tya1(WD=dUQsmvk`RX`J5)jICf!~3*4)WC$ zR+mq-sDnP5s5R?+$>m005xub8Z+Q*TVA}B`yW#6>bd~;+jp|JWTI{qLU6-3`#8&8i zIl@{c@nB0m;#&oL5%MBia!Lcah1DS72O~I3e5!kfkH;h%{bya^ZA^$UP1i75| zCEwtpH7KM{0sDcYoQ|HH=T(h~XP=DPm_5hl-sQ`T76PV5lo_>cs|Xw(B)s-8#?gy( zY_Cv2_`#-Pat7UMo1|;q0=5-euj)fWGSTCMF`a#7QqYzAJ|GM8C^A$6Lxmw3bXf*e z$)y!^S$aYu^}NQu*JOWwqPRbDQ4>Z510}*234i>z?D}iKJOK49owY$N=nf5S!kFid z;Lq`P!$Si_36E05I4_{L6&gzBsI+2fnCJ!@@((Ll!8haJoPfbX2Ahc93CfZ^GR z;|!L3Qz)jKM|FSq2Y$Eo=AxLAYI&TS^(Z@us|Uw=bfZ%cCzBoLH%lq?!l{DYoG%e2 zVhd7;4#@Qhd%K7JysM-X>QCuSHv@mdGUX=$u?|3@xB!IVwoFF4@SFGw29*3K-iSTMG=t!<)gSvx~0>e=E-P=wQqd@1`+L#Rm`7yCvVz_qg%_u`R;Bh z3)?d~%}uCjH2!-;#JGxL^3D|W;yQ{m<*foF;KqN3INsg;Gi)UhA)&3iS36s=`Ms_Q{DIg$>5O4HhI0DK_sSQ}`IuIQ31RohEUM z^m}+)vfCc2DD}}QCiR*fKXe@*PyQ5r#jZIu`7ie8Fon~smGM+17~C6xd1#J`6AAES zdXRtIti`yed5qT^PRF!vBcts+5mn7Zsy|Sm8(9E_%U}Uy9C84X0?@iB)0Y>}rWj3# zV&utoN-7_T>DD_*vT(<=gkyF*b1!1y?Jb}>cwd1(M@LS=sv{?%^ioh9wUd<4DPd+M zbY3$`qnc|%&1oh**q$x|4K_RB_mWyM-lc!;^=Pq02ch@$2@a;i3&&cOPmGiAqb8w} z1}TX{0&na8oH)*egrj}}6Bk}7&Rt2A={)ldxjX$;kVo(-9cwTxWVKydNZYoSLyF)0 z#6WWgLITb!9oO$sbHZ;?%W9rU_Vq_#iR*F0NEa8Lq-PJSoCzkPPWA(&?x*taNmGA* zlm7}PLDdoWB{0P;J}f0-C;LlZX`(#bY7dhJQ6F7jxM^(}mVGsl!|1Uj&xUa6fi9^$ zi*8d2JkP@yRGmyg-JV5vHbIJsO$Yf^rFX@+Ngu$u%C!Ya-}X=Gb`^Kn4qcZlm%lfQ z5c+13(Y&{~sk-muS(`4NHRn8QpecXi?`YG#Y#!jdy_*xZjJz9fZ}a+x^an;CqDWp+ zGoDy`omO@B4Nxy2KsM5yNujdHLLCBLD(56BkAR!dG|8x0y%-mutIk_b)g8k&o=nZf z@bOuU;>I#so{;(_Z&8kc=z|!G+Xi$BH+HOxGbMZ;kvIYVGW^Vv{aNtu;HvrRqOUE*?=pOenBdM-M49Ko*CXx$}!EIJ@ z;oQqn5DVq&Xx-N8(|L#mnR;|10{l5^4G8j3|7^CXqo8?`-Tse4y^J&N)9EYi>w41$ zXTA0G%wuElsaSElm5Jg(A|`(XP?+`sWW$;6S;>>K@x+~mudg!2&!A0@#Zh=95L7W@8 zXNxDBReYg3vP=eL+3|FQz=ip}GDyN5rzgw#lK13;?OS?Ed`k}=)VK7Y2XXB{a!}W5 zb}rSNEYx3{PT$gv9Q1!?fN$wS7G7-OTY9;>d+9@5yY5C@I}ahQou9vS+i}tSADAqI&xOxp z)&KPOnMi}c$N8%;xIa95OFt=G+^P>QwG*bt$?Ty(Q0)c+#&vMGGXQfs zQ}BBptfAQ=;DLX-Fg;Kg;mjVxvtpQ8qPX(_QA7;|y;c^FXq(1OkJHbX*VLD-WV21S z66#92O~R7RAkWx5?3nqs;P7soW!ui_Q&!7FNS^ulVXOUknPn@x+V4vyuKhc_F>`1- zUUi+RQVbA$KRlE#rG^3#ihd6%Qa(qn6X6|F41o3-g64no`_5WoDuV13T*8aOGKvM+ z0rz?(y%Z`an=J^YogcyvI3hdo30cyS*|s|V!%?*Zj6{{}MRCQg2B>y}U}OKy-D5H3 zy7$J^z30jPEPtNO@~2Ou#?rlKQup3y-MgJxMwHzu@e#5i!mm3Fp5sj$qrHoOPl&!` zj`{SNV@!YOhOO6GISJmu?MArEjCY(9cze4uES>1>ZN5Vsa0u*5&;_R3`=!J2<#VUa zp~*--UkaTbtEY0yDEzr?w2OwDCTINA_uO*bushWK5tvY8F9q?f-I*m{2oCtuqyjRK zYPLuRq()FuXNoWRfbIZ9vo$r-$4|9fV4LVv8NH zoF#u+?1Yoa7n|J|o82GWW*66ktakDU|M4Ic+D|^G^<-mNPb`+?0c<0`Yum@CNp$eV z_VLB`@x}J>#rE;V_VHP4AFHysILv793Wd)q=Ls>%8 z!T%IDHzj)nF}Lxf;mc}y5_q6LLDhd2{xIXcnmAc2vxD6T&VdVJq+02~9 z9ZA9yV2uu6|Ht7epJ^kR&pc&Z;Q=;)TTOO);fP$6EpCzRrJ>Xmjj5 ztQ)OnF<-E*gK9~ousiH!0ODWOxYlZ1mmU1{rR>F}#ZRy2YtB!uzi_RkALbu;yElVWyUX6udY=+ z2cF$QD>{%B9Y9+KgMB@}p8kKYz4)i(aQ>I6togmF`D0JbA7#xSCyZS&YJNX|KmA|v z8&*dDDjeY9hxvVTy9pD3_2aJt_@(P|;o}~BWNKXa z`GNj4CTz}DkWp{x(BFR=o52@7j^hlt-KWpL_56LTmCh)gC#nr8RV*v0_v@P>6K644 z+L=s?En%IjEH*2h;@Y#PPzs}z^q`io@A>lZw;w--O*48<2@rgkrr`Ng-mh7MLb)3H zo7?T2*U~qNjQ zomCwHPQ^cFNjMFX8@-zyy_*eU%rnz}tcQrhX&PZeGk>H)x$zs z+#?YOa3*7g2^63?yvx$UT^&PTCyzQ}yD5@jvls#@5L$3OK}2O2L;l8=cET#?-N?n; z3Fy6CRJLLObD)2M*O;qJG?}~V4|0i;^2-GE+9Ecx=R3EJO@ND@OA9Cy1DHyxP36w8 zuglhz_G`q!U27I>_<~+uZj|KtG&mfO^^4#DRIFgx{@BGFkP8r_2CRfa?1Mv4Q=qGC zBWwoj0(^p(VKAU=sfB5DBLcNeL6#-;ISb_cgVAUUFl2xGi#9V*%TuNX?aFnrdXA-8 z<_N{@EyW$WxqzFWXQ_rOtN`wfNWR(ze0tje^Fgo4bne1ZALx>@kpQ<*CyQsc)Qi|3L0Pco zUpc}pM8ysvGNLWmB89II>Okm42F}oo)jYKpYEgeu$c1Q&AY7$*sV&l_I=v-L{ivRYH8DMoY~yYO0HtzEtVYZsY{Qqg151p)jH zhF}s}=?74mMwGsn$`BOp`7ldBP1M(M1!Nv z7tm#T8IHk>wY;S!+OS>7qTnjLK$i+~Wp{u5kpA8QMh08_YI_Gesb!U7BXOs-EDH2B zQdr(LBxq820~l%-N~J8BM?*T_BSo=FtU^u&V5g4XmC;|F!Tc&~p;t7-4atp<38e6=1`M+b7+OGy_Uk%d!%?;8F{9}K} zWe6i$p6HnxLy^u86QW{;umcH(>7da?dkwr(P$rlAQ;M&{*@PS-f6VNrT67Q+jndYe z&^Dn;=X3|@1ZZPlv!$XPrL^b8yIC)EL!oye=XFCEAaXksW~p-k=Y}uJ?x?3pE%f5O zc~&U@=#OMr#VXKOOsjv+Vi1Y4{v!aW}f&q~e{d^uy zMn_~i10$)|*>rNqFtD_;kPzPcrkzT`1#?xkt8|9o>`ke=f?DkxhBe=zZ+w4cyHR+> zl0&UtB=LN<8jMD9WPU+KIB3dbGmHg_y>cCjUl>BF&m%`6)AQmZ+M0qz^?cUK5VyiW zy8m~PcjC#5>PWnV3o?|qbuld~s9F!TjS|T|?U~|kwAg&b^d!>@URh=ztlCxc_iAMFC2-aWGp3Zf`9NTjYv1IFh0GfGvL}LxE$lBEMFq6Y`VHFFqXQ7chH}+jOPZ^x8&~hsQxAS!$sr z5=LyzuCCdTUsX&Cs+ej~1BYeOmmbvwJgObw^ZDb^iZD)=A&t_PPz0+ypW|MpT%5tB z%FrmKz1x#Vx3{8po}WDGMm~PxZSYf^%LOV1u&@0MbLlAkme+p`84-d{y;#ILE+RpH zte-dE>~3!!?e4uB9PIq#{qDie_Tc62&YSJLt8S;RZx>hwNhIMOs~*ZlM%L<$`euTpBaYn}sI?d8=`fxoE< z3;ad7zJCcpdrNcG=VnT-e4EzGdGbgc0Y&cp@&oFw`AMVR z_+gdwCQf;MZB2*?Og7c-k3F&!?IfAmuhGn|)s6k2$!ulNKlgN1Ou%&mb((V5v;n)_ zKRY>zTKIpqLkX?3D#cDM{(*IN^60s2MjJAQlE(r}7>9q}iXe(0_;Hkqh)j2ni2l?% zZMBTGK#dd{Tp2%&1{5T)AclJMMDa%gKQIm;{0i(gV!fahz||)4#9ZqtTb=Zz3G)^% zu~oCOr)rCyJ*8Xw{H$BD*BU+3`nvB+-1qW*W|U;BNJ)x0T(LWCIp65@(Z9+y7a<|a z(cL8#4my7f2yB@68gS&Re)p?>_Y2kU=6?1yY{h?i%A2Y43=^MOISBv;ce~l~sHLmo(ZCq*cHKg=1-9|&yP=+NM z%CB*y|6}4x+q@&V(}Dl15i!CFIqitc?5Ow02`Yabf7MgoE1vW{NW`l$)#T@QmUBG0 z%gT!R)gSI_^yja_*ssFaKUVbTud$aGh`pR|3u1rzE4kn?^6WM)>5p>)h9W`d*y-Z`Qd>16_0vOX+gnXZZe! z!#5!!E1aJGK`0Zn@92sA8o@T{S+|^j)`Wj^^yWBJ3@B~a2XMj%FJqbjt$Vw&Ud9y> z(<%M=k2xtCMeAi)c^-}812T$V%*W$m-)5_AFgAT4UUK;`2+7g*g`VdxVRpG^0Iz=x zg`g9_1!oXM%?)*RDrXbw?RZ1o1_lP9*S?P zp~M`w^nDZ?9!ERk8XfR~$*6fvV|st4Op)UTAm(N_uvMuG^GLiyAAvSL1X9kfk6xnp zaZXc?SF#LQ&a!HFRz?JK-stcIV)@FsXG@*C7_(~rqK>tO&|1SjM3iW-`Qfq_pav|N zy{aIlo;wkyA|~8O4gDiXPdEVRPh{`-)OWpvz1#nR;>~EZ^N|eabQ-KtHJE~SB6M>q|1|S#oDbpS7QdW?EnPMROMbT6e0A1M?AWipdrS9RO%LLvP1nQiJ zQo`fgCJ)yvPQ+$3c<4YMzoWOw{YcBv&HDqg1sLxjqu93Z{Ms!jL>!e+sfg?_{(Ss6 zQW_QQdwb1a^T{#yQ=*s1CzVeQi(B4FgDA|x-w5!_Y)yA}MLkWimM36FdSFCQRLp11DRxncLF>gR;(~EFFJ)cvb=w*Px8|agnQFce-lia{8^jZa@y=Za+&pfyx zgb@lpUenJc`Q?%zuB9{+l+kzpAimxLWCX%H3RZOA+OU9-0)6-_+X$aL@hYEo5wORD zn7jbB?b~qFJ$b~s9-KUSLN6wNSbh~FO#N*QscJjE6fR#xhJue%k_9ZeM_UW;|#8d>W?d zVcd+hAKoJSwj}n&k;3kB+nSFmRM)@{tlfj4b`1uZ#pi+9(` z;?_B7g|G!cQnl#$Qg%EVhZl3YhSoL319UqG8a=jRTt@5Uk+qJKM_?z(K8`wCN{7!O z9TI1)@=6$)x9)#Wy~XE@6wKc?7IFoe`3bb9$HzT7%0uER?R^+s%%b`l&~9w=>>o$v`hpv zjtz_Jc{O;Y=mV~G3EE@%1IvLkVa5fe(_yP(!U9q{E3?)@lQWyLIhx;^PL(MH;V2F- z>jRJSJd@vWaLR=ek9v8_E@{MdB5n_~)p#C02MR9a}NMoTtP zKemqP%KW z_No?Zw9BV1BH9Z|Mq16WpFD@(-rKjE@3s$-J#uwKpBH=I+p7vgR0S%A}O&1+BeLWf$mw;rGJ59GIcn2ocYJFByTg zO4%N$Mxmn-3$o>6o&WmNn&&%t>hC2_{mX-u;<}#ip6sa3KNggFl;x5d5=Lz{RO%HQ zs&ToTS2us7z+oXx56ua+8Hzk+Mdi#T8GbmAKeF-IGt=fi)Q)Op_zTJz zh^yH3fIp0%?zivFP}PhK0Ay(w={~lJ2A~JpUC{J@kL5h7etAsxu(^tpcwQYVjP75I zxu8>|@9aI6`uK6dcc#)hmThX40~JiAz1YkF=WA|PMce~!QeL;*VC9D&eiAtO)h9Ao z8R|&kKVFilZAS4K`V#H43QMJPWb;P?jKyN$p>QDOE3EH`kw?Dx&FUkmai2~pH8mtJ z!>qi2+weZ!rZ>^>fTZDXq_krtTr{A#PEM!QRk5d=)$bLDbKIkjw$HulVoEu?IxzOM zS66{DCazAb9qiRtxw{L?EKOL5lC+}}5!D=Z<;zgB>5b%tb;4AAs!lr;V=Jnqh_yAF z*`eUZaF4FW#wd&wEl#A;D#DtvIdsXg%t|U zk3&=yX0cUOdul94gfGc9KVHR5D$(=a8b_zM3T(TC+j6JfFz;n0JR9h3 z|20pum)a;uw1Up|9U&vSf00i>GS0Y!s>sGP=* zz&hmL&}QKNdR%Q!7O86p+}v+SNlSizm%s;XkNci(snUmY4)zgy3qr$JONc*|CBz~? ztFUI_?>Dd8JwDa>HhZo{-QF?!i;AVu8-U7D zN_T-Y6YGIU|FryORc?#FF!m^RQY)Tsv`|zX+(Y(X+PS59DDAu4Dn#|!48<*f*EVDk z(->{04ed;dD=9NIaqMh0pV+Lv%ZaVnwuZrT3}u<8ko%aY6gW@YAKkToZehNfP~`>* zqZeV0Ux6ML-x9Zp40(Ww%u+YVnqK8TS%x>CWV_sEI^+RnI!oOyYkHO2Wf}i`;_Wg_ zg~&rpg+9@Su?aTZF=l}DNw&;?X|6=>Z?3e|?J_4(HGm3wj~ym) z*^I;%?R=#CPWue90Br5;|9VEjgj-4O{|X=?!u5c6+fcZ|`UWI*e_Zneq%OLKe=uy+ zQM@HwJON@bB99DQwRc4ldfcR2$dt*WH-+pMoEOI;%)H7)&46ovXmW#Lh(HARih#4? z%g7FkMKZaY(sT+Nu?A=<%?1&NDb-TKhj(R-g(zhiJHtXCK%T+PGZIgQ(qmHQInqBV z-Ix3*B08?;Ig)qnVwyL`c5_Eb=}%dxa3uXmA*7OmboOm4y>dV~a}Zq}rdPiotlRTZ za1Nm+ApGO9Kz-+bpZj|UM}woi!Peo=66TGsje&n%0>3h068qS$G@CEc7ZDyVLdhZy zNE*+RApxTJ_|&5SLRoQk8tQC$rz|Cx3IXmRIIk3ATe1^AieH8khh(@c;{UJloCWe1 z(jt`g7G?ob;u%83OmeYlp=uDZ5@6%H;RHVEUZY6&uqHVDnjxTW~0=>3m2xFHvt+w}xUpgq= z<~Mv)ekl?71tu8%-nY{=$=~B4JlcFQ*xq@w`*!zeXWMZ(jq=8q^!u-mj46YB#SY9<+@;mZ>Fs_(T0Uba9&ZRxjTW@wY4+fiW z-V9zH?7iRLefLUngN35T7~n@810*0p5UXj^+gid9BDN5WTk`mE0*sqzXZ@5Zep^L9 zAQAC@==qugP93l&lVFw-apbAV=Ci`pU@~Fnp8lR(zcsTW=O0hOm0@{@zxU?N=KkT1 zI^;u57EmZ_eEfeg9sv9H^E5v zVidIo7zVNkU<8Xk3wT+xDgYOo+7fAu&3D^>F2E|3GzP1`E)lHO0j!9*C0`U!3GGyv z+afja`%G@6gRDr5H*|);SX}tZ1aVG&2A>7BS4(uhTuG<+X`lKz9^lLF<_0=^|iIN*+;D)i)YsNE1p}~ z7|2L>7I@H{rxsE5AbOv$^bmq>pI$?-Sq^0WDhiOpARAr+^kJ00>PmqK4jjdn)K_+F7Gw6nMLFnvpZ27am8adfJ#mD5uB#~)+}@_&6I&%TjO41bMR zR=qLay>?Q1jmvEz{dN=o@B*{arWnrtX2v+?zM}WG6#i6h%w@L7OA8HEZmv++G3ky_ zdTNXI=mOKS&a2G>7i(1->E65+afH2buPv|4qDHT@U>xMKX;<3*RIF8>N`tL`(W^HN z*_$)m`fC|(b;hzNx^!TM+cG~P6(>TZp@md3{>Y#EL;rH)t9gD?^L%)}XYBoEuseNV zlt9dsMoG+ZZ@DJ`iM{-b-Y2lsa)mX#(lQQD-4<)dM zv)BfyBKFgnSdh{sT!=;&W|$~%br;LxQiBGw({d|q z)Omx>=AyH?z0{X`2U|OXm%DN)4HjK!V=lkoURvCMVS_mj#i+xY4Y+L3*`?_0(%yi> zU*B!LKG=J=_x^BjuyeTkUpozUpx8)k!HC7!gC&a>dzROe?gVK};z7u3E_i5BT4N7m zAwf`TFb(rE%C^#GDKvtANJ$Zo&rKf$o@1$r<2DZ>%>v!8DHbtA^$*rYDH>#r?>SxG zne+M2x;OhSCCxU#<^1vEi03%;db@4}@n=jKQ0NtGFg;LtC?9_5 zqhB{BcVupZo4aNn2!xSK?gUlZKwLs_NxB1}L-5GvQux@1Gh7XS>3_Owl>D;|B;|?O z!)gE%0l*M1qJ6;SfIPcjMqoXdk-nx1nWru9FhYkdM3R8>2CHYCCaK?@W^dnUCTM%6dTgGVu#U~4SmW*D~Fl82%`5;36*uE zrGhEf(SP+L{}TMj?*p&mQn?_iNd_3vPhJ8Yj)3^D%qoon;#z% z(!;Bi!8WSw61`dtD}|rMLGI;OD{xC=No`?{&8E||UeO`+VViOfSI|$lC03mKM%Cno zGz$2(z})qiZxuA)+EQTC9UQK%-aX>OJ^vaV&Ji7Mqb8R~4b<4FA9mZCvSlRX%u`CS$o74x7E~iivX-w{#|rMZ zQDDV{j46k3`GT_lBpQJwRZ22U0#Liq1{62Yge3QW{L4ChN}kfULef#BB5Ax;QOShl z$4?b2z~Vv{t?`4eou;Fg-8YoP~FH zC@({Q3>7p~eK*3SMVe#9O*}~F51krJUB3V51;QxPRZe9t*=##?nQgnLE&W4W)BYq* zA^~?2d3mt+Upw!ly47?OF$>o|dTuGhbyjgmbgZLV`#r@!d zyorNRb5ZN!z(p?~n^y&7VfhyTQH8l0j>71F*@j+{z-A`Pg)Q&~c)9!LXy@S2;eW(S znun%X0IC)`(j)XHV4LJPPv&g!MI5MOrs_25*^J`pvQF@5@71d}JN%Fa2YbKB6D*W8 z_w!~am^37x7dpfP#(Z$D!*Pt9J6RpE8lU$dowL=Bk`*uOEDv^G9_$>x9&B$OZ65A_ z9LbZkzBl&-15cLPtBCB?e!|i7eh`t#r#N_aC*(Ng7kHMCORVxG++lmZpZFT@AM6ZX z?`&?nud-RX=yh)Nj336Rc>NRrAYM5>MCps1vhpwENj4{|PJbT3G|A}GKFWuC2S;wF zU|!NZWR4lD6E{QGaiXpK$WPO&XN(%zi?-gk&SZbuD@0Z9S z7*Tufd&r+5y3f51`m;p*36>u5=LZ{YL<`*W+F&x$hQ3jEnl1e@(Z-h$qUK&8_Irk{ z2|jt)njdphZ*dsKN7pYcD7_ z*4;x)DXHhDd2?kbSGfyKa^-Vh_QcnO587Zs9c6%7kNdi0nom7*1aV3NyF!g}?AA<~ z>T##Wqk+Nr>blQx&f9pN!d)Sg!(kFnCR`IsK|8lC%4Jyb2BzY~@_8{tQ{AF*Z3k;` zd6C;VRD@jZa3;0w8bZ?AUE3^wmyN*5-+PUqQ(j$xPosaIU{P>}f1ogmuCw9fQdd|X zL=TC#XWaQOBHrGjC$!{Xd!Zd{&vgVgUC|Y3!yj@}bW-U*{iehV##A#7$&x8|!O0}~ z6t1oygOmCZ@TlELdMin-dy{N}79mI(v=h%?K?l#~&yS-XdtkQ-1;UVjD*+uFlf|=>9E#$ysk%(VLv}ta%^w zCKz<3I|8W)a7emVt0*RF(U6!J15MEYDxwA7C8Z|y-r9{W@}Yo@y4+HLRd zE_RuJglOu2VN6GJFu9yh&sQ_bBrM0iBg$VM?Ckv4PQky#{0xFPmGZ@2mhE2hQ||dy z`}V`%a3hRX`gSzSGXq{MkayU&UqyxmK4C;Pe!5UBF2X}k75ZNd(&0kq2@}{%hXr#T z)!A~66YN6=n}=IF@3wUVQuDKUoZ1wM9v%L}w~BIqRg3S{HYwXI*4+|!YkSANUFy4I zzxXVQ*0z-!_TzWUfP66Q_CsY`tpPW5^?>tI#vuzGSaBA%x%9FQ>|p2Z-p@ODKAM+= z{AM1Mz8Z&tqe32<4_n5?B{l*vGyxQYXxneO`z+xAgxY!0BPek^65TEJ2$*}3eF*HU z>loyJB#M^Cp1%@85*?l>iasi@@vmiUDD=75MiwXV3A{U_{Ppg(cwXfuYTwK)WUFwP zPB!y>j_>U@A3L1jA=HE)=IXRG?_^+0+xN&5F8TF3+qny2ynqp8s?zS1HflqpTF;p$ z-PHypKk?FH>BJcGmi{+eFyw8#x_-}~w+oDaq9W2Hy#vyYD95l-A9|?XTt)0;;yI+x z@M{vLEJU$l2VP6~f;)FB0u3dgo*l`>5pZ>r;I4_J>ZCafaAUk`LZsmhT2Jsn!`N*| zV{Vde8{m*F3hMxf{jxa;FQUEin2y$6|IVL=5!Z45u;x2aq|jOGL@s<|cnSyz;2X<- zCr{KhYQO^$#nTbS(=j~E882coUZlu)(KnTpaey{^THx0TgD>_Z2qR-sVq`4ry+|jk zh*r@M$!87U$`bqBrB9=RYBB@TTm0R!rqPtuG{eJ7?qpfhXv!iLr@@H+rOu-f^I^<{ z(E`hwL_HajFI$b(h-3-NNEVcWL5x9vxF-x1GP0N3cc?gfe56wQ`4=}L7CkiOjes=J z`v#m^*0WP#<+7wNAE}v0{1PtvxtXlx&ck!2R?uhUyWVs9K=NfBkQk_XGO~T59BC1Mssbok zDHE!y@@n29`4q}tgd%Ph!eC2GCvVDzyrqJ7@iRZ>2^+LeVQ*zkzjt_jWbO;`#TR~z z+O1bH{uMN)Z8(c3Xe7G9Y{_|+BVd>WH#+3!*TsY56QZDzGTC7_%xiUBg@{jHVSaJM z&4Q6!l+jCXr<5`c)s#U7#ix*ec4Hp~=~f*Wof|9)GFN7VB`oAFwx=I=(&o=i;1j6feYD(kDkpbo2{hmLJ` z*7-n2s0KE!0ngUB;Ybuj`!Y<_*_^aXWU4*5KO_?3F0jImNB}u0^f{GQW9oisHB_wTv|(Ou5Ev9xkdl4iIMzVMbIf2RVloXiM3%BLXeH)L! zb(C%&F*nVsQA4)q$e>Yz2_z)UA&A`LB5HBEPW!)V#(YgWX=2dF&8uiv z^l;N98ZDU~&I_n{R>!pVe@iYn}M zSaNTWq7$coq5o)m-P@c}WhhLU1xYZKX%$n5%wuV6h}Tb#$!S*$7nO9FyFP`W>JU+d zuDpJ+Ep#5`a-~UR8b|&Qfxs+mg0w{DGZ(pNR9bV^V%7^vb|lbuBq;32RO*#SJ(Y`? z{WTM7npG}cOG^x4#}5f?FGUKv?s?RQz)NFTml$t<&PUO*LBo{wR`dRxa{43WbUpt< zPW7^<^70lsVTW6in3oo&WE+B`r|+|&KGx;q$Cr@eJ8H-N*k4)qDA4~LOu|u{$;$>k zq~>GVgkq*a@1h??oq0BF#~$AudONz%T>I_$gU64jAdggc1<(S0pDD>tAB~eo;RW27 zL2p2R36k;N;)SeQ49a?=#r9IEsBR*-?y%Vo0JD8 z0fjK_vn%VZuePqjfH^0Th$P{#b#ij@h;1$W)w&L|%T|D2^&P=7HK_=up0pTi*ivkN ztKT9#zzKWSq&E$OH#xp-g`;lkTS(0Dt>41kR6p4qx~SF4Zx0N3z1(pjePuh5MEqn-Gy-JD7b% z%*4jQQ3aGG4_G${G4c=NNRHP|J%5D`v0_Ieq@RMKH>QR>?S&|xOhB7};D807v>jFi zL`moT|^#@KLMICf51?^p$T)N#4IPp!uk6YxJXa2TbXil+b<7INIfu4-!}aZeYJ zghCg_lDnl>(zg8EQv8YCYI$Yo_+ z%BEis&?WO(#bCwVdlGtn8^dOWcX#yDlMv#AI?!>b^Ik~pQvf1pbQX59_)UCGlC1!E zYbab}1s-BDkoZRZZ=Z!Np#st;ve^3KBE)5LF5~BCi^hqoOjoVkiaP-%%EfZjJ)}rjYbpSP0%8tX;j2@2j^Ot#4L5EzCHf6XFMQQ2@5~duPxwiTpXz;CRm3N|8cxMgSAKW(>zJhYtXF@ZYL(unc27nz`{0~i zp&tKQ?9VYT_EAhhyeKGe$(=VQD4lFuZh)P8XDj$BYa^NPH~>JSlYKLGmglBDP=1npMV<@<|| zasNH&VpBixFHwp(@kd^l(nuqUkAh@*+xEjJ*tVsAEPGD-{05DB>3_`CQw$wbuI1l% z6FAi@7}_DMw@Yc?=e@N)1U@7rLXtKCpGihgm+zaTvS0uK&0wp6rB*`Hm{Bqy=-3>P;y%1=M36tHA^cL@vN#FcQ z>yKFdk>EJzy%D8bz{36Mf448QY<4%M{||qpUiakWDg7U1_peV*RtKj~+9xL+^~-zG z=0E6X|9|)YyZ5KZ!F09(&HnGn$&>$e`e#{xu1aO0*MF+Gr9vL&IpuBUk|CmJ6|^qt z3xeG5{CMq@-PZ{{pn$PlN}(z)n>a7DK5>SBH9U6ZixrAnH38lh z%*$21w({jf6EsenuV~zIJAA_BmSNxGkh!RJ8l)eb5Yg7*!RtUhJo~u8*#|8^+UbX- z95QsIA2QAu&US5WZI%ANJXTOq3wiW^nv@m6vUzY{C3cY7wWr5xf7?8LdJ+0pjeWXEXNo zv<1g0EY|hC;ut^Npr6`Ypa??Ez@s1WXeRt<#8FRjA9|%P_+sQoDe>{;5wYuQYkyXR z1JVtD(g<0;{4FjO{C#ac7or38=)VvkAb$3} zT44O_uka%cCs*jIrWS0`Y zdoI`RSTY7bsgTKOvIp)uRZ{r3R>m5M$-%HhqF((?bdSf&bp!z3}?|1|xi zKrd38io?GSl89xDqJSWi7h31fCq|EqzkbeQ0E?FXV-*g)b$)^WQm{y3gbGoG-5;dr zP<$H2*Bpk7&-Ac+sD;qK1s{8eNHk!h^;Q{twZ0=$0c$M;vJEwL27G)O2z&U0gQ22m zPEOL>@BIAfh0io+9ZLLvOxs@WOONJK7;WE=5A(E0zjt?TeTJ&Rs3VMGBL|W+t5&f{ z7NKd6pcXPMey>3om4yj5X(LPpBr^U0K`y2T%4%d+!u6kka32xMQI9C3fr^#c1dZv6 z2wD(3R*49NtNwU2Zn;yA{z8a zI3Q_OffI5?CSV7FNyY$L1_NmK2EJ3oKX=gk3dl_jqnrgEYDaa0cuSt98DOVNV z%f4o7(?)0rF{EG5BIG&E(+#6Z7*XmHtU3Zq!mUF>ciPIS74X>l2LzCcnXp9`{Ixwg87s`pmw2CWYh71X*x>tn&Zl-39A%W3_8VL7eOYAvn}gm#>j=GNOW1ei?U z1@GEVVh?=;<7X`HMBIBDWS5=bJf&#Pzm%2^SQ%`z*0-UVU^R5}fJ%ToX-9Hu?kSu{|Ti11#f|OqXC*J@hzZQu6 zdxH;u=)+0?2=rl}8-z?-sa@YS6sde6UL;JMEocU^J1yHCX{Ga ztB}B7Mm^Gd4u8iJ(wW2;ZOWOEGz~6@2%|W2PGJB}wwpuP-h=p>?Ql<|kQji4*Uz9I z*Ath6j!fqMHNR#`1GZocMqcwgj7Iob_Cjl?;bIXQp|Xe`YgN49;nSE>%&7SW&2_E% zq7d4M3fM~Rj6D@q!e)(LWQAJ%bDnB{Rfx=0%s%u8_Mqt`Wzb10gaD5f1~p59KkB-^ z91IEzp&expA|RB0&KYz-Z{#cWO{Rq@oV-z4E08UUd7(vP2BQ03TH26ST={#XJ*5Jn-gb_)9q+UBr zWo11AYKKRSu=UUXF?pRi9)jr1M1`w~>$g5C?3uM z<~rx`=%$0O!kaM7Ludos@RdK|?~w{q z#Y4ghoaPQpdQ47H1u*YrEPN0M!3!XJh8vfL6e5{#E{k2m&8bmw&TK>RmZHkLbB1>d zW28`2i<5T-tmpHSw>I^>Th*kU`73MUtqptb7CiJUxX$9cK^u2i9Sr|}5799rD=t${ zi^~Mj%c=lfi(NJp`@purQCYL{;L&Bb!xV2ET1UK;0BZzsdi*%uSQ!E2V%57l^*22b zdY5Fx8XkZ}-8~6SMjV^Fy8zOU1HBlJLQ2I#Zk=v>&MXb>NM?22P44a{3Rtxs=@X&P z8ak)d=Z_!r5$0l%>~H*k=kAVAgC{Q0FR{$?u6^{u`eUAJ*FoQWPPDVzP>6Bd_zs|3 zJZq&NHx8)}S48J$O>abN?*MT$uRn?ji_4wPXAs>OqLvqi10$;;%T>^dBl>&=S3x*| z-DcxKq7Pwi?6)9ro8NlN{SH`&!`9>0A$>IE&mF!Ka6erOY{PDU=KM${?txv#d<#gn zYzY3y4khi_W(8WX&3ucsz{q?guOV&#gE`)$oq0LnN)`q^)pFeV8d?;A0R5Ri^~e5& zf5m4%kQf2Nr^FGSrhX~2e%8H={H@+C7(b6F0Re`!5VZ>Oil&$G_11*GDKF+(7Ds#Y zEDc8lb23l{Ycj%rbdP#qOO`I0Uan0R(SX*xqVz3`c~cXtM5%}()6Jp9mx;Czg=fWRLs<<%hPMkumjKuOyOlEonUO zCu~K$6&=}Uc6YZNt6 zC-8oEo7sSIOMnZRt?dZR`*{h=K@_Aqkn%)SEL;r0;_5U=Szc^&8zg}8P^%Y4bZjzW z!FJp2(n6Sj;PI)ad^Ou81N6{yE?rH<9O?CNgilk;gF7Y{1XS5YuX%O)M%K(@K4Sql z>nHIZYc`t!uPY7vuFCcs4v%4k4FefS-i4MSLKP7*+qW6VBY@x_5K}yYpF7*TN1HF+ z>~0SZcK-2x_h4rma1WDS&?>)z-6OITXe&v7IS|o17&KyDA|CINGhP;v_!cJJ zfh;6QagL&IHeQFR&n;97B{= z!lrO5UfPcxSC)3WWu^MK^!k?^XLr{&$_1HIzTBIhVqM&lBWLtYEk~EW8?aB;!k+v_ z)V|RJLGF%Hd|CYSp1N9aetlyvm`JfZRXAx(dGvHIdI@0=*{J|J0GT(tMeT?ZmNWl< z+$Sc9gjVwmsCx+Flz*;=Yq-1b_KpSu3mbsVR}R+VB6*KMye2kvLn_2RWk>XEz2Q_2 zci!x5m7!342-p+AMruL2Z}2`Yskib$$Zts8F;KDXZ2J)tT}zzjRD0F^2OchUFa@j zxAcGQ&Y%0<$w^NC_w+(0F!&d^{$=#3_KzSchK=t19nS}sHb%+ggs=+y-U=qeIf&vI z?a0B5GKX3FP()1YW*ep$sVAjJ44ikE{F3F>m6Ba0bwUmv`~Z4qOsvEf%A`wwt#59} z`59mGUR~D!V|!YMLQtjmxH^Q37iFLhdcF?WQ?2~*pQ-v_Bt3XMk z)+bAVU0v0`ZtQ7NGLU1)gl!*c=lr2=!aPx_|AE31Wh!4Ey?xU=;#;y^-u*c;dN9H^ zMq=-&Pd@!ZanBap30m;~{XhJFs83`#!8B;}s}NBIcxT;3Nf=)Srn|7&p%{il zqpizuGHQSDtPk5_%!Ar759-DQVXfSE{Pco;If`c(_a14A1+S;8y)lb_D_OFd&ZpBL zX)u8fs#QB&WlKAWklykSjE$-3L~Pq`?Y8aKZQD4G(LIp&__oQ7dRw?rZ;fHjv#3S? zf0gBz!aqkWRXhHjPO(MtVqtZ&Ox`SpxJib;z)8O?8oUsb;OUmPHs4WB1AlMv9zEKn ze&rw589t2PFxl)r{#AR$m(6a zqd>XMQ#HgU<-h*PDfB~5MIh~P@@R81Y2Ds_%<}?~4iou?4TKKwI12G^KX$h$p|D>w z1$&j7`}=Qx9lYHKcL`$GDPz{Ipm9&%xfy0Uz5~ zJ6m@=rWSWR&=dE5#ArE#0S(Q)3PoJu9OmB^&DZ2`xWR&=2r z*b)3=mV|(q72+v>?WTy2G=4-0a*#V=TTY?zszHAehwWD^R@={gj*H*b9@RV7QLznU zfNx+8!PDDUY6aJ~Ydkqr!57QHK8)?qwZ zozf=r>FWA-pu%fV@h^B#>hs4*kX(?}lSfb1zkB*oDN}2S|I*cy(D@dPAgtR%R5U-)h4m#IKsX(VKfAK=-@W zV4A+&=Du6^+B=k?$`4q)2S!zZ4*VFd+N!)~912g*JP(C&{JOpA-SRYrU8kXrHY-g7 zdgZHo_BOp>2DROjM}Kb7#Bd%&7=fB;{y0R57L`x*fJ1_u!Zz96hnl6 zy%nz5QMmQ-W1d}%UhK4O6?$d@nv!I_QgBJH35YE*&rNV0gqgd%4K#-^snl&(00t9C z43dET3NFO3U-2~+W5JTsL0#xjCEgq~e^7c$P5)5Zjjnc(-Ea$?1Skll&eCpDTeIW_ zn@6ceYnQ6lJnPzdIS@rkn0LtJhFqwBk}*p=X>LyXb&^1nh+kOvh!KS}6T?VZhm{K- zI}}6FBi)U%*j7|VcXyNn2^MB_5&9p@7iRXGiheVHzhJb$ zc_%Znln$+7Bp%7OwJIrWk_*!v9#lAOjvGUc>a-hV>2o!_7WTs~m<-b1ln;c*7rm9g!z%t$pyhysW*kqFz)m~Ke5wvR}s6!N^c{$v09 zF8%kX{&(H=yoSTGtsFN*1iA))Qg(DD zIQwRqznwh7MPnH37V@GvN0&tIV~YQ9)*JiP5Kmk_Rn5W|Td~b%^Vv$%Ef`A+Zf9Ck zxH{CVDM~w($tN*GpAMLqH7d0@z)TWTXr2_I%LN zE<{|#mBYIIRnR)5p6(cHA*>R9_uU?vtnD2*>@k0Vkezc#`VB5GA!IO*ZiEeLSeCFH zt;1H*o0MAZWIObERram9=^Sf+9ZSfMWn~?FDJVJHOPOLh z&&9T*KX?Ibkr^m>hMS$kW<%$NW8;0GC%CCt;s%6E8p_Ph&0r1g-uXt|LO-+!-vp9&+Xc~uS%I0No8k;dBZvKZo)?sM z2JgSoc5&zQ$UxVhm0V<}>89@d%ecU_?K12GDH#i8%^c)(!Dv)|W3-zlyzD%V3zh1? z&=A3YI!_+$q{CpwY-IqSjD+OUl3n{CNsng$@d5MO!Ecl~10~2dGjd`<{Evcjtvfyk zr=~~F$kK@GY@Fbd#g-$A_TvIi=kSSDCjwDx?4>$+kur+AoDQn4<-qOI4P?_TX34z_oWgyo*1We?*3Ye1C0B)Mr_>lE#XZtO5a znwGgur|8*`SL*Hz*=I?xhC7RRbykxOkw%wx=uF}!%>_ii~nZP=8TV?0WB zh4&N`6EDy6GCLeo)hDwzl&TM0e!eA zoc4>LM|{_Y3gJPnJIE-x8L9VFg*c{4YelK&KK!RkP!>~ej#9iRjm~Yu5#v!)e~GtC z(Ib7{%k9j(yp#|kEU$IeyTvLHO=p^3uuN@5A)qZj6k-oFFzSVp-U6cmKg&yaLN^jI z`Ypx;5q$xb)X^*^auyqO>W&S{`4z~~#lPX$W$9vSf_$2iqqo7lLgT`J4m5HDb^7( zv8f|SkU#F-8UZ!nmIK=3W=@pDb;f%lVwJzJy}(Mje^Gdx#^NT7m5$zie}1H}2|8Ux zzDx4!8>I(Q#<+F9xt-=M`rixif)LSkYHDLJPD*fH1*!h`>Vyt>=J|vBwod>?Xa`%` z13KlwmsK)dC~Tu zeqi9y*Ze~jU90T~`{9s?e`_o{8;dD*JPjEMkkiYb_tyL!m(F^tzXg%^xANJ?Gylj{ ze&;&Iz zqpRXfX8l=r4bF(u7SfgoY$%>V!uzmG|GPn+^x`LpFAiuLMyxONEsLhSp{iOF=)7v27=QiG5VFSH!NQqk{f2GHr%WyoXXOZ+ z#ETHqfvfN6e~3lD2rgkTx{kE+PnsU!qM3AT3fMns$SoLwrS_w4A*mP$_uj~HaZ9Ht{PMYLU# z?bY=BTgoSNg+^k|(|YSdz|<%|w99jrvO)A`r(zJ_f9>e-#W?Tx0lHk9vpq5v<=UhH z;3YmNKMvO^(9QQ9v5TzHe;|faFt>cSx|xrb0>GGdLw~}nb)&q;T{rpE_`vn>n3u2hR#>*n(TOk5s+;AU z`lSC2m2GNUWh4sGHARw)I{b#7-!`ypDMB=BX~@xCAad6iJ60JF?2==5SEoH2mz3Hq z%Mh?p+tDW9h&y;{z0i+4;>>yp#a)y{G65#^f0J4)(wWWE%eHnXPLN1)e*D(0Wvye+ zhr@AQI1Q^fuAWxv>F+_FTQ`(nNI~;U!-sjaP12V|<=cra;G~ z1B1a5$$N`9q ze=}A#m`c4er#ZD20NPA1#w$SS4QZ{JfXtC{1LJ!R#!;P6oEcqZ-$;vN+G-Z zZV#c`V@&$CC|0+xIf~Z{cc0^I@R22ge>UC}_*ToOvdp;>%K?f~v+xKC2SdaWABZhS?+97tJnr zH3Fnr+fcf1GQ(!N7qj^}#j}@8pJ3{5=*fwWU)-=|)7^znEd2-CrEW-rLhx+af10OR zJjG@ZtJPm&+Hn;M;bFs=yX$&#kT_yiN60!+e1kEAJQ-f1;$wxCZv z_v{{1)G|0NcYZDs5T=-0IincWWFkLOpt*^Iz~&DDtVVQj+KMbNUXX;MIW!Bls#rxwPyClYI_- zJ$ba|CX3MhrO%mRak3q3_CyU>Rf_7;WpcdnKwiof}e?zJVrHTLV zIC{z;+3r=yT|$BKx7;WnH)?-=en|hv^`-)!qi+x;3wO};0SsorkDSuHYgUB=k|j6W z1O!Rn{U{65!z`X1kd#t|yRssE(I~)aF%ueOi(EV(WVzOPpsAe)PQCNMsdyH>z7I9? zy$#DTq3Hixoud)ep)OBfe;ls3yY^a&HIUYIG?Wj#cljytIDi_z zgrn@z>)$d>T6f``Z)ytuHFVWo*x5(UBJZ+qT2`Q-XZihL{|Tx9@vh^o*HHKVWKO4>b{M!MZ7@}xp`WLWbVuno z|5CI^e4CI9phObZxUJ(8zsyNmf~4liHY`I$T0qAH8$pg4ihVkY^0HrO0nizA|8~-CmCb-i;r_ndi(rWyOb9a1_rZIGea@gN%Szq`wP7R*y3ZjXGq*%nx3 zdBP|vAhq_!e{dsSh93_U$P%R6n-F9q*C5@EE7FU;lxFw??Kuehzz8D*>}bV@O^AeeSXJ#@=szZeowgoreh9w8IJobzqFH0^cH z&>_*VNL$-zVBJtKkSWx#%wFg^(kH#TT1BMe=-F)?f8%_FVV94UWC->yZ^Yy>{w6;cfW(fW&61;8L zr)ZEHfBF{q2f&YT4{oB~U~o;&XTk8pfM9312(3<3 zV1MRC$pBVUZd?W_1|}eAfS*eCSC32u8kZfMl{8aEK5$@I!9!&iPix-WL1Qa=H3a&9 zm=9WeF@6?|b3L26W`_A}7?Ur5z(|5{uVUFPeo<;L2fEexU}lIugvq!;Bq&1~k+#0k zf41|=cXui!J@2Mys&0Gy)HA8755G8c!IqDkdKX6)hTnq5z>2Hsb)JLo1_fZJC znP76Nay|wvId+S8$Fn`oD7=#q)9;cNfb;m-eox&6ZmyE|2_Rz*N)C z3n9}T#SL^uL5917)o@Q9w}gWhcO9Zz9F3mFNy`9KbRz<{aSU@5Oz875YK>@na517N z^@63^WV?bxV4_v#24p7bRLJP$QU6=%yaKD>Y!Zw4$*z_SzUBtlZfiQt%|iz9e~pGw zVY4YZRpyE86!@`1UQ1vouOsOrU_!oL*Xum{^1e&edgXsJhuvvB)5mkAm7La?7FN*UiaDrxhP zcJ^0c8lH!fFoW33m*Hpxe>pMyigX*$6cZe@?OYp7sVK9Mf6l@e@;yq0!^VrY;#=lA=Pg`T{Gl=7&!z=5==R2-Jr7U-N;>&$?WrSSS!iVP$;F zprK%3P$wB!DTB@JB)GVMKg32!iOdC?(3ZhznVFyXoV9z9Vjd{TkGcA=x4*om#^V$V z<$-~SU7n1yrm#q{f8J;v;85L*F|zZDN@t$e`ByCE=JFuDCuMA_=j2z-UF2WQog3C~ z+0eOHL+2*xdo=uVHb=|}G^3NrD;8f3Ia%UYw91|Jm1PRuMHen$@k4o}eTL-MHnL~Y zMy4Wqy4o=}cW*-k^#r-rv8ras3{G|7S81hw$P8|{dLtMee~^p$1Ou6f)qst)8#{;* zKo;B?FpxirvtW`Iy5-IAYC>?82vcPnZ5}@^YXrs6h@iQ*G<4vHti|bcqX9{19LrFI z#0F&MI&aw6X;?k%72{m~Vc*!=7q$>tv+IgRszTF|kHg6vJ(Q-545l>w`bJw(%uIy{ zbTj^em~sVFe?r{Y>jSyz0yRb^Bd8RPe7xh`klXVD_3UT415YjEXxlRIsTKp(`}aOz z$AY^e0xj4?vBU5_!y%X8ppY4UMHEj8qcnD5cn zP8`L5CuFvnvOXx++2j1CSpVor@?`QPp}hB#C%MeB;C#7r*Bc_kvt$6V2u+?Dmc<1a zLXh6ue- z3^*MVL=jvXRen$Wv#$&`3fh_n=EiW^vl6-Y;W*4bv#g<&!-cM%1DqJci$ zNqV3UgYyue0wPpL`Z@2(1Ow_y8RUkP)wi@#DTRc@uxGSz#Pg)(_7ldMH?gnD0Xf#VAVLJnM z%;ImfRLg}qkF+RMF?)>R(s)Yj;rOu{^|Uv`mm`4@c<$0U{$>3q&vzAkxAud(;HMwg zf7}Is`{BEi7V9M~ep>t9T~Ic}Uw`_Gz*9R>?-s0mAhr{Pm%@xr7^O~pfhhVc_9z4y zd_mqv%&8WmQMp5qcW+tL@b0Z6nLEY6n-Clq^a3IVVe4^=Wn1@E$p2z(%IC<6xnG)s zh&Gvy!WRAi)r5>`wM+ba{m0oy{Nrjhf0%?95$0rv7$$(8%G2VM_4XIu+jtVrRxe9B z&V8pQ6vDQF0FcKGWX2WyfCw(*2_-CgsBwxc+nWZ?`>mCHlumFqix?AB?7UMqQdwa=_nDE58t7$0$Zw=j(GMwr z9@1UgOo!s@$)j=58V9Q>{k$4X!P;UqNQW&697z&iug(G5MeA)+-F!p}?ODFtTpnQ3 zMfWE8jI~cr&b@XVotzv#@#v5A&tC8DU%^!X_HnbU+dls9=cj-6@V|HMe`i>MR(twq zk5y>fKp`u+n6jdm&GE11VI>;tMU ziu9*51We0#sr&tpexiPS@7ul~-3qS?zs7;5UB0$?t*Z`laH1&1!GAHG3gxZ z7hzk9HUOa+vEntE%(zR$e^ulva(M^#iuP@1_w-$Oi0i_Vqy9mcTu|@muEO2|-65t7 z)}$q60%S$09iNGGBSk zG(yy4G_R^nHY}a2W|xEWf-ta$YMS`7=>+3(uVKBSbBbeXnpG~&W$&e$*WOEM+9c9F z!f4V=pBWgNw?zY7!S^*t-dW>xp(ip{ODx%81xT)(1eCcwiYU8Crwy-$$2sNl8#3Z) zE`!W--uzN8Zk7@ff2Sh@uKUd5foq}ZZ%jSZLQdNA@6$a1;pz~cMMv)hi}BICU+)<_ zycOMN#>4F8WnfaTyytm9GtK1jj9Ff@Ls?~bv}HYCXTI&Fvc9(VC)DZdu?l-aOXNCX z-H+$)?z=UNV|AazrDqVG&6=odK&U2n2l*Ddj!+BT<_bkuf7zQt_dF+3eZo{R|8d() zfXbgkFtI8fQX|nUVWtiM82w8@0UFLnhCKwuADQt1j9~1%rH*Hm5=oBm3#yqE#~ZCM z977@IocTWIRSQsQ8I*G&-{?v0Mo)A=!Ekv3QuvNnK}=%I1VM(&!Ox^jwKg*?J?fEh z)R`cgYY*E&e`;48ysFI(ePkcHNbu5R%5!7N2D+OYCOr_(vW!^eTU;y=o~e&+4b0 znP6r-B3ap?C3e0a$DwI%5!TaVMGbbJTqZzo*f@{#f3Wlf3SP1coPg#zi&UiTG|K=z zb)CbILSJ5X+jI<7pucpg%eo&m^p}xX*SR1g)4GfPVnMZGuC4ci7(!CaB2gWOu92ws zq1ybk{;*9?3zK9^ZGaU7n{qFz>pn2LPlZg2b{-VKs|J*eM4<>D^)HYG(k48mHZ}_Y zz^d3uf6fMnW7{dCGCiaQL&|gDcBzc%MqOg3x*O_2tUCl?%$2wYCar%bH+1iwuPGXq zpbIHe3a$C>`kYs&84%(w)u*{^(h)hu#IX?QBNr;4J%6%PZgnvHiZ<*GLXC9a%q>a8yiDre{8N9fXS0obGL#GE-Qniie+UH-I}s8 z%xeiab{}jFF9dCowkTWFqB}zh6?+mXtAf38kG+@b6Yp$a>tg95JHZT~Er;^{@41f^ z_UCm;Zf2gr4)`keUjWm^W=8Eu5^^o3x`8^gBs}+cp z@vx%9@VA0kyoe%-O)%jv^agrJu-K^WLsXQlj^ajbj$#(iNW;dp?exklsFB`U5EjLD zEK4fvo~p~@K?7_9Cs8}JtSQ^EyljmcvZ^>^ttFkW)Qec%7|$+?MF8rj8a0a9e@d(O z8I(N=UTb$qRb>#7LY#O7`rBbDGK=zl*2OhZn|XI9?@pmR6zEj-XZ5A`jz{k9+zJ(L zqA@E@l>-C1MYBqyRCaaD3IkO`MBKNOOWOOdNo1X-D1TdHnPHR>TD=^!n0cZwqh81e zJ!CXWr)}nz&~dAO@(7M1Q6AUDf7VWEa5HIPp)(BPUlbV@>UqAVIn+_P2W<+V^1n}9!9fy#zu_PSHuDgXatkNI>cW`@s{kE zX!$&rGPgq(&I@F7fH*B2f2q%I!TTbm2inPk!Qm1PR_~n?vyMT`MLcw{y|Fb!JYGt_ zj>(tIId?pr&PSjS1ODVu2W;t93kW`hTu3IUy@cXMfL1+>Lb#4WKp4J+F*H=`7~~z_ z-3Jb$JyMQAM0(Hr4pe^YBql&kpWBvf=+wH-`1PK&%at9v06KtJeRSl)^!QnQrWlGO>V=&1H0C`$z2feuuZXg${pChg1^Te z6l48_c2Gr9-|Bsg30*ka5*07g{ek9&}JS9KWw6;`8dmFAhi1 zSmkI8&6UX97aa_Gf2bUdA-ud)>?n-TlpkJEsBGDvRcfv@+@Oh;CFdo=OX$%hHrzUf zT3ruD21awh!T!#{V1M(~j<5?;dWZ#j(HrlL8@AkgsW)3-;%vG(CLSOn9z$Uhh-L#R zS83Wp%Fjh5jNaO9K*`riggv8S&SB9aVD~~qq2Ypv2QD-^_FOG>8&sM9lq5Z8__JP|<0=gL(mx%vR?iFeGm`?XJX9rO> zfu1n|^rpvt`r;2&HSHa118LvsC|$kFjB6gZotj6Ms0gm6m22Fe`eXmXzw!tEmVe`4 z`{(|lzoWU)e}*IOym1g;WBerH+@jQqVai=Nc2#UMy%dC|B}H#QK>_8M6`g-nNX6Mo zIIxk?0ZB1qg%-^*6*?wYQ>Muk@!I5P#RH1;32sFx21!vGKiV8f6jIC)BoaZh)ZfB% z4B|gA-)5f7Y=abXxnc`Q60Jyi__QCu`zwvmb|%xFf9{286g10>Yd0&*#JvFDC6lxJ z5@S@tjtcCmnMA=3%NAxFlx^^(3%Q?$5iUleeqqHz2~5pRq#c5Ng3u)$^;TBemhsS_ zKE{5Hqn9UA19G*d+zma5q;9yR1+y(}WE&=7826}D`Oim~I3gMsURbT?Nq^FH1md$p zSUPf%f7q$VwGoT8?HuETC^uBOEQoGk_vDZRnz2|9v ziak%mb_uD*Gmt@`UkH)@K4THt#DHT5XjpaifAPlsF^=~uAJ15F3E+#1y@$J+h3$_e z6-zdUUtQ)oX>Zs?asEa{eexIm3!MB;*xoAzYKJ|KRA6A>czXs{#Tl42^(kESuW$-m zA}oXB9`YHeP{wkofdl4LHGP~xe}Ln>EI+66p|gabJF7kXmJ4wiRrM)s^|x>e?_5(T zf79E^v2KcE6)Nka-Sls8v~R-pA}7m1^8 z_Vj-7o{V!T?S2=#f3?Wk-eQwq+sH=fCk^`#<}?`7ai^2=c{0%;aM=9SzXt!@btZzUq@yhPWpOzEhc^0J86H}r!OVo zvnQ=kg6H_FyrNdAaCT|{b_CZ3vF5Agm00t;-Vco43G#w#wB^MO0=h5RHs7x9ORnrH z-C;5PxcrMGT}-*|%k`Ni$r=IYf2i+`Pm!W~1IorMKzIp2^M~%}lW1QBRDSmW-fPk1 z15xq`v|r()s|mX@-V><4@TE-SwF$(}U)c|jc)&8BK>M|)$!OYvhVw+)1leDuh}e-s z7IWt((T;EsJBY)Lo-)P10qM%88>cbQ0USsB_$x;INe`!>4b(Po+ za1zCj{ylGO&=CRPMCy(ZY-zhXi>}S1tdTMXkhYtppZE=;9CX+ibDOWevs&-%<)#G8 zY=Oh2?vh&E8mHG{4J>PZkD!5wo(;R1N@$_2j`bL3Rq&tm629=ef-!O$A)A;$XFj15 zf@w8GZ#(y3=NQDsYt1MOe~{$4c|#H7L}v(2_yv9{IBe?lF8;B{J5G>4|u zhmW#t)0Lt^YfjIAQ{hr&l#Biq>HhJl9Q zc+<9hX6mb&WNh~$ikA`A^FSWyx@Qq66SlRBpyhq+lW6>f+1}G8NeC}Sqmvty1Q2;w zK?9xH;B_;siiNS(e{OZ{;JI*eMt+l(d9qkf7IK`8mn=unj6{~m3*w_qX7KqtjxRE; zd=`EIg^N@+Lg=sz3V0K3WVQ>{*%tApe4$K@>N!HgA-x8w*0>Zof&(Cq6x+%^s*RKZ zv>p(2vA>9hgeTSSK{PoEyv5g^@Z#4==}$s*M4z_>1OULJf9GG$=YQdwITJ%nE&dlI zu_FHCmlt5bfVMtaG>zoP~NJewP9cE;m{I2^98Aj zp^o|CkP{uNe@McvQAo?k1C01&%ukvu%5uH{GQmeq#vk!+A z>PS`nAU@(G5xJZ5XaiFQWbR|8Q;j#xW@?fw5jR%z61e_mj>o<@jw8Z0xJUP~Dmaf8 zet$UJ6Fas+oveP1J8lk#4bgGEh#IX>=k?*R4!?6vf8$$R&G>dWe8Vyxl3ecMz3%j0 z-pvZh9k9UiBi```|F`ZkP3#PBdSslN!{NsC0S5GnMMFHCpThVQ#rgu(HQ5gVMTA`v z`uS(}Rb2mb`samQ)^QM+BG4@p`nefzh@vZjCgC%8=7j2_<{k}z0gX@Hs*%h1=vf?W zvDKm5e-q-s%njd&a8k)wZcBb!%&xeRPL~EqED3Te0*+N#lix%5tk{B9X!*a1O^cg|>vqH}`}R zwgC+)Vvio}2?0IL!mnT-nIVQF>Ivv+mJJcme?w>~gw#TeN=6A_Y|cOA9`MDBD&2Kn zeQ4V5gVe-djirckdRExdJ*0_fvW zeL1HAsonyhJwLdUs{GDGd3Gq>-fbWG8&c za@~Ge?w&SEnR#1`MdkVg$Xa3x#j0Vs@b*%%AL|`JFIH_c*~rUJU~qjocL)7)4nK?c zJSl7FxShb+o2WU-t%EevvMM;c(1k8}zh*mu%rlX5XrE4H*&&!v`AyQxf8pH1=3=K1 zbpKZ6T{7XXK}^lQF8=-=n(cQrv+D7$I@ZSX56&7;SXzm=Rm?*<9YJIXOB=$nA5>u9z$s5;+1)+-rcq9zDPkV=$3dp-|I1&Yfr zjwfoiJ2d$W0L5m}Lv{oei-L9v9a$6pwrMJsWUhr2hN5C> z)VA4^-)0#$%4eINe?2E<^`11jp>YyAI8TV-@0HOBbStP7HuXJQeO;l0{J2i*2F>Um zq`5yh2f7hx7NEMCrZ(e`07NzA)QEFBP(;c)H{hh+);$gpT?sZwMUFdJ=!=_~#YJ|6 zq?HcL%=f$XMnXE@p3rhlk+u(c%__~#!p(l^TYU7jIW#dUe^`$5N4=7ub99z3+!~RmA7*ozQ8SYDJfRAm2`S+B^QMNX zo@l1tB*aQLC#=-#56H8=yDB0B{?Ibu55fneHUrp<5|6Z9^_7AOXhSH7@y<}sr4w)Y zFe58TgZ*TyUB|?&;aL=k{W5zjLx;hD zGjw%31{*ILWwF;nSLWKG47tpsuDr6Ux%>m68l~>R$n?Q_vGClRkt24akJt@y#8A5z zy4{OetGKBXLXi<^FaDL7kr!p^GvtiUt3ixB3pl&Se@ruq!=^ru%jjelKZzovGhu>2 zi7b-MsXKt7o<3|U{%y7~XsBX})Gv!jhxCkCcp1~0 zu>LHD^11@9iN8e#$)pb;qS=u(@QD**5yT1M+OjW^vVj}jrrKF66bbLSOn1{nfa)g5Gg!e_2zlF$; zI&DN;$1D!XRgZw=LO%GsC?unNC+clW?`{OIDs0<_Q9#VmE47N`^p9m%v42ANO_EZr ze}tw&{~lJ@NeBcWB;!)o!t(ib<8A-p8WBK-+cekxhLCyW-397!!Aa%u=oXA+wQ}bJ? ziK#Z@jiuy%;)^Q0;ifhwI=By8A}rcg$%9uYWR})>r?W=eH-l&*tI-|h-NX{7!b(|7 zkUQqzCom4c@8?^-_Og?bs&Ihl{4`r|CFaH|Iiq6yu25L7wuW7l@9|spN=0F@e?J~& zEEZ=L@JQJ8)9LA9U4@iZjZ;!4my2pliLS32CN;YA0=+TsR`)8l1R6}6bT3-MsmNHG zZ}0e3eH1P+to!pFE+urJx5Ls~7vEui*?(pOJIps^+WpQQX8&(@xN~+`3vH!zs|xXE zlxwxNJH`l?&b{dHzBZ*O6;b~Be-zp{7mZTVAFJxk!1T;(fazT;ckK&NaLUUh2`AWy zkERnBeD93n`Jo-EfqDcE1)p-Ld3DyC^pbUXS;<&IbNWv4Sfhg&>SkL`CGnLj^H}{0 zfG4l=)jg-P_=ir=0v|^QHy=|j8M(je^>4Yt)u^bO_D|Mq3$U#9Pju^Tf3K(b8MOD0k0$xBzTz@W{%dvgXV4 z2M79#;Hjkt*I<&?{Cn#)kuoodN}YXBhQmN!9bk&$N3}JqTKFk=D2lW($&pU}-Ts)a z7H4M_)Rj}4Rq0Mus39rKf2Gz>oAo*exd85S;Jc8U)6+x*&&bfA;M(3uAwm3@tFvno ze*>d}Y^rD@{WK(F2F7L#+YDJ{ zBwyLv+7XIPvA)4%JNLCGAe@(Et>DhB3DZy|2 zRJAjS7<)LZ5Jog9;;I4?q9+LR@JZD$~n zQT3MftRqq+Nf62`3wFU@0TktJcHPtsLISr9zllYuSOI#jK9Xn8@LzEKU~dqAye?bt zlFd3ULR;~1L`vtTe=ne5L)FmZm-Ac>B(4z=1Dm$|#3Tt{b_cf$=Z-u67%CVZfk{gn z2l7scycRLx9zX+qcV6-)*A~JcYCrOz4u+u+_$3ajeZv4~9TGv|uTM}1Ye@wh$UjBc z??t-57rin}A{8~XGDPQ?WCN50B0+eG*_F#(Oa8C-iV;W=e|=skekCzqt2FFo3~LND zL{J1ph>_xlVW*=#k6J*pH{+bDV=nB^Ko%S!1$;`jQYcd;_i4q z4oP_k9Jm4b8-s`=k$5-{n0sxRd&8OgoH9Mz>>AA3Xp?kU9ydDL$ZQCM^rYSwXVH6E zo+8_GUiWV(e;m?g(NR)3uh}g&`5&z-j`qQcYe_D|jLy$8l=KTsuug8B)fz^GU3m@! z5@`Iw8aPZ_r=lR0t0Bh|fd?>46?`DAuR+Z@hD-$=cwex|Srtb0NlnYYKPRGLSmN_b zF9a~cO6Zt!8{8d+o3j&PQf>x7mE2*rOoFDQEQsche*_CoPmI|c6ID1eTyP)^&{@M^ zwD@ldH%1USJz<&tStlaiIgcFiJrTZ9$~5UFjrLMZl33y(a+!?JsdSy5ryFjF#AsKj z=5OSKKT|j)^0*lT_zWD+SJGOL{mFvB@Jbc0*?3W2|Q*7S5du@+_$N zYJ5Sqe{93w%A~(~#BwaMj7M2XT_%~D1&Do9D*TxG$O1vkgH`a8<76v}lKpj7FwU6g z1Ck*-9G-)R@Yn~mW?_O(P9S7YN)=>JOA5T{iSApTo;d-YJ}eNt zM?+CbV8Az`)?%@3D(k=7maBHL7p@1;^)s#7r~Hh%4~!u>;{-GhlMlLM5I0YR>zm>5 zf7nS%2&yN`o4t~xIG_l#f@HIM0+GUF>p*j{M@=%n&*(t5V>(zU-M^S(J*c2i7Q;vR z)$oH4zGkZmIC^ulYH!k`fyGE$7UK?LRA@@H>j7<3_Ibx*%#Tcf?e_%W3QqHWiX8F- zI@wvT7~y;}cxn6#d|yxd0M1XrcJEDkf3d^Pg4*(9l3(Hlwz!M{nuff0Erj(Yq-^21 zu+XBeYOW!8Ytd;QZ>ft63guSY8-*Eg?*(lqO9T?@&rNX3%&}o|$!NnT8jB9=X8+SR z^|G7YHpSzAw_G%YWi?Q@o--qp75v&ui2ZoaCR;^$0$nE?D6v>TMya>z$wS^wfAVU} z@8ib_{C9R$^3`oc50Q_ml++1S&lV5#oFR2}RW-HDs5Rrs5|_IcQeXAMnP@jnzMS** zi#1IXyNN?vmheun>nmB@*8$?CI_QSNpEp9o-ID-96x<1g#uG9A#o8g?4B=eZG@G3j z{xse@XtE#KcCFSiOgsJMS*~2cf3K&BQPvXzRM9t4UAAqrD#4U0QJ|3E){}7OPYP^S zgjEQqDEH;r`-Th4ET|NWP@o(}Qdq{I5H7w-S4amR{LM;D}7b6T4e_b3K&IRNZ zbH96Ae{1~XhT|1%D-!6B4sZpFGdOFb>qg5Jr4&ssLdl=fSg+7J5h1X{WB3xA3*UW$ z{bY>!WIkv*0N?1aZBK)nr@DY#?W3AU#G=sUoi@moc{+4+Jo(@EfJ*;+Okf}F#_0Eo z@MG1O1CI=4Tepp8pLTy2e?xGhZ@DD(lfm}&wuUc4#lyZWz$>W`26~&N-J*BUUSNo& z_Z`pH`G(W{*a&Y969r>3Uu1%-9T}}zNCJ9)Y&fB5mv{*A&IQw2-_c8FQ45w%3B7PQ z-P|PAqkeqCfhXIys1a-I_jE~N<#>`ID{^fC@6A4cwb3~ynG%XGfAg#3_#ghEuc}?a zTB!aCJdaOMOO~t;YUN%2olV*uV9WqgObyasqwr1Sg)_0&-Q>%8S-8k5a@0vaDH;(W z3OF)#zGennMv#3dt7;}L*0GzMrzUb~Y5Pvl$4 zDt9g|f67PL%Bt=Pf3^i=QURI+J?!ILio%MpT-NNb;7RAFb83~zIl9n{`ap9iPYzFz z_avs%m_3Zz;j?{fAX{}Af}ZcsjWu*LBTTl zEd1FIhiQ+=u`hu@-lB7aF3d(GyI^6%)So{E=$rtyfO5ohrmSmXb_?e(@jDLt_Aq9h z#z`VldaAtb#BK5(U|;^p9ytdBiQULI!j#i(g|RKA+b8a%K9^sIYtOqqx~~vGJP{S# zk3+c{dot0~f6_+&m>3XX`sExrotVD*H;f(6|M)#)t{k#rX!HnX(4%?pHAg}0YSE?U zsWpr|_oP!?8pHSq=7Imc#4+id6W4{b2=H$R4m2RdCG*ZnvcsIpGFcP0O$^T}b(dOY z0Ed{%H6)~PCTvzOo3$!TE*e>&>eTcWa4BJXh%i2?f2m#8i#<%~j~&?2vzK*xd3U#E zcR5^SSyQHelmahITYB&6RNZpfn=-wsck4E*Q;o37%G5ZU+N`Qm@j8WX5IryI6f^EN zyX#VUj!M>MtNJ+ScVJyeWdXEHWp{euQxOTX@*gvmN4&VKlOtdD&CLV5-Q=t9H%uUz zv^O_LKVi0lXo^AkhHcO`@bvld{IH$RA*@lTQw5k~y6VEFzx zVRoMQf}NM*f(JW)TnjQrfp{VRM!b&lFa)>!;hBg?IwIox^>W^X4ZJ%NBmZGy#X<7#`$F;y z5-q;CsVLabe{vxr>L}V>=kvwWLk$hZ<9=9JYFK#q@n5sM@juVPAGdFQOX9>A0=YNe z_k`T15-h%d6w2xcpHqn#U&z;g|Gpn}oJiRCQgGk%>%VBR<4b|*eP5V<*#gLyGEoJa z`cE#3^wBa|)l1LA!oU6N^0z34d;w7VVnvWIfucT-`0)jN`DYS6z66|~li2Yk!1K&R zjxS+yo`bkCx>Gi+Ljj?DHJ@(ww^LZmuAf%(i=Fs?fbHXSldpD{>&NMAvHNi0UMiTc z)~oz-m%rZ)r_06L)x}H{%Qu(r7Td+`Vu`Z%i}^fXT|Q3dFys|g1^#Y-UWf{-g#g%M zz2ZhHxAVm&pV94dx4FDsZ|3>tLLz*-_%*-q!pHZQ%f%`m-ZMS;c)$e((1kp?y@o5uE|+;@4||1gZgqGoX4B7?zYZ6x zdH(()!#`_XMrzJ&)DeI8_|tTr|7G>V`j?dxxbDN&nLXVuX2aY3*G0bh+8z0Veg!GJ zqd*X__xkb~bw9R1NqruFS3xqH94LP$D17~R;Xl5&Ho**IU#Bxv5~XHe3r_l#^Nk~a z8hG8(0s~2d>7_9$Yt09koL`GMaqnoa=hF{cXC!`)#ha=4zRiUwF`V5mmh-Py-*~Sp zg#{G;nYdJ0Dp`G#yxwb+jY;YJx5dNbdb69ZcBdPS-)%IWF`A)YnOBi{ZyTO7x}R?U zEzf_hjAqbO_Foncxmk2y@Q2-Q{UF$Xk#RrVU~(zmQ+>J2@5*<5#-}<(1NNGu?fv=} zjP@_9$ERI6^s?km-0$zzSwYDsL89P4f?^l*HsFm`>#@2#(Ejvkx3)ELahr=ZGPi;I zVtOZ54a*d&&dUW>mtp=+tTJ0(C*;b&AE2*QGXX#G_u}vV?otlSm7L$bBvAT)O%s~X zc)i~4T1KoD;;~bc`1H#SuSN~6%Qh8Kc|=%+9;TbOi`9i#5Tb^f+>uc+G%AJ-A2i); z1bqlpw|q}gM)g7z4$jr3NpoThXY1v9bJ0dlweBp{#oF3j_j?}Tp)ZofxEG@K)-N(z z-ItT3>lYc_)vGsr(Z$_*_O#u9ub*~UjLbRy%VzrcsLzdJO|mV?dd&wg;%%|C-7WL? z_18}INt5WuUtowN+3U-@#d2ADD5qOc70^73pjiJbB_%v<1?;xuNyRf=jPF<5({24> z?ZNt8zPVe9g+ofC0LF#a4vxo7{*E6HTFb5QQ4Bl!zIi@dZ!}4E_O#ho3eZUaK0v|0 z=5=Y86I=soN?7*5s+B|#^uR&aFVk1v#da!0z%%HnybJLhrQ z9e+iIJ+V|KVSK1F^0qvI7pwbxvk-Fi>gj>RxPNP8{Dz!WDef$AGpIclY}~$yYiL11 zh*nE$iHi%c-q|vrZYuM>skmh9VwnSXeq5}Ew@+fZTn!G@SgclNjlGh2N@aqmHx;m* z~DvVxArlojIJUU7S{GU7WqStoa zgMIXJMr!M`!Su1gwN`@)<6YiZ&u^?pLX0VaE1~+;tNJ=-Z-(Wfe|_BZDp%P+wbwD_ zDB`za0Zm;vQCc6~-?SBx9fyrbiC^<(KmMw1Y*0GT7k@?W!E!I~73lfkCxlHy(>S2y zI_)e))nN`+7dN6h1s$MOx3LP((?V%wNXt(fz(6j3nj$cW%vq^EN>>&Kt}DeS^|nbb zn4mQv$@53zQgMT16sA(g;8vtsU2?PP$?9S+;S?HUma)Y*=D}Qm$H9NE8^4+7=ML(VzT5(KZl9Jw0`P~tSs`y%U7IME%MyrCTiftMxGt7bD`}L|%%HCpn!`-9 z%|?yIlC(2!<9~DR7Ws0{`$Fp*+rzF9Z`+f%)%$m~ z8T#9xcMUmFWasUf`gqPEGn`V8m>sMKWx^Ib3wdHb)doTAzwW$7u(%sBOww- zHI~s>dk)R~?;!wuDROqE~TP8L_9dUx)dFCC>=kR=PVKJO&@r#^(ncqai(b{0Ye3s=Re~RqlpREm-ni=soYFm z>gu>lsx(~e@`tUestz+#b33ZW;MAYZih}~9ZK>j-WvNzYFX!7lzneZSciMc*#2CA) z0Hg4AMHniUlR8w)tptzHn8Ua0rI;}v8-Gt{F!=4hP>!it{IPP_WZ5!T5z>eSJQ!|w z)6K4WOkC}yzCajYR{(chusdWt?PG?vbd^jaqI3ToMYC^jXiEpZhS>+*~*L-LP8r8^9KkD&XH&49icz==G z2q&r13Nrjy7aq;2M(G7cei|iS7<|P*yq#_rTjQ~Yr>s;M(6v56=s~;4Rj1x6R@5e< zI>SEN4^jt}$53R^DeVuX%BYO$G18a%;GFfZbTEb|U z*+GSz%DJx_jWD?@l5IR%Dqy@fOMljtu|-Kc0QeOT(AJbOIQhtaVujZDT*W*npy%M4 zRt)E>x%IhfsfjYm7Mn__mK$4;J=pPAwr_v0T5qVW+P1=6Yuoz1Xxm;}K}ILS7Vxwc zD`3>xmg-Qa>6Q-LiWME|g>-KIhbYeO?vl%jd5K1ImAS#?n+UOm^0W~jCVx+@$i8An z=E{`{7mdScB=d3*O+|_!sEf(~xM%+5c7Ve-C4H^dyRWOJG_O0ssc$0|I38-k6bBTP zyW_hH%=>`fQr1EW4eRXQy784C7j-vSLX++1vi1^(*T=R6toClbd$SZGbG_&CO?%^I zF@q6k+Xzi*9lUN=Em(GL=6@dMbP!aFxcC4eUeOm^+6QeK6{1aSQ3^usMi5NwgQ%VO zdE>IL8P$0G;WX~RT*vd3m~FLx?bsp) z%fp~$K-(=F_PuH2M>v&T?%brt_L36m=I&G*Ln+y7i&S^=t?aZlMSq$8F?7T^uI=P4 zn>hQXrn14+o3=D-?l+2^YQte<#mvv5?kJ>ObKHg9osLE_Kh$iI!{(h@+pfJjEU9qU z4k%UW9j5jr9aM|PclXtr^#cg0nvf=Tf&}!T+UJY4p{|DxaxdDay|y!khUQ?m`PWkuN-g~I!+-ltQ=KrY)sZFyZD$sm)Yo_zP$#rv<6P2gMa64V`t2(Kg_o5ep z?dfj48MKs~J`5ip_SI9{Vt#c+rUoQAXZ^2U#*C0Ph2qJbMKj}K|GE-(a!EVCbL<;_Bhl96KFfT^~C99Jp2@JPsrb}UVN_}<8RAE8 zV(~D2n>T2Q|1h7=YkPl%qMz>?48z!5iETWUNk5i<3pA=wCI}P{^W}2!xLs_kz6^{c zHo73m)*RAEl%3`GbRtq%VZzI*EH+=fYaF;~*G3~(_=*hZU%&wJm=QP7gFvuLDBaO^a6D zn$MnuD7~`If*QpZgB`K#R(KQW0u9>?MpfrM4~Ltox~QkSSD4j@t@XD;mYCh|Ta0)F zByfskV+VF=$3o8{kVTCn5*b_v$)fR zxBQ_K=G?lxX_9|}(?YWar8?xoH}w6^bH`S7fRCGQhHo)8u`GNoU?r$w;LteI=qqt0 z7FH+AzS8kMsKI^s^Zo8&*<@@WO55Kw?C&IDI#0`eG5N@bq9$&GFw;k)%6H4f9_9*# zpZ2QsOrhsES8ZU`1vRn*WTjcBTmsaZI|?FLON+JZ;>~~Z@qYUCKk|z|1=Yc5WVNqr8BzS ztp@VNQjmXGu3iHy^mcDMm6hCp9ry>YuJYx(9K&+{Xa1DG8faXi&B(EE-K2EgTIn7)oiR9Tuw8-ZYr9%1@PJli6(6-1*~1%*4%y1D(rKd%cfZ&#s$Af!o~G z`|Y6d9g(Cc@!esn(AsGzU^HeJieQ=177xGbnl^umDu@f(5Vw6eFp%xTUgw$Q$JM`k za&wZtXH zm(#~>ej(LZdBZ@4VvfUq$vzzQ_Q0UH*uFATs)k6Wm7O+W>g!m23JIaI>tyNhrS+G@ zy4!)!@K$5`2LN=q741OIZStJ}bUo*9A4nS$XE+l=Y%A$pET>{K zKxhB$-)j`?G+wPnHC9Fk+|~xx^#iOJzqng$RI%?$nS`w$w0Eziywkm*dJ}E6%fTM( zs8W>Q^r|&i=GMFQ+qcWS8`U325Y2Pp7|3^QsR{HA)vd7aR<;KG4%KSV@5K|IHQj$Y zaf-f(Ii^V)hPt#+KY7ZvVh0STeY3Fkt3ffT6pDFgMW@R#+ zI2sd2`S3M8s5bbzH;=5f+d6L#p`(%gbt&15kY3EPXT6Sm|JgX{!#kUh(vK+`Fz?0{ zdsVUH>v(2*Yy*AQj%T6rXx?hasm^~ZTO+TTFF(GZ)bz4q!KYr*_T_F}_Yfa?2X=|| z#khvRHpm`byE2Enw$sRXpV2^{?>M+rbZMv?k2*z5T|ccK!#&)h#hBJEDjCrYE0e!` zXXOpG*Oi7fvj3w-glveXKTu)mO8ov&ztJnmC#r@8Y=5*qRc+W_74hq==Y4;6^{=u8 zYES~J*N0TW4JKpdQNb(?-Ci2m0St=c@{JdVgD4=ITm4&jV2@M5r^xW6{$#kCzH>(9 zJ&wkvgJ(AZYYhWz&l<_I+TfwsP;~T|PS==eXj3R)HAQgSDsx1i#rg4f&&9IVl0HpN z(w;QWJ5hTjF`lTg6Mt_R$m)N&Nt&{7!PDXQ6b+t&+cabNWNpf?J`wjYaDDnV z+t#+zVE^PTpOn+v>EUG>Z}PDEIFiO5Roh|ifrzt+bfLPv&!cOIACTh#(gmv&w|vHR7aV)^&_^~WBcrAL2|D^L3FM47K| zmtqtHC-~}hB^F*|x$Ye|#CGu`ccA_URJ%7gYzSKDhyFnQj~4qOWV8O|Am+O@W1*uz z+)eRQk8o&hkMF0ecTjbWPY7DgIlPAlWo~J#y?j%r z9qac3Pw7KiKh00_WELFNnlr+!v{V%XZVipps|Ph<>l-^)ZtgVWTsGfP>ZQ1_FGYmK zq#w=7j-{K^{As$>t+Av%0A=BbCn9qj`ft>^Qm z3H67&2tR$BXd{GqJdbbvgDoSX zqx`*)%;p9#bnAcJ4lO8yspFd1O_$rfg8uZwWv>Nsi{&3CD7wRp)&j#;7ZfbsXiY4e zUBnCz4XKL~B)wZ#6XY1KW+!XY{`FE`g5b5BerS+=iQBgqDb|9aUbrbEQq8-De3Dww zgGRp_NtVogS)7&(KPy)YeR!$DMoX*h(ixxa1&fGjZsC8e&^~t&EJ3-atv7qk!Ns0l z=5V-6wRDi+Z0&qswf`?yn^yN@ZRgQp9#u9Som_n?!3kR5BTFtDA@9iiQs1a6jySX!j4ZB?X(i_~}H{rvF%{Do&Z^ zfl+ch-Rv8)Ivm;HaCiUoaJ#p81`s8ek{I#GI@D5Y@$NtEZ0tj$nyRB37{s1QK+UCY z6K8NzeO#$Z*>(fPDVH}}IFUk+(v6=$y6Fy)UI6I@k48W6YNo&Cg}nB8Jam zC)ma8pl$$ML@*a@_N1j6IhwET zT19(?okJ_@z4(9XCBEEL{?ViD&mV4=Plgtyz&#(h`G&*obh&hde7!x~>)mp?y@vv} zo@FhccRdxPmY|vf6iZc*SFTMmFM3TQXs$yZ@2RpAA%N^X~Y;x}7akGB^!OqUK zkrL=j1+^C`Vt!b^>(i(Jd*?)5-XKvZ`Knh1RNV;Jg>F>U{gPAJ84T5cTEOyGVuIV zZdZ#I#LCVQmx_=oP~R5&n@T)s~#;-WtX2qUy2F zVRahXxM*7NDFU9oQd2CT*77o1l>FQVVssG4ZMWEo6;KO7kXAlOMjq0R(>bh_0}{j^ z7bogXhDCHzm-d?nD1W?Nx~ve9Bi53wSREaMqS}V1&|YJ0-~aUe58wY_n^$B})Yhh? z3p;bL1k`8)`29vv3JxRPT3p_$S~$YbWh2a)BJ@p!7E??zNKH#@8ITr@N(H0(+ujxq z(6&tr+CJ6R@;3y^VlQPvRBf#g@a^yB)7|uf!q9xXefRd8_kRz|!T&&dRB^G|{^`~I zZufZc?YF=D^2_L#V6@)6{TAy7ioSA?JoQhnzVZVOne@tm*82PP`#-(H>g|W(zgOS= z59C>O=6`y1?R$e{k`26U5{#mOCw@)BQRaz-edK0%5s$oN;$@>K8${yQ1Qq_bXyIEl zA^wO?zx%t_mw!f_rj|sH=43ZkjcXy5U}1265G&u?mGc(?lI^R@3d<;Xu@E*5OanVA z0Pc~Pq3NUWqeX=4*VqMJ<#Q9=Wl-1OIHv0`hJcKmg1-sDOu+A%f*H4?1Xh>}NQ|mC zFc7Ri)}B-W_q()afkvC8Rw>#frKw^sCxGy$k?r9@0e_?z&9mf1t(Bu>MWcQfIZ>~0 zNJgxcZIlm-l7|WmZ=VDtZO2cQ8K6{UTKrdYy-sbkYB9MfLK^#KNIldq*g|cXv!^XW z_8vw*g)6PD{*@#7Pbfzk!+Nd&X*6bgHWV{)F)v*(EICVRij!I<292?$GVr3^ggH-a zv$?0#*njz(OyE^)yX3G8g{i%nHoP=^Wm9`HwylJVVrf8!LYW~Q&d?eZ<$w^MsN zE2DpPtRff9{o!6)c5}u6_6HJ?(^NN(0>i5Ht0`?ZMR6_h#gUpXikQv%yMncGbUjBU zerSM$b?^<5=PFHf*!EV-?ls-hXW>gH+S^v!JAZy(Yqr#PPfPz!$(ByKkv-h%@0-|9 zzlrUPl|viY!wuOtufK7;mV0jvwts%e=ZmR>Y%?AiABNJ`*Qa` zM4hLHp|{s^G^e8g|GxTIFX!v!#AsvjFR>L2^n!k5D-!BOf}pw6NG}+A&7H=2!N|20 zNq>wYEnk}I1>=@4&Gdqa^-De10B_5udIlo0mT&b;RNxe@3k77EU!edF$9<3hxY%L* zbGbJ3bBV*)=W>UU&*j>1&m|6{p35D^JeO-jyaeiDyvu@z(Jl)fhjovXL{M5ts*HR3rv*5x6*GT!KX-J0^

)d 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

CX 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 ADgXcg From 20d4f8573df463e1ae9f2c277209ba9213aeb568 Mon Sep 17 00:00:00 2001 From: ghiscoding Date: Wed, 24 Mar 2021 18:09:27 -0400 Subject: [PATCH 21/21] chore(deps): update few npm packages to latest --- .../webpack-demo-vanilla-bundle/package.json | 8 +- package.json | 4 +- packages/common/package.json | 2 +- packages/vanilla-bundle/package.json | 2 +- yarn.lock | 124 ++++++++++-------- 5 files changed, 76 insertions(+), 64 deletions(-) diff --git a/examples/webpack-demo-vanilla-bundle/package.json b/examples/webpack-demo-vanilla-bundle/package.json index dc6e14b15..cbd0fe412 100644 --- a/examples/webpack-demo-vanilla-bundle/package.json +++ b/examples/webpack-demo-vanilla-bundle/package.json @@ -38,8 +38,8 @@ "@types/node": "^14.14.35", "@types/webpack": "^4.41.26", "clean-webpack-plugin": "^3.0.0", - "copy-webpack-plugin": "^8.0.0", - "css-loader": "^5.1.3", + "copy-webpack-plugin": "^8.1.0", + "css-loader": "^5.2.0", "file-loader": "^6.2.0", "fork-ts-checker-webpack-plugin": "^6.2.0", "html-loader": "^2.1.2", @@ -52,8 +52,8 @@ "ts-loader": "^8.0.18", "ts-node": "^9.1.1", "url-loader": "^4.1.1", - "webpack": "^5.27.0", + "webpack": "^5.28.0", "webpack-cli": "^4.5.0", "webpack-dev-server": "^3.11.2" } -} +} \ No newline at end of file diff --git a/package.json b/package.json index 1af857b3b..7c8cb6347 100644 --- a/package.json +++ b/package.json @@ -52,8 +52,8 @@ "devDependencies": { "@types/jest": "^26.0.21", "@types/node": "^14.14.35", - "@typescript-eslint/eslint-plugin": "^4.18.0", - "@typescript-eslint/parser": "^4.18.0", + "@typescript-eslint/eslint-plugin": "^4.19.0", + "@typescript-eslint/parser": "^4.19.0", "cypress": "^6.8.0", "eslint": "^7.22.0", "eslint-plugin-import": "^2.22.1", diff --git a/packages/common/package.json b/packages/common/package.json index cb90609f0..5ab4ca9b5 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -65,7 +65,7 @@ "dequal": "^2.0.2", "dompurify": "^2.2.7", "flatpickr": "^4.6.9", - "jquery": "^3.5.1", + "jquery": "~3.5.1", "jquery-ui-dist": "^1.12.1", "moment-mini": "^2.24.0", "multiple-select-modified": "^1.3.11", diff --git a/packages/vanilla-bundle/package.json b/packages/vanilla-bundle/package.json index 0727d57f5..b6a3e82e0 100644 --- a/packages/vanilla-bundle/package.json +++ b/packages/vanilla-bundle/package.json @@ -63,6 +63,6 @@ "npm-run-all": "^4.1.5", "rimraf": "^3.0.2", "ts-loader": "^8.0.18", - "webpack": "^5.27.0" + "webpack": "^5.28.0" } } \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 485c28e25..db6c96515 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1823,13 +1823,13 @@ dependencies: "@types/yargs-parser" "*" -"@typescript-eslint/eslint-plugin@^4.18.0": - version "4.18.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.18.0.tgz#50fbce93211b5b690895d20ebec6fe8db48af1f6" - integrity sha512-Lzkc/2+7EoH7+NjIWLS2lVuKKqbEmJhtXe3rmfA8cyiKnZm3IfLf51irnBcmow8Q/AptVV0XBZmBJKuUJTe6cQ== +"@typescript-eslint/eslint-plugin@^4.19.0": + version "4.19.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.19.0.tgz#56f8da9ee118fe9763af34d6a526967234f6a7f0" + integrity sha512-CRQNQ0mC2Pa7VLwKFbrGVTArfdVDdefS+gTw0oC98vSI98IX5A8EVH4BzJ2FOB0YlCmm8Im36Elad/Jgtvveaw== dependencies: - "@typescript-eslint/experimental-utils" "4.18.0" - "@typescript-eslint/scope-manager" "4.18.0" + "@typescript-eslint/experimental-utils" "4.19.0" + "@typescript-eslint/scope-manager" "4.19.0" debug "^4.1.1" functional-red-black-tree "^1.0.1" lodash "^4.17.15" @@ -1837,60 +1837,60 @@ semver "^7.3.2" tsutils "^3.17.1" -"@typescript-eslint/experimental-utils@4.18.0": - version "4.18.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.18.0.tgz#ed6c955b940334132b17100d2917449b99a91314" - integrity sha512-92h723Kblt9JcT2RRY3QS2xefFKar4ZQFVs3GityOKWQYgtajxt/tuXIzL7sVCUlM1hgreiV5gkGYyBpdOwO6A== +"@typescript-eslint/experimental-utils@4.19.0": + version "4.19.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.19.0.tgz#9ca379919906dc72cb0fcd817d6cb5aa2d2054c6" + integrity sha512-9/23F1nnyzbHKuoTqFN1iXwN3bvOm/PRIXSBR3qFAYotK/0LveEOHr5JT1WZSzcD6BESl8kPOG3OoDRKO84bHA== dependencies: "@types/json-schema" "^7.0.3" - "@typescript-eslint/scope-manager" "4.18.0" - "@typescript-eslint/types" "4.18.0" - "@typescript-eslint/typescript-estree" "4.18.0" + "@typescript-eslint/scope-manager" "4.19.0" + "@typescript-eslint/types" "4.19.0" + "@typescript-eslint/typescript-estree" "4.19.0" eslint-scope "^5.0.0" eslint-utils "^2.0.0" -"@typescript-eslint/parser@^4.18.0": - version "4.18.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.18.0.tgz#a211edb14a69fc5177054bec04c95b185b4dde21" - integrity sha512-W3z5S0ZbecwX3PhJEAnq4mnjK5JJXvXUDBYIYGoweCyWyuvAKfGHvzmpUzgB5L4cRBb+cTu9U/ro66dx7dIimA== +"@typescript-eslint/parser@^4.19.0": + version "4.19.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.19.0.tgz#4ae77513b39f164f1751f21f348d2e6cb2d11128" + integrity sha512-/uabZjo2ZZhm66rdAu21HA8nQebl3lAIDcybUoOxoI7VbZBYavLIwtOOmykKCJy+Xq6Vw6ugkiwn8Js7D6wieA== dependencies: - "@typescript-eslint/scope-manager" "4.18.0" - "@typescript-eslint/types" "4.18.0" - "@typescript-eslint/typescript-estree" "4.18.0" + "@typescript-eslint/scope-manager" "4.19.0" + "@typescript-eslint/types" "4.19.0" + "@typescript-eslint/typescript-estree" "4.19.0" debug "^4.1.1" -"@typescript-eslint/scope-manager@4.18.0": - version "4.18.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.18.0.tgz#d75b55234c35d2ff6ac945758d6d9e53be84a427" - integrity sha512-olX4yN6rvHR2eyFOcb6E4vmhDPsfdMyfQ3qR+oQNkAv8emKKlfxTWUXU5Mqxs2Fwe3Pf1BoPvrwZtwngxDzYzQ== +"@typescript-eslint/scope-manager@4.19.0": + version "4.19.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.19.0.tgz#5e0b49eca4df7684205d957c9856f4e720717a4f" + integrity sha512-GGy4Ba/hLXwJXygkXqMzduqOMc+Na6LrJTZXJWVhRrSuZeXmu8TAnniQVKgj8uTRKe4igO2ysYzH+Np879G75g== dependencies: - "@typescript-eslint/types" "4.18.0" - "@typescript-eslint/visitor-keys" "4.18.0" + "@typescript-eslint/types" "4.19.0" + "@typescript-eslint/visitor-keys" "4.19.0" -"@typescript-eslint/types@4.18.0": - version "4.18.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.18.0.tgz#bebe323f81f2a7e2e320fac9415e60856267584a" - integrity sha512-/BRociARpj5E+9yQ7cwCF/SNOWwXJ3qhjurMuK2hIFUbr9vTuDeu476Zpu+ptxY2kSxUHDGLLKy+qGq2sOg37A== +"@typescript-eslint/types@4.19.0": + version "4.19.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.19.0.tgz#5181d5d2afd02e5b8f149ebb37ffc8bd7b07a568" + integrity sha512-A4iAlexVvd4IBsSTNxdvdepW0D4uR/fwxDrKUa+iEY9UWvGREu2ZyB8ylTENM1SH8F7bVC9ac9+si3LWNxcBuA== -"@typescript-eslint/typescript-estree@4.18.0": - version "4.18.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.18.0.tgz#756d3e61da8c16ab99185532c44872f4cd5538cb" - integrity sha512-wt4xvF6vvJI7epz+rEqxmoNQ4ZADArGQO9gDU+cM0U5fdVv7N+IAuVoVAoZSOZxzGHBfvE3XQMLdy+scsqFfeg== +"@typescript-eslint/typescript-estree@4.19.0": + version "4.19.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.19.0.tgz#8a709ffa400284ab72df33376df085e2e2f61147" + integrity sha512-3xqArJ/A62smaQYRv2ZFyTA+XxGGWmlDYrsfZG68zJeNbeqRScnhf81rUVa6QG4UgzHnXw5VnMT5cg75dQGDkA== dependencies: - "@typescript-eslint/types" "4.18.0" - "@typescript-eslint/visitor-keys" "4.18.0" + "@typescript-eslint/types" "4.19.0" + "@typescript-eslint/visitor-keys" "4.19.0" debug "^4.1.1" globby "^11.0.1" is-glob "^4.0.1" semver "^7.3.2" tsutils "^3.17.1" -"@typescript-eslint/visitor-keys@4.18.0": - version "4.18.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.18.0.tgz#4e6fe2a175ee33418318a029610845a81e2ff7b6" - integrity sha512-Q9t90JCvfYaN0OfFUgaLqByOfz8yPeTAdotn/XYNm5q9eHax90gzdb+RJ6E9T5s97Kv/UHWKERTmqA0jTKAEHw== +"@typescript-eslint/visitor-keys@4.19.0": + version "4.19.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.19.0.tgz#cbea35109cbd9b26e597644556be4546465d8f7f" + integrity sha512-aGPS6kz//j7XLSlgpzU2SeTqHPsmRYxFztj2vPuMMFJXZudpRSehE3WCV+BaxwZFvfAqMoSd86TEuM0PQ59E/A== dependencies: - "@typescript-eslint/types" "4.18.0" + "@typescript-eslint/types" "4.19.0" eslint-visitor-keys "^2.0.0" "@ungap/promise-all-settled@1.1.2": @@ -3552,14 +3552,14 @@ copy-descriptor@^0.1.0: resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= -copy-webpack-plugin@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-8.0.0.tgz#3db5efb80d492127507303d1842e35011e2f318f" - integrity sha512-sqGe2FsB67wV/De+sz5azQklADe4thN016od6m7iK9KbjrSc1SEgg5QZ0LN+jGx5aZR52CbuXbqOhoIbqzzXlA== +copy-webpack-plugin@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-8.1.0.tgz#0b53170db798ed301439536a02f2868ff63291a0" + integrity sha512-Soiq8kXI2AZkpw3dSp18u6oU2JonC7UKv3UdXsKOmT1A5QT46ku9+6c0Qy29JDbSavQJNN1/eKGpd3QNw+cZWg== dependencies: fast-glob "^3.2.5" glob-parent "^5.1.1" - globby "^11.0.2" + globby "^11.0.3" normalize-path "^3.0.0" p-limit "^3.1.0" schema-utils "^3.0.0" @@ -3673,10 +3673,10 @@ crypto-random-string@^2.0.0: resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== -css-loader@^5.1.3: - version "5.1.3" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-5.1.3.tgz#87f6fc96816b20debe3cf682f85c7e56a963d0d1" - integrity sha512-CoPZvyh8sLiGARK3gqczpfdedbM74klGWurF2CsNZ2lhNaXdLIUks+3Mfax3WBeRuHoglU+m7KG/+7gY6G4aag== +css-loader@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-5.2.0.tgz#a9ecda190500863673ce4434033710404efbff00" + integrity sha512-MfRo2MjEeLXMlUkeUwN71Vx5oc6EJnx5UQ4Yi9iUtYQvrPtwLUucYptz0hc6n++kdNcyF5olYBS4vPjJDAcLkw== dependencies: camelcase "^6.2.0" cssesc "^3.0.0" @@ -5491,7 +5491,7 @@ globals@^13.6.0: dependencies: type-fest "^0.20.2" -globby@^11.0.0, globby@^11.0.1, globby@^11.0.2: +globby@^11.0.0, globby@^11.0.1: version "11.0.2" resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.2.tgz#1af538b766a3b540ebfb58a32b2e2d5897321d83" integrity sha512-2ZThXDvvV8fYFRVIxnrMQBipZQDr7MxKAmQK1vujaj9/7eF0efG7BPUKJ7jP7G5SLF37xKDXvO4S/KKLj/Z0og== @@ -5503,6 +5503,18 @@ globby@^11.0.0, globby@^11.0.1, globby@^11.0.2: merge2 "^1.3.0" slash "^3.0.0" +globby@^11.0.3: + version "11.0.3" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.3.tgz#9b1f0cb523e171dd1ad8c7b2a9fb4b644b9593cb" + integrity sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.1.1" + ignore "^5.1.4" + merge2 "^1.3.0" + slash "^3.0.0" + globby@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" @@ -7032,7 +7044,7 @@ jquery-ui@>=1.8.0: resolved "https://registry.yarnpkg.com/jquery-ui/-/jquery-ui-1.12.1.tgz#bcb4045c8dd0539c134bc1488cdd3e768a7a9e51" integrity sha1-vLQEXI3QU5wTS8FIjN0+dop6nlE= -jquery@>=1.8.0, jquery@^3.5.1: +jquery@>=1.8.0, jquery@^3.5.1, jquery@~3.5.1: version "3.5.1" resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.5.1.tgz#d7b4d08e1bfdb86ad2f1a3d039ea17304717abb5" integrity sha512-XwIBPqcMn57FxfT+Go5pzySnm4KWkT1Tv7gjrpT1srtf8Weynl6R273VJ5GjkRb51IzMp5nbaPjJXMWeju2MKg== @@ -11805,10 +11817,10 @@ webpack-sources@^2.1.1: source-list-map "^2.0.1" source-map "^0.6.1" -webpack@^5.27.0: - version "5.27.1" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.27.1.tgz#6808fb6e45e35290cdb8ae43c7a10884839a3079" - integrity sha512-rxIDsPZ3Apl3JcqiemiLmWH+hAq04YeOXqvCxNZOnTp8ZgM9NEPtbu4CaMfMEf9KShnx/Ym8uLGmM6P4XnwCoA== +webpack@^5.28.0: + version "5.28.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.28.0.tgz#0de8bcd706186b26da09d4d1e8cbd3e4025a7c2f" + integrity sha512-1xllYVmA4dIvRjHzwELgW4KjIU1fW4PEuEnjsylz7k7H5HgPOctIq7W1jrt3sKH9yG5d72//XWzsHhfoWvsQVg== dependencies: "@types/eslint-scope" "^3.7.0" "@types/estree" "^0.0.46"