sonamu 0.7.14 → 0.7.16

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 (46) hide show
  1. package/dist/api/sonamu.d.ts.map +1 -1
  2. package/dist/api/sonamu.js +4 -3
  3. package/dist/database/base-model.d.ts +16 -6
  4. package/dist/database/base-model.d.ts.map +1 -1
  5. package/dist/database/base-model.js +44 -3
  6. package/dist/database/base-model.types.d.ts +29 -48
  7. package/dist/database/base-model.types.d.ts.map +1 -1
  8. package/dist/database/base-model.types.js +12 -2
  9. package/dist/database/puri.d.ts +2 -1
  10. package/dist/database/puri.d.ts.map +1 -1
  11. package/dist/database/puri.js +2 -1
  12. package/dist/database/puri.types.d.ts +3 -3
  13. package/dist/database/puri.types.d.ts.map +1 -1
  14. package/dist/database/puri.types.js +1 -1
  15. package/dist/entity/entity-manager.d.ts +8 -4
  16. package/dist/entity/entity-manager.d.ts.map +1 -1
  17. package/dist/entity/entity.d.ts +10 -1
  18. package/dist/entity/entity.d.ts.map +1 -1
  19. package/dist/entity/entity.js +84 -39
  20. package/dist/index.d.ts +1 -0
  21. package/dist/index.d.ts.map +1 -1
  22. package/dist/index.js +2 -1
  23. package/dist/tasks/workflow-manager.d.ts +3 -3
  24. package/dist/tasks/workflow-manager.d.ts.map +1 -1
  25. package/dist/tasks/workflow-manager.js +15 -11
  26. package/dist/template/implementations/generated.template.d.ts.map +1 -1
  27. package/dist/template/implementations/generated.template.js +8 -6
  28. package/dist/types/types.d.ts +41 -11
  29. package/dist/types/types.d.ts.map +1 -1
  30. package/dist/types/types.js +27 -3
  31. package/dist/ui/api.d.ts.map +1 -1
  32. package/dist/ui/api.js +12 -3
  33. package/dist/ui-web/assets/{index-J9MCfjCd.js → index-BcbbB-BB.js} +42 -42
  34. package/dist/ui-web/index.html +1 -1
  35. package/package.json +3 -3
  36. package/src/api/sonamu.ts +3 -2
  37. package/src/database/base-model.ts +66 -11
  38. package/src/database/base-model.types.ts +79 -76
  39. package/src/database/puri.ts +5 -1
  40. package/src/database/puri.types.ts +3 -6
  41. package/src/entity/entity.ts +83 -34
  42. package/src/index.ts +1 -0
  43. package/src/tasks/workflow-manager.ts +16 -12
  44. package/src/template/implementations/generated.template.ts +17 -3
  45. package/src/types/types.ts +31 -2
  46. package/src/ui/api.ts +11 -2
package/dist/index.d.ts CHANGED
@@ -4,6 +4,7 @@ export type * from "./api/context";
4
4
  export * from "./api/decorators";
5
5
  export * from "./api/sonamu";
6
6
  export * from "./database/base-model";
7
+ export * from "./database/base-model.types";
7
8
  export * from "./database/db";
8
9
  export * from "./database/puri";
9
10
  export * from "./database/puri.types";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,mBAAmB,eAAe,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,yBAAyB,CAAC;AACxC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iBAAiB,CAAC;AAChC,cAAc,yBAAyB,CAAC;AACxC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sBAAsB,CAAC;AACrC,cAAc,sCAAsC,CAAC;AACrD,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,wBAAwB,CAAC;AACvC,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,mBAAmB,eAAe,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,uBAAuB,CAAC;AACtC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,yBAAyB,CAAC;AACxC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iBAAiB,CAAC;AAChC,cAAc,yBAAyB,CAAC;AACxC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sBAAsB,CAAC;AACrC,cAAc,sCAAsC,CAAC;AACrD,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,wBAAwB,CAAC;AACvC,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC"}
package/dist/index.js CHANGED
@@ -3,6 +3,7 @@ export * from "./api/config.js";
3
3
  export * from "./api/decorators.js";
4
4
  export * from "./api/sonamu.js";
5
5
  export * from "./database/base-model.js";
6
+ export * from "./database/base-model.types.js";
6
7
  export * from "./database/db.js";
7
8
  export * from "./database/puri.js";
8
9
  export * from "./database/puri.types.js";
@@ -32,4 +33,4 @@ export * from "./utils/type-utils.js";
32
33
  export * from "./utils/utils.js"; // export * from "./api/code-converters";
33
34
  // export * from "./syncer/syncer";
34
35
 
35
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9hcGkvYmFzZS1mcmFtZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vYXBpL2NvbmZpZ1wiO1xuZXhwb3J0IHR5cGUgKiBmcm9tIFwiLi9hcGkvY29udGV4dFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vYXBpL2RlY29yYXRvcnNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2FwaS9zb25hbXVcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2RhdGFiYXNlL2Jhc2UtbW9kZWxcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2RhdGFiYXNlL2RiXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9kYXRhYmFzZS9wdXJpXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9kYXRhYmFzZS9wdXJpLnR5cGVzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9kYXRhYmFzZS9wdXJpLXN1YnNldC50eXBlc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZGF0YWJhc2UvcHVyaS13cmFwcGVyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9kYXRhYmFzZS91cHNlcnQtYnVpbGRlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vZW50aXR5L2VudGl0eVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9leGNlcHRpb25zL2Vycm9yLWhhbmRsZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2V4Y2VwdGlvbnMvc28tZXhjZXB0aW9uc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZmlsZS1zdG9yYWdlL2RyaXZlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbWlncmF0aW9uL21pZ3JhdGlvbi1zZXRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL21pZ3JhdGlvbi9taWdyYXRvclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbWlncmF0aW9uL3Bvc3RncmVzcWwtc2NoZW1hLXJlYWRlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbWlncmF0aW9uL3R5cGVzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9uYWl0ZS9uYWl0ZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbmFpdGUvbmFpdGUtcmVwb3J0ZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3N0cmVhbS9zc2VcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3Rhc2tzL2RlY29yYXRvclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vdGVtcGxhdGUvdGVtcGxhdGVcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3RlbXBsYXRlL3RlbXBsYXRlLW1hbmFnZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3Rlc3RpbmcvZml4dHVyZS1tYW5hZ2VyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi90eXBlcy90eXBlc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdXRpbHMvY29udHJvbGxlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vdXRpbHMvbW9kZWxcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3V0aWxzL3R5cGUtdXRpbHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3V0aWxzL3V0aWxzXCI7XG5cbi8vIGV4cG9ydCAqIGZyb20gXCIuL2FwaS9jb2RlLWNvbnZlcnRlcnNcIjtcbi8vIGV4cG9ydCAqIGZyb20gXCIuL3N5bmNlci9zeW5jZXJcIjtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHNCQUFtQjtBQUNqQyxjQUFjLGtCQUFlO0FBRTdCLGNBQWMsc0JBQW1CO0FBQ2pDLGNBQWMsa0JBQWU7QUFDN0IsY0FBYywyQkFBd0I7QUFDdEMsY0FBYyxtQkFBZ0I7QUFDOUIsY0FBYyxxQkFBa0I7QUFDaEMsY0FBYywyQkFBd0I7QUFDdEMsY0FBYyxrQ0FBK0I7QUFDN0MsY0FBYyw2QkFBMEI7QUFDeEMsY0FBYywrQkFBNEI7QUFDMUMsY0FBYyxxQkFBa0I7QUFDaEMsY0FBYyw2QkFBMEI7QUFDeEMsY0FBYyxnQ0FBNkI7QUFDM0MsY0FBYyxnQ0FBNkI7QUFDM0MsY0FBYywyQkFBd0I7QUFDdEMsY0FBYywrQkFBNEI7QUFDMUMsY0FBYywwQkFBdUI7QUFDckMsY0FBYywwQ0FBdUM7QUFDckQsY0FBYyx1QkFBb0I7QUFDbEMsY0FBYyxtQkFBZ0I7QUFDOUIsY0FBYyw0QkFBeUI7QUFDdkMsY0FBYyxrQkFBZTtBQUM3QixjQUFjLHVCQUFvQjtBQUNsQyxjQUFjLHlCQUFzQjtBQUNwQyxjQUFjLGlDQUE4QjtBQUM1QyxjQUFjLCtCQUE0QjtBQUMxQyxjQUFjLG1CQUFnQjtBQUM5QixjQUFjLHdCQUFxQjtBQUNuQyxjQUFjLG1CQUFnQjtBQUM5QixjQUFjLHdCQUFxQjtBQUNuQyxjQUFjLG1CQUFnQixDQUU5Qix5Q0FBeUM7Q0FDekMsbUNBQW1DIn0=
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9hcGkvYmFzZS1mcmFtZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vYXBpL2NvbmZpZ1wiO1xuZXhwb3J0IHR5cGUgKiBmcm9tIFwiLi9hcGkvY29udGV4dFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vYXBpL2RlY29yYXRvcnNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2FwaS9zb25hbXVcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2RhdGFiYXNlL2Jhc2UtbW9kZWxcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2RhdGFiYXNlL2Jhc2UtbW9kZWwudHlwZXNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2RhdGFiYXNlL2RiXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9kYXRhYmFzZS9wdXJpXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9kYXRhYmFzZS9wdXJpLnR5cGVzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9kYXRhYmFzZS9wdXJpLXN1YnNldC50eXBlc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZGF0YWJhc2UvcHVyaS13cmFwcGVyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9kYXRhYmFzZS91cHNlcnQtYnVpbGRlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vZW50aXR5L2VudGl0eVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9leGNlcHRpb25zL2Vycm9yLWhhbmRsZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2V4Y2VwdGlvbnMvc28tZXhjZXB0aW9uc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZmlsZS1zdG9yYWdlL2RyaXZlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbWlncmF0aW9uL21pZ3JhdGlvbi1zZXRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL21pZ3JhdGlvbi9taWdyYXRvclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbWlncmF0aW9uL3Bvc3RncmVzcWwtc2NoZW1hLXJlYWRlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbWlncmF0aW9uL3R5cGVzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9uYWl0ZS9uYWl0ZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbmFpdGUvbmFpdGUtcmVwb3J0ZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3N0cmVhbS9zc2VcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3Rhc2tzL2RlY29yYXRvclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vdGVtcGxhdGUvdGVtcGxhdGVcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3RlbXBsYXRlL3RlbXBsYXRlLW1hbmFnZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3Rlc3RpbmcvZml4dHVyZS1tYW5hZ2VyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi90eXBlcy90eXBlc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdXRpbHMvY29udHJvbGxlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vdXRpbHMvbW9kZWxcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3V0aWxzL3R5cGUtdXRpbHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3V0aWxzL3V0aWxzXCI7XG5cbi8vIGV4cG9ydCAqIGZyb20gXCIuL2FwaS9jb2RlLWNvbnZlcnRlcnNcIjtcbi8vIGV4cG9ydCAqIGZyb20gXCIuL3N5bmNlci9zeW5jZXJcIjtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHNCQUFtQjtBQUNqQyxjQUFjLGtCQUFlO0FBRTdCLGNBQWMsc0JBQW1CO0FBQ2pDLGNBQWMsa0JBQWU7QUFDN0IsY0FBYywyQkFBd0I7QUFDdEMsY0FBYyxpQ0FBOEI7QUFDNUMsY0FBYyxtQkFBZ0I7QUFDOUIsY0FBYyxxQkFBa0I7QUFDaEMsY0FBYywyQkFBd0I7QUFDdEMsY0FBYyxrQ0FBK0I7QUFDN0MsY0FBYyw2QkFBMEI7QUFDeEMsY0FBYywrQkFBNEI7QUFDMUMsY0FBYyxxQkFBa0I7QUFDaEMsY0FBYyw2QkFBMEI7QUFDeEMsY0FBYyxnQ0FBNkI7QUFDM0MsY0FBYyxnQ0FBNkI7QUFDM0MsY0FBYywyQkFBd0I7QUFDdEMsY0FBYywrQkFBNEI7QUFDMUMsY0FBYywwQkFBdUI7QUFDckMsY0FBYywwQ0FBdUM7QUFDckQsY0FBYyx1QkFBb0I7QUFDbEMsY0FBYyxtQkFBZ0I7QUFDOUIsY0FBYyw0QkFBeUI7QUFDdkMsY0FBYyxrQkFBZTtBQUM3QixjQUFjLHVCQUFvQjtBQUNsQyxjQUFjLHlCQUFzQjtBQUNwQyxjQUFjLGlDQUE4QjtBQUM1QyxjQUFjLCtCQUE0QjtBQUMxQyxjQUFjLG1CQUFnQjtBQUM5QixjQUFjLHdCQUFxQjtBQUNuQyxjQUFjLG1CQUFnQjtBQUM5QixjQUFjLHdCQUFxQjtBQUNuQyxjQUFjLG1CQUFnQixDQUU5Qix5Q0FBeUM7Q0FDekMsbUNBQW1DIn0=
@@ -19,7 +19,7 @@ export type WorkflowCreateOptions<Input, Output, TSchema extends StandardSchemaV
19
19
  };
