From 421441824a03984b98c0965a9af9117b7d7b664c Mon Sep 17 00:00:00 2001 From: Matthias Bohlen Date: Sun, 4 Nov 2018 18:15:29 +0100 Subject: [PATCH 01/41] Add Typescript types for Uppy's React components. --- packages/@uppy/react/src/CommonTypes.d.ts | 6 ++++ packages/@uppy/react/src/Dashboard.d.ts | 33 ++++++++++++++++++++ packages/@uppy/react/src/DashboardModal.d.ts | 16 ++++++++++ packages/@uppy/react/src/DragDrop.d.ts | 13 ++++++++ packages/@uppy/react/src/ProgressBar.d.ts | 13 ++++++++ packages/@uppy/react/src/StatusBar.d.ts | 14 +++++++++ packages/@uppy/react/types/index.d.ts | 7 +++++ 7 files changed, 102 insertions(+) create mode 100644 packages/@uppy/react/src/CommonTypes.d.ts create mode 100644 packages/@uppy/react/src/Dashboard.d.ts create mode 100644 packages/@uppy/react/src/DashboardModal.d.ts create mode 100644 packages/@uppy/react/src/DragDrop.d.ts create mode 100644 packages/@uppy/react/src/ProgressBar.d.ts create mode 100644 packages/@uppy/react/src/StatusBar.d.ts diff --git a/packages/@uppy/react/src/CommonTypes.d.ts b/packages/@uppy/react/src/CommonTypes.d.ts new file mode 100644 index 000000000..32917734d --- /dev/null +++ b/packages/@uppy/react/src/CommonTypes.d.ts @@ -0,0 +1,6 @@ +export { Uppy } from '../../core/types'; + +export interface Locale { + strings: { [index: string]: string }; + pluralize: (noun: string) => string; +} diff --git a/packages/@uppy/react/src/Dashboard.d.ts b/packages/@uppy/react/src/Dashboard.d.ts new file mode 100644 index 000000000..7fb048a08 --- /dev/null +++ b/packages/@uppy/react/src/Dashboard.d.ts @@ -0,0 +1,33 @@ +import { Uppy, Locale } from './CommonTypes'; + +interface MetaField { + id: string; + name: string; + placeholder?: string; +} + +export interface DashboardProps { + uppy: Uppy; + inline?: boolean; + plugins?: Array; + width?: number; + height?: number; + showProgressDetails?: boolean; + showLinkToFileUploadResult?: boolean; + hideUploadButton?: boolean; + hideProgressAfterFinish?: boolean; + note?: string; + metaFields?: Array; + proudlyDisplayPoweredByUppy?: boolean; + disableStatusBar?: boolean; + disableInformer?: boolean; + disableThumbnailGenerator?: boolean; + locale?: Locale; +} + +/** + * React Component that renders a Dashboard for an Uppy instance. This component + * renders the Dashboard inline; so you can put it anywhere you want. + */ +declare const Dashboard: React.ComponentType; +export default Dashboard; diff --git a/packages/@uppy/react/src/DashboardModal.d.ts b/packages/@uppy/react/src/DashboardModal.d.ts new file mode 100644 index 000000000..fa24fc2b4 --- /dev/null +++ b/packages/@uppy/react/src/DashboardModal.d.ts @@ -0,0 +1,16 @@ +import { DashboardProps } from './Dashboard'; + +export interface DashboardModalProps extends DashboardProps { + target?: HTMLElement; + open?: boolean; + onRequestClose?: VoidFunction; + closeModalOnClickOutside?: boolean; + disablePageScrollWhenModalOpen?: boolean; +} + +/** + * React Component that renders a Dashboard for an Uppy instance in a Modal + * dialog. Visibility of the Modal is toggled using the `open` prop. + */ +declare const DashboardModal: React.ComponentType; +export default DashboardModal; diff --git a/packages/@uppy/react/src/DragDrop.d.ts b/packages/@uppy/react/src/DragDrop.d.ts new file mode 100644 index 000000000..e8bb482af --- /dev/null +++ b/packages/@uppy/react/src/DragDrop.d.ts @@ -0,0 +1,13 @@ +import { Uppy, Locale } from './CommonTypes'; + +export interface DragDropProps { + uppy: Uppy; + locale?: Locale; +} + +/** + * React component that renders an area in which files can be dropped to be + * uploaded. + */ +declare const DragDrop: React.ComponentType; +export default DragDrop; diff --git a/packages/@uppy/react/src/ProgressBar.d.ts b/packages/@uppy/react/src/ProgressBar.d.ts new file mode 100644 index 000000000..11aa59483 --- /dev/null +++ b/packages/@uppy/react/src/ProgressBar.d.ts @@ -0,0 +1,13 @@ +import { Uppy } from './CommonTypes'; + +export interface ProgressBarProps { + uppy: Uppy; + fixed?: boolean; + hideAfterFinish?: boolean; +} + +/** + * React component that renders a progress bar at the top of the page. + */ +declare const ProgressBar: React.ComponentType; +export default ProgressBar; diff --git a/packages/@uppy/react/src/StatusBar.d.ts b/packages/@uppy/react/src/StatusBar.d.ts new file mode 100644 index 000000000..6404f0abe --- /dev/null +++ b/packages/@uppy/react/src/StatusBar.d.ts @@ -0,0 +1,14 @@ +import { Uppy } from './CommonTypes'; + +export interface StatusBarProps { + uppy: Uppy; + showProgressDetails?: boolean; + hideAfterFinish?: boolean; +} + +/** + * React component that renders a status bar containing upload progress and speed, + * processing progress and pause/resume/cancel controls. + */ +declare const StatusBar: React.ComponentType; +export default StatusBar; diff --git a/packages/@uppy/react/types/index.d.ts b/packages/@uppy/react/types/index.d.ts index e69de29bb..f18ba1f20 100644 --- a/packages/@uppy/react/types/index.d.ts +++ b/packages/@uppy/react/types/index.d.ts @@ -0,0 +1,7 @@ +import * as React from 'react'; + +export { default as Dashboard } from '../src/Dashboard'; +export { default as DashboardModal } from '../src/DashboardModal'; +export { default as DragDrop } from '../src/DragDrop'; +export { default as ProgressBar } from '../src/ProgressBar'; +export { default as StatusBar } from '../src/StatusBar'; From fde32fff48ead1dc2a5f86383a693c12d5c239db Mon Sep 17 00:00:00 2001 From: Matthias Bohlen Date: Sun, 4 Nov 2018 18:19:39 +0100 Subject: [PATCH 02/41] Replace Typescript "export default" by "export =" ... ...because the *real* Javascript code has module.exports = ; instead of module.exports.default = ; --- .../@uppy/aws-s3-multipart/types/index.d.ts | 42 ++++++++++--------- packages/@uppy/webcam/types/index.d.ts | 29 +++++++------ 2 files changed, 40 insertions(+), 31 deletions(-) diff --git a/packages/@uppy/aws-s3-multipart/types/index.d.ts b/packages/@uppy/aws-s3-multipart/types/index.d.ts index 6cb826d6d..8152ed76c 100644 --- a/packages/@uppy/aws-s3-multipart/types/index.d.ts +++ b/packages/@uppy/aws-s3-multipart/types/index.d.ts @@ -1,28 +1,32 @@ import { Plugin, PluginOptions, Uppy, UppyFile } from '@uppy/core'; -export interface AwsS3Part { - PartNumber: number; - Size: number; - ETag: string; +declare module AwsS3Multipart { + interface AwsS3Part { + PartNumber?: number; + Size?: number; + ETag?: string; + } + + interface AwsS3MultipartOptions extends PluginOptions { + serverUrl: string; + createMultipartUpload(file: UppyFile): Promise<{ uploadId: string, key: string }>; + listParts(file: UppyFile, opts: { uploadId: string, key: string }): Promise; + prepareUploadPart(file: UppyFile, partData: { uploadId: string, key: string, body: Blob, number: number }): Promise<{ url: string }>; + abortMultipartUpload(file: UppyFile, opts: { uploadId: string, key: string }): Promise; + completeMultipartUpload(file: UppyFile, opts: { uploadId: string, key: string, parts: AwsS3Part[] }): Promise<{ location?: string }>; + timeout: number; + limit: number; + } } -export interface AwsS3MultipartOptions extends PluginOptions { - serverUrl: string; - createMultipartUpload(file: UppyFile): Promise<{uploadId: string, key: string}>; - listParts(file: UppyFile, opts: {uploadId: string, key: string}): Promise; - prepareUploadPart(file: UppyFile, partData: {uploadId: string, key: string, body: Blob, number: number}): Promise<{url: string}>; - abortMultipartUpload(file: UppyFile, opts: {uploadId: string, key: string}): Promise; - completeMultipartUpload(file: UppyFile, opts: {uploadId: string, key: string, parts: AwsS3Part[]}): Promise<{location?: string}>; - timeout: number; - limit: number; +declare class AwsS3Multipart extends Plugin { + constructor(uppy: Uppy, opts: Partial); } -export default class AwsS3Multipart extends Plugin { - constructor(uppy: Uppy, opts: Partial); -} +export = AwsS3Multipart; declare module '@uppy/core' { - export interface Uppy { - use(pluginClass: typeof AwsS3Multipart, opts: Partial): Uppy; - } + export interface Uppy { + use(pluginClass: typeof AwsS3Multipart, opts: Partial): Uppy; + } } diff --git a/packages/@uppy/webcam/types/index.d.ts b/packages/@uppy/webcam/types/index.d.ts index a35288dfd..d33f50148 100644 --- a/packages/@uppy/webcam/types/index.d.ts +++ b/packages/@uppy/webcam/types/index.d.ts @@ -1,21 +1,26 @@ import { Plugin, PluginOptions, Uppy } from '@uppy/core'; -export type WebcamMode = 'video-audio' | 'video-only' | 'audio-only' | 'picture'; +declare module Webcam { -export interface WebcamOptions extends PluginOptions { - onBeforeSnapshot?: () => Promise; - countdown?: number | boolean; - mirror?: boolean; - facingMode?: string; - modes: WebcamMode[]; + export type WebcamMode = 'video-audio' | 'video-only' | 'audio-only' | 'picture'; + + export interface WebcamOptions extends PluginOptions { + onBeforeSnapshot?: () => Promise; + countdown?: number | boolean; + mirror?: boolean; + facingMode?: string; + modes: WebcamMode[]; + } } -export default class Webcam extends Plugin { - constructor(uppy: Uppy, opts: Partial); +declare class Webcam extends Plugin { + constructor(uppy: Uppy, opts: Partial); } +export = Webcam; + declare module '@uppy/core' { - export interface Uppy { - use(pluginClass: typeof Webcam, opts: Partial): Uppy; - } + export interface Uppy { + use(pluginClass: typeof Webcam, opts: Partial): Uppy; + } } From 006f86cffc449f19ee98d49c4b31363bb05e0333 Mon Sep 17 00:00:00 2001 From: Matthias Bohlen Date: Sun, 4 Nov 2018 18:21:14 +0100 Subject: [PATCH 03/41] Removed one non-existing option, added one that was missing. --- packages/@uppy/core/types/index.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/@uppy/core/types/index.d.ts b/packages/@uppy/core/types/index.d.ts index 4e6675878..0b1f3b9ad 100644 --- a/packages/@uppy/core/types/index.d.ts +++ b/packages/@uppy/core/types/index.d.ts @@ -81,8 +81,8 @@ interface Locale { export interface UppyOptions { id: string; autoProceed: boolean; + allowMultipleUploads: boolean; debug: boolean; - showLinkToFileUploadResult: boolean; restrictions: { maxFileSize: number | null; maxNumberOfFiles: number | null; From fce440ae9a7ebeec4ad23bfb1664c05c6e1ff2cc Mon Sep 17 00:00:00 2001 From: Matthias Bohlen Date: Sun, 4 Nov 2018 19:20:47 +0100 Subject: [PATCH 04/41] Add missing dev dependency '@types/react'. --- package-lock.json | 60 ++++++++++++++++++++++++++++++----------------- package.json | 1 + 2 files changed, 40 insertions(+), 21 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0cffa29ca..a3f60646d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1493,9 +1493,9 @@ "integrity": "sha1-yRNQTT3CgQr61VW1ma6uwsxMZ2g=" }, "@types/aws-lambda": { - "version": "8.10.14", - "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.14.tgz", - "integrity": "sha512-dBVxru7n7Q2oYDR1wEqqIEizrb2p1IQ0Rz0sxsiY6FLfx65JuU8kS58PGnAf4KUcM4QURyMq2sTPA01wR6y/Ig==" + "version": "8.10.15", + "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.15.tgz", + "integrity": "sha512-C8yoqVslZ0CxQBTsBIBzAlG+JfevToteoJxzqvYSWGUcnw3oBu05Pe2P/I4hg3udR9qpsCJowXA65L9NYnJbrA==" }, "@types/aws-serverless-express": { "version": "3.3.0", @@ -1523,7 +1523,7 @@ }, "@types/compression": { "version": "0.0.36", - "resolved": "https://registry.npmjs.org/@types/compression/-/compression-0.0.36.tgz", + "resolved": "http://registry.npmjs.org/@types/compression/-/compression-0.0.36.tgz", "integrity": "sha512-B66iZCIcD2eB2F8e8YDIVtCUKgfiseOR5YOIbmMN2tM57Wu55j1xSdxdSw78aVzsPmbZ6G+hINc+1xe1tt4NBg==", "requires": { "@types/express": "*" @@ -1565,7 +1565,7 @@ }, "@types/events": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@types/events/-/events-1.2.0.tgz", + "resolved": "http://registry.npmjs.org/@types/events/-/events-1.2.0.tgz", "integrity": "sha512-KEIlhXnIutzKwRbQkGWb/I4HFqBuUykAdHgDED6xqwXJfONCjF5VoE0cXEiurh3XauygxzeDzgtXUqvLkxFzzA==" }, "@types/express": { @@ -1658,11 +1658,27 @@ "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.25.tgz", "integrity": "sha512-WXvAXaknB0c2cJ7N44e1kUrVu5K90mSfPPaT5XxfuSMxEWva86EYIwxUZM3jNZ2P1CIC9e2z4WJqpAF69PQxeA==" }, + "@types/prop-types": { + "version": "15.5.6", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.5.6.tgz", + "integrity": "sha512-ZBFR7TROLVzCkswA3Fmqq+IIJt62/T7aY/Dmz+QkU7CaW2QFqAitCE8Ups7IzmGhcN1YWMBT4Qcoc07jU9hOJQ==", + "dev": true + }, "@types/range-parser": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.2.tgz", "integrity": "sha512-HtKGu+qG1NPvYe1z7ezLsyIaXYyi8SoAVqWDZgDQ8dLrsZvSzUNCwZyfX33uhWxL/SU0ZDQZ3nwZ0nimt507Kw==" }, + "@types/react": { + "version": "16.4.18", + "resolved": "https://registry.npmjs.org/@types/react/-/react-16.4.18.tgz", + "integrity": "sha512-eFzJKEg6pdeaukVLVZ8Xb79CTl/ysX+ExmOfAAqcFlCCK5TgFDD9kWR0S18sglQ3EmM8U+80enjUqbfnUyqpdA==", + "dev": true, + "requires": { + "@types/prop-types": "*", + "csstype": "^2.2.0" + } + }, "@types/redis": { "version": "2.8.7", "resolved": "https://registry.npmjs.org/@types/redis/-/redis-2.8.7.tgz", @@ -1692,9 +1708,9 @@ } }, "@types/tough-cookie": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-2.3.3.tgz", - "integrity": "sha512-MDQLxNFRLasqS4UlkWMSACMKeSm1x4Q3TxzUC7KQUsh6RK1ZrQ0VEyE3yzXcBu+K8ejVj4wuX32eUG02yNp+YQ==" + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-2.3.4.tgz", + "integrity": "sha512-Set5ZdrAaKI/qHdFlVMgm/GsAv/wkXhSTuZFkJ+JI7HK+wIkIlOaUXSXieIvJ0+OvGIqtREFoE+NHJtEq0gtEw==" }, "@types/tus-js-client": { "version": "1.4.1", @@ -2447,9 +2463,9 @@ } }, "aws-sdk": { - "version": "2.344.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.344.0.tgz", - "integrity": "sha512-VGiVgX4+qk/67o8GL3qeHK1KC4r73jlsJoE6ZSPsujX6UjP0PgrfUL1J9cdW/sgXc0lzmK3ksdKqZordFZ4/xw==", + "version": "2.348.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.348.0.tgz", + "integrity": "sha512-TfguapuOAwk7EG8zhYJPjkCaF4tyGjfgcXLkYbWbuS4O6E8pn0x2K5Yt1KXwLiWxG0fzKCLiiaNA5H7bKAP4YQ==", "requires": { "buffer": "4.9.1", "events": "1.1.1", @@ -6831,6 +6847,12 @@ "cssom": "0.3.x" } }, + "csstype": { + "version": "2.5.7", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.5.7.tgz", + "integrity": "sha512-Nt5VDyOTIIV4/nRFswoCKps1R5CD1hkiyjBE9/thNaNZILLEviVw9yWQw15+O+CpNjQKB/uvdcxFFOrSflY3Yw==", + "dev": true + }, "cuid": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/cuid/-/cuid-2.1.4.tgz", @@ -8948,7 +8970,7 @@ }, "events": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "resolved": "http://registry.npmjs.org/events/-/events-1.1.1.tgz", "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" }, "evp_bytestokey": { @@ -10100,14 +10122,12 @@ "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "optional": true + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -10127,8 +10147,7 @@ "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "optional": true + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, "console-control-strings": { "version": "1.1.0", @@ -10276,7 +10295,6 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -21007,7 +21025,7 @@ }, "serialize-error": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-2.1.0.tgz", + "resolved": "http://registry.npmjs.org/serialize-error/-/serialize-error-2.1.0.tgz", "integrity": "sha1-ULZ51WNc34Rme9yOWa9OW4HV9go=" }, "serve-index": { @@ -23579,7 +23597,7 @@ }, "uuid": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.2.tgz", + "resolved": "http://registry.npmjs.org/uuid/-/uuid-2.0.2.tgz", "integrity": "sha1-SL1WmPBnfjx5AaHEbvFbFkN5RyY=" }, "v8flags": { @@ -24933,7 +24951,7 @@ }, "xmlbuilder": { "version": "9.0.7", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", + "resolved": "http://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=" }, "xmlhttprequest": { diff --git a/package.json b/package.json index 2fb9bbb83..bea9b45af 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,7 @@ "pre-commit": "lint-staged", "license": "MIT", "devDependencies": { + "@types/react": "^16.4.18", "aliasify": "^2.1.0", "autoprefixer": "^7.2.6", "babel-cli": "^6.26.0", From ff5422a4171edd094dcfc6624663129fb37934de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9e=20Kooi?= Date: Mon, 12 Nov 2018 11:59:43 +0100 Subject: [PATCH 05/41] Use createCipheriv instead of deprecated createCipher. --- .../companion/src/server/helpers/utils.js | 50 ++++++++++++++++--- 1 file changed, 44 insertions(+), 6 deletions(-) diff --git a/packages/@uppy/companion/src/server/helpers/utils.js b/packages/@uppy/companion/src/server/helpers/utils.js index 70e075ce5..478d68c9c 100644 --- a/packages/@uppy/companion/src/server/helpers/utils.js +++ b/packages/@uppy/companion/src/server/helpers/utils.js @@ -93,20 +93,58 @@ module.exports.getURLBuilder = (options) => { } /** + * Ensure that a user-provided `secret` is 32 bytes long (the length required + * for an AES256 key) by hashing it with SHA256. * - * @param {*} input - * @param {string} secret + * @param {string|Buffer} secret + */ +function createSecret (secret) { + const hash = crypto.createHash('sha256') + hash.update(secret) + return hash.digest() +} + +/** + * Create an initialization vector for AES256. + * + * @return {Buffer} + */ +function createIv () { + return crypto.randomBytes(16) +} + +/** + * Encrypt a buffer or string with AES256 and a random iv. + * + * @param {string} input + * @param {string|Buffer} secret + * @return {string} Ciphertext as a hex string, prefixed with 32 hex characters containing the iv. */ module.exports.encrypt = (input, secret) => { - const cipher = crypto.createCipher('aes256', secret) - let encrypted = cipher.update(input, 'utf8', 'hex') + const iv = createIv() + const cipher = crypto.createCipheriv('aes256', createSecret(secret), iv) + let encrypted = iv.toString('hex') + encrypted += cipher.update(input, 'utf8', 'hex') encrypted += cipher.final('hex') return encrypted } +/** + * Decrypt an iv-prefixed or string with AES256. The iv should be in the first 32 hex characters. + * + * @param {string} encrypted + * @param {string|Buffer} secret + * @return {string} Decrypted value. + */ module.exports.decrypt = (encrypted, secret) => { - var decipher = crypto.createDecipher('aes256', secret) - var decrypted = decipher.update(encrypted, 'hex', 'utf8') + // Need at least 32 chars for the iv + if (encrypted.length < 32) { + throw new Error('Invalid encrypted value. Maybe it was generated with an old Companion version?') + } + + const iv = Buffer.from(encrypted.slice(0, 32), 'hex') + const decipher = crypto.createDecipheriv('aes256', createSecret(secret), iv) + let decrypted = decipher.update(encrypted.slice(32), 'hex', 'utf8') decrypted += decipher.final('utf8') return decrypted } From c8cb89bde08d95b600414a22e2f62d540b223eff Mon Sep 17 00:00:00 2001 From: Matthias Bohlen Date: Mon, 12 Nov 2018 12:05:54 +0100 Subject: [PATCH 06/41] Convert to "export =" everywhere because... ...the *.js source files use "module.exports = " instead of "export default". --- .../@uppy/aws-s3-multipart/types/index.d.ts | 38 ++++++------- packages/@uppy/aws-s3/types/index.d.ts | 32 ++++++----- packages/@uppy/dashboard/types/index.d.ts | 50 +++++++++-------- packages/@uppy/drag-drop/types/index.d.ts | 22 ++++---- packages/@uppy/dropbox/types/index.d.ts | 16 +++--- packages/@uppy/file-input/types/index.d.ts | 16 +++--- packages/@uppy/form/types/index.d.ts | 22 ++++---- .../@uppy/golden-retriever/types/index.d.ts | 18 ++++--- packages/@uppy/google-drive/types/index.d.ts | 16 +++--- packages/@uppy/informer/types/index.d.ts | 26 +++++---- packages/@uppy/instagram/types/index.d.ts | 16 +++--- packages/@uppy/progress-bar/types/index.d.ts | 16 +++--- .../@uppy/redux-dev-tools/types/index.d.ts | 12 +++-- packages/@uppy/status-bar/types/index.d.ts | 18 ++++--- packages/@uppy/store-default/types/index.d.ts | 3 +- packages/@uppy/store-redux/types/index.d.ts | 9 +++- .../thumbnail-generator/types/index.d.ts | 14 +++-- packages/@uppy/transloadit/types/index.d.ts | 54 ++++++++++--------- packages/@uppy/tus/types/index.d.ts | 24 +++++---- packages/@uppy/url/types/index.d.ts | 16 +++--- packages/@uppy/xhr-upload/types/index.d.ts | 32 ++++++----- 21 files changed, 275 insertions(+), 195 deletions(-) diff --git a/packages/@uppy/aws-s3-multipart/types/index.d.ts b/packages/@uppy/aws-s3-multipart/types/index.d.ts index 8152ed76c..f3c9f02a0 100644 --- a/packages/@uppy/aws-s3-multipart/types/index.d.ts +++ b/packages/@uppy/aws-s3-multipart/types/index.d.ts @@ -1,32 +1,32 @@ import { Plugin, PluginOptions, Uppy, UppyFile } from '@uppy/core'; declare module AwsS3Multipart { - interface AwsS3Part { - PartNumber?: number; - Size?: number; - ETag?: string; - } + interface AwsS3Part { + PartNumber?: number; + Size?: number; + ETag?: string; + } - interface AwsS3MultipartOptions extends PluginOptions { - serverUrl: string; - createMultipartUpload(file: UppyFile): Promise<{ uploadId: string, key: string }>; - listParts(file: UppyFile, opts: { uploadId: string, key: string }): Promise; - prepareUploadPart(file: UppyFile, partData: { uploadId: string, key: string, body: Blob, number: number }): Promise<{ url: string }>; - abortMultipartUpload(file: UppyFile, opts: { uploadId: string, key: string }): Promise; - completeMultipartUpload(file: UppyFile, opts: { uploadId: string, key: string, parts: AwsS3Part[] }): Promise<{ location?: string }>; - timeout: number; - limit: number; - } + interface AwsS3MultipartOptions extends PluginOptions { + serverUrl: string; + createMultipartUpload(file: UppyFile): Promise<{ uploadId: string, key: string }>; + listParts(file: UppyFile, opts: { uploadId: string, key: string }): Promise; + prepareUploadPart(file: UppyFile, partData: { uploadId: string, key: string, body: Blob, number: number }): Promise<{ url: string }>; + abortMultipartUpload(file: UppyFile, opts: { uploadId: string, key: string }): Promise; + completeMultipartUpload(file: UppyFile, opts: { uploadId: string, key: string, parts: AwsS3Part[] }): Promise<{ location?: string }>; + timeout: number; + limit: number; + } } declare class AwsS3Multipart extends Plugin { - constructor(uppy: Uppy, opts: Partial); + constructor(uppy: Uppy, opts: Partial); } export = AwsS3Multipart; declare module '@uppy/core' { - export interface Uppy { - use(pluginClass: typeof AwsS3Multipart, opts: Partial): Uppy; - } + export interface Uppy { + use(pluginClass: typeof AwsS3Multipart, opts: Partial): Uppy; + } } diff --git a/packages/@uppy/aws-s3/types/index.d.ts b/packages/@uppy/aws-s3/types/index.d.ts index 749995000..2d06599b8 100644 --- a/packages/@uppy/aws-s3/types/index.d.ts +++ b/packages/@uppy/aws-s3/types/index.d.ts @@ -1,25 +1,29 @@ import { Plugin, PluginOptions, Uppy, UppyFile } from '@uppy/core'; -export interface AwsS3UploadParameters { - method?: string; - url: string; - fields?: { [type: string]: string }; - headers?: { [type: string]: string }; +declare module AwsS3 { + interface AwsS3UploadParameters { + method?: string; + url: string; + fields?: { [type: string]: string }; + headers?: { [type: string]: string }; + } + + interface AwsS3Options extends PluginOptions { + serverUrl: string; + getUploadParameters(file: UppyFile): Promise; + timeout: number; + limit: number; + } } -export interface AwsS3Options extends PluginOptions { - serverUrl: string; - getUploadParameters(file: UppyFile): Promise; - timeout: number; - limit: number; +declare class AwsS3 extends Plugin { + constructor(uppy: Uppy, opts: Partial); } -export default class AwsS3 extends Plugin { - constructor(uppy: Uppy, opts: Partial); -} +export = AwsS3; declare module '@uppy/core' { export interface Uppy { - use(pluginClass: typeof AwsS3, opts: Partial): Uppy; + use(pluginClass: typeof AwsS3, opts: Partial): Uppy; } } diff --git a/packages/@uppy/dashboard/types/index.d.ts b/packages/@uppy/dashboard/types/index.d.ts index 3879623c2..6722be375 100644 --- a/packages/@uppy/dashboard/types/index.d.ts +++ b/packages/@uppy/dashboard/types/index.d.ts @@ -1,29 +1,31 @@ import { Plugin, PluginOptions, Uppy } from '@uppy/core'; -export interface DashboardOptions extends PluginOptions { - onRequestCloseModal: () => void; - disablePageScrollWhenModalOpen: boolean; - closeModalOnClickOutside: boolean; - trigger: string | HTMLElement; - inline: boolean; - defaultTabIcon: string; - hideUploadButton: boolean; - width: string | number; - height: string | number; - note: string; - showLinkToFileUploadResult: boolean; - proudlyDisplayPoweredByUppy: boolean; - metaFields: string[]; - plugins: string[]; - disableStatusBar: boolean; - showProgressDetails: boolean; - hideProgressAfterFinish: boolean; - disableInformer: boolean; - disableThumbnailGenerator: boolean; +declare module Dashboard { + interface DashboardOptions extends PluginOptions { + onRequestCloseModal: () => void; + disablePageScrollWhenModalOpen: boolean; + closeModalOnClickOutside: boolean; + trigger: string | HTMLElement; + inline: boolean; + defaultTabIcon: string; + hideUploadButton: boolean; + width: string | number; + height: string | number; + note: string; + showLinkToFileUploadResult: boolean; + proudlyDisplayPoweredByUppy: boolean; + metaFields: string[]; + plugins: string[]; + disableStatusBar: boolean; + showProgressDetails: boolean; + hideProgressAfterFinish: boolean; + disableInformer: boolean; + disableThumbnailGenerator: boolean; + } } -export default class Dashboard extends Plugin { - constructor(uppy: Uppy, opts: Partial); +declare class Dashboard extends Plugin { + constructor(uppy: Uppy, opts: Partial); addTarget(plugin: Plugin): HTMLElement; hideAllPanels(): void; openModal(): void; @@ -34,8 +36,10 @@ export default class Dashboard extends Plugin { uninstall(): void; } +export = Dashboard; + declare module '@uppy/core' { export interface Uppy { - use(pluginClass: typeof Dashboard, opts: Partial): Uppy; + use(pluginClass: typeof Dashboard, opts: Partial): Uppy; } } diff --git a/packages/@uppy/drag-drop/types/index.d.ts b/packages/@uppy/drag-drop/types/index.d.ts index 8879ec7dc..d1cb46593 100644 --- a/packages/@uppy/drag-drop/types/index.d.ts +++ b/packages/@uppy/drag-drop/types/index.d.ts @@ -1,19 +1,23 @@ import { Plugin, PluginOptions, Uppy } from '@uppy/core'; -export interface DragDropOptions extends PluginOptions { - inputName: string; - allowMultipleFiles: boolean; - width: string; - height: string; - note: string; +declare module DragDrop { + interface DragDropOptions extends PluginOptions { + inputName: string; + allowMultipleFiles: boolean; + width: string; + height: string; + note: string; + } } -export default class DragDrop extends Plugin { - constructor(uppy: Uppy, opts: Partial); +declare class DragDrop extends Plugin { + constructor(uppy: Uppy, opts: Partial); } +export = DragDrop; + declare module '@uppy/core' { export interface Uppy { - use(pluginClass: typeof DragDrop, opts: Partial): Uppy; + use(pluginClass: typeof DragDrop, opts: Partial): Uppy; } } diff --git a/packages/@uppy/dropbox/types/index.d.ts b/packages/@uppy/dropbox/types/index.d.ts index daa51b743..8849c2ee1 100644 --- a/packages/@uppy/dropbox/types/index.d.ts +++ b/packages/@uppy/dropbox/types/index.d.ts @@ -1,17 +1,21 @@ import { Plugin, PluginOptions, Uppy } from '@uppy/core'; import { ProviderOptions } from '@uppy/companion-client'; -export interface DropboxOptions extends PluginOptions, ProviderOptions { - serverUrl: string; - serverPattern: string | RegExp | Array; +declare module Dropbox { + interface DropboxOptions extends PluginOptions, ProviderOptions { + serverUrl: string; + serverPattern: string | RegExp | Array; + } } -export default class Dropbox extends Plugin { - constructor(uppy: Uppy, opts: Partial); +declare class Dropbox extends Plugin { + constructor(uppy: Uppy, opts: Partial); } +export = Dropbox; + declare module '@uppy/core' { export interface Uppy { - use(pluginClass: typeof Dropbox, opts: Partial): Uppy; + use(pluginClass: typeof Dropbox, opts: Partial): Uppy; } } diff --git a/packages/@uppy/file-input/types/index.d.ts b/packages/@uppy/file-input/types/index.d.ts index 84419e70c..a81067060 100644 --- a/packages/@uppy/file-input/types/index.d.ts +++ b/packages/@uppy/file-input/types/index.d.ts @@ -1,16 +1,20 @@ import { Plugin, PluginOptions, Uppy } from '@uppy/core'; -export interface FileInputOptions extends PluginOptions { - pretty: boolean; - inputName: string; +declare module FileInput { + interface FileInputOptions extends PluginOptions { + pretty: boolean; + inputName: string; + } } -export default class FileInput extends Plugin { - constructor(uppy: Uppy, opts: Partial); +declare class FileInput extends Plugin { + constructor(uppy: Uppy, opts: Partial); } +export = FileInput; + declare module '@uppy/core' { export interface Uppy { - use(pluginClass: typeof FileInput, opts: Partial): Uppy; + use(pluginClass: typeof FileInput, opts: Partial): Uppy; } } diff --git a/packages/@uppy/form/types/index.d.ts b/packages/@uppy/form/types/index.d.ts index 8170f6262..1a84ad0a5 100644 --- a/packages/@uppy/form/types/index.d.ts +++ b/packages/@uppy/form/types/index.d.ts @@ -1,19 +1,23 @@ import { Plugin, PluginOptions, Uppy } from '@uppy/core'; -export interface FormOptions extends PluginOptions { - getMetaFromForm: boolean; - addResultToForm: boolean; - submitOnSuccess: boolean; - triggerUploadOnSubmit: boolean; - resultName: string; +declare module Form { + interface FormOptions extends PluginOptions { + getMetaFromForm: boolean; + addResultToForm: boolean; + submitOnSuccess: boolean; + triggerUploadOnSubmit: boolean; + resultName: string; + } } -export default class Form extends Plugin { - constructor(uppy: Uppy, opts: Partial); +declare class Form extends Plugin { + constructor(uppy: Uppy, opts: Partial); } +export = Form; + declare module '@uppy/core' { export interface Uppy { - use(pluginClass: typeof Form, opts: Partial): Uppy; + use(pluginClass: typeof Form, opts: Partial): Uppy; } } diff --git a/packages/@uppy/golden-retriever/types/index.d.ts b/packages/@uppy/golden-retriever/types/index.d.ts index 3a0465679..ed02a30cf 100644 --- a/packages/@uppy/golden-retriever/types/index.d.ts +++ b/packages/@uppy/golden-retriever/types/index.d.ts @@ -1,17 +1,21 @@ import { Plugin, PluginOptions, Uppy } from '@uppy/core'; -export interface GoldenRetrieverOptions extends PluginOptions { - expires: number; - serviceWorker: boolean; - indexedDB: any; +declare module GoldenRetriever { + interface GoldenRetrieverOptions extends PluginOptions { + expires: number; + serviceWorker: boolean; + indexedDB: any; + } } -export default class GoldenRetriever extends Plugin { - constructor(uppy: Uppy, opts: Partial); +declare class GoldenRetriever extends Plugin { + constructor(uppy: Uppy, opts: Partial); } +export = GoldenRetriever; + declare module '@uppy/core' { export interface Uppy { - use(pluginClass: typeof GoldenRetriever, opts: Partial): Uppy; + use(pluginClass: typeof GoldenRetriever, opts: Partial): Uppy; } } diff --git a/packages/@uppy/google-drive/types/index.d.ts b/packages/@uppy/google-drive/types/index.d.ts index 2c3c93af9..787ddbca6 100644 --- a/packages/@uppy/google-drive/types/index.d.ts +++ b/packages/@uppy/google-drive/types/index.d.ts @@ -1,17 +1,21 @@ import { Plugin, PluginOptions, Uppy } from '@uppy/core'; import { ProviderOptions } from '@uppy/companion-client'; -export interface GoogleDriveOptions extends PluginOptions, ProviderOptions { - serverUrl: string; - serverPattern: string | RegExp | Array; +declare module GoogleDrive { + interface GoogleDriveOptions extends PluginOptions, ProviderOptions { + serverUrl: string; + serverPattern: string | RegExp | Array; + } } -export default class GoogleDrive extends Plugin { - constructor(uppy: Uppy, opts: Partial); +declare class GoogleDrive extends Plugin { + constructor(uppy: Uppy, opts: Partial); } +export = GoogleDrive; + declare module '@uppy/core' { export interface Uppy { - use(pluginClass: typeof GoogleDrive, opts: Partial): Uppy; + use(pluginClass: typeof GoogleDrive, opts: Partial): Uppy; } } diff --git a/packages/@uppy/informer/types/index.d.ts b/packages/@uppy/informer/types/index.d.ts index 5ef445cb6..b85f7a32c 100644 --- a/packages/@uppy/informer/types/index.d.ts +++ b/packages/@uppy/informer/types/index.d.ts @@ -1,22 +1,26 @@ import { Plugin, PluginOptions, Uppy } from '@uppy/core'; -interface Color { - bg: string | number; - text: string | number; +declare module Informer { + interface Color { + bg: string | number; + text: string | number; + } + + interface InformerOptions extends PluginOptions { + typeColors: { + [type: string]: Color + }; + } } -export interface InformerOptions extends PluginOptions { - typeColors: { - [type: string]: Color - }; +declare class Informer extends Plugin { + constructor(uppy: Uppy, opts: Partial); } -export default class Informer extends Plugin { - constructor(uppy: Uppy, opts: Partial); -} +export = Informer; declare module '@uppy/core' { export interface Uppy { - use(pluginClass: typeof Informer, opts: Partial): Uppy; + use(pluginClass: typeof Informer, opts: Partial): Uppy; } } diff --git a/packages/@uppy/instagram/types/index.d.ts b/packages/@uppy/instagram/types/index.d.ts index c3ee2c819..ae3b06289 100644 --- a/packages/@uppy/instagram/types/index.d.ts +++ b/packages/@uppy/instagram/types/index.d.ts @@ -1,17 +1,21 @@ import { Plugin, PluginOptions, Uppy } from '@uppy/core'; import { ProviderOptions } from '@uppy/companion-client'; -export interface InstagramOptions extends PluginOptions, ProviderOptions { - serverUrl: string; - serverPattern: string | RegExp | Array; +declare module Instagram { + interface InstagramOptions extends PluginOptions, ProviderOptions { + serverUrl: string; + serverPattern: string | RegExp | Array; + } } -export default class Instagram extends Plugin { - constructor(uppy: Uppy, opts: Partial); +declare class Instagram extends Plugin { + constructor(uppy: Uppy, opts: Partial); } +export = Instagram; + declare module '@uppy/core' { export interface Uppy { - use(pluginClass: typeof Instagram, opts: Partial): Uppy; + use(pluginClass: typeof Instagram, opts: Partial): Uppy; } } diff --git a/packages/@uppy/progress-bar/types/index.d.ts b/packages/@uppy/progress-bar/types/index.d.ts index bbab49553..c07e0a6a4 100644 --- a/packages/@uppy/progress-bar/types/index.d.ts +++ b/packages/@uppy/progress-bar/types/index.d.ts @@ -1,16 +1,20 @@ import { Plugin, PluginOptions, Uppy } from '@uppy/core'; -export interface ProgressBarOptions extends PluginOptions { - hideAfterFinish: boolean; - fixed: boolean; +declare module ProgressBar { + interface ProgressBarOptions extends PluginOptions { + hideAfterFinish: boolean; + fixed: boolean; + } } -export default class ProgressBar extends Plugin { - constructor(uppy: Uppy, opts: Partial); +declare class ProgressBar extends Plugin { + constructor(uppy: Uppy, opts: Partial); } +export = ProgressBar; + declare module '@uppy/core' { export interface Uppy { - use(pluginClass: typeof ProgressBar, opts: Partial): Uppy; + use(pluginClass: typeof ProgressBar, opts: Partial): Uppy; } } diff --git a/packages/@uppy/redux-dev-tools/types/index.d.ts b/packages/@uppy/redux-dev-tools/types/index.d.ts index 7787bcdda..fb7d20433 100644 --- a/packages/@uppy/redux-dev-tools/types/index.d.ts +++ b/packages/@uppy/redux-dev-tools/types/index.d.ts @@ -1,14 +1,18 @@ import { Plugin, PluginOptions, Uppy } from '@uppy/core'; -export interface ReduxDevToolsOptions extends PluginOptions { +declare module ReduxDevTools { + interface ReduxDevToolsOptions extends PluginOptions { + } } -export default class ReduxDevTools extends Plugin { - constructor(uppy: Uppy, opts: Partial); +declare class ReduxDevTools extends Plugin { + constructor(uppy: Uppy, opts: Partial); } +export = ReduxDevTools; + declare module '@uppy/core' { export interface Uppy { - use(pluginClass: typeof ReduxDevTools, opts: Partial): Uppy; + use(pluginClass: typeof ReduxDevTools, opts: Partial): Uppy; } } diff --git a/packages/@uppy/status-bar/types/index.d.ts b/packages/@uppy/status-bar/types/index.d.ts index dd2c0d232..3f3f9f2ee 100644 --- a/packages/@uppy/status-bar/types/index.d.ts +++ b/packages/@uppy/status-bar/types/index.d.ts @@ -1,17 +1,21 @@ import { Plugin, PluginOptions, Uppy } from '@uppy/core'; -export interface StatusBarOptions extends PluginOptions { - showProgressDetails: boolean; - hideUploadButton: boolean; - hideAfterFinish: boolean; +declare module StatusBar { + export interface StatusBarOptions extends PluginOptions { + showProgressDetails: boolean; + hideUploadButton: boolean; + hideAfterFinish: boolean; + } } -export default class StatusBar extends Plugin { - constructor(uppy: Uppy, opts: Partial); +declare class StatusBar extends Plugin { + constructor(uppy: Uppy, opts: Partial); } +export = StatusBar; + declare module '@uppy/core' { export interface Uppy { - use(pluginClass: typeof StatusBar, opts: Partial): Uppy; + use(pluginClass: typeof StatusBar, opts: Partial): Uppy; } } diff --git a/packages/@uppy/store-default/types/index.d.ts b/packages/@uppy/store-default/types/index.d.ts index 114c79417..787551847 100644 --- a/packages/@uppy/store-default/types/index.d.ts +++ b/packages/@uppy/store-default/types/index.d.ts @@ -7,4 +7,5 @@ declare class DefaultStore implements Store { subscribe(listener: any): () => void; } -export default function createDefaultStore(): DefaultStore; +declare function createDefaultStore(): DefaultStore; +export = createDefaultStore; \ No newline at end of file diff --git a/packages/@uppy/store-redux/types/index.d.ts b/packages/@uppy/store-redux/types/index.d.ts index b7d7597f0..0a3402c87 100644 --- a/packages/@uppy/store-redux/types/index.d.ts +++ b/packages/@uppy/store-redux/types/index.d.ts @@ -14,6 +14,13 @@ declare class ReduxStore implements Store { subscribe(listener: any): () => void; } -export default function createReduxStore(opts: ReduxStoreOptions): ReduxStore; export const reducer: Reducer; export const middleware: Middleware; +// Redux action name. +export const STATE_UPDATE: string; + +// Typescript forbids the next two lines with the following error message: +// "An export assignment cannot be used in a module with other exported elements." + +// declare function createReduxStore(opts: ReduxStoreOptions): ReduxStore; +// export = createReduxStore; diff --git a/packages/@uppy/thumbnail-generator/types/index.d.ts b/packages/@uppy/thumbnail-generator/types/index.d.ts index 7b14465df..f5284045e 100644 --- a/packages/@uppy/thumbnail-generator/types/index.d.ts +++ b/packages/@uppy/thumbnail-generator/types/index.d.ts @@ -1,15 +1,19 @@ import { Plugin, PluginOptions, Uppy } from '@uppy/core'; -export interface ThumbnailGeneratorOptions extends PluginOptions { - thumbnailWidth: number; +declare module ThumbnailGenerator { + interface ThumbnailGeneratorOptions extends PluginOptions { + thumbnailWidth: number; + } } -export default class ThumbnailGenerator extends Plugin { - constructor(uppy: Uppy, opts: Partial); +declare class ThumbnailGenerator extends Plugin { + constructor(uppy: Uppy, opts: Partial); } +export = ThumbnailGenerator; + declare module '@uppy/core' { export interface Uppy { - use(pluginClass: typeof ThumbnailGenerator, opts: Partial): Uppy; + use(pluginClass: typeof ThumbnailGenerator, opts: Partial): Uppy; } } diff --git a/packages/@uppy/transloadit/types/index.d.ts b/packages/@uppy/transloadit/types/index.d.ts index 5a4db694e..99b911640 100644 --- a/packages/@uppy/transloadit/types/index.d.ts +++ b/packages/@uppy/transloadit/types/index.d.ts @@ -1,36 +1,40 @@ import { Plugin, PluginOptions, Uppy, UppyFile } from '@uppy/core'; -export interface AssemblyParameters { - auth: { key: string }; - template_id?: string; - steps?: { [step: string]: object }; - notify_url?: string; - fields?: { [name: string]: number | string }; +declare module Transloadit { + interface AssemblyParameters { + auth: { key: string }; + template_id?: string; + steps?: { [step: string]: object }; + notify_url?: string; + fields?: { [name: string]: number | string }; + } + + interface AssemblyOptions { + params: AssemblyParameters; + fields?: { [name: string]: number | string }; + signature?: string; + } + + interface TransloaditOptions extends PluginOptions { + params: AssemblyParameters; + signature: string; + service: string; + waitForEncoding: boolean; + waitForMetadata: boolean; + importFromUploadURLs: boolean; + alwaysRunAssembly: boolean; + getAssemblyOptions: (file: UppyFile) => AssemblyOptions | Promise; + } } -export interface AssemblyOptions { - params: AssemblyParameters; - fields?: { [name: string]: number | string }; - signature?: string; +declare class Transloadit extends Plugin { + constructor(uppy: Uppy, opts: Partial); } -export interface TransloaditOptions extends PluginOptions { - params: AssemblyParameters; - signature: string; - service: string; - waitForEncoding: boolean; - waitForMetadata: boolean; - importFromUploadURLs: boolean; - alwaysRunAssembly: boolean; - getAssemblyOptions: (file: UppyFile) => AssemblyOptions | Promise; -} - -export default class Transloadit extends Plugin { - constructor(uppy: Uppy, opts: Partial); -} +export = Transloadit; declare module '@uppy/core' { export interface Uppy { - use(pluginClass: typeof Transloadit, opts: Partial): Uppy; + use(pluginClass: typeof Transloadit, opts: Partial): Uppy; } } diff --git a/packages/@uppy/tus/types/index.d.ts b/packages/@uppy/tus/types/index.d.ts index 7ebde1c66..28409c87c 100644 --- a/packages/@uppy/tus/types/index.d.ts +++ b/packages/@uppy/tus/types/index.d.ts @@ -1,20 +1,24 @@ import { Plugin, PluginOptions, Uppy } from '@uppy/core'; -export interface TusOptions extends PluginOptions { - limit: number; - endpoint: string; - uploadUrl: string; - useFastRemoteRetry: boolean; - resume: boolean; - autoRetry: boolean; +declare module Tus { + export interface TusOptions extends PluginOptions { + limit: number; + endpoint: string; + uploadUrl: string; + useFastRemoteRetry: boolean; + resume: boolean; + autoRetry: boolean; + } } -export default class Tus extends Plugin { - constructor(uppy: Uppy, opts: Partial); +declare class Tus extends Plugin { + constructor(uppy: Uppy, opts: Partial); } +export = Tus; + declare module '@uppy/core' { export interface Uppy { - use(pluginClass: typeof Tus, opts: Partial): Uppy; + use(pluginClass: typeof Tus, opts: Partial): Uppy; } } diff --git a/packages/@uppy/url/types/index.d.ts b/packages/@uppy/url/types/index.d.ts index 5f43c4089..25ac50edd 100644 --- a/packages/@uppy/url/types/index.d.ts +++ b/packages/@uppy/url/types/index.d.ts @@ -1,16 +1,20 @@ import { Plugin, PluginOptions, Uppy } from '@uppy/core'; -export interface UrlOptions extends PluginOptions { - serverUrl: string; - // TODO inherit from ProviderOptions +declare module Url { + export interface UrlOptions extends PluginOptions { + serverUrl: string; + // TODO inherit from ProviderOptions + } } -export default class Url extends Plugin { - constructor(uppy: Uppy, opts: Partial); +declare class Url extends Plugin { + constructor(uppy: Uppy, opts: Partial); } +export = Url; + declare module '@uppy/core' { export interface Uppy { - use(pluginClass: typeof Url, opts: Partial): Uppy; + use(pluginClass: typeof Url, opts: Partial): Uppy; } } diff --git a/packages/@uppy/xhr-upload/types/index.d.ts b/packages/@uppy/xhr-upload/types/index.d.ts index ee8f9291f..56e3714ef 100644 --- a/packages/@uppy/xhr-upload/types/index.d.ts +++ b/packages/@uppy/xhr-upload/types/index.d.ts @@ -1,24 +1,28 @@ import { Plugin, PluginOptions, Uppy } from '@uppy/core'; -export interface XHRUploadOptions extends PluginOptions { - limit: string; - bundle: boolean; - formData: FormData; - headers: any; - metaFields: string[]; - fieldName: string; - timeout: number; - responseUrlFieldName: string; - endpoint: string; - method: 'GET' | 'POST' | 'HEAD'; +declare module XHRUpload { + export interface XHRUploadOptions extends PluginOptions { + limit: string; + bundle: boolean; + formData: FormData; + headers: any; + metaFields: string[]; + fieldName: string; + timeout: number; + responseUrlFieldName: string; + endpoint: string; + method: 'GET' | 'POST' | 'HEAD'; + } } -export default class XHRUpload extends Plugin { - constructor(uppy: Uppy, opts: Partial); +declare class XHRUpload extends Plugin { + constructor(uppy: Uppy, opts: Partial); } +export = XHRUpload; + declare module '@uppy/core' { export interface Uppy { - use(pluginClass: typeof XHRUpload, opts: Partial): Uppy; + use(pluginClass: typeof XHRUpload, opts: Partial): Uppy; } } From 0d4fea6f3e85fbab0d3a8ee742d3697af77a53b1 Mon Sep 17 00:00:00 2001 From: Matthias Bohlen Date: Mon, 12 Nov 2018 12:46:41 +0100 Subject: [PATCH 07/41] Weird import/export situation... ...this is weird in JS and it becomes even more weird in TS. Do we really mean what we say here? We import a function and re-export it as something that looks like a class name. --- packages/uppy/types/index.d.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/uppy/types/index.d.ts b/packages/uppy/types/index.d.ts index aca803b31..8585dc560 100644 --- a/packages/uppy/types/index.d.ts +++ b/packages/uppy/types/index.d.ts @@ -6,7 +6,9 @@ export { default as Core } from '@uppy/core'; // Stores -export { default as DefaultStore } from '@uppy/store-default'; +import DefaultStore = require('@uppy/store-default'); +export { DefaultStore }; // this is weird: exporting a function as something that sounds like a class name! +// do we really mean what the line above says? export { default as ReduxStore } from '@uppy/store-redux'; // UI plugins From cd8fae0ac99607e9b0c75734f831432722f67e4b Mon Sep 17 00:00:00 2001 From: Artur Paikin Date: Thu, 22 Nov 2018 13:59:02 +0300 Subject: [PATCH 08/41] =?UTF-8?q?Don=E2=80=99t=20bundle=20Core=20styles=20?= =?UTF-8?q?with=20everything,=20because=20of=20CSS=20conflicts?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit To use Dashboard, you now have to include the following css: ```js import '@uppy/core/dist/style.css' import '@uppy/dashboard/dist/style.css' ``` --- packages/@uppy/dashboard/src/style.scss | 3 +- packages/@uppy/drag-drop/src/style.scss | 101 +++++++++---------- packages/@uppy/file-input/src/style.scss | 3 +- packages/@uppy/informer/src/style.scss | 4 +- packages/@uppy/progress-bar/src/style.scss | 3 +- packages/@uppy/provider-views/src/style.scss | 3 +- packages/@uppy/status-bar/src/style.scss | 3 +- packages/@uppy/url/src/style.scss | 3 +- packages/@uppy/webcam/src/style.scss | 3 +- website/src/docs/dashboard.md | 13 ++- website/src/docs/dragdrop.md | 7 +- website/src/docs/fileinput.md | 7 +- website/src/docs/index.md | 5 + website/src/docs/informer.md | 11 +- website/src/docs/progressbar.md | 13 +++ website/src/docs/statusbar.md | 11 +- website/src/docs/url.md | 11 ++ website/src/docs/webcam.md | 11 ++ 18 files changed, 141 insertions(+), 74 deletions(-) diff --git a/packages/@uppy/dashboard/src/style.scss b/packages/@uppy/dashboard/src/style.scss index d39ce38f2..1f545ef5c 100644 --- a/packages/@uppy/dashboard/src/style.scss +++ b/packages/@uppy/dashboard/src/style.scss @@ -1,4 +1,5 @@ -@import '@uppy/core/src/style.scss'; +@import '@uppy/core/src/_utils.scss'; +@import '@uppy/core/src/_variables.scss'; @import '@uppy/informer/src/style.scss'; @import '@uppy/status-bar/src/style.scss'; @import '@uppy/provider-views/src/style.scss'; diff --git a/packages/@uppy/drag-drop/src/style.scss b/packages/@uppy/drag-drop/src/style.scss index c9f28472f..30c58b66c 100644 --- a/packages/@uppy/drag-drop/src/style.scss +++ b/packages/@uppy/drag-drop/src/style.scss @@ -1,62 +1,59 @@ -@import '@uppy/core/src/style.scss'; +@import '@uppy/core/src/_utils.scss'; +@import '@uppy/core/src/_variables.scss'; -// .Uppy { +.uppy-DragDrop-container { + display: flex; + align-items: center; + justify-content: center; + border-radius: 7px; + background-color: $color-white; + // cursor: pointer; +} - .uppy-DragDrop-container { - display: flex; - align-items: center; - justify-content: center; - border-radius: 7px; - background-color: $color-white; - // cursor: pointer; +.uppy-DragDrop-inner { + margin: 0; + text-align: center; + padding: 80px 20px; + line-height: 1.4; +} + +.uppy-DragDrop-arrow { + width: 60px; + height: 60px; + fill: lighten($color-gray, 30%); + margin-bottom: 17px; +} + + .uppy-DragDrop--is-dragdrop-supported { + border: 2px dashed; + border-color: lighten($color-gray, 10%); } - .uppy-DragDrop-inner { - margin: 0; - text-align: center; - padding: 80px 20px; - line-height: 1.4; + // .uppy-DragDrop-container.is-dragdrop-supported .uppy-DragDrop-dragText { + // display: inline; + // } + + .uppy-DragDrop-container.drag { + border-color: $color-gray; + background-color: darken($color-white, 10%); } - .uppy-DragDrop-arrow { - width: 60px; - height: 60px; - fill: lighten($color-gray, 30%); - margin-bottom: 17px; + .uppy-DragDrop-container.drag .uppy-DragDrop-arrow { + fill: $color-gray; } - .uppy-DragDrop--is-dragdrop-supported { - border: 2px dashed; - border-color: lighten($color-gray, 10%); - } +.uppy-DragDrop-label { + display: block; + cursor: pointer; + font-size: 1.15em; + margin-bottom: 5px; +} - // .uppy-DragDrop-container.is-dragdrop-supported .uppy-DragDrop-dragText { - // display: inline; - // } +.uppy-DragDrop-note { + font-size: 1em; + color: lighten($color-gray, 10%); +} - .uppy-DragDrop-container.drag { - border-color: $color-gray; - background-color: darken($color-white, 10%); - } - - .uppy-DragDrop-container.drag .uppy-DragDrop-arrow { - fill: $color-gray; - } - - .uppy-DragDrop-label { - display: block; - cursor: pointer; - font-size: 1.15em; - margin-bottom: 5px; - } - - .uppy-DragDrop-note { - font-size: 1em; - color: lighten($color-gray, 10%); - } - - .uppy-DragDrop-dragText { - color: $color-cornflower-blue; - } - -// } +.uppy-DragDrop-dragText { + color: $color-cornflower-blue; +} diff --git a/packages/@uppy/file-input/src/style.scss b/packages/@uppy/file-input/src/style.scss index 82d122173..c3f1202b3 100644 --- a/packages/@uppy/file-input/src/style.scss +++ b/packages/@uppy/file-input/src/style.scss @@ -1,4 +1,5 @@ -@import '@uppy/core/src/style.scss'; +@import '@uppy/core/src/_utils.scss'; +@import '@uppy/core/src/_variables.scss'; .uppy-FileInput-container { margin-bottom: 15px; diff --git a/packages/@uppy/informer/src/style.scss b/packages/@uppy/informer/src/style.scss index eca3d0486..8a6760284 100644 --- a/packages/@uppy/informer/src/style.scss +++ b/packages/@uppy/informer/src/style.scss @@ -1,5 +1,5 @@ -@import '@uppy/core/src/style.scss'; -@import '@uppy/utils/src/microtip.scss'; +@import '@uppy/core/src/_utils.scss'; +@import '@uppy/core/src/_variables.scss'; .uppy-Informer { position: absolute; diff --git a/packages/@uppy/progress-bar/src/style.scss b/packages/@uppy/progress-bar/src/style.scss index 67d63a4b4..f27f82b1f 100644 --- a/packages/@uppy/progress-bar/src/style.scss +++ b/packages/@uppy/progress-bar/src/style.scss @@ -1,4 +1,5 @@ -@import '@uppy/core/src/style.scss'; +@import '@uppy/core/src/_utils.scss'; +@import '@uppy/core/src/_variables.scss'; .uppy-ProgressBar { /* no important */ diff --git a/packages/@uppy/provider-views/src/style.scss b/packages/@uppy/provider-views/src/style.scss index 167886a8a..e1eecb40c 100644 --- a/packages/@uppy/provider-views/src/style.scss +++ b/packages/@uppy/provider-views/src/style.scss @@ -1,4 +1,5 @@ -@import '@uppy/core/src/style.scss'; +@import '@uppy/core/src/_utils.scss'; +@import '@uppy/core/src/_variables.scss'; .uppy-DashboardContent-panelBody { display: flex; diff --git a/packages/@uppy/status-bar/src/style.scss b/packages/@uppy/status-bar/src/style.scss index 35b7db17e..092810e5b 100644 --- a/packages/@uppy/status-bar/src/style.scss +++ b/packages/@uppy/status-bar/src/style.scss @@ -1,4 +1,5 @@ -@import '@uppy/core/src/style.scss'; +@import '@uppy/core/src/_utils.scss'; +@import '@uppy/core/src/_variables.scss'; @import '@uppy/utils/src/microtip.scss'; .uppy-StatusBar { diff --git a/packages/@uppy/url/src/style.scss b/packages/@uppy/url/src/style.scss index d2242b331..82e6bf548 100644 --- a/packages/@uppy/url/src/style.scss +++ b/packages/@uppy/url/src/style.scss @@ -1,4 +1,5 @@ -@import '@uppy/core/src/style.scss'; +@import '@uppy/core/src/_utils.scss'; +@import '@uppy/core/src/_variables.scss'; .uppy-Url { width: 100%; diff --git a/packages/@uppy/webcam/src/style.scss b/packages/@uppy/webcam/src/style.scss index db3d2d226..aba434d79 100644 --- a/packages/@uppy/webcam/src/style.scss +++ b/packages/@uppy/webcam/src/style.scss @@ -1,4 +1,5 @@ -@import '@uppy/core/src/style.scss'; +@import '@uppy/core/src/_utils.scss'; +@import '@uppy/core/src/_variables.scss'; .uppy-Webcam-container { width: 100%; diff --git a/website/src/docs/dashboard.md b/website/src/docs/dashboard.md index 2b98abc5f..f37fd4784 100644 --- a/website/src/docs/dashboard.md +++ b/website/src/docs/dashboard.md @@ -43,11 +43,18 @@ const Dashboard = Uppy.Dashboard ## CSS -The `@uppy/dashboard` plugin includes CSS for the Dashboard itself, and the various plugins used by the Dashboard, such as ([`@uppy/status-bar`](/docs/status-bar) and [`@uppy/informer`](/docs/informer)). If you also use the `@uppy/status-bar` or `@uppy/informer` plugin directly, you should not include their CSS files, but instead only use the one from the `@uppy/dashboard` plugin. +The `@uppy/dashboard` plugin comes with a CSS file for styling: -The CSS file lives at `@uppy/dashboard/dist/style.css`. A minified version is at `@uppy/dashboard/dist/style.min.css`. +```js +import '@uppy/core/dist/style.css' +import '@uppy/dashboard/dist/style.css' +``` -Import one of these files into your project. The way to do this depends on your build system. +Import general Core styles from `@uppy/core/dist/style.css` first, then add the Dashboard styles from `@uppy/dashboard/dist/style.css`. A minified version is also available as `style.min.css` at the same path. The way to do import depends on your build system. + +⚠️ The `@uppy/dashboard` plugin includes CSS for the Dashboard itself, and the various plugins used by the Dashboard, such as ([`@uppy/status-bar`](/docs/status-bar) and [`@uppy/informer`](/docs/informer)). If you also use the `@uppy/status-bar` or `@uppy/informer` plugin directly, you should not include their CSS files, but instead only use the one from the `@uppy/dashboard` plugin. + +Styles for Provider plugins, like Google Drive and Instagram, are also bundled with Dashboard styles. Styles for other plugins, such as `@uppy/url` and `@uppy/webcam`, are not inluded. If you are using those, please see their docs and make sure to include styles for them as well. ## Options diff --git a/website/src/docs/dragdrop.md b/website/src/docs/dragdrop.md index 02f107797..11207664a 100644 --- a/website/src/docs/dragdrop.md +++ b/website/src/docs/dragdrop.md @@ -39,9 +39,12 @@ const DragDrop = Uppy.DragDrop The `@uppy/drag-drop` plugin includes some simple styles, like shown in the [example](/examples/dragdrop). You can also choose not to use it and provide your own styles instead. -The CSS file lives at `@uppy/drag-drop/dist/style.css`. A minified version is at `@uppy/drag-drop/dist/style.min.css`. +```js +import '@uppy/core/dist/style.css' +import '@uppy/drag-drop/dist/style.css' +``` -Import one of these files into your project. The way to do this depends on your build system. +Import general Core styles from `@uppy/core/dist/style.css` first, then add the Drag & Drop styles from `@uppy/drag-drop/dist/style.css`. A minified version is also available as `style.min.css` at the same path. The way to do import depends on your build system. ## Options diff --git a/website/src/docs/fileinput.md b/website/src/docs/fileinput.md index 610e2d35d..48cce9d6a 100644 --- a/website/src/docs/fileinput.md +++ b/website/src/docs/fileinput.md @@ -42,9 +42,12 @@ const FileInput = Uppy.FileInput The `@uppy/file-input` plugin includes some simple styles for use with the [`pretty`](#pretty-true) option, like shown in the [example](/examples/xhrupload). You can also choose not to use it and provide your own styles instead. -The CSS file lives at `@uppy/file-input/dist/style.css`. A minified version is at `@uppy/file-input/dist/style.min.css`. +```js +import '@uppy/core/dist/style.css' +import '@uppy/file-input/dist/style.css' +``` -Import one of these files into your project. The way to do this depends on your build system. +Import general Core styles from `@uppy/core/dist/style.css` first, then add the Drag & Drop styles from `@uppy/file-input/dist/style.css`. A minified version is also available as `style.min.css` at the same path. The way to do import depends on your build system. ## Options diff --git a/website/src/docs/index.md b/website/src/docs/index.md index 8722664ab..ef69428cc 100644 --- a/website/src/docs/index.md +++ b/website/src/docs/index.md @@ -67,9 +67,14 @@ npm install @uppy/core @uppy/xhr-upload @uppy/dashboard ``` ```js +// Import the plugins const Uppy = require('@uppy/core') const XHRUpload = require('@uppy/xhr-upload') const Dashboard = require('@uppy/dashboard') + +// And their styles (for UI plugins) +require('@uppy/core/dist/style.css') +require('@uppy/dashboard/dist/style.css')   const uppy = Uppy() .use(Dashboard, { diff --git a/website/src/docs/informer.md b/website/src/docs/informer.md index de29d3ce9..a98df7500 100644 --- a/website/src/docs/informer.md +++ b/website/src/docs/informer.md @@ -40,11 +40,16 @@ const Informer = Uppy.Informer ## CSS -The `@uppy/informer` plugin includes CSS a file for styling. If you use the [`@uppy/dashboard`](/docs/dashboard) plugin, you do not need to include the styles for the Informer, because the Dashboard already includes it. +The `@uppy/informer` plugin comes with a CSS file for styling: -The CSS file lives at `@uppy/informer/dist/style.css`. A minified version is at `@uppy/informer/dist/style.min.css`. +```js +import '@uppy/core/dist/style.css' +import '@uppy/informer/dist/style.css' +``` -Import one of these files into your project. The way to do this depends on your build system. +Import general Core styles from `@uppy/core/dist/style.css` first, then add the Informer styles from `@uppy/informer/dist/style.css`. A minified version is also available as `style.min.css` at the same path. The way to do import depends on your build system. + +⚠️ If you use the [`@uppy/dashboard`](/docs/dashboard) plugin, you do not need to include the styles for the Progress Bar, because the Dashboard already includes it. ## Options diff --git a/website/src/docs/progressbar.md b/website/src/docs/progressbar.md index 7d5066473..07c316e2b 100644 --- a/website/src/docs/progressbar.md +++ b/website/src/docs/progressbar.md @@ -37,6 +37,19 @@ In the [CDN package](/docs/#With-a-script-tag), it is available on the `Uppy` gl const ProgressBar = Uppy.ProgressBar ``` +## CSS + +The `@uppy/progress-bar` plugin comes with a CSS file for styling: + +```js +import '@uppy/core/dist/style.css' +import '@uppy/progress-bar/dist/style.css' +``` + +Import general Core styles from `@uppy/core/dist/style.css` first, then add the Informer styles from `@uppy/progress-bar/dist/style.css`. A minified version is also available as `style.min.css` at the same path. The way to do import depends on your build system. + +⚠️ If you use the [`@uppy/dashboard`](/docs/dashboard) plugin, you do not need to include the styles for the Progress Bar, because the Dashboard already includes it. + ## Options The `@uppy/progress-bar` plugin has the following configurable options: diff --git a/website/src/docs/statusbar.md b/website/src/docs/statusbar.md index d9599eeec..36acc2fc2 100644 --- a/website/src/docs/statusbar.md +++ b/website/src/docs/statusbar.md @@ -38,11 +38,16 @@ const StatusBar = Uppy.StatusBar ## CSS -The `@uppy/status-bar` plugin includes a CSS file for styling. If you are using the [`@uppy/dashboard`](/docs/dashboard) plugin, you do not need to include the styles for the StatusBar, because the Dashboard already includes it. +The `@uppy/status-bar` plugin comes with a CSS file for styling: -The CSS file lives at `@uppy/status-bar/dist/style.css`. A minified version can be found at `@uppy/status-bar/dist/style.min.css`. +```js +import '@uppy/core/dist/style.css' +import '@uppy/status-bar/dist/style.css' +``` -Import one of these files into your project. The way to do this depends on your build system. +Import general Core styles from `@uppy/core/dist/style.css` first, then add the Informer styles from `@uppy/status-bar/dist/style.css`. A minified version is also available as `style.min.css` at the same path. The way to do import depends on your build system. + +⚠️ If you use the [`@uppy/dashboard`](/docs/dashboard) plugin, you do not need to include the styles for the Progress Bar, because the Dashboard already includes it. ## Options diff --git a/website/src/docs/url.md b/website/src/docs/url.md index 3105dd1a9..1747d943d 100644 --- a/website/src/docs/url.md +++ b/website/src/docs/url.md @@ -36,6 +36,17 @@ In the [CDN package](/docs/#With-a-script-tag), it is available on the `Uppy` gl const Url = Uppy.Url ``` +## CSS + +The `@uppy/url` plugin comes with a CSS file for styling: + +```js +import '@uppy/core/dist/style.css' +import '@uppy/url/dist/style.css' +``` + +Import general Core styles from `@uppy/core/dist/style.css` first, then add the Informer styles from `@uppy/url/dist/style.css`. A minified version is also available as `style.min.css` at the same path. The way to do import depends on your build system. + ## Options The `@uppy/url` plugin has the following configurable options: diff --git a/website/src/docs/webcam.md b/website/src/docs/webcam.md index ac8f91852..8714b8cf1 100644 --- a/website/src/docs/webcam.md +++ b/website/src/docs/webcam.md @@ -36,6 +36,17 @@ In the [CDN package](/docs/#With-a-script-tag), it is available on the `Uppy` gl const Webcam = Uppy.Webcam ``` +## CSS + +The `@uppy/webcam` plugin comes with a CSS file for styling: + +```js +import '@uppy/core/dist/style.css' +import '@uppy/webcam/dist/style.css' +``` + +Import general Core styles from `@uppy/core/dist/style.css` first, then add the Informer styles from `@uppy/webcam/dist/style.css`. A minified version is also available as `style.min.css` at the same path. The way to do import depends on your build system. + ## Options The `@uppy/webcam` plugin has the following configurable options: From 895103e402def49b7c9c93e8eddbc28740c833cb Mon Sep 17 00:00:00 2001 From: Artur Paikin Date: Thu, 22 Nov 2018 14:23:32 +0300 Subject: [PATCH 09/41] add core styles to create-react-app tests --- test/endtoend/create-react-app/src/App.js | 1 + 1 file changed, 1 insertion(+) diff --git a/test/endtoend/create-react-app/src/App.js b/test/endtoend/create-react-app/src/App.js index a475eae2f..6326db6e2 100644 --- a/test/endtoend/create-react-app/src/App.js +++ b/test/endtoend/create-react-app/src/App.js @@ -4,6 +4,7 @@ import Tus from '@uppy/tus' import GoogleDrive from '@uppy/google-drive' import { Dashboard, DashboardModal } from '@uppy/react' // import { Dashboard, DashboardModal, DragDrop, ProgressBar } from '@uppy/react' +import '@uppy/core/dist/style.css' import '@uppy/dashboard/dist/style.css' // import '@uppy/drag-drop/dist/style.css' // import '@uppy/progress-bar/dist/style.css' From b4f2c66df771881aae6ac0bc723df721cb110315 Mon Sep 17 00:00:00 2001 From: Artur Paikin Date: Thu, 22 Nov 2018 14:50:28 +0300 Subject: [PATCH 10/41] Add CSS section to all UI plugins, including React components --- website/src/docs/dashboard.md | 2 +- website/src/docs/dropbox.md | 7 +++++++ website/src/docs/google-drive.md | 6 ++++++ website/src/docs/informer.md | 2 +- website/src/docs/instagram.md | 6 ++++++ website/src/docs/progressbar.md | 2 +- website/src/docs/providers.md | 4 ++++ website/src/docs/react-dashboard-modal.md | 16 ++++++++++++++++ website/src/docs/react-dashboard.md | 15 +++++++++++++++ website/src/docs/react-dragdrop.md | 11 +++++++++++ website/src/docs/react-progressbar.md | 11 +++++++++++ website/src/docs/react-statusbar.md | 11 +++++++++++ website/src/docs/react.md | 4 ++++ website/src/docs/statusbar.md | 2 +- website/src/docs/url.md | 2 +- website/src/docs/webcam.md | 2 +- 16 files changed, 97 insertions(+), 6 deletions(-) diff --git a/website/src/docs/dashboard.md b/website/src/docs/dashboard.md index f37fd4784..4b22a5b47 100644 --- a/website/src/docs/dashboard.md +++ b/website/src/docs/dashboard.md @@ -43,7 +43,7 @@ const Dashboard = Uppy.Dashboard ## CSS -The `@uppy/dashboard` plugin comes with a CSS file for styling: +The `@uppy/dashboard` plugin requires the following CSS for styling: ```js import '@uppy/core/dist/style.css' diff --git a/website/src/docs/dropbox.md b/website/src/docs/dropbox.md index d1ee7158c..30ff00696 100644 --- a/website/src/docs/dropbox.md +++ b/website/src/docs/dropbox.md @@ -36,6 +36,13 @@ In the [CDN package](/docs/#With-a-script-tag), it is available on the `Uppy` gl const Dropbox = Uppy.Dropbox ``` +## CSS + +Dashboard plugin is recommended as a container to all Provider plugins, including Dropbox. If you are using Dashboard, it [comes with all the nessesary styles](/docs/dashboard/#CSS) for Dropbox as well. + +⚠️ If you are feeling adventerous, and want to use Dropbox plugin separately, without Dashboard, make sure to include `@uppy/provider-views/dist/style.css` (or `style.min.css`) CSS file. This is experimental, not officialy supported and not recommened. + + ## Options The `@uppy/dropbox` plugin has the following configurable options: diff --git a/website/src/docs/google-drive.md b/website/src/docs/google-drive.md index 46b19e473..66412cb7e 100644 --- a/website/src/docs/google-drive.md +++ b/website/src/docs/google-drive.md @@ -36,6 +36,12 @@ In the [CDN package](/docs/#With-a-script-tag), it is available on the `Uppy` gl const GoogleDrive = Uppy.GoogleDrive ``` +## CSS + +Dashboard plugin is recommended as a container to all Provider plugins, including Google Drive. If you are using Dashboard, it [comes with all the nessesary styles](/docs/dashboard/#CSS) for Dropbox as well. + +⚠️ If you are feeling adventerous, and want to use Google Drive plugin separately, without Dashboard, make sure to include `@uppy/provider-views/dist/style.css` (or `style.min.css`) CSS file. This is experimental, not officialy supported and not recommened. + ## Options The `@uppy/google-drive` plugin has the following configurable options: diff --git a/website/src/docs/informer.md b/website/src/docs/informer.md index a98df7500..32b9b6d2c 100644 --- a/website/src/docs/informer.md +++ b/website/src/docs/informer.md @@ -40,7 +40,7 @@ const Informer = Uppy.Informer ## CSS -The `@uppy/informer` plugin comes with a CSS file for styling: +The `@uppy/informer` plugin requires the following CSS for styling: ```js import '@uppy/core/dist/style.css' diff --git a/website/src/docs/instagram.md b/website/src/docs/instagram.md index c983b6686..36c02c7df 100644 --- a/website/src/docs/instagram.md +++ b/website/src/docs/instagram.md @@ -38,6 +38,12 @@ In the [CDN package](/docs/#With-a-script-tag), it is available on the `Uppy` gl const Instagram = Uppy.Instagram ``` +## CSS + +Dashboard plugin is recommended as a container to all Provider plugins, including Instagram. If you are using Dashboard, it [comes with all the nessesary styles](/docs/dashboard/#CSS) for Dropbox as well. + +⚠️ If you are feeling adventerous, and want to use Instagram plugin separately, without Dashboard, make sure to include `@uppy/provider-views/dist/style.css` (or `style.min.css`) CSS file. This is experimental, not officialy supported and not recommened. + ## Options The `@uppy/instagram` plugin has the following configurable options: diff --git a/website/src/docs/progressbar.md b/website/src/docs/progressbar.md index 07c316e2b..b4cc12d1e 100644 --- a/website/src/docs/progressbar.md +++ b/website/src/docs/progressbar.md @@ -39,7 +39,7 @@ const ProgressBar = Uppy.ProgressBar ## CSS -The `@uppy/progress-bar` plugin comes with a CSS file for styling: +The `@uppy/progress-bar` plugin requires the following CSS for styling: ```js import '@uppy/core/dist/style.css' diff --git a/website/src/docs/providers.md b/website/src/docs/providers.md index b299a072d..0b5225609 100644 --- a/website/src/docs/providers.md +++ b/website/src/docs/providers.md @@ -37,3 +37,7 @@ uppy.use(Instagram, {target: Dashboard, serverUrl: 'http://localhost:3020'}) const Url = require('@uppy/url') uppy.use(Url, {target: Dashboard, serverUrl: 'http://localhost:3020'}) ``` + +⚠️ The [Dashboard](/docs/dashboard) plugin is recommended as a universal container to all Provider plugins. It also comes with file previews, progress reporting and more. If you are using the Dashboard, it already [comes with all the nessesary styles](/docs/dashboard/#CSS) and functionality for Providers to work well. + +If you are feeling adventerous, you can technically use a Provider plugin separately, without the Dashboard. Make sure to then include `@uppy/provider-views/dist/style.css` (or `style.min.css`) CSS file. But this is experimental, not officialy supported and not recommened. diff --git a/website/src/docs/react-dashboard-modal.md b/website/src/docs/react-dashboard-modal.md index 0fd2afe69..2a953b007 100644 --- a/website/src/docs/react-dashboard-modal.md +++ b/website/src/docs/react-dashboard-modal.md @@ -20,8 +20,24 @@ import DashboardModal from '@uppy/react/lib/DashboardModal' import { DashboardModal } from '@uppy/react' ``` +## CSS + +The `DashboardModal` component requires the following CSS for styling: + +```js +import '@uppy/core/dist/style.css' +import '@uppy/dashboard/dist/style.css' +``` + +Import general Core styles from `@uppy/core/dist/style.css` first, then add the Dashboard styles from `@uppy/dashboard/dist/style.css`. A minified version is also available as `style.min.css` at the same path. The way to do import depends on your build system. + +⚠️ The `@uppy/dashboard` plugin includes CSS for the Dashboard itself, and the various plugins used by the Dashboard, such as ([`@uppy/status-bar`](/docs/status-bar) and [`@uppy/informer`](/docs/informer)). If you also use the `@uppy/status-bar` or `@uppy/informer` plugin directly, you should not include their CSS files, but instead only use the one from the `@uppy/dashboard` plugin. + +Styles for Provider plugins, like Google Drive and Instagram, are also bundled with Dashboard styles. Styles for other plugins, such as `@uppy/url` and `@uppy/webcam`, are not inluded. If you are using those, please see their docs and make sure to include styles for them as well. + + ## Props On top of all the [`@uppy/dashboard`][] options, the `` plugin adds two additional props: diff --git a/website/src/docs/react-dashboard.md b/website/src/docs/react-dashboard.md index bfd046c3d..3e4629888 100644 --- a/website/src/docs/react-dashboard.md +++ b/website/src/docs/react-dashboard.md @@ -20,6 +20,21 @@ import Dashboard from '@uppy/react/lib/Dashboard' import { Dashboard } from '@uppy/react' ``` +## CSS + +The `Dashboard` component requires the following CSS for styling: + +```js +import '@uppy/core/dist/style.css' +import '@uppy/dashboard/dist/style.css' +``` + +Import general Core styles from `@uppy/core/dist/style.css` first, then add the Dashboard styles from `@uppy/dashboard/dist/style.css`. A minified version is also available as `style.min.css` at the same path. The way to do import depends on your build system. + +⚠️ The `@uppy/dashboard` plugin includes CSS for the Dashboard itself, and the various plugins used by the Dashboard, such as ([`@uppy/status-bar`](/docs/status-bar) and [`@uppy/informer`](/docs/informer)). If you also use the `@uppy/status-bar` or `@uppy/informer` plugin directly, you should not include their CSS files, but instead only use the one from the `@uppy/dashboard` plugin. + +Styles for Provider plugins, like Google Drive and Instagram, are also bundled with Dashboard styles. Styles for other plugins, such as `@uppy/url` and `@uppy/webcam`, are not inluded. If you are using those, please see their docs and make sure to include styles for them as well. + ## Props The `` component supports all [`@uppy/dashboard`][] options as props. diff --git a/website/src/docs/react-dragdrop.md b/website/src/docs/react-dragdrop.md index 8b8c8006f..92a55d545 100644 --- a/website/src/docs/react-dragdrop.md +++ b/website/src/docs/react-dragdrop.md @@ -21,6 +21,17 @@ import DragDrop from '@uppy/react/lib/DragDrop'; import { DragDrop } from '@uppy/react'; ``` +## CSS + +The `DragDrop` component includes some simple styles, like shown in the [example](/examples/dragdrop). You can also choose not to use it and provide your own styles instead: + +```js +import '@uppy/core/dist/style.css' +import '@uppy/drag-drop/dist/style.css' +``` + +Import general Core styles from `@uppy/core/dist/style.css` first, then add the Drag & Drop styles from `@uppy/drag-drop/dist/style.css`. A minified version is also available as `style.min.css` at the same path. The way to do import depends on your build system. + ## Props The `` component supports all [DragDrop][] options as props. diff --git a/website/src/docs/react-progressbar.md b/website/src/docs/react-progressbar.md index 85486ece6..fe871d07a 100644 --- a/website/src/docs/react-progressbar.md +++ b/website/src/docs/react-progressbar.md @@ -21,6 +21,17 @@ import ProgressBar from '@uppy/react/lib/ProgressBar' import { ProgressBar } from '@uppy/react' ``` +## CSS + +The `ProgressBar` plugin requires the following CSS for styling: + +```js +import '@uppy/core/dist/style.css' +import '@uppy/progress-bar/dist/style.css' +``` + +Import general Core styles from `@uppy/core/dist/style.css` first, then add the Informer styles from `@uppy/progress-bar/dist/style.css`. A minified version is also available as `style.min.css` at the same path. The way to do import depends on your build system. + ## Props The `` component supports all [`@uppy/progress-bar`][] options as props. diff --git a/website/src/docs/react-statusbar.md b/website/src/docs/react-statusbar.md index aed2b8857..21b7f4e4d 100644 --- a/website/src/docs/react-statusbar.md +++ b/website/src/docs/react-statusbar.md @@ -21,6 +21,17 @@ import StatusBar from '@uppy/react/lib/StatusBar' import { StatusBar } from '@uppy/react' ``` +## CSS + +The `StatusBar` component requires the following CSS for styling: + +```js +import '@uppy/core/dist/style.css' +import '@uppy/status-bar/dist/style.css' +``` + +Import general Core styles from `@uppy/core/dist/style.css` first, then add the Informer styles from `@uppy/status-bar/dist/style.css`. A minified version is also available as `style.min.css` at the same path. The way to do import depends on your build system. + ## Props The `` component supports all [`@uppy/status-bar`][] options as props. diff --git a/website/src/docs/react.md b/website/src/docs/react.md index 2576cbe21..52ec87d6d 100644 --- a/website/src/docs/react.md +++ b/website/src/docs/react.md @@ -17,6 +17,10 @@ Install from NPM: npm install @uppy/react ``` +## CSS + +Make sure to also include the nessesary CSS files for each Uppy React component you are using. Follow links for individual components docs below for details on that. + ## Usage The components can be used with either [React][] or API-compatible alternatives such as [Preact][]. diff --git a/website/src/docs/statusbar.md b/website/src/docs/statusbar.md index 36acc2fc2..415116072 100644 --- a/website/src/docs/statusbar.md +++ b/website/src/docs/statusbar.md @@ -38,7 +38,7 @@ const StatusBar = Uppy.StatusBar ## CSS -The `@uppy/status-bar` plugin comes with a CSS file for styling: +The `@uppy/status-bar` plugin requires the following CSS for styling: ```js import '@uppy/core/dist/style.css' diff --git a/website/src/docs/url.md b/website/src/docs/url.md index 1747d943d..626511065 100644 --- a/website/src/docs/url.md +++ b/website/src/docs/url.md @@ -38,7 +38,7 @@ const Url = Uppy.Url ## CSS -The `@uppy/url` plugin comes with a CSS file for styling: +The `@uppy/url` plugin requires the following CSS for styling: ```js import '@uppy/core/dist/style.css' diff --git a/website/src/docs/webcam.md b/website/src/docs/webcam.md index 8714b8cf1..b71e0d322 100644 --- a/website/src/docs/webcam.md +++ b/website/src/docs/webcam.md @@ -38,7 +38,7 @@ const Webcam = Uppy.Webcam ## CSS -The `@uppy/webcam` plugin comes with a CSS file for styling: +The `@uppy/webcam` plugin requires the following CSS for styling: ```js import '@uppy/core/dist/style.css' From 657ed67b08df87f5c77d0f155cec4462f0a4b655 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9e=20Kooi?= Date: Thu, 22 Nov 2018 16:55:50 +0300 Subject: [PATCH 11/41] Update website/src/docs/webcam.md: Informer --> Webcam Co-Authored-By: arturi --- website/src/docs/webcam.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/src/docs/webcam.md b/website/src/docs/webcam.md index b71e0d322..07c852c3c 100644 --- a/website/src/docs/webcam.md +++ b/website/src/docs/webcam.md @@ -45,7 +45,7 @@ import '@uppy/core/dist/style.css' import '@uppy/webcam/dist/style.css' ``` -Import general Core styles from `@uppy/core/dist/style.css` first, then add the Informer styles from `@uppy/webcam/dist/style.css`. A minified version is also available as `style.min.css` at the same path. The way to do import depends on your build system. +Import general Core styles from `@uppy/core/dist/style.css` first, then add the Webcam styles from `@uppy/webcam/dist/style.css`. A minified version is also available as `style.min.css` at the same path. The way to do import depends on your build system. ## Options From b1e229b34e3b217af3c38a387adc98a0c1c62065 Mon Sep 17 00:00:00 2001 From: Artur Paikin Date: Thu, 22 Nov 2018 16:59:52 +0300 Subject: [PATCH 12/41] Fix typos --- website/src/docs/react-progressbar.md | 2 +- website/src/docs/react-statusbar.md | 2 +- website/src/docs/statusbar.md | 2 +- website/src/docs/url.md | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/website/src/docs/react-progressbar.md b/website/src/docs/react-progressbar.md index fe871d07a..edab5dd67 100644 --- a/website/src/docs/react-progressbar.md +++ b/website/src/docs/react-progressbar.md @@ -30,7 +30,7 @@ import '@uppy/core/dist/style.css' import '@uppy/progress-bar/dist/style.css' ``` -Import general Core styles from `@uppy/core/dist/style.css` first, then add the Informer styles from `@uppy/progress-bar/dist/style.css`. A minified version is also available as `style.min.css` at the same path. The way to do import depends on your build system. +Import general Core styles from `@uppy/core/dist/style.css` first, then add the Progress Bar styles from `@uppy/progress-bar/dist/style.css`. A minified version is also available as `style.min.css` at the same path. The way to do import depends on your build system. ## Props diff --git a/website/src/docs/react-statusbar.md b/website/src/docs/react-statusbar.md index 21b7f4e4d..ce028c2fa 100644 --- a/website/src/docs/react-statusbar.md +++ b/website/src/docs/react-statusbar.md @@ -30,7 +30,7 @@ import '@uppy/core/dist/style.css' import '@uppy/status-bar/dist/style.css' ``` -Import general Core styles from `@uppy/core/dist/style.css` first, then add the Informer styles from `@uppy/status-bar/dist/style.css`. A minified version is also available as `style.min.css` at the same path. The way to do import depends on your build system. +Import general Core styles from `@uppy/core/dist/style.css` first, then add the Status Bar styles from `@uppy/status-bar/dist/style.css`. A minified version is also available as `style.min.css` at the same path. The way to do import depends on your build system. ## Props diff --git a/website/src/docs/statusbar.md b/website/src/docs/statusbar.md index 415116072..b8bf01ed4 100644 --- a/website/src/docs/statusbar.md +++ b/website/src/docs/statusbar.md @@ -45,7 +45,7 @@ import '@uppy/core/dist/style.css' import '@uppy/status-bar/dist/style.css' ``` -Import general Core styles from `@uppy/core/dist/style.css` first, then add the Informer styles from `@uppy/status-bar/dist/style.css`. A minified version is also available as `style.min.css` at the same path. The way to do import depends on your build system. +Import general Core styles from `@uppy/core/dist/style.css` first, then add the Status Bar styles from `@uppy/status-bar/dist/style.css`. A minified version is also available as `style.min.css` at the same path. The way to do import depends on your build system. ⚠️ If you use the [`@uppy/dashboard`](/docs/dashboard) plugin, you do not need to include the styles for the Progress Bar, because the Dashboard already includes it. diff --git a/website/src/docs/url.md b/website/src/docs/url.md index 626511065..98183ab7e 100644 --- a/website/src/docs/url.md +++ b/website/src/docs/url.md @@ -45,7 +45,7 @@ import '@uppy/core/dist/style.css' import '@uppy/url/dist/style.css' ``` -Import general Core styles from `@uppy/core/dist/style.css` first, then add the Informer styles from `@uppy/url/dist/style.css`. A minified version is also available as `style.min.css` at the same path. The way to do import depends on your build system. +Import general Core styles from `@uppy/core/dist/style.css` first, then add the Url styles from `@uppy/url/dist/style.css`. A minified version is also available as `style.min.css` at the same path. The way to do import depends on your build system. ## Options From 4633abc143eb5295ea576631614fe46fc717328b Mon Sep 17 00:00:00 2001 From: Jonathan Derrough Date: Fri, 23 Nov 2018 15:13:08 +0100 Subject: [PATCH 13/41] Fixed getFileType() when passed a file with an upper case extension Updated the unit tests --- packages/@uppy/utils/src/getFileType.js | 3 ++- packages/@uppy/utils/src/getFileType.test.js | 4 ++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/@uppy/utils/src/getFileType.js b/packages/@uppy/utils/src/getFileType.js index e0caa9af2..224be3ac8 100644 --- a/packages/@uppy/utils/src/getFileType.js +++ b/packages/@uppy/utils/src/getFileType.js @@ -2,7 +2,8 @@ const getFileNameAndExtension = require('./getFileNameAndExtension') const mimeTypes = require('./mimeTypes') module.exports = function getFileType (file) { - const fileExtension = file.name ? getFileNameAndExtension(file.name).extension : null + let fileExtension = file.name ? getFileNameAndExtension(file.name).extension : null + fileExtension = fileExtension ? fileExtension.toLowerCase() : null if (file.isRemote) { // some remote providers do not support file types diff --git a/packages/@uppy/utils/src/getFileType.test.js b/packages/@uppy/utils/src/getFileType.test.js index bdba71066..16e5aab8f 100644 --- a/packages/@uppy/utils/src/getFileType.test.js +++ b/packages/@uppy/utils/src/getFileType.test.js @@ -32,9 +32,13 @@ describe('getFileType', () => { name: 'bar.mkv', data: 'sdfsfhfh329fhwihs' } + const toUpper = (file) => Object.assign({}, file, { name: file.name.toUpperCase() }) expect(getFileType(fileMP3)).toEqual('audio/mp3') + expect(getFileType(toUpper(fileMP3))).toEqual('audio/mp3') expect(getFileType(fileYAML)).toEqual('text/yaml') + expect(getFileType(toUpper(fileYAML))).toEqual('text/yaml') expect(getFileType(fileMKV)).toEqual('video/x-matroska') + expect(getFileType(toUpper(fileMKV))).toEqual('video/x-matroska') }) it('should fail gracefully if unable to detect', () => { From af6408eace60acd69f1284d809d9514585220919 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9e=20Kooi?= Date: Mon, 26 Nov 2018 14:43:52 +0100 Subject: [PATCH 14/41] docs: Add missing space --- website/src/docs/uppy.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/src/docs/uppy.md b/website/src/docs/uppy.md index c70e3af4d..00fdf9975 100644 --- a/website/src/docs/uppy.md +++ b/website/src/docs/uppy.md @@ -110,7 +110,7 @@ This global metadata is added to each file in Uppy. It can be modified by two me Metadata from each file is then attached to uploads in [Tus](/docs/tus/) and [XHRUpload](/docs/xhrupload/) plugins. -Metadata can also be added from a `
` element on your page, through the [Form](/docs/form/)plugin or through the UI if you are using Dashboard with the [`metaFields`](/docs/dashboard/#metaFields) option. +Metadata can also be added from a `` element on your page, through the [Form](/docs/form/) plugin or through the UI if you are using Dashboard with the [`metaFields`](/docs/dashboard/#metaFields) option. ### `onBeforeFileAdded: (currentFile, files) => currentFile` From 66de14caccf36f70ab119d749cad9714c38de901 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9e=20Kooi?= Date: Mon, 26 Nov 2018 15:01:33 +0100 Subject: [PATCH 15/41] Store Provider instances on `this.provider` instead of `this[this.id]`. --- packages/@uppy/dropbox/src/index.js | 6 ++++-- packages/@uppy/google-drive/src/index.js | 6 ++++-- packages/@uppy/instagram/src/index.js | 3 ++- packages/@uppy/provider-views/src/index.js | 22 +++++++++++----------- 4 files changed, 21 insertions(+), 16 deletions(-) diff --git a/packages/@uppy/dropbox/src/index.js b/packages/@uppy/dropbox/src/index.js index 07d6f14e4..673db4854 100644 --- a/packages/@uppy/dropbox/src/index.js +++ b/packages/@uppy/dropbox/src/index.js @@ -17,7 +17,7 @@ module.exports = class Dropbox extends Plugin { ) - this[this.id] = new Provider(uppy, { + this.provider = new Provider(uppy, { serverUrl: this.opts.serverUrl, serverHeaders: this.opts.serverHeaders, provider: 'dropbox' @@ -28,7 +28,9 @@ module.exports = class Dropbox extends Plugin { } install () { - this.view = new ProviderViews(this) + this.view = new ProviderViews(this, { + provider: this.provider + }) // Set default state for Dropbox this.setPluginState({ authenticated: false, diff --git a/packages/@uppy/google-drive/src/index.js b/packages/@uppy/google-drive/src/index.js index b6cd30bc5..dbe592e4b 100644 --- a/packages/@uppy/google-drive/src/index.js +++ b/packages/@uppy/google-drive/src/index.js @@ -20,7 +20,7 @@ module.exports = class GoogleDrive extends Plugin { ) - this[this.id] = new Provider(uppy, { + this.provider = new Provider(uppy, { serverUrl: this.opts.serverUrl, serverHeaders: this.opts.serverHeaders, provider: 'drive', @@ -32,7 +32,9 @@ module.exports = class GoogleDrive extends Plugin { } install () { - this.view = new DriveProviderViews(this) + this.view = new DriveProviderViews(this, { + provider: this.provider + }) // Set default state for Google Drive this.setPluginState({ authenticated: false, diff --git a/packages/@uppy/instagram/src/index.js b/packages/@uppy/instagram/src/index.js index 1b072d614..eec754c60 100644 --- a/packages/@uppy/instagram/src/index.js +++ b/packages/@uppy/instagram/src/index.js @@ -17,7 +17,7 @@ module.exports = class Instagram extends Plugin { ) - this[this.id] = new Provider(uppy, { + this.provider = new Provider(uppy, { serverUrl: this.opts.serverUrl, serverHeaders: this.opts.serverHeaders, provider: 'instagram', @@ -30,6 +30,7 @@ module.exports = class Instagram extends Plugin { install () { this.view = new ProviderViews(this, { + provider: this.provider, viewType: 'grid', showTitles: false, showFilter: false, diff --git a/packages/@uppy/provider-views/src/index.js b/packages/@uppy/provider-views/src/index.js index 6e9154de5..57b493901 100644 --- a/packages/@uppy/provider-views/src/index.js +++ b/packages/@uppy/provider-views/src/index.js @@ -35,7 +35,7 @@ module.exports = class ProviderView { */ constructor (plugin, opts) { this.plugin = plugin - this.Provider = plugin[plugin.id] + this.provider = opts.provider // set default options const defaultOptions = { @@ -94,7 +94,7 @@ module.exports = class ProviderView { checkAuth () { this.plugin.setPluginState({ checkAuthInProgress: true }) - this.Provider.checkAuth() + this.provider.checkAuth() .then((authenticated) => { this.plugin.setPluginState({ checkAuthInProgress: false }) this.plugin.onAuth(authenticated) @@ -112,7 +112,7 @@ module.exports = class ProviderView { */ getFolder (id, name) { return this._loaderWrapper( - this.Provider.list(id), + this.provider.list(id), (res) => { let folders = [] let files = [] @@ -158,11 +158,11 @@ module.exports = class ProviderView { }, remote: { serverUrl: this.plugin.opts.serverUrl, - url: `${this.Provider.fileUrl(file.requestPath)}`, + url: `${this.provider.fileUrl(file.requestPath)}`, body: { fileId: file.id }, - providerOptions: this.Provider.opts + providerOptions: this.provider.opts } } @@ -190,7 +190,7 @@ module.exports = class ProviderView { * Removes session token on client side. */ logout () { - this.Provider.logout(location.href) + this.provider.logout(location.href) .then((res) => { if (res.ok) { const newState = { @@ -336,7 +336,7 @@ module.exports = class ProviderView { } folders[folderId] = {loading: true, files: []} this.plugin.setPluginState({selectedFolders: folders}) - return this.Provider.list(folder.requestPath).then((res) => { + return this.provider.list(folder.requestPath).then((res) => { let files = [] res.items.forEach((item) => { if (!item.isFolder) { @@ -423,7 +423,7 @@ module.exports = class ProviderView { handleAuth () { const authState = btoa(JSON.stringify({ origin: location.origin })) - const link = `${this.Provider.authUrl()}?state=${authState}` + const link = `${this.provider.authUrl()}?state=${authState}` const authWindow = window.open(link, '_blank') const handleToken = (e) => { @@ -433,8 +433,8 @@ module.exports = class ProviderView { } authWindow.close() window.removeEventListener('message', handleToken) - this.Provider.setAuthToken(e.data.token) - this._loaderWrapper(this.Provider.checkAuth(), this.plugin.onAuth, this.handleError) + this.provider.setAuthToken(e.data.token) + this._loaderWrapper(this.provider.checkAuth(), this.plugin.onAuth, this.handleError) } window.addEventListener('message', handleToken) } @@ -466,7 +466,7 @@ module.exports = class ProviderView { const path = this.nextPagePath ? this.nextPagePath : null if (scrollPos < 50 && path && !this._isHandlingScroll) { - this.Provider.list(path) + this.provider.list(path) .then((res) => { const { files, folders } = this.plugin.getPluginState() this._updateFilesAndFolders(res, files, folders) From 75e7da195bf81ed7d63b6dd81b70509b680a834f Mon Sep 17 00:00:00 2001 From: Artur Paikin Date: Thu, 29 Nov 2018 14:50:10 +0300 Subject: [PATCH 16/41] Update LICENSE --- LICENSE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LICENSE b/LICENSE index c23747330..867fa0de5 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2018 Transloadit +Copyright (c) 2018 Transloadit (https://transloadit.com) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal From c7489f9d25cc7571c652283e2eedc17b0d91b988 Mon Sep 17 00:00:00 2001 From: Artur Paikin Date: Thu, 29 Nov 2018 17:06:10 +0300 Subject: [PATCH 17/41] fix typos --- website/src/docs/dropbox.md | 2 +- website/src/docs/google-drive.md | 2 +- website/src/docs/instagram.md | 2 +- website/src/docs/providers.md | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/website/src/docs/dropbox.md b/website/src/docs/dropbox.md index 30ff00696..07341b5f2 100644 --- a/website/src/docs/dropbox.md +++ b/website/src/docs/dropbox.md @@ -40,7 +40,7 @@ const Dropbox = Uppy.Dropbox Dashboard plugin is recommended as a container to all Provider plugins, including Dropbox. If you are using Dashboard, it [comes with all the nessesary styles](/docs/dashboard/#CSS) for Dropbox as well. -⚠️ If you are feeling adventerous, and want to use Dropbox plugin separately, without Dashboard, make sure to include `@uppy/provider-views/dist/style.css` (or `style.min.css`) CSS file. This is experimental, not officialy supported and not recommened. +⚠️ If you are feeling adventurous, and want to use Dropbox plugin separately, without Dashboard, make sure to include `@uppy/provider-views/dist/style.css` (or `style.min.css`) CSS file. This is experimental, not officialy supported and not recommended. ## Options diff --git a/website/src/docs/google-drive.md b/website/src/docs/google-drive.md index 66412cb7e..14f725360 100644 --- a/website/src/docs/google-drive.md +++ b/website/src/docs/google-drive.md @@ -40,7 +40,7 @@ const GoogleDrive = Uppy.GoogleDrive Dashboard plugin is recommended as a container to all Provider plugins, including Google Drive. If you are using Dashboard, it [comes with all the nessesary styles](/docs/dashboard/#CSS) for Dropbox as well. -⚠️ If you are feeling adventerous, and want to use Google Drive plugin separately, without Dashboard, make sure to include `@uppy/provider-views/dist/style.css` (or `style.min.css`) CSS file. This is experimental, not officialy supported and not recommened. +⚠️ If you are feeling adventurous, and want to use Google Drive plugin separately, without Dashboard, make sure to include `@uppy/provider-views/dist/style.css` (or `style.min.css`) CSS file. This is experimental, not officialy supported and not recommended. ## Options diff --git a/website/src/docs/instagram.md b/website/src/docs/instagram.md index 36c02c7df..5fb213996 100644 --- a/website/src/docs/instagram.md +++ b/website/src/docs/instagram.md @@ -42,7 +42,7 @@ const Instagram = Uppy.Instagram Dashboard plugin is recommended as a container to all Provider plugins, including Instagram. If you are using Dashboard, it [comes with all the nessesary styles](/docs/dashboard/#CSS) for Dropbox as well. -⚠️ If you are feeling adventerous, and want to use Instagram plugin separately, without Dashboard, make sure to include `@uppy/provider-views/dist/style.css` (or `style.min.css`) CSS file. This is experimental, not officialy supported and not recommened. +⚠️ If you are feeling adventurous, and want to use Instagram plugin separately, without Dashboard, make sure to include `@uppy/provider-views/dist/style.css` (or `style.min.css`) CSS file. This is experimental, not officialy supported and not recommended. ## Options diff --git a/website/src/docs/providers.md b/website/src/docs/providers.md index 0b5225609..46c1c3c84 100644 --- a/website/src/docs/providers.md +++ b/website/src/docs/providers.md @@ -40,4 +40,4 @@ uppy.use(Url, {target: Dashboard, serverUrl: 'http://localhost:3020'}) ⚠️ The [Dashboard](/docs/dashboard) plugin is recommended as a universal container to all Provider plugins. It also comes with file previews, progress reporting and more. If you are using the Dashboard, it already [comes with all the nessesary styles](/docs/dashboard/#CSS) and functionality for Providers to work well. -If you are feeling adventerous, you can technically use a Provider plugin separately, without the Dashboard. Make sure to then include `@uppy/provider-views/dist/style.css` (or `style.min.css`) CSS file. But this is experimental, not officialy supported and not recommened. +If you are feeling adventurous, you can technically use a Provider plugin separately, without the Dashboard. Make sure to then include `@uppy/provider-views/dist/style.css` (or `style.min.css`) CSS file. But this is experimental, not officialy supported and not recommended. From faefe0d5f0f2c684f608f5629e39b355e1090035 Mon Sep 17 00:00:00 2001 From: Artur Paikin Date: Thu, 29 Nov 2018 21:34:56 +0300 Subject: [PATCH 18/41] @uppy/core peerDependency --> `^0.29.0` --- packages/@uppy/aws-s3-multipart/package.json | 2 +- packages/@uppy/aws-s3/package.json | 2 +- packages/@uppy/dashboard/package.json | 2 +- packages/@uppy/drag-drop/package.json | 2 +- packages/@uppy/dropbox/package.json | 2 +- packages/@uppy/file-input/package.json | 2 +- packages/@uppy/form/package.json | 2 +- packages/@uppy/golden-retriever/package.json | 2 +- packages/@uppy/google-drive/package.json | 2 +- packages/@uppy/informer/package.json | 2 +- packages/@uppy/instagram/package.json | 2 +- packages/@uppy/progress-bar/package.json | 2 +- packages/@uppy/provider-views/package.json | 2 +- packages/@uppy/react/package.json | 2 +- packages/@uppy/redux-dev-tools/package.json | 2 +- packages/@uppy/status-bar/package.json | 2 +- packages/@uppy/thumbnail-generator/package.json | 2 +- packages/@uppy/transloadit/package.json | 2 +- packages/@uppy/tus/package.json | 2 +- packages/@uppy/url/package.json | 2 +- packages/@uppy/webcam/package.json | 2 +- packages/@uppy/xhr-upload/package.json | 2 +- 22 files changed, 22 insertions(+), 22 deletions(-) diff --git a/packages/@uppy/aws-s3-multipart/package.json b/packages/@uppy/aws-s3-multipart/package.json index b125d7afa..8047db73d 100644 --- a/packages/@uppy/aws-s3-multipart/package.json +++ b/packages/@uppy/aws-s3-multipart/package.json @@ -32,6 +32,6 @@ "@uppy/core": "0.28.0" }, "peerDependencies": { - "@uppy/core": "^0.27.0" + "@uppy/core": "^0.29.0" } } diff --git a/packages/@uppy/aws-s3/package.json b/packages/@uppy/aws-s3/package.json index 8cc42669d..d5cd31e77 100644 --- a/packages/@uppy/aws-s3/package.json +++ b/packages/@uppy/aws-s3/package.json @@ -32,6 +32,6 @@ "@uppy/core": "0.28.0" }, "peerDependencies": { - "@uppy/core": "^0.28.0" + "@uppy/core": "^0.29.0" } } diff --git a/packages/@uppy/dashboard/package.json b/packages/@uppy/dashboard/package.json index b39979fd7..3c8ae6405 100644 --- a/packages/@uppy/dashboard/package.json +++ b/packages/@uppy/dashboard/package.json @@ -41,6 +41,6 @@ "@uppy/google-drive": "0.28.0" }, "peerDependencies": { - "@uppy/core": "^0.28.0" + "@uppy/core": "^0.29.0" } } diff --git a/packages/@uppy/drag-drop/package.json b/packages/@uppy/drag-drop/package.json index 9cb2f2787..92734aac0 100644 --- a/packages/@uppy/drag-drop/package.json +++ b/packages/@uppy/drag-drop/package.json @@ -34,6 +34,6 @@ "@uppy/core": "0.28.0" }, "peerDependencies": { - "@uppy/core": "^0.28.0" + "@uppy/core": "^0.29.0" } } diff --git a/packages/@uppy/dropbox/package.json b/packages/@uppy/dropbox/package.json index 74762171c..ee7b2fd59 100644 --- a/packages/@uppy/dropbox/package.json +++ b/packages/@uppy/dropbox/package.json @@ -30,6 +30,6 @@ "@uppy/core": "0.28.0" }, "peerDependencies": { - "@uppy/core": "^0.28.0" + "@uppy/core": "^0.29.0" } } diff --git a/packages/@uppy/file-input/package.json b/packages/@uppy/file-input/package.json index 1e300727d..e7557989a 100644 --- a/packages/@uppy/file-input/package.json +++ b/packages/@uppy/file-input/package.json @@ -30,6 +30,6 @@ "@uppy/core": "0.28.0" }, "peerDependencies": { - "@uppy/core": "^0.28.0" + "@uppy/core": "^0.29.0" } } diff --git a/packages/@uppy/form/package.json b/packages/@uppy/form/package.json index f7c4348cd..8763c03fa 100644 --- a/packages/@uppy/form/package.json +++ b/packages/@uppy/form/package.json @@ -28,6 +28,6 @@ "@uppy/core": "0.28.0" }, "peerDependencies": { - "@uppy/core": "^0.28.0" + "@uppy/core": "^0.29.0" } } diff --git a/packages/@uppy/golden-retriever/package.json b/packages/@uppy/golden-retriever/package.json index ad2fb7ed2..8b623b11b 100644 --- a/packages/@uppy/golden-retriever/package.json +++ b/packages/@uppy/golden-retriever/package.json @@ -31,6 +31,6 @@ "@uppy/core": "0.28.0" }, "peerDependencies": { - "@uppy/core": "^0.28.0" + "@uppy/core": "^0.29.0" } } diff --git a/packages/@uppy/google-drive/package.json b/packages/@uppy/google-drive/package.json index fa23193e0..befbba3d0 100644 --- a/packages/@uppy/google-drive/package.json +++ b/packages/@uppy/google-drive/package.json @@ -31,6 +31,6 @@ "@uppy/core": "0.28.0" }, "peerDependencies": { - "@uppy/core": "^0.28.0" + "@uppy/core": "^0.29.0" } } diff --git a/packages/@uppy/informer/package.json b/packages/@uppy/informer/package.json index 88e6f0dda..18a8cbd95 100644 --- a/packages/@uppy/informer/package.json +++ b/packages/@uppy/informer/package.json @@ -31,6 +31,6 @@ "@uppy/core": "0.28.0" }, "peerDependencies": { - "@uppy/core": "^0.28.0" + "@uppy/core": "^0.29.0" } } diff --git a/packages/@uppy/instagram/package.json b/packages/@uppy/instagram/package.json index bcb2f5baa..e9f14d764 100644 --- a/packages/@uppy/instagram/package.json +++ b/packages/@uppy/instagram/package.json @@ -33,6 +33,6 @@ "@uppy/core": "0.28.0" }, "peerDependencies": { - "@uppy/core": "^0.28.0" + "@uppy/core": "^0.29.0" } } diff --git a/packages/@uppy/progress-bar/package.json b/packages/@uppy/progress-bar/package.json index db7d7d294..6f9654890 100644 --- a/packages/@uppy/progress-bar/package.json +++ b/packages/@uppy/progress-bar/package.json @@ -31,6 +31,6 @@ "@uppy/core": "0.28.0" }, "peerDependencies": { - "@uppy/core": "^0.28.0" + "@uppy/core": "^0.29.0" } } diff --git a/packages/@uppy/provider-views/package.json b/packages/@uppy/provider-views/package.json index 37439f1b2..efd194d8f 100644 --- a/packages/@uppy/provider-views/package.json +++ b/packages/@uppy/provider-views/package.json @@ -28,6 +28,6 @@ "@uppy/core": "0.28.0" }, "peerDependencies": { - "@uppy/core": "^0.28.0" + "@uppy/core": "^0.29.0" } } diff --git a/packages/@uppy/react/package.json b/packages/@uppy/react/package.json index 206fbc0a0..b64183ad4 100644 --- a/packages/@uppy/react/package.json +++ b/packages/@uppy/react/package.json @@ -33,6 +33,6 @@ "@uppy/core": "0.28.0" }, "peerDependencies": { - "@uppy/core": "^0.28.0" + "@uppy/core": "^0.29.0" } } diff --git a/packages/@uppy/redux-dev-tools/package.json b/packages/@uppy/redux-dev-tools/package.json index 835176bee..47afc0bcf 100644 --- a/packages/@uppy/redux-dev-tools/package.json +++ b/packages/@uppy/redux-dev-tools/package.json @@ -25,6 +25,6 @@ "@uppy/core": "0.28.0" }, "peerDependencies": { - "@uppy/core": "^0.28.0" + "@uppy/core": "^0.29.0" } } diff --git a/packages/@uppy/status-bar/package.json b/packages/@uppy/status-bar/package.json index 4a19cbf1d..237b25764 100644 --- a/packages/@uppy/status-bar/package.json +++ b/packages/@uppy/status-bar/package.json @@ -37,6 +37,6 @@ "@uppy/core": "0.28.0" }, "peerDependencies": { - "@uppy/core": "^0.28.0" + "@uppy/core": "^0.29.0" } } diff --git a/packages/@uppy/thumbnail-generator/package.json b/packages/@uppy/thumbnail-generator/package.json index 61abed386..97aa79e3c 100644 --- a/packages/@uppy/thumbnail-generator/package.json +++ b/packages/@uppy/thumbnail-generator/package.json @@ -30,6 +30,6 @@ "namespace-emitter": "^2.0.1" }, "peerDependencies": { - "@uppy/core": "^0.28.0" + "@uppy/core": "^0.29.0" } } diff --git a/packages/@uppy/transloadit/package.json b/packages/@uppy/transloadit/package.json index 2648b4d31..27641e8c9 100644 --- a/packages/@uppy/transloadit/package.json +++ b/packages/@uppy/transloadit/package.json @@ -39,6 +39,6 @@ "@uppy/core": "0.28.0" }, "peerDependencies": { - "@uppy/core": "^0.28.0" + "@uppy/core": "^0.29.0" } } diff --git a/packages/@uppy/tus/package.json b/packages/@uppy/tus/package.json index 7cad34731..044a41490 100644 --- a/packages/@uppy/tus/package.json +++ b/packages/@uppy/tus/package.json @@ -31,6 +31,6 @@ "@uppy/core": "0.28.0" }, "peerDependencies": { - "@uppy/core": "^0.28.0" + "@uppy/core": "^0.29.0" } } diff --git a/packages/@uppy/url/package.json b/packages/@uppy/url/package.json index 8dc93a9b2..6450fc535 100644 --- a/packages/@uppy/url/package.json +++ b/packages/@uppy/url/package.json @@ -31,6 +31,6 @@ "@uppy/core": "0.28.0" }, "peerDependencies": { - "@uppy/core": "^0.28.0" + "@uppy/core": "^0.29.0" } } diff --git a/packages/@uppy/webcam/package.json b/packages/@uppy/webcam/package.json index 8a6be9730..a8983ba26 100644 --- a/packages/@uppy/webcam/package.json +++ b/packages/@uppy/webcam/package.json @@ -34,6 +34,6 @@ "@uppy/core": "0.28.0" }, "peerDependencies": { - "@uppy/core": "^0.28.0" + "@uppy/core": "^0.29.0" } } diff --git a/packages/@uppy/xhr-upload/package.json b/packages/@uppy/xhr-upload/package.json index 1d16a61b6..8a0abefd8 100644 --- a/packages/@uppy/xhr-upload/package.json +++ b/packages/@uppy/xhr-upload/package.json @@ -33,6 +33,6 @@ "@uppy/core": "0.28.0" }, "peerDependencies": { - "@uppy/core": "^0.28.0" + "@uppy/core": "^0.29.0" } } From c68f2c7e68d2c12f8a8fb7119f1dae4ca08e4174 Mon Sep 17 00:00:00 2001 From: Artur Paikin Date: Thu, 29 Nov 2018 23:34:48 +0300 Subject: [PATCH 19/41] Release --- README.md | 62 ++++++++++--------- bin/upload-to-cdn.sh | 2 +- examples/cdn-example/index.html | 4 +- .../uppy-with-companion/client/index.html | 4 +- packages/@uppy/aws-s3-multipart/package.json | 6 +- packages/@uppy/aws-s3/package.json | 8 +-- packages/@uppy/companion/package.json | 2 +- packages/@uppy/core/package.json | 4 +- packages/@uppy/dashboard/package.json | 16 ++--- packages/@uppy/drag-drop/package.json | 6 +- packages/@uppy/dropbox/package.json | 8 +-- packages/@uppy/file-input/package.json | 6 +- packages/@uppy/form/package.json | 6 +- packages/@uppy/golden-retriever/package.json | 6 +- packages/@uppy/google-drive/package.json | 8 +-- packages/@uppy/informer/package.json | 6 +- packages/@uppy/instagram/package.json | 8 +-- packages/@uppy/progress-bar/package.json | 6 +- packages/@uppy/provider-views/package.json | 6 +- packages/@uppy/react/package.json | 14 ++--- packages/@uppy/redux-dev-tools/package.json | 4 +- packages/@uppy/status-bar/package.json | 6 +- .../@uppy/thumbnail-generator/package.json | 6 +- packages/@uppy/transloadit/package.json | 10 +-- packages/@uppy/tus/package.json | 6 +- packages/@uppy/url/package.json | 6 +- packages/@uppy/utils/package.json | 2 +- packages/@uppy/webcam/package.json | 6 +- packages/@uppy/xhr-upload/package.json | 6 +- packages/uppy/package.json | 46 +++++++------- website/src/docs/index.md | 10 +-- website/src/examples/i18n/app.html | 4 +- website/themes/uppy/layout/index.ejs | 4 +- 33 files changed, 154 insertions(+), 150 deletions(-) diff --git a/README.md b/README.md index 53c85d8e4..374034fc5 100644 --- a/README.md +++ b/README.md @@ -65,7 +65,7 @@ $ npm install @uppy/core @uppy/dashboard @uppy/tus We recommend installing from npm and then using a module bundler such as [Webpack](http://webpack.github.io/), [Browserify](http://browserify.org/) or [Rollup.js](http://rollupjs.org/). -Add CSS [uppy.min.css](https://transloadit.edgly.net/releases/uppy/v0.28.0/dist/uppy.min.css), either to `` of your HTML page or include in JS, if your bundler of choice supports it — transforms and plugins are available for Browserify and Webpack. +Add CSS [uppy.min.css](https://transloadit.edgly.net/releases/uppy/v0.29.0/dist/uppy.min.css), either to `` of your HTML page or include in JS, if your bundler of choice supports it — transforms and plugins are available for Browserify and Webpack. Alternatively, you can also use a pre-built bundle from Transloadit's CDN: Edgly. In that case `Uppy` will attach itself to the global `window.Uppy` object. @@ -73,10 +73,10 @@ Alternatively, you can also use a pre-built bundle from Transloadit's CDN: Edgly ```html - + - +
@@ -163,7 +163,7 @@ If you're using Uppy via a script tag, you can load the polyfills from [JSDelivr ```html - + ``` ## FAQ @@ -228,53 +228,57 @@ Use Uppy in your project? [Let us know](https://github.com/transloadit/uppy/issu :---: |:---: |:---: |:---: |:---: |:---: | [kiloreux](https://github.com/kiloreux) |[sadovnychyi](https://github.com/sadovnychyi) |[richardwillars](https://github.com/richardwillars) |[zcallan](https://github.com/zcallan) |[wilkoklak](https://github.com/wilkoklak) |[oliverpool](https://github.com/oliverpool) | -[nqst](https://github.com/nqst) |[janko-m](https://github.com/janko-m) |[DJWassink](https://github.com/DJWassink) |[taoqf](https://github.com/taoqf) |[bertho-zero](https://github.com/bertho-zero) |[frederikhors](https://github.com/frederikhors) | +[nqst](https://github.com/nqst) |[janko-m](https://github.com/janko-m) |[DJWassink](https://github.com/DJWassink) |[taoqf](https://github.com/taoqf) |[gavboulton](https://github.com/gavboulton) |[bertho-zero](https://github.com/bertho-zero) | :---: |:---: |:---: |:---: |:---: |:---: | -[nqst](https://github.com/nqst) |[janko-m](https://github.com/janko-m) |[DJWassink](https://github.com/DJWassink) |[taoqf](https://github.com/taoqf) |[bertho-zero](https://github.com/bertho-zero) |[frederikhors](https://github.com/frederikhors) | +[nqst](https://github.com/nqst) |[janko-m](https://github.com/janko-m) |[DJWassink](https://github.com/DJWassink) |[taoqf](https://github.com/taoqf) |[gavboulton](https://github.com/gavboulton) |[bertho-zero](https://github.com/bertho-zero) | -[pauln](https://github.com/pauln) |[toadkicker](https://github.com/toadkicker) |[gavboulton](https://github.com/gavboulton) |[ogtfaber](https://github.com/ogtfaber) |[mrbatista](https://github.com/mrbatista) |[sunil-shrestha](https://github.com/sunil-shrestha) | +[frederikhors](https://github.com/frederikhors) |[pauln](https://github.com/pauln) |[toadkicker](https://github.com/toadkicker) |[mrbatista](https://github.com/mrbatista) |[phitranphitranphitran](https://github.com/phitranphitranphitran) |[sunil-shrestha](https://github.com/sunil-shrestha) | :---: |:---: |:---: |:---: |:---: |:---: | -[pauln](https://github.com/pauln) |[toadkicker](https://github.com/toadkicker) |[gavboulton](https://github.com/gavboulton) |[ogtfaber](https://github.com/ogtfaber) |[mrbatista](https://github.com/mrbatista) |[sunil-shrestha](https://github.com/sunil-shrestha) | +[frederikhors](https://github.com/frederikhors) |[pauln](https://github.com/pauln) |[toadkicker](https://github.com/toadkicker) |[mrbatista](https://github.com/mrbatista) |[phitranphitranphitran](https://github.com/phitranphitranphitran) |[sunil-shrestha](https://github.com/sunil-shrestha) | -[ap--](https://github.com/ap--) |[tim-kos](https://github.com/tim-kos) |[phitranphitranphitran](https://github.com/phitranphitranphitran) |[rosenfeld](https://github.com/rosenfeld) |[Burkes](https://github.com/Burkes) |[Martin005](https://github.com/Martin005) | +[tranvansang](https://github.com/tranvansang) |[ap--](https://github.com/ap--) |[tim-kos](https://github.com/tim-kos) |[ogtfaber](https://github.com/ogtfaber) |[btrice](https://github.com/btrice) |[pekala](https://github.com/pekala) | :---: |:---: |:---: |:---: |:---: |:---: | -[ap--](https://github.com/ap--) |[tim-kos](https://github.com/tim-kos) |[phitranphitranphitran](https://github.com/phitranphitranphitran) |[rosenfeld](https://github.com/rosenfeld) |[Burkes](https://github.com/Burkes) |[Martin005](https://github.com/Martin005) | +[tranvansang](https://github.com/tranvansang) |[ap--](https://github.com/ap--) |[tim-kos](https://github.com/tim-kos) |[ogtfaber](https://github.com/ogtfaber) |[btrice](https://github.com/btrice) |[pekala](https://github.com/pekala) | -[btrice](https://github.com/btrice) |[richartkeil](https://github.com/richartkeil) |[richmeij](https://github.com/richmeij) |[pekala](https://github.com/pekala) |[ThomasG77](https://github.com/ThomasG77) |[zhuangya](https://github.com/zhuangya) | +[Martin005](https://github.com/Martin005) |[martiuslim](https://github.com/martiuslim) |[msand](https://github.com/msand) |[richartkeil](https://github.com/richartkeil) |[Burkes](https://github.com/Burkes) |[rosenfeld](https://github.com/rosenfeld) | :---: |:---: |:---: |:---: |:---: |:---: | -[btrice](https://github.com/btrice) |[richartkeil](https://github.com/richartkeil) |[richmeij](https://github.com/richmeij) |[pekala](https://github.com/pekala) |[ThomasG77](https://github.com/ThomasG77) |[zhuangya](https://github.com/zhuangya) | +[Martin005](https://github.com/Martin005) |[martiuslim](https://github.com/martiuslim) |[msand](https://github.com/msand) |[richartkeil](https://github.com/richartkeil) |[Burkes](https://github.com/Burkes) |[rosenfeld](https://github.com/rosenfeld) | -[fortrieb](https://github.com/fortrieb) |[muhammadInam](https://github.com/muhammadInam) |[martiuslim](https://github.com/martiuslim) |[ajschmidt8](https://github.com/ajschmidt8) |[asmt3](https://github.com/asmt3) |[tuoxiansp](https://github.com/tuoxiansp) | +[ThomasG77](https://github.com/ThomasG77) |[zhuangya](https://github.com/zhuangya) |[fortrieb](https://github.com/fortrieb) |[muhammadInam](https://github.com/muhammadInam) |[richmeij](https://github.com/richmeij) |[ajschmidt8](https://github.com/ajschmidt8) | :---: |:---: |:---: |:---: |:---: |:---: | -[fortrieb](https://github.com/fortrieb) |[muhammadInam](https://github.com/muhammadInam) |[martiuslim](https://github.com/martiuslim) |[ajschmidt8](https://github.com/ajschmidt8) |[asmt3](https://github.com/asmt3) |[tuoxiansp](https://github.com/tuoxiansp) | +[ThomasG77](https://github.com/ThomasG77) |[zhuangya](https://github.com/zhuangya) |[fortrieb](https://github.com/fortrieb) |[muhammadInam](https://github.com/muhammadInam) |[richmeij](https://github.com/richmeij) |[ajschmidt8](https://github.com/ajschmidt8) | -[functino](https://github.com/functino) |[radarhere](https://github.com/radarhere) |[azeemba](https://github.com/azeemba) |[bducharme](https://github.com/bducharme) |[chao](https://github.com/chao) |[csprance](https://github.com/csprance) | +[asmt3](https://github.com/asmt3) |[tuoxiansp](https://github.com/tuoxiansp) |[functino](https://github.com/functino) |[radarhere](https://github.com/radarhere) |[azeemba](https://github.com/azeemba) |[bducharme](https://github.com/bducharme) | :---: |:---: |:---: |:---: |:---: |:---: | -[functino](https://github.com/functino) |[radarhere](https://github.com/radarhere) |[azeemba](https://github.com/azeemba) |[bducharme](https://github.com/bducharme) |[chao](https://github.com/chao) |[csprance](https://github.com/csprance) | +[asmt3](https://github.com/asmt3) |[tuoxiansp](https://github.com/tuoxiansp) |[functino](https://github.com/functino) |[radarhere](https://github.com/radarhere) |[azeemba](https://github.com/azeemba) |[bducharme](https://github.com/bducharme) | -[cbush06](https://github.com/cbush06) |[danmichaelo](https://github.com/danmichaelo) |[mrboomer](https://github.com/mrboomer) |[yoldar](https://github.com/yoldar) |[lowsprofile](https://github.com/lowsprofile) |[FWirtz](https://github.com/FWirtz) | +[chao](https://github.com/chao) |[csprance](https://github.com/csprance) |[cbush06](https://github.com/cbush06) |[danmichaelo](https://github.com/danmichaelo) |[mrboomer](https://github.com/mrboomer) |[yoldar](https://github.com/yoldar) | :---: |:---: |:---: |:---: |:---: |:---: | -[cbush06](https://github.com/cbush06) |[danmichaelo](https://github.com/danmichaelo) |[mrboomer](https://github.com/mrboomer) |[yoldar](https://github.com/yoldar) |[lowsprofile](https://github.com/lowsprofile) |[FWirtz](https://github.com/FWirtz) | +[chao](https://github.com/chao) |[csprance](https://github.com/csprance) |[cbush06](https://github.com/cbush06) |[danmichaelo](https://github.com/danmichaelo) |[mrboomer](https://github.com/mrboomer) |[yoldar](https://github.com/yoldar) | -[geoffappleford](https://github.com/geoffappleford) |[gjungb](https://github.com/gjungb) |[JacobMGEvans](https://github.com/JacobMGEvans) |[jcjmcclean](https://github.com/jcjmcclean) |[vith](https://github.com/vith) |[jessica-coursera](https://github.com/jessica-coursera) | +[lowsprofile](https://github.com/lowsprofile) |[FWirtz](https://github.com/FWirtz) |[geoffappleford](https://github.com/geoffappleford) |[gjungb](https://github.com/gjungb) |[JacobMGEvans](https://github.com/JacobMGEvans) |[jcjmcclean](https://github.com/jcjmcclean) | :---: |:---: |:---: |:---: |:---: |:---: | -[geoffappleford](https://github.com/geoffappleford) |[gjungb](https://github.com/gjungb) |[JacobMGEvans](https://github.com/JacobMGEvans) |[jcjmcclean](https://github.com/jcjmcclean) |[vith](https://github.com/vith) |[jessica-coursera](https://github.com/jessica-coursera) | +[lowsprofile](https://github.com/lowsprofile) |[FWirtz](https://github.com/FWirtz) |[geoffappleford](https://github.com/geoffappleford) |[gjungb](https://github.com/gjungb) |[JacobMGEvans](https://github.com/JacobMGEvans) |[jcjmcclean](https://github.com/jcjmcclean) | -[firesharkstudios](https://github.com/firesharkstudios) |[dviry](https://github.com/dviry) |[leods92](https://github.com/leods92) |[lucaperret](https://github.com/lucaperret) |[mperrando](https://github.com/mperrando) |[mnafees](https://github.com/mnafees) | +[vith](https://github.com/vith) |[jessica-coursera](https://github.com/jessica-coursera) |[jderrough](https://github.com/jderrough) |[firesharkstudios](https://github.com/firesharkstudios) |[dviry](https://github.com/dviry) |[leods92](https://github.com/leods92) | :---: |:---: |:---: |:---: |:---: |:---: | -[firesharkstudios](https://github.com/firesharkstudios) |[dviry](https://github.com/dviry) |[leods92](https://github.com/leods92) |[lucaperret](https://github.com/lucaperret) |[mperrando](https://github.com/mperrando) |[mnafees](https://github.com/mnafees) | +[vith](https://github.com/vith) |[jessica-coursera](https://github.com/jessica-coursera) |[jderrough](https://github.com/jderrough) |[firesharkstudios](https://github.com/firesharkstudios) |[dviry](https://github.com/dviry) |[leods92](https://github.com/leods92) | -[phillipalexander](https://github.com/phillipalexander) |[luarmr](https://github.com/luarmr) |[phobos101](https://github.com/phobos101) |[fortunto2](https://github.com/fortunto2) |[sergei-zelinsky](https://github.com/sergei-zelinsky) |[tomsaleeba](https://github.com/tomsaleeba) | +[lucaperret](https://github.com/lucaperret) |[mperrando](https://github.com/mperrando) |[mnafees](https://github.com/mnafees) |[phillipalexander](https://github.com/phillipalexander) |[luarmr](https://github.com/luarmr) |[phobos101](https://github.com/phobos101) | :---: |:---: |:---: |:---: |:---: |:---: | -[phillipalexander](https://github.com/phillipalexander) |[luarmr](https://github.com/luarmr) |[phobos101](https://github.com/phobos101) |[fortunto2](https://github.com/fortunto2) |[sergei-zelinsky](https://github.com/sergei-zelinsky) |[tomsaleeba](https://github.com/tomsaleeba) | +[lucaperret](https://github.com/lucaperret) |[mperrando](https://github.com/mperrando) |[mnafees](https://github.com/mnafees) |[phillipalexander](https://github.com/phillipalexander) |[luarmr](https://github.com/luarmr) |[phobos101](https://github.com/phobos101) | -[tranvansang](https://github.com/tranvansang) |[vially](https://github.com/vially) |[eltercero](https://github.com/eltercero) |[xhocquet](https://github.com/xhocquet) |[avalla](https://github.com/avalla) |[bartvde](https://github.com/bartvde) | +[fortunto2](https://github.com/fortunto2) |[sergei-zelinsky](https://github.com/sergei-zelinsky) |[tomsaleeba](https://github.com/tomsaleeba) |[vially](https://github.com/vially) |[eltercero](https://github.com/eltercero) |[xhocquet](https://github.com/xhocquet) | :---: |:---: |:---: |:---: |:---: |:---: | -[tranvansang](https://github.com/tranvansang) |[vially](https://github.com/vially) |[eltercero](https://github.com/eltercero) |[xhocquet](https://github.com/xhocquet) |[avalla](https://github.com/avalla) |[bartvde](https://github.com/bartvde) | +[fortunto2](https://github.com/fortunto2) |[sergei-zelinsky](https://github.com/sergei-zelinsky) |[tomsaleeba](https://github.com/tomsaleeba) |[vially](https://github.com/vially) |[eltercero](https://github.com/eltercero) |[xhocquet](https://github.com/xhocquet) | -[c0b41](https://github.com/c0b41) |[franckl](https://github.com/franckl) |[luntta](https://github.com/luntta) |[rhymes](https://github.com/rhymes) |[amitport](https://github.com/amitport) | -:---: |:---: |:---: |:---: |:---: | -[c0b41](https://github.com/c0b41) |[franckl](https://github.com/franckl) |[luntta](https://github.com/luntta) |[rhymes](https://github.com/rhymes) |[amitport](https://github.com/amitport) | +[avalla](https://github.com/avalla) |[bartvde](https://github.com/bartvde) |[c0b41](https://github.com/c0b41) |[craigcbrunner](https://github.com/craigcbrunner) |[franckl](https://github.com/franckl) |[luntta](https://github.com/luntta) | +:---: |:---: |:---: |:---: |:---: |:---: | +[avalla](https://github.com/avalla) |[bartvde](https://github.com/bartvde) |[c0b41](https://github.com/c0b41) |[craigcbrunner](https://github.com/craigcbrunner) |[franckl](https://github.com/franckl) |[luntta](https://github.com/luntta) | + +[rhymes](https://github.com/rhymes) |[amitport](https://github.com/amitport) | +:---: |:---: | +[rhymes](https://github.com/rhymes) |[amitport](https://github.com/amitport) | ## License diff --git a/bin/upload-to-cdn.sh b/bin/upload-to-cdn.sh index 31d668363..aff66390e 100755 --- a/bin/upload-to-cdn.sh +++ b/bin/upload-to-cdn.sh @@ -8,7 +8,7 @@ # - Checks if a tag is being built (on Travis - otherwise opts to continue execution regardless) # - Installs AWS CLI if needed # - Assumed a fully built uppy is in root dir (unless a specific tag was specified, then it's fetched from npm) -# - Runs npm pack, and stores files to e.g. https://transloadit.edgly.net/releases/uppy/v0.28.0/dist/uppy.css +# - Runs npm pack, and stores files to e.g. https://transloadit.edgly.net/releases/uppy/v0.29.0/dist/uppy.css # - Uses local package by default, if [version] argument was specified, takes package from npm # # Run as: diff --git a/examples/cdn-example/index.html b/examples/cdn-example/index.html index f7adf9db6..5f3896527 100644 --- a/examples/cdn-example/index.html +++ b/examples/cdn-example/index.html @@ -4,11 +4,11 @@ - + - + + + + ``` 2\. Add CSS to ``: ``` html - + ``` 3\. Initialize at the bottom of the closing `` tag: @@ -168,5 +168,5 @@ If you're using Uppy via a script tag, you can load the polyfills from [JSDelivr ```html - + ``` diff --git a/website/src/examples/i18n/app.html b/website/src/examples/i18n/app.html index c231e76e5..37c833ef4 100644 --- a/website/src/examples/i18n/app.html +++ b/website/src/examples/i18n/app.html @@ -1,11 +1,11 @@ +https://transloadit.edgly.net/releases/uppy/v0.29.0/dist/uppy.min.css -->
+https://transloadit.edgly.net/releases/uppy/v0.29.0/dist/uppy.min.js --> + + @@ -83,7 +83,7 @@ const uppy = Uppy() .use(XHRUpload, { endpoint: 'https://api2.transloadit.com' })   uppy.on('complete', (result) => { - console.log(`Upload complete! We’ve uploaded these files: ${result.successful}`) + console.log('Upload complete! We’ve uploaded these files:', result.successful) }) ``` From 8f9946346904217e714e256db06b759cc3bb66b0 Mon Sep 17 00:00:00 2001 From: Ifedapo Olarewaju Date: Sun, 2 Dec 2018 22:26:52 +0100 Subject: [PATCH 24/41] refactor: deprecate debugLogger --- .../@uppy/companion/src/server/Uploader.js | 1 - .../src/server/controllers/callback.js | 3 ++- .../companion/src/server/controllers/get.js | 6 ++--- .../companion/src/server/controllers/url.js | 12 +++++----- packages/@uppy/companion/src/server/logger.js | 10 ++++---- .../@uppy/companion/src/server/middlewares.js | 5 ++-- packages/@uppy/companion/src/uppy.js | 24 ------------------- 7 files changed, 19 insertions(+), 42 deletions(-) diff --git a/packages/@uppy/companion/src/server/Uploader.js b/packages/@uppy/companion/src/server/Uploader.js index e7958f1fc..2c7da7b11 100644 --- a/packages/@uppy/companion/src/server/Uploader.js +++ b/packages/@uppy/companion/src/server/Uploader.js @@ -400,7 +400,6 @@ class Uploader { } Uploader.FILE_NAME_PREFIX = 'uppy-file' -// @todo do a proper migration to change this name Uploader.STORAGE_PREFIX = 'companion' module.exports = Uploader diff --git a/packages/@uppy/companion/src/server/controllers/callback.js b/packages/@uppy/companion/src/server/controllers/callback.js index b771487da..4b3040d3d 100644 --- a/packages/@uppy/companion/src/server/controllers/callback.js +++ b/packages/@uppy/companion/src/server/controllers/callback.js @@ -6,6 +6,7 @@ const tokenService = require('../helpers/jwt') const parseUrl = require('url').parse const { hasMatch } = require('../helpers/utils') const oAuthState = require('../helpers/oauth-state') +const logger = require('../logger') /** * @@ -22,7 +23,7 @@ module.exports = function callback (req, res, next) { // TODO see if the access_token can be transported in a different way that url query params req.uppy.providerTokens[providerName] = req.query.access_token - req.uppy.debugLog(`Generating auth token for provider ${providerName}.`) + logger.debug(`Generating auth token for provider ${providerName}.`) const uppyAuthToken = tokenService.generateToken(req.uppy.providerTokens, req.uppy.options.secret) // add the token to cookies for thumbnail/image requests tokenService.addToCookies(res, uppyAuthToken, req.uppy.options) diff --git a/packages/@uppy/companion/src/server/controllers/get.js b/packages/@uppy/companion/src/server/controllers/get.js index 86fcfe241..2e08c8add 100644 --- a/packages/@uppy/companion/src/server/controllers/get.js +++ b/packages/@uppy/companion/src/server/controllers/get.js @@ -17,7 +17,7 @@ function get (req, res) { return res.status(400).json({error: 'unable to determine file size'}) } - req.uppy.debugLog('Instantiating uploader.') + logger.debug('Instantiating uploader.') const uploader = new Uploader({ uppyOptions: req.uppy.options, endpoint: body.endpoint, @@ -37,10 +37,10 @@ function get (req, res) { // wait till the client has connected to the socket, before starting // the download, so that the client can receive all download/upload progress. - req.uppy.debugLog('Waiting for socket connection before beginning remote download.') + logger.debug('Waiting for socket connection before beginning remote download.') // waiting for socketReady. uploader.onSocketReady(() => { - req.uppy.debugLog('Socket connection received. Starting remote download.') + logger.debug('Socket connection received. Starting remote download.') provider.download({ id, token, query: req.query }, uploader.handleChunk.bind(uploader)) }) const response = uploader.getResponse() diff --git a/packages/@uppy/companion/src/server/controllers/url.js b/packages/@uppy/companion/src/server/controllers/url.js index 97d1edc53..bc7244480 100644 --- a/packages/@uppy/companion/src/server/controllers/url.js +++ b/packages/@uppy/companion/src/server/controllers/url.js @@ -19,10 +19,10 @@ module.exports = () => { * @param {object} res expressJS response object */ const meta = (req, res) => { - req.uppy.debugLog('URL file import handler running') + logger.debug('URL file import handler running') if (!validator.isURL(req.body.url, { require_protocol: true, require_tld: !req.uppy.options.debug })) { - req.uppy.debugLog('Invalid request body detected. Exiting url meta handler.') + logger.debug('Invalid request body detected. Exiting url meta handler.') return res.status(400).json({error: 'Invalid request body'}) } @@ -42,13 +42,13 @@ const meta = (req, res) => { * @param {object} res expressJS response object */ const get = (req, res) => { - req.uppy.debugLog('URL file import handler running') + logger.debug('URL file import handler running') utils.getURLMeta(req.body.url) .then(({ size }) => { // @ts-ignore const { filePath } = req.uppy.options - req.uppy.debugLog('Instantiating uploader.') + logger.debug('Instantiating uploader.') const uploader = new Uploader({ uppyOptions: req.uppy.options, endpoint: req.body.endpoint, @@ -61,9 +61,9 @@ const get = (req, res) => { headers: req.body.headers }) - req.uppy.debugLog('Waiting for socket connection before beginning remote download.') + logger.debug('Waiting for socket connection before beginning remote download.') uploader.onSocketReady(() => { - req.uppy.debugLog('Socket connection received. Starting remote download.') + logger.debug('Socket connection received. Starting remote download.') downloadURL(req.body.url, uploader.handleChunk.bind(uploader)) }) diff --git a/packages/@uppy/companion/src/server/logger.js b/packages/@uppy/companion/src/server/logger.js index 62a580662..07608bcbc 100644 --- a/packages/@uppy/companion/src/server/logger.js +++ b/packages/@uppy/companion/src/server/logger.js @@ -1,7 +1,7 @@ /** * INFO level log * @param {string} msg the message to log - * @param {string} tag a unique tag to easily search for this message + * @param {string=} tag a unique tag to easily search for this message */ exports.info = (msg, tag) => { log(msg, tag, 'info') @@ -10,7 +10,7 @@ exports.info = (msg, tag) => { /** * WARN level log * @param {string} msg the message to log - * @param {string} tag a unique tag to easily search for this message + * @param {string=} tag a unique tag to easily search for this message */ exports.warn = (msg, tag) => { log(msg, tag, 'warn') @@ -19,7 +19,7 @@ exports.warn = (msg, tag) => { /** * ERROR level log * @param {string | Error} msg the message to log - * @param {string} tag a unique tag to easily search for this message + * @param {string=} tag a unique tag to easily search for this message */ exports.error = (msg, tag) => { log(msg, tag, 'error') @@ -28,7 +28,7 @@ exports.error = (msg, tag) => { /** * DEBUG level log * @param {string} msg the message to log - * @param {string} tag a unique tag to easily search for this message + * @param {string=} tag a unique tag to easily search for this message */ exports.debug = (msg, tag) => { if (process.env.NODE_ENV !== 'production') { @@ -45,5 +45,5 @@ exports.debug = (msg, tag) => { const log = (msg, tag, level) => { // @TODO add some colors based on log level const time = new Date().toISOString() - console.log(`uppy: ${time} [${level}] ${tag} ${msg}`) + console.log(`uppy: ${time} [${level}] ${tag || ''} ${msg}`) } diff --git a/packages/@uppy/companion/src/server/middlewares.js b/packages/@uppy/companion/src/server/middlewares.js index f839c20d4..2842ca6fc 100644 --- a/packages/@uppy/companion/src/server/middlewares.js +++ b/packages/@uppy/companion/src/server/middlewares.js @@ -1,13 +1,14 @@ const tokenService = require('./helpers/jwt') +const logger = require('./logger') exports.hasSessionAndProvider = (req, res, next) => { if (!req.session || !req.body) { - req.uppy.debugLog('No session/body attached to req object. Exiting dispatcher.') + logger.debug('No session/body attached to req object. Exiting dispatcher.') return res.sendStatus(400) } if (!req.uppy.provider) { - req.uppy.debugLog('No provider/provider-handler found. Exiting dispatcher.') + logger.debug('No provider/provider-handler found. Exiting dispatcher.') return res.sendStatus(400) } diff --git a/packages/@uppy/companion/src/uppy.js b/packages/@uppy/companion/src/uppy.js index 6960512cf..c35aa26e9 100644 --- a/packages/@uppy/companion/src/uppy.js +++ b/packages/@uppy/companion/src/uppy.js @@ -182,29 +182,6 @@ const interceptGrantErrorResponse = interceptor((req, res) => { } }) -/** - * returns a logger function, that would log a message only if - * the debug option is set to true - * - * @param {{debug: boolean}} options - * @returns {function} - */ -const getDebugLogger = (options) => { - // TODO: deprecate this. - // TODO: add line number and originating file - /** - * - * @param {string} message - */ - const conditonalLogger = (message) => { - if (options.debug) { - logger.debug(message, 'debugLog') - } - } - - return conditonalLogger -} - /** * * @param {object} options @@ -241,7 +218,6 @@ const getOptionsMiddleware = (options) => { options, s3Client, authToken: req.header('uppy-auth-token'), - debugLog: getDebugLogger(options), buildURL: getURLBuilder(options) } next() From b6df7174d5b5b8fd4b2647c14626482ca570a1f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9e=20Kooi?= Date: Thu, 22 Nov 2018 16:41:41 +0100 Subject: [PATCH 25/41] Disable upload progress reporting if unsupported in browser. --- packages/@uppy/core/src/index.js | 2 ++ .../@uppy/core/src/supportsUploadProgress.js | 30 +++++++++++++++++++ packages/@uppy/status-bar/src/StatusBar.js | 14 +++++++-- packages/@uppy/status-bar/src/index.js | 1 + 4 files changed, 45 insertions(+), 2 deletions(-) create mode 100644 packages/@uppy/core/src/supportsUploadProgress.js diff --git a/packages/@uppy/core/src/index.js b/packages/@uppy/core/src/index.js index c69f31a51..a7517b9f5 100644 --- a/packages/@uppy/core/src/index.js +++ b/packages/@uppy/core/src/index.js @@ -9,6 +9,7 @@ const getFileType = require('@uppy/utils/lib/getFileType') const getFileNameAndExtension = require('@uppy/utils/lib/getFileNameAndExtension') const generateFileID = require('@uppy/utils/lib/generateFileID') const getTimeStamp = require('@uppy/utils/lib/getTimeStamp') +const supportsUploadProgress = require('./supportsUploadProgress') const Plugin = require('./Plugin') // Exported from here. /** @@ -118,6 +119,7 @@ class Uppy { currentUploads: {}, allowNewUpload: true, capabilities: { + uploadProgress: supportsUploadProgress(), resumableUploads: false }, totalProgress: 0, diff --git a/packages/@uppy/core/src/supportsUploadProgress.js b/packages/@uppy/core/src/supportsUploadProgress.js new file mode 100644 index 000000000..4826f2d31 --- /dev/null +++ b/packages/@uppy/core/src/supportsUploadProgress.js @@ -0,0 +1,30 @@ +// Edge 15.x does not fire 'progress' events on uploads. +// See https://github.com/transloadit/uppy/issues/945 +// And https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/12224510/ +module.exports = function supportsUploadProgress () { + const userAgent = typeof navigator !== 'undefined' ? navigator.userAgent : null + // Assume it works because basically everything supports progress events. + if (!userAgent) return true + + const m = /Edge\/(\d+\.\d+)/.exec(userAgent) + if (!m) return true + + const edgeVersion = m[1] + const [major, minor] = edgeVersion.split('.') + + // Worked before: + // Edge 40.15063.0.0 + // Microsoft EdgeHTML 15.15063 + if (major < 15 || (major === 15 && minor < 15063)) { + return true + } + + // Fixed in: + // Microsoft EdgeHTML 18.18218 + if (major > 18 || (major === 18 && minor > 18218)) { + return true + } + + // other versions don't work. + return false +} diff --git a/packages/@uppy/status-bar/src/StatusBar.js b/packages/@uppy/status-bar/src/StatusBar.js index ad50887d2..623a3654c 100644 --- a/packages/@uppy/status-bar/src/StatusBar.js +++ b/packages/@uppy/status-bar/src/StatusBar.js @@ -214,6 +214,13 @@ const ProgressDetails = (props) => { } +const UnknownProgressDetails = (props) => { + return
+ { props.i18n('filesUploadedOfTotal', { complete: props.complete, smart_count: props.numUploads }) + ' \u00B7 ' } + { props.i18n('progressUnavailable') } +
+} + const UploadNewlyAddedFiles = (props) => { const uploadBtnClassNames = classNames( 'uppy-u-reset', @@ -241,6 +248,7 @@ const ProgressBarUploading = (props) => { return null } + const supportsUploadProgress = props.capabilities.uploadProgress const title = props.isAllPaused ? props.i18n('paused') : props.i18n('uploading') const showUploadNewlyAddedFiles = props.newFiles && props.isUploadStarted @@ -248,9 +256,11 @@ const ProgressBarUploading = (props) => {
{ !props.isAllPaused ? : null }
-
{title}: {props.totalProgress}%
+
+ {supportsUploadProgress ? `${title}: ${props.totalProgress}%` : title} +
{ !props.isAllPaused && !showUploadNewlyAddedFiles && props.showProgressDetails - ? + ? (supportsUploadProgress ? : ) : null } { showUploadNewlyAddedFiles ? : null } diff --git a/packages/@uppy/status-bar/src/index.js b/packages/@uppy/status-bar/src/index.js index eb79bfb5f..c47c1cf24 100644 --- a/packages/@uppy/status-bar/src/index.js +++ b/packages/@uppy/status-bar/src/index.js @@ -40,6 +40,7 @@ module.exports = class StatusBar extends Plugin { }, dataUploadedOfTotal: '%{complete} of %{total}', xTimeLeft: '%{time} left', + progressUnavailable: 'Unknown time left', uploadXFiles: { 0: 'Upload %{smart_count} file', 1: 'Upload %{smart_count} files' From 41fe68a4c3193ad80c8d1a1e221b936508d9e1d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9e=20Kooi?= Date: Thu, 22 Nov 2018 16:46:31 +0100 Subject: [PATCH 26/41] fix undefined property stuff --- packages/@uppy/status-bar/src/StatusBar.js | 5 ++--- packages/@uppy/status-bar/src/index.js | 4 +++- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/packages/@uppy/status-bar/src/StatusBar.js b/packages/@uppy/status-bar/src/StatusBar.js index 623a3654c..0208e7db8 100644 --- a/packages/@uppy/status-bar/src/StatusBar.js +++ b/packages/@uppy/status-bar/src/StatusBar.js @@ -248,7 +248,6 @@ const ProgressBarUploading = (props) => { return null } - const supportsUploadProgress = props.capabilities.uploadProgress const title = props.isAllPaused ? props.i18n('paused') : props.i18n('uploading') const showUploadNewlyAddedFiles = props.newFiles && props.isUploadStarted @@ -257,10 +256,10 @@ const ProgressBarUploading = (props) => { { !props.isAllPaused ? : null }
- {supportsUploadProgress ? `${title}: ${props.totalProgress}%` : title} + {props.supportsUploadProgress ? `${title}: ${props.totalProgress}%` : title}
{ !props.isAllPaused && !showUploadNewlyAddedFiles && props.showProgressDetails - ? (supportsUploadProgress ? : ) + ? (props.supportsUploadProgress ? : ) : null } { showUploadNewlyAddedFiles ? : null } diff --git a/packages/@uppy/status-bar/src/index.js b/packages/@uppy/status-bar/src/index.js index c47c1cf24..ac06849ff 100644 --- a/packages/@uppy/status-bar/src/index.js +++ b/packages/@uppy/status-bar/src/index.js @@ -223,6 +223,7 @@ module.exports = class StatusBar extends Plugin { const isUploadInProgress = inProgressFiles.length > 0 const resumableUploads = capabilities.resumableUploads || false + const supportsUploadProgress = capabilities.uploadProgress !== false return StatusBarUI({ error, @@ -247,7 +248,8 @@ module.exports = class StatusBar extends Plugin { retryAll: this.uppy.retryAll, cancelAll: this.uppy.cancelAll, startUpload: this.startUpload, - resumableUploads: resumableUploads, + resumableUploads, + supportsUploadProgress, showProgressDetails: this.opts.showProgressDetails, hideUploadButton: this.opts.hideUploadButton, hideRetryButton: this.opts.hideRetryButton, From e4d80313e3bf28e39747957a6498db6d284380f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9e=20Kooi?= Date: Mon, 3 Dec 2018 13:55:16 +0100 Subject: [PATCH 27/41] website: add precompiled es6-promise and whatwg-fetch to fix examples in IE11 cc @arturi Temporary "hotfix" kinda, can be removed when we ship polyfills in the CDN bundle. I just need this rn to test progress reporting in IE 11 is all :D --- website/themes/uppy/layout/layout.ejs | 1 + website/themes/uppy/source/js/polyfills.js | 1 + 2 files changed, 2 insertions(+) create mode 100644 website/themes/uppy/source/js/polyfills.js diff --git a/website/themes/uppy/layout/layout.ejs b/website/themes/uppy/layout/layout.ejs index 6208377bb..172630c5c 100644 --- a/website/themes/uppy/layout/layout.ejs +++ b/website/themes/uppy/layout/layout.ejs @@ -29,6 +29,7 @@ + <%- css('css/main') %> diff --git a/website/themes/uppy/source/js/polyfills.js b/website/themes/uppy/source/js/polyfills.js new file mode 100644 index 000000000..801fd0b90 --- /dev/null +++ b/website/themes/uppy/source/js/polyfills.js @@ -0,0 +1 @@ +require=function(){return function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){return o(e[i][1][r]||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i1)for(var i=1;i-1};Headers.prototype.append=function(name,value){name=normalizeName(name),value=normalizeValue(value);var oldValue=this.map[name];this.map[name]=oldValue?oldValue+","+value:value},Headers.prototype.delete=function(name){delete this.map[normalizeName(name)]},Headers.prototype.get=function(name){return name=normalizeName(name),this.has(name)?this.map[name]:null},Headers.prototype.has=function(name){return this.map.hasOwnProperty(normalizeName(name))},Headers.prototype.set=function(name,value){this.map[normalizeName(name)]=normalizeValue(value)},Headers.prototype.forEach=function(callback,thisArg){for(var name in this.map)this.map.hasOwnProperty(name)&&callback.call(thisArg,this.map[name],name,this)},Headers.prototype.keys=function(){var items=[];return this.forEach(function(value,name){items.push(name)}),iteratorFor(items)},Headers.prototype.values=function(){var items=[];return this.forEach(function(value){items.push(value)}),iteratorFor(items)},Headers.prototype.entries=function(){var items=[];return this.forEach(function(value,name){items.push([name,value])}),iteratorFor(items)},support.iterable&&(Headers.prototype[Symbol.iterator]=Headers.prototype.entries);var methods=["DELETE","GET","HEAD","OPTIONS","POST","PUT"];Request.prototype.clone=function(){return new Request(this,{body:this._bodyInit})},Body.call(Request.prototype),Body.call(Response.prototype),Response.prototype.clone=function(){return new Response(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new Headers(this.headers),url:this.url})},Response.error=function(){var response=new Response(null,{status:0,statusText:""});return response.type="error",response};var redirectStatuses=[301,302,303,307,308];Response.redirect=function(url,status){if(-1===redirectStatuses.indexOf(status))throw new RangeError("Invalid status code");return new Response(null,{status:status,headers:{location:url}})},self.Headers=Headers,self.Request=Request,self.Response=Response,self.fetch=function(input,init){return new Promise(function(resolve,reject){var request=new Request(input,init),xhr=new XMLHttpRequest;xhr.onload=function(){var rawHeaders,headers,options={status:xhr.status,statusText:xhr.statusText,headers:(rawHeaders=xhr.getAllResponseHeaders()||"",headers=new Headers,rawHeaders.replace(/\r?\n[\t ]+/g," ").split(/\r?\n/).forEach(function(line){var parts=line.split(":"),key=parts.shift().trim();if(key){var value=parts.join(":").trim();headers.append(key,value)}}),headers)};options.url="responseURL"in xhr?xhr.responseURL:options.headers.get("X-Request-URL");var body="response"in xhr?xhr.response:xhr.responseText;resolve(new Response(body,options))},xhr.onerror=function(){reject(new TypeError("Network request failed"))},xhr.ontimeout=function(){reject(new TypeError("Network request failed"))},xhr.open(request.method,request.url,!0),"include"===request.credentials?xhr.withCredentials=!0:"omit"===request.credentials&&(xhr.withCredentials=!1),"responseType"in xhr&&support.blob&&(xhr.responseType="blob"),request.headers.forEach(function(value,name){xhr.setRequestHeader(name,value)}),xhr.send(void 0===request._bodyInit?null:request._bodyInit)})},self.fetch.polyfill=!0}function normalizeName(name){if("string"!=typeof name&&(name=String(name)),/[^a-z0-9\-#$%&'*+.\^_`|~]/i.test(name))throw new TypeError("Invalid character in header field name");return name.toLowerCase()}function normalizeValue(value){return"string"!=typeof value&&(value=String(value)),value}function iteratorFor(items){var iterator={next:function(){var value=items.shift();return{done:void 0===value,value:value}}};return support.iterable&&(iterator[Symbol.iterator]=function(){return iterator}),iterator}function Headers(headers){this.map={},headers instanceof Headers?headers.forEach(function(value,name){this.append(name,value)},this):Array.isArray(headers)?headers.forEach(function(header){this.append(header[0],header[1])},this):headers&&Object.getOwnPropertyNames(headers).forEach(function(name){this.append(name,headers[name])},this)}function consumed(body){if(body.bodyUsed)return Promise.reject(new TypeError("Already read"));body.bodyUsed=!0}function fileReaderReady(reader){return new Promise(function(resolve,reject){reader.onload=function(){resolve(reader.result)},reader.onerror=function(){reject(reader.error)}})}function readBlobAsArrayBuffer(blob){var reader=new FileReader,promise=fileReaderReady(reader);return reader.readAsArrayBuffer(blob),promise}function bufferClone(buf){if(buf.slice)return buf.slice(0);var view=new Uint8Array(buf.byteLength);return view.set(new Uint8Array(buf)),view.buffer}function Body(){return this.bodyUsed=!1,this._initBody=function(body){if(this._bodyInit=body,body)if("string"==typeof body)this._bodyText=body;else if(support.blob&&Blob.prototype.isPrototypeOf(body))this._bodyBlob=body;else if(support.formData&&FormData.prototype.isPrototypeOf(body))this._bodyFormData=body;else if(support.searchParams&&URLSearchParams.prototype.isPrototypeOf(body))this._bodyText=body.toString();else if(support.arrayBuffer&&support.blob&&isDataView(body))this._bodyArrayBuffer=bufferClone(body.buffer),this._bodyInit=new Blob([this._bodyArrayBuffer]);else{if(!support.arrayBuffer||!ArrayBuffer.prototype.isPrototypeOf(body)&&!isArrayBufferView(body))throw new Error("unsupported BodyInit type");this._bodyArrayBuffer=bufferClone(body)}else this._bodyText="";this.headers.get("content-type")||("string"==typeof body?this.headers.set("content-type","text/plain;charset=UTF-8"):this._bodyBlob&&this._bodyBlob.type?this.headers.set("content-type",this._bodyBlob.type):support.searchParams&&URLSearchParams.prototype.isPrototypeOf(body)&&this.headers.set("content-type","application/x-www-form-urlencoded;charset=UTF-8"))},support.blob&&(this.blob=function(){var rejected=consumed(this);if(rejected)return rejected;if(this._bodyBlob)return Promise.resolve(this._bodyBlob);if(this._bodyArrayBuffer)return Promise.resolve(new Blob([this._bodyArrayBuffer]));if(this._bodyFormData)throw new Error("could not read FormData body as blob");return Promise.resolve(new Blob([this._bodyText]))},this.arrayBuffer=function(){return this._bodyArrayBuffer?consumed(this)||Promise.resolve(this._bodyArrayBuffer):this.blob().then(readBlobAsArrayBuffer)}),this.text=function(){var blob,reader,promise,rejected=consumed(this);if(rejected)return rejected;if(this._bodyBlob)return blob=this._bodyBlob,reader=new FileReader,promise=fileReaderReady(reader),reader.readAsText(blob),promise;if(this._bodyArrayBuffer)return Promise.resolve(function(buf){for(var view=new Uint8Array(buf),chars=new Array(view.length),i=0;i-1?upcased:method),this.mode=options.mode||this.mode||null,this.referrer=null,("GET"===this.method||"HEAD"===this.method)&&body)throw new TypeError("Body not allowed for GET or HEAD requests");this._initBody(body)}function decode(body){var form=new FormData;return body.trim().split("&").forEach(function(bytes){if(bytes){var split=bytes.split("="),name=split.shift().replace(/\+/g," "),value=split.join("=").replace(/\+/g," ");form.append(decodeURIComponent(name),decodeURIComponent(value))}}),form}function Response(bodyInit,options){options||(options={}),this.type="default",this.status=void 0===options.status?200:options.status,this.ok=this.status>=200&&this.status<300,this.statusText="statusText"in options?options.statusText:"OK",this.headers=new Headers(options.headers),this.url=options.url||"",this._initBody(bodyInit)}}("undefined"!=typeof self?self:this)},{}]},{},[]); From 0497a225066eb3d08600185d41c7fff13999c636 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9e=20Kooi?= Date: Mon, 3 Dec 2018 13:57:23 +0100 Subject: [PATCH 28/41] Ignore precompiled polyfills file from lint --- .eslintignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.eslintignore b/.eslintignore index c4af01b96..345835ced 100644 --- a/.eslintignore +++ b/.eslintignore @@ -7,6 +7,7 @@ website/private_modules/hexo-renderer-uppyexamples/node_modules/** website/public/** website/themes/uppy/source/js/smooth-scroll.min.js website/themes/uppy/source/js/uppy.js +website/themes/uppy/source/js/polyfills.js website/themes/uppy/source/uppy/** test/endtoend/*/build bundle.js From cbf7c5564f46e5120bf30fd4bda88defd4a5c8cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9e=20Kooi?= Date: Mon, 3 Dec 2018 14:11:40 +0100 Subject: [PATCH 29/41] Revert commits 0497a225 and e4d80313. --- .eslintignore | 1 - website/themes/uppy/layout/layout.ejs | 1 - website/themes/uppy/source/js/polyfills.js | 1 - 3 files changed, 3 deletions(-) delete mode 100644 website/themes/uppy/source/js/polyfills.js diff --git a/.eslintignore b/.eslintignore index 345835ced..c4af01b96 100644 --- a/.eslintignore +++ b/.eslintignore @@ -7,7 +7,6 @@ website/private_modules/hexo-renderer-uppyexamples/node_modules/** website/public/** website/themes/uppy/source/js/smooth-scroll.min.js website/themes/uppy/source/js/uppy.js -website/themes/uppy/source/js/polyfills.js website/themes/uppy/source/uppy/** test/endtoend/*/build bundle.js diff --git a/website/themes/uppy/layout/layout.ejs b/website/themes/uppy/layout/layout.ejs index 172630c5c..6208377bb 100644 --- a/website/themes/uppy/layout/layout.ejs +++ b/website/themes/uppy/layout/layout.ejs @@ -29,7 +29,6 @@ - <%- css('css/main') %> diff --git a/website/themes/uppy/source/js/polyfills.js b/website/themes/uppy/source/js/polyfills.js deleted file mode 100644 index 801fd0b90..000000000 --- a/website/themes/uppy/source/js/polyfills.js +++ /dev/null @@ -1 +0,0 @@ -require=function(){return function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){return o(e[i][1][r]||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i1)for(var i=1;i-1};Headers.prototype.append=function(name,value){name=normalizeName(name),value=normalizeValue(value);var oldValue=this.map[name];this.map[name]=oldValue?oldValue+","+value:value},Headers.prototype.delete=function(name){delete this.map[normalizeName(name)]},Headers.prototype.get=function(name){return name=normalizeName(name),this.has(name)?this.map[name]:null},Headers.prototype.has=function(name){return this.map.hasOwnProperty(normalizeName(name))},Headers.prototype.set=function(name,value){this.map[normalizeName(name)]=normalizeValue(value)},Headers.prototype.forEach=function(callback,thisArg){for(var name in this.map)this.map.hasOwnProperty(name)&&callback.call(thisArg,this.map[name],name,this)},Headers.prototype.keys=function(){var items=[];return this.forEach(function(value,name){items.push(name)}),iteratorFor(items)},Headers.prototype.values=function(){var items=[];return this.forEach(function(value){items.push(value)}),iteratorFor(items)},Headers.prototype.entries=function(){var items=[];return this.forEach(function(value,name){items.push([name,value])}),iteratorFor(items)},support.iterable&&(Headers.prototype[Symbol.iterator]=Headers.prototype.entries);var methods=["DELETE","GET","HEAD","OPTIONS","POST","PUT"];Request.prototype.clone=function(){return new Request(this,{body:this._bodyInit})},Body.call(Request.prototype),Body.call(Response.prototype),Response.prototype.clone=function(){return new Response(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new Headers(this.headers),url:this.url})},Response.error=function(){var response=new Response(null,{status:0,statusText:""});return response.type="error",response};var redirectStatuses=[301,302,303,307,308];Response.redirect=function(url,status){if(-1===redirectStatuses.indexOf(status))throw new RangeError("Invalid status code");return new Response(null,{status:status,headers:{location:url}})},self.Headers=Headers,self.Request=Request,self.Response=Response,self.fetch=function(input,init){return new Promise(function(resolve,reject){var request=new Request(input,init),xhr=new XMLHttpRequest;xhr.onload=function(){var rawHeaders,headers,options={status:xhr.status,statusText:xhr.statusText,headers:(rawHeaders=xhr.getAllResponseHeaders()||"",headers=new Headers,rawHeaders.replace(/\r?\n[\t ]+/g," ").split(/\r?\n/).forEach(function(line){var parts=line.split(":"),key=parts.shift().trim();if(key){var value=parts.join(":").trim();headers.append(key,value)}}),headers)};options.url="responseURL"in xhr?xhr.responseURL:options.headers.get("X-Request-URL");var body="response"in xhr?xhr.response:xhr.responseText;resolve(new Response(body,options))},xhr.onerror=function(){reject(new TypeError("Network request failed"))},xhr.ontimeout=function(){reject(new TypeError("Network request failed"))},xhr.open(request.method,request.url,!0),"include"===request.credentials?xhr.withCredentials=!0:"omit"===request.credentials&&(xhr.withCredentials=!1),"responseType"in xhr&&support.blob&&(xhr.responseType="blob"),request.headers.forEach(function(value,name){xhr.setRequestHeader(name,value)}),xhr.send(void 0===request._bodyInit?null:request._bodyInit)})},self.fetch.polyfill=!0}function normalizeName(name){if("string"!=typeof name&&(name=String(name)),/[^a-z0-9\-#$%&'*+.\^_`|~]/i.test(name))throw new TypeError("Invalid character in header field name");return name.toLowerCase()}function normalizeValue(value){return"string"!=typeof value&&(value=String(value)),value}function iteratorFor(items){var iterator={next:function(){var value=items.shift();return{done:void 0===value,value:value}}};return support.iterable&&(iterator[Symbol.iterator]=function(){return iterator}),iterator}function Headers(headers){this.map={},headers instanceof Headers?headers.forEach(function(value,name){this.append(name,value)},this):Array.isArray(headers)?headers.forEach(function(header){this.append(header[0],header[1])},this):headers&&Object.getOwnPropertyNames(headers).forEach(function(name){this.append(name,headers[name])},this)}function consumed(body){if(body.bodyUsed)return Promise.reject(new TypeError("Already read"));body.bodyUsed=!0}function fileReaderReady(reader){return new Promise(function(resolve,reject){reader.onload=function(){resolve(reader.result)},reader.onerror=function(){reject(reader.error)}})}function readBlobAsArrayBuffer(blob){var reader=new FileReader,promise=fileReaderReady(reader);return reader.readAsArrayBuffer(blob),promise}function bufferClone(buf){if(buf.slice)return buf.slice(0);var view=new Uint8Array(buf.byteLength);return view.set(new Uint8Array(buf)),view.buffer}function Body(){return this.bodyUsed=!1,this._initBody=function(body){if(this._bodyInit=body,body)if("string"==typeof body)this._bodyText=body;else if(support.blob&&Blob.prototype.isPrototypeOf(body))this._bodyBlob=body;else if(support.formData&&FormData.prototype.isPrototypeOf(body))this._bodyFormData=body;else if(support.searchParams&&URLSearchParams.prototype.isPrototypeOf(body))this._bodyText=body.toString();else if(support.arrayBuffer&&support.blob&&isDataView(body))this._bodyArrayBuffer=bufferClone(body.buffer),this._bodyInit=new Blob([this._bodyArrayBuffer]);else{if(!support.arrayBuffer||!ArrayBuffer.prototype.isPrototypeOf(body)&&!isArrayBufferView(body))throw new Error("unsupported BodyInit type");this._bodyArrayBuffer=bufferClone(body)}else this._bodyText="";this.headers.get("content-type")||("string"==typeof body?this.headers.set("content-type","text/plain;charset=UTF-8"):this._bodyBlob&&this._bodyBlob.type?this.headers.set("content-type",this._bodyBlob.type):support.searchParams&&URLSearchParams.prototype.isPrototypeOf(body)&&this.headers.set("content-type","application/x-www-form-urlencoded;charset=UTF-8"))},support.blob&&(this.blob=function(){var rejected=consumed(this);if(rejected)return rejected;if(this._bodyBlob)return Promise.resolve(this._bodyBlob);if(this._bodyArrayBuffer)return Promise.resolve(new Blob([this._bodyArrayBuffer]));if(this._bodyFormData)throw new Error("could not read FormData body as blob");return Promise.resolve(new Blob([this._bodyText]))},this.arrayBuffer=function(){return this._bodyArrayBuffer?consumed(this)||Promise.resolve(this._bodyArrayBuffer):this.blob().then(readBlobAsArrayBuffer)}),this.text=function(){var blob,reader,promise,rejected=consumed(this);if(rejected)return rejected;if(this._bodyBlob)return blob=this._bodyBlob,reader=new FileReader,promise=fileReaderReady(reader),reader.readAsText(blob),promise;if(this._bodyArrayBuffer)return Promise.resolve(function(buf){for(var view=new Uint8Array(buf),chars=new Array(view.length),i=0;i-1?upcased:method),this.mode=options.mode||this.mode||null,this.referrer=null,("GET"===this.method||"HEAD"===this.method)&&body)throw new TypeError("Body not allowed for GET or HEAD requests");this._initBody(body)}function decode(body){var form=new FormData;return body.trim().split("&").forEach(function(bytes){if(bytes){var split=bytes.split("="),name=split.shift().replace(/\+/g," "),value=split.join("=").replace(/\+/g," ");form.append(decodeURIComponent(name),decodeURIComponent(value))}}),form}function Response(bodyInit,options){options||(options={}),this.type="default",this.status=void 0===options.status?200:options.status,this.ok=this.status>=200&&this.status<300,this.statusText="statusText"in options?options.statusText:"OK",this.headers=new Headers(options.headers),this.url=options.url||"",this._initBody(bodyInit)}}("undefined"!=typeof self?self:this)},{}]},{},[]); From 124763dd3c7697230d35fc817648bf9b3b9d4bd7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9e=20Kooi?= Date: Mon, 3 Dec 2018 14:35:52 +0100 Subject: [PATCH 30/41] Add supportsUploadProgress() tests --- .../@uppy/core/src/supportsUploadProgress.js | 13 ++++++--- .../core/src/supportsUploadProgress.test.js | 28 +++++++++++++++++++ 2 files changed, 37 insertions(+), 4 deletions(-) create mode 100644 packages/@uppy/core/src/supportsUploadProgress.test.js diff --git a/packages/@uppy/core/src/supportsUploadProgress.js b/packages/@uppy/core/src/supportsUploadProgress.js index 4826f2d31..2a3af11a9 100644 --- a/packages/@uppy/core/src/supportsUploadProgress.js +++ b/packages/@uppy/core/src/supportsUploadProgress.js @@ -1,8 +1,11 @@ // Edge 15.x does not fire 'progress' events on uploads. // See https://github.com/transloadit/uppy/issues/945 // And https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/12224510/ -module.exports = function supportsUploadProgress () { - const userAgent = typeof navigator !== 'undefined' ? navigator.userAgent : null +module.exports = function supportsUploadProgress (userAgent) { + // Allow passing in userAgent for tests + if (userAgent == null) { + userAgent = typeof navigator !== 'undefined' ? navigator.userAgent : null + } // Assume it works because basically everything supports progress events. if (!userAgent) return true @@ -10,7 +13,9 @@ module.exports = function supportsUploadProgress () { if (!m) return true const edgeVersion = m[1] - const [major, minor] = edgeVersion.split('.') + let [major, minor] = edgeVersion.split('.') + major = parseInt(major, 10) + minor = parseInt(minor, 10) // Worked before: // Edge 40.15063.0.0 @@ -21,7 +26,7 @@ module.exports = function supportsUploadProgress () { // Fixed in: // Microsoft EdgeHTML 18.18218 - if (major > 18 || (major === 18 && minor > 18218)) { + if (major > 18 || (major === 18 && minor >= 18218)) { return true } diff --git a/packages/@uppy/core/src/supportsUploadProgress.test.js b/packages/@uppy/core/src/supportsUploadProgress.test.js new file mode 100644 index 000000000..f81beaae4 --- /dev/null +++ b/packages/@uppy/core/src/supportsUploadProgress.test.js @@ -0,0 +1,28 @@ +const supportsUploadProgress = require('./supportsUploadProgress') + +describe('supportsUploadProgress', () => { + it('returns true in working browsers', () => { + // Firefox 64 (dev edition) + expect(supportsUploadProgress('Mozilla/5.0 (X11; Linux x86_64; rv:64.0) Gecko/20100101 Firefox/64.0')).toBe(true) + + // Chromium 70 + expect(supportsUploadProgress('Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36')).toBe(true) + + // IE 11 + expect(supportsUploadProgress('Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; rv:11.0) like Gecko')).toBe(true) + + // MS Edge 14 + expect(supportsUploadProgress('Chrome (AppleWebKit/537.1; Chrome50.0; Windows NT 6.3) AppleWebKit/537.36 (KHTML like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393')).toBe(true) + + // MS Edge 18, supposedly fixed + expect(supportsUploadProgress('Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36 Edge/18.18218')).toBe(true) + }) + + it('returns false in broken browsers', () => { + // MS Edge 15, first broken version + expect(supportsUploadProgress('Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36 Edge/15.15063')).toBe(false) + + // MS Edge 17 + expect(supportsUploadProgress('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/17.17134')).toBe(false) + }) +}) From d285c77ab439c5d386b8c9f2a17c4f006ce3a76c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9e=20Kooi?= Date: Mon, 3 Dec 2018 14:37:16 +0100 Subject: [PATCH 31/41] Account for capabilities.uploadProgress in existing tests. --- packages/@uppy/core/src/index.test.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/@uppy/core/src/index.test.js b/packages/@uppy/core/src/index.test.js index 3bb126113..0a833db14 100644 --- a/packages/@uppy/core/src/index.test.js +++ b/packages/@uppy/core/src/index.test.js @@ -149,7 +149,7 @@ describe('src/Core', () => { const newState = { bee: 'boo', - capabilities: { resumableUploads: false }, + capabilities: { uploadProgress: true, resumableUploads: false }, files: {}, currentUploads: {}, allowNewUpload: true, @@ -173,7 +173,7 @@ describe('src/Core', () => { // current state expect(stateUpdateEventMock.mock.calls[1][0]).toEqual({ bee: 'boo', - capabilities: { resumableUploads: false }, + capabilities: { uploadProgress: true, resumableUploads: false }, files: {}, currentUploads: {}, allowNewUpload: true, @@ -186,7 +186,7 @@ describe('src/Core', () => { // new state expect(stateUpdateEventMock.mock.calls[1][1]).toEqual({ bee: 'boo', - capabilities: { resumableUploads: false }, + capabilities: { uploadProgress: true, resumableUploads: false }, files: {}, currentUploads: {}, allowNewUpload: true, @@ -204,7 +204,7 @@ describe('src/Core', () => { core.setState({ foo: 'bar' }) expect(core.getState()).toEqual({ - capabilities: { resumableUploads: false }, + capabilities: { uploadProgress: true, resumableUploads: false }, files: {}, currentUploads: {}, allowNewUpload: true, @@ -232,7 +232,7 @@ describe('src/Core', () => { expect(coreCancelEventMock.mock.calls.length).toEqual(1) expect(coreStateUpdateEventMock.mock.calls.length).toEqual(2) expect(coreStateUpdateEventMock.mock.calls[1][1]).toEqual({ - capabilities: { resumableUploads: false }, + capabilities: { uploadProgress: true, resumableUploads: false }, files: {}, currentUploads: {}, allowNewUpload: true, @@ -291,7 +291,7 @@ describe('src/Core', () => { expect(coreCancelEventMock.mock.calls.length).toEqual(1) expect(coreStateUpdateEventMock.mock.calls.length).toEqual(1) expect(coreStateUpdateEventMock.mock.calls[0][1]).toEqual({ - capabilities: { resumableUploads: false }, + capabilities: { uploadProgress: true, resumableUploads: false }, files: {}, currentUploads: {}, allowNewUpload: true, From 2cbe54194abd9147436dff0b13186b5f17db7f6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9e=20Kooi?= Date: Mon, 3 Dec 2018 14:49:48 +0100 Subject: [PATCH 32/41] status-bar: Use indeterminate mode during upload if progress is not supported --- packages/@uppy/status-bar/src/StatusBar.js | 5 +++++ packages/@uppy/status-bar/src/style.scss | 3 +-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/@uppy/status-bar/src/StatusBar.js b/packages/@uppy/status-bar/src/StatusBar.js index 0208e7db8..74258e976 100644 --- a/packages/@uppy/status-bar/src/StatusBar.js +++ b/packages/@uppy/status-bar/src/StatusBar.js @@ -80,6 +80,11 @@ module.exports = (props) => { } else if (uploadState === statusBarStates.STATE_COMPLETE) { progressBarContent = ProgressBarComplete(props) } else if (uploadState === statusBarStates.STATE_UPLOADING) { + if (!props.supportsUploadProgress) { + progressMode = 'indeterminate' + progressValue = null + } + progressBarContent = ProgressBarUploading(props) } else if (uploadState === statusBarStates.STATE_ERROR) { progressValue = undefined diff --git a/packages/@uppy/status-bar/src/style.scss b/packages/@uppy/status-bar/src/style.scss index 092810e5b..3241ae1d2 100644 --- a/packages/@uppy/status-bar/src/style.scss +++ b/packages/@uppy/status-bar/src/style.scss @@ -64,8 +64,7 @@ transition: background-color, width .3s ease-out; &.is-indeterminate { - background-color: $color-orange; - $stripe-color: darken($color-orange, 10%); + $stripe-color: rgba(0, 0, 0, 0.3); background-size: 64px 64px; background-image: linear-gradient(45deg, $stripe-color 25%, transparent 25%, transparent 50%, $stripe-color 50%, $stripe-color 75%, transparent 75%, transparent); animation: uppy-StatusBar-ProgressStripes 1s linear infinite; From 65cc1749427d15687486ac27f2f5680da0f06c94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9e=20Kooi?= Date: Mon, 3 Dec 2018 14:57:59 +0100 Subject: [PATCH 33/41] Remove "unknown time left" message --- packages/@uppy/status-bar/src/StatusBar.js | 3 +-- packages/@uppy/status-bar/src/index.js | 1 - 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/@uppy/status-bar/src/StatusBar.js b/packages/@uppy/status-bar/src/StatusBar.js index 74258e976..f1a794112 100644 --- a/packages/@uppy/status-bar/src/StatusBar.js +++ b/packages/@uppy/status-bar/src/StatusBar.js @@ -221,8 +221,7 @@ const ProgressDetails = (props) => { const UnknownProgressDetails = (props) => { return
- { props.i18n('filesUploadedOfTotal', { complete: props.complete, smart_count: props.numUploads }) + ' \u00B7 ' } - { props.i18n('progressUnavailable') } + { props.i18n('filesUploadedOfTotal', { complete: props.complete, smart_count: props.numUploads }) }
} diff --git a/packages/@uppy/status-bar/src/index.js b/packages/@uppy/status-bar/src/index.js index ac06849ff..26fbc220b 100644 --- a/packages/@uppy/status-bar/src/index.js +++ b/packages/@uppy/status-bar/src/index.js @@ -40,7 +40,6 @@ module.exports = class StatusBar extends Plugin { }, dataUploadedOfTotal: '%{complete} of %{total}', xTimeLeft: '%{time} left', - progressUnavailable: 'Unknown time left', uploadXFiles: { 0: 'Upload %{smart_count} file', 1: 'Upload %{smart_count} files' From af80dd2d1ba35d8896be094619adc306be4303a6 Mon Sep 17 00:00:00 2001 From: Artur Paikin Date: Thu, 6 Dec 2018 16:22:49 +0300 Subject: [PATCH 34/41] add orange for preprocessing and postprocessing --- packages/@uppy/status-bar/src/style.scss | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/@uppy/status-bar/src/style.scss b/packages/@uppy/status-bar/src/style.scss index 3241ae1d2..59ddb90fd 100644 --- a/packages/@uppy/status-bar/src/style.scss +++ b/packages/@uppy/status-bar/src/style.scss @@ -76,6 +76,11 @@ to { background-position: 64px 0; } } + .uppy-StatusBar.is-preprocessing .uppy-StatusBar-progress, + .uppy-StatusBar.is-postprocessing .uppy-StatusBar-progress { + background-color: $color-orange; + } + .uppy-StatusBar.is-waiting .uppy-StatusBar-progress { display: none; } From fe7b02b88a665623c3bc98968fd232511b66bf03 Mon Sep 17 00:00:00 2001 From: Artur Paikin Date: Thu, 6 Dec 2018 16:39:50 +0300 Subject: [PATCH 35/41] add es6-promise and whatwg-fetch to Uppy bundle (CDN version) --- bin/build-js.js | 2 +- package-lock.json | 395 +++++++++++++++++++------------------ packages/uppy/bundle.js | 43 ++++ packages/uppy/package.json | 4 + 4 files changed, 252 insertions(+), 192 deletions(-) create mode 100644 packages/uppy/bundle.js diff --git a/bin/build-js.js b/bin/build-js.js index 745b85d70..10ce47d79 100644 --- a/bin/build-js.js +++ b/bin/build-js.js @@ -15,7 +15,7 @@ function handleErr (err) { } function buildUppyBundle (minify) { - var src = path.join(srcPath, 'index.js') + var src = path.join(srcPath, 'bundle.js') var bundleFile = minify ? 'uppy.min.js' : 'uppy.js' var b = browserify(src, { debug: true, standalone: 'Uppy' }) diff --git a/package-lock.json b/package-lock.json index 160754123..d7b01d75a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1548,7 +1548,7 @@ }, "@types/compression": { "version": "0.0.36", - "resolved": "https://registry.npmjs.org/@types/compression/-/compression-0.0.36.tgz", + "resolved": "http://registry.npmjs.org/@types/compression/-/compression-0.0.36.tgz", "integrity": "sha512-B66iZCIcD2eB2F8e8YDIVtCUKgfiseOR5YOIbmMN2tM57Wu55j1xSdxdSw78aVzsPmbZ6G+hINc+1xe1tt4NBg==", "requires": { "@types/express": "*" @@ -1590,7 +1590,7 @@ }, "@types/events": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@types/events/-/events-1.2.0.tgz", + "resolved": "http://registry.npmjs.org/@types/events/-/events-1.2.0.tgz", "integrity": "sha512-KEIlhXnIutzKwRbQkGWb/I4HFqBuUykAdHgDED6xqwXJfONCjF5VoE0cXEiurh3XauygxzeDzgtXUqvLkxFzzA==" }, "@types/express": { @@ -1648,9 +1648,9 @@ } }, "@types/lodash": { - "version": "4.14.117", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.117.tgz", - "integrity": "sha512-xyf2m6tRbz8qQKcxYZa7PA4SllYcay+eh25DN3jmNYY6gSTL7Htc/bttVdkqj2wfJGbeWlQiX8pIyJpKU+tubw==" + "version": "4.14.119", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.119.tgz", + "integrity": "sha512-Z3TNyBL8Vd/M9D9Ms2S3LmFq2sSMzahodD6rCS9V2N44HUMINb75jNkSuwAx7eo2ufqTdfOdtGQpNbieUjPQmw==" }, "@types/lodash.merge": { "version": "4.6.4", @@ -1689,9 +1689,9 @@ "integrity": "sha512-HtKGu+qG1NPvYe1z7ezLsyIaXYyi8SoAVqWDZgDQ8dLrsZvSzUNCwZyfX33uhWxL/SU0ZDQZ3nwZ0nimt507Kw==" }, "@types/redis": { - "version": "2.8.7", - "resolved": "https://registry.npmjs.org/@types/redis/-/redis-2.8.7.tgz", - "integrity": "sha512-ZMW8M5LRxU0D4u2GhnCEqJ1/mUJKSudlCWxeP1FRxfZQqr0Pb4tonPLzDEyRpC50uvEfAP3xOLjDuUOWi0QHCQ==", + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/@types/redis/-/redis-2.8.8.tgz", + "integrity": "sha512-o/1ufNVPA92uum9HFbEiXXIHBuLywSwHQtAZoACMc1FhPXS5YftybBC1EI0zjdbUb273VVWF0Ivll/bq4g+gyw==", "requires": { "@types/node": "*" } @@ -1722,9 +1722,9 @@ "integrity": "sha512-Set5ZdrAaKI/qHdFlVMgm/GsAv/wkXhSTuZFkJ+JI7HK+wIkIlOaUXSXieIvJ0+OvGIqtREFoE+NHJtEq0gtEw==" }, "@types/tus-js-client": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@types/tus-js-client/-/tus-js-client-1.4.1.tgz", - "integrity": "sha512-izXyOCOY9+t9wI/OWSMesag0MqAQAcFN+FMkX+4VMzdG5TgodEPxnccArS3I1O0R+B43JsbB+8YE6Ttc+j4W2A==" + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@types/tus-js-client/-/tus-js-client-1.5.1.tgz", + "integrity": "sha512-ZasRjwScbfBQU/spOmHYPCp3HCGO4QUATYWXt6Dwx5P0VDrel/bJ9cNSuSVJ/VQTxgrKqmKv1XicizNavDlqDw==" }, "@types/uuid": { "version": "3.4.4", @@ -1903,7 +1903,7 @@ }, "acorn-jsx": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", + "resolved": "http://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", "dev": true, "requires": { @@ -1912,7 +1912,7 @@ "dependencies": { "acorn": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", + "resolved": "http://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", "dev": true } @@ -1990,7 +1990,7 @@ }, "aliasify": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/aliasify/-/aliasify-2.1.0.tgz", + "resolved": "http://registry.npmjs.org/aliasify/-/aliasify-2.1.0.tgz", "integrity": "sha1-fDCCW5RQueYYW6J1M+r24gZ9S0I=", "dev": true, "requires": { @@ -2400,7 +2400,7 @@ }, "async": { "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "resolved": "http://registry.npmjs.org/async/-/async-1.5.2.tgz", "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", "dev": true }, @@ -2444,7 +2444,7 @@ }, "autoprefixer": { "version": "7.2.6", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-7.2.6.tgz", + "resolved": "http://registry.npmjs.org/autoprefixer/-/autoprefixer-7.2.6.tgz", "integrity": "sha512-Iq8TRIB+/9eQ8rbGhcP7ct5cYb/3qjNYAR2SnzLCEcwF6rvVOax8+9+fccgXk4bEhQGjOZd5TLhsksmAdsbGqQ==", "dev": true, "requires": { @@ -2475,9 +2475,9 @@ } }, "aws-sdk": { - "version": "2.348.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.348.0.tgz", - "integrity": "sha512-TfguapuOAwk7EG8zhYJPjkCaF4tyGjfgcXLkYbWbuS4O6E8pn0x2K5Yt1KXwLiWxG0fzKCLiiaNA5H7bKAP4YQ==", + "version": "2.371.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.371.0.tgz", + "integrity": "sha512-SlSKhWEMCm3rC8LwaZ3Z2SaLp7qO0ZxUGsJs1TZp+dlYehDitFGZjfr0rD+ioxlzOniOViUFEACM63eLZjnTnA==", "requires": { "buffer": "4.9.1", "events": "1.1.1", @@ -2492,7 +2492,7 @@ "dependencies": { "buffer": { "version": "4.9.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", + "resolved": "http://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", "requires": { "base64-js": "^1.0.2", @@ -2502,7 +2502,7 @@ }, "events": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "resolved": "http://registry.npmjs.org/events/-/events-1.1.1.tgz", "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" }, "ieee754": { @@ -2522,7 +2522,7 @@ }, "sax": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", + "resolved": "http://registry.npmjs.org/sax/-/sax-1.2.1.tgz", "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o=" }, "url": { @@ -2634,7 +2634,7 @@ }, "chalk": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { @@ -3106,7 +3106,7 @@ }, "babel-plugin-istanbul": { "version": "4.1.6", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.6.tgz", + "resolved": "http://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.6.tgz", "integrity": "sha512-PWP9FQ1AhZhS01T/4qLSKoHGY/xvkZdVBGlKM/HuxxS3+sC66HhTNR7+MpbO/so/cz/wY94MeSWJuP1hXIPfwQ==", "dev": true, "requires": { @@ -3135,25 +3135,25 @@ }, "babel-plugin-syntax-async-functions": { "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz", + "resolved": "http://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz", "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=", "dev": true }, "babel-plugin-syntax-exponentiation-operator": { "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz", + "resolved": "http://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz", "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=", "dev": true }, "babel-plugin-syntax-jsx": { "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz", + "resolved": "http://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz", "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=", "dev": true }, "babel-plugin-syntax-object-rest-spread": { "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", + "resolved": "http://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=", "dev": true }, @@ -4062,7 +4062,7 @@ }, "bl": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz", + "resolved": "http://registry.npmjs.org/bl/-/bl-1.2.2.tgz", "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==", "dev": true, "requires": { @@ -4864,7 +4864,7 @@ }, "minimist": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true } @@ -4957,7 +4957,7 @@ }, "browserify-aes": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "resolved": "http://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dev": true, "requires": { @@ -5002,7 +5002,7 @@ }, "browserify-rsa": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "resolved": "http://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", "dev": true, "requires": { @@ -5027,7 +5027,7 @@ }, "browserify-transform-tools": { "version": "1.7.0", - "resolved": "https://registry.npmjs.org/browserify-transform-tools/-/browserify-transform-tools-1.7.0.tgz", + "resolved": "http://registry.npmjs.org/browserify-transform-tools/-/browserify-transform-tools-1.7.0.tgz", "integrity": "sha1-g+J3Ih9jJZvtLn6yooOpcKUB9MQ=", "dev": true, "requires": { @@ -5200,7 +5200,7 @@ }, "convert-source-map": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", + "resolved": "http://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=", "dev": true }, @@ -5221,13 +5221,13 @@ }, "minimist": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true }, "readable-stream": { "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", "dev": true, "requires": { @@ -5610,7 +5610,7 @@ }, "chalk": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { @@ -5749,7 +5749,7 @@ }, "color": { "version": "0.11.4", - "resolved": "https://registry.npmjs.org/color/-/color-0.11.4.tgz", + "resolved": "http://registry.npmjs.org/color/-/color-0.11.4.tgz", "integrity": "sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=", "dev": true, "requires": { @@ -5821,7 +5821,7 @@ "dependencies": { "convert-source-map": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", + "resolved": "http://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=", "dev": true } @@ -6894,7 +6894,7 @@ }, "create-hash": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "resolved": "http://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "dev": true, "requires": { @@ -6907,7 +6907,7 @@ }, "create-hmac": { "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "resolved": "http://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "dev": true, "requires": { @@ -6920,12 +6920,12 @@ } }, "cron-parser": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/cron-parser/-/cron-parser-2.6.0.tgz", - "integrity": "sha512-KGfDDTjBIx85MnVYcdhLccoJH/7jcYW+5Z/t3Wsg2QlJhmmjf+97z+9sQftS71lopOYYapjEKEvmWaCsym5Z4g==", + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/cron-parser/-/cron-parser-2.7.3.tgz", + "integrity": "sha512-t9Kc7HWBWPndBzvbdQ1YG9rpPRB37Tb/tTviziUOh1qs3TARGh3b1p+tnkOHNe1K5iI3oheBPgLqwotMM7+lpg==", "requires": { "is-nan": "^1.2.1", - "moment-timezone": "^0.5.0" + "moment-timezone": "^0.5.23" } }, "cross-spawn": { @@ -7004,7 +7004,7 @@ }, "css-color-names": { "version": "0.0.4", - "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", + "resolved": "http://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", "dev": true }, @@ -7019,7 +7019,7 @@ }, "css-select": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", + "resolved": "http://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", "dev": true, "requires": { @@ -7043,7 +7043,7 @@ }, "cssnano": { "version": "3.10.0", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-3.10.0.tgz", + "resolved": "http://registry.npmjs.org/cssnano/-/cssnano-3.10.0.tgz", "integrity": "sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg=", "dev": true, "requires": { @@ -7245,7 +7245,7 @@ }, "dashify": { "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dashify/-/dashify-0.2.2.tgz", + "resolved": "http://registry.npmjs.org/dashify/-/dashify-0.2.2.tgz", "integrity": "sha1-agdBWgHJH69KMuONnfunH2HLIP4=" }, "data-urls": { @@ -7529,7 +7529,7 @@ "dependencies": { "minimist": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true } @@ -7559,7 +7559,7 @@ }, "diffie-hellman": { "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "resolved": "http://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "dev": true, "requires": { @@ -7784,7 +7784,7 @@ "dependencies": { "domelementtype": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", + "resolved": "http://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", "dev": true } @@ -7876,8 +7876,9 @@ }, "duplexer": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", - "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=" + "resolved": "http://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", + "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", + "dev": true }, "duplexer2": { "version": "0.1.4", @@ -8343,12 +8344,11 @@ "es6-promise": { "version": "4.2.5", "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.5.tgz", - "integrity": "sha512-n6wvpdE43VFtJq+lUDYDBFUwV8TZbuGXLV4D6wKafg13ldznKsyEvatubnmUe31zcvelSzOHF+XbaT+Bl9ObDg==", - "dev": true + "integrity": "sha512-n6wvpdE43VFtJq+lUDYDBFUwV8TZbuGXLV4D6wKafg13ldznKsyEvatubnmUe31zcvelSzOHF+XbaT+Bl9ObDg==" }, "es6-promisify": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "resolved": "http://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", "dev": true, "requires": { @@ -8514,7 +8514,7 @@ }, "chalk": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { @@ -8678,7 +8678,7 @@ }, "eslint": { "version": "4.19.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz", + "resolved": "http://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz", "integrity": "sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==", "dev": true, "requires": { @@ -9012,7 +9012,7 @@ }, "load-json-file": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", "dev": true, "requires": { @@ -9090,7 +9090,7 @@ "dependencies": { "semver": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "resolved": "http://registry.npmjs.org/semver/-/semver-5.3.0.tgz", "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", "dev": true } @@ -9250,6 +9250,7 @@ "version": "3.3.4", "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=", + "dev": true, "requires": { "duplexer": "~0.1.1", "from": "~0", @@ -9339,7 +9340,7 @@ "dependencies": { "minimist": { "version": "0.0.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.5.tgz", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.5.tgz", "integrity": "sha1-16oye87PUY+RBqxrjwA/o7zqhWY=", "dev": true } @@ -9384,7 +9385,7 @@ }, "express": { "version": "4.16.3", - "resolved": "https://registry.npmjs.org/express/-/express-4.16.3.tgz", + "resolved": "http://registry.npmjs.org/express/-/express-4.16.3.tgz", "integrity": "sha1-avilAjUNsyRuzEvs9rWjTSL37VM=", "requires": { "accepts": "~1.3.5", @@ -9426,7 +9427,7 @@ }, "finalhandler": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", + "resolved": "http://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", "requires": { "debug": "2.6.9", @@ -10235,7 +10236,8 @@ "from": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", - "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=" + "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=", + "dev": true }, "from2": { "version": "2.3.0", @@ -10351,14 +10353,12 @@ "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "optional": true + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -10378,8 +10378,7 @@ "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "optional": true + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, "console-control-strings": { "version": "1.1.0", @@ -10527,7 +10526,6 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -10988,7 +10986,7 @@ }, "get-stream": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "resolved": "http://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" }, "get-value": { @@ -11482,7 +11480,7 @@ }, "got": { "version": "6.7.1", - "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", + "resolved": "http://registry.npmjs.org/got/-/got-6.7.1.tgz", "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", "requires": { "create-error-class": "^3.0.0", @@ -11995,7 +11993,7 @@ }, "http-errors": { "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "resolved": "http://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", "requires": { "depd": "~1.1.2", @@ -12013,7 +12011,7 @@ }, "http-proxy": { "version": "1.15.2", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.15.2.tgz", + "resolved": "http://registry.npmjs.org/http-proxy/-/http-proxy-1.15.2.tgz", "integrity": "sha1-ZC/cr/5S00SNK9o7AHnpQJBk2jE=", "dev": true, "requires": { @@ -12261,7 +12259,7 @@ }, "inquirer": { "version": "0.12.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-0.12.0.tgz", + "resolved": "http://registry.npmjs.org/inquirer/-/inquirer-0.12.0.tgz", "integrity": "sha1-HvK/1jUE3wvHV4X/+MLEHfEvB34=", "dev": true, "requires": { @@ -12288,7 +12286,7 @@ }, "chalk": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { @@ -12413,7 +12411,7 @@ }, "is-builtin-module": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "resolved": "http://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", "dev": true, "requires": { @@ -12590,7 +12588,7 @@ }, "is-obj": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "resolved": "http://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" }, "is-observable": { @@ -13065,7 +13063,7 @@ }, "yargs": { "version": "11.1.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-11.1.0.tgz", + "resolved": "http://registry.npmjs.org/yargs/-/yargs-11.1.0.tgz", "integrity": "sha512-NwW69J42EsCSanF8kyn5upxvjp5ds+t3+udGBeTbFnERA+lF541DDpMawzo4z6W/QrzNM18D+BPMiOBibnFV5A==", "dev": true, "requires": { @@ -13179,7 +13177,7 @@ }, "jest-get-type": { "version": "22.4.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-22.4.3.tgz", + "resolved": "http://registry.npmjs.org/jest-get-type/-/jest-get-type-22.4.3.tgz", "integrity": "sha512-/jsz0Y+V29w1chdXVygEKSz2nBoHoYqNShPe+QgxSNjAuP1i8+k4LbQNrfoliKej0P45sivkSCh7yiD6ubHS3w==", "dev": true }, @@ -13417,7 +13415,7 @@ }, "yargs": { "version": "11.1.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-11.1.0.tgz", + "resolved": "http://registry.npmjs.org/yargs/-/yargs-11.1.0.tgz", "integrity": "sha512-NwW69J42EsCSanF8kyn5upxvjp5ds+t3+udGBeTbFnERA+lF541DDpMawzo4z6W/QrzNM18D+BPMiOBibnFV5A==", "dev": true, "requires": { @@ -13821,7 +13819,7 @@ }, "json5": { "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "resolved": "http://registry.npmjs.org/json5/-/json5-0.5.1.tgz", "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", "dev": true }, @@ -14086,7 +14084,7 @@ }, "lint-staged": { "version": "6.1.1", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-6.1.1.tgz", + "resolved": "http://registry.npmjs.org/lint-staged/-/lint-staged-6.1.1.tgz", "integrity": "sha512-M/7bwLdXbeG7ZNLcasGeLMBDg60/w6obj3KOtINwJyxAxb53XGY0yH5FSZlWklEzuVbTtqtIfAajh6jYIN90AA==", "dev": true, "requires": { @@ -14243,7 +14241,7 @@ }, "chalk": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { @@ -14301,7 +14299,7 @@ }, "chalk": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { @@ -14355,7 +14353,7 @@ }, "chalk": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { @@ -14376,7 +14374,7 @@ }, "load-json-file": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", "dev": true, "requires": { @@ -14407,7 +14405,7 @@ }, "yargs": { "version": "6.6.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz", + "resolved": "http://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz", "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=", "dev": true, "requires": { @@ -14609,7 +14607,7 @@ }, "log": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/log/-/log-1.4.0.tgz", + "resolved": "http://registry.npmjs.org/log/-/log-1.4.0.tgz", "integrity": "sha1-S6HYkP3iSbAx3KA7w36q8yVlbxw=", "dev": true }, @@ -14677,7 +14675,7 @@ }, "lunr": { "version": "0.7.0", - "resolved": "https://registry.npmjs.org/lunr/-/lunr-0.7.0.tgz", + "resolved": "http://registry.npmjs.org/lunr/-/lunr-0.7.0.tgz", "integrity": "sha1-59J5onPEq0L/WEthzjKjUTotOFk=", "dev": true }, @@ -14689,7 +14687,7 @@ }, "magic-string": { "version": "0.23.2", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.23.2.tgz", + "resolved": "http://registry.npmjs.org/magic-string/-/magic-string-0.23.2.tgz", "integrity": "sha512-oIUZaAxbcxYIp4AyLafV6OVKoB3YouZs0UTCJ8mOKBHNyJgGDaMJ4TgA+VylJh6fx7EQCC52XkbURxxG9IoJXA==", "dev": true, "requires": { @@ -14789,7 +14787,8 @@ "map-stream": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", - "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=" + "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=", + "dev": true }, "map-visit": { "version": "1.0.0", @@ -14801,7 +14800,7 @@ }, "marked": { "version": "0.3.19", - "resolved": "https://registry.npmjs.org/marked/-/marked-0.3.19.tgz", + "resolved": "http://registry.npmjs.org/marked/-/marked-0.3.19.tgz", "integrity": "sha512-ea2eGWOqNxPcXv8dyERdSr/6FmzvWwzjMxpfGB/sbMccXoct+xY+YukPD+QTUZwyvK7BZwcr4m21WBOW41pAkg==", "dev": true }, @@ -14855,7 +14854,7 @@ }, "media-typer": { "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "resolved": "http://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" }, "mem": { @@ -14893,7 +14892,7 @@ "dependencies": { "minimist": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true } @@ -15067,7 +15066,7 @@ }, "minimist": { "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", "dev": true }, @@ -15170,7 +15169,7 @@ }, "mkdirp": { "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", "dev": true, "requires": { @@ -15198,7 +15197,7 @@ "dependencies": { "commander": { "version": "2.15.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", + "resolved": "http://registry.npmjs.org/commander/-/commander-2.15.1.tgz", "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", "dev": true }, @@ -15306,7 +15305,7 @@ "dependencies": { "through": { "version": "2.2.7", - "resolved": "https://registry.npmjs.org/through/-/through-2.2.7.tgz", + "resolved": "http://registry.npmjs.org/through/-/through-2.2.7.tgz", "integrity": "sha1-bo4hIAGR1OtqmfbwEN9Gqhxusr0=", "dev": true } @@ -15408,7 +15407,7 @@ }, "lodash": { "version": "3.10.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "resolved": "http://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", "dev": true } @@ -15484,7 +15483,7 @@ }, "rimraf": { "version": "2.4.5", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", + "resolved": "http://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", "integrity": "sha1-7nEM5dk6j9uFb7Xqj/Di11k0sto=", "dev": true, "requires": { @@ -15523,7 +15522,7 @@ }, "chalk": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { @@ -15585,7 +15584,7 @@ }, "ncp": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", + "resolved": "http://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", "integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=", "dev": true }, @@ -15774,7 +15773,7 @@ }, "semver": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "resolved": "http://registry.npmjs.org/semver/-/semver-5.3.0.tgz", "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", "dev": true } @@ -15893,7 +15892,7 @@ }, "chalk": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { @@ -16021,25 +16020,25 @@ } }, "node-schedule": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/node-schedule/-/node-schedule-1.3.0.tgz", - "integrity": "sha512-NNwO9SUPjBwFmPh3vXiPVEhJLn4uqYmZYvJV358SRGM06BR4UoIqxJpeJwDDXB6atULsgQA97MfD1zMd5xsu+A==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-schedule/-/node-schedule-1.3.1.tgz", + "integrity": "sha512-cdNNePwKoisAi4DT00BB11H6IJ/WtA603YZ7+tLJcb/zCmCSxYKcvc+/GTyxC46jN/0ft7741vmMQrvxP8Sd+A==", "requires": { - "cron-parser": "^2.4.0", + "cron-parser": "^2.7.3", "long-timeout": "0.1.1", "sorted-array-functions": "^1.0.0" } }, "nodemon": { - "version": "1.18.5", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-1.18.5.tgz", - "integrity": "sha512-8806dC8dfBlbxQmqNOSEeay/qlbddKvFzxIGNxnPtxUlTtH77xsrC66RnA3M47HCSgMgE5bj+U586o50RowXBg==", + "version": "1.18.7", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-1.18.7.tgz", + "integrity": "sha512-xuC1V0F5EcEyKQ1VhHYD13owznQbUw29JKvZ8bVH7TmuvVNHvvbp9pLgE4PjTMRJVe0pJ8fGRvwR2nMiosIsPQ==", "requires": { "chokidar": "^2.0.4", "debug": "^3.1.0", "ignore-by-default": "^1.0.1", "minimatch": "^3.0.4", - "pstree.remy": "^1.1.0", + "pstree.remy": "^1.1.2", "semver": "^5.5.0", "supports-color": "^5.2.0", "touch": "^3.1.0", @@ -16482,7 +16481,7 @@ }, "npm-install-package": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/npm-install-package/-/npm-install-package-2.1.0.tgz", + "resolved": "http://registry.npmjs.org/npm-install-package/-/npm-install-package-2.1.0.tgz", "integrity": "sha1-1+/jz816sAYUuJbqUxGdyaslkSU=", "dev": true }, @@ -17334,7 +17333,7 @@ }, "minimist": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true }, @@ -17348,7 +17347,7 @@ }, "onetime": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "resolved": "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", "dev": true }, @@ -17412,7 +17411,7 @@ }, "ora": { "version": "0.2.3", - "resolved": "https://registry.npmjs.org/ora/-/ora-0.2.3.tgz", + "resolved": "http://registry.npmjs.org/ora/-/ora-0.2.3.tgz", "integrity": "sha1-N1J9Igrc1Tw5tzVx11QVbV22V6Q=", "dev": true, "requires": { @@ -17430,7 +17429,7 @@ }, "chalk": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { @@ -17463,7 +17462,7 @@ }, "os-locale": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "resolved": "http://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", "dev": true, "requires": { @@ -17776,7 +17775,7 @@ }, "parse-asn1": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz", + "resolved": "http://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz", "integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==", "dev": true, "requires": { @@ -17917,8 +17916,9 @@ }, "pause-stream": { "version": "0.0.11", - "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", + "resolved": "http://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", + "dev": true, "requires": { "through": "~2.3" } @@ -17943,7 +17943,7 @@ }, "pify": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true }, @@ -18051,7 +18051,7 @@ }, "postcss-calc": { "version": "5.3.1", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-5.3.1.tgz", + "resolved": "http://registry.npmjs.org/postcss-calc/-/postcss-calc-5.3.1.tgz", "integrity": "sha1-d7rnypKK2FcW4v2kLyYb98HWW14=", "dev": true, "requires": { @@ -18212,7 +18212,7 @@ }, "postcss-discard-comments": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz", + "resolved": "http://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz", "integrity": "sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0=", "dev": true, "requires": { @@ -18316,7 +18316,7 @@ }, "postcss-discard-empty": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz", + "resolved": "http://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz", "integrity": "sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU=", "dev": true, "requires": { @@ -18368,7 +18368,7 @@ }, "postcss-discard-overridden": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz", + "resolved": "http://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz", "integrity": "sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg=", "dev": true, "requires": { @@ -18420,7 +18420,7 @@ }, "postcss-discard-unused": { "version": "2.2.3", - "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz", + "resolved": "http://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz", "integrity": "sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM=", "dev": true, "requires": { @@ -18526,7 +18526,7 @@ }, "postcss-merge-idents": { "version": "2.1.7", - "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz", + "resolved": "http://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz", "integrity": "sha1-TFUwMTwI4dWzu/PSu8dH4njuonA=", "dev": true, "requires": { @@ -18704,7 +18704,7 @@ }, "postcss-minify-font-values": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz", + "resolved": "http://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz", "integrity": "sha1-S1jttWZB66fIR0qzUmyv17vey2k=", "dev": true, "requires": { @@ -18758,7 +18758,7 @@ }, "postcss-minify-gradients": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz", + "resolved": "http://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz", "integrity": "sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE=", "dev": true, "requires": { @@ -18811,7 +18811,7 @@ }, "postcss-minify-params": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz", + "resolved": "http://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz", "integrity": "sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM=", "dev": true, "requires": { @@ -18866,7 +18866,7 @@ }, "postcss-minify-selectors": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz", + "resolved": "http://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz", "integrity": "sha1-ssapjAByz5G5MtGkllCBFDEXNb8=", "dev": true, "requires": { @@ -18921,7 +18921,7 @@ }, "postcss-normalize-charset": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz", + "resolved": "http://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz", "integrity": "sha1-757nEhLX/nWceO0WL2HtYrXLk/E=", "dev": true, "requires": { @@ -18973,7 +18973,7 @@ }, "postcss-normalize-url": { "version": "3.0.8", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz", + "resolved": "http://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz", "integrity": "sha1-EI90s/L82viRov+j6kWSJ5/HgiI=", "dev": true, "requires": { @@ -19081,7 +19081,7 @@ }, "postcss-reduce-idents": { "version": "2.4.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz", + "resolved": "http://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz", "integrity": "sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM=", "dev": true, "requires": { @@ -19134,7 +19134,7 @@ }, "postcss-reduce-initial": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz", + "resolved": "http://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz", "integrity": "sha1-aPgGlfBF0IJjqHmtJA343WT2ROo=", "dev": true, "requires": { @@ -19186,7 +19186,7 @@ }, "postcss-reduce-transforms": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz", + "resolved": "http://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz", "integrity": "sha1-/3b02CEkN7McKYpC0uFEQCV3GuE=", "dev": true, "requires": { @@ -19303,7 +19303,7 @@ }, "postcss-svgo": { "version": "2.1.6", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-2.1.6.tgz", + "resolved": "http://registry.npmjs.org/postcss-svgo/-/postcss-svgo-2.1.6.tgz", "integrity": "sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0=", "dev": true, "requires": { @@ -19358,7 +19358,7 @@ }, "postcss-unique-selectors": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz", + "resolved": "http://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz", "integrity": "sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0=", "dev": true, "requires": { @@ -19418,7 +19418,7 @@ }, "postcss-zindex": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-2.2.0.tgz", + "resolved": "http://registry.npmjs.org/postcss-zindex/-/postcss-zindex-2.2.0.tgz", "integrity": "sha1-0hCd3AVbka9n/EyzsCWUZjnSryI=", "dev": true, "requires": { @@ -19562,7 +19562,7 @@ }, "pretty-hrtime": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "resolved": "http://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=", "dev": true }, @@ -19585,13 +19585,13 @@ }, "progress": { "version": "1.1.8", - "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", + "resolved": "http://registry.npmjs.org/progress/-/progress-1.1.8.tgz", "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=", "dev": true }, "prom-client": { "version": "10.2.3", - "resolved": "https://registry.npmjs.org/prom-client/-/prom-client-10.2.3.tgz", + "resolved": "http://registry.npmjs.org/prom-client/-/prom-client-10.2.3.tgz", "integrity": "sha512-Xboq5+TdUwuQtSSDRZRNnb5NprINlgQN999VqUjZxnLKydUNLeIPx6Eiahg6oJua3XBg2TGnh5Cth1s4I6+r7g==", "requires": { "tdigest": "^0.1.1" @@ -19676,6 +19676,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.1.0.tgz", "integrity": "sha1-tCGyQUDWID8e08dplrRCewjowBQ=", + "dev": true, "requires": { "event-stream": "~3.3.0" } @@ -19692,12 +19693,9 @@ "dev": true }, "pstree.remy": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.0.tgz", - "integrity": "sha512-q5I5vLRMVtdWa8n/3UEzZX7Lfghzrg9eG2IKk2ENLSofKRCXVqMvMUHxCKgXNaqH/8ebhBxrqftHWnyTFweJ5Q==", - "requires": { - "ps-tree": "^1.1.0" - } + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.2.tgz", + "integrity": "sha512-vL6NLxNHzkNTjGJUpMm5PLC+94/0tTlC1vkP9bdU0pOHih+EujMjgMTwfZopZvHWRFbqJ5Y73OMoau50PewDDA==" }, "public-encrypt": { "version": "4.0.3", @@ -19821,6 +19819,11 @@ "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", "dev": true }, + "querystringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.0.tgz", + "integrity": "sha512-sluvZZ1YiTLD5jsqZcDmFyV2EwToyXZBfpoVOmktMmW+VEnhgakFHnasVph65fOjGPTWN0Nw3+XQaSeMayr0kg==" + }, "quick-lru": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-1.1.0.tgz", @@ -19974,7 +19977,7 @@ "dependencies": { "minimist": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" } } @@ -20200,7 +20203,7 @@ }, "reduce-css-calc": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz", + "resolved": "http://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz", "integrity": "sha1-dHyRTgSWFKTJz7umKYca0dKSdxY=", "dev": true, "requires": { @@ -20304,7 +20307,7 @@ }, "regexpp": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz", + "resolved": "http://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz", "integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==", "dev": true }, @@ -20338,7 +20341,7 @@ }, "regjsgen": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", + "resolved": "http://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", "dev": true }, @@ -20410,7 +20413,7 @@ }, "chalk": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.4.0.tgz", + "resolved": "http://registry.npmjs.org/chalk/-/chalk-0.4.0.tgz", "integrity": "sha1-UZmj3c0MHv4jvAjBsCewYXbgxk8=", "dev": true, "requires": { @@ -20431,7 +20434,7 @@ }, "strip-ansi": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.1.1.tgz", + "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-0.1.1.tgz", "integrity": "sha1-OeipjQRNFQZgq+SmgIrPcLt7yZE=", "dev": true }, @@ -20660,8 +20663,7 @@ "requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", - "dev": true + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" }, "resize-observer-polyfill": { "version": "1.5.0", @@ -20862,7 +20864,7 @@ }, "safe-regex": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "resolved": "http://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", "requires": { "ret": "~0.1.10" @@ -21176,7 +21178,7 @@ }, "minimist": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true } @@ -21361,7 +21363,7 @@ }, "serialize-error": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-2.1.0.tgz", + "resolved": "http://registry.npmjs.org/serialize-error/-/serialize-error-2.1.0.tgz", "integrity": "sha1-ULZ51WNc34Rme9yOWa9OW4HV9go=" }, "serve-index": { @@ -21459,7 +21461,7 @@ }, "sha.js": { "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "resolved": "http://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "dev": true, "requires": { @@ -21469,7 +21471,7 @@ }, "shasum": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/shasum/-/shasum-1.0.2.tgz", + "resolved": "http://registry.npmjs.org/shasum/-/shasum-1.0.2.tgz", "integrity": "sha1-5wEjENj0F/TetXEhUOVni4euVl8=", "dev": true, "requires": { @@ -21555,7 +21557,7 @@ }, "slice-ansi": { "version": "0.0.4", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", + "resolved": "http://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=", "dev": true }, @@ -21872,6 +21874,7 @@ "version": "0.3.3", "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=", + "dev": true, "requires": { "through": "2" } @@ -22004,6 +22007,7 @@ "version": "0.0.4", "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=", + "dev": true, "requires": { "duplexer": "~0.1.1" } @@ -22265,7 +22269,7 @@ }, "strip-ansi": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { @@ -22283,7 +22287,7 @@ }, "strip-eof": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "resolved": "http://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" }, "strip-indent": { @@ -22331,7 +22335,7 @@ "dependencies": { "minimist": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true } @@ -22379,7 +22383,7 @@ }, "readable-stream": { "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "requires": { "core-util-is": "~1.0.0", @@ -22398,7 +22402,7 @@ }, "string_decoder": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "requires": { "safe-buffer": "~5.1.0" @@ -22462,7 +22466,7 @@ }, "table": { "version": "3.8.3", - "resolved": "https://registry.npmjs.org/table/-/table-3.8.3.tgz", + "resolved": "http://registry.npmjs.org/table/-/table-3.8.3.tgz", "integrity": "sha1-K7xULw/amGGnVdOUf+/Ys/UThV8=", "dev": true, "requires": { @@ -22488,7 +22492,7 @@ }, "chalk": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { @@ -22736,7 +22740,7 @@ }, "chalk": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { @@ -22763,8 +22767,9 @@ }, "through": { "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + "resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true }, "through2": { "version": "2.0.3", @@ -23013,14 +23018,14 @@ } }, "tus-js-client": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/tus-js-client/-/tus-js-client-1.5.1.tgz", - "integrity": "sha512-qBSNXpc6ZPe6stn4NSkQ1dnVhVblPAtQo6037g5Qr5zr9gGX1gr+8e0+HtQMBp22Ouo6LYesWMdKbcOR5sRj5A==", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/tus-js-client/-/tus-js-client-1.5.2.tgz", + "integrity": "sha512-ZhWOLNw3ZRfwS2Ud47GWxdSnXfcVUg0VEDA6feHyv0BHjsB27vl9KftJSXiiWiYRfDAb2HUo9kp1V+N6H2XgPQ==", "requires": { "buffer-from": "^0.1.1", "extend": "^3.0.0", "lodash.throttle": "^4.1.1", - "resolve-url": "^0.2.1" + "url-parse": "^1.4.3" }, "dependencies": { "buffer-from": { @@ -23160,7 +23165,7 @@ "dependencies": { "convert-source-map": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", + "resolved": "http://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=", "dev": true }, @@ -23461,6 +23466,15 @@ } } }, + "url-parse": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.4.tgz", + "integrity": "sha512-/92DTTorg4JjktLNLe6GPS2/RvAd/RGr6LuktmWSMLEOa6rjnlrFXNgSbSmkNvCoL2T028A0a1JaJLzRMlFoHg==", + "requires": { + "querystringify": "^2.0.0", + "requires-port": "^1.0.0" + } + }, "url-parse-lax": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", @@ -23516,7 +23530,7 @@ }, "uuid": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.2.tgz", + "resolved": "http://registry.npmjs.org/uuid/-/uuid-2.0.2.tgz", "integrity": "sha1-SL1WmPBnfjx5AaHEbvFbFkN5RyY=" }, "v8flags": { @@ -23563,7 +23577,7 @@ }, "validator": { "version": "9.4.1", - "resolved": "https://registry.npmjs.org/validator/-/validator-9.4.1.tgz", + "resolved": "http://registry.npmjs.org/validator/-/validator-9.4.1.tgz", "integrity": "sha512-YV5KjzvRmSyJ1ee/Dm5UED0G+1L4GZnLN3w6/T+zZm8scVua4sOhYKWTUrKa0H/tMiJyO9QLHMPN+9mB/aMunA==" }, "vary": { @@ -23682,7 +23696,7 @@ "dependencies": { "async": { "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "resolved": "http://registry.npmjs.org/async/-/async-1.5.2.tgz", "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", "dev": true } @@ -23997,7 +24011,7 @@ "dependencies": { "minimist": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true } @@ -24614,10 +24628,9 @@ } }, "whatwg-fetch": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz", - "integrity": "sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng==", - "dev": true + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz", + "integrity": "sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q==" }, "whatwg-mimetype": { "version": "2.2.0", @@ -24721,7 +24734,7 @@ }, "wrap-ansi": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "resolved": "http://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", "dev": true, "requires": { @@ -24860,7 +24873,7 @@ }, "xmlbuilder": { "version": "9.0.7", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", + "resolved": "http://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=" }, "xmlhttprequest-ssl": { @@ -24893,7 +24906,7 @@ }, "yargs": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.4.0.tgz", + "resolved": "http://registry.npmjs.org/yargs/-/yargs-6.4.0.tgz", "integrity": "sha1-gW4ahm1VmMzzTlWW3c4i2S2kkNQ=", "dev": true, "requires": { @@ -24923,7 +24936,7 @@ }, "yargs-parser": { "version": "4.2.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz", + "resolved": "http://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz", "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=", "dev": true, "requires": { diff --git a/packages/uppy/bundle.js b/packages/uppy/bundle.js new file mode 100644 index 000000000..0228a7ab2 --- /dev/null +++ b/packages/uppy/bundle.js @@ -0,0 +1,43 @@ +require('es6-promise/auto') +require('whatwg-fetch') + +// Core +exports.Core = require('@uppy/core') + +// Utilities +exports.server = require('@uppy/companion-client') +exports.views = { + ProviderView: require('@uppy/provider-views') +} + +// Stores +exports.DefaultStore = require('@uppy/store-default') +exports.ReduxStore = require('@uppy/store-redux') + +// UI plugins +exports.Dashboard = require('@uppy/dashboard') +exports.DragDrop = require('@uppy/drag-drop') +exports.FileInput = require('@uppy/file-input') +exports.Informer = require('@uppy/informer') +exports.ProgressBar = require('@uppy/progress-bar') +exports.StatusBar = require('@uppy/status-bar') + +// Acquirers +exports.Dropbox = require('@uppy/dropbox') +exports.GoogleDrive = require('@uppy/google-drive') +exports.Instagram = require('@uppy/instagram') +exports.Url = require('@uppy/url') +exports.Webcam = require('@uppy/webcam') + +// Uploaders +exports.AwsS3 = require('@uppy/aws-s3') +exports.AwsS3Multipart = require('@uppy/aws-s3-multipart') +exports.Transloadit = require('@uppy/transloadit') +exports.Tus = require('@uppy/tus') +exports.XHRUpload = require('@uppy/xhr-upload') + +// Miscellaneous +exports.Form = require('@uppy/form') +exports.GoldenRetriever = require('@uppy/golden-retriever') +exports.ReduxDevTools = require('@uppy/redux-dev-tools') +exports.ThumbnailGenerator = require('@uppy/thumbnail-generator') diff --git a/packages/uppy/package.json b/packages/uppy/package.json index dcf591cb9..bc0066ccd 100644 --- a/packages/uppy/package.json +++ b/packages/uppy/package.json @@ -55,5 +55,9 @@ "@uppy/url": "0.29.0", "@uppy/webcam": "0.29.0", "@uppy/xhr-upload": "0.29.0" + }, + "devDependencies": { + "es6-promise": "4.2.5", + "whatwg-fetch": "3.0.0" } } From 865f956ddf9083e38ca284a90338457756c30cb3 Mon Sep 17 00:00:00 2001 From: Artur Paikin Date: Thu, 6 Dec 2018 16:40:31 +0300 Subject: [PATCH 36/41] remove es6-promise from root package.json, since we are only using it in uppy package bundle --- package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/package.json b/package.json index 7adb4a70c..e97eb1afc 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,6 @@ "disc": "^1.3.3", "enzyme": "^3.7.0", "enzyme-adapter-react-16": "^1.6.0", - "es6-promise": "^4.2.5", "eslint": "^3.19.0", "eslint-config-standard": "^10.2.1", "eslint-config-standard-preact": "^1.1.6", From 0ebf2aa8f483b364edc62b40b354f374935ff6ae Mon Sep 17 00:00:00 2001 From: Artur Paikin Date: Thu, 6 Dec 2018 16:48:30 +0300 Subject: [PATCH 37/41] =?UTF-8?q?=C2=AF\=5F(=E3=83=84)=5F/=C2=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/uppy/bundle.js | 41 +---------------------------------------- 1 file changed, 1 insertion(+), 40 deletions(-) diff --git a/packages/uppy/bundle.js b/packages/uppy/bundle.js index 0228a7ab2..573f5df69 100644 --- a/packages/uppy/bundle.js +++ b/packages/uppy/bundle.js @@ -1,43 +1,4 @@ require('es6-promise/auto') require('whatwg-fetch') -// Core -exports.Core = require('@uppy/core') - -// Utilities -exports.server = require('@uppy/companion-client') -exports.views = { - ProviderView: require('@uppy/provider-views') -} - -// Stores -exports.DefaultStore = require('@uppy/store-default') -exports.ReduxStore = require('@uppy/store-redux') - -// UI plugins -exports.Dashboard = require('@uppy/dashboard') -exports.DragDrop = require('@uppy/drag-drop') -exports.FileInput = require('@uppy/file-input') -exports.Informer = require('@uppy/informer') -exports.ProgressBar = require('@uppy/progress-bar') -exports.StatusBar = require('@uppy/status-bar') - -// Acquirers -exports.Dropbox = require('@uppy/dropbox') -exports.GoogleDrive = require('@uppy/google-drive') -exports.Instagram = require('@uppy/instagram') -exports.Url = require('@uppy/url') -exports.Webcam = require('@uppy/webcam') - -// Uploaders -exports.AwsS3 = require('@uppy/aws-s3') -exports.AwsS3Multipart = require('@uppy/aws-s3-multipart') -exports.Transloadit = require('@uppy/transloadit') -exports.Tus = require('@uppy/tus') -exports.XHRUpload = require('@uppy/xhr-upload') - -// Miscellaneous -exports.Form = require('@uppy/form') -exports.GoldenRetriever = require('@uppy/golden-retriever') -exports.ReduxDevTools = require('@uppy/redux-dev-tools') -exports.ThumbnailGenerator = require('@uppy/thumbnail-generator') +module.exports = require('./') From 6d0e47a0202e84aac2f3be762f598f27459805ec Mon Sep 17 00:00:00 2001 From: Artur Paikin Date: Mon, 10 Dec 2018 17:47:54 +0300 Subject: [PATCH 38/41] add 0.29 post draft --- website/src/_posts/2018-10-0.28.md | 2 +- website/src/_posts/2018-12-0.29.md | 87 ++++++++++++++++++ .../blog/0.29/progress-size-calculation.jpg | Bin 0 -> 16422 bytes .../uppy-core-plugins-separate-styles.jpg | Bin 0 -> 106203 bytes .../src/images/blog/0.30/unknown-progress.gif | Bin 0 -> 229206 bytes 5 files changed, 88 insertions(+), 1 deletion(-) create mode 100644 website/src/_posts/2018-12-0.29.md create mode 100644 website/src/images/blog/0.29/progress-size-calculation.jpg create mode 100644 website/src/images/blog/0.29/uppy-core-plugins-separate-styles.jpg create mode 100644 website/src/images/blog/0.30/unknown-progress.gif diff --git a/website/src/_posts/2018-10-0.28.md b/website/src/_posts/2018-10-0.28.md index 8292d2895..04949823b 100644 --- a/website/src/_posts/2018-10-0.28.md +++ b/website/src/_posts/2018-10-0.28.md @@ -6,7 +6,7 @@ image: "https://uppy.io/images/blog/0.28/dashboard-uploading.jpg" published: true --- - + In `0.28`, we are introducing a new “Single Upload” mode, improving on the Status Bar plugin with a spinner and different pause/resume/cancel buttons. We'll also share some progress on bringing back unified locale packs and a Transloadit Preset 🍁 diff --git a/website/src/_posts/2018-12-0.29.md b/website/src/_posts/2018-12-0.29.md new file mode 100644 index 000000000..f1f5ccd3e --- /dev/null +++ b/website/src/_posts/2018-12-0.29.md @@ -0,0 +1,87 @@ +--- +title: "Uppy 0.29" +date: 2018-12-11 +author: arturi +image: "https://uppy.io/images/blog/0.29/uppy-core-plugins-separate-styles.jpg" +published: false +--- + + + +`0.29` brings bug fixes and improvements, while we are busy working on Uppy React Native support (which is already [coming to our resumable file upload protocol tus.io](https://github.com/tus/tus-js-client/pull/132)) and a Transloadit Preset. Importantant highlights of this release are: separate Core and plugin styles, using file sizes for progress calculation, `responseType` option for XHR Upload and some visual Webcam bug fixes. + + + +## Separate Core and Plugin styles + +**⚠️ breaking** + +When installing `uppy` and plugins from npm, you had to include their styles. Prior to this release, you could only include the plugin’s style, say, for `@uppy/webcam` you’d include its CSS: + +```js +import Uppy from '@uppy/core' +import Webcam from '@uppy/webcam' +import '@uppy/webcam/dist/style.css' +``` + +Now you have to include “general” styles from `@uppy/core` as well: + +```js +import Uppy from '@uppy/core' +import Webcam from '@uppy/webcam' +import '@uppy/core/dist/style.css' +import '@uppy/webcam/dist/style.css' +``` + +Please [see documentation for the plugin](https://uppy.io/docs/plugins/) you are using to find out whether it requires a CSS file to work. Generaly UI plugins, such as Dashboard, Webcam and Status Bar need a CSS file, while utility plugins, such as Tus or XHR Upload, don’t. + +⚠️ Important things to remember: + +1. Dashboard is a universal UI that comes with Status Bar and Informer plugins built in, and as such Dashboard styles already come with Informer and Status Bar styles. +2. Dashboard also ships with “Remote Provider” styles — you don’t need to include anything besides `@uppy/dashboard/dist/style.css` for Google Drive, Instagram and Dropbox to work. However, Url and Webcam plugins, still have to be included manually. Here’s an example: + +```js +import Uppy from '@uppy/core' +import Dashboard from '@uppy/webcam' +import GoogleDrive from '@uppy/google-drive' +import Webcam from '@uppy/webcam' +import Url from '@uppy/url' + +// Core and Dashboard styles, then Webcam and Url, but not for GoogleDrive — +// those come with Dashboard +import '@uppy/core/dist/style.css' +import '@uppy/dashboard/dist/style.css' +import '@uppy/webcam/dist/style.css' +import '@uppy/url/dist/style.css' +``` + +## Using File Sizes For Progress Calculation + +When possible, file sizes are now used for calculating the total progress. Before, we’ve used uploaded percentage for each file. That meant, if you were uploading 4 files, and 3 small were already uploaded, while one very large was still in progress, Uppy would display progress as 90%. Long story short, Uppy now has a more accurate progress bar 🚀 + +Some internal details, if you are interested: + +1. If there are files without sizes, the average size of all other files is assumed for the unsized files. +2. If there are no files with sizes, the percentage is just based on the percentages of the unsized files. + + + +## responseType For XHR Upload + +When using XHR Upload (or S3, that uses it internally), you can now configure the XMLHttpRequest `.responseType` value. Allows the S3 plugin to tell Firefox not to log XML errors when getting empty responses, so it finally fixes bugs that were caused by this, see #518. + +Because AwsS3 now sets responseType: 'text', we can no longer use the responseXML property. We already did text based parsing for successful responses, and now do the same for error responses. + +## Misc Changes + +- @uppy/core: Don't pass removed file IDs to next upload step, fixes (#1148 / @goto-bus-stop) +- @uppy/core: Fixed getFileType() when passed a file with an upper case extension (#1169 / @jderrough) +- @uppy/companion: Use `createCipheriv` instead of deprecated `createCipher` (#1149 / @goto-bus-stop) +- @uppy/companion: Store Provider instances on `this.provider` instead of `this[this.id]` (@goto-bus-stop / #1174) +- @uppy/companion: Pin grant to known stable version (@ifedapoolarewaju / #1165) +- @uppy/companion: Fix — socket does not handle server.path option (#1142 / @tranvansang) +- @uppy/webcam: Fix a bug with Webcam video overflowing its container (68730f8a1bf731898d46883e00fed937d3ab54ab / @arturi) +- docs: Add `triggerUploadOnSubmit` to Form docs, add docs about options of hiding upload/pause/resume/cancel buttons; talk about bundler-less polyfill use (@goto-bus-stop, @arturi) +- @uppy/react: Allow Dashboard props width and height to accept a string for 100% (#1129 / craigcbrunner) + +See [full changelog (0.29) for more](https://github.com/transloadit/uppy/blob/master/CHANGELOG.md#0290) diff --git a/website/src/images/blog/0.29/progress-size-calculation.jpg b/website/src/images/blog/0.29/progress-size-calculation.jpg new file mode 100644 index 0000000000000000000000000000000000000000..96a545909d1d458c7f100476d8819cc0cc1d21bf GIT binary patch literal 16422 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 literal 0 HcmV?d00001 diff --git a/website/src/images/blog/0.29/uppy-core-plugins-separate-styles.jpg b/website/src/images/blog/0.29/uppy-core-plugins-separate-styles.jpg new file mode 100644 index 0000000000000000000000000000000000000000..739285a9c2347f8b0b1e14ea98980fd157f4088c GIT binary patch literal 106203 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%0DU{#!-?9~0?8*4Qf>a6-a#NxNG zWGTo;*VtK}XUK{KXGGiGEvwDfsAL3|wYZ%P8A8_A`Xo`TFBh0ET91g5l~^z0vVg-u z>pu})&oI4zgVJvuovJbkzTc?w)`sNGs3nm0YpxLG(dQHH&tKpKo=?u}dRi?cU=k%o zCTy~;$?-cI5|d#VM^=}63(#4USZQ;&Aq9pp-Ud*J98FDfkr9Q-d+r_3n}>7({|o}2 z0ZvgihC1x|8u8VojYBB-XmyLx8^o4Ejst~l=%i)$RDC!ub%MZ!=JTPkOXuW9TBmjL zcj4~@_B_i>MT0Ei9henmx0v812+^Yfaz+wmsmEE1*GxnoDffeBZ~gofdHpRh_kjeP4S(;lA|_p_D{>j(u*|8+pX@RaK}g6@zoonNasE zLajj3s3EDc-k-XX&&w^Z{Tp|o6&0^~*_Dk4t#)+#2;ZcO;Ij%A#_s`gGK7XSTKENarYCA+R>UOw;HQ`xDkvf93%eUM=9P1Ez z!R=U5j;}z6#Yz^YWM^97!kQqpNXzt$tB{Dn(^u8Q1gl?=*XhZ_|4P;lSPXt&l7O8p z)mf!5fW%f}yrI1OTzcKNY3xiSdcrCKd&bXrPn&M5!YVjIZNBj~SR#k+##r)NAi$heGgcf9II%IA zwq$Mk<(2SFo_Yj?G(CyKGr-s3{Qd~Nn$c#Rv#989muP%+3lm11?1nI|V2wAjosI1( zQRRz^(h7jZS3o#A%fAcnIWw07CJGOPD=5x@bB6Y<=Vo+pF~m$q6}Z3=Cq3$}oJ&iA z@i$I}mtDs|{>Tz9Q*l0DTD*`*L;8##(6F;`!DqW?&WVi>b~5AG4*WSeyz5 zPe-1ER&SUzv9J2DcuE1CX=u3uTY6Pse;JUuS%gIlV#3rPV$Tu()7VI%-X}FUV@Nig zbeAVyztd9DW*L?Qa9|CkIol>Z`@-*@II|4ZEHFaXXEIlYgwYfQq}n8Nj>OPKO{!AK z6`c$pyY48;Y1^3r1<2RqrUCNaoZ|ycTG@C_H{f{hA)Y)K&yxv9aH+}*K7IA4Ij~qTn#M2ZdQ_yL4xOpsy)oE1?Je0yVs5r%>gt44uXlt^W)naFlp4Mg^MaJ>P zlPW*%u!*W!yn=&3AbzoNq^q{6^r0H5CyscTsrhV<`6@qx&)iz2BFdu*V;1 zg=F%d&A>@u*}G7lXua1h-14rjGB5(;e0Vwu;z^zGflTvjUCwO_mYt5V(3^=l^Er~i@3Te}+Wb>cY5CP_1uzrtqsYH#_4@#YoC-nFXst;&#tPZDBz8`2;l58)1w6eW^qI zAC}|fd;U3qZ8>v_;u9Kh|LE2Brbby7%w}HB7UW|PSf|(xs4-DnkF|J@KJUzGGBIhW@j{lPV~blDdtkDz^7nRS(Ro0R7HaccaNKgF7(Gy^cC&scfuZG z`FGkbtieLJ@!zN$-Tt%@vay8-fKOMG`s6MtPf}oe(WBmf$NO9zOlgrP)2|c;nmWuy zsj#D|xL4(>XOOg+Q@vG)B`lmsUdyc}vo!76(I+XfETO4mq8U`GVFH|OnXX)lfN~zl z(alP+3<8sEqaBLrir?vslXakz=cK=AKPcSew9X1#hP&W1+x;v`N!wd73u}{<&eKL9Np;`P{tEe=Yl>a!14$kTaQC7YSZ8Mt8&mBc!LmEmHn9Dm} z+jnOMO*CK2qZyRd8Usl+fo1rRSjA3+?Xk>?xt*21^(A=(d$}#|%mc*F{p=9i6r#rK z4A8S!@6KgdzB*VKsIvRpRn!q89LjG|pjn!`Ky{D=vB76;j(o5#q!@Pd>s3^Q zH0&~BgcuY7qrbWtMm^swkGUK0O&4Iwh!6Q~FWOQVNR{hi6vgP$#1HcFb!?k2hJQdQ z8alp#`LZlGTH@^VSW1P_G)AMlJiPfhXWH73FB^eH*Nrro)+@2QzQO|zx z(CR0ucW|>$5GU>K!wYNX7iW0QQfx&6QWO~;ynfrPqPvi3wklMO*_w_Ak_pR-CXTqd z2*F%Hmk*1Cp81g2gwKDQ-niKdN^UY-DRoN=Wv^NoFgx~-V&J8yj^&$rsW{*dDe7jW zoEX+S&i`(Z&u#?K3-KoLHEp#kVpq5%@O3%rrfRpi`90F`p~SuaVc|h{B*MTU=N=!q z+j*|>_KU)(-xtZeqe2-*vuhKPg8>lA zqS>VYz;iOlZRX<@1dsGX9zib{6yA4c*Vrp>WNgE2Zj{Dm>zBPZzbZ<%g0%JMM|lhjC-kTPNqh$$@qneQITMahx2~;1F>E<(jqw zAzl~DTe#u$R7`n+lS_1@8C9JuE?W0=4I>n(?|Ug@E0_;ZhMJobO`8@PUCA zpCdayPc#4KZ570d)i-Gr6z8im^Rnix`a|P=vC+=NL07Z^VM_-r@jd>qf2M6`9 zHR14$)uPb3Bk&~1%({LB{Uz7Psh+fWKlvZ4nL(4L7wJmpT2R8nA$e-6vh?Q~56iT- zKg*dw?1N9HWX*gg`I`eon#1A8AsJJXS|07Kg%lf;t?UDhb2%f0qpK`Vo5YFMf%-Vx zy{8Z!!BAgXe^s(-6h8JaE#rE+-qsvvHYewB+EX8Uu8q2da(F&ivq1XmLL?ba0fpiI z%Hg!MSNwtXM7ics+Qj@Th5rI9}TPhUnnkX#p z_Ju^4*XSbz%4Hacploha=?YBDT$9Wd4{u-(#Z3!_p z*+CWKrl4034g_o4`Q>_6f6=gse{Z0h<$zCg<7K>U#?w)u)u{GTBlI@^$7^?4rOi0Z z?7U$>E;`0IYg?(b)E=6;bkk1sZ1lCgscS*~j`5I+%Ht&kxh*yZVWCO8<=W=K^-;wM z6K!NQHf3^-w$oTO;lYfXH*njs4>{bMTYnB%ApGKQEz6>r%xUC`PmkL&gYeAPBdl*T z0ObA1`X$HQYM<)RHoVZ`d_ZL3ve!h<*8(A1PsI7E0%tusv*hMYCPt5wMRSXacZ|S) zysVfglxIagS9ew^xtg2hmyi(+*m1>*N+)72&xctq>rWUV@@{mojc1c>S56jERNKb# zEqJTJS>gj_19d`w1kJxy*h5cUFfXhWqG$UOH5f8mc3I}5Dcy`FQSSkhK4u)yN67s0 zSYDV7-b6nF2VA6e?fTTgww9z-Afysa2_P0Dh!=3pa0rpCofCu1^|y>8yR>Wolvoz( ziS}Yc*&pnkMI-+VyrPrM1`DpSCJwU-FX}yvm`}SMqtB^6)fu7Po4?|UHWy2HxX zD&bO<#Jo$&adctmAifvIFA0S^u3HSXrGN?ul3V+zMLA5>D7JT!!2HSXGyQWpfX#7G8cy%&F6x# zO#5Hi!yCO2`^ds$u&|+%axMo?Cd1x2A+-$cJk;yVWjujnOuv~*D90;?scz21>?=9V zB!kKDyiqbIhR=(Bc6J$EC)vTTI_vyLYKf1;Sf16-*Tid(wRhInNW|UB$}`cvbH{`M znaQzbu;DKm9equinzrl;{lQqMXR!3y`%DexGQs_&ClKD6#P!%1=X@r1R7>D_?W zUO;J4e^y_J;WbZsDI8QHNhr){zwdIEZvT8N~M!}F3(N5S9jF@y+oChr+Jh?hOHw}sNHwDJn2bs*2Ivw z`mQEBfrADQjCm!*#33+-Jl3+)2PxcxGNQ0%bN=SJhL{ETm15&3o?YP zrG-wK@og`|4UGp}6G`+MSWB3cppN9@$SqP{e zPzIO!f@{|i^psOZan-%8go|xPn5@?njju|{9wJuv&?DPY;kQ1DPk4g4T1dp3Wm~c; zRZ`rIs)hd6gx0}ZI6P{O43j8zq;%4Zoq)!255+cky}6=7+&IFi_Ul|5BuyT6PW8my z-epdw0_ZIjCJfORy5GO`nBR}xlnD_OB|Ol4ZlEz#`_i9IeRWyasZlOI zzQA?(anoeAT_#}Mq;M-e#H7g58XvTyrx-OP)E+-RzkFv$vjd(yWuufJ1}H3{LRw0J zCB12vyH8L2VEB;W)_GvPb}Co$JdG_J{_7+W`Q2*O``RzOwLPUXiF#KG7VPVzH}Yp1 zK=(j0h%MHC{aP`a*xY;@*%(h#84pnLE=Yu5`XVRI7NLS-zCicvfKZbZu# z*DB>D;*RU?%KV68K81OFODUv%GMwry^V?|Z6Wqb6KTh!boY2=+L0A8(X&TfMPuSb)jKgg}^6TX<%gqISwAkO~{Cv8&InYR13KuT=4%R?Ng6+_ty%=LThI zR-=|5YsVP}09MSs#^C6LlzEDN$QdtGSdLnp0lX z`XCO!N_nioJmxL3X0Xu{LLZVdo{_Zk&9O6n(1De;stLAiAlF_R)rv2%VmutvPn{)T z^WZDlQ*N=L(|uCSpoI^{Qb7P{pNwA>A?)(_lDRBpgWiwQTA1OK7AK}Grd(auN${8V zkx0aX+@0-0KY5NA#F(wU-l&aX-lynSZNU$zNpCokrSgJ!h7_^#d;X`n=u6Go=}LGj zGWW()|3kDWp7O4_wpJA#NDQEE!N-Wv`o+md69RycCL#`UGSY~$iEB)EROqYFk~0n1{^dlQQT4FsWh*?8ZWpLM zT*_Y#p3sNUjxPD*#K+_s6jHdgh{x@it*uPuqsH0;FZR$cCo zC3xQxd#FH3&7-!m|6!r8i;0|Qtyc0+6SOWlDc|u`Mo8KU4Kn9hB1`~(!-{@~As2Ou zvV|&Kb530?=Upn>uH2Hb7MB_3ZPSowE#$P6*|tZVFp0{^xgp9fJ*PTi&~Nu?f{LMn zYD(SF`K%M&H}cW5C&le)KSFZjofrW!pG|mEF0L)&X^)E03vuUu@@Y@R;Q7c-8`k>&<$ zWoi1DB&}=g>+86ZmNNQsO~fm8XmTcvXNaYj(6~4HIN!w1wDB&OWfSpEbVJ)ilSa1b zo5m1nH|V;~ydFQoQ|^5d$C7r2PNJh#yxM@2Rj!7wt=fB?p%ES9aHYv`5+*6FzrIuV z(w}X@55UhJcx0%p@V_fv_j+CS#nZ{ZbhiS+QU~5%6(xorKb06{@fxRIffs+EpMGx= zpD$ci-~f*GpU{1E&;N3df9vMy`W7~y9gGHDGAfPH zPiVeOjt;>NMM+-rnxCZUNR91;8I~)jQb5L~|7Q%{m8WYLt2c^Jrt*QwaBk7Fg$ok2 z!nF>?)CW9}y!aGh6)I5z02*H$)(%n&trx2NK=juLAr``Gv27ljPQF(V zw-Lhc%@jv*5g`y%w>AxieYnWHnCt#^V_EzAlx2zU5;JZ z&E3*N>TflcDQgE9DAw>!r0W%lY zM&45E*;8Nhh5F@HO6DSv3h|DCm$PkjShOEyZejMKfMQx;oGCqxEk{I zRY9f1DujfJk!E^z_E8jB7qqMxc05V^Wab*nWamZGP318W!s-UL#=ZnmGKc)!l#U&Q z^c)!OnbIV=q&kU><4}`;%SyYgQd}@z9JRQKjKq6H9T8CV803;q8ax%s8GNy3<#AFl+xMy)QJdl@MVFh zu!R60$QBRk>%*a#$kzK`C^mb$)3d1uc<`#cs*ebWj~S+oUzZ`l`5*| zev>$9`P7*s^tD3P7UpFwZ)MlysM`-%nQxnlOzvKP3zb6DFGOUCtes4Y+CoRAd!28! zC#F{QkR>qVK|XmfP#@52`$H0M6=1Gg8`JR36npy?;kObVp_V6=D>N(T3+l8{a>dPV z*NK1H3|#GuE8dW>B&D4!GN5735Ux}XaDX1wbCGlV0c&qr#jfE*7uIa9T?4kZ+H7Np zikSh`D@(F&@=kuXl({ublGHPV^h0Q5yvrziwo_Z+7GuIf&OChgnFQKRLK@@3@rh46aLoHUpNfnn}%3JLl%k!CNjShcC_I z+0D%!L`aOBUsiyK@mk9y0~Qp(%&Wqv<0@SC0?&5%C2xdDQ2^ZW#;xE7XMPw5vn`eB zQ-){iG*R?RwbKmqE=a2eCr2^AH$dZ|_?2I5Irl6Yp|sQN=(>^ zQd?m)#vN%Vp97kse74F^@8+Pz)I2MjTy*Ljq6I?sovPCD!jHJ zSrz_+c6|K6kZmLqKY>($UjMIDet6={G!_0MP=#&c=HzYyo;WZCt8r8%c=YB=r8+W~ z$zGppil$$%IAz+{6O?m9C2OrZY#UM1@NQJQHi_*!9+e6K5~A|7Kr2469?_)!bN#w` zDlWz`TatZf6jHcau**D2a6335XxQMDBXqQBvPK{!ek^Yw8#}Sag>siM!R6eVHzw9}XQq8t=+!oZalJKWVCPbDEY&bV5 zT~`;y{8C5$)>n5fk1(w{yUAOI4eMn!Su=xUkdO~U>FEAJXD<65-cK-#@>xgyL#gMp zBmLW7qL?y0jrs%z#X!r8!-)z{B(1Ha-&qx*&(bepw4RxaKACV+WJNf#xgF-Yivbq-)lP zw@U->@LQWxJ)YB6M`kvNBNd7p^mLf}kmS=xanqEPlmLS&wBYep#^z5IGms?TcUX0A zi>@Ftk(G~w^ASa)-$4*wXj#F|QSGF0=B+LL=mk?XrCgzJNRFb5pk~I&-~9OWIsFAp zNvuB);q4D6=nwRj5a;}0(x1iJT#g}|DO3;W&5uPeg9|2_mcPShs;krC|hmc0I>E>&i}I$jt#`cAbxo>$naT{Ft_1rK}Ts^d9(m)Cuu74w=o?kf{2{ zZ^4+FV9d@!J<0hoDTx@Bb0~2Y54sIs4KN{NIsIl{ImF^`K?3F>SGRoYVx#;X1X?Ts z9PagqQvqUUh8SbGTEss}4X69u{+YF26ZUOvk;EEgfUe16@uW_XuJ7Jy{=;hgZ{qd; zkL>Iid|D3QmvW;ERBGU>l|TpwHETttlaM}iTeABIJ8~_XG&MsubqMEm;p$tLdS%Gn z@MnkM@4u0pswpo9)9BsK&>uG*(*6)V@+ydF!E>=LLb`e;R2KW6IG;rOoUNSI__!3x z!|B?~-<1*)0>job1BTA*QXwjnLN+$J1T|@cEjU;)Th#lh(r3?13i6JY%MXS65@8_` z&sX>6XjH&qDNDx7X-c?Ek97vSqUgpBUt=3{l|nVJ7D#hBLYd_tG(o9RS8I}Z@)0A| zjLPqG*^`vwizVn6jdS^)R_tlgP+s-3rtWp>QU59p_Hy(0FiGjDjH#X(V=e8L9>k5d z2UfbL^AeIa{sKVN_KMxJjk9ynuw7;IK zfo!Iw8Wp?TmvS!fm&)YDvK%I5ApWb+o@61wkIgYvErnh=zG0^! zDL@6^eX%_qf%x2FWQ&`jF+*UCjS9E zWK)AY@(lp0_dUnPC*R~1u23Td;MM4@kFKeCd7C(St_cpA78SMN{G%Z*m=E4hBfz`e z5|d~fA=H-%7UbpvuYpkP!iHD6F~7|D9OSvOu2s|APoCNeO%F3u2P{ivG66%C{aHBc zX=l($UY2p+A7oUw>O|zG)jRYO}whgkV3j zaFS?q+q9t_*5)gegs_Ip_%P}rxYR~E|irqaTCrK^jiHW7_K8uO6 zeYL)M9ZsiTM631kIMShvxd5=@$X@507h*Dx%3qe1QYIkB>F4+nL@!$cl&P=B!eaqYerPo2c7TP(cbTXXSzHJx`#s4&rXF(|s>5M&oH z(J6PXFJY2UDF zvxY|$ZjuR_CpHgdNx7uHXNl?ct5hv6sKtK5M8g0R{r2qgNl2;674IPuTm6% zVd-_-hkXlz3$UW594E2BfiszcneTpnO0MyB#wp2PmgcCLc`t^0vZn!kOTjbXM=2y( z(?_tk9+L*2Zibv9C44;}^7VLh*jdH}Y!C(Zo=dm23FN4Mbig zg+(x?r9vok@1F=@p<(zJ5n`x!TUei{u&Kp}H<|7kH3mg!U`)7_d9gV|V?XC~j>9*_ z+fCbBP;LvmnNGfe+n^_aGAg|kV?#1mYs3#88n;uD+(>(1b(+2W%fvo8ZMXbQa+Zl112`_ zT6~G0_76)qfzV(UP9#5P94HH3CV7Q8SgS5VUkHZzrT#dNm0n2H>)BQs_m99to*Ie! zQ)%u`s}yWdK`B2SR;eYkYcc(1A86z$SlK}PDY;}q>$$B;8gq2iu1$`tHTPmS+~nLj zv7qcXMskTJC&5?|1m!t4_-l%p$JWb4FM(>T=@||}AbjP6ccY@sE{VZmJ1-2VCPlG6 z4LMPC|7h-}soTnhsEoS=g9Pqrtd0JTSrm0f4avR?mr&aT%9{pj$)zg-FzCT;})ka}7#HdS=38{R*Vi2fQZ?K;%6 zWln#@;-hJ%tmzN1(W!?dunL4un@`8(&b1p!pg6w*eLem(@p8>I1LjpJw}LceAFX{l zF@tbO|8fVGygT~l7x5vpCr4D-cTeC{@(a^i%i@OimW#dqsrMNE)WhXtkGa_1sc_-w z;V09K#zxyFdK%T{EP@1@VuXsA7}m!^0RuaANcdO>+Ek{B3 z+mJ1%+G?~oHkfj+zwtv_hWEz)ot4E~E`{{4x4YF}>%?!5hIs0$hc^_s3(m>ft(pc> z+kVlvcWq=C+f3pV`%R zB8_ODk0Y>T&MkKk;50=#p2ci}7gaG1-XU@!2@af^L}c3{x~^g&7Zbs`r%0&_OA9wz zF$-3eH#*bQxFgwsF&7URiqfWwh~Wj6M%v1SRfmHp7x) zq;_bkQck8PRWpz!<+*7VJ=JmZPeqT(WJ13xS4XQy&Od~3uyCAtw~R=kIyv2AG*s;- z^n!;2GesCZ2VJ&`QJ%~}`MS|7j^5MZMyQ_%_L#O>a(Iv<7;QnttVlV2lAN(4er-VA z>GOlZPREL~>lfv)SIt3X-19QUepP7NQ(B98yPOC}^{{S&_beC4_SF2ZsPsmm4?8JXC>0U4hNflR`giQODG%fq>>6Og@ zO@yZ<{H9O+89x%AEb*8Rf28JJ^bT`8h_l>D62gO;WZyLm-;2q|Zjx6Hc*Ec|T#VGY zR%eY?ePfs2t4?NQe+~fa3mW+pJha}0Yz@}SI?@pFC5JS9V4O|kyB%cCh~6BDad6rH zl?ai_*O&8JcA{C9Fk3Oo+2ArZFj(TFav@z&yoPhz(*e4i*PXYs&Ab+;K4eL#Yfap8qoqwqg+EQjYsx?0s6Y;tln}J#V_T%O^344Swlc){*oE zNvQsZYwcM8Y_k|cyCwwe#?i{%a|J@X&BJy^fBC69?g_(KI4u4xomE-3hNp4KumBV< z%Wk}}jJ>jAwGHROWaX9Y`F5M7u?s?;CnDOOX2BSHBg!zurZJI?W&xn5HV5tu!{vF& zN;xuLW>-*?KAc`B>Sste6CmQ)fX%W-+By1*AnBnT_36Su<9)aHJNpIobC=r1{I9>M-sOF?%T87r%%UUSZ3g^&1Tn9h=tS%XQ z;Ef6MMDnq zCSNj>N!GfqtXb??tS7yoDA}V$9q+n_UN% zSe)|GRyQ3SqrJV=;S1c+*J?gKd$f+WrtbEJO0u=Fi9zhu+_k$%WfK8i%8qSvvc0th z!?Ew+CY%<6qDclOzbu(FJOf!vqyC$IJfjEaq5>!GI7i<$L!r0^NYT~!_ zJ@0ds@>n!htVkojqkW*r*&gEib-BcxC*A7P>@MMJI!w9@WmIz)AO@fcBpwpnsOL&c z@ye`T;rdv#)}I~9LbCsWJO_Jkj|*mSS7#_>SQx3fHkA~ye3tZ$Jf0$gKj;T~tM0cc z$zu@N{EJbU*mx8-^vy6d8ter2LF)B5tproHSC&pRyIk#jC&pw)xQ9np zC+7LLR2`c$Gz#}LoS!z-9mogk0YIRN&2S`}Fb$8HG!-z%W{>u7p82IDU1D&IC zD9P>N$F!J0hKYpTn1oeU0k1m2Zs+QL{nE=nC8#e|L1V;c4{I4-?!4i2WxZjk#DLKH zrDGIF{di03(5(iU+~d?RSIn+}lIhZ@>*>vDCwq3<7o5n+`5D)$vKM+IwaNZPW_K!7 zJ-9?pyVM!NZrzU)!gX78^3Lzhb9+f1EwLm8|{MODF7ZQ9v{4WsZA>Kfv-P8(@E|#jMKa ztK#e96yFGT1Jt_$&CsR9g%;_tz((cxD4v`=fJ{@fG+yas`6Sswq&nUA8M*gKiey$jCXiK2IDbik7i;ZcaRUud7hOjVw=8~0JZz-qxkd?iMc zE0C1Ncb@+~hyJ2|Fo3yvO0~cY-}}wHkH;&+>FhI2-Ytoof_WoJ;7&aa&2tgYt(LZH zFlNFyai>AG(zpTr9iv57PU(YH;EV{Tt)Zxw!Ylb^t76qjmGrA0jtf>A?a9bttxzNR z$+N>2kiyzZ^o*Z>-}laC8*P?V>iji`MNzbvtAqWb^@}44@ENBWcHb@_>Os3*uCDh zYj40aLWWHeG)bE)7rV7x09I%X6IilwZ5+1?|1#HTO(SYcOnd*KIp#x)PffF%MPl zwBTe^q)$9P%Dw~ee0`7PFwG^cJbp_~GUDt-H}2<(8=c(;doI#5SpP~70feB98Cw}0 z{&3|QPUgYP4DwQmf+uz>`+_`(<3n6MOKbLVa<22!%W3C!WR>m|>|v3?awWn(64R%U zuZ07*I{x>y@8smsa%_Gx2n4Af5=mGW7oD{wf2>|Z%;xvRv@bch?fmvv0>caU;0H=OkdP;G$RoaP;$AO6iyU6hr-AZ7c`$rxS`neJfLFGVROMlxN*b z`@7T(?Q-QyhJyrVePGtMpy~pC#3s#{f*C%ll53g(L&x^3FCksGkT{-bbM?-6(5SVq zP4~QdiF?hpacW88$(QAT{Z}2U+XLwn zWG;CwWaHfiLgFtAF!jBVKkM3jBsgM*F(Y~F7b#yOch{1vpC-%*YALACDC`liM?BJBUr+S!DC1lkt<}sL0cLN_b9c4HnMTKjVdP8|Z(58jgJ0}al^MBP_>zpYn01R~rt_Ak zZK+0jv8s@F1;kQ`h10lPnyhSdXk#-qV}XIf#P1Ugx6_3-2&<8&nJF(O-OR?y%>Kgx zLGwL%;<9(fCtN$2$T%QTKkKtpKwr@lcDz!xM+zViS6@+MC<7e2G0yqvAhROSxq{nr z@z)mxi$nLO_@jE?((;I!1&&WkCSb|vVJ-(xcq#^g{as(G#+r}r zEl=r!WHV*n*XrFDbGd_V+76mhB(_O6jlb<3j!Sd5tW^rQs+x7*;a+E~ z)r{18nh>i|3#+AP>!mV6e~K}6)~%+$RFblL8<#P{k&hw255b2;r%H@R$;23}3oxwTrT{!rSf*)>d2WmYIt!d?)O8g-#UHR;vBG7#k^HggQ6@^}n zy}Ae(u=m5i4`55zx1?~w89xd7pcT-HEQ(T}c><*(!eD`v-u<3(O``uLv4s4psGfQ2 zoR_&HE)g^7%4(ArDk9yz;|bxhWIRU^9DI=M5;$6+cQh0ZlRq_QxHaF~@Hng{)tISAeT4oS&+b9xnbZ$a?cRJ?BGcFq;p?Zr<-GI0Y&7 zQJLMDpvw2Mhb7!b<;r`z%WB`JNCBZA4iDHH;QfhBpDk^vM)V0`p;xk!PHL*5CfW1u z^l(DmO zyyXK4Ttdb86ArJQRktw2IAo?{Ta(FT;IcXVOdqDK;_EmoolE2tW6E{J77!s?h@E3# zi+4<($mPvks)dDBkoOvbZ@c-#pr+O!w~OPc)vv*j_}+4*KZkFH{$gwd-gGDTB<4q9 z-uWGSg@{?vDzUbY3r_*4vTLlOD9;~eIaE(Sb&2s(SPcNT%(1M-Gk^rMWq2>VrKn*{Hq$LytU(ls>Azm+CPOEu$mr{Rn_h;N*mz#(5t+heRiZqP`=+s-7 zxM5$M?vf9M-b5yh7Gb2pKS4py{hhOpEL z0hBz;?xk+FT;&K@ufv|U40$^0og_1MN^#per7D7dqvx~7rCK8`P=^VTV!lpR$k_VU zr^^jpU12SiGy5fVnQ(Yoz>c7->ulzJS5*D2%b0(ejr@y2=CZc0S?y;YNQ^J_33Ov= z%ioAPtjhphqF!K|2;;!_?(}Mxpe&!_dGxFlG&bcO8YZ>7Bo1}c7B5>nH|d`dZX7ng z)GKMIi@sl85k!!w&B;f}E=e+B2&tv(&b?6q(u=I0-hmJZKXnr877Z?}w;oPpnf9)d z*qMj!`LS*7kn7UV%H)s>u%Qp9gC5#+!4E7KCTd7$U#xdKDVZjtc#<()lreGu*`sV# zA46309rISZ+Z&szgazw;MlpZ;ZDr(?I$n{?tT*MIb!e8%lC{1|b(<{Xe0jXf`~;fe zEUgYwTfX$%`anT*Av8*brn@WtLw7Gavx#|>Bb^mHv~CYsssz3krSrw=9jL#OSO$?L zf`dLJgLIDc<$iA_GeVxwjbF5$7@kIBaFy00>!#P$+B2x@@~VOpbH#fneD7n4U5Vu3 z)#>bOS4TcvoMt_VU1KIAdnN^SV7!Lm5oI3yVa!GcVl{ya9z?8n#C3TfpI~R`6b);i zxG^r>SZ(o_FMlxzYYs=+Vzn|MB+KB#%x|zyLDs+=4QwGx^gYrFMc*S;2rTZ56%nHf z*L628oUoN|`y|>!{x$1wk9{*8WGG_dk$JdKKIG%phe^c+4JFRWa zhe-&Y>Pc@OEFq7-#D2GdLYptU{aQ} z80&7SKNF*_;ybRjM7O7L{TBFM^ylS`EnO1#9P7^?R&+makCSsmax@_D@1J&&t#jgt zYR-WIV{tHdNf6r@D{Sbd6oe2%H^UbuyE%7;O`ft4I`n3OjAQ}2rcBY@)pc1;=Kj{s z_@&>aRclJGBMhWHgHwQjJKLFADzODgDDe7X5n3lzLUSdc8sfS5RkI%r;N%VOf&` zKOFj0DQ6H2CeL3|cJX|l^&HKv9y*4=&D7ubPLp9^C6h#Vrmkxc3d_#LoAiE*@dOJw zwjALk&exCE3Oy@ob}cc0eze$9W-h*JwcLD4H_h{yc8ZxvcaY6|yIRm^)fexR>*@>N z_4 z4{RV>lEo>#x9xjSTdvgrNQ+%TNo`9eYrS_Xp|d9{mW&=Js};oU0LYr{OGz55V~IbF zvPbpom$Ej&uqHD&+%u-q&*yh3VucqCW+(WzmK2q46RK>KyO%c^ab=ls4XYw1f)Y_1s}G8*9|z*M}R_`SyfDBbts8dr!{kdW48o(#N|B~h7!-lA$( z@xGfAmcY_;w#@Mvo6IsGZ`(atu|Nm!-~nDMWdyQenpqp#%*V5Quh$o%`veR)=ksqC z0ue||!H4k2H~YA&g<-53+UnDEied)ux)8k(bl%aPPrc>u8Mhp+*01DUnOTR-WL;s2 z1zzUL+_b!Sw&Bn`lVR5FcF?C6q{3LW)71B|kRKrrBI_vH08Dj}*NE3mTzTx(mod?~`xn3N10{R%)6?dn%t)Kl?tLdJhNeH!j;9&V*1cZ)lmpsayB{w{LqHynKB;&7p0ODBBFreXqxVB@^_ zND>_d?kMFxE%)p!KkHt?{-K$jSNq})Qv@mCRFjW(I1bWig-_lEMP-5R=L~|)St1mk zOUbk}Ga#4FgMO^##7+5zMrs6x;V*n);_CFBa59CqFZsZ(+M7;q{WE?Vru09fg!p=T zut0{iTO5lbsOiU+sl*hO-atU2dILap9Vf$+TmP>aI*~qmBo?@S!OIHpMn3=Y9-mNt zw~ejo#9d+XToiU84@^zAA znVs}r?(|9?b9CMfdr6>{<@O|&DhxpyOBoB)7q`og|vx!w1@UT zuET^X3_SM@|5?)c312_UE7A<7HJ*`ifm-k#5=M_kExP)jEaoJAlk=G46w(`Lh96-% zswi>N^|w?8ZEO!^ZxM8}pRVM`rjU}ap9Ju^**7x0f1SPeW$O7q&}#FJ(pvNNsjfDk z_bZjrgx!^8k~!vj@NK_q4I@Fsl!Xq)+G^2ndZ|_Ka_WFT&+fA; zEH)is4mFopSVVf(`buH-EH(#omH9~8PZfxVuHO4-F-MZWSoucV3QgW7>SU#rxiZXwS}b_g)hwo!tq12nopD{c~6|wyBfl-`9hr zK1i7V$nIZc`1xI>_ppH&+v>dJBUX-rWt2p#3AK3Ecw>UeHlRVsj0rk(5N@3XbZr#8 zRA)?#@rBT{BBWz`+T>Gz!>n;cw_P zh)mb_p!k%3{tm7nm8(o?4A%Td0=U(5D@sivE-jt9KTTm~yxQ54mzU zhR%7bR5Jrs8IJ%aNhnu8E1}aBo-xYViq0&`c%=)>8gY-l;T&nkNfyP-1YGsXsaoK| zp0QYSmLY&wo5dUYkbBafDM#=?{}-boXkX=b)su%7?|(1B!e%uTDE3kB++=q4G; zaF>s@NGHNC_PYY~KM9=RB5GX%^@5sCv=w7B$3NnrtCgc{d!0OBkR__z6Kj_(^1zrQp7p%(U1?4;G_`AE|IwBM!DEN^M&#ENE}lB?5_Q`PJhKG+Uv zYGaI)bgq{;_Tk|a($!~!v4*`}C=b8y_$Ugno^@^JBBst7TcAenx%__mZ(pOri`R4bvFlhpKk}1U>Pb? zd|urv=4i%}*grrC;y|iN;BJ?*Y>JKqw|-^%ew6wUP59H(qokAq>3ZbfK?lkv50^J3 z=$3`<>(2pRG+N_AU(%U?k_(JZg@bP!K+TSdnJCg?YB?osf4pu>OS=y-+*h3KF9d&H z%SOaR?xmMZrMDBi3i%B~^8Oe=LTVL&ux^<#RJxh&o?n7333u*c-1~J=|4fIfp<_!c z;nK2{dCJ}_?dqC&1FCh>LFF}~(s~bOBs$eid~QXe8m?(h7wV9QSPJiL`?W49E|RpV zn)l7 zRTUw{iFb3`*?Lmx*-dn&vvKhGA+#dUGDu!tVG;DUFkE1Pe_i`oU zt*{J!(`T$ok@?d{3~h3g?C!dJ z1X&!nbLjB~tH05$fF$0z?Mu(six>7_+Kn?Te&6`53)t;x5vJn+KihNY=N7b#aF%B8TM8`5)#z3{xr+-T+UPz znj0(0pr3YpMP@YJAXk+X!|u16$+T1Vp3|j4XESMR9);}2qhw|^nu|rw`Skj0PewFo z`IthkIqKg)n^cJ_8idm@P|I8>ad|poM|aCE-pbsdGfKN9ZH zjUSH25GE=#jS~f}a$#FN?|B)Silm`@G&%7S(PI6nx9<{i{D8PE+vvD0mLMcLPF{|L z!`#?b&n%=F8VcyGc9QGz1VPVGr=JT_O2We37-9yCfHr{b`zns}+-Ds@q`&?w zg9&P9K9&a?ixjHS)?^=Kr>~mB(}a08Db&RHS|viB^?M5zJohh#a@$%<6GaB0rizK- zlut)n+LICX01m0S9|+PF@Qb)&QLQK8PukuWhCvN z+cX!f!aZk9F$#>=CyEB(=}FEoZ>}`&ZPGNTn9}h(#fYz#XjlKt<`|7H<55$^vhKs_HH4XeUHjM>2sxcK2}Z49bNI zuU3`pzVYl=d*fW(_DeP<7n84=S9-D$|GH`|htZ3) z3<`|95hR1SKB?fGl~rD_WqY)Ddhch2WVSG{GMv*(1A|rfMTj?!Ou@P51_oE3&4_VE zU%E{1J_`9{!G0jI0k=WBZfDMqWxlS6_Xyej?08`mSjznK=B(L#dHprSWUH#q!6F+q z@uryx%~J>K)Bwoi4IGwdlf_vIX#t4~(RH6C9F48;gEv7adqRITD*C6!ix8915pPaH zt!RDBYjE#EO4WmsYt^GQsSIvqa*m-1l%}1SedYGxC5^s9?t9)+1xk^L~ow;5m#Huet%!*8`|373S?NHb*8qrQ)-I#u*8L2CA zdgJQ;op$8g@6z^VjZuyvy{C+6cv~ZI&R+}z#I=XR=81AY)G{SzYtPj-`R3*ao5S=S z@cI*&mGa>)rlE9WK(ivc_dJY(2Row9E!PtW|GO+vZRQ5_r*HGqeb#YB~z~| zc@UwynjU^{h{)09PwsoM4NyF>Te&7{b5gEdhG6%5!`Un+j=<1Y0LUU}2q_ za3p2G`~dKzJ4hE>Vo_hyIM4c~iAAmT?LQjL6RsWnyn?NE6N(>A?v9Ew377^z32lxO z)p;>L%~@W}?YEsLZ6pm_y z_pT}{5$lu?Pmh#)kTDjieKC(c^Mm7aEZm|Ee1ijVA~n2ICQI?OL19{)6i9K%k@83= z%9DVH@01yN3{K!3Q2C3|GI)DC_bPa>UPiZzH1~=pzs@(m-`t|!dbQ_Y-LQ%YCp@R^ z^}Jitv4D5QBbwLblS29{?dPM8T^gG2tU&(SI)Qq|F2t7>k8!m>Q2o^5YX}ofbZ+NM zw~C3RL4XiI>L_-5< z6k73)35OemC^56`6IRX!5Nlw&nKegU1jxm4xx;(ts+X?1I_YN?`Tp}?@P`~UXV5^` zMs8HQ>QR}IP3H0?uTNo-+03gN#&wSi!C>b2(sAhW!g4|=rXzV1Zu@6Wk{Q+)ym^34 z)$|>^c9m%ZYL(>H@UYbR`&Zo17|X8Gfe4m0K$bDV5MS%M;>vQi#1#JLU)h@kF7CW6 zs=gMgoPz2V3n+wAg^ZDM&Q*6B&f?YQ9ATdL$B4W~Zjf-Rxt4Iz>w&k7mwPH9O{Js$ zOXs#q9-bDehoGSj2g>IHw8@zmlX*}}qZiE#tDVJ<(zY_<=vH}8=@F6I#1WizQ>Mi^SkJbJ)X}A!z80 zXChv1BQJT&1acdVKNj4R6J}T8zc2p*OOx~WSMQW65wTRt-nyjnt4NW;4gv1%ymqeX z<0MZWZETVGE?!G%G9rY9d}!uB$SIs_!DJsQ!a^x88Dr|{K`0qkSP?wlGj`wkTGW3! zzf6Di!R46W>?)3c0!6H;44(N;(~|ONFeu@?x}V0*fz5fiPWk;jT#yFU z$0$udIQe3-GuhL%$XY}t1!_T4%r$D8sQp1KkQh&fekhA&~!AiPjC;{bRXwz z?&fr%=jz4SaH8s&;WIbaqwbeNT76gD>*gm4lzAp5%qE7Yq34JaZq1SK+K<>uV@QkD zQ+ZsD4y8?uKO)1Ts^i0LW|lp{yJK*Y1TeLG>)=hf8}#>x1}g)s$0%#AHjbsHqtmt( zR3!U4UYWOKl6CR@0hc1FfAN5h{HcUb_K@{yq#pz!G?=of;pmef`4Pcjy2ISa8&b9<~p|g4PZTv5k zc;5jl``3DGf0_%XzKmAwfr?ARN^PQco)44s#aOuaC2*#KLgN{@utc1d$b zgrcF(gLk>8&Z{wE0_ zapuOh>zaEGe)nnA6+=DV)JM`|8t;*m?3ren7^3=dND_#io3dT+EuCQ?E2&kMp(_Yc zimt3Q@RhZ?my#YxLJiUS|4{h20Bw<<%0!f{xy!1OaRMbne9bL-(G#rK%03Xvb{9<{ zdEzpw=Cs!ha)#Jhf6@T4{>6aW;z11Wz1YR-(y5PEgciv8 zfHNJ_C#|{G3(buk1w-L3zkhUQI&bvrHF+A9M<;S##;wgJl?lK^WXq$u&#-UOJAOP^ zTYZ-tG-5^Oo1g7H|N3Fo|{xZtRjg8K!`^Qvz`qtSPJhEy7>0vAmH=b zX%%uzxU@7C-3?hao8{>t&TOYv#C17PT}s&KK>4MUGH4YZAX)h>g!#tRB+x0dqs=|k z_@p{7xyZ!5!DAxHY$cRR&FRZVrakSFz5o|C+5 zm9xer6q}8la2xNos##M1tvbY?iQsRid0^BYD?c5zcll?Es!$K?)nLhxNb88jC-jCL!PJd z*rn+S87|N2*bd&X8EkntV+|%y>2FkU(?c^)r(|pK$^Ej%N}9V%mum)mTaJS+WH8omM19_-f@?GM@o`X8yF|D_tdW{jrZPgyk%gqwn4L zEl~Pwl2d!K$)9_BoH5>tF63dx*gK5ZU73(g5n|6U)a=MhzFRam8*XO5<-Cw<3$7Nn zpAYmmHMclw2C8~lPg|=viod-!NgAtr|CTcd9eSxEWl{U40M>WxEBVIuWPR!X?_Ezp$*)JNS-dUBGiQCG(F1Pb*d1=v)1Z9*4ObMW;+^lWD&49N zkse`TB|f}I(VCep+xMlxJ!!@MCmrMTIx6g|G40uLb$_Q`Na@w8euhAYN+ukPZ~{;D zEm?<|IX#_D0@a4S1@FvzKa!l9XeKSmFwWd2GxHs4s}|fyjLqRUyjRKL{U8&SW@Wd+ zfOah?XI3XjvHI=XS2!$-!+>i^Bu<9jgg4qKrd^#HiM_uVRK##a0bp*jY9`ETxV5gl zv)I_d3xNOvXeld|xztnK3YYB43f@<@$n+DBe@QH>RB)qHR8iiOuvpHbb`y+5ZF<#d!ND=v`n%gAImnxcP_srG8m!pDd5#*FVO ze{Hu)oTeSasGWL3^9L`BjqF!ryQ;>TrjABfqzLtDn=M;4WC9?csJF5?-_dE?o{(8` z2&KtMMVjXBJ4fUwziE0=9^0{;u{lp!H zU44q4E*YhgscoOd`f!Ndt(3C%3E*$pLU7= z18|cKD0RBF+D8Z*deOMOW6r#{KT=&f-ySgPTxl=)i&4{Zy0)t){9ET_hJuWDik_-U zHz1`6r$F}werRUHzE8&) za-27w+{WX(zU z6YJ?Vm`Dx&=*~v)yDik`*VCBRWVMT;w`5&ABHxd#9}En}g>ZXPv_H_k!6)ixA)nWqY0ph8gqk+!B?2zWk)i>epH&%M zI?sL9Cw}ZJSd(cuHYMBMWy@ky&DFcru13W#(Z1j!Om1$3SlekQjEh9Qp87Efpl)gA z6hkW#w;-?O-g7tQ(a?=uH`>Blv4FDrQ6PCmayNv%e;(#8Gfw{0u6Q*H-T=7`cWC|4 zYCk>JVwUT4HXJNH(_T&?sWofEa6rhg9j_4~Nm~RZ@wri6A3GTr#(urG@rcK`tY$2} zml7R82yvfSv_rhx&UGX^Sd9-rYy}g0{hGKg7Sak7>?G&h{Z?HDVheFTY;^k1QRCIl zkJKo+Ix;g0|BlviEz9%Zqogr}=`ot^$PD|)=V?6Cq@&q5_=P=_Pd}@k(2u;fy?0B-R>F6fJesPda?ISrxG8mJ(T-iRk z*TzxyKC<~b4eK}7xil46!o+KpblIH<7hu zd;ObbIFLyg1Jb@Mx;V<;?)`3>4%C#nG2(dh=c(&zdz$iQg|;0R2t$e}k(8d{j@`@t z+1>MhyDt#Hw0~p=N=k0=Y}scFDJr?2$VR-^mYeR8u|4@T+=&n}0vadYEaa@KlN%k( z#x66%wuc{h)asge<`fLe^vQO=n^bsi?j%OzB|s~qk9I+iP}A8WW`5Q@H^X`%Knr(> zRh@8mZaJFLUn-UMky??16f#R#H`wJ5jlg1>G-0aYq@oUh*T%x!b zOosQnq3x__-OFNyDnR0=@V!sJ6W1Vx2W2TNe=4*rbB%0`Tb)eciX%Zl*6z z6B-mIi@B3YD)QDNie5{(ptvzoqM{=r#M%tXM0y_{y>hba@ z8JMn9h=_m_kJFwa(tD~jXdbQ#fbnhtr%mt)+dp$&ScPGO=Nm?kunxJc2N`6#j4Q+ zYWa)7*@#53O=1j-(>IjND0>vnwMtE*Tuca5*NTCh z7-6a_&R;l4+HxsH>r-bTMo%2<`<(TCftyUxZl0q)079u3-k{yzAig&&Y(|q6yf1$L zA#wReJk+UQjnN5Ek-== z5=>ZZ4AAQ@hpmGhEZIKqpmj`NJ$&6WEtkll%o(QWxdQg;@yRTZ=8;Mc8=QNWa*rF! zZd?$?Sxd;;6cv^{+|bGeP${shNaGNJ&}rTcTk3>8nK;f^K_+w7bJ8)LYrSkk=GgV- z|3v9qGqeZjzjWV6O+pN2Qx!Aj6LuHB{f=auVS=*-f@A{Bsg)gkUg`CZ*vkdeed1}D zHVn<%tHCZC2#b?qM&5mKl+^AxSFpUQ03l7rem74mGE}LnXI@k4F{GsBzFjWYSkMH40&@9@69A>1td5NN}%`t zDj6=%bN%zF2^S?LTZ-s>?t53O=PBw%vUIxy4D4PE?14(Yl)Z{YNA8I@3cI2S81Z>gwCyI%k%8~Ea!@^p%OTK^{>rl)pCwl8*L`-oiH8#5bgZ#s!0Ta69E%z!o+2IRrp?7sW9UR-N~RB0B~>hMKk4To(45lT_es| zDFvc8oYS?3-8B?4?8EB5u};&!60~ILAOArZ@Mb4zz8c-UMKdg1P1O!e=I|@+6MUDv z9Y^D-4YyHV;iPeQH*@$Am7x))K1x6lgMM;<;fz$yZ&_aM&7EVO(lI# zKAl@gQ=UQljHq3_J&-Kiam+p;?zAlQ%UvlqmR{;hBLG}QXgMeFnFGN6lwFHCzaIKf z-1Tr*D!H?QnvSO>Y!F=g1T{me3g{~wufK7{;0yE~YUk`>_h^aS?i6ORnkqOWs^kC# z)TcUF^}m<=&kD$E$6LccO^G$XLjR?x|M+)`)_-XR4}gDlsQ$P4Wf zYFV$%BWFQtu(b6&c6M*KKu$*7Q-BS1`L#7TnBzkVal!PYcvz78rj=Uj&amUvmDXD( z`e!-m?mxbvdU`UP#{cI-|1%N)^F;jr^RMxD1Vfz^0}Bfi3+oXsE*>rxHr^u)Oe|~w z1{sTx0uCuTtDfzGuy;gc8nfUFpD3WbuD)F}g;(^u7F=IZ8>on)UwTF>r9s)?(EQiG zYZ&;Lm>A^GF<#{B`SA~TXBQW?-RxCW@ySZM98K$Jn}zr+F8!YTH+3mfQpmBAbTdW1_rb+>v> z6ygrOsd3O}*V0nojp+Y^!cuV)y&W|q9+w_St+*n={r%c2xLC<1L|WCwWZ}H0s|>ej z^&19JZrjDVO$^rCgt;VFD0Y&l2O?*N{8wapRV!8`9%Xs=YiNqdjD22UT9l;hN3F0Y zU&=4&8sc#xm$bwmo{yt{VlFseRAk|?fytF!)VOGIni-ZJeA$oo*3#^-E#lE8!O+p@oQZQL|6fu~FB>`qScE%S%e zgCjf5OUmF)h@GD|<6!DI@BEG3ujoZa-1YHZ6UK4~jFJEHq}>RX=qJ%&m<4EcACBDt zrmI<^4DR5A(ii-AOF0AWZWY^Fe9Ys_=kZDD6uAL>(ihJH7w+PNnrSkP=JX?iDKIDWN7WzX#n2XI-w>nlhz7~wnGGhUg0E4@Al0#8I|$S0`%WTLq- zWq2&q$)NSJDtFWeM>U?NNQOk6L4udhbSWj+oTjU_g^}n`$N!BCqKOc<)F(Qn3Z<*4 z{7Bi4?MoEh@heQ4BgNgPYp+>MrEw$4h8-*eYTn~op1@TEJaF`JmdlB|W#s`waBeQJ z5>aAF${r3;Fi|o>%Xm}nREY$5^W{+?Enx3%b z!tfZAahB>zLLSdKp_bXpL0X)^Qcs|)tj2+!&Jk^Rk5p)V49{}DVi0LN16#Hq9{$Bh z6#u%HATpw;{MxxnhaLxTE}`U_+@b=_Ka4xoc$I?vm+G{Mo-t79z+DwT9CJKjy#rc-h=Pv;>S-A7+*9JejDOd zBrLvuE2nXg$bLjjFW42117ZpZwsrK<6ZgvhHE}dcLKI9}rmDta{85zwZx!d7SpH&D zUH3UZ0a4}^)p9=k&l=-m$H1SwEOIEY^A7s0eoiKwl?~^VW=ebWI@v5j&+%CU8}Z=2 zR4&)}^i`MML{n`3;TYY9i zE<#!SxPLoDw&`cm2S0wnD-r3|wEMP{N)qC7p88*K5^M|nC!cC02FwH=*2{$NS?FHT zth?m@l1Pg|sCZYq}_jfSjEzh);bL)+J`6X&+Sil!NNSXVri$TzJItr zJcRvm|6@Ej3r%UmcuR6lqD62vW_Y#13}$JIoL6bBE4;jZ2tnl9Ey0px<2=7^gT50VnnU z#bDL_QC#wj=!!!BHR!DH4L#=4NDN)!AI~Sk4mJW`qs^k<Ezg3grNu3V)i_aCjG- zU4bK3nDUrS*fInZBpOV}G~540*H`~F88vQibayjgu+d02NXJGwkW@ipbV!GUV|0y; zM(L0gDG>pYW^{-W0s_(^sVJiO?s=Zi_s92#`wzI!x$kq%73aDz9{}`xWR*!38U1`e z&y~2UW~t;77KVtFPyRgFe)wkBh)0Y5xt2l)p~Ozv{2RbJnNwYgA&?YH4RqHCok7ju z+P2lx zl?wxuW}kom%;w@XQ*TIIAw#FIs=AvezsFLKpE=OEN@XF!9j;56yZ1s*92H#u^3|XU zN4Zrpg>0H9WanR6MackA5e$eN7Ex+8b_A$<$j#nPh72`+LI|dv`jyb0vyXXpjA6jp|s*a((xu z#XJ|2@mhL1c)O~=A*@av;7F-2L=?_%+fNeFq0MZ%JVxoP8{bMy#uDzEEsC+hC@!3{ zsMU4=9AX+az?>#V)L`LflFOO~SuCln;NIu{qRGpK+6 z`zK;1`7r!A#pdW>2^o#vTZzLE@`8-;A3V#>A69g}6xNIH*(w58Ju;%c*WT7c-BVC? z(*6esm~K?^I}VZg{eyYkL)H8vXA~|2DGisGW$vpi1IPUsOH8pRxZoq@x?a$Q^fGHr z0HL)S5-)C+Nu*@EjDGhC0&7U-9%Q>)X2=^<1%|1!tJ_VzzTP|hL1!(KTqz$=u$_K* z4{!5zZq~IR zN*sRs?6-?<9X@-d=524Ggn%&sQR&=-th34_v-xc=cDG@Xn zhM(gFZddc|xC!5RPYKO3&4Q0Pf78|qL9nT8Wq^BrDNMir5Q44*<-3C{=x+Um|F?W@WX2wlV|+ za$Ji*gq{0+KH0DdYwDi|e{%{lQ6O!p{s*Xa*GsQ7q8oP5fs1cdbmb|DlLRz};+~;% ziM#jgklD~UJ^sur^yqZvN*?cQcBR3{u6_234}Ky)TWzoP-;0taKI7$RC^uGOBA4pW79hvol_5S= z+G-+?k|Ql-IW8;yKuAvASgxFy!aG|#0z zceCDYG;ft+$g>jb3KjmTQtdH7hneon5c^c}UK!;U#QzVFf49Xd5K+wpyzxoZ*(Xub zW1~hM9-h*Ojj%;f&UWeM0Db-h{H+OU5&l^#9KP_G$qGhtJp!NS)8_ROy}zZ=w@opG zD=w;XljdL$>;IZ%V4w>XU}6FISgZ%}>xY=Ybf67T)Th*GjBTNoBJ0v(*syoZlPkmR zhv%7u6<1x}o9pFfF$-005wxzl46Hz~TMkdTGgZlfy2cIVQ?`#t$~O*H={^S-or;@c zi`TA13?Ascv&*tleCBf+L9y)np`suZF?1rZ37>m`SQftuC4}u>wtVyzGCGcP?j4;dJ(w1KF3!0y zSIQdD!a+B}TkteD3Xi4ghXx$hyf14<&Hj9ZgA?WkM_&+p{8wfbHb=;>OA%(X(pd5x z<(_zP2SRFoCafwx8Eb^%fJSro;A_$pg9~diJ3JPx6U_44A`S-eIju5yBHm0sL;mCs z9TldJvc8w(Qx-1R9T8e|Lf=As#H*%AURNiBI6V1#MwoT)e&<*~O3mkS6p1uH8T<)( zDd!lVJT2&{arzaFRgTq2sxmxxyTW1zEFPh9DIt$e$U-fw5WO)Bq$yNJB4`=>tV>70wSd?Ud~UWlBj$aNEa zaNV6b)lQ;k&Ektg5+dM{IEybh{3m3mh6#ZRRyJ_QuMIZI(6Ge`M(w)llLbP zZ#)vpt(wn%AqrSyxaN~M1=tPBFgA34{9=d}w&G&Y@r~7x^o$WEZ+)zbIpf2@9;OWE zB&S$@6CjPq1NlF4Oe3c!8g(Vd7v(u0vMFD$*x)`6vJUw|qpHF*#$Rs|2W3snSJLb` z0uR_QQIe;$0v^XHkZe);B~#ivb2&5#T{?r@AFz5nOJ8TA+?eEV*EIK!wr6aGaiEvi zrT}EY5hV(=*48qt>Io4=#m}`N;I{%Axh=mQ6-`k$q9ce6Ywbg$*&qL0H*qILUoZxj zdKzwt_X3QhDPPz>N^KsBfM!?CNH~3PIr^4so#NQjg3NL+d_XtT>f%@3$;$l;d2X_j zr!>3K_z^!gTJK48nV?I=_74yjmG)D!R_+U*&2-Sf&uP8?0Sm4WEP0{NwuzL>jUic| z#Jo6Gy?fbG!B#5Zd0w^6;wY?}HoIhAPotAA(?Ad#x$?q()_%T_vlE zIXiASI7BEnnY)c|pb{gpzt7l{`$K6_End9qEArTPXx-Nj;y77xg&UlKnhPAa&`UzCU+bTW?hscdPdt_ ze)u?wT0mCHc#ZqqV-IA_{{a$t#X(?$hGW(eS&78k4(HFCsjDNXQGh=mo+2i@65=3m zSYyNs=KQ&T0AHazdjR-tzseOd@8#Fhx}<-AFdBd)O7nJ+0A84Gn__nAyXskIHZ-BP z%(nU4Go=mRFMj0H3&w|fk-w*CsW(n8t=I$e9|#emfk0=tVsqPwgcg*Y%osD%J1fqu zjn)=TfOHltt=f(x#tt}j=@7qmb}R|FAP0VWo&Anq!%KwjIY3Tue}7+7jmK_kZTh*( zF1%+ctXvgzmDQwC2tEctMcG~|SoN5%+Ui`Uqpr6!%~2NzftUq8=_=$|8>NwCd|CQ4 zDZXgu?-4)?S~Nv|vbwAyIl{y2WkTAF!v3KFui&=oQmL#NV=IMOJMV@+%5z_!x!1*f z>KfPRwGG^|%Y0W$6o|!lz2>P@q2jo(KjnDhv%_g*5y4#IXe2io>@{=n55Q=*5y@lo zQ>2?Y8}>`gD9a-J*3lo)abfN-=><@;q? zEP<{vd7tlg(&~xDjw)y2@Km#)@g^OGk`YIq2c)eF`V2B(kXE+SWo6B5!>CU{5=uA6 zqnat5^uG`OT7SK_Fh$e#9TibxyT;@SphM}wn3qGZj_5A-;S=GHvqA6!%NAvQLdBYiP-5-!#)aAeVt_w=R2KY-ct zO}X5U%6`12PBJqt*wf9fk_=agw5Ij8CZ~b2!MlQNbst2^Uw-A7{g#uIYg~?RZ z4Op{$NtxuCNEhh3B@}0PM+|8H0c8FIBp;_#d;^M$@IJOhMzg`0JdlC=h!GBEgXAwA z3SQ~zsu0?Z6&A0Hnf#-e`n~DmhZR?6*|k`rlmt=e`2v|i!cd@re6!da>C6ju z0_RfWs^jQF!a7WzD;Y5U8DOKby3*ki_XT3}P6F$oTUT46b$ULt z6RVV)Iru1oqozwJxJrloT=*xC-YlhR4xe=+Ypvd#7@^;UO(j$fF&>|`TTRETb;$%| zEe&=dBFon63oRq=|KiG(kD>n^RXzGP*mi`1Cr?hV^(F9~`neybY&)6@u7{_Elxu}} zabuO8z^%sbGdw>%73~<*0v7?A?w}lHDJDlab4ie_#;Ud=;Khv1gn4=5lrVpmCs7dR zu6@22AU#hACR*=}U-tNYHi(>>F*k?+d=cR=YO=1I+eez~>a zM=*!0{JZXWtrm~A54fE}d zTmo1$Pil+$mA=2Rii%+m8jh+BF{}On-$J0N2-h+2vAAK3*gbS<>zR=#vNv*gpVn=65`;Mnyvz3B_4Fi&v*3 zFy60Z3~pwxI;{MB}f+ouViBB2y7s zWMLIc)=%OOQ8j9}z>>2g7eH4BoO2AdS+9v~oQ*SYB_$6?Foc5RiY26TEqxfqU)LFm zvlr7+iG~-b7IHlEZyp3PGqpiqg>T2ZpT7`P>tl>m)aA^OAA#Ga_+GC?Lm4&=0S^Lr&x$!1rs-KFpHQ9?bKE;j zKV&19K+AFMw}!L%{=^G-{7O|#ack?4FcIpU$}qc^`TiTuQTANJF!p>bgHk?&a8*w{ zjTQSn{x(lqfP_M=W7G%{2jGz7E}a0zsB5dxP#B?)!>=y`+;i$!g4r(V7undEONKn} zLK8ljt4~qSe0*@A702+6avt+82_IJsVzqYal$C+L0d>;+)y}F5uc8)aB4rrFan8lb zCzy@uDtNpLIJ6)0RBR>Nv`LF_y1koL2_VHyeLe&p%ErxeDeKRgDM3!p5VA+?*kwX- zBI^9`G<-?5w01g!Sl8!kRsOC)VV1v*2wc36N3nr{<*{R98IDV~K#C;Z~$wHA5?MTS{MjE*!g2N9iOiS66 zBjSp08LI;Ot+lj?KSxk;K0u3iJ%sV;Ci!c#X!jgwr4VJH^B;Q9%S6oOROBbbl?R&k z=H1_xs~DKg$~x|UrM9k3ZLq*>7?mGw(32=3A^d^+68+hZ^~w88V)+lU9=>!SQiW}T z?I7*vPCN0+t$@B2^Z}yh$+?7&`Nuz;9-F}~y1xtIV@2IhH<5qigxvric~73ubW^zc zTE*Dw&AM=VH8O>w&?_(V?~fzK5$2)uRm*+y^s-U(6MtCW7qE_f<|UseRz=F%CBba6FTka_|NSR-vgBhT)H)9h-kc`sGNtVn zJ@vcpbbd-kEg~M1o}*1x0sVPFKqUaSd5J*vyGBFn)Gw;OcVb)XD*9x%6Q$>YZ}laD zt9uF_rBfhX<;S%*w6AYVI&p_aCqv6xew}DOzx)Sy)T2XuK!$#C;evvLB@zqBf_fSC zT_lX+cF8}t5mPW5FFys?$1c8qew)vt#7U<+T5CEtYnFvj@skzCnmI-L zt(S4m@?O`tA&CnKAH!lrGhJ!N-yRI)Yk$&yiUwQ0;@=4KDL`u{*Rno*R*SWSFqK09 z4$tMuOm-0hrbSI%VqYK78ADWiagB90fI6om91hFjVXDjeeL^7CwWzv9<0yhAc05gt z`Yz-baR;N719+=B1+CPIbV14mnrA}b+mvvT+zZZOn82XuZlkOKP~xE}cfWMX4s10c z)K9U`);y_-@&(ctjQzVa)DG(+Tg*s+k#lVALZssBOyO6I1|DjV-^ zkXwcz=b_~3CX~EA^;>EoHrJXl!x*;GjZ%Qo&Vzh z`VjUgypLr}&LDDA;ir{NoXiC=y&1L=Hj7ion8<@ktaz?(8R-zCZn)$iYV7?W z;>(%t){lab3l-l-3KwSD)}861`0vwo52B%Og%Sbvdm z1$v>!wvkNFrunUOYgNSG1Fbbndp-a_I!i#GhJHTn;0GEj3$0%{;?SXS-i%nFj=nDr zX2sgqK~?4H_<9fk=2~T-zaXMtwgcwsd{1+>^b-kTU4Rynwq@>ui^VjbUfh(NaE(;r zWO5gt6c)^>%vaqOghc4`)7g!4v+5lvrG{a6^9CL7oG-uMv6CT<6HfqG>uLErQENTi z9ix!!FNaeq>|TkIaa6bjvV!2m%NPCgg;qPK2(9$fO9Rq*K`oC&Q1KHs9W6rm>06tt zpvuX!D&Q3(2lU2m#0jF8+1eTKttR7GmW|3}tW!5imwM#I9UAn9%-Qrip8V-{;F3_S zu>!f!NrhIb?J`V-L_x*c_=Vu-E_H98ZeYPWHj2gfX$Z$$1^{(r|0dduH)pa1uOBwd zF}kC|h9hZV2XbUgVZ%OS?5WkV?g#?x@YUfqeK{C4=dug$Q9|DX{g5DFnxz z3Avd&U}sIY?_!&O$V`_bw`r{N*YONn4+CyIUi}gZQOeCrh zk`lkAZlci?=&AWoDGk~n!4Q*>&hC1lBJs8^kTjQO0e=Jd7S9+zYh{K_AG!i!@leEw zafRW3mbCvd0?Bk{4`~gi`K}3K<3$#_>(ilGc)L`~Z$)6UU6l=Ff4R?##Gqz_a)!0A zTakR?ZSI>RDDcT{(2t-js4yH5*?;@Vp~ei>(TukL)?87#S=K3gK{q+c=ty3x!!zhv z50B`6v&|VuI!!<$b8fJ{G^jd-wKj+KEfz$ZV;Ne zVo#(>Zq3=s@+G##`QDm$!szHfxnHD3l(UcZwgLpw8;b42MKXHpx7~YTUGJ#}*1oX_-EgtPv%!r{y*hyyF@66K1wFl7! z+5>RG(#LIhe_ng5H;zX93X>wlbeCj`+q@}K{>!_7nfE?tHFqPnsEmS!3i__26rOp) zf5&1JNDX~OJkIsF+An;H5jpO+M|H|Q5?^$>&y?27Z4}<*fw&oj9h2Cd6T&Ri7xRF6 zPg0VMts~-TSw#h`F@_m59WLtDMZ;{u( zdzVa$0~I^i&&J=XVvY^bC^O<;kQJzg&&SVnWomtW#aVwT274>QoTH{?pg58hwy`Y_ zr)@X?s!a4=ynh(0VO}^MW1jN!1$Z zO)|D=&YI`9_7Z-@-$=hw3--RFI49uEI zZx!(}iH*lJ?wt@EFIb6U8m@Pr1jw{1{F@qeZg{^r$jUxk{6ER}%re&w!ez&S;Wi(& zC|@cz(^k)+Qzp&A!Q`>zsZDwcI8dMJm~QG))wRJU}8BAjNa>8ES7%bWE>R5IWB4lZT*NI>n z=PVIJEsoNDpt=v@b-RrV8tnh&FOJj1@(o^2xM&XIwSi;S)&MjIcW;xR^MPY)^97vc zBhjOWu)nX3_()%kcS(qyb5e~@(YSGzlfpXgFOaK_WLG7TaNQp44StQKED{Z5g*va2 zE(5}&OBbU4x*h(d`4z%-`PlFq11chLdMYic3k)2kBuRN}Ovv`7P~JP}h_cauw|yV| zbjtW9W$c{mB?t|*ikX8w9BOzBqWvmRfL{{|Qx&++ADpIie-kWLar=!ho+yB&*~ZPr zxCw|-`%<@>AC@L0ABHwgK}LXLofTP3R2er zh^_Y|?{?(_X_)o?D-FoehH%^5Dc>XceL* z7+^f9-RfsEIT2Gjlx-Z=3%d>P?zT&pki7N=vg6|%{)F2Ht0;W-Dyw|ve>(O0sJrTiJ(Dns zRAZ|zJse8P84AvlyK*k@aQkInDzX2K-xitaXv@E`k?OV6tLKhOIjtTmyo zmCY_PjvIY_X3=d?bv$cM0{=+f$hGwe|YezF~Ip* zEVd3SW`b(KzKh4%p0)l}0Oo6rL}oqA%TvLBPd?z+WW|;yJ~{aAeD}sC9;N1S|6ZN& zGa_%s9hp{`aSoKr+PFeis30@KSts^Hd8mb+ImZ#crTy^j75i}w2}l1Qv58+%t!#m| ztt{Zf;ae*$=}Ro6xePvP_1^z6-ZhuZ>Rj6p zu~kS7*h*o)vNkk)jPIaQBcc5jOBcAH9MVpd;v>xM(fsS{iN;_ z0mxPJ-{y5EN-_9k{41A006DG0E11NMsNZ@bP=^GLwf2Ci#{I|9j1638t}Rx3A!9E2 z3l@set2&HX6aw`3I!8$IR0sDWL;qvxiM4cO;n1 zVABbF&OER+WT0JPOi8pow5!biUL(u;8Ku|@aW8&2L9uq!jf5RWS3eq(doY*1S7q@dBz)(#8U(Y|U#rQ?`-T7MZR3r3^0I`c>GyX;pBKj{PlyV|Cndl0rk#DgDM=nwW()>^5Oe%RAT^9 z7#01`u{3lJ)yl!o?H%+%v)}uYrJ>{r6AlL0dSXv=qT!Ym<=GgYs4B$p6uwcf$LM4tYts#c_CJ>EFiUMzFA5sYb}GX$LJ)2 z6)VWMzF?Uv5ld>>-LI1pc@ib}Ph_|drL6B`Y$dxz)ZSTpYaEV(Mcm}6nJp_z^K=F9 zRC*zb74K4QzI;Ssna?OySk$>L$Aj)iI#IsAxl){0`~K#~i@3gooe37~__z;)p$x`E z@<(4MFsD>~f2Z&{F)B=9?F^xGctBDYA4IWr5XF+wLRq*tRK~BR5k8a`O89moid+|o z8+fuDLmM_bl?M53@^m8ssh_;mJ5Mkna_XWhM)1RsMNnN>`C@5)qBx#bxkBruOhZ^M#Mq>LZ+>*j<*iUk)lExg@2D3Out7 z_UpB2h1@M>Qz2xZVy}6i(lThDgy7G2a*;Ggwp|C{!@(^1ME~;OL`bYtd=`x8wJ-}- z`@dYCkdO+D2o+c!7rF2L*tupbGEVva_|DQ|p=Kn(1JOV#+b(9pE-`R&AoFo=b&jrvt@ovE6TN8veEl*dcKGXWwplBcs$Fn`#!HQ~Wka4-&KY$PB zS{d<-|51u&3ZWE*;)?xGC1G`fmoXNRX_{byq)Cn9yM;PSS6M0DgiJ}gdHLwuD0IO% z=6fiRG&n)2!-UcPqodaVDai8taQ`cFXg)E0WLgoObhfSg8T9R>&^Wj#tLk3O!o zWCE@%J+lfpvQ%~qc&Qs3`Z>*6XUr+lHp;pG#_ z2yv{&B_Mq$iCRzDDMPzRmtV^?Na2qr!TiyARO@9yOcc4apHeksNi|D;5n{vum3c<4 z{bK29!&o5?o8V>n)oijQZnzws6;x^pw1x+w}Jp%nrK1=oQdL?%xn~H zhqzLksM90nF^JPJ_vW&5*6`_UVblV^`d4~4FF2DS0;vs$_NMZ;SwOQT{47p=4y}ymk=~`X^bDl5+0x|lvG*&SvtY4;R2*egRSIZ^1|f4 zADV6aE8K@~H5Et{ehYSNSZ`trw1ecSaO&^V#oBS43ynxWx7IbOnFJv}&Z|bksh*PG z*>Y*#Osf7KNv9tFIDkd6cE=4t%S3s6#_eP&u~rMc3tvNs(;M$^915YDCMCrZTmvPb zWj@p~Y}~vYsR>9=AXvrU!*_x|e1&3fl||-b+0$6iBUOnO*}fHB7K$;ShRBofvIH-- zM&S0i_BF`}RjoXIICJNKB_%9Pi)SOeu7{M~?J1momAGU{tS@)K_V@NCP-oI0fhb8T zF?9CrD|=QdsZA6U+*-UDG%YURv7ktI%=HP6#AHE~7^-tbEuv01?n21swRs_eqM$63 zuz3m=7CJR#0!jJme3{q0Zuo~Uxq)h?xi~DfMO4g0vpz{#8GM*OHwlUE=g>z@d*MO( zDdz*_+caCT>@A@e%LWiUzK{Er&9U@3AYH`8jZB*wT@ym`9ykH9bj{YImWDP9pIHaI z(50$zQ!||Ph>c*d=o@V^oB#*k3HgjrJSJK@&dQZkn2v3V$N{r9|(;9*i+D zu{{^o2MB9C4!7on6h|M|*L$xej+c0iM>G(-2r|Y}&{jBkPs@$g5qajwdBigfT<_Id z)%h;}ys_#S23r`2v4Ee*bo?S@y5o2x4rzXke%K<3-`iF6{+cwc$oV^BEF{CnuuwRv zSBe_(sM3*}qy+KdyAL-JUPtiiRuTCM{8^i;hW$~K5c&TYhrpJ``&{IO-aXt*%5zOG zfAG2YjfBMAEECEo%OBhE!KMRN2WxYGHqS7=S2b&mDOhNK%PETJ_&dihO#j!wILlCR z(vQ9d^+{C;=J|o7B{zp*|7i$g%paknMl;zdf==4(1{o5g`dRe3XZHPY%(qk8*gRHf zX=I&pRgz4y$@wzqv#AV$P9>&<3S^DRW(cA()O;Ov@@Q2%W5_??|UlR}PTYNJZ+hlmFh z0}{MrH0YD5p#EKGTjV~?c3*iwjF*iMQTOo*{U5T37V{E8M+waiUaNV-WeA{tyepWR zLlaJCr@FQ8=VJBeMVSNCXv82rERDI}XV%<~Yu`>VF~n?^o{aM*MQ(@l_wsrA+gu|` zj@Yf?>veg#5!f^MqX-MKK&uEfee-Q%8a4$eqnG*dqAk248!zDRjkEr}!QFz^E@M6p zO4nz_h6ai7>Lvc#kYC_RM_tuKIUfPEmj~jb?~fHyEcjwdUy&jAnQWF3?$@Oqg z8;I27(^;x&kf%{|)}=@0MTL37BLt5g_C$nzY)htL(dAH4A7MBZJ9L#`{lWgod&rUC zFM)|qGSWf3Esl$e5^NKi36r}pb3kWq_{I{L(P?$S82VKIoa9?NkOpivOQil3L*(62 zGVul^*>EQ@h=iNO37Q3OH4AQ?wj)=beN?$613@~w_#2^-3bkQD2?x322c@_lndO`t zoUxjpRhXQ`pJcLILVQ$+YvJ+ss=;dxv|6 zukR5}n#g%M0;ZgAMschezd%~fkDfDslgGFxGfxVj$pXkEGpNO~kDX=U21i{ck2&M$ zyf)VSNs#Y;NahqjFYeZRqlRC#OpmJxuEEG_``BM=RV0b`fcjJLDwa4?;ugd=d}qu_ zH=tc^MjIjh$pQuE+Wpobgff|aua0Ykrg*PVs>bLGul-ysL z!@sUG3p@|d<23F!cJ>Qd0v<9uwMt=tS4^z4bx$TkK%f=24)FDQ+aBS%g30ntRrEV{ zoF4jyv8euUrkRk|mth;*-ypg8qvbvtUj-xn5%nC9aLyWsf##Y&@h46O zbFF7gqj|J_*|riIZ_d-z_;Ji_;YT<8ReWj#qV_+$u?_zG`VUJ27Gl3wMp+q%K$DSa z+Aa@RP1(+eYHTZFhpG!OrqA23F<8QB3~T@Q3$V;7W*c=ys#MhNEdJ`}W%v^s(Y0ji zGxKnu;yD)^xupAq#3y~mwuWiLFHwdFd8+PE-x$lq{ChQmIhjHCT)5p*m6!Nkc8wJ6 zQxhag!^0q|5>45%jc%gOe{m%3zU$)eXdeA8g^@^aYiDDE-_&?)hj1n97iM6U$li`> z$hu%FVD>*6>eQ_>7dc^Wh~gYQ;;DZCI&M{$Ts7I~K3t4#gC_|#ySsU#=|#(ChmM+| zw}O++_34Plc*8*slS*uOd_5aQ1q(Kn%P3px$kZ7uO5(4a-)l%TtVNvCb0G_%|MubR z!4twyPk=W5FNMr%=1oq01k*^Io6Zs$ZOwuMLVqpvXa|+lMw1xrxr3x8d(wXTEtOi zDjlKf@G+!EAMnSL7&l86%lL0R$vOL?w4kxoz2-~!-YA=!MAxt_nP%%>A#Dlo`Jxsg z>4eCqwbUcd^&>L(IMT|r8_{8f4_~{wIosd8A``SFPsK)8`?>IAMFLeW1LG>!+$rVo zE+O-MA{6x>W}983Ao_=R0D@wzj9KCvFhVh=8W}#`Y5g$%Z&n8 zFv8Jb|IaHrTX&t<&W{y@K-*7X5@^7PvDhcSAvVQN$nAPHk$D~-pGq55MKYt!ffn9b zOT@!f*feh5K?QOfY)+A!0CNzNK>p?5l-ai^L#6&46)N1chsHI{J&ZY_@w9WfrK-yE z4Iq@{Ir0W+A)oyA=>f|mOKG$Eh@l+*LGtzOL9s=1D4C41KP4ywY0(}Vr&s}ZRK;xk zip!FL>%?lq!AZY967ekXU=jc#8nnGka43%+0XU^vW2FNrq0J9z;CAb#j0GdrVu0>J zaZ1v$6@<}CNll-?@F}!6)bVW@QQxhR#Zx6BS|pJ{`W0rvqE^Ey+vNL}uCpOxNXGeg zWiR}(P&zlokYBIq1T?#yF?&i2asP|$`!|K3+P{Tm!VnURyqxFhISJvqdW||+6t2R! zdi-inEB{s=fTC9+EbepmLw8vc3m{|}a@A5rQ$G~xgrIfD<1oI(GfZYcWOg$kNSIPE zN7gGlXsCkt&6f|5`fT+SpAEk4J10q}+Prfw-#>}C{eYIy0Hd$gJ?X?!o>QMdp2?hT zavC4Z6+)DHX^WUS#7&f*WZPkMNQo%cxPK>7Vr$PAY^=5GQrkpzj9+=NZp(U>K=|Ca zQsb=`B9~xrQy+yy65HLr6KvLI@tu%u7i&YodY-#);4bEPW!gqMtxSy3#vCNsb~N%( znu@f_d5R$IV;k#JMfjo80lVH{@8aA9hH9PopJ^&A$5Z^GWr;fVEWGMw64UeWrPGB3 zkB9HL2!gRJ7DmAmXZ0o9?2O|(8py@kbV4s(@$y$D{@oK!V5UdA*co0zzU(gY33s9n zM!gZa#>3fLSIKD}T&BoELhN)Y0G5$O0ZD5EN5QQYV&($FKOesxId_iNcm=RVN2v}B zcScZ`kxs49w%9gj*e*j$J)f1{6@dmVmHxr~PpAKnR{#HdR^#-`JHoaCDtUUs7v^09@+lsj%7j7?RgTL_b}I_g;&$3@KH=2m1amclEDJ4ziAS;4ayqg6n9CE5` z*$ia20j2{y_Z`YW^G#y0VDsUe>O|r}3~fI-k8V%epA9amUU!VLsqlm)@<4dfh04__ zgENx!JA#-87?EyYfLp)T z{RfE8u6>d6JbljjUFx&0w8@iVDwZs*I7d)!;OLYVvFaUzBe##0<|GzmpF$iJ8=dOW z=`J6FI~xt3nOPKsKF@>!vT_naj~pNOV23`+dPb}q*(g)<$G42s?yPhtvc%fK?? z<9)SUSFm9=x>NUY)A(+a0oELVHj7z3e#i&W+)Rl@kFJs#RBJm*>DFD|>m}!ffOCyK zy(&bWFP_ZE%hSI}{Drr3u`H9I^D$ehH8(!!0Pq?|>-jk+&%NJ+eA@*~G}}*M=}{Z% zEtrBW?Uo2`>_0$IDy|~!lu1T~WA-g`wnHF?7Bq}T)4mT=8jBTa)Zf?V?tbDU%1D|d zP`}bbDKo|Mv0eD@sAPFGe&k#Ql0dL-NKQ1h4<)|Kd34ff?lU=pBA#L4pNC!AZG+i< zBJbaa_T~CZ*z+1j{S6&MNd|M#c1wrz3$tvs9h)>7*#QEL8wXNN$_&&zL6`}0Y)ms(-vVQI0++x zKIPRFByUSr>_c1@oIiLEs8C_O6~V;H#d7eRr1=peDv1=qG{6N3W0A+3il~7!VZ5`R3uCRS_0h9iy)k7o>CsxV zfB<)wqxu_2a!Y+?K+Y$madqWlYax3ic{XkDeaR)>-^z( zDe_AeBmr1)Ygmg(BV3l;%AEm&~`o9d!z?V!6F?pJg^A6~_=etiLWfAz%{B&=>J)kJ=BjsjY$3h-o5TB@GP| zpDI`vXSD$=(Nx3^02|96{z|7JUvY=h``@;@m#Y8r#y1O1;?>t_pnFZOx|zUDpT3Eqo_#Y8f}2JeRB}0n(Mm>gXV9KRYC4h zt|?du&^;?o7nC1uPx(V{yF`LrG8XOdby+=s<(FfbTDalQV5QRmy62gdKP~B}w-=Ke zyI*6!y8KYqBr0CMu_D?kyFNQ}q|sLm1|h~I`GEpck_2W>1TDoeQDD?a%C{^4MpIC*nm|NMoNyT~gjqucKS z^P{bG9jRyU!ls)~O!k~yvQPv^qdsabL0{wSCC8!VeEAY8T#oHCCDdSY7$maI75j7V zYX<`*UpwbnW?cq5Bilmdq!&3j7`ILLJ2oU*f?Mb#TJ{qYW5@k7kUz>Fpgbg}b=WY= z9U8PR8QH!{qdTsTdC0x(zP-Wk#n5C-!>luURx%0+gWDeC$-}xsF;v8{;UprO{ zqEvQPY-AddPK3{_nswFi1ao-9o;r=jc$9ut2Pbu+B4VU4|NW*PP{LdmtC**Xwu^-; z-&l-%Cwl1W0B{-4ieyjqjC>^AfLnd;B(QB3&23|^@A7=pmqdOV&Z7SG0e ztn7+7%Yo*lYX&EM*iv>8%@DdfY%Cn|4)hJ0DCdBUp2%;3L9K-M3zPtO-Es|6!!IaX%Y<&7kvG0^xC1(Z&vj7K zM$@Wm5@3%`8cI#uF%0cIk3I{Wps+DJ0SsC9$4eiWw{gwro z@x*Zy#{qXcq%}rYhrU@rg1-hy4-7{%Og}y-UzY2zRNR-jU-gTt!6aS_s9@vpdVY7pF466;&rf1F-|I}q8ZtJx{aTmipL^^u!_EALdbIY@ zx(6{(cS4FFUxGi#qyDnfZ`^Ga9xtP-l47JI#b!~R*f7w346d^AR3R}mh01L7giX`T zT?(1kcjgMj9un>Asz`lrB;l>_xD3jW1x|nXdESy{v{toSnDn=Eu{+KYummi9&rPoR zNf|X?--V8zSa?y5p5YPC42nybWx*->rbeq9Tyfe_Xb%?%`1IZytZmlI05*iGli9ku z`q88-r-S0Cgjv`Fmg%OE!0^_zPe2ZBszX|)nll=E7~@QvnYi&2$)B6W@)CHKzz=JV z>L(nQ$;A?3U%Xcnz9d&K&9-U#Y+y~v22fPL>!K29^hF5C^S1ugfgM`5$vEpJ8>(Q+tgTu(=Fc&(b*q>K^#;^L6z#%rr@rv^|5?BKfi??s0i zZ-R4~-Vkug@Q*eRq#Msx{L=GXI^f)~qLcQwuusPvnCak)74J6*Vqn z);<>oJCdqq3xkicrg%iSn+K8x>BxVT#Ged z%Kd_2+r2wX483{O+kp#X0>u9SZ9ui!q{GMQwJv^RKc1See{M2(U!B>0*6|y@+e62j zIfsWH`^4EoX?9XM4$y!yK!k$=fGXpzvIY_Q`h<2xn8Zk3{zcSd?0ZOEvw;B)pT0^- z^&Njl!;aVxl&~Dj#M}xHcjXvjLVHptKz(4n75fi$u0_5|g|wf0_gE!Fx(3fPT&l+^ z^|Dh9wvhnpHyVhe@clFZA|(>0;4K+{%1`%Owm!T@9pX}nCYnQ>g8O{;a_1-|B6e&) z@R!}mI@7SF4}9NjD7~SCCDoYP-=b>fR0jS`|8cP`S~u) zlvld34AX5S?$&(Ho%2%)AWZ*p@#Ucs;o8;QohMAP$G`Ok@7kVOm7m>qo$XDyH2-+t z`u$kbnKkRT+}T>)|Hs}}gvHTzZ8kLS?hxGF-QC?ug1fuBd*kj7!Civ8ySrO(0wlcC z?>GO<>}EBKe=)VJ?yIhTp02Jw=RUWrKS1sNmMV?%FLghyKsU`&a+IGbyV^@IjqN5+ zW2`~r9-8ecA?3$gPcvT;?;aiHgPu%Zo<7!X3dmDuQzZ-rTR$=xb`Y^XxmG2dt`qRa z5rA$tg8(0Gg9o~Jqe+k*^!;zSX#D`=4$_ng^w=Qf&7DMC3P*^96YLv#G+p3PFqyxk zD`TliDh7MXt`z!abvwt{??7<3Mu2PUULnR(!4@&M9uszBnx!XrXQL{m!V89b*upe z97D>*@%SM;Oqj665Y}7$+NJLUqT+gTt9(lQ*ThbS3>^RI?_$JVPF|>8K>V$PV{2UD z{I>E@@N?UlzsJ0U9obF}Cggbto>pudZKjl`|M(uOSx2k`^BDCO30`+as=4D!xC`7S zmjr1;7@O^Pp5F_{GHWv`d<<117!~CNXXZ>mlNbn&ALUpw~8_Ab+%$ zdH%E|zn%?|s^so@+zxb2r}0Qp^ey6Dfo3{#rJY*&8g<5O}~uSBxTG77X1o4~WY`^r*wMGKoTX zwR5Jy;UKIu6%DNlHQNWBWEj<yy7Jxoo zPo@NEEk;;0){JNxM>ZzwK`&_ZKgwVyz#AygU&B(XBAba;CsWOr+)ku6rL7eQ8LEn! z!WWD37L^d=69~`u)H*CXtve3@=?j>|r5S#eL{96HCeV8mS#2C=g(=X&iQU-@;b+Y! ze`i}w_X`>qLm!`Htb&Jb}JbAx0w`csjzAxM0nIew*qO zEyLF9O>?7aNk8d?1yF)K01%*2b5K-cZG@D>NuL;gf|Mv@QdzE$H+m?QPF5CSmZ~bt z8j=(j`d^!073a=;ygw)}3lPz? zD=sE+gF2iq3{`{+2=Co@SHTB~*D~4=B#}Mr32+cvi;M4 zeOq4El0cecbl)oi{D<0g-oNb$gH6mJxc<|89+r#CiYUUwgxEnm_XE_b$;*RIU7zl9 zBq&1-_=w=aXheK9dmbYe2}JN7FB)hZfFp?Ah>|CVOiuQLq4zM44%~yP0Zqin6Hpw1 zVT^v`#sxJ|CumK#w*xj)7+(9X8yy-Z%Qs;_J@KFScvz6aOViV_;t^@o83!v`<`g%9 zr!H#ZoX%CM?Y{EWu{MV;013wGFm^Og=%jqu(Z|2^U^klQ2){F|G;*$K3%>PY!_k%eZsv&qvoI)R4MT* zEgi!dV$J|P{Tks>$&@C$oxg7*?|RvWW#cadbFe09kZa{VR=Bl#2MgqBQ-1z#&Kew} zbek|kfM^HurmNkc`XcFx>ZKh);5(#E-Yq&)u*MPs%wpz0>QOP|np~r0vYuc_uKI^3 z-|;YrXRitK?)zzz2F&)xt>>~0eas_xbBn8iL*XCyTLxBMAF?C)R?6$r)5Z!0BoLWI z)JN?6SDxnk22Rj-wKSbrc|@_aJ*_asFenffVq^dpKqEfmC`lxqQ48WmUnJ?pcibpm zFoQCP)x0+WqT7R=Iw+92xq$wd9q+^Y^cTj7RURnQ`kq4tTALt3vn+~Qg>oKHn_V_H!L!#{DiopApqtVpXUJ$3IO_Zruisn!AW}GJ68{~_IzP637H{HBBGykiKKE!P0E<{IX*S0}Y6c?u?^{e_<2FTeVO1aH;dI!s8u>|CAoJq)vtN7x5mac|RrM*$+rhrc%YvO)%t z#S5FpG=LZ8c0Nh9fD1`x{W~1{_$GGmRUZyD+eRMqbq{`4@X-`GzuKahVr~8eEJU%L zDiA6d>ORx05^z1Da=@FMDN1^c)Tr;rg37K0a#cgBr4{LG?ecDK7y$>!f*!(ftta@G7Bm?|4WwbV$V?27iR9{ zon!oD2y4To*Ym}1PmG6DPemcaQW@=0QvKd@4fTAqP|~-t5Nt@=W*Ho z&)e3Za2GWJ9<8q3%KE5@{`j)2BdZm3nq5YH|o(?(s&zP zQyK%2v%yme+%HQHw2m#*D6Mh(zvp}h*XOcePqZ(8H=QIO7F&e=Ds*bhmlK008LAb4 zUUgYFQtVUL8DrA8LOmSyk*G(1uDfvyFVkqP$uNX4ht}R--kkMhY$GHgQ}rR~KLbh1 z$c|Q~*?GTLj8+~yr|O7rBFNz{^Bg<+QICtRLOc?2{1v_YOY~MYDM&n3MIy<{y9L=x zz&xEJ*orX9<#0}f3f2i)kH#ZEG5qW?h6!~86#*V^bJZE4B;(h;Yrcv?wneF8$D9MswQsn^%(0(~&ZW6NX;c)==YhzVP7eWZCG+2C~gK-H>3~#T6=m%Q9NdKxawyvgQ|G z4aI<00a*}8QT2l?F)p$59#{z}H>GFX;7MS}T@Y^OoR%P&nN}RBosQiI3*R(_6b|t- z!Yc(+b=F)y?PulXy;yS$39Yg-(hiaB`O%#A&zC7EO#Dt=o!FbZOThsh!yiZqnxUsC z7ytx91q>A`WJ@yLECDBbyDlMIjdn)1Cns<|6T5UF>_!Zh<}wNqza82Bbw(wN4&W>7 zs?0)D8;EX8*IZaK$q7=f$Rg-c93Rn{EO`i^(m|9!Uacjo4k}_4*lZJgxJ?dnf(2dH zMo+QK3>Ovx;SCEO!m#TCdD%R zSS}3c9wB`G|lJwHKv5E=dQjk<3c+iZla{DUm9(%ZP%$MWAwl!LD2 zNUOg2v(6?G)Uu6>DM^RYnGjS(Kj2xhr7~6H!iPVIq*en#~ld~Ah(0}Mz#wypdh|Y6Qv7j|=O`hjRfr z-pGi+q(i@^j~OhB_4eHQvEgsJ--(H0m`J+5K6|Fl3p&5^izf*nFv1_46%sj2i!p@J zk8){S08$z#BG|x6G&>Cxq&BxBH?Q%utJtKSoG;$9VW!CN(v;mT;Sh|1yr%Qtqj_wi zM(lJ6G1$oEs*ZJSfRHMVjQTl@w1($E)%f3p*Z5C>7m_8hOA7-1obHj}n z>m@Z{8EFrdd||-5FO@GF!PUf>{WGQ~g6y+0 z1}e=WD6oQ$<_Fw3c!)=Wldw<}g8*VKCFzQ)UDomHnMKByDv3Ji?vkvhwaDnP2(uMg zn$8_6)V1fmF%yK4?tGu5>C4lkg4usmEngU=(G02P3l2rHG;S=}r3OAt%0 zPUE7DQjSg}t%U5e&}_1?KF9=u`C1Se$<*$4bR*uC1{T|lKQ)ong$*f6zp_Iw2Aih; zD^|FGiR@ya*^H0heK6uC_6kKvV6q47aIQ!Q_9i8XsN*l1%53C~w(6gP30NM1uHp{8 z`=-@o(BZaPMp6YcHSkSx+aP7F3wNHUlPG?{armRs>G6JVW7(yaq#RT=4irLn%%0@t z)bpW0LIS^rTchZvvFZGBDs8KYE=nWx-^zl-IO3<(&$zI(>LqOSt;fj5^NWmzko*&3 z%U(OHBoRRrKvS{Q@GnT(NN$%a7D0eFq@ro9BWqUhG`PcYxDS}9o^9s7FD*l$L{eQm zS)PaYraNJ(E6*4z*R*;ZyRPkZ!JAw<{J^iz{^gS0Tz9P>2aw^yM^_XlX6ea2ZJWhc z&S%@=?^_!#3!JTE}OEDJ{R6w`${`?Cj8HY29xfL}GmdPOm5yHN5 zQR(S|olX1WE|Rx%yt?jx$3=1U0>2lPE(VMZMsO+zi;Jr+5yxY$HVQ;&pVy!@@p@(m zu2?-w8VYyaYRBI%q{um!m99|VJ~ut!@d0R&;wSk*^egF66Q|z!kq}i=U-r>EWi$p? zGMrqz^DT>}G}5^~LfoP;aFFaZu{8=orb|HF0)1{C0_PT3GmZ@ zx+S77cP?F2_r(es^7tPB&%qU2rP!u$d`_aKb4><&GXnolW^}1AW%aqGYp`G|=zTv) zpn6nPs5}Q@=N2bmOpX!gVOtloM)mm*z}!|dVG9~pe3mjq32s^whPoF*3% zF(PjKWQ8<#gq-J#V^M_~fs&^k7mT`?CvB``X~AH{GaV^5Qz?WVuSxAacLZE3x$8CmeE(wxTR$(-o9?{**O%;%uj5GECY8yZH}5jz)vzm#iDkLC|4re}bi5Iyyxf zAsy#<)tl5Y-9}T_tw5x91d&#~5AO?F*9MB{J|5z@97DN6k>ySb2G)-{EV$tv1##=B z@%3Ohwk)pc(Wg2TVO|Q509VsXSnC)5F)Yoa%Nyc!HYQRMr4))8@(@N_+DV89++>Ue zrHUx1J4b9jKI1yWWE+`q$H)}v5tWz56OgWy?C*4ny(EyT0CQ7e{&)0cnf*j>L+@tw zKkO3Q@h6-yvd7)bl5)~Il&Un@tA8~xuo&9X2wgc{NDW#*JZwp!(c5N46-m15Y~n>K z>2C|Qa1)$}B@Q)zwOyZes41mzIt2=YyV>ee&EW3Ft@P%NGTFeRDl{>eDAGG#<;)|4 z!bQFpvG?Cd*Jl30QmstK?6z|1>=2{`^wLG9)G5tU;x-cy%?(Lw$^4_D3X-Qk;uoYJ z_}IwgcT{VW1o!~g_yc83w_E(;f*@86$vi0Qhog+|*$tYH+Aw1pcIB1^o_lYYe`kqf zL~|s6D*ZjfJ5Qh_v`zjA4q|o<;iF(WCQAQY--nTrI}eQvvd)!;e`uRcT(pR4fc-A7 zt;e57R6{6CQ&S4k%2Gm$YB88zpPiL`=833N0Ye!E`jHZnz-iNNSU4h~FG5Woq$w11 zP&y~$c#TMvhADnkK0!1Z<8GB)XCc8}sh4RvvpPpBi>+*_BsS5KETNb|f>6nS&H9jM zMrFSXXZ{$Ogs2Ysw14m0V=M3Owl2d{*2flh}uAn)yp{=-LcolJ0wm3IxeOJ*9Pl`5k3O8C zU+N%nsqBIA#f#>v_{quwoVqNjHTO2p> zfCt<*3|WFhvdS++e+9M4zRF1#Ps0*GK_nw$(agxA}xB1dD`ugk9)M9Pb_xnewtrVjD3hC<8JU3Wlt9< zmad@*5k^Uy73TN4$*Ol!J;8x_(ypZiF4?>=J3U5g&4-g>BuA0C{#XV&r~VB&zs5Jm zePq$Fq z)c&@9faB{uVEwg|OUri_?vl1xL!r#hpU!xHD&%ivJa)iXm4;5*g|A#d{Qx%%kX!7V!{=4w{@k ziEa`*xhqOxOI|Q1ZMx)^Z6$IoM$DFkd4hx>^^TcMUcwsZ+n~xknxyteCwA%#u5>Ouq6pR~5pn*NAK`rEzK5D|sP0 zffW9v^<&l}e$ykvCo%2wi)ET6fu)nKzfabb+Ko35?2@cDvoU^wRz<;N+5`8CMHs(W zR+RKHS>UHepOB5G1EWp&esWL=d(4PQ;nLV>V`jUCcELSLx?G=C#3!%v#KO@gs|Zi) z{m4rcg_Gc8i9BXod~qqME=tXx&T?4@(*~&gqffAMd)hALR2iQj;r9>GzEwpFrm&cs z1L#z>Lp?|MqIDIAitX;i2z2H8#TQk-BW1pQKq1Go>$5TsvV(ZtTGnh-J3XnAI-i3I zg`GjdYY4kS(=TO2&$JFS=U^lp*$>e$uNszhQnZ~QXwA^^Mpz1$5bHc(bEp1tH6HX= zJPwdXrqLSLun_UgmXhE< zMfF%<;`mT3tdivMB0d2XC64ImR?H(!HNHOkz7tgaogbcTy=E^ zFVraF{0onl&Wh#ARu7F}K=L{lU^99Dh%cxF?@hoRZK~x%vqhQv=nzxFU|N=o#*ySr zxr)1|P{21;M?106{Do>INRNqaUZn5aegesO@+0dU&$(LMDG6p#@MB|GXqAOfHu_sf zoInU%F~_}NL%>XAhE>GFIQ9Qlz7n)tW{bV)bUzP`@{TT440yfmX%O0@&#iZ39xgP_ zDlC#4*$J-K#7q?{g7D4X=@04#G|(v?E^y-)Od89&OXvS6$e>C`>Ct@Wo&;)4@LF&R z&IVrUkCz-)JK0G(jjrygvl1>*q& z(#%lE!x@c8)tWwL6;Iat#n6*f$csk<$^&Z7=3xA0;sh#6d2bOv!`p=KGfW$z790K? zr@xXE+GG)R0e|W9O(_|j5i`%i6MyA5Z%#WRGk%7x)J$qdv5Wuy#obI+r>Dl9QmGP~ zA{N+&f?iu=4x2=}mLAZwe~*fPNu-y#Sovt$Mn_iF{g-TjaG@9RV0B*!Ip0|Ssla(y z+%y?taq_;ej>bPq;DFoBsFG$FsCQp`&%m(b?-N||gL_%HH6)6dKVCuf&iTsw;i8WvD%EANS5?Z;L}si7DXS~!-~OOg#r za$5r4j>U~)H55PnJqtvlp7@F3L}R6=vvGqPWqv$Fz#}2KgPRfZ(V(jZP%jQ0&@_W1 z4uxHogNnf$%w$Z^1)i;TDbQHogw%Sq9XiL4D?q9(&l%?}Cr9b+!0Og9L za8=tmXvl@46$+l*`ZXvMQ9M#+a?opx>@YjdN0s~6S}IJFpR82{xWPQDHH2z>#p@r2)ptU>zK3YUM99R& z-&*8j%uitgBa=^py3%EWQlAbW^WkgG0QUocM>M}OAc zr@{*eCzvvFCJwt1>`}#0#vMc#7UuJ`(UI0Daw!f?;CA)eh<=}>l?}V8M2-@a4vcV9 z-h753yMXAC9sBJrnW0~4BG%A4m8e0WXX>m(h(7)gz|SFpk~$pG%(w=QbPOL00u}>p zdK20P6@KLzpPe7AZhV6Iz|ZRYI&vi~2?94BGI}!kWZWb|B!YYs8_BACIB=*is4(3D zSq6?@-(!>2+taG?w`G_b0i)nf?MF?`1FOw=A%8pq3KEcz#6L0I(25@l7LkZeOT+?E??UCmw*lG4~0 zcJ?1h1Fr}bS3#A_Q6RR@7LCg_JpWOOyKj;J{=$*6gvJZhYIm z$iEI}*YJQY)qXf6NQjSYjM`dWG#R7|hK&hPXOp6|#C{W=8?>s1acoUp@K`=(1PTit zNJjl<&Hz#|W(S=DN+%X!4iYEoQks6C{}vJNU|ju3F1a*i>pL`k0-l_Rx-&|;bajKY z5}C&$FQP~{Pzvmh&hCvAu9-uM`4PsRxhk$B#|Vody)GPt+8HAqH?DLARnE>IDao@@ zZ@ud;vt>H=``7*_@_^PDoGga#BV6|DXKtw;=`K z;4Ln601yHIj^2U-A22`w000Suf&f5cpktz8k+Q>JlZjHYa(%}kr%{8$*MufujVJd1eBD~Bgz-m# zz0}M7!}+R#lhTzxp0db3In!0|fta<-6j@&4Ea+#Q&i`;*UdbKzAgBJdBuNcpJv z23i!RFFlX@_EUlOj{qwNoC;sgx!&B6gJM&!1Ay!g{?}g~Zxhu-c{Y@UZa z+4Z(QmrT(bWG=HUEO{)?oOi+lXXf3NS7UkF);BSDfHkITvz$McT0@_p-rr|H4vNfd zs2IkM3V&L#(#yiq#8&SaYEqGKODs0J3hdsEad~I-coOqyO;aO0nv!p_GQm2*z9{4z zQq!w=^SXCgwc;@+(N#P0QWB;LAGr5?xh7gwGuw%n?~nHP_utN^8%~?v-q)S0tBHal z$>B-IqKE_N)@U}azKq4MO0TFAKrd|dhC9^I_uam7-ygS>=Kf0TMMiFPo_$!)A1Zdp zW{WeVzE*~-Ya8^{pMW7XV;IYdi-;k?X)?qnvo)AtNOkE^$7gUWL@>;`ZS_&ovki&k&v8m2zf5S-hVOFJ1P9$KZF{` z{o^S`{6lALrrzQ+Tkm=9yZSpw1c7Wr!hf$8jQlK{; zQ@@*4UZFkkhZV%nPWBMx2t&M{i68+A^oorrL=Ikzi4Vxg7GK@CP*e3*KKPp{pVgLR zzKJE8D%kyDtVk=dRCiU^#K!eFLwimrG74Aak3l1S(83ieh(u`wF%Z#KjXe@4+A6*+ z05dG@n2u+M3({XXEw?3NcSCg!!OMfiQ)*N)2 zh5vXgYwDrU=@d7t_EqbB6KA5A&hM!RSadAEPj*$-xUlHFM6;%=_Xn={FkV5&dUS?N z%us!>eYl?g16Y{@4Q_Hcs`Q>soWnHNXtVA3{f(_UZmk(iQ$3rke9_yGpQ;zs_--!ffn~Sr=f@K|Cw&GFllvKjdu9lal%E&T49L z;|nw0bpcv_5fP$f)%c~OYR$A5^VZ2y4F`U2GAJSO(0yT@c$C7O(s)KnZhUgD z>J~9Ij84liZEj6e<9uqGsm@<@^tsT+X-%0lt31W0R(Gk?y_&y|fKgCFqFdW=AE=aC z()0XwlY_plYYn@^M4_w09$-JX?Nfd|D3Uxpe2>zOc>Lv>;2(gEh=ac^hgx)S7VFd0 z-zbc(ca&$iX!S91p zpMIQGVyIynQNuiiU|0F3u#60hF1%CITQwQs@3ZiEFskobQ;Xe+5vNby8GfnqYi`UY zhA=Y0|FbRTo&aL1zayB8uULnadmN%UeyR2 zjd!%e=BjP=>Ev2MT8KhbGfc@35%GC!nOKG`0d8}!xYSbw;}{W(H~L#^^J$pK#O|ot z9P9`l^=aFe3@pflGZ@><`VKHM!CF9i_w2P7xGx-tXcoalMZRJb;alVUrjd428K)h@ zrEyj)>}mE?BErVsI3C{o1sKaspdUcSszN>CMLA02sX+)fOS-qUA6}6v@nvw*JwvUj z>#dLN$hyEGFQXpQvd*0F5Q(uDj@dn1pNc=T>)vlYz6B@z+8jsCKS*iQ3bV2PT0mAQ zxbO09jdckOJ`b=cw``81DZR_w%$2MyJ@5YFdE~(rdGPw#UUnF~@jKFA>)h!jv&A@LJgulA3$jUD_5KHMkmvso9-@ARf`vdc6T zUO(^7o_OCD&_1*y@vt2aWe!7VsMb_(`!ceWWuY& z)OcS(SmPMPs)Cc+pQaw@5Q;RTT1>*(DOx~5ir?OT{>!&;>!_Q1!a~yY(yhm#G0)0D zU7pG6F0o%o{0^=eD(q{MuN|isPEIDO$cj}w@@JcQ093cRe^#X2R!V-XacIT-rvJeB zX&s2r^`q5Hooj?@AXu_-3gd6*wHSMPzB|Ycjoe2bT-s^TpER?q-`m(OFI;JoVot!%Ch~c;??w?U% z>x+RgSD*ZLl{r@-5tUkSo%QdZT54grb7fy!S=HU+kv_ay%i_v>q0NfA;Ta`gYo$HB z=NnRRv`$VykI(bx7-yJMON!#$&WOKbkp>K=FqeAA8Bg=2YX*OO?cm___TLWhzdq@J z-2?LiLP3K|I$e|smSh-LuPp}*u;*~XLOsJ^cRoK8B}rF0zm>D$TuuN_C=G!qg(v7^=Ny@?paAsz-Y^FfD|e}f!_^M;*7lM0B->kt@SzHvJB~Wlz~_`ZF{pQAVzI8UqBv6b->>$P(Aog4aPywKKPrm4*z+UiVg#z)wp+56r8dGn%}xi>_m zldi1WY(t(Xp6H(F%Qos(fzl1AnO^41;`2C0gSk|gtj(I&yY@9k_DDs9G_?l4;3wLLhbfSpLewyb`6LSr7M)VyqyNT*t@oi zw#Y9F4v^MMPV%pQU9W>1_GK~fmEd5BZ^7$JtL28*;Wf>5SX5eSPU@d0Fb+AJWkpC9 z-fPq9laT&l%;l*B$I)O=?NGe-s$scC%_z@Q>xYW56|==^4123?bdH8wYZF5w$UY7o zS&YW8$q$>|U@g3_)S#f_OS^C@Yij@ZhKX7ZmR$#nv+^H$>H)S#+9-Op{m`}m%sfSx zY(qFp1cbO5@Ixl!gY<9b-%=5WKx^>+ZA$#lqAW`spCMlHeMV6yqM(1fEEC?9C{G0G zeR{;WT;V&HN&oxuvw#YUL2_?ARx%nn};a`^(D}^lWL7HshPxm{UK9jXuXgxQ2JwwbXGqVXn%YF@K^YNh7bFnYKn< zo^!GmeP;G1Lp}Ig*wKH9BQF@=mm{3KIqieL+IfThnZ^1gQF_?F?3~-wmnK6IyKc-6 zCY?8b#X~nG@5X=m)We{Kz?krY_H;(yveN=;w5|Gw*?34~igk8$Vq-@^mb*hd?Kf=W z;!+mJ3bWL8dWg&So0F3D40T6~P-WE-cNKe9s@mf6yqf|sH@jVEq~|oA@3&FW=K3ZBx-6KhlY_2!IXfLN`YF+R7! zUYwrV=uURaR~~k%@wNC$HTP&%0h7;hta0$`oU++6hGCUqjD?@0p?tkB&HQcMOR>g? z9-Yj5j7M~HR~6xE~WTpa^&1dWEkKH9P}F27FY}Y`(%5rDoqcCuBC2R|2FZb zkHwQPcjoDMiC*f%w%lC1&Va|?bL|^~wG~_U`{&pac(|{mMmGH^n9Yb2%YE1s^PAnjreUk}uV7(^-V=UP5f7LA8Lnbe z83&UMshJ{sd96xtdbCtKa>^%psEljB8d;G-E1q^s(2e(X&sz5cQ%NsDyL)5mVuOm~ zi|ff5W>If;fut!H?iiU@C#n*|E0%w~VVf1MsaT2mw$%Ny8T{^u>kAHW@oB!%q`CE~ zwQpBARi4Bl`+{L-xNSmJDn7rn8kzHjxMz#7&w#g@;3F4ucNBl?hNrf03#YYlzKd9l z>1mGEyUUikd2LtcsgXf^VUiG4pEh`Lb5Av?MLnH~tGdtT)yGtC4Ouug} z9`;r{SToU^407Z}lm}7u+If0v^3WlGJu+E>GoVb=3*BHw;d9SEP;!D8j~(v<2i<7rt*iw5cCMWbn4VHM2dv!`#jt>Rx8p!uB{Hb!EH#EZ80>guHe7HbL-% zzF_7X++)vY`YngTmJmuM3v&aslk$d{Iv$dNkQJ{h9xfE&Kn>x#H^35je?e&(1 zawg5BOn6707psD%hZ$(!63`CdjUAOx5`u+QGJW7WcAIoK*EMFdbZ)Bdl))F2w5b@9 zw_0Gy4@WPqLpI02q}W&mFo0cpC>O=0IHNOowurwG-?ZUV&-M;H)0ki`Z*0QQAM8DKd@P^zD>{ldcSAV`=yFslT4gr zOZT;+dYG>(+UGG>f901B`(xs;epaHeP-1nAjrT*_@vY*G7KSj-v6!5PV^Ob>+YH_Q z8VBV$o0Rg(dbX<3sFgx$qJDfn=_~*Brv8;@tHA_<4eSq>>NHcyzL}ZA(ta|JurVM0 z>6CB45IQ#6#zYI0bF5eO(c?D10t@IW$5ZNAoK7K45JD=vE+fz?B-@ogO|`U}WZSPd z)@m~6yzu$zjI=dDtN*TAU)uwrgkNv9aDgYq-U2QvLywO+qlFRn$FU}Yh_|@GDp`S` zEyKK)F&#&N(r zcyksPCB!mUF|+OVjvahHvxUqcw;f!0mO%2I*f-&>(9tU-zka0Op#3O^;Bn;<;^BZ5 z;&{`iD9ib&2bb>!u4=Ayic;jOaBu4W#Ufvl{#Uhyl9=E+?tLuyK;n%m7@03IM|PI< z_}};h7&BKy2S7jqp`l>F2OJC-J_qCHKma-h6ebxt8@rgAGa7}sx^XZThlxva5j1NE zsBwT)R6@hFiBh$AaAEQ89$Qk=HK>_WD|G0;pmcZ<0G{ms<3r_-602jYM!38$k}3b%}s zQktAF;t>?&hE`@wDuL5j{&~P0IYK@C#81B-vMb&|84TuTyT%dLQQs~@9^A!Tf~e{t zB(@!xixP)4sg|ZHbgplB7V}#Uc}zV=ZoyU7RQbPQmChi`M;fbZ%_+wWNr~-G+j5+& z*=iJd8Fk1jUCq_h^yrxzXvDOXB$PC3E2i*F2@_`H6r1BW>43u(v7%4l>AHf z9gyP6*mOCbysAzggSzq>xxeL%SMwkyB{#H`44p!49H5n=aj2A=WVv%;>8Cd|Q;0Rn zyRKYqT+V_JAEZSgm-(PW5 zT+n*0kD&q)UCG45645N_Q4L!^I{2at2&&FX$=ZP6C>8m5{u#0yQHT>LB_I$2UJ8uScZ6pv`Nza9Jb|7`rBa?r;zqX>_T_7OKM}rGr1W<6UH@2 zJ?H2jK=tQ!!1LVSXvlz;+?w?fOJR(-N#)oqchagrxXA?mogJft5iJT8S=YyZ03^Ze zDpHO--NG4S%_hsw`^g&0ne|~-2g`!>QX;gf6n+~xlJ2=no*}kSK&{j;*^XqE!=zTA z2bujK$s5)J-z4UjQaT162p;W}_=tYVfVtn7y< zsO#3Y*Qf7C@nZa%;qz9D&5T``JF^M7XjoXiu`$ymClb~e0;%IL(n##CggHRL^Hly1 zKseTapzY!-j|*jUezT#r)AJ>IvR0(65w^y+OPz#Y-Re^ZrTnhtzpUL3CXvp~7nq;v z_-a8U0vSkA(q;2$0jd@ZyBOufJh+>*6ono#%{fCwXOaTN3M`RISrw=~;wg_u0PG}g za$W>;vTsm|7>qNBc?Vdz+$e14r5jr0qg5AEew@g#O|0XbINuo>dnD8~2IRCj<*f4P zO?nTe=F2t1DXuG^!pme@SnoSRcWK>Dch#mlHHIP@WTf0Ry8HsgrdnNB;gLlZ#xyl` zSt&m8Dl2BR@oXII&1C_kX4^I3uyX4@0zgd{>o_k8q1lc)Q!40pDJQ-JZCp5?ldLE% zaj7*%brSK?ZcX)I?q+rJ4*T9*QIbpk-KS4KAm~NXTDG}`W*1#00}ep1TvXH4qcK*L zik81k_H3Bv6 z>dQcjNr{O*b;I~mq*4OA87u+OqP)BCt{JGP!3Ui_q{lvEudc&`h2KfvX@!dE)k$En ze19H1W6uoX49n%UYg1%w>ILMvp?Vrlv8)op3T42Q{wbn^sG$9*!qJWvg8N#X zYm1fNo$NWp#1r7wLC#sEE}QLDsz-n`KG9V*%aFiPK#Tz(?qIW%Y@wn`UE!I;x6UA7 z!{{bZ4ZBn1oyCJCqA?`ebp6V{fWf%xT*_@du75=Ldn9{SOV5CDu+t_VJ^?PLOS+Un zVo+jNT(@N#sNAvMxg(}&^yfI)v8^xc%4ENXQdCrbLQ@Uh_{?rqz54#tqoR{KsyZ6y z%-%jZp7JQlMi_IzIo7-=#>nT|fL`4-cM86Cm3zDUcXYAe3i*zeKf*jyA2SA;<%$$l zxlEHj^rW)|If%BUPwWc-uO&FD5$CxJ;!_sJK9tsU>KUfn7Vw(ZK0Dq4p2 zm{}^-lQO5=;ytU{AKTQ!RSvpL^a6JS+DzOLc+J3o(n@s>xfvZIOgXV#yiI(9?g=VT zZTr;Mh-}x-{gt;;_SN<0)UyR#y&=+r_~PW6)-={{aOUOJ{PNeZ#bD|T#@lfPDIrO zmPCS{rAXepP)f=@=)TLXBE?nNcaCGa9W!X!uabXVjFt~@wsqgk!`a0} zMA{mmOr0d*4$|*&inMD4ku#rruc=m*-&KT=4Qz)=vQOrl{C?|e+{xFBe` zb!?HXqScWb-Epm{K)9D%8FV&6UDQG;E^f~45YNeopgaoWygrZ0z9O{G2{YtyBdqIK z65pM~z~*<9QZA6fq9E@fCs(TpA(yv?jat;g2`koO{DW;=BY^7=o4Tu`A9F7`K-n;) z91LSjL(BJ@F^!5ACfh)+eWg7MCM=zSGQ0M)DTaZ@kg;#^00HuDX=+t#C=967v{Zb6 z)~R(F0h0S3(=`hq)*6 zalY-q6U!p1X1}s2*PoPS8?S?$oFnNVE=}9(3a}LPwyPbW9MS2if}C%b zaOcye45dmf3mL(VRW@gW=P7+PE*=Cht!&vxYso9yRQDWM>-6V1`Od@?DMMCp8=w=P zg!oZ3;rEv9HfRO~#fI({R)5KFC=xTb+<>o=^IHWFn<@TypTts4cQIre#ezO$tInFD zp9|m@<=nF8XGVwD(oX>IV6I6BKl4P>l)ADP^GPm%GYkuyt=)ZE-9ZTy$HMe{c3^Uu zbOnuIHh=xYG88eS*HkV#Wo@M+mU{VFxe4*jOf?WCxDwIIR4jOQ z9WB~-^NB~UvqcwlzgO{02lvv9O?R(r1>thyC^oEx=VR%a56~8u&4b$n0u?J zw%V`@5DK(tDK5o=6Rc36IK>H0NPyrHplE^OR!WiL7Tk)HU?osoTHM_!v{-R14yBXt z|7X_B{mjMW=By+qSx44+-u=klTLB8N;rH98G?2qs)ok^dvUn>LvI2GWqbqe^o3LZx z(32VED^b9Yu`&q&iK*eP1zDBGqI);s0$!A_z0;}SG^ zzl*u8wLGee-Yt(p=_j|UNyi0z!x2At?>KL#GHx_&nSKO02O_kt%4J{v2ucu%nQE3a zbu$5Dnd6$2Jl<*W3kyTg08y^}kdLnf4r|2Nm5R}HAkJEt`0rtt=*;xk6i>3KdOY34 zDN8gIRM^`#I$Y?M?WP-ogl6gBfeKX&j!*)#QmNALFY!%b)~`aBQr>YOP}@)5I1nbc z!3_nZ^>K6FERa!2q$TxQ-ey+}wQ-0`HK^f66!f5`N$gsavFCDF%9Vf5P$qh%)upRC zwWqR8MD-J+xbQ*jk}Rk-oP436A6CZ0^{=9g{^*DsWIq~W-$2X`JxZ7A(4R+8<)tk0 z_9O{4t_F;?grx>)COI$n{poS7E#QauXKs{GIfn~ z88?lo!AKa=MLo->CX7*YYeaTxNKoYucM`_7V$i3*vhdH4M_h{_X2%iR)Y@Y@%fu~1 zt2uE~pZoIbjr&--Q^EBxKnDq|Z=oE^cZ2x4-*`W&L_%7uUj`8Bugq2n$H% zdt(rBbQ6z`Bb?a2w11GH_vd||uTeTZBKa$I5p0w72KlQ+o9WfjVKKWBln3kCap70{Nn{_ zJ9quZ$6L9rE!m3YPaMb{v#0o9@5jT`)RgNHcuHNGh=q)(&lU#oN1 zVVsJim(+Mz{MCsm?rvS-;3gQtAEv_}ARh(<8ngpa`tS+VXBJ5XFj5iPW3K|sVvDY{ z;?3{BTq}fym*I{1j?(nnhrL;@Ovx!l=ZB>c7M(}8eYv-h_d*NCx}<39k7;l>i14RC z5`UDMb63dt_7>wQNAkPj=cJ1m zJ;ie;pDfi%&Kjb2VF)-=r)s+Q`yuz2kY z^`%1@@zQwgRc{8?-9oB#DJqKi<0mOmZ$BUi{QPnE;{7}{p+LUB)9&KeKobx9v>FhB z^GX;By{RU%d*rLB{)Y?}9}`wa{NeM#?BXUeS`lkW;%l|5BdUU0EL`=gmIc9>E)}*5 zsXqnw2P6>>!5iHHQNOR6fAmKKtr9z*mHr9rBsszQMLm%Qk9k25KWGg(%c^WKWPz$( zInHl9QU8aPU9drU^vfbv+$Z<&p5?@OkJ;AuzQ7SYVkSw`;|ugH{Jyv%fA}mhrS z>8r_#ELr93s7u&bS@}U4fvc=#BMR9ML4c8@loME_lZ#U=YP$9ZCLBXXw<*5h*kx5;SRx|Lh?B61okYzMP|8u5H1vt&3vZqLpdTUj=<% zDpJ--f3fF}Sg({hzkJ2PwMb_CP6=}s;o`6*f!#whwrhPf2SAj8Z_1-whS7VPz zh9*xR!OtzTvyDL2Y+ff=c~Uh9G_&_A8@C zKk&Q^SGUm{MgvA?738pkKAk!(cIj{+2YAFl4LuJMRA1LJo8FcfdnsgB_w(6RniEgy zxe};QIkPmeieySF&0X;zjXzh_D{*irY1HlOn*M+*_S1gr_G3ZwxiCTQ6>@t%5(2@ zMId5Y+c}>2B<8peIl{ETpi{Gxo0ic&AbD$iGAo|;!gu&;p&lNrgl;=eR6dvysY zmr8mXla$fFF)2ONBFtqkZ_+7w5q#pjm}2dS9Ht6ytxrlxbpd+;3sJ?}BHwLx8p7_h zE#ep^$+$>9hOFdd1Gt_!mZ#(XY8rE!5GkHOFM9!|QnFAeD^WAnA?j=iNu?D*7H()9 zuL0WVaZR>YV^j;8>gBMUjP(EsUe?5NI{b`2mA4;PNht)=1^UR^2OoWn61W!%+w0#s zeG^^0jPgipdAkb?L0)?6QM~8oJ9-Y6vvu!RTf!l~YwGTkI2OR1=|0acPoI9!+<@vK zuv(TP{9C0VTdMc2Qd*Awxs2jvKsr%N9SnG)tc+M+nvSb?X%dO&{Ls%tX8*(__@Lby z56Hu3-@;urye)i*(h3A5K65Xf7&>r`)~DIhs4;?}r}V#-=-M!#B9scBoZ z$Bn{DPNw+QmiCXyVd+ptC>V#DpNbkjEhc%riyhMt)AxrHo^icacJZ{(i*zwgZ6M|_ zxV2aq<9Va}q)3ra<4`5^5!--U*w`rKZ*lTDhc*@L69QQQW8cibR&0=hoaN78>Vb-f zTuiAYrbDuG50MHThakC#PTl&?;mQM+D1{N}wub`8R!NPFy`(SC^@^Qo0&-fkOWyJX z$l%RAgX%=2tkr;Ky*<;>ZIben!l zeTzY?@^>VN-599DXjSAk_+MOf>?f$+R8p%0Q`)(nz7r51H$p?9sV)A!Lm7k8w!Qx9 z*+r~ZD3HQbO)k4))uZSVK{|G$M~5h+8wmF|V{w<`r#1s3z(V*seSk8zKvhFFfSG*0 zkDrB*Q-RGp94Z~i#+&J6_B#}%mO>%LZdzvfZKt=VV*-&}XMkvjo zzs)vO#nz#a^)elLU1(MMR;a(AajZpV zc=D>;`Ch~*YX_g0Xp38wCOHe~`3RXsK_fbzK|X(5zuCGpVZf8dkP-2co|h&S+j+5X z3rF6LuM#=*M`S6Zvs_%Evr&*Htw65t0RKqGw<|LGjP9X(OO9nSMKa`a3HM(_xwn{X znbp2JjJ=ABlccU6w2#y(T}xu6-gO~R&)pZ_XL1%pcAMD_LlTOy&kso!9*jy~T*E@X zMW2Kdk(uSVsRiE$aHv0JGUB5_J$amW;c?G#yK(aa8;PdM=_R9Kd?k-@Cn9ZKG;3DZ zg)MucE*(W6k$+99saAL;PrJj)Vt*Y?{wY__O4Ky)Ekzr7pRWk90;m!{uSdlPbQE+;(lZ=luDg}GLZq=5nf{LA;}DIgaXnZc z4&_kaO5>5Ebvz_~PBs!=*Bod)>L0eB4rl+UKCYa%Tf9w_<4}=F`43CH&W!DUpp6>j z2;?LVG_~ygem!LVE_}?)Cd^cWDxdo=a_T2~VfWP3fH3{Jkb6s0tkG!4DMb`uizBQ1 zRaFO$ZWMd3BCe^IvKmocU|$jnr3(g$u75$yI=V$BscT@2N1i|z-@Gv{6*_+-l3PZ2 z;IPGK$hgZ?J@~hbNT(&SeifT^RSmsOM#d#buJn;#+Cc9It@URLpeZ>>-4Pjq8MD3i zRxc1tKIns1MrWZ4h~)Ebl(Wv6ga80Hl^h{uWk_h>lwW&VKe>^*u19Rp^Wfa%a`l>c zHlm#1S#i|x5a0ag!_PV7G`QZ4Kw#k-o_YgKsM#zrSjM(^u=>+3j^;8hFSfkjq%cE1Lf?cKHen#x`WDF{GlxW7PO|%u>V7K8Q>ra96pL6 zjO&N5AL_3W|8TzWf@%|V_VN7&AsW5wyWT}0UoJAdgs#VMTW(6X%2MQf7JT}=v?`ZC zmPaIFBxwkFCwYc=HAihlpJJc0)j}`47nU=UX-HR=4zk=$OkY$s8eJq~1ZgPgP{q77 zw8;oF1q(6m7pIw$lS<%Wq!q-!Uwi~TyT+)L60Z)O^%JvvQxtGntiSI5rn=ILM@Vt4i=4#*M_`_6kR*zMbw@tA~W`5`C--YXY)%&s5KfAcOJ0 zSX!;p269SxLpt6he=H%KSxD!zC&i|{bZ71*ce~(^8(p~T7ENZ=etJSwFXTXY=`$3# z#Vu8j$z;HNOph>P=Da5m<;d3%g~E!kEphK+#wwNk*up8AZY{}E(2xVijzCEWnc$mY z#y|=qU!}XI`^{uEN#v`SzJxWT`1Pw1ruF5Mk@0nr^7a3)Oj4*K-|{RC6=|7H0)91r zMga}Y28*d)o7G%}7ypoq;fFLx?)NKU_7%Lq5I~oQywT;;rwC~p8Yoo#a9m4Vv6(@L zjPD)Kn|y9befyEZ377IIk=T;TCgAZ-pi+OP{-_>%Qkh~1zQxjJRIG&W$8o{rL93ID zLtAj!D7mg@$YnGWGH8}TdJ^DZyv%etRVcWZ-~9jy?SG*9yV!q>8RN26=}1)Eif1Tc zZYR5=;(H^8$@h=b5memT&4ypqcPHe|v>x6UlKkS5E)nd*kMauTZA#sv&uqz;oM!Yk>76&i{R?@I|)gZBxPtf-NsW96)hPwP#k0{ zff{FIaco7;NbeyY+^d+6>G5CsoZW+8avvo4Y2d0YFS)h$8C5>zaP&3ZiXd8}H`v}_ z{{CR}f`(QYfbsx-=`%WmM0{_|#s*^gu4)!HK6121|99jf#_K~3ZEix@8?9ryodr)R7u70Cx;l*uLZWW|T%BJT&Eds0bnh53_-Z9&b=HEUtB zd|Z!lt?^H*XsM7iYRdlGpQ56PSvv9-+442G92muXpHda>VD`hFtoftSBnWZlT1OP#!ai@4z*F zfI|h3cVbFtu`Y`gD{E-V27CCxViM`n{O6Dmk2tL;{Xr<#EgmR}fWQahY4m0BhgotU zNaSZ|@%aZKgG&&)L>2Lw2Rx(>kgdf^K7_>vhQZZk zl!+3oyTo+7GZ%*HImgWw#TVdqfCOme@@6c_ahQ&)$w*P30wzCf7Gu1S2G3CD*sCShz-{n$@1 z%d{l&SYYdHrxH4fGSyT39aYHzfYGc*_YU!tgOqJIk(gTOL1J=robm3^vwi+TRxr3M zy7DOit)LDR^(`zGw=pn|hS!fXK<#5WxB+Tsv}_bi)9}JhZU&7vpAes#QQx-T!ov`d zz)3Ln{IdYImvUL7mI6P5rraW1vQxGRbg99#Z0Vj+>RG;82D;Ua2G-O+^b{;8)zn{m zzn|&?$1^Htl`B?ytAUhNlZ$zh(Rym76rEXdXhgw5GSuYyQD4MqMj;Uboh3MFSx)#enb}vaDMmz!K=Hq&p{Ojt@smG z)Nu}H>=Vts(o#Hjm@0rd$DftKJa#1Y?^igf(gu#NJ(J?q8z3p`QS>x3RV-4V=msVX(vbT zSSJ;$XCczSd7B|GT7_tyvsO4ME1P;3c-M zd3Clz$qunC2LB6J<-u=TwG_)g7b1bagD+y95<~y8gK&Gg{og{AXKgGG6i(mqypMIp z(MtSV?)ABNK*@ElI!~IMJO$`+J+qOerf=3*st%yUz}0YyGwtJSX|6JRZi+jY3o1!GGXWcys?Rf#HeZ3 zAoni8M#ug5Qr*Y;I>WRV-s+};cj4$f&|?zwOp-M_`4X;9f=XlTlVK44=XX;MgVs}2 zw-R8(03I0*Y0I9~w?eih1bFVLu9d=&m;Oivmd0Q5A0zoQ~~l#!(fGXS-~M7khd zp)$mv9#@~9v%}>bq~T*L0T6f`USeAIDob$dcKFZ>abYVY1Y-rNgN-~nc4*$a=1O$U zeBOn~EX8q9Cl)lSRo}hqCwTYsF^NS+6T2}%^q59hpw%z0eoeLNKP;cEGfs1u+`YOm zfMF--vsmT&B2fxe#z{BbLqx1p_9Bk5vIVzT6lOJkM;FcTJHxW&*O$STxJBi3ytd&q zqe3f@9AV3+A}gW+(t*|^`zuaii?1?8Cw*-?#QL(Dlg78i>m;X$3O6>vX=YvJO`|@2 zD;XG6JE%YA-mq=7=9|VVt9Pee)p=+2z#IJy@<%%+RA$c&a`Vkg#w4ERlwSG4p*La5 z#P3}C z1QT&FXHnI1_$$R@s01Y-?#qYAX%IC z9N(6mWmf3{dgk3+W@T~WWJ{bm0sfHRl#!0nn`QY&LomZo&cB9g7h|~_Im7p?LvKI0 zfVm+ze8SEzev$B})vcnlhUi|sew_`V(-Di|faHj{%r3sO5I4@Qg)9e-+GCoXHikHY zGMFO+vWP-?XgHK%{gYScncxkVf|;-;ZA^F-a=(`rzJJk2+oCd-_P4m7)_LWTmXO+52A;*nYw_kwnG}Mxg3n z`VdwkTj|bRPM>nF*;PHUrME?us)Bj;5s0r)bGd6E#<%MK+gB}SKsBeS)k+X+i}uJzSvCBm#Yc8M|lE$?0>A~zV*$x!;MEn{Fwo=UuwVoMAm0%U#`KxHQeFrL!3Gendd%sjypW8L#V z+^Hjk@iy;Ae0#}lUM1pWu71yetS~2}An~HexJGfD z;9*NZaF^jsQ~OoCxo?Q+Z>>Oo>Ds_>o~Vbqp0mz_(_5^EDRRPgN4?x&jWmF^kbwNa zCm1?rf!1@i;MZaFx7i`CH6@DIg-ZNJ>~LNw|6D{ zIL(u8Vy+s6(CTm-`pxZ4y#pk0PJqd0aA44KPP8Cv?ry;S9^NVY*5wy)OlXJZP1PX|l-$bWW*R)~&`sQ^5#e+kQvQXz)X z1b5Pu$PR8jYt<-G(wSlpH(GYRTi`9Ku!6c1gVe4Y6zE*c!L1JC}q}PA9j79lB zhq!}NH!sX8ba2LOR$xSs75Kc@mh_7)+`4QdC4OOMverEx*pc!Z4R!8QCB14OoL zj!{GSB(bPLT|2*Q-ySmG8ONX%!0vS+#Wz#;o}_(zk{-XKe|X64%rK`oBfD5bU92Xi zz@WP;Y+_%E*d1Tv5aZ32AvipCugUK`q>NyqQ3oPr4Whj zFNunz&u6up_|7vD@JY^obn|0wihwmI(6?o^wJdQk>|5z`KhosQZ9Zw!{=h}+<9ys} zTy7OlxNvOO<2{XMH{EUvJUqLP;6QBGSiNu%CJ-d*yk)fQr1}&@}%r$ zZb32>ln3UiZX8av!l0{1Gh^uk`I2AOoAQBaNz=~oy6Pynd2&n1)5oz@>iu^-y~94; zA;^b`9V+nm1nM`HM(@A<7pB(dODi^^(_-JJd+hWeRWF3O-VEfEWxZnP>uE4S4|6@f zE{~r$U6deKFS48!NOt~7U1vmh&wutH%|84g$&yWn(XXfx5M!D*^pn1+*GGpr@egTN zefI!2#thYo^-FK{Ydgc zGyZC0TRf1?P`3qbbtZ&QN|phyoOj*&xeWJ%f~|DTUEIx zoB5h)J4y{xhJD(mUNy+bfZ%rUtwd)heE{3w_V2!6!~@yLP`?@cvWjO<^d0&j3oJp? zZzo(;mAI_W^uapX<4D-ULATit#KsY?bvo!^D9Cw0j~E|CrF#0LL@H=74REO0HfXE7 z*3%2XuUC*7{mAj|4_`RXiD-ou`_xyD>t zv#TV>6V19Trdi7{iGYGPsd_xT&JC2dlMp;Cg3nnOea8kn8g^Rd4)W7L;8R4O=1Tgp z!7kTw0q!G7?kG8QhH?TN>xp6l&&1^rD!&+5zT>8D)j<4dqjW6{bbR*w$6uTyzm&(l zt%DscUA6cQJt{>ge$J@^m0}*AvAFL~#1G#NR^tKqcP|da=EE+ofIF){O(Z`b+?(}G zX8hIsPFee)7?58`36dS%vf_ISa8TF#zMz~(dr=ejnP}tZfGmDbUu;==V05Xh0nX+a zD3Y0uI7?R3cu;=xjJ=4agDtbk-C2B|?L~9nO}6Ft6r$g>qqXLs4dCpc+BBJPnR`MA zSjCo^>!gFu*Jzqvd^L~0L-W@{UgZt27-aXyJAZU8uq%yg5Wad|T<1VHm=K@mGw5M7 z(U%usaPr+}F!q7|{kve@h%!x$E3uc>8bM zzqg!pdxz^4hzOlEnoFP8zBf>3m}oA~DipqJE$8o6mtL25ENu1o#2wp)Q!xMErIWbm z8nHoCWXB3Hbe&a6LuP;W+uQ(cb2OXKwyKxb6j7i@getb>b-;UB#tfc#Cy^G%s z!8Le=_Ib=THqh2~hd>S-!`=@2af&QN|M-vJ8-cw)cRmx|y-;z%-b1Pa$)>1DX7gAB zzgQWCLyKng(7I__W?`j9AVN(X*vl5GoJ_t0r~_jNN`^(1&PkW7yk?J(^<~O3Oa1f| zH1&}ZO?LgklQWYae?5v+qLfSM>-}H-QDDuR4||MDHbICD<)b|T;T-?NB3|9T2epr1 zr~EIje9f2_p)Diid|EblRvb!mO^p@ehrX)WB*!`krG3n7jBZ$J#Rd2OJnr!-j9|u+ zXMgJ4>U4_B*m6x+eH*N2OI&g9eI=*Fq+jNBmYDV`vA#t5Et3%_|2cKq=~$t;=%0K7 zcOmPP;SMd^n557fJ%pR>hE1wr2cTs#F!vPdjuS{H26u&|6h0xeyXB`V|M;nAWny3z zrNeaK9!?bp*R8d~7+Tgr`}wa2GAc65tiYcydnWhv;0LhD#HEsNRrHP@L&M*EOnt9K zK#0pW6vN=r6T$uHd*&vA4`&HJNtp^rYk%G{XhhxxrBMf+*}L@`V7oHUU3AQiv~f|E zn^8?GD-r(TSl`$Gt2Aw)if)_QRma+!s=%1_6bJi?X9edU7GwMP^ri)ca6(#4db}_W z?ULtvGEu7!37ZuNcMlubmLls+U+=d-*woousyMRY22N*|{tffKcoC0E&VfG;FOsL{ z1t$FY#-WPRx+T4Q5QhBvD{>ueOOf|N2 z->BZ{ju)6bzkVVw|EaiZGza4}rIK@D$s;L2!|^o(3wy!?#L`ReK{&u8<|fbzy1@#P ziGwz%8UyNESZeQR768ET=uik)rkvw^`2!J@R>JCXlPtyKef;Y7eyXvkdexh`qRCFK zskG%l>~+==Pe$sP$qkU%hqoKjY55fo1Q@`FZ^D|TBjGh%zJ5K<^5=rONx~fs8jn3A z5<`aZr|4))h{KGsZl}72n-s;qjc9yg=p;$uh)VzdqheICNqHe19Tz{m+O|MF^Smb@ z9csSl#D(!N=6k*9J^$YwW87@y&aoKU~HZf9#e~@dk33Rg-;i`5r4Tjtx=EA zUlydkcq;pV;xQjFA_wy;=3i;aZwQwkY^Ey-h|fniRGs|yB_p?#zAthonbLU>HgVqI zt+c@WUp^AldG-7IL&dwnI^yD8nKmwV%=lW<-DZm>Gth=CH9a^LhW&gAtOGejB_F#eR8dL1SdmZ-R z)|_OQFKLp9dlY$5AU4BccPcu{;hg6D!nu0fq&ZhROC0z$}=wI5g7XnEX2N_!hMT1*G zC~w74p82=3+l3)mJJPd5$)Aw7<{&K%a?boW0Nn#MVtjbk_(B)Fmhcf4hB<@Fi`n~4 zbneC3pUaKHrkUcT=T~F4@9$#S`7` zJ@!Y~>n)xBk>Fm{ZmXXbk8Sl9ubrjl*Uv!@HG_80=ge!3&9^L*>OK}+1RM5CAZbAc zBdvT2s>6*eo9BJ9PHO_3>{D7-2!G4YPmdky_ z%ggXbga*x1f4xBfr5zP9lWXY*yRk_Hw`O0XHp_8+*aqI&#)lRN;>oxyNhb zPwb*_=ExL#>pOAJnsTz3yBYtGPz}ERH@S+=@Vy5 z)iXVRX+PdX9jyHWIo^Vw?-O6k{=-rvi8NJ$Rae~q{(shHo&`wHVCE%tMF0P?`9Im3 zIM}$4aq)>B$$4E)*=2H zAR%UsX^EAnIpXgNet3%>$z%j(VWvs}JVF+B-mZbO>dHp%-9&{JhkCIctyo#Pza)fD zPE}}r+2=uItyayK6^jfReJbpxK|j1ru9-YwNvnf>9J;jksF~cwD4dYf=W&&nTkEC~dqt!hXr?!^4V)WsfOa5d5?U zSM`jnR_VP-=6bFb!q65Ot(wfbr)HW%RV-z?xM3(t6Y7IH-SVIUK5Cdt!v(M&6|%-! z3XVlL{8m+8`T(?6_EVLj@9{+8fviixPO4(lUt^rI_>G>@`RWe=ct{P`(MzVFSc|rd z!G1I^;JmV)8oPUIbvHJ@hgaXp6I>9Yd$;WEe z1CM6AKVzl5$9sWf0`&BHH3o+C8{z2sQ5&l#$=PYWEjZAkVGcR_#&Ma_drB>EJRmb` z%Pe{@ZJhSS=G4YPmRFh@juB4GC~KzdP>dlR+>}!*Q7`lUJlH;f_1cDvp#e6pT&(rL zBwF(PH@|B@<}AH@jWB&E+cWNLF>`9KNgfh%;WF+GnvOfa&4EYNpZhYR;3_({)ys>i z^biynKt3C5lyT(LatL`;qELbHsLNjc>kS`id8JAlG2%w;v*@_9!ca2lkOmA8Zus5t z+ePA&{w2`3zxgUHF;-+Df<)I)5;7}Q~v{>uUODZp*YD*SjT>q87;T?rHb$w zyc~NdRYHT}=9TC$AiZ!HidDLy7M=Oj*GK9Y(p8YzV;dD7DV2yP0}l)HNIZ6}FqGdp z-%Wp$q1|=TTDO!XUj^u$_1~HKEKEoJQwsX5+)J~=4c^stmnmWtTFNwf=o&48dcR5M zFX%K&Xkv4k)Sn{jjbgErVP)HK%KuhARlpYI*e9IQuzzejvFm7Gfe02}c5X1ZK#8Do zpC*d*8woqF%?^YtYP|H(pQxc9G6LEn2~N^pWq@BbFckPk#IkGno&zjl5!Zk znZrn%tV?>wxo%pKT3Yln#t`9H0ZSA#4a;PVT2@hzaz)0R%xvko70IvoEwwUBPpc#m zND^t*9u9_lu{scxD`bt#YVo9?=}V8V@vy*VJaQi^LNC^+y&6T!OrWB5y_7SG)Yu>r zPA~lp!^i)d2L7P2Xw8NZ>kdq>O0Tv0!$dtodR%Y;t>`H`FOlIF2TYk_WqcpO4 zw}e>^ddSJ=L|z@AvF&U;n5vb)YGp24jj!r<3#l9xpoFEIbgp*I;MgYbnzOP;vxoSI z96xl(mqX0Y15voWXa%tK<{l280=uSwY32(}Up1p_3Kr~Cplz6qpNH-<#zNK@($v=( zBi4#hQB^+C%+0kv=o$ z=+qZ{tWcnWY0HF48NAsfpWTe9dy(J9NN4dhvA6$e{KBmW6>k7<%(JR;kY>?WG98aR zfy3TG`}(@Dv_R=e=R@+0VLOF70kWQ3E_=sU{`x;k1}=sc}eQ!c8mGNu{V^PTa{GkzE;H~Jq|{d@J>rTjCrP2**#Ajj2Nt$kIg zIXr)1n01%(BCubIVoe}P|ETprQuuFlULql41UJGco0sp51uK<5X`j<8965!oJat}e z@>lH(%1*O|VAd!9p4mrv)iQ?gR-5}uv_OKE-b*VKI7+0K-~5wEtu+|@isHaMaOCPcGBdXKrj)_Y(Qp^ zVSA7RUs+^o#iu^ru)j)838aALG{`@!j7~g6pJ`I?x#6=lvk&K$VT9&i6ElWW_a&+q zs>;bx)Qac?`)FY(`zkNtn9WYDZ578dKXb(#6lacCTn+PV8YSHD>SmtFoR5EGtVbq50n=pWBIL)6oBhvnExwJMW zxMguNliA6?627YQ&OBZ~ZLH{_Ew&}l;Z#3ndCjhw*!FKGM4W~+7L_YEZ=jA$i68ee z5Vrp7s!YR}n&sPsY8f~vx<>a>p1Q9?W3%hr?&#|Cun?+se1Eyu|5j1OKCg2RaDnQ; zmX?C6c8*FtnD#HqQqowjaq(6=W~Q_#X+~lOvM(HoCJx=b4GDQT)4jm6Uvgqb71<}@ zG^PLZZv8a>buZqnv6^+3|~7tD9IQE9gjFx3pR%A6bW?}knTa-|&Ubq1 zBgVfZ?jD4gPak;~lRV%rp5!;*S>nm4Zyl#`NVDQn<4Dm)aSVfZDFs_f@S###Ox4qmPpSLElE8p#>wB_=yOF?0S1~$U-DRVQcgG(ku zkRuNJ?0*`0-_?m~0^14edu&}YqL%I$b+Hqa=LtZEG_`pnXSL^-Z2MoG^$A$8`=lh+ zf9!|#FGQaTCuGInb1)8W@NlKjIJLys)1;i4nntfL)v7=Uvw!oAT%!k*RvwsP#(Wox8y2(cT98%#r5xa5YfQi!x%wTm z@u*5cP~vFPbQe;h=Fo4j*~^fdi*5v&lL2#%?6=Apt(&m3ja7S(3>| zgGb5%bai8mF(!mNKfaIx+##s%3d2@dn}D^@y^(MGAL=-Bzy374QGRoHal zn{(9Kb3e06y@*jWw1a(yD^5ptc4p)NV#q~;ZR1Z@r@{{!h0_Ur&w6WW+r+#&@+j|A z_g2fpKlXM$z1&0t!Dp49xi=D?Qo|m+*;2@Qz8svvo>~2tsEi~{_g`Pyl#6z{REDHy zEk6kqv(njy1l?EJc~N&#>}u~JmL zH-^=GU*Z4agT}F|B6k=_#HcXTXh<$=>3%{vY||onEEBV4YsAoLne`{C+ z)&3%nRQ-8-srF@=94@_+4w=~XbU0Q0eK#mQJPnC$c9c0)-|q*j73P7~qt%WlzsUX^ zWZb<|+gu2oIfa8&ebPm)_=cU5ean)ipPl^9TUVx5v0?6)|5>u0r#Af~?_%Ya>mQcI zS+w8-+pUX*iT;BD>|sK2v*XBs@1nkcB;~deMygg;vE4Dw>Ram>oqVjkx)qi959^@( z?%}cim1#bc;9#>L%It#~I{B}89eoj1+MwT}|NJrO%q!uc{Q6G3w0eVg9N4k80#^lc zv;~i_&nu(LtFLNZtS$wo7yXBboLfz6w4dYE4QH*D9Giuw(e8}L^jR2#&Cq5)tpgR8 z21QH_;q~s$XOvg54XuNP8&ntO7nuQuPg%E9{O5g^h8-L$1!gm z1A1W$jv}2jB?!ZXE6goOSlA+uXC1vwtcUqjpOqMrdMk}x6%pYNsCvzq8$gy!H{3rNB*_0;Vj^^$k#oW!l5V%I)WdP0$;V&yRE_E zbIxVcJGab_iywcHV%57?ZFnqY)DWJ(ik!{#1k?bKzrHSJ4GZpjKGDtxi6;)}MHyYn z`YeT(=M1RSH^%R5S?6#oS&PHrmoV4g`>#E{?AXAWlnrQapH2}@Z72p(6mhrDV}c)q z*rA(B#_sNnm%rB2hD#tuTaFGrzp!Xwm&g2F+B9Ld9o*#GI1uED34SpAXgB6p4tAdi zK5f*|KJc;<%ep!Ny0=VCOdBhs|BuC&rd#|BY&f3LeP<5m@s5hgtxeK~-xuy%lKfnm zDPK%$MR5N0sMaliWiGZI*;eb_S(qs2{9~8KhKDz&%uP4)*Ers$&C_S3Cz9a%=%{>l z`+<3Wo0fN<-f5G1Bu3-OJ)OY&Ob=bvMdx}PKNmY!)M<9Xsq=Aj9xADP`kd6mE_Wtn zb12i|iv3NGe))SW{Wx)|(H6hkl4~}d{uJtT{=?n)`O-Si=J|vqQcbQCfHk^(u+X(g|CB>(Go$IXh+duy#>wgB$bLY#->#bg2^0+$0s#sIibHTM#odZK!JT5op}_;CxRye3FU8&6p+$-ocPW$# z*0SmIylcJxwPyCLz4xb`kIBq6$9Z1Y@5(**912SE!Xg&N7%UjSK!CfuyX%jofByWr zZjZXYKKwRje|vj-eLeN(_VUMU;>A+q^+DUs)z;5qhHqaM?*1HBdci&=G5=oAx?K&r z+1~w@EPiuyb9s4reSLj#aq;!*S7ikyJ^`W8;n62Tij_6BdwY9U7UsQuz5TqErzW%)a(VyA3bS9O$`sl@HRNb~< z=(2L;a%$^l<@7bgrRUS(IWltzrj_<)^6T2+`S!&hkHXI(?bnZ9tju2AI2Fu)SoyiN zwe|7iM{-iS`l-#`-QBZfo1>$nySqkst>n_u5^a@&W4*gdqut5%Rm<0F%bvrgOqJp5 z%k=R=SmCNxFd}XCma^(;cTXEx1cE$~&o^^Cp=4fN-`hMe1_%T`e8|i#L(R^}+R!nC zepTR+l=C*XP}VyakiHTg7C}PJQ}9xcfRs-`*2uxefrde~ET@E=g4f&CLrY5wsb|2> z_=uT?etmgub!pKfz|P;zxeu1lwXH?19``DF+*rIT+{C82OyK)4QOMSkXqD6alF;c^{#3M*jLe$5jq% z;;e!y!U~jd*~hdTq(qQ92U>9&aw0rpC<%!drzkTyxr973D>bE=5|^ofn1q1fGZ|qq zMusOGOh`pB4GubIN=ie1CN*9@b#cKb2>urWG+=BZLxRU@t}GP}2Jf_l#+(e+%3cR3 zbIh9wttA;}NdhEo=q&L?;Gy$)S_J^#&!bNGfIGnbhyD&vT~0?^MoLqTmkWUj{QK1v z7Kj@F0&x8O{qL9naP9y=9BRet+@3HTQZ|#}>b$-v2!rxl#hUzqS1>-umEoF#p?Er( z7;2^3!jWVa?Q)Zm+M=;^gpB1hAisDbOW5;pWu&fT>YZd5E{$@1>Bj=aWH!^$`m&i4 z%>w0YW!>^fJTM<>7)2iT`2(^qhDN2aa+tz5dN>kNpoA1Tp>R1!^ z7d#_AvX#T8>Ww}$DZANtbIsOJ0>fGdptrZXB8kuG%XmxO-c+v4EA=d?KFQt!?FzGr z)`p|c)pvp-G;NJ1%gvrgUtD}fx|!O;@E)qSH=hr6f-s&=wzpjDO=mJ=SBtm)I9jN4 ziWl#={`qyi@73MI=Z#`l7yC06PhEpMZhoC@MY(c!b^gA&{Pk&Ss;len&f)}n9fbwW z$U%W0m#&9S(GRbOLFDbT!btS&HzKm1p*JF_z3nq1X(L%S(a%E^H=|jK_fwKQ8EbE2`dvD!FmG-h7mZJA^kcT6C@AR)9 z?B{CYD(~khP{r)$OR$aZ7YK>s9u#sZD<2dw8^s(H(>jhGlu-EN9+pC4ln=`uyoot1 z2b7N!4Id0&oivs^jGZ*)`r(~6XGN==wj^Y}I&FPbHg?+fknO?O_K{JQuN@OhufBGE zJRJMlHFu47*1d?Ude*Z_6?@jZ!8U%@we~sCZ6ne~IO57X3QzG9_V!=QTY`sK#F}|8T}3?BdBQF{I2rHQps@8uS{E_KQ(Ld+?H3nK5W6)UHMagB2T*> z9$tT2qk8$90pY}g^-kX>rqyRytAakx?$*fFnAaO zZPx+u*}o(3sMdqst`~^2^!`ey4sXGw$0d5vOP*g6!F8O9Yjw#C`-Bh|Y`3VkE$tKA zsg7E_qKDkQ8t9|%R6@OtqwaL4lyhsXuyXQr{pZE4oT^tU{MMidNi{v3-oOED(v zL$~rIxxYY)Gkh5@9bBlXd0nrhpYpvYlWocD1y^@XCa_&0ao;M;=ppDc<4pxT6S zF~&#l6o%!bs}ke9v?&-w9?EHv1SGU?lW~?QeRb!R!=eMR7)@i)Q_~SPcZUGmc~Rp0 zp*R)CV?gOdYHopfd>*OYD@C;?Qj?(YB5y0RO*4wevuu{`U9;EDPF67V?19CkHXp0Nn4Cql#%u3nahl)zAV9fF0{Aq!H@eIKy8cXl znyeV4%W7a-KHIi^QM@&BpmP3g!tFXq6iiZXptv#la`z$yf0gB_1CJ_iDKE#HVHpS) zBsy(350Wo@Xwc|4sV|Y5`ZI+cOoqgZY?LJ9H7L=)q{8ruq|dazI%JVw#NegV=D;xFMr;PS+N z#()pP8w@4kJ5b2vosajvmWqQ17K^B`Fi zXO=K5e${4U3BAg9iTNB*EYyc3$y7|44QNEZQoR5G2S|u1dvvY@!k>Dpjkv@9S zb_-o+C1X(It{f1ST#9y@eXVIx^&S;q|4f_dIIX!WX;&MN>;|DiTzS8Rg7TlcJ`y!&?bfNRd}UWLmf%l4Bug4AoS`(ma0qgANEEfmGquqZ-I-* z3Hym-!OyL;J@GdALGjYIczpiZ}uo>hzDS)*DH7WdMQceNAibPfL zn+hUc2%s%*YIVTcQWvCuhci z&MUZMM+Q~DQ0IU?m|;}4oOZEI4EC8*77Q4R5f8F6sx>6agw-y+A1FNFh>V~TR8v@l_TaoYr!e8ri$z)hw1fg$bsXGFRSf9B z2I*eXZZ5XJ$RR&W%o-zaNzp$-0x2YMeZbZSLjbi0P~B)(d?DTb#?+ZT@`Q!x*hUKs zdng4WnaCmDWZxE8mYik>3{#?rU{#ND0N?{s7G-rZgrLRx{UPAQx9}s4Qg6cI}sxA;1PjH zUFSDN;L>7j6_$kFlp~_bYNelO zdG0dS5anLx@)8X+1P6HB4I4je%)eCx&Ki_<=oV0fr+-T~A>P(nnR zkS3azKtW{B3?fBzs~@mM^oo?N?L70#q` zQ%}!OuQf*Z%(x-Oy}^L}u})iq!*0Eq6QdElF_@>(dW^!hjb?lnL(hnMR!OcG%GELI9|q&V5r#;AbH=Pxy%GI=FTLV7FFk(fqU<=)vwSwnrbQ6<^zR8%|gGzC6zc~NlX05U`9c!-V}@EBT(#*HY>K6mjTN7&=`=O#aG>w ziveVXZ?>Ii@dy4Q6XkXW>khVWDVNazT!b=gz_Dt+8G{ll9M3`k;iPemefhwBu~p5t zI=Ts=w&)MsFl^-oYe9ZtJ88a`R|*nqDD-HoL`2(l6xs!XtzXXLYz>4ZpMm`$c?^Q_ z^cCGK9zfBiAh6<_-ZT#~lb-P9^zp-IoM&1}s@h&f&T-zg5l1;8Efx*)>U$N1Vh36v zeN6^~R6J(YS0$eIB)6rQ< zX!zYtuYFD7Q4_#@uj9<#O~MF`XnG^}w#Bn|*rLZ?%P{f*d?3ZR2Q1ve>@>tS=UK`D zHNbK2vKvi33Xg@TymBb|+~3kk6_h?Q^1`mivT(%h(V)V}utZsF=eSjx-VxVjv|p}W4>L*uQ9*!7WErba8xRzgV5e(^`a5ofZa3h5^wKZ<1gr_G|W=TuFF zykZ}H+fk*F_tN8>iTge6zB<0#4=&*Egs@wkzIu1OVtWY3z~NZ@E&h=r!A5f_R-@no3OJ@POdFB^(|)CEylPl`l>D3$u0Ql7L0J4oNJpzeVfR2 z8$WLQLDe>Ra@+1`+Zu1jf_=wKW#@DQP>#Yi>f9---YK2lDbK|%fs9dG?Re#3IG^>` zBm&D5a9#iGy3y`EkHeL)+Vw~TTSH!z8NtZ_d!>+F6z#snCpaQz=(04){xY{#n#8kB=;HF;9dNr^yWNw}R#rnDhFt!4z#>Of2*WFCwqBOQUzL! zJ5M5HQd~D^D#W0Bdg9;;faZc3a(8n!c6o`Qd0cy5grjRY-^$%D-k+WFu45LdpBIQS zdj~_MUy@Hse6P;|Ln3w$J1A9&Jo8S!kx2q85)S&msH~ZtmGPXP5JE?+u>@Zpo8Bo> z{CWJNQ(G|?i^1*ks`G2q^Gn5ba))ZL@*1U+Mk41FIU@al=;@CwE=tlh6L};^TGK%c zaUN#;*xVdS)qP%eeLj^_Uial|InNaga!5o3?W0v$>%^_BIW2GcQI?}BU48oUr7Y#$ z!>2C~EG@s?Q^ht8~n(a5M6*vWO^;P7U?$P{-v>rxaaEPo@|jN`ezk z&+E;;Th@Ttrl~%zWzRjovZ6e+G5FQ?@>ujaAn5tw6%oW}1)q_n4+9+jfSk*EVR}Ob zP0XZTXz+1UE|!v<3pni_EuTOy7sqJ$sjyGLiHqM_W{`giv*CDfdmr1s&U&Vo5}O=;7eHR;6KsYsbh(2K{P_fjAqSx;zjg_Xvwr zF24m8FJdLBqcoXW`dwKPm-rjyIaT~14VuENn({O}D3-KbpoRMknMPJVp#*?)WY67Y064*%#=fRp4jqZMI$&Y&mcNrbnyTg%!?H&GZ(;2FIzKD#QH zBqZ;GTb3kKCV_x5SJPb%sw0Vb{UFtNN)nS=a;Nc~y~;4K(DL}bv`}EP`eXda3rHJD za=o)GQ&v5`6iZ(Cv!~gA9MKpYiOy~%zfoQ?cp<1Gyel7p)hToXCU&Rs~sP6l*Y(}X=tWP6Egg+-e)!(KK~sV#h}h>5Pkmw z$nq86ysuSUPj9nTf(+DedrWjR);dL7Ph=-v-}}lY!@)(w_Kj0x%Sh()c|W@xIsU7b zoG_^W{uhtO*Y<_Uv?KOKS>D$U-Y+AmIGB0!?)t|8Y(3Vql^18N#E4INt=JVK$GOS_Cj^)$G-3DhJrSk5&aV(_`Ba@U)2;2=)mN%PU; zM28V}qg+z$Q3+%^67c|;I6SPr|FxT^S?sLis!@`po}R*#^uw!)rK3-Mwd-zb^QBm) zcvQbyaTi#7dVh(>T&zM>=hgeqXKA{YQ=o&xy@$ihq`&E~QupnlFnmbsrM@qQo4rky!r(fQ}60lXK5oC?w5>^q)_}CzWfU7VJ zc9{$4X>6kAC-k+ES^x5AE25eh;d~zOa20KzG`7(V6sNZ13EDyM=AFyAgM%!_xr zOk!gi`5@xT^=pam0 zGJ$8*wdch2zYA0-r_h2}xK*GG919j#*ieO(d$>)-(memZys7KgL@#0*XbYU zqzM+uBYQ4&2%)zwx(C7R$EtK^rp@47C`X8KhCN;Oi8R8E94rwX(nFl*E>gX&{G#( zmWR+YVX(FVB=9CmzS$_0D`@$^okjW~J8tVY@~?s67c}rMlv>Wg zpi1Eo*7x{s^Pa%ST&t9h ztn`sGn{RitL`t>#bPPQJf4( zJ^p6vZL&@EkaC3QPVZZi@rpHb32gKk*Lg}AwI#cGOP}GqN96rGaom@bF|JnEJgi%h*AMnPMiB>$F&e#zf;~Yf~Qdg{zY3;ZhFOT#fFJa^q!3{SxSW z4cAGf1C5dK+ETsDyg;hws?)?Ds)h2MAJvH*&Q=Q0#Sw3pnoNRio2T%ak7=@!L6uu1IW+Q&+`9&IjePx-moi}Q>7tq1kC z5b4$M`y2P@0xB4e6np5H!E?=j3=P0GxBW=uT7&oYG5x=F^E zA%U3ELVVL=b&X3Q=mW|{6On_Z2jbRG4j)*cnBA&L3fY4W=^hPC!=-TxrsTr4o&o0T za=wp>X7d@TX88!S4#(6#InuKm=H&V=(kTgQ8v9^xzh;OB(pJw*)c|E$kC|jhIju8Sp zI>d*8;k|c|#zwfsV_eO!PpLtkie{2$PAXxXKdXMpHRGNbn*WwjNqq4vR{8>#Awlcd z}K!izoE%7bG&(qo#m#r_0jV&f?)LZJ2buVkBXJ=3a)v zwz~-#2}Pq$(_AThRFAT>OcAmR?@|hfF_g%QyqH0JB=<@8df&KHA%wbhR$F@66HU({ zJ--|wuZo^$Z>zRweacaUQ0(~WiT+614HfUt-*3G#MgwPM8qUMDoYB}EGSAM+w8Q~2 z%@0Rs#ExHy4{x@QYIceQvOF`2W~h{TgiqI`(pIaDzO5U$VTX5!byyYln?fX{`1_kh z2CFdpqDtHGzIWZ+JjLf1&C)_E&x#jo%MS*iranqWu0L_6mh5HkQrhl>RHC1KRJ-l0{c zAJ;!wQh6G_ps?9DP=_P$Sp!HGSE^^17BcB=D;Rz%E%su&RjayJ#kn7wTGHQ3JTP1# z%1z-R?8%0)Ok-bPl(+;TKgZ6^z&zgIx{TbHtgdPm^f+edyc0T~IvdO{yF8;@_8q9T z-=9c57$H2u8>{4gD;F&bP?c3_{U%P#3{@u6M$<24^`>1#wu^N`0s}>Tc?pblvty zU7L!5W>{B+Tn(9GK_JhtkwiVCYQ$}KB`M}ySbF|gZ>LGC&3ODdrV8f1s9P_lXzauj z)&AT|$>mpy5x(P53zIk63a`V5*{R#kXWkxRmJCJ9Gj4QL;$f!YW1jJiRn@6tRzE#X zeiCUv08?#;ElBj}3~q{7_UjNHmx>+3x_jOFio~WWb1C{o#_N^Q394C59-0c`BO&6^ zO|6x9x+H?1#(LNLqCSmJ)x`n;Drny!zA%{)QGggM->`K0J)K8%$c3Fv3sE-(avb~vRr?+b3uC)#Q%+IIpc{DLmpngQCv zGy)rXn6bno0)E5Hd&z*YZqEON1;UTy~)~OBh9jZl`&oik=3D(S_h^0-=!C z@^a{Bk~)tov=3`h#=g{IXUWMdQm*IHv~sVBkOcUs*}Y~R{NY(HCLXERFbz%`Bm(^m zp~K_W)BOOza|x6Kg#r+>AMjB8is7acx-yVX5Q~nWfle=C-b68cvn^t-PVbsDgi;!Z ztU4^jeNI(Z2gx$q-4el%0LdURAED;-=X3S<3IwNg+25wZS1^Ng&kJwOZ0uwPDWhct&|? z9Q1qE*yR~B=Q2jvaA}=BR`+KQ8%*z7Oj3M6l0b25kZzxDr{)johylP%YV@=2CCp(E zd4fR%&PxA2iV*VJRsaoxY0(Sdn1e9J23GFyB#rbTN?}fh``5;^zYPU&R#ynJ<|g8^ zIXhK;8_F!qS*V5Ets0ZF%zg~|5{c4*B7xkcrW(9D0tg)X224lO0>yM1+!a8koqMHROFZn9#aj<&y?|OrV?dk8L%1@%buZ zQe=W}t7Bb%3`vkCKzO=tbc2Kp3J}w7m>MHV2dfO#ETj!Bpn5!H!4~@-7L;bBR8=x9)>bZ*+3NscDZ7bn~nG-yN5F{4D0DQM`!Pez{Q>}Z zcw$-vHwMP*^t4Psa%y%AckY{%g2LjG{IZPPiqfhN)wvY4RYeWCRLupgZ5VW&>D@hy zaEh{S%3L_@)W}#n6Dt`0Fk*CulIal_1`AhR2I32t^AQFo+cta;xQ4;OUbh^@$$>$= zji%V77d6=5i~m3PVl_MI0I-*2teYYSRlMT3N{V==YJu%JXaP|qT@HxR#pu-I z_`!}NG-S<3lHDoV<<=wjBw|S5JG~g;Xuyg4eY6+mlt@~5bhxY)#y1;`njMy9ycXVXbEnn(g*oH~jie=Qdbnlta!b5{K0RIxG z8KM6YB-tUDWH~eM2{NFt#Crk*xxWO(6e;vHxy3dAMexs_KgL)GJ_1nQ6GZ+O!EoWX zOWxOM(=4Rb^vWMb(k0jX{a+aY=B`sa`;Ky(RZ4=WBf5j9~LTqf)*eR>(vXRD58Qq&W|=#o>j0$g(5 z-2=ZZR0ySXfzy`f7gag`i(J(tXHxSQx}*8SU+4k0o+5ZZ6xMzZJu>o_d8V17i=Jj; zaeZTRYkOyRZ~x%%==kLH>)H9Yi|;>v{<^%nzPbJV=MI30`@d_C55WH(#DAvtH82LK z0g%6sIQ+jv%;uiiS9)*sVT1xH)9>Gfd@qU1m6eC$|26K4H-pi$r1r~ky+!vUSIRvR+$;toyr`%pD6Fh)1UHX#4*r8PXm? zSy2TAtN4e|g-0kxh1~DfD`hWAD>!X>LXukOKQou5s{8MKQdW?RC;@ZIa*;z z??W|e{SDQnN>M>i105Kjn4Fsa_-W>U3-{_jPMkc@1t4^rL5Ko zfLp#8lQRQNSNR5jkPTb)GaL}>IXCXM-*H1@7p+fT+nIk4Fb#61LWSstInzZ(X+=BV zGrvX$+rnuxl2UYR{@sVSCi?IG?n8MI`tLr}vQ_E8YoM^QzsQz(5@jD2MDY?GXBiVj^*TN(F^DcD zH6T6czS*phu)m{QlADkEuhFeQ>sS4)wxzxR!StN7hphtz?}oyf@2ee%|6A=8nxc)K zW@PSv9BrHbKwbs#0+9e|z+YdP=RbU9MMM~zPN|mCTg7LOWOXTFe|=>uDeO`V^u4dl zIHFCfU9MB+_=runTs_+ZQCF;*!Ju8nTU}c+6-FkT@1c1X`Y{YFsa)vxy+k_|`l#5_ zh?gFeLdJoM7-^{Z>nrP}HfuACWOHgeRMY+SmCa~4I^525RP()dilv$8oXWM`F!7)P z8!7#xKx78rLh*th7AP7|3WXp9F+;ndPV`A zOYw1_VcN3CE*^dpHAqwV*-LCtK19dHg^VE#1{GO!qdxsXqN=0!fK-;0^I+Sag4*z7 zIx=5+F0J-~HHGYtB37n1iHQd*ug4qY)BQB&9PHl0O?P*50)HOty+eW7_H)Cbj{AA& z$L0I^v4V#yyq>p~_|QCIQA*|)u?f<6X-f3+6)Itl(t*SbmKO(m5=Sn;>!a$?SI{@5;(s(}Y ziNG2FV`X)(64vpV6el_tNasV>e%4Fyw6aFhGZvYHb8Z&sJ_vtW8H%U2jT<`5klua{ z_r&S<7~^t^#iqj;uS7H~&YOGyMO5c`_C5^nuA2Jk?S@Sz;}iS64+`6qlIN&-tn)$zc$&? z_Um7NU!$}AAAjF`s`DRzf9##cKmPv3(b_-$J^;+}*Wb5a55f8C@8b*Z|MmA-Hp0pN z`ui~3(!c)x{zeqtUw@x5&Hk^yU%DB?(YU|)3Nd)^@AJ>w-~0Q!rCWdf{jGROFza@L zEcD*rSA1M{@9zs9Y~TC)tUD<>dJa3O2DbP9zKQq2y}uvHx_j^MJM3oK7nkk6ac;c# z_uU3r_uhKVJM3lq?w0NS-_65*L4rKnL1BuX<3Uk|ZTUg*TkpezlH5qP!_vYu$HTJH z;_}1t%ErUPit52Twxi1WdB>yo&Aa7CRqa0yk3MvR*^jIHp-#s&!;dSDYsUqTj_ao7 z*-z?c^_)%`7Hlg{8dtoJPMX#u*-x9d)0|FQ_KPb{TaO!$PRn7iZwh#Rr6?dReIODD zhWRF9(}K^~&$_WFoX>iG?b7#xaDx{#tb_}hHLTK|XZ;$CBE^@+NfrBoSioZnAkuK_^Q@KU@c3@~<)64r)@shbS zpoyJD(#+@_7ETjF&_pJVTx1(i4f~yAazY7FHSE8 z4-|_5-#J8>4o3LxaW(E2Nx<#sI@k{qzO#YChP6o%1fM-@ps%!Q-O}GLS7_)a#xiGy z=XBqN+M?%wzlvf&X7!K&WuL6m+W=+Eu6QZ+W`x0HYy z4Wvxa^nl^fOF>zb<(B~1h=p`~WmW{i7dmWwry}MbjSm}G8FPSHRCAHS(GblG3`}6j z(~45DABM=c2I31K;l0`EymPntN{SxGG?|x7p0)ybKHND;i6vLT?Ad?W3jCs z{1PL4{tJiaPOJJ(*bV7B7S%+aC*KfJa!^%mf0{N&!v|^0p_$HEM0K35&leFpi&{-! z%wv!x+^FTc!6JbvL&-(54{(XB4{l>z#&$!=mxB6y-Y^q&P>6_1M{&D7?e^lt-d8>)a&RJ-~t$IBc zLDlde<5}tNjEoQ;ySzOloqjYdF5oS;01Ei>)A*q`?(s7I-Rr8J*$h?1cj=AM;#b)( zk4*8x7XZRjEx&Cj#Gb#lHmkAqUf9BO|6U5YT+5C(${ftX<)8{R zvDk8r4Sxh;$%Lq5s^MFC&SUC_SUJ$y>bVpOYhYV^{tmV(QUmvkajv_9ha}sIrG=`U zV7dM`B<5H(PLG(BZRVYte){8mH!lvyG}t$^{;6pF6H{1Hn}L}>5Q>p27>G5aY0>`# zHZL}JVI>F-;%yFzq>vn7P-LUvc4d^nM28YZ>Sx?Fx~^QPWNIslTcdjhP}qG@UMUXi zo@z(7Pj+XGoKh4#8zh{_LjBKV=B!jhFFe88&jj5d$YE{^J4ANBB-{(r*xS9k*p0kF zyjY27 zG`r1kV3UNnJiPb$QU_xd};Y$Qp+5=UGl&E8Ppy>`$d zI>o-l*T^u%S1Z-QF#U~8y0;%9+A_^GGd(z(FECoaKQ#TNVTOXt>%mXSku4d#7hG{y z83~k`Ng|mkhM8%8nHiaxZ(1_9L(oAZ8KiuYMlUjyH zGepc~dx8o1oZl*uxuuzmrDQ4OIbRfptkz0I;5eT1y+|z9UnVoXH3*sGe=)TcGc1#U zN_)|z?QklC*bS4=<>w!1(FJ&k%ItozbWGfljUW$i${m} zmht;TFa~Bq_xog?Qi$4ISa~4>w_D_B`7ln<*p6PW(=KJ%2F29A%i7h;V2>isC;=Fb zfwI=T2YhPs*7EO@G`q-D)4eSS=TgC>8M<~)q9s9K$(+ZYLR+(XEo6XGFQ7b@*~zvB z2Sm>*Rrr8k+!^yNf2PHFibNZkekXq+BbA+3LLvKwm$Z(cMJC&Xt&VJ&j%eX|IM*gEm&(nWiE3&hglq3aL7wKE?ckuH&;l<-BG;LLmt3 z2=d0{u}o|iTMuTR7jfxU<97oHB^K`qW>aT}tkJ^PqjCtJHz5rJ2@%$U{X%x-Bo?Cf zF=4H$kgcLBwC}5VR2FuQ$ZRR74y!86*~Jsx(!>r3oLX-AegL;>3^&W{ zFlnvKwUW)H@{P>L(dS7*(J9yV&DXx$qwjZ@oR5_KxmYVp^Gg#(6NdaNBB-jyTR%8^ zn+bRde%`LaX{dNs^1*A)n1#6-tIxx^Ab*XjD%Y_n=(CqI=JWm0RQB>JmeHy><_Kc2 zLcC}KzTa~)_*>`^iv3R1O?vK0{?h-$0&>$_06b2_sDwVtD3STT`x#TC|}6q8&{jLI?9C)6I6N@ZQK}G1{MPa z21mTl0zy2q% z3kq}zxjgAOPqC609Ql3FBInW3=zGsXS;s7k4GO@xx)guhT!)=prBcy|3m3a272h5f zjSzO@ZL8;8f4i8`1i6X*xX@}>QQO0op@*AQ?I*BSoRRyZUD&Wtv<_k&&F7lVwOlGP ze3ZpP?6N%8p>em-u`WiwDc1SyS?4aib2_W@c)9cRrt=Km^-ZknyK&dgfUe7|uIsk0 z+vTo5H(dbgZVd5mER$|Wpj&^Yl%5 z@pMZ3mHMM*OfqpE%3NGBV&@YNAk`TV^Bf5C>&1})mbvxO-u8&L_ff>+Vuj!mo^>1~ z0UabEP6=RA)jk|PNLenfS2~alHlWpRQ0~@OdM320^iSwYfB_!4Io3pH5@#7DG5Bu}C;DuNXUm9RNbqz2Ggty(#QI&h5F*r~}vS^1;b#n_EIPyCKg{b?nJaNGxxb$yak7jdrti@moBi?aJ0wx<{xhi(}{I)-i?y1RSm?oNkpq+7ZXr9;9Y1wrWs1xXbZ zlv3*DzMud5y5S=aeHPbK&Sq6{d2hTMitKn9`A$I}8x0Jif@SypnWY(UyN64KHaO%OL_cmuDBJU{ecq^hjsFf8}a@J_pBW?fb=F?)_JNC zGxV|I!{q&7ZW$D-93*&`0+cL+TB^Ti`EEu{=S%+ruS0$I?e+Nfuc1A47&Rb5xaqY( zSXY3_`$so3oCR~`Q*)cYz`^E$?DWImr}*^IZ-x8wwePoc8;qjsy*wdr>vb7r_ybxunnCr}H$@6(CxV_@h>T_vWI?qyoJFtFZWPlD(f1D*7KE3S&!3D0B zR>5kUW+W})?DCAP%dXS#gSJz1p|DMjqwEK5V--@H-*|?kyn(JM zc+(cck2f-RD?U;)+Oe5W5%&+$6>rg{3>&%e^1Xn%A;w`PZ$Hs(lk;v<5N*4`q3mTN zSFK|N9;39}pT+u?_d(z%$KaHHuo7~D`{idA#O*1F^4suvMP#Q6a%XXc-|dFdie=Vq=8b{AC3$oE^zpuRLg2^8`(+EV9P(fRI6`O( zDT9CrA!MGX0iTsX{K{}7X28}Mgnz_WjuYt0Z)n$!+?+?70$5|I99mp}F~+qEqCxgD@IK=uKpnp@jppCOo7-{h!- zUjV%ydJBYn0eYfwQ&51PIjBe52T-K+3-HT>FF(nHL~dUi00M!y&nhLzf(hgJj&^O* z+JabvL>@Z;U{7jBh+cZaf9~~%X26G_2CcBc1f8sE^XU^b3UFJY@s>0gcK5V@%j1`Y zpiGS?aOc5+zonPZQ+p}I1qcp!hyrxJIgmr@etbeA|IAR4!CKi$P#XaA{I#nia}bpj z8FY(-8Qup$rGgKe2W=UjQQ~`kq$+a)3@iPI-``c@1OIkw$2e@oOF?NK5?IT~tAqV4 zEf1Z5jDu3#2ngJC;ZUbaC5P93ZQ+Yvoldo8wdvwlgMaw_y|tV=V5O7`rrE32F0S?d z0XA+m95y8e0qSlJ4H}f%SnWNe3cK7aF_Bmgpl-{@)+34Jd=48cCp!Zyo-0AhRNK!* zsTW@EZ3O?Y8Y)*P)pzzfbzX>JeC4pYcILX$V$an-v+Qz*PfP>YTs`XXC7G#@EiJLw zxb)tg$l-H*XmDCg?4uBb*t!ZlE`Q(QdGK-b{@ZqagV(Gb56-t`g(SyMA8$f0Pxj=( z1rKaP&fo_>4?cam=l98n!LXiV+exgxuXtWEP+GtHo41 zh3E%*2zj`4bu3S&r|&%q;6{vq+h5pLrbEc>P88{U7iRlYU@}8pqCYNYN9dDxUhnW=BN~ORuh;MYMYw*pzo_8;!E~ILu@CT zbV&4|{kNvnHW#bbG1em%scAT5KwJipidGwy0n|TeB2b%j#3SXG}%^L(-1g!gC zSo{~i|E=S~GVJ$apjE`x*@YDvOc8{N!WX$j#gG~XS;x@^Tv{hE=LXp%adlqWr2Nb8 zOP*i;%kSG|s)_vhhu;sj&o%pp-?z;T{)gZH<52AT55FIJ{>QQGp5J$>NEZ2r-!}|# zuK9=GudB=racOAmy!-3&qHQU}^=0q*U)Sbgicq)KNs%kJ_Ibll_s;czEBEf5+)$6# z-#V{6`hG8kdJbHjUwLA{lwn>&_@dWdBcw)Q-f5)XPGSq%RL5X)&LNEV*m`sw_y~R> z#rIZgING=E7!iK@fj>wN3xcTIsGNC{C(TDr!cqV0f%4oT^Mux`gzxV+d*SDUAxbwa zBFYz_2V}~!o1mG5Qj6v_xk{V|>naUl%o(`{mcRDRKC8Lord!m#eFRoxrWewJhwfF?}?y4&@_7U zZJRL=UJgG$jlTolY7ntdzbL)Y>>8YGDfbE5vcxmE=ziuj!+q+Tb}ic~J711@`hf8v z(YIxp$(&t6OZKE&x~@Jv8|(znt>-@rl}HZ1YlkLY!f{U0<3yz(VGP?0#^V=#bbn)F zXReU2Hl;VMecRrXSEU-9AZgr(F`@K9r8@e{iV0F_Xj*;SZ?d8?>3-gESaf!{!58t2 zD*OSuc4heCy40K102W0z9G!QUBeV|FNmSmIjB-q)84GE6c-IMdz{E(NhBSZIXgHlH zdyi2jNv8e?=GWr_X}0j{5I6L;vKzJXBs~n>v1@sB{}y}cIV3f*VB$J$b!kvy9Hgc~es5)V;c+}+#OlO_1{RPob(TJK;|J7XM zc`PSkftNW`o%%wkTM`rJN-+mgDcChsAklHM z^t*#R#Z>+NT;J;pI&BQUQ5Jay`Y;8`CfwQBCu0zZlCMIgdJ30W+T*<~%p|WZ{>Jsg z>u>kFjusy+br}s|=i&4|nXCtoJ{r^q>tqDTH`f>O_(~S7WFnW);|eJIm6;{MinLsg z4!XOwy0|CidOb}1FHyF=eeX)z+sn;=0+o)5{Y5gm@WPs`JYP?ddMpQJ&$AHqxAjrp=G9`i6<*P@Gb@l1tU)dGAWiuJQPxUV}-TxWx@dOGfUF zH7$~nnjQ0ns{4`)S5J;aej8xI&xylxsAxt`U;4nC-S}rvJ-7T}iOG9b>W2h^wRDRo zf>VdP`SW1tK zhNu|sfn|XzcqF~fN^*Y{zsQ3Cq%xpWX%d!vq7MBT@Fy+i^2G{6;(9d>S4leU%rc6| zYG6ntJ2g`vlXB!UUw0gnEKKIWEl$miV=tN8%zPU!9-01eu3rr*p8+GRM|xsOEPt;- zDQl;<({P2Z7D76&kZ!AJh)vrmC|_|1Y5?%uU|nbY2@T-O@cQbv|D&uwHeOZ)T3=}{qhy3>b5+7gMN<8Kx6nYj^S{mJ1N&-lfYk``Sx8T;%Qe%DiJ>!9Q^ZsJm>8V*bE1P1Y)j*X7Dp_a5233O%bR5e7tbf)UAvvVUq zcsi&X{m}0u+5+H_bIc#yUz*(dyx@^uVA6CyX+^U#d&}6zj9bZ@YMtqQ7 z5V*P{x~br$>0?&*@qjKA4Zq#BeM7kyR(txE5a_1rnwxu9^LgT1IA%(h2&me_t555Z zAkWeo0JxLfzZ;4hr~LRtyV%9ae#ak;cW)HP-C49I!-Yl5lE_FUiiS@o1p_pqt(^=LBvJ>UHEal)%6bB(?9Q@Mx54K z-F$O=dbN2Mkt+aVV&9>uqM~DB zG&CqOzDXXX~aHi2{Y@$h~ z=5}*+vvy-5TK@r)#!6}W>y^<8F5({Q*|qPAM?c3MPHv%+ihvdEt688 znNt8Kmb)KH`Rwq}t(Zap1C61Ut?oGnlRoy_RBl$08-?+)>rb7T%FPxQCUR!O%PM3E zDrB}s>@QousuSAFirL(WIAhrUwPiEEMU+|j^J^ioHvH^cg^@}77IH04A93`kgzAik z1rHGdV)*4-oqR033hWCT=0=C{d?Y7nr!G#o)i0hUJw|B6M5)sl#bPrpcCPp@yg;OL7TEN>_rgu4FZ|*$y?M9$+E}WqVG{Q$-@!!16Hnfo zXchuQL^`r1Q*x4i>rFEDv(Mv;nprrAcLnoVp|X+x%_;%@StYnyY+_P!G&`qTN=7mz zJem_gnOO+X0NBMmffnV{uyX^rwKJd8*0ZN5yWB4grz%sjGjoi!a(-+=6myqzQ5R<( zRcwQsJQZ~jw?0l?`kUwhhI#g-OvyK#qcJqm@A4`oag+`Uq6XO!wbse5u5RZ`Gz@M} zVy2JM?T`lQJ|T=+nBd8#UUAWx(+Sna>pjPrQg-;u6s-hBQby}S0i&AcB#HV(`BwJ+22P6+OwKw_hFE*j9DXq?698@ItuB=L#p%?ch#bV7%-P&tEk#T@ordkqNwfIMJN$ytG_^7*9)8 z`L@5D#2vKJq~7@tlYkBS4}@{QFNW{;1>-;a;y)6_bQF|?9YuC8QQStdy8*_LTg^6d zByLn0z~mF0Iw-qo28lqWZ)^d zah>q>D%(t&1}-er!mdL+<9tH(BDie$gb`>FVpY;4iMXg-{AhLtWyIfvbY zYQmPX=c+`B88m1@=i_LoSMVY%WL=nSR+&uJP{%`pF(Ffd3RJcoN3?g&knk|^kTH=i zB!DT2@i7?`5ZzR+m?DTLREa|1QBb4^Hk6HEvC%`Y@CBLy3K{aO9K<9_tgChz0w`9x z^h#XETx7{}2yG6IxdP1p*9p0~gOLM8O&AdP@5<5sqrdz=<1@l!{~MqAM}PUh@tOY* z@EJ%tNEM$4#~Vr4y@dimsR+`QnB|WqfBqLf17(1zK9q%{{||h|?PQdU6c$G)Zj51J z3y$IT!H=yghmcdCUI>gqf@D2$7%ySSM?5Im^fv(fzSa>u!K333NNk?d85!4WJW42c zB5<5Zl)jbuvH7v!tQU4g zk`aOECv5y%|7{zs%|BoC1%HSsb9io?ybT@+KL(`=%8Gp@F&juf?7Fa!_<_N1k~l!o zrV1U2FvkEnj9&4a_XjekiSRIGm3s~r?h=n+WjK{6F;<+G91m%NuS1tBe>b9ez#Z@; z0$tL+2pp~WNP(g0X9Ax1cE!aA?$e!5XV7!;o6$7*#_x|*3(epZd(Y6#P}57lu~%k( zOz16At3I-oCsa5eoLhF*fdDFjZ=GZgF9s2 z5rI=#sA(8+B@)D^{9jTH5e9r2GL+Yi6V#R^eb$X<`LQffw%dx|ai$l(25<&*?ZfzI z;;GkA`4Ifi$P{M?!KqRpb_>gZU2Suu*w9lVJ;3{q*xhDm8*uxs(K((BHva}6$!{A7 z%q{p%VfasqRmh92#nS*FbSlbja|A76hEa$R-vVEaSg}tz$MoBKc!B3_sBkF3g@iCW zySf-@;_-I6GJ=rUlohFO!P8-iWZ+7e963HJQc;8q9O)-7i(7^UHh5%F&9Ey;o2n%! z{2=Gq_`>PH4v89{No=}|6vft^ij)@ukG2o4u+I!>+iU@CyvoUIOwn+rRDg8{XsbCy zp1{uEof?NpP`a~pnu8^DmxbZv`0rfg$d<>m$%k?rc>;~rO?41(E!How?r`UmXAq2$ z99W{IB$cuJTHt8MyhbaE{}nN@y(x?dSFO<7!_}uaAJrq4K4kg1x#Cbft8Fo z#(JxMhR)cy=lDICb+?sH<@F`>_@KA7vTwJry0GN6SE)a?z8C5JMCtuG)8I^Z@)ma=lsPrtxw zvnGNL88lgX)QgDO$mkafIFnT6KgMxo&q`>mr2$6z@t{+!xJUXIJ2G+Bn<*(frK7e9 zFcm2Wv81%JSA}^smyb5G14TrLn}#6;KQ+%7Z%(O z0>sh~su0QqQ(Y_?5|R z+$h$O*Rie{sTxD=yyx>H*aw#%0zTj!mr!%KO+?ReP1WBx%Oo_pjbJVNLz7+W_>LDi zaZsq#fk<+g4^Zhh7ufo{!>$7gh=)TA&WI=`tPPU%?mhl=_rnj9MqnK!Oj6j8wplb= zYwxJHx`5l`*|h#*TRxM-!Ed~qc}+sPkI=N@j&9}WT)<-VafkkQiXf3JjM-&&AKDq5tfyRA5#$49KiDps_u0Ow#7LSg+>J?=1 zcwOtZR5uMEJ2C&X$6Y;lA_n@ZcM>SUav?0S6H9_RRfixF>(JE5A zz#K1o%7FQk*s$-Zr=f%TB?3KG+?PM;2c}nEI5_sN|f7$K5qcSO*59wRLC6h0Xtr6BBT6PCb28o1X08_Ps?ehTM$IHY2_&el0y0R0BvY7 zFpjiDj%h|2l&%_^LjhrN8EfRL$2%V{bA}s3hQPi{$5%xnu+M~rx-Bi{K>_SaL3Qy& zlpdMP@&aD>4k-hk&JaFDm=Tt(vXVbfj34c9ynz^bv145k7D$;07-tFF2H~Y-=w^%5 ze%cj@?}VG1uIyy@q&`R58qF6?CNNILZ|me*&}H0-P)+ia4_ip#0Yv#YNxTt+RU%Wu zV-$;xy^@_$Cp-Dz!>Q29lqqASX)68HER{4^nz*gW3o?NsGUf17)on5NAVCpnuztw} zo)`v<9qG5{5Miw8}l?>TJsucj8cR@NV#Sixhv;VMjsi3 zP{>v>8%6|&Qkj6K47IHlLWuTcacbnogkYs{p4@ioV%h;WErK}BFdtGg9uD7@IR3=? zz{9cpLA_8Iqf)}CnDeUJJyU}PwkuW93uY_a&V}8Q#O3@!G_xsX;udh(gx6CS+5a}G zTg`7Z;pb(3O4JgJ@dYY_in^$aW#r5nYjvNq7w_06<|eXX5{o}Li@c{UPRwJU{ZqUo zF4S$$y%_v_qeo!XgnN^^B3d8ioyoJC< zAE0wQ*89aM(MP8GGcX<(wBBMA4@TTsNh}vjzsIP!a4!{aMLE_^xQr#sDA&!~$+~6U z2n!GqNiKk+X!fm8N2s#2eojyr4QoGBCEPDKB!}!O2`U>UVz45Vsw{^@y|4Z{uo#;L z!{XZUQV)`v^}kqZi8q7^r|=+}87^aLNLt)3gf{~{#&Da>YszC*?)A~dmo5?Ai>-V? z!Oeccnmw(wcbt)2%ZXa7ad<}IoZl)t>p6Eh!`mCe9?VzV%L}zT?L|U^v~ZiH!5K2* zb;#Z_Ro9noxn2fTt%Q!Pz~t5f&UOom3L-PCuR)>3e>#Z9+C#iLG+m487E`OSI$c8B zbQA+kd%e2$I|>#%)rwSY)VgGrjhiWatt87OhTC({t?VWe?0Rn^#UeZF*WIP-J=96vb&5gw9U{f{5l;SoKv6xL>%i={*YSEeZP~-! z2lXt>&?~G8Y}+@CdSwr4hNdq9IjKS11+6c7yAxnBa_+%i7j<&CjWOMmF)spgAE~#R)n#eYv$PJswFPq%w|Xu24BkUT{c33Nq5wVU5d0jYQ>VN**4#7fQYKwuDo3{*EFvxDklsf(Wr|YRIZc$g{G;t)behPG50ln&*esP3w!$6w|W|9ithqg^&--{VB ze0xVTgtL&Z>OnL&QzZn>%3B{SVrI|Oq2v~7^f!}l3=vOIzKkk!@#jFhV>zt5thv_f z*>s0FLc)1J?Ac_;`G%BvEWvji!}HJ#AT7Per>RM7=6QAZ1qkDN@>E1U_oOSb6}mI2 zyj7&Fp*NsDBK#bBPXRGw7O*aG(nU##sik!9YEEpbR$-p6{VHUduMkvli~a zzkSmh#|YAXsQKpN)Bc61@R^v+MX>kEH21Q%^s*2AWRmn;ob+tI^hz$_V%qc75{;GL zM>EgAujUi3rAV(;S*(^5&Oo29RrRlg)6c#9zRFy-#19LO zl|8(97AP&VoI~T5=3+2So9t(cPmS82AOLI-66V|dKmwheDG1rkAvtgd6gETaLVz2F zSW!7S@@ohNJN*1IMBv1i=0Xp8hpOfIZd5Ma_QHN`YOeC~G z8}hw>%>(pF)e9^SmwT!G$!3P%8fJO<9pU{5Qj359ckpDj<-M~ZfUPA?1eA6QXg7mj z9g4^Au+F6Oxe$PeipDCRK_H2?py?ojF&w~4gy2IwtGf`uLYSEXQqnu?zyOYW6D)zY zL_`e;rIbY_e-(=w{(L`ki;E}V@C^$n2oU#WTgd_2Y=IkR@YI}uO_uUq%yQ;{ee3k6 zSmh6>n)is{*nS<`LLCsgEnpM^#$-9k?EMi`c2xH83uCn0u&Bt$7!JQzM`rq$@~w_A zG6*{2`?c_w=aq=B(%+#TfErE6`-h4)EMH=nU+!tJ31ox0+xI9VKD{d2GS>K(d4c!K z16;NE^<~+9JS)H}9jN35+7Ban_u&YaQ#i=ru)Mi$;bnQT*CAk1%v;&h^=(J*Xnp){_4TAxWlN2sI^5%I z_4fNAk!o5h0kB6HbcC%Ar7C8l-})%|CVu^ zISv3xM6P;-s04*&nfhUa@nqfuw2%38Y@p3obTxuTPmW>Hi{EZW`xpu%WdS{QNt8gq z)TiqYTF0P|*1vIn%sxfrRRo(8@bkc?4DWOnzUZz{wCt}+-|kx7?mxXfEWQ2u=Jx2* z?T@?LV}`q5Pwq~w?#`dyU6$VceRFsH>F)MEto8rP4KKgFzQ6 z5D=3aK%})H6#*9EL-~Yb3@MS|+F< zo$O&Mo@64(MkaD3ksg0zq(JXLvqU=l7DA(cs9m9u`cR=z|BG&o#`DLIUe93bH^^f_ zWl*zrg9W6tX?^oy`; zjv%fDcQ|C<2+O6J8~V`v((ChRs%Sr~#b!jPvoGM$ddS|$Y#v(@4LRkopVTu)jU&sR zt-!CQ*qT4ZN>E3Wm2&5MQVRiu5NumC8@{N+o!bwmrcif{a$O&c%A03nAXtU&alX4S zuuM&>Y6TYMn*ADaNSH5d6E$5<UOSfB~YD@YH``%eVyJ-=Glv2;&i3p2YEHWBhzAO*Oq&raLTcl zxju?L9ny|$6O|c00?oe$6=@W$8*1tp>Cu1Zs;D@=RvSW~!)WQJ5~4DV%L& z!Zplj*@Z4-U#DP1{8+$=*dW>!AmYFIjomElj9&+g|D{t5PycC}e(_xI1q9{g}>9-N_Kl zVM{6XVk{|r+4@}iatL>4(Ysu9FWkvSJ@PQM!wD*_h7~V3a4)KVS(umj!NV8vw#kz%e&fYY#=QAmk^=$Jp-StR5T2Pq zTw#%!&j5E#uBBA0U)!y54en=Lg$542?p>e8IC|Q46#0=xLz@2__5`Ca>a@ zG!nh$!{GMI@pB^R+G#Po#VWk6M@x>1k4YCmg2yxPam* zkJyeK&kARFxB2!ah2rrvtIT>tU8_JQ>D2vYK;nsErU zTb@4Uzl(1Q?8;XB3*JWYqe!O@$aY#LniGQ0>yu7Fv99%mtzqK{(y2rIkW zDT-?E*Aos^Z&l3^+lObyR1w6D&PFLy)kxbufp=K^K=-CC#*XFDYBqR9 z=6(dmPUYGuUDjbPE5mz-ML}Fux8%qw|9ba^ePu$wQojYHAAnz!#*fV9eRVCCUg~3jVQ-;75u(;7A()a>NNiXJ0@6-#hJX+`^$B{`T zF|!XA*x6Fq?QtcC?_}mLd(_Z|3l;Gs?51ez867GnVw)8m1rR)rVT2S1c?H--nlAlw%kq6d<_-+|3K~nE7p_RL;`COwq2d7=Re=Yu*I3k!{l0~%A^^lG z1w?^L>YmkE3v+TaH2|7E+Pr`Q;z-E0l6Dss8lJ^+>p?m-PZV-dcR<%d~Pr!rMwkH_Mj(u`tJ4VB?H z+dU$b(1m-E11+1zT`h>SE&?w5Pv{Mm7LocmZDW}GIWx@()rC14P!+odM5C)Qs_O5> zh;$1WKbw{9S;JsiPJ46`F$|Z6Eo!tmC?!6JZZ$e{Hdo@$4tiDWQB;Oqo`xQ8sITt& z`o6rQDC4VUmnE%YeV;)!Mc=|?AMGr3ZnBa3;j-$yjzHt;hrl?zB41~i)Wz!bQ>b4V zmb8zPEalovyrN$PdB2mQ=-TYFIKQe#($1KiasDstrCm*z*Ot1*{9pR_yINkXEx&;VG{+LU5)!Phv@W0lY5i^v zqGofW0Rin;INysP|79_F`j6GB7QhQM2Hc}2_h5<8J+knx)#@HBNlkl}o{RQ*vX2++kmd{O8h#VJZeah+4cQ`B}2 z&wq}o;IlW=3`VUGF>Ta%m3PGv4a=k`doYa}Uh{^$t0T@CO~X8n;vV&`;>uu6#8ox% zex#PdZWZFkp=U6WCu*{<-ZO7Eo$*8l`dv)lb~agwgEh5#!FoP6t3u>!%XTT7m~NYk zuzoxNS}U-MsSkxj0wf*8>&t9AYB>2ks70+WV`|+udf%pPN!z1daS;5gQ3&#a|1amm zGQa>x31IwxI8eH047k7ql+gV9W}`xqjj6cMRuYtuk%~7dOkt!vn$dv0uYpNXIW9|{ zx1`W}aGR4B#*YZv^B$LnP|BRk+Nom$@g;_LyD?F16*TO3gEp$l-7mnHq`*udxuKpJO9c05jEk%JT6BB%-AHWI)D@ z+s*Fv=&dd54@F521?PiaTtLjksB=>m)eGAI)3r}3bJh!*uoLPwX{O-m$0YqUr!})& zp=C)FfgkPQFS@!bl+~#Q4YiIkHjHa>G#Ht#&7W+r)6%2 zM=|RM#%gS07U6R7_4O#Z7zS_4?zo7P0`f8{*@7>DfME6B-1g&_DB>HuOH z_2X?}%17fU@NCk>z2Oh@jS&UU4I3ltmgvJ^yiv&9tM-dl08OphDivvJEjO{YD6`do~+N3%5avtmAl0+H@{He$t zIyv0Sr;l2Fo?}-tQC?u)@P#$XE$PpG@$G0L>+_& z4eUYjtgjC%=Y`kUs{k6U}{JsfVP=DV9&HlFu zDxQYNkP$Z5z-8C^<13eC|1IZ{`5=+&i_BO2J@A)NnjuGRuH^XNTjn$+-8z1m#cbre1 zzol#LuL)FhPlwsO7s;cpO3*Om@coeVnV>yZ_5q>wtfFLs-yAmYd%sA{Cl&{j(w-c( z3(ktE{xSM|w7zX-41H~_q=hshBNll#zgJD3X>cZ^+BUt`s$cS4jCg$dD_rs6;~jnV zQbZPZ&=%Dkq3EZW9eSo!|F_RCbE2PkSnOu%DFyGnvq<|BKQZv0`*RW7eG_yvRr9q+ zP3ecC?NZ4GiIn;`A54#08x=#p*KMZtI=}w;k@H(iDSeV0`Y`O%x+r1T`B1zk{A~YsY{cJ?rs>DcJ7(_ZSK5?T{`tS> zpPZeIO?r0S-gz?s63L%j-*}?0iQ%B_3Jex!edx+>hF^5!!nd10)v>GKWk(0Xzaq7w zqqyKuHk=_s+2*HE7Hiz)c??M>EQW6ZMZh5@hrQ$#DJqX5!tRy>oNGUQQe_3Z`y?uV zPR<{$BxFT0+%@uDxFtj@+mftQRAJwMKiG)Qk|MlobkmH6@I4XbPV!%F@dRc}U7gA=gmqn> zg_*Jxh)h%&%sJ)JnX*Q9P89pkIg}Qgu$zgf=H&dct7S3als!Zodn+70Gfr$fAtFt(D2|sNOOw)kmy3ESgA3JG z<9{~sVW2Lnn0vQuO}~y6qAZB>ASeZTjnS~;1VVv4no_BWGhGB^1@Filh$Lua@dLD@ z)++BOvcKelFDpu}h0^3kRpvU$^vDhgzVNx4c9TB-?c%(~F8}GXu5FZ`sH_6o{IRL_ z0G(entA&&5fskHqE*o^RdzW#8fqoLU3^<|XGEYi#O% zeAC5uOZ*8o*iy8~59J%7OzK~r%Y@hICjOmkH$@ew!fN>5yhi8U{hezL&`4+bhz17_ z0K2OF4UL|LntAI+zTBVsk{zbDv8o#16Gs^BgUvOyLb2TArh|6(=8EfjCx|n5x~JW> zs$rD`YVjMyc!Zj5@VBD~6lXMfSQ%-?%5v4Y9w8k_xzuxcvk1?nT-;OtfV0furDGQO zqNIby>6~SG5dY-BPl$zQaM3RR@L>fkBp^6xsGWl9*vN`2>PzRN{HKT!njgXF7AWNl zK5{U5dg2zbS{7mA%CSqevsSZ@;E+E*CW=;yq$_O?yO~;n3h9c(-w0F}q~|p67GLNd z(;uXB$B%ktuEX%ckj0DwY5uEs4PU9dj=6Kffe^EBGiHBRP^tm5KbtV}ct=%koaz@34Sv&T0HCmD5$eBhywD}?}6B1eDP21`_L{x!-+5}l~M3R?qCMRiec zy4NVRn)KA2^Rqu}5tk{xk7J?h_eY|NK5bYHK0X8Vt{mhMZp}UPJRPQg?q?QbL3w5q zBZ^%|SP7|2lvN%+qYP8|=t9zo0x4fnPAl=@hx&xv+YMr5Svq zYc+3QV7dQO(<;^4=S^fO?R%lV%?*dwLF)~AARQhNbmFI!N5mCPd~$kM-@A;>>ivWR zYg(SKpPh58*^YJh8-#m==;{%+miP+Kqintkw3Y7N@z%Vp{j>OX&9sxNG{}|vAx~sm z#TLB|fSol1`!5ly9gpu*ekNWXa7Xg9KOtDlh{wUN?a_uO?nSIspV?>D&tKmd3@2Mn zs{IyO+TK(AL;Jbum!-|k5zln%%2U_#&Ph7nj{^Z18Et$SdlWydP7t(w^Vpr16vtNO zETZ6RAcrLVq|Y;nj?oV%IF;**Z2?Hc*B-FxPyLTp_ME%)YI;-Ae!oWp{yGS?MA|zd zNo|2cQ4tSMYg9SjS$*&j+qqe5ZnVdkN}tp^^SKNToL4hbh<2Uzdi#)k+!G7#LO6T= z%CPy!x&`@Tt{-ZseK)#-e3+wK<*C@K`>ey}`S8;jZt zU`HJBS=5gv9su{kb9)3`i;FO&(6oj{;jji89C+-%4g1XM&txCga|YNLF%HkcZ*>6H zmf13~Jq6tZKyhFtazl~MpkMnQkS%P6biF^P0j~`-!bYJ_mc!{ze6wMCcx8e3q7huR z)&uc=C_}uxJvHPwMZmf9d;bV(rI?PuU=_+3M7+Nzz>NZC>F9(`5k>PEM{N69uwnZn zmNaIubmvAK!GJ*f70aw$03e*nODnRz-N2e$5r zcSnO6eW;8M6P_hl37;hTTU%AmvW+>!XL?7v%sRfzqrriNHd(Xqj>c%@2mK&(o+k;6 z)m68mOc5p4K8XgNJ@T88by_-LJ0WxQVSM)aP>(G~R__t-{CMiGR!gf~wWq{^fJ6?c ziSJ)_gX2r?%b@f#rjVWPlm$@6FHkzf89^W5Ubl%($zN8cS+GA%Z7)w;V#IufIk0ka`I4LX<)l4cK*hyqlBunbKVoOLu+L}g`qMUpI}b5(I{E#Rv=XW8m_iSWzbT;?oC0*#!3etNkN z+r=T;NsH~)T1tBR*j|hAU{~UB<1Ij|Li8&vf>4|&(EYrWfe%$#(n3s<+jd@%fmV#T zmMsSSYMc6D>H!m+_7U(_*!IoD#vTFe^Oh@`Fy-S#d=gD(`-(C1F$ z1;x-(xV=5-*svwwIU&0v^|AA&FvZnDLBtY%%~@_rr0$Obp=JZUk$vl56G)Kwqbs(j z`K-p^B;X`jArnri=WGOHt%WU{!?SuV+b>0b21|763vwZv=T3T0YxQqcobATVRI#4p z;XM5v6#5rpa}`%w7Es03>1;z0eu!0NtdeU>O!6KIAaxOP|3VSbWA3y<^QWMCn<~^g zINI{^*;gS~t=I~8;Bz7ufB?LDR;)6#RvEQc!55G$cu+}aT1d?qV)8W>+M_OIoH%n( zaW$IzRT1KWSF3-=nUmRG?JA)yz861uS=n)BeYIE1OB2*-6lQrDdTmtaE)g|XtL+FP z@hOZ=iE(HPD0exm4v}z_`TJ~^Bv*0G%9KX)(!p`yZA2?PKHa5Or=jF>zD}r6=#PVq zg1`OnLCS1vIaIqAw*Ve7QGb?QF8Q?)YprtGu=e*VzUf)bNJxW7MuRhl=#gUZUPDFT zST&1FLW@gdK|}3=Y1MhnOY_%F0>)Ya;^t(C8}g3V zni5}I(VD&@a%pl#8F!CHSzzHjPc$C<`rH#!^!AWWAgS3=4q&5TD6kb8)KK2iP*bp1 zOWYgx*bC5hcc|tzlhksr|8&aRFDNg*fZDvzSX9oHo^Hc`~|G$T+GIe4c3yBj-k}{YOLkCx9N3fPqJrR zN$2(E=Jxh1o^%tf_LR_a6wu~Xs=c=4>Zw(GjZW@rRO_y9?0I#?*wpyC&6T4fv^UhO zx3#f1l(x6#TW_7-YZ8f`A$;kc(7uYH-oeJc3Q*tZx4x&6FJE%?PvciU@qe)-DLt}Y zGIqr&bq5=`7mDnf4eW;w92O0H?H%}H)=`(-f0d9Me#Hre4>Y0PT+$9)G`{&W3BLOF z=H}|ny%`uX^#)3S!M=VYwKWhk**D9@d$x}EERvM$x}Cf)jVf%AI&6?;WAI@Z>GmY1 zFtcw-_YMAa|I0vK57!|k_1*>7-cLhAb>6`Hcjwto)B?rSWL|jp0+PC|VdVAjla1k8 zBv7gl&SIX%Sj>6f%5ysg_9qRig;7&(4cEa(jNL{J!$zNkjieS0S7$)oU{Kp5tWTko zD0ONw*ogepFwwosq!~|YYFIjKv;j3jkUcV!IhH<1I$#Y{E`z!OP|*b15h)Z|gKsnL ztO15$c=4t$!+r1qj<~I)Ml&KI(cI(W$sk*)F_W#4BK7gujrNf8@pQ%suP{nVBoKrI z8Xb*$>P+BEQQKaFC7Z$UW(eSXB3gY+vk&|PH7SXn(CI_xa#N>ljJlt+yKKL!H-8H{ zLGo?%-sirFSa#}jR9^Gr<}>NuGj(3TxyW}UH^iRTA3o#)js6E=Z`svWz=l~T!L>kfcemoS zNRZ<0?(S9`nh>m5p|}=zcZ$2a6?d0Xv@Me1d1mIF^?sN&`4MO3TxZ{Vi_D@6PfliX zFvSw>kk6@A07KVj9l=Q2Z3w$cGYv{4EF9A+&oj1valwI5TZ;MHKz40sB4Pj%95Ehz zH4UpwqmFN2h#iuoAeN3*W1rMiat5koFU(Ew{&uYI##{DwpZ_I0Yw$d)%z z^%;wp#h6gEa&G)-Wq)C*Kw{R_nLW;!h$`1BD1ULCd`9FBi0wFGDM|u;CI-g<<73vw zVt^6O13#QsvClgXzO8!VPO*ZKjw=aw&IdXI`z?$niaJ(4&#uHIthqur2)8G&^j%Y0%Yc2l!mH#N7l{<%;VPyMQs)? zh?XV^*<6OhE}X>IHwdvi2e5i&If?l?C%Z7$=1P$_JCH?0NAw};j3x(x5({b@V-o9w z^aQhNu>*f6e|ClJ&DPISK97E9-=zqiH_16r5m^hMIdY=`h+&Su%~E&X)a8a7ukua_ zEt2(HnKT_7mo+SKW}5 zl6~PN5s}(?mCJeV`t;8nr1UJL{P>g6u9J~0pn=H1_n^z~*@F?6hgXJsgH`7$?b9Zl zBOj_p-v^zBJdNtB45@Xjf5!eb9t>2R8bq9)@n$~_;=RCNMi}Ti63V{N@7jAm3Hs== zzpJu@d^P0O@!PZGx7#`3jC1{hvh`-1wQg$t)y<=YgU|K`fg6CxA#TYH@4jZ;LL4Yr zArcqmnVLAA@BH_CDO^L6lvOV7u(ykRb^hE4^WN$6xSrp+4ar;6_#TT6r&8m(J=eN> zalh->yK(DcGx|(!zSTsxb=*#Q`}FSK?(t9-<6cgj(&1OL($-H`E=qT<7N?rd29Jlf z-iJD#2X~W)ot=k~%m@AGoiP=FMGu0Y98kgx$$jU~J==y;9lF%$W{5a?@RX@AHHpC+ zBE)TU{vITUI&=}hUpEOLKg9KwN)ZesAyKibD>d^puKF*Es;lSNHCG9^asJZ;1yYL0WLT|y%Pk~DlnKkj15d{3Q_1cK zZJ*KMVG_%IIZ1~BE2(Assm*$5kEe1hxMMV6g9{J}Wj?FzvAaIqS~HXwh6*4|vC)39 z+Ins2!m!o-zyMq}cY*Yd$4I-abqqZ`8u#N|5e^~^D6B%G_~~p6HLN=bjy%|&CY#*g zbXFbXXqH5ro=a3p<8c;CS}!(@?0dr)smzWX&XX2qSp+{36w!V&2*9jZsy68lXD}4F zG5W7lWHYeAFiM8=vJ;hV_u~|<_}t{$D+YNL)CM5jZ7H;za``?!$jw$V_RkM??^G z%78R|*yuF`XTCTi1T=_|%#mL}d(glrPTEIIRx^LNnHVi$`~e?(TsgWR*8(7fpI_LejvS=2~J0!H{9GjM6pheXsU=jD~ z6xohdr4+JGcC^+*i2qHYznk*v6ww*?_&-jOLv!S02ke!DufGWVw7kuJPLo`EGEk~&E;CMR8aCfMRSyfSoi$XM5IN|Jh6^7S)mgtfMeGS4ltM0-KDc)M zz7P1-{fHds){F7beyL{~zP6g)uki4DhuTNPV~nZA$YX+S`svz8@WJS2%>Fscb52&U z^LAd9D`>Nj!X{9gB#B!xe8sWk*?Y}%ILK!s;ONGR@u zT#y>eh#`{?gk^f8$18e`ghg>4}Q8? z{`~pn@!{2KbFGT7k-7L_^pJ}xe=KBav7Kh-Ch`}`4tZN>hQ#43fr;z};Y=i)=!t-X zxj1T}bR9E~yQ!?(R%&5vR^}MSa@|<|HJ=O>v_aj{lH@wa&{~BZjG#YK)X2Euh)Kyn z`w<4RDDDVF={U3mCJ7oD^(ak5GfWJjelIMhFG~9s9^QWjG(Xj{DMCm{Uaw

pGHJtY_$OFO*JT%fcZ|N&z(gv+!>yru*qZP9v74#*0fePDW)Sm(42Jnz=d^!Ll zDb)%}+Ff2kq!$1mA}m9Ao|`O}TZGIUKV?4j77`~yhyFujLYIO!$pCYQ=OGekAH?8# zKS745URqR)kB3G*0zksHA93;qBeMVLW$$iN^rkgOskO4@Cio(URpNXSP&yfjQ zROs_4<58ohUM$my3OUan=C88PD_z~GP5JJtMeCHlB5N0=UKE+-KsszUguV0|HP*<4 zPPIsG?tZCk()yR^mp`L|m%QoKRn?#F^wzQ^aU&5H>{uVyOaSevFxSUzuVnizYq9xe zH={kDJ2JB#NkR6x>>3d6x$2V`b0f~-6*mJWAv(fY57A~p$jzELe!!p3Aw+AXw~D)u zq_+bs#qVIcS<~+cTl;Fl-n~_>+_^x~ACY48NQe#GC+lt;bcgqY&s`q&S0wb2HHtlw zszeUhbV?ElSW=EvSH@?*ZarrWgU2bl0sqpROZ4Ku66+-|@I48=E zYy+lH;z`LM2Q9cGJAhcR+?D?nBWZQ9p_sqrJr)2E_+!b7{_1-_?U^x(;m=x92*54- z3>UM#LNVA_Eu+{e`4dCue2RBdS&*}%E!o=Il6Q+dTZO>Zzn?#Jyz(bw?I>VmOFiND zquyqSE4^!|*Tp^^7oxucmdUmrmwdW!o?U|xj5c}ViQtt6BpRViM(cYjz1MgzZjrJ^ zyKhT`21iGJ{27a}FLv=6@{WhGL>TSUG5L)u2YV!y7#-;8fN(}8)E)^Qf3|i(P-r(c z-@t^1yL7bo-n-OOFq?PsV^1Yvyp&`1bOd9Fdn1o*tY>|;-VlQe4~vO;<$H#ClluOB zwi5F+g7qAp$NqctcCiO*cAgTh0ec%vx_zi9%oR$g=52!!-^PoMDohC_e($`Gn#DfT z7xZ7Y%PQdHdrXsL;p6-|)F#qMGi zb1sC5I|0wN3q{Q@5mZ|r^uAqw8hF!#VMzlG?Sl&`dP_>w6c2MCseZm69)5paPNlbI zT_Zl;_0lWB-qCv!TuzUwC>byC`d0E;6{)ddd5Ed}#L-pH#?=4s1Uz+{%XijcXzq<- z51R){`&{eXTUbWR%QOD3#|^S*3Av);41t*UOn85aymzBo6*v`0E3bLGZVWm06Kir5 zMejclkF`@HgF$%I99TkOm2yD2(^6R;)+m2bZ&K)VeQxWT$ny%Igczb_5Vq6KWa2>& zwtyDyR&Ptud-t)SKv-`aMLsBez?|qgwCu#l2fRV-#ioWzgiuM9vvbLnGY583nL$i` z^rDxG6}F2#K||_rfS^Kw(Hu$tcA=`Q{YF6$ZS@*uBAj1>UQ9Csjq;O}i zPZF;;e5|i%tneCEcydPdf+2-r5Te&7A$M97y(@_a0OHEgprkQ-mNOf$_KAJyGd1iM zc_MshryhTg|~|WKd*2Ffg=6^(Q%;DV*`7% z5aESfw3ur21tHtLR`sV8tbM7S3}$IkdhltVEFM&nz8w1;fvb?3JFESnT}D2zv+x_+ z)EtC)g26ed+uMqsHVI6pBsikjXS<(TF`f%l=rJHIq?7B}DS&)dDkxm3MKh3g5A23! zrG$}F3wjiM_8Os!l#95P{-rMi@Ae!D*iR7+q;U)>AUf}ELFlx~s=bx!vsoVrX8B0; zPmUFRSgWlwfjr-Dzs+AsKG`bOE-+8uizYNi{$1ASdoK};4*8%_`E0Ac^z$eK{Lv!( zTGc|?g9h2c^^~|kg|vOV^gxAbVgC%IBLrcyus1ausVru5^BlhSaY(nyTbXqM7g zrP8?9#J7dEF30AA7{%!)CBwYN8ose^1m$@VW$SgNy8?v;C*?X3(!o4Jn{%b*O69^z zqU->&l}2!Dqw>~-6kC)sJTq&o_DOk9OY};jb5}&=@Tu)<0`WoNkEzO3r#(oUuvCVyz>-EMcE9Uhlm0^tO7FEqi=ni5!Ak`!7} z99q(%S|63QWQ?_BowekGv^E<1_j$*7%jV@LwUjp&zV0k2KQE}-uFc7wz+UhUwzv>IQA-qE<8n4CN|1hf ztbRtA{%BtE4GqcSivGfh{`Y77TqJ`W0)u>x)qDzrLjKi4EQ74c6*@hN(ha6Er0mk7 z)v_vs%1(o-CWGq9)#?p{8Z5(FinSUJ!@2{)+jo$XPSxh;wp;bJ=2%0!fVHM%!}jc^ zJKXQ>8-`kzR6spY7uLFrD99Tw~bpPk`ZFx$;eHj#?ih?4u#Rn>=~?nfsRw z2H^E67K8?2Ch7lH2)eeSQusH5)GKVI`kg`Xa?-J<=HUMng36HGZub&+r>FBgzaB;d z|7+vHpi)_PS7}vr3RvRik-D5|S0?&jg&<7}nd)`Vo1=VLTlk2|e+xlx#;1(P2AmIb zKSitlw-D6zHBs&|_^;2^><-g^3PGit-jAOm$RIZ)|0x9Jv`{)fbv|r)0%iVF2tqC~ z4SN|xF@{n6rx27{hm!9@8{V?)%lw~0Q0U}RP8f$tJWZ^~z20sFdfyQ_jO(A>eggJx zp+!8=m@fS*%_F}RDi|(AA5O3ES_oPKu24nmzAqz+F-oy7j!+D4qfSxHc`XE$tGDfD zSR8(2%3ea}GVhtc>rkSX6{hu-(fc@{ z+uP@-ha1=wWDEQ~O3N?yXDl)cMlUU|rG>ZIhZKpSJ5;vL$(83x=VzSNh}J6{m3f04 zD`Og_PV8$2DbJj~wCjvH0er+9IYRq5$BS#0y&cW!JRd7*@5N7pGR0 z?Fp=1cHq&LvUfywDg5eM%KPBdv2e}C?fq-D{8tZZ!6-}3+F0gQfA`-C=WL*qlY6in zJG*l~f$8~ghu702m#+O_Cl719y?~QZ_Fw7msxUP>T*mph2t6hSyp3+AqKcf{MnzDJ z^?K=Q*l%Z9SIDX>z;r>4(;v4^8)u|>FRm6;**NMK-&=CHLcrV?72c7&CxPyUt;*MAp(Ot3v5|+KY1^pAY8g{!oQKX>_oJ8-fqP-C_Stu ze2@7vAiQQQ+!y?-vu!ld_T}$zY6bh?dLyY{eh+VK6l@o>(MJwqv%4}H~a zCXbi5Q!2jmJuMYKjtAeYx6h7dvIYK}ya{+Zo4sj&I$1P)?6_P>{m}WV*5~v2U0C$5 z^ZT64Ul$J(72;jnUrT;<-5cyFJwGkie-(Xc{iZ4cZ^LlwM`MrH!SKg z8W)^IK=M|wAADW7!$`ny2>rxRaRKRZyR70-g^A04KrC|*- zUrd<36IR7Z^JY*n-ZvzZU!+Qv5NpI<&nLFA+Yj`lD{GbG3lRsEMW~F8`Hd~`6LhjD z$vVhnquUmUH7TjU{$-@$HSvQ*9isT|)iYVOOGWOEG>sD%%HG?Q>U@k?q zT3i!sTw#u@`Ew8(xh_Dv(h_6-=O`mb^-iOcG0<>c)j@|_9qGjOErNcBf_Eb;T9u}{ zp}~(F!lvX!C&#US1`BYS9-zq|FuJ!JR5K9L!sZS}p96;_w;lpbepayxv+1TrDFA=O zx}b|ugXo_iVyIWn=-=8A(3N!2hK#|l9D@;%e7U8E|5v!p2Ues)i62+W{ht;Ua}Y37 zTcm|Ql3uX^cJNZWDro>d@cg`09`qmESeU5sfS8l(R1wrmEC`Se@cSE)z?;^=U^Mc) zpV(tSDmiX590&lJ-lzXSy~lTPZ|j<}1)(P%3VuIe!bt-jq$R{eAPqD}jqvS*mR zdZrdG+%0?9ZE)jPCfssjsbruiipL-EJMQF7UbasbWzYwNm)v1nPk`G^$w}8@2oY(A zF~6b#peq>~Rn~qeLR7qHKXT#S2{xg-(QR$nY$9q7v_cR95HEaej7G6M*LBrxffn;t zwRBh{x9XzJgw;njwL38v{IqG)@vh-;BUg2z=AxPDr@yX;(VQ^6@j``~uyZdfZM3e1 zN`UFbuKvS^AlS#(yZeZkm>NQ6g^@i;1+r4#vE|XrsmLeBjvFUO`bHNlHac@-cnj|n;I>u>wNJJ>iU+*Mn3vMRVvQ#*--XP+u_O- zSMTJSMJ7qx{^#E{N&LaDcjp@`Kkob#I>zsCeaJVUD77mEX+%mrwp$VTKN{4s-4T3) z#wbvKBZ2w>%mID_ZO97rj4C%t`wX`Z&eutAex0Yzldlx1qMc)1xtp>L9h6PEHGiP; zp6Xs-rf(75((JrxeZ8G$ya}olu(deoGLkH*EecD55tQ2DMys$H=|HAmc_;D22=u z0sO8)tpLy{i{Q{+H}q8V`x29paCeCmsG9%;DiNk46U>JS5oL5APYJhA3v4YiJR*dV z%6#@_v{V&va$p9Hhnrg10XT`A9MZz2N+``xgN3<432tbK+o&|ic)%+cAp9+5vRaUK z2{Wx8u^^)@ABx=@Mk_F}EiGfH@e%a3odr3xWo*TRmEslB5Z4PB^(}k6EPEWIK)^!5 zz!8`$Gf6J0KVk$)MlH~}7NG?fqx71*0Ot!!7z* zC={p{uDWEoFRRD19E5)#vnLnAa2S=`5`)Mb_Z8~6-0I)19Vx4au(1<5H_X43$`XJI zS!Ra8-nqR!Hf?5d{{S#!4fiQq{z{K(%a}&g(c+U#6m=fy$6WI1h%kb@8T#vw+p!!8 zqJ4bzNMK$qP$HKc-7R#`L$_Ar3nT$(c^|iqO1!z~M(=G%@P}v>ZtaDgLR=^m?IsXl zit6PRj@Wewc$4CZBkxSCANT&j32``#HNq4b62x(2h{_Vce&x@b>VC=W5iID_^{Udi zLQsw;nk52Y>cxEXWgjdFarx_)mKtXM(`?qp(YVBWAK8)A?u(XuLUC)dX0h?7wva;t zmtJJ+T_RYWP@LG`5aIH1aH)M9Se z4t`SfWBoLch06(&adYa?vQt)x_0MqIw}k%eZnkctsn0*tz$bR=uK_q++dgl%dFE() z>WFuQ>G&t%blj%(g6Vy2Hfr4Q)wMoJMVTFF_zk#d%~zouaDYRs9TOq|^E-8pqdhyn zJbAkuxzS1v?ib4Jhfm25IUxye)zlcCrAbHiUcGJ!b=OWHhggt<83*h;aNlHrX-+dtm*}}9M0Hfi> zsGLF8n$d@!=;B`mz@Q(RW55t>>y+6#Pe}3?^DlXTs2MqWlHZa<LzxSaZ8#cc4YjVW<(%gcUTnAR$5D= zn{emw{WE%6`fA1J!O}QZ`kRCbdMmf{R`*`Gtk*rdwfv~J6jMA+rr+B?0IX(&{+1}0 zhWGXq2E>I;u-T^5G~!&j5-sXV#NjB&SOk$AaUM}3>rN%JL{o4@DdkwH z-|Sm1+9v${U~VDb&+T7T1S&sc5HB7FI7CNxu0VN^?c~42et_V4odra#F)OQKsGPM1 z0NZfrW5LKtTXw{Lada)|DpQT-rA})@~;7S8q8ukX$b;k zm22ru-6&?i>|6FDfBX|n2T`{#Wwf!uGk+NDp~XJ>)|`DfKNU+aL#%1F{H>d|AWz(4 z=m8Lj++2&Ok*kB1G;j!Z&-?z^8l$Q_Yc2$~V@fx7u0{#lw1s3g4Fz;k*jt5;`Y;cB zAISi8^s|P>BPxc>P3D@bD~JGzU4Q1IQtTZAR#GE(y6+wfy~f)q$DMAO(tMA@?be#4 zj>9*9v^Gk10de{Q&3kaPEMP;{b7;YA8SMbfABZv?IpbwMOSxYK%Iez&AUh~C#h%LJ zs9Ly3Jr(_XIYZsVV069Xg!BFcMx=7(Q62 zGdK!67=Rf4RCvfVLefszM)E(yZNzAkmU}TtYQmk<+X2{rzW^16pS0;)lcHv#sf?VuE zMeah0+HB~j*`I;$*q+JMauI2{L4%~^^jLGz?m+n<^a?Q0dSlKmcBukqUNs2agnsU+ z&qW$*DH2F2`&x4n1u4udCJ>QPU68(Wp2r7J!h)Fba~H6UCx?y3`EM3W-4W^Hm+f9ARXY9~h_7fyK>6~w zszu*t1a9s%FkmGMizKd!^j*+=cQ&4!GVnQUL3D3ga}OcMnS`4gB%zF-5&JqE%|R22 zobQ&YdDqF{%C-ZdzC5BobDuXNlIIi1`Ff2>6y03pYL}a1mzSy*$vRic+!rg{*Zm29 zDrB$98skM&p%Y!L&9Z-34JCH)Al%Od1YLp@{Zs#Iw#Tv;YLT`%QXAEfh*J_sb29=dkix zbji*=kjoMO`xCtP{NXReM7e}-qJS)M%g~%{mJJWbxpl=-Wr9WZ zo5$=dzxt?r=WySp3Yxtn?|ik3EmgU^?t@5@F)L9Qceu85k zDR(Yd8*{u|?j3hd2Hl)Hf7;;qywaJ2m$Gr4@Vr|haqX;qln{p}JGo@-+(=b(o``wI zWpMKDvo_=Ow%-LI?$#9#;Fhg=nX8+LkczB7Xh*u2y7Ktql;&Ep;8t{RI~8jyAZQnh z^44#1@%04yESOZa=KeV46y^K(4_{~B?Cmr6-*J3@F#5coWpa3JeE-$_s?rI%a09Aee8ptF2b%4iwYgSx*(} z&lgKm33IMn*+a*WSS7-+DKeno*#bJh>RagE&Rhm9OFX9Vr}D6HRm*?ikPzviSW5A5 zdX{Ue{v@^k(mc+}d3^cC)DFi8X0ZgXDU;kgg?N%My{5d!XoAw%* zJ>M{?tVm9+4RTlxRju3X^mh^^a*&DCd!Db@t}dyN_&sFi7cku`XBU3DI$6}5=*Z!C zIK0%plp*)_x7@Bc_@(Ppx?G{o@SaUtv2=_vtN}`^QpRt62sV;m|4Yql%K+Adx5HY$D5cgSc)M#x-|ToU9O$Q4{`Hg?6#=gy8l-LEdoV~&r@h-ft;fxN;D zt``RKj7TUV{8PJTXkXv0V+5+yeUnFqtn}97aUk9dC04V+J!k(SdX?pATba#=$bA~4 zkz@LvZ#Kp8F5X-XCw>79u}$aQZUoaK*kg_=h#FMQ>sYPx)V2|H zOK0w2_{fX=Vc1DMcwg`%)y$UpBF(6g#9cOk#6~QnHA7N2ib?8jN70K6R6ebqDpY}i zcbdw=L3YWk0%5(wtoxW6$kbWu_^85Vke0j;ZMWPa;#gOjKl%6~Lnp(~u0UFm_-Z;c z80GZ2W}st{kKy2|m_pqzM+9H_q&_SDUUSnFpdLzP|KmkKD^LW%0A_GYZkFs9&I8g? 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 z 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 z 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%0DZC^JLH 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 literal 0 HcmV?d00001 From aac365d27d045ed992eb1886e754ad19f63c8929 Mon Sep 17 00:00:00 2001 From: Artur Paikin Date: Mon, 10 Dec 2018 18:30:47 +0300 Subject: [PATCH 39/41] link to tus-js-client readme --- website/src/_posts/2018-12-0.29.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/src/_posts/2018-12-0.29.md b/website/src/_posts/2018-12-0.29.md index f1f5ccd3e..659a76428 100644 --- a/website/src/_posts/2018-12-0.29.md +++ b/website/src/_posts/2018-12-0.29.md @@ -8,7 +8,7 @@ published: false -`0.29` brings bug fixes and improvements, while we are busy working on Uppy React Native support (which is already [coming to our resumable file upload protocol tus.io](https://github.com/tus/tus-js-client/pull/132)) and a Transloadit Preset. Importantant highlights of this release are: separate Core and plugin styles, using file sizes for progress calculation, `responseType` option for XHR Upload and some visual Webcam bug fixes. +`0.29` brings bug fixes and improvements, while we are busy working on Uppy React Native support (which is already [coming to our resumable file upload protocol tus.io](https://github.com/tus/tus-js-client#react-native-support)) and a Transloadit Preset. Importantant highlights of this release are: separate Core and plugin styles, using file sizes for progress calculation, `responseType` option for XHR Upload and some visual Webcam bug fixes. From 326675cabed1e933f692e54fa6b1c9f3ca94c759 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9e=20Kooi?= Date: Mon, 10 Dec 2018 16:31:14 +0100 Subject: [PATCH 40/41] website: blog tweaks! --- website/src/_posts/2018-12-0.29.md | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/website/src/_posts/2018-12-0.29.md b/website/src/_posts/2018-12-0.29.md index 659a76428..6ae7bcee2 100644 --- a/website/src/_posts/2018-12-0.29.md +++ b/website/src/_posts/2018-12-0.29.md @@ -8,7 +8,7 @@ published: false -`0.29` brings bug fixes and improvements, while we are busy working on Uppy React Native support (which is already [coming to our resumable file upload protocol tus.io](https://github.com/tus/tus-js-client#react-native-support)) and a Transloadit Preset. Importantant highlights of this release are: separate Core and plugin styles, using file sizes for progress calculation, `responseType` option for XHR Upload and some visual Webcam bug fixes. +`0.29` brings bug fixes and improvements, while we are busy working on Uppy React Native support (which is already [coming to our resumable file upload protocol tus.io](https://github.com/tus/tus-js-client#react-native-support)) and a Transloadit Preset. The highlights of this release are: separating Core and plugin styles, using file sizes for progress calculation, adding a `responseType` option for XHR Upload and fixing some visual Webcam bugs. @@ -16,7 +16,7 @@ published: false **⚠️ breaking** -When installing `uppy` and plugins from npm, you had to include their styles. Prior to this release, you could only include the plugin’s style, say, for `@uppy/webcam` you’d include its CSS: +When installing `uppy` and plugins from npm, you had to include their styles. Prior to this release, you could include only the plugin’s CSS, say, for `@uppy/webcam`: ```js import Uppy from '@uppy/core' @@ -24,6 +24,8 @@ import Webcam from '@uppy/webcam' import '@uppy/webcam/dist/style.css' ``` +Each plugin's file contained the core styles. If you added multiple plugins, the core styles ended up being duplicated. This bloated file sizes and could even break styles entirely because of CSS's precedence rules. + Now you have to include “general” styles from `@uppy/core` as well: ```js @@ -33,7 +35,9 @@ import '@uppy/core/dist/style.css' import '@uppy/webcam/dist/style.css' ``` -Please [see documentation for the plugin](https://uppy.io/docs/plugins/) you are using to find out whether it requires a CSS file to work. Generaly UI plugins, such as Dashboard, Webcam and Status Bar need a CSS file, while utility plugins, such as Tus or XHR Upload, don’t. +Thus the core styles are only included once. `@uppy/core` styles must be included before plugin styles. + +Please [see documentation for the plugin](https://uppy.io/docs/plugins/) you are using to find out whether it requires a CSS file to work. Generally UI plugins, such as Dashboard, Webcam and Status Bar need a CSS file, while utility plugins, such as Tus or XHR Upload, don’t. ⚠️ Important things to remember: @@ -48,7 +52,7 @@ import Webcam from '@uppy/webcam' import Url from '@uppy/url' // Core and Dashboard styles, then Webcam and Url, but not for GoogleDrive — -// those come with Dashboard +// those come with Dashboard import '@uppy/core/dist/style.css' import '@uppy/dashboard/dist/style.css' import '@uppy/webcam/dist/style.css' @@ -57,7 +61,7 @@ import '@uppy/url/dist/style.css' ## Using File Sizes For Progress Calculation -When possible, file sizes are now used for calculating the total progress. Before, we’ve used uploaded percentage for each file. That meant, if you were uploading 4 files, and 3 small were already uploaded, while one very large was still in progress, Uppy would display progress as 90%. Long story short, Uppy now has a more accurate progress bar 🚀 +When possible, file sizes are now used for calculating the total progress. Before, we’ve used uploaded percentage for each file. That meant, if you were uploading 4 files, and 3 small were already uploaded, while one very large file was still in progress, Uppy may display progress as 90%. Long story short, Uppy now has a more accurate progress bar 🚀 Some internal details, if you are interested: @@ -68,7 +72,7 @@ Some internal details, if you are interested: ## responseType For XHR Upload -When using XHR Upload (or S3, that uses it internally), you can now configure the XMLHttpRequest `.responseType` value. Allows the S3 plugin to tell Firefox not to log XML errors when getting empty responses, so it finally fixes bugs that were caused by this, see #518. +When using XHR Upload, you can now configure the XMLHttpRequest `.responseType` value. This allows the S3 plugin to tell Firefox not to log XML errors when getting empty responses, so it finally fixes the spurious warnings that were caused by this, see #518. Because AwsS3 now sets responseType: 'text', we can no longer use the responseXML property. We already did text based parsing for successful responses, and now do the same for error responses. From facb354d77b5aeb59d5908c9ee7ebc088ddf63a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9e=20Kooi?= Date: Mon, 10 Dec 2018 16:33:50 +0100 Subject: [PATCH 41/41] Linkify the issue number --- website/src/_posts/2018-12-0.29.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/src/_posts/2018-12-0.29.md b/website/src/_posts/2018-12-0.29.md index 6ae7bcee2..dbbb0a5fe 100644 --- a/website/src/_posts/2018-12-0.29.md +++ b/website/src/_posts/2018-12-0.29.md @@ -72,7 +72,7 @@ Some internal details, if you are interested: ## responseType For XHR Upload -When using XHR Upload, you can now configure the XMLHttpRequest `.responseType` value. This allows the S3 plugin to tell Firefox not to log XML errors when getting empty responses, so it finally fixes the spurious warnings that were caused by this, see #518. +When using XHR Upload, you can now configure the XMLHttpRequest `.responseType` value. This allows the S3 plugin to tell Firefox not to log XML errors when getting empty responses, so it finally fixes the spurious warnings that were caused by this, see [#518](https://github.com/transloadit/uppy/issues/518). Because AwsS3 now sets responseType: 'text', we can no longer use the responseXML property. We already did text based parsing for successful responses, and now do the same for error responses.