claude-code-sync 0.1.13 → 0.1.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +208 -28
- package/dist/index.d.ts +55 -24
- package/dist/index.js +169 -40
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -48,6 +48,38 @@ const readline = __importStar(require("readline"));
|
|
|
48
48
|
const fs = __importStar(require("fs"));
|
|
49
49
|
const path = __importStar(require("path"));
|
|
50
50
|
const index_1 = require("./index");
|
|
51
|
+
// Pricing per million tokens (USD) with cache pricing
|
|
52
|
+
// Source: https://www.anthropic.com/pricing
|
|
53
|
+
const MODEL_PRICING = {
|
|
54
|
+
"claude-sonnet-4-20250514": { input: 3.00, output: 15.00, cacheWrite: 3.75, cacheRead: 0.30 },
|
|
55
|
+
"claude-opus-4-20250514": { input: 15.00, output: 75.00, cacheWrite: 18.75, cacheRead: 1.50 },
|
|
56
|
+
"claude-opus-4-5-20251101": { input: 15.00, output: 75.00, cacheWrite: 18.75, cacheRead: 1.50 },
|
|
57
|
+
"claude-3-5-sonnet-20241022": { input: 3.00, output: 15.00, cacheWrite: 3.75, cacheRead: 0.30 },
|
|
58
|
+
"claude-3-opus-20240229": { input: 15.00, output: 75.00, cacheWrite: 18.75, cacheRead: 1.50 },
|
|
59
|
+
"claude-3-5-haiku-20241022": { input: 0.80, output: 4.00, cacheWrite: 1.00, cacheRead: 0.08 },
|
|
60
|
+
};
|
|
61
|
+
// Calculate cost from model and token usage with proper cache pricing
|
|
62
|
+
function calculateCost(model, stats) {
|
|
63
|
+
if (!model)
|
|
64
|
+
return 0;
|
|
65
|
+
// Try exact match first
|
|
66
|
+
let pricing = MODEL_PRICING[model];
|
|
67
|
+
// Try partial match if exact match fails
|
|
68
|
+
if (!pricing) {
|
|
69
|
+
const matchingKey = Object.keys(MODEL_PRICING).find(k => model.includes(k) || k.includes(model));
|
|
70
|
+
if (matchingKey) {
|
|
71
|
+
pricing = MODEL_PRICING[matchingKey];
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
if (!pricing)
|
|
75
|
+
return 0;
|
|
76
|
+
// Calculate cost with proper cache pricing
|
|
77
|
+
const inputCost = stats.inputTokens * pricing.input;
|
|
78
|
+
const cacheWriteCost = stats.cacheCreationTokens * pricing.cacheWrite;
|
|
79
|
+
const cacheReadCost = stats.cacheReadTokens * pricing.cacheRead;
|
|
80
|
+
const outputCost = stats.outputTokens * pricing.output;
|
|
81
|
+
return (inputCost + cacheWriteCost + cacheReadCost + outputCost) / 1_000_000;
|
|
82
|
+
}
|
|
51
83
|
// Read version from package.json
|
|
52
84
|
function getVersion() {
|
|
53
85
|
try {
|
|
@@ -525,7 +557,20 @@ function generateTitle(prompt) {
|
|
|
525
557
|
function parseTranscriptFile(transcriptPath) {
|
|
526
558
|
const result = {
|
|
527
559
|
assistantMessages: [],
|
|
528
|
-
|
|
560
|
+
stats: {
|
|
561
|
+
model: undefined,
|
|
562
|
+
inputTokens: 0,
|
|
563
|
+
cacheCreationTokens: 0,
|
|
564
|
+
cacheReadTokens: 0,
|
|
565
|
+
outputTokens: 0,
|
|
566
|
+
messageCount: 0,
|
|
567
|
+
toolCallCount: 0,
|
|
568
|
+
title: undefined,
|
|
569
|
+
cwd: undefined,
|
|
570
|
+
startedAt: undefined,
|
|
571
|
+
endedAt: undefined,
|
|
572
|
+
durationMs: undefined,
|
|
573
|
+
},
|
|
529
574
|
};
|
|
530
575
|
try {
|
|
531
576
|
if (!fs.existsSync(transcriptPath)) {
|
|
@@ -534,16 +579,40 @@ function parseTranscriptFile(transcriptPath) {
|
|
|
534
579
|
const content = fs.readFileSync(transcriptPath, "utf-8");
|
|
535
580
|
const lines = content.trim().split("\n");
|
|
536
581
|
const seenUuids = new Set();
|
|
582
|
+
let firstTimestamp;
|
|
583
|
+
let lastTimestamp;
|
|
537
584
|
for (const line of lines) {
|
|
538
585
|
if (!line.trim())
|
|
539
586
|
continue;
|
|
540
587
|
try {
|
|
541
588
|
const entry = JSON.parse(line);
|
|
542
|
-
//
|
|
589
|
+
// Track timestamps for duration calculation
|
|
590
|
+
if (entry.timestamp) {
|
|
591
|
+
if (!firstTimestamp) {
|
|
592
|
+
firstTimestamp = entry.timestamp;
|
|
593
|
+
}
|
|
594
|
+
lastTimestamp = entry.timestamp;
|
|
595
|
+
}
|
|
596
|
+
// Get cwd and title from first entry that has them
|
|
597
|
+
if (!result.stats.cwd && entry.cwd) {
|
|
598
|
+
result.stats.cwd = entry.cwd;
|
|
599
|
+
}
|
|
600
|
+
if (!result.stats.title && entry.slug) {
|
|
601
|
+
result.stats.title = entry.slug;
|
|
602
|
+
}
|
|
603
|
+
// Count user messages
|
|
604
|
+
if (entry.type === "user") {
|
|
605
|
+
result.stats.messageCount++;
|
|
606
|
+
}
|
|
607
|
+
// Process assistant messages
|
|
543
608
|
if (entry.type === "assistant" && entry.message) {
|
|
544
609
|
const msg = entry.message;
|
|
545
610
|
const uuid = entry.uuid || "";
|
|
546
|
-
//
|
|
611
|
+
// Get model from first assistant message
|
|
612
|
+
if (msg.model && !result.stats.model) {
|
|
613
|
+
result.stats.model = msg.model;
|
|
614
|
+
}
|
|
615
|
+
// Skip duplicate UUIDs for message extraction
|
|
547
616
|
if (uuid && seenUuids.has(uuid))
|
|
548
617
|
continue;
|
|
549
618
|
if (uuid)
|
|
@@ -559,15 +628,18 @@ function parseTranscriptFile(transcriptPath) {
|
|
|
559
628
|
model: msg.model,
|
|
560
629
|
});
|
|
561
630
|
}
|
|
631
|
+
// Count tool uses
|
|
632
|
+
if (part.type === "tool_use") {
|
|
633
|
+
result.stats.toolCallCount++;
|
|
634
|
+
}
|
|
562
635
|
}
|
|
563
636
|
}
|
|
564
|
-
// Accumulate token usage
|
|
637
|
+
// Accumulate token usage (separate cache tokens for cost calculation)
|
|
565
638
|
if (msg.usage) {
|
|
566
|
-
result.
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
result.tokenUsage.output += msg.usage.output_tokens || 0;
|
|
639
|
+
result.stats.inputTokens += msg.usage.input_tokens || 0;
|
|
640
|
+
result.stats.cacheCreationTokens += msg.usage.cache_creation_input_tokens || 0;
|
|
641
|
+
result.stats.cacheReadTokens += msg.usage.cache_read_input_tokens || 0;
|
|
642
|
+
result.stats.outputTokens += msg.usage.output_tokens || 0;
|
|
571
643
|
}
|
|
572
644
|
}
|
|
573
645
|
}
|
|
@@ -575,6 +647,16 @@ function parseTranscriptFile(transcriptPath) {
|
|
|
575
647
|
// Skip malformed lines
|
|
576
648
|
}
|
|
577
649
|
}
|
|
650
|
+
// Calculate duration from timestamps
|
|
651
|
+
if (firstTimestamp && lastTimestamp) {
|
|
652
|
+
result.stats.startedAt = firstTimestamp;
|
|
653
|
+
result.stats.endedAt = lastTimestamp;
|
|
654
|
+
const startMs = new Date(firstTimestamp).getTime();
|
|
655
|
+
const endMs = new Date(lastTimestamp).getTime();
|
|
656
|
+
if (!isNaN(startMs) && !isNaN(endMs)) {
|
|
657
|
+
result.stats.durationMs = endMs - startMs;
|
|
658
|
+
}
|
|
659
|
+
}
|
|
578
660
|
}
|
|
579
661
|
catch {
|
|
580
662
|
// Return empty result on error
|
|
@@ -607,44 +689,112 @@ program
|
|
|
607
689
|
switch (event) {
|
|
608
690
|
case "SessionStart": {
|
|
609
691
|
const data = JSON.parse(input);
|
|
692
|
+
// Parse transcript if available to get initial info
|
|
693
|
+
let stats;
|
|
694
|
+
if (data.transcript_path && fs.existsSync(data.transcript_path)) {
|
|
695
|
+
const parsed = parseTranscriptFile(data.transcript_path);
|
|
696
|
+
stats = parsed.stats;
|
|
697
|
+
}
|
|
698
|
+
const cwd = stats?.cwd || data.cwd;
|
|
699
|
+
const startedAt = new Date().toISOString();
|
|
610
700
|
// Initialize session state
|
|
611
701
|
sessionState[data.session_id] = {
|
|
612
|
-
model: data.model,
|
|
702
|
+
model: stats?.model || data.model,
|
|
613
703
|
tokenUsage: { input: 0, output: 0 },
|
|
704
|
+
cacheCreationTokens: 0,
|
|
705
|
+
cacheReadTokens: 0,
|
|
614
706
|
messageCount: 0,
|
|
707
|
+
toolCallCount: 0,
|
|
708
|
+
startedAt,
|
|
709
|
+
title: stats?.title,
|
|
710
|
+
cwd,
|
|
615
711
|
};
|
|
616
712
|
saveSessionState(sessionState);
|
|
617
713
|
const session = {
|
|
618
714
|
sessionId: data.session_id,
|
|
619
715
|
source: "claude-code",
|
|
620
|
-
cwd
|
|
621
|
-
model: data.model,
|
|
716
|
+
cwd,
|
|
717
|
+
model: stats?.model || data.model,
|
|
718
|
+
title: stats?.title,
|
|
622
719
|
permissionMode: data.permission_mode,
|
|
623
720
|
thinkingEnabled: data.thinking_enabled,
|
|
624
721
|
mcpServers: data.mcp_servers,
|
|
625
722
|
startType: data.source === "startup" ? "new" : data.source,
|
|
626
|
-
startedAt
|
|
627
|
-
projectPath:
|
|
628
|
-
projectName:
|
|
723
|
+
startedAt,
|
|
724
|
+
projectPath: cwd,
|
|
725
|
+
projectName: cwd ? path.basename(cwd) : undefined,
|
|
629
726
|
};
|
|
727
|
+
// Try to get git branch from cwd
|
|
728
|
+
if (cwd) {
|
|
729
|
+
try {
|
|
730
|
+
const gitDir = path.join(cwd, ".git");
|
|
731
|
+
if (fs.existsSync(gitDir)) {
|
|
732
|
+
const headFile = path.join(gitDir, "HEAD");
|
|
733
|
+
if (fs.existsSync(headFile)) {
|
|
734
|
+
const head = fs.readFileSync(headFile, "utf-8").trim();
|
|
735
|
+
if (head.startsWith("ref: refs/heads/")) {
|
|
736
|
+
session.gitBranch = head.replace("ref: refs/heads/", "");
|
|
737
|
+
}
|
|
738
|
+
}
|
|
739
|
+
}
|
|
740
|
+
}
|
|
741
|
+
catch {
|
|
742
|
+
// Ignore git errors
|
|
743
|
+
}
|
|
744
|
+
}
|
|
630
745
|
await client.syncSession(session);
|
|
631
746
|
break;
|
|
632
747
|
}
|
|
633
748
|
case "SessionEnd": {
|
|
634
749
|
const data = JSON.parse(input);
|
|
635
750
|
const state = sessionState[data.session_id] || {};
|
|
636
|
-
//
|
|
637
|
-
|
|
751
|
+
// Parse transcript to get final stats including model, tokens, cost
|
|
752
|
+
let stats = {
|
|
753
|
+
model: state.model,
|
|
754
|
+
inputTokens: state.tokenUsage?.input || 0,
|
|
755
|
+
cacheCreationTokens: state.cacheCreationTokens || 0,
|
|
756
|
+
cacheReadTokens: state.cacheReadTokens || 0,
|
|
757
|
+
outputTokens: state.tokenUsage?.output || 0,
|
|
758
|
+
messageCount: state.messageCount || 0,
|
|
759
|
+
toolCallCount: state.toolCallCount || 0,
|
|
760
|
+
title: state.title,
|
|
761
|
+
cwd: state.cwd || data.cwd,
|
|
762
|
+
startedAt: state.startedAt,
|
|
763
|
+
endedAt: state.endedAt,
|
|
764
|
+
durationMs: state.durationMs,
|
|
765
|
+
};
|
|
766
|
+
if (data.transcript_path && fs.existsSync(data.transcript_path)) {
|
|
767
|
+
const parsed = parseTranscriptFile(data.transcript_path);
|
|
768
|
+
stats = parsed.stats;
|
|
769
|
+
}
|
|
770
|
+
// Calculate cost from tokens (with proper cache pricing)
|
|
771
|
+
let cost = data.cost_estimate;
|
|
772
|
+
if ((cost === undefined || cost === null || cost === 0) && stats.model) {
|
|
773
|
+
if (stats.inputTokens || stats.outputTokens || stats.cacheReadTokens || stats.cacheCreationTokens) {
|
|
774
|
+
cost = calculateCost(stats.model, stats);
|
|
775
|
+
}
|
|
776
|
+
}
|
|
777
|
+
const cwd = stats.cwd || data.cwd;
|
|
778
|
+
const totalInputTokens = stats.inputTokens + stats.cacheCreationTokens + stats.cacheReadTokens;
|
|
779
|
+
const endedAt = stats.endedAt || new Date().toISOString();
|
|
638
780
|
const session = {
|
|
639
781
|
sessionId: data.session_id,
|
|
640
782
|
source: "claude-code",
|
|
641
|
-
|
|
783
|
+
model: stats.model,
|
|
784
|
+
title: stats.title || (state.firstPrompt ? generateTitle(state.firstPrompt) : undefined),
|
|
785
|
+
cwd,
|
|
786
|
+
projectPath: cwd,
|
|
787
|
+
projectName: cwd ? path.basename(cwd) : undefined,
|
|
642
788
|
endReason: data.reason,
|
|
643
|
-
messageCount: data.message_count ||
|
|
644
|
-
toolCallCount: data.tool_call_count,
|
|
645
|
-
tokenUsage:
|
|
646
|
-
|
|
647
|
-
|
|
789
|
+
messageCount: data.message_count || stats.messageCount,
|
|
790
|
+
toolCallCount: data.tool_call_count || stats.toolCallCount,
|
|
791
|
+
tokenUsage: {
|
|
792
|
+
input: totalInputTokens,
|
|
793
|
+
output: stats.outputTokens,
|
|
794
|
+
},
|
|
795
|
+
costEstimate: cost,
|
|
796
|
+
startedAt: stats.startedAt,
|
|
797
|
+
endedAt,
|
|
648
798
|
};
|
|
649
799
|
await client.syncSession(session);
|
|
650
800
|
// Clean up session state
|
|
@@ -709,9 +859,36 @@ program
|
|
|
709
859
|
// Parse transcript file to extract assistant messages and token usage
|
|
710
860
|
if (data.transcript_path) {
|
|
711
861
|
const transcript = parseTranscriptFile(data.transcript_path);
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
862
|
+
const { stats } = transcript;
|
|
863
|
+
// Update token usage from transcript (track cache tokens separately)
|
|
864
|
+
if (stats.inputTokens > 0 || stats.outputTokens > 0 || stats.cacheReadTokens > 0) {
|
|
865
|
+
const totalInput = stats.inputTokens + stats.cacheCreationTokens + stats.cacheReadTokens;
|
|
866
|
+
state.tokenUsage = { input: totalInput, output: stats.outputTokens };
|
|
867
|
+
state.cacheCreationTokens = stats.cacheCreationTokens;
|
|
868
|
+
state.cacheReadTokens = stats.cacheReadTokens;
|
|
869
|
+
}
|
|
870
|
+
// Update model if found
|
|
871
|
+
if (stats.model && !state.model) {
|
|
872
|
+
state.model = stats.model;
|
|
873
|
+
}
|
|
874
|
+
// Update title if found from transcript slug
|
|
875
|
+
if (stats.title && !state.title) {
|
|
876
|
+
state.title = stats.title;
|
|
877
|
+
}
|
|
878
|
+
// Update duration info
|
|
879
|
+
if (stats.startedAt)
|
|
880
|
+
state.startedAt = stats.startedAt;
|
|
881
|
+
if (stats.endedAt)
|
|
882
|
+
state.endedAt = stats.endedAt;
|
|
883
|
+
if (stats.durationMs)
|
|
884
|
+
state.durationMs = stats.durationMs;
|
|
885
|
+
// Update tool call count
|
|
886
|
+
if (stats.toolCallCount > 0) {
|
|
887
|
+
state.toolCallCount = stats.toolCallCount;
|
|
888
|
+
}
|
|
889
|
+
// Calculate cost if we have model and tokens
|
|
890
|
+
if (stats.model && (stats.inputTokens || stats.outputTokens || stats.cacheReadTokens)) {
|
|
891
|
+
state.costEstimate = calculateCost(stats.model, stats);
|
|
715
892
|
}
|
|
716
893
|
// Track which messages we've already synced to avoid duplicates
|
|
717
894
|
const syncedMessages = state.syncedMessageUuids instanceof Set
|
|
@@ -742,12 +919,15 @@ program
|
|
|
742
919
|
}
|
|
743
920
|
sessionState[data.session_id] = state;
|
|
744
921
|
saveSessionState(sessionState);
|
|
745
|
-
// Update session with token usage from transcript
|
|
922
|
+
// Update session with token usage, model, and cost from transcript
|
|
746
923
|
const session = {
|
|
747
924
|
sessionId: data.session_id,
|
|
748
925
|
source: "claude-code",
|
|
926
|
+
model: state.model,
|
|
749
927
|
tokenUsage: state.tokenUsage,
|
|
750
928
|
messageCount: state.messageCount,
|
|
929
|
+
toolCallCount: state.toolCallCount,
|
|
930
|
+
costEstimate: state.costEstimate,
|
|
751
931
|
};
|
|
752
932
|
await client.syncSession(session);
|
|
753
933
|
break;
|
|
@@ -766,4 +946,4 @@ program
|
|
|
766
946
|
});
|
|
767
947
|
// Parse and run
|
|
768
948
|
program.parse();
|
|
769
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NsaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUVBOzs7Ozs7OztHQVFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVILHlDQUFvQztBQUNwQyxtREFBcUM7QUFDckMsdUNBQXlCO0FBQ3pCLDJDQUE2QjtBQUM3QixtQ0FRaUI7QUFpR2pCLGlDQUFpQztBQUNqQyxTQUFTLFVBQVU7SUFDakIsSUFBSSxDQUFDO1FBQ0gsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQzNELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQWdCLENBQUM7UUFDekUsT0FBTyxHQUFHLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQztJQUNoQyxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztBQUNILENBQUM7QUFFRCxNQUFNLE9BQU8sR0FBRyxJQUFJLG1CQUFPLEVBQUUsQ0FBQztBQUU5QixPQUFPO0tBQ0osSUFBSSxDQUFDLGtCQUFrQixDQUFDO0tBQ3hCLFdBQVcsQ0FBQyxpREFBaUQsQ0FBQztLQUM5RCxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztBQUV6QiwrRUFBK0U7QUFDL0UsbUJBQW1CO0FBQ25CLCtFQUErRTtBQUUvRSxTQUFTLE1BQU0sQ0FBQyxRQUFnQjtJQUM5QixNQUFNLEVBQUUsR0FBRyxRQUFRLENBQUMsZUFBZSxDQUFDO1FBQ2xDLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSztRQUNwQixNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07S0FDdkIsQ0FBQyxDQUFDO0lBRUgsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFB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QyxDQUFDO2dCQUNGLE1BQU0sTUFBTSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDbEMsTUFBTTtZQUNSLENBQUM7WUFFRDtnQkFDRSx3QkFBd0I7Z0JBQ3hCLE1BQU07UUFDVixDQUFDO1FBRUQsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQixDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLDRDQUE0QztRQUM1QyxPQUFPLENBQUMsS0FBSyxDQUFDLDZCQUE2QixLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ3BELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEIsQ0FBQztBQUNILENBQUMsQ0FBQyxDQUFDO0FBRUwsZ0JBQWdCO0FBQ2hCLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIiMhL3Vzci9iaW4vZW52IG5vZGVcblxuLyoqXG4gKiBDbGF1ZGUgQ29kZSBTeW5jIENMSVxuICpcbiAqIENvbW1hbmRzOlxuICogICBsb2dpbiAgIC0gQ29uZmlndXJlIENvbnZleCBVUkwgYW5kIEFQSSBLZXlcbiAqICAgbG9nb3V0ICAtIENsZWFyIHN0b3JlZCBjcmVkZW50aWFsc1xuICogICBzdGF0dXMgIC0gU2hvdyBjb25uZWN0aW9uIHN0YXR1c1xuICogICBjb25maWcgIC0gU2hvdyBjdXJyZW50IGNvbmZpZ3VyYXRpb25cbiAqL1xuXG5pbXBvcnQgeyBDb21tYW5kIH0gZnJvbSBcImNvbW1hbmRlclwiO1xuaW1wb3J0ICogYXMgcmVhZGxpbmUgZnJvbSBcInJlYWRsaW5lXCI7XG5pbXBvcnQgKiBhcyBmcyBmcm9tIFwiZnNcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7XG4gIGxvYWRDb25maWcsXG4gIHNhdmVDb25maWcsXG4gIGNsZWFyQ29uZmlnLFxuICBTeW5jQ2xpZW50LFxuICBDb25maWcsXG4gIFNlc3Npb25EYXRhLFxuICBNZXNzYWdlRGF0YSxcbn0gZnJvbSBcIi4vaW5kZXhcIjtcblxuLy8gVHlwZXMgZm9yIENsYXVkZSBDb2RlIGhvb2sgZXZlbnQgZGF0YSBmcm9tIHN0ZGluXG5pbnRlcmZhY2UgSG9va1Nlc3Npb25TdGFydERhdGEge1xuICBzZXNzaW9uX2lkOiBzdHJpbmc7XG4gIGN3ZD86IHN0cmluZztcbiAgbW9kZWw/OiBzdHJpbmc7XG4gIHBlcm1pc3Npb25fbW9kZT86IHN0cmluZztcbiAgc291cmNlPzogc3RyaW5nO1xuICB0aGlua2luZ19lbmFibGVkPzogYm9vbGVhbjtcbiAgbWNwX3NlcnZlcnM/OiBzdHJpbmdbXTtcbn1cblxuaW50ZXJmYWNlIEhvb2tTZXNzaW9uRW5kRGF0YSB7XG4gIHNlc3Npb25faWQ6IHN0cmluZztcbiAgcmVhc29uPzogXCJ1c2VyX3N0b3BcIiB8IFwibWF4X3R1cm5zXCIgfCBcImVycm9yXCIgfCBcImNvbXBsZXRlZFwiO1xuICBtZXNzYWdlX2NvdW50PzogbnVtYmVyO1xuICB0b29sX2NhbGxfY291bnQ/OiBudW1iZXI7XG4gIHRvdGFsX3Rva2VuX3VzYWdlPzoge1xuICAgIGlucHV0OiBudW1iZXI7XG4gICAgb3V0cHV0OiBudW1iZXI7XG4gIH07XG4gIGNvc3RfZXN0aW1hdGU/OiBudW1iZXI7XG59XG5cbmludGVyZmFjZSBIb29rVXNlclByb21wdERhdGEge1xuICBzZXNzaW9uX2lkOiBzdHJpbmc7XG4gIHByb21wdDogc3RyaW5nO1xuICB0aW1lc3RhbXA/OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBIb29rVG9vbFVzZURhdGEge1xuICBzZXNzaW9uX2lkOiBzdHJpbmc7XG4gIHRvb2xfbmFtZTogc3RyaW5nO1xuICB0b29sX3VzZV9pZD86IHN0cmluZztcbiAgdG9vbF9pbnB1dD86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICB0b29sX3Jlc3VsdD86IHtcbiAgICBvdXRwdXQ/OiBzdHJpbmc7XG4gICAgZXJyb3I/OiBzdHJpbmc7XG4gIH07XG4gIGR1cmF0aW9uX21zPzogbnVtYmVyO1xuICBzdWNjZXNzPzogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIEhvb2tTdG9wRGF0YSB7XG4gIHNlc3Npb25faWQ6IHN0cmluZztcbiAgdHJhbnNjcmlwdF9wYXRoPzogc3RyaW5nO1xuICBzdG9wX2hvb2tfYWN0aXZlPzogYm9vbGVhbjtcbiAgcGVybWlzc2lvbl9tb2RlPzogc3RyaW5nO1xuICBjd2Q/OiBzdHJpbmc7XG4gIGhvb2tfZXZlbnRfbmFtZT86IHN0cmluZztcbn1cblxuLy8gVHlwZXMgZm9yIENsYXVkZSBDb2RlIHRyYW5zY3JpcHQgSlNPTkwgZW50cmllc1xuaW50ZXJmYWNlIFRyYW5zY3JpcHRVc2FnZSB7XG4gIGlucHV0X3Rva2Vucz86IG51bWJlcjtcbiAgb3V0cHV0X3Rva2Vucz86IG51bWJlcjtcbiAgY2FjaGVfcmVhZF9pbnB1dF90b2tlbnM/OiBudW1iZXI7XG4gIGNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2Vucz86IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIFRyYW5zY3JpcHRDb250ZW50UGFydCB7XG4gIHR5cGU6IFwidGV4dFwiIHwgXCJ0aGlua2luZ1wiIHwgXCJ0b29sX3VzZVwiIHwgXCJ0b29sX3Jlc3VsdFwiO1xuICB0ZXh0Pzogc3RyaW5nO1xuICB0aGlua2luZz86IHN0cmluZztcbiAgaWQ/OiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIGlucHV0PzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5cbmludGVyZmFjZSBUcmFuc2NyaXB0TWVzc2FnZSB7XG4gIGNvbnRlbnQ/OiBUcmFuc2NyaXB0Q29udGVudFBhcnRbXTtcbiAgdXNhZ2U/OiBUcmFuc2NyaXB0VXNhZ2U7XG4gIG1vZGVsPzogc3RyaW5nO1xuICBzdG9wX3JlYXNvbj86IHN0cmluZyB8IG51bGw7XG59XG5cbmludGVyZmFjZSBUcmFuc2NyaXB0RW50cnkge1xuICB0eXBlPzogc3RyaW5nO1xuICB1dWlkPzogc3RyaW5nO1xuICB0aW1lc3RhbXA/OiBzdHJpbmc7XG4gIG1lc3NhZ2U/OiBUcmFuc2NyaXB0TWVzc2FnZTtcbiAgc2Vzc2lvbklkPzogc3RyaW5nO1xuICBwYXJlbnRVdWlkPzogc3RyaW5nO1xufVxuXG4vLyBUeXBlcyBmb3IgQ2xhdWRlIENvZGUgc2V0dGluZ3MuanNvblxuaW50ZXJmYWNlIENsYXVkZVNldHRpbmdzIHtcbiAgaG9va3M/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgW2tleTogc3RyaW5nXTogdW5rbm93bjtcbn1cblxuLy8gVHlwZSBmb3IgcGFja2FnZS5qc29uIHZlcnNpb24gZmllbGRcbmludGVyZmFjZSBQYWNrYWdlSnNvbiB7XG4gIHZlcnNpb24/OiBzdHJpbmc7XG59XG5cbi8vIFJlYWQgdmVyc2lvbiBmcm9tIHBhY2thZ2UuanNvblxuZnVuY3Rpb24gZ2V0VmVyc2lvbigpOiBzdHJpbmcge1xuICB0cnkge1xuICAgIGNvbnN0IHBrZ1BhdGggPSBwYXRoLmpvaW4oX19kaXJuYW1lLCBcIi4uXCIsIFwicGFja2FnZS5qc29uXCIpO1xuICAgIGNvbnN0IHBrZyA9IEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKHBrZ1BhdGgsIFwidXRmLThcIikpIGFzIFBhY2thZ2VKc29uO1xuICAgIHJldHVybiBwa2cudmVyc2lvbiB8fCBcIjAuMC4wXCI7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBcIjAuMC4wXCI7XG4gIH1cbn1cblxuY29uc3QgcHJvZ3JhbSA9IG5ldyBDb21tYW5kKCk7XG5cbnByb2dyYW1cbiAgLm5hbWUoXCJjbGF1ZGUtY29kZS1zeW5jXCIpXG4gIC5kZXNjcmlwdGlvbihcIlN5bmMgQ2xhdWRlIENvZGUgc2Vzc2lvbnMgdG8gT3BlblN5bmMgZGFzaGJvYXJkXCIpXG4gIC52ZXJzaW9uKGdldFZlcnNpb24oKSk7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEhlbHBlciBGdW5jdGlvbnNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZnVuY3Rpb24gcHJvbXB0KHF1ZXN0aW9uOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBybCA9IHJlYWRsaW5lLmNyZWF0ZUludGVyZmFjZSh7XG4gICAgaW5wdXQ6IHByb2Nlc3Muc3RkaW4sXG4gICAgb3V0cHV0OiBwcm9jZXNzLnN0ZG91dCxcbiAgfSk7XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgcmwucXVlc3Rpb24ocXVlc3Rpb24sIChhbnN3ZXIpID0+IHtcbiAgICAgIHJsLmNsb3NlKCk7XG4gICAgICByZXNvbHZlKGFuc3dlci50cmltKCkpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gbWFza0FwaUtleShrZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmIChrZXkubGVuZ3RoIDw9IDgpIHJldHVybiBcIioqKipcIjtcbiAgcmV0dXJuIGtleS5zdWJzdHJpbmcoMCwgNCkgKyBcIioqKipcIiArIGtleS5zdWJzdHJpbmcoa2V5Lmxlbmd0aCAtIDQpO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBDb21tYW5kc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5wcm9ncmFtXG4gIC5jb21tYW5kKFwibG9naW5cIilcbiAgLmRlc2NyaXB0aW9uKFwiQ29uZmlndXJlIENvbnZleCBVUkwgYW5kIEFQSSBLZXlcIilcbiAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgY29uc29sZS5sb2coXCJcXG4gIENsYXVkZSBDb2RlIFN5bmMgLSBMb2dpblxcblwiKTtcbiAgICBjb25zb2xlLmxvZyhcIkdldCB5b3VyIEFQSSBrZXkgZnJvbSB5b3VyIE9wZW5TeW5jLmRldiBTZXR0aW5ncyBwYWdlLCBzdGFydHMgd2l0aCBvc2tfLiBFbnRlciBpdCBoZXJlOlwiKTtcbiAgICBjb25zb2xlLmxvZyhcIiAgMS4gR28gdG8gU2V0dGluZ3NcIik7XG4gICAgY29uc29sZS5sb2coXCIgIDIuIENsaWNrICdHZW5lcmF0ZSBBUEkgS2V5J1wiKTtcbiAgICBjb25zb2xlLmxvZyhcIiAgMy4gQ29weSB0aGUga2V5IChzdGFydHMgd2l0aCBvc2tfKVxcblwiKTtcblxuICAgIGNvbnN0IGNvbnZleFVybCA9IGF3YWl0IHByb21wdChcIkNvbnZleCBVUkwgKGUuZy4sIGh0dHBzOi8veW91ci1wcm9qZWN0LmNvbnZleC5jbG91ZCk6IFwiKTtcblxuICAgIGlmICghY29udmV4VXJsKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3I6IENvbnZleCBVUkwgaXMgcmVxdWlyZWRcIik7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuXG4gICAgaWYgKCFjb252ZXhVcmwuaW5jbHVkZXMoXCJjb252ZXguY2xvdWRcIikgJiYgIWNvbnZleFVybC5pbmNsdWRlcyhcImNvbnZleC5zaXRlXCIpKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3I6IEludmFsaWQgQ29udmV4IFVSTC4gTXVzdCBjb250YWluIGNvbnZleC5jbG91ZCBvciBjb252ZXguc2l0ZVwiKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG5cbiAgICBjb25zdCBhcGlLZXkgPSBhd2FpdCBwcm9tcHQoXCJBUEkgS2V5IChvc2tfLi4uKTogXCIpO1xuXG4gICAgaWYgKCFhcGlLZXkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvcjogQVBJIEtleSBpcyByZXF1aXJlZFwiKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG5cbiAgICBpZiAoIWFwaUtleS5zdGFydHNXaXRoKFwib3NrX1wiKSkge1xuICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yOiBJbnZhbGlkIEFQSSBLZXkuIE11c3Qgc3RhcnQgd2l0aCBvc2tfXCIpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbmZpZzogQ29uZmlnID0ge1xuICAgICAgY29udmV4VXJsLFxuICAgICAgYXBpS2V5LFxuICAgICAgYXV0b1N5bmM6IHRydWUsXG4gICAgICBzeW5jVG9vbENhbGxzOiB0cnVlLFxuICAgICAgc3luY1RoaW5raW5nOiBmYWxzZSxcbiAgICB9O1xuXG4gICAgLy8gVGVzdCBjb25uZWN0aW9uXG4gICAgY29uc29sZS5sb2coXCJcXG5UZXN0aW5nIGNvbm5lY3Rpb24uLi5cIik7XG4gICAgY29uc3QgY2xpZW50ID0gbmV3IFN5bmNDbGllbnQoY29uZmlnKTtcbiAgICBjb25zdCBjb25uZWN0ZWQgPSBhd2FpdCBjbGllbnQudGVzdENvbm5lY3Rpb24oKTtcblxuICAgIGlmICghY29ubmVjdGVkKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3I6IENvdWxkIG5vdCBjb25uZWN0IHRvIENvbnZleCBiYWNrZW5kXCIpO1xuICAgICAgY29uc29sZS5lcnJvcihcIiAgIENoZWNrIHlvdXIgVVJMIGFuZCB0cnkgYWdhaW5cIik7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuXG4gICAgLy8gU2F2ZSBjb25maWdcbiAgICBzYXZlQ29uZmlnKGNvbmZpZyk7XG4gICAgY29uc29sZS5sb2coXCJcXG5Db25maWd1cmF0aW9uIHNhdmVkIVwiKTtcbiAgICBjb25zb2xlLmxvZyhgICAgVVJMOiAke2NvbnZleFVybH1gKTtcbiAgICBjb25zb2xlLmxvZyhgICAgS2V5OiAke21hc2tBcGlLZXkoYXBpS2V5KX1gKTtcbiAgICBjb25zb2xlLmxvZyhcIlxcbk5leHQgc3RlcDogUnVuIHRoZSBzZXR1cCBjb21tYW5kIHRvIGNvbmZpZ3VyZSBDbGF1ZGUgQ29kZSBob29rczpcXG5cIik7XG4gICAgY29uc29sZS5sb2coXCIgICBjbGF1ZGUtY29kZS1zeW5jIHNldHVwXFxuXCIpO1xuICB9KTtcblxucHJvZ3JhbVxuICAuY29tbWFuZChcImxvZ291dFwiKVxuICAuZGVzY3JpcHRpb24oXCJDbGVhciBzdG9yZWQgY3JlZGVudGlhbHNcIilcbiAgLmFjdGlvbigoKSA9PiB7XG4gICAgY2xlYXJDb25maWcoKTtcbiAgICBjb25zb2xlLmxvZyhcIkNyZWRlbnRpYWxzIGNsZWFyZWRcIik7XG4gIH0pO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKFwic3RhdHVzXCIpXG4gIC5kZXNjcmlwdGlvbihcIlNob3cgY29ubmVjdGlvbiBzdGF0dXNcIilcbiAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgY29uZmlnID0gbG9hZENvbmZpZygpO1xuXG4gICAgY29uc29sZS5sb2coXCJcXG4gIENsYXVkZSBDb2RlIFN5bmMgLSBTdGF0dXNcXG5cIik7XG5cbiAgICBpZiAoIWNvbmZpZykge1xuICAgICAgY29uc29sZS5sb2coXCJOb3QgY29uZmlndXJlZFwiKTtcbiAgICAgIGNvbnNvbGUubG9nKFwiICAgUnVuICdjbGF1ZGUtY29kZS1zeW5jIGxvZ2luJyB0byBzZXQgdXBcXG5cIik7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuXG4gICAgY29uc29sZS5sb2coXCJDb25maWd1cmF0aW9uOlwiKTtcbiAgICBjb25zb2xlLmxvZyhgICBDb252ZXggVVJMOiAke2NvbmZpZy5jb252ZXhVcmx9YCk7XG4gICAgY29uc29sZS5sb2coYCAgQVBJIEtleTogICAgJHttYXNrQXBpS2V5KGNvbmZpZy5hcGlLZXkpfWApO1xuICAgIGNvbnNvbGUubG9nKGAgIEF1dG8gU3luYzogICR7Y29uZmlnLmF1dG9TeW5jICE9PSBmYWxzZSA/IFwiZW5hYmxlZFwiIDogXCJkaXNhYmxlZFwifWApO1xuICAgIGNvbnNvbGUubG9nKGAgIFRvb2wgQ2FsbHM6ICR7Y29uZmlnLnN5bmNUb29sQ2FsbHMgIT09IGZhbHNlID8gXCJlbmFibGVkXCIgOiBcImRpc2FibGVkXCJ9YCk7XG4gICAgY29uc29sZS5sb2coYCAgVGhpbmtpbmc6ICAgJHtjb25maWcuc3luY1RoaW5raW5nID8gXCJlbmFibGVkXCIgOiBcImRpc2FibGVkXCJ9YCk7XG5cbiAgICBjb25zb2xlLmxvZyhcIlxcblRlc3RpbmcgY29ubmVjdGlvbi4uLlwiKTtcbiAgICBjb25zdCBjbGllbnQgPSBuZXcgU3luY0NsaWVudChjb25maWcpO1xuICAgIGNvbnN0IGNvbm5lY3RlZCA9IGF3YWl0IGNsaWVudC50ZXN0Q29ubmVjdGlvbigpO1xuXG4gICAgaWYgKGNvbm5lY3RlZCkge1xuICAgICAgY29uc29sZS5sb2coXCJDb25uZWN0ZWQgdG8gQ29udmV4IGJhY2tlbmRcXG5cIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUubG9nKFwiRXJyb3I6IENvdWxkIG5vdCBjb25uZWN0IHRvIENvbnZleCBiYWNrZW5kXFxuXCIpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgfSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoXCJjb25maWdcIilcbiAgLmRlc2NyaXB0aW9uKFwiU2hvdyBjdXJyZW50IGNvbmZpZ3VyYXRpb25cIilcbiAgLm9wdGlvbihcIi0tanNvblwiLCBcIk91dHB1dCBhcyBKU09OXCIpXG4gIC5hY3Rpb24oKG9wdGlvbnM6IHsganNvbj86IGJvb2xlYW4gfSkgPT4ge1xuICAgIGNvbnN0IGNvbmZpZyA9IGxvYWRDb25maWcoKTtcblxuICAgIGlmICghY29uZmlnKSB7XG4gICAgICBpZiAob3B0aW9ucy5qc29uKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHsgY29uZmlndXJlZDogZmFsc2UgfSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJOb3QgY29uZmlndXJlZC4gUnVuICdjbGF1ZGUtY29kZS1zeW5jIGxvZ2luJyB0byBzZXQgdXAuXCIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmpzb24pIHtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25maWd1cmVkOiB0cnVlLFxuICAgICAgICAgICAgY29udmV4VXJsOiBjb25maWcuY29udmV4VXJsLFxuICAgICAgICAgICAgYXBpS2V5OiBtYXNrQXBpS2V5KGNvbmZpZy5hcGlLZXkpLFxuICAgICAgICAgICAgYXV0b1N5bmM6IGNvbmZpZy5hdXRvU3luYyAhPT0gZmFsc2UsXG4gICAgICAgICAgICBzeW5jVG9vbENhbGxzOiBjb25maWcuc3luY1Rvb2xDYWxscyAhPT0gZmFsc2UsXG4gICAgICAgICAgICBzeW5jVGhpbmtpbmc6IGNvbmZpZy5zeW5jVGhpbmtpbmcgPT09IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBudWxsLFxuICAgICAgICAgIDJcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coXCJcXG4gIEN1cnJlbnQgQ29uZmlndXJhdGlvblxcblwiKTtcbiAgICAgIGNvbnNvbGUubG9nKGBDb252ZXggVVJMOiAgJHtjb25maWcuY29udmV4VXJsfWApO1xuICAgICAgY29uc29sZS5sb2coYEFQSSBLZXk6ICAgICAke21hc2tBcGlLZXkoY29uZmlnLmFwaUtleSl9YCk7XG4gICAgICBjb25zb2xlLmxvZyhgQXV0byBTeW5jOiAgICR7Y29uZmlnLmF1dG9TeW5jICE9PSBmYWxzZX1gKTtcbiAgICAgIGNvbnNvbGUubG9nKGBUb29sIENhbGxzOiAgJHtjb25maWcuc3luY1Rvb2xDYWxscyAhPT0gZmFsc2V9YCk7XG4gICAgICBjb25zb2xlLmxvZyhgVGhpbmtpbmc6ICAgICR7Y29uZmlnLnN5bmNUaGlua2luZyA9PT0gdHJ1ZX1gKTtcbiAgICAgIGNvbnNvbGUubG9nKGBcXG5Db25maWcgZmlsZTogfi8uY29uZmlnL2NsYXVkZS1jb2RlLXN5bmMvY29uZmlnLmpzb25cXG5gKTtcbiAgICB9XG4gIH0pO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKFwic2V0IDxrZXk+IDx2YWx1ZT5cIilcbiAgLmRlc2NyaXB0aW9uKFwiU2V0IGEgY29uZmlndXJhdGlvbiB2YWx1ZVwiKVxuICAuYWN0aW9uKChrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IGNvbmZpZyA9IGxvYWRDb25maWcoKTtcblxuICAgIGlmICghY29uZmlnKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiTm90IGNvbmZpZ3VyZWQuIFJ1biAnY2xhdWRlLWNvZGUtc3luYyBsb2dpbicgZmlyc3QuXCIpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbGlkS2V5cyA9IFtcImF1dG9TeW5jXCIsIFwic3luY1Rvb2xDYWxsc1wiLCBcInN5bmNUaGlua2luZ1wiXTtcbiAgICBpZiAoIXZhbGlkS2V5cy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBJbnZhbGlkIGtleS4gVmFsaWQga2V5czogJHt2YWxpZEtleXMuam9pbihcIiwgXCIpfWApO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cblxuICAgIGNvbnN0IGJvb2xWYWx1ZSA9IHZhbHVlID09PSBcInRydWVcIiB8fCB2YWx1ZSA9PT0gXCIxXCIgfHwgdmFsdWUgPT09IFwieWVzXCI7XG4gICAgXG4gICAgLy8gVHlwZS1zYWZlIGNvbmZpZyB1cGRhdGVcbiAgICBpZiAoa2V5ID09PSBcImF1dG9TeW5jXCIpIHtcbiAgICAgIGNvbmZpZy5hdXRvU3luYyA9IGJvb2xWYWx1ZTtcbiAgICB9IGVsc2UgaWYgKGtleSA9PT0gXCJzeW5jVG9vbENhbGxzXCIpIHtcbiAgICAgIGNvbmZpZy5zeW5jVG9vbENhbGxzID0gYm9vbFZhbHVlO1xuICAgIH0gZWxzZSBpZiAoa2V5ID09PSBcInN5bmNUaGlua2luZ1wiKSB7XG4gICAgICBjb25maWcuc3luY1RoaW5raW5nID0gYm9vbFZhbHVlO1xuICAgIH1cblxuICAgIHNhdmVDb25maWcoY29uZmlnKTtcbiAgICBjb25zb2xlLmxvZyhgU2V0ICR7a2V5fSA9ICR7Ym9vbFZhbHVlfWApO1xuICB9KTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gU2V0dXAgQ29tbWFuZCAoY29uZmlndXJlcyBDbGF1ZGUgQ29kZSBob29rcylcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLy8gQ2xhdWRlIENvZGUgaG9va3MgY29uZmlndXJhdGlvblxuY29uc3QgQ0xBVURFX0hPT0tTX0NPTkZJRyA9IHtcbiAgaG9va3M6IHtcbiAgICBTZXNzaW9uU3RhcnQ6IFtcbiAgICAgIHtcbiAgICAgICAgaG9va3M6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcImNvbW1hbmRcIixcbiAgICAgICAgICAgIGNvbW1hbmQ6IFwiY2xhdWRlLWNvZGUtc3luYyBob29rIFNlc3Npb25TdGFydFwiLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIF0sXG4gICAgU2Vzc2lvbkVuZDogW1xuICAgICAge1xuICAgICAgICBob29rczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwiY29tbWFuZFwiLFxuICAgICAgICAgICAgY29tbWFuZDogXCJjbGF1ZGUtY29kZS1zeW5jIGhvb2sgU2Vzc2lvbkVuZFwiLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIF0sXG4gICAgVXNlclByb21wdFN1Ym1pdDogW1xuICAgICAge1xuICAgICAgICBob29rczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwiY29tbWFuZFwiLFxuICAgICAgICAgICAgY29tbWFuZDogXCJjbGF1ZGUtY29kZS1zeW5jIGhvb2sgVXNlclByb21wdFN1Ym1pdFwiLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIF0sXG4gICAgUG9zdFRvb2xVc2U6IFtcbiAgICAgIHtcbiAgICAgICAgbWF0Y2hlcjogXCIqXCIsXG4gICAgICAgIGhvb2tzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJjb21tYW5kXCIsXG4gICAgICAgICAgICBjb21tYW5kOiBcImNsYXVkZS1jb2RlLXN5bmMgaG9vayBQb3N0VG9vbFVzZVwiLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIF0sXG4gICAgU3RvcDogW1xuICAgICAge1xuICAgICAgICBtYXRjaGVyOiBcIipcIixcbiAgICAgICAgaG9va3M6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcImNvbW1hbmRcIixcbiAgICAgICAgICAgIGNvbW1hbmQ6IFwiY2xhdWRlLWNvZGUtc3luYyBob29rIFN0b3BcIixcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICBdLFxuICB9LFxufTtcblxucHJvZ3JhbVxuICAuY29tbWFuZChcInNldHVwXCIpXG4gIC5kZXNjcmlwdGlvbihcIkFkZCBob29rcyB0byBDbGF1ZGUgQ29kZSBzZXR0aW5ncyAoY29uZmlndXJlcyB+Ly5jbGF1ZGUvc2V0dGluZ3MuanNvbilcIilcbiAgLm9wdGlvbihcIi0tZm9yY2VcIiwgXCJPdmVyd3JpdGUgZXhpc3RpbmcgaG9va3MgY29uZmlndXJhdGlvblwiKVxuICAuYWN0aW9uKGFzeW5jIChvcHRpb25zOiB7IGZvcmNlPzogYm9vbGVhbiB9KSA9PiB7XG4gICAgY29uc3QgY2xhdWRlRGlyID0gcGF0aC5qb2luKHByb2Nlc3MuZW52LkhPTUUgfHwgXCJ+XCIsIFwiLmNsYXVkZVwiKTtcbiAgICBjb25zdCBzZXR0aW5nc1BhdGggPSBwYXRoLmpvaW4oY2xhdWRlRGlyLCBcInNldHRpbmdzLmpzb25cIik7XG5cbiAgICBjb25zb2xlLmxvZyhcIlxcbiAgQ2xhdWRlIENvZGUgU3luYyAtIFNldHVwXFxuXCIpO1xuXG4gICAgLy8gQ2hlY2sgaWYgcGx1Z2luIGNyZWRlbnRpYWxzIGFyZSBjb25maWd1cmVkXG4gICAgY29uc3QgY29uZmlnID0gbG9hZENvbmZpZygpO1xuICAgIGlmICghY29uZmlnKSB7XG4gICAgICBjb25zb2xlLmxvZyhcIldhcm5pbmc6IFBsdWdpbiBub3QgY29uZmlndXJlZCB5ZXQuXCIpO1xuICAgICAgY29uc29sZS5sb2coXCIgICBSdW4gJ2NsYXVkZS1jb2RlLXN5bmMgbG9naW4nIGZpcnN0IHRvIHNldCB1cCBjcmVkZW50aWFscy5cXG5cIik7XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIC5jbGF1ZGUgZGlyZWN0b3J5IGlmIG5lZWRlZFxuICAgIGlmICghZnMuZXhpc3RzU3luYyhjbGF1ZGVEaXIpKSB7XG4gICAgICBmcy5ta2RpclN5bmMoY2xhdWRlRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIGNvbnNvbGUubG9nKFwiQ3JlYXRlZCB+Ly5jbGF1ZGUgZGlyZWN0b3J5XCIpO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGZvciBleGlzdGluZyBzZXR0aW5nc1xuICAgIGxldCBleGlzdGluZ1NldHRpbmdzOiBDbGF1ZGVTZXR0aW5ncyA9IHt9O1xuICAgIGxldCBoYXNFeGlzdGluZ0hvb2tzID0gZmFsc2U7XG5cbiAgICBpZiAoZnMuZXhpc3RzU3luYyhzZXR0aW5nc1BhdGgpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBjb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKHNldHRpbmdzUGF0aCwgXCJ1dGYtOFwiKTtcbiAgICAgICAgZXhpc3RpbmdTZXR0aW5ncyA9IEpTT04ucGFyc2UoY29udGVudCkgYXMgQ2xhdWRlU2V0dGluZ3M7XG4gICAgICAgIGhhc0V4aXN0aW5nSG9va3MgPSAhIWV4aXN0aW5nU2V0dGluZ3MuaG9va3M7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiRm91bmQgZXhpc3Rpbmcgc2V0dGluZ3MuanNvblwiKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICBjb25zb2xlLmxvZyhcIldhcm5pbmc6IENvdWxkIG5vdCBwYXJzZSBleGlzdGluZyBzZXR0aW5ncy5qc29uLCB3aWxsIGNyZWF0ZSBuZXcgb25lXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEhhbmRsZSBleGlzdGluZyBob29rc1xuICAgIGlmIChoYXNFeGlzdGluZ0hvb2tzICYmICFvcHRpb25zLmZvcmNlKSB7XG4gICAgICBjb25zb2xlLmxvZyhcIlxcbkV4aXN0aW5nIGhvb2tzIGNvbmZpZ3VyYXRpb24gZm91bmQuXCIpO1xuICAgICAgY29uc29sZS5sb2coXCIgICBVc2UgLS1mb3JjZSB0byBvdmVyd3JpdGUsIG9yIG1hbnVhbGx5IG1lcmdlIHRoZSBob29rcy5cXG5cIik7XG4gICAgICBjb25zb2xlLmxvZyhcIlRvIG1hbnVhbGx5IGFkZCwgaW5jbHVkZSB0aGVzZSBob29rcyBpbiB5b3VyIHNldHRpbmdzLmpzb246XCIpO1xuICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoQ0xBVURFX0hPT0tTX0NPTkZJRywgbnVsbCwgMikpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cblxuICAgIC8vIE1lcmdlIHNldHRpbmdzXG4gICAgY29uc3QgbmV3U2V0dGluZ3MgPSB7XG4gICAgICAuLi5leGlzdGluZ1NldHRpbmdzLFxuICAgICAgLi4uQ0xBVURFX0hPT0tTX0NPTkZJRyxcbiAgICB9O1xuXG4gICAgLy8gV3JpdGUgc2V0dGluZ3NcbiAgICB0cnkge1xuICAgICAgZnMud3JpdGVGaWxlU3luYyhzZXR0aW5nc1BhdGgsIEpTT04uc3RyaW5naWZ5KG5ld1NldHRpbmdzLCBudWxsLCAyKSk7XG4gICAgICBjb25zb2xlLmxvZyhcIlxcbkNsYXVkZSBDb2RlIGhvb2tzIGNvbmZpZ3VyZWQhXCIpO1xuICAgICAgY29uc29sZS5sb2coYCAgIFNldHRpbmdzIGZpbGU6ICR7c2V0dGluZ3NQYXRofWApO1xuICAgICAgY29uc29sZS5sb2coXCJcXG5TZXR1cCBjb21wbGV0ZS4gU2Vzc2lvbnMgd2lsbCBzeW5jIGF1dG9tYXRpY2FsbHkuXFxuXCIpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3Igd3JpdGluZyBzZXR0aW5nczpcIiwgZXJyb3IpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgfSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoXCJ2ZXJpZnlcIilcbiAgLmRlc2NyaXB0aW9uKFwiVmVyaWZ5IGNyZWRlbnRpYWxzIGFuZCBDbGF1ZGUgQ29kZSBjb25maWd1cmF0aW9uXCIpXG4gIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKFwiXFxuICBPcGVuU3luYyBTZXR1cCBWZXJpZmljYXRpb25cXG5cIik7XG5cbiAgICAvLyBDaGVjayBjcmVkZW50aWFsc1xuICAgIGNvbnN0IGNvbmZpZyA9IGxvYWRDb25maWcoKTtcbiAgICBpZiAoY29uZmlnKSB7XG4gICAgICBjb25zb2xlLmxvZyhcIkNyZWRlbnRpYWxzOiBPS1wiKTtcbiAgICAgIGNvbnNvbGUubG9nKGAgICBDb252ZXggVVJMOiAke2NvbmZpZy5jb252ZXhVcmx9YCk7XG4gICAgICBjb25zb2xlLmxvZyhgICAgQVBJIEtleTogJHttYXNrQXBpS2V5KGNvbmZpZy5hcGlLZXkpfWApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZyhcIkNyZWRlbnRpYWxzOiBOT1QgQ09ORklHVVJFRFwiKTtcbiAgICAgIGNvbnNvbGUubG9nKFwiICAgUnVuICdjbGF1ZGUtY29kZS1zeW5jIGxvZ2luJyB0byBzZXQgdXBcIik7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgQ2xhdWRlIENvZGUgY29uZmlnXG4gICAgY29uc3Qgc2V0dGluZ3NQYXRoID0gcGF0aC5qb2luKHByb2Nlc3MuZW52LkhPTUUgfHwgXCJ+XCIsIFwiLmNsYXVkZVwiLCBcInNldHRpbmdzLmpzb25cIik7XG4gICAgbGV0IGhvb2tzQ29uZmlndXJlZCA9IGZhbHNlO1xuXG4gICAgaWYgKGZzLmV4aXN0c1N5bmMoc2V0dGluZ3NQYXRoKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhzZXR0aW5nc1BhdGgsIFwidXRmLThcIik7XG4gICAgICAgIGNvbnN0IHNldHRpbmdzID0gSlNPTi5wYXJzZShjb250ZW50KSBhcyBDbGF1ZGVTZXR0aW5ncztcbiAgICAgICAgaG9va3NDb25maWd1cmVkID0gISFzZXR0aW5ncy5ob29rcz8uU2Vzc2lvblN0YXJ0O1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIElnbm9yZSBwYXJzZSBlcnJvcnNcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZyhcIlwiKTtcbiAgICBpZiAoaG9va3NDb25maWd1cmVkKSB7XG4gICAgICBjb25zb2xlLmxvZyhcIkNsYXVkZSBDb2RlIENvbmZpZzogT0tcIik7XG4gICAgICBjb25zb2xlLmxvZyhgICAgQ29uZmlnIGZpbGU6ICR7c2V0dGluZ3NQYXRofWApO1xuICAgICAgY29uc29sZS5sb2coXCIgICBIb29rcyByZWdpc3RlcmVkOiBjbGF1ZGUtY29kZS1zeW5jXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZyhcIkNsYXVkZSBDb2RlIENvbmZpZzogTk9UIENPTkZJR1VSRURcIik7XG4gICAgICBjb25zb2xlLmxvZyhcIiAgIFJ1biAnY2xhdWRlLWNvZGUtc3luYyBzZXR1cCcgdG8gY29uZmlndXJlIGhvb2tzXCIpO1xuICAgIH1cblxuICAgIC8vIFRlc3QgY29ubmVjdGlvbiBpZiBjcmVkZW50aWFscyBleGlzdFxuICAgIGlmIChjb25maWcpIHtcbiAgICAgIGNvbnNvbGUubG9nKFwiXFxuVGVzdGluZyBjb25uZWN0aW9uLi4uXCIpO1xuICAgICAgY29uc3QgY2xpZW50ID0gbmV3IFN5bmNDbGllbnQoY29uZmlnKTtcbiAgICAgIGNvbnN0IGNvbm5lY3RlZCA9IGF3YWl0IGNsaWVudC50ZXN0Q29ubmVjdGlvbigpO1xuICAgICAgaWYgKGNvbm5lY3RlZCkge1xuICAgICAgICBjb25zb2xlLmxvZyhcIkNvbm5lY3Rpb246IE9LXFxuXCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJDb25uZWN0aW9uOiBGQUlMRURcXG5cIik7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY29uZmlnICYmIGhvb2tzQ29uZmlndXJlZCkge1xuICAgICAgY29uc29sZS5sb2coXCJSZWFkeSEgU3RhcnQgQ2xhdWRlIENvZGUgYW5kIHNlc3Npb25zIHdpbGwgc3luYyBhdXRvbWF0aWNhbGx5LlxcblwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coXCJcIik7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICB9KTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gU3luYyBUZXN0IENvbW1hbmQgKHRlc3QgY29ubmVjdGl2aXR5KVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5wcm9ncmFtXG4gIC5jb21tYW5kKFwic3luY3Rlc3RcIilcbiAgLmRlc2NyaXB0aW9uKFwiVGVzdCBjb25uZWN0aXZpdHkgYW5kIGNyZWF0ZSBhIHRlc3Qgc2Vzc2lvblwiKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBjb25maWcgPSBsb2FkQ29uZmlnKCk7XG5cbiAgICBjb25zb2xlLmxvZyhcIlxcbiAgQ2xhdWRlIENvZGUgU3luYyAtIENvbm5lY3Rpb24gVGVzdFxcblwiKTtcblxuICAgIGlmICghY29uZmlnKSB7XG4gICAgICBjb25zb2xlLmxvZyhcIk5vdCBjb25maWd1cmVkXCIpO1xuICAgICAgY29uc29sZS5sb2coXCIgICBSdW4gJ2NsYXVkZS1jb2RlLXN5bmMgbG9naW4nIHRvIHNldCB1cFxcblwiKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZyhcIkNvbmZpZ3VyYXRpb246XCIpO1xuICAgIGNvbnNvbGUubG9nKGAgIENvbnZleCBVUkw6ICR7Y29uZmlnLmNvbnZleFVybH1gKTtcbiAgICBjb25zb2xlLmxvZyhgICBBUEkgS2V5OiAgICAke21hc2tBcGlLZXkoY29uZmlnLmFwaUtleSl9YCk7XG5cbiAgICBjb25zb2xlLmxvZyhcIlxcblRlc3RpbmcgY29ubmVjdGlvbi4uLlwiKTtcbiAgICBjb25zdCBjbGllbnQgPSBuZXcgU3luY0NsaWVudChjb25maWcpO1xuICAgIGNvbnN0IGNvbm5lY3RlZCA9IGF3YWl0IGNsaWVudC50ZXN0Q29ubmVjdGlvbigpO1xuXG4gICAgaWYgKGNvbm5lY3RlZCkge1xuICAgICAgY29uc29sZS5sb2coXCJDb25uZWN0aW9uOiBPS1wiKTtcbiAgICAgIFxuICAgICAgLy8gQ3JlYXRlIGEgdGVzdCBzZXNzaW9uIHRvIHZlcmlmeSBmdWxsIHN5bmMgd29ya3NcbiAgICAgIGNvbnNvbGUubG9nKFwiXFxuQ3JlYXRpbmcgdGVzdCBzZXNzaW9uLi4uXCIpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgdGVzdFNlc3Npb24gPSB7XG4gICAgICAgICAgc2Vzc2lvbklkOiBgdGVzdC0ke0RhdGUubm93KCl9YCxcbiAgICAgICAgICBzb3VyY2U6IFwiY2xhdWRlLWNvZGVcIiBhcyBjb25zdCxcbiAgICAgICAgICB0aXRsZTogXCJDb25uZWN0aW9uIFRlc3RcIixcbiAgICAgICAgICBwcm9qZWN0TmFtZTogXCJzeW5jdGVzdFwiLFxuICAgICAgICAgIHN0YXJ0ZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICAgIGVuZGVkQXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgfTtcbiAgICAgICAgYXdhaXQgY2xpZW50LnN5bmNTZXNzaW9uKHRlc3RTZXNzaW9uKTtcbiAgICAgICAgY29uc29sZS5sb2coXCJUZXN0IHNlc3Npb24gY3JlYXRlZCBzdWNjZXNzZnVsbHlcIik7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiXFxuU3luYyB0ZXN0IHBhc3NlZC4gUmVhZHkgdG8gc3luYyBDbGF1ZGUgQ29kZSBzZXNzaW9ucy5cXG5cIik7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmxvZyhgVGVzdCBzZXNzaW9uIGZhaWxlZDogJHtlcnJvcn1gKTtcbiAgICAgICAgY29uc29sZS5sb2coXCJcXG5Db25uZWN0aW9uIHdvcmtzIGJ1dCBzeW5jIG1heSBoYXZlIGlzc3Vlcy5cXG5cIik7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coXCJDb25uZWN0aW9uOiBGQUlMRURcIik7XG4gICAgICBjb25zb2xlLmxvZyhcIlxcbkNoZWNrIHlvdXIgQ29udmV4IFVSTCBhbmQgQVBJIGtleS5cXG5cIik7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICB9KTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gSG9vayBDb21tYW5kIChmb3IgQ2xhdWRlIENvZGUgaW50ZWdyYXRpb24pXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8vIFRyYWNrIHNlc3Npb24gc3RhdGUgZm9yIHRpdGxlIGdlbmVyYXRpb24gKGZpcnN0IHVzZXIgcHJvbXB0KVxuY29uc3QgU0VTU0lPTl9TVEFURV9GSUxFID0gcGF0aC5qb2luKFxuICBwcm9jZXNzLmVudi5IT01FIHx8IFwiflwiLFxuICBcIi5jb25maWdcIixcbiAgXCJjbGF1ZGUtY29kZS1zeW5jXCIsXG4gIFwic2Vzc2lvbi1zdGF0ZS5qc29uXCJcbik7XG5cbmludGVyZmFjZSBTZXNzaW9uU3RhdGUge1xuICBbc2Vzc2lvbklkOiBzdHJpbmddOiB7XG4gICAgbW9kZWw/OiBzdHJpbmc7XG4gICAgZmlyc3RQcm9tcHQ/OiBzdHJpbmc7XG4gICAgdG9rZW5Vc2FnZT86IHsgaW5wdXQ6IG51bWJlcjsgb3V0cHV0OiBudW1iZXIgfTtcbiAgICBtZXNzYWdlQ291bnQ/OiBudW1iZXI7XG4gICAgc3luY2VkTWVzc2FnZVV1aWRzPzogU2V0PHN0cmluZz4gfCBzdHJpbmdbXTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gbG9hZFNlc3Npb25TdGF0ZSgpOiBTZXNzaW9uU3RhdGUge1xuICB0cnkge1xuICAgIGlmIChmcy5leGlzdHNTeW5jKFNFU1NJT05fU1RBVEVfRklMRSkpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhTRVNTSU9OX1NUQVRFX0ZJTEUsIFwidXRmLThcIikpIGFzIFNlc3Npb25TdGF0ZTtcbiAgICAgIC8vIENvbnZlcnQgYXJyYXlzIGJhY2sgdG8gU2V0cyBmb3Igc3luY2VkTWVzc2FnZVV1aWRzXG4gICAgICBmb3IgKGNvbnN0IHNlc3Npb25JZCBvZiBPYmplY3Qua2V5cyhkYXRhKSkge1xuICAgICAgICBjb25zdCBzZXNzaW9uID0gZGF0YVtzZXNzaW9uSWRdO1xuICAgICAgICBpZiAoc2Vzc2lvbi5zeW5jZWRNZXNzYWdlVXVpZHMgJiYgQXJyYXkuaXNBcnJheShzZXNzaW9uLnN5bmNlZE1lc3NhZ2VVdWlkcykpIHtcbiAgICAgICAgICBzZXNzaW9uLnN5bmNlZE1lc3NhZ2VVdWlkcyA9IG5ldyBTZXQoc2Vzc2lvbi5zeW5jZWRNZXNzYWdlVXVpZHMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIC8vIElnbm9yZSBlcnJvcnNcbiAgfVxuICByZXR1cm4ge307XG59XG5cbmZ1bmN0aW9uIHNhdmVTZXNzaW9uU3RhdGUoc3RhdGU6IFNlc3Npb25TdGF0ZSk6IHZvaWQge1xuICB0cnkge1xuICAgIGNvbnN0IGRpciA9IHBhdGguZGlybmFtZShTRVNTSU9OX1NUQVRFX0ZJTEUpO1xuICAgIGlmICghZnMuZXhpc3RzU3luYyhkaXIpKSB7XG4gICAgICBmcy5ta2RpclN5bmMoZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICB9XG4gICAgLy8gQ29udmVydCBTZXRzIHRvIGFycmF5cyBmb3IgSlNPTiBzZXJpYWxpemF0aW9uXG4gICAgY29uc3Qgc2VyaWFsaXphYmxlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuICAgIGZvciAoY29uc3Qgc2Vzc2lvbklkIG9mIE9iamVjdC5rZXlzKHN0YXRlKSkge1xuICAgICAgY29uc3Qgc2Vzc2lvbiA9IHN0YXRlW3Nlc3Npb25JZF07XG4gICAgICBzZXJpYWxpemFibGVbc2Vzc2lvbklkXSA9IHtcbiAgICAgICAgLi4uc2Vzc2lvbixcbiAgICAgICAgc3luY2VkTWVzc2FnZVV1aWRzOiBzZXNzaW9uLnN5bmNlZE1lc3NhZ2VVdWlkcyBpbnN0YW5jZW9mIFNldFxuICAgICAgICAgID8gQXJyYXkuZnJvbShzZXNzaW9uLnN5bmNlZE1lc3NhZ2VVdWlkcylcbiAgICAgICAgICA6IHNlc3Npb24uc3luY2VkTWVzc2FnZVV1aWRzLFxuICAgICAgfTtcbiAgICB9XG4gICAgZnMud3JpdGVGaWxlU3luYyhTRVNTSU9OX1NUQVRFX0ZJTEUsIEpTT04uc3RyaW5naWZ5KHNlcmlhbGl6YWJsZSwgbnVsbCwgMikpO1xuICB9IGNhdGNoIHtcbiAgICAvLyBJZ25vcmUgZXJyb3JzXG4gIH1cbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVUaXRsZShwcm9tcHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vIFVzZSBmaXJzdCA4MCBjaGFycyBvZiBmaXJzdCBwcm9tcHQgYXMgdGl0bGUsIHRyaW0gYXQgd29yZCBib3VuZGFyeVxuICBjb25zdCB0cmltbWVkID0gcHJvbXB0LnNsaWNlKDAsIDgwKS50cmltKCk7XG4gIGlmIChwcm9tcHQubGVuZ3RoID4gODApIHtcbiAgICBjb25zdCBsYXN0U3BhY2UgPSB0cmltbWVkLmxhc3RJbmRleE9mKFwiIFwiKTtcbiAgICBpZiAobGFzdFNwYWNlID4gNDApIHtcbiAgICAgIHJldHVybiB0cmltbWVkLnNsaWNlKDAsIGxhc3RTcGFjZSkgKyBcIi4uLlwiO1xuICAgIH1cbiAgICByZXR1cm4gdHJpbW1lZCArIFwiLi4uXCI7XG4gIH1cbiAgcmV0dXJuIHRyaW1tZWQ7XG59XG5cbi8vIFBhcnNlIHRyYW5zY3JpcHQgZmlsZSB0byBleHRyYWN0IGFzc2lzdGFudCBtZXNzYWdlcyBhbmQgdG9rZW4gdXNhZ2VcbmludGVyZmFjZSBQYXJzZWRUcmFuc2NyaXB0IHtcbiAgYXNzaXN0YW50TWVzc2FnZXM6IEFycmF5PHtcbiAgICB1dWlkOiBzdHJpbmc7XG4gICAgdGV4dDogc3RyaW5nO1xuICAgIHRpbWVzdGFtcDogc3RyaW5nO1xuICAgIG1vZGVsPzogc3RyaW5nO1xuICB9PjtcbiAgdG9rZW5Vc2FnZToge1xuICAgIGlucHV0OiBudW1iZXI7XG4gICAgb3V0cHV0OiBudW1iZXI7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHBhcnNlVHJhbnNjcmlwdEZpbGUodHJhbnNjcmlwdFBhdGg6IHN0cmluZyk6IFBhcnNlZFRyYW5zY3JpcHQge1xuICBjb25zdCByZXN1bHQ6IFBhcnNlZFRyYW5zY3JpcHQgPSB7XG4gICAgYXNzaXN0YW50TWVzc2FnZXM6IFtdLFxuICAgIHRva2VuVXNhZ2U6IHsgaW5wdXQ6IDAsIG91dHB1dDogMCB9LFxuICB9O1xuXG4gIHRyeSB7XG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKHRyYW5zY3JpcHRQYXRoKSkge1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBjb25zdCBjb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKHRyYW5zY3JpcHRQYXRoLCBcInV0Zi04XCIpO1xuICAgIGNvbnN0IGxpbmVzID0gY29udGVudC50cmltKCkuc3BsaXQoXCJcXG5cIik7XG4gICAgY29uc3Qgc2VlblV1aWRzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgICBmb3IgKGNvbnN0IGxpbmUgb2YgbGluZXMpIHtcbiAgICAgIGlmICghbGluZS50cmltKCkpIGNvbnRpbnVlO1xuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBlbnRyeSA9IEpTT04ucGFyc2UobGluZSkgYXMgVHJhbnNjcmlwdEVudHJ5O1xuXG4gICAgICAgIC8vIE9ubHkgcHJvY2VzcyBhc3Npc3RhbnQgbWVzc2FnZXNcbiAgICAgICAgaWYgKGVudHJ5LnR5cGUgPT09IFwiYXNzaXN0YW50XCIgJiYgZW50cnkubWVzc2FnZSkge1xuICAgICAgICAgIGNvbnN0IG1zZyA9IGVudHJ5Lm1lc3NhZ2U7XG4gICAgICAgICAgY29uc3QgdXVpZCA9IGVudHJ5LnV1aWQgfHwgXCJcIjtcblxuICAgICAgICAgIC8vIFNraXAgaWYgd2UndmUgYWxyZWFkeSBzZWVuIHRoaXMgVVVJRCAoZGVkdXApXG4gICAgICAgICAgaWYgKHV1aWQgJiYgc2VlblV1aWRzLmhhcyh1dWlkKSkgY29udGludWU7XG4gICAgICAgICAgaWYgKHV1aWQpIHNlZW5VdWlkcy5hZGQodXVpZCk7XG5cbiAgICAgICAgICAvLyBFeHRyYWN0IHRleHQgY29udGVudCBmcm9tIG1lc3NhZ2VcbiAgICAgICAgICBpZiAobXNnLmNvbnRlbnQgJiYgQXJyYXkuaXNBcnJheShtc2cuY29udGVudCkpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcGFydCBvZiBtc2cuY29udGVudCkge1xuICAgICAgICAgICAgICBpZiAocGFydC50eXBlID09PSBcInRleHRcIiAmJiBwYXJ0LnRleHQpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQuYXNzaXN0YW50TWVzc2FnZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICB1dWlkLFxuICAgICAgICAgICAgICAgICAgdGV4dDogcGFydC50ZXh0LFxuICAgICAgICAgICAgICAgICAgdGltZXN0YW1wOiBlbnRyeS50aW1lc3RhbXAgfHwgbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICAgICAgICAgICAgbW9kZWw6IG1zZy5tb2RlbCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIEFjY3VtdWxhdGUgdG9rZW4gdXNhZ2UgZnJvbSBhbGwgYXNzaXN0YW50IG1lc3NhZ2VzXG4gICAgICAgICAgaWYgKG1zZy51c2FnZSkge1xuICAgICAgICAgICAgcmVzdWx0LnRva2VuVXNhZ2UuaW5wdXQgKz1cbiAgICAgICAgICAgICAgKG1zZy51c2FnZS5pbnB1dF90b2tlbnMgfHwgMCkgK1xuICAgICAgICAgICAgICAobXNnLnVzYWdlLmNhY2hlX3JlYWRfaW5wdXRfdG9rZW5zIHx8IDApICtcbiAgICAgICAgICAgICAgKG1zZy51c2FnZS5jYWNoZV9jcmVhdGlvbl9pbnB1dF90b2tlbnMgfHwgMCk7XG4gICAgICAgICAgICByZXN1bHQudG9rZW5Vc2FnZS5vdXRwdXQgKz0gbXNnLnVzYWdlLm91dHB1dF90b2tlbnMgfHwgMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBTa2lwIG1hbGZvcm1lZCBsaW5lc1xuICAgICAgfVxuICAgIH1cbiAgfSBjYXRjaCB7XG4gICAgLy8gUmV0dXJuIGVtcHR5IHJlc3VsdCBvbiBlcnJvclxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxucHJvZ3JhbVxuICAuY29tbWFuZChcImhvb2sgPGV2ZW50PlwiKVxuICAuZGVzY3JpcHRpb24oXCJIYW5kbGUgQ2xhdWRlIENvZGUgaG9vayBldmVudHMgKHJlYWRzIHN0ZGluKVwiKVxuICAuYWN0aW9uKGFzeW5jIChldmVudDogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgY29uZmlnID0gbG9hZENvbmZpZygpO1xuXG4gICAgaWYgKCFjb25maWcpIHtcbiAgICAgIC8vIEV4aXQgc2lsZW50bHkgaWYgbm90IGNvbmZpZ3VyZWQgKGRvbid0IGJsb2NrIENsYXVkZSBDb2RlKVxuICAgICAgcHJvY2Vzcy5leGl0KDApO1xuICAgIH1cblxuICAgIGlmIChjb25maWcuYXV0b1N5bmMgPT09IGZhbHNlKSB7XG4gICAgICBwcm9jZXNzLmV4aXQoMCk7XG4gICAgfVxuXG4gICAgLy8gUmVhZCBKU09OIGlucHV0IGZyb20gc3RkaW5cbiAgICBsZXQgaW5wdXQgPSBcIlwiO1xuICAgIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2YgcHJvY2Vzcy5zdGRpbikge1xuICAgICAgaW5wdXQgKz0gY2h1bms7XG4gICAgfVxuXG4gICAgaWYgKCFpbnB1dC50cmltKCkpIHtcbiAgICAgIHByb2Nlc3MuZXhpdCgwKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgY2xpZW50ID0gbmV3IFN5bmNDbGllbnQoY29uZmlnKTtcbiAgICAgIGNvbnN0IHNlc3Npb25TdGF0ZSA9IGxvYWRTZXNzaW9uU3RhdGUoKTtcblxuICAgICAgc3dpdGNoIChldmVudCkge1xuICAgICAgICBjYXNlIFwiU2Vzc2lvblN0YXJ0XCI6IHtcbiAgICAgICAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShpbnB1dCkgYXMgSG9va1Nlc3Npb25TdGFydERhdGE7XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gSW5pdGlhbGl6ZSBzZXNzaW9uIHN0YXRlXG4gICAgICAgICAgc2Vzc2lvblN0YXRlW2RhdGEuc2Vzc2lvbl9pZF0gPSB7XG4gICAgICAgICAgICBtb2RlbDogZGF0YS5tb2RlbCxcbiAgICAgICAgICAgIHRva2VuVXNhZ2U6IHsgaW5wdXQ6IDAsIG91dHB1dDogMCB9LFxuICAgICAgICAgICAgbWVzc2FnZUNvdW50OiAwLFxuICAgICAgICAgIH07XG4gICAgICAgICAgc2F2ZVNlc3Npb25TdGF0ZShzZXNzaW9uU3RhdGUpO1xuICAgICAgICAgIFxuICAgICAgICAgIGNvbnN0IHNlc3Npb246IFNlc3Npb25EYXRhID0ge1xuICAgICAgICAgICAgc2Vzc2lvbklkOiBkYXRhLnNlc3Npb25faWQsXG4gICAgICAgICAgICBzb3VyY2U6IFwiY2xhdWRlLWNvZGVcIixcbiAgICAgICAgICAgIGN3ZDogZGF0YS5jd2QsXG4gICAgICAgICAgICBtb2RlbDogZGF0YS5tb2RlbCxcbiAgICAgICAgICAgIHBlcm1pc3Npb25Nb2RlOiBkYXRhLnBlcm1pc3Npb25fbW9kZSxcbiAgICAgICAgICAgIHRoaW5raW5nRW5hYmxlZDogZGF0YS50aGlua2luZ19lbmFibGVkLFxuICAgICAgICAgICAgbWNwU2VydmVyczogZGF0YS5tY3Bfc2VydmVycyxcbiAgICAgICAgICAgIHN0YXJ0VHlwZTogZGF0YS5zb3VyY2UgPT09IFwic3RhcnR1cFwiID8gXCJuZXdcIiA6IChkYXRhLnNvdXJjZSBhcyBTZXNzaW9uRGF0YVtcInN0YXJ0VHlwZVwiXSksXG4gICAgICAgICAgICBzdGFydGVkQXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgICAgIHByb2plY3RQYXRoOiBkYXRhLmN3ZCxcbiAgICAgICAgICAgIHByb2plY3ROYW1lOiBkYXRhLmN3ZCA/IGRhdGEuY3dkLnNwbGl0KFwiL1wiKS5wb3AoKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICB9O1xuICAgICAgICAgIGF3YWl0IGNsaWVudC5zeW5jU2Vzc2lvbihzZXNzaW9uKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgXCJTZXNzaW9uRW5kXCI6IHtcbiAgICAgICAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShpbnB1dCkgYXMgSG9va1Nlc3Npb25FbmREYXRhO1xuICAgICAgICAgIGNvbnN0IHN0YXRlID0gc2Vzc2lvblN0YXRlW2RhdGEuc2Vzc2lvbl9pZF0gfHwge307XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gQ2FsY3VsYXRlIGZpbmFsIHRva2VuIHVzYWdlXG4gICAgICAgICAgY29uc3QgZmluYWxUb2tlblVzYWdlID0gZGF0YS50b3RhbF90b2tlbl91c2FnZSB8fCBzdGF0ZS50b2tlblVzYWdlO1xuICAgICAgICAgIFxuICAgICAgICAgIGNvbnN0IHNlc3Npb246IFNlc3Npb25EYXRhID0ge1xuICAgICAgICAgICAgc2Vzc2lvbklkOiBkYXRhLnNlc3Npb25faWQsXG4gICAgICAgICAgICBzb3VyY2U6IFwiY2xhdWRlLWNvZGVcIixcbiAgICAgICAgICAgIHRpdGxlOiBzdGF0ZS5maXJzdFByb21wdCA/IGdlbmVyYXRlVGl0bGUoc3RhdGUuZmlyc3RQcm9tcHQpIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgZW5kUmVhc29uOiBkYXRhLnJlYXNvbixcbiAgICAgICAgICAgIG1lc3NhZ2VDb3VudDogZGF0YS5tZXNzYWdlX2NvdW50IHx8IHN0YXRlLm1lc3NhZ2VDb3VudCxcbiAgICAgICAgICAgIHRvb2xDYWxsQ291bnQ6IGRhdGEudG9vbF9jYWxsX2NvdW50LFxuICAgICAgICAgICAgdG9rZW5Vc2FnZTogZmluYWxUb2tlblVzYWdlLFxuICAgICAgICAgICAgY29zdEVzdGltYXRlOiBkYXRhLmNvc3RfZXN0aW1hdGUsXG4gICAgICAgICAgICBlbmRlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgICAgfTtcbiAgICAgICAgICBhd2FpdCBjbGllbnQuc3luY1Nlc3Npb24oc2Vzc2lvbik7XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gQ2xlYW4gdXAgc2Vzc2lvbiBzdGF0ZVxuICAgICAgICAgIGRlbGV0ZSBzZXNzaW9uU3RhdGVbZGF0YS5zZXNzaW9uX2lkXTtcbiAgICAgICAgICBzYXZlU2Vzc2lvblN0YXRlKHNlc3Npb25TdGF0ZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFwiVXNlclByb21wdFN1Ym1pdFwiOiB7XG4gICAgICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoaW5wdXQpIGFzIEhvb2tVc2VyUHJvbXB0RGF0YTtcbiAgICAgICAgICBjb25zdCBzdGF0ZSA9IHNlc3Npb25TdGF0ZVtkYXRhLnNlc3Npb25faWRdIHx8IHt9O1xuICAgICAgICAgIFxuICAgICAgICAgIC8vIFRyYWNrIGZpcnN0IHByb21wdCBmb3IgdGl0bGUgZ2VuZXJhdGlvblxuICAgICAgICAgIGlmICghc3RhdGUuZmlyc3RQcm9tcHQpIHtcbiAgICAgICAgICAgIHN0YXRlLmZpcnN0UHJvbXB0ID0gZGF0YS5wcm9tcHQ7XG4gICAgICAgICAgICBzZXNzaW9uU3RhdGVbZGF0YS5zZXNzaW9uX2lkXSA9IHN0YXRlO1xuICAgICAgICAgICAgc2F2ZVNlc3Npb25TdGF0ZShzZXNzaW9uU3RhdGUpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBVcGRhdGUgc2Vzc2lvbiB3aXRoIHRpdGxlXG4gICAgICAgICAgICBjb25zdCBzZXNzaW9uOiBTZXNzaW9uRGF0YSA9IHtcbiAgICAgICAgICAgICAgc2Vzc2lvbklkOiBkYXRhLnNlc3Npb25faWQsXG4gICAgICAgICAgICAgIHNvdXJjZTogXCJjbGF1ZGUtY29kZVwiLFxuICAgICAgICAgICAgICB0aXRsZTogZ2VuZXJhdGVUaXRsZShkYXRhLnByb21wdCksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYXdhaXQgY2xpZW50LnN5bmNTZXNzaW9uKHNlc3Npb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICAvLyBJbmNyZW1lbnQgbWVzc2FnZSBjb3VudFxuICAgICAgICAgIHN0YXRlLm1lc3NhZ2VDb3VudCA9IChzdGF0ZS5tZXNzYWdlQ291bnQgfHwgMCkgKyAxO1xuICAgICAgICAgIHNlc3Npb25TdGF0ZVtkYXRhLnNlc3Npb25faWRdID0gc3RhdGU7XG4gICAgICAgICAgc2F2ZVNlc3Npb25TdGF0ZShzZXNzaW9uU3RhdGUpO1xuICAgICAgICAgIFxuICAgICAgICAgIGNvbnN0IG1lc3NhZ2U6IE1lc3NhZ2VEYXRhID0ge1xuICAgICAgICAgICAgc2Vzc2lvbklkOiBkYXRhLnNlc3Npb25faWQsXG4gICAgICAgICAgICBtZXNzYWdlSWQ6IGAke2RhdGEuc2Vzc2lvbl9pZH0tdXNlci0ke0RhdGUubm93KCl9YCxcbiAgICAgICAgICAgIHNvdXJjZTogXCJjbGF1ZGUtY29kZVwiLFxuICAgICAgICAgICAgcm9sZTogXCJ1c2VyXCIsXG4gICAgICAgICAgICBjb250ZW50OiBkYXRhLnByb21wdCxcbiAgICAgICAgICAgIHRpbWVzdGFtcDogZGF0YS50aW1lc3RhbXAgfHwgbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICAgIH07XG4gICAgICAgICAgYXdhaXQgY2xpZW50LnN5bmNNZXNzYWdlKG1lc3NhZ2UpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBcIlBvc3RUb29sVXNlXCI6IHtcbiAgICAgICAgICBpZiAoIWNvbmZpZy5zeW5jVG9vbENhbGxzKSBicmVhaztcbiAgICAgICAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShpbnB1dCkgYXMgSG9va1Rvb2xVc2VEYXRhO1xuICAgICAgICAgIGNvbnN0IHN0YXRlID0gc2Vzc2lvblN0YXRlW2RhdGEuc2Vzc2lvbl9pZF0gfHwge307XG4gICAgICAgICAgXG4gICAgICAgICAgY29uc3QgbWVzc2FnZTogTWVzc2FnZURhdGEgPSB7XG4gICAgICAgICAgICBzZXNzaW9uSWQ6IGRhdGEuc2Vzc2lvbl9pZCxcbiAgICAgICAgICAgIG1lc3NhZ2VJZDogZGF0YS50b29sX3VzZV9pZCB8fCBgJHtkYXRhLnNlc3Npb25faWR9LXRvb2wtJHtEYXRlLm5vdygpfWAsXG4gICAgICAgICAgICBzb3VyY2U6IFwiY2xhdWRlLWNvZGVcIixcbiAgICAgICAgICAgIHJvbGU6IFwiYXNzaXN0YW50XCIsXG4gICAgICAgICAgICB0b29sTmFtZTogZGF0YS50b29sX25hbWUsXG4gICAgICAgICAgICB0b29sQXJnczogZGF0YS50b29sX2lucHV0LFxuICAgICAgICAgICAgdG9vbFJlc3VsdDogZGF0YS50b29sX3Jlc3VsdD8ub3V0cHV0IHx8IGRhdGEudG9vbF9yZXN1bHQ/LmVycm9yLFxuICAgICAgICAgICAgZHVyYXRpb25NczogZGF0YS5kdXJhdGlvbl9tcyxcbiAgICAgICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICAgIH07XG4gICAgICAgICAgYXdhaXQgY2xpZW50LnN5bmNNZXNzYWdlKG1lc3NhZ2UpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBcIlN0b3BcIjoge1xuICAgICAgICAgIC8vIFN0b3AgZXZlbnQgcHJvdmlkZXMgdHJhbnNjcmlwdF9wYXRoIC0gd2UgcmVhZCBpdCB0byBnZXQgbWVzc2FnZXMgYW5kIHRva2Vuc1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKGlucHV0KSBhcyBIb29rU3RvcERhdGE7XG4gICAgICAgICAgY29uc3Qgc3RhdGUgPSBzZXNzaW9uU3RhdGVbZGF0YS5zZXNzaW9uX2lkXSB8fCB7fTtcbiAgICAgICAgICBcbiAgICAgICAgICAvLyBQYXJzZSB0cmFuc2NyaXB0IGZpbGUgdG8gZXh0cmFjdCBhc3Npc3RhbnQgbWVzc2FnZXMgYW5kIHRva2VuIHVzYWdlXG4gICAgICAgICAgaWYgKGRhdGEudHJhbnNjcmlwdF9wYXRoKSB7XG4gICAgICAgICAgICBjb25zdCB0cmFuc2NyaXB0ID0gcGFyc2VUcmFuc2NyaXB0RmlsZShkYXRhLnRyYW5zY3JpcHRfcGF0aCk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIFVwZGF0ZSB0b2tlbiB1c2FnZSBmcm9tIHRyYW5zY3JpcHRcbiAgICAgICAgICAgIGlmICh0cmFuc2NyaXB0LnRva2VuVXNhZ2UuaW5wdXQgPiAwIHx8IHRyYW5zY3JpcHQudG9rZW5Vc2FnZS5vdXRwdXQgPiAwKSB7XG4gICAgICAgICAgICAgIHN0YXRlLnRva2VuVXNhZ2UgPSB0cmFuc2NyaXB0LnRva2VuVXNhZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIFRyYWNrIHdoaWNoIG1lc3NhZ2VzIHdlJ3ZlIGFscmVhZHkgc3luY2VkIHRvIGF2b2lkIGR1cGxpY2F0ZXNcbiAgICAgICAgICAgIGNvbnN0IHN5bmNlZE1lc3NhZ2VzID0gc3RhdGUuc3luY2VkTWVzc2FnZVV1aWRzIGluc3RhbmNlb2YgU2V0XG4gICAgICAgICAgICAgID8gc3RhdGUuc3luY2VkTWVzc2FnZVV1aWRzXG4gICAgICAgICAgICAgIDogbmV3IFNldDxzdHJpbmc+KEFycmF5LmlzQXJyYXkoc3RhdGUuc3luY2VkTWVzc2FnZVV1aWRzKSA/IHN0YXRlLnN5bmNlZE1lc3NhZ2VVdWlkcyA6IFtdKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gU3luYyBuZXcgYXNzaXN0YW50IG1lc3NhZ2VzXG4gICAgICAgICAgICBmb3IgKGNvbnN0IG1zZyBvZiB0cmFuc2NyaXB0LmFzc2lzdGFudE1lc3NhZ2VzKSB7XG4gICAgICAgICAgICAgIC8vIFNraXAgaWYgd2UndmUgYWxyZWFkeSBzeW5jZWQgdGhpcyBtZXNzYWdlXG4gICAgICAgICAgICAgIGlmIChtc2cudXVpZCAmJiBzeW5jZWRNZXNzYWdlcy5oYXMobXNnLnV1aWQpKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgaWYgKG1zZy51dWlkKSBzeW5jZWRNZXNzYWdlcy5hZGQobXNnLnV1aWQpO1xuICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgLy8gSW5jcmVtZW50IG1lc3NhZ2UgY291bnRcbiAgICAgICAgICAgICAgc3RhdGUubWVzc2FnZUNvdW50ID0gKHN0YXRlLm1lc3NhZ2VDb3VudCB8fCAwKSArIDE7XG4gICAgICAgICAgICAgIFxuICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlOiBNZXNzYWdlRGF0YSA9IHtcbiAgICAgICAgICAgICAgICBzZXNzaW9uSWQ6IGRhdGEuc2Vzc2lvbl9pZCxcbiAgICAgICAgICAgICAgICBtZXNzYWdlSWQ6IG1zZy51dWlkIHx8IGAke2RhdGEuc2Vzc2lvbl9pZH0tYXNzaXN0YW50LSR7RGF0ZS5ub3coKX1gLFxuICAgICAgICAgICAgICAgIHNvdXJjZTogXCJjbGF1ZGUtY29kZVwiLFxuICAgICAgICAgICAgICAgIHJvbGU6IFwiYXNzaXN0YW50XCIsXG4gICAgICAgICAgICAgICAgY29udGVudDogbXNnLnRleHQsXG4gICAgICAgICAgICAgICAgbW9kZWw6IG1zZy5tb2RlbCxcbiAgICAgICAgICAgICAgICB0aW1lc3RhbXA6IG1zZy50aW1lc3RhbXAsXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIGF3YWl0IGNsaWVudC5zeW5jTWVzc2FnZShtZXNzYWdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gU3RvcmUgc3luY2VkIG1lc3NhZ2UgVVVJRHMgKGNvbnZlcnQgU2V0IHRvIGFycmF5IGZvciBKU09OKVxuICAgICAgICAgICAgc3RhdGUuc3luY2VkTWVzc2FnZVV1aWRzID0gc3luY2VkTWVzc2FnZXM7XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIHNlc3Npb25TdGF0ZVtkYXRhLnNlc3Npb25faWRdID0gc3RhdGU7XG4gICAgICAgICAgc2F2ZVNlc3Npb25TdGF0ZShzZXNzaW9uU3RhdGUpO1xuICAgICAgICAgIFxuICAgICAgICAgIC8vIFVwZGF0ZSBzZXNzaW9uIHdpdGggdG9rZW4gdXNhZ2UgZnJvbSB0cmFuc2NyaXB0XG4gICAgICAgICAgY29uc3Qgc2Vzc2lvbjogU2Vzc2lvbkRhdGEgPSB7XG4gICAgICAgICAgICBzZXNzaW9uSWQ6IGRhdGEuc2Vzc2lvbl9pZCxcbiAgICAgICAgICAgIHNvdXJjZTogXCJjbGF1ZGUtY29kZVwiLFxuICAgICAgICAgICAgdG9rZW5Vc2FnZTogc3RhdGUudG9rZW5Vc2FnZSxcbiAgICAgICAgICAgIG1lc3NhZ2VDb3VudDogc3RhdGUubWVzc2FnZUNvdW50LFxuICAgICAgICAgIH07XG4gICAgICAgICAgYXdhaXQgY2xpZW50LnN5bmNTZXNzaW9uKHNlc3Npb24pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAvLyBVbmtub3duIGV2ZW50LCBpZ25vcmVcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgcHJvY2Vzcy5leGl0KDApO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBMb2cgdG8gc3RkZXJyIGJ1dCBkb24ndCBibG9jayBDbGF1ZGUgQ29kZVxuICAgICAgY29uc29sZS5lcnJvcihgW2NsYXVkZS1jb2RlLXN5bmNdIEVycm9yOiAke2Vycm9yfWApO1xuICAgICAgcHJvY2Vzcy5leGl0KDApO1xuICAgIH1cbiAgfSk7XG5cbi8vIFBhcnNlIGFuZCBydW5cbnByb2dyYW0ucGFyc2UoKTtcbiJdfQ==
|
|
949
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NsaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUVBOzs7Ozs7OztHQVFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVILHlDQUFvQztBQUNwQyxtREFBcUM7QUFDckMsdUNBQXlCO0FBQ3pCLDJDQUE2QjtBQUM3QixtQ0FRaUI7QUEyR2pCLHNEQUFzRDtBQUN0RCw0Q0FBNEM7QUFDNUMsTUFBTSxhQUFhLEdBQTZGO0lBQzlHLDBCQUEwQixFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRTtJQUM3Rix3QkFBd0IsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUU7SUFDN0YsMEJBQTBCLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFO0lBQy9GLDRCQUE0QixFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRTtJQUMvRix3QkFBd0IsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUU7SUFDN0YsMkJBQTJCLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFO0NBQzlGLENBQUM7QUFFRixzRUFB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U3luYyBDTElcbiAqXG4gKiBDb21tYW5kczpcbiAqICAgbG9naW4gICAtIENvbmZpZ3VyZSBDb252ZXggVVJMIGFuZCBBUEkgS2V5XG4gKiAgIGxvZ291dCAgLSBDbGVhciBzdG9yZWQgY3JlZGVudGlhbHNcbiAqICAgc3RhdHVzICAtIFNob3cgY29ubmVjdGlvbiBzdGF0dXNcbiAqICAgY29uZmlnICAtIFNob3cgY3VycmVudCBjb25maWd1cmF0aW9uXG4gKi9cblxuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gXCJjb21tYW5kZXJcIjtcbmltcG9ydCAqIGFzIHJlYWRsaW5lIGZyb20gXCJyZWFkbGluZVwiO1xuaW1wb3J0ICogYXMgZnMgZnJvbSBcImZzXCI7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQge1xuICBsb2FkQ29uZmlnLFxuICBzYXZlQ29uZmlnLFxuICBjbGVhckNvbmZpZyxcbiAgU3luY0NsaWVudCxcbiAgQ29uZmlnLFxuICBTZXNzaW9uRGF0YSxcbiAgTWVzc2FnZURhdGEsXG59IGZyb20gXCIuL2luZGV4XCI7XG5cbi8vIFR5cGVzIGZvciBDbGF1ZGUgQ29kZSBob29rIGV2ZW50IGRhdGEgZnJvbSBzdGRpblxuaW50ZXJmYWNlIEhvb2tTZXNzaW9uU3RhcnREYXRhIHtcbiAgc2Vzc2lvbl9pZDogc3RyaW5nO1xuICB0cmFuc2NyaXB0X3BhdGg/OiBzdHJpbmc7XG4gIGN3ZD86IHN0cmluZztcbiAgbW9kZWw/OiBzdHJpbmc7XG4gIHBlcm1pc3Npb25fbW9kZT86IHN0cmluZztcbiAgc291cmNlPzogc3RyaW5nO1xuICB0aGlua2luZ19lbmFibGVkPzogYm9vbGVhbjtcbiAgbWNwX3NlcnZlcnM/OiBzdHJpbmdbXTtcbn1cblxuaW50ZXJmYWNlIEhvb2tTZXNzaW9uRW5kRGF0YSB7XG4gIHNlc3Npb25faWQ6IHN0cmluZztcbiAgdHJhbnNjcmlwdF9wYXRoPzogc3RyaW5nO1xuICBjd2Q/OiBzdHJpbmc7XG4gIHJlYXNvbj86IHN0cmluZztcbiAgbWVzc2FnZV9jb3VudD86IG51bWJlcjtcbiAgdG9vbF9jYWxsX2NvdW50PzogbnVtYmVyO1xuICB0b3RhbF90b2tlbl91c2FnZT86IHtcbiAgICBpbnB1dDogbnVtYmVyO1xuICAgIG91dHB1dDogbnVtYmVyO1xuICB9O1xuICBjb3N0X2VzdGltYXRlPzogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgSG9va1VzZXJQcm9tcHREYXRhIHtcbiAgc2Vzc2lvbl9pZDogc3RyaW5nO1xuICBwcm9tcHQ6IHN0cmluZztcbiAgdGltZXN0YW1wPzogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgSG9va1Rvb2xVc2VEYXRhIHtcbiAgc2Vzc2lvbl9pZDogc3RyaW5nO1xuICB0b29sX25hbWU6IHN0cmluZztcbiAgdG9vbF91c2VfaWQ/OiBzdHJpbmc7XG4gIHRvb2xfaW5wdXQ/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgdG9vbF9yZXN1bHQ/OiB7XG4gICAgb3V0cHV0Pzogc3RyaW5nO1xuICAgIGVycm9yPzogc3RyaW5nO1xuICB9O1xuICBkdXJhdGlvbl9tcz86IG51bWJlcjtcbiAgc3VjY2Vzcz86IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBIb29rU3RvcERhdGEge1xuICBzZXNzaW9uX2lkOiBzdHJpbmc7XG4gIHRyYW5zY3JpcHRfcGF0aD86IHN0cmluZztcbiAgc3RvcF9ob29rX2FjdGl2ZT86IGJvb2xlYW47XG4gIHBlcm1pc3Npb25fbW9kZT86IHN0cmluZztcbiAgY3dkPzogc3RyaW5nO1xuICBob29rX2V2ZW50X25hbWU/OiBzdHJpbmc7XG59XG5cbi8vIFR5cGVzIGZvciBDbGF1ZGUgQ29kZSB0cmFuc2NyaXB0IEpTT05MIGVudHJpZXNcbmludGVyZmFjZSBUcmFuc2NyaXB0VXNhZ2Uge1xuICBpbnB1dF90b2tlbnM/OiBudW1iZXI7XG4gIG91dHB1dF90b2tlbnM/OiBudW1iZXI7XG4gIGNhY2hlX3JlYWRfaW5wdXRfdG9rZW5zPzogbnVtYmVyO1xuICBjYWNoZV9jcmVhdGlvbl9pbnB1dF90b2tlbnM/OiBudW1iZXI7XG59XG5cbmludGVyZmFjZSBUcmFuc2NyaXB0Q29udGVudFBhcnQge1xuICB0eXBlOiBcInRleHRcIiB8IFwidGhpbmtpbmdcIiB8IFwidG9vbF91c2VcIiB8IFwidG9vbF9yZXN1bHRcIjtcbiAgdGV4dD86IHN0cmluZztcbiAgdGhpbmtpbmc/OiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xuICBuYW1lPzogc3RyaW5nO1xuICBpbnB1dD86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG5pbnRlcmZhY2UgVHJhbnNjcmlwdE1lc3NhZ2Uge1xuICBjb250ZW50PzogVHJhbnNjcmlwdENvbnRlbnRQYXJ0W107XG4gIHVzYWdlPzogVHJhbnNjcmlwdFVzYWdlO1xuICBtb2RlbD86IHN0cmluZztcbiAgc3RvcF9yZWFzb24/OiBzdHJpbmcgfCBudWxsO1xufVxuXG5pbnRlcmZhY2UgVHJhbnNjcmlwdEVudHJ5IHtcbiAgdHlwZT86IHN0cmluZztcbiAgdXVpZD86IHN0cmluZztcbiAgdGltZXN0YW1wPzogc3RyaW5nO1xuICBtZXNzYWdlPzogVHJhbnNjcmlwdE1lc3NhZ2U7XG4gIHNlc3Npb25JZD86IHN0cmluZztcbiAgcGFyZW50VXVpZD86IHN0cmluZztcbiAgY3dkPzogc3RyaW5nO1xuICBzbHVnPzogc3RyaW5nO1xufVxuXG4vLyBFeHRlbmRlZCBzdGF0cyBmcm9tIHRyYW5zY3JpcHQgcGFyc2luZyAoaW5jbHVkZXMgY2FjaGUgdG9rZW5zIGFuZCBkdXJhdGlvbilcbmludGVyZmFjZSBUcmFuc2NyaXB0U3RhdHMge1xuICBtb2RlbDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBpbnB1dFRva2VuczogbnVtYmVyO1xuICBjYWNoZUNyZWF0aW9uVG9rZW5zOiBudW1iZXI7XG4gIGNhY2hlUmVhZFRva2VuczogbnVtYmVyO1xuICBvdXRwdXRUb2tlbnM6IG51bWJlcjtcbiAgbWVzc2FnZUNvdW50OiBudW1iZXI7XG4gIHRvb2xDYWxsQ291bnQ6IG51bWJlcjtcbiAgdGl0bGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgY3dkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHN0YXJ0ZWRBdDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBlbmRlZEF0OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGR1cmF0aW9uTXM6IG51bWJlciB8IHVuZGVmaW5lZDtcbn1cblxuLy8gUHJpY2luZyBwZXIgbWlsbGlvbiB0b2tlbnMgKFVTRCkgd2l0aCBjYWNoZSBwcmljaW5nXG4vLyBTb3VyY2U6IGh0dHBzOi8vd3d3LmFudGhyb3BpYy5jb20vcHJpY2luZ1xuY29uc3QgTU9ERUxfUFJJQ0lORzogUmVjb3JkPHN0cmluZywgeyBpbnB1dDogbnVtYmVyOyBvdXRwdXQ6IG51bWJlcjsgY2FjaGVXcml0ZTogbnVtYmVyOyBjYWNoZVJlYWQ6IG51bWJlciB9PiA9IHtcbiAgXCJjbGF1ZGUtc29ubmV0LTQtMjAyNTA1MTRcIjogeyBpbnB1dDogMy4wMCwgb3V0cHV0OiAxNS4wMCwgY2FjaGVXcml0ZTogMy43NSwgY2FjaGVSZWFkOiAwLjMwIH0sXG4gIFwiY2xhdWRlLW9wdXMtNC0yMDI1MDUxNFwiOiB7IGlucHV0OiAxNS4wMCwgb3V0cHV0OiA3NS4wMCwgY2FjaGVXcml0ZTogMTguNzUsIGNhY2hlUmVhZDogMS41MCB9LFxuICBcImNsYXVkZS1vcHVzLTQtNS0yMDI1MTEwMVwiOiB7IGlucHV0OiAxNS4wMCwgb3V0cHV0OiA3NS4wMCwgY2FjaGVXcml0ZTogMTguNzUsIGNhY2hlUmVhZDogMS41MCB9LFxuICBcImNsYXVkZS0zLTUtc29ubmV0LTIwMjQxMDIyXCI6IHsgaW5wdXQ6IDMuMDAsIG91dHB1dDogMTUuMDAsIGNhY2hlV3JpdGU6IDMuNzUsIGNhY2hlUmVhZDogMC4zMCB9LFxuICBcImNsYXVkZS0zLW9wdXMtMjAyNDAyMjlcIjogeyBpbnB1dDogMTUuMDAsIG91dHB1dDogNzUuMDAsIGNhY2hlV3JpdGU6IDE4Ljc1LCBjYWNoZVJlYWQ6IDEuNTAgfSxcbiAgXCJjbGF1ZGUtMy01LWhhaWt1LTIwMjQxMDIyXCI6IHsgaW5wdXQ6IDAuODAsIG91dHB1dDogNC4wMCwgY2FjaGVXcml0ZTogMS4wMCwgY2FjaGVSZWFkOiAwLjA4IH0sXG59O1xuXG4vLyBDYWxjdWxhdGUgY29zdCBmcm9tIG1vZGVsIGFuZCB0b2tlbiB1c2FnZSB3aXRoIHByb3BlciBjYWNoZSBwcmljaW5nXG5mdW5jdGlvbiBjYWxjdWxhdGVDb3N0KG1vZGVsOiBzdHJpbmcgfCB1bmRlZmluZWQsIHN0YXRzOiBUcmFuc2NyaXB0U3RhdHMpOiBudW1iZXIge1xuICBpZiAoIW1vZGVsKSByZXR1cm4gMDtcblxuICAvLyBUcnkgZXhhY3QgbWF0Y2ggZmlyc3RcbiAgbGV0IHByaWNpbmcgPSBNT0RFTF9QUklDSU5HW21vZGVsXTtcblxuICAvLyBUcnkgcGFydGlhbCBtYXRjaCBpZiBleGFjdCBtYXRjaCBmYWlsc1xuICBpZiAoIXByaWNpbmcpIHtcbiAgICBjb25zdCBtYXRjaGluZ0tleSA9IE9iamVjdC5rZXlzKE1PREVMX1BSSUNJTkcpLmZpbmQoayA9PiBtb2RlbC5pbmNsdWRlcyhrKSB8fCBrLmluY2x1ZGVzKG1vZGVsKSk7XG4gICAgaWYgKG1hdGNoaW5nS2V5KSB7XG4gICAgICBwcmljaW5nID0gTU9ERUxfUFJJQ0lOR1ttYXRjaGluZ0tleV07XG4gICAgfVxuICB9XG5cbiAgaWYgKCFwcmljaW5nKSByZXR1cm4gMDtcblxuICAvLyBDYWxjdWxhdGUgY29zdCB3aXRoIHByb3BlciBjYWNoZSBwcmljaW5nXG4gIGNvbnN0IGlucHV0Q29zdCA9IHN0YXRzLmlucHV0VG9rZW5zICogcHJpY2luZy5pbnB1dDtcbiAgY29uc3QgY2FjaGVXcml0ZUNvc3QgPSBzdGF0cy5jYWNoZUNyZWF0aW9uVG9rZW5zICogcHJpY2luZy5jYWNoZVdyaXRlO1xuICBjb25zdCBjYWNoZVJlYWRDb3N0ID0gc3RhdHMuY2FjaGVSZWFkVG9rZW5zICogcHJpY2luZy5jYWNoZVJlYWQ7XG4gIGNvbnN0IG91dHB1dENvc3QgPSBzdGF0cy5vdXRwdXRUb2tlbnMgKiBwcmljaW5nLm91dHB1dDtcblxuICByZXR1cm4gKGlucHV0Q29zdCArIGNhY2hlV3JpdGVDb3N0ICsgY2FjaGVSZWFkQ29zdCArIG91dHB1dENvc3QpIC8gMV8wMDBfMDAwO1xufVxuXG4vLyBUeXBlcyBmb3IgQ2xhdWRlIENvZGUgc2V0dGluZ3MuanNvblxuaW50ZXJmYWNlIENsYXVkZVNldHRpbmdzIHtcbiAgaG9va3M/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgW2tleTogc3RyaW5nXTogdW5rbm93bjtcbn1cblxuLy8gVHlwZSBmb3IgcGFja2FnZS5qc29uIHZlcnNpb24gZmllbGRcbmludGVyZmFjZSBQYWNrYWdlSnNvbiB7XG4gIHZlcnNpb24/OiBzdHJpbmc7XG59XG5cbi8vIFJlYWQgdmVyc2lvbiBmcm9tIHBhY2thZ2UuanNvblxuZnVuY3Rpb24gZ2V0VmVyc2lvbigpOiBzdHJpbmcge1xuICB0cnkge1xuICAgIGNvbnN0IHBrZ1BhdGggPSBwYXRoLmpvaW4oX19kaXJuYW1lLCBcIi4uXCIsIFwicGFja2FnZS5qc29uXCIpO1xuICAgIGNvbnN0IHBrZyA9IEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKHBrZ1BhdGgsIFwidXRmLThcIikpIGFzIFBhY2thZ2VKc29uO1xuICAgIHJldHVybiBwa2cudmVyc2lvbiB8fCBcIjAuMC4wXCI7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBcIjAuMC4wXCI7XG4gIH1cbn1cblxuY29uc3QgcHJvZ3JhbSA9IG5ldyBDb21tYW5kKCk7XG5cbnByb2dyYW1cbiAgLm5hbWUoXCJjbGF1ZGUtY29kZS1zeW5jXCIpXG4gIC5kZXNjcmlwdGlvbihcIlN5bmMgQ2xhdWRlIENvZGUgc2Vzc2lvbnMgdG8gT3BlblN5bmMgZGFzaGJvYXJkXCIpXG4gIC52ZXJzaW9uKGdldFZlcnNpb24oKSk7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEhlbHBlciBGdW5jdGlvbnNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZnVuY3Rpb24gcHJvbXB0KHF1ZXN0aW9uOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBybCA9IHJlYWRsaW5lLmNyZWF0ZUludGVyZmFjZSh7XG4gICAgaW5wdXQ6IHByb2Nlc3Muc3RkaW4sXG4gICAgb3V0cHV0OiBwcm9jZXNzLnN0ZG91dCxcbiAgfSk7XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgcmwucXVlc3Rpb24ocXVlc3Rpb24sIChhbnN3ZXIpID0+IHtcbiAgICAgIHJsLmNsb3NlKCk7XG4gICAgICByZXNvbHZlKGFuc3dlci50cmltKCkpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gbWFza0FwaUtleShrZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmIChrZXkubGVuZ3RoIDw9IDgpIHJldHVybiBcIioqKipcIjtcbiAgcmV0dXJuIGtleS5zdWJzdHJpbmcoMCwgNCkgKyBcIioqKipcIiArIGtleS5zdWJzdHJpbmcoa2V5Lmxlbmd0aCAtIDQpO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBDb21tYW5kc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5wcm9ncmFtXG4gIC5jb21tYW5kKFwibG9naW5cIilcbiAgLmRlc2NyaXB0aW9uKFwiQ29uZmlndXJlIENvbnZleCBVUkwgYW5kIEFQSSBLZXlcIilcbiAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgY29uc29sZS5sb2coXCJcXG4gIENsYXVkZSBDb2RlIFN5bmMgLSBMb2dpblxcblwiKTtcbiAgICBjb25zb2xlLmxvZyhcIkdldCB5b3VyIEFQSSBrZXkgZnJvbSB5b3VyIE9wZW5TeW5jLmRldiBTZXR0aW5ncyBwYWdlLCBzdGFydHMgd2l0aCBvc2tfLiBFbnRlciBpdCBoZXJlOlwiKTtcbiAgICBjb25zb2xlLmxvZyhcIiAgMS4gR28gdG8gU2V0dGluZ3NcIik7XG4gICAgY29uc29sZS5sb2coXCIgIDIuIENsaWNrICdHZW5lcmF0ZSBBUEkgS2V5J1wiKTtcbiAgICBjb25zb2xlLmxvZyhcIiAgMy4gQ29weSB0aGUga2V5IChzdGFydHMgd2l0aCBvc2tfKVxcblwiKTtcblxuICAgIGNvbnN0IGNvbnZleFVybCA9IGF3YWl0IHByb21wdChcIkNvbnZleCBVUkwgKGUuZy4sIGh0dHBzOi8veW91ci1wcm9qZWN0LmNvbnZleC5jbG91ZCk6IFwiKTtcblxuICAgIGlmICghY29udmV4VXJsKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3I6IENvbnZleCBVUkwgaXMgcmVxdWlyZWRcIik7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuXG4gICAgaWYgKCFjb252ZXhVcmwuaW5jbHVkZXMoXCJjb252ZXguY2xvdWRcIikgJiYgIWNvbnZleFVybC5pbmNsdWRlcyhcImNvbnZleC5zaXRlXCIpKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3I6IEludmFsaWQgQ29udmV4IFVSTC4gTXVzdCBjb250YWluIGNvbnZleC5jbG91ZCBvciBjb252ZXguc2l0ZVwiKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG5cbiAgICBjb25zdCBhcGlLZXkgPSBhd2FpdCBwcm9tcHQoXCJBUEkgS2V5IChvc2tfLi4uKTogXCIpO1xuXG4gICAgaWYgKCFhcGlLZXkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvcjogQVBJIEtleSBpcyByZXF1aXJlZFwiKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG5cbiAgICBpZiAoIWFwaUtleS5zdGFydHNXaXRoKFwib3NrX1wiKSkge1xuICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yOiBJbnZhbGlkIEFQSSBLZXkuIE11c3Qgc3RhcnQgd2l0aCBvc2tfXCIpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbmZpZzogQ29uZmlnID0ge1xuICAgICAgY29udmV4VXJsLFxuICAgICAgYXBpS2V5LFxuICAgICAgYXV0b1N5bmM6IHRydWUsXG4gICAgICBzeW5jVG9vbENhbGxzOiB0cnVlLFxuICAgICAgc3luY1RoaW5raW5nOiBmYWxzZSxcbiAgICB9O1xuXG4gICAgLy8gVGVzdCBjb25uZWN0aW9uXG4gICAgY29uc29sZS5sb2coXCJcXG5UZXN0aW5nIGNvbm5lY3Rpb24uLi5cIik7XG4gICAgY29uc3QgY2xpZW50ID0gbmV3IFN5bmNDbGllbnQoY29uZmlnKTtcbiAgICBjb25zdCBjb25uZWN0ZWQgPSBhd2FpdCBjbGllbnQudGVzdENvbm5lY3Rpb24oKTtcblxuICAgIGlmICghY29ubmVjdGVkKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3I6IENvdWxkIG5vdCBjb25uZWN0IHRvIENvbnZleCBiYWNrZW5kXCIpO1xuICAgICAgY29uc29sZS5lcnJvcihcIiAgIENoZWNrIHlvdXIgVVJMIGFuZCB0cnkgYWdhaW5cIik7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuXG4gICAgLy8gU2F2ZSBjb25maWdcbiAgICBzYXZlQ29uZmlnKGNvbmZpZyk7XG4gICAgY29uc29sZS5sb2coXCJcXG5Db25maWd1cmF0aW9uIHNhdmVkIVwiKTtcbiAgICBjb25zb2xlLmxvZyhgICAgVVJMOiAke2NvbnZleFVybH1gKTtcbiAgICBjb25zb2xlLmxvZyhgICAgS2V5OiAke21hc2tBcGlLZXkoYXBpS2V5KX1gKTtcbiAgICBjb25zb2xlLmxvZyhcIlxcbk5leHQgc3RlcDogUnVuIHRoZSBzZXR1cCBjb21tYW5kIHRvIGNvbmZpZ3VyZSBDbGF1ZGUgQ29kZSBob29rczpcXG5cIik7XG4gICAgY29uc29sZS5sb2coXCIgICBjbGF1ZGUtY29kZS1zeW5jIHNldHVwXFxuXCIpO1xuICB9KTtcblxucHJvZ3JhbVxuICAuY29tbWFuZChcImxvZ291dFwiKVxuICAuZGVzY3JpcHRpb24oXCJDbGVhciBzdG9yZWQgY3JlZGVudGlhbHNcIilcbiAgLmFjdGlvbigoKSA9PiB7XG4gICAgY2xlYXJDb25maWcoKTtcbiAgICBjb25zb2xlLmxvZyhcIkNyZWRlbnRpYWxzIGNsZWFyZWRcIik7XG4gIH0pO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKFwic3RhdHVzXCIpXG4gIC5kZXNjcmlwdGlvbihcIlNob3cgY29ubmVjdGlvbiBzdGF0dXNcIilcbiAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgY29uZmlnID0gbG9hZENvbmZpZygpO1xuXG4gICAgY29uc29sZS5sb2coXCJcXG4gIENsYXVkZSBDb2RlIFN5bmMgLSBTdGF0dXNcXG5cIik7XG5cbiAgICBpZiAoIWNvbmZpZykge1xuICAgICAgY29uc29sZS5sb2coXCJOb3QgY29uZmlndXJlZFwiKTtcbiAgICAgIGNvbnNvbGUubG9nKFwiICAgUnVuICdjbGF1ZGUtY29kZS1zeW5jIGxvZ2luJyB0byBzZXQgdXBcXG5cIik7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuXG4gICAgY29uc29sZS5sb2coXCJDb25maWd1cmF0aW9uOlwiKTtcbiAgICBjb25zb2xlLmxvZyhgICBDb252ZXggVVJMOiAke2NvbmZpZy5jb252ZXhVcmx9YCk7XG4gICAgY29uc29sZS5sb2coYCAgQVBJIEtleTogICAgJHttYXNrQXBpS2V5KGNvbmZpZy5hcGlLZXkpfWApO1xuICAgIGNvbnNvbGUubG9nKGAgIEF1dG8gU3luYzogICR7Y29uZmlnLmF1dG9TeW5jICE9PSBmYWxzZSA/IFwiZW5hYmxlZFwiIDogXCJkaXNhYmxlZFwifWApO1xuICAgIGNvbnNvbGUubG9nKGAgIFRvb2wgQ2FsbHM6ICR7Y29uZmlnLnN5bmNUb29sQ2FsbHMgIT09IGZhbHNlID8gXCJlbmFibGVkXCIgOiBcImRpc2FibGVkXCJ9YCk7XG4gICAgY29uc29sZS5sb2coYCAgVGhpbmtpbmc6ICAgJHtjb25maWcuc3luY1RoaW5raW5nID8gXCJlbmFibGVkXCIgOiBcImRpc2FibGVkXCJ9YCk7XG5cbiAgICBjb25zb2xlLmxvZyhcIlxcblRlc3RpbmcgY29ubmVjdGlvbi4uLlwiKTtcbiAgICBjb25zdCBjbGllbnQgPSBuZXcgU3luY0NsaWVudChjb25maWcpO1xuICAgIGNvbnN0IGNvbm5lY3RlZCA9IGF3YWl0IGNsaWVudC50ZXN0Q29ubmVjdGlvbigpO1xuXG4gICAgaWYgKGNvbm5lY3RlZCkge1xuICAgICAgY29uc29sZS5sb2coXCJDb25uZWN0ZWQgdG8gQ29udmV4IGJhY2tlbmRcXG5cIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUubG9nKFwiRXJyb3I6IENvdWxkIG5vdCBjb25uZWN0IHRvIENvbnZleCBiYWNrZW5kXFxuXCIpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgfSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoXCJjb25maWdcIilcbiAgLmRlc2NyaXB0aW9uKFwiU2hvdyBjdXJyZW50IGNvbmZpZ3VyYXRpb25cIilcbiAgLm9wdGlvbihcIi0tanNvblwiLCBcIk91dHB1dCBhcyBKU09OXCIpXG4gIC5hY3Rpb24oKG9wdGlvbnM6IHsganNvbj86IGJvb2xlYW4gfSkgPT4ge1xuICAgIGNvbnN0IGNvbmZpZyA9IGxvYWRDb25maWcoKTtcblxuICAgIGlmICghY29uZmlnKSB7XG4gICAgICBpZiAob3B0aW9ucy5qc29uKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHsgY29uZmlndXJlZDogZmFsc2UgfSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJOb3QgY29uZmlndXJlZC4gUnVuICdjbGF1ZGUtY29kZS1zeW5jIGxvZ2luJyB0byBzZXQgdXAuXCIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmpzb24pIHtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25maWd1cmVkOiB0cnVlLFxuICAgICAgICAgICAgY29udmV4VXJsOiBjb25maWcuY29udmV4VXJsLFxuICAgICAgICAgICAgYXBpS2V5OiBtYXNrQXBpS2V5KGNvbmZpZy5hcGlLZXkpLFxuICAgICAgICAgICAgYXV0b1N5bmM6IGNvbmZpZy5hdXRvU3luYyAhPT0gZmFsc2UsXG4gICAgICAgICAgICBzeW5jVG9vbENhbGxzOiBjb25maWcuc3luY1Rvb2xDYWxscyAhPT0gZmFsc2UsXG4gICAgICAgICAgICBzeW5jVGhpbmtpbmc6IGNvbmZpZy5zeW5jVGhpbmtpbmcgPT09IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBudWxsLFxuICAgICAgICAgIDJcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coXCJcXG4gIEN1cnJlbnQgQ29uZmlndXJhdGlvblxcblwiKTtcbiAgICAgIGNvbnNvbGUubG9nKGBDb252ZXggVVJMOiAgJHtjb25maWcuY29udmV4VXJsfWApO1xuICAgICAgY29uc29sZS5sb2coYEFQSSBLZXk6ICAgICAke21hc2tBcGlLZXkoY29uZmlnLmFwaUtleSl9YCk7XG4gICAgICBjb25zb2xlLmxvZyhgQXV0byBTeW5jOiAgICR7Y29uZmlnLmF1dG9TeW5jICE9PSBmYWxzZX1gKTtcbiAgICAgIGNvbnNvbGUubG9nKGBUb29sIENhbGxzOiAgJHtjb25maWcuc3luY1Rvb2xDYWxscyAhPT0gZmFsc2V9YCk7XG4gICAgICBjb25zb2xlLmxvZyhgVGhpbmtpbmc6ICAgICR7Y29uZmlnLnN5bmNUaGlua2luZyA9PT0gdHJ1ZX1gKTtcbiAgICAgIGNvbnNvbGUubG9nKGBcXG5Db25maWcgZmlsZTogfi8uY29uZmlnL2NsYXVkZS1jb2RlLXN5bmMvY29uZmlnLmpzb25cXG5gKTtcbiAgICB9XG4gIH0pO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKFwic2V0IDxrZXk+IDx2YWx1ZT5cIilcbiAgLmRlc2NyaXB0aW9uKFwiU2V0IGEgY29uZmlndXJhdGlvbiB2YWx1ZVwiKVxuICAuYWN0aW9uKChrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IGNvbmZpZyA9IGxvYWRDb25maWcoKTtcblxuICAgIGlmICghY29uZmlnKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiTm90IGNvbmZpZ3VyZWQuIFJ1biAnY2xhdWRlLWNvZGUtc3luYyBsb2dpbicgZmlyc3QuXCIpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbGlkS2V5cyA9IFtcImF1dG9TeW5jXCIsIFwic3luY1Rvb2xDYWxsc1wiLCBcInN5bmNUaGlua2luZ1wiXTtcbiAgICBpZiAoIXZhbGlkS2V5cy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBJbnZhbGlkIGtleS4gVmFsaWQga2V5czogJHt2YWxpZEtleXMuam9pbihcIiwgXCIpfWApO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cblxuICAgIGNvbnN0IGJvb2xWYWx1ZSA9IHZhbHVlID09PSBcInRydWVcIiB8fCB2YWx1ZSA9PT0gXCIxXCIgfHwgdmFsdWUgPT09IFwieWVzXCI7XG4gICAgXG4gICAgLy8gVHlwZS1zYWZlIGNvbmZpZyB1cGRhdGVcbiAgICBpZiAoa2V5ID09PSBcImF1dG9TeW5jXCIpIHtcbiAgICAgIGNvbmZpZy5hdXRvU3luYyA9IGJvb2xWYWx1ZTtcbiAgICB9IGVsc2UgaWYgKGtleSA9PT0gXCJzeW5jVG9vbENhbGxzXCIpIHtcbiAgICAgIGNvbmZpZy5zeW5jVG9vbENhbGxzID0gYm9vbFZhbHVlO1xuICAgIH0gZWxzZSBpZiAoa2V5ID09PSBcInN5bmNUaGlua2luZ1wiKSB7XG4gICAgICBjb25maWcuc3luY1RoaW5raW5nID0gYm9vbFZhbHVlO1xuICAgIH1cblxuICAgIHNhdmVDb25maWcoY29uZmlnKTtcbiAgICBjb25zb2xlLmxvZyhgU2V0ICR7a2V5fSA9ICR7Ym9vbFZhbHVlfWApO1xuICB9KTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gU2V0dXAgQ29tbWFuZCAoY29uZmlndXJlcyBDbGF1ZGUgQ29kZSBob29rcylcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLy8gQ2xhdWRlIENvZGUgaG9va3MgY29uZmlndXJhdGlvblxuY29uc3QgQ0xBVURFX0hPT0tTX0NPTkZJRyA9IHtcbiAgaG9va3M6IHtcbiAgICBTZXNzaW9uU3RhcnQ6IFtcbiAgICAgIHtcbiAgICAgICAgaG9va3M6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcImNvbW1hbmRcIixcbiAgICAgICAgICAgIGNvbW1hbmQ6IFwiY2xhdWRlLWNvZGUtc3luYyBob29rIFNlc3Npb25TdGFydFwiLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIF0sXG4gICAgU2Vzc2lvbkVuZDogW1xuICAgICAge1xuICAgICAgICBob29rczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwiY29tbWFuZFwiLFxuICAgICAgICAgICAgY29tbWFuZDogXCJjbGF1ZGUtY29kZS1zeW5jIGhvb2sgU2Vzc2lvbkVuZFwiLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIF0sXG4gICAgVXNlclByb21wdFN1Ym1pdDogW1xuICAgICAge1xuICAgICAgICBob29rczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwiY29tbWFuZFwiLFxuICAgICAgICAgICAgY29tbWFuZDogXCJjbGF1ZGUtY29kZS1zeW5jIGhvb2sgVXNlclByb21wdFN1Ym1pdFwiLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIF0sXG4gICAgUG9zdFRvb2xVc2U6IFtcbiAgICAgIHtcbiAgICAgICAgbWF0Y2hlcjogXCIqXCIsXG4gICAgICAgIGhvb2tzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJjb21tYW5kXCIsXG4gICAgICAgICAgICBjb21tYW5kOiBcImNsYXVkZS1jb2RlLXN5bmMgaG9vayBQb3N0VG9vbFVzZVwiLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIF0sXG4gICAgU3RvcDogW1xuICAgICAge1xuICAgICAgICBtYXRjaGVyOiBcIipcIixcbiAgICAgICAgaG9va3M6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiBcImNvbW1hbmRcIixcbiAgICAgICAgICAgIGNvbW1hbmQ6IFwiY2xhdWRlLWNvZGUtc3luYyBob29rIFN0b3BcIixcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICBdLFxuICB9LFxufTtcblxucHJvZ3JhbVxuICAuY29tbWFuZChcInNldHVwXCIpXG4gIC5kZXNjcmlwdGlvbihcIkFkZCBob29rcyB0byBDbGF1ZGUgQ29kZSBzZXR0aW5ncyAoY29uZmlndXJlcyB+Ly5jbGF1ZGUvc2V0dGluZ3MuanNvbilcIilcbiAgLm9wdGlvbihcIi0tZm9yY2VcIiwgXCJPdmVyd3JpdGUgZXhpc3RpbmcgaG9va3MgY29uZmlndXJhdGlvblwiKVxuICAuYWN0aW9uKGFzeW5jIChvcHRpb25zOiB7IGZvcmNlPzogYm9vbGVhbiB9KSA9PiB7XG4gICAgY29uc3QgY2xhdWRlRGlyID0gcGF0aC5qb2luKHByb2Nlc3MuZW52LkhPTUUgfHwgXCJ+XCIsIFwiLmNsYXVkZVwiKTtcbiAgICBjb25zdCBzZXR0aW5nc1BhdGggPSBwYXRoLmpvaW4oY2xhdWRlRGlyLCBcInNldHRpbmdzLmpzb25cIik7XG5cbiAgICBjb25zb2xlLmxvZyhcIlxcbiAgQ2xhdWRlIENvZGUgU3luYyAtIFNldHVwXFxuXCIpO1xuXG4gICAgLy8gQ2hlY2sgaWYgcGx1Z2luIGNyZWRlbnRpYWxzIGFyZSBjb25maWd1cmVkXG4gICAgY29uc3QgY29uZmlnID0gbG9hZENvbmZpZygpO1xuICAgIGlmICghY29uZmlnKSB7XG4gICAgICBjb25zb2xlLmxvZyhcIldhcm5pbmc6IFBsdWdpbiBub3QgY29uZmlndXJlZCB5ZXQuXCIpO1xuICAgICAgY29uc29sZS5sb2coXCIgICBSdW4gJ2NsYXVkZS1jb2RlLXN5bmMgbG9naW4nIGZpcnN0IHRvIHNldCB1cCBjcmVkZW50aWFscy5cXG5cIik7XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIC5jbGF1ZGUgZGlyZWN0b3J5IGlmIG5lZWRlZFxuICAgIGlmICghZnMuZXhpc3RzU3luYyhjbGF1ZGVEaXIpKSB7XG4gICAgICBmcy5ta2RpclN5bmMoY2xhdWRlRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIGNvbnNvbGUubG9nKFwiQ3JlYXRlZCB+Ly5jbGF1ZGUgZGlyZWN0b3J5XCIpO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGZvciBleGlzdGluZyBzZXR0aW5nc1xuICAgIGxldCBleGlzdGluZ1NldHRpbmdzOiBDbGF1ZGVTZXR0aW5ncyA9IHt9O1xuICAgIGxldCBoYXNFeGlzdGluZ0hvb2tzID0gZmFsc2U7XG5cbiAgICBpZiAoZnMuZXhpc3RzU3luYyhzZXR0aW5nc1BhdGgpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBjb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKHNldHRpbmdzUGF0aCwgXCJ1dGYtOFwiKTtcbiAgICAgICAgZXhpc3RpbmdTZXR0aW5ncyA9IEpTT04ucGFyc2UoY29udGVudCkgYXMgQ2xhdWRlU2V0dGluZ3M7XG4gICAgICAgIGhhc0V4aXN0aW5nSG9va3MgPSAhIWV4aXN0aW5nU2V0dGluZ3MuaG9va3M7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiRm91bmQgZXhpc3Rpbmcgc2V0dGluZ3MuanNvblwiKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICBjb25zb2xlLmxvZyhcIldhcm5pbmc6IENvdWxkIG5vdCBwYXJzZSBleGlzdGluZyBzZXR0aW5ncy5qc29uLCB3aWxsIGNyZWF0ZSBuZXcgb25lXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEhhbmRsZSBleGlzdGluZyBob29rc1xuICAgIGlmIChoYXNFeGlzdGluZ0hvb2tzICYmICFvcHRpb25zLmZvcmNlKSB7XG4gICAgICBjb25zb2xlLmxvZyhcIlxcbkV4aXN0aW5nIGhvb2tzIGNvbmZpZ3VyYXRpb24gZm91bmQuXCIpO1xuICAgICAgY29uc29sZS5sb2coXCIgICBVc2UgLS1mb3JjZSB0byBvdmVyd3JpdGUsIG9yIG1hbnVhbGx5IG1lcmdlIHRoZSBob29rcy5cXG5cIik7XG4gICAgICBjb25zb2xlLmxvZyhcIlRvIG1hbnVhbGx5IGFkZCwgaW5jbHVkZSB0aGVzZSBob29rcyBpbiB5b3VyIHNldHRpbmdzLmpzb246XCIpO1xuICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoQ0xBVURFX0hPT0tTX0NPTkZJRywgbnVsbCwgMikpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cblxuICAgIC8vIE1lcmdlIHNldHRpbmdzXG4gICAgY29uc3QgbmV3U2V0dGluZ3MgPSB7XG4gICAgICAuLi5leGlzdGluZ1NldHRpbmdzLFxuICAgICAgLi4uQ0xBVURFX0hPT0tTX0NPTkZJRyxcbiAgICB9O1xuXG4gICAgLy8gV3JpdGUgc2V0dGluZ3NcbiAgICB0cnkge1xuICAgICAgZnMud3JpdGVGaWxlU3luYyhzZXR0aW5nc1BhdGgsIEpTT04uc3RyaW5naWZ5KG5ld1NldHRpbmdzLCBudWxsLCAyKSk7XG4gICAgICBjb25zb2xlLmxvZyhcIlxcbkNsYXVkZSBDb2RlIGhvb2tzIGNvbmZpZ3VyZWQhXCIpO1xuICAgICAgY29uc29sZS5sb2coYCAgIFNldHRpbmdzIGZpbGU6ICR7c2V0dGluZ3NQYXRofWApO1xuICAgICAgY29uc29sZS5sb2coXCJcXG5TZXR1cCBjb21wbGV0ZS4gU2Vzc2lvbnMgd2lsbCBzeW5jIGF1dG9tYXRpY2FsbHkuXFxuXCIpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3Igd3JpdGluZyBzZXR0aW5nczpcIiwgZXJyb3IpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgfSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoXCJ2ZXJpZnlcIilcbiAgLmRlc2NyaXB0aW9uKFwiVmVyaWZ5IGNyZWRlbnRpYWxzIGFuZCBDbGF1ZGUgQ29kZSBjb25maWd1cmF0aW9uXCIpXG4gIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKFwiXFxuICBPcGVuU3luYyBTZXR1cCBWZXJpZmljYXRpb25cXG5cIik7XG5cbiAgICAvLyBDaGVjayBjcmVkZW50aWFsc1xuICAgIGNvbnN0IGNvbmZpZyA9IGxvYWRDb25maWcoKTtcbiAgICBpZiAoY29uZmlnKSB7XG4gICAgICBjb25zb2xlLmxvZyhcIkNyZWRlbnRpYWxzOiBPS1wiKTtcbiAgICAgIGNvbnNvbGUubG9nKGAgICBDb252ZXggVVJMOiAke2NvbmZpZy5jb252ZXhVcmx9YCk7XG4gICAgICBjb25zb2xlLmxvZyhgICAgQVBJIEtleTogJHttYXNrQXBpS2V5KGNvbmZpZy5hcGlLZXkpfWApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZyhcIkNyZWRlbnRpYWxzOiBOT1QgQ09ORklHVVJFRFwiKTtcbiAgICAgIGNvbnNvbGUubG9nKFwiICAgUnVuICdjbGF1ZGUtY29kZS1zeW5jIGxvZ2luJyB0byBzZXQgdXBcIik7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgQ2xhdWRlIENvZGUgY29uZmlnXG4gICAgY29uc3Qgc2V0dGluZ3NQYXRoID0gcGF0aC5qb2luKHByb2Nlc3MuZW52LkhPTUUgfHwgXCJ+XCIsIFwiLmNsYXVkZVwiLCBcInNldHRpbmdzLmpzb25cIik7XG4gICAgbGV0IGhvb2tzQ29uZmlndXJlZCA9IGZhbHNlO1xuXG4gICAgaWYgKGZzLmV4aXN0c1N5bmMoc2V0dGluZ3NQYXRoKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhzZXR0aW5nc1BhdGgsIFwidXRmLThcIik7XG4gICAgICAgIGNvbnN0IHNldHRpbmdzID0gSlNPTi5wYXJzZShjb250ZW50KSBhcyBDbGF1ZGVTZXR0aW5ncztcbiAgICAgICAgaG9va3NDb25maWd1cmVkID0gISFzZXR0aW5ncy5ob29rcz8uU2Vzc2lvblN0YXJ0O1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIElnbm9yZSBwYXJzZSBlcnJvcnNcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZyhcIlwiKTtcbiAgICBpZiAoaG9va3NDb25maWd1cmVkKSB7XG4gICAgICBjb25zb2xlLmxvZyhcIkNsYXVkZSBDb2RlIENvbmZpZzogT0tcIik7XG4gICAgICBjb25zb2xlLmxvZyhgICAgQ29uZmlnIGZpbGU6ICR7c2V0dGluZ3NQYXRofWApO1xuICAgICAgY29uc29sZS5sb2coXCIgICBIb29rcyByZWdpc3RlcmVkOiBjbGF1ZGUtY29kZS1zeW5jXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZyhcIkNsYXVkZSBDb2RlIENvbmZpZzogTk9UIENPTkZJR1VSRURcIik7XG4gICAgICBjb25zb2xlLmxvZyhcIiAgIFJ1biAnY2xhdWRlLWNvZGUtc3luYyBzZXR1cCcgdG8gY29uZmlndXJlIGhvb2tzXCIpO1xuICAgIH1cblxuICAgIC8vIFRlc3QgY29ubmVjdGlvbiBpZiBjcmVkZW50aWFscyBleGlzdFxuICAgIGlmIChjb25maWcpIHtcbiAgICAgIGNvbnNvbGUubG9nKFwiXFxuVGVzdGluZyBjb25uZWN0aW9uLi4uXCIpO1xuICAgICAgY29uc3QgY2xpZW50ID0gbmV3IFN5bmNDbGllbnQoY29uZmlnKTtcbiAgICAgIGNvbnN0IGNvbm5lY3RlZCA9IGF3YWl0IGNsaWVudC50ZXN0Q29ubmVjdGlvbigpO1xuICAgICAgaWYgKGNvbm5lY3RlZCkge1xuICAgICAgICBjb25zb2xlLmxvZyhcIkNvbm5lY3Rpb246IE9LXFxuXCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJDb25uZWN0aW9uOiBGQUlMRURcXG5cIik7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY29uZmlnICYmIGhvb2tzQ29uZmlndXJlZCkge1xuICAgICAgY29uc29sZS5sb2coXCJSZWFkeSEgU3RhcnQgQ2xhdWRlIENvZGUgYW5kIHNlc3Npb25zIHdpbGwgc3luYyBhdXRvbWF0aWNhbGx5LlxcblwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coXCJcIik7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICB9KTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gU3luYyBUZXN0IENvbW1hbmQgKHRlc3QgY29ubmVjdGl2aXR5KVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5wcm9ncmFtXG4gIC5jb21tYW5kKFwic3luY3Rlc3RcIilcbiAgLmRlc2NyaXB0aW9uKFwiVGVzdCBjb25uZWN0aXZpdHkgYW5kIGNyZWF0ZSBhIHRlc3Qgc2Vzc2lvblwiKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBjb25maWcgPSBsb2FkQ29uZmlnKCk7XG5cbiAgICBjb25zb2xlLmxvZyhcIlxcbiAgQ2xhdWRlIENvZGUgU3luYyAtIENvbm5lY3Rpb24gVGVzdFxcblwiKTtcblxuICAgIGlmICghY29uZmlnKSB7XG4gICAgICBjb25zb2xlLmxvZyhcIk5vdCBjb25maWd1cmVkXCIpO1xuICAgICAgY29uc29sZS5sb2coXCIgICBSdW4gJ2NsYXVkZS1jb2RlLXN5bmMgbG9naW4nIHRvIHNldCB1cFxcblwiKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZyhcIkNvbmZpZ3VyYXRpb246XCIpO1xuICAgIGNvbnNvbGUubG9nKGAgIENvbnZleCBVUkw6ICR7Y29uZmlnLmNvbnZleFVybH1gKTtcbiAgICBjb25zb2xlLmxvZyhgICBBUEkgS2V5OiAgICAke21hc2tBcGlLZXkoY29uZmlnLmFwaUtleSl9YCk7XG5cbiAgICBjb25zb2xlLmxvZyhcIlxcblRlc3RpbmcgY29ubmVjdGlvbi4uLlwiKTtcbiAgICBjb25zdCBjbGllbnQgPSBuZXcgU3luY0NsaWVudChjb25maWcpO1xuICAgIGNvbnN0IGNvbm5lY3RlZCA9IGF3YWl0IGNsaWVudC50ZXN0Q29ubmVjdGlvbigpO1xuXG4gICAgaWYgKGNvbm5lY3RlZCkge1xuICAgICAgY29uc29sZS5sb2coXCJDb25uZWN0aW9uOiBPS1wiKTtcbiAgICAgIFxuICAgICAgLy8gQ3JlYXRlIGEgdGVzdCBzZXNzaW9uIHRvIHZlcmlmeSBmdWxsIHN5bmMgd29ya3NcbiAgICAgIGNvbnNvbGUubG9nKFwiXFxuQ3JlYXRpbmcgdGVzdCBzZXNzaW9uLi4uXCIpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgdGVzdFNlc3Npb24gPSB7XG4gICAgICAgICAgc2Vzc2lvbklkOiBgdGVzdC0ke0RhdGUubm93KCl9YCxcbiAgICAgICAgICBzb3VyY2U6IFwiY2xhdWRlLWNvZGVcIiBhcyBjb25zdCxcbiAgICAgICAgICB0aXRsZTogXCJDb25uZWN0aW9uIFRlc3RcIixcbiAgICAgICAgICBwcm9qZWN0TmFtZTogXCJzeW5jdGVzdFwiLFxuICAgICAgICAgIHN0YXJ0ZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICAgIGVuZGVkQXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgfTtcbiAgICAgICAgYXdhaXQgY2xpZW50LnN5bmNTZXNzaW9uKHRlc3RTZXNzaW9uKTtcbiAgICAgICAgY29uc29sZS5sb2coXCJUZXN0IHNlc3Npb24gY3JlYXRlZCBzdWNjZXNzZnVsbHlcIik7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiXFxuU3luYyB0ZXN0IHBhc3NlZC4gUmVhZHkgdG8gc3luYyBDbGF1ZGUgQ29kZSBzZXNzaW9ucy5cXG5cIik7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmxvZyhgVGVzdCBzZXNzaW9uIGZhaWxlZDogJHtlcnJvcn1gKTtcbiAgICAgICAgY29uc29sZS5sb2coXCJcXG5Db25uZWN0aW9uIHdvcmtzIGJ1dCBzeW5jIG1heSBoYXZlIGlzc3Vlcy5cXG5cIik7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coXCJDb25uZWN0aW9uOiBGQUlMRURcIik7XG4gICAgICBjb25zb2xlLmxvZyhcIlxcbkNoZWNrIHlvdXIgQ29udmV4IFVSTCBhbmQgQVBJIGtleS5cXG5cIik7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICB9KTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gSG9vayBDb21tYW5kIChmb3IgQ2xhdWRlIENvZGUgaW50ZWdyYXRpb24pXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8vIFRyYWNrIHNlc3Npb24gc3RhdGUgZm9yIHRpdGxlIGdlbmVyYXRpb24gKGZpcnN0IHVzZXIgcHJvbXB0KVxuY29uc3QgU0VTU0lPTl9TVEFURV9GSUxFID0gcGF0aC5qb2luKFxuICBwcm9jZXNzLmVudi5IT01FIHx8IFwiflwiLFxuICBcIi5jb25maWdcIixcbiAgXCJjbGF1ZGUtY29kZS1zeW5jXCIsXG4gIFwic2Vzc2lvbi1zdGF0ZS5qc29uXCJcbik7XG5cbmludGVyZmFjZSBTZXNzaW9uU3RhdGUge1xuICBbc2Vzc2lvbklkOiBzdHJpbmddOiB7XG4gICAgbW9kZWw/OiBzdHJpbmc7XG4gICAgZmlyc3RQcm9tcHQ/OiBzdHJpbmc7XG4gICAgdG9rZW5Vc2FnZT86IHsgaW5wdXQ6IG51bWJlcjsgb3V0cHV0OiBudW1iZXIgfTtcbiAgICBjYWNoZUNyZWF0aW9uVG9rZW5zPzogbnVtYmVyO1xuICAgIGNhY2hlUmVhZFRva2Vucz86IG51bWJlcjtcbiAgICBtZXNzYWdlQ291bnQ/OiBudW1iZXI7XG4gICAgdG9vbENhbGxDb3VudD86IG51bWJlcjtcbiAgICBzeW5jZWRNZXNzYWdlVXVpZHM/OiBTZXQ8c3RyaW5nPiB8IHN0cmluZ1tdO1xuICAgIHN0YXJ0ZWRBdD86IHN0cmluZztcbiAgICBlbmRlZEF0Pzogc3RyaW5nO1xuICAgIGR1cmF0aW9uTXM/OiBudW1iZXI7XG4gICAgdGl0bGU/OiBzdHJpbmc7XG4gICAgY3dkPzogc3RyaW5nO1xuICAgIGNvc3RFc3RpbWF0ZT86IG51bWJlcjtcbiAgfTtcbn1cblxuZnVuY3Rpb24gbG9hZFNlc3Npb25TdGF0ZSgpOiBTZXNzaW9uU3RhdGUge1xuICB0cnkge1xuICAgIGlmIChmcy5leGlzdHNTeW5jKFNFU1NJT05fU1RBVEVfRklMRSkpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhTRVNTSU9OX1NUQVRFX0ZJTEUsIFwidXRmLThcIikpIGFzIFNlc3Npb25TdGF0ZTtcbiAgICAgIC8vIENvbnZlcnQgYXJyYXlzIGJhY2sgdG8gU2V0cyBmb3Igc3luY2VkTWVzc2FnZVV1aWRzXG4gICAgICBmb3IgKGNvbnN0IHNlc3Npb25JZCBvZiBPYmplY3Qua2V5cyhkYXRhKSkge1xuICAgICAgICBjb25zdCBzZXNzaW9uID0gZGF0YVtzZXNzaW9uSWRdO1xuICAgICAgICBpZiAoc2Vzc2lvbi5zeW5jZWRNZXNzYWdlVXVpZHMgJiYgQXJyYXkuaXNBcnJheShzZXNzaW9uLnN5bmNlZE1lc3NhZ2VVdWlkcykpIHtcbiAgICAgICAgICBzZXNzaW9uLnN5bmNlZE1lc3NhZ2VVdWlkcyA9IG5ldyBTZXQoc2Vzc2lvbi5zeW5jZWRNZXNzYWdlVXVpZHMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIC8vIElnbm9yZSBlcnJvcnNcbiAgfVxuICByZXR1cm4ge307XG59XG5cbmZ1bmN0aW9uIHNhdmVTZXNzaW9uU3RhdGUoc3RhdGU6IFNlc3Npb25TdGF0ZSk6IHZvaWQge1xuICB0cnkge1xuICAgIGNvbnN0IGRpciA9IHBhdGguZGlybmFtZShTRVNTSU9OX1NUQVRFX0ZJTEUpO1xuICAgIGlmICghZnMuZXhpc3RzU3luYyhkaXIpKSB7XG4gICAgICBmcy5ta2RpclN5bmMoZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICB9XG4gICAgLy8gQ29udmVydCBTZXRzIHRvIGFycmF5cyBmb3IgSlNPTiBzZXJpYWxpemF0aW9uXG4gICAgY29uc3Qgc2VyaWFsaXphYmxlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuICAgIGZvciAoY29uc3Qgc2Vzc2lvbklkIG9mIE9iamVjdC5rZXlzKHN0YXRlKSkge1xuICAgICAgY29uc3Qgc2Vzc2lvbiA9IHN0YXRlW3Nlc3Npb25JZF07XG4gICAgICBzZXJpYWxpemFibGVbc2Vzc2lvbklkXSA9IHtcbiAgICAgICAgLi4uc2Vzc2lvbixcbiAgICAgICAgc3luY2VkTWVzc2FnZVV1aWRzOiBzZXNzaW9uLnN5bmNlZE1lc3NhZ2VVdWlkcyBpbnN0YW5jZW9mIFNldFxuICAgICAgICAgID8gQXJyYXkuZnJvbShzZXNzaW9uLnN5bmNlZE1lc3NhZ2VVdWlkcylcbiAgICAgICAgICA6IHNlc3Npb24uc3luY2VkTWVzc2FnZVV1aWRzLFxuICAgICAgfTtcbiAgICB9XG4gICAgZnMud3JpdGVGaWxlU3luYyhTRVNTSU9OX1NUQVRFX0ZJTEUsIEpTT04uc3RyaW5naWZ5KHNlcmlhbGl6YWJsZSwgbnVsbCwgMikpO1xuICB9IGNhdGNoIHtcbiAgICAvLyBJZ25vcmUgZXJyb3JzXG4gIH1cbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVUaXRsZShwcm9tcHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vIFVzZSBmaXJzdCA4MCBjaGFycyBvZiBmaXJzdCBwcm9tcHQgYXMgdGl0bGUsIHRyaW0gYXQgd29yZCBib3VuZGFyeVxuICBjb25zdCB0cmltbWVkID0gcHJvbXB0LnNsaWNlKDAsIDgwKS50cmltKCk7XG4gIGlmIChwcm9tcHQubGVuZ3RoID4gODApIHtcbiAgICBjb25zdCBsYXN0U3BhY2UgPSB0cmltbWVkLmxhc3RJbmRleE9mKFwiIFwiKTtcbiAgICBpZiAobGFzdFNwYWNlID4gNDApIHtcbiAgICAgIHJldHVybiB0cmltbWVkLnNsaWNlKDAsIGxhc3RTcGFjZSkgKyBcIi4uLlwiO1xuICAgIH1cbiAgICByZXR1cm4gdHJpbW1lZCArIFwiLi4uXCI7XG4gIH1cbiAgcmV0dXJuIHRyaW1tZWQ7XG59XG5cbi8vIFBhcnNlIHRyYW5zY3JpcHQgZmlsZSB0byBleHRyYWN0IGFzc2lzdGFudCBtZXNzYWdlcywgdG9rZW4gdXNhZ2UsIGFuZCBzdGF0c1xuaW50ZXJmYWNlIFBhcnNlZFRyYW5zY3JpcHQge1xuICBhc3Npc3RhbnRNZXNzYWdlczogQXJyYXk8e1xuICAgIHV1aWQ6IHN0cmluZztcbiAgICB0ZXh0OiBzdHJpbmc7XG4gICAgdGltZXN0YW1wOiBzdHJpbmc7XG4gICAgbW9kZWw/OiBzdHJpbmc7XG4gIH0+O1xuICBzdGF0czogVHJhbnNjcmlwdFN0YXRzO1xufVxuXG5mdW5jdGlvbiBwYXJzZVRyYW5zY3JpcHRGaWxlKHRyYW5zY3JpcHRQYXRoOiBzdHJpbmcpOiBQYXJzZWRUcmFuc2NyaXB0IHtcbiAgY29uc3QgcmVzdWx0OiBQYXJzZWRUcmFuc2NyaXB0ID0ge1xuICAgIGFzc2lzdGFudE1lc3NhZ2VzOiBbXSxcbiAgICBzdGF0czoge1xuICAgICAgbW9kZWw6IHVuZGVmaW5lZCxcbiAgICAgIGlucHV0VG9rZW5zOiAwLFxuICAgICAgY2FjaGVDcmVhdGlvblRva2VuczogMCxcbiAgICAgIGNhY2hlUmVhZFRva2VuczogMCxcbiAgICAgIG91dHB1dFRva2VuczogMCxcbiAgICAgIG1lc3NhZ2VDb3VudDogMCxcbiAgICAgIHRvb2xDYWxsQ291bnQ6IDAsXG4gICAgICB0aXRsZTogdW5kZWZpbmVkLFxuICAgICAgY3dkOiB1bmRlZmluZWQsXG4gICAgICBzdGFydGVkQXQ6IHVuZGVmaW5lZCxcbiAgICAgIGVuZGVkQXQ6IHVuZGVmaW5lZCxcbiAgICAgIGR1cmF0aW9uTXM6IHVuZGVmaW5lZCxcbiAgICB9LFxuICB9O1xuXG4gIHRyeSB7XG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKHRyYW5zY3JpcHRQYXRoKSkge1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBjb25zdCBjb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKHRyYW5zY3JpcHRQYXRoLCBcInV0Zi04XCIpO1xuICAgIGNvbnN0IGxpbmVzID0gY29udGVudC50cmltKCkuc3BsaXQoXCJcXG5cIik7XG4gICAgY29uc3Qgc2VlblV1aWRzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgbGV0IGZpcnN0VGltZXN0YW1wOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgbGV0IGxhc3RUaW1lc3RhbXA6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIGZvciAoY29uc3QgbGluZSBvZiBsaW5lcykge1xuICAgICAgaWYgKCFsaW5lLnRyaW0oKSkgY29udGludWU7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGVudHJ5ID0gSlNPTi5wYXJzZShsaW5lKSBhcyBUcmFuc2NyaXB0RW50cnk7XG5cbiAgICAgICAgLy8gVHJhY2sgdGltZXN0YW1wcyBmb3IgZHVyYXRpb24gY2FsY3VsYXRpb25cbiAgICAgICAgaWYgKGVudHJ5LnRpbWVzdGFtcCkge1xuICAgICAgICAgIGlmICghZmlyc3RUaW1lc3RhbXApIHtcbiAgICAgICAgICAgIGZpcnN0VGltZXN0YW1wID0gZW50cnkudGltZXN0YW1wO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsYXN0VGltZXN0YW1wID0gZW50cnkudGltZXN0YW1wO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gR2V0IGN3ZCBhbmQgdGl0bGUgZnJvbSBmaXJzdCBlbnRyeSB0aGF0IGhhcyB0aGVtXG4gICAgICAgIGlmICghcmVzdWx0LnN0YXRzLmN3ZCAmJiBlbnRyeS5jd2QpIHtcbiAgICAgICAgICByZXN1bHQuc3RhdHMuY3dkID0gZW50cnkuY3dkO1xuICAgICAgICB9XG4gICAgICAgIGlmICghcmVzdWx0LnN0YXRzLnRpdGxlICYmIGVudHJ5LnNsdWcpIHtcbiAgICAgICAgICByZXN1bHQuc3RhdHMudGl0bGUgPSBlbnRyeS5zbHVnO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ291bnQgdXNlciBtZXNzYWdlc1xuICAgICAgICBpZiAoZW50cnkudHlwZSA9PT0gXCJ1c2VyXCIpIHtcbiAgICAgICAgICByZXN1bHQuc3RhdHMubWVzc2FnZUNvdW50Kys7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQcm9jZXNzIGFzc2lzdGFudCBtZXNzYWdlc1xuICAgICAgICBpZiAoZW50cnkudHlwZSA9PT0gXCJhc3Npc3RhbnRcIiAmJiBlbnRyeS5tZXNzYWdlKSB7XG4gICAgICAgICAgY29uc3QgbXNnID0gZW50cnkubWVzc2FnZTtcbiAgICAgICAgICBjb25zdCB1dWlkID0gZW50cnkudXVpZCB8fCBcIlwiO1xuXG4gICAgICAgICAgLy8gR2V0IG1vZGVsIGZyb20gZmlyc3QgYXNzaXN0YW50IG1lc3NhZ2VcbiAgICAgICAgICBpZiAobXNnLm1vZGVsICYmICFyZXN1bHQuc3RhdHMubW9kZWwpIHtcbiAgICAgICAgICAgIHJlc3VsdC5zdGF0cy5tb2RlbCA9IG1zZy5tb2RlbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBTa2lwIGR1cGxpY2F0ZSBVVUlEcyBmb3IgbWVzc2FnZSBleHRyYWN0aW9uXG4gICAgICAgICAgaWYgKHV1aWQgJiYgc2VlblV1aWRzLmhhcyh1dWlkKSkgY29udGludWU7XG4gICAgICAgICAgaWYgKHV1aWQpIHNlZW5VdWlkcy5hZGQodXVpZCk7XG5cbiAgICAgICAgICAvLyBFeHRyYWN0IHRleHQgY29udGVudCBmcm9tIG1lc3NhZ2VcbiAgICAgICAgICBpZiAobXNnLmNvbnRlbnQgJiYgQXJyYXkuaXNBcnJheShtc2cuY29udGVudCkpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcGFydCBvZiBtc2cuY29udGVudCkge1xuICAgICAgICAgICAgICBpZiAocGFydC50eXBlID09PSBcInRleHRcIiAmJiBwYXJ0LnRleHQpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQuYXNzaXN0YW50TWVzc2FnZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICB1dWlkLFxuICAgICAgICAgICAgICAgICAgdGV4dDogcGFydC50ZXh0LFxuICAgICAgICAgICAgICAgICAgdGltZXN0YW1wOiBlbnRyeS50aW1lc3RhbXAgfHwgbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICAgICAgICAgICAgbW9kZWw6IG1zZy5tb2RlbCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyBDb3VudCB0b29sIHVzZXNcbiAgICAgICAgICAgICAgaWYgKHBhcnQudHlwZSA9PT0gXCJ0b29sX3VzZVwiKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnN0YXRzLnRvb2xDYWxsQ291bnQrKztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIEFjY3VtdWxhdGUgdG9rZW4gdXNhZ2UgKHNlcGFyYXRlIGNhY2hlIHRva2VucyBmb3IgY29zdCBjYWxjdWxhdGlvbilcbiAgICAgICAgICBpZiAobXNnLnVzYWdlKSB7XG4gICAgICAgICAgICByZXN1bHQuc3RhdHMuaW5wdXRUb2tlbnMgKz0gbXNnLnVzYWdlLmlucHV0X3Rva2VucyB8fCAwO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXRzLmNhY2hlQ3JlYXRpb25Ub2tlbnMgKz0gbXNnLnVzYWdlLmNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2VucyB8fCAwO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXRzLmNhY2hlUmVhZFRva2VucyArPSBtc2cudXNhZ2UuY2FjaGVfcmVhZF9pbnB1dF90b2tlbnMgfHwgMDtcbiAgICAgICAgICAgIHJlc3VsdC5zdGF0cy5vdXRwdXRUb2tlbnMgKz0gbXNnLnVzYWdlLm91dHB1dF90b2tlbnMgfHwgMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBTa2lwIG1hbGZvcm1lZCBsaW5lc1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENhbGN1bGF0ZSBkdXJhdGlvbiBmcm9tIHRpbWVzdGFtcHNcbiAgICBpZiAoZmlyc3RUaW1lc3RhbXAgJiYgbGFzdFRpbWVzdGFtcCkge1xuICAgICAgcmVzdWx0LnN0YXRzLnN0YXJ0ZWRBdCA9IGZpcnN0VGltZXN0YW1wO1xuICAgICAgcmVzdWx0LnN0YXRzLmVuZGVkQXQgPSBsYXN0VGltZXN0YW1wO1xuICAgICAgY29uc3Qgc3RhcnRNcyA9IG5ldyBEYXRlKGZpcnN0VGltZXN0YW1wKS5nZXRUaW1lKCk7XG4gICAgICBjb25zdCBlbmRNcyA9IG5ldyBEYXRlKGxhc3RUaW1lc3RhbXApLmdldFRpbWUoKTtcbiAgICAgIGlmICghaXNOYU4oc3RhcnRNcykgJiYgIWlzTmFOKGVuZE1zKSkge1xuICAgICAgICByZXN1bHQuc3RhdHMuZHVyYXRpb25NcyA9IGVuZE1zIC0gc3RhcnRNcztcbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIC8vIFJldHVybiBlbXB0eSByZXN1bHQgb24gZXJyb3JcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoXCJob29rIDxldmVudD5cIilcbiAgLmRlc2NyaXB0aW9uKFwiSGFuZGxlIENsYXVkZSBDb2RlIGhvb2sgZXZlbnRzIChyZWFkcyBzdGRpbilcIilcbiAgLmFjdGlvbihhc3luYyAoZXZlbnQ6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IGNvbmZpZyA9IGxvYWRDb25maWcoKTtcblxuICAgIGlmICghY29uZmlnKSB7XG4gICAgICAvLyBFeGl0IHNpbGVudGx5IGlmIG5vdCBjb25maWd1cmVkIChkb24ndCBibG9jayBDbGF1ZGUgQ29kZSlcbiAgICAgIHByb2Nlc3MuZXhpdCgwKTtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlnLmF1dG9TeW5jID09PSBmYWxzZSkge1xuICAgICAgcHJvY2Vzcy5leGl0KDApO1xuICAgIH1cblxuICAgIC8vIFJlYWQgSlNPTiBpbnB1dCBmcm9tIHN0ZGluXG4gICAgbGV0IGlucHV0ID0gXCJcIjtcbiAgICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIHByb2Nlc3Muc3RkaW4pIHtcbiAgICAgIGlucHV0ICs9IGNodW5rO1xuICAgIH1cblxuICAgIGlmICghaW5wdXQudHJpbSgpKSB7XG4gICAgICBwcm9jZXNzLmV4aXQoMCk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IG5ldyBTeW5jQ2xpZW50KGNvbmZpZyk7XG4gICAgICBjb25zdCBzZXNzaW9uU3RhdGUgPSBsb2FkU2Vzc2lvblN0YXRlKCk7XG5cbiAgICAgIHN3aXRjaCAoZXZlbnQpIHtcbiAgICAgICAgY2FzZSBcIlNlc3Npb25TdGFydFwiOiB7XG4gICAgICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoaW5wdXQpIGFzIEhvb2tTZXNzaW9uU3RhcnREYXRhO1xuXG4gICAgICAgICAgLy8gUGFyc2UgdHJhbnNjcmlwdCBpZiBhdmFpbGFibGUgdG8gZ2V0IGluaXRpYWwgaW5mb1xuICAgICAgICAgIGxldCBzdGF0czogVHJhbnNjcmlwdFN0YXRzIHwgdW5kZWZpbmVkO1xuICAgICAgICAgIGlmIChkYXRhLnRyYW5zY3JpcHRfcGF0aCAmJiBmcy5leGlzdHNTeW5jKGRhdGEudHJhbnNjcmlwdF9wYXRoKSkge1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gcGFyc2VUcmFuc2NyaXB0RmlsZShkYXRhLnRyYW5zY3JpcHRfcGF0aCk7XG4gICAgICAgICAgICBzdGF0cyA9IHBhcnNlZC5zdGF0cztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBjd2QgPSBzdGF0cz8uY3dkIHx8IGRhdGEuY3dkO1xuICAgICAgICAgIGNvbnN0IHN0YXJ0ZWRBdCA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcbiAgICAgICAgICBcbiAgICAgICAgICAvLyBJbml0aWFsaXplIHNlc3Npb24gc3RhdGVcbiAgICAgICAgICBzZXNzaW9uU3RhdGVbZGF0YS5zZXNzaW9uX2lkXSA9IHtcbiAgICAgICAgICAgIG1vZGVsOiBzdGF0cz8ubW9kZWwgfHwgZGF0YS5tb2RlbCxcbiAgICAgICAgICAgIHRva2VuVXNhZ2U6IHsgaW5wdXQ6IDAsIG91dHB1dDogMCB9LFxuICAgICAgICAgICAgY2FjaGVDcmVhdGlvblRva2VuczogMCxcbiAgICAgICAgICAgIGNhY2hlUmVhZFRva2VuczogMCxcbiAgICAgICAgICAgIG1lc3NhZ2VDb3VudDogMCxcbiAgICAgICAgICAgIHRvb2xDYWxsQ291bnQ6IDAsXG4gICAgICAgICAgICBzdGFydGVkQXQsXG4gICAgICAgICAgICB0aXRsZTogc3RhdHM/LnRpdGxlLFxuICAgICAgICAgICAgY3dkLFxuICAgICAgICAgIH07XG4gICAgICAgICAgc2F2ZVNlc3Npb25TdGF0ZShzZXNzaW9uU3RhdGUpO1xuICAgICAgICAgIFxuICAgICAgICAgIGNvbnN0IHNlc3Npb246IFNlc3Npb25EYXRhID0ge1xuICAgICAgICAgICAgc2Vzc2lvbklkOiBkYXRhLnNlc3Npb25faWQsXG4gICAgICAgICAgICBzb3VyY2U6IFwiY2xhdWRlLWNvZGVcIixcbiAgICAgICAgICAgIGN3ZCxcbiAgICAgICAgICAgIG1vZGVsOiBzdGF0cz8ubW9kZWwgfHwgZGF0YS5tb2RlbCxcbiAgICAgICAgICAgIHRpdGxlOiBzdGF0cz8udGl0bGUsXG4gICAgICAgICAgICBwZXJtaXNzaW9uTW9kZTogZGF0YS5wZXJtaXNzaW9uX21vZGUsXG4gICAgICAgICAgICB0aGlua2luZ0VuYWJsZWQ6IGRhdGEudGhpbmtpbmdfZW5hYmxlZCxcbiAgICAgICAgICAgIG1jcFNlcnZlcnM6IGRhdGEubWNwX3NlcnZlcnMsXG4gICAgICAgICAgICBzdGFydFR5cGU6IGRhdGEuc291cmNlID09PSBcInN0YXJ0dXBcIiA/IFwibmV3XCIgOiAoZGF0YS5zb3VyY2UgYXMgU2Vzc2lvbkRhdGFbXCJzdGFydFR5cGVcIl0pLFxuICAgICAgICAgICAgc3RhcnRlZEF0LFxuICAgICAgICAgICAgcHJvamVjdFBhdGg6IGN3ZCxcbiAgICAgICAgICAgIHByb2plY3ROYW1lOiBjd2QgPyBwYXRoLmJhc2VuYW1lKGN3ZCkgOiB1bmRlZmluZWQsXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIC8vIFRyeSB0byBnZXQgZ2l0IGJyYW5jaCBmcm9tIGN3ZFxuICAgICAgICAgIGlmIChjd2QpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbnN0IGdpdERpciA9IHBhdGguam9pbihjd2QsIFwiLmdpdFwiKTtcbiAgICAgICAgICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoZ2l0RGlyKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGhlYWRGaWxlID0gcGF0aC5qb2luKGdpdERpciwgXCJIRUFEXCIpO1xuICAgICAgICAgICAgICAgIGlmIChmcy5leGlzdHNTeW5jKGhlYWRGaWxlKSkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgaGVhZCA9IGZzLnJlYWRGaWxlU3luYyhoZWFkRmlsZSwgXCJ1dGYtOFwiKS50cmltKCk7XG4gICAgICAgICAgICAgICAgICBpZiAoaGVhZC5zdGFydHNXaXRoKFwicmVmOiByZWZzL2hlYWRzL1wiKSkge1xuICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLmdpdEJyYW5jaCA9IGhlYWQucmVwbGFjZShcInJlZjogcmVmcy9oZWFkcy9cIiwgXCJcIik7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgICAgLy8gSWdub3JlIGdpdCBlcnJvcnNcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBhd2FpdCBjbGllbnQuc3luY1Nlc3Npb24oc2Vzc2lvbik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIFwiU2Vzc2lvbkVuZFwiOiB7XG4gICAgICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoaW5wdXQpIGFzIEhvb2tTZXNzaW9uRW5kRGF0YTtcbiAgICAgICAgICBjb25zdCBzdGF0ZSA9IHNlc3Npb25TdGF0ZVtkYXRhLnNlc3Npb25faWRdIHx8IHt9O1xuXG4gICAgICAgICAgLy8gUGFyc2UgdHJhbnNjcmlwdCB0byBnZXQgZmluYWwgc3RhdHMgaW5jbHVkaW5nIG1vZGVsLCB0b2tlbnMsIGNvc3RcbiAgICAgICAgICBsZXQgc3RhdHM6IFRyYW5zY3JpcHRTdGF0cyA9IHtcbiAgICAgICAgICAgIG1vZGVsOiBzdGF0ZS5tb2RlbCxcbiAgICAgICAgICAgIGlucHV0VG9rZW5zOiBzdGF0ZS50b2tlblVzYWdlPy5pbnB1dCB8fCAwLFxuICAgICAgICAgICAgY2FjaGVDcmVhdGlvblRva2Vuczogc3RhdGUuY2FjaGVDcmVhdGlvblRva2VucyB8fCAwLFxuICAgICAgICAgICAgY2FjaGVSZWFkVG9rZW5zOiBzdGF0ZS5jYWNoZVJlYWRUb2tlbnMgfHwgMCxcbiAgICAgICAgICAgIG91dHB1dFRva2Vuczogc3RhdGUudG9rZW5Vc2FnZT8ub3V0cHV0IHx8IDAsXG4gICAgICAgICAgICBtZXNzYWdlQ291bnQ6IHN0YXRlLm1lc3NhZ2VDb3VudCB8fCAwLFxuICAgICAgICAgICAgdG9vbENhbGxDb3VudDogc3RhdGUudG9vbENhbGxDb3VudCB8fCAwLFxuICAgICAgICAgICAgdGl0bGU6IHN0YXRlLnRpdGxlLFxuICAgICAgICAgICAgY3dkOiBzdGF0ZS5jd2QgfHwgZGF0YS5jd2QsXG4gICAgICAgICAgICBzdGFydGVkQXQ6IHN0YXRlLnN0YXJ0ZWRBdCxcbiAgICAgICAgICAgIGVuZGVkQXQ6IHN0YXRlLmVuZGVkQXQsXG4gICAgICAgICAgICBkdXJhdGlvbk1zOiBzdGF0ZS5kdXJhdGlvbk1zLFxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBpZiAoZGF0YS50cmFuc2NyaXB0X3BhdGggJiYgZnMuZXhpc3RzU3luYyhkYXRhLnRyYW5zY3JpcHRfcGF0aCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlVHJhbnNjcmlwdEZpbGUoZGF0YS50cmFuc2NyaXB0X3BhdGgpO1xuICAgICAgICAgICAgc3RhdHMgPSBwYXJzZWQuc3RhdHM7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gQ2FsY3VsYXRlIGNvc3QgZnJvbSB0b2tlbnMgKHdpdGggcHJvcGVyIGNhY2hlIHByaWNpbmcpXG4gICAgICAgICAgbGV0IGNvc3QgPSBkYXRhLmNvc3RfZXN0aW1hdGU7XG4gICAgICAgICAgaWYgKChjb3N0ID09PSB1bmRlZmluZWQgfHwgY29zdCA9PT0gbnVsbCB8fCBjb3N0ID09PSAwKSAmJiBzdGF0cy5tb2RlbCkge1xuICAgICAgICAgICAgaWYgKHN0YXRzLmlucHV0VG9rZW5zIHx8IHN0YXRzLm91dHB1dFRva2VucyB8fCBzdGF0cy5jYWNoZVJlYWRUb2tlbnMgfHwgc3RhdHMuY2FjaGVDcmVhdGlvblRva2Vucykge1xuICAgICAgICAgICAgICBjb3N0ID0gY2FsY3VsYXRlQ29zdChzdGF0cy5tb2RlbCwgc3RhdHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGN3ZCA9IHN0YXRzLmN3ZCB8fCBkYXRhLmN3ZDtcbiAgICAgICAgICBjb25zdCB0b3RhbElucHV0VG9rZW5zID0gc3RhdHMuaW5wdXRUb2tlbnMgKyBzdGF0cy5jYWNoZUNyZWF0aW9uVG9rZW5zICsgc3RhdHMuY2FjaGVSZWFkVG9rZW5zO1xuICAgICAgICAgIGNvbnN0IGVuZGVkQXQgPSBzdGF0cy5lbmRlZEF0IHx8IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcblxuICAgICAgICAgIGNvbnN0IHNlc3Npb246IFNlc3Npb25EYXRhID0ge1xuICAgICAgICAgICAgc2Vzc2lvbklkOiBkYXRhLnNlc3Npb25faWQsXG4gICAgICAgICAgICBzb3VyY2U6IFwiY2xhdWRlLWNvZGVcIixcbiAgICAgICAgICAgIG1vZGVsOiBzdGF0cy5tb2RlbCxcbiAgICAgICAgICAgIHRpdGxlOiBzdGF0cy50aXRsZSB8fCAoc3RhdGUuZmlyc3RQcm9tcHQgPyBnZW5lcmF0ZVRpdGxlKHN0YXRlLmZpcnN0UHJvbXB0KSA6IHVuZGVmaW5lZCksXG4gICAgICAgICAgICBjd2QsXG4gICAgICAgICAgICBwcm9qZWN0UGF0aDogY3dkLFxuICAgICAgICAgICAgcHJvamVjdE5hbWU6IGN3ZCA/IHBhdGguYmFzZW5hbWUoY3dkKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGVuZFJlYXNvbjogZGF0YS5yZWFzb24sXG4gICAgICAgICAgICBtZXNzYWdlQ291bnQ6IGRhdGEubWVzc2FnZV9jb3VudCB8fCBzdGF0cy5tZXNzYWdlQ291bnQsXG4gICAgICAgICAgICB0b29sQ2FsbENvdW50OiBkYXRhLnRvb2xfY2FsbF9jb3VudCB8fCBzdGF0cy50b29sQ2FsbENvdW50LFxuICAgICAgICAgICAgdG9rZW5Vc2FnZToge1xuICAgICAgICAgICAgICBpbnB1dDogdG90YWxJbnB1dFRva2VucyxcbiAgICAgICAgICAgICAgb3V0cHV0OiBzdGF0cy5vdXRwdXRUb2tlbnMsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29zdEVzdGltYXRlOiBjb3N0LFxuICAgICAgICAgICAgc3RhcnRlZEF0OiBzdGF0cy5zdGFydGVkQXQsXG4gICAgICAgICAgICBlbmRlZEF0LFxuICAgICAgICAgIH07XG4gICAgICAgICAgYXdhaXQgY2xpZW50LnN5bmNTZXNzaW9uKHNlc3Npb24pO1xuICAgICAgICAgIFxuICAgICAgICAgIC8vIENsZWFuIHVwIHNlc3Npb24gc3RhdGVcbiAgICAgICAgICBkZWxldGUgc2Vzc2lvblN0YXRlW2RhdGEuc2Vzc2lvbl9pZF07XG4gICAgICAgICAgc2F2ZVNlc3Npb25TdGF0ZShzZXNzaW9uU3RhdGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBcIlVzZXJQcm9tcHRTdWJtaXRcIjoge1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKGlucHV0KSBhcyBIb29rVXNlclByb21wdERhdGE7XG4gICAgICAgICAgY29uc3Qgc3RhdGUgPSBzZXNzaW9uU3RhdGVbZGF0YS5zZXNzaW9uX2lkXSB8fCB7fTtcbiAgICAgICAgICBcbiAgICAgICAgICAvLyBUcmFjayBmaXJzdCBwcm9tcHQgZm9yIHRpdGxlIGdlbmVyYXRpb25cbiAgICAgICAgICBpZiAoIXN0YXRlLmZpcnN0UHJvbXB0KSB7XG4gICAgICAgICAgICBzdGF0ZS5maXJzdFByb21wdCA9IGRhdGEucHJvbXB0O1xuICAgICAgICAgICAgc2Vzc2lvblN0YXRlW2RhdGEuc2Vzc2lvbl9pZF0gPSBzdGF0ZTtcbiAgICAgICAgICAgIHNhdmVTZXNzaW9uU3RhdGUoc2Vzc2lvblN0YXRlKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gVXBkYXRlIHNlc3Npb24gd2l0aCB0aXRsZVxuICAgICAgICAgICAgY29uc3Qgc2Vzc2lvbjogU2Vzc2lvbkRhdGEgPSB7XG4gICAgICAgICAgICAgIHNlc3Npb25JZDogZGF0YS5zZXNzaW9uX2lkLFxuICAgICAgICAgICAgICBzb3VyY2U6IFwiY2xhdWRlLWNvZGVcIixcbiAgICAgICAgICAgICAgdGl0bGU6IGdlbmVyYXRlVGl0bGUoZGF0YS5wcm9tcHQpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGF3YWl0IGNsaWVudC5zeW5jU2Vzc2lvbihzZXNzaW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gSW5jcmVtZW50IG1lc3NhZ2UgY291bnRcbiAgICAgICAgICBzdGF0ZS5tZXNzYWdlQ291bnQgPSAoc3RhdGUubWVzc2FnZUNvdW50IHx8IDApICsgMTtcbiAgICAgICAgICBzZXNzaW9uU3RhdGVbZGF0YS5zZXNzaW9uX2lkXSA9IHN0YXRlO1xuICAgICAgICAgIHNhdmVTZXNzaW9uU3RhdGUoc2Vzc2lvblN0YXRlKTtcbiAgICAgICAgICBcbiAgICAgICAgICBjb25zdCBtZXNzYWdlOiBNZXNzYWdlRGF0YSA9IHtcbiAgICAgICAgICAgIHNlc3Npb25JZDogZGF0YS5zZXNzaW9uX2lkLFxuICAgICAgICAgICAgbWVzc2FnZUlkOiBgJHtkYXRhLnNlc3Npb25faWR9LXVzZXItJHtEYXRlLm5vdygpfWAsXG4gICAgICAgICAgICBzb3VyY2U6IFwiY2xhdWRlLWNvZGVcIixcbiAgICAgICAgICAgIHJvbGU6IFwidXNlclwiLFxuICAgICAgICAgICAgY29udGVudDogZGF0YS5wcm9tcHQsXG4gICAgICAgICAgICB0aW1lc3RhbXA6IGRhdGEudGltZXN0YW1wIHx8IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIGF3YWl0IGNsaWVudC5zeW5jTWVzc2FnZShtZXNzYWdlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgXCJQb3N0VG9vbFVzZVwiOiB7XG4gICAgICAgICAgaWYgKCFjb25maWcuc3luY1Rvb2xDYWxscykgYnJlYWs7XG4gICAgICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoaW5wdXQpIGFzIEhvb2tUb29sVXNlRGF0YTtcbiAgICAgICAgICBjb25zdCBzdGF0ZSA9IHNlc3Npb25TdGF0ZVtkYXRhLnNlc3Npb25faWRdIHx8IHt9O1xuICAgICAgICAgIFxuICAgICAgICAgIGNvbnN0IG1lc3NhZ2U6IE1lc3NhZ2VEYXRhID0ge1xuICAgICAgICAgICAgc2Vzc2lvbklkOiBkYXRhLnNlc3Npb25faWQsXG4gICAgICAgICAgICBtZXNzYWdlSWQ6IGRhdGEudG9vbF91c2VfaWQgfHwgYCR7ZGF0YS5zZXNzaW9uX2lkfS10b29sLSR7RGF0ZS5ub3coKX1gLFxuICAgICAgICAgICAgc291cmNlOiBcImNsYXVkZS1jb2RlXCIsXG4gICAgICAgICAgICByb2xlOiBcImFzc2lzdGFudFwiLFxuICAgICAgICAgICAgdG9vbE5hbWU6IGRhdGEudG9vbF9uYW1lLFxuICAgICAgICAgICAgdG9vbEFyZ3M6IGRhdGEudG9vbF9pbnB1dCxcbiAgICAgICAgICAgIHRvb2xSZXN1bHQ6IGRhdGEudG9vbF9yZXN1bHQ/Lm91dHB1dCB8fCBkYXRhLnRvb2xfcmVzdWx0Py5lcnJvcixcbiAgICAgICAgICAgIGR1cmF0aW9uTXM6IGRhdGEuZHVyYXRpb25fbXMsXG4gICAgICAgICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIGF3YWl0IGNsaWVudC5zeW5jTWVzc2FnZShtZXNzYWdlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgXCJTdG9wXCI6IHtcbiAgICAgICAgICAvLyBTdG9wIGV2ZW50IHByb3ZpZGVzIHRyYW5zY3JpcHRfcGF0aCAtIHdlIHJlYWQgaXQgdG8gZ2V0IG1lc3NhZ2VzIGFuZCB0b2tlbnNcbiAgICAgICAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShpbnB1dCkgYXMgSG9va1N0b3BEYXRhO1xuICAgICAgICAgIGNvbnN0IHN0YXRlID0gc2Vzc2lvblN0YXRlW2RhdGEuc2Vzc2lvbl9pZF0gfHwge307XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gUGFyc2UgdHJhbnNjcmlwdCBmaWxlIHRvIGV4dHJhY3QgYXNzaXN0YW50IG1lc3NhZ2VzIGFuZCB0b2tlbiB1c2FnZVxuICAgICAgICAgIGlmIChkYXRhLnRyYW5zY3JpcHRfcGF0aCkge1xuICAgICAgICAgICAgY29uc3QgdHJhbnNjcmlwdCA9IHBhcnNlVHJhbnNjcmlwdEZpbGUoZGF0YS50cmFuc2NyaXB0X3BhdGgpO1xuICAgICAgICAgICAgY29uc3QgeyBzdGF0cyB9ID0gdHJhbnNjcmlwdDtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gVXBkYXRlIHRva2VuIHVzYWdlIGZyb20gdHJhbnNjcmlwdCAodHJhY2sgY2FjaGUgdG9rZW5zIHNlcGFyYXRlbHkpXG4gICAgICAgICAgICBpZiAoc3RhdHMuaW5wdXRUb2tlbnMgPiAwIHx8IHN0YXRzLm91dHB1dFRva2VucyA+IDAgfHwgc3RhdHMuY2FjaGVSZWFkVG9rZW5zID4gMCkge1xuICAgICAgICAgICAgICBjb25zdCB0b3RhbElucHV0ID0gc3RhdHMuaW5wdXRUb2tlbnMgKyBzdGF0cy5jYWNoZUNyZWF0aW9uVG9rZW5zICsgc3RhdHMuY2FjaGVSZWFkVG9rZW5zO1xuICAgICAgICAgICAgICBzdGF0ZS50b2tlblVzYWdlID0geyBpbnB1dDogdG90YWxJbnB1dCwgb3V0cHV0OiBzdGF0cy5vdXRwdXRUb2tlbnMgfTtcbiAgICAgICAgICAgICAgc3RhdGUuY2FjaGVDcmVhdGlvblRva2VucyA9IHN0YXRzLmNhY2hlQ3JlYXRpb25Ub2tlbnM7XG4gICAgICAgICAgICAgIHN0YXRlLmNhY2hlUmVhZFRva2VucyA9IHN0YXRzLmNhY2hlUmVhZFRva2VucztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gVXBkYXRlIG1vZGVsIGlmIGZvdW5kXG4gICAgICAgICAgICBpZiAoc3RhdHMubW9kZWwgJiYgIXN0YXRlLm1vZGVsKSB7XG4gICAgICAgICAgICAgIHN0YXRlLm1vZGVsID0gc3RhdHMubW9kZWw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFVwZGF0ZSB0aXRsZSBpZiBmb3VuZCBmcm9tIHRyYW5zY3JpcHQgc2x1Z1xuICAgICAgICAgICAgaWYgKHN0YXRzLnRpdGxlICYmICFzdGF0ZS50aXRsZSkge1xuICAgICAgICAgICAgICBzdGF0ZS50aXRsZSA9IHN0YXRzLnRpdGxlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBVcGRhdGUgZHVyYXRpb24gaW5mb1xuICAgICAgICAgICAgaWYgKHN0YXRzLnN0YXJ0ZWRBdCkgc3RhdGUuc3RhcnRlZEF0ID0gc3RhdHMuc3RhcnRlZEF0O1xuICAgICAgICAgICAgaWYgKHN0YXRzLmVuZGVkQXQpIHN0YXRlLmVuZGVkQXQgPSBzdGF0cy5lbmRlZEF0O1xuICAgICAgICAgICAgaWYgKHN0YXRzLmR1cmF0aW9uTXMpIHN0YXRlLmR1cmF0aW9uTXMgPSBzdGF0cy5kdXJhdGlvbk1zO1xuXG4gICAgICAgICAgICAvLyBVcGRhdGUgdG9vbCBjYWxsIGNvdW50XG4gICAgICAgICAgICBpZiAoc3RhdHMudG9vbENhbGxDb3VudCA+IDApIHtcbiAgICAgICAgICAgICAgc3RhdGUudG9vbENhbGxDb3VudCA9IHN0YXRzLnRvb2xDYWxsQ291bnQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIENhbGN1bGF0ZSBjb3N0IGlmIHdlIGhhdmUgbW9kZWwgYW5kIHRva2Vuc1xuICAgICAgICAgICAgaWYgKHN0YXRzLm1vZGVsICYmIChzdGF0cy5pbnB1dFRva2VucyB8fCBzdGF0cy5vdXRwdXRUb2tlbnMgfHwgc3RhdHMuY2FjaGVSZWFkVG9rZW5zKSkge1xuICAgICAgICAgICAgICBzdGF0ZS5jb3N0RXN0aW1hdGUgPSBjYWxjdWxhdGVDb3N0KHN0YXRzLm1vZGVsLCBzdGF0cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIFRyYWNrIHdoaWNoIG1lc3NhZ2VzIHdlJ3ZlIGFscmVhZHkgc3luY2VkIHRvIGF2b2lkIGR1cGxpY2F0ZXNcbiAgICAgICAgICAgIGNvbnN0IHN5bmNlZE1lc3NhZ2VzID0gc3RhdGUuc3luY2VkTWVzc2FnZVV1aWRzIGluc3RhbmNlb2YgU2V0XG4gICAgICAgICAgICAgID8gc3RhdGUuc3luY2VkTWVzc2FnZVV1aWRzXG4gICAgICAgICAgICAgIDogbmV3IFNldDxzdHJpbmc+KEFycmF5LmlzQXJyYXkoc3RhdGUuc3luY2VkTWVzc2FnZVV1aWRzKSA/IHN0YXRlLnN5bmNlZE1lc3NhZ2VVdWlkcyA6IFtdKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gU3luYyBuZXcgYXNzaXN0YW50IG1lc3NhZ2VzXG4gICAgICAgICAgICBmb3IgKGNvbnN0IG1zZyBvZiB0cmFuc2NyaXB0LmFzc2lzdGFudE1lc3NhZ2VzKSB7XG4gICAgICAgICAgICAgIC8vIFNraXAgaWYgd2UndmUgYWxyZWFkeSBzeW5jZWQgdGhpcyBtZXNzYWdlXG4gICAgICAgICAgICAgIGlmIChtc2cudXVpZCAmJiBzeW5jZWRNZXNzYWdlcy5oYXMobXNnLnV1aWQpKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgaWYgKG1zZy51dWlkKSBzeW5jZWRNZXNzYWdlcy5hZGQobXNnLnV1aWQpO1xuICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgLy8gSW5jcmVtZW50IG1lc3NhZ2UgY291bnRcbiAgICAgICAgICAgICAgc3RhdGUubWVzc2FnZUNvdW50ID0gKHN0YXRlLm1lc3NhZ2VDb3VudCB8fCAwKSArIDE7XG4gICAgICAgICAgICAgIFxuICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlOiBNZXNzYWdlRGF0YSA9IHtcbiAgICAgICAgICAgICAgICBzZXNzaW9uSWQ6IGRhdGEuc2Vzc2lvbl9pZCxcbiAgICAgICAgICAgICAgICBtZXNzYWdlSWQ6IG1zZy51dWlkIHx8IGAke2RhdGEuc2Vzc2lvbl9pZH0tYXNzaXN0YW50LSR7RGF0ZS5ub3coKX1gLFxuICAgICAgICAgICAgICAgIHNvdXJjZTogXCJjbGF1ZGUtY29kZVwiLFxuICAgICAgICAgICAgICAgIHJvbGU6IFwiYXNzaXN0YW50XCIsXG4gICAgICAgICAgICAgICAgY29udGVudDogbXNnLnRleHQsXG4gICAgICAgICAgICAgICAgbW9kZWw6IG1zZy5tb2RlbCxcbiAgICAgICAgICAgICAgICB0aW1lc3RhbXA6IG1zZy50aW1lc3RhbXAsXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIGF3YWl0IGNsaWVudC5zeW5jTWVzc2FnZShtZXNzYWdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gU3RvcmUgc3luY2VkIG1lc3NhZ2UgVVVJRHMgKGNvbnZlcnQgU2V0IHRvIGFycmF5IGZvciBKU09OKVxuICAgICAgICAgICAgc3RhdGUuc3luY2VkTWVzc2FnZVV1aWRzID0gc3luY2VkTWVzc2FnZXM7XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIHNlc3Npb25TdGF0ZVtkYXRhLnNlc3Npb25faWRdID0gc3RhdGU7XG4gICAgICAgICAgc2F2ZVNlc3Npb25TdGF0ZShzZXNzaW9uU3RhdGUpO1xuICAgICAgICAgIFxuICAgICAgICAgIC8vIFVwZGF0ZSBzZXNzaW9uIHdpdGggdG9rZW4gdXNhZ2UsIG1vZGVsLCBhbmQgY29zdCBmcm9tIHRyYW5zY3JpcHRcbiAgICAgICAgICBjb25zdCBzZXNzaW9uOiBTZXNzaW9uRGF0YSA9IHtcbiAgICAgICAgICAgIHNlc3Npb25JZDogZGF0YS5zZXNzaW9uX2lkLFxuICAgICAgICAgICAgc291cmNlOiBcImNsYXVkZS1jb2RlXCIsXG4gICAgICAgICAgICBtb2RlbDogc3RhdGUubW9kZWwsXG4gICAgICAgICAgICB0b2tlblVzYWdlOiBzdGF0ZS50b2tlblVzYWdlLFxuICAgICAgICAgICAgbWVzc2FnZUNvdW50OiBzdGF0ZS5tZXNzYWdlQ291bnQsXG4gICAgICAgICAgICB0b29sQ2FsbENvdW50OiBzdGF0ZS50b29sQ2FsbENvdW50LFxuICAgICAgICAgICAgY29zdEVzdGltYXRlOiBzdGF0ZS5jb3N0RXN0aW1hdGUsXG4gICAgICAgICAgfTtcbiAgICAgICAgICBhd2FpdCBjbGllbnQuc3luY1Nlc3Npb24oc2Vzc2lvbik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIC8vIFVua25vd24gZXZlbnQsIGlnbm9yZVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBwcm9jZXNzLmV4aXQoMCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIExvZyB0byBzdGRlcnIgYnV0IGRvbid0IGJsb2NrIENsYXVkZSBDb2RlXG4gICAgICBjb25zb2xlLmVycm9yKGBbY2xhdWRlLWNvZGUtc3luY10gRXJyb3I6ICR7ZXJyb3J9YCk7XG4gICAgICBwcm9jZXNzLmV4aXQoMCk7XG4gICAgfVxuICB9KTtcblxuLy8gUGFyc2UgYW5kIHJ1blxucHJvZ3JhbS5wYXJzZSgpO1xuIl19
|