obsidian-dev-utils 34.0.1 → 34.0.2-beta.1
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/CHANGELOG.md +6 -0
- package/dist/lib/cjs/AbortController.cjs +3 -2
- package/dist/lib/cjs/AbortController.d.cts +2 -2
- package/dist/lib/cjs/Async.cjs +4 -5
- package/dist/lib/cjs/Library.cjs +1 -1
- package/dist/lib/cjs/obsidian/MarkdownCodeBlockProcessor.cjs +81 -69
- package/dist/lib/cjs/obsidian/MarkdownCodeBlockProcessor.d.cts +17 -5
- package/dist/lib/cjs/obsidian/Queue.cjs +2 -2
- package/dist/lib/esm/AbortController.d.mts +2 -2
- package/dist/lib/esm/AbortController.mjs +3 -2
- package/dist/lib/esm/Async.mjs +4 -5
- package/dist/lib/esm/Library.mjs +1 -1
- package/dist/lib/esm/obsidian/MarkdownCodeBlockProcessor.d.mts +17 -5
- package/dist/lib/esm/obsidian/MarkdownCodeBlockProcessor.mjs +81 -70
- package/dist/lib/esm/obsidian/Queue.mjs +2 -2
- package/package.json +1 -1
|
@@ -6,18 +6,27 @@ if you want to view the source, please visit the github repository of this plugi
|
|
|
6
6
|
(function initEsm(){if(globalThis.process){return}const browserProcess={browser:true,cwd:__name(()=>"/","cwd"),env:{},platform:"android"};globalThis.process=browserProcess})();
|
|
7
7
|
|
|
8
8
|
import { getFrontMatterInfo } from "obsidian";
|
|
9
|
-
import {
|
|
9
|
+
import { abortSignalAny } from "../AbortController.mjs";
|
|
10
10
|
import {
|
|
11
11
|
hasSingleOccurrence,
|
|
12
12
|
indent,
|
|
13
|
-
replaceAll,
|
|
14
13
|
unindent
|
|
15
14
|
} from "../String.mjs";
|
|
16
15
|
import { resolveValue } from "../ValueProvider.mjs";
|
|
17
16
|
import { process } from "./Vault.mjs";
|
|
18
|
-
async function
|
|
17
|
+
async function getCodeBlockMarkdownInfo(options) {
|
|
19
18
|
const { app, ctx, el, source } = options;
|
|
20
|
-
const
|
|
19
|
+
const sourceFile = app.vault.getFileByPath(ctx.sourcePath);
|
|
20
|
+
if (!sourceFile) {
|
|
21
|
+
throw new Error(`Source file ${ctx.sourcePath} not found.`);
|
|
22
|
+
}
|
|
23
|
+
const content = options.noteContent ?? await app.vault.cachedRead(sourceFile);
|
|
24
|
+
const approximateSectionInfo = ctx.getSectionInfo(el) ?? createApproximateSectionInfo(app, sourceFile, content);
|
|
25
|
+
if (!hasSingleOccurrence(content, approximateSectionInfo.text)) {
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
const sectionInfoOffset = content.indexOf(approximateSectionInfo.text);
|
|
29
|
+
const linesBeforeSectionCount = content.slice(0, sectionInfoOffset).split("\n").length - 1;
|
|
21
30
|
const isInCallout = !!el.parentElement?.classList.contains("callout-content");
|
|
22
31
|
const language = getLanguageFromElement(el);
|
|
23
32
|
const sourceLines = source.split("\n");
|
|
@@ -26,53 +35,47 @@ async function getCodeBlockSectionInfo(options) {
|
|
|
26
35
|
(line, index) => approximateSectionInfo.lineStart <= index && index <= approximateSectionInfo.lineEnd ? line : ""
|
|
27
36
|
);
|
|
28
37
|
const potentialCodeBlockText = potentialCodeBlockTextLines.join("\n");
|
|
29
|
-
const REG_EXP = /(?<=^|\n)(?<LinePrefix> {0,3}(?:> {1,3})*)(?<CodeBlockStartDelimiter>(?<CodeBlockStartDelimiterChar>[`~])(?:\k<CodeBlockStartDelimiterChar>{2,}))(?<CodeBlockLanguage>\S*)(?:[ \t]+(?<CodeBlockArgs>.*?)[ \t]
|
|
30
|
-
let
|
|
38
|
+
const REG_EXP = /(?<=^|\n)(?<LinePrefix> {0,3}(?:> {1,3})*)(?<CodeBlockStartDelimiter>(?<CodeBlockStartDelimiterChar>[`~])(?:\k<CodeBlockStartDelimiterChar>{2,}))(?<CodeBlockLanguage>\S*)(?:[ \t]+(?<CodeBlockArgs>.*?)[ \t]*?)?(?:\n(?<CodeBlockContent>(?:\n?\k<LinePrefix>.*)+?))?\n\k<LinePrefix>(?<CodeBlockEndDelimiter>\k<CodeBlockStartDelimiter>\k<CodeBlockStartDelimiterChar>*)[ \t]*(?=\n|$)/g;
|
|
39
|
+
let markdownInfo = null;
|
|
31
40
|
for (const match of potentialCodeBlockText.matchAll(REG_EXP)) {
|
|
32
41
|
if (!isSuitableCodeBlock(match, language, source, isInCallout)) {
|
|
33
42
|
continue;
|
|
34
43
|
}
|
|
35
|
-
if (
|
|
44
|
+
if (markdownInfo) {
|
|
36
45
|
return null;
|
|
37
46
|
}
|
|
38
|
-
|
|
47
|
+
markdownInfo = createSectionInfoFromMatch(potentialCodeBlockText, match, approximateSectionInfo, sourceLines, sectionInfoOffset, linesBeforeSectionCount);
|
|
39
48
|
}
|
|
40
|
-
if (!
|
|
49
|
+
if (!markdownInfo) {
|
|
41
50
|
return null;
|
|
42
51
|
}
|
|
43
|
-
return
|
|
52
|
+
return markdownInfo;
|
|
44
53
|
}
|
|
45
54
|
async function insertAfterCodeBlock(options) {
|
|
46
55
|
const { app, ctx, lineOffset = 0, text } = options;
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
if (!
|
|
53
|
-
throw new Error("
|
|
56
|
+
await process(app, ctx.sourcePath, async (_abortSignal, content) => {
|
|
57
|
+
const markdownInfo = await getCodeBlockMarkdownInfo({
|
|
58
|
+
...options,
|
|
59
|
+
noteContent: content
|
|
60
|
+
});
|
|
61
|
+
if (!markdownInfo) {
|
|
62
|
+
throw new Error("Could not uniquely identify the code block.");
|
|
54
63
|
}
|
|
55
|
-
const
|
|
56
|
-
const textBeforeSection = content.slice(0, index);
|
|
57
|
-
const linesBeforeSection = textBeforeSection.split("\n");
|
|
58
|
-
const insertLineIndex = linesBeforeSection.length + sectionInfo.lineEnd + lineOffset;
|
|
64
|
+
const insertLineIndex = markdownInfo.notePos.end.line + lineOffset + 1;
|
|
59
65
|
return insertText(content, insertLineIndex, text, options.shouldPreserveLinePrefix);
|
|
60
66
|
});
|
|
61
67
|
}
|
|
62
68
|
async function insertBeforeCodeBlock(options) {
|
|
63
69
|
const { app, ctx, lineOffset = 0, text } = options;
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
if (!
|
|
70
|
-
throw new Error("
|
|
70
|
+
await process(app, ctx.sourcePath, async (_abortSignal, content) => {
|
|
71
|
+
const markdownInfo = await getCodeBlockMarkdownInfo({
|
|
72
|
+
...options,
|
|
73
|
+
noteContent: content
|
|
74
|
+
});
|
|
75
|
+
if (!markdownInfo) {
|
|
76
|
+
throw new Error("Could not uniquely identify the code block.");
|
|
71
77
|
}
|
|
72
|
-
const
|
|
73
|
-
const textBeforeSection = content.slice(0, index);
|
|
74
|
-
const linesBeforeSection = textBeforeSection.split("\n");
|
|
75
|
-
const insertLineIndex = linesBeforeSection.length + sectionInfo.lineStart - lineOffset - 1;
|
|
78
|
+
const insertLineIndex = markdownInfo.notePos.start.line - lineOffset;
|
|
76
79
|
return insertText(content, insertLineIndex, text, options.shouldPreserveLinePrefix);
|
|
77
80
|
});
|
|
78
81
|
}
|
|
@@ -84,44 +87,37 @@ async function removeCodeBlock(options) {
|
|
|
84
87
|
}
|
|
85
88
|
async function replaceCodeBlock(options) {
|
|
86
89
|
const { app, codeBlockProvider, ctx } = options;
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
const newSectionText = `${appendNewLine(textBeforeCodeBlock)}${appendNewLine(newCodeBlock)}${textAfterCodeBlock}`;
|
|
106
|
-
await process(app, ctx.sourcePath, (_abortSignal, content) => {
|
|
107
|
-
if (!hasSingleOccurrence(content, sectionInfo.text)) {
|
|
108
|
-
throw new Error("Multiple suitable code blocks found.");
|
|
90
|
+
options.abortSignal?.throwIfAborted();
|
|
91
|
+
await process(app, ctx.sourcePath, async (abortSignal, content) => {
|
|
92
|
+
abortSignal = abortSignalAny(abortSignal, options.abortSignal);
|
|
93
|
+
abortSignal.throwIfAborted();
|
|
94
|
+
const markdownInfo = await getCodeBlockMarkdownInfo({
|
|
95
|
+
...options,
|
|
96
|
+
noteContent: content
|
|
97
|
+
});
|
|
98
|
+
if (!markdownInfo) {
|
|
99
|
+
throw new Error("Could not uniquely identify the code block.");
|
|
100
|
+
}
|
|
101
|
+
let oldCodeBlock = content.slice(markdownInfo.notePos.start.offset, markdownInfo.notePos.end.offset);
|
|
102
|
+
if (options.shouldPreserveLinePrefix) {
|
|
103
|
+
oldCodeBlock = unindent(oldCodeBlock, markdownInfo.linePrefix);
|
|
104
|
+
}
|
|
105
|
+
let newCodeBlock = await resolveValue(codeBlockProvider, abortSignal, oldCodeBlock);
|
|
106
|
+
if (newCodeBlock && options.shouldPreserveLinePrefix) {
|
|
107
|
+
newCodeBlock = indent(newCodeBlock, markdownInfo.linePrefix);
|
|
109
108
|
}
|
|
110
|
-
|
|
109
|
+
const textBeforeCodeBlock = content.slice(0, markdownInfo.notePos.start.offset);
|
|
110
|
+
const textAfterCodeBlock = content.slice(markdownInfo.notePos.end.offset);
|
|
111
|
+
return `${appendNewLine(textBeforeCodeBlock)}${appendNewLine(newCodeBlock)}${textAfterCodeBlock}`;
|
|
111
112
|
});
|
|
112
113
|
}
|
|
113
114
|
function appendNewLine(text) {
|
|
114
115
|
return text === "" ? "" : `${text}
|
|
115
116
|
`;
|
|
116
117
|
}
|
|
117
|
-
|
|
118
|
-
const sourceFile = app.vault.getFileByPath(ctx.sourcePath);
|
|
119
|
-
if (!sourceFile) {
|
|
120
|
-
throw new Error(`Source file ${ctx.sourcePath} not found.`);
|
|
121
|
-
}
|
|
118
|
+
function createApproximateSectionInfo(app, sourceFile, content) {
|
|
122
119
|
const cache = app.metadataCache.getFileCache(sourceFile);
|
|
123
120
|
const frontmatterEndOffset = cache?.frontmatterPosition?.end.offset;
|
|
124
|
-
const content = await app.vault.cachedRead(sourceFile);
|
|
125
121
|
const contentStartOffset = frontmatterEndOffset === void 0 ? getFrontMatterInfo(content).contentStart : frontmatterEndOffset + 1;
|
|
126
122
|
const text = content.slice(contentStartOffset);
|
|
127
123
|
return {
|
|
@@ -130,23 +126,38 @@ async function createApproximateSectionInfo(app, ctx) {
|
|
|
130
126
|
text
|
|
131
127
|
};
|
|
132
128
|
}
|
|
133
|
-
function createSectionInfoFromMatch(potentialCodeBlockText, match, approximateSectionInfo, sourceLines) {
|
|
129
|
+
function createSectionInfoFromMatch(potentialCodeBlockText, match, approximateSectionInfo, sourceLines, sectionInfoOffset, linesBeforeSectionCount) {
|
|
134
130
|
const linePrefix = match.groups?.["LinePrefix"] ?? "";
|
|
135
131
|
const codeBlockStartDelimiter = match.groups?.["CodeBlockStartDelimiter"] ?? "";
|
|
136
132
|
const codeBlockEndDelimiter = match.groups?.["CodeBlockEndDelimiter"] ?? "";
|
|
137
133
|
const codeBlockArgs = match.groups?.["CodeBlockArgs"] ?? "";
|
|
138
134
|
const language = match.groups?.["CodeBlockLanguage"] ?? "";
|
|
139
135
|
const previousText = potentialCodeBlockText.slice(0, match.index);
|
|
140
|
-
const
|
|
136
|
+
const previousTextLinesCount = previousText.split("\n").length - 1;
|
|
137
|
+
const matchLastLine = match[0].split("\n").at(-1) ?? "";
|
|
141
138
|
return {
|
|
142
139
|
args: codeBlockArgs,
|
|
143
140
|
endDelimiter: codeBlockEndDelimiter,
|
|
144
141
|
language,
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
142
|
+
linePrefix,
|
|
143
|
+
notePos: {
|
|
144
|
+
end: {
|
|
145
|
+
col: matchLastLine.length,
|
|
146
|
+
line: linesBeforeSectionCount + previousTextLinesCount + sourceLines.length - 1,
|
|
147
|
+
offset: sectionInfoOffset + (match.index ?? 0) + match[0].length
|
|
148
|
+
},
|
|
149
|
+
start: {
|
|
150
|
+
col: 0,
|
|
151
|
+
line: linesBeforeSectionCount + previousTextLinesCount,
|
|
152
|
+
offset: sectionInfoOffset + (match.index ?? 0)
|
|
153
|
+
}
|
|
154
|
+
},
|
|
155
|
+
sectionInfo: {
|
|
156
|
+
lineEnd: previousTextLinesCount + sourceLines.length - 1,
|
|
157
|
+
lineStart: previousTextLinesCount,
|
|
158
|
+
text: approximateSectionInfo.text
|
|
159
|
+
},
|
|
160
|
+
startDelimiter: codeBlockStartDelimiter
|
|
150
161
|
};
|
|
151
162
|
}
|
|
152
163
|
function getLanguageFromElement(el) {
|
|
@@ -183,10 +194,10 @@ function isSuitableCodeBlock(match, language, source, isInCallout) {
|
|
|
183
194
|
return cleanCodeBlockContent === source;
|
|
184
195
|
}
|
|
185
196
|
export {
|
|
186
|
-
|
|
197
|
+
getCodeBlockMarkdownInfo,
|
|
187
198
|
insertAfterCodeBlock,
|
|
188
199
|
insertBeforeCodeBlock,
|
|
189
200
|
removeCodeBlock,
|
|
190
201
|
replaceCodeBlock
|
|
191
202
|
};
|
|
192
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL01hcmtkb3duQ29kZUJsb2NrUHJvY2Vzc29yLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvblxuICpcbiAqIFRoaXMgbW9kdWxlIHByb3ZpZGVzIHV0aWxpdHkgZnVuY3Rpb25zIGZvciBwcm9jZXNzaW5nIGNvZGUgYmxvY2tzIGluIE9ic2lkaWFuLlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgQXBwLFxuICBNYXJrZG93blBvc3RQcm9jZXNzb3JDb250ZXh0LFxuICBNYXJrZG93blNlY3Rpb25JbmZvcm1hdGlvblxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IGdldEZyb250TWF0dGVySW5mbyB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBWYWx1ZVByb3ZpZGVyIH0gZnJvbSAnLi4vVmFsdWVQcm92aWRlci50cyc7XG5cbmltcG9ydCB7IGFib3J0U2lnbmFsTmV2ZXIgfSBmcm9tICcuLi9BYm9ydENvbnRyb2xsZXIudHMnO1xuaW1wb3J0IHtcbiAgaGFzU2luZ2xlT2NjdXJyZW5jZSxcbiAgaW5kZW50LFxuICByZXBsYWNlQWxsLFxuICB1bmluZGVudFxufSBmcm9tICcuLi9TdHJpbmcudHMnO1xuaW1wb3J0IHsgcmVzb2x2ZVZhbHVlIH0gZnJvbSAnLi4vVmFsdWVQcm92aWRlci50cyc7XG5pbXBvcnQgeyBwcm9jZXNzIH0gZnJvbSAnLi9WYXVsdC50cyc7XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgaW5mb3JtYXRpb24gYWJvdXQgYSBjb2RlIGJsb2NrIGluIGEgTWFya2Rvd24gc2VjdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb2RlQmxvY2tNYXJrZG93blNlY3Rpb25JbmZvcm1hdGlvbiBleHRlbmRzIE1hcmtkb3duU2VjdGlvbkluZm9ybWF0aW9uIHtcbiAgLyoqXG4gICAqIFRoZSBhcmd1bWVudHMgb2YgdGhlIGNvZGUgYmxvY2suXG4gICAqL1xuICBhcmdzOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBlbmQgZGVsaW1pdGVyIG9mIHRoZSBjb2RlIGJsb2NrLlxuICAgKi9cbiAgZW5kRGVsaW1pdGVyOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBsYW5ndWFnZSBvZiB0aGUgY29kZSBibG9jay5cbiAgICovXG4gIGxhbmd1YWdlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwcmVmaXggb2YgdGhlIGNvZGUgYmxvY2suXG4gICAqL1xuICBwcmVmaXg6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHN0YXJ0IGRlbGltaXRlciBvZiB0aGUgY29kZSBibG9jay5cbiAgICovXG4gIHN0YXJ0RGVsaW1pdGVyOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgb3B0aW9ucyBmb3IgZ2V0dGluZyB0aGUgaW5mb3JtYXRpb24gYWJvdXQgYSBjb2RlIGJsb2NrIGluIGEgTWFya2Rvd24gc2VjdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZXRDb2RlQmxvY2tTZWN0aW9uSW5mb09wdGlvbnMge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIEFwcCBvYmplY3QuXG4gICAqL1xuICBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIE1hcmtkb3duUG9zdFByb2Nlc3NvckNvbnRleHQgb2JqZWN0LlxuICAgKi9cbiAgY3R4OiBNYXJrZG93blBvc3RQcm9jZXNzb3JDb250ZXh0O1xuXG4gIC8qKlxuICAgKiBUaGUgSFRNTEVsZW1lbnQgcmVwcmVzZW50aW5nIHRoZSBjb2RlIGJsb2NrLlxuICAgKi9cbiAgZWw6IEhUTUxFbGVtZW50O1xuXG4gIC8qKlxuICAgKiBUaGUgc291cmNlIG9mIHRoZSBjb2RlIGJsb2NrLlxuICAgKi9cbiAgc291cmNlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgb3B0aW9ucyBmb3IgaW5zZXJ0aW5nIHRleHQgYWZ0ZXIgYSBjb2RlIGJsb2NrLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEluc2VydENvZGVCbG9ja09wdGlvbnMgZXh0ZW5kcyBHZXRDb2RlQmxvY2tTZWN0aW9uSW5mb09wdGlvbnMge1xuICAvKipcbiAgICogVGhlIG51bWJlciBvZiBsaW5lcyB0byBvZmZzZXQgdGhlIGluc2VydGlvbiBieS4gRGVmYXVsdCBpcyBgMGAuXG4gICAqL1xuICBsaW5lT2Zmc2V0PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHByZXNlcnZlIHRoZSBsaW5lIHByZWZpeCBvZiB0aGUgY29kZSBibG9jay4gRGVmYXVsdCBpcyBgZmFsc2VgLlxuICAgKi9cbiAgc2hvdWxkUHJlc2VydmVMaW5lUHJlZml4PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHRleHQgdG8gaW5zZXJ0IGFmdGVyIHRoZSBjb2RlIGJsb2NrLlxuICAgKi9cbiAgdGV4dDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIG9wdGlvbnMgZm9yIHJlcGxhY2luZyBhIGNvZGUgYmxvY2suXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVwbGFjZUNvZGVCbG9ja09wdGlvbnMgZXh0ZW5kcyBHZXRDb2RlQmxvY2tTZWN0aW9uSW5mb09wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGFib3J0IHNpZ25hbCB0byBjb250cm9sIHRoZSBleGVjdXRpb24gb2YgdGhlIGZ1bmN0aW9uLlxuICAgKi9cbiAgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbDtcblxuICAvKipcbiAgICogVGhlIHByb3ZpZGVyIHRoYXQgcHJvdmlkZXMgdGhlIG5ldyBjb2RlIGJsb2NrLlxuICAgKi9cbiAgY29kZUJsb2NrUHJvdmlkZXI6IFZhbHVlUHJvdmlkZXI8c3RyaW5nLCBbc3RyaW5nXT47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcHJlc2VydmUgdGhlIGxpbmUgcHJlZml4IG9mIHRoZSBjb2RlIGJsb2NrLiBEZWZhdWx0IGlzIGBmYWxzZWAuXG4gICAqL1xuICBzaG91bGRQcmVzZXJ2ZUxpbmVQcmVmaXg/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGluZm9ybWF0aW9uIGFib3V0IGEgY29kZSBibG9jayBpbiBhIE1hcmtkb3duIHNlY3Rpb24uXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgdGhlIGZ1bmN0aW9uLlxuICogQHJldHVybnMgVGhlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjb2RlIGJsb2NrIGluIHRoZSBNYXJrZG93biBzZWN0aW9uLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0Q29kZUJsb2NrU2VjdGlvbkluZm8ob3B0aW9uczogR2V0Q29kZUJsb2NrU2VjdGlvbkluZm9PcHRpb25zKTogUHJvbWlzZTxDb2RlQmxvY2tNYXJrZG93blNlY3Rpb25JbmZvcm1hdGlvbiB8IG51bGw+IHtcbiAgY29uc3QgeyBhcHAsIGN0eCwgZWwsIHNvdXJjZSB9ID0gb3B0aW9ucztcblxuICBjb25zdCBhcHByb3hpbWF0ZVNlY3Rpb25JbmZvID0gY3R4LmdldFNlY3Rpb25JbmZvKGVsKSA/PyBhd2FpdCBjcmVhdGVBcHByb3hpbWF0ZVNlY3Rpb25JbmZvKGFwcCwgY3R4KTtcbiAgY29uc3QgaXNJbkNhbGxvdXQgPSAhIWVsLnBhcmVudEVsZW1lbnQ/LmNsYXNzTGlzdC5jb250YWlucygnY2FsbG91dC1jb250ZW50Jyk7XG5cbiAgY29uc3QgbGFuZ3VhZ2UgPSBnZXRMYW5ndWFnZUZyb21FbGVtZW50KGVsKTtcbiAgY29uc3Qgc291cmNlTGluZXMgPSBzb3VyY2Uuc3BsaXQoJ1xcbicpO1xuXG4gIGNvbnN0IHRleHRMaW5lcyA9IGFwcHJveGltYXRlU2VjdGlvbkluZm8udGV4dC5zcGxpdCgnXFxuJyk7XG4gIGNvbnN0IHBvdGVudGlhbENvZGVCbG9ja1RleHRMaW5lcyA9IHRleHRMaW5lcy5tYXAoKGxpbmUsIGluZGV4KSA9PlxuICAgIGFwcHJveGltYXRlU2VjdGlvbkluZm8ubGluZVN0YXJ0IDw9IGluZGV4ICYmIGluZGV4IDw9IGFwcHJveGltYXRlU2VjdGlvbkluZm8ubGluZUVuZCA/IGxpbmUgOiAnJ1xuICApO1xuICBjb25zdCBwb3RlbnRpYWxDb2RlQmxvY2tUZXh0ID0gcG90ZW50aWFsQ29kZUJsb2NrVGV4dExpbmVzLmpvaW4oJ1xcbicpO1xuXG4gIGNvbnN0IFJFR19FWFAgPVxuICAgIC8oPzw9XnxcXG4pKD88TGluZVByZWZpeD4gezAsM30oPzo+IHsxLDN9KSopKD88Q29kZUJsb2NrU3RhcnREZWxpbWl0ZXI+KD88Q29kZUJsb2NrU3RhcnREZWxpbWl0ZXJDaGFyPltgfl0pKD86XFxrPENvZGVCbG9ja1N0YXJ0RGVsaW1pdGVyQ2hhcj57Mix9KSkoPzxDb2RlQmxvY2tMYW5ndWFnZT5cXFMqKSg/OlsgXFx0XSsoPzxDb2RlQmxvY2tBcmdzPi4qPylbIFxcdF0rKT8oPzpcXG4oPzxDb2RlQmxvY2tDb250ZW50Pig/Olxcbj9cXGs8TGluZVByZWZpeD4uKikrPykpP1xcblxcazxMaW5lUHJlZml4Pig/PENvZGVCbG9ja0VuZERlbGltaXRlcj5cXGs8Q29kZUJsb2NrU3RhcnREZWxpbWl0ZXI+XFxrPENvZGVCbG9ja1N0YXJ0RGVsaW1pdGVyQ2hhcj4qKVsgXFx0XSooPzpcXG58JCkvZztcblxuICBsZXQgc2VjdGlvbkluZm86IENvZGVCbG9ja01hcmtkb3duU2VjdGlvbkluZm9ybWF0aW9uIHwgbnVsbCA9IG51bGw7XG5cbiAgZm9yIChjb25zdCBtYXRjaCBvZiBwb3RlbnRpYWxDb2RlQmxvY2tUZXh0Lm1hdGNoQWxsKFJFR19FWFApKSB7XG4gICAgaWYgKCFpc1N1aXRhYmxlQ29kZUJsb2NrKG1hdGNoLCBsYW5ndWFnZSwgc291cmNlLCBpc0luQ2FsbG91dCkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChzZWN0aW9uSW5mbykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgc2VjdGlvbkluZm8gPSBjcmVhdGVTZWN0aW9uSW5mb0Zyb21NYXRjaChwb3RlbnRpYWxDb2RlQmxvY2tUZXh0LCBtYXRjaCwgYXBwcm94aW1hdGVTZWN0aW9uSW5mbywgc291cmNlTGluZXMpO1xuICB9XG5cbiAgaWYgKCFzZWN0aW9uSW5mbykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIHNlY3Rpb25JbmZvO1xufVxuXG4vKipcbiAqIEluc2VydHMgdGV4dCBhZnRlciB0aGUgY29kZSBibG9jay5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciB0aGUgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbnNlcnRBZnRlckNvZGVCbG9jayhvcHRpb25zOiBJbnNlcnRDb2RlQmxvY2tPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgYXBwLCBjdHgsIGxpbmVPZmZzZXQgPSAwLCB0ZXh0IH0gPSBvcHRpb25zO1xuXG4gIGNvbnN0IHNlY3Rpb25JbmZvID0gYXdhaXQgZ2V0Q29kZUJsb2NrU2VjdGlvbkluZm8ob3B0aW9ucyk7XG4gIGlmICghc2VjdGlvbkluZm8pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCB1bmlxdWVseSBpZGVudGlmeSB0aGUgY29kZSBibG9jay4nKTtcbiAgfVxuXG4gIGF3YWl0IHByb2Nlc3MoYXBwLCBjdHguc291cmNlUGF0aCwgKF9hYm9ydFNpZ25hbCwgY29udGVudCkgPT4ge1xuICAgIGlmICghaGFzU2luZ2xlT2NjdXJyZW5jZShjb250ZW50LCBzZWN0aW9uSW5mby50ZXh0KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNdWx0aXBsZSBzdWl0YWJsZSBjb2RlIGJsb2NrcyBmb3VuZC4nKTtcbiAgICB9XG5cbiAgICBjb25zdCBpbmRleCA9IGNvbnRlbnQuaW5kZXhPZihzZWN0aW9uSW5mby50ZXh0KTtcbiAgICBjb25zdCB0ZXh0QmVmb3JlU2VjdGlvbiA9IGNvbnRlbnQuc2xpY2UoMCwgaW5kZXgpO1xuICAgIGNvbnN0IGxpbmVzQmVmb3JlU2VjdGlvbiA9IHRleHRCZWZvcmVTZWN0aW9uLnNwbGl0KCdcXG4nKTtcbiAgICBjb25zdCBpbnNlcnRMaW5lSW5kZXggPSBsaW5lc0JlZm9yZVNlY3Rpb24ubGVuZ3RoICsgc2VjdGlvbkluZm8ubGluZUVuZCArIGxpbmVPZmZzZXQ7XG4gICAgcmV0dXJuIGluc2VydFRleHQoY29udGVudCwgaW5zZXJ0TGluZUluZGV4LCB0ZXh0LCBvcHRpb25zLnNob3VsZFByZXNlcnZlTGluZVByZWZpeCk7XG4gIH0pO1xufVxuXG4vKipcbiAqIEluc2VydHMgdGV4dCBiZWZvcmUgdGhlIGNvZGUgYmxvY2suXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgdGhlIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW5zZXJ0QmVmb3JlQ29kZUJsb2NrKG9wdGlvbnM6IEluc2VydENvZGVCbG9ja09wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgeyBhcHAsIGN0eCwgbGluZU9mZnNldCA9IDAsIHRleHQgfSA9IG9wdGlvbnM7XG5cbiAgY29uc3Qgc2VjdGlvbkluZm8gPSBhd2FpdCBnZXRDb2RlQmxvY2tTZWN0aW9uSW5mbyhvcHRpb25zKTtcbiAgaWYgKCFzZWN0aW9uSW5mbykge1xuICAgIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IHVuaXF1ZWx5IGlkZW50aWZ5IHRoZSBjb2RlIGJsb2NrLicpO1xuICB9XG5cbiAgYXdhaXQgcHJvY2VzcyhhcHAsIGN0eC5zb3VyY2VQYXRoLCAoX2Fib3J0U2lnbmFsLCBjb250ZW50KSA9PiB7XG4gICAgaWYgKCFoYXNTaW5nbGVPY2N1cnJlbmNlKGNvbnRlbnQsIHNlY3Rpb25JbmZvLnRleHQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ011bHRpcGxlIHN1aXRhYmxlIGNvZGUgYmxvY2tzIGZvdW5kLicpO1xuICAgIH1cblxuICAgIGNvbnN0IGluZGV4ID0gY29udGVudC5pbmRleE9mKHNlY3Rpb25JbmZvLnRleHQpO1xuICAgIGNvbnN0IHRleHRCZWZvcmVTZWN0aW9uID0gY29udGVudC5zbGljZSgwLCBpbmRleCk7XG4gICAgY29uc3QgbGluZXNCZWZvcmVTZWN0aW9uID0gdGV4dEJlZm9yZVNlY3Rpb24uc3BsaXQoJ1xcbicpO1xuICAgIGNvbnN0IGluc2VydExpbmVJbmRleCA9IGxpbmVzQmVmb3JlU2VjdGlvbi5sZW5ndGggKyBzZWN0aW9uSW5mby5saW5lU3RhcnQgLSBsaW5lT2Zmc2V0IC0gMTtcbiAgICByZXR1cm4gaW5zZXJ0VGV4dChjb250ZW50LCBpbnNlcnRMaW5lSW5kZXgsIHRleHQsIG9wdGlvbnMuc2hvdWxkUHJlc2VydmVMaW5lUHJlZml4KTtcbiAgfSk7XG59XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgY29kZSBibG9jay5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciB0aGUgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZW1vdmVDb2RlQmxvY2sob3B0aW9uczogR2V0Q29kZUJsb2NrU2VjdGlvbkluZm9PcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IHJlcGxhY2VDb2RlQmxvY2soe1xuICAgIC4uLm9wdGlvbnMsXG4gICAgY29kZUJsb2NrUHJvdmlkZXI6ICcnXG4gIH0pO1xufVxuXG4vKipcbiAqIFJlcGxhY2VzIHRoZSBjb2RlIGJsb2NrLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHRoZSBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlcGxhY2VDb2RlQmxvY2sob3B0aW9uczogUmVwbGFjZUNvZGVCbG9ja09wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgeyBhcHAsIGNvZGVCbG9ja1Byb3ZpZGVyLCBjdHggfSA9IG9wdGlvbnM7XG5cbiAgY29uc3QgYWJvcnRTaWduYWwgPSBvcHRpb25zLmFib3J0U2lnbmFsID8/IGFib3J0U2lnbmFsTmV2ZXIoKTtcbiAgYWJvcnRTaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcblxuICBjb25zdCBzZWN0aW9uSW5mbyA9IGF3YWl0IGdldENvZGVCbG9ja1NlY3Rpb25JbmZvKG9wdGlvbnMpO1xuICBpZiAoIXNlY3Rpb25JbmZvKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgdW5pcXVlbHkgaWRlbnRpZnkgdGhlIGNvZGUgYmxvY2suJyk7XG4gIH1cblxuICBjb25zdCBsaW5lcyA9IHNlY3Rpb25JbmZvLnRleHQuc3BsaXQoJ1xcbicpO1xuICBjb25zdCB0ZXh0QmVmb3JlQ29kZUJsb2NrID0gbGluZXMuc2xpY2UoMCwgc2VjdGlvbkluZm8ubGluZVN0YXJ0KS5qb2luKCdcXG4nKTtcbiAgbGV0IG9sZENvZGVCbG9jayA9IGxpbmVzLnNsaWNlKHNlY3Rpb25JbmZvLmxpbmVTdGFydCwgc2VjdGlvbkluZm8ubGluZUVuZCArIDEpLmpvaW4oJ1xcbicpO1xuICBpZiAob3B0aW9ucy5zaG91bGRQcmVzZXJ2ZUxpbmVQcmVmaXgpIHtcbiAgICBvbGRDb2RlQmxvY2sgPSB1bmluZGVudChvbGRDb2RlQmxvY2ssIHNlY3Rpb25JbmZvLnByZWZpeCk7XG4gIH1cbiAgY29uc3QgdGV4dEFmdGVyQ29kZUJsb2NrID0gbGluZXMuc2xpY2Uoc2VjdGlvbkluZm8ubGluZUVuZCArIDEpLmpvaW4oJ1xcbicpO1xuICBsZXQgbmV3Q29kZUJsb2NrID0gYXdhaXQgcmVzb2x2ZVZhbHVlKGNvZGVCbG9ja1Byb3ZpZGVyLCBhYm9ydFNpZ25hbCwgb2xkQ29kZUJsb2NrKTtcbiAgYWJvcnRTaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcblxuICBpZiAobmV3Q29kZUJsb2NrICYmIG9wdGlvbnMuc2hvdWxkUHJlc2VydmVMaW5lUHJlZml4KSB7XG4gICAgbmV3Q29kZUJsb2NrID0gaW5kZW50KG5ld0NvZGVCbG9jaywgc2VjdGlvbkluZm8ucHJlZml4KTtcbiAgfVxuXG4gIGNvbnN0IG5ld1NlY3Rpb25UZXh0ID0gYCR7YXBwZW5kTmV3TGluZSh0ZXh0QmVmb3JlQ29kZUJsb2NrKX0ke2FwcGVuZE5ld0xpbmUobmV3Q29kZUJsb2NrKX0ke3RleHRBZnRlckNvZGVCbG9ja31gO1xuICBhd2FpdCBwcm9jZXNzKGFwcCwgY3R4LnNvdXJjZVBhdGgsIChfYWJvcnRTaWduYWwsIGNvbnRlbnQpID0+IHtcbiAgICBpZiAoIWhhc1NpbmdsZU9jY3VycmVuY2UoY29udGVudCwgc2VjdGlvbkluZm8udGV4dCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTXVsdGlwbGUgc3VpdGFibGUgY29kZSBibG9ja3MgZm91bmQuJyk7XG4gICAgfVxuICAgIHJldHVybiByZXBsYWNlQWxsKGNvbnRlbnQsIHNlY3Rpb25JbmZvLnRleHQsIG5ld1NlY3Rpb25UZXh0KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGFwcGVuZE5ld0xpbmUodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRleHQgPT09ICcnID8gJycgOiBgJHt0ZXh0fVxcbmA7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUFwcHJveGltYXRlU2VjdGlvbkluZm8oYXBwOiBBcHAsIGN0eDogTWFya2Rvd25Qb3N0UHJvY2Vzc29yQ29udGV4dCk6IFByb21pc2U8TWFya2Rvd25TZWN0aW9uSW5mb3JtYXRpb24+IHtcbiAgY29uc3Qgc291cmNlRmlsZSA9IGFwcC52YXVsdC5nZXRGaWxlQnlQYXRoKGN0eC5zb3VyY2VQYXRoKTtcbiAgaWYgKCFzb3VyY2VGaWxlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTb3VyY2UgZmlsZSAke2N0eC5zb3VyY2VQYXRofSBub3QgZm91bmQuYCk7XG4gIH1cbiAgY29uc3QgY2FjaGUgPSBhcHAubWV0YWRhdGFDYWNoZS5nZXRGaWxlQ2FjaGUoc291cmNlRmlsZSk7XG4gIGNvbnN0IGZyb250bWF0dGVyRW5kT2Zmc2V0ID0gY2FjaGU/LmZyb250bWF0dGVyUG9zaXRpb24/LmVuZC5vZmZzZXQ7XG4gIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBhcHAudmF1bHQuY2FjaGVkUmVhZChzb3VyY2VGaWxlKTtcbiAgY29uc3QgY29udGVudFN0YXJ0T2Zmc2V0ID0gZnJvbnRtYXR0ZXJFbmRPZmZzZXQgPT09IHVuZGVmaW5lZCA/IGdldEZyb250TWF0dGVySW5mbyhjb250ZW50KS5jb250ZW50U3RhcnQgOiBmcm9udG1hdHRlckVuZE9mZnNldCArIDE7XG4gIGNvbnN0IHRleHQgPSBjb250ZW50LnNsaWNlKGNvbnRlbnRTdGFydE9mZnNldCk7XG4gIHJldHVybiB7XG4gICAgbGluZUVuZDogdGV4dC5zcGxpdCgnXFxuJykubGVuZ3RoIC0gMSxcbiAgICBsaW5lU3RhcnQ6IDAsXG4gICAgdGV4dFxuICB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVTZWN0aW9uSW5mb0Zyb21NYXRjaChcbiAgcG90ZW50aWFsQ29kZUJsb2NrVGV4dDogc3RyaW5nLFxuICBtYXRjaDogUmVnRXhwTWF0Y2hBcnJheSxcbiAgYXBwcm94aW1hdGVTZWN0aW9uSW5mbzogTWFya2Rvd25TZWN0aW9uSW5mb3JtYXRpb24sXG4gIHNvdXJjZUxpbmVzOiBzdHJpbmdbXVxuKTogQ29kZUJsb2NrTWFya2Rvd25TZWN0aW9uSW5mb3JtYXRpb24ge1xuICBjb25zdCBsaW5lUHJlZml4ID0gbWF0Y2guZ3JvdXBzPy5bJ0xpbmVQcmVmaXgnXSA/PyAnJztcbiAgY29uc3QgY29kZUJsb2NrU3RhcnREZWxpbWl0ZXIgPSBtYXRjaC5ncm91cHM/LlsnQ29kZUJsb2NrU3RhcnREZWxpbWl0ZXInXSA/PyAnJztcbiAgY29uc3QgY29kZUJsb2NrRW5kRGVsaW1pdGVyID0gbWF0Y2guZ3JvdXBzPy5bJ0NvZGVCbG9ja0VuZERlbGltaXRlciddID8/ICcnO1xuICBjb25zdCBjb2RlQmxvY2tBcmdzID0gbWF0Y2guZ3JvdXBzPy5bJ0NvZGVCbG9ja0FyZ3MnXSA/PyAnJztcbiAgY29uc3QgbGFuZ3VhZ2UgPSBtYXRjaC5ncm91cHM/LlsnQ29kZUJsb2NrTGFuZ3VhZ2UnXSA/PyAnJztcblxuICBjb25zdCBwcmV2aW91c1RleHQgPSBwb3RlbnRpYWxDb2RlQmxvY2tUZXh0LnNsaWNlKDAsIG1hdGNoLmluZGV4KTtcbiAgY29uc3QgcHJldmlvdXNUZXh0TGluZXMgPSBwcmV2aW91c1RleHQuc3BsaXQoJ1xcbicpO1xuXG4gIHJldHVybiB7XG4gICAgYXJnczogY29kZUJsb2NrQXJncyxcbiAgICBlbmREZWxpbWl0ZXI6IGNvZGVCbG9ja0VuZERlbGltaXRlcixcbiAgICBsYW5ndWFnZSxcbiAgICBsaW5lRW5kOiBwcmV2aW91c1RleHRMaW5lcy5sZW5ndGggKyBzb3VyY2VMaW5lcy5sZW5ndGgsXG4gICAgbGluZVN0YXJ0OiBwcmV2aW91c1RleHRMaW5lcy5sZW5ndGggLSAxLFxuICAgIHByZWZpeDogbGluZVByZWZpeCxcbiAgICBzdGFydERlbGltaXRlcjogY29kZUJsb2NrU3RhcnREZWxpbWl0ZXIsXG4gICAgdGV4dDogYXBwcm94aW1hdGVTZWN0aW9uSW5mby50ZXh0XG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldExhbmd1YWdlRnJvbUVsZW1lbnQoZWw6IEhUTUxFbGVtZW50KTogc3RyaW5nIHtcbiAgY29uc3QgQkxPQ0tfTEFOR1VBR0VfUFJFRklYID0gJ2Jsb2NrLWxhbmd1YWdlLSc7XG4gIHJldHVybiBBcnJheS5mcm9tKGVsLmNsYXNzTGlzdCkuZmluZCgoY2xzKSA9PiBjbHMuc3RhcnRzV2l0aChCTE9DS19MQU5HVUFHRV9QUkVGSVgpKT8uc2xpY2UoQkxPQ0tfTEFOR1VBR0VfUFJFRklYLmxlbmd0aCkgPz8gJyc7XG59XG5cbmZ1bmN0aW9uIGluc2VydFRleHQoY29udGVudDogc3RyaW5nLCBpbnNlcnRMaW5lSW5kZXg6IG51bWJlciwgdGV4dDogc3RyaW5nLCBzaG91bGRQcmVzZXJ2ZUxpbmVQcmVmaXg/OiBib29sZWFuKTogc3RyaW5nIHtcbiAgY29uc3QgbGluZXMgPSBjb250ZW50LnNwbGl0KCdcXG4nKTtcbiAgY29uc3QgbmV3TGluZXMgPSBsaW5lcy5zbGljZSgpO1xuICBjb25zdCB0ZXh0TGluZXMgPSB0ZXh0LnNwbGl0KCdcXG4nKTtcblxuICBpZiAoaW5zZXJ0TGluZUluZGV4IDwgMCkge1xuICAgIGluc2VydExpbmVJbmRleCA9IDA7XG4gIH1cbiAgaWYgKGluc2VydExpbmVJbmRleCA+IGxpbmVzLmxlbmd0aCkge1xuICAgIGluc2VydExpbmVJbmRleCA9IGxpbmVzLmxlbmd0aDtcbiAgfVxuXG4gIGNvbnN0IFBSRUZJWF9MSU5FX1JFR19FWFAgPSAvXiB7MCwzfSg/Oj4gezEsM30pKi9nO1xuICBjb25zdCBtYXRjaCA9IChsaW5lc1tpbnNlcnRMaW5lSW5kZXhdID8/ICcnKS5tYXRjaChQUkVGSVhfTElORV9SRUdfRVhQKTtcbiAgY29uc3QgbGluZVByZWZpeCA9IG1hdGNoPy5bMF0gPz8gJyc7XG4gIG5ld0xpbmVzLnNwbGljZShpbnNlcnRMaW5lSW5kZXgsIDAsIC4uLihzaG91bGRQcmVzZXJ2ZUxpbmVQcmVmaXggPyB0ZXh0TGluZXMubWFwKChsaW5lKSA9PiBpbmRlbnQobGluZSwgbGluZVByZWZpeCkpIDogdGV4dExpbmVzKSk7XG4gIHJldHVybiBuZXdMaW5lcy5qb2luKCdcXG4nKTtcbn1cblxuZnVuY3Rpb24gaXNTdWl0YWJsZUNvZGVCbG9jayhcbiAgbWF0Y2g6IFJlZ0V4cE1hdGNoQXJyYXksXG4gIGxhbmd1YWdlOiBzdHJpbmcsXG4gIHNvdXJjZTogc3RyaW5nLFxuICBpc0luQ2FsbG91dDogYm9vbGVhblxuKTogYm9vbGVhbiB7XG4gIGNvbnN0IGNvZGVCbG9ja0xhbmd1YWdlID0gbWF0Y2guZ3JvdXBzPy5bJ0NvZGVCbG9ja0xhbmd1YWdlJ10gPz8gJyc7XG4gIGlmIChjb2RlQmxvY2tMYW5ndWFnZSAhPT0gbGFuZ3VhZ2UpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBsaW5lUHJlZml4ID0gbWF0Y2guZ3JvdXBzPy5bJ0xpbmVQcmVmaXgnXSA/PyAnJztcblxuICBpZiAoaXNJbkNhbGxvdXQgJiYgIWxpbmVQcmVmaXguaW5jbHVkZXMoJz4gJykpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBjb2RlQmxvY2tDb250ZW50ID0gbWF0Y2guZ3JvdXBzPy5bJ0NvZGVCbG9ja0NvbnRlbnQnXSA/PyAnJztcbiAgY29uc3QgY2xlYW5Db2RlQmxvY2tDb250ZW50ID0gY29kZUJsb2NrQ29udGVudC5zcGxpdCgnXFxuJykubWFwKChsaW5lKSA9PiBsaW5lLnNsaWNlKGxpbmVQcmVmaXgubGVuZ3RoKSkuam9pbignXFxuJyk7XG5cbiAgcmV0dXJuIGNsZWFuQ29kZUJsb2NrQ29udGVudCA9PT0gc291cmNlO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7OztBQVlBLFNBQVMsMEJBQTBCO0FBSW5DLFNBQVMsd0JBQXdCO0FBQ2pDO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLG9CQUFvQjtBQUM3QixTQUFTLGVBQWU7QUF1R3hCLGVBQXNCLHdCQUF3QixTQUE4RjtBQUMxSSxRQUFNLEVBQUUsS0FBSyxLQUFLLElBQUksT0FBTyxJQUFJO0FBRWpDLFFBQU0seUJBQXlCLElBQUksZUFBZSxFQUFFLEtBQUssTUFBTSw2QkFBNkIsS0FBSyxHQUFHO0FBQ3BHLFFBQU0sY0FBYyxDQUFDLENBQUMsR0FBRyxlQUFlLFVBQVUsU0FBUyxpQkFBaUI7QUFFNUUsUUFBTSxXQUFXLHVCQUF1QixFQUFFO0FBQzFDLFFBQU0sY0FBYyxPQUFPLE1BQU0sSUFBSTtBQUVyQyxRQUFNLFlBQVksdUJBQXVCLEtBQUssTUFBTSxJQUFJO0FBQ3hELFFBQU0sOEJBQThCLFVBQVU7QUFBQSxJQUFJLENBQUMsTUFBTSxVQUN2RCx1QkFBdUIsYUFBYSxTQUFTLFNBQVMsdUJBQXVCLFVBQVUsT0FBTztBQUFBLEVBQ2hHO0FBQ0EsUUFBTSx5QkFBeUIsNEJBQTRCLEtBQUssSUFBSTtBQUVwRSxRQUFNLFVBQ0o7QUFFRixNQUFJLGNBQTBEO0FBRTlELGFBQVcs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
|
|
203
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL01hcmtkb3duQ29kZUJsb2NrUHJvY2Vzc29yLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvblxuICpcbiAqIFRoaXMgbW9kdWxlIHByb3ZpZGVzIHV0aWxpdHkgZnVuY3Rpb25zIGZvciBwcm9jZXNzaW5nIGNvZGUgYmxvY2tzIGluIE9ic2lkaWFuLlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgQXBwLFxuICBNYXJrZG93blBvc3RQcm9jZXNzb3JDb250ZXh0LFxuICBNYXJrZG93blNlY3Rpb25JbmZvcm1hdGlvbixcbiAgUG9zLFxuICBURmlsZVxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IGdldEZyb250TWF0dGVySW5mbyB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBWYWx1ZVByb3ZpZGVyIH0gZnJvbSAnLi4vVmFsdWVQcm92aWRlci50cyc7XG5cbmltcG9ydCB7IGFib3J0U2lnbmFsQW55IH0gZnJvbSAnLi4vQWJvcnRDb250cm9sbGVyLnRzJztcbmltcG9ydCB7XG4gIGhhc1NpbmdsZU9jY3VycmVuY2UsXG4gIGluZGVudCxcbiAgdW5pbmRlbnRcbn0gZnJvbSAnLi4vU3RyaW5nLnRzJztcbmltcG9ydCB7IHJlc29sdmVWYWx1ZSB9IGZyb20gJy4uL1ZhbHVlUHJvdmlkZXIudHMnO1xuaW1wb3J0IHsgcHJvY2VzcyB9IGZyb20gJy4vVmF1bHQudHMnO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIGluZm9ybWF0aW9uIGFib3V0IGEgY29kZSBibG9jayBpbiBhIE1hcmtkb3duIHNlY3Rpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29kZUJsb2NrTWFya2Rvd25JbmZvcm1hdGlvbiB7XG4gIC8qKlxuICAgKiBUaGUgYXJndW1lbnRzIG9mIHRoZSBjb2RlIGJsb2NrLlxuICAgKi9cbiAgYXJnczogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZW5kIGRlbGltaXRlciBvZiB0aGUgY29kZSBibG9jay5cbiAgICovXG4gIGVuZERlbGltaXRlcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbGFuZ3VhZ2Ugb2YgdGhlIGNvZGUgYmxvY2suXG4gICAqL1xuICBsYW5ndWFnZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbGluZSBwcmVmaXggb2YgZWFjaCBsaW5lIG9mIHRoZSBjb2RlIGJsb2NrLlxuICAgKi9cbiAgbGluZVByZWZpeDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcG9zaXRpb24gb2YgdGhlIGNvZGUgYmxvY2sgaW4gdGhlIG5vdGUuXG4gICAqL1xuICBub3RlUG9zOiBQb3M7XG5cbiAgLyoqXG4gICAqIFRoZSBzZWN0aW9uIGluZm9ybWF0aW9uIG9mIHRoZSBjb2RlIGJsb2NrLlxuICAgKi9cbiAgc2VjdGlvbkluZm86IE1hcmtkb3duU2VjdGlvbkluZm9ybWF0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgc3RhcnQgZGVsaW1pdGVyIG9mIHRoZSBjb2RlIGJsb2NrLlxuICAgKi9cbiAgc3RhcnREZWxpbWl0ZXI6IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBvcHRpb25zIGZvciBnZXR0aW5nIHRoZSBpbmZvcm1hdGlvbiBhYm91dCBhIGNvZGUgYmxvY2sgaW4gYSBNYXJrZG93biBzZWN0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdldENvZGVCbG9ja1NlY3Rpb25JbmZvT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gQXBwIG9iamVjdC5cbiAgICovXG4gIGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgTWFya2Rvd25Qb3N0UHJvY2Vzc29yQ29udGV4dCBvYmplY3QuXG4gICAqL1xuICBjdHg6IE1hcmtkb3duUG9zdFByb2Nlc3NvckNvbnRleHQ7XG5cbiAgLyoqXG4gICAqIFRoZSBIVE1MRWxlbWVudCByZXByZXNlbnRpbmcgdGhlIGNvZGUgYmxvY2suXG4gICAqL1xuICBlbDogSFRNTEVsZW1lbnQ7XG5cbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBub3RlLlxuICAgKi9cbiAgbm90ZUNvbnRlbnQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBzb3VyY2Ugb2YgdGhlIGNvZGUgYmxvY2suXG4gICAqL1xuICBzb3VyY2U6IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBvcHRpb25zIGZvciBpbnNlcnRpbmcgdGV4dCBhZnRlciBhIGNvZGUgYmxvY2suXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5zZXJ0Q29kZUJsb2NrT3B0aW9ucyBleHRlbmRzIEdldENvZGVCbG9ja1NlY3Rpb25JbmZvT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIGxpbmVzIHRvIG9mZnNldCB0aGUgaW5zZXJ0aW9uIGJ5LiBEZWZhdWx0IGlzIGAwYC5cbiAgICovXG4gIGxpbmVPZmZzZXQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcHJlc2VydmUgdGhlIGxpbmUgcHJlZml4IG9mIHRoZSBjb2RlIGJsb2NrLiBEZWZhdWx0IGlzIGBmYWxzZWAuXG4gICAqL1xuICBzaG91bGRQcmVzZXJ2ZUxpbmVQcmVmaXg/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgdGV4dCB0byBpbnNlcnQgYWZ0ZXIgdGhlIGNvZGUgYmxvY2suXG4gICAqL1xuICB0ZXh0OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgb3B0aW9ucyBmb3IgcmVwbGFjaW5nIGEgY29kZSBibG9jay5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXBsYWNlQ29kZUJsb2NrT3B0aW9ucyBleHRlbmRzIEdldENvZGVCbG9ja1NlY3Rpb25JbmZvT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgYWJvcnQgc2lnbmFsIHRvIGNvbnRyb2wgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgZnVuY3Rpb24uXG4gICAqL1xuICBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsO1xuXG4gIC8qKlxuICAgKiBUaGUgcHJvdmlkZXIgdGhhdCBwcm92aWRlcyB0aGUgbmV3IGNvZGUgYmxvY2suXG4gICAqL1xuICBjb2RlQmxvY2tQcm92aWRlcjogVmFsdWVQcm92aWRlcjxzdHJpbmcsIFtzdHJpbmddPjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBwcmVzZXJ2ZSB0aGUgbGluZSBwcmVmaXggb2YgdGhlIGNvZGUgYmxvY2suIERlZmF1bHQgaXMgYGZhbHNlYC5cbiAgICovXG4gIHNob3VsZFByZXNlcnZlTGluZVByZWZpeD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogR2V0cyB0aGUgaW5mb3JtYXRpb24gYWJvdXQgYSBjb2RlIGJsb2NrIGluIGEgTWFya2Rvd24gc2VjdGlvbi5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciB0aGUgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyBUaGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvZGUgYmxvY2sgaW4gdGhlIE1hcmtkb3duIHNlY3Rpb24uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRDb2RlQmxvY2tNYXJrZG93bkluZm8ob3B0aW9uczogR2V0Q29kZUJsb2NrU2VjdGlvbkluZm9PcHRpb25zKTogUHJvbWlzZTxDb2RlQmxvY2tNYXJrZG93bkluZm9ybWF0aW9uIHwgbnVsbD4ge1xuICBjb25zdCB7IGFwcCwgY3R4LCBlbCwgc291cmNlIH0gPSBvcHRpb25zO1xuXG4gIGNvbnN0IHNvdXJjZUZpbGUgPSBhcHAudmF1bHQuZ2V0RmlsZUJ5UGF0aChjdHguc291cmNlUGF0aCk7XG4gIGlmICghc291cmNlRmlsZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgU291cmNlIGZpbGUgJHtjdHguc291cmNlUGF0aH0gbm90IGZvdW5kLmApO1xuICB9XG4gIGNvbnN0IGNvbnRlbnQgPSBvcHRpb25zLm5vdGVDb250ZW50ID8/IGF3YWl0IGFwcC52YXVsdC5jYWNoZWRSZWFkKHNvdXJjZUZpbGUpO1xuXG4gIGNvbnN0IGFwcHJveGltYXRlU2VjdGlvbkluZm8gPSBjdHguZ2V0U2VjdGlvbkluZm8oZWwpID8/IGNyZWF0ZUFwcHJveGltYXRlU2VjdGlvbkluZm8oYXBwLCBzb3VyY2VGaWxlLCBjb250ZW50KTtcblxuICBpZiAoIWhhc1NpbmdsZU9jY3VycmVuY2UoY29udGVudCwgYXBwcm94aW1hdGVTZWN0aW9uSW5mby50ZXh0KSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3Qgc2VjdGlvbkluZm9PZmZzZXQgPSBjb250ZW50LmluZGV4T2YoYXBwcm94aW1hdGVTZWN0aW9uSW5mby50ZXh0KTtcbiAgY29uc3QgbGluZXNCZWZvcmVTZWN0aW9uQ291bnQgPSBjb250ZW50LnNsaWNlKDAsIHNlY3Rpb25JbmZvT2Zmc2V0KS5zcGxpdCgnXFxuJykubGVuZ3RoIC0gMTtcblxuICBjb25zdCBpc0luQ2FsbG91dCA9ICEhZWwucGFyZW50RWxlbWVudD8uY2xhc3NMaXN0LmNvbnRhaW5zKCdjYWxsb3V0LWNvbnRlbnQnKTtcblxuICBjb25zdCBsYW5ndWFnZSA9IGdldExhbmd1YWdlRnJvbUVsZW1lbnQoZWwpO1xuICBjb25zdCBzb3VyY2VMaW5lcyA9IHNvdXJjZS5zcGxpdCgnXFxuJyk7XG5cbiAgY29uc3QgdGV4dExpbmVzID0gYXBwcm94aW1hdGVTZWN0aW9uSW5mby50ZXh0LnNwbGl0KCdcXG4nKTtcbiAgY29uc3QgcG90ZW50aWFsQ29kZUJsb2NrVGV4dExpbmVzID0gdGV4dExpbmVzLm1hcCgobGluZSwgaW5kZXgpID0+XG4gICAgYXBwcm94aW1hdGVTZWN0aW9uSW5mby5saW5lU3RhcnQgPD0gaW5kZXggJiYgaW5kZXggPD0gYXBwcm94aW1hdGVTZWN0aW9uSW5mby5saW5lRW5kID8gbGluZSA6ICcnXG4gICk7XG4gIGNvbnN0IHBvdGVudGlhbENvZGVCbG9ja1RleHQgPSBwb3RlbnRpYWxDb2RlQmxvY2tUZXh0TGluZXMuam9pbignXFxuJyk7XG5cbiAgY29uc3QgUkVHX0VYUCA9XG4gICAgLyg/PD1efFxcbikoPzxMaW5lUHJlZml4PiB7MCwzfSg/Oj4gezEsM30pKikoPzxDb2RlQmxvY2tTdGFydERlbGltaXRlcj4oPzxDb2RlQmxvY2tTdGFydERlbGltaXRlckNoYXI+W2B+XSkoPzpcXGs8Q29kZUJsb2NrU3RhcnREZWxpbWl0ZXJDaGFyPnsyLH0pKSg/PENvZGVCbG9ja0xhbmd1YWdlPlxcUyopKD86WyBcXHRdKyg/PENvZGVCbG9ja0FyZ3M+Lio/KVsgXFx0XSo/KT8oPzpcXG4oPzxDb2RlQmxvY2tDb250ZW50Pig/Olxcbj9cXGs8TGluZVByZWZpeD4uKikrPykpP1xcblxcazxMaW5lUHJlZml4Pig/PENvZGVCbG9ja0VuZERlbGltaXRlcj5cXGs8Q29kZUJsb2NrU3RhcnREZWxpbWl0ZXI+XFxrPENvZGVCbG9ja1N0YXJ0RGVsaW1pdGVyQ2hhcj4qKVsgXFx0XSooPz1cXG58JCkvZztcblxuICBsZXQgbWFya2Rvd25JbmZvOiBDb2RlQmxvY2tNYXJrZG93bkluZm9ybWF0aW9uIHwgbnVsbCA9IG51bGw7XG5cbiAgZm9yIChjb25zdCBtYXRjaCBvZiBwb3RlbnRpYWxDb2RlQmxvY2tUZXh0Lm1hdGNoQWxsKFJFR19FWFApKSB7XG4gICAgaWYgKCFpc1N1aXRhYmxlQ29kZUJsb2NrKG1hdGNoLCBsYW5ndWFnZSwgc291cmNlLCBpc0luQ2FsbG91dCkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChtYXJrZG93bkluZm8pIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIG1hcmtkb3duSW5mbyA9IGNyZWF0ZVNlY3Rpb25JbmZvRnJvbU1hdGNoKHBvdGVudGlhbENvZGVCbG9ja1RleHQsIG1hdGNoLCBhcHByb3hpbWF0ZVNlY3Rpb25JbmZvLCBzb3VyY2VMaW5lcywgc2VjdGlvbkluZm9PZmZzZXQsIGxpbmVzQmVmb3JlU2VjdGlvbkNvdW50KTtcbiAgfVxuXG4gIGlmICghbWFya2Rvd25JbmZvKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gbWFya2Rvd25JbmZvO1xufVxuXG4vKipcbiAqIEluc2VydHMgdGV4dCBhZnRlciB0aGUgY29kZSBibG9jay5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciB0aGUgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbnNlcnRBZnRlckNvZGVCbG9jayhvcHRpb25zOiBJbnNlcnRDb2RlQmxvY2tPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgYXBwLCBjdHgsIGxpbmVPZmZzZXQgPSAwLCB0ZXh0IH0gPSBvcHRpb25zO1xuXG4gIGF3YWl0IHByb2Nlc3MoYXBwLCBjdHguc291cmNlUGF0aCwgYXN5bmMgKF9hYm9ydFNpZ25hbCwgY29udGVudCkgPT4ge1xuICAgIGNvbnN0IG1hcmtkb3duSW5mbyA9IGF3YWl0IGdldENvZGVCbG9ja01hcmtkb3duSW5mbyh7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgbm90ZUNvbnRlbnQ6IGNvbnRlbnRcbiAgICB9KTtcbiAgICBpZiAoIW1hcmtkb3duSW5mbykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgdW5pcXVlbHkgaWRlbnRpZnkgdGhlIGNvZGUgYmxvY2suJyk7XG4gICAgfVxuXG4gICAgY29uc3QgaW5zZXJ0TGluZUluZGV4ID0gbWFya2Rvd25JbmZvLm5vdGVQb3MuZW5kLmxpbmUgKyBsaW5lT2Zmc2V0ICsgMTtcbiAgICByZXR1cm4gaW5zZXJ0VGV4dChjb250ZW50LCBpbnNlcnRMaW5lSW5kZXgsIHRleHQsIG9wdGlvbnMuc2hvdWxkUHJlc2VydmVMaW5lUHJlZml4KTtcbiAgfSk7XG59XG5cbi8qKlxuICogSW5zZXJ0cyB0ZXh0IGJlZm9yZSB0aGUgY29kZSBibG9jay5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciB0aGUgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbnNlcnRCZWZvcmVDb2RlQmxvY2sob3B0aW9uczogSW5zZXJ0Q29kZUJsb2NrT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IGFwcCwgY3R4LCBsaW5lT2Zmc2V0ID0gMCwgdGV4dCB9ID0gb3B0aW9ucztcblxuICBhd2FpdCBwcm9jZXNzKGFwcCwgY3R4LnNvdXJjZVBhdGgsIGFzeW5jIChfYWJvcnRTaWduYWwsIGNvbnRlbnQpID0+IHtcbiAgICBjb25zdCBtYXJrZG93bkluZm8gPSBhd2FpdCBnZXRDb2RlQmxvY2tNYXJrZG93bkluZm8oe1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIG5vdGVDb250ZW50OiBjb250ZW50XG4gICAgfSk7XG4gICAgaWYgKCFtYXJrZG93bkluZm8pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IHVuaXF1ZWx5IGlkZW50aWZ5IHRoZSBjb2RlIGJsb2NrLicpO1xuICAgIH1cblxuICAgIGNvbnN0IGluc2VydExpbmVJbmRleCA9IG1hcmtkb3duSW5mby5ub3RlUG9zLnN0YXJ0LmxpbmUgLSBsaW5lT2Zmc2V0O1xuICAgIHJldHVybiBpbnNlcnRUZXh0KGNvbnRlbnQsIGluc2VydExpbmVJbmRleCwgdGV4dCwgb3B0aW9ucy5zaG91bGRQcmVzZXJ2ZUxpbmVQcmVmaXgpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBSZW1vdmVzIHRoZSBjb2RlIGJsb2NrLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHRoZSBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbW92ZUNvZGVCbG9jayhvcHRpb25zOiBHZXRDb2RlQmxvY2tTZWN0aW9uSW5mb09wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgcmVwbGFjZUNvZGVCbG9jayh7XG4gICAgLi4ub3B0aW9ucyxcbiAgICBjb2RlQmxvY2tQcm92aWRlcjogJydcbiAgfSk7XG59XG5cbi8qKlxuICogUmVwbGFjZXMgdGhlIGNvZGUgYmxvY2suXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgdGhlIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVwbGFjZUNvZGVCbG9jayhvcHRpb25zOiBSZXBsYWNlQ29kZUJsb2NrT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IGFwcCwgY29kZUJsb2NrUHJvdmlkZXIsIGN0eCB9ID0gb3B0aW9ucztcbiAgb3B0aW9ucy5hYm9ydFNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcblxuICBhd2FpdCBwcm9jZXNzKGFwcCwgY3R4LnNvdXJjZVBhdGgsIGFzeW5jIChhYm9ydFNpZ25hbCwgY29udGVudCkgPT4ge1xuICAgIGFib3J0U2lnbmFsID0gYWJvcnRTaWduYWxBbnkoYWJvcnRTaWduYWwsIG9wdGlvbnMuYWJvcnRTaWduYWwpO1xuICAgIGFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG4gICAgY29uc3QgbWFya2Rvd25JbmZvID0gYXdhaXQgZ2V0Q29kZUJsb2NrTWFya2Rvd25JbmZvKHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBub3RlQ29udGVudDogY29udGVudFxuICAgIH0pO1xuICAgIGlmICghbWFya2Rvd25JbmZvKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCB1bmlxdWVseSBpZGVudGlmeSB0aGUgY29kZSBibG9jay4nKTtcbiAgICB9XG5cbiAgICBsZXQgb2xkQ29kZUJsb2NrID0gY29udGVudC5zbGljZShtYXJrZG93bkluZm8ubm90ZVBvcy5zdGFydC5vZmZzZXQsIG1hcmtkb3duSW5mby5ub3RlUG9zLmVuZC5vZmZzZXQpO1xuICAgIGlmIChvcHRpb25zLnNob3VsZFByZXNlcnZlTGluZVByZWZpeCkge1xuICAgICAgb2xkQ29kZUJsb2NrID0gdW5pbmRlbnQob2xkQ29kZUJsb2NrLCBtYXJrZG93bkluZm8ubGluZVByZWZpeCk7XG4gICAgfVxuXG4gICAgbGV0IG5ld0NvZGVCbG9jayA9IGF3YWl0IHJlc29sdmVWYWx1ZShjb2RlQmxvY2tQcm92aWRlciwgYWJvcnRTaWduYWwsIG9sZENvZGVCbG9jayk7XG4gICAgaWYgKG5ld0NvZGVCbG9jayAmJiBvcHRpb25zLnNob3VsZFByZXNlcnZlTGluZVByZWZpeCkge1xuICAgICAgbmV3Q29kZUJsb2NrID0gaW5kZW50KG5ld0NvZGVCbG9jaywgbWFya2Rvd25JbmZvLmxpbmVQcmVmaXgpO1xuICAgIH1cblxuICAgIGNvbnN0IHRleHRCZWZvcmVDb2RlQmxvY2sgPSBjb250ZW50LnNsaWNlKDAsIG1hcmtkb3duSW5mby5ub3RlUG9zLnN0YXJ0Lm9mZnNldCk7XG4gICAgY29uc3QgdGV4dEFmdGVyQ29kZUJsb2NrID0gY29udGVudC5zbGljZShtYXJrZG93bkluZm8ubm90ZVBvcy5lbmQub2Zmc2V0KTtcblxuICAgIHJldHVybiBgJHthcHBlbmROZXdMaW5lKHRleHRCZWZvcmVDb2RlQmxvY2spfSR7YXBwZW5kTmV3TGluZShuZXdDb2RlQmxvY2spfSR7dGV4dEFmdGVyQ29kZUJsb2NrfWA7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBhcHBlbmROZXdMaW5lKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0ZXh0ID09PSAnJyA/ICcnIDogYCR7dGV4dH1cXG5gO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVBcHByb3hpbWF0ZVNlY3Rpb25JbmZvKGFwcDogQXBwLCBzb3VyY2VGaWxlOiBURmlsZSwgY29udGVudDogc3RyaW5nKTogTWFya2Rvd25TZWN0aW9uSW5mb3JtYXRpb24ge1xuICBjb25zdCBjYWNoZSA9IGFwcC5tZXRhZGF0YUNhY2hlLmdldEZpbGVDYWNoZShzb3VyY2VGaWxlKTtcbiAgY29uc3QgZnJvbnRtYXR0ZXJFbmRPZmZzZXQgPSBjYWNoZT8uZnJvbnRtYXR0ZXJQb3NpdGlvbj8uZW5kLm9mZnNldDtcbiAgY29uc3QgY29udGVudFN0YXJ0T2Zmc2V0ID0gZnJvbnRtYXR0ZXJFbmRPZmZzZXQgPT09IHVuZGVmaW5lZCA/IGdldEZyb250TWF0dGVySW5mbyhjb250ZW50KS5jb250ZW50U3RhcnQgOiBmcm9udG1hdHRlckVuZE9mZnNldCArIDE7XG4gIGNvbnN0IHRleHQgPSBjb250ZW50LnNsaWNlKGNvbnRlbnRTdGFydE9mZnNldCk7XG4gIHJldHVybiB7XG4gICAgbGluZUVuZDogdGV4dC5zcGxpdCgnXFxuJykubGVuZ3RoIC0gMSxcbiAgICBsaW5lU3RhcnQ6IDAsXG4gICAgdGV4dFxuICB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVTZWN0aW9uSW5mb0Zyb21NYXRjaChcbiAgcG90ZW50aWFsQ29kZUJsb2NrVGV4dDogc3RyaW5nLFxuICBtYXRjaDogUmVnRXhwTWF0Y2hBcnJheSxcbiAgYXBwcm94aW1hdGVTZWN0aW9uSW5mbzogTWFya2Rvd25TZWN0aW9uSW5mb3JtYXRpb24sXG4gIHNvdXJjZUxpbmVzOiBzdHJpbmdbXSxcbiAgc2VjdGlvbkluZm9PZmZzZXQ6IG51bWJlcixcbiAgbGluZXNCZWZvcmVTZWN0aW9uQ291bnQ6IG51bWJlclxuKTogQ29kZUJsb2NrTWFya2Rvd25JbmZvcm1hdGlvbiB7XG4gIGNvbnN0IGxpbmVQcmVmaXggPSBtYXRjaC5ncm91cHM/LlsnTGluZVByZWZpeCddID8/ICcnO1xuICBjb25zdCBjb2RlQmxvY2tTdGFydERlbGltaXRlciA9IG1hdGNoLmdyb3Vwcz8uWydDb2RlQmxvY2tTdGFydERlbGltaXRlciddID8/ICcnO1xuICBjb25zdCBjb2RlQmxvY2tFbmREZWxpbWl0ZXIgPSBtYXRjaC5ncm91cHM/LlsnQ29kZUJsb2NrRW5kRGVsaW1pdGVyJ10gPz8gJyc7XG4gIGNvbnN0IGNvZGVCbG9ja0FyZ3MgPSBtYXRjaC5ncm91cHM/LlsnQ29kZUJsb2NrQXJncyddID8/ICcnO1xuICBjb25zdCBsYW5ndWFnZSA9IG1hdGNoLmdyb3Vwcz8uWydDb2RlQmxvY2tMYW5ndWFnZSddID8/ICcnO1xuXG4gIGNvbnN0IHByZXZpb3VzVGV4dCA9IHBvdGVudGlhbENvZGVCbG9ja1RleHQuc2xpY2UoMCwgbWF0Y2guaW5kZXgpO1xuICBjb25zdCBwcmV2aW91c1RleHRMaW5lc0NvdW50ID0gcHJldmlvdXNUZXh0LnNwbGl0KCdcXG4nKS5sZW5ndGggLSAxO1xuICBjb25zdCBtYXRjaExhc3RMaW5lID0gbWF0Y2hbMF0uc3BsaXQoJ1xcbicpLmF0KC0xKSA/PyAnJztcblxuICByZXR1cm4ge1xuICAgIGFyZ3M6IGNvZGVCbG9ja0FyZ3MsXG4gICAgZW5kRGVsaW1pdGVyOiBjb2RlQmxvY2tFbmREZWxpbWl0ZXIsXG4gICAgbGFuZ3VhZ2UsXG4gICAgbGluZVByZWZpeCxcbiAgICBub3RlUG9zOiB7XG4gICAgICBlbmQ6IHtcbiAgICAgICAgY29sOiBtYXRjaExhc3RMaW5lLmxlbmd0aCxcbiAgICAgICAgbGluZTogbGluZXNCZWZvcmVTZWN0aW9uQ291bnQgKyBwcmV2aW91c1RleHRMaW5lc0NvdW50ICsgc291cmNlTGluZXMubGVuZ3RoIC0gMSxcbiAgICAgICAgb2Zmc2V0OiBzZWN0aW9uSW5mb09mZnNldCArIChtYXRjaC5pbmRleCA/PyAwKSArIG1hdGNoWzBdLmxlbmd0aFxuICAgICAgfSxcbiAgICAgIHN0YXJ0OiB7XG4gICAgICAgIGNvbDogMCxcbiAgICAgICAgbGluZTogbGluZXNCZWZvcmVTZWN0aW9uQ291bnQgKyBwcmV2aW91c1RleHRMaW5lc0NvdW50LFxuICAgICAgICBvZmZzZXQ6IHNlY3Rpb25JbmZvT2Zmc2V0ICsgKG1hdGNoLmluZGV4ID8/IDApXG4gICAgICB9XG4gICAgfSxcbiAgICBzZWN0aW9uSW5mbzoge1xuICAgICAgbGluZUVuZDogcHJldmlvdXNUZXh0TGluZXNDb3VudCArIHNvdXJjZUxpbmVzLmxlbmd0aCAtIDEsXG4gICAgICBsaW5lU3RhcnQ6IHByZXZpb3VzVGV4dExpbmVzQ291bnQsXG4gICAgICB0ZXh0OiBhcHByb3hpbWF0ZVNlY3Rpb25JbmZvLnRleHRcbiAgICB9LFxuICAgIHN0YXJ0RGVsaW1pdGVyOiBjb2RlQmxvY2tTdGFydERlbGltaXRlclxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRMYW5ndWFnZUZyb21FbGVtZW50KGVsOiBIVE1MRWxlbWVudCk6IHN0cmluZyB7XG4gIGNvbnN0IEJMT0NLX0xBTkdVQUdFX1BSRUZJWCA9ICdibG9jay1sYW5ndWFnZS0nO1xuICByZXR1cm4gQXJyYXkuZnJvbShlbC5jbGFzc0xpc3QpLmZpbmQoKGNscykgPT4gY2xzLnN0YXJ0c1dpdGgoQkxPQ0tfTEFOR1VBR0VfUFJFRklYKSk/LnNsaWNlKEJMT0NLX0xBTkdVQUdFX1BSRUZJWC5sZW5ndGgpID8/ICcnO1xufVxuXG5mdW5jdGlvbiBpbnNlcnRUZXh0KGNvbnRlbnQ6IHN0cmluZywgaW5zZXJ0TGluZUluZGV4OiBudW1iZXIsIHRleHQ6IHN0cmluZywgc2hvdWxkUHJlc2VydmVMaW5lUHJlZml4PzogYm9vbGVhbik6IHN0cmluZyB7XG4gIGNvbnN0IGxpbmVzID0gY29udGVudC5zcGxpdCgnXFxuJyk7XG4gIGNvbnN0IG5ld0xpbmVzID0gbGluZXMuc2xpY2UoKTtcbiAgY29uc3QgdGV4dExpbmVzID0gdGV4dC5zcGxpdCgnXFxuJyk7XG5cbiAgaWYgKGluc2VydExpbmVJbmRleCA8IDApIHtcbiAgICBpbnNlcnRMaW5lSW5kZXggPSAwO1xuICB9XG4gIGlmIChpbnNlcnRMaW5lSW5kZXggPiBsaW5lcy5sZW5ndGgpIHtcbiAgICBpbnNlcnRMaW5lSW5kZXggPSBsaW5lcy5sZW5ndGg7XG4gIH1cblxuICBjb25zdCBQUkVGSVhfTElORV9SRUdfRVhQID0gL14gezAsM30oPzo+IHsxLDN9KSovZztcbiAgY29uc3QgbWF0Y2ggPSAobGluZXNbaW5zZXJ0TGluZUluZGV4XSA/PyAnJykubWF0Y2goUFJFRklYX0xJTkVfUkVHX0VYUCk7XG4gIGNvbnN0IGxpbmVQcmVmaXggPSBtYXRjaD8uWzBdID8/ICcnO1xuICBuZXdMaW5lcy5zcGxpY2UoaW5zZXJ0TGluZUluZGV4LCAwLCAuLi4oc2hvdWxkUHJlc2VydmVMaW5lUHJlZml4ID8gdGV4dExpbmVzLm1hcCgobGluZSkgPT4gaW5kZW50KGxpbmUsIGxpbmVQcmVmaXgpKSA6IHRleHRMaW5lcykpO1xuICByZXR1cm4gbmV3TGluZXMuam9pbignXFxuJyk7XG59XG5cbmZ1bmN0aW9uIGlzU3VpdGFibGVDb2RlQmxvY2soXG4gIG1hdGNoOiBSZWdFeHBNYXRjaEFycmF5LFxuICBsYW5ndWFnZTogc3RyaW5nLFxuICBzb3VyY2U6IHN0cmluZyxcbiAgaXNJbkNhbGxvdXQ6IGJvb2xlYW5cbik6IGJvb2xlYW4ge1xuICBjb25zdCBjb2RlQmxvY2tMYW5ndWFnZSA9IG1hdGNoLmdyb3Vwcz8uWydDb2RlQmxvY2tMYW5ndWFnZSddID8/ICcnO1xuICBpZiAoY29kZUJsb2NrTGFuZ3VhZ2UgIT09IGxhbmd1YWdlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgbGluZVByZWZpeCA9IG1hdGNoLmdyb3Vwcz8uWydMaW5lUHJlZml4J10gPz8gJyc7XG5cbiAgaWYgKGlzSW5DYWxsb3V0ICYmICFsaW5lUHJlZml4LmluY2x1ZGVzKCc+ICcpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgY29kZUJsb2NrQ29udGVudCA9IG1hdGNoLmdyb3Vwcz8uWydDb2RlQmxvY2tDb250ZW50J10gPz8gJyc7XG4gIGNvbnN0IGNsZWFuQ29kZUJsb2NrQ29udGVudCA9IGNvZGVCbG9ja0NvbnRlbnQuc3BsaXQoJ1xcbicpLm1hcCgobGluZSkgPT4gbGluZS5zbGljZShsaW5lUHJlZml4Lmxlbmd0aCkpLmpvaW4oJ1xcbicpO1xuXG4gIHJldHVybiBjbGVhbkNvZGVCbG9ja0NvbnRlbnQgPT09IHNvdXJjZTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7QUFjQSxTQUFTLDBCQUEwQjtBQUluQyxTQUFTLHNCQUFzQjtBQUMvQjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLG9CQUFvQjtB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
|
|
@@ -47,7 +47,7 @@ async function processNextQueueItem(app) {
|
|
|
47
47
|
}
|
|
48
48
|
await addErrorHandler(() => runWithTimeout(
|
|
49
49
|
item.timeoutInMilliseconds,
|
|
50
|
-
(abortSignal) => invokeAsyncAndLog(processNextQueueItem.name, item.fn, abortSignalAny(
|
|
50
|
+
(abortSignal) => invokeAsyncAndLog(processNextQueueItem.name, item.fn, abortSignalAny(abortSignal, item.abortSignal), item.stackTrace),
|
|
51
51
|
{ queuedFn: item.fn }
|
|
52
52
|
), item.stackTrace);
|
|
53
53
|
queue.items.shift();
|
|
@@ -57,4 +57,4 @@ export {
|
|
|
57
57
|
addToQueueAndWait,
|
|
58
58
|
flushQueue
|
|
59
59
|
};
|
|
60
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL1F1ZXVlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvblxuICpcbiAqIENvbnRhaW5zIHV0aWxpdHkgZnVuY3Rpb25zIGZvciBlbnF1ZXVpbmcgYW5kIHByb2Nlc3NpbmcgZnVuY3Rpb25zIGluIE9ic2lkaWFuLlxuICovXG5cbmltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHR5cGUgeyBQcm9taXNhYmxlIH0gZnJvbSAndHlwZS1mZXN0JztcblxuaW1wb3J0IHR5cGUgeyBWYWx1ZVdyYXBwZXIgfSBmcm9tICcuL0FwcC50cyc7XG5cbmltcG9ydCB7XG4gIGFib3J0U2lnbmFsQW55LFxuICBhYm9ydFNpZ25hbE5ldmVyXG59IGZyb20gJy4uL0Fib3J0Q29udHJvbGxlci50cyc7XG5pbXBvcnQge1xuICBhZGRFcnJvckhhbmRsZXIsXG4gIGludm9rZUFzeW5jU2FmZWx5LFxuICBydW5XaXRoVGltZW91dFxufSBmcm9tICcuLi9Bc3luYy50cyc7XG5pbXBvcnQgeyBnZXRTdGFja1RyYWNlIH0gZnJvbSAnLi4vRXJyb3IudHMnO1xuaW1wb3J0IHsgbm9vcCB9IGZyb20gJy4uL0Z1bmN0aW9uLnRzJztcbmltcG9ydCB7IGdldE9ic2lkaWFuRGV2VXRpbHNTdGF0ZSB9IGZyb20gJy4vQXBwLnRzJztcbmltcG9ydCB7IGludm9rZUFzeW5jQW5kTG9nIH0gZnJvbSAnLi9Mb2dnZXIudHMnO1xuXG5pbnRlcmZhY2UgUXVldWUge1xuICBpdGVtczogUXVldWVJdGVtW107XG4gIHByb21pc2U6IFByb21pc2U8dm9pZD47XG59XG5cbmludGVyZmFjZSBRdWV1ZUl0ZW0ge1xuICBhYm9ydFNpZ25hbDogQWJvcnRTaWduYWw7XG4gIGZuKHRoaXM6IHZvaWQsIGFib3J0U2lnbmFsOiBBYm9ydFNpZ25hbCk6IFByb21pc2FibGU8dm9pZD47XG4gIHN0YWNrVHJhY2U6IHN0cmluZztcbiAgdGltZW91dEluTWlsbGlzZWNvbmRzOiBudW1iZXI7XG59XG5cbi8qKlxuICogQWRkcyBhbiBhc3luY2hyb25vdXMgZnVuY3Rpb24gdG8gYmUgZXhlY3V0ZWQgYWZ0ZXIgdGhlIHByZXZpb3VzIGZ1bmN0aW9uIGNvbXBsZXRlcy5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICogQHBhcmFtIGZuIC0gVGhlIGZ1bmN0aW9uIHRvIGFkZC5cbiAqIEBwYXJhbSBhYm9ydFNpZ25hbCAtIE9wdGlvbmFsIGFib3J0IHNpZ25hbC5cbiAqIEBwYXJhbSB0aW1lb3V0SW5NaWxsaXNlY29uZHMgLSBUaGUgdGltZW91dCBpbiBtaWxsaXNlY29uZHMuXG4gKiBAcGFyYW0gc3RhY2tUcmFjZSAtIE9wdGlvbmFsIHN0YWNrIHRyYWNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkVG9RdWV1ZShcbiAgYXBwOiBBcHAsXG4gIGZuOiAoYWJvcnRTaWduYWw6IEFib3J0U2lnbmFsKSA9PiBQcm9taXNhYmxlPHZvaWQ+LFxuICBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsLFxuICB0aW1lb3V0SW5NaWxsaXNlY29uZHM/OiBudW1iZXIsXG4gIHN0YWNrVHJhY2U/OiBzdHJpbmdcbik6IHZvaWQge1xuICBzdGFja1RyYWNlID8/PSBnZXRTdGFja1RyYWNlKDEpO1xuICBpbnZva2VBc3luY1NhZmVseSgoKSA9PiBhZGRUb1F1ZXVlQW5kV2FpdChhcHAsIGZuLCBhYm9ydFNpZ25hbCwgdGltZW91dEluTWlsbGlzZWNvbmRzLCBzdGFja1RyYWNlKSwgc3RhY2tUcmFjZSk7XG59XG5cbi8qKlxuICogQWRkcyBhbiBhc3luY2hyb25vdXMgZnVuY3Rpb24gdG8gYmUgZXhlY3V0ZWQgYWZ0ZXIgdGhlIHByZXZpb3VzIGZ1bmN0aW9uIGNvbXBsZXRlcyBhbmQgcmV0dXJucyBhIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGZ1bmN0aW9uIGNvbXBsZXRlcy5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICogQHBhcmFtIGZuIC0gVGhlIGZ1bmN0aW9uIHRvIGFkZC5cbiAqIEBwYXJhbSBhYm9ydFNpZ25hbCAtIE9wdGlvbmFsIGFib3J0IHNpZ25hbC5cbiAqIEBwYXJhbSB0aW1lb3V0SW5NaWxsaXNlY29uZHMgLSBUaGUgdGltZW91dCBpbiBtaWxsaXNlY29uZHMuXG4gKiBAcGFyYW0gc3RhY2tUcmFjZSAtIE9wdGlvbmFsIHN0YWNrIHRyYWNlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWRkVG9RdWV1ZUFuZFdhaXQoXG4gIGFwcDogQXBwLFxuICBmbjogKGFib3J0U2lnbmFsOiBBYm9ydFNpZ25hbCkgPT4gUHJvbWlzYWJsZTx2b2lkPixcbiAgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbCxcbiAgdGltZW91dEluTWlsbGlzZWNvbmRzPzogbnVtYmVyLFxuICBzdGFja1RyYWNlPzogc3RyaW5nXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgYWJvcnRTaWduYWwgPz89IGFib3J0U2lnbmFsTmV2ZXIoKTtcbiAgYWJvcnRTaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcblxuICBjb25zdCBERUZBVUxUX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTID0gNjAwMDA7XG4gIHRpbWVvdXRJbk1pbGxpc2Vjb25kcyA/Pz0gREVGQVVMVF9USU1FT1VUX0lOX01JTExJU0VDT05EUztcbiAgc3RhY2tUcmFjZSA/Pz0gZ2V0U3RhY2tUcmFjZSgxKTtcbiAgY29uc3QgcXVldWUgPSBnZXRRdWV1ZShhcHApLnZhbHVlO1xuICBxdWV1ZS5pdGVtcy5wdXNoKHsgYWJvcnRTaWduYWwsIGZuLCBzdGFja1RyYWNlLCB0aW1lb3V0SW5NaWxsaXNlY29uZHMgfSk7XG4gIHF1ZXVlLnByb21pc2UgPSBxdWV1ZS5wcm9taXNlLnRoZW4oKCkgPT4gcHJvY2Vzc05leHRRdWV1ZUl0ZW0oYXBwKSk7XG4gIGF3YWl0IHF1ZXVlLnByb21pc2U7XG59XG5cbi8qKlxuICogRmx1c2hlcyB0aGUgcXVldWU7XG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZsdXNoUXVldWUoYXBwOiBBcHApOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgYWRkVG9RdWV1ZUFuZFdhaXQoYXBwLCBub29wKTtcbn1cblxuZnVuY3Rpb24gZ2V0UXVldWUoYXBwOiBBcHApOiBWYWx1ZVdyYXBwZXI8UXVldWU+IHtcbiAgcmV0dXJuIGdldE9ic2lkaWFuRGV2VXRpbHNTdGF0ZShhcHAsICdxdWV1ZScsIHsgaXRlbXM6IFtdLCBwcm9taXNlOiBQcm9taXNlLnJlc29sdmUoKSB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc05leHRRdWV1ZUl0ZW0oYXBwOiBBcHApOiBQcm9taXNlPHZvaWQ+
|
|
60
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL1F1ZXVlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvblxuICpcbiAqIENvbnRhaW5zIHV0aWxpdHkgZnVuY3Rpb25zIGZvciBlbnF1ZXVpbmcgYW5kIHByb2Nlc3NpbmcgZnVuY3Rpb25zIGluIE9ic2lkaWFuLlxuICovXG5cbmltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHR5cGUgeyBQcm9taXNhYmxlIH0gZnJvbSAndHlwZS1mZXN0JztcblxuaW1wb3J0IHR5cGUgeyBWYWx1ZVdyYXBwZXIgfSBmcm9tICcuL0FwcC50cyc7XG5cbmltcG9ydCB7XG4gIGFib3J0U2lnbmFsQW55LFxuICBhYm9ydFNpZ25hbE5ldmVyXG59IGZyb20gJy4uL0Fib3J0Q29udHJvbGxlci50cyc7XG5pbXBvcnQge1xuICBhZGRFcnJvckhhbmRsZXIsXG4gIGludm9rZUFzeW5jU2FmZWx5LFxuICBydW5XaXRoVGltZW91dFxufSBmcm9tICcuLi9Bc3luYy50cyc7XG5pbXBvcnQgeyBnZXRTdGFja1RyYWNlIH0gZnJvbSAnLi4vRXJyb3IudHMnO1xuaW1wb3J0IHsgbm9vcCB9IGZyb20gJy4uL0Z1bmN0aW9uLnRzJztcbmltcG9ydCB7IGdldE9ic2lkaWFuRGV2VXRpbHNTdGF0ZSB9IGZyb20gJy4vQXBwLnRzJztcbmltcG9ydCB7IGludm9rZUFzeW5jQW5kTG9nIH0gZnJvbSAnLi9Mb2dnZXIudHMnO1xuXG5pbnRlcmZhY2UgUXVldWUge1xuICBpdGVtczogUXVldWVJdGVtW107XG4gIHByb21pc2U6IFByb21pc2U8dm9pZD47XG59XG5cbmludGVyZmFjZSBRdWV1ZUl0ZW0ge1xuICBhYm9ydFNpZ25hbDogQWJvcnRTaWduYWw7XG4gIGZuKHRoaXM6IHZvaWQsIGFib3J0U2lnbmFsOiBBYm9ydFNpZ25hbCk6IFByb21pc2FibGU8dm9pZD47XG4gIHN0YWNrVHJhY2U6IHN0cmluZztcbiAgdGltZW91dEluTWlsbGlzZWNvbmRzOiBudW1iZXI7XG59XG5cbi8qKlxuICogQWRkcyBhbiBhc3luY2hyb25vdXMgZnVuY3Rpb24gdG8gYmUgZXhlY3V0ZWQgYWZ0ZXIgdGhlIHByZXZpb3VzIGZ1bmN0aW9uIGNvbXBsZXRlcy5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICogQHBhcmFtIGZuIC0gVGhlIGZ1bmN0aW9uIHRvIGFkZC5cbiAqIEBwYXJhbSBhYm9ydFNpZ25hbCAtIE9wdGlvbmFsIGFib3J0IHNpZ25hbC5cbiAqIEBwYXJhbSB0aW1lb3V0SW5NaWxsaXNlY29uZHMgLSBUaGUgdGltZW91dCBpbiBtaWxsaXNlY29uZHMuXG4gKiBAcGFyYW0gc3RhY2tUcmFjZSAtIE9wdGlvbmFsIHN0YWNrIHRyYWNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkVG9RdWV1ZShcbiAgYXBwOiBBcHAsXG4gIGZuOiAoYWJvcnRTaWduYWw6IEFib3J0U2lnbmFsKSA9PiBQcm9taXNhYmxlPHZvaWQ+LFxuICBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsLFxuICB0aW1lb3V0SW5NaWxsaXNlY29uZHM/OiBudW1iZXIsXG4gIHN0YWNrVHJhY2U/OiBzdHJpbmdcbik6IHZvaWQge1xuICBzdGFja1RyYWNlID8/PSBnZXRTdGFja1RyYWNlKDEpO1xuICBpbnZva2VBc3luY1NhZmVseSgoKSA9PiBhZGRUb1F1ZXVlQW5kV2FpdChhcHAsIGZuLCBhYm9ydFNpZ25hbCwgdGltZW91dEluTWlsbGlzZWNvbmRzLCBzdGFja1RyYWNlKSwgc3RhY2tUcmFjZSk7XG59XG5cbi8qKlxuICogQWRkcyBhbiBhc3luY2hyb25vdXMgZnVuY3Rpb24gdG8gYmUgZXhlY3V0ZWQgYWZ0ZXIgdGhlIHByZXZpb3VzIGZ1bmN0aW9uIGNvbXBsZXRlcyBhbmQgcmV0dXJucyBhIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGZ1bmN0aW9uIGNvbXBsZXRlcy5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICogQHBhcmFtIGZuIC0gVGhlIGZ1bmN0aW9uIHRvIGFkZC5cbiAqIEBwYXJhbSBhYm9ydFNpZ25hbCAtIE9wdGlvbmFsIGFib3J0IHNpZ25hbC5cbiAqIEBwYXJhbSB0aW1lb3V0SW5NaWxsaXNlY29uZHMgLSBUaGUgdGltZW91dCBpbiBtaWxsaXNlY29uZHMuXG4gKiBAcGFyYW0gc3RhY2tUcmFjZSAtIE9wdGlvbmFsIHN0YWNrIHRyYWNlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWRkVG9RdWV1ZUFuZFdhaXQoXG4gIGFwcDogQXBwLFxuICBmbjogKGFib3J0U2lnbmFsOiBBYm9ydFNpZ25hbCkgPT4gUHJvbWlzYWJsZTx2b2lkPixcbiAgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbCxcbiAgdGltZW91dEluTWlsbGlzZWNvbmRzPzogbnVtYmVyLFxuICBzdGFja1RyYWNlPzogc3RyaW5nXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgYWJvcnRTaWduYWwgPz89IGFib3J0U2lnbmFsTmV2ZXIoKTtcbiAgYWJvcnRTaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcblxuICBjb25zdCBERUZBVUxUX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTID0gNjAwMDA7XG4gIHRpbWVvdXRJbk1pbGxpc2Vjb25kcyA/Pz0gREVGQVVMVF9USU1FT1VUX0lOX01JTExJU0VDT05EUztcbiAgc3RhY2tUcmFjZSA/Pz0gZ2V0U3RhY2tUcmFjZSgxKTtcbiAgY29uc3QgcXVldWUgPSBnZXRRdWV1ZShhcHApLnZhbHVlO1xuICBxdWV1ZS5pdGVtcy5wdXNoKHsgYWJvcnRTaWduYWwsIGZuLCBzdGFja1RyYWNlLCB0aW1lb3V0SW5NaWxsaXNlY29uZHMgfSk7XG4gIHF1ZXVlLnByb21pc2UgPSBxdWV1ZS5wcm9taXNlLnRoZW4oKCkgPT4gcHJvY2Vzc05leHRRdWV1ZUl0ZW0oYXBwKSk7XG4gIGF3YWl0IHF1ZXVlLnByb21pc2U7XG59XG5cbi8qKlxuICogRmx1c2hlcyB0aGUgcXVldWU7XG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZsdXNoUXVldWUoYXBwOiBBcHApOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgYWRkVG9RdWV1ZUFuZFdhaXQoYXBwLCBub29wKTtcbn1cblxuZnVuY3Rpb24gZ2V0UXVldWUoYXBwOiBBcHApOiBWYWx1ZVdyYXBwZXI8UXVldWU+IHtcbiAgcmV0dXJuIGdldE9ic2lkaWFuRGV2VXRpbHNTdGF0ZShhcHAsICdxdWV1ZScsIHsgaXRlbXM6IFtdLCBwcm9taXNlOiBQcm9taXNlLnJlc29sdmUoKSB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc05leHRRdWV1ZUl0ZW0oYXBwOiBBcHApOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgcXVldWUgPSBnZXRRdWV1ZShhcHApLnZhbHVlO1xuICBjb25zdCBpdGVtID0gcXVldWUuaXRlbXNbMF07XG4gIGlmICghaXRlbSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGF3YWl0IGFkZEVycm9ySGFuZGxlcigoKSA9PlxuICAgIHJ1bldpdGhUaW1lb3V0KFxuICAgICAgaXRlbS50aW1lb3V0SW5NaWxsaXNlY29uZHMsXG4gICAgICAoYWJvcnRTaWduYWw6IEFib3J0U2lnbmFsKSA9PiBpbnZva2VBc3luY0FuZExvZyhwcm9jZXNzTmV4dFF1ZXVlSXRlbS5uYW1lLCBpdGVtLmZuLCBhYm9ydFNpZ25hbEFueShhYm9ydFNpZ25hbCwgaXRlbS5hYm9ydFNpZ25hbCksIGl0ZW0uc3RhY2tUcmFjZSksXG4gICAgICB7IHF1ZXVlZEZuOiBpdGVtLmZuIH1cbiAgICApLCBpdGVtLnN0YWNrVHJhY2UpO1xuICBxdWV1ZS5pdGVtcy5zaGlmdCgpO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7OztBQVdBO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1A7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyxxQkFBcUI7QUFDOUIsU0FBUyxZQUFZO0FBQ3JCLFNBQVMsZ0NBQWdDO0FBQ3pDLFNBQVMseUJBQXlCO0FBdUIzQixTQUFTLFdBQ2QsS0FDQSxJQUNBLGFBQ0EsdUJBQ0EsWUFDTTtBQUNOLGlCQUFlLGNBQWMsQ0FBQztBQUM5QixvQkFBa0IsTUFBTSxrQkFBa0IsS0FBSyxJQUFJLGFBQWEsdUJBQXVCLFVBQVUsR0FBRyxVQUFVO0FBQ2hIO0FBV0EsZUFBc0Isa0JBQ3BCLEtBQ0EsSUFDQSxhQUNBLHVCQUNBLFlBQ2U7QUFDZixrQkFBZ0IsaUJBQWlCO0FBQ2pDLGNBQVksZUFBZTtBQUUzQixRQUFNLGtDQUFrQztBQUN4Qyw0QkFBMEI7QUFDMUIsaUJBQWUsY0FBYyxDQUFDO0FBQzlCLFFBQU0sUUFBUSxTQUFTLEdBQUcsRUFBRTtBQUM1QixRQUFNLE1BQU0sS0FBSyxFQUFFLGFBQWEsSUFBSSxZQUFZLHNCQUFzQixDQUFDO0FBQ3ZFLFFBQU0sVUFBVSxNQUFNLFFBQVEsS0FBSyxNQUFNLHFCQUFxQixHQUFHLENBQUM7QUFDbEUsUUFBTSxNQUFNO0FBQ2Q7QUFPQSxlQUFzQixXQUFXLEtBQXlCO0FBQ3hELFFBQU0sa0JBQWtCLEtBQUssSUFBSTtBQUNuQztBQUVBLFNBQVMsU0FBUyxLQUErQjtBQUMvQyxTQUFPLHlCQUF5QixLQUFLLFNBQVMsRUFBRSxPQUFPLENBQUMsR0FBRyxTQUFTLFFBQVEsUUFBUSxFQUFFLENBQUM7QUFDekY7QUFFQSxlQUFlLHFCQUFxQixLQUF5QjtBQUMzRCxRQUFNLFFBQVEsU0FBUyxHQUFHLEVBQUU7QUFDNUIsUUFBTSxPQUFPLE1BQU0sTUFBTSxDQUFDO0FBQzFCLE1BQUksQ0FBQyxNQUFNO0FBQ1Q7QUFBQSxFQUNGO0FBRUEsUUFBTSxnQkFBZ0IsTUFDcEI7QUFBQSxJQUNFLEtBQUs7QUFBQSxJQUNMLENBQUMsZ0JBQTZCLGtCQUFrQixxQkFBcUIsTUFBTSxLQUFLLElBQUksZUFBZSxhQUFhLEtBQUssV0FBVyxHQUFHLEtBQUssVUFBVTtBQUFBLElBQ2xKLEVBQUUsVUFBVSxLQUFLLEdBQUc7QUFBQSxFQUN0QixHQUFHLEtBQUssVUFBVTtBQUNwQixRQUFNLE1BQU0sTUFBTTtBQUNwQjsiLAogICJuYW1lcyI6IFtdCn0K
|