@stemy/backend 6.0.3 → 6.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/commands/clear.command.d.ts +6 -0
  2. package/commands/fixtures.command.d.ts +9 -0
  3. package/commands/move-assets.command.d.ts +10 -0
  4. package/common-types.d.ts +22 -12
  5. package/esm2022/commands/clear.command.mjs +15 -0
  6. package/esm2022/commands/fixtures.command.mjs +26 -0
  7. package/esm2022/commands/index.mjs +6 -4
  8. package/esm2022/commands/move-assets.command.mjs +45 -0
  9. package/esm2022/common-types.mjs +3 -3
  10. package/esm2022/public_api.mjs +18 -6
  11. package/esm2022/services/assets.mjs +46 -13
  12. package/esm2022/services/backend-provider.mjs +7 -1
  13. package/esm2022/services/cli-terminal.mjs +56 -0
  14. package/esm2022/services/configuration.mjs +11 -4
  15. package/esm2022/services/drivers/asset-fallback-driver.mjs +35 -0
  16. package/esm2022/services/drivers/asset-grid.driver.mjs +5 -7
  17. package/esm2022/services/drivers/asset-local.driver.mjs +19 -18
  18. package/esm2022/services/drivers/asset-storage-proxy.driver.mjs +48 -0
  19. package/esm2022/services/drivers/fallback-readable.mjs +34 -0
  20. package/esm2022/services/drivers/fallback-streams.mjs +34 -0
  21. package/esm2022/services/entities/asset.mjs +50 -15
  22. package/esm2022/services/entities/temp-asset.mjs +15 -3
  23. package/esm2022/services/terminal-manager.mjs +30 -16
  24. package/esm2022/socket-controllers/socket-terminal.mjs +89 -0
  25. package/esm2022/socket-controllers/terminal.controller.mjs +3 -3
  26. package/fesm2022/stemy-backend.mjs +423 -140
  27. package/fesm2022/stemy-backend.mjs.map +1 -1
  28. package/package.json +3 -2
  29. package/public_api.d.ts +2 -1
  30. package/services/assets.d.ts +13 -5
  31. package/services/cli-terminal.d.ts +18 -0
  32. package/services/configuration.d.ts +2 -0
  33. package/services/drivers/asset-fallback-driver.d.ts +11 -0
  34. package/services/drivers/asset-grid.driver.d.ts +4 -5
  35. package/services/drivers/asset-local.driver.d.ts +6 -6
  36. package/services/drivers/asset-storage-proxy.driver.d.ts +14 -0
  37. package/services/drivers/fallback-readable.d.ts +2 -0
  38. package/services/drivers/fallback-streams.d.ts +2 -0
  39. package/services/entities/asset.d.ts +8 -3
  40. package/services/entities/temp-asset.d.ts +6 -1
  41. package/services/terminal-manager.d.ts +3 -0
  42. package/socket-controllers/socket-terminal.d.ts +19 -0
  43. package/socket-controllers/terminal.controller.d.ts +2 -2
@@ -0,0 +1,6 @@
1
+ import { ITerminal, ITerminalCommand } from "../common-types";
2
+ import { ICommandArgs } from "@stemy/terminal-commands-addon";
3
+ export declare class ClearCommand implements ITerminalCommand {
4
+ readonly name = "clear";
5
+ execute(args: ICommandArgs, terminal: ITerminal): Promise<any>;
6
+ }
@@ -0,0 +1,9 @@
1
+ import { ICommandArgs } from "@stemy/terminal-commands-addon";
2
+ import { ITerminal, ITerminalCommand } from "../common-types";
3
+ import { Fixtures } from "../services/fixtures";
4
+ export declare class FixturesCommand implements ITerminalCommand {
5
+ protected fixtures: Fixtures;
6
+ readonly name = "fixtures";
7
+ constructor(fixtures: Fixtures);
8
+ execute(args: ICommandArgs, terminal: ITerminal): Promise<any>;
9
+ }
@@ -0,0 +1,10 @@
1
+ import { ICommandArgs, IProgressBar, ISuggestion } from "@stemy/terminal-commands-addon";
2
+ import { ITerminal, ITerminalCommand } from "../common-types";
3
+ import { Assets } from "../services/assets";
4
+ export declare class MoveAssetsCommand implements ITerminalCommand {
5
+ protected assets: Assets;
6
+ readonly name = "move-assets";
7
+ constructor(assets: Assets);
8
+ execute(args: ICommandArgs, terminal: ITerminal, progress: IProgressBar): Promise<any>;
9
+ suggest?(args: ICommandArgs): Promise<Array<string | ISuggestion>>;
10
+ }
package/common-types.d.ts CHANGED
@@ -8,7 +8,7 @@ import { SchemaObject } from "openapi3-ts";
8
8
  import { Readable, Writable } from "stream";
9
9
  import { Moment } from "moment";
10
10
  import { AnyExpression, Expression } from "mongoose";
11
- import { ICommandArgs, ISuggestion, ITerminal as ITerminalBase } from "@stemy/terminal-commands-addon";
11
+ import { ICommandArgs, IProgressBar, ISuggestion, ITerminal as ITerminalBase } from "@stemy/terminal-commands-addon";
12
12
  import { ObjectId } from "bson";
13
13
  export declare const Type: FunctionConstructor;
