inspector-ng 0.0.9 → 0.0.11
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/README.md +2 -2
- package/esm2022/lib/checkpoint-search.mjs +4 -6
- package/esm2022/lib/checkpoints.mjs +25 -8
- package/esm2022/lib/inspector.component.mjs +7 -5
- package/esm2022/lib/utils.mjs +32 -1
- package/fesm2022/inspector-ng.mjs +62 -15
- package/fesm2022/inspector-ng.mjs.map +1 -1
- package/lib/checkpoints.d.ts +3 -0
- package/lib/inspector.component.d.ts +3 -1
- package/lib/utils.d.ts +2 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -54,7 +54,7 @@ Place `<inspector-overlay>` in your root template (e.g. `app.component.html`). I
|
|
|
54
54
|
|
|
55
55
|
### Step 3: Press `M` to toggle the inspector
|
|
56
56
|
|
|
57
|
-
That's it. Press **`
|
|
57
|
+
That's it. Press **`Ctrl/Cmd + Shift + P`** in your browser to open the Inspector command palette. No further configuration is required.
|
|
58
58
|
|
|
59
59
|
## Configuration
|
|
60
60
|
|
|
@@ -74,7 +74,7 @@ export const appConfig: ApplicationConfig = {
|
|
|
74
74
|
};
|
|
75
75
|
```
|
|
76
76
|
|
|
77
|
-
Use the compact
|
|
77
|
+
Use the compact Save action in the command palette to capture the current JSON-serializable NgRx root state immediately. `Ctrl/Cmd+Shift+P` opens the fuzzy checkpoint finder. `F2` renames the selected record and `Delete` opens inline confirmation.
|
|
78
78
|
|
|
79
79
|
Records are stored per origin in IndexedDB database `inspector-ng`, object store `checkpoints`. This needs no browser permission prompt and does not map to a visible or fixed OS path. Nothing is evicted automatically. Existing `inspector-checkpoints-v1` localStorage records are deliberately ignored.
|
|
80
80
|
|
|
@@ -1,14 +1,15 @@
|
|
|
1
|
+
import { recentActivityFirst, } from './checkpoints';
|
|
1
2
|
export function fuzzyCheckpoints(checkpoints, query) {
|
|
2
3
|
const normalizedQuery = normalize(query.trim());
|
|
3
4
|
if (!normalizedQuery)
|
|
4
|
-
return [...checkpoints].sort(
|
|
5
|
+
return [...checkpoints].sort(recentActivityFirst);
|
|
5
6
|
return checkpoints
|
|
6
7
|
.map((checkpoint) => {
|
|
7
8
|
const score = fuzzyScore(checkpoint.name, normalizedQuery);
|
|
8
9
|
return score === null ? null : { checkpoint, score };
|
|
9
10
|
})
|
|
10
11
|
.filter((item) => item !== null)
|
|
11
|
-
.sort((a, b) => b.score - a.score ||
|
|
12
|
+
.sort((a, b) => b.score - a.score || recentActivityFirst(a.checkpoint, b.checkpoint))
|
|
12
13
|
.map(({ checkpoint }) => checkpoint);
|
|
13
14
|
}
|
|
14
15
|
export function fuzzyScore(value, normalizedQuery) {
|
|
@@ -44,7 +45,4 @@ function normalize(value) {
|
|
|
44
45
|
.replace(/[\u0300-\u036f]/g, '')
|
|
45
46
|
.toLocaleLowerCase();
|
|
46
47
|
}
|
|
47
|
-
|
|
48
|
-
return b.createdAt.localeCompare(a.createdAt) || b.id.localeCompare(a.id);
|
|
49
|
-
}
|
|
50
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2twb2ludC1zZWFyY2guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9pbnNwZWN0b3Itbmcvc3JjL2xpYi9jaGVja3BvaW50LXNlYXJjaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFPQSxNQUFNLFVBQVUsZ0JBQWdCLENBQzlCLFdBQXdDLEVBQ3hDLEtBQWE7SUFFYixNQUFNLGVBQWUsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDaEQsSUFBSSxDQUFDLGVBQWU7UUFBRSxPQUFPLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFFaEUsT0FBTyxXQUFXO1NBQ2YsR0FBRyxDQUFDLENBQUMsVUFBVSxFQUEyQixFQUFFO1FBQzNDLE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBQzNELE9BQU8sS0FBSyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsQ0FBQztJQUN2RCxDQUFDLENBQUM7U0FDRCxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQTRCLEVBQUUsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDO1NBQ3pELElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxXQUFXLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDNUUsR0FBRyxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDekMsQ0FBQztBQUVELE1BQU0sVUFBVSxVQUFVLENBQUMsS0FBYSxFQUFFLGVBQXVCO0lBQy9ELE1BQU0sU0FBUyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuQyxJQUFJLFNBQVMsS0FBSyxlQUFlO1FBQUUsT0FBTyxNQUFNLENBQUM7SUFDakQsSUFBSSxTQUFTLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQztRQUFFLE9BQU8sS0FBSyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUM7SUFFM0UsTUFBTSxjQUFjLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUMxRCxJQUFJLGNBQWMsSUFBSSxDQUFDO1FBQUUsT0FBTyxLQUFLLEdBQUcsY0FBYyxHQUFHLEVBQUUsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDO0lBRS9FLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQztJQUNuQixJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNwQixJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNuQixJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUM7SUFDbkIsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLFNBQVMsQ0FBQyxNQUFNLElBQUksVUFBVSxHQUFHLGVBQWUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ2hHLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxLQUFLLGVBQWUsQ0FBQyxVQUFVLENBQUM7WUFBRSxTQUFTO1FBQy9ELElBQUksVUFBVSxHQUFHLENBQUM7WUFBRSxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ3ZDLElBQUksU0FBUyxJQUFJLENBQUM7WUFBRSxVQUFVLElBQUksS0FBSyxHQUFHLFNBQVMsR0FBRyxDQUFDLENBQUM7UUFDeEQsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUNsQixVQUFVLElBQUksQ0FBQyxDQUFDO0lBQ2xCLENBQUM7SUFDRCxJQUFJLFVBQVUsS0FBSyxlQUFlLENBQUMsTUFBTTtRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQ3ZELE9BQU8sS0FBSyxHQUFHLFVBQVUsR0FBRyxFQUFFLEdBQUcsVUFBVSxHQUFHLEVBQUUsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDO0FBQ3RFLENBQUM7QUFFRCxTQUFTLFNBQVMsQ0FBQyxLQUFhO0lBQzlCLE9BQU8sS0FBSztTQUNULFNBQVMsQ0FBQyxNQUFNLENBQUM7U0FDakIsT0FBTyxDQUFDLGtCQUFrQixFQUFFLEVBQUUsQ0FBQztTQUMvQixpQkFBaUIsRUFBRSxDQUFDO0FBQ3pCLENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxDQUE0QixFQUFFLENBQTRCO0lBQzdFLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM1RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5zcGVjdG9yQ2hlY2twb2ludFJlY29yZCB9IGZyb20gJy4vY2hlY2twb2ludHMnO1xuXG5pbnRlcmZhY2UgUmFua2VkQ2hlY2twb2ludCB7XG4gIGNoZWNrcG9pbnQ6IEluc3BlY3RvckNoZWNrcG9pbnRSZWNvcmQ7XG4gIHNjb3JlOiBudW1iZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmdXp6eUNoZWNrcG9pbnRzKFxuICBjaGVja3BvaW50czogSW5zcGVjdG9yQ2hlY2twb2ludFJlY29yZFtdLFxuICBxdWVyeTogc3RyaW5nLFxuKTogSW5zcGVjdG9yQ2hlY2twb2ludFJlY29yZFtdIHtcbiAgY29uc3Qgbm9ybWFsaXplZFF1ZXJ5ID0gbm9ybWFsaXplKHF1ZXJ5LnRyaW0oKSk7XG4gIGlmICghbm9ybWFsaXplZFF1ZXJ5KSByZXR1cm4gWy4uLmNoZWNrcG9pbnRzXS5zb3J0KG5ld2VzdEZpcnN0KTtcblxuICByZXR1cm4gY2hlY2twb2ludHNcbiAgICAubWFwKChjaGVja3BvaW50KTogUmFua2VkQ2hlY2twb2ludCB8IG51bGwgPT4ge1xuICAgICAgY29uc3Qgc2NvcmUgPSBmdXp6eVNjb3JlKGNoZWNrcG9pbnQubmFtZSwgbm9ybWFsaXplZFF1ZXJ5KTtcbiAgICAgIHJldHVybiBzY29yZSA9PT0gbnVsbCA/IG51bGwgOiB7IGNoZWNrcG9pbnQsIHNjb3JlIH07XG4gICAgfSlcbiAgICAuZmlsdGVyKChpdGVtKTogaXRlbSBpcyBSYW5rZWRDaGVja3BvaW50ID0+IGl0ZW0gIT09IG51bGwpXG4gICAgLnNvcnQoKGEsIGIpID0+IGIuc2NvcmUgLSBhLnNjb3JlIHx8IG5ld2VzdEZpcnN0KGEuY2hlY2twb2ludCwgYi5jaGVja3BvaW50KSlcbiAgICAubWFwKCh7IGNoZWNrcG9pbnQgfSkgPT4gY2hlY2twb2ludCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmdXp6eVNjb3JlKHZhbHVlOiBzdHJpbmcsIG5vcm1hbGl6ZWRRdWVyeTogc3RyaW5nKTogbnVtYmVyIHwgbnVsbCB7XG4gIGNvbnN0IGNhbmRpZGF0ZSA9IG5vcm1hbGl6ZSh2YWx1ZSk7XG4gIGlmIChjYW5kaWRhdGUgPT09IG5vcm1hbGl6ZWRRdWVyeSkgcmV0dXJuIDEwXzAwMDtcbiAgaWYgKGNhbmRpZGF0ZS5zdGFydHNXaXRoKG5vcm1hbGl6ZWRRdWVyeSkpIHJldHVybiA4XzAwMCAtIGNhbmRpZGF0ZS5sZW5ndGg7XG5cbiAgY29uc3Qgc3Vic3RyaW5nSW5kZXggPSBjYW5kaWRhdGUuaW5kZXhPZihub3JtYWxpemVkUXVlcnkpO1xuICBpZiAoc3Vic3RyaW5nSW5kZXggPj0gMCkgcmV0dXJuIDZfMDAwIC0gc3Vic3RyaW5nSW5kZXggKiAxMCAtIGNhbmRpZGF0ZS5sZW5ndGg7XG5cbiAgbGV0IHF1ZXJ5SW5kZXggPSAwO1xuICBsZXQgZmlyc3RJbmRleCA9IC0xO1xuICBsZXQgbGFzdEluZGV4ID0gLTE7XG4gIGxldCBnYXBQZW5hbHR5ID0gMDtcbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGNhbmRpZGF0ZS5sZW5ndGggJiYgcXVlcnlJbmRleCA8IG5vcm1hbGl6ZWRRdWVyeS5sZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICBpZiAoY2FuZGlkYXRlW2luZGV4XSAhPT0gbm9ybWFsaXplZFF1ZXJ5W3F1ZXJ5SW5kZXhdKSBjb250aW51ZTtcbiAgICBpZiAoZmlyc3RJbmRleCA8IDApIGZpcnN0SW5kZXggPSBpbmRleDtcbiAgICBpZiAobGFzdEluZGV4ID49IDApIGdhcFBlbmFsdHkgKz0gaW5kZXggLSBsYXN0SW5kZXggLSAxO1xuICAgIGxhc3RJbmRleCA9IGluZGV4O1xuICAgIHF1ZXJ5SW5kZXggKz0gMTtcbiAgfVxuICBpZiAocXVlcnlJbmRleCAhPT0gbm9ybWFsaXplZFF1ZXJ5Lmxlbmd0aCkgcmV0dXJuIG51bGw7XG4gIHJldHVybiA0XzAwMCAtIGZpcnN0SW5kZXggKiAxMCAtIGdhcFBlbmFsdHkgKiAyMCAtIGNhbmRpZGF0ZS5sZW5ndGg7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZSh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHZhbHVlXG4gICAgLm5vcm1hbGl6ZSgnTkZLRCcpXG4gICAgLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csICcnKVxuICAgIC50b0xvY2FsZUxvd2VyQ2FzZSgpO1xufVxuXG5mdW5jdGlvbiBuZXdlc3RGaXJzdChhOiBJbnNwZWN0b3JDaGVja3BvaW50UmVjb3JkLCBiOiBJbnNwZWN0b3JDaGVja3BvaW50UmVjb3JkKTogbnVtYmVyIHtcbiAgcmV0dXJuIGIuY3JlYXRlZEF0LmxvY2FsZUNvbXBhcmUoYS5jcmVhdGVkQXQpIHx8IGIuaWQubG9jYWxlQ29tcGFyZShhLmlkKTtcbn1cbiJdfQ==
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2twb2ludC1zZWFyY2guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9pbnNwZWN0b3Itbmcvc3JjL2xpYi9jaGVja3BvaW50LXNlYXJjaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsbUJBQW1CLEdBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBT3ZCLE1BQU0sVUFBVSxnQkFBZ0IsQ0FDOUIsV0FBd0MsRUFDeEMsS0FBYTtJQUViLE1BQU0sZUFBZSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNoRCxJQUFJLENBQUMsZUFBZTtRQUFFLE9BQU8sQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBRXhFLE9BQU8sV0FBVztTQUNmLEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBMkIsRUFBRTtRQUMzQyxNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxlQUFlLENBQUMsQ0FBQztRQUMzRCxPQUFPLEtBQUssS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFDdkQsQ0FBQyxDQUFDO1NBQ0QsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUE0QixFQUFFLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQztTQUN6RCxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksbUJBQW1CLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDcEYsR0FBRyxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDekMsQ0FBQztBQUVELE1BQU0sVUFBVSxVQUFVLENBQUMsS0FBYSxFQUFFLGVBQXVCO0lBQy9ELE1BQU0sU0FBUyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuQyxJQUFJLFNBQVMsS0FBSyxlQUFlO1FBQUUsT0FBTyxNQUFNLENBQUM7SUFDakQsSUFBSSxTQUFTLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQztRQUFFLE9BQU8sS0FBSyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUM7SUFFM0UsTUFBTSxjQUFjLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUMxRCxJQUFJLGNBQWMsSUFBSSxDQUFDO1FBQUUsT0FBTyxLQUFLLEdBQUcsY0FBYyxHQUFHLEVBQUUsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDO0lBRS9FLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQztJQUNuQixJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNwQixJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNuQixJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUM7SUFDbkIsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLFNBQVMsQ0FBQyxNQUFNLElBQUksVUFBVSxHQUFHLGVBQWUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ2hHLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxLQUFLLGVBQWUsQ0FBQyxVQUFVLENBQUM7WUFBRSxTQUFTO1FBQy9ELElBQUksVUFBVSxHQUFHLENBQUM7WUFBRSxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ3ZDLElBQUksU0FBUyxJQUFJLENBQUM7WUFBRSxVQUFVLElBQUksS0FBSyxHQUFHLFNBQVMsR0FBRyxDQUFDLENBQUM7UUFDeEQsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUNsQixVQUFVLElBQUksQ0FBQyxDQUFDO0lBQ2xCLENBQUM7SUFDRCxJQUFJLFVBQVUsS0FBSyxlQUFlLENBQUMsTUFBTTtRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQ3ZELE9BQU8sS0FBSyxHQUFHLFVBQVUsR0FBRyxFQUFFLEdBQUcsVUFBVSxHQUFHLEVBQUUsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDO0FBQ3RFLENBQUM7QUFFRCxTQUFTLFNBQVMsQ0FBQyxLQUFhO0lBQzlCLE9BQU8sS0FBSztTQUNULFNBQVMsQ0FBQyxNQUFNLENBQUM7U0FDakIsT0FBTyxDQUFDLGtCQUFrQixFQUFFLEVBQUUsQ0FBQztTQUMvQixpQkFBaUIsRUFBRSxDQUFDO0FBQ3pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBJbnNwZWN0b3JDaGVja3BvaW50UmVjb3JkLFxuICByZWNlbnRBY3Rpdml0eUZpcnN0LFxufSBmcm9tICcuL2NoZWNrcG9pbnRzJztcblxuaW50ZXJmYWNlIFJhbmtlZENoZWNrcG9pbnQge1xuICBjaGVja3BvaW50OiBJbnNwZWN0b3JDaGVja3BvaW50UmVjb3JkO1xuICBzY29yZTogbnVtYmVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnV6enlDaGVja3BvaW50cyhcbiAgY2hlY2twb2ludHM6IEluc3BlY3RvckNoZWNrcG9pbnRSZWNvcmRbXSxcbiAgcXVlcnk6IHN0cmluZyxcbik6IEluc3BlY3RvckNoZWNrcG9pbnRSZWNvcmRbXSB7XG4gIGNvbnN0IG5vcm1hbGl6ZWRRdWVyeSA9IG5vcm1hbGl6ZShxdWVyeS50cmltKCkpO1xuICBpZiAoIW5vcm1hbGl6ZWRRdWVyeSkgcmV0dXJuIFsuLi5jaGVja3BvaW50c10uc29ydChyZWNlbnRBY3Rpdml0eUZpcnN0KTtcblxuICByZXR1cm4gY2hlY2twb2ludHNcbiAgICAubWFwKChjaGVja3BvaW50KTogUmFua2VkQ2hlY2twb2ludCB8IG51bGwgPT4ge1xuICAgICAgY29uc3Qgc2NvcmUgPSBmdXp6eVNjb3JlKGNoZWNrcG9pbnQubmFtZSwgbm9ybWFsaXplZFF1ZXJ5KTtcbiAgICAgIHJldHVybiBzY29yZSA9PT0gbnVsbCA/IG51bGwgOiB7IGNoZWNrcG9pbnQsIHNjb3JlIH07XG4gICAgfSlcbiAgICAuZmlsdGVyKChpdGVtKTogaXRlbSBpcyBSYW5rZWRDaGVja3BvaW50ID0+IGl0ZW0gIT09IG51bGwpXG4gICAgLnNvcnQoKGEsIGIpID0+IGIuc2NvcmUgLSBhLnNjb3JlIHx8IHJlY2VudEFjdGl2aXR5Rmlyc3QoYS5jaGVja3BvaW50LCBiLmNoZWNrcG9pbnQpKVxuICAgIC5tYXAoKHsgY2hlY2twb2ludCB9KSA9PiBjaGVja3BvaW50KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZ1enp5U2NvcmUodmFsdWU6IHN0cmluZywgbm9ybWFsaXplZFF1ZXJ5OiBzdHJpbmcpOiBudW1iZXIgfCBudWxsIHtcbiAgY29uc3QgY2FuZGlkYXRlID0gbm9ybWFsaXplKHZhbHVlKTtcbiAgaWYgKGNhbmRpZGF0ZSA9PT0gbm9ybWFsaXplZFF1ZXJ5KSByZXR1cm4gMTBfMDAwO1xuICBpZiAoY2FuZGlkYXRlLnN0YXJ0c1dpdGgobm9ybWFsaXplZFF1ZXJ5KSkgcmV0dXJuIDhfMDAwIC0gY2FuZGlkYXRlLmxlbmd0aDtcblxuICBjb25zdCBzdWJzdHJpbmdJbmRleCA9IGNhbmRpZGF0ZS5pbmRleE9mKG5vcm1hbGl6ZWRRdWVyeSk7XG4gIGlmIChzdWJzdHJpbmdJbmRleCA+PSAwKSByZXR1cm4gNl8wMDAgLSBzdWJzdHJpbmdJbmRleCAqIDEwIC0gY2FuZGlkYXRlLmxlbmd0aDtcblxuICBsZXQgcXVlcnlJbmRleCA9IDA7XG4gIGxldCBmaXJzdEluZGV4ID0gLTE7XG4gIGxldCBsYXN0SW5kZXggPSAtMTtcbiAgbGV0IGdhcFBlbmFsdHkgPSAwO1xuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgY2FuZGlkYXRlLmxlbmd0aCAmJiBxdWVyeUluZGV4IDwgbm9ybWFsaXplZFF1ZXJ5Lmxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgIGlmIChjYW5kaWRhdGVbaW5kZXhdICE9PSBub3JtYWxpemVkUXVlcnlbcXVlcnlJbmRleF0pIGNvbnRpbnVlO1xuICAgIGlmIChmaXJzdEluZGV4IDwgMCkgZmlyc3RJbmRleCA9IGluZGV4O1xuICAgIGlmIChsYXN0SW5kZXggPj0gMCkgZ2FwUGVuYWx0eSArPSBpbmRleCAtIGxhc3RJbmRleCAtIDE7XG4gICAgbGFzdEluZGV4ID0gaW5kZXg7XG4gICAgcXVlcnlJbmRleCArPSAxO1xuICB9XG4gIGlmIChxdWVyeUluZGV4ICE9PSBub3JtYWxpemVkUXVlcnkubGVuZ3RoKSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIDRfMDAwIC0gZmlyc3RJbmRleCAqIDEwIC0gZ2FwUGVuYWx0eSAqIDIwIC0gY2FuZGlkYXRlLmxlbmd0aDtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdmFsdWVcbiAgICAubm9ybWFsaXplKCdORktEJylcbiAgICAucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgJycpXG4gICAgLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG59XG4iXX0=
|
|
@@ -32,7 +32,7 @@ export class IndexedDbCheckpointRepository extends InspectorCheckpointRepository
|
|
|
32
32
|
const values = await this.request(database.transaction(STORE_NAME, 'readonly').objectStore(STORE_NAME).getAll());
|
|
33
33
|
return values
|
|
34
34
|
.filter(isCheckpointRecord)
|
|
35
|
-
.sort(
|
|
35
|
+
.sort(recentActivityFirst);
|
|
36
36
|
}
|
|
37
37
|
async put(checkpoint) {
|
|
38
38
|
const database = await this.database();
|
|
@@ -102,7 +102,7 @@ export class InspectorCheckpointService {
|
|
|
102
102
|
this.error.set(null);
|
|
103
103
|
this.loading.set(true);
|
|
104
104
|
try {
|
|
105
|
-
this.checkpoints.set((await this.repository.list()).sort(
|
|
105
|
+
this.checkpoints.set((await this.repository.list()).sort(recentActivityFirst));
|
|
106
106
|
}
|
|
107
107
|
catch (error) {
|
|
108
108
|
this.error.set(this.messageFor(error, 'Saved checkpoints could not be loaded. Try reloading the page.'));
|
|
@@ -133,7 +133,7 @@ export class InspectorCheckpointService {
|
|
|
133
133
|
state,
|
|
134
134
|
};
|
|
135
135
|
await this.repository.put(checkpoint);
|
|
136
|
-
this.checkpoints.set([checkpoint, ...persisted].sort(
|
|
136
|
+
this.checkpoints.set([checkpoint, ...persisted].sort(recentActivityFirst));
|
|
137
137
|
return checkpoint;
|
|
138
138
|
}
|
|
139
139
|
catch (error) {
|
|
@@ -152,7 +152,8 @@ export class InspectorCheckpointService {
|
|
|
152
152
|
}
|
|
153
153
|
this.busy.set(true);
|
|
154
154
|
try {
|
|
155
|
-
const
|
|
155
|
+
const checkpoints = await this.repository.list();
|
|
156
|
+
const checkpoint = checkpoints.find((item) => item.id === id);
|
|
156
157
|
if (!checkpoint)
|
|
157
158
|
throw new Error('Checkpoint not found. It may have been deleted in another tab.');
|
|
158
159
|
const state = cloneJson(checkpoint.state, `“${checkpoint.name}” could not be decoded. Delete it and save a new checkpoint.`);
|
|
@@ -160,6 +161,14 @@ export class InspectorCheckpointService {
|
|
|
160
161
|
if (this.router && !await this.router.navigateByUrl(checkpoint.route)) {
|
|
161
162
|
throw new Error(`The state was restored, but navigation to “${checkpoint.route}” was cancelled.`);
|
|
162
163
|
}
|
|
164
|
+
const recentlyUsedCheckpoint = {
|
|
165
|
+
...checkpoint,
|
|
166
|
+
lastUsedAt: new Date().toISOString(),
|
|
167
|
+
};
|
|
168
|
+
await this.repository.put(recentlyUsedCheckpoint);
|
|
169
|
+
this.checkpoints.set(checkpoints
|
|
170
|
+
.map((item) => item.id === id ? recentlyUsedCheckpoint : item)
|
|
171
|
+
.sort(recentActivityFirst));
|
|
163
172
|
return true;
|
|
164
173
|
}
|
|
165
174
|
catch (error) {
|
|
@@ -187,7 +196,7 @@ export class InspectorCheckpointService {
|
|
|
187
196
|
if (!checkpoint)
|
|
188
197
|
throw new Error('Checkpoint not found. It may have been deleted in another tab.');
|
|
189
198
|
await this.repository.put({ ...checkpoint, name: nextName });
|
|
190
|
-
this.checkpoints.set(checkpoints.map((item) => item.id === id ? { ...item, name: nextName } : item).sort(
|
|
199
|
+
this.checkpoints.set(checkpoints.map((item) => item.id === id ? { ...item, name: nextName } : item).sort(recentActivityFirst));
|
|
191
200
|
return true;
|
|
192
201
|
}
|
|
193
202
|
catch (error) {
|
|
@@ -306,8 +315,15 @@ function createCheckpointId() {
|
|
|
306
315
|
function isQuotaError(error) {
|
|
307
316
|
return error instanceof DOMException && (error.name === 'QuotaExceededError' || error.name === 'NS_ERROR_DOM_QUOTA_REACHED');
|
|
308
317
|
}
|
|
309
|
-
function
|
|
310
|
-
return
|
|
318
|
+
export function checkpointActivityAt(checkpoint) {
|
|
319
|
+
return checkpoint.lastUsedAt && checkpoint.lastUsedAt > checkpoint.createdAt
|
|
320
|
+
? checkpoint.lastUsedAt
|
|
321
|
+
: checkpoint.createdAt;
|
|
322
|
+
}
|
|
323
|
+
export function recentActivityFirst(a, b) {
|
|
324
|
+
return checkpointActivityAt(b).localeCompare(checkpointActivityAt(a)) ||
|
|
325
|
+
b.createdAt.localeCompare(a.createdAt) ||
|
|
326
|
+
b.id.localeCompare(a.id);
|
|
311
327
|
}
|
|
312
328
|
function isCheckpointRecord(value) {
|
|
313
329
|
if (!value || typeof value !== 'object')
|
|
@@ -318,6 +334,7 @@ function isCheckpointRecord(value) {
|
|
|
318
334
|
typeof checkpoint.name === 'string' &&
|
|
319
335
|
typeof checkpoint.route === 'string' &&
|
|
320
336
|
typeof checkpoint.createdAt === 'string' &&
|
|
337
|
+
(checkpoint.lastUsedAt === undefined || typeof checkpoint.lastUsedAt === 'string') &&
|
|
321
338
|
'state' in checkpoint;
|
|
322
339
|
}
|
|
323
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2twb2ludHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9pbnNwZWN0b3Itbmcvc3JjL2xpYi9jaGVja3BvaW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsTUFBTSxFQUNOLFVBQVUsRUFDVixjQUFjLEVBQ2QsUUFBUSxFQUNSLFdBQVcsRUFDWCx3QkFBd0IsRUFDeEIsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBR0wsYUFBYSxFQUNiLEtBQUssR0FDTixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQzs7OztBQWdCNUMsTUFBTSxrQkFBa0IsR0FBRyxpQ0FBaUMsQ0FBQztBQUM3RCxNQUFNLGFBQWEsR0FBRyxjQUFjLENBQUM7QUFDckMsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7QUFDM0IsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFDO0FBRWpDLE1BQU0sQ0FBQyxNQUFNLCtCQUErQixHQUMxQyxJQUFJLGNBQWMsQ0FBZ0MsaUNBQWlDLENBQUMsQ0FBQztBQUV2RixNQUFNLFVBQVUsOEJBQThCLENBQzVDLE9BQXlCO0lBRXpCLE9BQU8sQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDdkIsSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLGtCQUFrQixFQUFFLENBQUM7WUFDdkMsT0FBUSxNQUFrQyxDQUFDLEtBQVUsQ0FBQztRQUN4RCxDQUFDO1FBQ0QsT0FBTyxPQUFPLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLE9BQWdCLDZCQUE2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dXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEVudmlyb25tZW50UHJvdmlkZXJzLFxuICBJbmplY3QsXG4gIEluamVjdGFibGUsXG4gIEluamVjdGlvblRva2VuLFxuICBPcHRpb25hbCxcbiAgUExBVEZPUk1fSUQsXG4gIG1ha2VFbnZpcm9ubWVudFByb3ZpZGVycyxcbiAgc2lnbmFsLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1xuICBBY3Rpb24sXG4gIEFjdGlvblJlZHVjZXIsXG4gIE1FVEFfUkVEVUNFUlMsXG4gIFN0b3JlLFxufSBmcm9tICdAbmdyeC9zdG9yZSc7XG5pbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSwgdGFrZSB9IGZyb20gJ3J4anMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEluc3BlY3RvckNoZWNrcG9pbnRSZWNvcmQge1xuICB2ZXJzaW9uOiAxO1xuICBpZDogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIHJvdXRlOiBzdHJpbmc7XG4gIGNyZWF0ZWRBdDogc3RyaW5nO1xuICBzdGF0ZTogdW5rbm93bjtcbn1cblxuaW50ZXJmYWNlIFJlc3RvcmVDaGVja3BvaW50QWN0aW9uIGV4dGVuZHMgQWN0aW9uIHtcbiAgdHlwZTogdHlwZW9mIFJFU1RPUkVfQ0hFQ0tQT0lOVDtcbiAgc3RhdGU6IHVua25vd247XG59XG5cbmNvbnN0IFJFU1RPUkVfQ0hFQ0tQT0lOVCA9ICdbSW5zcGVjdG9yIENoZWNrcG9pbnRzXSBSZXN0b3JlJztcbmNvbnN0IERBVEFCQVNFX05BTUUgPSAnaW5zcGVjdG9yLW5nJztcbmNvbnN0IERBVEFCQVNFX1ZFUlNJT04gPSAxO1xuY29uc3QgU1RPUkVfTkFNRSA9ICdjaGVja3BvaW50cyc7XG5cbmV4cG9ydCBjb25zdCBJTlNQRUNUT1JfQ0hFQ0tQT0lOVF9SRVBPU0lUT1JZID1cbiAgbmV3IEluamVjdGlvblRva2VuPEluc3BlY3RvckNoZWNrcG9pbnRSZXBvc2l0b3J5PignSU5TUEVDVE9SX0NIRUNLUE9JTlRfUkVQT1NJVE9SWScpO1xuXG5leHBvcnQgZnVuY3Rpb24gaW5zcGVjdG9yQ2hlY2twb2ludE1ldGFSZWR1Y2VyPFQ+KFxuICByZWR1Y2VyOiBBY3Rpb25SZWR1Y2VyPFQ+LFxuKTogQWN0aW9uUmVkdWNlcjxUPiB7XG4gIHJldHVybiAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICAgIGlmIChhY3Rpb24udHlwZSA9PT0gUkVTVE9SRV9DSEVDS1BPSU5UKSB7XG4gICAgICByZXR1cm4gKGFjdGlvbiBhcyBSZXN0b3JlQ2hlY2twb2ludEFjdGlvbikuc3RhdGUgYXMgVDtcbiAgICB9XG4gICAgcmV0dXJuIHJlZHVjZXIoc3RhdGUsIGFjdGlvbik7XG4gIH07XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBJbnNwZWN0b3JDaGVja3BvaW50UmVwb3NpdG9yeSB7XG4gIGFic3RyYWN0IGxpc3QoKTogUHJvbWlzZTxJbnNwZWN0b3JDaGVja3BvaW50UmVjb3JkW10+O1xuICBhYnN0cmFjdCBwdXQoY2hlY2twb2ludDogSW5zcGVjdG9yQ2hlY2twb2ludFJlY29yZCk6IFByb21pc2U8dm9pZD47XG4gIGFic3RyYWN0IGRlbGV0ZShpZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPjtcbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEluZGV4ZWREYkNoZWNrcG9pbnRSZXBvc2l0b3J5IGV4dGVuZHMgSW5zcGVjdG9yQ2hlY2twb2ludFJlcG9zaXRvcnkge1xuICBwcml2YXRlIGRhdGFiYXNlUHJvbWlzZTogUHJvbWlzZTxJREJEYXRhYmFzZT4gfCBudWxsID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcihASW5qZWN0KFBMQVRGT1JNX0lEKSBwcml2YXRlIHJlYWRvbmx5IHBsYXRmb3JtSWQ6IG9iamVjdCkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBhc3luYyBsaXN0KCk6IFByb21pc2U8SW5zcGVjdG9yQ2hlY2twb2ludFJlY29yZFtdPiB7XG4gICAgY29uc3QgZGF0YWJhc2UgPSBhd2FpdCB0aGlzLmRhdGFiYXNlKCk7XG4gICAgY29uc3QgdmFsdWVzID0gYXdhaXQgdGhpcy5yZXF1ZXN0PHVua25vd25bXT4oXG4gICAgICBkYXRhYmFzZS50cmFuc2FjdGlvbihTVE9SRV9OQU1FLCAncmVhZG9ubHknKS5vYmplY3RTdG9yZShTVE9SRV9OQU1FKS5nZXRBbGwoKSxcbiAgICApO1xuICAgIHJldHVybiB2YWx1ZXNcbiAgICAgIC5maWx0ZXIoaXNDaGVja3BvaW50UmVjb3JkKVxuICAgICAgLnNvcnQobmV3ZXN0Rmlyc3QpO1xuICB9XG5cbiAgYXN5bmMgcHV0KGNoZWNrcG9pbnQ6IEluc3BlY3RvckNoZWNrcG9pbnRSZWNvcmQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBkYXRhYmFzZSA9IGF3YWl0IHRoaXMuZGF0YWJhc2UoKTtcbiAgICBhd2FpdCB0aGlzLnRyYW5zYWN0aW9uQ29tcGxldGUoZGF0YWJhc2UsICdyZWFkd3JpdGUnLCAoc3RvcmUpID0+IHN0b3JlLnB1dChjaGVja3BvaW50KSk7XG4gIH1cblxuICBhc3luYyBkZWxldGUoaWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGRhdGFiYXNlID0gYXdhaXQgdGhpcy5kYXRhYmFzZSgpO1xuICAgIGF3YWl0IHRoaXMudHJhbnNhY3Rpb25Db21wbGV0ZShkYXRhYmFzZSwgJ3JlYWR3cml0ZScsIChzdG9yZSkgPT4gc3RvcmUuZGVsZXRlKGlkKSk7XG4gIH1cblxuICBwcml2YXRlIGRhdGFiYXNlKCk6IFByb21pc2U8SURCRGF0YWJhc2U+IHtcbiAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkgfHwgdHlwZW9mIGluZGV4ZWREQiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoJ0NoZWNrcG9pbnRzIGFyZSBvbmx5IGF2YWlsYWJsZSBpbiBhIGJyb3dzZXIgd2l0aCBJbmRleGVkREIuJykpO1xuICAgIH1cbiAgICBpZiAodGhpcy5kYXRhYmFzZVByb21pc2UpIHJldHVybiB0aGlzLmRhdGFiYXNlUHJvbWlzZTtcblxuICAgIHRoaXMuZGF0YWJhc2VQcm9taXNlID0gbmV3IFByb21pc2U8SURCRGF0YWJhc2U+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IHJlcXVlc3QgPSBpbmRleGVkREIub3BlbihEQVRBQkFTRV9OQU1FLCBEQVRBQkFTRV9WRVJTSU9OKTtcbiAgICAgIHJlcXVlc3Qub251cGdyYWRlbmVlZGVkID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBkYXRhYmFzZSA9IHJlcXVlc3QucmVzdWx0O1xuICAgICAgICBpZiAoZGF0YWJhc2Uub2JqZWN0U3RvcmVOYW1lcy5jb250YWlucyhTVE9SRV9OQU1FKSkgcmV0dXJuO1xuICAgICAgICBjb25zdCBzdG9yZSA9IGRhdGFiYXNlLmNyZWF0ZU9iamVjdFN0b3JlKFNUT1JFX05BTUUsIHsga2V5UGF0aDogJ2lkJyB9KTtcbiAgICAgICAgc3RvcmUuY3JlYXRlSW5kZXgoJ2NyZWF0ZWRBdCcsICdjcmVhdGVkQXQnKTtcbiAgICAgIH07XG4gICAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpID0+IHJlc29sdmUocmVxdWVzdC5yZXN1bHQpO1xuICAgICAgcmVxdWVzdC5vbmVycm9yID0gKCkgPT4gcmVqZWN0KHJlcXVlc3QuZXJyb3IgPz8gbmV3IEVycm9yKCdJbmRleGVkREIgY291bGQgbm90IGJlIG9wZW5lZC4nKSk7XG4gICAgICByZXF1ZXN0Lm9uYmxvY2tlZCA9ICgpID0+IHJlamVjdChuZXcgRXJyb3IoJ0luZGV4ZWREQiBpcyBibG9ja2VkIGJ5IGFub3RoZXIgb3BlbiB0YWIuJykpO1xuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmRhdGFiYXNlUHJvbWlzZTtcbiAgfVxuXG4gIHByaXZhdGUgcmVxdWVzdDxUPihyZXF1ZXN0OiBJREJSZXF1ZXN0PFQ+KTogUHJvbWlzZTxUPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPFQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHJlcXVlc3Qub25zdWNjZXNzID0gKCkgPT4gcmVzb2x2ZShyZXF1ZXN0LnJlc3VsdCk7XG4gICAgICByZXF1ZXN0Lm9uZXJyb3IgPSAoKSA9PiByZWplY3QocmVxdWVzdC5lcnJvciA/PyBuZXcgRXJyb3IoJ0luZGV4ZWREQiByZXF1ZXN0IGZhaWxlZC4nKSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHRyYW5zYWN0aW9uQ29tcGxldGUoXG4gICAgZGF0YWJhc2U6IElEQkRhdGFiYXNlLFxuICAgIG1vZGU6IElEQlRyYW5zYWN0aW9uTW9kZSxcbiAgICBvcGVyYXRpb246IChzdG9yZTogSURCT2JqZWN0U3RvcmUpID0+IElEQlJlcXVlc3QsXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCB0cmFuc2FjdGlvbiA9IGRhdGFiYXNlLnRyYW5zYWN0aW9uKFNUT1JFX05BTUUsIG1vZGUpO1xuICAgICAgdHJhbnNhY3Rpb24ub25jb21wbGV0ZSA9ICgpID0+IHJlc29sdmUoKTtcbiAgICAgIHRyYW5zYWN0aW9uLm9uZXJyb3IgPSAoKSA9PiByZWplY3QodHJhbnNhY3Rpb24uZXJyb3IgPz8gbmV3IEVycm9yKCdJbmRleGVkREIgdHJhbnNhY3Rpb24gZmFpbGVkLicpKTtcbiAgICAgIHRyYW5zYWN0aW9uLm9uYWJvcnQgPSAoKSA9PiByZWplY3QodHJhbnNhY3Rpb24uZXJyb3IgPz8gbmV3IEVycm9yKCdJbmRleGVkREIgdHJhbnNhY3Rpb24gd2FzIGFib3J0ZWQuJykpO1xuICAgICAgb3BlcmF0aW9uKHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKFNUT1JFX05BTUUpKTtcbiAgICB9KTtcbiAgfVxufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgSW5zcGVjdG9yQ2hlY2twb2ludFNlcnZpY2Uge1xuICByZWFkb25seSBjaGVja3BvaW50cyA9IHNpZ25hbDxJbnNwZWN0b3JDaGVja3BvaW50UmVjb3JkW10+KFtdKTtcbiAgcmVhZG9ubHkgbG9hZGluZyA9IHNpZ25hbChmYWxzZSk7XG4gIHJlYWRvbmx5IGJ1c3kgPSBzaWduYWwoZmFsc2UpO1xuICByZWFkb25seSBlcnJvciA9IHNpZ25hbDxzdHJpbmcgfCBudWxsPihudWxsKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KElOU1BFQ1RPUl9DSEVDS1BPSU5UX1JFUE9TSVRPUlkpXG4gICAgcHJpdmF0ZSByZWFkb25seSByZXBvc2l0b3J5OiBJbnNwZWN0b3JDaGVja3BvaW50UmVwb3NpdG9yeSxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KFN0b3JlKSBwcml2YXRlIHJlYWRvbmx5IHN0b3JlOiBTdG9yZSB8IG51bGwsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChSb3V0ZXIpIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyOiBSb3V0ZXIgfCBudWxsLFxuICAgIEBJbmplY3QoUExBVEZPUk1fSUQpIHByaXZhdGUgcmVhZG9ubHkgcGxhdGZvcm1JZDogb2JqZWN0LFxuICApIHt9XG5cbiAgYXN5bmMgbG9hZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmVycm9yLnNldChudWxsKTtcbiAgICB0aGlzLmxvYWRpbmcuc2V0KHRydWUpO1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmNoZWNrcG9pbnRzLnNldCgoYXdhaXQgdGhpcy5yZXBvc2l0b3J5Lmxpc3QoKSkuc29ydChuZXdlc3RGaXJzdCkpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLmVycm9yLnNldCh0aGlzLm1lc3NhZ2VGb3IoZXJyb3IsICdTYXZlZCBjaGVja3BvaW50cyBjb3VsZCBub3QgYmUgbG9hZGVkLiBUcnkgcmVsb2FkaW5nIHRoZSBwYWdlLicpKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5sb2FkaW5nLnNldChmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc2F2ZSgpOiBQcm9taXNlPEluc3BlY3RvckNoZWNrcG9pbnRSZWNvcmQgfCBudWxsPiB7XG4gICAgdGhpcy5lcnJvci5zZXQobnVsbCk7XG4gICAgaWYgKCF0aGlzLnN0b3JlKSB7XG4gICAgICB0aGlzLmVycm9yLnNldCh0aGlzLm1pc3NpbmdTdG9yZU1lc3NhZ2UoKSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLmJ1c3kuc2V0KHRydWUpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjdXJyZW50U3RhdGUgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLnN0b3JlLnBpcGUodGFrZSgxKSkpO1xuICAgICAgY29uc3Qgc3RhdGUgPSBjbG9uZUpzb24oY3VycmVudFN0YXRlKTtcbiAgICAgIGNvbnN0IHBlcnNpc3RlZCA9IGF3YWl0IHRoaXMucmVwb3NpdG9yeS5saXN0KCk7XG4gICAgICBjb25zdCByb3V0ZSA9IHRoaXMuY3VycmVudFJvdXRlKCk7XG4gICAgICBjb25zdCBwYXRobmFtZSA9IHRoaXMuY3VycmVudFBhdGhuYW1lKCk7XG4gICAgICBjb25zdCBjaGVja3BvaW50OiBJbnNwZWN0b3JDaGVja3BvaW50UmVjb3JkID0ge1xuICAgICAgICB2ZXJzaW9uOiAxLFxuICAgICAgICBpZDogY3JlYXRlQ2hlY2twb2ludElkKCksXG4gICAgICAgIG5hbWU6IG5leHRBdXRvbWF0aWNOYW1lKHBhdGhuYW1lLCBwZXJzaXN0ZWQubWFwKCh7IG5hbWUgfSkgPT4gbmFtZSkpLFxuICAgICAgICByb3V0ZSxcbiAgICAgICAgY3JlYXRlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgIHN0YXRlLFxuICAgICAgfTtcbiAgICAgIGF3YWl0IHRoaXMucmVwb3NpdG9yeS5wdXQoY2hlY2twb2ludCk7XG4gICAgICB0aGlzLmNoZWNrcG9pbnRzLnNldChbY2hlY2twb2ludCwgLi4ucGVyc2lzdGVkXS5zb3J0KG5ld2VzdEZpcnN0KSk7XG4gICAgICByZXR1cm4gY2hlY2twb2ludDtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5lcnJvci5zZXQodGhpcy5zdG9yYWdlTWVzc2FnZShlcnJvciwgJ1RoZSBjaGVja3BvaW50IGNvdWxkIG5vdCBiZSBzYXZlZC4nKSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5idXN5LnNldChmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgcmVzdG9yZShpZDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdGhpcy5lcnJvci5zZXQobnVsbCk7XG4gICAgaWYgKCF0aGlzLnN0b3JlKSB7XG4gICAgICB0aGlzLmVycm9yLnNldCh0aGlzLm1pc3NpbmdTdG9yZU1lc3NhZ2UoKSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuYnVzeS5zZXQodHJ1ZSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNoZWNrcG9pbnQgPSAoYXdhaXQgdGhpcy5yZXBvc2l0b3J5Lmxpc3QoKSkuZmluZCgoaXRlbSkgPT4gaXRlbS5pZCA9PT0gaWQpO1xuICAgICAgaWYgKCFjaGVja3BvaW50KSB0aHJvdyBuZXcgRXJyb3IoJ0NoZWNrcG9pbnQgbm90IGZvdW5kLiBJdCBtYXkgaGF2ZSBiZWVuIGRlbGV0ZWQgaW4gYW5vdGhlciB0YWIuJyk7XG4gICAgICBjb25zdCBzdGF0ZSA9IGNsb25lSnNvbihcbiAgICAgICAgY2hlY2twb2ludC5zdGF0ZSxcbiAgICAgICAgYOKAnCR7Y2hlY2twb2ludC5uYW1lfeKAnSBjb3VsZCBub3QgYmUgZGVjb2RlZC4gRGVsZXRlIGl0IGFuZCBzYXZlIGEgbmV3IGNoZWNrcG9pbnQuYCxcbiAgICAgICk7XG4gICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKHsgdHlwZTogUkVTVE9SRV9DSEVDS1BPSU5ULCBzdGF0ZSB9IGFzIFJlc3RvcmVDaGVja3BvaW50QWN0aW9uKTtcbiAgICAgIGlmICh0aGlzLnJvdXRlciAmJiAhYXdhaXQgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChjaGVja3BvaW50LnJvdXRlKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBzdGF0ZSB3YXMgcmVzdG9yZWQsIGJ1dCBuYXZpZ2F0aW9uIHRvIOKAnCR7Y2hlY2twb2ludC5yb3V0ZX3igJ0gd2FzIGNhbmNlbGxlZC5gKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLmVycm9yLnNldCh0aGlzLm1lc3NhZ2VGb3IoZXJyb3IsICdUaGUgY2hlY2twb2ludCBjb3VsZCBub3QgYmUgcmVzdG9yZWQuIERlbGV0ZSBpdCBhbmQgc2F2ZSBhIG5ldyBvbmUuJykpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmJ1c3kuc2V0KGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyByZW5hbWUoaWQ6IHN0cmluZywgbmFtZTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdGhpcy5lcnJvci5zZXQobnVsbCk7XG4gICAgY29uc3QgbmV4dE5hbWUgPSBuYW1lLnRyaW0oKTtcbiAgICBpZiAoIW5leHROYW1lKSB7XG4gICAgICB0aGlzLmVycm9yLnNldCgnUGxlYXNlIGVudGVyIGEgY2hlY2twb2ludCBuYW1lLicpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuYnVzeS5zZXQodHJ1ZSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNoZWNrcG9pbnRzID0gYXdhaXQgdGhpcy5yZXBvc2l0b3J5Lmxpc3QoKTtcbiAgICAgIGlmIChjaGVja3BvaW50cy5zb21lKChpdGVtKSA9PiBpdGVtLmlkICE9PSBpZCAmJiBpdGVtLm5hbWUudG9Mb2NhbGVMb3dlckNhc2UoKSA9PT0gbmV4dE5hbWUudG9Mb2NhbGVMb3dlckNhc2UoKSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBIGNoZWNrcG9pbnQgbmFtZWQg4oCcJHtuZXh0TmFtZX3igJ0gYWxyZWFkeSBleGlzdHMuIENob29zZSBhIGRpZmZlcmVudCBuYW1lLmApO1xuICAgICAgfVxuICAgICAgY29uc3QgY2hlY2twb2ludCA9IGNoZWNrcG9pbnRzLmZpbmQoKGl0ZW0pID0+IGl0ZW0uaWQgPT09IGlkKTtcbiAgICAgIGlmICghY2hlY2twb2ludCkgdGhyb3cgbmV3IEVycm9yKCdDaGVja3BvaW50IG5vdCBmb3VuZC4gSXQgbWF5IGhhdmUgYmVlbiBkZWxldGVkIGluIGFub3RoZXIgdGFiLicpO1xuICAgICAgYXdhaXQgdGhpcy5yZXBvc2l0b3J5LnB1dCh7IC4uLmNoZWNrcG9pbnQsIG5hbWU6IG5leHROYW1lIH0pO1xuICAgICAgdGhpcy5jaGVja3BvaW50cy5zZXQoXG4gICAgICAgIGNoZWNrcG9pbnRzLm1hcCgoaXRlbSkgPT4gaXRlbS5pZCA9PT0gaWQgPyB7IC4uLml0ZW0sIG5hbWU6IG5leHROYW1lIH0gOiBpdGVtKS5zb3J0KG5ld2VzdEZpcnN0KSxcbiAgICAgICk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5lcnJvci5zZXQodGhpcy5zdG9yYWdlTWVzc2FnZShlcnJvciwgJ1RoZSBjaGVja3BvaW50IGNvdWxkIG5vdCBiZSByZW5hbWVkLicpKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5idXN5LnNldChmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZGVsZXRlKGlkOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICB0aGlzLmVycm9yLnNldChudWxsKTtcbiAgICB0aGlzLmJ1c3kuc2V0KHRydWUpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnJlcG9zaXRvcnkuZGVsZXRlKGlkKTtcbiAgICAgIHRoaXMuY2hlY2twb2ludHMuc2V0KHRoaXMuY2hlY2twb2ludHMoKS5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uaWQgIT09IGlkKSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5lcnJvci5zZXQodGhpcy5zdG9yYWdlTWVzc2FnZShlcnJvciwgJ1RoZSBjaGVja3BvaW50IGNvdWxkIG5vdCBiZSBkZWxldGVkLicpKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5idXN5LnNldChmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgY2xlYXJFcnJvcigpOiB2b2lkIHtcbiAgICB0aGlzLmVycm9yLnNldChudWxsKTtcbiAgfVxuXG4gIHByaXZhdGUgY3VycmVudFJvdXRlKCk6IHN0cmluZyB7XG4gICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSByZXR1cm4gJy8nO1xuICAgIHJldHVybiBgJHt0aGlzLmN1cnJlbnRQYXRobmFtZSgpfSR7d2luZG93LmxvY2F0aW9uLnNlYXJjaH0ke3dpbmRvdy5sb2NhdGlvbi5oYXNofWA7XG4gIH1cblxuICBwcml2YXRlIGN1cnJlbnRQYXRobmFtZSgpOiBzdHJpbmcge1xuICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkgcmV0dXJuICcvJztcbiAgICByZXR1cm4gd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lIHx8ICcvJztcbiAgfVxuXG4gIHByaXZhdGUgbWlzc2luZ1N0b3JlTWVzc2FnZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAnVGhlIE5nUnggcm9vdCBzdG9yZSBpcyB1bmF2YWlsYWJsZS4gQ2hlY2sgdGhhdCBwcm92aWRlSW5zcGVjdG9yQ2hlY2twb2ludHMoKSBpcyByZWdpc3RlcmVkIGFmdGVyIHByb3ZpZGVTdG9yZSgpLic7XG4gIH1cblxuICBwcml2YXRlIHN0b3JhZ2VNZXNzYWdlKGVycm9yOiB1bmtub3duLCBmYWxsYmFjazogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoaXNRdW90YUVycm9yKGVycm9yKSkge1xuICAgICAgcmV0dXJuICdCcm93c2VyIHN0b3JhZ2UgaXMgZnVsbC4gRGVsZXRlIG9sZCBjaGVja3BvaW50cywgdGhlbiB0cnkgc2F2aW5nIGFnYWluLic7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm1lc3NhZ2VGb3IoZXJyb3IsIGZhbGxiYWNrKTtcbiAgfVxuXG4gIHByaXZhdGUgbWVzc2FnZUZvcihlcnJvcjogdW5rbm93biwgZmFsbGJhY2s6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiYgZXJyb3IubWVzc2FnZSA/IGVycm9yLm1lc3NhZ2UgOiBmYWxsYmFjaztcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZUluc3BlY3RvckNoZWNrcG9pbnRzKCk6IEVudmlyb25tZW50UHJvdmlkZXJzIHtcbiAgcmV0dXJuIG1ha2VFbnZpcm9ubWVudFByb3ZpZGVycyhbXG4gICAgSW5kZXhlZERiQ2hlY2twb2ludFJlcG9zaXRvcnksXG4gICAge1xuICAgICAgcHJvdmlkZTogSU5TUEVDVE9SX0NIRUNLUE9JTlRfUkVQT1NJVE9SWSxcbiAgICAgIHVzZUV4aXN0aW5nOiBJbmRleGVkRGJDaGVja3BvaW50UmVwb3NpdG9yeSxcbiAgICB9LFxuICAgIEluc3BlY3RvckNoZWNrcG9pbnRTZXJ2aWNlLFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IE1FVEFfUkVEVUNFUlMsXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgIHVzZVZhbHVlOiBpbnNwZWN0b3JDaGVja3BvaW50TWV0YVJlZHVjZXIsXG4gICAgfSxcbiAgXSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuZXh0QXV0b21hdGljTmFtZShyb3V0ZTogc3RyaW5nLCBuYW1lczogc3RyaW5nW10pOiBzdHJpbmcge1xuICBjb25zdCB1c2VkID0gbmV3IFNldChuYW1lcy5tYXAoKG5hbWUpID0+IG5hbWUudG9Mb2NhbGVMb3dlckNhc2UoKSkpO1xuICBpZiAoIXVzZWQuaGFzKHJvdXRlLnRvTG9jYWxlTG93ZXJDYXNlKCkpKSByZXR1cm4gcm91dGU7XG4gIGZvciAobGV0IHN1ZmZpeCA9IDI7IDsgc3VmZml4ICs9IDEpIHtcbiAgICBjb25zdCBjYW5kaWRhdGUgPSBgJHtyb3V0ZX0gJHtzdWZmaXh9YDtcbiAgICBpZiAoIXVzZWQuaGFzKGNhbmRpZGF0ZS50b0xvY2FsZUxvd2VyQ2FzZSgpKSkgcmV0dXJuIGNhbmRpZGF0ZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjbG9uZUpzb24oXG4gIHZhbHVlOiB1bmtub3duLFxuICBmYWlsdXJlTWVzc2FnZSA9ICdUaGUgTmdSeCByb290IHN0YXRlIGlzIG5vdCBKU09OLXNlcmlhbGl6YWJsZS4gUmVtb3ZlIGNpcmN1bGFyIG9yIHVuc3VwcG9ydGVkIHZhbHVlcyBhbmQgdHJ5IGFnYWluLicsXG4pOiB1bmtub3duIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBzZXJpYWxpemVkID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICAgIGlmIChzZXJpYWxpemVkID09PSB1bmRlZmluZWQpIHRocm93IG5ldyBFcnJvcigpO1xuICAgIHJldHVybiBKU09OLnBhcnNlKHNlcmlhbGl6ZWQpIGFzIHVua25vd247XG4gIH0gY2F0Y2gge1xuICAgIHRocm93IG5ldyBFcnJvcihmYWlsdXJlTWVzc2FnZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlQ2hlY2twb2ludElkKCk6IHN0cmluZyB7XG4gIGlmICh0eXBlb2YgY3J5cHRvICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgY3J5cHRvLnJhbmRvbVVVSUQgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gY3J5cHRvLnJhbmRvbVVVSUQoKTtcbiAgfVxuICByZXR1cm4gYGNoZWNrcG9pbnQtJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIsIDkpfWA7XG59XG5cbmZ1bmN0aW9uIGlzUXVvdGFFcnJvcihlcnJvcjogdW5rbm93bik6IGJvb2xlYW4ge1xuICByZXR1cm4gZXJyb3IgaW5zdGFuY2VvZiBET01FeGNlcHRpb24gJiYgKFxuICAgIGVycm9yLm5hbWUgPT09ICdRdW90YUV4Y2VlZGVkRXJyb3InIHx8IGVycm9yLm5hbWUgPT09ICdOU19FUlJPUl9ET01fUVVPVEFfUkVBQ0hFRCdcbiAgKTtcbn1cblxuZnVuY3Rpb24gbmV3ZXN0Rmlyc3QoYTogSW5zcGVjdG9yQ2hlY2twb2ludFJlY29yZCwgYjogSW5zcGVjdG9yQ2hlY2twb2ludFJlY29yZCk6IG51bWJlciB7XG4gIHJldHVybiBiLmNyZWF0ZWRBdC5sb2NhbGVDb21wYXJlKGEuY3JlYXRlZEF0KSB8fCBiLmlkLmxvY2FsZUNvbXBhcmUoYS5pZCk7XG59XG5cbmZ1bmN0aW9uIGlzQ2hlY2twb2ludFJlY29yZCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIEluc3BlY3RvckNoZWNrcG9pbnRSZWNvcmQge1xuICBpZiAoIXZhbHVlIHx8IHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHJldHVybiBmYWxzZTtcbiAgY29uc3QgY2hlY2twb2ludCA9IHZhbHVlIGFzIFBhcnRpYWw8SW5zcGVjdG9yQ2hlY2twb2ludFJlY29yZD47XG4gIHJldHVybiBjaGVja3BvaW50LnZlcnNpb24gPT09IDEgJiZcbiAgICB0eXBlb2YgY2hlY2twb2ludC5pZCA9PT0gJ3N0cmluZycgJiZcbiAgICB0eXBlb2YgY2hlY2twb2ludC5uYW1lID09PSAnc3RyaW5nJyAmJlxuICAgIHR5cGVvZiBjaGVja3BvaW50LnJvdXRlID09PSAnc3RyaW5nJyAmJlxuICAgIHR5cGVvZiBjaGVja3BvaW50LmNyZWF0ZWRBdCA9PT0gJ3N0cmluZycgJiZcbiAgICAnc3RhdGUnIGluIGNoZWNrcG9pbnQ7XG59XG4iXX0=
|
|
340
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2twb2ludHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9pbnNwZWN0b3Itbmcvc3JjL2xpYi9jaGVja3BvaW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsTUFBTSxFQUNOLFVBQVUsRUFDVixjQUFjLEVBQ2QsUUFBUSxFQUNSLFdBQVcsRUFDWCx3QkFBd0IsRUFDeEIsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBR0wsYUFBYSxFQUNiLEtBQUssR0FDTixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQzs7OztBQWlCNUMsTUFBTSxrQkFBa0IsR0FBRyxpQ0FBaUMsQ0FBQztBQUM3RCxNQUFNLGFBQWEsR0FBRyxjQUFjLENBQUM7QUFDckMsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7QUFDM0IsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFDO0FBRWpDLE1BQU0sQ0FBQyxNQUFNLCtCQUErQixHQUMxQyxJQUFJLGNBQWMsQ0FBZ0MsaUNBQWlDLENBQUMsQ0FBQztBQUV2RixNQUFNLFVBQVUsOEJBQThCLENBQzVDLE9BQXlCO0lBRXpCLE9BQU8sQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDdkIsSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLGtCQUFrQixFQUFFLENBQUM7WUFDdkMsT0FBUSxNQUFrQyxDQUFDLEtBQVUsQ0FBQztRQUN4RCxDQUFDO1FBQ0QsT0FBTyxPQUFPLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLE9BQWdCLDZCQUE2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QUMsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDO0FBQzNCLENBQUM7QUFFRCxNQUFNLFVBQVUsbUJBQW1CLENBQ2pDLENBQTRCLEVBQzVCLENBQTRCO0lBRTVCLE9BQU8sb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25FLENBQUMsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDdEMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzdCLENBQUM7QUFFRCxTQUFTLGtCQUFrQixDQUFDLEtBQWM7SUFDeEMsSUFBSSxDQUFDLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDdEQsTUFBTSxVQUFVLEdBQUcsS0FBMkMsQ0FBQztJQUMvRCxPQUFPLFVBQVUsQ0FBQyxPQUFPLEtBQUssQ0FBQztRQUM3QixPQUFPLFVBQVUsQ0FBQyxFQUFFLEtBQUssUUFBUTtRQUNqQyxPQUFPLFVBQVUsQ0FBQyxJQUFJLEtBQUssUUFBUTtRQUNuQyxPQUFPLFVBQVUsQ0FBQyxLQUFLLEtBQUssUUFBUTtRQUNwQyxPQUFPLFVBQVUsQ0FBQyxTQUFTLEtBQUssUUFBUTtRQUN4QyxDQUFDLFVBQVUsQ0FBQyxVQUFVLEtBQUssU0FBUyxJQUFJLE9BQU8sVUFBVSxDQUFDLFVBQVUsS0FBSyxRQUFRLENBQUM7UUFDbEYsT0FBTyxJQUFJLFVBQVUsQ0FBQztBQUMxQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRW52aXJvbm1lbnRQcm92aWRlcnMsXG4gIEluamVjdCxcbiAgSW5qZWN0YWJsZSxcbiAgSW5qZWN0aW9uVG9rZW4sXG4gIE9wdGlvbmFsLFxuICBQTEFURk9STV9JRCxcbiAgbWFrZUVudmlyb25tZW50UHJvdmlkZXJzLFxuICBzaWduYWwsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaXNQbGF0Zm9ybUJyb3dzZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7XG4gIEFjdGlvbixcbiAgQWN0aW9uUmVkdWNlcixcbiAgTUVUQV9SRURVQ0VSUyxcbiAgU3RvcmUsXG59IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7IGZpcnN0VmFsdWVGcm9tLCB0YWtlIH0gZnJvbSAncnhqcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW5zcGVjdG9yQ2hlY2twb2ludFJlY29yZCB7XG4gIHZlcnNpb246IDE7XG4gIGlkOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgcm91dGU6IHN0cmluZztcbiAgY3JlYXRlZEF0OiBzdHJpbmc7XG4gIGxhc3RVc2VkQXQ/OiBzdHJpbmc7XG4gIHN0YXRlOiB1bmtub3duO1xufVxuXG5pbnRlcmZhY2UgUmVzdG9yZUNoZWNrcG9pbnRBY3Rpb24gZXh0ZW5kcyBBY3Rpb24ge1xuICB0eXBlOiB0eXBlb2YgUkVTVE9SRV9DSEVDS1BPSU5UO1xuICBzdGF0ZTogdW5rbm93bjtcbn1cblxuY29uc3QgUkVTVE9SRV9DSEVDS1BPSU5UID0gJ1tJbnNwZWN0b3IgQ2hlY2twb2ludHNdIFJlc3RvcmUnO1xuY29uc3QgREFUQUJBU0VfTkFNRSA9ICdpbnNwZWN0b3ItbmcnO1xuY29uc3QgREFUQUJBU0VfVkVSU0lPTiA9IDE7XG5jb25zdCBTVE9SRV9OQU1FID0gJ2NoZWNrcG9pbnRzJztcblxuZXhwb3J0IGNvbnN0IElOU1BFQ1RPUl9DSEVDS1BPSU5UX1JFUE9TSVRPUlkgPVxuICBuZXcgSW5qZWN0aW9uVG9rZW48SW5zcGVjdG9yQ2hlY2twb2ludFJlcG9zaXRvcnk+KCdJTlNQRUNUT1JfQ0hFQ0tQT0lOVF9SRVBPU0lUT1JZJyk7XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnNwZWN0b3JDaGVja3BvaW50TWV0YVJlZHVjZXI8VD4oXG4gIHJlZHVjZXI6IEFjdGlvblJlZHVjZXI8VD4sXG4pOiBBY3Rpb25SZWR1Y2VyPFQ+IHtcbiAgcmV0dXJuIChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gICAgaWYgKGFjdGlvbi50eXBlID09PSBSRVNUT1JFX0NIRUNLUE9JTlQpIHtcbiAgICAgIHJldHVybiAoYWN0aW9uIGFzIFJlc3RvcmVDaGVja3BvaW50QWN0aW9uKS5zdGF0ZSBhcyBUO1xuICAgIH1cbiAgICByZXR1cm4gcmVkdWNlcihzdGF0ZSwgYWN0aW9uKTtcbiAgfTtcbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEluc3BlY3RvckNoZWNrcG9pbnRSZXBvc2l0b3J5IHtcbiAgYWJzdHJhY3QgbGlzdCgpOiBQcm9taXNlPEluc3BlY3RvckNoZWNrcG9pbnRSZWNvcmRbXT47XG4gIGFic3RyYWN0IHB1dChjaGVja3BvaW50OiBJbnNwZWN0b3JDaGVja3BvaW50UmVjb3JkKTogUHJvbWlzZTx2b2lkPjtcbiAgYWJzdHJhY3QgZGVsZXRlKGlkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+O1xufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgSW5kZXhlZERiQ2hlY2twb2ludFJlcG9zaXRvcnkgZXh0ZW5kcyBJbnNwZWN0b3JDaGVja3BvaW50UmVwb3NpdG9yeSB7XG4gIHByaXZhdGUgZGF0YWJhc2VQcm9taXNlOiBQcm9taXNlPElEQkRhdGFiYXNlPiB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKEBJbmplY3QoUExBVEZPUk1fSUQpIHByaXZhdGUgcmVhZG9ubHkgcGxhdGZvcm1JZDogb2JqZWN0KSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIGFzeW5jIGxpc3QoKTogUHJvbWlzZTxJbnNwZWN0b3JDaGVja3BvaW50UmVjb3JkW10+IHtcbiAgICBjb25zdCBkYXRhYmFzZSA9IGF3YWl0IHRoaXMuZGF0YWJhc2UoKTtcbiAgICBjb25zdCB2YWx1ZXMgPSBhd2FpdCB0aGlzLnJlcXVlc3Q8dW5rbm93bltdPihcbiAgICAgIGRhdGFiYXNlLnRyYW5zYWN0aW9uKFNUT1JFX05BTUUsICdyZWFkb25seScpLm9iamVjdFN0b3JlKFNUT1JFX05BTUUpLmdldEFsbCgpLFxuICAgICk7XG4gICAgcmV0dXJuIHZhbHVlc1xuICAgICAgLmZpbHRlcihpc0NoZWNrcG9pbnRSZWNvcmQpXG4gICAgICAuc29ydChyZWNlbnRBY3Rpdml0eUZpcnN0KTtcbiAgfVxuXG4gIGFzeW5jIHB1dChjaGVja3BvaW50OiBJbnNwZWN0b3JDaGVja3BvaW50UmVjb3JkKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZGF0YWJhc2UgPSBhd2FpdCB0aGlzLmRhdGFiYXNlKCk7XG4gICAgYXdhaXQgdGhpcy50cmFuc2FjdGlvbkNvbXBsZXRlKGRhdGFiYXNlLCAncmVhZHdyaXRlJywgKHN0b3JlKSA9PiBzdG9yZS5wdXQoY2hlY2twb2ludCkpO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlKGlkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBkYXRhYmFzZSA9IGF3YWl0IHRoaXMuZGF0YWJhc2UoKTtcbiAgICBhd2FpdCB0aGlzLnRyYW5zYWN0aW9uQ29tcGxldGUoZGF0YWJhc2UsICdyZWFkd3JpdGUnLCAoc3RvcmUpID0+IHN0b3JlLmRlbGV0ZShpZCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBkYXRhYmFzZSgpOiBQcm9taXNlPElEQkRhdGFiYXNlPiB7XG4gICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpIHx8IHR5cGVvZiBpbmRleGVkREIgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCdDaGVja3BvaW50cyBhcmUgb25seSBhdmFpbGFibGUgaW4gYSBicm93c2VyIHdpdGggSW5kZXhlZERCLicpKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZGF0YWJhc2VQcm9taXNlKSByZXR1cm4gdGhpcy5kYXRhYmFzZVByb21pc2U7XG5cbiAgICB0aGlzLmRhdGFiYXNlUHJvbWlzZSA9IG5ldyBQcm9taXNlPElEQkRhdGFiYXNlPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCByZXF1ZXN0ID0gaW5kZXhlZERCLm9wZW4oREFUQUJBU0VfTkFNRSwgREFUQUJBU0VfVkVSU0lPTik7XG4gICAgICByZXF1ZXN0Lm9udXBncmFkZW5lZWRlZCA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgZGF0YWJhc2UgPSByZXF1ZXN0LnJlc3VsdDtcbiAgICAgICAgaWYgKGRhdGFiYXNlLm9iamVjdFN0b3JlTmFtZXMuY29udGFpbnMoU1RPUkVfTkFNRSkpIHJldHVybjtcbiAgICAgICAgY29uc3Qgc3RvcmUgPSBkYXRhYmFzZS5jcmVhdGVPYmplY3RTdG9yZShTVE9SRV9OQU1FLCB7IGtleVBhdGg6ICdpZCcgfSk7XG4gICAgICAgIHN0b3JlLmNyZWF0ZUluZGV4KCdjcmVhdGVkQXQnLCAnY3JlYXRlZEF0Jyk7XG4gICAgICB9O1xuICAgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSAoKSA9PiByZXNvbHZlKHJlcXVlc3QucmVzdWx0KTtcbiAgICAgIHJlcXVlc3Qub25lcnJvciA9ICgpID0+IHJlamVjdChyZXF1ZXN0LmVycm9yID8/IG5ldyBFcnJvcignSW5kZXhlZERCIGNvdWxkIG5vdCBiZSBvcGVuZWQuJykpO1xuICAgICAgcmVxdWVzdC5vbmJsb2NrZWQgPSAoKSA9PiByZWplY3QobmV3IEVycm9yKCdJbmRleGVkREIgaXMgYmxvY2tlZCBieSBhbm90aGVyIG9wZW4gdGFiLicpKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5kYXRhYmFzZVByb21pc2U7XG4gIH1cblxuICBwcml2YXRlIHJlcXVlc3Q8VD4ocmVxdWVzdDogSURCUmVxdWVzdDxUPik6IFByb21pc2U8VD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxUPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpID0+IHJlc29sdmUocmVxdWVzdC5yZXN1bHQpO1xuICAgICAgcmVxdWVzdC5vbmVycm9yID0gKCkgPT4gcmVqZWN0KHJlcXVlc3QuZXJyb3IgPz8gbmV3IEVycm9yKCdJbmRleGVkREIgcmVxdWVzdCBmYWlsZWQuJykpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB0cmFuc2FjdGlvbkNvbXBsZXRlKFxuICAgIGRhdGFiYXNlOiBJREJEYXRhYmFzZSxcbiAgICBtb2RlOiBJREJUcmFuc2FjdGlvbk1vZGUsXG4gICAgb3BlcmF0aW9uOiAoc3RvcmU6IElEQk9iamVjdFN0b3JlKSA9PiBJREJSZXF1ZXN0LFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgdHJhbnNhY3Rpb24gPSBkYXRhYmFzZS50cmFuc2FjdGlvbihTVE9SRV9OQU1FLCBtb2RlKTtcbiAgICAgIHRyYW5zYWN0aW9uLm9uY29tcGxldGUgPSAoKSA9PiByZXNvbHZlKCk7XG4gICAgICB0cmFuc2FjdGlvbi5vbmVycm9yID0gKCkgPT4gcmVqZWN0KHRyYW5zYWN0aW9uLmVycm9yID8/IG5ldyBFcnJvcignSW5kZXhlZERCIHRyYW5zYWN0aW9uIGZhaWxlZC4nKSk7XG4gICAgICB0cmFuc2FjdGlvbi5vbmFib3J0ID0gKCkgPT4gcmVqZWN0KHRyYW5zYWN0aW9uLmVycm9yID8/IG5ldyBFcnJvcignSW5kZXhlZERCIHRyYW5zYWN0aW9uIHdhcyBhYm9ydGVkLicpKTtcbiAgICAgIG9wZXJhdGlvbih0cmFuc2FjdGlvbi5vYmplY3RTdG9yZShTVE9SRV9OQU1FKSk7XG4gICAgfSk7XG4gIH1cbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEluc3BlY3RvckNoZWNrcG9pbnRTZXJ2aWNlIHtcbiAgcmVhZG9ubHkgY2hlY2twb2ludHMgPSBzaWduYWw8SW5zcGVjdG9yQ2hlY2twb2ludFJlY29yZFtdPihbXSk7XG4gIHJlYWRvbmx5IGxvYWRpbmcgPSBzaWduYWwoZmFsc2UpO1xuICByZWFkb25seSBidXN5ID0gc2lnbmFsKGZhbHNlKTtcbiAgcmVhZG9ubHkgZXJyb3IgPSBzaWduYWw8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChJTlNQRUNUT1JfQ0hFQ0tQT0lOVF9SRVBPU0lUT1JZKVxuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVwb3NpdG9yeTogSW5zcGVjdG9yQ2hlY2twb2ludFJlcG9zaXRvcnksXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChTdG9yZSkgcHJpdmF0ZSByZWFkb25seSBzdG9yZTogU3RvcmUgfCBudWxsLFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoUm91dGVyKSBwcml2YXRlIHJlYWRvbmx5IHJvdXRlcjogUm91dGVyIHwgbnVsbCxcbiAgICBASW5qZWN0KFBMQVRGT1JNX0lEKSBwcml2YXRlIHJlYWRvbmx5IHBsYXRmb3JtSWQ6IG9iamVjdCxcbiAgKSB7fVxuXG4gIGFzeW5jIGxvYWQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5lcnJvci5zZXQobnVsbCk7XG4gICAgdGhpcy5sb2FkaW5nLnNldCh0cnVlKTtcbiAgICB0cnkge1xuICAgICAgdGhpcy5jaGVja3BvaW50cy5zZXQoKGF3YWl0IHRoaXMucmVwb3NpdG9yeS5saXN0KCkpLnNvcnQocmVjZW50QWN0aXZpdHlGaXJzdCkpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLmVycm9yLnNldCh0aGlzLm1lc3NhZ2VGb3IoZXJyb3IsICdTYXZlZCBjaGVja3BvaW50cyBjb3VsZCBub3QgYmUgbG9hZGVkLiBUcnkgcmVsb2FkaW5nIHRoZSBwYWdlLicpKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5sb2FkaW5nLnNldChmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc2F2ZSgpOiBQcm9taXNlPEluc3BlY3RvckNoZWNrcG9pbnRSZWNvcmQgfCBudWxsPiB7XG4gICAgdGhpcy5lcnJvci5zZXQobnVsbCk7XG4gICAgaWYgKCF0aGlzLnN0b3JlKSB7XG4gICAgICB0aGlzLmVycm9yLnNldCh0aGlzLm1pc3NpbmdTdG9yZU1lc3NhZ2UoKSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLmJ1c3kuc2V0KHRydWUpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjdXJyZW50U3RhdGUgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLnN0b3JlLnBpcGUodGFrZSgxKSkpO1xuICAgICAgY29uc3Qgc3RhdGUgPSBjbG9uZUpzb24oY3VycmVudFN0YXRlKTtcbiAgICAgIGNvbnN0IHBlcnNpc3RlZCA9IGF3YWl0IHRoaXMucmVwb3NpdG9yeS5saXN0KCk7XG4gICAgICBjb25zdCByb3V0ZSA9IHRoaXMuY3VycmVudFJvdXRlKCk7XG4gICAgICBjb25zdCBwYXRobmFtZSA9IHRoaXMuY3VycmVudFBhdGhuYW1lKCk7XG4gICAgICBjb25zdCBjaGVja3BvaW50OiBJbnNwZWN0b3JDaGVja3BvaW50UmVjb3JkID0ge1xuICAgICAgICB2ZXJzaW9uOiAxLFxuICAgICAgICBpZDogY3JlYXRlQ2hlY2twb2ludElkKCksXG4gICAgICAgIG5hbWU6IG5leHRBdXRvbWF0aWNOYW1lKHBhdGhuYW1lLCBwZXJzaXN0ZWQubWFwKCh7IG5hbWUgfSkgPT4gbmFtZSkpLFxuICAgICAgICByb3V0ZSxcbiAgICAgICAgY3JlYXRlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgIHN0YXRlLFxuICAgICAgfTtcbiAgICAgIGF3YWl0IHRoaXMucmVwb3NpdG9yeS5wdXQoY2hlY2twb2ludCk7XG4gICAgICB0aGlzLmNoZWNrcG9pbnRzLnNldChbY2hlY2twb2ludCwgLi4ucGVyc2lzdGVkXS5zb3J0KHJlY2VudEFjdGl2aXR5Rmlyc3QpKTtcbiAgICAgIHJldHVybiBjaGVja3BvaW50O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLmVycm9yLnNldCh0aGlzLnN0b3JhZ2VNZXNzYWdlKGVycm9yLCAnVGhlIGNoZWNrcG9pbnQgY291bGQgbm90IGJlIHNhdmVkLicpKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmJ1c3kuc2V0KGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyByZXN0b3JlKGlkOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICB0aGlzLmVycm9yLnNldChudWxsKTtcbiAgICBpZiAoIXRoaXMuc3RvcmUpIHtcbiAgICAgIHRoaXMuZXJyb3Iuc2V0KHRoaXMubWlzc2luZ1N0b3JlTWVzc2FnZSgpKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5idXN5LnNldCh0cnVlKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY2hlY2twb2ludHMgPSBhd2FpdCB0aGlzLnJlcG9zaXRvcnkubGlzdCgpO1xuICAgICAgY29uc3QgY2hlY2twb2ludCA9IGNoZWNrcG9pbnRzLmZpbmQoKGl0ZW0pID0+IGl0ZW0uaWQgPT09IGlkKTtcbiAgICAgIGlmICghY2hlY2twb2ludCkgdGhyb3cgbmV3IEVycm9yKCdDaGVja3BvaW50IG5vdCBmb3VuZC4gSXQgbWF5IGhhdmUgYmVlbiBkZWxldGVkIGluIGFub3RoZXIgdGFiLicpO1xuICAgICAgY29uc3Qgc3RhdGUgPSBjbG9uZUpzb24oXG4gICAgICAgIGNoZWNrcG9pbnQuc3RhdGUsXG4gICAgICAgIGDigJwke2NoZWNrcG9pbnQubmFtZX3igJ0gY291bGQgbm90IGJlIGRlY29kZWQuIERlbGV0ZSBpdCBhbmQgc2F2ZSBhIG5ldyBjaGVja3BvaW50LmAsXG4gICAgICApO1xuICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaCh7IHR5cGU6IFJFU1RPUkVfQ0hFQ0tQT0lOVCwgc3RhdGUgfSBhcyBSZXN0b3JlQ2hlY2twb2ludEFjdGlvbik7XG4gICAgICBpZiAodGhpcy5yb3V0ZXIgJiYgIWF3YWl0IHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoY2hlY2twb2ludC5yb3V0ZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgc3RhdGUgd2FzIHJlc3RvcmVkLCBidXQgbmF2aWdhdGlvbiB0byDigJwke2NoZWNrcG9pbnQucm91dGV94oCdIHdhcyBjYW5jZWxsZWQuYCk7XG4gICAgICB9XG4gICAgICBjb25zdCByZWNlbnRseVVzZWRDaGVja3BvaW50ID0ge1xuICAgICAgICAuLi5jaGVja3BvaW50LFxuICAgICAgICBsYXN0VXNlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICB9O1xuICAgICAgYXdhaXQgdGhpcy5yZXBvc2l0b3J5LnB1dChyZWNlbnRseVVzZWRDaGVja3BvaW50KTtcbiAgICAgIHRoaXMuY2hlY2twb2ludHMuc2V0KFxuICAgICAgICBjaGVja3BvaW50c1xuICAgICAgICAgIC5tYXAoKGl0ZW0pID0+IGl0ZW0uaWQgPT09IGlkID8gcmVjZW50bHlVc2VkQ2hlY2twb2ludCA6IGl0ZW0pXG4gICAgICAgICAgLnNvcnQocmVjZW50QWN0aXZpdHlGaXJzdCksXG4gICAgICApO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMuZXJyb3Iuc2V0KHRoaXMubWVzc2FnZUZvcihlcnJvciwgJ1RoZSBjaGVja3BvaW50IGNvdWxkIG5vdCBiZSByZXN0b3JlZC4gRGVsZXRlIGl0IGFuZCBzYXZlIGEgbmV3IG9uZS4nKSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuYnVzeS5zZXQoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHJlbmFtZShpZDogc3RyaW5nLCBuYW1lOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICB0aGlzLmVycm9yLnNldChudWxsKTtcbiAgICBjb25zdCBuZXh0TmFtZSA9IG5hbWUudHJpbSgpO1xuICAgIGlmICghbmV4dE5hbWUpIHtcbiAgICAgIHRoaXMuZXJyb3Iuc2V0KCdQbGVhc2UgZW50ZXIgYSBjaGVja3BvaW50IG5hbWUuJyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdGhpcy5idXN5LnNldCh0cnVlKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY2hlY2twb2ludHMgPSBhd2FpdCB0aGlzLnJlcG9zaXRvcnkubGlzdCgpO1xuICAgICAgaWYgKGNoZWNrcG9pbnRzLnNvbWUoKGl0ZW0pID0+IGl0ZW0uaWQgIT09IGlkICYmIGl0ZW0ubmFtZS50b0xvY2FsZUxvd2VyQ2FzZSgpID09PSBuZXh0TmFtZS50b0xvY2FsZUxvd2VyQ2FzZSgpKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEEgY2hlY2twb2ludCBuYW1lZCDigJwke25leHROYW1lfeKAnSBhbHJlYWR5IGV4aXN0cy4gQ2hvb3NlIGEgZGlmZmVyZW50IG5hbWUuYCk7XG4gICAgICB9XG4gICAgICBjb25zdCBjaGVja3BvaW50ID0gY2hlY2twb2ludHMuZmluZCgoaXRlbSkgPT4gaXRlbS5pZCA9PT0gaWQpO1xuICAgICAgaWYgKCFjaGVja3BvaW50KSB0aHJvdyBuZXcgRXJyb3IoJ0NoZWNrcG9pbnQgbm90IGZvdW5kLiBJdCBtYXkgaGF2ZSBiZWVuIGRlbGV0ZWQgaW4gYW5vdGhlciB0YWIuJyk7XG4gICAgICBhd2FpdCB0aGlzLnJlcG9zaXRvcnkucHV0KHsgLi4uY2hlY2twb2ludCwgbmFtZTogbmV4dE5hbWUgfSk7XG4gICAgICB0aGlzLmNoZWNrcG9pbnRzLnNldChcbiAgICAgICAgY2hlY2twb2ludHMubWFwKChpdGVtKSA9PiBpdGVtLmlkID09PSBpZCA/IHsgLi4uaXRlbSwgbmFtZTogbmV4dE5hbWUgfSA6IGl0ZW0pLnNvcnQocmVjZW50QWN0aXZpdHlGaXJzdCksXG4gICAgICApO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMuZXJyb3Iuc2V0KHRoaXMuc3RvcmFnZU1lc3NhZ2UoZXJyb3IsICdUaGUgY2hlY2twb2ludCBjb3VsZCBub3QgYmUgcmVuYW1lZC4nKSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuYnVzeS5zZXQoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZShpZDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdGhpcy5lcnJvci5zZXQobnVsbCk7XG4gICAgdGhpcy5idXN5LnNldCh0cnVlKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5yZXBvc2l0b3J5LmRlbGV0ZShpZCk7XG4gICAgICB0aGlzLmNoZWNrcG9pbnRzLnNldCh0aGlzLmNoZWNrcG9pbnRzKCkuZmlsdGVyKChpdGVtKSA9PiBpdGVtLmlkICE9PSBpZCkpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMuZXJyb3Iuc2V0KHRoaXMuc3RvcmFnZU1lc3NhZ2UoZXJyb3IsICdUaGUgY2hlY2twb2ludCBjb3VsZCBub3QgYmUgZGVsZXRlZC4nKSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuYnVzeS5zZXQoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIGNsZWFyRXJyb3IoKTogdm9pZCB7XG4gICAgdGhpcy5lcnJvci5zZXQobnVsbCk7XG4gIH1cblxuICBwcml2YXRlIGN1cnJlbnRSb3V0ZSgpOiBzdHJpbmcge1xuICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkgcmV0dXJuICcvJztcbiAgICByZXR1cm4gYCR7dGhpcy5jdXJyZW50UGF0aG5hbWUoKX0ke3dpbmRvdy5sb2NhdGlvbi5zZWFyY2h9JHt3aW5kb3cubG9jYXRpb24uaGFzaH1gO1xuICB9XG5cbiAgcHJpdmF0ZSBjdXJyZW50UGF0aG5hbWUoKTogc3RyaW5nIHtcbiAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHJldHVybiAnLyc7XG4gICAgcmV0dXJuIHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSB8fCAnLyc7XG4gIH1cblxuICBwcml2YXRlIG1pc3NpbmdTdG9yZU1lc3NhZ2UoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ1RoZSBOZ1J4IHJvb3Qgc3RvcmUgaXMgdW5hdmFpbGFibGUuIENoZWNrIHRoYXQgcHJvdmlkZUluc3BlY3RvckNoZWNrcG9pbnRzKCkgaXMgcmVnaXN0ZXJlZCBhZnRlciBwcm92aWRlU3RvcmUoKS4nO1xuICB9XG5cbiAgcHJpdmF0ZSBzdG9yYWdlTWVzc2FnZShlcnJvcjogdW5rbm93biwgZmFsbGJhY2s6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKGlzUXVvdGFFcnJvcihlcnJvcikpIHtcbiAgICAgIHJldHVybiAnQnJvd3NlciBzdG9yYWdlIGlzIGZ1bGwuIERlbGV0ZSBvbGQgY2hlY2twb2ludHMsIHRoZW4gdHJ5IHNhdmluZyBhZ2Fpbi4nO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5tZXNzYWdlRm9yKGVycm9yLCBmYWxsYmFjayk7XG4gIH1cblxuICBwcml2YXRlIG1lc3NhZ2VGb3IoZXJyb3I6IHVua25vd24sIGZhbGxiYWNrOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmIGVycm9yLm1lc3NhZ2UgPyBlcnJvci5tZXNzYWdlIDogZmFsbGJhY2s7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVJbnNwZWN0b3JDaGVja3BvaW50cygpOiBFbnZpcm9ubWVudFByb3ZpZGVycyB7XG4gIHJldHVybiBtYWtlRW52aXJvbm1lbnRQcm92aWRlcnMoW1xuICAgIEluZGV4ZWREYkNoZWNrcG9pbnRSZXBvc2l0b3J5LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IElOU1BFQ1RPUl9DSEVDS1BPSU5UX1JFUE9TSVRPUlksXG4gICAgICB1c2VFeGlzdGluZzogSW5kZXhlZERiQ2hlY2twb2ludFJlcG9zaXRvcnksXG4gICAgfSxcbiAgICBJbnNwZWN0b3JDaGVja3BvaW50U2VydmljZSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBNRVRBX1JFRFVDRVJTLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgICB1c2VWYWx1ZTogaW5zcGVjdG9yQ2hlY2twb2ludE1ldGFSZWR1Y2VyLFxuICAgIH0sXG4gIF0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmV4dEF1dG9tYXRpY05hbWUocm91dGU6IHN0cmluZywgbmFtZXM6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgY29uc3QgdXNlZCA9IG5ldyBTZXQobmFtZXMubWFwKChuYW1lKSA9PiBuYW1lLnRvTG9jYWxlTG93ZXJDYXNlKCkpKTtcbiAgaWYgKCF1c2VkLmhhcyhyb3V0ZS50b0xvY2FsZUxvd2VyQ2FzZSgpKSkgcmV0dXJuIHJvdXRlO1xuICBmb3IgKGxldCBzdWZmaXggPSAyOyA7IHN1ZmZpeCArPSAxKSB7XG4gICAgY29uc3QgY2FuZGlkYXRlID0gYCR7cm91dGV9ICR7c3VmZml4fWA7XG4gICAgaWYgKCF1c2VkLmhhcyhjYW5kaWRhdGUudG9Mb2NhbGVMb3dlckNhc2UoKSkpIHJldHVybiBjYW5kaWRhdGU7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2xvbmVKc29uKFxuICB2YWx1ZTogdW5rbm93bixcbiAgZmFpbHVyZU1lc3NhZ2UgPSAnVGhlIE5nUnggcm9vdCBzdGF0ZSBpcyBub3QgSlNPTi1zZXJpYWxpemFibGUuIFJlbW92ZSBjaXJjdWxhciBvciB1bnN1cHBvcnRlZCB2YWx1ZXMgYW5kIHRyeSBhZ2Fpbi4nLFxuKTogdW5rbm93biB7XG4gIHRyeSB7XG4gICAgY29uc3Qgc2VyaWFsaXplZCA9IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICBpZiAoc2VyaWFsaXplZCA9PT0gdW5kZWZpbmVkKSB0aHJvdyBuZXcgRXJyb3IoKTtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShzZXJpYWxpemVkKSBhcyB1bmtub3duO1xuICB9IGNhdGNoIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoZmFpbHVyZU1lc3NhZ2UpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNoZWNrcG9pbnRJZCgpOiBzdHJpbmcge1xuICBpZiAodHlwZW9mIGNyeXB0byAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGNyeXB0by5yYW5kb21VVUlEID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGNyeXB0by5yYW5kb21VVUlEKCk7XG4gIH1cbiAgcmV0dXJuIGBjaGVja3BvaW50LSR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyLCA5KX1gO1xufVxuXG5mdW5jdGlvbiBpc1F1b3RhRXJyb3IoZXJyb3I6IHVua25vd24pOiBib29sZWFuIHtcbiAgcmV0dXJuIGVycm9yIGluc3RhbmNlb2YgRE9NRXhjZXB0aW9uICYmIChcbiAgICBlcnJvci5uYW1lID09PSAnUXVvdGFFeGNlZWRlZEVycm9yJyB8fCBlcnJvci5uYW1lID09PSAnTlNfRVJST1JfRE9NX1FVT1RBX1JFQUNIRUQnXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGVja3BvaW50QWN0aXZpdHlBdChjaGVja3BvaW50OiBJbnNwZWN0b3JDaGVja3BvaW50UmVjb3JkKTogc3RyaW5nIHtcbiAgcmV0dXJuIGNoZWNrcG9pbnQubGFzdFVzZWRBdCAmJiBjaGVja3BvaW50Lmxhc3RVc2VkQXQgPiBjaGVja3BvaW50LmNyZWF0ZWRBdFxuICAgID8gY2hlY2twb2ludC5sYXN0VXNlZEF0XG4gICAgOiBjaGVja3BvaW50LmNyZWF0ZWRBdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlY2VudEFjdGl2aXR5Rmlyc3QoXG4gIGE6IEluc3BlY3RvckNoZWNrcG9pbnRSZWNvcmQsXG4gIGI6IEluc3BlY3RvckNoZWNrcG9pbnRSZWNvcmQsXG4pOiBudW1iZXIge1xuICByZXR1cm4gY2hlY2twb2ludEFjdGl2aXR5QXQoYikubG9jYWxlQ29tcGFyZShjaGVja3BvaW50QWN0aXZpdHlBdChhKSkgfHxcbiAgICBiLmNyZWF0ZWRBdC5sb2NhbGVDb21wYXJlKGEuY3JlYXRlZEF0KSB8fFxuICAgIGIuaWQubG9jYWxlQ29tcGFyZShhLmlkKTtcbn1cblxuZnVuY3Rpb24gaXNDaGVja3BvaW50UmVjb3JkKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgSW5zcGVjdG9yQ2hlY2twb2ludFJlY29yZCB7XG4gIGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBjaGVja3BvaW50ID0gdmFsdWUgYXMgUGFydGlhbDxJbnNwZWN0b3JDaGVja3BvaW50UmVjb3JkPjtcbiAgcmV0dXJuIGNoZWNrcG9pbnQudmVyc2lvbiA9PT0gMSAmJlxuICAgIHR5cGVvZiBjaGVja3BvaW50LmlkID09PSAnc3RyaW5nJyAmJlxuICAgIHR5cGVvZiBjaGVja3BvaW50Lm5hbWUgPT09ICdzdHJpbmcnICYmXG4gICAgdHlwZW9mIGNoZWNrcG9pbnQucm91dGUgPT09ICdzdHJpbmcnICYmXG4gICAgdHlwZW9mIGNoZWNrcG9pbnQuY3JlYXRlZEF0ID09PSAnc3RyaW5nJyAmJlxuICAgIChjaGVja3BvaW50Lmxhc3RVc2VkQXQgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgY2hlY2twb2ludC5sYXN0VXNlZEF0ID09PSAnc3RyaW5nJykgJiZcbiAgICAnc3RhdGUnIGluIGNoZWNrcG9pbnQ7XG59XG4iXX0=
|