20
20
  export declare class WorkflowManager {
21
21
  #private;
22
- private constructor();
22
+ constructor(dbConf: Knex.Config, runMigrations?: boolean);
23
23
  /**
24
24
  * 정의된 워크플로우 및 워크플로우에 대한 scheduled tasks를 동기화합니다.
25
25
  */
@@ -29,12 +29,12 @@ export declare class WorkflowManager {
29
29
  unscheduleTask(name: string): Promise<void>;
30
30
  registerWorkflow<Input, Output, TSchema extends StandardSchemaV1 | undefined = undefined>(options: WorkflowCreateOptions<Input, Output, TSchema>): RunnableWorkflow<SchemaOutput<TSchema, Input>, Output, SchemaInput<TSchema, Input>>;
31
31
  unregisterWorkflow(workflow: Pick<WorkflowMetadata, "name" | "version" | "id">): Promise<void>;
32
- setupWorker(options: WorkflowOptions): Promise<void>;
32
+ setupWorker(options: WorkflowOptions): void;
33
+ startWorker(): Promise<void>;
33
34
  stopWorker(): Promise<void>;
34
35
  stopSchedules(): Promise<void>;
35
36
  destroySchedules(): Promise<void>;
36
37
  destroy(): Promise<void>;
37
38
  [Symbol.asyncDispose](): Promise<void>;
38
- static create(dbConf: Knex.Config, runMigrations?: boolean): Promise<WorkflowManager>;
39
39
  }
40
40
  //# sourceMappingURL=workflow-manager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"workflow-manager.d.ts","sourceRoot":"","sources":["../../src/tasks/workflow-manager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,gBAAgB,EAChB,WAAW,EACX,YAAY,EACZ,gBAAgB,EAEhB,iBAAiB,EACjB,YAAY,EACb,MAAM,4BAA4B,CAAC;AAEpC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAQjC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,MAAM,WAAW,eAAe;IAE9B,WAAW,CAAC,EAAE,MAAM,CAAC;IAGrB,SAAS,CAAC,EAAE,OAAO,CAAC;IAGpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAGD,MAAM,MAAM,gBAAgB,CAAC,KAAK,EAAE,MAAM,IAAI,CAC5C,MAAM,EAAE,QAAQ,CAAC;IACf,KAAK,EAAE,KAAK,CAAC;IACb,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB,CAAC,KACC,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;AAG9B,MAAM,MAAM,qBAAqB,CAC/B,KAAK,EACL,MAAM,EACN,OAAO,SAAS,gBAAgB,GAAG,SAAS,GAAG,SAAS,IACtD,IAAI,CACN,YAAY,CAAC,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,EAC/E,SAAS,CACV,GAAG;IACF,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,EAAE,gBAAgB,CAAC,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC;CAClE,CAAC;AAEF,qBAAa,eAAe;;IAuB1B,OAAO;IAQP;;OAEG;IACG,WAAW,CAAC,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAqF9D,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,SAAS,gBAAgB,GAAG,SAAS,GAAG,SAAS,EACzE,OAAO,EAAE,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,QAAQ,GAAG,IAAI,CAAC,EAC1F,KAAK,EAAE,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC,GACjC,OAAO,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAW/B,YAAY,CAChB,QAAQ,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,GAAG,MAAM,GAAG,SAAS,CAAC,EAC3D,QAAQ,EAAE,gBAAgB,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC;IA8B3C,cAAc,CAAC,IAAI,EAAE,MAAM;IAajC,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,SAAS,gBAAgB,GAAG,SAAS,GAAG,SAAS,EACtF,OAAO,EAAE,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,GACrD,gBAAgB,CAAC,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IA4ChF,kBAAkB,CAAC,QAAQ,EAAE,IAAI,CAAC,gBAAgB,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;IAK9E,WAAW,CAAC,OAAO,EAAE,eAAe;IAMpC,UAAU;IAKV,aAAa;IAOb,gBAAgB;IAOhB,OAAO;IAOb,CAAC,MAAM,CAAC,YAAY,CAAC;WAKR,MAAM,CACjB,MAAM,EAAE,IAAI,CAAC,MAAM,EACnB,aAAa,GAAE,OAAc,GAC5B,OAAO,CAAC,eAAe,CAAC;CAI5B"}
1
+ {"version":3,"file":"workflow-manager.d.ts","sourceRoot":"","sources":["../../src/tasks/workflow-manager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,gBAAgB,EAChB,WAAW,EACX,YAAY,EACZ,gBAAgB,EAEhB,iBAAiB,EACjB,YAAY,EACb,MAAM,4BAA4B,CAAC;AAEpC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAQjC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,MAAM,WAAW,eAAe;IAE9B,WAAW,CAAC,EAAE,MAAM,CAAC;IAGrB,SAAS,CAAC,EAAE,OAAO,CAAC;IAGpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAGD,MAAM,MAAM,gBAAgB,CAAC,KAAK,EAAE,MAAM,IAAI,CAC5C,MAAM,EAAE,QAAQ,CAAC;IACf,KAAK,EAAE,KAAK,CAAC;IACb,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB,CAAC,KACC,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;AAG9B,MAAM,MAAM,qBAAqB,CAC/B,KAAK,EACL,MAAM,EACN,OAAO,SAAS,gBAAgB,GAAG,SAAS,GAAG,SAAS,IACtD,IAAI,CACN,YAAY,CAAC,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,EAC/E,SAAS,CACV,GAAG;IACF,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,EAAE,gBAAgB,CAAC,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC;CAClE,CAAC;AAEF,qBAAa,eAAe;;gBAwBd,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,aAAa,GAAE,OAAc;IAW9D;;OAEG;IACG,WAAW,CAAC,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAqF9D,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,SAAS,gBAAgB,GAAG,SAAS,GAAG,SAAS,EACzE,OAAO,EAAE,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,QAAQ,GAAG,IAAI,CAAC,EAC1F,KAAK,EAAE,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC,GACjC,OAAO,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAW/B,YAAY,CAChB,QAAQ,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,GAAG,MAAM,GAAG,SAAS,CAAC,EAC3D,QAAQ,EAAE,gBAAgB,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC;IA8B3C,cAAc,CAAC,IAAI,EAAE,MAAM;IAajC,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,SAAS,gBAAgB,GAAG,SAAS,GAAG,SAAS,EACtF,OAAO,EAAE,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,GACrD,gBAAgB,CAAC,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IA4ChF,kBAAkB,CAAC,QAAQ,EAAE,IAAI,CAAC,gBAAgB,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;IAKpF,WAAW,CAAC,OAAO,EAAE,eAAe;IAK9B,WAAW;IAUX,UAAU;IAKV,aAAa;IAOb,gBAAgB;IAOhB,OAAO;IAOb,CAAC,MAAM,CAAC,YAAY,CAAC;CAGtB"}
@@ -16,7 +16,11 @@ export class WorkflowManager {
16
16
  #workflowsMap;
17
17
  // Task 이름 -> Task 정보 및 Input 값, Workflow ID
18
18
  #scheduledTasks;
19
- constructor(backend){
19
+ // BackendPostgres에서 처리하는 것들이 있어서 Knex 커넥션이 아니라 설정값을 넣어줘야함.
20
+ constructor(dbConf, runMigrations = true){
21
+ const backend = new BackendPostgres(dbConf, {
22
+ runMigrations
23
+ });
20
24
  this.#backend = backend;
21
25
  this.#ow = new OpenWorkflow({
22
26
  backend
@@ -155,9 +159,16 @@ export class WorkflowManager {
155
159
  this.#ow.unregisterWorkflow(workflow.name, workflow.version ?? null);
156
160
  }
157
161
  // Worker를 설정 후 시작
158
- async setupWorker(options) {
162
+ setupWorker(options) {
159
163
  this.#worker = this.#ow.newWorker(options);
160
- await this.#worker.start();
164
+ }
165
+ // Worker를 초기화
166
+ async startWorker() {
167
+ if (!this.#worker) {
168
+ return;
169
+ }
170
+ await this.#backend.initialize();
171
+ await this.#worker?.start();
161
172
  }
162
173
  // Worker를 중지
163
174
  async stopWorker() {
@@ -181,13 +192,6 @@ export class WorkflowManager {
181
192
  [Symbol.asyncDispose]() {
182
193
  return this.destroy();
183
194
  }
184
- // BackendPostgres에서 처리하는 것들이 있어서 Knex 커넥션이 아니라 설정값을 넣어줘야함.
185
- static async create(dbConf, runMigrations = true) {
186
- const backend = await BackendPostgres.connect(dbConf, {
187
- runMigrations
188
- });
189
- return new WorkflowManager(backend);
190
- }
191
195
  }
192
196
 
193
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90YXNrcy93b3JrZmxvdy1tYW5hZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhY2tlbmRQb3N0Z3JlcywgT3BlbldvcmtmbG93LCB0eXBlIFdvcmtlciB9IGZyb20gXCJAc29uYW11LWtpdC90YXNrc1wiO1xuaW1wb3J0IHR5cGUge1xuICBSdW5uYWJsZVdvcmtmbG93LFxuICBTY2hlbWFJbnB1dCxcbiAgU2NoZW1hT3V0cHV0LFxuICBTdGFuZGFyZFNjaGVtYVYxLFxuICBTdGVwQXBpLFxuICBXb3JrZmxvd1J1bkhhbmRsZSxcbiAgV29ya2Zsb3dTcGVjLFxufSBmcm9tIFwiQHNvbmFtdS1raXQvdGFza3MvaW50ZXJuYWxcIjtcbmltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiO1xuaW1wb3J0IHR5cGUgeyBLbmV4IH0gZnJvbSBcImtuZXhcIjtcbmltcG9ydCB7IHNjaGVkdWxlIGFzIGNyb25TY2hlZHVsZSwgdHlwZSBTY2hlZHVsZWRUYXNrIH0gZnJvbSBcIm5vZGUtY3JvblwiO1xuaW1wb3J0IHR5cGUgeyBab2RPYmplY3QgfSBmcm9tIFwiem9kXCI7XG5pbXBvcnQgdHlwZSB7IENvbnRleHQgfSBmcm9tIFwiLi4vYXBpL2NvbnRleHRcIjtcbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi9hcGkvc29uYW11XCI7XG5pbXBvcnQgeyBOYWl0ZSB9IGZyb20gXCIuLi9uYWl0ZS9uYWl0ZVwiO1xuaW1wb3J0IHsgY3JlYXRlTW9ja1NTRUZhY3RvcnkgfSBmcm9tIFwiLi4vc3RyZWFtL3NzZVwiO1xuaW1wb3J0IHR5cGUgeyBFeGVjdXRhYmxlIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IFdvcmtmbG93TWV0YWRhdGEgfSBmcm9tIFwiLi9kZWNvcmF0b3JcIjtcbmltcG9ydCB7IFN0ZXBXcmFwcGVyIH0gZnJvbSBcIi4vc3RlcC13cmFwcGVyXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgV29ya2Zsb3dPcHRpb25zIHtcbiAgLy8gd29ya2Vy7JeQ7IScIOuPmeyLnCDsi6TtlontlaAg7YOc7Iqk7YGsIOyImCwg6riw67O47J2AIENQVSDsvZTslrQg7IiYIC0gMeqwnFxuICBjb25jdXJyZW5jeT86IG51bWJlcjtcblxuICAvLyB3b3JrZXLsl5DshJwg7IKs7Jqp7ZWgIHB1Yi9zdWIg7Jes67aALCDquLDrs7jsnYAgdHJ1ZVxuICB1c2VQdWJTdWI/OiBib29sZWFuO1xuXG4gIC8vIHB1Yi9zdWLsnLzroZwg7YOc7Iqk7YGs66W8IOyImOyLoO2WiOydhCDrlYwg7JuM7YGs7ZSM66Gc7JqwIOyLpO2Wieq5jOyngCDsp4Dsl7Ag7Iuc6rCELCDquLDrs7jsnYAgNTAwbXNcbiAgbGlzdGVuRGVsYXk/OiBudW1iZXI7XG59XG5cbi8vIFdvcmtmbG93IO2VqOyImOydmCDtg4DsnoUsIEBzb25hbXUta2l0L3Rhc2tz7JmAIOuLpOuluCDsoJDsnYAgc3RlcOydhCDtlZzrsogg6rCQ7Iu8IO2Yle2DnC5cbmV4cG9ydCB0eXBlIFdvcmtmbG93RnVuY3Rpb248SW5wdXQsIE91dHB1dD4gPSAoXG4gIHBhcmFtczogUmVhZG9ubHk8e1xuICAgIGlucHV0OiBJbnB1dDtcbiAgICBzdGVwOiBTdGVwV3JhcHBlcjtcbiAgICB2ZXJzaW9uOiBzdHJpbmcgfCBudWxsO1xuICB9PixcbikgPT4gUHJvbWlzZTxPdXRwdXQ+IHwgT3V0cHV0O1xuXG4vLyBXb3JrZmxvd+ulvCDrk7HroZ3tlaAg65WM66W8IOychO2VnCDtg4DsnoVcbmV4cG9ydCB0eXBlIFdvcmtmbG93Q3JlYXRlT3B0aW9uczxcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgVFNjaGVtYSBleHRlbmRzIFN0YW5kYXJkU2NoZW1hVjEgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQsXG4+ID0gT21pdDxcbiAgV29ya2Zsb3dTcGVjPFNjaGVtYU91dHB1dDxUU2NoZW1hLCBJbnB1dD4sIE91dHB1dCwgU2NoZW1hSW5wdXQ8VFNjaGVtYSwgSW5wdXQ+PixcbiAgXCJ2ZXJzaW9uXCJcbj4gJiB7XG4gIGlkOiBzdHJpbmc7XG4gIHZlcnNpb246IHN0cmluZyB8IG51bGw7XG4gIGZ1bmN0aW9uOiBXb3JrZmxvd0Z1bmN0aW9uPFNjaGVtYU91dHB1dDxUU2NoZW1hLCBJbnB1dD4sIE91dHB1dD47XG59O1xuXG5leHBvcnQgY2xhc3MgV29ya2Zsb3dNYW5hZ2VyIHtcbiAgLy8gYmFja2VuZCDsnbjsiqTthLTsiqRcbiAgcmVhZG9ubHkgI2JhY2tlbmQ6IEJhY2tlbmRQb3N0Z3JlcztcblxuICAvLyBPcGVuV29ya2Zsb3cg7J247Iqk7YS07IqkXG4gIHJlYWRvbmx5ICNvdzogT3BlbldvcmtmbG93O1xuXG4gIC8vIFdvcmtlciDsnbjsiqTthLTsiqQgKOyXhuydhCDsiJgg7J6I7Jy866mwLCDsnbQg65WM64qUIOu2hOyCsOuQnCDshJzrsoQg7ZmY6rK97JeQ7IScIERC7JeQIHB1Ymxpc2jrp4wg7ZWc64uk6rOgIOqwgOygle2VqClcbiAgI3dvcmtlcjogV29ya2VyIHwgbnVsbDtcblxuICAvLyDtjIzsnbwg6rK966GcIC0+IO2MjOydvOyXkCDsoJXsnZjrkJwg7JuM7YGs7ZSM66Gc7JqwIOuplO2DgOuNsOydtO2EsCDrqqnroZ1cbiAgI3dvcmtmbG93c01hcDogTWFwPHN0cmluZywgV29ya2Zsb3dNZXRhZGF0YVtdPjtcblxuICAvLyBUYXNrIOydtOumhCAtPiBUYXNrIOygleuztCDrsI8gSW5wdXQg6rCSLCBXb3JrZmxvdyBJRFxuICAjc2NoZWR1bGVkVGFza3M6IE1hcDxcbiAgICBzdHJpbmcsXG4gICAge1xuICAgICAgdGFzazogU2NoZWR1bGVkVGFzaztcbiAgICAgIGlucHV0Rm46IEV4ZWN1dGFibGU8U2NoZW1hSW5wdXQ8dW5rbm93biwgdW5rbm93bj4+O1xuICAgICAgd29ya2Zsb3dJZDogc3RyaW5nO1xuICAgIH1cbiAgPjtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKGJhY2tlbmQ6IEJhY2tlbmRQb3N0Z3Jlcykge1xuICAgIHRoaXMuI2JhY2tlbmQgPSBiYWNrZW5kO1xuICAgIHRoaXMuI293ID0gbmV3IE9wZW5Xb3JrZmxvdyh7IGJhY2tlbmQgfSk7XG4gICAgdGhpcy4jd29ya2VyID0gbnVsbDtcbiAgICB0aGlzLiN3b3JrZmxvd3NNYXAgPSBuZXcgTWFwKCk7XG4gICAgdGhpcy4jc2NoZWR1bGVkVGFza3MgPSBuZXcgTWFwKCk7XG4gIH1cblxuICAvKipcbiAgICog7KCV7J2Y65CcIOybjO2BrO2UjOuhnOyasCDrsI8g7JuM7YGs7ZSM66Gc7Jqw7JeQIOuMgO2VnCBzY2hlZHVsZWQgdGFza3Prpbwg64+Z6riw7ZmU7ZWp64uI64ukLlxuICAgKi9cbiAgYXN5bmMgc3luY2hyb25pemUod29ya2Zsb3dNYXA6IE1hcDxzdHJpbmcsIFdvcmtmbG93TWV0YWRhdGFbXT4pIHtcbiAgICAvLyAxLiDsgq3soJzrkJwg7YyM7J287J2AIOydvOq0hCDsgq3soJxcbiAgICBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoXG4gICAgICBBcnJheS5mcm9tKHRoaXMuI3dvcmtmbG93c01hcC5lbnRyaWVzKCkpXG4gICAgICAgIC5maWx0ZXIoKFtrZXldKSA9PiAhd29ya2Zsb3dNYXAuaGFzKGtleSkpXG4gICAgICAgIC5mbGF0TWFwKChbXywgd29ya2Zsb3dzXSkgPT5cbiAgICAgICAgICB3b3JrZmxvd3MubWFwKCh3b3JrZmxvdykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsU2V0dGxlZChbXG4gICAgICAgICAgICAgIC4uLndvcmtmbG93LnNjaGVkdWxlcy5tYXAoKHNjaGVkdWxlKSA9PiB0aGlzLnVuc2NoZWR1bGVUYXNrKHNjaGVkdWxlLm5hbWUpKSxcbiAgICAgICAgICAgICAgdGhpcy51bnJlZ2lzdGVyV29ya2Zsb3cod29ya2Zsb3cpLFxuICAgICAgICAgICAgXSk7XG4gICAgICAgICAgfSksXG4gICAgICAgICksXG4gICAgKTtcblxuICAgIC8vIDIuIOyDiOuhnCDstpTqsIDrkJwg7YyM7J287J2AIOydvOq0hCDrk7HroZ1cbiAgICBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoXG4gICAgICBBcnJheS5mcm9tKHdvcmtmbG93TWFwLmVudHJpZXMoKSlcbiAgICAgICAgLmZpbHRlcigoW2tleV0pID0+ICF0aGlzLiN3b3JrZmxvd3NNYXAuaGFzKGtleSkpXG4gICAgICAgIC5mbGF0TWFwKChbXywgd29ya2Zsb3dzXSkgPT5cbiAgICAgICAgICB3b3JrZmxvd3MubWFwKCh3b3JrZmxvdykgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZWdpc3RlcldvcmtmbG93KHtcbiAgICAgICAgICAgICAgaWQ6IHdvcmtmbG93LmlkLFxuICAgICAgICAgICAgICBuYW1lOiB3b3JrZmxvdy5uYW1lLFxuICAgICAgICAgICAgICB2ZXJzaW9uOiB3b3JrZmxvdy52ZXJzaW9uID8/IG51bGwsXG4gICAgICAgICAgICAgIHNjaGVtYTogd29ya2Zsb3cuc2NoZW1hLFxuICAgICAgICAgICAgICBmdW5jdGlvbjogd29ya2Zsb3cuZm4sXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsU2V0dGxlZChcbiAgICAgICAgICAgICAgd29ya2Zsb3cuc2NoZWR1bGVzLm1hcCgoc2NoZWR1bGUpID0+IHRoaXMuc2NoZWR1bGVUYXNrKHdvcmtmbG93LCBzY2hlZHVsZSkpLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgKSxcbiAgICApO1xuXG4gICAgLy8gMy4g6riw7KG06rO8IOuLpOuluCDqsoPsnYQgZGlmZuy5nCDri6TsnYwsIOyCreygnCDtm4Qg7J6s65Ox66GdXG4gICAgYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKFxuICAgICAgQXJyYXkuZnJvbSh3b3JrZmxvd01hcC5lbnRyaWVzKCkpXG4gICAgICAgIC5maWx0ZXIoKFtrZXldKSA9PiB0aGlzLiN3b3JrZmxvd3NNYXAuaGFzKGtleSkpXG4gICAgICAgIC5tYXA8W3N0cmluZywgW1dvcmtmbG93TWV0YWRhdGFbXSwgV29ya2Zsb3dNZXRhZGF0YVtdXV0+KChba2V5LCBuZXdXb3JrZmxvd3NdKSA9PiB7XG4gICAgICAgICAgY29uc3QgcHJldmlvdXNXb3JrZmxvd3MgPSB0aGlzLiN3b3JrZmxvd3NNYXAuZ2V0KGtleSk7XG4gICAgICAgICAgYXNzZXJ0KHByZXZpb3VzV29ya2Zsb3dzLCBcInByZXZpb3VzIHdvcmtmbG93cyBub3QgZm91bmRcIik7XG4gICAgICAgICAgcmV0dXJuIFtrZXksIFtwcmV2aW91c1dvcmtmbG93cywgbmV3V29ya2Zsb3dzXV07XG4gICAgICAgIH0pXG4gICAgICAgIC5tYXAoYXN5bmMgKFtfLCBbcHJldmlvdXNXb3JrZmxvd3MsIG5ld1dvcmtmbG93c11dKSA9PiB7XG4gICAgICAgICAgLy8g6riw7KG0IOqyg+uTpOydhCDsgq3soJzrtoDthLAg7ZW07JW87ZWoLlxuICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChcbiAgICAgICAgICAgIHByZXZpb3VzV29ya2Zsb3dzXG4gICAgICAgICAgICAgIC5maWx0ZXIoKHByZXZJdGVtKSA9PiAhbmV3V29ya2Zsb3dzLnNvbWUoKG5ld0l0ZW0pID0+IG5ld0l0ZW0uaWQgPT09IHByZXZJdGVtLmlkKSlcbiAgICAgICAgICAgICAgLm1hcCgocHJldkl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGxTZXR0bGVkKFtcbiAgICAgICAgICAgICAgICAgIC4uLnByZXZJdGVtLnNjaGVkdWxlcy5tYXAoKHNjaGVkdWxlKSA9PiB0aGlzLnVuc2NoZWR1bGVUYXNrKHNjaGVkdWxlLm5hbWUpKSxcbiAgICAgICAgICAgICAgICAgIHRoaXMudW5yZWdpc3RlcldvcmtmbG93KHByZXZJdGVtKSxcbiAgICAgICAgICAgICAgICBdKTtcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIC8vIOyDiOuhnCDstpTqsIDrkJwg6rKD65Ok7J2EIOuTseuhnVxuICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChcbiAgICAgICAgICAgIG5ld1dvcmtmbG93c1xuICAgICAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgICAgIChuZXdJdGVtKSA9PiAhcHJldmlvdXNXb3JrZmxvd3Muc29tZSgocHJldkl0ZW0pID0+IHByZXZJdGVtLmlkID09PSBuZXdJdGVtLmlkKSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAubWFwKGFzeW5jIChuZXdJdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWdpc3RlcldvcmtmbG93KHtcbiAgICAgICAgICAgICAgICAgIGlkOiBuZXdJdGVtLmlkLFxuICAgICAgICAgICAgICAgICAgbmFtZTogbmV3SXRlbS5uYW1lLFxuICAgICAgICAgICAgICAgICAgdmVyc2lvbjogbmV3SXRlbS52ZXJzaW9uID8/IG51bGwsXG4gICAgICAgICAgICAgICAgICBzY2hlbWE6IG5ld0l0ZW0uc2NoZW1hLFxuICAgICAgICAgICAgICAgICAgZnVuY3Rpb246IG5ld0l0ZW0uZm4sXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGxTZXR0bGVkKFxuICAgICAgICAgICAgICAgICAgbmV3SXRlbS5zY2hlZHVsZXMubWFwKChzY2hlZHVsZSkgPT4gdGhpcy5zY2hlZHVsZVRhc2sobmV3SXRlbSwgc2NoZWR1bGUpKSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICApO1xuICAgICAgICB9KSxcbiAgICApO1xuXG4gICAgdGhpcy4jd29ya2Zsb3dzTWFwID0gd29ya2Zsb3dNYXA7XG4gIH1cblxuICAvLyDsm4ztgaztlIzroZzsmrDrpbwg7Iuk7ZaJXG4gIHJ1bjxJbnB1dCwgT3V0cHV0LCBUU2NoZW1hIGV4dGVuZHMgU3RhbmRhcmRTY2hlbWFWMSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZD4oXG4gICAgb3B0aW9uczogT21pdDxXb3JrZmxvd0NyZWF0ZU9wdGlvbnM8SW5wdXQsIE91dHB1dCwgVFNjaGVtYT4sIFwiZnVuY3Rpb25cIiB8IFwic2NoZW1hXCIgfCBcImlkXCI+LFxuICAgIGlucHV0OiBTY2hlbWFJbnB1dDxUU2NoZW1hLCBJbnB1dD4sXG4gICk6IFByb21pc2U8V29ya2Zsb3dSdW5IYW5kbGU8T3V0cHV0Pj4ge1xuICAgIHJldHVybiB0aGlzLiNvdy5ydW5Xb3JrZmxvdyhcbiAgICAgIHtcbiAgICAgICAgbmFtZTogb3B0aW9ucy5uYW1lLFxuICAgICAgICB2ZXJzaW9uOiBvcHRpb25zLnZlcnNpb24gPz8gdW5kZWZpbmVkLFxuICAgICAgfSxcbiAgICAgIGlucHV0LFxuICAgICk7XG4gIH1cblxuICAvLyBjcm9uIHRhc2vrpbwg65Ox66GdXG4gIGFzeW5jIHNjaGVkdWxlVGFzayhcbiAgICB3b3JrZmxvdzogUGljazxXb3JrZmxvd01ldGFkYXRhLCBcImlkXCIgfCBcIm5hbWVcIiB8IFwidmVyc2lvblwiPixcbiAgICBzY2hlZHVsZTogV29ya2Zsb3dNZXRhZGF0YVtcInNjaGVkdWxlc1wiXVtudW1iZXJdLFxuICApIHtcbiAgICBjb25zdCB0YXNrID0gY3JvblNjaGVkdWxlKFxuICAgICAgc2NoZWR1bGUuZXhwcmVzc2lvbixcbiAgICAgIChhc3luYyAoXG4gICAgICAgIHsgbmFtZSwgdmVyc2lvbiB9OiBQaWNrPFdvcmtmbG93TWV0YWRhdGEsIFwibmFtZVwiIHwgXCJ2ZXJzaW9uXCI+LFxuICAgICAgICB7IGlucHV0IH06IFdvcmtmbG93TWV0YWRhdGFbXCJzY2hlZHVsZXNcIl1bbnVtYmVyXSxcbiAgICAgICkgPT4ge1xuICAgICAgICBjb25zdCBpbnB1dERhdGEgPSBhd2FpdCAodHlwZW9mIGlucHV0ID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICA/IFByb21pc2UucmVzb2x2ZShpbnB1dCgpKVxuICAgICAgICAgIDogUHJvbWlzZS5yZXNvbHZlKGlucHV0KSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMucnVuKHsgbmFtZSwgdmVyc2lvbjogdmVyc2lvbiA/PyBudWxsIH0sIGlucHV0RGF0YSk7XG4gICAgICB9KS5iaW5kKHRoaXMsIHdvcmtmbG93LCBzY2hlZHVsZSksXG4gICAgICB7XG4gICAgICAgIG5hbWU6IHNjaGVkdWxlLm5hbWUsXG4gICAgICAgIHRpbWV6b25lOiBTb25hbXUuY29uZmlnLmFwaS50aW1lem9uZSxcbiAgICAgICAgbm9PdmVybGFwOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIHRoaXMuI3NjaGVkdWxlZFRhc2tzLnNldChzY2hlZHVsZS5uYW1lLCB7XG4gICAgICB0YXNrLFxuICAgICAgaW5wdXRGbjogc2NoZWR1bGUuaW5wdXQsXG4gICAgICB3b3JrZmxvd0lkOiB3b3JrZmxvdy5pZCxcbiAgICB9KTtcbiAgICBhd2FpdCB0YXNrLnN0YXJ0KCk7XG4gIH1cblxuICAvLyBjcm9uIHRhc2vrpbwg7KSR7KeAXG4gIGFzeW5jIHVuc2NoZWR1bGVUYXNrKG5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IHRhc2tJdGVtID0gdGhpcy4jc2NoZWR1bGVkVGFza3MuZ2V0KG5hbWUpO1xuICAgIGlmICghdGFza0l0ZW0pIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJzY2hlZHVsZWQgdGFzayBub3QgZm91bmRcIiwgbmFtZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy4jc2NoZWR1bGVkVGFza3MuZGVsZXRlKG5hbWUpO1xuICAgIGF3YWl0IHRhc2tJdGVtLnRhc2suc3RvcCgpO1xuICAgIGF3YWl0IHRhc2tJdGVtLnRhc2suZGVzdHJveSgpO1xuICB9XG5cbiAgLy8g7JuM7YGs7ZSM66Gc7Jqw66W8IOuTseuhnSwg6rSA66Co65CcIOyKpOy8gOykhOydgCDrs4Trj4TroZwg65Ox66Gd7ZW07JW8IO2VqC5cbiAgcmVnaXN0ZXJXb3JrZmxvdzxJbnB1dCwgT3V0cHV0LCBUU2NoZW1hIGV4dGVuZHMgU3RhbmRhcmRTY2hlbWFWMSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZD4oXG4gICAgb3B0aW9uczogV29ya2Zsb3dDcmVhdGVPcHRpb25zPElucHV0LCBPdXRwdXQsIFRTY2hlbWE+LFxuICApOiBSdW5uYWJsZVdvcmtmbG93PFNjaGVtYU91dHB1dDxUU2NoZW1hLCBJbnB1dD4sIE91dHB1dCwgU2NoZW1hSW5wdXQ8VFNjaGVtYSwgSW5wdXQ+PiB7XG4gICAgY29uc3QgZm4gPSBhc3luYyAoXG4gICAgICBwYXJhbXM6IFJlYWRvbmx5PHtcbiAgICAgICAgaW5wdXQ6IFNjaGVtYU91dHB1dDxUU2NoZW1hLCBJbnB1dD47XG4gICAgICAgIHN0ZXA6IFN0ZXBBcGk7XG4gICAgICAgIHZlcnNpb246IHN0cmluZyB8IG51bGw7XG4gICAgICB9PixcbiAgICApID0+IHtcbiAgICAgIGNvbnN0IGJhc2VDb250ZXh0ID0ge1xuICAgICAgICByZXF1ZXN0OiBudWxsLFxuICAgICAgICByZXBseTogbnVsbCxcbiAgICAgICAgaGVhZGVyczoge30sXG4gICAgICAgIGNyZWF0ZVNTRTogKHNjaGVtYTogWm9kT2JqZWN0KSA9PiBjcmVhdGVNb2NrU1NFRmFjdG9yeShzY2hlbWEpLFxuICAgICAgICBuYWl0ZVN0b3JlOiBOYWl0ZS5jcmVhdGVTdG9yZSgpLFxuICAgICAgICB1c2VyOiBudWxsLFxuICAgICAgICBwYXNzcG9ydDoge1xuICAgICAgICAgIGxvZ2luOiBhc3luYyAoKSA9PiB7fSxcbiAgICAgICAgICBsb2dvdXQ6ICgpID0+IHt9LFxuICAgICAgICB9LFxuICAgICAgfSBhcyB1bmtub3duIGFzIENvbnRleHQ7XG5cbiAgICAgIGNvbnN0IGNvbnRleHRQcm92aWRlciA9IFNvbmFtdS5jb25maWcudGFza3M/LmNvbnRleHRQcm92aWRlcjtcbiAgICAgIGNvbnN0IGNvbnRleHQ6IENvbnRleHQgPSBjb250ZXh0UHJvdmlkZXJcbiAgICAgICAgPyBhd2FpdCBQcm9taXNlLnJlc29sdmUoY29udGV4dFByb3ZpZGVyKGJhc2VDb250ZXh0KSlcbiAgICAgICAgOiBiYXNlQ29udGV4dDtcblxuICAgICAgY29uc3Qgc3RlcCA9IG5ldyBTdGVwV3JhcHBlcihwYXJhbXMuc3RlcCk7XG4gICAgICByZXR1cm4gU29uYW11LmFzeW5jTG9jYWxTdG9yYWdlLnJ1bih7IGNvbnRleHQgfSwgKCkgPT5cbiAgICAgICAgb3B0aW9ucy5mdW5jdGlvbih7IGlucHV0OiBwYXJhbXMuaW5wdXQsIHN0ZXAsIHZlcnNpb246IHBhcmFtcy52ZXJzaW9uIH0pLFxuICAgICAgKTtcbiAgICB9O1xuXG4gICAgY29uc3Qgd29ya2Zsb3cgPSB0aGlzLiNvdy5kZWZpbmVXb3JrZmxvdyhcbiAgICAgIHtcbiAgICAgICAgbmFtZTogb3B0aW9ucy5uYW1lLFxuICAgICAgICB2ZXJzaW9uOiBvcHRpb25zLnZlcnNpb24gPz8gdW5kZWZpbmVkLFxuICAgICAgICBzY2hlbWE6IG9wdGlvbnMuc2NoZW1hLFxuICAgICAgfSxcbiAgICAgIGZuLFxuICAgICk7XG4gICAgcmV0dXJuIHdvcmtmbG93O1xuICB9XG5cbiAgLy8g7JuM7YGs7ZSM66Gc7Jqw66W8IOuTseuhnSDtlbTsoJwsIOq0gOugqOuQnCDsiqTsvIDspITsnYAg67OE64+E66GcIO2VtOygnO2VtOyVvCDtlaguXG4gIGFzeW5jIHVucmVnaXN0ZXJXb3JrZmxvdyh3b3JrZmxvdzogUGljazxXb3JrZmxvd01ldGFkYXRhLCBcIm5hbWVcIiB8IFwidmVyc2lvblwiIHwgXCJpZFwiPikge1xuICAgIHRoaXMuI293LnVucmVnaXN0ZXJXb3JrZmxvdyh3b3JrZmxvdy5uYW1lLCB3b3JrZmxvdy52ZXJzaW9uID8/IG51bGwpO1xuICB9XG5cbiAgLy8gV29ya2Vy66W8IOyEpOyglSDtm4Qg7Iuc7J6RXG4gIGFzeW5jIHNldHVwV29ya2VyKG9wdGlvbnM6IFdvcmtmbG93T3B0aW9ucykge1xuICAgIHRoaXMuI3dvcmtlciA9IHRoaXMuI293Lm5ld1dvcmtlcihvcHRpb25zKTtcbiAgICBhd2FpdCB0aGlzLiN3b3JrZXIuc3RhcnQoKTtcbiAgfVxuXG4gIC8vIFdvcmtlcuulvCDspJHsp4BcbiAgYXN5bmMgc3RvcFdvcmtlcigpIHtcbiAgICBhd2FpdCB0aGlzLiN3b3JrZXI/LnN0b3AoKTtcbiAgfVxuXG4gIC8vIGNyb24gdGFza+uTpOydhCDrqqjrkZAg7KSR7KeAXG4gIGFzeW5jIHN0b3BTY2hlZHVsZXMoKSB7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKFxuICAgICAgQXJyYXkuZnJvbSh0aGlzLiNzY2hlZHVsZWRUYXNrcy52YWx1ZXMoKSkubWFwKCh7IHRhc2sgfSkgPT4gUHJvbWlzZS5yZXNvbHZlKHRhc2suc3RvcCgpKSksXG4gICAgKTtcbiAgfVxuXG4gIC8vIGNyb24gdGFza+uTpOydhCDrqqjrkZAg7KCV66asXG4gIGFzeW5jIGRlc3Ryb3lTY2hlZHVsZXMoKSB7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKFxuICAgICAgQXJyYXkuZnJvbSh0aGlzLiNzY2hlZHVsZWRUYXNrcy52YWx1ZXMoKSkubWFwKCh7IHRhc2sgfSkgPT4gUHJvbWlzZS5yZXNvbHZlKHRhc2suZGVzdHJveSgpKSksXG4gICAgKTtcbiAgICB0aGlzLiNzY2hlZHVsZWRUYXNrcy5jbGVhcigpO1xuICB9XG5cbiAgYXN5bmMgZGVzdHJveSgpIHtcbiAgICBhd2FpdCB0aGlzLnN0b3BTY2hlZHVsZXMoKTtcbiAgICBhd2FpdCB0aGlzLnN0b3BXb3JrZXIoKTtcbiAgICBhd2FpdCB0aGlzLmRlc3Ryb3lTY2hlZHVsZXMoKTtcbiAgICBhd2FpdCB0aGlzLiNiYWNrZW5kLnN0b3AoKTtcbiAgfVxuXG4gIFtTeW1ib2wuYXN5bmNEaXNwb3NlXSgpIHtcbiAgICByZXR1cm4gdGhpcy5kZXN0cm95KCk7XG4gIH1cblxuICAvLyBCYWNrZW5kUG9zdGdyZXPsl5DshJwg7LKY66as7ZWY64qUIOqyg+uTpOydtCDsnojslrTshJwgS25leCDsu6TrhKXshZjsnbQg7JWE64uI6528IOyEpOygleqwkuydhCDrhKPslrTspJjslbztlaguXG4gIHN0YXRpYyBhc3luYyBjcmVhdGUoXG4gICAgZGJDb25mOiBLbmV4LkNvbmZpZyxcbiAgICBydW5NaWdyYXRpb25zOiBib29sZWFuID0gdHJ1ZSxcbiAgKTogUHJvbWlzZTxXb3JrZmxvd01hbmFnZXI+IHtcbiAgICBjb25zdCBiYWNrZW5kID0gYXdhaXQgQmFja2VuZFBvc3RncmVzLmNvbm5lY3QoZGJDb25mLCB7IHJ1bk1pZ3JhdGlvbnMgfSk7XG4gICAgcmV0dXJuIG5ldyBXb3JrZmxvd01hbmFnZXIoYmFja2VuZCk7XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJCYWNrZW5kUG9zdGdyZXMiLCJPcGVuV29ya2Zsb3ciLCJhc3NlcnQiLCJzY2hlZHVsZSIsImNyb25TY2hlZHVsZSIsIlNvbmFtdSIsIk5haXRlIiwiY3JlYXRlTW9ja1NTRUZhY3RvcnkiLCJTdGVwV3JhcHBlciIsIldvcmtmbG93TWFuYWdlciIsImJhY2tlbmQiLCJNYXAiLCJzeW5jaHJvbml6ZSIsIndvcmtmbG93TWFwIiwiUHJvbWlzZSIsImFsbFNldHRsZWQiLCJBcnJheSIsImZyb20iLCJlbnRyaWVzIiwiZmlsdGVyIiwia2V5IiwiaGFzIiwiZmxhdE1hcCIsIl8iLCJ3b3JrZmxvd3MiLCJtYXAiLCJ3b3JrZmxvdyIsInNjaGVkdWxlcyIsInVuc2NoZWR1bGVUYXNrIiwibmFtZSIsInVucmVnaXN0ZXJXb3JrZmxvdyIsInJlZ2lzdGVyV29ya2Zsb3ciLCJpZCIsInZlcnNpb24iLCJzY2hlbWEiLCJmdW5jdGlvbiIsImZuIiwic2NoZWR1bGVUYXNrIiwibmV3V29ya2Zsb3dzIiwicHJldmlvdXNXb3JrZmxvd3MiLCJnZXQiLCJwcmV2SXRlbSIsInNvbWUiLCJuZXdJdGVtIiwicnVuIiwib3B0aW9ucyIsImlucHV0IiwicnVuV29ya2Zsb3ciLCJ1bmRlZmluZWQiLCJ0YXNrIiwiZXhwcmVzc2lvbiIsImlucHV0RGF0YSIsInJlc29sdmUiLCJiaW5kIiwidGltZXpvbmUiLCJjb25maWciLCJhcGkiLCJub092ZXJsYXAiLCJzZXQiLCJpbnB1dEZuIiwid29ya2Zsb3dJZCIsInN0YXJ0IiwidGFza0l0ZW0iLCJjb25zb2xlIiwiZXJyb3IiLCJkZWxldGUiLCJzdG9wIiwiZGVzdHJveSIsInBhcmFtcyIsImJhc2VDb250ZXh0IiwicmVxdWVzdCIsInJlcGx5IiwiaGVhZGVycyIsImNyZWF0ZVNTRSIsIm5haXRlU3RvcmUiLCJjcmVhdGVTdG9yZSIsInVzZXIiLCJwYXNzcG9ydCIsImxvZ2luIiwibG9nb3V0IiwiY29udGV4dFByb3ZpZGVyIiwidGFza3MiLCJjb250ZXh0Iiwic3RlcCIsImFzeW5jTG9jYWxTdG9yYWdlIiwiZGVmaW5lV29ya2Zsb3ciLCJzZXR1cFdvcmtlciIsIm5ld1dvcmtlciIsInN0b3BXb3JrZXIiLCJzdG9wU2NoZWR1bGVzIiwidmFsdWVzIiwiZGVzdHJveVNjaGVkdWxlcyIsImNsZWFyIiwiU3ltYm9sIiwiYXN5bmNEaXNwb3NlIiwiY3JlYXRlIiwiZGJDb25mIiwicnVuTWlncmF0aW9ucyIsImNvbm5lY3QiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLGVBQWUsRUFBRUMsWUFBWSxRQUFxQixvQkFBb0I7QUFVL0UsT0FBT0MsWUFBWSxTQUFTO0FBRTVCLFNBQVNDLFlBQVlDLFlBQVksUUFBNEIsWUFBWTtBQUd6RSxTQUFTQyxNQUFNLFFBQVEsbUJBQWdCO0FBQ3ZDLFNBQVNDLEtBQUssUUFBUSxvQkFBaUI7QUFDdkMsU0FBU0Msb0JBQW9CLFFBQVEsbUJBQWdCO0FBR3JELFNBQVNDLFdBQVcsUUFBUSxvQkFBaUI7QUFvQzdDLE9BQU8sTUFBTUM7SUFDWCxlQUFlO0lBQ04sQ0FBQSxPQUFRLENBQWtCO0lBRW5DLG9CQUFvQjtJQUNYLENBQUEsRUFBRyxDQUFlO0lBRTNCLGdFQUFnRTtJQUNoRSxDQUFBLE1BQU8sQ0FBZ0I7SUFFdkIsa0NBQWtDO0lBQ2xDLENBQUEsWUFBYSxDQUFrQztJQUUvQyw0Q0FBNEM7SUFDNUMsQ0FBQSxjQUFlLENBT2I7SUFFRixZQUFvQkMsT0FBd0IsQ0FBRTtRQUM1QyxJQUFJLENBQUMsQ0FBQSxPQUFRLEdBQUdBO1FBQ2hCLElBQUksQ0FBQyxDQUFBLEVBQUcsR0FBRyxJQUFJVCxhQUFhO1lBQUVTO1FBQVE7UUFDdEMsSUFBSSxDQUFDLENBQUEsTUFBTyxHQUFHO1FBQ2YsSUFBSSxDQUFDLENBQUEsWUFBYSxHQUFHLElBQUlDO1FBQ3pCLElBQUksQ0FBQyxDQUFBLGNBQWUsR0FBRyxJQUFJQTtJQUM3QjtJQUVBOztHQUVDLEdBQ0QsTUFBTUMsWUFBWUMsV0FBNEMsRUFBRTtRQUM5RCxtQkFBbUI7UUFDbkIsTUFBTUMsUUFBUUMsVUFBVSxDQUN0QkMsTUFBTUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBLFlBQWEsQ0FBQ0MsT0FBTyxJQUNsQ0MsTUFBTSxDQUFDLENBQUMsQ0FBQ0MsSUFBSSxHQUFLLENBQUNQLFlBQVlRLEdBQUcsQ0FBQ0QsTUFDbkNFLE9BQU8sQ0FBQyxDQUFDLENBQUNDLEdBQUdDLFVBQVUsR0FDdEJBLFVBQVVDLEdBQUcsQ0FBQyxDQUFDQztnQkFDYixPQUFPWixRQUFRQyxVQUFVLENBQUM7dUJBQ3JCVyxTQUFTQyxTQUFTLENBQUNGLEdBQUcsQ0FBQyxDQUFDdEIsV0FBYSxJQUFJLENBQUN5QixjQUFjLENBQUN6QixTQUFTMEIsSUFBSTtvQkFDekUsSUFBSSxDQUFDQyxrQkFBa0IsQ0FBQ0o7aUJBQ3pCO1lBQ0g7UUFJTixzQkFBc0I7UUFDdEIsTUFBTVosUUFBUUMsVUFBVSxDQUN0QkMsTUFBTUMsSUFBSSxDQUFDSixZQUFZSyxPQUFPLElBQzNCQyxNQUFNLENBQUMsQ0FBQyxDQUFDQyxJQUFJLEdBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQSxZQUFhLENBQUNDLEdBQUcsQ0FBQ0QsTUFDMUNFLE9BQU8sQ0FBQyxDQUFDLENBQUNDLEdBQUdDLFVBQVUsR0FDdEJBLFVBQVVDLEdBQUcsQ0FBQyxDQUFDQztnQkFDYixJQUFJLENBQUNLLGdCQUFnQixDQUFDO29CQUNwQkMsSUFBSU4sU0FBU00sRUFBRTtvQkFDZkgsTUFBTUgsU0FBU0csSUFBSTtvQkFDbkJJLFNBQVNQLFNBQVNPLE9BQU8sSUFBSTtvQkFDN0JDLFFBQVFSLFNBQVNRLE1BQU07b0JBQ3ZCQyxVQUFVVCxTQUFTVSxFQUFFO2dCQUN2QjtnQkFFQSxPQUFPdEIsUUFBUUMsVUFBVSxDQUN2QlcsU0FBU0MsU0FBUyxDQUFDRixHQUFHLENBQUMsQ0FBQ3RCLFdBQWEsSUFBSSxDQUFDa0MsWUFBWSxDQUFDWCxVQUFVdkI7WUFFckU7UUFJTixrQ0FBa0M7UUFDbEMsTUFBTVcsUUFBUUMsVUFBVSxDQUN0QkMsTUFBTUMsSUFBSSxDQUFDSixZQUFZSyxPQUFPLElBQzNCQyxNQUFNLENBQUMsQ0FBQyxDQUFDQyxJQUFJLEdBQUssSUFBSSxDQUFDLENBQUEsWUFBYSxDQUFDQyxHQUFHLENBQUNELE1BQ3pDSyxHQUFHLENBQXFELENBQUMsQ0FBQ0wsS0FBS2tCLGFBQWE7WUFDM0UsTUFBTUMsb0JBQW9CLElBQUksQ0FBQyxDQUFBLFlBQWEsQ0FBQ0MsR0FBRyxDQUFDcEI7WUFDakRsQixPQUFPcUMsbUJBQW1CO1lBQzFCLE9BQU87Z0JBQUNuQjtnQkFBSztvQkFBQ21CO29CQUFtQkQ7aUJBQWE7YUFBQztRQUNqRCxHQUNDYixHQUFHLENBQUMsT0FBTyxDQUFDRixHQUFHLENBQUNnQixtQkFBbUJELGFBQWEsQ0FBQztZQUNoRCxtQkFBbUI7WUFDbkIsTUFBTXhCLFFBQVFDLFVBQVUsQ0FDdEJ3QixrQkFDR3BCLE1BQU0sQ0FBQyxDQUFDc0IsV0FBYSxDQUFDSCxhQUFhSSxJQUFJLENBQUMsQ0FBQ0MsVUFBWUEsUUFBUVgsRUFBRSxLQUFLUyxTQUFTVCxFQUFFLEdBQy9FUCxHQUFHLENBQUMsQ0FBQ2dCO2dCQUNKLE9BQU8zQixRQUFRQyxVQUFVLENBQUM7dUJBQ3JCMEIsU0FBU2QsU0FBUyxDQUFDRixHQUFHLENBQUMsQ0FBQ3RCLFdBQWEsSUFBSSxDQUFDeUIsY0FBYyxDQUFDekIsU0FBUzBCLElBQUk7b0JBQ3pFLElBQUksQ0FBQ0Msa0JBQWtCLENBQUNXO2lCQUN6QjtZQUNIO1lBR0osZ0JBQWdCO1lBQ2hCLE1BQU0zQixRQUFRQyxVQUFVLENBQ3RCdUIsYUFDR25CLE1BQU0sQ0FDTCxDQUFDd0IsVUFBWSxDQUFDSixrQkFBa0JHLElBQUksQ0FBQyxDQUFDRCxXQUFhQSxTQUFTVCxFQUFFLEtBQUtXLFFBQVFYLEVBQUUsR0FFOUVQLEdBQUcsQ0FBQyxPQUFPa0I7Z0JBQ1YsSUFBSSxDQUFDWixnQkFBZ0IsQ0FBQztvQkFDcEJDLElBQUlXLFFBQVFYLEVBQUU7b0JBQ2RILE1BQU1jLFFBQVFkLElBQUk7b0JBQ2xCSSxTQUFTVSxRQUFRVixPQUFPLElBQUk7b0JBQzVCQyxRQUFRUyxRQUFRVCxNQUFNO29CQUN0QkMsVUFBVVEsUUFBUVAsRUFBRTtnQkFDdEI7Z0JBRUEsT0FBT3RCLFFBQVFDLFVBQVUsQ0FDdkI0QixRQUFRaEIsU0FBUyxDQUFDRixHQUFHLENBQUMsQ0FBQ3RCLFdBQWEsSUFBSSxDQUFDa0MsWUFBWSxDQUFDTSxTQUFTeEM7WUFFbkU7UUFFTjtRQUdKLElBQUksQ0FBQyxDQUFBLFlBQWEsR0FBR1U7SUFDdkI7SUFFQSxZQUFZO0lBQ1orQixJQUNFQyxPQUEwRixFQUMxRkMsS0FBa0MsRUFDRTtRQUNwQyxPQUFPLElBQUksQ0FBQyxDQUFBLEVBQUcsQ0FBQ0MsV0FBVyxDQUN6QjtZQUNFbEIsTUFBTWdCLFFBQVFoQixJQUFJO1lBQ2xCSSxTQUFTWSxRQUFRWixPQUFPLElBQUllO1FBQzlCLEdBQ0FGO0lBRUo7SUFFQSxnQkFBZ0I7SUFDaEIsTUFBTVQsYUFDSlgsUUFBMkQsRUFDM0R2QixRQUErQyxFQUMvQztRQUNBLE1BQU04QyxPQUFPN0MsYUFDWEQsU0FBUytDLFVBQVUsRUFDbkIsQUFBQyxDQUFBLE9BQ0MsRUFBRXJCLElBQUksRUFBRUksT0FBTyxFQUE4QyxFQUM3RCxFQUFFYSxLQUFLLEVBQXlDO1lBRWhELE1BQU1LLFlBQVksTUFBTyxDQUFBLE9BQU9MLFVBQVUsYUFDdENoQyxRQUFRc0MsT0FBTyxDQUFDTixXQUNoQmhDLFFBQVFzQyxPQUFPLENBQUNOLE1BQUs7WUFFekIsT0FBTyxJQUFJLENBQUNGLEdBQUcsQ0FBQztnQkFBRWY7Z0JBQU1JLFNBQVNBLFdBQVc7WUFBSyxHQUFHa0I7UUFDdEQsQ0FBQSxFQUFHRSxJQUFJLENBQUMsSUFBSSxFQUFFM0IsVUFBVXZCLFdBQ3hCO1lBQ0UwQixNQUFNMUIsU0FBUzBCLElBQUk7WUFDbkJ5QixVQUFVakQsT0FBT2tELE1BQU0sQ0FBQ0MsR0FBRyxDQUFDRixRQUFRO1lBQ3BDRyxXQUFXO1FBQ2I7UUFHRixJQUFJLENBQUMsQ0FBQSxjQUFlLENBQUNDLEdBQUcsQ0FBQ3ZELFNBQVMwQixJQUFJLEVBQUU7WUFDdENvQjtZQUNBVSxTQUFTeEQsU0FBUzJDLEtBQUs7WUFDdkJjLFlBQVlsQyxTQUFTTSxFQUFFO1FBQ3pCO1FBQ0EsTUFBTWlCLEtBQUtZLEtBQUs7SUFDbEI7SUFFQSxnQkFBZ0I7SUFDaEIsTUFBTWpDLGVBQWVDLElBQVksRUFBRTtRQUNqQyxNQUFNaUMsV0FBVyxJQUFJLENBQUMsQ0FBQSxjQUFlLENBQUN0QixHQUFHLENBQUNYO1FBQzFDLElBQUksQ0FBQ2lDLFVBQVU7WUFDYkMsUUFBUUMsS0FBSyxDQUFDLDRCQUE0Qm5DO1lBQzFDO1FBQ0Y7UUFFQSxJQUFJLENBQUMsQ0FBQSxjQUFlLENBQUNvQyxNQUFNLENBQUNwQztRQUM1QixNQUFNaUMsU0FBU2IsSUFBSSxDQUFDaUIsSUFBSTtRQUN4QixNQUFNSixTQUFTYixJQUFJLENBQUNrQixPQUFPO0lBQzdCO0lBRUEsa0NBQWtDO0lBQ2xDcEMsaUJBQ0VjLE9BQXNELEVBQytCO1FBQ3JGLE1BQU1ULEtBQUssT0FDVGdDO1lBTUEsTUFBTUMsY0FBYztnQkFDbEJDLFNBQVM7Z0JBQ1RDLE9BQU87Z0JBQ1BDLFNBQVMsQ0FBQztnQkFDVkMsV0FBVyxDQUFDdkMsU0FBc0IzQixxQkFBcUIyQjtnQkFDdkR3QyxZQUFZcEUsTUFBTXFFLFdBQVc7Z0JBQzdCQyxNQUFNO2dCQUNOQyxVQUFVO29CQUNSQyxPQUFPLFdBQWE7b0JBQ3BCQyxRQUFRLEtBQU87Z0JBQ2pCO1lBQ0Y7WUFFQSxNQUFNQyxrQkFBa0IzRSxPQUFPa0QsTUFBTSxDQUFDMEIsS0FBSyxFQUFFRDtZQUM3QyxNQUFNRSxVQUFtQkYsa0JBQ3JCLE1BQU1sRSxRQUFRc0MsT0FBTyxDQUFDNEIsZ0JBQWdCWCxnQkFDdENBO1lBRUosTUFBTWMsT0FBTyxJQUFJM0UsWUFBWTRELE9BQU9lLElBQUk7WUFDeEMsT0FBTzlFLE9BQU8rRSxpQkFBaUIsQ0FBQ3hDLEdBQUcsQ0FBQztnQkFBRXNDO1lBQVEsR0FBRyxJQUMvQ3JDLFFBQVFWLFFBQVEsQ0FBQztvQkFBRVcsT0FBT3NCLE9BQU90QixLQUFLO29CQUFFcUM7b0JBQU1sRCxTQUFTbUMsT0FBT25DLE9BQU87Z0JBQUM7UUFFMUU7UUFFQSxNQUFNUCxXQUFXLElBQUksQ0FBQyxDQUFBLEVBQUcsQ0FBQzJELGNBQWMsQ0FDdEM7WUFDRXhELE1BQU1nQixRQUFRaEIsSUFBSTtZQUNsQkksU0FBU1ksUUFBUVosT0FBTyxJQUFJZTtZQUM1QmQsUUFBUVcsUUFBUVgsTUFBTTtRQUN4QixHQUNBRTtRQUVGLE9BQU9WO0lBQ1Q7SUFFQSxxQ0FBcUM7SUFDckMsTUFBTUksbUJBQW1CSixRQUEyRCxFQUFFO1FBQ3BGLElBQUksQ0FBQyxDQUFBLEVBQUcsQ0FBQ0ksa0JBQWtCLENBQUNKLFNBQVNHLElBQUksRUFBRUgsU0FBU08sT0FBTyxJQUFJO0lBQ2pFO0lBRUEsa0JBQWtCO0lBQ2xCLE1BQU1xRCxZQUFZekMsT0FBd0IsRUFBRTtRQUMxQyxJQUFJLENBQUMsQ0FBQSxNQUFPLEdBQUcsSUFBSSxDQUFDLENBQUEsRUFBRyxDQUFDMEMsU0FBUyxDQUFDMUM7UUFDbEMsTUFBTSxJQUFJLENBQUMsQ0FBQSxNQUFPLENBQUNnQixLQUFLO0lBQzFCO0lBRUEsYUFBYTtJQUNiLE1BQU0yQixhQUFhO1FBQ2pCLE1BQU0sSUFBSSxDQUFDLENBQUEsTUFBTyxFQUFFdEI7SUFDdEI7SUFFQSxvQkFBb0I7SUFDcEIsTUFBTXVCLGdCQUFnQjtRQUNwQixNQUFNM0UsUUFBUUMsVUFBVSxDQUN0QkMsTUFBTUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBLGNBQWUsQ0FBQ3lFLE1BQU0sSUFBSWpFLEdBQUcsQ0FBQyxDQUFDLEVBQUV3QixJQUFJLEVBQUUsR0FBS25DLFFBQVFzQyxPQUFPLENBQUNILEtBQUtpQixJQUFJO0lBRXpGO0lBRUEsb0JBQW9CO0lBQ3BCLE1BQU15QixtQkFBbUI7UUFDdkIsTUFBTTdFLFFBQVFDLFVBQVUsQ0FDdEJDLE1BQU1DLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQSxjQUFlLENBQUN5RSxNQUFNLElBQUlqRSxHQUFHLENBQUMsQ0FBQyxFQUFFd0IsSUFBSSxFQUFFLEdBQUtuQyxRQUFRc0MsT0FBTyxDQUFDSCxLQUFLa0IsT0FBTztRQUUxRixJQUFJLENBQUMsQ0FBQSxjQUFlLENBQUN5QixLQUFLO0lBQzVCO0lBRUEsTUFBTXpCLFVBQVU7UUFDZCxNQUFNLElBQUksQ0FBQ3NCLGFBQWE7UUFDeEIsTUFBTSxJQUFJLENBQUNELFVBQVU7UUFDckIsTUFBTSxJQUFJLENBQUNHLGdCQUFnQjtRQUMzQixNQUFNLElBQUksQ0FBQyxDQUFBLE9BQVEsQ0FBQ3pCLElBQUk7SUFDMUI7SUFFQSxDQUFDMkIsT0FBT0MsWUFBWSxDQUFDLEdBQUc7UUFDdEIsT0FBTyxJQUFJLENBQUMzQixPQUFPO0lBQ3JCO0lBRUEsMkRBQTJEO0lBQzNELGFBQWE0QixPQUNYQyxNQUFtQixFQUNuQkMsZ0JBQXlCLElBQUksRUFDSDtRQUMxQixNQUFNdkYsVUFBVSxNQUFNVixnQkFBZ0JrRyxPQUFPLENBQUNGLFFBQVE7WUFBRUM7UUFBYztRQUN0RSxPQUFPLElBQUl4RixnQkFBZ0JDO0lBQzdCO0FBQ0YifQ==
197
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90YXNrcy93b3JrZmxvdy1tYW5hZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhY2tlbmRQb3N0Z3JlcywgT3BlbldvcmtmbG93LCB0eXBlIFdvcmtlciB9IGZyb20gXCJAc29uYW11LWtpdC90YXNrc1wiO1xuaW1wb3J0IHR5cGUge1xuICBSdW5uYWJsZVdvcmtmbG93LFxuICBTY2hlbWFJbnB1dCxcbiAgU2NoZW1hT3V0cHV0LFxuICBTdGFuZGFyZFNjaGVtYVYxLFxuICBTdGVwQXBpLFxuICBXb3JrZmxvd1J1bkhhbmRsZSxcbiAgV29ya2Zsb3dTcGVjLFxufSBmcm9tIFwiQHNvbmFtdS1raXQvdGFza3MvaW50ZXJuYWxcIjtcbmltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiO1xuaW1wb3J0IHR5cGUgeyBLbmV4IH0gZnJvbSBcImtuZXhcIjtcbmltcG9ydCB7IHNjaGVkdWxlIGFzIGNyb25TY2hlZHVsZSwgdHlwZSBTY2hlZHVsZWRUYXNrIH0gZnJvbSBcIm5vZGUtY3JvblwiO1xuaW1wb3J0IHR5cGUgeyBab2RPYmplY3QgfSBmcm9tIFwiem9kXCI7XG5pbXBvcnQgdHlwZSB7IENvbnRleHQgfSBmcm9tIFwiLi4vYXBpL2NvbnRleHRcIjtcbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi9hcGkvc29uYW11XCI7XG5pbXBvcnQgeyBOYWl0ZSB9IGZyb20gXCIuLi9uYWl0ZS9uYWl0ZVwiO1xuaW1wb3J0IHsgY3JlYXRlTW9ja1NTRUZhY3RvcnkgfSBmcm9tIFwiLi4vc3RyZWFtL3NzZVwiO1xuaW1wb3J0IHR5cGUgeyBFeGVjdXRhYmxlIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IFdvcmtmbG93TWV0YWRhdGEgfSBmcm9tIFwiLi9kZWNvcmF0b3JcIjtcbmltcG9ydCB7IFN0ZXBXcmFwcGVyIH0gZnJvbSBcIi4vc3RlcC13cmFwcGVyXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgV29ya2Zsb3dPcHRpb25zIHtcbiAgLy8gd29ya2Vy7JeQ7IScIOuPmeyLnCDsi6TtlontlaAg7YOc7Iqk7YGsIOyImCwg6riw67O47J2AIENQVSDsvZTslrQg7IiYIC0gMeqwnFxuICBjb25jdXJyZW5jeT86IG51bWJlcjtcblxuICAvLyB3b3JrZXLsl5DshJwg7IKs7Jqp7ZWgIHB1Yi9zdWIg7Jes67aALCDquLDrs7jsnYAgdHJ1ZVxuICB1c2VQdWJTdWI/OiBib29sZWFuO1xuXG4gIC8vIHB1Yi9zdWLsnLzroZwg7YOc7Iqk7YGs66W8IOyImOyLoO2WiOydhCDrlYwg7JuM7YGs7ZSM66Gc7JqwIOyLpO2Wieq5jOyngCDsp4Dsl7Ag7Iuc6rCELCDquLDrs7jsnYAgNTAwbXNcbiAgbGlzdGVuRGVsYXk/OiBudW1iZXI7XG59XG5cbi8vIFdvcmtmbG93IO2VqOyImOydmCDtg4DsnoUsIEBzb25hbXUta2l0L3Rhc2tz7JmAIOuLpOuluCDsoJDsnYAgc3RlcOydhCDtlZzrsogg6rCQ7Iu8IO2Yle2DnC5cbmV4cG9ydCB0eXBlIFdvcmtmbG93RnVuY3Rpb248SW5wdXQsIE91dHB1dD4gPSAoXG4gIHBhcmFtczogUmVhZG9ubHk8e1xuICAgIGlucHV0OiBJbnB1dDtcbiAgICBzdGVwOiBTdGVwV3JhcHBlcjtcbiAgICB2ZXJzaW9uOiBzdHJpbmcgfCBudWxsO1xuICB9PixcbikgPT4gUHJvbWlzZTxPdXRwdXQ+IHwgT3V0cHV0O1xuXG4vLyBXb3JrZmxvd+ulvCDrk7HroZ3tlaAg65WM66W8IOychO2VnCDtg4DsnoVcbmV4cG9ydCB0eXBlIFdvcmtmbG93Q3JlYXRlT3B0aW9uczxcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgVFNjaGVtYSBleHRlbmRzIFN0YW5kYXJkU2NoZW1hVjEgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQsXG4+ID0gT21pdDxcbiAgV29ya2Zsb3dTcGVjPFNjaGVtYU91dHB1dDxUU2NoZW1hLCBJbnB1dD4sIE91dHB1dCwgU2NoZW1hSW5wdXQ8VFNjaGVtYSwgSW5wdXQ+PixcbiAgXCJ2ZXJzaW9uXCJcbj4gJiB7XG4gIGlkOiBzdHJpbmc7XG4gIHZlcnNpb246IHN0cmluZyB8IG51bGw7XG4gIGZ1bmN0aW9uOiBXb3JrZmxvd0Z1bmN0aW9uPFNjaGVtYU91dHB1dDxUU2NoZW1hLCBJbnB1dD4sIE91dHB1dD47XG59O1xuXG5leHBvcnQgY2xhc3MgV29ya2Zsb3dNYW5hZ2VyIHtcbiAgLy8gYmFja2VuZCDsnbjsiqTthLTsiqRcbiAgcmVhZG9ubHkgI2JhY2tlbmQ6IEJhY2tlbmRQb3N0Z3JlcztcblxuICAvLyBPcGVuV29ya2Zsb3cg7J247Iqk7YS07IqkXG4gIHJlYWRvbmx5ICNvdzogT3BlbldvcmtmbG93O1xuXG4gIC8vIFdvcmtlciDsnbjsiqTthLTsiqQgKOyXhuydhCDsiJgg7J6I7Jy866mwLCDsnbQg65WM64qUIOu2hOyCsOuQnCDshJzrsoQg7ZmY6rK97JeQ7IScIERC7JeQIHB1Ymxpc2jrp4wg7ZWc64uk6rOgIOqwgOygle2VqClcbiAgI3dvcmtlcjogV29ya2VyIHwgbnVsbDtcblxuICAvLyDtjIzsnbwg6rK966GcIC0+IO2MjOydvOyXkCDsoJXsnZjrkJwg7JuM7YGs7ZSM66Gc7JqwIOuplO2DgOuNsOydtO2EsCDrqqnroZ1cbiAgI3dvcmtmbG93c01hcDogTWFwPHN0cmluZywgV29ya2Zsb3dNZXRhZGF0YVtdPjtcblxuICAvLyBUYXNrIOydtOumhCAtPiBUYXNrIOygleuztCDrsI8gSW5wdXQg6rCSLCBXb3JrZmxvdyBJRFxuICAjc2NoZWR1bGVkVGFza3M6IE1hcDxcbiAgICBzdHJpbmcsXG4gICAge1xuICAgICAgdGFzazogU2NoZWR1bGVkVGFzaztcbiAgICAgIGlucHV0Rm46IEV4ZWN1dGFibGU8U2NoZW1hSW5wdXQ8dW5rbm93biwgdW5rbm93bj4+O1xuICAgICAgd29ya2Zsb3dJZDogc3RyaW5nO1xuICAgIH1cbiAgPjtcblxuICAvLyBCYWNrZW5kUG9zdGdyZXPsl5DshJwg7LKY66as7ZWY64qUIOqyg+uTpOydtCDsnojslrTshJwgS25leCDsu6TrhKXshZjsnbQg7JWE64uI6528IOyEpOygleqwkuydhCDrhKPslrTspJjslbztlaguXG4gIGNvbnN0cnVjdG9yKGRiQ29uZjogS25leC5Db25maWcsIHJ1bk1pZ3JhdGlvbnM6IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgY29uc3QgYmFja2VuZCA9IG5ldyBCYWNrZW5kUG9zdGdyZXMoZGJDb25mLCB7IHJ1bk1pZ3JhdGlvbnMgfSk7XG5cbiAgICB0aGlzLiNiYWNrZW5kID0gYmFja2VuZDtcbiAgICB0aGlzLiNvdyA9IG5ldyBPcGVuV29ya2Zsb3coeyBiYWNrZW5kIH0pO1xuICAgIHRoaXMuI3dvcmtlciA9IG51bGw7XG5cbiAgICB0aGlzLiN3b3JrZmxvd3NNYXAgPSBuZXcgTWFwKCk7XG4gICAgdGhpcy4jc2NoZWR1bGVkVGFza3MgPSBuZXcgTWFwKCk7XG4gIH1cblxuICAvKipcbiAgICog7KCV7J2Y65CcIOybjO2BrO2UjOuhnOyasCDrsI8g7JuM7YGs7ZSM66Gc7Jqw7JeQIOuMgO2VnCBzY2hlZHVsZWQgdGFza3Prpbwg64+Z6riw7ZmU7ZWp64uI64ukLlxuICAgKi9cbiAgYXN5bmMgc3luY2hyb25pemUod29ya2Zsb3dNYXA6IE1hcDxzdHJpbmcsIFdvcmtmbG93TWV0YWRhdGFbXT4pIHtcbiAgICAvLyAxLiDsgq3soJzrkJwg7YyM7J287J2AIOydvOq0hCDsgq3soJxcbiAgICBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoXG4gICAgICBBcnJheS5mcm9tKHRoaXMuI3dvcmtmbG93c01hcC5lbnRyaWVzKCkpXG4gICAgICAgIC5maWx0ZXIoKFtrZXldKSA9PiAhd29ya2Zsb3dNYXAuaGFzKGtleSkpXG4gICAgICAgIC5mbGF0TWFwKChbXywgd29ya2Zsb3dzXSkgPT5cbiAgICAgICAgICB3b3JrZmxvd3MubWFwKCh3b3JrZmxvdykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsU2V0dGxlZChbXG4gICAgICAgICAgICAgIC4uLndvcmtmbG93LnNjaGVkdWxlcy5tYXAoKHNjaGVkdWxlKSA9PiB0aGlzLnVuc2NoZWR1bGVUYXNrKHNjaGVkdWxlLm5hbWUpKSxcbiAgICAgICAgICAgICAgdGhpcy51bnJlZ2lzdGVyV29ya2Zsb3cod29ya2Zsb3cpLFxuICAgICAgICAgICAgXSk7XG4gICAgICAgICAgfSksXG4gICAgICAgICksXG4gICAgKTtcblxuICAgIC8vIDIuIOyDiOuhnCDstpTqsIDrkJwg7YyM7J287J2AIOydvOq0hCDrk7HroZ1cbiAgICBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoXG4gICAgICBBcnJheS5mcm9tKHdvcmtmbG93TWFwLmVudHJpZXMoKSlcbiAgICAgICAgLmZpbHRlcigoW2tleV0pID0+ICF0aGlzLiN3b3JrZmxvd3NNYXAuaGFzKGtleSkpXG4gICAgICAgIC5mbGF0TWFwKChbXywgd29ya2Zsb3dzXSkgPT5cbiAgICAgICAgICB3b3JrZmxvd3MubWFwKCh3b3JrZmxvdykgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZWdpc3RlcldvcmtmbG93KHtcbiAgICAgICAgICAgICAgaWQ6IHdvcmtmbG93LmlkLFxuICAgICAgICAgICAgICBuYW1lOiB3b3JrZmxvdy5uYW1lLFxuICAgICAgICAgICAgICB2ZXJzaW9uOiB3b3JrZmxvdy52ZXJzaW9uID8/IG51bGwsXG4gICAgICAgICAgICAgIHNjaGVtYTogd29ya2Zsb3cuc2NoZW1hLFxuICAgICAgICAgICAgICBmdW5jdGlvbjogd29ya2Zsb3cuZm4sXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsU2V0dGxlZChcbiAgICAgICAgICAgICAgd29ya2Zsb3cuc2NoZWR1bGVzLm1hcCgoc2NoZWR1bGUpID0+IHRoaXMuc2NoZWR1bGVUYXNrKHdvcmtmbG93LCBzY2hlZHVsZSkpLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgKSxcbiAgICApO1xuXG4gICAgLy8gMy4g6riw7KG06rO8IOuLpOuluCDqsoPsnYQgZGlmZuy5nCDri6TsnYwsIOyCreygnCDtm4Qg7J6s65Ox66GdXG4gICAgYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKFxuICAgICAgQXJyYXkuZnJvbSh3b3JrZmxvd01hcC5lbnRyaWVzKCkpXG4gICAgICAgIC5maWx0ZXIoKFtrZXldKSA9PiB0aGlzLiN3b3JrZmxvd3NNYXAuaGFzKGtleSkpXG4gICAgICAgIC5tYXA8W3N0cmluZywgW1dvcmtmbG93TWV0YWRhdGFbXSwgV29ya2Zsb3dNZXRhZGF0YVtdXV0+KChba2V5LCBuZXdXb3JrZmxvd3NdKSA9PiB7XG4gICAgICAgICAgY29uc3QgcHJldmlvdXNXb3JrZmxvd3MgPSB0aGlzLiN3b3JrZmxvd3NNYXAuZ2V0KGtleSk7XG4gICAgICAgICAgYXNzZXJ0KHByZXZpb3VzV29ya2Zsb3dzLCBcInByZXZpb3VzIHdvcmtmbG93cyBub3QgZm91bmRcIik7XG4gICAgICAgICAgcmV0dXJuIFtrZXksIFtwcmV2aW91c1dvcmtmbG93cywgbmV3V29ya2Zsb3dzXV07XG4gICAgICAgIH0pXG4gICAgICAgIC5tYXAoYXN5bmMgKFtfLCBbcHJldmlvdXNXb3JrZmxvd3MsIG5ld1dvcmtmbG93c11dKSA9PiB7XG4gICAgICAgICAgLy8g6riw7KG0IOqyg+uTpOydhCDsgq3soJzrtoDthLAg7ZW07JW87ZWoLlxuICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChcbiAgICAgICAgICAgIHByZXZpb3VzV29ya2Zsb3dzXG4gICAgICAgICAgICAgIC5maWx0ZXIoKHByZXZJdGVtKSA9PiAhbmV3V29ya2Zsb3dzLnNvbWUoKG5ld0l0ZW0pID0+IG5ld0l0ZW0uaWQgPT09IHByZXZJdGVtLmlkKSlcbiAgICAgICAgICAgICAgLm1hcCgocHJldkl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGxTZXR0bGVkKFtcbiAgICAgICAgICAgICAgICAgIC4uLnByZXZJdGVtLnNjaGVkdWxlcy5tYXAoKHNjaGVkdWxlKSA9PiB0aGlzLnVuc2NoZWR1bGVUYXNrKHNjaGVkdWxlLm5hbWUpKSxcbiAgICAgICAgICAgICAgICAgIHRoaXMudW5yZWdpc3RlcldvcmtmbG93KHByZXZJdGVtKSxcbiAgICAgICAgICAgICAgICBdKTtcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIC8vIOyDiOuhnCDstpTqsIDrkJwg6rKD65Ok7J2EIOuTseuhnVxuICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChcbiAgICAgICAgICAgIG5ld1dvcmtmbG93c1xuICAgICAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgICAgIChuZXdJdGVtKSA9PiAhcHJldmlvdXNXb3JrZmxvd3Muc29tZSgocHJldkl0ZW0pID0+IHByZXZJdGVtLmlkID09PSBuZXdJdGVtLmlkKSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAubWFwKGFzeW5jIChuZXdJdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWdpc3RlcldvcmtmbG93KHtcbiAgICAgICAgICAgICAgICAgIGlkOiBuZXdJdGVtLmlkLFxuICAgICAgICAgICAgICAgICAgbmFtZTogbmV3SXRlbS5uYW1lLFxuICAgICAgICAgICAgICAgICAgdmVyc2lvbjogbmV3SXRlbS52ZXJzaW9uID8/IG51bGwsXG4gICAgICAgICAgICAgICAgICBzY2hlbWE6IG5ld0l0ZW0uc2NoZW1hLFxuICAgICAgICAgICAgICAgICAgZnVuY3Rpb246IG5ld0l0ZW0uZm4sXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGxTZXR0bGVkKFxuICAgICAgICAgICAgICAgICAgbmV3SXRlbS5zY2hlZHVsZXMubWFwKChzY2hlZHVsZSkgPT4gdGhpcy5zY2hlZHVsZVRhc2sobmV3SXRlbSwgc2NoZWR1bGUpKSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICApO1xuICAgICAgICB9KSxcbiAgICApO1xuXG4gICAgdGhpcy4jd29ya2Zsb3dzTWFwID0gd29ya2Zsb3dNYXA7XG4gIH1cblxuICAvLyDsm4ztgaztlIzroZzsmrDrpbwg7Iuk7ZaJXG4gIHJ1bjxJbnB1dCwgT3V0cHV0LCBUU2NoZW1hIGV4dGVuZHMgU3RhbmRhcmRTY2hlbWFWMSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZD4oXG4gICAgb3B0aW9uczogT21pdDxXb3JrZmxvd0NyZWF0ZU9wdGlvbnM8SW5wdXQsIE91dHB1dCwgVFNjaGVtYT4sIFwiZnVuY3Rpb25cIiB8IFwic2NoZW1hXCIgfCBcImlkXCI+LFxuICAgIGlucHV0OiBTY2hlbWFJbnB1dDxUU2NoZW1hLCBJbnB1dD4sXG4gICk6IFByb21pc2U8V29ya2Zsb3dSdW5IYW5kbGU8T3V0cHV0Pj4ge1xuICAgIHJldHVybiB0aGlzLiNvdy5ydW5Xb3JrZmxvdyhcbiAgICAgIHtcbiAgICAgICAgbmFtZTogb3B0aW9ucy5uYW1lLFxuICAgICAgICB2ZXJzaW9uOiBvcHRpb25zLnZlcnNpb24gPz8gdW5kZWZpbmVkLFxuICAgICAgfSxcbiAgICAgIGlucHV0LFxuICAgICk7XG4gIH1cblxuICAvLyBjcm9uIHRhc2vrpbwg65Ox66GdXG4gIGFzeW5jIHNjaGVkdWxlVGFzayhcbiAgICB3b3JrZmxvdzogUGljazxXb3JrZmxvd01ldGFkYXRhLCBcImlkXCIgfCBcIm5hbWVcIiB8IFwidmVyc2lvblwiPixcbiAgICBzY2hlZHVsZTogV29ya2Zsb3dNZXRhZGF0YVtcInNjaGVkdWxlc1wiXVtudW1iZXJdLFxuICApIHtcbiAgICBjb25zdCB0YXNrID0gY3JvblNjaGVkdWxlKFxuICAgICAgc2NoZWR1bGUuZXhwcmVzc2lvbixcbiAgICAgIChhc3luYyAoXG4gICAgICAgIHsgbmFtZSwgdmVyc2lvbiB9OiBQaWNrPFdvcmtmbG93TWV0YWRhdGEsIFwibmFtZVwiIHwgXCJ2ZXJzaW9uXCI+LFxuICAgICAgICB7IGlucHV0IH06IFdvcmtmbG93TWV0YWRhdGFbXCJzY2hlZHVsZXNcIl1bbnVtYmVyXSxcbiAgICAgICkgPT4ge1xuICAgICAgICBjb25zdCBpbnB1dERhdGEgPSBhd2FpdCAodHlwZW9mIGlucHV0ID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICA/IFByb21pc2UucmVzb2x2ZShpbnB1dCgpKVxuICAgICAgICAgIDogUHJvbWlzZS5yZXNvbHZlKGlucHV0KSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMucnVuKHsgbmFtZSwgdmVyc2lvbjogdmVyc2lvbiA/PyBudWxsIH0sIGlucHV0RGF0YSk7XG4gICAgICB9KS5iaW5kKHRoaXMsIHdvcmtmbG93LCBzY2hlZHVsZSksXG4gICAgICB7XG4gICAgICAgIG5hbWU6IHNjaGVkdWxlLm5hbWUsXG4gICAgICAgIHRpbWV6b25lOiBTb25hbXUuY29uZmlnLmFwaS50aW1lem9uZSxcbiAgICAgICAgbm9PdmVybGFwOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIHRoaXMuI3NjaGVkdWxlZFRhc2tzLnNldChzY2hlZHVsZS5uYW1lLCB7XG4gICAgICB0YXNrLFxuICAgICAgaW5wdXRGbjogc2NoZWR1bGUuaW5wdXQsXG4gICAgICB3b3JrZmxvd0lkOiB3b3JrZmxvdy5pZCxcbiAgICB9KTtcbiAgICBhd2FpdCB0YXNrLnN0YXJ0KCk7XG4gIH1cblxuICAvLyBjcm9uIHRhc2vrpbwg7KSR7KeAXG4gIGFzeW5jIHVuc2NoZWR1bGVUYXNrKG5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IHRhc2tJdGVtID0gdGhpcy4jc2NoZWR1bGVkVGFza3MuZ2V0KG5hbWUpO1xuICAgIGlmICghdGFza0l0ZW0pIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJzY2hlZHVsZWQgdGFzayBub3QgZm91bmRcIiwgbmFtZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy4jc2NoZWR1bGVkVGFza3MuZGVsZXRlKG5hbWUpO1xuICAgIGF3YWl0IHRhc2tJdGVtLnRhc2suc3RvcCgpO1xuICAgIGF3YWl0IHRhc2tJdGVtLnRhc2suZGVzdHJveSgpO1xuICB9XG5cbiAgLy8g7JuM7YGs7ZSM66Gc7Jqw66W8IOuTseuhnSwg6rSA66Co65CcIOyKpOy8gOykhOydgCDrs4Trj4TroZwg65Ox66Gd7ZW07JW8IO2VqC5cbiAgcmVnaXN0ZXJXb3JrZmxvdzxJbnB1dCwgT3V0cHV0LCBUU2NoZW1hIGV4dGVuZHMgU3RhbmRhcmRTY2hlbWFWMSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZD4oXG4gICAgb3B0aW9uczogV29ya2Zsb3dDcmVhdGVPcHRpb25zPElucHV0LCBPdXRwdXQsIFRTY2hlbWE+LFxuICApOiBSdW5uYWJsZVdvcmtmbG93PFNjaGVtYU91dHB1dDxUU2NoZW1hLCBJbnB1dD4sIE91dHB1dCwgU2NoZW1hSW5wdXQ8VFNjaGVtYSwgSW5wdXQ+PiB7XG4gICAgY29uc3QgZm4gPSBhc3luYyAoXG4gICAgICBwYXJhbXM6IFJlYWRvbmx5PHtcbiAgICAgICAgaW5wdXQ6IFNjaGVtYU91dHB1dDxUU2NoZW1hLCBJbnB1dD47XG4gICAgICAgIHN0ZXA6IFN0ZXBBcGk7XG4gICAgICAgIHZlcnNpb246IHN0cmluZyB8IG51bGw7XG4gICAgICB9PixcbiAgICApID0+IHtcbiAgICAgIGNvbnN0IGJhc2VDb250ZXh0ID0ge1xuICAgICAgICByZXF1ZXN0OiBudWxsLFxuICAgICAgICByZXBseTogbnVsbCxcbiAgICAgICAgaGVhZGVyczoge30sXG4gICAgICAgIGNyZWF0ZVNTRTogKHNjaGVtYTogWm9kT2JqZWN0KSA9PiBjcmVhdGVNb2NrU1NFRmFjdG9yeShzY2hlbWEpLFxuICAgICAgICBuYWl0ZVN0b3JlOiBOYWl0ZS5jcmVhdGVTdG9yZSgpLFxuICAgICAgICB1c2VyOiBudWxsLFxuICAgICAgICBwYXNzcG9ydDoge1xuICAgICAgICAgIGxvZ2luOiBhc3luYyAoKSA9PiB7fSxcbiAgICAgICAgICBsb2dvdXQ6ICgpID0+IHt9LFxuICAgICAgICB9LFxuICAgICAgfSBhcyB1bmtub3duIGFzIENvbnRleHQ7XG5cbiAgICAgIGNvbnN0IGNvbnRleHRQcm92aWRlciA9IFNvbmFtdS5jb25maWcudGFza3M/LmNvbnRleHRQcm92aWRlcjtcbiAgICAgIGNvbnN0IGNvbnRleHQ6IENvbnRleHQgPSBjb250ZXh0UHJvdmlkZXJcbiAgICAgICAgPyBhd2FpdCBQcm9taXNlLnJlc29sdmUoY29udGV4dFByb3ZpZGVyKGJhc2VDb250ZXh0KSlcbiAgICAgICAgOiBiYXNlQ29udGV4dDtcblxuICAgICAgY29uc3Qgc3RlcCA9IG5ldyBTdGVwV3JhcHBlcihwYXJhbXMuc3RlcCk7XG4gICAgICByZXR1cm4gU29uYW11LmFzeW5jTG9jYWxTdG9yYWdlLnJ1bih7IGNvbnRleHQgfSwgKCkgPT5cbiAgICAgICAgb3B0aW9ucy5mdW5jdGlvbih7IGlucHV0OiBwYXJhbXMuaW5wdXQsIHN0ZXAsIHZlcnNpb246IHBhcmFtcy52ZXJzaW9uIH0pLFxuICAgICAgKTtcbiAgICB9O1xuXG4gICAgY29uc3Qgd29ya2Zsb3cgPSB0aGlzLiNvdy5kZWZpbmVXb3JrZmxvdyhcbiAgICAgIHtcbiAgICAgICAgbmFtZTogb3B0aW9ucy5uYW1lLFxuICAgICAgICB2ZXJzaW9uOiBvcHRpb25zLnZlcnNpb24gPz8gdW5kZWZpbmVkLFxuICAgICAgICBzY2hlbWE6IG9wdGlvbnMuc2NoZW1hLFxuICAgICAgfSxcbiAgICAgIGZuLFxuICAgICk7XG4gICAgcmV0dXJuIHdvcmtmbG93O1xuICB9XG5cbiAgLy8g7JuM7YGs7ZSM66Gc7Jqw66W8IOuTseuhnSDtlbTsoJwsIOq0gOugqOuQnCDsiqTsvIDspITsnYAg67OE64+E66GcIO2VtOygnO2VtOyVvCDtlaguXG4gIGFzeW5jIHVucmVnaXN0ZXJXb3JrZmxvdyh3b3JrZmxvdzogUGljazxXb3JrZmxvd01ldGFkYXRhLCBcIm5hbWVcIiB8IFwidmVyc2lvblwiIHwgXCJpZFwiPikge1xuICAgIHRoaXMuI293LnVucmVnaXN0ZXJXb3JrZmxvdyh3b3JrZmxvdy5uYW1lLCB3b3JrZmxvdy52ZXJzaW9uID8/IG51bGwpO1xuICB9XG5cbiAgLy8gV29ya2Vy66W8IOyEpOyglSDtm4Qg7Iuc7J6RXG4gIHNldHVwV29ya2VyKG9wdGlvbnM6IFdvcmtmbG93T3B0aW9ucykge1xuICAgIHRoaXMuI3dvcmtlciA9IHRoaXMuI293Lm5ld1dvcmtlcihvcHRpb25zKTtcbiAgfVxuXG4gIC8vIFdvcmtlcuulvCDstIjquLDtmZRcbiAgYXN5bmMgc3RhcnRXb3JrZXIoKSB7XG4gICAgaWYgKCF0aGlzLiN3b3JrZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLiNiYWNrZW5kLmluaXRpYWxpemUoKTtcbiAgICBhd2FpdCB0aGlzLiN3b3JrZXI/LnN0YXJ0KCk7XG4gIH1cblxuICAvLyBXb3JrZXLrpbwg7KSR7KeAXG4gIGFzeW5jIHN0b3BXb3JrZXIoKSB7XG4gICAgYXdhaXQgdGhpcy4jd29ya2VyPy5zdG9wKCk7XG4gIH1cblxuICAvLyBjcm9uIHRhc2vrk6TsnYQg66qo65GQIOykkeyngFxuICBhc3luYyBzdG9wU2NoZWR1bGVzKCkge1xuICAgIGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChcbiAgICAgIEFycmF5LmZyb20odGhpcy4jc2NoZWR1bGVkVGFza3MudmFsdWVzKCkpLm1hcCgoeyB0YXNrIH0pID0+IFByb21pc2UucmVzb2x2ZSh0YXNrLnN0b3AoKSkpLFxuICAgICk7XG4gIH1cblxuICAvLyBjcm9uIHRhc2vrk6TsnYQg66qo65GQIOygleumrFxuICBhc3luYyBkZXN0cm95U2NoZWR1bGVzKCkge1xuICAgIGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChcbiAgICAgIEFycmF5LmZyb20odGhpcy4jc2NoZWR1bGVkVGFza3MudmFsdWVzKCkpLm1hcCgoeyB0YXNrIH0pID0+IFByb21pc2UucmVzb2x2ZSh0YXNrLmRlc3Ryb3koKSkpLFxuICAgICk7XG4gICAgdGhpcy4jc2NoZWR1bGVkVGFza3MuY2xlYXIoKTtcbiAgfVxuXG4gIGFzeW5jIGRlc3Ryb3koKSB7XG4gICAgYXdhaXQgdGhpcy5zdG9wU2NoZWR1bGVzKCk7XG4gICAgYXdhaXQgdGhpcy5zdG9wV29ya2VyKCk7XG4gICAgYXdhaXQgdGhpcy5kZXN0cm95U2NoZWR1bGVzKCk7XG4gICAgYXdhaXQgdGhpcy4jYmFja2VuZC5zdG9wKCk7XG4gIH1cblxuICBbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKSB7XG4gICAgcmV0dXJuIHRoaXMuZGVzdHJveSgpO1xuICB9XG59XG4iXSwibmFtZXMiOlsiQmFja2VuZFBvc3RncmVzIiwiT3BlbldvcmtmbG93IiwiYXNzZXJ0Iiwic2NoZWR1bGUiLCJjcm9uU2NoZWR1bGUiLCJTb25hbXUiLCJOYWl0ZSIsImNyZWF0ZU1vY2tTU0VGYWN0b3J5IiwiU3RlcFdyYXBwZXIiLCJXb3JrZmxvd01hbmFnZXIiLCJkYkNvbmYiLCJydW5NaWdyYXRpb25zIiwiYmFja2VuZCIsIk1hcCIsInN5bmNocm9uaXplIiwid29ya2Zsb3dNYXAiLCJQcm9taXNlIiwiYWxsU2V0dGxlZCIsIkFycmF5IiwiZnJvbSIsImVudHJpZXMiLCJmaWx0ZXIiLCJrZXkiLCJoYXMiLCJmbGF0TWFwIiwiXyIsIndvcmtmbG93cyIsIm1hcCIsIndvcmtmbG93Iiwic2NoZWR1bGVzIiwidW5zY2hlZHVsZVRhc2siLCJuYW1lIiwidW5yZWdpc3RlcldvcmtmbG93IiwicmVnaXN0ZXJXb3JrZmxvdyIsImlkIiwidmVyc2lvbiIsInNjaGVtYSIsImZ1bmN0aW9uIiwiZm4iLCJzY2hlZHVsZVRhc2siLCJuZXdXb3JrZmxvd3MiLCJwcmV2aW91c1dvcmtmbG93cyIsImdldCIsInByZXZJdGVtIiwic29tZSIsIm5ld0l0ZW0iLCJydW4iLCJvcHRpb25zIiwiaW5wdXQiLCJydW5Xb3JrZmxvdyIsInVuZGVmaW5lZCIsInRhc2siLCJleHByZXNzaW9uIiwiaW5wdXREYXRhIiwicmVzb2x2ZSIsImJpbmQiLCJ0aW1lem9uZSIsImNvbmZpZyIsImFwaSIsIm5vT3ZlcmxhcCIsInNldCIsImlucHV0Rm4iLCJ3b3JrZmxvd0lkIiwic3RhcnQiLCJ0YXNrSXRlbSIsImNvbnNvbGUiLCJlcnJvciIsImRlbGV0ZSIsInN0b3AiLCJkZXN0cm95IiwicGFyYW1zIiwiYmFzZUNvbnRleHQiLCJyZXF1ZXN0IiwicmVwbHkiLCJoZWFkZXJzIiwiY3JlYXRlU1NFIiwibmFpdGVTdG9yZSIsImNyZWF0ZVN0b3JlIiwidXNlciIsInBhc3Nwb3J0IiwibG9naW4iLCJsb2dvdXQiLCJjb250ZXh0UHJvdmlkZXIiLCJ0YXNrcyIsImNvbnRleHQiLCJzdGVwIiwiYXN5bmNMb2NhbFN0b3JhZ2UiLCJkZWZpbmVXb3JrZmxvdyIsInNldHVwV29ya2VyIiwibmV3V29ya2VyIiwic3RhcnRXb3JrZXIiLCJpbml0aWFsaXplIiwic3RvcFdvcmtlciIsInN0b3BTY2hlZHVsZXMiLCJ2YWx1ZXMiLCJkZXN0cm95U2NoZWR1bGVzIiwiY2xlYXIiLCJTeW1ib2wiLCJhc3luY0Rpc3Bvc2UiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLGVBQWUsRUFBRUMsWUFBWSxRQUFxQixvQkFBb0I7QUFVL0UsT0FBT0MsWUFBWSxTQUFTO0FBRTVCLFNBQVNDLFlBQVlDLFlBQVksUUFBNEIsWUFBWTtBQUd6RSxTQUFTQyxNQUFNLFFBQVEsbUJBQWdCO0FBQ3ZDLFNBQVNDLEtBQUssUUFBUSxvQkFBaUI7QUFDdkMsU0FBU0Msb0JBQW9CLFFBQVEsbUJBQWdCO0FBR3JELFNBQVNDLFdBQVcsUUFBUSxvQkFBaUI7QUFvQzdDLE9BQU8sTUFBTUM7SUFDWCxlQUFlO0lBQ04sQ0FBQSxPQUFRLENBQWtCO0lBRW5DLG9CQUFvQjtJQUNYLENBQUEsRUFBRyxDQUFlO0lBRTNCLGdFQUFnRTtJQUNoRSxDQUFBLE1BQU8sQ0FBZ0I7SUFFdkIsa0NBQWtDO0lBQ2xDLENBQUEsWUFBYSxDQUFrQztJQUUvQyw0Q0FBNEM7SUFDNUMsQ0FBQSxjQUFlLENBT2I7SUFFRiwyREFBMkQ7SUFDM0QsWUFBWUMsTUFBbUIsRUFBRUMsZ0JBQXlCLElBQUksQ0FBRTtRQUM5RCxNQUFNQyxVQUFVLElBQUlaLGdCQUFnQlUsUUFBUTtZQUFFQztR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
@@ -1 +1 @@
1
- {"version":3,"file":"generated.template.d.ts","sourceRoot":"","sources":["../../../src/template/implementations/generated.template.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAKlD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGvC,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB,CAAC;AACF,qBAAa,mBAAoB,SAAQ,QAAQ;;IAK/C,gBAAgB;;;;IAOhB,MAAM;;;;;;;IAmGN,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAqBrD,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,GAAE,MAAM,EAAO,GAAG,UAAU;IA6G9E,2BAA2B,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAgD9D,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;CA8CvD"}
1
+ {"version":3,"file":"generated.template.d.ts","sourceRoot":"","sources":["../../../src/template/implementations/generated.template.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAUlD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGvC,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB,CAAC;AACF,qBAAa,mBAAoB,SAAQ,QAAQ;;IAK/C,gBAAgB;;;;IAOhB,MAAM;;;;;;;IAmGN,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAqBrD,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,GAAE,MAAM,EAAO,GAAG,UAAU;IAsH9E,2BAA2B,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAgD9D,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;CA8CvD"}
@@ -3,7 +3,7 @@ import { unique } from "radashi";
3
3
  import { Sonamu } from "../../api/index.js";
4
4
  import { EntityManager } from "../../entity/entity-manager.js";
5
5
  import { Naite } from "../../naite/naite.js";
6
- import { isVirtualProp } from "../../types/types.js";
6
+ import { isVirtualCodeProp, isVirtualQueryProp } from "../../types/types.js";
7
7
  import { nonNullable } from "../../utils/utils.js";
8
8
  import { Template } from "../template.js";
9
9
  import { propNodeToZodTypeDef, zodTypeToZodCode } from "../zod-converter.js";
@@ -155,8 +155,10 @@ export class Template__generated extends Template {
155
155
  // fulltext index에 포함된 컬럼들 추출
156
156
  // TODO: GIN/GiST 인덱스 생성된 컬럼 추출
157
157
  const fulltextColumns = [];
158
- // virtual props
159
- const virtualProps = entity.props.filter((prop)=>isVirtualProp(prop)).map((prop)=>prop.name);
158
+ // virtual props (virtualType: "code" 또는 undefined인 것만 포함)
159
+ const virtualProps = entity.props.filter((prop)=>isVirtualCodeProp(prop)).map((prop)=>prop.name);
160
+ // query virtual props (virtualType: "query"인 것만 포함)
161
+ const virtualQueryProps = entity.props.filter((prop)=>isVirtualQueryProp(prop)).map((prop)=>prop.name);
160
162
  /**
161
163
  * hasDefault props
162
164
  * - nullable 또는 dbDefault가 있는 컬럼 (id 포함)
@@ -170,10 +172,10 @@ export class Template__generated extends Template {
170
172
  * generated props
171
173
  * - generated 속성이 있는 컬럼 (INSERT/UPDATE 시 값 제공 불가)
172
174
  */ const generatedColumns = entity.props.filter((prop)=>prop.type !== "relation" && prop.generated !== undefined).map((prop)=>prop.name);
173
- const hasMetadata = fulltextColumns.length > 0 || virtualProps.length > 0 || hasDefaultColumns.length > 0 || generatedColumns.length > 0 || hasVectorColumns.length > 0;
175
+ const hasMetadata = fulltextColumns.length > 0 || virtualProps.length > 0 || virtualQueryProps.length > 0 || hasDefaultColumns.length > 0 || generatedColumns.length > 0 || hasVectorColumns.length > 0;
174
176
  const lines = [
175
177
  `export const ${schemaName} = ${schemaBody};`,
176
- `export type ${schemaName} = z.infer<typeof ${schemaName}>` + (hasMetadata ? ` & {${(fulltextColumns.length > 0 ? `readonly __fulltext__: readonly [${fulltextColumns.map((col)=>`"${col}"`).join(", ")}],` : "") + (virtualProps.length > 0 ? `readonly __virtual__: readonly [${virtualProps.map((prop)=>`"${prop}"`).join(", ")}],` : "") + (hasDefaultColumns.length > 0 ? `readonly __hasDefault__: readonly [${hasDefaultColumns.map((col)=>`"${col}"`).join(", ")}],` : "") + (generatedColumns.length > 0 ? `readonly __generated__: readonly [${generatedColumns.map((col)=>`"${col}"`).join(", ")}],` : "") + (hasVectorColumns.length > 0 ? `readonly __vector__: readonly [${hasVectorColumns.map((col)=>`"${col}"`).join(", ")}],` : "")}}` : "") + ";"
178
+ `export type ${schemaName} = z.infer<typeof ${schemaName}>` + (hasMetadata ? ` & {${(fulltextColumns.length > 0 ? `readonly __fulltext__: readonly [${fulltextColumns.map((col)=>`"${col}"`).join(", ")}],` : "") + (virtualProps.length > 0 ? `readonly __virtual__: readonly [${virtualProps.map((prop)=>`"${prop}"`).join(", ")}],` : "") + (virtualQueryProps.length > 0 ? `readonly __virtual_query__: readonly [${virtualQueryProps.map((prop)=>`"${prop}"`).join(", ")}],` : "") + (hasDefaultColumns.length > 0 ? `readonly __hasDefault__: readonly [${hasDefaultColumns.map((col)=>`"${col}"`).join(", ")}],` : "") + (generatedColumns.length > 0 ? `readonly __generated__: readonly [${generatedColumns.map((col)=>`"${col}"`).join(", ")}],` : "") + (hasVectorColumns.length > 0 ? `readonly __vector__: readonly [${hasVectorColumns.map((col)=>`"${col}"`).join(", ")}],` : "")}}` : "") + ";"
177
179
  ];
178
180
  return {
179
181
  label: `BaseSchema: ${entity.id}`,
@@ -261,4 +263,4 @@ z.object({
261
263
  }
262
264
  }
263
265
 
264
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZW1wbGF0ZS9pbXBsZW1lbnRhdGlvbnMvZ2VuZXJhdGVkLnRlbXBsYXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiO1xuaW1wb3J0IHsgdW5pcXVlIH0gZnJvbSBcInJhZGFzaGlcIjtcbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi8uLi9hcGlcIjtcbmltcG9ydCB0eXBlIHsgRW50aXR5IH0gZnJvbSBcIi4uLy4uL2VudGl0eS9lbnRpdHlcIjtcbmltcG9ydCB7IEVudGl0eU1hbmFnZXIgfSBmcm9tIFwiLi4vLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQgeyBOYWl0ZSB9IGZyb20gXCIuLi8uLi9uYWl0ZS9uYWl0ZVwiO1xuaW1wb3J0IHsgdHlwZSBFbnRpdHlJbmRleCwgdHlwZSBFbnRpdHlQcm9wTm9kZSwgaXNWaXJ0dWFsUHJvcCB9IGZyb20gXCIuLi8uLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHsgbm9uTnVsbGFibGUgfSBmcm9tIFwiLi4vLi4vdXRpbHMvdXRpbHNcIjtcbmltcG9ydCB7IFRlbXBsYXRlIH0gZnJvbSBcIi4uL3RlbXBsYXRlXCI7XG5pbXBvcnQgeyBwcm9wTm9kZVRvWm9kVHlwZURlZiwgem9kVHlwZVRvWm9kQ29kZSB9IGZyb20gXCIuLi96b2QtY29udmVydGVyXCI7XG5cbmV4cG9ydCB0eXBlIFNvdXJjZUNvZGUgPSB7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIGxpbmVzOiBzdHJpbmdbXTtcbiAgaW1wb3J0S2V5czogc3RyaW5nW107XG59O1xuZXhwb3J0IGNsYXNzIFRlbXBsYXRlX19nZW5lcmF0ZWQgZXh0ZW5kcyBUZW1wbGF0ZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFwiZ2VuZXJhdGVkXCIpO1xuICB9XG5cbiAgZ2V0VGFyZ2V0QW5kUGF0aCgpIHtcbiAgICBjb25zdCB7IGRpciB9ID0gU29uYW11LmNvbmZpZy5hcGk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRhcmdldDogYCR7ZGlyfS9zcmMvYXBwbGljYXRpb25gLFxuICAgICAgcGF0aDogYHNvbmFtdS5nZW5lcmF0ZWQudHNgLFxuICAgIH07XG4gIH1cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IGVudGl0eUlkcyA9IEVudGl0eU1hbmFnZXIuZ2V0QWxsSWRzKCk7XG4gICAgY29uc3QgZW50aXRpZXMgPSBlbnRpdHlJZHMubWFwKChpZCkgPT4gRW50aXR5TWFuYWdlci5nZXQoaWQpKTtcblxuICAgIC8vIOyghOyytCBTb3VyY2VDb2RlIOyDneyEsVxuICAgIGNvbnN0IHNvdXJjZUNvZGVzID0gZW50aXRpZXMuZmxhdE1hcCgoZW50aXR5KSA9PiB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICB0aGlzLmdldEVudW1zU291cmNlQ29kZShlbnRpdHkpLFxuICAgICAgICB0aGlzLmdldEJhc2VTY2hlbWFTb3VyY2VDb2RlKGVudGl0eSksXG4gICAgICAgIHRoaXMuZ2V0QmFzZUxpc3RQYXJhbXNTb3VyY2VDb2RlKGVudGl0eSksXG4gICAgICAgIHRoaXMuZ2V0U3Vic2V0U291cmNlQ29kZShlbnRpdHkpLFxuICAgICAgXS5maWx0ZXIobm9uTnVsbGFibGUpO1xuICAgIH0pO1xuICAgIE5haXRlLnQoXCJUZW1wbGF0ZV9fZ2VuZXJhdGVkOnNvdXJjZUNvZGVzXCIsIHNvdXJjZUNvZGVzKTtcblxuICAgIC8vIFNvcnRcbiAgICBjb25zdCBMQUJFTF9LRVlfT1JERVIgPSBbXCJFbnVtc1wiLCBcIkJhc2VTY2hlbWFcIiwgXCJCYXNlTGlzdFBhcmFtc1wiLCBcIlN1YnNldHNcIiwgXCJTdWJzZXRRdWVyaWVzXCJdO1xuICAgIHNvdXJjZUNvZGVzLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgIGNvbnN0IFthS2V5XSA9IGEubGFiZWwuc3BsaXQoXCI6XCIpO1xuICAgICAgY29uc3QgW2JLZXldID0gYi5sYWJlbC5zcGxpdChcIjpcIik7XG4gICAgICBjb25zdCBhSW5kZXggPSBMQUJFTF9LRVlfT1JERVIuaW5kZXhPZihhS2V5KTtcbiAgICAgIGNvbnN0IGJJbmRleCA9IExBQkVMX0tFWV9PUkRFUi5pbmRleE9mKGJLZXkpO1xuICAgICAgaWYgKGFJbmRleCA+IGJJbmRleCkge1xuICAgICAgICByZXR1cm4gMTtcbiAgICAgIH0gZWxzZSBpZiAoYUluZGV4IDwgYkluZGV4KSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3Qgc291cmNlQ29kZSA9IHNvdXJjZUNvZGVzLnJlZHVjZShcbiAgICAgIChyZXN1bHQsIHRzKSA9PiB7XG4gICAgICAgIGlmICh0cyA9PT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBsaW5lczogWy4uLnJlc3VsdC5saW5lcywgYC8vICR7dHMubGFiZWx9YCwgLi4udHMubGluZXMsIFwiXCJdLFxuICAgICAgICAgIGltcG9ydEtleXM6IHVuaXF1ZShbLi4ucmVzdWx0LmltcG9ydEtleXMsIC4uLnRzLmltcG9ydEtleXNdLnNvcnQoKSksXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBsaW5lczogW10sXG4gICAgICAgIGltcG9ydEtleXM6IFtdLFxuICAgICAgfSBhcyBPbWl0PFNvdXJjZUNvZGUsIFwibGFiZWxcIj4sXG4gICAgKTtcblxuICAgIC8vIC50eXBlcy50c+ydmCDtg4DsnoXsnYQg7LC47KGw7ZWY64qUIOqyveyasCDsiJztmZjssLjsobAo7IOB7Zi47LC47KGwKeqwgCDrsJzsg53tlZjrr4DroZwg7YOA7J6F7J2EIOqwgOyguOyZgCDsnbjrnbzsnbgg7LKY66asXG4gICAgY29uc3QgYWxsVHlwZUtleXMgPSBlbnRpdGllcy5mbGF0TWFwKChlbnRpdHkpID0+IE9iamVjdC5rZXlzKGVudGl0eS50eXBlcykpO1xuICAgIGNvbnN0IGNkSW1wb3J0S2V5cyA9IHNvdXJjZUNvZGUuaW1wb3J0S2V5cy5maWx0ZXIoKGltcG9ydEtleSkgPT5cbiAgICAgIGFsbFR5cGVLZXlzLmluY2x1ZGVzKGltcG9ydEtleSksXG4gICAgKTtcbiAgICBpZiAoY2RJbXBvcnRLZXlzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGN1c3RvbVNjYWxhckxpbmVzID0gY2RJbXBvcnRLZXlzLmZsYXRNYXAoKGltcG9ydEtleSkgPT4ge1xuICAgICAgICBjb25zdCBlbnRpdHkgPSBlbnRpdGllcy5maW5kKChlbnRpdHkpID0+IGVudGl0eS50eXBlc1tpbXBvcnRLZXldKTtcbiAgICAgICAgaWYgKCFlbnRpdHkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFpvZFR5cGUgbm90IGZvdW5kICR7aW1wb3J0S2V5fWApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHpvZFR5cGUgPSBlbnRpdHkudHlwZXNbaW1wb3J0S2V5XTtcbiAgICAgICAgYXNzZXJ0KHpvZFR5cGUpO1xuXG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgYC8vIEN1c3RvbVNjYWxhcjogJHtpbXBvcnRLZXl9YCxcbiAgICAgICAgICBgY29uc3QgJHtpbXBvcnRLZXl9ID0gJHt6b2RUeXBlVG9ab2RDb2RlKHpvZFR5cGUpfTtgLFxuICAgICAgICAgIGB0eXBlICR7aW1wb3J0S2V5fSA9IHouaW5mZXI8dHlwZW9mICR7aW1wb3J0S2V5fT5gLFxuICAgICAgICAgIFwiXCIsXG4gICAgICAgIF07XG4gICAgICB9KTtcbiAgICAgIHNvdXJjZUNvZGUubGluZXMgPSBbLi4uY3VzdG9tU2NhbGFyTGluZXMsIC4uLnNvdXJjZUNvZGUubGluZXNdO1xuICAgICAgc291cmNlQ29kZS5pbXBvcnRLZXlzID0gc291cmNlQ29kZS5pbXBvcnRLZXlzLmZpbHRlcihcbiAgICAgICAgKGltcG9ydEtleSkgPT4gIWNkSW1wb3J0S2V5cy5pbmNsdWRlcyhpbXBvcnRLZXkpLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBib2R5ID0gc291cmNlQ29kZS5saW5lcy5qb2luKFwiXFxuXCIpO1xuICAgIE5haXRlLnQoXCJUZW1wbGF0ZV9fZ2VuZXJhdGVkOmJvZHlcIiwgYm9keSk7XG5cbiAgICAvLyBpbXBvcnRcbiAgICBjb25zdCBzb25hbXVJbXBvcnRzID0gW1xuICAgICAgXCJ6QXJyYXlhYmxlXCIsXG4gICAgICBcIlNRTERhdGVUaW1lU3RyaW5nXCIsXG4gICAgICBcIlN1YnNldFF1ZXJ5XCIsXG4gICAgICBcIlNvbmFtdVF1ZXJ5TW9kZVwiLFxuICAgIF0uZmlsdGVyKChtb2QpID0+IGJvZHkuaW5jbHVkZXMobW9kKSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4udGhpcy5nZXRUYXJnZXRBbmRQYXRoKCksXG4gICAgICBib2R5LFxuICAgICAgaW1wb3J0S2V5czogc291cmNlQ29kZS5pbXBvcnRLZXlzLFxuICAgICAgY3VzdG9tSGVhZGVyczogW1xuICAgICAgICBcIi8qKiBiaW9tZS1pZ25vcmUtYWxsIGxpbnQ6IGdlbmVyYXRlZOuKlCDrrLTsi5wgKi9cIixcbiAgICAgICAgXCIvKiogYmlvbWUtaWdub3JlLWFsbCBhc3Npc3Q6IGdlbmVyYXRlZOuKlCDrrLTsi5wgKi9cIixcbiAgICAgICAgXCJcIixcbiAgICAgICAgYGltcG9ydCB7IHogfSBmcm9tICd6b2QnO2AsXG4gICAgICAgIGBpbXBvcnQgeyAke3NvbmFtdUltcG9ydHMuam9pbihcIixcIil9IH0gZnJvbSBcInNvbmFtdVwiO2AsXG4gICAgICBdLFxuICAgIH07XG4gIH1cblxuICBnZXRFbnVtc1NvdXJjZUNvZGUoZW50aXR5OiBFbnRpdHkpOiBTb3VyY2VDb2RlIHwgbnVsbCB7XG4gICAgaWYgKE9iamVjdC5rZXlzKGVudGl0eS5lbnVtTGFiZWxzKS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgbGFiZWw6IGBFbnVtczogJHtlbnRpdHkuaWR9YCxcbiAgICAgIGxpbmVzOiBbXG4gICAgICAgIC4uLk9iamVjdC5lbnRyaWVzKGVudGl0eS5lbnVtTGFiZWxzKVxuICAgICAgICAgIC5maWx0ZXIoKFtfLCBlbnVtTGFiZWxdKSA9PiBPYmplY3Qua2V5cyhlbnVtTGFiZWwpLmxlbmd0aCA+IDApXG4gICAgICAgICAgLmZsYXRNYXAoKFtlbnVtSWQsIGVudW1MYWJlbF0pID0+IFtcbiAgICAgICAgICAgIGBleHBvcnQgY29uc3QgJHtlbnVtSWR9ID0gei5lbnVtKFske09iamVjdC5rZXlzKGVudW1MYWJlbCkubWFwKFxuICAgICAgICAgICAgICAoZWwpID0+IGBcIiR7ZWx9XCJgLFxuICAgICAgICAgICAgKX1dKS5kZXNjcmliZShcIiR7ZW51bUlkfVwiKTtgLFxuICAgICAgICAgICAgYGV4cG9ydCB0eXBlICR7ZW51bUlkfSA9IHouaW5mZXI8dHlwZW9mICR7ZW51bUlkfT47YCxcbiAgICAgICAgICAgIGBleHBvcnQgY29uc3QgJHtlbnVtSWR9TGFiZWwgPSAke0pTT04uc3RyaW5naWZ5KGVudW1MYWJlbCl9O2AsXG4gICAgICAgICAgXSksXG4gICAgICBdLFxuICAgICAgaW1wb3J0S2V5czogW10sXG4gICAgfTtcbiAgfVxuXG4gIGdldEJhc2VTY2hlbWFTb3VyY2VDb2RlKGVudGl0eTogRW50aXR5LCBpbXBvcnRLZXlzOiBzdHJpbmdbXSA9IFtdKTogU291cmNlQ29kZSB7XG4gICAgY29uc3Qgc2NoZW1hTmFtZSA9IGAke2VudGl0eS5uYW1lcy5tb2R1bGV9QmFzZVNjaGVtYWA7XG4gICAgY29uc3QgcHJvcE5vZGU6IEVudGl0eVByb3BOb2RlID0ge1xuICAgICAgbm9kZVR5cGU6IFwib2JqZWN0XCIsXG4gICAgICBjaGlsZHJlbjogZW50aXR5LnByb3BzLm1hcCgocHJvcCkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5vZGVUeXBlOiBcInBsYWluXCIsXG4gICAgICAgICAgcHJvcCxcbiAgICAgICAgfTtcbiAgICAgIH0pLFxuICAgIH07XG5cbiAgICBjb25zdCBzY2hlbWFCb2R5ID0gKCgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHByb3BOb2RlVG9ab2RUeXBlRGVmKHByb3BOb2RlLCBpbXBvcnRLZXlzKTtcbiAgICAgIGlmIChyZXN1bHQuZW5kc1dpdGgoXCIsXCIpKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQuc2xpY2UoMCwgLTEpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0pKCk7XG5cbiAgICAvLyBmdWxsdGV4dCBpbmRleOyXkCDtj6ztlajrkJwg7Lus65+865OkIOy2lOy2nFxuICAgIC8vIFRPRE86IEdJTi9HaVNUIOyduOuNseyKpCDsg53shLHrkJwg7Lus65+8IOy2lOy2nFxuICAgIGNvbnN0IGZ1bGx0ZXh0Q29sdW1uczogRW50aXR5SW5kZXhbXCJjb2x1bW5zXCJdW10gPSBbXTtcblxuICAgIC8vIHZpcnR1YWwgcHJvcHNcbiAgICBjb25zdCB2aXJ0dWFsUHJvcHMgPSBlbnRpdHkucHJvcHNcbiAgICAgIC5maWx0ZXIoKHByb3ApID0+IGlzVmlydHVhbFByb3AocHJvcCkpXG4gICAgICAubWFwKChwcm9wKSA9PiBwcm9wLm5hbWUpO1xuXG4gICAgLyoqXG4gICAgICogaGFzRGVmYXVsdCBwcm9wc1xuICAgICAqIC0gbnVsbGFibGUg65iQ64qUIGRiRGVmYXVsdOqwgCDsnojripQg7Lus65+8IChpZCDtj6ztlagpXG4gICAgICogLSByZWxhdGlvbuydtCDslYTri4jqsbDrgpgsIHJlbGF0aW9u7J207Ja064+EIG51bGxhYmxl7J2066m0IO2PrO2VqFxuICAgICAqL1xuICAgIGNvbnN0IGhhc0RlZmF1bHRDb2x1bW5zID0gZW50aXR5LnByb3BzXG4gICAgICAuZmlsdGVyKFxuICAgICAgICAocHJvcCkgPT5cbiAgICAgICAgICAocHJvcC50eXBlICE9PSBcInJlbGF0aW9uXCIgfHwgcHJvcC5udWxsYWJsZSA9PT0gdHJ1ZSkgJiZcbiAgICAgICAgICAocHJvcC5udWxsYWJsZSA9PT0gdHJ1ZSB8fCAocHJvcC50eXBlICE9PSBcInJlbGF0aW9uXCIgJiYgcHJvcC5kYkRlZmF1bHQgIT09IHVuZGVmaW5lZCkpLFxuICAgICAgKVxuICAgICAgLm1hcCgocHJvcCkgPT4gKHByb3AudHlwZSA9PT0gXCJyZWxhdGlvblwiID8gYCR7cHJvcC5uYW1lfV9pZGAgOiBwcm9wLm5hbWUpKVxuICAgICAgLmNvbmNhdChcImlkXCIpO1xuXG4gICAgLyoqXG4gICAgICogaGFzVmVjdG9yIHByb3BzXG4gICAgICogLSB2ZWN0b3Ig7YOA7J6F7J24IOy7rOufvFxuICAgICAqL1xuICAgIGNvbnN0IGhhc1ZlY3RvckNvbHVtbnMgPSBlbnRpdHkucHJvcHNcbiAgICAgIC5maWx0ZXIoKHByb3ApID0+IHByb3AudHlwZSA9PT0gXCJ2ZWN0b3JcIiB8fCBwcm9wLnR5cGUgPT09IFwidmVjdG9yW11cIilcbiAgICAgIC5tYXAoKHByb3ApID0+IHByb3AubmFtZSk7XG5cbiAgICAvKipcbiAgICAgKiBnZW5lcmF0ZWQgcHJvcHNcbiAgICAgKiAtIGdlbmVyYXRlZCDsho3shLHsnbQg7J6I64qUIOy7rOufvCAoSU5TRVJUL1VQREFURSDsi5wg6rCSIOygnOqztSDrtojqsIApXG4gICAgICovXG4gICAgY29uc3QgZ2VuZXJhdGVkQ29sdW1ucyA9IGVudGl0eS5wcm9wc1xuICAgICAgLmZpbHRlcigocHJvcCkgPT4gcHJvcC50eXBlICE9PSBcInJlbGF0aW9uXCIgJiYgcHJvcC5nZW5lcmF0ZWQgIT09IHVuZGVmaW5lZClcbiAgICAgIC5tYXAoKHByb3ApID0+IHByb3AubmFtZSk7XG5cbiAgICBjb25zdCBoYXNNZXRhZGF0YSA9XG4gICAgICBmdWxsdGV4dENvbHVtbnMubGVuZ3RoID4gMCB8fFxuICAgICAgdmlydHVhbFByb3BzLmxlbmd0aCA+IDAgfHxcbiAgICAgIGhhc0RlZmF1bHRDb2x1bW5zLmxlbmd0aCA+IDAgfHxcbiAgICAgIGdlbmVyYXRlZENvbHVtbnMubGVuZ3RoID4gMCB8fFxuICAgICAgaGFzVmVjdG9yQ29sdW1ucy5sZW5ndGggPiAwO1xuXG4gICAgY29uc3QgbGluZXMgPSBbXG4gICAgICBgZXhwb3J0IGNvbnN0ICR7c2NoZW1hTmFtZX0gPSAke3NjaGVtYUJvZHl9O2AsXG4gICAgICBgZXhwb3J0IHR5cGUgJHtzY2hlbWFOYW1lfSA9IHouaW5mZXI8dHlwZW9mICR7c2NoZW1hTmFtZX0+YCArXG4gICAgICAgIChoYXNNZXRhZGF0YVxuICAgICAgICAgID8gYCAmIHske1xuICAgICAgICAgICAgICAoZnVsbHRleHRDb2x1bW5zLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICA/IGByZWFkb25seSBfX2Z1bGx0ZXh0X186IHJlYWRvbmx5IFske2Z1bGx0ZXh0Q29sdW1uc1xuICAgICAgICAgICAgICAgICAgICAubWFwKChjb2wpID0+IGBcIiR7Y29sfVwiYClcbiAgICAgICAgICAgICAgICAgICAgLmpvaW4oXCIsIFwiKX1dLGBcbiAgICAgICAgICAgICAgICA6IFwiXCIpICtcbiAgICAgICAgICAgICAgKHZpcnR1YWxQcm9wcy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgPyBgcmVhZG9ubHkgX192aXJ0dWFsX186IHJlYWRvbmx5IFske3ZpcnR1YWxQcm9wcy5tYXAoKHByb3ApID0+IGBcIiR7cHJvcH1cImApLmpvaW4oXCIsIFwiKX1dLGBcbiAgICAgICAgICAgICAgICA6IFwiXCIpICtcbiAgICAgICAgICAgICAgKGhhc0RlZmF1bHRDb2x1bW5zLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICA/IGByZWFkb25seSBfX2hhc0RlZmF1bHRfXzogcmVhZG9ubHkgWyR7aGFzRGVmYXVsdENvbHVtbnNcbiAgICAgICAgICAgICAgICAgICAgLm1hcCgoY29sKSA9PiBgXCIke2NvbH1cImApXG4gICAgICAgICAgICAgICAgICAgIC5qb2luKFwiLCBcIil9XSxgXG4gICAgICAgICAgICAgICAgOiBcIlwiKSArXG4gICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICBnZW5lcmF0ZWRDb2x1bW5zLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICAgID8gYHJlYWRvbmx5IF9fZ2VuZXJhdGVkX186IHJlYWRvbmx5IFske2dlbmVyYXRlZENvbHVtbnNcbiAgICAgICAgICAgICAgICAgICAgICAubWFwKChjb2wpID0+IGBcIiR7Y29sfVwiYClcbiAgICAgICAgICAgICAgICAgICAgICAuam9pbihcIiwgXCIpfV0sYFxuICAgICAgICAgICAgICAgICAgOiBcIlwiXG4gICAgICAgICAgICAgICkgK1xuICAgICAgICAgICAgICAoaGFzVmVjdG9yQ29sdW1ucy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgPyBgcmVhZG9ubHkgX192ZWN0b3JfXzogcmVhZG9ubHkgWyR7aGFzVmVjdG9yQ29sdW1uc1xuICAgICAgICAgICAgICAgICAgICAubWFwKChjb2wpID0+IGBcIiR7Y29sfVwiYClcbiAgICAgICAgICAgICAgICAgICAgLmpvaW4oXCIsIFwiKX1dLGBcbiAgICAgICAgICAgICAgICA6IFwiXCIpXG4gICAgICAgICAgICB9fWBcbiAgICAgICAgICA6IFwiXCIpICtcbiAgICAgICAgXCI7XCIsXG4gICAgXTtcblxuICAgIHJldHVybiB7XG4gICAgICBsYWJlbDogYEJhc2VTY2hlbWE6ICR7ZW50aXR5LmlkfWAsXG4gICAgICBpbXBvcnRLZXlzLFxuICAgICAgbGluZXMsXG4gICAgfTtcbiAgfVxuXG4gIGdldEJhc2VMaXN0UGFyYW1zU291cmNlQ29kZShlbnRpdHk6IEVudGl0eSk6IFNvdXJjZUNvZGUgfCBudWxsIHtcbiAgICAvLyBQcm9wIOyXhuuKlCBNROyduCDqsr3smrAg7IOd7ISxIOygnOyZuFxuICAgIGlmIChlbnRpdHkucHJvcHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2UgaWYgKGVudGl0eS5wYXJlbnRJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBzY2hlbWFOYW1lID0gYCR7ZW50aXR5Lm5hbWVzLm1vZHVsZX1CYXNlTGlzdFBhcmFtc2A7XG5cbiAgICBjb25zdCBmaWx0ZXJQcm9wcyA9IGVudGl0eS5wcm9wcy5maWx0ZXIoKHByb3ApID0+IHByb3AudG9GaWx0ZXIgPT09IHRydWUpO1xuXG4gICAgY29uc3QgcHJvcE5vZGVzOiBFbnRpdHlQcm9wTm9kZVtdID0gZmlsdGVyUHJvcHMubWFwKChwcm9wKSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBub2RlVHlwZTogXCJwbGFpblwiIGFzIGNvbnN0LFxuICAgICAgICBwcm9wLFxuICAgICAgICBjaGlsZHJlbjogW10sXG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgY29uc3QgaW1wb3J0S2V5czogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCBmaWx0ZXJCb2R5ID0gcHJvcE5vZGVzXG4gICAgICAubWFwKChwcm9wTm9kZSkgPT4gcHJvcE5vZGVUb1pvZFR5cGVEZWYocHJvcE5vZGUsIGltcG9ydEtleXMpKVxuICAgICAgLmpvaW4oXCJcXG5cIik7XG4gICAgY29uc3Qgc2NoZW1hQm9keSA9IGBcbnoub2JqZWN0KHtcbiAgbnVtOiB6Lm51bWJlcigpLmludCgpLm5vbm5lZ2F0aXZlKCksXG4gIHBhZ2U6IHoubnVtYmVyKCkuaW50KCkubWluKDEpLFxuICBzZWFyY2g6ICR7ZW50aXR5LmlkfVNlYXJjaEZpZWxkLFxuICBrZXl3b3JkOiB6LnN0cmluZygpLFxuICBvcmRlckJ5OiAke2VudGl0eS5pZH1PcmRlckJ5LFxuICBxdWVyeU1vZGU6IFNvbmFtdVF1ZXJ5TW9kZSxcbiAgaWQ6IHpBcnJheWFibGUoei5udW1iZXIoKS5pbnQoKS5wb3NpdGl2ZSgpKSwke2ZpbHRlckJvZHl9XG59KS5wYXJ0aWFsKCk7XG5gLnRyaW0oKTtcblxuICAgIGNvbnN0IGxpbmVzID0gW1xuICAgICAgYGV4cG9ydCBjb25zdCAke3NjaGVtYU5hbWV9ID0gJHtzY2hlbWFCb2R5fWAsXG4gICAgICBgZXhwb3J0IHR5cGUgJHtzY2hlbWFOYW1lfSA9IHouaW5mZXI8dHlwZW9mICR7c2NoZW1hTmFtZX0+O2AsXG4gICAgXTtcblxuICAgIHJldHVybiB7XG4gICAgICBsYWJlbDogYEJhc2VMaXN0UGFyYW1zOiAke2VudGl0eS5pZH1gLFxuICAgICAgaW1wb3J0S2V5cyxcbiAgICAgIGxpbmVzLFxuICAgIH07XG4gIH1cblxuICBnZXRTdWJzZXRTb3VyY2VDb2RlKGVudGl0eTogRW50aXR5KTogU291cmNlQ29kZSB8IG51bGwge1xuICAgIGlmIChPYmplY3Qua2V5cyhlbnRpdHkuc3Vic2V0cykubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2UgaWYgKGVudGl0eS5wYXJlbnRJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBzdWJzZXRLZXlzID0gT2JqZWN0LmtleXMoZW50aXR5LnN1YnNldHMpO1xuICAgIGNvbnN0IGltcG9ydEtleXM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gW1xuICAgICAgLi4uc3Vic2V0S2V5cy5mbGF0TWFwKChzdWJzZXRLZXkpID0+IHtcbiAgICAgICAgLy8g7ISc67iM7IWL7JeQ7IScIEZpZWxkRXhwcltdIOqwgOyguOyYtFxuICAgICAgICBjb25zdCBmaWVsZEV4cHJzID0gZW50aXR5LnN1YnNldHNbc3Vic2V0S2V5XTtcblxuICAgICAgICAvLyBGaWVsZEV4cHJbXeuhnCBFbnRpdHlQcm9wTm9kZVtdIOqwgOyguOyYtFxuICAgICAgICBjb25zdCBwcm9wTm9kZXMgPSBlbnRpdHkuZmllbGRFeHByc1RvUHJvcE5vZGVzKGZpZWxkRXhwcnMpO1xuICAgICAgICBjb25zdCBzY2hlbWFOYW1lID0gYCR7ZW50aXR5Lm5hbWVzLm1vZHVsZX1TdWJzZXQke3N1YnNldEtleX1gO1xuICAgICAgICBjb25zdCBwcm9wTm9kZTogRW50aXR5UHJvcE5vZGUgPSB7XG4gICAgICAgICAgbm9kZVR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgICAgY2hpbGRyZW46IHByb3BOb2RlcyxcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBFbnRpdHlQcm9wTm9kZVtd66GcIFpvZFR5cGVEZWYoc3RyaW5nKeydhCDqsIDsoLjsmLRcbiAgICAgICAgY29uc3QgYm9keSA9IHByb3BOb2RlVG9ab2RUeXBlRGVmKHByb3BOb2RlLCBpbXBvcnRLZXlzKTtcblxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIGBleHBvcnQgY29uc3QgJHtzY2hlbWFOYW1lfSA9ICR7Ym9keS5yZXBsYWNlKC8sJC8sIFwiXCIpfTtgLFxuICAgICAgICAgIGBleHBvcnQgdHlwZSAke3NjaGVtYU5hbWV9ID0gei5pbmZlcjx0eXBlb2YgJHtzY2hlbWFOYW1lfT47YCxcbiAgICAgICAgXTtcbiAgICAgIH0pLFxuICAgICAgYGV4cG9ydCB0eXBlICR7ZW50aXR5Lm5hbWVzLm1vZHVsZX1TdWJzZXRNYXBwaW5nID0ge2AsXG4gICAgICAuLi5zdWJzZXRLZXlzLm1hcCgoc3Vic2V0S2V5KSA9PiBgICAke3N1YnNldEtleX06ICR7ZW50aXR5Lm5hbWVzLm1vZHVsZX1TdWJzZXQke3N1YnNldEtleX07YCksXG4gICAgICBcIn07XCIsXG4gICAgICBgZXhwb3J0IGNvbnN0ICR7ZW50aXR5Lm5hbWVzLm1vZHVsZX1TdWJzZXRLZXkgPSB6LmVudW0oWyR7c3Vic2V0S2V5c1xuICAgICAgICAubWFwKChrKSA9PiBgXCIke2t9XCJgKVxuICAgICAgICAuam9pbihcIixcIil9XSk7YCxcbiAgICAgIGBleHBvcnQgdHlwZSAke2VudGl0eS5uYW1lcy5tb2R1bGV9U3Vic2V0S2V5ID0gei5pbmZlcjx0eXBlb2YgJHtlbnRpdHkubmFtZXMubW9kdWxlfVN1YnNldEtleT47YCxcbiAgICAgIFwiXCIsXG4gICAgXTtcblxuICAgIHJldHVybiB7XG4gICAgICBsYWJlbDogYFN1YnNldHM6ICR7ZW50aXR5LmlkfWAsXG4gICAgICBsaW5lcyxcbiAgICAgIGltcG9ydEtleXM6IHVuaXF1ZShpbXBvcnRLZXlzKSxcbiAgICB9O1xuICB9XG59XG4iXSwibmFtZXMiOlsiYXNzZXJ0IiwidW5pcXVlIiwiU29uYW11IiwiRW50aXR5TWFuYWdlciIsIk5haXRlIiwiaXNWaXJ0dWFsUHJvcCIsIm5vbk51bGxhYmxlIiwiVGVtcGxhdGUiLCJwcm9wTm9kZVRvWm9kVHlwZURlZiIsInpvZFR5cGVUb1pvZENvZGUiLCJUZW1wbGF0ZV9fZ2VuZXJhdGVkIiwiZ2V0VGFyZ2V0QW5kUGF0aCIsImRpciIsImNvbmZpZyIsImFwaSIsInRhcmdldCIsInBhdGgiLCJyZW5kZXIiLCJlbnRpdHlJZHMiLCJnZXRBbGxJZHMiLCJlbnRpdGllcyIsIm1hcCIsImlkIiwiZ2V0Iiwic291cmNlQ29kZXMiLCJmbGF0TWFwIiwiZW50aXR5IiwiZ2V0RW51bXNTb3VyY2VDb2RlIiwiZ2V0QmFzZVNjaGVtYVNvdXJjZUNvZGUiLCJnZXRCYXNlTGlzdFBhcmFtc1NvdXJjZUNvZGUiLCJnZXRTdWJzZXRTb3VyY2VDb2RlIiwiZmlsdGVyIiwidCIsIkxBQkVMX0tFWV9PUkRFUiIsInNvcnQiLCJhIiwiYiIsImFLZXkiLCJsYWJlbCIsInNwbGl0IiwiYktleSIsImFJbmRleCIsImluZGV4T2YiLCJiSW5kZXgiLCJzb3VyY2VDb2RlIiwicmVkdWNlIiwicmVzdWx0IiwidHMiLCJsaW5lcyIsImltcG9ydEtleXMiLCJhbGxUeXBlS2V5cyIsIk9iamVjdCIsImtleXMiLCJ0eXBlcyIsImNkSW1wb3J0S2V5cyIsImltcG9ydEtleSIsImluY2x1ZGVzIiwibGVuZ3RoIiwiY3VzdG9tU2NhbGFyTGluZXMiLCJmaW5kIiwiRXJyb3IiLCJ6b2RUeXBlIiwiYm9keSIsImpvaW4iLCJzb25hbXVJbXBvcnRzIiwibW9kIiwiY3VzdG9tSGVhZGVycyIsImVudW1MYWJlbHMiLCJlbnRyaWVzIiwiXyIsImVudW1MYWJlbCIsImVudW1JZCIsImVsIiwiSlNPTiIsInN0cmluZ2lmeSIsInNjaGVtYU5hbWUiLCJuYW1lcyIsIm1vZHVsZSIsInByb3BOb2RlIiwibm9kZVR5cGUiLCJjaGlsZHJlbiIsInByb3BzIiwicHJvcCIsInNjaGVtYUJvZHkiLCJlbmRzV2l0aCIsInNsaWNlIiwiZnVsbHRleHRDb2x1bW5zIiwidmlydHVhbFByb3BzIiwibmFtZSIsImhhc0RlZmF1bHRDb2x1bW5zIiwidHlwZSIsIm51bGxhYmxlIiwiZGJEZWZhdWx0IiwidW5kZWZpbmVkIiwiY29uY2F0IiwiaGFzVmVjdG9yQ29sdW1ucyIsImdlbmVyYXRlZENvbHVtbnMiLCJnZW5lcmF0ZWQiLCJoYXNNZXRhZGF0YSIsImNvbCIsInBhcmVudElkIiwiZmlsdGVyUHJvcHMiLCJ0b0ZpbHRlciIsInByb3BOb2RlcyIsImZpbHRlckJvZHkiLCJ0cmltIiwic3Vic2V0cyIsInN1YnNldEtleXMiLCJzdWJzZXRLZXkiLCJmaWVsZEV4cHJzIiwiZmllbGRFeHByc1RvUHJvcE5vZGVzIiwicmVwbGFjZSIsImsiXSwibWFwcGluZ3MiOiJBQUFBLE9BQU9BLFlBQVksU0FBUztBQUM1QixTQUFTQyxNQUFNLFFBQVEsVUFBVTtBQUNqQyxTQUFTQyxNQUFNLFFBQVEscUJBQVk7QUFFbkMsU0FBU0MsYUFBYSxRQUFRLGlDQUE4QjtBQUM1RCxTQUFTQyxLQUFLLFFBQVEsdUJBQW9CO0FBQzFDLFNBQWdEQyxhQUFhLFFBQVEsdUJBQW9CO0FBQ3pGLFNBQVNDLFdBQVcsUUFBUSx1QkFBb0I7QUFDaEQsU0FBU0MsUUFBUSxRQUFRLGlCQUFjO0FBQ3ZDLFNBQVNDLG9CQUFvQixFQUFFQyxnQkFBZ0IsUUFBUSxzQkFBbUI7QUFPMUUsT0FBTyxNQUFNQyw0QkFBNEJIO0lBQ3ZDLGFBQWM7UUFDWixLQUFLLENBQUM7SUFDUjtJQUVBSSxtQkFBbUI7UUFDakIsTUFBTSxFQUFFQyxHQUFHLEVBQUUsR0FBR1YsT0FBT1csTUFBTSxDQUFDQyxHQUFHO1FBQ2pDLE9BQU87WUFDTEMsUUFBUSxHQUFHSCxJQUFJLGdCQUFnQixDQUFDO1lBQ2hDSSxNQUFNLENB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
266
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZW1wbGF0ZS9pbXBsZW1lbnRhdGlvbnMvZ2VuZXJhdGVkLnRlbXBsYXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiO1xuaW1wb3J0IHsgdW5pcXVlIH0gZnJvbSBcInJhZGFzaGlcIjtcbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi8uLi9hcGlcIjtcbmltcG9ydCB0eXBlIHsgRW50aXR5IH0gZnJvbSBcIi4uLy4uL2VudGl0eS9lbnRpdHlcIjtcbmltcG9ydCB7IEVudGl0eU1hbmFnZXIgfSBmcm9tIFwiLi4vLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQgeyBOYWl0ZSB9IGZyb20gXCIuLi8uLi9uYWl0ZS9uYWl0ZVwiO1xuaW1wb3J0IHtcbiAgdHlwZSBFbnRpdHlJbmRleCxcbiAgdHlwZSBFbnRpdHlQcm9wTm9kZSxcbiAgaXNWaXJ0dWFsQ29kZVByb3AsXG4gIGlzVmlydHVhbFF1ZXJ5UHJvcCxcbn0gZnJvbSBcIi4uLy4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBub25OdWxsYWJsZSB9IGZyb20gXCIuLi8uLi91dGlscy91dGlsc1wiO1xuaW1wb3J0IHsgVGVtcGxhdGUgfSBmcm9tIFwiLi4vdGVtcGxhdGVcIjtcbmltcG9ydCB7IHByb3BOb2RlVG9ab2RUeXBlRGVmLCB6b2RUeXBlVG9ab2RDb2RlIH0gZnJvbSBcIi4uL3pvZC1jb252ZXJ0ZXJcIjtcblxuZXhwb3J0IHR5cGUgU291cmNlQ29kZSA9IHtcbiAgbGFiZWw6IHN0cmluZztcbiAgbGluZXM6IHN0cmluZ1tdO1xuICBpbXBvcnRLZXlzOiBzdHJpbmdbXTtcbn07XG5leHBvcnQgY2xhc3MgVGVtcGxhdGVfX2dlbmVyYXRlZCBleHRlbmRzIFRlbXBsYXRlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXCJnZW5lcmF0ZWRcIik7XG4gIH1cblxuICBnZXRUYXJnZXRBbmRQYXRoKCkge1xuICAgIGNvbnN0IHsgZGlyIH0gPSBTb25hbXUuY29uZmlnLmFwaTtcbiAgICByZXR1cm4ge1xuICAgICAgdGFyZ2V0OiBgJHtkaXJ9L3NyYy9hcHBsaWNhdGlvbmAsXG4gICAgICBwYXRoOiBgc29uYW11LmdlbmVyYXRlZC50c2AsXG4gICAgfTtcbiAgfVxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgZW50aXR5SWRzID0gRW50aXR5TWFuYWdlci5nZXRBbGxJZHMoKTtcbiAgICBjb25zdCBlbnRpdGllcyA9IGVudGl0eUlkcy5tYXAoKGlkKSA9PiBFbnRpdHlNYW5hZ2VyLmdldChpZCkpO1xuXG4gICAgLy8g7KCE7LK0IFNvdXJjZUNvZGUg7IOd7ISxXG4gICAgY29uc3Qgc291cmNlQ29kZXMgPSBlbnRpdGllcy5mbGF0TWFwKChlbnRpdHkpID0+IHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIHRoaXMuZ2V0RW51bXNTb3VyY2VDb2RlKGVudGl0eSksXG4gICAgICAgIHRoaXMuZ2V0QmFzZVNjaGVtYVNvdXJjZUNvZGUoZW50aXR5KSxcbiAgICAgICAgdGhpcy5nZXRCYXNlTGlzdFBhcmFtc1NvdXJjZUNvZGUoZW50aXR5KSxcbiAgICAgICAgdGhpcy5nZXRTdWJzZXRTb3VyY2VDb2RlKGVudGl0eSksXG4gICAgICBdLmZpbHRlcihub25OdWxsYWJsZSk7XG4gICAgfSk7XG4gICAgTmFpdGUudChcIlRlbXBsYXRlX19nZW5lcmF0ZWQ6c291cmNlQ29kZXNcIiwgc291cmNlQ29kZXMpO1xuXG4gICAgLy8gU29ydFxuICAgIGNvbnN0IExBQkVMX0tFWV9PUkRFUiA9IFtcIkVudW1zXCIsIFwiQmFzZVNjaGVtYVwiLCBcIkJhc2VMaXN0UGFyYW1zXCIsIFwiU3Vic2V0c1wiLCBcIlN1YnNldFF1ZXJpZXNcIl07XG4gICAgc291cmNlQ29kZXMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgY29uc3QgW2FLZXldID0gYS5sYWJlbC5zcGxpdChcIjpcIik7XG4gICAgICBjb25zdCBbYktleV0gPSBiLmxhYmVsLnNwbGl0KFwiOlwiKTtcbiAgICAgIGNvbnN0IGFJbmRleCA9IExBQkVMX0tFWV9PUkRFUi5pbmRleE9mKGFLZXkpO1xuICAgICAgY29uc3QgYkluZGV4ID0gTEFCRUxfS0VZX09SREVSLmluZGV4T2YoYktleSk7XG4gICAgICBpZiAoYUluZGV4ID4gYkluZGV4KSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgICAgfSBlbHNlIGlmIChhSW5kZXggPCBiSW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBzb3VyY2VDb2RlID0gc291cmNlQ29kZXMucmVkdWNlKFxuICAgICAgKHJlc3VsdCwgdHMpID0+IHtcbiAgICAgICAgaWYgKHRzID09PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGxpbmVzOiBbLi4ucmVzdWx0LmxpbmVzLCBgLy8gJHt0cy5sYWJlbH1gLCAuLi50cy5saW5lcywgXCJcIl0sXG4gICAgICAgICAgaW1wb3J0S2V5czogdW5pcXVlKFsuLi5yZXN1bHQuaW1wb3J0S2V5cywgLi4udHMuaW1wb3J0S2V5c10uc29ydCgpKSxcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGxpbmVzOiBbXSxcbiAgICAgICAgaW1wb3J0S2V5czogW10sXG4gICAgICB9IGFzIE9taXQ8U291cmNlQ29kZSwgXCJsYWJlbFwiPixcbiAgICApO1xuXG4gICAgLy8gLnR5cGVzLnRz7J2YIO2DgOyeheydhCDssLjsobDtlZjripQg6rK97JqwIOyInO2ZmOywuOyhsCjsg4HtmLjssLjsobAp6rCAIOuwnOyDne2VmOuvgOuhnCDtg4DsnoXsnYQg6rCA7KC47JmAIOyduOudvOyduCDsspjrpqxcbiAgICBjb25zdCBhbGxUeXBlS2V5cyA9IGVudGl0aWVzLmZsYXRNYXAoKGVudGl0eSkgPT4gT2JqZWN0LmtleXMoZW50aXR5LnR5cGVzKSk7XG4gICAgY29uc3QgY2RJbXBvcnRLZXlzID0gc291cmNlQ29kZS5pbXBvcnRLZXlzLmZpbHRlcigoaW1wb3J0S2V5KSA9PlxuICAgICAgYWxsVHlwZUtleXMuaW5jbHVkZXMoaW1wb3J0S2V5KSxcbiAgICApO1xuICAgIGlmIChjZEltcG9ydEtleXMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgY3VzdG9tU2NhbGFyTGluZXMgPSBjZEltcG9ydEtleXMuZmxhdE1hcCgoaW1wb3J0S2V5KSA9PiB7XG4gICAgICAgIGNvbnN0IGVudGl0eSA9IGVudGl0aWVzLmZpbmQoKGVudGl0eSkgPT4gZW50aXR5LnR5cGVzW2ltcG9ydEtleV0pO1xuICAgICAgICBpZiAoIWVudGl0eSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgWm9kVHlwZSBub3QgZm91bmQgJHtpbXBvcnRLZXl9YCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgem9kVHlwZSA9IGVudGl0eS50eXBlc1tpbXBvcnRLZXldO1xuICAgICAgICBhc3NlcnQoem9kVHlwZSk7XG5cbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICBgLy8gQ3VzdG9tU2NhbGFyOiAke2ltcG9ydEtleX1gLFxuICAgICAgICAgIGBjb25zdCAke2ltcG9ydEtleX0gPSAke3pvZFR5cGVUb1pvZENvZGUoem9kVHlwZSl9O2AsXG4gICAgICAgICAgYHR5cGUgJHtpbXBvcnRLZXl9ID0gei5pbmZlcjx0eXBlb2YgJHtpbXBvcnRLZXl9PmAsXG4gICAgICAgICAgXCJcIixcbiAgICAgICAgXTtcbiAgICAgIH0pO1xuICAgICAgc291cmNlQ29kZS5saW5lcyA9IFsuLi5jdXN0b21TY2FsYXJMaW5lcywgLi4uc291cmNlQ29kZS5saW5lc107XG4gICAgICBzb3VyY2VDb2RlLmltcG9ydEtleXMgPSBzb3VyY2VDb2RlLmltcG9ydEtleXMuZmlsdGVyKFxuICAgICAgICAoaW1wb3J0S2V5KSA9PiAhY2RJbXBvcnRLZXlzLmluY2x1ZGVzKGltcG9ydEtleSksXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGJvZHkgPSBzb3VyY2VDb2RlLmxpbmVzLmpvaW4oXCJcXG5cIik7XG4gICAgTmFpdGUudChcIlRlbXBsYXRlX19nZW5lcmF0ZWQ6Ym9keVwiLCBib2R5KTtcblxuICAgIC8vIGltcG9ydFxuICAgIGNvbnN0IHNvbmFtdUltcG9ydHMgPSBbXG4gICAgICBcInpBcnJheWFibGVcIixcbiAgICAgIFwiU1FMRGF0ZVRpbWVTdHJpbmdcIixcbiAgICAgIFwiU3Vic2V0UXVlcnlcIixcbiAgICAgIFwiU29uYW11UXVlcnlNb2RlXCIsXG4gICAgXS5maWx0ZXIoKG1vZCkgPT4gYm9keS5pbmNsdWRlcyhtb2QpKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLmdldFRhcmdldEFuZFBhdGgoKSxcbiAgICAgIGJvZHksXG4gICAgICBpbXBvcnRLZXlzOiBzb3VyY2VDb2RlLmltcG9ydEtleXMsXG4gICAgICBjdXN0b21IZWFkZXJzOiBbXG4gICAgICAgIFwiLyoqIGJpb21lLWlnbm9yZS1hbGwgbGludDogZ2VuZXJhdGVk64qUIOustOyLnCAqL1wiLFxuICAgICAgICBcIi8qKiBiaW9tZS1pZ25vcmUtYWxsIGFzc2lzdDogZ2VuZXJhdGVk64qUIOustOyLnCAqL1wiLFxuICAgICAgICBcIlwiLFxuICAgICAgICBgaW1wb3J0IHsgeiB9IGZyb20gJ3pvZCc7YCxcbiAgICAgICAgYGltcG9ydCB7ICR7c29uYW11SW1wb3J0cy5qb2luKFwiLFwiKX0gfSBmcm9tIFwic29uYW11XCI7YCxcbiAgICAgIF0sXG4gICAgfTtcbiAgfVxuXG4gIGdldEVudW1zU291cmNlQ29kZShlbnRpdHk6IEVudGl0eSk6IFNvdXJjZUNvZGUgfCBudWxsIHtcbiAgICBpZiAoT2JqZWN0LmtleXMoZW50aXR5LmVudW1MYWJlbHMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBsYWJlbDogYEVudW1zOiAke2VudGl0eS5pZH1gLFxuICAgICAgbGluZXM6IFtcbiAgICAgICAgLi4uT2JqZWN0LmVudHJpZXMoZW50aXR5LmVudW1MYWJlbHMpXG4gICAgICAgICAgLmZpbHRlcigoW18sIGVudW1MYWJlbF0pID0+IE9iamVjdC5rZXlzKGVudW1MYWJlbCkubGVuZ3RoID4gMClcbiAgICAgICAgICAuZmxhdE1hcCgoW2VudW1JZCwgZW51bUxhYmVsXSkgPT4gW1xuICAgICAgICAgICAgYGV4cG9ydCBjb25zdCAke2VudW1JZH0gPSB6LmVudW0oWyR7T2JqZWN0LmtleXMoZW51bUxhYmVsKS5tYXAoXG4gICAgICAgICAgICAgIChlbCkgPT4gYFwiJHtlbH1cImAsXG4gICAgICAgICAgICApfV0pLmRlc2NyaWJlKFwiJHtlbnVtSWR9XCIpO2AsXG4gICAgICAgICAgICBgZXhwb3J0IHR5cGUgJHtlbnVtSWR9ID0gei5pbmZlcjx0eXBlb2YgJHtlbnVtSWR9PjtgLFxuICAgICAgICAgICAgYGV4cG9ydCBjb25zdCAke2VudW1JZH1MYWJlbCA9ICR7SlNPTi5zdHJpbmdpZnkoZW51bUxhYmVsKX07YCxcbiAgICAgICAgICBdKSxcbiAgICAgIF0sXG4gICAgICBpbXBvcnRLZXlzOiBbXSxcbiAgICB9O1xuICB9XG5cbiAgZ2V0QmFzZVNjaGVtYVNvdXJjZUNvZGUoZW50aXR5OiBFbnRpdHksIGltcG9ydEtleXM6IHN0cmluZ1tdID0gW10pOiBTb3VyY2VDb2RlIHtcbiAgICBjb25zdCBzY2hlbWFOYW1lID0gYCR7ZW50aXR5Lm5hbWVzLm1vZHVsZX1CYXNlU2NoZW1hYDtcbiAgICBjb25zdCBwcm9wTm9kZTogRW50aXR5UHJvcE5vZGUgPSB7XG4gICAgICBub2RlVHlwZTogXCJvYmplY3RcIixcbiAgICAgIGNoaWxkcmVuOiBlbnRpdHkucHJvcHMubWFwKChwcm9wKSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbm9kZVR5cGU6IFwicGxhaW5cIixcbiAgICAgICAgICBwcm9wLFxuICAgICAgICB9O1xuICAgICAgfSksXG4gICAgfTtcblxuICAgIGNvbnN0IHNjaGVtYUJvZHkgPSAoKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gcHJvcE5vZGVUb1pvZFR5cGVEZWYocHJvcE5vZGUsIGltcG9ydEtleXMpO1xuICAgICAgaWYgKHJlc3VsdC5lbmRzV2l0aChcIixcIikpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdC5zbGljZSgwLCAtMSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSkoKTtcblxuICAgIC8vIGZ1bGx0ZXh0IGluZGV47JeQIO2PrO2VqOuQnCDsu6zrn7zrk6Qg7LaU7LacXG4gICAgLy8gVE9ETzogR0lOL0dpU1Qg7J24642x7IqkIOyDneyEseuQnCDsu6zrn7wg7LaU7LacXG4gICAgY29uc3QgZnVsbHRleHRDb2x1bW5zOiBFbnRpdHlJbmRleFtcImNvbHVtbnNcIl1bXSA9IFtdO1xuXG4gICAgLy8gdmlydHVhbCBwcm9wcyAodmlydHVhbFR5cGU6IFwiY29kZVwiIOuYkOuKlCB1bmRlZmluZWTsnbgg6rKD66eMIO2PrO2VqClcbiAgICBjb25zdCB2aXJ0dWFsUHJvcHMgPSBlbnRpdHkucHJvcHNcbiAgICAgIC5maWx0ZXIoKHByb3ApID0+IGlzVmlydHVhbENvZGVQcm9wKHByb3ApKVxuICAgICAgLm1hcCgocHJvcCkgPT4gcHJvcC5uYW1lKTtcblxuICAgIC8vIHF1ZXJ5IHZpcnR1YWwgcHJvcHMgKHZpcnR1YWxUeXBlOiBcInF1ZXJ5XCLsnbgg6rKD66eMIO2PrO2VqClcbiAgICBjb25zdCB2aXJ0dWFsUXVlcnlQcm9wcyA9IGVudGl0eS5wcm9wc1xuICAgICAgLmZpbHRlcigocHJvcCkgPT4gaXNWaXJ0dWFsUXVlcnlQcm9wKHByb3ApKVxuICAgICAgLm1hcCgocHJvcCkgPT4gcHJvcC5uYW1lKTtcblxuICAgIC8qKlxuICAgICAqIGhhc0RlZmF1bHQgcHJvcHNcbiAgICAgKiAtIG51bGxhYmxlIOuYkOuKlCBkYkRlZmF1bHTqsIAg7J6I64qUIOy7rOufvCAoaWQg7Y+s7ZWoKVxuICAgICAqIC0gcmVsYXRpb27snbQg7JWE64uI6rGw64KYLCByZWxhdGlvbuydtOyWtOuPhCBudWxsYWJsZeydtOuptCDtj6ztlahcbiAgICAgKi9cbiAgICBjb25zdCBoYXNEZWZhdWx0Q29sdW1ucyA9IGVudGl0eS5wcm9wc1xuICAgICAgLmZpbHRlcihcbiAgICAgICAgKHByb3ApID0+XG4gICAgICAgICAgKHByb3AudHlwZSAhPT0gXCJyZWxhdGlvblwiIHx8IHByb3AubnVsbGFibGUgPT09IHRydWUpICYmXG4gICAgICAgICAgKHByb3AubnVsbGFibGUgPT09IHRydWUgfHwgKHByb3AudHlwZSAhPT0gXCJyZWxhdGlvblwiICYmIHByb3AuZGJEZWZhdWx0ICE9PSB1bmRlZmluZWQpKSxcbiAgICAgIClcbiAgICAgIC5tYXAoKHByb3ApID0+IChwcm9wLnR5cGUgPT09IFwicmVsYXRpb25cIiA/IGAke3Byb3AubmFtZX1faWRgIDogcHJvcC5uYW1lKSlcbiAgICAgIC5jb25jYXQoXCJpZFwiKTtcblxuICAgIC8qKlxuICAgICAqIGhhc1ZlY3RvciBwcm9wc1xuICAgICAqIC0gdmVjdG9yIO2DgOyeheyduCDsu6zrn7xcbiAgICAgKi9cbiAgICBjb25zdCBoYXNWZWN0b3JDb2x1bW5zID0gZW50aXR5LnByb3BzXG4gICAgICAuZmlsdGVyKChwcm9wKSA9PiBwcm9wLnR5cGUgPT09IFwidmVjdG9yXCIgfHwgcHJvcC50eXBlID09PSBcInZlY3RvcltdXCIpXG4gICAgICAubWFwKChwcm9wKSA9PiBwcm9wLm5hbWUpO1xuXG4gICAgLyoqXG4gICAgICogZ2VuZXJhdGVkIHByb3BzXG4gICAgICogLSBnZW5lcmF0ZWQg7IaN7ISx7J20IOyeiOuKlCDsu6zrn7wgKElOU0VSVC9VUERBVEUg7IucIOqwkiDsoJzqs7Ug67aI6rCAKVxuICAgICAqL1xuICAgIGNvbnN0IGdlbmVyYXRlZENvbHVtbnMgPSBlbnRpdHkucHJvcHNcbiAgICAgIC5maWx0ZXIoKHByb3ApID0+IHByb3AudHlwZSAhPT0gXCJyZWxhdGlvblwiICYmIHByb3AuZ2VuZXJhdGVkICE9PSB1bmRlZmluZWQpXG4gICAgICAubWFwKChwcm9wKSA9PiBwcm9wLm5hbWUpO1xuXG4gICAgY29uc3QgaGFzTWV0YWRhdGEgPVxuICAgICAgZnVsbHRleHRDb2x1bW5zLmxlbmd0aCA+IDAgfHxcbiAgICAgIHZpcnR1YWxQcm9wcy5sZW5ndGggPiAwIHx8XG4gICAgICB2aXJ0dWFsUXVlcnlQcm9wcy5sZW5ndGggPiAwIHx8XG4gICAgICBoYXNEZWZhdWx0Q29sdW1ucy5sZW5ndGggPiAwIHx8XG4gICAgICBnZW5lcmF0ZWRDb2x1bW5zLmxlbmd0aCA+IDAgfHxcbiAgICAgIGhhc1ZlY3RvckNvbHVtbnMubGVuZ3RoID4gMDtcblxuICAgIGNvbnN0IGxpbmVzID0gW1xuICAgICAgYGV4cG9ydCBjb25zdCAke3NjaGVtYU5hbWV9ID0gJHtzY2hlbWFCb2R5fTtgLFxuICAgICAgYGV4cG9ydCB0eXBlICR7c2NoZW1hTmFtZX0gPSB6LmluZmVyPHR5cGVvZiAke3NjaGVtYU5hbWV9PmAgK1xuICAgICAgICAoaGFzTWV0YWRhdGFcbiAgICAgICAgICA/IGAgJiB7JHtcbiAgICAgICAgICAgICAgKGZ1bGx0ZXh0Q29sdW1ucy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgPyBgcmVhZG9ubHkgX19mdWxsdGV4dF9fOiByZWFkb25seSBbJHtmdWxsdGV4dENvbHVtbnNcbiAgICAgICAgICAgICAgICAgICAgLm1hcCgoY29sKSA9PiBgXCIke2NvbH1cImApXG4gICAgICAgICAgICAgICAgICAgIC5qb2luKFwiLCBcIil9XSxgXG4gICAgICAgICAgICAgICAgOiBcIlwiKSArXG4gICAgICAgICAgICAgICh2aXJ0dWFsUHJvcHMubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgID8gYHJlYWRvbmx5IF9fdmlydHVhbF9fOiByZWFkb25seSBbJHt2aXJ0dWFsUHJvcHMubWFwKChwcm9wKSA9PiBgXCIke3Byb3B9XCJgKS5qb2luKFwiLCBcIil9XSxgXG4gICAgICAgICAgICAgICAgOiBcIlwiKSArXG4gICAgICAgICAgICAgICh2aXJ0dWFsUXVlcnlQcm9wcy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgPyBgcmVhZG9ubHkgX192aXJ0dWFsX3F1ZXJ5X186IHJlYWRvbmx5IFske3ZpcnR1YWxRdWVyeVByb3BzLm1hcCgocHJvcCkgPT4gYFwiJHtwcm9wfVwiYCkuam9pbihcIiwgXCIpfV0sYFxuICAgICAgICAgICAgICAgIDogXCJcIikgK1xuICAgICAgICAgICAgICAoaGFzRGVmYXVsdENvbHVtbnMubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgID8gYHJlYWRvbmx5IF9faGFzRGVmYXVsdF9fOiByZWFkb25seSBbJHtoYXNEZWZhdWx0Q29sdW1uc1xuICAgICAgICAgICAgICAgICAgICAubWFwKChjb2wpID0+IGBcIiR7Y29sfVwiYClcbiAgICAgICAgICAgICAgICAgICAgLmpvaW4oXCIsIFwiKX1dLGBcbiAgICAgICAgICAgICAgICA6IFwiXCIpICtcbiAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgIGdlbmVyYXRlZENvbHVtbnMubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgICAgPyBgcmVhZG9ubHkgX19nZW5lcmF0ZWRfXzogcmVhZG9ubHkgWyR7Z2VuZXJhdGVkQ29sdW1uc1xuICAgICAgICAgICAgICAgICAgICAgIC5tYXAoKGNvbCkgPT4gYFwiJHtjb2x9XCJgKVxuICAgICAgICAgICAgICAgICAgICAgIC5qb2luKFwiLCBcIil9XSxgXG4gICAgICAgICAgICAgICAgICA6IFwiXCJcbiAgICAgICAgICAgICAgKSArXG4gICAgICAgICAgICAgIChoYXNWZWN0b3JDb2x1bW5zLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICA/IGByZWFkb25seSBfX3ZlY3Rvcl9fOiByZWFkb25seSBbJHtoYXNWZWN0b3JDb2x1bW5zXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoKGNvbCkgPT4gYFwiJHtjb2x9XCJgKVxuICAgICAgICAgICAgICAgICAgICAuam9pbihcIiwgXCIpfV0sYFxuICAgICAgICAgICAgICAgIDogXCJcIilcbiAgICAgICAgICAgIH19YFxuICAgICAgICAgIDogXCJcIikgK1xuICAgICAgICBcIjtcIixcbiAgICBdO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGxhYmVsOiBgQmFzZVNjaGVtYTogJHtlbnRpdHkuaWR9YCxcbiAgICAgIGltcG9ydEtleXMsXG4gICAgICBsaW5lcyxcbiAgICB9O1xuICB9XG5cbiAgZ2V0QmFzZUxpc3RQYXJhbXNTb3VyY2VDb2RlKGVudGl0eTogRW50aXR5KTogU291cmNlQ29kZSB8IG51bGwge1xuICAgIC8vIFByb3Ag7JeG64qUIE1E7J24IOqyveyasCDsg53shLEg7KCc7Jm4XG4gICAgaWYgKGVudGl0eS5wcm9wcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gZWxzZSBpZiAoZW50aXR5LnBhcmVudElkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHNjaGVtYU5hbWUgPSBgJHtlbnRpdHkubmFtZXMubW9kdWxlfUJhc2VMaXN0UGFyYW1zYDtcblxuICAgIGNvbnN0IGZpbHRlclByb3BzID0gZW50aXR5LnByb3BzLmZpbHRlcigocHJvcCkgPT4gcHJvcC50b0ZpbHRlciA9PT0gdHJ1ZSk7XG5cbiAgICBjb25zdCBwcm9wTm9kZXM6IEVudGl0eVByb3BOb2RlW10gPSBmaWx0ZXJQcm9wcy5tYXAoKHByb3ApID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5vZGVUeXBlOiBcInBsYWluXCIgYXMgY29uc3QsXG4gICAgICAgIHByb3AsXG4gICAgICAgIGNoaWxkcmVuOiBbXSxcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICBjb25zdCBpbXBvcnRLZXlzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IGZpbHRlckJvZHkgPSBwcm9wTm9kZXNcbiAgICAgIC5tYXAoKHByb3BOb2RlKSA9PiBwcm9wTm9kZVRvWm9kVHlwZURlZihwcm9wTm9kZSwgaW1wb3J0S2V5cykpXG4gICAgICAuam9pbihcIlxcblwiKTtcbiAgICBjb25zdCBzY2hlbWFCb2R5ID0gYFxuei5vYmplY3Qoe1xuICBudW06IHoubnVtYmVyKCkuaW50KCkubm9ubmVnYXRpdmUoKSxcbiAgcGFnZTogei5udW1iZXIoKS5pbnQoKS5taW4oMSksXG4gIHNlYXJjaDogJHtlbnRpdHkuaWR9U2VhcmNoRmllbGQsXG4gIGtleXdvcmQ6IHouc3RyaW5nKCksXG4gIG9yZGVyQnk6ICR7ZW50aXR5LmlkfU9yZGVyQnksXG4gIHF1ZXJ5TW9kZTogU29uYW11UXVlcnlNb2RlLFxuICBpZDogekFycmF5YWJsZSh6Lm51bWJlcigpLmludCgpLnBvc2l0aXZlKCkpLCR7ZmlsdGVyQm9keX1cbn0pLnBhcnRpYWwoKTtcbmAudHJpbSgpO1xuXG4gICAgY29uc3QgbGluZXMgPSBbXG4gICAgICBgZXhwb3J0IGNvbnN0ICR7c2NoZW1hTmFtZX0gPSAke3NjaGVtYUJvZHl9YCxcbiAgICAgIGBleHBvcnQgdHlwZSAke3NjaGVtYU5hbWV9ID0gei5pbmZlcjx0eXBlb2YgJHtzY2hlbWFOYW1lfT47YCxcbiAgICBdO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGxhYmVsOiBgQmFzZUxpc3RQYXJhbXM6ICR7ZW50aXR5LmlkfWAsXG4gICAgICBpbXBvcnRLZXlzLFxuICAgICAgbGluZXMsXG4gICAgfTtcbiAgfVxuXG4gIGdldFN1YnNldFNvdXJjZUNvZGUoZW50aXR5OiBFbnRpdHkpOiBTb3VyY2VDb2RlIHwgbnVsbCB7XG4gICAgaWYgKE9iamVjdC5rZXlzKGVudGl0eS5zdWJzZXRzKS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gZWxzZSBpZiAoZW50aXR5LnBhcmVudElkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHN1YnNldEtleXMgPSBPYmplY3Qua2V5cyhlbnRpdHkuc3Vic2V0cyk7XG4gICAgY29uc3QgaW1wb3J0S2V5czogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCBsaW5lczogc3RyaW5nW10gPSBbXG4gICAgICAuLi5zdWJzZXRLZXlzLmZsYXRNYXAoKHN1YnNldEtleSkgPT4ge1xuICAgICAgICAvLyDshJzruIzshYvsl5DshJwgRmllbGRFeHByW10g6rCA7KC47Ji0XG4gICAgICAgIGNvbnN0IGZpZWxkRXhwcnMgPSBlbnRpdHkuc3Vic2V0c1tzdWJzZXRLZXldO1xuXG4gICAgICAgIC8vIEZpZWxkRXhwcltd66GcIEVudGl0eVByb3BOb2RlW10g6rCA7KC47Ji0XG4gICAgICAgIGNvbnN0IHByb3BOb2RlcyA9IGVudGl0eS5maWVsZEV4cHJzVG9Qcm9wTm9kZXMoZmllbGRFeHBycyk7XG4gICAgICAgIGNvbnN0IHNjaGVtYU5hbWUgPSBgJHtlbnRpdHkubmFtZXMubW9kdWxlfVN1YnNldCR7c3Vic2V0S2V5fWA7XG4gICAgICAgIGNvbnN0IHByb3BOb2RlOiBFbnRpdHlQcm9wTm9kZSA9IHtcbiAgICAgICAgICBub2RlVHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICBjaGlsZHJlbjogcHJvcE5vZGVzLFxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIEVudGl0eVByb3BOb2RlW13roZwgWm9kVHlwZURlZihzdHJpbmcp7J2EIOqwgOyguOyYtFxuICAgICAgICBjb25zdCBib2R5ID0gcHJvcE5vZGVUb1pvZFR5cGVEZWYocHJvcE5vZGUsIGltcG9ydEtleXMpO1xuXG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgYGV4cG9ydCBjb25zdCAke3NjaGVtYU5hbWV9ID0gJHtib2R5LnJlcGxhY2UoLywkLywgXCJcIil9O2AsXG4gICAgICAgICAgYGV4cG9ydCB0eXBlICR7c2NoZW1hTmFtZX0gPSB6LmluZmVyPHR5cGVvZiAke3NjaGVtYU5hbWV9PjtgLFxuICAgICAgICBdO1xuICAgICAgfSksXG4gICAgICBgZXhwb3J0IHR5cGUgJHtlbnRpdHkubmFtZXMubW9kdWxlfVN1YnNldE1hcHBpbmcgPSB7YCxcbiAgICAgIC4uLnN1YnNldEtleXMubWFwKChzdWJzZXRLZXkpID0+IGAgICR7c3Vic2V0S2V5fTogJHtlbnRpdHkubmFtZXMubW9kdWxlfVN1YnNldCR7c3Vic2V0S2V5fTtgKSxcbiAgICAgIFwifTtcIixcbiAgICAgIGBleHBvcnQgY29uc3QgJHtlbnRpdHkubmFtZXMubW9kdWxlfVN1YnNldEtleSA9IHouZW51bShbJHtzdWJzZXRLZXlzXG4gICAgICAgIC5tYXAoKGspID0+IGBcIiR7a31cImApXG4gICAgICAgIC5qb2luKFwiLFwiKX1dKTtgLFxuICAgICAgYGV4cG9ydCB0eXBlICR7ZW50aXR5Lm5hbWVzLm1vZHVsZX1TdWJzZXRLZXkgPSB6LmluZmVyPHR5cGVvZiAke2VudGl0eS5uYW1lcy5tb2R1bGV9U3Vic2V0S2V5PjtgLFxuICAgICAgXCJcIixcbiAgICBdO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGxhYmVsOiBgU3Vic2V0czogJHtlbnRpdHkuaWR9YCxcbiAgICAgIGxpbmVzLFxuICAgICAgaW1wb3J0S2V5czogdW5pcXVlKGltcG9ydEtleXMpLFxuICAgIH07XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJhc3NlcnQiLCJ1bmlxdWUiLCJTb25hbXUiLCJFbnRpdHlNYW5hZ2VyIiwiTmFpdGUiLCJpc1ZpcnR1YWxDb2RlUHJvcCIsImlzVmlydHVhbFF1ZXJ5UHJvcCIsIm5vbk51bGxhYmxlIiwiVGVtcGxhdGUiLCJwcm9wTm9kZVRvWm9kVHlwZURlZiIsInpvZFR5cGVUb1pvZENvZGUiLCJUZW1wbGF0ZV9fZ2VuZXJhdGVkIiwiZ2V0VGFyZ2V0QW5kUGF0aCIsImRpciIsImNvbmZpZyIsImFwaSIsInRhcmdldCIsInBhdGgiLCJyZW5kZXIiLCJlbnRpdHlJZHMiLCJnZXRBbGxJZHMiLCJlbnRpdGllcyIsIm1hcCIsImlkIiwiZ2V0Iiwic291cmNlQ29kZXMiLCJmbGF0TWFwIiwiZW50aXR5IiwiZ2V0RW51bXNTb3VyY2VDb2RlIiwiZ2V0QmFzZVNjaGVtYVNvdXJjZUNvZGUiLCJnZXRCYXNlTGlzdFBhcmFtc1NvdXJjZUNvZGUiLCJnZXRTdWJzZXRTb3VyY2VDb2RlIiwiZmlsdGVyIiwidCIsIkxBQkVMX0tFWV9PUkRFUiIsInNvcnQiLCJhIiwiYiIsImFLZXkiLCJsYWJlbCIsInNwbGl0IiwiYktleSIsImFJbmRleCIsImluZGV4T2YiLCJiSW5kZXgiLCJzb3VyY2VDb2RlIiwicmVkdWNlIiwicmVzdWx0IiwidHMiLCJsaW5lcyIsImltcG9ydEtleXMiLCJhbGxUeXBlS2V5cyIsIk9iamVjdCIsImtleXMiLCJ0eXBlcyIsImNkSW1wb3J0S2V5cyIsImltcG9ydEtleSIsImluY2x1ZGVzIiwibGVuZ3RoIiwiY3VzdG9tU2NhbGFyTGluZXMiLCJmaW5kIiwiRXJyb3IiLCJ6b2RUeXBlIiwiYm9keSIsImpvaW4iLCJzb25hbXVJbXBvcnRzIiwibW9kIiwiY3VzdG9tSGVhZGVycyIsImVudW1MYWJlbHMiLCJlbnRyaWVzIiwiXyIsImVudW1MYWJlbCIsImVudW1JZCIsImVsIiwiSlNPTiIsInN0cmluZ2lmeSIsInNjaGVtYU5hbWUiLCJuYW1lcyIsIm1vZHVsZSIsInByb3BOb2RlIiwibm9kZVR5cGUiLCJjaGlsZHJlbiIsInByb3BzIiwicHJvcCIsInNjaGVtYUJvZHkiLCJlbmRzV2l0aCIsInNsaWNlIiwiZnVsbHRleHRDb2x1bW5zIiwidmlydHVhbFByb3BzIiwibmFtZSIsInZpcnR1YWxRdWVyeVByb3BzIiwiaGFzRGVmYXVsdENvbHVtbnMiLCJ0eXBlIiwibnVsbGFibGUiLCJkYkRlZmF1bHQiLCJ1bmRlZmluZWQiLCJjb25jYXQiLCJoYXNWZWN0b3JDb2x1bW5zIiwiZ2VuZXJhdGVkQ29sdW1ucyIsImdlbmVyYXRlZCIsImhhc01ldGFkYXRhIiwiY29sIiwicGFyZW50SWQiLCJmaWx0ZXJQcm9wcyIsInRvRmlsdGVyIiwicHJvcE5vZGVzIiwiZmlsdGVyQm9keSIsInRyaW0iLCJzdWJzZXRzIiwic3Vic2V0S2V5cyIsInN1YnNldEtleSIsImZpZWxkRXhwcnMiLCJmaWVsZEV4cHJzVG9Qcm9wTm9kZXMiLCJyZXBsYWNlIiwiayJdLCJtYXBwaW5ncyI6IkFBQUEsT0FBT0EsWUFBWSxTQUFTO0FBQzVCLFNBQVNDLE1BQU0sUUFBUSxVQUFVO0FBQ2pDLFNBQVNDLE1BQU0sUUFBUSxxQkFBWTtBQUVuQyxTQUFTQyxhQUFhLFFBQVEsaUNBQThCO0FBQzVELFNBQVNDLEtBQUssUUFBUSx1QkFBb0I7QUFDMUMsU0FHRUMsaUJBQWlCLEVBQ2pCQyxrQkFBa0IsUUFDYix1QkFBb0I7QUFDM0IsU0FBU0MsV0FBVyxRQUFRLHVCQUFvQjtBQUNoRCxTQUFTQyxRQUFRLFFBQVEsaUJBQWM7QUFDdkMsU0FBU0Msb0JBQW9CLEVBQUVDLGdCQUFnQixRQUFRLHNCQUFtQjtBQU8xRSxPQUFPLE1BQU1DLDRCQUE0Qkg7SUFDdkMsYUFBYztRQUNaLEtBQUssQ0FBQztJQUNSO0lBRUFJLG1CQUFtQjtRQUNqQixNQUFNLEVBQUVDLEdBQUcsRUFBRSxHQUFHWCxPQUFPWSxNQUFNLENBQUNDLEdBQUc7UUFDakMsT0FBTztZQUNMQyxRQUFRLEdBQUdILElBQUksZ0JBQWdCLENBQUM7WUFDaENJLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQztRQUM3QjtJQUNGO0lBQ0FDLFNBQVM7UUFDUCxNQUFNQyxZQUFZaEIsY0FBY2lCLFNBQVM7UUFDekMsTUFBTUMsV0FBV0YsVUFBVUcsR0FBRyxDQUFDLENBQUNDLEtBQU9wQixjQUFjcUIsR0FBRyxDQUFDRDtRQUV6RCxtQkFBbUI7UUFDbkIsTUFBTUUsY0FBY0osU0FBU0ssT0FBTyxDQUFDLENBQUNDO1lBQ3BDLE9BQU87Z0JBQ0wsSUFBSSxDQUFDQyxrQkFBa0IsQ0FBQ0Q7Z0JBQ3hCLElBQUksQ0FBQ0UsdUJBQXVCLENBQUNGO2dCQUM3QixJQUFJLENBQUNHLDJCQUEyQixDQUFDSDtnQkFDakMsSUFBSSxDQUFD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
@@ -93,6 +93,7 @@ export type UuidArrayProp = CommonProp & {
93
93
  export type VirtualProp = CommonProp & {
94
94
  type: "virtual";
95
95
  id: string;
96
+ virtualType?: "query" | "code";
96
97
  };
97
98
  export type VectorProp = CommonProp & {
98
99
  type: "vector";
@@ -218,6 +219,12 @@ export type EntityIndex = {
218
219
  */
219
220
  lists?: number;
220
221
  };
222
+ export type SubsetField = string | {
223
+ field: string;
224
+ internal?: boolean;
225
+ };
226
+ export declare function normalizeSubsetField(f: SubsetField): string;
227
+ export declare function isInternalSubsetField(f: SubsetField): boolean;
221
228
  export type EntityJson = {
222
229
  id: string;
223
230
  parentId?: string;
@@ -226,7 +233,7 @@ export type EntityJson = {
226
233
  props: EntityProp[];
227
234
  indexes: EntityIndex[];
228
235
  subsets: {
229
- [subset: string]: string[];
236
+ [subset: string]: SubsetField[];
230
237
  };
231
238
  enums: {
232
239
  [enumId: string]: {
@@ -239,6 +246,9 @@ export type EntitySubsetRow = {
239
246
  has: {
240
247
  [key: string]: boolean;
241
248
  };
249
+ isInternal: {
250
+ [key: string]: boolean;
251
+ };
242
252
  children: EntitySubsetRow[];
243
253
  prefixes: string[];
244
254
  relationEntity?: string;
@@ -298,6 +308,8 @@ export declare function isUuidArrayProp(p: unknown): p is UuidArrayProp;
298
308
  export declare function isUuidProp(p: unknown): p is UuidProp | UuidArrayProp;
299
309
  export declare function isJsonProp(p: unknown): p is JsonProp;
300
310
  export declare function isVirtualProp(p: unknown): p is VirtualProp;
311
+ export declare function isVirtualCodeProp(p: unknown): p is VirtualProp;
312
+ export declare function isVirtualQueryProp(p: unknown): p is VirtualProp;
301
313
  export declare function isVectorSingleProp(p: unknown): p is VectorProp;
302
314
  export declare function isVectorArrayProp(p: unknown): p is VectorArrayProp;
303
315
  export declare function isVectorProp(p: unknown): p is VectorProp | VectorArrayProp;
@@ -744,9 +756,9 @@ export declare const NormalPropSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
744
756
  }, z.core.$strip>>;
745
757
  }, z.core.$strict>, z.ZodObject<{
746
758
  numberType: z.ZodOptional<z.ZodEnum<{
747
- numeric: "numeric";
748
759
  real: "real";
749
760
  "double precision": "double precision";
761
+ numeric: "numeric";
750
762
  }>>;
751
763
  precision: z.ZodOptional<z.ZodNumber>;
752
764
  scale: z.ZodOptional<z.ZodNumber>;
@@ -765,9 +777,9 @@ export declare const NormalPropSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
765
777
  }, z.core.$strip>>;
766
778
  }, z.core.$strict>, z.ZodObject<{
767
779
  numberType: z.ZodOptional<z.ZodEnum<{
768
- numeric: "numeric";
769
780
  real: "real";
770
781
  "double precision": "double precision";
782
+ numeric: "numeric";
771
783
  }>>;
772
784
  precision: z.ZodOptional<z.ZodNumber>;
773
785
  scale: z.ZodOptional<z.ZodNumber>;
@@ -834,6 +846,10 @@ export declare const NormalPropSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
834
846
  }, z.core.$strict>, z.ZodObject<{
835
847
  type: z.ZodLiteral<"virtual">;
836
848
  id: z.ZodString;
849
+ virtualType: z.ZodOptional<z.ZodEnum<{
850
+ query: "query";
851
+ code: "code";
852
+ }>>;
837
853
  name: z.ZodString;
838
854
  desc: z.ZodOptional<z.ZodString>;
839
855
  nullable: z.ZodOptional<z.ZodBoolean>;
@@ -959,9 +975,9 @@ export declare const EntityJsonSchema: z.ZodObject<{
959
975
  }, z.core.$strip>>;
960
976
  }, z.core.$strict>, z.ZodObject<{
961
977
  numberType: z.ZodOptional<z.ZodEnum<{
962
- numeric: "numeric";
963
978
  real: "real";
964
979
  "double precision": "double precision";
980
+ numeric: "numeric";
965
981
  }>>;
966
982
  precision: z.ZodOptional<z.ZodNumber>;
967
983
  scale: z.ZodOptional<z.ZodNumber>;
@@ -980,9 +996,9 @@ export declare const EntityJsonSchema: z.ZodObject<{
980
996
  }, z.core.$strip>>;
981
997
  }, z.core.$strict>, z.ZodObject<{
982
998
  numberType: z.ZodOptional<z.ZodEnum<{
983
- numeric: "numeric";
984
999
  real: "real";
985
1000
  "double precision": "double precision";
1001
+ numeric: "numeric";
986
1002
  }>>;
987
1003
  precision: z.ZodOptional<z.ZodNumber>;
988
1004
  scale: z.ZodOptional<z.ZodNumber>;
@@ -1049,6 +1065,10 @@ export declare const EntityJsonSchema: z.ZodObject<{
1049
1065
  }, z.core.$strict>, z.ZodObject<{
1050
1066
  type: z.ZodLiteral<"virtual">;
1051
1067
  id: z.ZodString;
1068
+ virtualType: z.ZodOptional<z.ZodEnum<{
1069
+ query: "query";
1070
+ code: "code";
1071
+ }>>;
1052
1072
  name: z.ZodString;
1053
1073
  desc: z.ZodOptional<z.ZodString>;
1054
1074
  nullable: z.ZodOptional<z.ZodBoolean>;
@@ -1239,14 +1259,17 @@ export declare const EntityJsonSchema: z.ZodObject<{
1239
1259
  efConstruction: z.ZodOptional<z.ZodNumber>;
1240
1260
  lists: z.ZodOptional<z.ZodNumber>;
1241
1261
  }, z.core.$strict>>;
1242
- subsets: z.ZodRecord<z.ZodString, z.ZodArray<z.ZodString>>;
1262
+ subsets: z.ZodRecord<z.ZodString, z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
1263
+ field: z.ZodString;
1264
+ internal: z.ZodOptional<z.ZodBoolean>;
1265
+ }, z.core.$strip>]>>>;
1243
1266
  enums: z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodString>>;
1244
1267
  }, z.core.$strict>;
1245
1268
  export declare const TemplateOptions: z.ZodObject<{
1246
1269
  entity: z.ZodObject<{
1247
1270
  table: z.ZodOptional<z.ZodString>;
1248
- parentId: z.ZodOptional<z.ZodString>;
1249
1271
  title: z.ZodString;
1272
+ parentId: z.ZodOptional<z.ZodString>;
1250
1273
  props: z.ZodOptional<z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodDiscriminatedUnion<[z.ZodObject<{
1251
1274
  type: z.ZodUnion<readonly [z.ZodLiteral<"integer">, z.ZodLiteral<"integer[]">, z.ZodLiteral<"bigInteger">, z.ZodLiteral<"bigInteger[]">, z.ZodLiteral<"boolean">, z.ZodLiteral<"boolean[]">, z.ZodLiteral<"date">, z.ZodLiteral<"date[]">, z.ZodLiteral<"uuid">, z.ZodLiteral<"uuid[]">, z.ZodLiteral<"tsvector">]>;
1252
1275
  name: z.ZodString;
@@ -1324,9 +1347,9 @@ export declare const TemplateOptions: z.ZodObject<{
1324
1347
  }, z.core.$strip>>;
1325
1348
  }, z.core.$strict>, z.ZodObject<{
1326
1349
  numberType: z.ZodOptional<z.ZodEnum<{
1327
- numeric: "numeric";
1328
1350
  real: "real";
1329
1351
  "double precision": "double precision";
1352
+ numeric: "numeric";
1330
1353
  }>>;
1331
1354
  precision: z.ZodOptional<z.ZodNumber>;
1332
1355
  scale: z.ZodOptional<z.ZodNumber>;
@@ -1345,9 +1368,9 @@ export declare const TemplateOptions: z.ZodObject<{
1345
1368
  }, z.core.$strip>>;
1346
1369
  }, z.core.$strict>, z.ZodObject<{
1347
1370
  numberType: z.ZodOptional<z.ZodEnum<{
1348
- numeric: "numeric";
1349
1371
  real: "real";
1350
1372
  "double precision": "double precision";
1373
+ numeric: "numeric";
1351
1374
  }>>;
1352
1375
  precision: z.ZodOptional<z.ZodNumber>;
1353
1376
  scale: z.ZodOptional<z.ZodNumber>;
@@ -1414,6 +1437,10 @@ export declare const TemplateOptions: z.ZodObject<{
1414
1437
  }, z.core.$strict>, z.ZodObject<{
1415
1438
  type: z.ZodLiteral<"virtual">;
1416
1439
  id: z.ZodString;
1440
+ virtualType: z.ZodOptional<z.ZodEnum<{
1441
+ query: "query";
1442
+ code: "code";
1443
+ }>>;
1417
1444
  name: z.ZodString;
1418
1445
  desc: z.ZodOptional<z.ZodString>;
1419
1446
  nullable: z.ZodOptional<z.ZodBoolean>;
@@ -1604,7 +1631,10 @@ export declare const TemplateOptions: z.ZodObject<{
1604
1631
  efConstruction: z.ZodOptional<z.ZodNumber>;
1605
1632
  lists: z.ZodOptional<z.ZodNumber>;
1606
1633
  }, z.core.$strict>>>;
1607
- subsets: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodArray<z.ZodString>>>;
1634
+ subsets: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
1635
+ field: z.ZodString;
1636
+ internal: z.ZodOptional<z.ZodBoolean>;
1637
+ }, z.core.$strip>]>>>>;
1608
1638
  enums: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodString>>>;
1609
1639
  entityId: z.ZodString;
1610
1640
  }, z.core.$strict>;
@@ -1681,9 +1711,9 @@ export declare const TemplateOptions: z.ZodObject<{
1681
1711
  }, z.core.$strip>;
1682
1712
  export type TemplateOptions = z.infer<typeof TemplateOptions>;
1683
1713
  export declare const TemplateKey: z.ZodEnum<{
1684
- generated: "generated";
1685
1714
  entity: "entity";
1686
1715
  init_types: "init_types";
1716
+ generated: "generated";
1687
1717
  generated_sso: "generated_sso";
1688
1718
  generated_http: "generated_http";
1689
1719
  model: "model";