14
14
  export interface Type<T = object> extends Function {
@@ -75,8 +75,8 @@ export declare const SOCKET_CONTROLLERS: InjectionToken<SocketControllers>;
75
75
  export declare const PARAMETER: InjectionToken<Parameter>;
76
76
  export declare const DI_CONTAINER: InjectionToken<IDependencyContainer>;
77
77
  export declare const OPENAPI_VALIDATION: InjectionToken<OpenApiValidation>;
78
- export declare const LOCAL_DIR: InjectionToken<string>;
79
- export declare const ASSET_DRIVER: InjectionToken<IAssetDriver>;
78
+ export declare const ASSET_LOCAL_DIR: InjectionToken<string>;
79
+ export declare const ASSET_DRIVER_FACTORIES: InjectionToken<AssetDriverFactoryMap>;
80
80
  export interface IMatchField {
81
81
  field: string;
82
82
  filter: any;
@@ -134,12 +134,12 @@ export interface ITerminalFile extends ISuggestion {
134
134
  accept?: string;
135
135
  }
136
136
  export interface ITerminal extends ITerminalBase {
137
- suggestFiles(accept: string): Promise<ITerminalFile[]>;
138
- downloadFile(filename: string, buffer: Buffer): Promise<void>;
137
+ suggestFiles?(accept: string): Promise<ITerminalFile[]>;
138
+ downloadFile?(filename: string, buffer: Buffer): Promise<void>;
139
139
  }
140
140
  export interface ITerminalCommand {
141
141
  name?: string;
142
- execute(args: ICommandArgs, terminal: ITerminal): Promise<any>;
142
+ execute(args: ICommandArgs, terminal: ITerminal, progress: IProgressBar): Promise<any>;
143
143
  suggest?(args: ICommandArgs, terminal: ITerminal): Promise<Array<string | ISuggestion>>;
144
144
  }
145
145
  export interface IProgress {
@@ -201,12 +201,15 @@ export interface IAssetImageParams {
201
201
  export interface IAsset {
202
202
  readonly id: string;
203
203
  readonly filename: string;
204
+ readonly streamId: ObjectId;
205
+ readonly driverId: string;
204
206
  readonly contentType: string;
205
207
  readonly metadata: IAssetMeta;
206
208
  readonly stream: Readable;
207
209
  unlink(): Promise<string>;
208
210
  setMeta(meta: Partial<IAssetMeta>): Promise<any>;
209
211
  getBuffer(): Promise<Buffer>;
212
+ move(driverId: string): Promise<IAsset>;
210
213
  download(metadata?: IAssetMeta): Promise<Readable>;
211
214
  downloadImage(params?: IAssetImageParams, metadata?: IAssetMeta): Promise<Readable>;
212
215
  getImage(params?: IAssetImageParams): Promise<Readable>;
@@ -221,13 +224,17 @@ export interface IAssetUploadStream extends Writable {
221
224
  export interface IAssetUploadOpts {
222
225
  chunkSizeBytes?: number;
223
226
  metadata?: IAssetMeta;
224
- contentType?: string;
227
+ contentType: string;
228
+ extension: string;
225
229
  }
226
230
  export interface IAssetDriver {
227
- readonly metaCollection: string;
228
- openUploadStream(filename: string, opts?: IAssetUploadOpts): IAssetUploadStream;
229
- openDownloadStream(id: ObjectId): Readable;
230
- delete(id: ObjectId): Promise<void>;
231
+ openUploadStream(filename: string, opts: IAssetUploadOpts): IAssetUploadStream;
232
+ openDownloadStream(asset: IAsset): Readable;
233
+ delete(asset: IAsset): Promise<void>;
234
+ }
235
+ export interface IAssetDrivers {
236
+ readonly missingDriver: string;
237
+ getDriver(id: string): IAssetDriver;
231
238
  }
232
239
  export interface ILazyAsset {
233
240
  id: string;
@@ -246,6 +253,9 @@ export interface ILazyAsset {
246
253
  load(): Promise<this>;
247
254
  toJSON(): any;
248
255
  }
256
+ export interface AssetDriverFactoryMap {
257
+ [name: string]: (di: IDependencyContainer) => IAssetDriver;
258
+ }
249
259
  export interface IUser {
250
260
  _id?: string;
251
261
  id?: string;
@@ -321,5 +331,5 @@ export interface IBackendConfig {
321
331
  socketOptions?: SocketOptions;
322
332
  customValidation?: SchemaConverter | SchemaObject;
323
333
  assetLocalDir?: string;
324
- assetDriver?: Type<IAssetDriver>;
334
+ assetDrivers?: AssetDriverFactoryMap;
325
335
  }
@@ -0,0 +1,15 @@
1
+ import { __decorate } from "tslib";
2
+ import { injectable, Lifecycle, scoped } from "tsyringe";
3
+ import { AnsiCodes } from "@stemy/terminal-commands-addon";
4
+ let ClearCommand = class ClearCommand {
5
+ name = "clear";
6
+ async execute(args, terminal) {
7
+ terminal.write(AnsiCodes.clear);
8
+ }
9
+ };
10
+ ClearCommand = __decorate([
11
+ injectable(),
12
+ scoped(Lifecycle.ContainerScoped)
13
+ ], ClearCommand);
14
+ export { ClearCommand };
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xlYXIuY29tbWFuZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9jbGVhci5jb21tYW5kLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFFdkQsT0FBTyxFQUFDLFNBQVMsRUFBZSxNQUFNLGdDQUFnQyxDQUFDO0FBSWhFLElBQU0sWUFBWSxHQUFsQixNQUFNLFlBQVk7SUFFWixJQUFJLEdBQUcsT0FBTyxDQUFDO0lBRXhCLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBa0IsRUFBRSxRQUFtQjtRQUNqRCxRQUFRLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwQyxDQUFDO0NBQ0osQ0FBQTtBQVBZLFlBQVk7SUFGeEIsVUFBVSxFQUFFO0lBQ1osTUFBTSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUM7R0FDckIsWUFBWSxDQU94QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7aW5qZWN0YWJsZSwgTGlmZWN5Y2xlLCBzY29wZWR9IGZyb20gXCJ0c3lyaW5nZVwiO1xyXG5pbXBvcnQge0lUZXJtaW5hbCwgSVRlcm1pbmFsQ29tbWFuZH0gZnJvbSBcIi4uL2NvbW1vbi10eXBlc1wiO1xyXG5pbXBvcnQge0Fuc2lDb2RlcywgSUNvbW1hbmRBcmdzfSBmcm9tIFwiQHN0ZW15L3Rlcm1pbmFsLWNvbW1hbmRzLWFkZG9uXCI7XHJcblxyXG5AaW5qZWN0YWJsZSgpXHJcbkBzY29wZWQoTGlmZWN5Y2xlLkNvbnRhaW5lclNjb3BlZClcclxuZXhwb3J0IGNsYXNzIENsZWFyQ29tbWFuZCBpbXBsZW1lbnRzIElUZXJtaW5hbENvbW1hbmQge1xyXG5cclxuICAgIHJlYWRvbmx5IG5hbWUgPSBcImNsZWFyXCI7XHJcblxyXG4gICAgYXN5bmMgZXhlY3V0ZShhcmdzOiBJQ29tbWFuZEFyZ3MsIHRlcm1pbmFsOiBJVGVybWluYWwpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHRlcm1pbmFsLndyaXRlKEFuc2lDb2Rlcy5jbGVhcik7XHJcbiAgICB9XHJcbn1cclxuIl19
@@ -0,0 +1,26 @@
1
+ import { __decorate, __metadata } from "tslib";
2
+ import { injectable, Lifecycle, scoped } from "tsyringe";
3
+ import { Fixtures } from "../services/fixtures";
4
+ import { colorize, ConsoleColor } from "../utils";
5
+ let FixturesCommand = class FixturesCommand {
6
+ fixtures;
7
+ name = "fixtures";
8
+ constructor(fixtures) {
9
+ this.fixtures = fixtures;
10
+ }
11
+ async execute(args, terminal) {
12
+ const output = {
13
+ write: text => terminal.writeln(text),
14
+ writeln: text => terminal.writeln(text)
15
+ };
16
+ await this.fixtures.load(output);
17
+ terminal.writeln(colorize(`Fixtures loaded`, ConsoleColor.FgGreen));
18
+ }
19
+ };
20
+ FixturesCommand = __decorate([
21
+ injectable(),
22
+ scoped(Lifecycle.ContainerScoped),
23
+ __metadata("design:paramtypes", [Fixtures])
24
+ ], FixturesCommand);
25
+ export { FixturesCommand };
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4dHVyZXMuY29tbWFuZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9maXh0dXJlcy5jb21tYW5kLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFJdkQsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQzlDLE9BQU8sRUFBQyxRQUFRLEVBQUUsWUFBWSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBSXpDLElBQU0sZUFBZSxHQUFyQixNQUFNLGVBQWU7SUFJRjtJQUZiLElBQUksR0FBRyxVQUFVLENBQUM7SUFFM0IsWUFBc0IsUUFBa0I7UUFBbEIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtJQUN4QyxDQUFDO0lBRUQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFrQixFQUFFLFFBQW1CO1FBQ2pELE1BQU0sTUFBTSxHQUFtQjtZQUMzQixLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztZQUNyQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztTQUMxQyxDQUFDO1FBQ0YsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNqQyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUN4RSxDQUFDO0NBQ0osQ0FBQTtBQWZZLGVBQWU7SUFGM0IsVUFBVSxFQUFFO0lBQ1osTUFBTSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUM7cUNBS0UsUUFBUTtHQUovQixlQUFlLENBZTNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtpbmplY3RhYmxlLCBMaWZlY3ljbGUsIHNjb3BlZH0gZnJvbSBcInRzeXJpbmdlXCI7XHJcbmltcG9ydCB7SUNvbW1hbmRBcmdzfSBmcm9tIFwiQHN0ZW15L3Rlcm1pbmFsLWNvbW1hbmRzLWFkZG9uXCI7XHJcblxyXG5pbXBvcnQge0lGaXh0dXJlT3V0cHV0LCBJVGVybWluYWwsIElUZXJtaW5hbENvbW1hbmR9IGZyb20gXCIuLi9jb21tb24tdHlwZXNcIjtcclxuaW1wb3J0IHtGaXh0dXJlc30gZnJvbSBcIi4uL3NlcnZpY2VzL2ZpeHR1cmVzXCI7XHJcbmltcG9ydCB7Y29sb3JpemUsIENvbnNvbGVDb2xvcn0gZnJvbSBcIi4uL3V0aWxzXCI7XHJcblxyXG5AaW5qZWN0YWJsZSgpXHJcbkBzY29wZWQoTGlmZWN5Y2xlLkNvbnRhaW5lclNjb3BlZClcclxuZXhwb3J0IGNsYXNzIEZpeHR1cmVzQ29tbWFuZCBpbXBsZW1lbnRzIElUZXJtaW5hbENvbW1hbmQge1xyXG5cclxuICAgIHJlYWRvbmx5IG5hbWUgPSBcImZpeHR1cmVzXCI7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvdGVjdGVkIGZpeHR1cmVzOiBGaXh0dXJlcykge1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGV4ZWN1dGUoYXJnczogSUNvbW1hbmRBcmdzLCB0ZXJtaW5hbDogSVRlcm1pbmFsKTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICBjb25zdCBvdXRwdXQ6IElGaXh0dXJlT3V0cHV0ID0ge1xyXG4gICAgICAgICAgICB3cml0ZTogdGV4dCA9PiB0ZXJtaW5hbC53cml0ZWxuKHRleHQpLFxyXG4gICAgICAgICAgICB3cml0ZWxuOiB0ZXh0ID0+IHRlcm1pbmFsLndyaXRlbG4odGV4dClcclxuICAgICAgICB9O1xyXG4gICAgICAgIGF3YWl0IHRoaXMuZml4dHVyZXMubG9hZChvdXRwdXQpO1xyXG4gICAgICAgIHRlcm1pbmFsLndyaXRlbG4oY29sb3JpemUoYEZpeHR1cmVzIGxvYWRlZGAsIENvbnNvbGVDb2xvci5GZ0dyZWVuKSk7XHJcbiAgICB9XHJcbn1cclxuIl19
@@ -1,7 +1,9 @@
1
- import { ClearCommand } from "./clear-command";
2
- import { FixturesCommand } from "./fixtures-command";
1
+ import { ClearCommand } from "./clear.command";
2
+ import { FixturesCommand } from "./fixtures.command";
3
+ import { MoveAssetsCommand } from "./move-assets.command";
3
4
  export const commands = [
4
5
  ClearCommand,
5
- FixturesCommand
6
+ FixturesCommand,
7
+ MoveAssetsCommand
6
8
  ];
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tbWFuZHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBRTdDLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUVuRCxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQTZCO0lBQzlDLFlBQVk7SUFDWixlQUFlO0NBQ2xCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NsZWFyQ29tbWFuZH0gZnJvbSBcIi4vY2xlYXItY29tbWFuZFwiO1xyXG5pbXBvcnQge0lUZXJtaW5hbENvbW1hbmQsIFR5cGV9IGZyb20gXCIuLi9jb21tb24tdHlwZXNcIjtcclxuaW1wb3J0IHtGaXh0dXJlc0NvbW1hbmR9IGZyb20gXCIuL2ZpeHR1cmVzLWNvbW1hbmRcIjtcclxuXHJcbmV4cG9ydCBjb25zdCBjb21tYW5kczogVHlwZTxJVGVybWluYWxDb21tYW5kPltdID0gW1xyXG4gICAgQ2xlYXJDb21tYW5kLFxyXG4gICAgRml4dHVyZXNDb21tYW5kXHJcbl07XHJcbiJdfQ==
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tbWFuZHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBRTdDLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUNuRCxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUV4RCxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQTZCO0lBQzlDLFlBQVk7SUFDWixlQUFlO0lBQ2YsaUJBQWlCO0NBQ3BCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NsZWFyQ29tbWFuZH0gZnJvbSBcIi4vY2xlYXIuY29tbWFuZFwiO1xyXG5pbXBvcnQge0lUZXJtaW5hbENvbW1hbmQsIFR5cGV9IGZyb20gXCIuLi9jb21tb24tdHlwZXNcIjtcclxuaW1wb3J0IHtGaXh0dXJlc0NvbW1hbmR9IGZyb20gXCIuL2ZpeHR1cmVzLmNvbW1hbmRcIjtcclxuaW1wb3J0IHtNb3ZlQXNzZXRzQ29tbWFuZH0gZnJvbSBcIi4vbW92ZS1hc3NldHMuY29tbWFuZFwiO1xyXG5cclxuZXhwb3J0IGNvbnN0IGNvbW1hbmRzOiBUeXBlPElUZXJtaW5hbENvbW1hbmQ+W10gPSBbXHJcbiAgICBDbGVhckNvbW1hbmQsXHJcbiAgICBGaXh0dXJlc0NvbW1hbmQsXHJcbiAgICBNb3ZlQXNzZXRzQ29tbWFuZFxyXG5dO1xyXG4iXX0=
@@ -0,0 +1,45 @@
1
+ import { __decorate, __metadata } from "tslib";
2
+ import { injectable, Lifecycle, scoped } from "tsyringe";
3
+ import { Assets } from "../services/assets";
4
+ import { colorize, ConsoleColor, promiseTimeout, regexEscape } from "../utils";
5
+ let MoveAssetsCommand = class MoveAssetsCommand {
6
+ assets;
7
+ name = "move-assets";
8
+ constructor(assets) {
9
+ this.assets = assets;
10
+ }
11
+ async execute(args, terminal, progress) {
12
+ await promiseTimeout(1000);
13
+ const from = `${args.at(1).id}`;
14
+ const to = `${args.at(2).id}`;
15
+ const assets = await this.assets.findMany(from === this.assets.missingDriver ? {
16
+ $or: [
17
+ { driverId: from },
18
+ { driverId: { "$exists": false } }
19
+ ]
20
+ } : { driverId: from });
21
+ progress.setMax(assets.length);
22
+ for (const asset of assets) {
23
+ await asset.move(to);
24
+ progress.advance();
25
+ }
26
+ terminal.writeln(colorize(`Assets successfully moved to: ${to}`, ConsoleColor.FgGreen));
27
+ }
28
+ async suggest(args) {
29
+ if (args.length > 3) {
30
+ return null;
31
+ }
32
+ // Replace regex special characters
33
+ const prev = args.length === 3 ? args.at(1) : null;
34
+ const id = regexEscape(args.search);
35
+ const regex = new RegExp(id, "g");
36
+ return this.assets.drivers.filter(d => d.match(regex) && (!prev || d !== prev.id));
37
+ }
38
+ };
39
+ MoveAssetsCommand = __decorate([
40
+ injectable(),
41
+ scoped(Lifecycle.ContainerScoped),
42
+ __metadata("design:paramtypes", [Assets])
43
+ ], MoveAssetsCommand);
44
+ export { MoveAssetsCommand };
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW92ZS1hc3NldHMuY29tbWFuZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9tb3ZlLWFzc2V0cy5jb21tYW5kLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFJdkQsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBQzFDLE9BQU8sRUFBQyxRQUFRLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFJdEUsSUFBTSxpQkFBaUIsR0FBdkIsTUFBTSxpQkFBaUI7SUFJSjtJQUZiLElBQUksR0FBRyxhQUFhLENBQUM7SUFFOUIsWUFBc0IsTUFBYztRQUFkLFdBQU0sR0FBTixNQUFNLENBQVE7SUFDcEMsQ0FBQztJQUVELEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBa0IsRUFBRSxRQUFtQixFQUFFLFFBQXNCO1FBQ3pFLE1BQU0sY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNCLE1BQU0sSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNoQyxNQUFNLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDOUIsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO1lBQzNFLEdBQUcsRUFBRTtnQkFDRCxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBQ2xCLEVBQUUsUUFBUSxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxFQUFFO2FBQ3JDO1NBQ0osQ0FBQyxDQUFDLENBQUMsRUFBQyxRQUFRLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztRQUN0QixRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUU5QixLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ3pCLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNyQixRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDdkIsQ0FBQztRQUVELFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLGlDQUFpQyxFQUFFLEVBQUUsRUFBRSxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUM1RixDQUFDO0lBRUQsS0FBSyxDQUFDLE9BQU8sQ0FBRSxJQUFrQjtRQUM3QixJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDbEIsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQztRQUNELG1DQUFtQztRQUNuQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ25ELE1BQU0sRUFBRSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDcEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2xDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN2RixDQUFDO0NBQ0osQ0FBQTtBQXJDWSxpQkFBaUI7SUFGN0IsVUFBVSxFQUFFO0lBQ1osTUFBTSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUM7cUNBS0EsTUFBTTtHQUozQixpQkFBaUIsQ0FxQzdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtpbmplY3RhYmxlLCBMaWZlY3ljbGUsIHNjb3BlZH0gZnJvbSBcInRzeXJpbmdlXCI7XHJcbmltcG9ydCB7SUNvbW1hbmRBcmdzLCBJUHJvZ3Jlc3NCYXIsIElTdWdnZXN0aW9ufSBmcm9tIFwiQHN0ZW15L3Rlcm1pbmFsLWNvbW1hbmRzLWFkZG9uXCI7XHJcblxyXG5pbXBvcnQge0lUZXJtaW5hbCwgSVRlcm1pbmFsQ29tbWFuZH0gZnJvbSBcIi4uL2NvbW1vbi10eXBlc1wiO1xyXG5pbXBvcnQge0Fzc2V0c30gZnJvbSBcIi4uL3NlcnZpY2VzL2Fzc2V0c1wiO1xyXG5pbXBvcnQge2NvbG9yaXplLCBDb25zb2xlQ29sb3IsIHByb21pc2VUaW1lb3V0LCByZWdleEVzY2FwZX0gZnJvbSBcIi4uL3V0aWxzXCI7XHJcblxyXG5AaW5qZWN0YWJsZSgpXHJcbkBzY29wZWQoTGlmZWN5Y2xlLkNvbnRhaW5lclNjb3BlZClcclxuZXhwb3J0IGNsYXNzIE1vdmVBc3NldHNDb21tYW5kIGltcGxlbWVudHMgSVRlcm1pbmFsQ29tbWFuZCB7XHJcblxyXG4gICAgcmVhZG9ubHkgbmFtZSA9IFwibW92ZS1hc3NldHNcIjtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgYXNzZXRzOiBBc3NldHMpIHtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBleGVjdXRlKGFyZ3M6IElDb21tYW5kQXJncywgdGVybWluYWw6IElUZXJtaW5hbCwgcHJvZ3Jlc3M6IElQcm9ncmVzc0Jhcik6IFByb21pc2U8YW55PiB7XHJcbiAgICAgICAgYXdhaXQgcHJvbWlzZVRpbWVvdXQoMTAwMCk7XHJcbiAgICAgICAgY29uc3QgZnJvbSA9IGAke2FyZ3MuYXQoMSkuaWR9YDtcclxuICAgICAgICBjb25zdCB0byA9IGAke2FyZ3MuYXQoMikuaWR9YDtcclxuICAgICAgICBjb25zdCBhc3NldHMgPSBhd2FpdCB0aGlzLmFzc2V0cy5maW5kTWFueShmcm9tID09PSB0aGlzLmFzc2V0cy5taXNzaW5nRHJpdmVyID8ge1xyXG4gICAgICAgICAgICAkb3I6IFtcclxuICAgICAgICAgICAgICAgIHsgZHJpdmVySWQ6IGZyb20gfSxcclxuICAgICAgICAgICAgICAgIHsgZHJpdmVySWQ6IHsgXCIkZXhpc3RzXCI6IGZhbHNlIH0gfVxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgfSA6IHtkcml2ZXJJZDogZnJvbX0pO1xyXG4gICAgICAgIHByb2dyZXNzLnNldE1heChhc3NldHMubGVuZ3RoKVxyXG5cclxuICAgICAgICBmb3IgKGNvbnN0IGFzc2V0IG9mIGFzc2V0cykge1xyXG4gICAgICAgICAgICBhd2FpdCBhc3NldC5tb3ZlKHRvKTtcclxuICAgICAgICAgICAgcHJvZ3Jlc3MuYWR2YW5jZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGVybWluYWwud3JpdGVsbihjb2xvcml6ZShgQXNzZXRzIHN1Y2Nlc3NmdWxseSBtb3ZlZCB0bzogJHt0b31gLCBDb25zb2xlQ29sb3IuRmdHcmVlbikpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHN1Z2dlc3Q/KGFyZ3M6IElDb21tYW5kQXJncyk6IFByb21pc2U8QXJyYXk8c3RyaW5nIHwgSVN1Z2dlc3Rpb24+PiB7XHJcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID4gMykge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gUmVwbGFjZSByZWdleCBzcGVjaWFsIGNoYXJhY3RlcnNcclxuICAgICAgICBjb25zdCBwcmV2ID0gYXJncy5sZW5ndGggPT09IDMgPyBhcmdzLmF0KDEpIDogbnVsbDtcclxuICAgICAgICBjb25zdCBpZCA9IHJlZ2V4RXNjYXBlKGFyZ3Muc2VhcmNoKTtcclxuICAgICAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAoaWQsIFwiZ1wiKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5hc3NldHMuZHJpdmVycy5maWx0ZXIoZCA9PiBkLm1hdGNoKHJlZ2V4KSAmJiAoIXByZXYgfHwgZCAhPT0gcHJldi5pZCkpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
@@ -11,8 +11,8 @@ export const SOCKET_CONTROLLERS = Symbol.for("socket-controllers-token");
11
11
  export const PARAMETER = Symbol.for("parameter-token");
12
12
  export const DI_CONTAINER = Symbol.for("di-container-token");
13
13
  export const OPENAPI_VALIDATION = Symbol.for("openapi-validation-token");
14
- export const LOCAL_DIR = Symbol.for('asset-local-dir');
15
- export const ASSET_DRIVER = Symbol.for('assets-driver');
14
+ export const ASSET_LOCAL_DIR = Symbol.for('asset-local-dir');
15
+ export const ASSET_DRIVER_FACTORIES = Symbol.for('assets-driver-factories');
16
16
  export class Parameter {
17
17
  name;
18
18
  defaultValue;
@@ -23,4 +23,4 @@ export class Parameter {
23
23
  this.resolver = resolver;
24
24
  }
25
25
  }
26
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLXR5cGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1vbi10eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFvQkEsdUJBQXVCO0FBRXZCLE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxRQUFRLENBQUM7QUEwRTdCLDJCQUEyQjtBQUUzQixNQUFNLENBQUMsTUFBTSxPQUFPLEdBQTZCLE1BQU0sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUM7QUFFN0UsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUF5QixNQUFNLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBRWpFLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFxQyxNQUFNLENBQUMsR0FBRyxDQUFDLHdCQUF3QixDQUFDLENBQUM7QUFFdkcsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUE0QixNQUFNLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBRTVFLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBMkIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0FBRW5GLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBaUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0FBRTdGLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFzQyxNQUFNLENBQUMsR0FBRyxDQUFDLDBCQUEwQixDQUFDLENBQUM7QUFFNUcsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUE4QixNQUFNLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFFbEYsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUF5QyxNQUFNLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLENBQUM7QUFFbkcsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQXNDLE1BQU0sQ0FBQyxHQUFHLENBQUMsMEJBQTBCLENBQUMsQ0FBQztBQUU1RyxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQTJCLE1BQU0sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQUUvRSxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQWlDLE1BQU0sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUM7QUFpQ3RGLE1BQU0sT0FBTyxTQUFTO0lBRUc7SUFBcUI7SUFBMEI7SUFBcEUsWUFBcUIsSUFBWSxFQUFTLFlBQWlCLEVBQVMsV0FBMEIsSUFBSTtRQUE3RSxTQUFJLEdBQUosSUFBSSxDQUFRO1FBQVMsaUJBQVksR0FBWixZQUFZLENBQUs7UUFBUyxhQUFRLEdBQVIsUUFBUSxDQUFzQjtJQUVsRyxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1NlcnZlcn0gZnJvbSBcImh0dHBcIjtcclxuaW1wb3J0IHtSZXF1ZXN0LCBFeHByZXNzfSBmcm9tIFwiZXhwcmVzc1wiO1xyXG5pbXBvcnQge1NvY2tldCwgU2VydmVyIGFzIFNvY2tldFNlcnZlcn0gZnJvbSBcInNvY2tldC5pb1wiO1xyXG5pbXBvcnQge1JvdXRpbmdDb250cm9sbGVyc09wdGlvbnN9IGZyb20gXCJyb3V0aW5nLWNvbnRyb2xsZXJzXCI7XHJcbmltcG9ydCB7U29ja2V0Q29udHJvbGxlcnMsIFNvY2tldENvbnRyb2xsZXJzT3B0aW9uc30gZnJvbSBcInNvY2tldC1jb250cm9sbGVyc1wiO1xyXG5pbXBvcnQge1xyXG4gICAgQ2xhc3NQcm92aWRlcixcclxuICAgIERlcGVuZGVuY3lDb250YWluZXIsXHJcbiAgICBJbmplY3Rpb25Ub2tlbixcclxuICAgIFRva2VuUHJvdmlkZXIsXHJcbiAgICBWYWx1ZVByb3ZpZGVyLFxyXG4gICAgUmVnaXN0cmF0aW9uT3B0aW9uc1xyXG59IGZyb20gXCJ0c3lyaW5nZVwiO1xyXG5pbXBvcnQge1NjaGVtYU9iamVjdH0gZnJvbSBcIm9wZW5hcGkzLXRzXCI7XHJcbmltcG9ydCB7UmVhZGFibGUsIFdyaXRhYmxlfSBmcm9tIFwic3RyZWFtXCI7XHJcbmltcG9ydCB7TW9tZW50fSBmcm9tIFwibW9tZW50XCI7XHJcbmltcG9ydCB7QW55RXhwcmVzc2lvbiwgRXhwcmVzc2lvbn0gZnJvbSBcIm1vbmdvb3NlXCI7XHJcbmltcG9ydCB7SUNvbW1hbmRBcmdzLCBJU3VnZ2VzdGlvbiwgSVRlcm1pbmFsIGFzIElUZXJtaW5hbEJhc2V9IGZyb20gXCJAc3RlbXkvdGVybWluYWwtY29tbWFuZHMtYWRkb25cIjtcclxuaW1wb3J0IHtPYmplY3RJZH0gZnJvbSBcImJzb25cIjtcclxuXHJcbi8vIC0tLSBESSBmdW5jdGlvbnMgLS0tXHJcblxyXG5leHBvcnQgY29uc3QgVHlwZSA9IEZ1bmN0aW9uO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBUeXBlPFQgPSBvYmplY3Q+IGV4dGVuZHMgRnVuY3Rpb24ge1xyXG4gICAgbmV3ICguLi5hcmdzOiBhbnlbXSk6IFQ7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRmFjdG9yeVByb3ZpZGVyPFQ+IHtcclxuICAgIHVzZUZhY3Rvcnk6IChkYzogSURlcGVuZGVuY3lDb250YWluZXIpID0+IFQ7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVRyZWUge1xyXG4gICAgcmVhZG9ubHkgcGF0aDogc3RyaW5nO1xyXG4gICAgcmVzb2x2ZVNlcnZpY2UoKTogYW55O1xyXG4gICAgcmVzb2x2ZUxlYXZlcygpOiBNYXA8c3RyaW5nLCBJVHJlZT47XHJcbiAgICByZXNvbHZlU2VydmljZXMoKTogTWFwPHN0cmluZywgYW55PjtcclxuICAgIHJlc29sdmVBbmNlc3RvcihwYXRoOiBzdHJpbmcpOiBJVHJlZTtcclxuICAgIHJlc29sdmVQYXRoKHBhdGg6IHN0cmluZywgdGhyb3dFcnJvcj86IGJvb2xlYW4pOiBJVHJlZTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJRGVwZW5kZW5jeUNvbnRhaW5lciB7XHJcbiAgICByZWFkb25seSBwYXJlbnQ6IElEZXBlbmRlbmN5Q29udGFpbmVyO1xyXG4gICAgcmVhZG9ubHkgdHJlZTogSVRyZWU7XHJcbiAgICByZWFkb25seSByZWdpc3RlcmVkVG9rZW5zOiBSZWFkb25seUFycmF5PEluamVjdGlvblRva2VuPjtcclxuICAgIGNyZWF0ZUNoaWxkQ29udGFpbmVyKCk6IElEZXBlbmRlbmN5Q29udGFpbmVyO1xyXG4gICAgcmVnaXN0ZXI8VD4odG9rZW46IEluamVjdGlvblRva2VuPFQ+LCBwcm92aWRlcjogVmFsdWVQcm92aWRlcjxUPik6IElEZXBlbmRlbmN5Q29udGFpbmVyO1xyXG4gICAgcmVnaXN0ZXI8VD4odG9rZW46IEluamVjdGlvblRva2VuPFQ+LCBwcm92aWRlcjogRmFjdG9yeVByb3ZpZGVyPFQ+KTogSURlcGVuZGVuY3lDb250YWluZXI7XHJcbiAgICByZWdpc3RlcjxUPih0b2tlbjogSW5qZWN0aW9uVG9rZW48VD4sIHByb3ZpZGVyOiBUb2tlblByb3ZpZGVyPFQ+LCBvcHRpb25zPzogUmVnaXN0cmF0aW9uT3B0aW9ucyk6IElEZXBlbmRlbmN5Q29udGFpbmVyO1xyXG4gICAgcmVnaXN0ZXI8VD4odG9rZW46IEluamVjdGlvblRva2VuPFQ+LCBwcm92aWRlcjogQ2xhc3NQcm92aWRlcjxUPiwgb3B0aW9ucz86IFJlZ2lzdHJhdGlvbk9wdGlvbnMpOiBJRGVwZW5kZW5jeUNvbnRhaW5lcjtcclxuICAgIHJlZ2lzdGVyPFQ+KHRva2VuOiBJbmplY3Rpb25Ub2tlbjxUPiwgcHJvdmlkZXI6IFR5cGU8VD4sIG9wdGlvbnM/OiBSZWdpc3RyYXRpb25PcHRpb25zKTogSURlcGVuZGVuY3lDb250YWluZXI7XHJcbiAgICByZWdpc3RlclNpbmdsZXRvbjxUPihmcm9tOiBJbmplY3Rpb25Ub2tlbjxUPiwgdG86IEluamVjdGlvblRva2VuPFQ+KTogSURlcGVuZGVuY3lDb250YWluZXI7XHJcbiAgICByZWdpc3RlclNpbmdsZXRvbjxUPih0b2tlbjogVHlwZTxUPik6IElEZXBlbmRlbmN5Q29udGFpbmVyO1xyXG4gICAgcmVnaXN0ZXJUeXBlPFQ+KGZyb206IEluamVjdGlvblRva2VuPFQ+LCB0bzogSW5qZWN0aW9uVG9rZW48VD4pOiBJRGVwZW5kZW5jeUNvbnRhaW5lcjtcclxuICAgIHJlZ2lzdGVySW5zdGFuY2U8VD4odG9rZW46IEluamVjdGlvblRva2VuPFQ+LCBpbnN0YW5jZTogVCk6IElEZXBlbmRlbmN5Q29udGFpbmVyO1xyXG4gICAgZ2V0PFQ+KHRva2VuOiBJbmplY3Rpb25Ub2tlbjxUPik6IFQ7XHJcbiAgICByZXNvbHZlPFQ+KHRva2VuOiBJbmplY3Rpb25Ub2tlbjxUPik6IFQ7XHJcbiAgICByZXNvbHZlQWxsPFQ+KHRva2VuOiBJbmplY3Rpb25Ub2tlbjxUPik6IFRbXTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDbGFzc0Jhc2VkUHJvdmlkZXI8VD4gZXh0ZW5kcyBDbGFzc1Byb3ZpZGVyPFQ+IHtcclxuICAgIHByb3ZpZGU6IEluamVjdGlvblRva2VuO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFZhbHVlQmFzZWRQcm92aWRlcjxUPiBleHRlbmRzIFZhbHVlUHJvdmlkZXI8VD4ge1xyXG4gICAgcHJvdmlkZTogSW5qZWN0aW9uVG9rZW47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRmFjdG9yeUJhc2VkUHJvdmlkZXI8VD4gZXh0ZW5kcyBGYWN0b3J5UHJvdmlkZXI8VD4ge1xyXG4gICAgcHJvdmlkZTogSW5qZWN0aW9uVG9rZW47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgVG9rZW5CYXNlZFByb3ZpZGVyPFQ+IGV4dGVuZHMgVG9rZW5Qcm92aWRlcjxUPiB7XHJcbiAgICBwcm92aWRlOiBJbmplY3Rpb25Ub2tlbjtcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgU3lyaW5nZVByb3ZpZGVyPFQ+ID0gVHlwZTxUPiB8IENsYXNzUHJvdmlkZXI8VD4gfCBWYWx1ZVByb3ZpZGVyPFQ+IHwgRmFjdG9yeVByb3ZpZGVyPFQ+IHwgVG9rZW5Qcm92aWRlcjxUPjtcclxuXHJcbmV4cG9ydCB0eXBlIFByb3ZpZGVyPFQ+ID0gVHlwZTxUPiB8IENsYXNzQmFzZWRQcm92aWRlcjxUPiB8IFZhbHVlQmFzZWRQcm92aWRlcjxUPiB8IEZhY3RvcnlCYXNlZFByb3ZpZGVyPFQ+IHwgVG9rZW5CYXNlZFByb3ZpZGVyPFQ+O1xyXG5cclxuLy8gLS0tIFVzZWZ1bCBnZW5lcmljIHR5cGVzIC0tLVxyXG5cclxuZXhwb3J0IHR5cGUgQ29uc3RydWN0b3I8VCA9IG9iamVjdD4gPSBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBUXHJcblxyXG5leHBvcnQgdHlwZSBJbmZlckdlbmVyaWM8VD4gPSBUIGV4dGVuZHMgVHlwZTxpbmZlciBCPiA/IEIgOiBuZXZlcjtcclxuXHJcbmV4cG9ydCB0eXBlIFBpY2tNYXRjaGluZzxULCBWPiA9IHsgW0sgaW4ga2V5b2YgVCBhcyBUW0tdIGV4dGVuZHMgViA/IEsgOiBuZXZlcl06IFRbS10gfVxyXG5cclxuZXhwb3J0IHR5cGUgT21pdEZpcnN0QXJnPEY+ID0gRiBleHRlbmRzICh4OiBhbnksIC4uLmFyZ3M6IGluZmVyIFApID0+IGluZmVyIFIgPyAoLi4uYXJnczogUCkgPT4gUiA6IG5ldmVyO1xyXG5cclxuLy8gLS0tIE9wZW5BcGkgLS0tXHJcblxyXG5leHBvcnQgdHlwZSBTY2hlbWFDb252ZXJ0ZXIgPSAobWV0YTogYW55LCBvcHRpb25zOiBhbnkpID0+IFNjaGVtYU9iamVjdDtcclxuXHJcbmV4cG9ydCB0eXBlIE9wZW5BcGlWYWxpZGF0aW9uID0gU2NoZW1hQ29udmVydGVyIHwgU2NoZW1hT2JqZWN0O1xyXG5cclxuLy8gLS0tIEluamVjdGlvbiB0b2tlbnMgLS0tXHJcblxyXG5leHBvcnQgY29uc3QgRklYVFVSRTogSW5qZWN0aW9uVG9rZW48SUZpeHR1cmU+ID0gU3ltYm9sLmZvcihcImZpeHR1cmUtdG9rZW5cIik7XHJcblxyXG5leHBvcnQgY29uc3QgSk9COiBJbmplY3Rpb25Ub2tlbjxJSm9iPiA9IFN5bWJvbC5mb3IoXCJqb2ItdG9rZW5cIik7XHJcblxyXG5leHBvcnQgY29uc3QgVEVSTUlOQUxfQ09NTUFORDogSW5qZWN0aW9uVG9rZW48SVRlcm1pbmFsQ29tbWFuZD4gPSBTeW1ib2wuZm9yKFwidGVybWluYWwtY29tbWFuZC10b2tlblwiKTtcclxuXHJcbmV4cG9ydCBjb25zdCBFWFBSRVNTOiBJbmplY3Rpb25Ub2tlbjxFeHByZXNzPiA9IFN5bWJvbC5mb3IoXCJleHByZXNzLXRva2VuXCIpO1xyXG5cclxuZXhwb3J0IGNvbnN0IEhUVFBfU0VSVkVSOiBJbmplY3Rpb25Ub2tlbjxTZXJ2ZXI+ID0gU3ltYm9sLmZvcihcImh0dHAtc2VydmVyLXRva2VuXCIpO1xyXG5cclxuZXhwb3J0IGNvbnN0IFNPQ0tFVF9TRVJWRVI6IEluamVjdGlvblRva2VuPFNvY2tldFNlcnZlcj4gPSBTeW1ib2wuZm9yKFwic29ja2V0LXNlcnZlci10b2tlblwiKTtcclxuXHJcbmV4cG9ydCBjb25zdCBTT0NLRVRfQ09OVFJPTExFUlM6IEluamVjdGlvblRva2VuPFNvY2tldENvbnRyb2xsZXJzPiA9IFN5bWJvbC5mb3IoXCJzb2NrZXQtY29udHJvbGxlcnMtdG9rZW5cIik7XHJcblxyXG5leHBvcnQgY29uc3QgUEFSQU1FVEVSOiBJbmplY3Rpb25Ub2tlbjxQYXJhbWV0ZXI+ID0gU3ltYm9sLmZvcihcInBhcmFtZXRlci10b2tlblwiKTtcclxuXHJcbmV4cG9ydCBjb25zdCBESV9DT05UQUlORVI6IEluamVjdGlvblRva2VuPElEZXBlbmRlbmN5Q29udGFpbmVyPiA9IFN5bWJvbC5mb3IoXCJkaS1jb250YWluZXItdG9rZW5cIik7XHJcblxyXG5leHBvcnQgY29uc3QgT1BFTkFQSV9WQUxJREFUSU9OOiBJbmplY3Rpb25Ub2tlbjxPcGVuQXBpVmFsaWRhdGlvbj4gPSBTeW1ib2wuZm9yKFwib3BlbmFwaS12YWxpZGF0aW9uLXRva2VuXCIpO1xyXG5cclxuZXhwb3J0IGNvbnN0IExPQ0FMX0RJUjogSW5qZWN0aW9uVG9rZW48c3RyaW5nPiA9IFN5bWJvbC5mb3IoJ2Fzc2V0LWxvY2FsLWRpcicpO1xyXG5cclxuZXhwb3J0IGNvbnN0IEFTU0VUX0RSSVZFUjogSW5qZWN0aW9uVG9rZW48SUFzc2V0RHJpdmVyPiA9IFN5bWJvbC5mb3IoJ2Fzc2V0cy1kcml2ZXInKTtcclxuXHJcbi8vIC0tLSBNb25nbyBpbnRlcmZhY2VzIGFuZCB0eXBlc1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJTWF0Y2hGaWVsZCB7XHJcbiAgICBmaWVsZDogc3RyaW5nO1xyXG4gICAgZmlsdGVyOiBhbnk7XHJcbiAgICB3aGVuOiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElQcm9qZWN0T3B0aW9ucyB7XHJcbiAgICBbZmllbGQ6IHN0cmluZ106IEFueUV4cHJlc3Npb24gfCBFeHByZXNzaW9uIHwgSVByb2plY3RPcHRpb25zO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElVbndpbmRPcHRpb25zIHtcclxuICAgIHBhdGg6IHN0cmluZztcclxuICAgIGluY2x1ZGVBcnJheUluZGV4Pzogc3RyaW5nO1xyXG4gICAgcHJlc2VydmVOdWxsQW5kRW1wdHlBcnJheXM/OiBib29sZWFuO1xyXG59XHJcblxyXG4vLyAtLS0gSW50ZXJmYWNlcyBhbmQgdXRpbGl0eSBjbGFzc2VzIC0tLVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJRml4dHVyZSB7XHJcbiAgICBsb2FkKG91dHB1dD86IElGaXh0dXJlT3V0cHV0KTogUHJvbWlzZTxhbnk+O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElGaXh0dXJlT3V0cHV0IHtcclxuICAgIHdyaXRlKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQ7XHJcbiAgICB3cml0ZWxuKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQ7XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIFBhcmFtUmVzb2x2ZXIgPSAodmFsdWU6IHN0cmluZywgaGVscGVyPzogKHBhcmFtOiBzdHJpbmcpID0+IGFueSkgPT4gYW55O1xyXG5cclxuZXhwb3J0IGNsYXNzIFBhcmFtZXRlciB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocmVhZG9ubHkgbmFtZTogc3RyaW5nLCBwdWJsaWMgZGVmYXVsdFZhbHVlOiBhbnksIHB1YmxpYyByZXNvbHZlcjogUGFyYW1SZXNvbHZlciA9IG51bGwpIHtcclxuXHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIFNvY2tldFBhcmFtID0gc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IFNvY2tldFBhcmFtcztcclxuXHJcbmV4cG9ydCB0eXBlIFNvY2tldFBhcmFtcyA9IHtcclxuICAgIFtuYW1lOiBzdHJpbmddOiBTb2NrZXRQYXJhbSB8IEFycmF5PFNvY2tldFBhcmFtPjtcclxufTtcclxuXHJcbmV4cG9ydCB0eXBlIEpvYlBhcmFtcyA9IFNvY2tldFBhcmFtcztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVNvY2tldE1lc3NhZ2Uge1xyXG4gICAgbWVzc2FnZTogc3RyaW5nO1xyXG4gICAgcGFyYW1zOiBTb2NrZXRQYXJhbXM7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSU1lc3NhZ2VCcmlkZ2Uge1xyXG4gICAgc2VuZE1lc3NhZ2UobWVzc2FnZTogc3RyaW5nLCBwYXJhbXM/OiBTb2NrZXRQYXJhbXMpOiB2b2lkO1xyXG59XHJcblxyXG4vLyAtLS0gSk9CUyAtLS1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUpvYiB7XHJcbiAgICBwcm9jZXNzKG1lc3NhZ2luZz86IElNZXNzYWdlQnJpZGdlKTogUHJvbWlzZTxhbnk+O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElKb2JUYXNrIHtcclxuICAgIHN0YXJ0OiAoKSA9PiB2b2lkO1xyXG4gICAgc3RvcDogKCkgPT4gdm9pZDtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBKb2JTY2hlZHVsZVJhbmdlIHtcclxuICAgIG1pbjogbnVtYmVyO1xyXG4gICAgbWF4OiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIEpvYlNjaGVkdWxlVGltZSA9IHN0cmluZyB8IG51bWJlciB8IEpvYlNjaGVkdWxlUmFuZ2UgfCBBcnJheTxzdHJpbmcgfCBudW1iZXI+O1xyXG5cclxuLy8gLS0tIENPTU1BTkRTICYgVEVSTUlOQUwgLS0tXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElUZXJtaW5hbEZpbGUgZXh0ZW5kcyBJU3VnZ2VzdGlvbiB7XHJcbiAgICBjb250ZW50Pzogc3RyaW5nO1xyXG4gICAgYnVmZmVyPzogQnVmZmVyO1xyXG4gICAgYWNjZXB0Pzogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElUZXJtaW5hbCBleHRlbmRzIElUZXJtaW5hbEJhc2Uge1xyXG4gICAgc3VnZ2VzdEZpbGVzKGFjY2VwdDogc3RyaW5nKTogUHJvbWlzZTxJVGVybWluYWxGaWxlW10+O1xyXG4gICAgZG93bmxvYWRGaWxlKGZpbGVuYW1lOiBzdHJpbmcsIGJ1ZmZlcjogQnVmZmVyKTogUHJvbWlzZTx2b2lkPjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJVGVybWluYWxDb21tYW5kIHtcclxuICAgIG5hbWU/OiBzdHJpbmc7XHJcbiAgICBleGVjdXRlKGFyZ3M6IElDb21tYW5kQXJncywgdGVybWluYWw6IElUZXJtaW5hbCk6IFByb21pc2U8YW55PjtcclxuICAgIHN1Z2dlc3Q/KGFyZ3M6IElDb21tYW5kQXJncywgdGVybWluYWw6IElUZXJtaW5hbCk6IFByb21pc2U8QXJyYXk8c3RyaW5nIHwgSVN1Z2dlc3Rpb24+PjtcclxufVxyXG5cclxuLy8gLS0tIEFTU0VUUyAtLS1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVByb2dyZXNzIHtcclxuICAgIGlkOiBzdHJpbmc7XHJcbiAgICBjdXJyZW50OiBudW1iZXI7XHJcbiAgICBtYXg6IG51bWJlcjtcclxuICAgIG1lc3NhZ2U6IHN0cmluZztcclxuICAgIGVycm9yOiBzdHJpbmc7XHJcbiAgICBjYW5jZWxlZDogYm9vbGVhbjtcclxuICAgIHBlcmNlbnQ6IG51bWJlcjtcclxuICAgIHJlbWFpbmluZzogbnVtYmVyO1xyXG4gICAgc2V0TWVzc2FnZUJyaWRnZShtZXNzYWdlQnJpZGdlOiBJTWVzc2FnZUJyaWRnZSk6IHRoaXM7XHJcbiAgICBjcmVhdGVTdWJQcm9ncmVzcyhwcm9ncmVzc1ZhbHVlOiBudW1iZXIsIG1heD86IG51bWJlciwgbWVzc2FnZT86IHN0cmluZyk6IFByb21pc2U8SVByb2dyZXNzPjtcclxuICAgIHNldE1heChtYXg6IG51bWJlcik6IFByb21pc2U8YW55PjtcclxuICAgIHNldE1lc3NhZ2UobWVzc2FnZTogc3RyaW5nKTogUHJvbWlzZTxhbnk+O1xyXG4gICAgc2V0RXJyb3IoZXJyb3I6IHN0cmluZyk6IFByb21pc2U8YW55PjtcclxuICAgIGFkdmFuY2UodmFsdWU/OiBudW1iZXIpOiBQcm9taXNlPGFueT47XHJcbiAgICBjYW5jZWwoKTogUHJvbWlzZTxhbnk+O1xyXG4gICAgc2F2ZSgpOiBQcm9taXNlPGFueT47XHJcbiAgICBsb2FkKCk6IFByb21pc2U8dGhpcz47XHJcbiAgICB0b0pTT04oKTogYW55O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElBc3NldENyb3BJbmZvIHtcclxuICAgIHg6IG51bWJlcjtcclxuICAgIHk6IG51bWJlcjtcclxuICAgIHc6IG51bWJlcjtcclxuICAgIGg6IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJSW1hZ2VNZXRhIHtcclxuICAgIGNyb3A/OiBJQXNzZXRDcm9wSW5mbztcclxuICAgIGNyb3BCZWZvcmU/OiBJQXNzZXRDcm9wSW5mbztcclxuICAgIGNyb3BBZnRlcj86IElBc3NldENyb3BJbmZvO1xyXG4gICAgY2FudmFzU2NhbGVYPzogbnVtYmVyO1xyXG4gICAgY2FudmFzU2NhbGVZPzogbnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElBc3NldE1ldGEgZXh0ZW5kcyBJSW1hZ2VNZXRhIHtcclxuICAgIGZpbGVuYW1lPzogc3RyaW5nO1xyXG4gICAgZXh0ZW5zaW9uPzogc3RyaW5nO1xyXG4gICAgY2xhc3NpZmllZD86IGJvb2xlYW47XHJcbiAgICBkb3dubG9hZENvdW50PzogbnVtYmVyO1xyXG4gICAgZmlyc3REb3dubG9hZD86IERhdGU7XHJcbiAgICBsYXN0RG93bmxvYWQ/OiBEYXRlO1xyXG4gICAgcHJldmlldz86IE9iamVjdElkIHwgc3RyaW5nO1xyXG4gICAgcHVibGljVXJsPzogc3RyaW5nO1xyXG5cclxuICAgIFtwcm9wOiBzdHJpbmddOiBhbnk7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUFzc2V0SW1hZ2VQYXJhbXMge1xyXG4gICAgcm90YXRpb24/OiBudW1iZXI7XHJcbiAgICBjYW52YXNTY2FsZVg/OiBudW1iZXI7XHJcbiAgICBjYW52YXNTY2FsZVk/OiBudW1iZXI7XHJcbiAgICBzY2FsZVg/OiBudW1iZXI7XHJcbiAgICBzY2FsZVk/OiBudW1iZXI7XHJcbiAgICBsYXp5PzogYm9vbGVhbjtcclxuICAgIGNyb3A/OiBzdHJpbmcgfCBib29sZWFuO1xyXG4gICAgY3JvcEJlZm9yZT86IHN0cmluZyB8IGJvb2xlYW4gfCBJQXNzZXRDcm9wSW5mbztcclxuICAgIGNyb3BBZnRlcj86IHN0cmluZyB8IGJvb2xlYW4gfCBJQXNzZXRDcm9wSW5mbztcclxuICAgIFtrZXk6IHN0cmluZ106IGFueTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJQXNzZXQge1xyXG4gICAgcmVhZG9ubHkgaWQ6IHN0cmluZztcclxuICAgIHJlYWRvbmx5IGZpbGVuYW1lOiBzdHJpbmc7XHJcbiAgICByZWFkb25seSBjb250ZW50VHlwZTogc3RyaW5nO1xyXG4gICAgcmVhZG9ubHkgbWV0YWRhdGE6IElBc3NldE1ldGE7XHJcbiAgICByZWFkb25seSBzdHJlYW06IFJlYWRhYmxlO1xyXG4gICAgdW5saW5rKCk6IFByb21pc2U8c3RyaW5nPjtcclxuICAgIHNldE1ldGEobWV0YTogUGFydGlhbDxJQXNzZXRNZXRhPik6IFByb21pc2U8YW55PjtcclxuICAgIGdldEJ1ZmZlcigpOiBQcm9taXNlPEJ1ZmZlcj47XHJcbiAgICBkb3dubG9hZChtZXRhZGF0YT86IElBc3NldE1ldGEpOiBQcm9taXNlPFJlYWRhYmxlPjtcclxuICAgIGRvd25sb2FkSW1hZ2UocGFyYW1zPzogSUFzc2V0SW1hZ2VQYXJhbXMsIG1ldGFkYXRhPzogSUFzc2V0TWV0YSk6IFByb21pc2U8UmVhZGFibGU+O1xyXG4gICAgZ2V0SW1hZ2UocGFyYW1zPzogSUFzc2V0SW1hZ2VQYXJhbXMpOiBQcm9taXNlPFJlYWRhYmxlPjtcclxuICAgIHNhdmUoKTogUHJvbWlzZTxhbnk+O1xyXG4gICAgbG9hZCgpOiBQcm9taXNlPHRoaXM+O1xyXG4gICAgdG9KU09OKCk6IGFueTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJQXNzZXRVcGxvYWRTdHJlYW0gZXh0ZW5kcyBXcml0YWJsZSB7XHJcbiAgICBpZD86IE9iamVjdElkO1xyXG4gICAgZG9uZT86IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUFzc2V0VXBsb2FkT3B0cyB7XHJcbiAgICBjaHVua1NpemVCeXRlcz86IG51bWJlcjtcclxuICAgIG1ldGFkYXRhPzogSUFzc2V0TWV0YTtcclxuICAgIGNvbnRlbnRUeXBlPzogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElBc3NldERyaXZlciB7XHJcbiAgICByZWFkb25seSBtZXRhQ29sbGVjdGlvbjogc3RyaW5nO1xyXG4gICAgb3BlblVwbG9hZFN0cmVhbShmaWxlbmFtZTogc3RyaW5nLCBvcHRzPzogSUFzc2V0VXBsb2FkT3B0cyk6IElBc3NldFVwbG9hZFN0cmVhbTtcclxuICAgIG9wZW5Eb3dubG9hZFN0cmVhbShpZDogT2JqZWN0SWQpOiBSZWFkYWJsZTtcclxuICAgIGRlbGV0ZShpZDogT2JqZWN0SWQpOiBQcm9taXNlPHZvaWQ+O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElMYXp5QXNzZXQge1xyXG4gICAgaWQ6IHN0cmluZztcclxuICAgIGpvYk5hbWU6IHN0cmluZztcclxuICAgIGpvYlBhcmFtczogYW55O1xyXG4gICAgam9iUXVlOiBzdHJpbmc7XHJcbiAgICBjcmVhdGVkQXQ6IERhdGU7XHJcbiAgICB1cGRhdGVkQXQ6IERhdGU7XHJcbiAgICBwcm9ncmVzc0lkPzogc3RyaW5nO1xyXG4gICAgYXNzZXRJZD86IHN0cmluZztcclxuICAgIHVubGluaygpOiBQcm9taXNlPHN0cmluZz47XHJcbiAgICBzdGFydFdvcmtpbmcoKTogdm9pZDtcclxuICAgIGxvYWRBc3NldCgpOiBQcm9taXNlPElBc3NldD47XHJcbiAgICB3cml0ZUFzc2V0KGFzc2V0OiBJQXNzZXQpOiBQcm9taXNlPElBc3NldD47XHJcbiAgICBzYXZlKCk6IFByb21pc2U8YW55PjtcclxuICAgIGxvYWQoKTogUHJvbWlzZTx0aGlzPjtcclxuICAgIHRvSlNPTigpOiBhbnk7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVVzZXIge1xyXG4gICAgX2lkPzogc3RyaW5nO1xyXG4gICAgaWQ/OiBzdHJpbmc7XHJcbiAgICBlbWFpbD86IHN0cmluZztcclxuICAgIHBhc3N3b3JkPzogc3RyaW5nO1xyXG4gICAgcm9sZXM6IHN0cmluZ1tdO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElDbGllbnRTb2NrZXQgZXh0ZW5kcyBTb2NrZXQge1xyXG4gICAgaW50ZXJlc3RlZFByb2dyZXNzZXM6IFNldDxzdHJpbmc+O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElSZXF1ZXN0QmFzZTxUPiBleHRlbmRzIFJlcXVlc3Qge1xyXG4gICAgaWQ/OiBzdHJpbmc7XHJcbiAgICBzdGFydGVkPzogTW9tZW50O1xyXG4gICAgZW5kZWQ/OiBNb21lbnQ7XHJcbiAgICBjb250YWluZXI/OiBEZXBlbmRlbmN5Q29udGFpbmVyO1xyXG4gICAgbGFuZ3VhZ2U/OiBzdHJpbmc7XHJcbiAgICB1c2VyPzogVDtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJUmVxdWVzdCBleHRlbmRzIElSZXF1ZXN0QmFzZTxJVXNlcj4ge1xyXG5cclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJR2FsbGVyeUltYWdlIHtcclxuICAgIGZvbGRlcjogc3RyaW5nO1xyXG4gICAgdGh1bWI6IHN0cmluZztcclxuICAgIGJpZzogc3RyaW5nO1xyXG4gICAgc2VydmUoaWQ6IHN0cmluZyk6IFByb21pc2U8QnVmZmVyPlxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElHYWxsZXJ5U2l6ZSB7XHJcbiAgICB3aWR0aD86IG51bWJlcjtcclxuICAgIGhlaWdodD86IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJR2FsbGVyeUltYWdlSGFuZGxlciB7XHJcbiAgICBnZXRPcmlnaW5hbCgpOiBQcm9taXNlPEJ1ZmZlcj47XHJcbiAgICB3cml0ZVJlc3VsdChpc1RodW1iOiBib29sZWFuLCBidWZmZXI6IEJ1ZmZlcik6IFByb21pc2U8dm9pZD47XHJcbiAgICBoYXNSZXN1bHQoaXNUaHVtYjogYm9vbGVhbik6IFByb21pc2U8Ym9vbGVhbj47XHJcbiAgICBzZXJ2ZVJlc3VsdChpc1RodW1iOiBib29sZWFuKTogUHJvbWlzZTxCdWZmZXI+O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElUcmFuc2xhdGlvbnMge1xyXG4gICAgW2tleTogc3RyaW5nXTogYW55O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElQYWdpbmF0aW9uTWV0YSB7XHJcbiAgICB0b3RhbDogbnVtYmVyO1xyXG4gICAgW2tleTogc3RyaW5nXTogYW55O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElQYWdpbmF0aW9uQmFzZTxUPiB7XHJcbiAgICBjb3VudDogbnVtYmVyXHJcbiAgICBpdGVtczogVFtdO1xyXG4gICAgbWV0YT86IElQYWdpbmF0aW9uTWV0YTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJUGFnaW5hdGlvbiBleHRlbmRzIElQYWdpbmF0aW9uQmFzZTxhbnk+IHtcclxuXHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVBhZ2luYXRpb25QYXJhbXMge1xyXG4gICAgcGFnZTogbnVtYmVyO1xyXG4gICAgbGltaXQ6IG51bWJlcjtcclxuICAgIHNvcnQ/OiBzdHJpbmc7XHJcbiAgICBwb3B1bGF0ZT86IHN0cmluZ1tdO1xyXG4gICAgW2tleTogc3RyaW5nXTogYW55O1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBGb250Rm9ybWF0ID0gXCJvcGVudHlwZVwiIHwgXCJ0cnVldHlwZVwiIHwgXCJ3b2ZmXCIgfCBcIndvZmYyXCIgfCBcImRhdGFmb3JrXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElGaWxlVHlwZSB7XHJcbiAgICBleHQ6IHN0cmluZztcclxuICAgIG1pbWU6IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgUm91dGluZ09wdGlvbnMgPSBSb3V0aW5nQ29udHJvbGxlcnNPcHRpb25zO1xyXG5cclxuZXhwb3J0IHR5cGUgU29ja2V0T3B0aW9ucyA9IE9taXQ8U29ja2V0Q29udHJvbGxlcnNPcHRpb25zLCBcImNvbnRhaW5lclwiPjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUJhY2tlbmRDb25maWcge1xyXG4gICAgcm9vdEZvbGRlcj86IHN0cmluZztcclxuICAgIHJvdXRlUHJlZml4Pzogc3RyaW5nO1xyXG4gICAgcGFyYW1zPzogUGFyYW1ldGVyW107XHJcbiAgICBmaXh0dXJlcz86IFR5cGU8SUZpeHR1cmU+W107XHJcbiAgICBqb2JzPzogVHlwZTxJSm9iPltdO1xyXG4gICAgY29tbWFuZHM/OiBUeXBlPElUZXJtaW5hbENvbW1hbmQ+W107XHJcbiAgICByZXN0T3B0aW9ucz86IFJvdXRpbmdPcHRpb25zO1xyXG4gICAgc29ja2V0T3B0aW9ucz86IFNvY2tldE9wdGlvbnM7XHJcbiAgICBjdXN0b21WYWxpZGF0aW9uPzogU2NoZW1hQ29udmVydGVyIHwgU2NoZW1hT2JqZWN0O1xyXG4gICAgYXNzZXRMb2NhbERpcj86IHN0cmluZztcclxuICAgIGFzc2V0RHJpdmVyPzogVHlwZTxJQXNzZXREcml2ZXI+O1xyXG59XHJcbiJdfQ==
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLXR5cGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1vbi10eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFvQkEsdUJBQXVCO0FBRXZCLE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxRQUFRLENBQUM7QUEwRTdCLDJCQUEyQjtBQUUzQixNQUFNLENBQUMsTUFBTSxPQUFPLEdBQTZCLE1BQU0sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUM7QUFFN0UsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUF5QixNQUFNLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBRWpFLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFxQyxNQUFNLENBQUMsR0FBRyxDQUFDLHdCQUF3QixDQUFDLENBQUM7QUFFdkcsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUE0QixNQUFNLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBRTVFLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBMkIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0FBRW5GLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBaUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0FBRTdGLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFzQyxNQUFNLENBQUMsR0FBRyxDQUFDLDBCQUEwQixDQUFDLENBQUM7QUFFNUcsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUE4QixNQUFNLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFFbEYsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUF5QyxNQUFNLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLENBQUM7QUFFbkcsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQXNDLE1BQU0sQ0FBQyxHQUFHLENBQUMsMEJBQTBCLENBQUMsQ0FBQztBQUU1RyxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQTJCLE1BQU0sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQUVyRixNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBMEMsTUFBTSxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0FBaUNuSCxNQUFNLE9BQU8sU0FBUztJQUVHO0lBQXFCO0lBQTBCO0lBQXBFLFlBQXFCLElBQVksRUFBUyxZQUFpQixFQUFTLFdBQTBCLElBQUk7UUFBN0UsU0FBSSxHQUFKLElBQUksQ0FBUTtRQUFTLGlCQUFZLEdBQVosWUFBWSxDQUFLO1FBQVMsYUFBUSxHQUFSLFFBQVEsQ0FBc0I7SUFFbEcsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtTZXJ2ZXJ9IGZyb20gXCJodHRwXCI7XHJcbmltcG9ydCB7UmVxdWVzdCwgRXhwcmVzc30gZnJvbSBcImV4cHJlc3NcIjtcclxuaW1wb3J0IHtTb2NrZXQsIFNlcnZlciBhcyBTb2NrZXRTZXJ2ZXJ9IGZyb20gXCJzb2NrZXQuaW9cIjtcclxuaW1wb3J0IHtSb3V0aW5nQ29udHJvbGxlcnNPcHRpb25zfSBmcm9tIFwicm91dGluZy1jb250cm9sbGVyc1wiO1xyXG5pbXBvcnQge1NvY2tldENvbnRyb2xsZXJzLCBTb2NrZXRDb250cm9sbGVyc09wdGlvbnN9IGZyb20gXCJzb2NrZXQtY29udHJvbGxlcnNcIjtcclxuaW1wb3J0IHtcclxuICAgIENsYXNzUHJvdmlkZXIsXHJcbiAgICBEZXBlbmRlbmN5Q29udGFpbmVyLFxyXG4gICAgSW5qZWN0aW9uVG9rZW4sXHJcbiAgICBUb2tlblByb3ZpZGVyLFxyXG4gICAgVmFsdWVQcm92aWRlcixcclxuICAgIFJlZ2lzdHJhdGlvbk9wdGlvbnNcclxufSBmcm9tIFwidHN5cmluZ2VcIjtcclxuaW1wb3J0IHtTY2hlbWFPYmplY3R9IGZyb20gXCJvcGVuYXBpMy10c1wiO1xyXG5pbXBvcnQge1JlYWRhYmxlLCBXcml0YWJsZX0gZnJvbSBcInN0cmVhbVwiO1xyXG5pbXBvcnQge01vbWVudH0gZnJvbSBcIm1vbWVudFwiO1xyXG5pbXBvcnQge0FueUV4cHJlc3Npb24sIEV4cHJlc3Npb259IGZyb20gXCJtb25nb29zZVwiO1xyXG5pbXBvcnQge0lDb21tYW5kQXJncywgSVByb2dyZXNzQmFyLCBJU3VnZ2VzdGlvbiwgSVRlcm1pbmFsIGFzIElUZXJtaW5hbEJhc2V9IGZyb20gXCJAc3RlbXkvdGVybWluYWwtY29tbWFuZHMtYWRkb25cIjtcclxuaW1wb3J0IHtPYmplY3RJZH0gZnJvbSBcImJzb25cIjtcclxuXHJcbi8vIC0tLSBESSBmdW5jdGlvbnMgLS0tXHJcblxyXG5leHBvcnQgY29uc3QgVHlwZSA9IEZ1bmN0aW9uO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBUeXBlPFQgPSBvYmplY3Q+IGV4dGVuZHMgRnVuY3Rpb24ge1xyXG4gICAgbmV3ICguLi5hcmdzOiBhbnlbXSk6IFQ7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRmFjdG9yeVByb3ZpZGVyPFQ+IHtcclxuICAgIHVzZUZhY3Rvcnk6IChkYzogSURlcGVuZGVuY3lDb250YWluZXIpID0+IFQ7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVRyZWUge1xyXG4gICAgcmVhZG9ubHkgcGF0aDogc3RyaW5nO1xyXG4gICAgcmVzb2x2ZVNlcnZpY2UoKTogYW55O1xyXG4gICAgcmVzb2x2ZUxlYXZlcygpOiBNYXA8c3RyaW5nLCBJVHJlZT47XHJcbiAgICByZXNvbHZlU2VydmljZXMoKTogTWFwPHN0cmluZywgYW55PjtcclxuICAgIHJlc29sdmVBbmNlc3RvcihwYXRoOiBzdHJpbmcpOiBJVHJlZTtcclxuICAgIHJlc29sdmVQYXRoKHBhdGg6IHN0cmluZywgdGhyb3dFcnJvcj86IGJvb2xlYW4pOiBJVHJlZTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJRGVwZW5kZW5jeUNvbnRhaW5lciB7XHJcbiAgICByZWFkb25seSBwYXJlbnQ6IElEZXBlbmRlbmN5Q29udGFpbmVyO1xyXG4gICAgcmVhZG9ubHkgdHJlZTogSVRyZWU7XHJcbiAgICByZWFkb25seSByZWdpc3RlcmVkVG9rZW5zOiBSZWFkb25seUFycmF5PEluamVjdGlvblRva2VuPjtcclxuICAgIGNyZWF0ZUNoaWxkQ29udGFpbmVyKCk6IElEZXBlbmRlbmN5Q29udGFpbmVyO1xyXG4gICAgcmVnaXN0ZXI8VD4odG9rZW46IEluamVjdGlvblRva2VuPFQ+LCBwcm92aWRlcjogVmFsdWVQcm92aWRlcjxUPik6IElEZXBlbmRlbmN5Q29udGFpbmVyO1xyXG4gICAgcmVnaXN0ZXI8VD4odG9rZW46IEluamVjdGlvblRva2VuPFQ+LCBwcm92aWRlcjogRmFjdG9yeVByb3ZpZGVyPFQ+KTogSURlcGVuZGVuY3lDb250YWluZXI7XHJcbiAgICByZWdpc3RlcjxUPih0b2tlbjogSW5qZWN0aW9uVG9rZW48VD4sIHByb3ZpZGVyOiBUb2tlblByb3ZpZGVyPFQ+LCBvcHRpb25zPzogUmVnaXN0cmF0aW9uT3B0aW9ucyk6IElEZXBlbmRlbmN5Q29udGFpbmVyO1xyXG4gICAgcmVnaXN0ZXI8VD4odG9rZW46IEluamVjdGlvblRva2VuPFQ+LCBwcm92aWRlcjogQ2xhc3NQcm92aWRlcjxUPiwgb3B0aW9ucz86IFJlZ2lzdHJhdGlvbk9wdGlvbnMpOiBJRGVwZW5kZW5jeUNvbnRhaW5lcjtcclxuICAgIHJlZ2lzdGVyPFQ+KHRva2VuOiBJbmplY3Rpb25Ub2tlbjxUPiwgcHJvdmlkZXI6IFR5cGU8VD4sIG9wdGlvbnM/OiBSZWdpc3RyYXRpb25PcHRpb25zKTogSURlcGVuZGVuY3lDb250YWluZXI7XHJcbiAgICByZWdpc3RlclNpbmdsZXRvbjxUPihmcm9tOiBJbmplY3Rpb25Ub2tlbjxUPiwgdG86IEluamVjdGlvblRva2VuPFQ+KTogSURlcGVuZGVuY3lDb250YWluZXI7XHJcbiAgICByZWdpc3RlclNpbmdsZXRvbjxUPih0b2tlbjogVHlwZTxUPik6IElEZXBlbmRlbmN5Q29udGFpbmVyO1xyXG4gICAgcmVnaXN0ZXJUeXBlPFQ+KGZyb206IEluamVjdGlvblRva2VuPFQ+LCB0bzogSW5qZWN0aW9uVG9rZW48VD4pOiBJRGVwZW5kZW5jeUNvbnRhaW5lcjtcclxuICAgIHJlZ2lzdGVySW5zdGFuY2U8VD4odG9rZW46IEluamVjdGlvblRva2VuPFQ+LCBpbnN0YW5jZTogVCk6IElEZXBlbmRlbmN5Q29udGFpbmVyO1xyXG4gICAgZ2V0PFQ+KHRva2VuOiBJbmplY3Rpb25Ub2tlbjxUPik6IFQ7XHJcbiAgICByZXNvbHZlPFQ+KHRva2VuOiBJbmplY3Rpb25Ub2tlbjxUPik6IFQ7XHJcbiAgICByZXNvbHZlQWxsPFQ+KHRva2VuOiBJbmplY3Rpb25Ub2tlbjxUPik6IFRbXTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDbGFzc0Jhc2VkUHJvdmlkZXI8VD4gZXh0ZW5kcyBDbGFzc1Byb3ZpZGVyPFQ+IHtcclxuICAgIHByb3ZpZGU6IEluamVjdGlvblRva2VuO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFZhbHVlQmFzZWRQcm92aWRlcjxUPiBleHRlbmRzIFZhbHVlUHJvdmlkZXI8VD4ge1xyXG4gICAgcHJvdmlkZTogSW5qZWN0aW9uVG9rZW47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRmFjdG9yeUJhc2VkUHJvdmlkZXI8VD4gZXh0ZW5kcyBGYWN0b3J5UHJvdmlkZXI8VD4ge1xyXG4gICAgcHJvdmlkZTogSW5qZWN0aW9uVG9rZW47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgVG9rZW5CYXNlZFByb3ZpZGVyPFQ+IGV4dGVuZHMgVG9rZW5Qcm92aWRlcjxUPiB7XHJcbiAgICBwcm92aWRlOiBJbmplY3Rpb25Ub2tlbjtcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgU3lyaW5nZVByb3ZpZGVyPFQ+ID0gVHlwZTxUPiB8IENsYXNzUHJvdmlkZXI8VD4gfCBWYWx1ZVByb3ZpZGVyPFQ+IHwgRmFjdG9yeVByb3ZpZGVyPFQ+IHwgVG9rZW5Qcm92aWRlcjxUPjtcclxuXHJcbmV4cG9ydCB0eXBlIFByb3ZpZGVyPFQ+ID0gVHlwZTxUPiB8IENsYXNzQmFzZWRQcm92aWRlcjxUPiB8IFZhbHVlQmFzZWRQcm92aWRlcjxUPiB8IEZhY3RvcnlCYXNlZFByb3ZpZGVyPFQ+IHwgVG9rZW5CYXNlZFByb3ZpZGVyPFQ+O1xyXG5cclxuLy8gLS0tIFVzZWZ1bCBnZW5lcmljIHR5cGVzIC0tLVxyXG5cclxuZXhwb3J0IHR5cGUgQ29uc3RydWN0b3I8VCA9IG9iamVjdD4gPSBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBUXHJcblxyXG5leHBvcnQgdHlwZSBJbmZlckdlbmVyaWM8VD4gPSBUIGV4dGVuZHMgVHlwZTxpbmZlciBCPiA/IEIgOiBuZXZlcjtcclxuXHJcbmV4cG9ydCB0eXBlIFBpY2tNYXRjaGluZzxULCBWPiA9IHsgW0sgaW4ga2V5b2YgVCBhcyBUW0tdIGV4dGVuZHMgViA/IEsgOiBuZXZlcl06IFRbS10gfVxyXG5cclxuZXhwb3J0IHR5cGUgT21pdEZpcnN0QXJnPEY+ID0gRiBleHRlbmRzICh4OiBhbnksIC4uLmFyZ3M6IGluZmVyIFApID0+IGluZmVyIFIgPyAoLi4uYXJnczogUCkgPT4gUiA6IG5ldmVyO1xyXG5cclxuLy8gLS0tIE9wZW5BcGkgLS0tXHJcblxyXG5leHBvcnQgdHlwZSBTY2hlbWFDb252ZXJ0ZXIgPSAobWV0YTogYW55LCBvcHRpb25zOiBhbnkpID0+IFNjaGVtYU9iamVjdDtcclxuXHJcbmV4cG9ydCB0eXBlIE9wZW5BcGlWYWxpZGF0aW9uID0gU2NoZW1hQ29udmVydGVyIHwgU2NoZW1hT2JqZWN0O1xyXG5cclxuLy8gLS0tIEluamVjdGlvbiB0b2tlbnMgLS0tXHJcblxyXG5leHBvcnQgY29uc3QgRklYVFVSRTogSW5qZWN0aW9uVG9rZW48SUZpeHR1cmU+ID0gU3ltYm9sLmZvcihcImZpeHR1cmUtdG9rZW5cIik7XHJcblxyXG5leHBvcnQgY29uc3QgSk9COiBJbmplY3Rpb25Ub2tlbjxJSm9iPiA9IFN5bWJvbC5mb3IoXCJqb2ItdG9rZW5cIik7XHJcblxyXG5leHBvcnQgY29uc3QgVEVSTUlOQUxfQ09NTUFORDogSW5qZWN0aW9uVG9rZW48SVRlcm1pbmFsQ29tbWFuZD4gPSBTeW1ib2wuZm9yKFwidGVybWluYWwtY29tbWFuZC10b2tlblwiKTtcclxuXHJcbmV4cG9ydCBjb25zdCBFWFBSRVNTOiBJbmplY3Rpb25Ub2tlbjxFeHByZXNzPiA9IFN5bWJvbC5mb3IoXCJleHByZXNzLXRva2VuXCIpO1xyXG5cclxuZXhwb3J0IGNvbnN0IEhUVFBfU0VSVkVSOiBJbmplY3Rpb25Ub2tlbjxTZXJ2ZXI+ID0gU3ltYm9sLmZvcihcImh0dHAtc2VydmVyLXRva2VuXCIpO1xyXG5cclxuZXhwb3J0IGNvbnN0IFNPQ0tFVF9TRVJWRVI6IEluamVjdGlvblRva2VuPFNvY2tldFNlcnZlcj4gPSBTeW1ib2wuZm9yKFwic29ja2V0LXNlcnZlci10b2tlblwiKTtcclxuXHJcbmV4cG9ydCBjb25zdCBTT0NLRVRfQ09OVFJPTExFUlM6IEluamVjdGlvblRva2VuPFNvY2tldENvbnRyb2xsZXJzPiA9IFN5bWJvbC5mb3IoXCJzb2NrZXQtY29udHJvbGxlcnMtdG9rZW5cIik7XHJcblxyXG5leHBvcnQgY29uc3QgUEFSQU1FVEVSOiBJbmplY3Rpb25Ub2tlbjxQYXJhbWV0ZXI+ID0gU3ltYm9sLmZvcihcInBhcmFtZXRlci10b2tlblwiKTtcclxuXHJcbmV4cG9ydCBjb25zdCBESV9DT05UQUlORVI6IEluamVjdGlvblRva2VuPElEZXBlbmRlbmN5Q29udGFpbmVyPiA9IFN5bWJvbC5mb3IoXCJkaS1jb250YWluZXItdG9rZW5cIik7XHJcblxyXG5leHBvcnQgY29uc3QgT1BFTkFQSV9WQUxJREFUSU9OOiBJbmplY3Rpb25Ub2tlbjxPcGVuQXBpVmFsaWRhdGlvbj4gPSBTeW1ib2wuZm9yKFwib3BlbmFwaS12YWxpZGF0aW9uLXRva2VuXCIpO1xyXG5cclxuZXhwb3J0IGNvbnN0IEFTU0VUX0xPQ0FMX0RJUjogSW5qZWN0aW9uVG9rZW48c3RyaW5nPiA9IFN5bWJvbC5mb3IoJ2Fzc2V0LWxvY2FsLWRpcicpO1xyXG5cclxuZXhwb3J0IGNvbnN0IEFTU0VUX0RSSVZFUl9GQUNUT1JJRVM6IEluamVjdGlvblRva2VuPEFzc2V0RHJpdmVyRmFjdG9yeU1hcD4gPSBTeW1ib2wuZm9yKCdhc3NldHMtZHJpdmVyLWZhY3RvcmllcycpO1xyXG5cclxuLy8gLS0tIE1vbmdvIGludGVyZmFjZXMgYW5kIHR5cGVzXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElNYXRjaEZpZWxkIHtcclxuICAgIGZpZWxkOiBzdHJpbmc7XHJcbiAgICBmaWx0ZXI6IGFueTtcclxuICAgIHdoZW46IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVByb2plY3RPcHRpb25zIHtcclxuICAgIFtmaWVsZDogc3RyaW5nXTogQW55RXhwcmVzc2lvbiB8IEV4cHJlc3Npb24gfCBJUHJvamVjdE9wdGlvbnM7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVVud2luZE9wdGlvbnMge1xyXG4gICAgcGF0aDogc3RyaW5nO1xyXG4gICAgaW5jbHVkZUFycmF5SW5kZXg/OiBzdHJpbmc7XHJcbiAgICBwcmVzZXJ2ZU51bGxBbmRFbXB0eUFycmF5cz86IGJvb2xlYW47XHJcbn1cclxuXHJcbi8vIC0tLSBJbnRlcmZhY2VzIGFuZCB1dGlsaXR5IGNsYXNzZXMgLS0tXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElGaXh0dXJlIHtcclxuICAgIGxvYWQob3V0cHV0PzogSUZpeHR1cmVPdXRwdXQpOiBQcm9taXNlPGFueT47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUZpeHR1cmVPdXRwdXQge1xyXG4gICAgd3JpdGUobWVzc2FnZTogc3RyaW5nKTogdm9pZDtcclxuICAgIHdyaXRlbG4obWVzc2FnZTogc3RyaW5nKTogdm9pZDtcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgUGFyYW1SZXNvbHZlciA9ICh2YWx1ZTogc3RyaW5nLCBoZWxwZXI/OiAocGFyYW06IHN0cmluZykgPT4gYW55KSA9PiBhbnk7XHJcblxyXG5leHBvcnQgY2xhc3MgUGFyYW1ldGVyIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihyZWFkb25seSBuYW1lOiBzdHJpbmcsIHB1YmxpYyBkZWZhdWx0VmFsdWU6IGFueSwgcHVibGljIHJlc29sdmVyOiBQYXJhbVJlc29sdmVyID0gbnVsbCkge1xyXG5cclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IHR5cGUgU29ja2V0UGFyYW0gPSBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgU29ja2V0UGFyYW1zO1xyXG5cclxuZXhwb3J0IHR5cGUgU29ja2V0UGFyYW1zID0ge1xyXG4gICAgW25hbWU6IHN0cmluZ106IFNvY2tldFBhcmFtIHwgQXJyYXk8U29ja2V0UGFyYW0+O1xyXG59O1xyXG5cclxuZXhwb3J0IHR5cGUgSm9iUGFyYW1zID0gU29ja2V0UGFyYW1zO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJU29ja2V0TWVzc2FnZSB7XHJcbiAgICBtZXNzYWdlOiBzdHJpbmc7XHJcbiAgICBwYXJhbXM6IFNvY2tldFBhcmFtcztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJTWVzc2FnZUJyaWRnZSB7XHJcbiAgICBzZW5kTWVzc2FnZShtZXNzYWdlOiBzdHJpbmcsIHBhcmFtcz86IFNvY2tldFBhcmFtcyk6IHZvaWQ7XHJcbn1cclxuXHJcbi8vIC0tLSBKT0JTIC0tLVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJSm9iIHtcclxuICAgIHByb2Nlc3MobWVzc2FnaW5nPzogSU1lc3NhZ2VCcmlkZ2UpOiBQcm9taXNlPGFueT47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUpvYlRhc2sge1xyXG4gICAgc3RhcnQ6ICgpID0+IHZvaWQ7XHJcbiAgICBzdG9wOiAoKSA9PiB2b2lkO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEpvYlNjaGVkdWxlUmFuZ2Uge1xyXG4gICAgbWluOiBudW1iZXI7XHJcbiAgICBtYXg6IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgSm9iU2NoZWR1bGVUaW1lID0gc3RyaW5nIHwgbnVtYmVyIHwgSm9iU2NoZWR1bGVSYW5nZSB8IEFycmF5PHN0cmluZyB8IG51bWJlcj47XHJcblxyXG4vLyAtLS0gQ09NTUFORFMgJiBURVJNSU5BTCAtLS1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVRlcm1pbmFsRmlsZSBleHRlbmRzIElTdWdnZXN0aW9uIHtcclxuICAgIGNvbnRlbnQ/OiBzdHJpbmc7XHJcbiAgICBidWZmZXI/OiBCdWZmZXI7XHJcbiAgICBhY2NlcHQ/OiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVRlcm1pbmFsIGV4dGVuZHMgSVRlcm1pbmFsQmFzZSB7XHJcbiAgICBzdWdnZXN0RmlsZXM/KGFjY2VwdDogc3RyaW5nKTogUHJvbWlzZTxJVGVybWluYWxGaWxlW10+O1xyXG4gICAgZG93bmxvYWRGaWxlPyhmaWxlbmFtZTogc3RyaW5nLCBidWZmZXI6IEJ1ZmZlcik6IFByb21pc2U8dm9pZD47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVRlcm1pbmFsQ29tbWFuZCB7XHJcbiAgICBuYW1lPzogc3RyaW5nO1xyXG4gICAgZXhlY3V0ZShhcmdzOiBJQ29tbWFuZEFyZ3MsIHRlcm1pbmFsOiBJVGVybWluYWwsIHByb2dyZXNzOiBJUHJvZ3Jlc3NCYXIpOiBQcm9taXNlPGFueT47XHJcbiAgICBzdWdnZXN0PyhhcmdzOiBJQ29tbWFuZEFyZ3MsIHRlcm1pbmFsOiBJVGVybWluYWwpOiBQcm9taXNlPEFycmF5PHN0cmluZyB8IElTdWdnZXN0aW9uPj47XHJcbn1cclxuXHJcbi8vIC0tLSBBU1NFVFMgLS0tXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElQcm9ncmVzcyB7XHJcbiAgICBpZDogc3RyaW5nO1xyXG4gICAgY3VycmVudDogbnVtYmVyO1xyXG4gICAgbWF4OiBudW1iZXI7XHJcbiAgICBtZXNzYWdlOiBzdHJpbmc7XHJcbiAgICBlcnJvcjogc3RyaW5nO1xyXG4gICAgY2FuY2VsZWQ6IGJvb2xlYW47XHJcbiAgICBwZXJjZW50OiBudW1iZXI7XHJcbiAgICByZW1haW5pbmc6IG51bWJlcjtcclxuICAgIHNldE1lc3NhZ2VCcmlkZ2UobWVzc2FnZUJyaWRnZTogSU1lc3NhZ2VCcmlkZ2UpOiB0aGlzO1xyXG4gICAgY3JlYXRlU3ViUHJvZ3Jlc3MocHJvZ3Jlc3NWYWx1ZTogbnVtYmVyLCBtYXg/OiBudW1iZXIsIG1lc3NhZ2U/OiBzdHJpbmcpOiBQcm9taXNlPElQcm9ncmVzcz47XHJcbiAgICBzZXRNYXgobWF4OiBudW1iZXIpOiBQcm9taXNlPGFueT47XHJcbiAgICBzZXRNZXNzYWdlKG1lc3NhZ2U6IHN0cmluZyk6IFByb21pc2U8YW55PjtcclxuICAgIHNldEVycm9yKGVycm9yOiBzdHJpbmcpOiBQcm9taXNlPGFueT47XHJcbiAgICBhZHZhbmNlKHZhbHVlPzogbnVtYmVyKTogUHJvbWlzZTxhbnk+O1xyXG4gICAgY2FuY2VsKCk6IFByb21pc2U8YW55PjtcclxuICAgIHNhdmUoKTogUHJvbWlzZTxhbnk+O1xyXG4gICAgbG9hZCgpOiBQcm9taXNlPHRoaXM+O1xyXG4gICAgdG9KU09OKCk6IGFueTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJQXNzZXRDcm9wSW5mbyB7XHJcbiAgICB4OiBudW1iZXI7XHJcbiAgICB5OiBudW1iZXI7XHJcbiAgICB3OiBudW1iZXI7XHJcbiAgICBoOiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUltYWdlTWV0YSB7XHJcbiAgICBjcm9wPzogSUFzc2V0Q3JvcEluZm87XHJcbiAgICBjcm9wQmVmb3JlPzogSUFzc2V0Q3JvcEluZm87XHJcbiAgICBjcm9wQWZ0ZXI/OiBJQXNzZXRDcm9wSW5mbztcclxuICAgIGNhbnZhc1NjYWxlWD86IG51bWJlcjtcclxuICAgIGNhbnZhc1NjYWxlWT86IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJQXNzZXRNZXRhIGV4dGVuZHMgSUltYWdlTWV0YSB7XHJcbiAgICBmaWxlbmFtZT86IHN0cmluZztcclxuICAgIGV4dGVuc2lvbj86IHN0cmluZztcclxuICAgIGNsYXNzaWZpZWQ/OiBib29sZWFuO1xyXG4gICAgZG93bmxvYWRDb3VudD86IG51bWJlcjtcclxuICAgIGZpcnN0RG93bmxvYWQ/OiBEYXRlO1xyXG4gICAgbGFzdERvd25sb2FkPzogRGF0ZTtcclxuICAgIHByZXZpZXc/OiBPYmplY3RJZCB8IHN0cmluZztcclxuICAgIHB1YmxpY1VybD86IHN0cmluZztcclxuXHJcbiAgICBbcHJvcDogc3RyaW5nXTogYW55O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElBc3NldEltYWdlUGFyYW1zIHtcclxuICAgIHJvdGF0aW9uPzogbnVtYmVyO1xyXG4gICAgY2FudmFzU2NhbGVYPzogbnVtYmVyO1xyXG4gICAgY2FudmFzU2NhbGVZPzogbnVtYmVyO1xyXG4gICAgc2NhbGVYPzogbnVtYmVyO1xyXG4gICAgc2NhbGVZPzogbnVtYmVyO1xyXG4gICAgbGF6eT86IGJvb2xlYW47XHJcbiAgICBjcm9wPzogc3RyaW5nIHwgYm9vbGVhbjtcclxuICAgIGNyb3BCZWZvcmU/OiBzdHJpbmcgfCBib29sZWFuIHwgSUFzc2V0Q3JvcEluZm87XHJcbiAgICBjcm9wQWZ0ZXI/OiBzdHJpbmcgfCBib29sZWFuIHwgSUFzc2V0Q3JvcEluZm87XHJcbiAgICBba2V5OiBzdHJpbmddOiBhbnk7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUFzc2V0IHtcclxuICAgIHJlYWRvbmx5IGlkOiBzdHJpbmc7XHJcbiAgICByZWFkb25seSBmaWxlbmFtZTogc3RyaW5nO1xyXG4gICAgcmVhZG9ubHkgc3RyZWFtSWQ6IE9iamVjdElkO1xyXG4gICAgcmVhZG9ubHkgZHJpdmVySWQ6IHN0cmluZztcclxuICAgIHJlYWRvbmx5IGNvbnRlbnRUeXBlOiBzdHJpbmc7XHJcbiAgICByZWFkb25seSBtZXRhZGF0YTogSUFzc2V0TWV0YTtcclxuICAgIHJlYWRvbmx5IHN0cmVhbTogUmVhZGFibGU7XHJcbiAgICB1bmxpbmsoKTogUHJvbWlzZTxzdHJpbmc+O1xyXG4gICAgc2V0TWV0YShtZXRhOiBQYXJ0aWFsPElBc3NldE1ldGE+KTogUHJvbWlzZTxhbnk+O1xyXG4gICAgZ2V0QnVmZmVyKCk6IFByb21pc2U8QnVmZmVyPjtcclxuICAgIG1vdmUoZHJpdmVySWQ6IHN0cmluZyk6IFByb21pc2U8SUFzc2V0PjtcclxuICAgIGRvd25sb2FkKG1ldGFkYXRhPzogSUFzc2V0TWV0YSk6IFByb21pc2U8UmVhZGFibGU+O1xyXG4gICAgZG93bmxvYWRJbWFnZShwYXJhbXM/OiBJQXNzZXRJbWFnZVBhcmFtcywgbWV0YWRhdGE/OiBJQXNzZXRNZXRhKTogUHJvbWlzZTxSZWFkYWJsZT47XHJcbiAgICBnZXRJbWFnZShwYXJhbXM/OiBJQXNzZXRJbWFnZVBhcmFtcyk6IFByb21pc2U8UmVhZGFibGU+O1xyXG4gICAgc2F2ZSgpOiBQcm9taXNlPGFueT47XHJcbiAgICBsb2FkKCk6IFByb21pc2U8dGhpcz47XHJcbiAgICB0b0pTT04oKTogYW55O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElBc3NldFVwbG9hZFN0cmVhbSBleHRlbmRzIFdyaXRhYmxlIHtcclxuICAgIGlkPzogT2JqZWN0SWQ7XHJcbiAgICBkb25lPzogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJQXNzZXRVcGxvYWRPcHRzIHtcclxuICAgIGNodW5rU2l6ZUJ5dGVzPzogbnVtYmVyO1xyXG4gICAgbWV0YWRhdGE/OiBJQXNzZXRNZXRhO1xyXG4gICAgY29udGVudFR5cGU6IHN0cmluZztcclxuICAgIGV4dGVuc2lvbjogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElBc3NldERyaXZlciB7XHJcbiAgICBvcGVuVXBsb2FkU3RyZWFtKGZpbGVuYW1lOiBzdHJpbmcsIG9wdHM6IElBc3NldFVwbG9hZE9wdHMpOiBJQXNzZXRVcGxvYWRTdHJlYW07XHJcbiAgICBvcGVuRG93bmxvYWRTdHJlYW0oYXNzZXQ6IElBc3NldCk6IFJlYWRhYmxlO1xyXG4gICAgZGVsZXRlKGFzc2V0OiBJQXNzZXQpOiBQcm9taXNlPHZvaWQ+O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElBc3NldERyaXZlcnMge1xyXG4gICAgcmVhZG9ubHkgbWlzc2luZ0RyaXZlcjogc3RyaW5nO1xyXG4gICAgZ2V0RHJpdmVyKGlkOiBzdHJpbmcpOiBJQXNzZXREcml2ZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUxhenlBc3NldCB7XHJcbiAgICBpZDogc3RyaW5nO1xyXG4gICAgam9iTmFtZTogc3RyaW5nO1xyXG4gICAgam9iUGFyYW1zOiBhbnk7XHJcbiAgICBqb2JRdWU6IHN0cmluZztcclxuICAgIGNyZWF0ZWRBdDogRGF0ZTtcclxuICAgIHVwZGF0ZWRBdDogRGF0ZTtcclxuICAgIHByb2dyZXNzSWQ/OiBzdHJpbmc7XHJcbiAgICBhc3NldElkPzogc3RyaW5nO1xyXG4gICAgdW5saW5rKCk6IFByb21pc2U8c3RyaW5nPjtcclxuICAgIHN0YXJ0V29ya2luZygpOiB2b2lkO1xyXG4gICAgbG9hZEFzc2V0KCk6IFByb21pc2U8SUFzc2V0PjtcclxuICAgIHdyaXRlQXNzZXQoYXNzZXQ6IElBc3NldCk6IFByb21pc2U8SUFzc2V0PjtcclxuICAgIHNhdmUoKTogUHJvbWlzZTxhbnk+O1xyXG4gICAgbG9hZCgpOiBQcm9taXNlPHRoaXM+O1xyXG4gICAgdG9KU09OKCk6IGFueTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBBc3NldERyaXZlckZhY3RvcnlNYXAge1xyXG4gICAgW25hbWU6IHN0cmluZ106IChkaTogSURlcGVuZGVuY3lDb250YWluZXIpID0+IElBc3NldERyaXZlcjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJVXNlciB7XHJcbiAgICBfaWQ/OiBzdHJpbmc7XHJcbiAgICBpZD86IHN0cmluZztcclxuICAgIGVtYWlsPzogc3RyaW5nO1xyXG4gICAgcGFzc3dvcmQ/OiBzdHJpbmc7XHJcbiAgICByb2xlczogc3RyaW5nW107XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUNsaWVudFNvY2tldCBleHRlbmRzIFNvY2tldCB7XHJcbiAgICBpbnRlcmVzdGVkUHJvZ3Jlc3NlczogU2V0PHN0cmluZz47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVJlcXVlc3RCYXNlPFQ+IGV4dGVuZHMgUmVxdWVzdCB7XHJcbiAgICBpZD86IHN0cmluZztcclxuICAgIHN0YXJ0ZWQ/OiBNb21lbnQ7XHJcbiAgICBlbmRlZD86IE1vbWVudDtcclxuICAgIGNvbnRhaW5lcj86IERlcGVuZGVuY3lDb250YWluZXI7XHJcbiAgICBsYW5ndWFnZT86IHN0cmluZztcclxuICAgIHVzZXI/OiBUO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElSZXF1ZXN0IGV4dGVuZHMgSVJlcXVlc3RCYXNlPElVc2VyPiB7XHJcblxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElHYWxsZXJ5SW1hZ2Uge1xyXG4gICAgZm9sZGVyOiBzdHJpbmc7XHJcbiAgICB0aHVtYjogc3RyaW5nO1xyXG4gICAgYmlnOiBzdHJpbmc7XHJcbiAgICBzZXJ2ZShpZDogc3RyaW5nKTogUHJvbWlzZTxCdWZmZXI+XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUdhbGxlcnlTaXplIHtcclxuICAgIHdpZHRoPzogbnVtYmVyO1xyXG4gICAgaGVpZ2h0PzogbnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElHYWxsZXJ5SW1hZ2VIYW5kbGVyIHtcclxuICAgIGdldE9yaWdpbmFsKCk6IFByb21pc2U8QnVmZmVyPjtcclxuICAgIHdyaXRlUmVzdWx0KGlzVGh1bWI6IGJvb2xlYW4sIGJ1ZmZlcjogQnVmZmVyKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIGhhc1Jlc3VsdChpc1RodW1iOiBib29sZWFuKTogUHJvbWlzZTxib29sZWFuPjtcclxuICAgIHNlcnZlUmVzdWx0KGlzVGh1bWI6IGJvb2xlYW4pOiBQcm9taXNlPEJ1ZmZlcj47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVRyYW5zbGF0aW9ucyB7XHJcbiAgICBba2V5OiBzdHJpbmddOiBhbnk7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVBhZ2luYXRpb25NZXRhIHtcclxuICAgIHRvdGFsOiBudW1iZXI7XHJcbiAgICBba2V5OiBzdHJpbmddOiBhbnk7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVBhZ2luYXRpb25CYXNlPFQ+IHtcclxuICAgIGNvdW50OiBudW1iZXJcclxuICAgIGl0ZW1zOiBUW107XHJcbiAgICBtZXRhPzogSVBhZ2luYXRpb25NZXRhO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElQYWdpbmF0aW9uIGV4dGVuZHMgSVBhZ2luYXRpb25CYXNlPGFueT4ge1xyXG5cclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJUGFnaW5hdGlvblBhcmFtcyB7XHJcbiAgICBwYWdlOiBudW1iZXI7XHJcbiAgICBsaW1pdDogbnVtYmVyO1xyXG4gICAgc29ydD86IHN0cmluZztcclxuICAgIHBvcHVsYXRlPzogc3RyaW5nW107XHJcbiAgICBba2V5OiBzdHJpbmddOiBhbnk7XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIEZvbnRGb3JtYXQgPSBcIm9wZW50eXBlXCIgfCBcInRydWV0eXBlXCIgfCBcIndvZmZcIiB8IFwid29mZjJcIiB8IFwiZGF0YWZvcmtcIjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUZpbGVUeXBlIHtcclxuICAgIGV4dDogc3RyaW5nO1xyXG4gICAgbWltZTogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBSb3V0aW5nT3B0aW9ucyA9IFJvdXRpbmdDb250cm9sbGVyc09wdGlvbnM7XHJcblxyXG5leHBvcnQgdHlwZSBTb2NrZXRPcHRpb25zID0gT21pdDxTb2NrZXRDb250cm9sbGVyc09wdGlvbnMsIFwiY29udGFpbmVyXCI+O1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJQmFja2VuZENvbmZpZyB7XHJcbiAgICByb290Rm9sZGVyPzogc3RyaW5nO1xyXG4gICAgcm91dGVQcmVmaXg/OiBzdHJpbmc7XHJcbiAgICBwYXJhbXM/OiBQYXJhbWV0ZXJbXTtcclxuICAgIGZpeHR1cmVzPzogVHlwZTxJRml4dHVyZT5bXTtcclxuICAgIGpvYnM/OiBUeXBlPElKb2I+W107XHJcbiAgICBjb21tYW5kcz86IFR5cGU8SVRlcm1pbmFsQ29tbWFuZD5bXTtcclxuICAgIHJlc3RPcHRpb25zPzogUm91dGluZ09wdGlvbnM7XHJcbiAgICBzb2NrZXRPcHRpb25zPzogU29ja2V0T3B0aW9ucztcclxuICAgIGN1c3RvbVZhbGlkYXRpb24/OiBTY2hlbWFDb252ZXJ0ZXIgfCBTY2hlbWFPYmplY3Q7XHJcbiAgICBhc3NldExvY2FsRGlyPzogc3RyaW5nO1xyXG4gICAgYXNzZXREcml2ZXJzPzogQXNzZXREcml2ZXJGYWN0b3J5TWFwO1xyXG59XHJcbiJdfQ==