@mnaoumov/obsidian-lib 1.0.1 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/cjs/__merged.cjs +15 -1
- package/dist/lib/cjs/__merged.d.cts +5 -3
- package/dist/lib/cjs/app.cjs +1 -1
- package/dist/lib/cjs/attachment-path.cjs +62 -9
- package/dist/lib/cjs/attachment-path.d.cts +21 -43
- package/dist/lib/cjs/attachment-unit-folder.cjs +1 -1
- package/dist/lib/cjs/attachment-unit-folder.d.cts +8 -9
- package/dist/lib/cjs/components/plugin-notice-component.cjs +7 -2
- package/dist/lib/cjs/components/plugin-notice-component.d.cts +3 -0
- package/dist/lib/cjs/components/release-notes-component.cjs +3 -2
- package/dist/lib/cjs/components/settings-migration-component.cjs +5 -5
- package/dist/lib/cjs/components/settings-migration-component.d.cts +6 -4
- package/dist/lib/cjs/dataview.cjs +1 -1
- package/dist/lib/cjs/dataview.d.cts +9 -3
- package/dist/lib/cjs/demo-vault-helper.cjs +3 -2
- package/dist/lib/cjs/desktop-demo-vault-opener.cjs +9 -8
- package/dist/lib/cjs/file-system.cjs +6 -1
- package/dist/lib/cjs/file-system.d.cts +7 -0
- package/dist/lib/cjs/generated-during-build.cjs +2 -2
- package/dist/lib/cjs/metadata-cache.cjs +25 -7
- package/dist/lib/cjs/metadata-cache.d.cts +8 -19
- package/dist/lib/cjs/plugin/index.cjs +4 -1
- package/dist/lib/cjs/plugin/index.d.cts +1 -0
- package/dist/lib/cjs/plugin/plugin-api-schema.cjs +171 -0
- package/dist/lib/cjs/plugin/plugin-api-schema.d.cts +59 -0
- package/dist/lib/cjs/plugin/plugin-api.cjs +7 -1
- package/dist/lib/cjs/plugin/plugin-api.d.cts +83 -10
- package/dist/lib/cjs/plugin/settings-migration-api.cjs +30 -1
- package/dist/lib/cjs/plugin/settings-migration-api.d.cts +16 -3
- package/dist/lib/esm/__merged.d.mts +5 -3
- package/dist/lib/esm/__merged.mjs +15 -1
- package/dist/lib/esm/app.mjs +1 -1
- package/dist/lib/esm/attachment-path.d.mts +21 -43
- package/dist/lib/esm/attachment-path.mjs +65 -9
- package/dist/lib/esm/attachment-unit-folder.d.mts +8 -9
- package/dist/lib/esm/attachment-unit-folder.mjs +1 -1
- package/dist/lib/esm/components/plugin-notice-component.d.mts +3 -0
- package/dist/lib/esm/components/plugin-notice-component.mjs +7 -2
- package/dist/lib/esm/components/release-notes-component.mjs +6 -2
- package/dist/lib/esm/components/settings-migration-component.d.mts +6 -4
- package/dist/lib/esm/components/settings-migration-component.mjs +5 -5
- package/dist/lib/esm/dataview.d.mts +9 -3
- package/dist/lib/esm/dataview.mjs +1 -1
- package/dist/lib/esm/demo-vault-helper.mjs +3 -2
- package/dist/lib/esm/desktop-demo-vault-opener.mjs +12 -8
- package/dist/lib/esm/file-system.d.mts +7 -0
- package/dist/lib/esm/file-system.mjs +5 -1
- package/dist/lib/esm/generated-during-build.mjs +2 -2
- package/dist/lib/esm/metadata-cache.d.mts +8 -19
- package/dist/lib/esm/metadata-cache.mjs +30 -8
- package/dist/lib/esm/plugin/index.d.mts +1 -0
- package/dist/lib/esm/plugin/index.mjs +3 -1
- package/dist/lib/esm/plugin/plugin-api-schema.d.mts +59 -0
- package/dist/lib/esm/plugin/plugin-api-schema.mjs +73 -0
- package/dist/lib/esm/plugin/plugin-api.d.mts +83 -10
- package/dist/lib/esm/plugin/plugin-api.mjs +6 -1
- package/dist/lib/esm/plugin/settings-migration-api.d.mts +16 -3
- package/dist/lib/esm/plugin/settings-migration-api.mjs +25 -1
- package/dist/styles.css +4 -1
- package/package.json +4 -135
- package/plugin/plugin-api-schema/package.json +6 -0
- package/@types/dataview/api/data-array/package.json +0 -4
- package/@types/dataview/api/extensions/package.json +0 -4
- package/@types/dataview/api/inline-api/package.json +0 -4
- package/@types/dataview/api/plugin-api/package.json +0 -4
- package/@types/dataview/api/result/package.json +0 -4
- package/@types/dataview/data-import/common/package.json +0 -4
- package/@types/dataview/data-import/csv/package.json +0 -4
- package/@types/dataview/data-import/inline-field/package.json +0 -4
- package/@types/dataview/data-import/markdown-file/package.json +0 -4
- package/@types/dataview/data-import/persister/package.json +0 -4
- package/@types/dataview/data-import/web-worker/import-entry/package.json +0 -4
- package/@types/dataview/data-import/web-worker/import-impl/package.json +0 -4
- package/@types/dataview/data-import/web-worker/import-manager/package.json +0 -4
- package/@types/dataview/data-index/index/package.json +0 -4
- package/@types/dataview/data-index/package.json +0 -4
- package/@types/dataview/data-index/resolver/package.json +0 -4
- package/@types/dataview/data-index/source/package.json +0 -4
- package/@types/dataview/data-model/markdown/package.json +0 -4
- package/@types/dataview/data-model/serialized/markdown/package.json +0 -4
- package/@types/dataview/data-model/transferable/package.json +0 -4
- package/@types/dataview/data-model/value/package.json +0 -4
- package/@types/dataview/expression/binaryop/package.json +0 -4
- package/@types/dataview/expression/context/package.json +0 -4
- package/@types/dataview/expression/field/package.json +0 -4
- package/@types/dataview/expression/functions/package.json +0 -4
- package/@types/dataview/expression/parse/package.json +0 -4
- package/@types/dataview/index/package.json +0 -4
- package/@types/dataview/main/package.json +0 -4
- package/@types/dataview/package.json +0 -4
- package/@types/dataview/query/engine/package.json +0 -4
- package/@types/dataview/query/parse/package.json +0 -4
- package/@types/dataview/query/query/package.json +0 -4
- package/@types/dataview/settings/package.json +0 -4
- package/@types/dataview/typings/obsidian-ex/package.json +0 -4
- package/@types/dataview/typings/workers/package.json +0 -4
- package/@types/dataview/ui/export/markdown/package.json +0 -4
- package/@types/dataview/ui/lp-render/package.json +0 -4
- package/@types/dataview/ui/markdown/package.json +0 -4
- package/@types/dataview/ui/refreshable-view/package.json +0 -4
- package/@types/dataview/ui/render/package.json +0 -4
- package/@types/dataview/ui/views/calendar-view/package.json +0 -4
- package/@types/dataview/ui/views/inline-field-live-preview/package.json +0 -4
- package/@types/dataview/ui/views/inline-view/package.json +0 -4
- package/@types/dataview/ui/views/js-view/package.json +0 -4
- package/@types/dataview/ui/views/list-view/package.json +0 -4
- package/@types/dataview/ui/views/table-view/package.json +0 -4
- package/@types/dataview/ui/views/task-view/package.json +0 -4
- package/@types/dataview/util/hash/package.json +0 -4
- package/@types/dataview/util/locale/package.json +0 -4
- package/@types/dataview/util/media/package.json +0 -4
- package/@types/dataview/util/normalize/package.json +0 -4
- package/dist/lib/cjs/@types/dataview/api/data-array.d.cts +0 -137
- package/dist/lib/cjs/@types/dataview/api/extensions.d.cts +0 -16
- package/dist/lib/cjs/@types/dataview/api/inline-api.d.cts +0 -187
- package/dist/lib/cjs/@types/dataview/api/plugin-api.d.cts +0 -210
- package/dist/lib/cjs/@types/dataview/api/result.d.cts +0 -39
- package/dist/lib/cjs/@types/dataview/data-import/common.d.cts +0 -4
- package/dist/lib/cjs/@types/dataview/data-import/csv.d.cts +0 -4
- package/dist/lib/cjs/@types/dataview/data-import/inline-field.d.cts +0 -43
- package/dist/lib/cjs/@types/dataview/data-import/markdown-file.d.cts +0 -53
- package/dist/lib/cjs/@types/dataview/data-import/persister.d.cts +0 -33
- package/dist/lib/cjs/@types/dataview/data-import/web-worker/import-entry.d.cts +0 -2
- package/dist/lib/cjs/@types/dataview/data-import/web-worker/import-impl.d.cts +0 -7
- package/dist/lib/cjs/@types/dataview/data-import/web-worker/import-manager.d.cts +0 -38
- package/dist/lib/cjs/@types/dataview/data-index/index.d.cts +0 -187
- package/dist/lib/cjs/@types/dataview/data-index/resolver.d.cts +0 -24
- package/dist/lib/cjs/@types/dataview/data-index/source.d.cts +0 -72
- package/dist/lib/cjs/@types/dataview/data-model/markdown.d.cts +0 -116
- package/dist/lib/cjs/@types/dataview/data-model/serialized/markdown.d.cts +0 -107
- package/dist/lib/cjs/@types/dataview/data-model/transferable.d.cts +0 -8
- package/dist/lib/cjs/@types/dataview/data-model/value.d.cts +0 -176
- package/dist/lib/cjs/@types/dataview/expression/binaryop.d.cts +0 -44
- package/dist/lib/cjs/@types/dataview/expression/context.d.cts +0 -50
- package/dist/lib/cjs/@types/dataview/expression/field.d.cts +0 -83
- package/dist/lib/cjs/@types/dataview/expression/functions.d.cts +0 -150
- package/dist/lib/cjs/@types/dataview/expression/parse.d.cts +0 -164
- package/dist/lib/cjs/@types/dataview/index.d.cts +0 -56
- package/dist/lib/cjs/@types/dataview/main.d.cts +0 -53
- package/dist/lib/cjs/@types/dataview/query/engine.d.cts +0 -104
- package/dist/lib/cjs/@types/dataview/query/parse.d.cts +0 -45
- package/dist/lib/cjs/@types/dataview/query/query.d.cts +0 -96
- package/dist/lib/cjs/@types/dataview/settings.d.cts +0 -61
- package/dist/lib/cjs/@types/dataview/typings/obsidian-ex.d.cts +0 -29
- package/dist/lib/cjs/@types/dataview/typings/workers.d.cts +0 -5
- package/dist/lib/cjs/@types/dataview/ui/export/markdown.d.cts +0 -16
- package/dist/lib/cjs/@types/dataview/ui/lp-render.d.cts +0 -38
- package/dist/lib/cjs/@types/dataview/ui/markdown.d.cts +0 -87
- package/dist/lib/cjs/@types/dataview/ui/refreshable-view.d.cts +0 -19
- package/dist/lib/cjs/@types/dataview/ui/render.d.cts +0 -34
- package/dist/lib/cjs/@types/dataview/ui/views/calendar-view.d.cts +0 -18
- package/dist/lib/cjs/@types/dataview/ui/views/inline-field-live-preview.d.cts +0 -43
- package/dist/lib/cjs/@types/dataview/ui/views/inline-view.d.cts +0 -29
- package/dist/lib/cjs/@types/dataview/ui/views/js-view.d.cts +0 -24
- package/dist/lib/cjs/@types/dataview/ui/views/list-view.d.cts +0 -26
- package/dist/lib/cjs/@types/dataview/ui/views/table-view.d.cts +0 -29
- package/dist/lib/cjs/@types/dataview/ui/views/task-view.d.cts +0 -52
- package/dist/lib/cjs/@types/dataview/util/hash.d.cts +0 -2
- package/dist/lib/cjs/@types/dataview/util/locale.d.cts +0 -3
- package/dist/lib/cjs/@types/dataview/util/media.d.cts +0 -7
- package/dist/lib/cjs/@types/dataview/util/normalize.d.cts +0 -45
- package/dist/lib/esm/@types/dataview/api/data-array.d.mts +0 -137
- package/dist/lib/esm/@types/dataview/api/extensions.d.mts +0 -16
- package/dist/lib/esm/@types/dataview/api/inline-api.d.mts +0 -187
- package/dist/lib/esm/@types/dataview/api/plugin-api.d.mts +0 -210
- package/dist/lib/esm/@types/dataview/api/result.d.mts +0 -39
- package/dist/lib/esm/@types/dataview/data-import/common.d.mts +0 -4
- package/dist/lib/esm/@types/dataview/data-import/csv.d.mts +0 -4
- package/dist/lib/esm/@types/dataview/data-import/inline-field.d.mts +0 -43
- package/dist/lib/esm/@types/dataview/data-import/markdown-file.d.mts +0 -53
- package/dist/lib/esm/@types/dataview/data-import/persister.d.mts +0 -33
- package/dist/lib/esm/@types/dataview/data-import/web-worker/import-entry.d.mts +0 -2
- package/dist/lib/esm/@types/dataview/data-import/web-worker/import-impl.d.mts +0 -7
- package/dist/lib/esm/@types/dataview/data-import/web-worker/import-manager.d.mts +0 -38
- package/dist/lib/esm/@types/dataview/data-index/index.d.mts +0 -187
- package/dist/lib/esm/@types/dataview/data-index/resolver.d.mts +0 -24
- package/dist/lib/esm/@types/dataview/data-index/source.d.mts +0 -72
- package/dist/lib/esm/@types/dataview/data-model/markdown.d.mts +0 -116
- package/dist/lib/esm/@types/dataview/data-model/serialized/markdown.d.mts +0 -107
- package/dist/lib/esm/@types/dataview/data-model/transferable.d.mts +0 -8
- package/dist/lib/esm/@types/dataview/data-model/value.d.mts +0 -176
- package/dist/lib/esm/@types/dataview/expression/binaryop.d.mts +0 -44
- package/dist/lib/esm/@types/dataview/expression/context.d.mts +0 -50
- package/dist/lib/esm/@types/dataview/expression/field.d.mts +0 -83
- package/dist/lib/esm/@types/dataview/expression/functions.d.mts +0 -150
- package/dist/lib/esm/@types/dataview/expression/parse.d.mts +0 -164
- package/dist/lib/esm/@types/dataview/index.d.mts +0 -56
- package/dist/lib/esm/@types/dataview/main.d.mts +0 -53
- package/dist/lib/esm/@types/dataview/query/engine.d.mts +0 -104
- package/dist/lib/esm/@types/dataview/query/parse.d.mts +0 -45
- package/dist/lib/esm/@types/dataview/query/query.d.mts +0 -96
- package/dist/lib/esm/@types/dataview/settings.d.mts +0 -61
- package/dist/lib/esm/@types/dataview/typings/obsidian-ex.d.mts +0 -29
- package/dist/lib/esm/@types/dataview/typings/workers.d.mts +0 -5
- package/dist/lib/esm/@types/dataview/ui/export/markdown.d.mts +0 -16
- package/dist/lib/esm/@types/dataview/ui/lp-render.d.mts +0 -38
- package/dist/lib/esm/@types/dataview/ui/markdown.d.mts +0 -87
- package/dist/lib/esm/@types/dataview/ui/refreshable-view.d.mts +0 -19
- package/dist/lib/esm/@types/dataview/ui/render.d.mts +0 -34
- package/dist/lib/esm/@types/dataview/ui/views/calendar-view.d.mts +0 -18
- package/dist/lib/esm/@types/dataview/ui/views/inline-field-live-preview.d.mts +0 -43
- package/dist/lib/esm/@types/dataview/ui/views/inline-view.d.mts +0 -29
- package/dist/lib/esm/@types/dataview/ui/views/js-view.d.mts +0 -24
- package/dist/lib/esm/@types/dataview/ui/views/list-view.d.mts +0 -26
- package/dist/lib/esm/@types/dataview/ui/views/table-view.d.mts +0 -29
- package/dist/lib/esm/@types/dataview/ui/views/task-view.d.mts +0 -52
- package/dist/lib/esm/@types/dataview/util/hash.d.mts +0 -2
- package/dist/lib/esm/@types/dataview/util/locale.d.mts +0 -3
- package/dist/lib/esm/@types/dataview/util/media.d.mts +0 -7
- package/dist/lib/esm/@types/dataview/util/normalize.d.mts +0 -45
|
@@ -61,14 +61,38 @@ import {
|
|
|
61
61
|
getFolder,
|
|
62
62
|
getFolderOrNull,
|
|
63
63
|
getPath,
|
|
64
|
+
isPathOrFile,
|
|
64
65
|
MARKDOWN_FILE_EXTENSION
|
|
65
66
|
} from "./file-system.mjs";
|
|
67
|
+
import {
|
|
68
|
+
createArgumentsSchema,
|
|
69
|
+
createTypeGuardSchema
|
|
70
|
+
} from "./plugin/plugin-api-schema.mjs";
|
|
71
|
+
import { findPluginApi } from "./plugin/plugin-api.mjs";
|
|
66
72
|
var AttachmentPathContext = /* @__PURE__ */ ((AttachmentPathContext2) => {
|
|
67
73
|
AttachmentPathContext2["DeleteNote"] = "DeleteNote";
|
|
68
74
|
AttachmentPathContext2["RenameNote"] = "RenameNote";
|
|
69
75
|
AttachmentPathContext2["Unknown"] = "Unknown";
|
|
70
76
|
return AttachmentPathContext2;
|
|
71
77
|
})(AttachmentPathContext || {});
|
|
78
|
+
const CUSTOM_ATTACHMENT_LOCATION_PLUGIN_ID = "obsidian-custom-attachment-location";
|
|
79
|
+
const CUSTOM_ATTACHMENT_LOCATION_ATTACHMENT_PATH_API_VERSION_RANGE = "^1.3.0";
|
|
80
|
+
const CUSTOM_ATTACHMENT_LOCATION_ATTACHMENT_PATH_API_CONTRACT = {
|
|
81
|
+
getAvailablePathForAttachments: {
|
|
82
|
+
input: createArgumentsSchema([{
|
|
83
|
+
expected: "the attachment-path parameters",
|
|
84
|
+
typeGuard: isGetAvailablePathForAttachmentsExtendedFunctionParams
|
|
85
|
+
}]),
|
|
86
|
+
output: createTypeGuardSchema({ expected: "a string", typeGuard: isString })
|
|
87
|
+
},
|
|
88
|
+
isAttachmentUnitFolder: {
|
|
89
|
+
input: createArgumentsSchema([{
|
|
90
|
+
expected: "an object with a string folderPath",
|
|
91
|
+
typeGuard: isCustomAttachmentLocationIsAttachmentUnitFolderParams
|
|
92
|
+
}]),
|
|
93
|
+
output: createTypeGuardSchema({ expected: "a boolean", typeGuard: isBoolean })
|
|
94
|
+
}
|
|
95
|
+
};
|
|
72
96
|
const DUMMY_PATH = "__DUMMY__";
|
|
73
97
|
async function getAttachmentFilePath(params) {
|
|
74
98
|
const {
|
|
@@ -77,8 +101,8 @@ async function getAttachmentFilePath(params) {
|
|
|
77
101
|
oldAttachmentPathOrFile,
|
|
78
102
|
shouldSkipDuplicateCheck
|
|
79
103
|
} = params;
|
|
80
|
-
const
|
|
81
|
-
if (!
|
|
104
|
+
const customAttachmentLocationApi = findCustomAttachmentLocationApi();
|
|
105
|
+
if (!customAttachmentLocationApi) {
|
|
82
106
|
return getAttachmentFilePathSync({
|
|
83
107
|
app,
|
|
84
108
|
notePathOrFile,
|
|
@@ -90,7 +114,7 @@ async function getAttachmentFilePath(params) {
|
|
|
90
114
|
const attachmentFileExtension = extname(attachmentPath);
|
|
91
115
|
const attachmentFileBaseName = basename(attachmentPath, attachmentFileExtension);
|
|
92
116
|
const attachmentFile = getFileOrNull({ app, pathOrFile: attachmentPath });
|
|
93
|
-
return await
|
|
117
|
+
return await customAttachmentLocationApi.getAvailablePathForAttachments({
|
|
94
118
|
attachmentFileBaseName,
|
|
95
119
|
attachmentFileExtension: attachmentFileExtension.slice(1),
|
|
96
120
|
attachmentFileStats: attachmentFile?.stat,
|
|
@@ -124,7 +148,7 @@ function getAttachmentFolderPathSyncOrNull(params) {
|
|
|
124
148
|
app,
|
|
125
149
|
notePathOrFile
|
|
126
150
|
} = params;
|
|
127
|
-
return
|
|
151
|
+
return findCustomAttachmentLocationApi() ? null : parentFolderPath(getAttachmentFilePathSync({
|
|
128
152
|
app,
|
|
129
153
|
notePathOrFile,
|
|
130
154
|
oldAttachmentPathOrFile: DUMMY_PATH,
|
|
@@ -143,8 +167,9 @@ async function getAvailablePathForAttachments(params) {
|
|
|
143
167
|
}
|
|
144
168
|
return getAvailablePathForAttachmentsSync(params);
|
|
145
169
|
}
|
|
146
|
-
function getCheckIsAttachmentUnitFolderFunction(
|
|
147
|
-
|
|
170
|
+
function getCheckIsAttachmentUnitFolderFunction(_app) {
|
|
171
|
+
const customAttachmentLocationApi = findCustomAttachmentLocationApi();
|
|
172
|
+
return customAttachmentLocationApi ? (folderPath) => customAttachmentLocationApi.isAttachmentUnitFolder({ folderPath }) : void 0;
|
|
148
173
|
}
|
|
149
174
|
async function hasOwnAttachmentFolder(params) {
|
|
150
175
|
const {
|
|
@@ -203,6 +228,13 @@ async function isAtProperAttachmentPath(params) {
|
|
|
203
228
|
const deduplicationSuffix = currentBaseName.slice(deduplicationPrefix.length);
|
|
204
229
|
return /^\d+$/.test(deduplicationSuffix);
|
|
205
230
|
}
|
|
231
|
+
function findCustomAttachmentLocationApi() {
|
|
232
|
+
return findPluginApi({
|
|
233
|
+
apiVersionRange: CUSTOM_ATTACHMENT_LOCATION_ATTACHMENT_PATH_API_VERSION_RANGE,
|
|
234
|
+
contract: CUSTOM_ATTACHMENT_LOCATION_ATTACHMENT_PATH_API_CONTRACT,
|
|
235
|
+
pluginId: CUSTOM_ATTACHMENT_LOCATION_PLUGIN_ID
|
|
236
|
+
});
|
|
237
|
+
}
|
|
206
238
|
function getAttachmentFilePathSync(params) {
|
|
207
239
|
const {
|
|
208
240
|
app,
|
|
@@ -236,8 +268,31 @@ function getAvailablePathForAttachmentsSync(params) {
|
|
|
236
268
|
fileExtension: attachmentFileExtension
|
|
237
269
|
}) : app.vault.getAvailablePath(prefix + attachmentFileBaseName, attachmentFileExtension);
|
|
238
270
|
}
|
|
239
|
-
function
|
|
240
|
-
return
|
|
271
|
+
function isBoolean(value) {
|
|
272
|
+
return typeof value === "boolean";
|
|
273
|
+
}
|
|
274
|
+
function isCustomAttachmentLocationIsAttachmentUnitFolderParams(value) {
|
|
275
|
+
return typeof value === "object" && value !== null && typeof Reflect.get(value, "folderPath") === "string";
|
|
276
|
+
}
|
|
277
|
+
function isGetAvailablePathForAttachmentsExtendedFunctionParams(value) {
|
|
278
|
+
if (typeof value !== "object" || value === null) {
|
|
279
|
+
return false;
|
|
280
|
+
}
|
|
281
|
+
function read(key) {
|
|
282
|
+
return Reflect.get(value, key);
|
|
283
|
+
}
|
|
284
|
+
const attachmentFileStats = read("attachmentFileStats");
|
|
285
|
+
const context = read("context");
|
|
286
|
+
const notePathOrFile = read("notePathOrFile");
|
|
287
|
+
const oldNotePathOrFile = read("oldNotePathOrFile");
|
|
288
|
+
const readAttachmentFileContent = read("readAttachmentFileContent");
|
|
289
|
+
return typeof read("attachmentFileBaseName") === "string" && typeof read("attachmentFileExtension") === "string" && (attachmentFileStats === void 0 || typeof attachmentFileStats === "object" && attachmentFileStats !== null) && Object.values(AttachmentPathContext).includes(context) && (notePathOrFile === null || isPathOrFile(notePathOrFile)) && isPathOrFile(read("oldAttachmentPathOrFile")) && (oldNotePathOrFile === void 0 || isPathOrFile(oldNotePathOrFile)) && (readAttachmentFileContent === null || typeof readAttachmentFileContent === "function") && isOptionalBoolean(read("shouldSkipDuplicateCheck")) && isOptionalBoolean(read("shouldSkipGeneratedAttachmentFileName")) && isOptionalBoolean(read("shouldSkipMissingAttachmentFolderCreation"));
|
|
290
|
+
}
|
|
291
|
+
function isOptionalBoolean(value) {
|
|
292
|
+
return value === void 0 || isBoolean(value);
|
|
293
|
+
}
|
|
294
|
+
function isString(value) {
|
|
295
|
+
return typeof value === "string";
|
|
241
296
|
}
|
|
242
297
|
function normalizeSlashes(path) {
|
|
243
298
|
path = replaceAll({
|
|
@@ -282,6 +337,7 @@ function resolveAttachmentFolder(params) {
|
|
|
282
337
|
}
|
|
283
338
|
export {
|
|
284
339
|
AttachmentPathContext,
|
|
340
|
+
CUSTOM_ATTACHMENT_LOCATION_PLUGIN_ID,
|
|
285
341
|
DUMMY_PATH,
|
|
286
342
|
getAttachmentFilePath,
|
|
287
343
|
getAttachmentFolderPath,
|
|
@@ -291,4 +347,4 @@ export {
|
|
|
291
347
|
hasOwnAttachmentFolder,
|
|
292
348
|
isAtProperAttachmentPath
|
|
293
349
|
};
|
|
294
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2F0dGFjaG1lbnQtcGF0aC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFByb3ZpZGVzIHV0aWxpdHkgZnVuY3Rpb25zIGZvciB3b3JraW5nIHdpdGggYXR0YWNobWVudCBwYXRocy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIEFwcCxcbiAgRmlsZVN0YXRzLFxuICBURm9sZGVyLFxuICBWYXVsdFxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7XG4gIGJhc2VuYW1lLFxuICBkaXJuYW1lLFxuICBleHRuYW1lLFxuICBqb2luLFxuICBtYWtlRmlsZU5hbWVcbn0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3BhdGgnO1xuaW1wb3J0IHtcbiAgbm9ybWFsaXplU3RyaW5nLFxuICByZXBsYWNlQWxsLFxuICB0cmltU3RhcnRcbn0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3N0cmluZyc7XG5pbXBvcnQge1xuICBnZXREYXRhQWRhcHRlckV4LFxuICBwYXJlbnRGb2xkZXJQYXRoXG59IGZyb20gJ0BvYnNpZGlhbi10eXBpbmdzL29ic2lkaWFuLXB1YmxpYy1sYXRlc3QvaW1wbGVtZW50YXRpb25zJztcblxuaW1wb3J0IHR5cGUgeyBQYXRoT3JGaWxlIH0gZnJvbSAnLi9maWxlLXN5c3RlbS50cyc7XG5cbmltcG9ydCB7XG4gIGdldEZpbGUsXG4gIGdldEZpbGVPck51bGwsXG4gIGdldEZvbGRlcixcbiAgZ2V0Rm9sZGVyT3JOdWxsLFxuICBnZXRQYXRoLFxuICBNQVJLRE9XTl9GSUxFX0VYVEVOU0lPTlxufSBmcm9tICcuL2ZpbGUtc3lzdGVtLnRzJztcblxuLyoqXG4gKiBBIGNvbnRleHQgZm9yIGFuIGF0dGFjaG1lbnQgcGF0aC5cbiAqL1xuZXhwb3J0IGVudW0gQXR0YWNobWVudFBhdGhDb250ZXh0IHtcbiAgLyoqXG4gICAqIEEgY29udGV4dCBmb3IgYSBkZWxldGUgbm90ZS5cbiAgICovXG4gIERlbGV0ZU5vdGUgPSAnRGVsZXRlTm90ZScsXG5cbiAgLyoqXG4gICAqIEEgY29udGV4dCBmb3IgYSByZW5hbWUgbm90ZS5cbiAgICovXG4gIFJlbmFtZU5vdGUgPSAnUmVuYW1lTm90ZScsXG5cbiAgLyoqXG4gICAqIEFuIHVua25vd24gY29udGV4dC5cbiAgICovXG4gIFVua25vd24gPSAnVW5rbm93bidcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciB0aGUgZ2V0IGF2YWlsYWJsZSBwYXRoIGZvciBhdHRhY2htZW50cyBleHRlbmRlZCBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZXRBdmFpbGFibGVQYXRoRm9yQXR0YWNobWVudHNFeHRlbmRlZEZ1bmN0aW9uUGFyYW1zIHtcbiAgLyoqXG4gICAqIEEgYmFzZSBuYW1lIG9mIHRoZSBhdHRhY2htZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgYXR0YWNobWVudEZpbGVCYXNlTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBbiBleHRlbnNpb24gb2YgdGhlIGF0dGFjaG1lbnQuXG4gICAqL1xuICByZWFkb25seSBhdHRhY2htZW50RmlsZUV4dGVuc2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIHN0YXRzIG9mIHRoZSBhdHRhY2htZW50IGZpbGUuXG4gICAqL1xuICByZWFkb25seSBhdHRhY2htZW50RmlsZVN0YXRzPzogRmlsZVN0YXRzIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBBIGNvbnRleHQuXG4gICAqL1xuICByZWFkb25seSBjb250ZXh0OiBBdHRhY2htZW50UGF0aENvbnRleHQ7XG5cbiAgLyoqXG4gICAqIEEgcGF0aCBvciBmaWxlIG9mIHRoZSBub3RlLlxuICAgKi9cbiAgcmVhZG9ubHkgbm90ZVBhdGhPckZpbGU6IG51bGwgfCBQYXRoT3JGaWxlO1xuXG4gIC8qKlxuICAgKiBBIHBhdGggb3IgZmlsZSBvZiB0aGUgb2xkIGF0dGFjaG1lbnQuXG4gICAqL1xuICByZWFkb25seSBvbGRBdHRhY2htZW50UGF0aE9yRmlsZTogUGF0aE9yRmlsZTtcblxuICAvKipcbiAgICogQSBwYXRoIG9yIGZpbGUgb2YgdGhlIG9sZCBub3RlLlxuICAgKi9cbiAgcmVhZG9ubHkgb2xkTm90ZVBhdGhPckZpbGU/OiBQYXRoT3JGaWxlIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBMYXppbHkgcmVhZHMgdGhlIGNvbnRlbnQgb2YgdGhlIGF0dGFjaG1lbnQgZmlsZS5cbiAgICpcbiAgICogVGhlIGNvbnRlbnQgaXMgcmVhZCBvbiBkZW1hbmQgb25seSB3aGVuIGEgY29uc3VtZXIgYWN0dWFsbHkgbmVlZHMgdGhlIGJ5dGVzIChlLmcuIGEgdGVtcGxhdGVcbiAgICogdG9rZW4gdGhhdCBlbWJlZHMgdGhlbSkuIEZvciB0aGUgZGVmYXVsdCB0ZW1wbGF0ZXMgbm90aGluZyBwdWxscyB0aGUgYnl0ZXMsIHNvIHRoZSBwb3RlbnRpYWxseVxuICAgKiBleHBlbnNpdmUgKHNpemUtcHJvcG9ydGlvbmFsKSBgcmVhZEJpbmFyeWAgbmV2ZXIgcnVucy4gQ29uc3VtZXJzIHRoYXQgbWF5IGNhbGwgdGhpcyBtb3JlIHRoYW5cbiAgICogb25jZSBzaG91bGQgbWVtb2l6ZSB0aGUgZmlyc3QgY2FsbC4gYG51bGxgIHdoZW4gdGhlcmUgaXMgbm8gYXR0YWNobWVudCBmaWxlIHRvIHJlYWQuXG4gICAqXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGNvbnRlbnQgb2YgdGhlIGF0dGFjaG1lbnQgZmlsZS5cbiAgICovXG4gIHJlYWRvbmx5IHJlYWRBdHRhY2htZW50RmlsZUNvbnRlbnQ6ICgoKSA9PiBQcm9taXNlPEFycmF5QnVmZmVyPikgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBTaG91bGQgdGhlIGR1cGxpY2F0ZSBjaGVjayBiZSBza2lwcGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkU2tpcER1cGxpY2F0ZUNoZWNrPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogU2hvdWxkIHRoZSBnZW5lcmF0ZWQgYXR0YWNobWVudCBmaWxlIG5hbWUgYmUgc2tpcHBlZC5cbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFNraXBHZW5lcmF0ZWRBdHRhY2htZW50RmlsZU5hbWU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBTaG91bGQgbWlzc2luZyBhdHRhY2htZW50IGZvbGRlciBjcmVhdGlvbiBiZSBza2lwcGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkU2tpcE1pc3NpbmdBdHRhY2htZW50Rm9sZGVyQ3JlYXRpb246IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICoge0BsaW5rIFZhdWx0LmdldEF2YWlsYWJsZVBhdGhGb3JBdHRhY2htZW50c30gZXh0ZW5kZWQgd3JhcHBlci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZXRBdmFpbGFibGVQYXRoRm9yQXR0YWNobWVudHNGdW5jdGlvbkV4dGVuZGVkIGV4dGVuZHMgR2V0QXZhaWxhYmxlUGF0aEZvckF0dGFjaG1lbnRzRnVuY3Rpb24ge1xuICAvKipcbiAgICogV2hldGhlciBhIGZvbGRlciBwYXRoIGlzIGRlc2lnbmF0ZWQgYXMgYW4gYXR0YWNobWVudCB1bml0IFx1MjAxNCBhIGZvbGRlciB0aGF0IG11c3QgdHJhdmVsIHdob2xlIHJhdGhlclxuICAgKiB0aGFuIGhhdmUgdGhlIGxpbmtlZCBmaWxlIHJlbG9jYXRlZCBvdXQgb2YgaXQuXG4gICAqXG4gICAqIE9wdGlvbmFsOiBhbiBhdHRhY2htZW50LWxvY2F0aW9uIHBsdWdpbiBtYXkgb3duIHRoZSByZXNvbHV0aW9uIHdpdGhvdXQgZGVzaWduYXRpbmcgYW55dGhpbmcsIGFuZCBhblxuICAgKiBhYnNlbnQgbWVtYmVyIGlzIHRoZSBzYW1lIFwibm9ib2R5IG93bnMgdGhpcyBwb2xpY3lcIiBhbnN3ZXIge0BsaW5rIEdldEF2YWlsYWJsZVBhdGhGb3JBdHRhY2htZW50c0Z1bmN0aW9uRXh0ZW5kZWQuZXh0ZW5kZWR9XG4gICAqIGl0c2VsZiBnaXZlcy5cbiAgICpcbiAgICogQHBhcmFtIGZvbGRlclBhdGggLSBUaGUgdmF1bHQtcmVsYXRpdmUgcGF0aCBvZiB0aGUgZm9sZGVyLlxuICAgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGZvbGRlciBpcyBkZXNpZ25hdGVkIGFzIGFuIGF0dGFjaG1lbnQgdW5pdCwgYGZhbHNlYCBvdGhlcndpc2UuXG4gICAqL1xuICBjaGVja0lzQXR0YWNobWVudFVuaXRGb2xkZXI/OiAoZm9sZGVyUGF0aDogc3RyaW5nKSA9PiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBHZXQgYXZhaWxhYmxlIHBhdGggZm9yIGF0dGFjaG1lbnRzIHdpdGggYWRkaXRpb25hbCBwYXJhbXMuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBQYXJhbWV0ZXJzIGZvciB0aGUgZ2V0IGF2YWlsYWJsZSBwYXRoIGZvciBhdHRhY2htZW50cy5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB0aGUgYXZhaWxhYmxlIHBhdGggZm9yIGF0dGFjaG1lbnRzLlxuICAgKi9cbiAgZXh0ZW5kZWQ6IChwYXJhbXM6IEdldEF2YWlsYWJsZVBhdGhGb3JBdHRhY2htZW50c0V4dGVuZGVkRnVuY3Rpb25QYXJhbXMpID0+IFByb21pc2U8c3RyaW5nPjtcbn1cblxudHlwZSBHZXRBdmFpbGFibGVQYXRoRm9yQXR0YWNobWVudHNGdW5jdGlvbiA9IFZhdWx0WydnZXRBdmFpbGFibGVQYXRoRm9yQXR0YWNobWVudHMnXTtcblxuLyoqXG4gKiBEdW1teSBwYXRoLlxuICovXG5leHBvcnQgY29uc3QgRFVNTVlfUEFUSCA9ICdfX0RVTU1ZX18nO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHRoZSBnZXRBdHRhY2htZW50RmlsZVBhdGggZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2V0QXR0YWNobWVudEZpbGVQYXRoUGFyYW1zIHtcbiAgLyoqXG4gICAqIEFuIE9ic2lkaWFuIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIEEgY29udGV4dC5cbiAgICovXG4gIHJlYWRvbmx5IGNvbnRleHQ6IEF0dGFjaG1lbnRQYXRoQ29udGV4dDtcblxuICAvKipcbiAgICogQSBwYXRoIG9mIHRoZSBub3RlLlxuICAgKi9cbiAgcmVhZG9ubHkgbm90ZVBhdGhPckZpbGU6IFBhdGhPckZpbGU7XG5cbiAgLyoqXG4gICAqIEEgcGF0aCBvZiB0aGUgYXR0YWNobWVudC5cbiAgICovXG4gIHJlYWRvbmx5IG9sZEF0dGFjaG1lbnRQYXRoT3JGaWxlOiBQYXRoT3JGaWxlO1xuXG4gIC8qKlxuICAgKiBBIHBhdGggb2YgdGhlIG9sZCBub3RlLlxuICAgKi9cbiAgcmVhZG9ubHkgb2xkTm90ZVBhdGhPckZpbGU/OiBQYXRoT3JGaWxlIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBTaG91bGQgdGhlIGR1cGxpY2F0ZSBjaGVjayBiZSBza2lwcGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkU2tpcER1cGxpY2F0ZUNoZWNrOiBib29sZWFuO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBnZXRBdHRhY2htZW50Rm9sZGVyUGF0aH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2V0QXR0YWNobWVudEZvbGRlclBhdGhQYXJhbXMge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBjb250ZXh0LlxuICAgKlxuICAgKiBAZGVmYXVsdCB7QGxpbmsgQXR0YWNobWVudFBhdGhDb250ZXh0LlVua25vd259XG4gICAqL1xuICByZWFkb25seSBjb250ZXh0PzogQXR0YWNobWVudFBhdGhDb250ZXh0O1xuXG4gIC8qKlxuICAgKiBUaGUgcGF0aCBvZiB0aGUgbm90ZS5cbiAgICovXG4gIHJlYWRvbmx5IG5vdGVQYXRoT3JGaWxlOiBQYXRoT3JGaWxlO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBnZXRBdHRhY2htZW50Rm9sZGVyUGF0aFN5bmNPck51bGx9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdldEF0dGFjaG1lbnRGb2xkZXJQYXRoU3luY09yTnVsbFBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIHBhdGggb2YgdGhlIG5vdGUuXG4gICAqL1xuICByZWFkb25seSBub3RlUGF0aE9yRmlsZTogUGF0aE9yRmlsZTtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciB0aGUgZ2V0QXZhaWxhYmxlUGF0aEZvckF0dGFjaG1lbnRzIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdldEF2YWlsYWJsZVBhdGhGb3JBdHRhY2htZW50c1BhcmFtcyB7XG4gIC8qKlxuICAgKiBBbiBPYnNpZGlhbiBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuICAvKipcbiAgICogQSBiYXNlIG5hbWUgb2YgdGhlIGF0dGFjaG1lbnQuXG4gICAqL1xuICByZWFkb25seSBhdHRhY2htZW50RmlsZUJhc2VOYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBBbiBleHRlbnNpb24gb2YgdGhlIGF0dGFjaG1lbnQuXG4gICAqL1xuICByZWFkb25seSBhdHRhY2htZW50RmlsZUV4dGVuc2lvbjogc3RyaW5nO1xuICAvKipcbiAgICogQSBmaWxlIHRvIGF0dGFjaCB0by5cbiAgICovXG4gIHJlYWRvbmx5IG5vdGVQYXRoT3JGaWxlOiBudWxsIHwgUGF0aE9yRmlsZTtcbiAgLyoqXG4gICAqIFNob3VsZCB0aGUgZHVwbGljYXRlIGNoZWNrIGJlIHNraXBwZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFNraXBEdXBsaWNhdGVDaGVjaz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBTaG91bGQgbWlzc2luZyBhdHRhY2htZW50IGZvbGRlciBjcmVhdGlvbiBiZSBza2lwcGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRTa2lwTWlzc2luZ0F0dGFjaG1lbnRGb2xkZXJDcmVhdGlvbj86IGJvb2xlYW47XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGhhc093bkF0dGFjaG1lbnRGb2xkZXJ9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEhhc093bkF0dGFjaG1lbnRGb2xkZXJQYXJhbXMge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBjb250ZXh0LlxuICAgKlxuICAgKiBAZGVmYXVsdCB7QGxpbmsgQXR0YWNobWVudFBhdGhDb250ZXh0LlVua25vd259XG4gICAqL1xuICByZWFkb25seSBjb250ZXh0PzogQXR0YWNobWVudFBhdGhDb250ZXh0O1xuXG4gIC8qKlxuICAgKiBUaGUgcGF0aCBvZiB0aGUgbm90ZS5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGg6IHN0cmluZztcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgaXNBdFByb3BlckF0dGFjaG1lbnRQYXRofS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJc0F0UHJvcGVyQXR0YWNobWVudFBhdGhQYXJhbXMge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoIG9yIGZpbGUgb2YgdGhlIGF0dGFjaG1lbnQgdG8gY2hlY2suXG4gICAqL1xuICByZWFkb25seSBhdHRhY2htZW50UGF0aE9yRmlsZTogUGF0aE9yRmlsZTtcblxuICAvKipcbiAgICogVGhlIGNvbnRleHQuXG4gICAqXG4gICAqIEBkZWZhdWx0IHtAbGluayBBdHRhY2htZW50UGF0aENvbnRleHQuVW5rbm93bn1cbiAgICovXG4gIHJlYWRvbmx5IGNvbnRleHQ/OiBBdHRhY2htZW50UGF0aENvbnRleHQ7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoIG9yIGZpbGUgb2YgdGhlIG5vdGUgdGhhdCByZWZlcmVuY2VzIHRoZSBhdHRhY2htZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgbm90ZVBhdGhPckZpbGU6IFBhdGhPckZpbGU7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGdldEF0dGFjaG1lbnRGaWxlUGF0aFN5bmN9LlxuICovXG5pbnRlcmZhY2UgR2V0QXR0YWNobWVudEZpbGVQYXRoU3luY1BhcmFtcyB7XG4gIC8qKlxuICAgKiBBbiBPYnNpZGlhbiBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBBIHBhdGggb2YgdGhlIG5vdGUuXG4gICAqL1xuICByZWFkb25seSBub3RlUGF0aE9yRmlsZTogUGF0aE9yRmlsZTtcblxuICAvKipcbiAgICogQSBwYXRoIG9mIHRoZSBhdHRhY2htZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgb2xkQXR0YWNobWVudFBhdGhPckZpbGU6IFBhdGhPckZpbGU7XG5cbiAgLyoqXG4gICAqIFNob3VsZCB0aGUgZHVwbGljYXRlIGNoZWNrIGJlIHNraXBwZWQuXG4gICAqL1xuICByZWFkb25seSBzaG91bGRTa2lwRHVwbGljYXRlQ2hlY2s6IGJvb2xlYW47XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGdldEF2YWlsYWJsZVBhdGhGb3JBdHRhY2htZW50c1N5bmN9LlxuICovXG5pbnRlcmZhY2UgR2V0QXZhaWxhYmxlUGF0aEZvckF0dGFjaG1lbnRzU3luY1BhcmFtcyB7XG4gIC8qKlxuICAgKiBBbiBPYnNpZGlhbiBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBBIGJhc2UgbmFtZSBvZiB0aGUgYXR0YWNobWVudC5cbiAgICovXG4gIHJlYWRvbmx5IGF0dGFjaG1lbnRGaWxlQmFzZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogQW4gZXh0ZW5zaW9uIG9mIHRoZSBhdHRhY2htZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgYXR0YWNobWVudEZpbGVFeHRlbnNpb246IHN0cmluZztcblxuICAvKipcbiAgICogQSBmaWxlIHRvIGF0dGFjaCB0by5cbiAgICovXG4gIHJlYWRvbmx5IG5vdGVQYXRoT3JGaWxlOiBudWxsIHwgUGF0aE9yRmlsZTtcblxuICAvKipcbiAgICogU2hvdWxkIHRoZSBkdXBsaWNhdGUgY2hlY2sgYmUgc2tpcHBlZC5cbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFNraXBEdXBsaWNhdGVDaGVjaz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHJlc29sdmVBdHRhY2htZW50Rm9sZGVyfS5cbiAqL1xuaW50ZXJmYWNlIFJlc29sdmVBdHRhY2htZW50Rm9sZGVyUGFyYW1zIHtcbiAgLyoqXG4gICAqIEFuIE9ic2lkaWFuIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIEEgZmlsZSB0byBhdHRhY2ggdG8uXG4gICAqL1xuICByZWFkb25seSBub3RlUGF0aE9yRmlsZTogbnVsbCB8IFBhdGhPckZpbGU7XG59XG5cbi8qKlxuICogVGhlIGF0dGFjaG1lbnQgZm9sZGVyIGEgbm90ZSByZXNvbHZlcyB0bywgYmVmb3JlIHRoZSBhdHRhY2htZW50IGZpbGUgbmFtZSBpcyBhcHBlbmRlZC5cbiAqL1xuaW50ZXJmYWNlIFJlc29sdmVBdHRhY2htZW50Rm9sZGVyUmVzdWx0IHtcbiAgLyoqXG4gICAqIFRoZSBhdHRhY2htZW50IGZvbGRlciwgb3IgYG51bGxgIHdoZW4gaXQgZG9lcyBub3QgZXhpc3QgaW4gdGhlIHZhdWx0IHlldC5cbiAgICovXG4gIHJlYWRvbmx5IGZvbGRlcjogbnVsbCB8IFRGb2xkZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBub3JtYWxpemVkIGF0dGFjaG1lbnQgZm9sZGVyIHBhdGgsIHdoZXRoZXIgb3Igbm90IHRoZSBmb2xkZXIgZXhpc3RzLlxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFydCBvZiB0aGUgYGF0dGFjaG1lbnRGb2xkZXJQYXRoYCBzZXR0aW5nIHRoYXQgZm9sbG93cyBgLi9gLCBvciBgbnVsbGAgd2hlbiB0aGUgc2V0dGluZyBpcyBub3RcbiAgICogcmVsYXRpdmUgdG8gdGhlIG5vdGUuIE9ubHkgYSByZWxhdGl2ZSBzZXR0aW5nIG1heSBoYXZlIGl0cyBtaXNzaW5nIGZvbGRlciBjcmVhdGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVsYXRpdmVQYXRoOiBudWxsIHwgc3RyaW5nO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgZmlsZSBwYXRoIGZvciBhbiBhdHRhY2htZW50IHdpdGhpbiBhIG5vdGUuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFBhcmFtZXRlcnMgZm9yIHRoZSBnZXQgYXR0YWNobWVudCBmaWxlIHBhdGggZnVuY3Rpb24uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHRoZSBmaWxlIHBhdGggb2YgdGhlIGF0dGFjaG1lbnQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRBdHRhY2htZW50RmlsZVBhdGgocGFyYW1zOiBHZXRBdHRhY2htZW50RmlsZVBhdGhQYXJhbXMpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCB7XG4gICAgYXBwLFxuICAgIG5vdGVQYXRoT3JGaWxlLFxuICAgIG9sZEF0dGFjaG1lbnRQYXRoT3JGaWxlLFxuICAgIHNob3VsZFNraXBEdXBsaWNhdGVDaGVja1xuICB9ID0gcGFyYW1zO1xuXG4gIGNvbnN0IGV4dGVuZGVkRnVuY3Rpb24gPSBnZXRFeHRlbmRlZEZ1bmN0aW9uKGFwcCk7XG4gIGlmICghZXh0ZW5kZWRGdW5jdGlvbikge1xuICAgIC8vIE5vYm9keSBvdmVycmlkZXMgdGhlIHJlc29sdXRpb24sIHNvIGl0IGlzIGVudGlyZWx5IHN5bmNocm9ub3VzLlxuICAgIC8vIFRoZSBzYW1lIGNvcmUgYW5zd2VycyBgZ2V0QXR0YWNobWVudEZvbGRlclBhdGhTeW5jT3JOdWxsYCwgd2hpY2ggaXMgd2hhdCBrZWVwcyB0aGUgdHdvIGluIHN0ZXAuXG4gICAgcmV0dXJuIGdldEF0dGFjaG1lbnRGaWxlUGF0aFN5bmMoe1xuICAgICAgYXBwLFxuICAgICAgbm90ZVBhdGhPckZpbGUsXG4gICAgICBvbGRBdHRhY2htZW50UGF0aE9yRmlsZSxcbiAgICAgIHNob3VsZFNraXBEdXBsaWNhdGVDaGVja1xuICAgIH0pO1xuICB9XG5cbiAgY29uc3QgYXR0YWNobWVudFBhdGggPSBnZXRQYXRoKGFwcCwgb2xkQXR0YWNobWVudFBhdGhPckZpbGUpO1xuICBjb25zdCBhdHRhY2htZW50RmlsZUV4dGVuc2lvbiA9IGV4dG5hbWUoYXR0YWNobWVudFBhdGgpO1xuICBjb25zdCBhdHRhY2htZW50RmlsZUJhc2VOYW1lID0gYmFzZW5hbWUoYXR0YWNobWVudFBhdGgsIGF0dGFjaG1lbnRGaWxlRXh0ZW5zaW9uKTtcbiAgY29uc3QgYXR0YWNobWVudEZpbGUgPSBnZXRGaWxlT3JOdWxsKHsgYXBwLCBwYXRoT3JGaWxlOiBhdHRhY2htZW50UGF0aCB9KTtcblxuICByZXR1cm4gYXdhaXQgZXh0ZW5kZWRGdW5jdGlvbih7XG4gICAgYXR0YWNobWVudEZpbGVCYXNlTmFtZSxcbiAgICBhdHRhY2htZW50RmlsZUV4dGVuc2lvbjogYXR0YWNobWVudEZpbGVFeHRlbnNpb24uc2xpY2UoMSksXG4gICAgYXR0YWNobWVudEZpbGVTdGF0czogYXR0YWNobWVudEZpbGU/LnN0YXQsXG4gICAgY29udGV4dDogcGFyYW1zLmNvbnRleHQsXG4gICAgbm90ZVBhdGhPckZpbGUsXG4gICAgb2xkQXR0YWNobWVudFBhdGhPckZpbGUsXG4gICAgb2xkTm90ZVBhdGhPckZpbGU6IHBhcmFtcy5vbGROb3RlUGF0aE9yRmlsZSxcbiAgICByZWFkQXR0YWNobWVudEZpbGVDb250ZW50OiBhdHRhY2htZW50RmlsZSA/ICgpOiBQcm9taXNlPEFycmF5QnVmZmVyPiA9PiBhcHAudmF1bHQucmVhZEJpbmFyeShhdHRhY2htZW50RmlsZSkgOiBudWxsLFxuICAgIHNob3VsZFNraXBEdXBsaWNhdGVDaGVjayxcbiAgICBzaG91bGRTa2lwTWlzc2luZ0F0dGFjaG1lbnRGb2xkZXJDcmVhdGlvbjogdHJ1ZVxuICB9KTtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGF0dGFjaG1lbnQgZm9sZGVyIHBhdGggZm9yIGEgZ2l2ZW4gbm90ZS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gUGFyYW1ldGVycyBmb3IgdGhlIGdldCBhdHRhY2htZW50IGZvbGRlciBwYXRoIGZ1bmN0aW9uLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB0aGUgYXR0YWNobWVudCBmb2xkZXIgcGF0aC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEF0dGFjaG1lbnRGb2xkZXJQYXRoKHBhcmFtczogR2V0QXR0YWNobWVudEZvbGRlclBhdGhQYXJhbXMpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCB7XG4gICAgYXBwLFxuICAgIGNvbnRleHQgPSBBdHRhY2htZW50UGF0aENvbnRleHQuVW5rbm93bixcbiAgICBub3RlUGF0aE9yRmlsZVxuICB9ID0gcGFyYW1zO1xuICByZXR1cm4gcGFyZW50Rm9sZGVyUGF0aChcbiAgICBhd2FpdCBnZXRBdHRhY2htZW50RmlsZVBhdGgoe1xuICAgICAgYXBwLFxuICAgICAgY29udGV4dCxcbiAgICAgIG5vdGVQYXRoT3JGaWxlLFxuICAgICAgb2xkQXR0YWNobWVudFBhdGhPckZpbGU6IERVTU1ZX1BBVEgsXG4gICAgICBzaG91bGRTa2lwRHVwbGljYXRlQ2hlY2s6IHRydWVcbiAgICB9KVxuICApO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgYXR0YWNobWVudCBmb2xkZXIgcGF0aCBmb3IgYSBnaXZlbiBub3RlICoqc3luY2hyb25vdXNseSoqLCB3aGVuIHRoYXQgaXMgcG9zc2libGUgYXQgYWxsLlxuICpcbiAqIE9ic2lkaWFuIGJ1aWxkcyBpdHMgZmlsZS9mb2xkZXIgY29udGV4dCBtZW51cyBhbmQgZXZhbHVhdGVzIGEgY29tbWFuZCdzIGBjaGVja0NhbGxiYWNrYCBzeW5jaHJvbm91c2x5LCBzbyBhXG4gKiBjYWxsZXIgZGVjaWRpbmcgd2hldGhlciB0byBtZXJlbHkgKm9mZmVyKiBhIGNvbW1hbmQgY2Fubm90IGF3YWl0IHtAbGluayBnZXRBdHRhY2htZW50Rm9sZGVyUGF0aH0uIFRoaXMgaXNcbiAqIHRoZSBzeW5jaHJvbm91cyB0d2luIHN1Y2ggYSBjYWxsZXIgY2FuIHVzZSBpbnN0ZWFkLlxuICpcbiAqIFRoZSBhbnN3ZXIgaXMgYG51bGxgIHdoZW4gaXQgaXMgbm90IGtub3dhYmxlIHN5bmNocm9ub3VzbHkgXHUyMDE0IHRoYXQgaXMsIHdoZW4gYSBwbHVnaW4gaW5zdGFsbGVkXG4gKiB7QGxpbmsgR2V0QXZhaWxhYmxlUGF0aEZvckF0dGFjaG1lbnRzRnVuY3Rpb25FeHRlbmRlZC5leHRlbmRlZH0gYW5kIHRoZXJlZm9yZSBvd25zIHRoZSByZXNvbHV0aW9uLCB3aGljaCBpc1xuICogZ2VudWluZWx5IGFzeW5jaHJvbm91cy4gYG51bGxgIG1lYW5zIFwiYXNrIHtAbGluayBnZXRBdHRhY2htZW50Rm9sZGVyUGF0aH1cIiwgbmV2ZXIgXCJ0aGVyZSBpcyBubyBhdHRhY2htZW50XG4gKiBmb2xkZXJcIi4gT3RoZXJ3aXNlIHRoZSBhbnN3ZXIgaXMgZXhhY3QgcmF0aGVyIHRoYW4gYSBndWVzczogaXQgaXMgcHJvZHVjZWQgYnkgdGhlIHZlcnkgc2FtZSBjb2RlXG4gKiB7QGxpbmsgZ2V0QXR0YWNobWVudEZvbGRlclBhdGh9IHJ1bnMsIHdob3NlIG9ubHkgYXN5bmNocm9ub3VzIHN0ZXAgXHUyMDE0IGNyZWF0aW5nIGEgbWlzc2luZyBhdHRhY2htZW50IGZvbGRlciBcdTIwMTRcbiAqIGlzIHVucmVhY2hhYmxlIG9uIHRoaXMgcGF0aC5cbiAqXG4gKiBUaGVyZSBpcyBkZWxpYmVyYXRlbHkgbm8gYGNvbnRleHRgIHBhcmFtZXRlcjoge0BsaW5rIEF0dGFjaG1lbnRQYXRoQ29udGV4dH0gb25seSBldmVyIHJlYWNoZXMgYW5cbiAqIHtAbGluayBHZXRBdmFpbGFibGVQYXRoRm9yQXR0YWNobWVudHNGdW5jdGlvbkV4dGVuZGVkLmV4dGVuZGVkfSBvdmVycmlkZSwgYW5kIHRoaXMgZnVuY3Rpb24gYW5zd2VycyBgbnVsbGBcbiAqIHdoZW5ldmVyIG9uZSBpcyBpbnN0YWxsZWQuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFBhcmFtZXRlcnMgZm9yIHRoZSBnZXQgYXR0YWNobWVudCBmb2xkZXIgcGF0aCBzeW5jIG9yIG51bGwgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyBUaGUgYXR0YWNobWVudCBmb2xkZXIgcGF0aCwgb3IgYG51bGxgIHdoZW4gaXQgY2FuIG9ubHkgYmUgcmVzb2x2ZWQgYXN5bmNocm9ub3VzbHkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBdHRhY2htZW50Rm9sZGVyUGF0aFN5bmNPck51bGwocGFyYW1zOiBHZXRBdHRhY2htZW50Rm9sZGVyUGF0aFN5bmNPck51bGxQYXJhbXMpOiBudWxsIHwgc3RyaW5nIHtcbiAgY29uc3Qge1xuICAgIGFwcCxcbiAgICBub3RlUGF0aE9yRmlsZVxuICB9ID0gcGFyYW1zO1xuXG4gIHJldHVybiBnZXRFeHRlbmRlZEZ1bmN0aW9uKGFwcClcbiAgICA/IG51bGxcbiAgICA6IHBhcmVudEZvbGRlclBhdGgoZ2V0QXR0YWNobWVudEZpbGVQYXRoU3luYyh7XG4gICAgICBhcHAsXG4gICAgICBub3RlUGF0aE9yRmlsZSxcbiAgICAgIG9sZEF0dGFjaG1lbnRQYXRoT3JGaWxlOiBEVU1NWV9QQVRILFxuICAgICAgc2hvdWxkU2tpcER1cGxpY2F0ZUNoZWNrOiB0cnVlXG4gICAgfSkpO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgYXZhaWxhYmxlIHBhdGggZm9yIGF0dGFjaG1lbnRzLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBQYXJhbWV0ZXJzIGZvciB0aGUgZ2V0IGF2YWlsYWJsZSBwYXRoIGZvciBhdHRhY2htZW50cyBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGF2YWlsYWJsZSBwYXRoIGZvciBhdHRhY2htZW50cy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEF2YWlsYWJsZVBhdGhGb3JBdHRhY2htZW50cyhwYXJhbXM6IEdldEF2YWlsYWJsZVBhdGhGb3JBdHRhY2htZW50c1BhcmFtcyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHtcbiAgICBhcHAsXG4gICAgbm90ZVBhdGhPckZpbGUsXG4gICAgc2hvdWxkU2tpcE1pc3NpbmdBdHRhY2htZW50Rm9sZGVyQ3JlYXRpb25cbiAgfSA9IHBhcmFtcztcblxuICAvLyBNYXRlcmlhbGl6aW5nIGEgbWlzc2luZyBhdHRhY2htZW50IGZvbGRlciBpcyB0aGUgT05FIGdlbnVpbmVseSBhc3luY2hyb25vdXMgc3RlcCBpbiB0aGlzIGZ1bmN0aW9uLlxuICAvLyBFdmVyeXRoaW5nIGVsc2UgbGl2ZXMgaW4gdGhlIHN5bmNocm9ub3VzIGNvcmUsIHdoaWNoIHRoZSBzeW5jaHJvbm91cyBlbnRyeSBwb2ludHMgcmV1c2UgdmVyYmF0aW0uXG4gIGNvbnN0IGF0dGFjaG1lbnRGb2xkZXIgPSByZXNvbHZlQXR0YWNobWVudEZvbGRlcih7IGFwcCwgbm90ZVBhdGhPckZpbGUgfSk7XG4gIGlmICghYXR0YWNobWVudEZvbGRlci5mb2xkZXIgJiYgYXR0YWNobWVudEZvbGRlci5yZWxhdGl2ZVBhdGggJiYgIXNob3VsZFNraXBNaXNzaW5nQXR0YWNobWVudEZvbGRlckNyZWF0aW9uKSB7XG4gICAgYXdhaXQgYXBwLnZhdWx0LmNyZWF0ZUZvbGRlcihhdHRhY2htZW50Rm9sZGVyLnBhdGgpO1xuICB9XG5cbiAgcmV0dXJuIGdldEF2YWlsYWJsZVBhdGhGb3JBdHRhY2htZW50c1N5bmMocGFyYW1zKTtcbn1cblxuLyoqXG4gKiBSZWFkcyB0aGUgYXR0YWNobWVudC11bml0LWZvbGRlciBkZXNpZ25hdGlvbiBhbiBhdHRhY2htZW50LWxvY2F0aW9uIHBsdWdpbiBwdWJsaXNoZWQgb24gdGhlIHZhdWx0LlxuICpcbiAqIFRoZSBkZXNpZ25hdGlvbiBpcyBvbmUgcGx1Z2luJ3Mgc2V0dGluZyBidXQgZXZlcnkgcmVsb2NhdGluZyBwbHVnaW4ncyBidXNpbmVzcywgc28gaXQgcmlkZXMgdGhlIHNhbWUgc2VhbVxuICogdGhhdCBhbHJlYWR5IGNhcnJpZXMgdGhhdCBraW5kIG9mIGFuc3dlcjogYSBtZW1iZXIgaHVuZyBvZmYgdGhlIHBhdGNoZWRcbiAqIHtAbGluayBWYXVsdC5nZXRBdmFpbGFibGVQYXRoRm9yQXR0YWNobWVudHN9LiBSZWFkaW5nIGl0IGhlcmUgcmF0aGVyIHRoYW4gY29uc3VsdGluZyBhbnkgb25lIHBsdWdpbidzXG4gKiBzZXR0aW5ncyBpcyB0aGUgcG9pbnQgXHUyMDE0IGEgZm9sZGVyIGtlcHQgd2hvbGUgYnkgb25lIHBsdWdpbiBhbmQgdG9ybiBhcGFydCBieSBhbm90aGVyIGlzIGV4YWN0bHkgdGhlIGZhaWx1cmVcbiAqIGBmaW5kQXR0YWNobWVudFVuaXRGb2xkZXJQYXRoYCBleGlzdHMgdG8gcHJldmVudC5cbiAqXG4gKiBgdW5kZWZpbmVkYCBtZWFucyBub2JvZHkgcHVibGlzaGVkIGEgZGVzaWduYXRpb24sIHRoZSBzYW1lIFwibm9ib2R5IG93bnMgdGhpcyBwb2xpY3lcIiBhbnN3ZXIgdGhlXG4gKiB7QGxpbmsgR2V0QXZhaWxhYmxlUGF0aEZvckF0dGFjaG1lbnRzRnVuY3Rpb25FeHRlbmRlZC5leHRlbmRlZH0gbWVtYmVyIGdpdmVzLiBJdCBpcyBkaXN0aW5jdCBmcm9tIGFcbiAqIGRlc2lnbmF0aW9uIHRoYXQgYW5zd2VycyBgZmFsc2VgIGZvciBldmVyeSBmb2xkZXIuXG4gKlxuICogQHBhcmFtIGFwcCAtIEFuIE9ic2lkaWFuIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICogQHJldHVybnMgVGhlIGRlc2lnbmF0aW9uIHByZWRpY2F0ZSwgb3IgYHVuZGVmaW5lZGAgd2hlbiBub2JvZHkgcHVibGlzaGVkIG9uZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENoZWNrSXNBdHRhY2htZW50VW5pdEZvbGRlckZ1bmN0aW9uKGFwcDogQXBwKTogR2V0QXZhaWxhYmxlUGF0aEZvckF0dGFjaG1lbnRzRnVuY3Rpb25FeHRlbmRlZFsnY2hlY2tJc0F0dGFjaG1lbnRVbml0Rm9sZGVyJ10ge1xuICByZXR1cm4gKGFwcC52YXVsdC5nZXRBdmFpbGFibGVQYXRoRm9yQXR0YWNobWVudHMgYXMgUGFydGlhbDxHZXRBdmFpbGFibGVQYXRoRm9yQXR0YWNobWVudHNGdW5jdGlvbkV4dGVuZGVkPikuY2hlY2tJc0F0dGFjaG1lbnRVbml0Rm9sZGVyO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGEgbm90ZSdzIGF0dGFjaG1lbnQgZm9sZGVyIGlzIHNwZWNpZmljIHRvIHRoYXQgbm90ZSByYXRoZXIgdGhhbiBzaGFyZWQgd2l0aCBpdHMgc2libGluZ3MuXG4gKlxuICogVGhlIGFuc3dlciBpcyBkZXJpdmVkIGJ5IGNvbXBhcmluZyB0aGUgbm90ZSdzIGF0dGFjaG1lbnQgZm9sZGVyIHdpdGggdGhlIG9uZSBhIHNhbWUtZm9sZGVyIHNpYmxpbmcgbm90ZVxuICogd291bGQgZ2V0OiB0aGV5IGRpZmZlciBvbmx5IHdoZW4gdGhlIGZvbGRlciBkZXBlbmRzIG9uIHRoZSBub3RlJ3MgTkFNRS4gRXZlcnkgYnVpbHQtaW5cbiAqIGBhdHRhY2htZW50Rm9sZGVyUGF0aGAgbW9kZSBcdTIwMTQgdGhlIHZhdWx0IHJvb3QsIGEgZml4ZWQgZm9sZGVyLCB0aGUgbm90ZSdzIG93biBmb2xkZXIgKGAuL2ApLCBhIHN1YmZvbGRlciBvZlxuICogdGhlIG5vdGUncyBmb2xkZXIgKGAuL3N1YmApIFx1MjAxNCBpcyBzaGFyZWQgYnkgZXZlcnkgbm90ZSBpbiB0aGF0IGZvbGRlciwgc28gaXQgYW5zd2VycyBgZmFsc2VgOyBgdHJ1ZWAgYXJpc2VzXG4gKiBmcm9tIGEge0BsaW5rIEdldEF2YWlsYWJsZVBhdGhGb3JBdHRhY2htZW50c0Z1bmN0aW9uRXh0ZW5kZWQuZXh0ZW5kZWR9IG92ZXJyaWRlIHRoYXQgZGVyaXZlcyB0aGUgZm9sZGVyIGZyb20gdGhlXG4gKiBub3RlJ3MgbmFtZSAod2hhdCBhbiBhdHRhY2htZW50LWxvY2F0aW9uIHBsdWdpbiBwcm9kdWNlcykuXG4gKlxuICogVGhpcyBpcyB0aGUgZGlzdGluY3Rpb24gYSBjYWxsZXIgbmVlZHMgYmVmb3JlIHN3ZWVwaW5nIGFuIGF0dGFjaG1lbnQgZm9sZGVyIHdob2xlc2FsZTogb25seSBhXG4gKiBub3RlLXNwZWNpZmljIGZvbGRlciBjYW4gYmUgdHJlYXRlZCBhcyBiZWxvbmdpbmcgdG8gdGhlIG5vdGUuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFBhcmFtZXRlcnMgZm9yIHRoZSBoYXMgb3duIGF0dGFjaG1lbnQgZm9sZGVyIGZ1bmN0aW9uLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBub3RlIGhhcyBpdHMgb3duIGF0dGFjaG1lbnQgZm9sZGVyLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaGFzT3duQXR0YWNobWVudEZvbGRlcihwYXJhbXM6IEhhc093bkF0dGFjaG1lbnRGb2xkZXJQYXJhbXMpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgY29uc3Qge1xuICAgIGFwcCxcbiAgICBjb250ZXh0ID0gQXR0YWNobWVudFBhdGhDb250ZXh0LlVua25vd24sXG4gICAgcGF0aFxuICB9ID0gcGFyYW1zO1xuICBjb25zdCBhdHRhY2htZW50Rm9sZGVyUGF0aCA9IGF3YWl0IGdldEF0dGFjaG1lbnRGb2xkZXJQYXRoKHtcbiAgICBhcHAsXG4gICAgY29udGV4dCxcbiAgICBub3RlUGF0aE9yRmlsZTogcGF0aFxuICB9KTtcbiAgY29uc3QgZHVtbXlBdHRhY2htZW50Rm9sZGVyUGF0aCA9IGF3YWl0IGdldEF0dGFjaG1lbnRGb2xkZXJQYXRoKHtcbiAgICBhcHAsXG4gICAgY29udGV4dCxcbiAgICBub3RlUGF0aE9yRmlsZTogam9pbihkaXJuYW1lKHBhdGgpLCBgJHtEVU1NWV9QQVRIfS4ke01BUktET1dOX0ZJTEVfRVhURU5TSU9OfWApXG4gIH0pO1xuICByZXR1cm4gYXR0YWNobWVudEZvbGRlclBhdGggIT09IGR1bW15QXR0YWNobWVudEZvbGRlclBhdGg7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgYW4gYXR0YWNobWVudCBhbHJlYWR5IHNpdHMgYXQgaXRzIHByb3BlciBhdHRhY2htZW50IHBhdGguXG4gKlxuICogUmV0dXJucyBgdHJ1ZWAgd2hlbiB0aGUgYXR0YWNobWVudCdzIGN1cnJlbnQgcGF0aCBpcywgd2l0aGluIGl0cyBwcm9wZXIgYXR0YWNobWVudCBmb2xkZXIsIGVpdGhlciB0aGUgcHJvcGVyXG4gKiBiYXNlIG5hbWUgb3IgdGhlIHByb3BlciBiYXNlIG5hbWUgcGx1cyBhbiBPYnNpZGlhbiBkZWR1cGxpY2F0aW9uIHN1ZmZpeCAoYSBzcGFjZSBmb2xsb3dlZCBieSBkaWdpdHMsIGUuZy5cbiAqIGBpbWcgMWApIHdpdGggdGhlIHNhbWUgZXh0ZW5zaW9uLiBUaGUgcHJvcGVyIHBhdGggaXMgY29tcHV0ZWQgdmlhIHtAbGluayBnZXRBdHRhY2htZW50RmlsZVBhdGh9IHdpdGhcbiAqIHtAbGluayBHZXRBdHRhY2htZW50RmlsZVBhdGhQYXJhbXMuc2hvdWxkU2tpcER1cGxpY2F0ZUNoZWNrfSBzZXQgdG8gYHRydWVgICh0aGUgdGFyZ2V0IGJlZm9yZSBhbnlcbiAqIGRlZHVwbGljYXRpb24gc3VmZml4KSwgYW5kIHRoZSBjb21wYXJpc29uIHJlc3BlY3RzIHRoZSBmaWxlIHN5c3RlbSBjYXNlLXNlbnNpdGl2aXR5IGZsYWdcbiAqIChgZ2V0RGF0YUFkYXB0ZXJFeChhcHApLmluc2Vuc2l0aXZlYCkgdGhhdCBgZ2V0U2FmZVJlbmFtZVBhdGhgIHVzZXMuXG4gKlxuICogVGhpcyBsZXRzIGEgY2FsbGVyIHJlY29nbml6ZSBhIGRlZHVwbGljYXRpb24tcGFya2VkIGF0dGFjaG1lbnQgYXMgYWxyZWFkeS1jb2xsZWN0ZWQsIHNvIGEgXCJuZWVkcyBtb3ZlP1wiXG4gKiBkZWNpc2lvbiBtYWRlIGFnYWluc3QgdGhlIGRlZHVwbGljYXRpb24tZnJlZSBwcm9wZXIgcGF0aCBjb252ZXJnZXMgaW5zdGVhZCBvZiByZS1zY2hlZHVsaW5nIHRoZSBmaWxlIGZvcmV2ZXIuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFBhcmFtZXRlcnMgZm9yIHRoZSBpcyBhdCBwcm9wZXIgYXR0YWNobWVudCBwYXRoIGZ1bmN0aW9uLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byBgdHJ1ZWAgd2hlbiB0aGUgYXR0YWNobWVudCBpcyBhbHJlYWR5IGF0IGl0cyBwcm9wZXIgcGF0aC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGlzQXRQcm9wZXJBdHRhY2htZW50UGF0aChwYXJhbXM6IElzQXRQcm9wZXJBdHRhY2htZW50UGF0aFBhcmFtcyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCB7XG4gICAgYXBwLFxuICAgIGF0dGFjaG1lbnRQYXRoT3JGaWxlLFxuICAgIGNvbnRleHQgPSBBdHRhY2htZW50UGF0aENvbnRleHQuVW5rbm93bixcbiAgICBub3RlUGF0aE9yRmlsZVxuICB9ID0gcGFyYW1zO1xuXG4gIGNvbnN0IGN1cnJlbnRQYXRoID0gZ2V0UGF0aChhcHAsIGF0dGFjaG1lbnRQYXRoT3JGaWxlKTtcbiAgY29uc3QgcHJvcGVyUGF0aCA9IGF3YWl0IGdldEF0dGFjaG1lbnRGaWxlUGF0aCh7XG4gICAgYXBwLFxuICAgIGNvbnRleHQsXG4gICAgbm90ZVBhdGhPckZpbGUsXG4gICAgb2xkQXR0YWNobWVudFBhdGhPckZpbGU6IGF0dGFjaG1lbnRQYXRoT3JGaWxlLFxuICAgIHNob3VsZFNraXBEdXBsaWNhdGVDaGVjazogdHJ1ZVxuICB9KTtcblxuICBjb25zdCBpc0luc2Vuc2l0aXZlID0gZ2V0RGF0YUFkYXB0ZXJFeChhcHApLmluc2Vuc2l0aXZlO1xuXG4gIGZ1bmN0aW9uIGZvbGQodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGlzSW5zZW5zaXRpdmUgPyB2YWx1ZS50b0xvd2VyQ2FzZSgpIDogdmFsdWU7XG4gIH1cblxuICBpZiAoZm9sZChkaXJuYW1lKGN1cnJlbnRQYXRoKSkgIT09IGZvbGQoZGlybmFtZShwcm9wZXJQYXRoKSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBjdXJyZW50RXh0ZW5zaW9uID0gZXh0bmFtZShjdXJyZW50UGF0aCk7XG4gIGNvbnN0IHByb3BlckV4dGVuc2lvbiA9IGV4dG5hbWUocHJvcGVyUGF0aCk7XG4gIGlmIChmb2xkKGN1cnJlbnRFeHRlbnNpb24pICE9PSBmb2xkKHByb3BlckV4dGVuc2lvbikpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBjdXJyZW50QmFzZU5hbWUgPSBiYXNlbmFtZShjdXJyZW50UGF0aCwgY3VycmVudEV4dGVuc2lvbik7XG4gIGNvbnN0IHByb3BlckJhc2VOYW1lID0gYmFzZW5hbWUocHJvcGVyUGF0aCwgcHJvcGVyRXh0ZW5zaW9uKTtcblxuICBpZiAoZm9sZChjdXJyZW50QmFzZU5hbWUpID09PSBmb2xkKHByb3BlckJhc2VOYW1lKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgY29uc3QgZGVkdXBsaWNhdGlvblByZWZpeCA9IGAke3Byb3BlckJhc2VOYW1lfSBgO1xuICBpZiAoIWZvbGQoY3VycmVudEJhc2VOYW1lKS5zdGFydHNXaXRoKGZvbGQoZGVkdXBsaWNhdGlvblByZWZpeCkpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgZGVkdXBsaWNhdGlvblN1ZmZpeCA9IGN1cnJlbnRCYXNlTmFtZS5zbGljZShkZWR1cGxpY2F0aW9uUHJlZml4Lmxlbmd0aCk7XG4gIHJldHVybiAvXlxcZCskLy50ZXN0KGRlZHVwbGljYXRpb25TdWZmaXgpO1xufVxuXG4vKipcbiAqIFRoZSBzeW5jaHJvbm91cyBjb3JlIG9mIHtAbGluayBnZXRBdHRhY2htZW50RmlsZVBhdGh9LCByZWFjaGVkIHdoZW4gbm9ib2R5IGluc3RhbGxlZFxuICoge0BsaW5rIEdldEF2YWlsYWJsZVBhdGhGb3JBdHRhY2htZW50c0Z1bmN0aW9uRXh0ZW5kZWQuZXh0ZW5kZWR9LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBQYXJhbWV0ZXJzIGZvciB0aGUgZ2V0IGF0dGFjaG1lbnQgZmlsZSBwYXRoIHN5bmMgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyBUaGUgZmlsZSBwYXRoIG9mIHRoZSBhdHRhY2htZW50LlxuICovXG5mdW5jdGlvbiBnZXRBdHRhY2htZW50RmlsZVBhdGhTeW5jKHBhcmFtczogR2V0QXR0YWNobWVudEZpbGVQYXRoU3luY1BhcmFtcyk6IHN0cmluZyB7XG4gIGNvbnN0IHtcbiAgICBhcHAsXG4gICAgbm90ZVBhdGhPckZpbGUsXG4gICAgb2xkQXR0YWNobWVudFBhdGhPckZpbGUsXG4gICAgc2hvdWxkU2tpcER1cGxpY2F0ZUNoZWNrXG4gIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGF0dGFjaG1lbnRQYXRoID0gZ2V0UGF0aChhcHAsIG9sZEF0dGFjaG1lbnRQYXRoT3JGaWxlKTtcbiAgY29uc3QgYXR0YWNobWVudEZpbGVFeHRlbnNpb24gPSBleHRuYW1lKGF0dGFjaG1lbnRQYXRoKTtcblxuICByZXR1cm4gZ2V0QXZhaWxhYmxlUGF0aEZvckF0dGFjaG1lbnRzU3luYyh7XG4gICAgYXBwLFxuICAgIGF0dGFjaG1lbnRGaWxlQmFzZU5hbWU6IGJhc2VuYW1lKGF0dGFjaG1lbnRQYXRoLCBhdHRhY2htZW50RmlsZUV4dGVuc2lvbiksXG4gICAgYXR0YWNobWVudEZpbGVFeHRlbnNpb246IGF0dGFjaG1lbnRGaWxlRXh0ZW5zaW9uLnNsaWNlKDEpLFxuICAgIG5vdGVQYXRoT3JGaWxlLFxuICAgIHNob3VsZFNraXBEdXBsaWNhdGVDaGVja1xuICB9KTtcbn1cblxuLyoqXG4gKiBUaGUgc3luY2hyb25vdXMgY29yZSBvZiB7QGxpbmsgZ2V0QXZhaWxhYmxlUGF0aEZvckF0dGFjaG1lbnRzfSwgd2hpY2ggY2Fubm90IGNyZWF0ZSBhIG1pc3NpbmcgYXR0YWNobWVudFxuICogZm9sZGVyLiBJdHMgY2FsbGVyIGNyZWF0ZXMgdGhlIGZvbGRlciBmaXJzdCB3aGVuIHRoYXQgaXMgd2FudGVkLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBQYXJhbWV0ZXJzIGZvciB0aGUgZ2V0IGF2YWlsYWJsZSBwYXRoIGZvciBhdHRhY2htZW50cyBzeW5jIGZ1bmN0aW9uLlxuICogQHJldHVybnMgVGhlIGF2YWlsYWJsZSBwYXRoIGZvciBhdHRhY2htZW50cy5cbiAqL1xuZnVuY3Rpb24gZ2V0QXZhaWxhYmxlUGF0aEZvckF0dGFjaG1lbnRzU3luYyhwYXJhbXM6IEdldEF2YWlsYWJsZVBhdGhGb3JBdHRhY2htZW50c1N5bmNQYXJhbXMpOiBzdHJpbmcge1xuICBjb25zdCB7XG4gICAgYXBwLFxuICAgIGF0dGFjaG1lbnRGaWxlRXh0ZW5zaW9uLFxuICAgIG5vdGVQYXRoT3JGaWxlLFxuICAgIHNob3VsZFNraXBEdXBsaWNhdGVDaGVja1xuICB9ID0gcGFyYW1zO1xuICBjb25zdCBhdHRhY2htZW50Rm9sZGVyID0gcmVzb2x2ZUF0dGFjaG1lbnRGb2xkZXIoeyBhcHAsIG5vdGVQYXRoT3JGaWxlIH0pO1xuICBjb25zdCBhdHRhY2htZW50RmlsZUJhc2VOYW1lID0gbm9ybWFsaXplU3RyaW5nKG5vcm1hbGl6ZVNsYXNoZXMocGFyYW1zLmF0dGFjaG1lbnRGaWxlQmFzZU5hbWUpKTtcblxuICAvLyBBIGZvbGRlciB0aGF0IGRvZXMgbm90IGV4aXN0IHlldCBzdGlsbCBvd25zIHRoZSBhdHRhY2htZW50IHBhdGguXG4gIC8vIFJlc29sdmluZyBpdCBhcyBhIG5vbi1leGlzdGluZyBmb2xkZXIgc3RvcHMgdGhlIGFuc3dlciBmcm9tIGNvbGxhcHNpbmcgdG8gdGhlIHZhdWx0IHJvb3QuXG4gIGNvbnN0IGZvbGRlciA9IGF0dGFjaG1lbnRGb2xkZXIuZm9sZGVyID8/IGdldEZvbGRlcih7IGFwcCwgcGF0aE9yRm9sZGVyOiBhdHRhY2htZW50Rm9sZGVyLnBhdGgsIHNob3VsZEluY2x1ZGVOb25FeGlzdGluZzogdHJ1ZSB9KTtcblxuICBjb25zdCBwcmVmaXggPSBmb2xkZXIuZ2V0UGFyZW50UHJlZml4KCk7XG4gIHJldHVybiBzaG91bGRTa2lwRHVwbGljYXRlQ2hlY2tcbiAgICA/IG1ha2VGaWxlTmFtZSh7XG4gICAgICBmaWxlQmFzZU5hbWU6IHByZWZpeCArIGF0dGFjaG1lbnRGaWxlQmFzZU5hbWUsXG4gICAgICBmaWxlRXh0ZW5zaW9uOiBhdHRhY2htZW50RmlsZUV4dGVuc2lvblxuICAgIH0pXG4gICAgOiBhcHAudmF1bHQuZ2V0QXZhaWxhYmxlUGF0aChwcmVmaXggKyBhdHRhY2htZW50RmlsZUJhc2VOYW1lLCBhdHRhY2htZW50RmlsZUV4dGVuc2lvbik7XG59XG5cbi8qKlxuICogUmVhZHMgdGhlIHtAbGluayBHZXRBdmFpbGFibGVQYXRoRm9yQXR0YWNobWVudHNGdW5jdGlvbkV4dGVuZGVkLmV4dGVuZGVkfSBtZW1iZXIgYW4gYXR0YWNobWVudC1sb2NhdGlvblxuICogcGx1Z2luIGluc3RhbGxzLiBJdHMgcHJlc2VuY2UgaXMgdGhlIHN5bmNocm9ub3VzIHByb2JlIGZvciBcInNvbWVib2R5IGVsc2Ugb3ducyB0aGUgcmVzb2x1dGlvblwiLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBBbiBPYnNpZGlhbiBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqIEByZXR1cm5zIFRoZSBleHRlbmRlZCBmdW5jdGlvbiwgb3IgYHVuZGVmaW5lZGAgd2hlbiBub2JvZHkgaW5zdGFsbGVkIG9uZS5cbiAqL1xuZnVuY3Rpb24gZ2V0RXh0ZW5kZWRGdW5jdGlvbihhcHA6IEFwcCk6IEdldEF2YWlsYWJsZVBhdGhGb3JBdHRhY2htZW50c0Z1bmN0aW9uRXh0ZW5kZWRbJ2V4dGVuZGVkJ10gfCB1bmRlZmluZWQge1xuICByZXR1cm4gKGFwcC52YXVsdC5nZXRBdmFpbGFibGVQYXRoRm9yQXR0YWNobWVudHMgYXMgUGFydGlhbDxHZXRBdmFpbGFibGVQYXRoRm9yQXR0YWNobWVudHNGdW5jdGlvbkV4dGVuZGVkPikuZXh0ZW5kZWQ7XG59XG5cbi8qKlxuICogTm9ybWFsaXplcyBhIHBhdGggYnkgY29tYmluaW5nIG11bHRpcGxlIHNsYXNoZXMgaW50byBhIHNpbmdsZSBzbGFzaCBhbmQgcmVtb3ZpbmcgbGVhZGluZyBhbmQgdHJhaWxpbmcgc2xhc2hlcy5cbiAqXG4gKiBAcGFyYW0gcGF0aCAtIFBhdGggdG8gbm9ybWFsaXplLlxuICogQHJldHVybnMgVGhlIG5vcm1hbGl6ZWQgcGF0aC5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplU2xhc2hlcyhwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICBwYXRoID0gcmVwbGFjZUFsbCh7XG4gICAgJHN0cmluZzogcGF0aCxcbiAgICByZXBsYWNlcjogJy8nLFxuICAgIHNlYXJjaFZhbHVlOiAvKD86W1xcXFwvXSkrL2dcbiAgfSk7XG4gIHBhdGggPSByZXBsYWNlQWxsKHtcbiAgICAkc3RyaW5nOiBwYXRoLFxuICAgIHJlcGxhY2VyOiAnJyxcbiAgICBzZWFyY2hWYWx1ZTogL15cXC8rfFxcLyskL2dcbiAgfSk7XG4gIHJldHVybiBwYXRoIHx8ICcvJztcbn1cblxuLyoqXG4gKiBSZXNvbHZlcyB0aGUgYGF0dGFjaG1lbnRGb2xkZXJQYXRoYCBzZXR0aW5nIGFnYWluc3QgYSBub3RlIGludG8gYSBjb25jcmV0ZSBhdHRhY2htZW50IGZvbGRlci5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gUGFyYW1ldGVycyBmb3IgdGhlIHJlc29sdmUgYXR0YWNobWVudCBmb2xkZXIgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyBUaGUgcmVzb2x2ZWQgYXR0YWNobWVudCBmb2xkZXIuXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVBdHRhY2htZW50Rm9sZGVyKHBhcmFtczogUmVzb2x2ZUF0dGFjaG1lbnRGb2xkZXJQYXJhbXMpOiBSZXNvbHZlQXR0YWNobWVudEZvbGRlclJlc3VsdCB7XG4gIGNvbnN0IHtcbiAgICBhcHAsXG4gICAgbm90ZVBhdGhPckZpbGVcbiAgfSA9IHBhcmFtcztcbiAgbGV0IGF0dGFjaG1lbnRGb2xkZXJQYXRoID0gYXBwLnZhdWx0LmdldENvbmZpZygnYXR0YWNobWVudEZvbGRlclBhdGgnKSBhcyBzdHJpbmc7XG4gIGNvbnN0IGlzQ3VycmVudEZvbGRlciA9IGF0dGFjaG1lbnRGb2xkZXJQYXRoID09PSAnLicgfHwgYXR0YWNobWVudEZvbGRlclBhdGggPT09ICcuLyc7XG4gIGNvbnN0IHJlbGF0aXZlUGF0aCA9IGF0dGFjaG1lbnRGb2xkZXJQYXRoLnN0YXJ0c1dpdGgoJy4vJylcbiAgICA/IHRyaW1TdGFydCh7XG4gICAgICAkc3RyaW5nOiBhdHRhY2htZW50Rm9sZGVyUGF0aCxcbiAgICAgIHByZWZpeDogJy4vJ1xuICAgIH0pXG4gICAgOiBudWxsO1xuXG4gIC8vIEEgbm90ZSB0aGF0IGRvZXMgbm90IGV4aXN0IHlldCAoYSByZW5hbWUgdGFyZ2V0LCBhIGR1bW15IHNpYmxpbmcpIHN0aWxsIGJlbG9uZ3MgdG8gaXRzIG93biBmb2xkZXIuXG4gIC8vIE1hdGVyaWFsaXppbmcgaXQgZnJvbSBpdHMgcGF0aCBrZWVwcyB0aGF0IGZvbGRlciwgd2hlcmUgYSB2YXVsdCBsb29rdXAgd291bGQgZmFsbCBiYWNrIHRvIHRoZSByb290LlxuICAvLyBPbmx5IGFuIGV4cGxpY2l0bHkgbm90ZS1sZXNzIGF0dGFjaG1lbnQgcmVzb2x2ZXMgdG8gdGhlIHZhdWx0IHJvb3QuXG4gIGNvbnN0IG5vdGVGaWxlT3JOdWxsID0gbm90ZVBhdGhPckZpbGUgPT09IG51bGxcbiAgICA/IG51bGxcbiAgICA6IGdldEZpbGUoe1xuICAgICAgYXBwLFxuICAgICAgcGF0aE9yRmlsZTogbm90ZVBhdGhPckZpbGUsXG4gICAgICBzaG91bGRJbmNsdWRlTm9uRXhpc3Rpbmc6IHRydWVcbiAgICB9KTtcblxuICBpZiAoaXNDdXJyZW50Rm9sZGVyKSB7XG4gICAgYXR0YWNobWVudEZvbGRlclBhdGggPSBub3RlRmlsZU9yTnVsbCA/IG5vdGVGaWxlT3JOdWxsLnBhcmVudD8ucGF0aCA/PyAnJyA6ICcnO1xuICB9IGVsc2UgaWYgKHJlbGF0aXZlUGF0aCkge1xuICAgIGF0dGFjaG1lbnRGb2xkZXJQYXRoID0gKG5vdGVGaWxlT3JOdWxsID8gbm90ZUZpbGVPck51bGwucGFyZW50Py5nZXRQYXJlbnRQcmVmaXgoKSA/PyAnJyA6ICcnKSArIHJlbGF0aXZlUGF0aDtcbiAgfVxuXG4gIGF0dGFjaG1lbnRGb2xkZXJQYXRoID0gbm9ybWFsaXplU3RyaW5nKG5vcm1hbGl6ZVNsYXNoZXMoYXR0YWNobWVudEZvbGRlclBhdGgpKTtcblxuICByZXR1cm4ge1xuICAgIGZvbGRlcjogZ2V0Rm9sZGVyT3JOdWxsKHsgYXBwLCBpc0Nhc2VJbnNlbnNpdGl2ZTogdHJ1ZSwgcGF0aE9yRm9sZGVyOiBhdHRhY2htZW50Rm9sZGVyUGF0aCB9KSxcbiAgICBwYXRoOiBhdHRhY2htZW50Rm9sZGVyUGF0aCxcbiAgICByZWxhdGl2ZVBhdGhcbiAgfTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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
|
|
350
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2F0dGFjaG1lbnQtcGF0aC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFByb3ZpZGVzIHV0aWxpdHkgZnVuY3Rpb25zIGZvciB3b3JraW5nIHdpdGggYXR0YWNobWVudCBwYXRocy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIEFwcCxcbiAgRmlsZVN0YXRzLFxuICBURm9sZGVyXG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHtcbiAgYmFzZW5hbWUsXG4gIGRpcm5hbWUsXG4gIGV4dG5hbWUsXG4gIGpvaW4sXG4gIG1ha2VGaWxlTmFtZVxufSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvcGF0aCc7XG5pbXBvcnQge1xuICBub3JtYWxpemVTdHJpbmcsXG4gIHJlcGxhY2VBbGwsXG4gIHRyaW1TdGFydFxufSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvc3RyaW5nJztcbmltcG9ydCB7XG4gIGdldERhdGFBZGFwdGVyRXgsXG4gIHBhcmVudEZvbGRlclBhdGhcbn0gZnJvbSAnQG9ic2lkaWFuLXR5cGluZ3Mvb2JzaWRpYW4tcHVibGljLWxhdGVzdC9pbXBsZW1lbnRhdGlvbnMnO1xuXG5pbXBvcnQgdHlwZSB7IFBhdGhPckZpbGUgfSBmcm9tICcuL2ZpbGUtc3lzdGVtLnRzJztcbmltcG9ydCB0eXBlIHsgUGx1Z2luQXBpQ29udHJhY3QgfSBmcm9tICcuL3BsdWdpbi9wbHVnaW4tYXBpLnRzJztcblxuaW1wb3J0IHtcbiAgZ2V0RmlsZSxcbiAgZ2V0RmlsZU9yTnVsbCxcbiAgZ2V0Rm9sZGVyLFxuICBnZXRGb2xkZXJPck51bGwsXG4gIGdldFBhdGgsXG4gIGlzUGF0aE9yRmlsZSxcbiAgTUFSS0RPV05fRklMRV9FWFRFTlNJT05cbn0gZnJvbSAnLi9maWxlLXN5c3RlbS50cyc7XG5pbXBvcnQge1xuICBjcmVhdGVBcmd1bWVudHNTY2hlbWEsXG4gIGNyZWF0ZVR5cGVHdWFyZFNjaGVtYVxufSBmcm9tICcuL3BsdWdpbi9wbHVnaW4tYXBpLXNjaGVtYS50cyc7XG5pbXBvcnQgeyBmaW5kUGx1Z2luQXBpIH0gZnJvbSAnLi9wbHVnaW4vcGx1Z2luLWFwaS50cyc7XG5cbi8qKlxuICogQSBjb250ZXh0IGZvciBhbiBhdHRhY2htZW50IHBhdGguXG4gKi9cbmV4cG9ydCBlbnVtIEF0dGFjaG1lbnRQYXRoQ29udGV4dCB7XG4gIC8qKlxuICAgKiBBIGNvbnRleHQgZm9yIGEgZGVsZXRlIG5vdGUuXG4gICAqL1xuICBEZWxldGVOb3RlID0gJ0RlbGV0ZU5vdGUnLFxuXG4gIC8qKlxuICAgKiBBIGNvbnRleHQgZm9yIGEgcmVuYW1lIG5vdGUuXG4gICAqL1xuICBSZW5hbWVOb3RlID0gJ1JlbmFtZU5vdGUnLFxuXG4gIC8qKlxuICAgKiBBbiB1bmtub3duIGNvbnRleHQuXG4gICAqL1xuICBVbmtub3duID0gJ1Vua25vd24nXG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgdGhlIGdldCBhdmFpbGFibGUgcGF0aCBmb3IgYXR0YWNobWVudHMgZXh0ZW5kZWQgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2V0QXZhaWxhYmxlUGF0aEZvckF0dGFjaG1lbnRzRXh0ZW5kZWRGdW5jdGlvblBhcmFtcyB7XG4gIC8qKlxuICAgKiBBIGJhc2UgbmFtZSBvZiB0aGUgYXR0YWNobWVudC5cbiAgICovXG4gIHJlYWRvbmx5IGF0dGFjaG1lbnRGaWxlQmFzZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogQW4gZXh0ZW5zaW9uIG9mIHRoZSBhdHRhY2htZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgYXR0YWNobWVudEZpbGVFeHRlbnNpb246IHN0cmluZztcblxuICAvKipcbiAgICogQSBzdGF0cyBvZiB0aGUgYXR0YWNobWVudCBmaWxlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXR0YWNobWVudEZpbGVTdGF0cz86IEZpbGVTdGF0cyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQSBjb250ZXh0LlxuICAgKi9cbiAgcmVhZG9ubHkgY29udGV4dDogQXR0YWNobWVudFBhdGhDb250ZXh0O1xuXG4gIC8qKlxuICAgKiBBIHBhdGggb3IgZmlsZSBvZiB0aGUgbm90ZS5cbiAgICovXG4gIHJlYWRvbmx5IG5vdGVQYXRoT3JGaWxlOiBudWxsIHwgUGF0aE9yRmlsZTtcblxuICAvKipcbiAgICogQSBwYXRoIG9yIGZpbGUgb2YgdGhlIG9sZCBhdHRhY2htZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgb2xkQXR0YWNobWVudFBhdGhPckZpbGU6IFBhdGhPckZpbGU7XG5cbiAgLyoqXG4gICAqIEEgcGF0aCBvciBmaWxlIG9mIHRoZSBvbGQgbm90ZS5cbiAgICovXG4gIHJlYWRvbmx5IG9sZE5vdGVQYXRoT3JGaWxlPzogUGF0aE9yRmlsZSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogTGF6aWx5IHJlYWRzIHRoZSBjb250ZW50IG9mIHRoZSBhdHRhY2htZW50IGZpbGUuXG4gICAqXG4gICAqIFRoZSBjb250ZW50IGlzIHJlYWQgb24gZGVtYW5kIG9ubHkgd2hlbiBhIGNvbnN1bWVyIGFjdHVhbGx5IG5lZWRzIHRoZSBieXRlcyAoZS5nLiBhIHRlbXBsYXRlXG4gICAqIHRva2VuIHRoYXQgZW1iZWRzIHRoZW0pLiBGb3IgdGhlIGRlZmF1bHQgdGVtcGxhdGVzIG5vdGhpbmcgcHVsbHMgdGhlIGJ5dGVzLCBzbyB0aGUgcG90ZW50aWFsbHlcbiAgICogZXhwZW5zaXZlIChzaXplLXByb3BvcnRpb25hbCkgYHJlYWRCaW5hcnlgIG5ldmVyIHJ1bnMuIENvbnN1bWVycyB0aGF0IG1heSBjYWxsIHRoaXMgbW9yZSB0aGFuXG4gICAqIG9uY2Ugc2hvdWxkIG1lbW9pemUgdGhlIGZpcnN0IGNhbGwuIGBudWxsYCB3aGVuIHRoZXJlIGlzIG5vIGF0dGFjaG1lbnQgZmlsZSB0byByZWFkLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHRoZSBjb250ZW50IG9mIHRoZSBhdHRhY2htZW50IGZpbGUuXG4gICAqL1xuICByZWFkb25seSByZWFkQXR0YWNobWVudEZpbGVDb250ZW50OiAoKCkgPT4gUHJvbWlzZTxBcnJheUJ1ZmZlcj4pIHwgbnVsbDtcblxuICAvKipcbiAgICogU2hvdWxkIHRoZSBkdXBsaWNhdGUgY2hlY2sgYmUgc2tpcHBlZC5cbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFNraXBEdXBsaWNhdGVDaGVjaz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFNob3VsZCB0aGUgZ2VuZXJhdGVkIGF0dGFjaG1lbnQgZmlsZSBuYW1lIGJlIHNraXBwZWQuXG4gICAqL1xuICByZWFkb25seSBzaG91bGRTa2lwR2VuZXJhdGVkQXR0YWNobWVudEZpbGVOYW1lPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogU2hvdWxkIG1pc3NpbmcgYXR0YWNobWVudCBmb2xkZXIgY3JlYXRpb24gYmUgc2tpcHBlZC5cbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFNraXBNaXNzaW5nQXR0YWNobWVudEZvbGRlckNyZWF0aW9uOiBib29sZWFuIHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFRoZSBzbGljZSBvZiBDdXN0b20gQXR0YWNobWVudCBMb2NhdGlvbidzIHJlZ2lzdHJ5IEFQSSB0aGlzIG1vZHVsZSBjYWxscywgZGVjbGFyZWQgaGVyZSByYXRoZXIgdGhhbiBpbXBvcnRlZDpcbiAqIHRoYXQgcGx1Z2luIHNoaXBzIGl0cyBzdXJmYWNlIGFzIGEgaGFuZC13cml0dGVuIGBhcGkuZC50c2AsIG5vdCBhcyBhIHBhY2thZ2UgKHNlZSBydWxlIEw5IGluIGBBR0VOVFMubWRgKS5cbiAqL1xuaW50ZXJmYWNlIEN1c3RvbUF0dGFjaG1lbnRMb2NhdGlvbkF0dGFjaG1lbnRQYXRoQXBpIHtcbiAgLyoqXG4gICAqIFRoZSBwbHVnaW4ncyBmdWxsIGF0dGFjaG1lbnQtcGF0aCByZXNvbHZlci5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBzYW1lIGZpZWxkcyBhcyB7QGxpbmsgR2V0QXZhaWxhYmxlUGF0aEZvckF0dGFjaG1lbnRzRXh0ZW5kZWRGdW5jdGlvblBhcmFtc30sIHdoaWNoIHRoZVxuICAgKiAgIHBsdWdpbiBkZWNsYXJlcyBmaWVsZCBmb3IgZmllbGQuXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGF0dGFjaG1lbnQncyBwYXRoIGZyb20gdGhlIHZhdWx0IHJvb3QuXG4gICAqL1xuICBnZXRBdmFpbGFibGVQYXRoRm9yQXR0YWNobWVudHM6IChwYXJhbXM6IEdldEF2YWlsYWJsZVBhdGhGb3JBdHRhY2htZW50c0V4dGVuZGVkRnVuY3Rpb25QYXJhbXMpID0+IFByb21pc2U8c3RyaW5nPjtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgdXNlciBkZXNpZ25hdGVkIGEgZm9sZGVyIGFuIGF0dGFjaG1lbnQgdW5pdCBmb2xkZXIuIFN5bmNocm9ub3VzIG9uIHB1cnBvc2UuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgZm9sZGVyLlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBmb2xkZXIgaXMgZGVzaWduYXRlZC5cbiAgICovXG4gIGlzQXR0YWNobWVudFVuaXRGb2xkZXI6IChwYXJhbXM6IEN1c3RvbUF0dGFjaG1lbnRMb2NhdGlvbklzQXR0YWNobWVudFVuaXRGb2xkZXJQYXJhbXMpID0+IGJvb2xlYW47XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIEN1c3RvbUF0dGFjaG1lbnRMb2NhdGlvbkF0dGFjaG1lbnRQYXRoQXBpLmlzQXR0YWNobWVudFVuaXRGb2xkZXJ9LlxuICovXG5pbnRlcmZhY2UgQ3VzdG9tQXR0YWNobWVudExvY2F0aW9uSXNBdHRhY2htZW50VW5pdEZvbGRlclBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgZm9sZGVyLCBhcyBhIHZhdWx0LXJlbGF0aXZlIHBhdGguXG4gICAqL1xuICByZWFkb25seSBmb2xkZXJQYXRoOiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIHBsdWdpbiBpZCBDdXN0b20gQXR0YWNobWVudCBMb2NhdGlvbiBwdWJsaXNoZXMgaXRzIEFQSSB1bmRlci5cbiAqL1xuZXhwb3J0IGNvbnN0IENVU1RPTV9BVFRBQ0hNRU5UX0xPQ0FUSU9OX1BMVUdJTl9JRCA9ICdvYnNpZGlhbi1jdXN0b20tYXR0YWNobWVudC1sb2NhdGlvbic7XG5cbi8qKlxuICogVGhlIGNvbnRyYWN0IHZlcnNpb25zIG9mIEN1c3RvbSBBdHRhY2htZW50IExvY2F0aW9uJ3MgQVBJIHRoaXMgbW9kdWxlIGNvbXBpbGVkIGFnYWluc3QuIGAxLjMuMGAgaXMgdGhlIGZpcnN0XG4gKiB0byBjYXJyeSB0aGUgdHdvIGF0dGFjaG1lbnQtcGF0aCBtZXRob2RzLlxuICovXG5jb25zdCBDVVNUT01fQVRUQUNITUVOVF9MT0NBVElPTl9BVFRBQ0hNRU5UX1BBVEhfQVBJX1ZFUlNJT05fUkFOR0UgPSAnXjEuMy4wJztcblxuLyoqXG4gKiBUaGUgY29udHJhY3Qgb2YgdGhlIG1lbWJlcnMgb2YgQ3VzdG9tIEF0dGFjaG1lbnQgTG9jYXRpb24ncyBBUEkgdGhpcyBtb2R1bGUgY2FsbHMsIHNvIGEgcmVjb3JkIHRoYXQgbGFja3NcbiAqIGVpdGhlciBpcyBwYXNzZWQgb3ZlciwgYW5kIGEgcGF5bG9hZCB0aGF0IGJyZWFrcyBpdHMgc2lnbmF0dXJlIGlzIHJlcG9ydGVkIHdoaWxlIHRoZSBgUGx1Z2luQXBpYCBkZWJ1Z2dlciBpcyBvbi5cbiAqL1xuY29uc3QgQ1VTVE9NX0FUVEFDSE1FTlRfTE9DQVRJT05fQVRUQUNITUVOVF9QQVRIX0FQSV9DT05UUkFDVDogUGx1Z2luQXBpQ29udHJhY3Q8Q3VzdG9tQXR0YWNobWVudExvY2F0aW9uQXR0YWNobWVudFBhdGhBcGk+ID0ge1xuICBnZXRBdmFpbGFibGVQYXRoRm9yQXR0YWNobWVudHM6IHtcbiAgICBpbnB1dDogY3JlYXRlQXJndW1lbnRzU2NoZW1hPFtwYXJhbXM6IEdldEF2YWlsYWJsZVBhdGhGb3JBdHRhY2htZW50c0V4dGVuZGVkRnVuY3Rpb25QYXJhbXNdPihbe1xuICAgICAgZXhwZWN0ZWQ6ICd0aGUgYXR0YWNobWVudC1wYXRoIHBhcmFtZXRlcnMnLFxuICAgICAgdHlwZUd1YXJkOiBpc0dldEF2YWlsYWJsZVBhdGhGb3JBdHRhY2htZW50c0V4dGVuZGVkRnVuY3Rpb25QYXJhbXNcbiAgICB9XSksXG4gICAgb3V0cHV0OiBjcmVhdGVUeXBlR3VhcmRTY2hlbWEoeyBleHBlY3RlZDogJ2Egc3RyaW5nJywgdHlwZUd1YXJkOiBpc1N0cmluZyB9KVxuICB9LFxuICBpc0F0dGFjaG1lbnRVbml0Rm9sZGVyOiB7XG4gICAgaW5wdXQ6IGNyZWF0ZUFyZ3VtZW50c1NjaGVtYTxbcGFyYW1zOiBDdXN0b21BdHRhY2htZW50TG9jYXRpb25Jc0F0dGFjaG1lbnRVbml0Rm9sZGVyUGFyYW1zXT4oW3tcbiAgICAgIGV4cGVjdGVkOiAnYW4gb2JqZWN0IHdpdGggYSBzdHJpbmcgZm9sZGVyUGF0aCcsXG4gICAgICB0eXBlR3VhcmQ6IGlzQ3VzdG9tQXR0YWNobWVudExvY2F0aW9uSXNBdHRhY2htZW50VW5pdEZvbGRlclBhcmFtc1xuICAgIH1dKSxcbiAgICBvdXRwdXQ6IGNyZWF0ZVR5cGVHdWFyZFNjaGVtYSh7IGV4cGVjdGVkOiAnYSBib29sZWFuJywgdHlwZUd1YXJkOiBpc0Jvb2xlYW4gfSlcbiAgfVxufTtcblxuLyoqXG4gKiBEdW1teSBwYXRoLlxuICovXG5leHBvcnQgY29uc3QgRFVNTVlfUEFUSCA9ICdfX0RVTU1ZX18nO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHRoZSBnZXRBdHRhY2htZW50RmlsZVBhdGggZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2V0QXR0YWNobWVudEZpbGVQYXRoUGFyYW1zIHtcbiAgLyoqXG4gICAqIEFuIE9ic2lkaWFuIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIEEgY29udGV4dC5cbiAgICovXG4gIHJlYWRvbmx5IGNvbnRleHQ6IEF0dGFjaG1lbnRQYXRoQ29udGV4dDtcblxuICAvKipcbiAgICogQSBwYXRoIG9mIHRoZSBub3RlLlxuICAgKi9cbiAgcmVhZG9ubHkgbm90ZVBhdGhPckZpbGU6IFBhdGhPckZpbGU7XG5cbiAgLyoqXG4gICAqIEEgcGF0aCBvZiB0aGUgYXR0YWNobWVudC5cbiAgICovXG4gIHJlYWRvbmx5IG9sZEF0dGFjaG1lbnRQYXRoT3JGaWxlOiBQYXRoT3JGaWxlO1xuXG4gIC8qKlxuICAgKiBBIHBhdGggb2YgdGhlIG9sZCBub3RlLlxuICAgKi9cbiAgcmVhZG9ubHkgb2xkTm90ZVBhdGhPckZpbGU/OiBQYXRoT3JGaWxlIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBTaG91bGQgdGhlIGR1cGxpY2F0ZSBjaGVjayBiZSBza2lwcGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkU2tpcER1cGxpY2F0ZUNoZWNrOiBib29sZWFuO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBnZXRBdHRhY2htZW50Rm9sZGVyUGF0aH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2V0QXR0YWNobWVudEZvbGRlclBhdGhQYXJhbXMge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBjb250ZXh0LlxuICAgKlxuICAgKiBAZGVmYXVsdCB7QGxpbmsgQXR0YWNobWVudFBhdGhDb250ZXh0LlVua25vd259XG4gICAqL1xuICByZWFkb25seSBjb250ZXh0PzogQXR0YWNobWVudFBhdGhDb250ZXh0O1xuXG4gIC8qKlxuICAgKiBUaGUgcGF0aCBvZiB0aGUgbm90ZS5cbiAgICovXG4gIHJlYWRvbmx5IG5vdGVQYXRoT3JGaWxlOiBQYXRoT3JGaWxlO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBnZXRBdHRhY2htZW50Rm9sZGVyUGF0aFN5bmNPck51bGx9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdldEF0dGFjaG1lbnRGb2xkZXJQYXRoU3luY09yTnVsbFBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIHBhdGggb2YgdGhlIG5vdGUuXG4gICAqL1xuICByZWFkb25seSBub3RlUGF0aE9yRmlsZTogUGF0aE9yRmlsZTtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciB0aGUgZ2V0QXZhaWxhYmxlUGF0aEZvckF0dGFjaG1lbnRzIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdldEF2YWlsYWJsZVBhdGhGb3JBdHRhY2htZW50c1BhcmFtcyB7XG4gIC8qKlxuICAgKiBBbiBPYnNpZGlhbiBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuICAvKipcbiAgICogQSBiYXNlIG5hbWUgb2YgdGhlIGF0dGFjaG1lbnQuXG4gICAqL1xuICByZWFkb25seSBhdHRhY2htZW50RmlsZUJhc2VOYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBBbiBleHRlbnNpb24gb2YgdGhlIGF0dGFjaG1lbnQuXG4gICAqL1xuICByZWFkb25seSBhdHRhY2htZW50RmlsZUV4dGVuc2lvbjogc3RyaW5nO1xuICAvKipcbiAgICogQSBmaWxlIHRvIGF0dGFjaCB0by5cbiAgICovXG4gIHJlYWRvbmx5IG5vdGVQYXRoT3JGaWxlOiBudWxsIHwgUGF0aE9yRmlsZTtcbiAgLyoqXG4gICAqIFNob3VsZCB0aGUgZHVwbGljYXRlIGNoZWNrIGJlIHNraXBwZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFNraXBEdXBsaWNhdGVDaGVjaz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBTaG91bGQgbWlzc2luZyBhdHRhY2htZW50IGZvbGRlciBjcmVhdGlvbiBiZSBza2lwcGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRTa2lwTWlzc2luZ0F0dGFjaG1lbnRGb2xkZXJDcmVhdGlvbj86IGJvb2xlYW47XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGhhc093bkF0dGFjaG1lbnRGb2xkZXJ9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEhhc093bkF0dGFjaG1lbnRGb2xkZXJQYXJhbXMge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBjb250ZXh0LlxuICAgKlxuICAgKiBAZGVmYXVsdCB7QGxpbmsgQXR0YWNobWVudFBhdGhDb250ZXh0LlVua25vd259XG4gICAqL1xuICByZWFkb25seSBjb250ZXh0PzogQXR0YWNobWVudFBhdGhDb250ZXh0O1xuXG4gIC8qKlxuICAgKiBUaGUgcGF0aCBvZiB0aGUgbm90ZS5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGg6IHN0cmluZztcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgaXNBdFByb3BlckF0dGFjaG1lbnRQYXRofS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJc0F0UHJvcGVyQXR0YWNobWVudFBhdGhQYXJhbXMge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoIG9yIGZpbGUgb2YgdGhlIGF0dGFjaG1lbnQgdG8gY2hlY2suXG4gICAqL1xuICByZWFkb25seSBhdHRhY2htZW50UGF0aE9yRmlsZTogUGF0aE9yRmlsZTtcblxuICAvKipcbiAgICogVGhlIGNvbnRleHQuXG4gICAqXG4gICAqIEBkZWZhdWx0IHtAbGluayBBdHRhY2htZW50UGF0aENvbnRleHQuVW5rbm93bn1cbiAgICovXG4gIHJlYWRvbmx5IGNvbnRleHQ/OiBBdHRhY2htZW50UGF0aENvbnRleHQ7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoIG9yIGZpbGUgb2YgdGhlIG5vdGUgdGhhdCByZWZlcmVuY2VzIHRoZSBhdHRhY2htZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgbm90ZVBhdGhPckZpbGU6IFBhdGhPckZpbGU7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGdldEF0dGFjaG1lbnRGaWxlUGF0aFN5bmN9LlxuICovXG5pbnRlcmZhY2UgR2V0QXR0YWNobWVudEZpbGVQYXRoU3luY1BhcmFtcyB7XG4gIC8qKlxuICAgKiBBbiBPYnNpZGlhbiBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBBIHBhdGggb2YgdGhlIG5vdGUuXG4gICAqL1xuICByZWFkb25seSBub3RlUGF0aE9yRmlsZTogUGF0aE9yRmlsZTtcblxuICAvKipcbiAgICogQSBwYXRoIG9mIHRoZSBhdHRhY2htZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgb2xkQXR0YWNobWVudFBhdGhPckZpbGU6IFBhdGhPckZpbGU7XG5cbiAgLyoqXG4gICAqIFNob3VsZCB0aGUgZHVwbGljYXRlIGNoZWNrIGJlIHNraXBwZWQuXG4gICAqL1xuICByZWFkb25seSBzaG91bGRTa2lwRHVwbGljYXRlQ2hlY2s6IGJvb2xlYW47XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGdldEF2YWlsYWJsZVBhdGhGb3JBdHRhY2htZW50c1N5bmN9LlxuICovXG5pbnRlcmZhY2UgR2V0QXZhaWxhYmxlUGF0aEZvckF0dGFjaG1lbnRzU3luY1BhcmFtcyB7XG4gIC8qKlxuICAgKiBBbiBPYnNpZGlhbiBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBBIGJhc2UgbmFtZSBvZiB0aGUgYXR0YWNobWVudC5cbiAgICovXG4gIHJlYWRvbmx5IGF0dGFjaG1lbnRGaWxlQmFzZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogQW4gZXh0ZW5zaW9uIG9mIHRoZSBhdHRhY2htZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgYXR0YWNobWVudEZpbGVFeHRlbnNpb246IHN0cmluZztcblxuICAvKipcbiAgICogQSBmaWxlIHRvIGF0dGFjaCB0by5cbiAgICovXG4gIHJlYWRvbmx5IG5vdGVQYXRoT3JGaWxlOiBudWxsIHwgUGF0aE9yRmlsZTtcblxuICAvKipcbiAgICogU2hvdWxkIHRoZSBkdXBsaWNhdGUgY2hlY2sgYmUgc2tpcHBlZC5cbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFNraXBEdXBsaWNhdGVDaGVjaz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHJlc29sdmVBdHRhY2htZW50Rm9sZGVyfS5cbiAqL1xuaW50ZXJmYWNlIFJlc29sdmVBdHRhY2htZW50Rm9sZGVyUGFyYW1zIHtcbiAgLyoqXG4gICAqIEFuIE9ic2lkaWFuIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIEEgZmlsZSB0byBhdHRhY2ggdG8uXG4gICAqL1xuICByZWFkb25seSBub3RlUGF0aE9yRmlsZTogbnVsbCB8IFBhdGhPckZpbGU7XG59XG5cbi8qKlxuICogVGhlIGF0dGFjaG1lbnQgZm9sZGVyIGEgbm90ZSByZXNvbHZlcyB0bywgYmVmb3JlIHRoZSBhdHRhY2htZW50IGZpbGUgbmFtZSBpcyBhcHBlbmRlZC5cbiAqL1xuaW50ZXJmYWNlIFJlc29sdmVBdHRhY2htZW50Rm9sZGVyUmVzdWx0IHtcbiAgLyoqXG4gICAqIFRoZSBhdHRhY2htZW50IGZvbGRlciwgb3IgYG51bGxgIHdoZW4gaXQgZG9lcyBub3QgZXhpc3QgaW4gdGhlIHZhdWx0IHlldC5cbiAgICovXG4gIHJlYWRvbmx5IGZvbGRlcjogbnVsbCB8IFRGb2xkZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBub3JtYWxpemVkIGF0dGFjaG1lbnQgZm9sZGVyIHBhdGgsIHdoZXRoZXIgb3Igbm90IHRoZSBmb2xkZXIgZXhpc3RzLlxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFydCBvZiB0aGUgYGF0dGFjaG1lbnRGb2xkZXJQYXRoYCBzZXR0aW5nIHRoYXQgZm9sbG93cyBgLi9gLCBvciBgbnVsbGAgd2hlbiB0aGUgc2V0dGluZyBpcyBub3RcbiAgICogcmVsYXRpdmUgdG8gdGhlIG5vdGUuIE9ubHkgYSByZWxhdGl2ZSBzZXR0aW5nIG1heSBoYXZlIGl0cyBtaXNzaW5nIGZvbGRlciBjcmVhdGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVsYXRpdmVQYXRoOiBudWxsIHwgc3RyaW5nO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgZmlsZSBwYXRoIGZvciBhbiBhdHRhY2htZW50IHdpdGhpbiBhIG5vdGUuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFBhcmFtZXRlcnMgZm9yIHRoZSBnZXQgYXR0YWNobWVudCBmaWxlIHBhdGggZnVuY3Rpb24uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHRoZSBmaWxlIHBhdGggb2YgdGhlIGF0dGFjaG1lbnQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRBdHRhY2htZW50RmlsZVBhdGgocGFyYW1zOiBHZXRBdHRhY2htZW50RmlsZVBhdGhQYXJhbXMpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCB7XG4gICAgYXBwLFxuICAgIG5vdGVQYXRoT3JGaWxlLFxuICAgIG9sZEF0dGFjaG1lbnRQYXRoT3JGaWxlLFxuICAgIHNob3VsZFNraXBEdXBsaWNhdGVDaGVja1xuICB9ID0gcGFyYW1zO1xuXG4gIGNvbnN0IGN1c3RvbUF0dGFjaG1lbnRMb2NhdGlvbkFwaSA9IGZpbmRDdXN0b21BdHRhY2htZW50TG9jYXRpb25BcGkoKTtcbiAgaWYgKCFjdXN0b21BdHRhY2htZW50TG9jYXRpb25BcGkpIHtcbiAgICAvLyBOb2JvZHkgb3ZlcnJpZGVzIHRoZSByZXNvbHV0aW9uLCBzbyBpdCBpcyBlbnRpcmVseSBzeW5jaHJvbm91cy5cbiAgICAvLyBUaGUgc2FtZSBjb3JlIGFuc3dlcnMgYGdldEF0dGFjaG1lbnRGb2xkZXJQYXRoU3luY09yTnVsbGAsIHdoaWNoIGlzIHdoYXQga2VlcHMgdGhlIHR3byBpbiBzdGVwLlxuICAgIHJldHVybiBnZXRBdHRhY2htZW50RmlsZVBhdGhTeW5jKHtcbiAgICAgIGFwcCxcbiAgICAgIG5vdGVQYXRoT3JGaWxlLFxuICAgICAgb2xkQXR0YWNobWVudFBhdGhPckZpbGUsXG4gICAgICBzaG91bGRTa2lwRHVwbGljYXRlQ2hlY2tcbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IGF0dGFjaG1lbnRQYXRoID0gZ2V0UGF0aChhcHAsIG9sZEF0dGFjaG1lbnRQYXRoT3JGaWxlKTtcbiAgY29uc3QgYXR0YWNobWVudEZpbGVFeHRlbnNpb24gPSBleHRuYW1lKGF0dGFjaG1lbnRQYXRoKTtcbiAgY29uc3QgYXR0YWNobWVudEZpbGVCYXNlTmFtZSA9IGJhc2VuYW1lKGF0dGFjaG1lbnRQYXRoLCBhdHRhY2htZW50RmlsZUV4dGVuc2lvbik7XG4gIGNvbnN0IGF0dGFjaG1lbnRGaWxlID0gZ2V0RmlsZU9yTnVsbCh7IGFwcCwgcGF0aE9yRmlsZTogYXR0YWNobWVudFBhdGggfSk7XG5cbiAgcmV0dXJuIGF3YWl0IGN1c3RvbUF0dGFjaG1lbnRMb2NhdGlvbkFwaS5nZXRBdmFpbGFibGVQYXRoRm9yQXR0YWNobWVudHMoe1xuICAgIGF0dGFjaG1lbnRGaWxlQmFzZU5hbWUsXG4gICAgYXR0YWNobWVudEZpbGVFeHRlbnNpb246IGF0dGFjaG1lbnRGaWxlRXh0ZW5zaW9uLnNsaWNlKDEpLFxuICAgIGF0dGFjaG1lbnRGaWxlU3RhdHM6IGF0dGFjaG1lbnRGaWxlPy5zdGF0LFxuICAgIGNvbnRleHQ6IHBhcmFtcy5jb250ZXh0LFxuICAgIG5vdGVQYXRoT3JGaWxlLFxuICAgIG9sZEF0dGFjaG1lbnRQYXRoT3JGaWxlLFxuICAgIG9sZE5vdGVQYXRoT3JGaWxlOiBwYXJhbXMub2xkTm90ZVBhdGhPckZpbGUsXG4gICAgcmVhZEF0dGFjaG1lbnRGaWxlQ29udGVudDogYXR0YWNobWVudEZpbGUgPyAoKTogUHJvbWlzZTxBcnJheUJ1ZmZlcj4gPT4gYXBwLnZhdWx0LnJlYWRCaW5hcnkoYXR0YWNobWVudEZpbGUpIDogbnVsbCxcbiAgICBzaG91bGRTa2lwRHVwbGljYXRlQ2hlY2ssXG4gICAgc2hvdWxkU2tpcE1pc3NpbmdBdHRhY2htZW50Rm9sZGVyQ3JlYXRpb246IHRydWVcbiAgfSk7XG59XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBhdHRhY2htZW50IGZvbGRlciBwYXRoIGZvciBhIGdpdmVuIG5vdGUuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFBhcmFtZXRlcnMgZm9yIHRoZSBnZXQgYXR0YWNobWVudCBmb2xkZXIgcGF0aCBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGF0dGFjaG1lbnQgZm9sZGVyIHBhdGguXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRBdHRhY2htZW50Rm9sZGVyUGF0aChwYXJhbXM6IEdldEF0dGFjaG1lbnRGb2xkZXJQYXRoUGFyYW1zKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3Qge1xuICAgIGFwcCxcbiAgICBjb250ZXh0ID0gQXR0YWNobWVudFBhdGhDb250ZXh0LlVua25vd24sXG4gICAgbm90ZVBhdGhPckZpbGVcbiAgfSA9IHBhcmFtcztcbiAgcmV0dXJuIHBhcmVudEZvbGRlclBhdGgoXG4gICAgYXdhaXQgZ2V0QXR0YWNobWVudEZpbGVQYXRoKHtcbiAgICAgIGFwcCxcbiAgICAgIGNvbnRleHQsXG4gICAgICBub3RlUGF0aE9yRmlsZSxcbiAgICAgIG9sZEF0dGFjaG1lbnRQYXRoT3JGaWxlOiBEVU1NWV9QQVRILFxuICAgICAgc2hvdWxkU2tpcER1cGxpY2F0ZUNoZWNrOiB0cnVlXG4gICAgfSlcbiAgKTtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGF0dGFjaG1lbnQgZm9sZGVyIHBhdGggZm9yIGEgZ2l2ZW4gbm90ZSAqKnN5bmNocm9ub3VzbHkqKiwgd2hlbiB0aGF0IGlzIHBvc3NpYmxlIGF0IGFsbC5cbiAqXG4gKiBPYnNpZGlhbiBidWlsZHMgaXRzIGZpbGUvZm9sZGVyIGNvbnRleHQgbWVudXMgYW5kIGV2YWx1YXRlcyBhIGNvbW1hbmQncyBgY2hlY2tDYWxsYmFja2Agc3luY2hyb25vdXNseSwgc28gYVxuICogY2FsbGVyIGRlY2lkaW5nIHdoZXRoZXIgdG8gbWVyZWx5ICpvZmZlciogYSBjb21tYW5kIGNhbm5vdCBhd2FpdCB7QGxpbmsgZ2V0QXR0YWNobWVudEZvbGRlclBhdGh9LiBUaGlzIGlzXG4gKiB0aGUgc3luY2hyb25vdXMgdHdpbiBzdWNoIGEgY2FsbGVyIGNhbiB1c2UgaW5zdGVhZC5cbiAqXG4gKiBUaGUgYW5zd2VyIGlzIGBudWxsYCB3aGVuIGl0IGlzIG5vdCBrbm93YWJsZSBzeW5jaHJvbm91c2x5IFx1MjAxNCB0aGF0IGlzLCB3aGVuIEN1c3RvbSBBdHRhY2htZW50IExvY2F0aW9uIHB1Ymxpc2hlc1xuICogaXRzIGF0dGFjaG1lbnQtcGF0aCBBUEkgYW5kIHRoZXJlZm9yZSBvd25zIHRoZSByZXNvbHV0aW9uLCB3aGljaCBpcyBnZW51aW5lbHkgYXN5bmNocm9ub3VzLiBgbnVsbGAgbWVhbnMgXCJhc2sge0BsaW5rIGdldEF0dGFjaG1lbnRGb2xkZXJQYXRofVwiLCBuZXZlciBcInRoZXJlIGlzIG5vIGF0dGFjaG1lbnRcbiAqIGZvbGRlclwiLiBPdGhlcndpc2UgdGhlIGFuc3dlciBpcyBleGFjdCByYXRoZXIgdGhhbiBhIGd1ZXNzOiBpdCBpcyBwcm9kdWNlZCBieSB0aGUgdmVyeSBzYW1lIGNvZGVcbiAqIHtAbGluayBnZXRBdHRhY2htZW50Rm9sZGVyUGF0aH0gcnVucywgd2hvc2Ugb25seSBhc3luY2hyb25vdXMgc3RlcCBcdTIwMTQgY3JlYXRpbmcgYSBtaXNzaW5nIGF0dGFjaG1lbnQgZm9sZGVyIFx1MjAxNFxuICogaXMgdW5yZWFjaGFibGUgb24gdGhpcyBwYXRoLlxuICpcbiAqIFRoZXJlIGlzIGRlbGliZXJhdGVseSBubyBgY29udGV4dGAgcGFyYW1ldGVyOiB7QGxpbmsgQXR0YWNobWVudFBhdGhDb250ZXh0fSBvbmx5IGV2ZXIgcmVhY2hlcyB0aGF0IHBsdWdpbidzXG4gKiByZXNvbHZlciwgYW5kIHRoaXMgZnVuY3Rpb24gYW5zd2VycyBgbnVsbGAgd2hlbmV2ZXIgaXQgaXMgcHVibGlzaGVkLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBQYXJhbWV0ZXJzIGZvciB0aGUgZ2V0IGF0dGFjaG1lbnQgZm9sZGVyIHBhdGggc3luYyBvciBudWxsIGZ1bmN0aW9uLlxuICogQHJldHVybnMgVGhlIGF0dGFjaG1lbnQgZm9sZGVyIHBhdGgsIG9yIGBudWxsYCB3aGVuIGl0IGNhbiBvbmx5IGJlIHJlc29sdmVkIGFzeW5jaHJvbm91c2x5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QXR0YWNobWVudEZvbGRlclBhdGhTeW5jT3JOdWxsKHBhcmFtczogR2V0QXR0YWNobWVudEZvbGRlclBhdGhTeW5jT3JOdWxsUGFyYW1zKTogbnVsbCB8IHN0cmluZyB7XG4gIGNvbnN0IHtcbiAgICBhcHAsXG4gICAgbm90ZVBhdGhPckZpbGVcbiAgfSA9IHBhcmFtcztcblxuICByZXR1cm4gZmluZEN1c3RvbUF0dGFjaG1lbnRMb2NhdGlvbkFwaSgpXG4gICAgPyBudWxsXG4gICAgOiBwYXJlbnRGb2xkZXJQYXRoKGdldEF0dGFjaG1lbnRGaWxlUGF0aFN5bmMoe1xuICAgICAgYXBwLFxuICAgICAgbm90ZVBhdGhPckZpbGUsXG4gICAgICBvbGRBdHRhY2htZW50UGF0aE9yRmlsZTogRFVNTVlfUEFUSCxcbiAgICAgIHNob3VsZFNraXBEdXBsaWNhdGVDaGVjazogdHJ1ZVxuICAgIH0pKTtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGF2YWlsYWJsZSBwYXRoIGZvciBhdHRhY2htZW50cy5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gUGFyYW1ldGVycyBmb3IgdGhlIGdldCBhdmFpbGFibGUgcGF0aCBmb3IgYXR0YWNobWVudHMgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHRoZSBhdmFpbGFibGUgcGF0aCBmb3IgYXR0YWNobWVudHMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRBdmFpbGFibGVQYXRoRm9yQXR0YWNobWVudHMocGFyYW1zOiBHZXRBdmFpbGFibGVQYXRoRm9yQXR0YWNobWVudHNQYXJhbXMpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCB7XG4gICAgYXBwLFxuICAgIG5vdGVQYXRoT3JGaWxlLFxuICAgIHNob3VsZFNraXBNaXNzaW5nQXR0YWNobWVudEZvbGRlckNyZWF0aW9uXG4gIH0gPSBwYXJhbXM7XG5cbiAgLy8gTWF0ZXJpYWxpemluZyBhIG1pc3NpbmcgYXR0YWNobWVudCBmb2xkZXIgaXMgdGhlIE9ORSBnZW51aW5lbHkgYXN5bmNocm9ub3VzIHN0ZXAgaW4gdGhpcyBmdW5jdGlvbi5cbiAgLy8gRXZlcnl0aGluZyBlbHNlIGxpdmVzIGluIHRoZSBzeW5jaHJvbm91cyBjb3JlLCB3aGljaCB0aGUgc3luY2hyb25vdXMgZW50cnkgcG9pbnRzIHJldXNlIHZlcmJhdGltLlxuICBjb25zdCBhdHRhY2htZW50Rm9sZGVyID0gcmVzb2x2ZUF0dGFjaG1lbnRGb2xkZXIoeyBhcHAsIG5vdGVQYXRoT3JGaWxlIH0pO1xuICBpZiAoIWF0dGFjaG1lbnRGb2xkZXIuZm9sZGVyICYmIGF0dGFjaG1lbnRGb2xkZXIucmVsYXRpdmVQYXRoICYmICFzaG91bGRTa2lwTWlzc2luZ0F0dGFjaG1lbnRGb2xkZXJDcmVhdGlvbikge1xuICAgIGF3YWl0IGFwcC52YXVsdC5jcmVhdGVGb2xkZXIoYXR0YWNobWVudEZvbGRlci5wYXRoKTtcbiAgfVxuXG4gIHJldHVybiBnZXRBdmFpbGFibGVQYXRoRm9yQXR0YWNobWVudHNTeW5jKHBhcmFtcyk7XG59XG5cbi8qKlxuICogUmVhZHMgdGhlIGF0dGFjaG1lbnQtdW5pdC1mb2xkZXIgZGVzaWduYXRpb24gQ3VzdG9tIEF0dGFjaG1lbnQgTG9jYXRpb24gcHVibGlzaGVzIHRocm91Z2ggaXRzIHBsdWdpbiBBUEkuXG4gKlxuICogVGhlIGRlc2lnbmF0aW9uIGlzIG9uZSBwbHVnaW4ncyBzZXR0aW5nIGJ1dCBldmVyeSByZWxvY2F0aW5nIHBsdWdpbidzIGJ1c2luZXNzLCBzbyBpdCBpcyByZWFkIGZyb20gdGhlIHNhbWVcbiAqIEFQSSB0aGF0IGFuc3dlcnMgdGhlIGF0dGFjaG1lbnQgcGF0aCBpdHNlbGYuIFJlYWRpbmcgaXQgaGVyZSByYXRoZXIgdGhhbiBoYXZpbmcgZWFjaCBjYWxsZXIgbG9vayBmb3IgdGhlXG4gKiBwbHVnaW4gaXMgdGhlIHBvaW50IFx1MjAxNCBhIGZvbGRlciBrZXB0IHdob2xlIGJ5IG9uZSBwbHVnaW4gYW5kIHRvcm4gYXBhcnQgYnkgYW5vdGhlciBpcyBleGFjdGx5IHRoZSBmYWlsdXJlXG4gKiBgZmluZEF0dGFjaG1lbnRVbml0Rm9sZGVyUGF0aGAgZXhpc3RzIHRvIHByZXZlbnQuXG4gKlxuICogYHVuZGVmaW5lZGAgbWVhbnMgbm9ib2R5IHB1Ymxpc2hlZCBhIGRlc2lnbmF0aW9uLCB0aGUgc2FtZSBcIm5vYm9keSBvd25zIHRoaXMgcG9saWN5XCIgYW5zd2VyIHRoYXQgc2VuZHNcbiAqIHtAbGluayBnZXRBdHRhY2htZW50RmlsZVBhdGh9IHRvIE9ic2lkaWFuJ3Mgb3duIHJlc29sdXRpb24uIEl0IGlzIGRpc3RpbmN0IGZyb20gYSBkZXNpZ25hdGlvbiB0aGF0IGFuc3dlcnNcbiAqIGBmYWxzZWAgZm9yIGV2ZXJ5IGZvbGRlci5cbiAqXG4gKiBUaGUgcmVnaXN0cnkgaXMgbG9va2VkIHVwIG9uY2UsIHdoZW4gdGhpcyBpcyBjYWxsZWQsIHNvIGEgY2FsbGVyIHdhbGtpbmcgYSBmb2xkZXIncyBhbmNlc3RvcnMgYXNrcyB0aGUgc2FtZVxuICogQVBJIGFsbCB0aGUgd2F5IHVwLlxuICpcbiAqIEBwYXJhbSBfYXBwIC0gQW4gT2JzaWRpYW4gYXBwbGljYXRpb24gaW5zdGFuY2UuIFVudXNlZCBzaW5jZSB0aGUgYW5zd2VyIGNvbWVzIGZyb20gdGhlIHBsdWdpbiBBUEkgcmVnaXN0cnk7XG4gKiAgIGtlcHQgc28gZXhpc3RpbmcgY2FsbGVycyBjb21waWxlIHVuY2hhbmdlZC5cbiAqIEByZXR1cm5zIFRoZSBkZXNpZ25hdGlvbiBwcmVkaWNhdGUsIG9yIGB1bmRlZmluZWRgIHdoZW4gbm9ib2R5IHB1Ymxpc2hlZCBvbmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDaGVja0lzQXR0YWNobWVudFVuaXRGb2xkZXJGdW5jdGlvbihfYXBwOiBBcHApOiAoKGZvbGRlclBhdGg6IHN0cmluZykgPT4gYm9vbGVhbikgfCB1bmRlZmluZWQge1xuICBjb25zdCBjdXN0b21BdHRhY2htZW50TG9jYXRpb25BcGkgPSBmaW5kQ3VzdG9tQXR0YWNobWVudExvY2F0aW9uQXBpKCk7XG4gIHJldHVybiBjdXN0b21BdHRhY2htZW50TG9jYXRpb25BcGlcbiAgICA/IChmb2xkZXJQYXRoOiBzdHJpbmcpOiBib29sZWFuID0+IGN1c3RvbUF0dGFjaG1lbnRMb2NhdGlvbkFwaS5pc0F0dGFjaG1lbnRVbml0Rm9sZGVyKHsgZm9sZGVyUGF0aCB9KVxuICAgIDogdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGEgbm90ZSdzIGF0dGFjaG1lbnQgZm9sZGVyIGlzIHNwZWNpZmljIHRvIHRoYXQgbm90ZSByYXRoZXIgdGhhbiBzaGFyZWQgd2l0aCBpdHMgc2libGluZ3MuXG4gKlxuICogVGhlIGFuc3dlciBpcyBkZXJpdmVkIGJ5IGNvbXBhcmluZyB0aGUgbm90ZSdzIGF0dGFjaG1lbnQgZm9sZGVyIHdpdGggdGhlIG9uZSBhIHNhbWUtZm9sZGVyIHNpYmxpbmcgbm90ZVxuICogd291bGQgZ2V0OiB0aGV5IGRpZmZlciBvbmx5IHdoZW4gdGhlIGZvbGRlciBkZXBlbmRzIG9uIHRoZSBub3RlJ3MgTkFNRS4gRXZlcnkgYnVpbHQtaW5cbiAqIGBhdHRhY2htZW50Rm9sZGVyUGF0aGAgbW9kZSBcdTIwMTQgdGhlIHZhdWx0IHJvb3QsIGEgZml4ZWQgZm9sZGVyLCB0aGUgbm90ZSdzIG93biBmb2xkZXIgKGAuL2ApLCBhIHN1YmZvbGRlciBvZlxuICogdGhlIG5vdGUncyBmb2xkZXIgKGAuL3N1YmApIFx1MjAxNCBpcyBzaGFyZWQgYnkgZXZlcnkgbm90ZSBpbiB0aGF0IGZvbGRlciwgc28gaXQgYW5zd2VycyBgZmFsc2VgOyBgdHJ1ZWAgYXJpc2VzXG4gKiBmcm9tIEN1c3RvbSBBdHRhY2htZW50IExvY2F0aW9uJ3MgcmVzb2x2ZXIgZGVyaXZpbmcgdGhlIGZvbGRlciBmcm9tIHRoZSBub3RlJ3MgbmFtZS5cbiAqXG4gKiBUaGlzIGlzIHRoZSBkaXN0aW5jdGlvbiBhIGNhbGxlciBuZWVkcyBiZWZvcmUgc3dlZXBpbmcgYW4gYXR0YWNobWVudCBmb2xkZXIgd2hvbGVzYWxlOiBvbmx5IGFcbiAqIG5vdGUtc3BlY2lmaWMgZm9sZGVyIGNhbiBiZSB0cmVhdGVkIGFzIGJlbG9uZ2luZyB0byB0aGUgbm90ZS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gUGFyYW1ldGVycyBmb3IgdGhlIGhhcyBvd24gYXR0YWNobWVudCBmb2xkZXIgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIG5vdGUgaGFzIGl0cyBvd24gYXR0YWNobWVudCBmb2xkZXIuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBoYXNPd25BdHRhY2htZW50Rm9sZGVyKHBhcmFtczogSGFzT3duQXR0YWNobWVudEZvbGRlclBhcmFtcyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCB7XG4gICAgYXBwLFxuICAgIGNvbnRleHQgPSBBdHRhY2htZW50UGF0aENvbnRleHQuVW5rbm93bixcbiAgICBwYXRoXG4gIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGF0dGFjaG1lbnRGb2xkZXJQYXRoID0gYXdhaXQgZ2V0QXR0YWNobWVudEZvbGRlclBhdGgoe1xuICAgIGFwcCxcbiAgICBjb250ZXh0LFxuICAgIG5vdGVQYXRoT3JGaWxlOiBwYXRoXG4gIH0pO1xuICBjb25zdCBkdW1teUF0dGFjaG1lbnRGb2xkZXJQYXRoID0gYXdhaXQgZ2V0QXR0YWNobWVudEZvbGRlclBhdGgoe1xuICAgIGFwcCxcbiAgICBjb250ZXh0LFxuICAgIG5vdGVQYXRoT3JGaWxlOiBqb2luKGRpcm5hbWUocGF0aCksIGAke0RVTU1ZX1BBVEh9LiR7TUFSS0RPV05fRklMRV9FWFRFTlNJT059YClcbiAgfSk7XG4gIHJldHVybiBhdHRhY2htZW50Rm9sZGVyUGF0aCAhPT0gZHVtbXlBdHRhY2htZW50Rm9sZGVyUGF0aDtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBhbiBhdHRhY2htZW50IGFscmVhZHkgc2l0cyBhdCBpdHMgcHJvcGVyIGF0dGFjaG1lbnQgcGF0aC5cbiAqXG4gKiBSZXR1cm5zIGB0cnVlYCB3aGVuIHRoZSBhdHRhY2htZW50J3MgY3VycmVudCBwYXRoIGlzLCB3aXRoaW4gaXRzIHByb3BlciBhdHRhY2htZW50IGZvbGRlciwgZWl0aGVyIHRoZSBwcm9wZXJcbiAqIGJhc2UgbmFtZSBvciB0aGUgcHJvcGVyIGJhc2UgbmFtZSBwbHVzIGFuIE9ic2lkaWFuIGRlZHVwbGljYXRpb24gc3VmZml4IChhIHNwYWNlIGZvbGxvd2VkIGJ5IGRpZ2l0cywgZS5nLlxuICogYGltZyAxYCkgd2l0aCB0aGUgc2FtZSBleHRlbnNpb24uIFRoZSBwcm9wZXIgcGF0aCBpcyBjb21wdXRlZCB2aWEge0BsaW5rIGdldEF0dGFjaG1lbnRGaWxlUGF0aH0gd2l0aFxuICoge0BsaW5rIEdldEF0dGFjaG1lbnRGaWxlUGF0aFBhcmFtcy5zaG91bGRTa2lwRHVwbGljYXRlQ2hlY2t9IHNldCB0byBgdHJ1ZWAgKHRoZSB0YXJnZXQgYmVmb3JlIGFueVxuICogZGVkdXBsaWNhdGlvbiBzdWZmaXgpLCBhbmQgdGhlIGNvbXBhcmlzb24gcmVzcGVjdHMgdGhlIGZpbGUgc3lzdGVtIGNhc2Utc2Vuc2l0aXZpdHkgZmxhZ1xuICogKGBnZXREYXRhQWRhcHRlckV4KGFwcCkuaW5zZW5zaXRpdmVgKSB0aGF0IGBnZXRTYWZlUmVuYW1lUGF0aGAgdXNlcy5cbiAqXG4gKiBUaGlzIGxldHMgYSBjYWxsZXIgcmVjb2duaXplIGEgZGVkdXBsaWNhdGlvbi1wYXJrZWQgYXR0YWNobWVudCBhcyBhbHJlYWR5LWNvbGxlY3RlZCwgc28gYSBcIm5lZWRzIG1vdmU/XCJcbiAqIGRlY2lzaW9uIG1hZGUgYWdhaW5zdCB0aGUgZGVkdXBsaWNhdGlvbi1mcmVlIHByb3BlciBwYXRoIGNvbnZlcmdlcyBpbnN0ZWFkIG9mIHJlLXNjaGVkdWxpbmcgdGhlIGZpbGUgZm9yZXZlci5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gUGFyYW1ldGVycyBmb3IgdGhlIGlzIGF0IHByb3BlciBhdHRhY2htZW50IHBhdGggZnVuY3Rpb24uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIGB0cnVlYCB3aGVuIHRoZSBhdHRhY2htZW50IGlzIGFscmVhZHkgYXQgaXRzIHByb3BlciBwYXRoLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaXNBdFByb3BlckF0dGFjaG1lbnRQYXRoKHBhcmFtczogSXNBdFByb3BlckF0dGFjaG1lbnRQYXRoUGFyYW1zKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnN0IHtcbiAgICBhcHAsXG4gICAgYXR0YWNobWVudFBhdGhPckZpbGUsXG4gICAgY29udGV4dCA9IEF0dGFjaG1lbnRQYXRoQ29udGV4dC5Vbmtub3duLFxuICAgIG5vdGVQYXRoT3JGaWxlXG4gIH0gPSBwYXJhbXM7XG5cbiAgY29uc3QgY3VycmVudFBhdGggPSBnZXRQYXRoKGFwcCwgYXR0YWNobWVudFBhdGhPckZpbGUpO1xuICBjb25zdCBwcm9wZXJQYXRoID0gYXdhaXQgZ2V0QXR0YWNobWVudEZpbGVQYXRoKHtcbiAgICBhcHAsXG4gICAgY29udGV4dCxcbiAgICBub3RlUGF0aE9yRmlsZSxcbiAgICBvbGRBdHRhY2htZW50UGF0aE9yRmlsZTogYXR0YWNobWVudFBhdGhPckZpbGUsXG4gICAgc2hvdWxkU2tpcER1cGxpY2F0ZUNoZWNrOiB0cnVlXG4gIH0pO1xuXG4gIGNvbnN0IGlzSW5zZW5zaXRpdmUgPSBnZXREYXRhQWRhcHRlckV4KGFwcCkuaW5zZW5zaXRpdmU7XG5cbiAgZnVuY3Rpb24gZm9sZCh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gaXNJbnNlbnNpdGl2ZSA/IHZhbHVlLnRvTG93ZXJDYXNlKCkgOiB2YWx1ZTtcbiAgfVxuXG4gIGlmIChmb2xkKGRpcm5hbWUoY3VycmVudFBhdGgpKSAhPT0gZm9sZChkaXJuYW1lKHByb3BlclBhdGgpKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IGN1cnJlbnRFeHRlbnNpb24gPSBleHRuYW1lKGN1cnJlbnRQYXRoKTtcbiAgY29uc3QgcHJvcGVyRXh0ZW5zaW9uID0gZXh0bmFtZShwcm9wZXJQYXRoKTtcbiAgaWYgKGZvbGQoY3VycmVudEV4dGVuc2lvbikgIT09IGZvbGQocHJvcGVyRXh0ZW5zaW9uKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IGN1cnJlbnRCYXNlTmFtZSA9IGJhc2VuYW1lKGN1cnJlbnRQYXRoLCBjdXJyZW50RXh0ZW5zaW9uKTtcbiAgY29uc3QgcHJvcGVyQmFzZU5hbWUgPSBiYXNlbmFtZShwcm9wZXJQYXRoLCBwcm9wZXJFeHRlbnNpb24pO1xuXG4gIGlmIChmb2xkKGN1cnJlbnRCYXNlTmFtZSkgPT09IGZvbGQocHJvcGVyQmFzZU5hbWUpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBjb25zdCBkZWR1cGxpY2F0aW9uUHJlZml4ID0gYCR7cHJvcGVyQmFzZU5hbWV9IGA7XG4gIGlmICghZm9sZChjdXJyZW50QmFzZU5hbWUpLnN0YXJ0c1dpdGgoZm9sZChkZWR1cGxpY2F0aW9uUHJlZml4KSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBkZWR1cGxpY2F0aW9uU3VmZml4ID0gY3VycmVudEJhc2VOYW1lLnNsaWNlKGRlZHVwbGljYXRpb25QcmVmaXgubGVuZ3RoKTtcbiAgcmV0dXJuIC9eXFxkKyQvLnRlc3QoZGVkdXBsaWNhdGlvblN1ZmZpeCk7XG59XG5cbi8qKlxuICogRmluZHMgQ3VzdG9tIEF0dGFjaG1lbnQgTG9jYXRpb24ncyBhdHRhY2htZW50LXBhdGggQVBJIGluIHRoZSBwbHVnaW4gQVBJIHJlZ2lzdHJ5LiBJdHMgcHJlc2VuY2UgaXMgdGhlXG4gKiBzeW5jaHJvbm91cyBwcm9iZSBmb3IgXCJzb21lYm9keSBlbHNlIG93bnMgdGhlIHJlc29sdXRpb25cIi5cbiAqXG4gKiBAcmV0dXJucyBUaGUgQVBJLCBvciBgbnVsbGAgd2hlbiB0aGF0IHBsdWdpbiBwdWJsaXNoZXMgbm8gcmVjb3JkIHNhdGlzZnlpbmcgdGhlIHJhbmdlIGFuZCBjb250cmFjdC5cbiAqL1xuZnVuY3Rpb24gZmluZEN1c3RvbUF0dGFjaG1lbnRMb2NhdGlvbkFwaSgpOiBDdXN0b21BdHRhY2htZW50TG9jYXRpb25BdHRhY2htZW50UGF0aEFwaSB8IG51bGwge1xuICByZXR1cm4gZmluZFBsdWdpbkFwaTxDdXN0b21BdHRhY2htZW50TG9jYXRpb25BdHRhY2htZW50UGF0aEFwaT4oe1xuICAgIGFwaVZlcnNpb25SYW5nZTogQ1VTVE9NX0FUVEFDSE1FTlRfTE9DQVRJT05fQVRUQUNITUVOVF9QQVRIX0FQSV9WRVJTSU9OX1JBTkdFLFxuICAgIGNvbnRyYWN0OiBDVVNUT01fQVRUQUNITUVOVF9MT0NBVElPTl9BVFRBQ0hNRU5UX1BBVEhfQVBJX0NPTlRSQUNULFxuICAgIHBsdWdpbklkOiBDVVNUT01fQVRUQUNITUVOVF9MT0NBVElPTl9QTFVHSU5fSURcbiAgfSk7XG59XG5cbi8qKlxuICogVGhlIHN5bmNocm9ub3VzIGNvcmUgb2Yge0BsaW5rIGdldEF0dGFjaG1lbnRGaWxlUGF0aH0sIHJlYWNoZWQgd2hlbiBDdXN0b20gQXR0YWNobWVudCBMb2NhdGlvbiBwdWJsaXNoZXMgbm9cbiAqIGF0dGFjaG1lbnQtcGF0aCBBUEkuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFBhcmFtZXRlcnMgZm9yIHRoZSBnZXQgYXR0YWNobWVudCBmaWxlIHBhdGggc3luYyBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIFRoZSBmaWxlIHBhdGggb2YgdGhlIGF0dGFjaG1lbnQuXG4gKi9cbmZ1bmN0aW9uIGdldEF0dGFjaG1lbnRGaWxlUGF0aFN5bmMocGFyYW1zOiBHZXRBdHRhY2htZW50RmlsZVBhdGhTeW5jUGFyYW1zKTogc3RyaW5nIHtcbiAgY29uc3Qge1xuICAgIGFwcCxcbiAgICBub3RlUGF0aE9yRmlsZSxcbiAgICBvbGRBdHRhY2htZW50UGF0aE9yRmlsZSxcbiAgICBzaG91bGRTa2lwRHVwbGljYXRlQ2hlY2tcbiAgfSA9IHBhcmFtcztcbiAgY29uc3QgYXR0YWNobWVudFBhdGggPSBnZXRQYXRoKGFwcCwgb2xkQXR0YWNobWVudFBhdGhPckZpbGUpO1xuICBjb25zdCBhdHRhY2htZW50RmlsZUV4dGVuc2lvbiA9IGV4dG5hbWUoYXR0YWNobWVudFBhdGgpO1xuXG4gIHJldHVybiBnZXRBdmFpbGFibGVQYXRoRm9yQXR0YWNobWVudHNTeW5jKHtcbiAgICBhcHAsXG4gICAgYXR0YWNobWVudEZpbGVCYXNlTmFtZTogYmFzZW5hbWUoYXR0YWNobWVudFBhdGgsIGF0dGFjaG1lbnRGaWxlRXh0ZW5zaW9uKSxcbiAgICBhdHRhY2htZW50RmlsZUV4dGVuc2lvbjogYXR0YWNobWVudEZpbGVFeHRlbnNpb24uc2xpY2UoMSksXG4gICAgbm90ZVBhdGhPckZpbGUsXG4gICAgc2hvdWxkU2tpcER1cGxpY2F0ZUNoZWNrXG4gIH0pO1xufVxuXG4vKipcbiAqIFRoZSBzeW5jaHJvbm91cyBjb3JlIG9mIHtAbGluayBnZXRBdmFpbGFibGVQYXRoRm9yQXR0YWNobWVudHN9LCB3aGljaCBjYW5ub3QgY3JlYXRlIGEgbWlzc2luZyBhdHRhY2htZW50XG4gKiBmb2xkZXIuIEl0cyBjYWxsZXIgY3JlYXRlcyB0aGUgZm9sZGVyIGZpcnN0IHdoZW4gdGhhdCBpcyB3YW50ZWQuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFBhcmFtZXRlcnMgZm9yIHRoZSBnZXQgYXZhaWxhYmxlIHBhdGggZm9yIGF0dGFjaG1lbnRzIHN5bmMgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyBUaGUgYXZhaWxhYmxlIHBhdGggZm9yIGF0dGFjaG1lbnRzLlxuICovXG5mdW5jdGlvbiBnZXRBdmFpbGFibGVQYXRoRm9yQXR0YWNobWVudHNTeW5jKHBhcmFtczogR2V0QXZhaWxhYmxlUGF0aEZvckF0dGFjaG1lbnRzU3luY1BhcmFtcyk6IHN0cmluZyB7XG4gIGNvbnN0IHtcbiAgICBhcHAsXG4gICAgYXR0YWNobWVudEZpbGVFeHRlbnNpb24sXG4gICAgbm90ZVBhdGhPckZpbGUsXG4gICAgc2hvdWxkU2tpcER1cGxpY2F0ZUNoZWNrXG4gIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGF0dGFjaG1lbnRGb2xkZXIgPSByZXNvbHZlQXR0YWNobWVudEZvbGRlcih7IGFwcCwgbm90ZVBhdGhPckZpbGUgfSk7XG4gIGNvbnN0IGF0dGFjaG1lbnRGaWxlQmFzZU5hbWUgPSBub3JtYWxpemVTdHJpbmcobm9ybWFsaXplU2xhc2hlcyhwYXJhbXMuYXR0YWNobWVudEZpbGVCYXNlTmFtZSkpO1xuXG4gIC8vIEEgZm9sZGVyIHRoYXQgZG9lcyBub3QgZXhpc3QgeWV0IHN0aWxsIG93bnMgdGhlIGF0dGFjaG1lbnQgcGF0aC5cbiAgLy8gUmVzb2x2aW5nIGl0IGFzIGEgbm9uLWV4aXN0aW5nIGZvbGRlciBzdG9wcyB0aGUgYW5zd2VyIGZyb20gY29sbGFwc2luZyB0byB0aGUgdmF1bHQgcm9vdC5cbiAgY29uc3QgZm9sZGVyID0gYXR0YWNobWVudEZvbGRlci5mb2xkZXIgPz8gZ2V0Rm9sZGVyKHsgYXBwLCBwYXRoT3JGb2xkZXI6IGF0dGFjaG1lbnRGb2xkZXIucGF0aCwgc2hvdWxkSW5jbHVkZU5vbkV4aXN0aW5nOiB0cnVlIH0pO1xuXG4gIGNvbnN0IHByZWZpeCA9IGZvbGRlci5nZXRQYXJlbnRQcmVmaXgoKTtcbiAgcmV0dXJuIHNob3VsZFNraXBEdXBsaWNhdGVDaGVja1xuICAgID8gbWFrZUZpbGVOYW1lKHtcbiAgICAgIGZpbGVCYXNlTmFtZTogcHJlZml4ICsgYXR0YWNobWVudEZpbGVCYXNlTmFtZSxcbiAgICAgIGZpbGVFeHRlbnNpb246IGF0dGFjaG1lbnRGaWxlRXh0ZW5zaW9uXG4gICAgfSlcbiAgICA6IGFwcC52YXVsdC5nZXRBdmFpbGFibGVQYXRoKHByZWZpeCArIGF0dGFjaG1lbnRGaWxlQmFzZU5hbWUsIGF0dGFjaG1lbnRGaWxlRXh0ZW5zaW9uKTtcbn1cblxuZnVuY3Rpb24gaXNCb29sZWFuKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgYm9vbGVhbiB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJztcbn1cblxuZnVuY3Rpb24gaXNDdXN0b21BdHRhY2htZW50TG9jYXRpb25Jc0F0dGFjaG1lbnRVbml0Rm9sZGVyUGFyYW1zKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgQ3VzdG9tQXR0YWNobWVudExvY2F0aW9uSXNBdHRhY2htZW50VW5pdEZvbGRlclBhcmFtcyB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiBSZWZsZWN0LmdldCh2YWx1ZSwgJ2ZvbGRlclBhdGgnKSA9PT0gJ3N0cmluZyc7XG59XG5cbmZ1bmN0aW9uIGlzR2V0QXZhaWxhYmxlUGF0aEZvckF0dGFjaG1lbnRzRXh0ZW5kZWRGdW5jdGlvblBhcmFtcyh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIEdldEF2YWlsYWJsZVBhdGhGb3JBdHRhY2htZW50c0V4dGVuZGVkRnVuY3Rpb25QYXJhbXMge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyB8fCB2YWx1ZSA9PT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYWQoa2V5OiBrZXlvZiBHZXRBdmFpbGFibGVQYXRoRm9yQXR0YWNobWVudHNFeHRlbmRlZEZ1bmN0aW9uUGFyYW1zKTogdW5rbm93biB7XG4gICAgcmV0dXJuIFJlZmxlY3QuZ2V0KHZhbHVlIGFzIG9iamVjdCwga2V5KTtcbiAgfVxuXG4gIGNvbnN0IGF0dGFjaG1lbnRGaWxlU3RhdHMgPSByZWFkKCdhdHRhY2htZW50RmlsZVN0YXRzJyk7XG4gIGNvbnN0IGNvbnRleHQgPSByZWFkKCdjb250ZXh0Jyk7XG4gIGNvbnN0IG5vdGVQYXRoT3JGaWxlID0gcmVhZCgnbm90ZVBhdGhPckZpbGUnKTtcbiAgY29uc3Qgb2xkTm90ZVBhdGhPckZpbGUgPSByZWFkKCdvbGROb3RlUGF0aE9yRmlsZScpO1xuICBjb25zdCByZWFkQXR0YWNobWVudEZpbGVDb250ZW50ID0gcmVhZCgncmVhZEF0dGFjaG1lbnRGaWxlQ29udGVudCcpO1xuICByZXR1cm4gdHlwZW9mIHJlYWQoJ2F0dGFjaG1lbnRGaWxlQmFzZU5hbWUnKSA9PT0gJ3N0cmluZydcbiAgICAmJiB0eXBlb2YgcmVhZCgnYXR0YWNobWVudEZpbGVFeHRlbnNpb24nKSA9PT0gJ3N0cmluZydcbiAgICAmJiAoYXR0YWNobWVudEZpbGVTdGF0cyA9PT0gdW5kZWZpbmVkIHx8ICh0eXBlb2YgYXR0YWNobWVudEZpbGVTdGF0cyA9PT0gJ29iamVjdCcgJiYgYXR0YWNobWVudEZpbGVTdGF0cyAhPT0gbnVsbCkpXG4gICAgJiYgT2JqZWN0LnZhbHVlcyhBdHRhY2htZW50UGF0aENvbnRleHQpLmluY2x1ZGVzKGNvbnRleHQpXG4gICAgJiYgKG5vdGVQYXRoT3JGaWxlID09PSBudWxsIHx8IGlzUGF0aE9yRmlsZShub3RlUGF0aE9yRmlsZSkpXG4gICAgJiYgaXNQYXRoT3JGaWxlKHJlYWQoJ29sZEF0dGFjaG1lbnRQYXRoT3JGaWxlJykpXG4gICAgJiYgKG9sZE5vdGVQYXRoT3JGaWxlID09PSB1bmRlZmluZWQgfHwgaXNQYXRoT3JGaWxlKG9sZE5vdGVQYXRoT3JGaWxlKSlcbiAgICAmJiAocmVhZEF0dGFjaG1lbnRGaWxlQ29udGVudCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVhZEF0dGFjaG1lbnRGaWxlQ29udGVudCA9PT0gJ2Z1bmN0aW9uJylcbiAgICAmJiBpc09wdGlvbmFsQm9vbGVhbihyZWFkKCdzaG91bGRTa2lwRHVwbGljYXRlQ2hlY2snKSlcbiAgICAmJiBpc09wdGlvbmFsQm9vbGVhbihyZWFkKCdzaG91bGRTa2lwR2VuZXJhdGVkQXR0YWNobWVudEZpbGVOYW1lJykpXG4gICAgJiYgaXNPcHRpb25hbEJvb2xlYW4ocmVhZCgnc2hvdWxkU2tpcE1pc3NpbmdBdHRhY2htZW50Rm9sZGVyQ3JlYXRpb24nKSk7XG59XG5mdW5jdGlvbiBpc09wdGlvbmFsQm9vbGVhbih2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCB8fCBpc0Jvb2xlYW4odmFsdWUpO1xufVxuXG5mdW5jdGlvbiBpc1N0cmluZyh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIHN0cmluZyB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnO1xufVxuXG4vKipcbiAqIE5vcm1hbGl6ZXMgYSBwYXRoIGJ5IGNvbWJpbmluZyBtdWx0aXBsZSBzbGFzaGVzIGludG8gYSBzaW5nbGUgc2xhc2ggYW5kIHJlbW92aW5nIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNsYXNoZXMuXG4gKlxuICogQHBhcmFtIHBhdGggLSBQYXRoIHRvIG5vcm1hbGl6ZS5cbiAqIEByZXR1cm5zIFRoZSBub3JtYWxpemVkIHBhdGguXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZVNsYXNoZXMocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcGF0aCA9IHJlcGxhY2VBbGwoe1xuICAgICRzdHJpbmc6IHBhdGgsXG4gICAgcmVwbGFjZXI6ICcvJyxcbiAgICBzZWFyY2hWYWx1ZTogLyg/OltcXFxcL10pKy9nXG4gIH0pO1xuICBwYXRoID0gcmVwbGFjZUFsbCh7XG4gICAgJHN0cmluZzogcGF0aCxcbiAgICByZXBsYWNlcjogJycsXG4gICAgc2VhcmNoVmFsdWU6IC9eXFwvK3xcXC8rJC9nXG4gIH0pO1xuICByZXR1cm4gcGF0aCB8fCAnLyc7XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgdGhlIGBhdHRhY2htZW50Rm9sZGVyUGF0aGAgc2V0dGluZyBhZ2FpbnN0IGEgbm90ZSBpbnRvIGEgY29uY3JldGUgYXR0YWNobWVudCBmb2xkZXIuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFBhcmFtZXRlcnMgZm9yIHRoZSByZXNvbHZlIGF0dGFjaG1lbnQgZm9sZGVyIGZ1bmN0aW9uLlxuICogQHJldHVybnMgVGhlIHJlc29sdmVkIGF0dGFjaG1lbnQgZm9sZGVyLlxuICovXG5mdW5jdGlvbiByZXNvbHZlQXR0YWNobWVudEZvbGRlcihwYXJhbXM6IFJlc29sdmVBdHRhY2htZW50Rm9sZGVyUGFyYW1zKTogUmVzb2x2ZUF0dGFjaG1lbnRGb2xkZXJSZXN1bHQge1xuICBjb25zdCB7XG4gICAgYXBwLFxuICAgIG5vdGVQYXRoT3JGaWxlXG4gIH0gPSBwYXJhbXM7XG4gIGxldCBhdHRhY2htZW50Rm9sZGVyUGF0aCA9IGFwcC52YXVsdC5nZXRDb25maWcoJ2F0dGFjaG1lbnRGb2xkZXJQYXRoJykgYXMgc3RyaW5nO1xuICBjb25zdCBpc0N1cnJlbnRGb2xkZXIgPSBhdHRhY2htZW50Rm9sZGVyUGF0aCA9PT0gJy4nIHx8IGF0dGFjaG1lbnRGb2xkZXJQYXRoID09PSAnLi8nO1xuICBjb25zdCByZWxhdGl2ZVBhdGggPSBhdHRhY2htZW50Rm9sZGVyUGF0aC5zdGFydHNXaXRoKCcuLycpXG4gICAgPyB0cmltU3RhcnQoe1xuICAgICAgJHN0cmluZzogYXR0YWNobWVudEZvbGRlclBhdGgsXG4gICAgICBwcmVmaXg6ICcuLydcbiAgICB9KVxuICAgIDogbnVsbDtcblxuICAvLyBBIG5vdGUgdGhhdCBkb2VzIG5vdCBleGlzdCB5ZXQgKGEgcmVuYW1lIHRhcmdldCwgYSBkdW1teSBzaWJsaW5nKSBzdGlsbCBiZWxvbmdzIHRvIGl0cyBvd24gZm9sZGVyLlxuICAvLyBNYXRlcmlhbGl6aW5nIGl0IGZyb20gaXRzIHBhdGgga2VlcHMgdGhhdCBmb2xkZXIsIHdoZXJlIGEgdmF1bHQgbG9va3VwIHdvdWxkIGZhbGwgYmFjayB0byB0aGUgcm9vdC5cbiAgLy8gT25seSBhbiBleHBsaWNpdGx5IG5vdGUtbGVzcyBhdHRhY2htZW50IHJlc29sdmVzIHRvIHRoZSB2YXVsdCByb290LlxuICBjb25zdCBub3RlRmlsZU9yTnVsbCA9IG5vdGVQYXRoT3JGaWxlID09PSBudWxsXG4gICAgPyBudWxsXG4gICAgOiBnZXRGaWxlKHtcbiAgICAgIGFwcCxcbiAgICAgIHBhdGhPckZpbGU6IG5vdGVQYXRoT3JGaWxlLFxuICAgICAgc2hvdWxkSW5jbHVkZU5vbkV4aXN0aW5nOiB0cnVlXG4gICAgfSk7XG5cbiAgaWYgKGlzQ3VycmVudEZvbGRlcikge1xuICAgIGF0dGFjaG1lbnRGb2xkZXJQYXRoID0gbm90ZUZpbGVPck51bGwgPyBub3RlRmlsZU9yTnVsbC5wYXJlbnQ/LnBhdGggPz8gJycgOiAnJztcbiAgfSBlbHNlIGlmIChyZWxhdGl2ZVBhdGgpIHtcbiAgICBhdHRhY2htZW50Rm9sZGVyUGF0aCA9IChub3RlRmlsZU9yTnVsbCA/IG5vdGVGaWxlT3JOdWxsLnBhcmVudD8uZ2V0UGFyZW50UHJlZml4KCkgPz8gJycgOiAnJykgKyByZWxhdGl2ZVBhdGg7XG4gIH1cblxuICBhdHRhY2htZW50Rm9sZGVyUGF0aCA9IG5vcm1hbGl6ZVN0cmluZyhub3JtYWxpemVTbGFzaGVzKGF0dGFjaG1lbnRGb2xkZXJQYXRoKSk7XG5cbiAgcmV0dXJuIHtcbiAgICBmb2xkZXI6IGdldEZvbGRlck9yTnVsbCh7IGFwcCwgaXNDYXNlSW5zZW5zaXRpdmU6IHRydWUsIHBhdGhPckZvbGRlcjogYXR0YWNobWVudEZvbGRlclBhdGggfSksXG4gICAgcGF0aDogYXR0YWNobWVudEZvbGRlclBhdGgsXG4gICAgcmVsYXRpdmVQYXRoXG4gIH07XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVlBO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1A7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1A7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFLUDtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1A7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLHFCQUFxQjtBQUt2QixJQUFLLHdCQUFMLGtCQUFLQSwyQkFBTDtBQUlMLEVBQUFBLHVCQUFBLGdCQUFhO0FBS2IsRUFBQUEsdUJBQUEsZ0JBQWE7QUFLYixFQUFBQSx1QkFBQSxhQUFVO0FBZEEsU0FBQUE7QUFBQSxHQUFBO0FBd0hMLE1BQU0sdUNBQXVDO0FBTXBELE1BQU0sK0RBQStEO0FBTXJFLE1BQU0sMERBQXdIO0FBQUEsRUFDNUgsZ0NBQWdDO0FBQUEsSUFDOUIsT0FB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
|
|
@@ -14,19 +14,18 @@
|
|
|
14
14
|
* attachments over the same vault. If they each decided separately what one attachment is, a user
|
|
15
15
|
* with both installed would get a folder kept whole by one and torn apart by the other.
|
|
16
16
|
*
|
|
17
|
-
* Which is why the designation itself is read from
|
|
18
|
-
* {@link App} and {@link findAttachmentUnitFolderPath} walks with whatever
|
|
19
|
-
*
|
|
20
|
-
* one answer. The explicit-predicate form remains for a caller that genuinely owns its own patterns.
|
|
17
|
+
* Which is why the designation itself is read from one shared source rather than supplied per caller: pass
|
|
18
|
+
* an {@link App} and {@link findAttachmentUnitFolderPath} walks with whatever Custom Attachment Location
|
|
19
|
+
* publishes through its plugin API, so every plugin decides from one answer. The explicit-predicate form remains for a caller that genuinely owns its own patterns.
|
|
21
20
|
*/
|
|
22
21
|
import type { App } from 'obsidian';
|
|
23
22
|
/**
|
|
24
|
-
* Parameters for {@link findAttachmentUnitFolderPath}, reading the designation
|
|
23
|
+
* Parameters for {@link findAttachmentUnitFolderPath}, reading the designation Custom Attachment Location
|
|
24
|
+
* publishes through its plugin API.
|
|
25
25
|
*/
|
|
26
26
|
export interface FindAttachmentUnitFolderPathFromAppParams {
|
|
27
27
|
/**
|
|
28
|
-
* An Obsidian application instance
|
|
29
|
-
* designation.
|
|
28
|
+
* An Obsidian application instance.
|
|
30
29
|
*/
|
|
31
30
|
readonly app: App;
|
|
32
31
|
/**
|
|
@@ -84,8 +83,8 @@ export interface RebasePathOntoFolderParams {
|
|
|
84
83
|
* The vault root is never a unit, however the patterns are written: designating it would make every
|
|
85
84
|
* relocation a no-op at best and a vault-wide move at worst.
|
|
86
85
|
*
|
|
87
|
-
* Passing an {@link App} walks with the designation
|
|
88
|
-
* when nobody published one, nothing is designated and the answer is `null`.
|
|
86
|
+
* Passing an {@link App} walks with the designation Custom Attachment Location publishes through its plugin
|
|
87
|
+
* API; when nobody published one, nothing is designated and the answer is `null`.
|
|
89
88
|
*
|
|
90
89
|
* @param params - The parameters for finding the attachment unit folder.
|
|
91
90
|
* @returns The unit folder's path, or `null` when the attachment belongs to no unit.
|
|
@@ -67,4 +67,4 @@ export {
|
|
|
67
67
|
findAttachmentUnitFolderPath,
|
|
68
68
|
rebasePathOntoFolder
|
|
69
69
|
};
|
|
70
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
70
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2F0dGFjaG1lbnQtdW5pdC1mb2xkZXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBSZXNvbHZlcyB3aGljaCBmb2xkZXIgYW4gYXR0YWNobWVudCBiZWxvbmdzIHRvIHdoZW4gdGhlIHVzZXIgaGFzIGRlc2lnbmF0ZWQgZm9sZGVycyB0aGF0IG11c3RcbiAqIHRyYXZlbCBhcyBhIHNpbmdsZSB1bml0LlxuICpcbiAqIFNvbWUgZm9ybWF0cyBhcmUgcmVhbGx5IGEgZGlyZWN0b3J5IHRyZWUgcmF0aGVyIHRoYW4gYSBmaWxlOiBhIHBhZ2Ugc2F2ZWQgZnJvbSBhIGJyb3dzZXIgc2l0cyBuZXh0XG4gKiB0byBhIGBfZmlsZXMvYCBmb2xkZXIgaG9sZGluZyBpdHMgaW1hZ2VzIGFuZCBzdHlsZXNoZWV0cywgYW4gYC5leGNhbGlkcmF3YCBzaXRzIG5leHQgdG8gdGhlIGltYWdlc1xuICogaXQgcmVmZXJlbmNlcy4gUmVsb2NhdGluZyBvbmx5IHRoZSBsaW5rZWQgZmlsZSBsZWF2ZXMgdGhlIHJlc3QgYmVoaW5kIGFuZCB0aGUgYXR0YWNobWVudCBhcnJpdmVzXG4gKiBicm9rZW4uXG4gKlxuICogVGhpcyBsaXZlcyBpbiB0aGUgc2hhcmVkIGxpYnJhcnkgcmF0aGVyIHRoYW4gaW4gb25lIHBsdWdpbiBiZWNhdXNlIG1vcmUgdGhhbiBvbmUgcGx1Z2luIHJlbG9jYXRlc1xuICogYXR0YWNobWVudHMgb3ZlciB0aGUgc2FtZSB2YXVsdC4gSWYgdGhleSBlYWNoIGRlY2lkZWQgc2VwYXJhdGVseSB3aGF0IG9uZSBhdHRhY2htZW50IGlzLCBhIHVzZXJcbiAqIHdpdGggYm90aCBpbnN0YWxsZWQgd291bGQgZ2V0IGEgZm9sZGVyIGtlcHQgd2hvbGUgYnkgb25lIGFuZCB0b3JuIGFwYXJ0IGJ5IHRoZSBvdGhlci5cbiAqXG4gKiBXaGljaCBpcyB3aHkgdGhlIGRlc2lnbmF0aW9uIGl0c2VsZiBpcyByZWFkIGZyb20gb25lIHNoYXJlZCBzb3VyY2UgcmF0aGVyIHRoYW4gc3VwcGxpZWQgcGVyIGNhbGxlcjogcGFzc1xuICogYW4ge0BsaW5rIEFwcH0gYW5kIHtAbGluayBmaW5kQXR0YWNobWVudFVuaXRGb2xkZXJQYXRofSB3YWxrcyB3aXRoIHdoYXRldmVyIEN1c3RvbSBBdHRhY2htZW50IExvY2F0aW9uXG4gKiBwdWJsaXNoZXMgdGhyb3VnaCBpdHMgcGx1Z2luIEFQSSwgc28gZXZlcnkgcGx1Z2luIGRlY2lkZXMgZnJvbSBvbmUgYW5zd2VyLiBUaGUgZXhwbGljaXQtcHJlZGljYXRlIGZvcm0gcmVtYWlucyBmb3IgYSBjYWxsZXIgdGhhdCBnZW51aW5lbHkgb3ducyBpdHMgb3duIHBhdHRlcm5zLlxuICovXG5cbmltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBkaXJuYW1lIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3BhdGgnO1xuXG5pbXBvcnQgeyBnZXRDaGVja0lzQXR0YWNobWVudFVuaXRGb2xkZXJGdW5jdGlvbiB9IGZyb20gJy4vYXR0YWNobWVudC1wYXRoLnRzJztcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgZmluZEF0dGFjaG1lbnRVbml0Rm9sZGVyUGF0aH0sIHJlYWRpbmcgdGhlIGRlc2lnbmF0aW9uIEN1c3RvbSBBdHRhY2htZW50IExvY2F0aW9uXG4gKiBwdWJsaXNoZXMgdGhyb3VnaCBpdHMgcGx1Z2luIEFQSS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaW5kQXR0YWNobWVudFVuaXRGb2xkZXJQYXRoRnJvbUFwcFBhcmFtcyB7XG4gIC8qKlxuICAgKiBBbiBPYnNpZGlhbiBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgdmF1bHQtcmVsYXRpdmUgcGF0aCBvZiB0aGUgYXR0YWNobWVudC5cbiAgICovXG4gIHJlYWRvbmx5IGF0dGFjaG1lbnRQYXRoOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGZpbmRBdHRhY2htZW50VW5pdEZvbGRlclBhdGh9LlxuICpcbiAqIFByZWZlciB7QGxpbmsgRmluZEF0dGFjaG1lbnRVbml0Rm9sZGVyUGF0aEZyb21BcHBQYXJhbXN9IFx1MjAxNCBpdCBpcyB0aGUgZm9ybSB0aGF0IG1ha2VzIGV2ZXJ5IHBsdWdpblxuICogZGVjaWRlIGZyb20gb25lIHB1Ymxpc2hlZCBhbnN3ZXIuXG4gKi9cbmV4cG9ydCB0eXBlIEZpbmRBdHRhY2htZW50VW5pdEZvbGRlclBhdGhQYXJhbXMgPSBGaW5kQXR0YWNobWVudFVuaXRGb2xkZXJQYXRoRnJvbUFwcFBhcmFtcyB8IEZpbmRBdHRhY2htZW50VW5pdEZvbGRlclBhdGhXaXRoUHJlZGljYXRlUGFyYW1zO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBmaW5kQXR0YWNobWVudFVuaXRGb2xkZXJQYXRofSwgd2Fsa2luZyB3aXRoIGEgcHJlZGljYXRlIHRoZSBjYWxsZXIgb3ducy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaW5kQXR0YWNobWVudFVuaXRGb2xkZXJQYXRoV2l0aFByZWRpY2F0ZVBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgdmF1bHQtcmVsYXRpdmUgcGF0aCBvZiB0aGUgYXR0YWNobWVudC5cbiAgICovXG4gIHJlYWRvbmx5IGF0dGFjaG1lbnRQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgYSBmb2xkZXIgcGF0aCBpcyBkZXNpZ25hdGVkIGFzIGFuIGF0dGFjaG1lbnQgdW5pdC5cbiAgICpcbiAgICogQHBhcmFtIGZvbGRlclBhdGggLSBUaGUgdmF1bHQtcmVsYXRpdmUgcGF0aCBvZiB0aGUgZm9sZGVyLlxuICAgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGZvbGRlciBpcyBkZXNpZ25hdGVkIGFzIGFuIGF0dGFjaG1lbnQgdW5pdCwgYGZhbHNlYCBvdGhlcndpc2UuXG4gICAqL1xuICByZWFkb25seSBjaGVja0lzQXR0YWNobWVudFVuaXRGb2xkZXI6IChmb2xkZXJQYXRoOiBzdHJpbmcpID0+IGJvb2xlYW47XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHJlYmFzZVBhdGhPbnRvRm9sZGVyfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWJhc2VQYXRoT250b0ZvbGRlclBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgZm9sZGVyJ3MgbmV3IHBhdGguXG4gICAqL1xuICByZWFkb25seSBuZXdGb2xkZXJQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBmb2xkZXIncyBvbGQgcGF0aC5cbiAgICovXG4gIHJlYWRvbmx5IG9sZEZvbGRlclBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBhdGggdG8gcmViYXNlLlxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aDogc3RyaW5nO1xufVxuXG4vKipcbiAqIEZpbmRzIHRoZSBmb2xkZXIgdGhhdCBhbiBhdHRhY2htZW50IG11c3QgdHJhdmVsIHdpdGguXG4gKlxuICogUmV0dXJucyB0aGUgKipvdXRlcm1vc3QqKiBkZXNpZ25hdGVkIGFuY2VzdG9yLCBub3QgdGhlIG5lYXJlc3Qgb25lLiBXaXRoIG5lc3RlZCBkZXNpZ25hdGlvbnMsXG4gKiBtb3ZpbmcgdGhlIG5lYXJlc3Qgd291bGQgdGVhciB0aGUgb3V0ZXIgdHJlZSBpbiBoYWxmLCB3aGljaCBpcyB0aGUgZmFpbHVyZSB0aGUgd2hvbGUgZmVhdHVyZSBleGlzdHNcbiAqIHRvIHByZXZlbnQuXG4gKlxuICogVGhlIHZhdWx0IHJvb3QgaXMgbmV2ZXIgYSB1bml0LCBob3dldmVyIHRoZSBwYXR0ZXJucyBhcmUgd3JpdHRlbjogZGVzaWduYXRpbmcgaXQgd291bGQgbWFrZSBldmVyeVxuICogcmVsb2NhdGlvbiBhIG5vLW9wIGF0IGJlc3QgYW5kIGEgdmF1bHQtd2lkZSBtb3ZlIGF0IHdvcnN0LlxuICpcbiAqIFBhc3NpbmcgYW4ge0BsaW5rIEFwcH0gd2Fsa3Mgd2l0aCB0aGUgZGVzaWduYXRpb24gQ3VzdG9tIEF0dGFjaG1lbnQgTG9jYXRpb24gcHVibGlzaGVzIHRocm91Z2ggaXRzIHBsdWdpblxuICogQVBJOyB3aGVuIG5vYm9keSBwdWJsaXNoZWQgb25lLCBub3RoaW5nIGlzIGRlc2lnbmF0ZWQgYW5kIHRoZSBhbnN3ZXIgaXMgYG51bGxgLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgZmluZGluZyB0aGUgYXR0YWNobWVudCB1bml0IGZvbGRlci5cbiAqIEByZXR1cm5zIFRoZSB1bml0IGZvbGRlcidzIHBhdGgsIG9yIGBudWxsYCB3aGVuIHRoZSBhdHRhY2htZW50IGJlbG9uZ3MgdG8gbm8gdW5pdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmRBdHRhY2htZW50VW5pdEZvbGRlclBhdGgocGFyYW1zOiBGaW5kQXR0YWNobWVudFVuaXRGb2xkZXJQYXRoUGFyYW1zKTogbnVsbCB8IHN0cmluZyB7XG4gIGNvbnN0IHBhcmVudEZvbGRlclBhdGggPSBkaXJuYW1lKHBhcmFtcy5hdHRhY2htZW50UGF0aCk7XG4gIGlmICghcGFyZW50Rm9sZGVyUGF0aCB8fCBwYXJlbnRGb2xkZXJQYXRoID09PSAnLicgfHwgcGFyZW50Rm9sZGVyUGF0aCA9PT0gJy8nKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBjaGVja0lzQXR0YWNobWVudFVuaXRGb2xkZXIgPSAnY2hlY2tJc0F0dGFjaG1lbnRVbml0Rm9sZGVyJyBpbiBwYXJhbXNcbiAgICA/IHBhcmFtcy5jaGVja0lzQXR0YWNobWVudFVuaXRGb2xkZXJcbiAgICA6IGdldENoZWNrSXNBdHRhY2htZW50VW5pdEZvbGRlckZ1bmN0aW9uKHBhcmFtcy5hcHApO1xuXG4gIGlmICghY2hlY2tJc0F0dGFjaG1lbnRVbml0Rm9sZGVyKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBzZWdtZW50cyA9IHBhcmVudEZvbGRlclBhdGguc3BsaXQoJy8nKS5maWx0ZXIoQm9vbGVhbik7XG4gIGZvciAobGV0IGNvdW50ID0gMTsgY291bnQgPD0gc2VnbWVudHMubGVuZ3RoOyBjb3VudCsrKSB7XG4gICAgY29uc3QgY2FuZGlkYXRlID0gc2VnbWVudHMuc2xpY2UoMCwgY291bnQpLmpvaW4oJy8nKTtcbiAgICBpZiAoY2hlY2tJc0F0dGFjaG1lbnRVbml0Rm9sZGVyKGNhbmRpZGF0ZSkpIHtcbiAgICAgIHJldHVybiBjYW5kaWRhdGU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogUmViYXNlcyBhIHBhdGggZnJvbSBvbmUgZm9sZGVyIG9udG8gYW5vdGhlci5cbiAqXG4gKiBVc2VkIHRvIHdvcmsgb3V0IHdoZXJlIGEgbGlua2VkIGF0dGFjaG1lbnQgZW5kcyB1cCBvbmNlIGl0cyB3aG9sZSB1bml0IGZvbGRlciBoYXMgbW92ZWQsIHNvIHRoZVxuICogbGluayBjYW4gYmUgcG9pbnRlZCBhdCB0aGUgZmlsZSdzIG5ldyBob21lIHJhdGhlciB0aGFuIGF0IHdoZXJlIHRoZSBmb2xkZXIgdXNlZCB0byBiZS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHJlYmFzaW5nIHRoZSBwYXRoLlxuICogQHJldHVybnMgVGhlIHJlYmFzZWQgcGF0aCwgb3IgYG51bGxgIHdoZW4gdGhlIHBhdGggZG9lcyBub3Qgc2l0IGluc2lkZSB0aGUgb2xkIGZvbGRlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlYmFzZVBhdGhPbnRvRm9sZGVyKHBhcmFtczogUmViYXNlUGF0aE9udG9Gb2xkZXJQYXJhbXMpOiBudWxsIHwgc3RyaW5nIHtcbiAgY29uc3QgcHJlZml4ID0gYCR7cGFyYW1zLm9sZEZvbGRlclBhdGh9L2A7XG4gIHJldHVybiBwYXJhbXMucGF0aC5zdGFydHNXaXRoKHByZWZpeCkgPyBgJHtwYXJhbXMubmV3Rm9sZGVyUGF0aH0vJHtwYXJhbXMucGF0aC5zbGljZShwcmVmaXgubGVuZ3RoKX1gIDogbnVsbDtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBc0JBLFNBQVMsZUFBZTtBQUV4QixTQUFTLDhDQUE4QztBQWdGaEQsU0FBUyw2QkFBNkIsUUFBMkQ7QUFDdEcsUUFBTSxtQkFBbUIsUUFBUSxPQUFPLGNBQWM7QUFDdEQsTUFBSSxDQUFDLG9CQUFvQixxQkFBcUIsT0FBTyxxQkFBcUIsS0FBSztBQUM3RSxXQUFPO0FBQUEsRUFDVDtBQUVBLFFBQU0sOEJBQThCLGlDQUFpQyxTQUNqRSxPQUFPLDhCQUNQLHVDQUF1QyxPQUFPLEdBQUc7QUFFckQsTUFBSSxDQUFDLDZCQUE2QjtBQUNoQyxXQUFPO0FBQUEsRUFDVDtBQUVBLFFBQU0sV0FBVyxpQkFBaUIsTUFBTSxHQUFHLEVBQUUsT0FBTyxPQUFPO0FBQzNELFdBQVMsUUFBUSxHQUFHLFNBQVMsU0FBUyxRQUFRLFNBQVM7QUFDckQsVUFBTSxZQUFZLFNBQVMsTUFBTSxHQUFHLEtBQUssRUFBRSxLQUFLLEdBQUc7QUFDbkQsUUFBSSw0QkFBNEIsU0FBUyxHQUFHO0FBQzFDLGFBQU87QUFBQSxJQUNUO0FBQUEsRUFDRjtBQUVBLFNBQU87QUFDVDtBQVdPLFNBQVMscUJBQXFCLFFBQW1EO0FBQ3RGLFFBQU0sU0FBUyxHQUFHLE9BQU8sYUFBYTtBQUN0QyxTQUFPLE9BQU8sS0FBSyxXQUFXLE1BQU0sSUFBSSxHQUFHLE9BQU8sYUFBYSxJQUFJLE9BQU8sS0FBSyxNQUFNLE9BQU8sTUFBTSxDQUFDLEtBQUs7QUFDMUc7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
|
@@ -310,6 +310,9 @@ export declare class PluginNoticeComponent extends ComponentEx {
|
|
|
310
310
|
* Builds the notice content, prefixing the message with the plugin name in a styled element so it is
|
|
311
311
|
* visually distinguished from the message body.
|
|
312
312
|
*
|
|
313
|
+
* The name is rendered as inline code, the way every plugin name in the UI is, inside a span that keeps
|
|
314
|
+
* the prefix's own layout and accent color.
|
|
315
|
+
*
|
|
313
316
|
* @param message - The message to display after the plugin name prefix.
|
|
314
317
|
* @returns A {@link DocumentFragment} with the styled plugin name prefix followed by the message.
|
|
315
318
|
*/
|