circuit-json-to-spice 0.0.30 → 0.0.31
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/index.js
CHANGED
|
@@ -145,6 +145,29 @@ var VoltageSourceCommand = class {
|
|
|
145
145
|
}
|
|
146
146
|
};
|
|
147
147
|
|
|
148
|
+
// lib/spice-commands/CurrentSourceCommand.ts
|
|
149
|
+
var CurrentSourceCommand = class {
|
|
150
|
+
commandName = "current_source";
|
|
151
|
+
props;
|
|
152
|
+
constructor(props) {
|
|
153
|
+
this.props = props;
|
|
154
|
+
}
|
|
155
|
+
toSpiceString() {
|
|
156
|
+
const { name, positiveNode, negativeNode, value, acMagnitude, acPhase } = this.props;
|
|
157
|
+
let spiceString = `I${name} ${positiveNode} ${negativeNode}`;
|
|
158
|
+
if (value) {
|
|
159
|
+
spiceString += ` ${value}`;
|
|
160
|
+
}
|
|
161
|
+
if (acMagnitude) {
|
|
162
|
+
spiceString += ` AC ${acMagnitude}`;
|
|
163
|
+
if (acPhase) {
|
|
164
|
+
spiceString += ` ${acPhase}`;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
return spiceString;
|
|
168
|
+
}
|
|
169
|
+
};
|
|
170
|
+
|
|
148
171
|
// lib/spice-commands/BJTCommand.ts
|
|
149
172
|
var BJTCommand = class {
|
|
150
173
|
commandName = "bjt";
|
|
@@ -692,6 +715,77 @@ function circuitJsonToSpice(circuitJson) {
|
|
|
692
715
|
}
|
|
693
716
|
}
|
|
694
717
|
}
|
|
718
|
+
for (const simSource of su(circuitJson).simulation_current_source.list()) {
|
|
719
|
+
if (simSource.type !== "simulation_current_source") continue;
|
|
720
|
+
if (simSource.is_dc_source === false) {
|
|
721
|
+
const positivePortId = simSource.terminal1_source_port_id;
|
|
722
|
+
const negativePortId = simSource.terminal2_source_port_id;
|
|
723
|
+
if (positivePortId && negativePortId) {
|
|
724
|
+
const positiveNode = nodeMap.get(positivePortId) || "0";
|
|
725
|
+
const negativeNode = nodeMap.get(negativePortId) || "0";
|
|
726
|
+
let value = "";
|
|
727
|
+
const wave_shape = simSource.wave_shape;
|
|
728
|
+
if (wave_shape === "sinewave") {
|
|
729
|
+
const i_offset = 0;
|
|
730
|
+
const i_peak = (simSource.peak_to_peak_current ?? 0) / 2;
|
|
731
|
+
const freq = simSource.frequency ?? 0;
|
|
732
|
+
const delay = 0;
|
|
733
|
+
const damping_factor = 0;
|
|
734
|
+
const phase = simSource.phase ?? 0;
|
|
735
|
+
if (freq > 0) {
|
|
736
|
+
value = `SIN(${i_offset} ${i_peak} ${freq} ${delay} ${damping_factor} ${phase})`;
|
|
737
|
+
} else {
|
|
738
|
+
value = `DC ${i_peak}`;
|
|
739
|
+
}
|
|
740
|
+
} else if (wave_shape === "square") {
|
|
741
|
+
const i_initial = 0;
|
|
742
|
+
const i_pulsed = simSource.peak_to_peak_current ?? 0;
|
|
743
|
+
const freq = simSource.frequency ?? 0;
|
|
744
|
+
const period_from_freq = freq === 0 ? Infinity : 1 / freq;
|
|
745
|
+
const period = simSource.period ?? period_from_freq;
|
|
746
|
+
const duty_cycle = simSource.duty_cycle ?? 0.5;
|
|
747
|
+
const pulse_width = period * duty_cycle;
|
|
748
|
+
const delay = 0;
|
|
749
|
+
const rise_time = "1n";
|
|
750
|
+
const fall_time = "1n";
|
|
751
|
+
value = `PULSE(${i_initial} ${i_pulsed} ${delay} ${rise_time} ${fall_time} ${pulse_width} ${period})`;
|
|
752
|
+
}
|
|
753
|
+
if (value) {
|
|
754
|
+
const currentSourceCmd = new CurrentSourceCommand({
|
|
755
|
+
name: simSource.simulation_current_source_id,
|
|
756
|
+
positiveNode,
|
|
757
|
+
negativeNode,
|
|
758
|
+
value
|
|
759
|
+
});
|
|
760
|
+
const spiceComponent = new SpiceComponent(
|
|
761
|
+
simSource.simulation_current_source_id,
|
|
762
|
+
currentSourceCmd,
|
|
763
|
+
[positiveNode, negativeNode]
|
|
764
|
+
);
|
|
765
|
+
netlist.addComponent(spiceComponent);
|
|
766
|
+
}
|
|
767
|
+
}
|
|
768
|
+
} else {
|
|
769
|
+
const positivePortId = simSource.positive_source_port_id;
|
|
770
|
+
const negativePortId = simSource.negative_source_port_id;
|
|
771
|
+
if (positivePortId && negativePortId && "current" in simSource && simSource.current !== void 0) {
|
|
772
|
+
const positiveNode = nodeMap.get(positivePortId) || "0";
|
|
773
|
+
const negativeNode = nodeMap.get(negativePortId) || "0";
|
|
774
|
+
const currentSourceCmd = new CurrentSourceCommand({
|
|
775
|
+
name: simSource.simulation_current_source_id,
|
|
776
|
+
positiveNode,
|
|
777
|
+
negativeNode,
|
|
778
|
+
value: `DC ${simSource.current}`
|
|
779
|
+
});
|
|
780
|
+
const spiceComponent = new SpiceComponent(
|
|
781
|
+
simSource.simulation_current_source_id,
|
|
782
|
+
currentSourceCmd,
|
|
783
|
+
[positiveNode, negativeNode]
|
|
784
|
+
);
|
|
785
|
+
netlist.addComponent(spiceComponent);
|
|
786
|
+
}
|
|
787
|
+
}
|
|
788
|
+
}
|
|
695
789
|
const simExperiment = circuitJson.find(
|
|
696
790
|
(elm) => elm.type === "simulation_experiment"
|
|
697
791
|
);
|
|
@@ -844,29 +938,6 @@ var SpiceSubcircuit = class {
|
|
|
844
938
|
}
|
|
845
939
|
};
|
|
846
940
|
|
|
847
|
-
// lib/spice-commands/CurrentSourceCommand.ts
|
|
848
|
-
var CurrentSourceCommand = class {
|
|
849
|
-
commandName = "current_source";
|
|
850
|
-
props;
|
|
851
|
-
constructor(props) {
|
|
852
|
-
this.props = props;
|
|
853
|
-
}
|
|
854
|
-
toSpiceString() {
|
|
855
|
-
const { name, positiveNode, negativeNode, value, acMagnitude, acPhase } = this.props;
|
|
856
|
-
let spiceString = `I${name} ${positiveNode} ${negativeNode}`;
|
|
857
|
-
if (value) {
|
|
858
|
-
spiceString += ` ${value}`;
|
|
859
|
-
}
|
|
860
|
-
if (acMagnitude) {
|
|
861
|
-
spiceString += ` AC ${acMagnitude}`;
|
|
862
|
-
if (acPhase) {
|
|
863
|
-
spiceString += ` ${acPhase}`;
|
|
864
|
-
}
|
|
865
|
-
}
|
|
866
|
-
return spiceString;
|
|
867
|
-
}
|
|
868
|
-
};
|
|
869
|
-
|
|
870
941
|
// lib/spice-commands/InductorCouplingCommand.ts
|
|
871
942
|
var InductorCouplingCommand = class {
|
|
872
943
|
commandName = "inductor_coupling";
|
|
@@ -961,4 +1032,4 @@ export {
|
|
|
961
1032
|
circuitJsonToSpice,
|
|
962
1033
|
convertSpiceNetlistToString
|
|
963
1034
|
};
|
|
964
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vbGliL3NwaWNlLXV0aWxzL2NvbnZlcnRTcGljZU5ldGxpc3RUb1N0cmluZy50cyIsICIuLi9saWIvc3BpY2UtY2xhc3Nlcy9TcGljZU5ldGxpc3QudHMiLCAiLi4vbGliL3NwaWNlLWNsYXNzZXMvU3BpY2VDb21wb25lbnQudHMiLCAiLi4vbGliL3NwaWNlLWNvbW1hbmRzL1Jlc2lzdG9yQ29tbWFuZC50cyIsICIuLi9saWIvc3BpY2UtY29tbWFuZHMvQ2FwYWNpdG9yQ29tbWFuZC50cyIsICIuLi9saWIvc3BpY2UtY29tbWFuZHMvVm9sdGFnZVNvdXJjZUNvbW1hbmQudHMiLCAiLi4vbGliL3NwaWNlLWNvbW1hbmRzL0JKVENvbW1hbmQudHMiLCAiLi4vbGliL3NwaWNlLWNvbW1hbmRzL0Rpb2RlQ29tbWFuZC50cyIsICIuLi9saWIvc3BpY2UtY29tbWFuZHMvSW5kdWN0b3JDb21tYW5kLnRzIiwgIi4uL2xpYi9zcGljZS1jb21tYW5kcy9NT1NGRVRDb21tYW5kLnRzIiwgIi4uL2xpYi9zcGljZS1jb21tYW5kcy9Wb2x0YWdlQ29udHJvbGxlZFN3aXRjaENvbW1hbmQudHMiLCAiLi4vbGliL2NpcmN1aXRKc29uVG9TcGljZS50cyIsICIuLi9saWIvc3BpY2UtY2xhc3Nlcy9TcGljZVN1YmNpcmN1aXQudHMiLCAiLi4vbGliL3NwaWNlLWNvbW1hbmRzL0N1cnJlbnRTb3VyY2VDb21tYW5kLnRzIiwgIi4uL2xpYi9zcGljZS1jb21tYW5kcy9JbmR1Y3RvckNvdXBsaW5nQ29tbWFuZC50cyIsICIuLi9saWIvc3BpY2UtY29tbWFuZHMvSkZFVENvbW1hbmQudHMiLCAiLi4vbGliL3NwaWNlLWNvbW1hbmRzL1N1YmNpcmN1aXRDYWxsQ29tbWFuZC50cyIsICIuLi9saWIvc3BpY2UtY29tbWFuZHMvVHJhbnNtaXNzaW9uTGluZUNvbW1hbmQudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB0eXBlIHsgU3BpY2VOZXRsaXN0IH0gZnJvbSBcIi4uL3NwaWNlLWNsYXNzZXMvU3BpY2VOZXRsaXN0XCJcblxuZXhwb3J0IGNvbnN0IGNvbnZlcnRTcGljZU5ldGxpc3RUb1N0cmluZyA9IChuZXRsaXN0OiBTcGljZU5ldGxpc3QpOiBzdHJpbmcgPT4ge1xuICBjb25zdCBsaW5lczogc3RyaW5nW10gPSBbXVxuXG4gIC8vIFRpdGxlIGxpbmUgKHJlcXVpcmVkIGZpcnN0IGxpbmUgaW4gU1BJQ0UpXG4gIGxpbmVzLnB1c2gobmV0bGlzdC50aXRsZSlcblxuICAvLyBBZGQgbW9kZWxzXG4gIGlmIChuZXRsaXN0Lm1vZGVscy5zaXplID4gMCkge1xuICAgIGxpbmVzLnB1c2goLi4uQXJyYXkuZnJvbShuZXRsaXN0Lm1vZGVscy52YWx1ZXMoKSkpXG4gIH1cblxuICAvLyBDb21wb25lbnQgbGluZXNcbiAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgbmV0bGlzdC5jb21wb25lbnRzKSB7XG4gICAgbGluZXMucHVzaChjb21wb25lbnQudG9TcGljZVN0cmluZygpKVxuICB9XG5cbiAgLy8gQWRkIHN1YmNpcmN1aXQgZGVmaW5pdGlvbnNcbiAgZm9yIChjb25zdCBzdWJjaXJjdWl0IG9mIG5ldGxpc3Quc3ViY2lyY3VpdHMpIHtcbiAgICBsaW5lcy5wdXNoKHN1YmNpcmN1aXQudG9TcGljZVN0cmluZygpKVxuICB9XG5cbiAgaWYgKG5ldGxpc3QucHJpbnRTdGF0ZW1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICBsaW5lcy5wdXNoKC4uLm5ldGxpc3QucHJpbnRTdGF0ZW1lbnRzKVxuICB9XG5cbiAgLy8gQWRkIGNvbnRyb2wgYmxvY2sgaWYgcHJlc2VudFxuICBpZiAobmV0bGlzdC5jb250cm9scy5sZW5ndGggPiAwKSB7XG4gICAgbGluZXMucHVzaChcIi5jb250cm9sXCIpXG4gICAgbGluZXMucHVzaCguLi5uZXRsaXN0LmNvbnRyb2xzKVxuICAgIGxpbmVzLnB1c2goXCIuZW5kY1wiKVxuICB9XG5cbiAgaWYgKFxuICAgIG5ldGxpc3QudHJhbkNvbW1hbmQgJiZcbiAgICAhbGluZXMuc29tZSgobCkgPT4gbC50cmltKCkudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKFwiLnRyYW5cIikpXG4gICkge1xuICAgIGxpbmVzLnB1c2gobmV0bGlzdC50cmFuQ29tbWFuZClcbiAgfVxuXG4gIC8vIEVuZCB3aXRoIC5FTkRcbiAgbGluZXMucHVzaChcIi5FTkRcIilcblxuICByZXR1cm4gbGluZXMuam9pbihcIlxcblwiKVxufVxuIiwgImltcG9ydCB7IGNvbnZlcnRTcGljZU5ldGxpc3RUb1N0cmluZyB9IGZyb20gXCIuLi9zcGljZS11dGlscy9jb252ZXJ0U3BpY2VOZXRsaXN0VG9TdHJpbmdcIlxuaW1wb3J0IHR5cGUgeyBTcGljZUNvbXBvbmVudCB9IGZyb20gXCIuL1NwaWNlQ29tcG9uZW50XCJcbmltcG9ydCB0eXBlIHsgU3BpY2VTdWJjaXJjdWl0IH0gZnJvbSBcIi4vU3BpY2VTdWJjaXJjdWl0XCJcblxuZXhwb3J0IGNsYXNzIFNwaWNlTmV0bGlzdCB7XG4gIHRpdGxlOiBzdHJpbmdcbiAgY29tcG9uZW50czogU3BpY2VDb21wb25lbnRbXVxuICBub2RlczogU2V0PHN0cmluZz5cbiAgY29udHJvbHM6IHN0cmluZ1tdXG4gIHN1YmNpcmN1aXRzOiBTcGljZVN1YmNpcmN1aXRbXVxuICBtb2RlbHM6IE1hcDxzdHJpbmcsIHN0cmluZz5cbiAgdHJhbkNvbW1hbmQ6IHN0cmluZyB8IG51bGxcbiAgcHJpbnRTdGF0ZW1lbnRzOiBzdHJpbmdbXVxuXG4gIGNvbnN0cnVjdG9yKHRpdGxlID0gXCJDaXJjdWl0IE5ldGxpc3RcIikge1xuICAgIHRoaXMudGl0bGUgPSB0aXRsZVxuICAgIHRoaXMuY29tcG9uZW50cyA9IFtdXG4gICAgdGhpcy5ub2RlcyA9IG5ldyBTZXQoKVxuICAgIHRoaXMuY29udHJvbHMgPSBbXVxuICAgIHRoaXMuc3ViY2lyY3VpdHMgPSBbXVxuICAgIHRoaXMubW9kZWxzID0gbmV3IE1hcCgpXG4gICAgdGhpcy50cmFuQ29tbWFuZCA9IG51bGxcbiAgICB0aGlzLnByaW50U3RhdGVtZW50cyA9IFtdXG4gIH1cblxuICBhZGRDb21wb25lbnQoY29tcG9uZW50OiBTcGljZUNvbXBvbmVudCkge1xuICAgIHRoaXMuY29tcG9uZW50cy5wdXNoKGNvbXBvbmVudClcbiAgICAvLyBBZGQgbm9kZXMgdG8gdGhlIHNldFxuICAgIGZvciAoY29uc3Qgbm9kZSBvZiBjb21wb25lbnQubm9kZXMpIHtcbiAgICAgIHRoaXMubm9kZXMuYWRkKG5vZGUpXG4gICAgfVxuICB9XG5cbiAgYWRkU3ViY2lyY3VpdChzdWJjaXJjdWl0OiBTcGljZVN1YmNpcmN1aXQpIHtcbiAgICBpZiAodGhpcy5zdWJjaXJjdWl0cy5maW5kKChzKSA9PiBzLm5hbWUgPT09IHN1YmNpcmN1aXQubmFtZSkpIHJldHVyblxuICAgIHRoaXMuc3ViY2lyY3VpdHMucHVzaChzdWJjaXJjdWl0KVxuICB9XG5cbiAgdG9TcGljZVN0cmluZygpIHtcbiAgICByZXR1cm4gY29udmVydFNwaWNlTmV0bGlzdFRvU3RyaW5nKHRoaXMpXG4gIH1cbn1cbiIsICJpbXBvcnQgdHlwZSB7IEJhc2VTcGljZUNvbW1hbmQgfSBmcm9tIFwiLi4vc3BpY2UtY29tbWFuZHMvQmFzZVNwaWNlQ29tbWFuZFwiXG5cbmV4cG9ydCBjbGFzcyBTcGljZUNvbXBvbmVudCB7XG4gIG5hbWU6IHN0cmluZ1xuICBjb21tYW5kOiBCYXNlU3BpY2VDb21tYW5kXG4gIG5vZGVzOiBzdHJpbmdbXVxuXG4gIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZywgY29tbWFuZDogQmFzZVNwaWNlQ29tbWFuZCwgbm9kZXM6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5uYW1lID0gbmFtZVxuICAgIHRoaXMuY29tbWFuZCA9IGNvbW1hbmRcbiAgICB0aGlzLm5vZGVzID0gbm9kZXNcbiAgfVxuXG4gIHRvU3BpY2VTdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jb21tYW5kLnRvU3BpY2VTdHJpbmcoKVxuICB9XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBCYXNlU3BpY2VDb21tYW5kIH0gZnJvbSBcIi4vQmFzZVNwaWNlQ29tbWFuZFwiXG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzaXN0b3JDb21tYW5kUHJvcHMge1xuICBuYW1lOiBzdHJpbmdcbiAgcG9zaXRpdmVOb2RlOiBzdHJpbmdcbiAgbmVnYXRpdmVOb2RlOiBzdHJpbmdcbiAgbW9kZWw/OiBzdHJpbmdcbiAgdmFsdWU6IHN0cmluZ1xufVxuXG5leHBvcnQgY2xhc3MgUmVzaXN0b3JDb21tYW5kIGltcGxlbWVudHMgQmFzZVNwaWNlQ29tbWFuZCB7XG4gIGNvbW1hbmROYW1lID0gXCJyZXNpc3RvclwiIGFzIGNvbnN0XG4gIHByb3BzOiBSZXNpc3RvckNvbW1hbmRQcm9wc1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBSZXNpc3RvckNvbW1hbmRQcm9wcykge1xuICAgIHRoaXMucHJvcHMgPSBwcm9wc1xuICB9XG5cbiAgdG9TcGljZVN0cmluZygpOiBzdHJpbmcge1xuICAgIGNvbnN0IHsgbmFtZSwgcG9zaXRpdmVOb2RlLCBuZWdhdGl2ZU5vZGUsIG1vZGVsLCB2YWx1ZSB9ID0gdGhpcy5wcm9wc1xuICAgIGxldCBzcGljZVN0cmluZyA9IGBSJHtuYW1lfSAke3Bvc2l0aXZlTm9kZX0gJHtuZWdhdGl2ZU5vZGV9YFxuICAgIGlmIChtb2RlbCkge1xuICAgICAgc3BpY2VTdHJpbmcgKz0gYCAke21vZGVsfWBcbiAgICB9XG4gICAgc3BpY2VTdHJpbmcgKz0gYCAke3ZhbHVlfWBcbiAgICByZXR1cm4gc3BpY2VTdHJpbmdcbiAgfVxufVxuIiwgImltcG9ydCB0eXBlIHsgQmFzZVNwaWNlQ29tbWFuZCB9IGZyb20gXCIuL0Jhc2VTcGljZUNvbW1hbmRcIlxuXG5leHBvcnQgaW50ZXJmYWNlIENhcGFjaXRvckNvbW1hbmRQcm9wcyB7XG4gIG5hbWU6IHN0cmluZ1xuICBwb3NpdGl2ZU5vZGU6IHN0cmluZ1xuICBuZWdhdGl2ZU5vZGU6IHN0cmluZ1xuICBtb2RlbE5hbWU/OiBzdHJpbmdcbiAgdmFsdWU6IHN0cmluZ1xuICBpbml0aWFsQ29uZGl0aW9uPzogc3RyaW5nXG59XG5cbmV4cG9ydCBjbGFzcyBDYXBhY2l0b3JDb21tYW5kIGltcGxlbWVudHMgQmFzZVNwaWNlQ29tbWFuZCB7XG4gIGNvbW1hbmROYW1lID0gXCJjYXBhY2l0b3JcIiBhcyBjb25zdFxuXG4gIHByb3BzOiBDYXBhY2l0b3JDb21tYW5kUHJvcHNcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogQ2FwYWNpdG9yQ29tbWFuZFByb3BzKSB7XG4gICAgdGhpcy5wcm9wcyA9IHByb3BzXG4gIH1cblxuICB0b1NwaWNlU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgY29uc3Qge1xuICAgICAgbmFtZSxcbiAgICAgIHBvc2l0aXZlTm9kZSxcbiAgICAgIG5lZ2F0aXZlTm9kZSxcbiAgICAgIG1vZGVsTmFtZSxcbiAgICAgIHZhbHVlLFxuICAgICAgaW5pdGlhbENvbmRpdGlvbixcbiAgICB9ID0gdGhpcy5wcm9wc1xuXG4gICAgbGV0IHNwaWNlU3RyaW5nID0gYEMke25hbWV9ICR7cG9zaXRpdmVOb2RlfSAke25lZ2F0aXZlTm9kZX1gXG4gICAgaWYgKG1vZGVsTmFtZSkge1xuICAgICAgc3BpY2VTdHJpbmcgKz0gYCAke21vZGVsTmFtZX1gXG4gICAgfVxuICAgIHNwaWNlU3RyaW5nICs9IGAgJHt2YWx1ZX1gXG4gICAgaWYgKGluaXRpYWxDb25kaXRpb24pIHtcbiAgICAgIHNwaWNlU3RyaW5nICs9IGAgSUM9JHtpbml0aWFsQ29uZGl0aW9ufWBcbiAgICB9XG4gICAgcmV0dXJuIHNwaWNlU3RyaW5nXG4gIH1cbn1cbiIsICJpbXBvcnQgdHlwZSB7IEJhc2VTcGljZUNvbW1hbmQgfSBmcm9tIFwiLi9CYXNlU3BpY2VDb21tYW5kXCJcblxuZXhwb3J0IGludGVyZmFjZSBWb2x0YWdlU291cmNlQ29tbWFuZFByb3BzIHtcbiAgbmFtZTogc3RyaW5nXG4gIHBvc2l0aXZlTm9kZTogc3RyaW5nXG4gIG5lZ2F0aXZlTm9kZTogc3RyaW5nXG4gIHZhbHVlPzogc3RyaW5nXG4gIGFjTWFnbml0dWRlPzogc3RyaW5nXG4gIGFjUGhhc2U/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGNsYXNzIFZvbHRhZ2VTb3VyY2VDb21tYW5kIGltcGxlbWVudHMgQmFzZVNwaWNlQ29tbWFuZCB7XG4gIGNvbW1hbmROYW1lID0gXCJ2b2x0YWdlX3NvdXJjZVwiIGFzIGNvbnN0XG4gIHByb3BzOiBWb2x0YWdlU291cmNlQ29tbWFuZFByb3BzXG5cbiAgY29uc3RydWN0b3IocHJvcHM6IFZvbHRhZ2VTb3VyY2VDb21tYW5kUHJvcHMpIHtcbiAgICB0aGlzLnByb3BzID0gcHJvcHNcbiAgfVxuXG4gIHRvU3BpY2VTdHJpbmcoKTogc3RyaW5nIHtcbiAgICBjb25zdCB7IG5hbWUsIHBvc2l0aXZlTm9kZSwgbmVnYXRpdmVOb2RlLCB2YWx1ZSwgYWNNYWduaXR1ZGUsIGFjUGhhc2UgfSA9XG4gICAgICB0aGlzLnByb3BzXG4gICAgbGV0IHNwaWNlU3RyaW5nID0gYFYke25hbWV9ICR7cG9zaXRpdmVOb2RlfSAke25lZ2F0aXZlTm9kZX1gXG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBzcGljZVN0cmluZyArPSBgICR7dmFsdWV9YFxuICAgIH1cbiAgICBpZiAoYWNNYWduaXR1ZGUpIHtcbiAgICAgIHNwaWNlU3RyaW5nICs9IGAgQUMgJHthY01hZ25pdHVkZX1gXG4gICAgICBpZiAoYWNQaGFzZSkge1xuICAgICAgICBzcGljZVN0cmluZyArPSBgICR7YWNQaGFzZX1gXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzcGljZVN0cmluZ1xuICB9XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBCYXNlU3BpY2VDb21tYW5kIH0gZnJvbSBcIi4vQmFzZVNwaWNlQ29tbWFuZFwiXG5cbmV4cG9ydCBpbnRlcmZhY2UgQkpUQ29tbWFuZFByb3BzIHtcbiAgbmFtZTogc3RyaW5nXG4gIGNvbGxlY3Rvcjogc3RyaW5nXG4gIGJhc2U6IHN0cmluZ1xuICBlbWl0dGVyOiBzdHJpbmdcbiAgc3Vic3RyYXRlPzogc3RyaW5nXG4gIG1vZGVsOiBzdHJpbmdcbiAgYXJlYT86IHN0cmluZ1xufVxuXG5leHBvcnQgY2xhc3MgQkpUQ29tbWFuZCBpbXBsZW1lbnRzIEJhc2VTcGljZUNvbW1hbmQge1xuICBjb21tYW5kTmFtZSA9IFwiYmp0XCIgYXMgY29uc3RcbiAgcHJvcHM6IEJKVENvbW1hbmRQcm9wc1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBCSlRDb21tYW5kUHJvcHMpIHtcbiAgICB0aGlzLnByb3BzID0gcHJvcHNcbiAgfVxuXG4gIHRvU3BpY2VTdHJpbmcoKTogc3RyaW5nIHtcbiAgICBjb25zdCB7IG5hbWUsIGNvbGxlY3RvciwgYmFzZSwgZW1pdHRlciwgc3Vic3RyYXRlLCBtb2RlbCwgYXJlYSB9ID1cbiAgICAgIHRoaXMucHJvcHNcbiAgICBsZXQgc3BpY2VTdHJpbmcgPSBgUSR7bmFtZX0gJHtjb2xsZWN0b3J9ICR7YmFzZX0gJHtlbWl0dGVyfWBcbiAgICBpZiAoc3Vic3RyYXRlKSB7XG4gICAgICBzcGljZVN0cmluZyArPSBgICR7c3Vic3RyYXRlfWBcbiAgICB9XG4gICAgc3BpY2VTdHJpbmcgKz0gYCAke21vZGVsfWBcbiAgICBpZiAoYXJlYSkge1xuICAgICAgc3BpY2VTdHJpbmcgKz0gYCAke2FyZWF9YFxuICAgIH1cbiAgICByZXR1cm4gc3BpY2VTdHJpbmdcbiAgfVxufVxuIiwgImltcG9ydCB0eXBlIHsgQmFzZVNwaWNlQ29tbWFuZCB9IGZyb20gXCIuL0Jhc2VTcGljZUNvbW1hbmRcIlxuXG5leHBvcnQgaW50ZXJmYWNlIERpb2RlQ29tbWFuZFByb3BzIHtcbiAgbmFtZTogc3RyaW5nXG4gIHBvc2l0aXZlTm9kZTogc3RyaW5nXG4gIG5lZ2F0aXZlTm9kZTogc3RyaW5nXG4gIG1vZGVsOiBzdHJpbmdcbiAgYXJlYT86IHN0cmluZ1xufVxuXG5leHBvcnQgY2xhc3MgRGlvZGVDb21tYW5kIGltcGxlbWVudHMgQmFzZVNwaWNlQ29tbWFuZCB7XG4gIGNvbW1hbmROYW1lID0gXCJkaW9kZVwiIGFzIGNvbnN0XG4gIHByb3BzOiBEaW9kZUNvbW1hbmRQcm9wc1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBEaW9kZUNvbW1hbmRQcm9wcykge1xuICAgIHRoaXMucHJvcHMgPSBwcm9wc1xuICB9XG5cbiAgdG9TcGljZVN0cmluZygpOiBzdHJpbmcge1xuICAgIGNvbnN0IHsgbmFtZSwgcG9zaXRpdmVOb2RlLCBuZWdhdGl2ZU5vZGUsIG1vZGVsLCBhcmVhIH0gPSB0aGlzLnByb3BzXG4gICAgbGV0IHNwaWNlU3RyaW5nID0gYEQke25hbWV9ICR7cG9zaXRpdmVOb2RlfSAke25lZ2F0aXZlTm9kZX0gJHttb2RlbH1gXG4gICAgaWYgKGFyZWEpIHtcbiAgICAgIHNwaWNlU3RyaW5nICs9IGAgJHthcmVhfWBcbiAgICB9XG4gICAgcmV0dXJuIHNwaWNlU3RyaW5nXG4gIH1cbn1cbiIsICJpbXBvcnQgdHlwZSB7IEJhc2VTcGljZUNvbW1hbmQgfSBmcm9tIFwiLi9CYXNlU3BpY2VDb21tYW5kXCJcblxuZXhwb3J0IGludGVyZmFjZSBJbmR1Y3RvckNvbW1hbmRQcm9wcyB7XG4gIG5hbWU6IHN0cmluZ1xuICBwb3NpdGl2ZU5vZGU6IHN0cmluZ1xuICBuZWdhdGl2ZU5vZGU6IHN0cmluZ1xuICBtb2RlbD86IHN0cmluZ1xuICB2YWx1ZTogc3RyaW5nXG4gIGluaXRpYWxDb25kaXRpb24/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGNsYXNzIEluZHVjdG9yQ29tbWFuZCBpbXBsZW1lbnRzIEJhc2VTcGljZUNvbW1hbmQge1xuICBjb21tYW5kTmFtZSA9IFwiaW5kdWN0b3JcIiBhcyBjb25zdFxuICBwcm9wczogSW5kdWN0b3JDb21tYW5kUHJvcHNcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogSW5kdWN0b3JDb21tYW5kUHJvcHMpIHtcbiAgICB0aGlzLnByb3BzID0gcHJvcHNcbiAgfVxuXG4gIHRvU3BpY2VTdHJpbmcoKTogc3RyaW5nIHtcbiAgICBjb25zdCB7IG5hbWUsIHBvc2l0aXZlTm9kZSwgbmVnYXRpdmVOb2RlLCBtb2RlbCwgdmFsdWUsIGluaXRpYWxDb25kaXRpb24gfSA9XG4gICAgICB0aGlzLnByb3BzXG4gICAgbGV0IHNwaWNlU3RyaW5nID0gYEwke25hbWV9ICR7cG9zaXRpdmVOb2RlfSAke25lZ2F0aXZlTm9kZX1gXG4gICAgaWYgKG1vZGVsKSB7XG4gICAgICBzcGljZVN0cmluZyArPSBgICR7bW9kZWx9YFxuICAgIH1cbiAgICBzcGljZVN0cmluZyArPSBgICR7dmFsdWV9YFxuICAgIGlmIChpbml0aWFsQ29uZGl0aW9uKSB7XG4gICAgICBzcGljZVN0cmluZyArPSBgIElDPSR7aW5pdGlhbENvbmRpdGlvbn1gXG4gICAgfVxuICAgIHJldHVybiBzcGljZVN0cmluZ1xuICB9XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBCYXNlU3BpY2VDb21tYW5kIH0gZnJvbSBcIi4vQmFzZVNwaWNlQ29tbWFuZFwiXG5cbmV4cG9ydCBpbnRlcmZhY2UgTU9TRkVUQ29tbWFuZFByb3BzIHtcbiAgbmFtZTogc3RyaW5nXG4gIGRyYWluOiBzdHJpbmdcbiAgZ2F0ZTogc3RyaW5nXG4gIHNvdXJjZTogc3RyaW5nXG4gIHN1YnN0cmF0ZTogc3RyaW5nXG4gIG1vZGVsOiBzdHJpbmdcbiAgbGVuZ3RoPzogc3RyaW5nXG4gIHdpZHRoPzogc3RyaW5nXG4gIGRyYWluQXJlYT86IHN0cmluZ1xuICBzb3VyY2VBcmVhPzogc3RyaW5nXG4gIGRyYWluUGVyaW1ldGVyPzogc3RyaW5nXG4gIHNvdXJjZVBlcmltZXRlcj86IHN0cmluZ1xuICBkcmFpblJlc2lzdGFuY2U/OiBzdHJpbmdcbiAgc291cmNlUmVzaXN0YW5jZT86IHN0cmluZ1xufVxuXG5leHBvcnQgY2xhc3MgTU9TRkVUQ29tbWFuZCBpbXBsZW1lbnRzIEJhc2VTcGljZUNvbW1hbmQge1xuICBjb21tYW5kTmFtZSA9IFwibW9zZmV0XCIgYXMgY29uc3RcbiAgcHJvcHM6IE1PU0ZFVENvbW1hbmRQcm9wc1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBNT1NGRVRDb21tYW5kUHJvcHMpIHtcbiAgICB0aGlzLnByb3BzID0gcHJvcHNcbiAgfVxuXG4gIHRvU3BpY2VTdHJpbmcoKTogc3RyaW5nIHtcbiAgICBjb25zdCB7XG4gICAgICBuYW1lLFxuICAgICAgZHJhaW4sXG4gICAgICBnYXRlLFxuICAgICAgc291cmNlLFxuICAgICAgc3Vic3RyYXRlLFxuICAgICAgbW9kZWwsXG4gICAgICBsZW5ndGgsXG4gICAgICB3aWR0aCxcbiAgICAgIGRyYWluQXJlYSxcbiAgICAgIHNvdXJjZUFyZWEsXG4gICAgICBkcmFpblBlcmltZXRlcixcbiAgICAgIHNvdXJjZVBlcmltZXRlcixcbiAgICAgIGRyYWluUmVzaXN0YW5jZSxcbiAgICAgIHNvdXJjZVJlc2lzdGFuY2UsXG4gICAgfSA9IHRoaXMucHJvcHNcblxuICAgIGxldCBzcGljZVN0cmluZyA9IGBNJHtuYW1lfSAke2RyYWlufSAke2dhdGV9ICR7c291cmNlfSAke3N1YnN0cmF0ZX0gJHttb2RlbH1gXG5cbiAgICBjb25zdCBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4gPSB7XG4gICAgICBMOiBsZW5ndGgsXG4gICAgICBXOiB3aWR0aCxcbiAgICAgIEFEOiBkcmFpbkFyZWEsXG4gICAgICBBUzogc291cmNlQXJlYSxcbiAgICAgIFBEOiBkcmFpblBlcmltZXRlcixcbiAgICAgIFBTOiBzb3VyY2VQZXJpbWV0ZXIsXG4gICAgICBOUkQ6IGRyYWluUmVzaXN0YW5jZSxcbiAgICAgIE5SUzogc291cmNlUmVzaXN0YW5jZSxcbiAgICB9XG5cbiAgICBPYmplY3QuZW50cmllcyhwYXJhbXMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIHNwaWNlU3RyaW5nICs9IGAgJHtrZXl9PSR7dmFsdWV9YFxuICAgICAgfVxuICAgIH0pXG5cbiAgICByZXR1cm4gc3BpY2VTdHJpbmdcbiAgfVxufVxuIiwgImltcG9ydCB0eXBlIHsgQmFzZVNwaWNlQ29tbWFuZCB9IGZyb20gXCIuL0Jhc2VTcGljZUNvbW1hbmRcIlxuXG5leHBvcnQgaW50ZXJmYWNlIFZvbHRhZ2VDb250cm9sbGVkU3dpdGNoQ29tbWFuZFByb3BzIHtcbiAgbmFtZTogc3RyaW5nXG4gIHBvc2l0aXZlTm9kZTogc3RyaW5nXG4gIG5lZ2F0aXZlTm9kZTogc3RyaW5nXG4gIHBvc2l0aXZlQ29udHJvbDogc3RyaW5nXG4gIG5lZ2F0aXZlQ29udHJvbDogc3RyaW5nXG4gIG1vZGVsOiBzdHJpbmdcbn1cblxuZXhwb3J0IGNsYXNzIFZvbHRhZ2VDb250cm9sbGVkU3dpdGNoQ29tbWFuZCBpbXBsZW1lbnRzIEJhc2VTcGljZUNvbW1hbmQge1xuICBjb21tYW5kTmFtZSA9IFwidm9sdGFnZV9jb250cm9sbGVkX3N3aXRjaFwiIGFzIGNvbnN0XG4gIHByb3BzOiBWb2x0YWdlQ29udHJvbGxlZFN3aXRjaENvbW1hbmRQcm9wc1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBWb2x0YWdlQ29udHJvbGxlZFN3aXRjaENvbW1hbmRQcm9wcykge1xuICAgIHRoaXMucHJvcHMgPSBwcm9wc1xuICB9XG5cbiAgdG9TcGljZVN0cmluZygpOiBzdHJpbmcge1xuICAgIGNvbnN0IHtcbiAgICAgIG5hbWUsXG4gICAgICBwb3NpdGl2ZU5vZGUsXG4gICAgICBuZWdhdGl2ZU5vZGUsXG4gICAgICBwb3NpdGl2ZUNvbnRyb2wsXG4gICAgICBuZWdhdGl2ZUNvbnRyb2wsXG4gICAgICBtb2RlbCxcbiAgICB9ID0gdGhpcy5wcm9wc1xuICAgIHJldHVybiBgUyR7bmFtZX0gJHtwb3NpdGl2ZU5vZGV9ICR7bmVnYXRpdmVOb2RlfSAke3Bvc2l0aXZlQ29udHJvbH0gJHtuZWdhdGl2ZUNvbnRyb2x9ICR7bW9kZWx9YFxuICB9XG59XG4iLCAiaW1wb3J0IHsgU3BpY2VOZXRsaXN0IH0gZnJvbSBcIi4vc3BpY2UtY2xhc3Nlcy9TcGljZU5ldGxpc3RcIlxuaW1wb3J0IHsgU3BpY2VDb21wb25lbnQgfSBmcm9tIFwiLi9zcGljZS1jbGFzc2VzL1NwaWNlQ29tcG9uZW50XCJcbmltcG9ydCB7IFJlc2lzdG9yQ29tbWFuZCB9IGZyb20gXCIuL3NwaWNlLWNvbW1hbmRzL1Jlc2lzdG9yQ29tbWFuZFwiXG5pbXBvcnQgeyBDYXBhY2l0b3JDb21tYW5kIH0gZnJvbSBcIi4vc3BpY2UtY29tbWFuZHMvQ2FwYWNpdG9yQ29tbWFuZFwiXG5pbXBvcnQgeyBWb2x0YWdlU291cmNlQ29tbWFuZCB9IGZyb20gXCIuL3NwaWNlLWNvbW1hbmRzL1ZvbHRhZ2VTb3VyY2VDb21tYW5kXCJcbmltcG9ydCB7IEJKVENvbW1hbmQgfSBmcm9tIFwiLi9zcGljZS1jb21tYW5kcy9CSlRDb21tYW5kXCJcbmltcG9ydCB7IERpb2RlQ29tbWFuZCB9IGZyb20gXCIuL3NwaWNlLWNvbW1hbmRzL0Rpb2RlQ29tbWFuZFwiXG5pbXBvcnQgeyBJbmR1Y3RvckNvbW1hbmQgfSBmcm9tIFwiLi9zcGljZS1jb21tYW5kcy9JbmR1Y3RvckNvbW1hbmRcIlxuaW1wb3J0IHsgTU9TRkVUQ29tbWFuZCB9IGZyb20gXCIuL3NwaWNlLWNvbW1hbmRzL01PU0ZFVENvbW1hbmRcIlxuaW1wb3J0IHsgVm9sdGFnZUNvbnRyb2xsZWRTd2l0Y2hDb21tYW5kIH0gZnJvbSBcIi4vc3BpY2UtY29tbWFuZHMvVm9sdGFnZUNvbnRyb2xsZWRTd2l0Y2hDb21tYW5kXCJcbmltcG9ydCB0eXBlIHtcbiAgQW55Q2lyY3VpdEVsZW1lbnQsXG4gIFNpbXVsYXRpb25Td2l0Y2gsXG4gIFNpbXVsYXRpb25Wb2x0YWdlUHJvYmUsXG59IGZyb20gXCJjaXJjdWl0LWpzb25cIlxuaW1wb3J0IHsgZ2V0U291cmNlUG9ydENvbm5lY3Rpdml0eU1hcEZyb21DaXJjdWl0SnNvbiB9IGZyb20gXCJjaXJjdWl0LWpzb24tdG8tY29ubmVjdGl2aXR5LW1hcFwiXG5pbXBvcnQgeyBzdSB9IGZyb20gXCJAdHNjaXJjdWl0L2NpcmN1aXQtanNvbi11dGlsXCJcblxuZXhwb3J0IGZ1bmN0aW9uIGNpcmN1aXRKc29uVG9TcGljZShcbiAgY2lyY3VpdEpzb246IEFueUNpcmN1aXRFbGVtZW50W10sXG4pOiBTcGljZU5ldGxpc3Qge1xuICBjb25zdCBuZXRsaXN0ID0gbmV3IFNwaWNlTmV0bGlzdChcIiogQ2lyY3VpdCBKU09OIHRvIFNQSUNFIE5ldGxpc3RcIilcbiAgY29uc3Qgc291cmNlQ29tcG9uZW50cyA9IHN1KGNpcmN1aXRKc29uKS5zb3VyY2VfY29tcG9uZW50Lmxpc3QoKVxuICBjb25zdCBzb3VyY2VQb3J0cyA9IHN1KGNpcmN1aXRKc29uKS5zb3VyY2VfcG9ydC5saXN0KClcbiAgY29uc3Qgc291cmNlVHJhY2VzID0gc3UoY2lyY3VpdEpzb24pLnNvdXJjZV90cmFjZS5saXN0KClcbiAgY29uc3Qgc2ltdWxhdGlvblByb2JlcyA9IGNpcmN1aXRKc29uLmZpbHRlcihcbiAgICAoZWxtKSA9PiBlbG0udHlwZSA9PT0gXCJzaW11bGF0aW9uX3ZvbHRhZ2VfcHJvYmVcIixcbiAgKSBhcyBTaW11bGF0aW9uVm9sdGFnZVByb2JlW11cbiAgY29uc3Qgc2ltdWxhdGlvblN3aXRjaGVzID0gY2lyY3VpdEpzb25cbiAgICAuZmlsdGVyKFxuICAgICAgKGVsZW1lbnQpID0+IChlbGVtZW50IGFzIHsgdHlwZT86IHN0cmluZyB9KS50eXBlID09PSBcInNpbXVsYXRpb25fc3dpdGNoXCIsXG4gICAgKVxuICAgIC5tYXAoKGVsZW1lbnQpID0+IGVsZW1lbnQgYXMgdW5rbm93biBhcyBTaW11bGF0aW9uU3dpdGNoKVxuICBjb25zdCBzaW11bGF0aW9uU3dpdGNoTWFwID0gbmV3IE1hcDxzdHJpbmcsIFNpbXVsYXRpb25Td2l0Y2g+KClcblxuICBmb3IgKGNvbnN0IHNpbVN3aXRjaCBvZiBzaW11bGF0aW9uU3dpdGNoZXMpIHtcbiAgICBpZiAoc2ltU3dpdGNoLnNvdXJjZV9jb21wb25lbnRfaWQpIHtcbiAgICAgIHNpbXVsYXRpb25Td2l0Y2hNYXAuc2V0KHNpbVN3aXRjaC5zb3VyY2VfY29tcG9uZW50X2lkLCBzaW1Td2l0Y2gpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgY29ubk1hcCA9IGdldFNvdXJjZVBvcnRDb25uZWN0aXZpdHlNYXBGcm9tQ2lyY3VpdEpzb24oY2lyY3VpdEpzb24pXG5cbiAgLy8gQ3JlYXRlIG5vZGUgbWFwcGluZyBmcm9tIHBvcnQgY29ubmVjdGlvbnNcbiAgY29uc3Qgbm9kZU1hcCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KClcbiAgY29uc3QgbmV0VG9Ob2RlTmFtZSA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KClcbiAgbGV0IG5vZGVDb3VudGVyID0gMVxuXG4gIGNvbnN0IHByb2JlTmFtZXMgPSBuZXcgU2V0PHN0cmluZz4oKVxuICBpZiAoc2ltdWxhdGlvblByb2Jlcy5sZW5ndGggPiAwKSB7XG4gICAgZm9yIChjb25zdCBwcm9iZSBvZiBzaW11bGF0aW9uUHJvYmVzKSB7XG4gICAgICBpZiAocHJvYmUubmFtZSkge1xuICAgICAgICBwcm9iZU5hbWVzLmFkZChwcm9iZS5uYW1lKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIElmIHRoZXJlIGFyZSBwcm9iZSBuYW1lcyBsaWtlIE4xLCBOMiwgbWFrZSBzdXJlIHdlIGRvbid0IGhhdmUgY29uZmxpY3RzXG4gIGNvbnN0IG51bWVyaWNQcm9iZU5hbWVzID0gWy4uLnByb2JlTmFtZXNdXG4gICAgLm1hcCgobmFtZSkgPT4gL15OKFxcZCspJC9pLmV4ZWMobmFtZSkpXG4gICAgLmZpbHRlcigobSk6IG0gaXMgUmVnRXhwRXhlY0FycmF5ID0+IG0gIT09IG51bGwpXG4gICAgLm1hcCgobSkgPT4gcGFyc2VJbnQobVsxXSwgMTApKVxuXG4gIGlmIChudW1lcmljUHJvYmVOYW1lcy5sZW5ndGggPiAwKSB7XG4gICAgbm9kZUNvdW50ZXIgPSBNYXRoLm1heCguLi5udW1lcmljUHJvYmVOYW1lcykgKyAxXG4gIH1cblxuICBjb25zdCBncm91bmROZXRzID0gbmV3IFNldDxzdHJpbmc+KClcblxuICAvLyBGaW5kIGdyb3VuZCBmcm9tIHNvdXJjZSBuZXRzIHRoYXQgaW5jbHVkZSBcImduZFwiIGluIHRoZSBuYW1lXG4gIGNvbnN0IGduZFNvdXJjZU5ldElkcyA9IG5ldyBTZXQoXG4gICAgc3UoY2lyY3VpdEpzb24pXG4gICAgICAuc291cmNlX25ldC5saXN0KClcbiAgICAgIC5maWx0ZXIoKHNuKSA9PiBzbi5uYW1lPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKFwiZ25kXCIpKVxuICAgICAgLm1hcCgoc24pID0+IHNuLnNvdXJjZV9uZXRfaWQpLFxuICApXG5cbiAgaWYgKGduZFNvdXJjZU5ldElkcy5zaXplID4gMCkge1xuICAgIGZvciAoY29uc3QgdHJhY2Ugb2Ygc3UoY2lyY3VpdEpzb24pLnNvdXJjZV90cmFjZS5saXN0KCkpIHtcbiAgICAgIGlmICh0cmFjZS5jb25uZWN0ZWRfc291cmNlX3BvcnRfaWRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgaXNPbkduZE5ldCA9IHRyYWNlLmNvbm5lY3RlZF9zb3VyY2VfbmV0X2lkcy5zb21lKChuZXRJZCkgPT5cbiAgICAgICAgICBnbmRTb3VyY2VOZXRJZHMuaGFzKG5ldElkKSxcbiAgICAgICAgKVxuICAgICAgICBpZiAoaXNPbkduZE5ldCkge1xuICAgICAgICAgIGNvbnN0IGFQb3J0T25HbmQgPSB0cmFjZS5jb25uZWN0ZWRfc291cmNlX3BvcnRfaWRzWzBdXG4gICAgICAgICAgY29uc3QgZ25kTmV0ID0gY29ubk1hcC5nZXROZXRDb25uZWN0ZWRUb0lkKGFQb3J0T25HbmQpXG4gICAgICAgICAgaWYgKGduZE5ldCkge1xuICAgICAgICAgICAgZ3JvdW5kTmV0cy5hZGQoZ25kTmV0KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEZpbmQgZ3JvdW5kIG5vZGUgZnJvbSBwb3J0cyBuYW1lZCBcIkdORFwiXG4gIGNvbnN0IGdyb3VuZFBvcnRzID0gc291cmNlUG9ydHMuZmlsdGVyKChwKSA9PiBwLm5hbWU/LnRvTG93ZXJDYXNlKCkgPT09IFwiZ25kXCIpXG4gIGZvciAoY29uc3QgZ3JvdW5kUG9ydCBvZiBncm91bmRQb3J0cykge1xuICAgIGNvbnN0IGdyb3VuZE5ldCA9IGNvbm5NYXAuZ2V0TmV0Q29ubmVjdGVkVG9JZChncm91bmRQb3J0LnNvdXJjZV9wb3J0X2lkKVxuICAgIGlmIChncm91bmROZXQpIHtcbiAgICAgIGdyb3VuZE5ldHMuYWRkKGdyb3VuZE5ldClcbiAgICB9XG4gIH1cblxuICBmb3IgKGNvbnN0IHNpbVNvdXJjZSBvZiBzdShjaXJjdWl0SnNvbikuc2ltdWxhdGlvbl92b2x0YWdlX3NvdXJjZS5saXN0KCkpIHtcbiAgICBjb25zdCBuZWdfcG9ydF9pZCA9XG4gICAgICAoc2ltU291cmNlIGFzIGFueSkubmVnYXRpdmVfc291cmNlX3BvcnRfaWQgPz9cbiAgICAgIChzaW1Tb3VyY2UgYXMgYW55KS50ZXJtaW5hbDJfc291cmNlX3BvcnRfaWRcbiAgICBpZiAobmVnX3BvcnRfaWQpIHtcbiAgICAgIGNvbnN0IGduZF9uZXQgPSBjb25uTWFwLmdldE5ldENvbm5lY3RlZFRvSWQobmVnX3BvcnRfaWQpXG4gICAgICBpZiAoZ25kX25ldCkge1xuICAgICAgICBncm91bmROZXRzLmFkZChnbmRfbmV0KVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZvciAoY29uc3QgZ3JvdW5kTmV0IG9mIGdyb3VuZE5ldHMpIHtcbiAgICBuZXRUb05vZGVOYW1lLnNldChncm91bmROZXQsIFwiMFwiKVxuICB9XG5cbiAgLy8gUHJlLWFzc2lnbiBub2RlIG5hbWVzIGZyb20gdm9sdGFnZSBwcm9iZXNcbiAgaWYgKHNpbXVsYXRpb25Qcm9iZXMubGVuZ3RoID4gMCkge1xuICAgIGZvciAoY29uc3QgcHJvYmUgb2Ygc2ltdWxhdGlvblByb2Jlcykge1xuICAgICAgaWYgKCFwcm9iZS5uYW1lKSBjb250aW51ZVxuXG4gICAgICBpZiAoXG4gICAgICAgIHByb2JlLnJlZmVyZW5jZV9pbnB1dF9zb3VyY2VfcG9ydF9pZCB8fFxuICAgICAgICBwcm9iZS5yZWZlcmVuY2VfaW5wdXRfc291cmNlX25ldF9pZFxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGxldCBuZXQ6IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGxcbiAgICAgIGNvbnN0IHNpZ25hbF9wb3J0X2lkID0gcHJvYmUuc2lnbmFsX2lucHV0X3NvdXJjZV9wb3J0X2lkXG4gICAgICBjb25zdCBzaWduYWxfbmV0X2lkID0gcHJvYmUuc2lnbmFsX2lucHV0X3NvdXJjZV9uZXRfaWRcblxuICAgICAgaWYgKHNpZ25hbF9wb3J0X2lkKSB7XG4gICAgICAgIG5ldCA9IGNvbm5NYXAuZ2V0TmV0Q29ubmVjdGVkVG9JZChzaWduYWxfcG9ydF9pZClcbiAgICAgIH0gZWxzZSBpZiAoc2lnbmFsX25ldF9pZCkge1xuICAgICAgICBjb25zdCB0cmFjZSA9IHNvdXJjZVRyYWNlcy5maW5kKCh0KSA9PlxuICAgICAgICAgIHQuY29ubmVjdGVkX3NvdXJjZV9uZXRfaWRzLmluY2x1ZGVzKHNpZ25hbF9uZXRfaWQhKSxcbiAgICAgICAgKVxuICAgICAgICBpZiAodHJhY2UgJiYgdHJhY2UuY29ubmVjdGVkX3NvdXJjZV9wb3J0X2lkcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3QgcG9ydElkID0gdHJhY2UuY29ubmVjdGVkX3NvdXJjZV9wb3J0X2lkc1swXVxuICAgICAgICAgIG5ldCA9IGNvbm5NYXAuZ2V0TmV0Q29ubmVjdGVkVG9JZChwb3J0SWQpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKG5ldCkge1xuICAgICAgICBpZiAoIW5ldFRvTm9kZU5hbWUuaGFzKG5ldCkpIHtcbiAgICAgICAgICBuZXRUb05vZGVOYW1lLnNldChuZXQsIHByb2JlLm5hbWUpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoc2lnbmFsX3BvcnRfaWQgJiYgcHJvYmUubmFtZSkge1xuICAgICAgICAvLyBJdCdzIGEgZmxvYXRpbmcgcG9ydCB3aXRoIGEgcHJvYmUsIHNvIHdlIG1hcCBpdCBkaXJlY3RseS4gVGhpcyBwb3J0XG4gICAgICAgIC8vIHdpbGwgbm93IGJlIHNraXBwZWQgaW4gdGhlIHNlY29uZC1wYXNzIGZvciB1bmNvbm5lY3RlZCBwb3J0cy5cbiAgICAgICAgbm9kZU1hcC5zZXQoc2lnbmFsX3BvcnRfaWQsIHByb2JlLm5hbWUpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gRmlyc3QgcGFzczogYXNzaWduIG5vZGUgbnVtYmVycyB0byBhbGwgY29ubmVjdGVkIG5ldHNcbiAgZm9yIChjb25zdCBwb3J0IG9mIHNvdXJjZVBvcnRzKSB7XG4gICAgY29uc3QgcG9ydElkID0gcG9ydC5zb3VyY2VfcG9ydF9pZFxuICAgIGNvbnN0IG5ldCA9IGNvbm5NYXAuZ2V0TmV0Q29ubmVjdGVkVG9JZChwb3J0SWQpXG4gICAgaWYgKG5ldCkge1xuICAgICAgaWYgKCFuZXRUb05vZGVOYW1lLmhhcyhuZXQpKSB7XG4gICAgICAgIG5ldFRvTm9kZU5hbWUuc2V0KG5ldCwgYE4ke25vZGVDb3VudGVyKyt9YClcbiAgICAgIH1cbiAgICAgIG5vZGVNYXAuc2V0KHBvcnRJZCwgbmV0VG9Ob2RlTmFtZS5nZXQobmV0KSEpXG4gICAgfVxuICB9XG5cbiAgLy8gU2Vjb25kIHBhc3M6IGFzc2lnbiBub2RlIG51bWJlcnMgdG8gdW5jb25uZWN0ZWQgcG9ydHNcbiAgZm9yIChjb25zdCBwb3J0IG9mIHNvdXJjZVBvcnRzKSB7XG4gICAgY29uc3QgcG9ydElkID0gcG9ydC5zb3VyY2VfcG9ydF9pZFxuICAgIC8vIElmIGEgcG9ydCB3YXNuJ3QgaW4gYSBuZXQsIGl0IHdvbid0IGJlIGluIHRoZSBub2RlTWFwIHlldFxuICAgIGlmICghbm9kZU1hcC5oYXMocG9ydElkKSkge1xuICAgICAgLy8gVW5jb25uZWN0ZWQgcG9ydCwgY3JlYXRlIGEgbmV3IGZsb2F0aW5nIG5vZGUgZm9yIGl0XG4gICAgICBub2RlTWFwLnNldChwb3J0SWQsIGBOJHtub2RlQ291bnRlcisrfWApXG4gICAgfVxuICB9XG5cbiAgLy8gUHJvY2VzcyBlYWNoIGNvbXBvbmVudFxuICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiBzb3VyY2VDb21wb25lbnRzKSB7XG4gICAgaWYgKGNvbXBvbmVudC50eXBlICE9PSBcInNvdXJjZV9jb21wb25lbnRcIikgY29udGludWVcblxuICAgIGNvbnN0IGNvbXBvbmVudFBvcnRzID0gc3UoY2lyY3VpdEpzb24pXG4gICAgICAuc291cmNlX3BvcnQubGlzdCh7XG4gICAgICAgIHNvdXJjZV9jb21wb25lbnRfaWQ6IGNvbXBvbmVudC5zb3VyY2VfY29tcG9uZW50X2lkLFxuICAgICAgfSlcbiAgICAgIC5zb3J0KChhLCBiKSA9PiAoYS5waW5fbnVtYmVyID8/IDApIC0gKGIucGluX251bWJlciA/PyAwKSlcblxuICAgIC8vIEdldCBub2RlIG5hbWVzIGZvciBjb21wb25lbnQgcG9ydHNcbiAgICBjb25zdCBub2RlcyA9IGNvbXBvbmVudFBvcnRzLm1hcCgocG9ydCkgPT4ge1xuICAgICAgcmV0dXJuIG5vZGVNYXAuZ2V0KHBvcnQuc291cmNlX3BvcnRfaWQpIHx8IFwiMFwiXG4gICAgfSlcblxuICAgIC8vIENyZWF0ZSBTUElDRSBjb21wb25lbnQgYmFzZWQgb24gdHlwZVxuICAgIGlmIChcImZ0eXBlXCIgaW4gY29tcG9uZW50KSB7XG4gICAgICBsZXQgc3BpY2VDb21wb25lbnQ6IFNwaWNlQ29tcG9uZW50IHwgbnVsbCA9IG51bGxcblxuICAgICAgc3dpdGNoIChjb21wb25lbnQuZnR5cGUpIHtcbiAgICAgICAgY2FzZSBcInNpbXBsZV9yZXNpc3RvclwiOiB7XG4gICAgICAgICAgaWYgKFwicmVzaXN0YW5jZVwiIGluIGNvbXBvbmVudCAmJiBcIm5hbWVcIiBpbiBjb21wb25lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc2lzdG9yQ21kID0gbmV3IFJlc2lzdG9yQ29tbWFuZCh7XG4gICAgICAgICAgICAgIG5hbWU6IGNvbXBvbmVudC5uYW1lLFxuICAgICAgICAgICAgICBwb3NpdGl2ZU5vZGU6IG5vZGVzWzBdIHx8IFwiMFwiLFxuICAgICAgICAgICAgICBuZWdhdGl2ZU5vZGU6IG5vZGVzWzFdIHx8IFwiMFwiLFxuICAgICAgICAgICAgICB2YWx1ZTogZm9ybWF0UmVzaXN0YW5jZShjb21wb25lbnQucmVzaXN0YW5jZSksXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgc3BpY2VDb21wb25lbnQgPSBuZXcgU3BpY2VDb21wb25lbnQoXG4gICAgICAgICAgICAgIGNvbXBvbmVudC5uYW1lLFxuICAgICAgICAgICAgICByZXNpc3RvckNtZCxcbiAgICAgICAgICAgICAgbm9kZXMsXG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcInNpbXBsZV9zd2l0Y2hcIjoge1xuICAgICAgICAgIGNvbnN0IHNhbml0aXplZEJhc2UgPSBzYW5pdGl6ZUlkZW50aWZpZXIoXG4gICAgICAgICAgICBjb21wb25lbnQubmFtZSA/PyBjb21wb25lbnQuc291cmNlX2NvbXBvbmVudF9pZCxcbiAgICAgICAgICAgIFwiU1dcIixcbiAgICAgICAgICApXG4gICAgICAgICAgY29uc3QgcG9zaXRpdmVOb2RlID0gbm9kZXNbMF0gfHwgXCIwXCJcbiAgICAgICAgICBjb25zdCBuZWdhdGl2ZU5vZGUgPSBub2Rlc1sxXSB8fCBcIjBcIlxuICAgICAgICAgIGNvbnN0IGNvbnRyb2xOb2RlID0gYE5DVFJMXyR7c2FuaXRpemVkQmFzZX1gXG4gICAgICAgICAgY29uc3QgbW9kZWxOYW1lID0gYFNXXyR7c2FuaXRpemVkQmFzZX1gXG5cbiAgICAgICAgICBjb25zdCBhc3NvY2lhdGVkU2ltdWxhdGlvblN3aXRjaCA9IHNpbXVsYXRpb25Td2l0Y2hNYXAuZ2V0KFxuICAgICAgICAgICAgY29tcG9uZW50LnNvdXJjZV9jb21wb25lbnRfaWQsXG4gICAgICAgICAgKVxuXG4gICAgICAgICAgY29uc3QgY29udHJvbFZhbHVlID0gYnVpbGRTaW11bGF0aW9uU3dpdGNoQ29udHJvbFZhbHVlKFxuICAgICAgICAgICAgYXNzb2NpYXRlZFNpbXVsYXRpb25Td2l0Y2gsXG4gICAgICAgICAgKVxuXG4gICAgICAgICAgY29uc3Qgc3dpdGNoQ21kID0gbmV3IFZvbHRhZ2VDb250cm9sbGVkU3dpdGNoQ29tbWFuZCh7XG4gICAgICAgICAgICBuYW1lOiBzYW5pdGl6ZWRCYXNlLFxuICAgICAgICAgICAgcG9zaXRpdmVOb2RlLFxuICAgICAgICAgICAgbmVnYXRpdmVOb2RlLFxuICAgICAgICAgICAgcG9zaXRpdmVDb250cm9sOiBjb250cm9sTm9kZSxcbiAgICAgICAgICAgIG5lZ2F0aXZlQ29udHJvbDogXCIwXCIsXG4gICAgICAgICAgICBtb2RlbDogbW9kZWxOYW1lLFxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICBzcGljZUNvbXBvbmVudCA9IG5ldyBTcGljZUNvbXBvbmVudChzYW5pdGl6ZWRCYXNlLCBzd2l0Y2hDbWQsIFtcbiAgICAgICAgICAgIHBvc2l0aXZlTm9kZSxcbiAgICAgICAgICAgIG5lZ2F0aXZlTm9kZSxcbiAgICAgICAgICAgIGNvbnRyb2xOb2RlLFxuICAgICAgICAgICAgXCIwXCIsXG4gICAgICAgICAgXSlcblxuICAgICAgICAgIGlmICghbmV0bGlzdC5tb2RlbHMuaGFzKG1vZGVsTmFtZSkpIHtcbiAgICAgICAgICAgIG5ldGxpc3QubW9kZWxzLnNldChcbiAgICAgICAgICAgICAgbW9kZWxOYW1lLFxuICAgICAgICAgICAgICBgLk1PREVMICR7bW9kZWxOYW1lfSBTVyhSb249MC4xIFJvZmY9MWU5IFZ0PTIuNSBWaD0wLjEpYCxcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBjb250cm9sU291cmNlTmFtZSA9IGBDVFJMXyR7c2FuaXRpemVkQmFzZX1gXG4gICAgICAgICAgY29uc3QgY29udHJvbFNvdXJjZUNtZCA9IG5ldyBWb2x0YWdlU291cmNlQ29tbWFuZCh7XG4gICAgICAgICAgICBuYW1lOiBjb250cm9sU291cmNlTmFtZSxcbiAgICAgICAgICAgIHBvc2l0aXZlTm9kZTogY29udHJvbE5vZGUsXG4gICAgICAgICAgICBuZWdhdGl2ZU5vZGU6IFwiMFwiLFxuICAgICAgICAgICAgdmFsdWU6IGNvbnRyb2xWYWx1ZSxcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgY29uc3QgY29udHJvbENvbXBvbmVudCA9IG5ldyBTcGljZUNvbXBvbmVudChcbiAgICAgICAgICAgIGNvbnRyb2xTb3VyY2VOYW1lLFxuICAgICAgICAgICAgY29udHJvbFNvdXJjZUNtZCxcbiAgICAgICAgICAgIFtjb250cm9sTm9kZSwgXCIwXCJdLFxuICAgICAgICAgIClcblxuICAgICAgICAgIG5ldGxpc3QuYWRkQ29tcG9uZW50KGNvbnRyb2xDb21wb25lbnQpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgXCJzaW1wbGVfY2FwYWNpdG9yXCI6IHtcbiAgICAgICAgICBpZiAoXCJjYXBhY2l0YW5jZVwiIGluIGNvbXBvbmVudCAmJiBcIm5hbWVcIiBpbiBjb21wb25lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGNhcGFjaXRvckNtZCA9IG5ldyBDYXBhY2l0b3JDb21tYW5kKHtcbiAgICAgICAgICAgICAgbmFtZTogY29tcG9uZW50Lm5hbWUsXG4gICAgICAgICAgICAgIHBvc2l0aXZlTm9kZTogbm9kZXNbMF0gfHwgXCIwXCIsXG4gICAgICAgICAgICAgIG5lZ2F0aXZlTm9kZTogbm9kZXNbMV0gfHwgXCIwXCIsXG4gICAgICAgICAgICAgIHZhbHVlOiBmb3JtYXRDYXBhY2l0YW5jZShjb21wb25lbnQuY2FwYWNpdGFuY2UpLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIHNwaWNlQ29tcG9uZW50ID0gbmV3IFNwaWNlQ29tcG9uZW50KFxuICAgICAgICAgICAgICBjb21wb25lbnQubmFtZSxcbiAgICAgICAgICAgICAgY2FwYWNpdG9yQ21kLFxuICAgICAgICAgICAgICBub2RlcyxcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwic2ltcGxlX2Rpb2RlXCI6IHtcbiAgICAgICAgICBpZiAoXCJuYW1lXCIgaW4gY29tcG9uZW50KSB7XG4gICAgICAgICAgICBjb25zdCBhbm9kZVBvcnQgPSBjb21wb25lbnRQb3J0cy5maW5kKFxuICAgICAgICAgICAgICAocCkgPT5cbiAgICAgICAgICAgICAgICBwLm5hbWU/LnRvTG93ZXJDYXNlKCkgPT09IFwiYW5vZGVcIiB8fFxuICAgICAgICAgICAgICAgIHAucG9ydF9oaW50cz8uaW5jbHVkZXMoXCJhbm9kZVwiKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbnN0IGNhdGhvZGVQb3J0ID0gY29tcG9uZW50UG9ydHMuZmluZChcbiAgICAgICAgICAgICAgKHApID0+XG4gICAgICAgICAgICAgICAgcC5uYW1lPy50b0xvd2VyQ2FzZSgpID09PSBcImNhdGhvZGVcIiB8fFxuICAgICAgICAgICAgICAgIHAucG9ydF9oaW50cz8uaW5jbHVkZXMoXCJjYXRob2RlXCIpLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgY29uc3QgcG9zaXRpdmVOb2RlID1cbiAgICAgICAgICAgICAgbm9kZU1hcC5nZXQoYW5vZGVQb3J0Py5zb3VyY2VfcG9ydF9pZCA/PyBcIlwiKSB8fCBcIjBcIlxuICAgICAgICAgICAgY29uc3QgbmVnYXRpdmVOb2RlID1cbiAgICAgICAgICAgICAgbm9kZU1hcC5nZXQoY2F0aG9kZVBvcnQ/LnNvdXJjZV9wb3J0X2lkID8/IFwiXCIpIHx8IFwiMFwiXG5cbiAgICAgICAgICAgIGNvbnN0IG1vZGVsTmFtZSA9IFwiRFwiXG4gICAgICAgICAgICBjb25zdCBkaW9kZUNtZCA9IG5ldyBEaW9kZUNvbW1hbmQoe1xuICAgICAgICAgICAgICBuYW1lOiBjb21wb25lbnQubmFtZSxcbiAgICAgICAgICAgICAgcG9zaXRpdmVOb2RlLFxuICAgICAgICAgICAgICBuZWdhdGl2ZU5vZGUsXG4gICAgICAgICAgICAgIG1vZGVsOiBtb2RlbE5hbWUsIC8vIGdlbmVyaWMgbW9kZWxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBuZXRsaXN0Lm1vZGVscy5zZXQobW9kZWxOYW1lLCBgLk1PREVMICR7bW9kZWxOYW1lfSBEYClcbiAgICAgICAgICAgIHNwaWNlQ29tcG9uZW50ID0gbmV3IFNwaWNlQ29tcG9uZW50KGNvbXBvbmVudC5uYW1lLCBkaW9kZUNtZCwgW1xuICAgICAgICAgICAgICBwb3NpdGl2ZU5vZGUsXG4gICAgICAgICAgICAgIG5lZ2F0aXZlTm9kZSxcbiAgICAgICAgICAgIF0pXG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcInNpbXBsZV9pbmR1Y3RvclwiOiB7XG4gICAgICAgICAgaWYgKFwiaW5kdWN0YW5jZVwiIGluIGNvbXBvbmVudCAmJiBcIm5hbWVcIiBpbiBjb21wb25lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGluZHVjdG9yQ21kID0gbmV3IEluZHVjdG9yQ29tbWFuZCh7XG4gICAgICAgICAgICAgIG5hbWU6IGNvbXBvbmVudC5uYW1lLFxuICAgICAgICAgICAgICBwb3NpdGl2ZU5vZGU6IG5vZGVzWzBdIHx8IFwiMFwiLFxuICAgICAgICAgICAgICBuZWdhdGl2ZU5vZGU6IG5vZGVzWzFdIHx8IFwiMFwiLFxuICAgICAgICAgICAgICB2YWx1ZTogZm9ybWF0SW5kdWN0YW5jZShjb21wb25lbnQuaW5kdWN0YW5jZSksXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgc3BpY2VDb21wb25lbnQgPSBuZXcgU3BpY2VDb21wb25lbnQoXG4gICAgICAgICAgICAgIGNvbXBvbmVudC5uYW1lLFxuICAgICAgICAgICAgICBpbmR1Y3RvckNtZCxcbiAgICAgICAgICAgICAgbm9kZXMsXG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcInNpbXBsZV9tb3NmZXRcIjoge1xuICAgICAgICAgIGlmIChcIm5hbWVcIiBpbiBjb21wb25lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGRyYWluUG9ydCA9IGNvbXBvbmVudFBvcnRzLmZpbmQoXG4gICAgICAgICAgICAgIChwKSA9PlxuICAgICAgICAgICAgICAgIHAubmFtZT8udG9Mb3dlckNhc2UoKSA9PT0gXCJkcmFpblwiIHx8XG4gICAgICAgICAgICAgICAgcC5wb3J0X2hpbnRzPy5pbmNsdWRlcyhcImRyYWluXCIpLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgY29uc3QgZ2F0ZVBvcnQgPSBjb21wb25lbnRQb3J0cy5maW5kKFxuICAgICAgICAgICAgICAocCkgPT5cbiAgICAgICAgICAgICAgICBwLm5hbWU/LnRvTG93ZXJDYXNlKCkgPT09IFwiZ2F0ZVwiIHx8XG4gICAgICAgICAgICAgICAgcC5wb3J0X2hpbnRzPy5pbmNsdWRlcyhcImdhdGVcIiksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb25zdCBzb3VyY2VQb3J0ID0gY29tcG9uZW50UG9ydHMuZmluZChcbiAgICAgICAgICAgICAgKHApID0+XG4gICAgICAgICAgICAgICAgcC5uYW1lPy50b0xvd2VyQ2FzZSgpID09PSBcInNvdXJjZVwiIHx8XG4gICAgICAgICAgICAgICAgcC5wb3J0X2hpbnRzPy5pbmNsdWRlcyhcInNvdXJjZVwiKSxcbiAgICAgICAgICAgIClcblxuICAgICAgICAgICAgY29uc3QgZHJhaW5Ob2RlID1cbiAgICAgICAgICAgICAgbm9kZU1hcC5nZXQoZHJhaW5Qb3J0Py5zb3VyY2VfcG9ydF9pZCA/PyBcIlwiKSB8fCBcIjBcIlxuICAgICAgICAgICAgY29uc3QgZ2F0ZU5vZGUgPSBub2RlTWFwLmdldChnYXRlUG9ydD8uc291cmNlX3BvcnRfaWQgPz8gXCJcIikgfHwgXCIwXCJcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZU5vZGUgPVxuICAgICAgICAgICAgICBub2RlTWFwLmdldChzb3VyY2VQb3J0Py5zb3VyY2VfcG9ydF9pZCA/PyBcIlwiKSB8fCBcIjBcIlxuXG4gICAgICAgICAgICAvLyBGb3IgMy1waW4gTU9TRkVUcywgc3Vic3RyYXRlIGlzIHR5cGljYWxseSBjb25uZWN0ZWQgdG8gc291cmNlXG4gICAgICAgICAgICBjb25zdCBzdWJzdHJhdGVOb2RlID0gc291cmNlTm9kZVxuXG4gICAgICAgICAgICBjb25zdCBjaGFubmVsX3R5cGUgPSAoY29tcG9uZW50IGFzIGFueSkuY2hhbm5lbF90eXBlID8/IFwiblwiXG4gICAgICAgICAgICBjb25zdCBtb3NmZXRfbW9kZSA9IChjb21wb25lbnQgYXMgYW55KS5tb3NmZXRfbW9kZSA/PyBcImVuaGFuY2VtZW50XCJcblxuICAgICAgICAgICAgY29uc3QgbW9kZWxUeXBlID0gYCR7Y2hhbm5lbF90eXBlLnRvVXBwZXJDYXNlKCl9TU9TYFxuICAgICAgICAgICAgY29uc3QgbW9kZWxOYW1lID0gYCR7bW9kZWxUeXBlfV8ke21vc2ZldF9tb2RlLnRvVXBwZXJDYXNlKCl9YFxuXG4gICAgICAgICAgICBpZiAoIW5ldGxpc3QubW9kZWxzLmhhcyhtb2RlbE5hbWUpKSB7XG4gICAgICAgICAgICAgIGlmIChtb3NmZXRfbW9kZSA9PT0gXCJlbmhhbmNlbWVudFwiKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdnRvID0gY2hhbm5lbF90eXBlID09PSBcInBcIiA/IC0xIDogMVxuICAgICAgICAgICAgICAgIG5ldGxpc3QubW9kZWxzLnNldChcbiAgICAgICAgICAgICAgICAgIG1vZGVsTmFtZSxcbiAgICAgICAgICAgICAgICAgIGAuTU9ERUwgJHttb2RlbE5hbWV9ICR7bW9kZWxUeXBlfSAoVlRPPSR7dnRvfSBLUD0wLjEpYCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbmV0bGlzdC5tb2RlbHMuc2V0KFxuICAgICAgICAgICAgICAgICAgbW9kZWxOYW1lLFxuICAgICAgICAgICAgICAgICAgYC5NT0RFTCAke21vZGVsTmFtZX0gJHttb2RlbFR5cGV9IChLUD0wLjEpYCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgbW9zZmV0Q21kID0gbmV3IE1PU0ZFVENvbW1hbmQoe1xuICAgICAgICAgICAgICBuYW1lOiBjb21wb25lbnQubmFtZSxcbiAgICAgICAgICAgICAgZHJhaW46IGRyYWluTm9kZSxcbiAgICAgICAgICAgICAgZ2F0ZTogZ2F0ZU5vZGUsXG4gICAgICAgICAgICAgIHNvdXJjZTogc291cmNlTm9kZSxcbiAgICAgICAgICAgICAgc3Vic3RyYXRlOiBzdWJzdHJhdGVOb2RlLFxuICAgICAgICAgICAgICBtb2RlbDogbW9kZWxOYW1lLFxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgc3BpY2VDb21wb25lbnQgPSBuZXcgU3BpY2VDb21wb25lbnQoY29tcG9uZW50Lm5hbWUsIG1vc2ZldENtZCwgW1xuICAgICAgICAgICAgICBkcmFpbk5vZGUsXG4gICAgICAgICAgICAgIGdhdGVOb2RlLFxuICAgICAgICAgICAgICBzb3VyY2VOb2RlLFxuICAgICAgICAgICAgXSlcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwic2ltcGxlX3RyYW5zaXN0b3JcIjoge1xuICAgICAgICAgIGlmIChcIm5hbWVcIiBpbiBjb21wb25lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbGxlY3RvclBvcnQgPSBjb21wb25lbnRQb3J0cy5maW5kKFxuICAgICAgICAgICAgICAocCkgPT5cbiAgICAgICAgICAgICAgICBwLm5hbWU/LnRvTG93ZXJDYXNlKCkgPT09IFwiY29sbGVjdG9yXCIgfHxcbiAgICAgICAgICAgICAgICBwLnBvcnRfaGludHM/LmluY2x1ZGVzKFwiY29sbGVjdG9yXCIpLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgY29uc3QgYmFzZVBvcnQgPSBjb21wb25lbnRQb3J0cy5maW5kKFxuICAgICAgICAgICAgICAocCkgPT5cbiAgICAgICAgICAgICAgICBwLm5hbWU/LnRvTG93ZXJDYXNlKCkgPT09IFwiYmFzZVwiIHx8XG4gICAgICAgICAgICAgICAgcC5wb3J0X2hpbnRzPy5pbmNsdWRlcyhcImJhc2VcIiksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb25zdCBlbWl0dGVyUG9ydCA9IGNvbXBvbmVudFBvcnRzLmZpbmQoXG4gICAgICAgICAgICAgIChwKSA9PlxuICAgICAgICAgICAgICAgIHAubmFtZT8udG9Mb3dlckNhc2UoKSA9PT0gXCJlbWl0dGVyXCIgfHxcbiAgICAgICAgICAgICAgICBwLnBvcnRfaGludHM/LmluY2x1ZGVzKFwiZW1pdHRlclwiKSxcbiAgICAgICAgICAgIClcblxuICAgICAgICAgICAgaWYgKCFjb2xsZWN0b3JQb3J0IHx8ICFiYXNlUG9ydCB8fCAhZW1pdHRlclBvcnQpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgIGBUcmFuc2lzdG9yICR7Y29tcG9uZW50Lm5hbWV9IGlzIG1pc3NpbmcgcmVxdWlyZWQgcG9ydHMgKGNvbGxlY3RvciwgYmFzZSwgZW1pdHRlcilgLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGNvbGxlY3Rvck5vZGUgPVxuICAgICAgICAgICAgICBub2RlTWFwLmdldChjb2xsZWN0b3JQb3J0LnNvdXJjZV9wb3J0X2lkKSB8fCBcIjBcIlxuICAgICAgICAgICAgY29uc3QgYmFzZU5vZGUgPSBub2RlTWFwLmdldChiYXNlUG9ydC5zb3VyY2VfcG9ydF9pZCkgfHwgXCIwXCJcbiAgICAgICAgICAgIGNvbnN0IGVtaXR0ZXJOb2RlID0gbm9kZU1hcC5nZXQoZW1pdHRlclBvcnQuc291cmNlX3BvcnRfaWQpIHx8IFwiMFwiXG5cbiAgICAgICAgICAgIGNvbnN0IHRyYW5zaXN0b3JfdHlwZSA9IChjb21wb25lbnQgYXMgYW55KS50cmFuc2lzdG9yX3R5cGUgPz8gXCJucG5cIlxuICAgICAgICAgICAgY29uc3QgbW9kZWxOYW1lID0gdHJhbnNpc3Rvcl90eXBlLnRvVXBwZXJDYXNlKClcbiAgICAgICAgICAgIGlmICghbmV0bGlzdC5tb2RlbHMuaGFzKG1vZGVsTmFtZSkpIHtcbiAgICAgICAgICAgICAgbmV0bGlzdC5tb2RlbHMuc2V0KFxuICAgICAgICAgICAgICAgIG1vZGVsTmFtZSxcbiAgICAgICAgICAgICAgICBgLk1PREVMICR7bW9kZWxOYW1lfSAke3RyYW5zaXN0b3JfdHlwZS50b1VwcGVyQ2FzZSgpfWAsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgYmp0Q21kID0gbmV3IEJKVENvbW1hbmQoe1xuICAgICAgICAgICAgICBuYW1lOiBjb21wb25lbnQubmFtZSxcbiAgICAgICAgICAgICAgY29sbGVjdG9yOiBjb2xsZWN0b3JOb2RlLFxuICAgICAgICAgICAgICBiYXNlOiBiYXNlTm9kZSxcbiAgICAgICAgICAgICAgZW1pdHRlcjogZW1pdHRlck5vZGUsXG4gICAgICAgICAgICAgIG1vZGVsOiBtb2RlbE5hbWUsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgc3BpY2VDb21wb25lbnQgPSBuZXcgU3BpY2VDb21wb25lbnQoY29tcG9uZW50Lm5hbWUsIGJqdENtZCwgW1xuICAgICAgICAgICAgICBjb2xsZWN0b3JOb2RlLFxuICAgICAgICAgICAgICBiYXNlTm9kZSxcbiAgICAgICAgICAgICAgZW1pdHRlck5vZGUsXG4gICAgICAgICAgICBdKVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChzcGljZUNvbXBvbmVudCkge1xuICAgICAgICBuZXRsaXN0LmFkZENvbXBvbmVudChzcGljZUNvbXBvbmVudClcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBQcm9jZXNzIHNpbXVsYXRpb24gdm9sdGFnZSBzb3VyY2VzXG4gIGNvbnN0IHNpbXVsYXRpb25Wb2x0YWdlU291cmNlcyA9XG4gICAgc3UoY2lyY3VpdEpzb24pLnNpbXVsYXRpb25fdm9sdGFnZV9zb3VyY2UubGlzdCgpXG5cbiAgZm9yIChjb25zdCBzaW1Tb3VyY2Ugb2Ygc2ltdWxhdGlvblZvbHRhZ2VTb3VyY2VzKSB7XG4gICAgaWYgKHNpbVNvdXJjZS50eXBlICE9PSBcInNpbXVsYXRpb25fdm9sdGFnZV9zb3VyY2VcIikgY29udGludWVcblxuICAgIGlmICgoc2ltU291cmNlIGFzIGFueSkuaXNfZGNfc291cmNlID09PSBmYWxzZSkge1xuICAgICAgLy8gQUMgU291cmNlXG4gICAgICBpZiAoXG4gICAgICAgIFwidGVybWluYWwxX3NvdXJjZV9wb3J0X2lkXCIgaW4gc2ltU291cmNlICYmXG4gICAgICAgIFwidGVybWluYWwyX3NvdXJjZV9wb3J0X2lkXCIgaW4gc2ltU291cmNlICYmXG4gICAgICAgIChzaW1Tb3VyY2UgYXMgYW55KS50ZXJtaW5hbDFfc291cmNlX3BvcnRfaWQgJiZcbiAgICAgICAgKHNpbVNvdXJjZSBhcyBhbnkpLnRlcm1pbmFsMl9zb3VyY2VfcG9ydF9pZFxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IHBvc2l0aXZlTm9kZSA9XG4gICAgICAgICAgbm9kZU1hcC5nZXQoKHNpbVNvdXJjZSBhcyBhbnkpLnRlcm1pbmFsMV9zb3VyY2VfcG9ydF9pZCkgfHwgXCIwXCJcbiAgICAgICAgY29uc3QgbmVnYXRpdmVOb2RlID1cbiAgICAgICAgICBub2RlTWFwLmdldCgoc2ltU291cmNlIGFzIGFueSkudGVybWluYWwyX3NvdXJjZV9wb3J0X2lkKSB8fCBcIjBcIlxuXG4gICAgICAgIGxldCB2YWx1ZSA9IFwiXCJcbiAgICAgICAgY29uc3Qgd2F2ZV9zaGFwZSA9IChzaW1Tb3VyY2UgYXMgYW55KS53YXZlX3NoYXBlXG4gICAgICAgIGlmICh3YXZlX3NoYXBlID09PSBcInNpbmV3YXZlXCIpIHtcbiAgICAgICAgICBjb25zdCB2X29mZnNldCA9IDAgLy8gbm90IHByb3ZpZGVkIGluIGNpcmN1aXRKc29uXG4gICAgICAgICAgY29uc3Qgdl9wZWFrID0gKHNpbVNvdXJjZSBhcyBhbnkpLnZvbHRhZ2UgPz8gMFxuICAgICAgICAgIGNvbnN0IGZyZXEgPSAoc2ltU291cmNlIGFzIGFueSkuZnJlcXVlbmN5ID8/IDBcbiAgICAgICAgICBjb25zdCBkZWxheSA9IDAgLy8gbm90IHByb3ZpZGVkIGluIGNpcmN1aXRKc29uXG4gICAgICAgICAgY29uc3QgZGFtcGluZ19mYWN0b3IgPSAwIC8vIG5vdCBwcm92aWRlZCBpbiBjaXJjdWl0SnNvblxuICAgICAgICAgIGNvbnN0IHBoYXNlID0gKHNpbVNvdXJjZSBhcyBhbnkpLnBoYXNlID8/IDBcbiAgICAgICAgICBpZiAoZnJlcSA+IDApIHtcbiAgICAgICAgICAgIHZhbHVlID0gYFNJTigke3Zfb2Zmc2V0fSAke3ZfcGVha30gJHtmcmVxfSAke2RlbGF5fSAke2RhbXBpbmdfZmFjdG9yfSAke3BoYXNlfSlgXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhbHVlID0gYERDICR7KHNpbVNvdXJjZSBhcyBhbnkpLnZvbHRhZ2UgPz8gMH1gXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHdhdmVfc2hhcGUgPT09IFwic3F1YXJlXCIpIHtcbiAgICAgICAgICBjb25zdCB2X2luaXRpYWwgPSAwXG4gICAgICAgICAgY29uc3Qgdl9wdWxzZWQgPSAoc2ltU291cmNlIGFzIGFueSkudm9sdGFnZSA/PyAwXG4gICAgICAgICAgY29uc3QgZnJlcSA9IChzaW1Tb3VyY2UgYXMgYW55KS5mcmVxdWVuY3kgPz8gMFxuICAgICAgICAgIGNvbnN0IHBlcmlvZF9mcm9tX2ZyZXEgPSBmcmVxID09PSAwID8gSW5maW5pdHkgOiAxIC8gZnJlcVxuICAgICAgICAgIGNvbnN0IHBlcmlvZCA9IChzaW1Tb3VyY2UgYXMgYW55KS5wZXJpb2QgPz8gcGVyaW9kX2Zyb21fZnJlcVxuICAgICAgICAgIGNvbnN0IGR1dHlfY3ljbGUgPSAoc2ltU291cmNlIGFzIGFueSkuZHV0eV9jeWNsZSA/PyAwLjVcbiAgICAgICAgICBjb25zdCBwdWxzZV93aWR0aCA9IHBlcmlvZCAqIGR1dHlfY3ljbGVcbiAgICAgICAgICBjb25zdCBkZWxheSA9IDBcbiAgICAgICAgICBjb25zdCByaXNlX3RpbWUgPSBcIjFuXCJcbiAgICAgICAgICBjb25zdCBmYWxsX3RpbWUgPSBcIjFuXCJcbiAgICAgICAgICB2YWx1ZSA9IGBQVUxTRSgke3ZfaW5pdGlhbH0gJHt2X3B1bHNlZH0gJHtkZWxheX0gJHtyaXNlX3RpbWV9ICR7ZmFsbF90aW1lfSAke3B1bHNlX3dpZHRofSAke3BlcmlvZH0pYFxuICAgICAgICB9IGVsc2UgaWYgKChzaW1Tb3VyY2UgYXMgYW55KS52b2x0YWdlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB2YWx1ZSA9IGBEQyAkeyhzaW1Tb3VyY2UgYXMgYW55KS52b2x0YWdlfWBcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgIGNvbnN0IHZvbHRhZ2VTb3VyY2VDbWQgPSBuZXcgVm9sdGFnZVNvdXJjZUNvbW1hbmQoe1xuICAgICAgICAgICAgbmFtZTogc2ltU291cmNlLnNpbXVsYXRpb25fdm9sdGFnZV9zb3VyY2VfaWQsXG4gICAgICAgICAgICBwb3NpdGl2ZU5vZGUsXG4gICAgICAgICAgICBuZWdhdGl2ZU5vZGUsXG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgY29uc3Qgc3BpY2VDb21wb25lbnQgPSBuZXcgU3BpY2VDb21wb25lbnQoXG4gICAgICAgICAgICBzaW1Tb3VyY2Uuc2ltdWxhdGlvbl92b2x0YWdlX3NvdXJjZV9pZCxcbiAgICAgICAgICAgIHZvbHRhZ2VTb3VyY2VDbWQsXG4gICAgICAgICAgICBbcG9zaXRpdmVOb2RlLCBuZWdhdGl2ZU5vZGVdLFxuICAgICAgICAgIClcbiAgICAgICAgICBuZXRsaXN0LmFkZENvbXBvbmVudChzcGljZUNvbXBvbmVudClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBEQyBTb3VyY2UgKGlzX2RjX3NvdXJjZSBpcyB0cnVlIG9yIHVuZGVmaW5lZClcbiAgICAgIGNvbnN0IHBvc2l0aXZlUG9ydElkID1cbiAgICAgICAgKHNpbVNvdXJjZSBhcyBhbnkpLnBvc2l0aXZlX3NvdXJjZV9wb3J0X2lkID8/XG4gICAgICAgIChzaW1Tb3VyY2UgYXMgYW55KS50ZXJtaW5hbDFfc291cmNlX3BvcnRfaWRcbiAgICAgIGNvbnN0IG5lZ2F0aXZlUG9ydElkID1cbiAgICAgICAgKHNpbVNvdXJjZSBhcyBhbnkpLm5lZ2F0aXZlX3NvdXJjZV9wb3J0X2lkID8/XG4gICAgICAgIChzaW1Tb3VyY2UgYXMgYW55KS50ZXJtaW5hbDJfc291cmNlX3BvcnRfaWRcblxuICAgICAgaWYgKFxuICAgICAgICBwb3NpdGl2ZVBvcnRJZCAmJlxuICAgICAgICBuZWdhdGl2ZVBvcnRJZCAmJlxuICAgICAgICBcInZvbHRhZ2VcIiBpbiBzaW1Tb3VyY2UgJiZcbiAgICAgICAgKHNpbVNvdXJjZSBhcyBhbnkpLnZvbHRhZ2UgIT09IHVuZGVmaW5lZFxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IHBvc2l0aXZlTm9kZSA9IG5vZGVNYXAuZ2V0KHBvc2l0aXZlUG9ydElkKSB8fCBcIjBcIlxuICAgICAgICBjb25zdCBuZWdhdGl2ZU5vZGUgPSBub2RlTWFwLmdldChuZWdhdGl2ZVBvcnRJZCkgfHwgXCIwXCJcblxuICAgICAgICBjb25zdCB2b2x0YWdlU291cmNlQ21kID0gbmV3IFZvbHRhZ2VTb3VyY2VDb21tYW5kKHtcbiAgICAgICAgICBuYW1lOiBzaW1Tb3VyY2Uuc2ltdWxhdGlvbl92b2x0YWdlX3NvdXJjZV9pZCxcbiAgICAgICAgICBwb3NpdGl2ZU5vZGUsXG4gICAgICAgICAgbmVnYXRpdmVOb2RlLFxuICAgICAgICAgIHZhbHVlOiBgREMgJHsoc2ltU291cmNlIGFzIGFueSkudm9sdGFnZX1gLFxuICAgICAgICB9KVxuXG4gICAgICAgIGNvbnN0IHNwaWNlQ29tcG9uZW50ID0gbmV3IFNwaWNlQ29tcG9uZW50KFxuICAgICAgICAgIHNpbVNvdXJjZS5zaW11bGF0aW9uX3ZvbHRhZ2Vfc291cmNlX2lkLFxuICAgICAgICAgIHZvbHRhZ2VTb3VyY2VDbWQsXG4gICAgICAgICAgW3Bvc2l0aXZlTm9kZSwgbmVnYXRpdmVOb2RlXSxcbiAgICAgICAgKVxuICAgICAgICBuZXRsaXN0LmFkZENvbXBvbmVudChzcGljZUNvbXBvbmVudClcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBzaW1FeHBlcmltZW50ID0gY2lyY3VpdEpzb24uZmluZChcbiAgICAoZWxtKSA9PiBlbG0udHlwZSA9PT0gXCJzaW11bGF0aW9uX2V4cGVyaW1lbnRcIixcbiAgKVxuXG4gIGlmIChzaW1FeHBlcmltZW50KSB7XG4gICAgLy8gUHJvY2VzcyBzaW11bGF0aW9uIHZvbHRhZ2UgcHJvYmVzXG4gICAgaWYgKHNpbXVsYXRpb25Qcm9iZXMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3Qgbm9kZXNUb1Byb2JlID0gbmV3IFNldDxzdHJpbmc+KClcblxuICAgICAgY29uc3QgZ2V0UG9ydElkRnJvbU5ldElkID0gKG5ldElkOiBzdHJpbmcpID0+IHtcbiAgICAgICAgY29uc3QgdHJhY2UgPSBzb3VyY2VUcmFjZXMuZmluZCgodCkgPT5cbiAgICAgICAgICB0LmNvbm5lY3RlZF9zb3VyY2VfbmV0X2lkcy5pbmNsdWRlcyhuZXRJZCksXG4gICAgICAgIClcbiAgICAgICAgcmV0dXJuIHRyYWNlPy5jb25uZWN0ZWRfc291cmNlX3BvcnRfaWRzWzBdXG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgcHJvYmUgb2Ygc2ltdWxhdGlvblByb2Jlcykge1xuICAgICAgICBsZXQgc2lnbmFsUG9ydElkID0gcHJvYmUuc2lnbmFsX2lucHV0X3NvdXJjZV9wb3J0X2lkXG4gICAgICAgIGlmICghc2lnbmFsUG9ydElkKSB7XG4gICAgICAgICAgY29uc3Qgc2lnbmFsTmV0SWQgPSBwcm9iZS5zaWduYWxfaW5wdXRfc291cmNlX25ldF9pZFxuICAgICAgICAgIGlmIChzaWduYWxOZXRJZCkge1xuICAgICAgICAgICAgc2lnbmFsUG9ydElkID0gZ2V0UG9ydElkRnJvbU5ldElkKHNpZ25hbE5ldElkKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghc2lnbmFsUG9ydElkKSBjb250aW51ZVxuXG4gICAgICAgIGNvbnN0IHNpZ25hbE5vZGVOYW1lID0gbm9kZU1hcC5nZXQoc2lnbmFsUG9ydElkKVxuICAgICAgICBpZiAoIXNpZ25hbE5vZGVOYW1lKSBjb250aW51ZVxuXG4gICAgICAgIGxldCByZWZlcmVuY2VQb3J0SWQgPSBwcm9iZS5yZWZlcmVuY2VfaW5wdXRfc291cmNlX3BvcnRfaWRcbiAgICAgICAgaWYgKCFyZWZlcmVuY2VQb3J0SWQgJiYgcHJvYmUucmVmZXJlbmNlX2lucHV0X3NvdXJjZV9uZXRfaWQpIHtcbiAgICAgICAgICByZWZlcmVuY2VQb3J0SWQgPSBnZXRQb3J0SWRGcm9tTmV0SWQoXG4gICAgICAgICAgICBwcm9iZS5yZWZlcmVuY2VfaW5wdXRfc291cmNlX25ldF9pZCxcbiAgICAgICAgICApXG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVmZXJlbmNlUG9ydElkKSB7XG4gICAgICAgICAgY29uc3QgcmVmZXJlbmNlTm9kZU5hbWUgPSBub2RlTWFwLmdldChyZWZlcmVuY2VQb3J0SWQpXG4gICAgICAgICAgaWYgKHJlZmVyZW5jZU5vZGVOYW1lICYmIHJlZmVyZW5jZU5vZGVOYW1lICE9PSBcIjBcIikge1xuICAgICAgICAgICAgbm9kZXNUb1Byb2JlLmFkZChgVigke3NpZ25hbE5vZGVOYW1lfSwke3JlZmVyZW5jZU5vZGVOYW1lfSlgKVxuICAgICAgICAgIH0gZWxzZSBpZiAoc2lnbmFsTm9kZU5hbWUgIT09IFwiMFwiKSB7XG4gICAgICAgICAgICBub2Rlc1RvUHJvYmUuYWRkKGBWKCR7c2lnbmFsTm9kZU5hbWV9KWApXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFNpbmdsZS1lbmRlZCBwcm9iZVxuICAgICAgICAgIGlmIChzaWduYWxOb2RlTmFtZSAhPT0gXCIwXCIpIHtcbiAgICAgICAgICAgIG5vZGVzVG9Qcm9iZS5hZGQoYFYoJHtzaWduYWxOb2RlTmFtZX0pYClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICBub2Rlc1RvUHJvYmUuc2l6ZSA+IDAgJiZcbiAgICAgICAgKHNpbUV4cGVyaW1lbnQgYXMgYW55KS5leHBlcmltZW50X3R5cGU/LmluY2x1ZGVzKFwidHJhbnNpZW50XCIpXG4gICAgICApIHtcbiAgICAgICAgbmV0bGlzdC5wcmludFN0YXRlbWVudHMucHVzaChcbiAgICAgICAgICBgLlBSSU5UIFRSQU4gJHtbLi4ubm9kZXNUb1Byb2JlXS5qb2luKFwiIFwiKX1gLFxuICAgICAgICApXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgdGltZVBlclN0ZXAgPSAoc2ltRXhwZXJpbWVudCBhcyBhbnkpLnRpbWVfcGVyX3N0ZXBcbiAgICBjb25zdCBlbmRUaW1lID0gKHNpbUV4cGVyaW1lbnQgYXMgYW55KS5lbmRfdGltZV9tc1xuICAgIGNvbnN0IHN0YXJ0VGltZU1zID0gKHNpbUV4cGVyaW1lbnQgYXMgYW55KS5zdGFydF90aW1lX21zXG5cbiAgICBpZiAodGltZVBlclN0ZXAgJiYgZW5kVGltZSkge1xuICAgICAgLy8gY2lyY3VpdC1qc29uIHZhbHVlcyBhcmUgaW4gbXMsIFNQSUNFIHJlcXVpcmVzIHNlY29uZHNcbiAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IChzdGFydFRpbWVNcyA/PyAwKSAvIDEwMDBcblxuICAgICAgbGV0IHRyYW5DbWQgPSBgLnRyYW4gJHtmb3JtYXROdW1iZXJGb3JTcGljZShcbiAgICAgICAgdGltZVBlclN0ZXAgLyAxMDAwLFxuICAgICAgKX0gJHtmb3JtYXROdW1iZXJGb3JTcGljZShlbmRUaW1lIC8gMTAwMCl9YFxuICAgICAgaWYgKHN0YXJ0VGltZSA+IDApIHtcbiAgICAgICAgdHJhbkNtZCArPSBgICR7Zm9ybWF0TnVtYmVyRm9yU3BpY2Uoc3RhcnRUaW1lKX1gXG4gICAgICB9XG4gICAgICB0cmFuQ21kICs9IFwiIFVJQ1wiXG4gICAgICBuZXRsaXN0LnRyYW5Db21tYW5kID0gdHJhbkNtZFxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXRsaXN0XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFJlc2lzdGFuY2UocmVzaXN0YW5jZTogbnVtYmVyKTogc3RyaW5nIHtcbiAgaWYgKHJlc2lzdGFuY2UgPj0gMWU2KSByZXR1cm4gYCR7cmVzaXN0YW5jZSAvIDFlNn1NRUdgXG4gIGlmIChyZXNpc3RhbmNlID49IDFlMykgcmV0dXJuIGAke3Jlc2lzdGFuY2UgLyAxZTN9S2BcbiAgcmV0dXJuIHJlc2lzdGFuY2UudG9TdHJpbmcoKVxufVxuXG5mdW5jdGlvbiBmb3JtYXRDYXBhY2l0YW5jZShjYXBhY2l0YW5jZTogbnVtYmVyKTogc3RyaW5nIHtcbiAgaWYgKGNhcGFjaXRhbmNlID49IDFlLTMpIHJldHVybiBgJHtjYXBhY2l0YW5jZSAqIDFlM31NYFxuICBpZiAoY2FwYWNpdGFuY2UgPj0gMWUtNikgcmV0dXJuIGAke2NhcGFjaXRhbmNlICogMWU2fVVgXG4gIGlmIChjYXBhY2l0YW5jZSA+PSAxZS05KSByZXR1cm4gYCR7Y2FwYWNpdGFuY2UgKiAxZTl9TmBcbiAgaWYgKGNhcGFjaXRhbmNlID49IDFlLTEyKSByZXR1cm4gYCR7Y2FwYWNpdGFuY2UgKiAxZTEyfVBgXG4gIHJldHVybiBjYXBhY2l0YW5jZS50b1N0cmluZygpXG59XG5cbmZ1bmN0aW9uIGZvcm1hdEluZHVjdGFuY2UoaW5kdWN0YW5jZTogbnVtYmVyKTogc3RyaW5nIHtcbiAgaWYgKGluZHVjdGFuY2UgPj0gMSkgcmV0dXJuIGluZHVjdGFuY2UudG9TdHJpbmcoKVxuICBpZiAoaW5kdWN0YW5jZSA+PSAxZS0zKSByZXR1cm4gYCR7aW5kdWN0YW5jZSAqIDFlM31tYFxuICBpZiAoaW5kdWN0YW5jZSA+PSAxZS02KSByZXR1cm4gYCR7aW5kdWN0YW5jZSAqIDFlNn11YFxuICBpZiAoaW5kdWN0YW5jZSA+PSAxZS05KSByZXR1cm4gYCR7aW5kdWN0YW5jZSAqIDFlOX1uYFxuICBpZiAoaW5kdWN0YW5jZSA+PSAxZS0xMikgcmV0dXJuIGAke2luZHVjdGFuY2UgKiAxZTEyfXBgXG4gIHJldHVybiBpbmR1Y3RhbmNlLnRvU3RyaW5nKClcbn1cblxuZnVuY3Rpb24gc2FuaXRpemVJZGVudGlmaWVyKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQsIHByZWZpeDogc3RyaW5nKSB7XG4gIGlmICghdmFsdWUpIHJldHVybiBwcmVmaXhcbiAgY29uc3Qgc2FuaXRpemVkID0gdmFsdWUucmVwbGFjZSgvW15BLVphLXowLTlfXS9nLCBcIl9cIilcbiAgaWYgKCFzYW5pdGl6ZWQpIHJldHVybiBwcmVmaXhcbiAgaWYgKC9eWzAtOV0vLnRlc3Qoc2FuaXRpemVkKSkge1xuICAgIHJldHVybiBgJHtwcmVmaXh9XyR7c2FuaXRpemVkfWBcbiAgfVxuICByZXR1cm4gc2FuaXRpemVkXG59XG5cbmZ1bmN0aW9uIGJ1aWxkU2ltdWxhdGlvblN3aXRjaENvbnRyb2xWYWx1ZShcbiAgc2ltdWxhdGlvblN3aXRjaDogU2ltdWxhdGlvblN3aXRjaCB8IHVuZGVmaW5lZCxcbikge1xuICBjb25zdCBoaWdoVm9sdGFnZSA9IDVcbiAgY29uc3QgbG93Vm9sdGFnZSA9IDBcbiAgY29uc3QgcmlzZVRpbWUgPSBcIjFuXCJcbiAgY29uc3QgZmFsbFRpbWUgPSBcIjFuXCJcblxuICBpZiAoIXNpbXVsYXRpb25Td2l0Y2gpIHtcbiAgICByZXR1cm4gYERDICR7bG93Vm9sdGFnZX1gXG4gIH1cblxuICBjb25zdCBzdGFydHNDbG9zZWQgPSBzaW11bGF0aW9uU3dpdGNoLnN0YXJ0c19jbG9zZWQgPz8gZmFsc2VcbiAgY29uc3QgY2xvc2VzQXQgPSBzaW11bGF0aW9uU3dpdGNoLmNsb3Nlc19hdCA/PyAwXG4gIGNvbnN0IG9wZW5zQXQgPSBzaW11bGF0aW9uU3dpdGNoLm9wZW5zX2F0XG4gIGNvbnN0IHN3aXRjaGluZ0ZyZXF1ZW5jeSA9IHNpbXVsYXRpb25Td2l0Y2guc3dpdGNoaW5nX2ZyZXF1ZW5jeVxuXG4gIGNvbnN0IFtpbml0aWFsVm9sdGFnZSwgcHVsc2VkVm9sdGFnZV0gPSBzdGFydHNDbG9zZWRcbiAgICA/IFtoaWdoVm9sdGFnZSwgbG93Vm9sdGFnZV1cbiAgICA6IFtsb3dWb2x0YWdlLCBoaWdoVm9sdGFnZV1cblxuICBpZiAoc3dpdGNoaW5nRnJlcXVlbmN5ICYmIHN3aXRjaGluZ0ZyZXF1ZW5jeSA+IDApIHtcbiAgICBjb25zdCBwZXJpb2QgPSAxIC8gc3dpdGNoaW5nRnJlcXVlbmN5XG4gICAgY29uc3Qgd2lkdGhGcm9tT3BlbkNsb3NlID1cbiAgICAgIG9wZW5zQXQgJiYgb3BlbnNBdCA+IGNsb3Nlc0F0ID8gTWF0aC5taW4ob3BlbnNBdCAtIGNsb3Nlc0F0LCBwZXJpb2QpIDogMFxuICAgIGNvbnN0IHB1bHNlV2lkdGggPVxuICAgICAgd2lkdGhGcm9tT3BlbkNsb3NlID4gMCA/IHdpZHRoRnJvbU9wZW5DbG9zZSA6IE1hdGgubWF4KHBlcmlvZCAvIDIsIDFlLTkpXG5cbiAgICByZXR1cm4gYFBVTFNFKCR7Zm9ybWF0TnVtYmVyRm9yU3BpY2UoaW5pdGlhbFZvbHRhZ2UpfSAke2Zvcm1hdE51bWJlckZvclNwaWNlKHB1bHNlZFZvbHRhZ2UpfSAke2Zvcm1hdE51bWJlckZvclNwaWNlKGNsb3Nlc0F0KX0gJHtyaXNlVGltZX0gJHtmYWxsVGltZX0gJHtmb3JtYXROdW1iZXJGb3JTcGljZShwdWxzZVdpZHRoKX0gJHtmb3JtYXROdW1iZXJGb3JTcGljZShwZXJpb2QpfSlgXG4gIH1cblxuICBpZiAob3BlbnNBdCAhPT0gdW5kZWZpbmVkICYmIG9wZW5zQXQgPiBjbG9zZXNBdCkge1xuICAgIGNvbnN0IHB1bHNlV2lkdGggPSBNYXRoLm1heChvcGVuc0F0IC0gY2xvc2VzQXQsIDFlLTkpXG4gICAgY29uc3QgcGVyaW9kID0gY2xvc2VzQXQgKyBwdWxzZVdpZHRoICogMlxuXG4gICAgcmV0dXJuIGBQVUxTRSgke2Zvcm1hdE51bWJlckZvclNwaWNlKGluaXRpYWxWb2x0YWdlKX0gJHtmb3JtYXROdW1iZXJGb3JTcGljZShwdWxzZWRWb2x0YWdlKX0gJHtmb3JtYXROdW1iZXJGb3JTcGljZShjbG9zZXNBdCl9ICR7cmlzZVRpbWV9ICR7ZmFsbFRpbWV9ICR7Zm9ybWF0TnVtYmVyRm9yU3BpY2UocHVsc2VXaWR0aCl9ICR7Zm9ybWF0TnVtYmVyRm9yU3BpY2UocGVyaW9kKX0pYFxuICB9XG5cbiAgaWYgKGNsb3Nlc0F0ID4gMCkge1xuICAgIGNvbnN0IHBlcmlvZCA9IGNsb3Nlc0F0ICogMlxuICAgIGNvbnN0IHB1bHNlV2lkdGggPSBNYXRoLm1heChwZXJpb2QgLyAyLCAxZS05KVxuICAgIHJldHVybiBgUFVMU0UoJHtmb3JtYXROdW1iZXJGb3JTcGljZShpbml0aWFsVm9sdGFnZSl9ICR7Zm9ybWF0TnVtYmVyRm9yU3BpY2UocHVsc2VkVm9sdGFnZSl9ICR7Zm9ybWF0TnVtYmVyRm9yU3BpY2UoY2xvc2VzQXQpfSAke3Jpc2VUaW1lfSAke2ZhbGxUaW1lfSAke2Zvcm1hdE51bWJlckZvclNwaWNlKHB1bHNlV2lkdGgpfSAke2Zvcm1hdE51bWJlckZvclNwaWNlKHBlcmlvZCl9KWBcbiAgfVxuXG4gIHJldHVybiBgREMgJHtzdGFydHNDbG9zZWQgPyBoaWdoVm9sdGFnZSA6IGxvd1ZvbHRhZ2V9YFxufVxuXG5mdW5jdGlvbiBmb3JtYXROdW1iZXJGb3JTcGljZSh2YWx1ZTogbnVtYmVyKSB7XG4gIGlmICghTnVtYmVyLmlzRmluaXRlKHZhbHVlKSkgcmV0dXJuIGAke3ZhbHVlfWBcbiAgaWYgKHZhbHVlID09PSAwKSByZXR1cm4gXCIwXCJcblxuICBjb25zdCBhYnNWYWx1ZSA9IE1hdGguYWJzKHZhbHVlKVxuXG4gIGlmIChhYnNWYWx1ZSA+PSAxZTMgfHwgYWJzVmFsdWUgPD0gMWUtMykge1xuICAgIHJldHVybiBOdW1iZXIodmFsdWUudG9FeHBvbmVudGlhbCg2KSkudG9TdHJpbmcoKVxuICB9XG5cbiAgcmV0dXJuIE51bWJlcih2YWx1ZS50b1ByZWNpc2lvbig2KSkudG9TdHJpbmcoKVxufVxuIiwgImV4cG9ydCBjbGFzcyBTcGljZVN1YmNpcmN1aXQge1xuICBuYW1lOiBzdHJpbmdcbiAgcGluczogc3RyaW5nW11cblxuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcsIHBpbnM6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5uYW1lID0gbmFtZVxuICAgIHRoaXMucGlucyA9IHBpbnNcbiAgfVxuXG4gIHRvU3BpY2VTdHJpbmcoKTogc3RyaW5nIHtcbiAgICBjb25zdCBwaW5TdHJpbmcgPSB0aGlzLnBpbnMuam9pbihcIiBcIilcbiAgICBjb25zdCBoZWFkZXIgPSBgLlNVQkNLVCAke3RoaXMubmFtZX0gJHtwaW5TdHJpbmd9YFxuICAgIGNvbnN0IGZvb3RlciA9IGAuRU5EUyAke3RoaXMubmFtZX1gXG5cbiAgICBjb25zdCBib2R5ID0gYCogUGxhY2Vob2xkZXIgZm9yICR7dGhpcy5uYW1lfS4gTm8gZGVmaW5pdGlvbiBmb3VuZCBpbiBjaXJjdWl0IEpTT04uYFxuXG4gICAgcmV0dXJuIFtcIlwiLCBoZWFkZXIsIGJvZHksIGZvb3Rlcl0uam9pbihcIlxcblwiKVxuICB9XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBCYXNlU3BpY2VDb21tYW5kIH0gZnJvbSBcIi4vQmFzZVNwaWNlQ29tbWFuZFwiXG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3VycmVudFNvdXJjZUNvbW1hbmRQcm9wcyB7XG4gIG5hbWU6IHN0cmluZ1xuICBwb3NpdGl2ZU5vZGU6IHN0cmluZ1xuICBuZWdhdGl2ZU5vZGU6IHN0cmluZ1xuICB2YWx1ZT86IHN0cmluZ1xuICBhY01hZ25pdHVkZT86IHN0cmluZ1xuICBhY1BoYXNlPzogc3RyaW5nXG59XG5cbmV4cG9ydCBjbGFzcyBDdXJyZW50U291cmNlQ29tbWFuZCBpbXBsZW1lbnRzIEJhc2VTcGljZUNvbW1hbmQge1xuICBjb21tYW5kTmFtZSA9IFwiY3VycmVudF9zb3VyY2VcIiBhcyBjb25zdFxuICBwcm9wczogQ3VycmVudFNvdXJjZUNvbW1hbmRQcm9wc1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBDdXJyZW50U291cmNlQ29tbWFuZFByb3BzKSB7XG4gICAgdGhpcy5wcm9wcyA9IHByb3BzXG4gIH1cblxuICB0b1NwaWNlU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgY29uc3QgeyBuYW1lLCBwb3NpdGl2ZU5vZGUsIG5lZ2F0aXZlTm9kZSwgdmFsdWUsIGFjTWFnbml0dWRlLCBhY1BoYXNlIH0gPVxuICAgICAgdGhpcy5wcm9wc1xuICAgIGxldCBzcGljZVN0cmluZyA9IGBJJHtuYW1lfSAke3Bvc2l0aXZlTm9kZX0gJHtuZWdhdGl2ZU5vZGV9YFxuICAgIGlmICh2YWx1ZSkge1xuICAgICAgc3BpY2VTdHJpbmcgKz0gYCAke3ZhbHVlfWBcbiAgICB9XG4gICAgaWYgKGFjTWFnbml0dWRlKSB7XG4gICAgICBzcGljZVN0cmluZyArPSBgIEFDICR7YWNNYWduaXR1ZGV9YFxuICAgICAgaWYgKGFjUGhhc2UpIHtcbiAgICAgICAgc3BpY2VTdHJpbmcgKz0gYCAke2FjUGhhc2V9YFxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc3BpY2VTdHJpbmdcbiAgfVxufVxuIiwgImltcG9ydCB0eXBlIHsgQmFzZVNwaWNlQ29tbWFuZCB9IGZyb20gXCIuL0Jhc2VTcGljZUNvbW1hbmRcIlxuXG5leHBvcnQgaW50ZXJmYWNlIEluZHVjdG9yQ291cGxpbmdDb21tYW5kUHJvcHMge1xuICBuYW1lOiBzdHJpbmdcbiAgaW5kdWN0b3JzOiBzdHJpbmdbXVxuICBjb3VwbGluZzogc3RyaW5nXG59XG5cbmV4cG9ydCBjbGFzcyBJbmR1Y3RvckNvdXBsaW5nQ29tbWFuZCBpbXBsZW1lbnRzIEJhc2VTcGljZUNvbW1hbmQge1xuICBjb21tYW5kTmFtZSA9IFwiaW5kdWN0b3JfY291cGxpbmdcIiBhcyBjb25zdFxuICBwcm9wczogSW5kdWN0b3JDb3VwbGluZ0NvbW1hbmRQcm9wc1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBJbmR1Y3RvckNvdXBsaW5nQ29tbWFuZFByb3BzKSB7XG4gICAgdGhpcy5wcm9wcyA9IHByb3BzXG4gIH1cblxuICB0b1NwaWNlU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgY29uc3QgeyBuYW1lLCBpbmR1Y3RvcnMsIGNvdXBsaW5nIH0gPSB0aGlzLnByb3BzXG4gICAgcmV0dXJuIGBLJHtuYW1lfSAke2luZHVjdG9ycy5qb2luKFwiIFwiKX0gJHtjb3VwbGluZ31gXG4gIH1cbn1cbiIsICJpbXBvcnQgdHlwZSB7IEJhc2VTcGljZUNvbW1hbmQgfSBmcm9tIFwiLi9CYXNlU3BpY2VDb21tYW5kXCJcblxuZXhwb3J0IGludGVyZmFjZSBKRkVUQ29tbWFuZFByb3BzIHtcbiAgbmFtZTogc3RyaW5nXG4gIGRyYWluOiBzdHJpbmdcbiAgZ2F0ZTogc3RyaW5nXG4gIHNvdXJjZTogc3RyaW5nXG4gIG1vZGVsOiBzdHJpbmdcbiAgYXJlYT86IHN0cmluZ1xufVxuXG5leHBvcnQgY2xhc3MgSkZFVENvbW1hbmQgaW1wbGVtZW50cyBCYXNlU3BpY2VDb21tYW5kIHtcbiAgY29tbWFuZE5hbWUgPSBcImpmZXRcIiBhcyBjb25zdFxuICBwcm9wczogSkZFVENvbW1hbmRQcm9wc1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBKRkVUQ29tbWFuZFByb3BzKSB7XG4gICAgdGhpcy5wcm9wcyA9IHByb3BzXG4gIH1cblxuICB0b1NwaWNlU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgY29uc3QgeyBuYW1lLCBkcmFpbiwgZ2F0ZSwgc291cmNlLCBtb2RlbCwgYXJlYSB9ID0gdGhpcy5wcm9wc1xuICAgIGxldCBzcGljZVN0cmluZyA9IGBKJHtuYW1lfSAke2RyYWlufSAke2dhdGV9ICR7c291cmNlfSAke21vZGVsfWBcbiAgICBpZiAoYXJlYSkge1xuICAgICAgc3BpY2VTdHJpbmcgKz0gYCAke2FyZWF9YFxuICAgIH1cbiAgICByZXR1cm4gc3BpY2VTdHJpbmdcbiAgfVxufVxuIiwgImltcG9ydCB0eXBlIHsgQmFzZVNwaWNlQ29tbWFuZCB9IGZyb20gXCIuL0Jhc2VTcGljZUNvbW1hbmRcIlxuXG5leHBvcnQgaW50ZXJmYWNlIFN1YmNpcmN1aXRDYWxsQ29tbWFuZFByb3BzIHtcbiAgbmFtZTogc3RyaW5nXG4gIG5vZGVzOiBzdHJpbmdbXVxuICBzdWJjaXJjdWl0TmFtZTogc3RyaW5nXG59XG5cbmV4cG9ydCBjbGFzcyBTdWJjaXJjdWl0Q2FsbENvbW1hbmQgaW1wbGVtZW50cyBCYXNlU3BpY2VDb21tYW5kIHtcbiAgY29tbWFuZE5hbWUgPSBcInN1YmNpcmN1aXRfY2FsbFwiIGFzIGNvbnN0XG4gIHByb3BzOiBTdWJjaXJjdWl0Q2FsbENvbW1hbmRQcm9wc1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBTdWJjaXJjdWl0Q2FsbENvbW1hbmRQcm9wcykge1xuICAgIHRoaXMucHJvcHMgPSBwcm9wc1xuICB9XG5cbiAgdG9TcGljZVN0cmluZygpOiBzdHJpbmcge1xuICAgIGNvbnN0IHsgbmFtZSwgbm9kZXMsIHN1YmNpcmN1aXROYW1lIH0gPSB0aGlzLnByb3BzXG4gICAgcmV0dXJuIGBYJHtuYW1lfSAke25vZGVzLmpvaW4oXCIgXCIpfSAke3N1YmNpcmN1aXROYW1lfWBcbiAgfVxufVxuIiwgImltcG9ydCB0eXBlIHsgQmFzZVNwaWNlQ29tbWFuZCB9IGZyb20gXCIuL0Jhc2VTcGljZUNvbW1hbmRcIlxuXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zbWlzc2lvbkxpbmVDb21tYW5kUHJvcHMge1xuICBuYW1lOiBzdHJpbmdcbiAgYVBvc2l0aXZlOiBzdHJpbmdcbiAgYU5lZ2F0aXZlOiBzdHJpbmdcbiAgYlBvc2l0aXZlOiBzdHJpbmdcbiAgYk5lZ2F0aXZlOiBzdHJpbmdcbiAgaW1wZWRhbmNlOiBzdHJpbmdcbiAgZGVsYXk/OiBzdHJpbmdcbiAgZnJlcXVlbmN5Pzogc3RyaW5nXG4gIG5vcm1hbGl6ZWRMZW5ndGg/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGNsYXNzIFRyYW5zbWlzc2lvbkxpbmVDb21tYW5kIGltcGxlbWVudHMgQmFzZVNwaWNlQ29tbWFuZCB7XG4gIGNvbW1hbmROYW1lID0gXCJ0cmFuc21pc3Npb25fbGluZVwiIGFzIGNvbnN0XG4gIHByb3BzOiBUcmFuc21pc3Npb25MaW5lQ29tbWFuZFByb3BzXG5cbiAgY29uc3RydWN0b3IocHJvcHM6IFRyYW5zbWlzc2lvbkxpbmVDb21tYW5kUHJvcHMpIHtcbiAgICB0aGlzLnByb3BzID0gcHJvcHNcbiAgfVxuXG4gIHRvU3BpY2VTdHJpbmcoKTogc3RyaW5nIHtcbiAgICBjb25zdCB7XG4gICAgICBuYW1lLFxuICAgICAgYVBvc2l0aXZlLFxuICAgICAgYU5lZ2F0aXZlLFxuICAgICAgYlBvc2l0aXZlLFxuICAgICAgYk5lZ2F0aXZlLFxuICAgICAgaW1wZWRhbmNlLFxuICAgICAgZGVsYXksXG4gICAgICBmcmVxdWVuY3ksXG4gICAgICBub3JtYWxpemVkTGVuZ3RoLFxuICAgIH0gPSB0aGlzLnByb3BzXG4gICAgbGV0IHNwaWNlU3RyaW5nID0gYFQke25hbWV9ICR7YVBvc2l0aXZlfSAke2FOZWdhdGl2ZX0gJHtiUG9zaXRpdmV9ICR7Yk5lZ2F0aXZlfSBaMD0ke2ltcGVkYW5jZX1gXG4gICAgaWYgKGRlbGF5KSB7XG4gICAgICBzcGljZVN0cmluZyArPSBgIFREPSR7ZGVsYXl9YFxuICAgIH0gZWxzZSBpZiAoZnJlcXVlbmN5KSB7XG4gICAgICBzcGljZVN0cmluZyArPSBgIEY9JHtmcmVxdWVuY3l9YFxuICAgICAgaWYgKG5vcm1hbGl6ZWRMZW5ndGgpIHtcbiAgICAgICAgc3BpY2VTdHJpbmcgKz0gYCBOTD0ke25vcm1hbGl6ZWRMZW5ndGh9YFxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc3BpY2VTdHJpbmdcbiAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjtBQUVPLElBQU0sOEJBQThCLENBQUMsWUFBa0M7QUFDNUUsUUFBTSxRQUFrQixDQUFDO0FBR3pCLFFBQU0sS0FBSyxRQUFRLEtBQUs7QUFHeEIsTUFBSSxRQUFRLE9BQU8sT0FBTyxHQUFHO0FBQzNCLFVBQU0sS0FBSyxHQUFHLE1BQU0sS0FBSyxRQUFRLE9BQU8sT0FBTyxDQUFDLENBQUM7QUFBQSxFQUNuRDtBQUdBLGFBQVcsYUFBYSxRQUFRLFlBQVk7QUFDMUMsVUFBTSxLQUFLLFVBQVUsY0FBYyxDQUFDO0FBQUEsRUFDdEM7QUFHQSxhQUFXLGNBQWMsUUFBUSxhQUFhO0FBQzVDLFVBQU0sS0FBSyxXQUFXLGNBQWMsQ0FBQztBQUFBLEVBQ3ZDO0FBRUEsTUFBSSxRQUFRLGdCQUFnQixTQUFTLEdBQUc7QUFDdEMsVUFBTSxLQUFLLEdBQUcsUUFBUSxlQUFlO0FBQUEsRUFDdkM7QUFHQSxNQUFJLFFBQVEsU0FBUyxTQUFTLEdBQUc7QUFDL0IsVUFBTSxLQUFLLFVBQVU7QUFDckIsVUFBTSxLQUFLLEdBQUcsUUFBUSxRQUFRO0FBQzlCLFVBQU0sS0FBSyxPQUFPO0FBQUEsRUFDcEI7QUFFQSxNQUNFLFFBQVEsZUFDUixDQUFDLE1BQU0sS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLFdBQVcsT0FBTyxDQUFDLEdBQzdEO0FBQ0EsVUFBTSxLQUFLLFFBQVEsV0FBVztBQUFBLEVBQ2hDO0FBR0EsUUFBTSxLQUFLLE1BQU07QUFFakIsU0FBTyxNQUFNLEtBQUssSUFBSTtBQUN4Qjs7O0FDekNPLElBQU0sZUFBTixNQUFtQjtBQUFBLEVBQ3hCO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBRUEsWUFBWSxRQUFRLG1CQUFtQjtBQUNyQyxTQUFLLFFBQVE7QUFDYixTQUFLLGFBQWEsQ0FBQztBQUNuQixTQUFLLFFBQVEsb0JBQUksSUFBSTtBQUNyQixTQUFLLFdBQVcsQ0FBQztBQUNqQixTQUFLLGNBQWMsQ0FBQztBQUNwQixTQUFLLFNBQVMsb0JBQUksSUFBSTtBQUN0QixTQUFLLGNBQWM7QUFDbkIsU0FBSyxrQkFBa0IsQ0FBQztBQUFBLEVBQzFCO0FBQUEsRUFFQSxhQUFhLFdBQTJCO0FBQ3RDLFNBQUssV0FBVyxLQUFLLFNBQVM7QUFFOUIsZUFBVyxRQUFRLFVBQVUsT0FBTztBQUNsQyxXQUFLLE1BQU0sSUFBSSxJQUFJO0FBQUEsSUFDckI7QUFBQSxFQUNGO0FBQUEsRUFFQSxjQUFjLFlBQTZCO0FBQ3pDLFFBQUksS0FBSyxZQUFZLEtBQUssQ0FBQyxNQUFNLEVBQUUsU0FBUyxXQUFXLElBQUksRUFBRztBQUM5RCxTQUFLLFlBQVksS0FBSyxVQUFVO0FBQUEsRUFDbEM7QUFBQSxFQUVBLGdCQUFnQjtBQUNkLFdBQU8sNEJBQTRCLElBQUk7QUFBQSxFQUN6QztBQUNGOzs7QUN2Q08sSUFBTSxpQkFBTixNQUFxQjtBQUFBLEVBQzFCO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFlBQVksTUFBYyxTQUEyQixPQUFpQjtBQUNwRSxTQUFLLE9BQU87QUFDWixTQUFLLFVBQVU7QUFDZixTQUFLLFFBQVE7QUFBQSxFQUNmO0FBQUEsRUFFQSxnQkFBd0I7QUFDdEIsV0FBTyxLQUFLLFFBQVEsY0FBYztBQUFBLEVBQ3BDO0FBQ0Y7OztBQ05PLElBQU0sa0JBQU4sTUFBa0Q7QUFBQSxFQUN2RCxjQUFjO0FBQUEsRUFDZDtBQUFBLEVBRUEsWUFBWSxPQUE2QjtBQUN2QyxTQUFLLFFBQVE7QUFBQSxFQUNmO0FBQUEsRUFFQSxnQkFBd0I7QUFDdEIsVUFBTSxFQUFFLE1BQU0sY0FBYyxjQUFjLE9BQU8sTUFBTSxJQUFJLEtBQUs7QUFDaEUsUUFBSSxjQUFjLElBQUksSUFBSSxJQUFJLFlBQVksSUFBSSxZQUFZO0FBQzFELFFBQUksT0FBTztBQUNULHFCQUFlLElBQUksS0FBSztBQUFBLElBQzFCO0FBQ0EsbUJBQWUsSUFBSSxLQUFLO0FBQ3hCLFdBQU87QUFBQSxFQUNUO0FBQ0Y7OztBQ2hCTyxJQUFNLG1CQUFOLE1BQW1EO0FBQUEsRUFDeEQsY0FBYztBQUFBLEVBRWQ7QUFBQSxFQUVBLFlBQVksT0FBOEI7QUFDeEMsU0FBSyxRQUFRO0FBQUEsRUFDZjtBQUFBLEVBRUEsZ0JBQXdCO0FBQ3RCLFVBQU07QUFBQSxNQUNKO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNGLElBQUksS0FBSztBQUVULFFBQUksY0FBYyxJQUFJLElBQUksSUFBSSxZQUFZLElBQUksWUFBWTtBQUMxRCxRQUFJLFdBQVc7QUFDYixxQkFBZSxJQUFJLFNBQVM7QUFBQSxJQUM5QjtBQUNBLG1CQUFlLElBQUksS0FBSztBQUN4QixRQUFJLGtCQUFrQjtBQUNwQixxQkFBZSxPQUFPLGdCQUFnQjtBQUFBLElBQ3hDO0FBQ0EsV0FBTztBQUFBLEVBQ1Q7QUFDRjs7O0FDN0JPLElBQU0sdUJBQU4sTUFBdUQ7QUFBQSxFQUM1RCxjQUFjO0FBQUEsRUFDZDtBQUFBLEVBRUEsWUFBWSxPQUFrQztBQUM1QyxTQUFLLFFBQVE7QUFBQSxFQUNmO0FBQUEsRUFFQSxnQkFBd0I7QUFDdEIsVUFBTSxFQUFFLE1BQU0sY0FBYyxjQUFjLE9BQU8sYUFBYSxRQUFRLElBQ3BFLEtBQUs7QUFDUCxRQUFJLGNBQWMsSUFBSSxJQUFJLElBQUksWUFBWSxJQUFJLFlBQVk7QUFDMUQsUUFBSSxPQUFPO0FBQ1QscUJBQWUsSUFBSSxLQUFLO0FBQUEsSUFDMUI7QUFDQSxRQUFJLGFBQWE7QUFDZixxQkFBZSxPQUFPLFdBQVc7QUFDakMsVUFBSSxTQUFTO0FBQ1gsdUJBQWUsSUFBSSxPQUFPO0FBQUEsTUFDNUI7QUFBQSxJQUNGO0FBQ0EsV0FBTztBQUFBLEVBQ1Q7QUFDRjs7O0FDdEJPLElBQU0sYUFBTixNQUE2QztBQUFBLEVBQ2xELGNBQWM7QUFBQSxFQUNkO0FBQUEsRUFFQSxZQUFZLE9BQXdCO0FBQ2xDLFNBQUssUUFBUTtBQUFBLEVBQ2Y7QUFBQSxFQUVBLGdCQUF3QjtBQUN0QixVQUFNLEVBQUUsTUFBTSxXQUFXLE1BQU0sU0FBUyxXQUFXLE9BQU8sS0FBSyxJQUM3RCxLQUFLO0FBQ1AsUUFBSSxjQUFjLElBQUksSUFBSSxJQUFJLFNBQVMsSUFBSSxJQUFJLElBQUksT0FBTztBQUMxRCxRQUFJLFdBQVc7QUFDYixxQkFBZSxJQUFJLFNBQVM7QUFBQSxJQUM5QjtBQUNBLG1CQUFlLElBQUksS0FBSztBQUN4QixRQUFJLE1BQU07QUFDUixxQkFBZSxJQUFJLElBQUk7QUFBQSxJQUN6QjtBQUNBLFdBQU87QUFBQSxFQUNUO0FBQ0Y7OztBQ3ZCTyxJQUFNLGVBQU4sTUFBK0M7QUFBQSxFQUNwRCxjQUFjO0FBQUEsRUFDZDtBQUFBLEVBRUEsWUFBWSxPQUEwQjtBQUNwQyxTQUFLLFFBQVE7QUFBQSxFQUNmO0FBQUEsRUFFQSxnQkFBd0I7QUFDdEIsVUFBTSxFQUFFLE1BQU0sY0FBYyxjQUFjLE9BQU8sS0FBSyxJQUFJLEtBQUs7QUFDL0QsUUFBSSxjQUFjLElBQUksSUFBSSxJQUFJLFlBQVksSUFBSSxZQUFZLElBQUksS0FBSztBQUNuRSxRQUFJLE1BQU07QUFDUixxQkFBZSxJQUFJLElBQUk7QUFBQSxJQUN6QjtBQUNBLFdBQU87QUFBQSxFQUNUO0FBQ0Y7OztBQ2ZPLElBQU0sa0JBQU4sTUFBa0Q7QUFBQSxFQUN2RCxjQUFjO0FBQUEsRUFDZDtBQUFBLEVBRUEsWUFBWSxPQUE2QjtBQUN2QyxTQUFLLFFBQVE7QUFBQSxFQUNmO0FBQUEsRUFFQSxnQkFBd0I7QUFDdEIsVUFBTSxFQUFFLE1BQU0sY0FBYyxjQUFjLE9BQU8sT0FBTyxpQkFBaUIsSUFDdkUsS0FBSztBQUNQLFFBQUksY0FBYyxJQUFJLElBQUksSUFBSSxZQUFZLElBQUksWUFBWTtBQUMxRCxRQUFJLE9BQU87QUFDVCxxQkFBZSxJQUFJLEtBQUs7QUFBQSxJQUMxQjtBQUNBLG1CQUFlLElBQUksS0FBSztBQUN4QixRQUFJLGtCQUFrQjtBQUNwQixxQkFBZSxPQUFPLGdCQUFnQjtBQUFBLElBQ3hDO0FBQ0EsV0FBTztBQUFBLEVBQ1Q7QUFDRjs7O0FDYk8sSUFBTSxnQkFBTixNQUFnRDtBQUFBLEVBQ3JELGNBQWM7QUFBQSxFQUNkO0FBQUEsRUFFQSxZQUFZLE9BQTJCO0FBQ3JDLFNBQUssUUFBUTtBQUFBLEVBQ2Y7QUFBQSxFQUVBLGdCQUF3QjtBQUN0QixVQUFNO0FBQUEsTUFDSjtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNGLElBQUksS0FBSztBQUVULFFBQUksY0FBYyxJQUFJLElBQUksSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLE1BQU0sSUFBSSxTQUFTLElBQUksS0FBSztBQUUzRSxVQUFNLFNBQTZDO0FBQUEsTUFDakQsR0FBRztBQUFBLE1BQ0gsR0FBRztBQUFBLE1BQ0gsSUFBSTtBQUFBLE1BQ0osSUFBSTtBQUFBLE1BQ0osSUFBSTtBQUFBLE1BQ0osSUFBSTtBQUFBLE1BQ0osS0FBSztBQUFBLE1BQ0wsS0FBSztBQUFBLElBQ1A7QUFFQSxXQUFPLFFBQVEsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDLEtBQUssS0FBSyxNQUFNO0FBQy9DLFVBQUksT0FBTztBQUNULHVCQUFlLElBQUksR0FBRyxJQUFJLEtBQUs7QUFBQSxNQUNqQztBQUFBLElBQ0YsQ0FBQztBQUVELFdBQU87QUFBQSxFQUNUO0FBQ0Y7OztBQ3ZETyxJQUFNLGlDQUFOLE1BQWlFO0FBQUEsRUFDdEUsY0FBYztBQUFBLEVBQ2Q7QUFBQSxFQUVBLFlBQVksT0FBNEM7QUFDdEQsU0FBSyxRQUFRO0FBQUEsRUFDZjtBQUFBLEVBRUEsZ0JBQXdCO0FBQ3RCLFVBQU07QUFBQSxNQUNKO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNGLElBQUksS0FBSztBQUNULFdBQU8sSUFBSSxJQUFJLElBQUksWUFBWSxJQUFJLFlBQVksSUFBSSxlQUFlLElBQUksZUFBZSxJQUFJLEtBQUs7QUFBQSxFQUNoRztBQUNGOzs7QUNmQSxTQUFTLG1EQUFtRDtBQUM1RCxTQUFTLFVBQVU7QUFFWixTQUFTLG1CQUNkLGFBQ2M7QUFDZCxRQUFNLFVBQVUsSUFBSSxhQUFhLGlDQUFpQztBQUNsRSxRQUFNLG1CQUFtQixHQUFHLFdBQVcsRUFBRSxpQkFBaUIsS0FBSztBQUMvRCxRQUFNLGNBQWMsR0FBRyxXQUFXLEVBQUUsWUFBWSxLQUFLO0FBQ3JELFFBQU0sZUFBZSxHQUFHLFdBQVcsRUFBRSxhQUFhLEtBQUs7QUFDdkQsUUFBTSxtQkFBbUIsWUFBWTtBQUFBLElBQ25DLENBQUMsUUFBUSxJQUFJLFNBQVM7QUFBQSxFQUN4QjtBQUNBLFFBQU0scUJBQXFCLFlBQ3hCO0FBQUEsSUFDQyxDQUFDLFlBQWEsUUFBOEIsU0FBUztBQUFBLEVBQ3ZELEVBQ0MsSUFBSSxDQUFDLFlBQVksT0FBc0M7QUFDMUQsUUFBTSxzQkFBc0Isb0JBQUksSUFBOEI7QUFFOUQsYUFBVyxhQUFhLG9CQUFvQjtBQUMxQyxRQUFJLFVBQVUscUJBQXFCO0FBQ2pDLDBCQUFvQixJQUFJLFVBQVUscUJBQXFCLFNBQVM7QUFBQSxJQUNsRTtBQUFBLEVBQ0Y7QUFFQSxRQUFNLFVBQVUsNENBQTRDLFdBQVc7QUFHdkUsUUFBTSxVQUFVLG9CQUFJLElBQW9CO0FBQ3hDLFFBQU0sZ0JBQWdCLG9CQUFJLElBQW9CO0FBQzlDLE1BQUksY0FBYztBQUVsQixRQUFNLGFBQWEsb0JBQUksSUFBWTtBQUNuQyxNQUFJLGlCQUFpQixTQUFTLEdBQUc7QUFDL0IsZUFBVyxTQUFTLGtCQUFrQjtBQUNwQyxVQUFJLE1BQU0sTUFBTTtBQUNkLG1CQUFXLElBQUksTUFBTSxJQUFJO0FBQUEsTUFDM0I7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUdBLFFBQU0sb0JBQW9CLENBQUMsR0FBRyxVQUFVLEVBQ3JDLElBQUksQ0FBQyxTQUFTLFlBQVksS0FBSyxJQUFJLENBQUMsRUFDcEMsT0FBTyxDQUFDLE1BQTRCLE1BQU0sSUFBSSxFQUM5QyxJQUFJLENBQUMsTUFBTSxTQUFTLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUVoQyxNQUFJLGtCQUFrQixTQUFTLEdBQUc7QUFDaEMsa0JBQWMsS0FBSyxJQUFJLEdBQUcsaUJBQWlCLElBQUk7QUFBQSxFQUNqRDtBQUVBLFFBQU0sYUFBYSxvQkFBSSxJQUFZO0FBR25DLFFBQU0sa0JBQWtCLElBQUk7QUFBQSxJQUMxQixHQUFHLFdBQVcsRUFDWCxXQUFXLEtBQUssRUFDaEIsT0FBTyxDQUFDLE9BQU8sR0FBRyxNQUFNLFlBQVksRUFBRSxTQUFTLEtBQUssQ0FBQyxFQUNyRCxJQUFJLENBQUMsT0FBTyxHQUFHLGFBQWE7QUFBQSxFQUNqQztBQUVBLE1BQUksZ0JBQWdCLE9BQU8sR0FBRztBQUM1QixlQUFXLFNBQVMsR0FBRyxXQUFXLEVBQUUsYUFBYSxLQUFLLEdBQUc7QUFDdkQsVUFBSSxNQUFNLDBCQUEwQixTQUFTLEdBQUc7QUFDOUMsY0FBTSxhQUFhLE1BQU0seUJBQXlCO0FBQUEsVUFBSyxDQUFDLFVBQ3RELGdCQUFnQixJQUFJLEtBQUs7QUFBQSxRQUMzQjtBQUNBLFlBQUksWUFBWTtBQUNkLGdCQUFNLGFBQWEsTUFBTSwwQkFBMEIsQ0FBQztBQUNwRCxnQkFBTSxTQUFTLFFBQVEsb0JBQW9CLFVBQVU7QUFDckQsY0FBSSxRQUFRO0FBQ1YsdUJBQVcsSUFBSSxNQUFNO0FBQUEsVUFDdkI7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBR0EsUUFBTSxjQUFjLFlBQVksT0FBTyxDQUFDLE1BQU0sRUFBRSxNQUFNLFlBQVksTUFBTSxLQUFLO0FBQzdFLGFBQVcsY0FBYyxhQUFhO0FBQ3BDLFVBQU0sWUFBWSxRQUFRLG9CQUFvQixXQUFXLGNBQWM7QUFDdkUsUUFBSSxXQUFXO0FBQ2IsaUJBQVcsSUFBSSxTQUFTO0FBQUEsSUFDMUI7QUFBQSxFQUNGO0FBRUEsYUFBVyxhQUFhLEdBQUcsV0FBVyxFQUFFLDBCQUEwQixLQUFLLEdBQUc7QUFDeEUsVUFBTSxjQUNILFVBQWtCLDJCQUNsQixVQUFrQjtBQUNyQixRQUFJLGFBQWE7QUFDZixZQUFNLFVBQVUsUUFBUSxvQkFBb0IsV0FBVztBQUN2RCxVQUFJLFNBQVM7QUFDWCxtQkFBVyxJQUFJLE9BQU87QUFBQSxNQUN4QjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBRUEsYUFBVyxhQUFhLFlBQVk7QUFDbEMsa0JBQWMsSUFBSSxXQUFXLEdBQUc7QUFBQSxFQUNsQztBQUdBLE1BQUksaUJBQWlCLFNBQVMsR0FBRztBQUMvQixlQUFXLFNBQVMsa0JBQWtCO0FBQ3BDLFVBQUksQ0FBQyxNQUFNLEtBQU07QUFFakIsVUFDRSxNQUFNLGtDQUNOLE1BQU0sK0JBQ047QUFDQTtBQUFBLE1BQ0Y7QUFFQSxVQUFJO0FBQ0osWUFBTSxpQkFBaUIsTUFBTTtBQUM3QixZQUFNLGdCQUFnQixNQUFNO0FBRTVCLFVBQUksZ0JBQWdCO0FBQ2xCLGNBQU0sUUFBUSxvQkFBb0IsY0FBYztBQUFBLE1BQ2xELFdBQVcsZUFBZTtBQUN4QixjQUFNLFFBQVEsYUFBYTtBQUFBLFVBQUssQ0FBQyxNQUMvQixFQUFFLHlCQUF5QixTQUFTLGFBQWM7QUFBQSxRQUNwRDtBQUNBLFlBQUksU0FBUyxNQUFNLDBCQUEwQixTQUFTLEdBQUc7QUFDdkQsZ0JBQU0sU0FBUyxNQUFNLDBCQUEwQixDQUFDO0FBQ2hELGdCQUFNLFFBQVEsb0JBQW9CLE1BQU07QUFBQSxRQUMxQztBQUFBLE1BQ0Y7QUFFQSxVQUFJLEtBQUs7QUFDUCxZQUFJLENBQUMsY0FBYyxJQUFJLEdBQUcsR0FBRztBQUMzQix3QkFBYyxJQUFJLEtBQUssTUFBTSxJQUFJO0FBQUEsUUFDbkM7QUFBQSxNQUNGLFdBQVcsa0JBQWtCLE1BQU0sTUFBTTtBQUd2QyxnQkFBUSxJQUFJLGdCQUFnQixNQUFNLElBQUk7QUFBQSxNQUN4QztBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBR0EsYUFBVyxRQUFRLGFBQWE7QUFDOUIsVUFBTSxTQUFTLEtBQUs7QUFDcEIsVUFBTSxNQUFNLFFBQVEsb0JBQW9CLE1BQU07QUFDOUMsUUFBSSxLQUFLO0FBQ1AsVUFBSSxDQUFDLGNBQWMsSUFBSSxHQUFHLEdBQUc7QUFDM0Isc0JBQWMsSUFBSSxLQUFLLElBQUksYUFBYSxFQUFFO0FBQUEsTUFDNUM7QUFDQSxjQUFRLElBQUksUUFBUSxjQUFjLElBQUksR0FBRyxDQUFFO0FBQUEsSUFDN0M7QUFBQSxFQUNGO0FBR0EsYUFBVyxRQUFRLGFBQWE7QUFDOUIsVUFBTSxTQUFTLEtBQUs7QUFFcEIsUUFBSSxDQUFDLFFBQVEsSUFBSSxNQUFNLEdBQUc7QUFFeEIsY0FBUSxJQUFJLFFBQVEsSUFBSSxhQUFhLEVBQUU7QUFBQSxJQUN6QztBQUFBLEVBQ0Y7QUFHQSxhQUFXLGFBQWEsa0JBQWtCO0FBQ3hDLFFBQUksVUFBVSxTQUFTLG1CQUFvQjtBQUUzQyxVQUFNLGlCQUFpQixHQUFHLFdBQVcsRUFDbEMsWUFBWSxLQUFLO0FBQUEsTUFDaEIscUJBQXFCLFVBQVU7QUFBQSxJQUNqQyxDQUFDLEVBQ0EsS0FBSyxDQUFDLEdBQUcsT0FBTyxFQUFFLGNBQWMsTUFBTSxFQUFFLGNBQWMsRUFBRTtBQUczRCxVQUFNLFFBQVEsZUFBZSxJQUFJLENBQUMsU0FBUztBQUN6QyxhQUFPLFFBQVEsSUFBSSxLQUFLLGNBQWMsS0FBSztBQUFBLElBQzdDLENBQUM7QUFHRCxRQUFJLFdBQVcsV0FBVztBQUN4QixVQUFJLGlCQUF3QztBQUU1QyxjQUFRLFVBQVUsT0FBTztBQUFBLFFBQ3ZCLEtBQUssbUJBQW1CO0FBQ3RCLGNBQUksZ0JBQWdCLGFBQWEsVUFBVSxXQUFXO0FBQ3BELGtCQUFNLGNBQWMsSUFBSSxnQkFBZ0I7QUFBQSxjQUN0QyxNQUFNLFVBQVU7QUFBQSxjQUNoQixjQUFjLE1BQU0sQ0FBQyxLQUFLO0FBQUEsY0FDMUIsY0FBYyxNQUFNLENBQUMsS0FBSztBQUFBLGNBQzFCLE9BQU8saUJBQWlCLFVBQVUsVUFBVTtBQUFBLFlBQzlDLENBQUM7QUFDRCw2QkFBaUIsSUFBSTtBQUFBLGNBQ25CLFVBQVU7QUFBQSxjQUNWO0FBQUEsY0FDQTtBQUFBLFlBQ0Y7QUFBQSxVQUNGO0FBQ0E7QUFBQSxRQUNGO0FBQUEsUUFDQSxLQUFLLGlCQUFpQjtBQUNwQixnQkFBTSxnQkFBZ0I7QUFBQSxZQUNwQixVQUFVLFFBQVEsVUFBVTtBQUFBLFlBQzVCO0FBQUEsVUFDRjtBQUNBLGdCQUFNLGVBQWUsTUFBTSxDQUFDLEtBQUs7QUFDakMsZ0JBQU0sZUFBZSxNQUFNLENBQUMsS0FBSztBQUNqQyxnQkFBTSxjQUFjLFNBQVMsYUFBYTtBQUMxQyxnQkFBTSxZQUFZLE1BQU0sYUFBYTtBQUVyQyxnQkFBTSw2QkFBNkIsb0JBQW9CO0FBQUEsWUFDckQsVUFBVTtBQUFBLFVBQ1o7QUFFQSxnQkFBTSxlQUFlO0FBQUEsWUFDbkI7QUFBQSxVQUNGO0FBRUEsZ0JBQU0sWUFBWSxJQUFJLCtCQUErQjtBQUFBLFlBQ25ELE1BQU07QUFBQSxZQUNOO0FBQUEsWUFDQTtBQUFBLFlBQ0EsaUJBQWlCO0FBQUEsWUFDakIsaUJBQWlCO0FBQUEsWUFDakIsT0FBTztBQUFBLFVBQ1QsQ0FBQztBQUVELDJCQUFpQixJQUFJLGVBQWUsZUFBZSxXQUFXO0FBQUEsWUFDNUQ7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBLFlBQ0E7QUFBQSxVQUNGLENBQUM7QUFFRCxjQUFJLENBQUMsUUFBUSxPQUFPLElBQUksU0FBUyxHQUFHO0FBQ2xDLG9CQUFRLE9BQU87QUFBQSxjQUNiO0FBQUEsY0FDQSxVQUFVLFNBQVM7QUFBQSxZQUNyQjtBQUFBLFVBQ0Y7QUFFQSxnQkFBTSxvQkFBb0IsUUFBUSxhQUFhO0FBQy9DLGdCQUFNLG1CQUFtQixJQUFJLHFCQUFxQjtBQUFBLFlBQ2hELE1BQU07QUFBQSxZQUNOLGNBQWM7QUFBQSxZQUNkLGNBQWM7QUFBQSxZQUNkLE9BQU87QUFBQSxVQUNULENBQUM7QUFFRCxnQkFBTSxtQkFBbUIsSUFBSTtBQUFBLFlBQzNCO0FBQUEsWUFDQTtBQUFBLFlBQ0EsQ0FBQyxhQUFhLEdBQUc7QUFBQSxVQUNuQjtBQUVBLGtCQUFRLGFBQWEsZ0JBQWdCO0FBQ3JDO0FBQUEsUUFDRjtBQUFBLFFBRUEsS0FBSyxvQkFBb0I7QUFDdkIsY0FBSSxpQkFBaUIsYUFBYSxVQUFVLFdBQVc7QUFDckQsa0JBQU0sZUFBZSxJQUFJLGlCQUFpQjtBQUFBLGNBQ3hDLE1BQU0sVUFBVTtBQUFBLGNBQ2hCLGNBQWMsTUFBTSxDQUFDLEtBQUs7QUFBQSxjQUMxQixjQUFjLE1BQU0sQ0FBQyxLQUFLO0FBQUEsY0FDMUIsT0FBTyxrQkFBa0IsVUFBVSxXQUFXO0FBQUEsWUFDaEQsQ0FBQztBQUNELDZCQUFpQixJQUFJO0FBQUEsY0FDbkIsVUFBVTtBQUFBLGNBQ1Y7QUFBQSxjQUNBO0FBQUEsWUFDRjtBQUFBLFVBQ0Y7QUFDQTtBQUFBLFFBQ0Y7QUFBQSxRQUNBLEtBQUssZ0JBQWdCO0FBQ25CLGNBQUksVUFBVSxXQUFXO0FBQ3ZCLGtCQUFNLFlBQVksZUFBZTtBQUFBLGNBQy9CLENBQUMsTUFDQyxFQUFFLE1BQU0sWUFBWSxNQUFNLFdBQzFCLEVBQUUsWUFBWSxTQUFTLE9BQU87QUFBQSxZQUNsQztBQUNBLGtCQUFNLGNBQWMsZUFBZTtBQUFBLGNBQ2pDLENBQUMsTUFDQyxFQUFFLE1BQU0sWUFBWSxNQUFNLGFBQzFCLEVBQUUsWUFBWSxTQUFTLFNBQVM7QUFBQSxZQUNwQztBQUNBLGtCQUFNLGVBQ0osUUFBUSxJQUFJLFdBQVcsa0JBQWtCLEVBQUUsS0FBSztBQUNsRCxrQkFBTSxlQUNKLFFBQVEsSUFBSSxhQUFhLGtCQUFrQixFQUFFLEtBQUs7QUFFcEQsa0JBQU0sWUFBWTtBQUNsQixrQkFBTSxXQUFXLElBQUksYUFBYTtBQUFBLGNBQ2hDLE1BQU0sVUFBVTtBQUFBLGNBQ2hCO0FBQUEsY0FDQTtBQUFBLGNBQ0EsT0FBTztBQUFBO0FBQUEsWUFDVCxDQUFDO0FBQ0Qsb0JBQVEsT0FBTyxJQUFJLFdBQVcsVUFBVSxTQUFTLElBQUk7QUFDckQsNkJBQWlCLElBQUksZUFBZSxVQUFVLE1BQU0sVUFBVTtBQUFBLGNBQzVEO0FBQUEsY0FDQTtBQUFBLFlBQ0YsQ0FBQztBQUFBLFVBQ0g7QUFDQTtBQUFBLFFBQ0Y7QUFBQSxRQUNBLEtBQUssbUJBQW1CO0FBQ3RCLGNBQUksZ0JBQWdCLGFBQWEsVUFBVSxXQUFXO0FBQ3BELGtCQUFNLGNBQWMsSUFBSSxnQkFBZ0I7QUFBQSxjQUN0QyxNQUFNLFVBQVU7QUFBQSxjQUNoQixjQUFjLE1BQU0sQ0FBQyxLQUFLO0FBQUEsY0FDMUIsY0FBYyxNQUFNLENBQUMsS0FBSztBQUFBLGNBQzFCLE9BQU8saUJBQWlCLFVBQVUsVUFBVTtBQUFBLFlBQzlDLENBQUM7QUFDRCw2QkFBaUIsSUFBSTtBQUFBLGNBQ25CLFVBQVU7QUFBQSxjQUNWO0FBQUEsY0FDQTtBQUFBLFlBQ0Y7QUFBQSxVQUNGO0FBQ0E7QUFBQSxRQUNGO0FBQUEsUUFDQSxLQUFLLGlCQUFpQjtBQUNwQixjQUFJLFVBQVUsV0FBVztBQUN2QixrQkFBTSxZQUFZLGVBQWU7QUFBQSxjQUMvQixDQUFDLE1BQ0MsRUFBRSxNQUFNLFlBQVksTUFBTSxXQUMxQixFQUFFLFlBQVksU0FBUyxPQUFPO0FBQUEsWUFDbEM7QUFDQSxrQkFBTSxXQUFXLGVBQWU7QUFBQSxjQUM5QixDQUFDLE1BQ0MsRUFBRSxNQUFNLFlBQVksTUFBTSxVQUMxQixFQUFFLFlBQVksU0FBUyxNQUFNO0FBQUEsWUFDakM7QUFDQSxrQkFBTSxhQUFhLGVBQWU7QUFBQSxjQUNoQyxDQUFDLE1BQ0MsRUFBRSxNQUFNLFlBQVksTUFBTSxZQUMxQixFQUFFLFlBQVksU0FBUyxRQUFRO0FBQUEsWUFDbkM7QUFFQSxrQkFBTSxZQUNKLFFBQVEsSUFBSSxXQUFXLGtCQUFrQixFQUFFLEtBQUs7QUFDbEQsa0JBQU0sV0FBVyxRQUFRLElBQUksVUFBVSxrQkFBa0IsRUFBRSxLQUFLO0FBQ2hFLGtCQUFNLGFBQ0osUUFBUSxJQUFJLFlBQVksa0JBQWtCLEVBQUUsS0FBSztBQUduRCxrQkFBTSxnQkFBZ0I7QUFFdEIsa0JBQU0sZUFBZ0IsVUFBa0IsZ0JBQWdCO0FBQ3hELGtCQUFNLGNBQWUsVUFBa0IsZUFBZTtBQUV0RCxrQkFBTSxZQUFZLEdBQUcsYUFBYSxZQUFZLENBQUM7QUFDL0Msa0JBQU0sWUFBWSxHQUFHLFNBQVMsSUFBSSxZQUFZLFlBQVksQ0FBQztBQUUzRCxnQkFBSSxDQUFDLFFBQVEsT0FBTyxJQUFJLFNBQVMsR0FBRztBQUNsQyxrQkFBSSxnQkFBZ0IsZUFBZTtBQUNqQyxzQkFBTSxNQUFNLGlCQUFpQixNQUFNLEtBQUs7QUFDeEMsd0JBQVEsT0FBTztBQUFBLGtCQUNiO0FBQUEsa0JBQ0EsVUFBVSxTQUFTLElBQUksU0FBUyxTQUFTLEdBQUc7QUFBQSxnQkFDOUM7QUFBQSxjQUNGLE9BQU87QUFDTCx3QkFBUSxPQUFPO0FBQUEsa0JBQ2I7QUFBQSxrQkFDQSxVQUFVLFNBQVMsSUFBSSxTQUFTO0FBQUEsZ0JBQ2xDO0FBQUEsY0FDRjtBQUFBLFlBQ0Y7QUFFQSxrQkFBTSxZQUFZLElBQUksY0FBYztBQUFBLGNBQ2xDLE1BQU0sVUFBVTtBQUFBLGNBQ2hCLE9BQU87QUFBQSxjQUNQLE1BQU07QUFBQSxjQUNOLFFBQVE7QUFBQSxjQUNSLFdBQVc7QUFBQSxjQUNYLE9BQU87QUFBQSxZQUNULENBQUM7QUFFRCw2QkFBaUIsSUFBSSxlQUFlLFVBQVUsTUFBTSxXQUFXO0FBQUEsY0FDN0Q7QUFBQSxjQUNBO0FBQUEsY0FDQTtBQUFBLFlBQ0YsQ0FBQztBQUFBLFVBQ0g7QUFDQTtBQUFBLFFBQ0Y7QUFBQSxRQUNBLEtBQUsscUJBQXFCO0FBQ3hCLGNBQUksVUFBVSxXQUFXO0FBQ3ZCLGtCQUFNLGdCQUFnQixlQUFlO0FBQUEsY0FDbkMsQ0FBQyxNQUNDLEVBQUUsTUFBTSxZQUFZLE1BQU0sZUFDMUIsRUFBRSxZQUFZLFNBQVMsV0FBVztBQUFBLFlBQ3RDO0FBQ0Esa0JBQU0sV0FBVyxlQUFlO0FBQUEsY0FDOUIsQ0FBQyxNQUNDLEVBQUUsTUFBTSxZQUFZLE1BQU0sVUFDMUIsRUFBRSxZQUFZLFNBQVMsTUFBTTtBQUFBLFlBQ2pDO0FBQ0Esa0JBQU0sY0FBYyxlQUFlO0FBQUEsY0FDakMsQ0FBQyxNQUNDLEVBQUUsTUFBTSxZQUFZLE1BQU0sYUFDMUIsRUFBRSxZQUFZLFNBQVMsU0FBUztBQUFBLFlBQ3BDO0FBRUEsZ0JBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsYUFBYTtBQUMvQyxvQkFBTSxJQUFJO0FBQUEsZ0JBQ1IsY0FBYyxVQUFVLElBQUk7QUFBQSxjQUM5QjtBQUFBLFlBQ0Y7QUFFQSxrQkFBTSxnQkFDSixRQUFRLElBQUksY0FBYyxjQUFjLEtBQUs7QUFDL0Msa0JBQU0sV0FBVyxRQUFRLElBQUksU0FBUyxjQUFjLEtBQUs7QUFDekQsa0JBQU0sY0FBYyxRQUFRLElBQUksWUFBWSxjQUFjLEtBQUs7QUFFL0Qsa0JBQU0sa0JBQW1CLFVBQWtCLG1CQUFtQjtBQUM5RCxrQkFBTSxZQUFZLGdCQUFnQixZQUFZO0FBQzlDLGdCQUFJLENBQUMsUUFBUSxPQUFPLElBQUksU0FBUyxHQUFHO0FBQ2xDLHNCQUFRLE9BQU87QUFBQSxnQkFDYjtBQUFBLGdCQUNBLFVBQVUsU0FBUyxJQUFJLGdCQUFnQixZQUFZLENBQUM7QUFBQSxjQUN0RDtBQUFBLFlBQ0Y7QUFFQSxrQkFBTSxTQUFTLElBQUksV0FBVztBQUFBLGNBQzVCLE1BQU0sVUFBVTtBQUFBLGNBQ2hCLFdBQVc7QUFBQSxjQUNYLE1BQU07QUFBQSxjQUNOLFNBQVM7QUFBQSxjQUNULE9BQU87QUFBQSxZQUNULENBQUM7QUFDRCw2QkFBaUIsSUFBSSxlQUFlLFVBQVUsTUFBTSxRQUFRO0FBQUEsY0FDMUQ7QUFBQSxjQUNBO0FBQUEsY0FDQTtBQUFBLFlBQ0YsQ0FBQztBQUFBLFVBQ0g7QUFDQTtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBRUEsVUFBSSxnQkFBZ0I7QUFDbEIsZ0JBQVEsYUFBYSxjQUFjO0FBQUEsTUFDckM7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUdBLFFBQU0sMkJBQ0osR0FBRyxXQUFXLEVBQUUsMEJBQTBCLEtBQUs7QUFFakQsYUFBVyxhQUFhLDBCQUEwQjtBQUNoRCxRQUFJLFVBQVUsU0FBUyw0QkFBNkI7QUFFcEQsUUFBSyxVQUFrQixpQkFBaUIsT0FBTztBQUU3QyxVQUNFLDhCQUE4QixhQUM5Qiw4QkFBOEIsYUFDN0IsVUFBa0IsNEJBQ2xCLFVBQWtCLDBCQUNuQjtBQUNBLGNBQU0sZUFDSixRQUFRLElBQUssVUFBa0Isd0JBQXdCLEtBQUs7QUFDOUQsY0FBTSxlQUNKLFFBQVEsSUFBSyxVQUFrQix3QkFBd0IsS0FBSztBQUU5RCxZQUFJLFFBQVE7QUFDWixjQUFNLGFBQWMsVUFBa0I7QUFDdEMsWUFBSSxlQUFlLFlBQVk7QUFDN0IsZ0JBQU0sV0FBVztBQUNqQixnQkFBTSxTQUFVLFVBQWtCLFdBQVc7QUFDN0MsZ0JBQU0sT0FBUSxVQUFrQixhQUFhO0FBQzdDLGdCQUFNLFFBQVE7QUFDZCxnQkFBTSxpQkFBaUI7QUFDdkIsZ0JBQU0sUUFBUyxVQUFrQixTQUFTO0FBQzFDLGNBQUksT0FBTyxHQUFHO0FBQ1osb0JBQVEsT0FBTyxRQUFRLElBQUksTUFBTSxJQUFJLElBQUksSUFBSSxLQUFLLElBQUksY0FBYyxJQUFJLEtBQUs7QUFBQSxVQUMvRSxPQUFPO0FBQ0wsb0JBQVEsTUFBTyxVQUFrQixXQUFXLENBQUM7QUFBQSxVQUMvQztBQUFBLFFBQ0YsV0FBVyxlQUFlLFVBQVU7QUFDbEMsZ0JBQU0sWUFBWTtBQUNsQixnQkFBTSxXQUFZLFVBQWtCLFdBQVc7QUFDL0MsZ0JBQU0sT0FBUSxVQUFrQixhQUFhO0FBQzdDLGdCQUFNLG1CQUFtQixTQUFTLElBQUksV0FBVyxJQUFJO0FBQ3JELGdCQUFNLFNBQVUsVUFBa0IsVUFBVTtBQUM1QyxnQkFBTSxhQUFjLFVBQWtCLGNBQWM7QUFDcEQsZ0JBQU0sY0FBYyxTQUFTO0FBQzdCLGdCQUFNLFFBQVE7QUFDZCxnQkFBTSxZQUFZO0FBQ2xCLGdCQUFNLFlBQVk7QUFDbEIsa0JBQVEsU0FBUyxTQUFTLElBQUksUUFBUSxJQUFJLEtBQUssSUFBSSxTQUFTLElBQUksU0FBUyxJQUFJLFdBQVcsSUFBSSxNQUFNO0FBQUEsUUFDcEcsV0FBWSxVQUFrQixZQUFZLFFBQVc7QUFDbkQsa0JBQVEsTUFBTyxVQUFrQixPQUFPO0FBQUEsUUFDMUM7QUFFQSxZQUFJLE9BQU87QUFDVCxnQkFBTSxtQkFBbUIsSUFBSSxxQkFBcUI7QUFBQSxZQUNoRCxNQUFNLFVBQVU7QUFBQSxZQUNoQjtBQUFBLFlBQ0E7QUFBQSxZQUNBO0FBQUEsVUFDRixDQUFDO0FBRUQsZ0JBQU0saUJBQWlCLElBQUk7QUFBQSxZQUN6QixVQUFVO0FBQUEsWUFDVjtBQUFBLFlBQ0EsQ0FBQyxjQUFjLFlBQVk7QUFBQSxVQUM3QjtBQUNBLGtCQUFRLGFBQWEsY0FBYztBQUFBLFFBQ3JDO0FBQUEsTUFDRjtBQUFBLElBQ0YsT0FBTztBQUVMLFlBQU0saUJBQ0gsVUFBa0IsMkJBQ2xCLFVBQWtCO0FBQ3JCLFlBQU0saUJBQ0gsVUFBa0IsMkJBQ2xCLFVBQWtCO0FBRXJCLFVBQ0Usa0JBQ0Esa0JBQ0EsYUFBYSxhQUNaLFVBQWtCLFlBQVksUUFDL0I7QUFDQSxjQUFNLGVBQWUsUUFBUSxJQUFJLGNBQWMsS0FBSztBQUNwRCxjQUFNLGVBQWUsUUFBUSxJQUFJLGNBQWMsS0FBSztBQUVwRCxjQUFNLG1CQUFtQixJQUFJLHFCQUFxQjtBQUFBLFVBQ2hELE1BQU0sVUFBVTtBQUFBLFVBQ2hCO0FBQUEsVUFDQTtBQUFBLFVBQ0EsT0FBTyxNQUFPLFVBQWtCLE9BQU87QUFBQSxRQUN6QyxDQUFDO0FBRUQsY0FBTSxpQkFBaUIsSUFBSTtBQUFBLFVBQ3pCLFVBQVU7QUFBQSxVQUNWO0FBQUEsVUFDQSxDQUFDLGNBQWMsWUFBWTtBQUFBLFFBQzdCO0FBQ0EsZ0JBQVEsYUFBYSxjQUFjO0FBQUEsTUFDckM7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUVBLFFBQU0sZ0JBQWdCLFlBQVk7QUFBQSxJQUNoQyxDQUFDLFFBQVEsSUFBSSxTQUFTO0FBQUEsRUFDeEI7QUFFQSxNQUFJLGVBQWU7QUFFakIsUUFBSSxpQkFBaUIsU0FBUyxHQUFHO0FBQy9CLFlBQU0sZUFBZSxvQkFBSSxJQUFZO0FBRXJDLFlBQU0scUJBQXFCLENBQUMsVUFBa0I7QUFDNUMsY0FBTSxRQUFRLGFBQWE7QUFBQSxVQUFLLENBQUMsTUFDL0IsRUFBRSx5QkFBeUIsU0FBUyxLQUFLO0FBQUEsUUFDM0M7QUFDQSxlQUFPLE9BQU8sMEJBQTBCLENBQUM7QUFBQSxNQUMzQztBQUVBLGlCQUFXLFNBQVMsa0JBQWtCO0FBQ3BDLFlBQUksZUFBZSxNQUFNO0FBQ3pCLFlBQUksQ0FBQyxjQUFjO0FBQ2pCLGdCQUFNLGNBQWMsTUFBTTtBQUMxQixjQUFJLGFBQWE7QUFDZiwyQkFBZSxtQkFBbUIsV0FBVztBQUFBLFVBQy9DO0FBQUEsUUFDRjtBQUVBLFlBQUksQ0FBQyxhQUFjO0FBRW5CLGNBQU0saUJBQWlCLFFBQVEsSUFBSSxZQUFZO0FBQy9DLFlBQUksQ0FBQyxlQUFnQjtBQUVyQixZQUFJLGtCQUFrQixNQUFNO0FBQzVCLFlBQUksQ0FBQyxtQkFBbUIsTUFBTSwrQkFBK0I7QUFDM0QsNEJBQWtCO0FBQUEsWUFDaEIsTUFBTTtBQUFBLFVBQ1I7QUFBQSxRQUNGO0FBRUEsWUFBSSxpQkFBaUI7QUFDbkIsZ0JBQU0sb0JBQW9CLFFBQVEsSUFBSSxlQUFlO0FBQ3JELGNBQUkscUJBQXFCLHNCQUFzQixLQUFLO0FBQ2xELHlCQUFhLElBQUksS0FBSyxjQUFjLElBQUksaUJBQWlCLEdBQUc7QUFBQSxVQUM5RCxXQUFXLG1CQUFtQixLQUFLO0FBQ2pDLHlCQUFhLElBQUksS0FBSyxjQUFjLEdBQUc7QUFBQSxVQUN6QztBQUFBLFFBQ0YsT0FBTztBQUVMLGNBQUksbUJBQW1CLEtBQUs7QUFDMUIseUJBQWEsSUFBSSxLQUFLLGNBQWMsR0FBRztBQUFBLFVBQ3pDO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFFQSxVQUNFLGFBQWEsT0FBTyxLQUNuQixjQUFzQixpQkFBaUIsU0FBUyxXQUFXLEdBQzVEO0FBQ0EsZ0JBQVEsZ0JBQWdCO0FBQUEsVUFDdEIsZUFBZSxDQUFDLEdBQUcsWUFBWSxFQUFFLEtBQUssR0FBRyxDQUFDO0FBQUEsUUFDNUM7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUVBLFVBQU0sY0FBZSxjQUFzQjtBQUMzQyxVQUFNLFVBQVcsY0FBc0I7QUFDdkMsVUFBTSxjQUFlLGNBQXNCO0FBRTNDLFFBQUksZUFBZSxTQUFTO0FBRTFCLFlBQU0sYUFBYSxlQUFlLEtBQUs7QUFFdkMsVUFBSSxVQUFVLFNBQVM7QUFBQSxRQUNyQixjQUFjO0FBQUEsTUFDaEIsQ0FBQyxJQUFJLHFCQUFxQixVQUFVLEdBQUksQ0FBQztBQUN6QyxVQUFJLFlBQVksR0FBRztBQUNqQixtQkFBVyxJQUFJLHFCQUFxQixTQUFTLENBQUM7QUFBQSxNQUNoRDtBQUNBLGlCQUFXO0FBQ1gsY0FBUSxjQUFjO0FBQUEsSUFDeEI7QUFBQSxFQUNGO0FBRUEsU0FBTztBQUNUO0FBRUEsU0FBUyxpQkFBaUIsWUFBNEI7QUFDcEQsTUFBSSxjQUFjLElBQUssUUFBTyxHQUFHLGFBQWEsR0FBRztBQUNqRCxNQUFJLGNBQWMsSUFBSyxRQUFPLEdBQUcsYUFBYSxHQUFHO0FBQ2pELFNBQU8sV0FBVyxTQUFTO0FBQzdCO0FBRUEsU0FBUyxrQkFBa0IsYUFBNkI7QUFDdEQsTUFBSSxlQUFlLEtBQU0sUUFBTyxHQUFHLGNBQWMsR0FBRztBQUNwRCxNQUFJLGVBQWUsS0FBTSxRQUFPLEdBQUcsY0FBYyxHQUFHO0FBQ3BELE1BQUksZUFBZSxLQUFNLFFBQU8sR0FBRyxjQUFjLEdBQUc7QUFDcEQsTUFBSSxlQUFlLE1BQU8sUUFBTyxHQUFHLGNBQWMsSUFBSTtBQUN0RCxTQUFPLFlBQVksU0FBUztBQUM5QjtBQUVBLFNBQVMsaUJBQWlCLFlBQTRCO0FBQ3BELE1BQUksY0FBYyxFQUFHLFFBQU8sV0FBVyxTQUFTO0FBQ2hELE1BQUksY0FBYyxLQUFNLFFBQU8sR0FBRyxhQUFhLEdBQUc7QUFDbEQsTUFBSSxjQUFjLEtBQU0sUUFBTyxHQUFHLGFBQWEsR0FBRztBQUNsRCxNQUFJLGNBQWMsS0FBTSxRQUFPLEdBQUcsYUFBYSxHQUFHO0FBQ2xELE1BQUksY0FBYyxNQUFPLFFBQU8sR0FBRyxhQUFhLElBQUk7QUFDcEQsU0FBTyxXQUFXLFNBQVM7QUFDN0I7QUFFQSxTQUFTLG1CQUFtQixPQUEyQixRQUFnQjtBQUNyRSxNQUFJLENBQUMsTUFBTyxRQUFPO0FBQ25CLFFBQU0sWUFBWSxNQUFNLFFBQVEsa0JBQWtCLEdBQUc7QUFDckQsTUFBSSxDQUFDLFVBQVcsUUFBTztBQUN2QixNQUFJLFNBQVMsS0FBSyxTQUFTLEdBQUc7QUFDNUIsV0FBTyxHQUFHLE1BQU0sSUFBSSxTQUFTO0FBQUEsRUFDL0I7QUFDQSxTQUFPO0FBQ1Q7QUFFQSxTQUFTLGtDQUNQLGtCQUNBO0FBQ0EsUUFBTSxjQUFjO0FBQ3BCLFFBQU0sYUFBYTtBQUNuQixRQUFNLFdBQVc7QUFDakIsUUFBTSxXQUFXO0FBRWpCLE1BQUksQ0FBQyxrQkFBa0I7QUFDckIsV0FBTyxNQUFNLFVBQVU7QUFBQSxFQUN6QjtBQUVBLFFBQU0sZUFBZSxpQkFBaUIsaUJBQWlCO0FBQ3ZELFFBQU0sV0FBVyxpQkFBaUIsYUFBYTtBQUMvQyxRQUFNLFVBQVUsaUJBQWlCO0FBQ2pDLFFBQU0scUJBQXFCLGlCQUFpQjtBQUU1QyxRQUFNLENBQUMsZ0JBQWdCLGFBQWEsSUFBSSxlQUNwQyxDQUFDLGFBQWEsVUFBVSxJQUN4QixDQUFDLFlBQVksV0FBVztBQUU1QixNQUFJLHNCQUFzQixxQkFBcUIsR0FBRztBQUNoRCxVQUFNLFNBQVMsSUFBSTtBQUNuQixVQUFNLHFCQUNKLFdBQVcsVUFBVSxXQUFXLEtBQUssSUFBSSxVQUFVLFVBQVUsTUFBTSxJQUFJO0FBQ3pFLFVBQU0sYUFDSixxQkFBcUIsSUFBSSxxQkFBcUIsS0FBSyxJQUFJLFNBQVMsR0FBRyxJQUFJO0FBRXpFLFdBQU8sU0FBUyxxQkFBcUIsY0FBYyxDQUFDLElBQUkscUJBQXFCLGFBQWEsQ0FBQyxJQUFJLHFCQUFxQixRQUFRLENBQUMsSUFBSSxRQUFRLElBQUksUUFBUSxJQUFJLHFCQUFxQixVQUFVLENBQUMsSUFBSSxxQkFBcUIsTUFBTSxDQUFDO0FBQUEsRUFDM047QUFFQSxNQUFJLFlBQVksVUFBYSxVQUFVLFVBQVU7QUFDL0MsVUFBTSxhQUFhLEtBQUssSUFBSSxVQUFVLFVBQVUsSUFBSTtBQUNwRCxVQUFNLFNBQVMsV0FBVyxhQUFhO0FBRXZDLFdBQU8sU0FBUyxxQkFBcUIsY0FBYyxDQUFDLElBQUkscUJBQXFCLGFBQWEsQ0FBQyxJQUFJLHFCQUFxQixRQUFRLENBQUMsSUFBSSxRQUFRLElBQUksUUFBUSxJQUFJLHFCQUFxQixVQUFVLENBQUMsSUFBSSxxQkFBcUIsTUFBTSxDQUFDO0FBQUEsRUFDM047QUFFQSxNQUFJLFdBQVcsR0FBRztBQUNoQixVQUFNLFNBQVMsV0FBVztBQUMxQixVQUFNLGFBQWEsS0FBSyxJQUFJLFNBQVMsR0FBRyxJQUFJO0FBQzVDLFdBQU8sU0FBUyxxQkFBcUIsY0FBYyxDQUFDLElBQUkscUJBQXFCLGFBQWEsQ0FBQyxJQUFJLHFCQUFxQixRQUFRLENBQUMsSUFBSSxRQUFRLElBQUksUUFBUSxJQUFJLHFCQUFxQixVQUFVLENBQUMsSUFBSSxxQkFBcUIsTUFBTSxDQUFDO0FBQUEsRUFDM047QUFFQSxTQUFPLE1BQU0sZUFBZSxjQUFjLFVBQVU7QUFDdEQ7QUFFQSxTQUFTLHFCQUFxQixPQUFlO0FBQzNDLE1BQUksQ0FBQyxPQUFPLFNBQVMsS0FBSyxFQUFHLFFBQU8sR0FBRyxLQUFLO0FBQzVDLE1BQUksVUFBVSxFQUFHLFFBQU87QUFFeEIsUUFBTSxXQUFXLEtBQUssSUFBSSxLQUFLO0FBRS9CLE1BQUksWUFBWSxPQUFPLFlBQVksTUFBTTtBQUN2QyxXQUFPLE9BQU8sTUFBTSxjQUFjLENBQUMsQ0FBQyxFQUFFLFNBQVM7QUFBQSxFQUNqRDtBQUVBLFNBQU8sT0FBTyxNQUFNLFlBQVksQ0FBQyxDQUFDLEVBQUUsU0FBUztBQUMvQzs7O0FDdHVCTyxJQUFNLGtCQUFOLE1BQXNCO0FBQUEsRUFDM0I7QUFBQSxFQUNBO0FBQUEsRUFFQSxZQUFZLE1BQWMsTUFBZ0I7QUFDeEMsU0FBSyxPQUFPO0FBQ1osU0FBSyxPQUFPO0FBQUEsRUFDZDtBQUFBLEVBRUEsZ0JBQXdCO0FBQ3RCLFVBQU0sWUFBWSxLQUFLLEtBQUssS0FBSyxHQUFHO0FBQ3BDLFVBQU0sU0FBUyxXQUFXLEtBQUssSUFBSSxJQUFJLFNBQVM7QUFDaEQsVUFBTSxTQUFTLFNBQVMsS0FBSyxJQUFJO0FBRWpDLFVBQU0sT0FBTyxxQkFBcUIsS0FBSyxJQUFJO0FBRTNDLFdBQU8sQ0FBQyxJQUFJLFFBQVEsTUFBTSxNQUFNLEVBQUUsS0FBSyxJQUFJO0FBQUEsRUFDN0M7QUFDRjs7O0FDUE8sSUFBTSx1QkFBTixNQUF1RDtBQUFBLEVBQzVELGNBQWM7QUFBQSxFQUNkO0FBQUEsRUFFQSxZQUFZLE9BQWtDO0FBQzVDLFNBQUssUUFBUTtBQUFBLEVBQ2Y7QUFBQSxFQUVBLGdCQUF3QjtBQUN0QixVQUFNLEVBQUUsTUFBTSxjQUFjLGNBQWMsT0FBTyxhQUFhLFFBQVEsSUFDcEUsS0FBSztBQUNQLFFBQUksY0FBYyxJQUFJLElBQUksSUFBSSxZQUFZLElBQUksWUFBWTtBQUMxRCxRQUFJLE9BQU87QUFDVCxxQkFBZSxJQUFJLEtBQUs7QUFBQSxJQUMxQjtBQUNBLFFBQUksYUFBYTtBQUNmLHFCQUFlLE9BQU8sV0FBVztBQUNqQyxVQUFJLFNBQVM7QUFDWCx1QkFBZSxJQUFJLE9BQU87QUFBQSxNQUM1QjtBQUFBLElBQ0Y7QUFDQSxXQUFPO0FBQUEsRUFDVDtBQUNGOzs7QUMxQk8sSUFBTSwwQkFBTixNQUEwRDtBQUFBLEVBQy9ELGNBQWM7QUFBQSxFQUNkO0FBQUEsRUFFQSxZQUFZLE9BQXFDO0FBQy9DLFNBQUssUUFBUTtBQUFBLEVBQ2Y7QUFBQSxFQUVBLGdCQUF3QjtBQUN0QixVQUFNLEVBQUUsTUFBTSxXQUFXLFNBQVMsSUFBSSxLQUFLO0FBQzNDLFdBQU8sSUFBSSxJQUFJLElBQUksVUFBVSxLQUFLLEdBQUcsQ0FBQyxJQUFJLFFBQVE7QUFBQSxFQUNwRDtBQUNGOzs7QUNUTyxJQUFNLGNBQU4sTUFBOEM7QUFBQSxFQUNuRCxjQUFjO0FBQUEsRUFDZDtBQUFBLEVBRUEsWUFBWSxPQUF5QjtBQUNuQyxTQUFLLFFBQVE7QUFBQSxFQUNmO0FBQUEsRUFFQSxnQkFBd0I7QUFDdEIsVUFBTSxFQUFFLE1BQU0sT0FBTyxNQUFNLFFBQVEsT0FBTyxLQUFLLElBQUksS0FBSztBQUN4RCxRQUFJLGNBQWMsSUFBSSxJQUFJLElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxNQUFNLElBQUksS0FBSztBQUM5RCxRQUFJLE1BQU07QUFDUixxQkFBZSxJQUFJLElBQUk7QUFBQSxJQUN6QjtBQUNBLFdBQU87QUFBQSxFQUNUO0FBQ0Y7OztBQ25CTyxJQUFNLHdCQUFOLE1BQXdEO0FBQUEsRUFDN0QsY0FBYztBQUFBLEVBQ2Q7QUFBQSxFQUVBLFlBQVksT0FBbUM7QUFDN0MsU0FBSyxRQUFRO0FBQUEsRUFDZjtBQUFBLEVBRUEsZ0JBQXdCO0FBQ3RCLFVBQU0sRUFBRSxNQUFNLE9BQU8sZUFBZSxJQUFJLEtBQUs7QUFDN0MsV0FBTyxJQUFJLElBQUksSUFBSSxNQUFNLEtBQUssR0FBRyxDQUFDLElBQUksY0FBYztBQUFBLEVBQ3REO0FBQ0Y7OztBQ05PLElBQU0sMEJBQU4sTUFBMEQ7QUFBQSxFQUMvRCxjQUFjO0FBQUEsRUFDZDtBQUFBLEVBRUEsWUFBWSxPQUFxQztBQUMvQyxTQUFLLFFBQVE7QUFBQSxFQUNmO0FBQUEsRUFFQSxnQkFBd0I7QUFDdEIsVUFBTTtBQUFBLE1BQ0o7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLElBQ0YsSUFBSSxLQUFLO0FBQ1QsUUFBSSxjQUFjLElBQUksSUFBSSxJQUFJLFNBQVMsSUFBSSxTQUFTLElBQUksU0FBUyxJQUFJLFNBQVMsT0FBTyxTQUFTO0FBQzlGLFFBQUksT0FBTztBQUNULHFCQUFlLE9BQU8sS0FBSztBQUFBLElBQzdCLFdBQVcsV0FBVztBQUNwQixxQkFBZSxNQUFNLFNBQVM7QUFDOUIsVUFBSSxrQkFBa0I7QUFDcEIsdUJBQWUsT0FBTyxnQkFBZ0I7QUFBQSxNQUN4QztBQUFBLElBQ0Y7QUFDQSxXQUFPO0FBQUEsRUFDVDtBQUNGOyIsCiAgIm5hbWVzIjogW10KfQo=
|
|
1035
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vbGliL3NwaWNlLXV0aWxzL2NvbnZlcnRTcGljZU5ldGxpc3RUb1N0cmluZy50cyIsICIuLi9saWIvc3BpY2UtY2xhc3Nlcy9TcGljZU5ldGxpc3QudHMiLCAiLi4vbGliL3NwaWNlLWNsYXNzZXMvU3BpY2VDb21wb25lbnQudHMiLCAiLi4vbGliL3NwaWNlLWNvbW1hbmRzL1Jlc2lzdG9yQ29tbWFuZC50cyIsICIuLi9saWIvc3BpY2UtY29tbWFuZHMvQ2FwYWNpdG9yQ29tbWFuZC50cyIsICIuLi9saWIvc3BpY2UtY29tbWFuZHMvVm9sdGFnZVNvdXJjZUNvbW1hbmQudHMiLCAiLi4vbGliL3NwaWNlLWNvbW1hbmRzL0N1cnJlbnRTb3VyY2VDb21tYW5kLnRzIiwgIi4uL2xpYi9zcGljZS1jb21tYW5kcy9CSlRDb21tYW5kLnRzIiwgIi4uL2xpYi9zcGljZS1jb21tYW5kcy9EaW9kZUNvbW1hbmQudHMiLCAiLi4vbGliL3NwaWNlLWNvbW1hbmRzL0luZHVjdG9yQ29tbWFuZC50cyIsICIuLi9saWIvc3BpY2UtY29tbWFuZHMvTU9TRkVUQ29tbWFuZC50cyIsICIuLi9saWIvc3BpY2UtY29tbWFuZHMvVm9sdGFnZUNvbnRyb2xsZWRTd2l0Y2hDb21tYW5kLnRzIiwgIi4uL2xpYi9jaXJjdWl0SnNvblRvU3BpY2UudHMiLCAiLi4vbGliL3NwaWNlLWNsYXNzZXMvU3BpY2VTdWJjaXJjdWl0LnRzIiwgIi4uL2xpYi9zcGljZS1jb21tYW5kcy9JbmR1Y3RvckNvdXBsaW5nQ29tbWFuZC50cyIsICIuLi9saWIvc3BpY2UtY29tbWFuZHMvSkZFVENvbW1hbmQudHMiLCAiLi4vbGliL3NwaWNlLWNvbW1hbmRzL1N1YmNpcmN1aXRDYWxsQ29tbWFuZC50cyIsICIuLi9saWIvc3BpY2UtY29tbWFuZHMvVHJhbnNtaXNzaW9uTGluZUNvbW1hbmQudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB0eXBlIHsgU3BpY2VOZXRsaXN0IH0gZnJvbSBcIi4uL3NwaWNlLWNsYXNzZXMvU3BpY2VOZXRsaXN0XCJcblxuZXhwb3J0IGNvbnN0IGNvbnZlcnRTcGljZU5ldGxpc3RUb1N0cmluZyA9IChuZXRsaXN0OiBTcGljZU5ldGxpc3QpOiBzdHJpbmcgPT4ge1xuICBjb25zdCBsaW5lczogc3RyaW5nW10gPSBbXVxuXG4gIC8vIFRpdGxlIGxpbmUgKHJlcXVpcmVkIGZpcnN0IGxpbmUgaW4gU1BJQ0UpXG4gIGxpbmVzLnB1c2gobmV0bGlzdC50aXRsZSlcblxuICAvLyBBZGQgbW9kZWxzXG4gIGlmIChuZXRsaXN0Lm1vZGVscy5zaXplID4gMCkge1xuICAgIGxpbmVzLnB1c2goLi4uQXJyYXkuZnJvbShuZXRsaXN0Lm1vZGVscy52YWx1ZXMoKSkpXG4gIH1cblxuICAvLyBDb21wb25lbnQgbGluZXNcbiAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgbmV0bGlzdC5jb21wb25lbnRzKSB7XG4gICAgbGluZXMucHVzaChjb21wb25lbnQudG9TcGljZVN0cmluZygpKVxuICB9XG5cbiAgLy8gQWRkIHN1YmNpcmN1aXQgZGVmaW5pdGlvbnNcbiAgZm9yIChjb25zdCBzdWJjaXJjdWl0IG9mIG5ldGxpc3Quc3ViY2lyY3VpdHMpIHtcbiAgICBsaW5lcy5wdXNoKHN1YmNpcmN1aXQudG9TcGljZVN0cmluZygpKVxuICB9XG5cbiAgaWYgKG5ldGxpc3QucHJpbnRTdGF0ZW1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICBsaW5lcy5wdXNoKC4uLm5ldGxpc3QucHJpbnRTdGF0ZW1lbnRzKVxuICB9XG5cbiAgLy8gQWRkIGNvbnRyb2wgYmxvY2sgaWYgcHJlc2VudFxuICBpZiAobmV0bGlzdC5jb250cm9scy5sZW5ndGggPiAwKSB7XG4gICAgbGluZXMucHVzaChcIi5jb250cm9sXCIpXG4gICAgbGluZXMucHVzaCguLi5uZXRsaXN0LmNvbnRyb2xzKVxuICAgIGxpbmVzLnB1c2goXCIuZW5kY1wiKVxuICB9XG5cbiAgaWYgKFxuICAgIG5ldGxpc3QudHJhbkNvbW1hbmQgJiZcbiAgICAhbGluZXMuc29tZSgobCkgPT4gbC50cmltKCkudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKFwiLnRyYW5cIikpXG4gICkge1xuICAgIGxpbmVzLnB1c2gobmV0bGlzdC50cmFuQ29tbWFuZClcbiAgfVxuXG4gIC8vIEVuZCB3aXRoIC5FTkRcbiAgbGluZXMucHVzaChcIi5FTkRcIilcblxuICByZXR1cm4gbGluZXMuam9pbihcIlxcblwiKVxufVxuIiwgImltcG9ydCB7IGNvbnZlcnRTcGljZU5ldGxpc3RUb1N0cmluZyB9IGZyb20gXCIuLi9zcGljZS11dGlscy9jb252ZXJ0U3BpY2VOZXRsaXN0VG9TdHJpbmdcIlxuaW1wb3J0IHR5cGUgeyBTcGljZUNvbXBvbmVudCB9IGZyb20gXCIuL1NwaWNlQ29tcG9uZW50XCJcbmltcG9ydCB0eXBlIHsgU3BpY2VTdWJjaXJjdWl0IH0gZnJvbSBcIi4vU3BpY2VTdWJjaXJjdWl0XCJcblxuZXhwb3J0IGNsYXNzIFNwaWNlTmV0bGlzdCB7XG4gIHRpdGxlOiBzdHJpbmdcbiAgY29tcG9uZW50czogU3BpY2VDb21wb25lbnRbXVxuICBub2RlczogU2V0PHN0cmluZz5cbiAgY29udHJvbHM6IHN0cmluZ1tdXG4gIHN1YmNpcmN1aXRzOiBTcGljZVN1YmNpcmN1aXRbXVxuICBtb2RlbHM6IE1hcDxzdHJpbmcsIHN0cmluZz5cbiAgdHJhbkNvbW1hbmQ6IHN0cmluZyB8IG51bGxcbiAgcHJpbnRTdGF0ZW1lbnRzOiBzdHJpbmdbXVxuXG4gIGNvbnN0cnVjdG9yKHRpdGxlID0gXCJDaXJjdWl0IE5ldGxpc3RcIikge1xuICAgIHRoaXMudGl0bGUgPSB0aXRsZVxuICAgIHRoaXMuY29tcG9uZW50cyA9IFtdXG4gICAgdGhpcy5ub2RlcyA9IG5ldyBTZXQoKVxuICAgIHRoaXMuY29udHJvbHMgPSBbXVxuICAgIHRoaXMuc3ViY2lyY3VpdHMgPSBbXVxuICAgIHRoaXMubW9kZWxzID0gbmV3IE1hcCgpXG4gICAgdGhpcy50cmFuQ29tbWFuZCA9IG51bGxcbiAgICB0aGlzLnByaW50U3RhdGVtZW50cyA9IFtdXG4gIH1cblxuICBhZGRDb21wb25lbnQoY29tcG9uZW50OiBTcGljZUNvbXBvbmVudCkge1xuICAgIHRoaXMuY29tcG9uZW50cy5wdXNoKGNvbXBvbmVudClcbiAgICAvLyBBZGQgbm9kZXMgdG8gdGhlIHNldFxuICAgIGZvciAoY29uc3Qgbm9kZSBvZiBjb21wb25lbnQubm9kZXMpIHtcbiAgICAgIHRoaXMubm9kZXMuYWRkKG5vZGUpXG4gICAgfVxuICB9XG5cbiAgYWRkU3ViY2lyY3VpdChzdWJjaXJjdWl0OiBTcGljZVN1YmNpcmN1aXQpIHtcbiAgICBpZiAodGhpcy5zdWJjaXJjdWl0cy5maW5kKChzKSA9PiBzLm5hbWUgPT09IHN1YmNpcmN1aXQubmFtZSkpIHJldHVyblxuICAgIHRoaXMuc3ViY2lyY3VpdHMucHVzaChzdWJjaXJjdWl0KVxuICB9XG5cbiAgdG9TcGljZVN0cmluZygpIHtcbiAgICByZXR1cm4gY29udmVydFNwaWNlTmV0bGlzdFRvU3RyaW5nKHRoaXMpXG4gIH1cbn1cbiIsICJpbXBvcnQgdHlwZSB7IEJhc2VTcGljZUNvbW1hbmQgfSBmcm9tIFwiLi4vc3BpY2UtY29tbWFuZHMvQmFzZVNwaWNlQ29tbWFuZFwiXG5cbmV4cG9ydCBjbGFzcyBTcGljZUNvbXBvbmVudCB7XG4gIG5hbWU6IHN0cmluZ1xuICBjb21tYW5kOiBCYXNlU3BpY2VDb21tYW5kXG4gIG5vZGVzOiBzdHJpbmdbXVxuXG4gIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZywgY29tbWFuZDogQmFzZVNwaWNlQ29tbWFuZCwgbm9kZXM6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5uYW1lID0gbmFtZVxuICAgIHRoaXMuY29tbWFuZCA9IGNvbW1hbmRcbiAgICB0aGlzLm5vZGVzID0gbm9kZXNcbiAgfVxuXG4gIHRvU3BpY2VTdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jb21tYW5kLnRvU3BpY2VTdHJpbmcoKVxuICB9XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBCYXNlU3BpY2VDb21tYW5kIH0gZnJvbSBcIi4vQmFzZVNwaWNlQ29tbWFuZFwiXG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzaXN0b3JDb21tYW5kUHJvcHMge1xuICBuYW1lOiBzdHJpbmdcbiAgcG9zaXRpdmVOb2RlOiBzdHJpbmdcbiAgbmVnYXRpdmVOb2RlOiBzdHJpbmdcbiAgbW9kZWw/OiBzdHJpbmdcbiAgdmFsdWU6IHN0cmluZ1xufVxuXG5leHBvcnQgY2xhc3MgUmVzaXN0b3JDb21tYW5kIGltcGxlbWVudHMgQmFzZVNwaWNlQ29tbWFuZCB7XG4gIGNvbW1hbmROYW1lID0gXCJyZXNpc3RvclwiIGFzIGNvbnN0XG4gIHByb3BzOiBSZXNpc3RvckNvbW1hbmRQcm9wc1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBSZXNpc3RvckNvbW1hbmRQcm9wcykge1xuICAgIHRoaXMucHJvcHMgPSBwcm9wc1xuICB9XG5cbiAgdG9TcGljZVN0cmluZygpOiBzdHJpbmcge1xuICAgIGNvbnN0IHsgbmFtZSwgcG9zaXRpdmVOb2RlLCBuZWdhdGl2ZU5vZGUsIG1vZGVsLCB2YWx1ZSB9ID0gdGhpcy5wcm9wc1xuICAgIGxldCBzcGljZVN0cmluZyA9IGBSJHtuYW1lfSAke3Bvc2l0aXZlTm9kZX0gJHtuZWdhdGl2ZU5vZGV9YFxuICAgIGlmIChtb2RlbCkge1xuICAgICAgc3BpY2VTdHJpbmcgKz0gYCAke21vZGVsfWBcbiAgICB9XG4gICAgc3BpY2VTdHJpbmcgKz0gYCAke3ZhbHVlfWBcbiAgICByZXR1cm4gc3BpY2VTdHJpbmdcbiAgfVxufVxuIiwgImltcG9ydCB0eXBlIHsgQmFzZVNwaWNlQ29tbWFuZCB9IGZyb20gXCIuL0Jhc2VTcGljZUNvbW1hbmRcIlxuXG5leHBvcnQgaW50ZXJmYWNlIENhcGFjaXRvckNvbW1hbmRQcm9wcyB7XG4gIG5hbWU6IHN0cmluZ1xuICBwb3NpdGl2ZU5vZGU6IHN0cmluZ1xuICBuZWdhdGl2ZU5vZGU6IHN0cmluZ1xuICBtb2RlbE5hbWU/OiBzdHJpbmdcbiAgdmFsdWU6IHN0cmluZ1xuICBpbml0aWFsQ29uZGl0aW9uPzogc3RyaW5nXG59XG5cbmV4cG9ydCBjbGFzcyBDYXBhY2l0b3JDb21tYW5kIGltcGxlbWVudHMgQmFzZVNwaWNlQ29tbWFuZCB7XG4gIGNvbW1hbmROYW1lID0gXCJjYXBhY2l0b3JcIiBhcyBjb25zdFxuXG4gIHByb3BzOiBDYXBhY2l0b3JDb21tYW5kUHJvcHNcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogQ2FwYWNpdG9yQ29tbWFuZFByb3BzKSB7XG4gICAgdGhpcy5wcm9wcyA9IHByb3BzXG4gIH1cblxuICB0b1NwaWNlU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgY29uc3Qge1xuICAgICAgbmFtZSxcbiAgICAgIHBvc2l0aXZlTm9kZSxcbiAgICAgIG5lZ2F0aXZlTm9kZSxcbiAgICAgIG1vZGVsTmFtZSxcbiAgICAgIHZhbHVlLFxuICAgICAgaW5pdGlhbENvbmRpdGlvbixcbiAgICB9ID0gdGhpcy5wcm9wc1xuXG4gICAgbGV0IHNwaWNlU3RyaW5nID0gYEMke25hbWV9ICR7cG9zaXRpdmVOb2RlfSAke25lZ2F0aXZlTm9kZX1gXG4gICAgaWYgKG1vZGVsTmFtZSkge1xuICAgICAgc3BpY2VTdHJpbmcgKz0gYCAke21vZGVsTmFtZX1gXG4gICAgfVxuICAgIHNwaWNlU3RyaW5nICs9IGAgJHt2YWx1ZX1gXG4gICAgaWYgKGluaXRpYWxDb25kaXRpb24pIHtcbiAgICAgIHNwaWNlU3RyaW5nICs9IGAgSUM9JHtpbml0aWFsQ29uZGl0aW9ufWBcbiAgICB9XG4gICAgcmV0dXJuIHNwaWNlU3RyaW5nXG4gIH1cbn1cbiIsICJpbXBvcnQgdHlwZSB7IEJhc2VTcGljZUNvbW1hbmQgfSBmcm9tIFwiLi9CYXNlU3BpY2VDb21tYW5kXCJcblxuZXhwb3J0IGludGVyZmFjZSBWb2x0YWdlU291cmNlQ29tbWFuZFByb3BzIHtcbiAgbmFtZTogc3RyaW5nXG4gIHBvc2l0aXZlTm9kZTogc3RyaW5nXG4gIG5lZ2F0aXZlTm9kZTogc3RyaW5nXG4gIHZhbHVlPzogc3RyaW5nXG4gIGFjTWFnbml0dWRlPzogc3RyaW5nXG4gIGFjUGhhc2U/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGNsYXNzIFZvbHRhZ2VTb3VyY2VDb21tYW5kIGltcGxlbWVudHMgQmFzZVNwaWNlQ29tbWFuZCB7XG4gIGNvbW1hbmROYW1lID0gXCJ2b2x0YWdlX3NvdXJjZVwiIGFzIGNvbnN0XG4gIHByb3BzOiBWb2x0YWdlU291cmNlQ29tbWFuZFByb3BzXG5cbiAgY29uc3RydWN0b3IocHJvcHM6IFZvbHRhZ2VTb3VyY2VDb21tYW5kUHJvcHMpIHtcbiAgICB0aGlzLnByb3BzID0gcHJvcHNcbiAgfVxuXG4gIHRvU3BpY2VTdHJpbmcoKTogc3RyaW5nIHtcbiAgICBjb25zdCB7IG5hbWUsIHBvc2l0aXZlTm9kZSwgbmVnYXRpdmVOb2RlLCB2YWx1ZSwgYWNNYWduaXR1ZGUsIGFjUGhhc2UgfSA9XG4gICAgICB0aGlzLnByb3BzXG4gICAgbGV0IHNwaWNlU3RyaW5nID0gYFYke25hbWV9ICR7cG9zaXRpdmVOb2RlfSAke25lZ2F0aXZlTm9kZX1gXG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBzcGljZVN0cmluZyArPSBgICR7dmFsdWV9YFxuICAgIH1cbiAgICBpZiAoYWNNYWduaXR1ZGUpIHtcbiAgICAgIHNwaWNlU3RyaW5nICs9IGAgQUMgJHthY01hZ25pdHVkZX1gXG4gICAgICBpZiAoYWNQaGFzZSkge1xuICAgICAgICBzcGljZVN0cmluZyArPSBgICR7YWNQaGFzZX1gXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzcGljZVN0cmluZ1xuICB9XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBCYXNlU3BpY2VDb21tYW5kIH0gZnJvbSBcIi4vQmFzZVNwaWNlQ29tbWFuZFwiXG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3VycmVudFNvdXJjZUNvbW1hbmRQcm9wcyB7XG4gIG5hbWU6IHN0cmluZ1xuICBwb3NpdGl2ZU5vZGU6IHN0cmluZ1xuICBuZWdhdGl2ZU5vZGU6IHN0cmluZ1xuICB2YWx1ZT86IHN0cmluZ1xuICBhY01hZ25pdHVkZT86IHN0cmluZ1xuICBhY1BoYXNlPzogc3RyaW5nXG59XG5cbmV4cG9ydCBjbGFzcyBDdXJyZW50U291cmNlQ29tbWFuZCBpbXBsZW1lbnRzIEJhc2VTcGljZUNvbW1hbmQge1xuICBjb21tYW5kTmFtZSA9IFwiY3VycmVudF9zb3VyY2VcIiBhcyBjb25zdFxuICBwcm9wczogQ3VycmVudFNvdXJjZUNvbW1hbmRQcm9wc1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBDdXJyZW50U291cmNlQ29tbWFuZFByb3BzKSB7XG4gICAgdGhpcy5wcm9wcyA9IHByb3BzXG4gIH1cblxuICB0b1NwaWNlU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgY29uc3QgeyBuYW1lLCBwb3NpdGl2ZU5vZGUsIG5lZ2F0aXZlTm9kZSwgdmFsdWUsIGFjTWFnbml0dWRlLCBhY1BoYXNlIH0gPVxuICAgICAgdGhpcy5wcm9wc1xuICAgIGxldCBzcGljZVN0cmluZyA9IGBJJHtuYW1lfSAke3Bvc2l0aXZlTm9kZX0gJHtuZWdhdGl2ZU5vZGV9YFxuICAgIGlmICh2YWx1ZSkge1xuICAgICAgc3BpY2VTdHJpbmcgKz0gYCAke3ZhbHVlfWBcbiAgICB9XG4gICAgaWYgKGFjTWFnbml0dWRlKSB7XG4gICAgICBzcGljZVN0cmluZyArPSBgIEFDICR7YWNNYWduaXR1ZGV9YFxuICAgICAgaWYgKGFjUGhhc2UpIHtcbiAgICAgICAgc3BpY2VTdHJpbmcgKz0gYCAke2FjUGhhc2V9YFxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc3BpY2VTdHJpbmdcbiAgfVxufVxuIiwgImltcG9ydCB0eXBlIHsgQmFzZVNwaWNlQ29tbWFuZCB9IGZyb20gXCIuL0Jhc2VTcGljZUNvbW1hbmRcIlxuXG5leHBvcnQgaW50ZXJmYWNlIEJKVENvbW1hbmRQcm9wcyB7XG4gIG5hbWU6IHN0cmluZ1xuICBjb2xsZWN0b3I6IHN0cmluZ1xuICBiYXNlOiBzdHJpbmdcbiAgZW1pdHRlcjogc3RyaW5nXG4gIHN1YnN0cmF0ZT86IHN0cmluZ1xuICBtb2RlbDogc3RyaW5nXG4gIGFyZWE/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGNsYXNzIEJKVENvbW1hbmQgaW1wbGVtZW50cyBCYXNlU3BpY2VDb21tYW5kIHtcbiAgY29tbWFuZE5hbWUgPSBcImJqdFwiIGFzIGNvbnN0XG4gIHByb3BzOiBCSlRDb21tYW5kUHJvcHNcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogQkpUQ29tbWFuZFByb3BzKSB7XG4gICAgdGhpcy5wcm9wcyA9IHByb3BzXG4gIH1cblxuICB0b1NwaWNlU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgY29uc3QgeyBuYW1lLCBjb2xsZWN0b3IsIGJhc2UsIGVtaXR0ZXIsIHN1YnN0cmF0ZSwgbW9kZWwsIGFyZWEgfSA9XG4gICAgICB0aGlzLnByb3BzXG4gICAgbGV0IHNwaWNlU3RyaW5nID0gYFEke25hbWV9ICR7Y29sbGVjdG9yfSAke2Jhc2V9ICR7ZW1pdHRlcn1gXG4gICAgaWYgKHN1YnN0cmF0ZSkge1xuICAgICAgc3BpY2VTdHJpbmcgKz0gYCAke3N1YnN0cmF0ZX1gXG4gICAgfVxuICAgIHNwaWNlU3RyaW5nICs9IGAgJHttb2RlbH1gXG4gICAgaWYgKGFyZWEpIHtcbiAgICAgIHNwaWNlU3RyaW5nICs9IGAgJHthcmVhfWBcbiAgICB9XG4gICAgcmV0dXJuIHNwaWNlU3RyaW5nXG4gIH1cbn1cbiIsICJpbXBvcnQgdHlwZSB7IEJhc2VTcGljZUNvbW1hbmQgfSBmcm9tIFwiLi9CYXNlU3BpY2VDb21tYW5kXCJcblxuZXhwb3J0IGludGVyZmFjZSBEaW9kZUNvbW1hbmRQcm9wcyB7XG4gIG5hbWU6IHN0cmluZ1xuICBwb3NpdGl2ZU5vZGU6IHN0cmluZ1xuICBuZWdhdGl2ZU5vZGU6IHN0cmluZ1xuICBtb2RlbDogc3RyaW5nXG4gIGFyZWE/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGNsYXNzIERpb2RlQ29tbWFuZCBpbXBsZW1lbnRzIEJhc2VTcGljZUNvbW1hbmQge1xuICBjb21tYW5kTmFtZSA9IFwiZGlvZGVcIiBhcyBjb25zdFxuICBwcm9wczogRGlvZGVDb21tYW5kUHJvcHNcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogRGlvZGVDb21tYW5kUHJvcHMpIHtcbiAgICB0aGlzLnByb3BzID0gcHJvcHNcbiAgfVxuXG4gIHRvU3BpY2VTdHJpbmcoKTogc3RyaW5nIHtcbiAgICBjb25zdCB7IG5hbWUsIHBvc2l0aXZlTm9kZSwgbmVnYXRpdmVOb2RlLCBtb2RlbCwgYXJlYSB9ID0gdGhpcy5wcm9wc1xuICAgIGxldCBzcGljZVN0cmluZyA9IGBEJHtuYW1lfSAke3Bvc2l0aXZlTm9kZX0gJHtuZWdhdGl2ZU5vZGV9ICR7bW9kZWx9YFxuICAgIGlmIChhcmVhKSB7XG4gICAgICBzcGljZVN0cmluZyArPSBgICR7YXJlYX1gXG4gICAgfVxuICAgIHJldHVybiBzcGljZVN0cmluZ1xuICB9XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBCYXNlU3BpY2VDb21tYW5kIH0gZnJvbSBcIi4vQmFzZVNwaWNlQ29tbWFuZFwiXG5cbmV4cG9ydCBpbnRlcmZhY2UgSW5kdWN0b3JDb21tYW5kUHJvcHMge1xuICBuYW1lOiBzdHJpbmdcbiAgcG9zaXRpdmVOb2RlOiBzdHJpbmdcbiAgbmVnYXRpdmVOb2RlOiBzdHJpbmdcbiAgbW9kZWw/OiBzdHJpbmdcbiAgdmFsdWU6IHN0cmluZ1xuICBpbml0aWFsQ29uZGl0aW9uPzogc3RyaW5nXG59XG5cbmV4cG9ydCBjbGFzcyBJbmR1Y3RvckNvbW1hbmQgaW1wbGVtZW50cyBCYXNlU3BpY2VDb21tYW5kIHtcbiAgY29tbWFuZE5hbWUgPSBcImluZHVjdG9yXCIgYXMgY29uc3RcbiAgcHJvcHM6IEluZHVjdG9yQ29tbWFuZFByb3BzXG5cbiAgY29uc3RydWN0b3IocHJvcHM6IEluZHVjdG9yQ29tbWFuZFByb3BzKSB7XG4gICAgdGhpcy5wcm9wcyA9IHByb3BzXG4gIH1cblxuICB0b1NwaWNlU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgY29uc3QgeyBuYW1lLCBwb3NpdGl2ZU5vZGUsIG5lZ2F0aXZlTm9kZSwgbW9kZWwsIHZhbHVlLCBpbml0aWFsQ29uZGl0aW9uIH0gPVxuICAgICAgdGhpcy5wcm9wc1xuICAgIGxldCBzcGljZVN0cmluZyA9IGBMJHtuYW1lfSAke3Bvc2l0aXZlTm9kZX0gJHtuZWdhdGl2ZU5vZGV9YFxuICAgIGlmIChtb2RlbCkge1xuICAgICAgc3BpY2VTdHJpbmcgKz0gYCAke21vZGVsfWBcbiAgICB9XG4gICAgc3BpY2VTdHJpbmcgKz0gYCAke3ZhbHVlfWBcbiAgICBpZiAoaW5pdGlhbENvbmRpdGlvbikge1xuICAgICAgc3BpY2VTdHJpbmcgKz0gYCBJQz0ke2luaXRpYWxDb25kaXRpb259YFxuICAgIH1cbiAgICByZXR1cm4gc3BpY2VTdHJpbmdcbiAgfVxufVxuIiwgImltcG9ydCB0eXBlIHsgQmFzZVNwaWNlQ29tbWFuZCB9IGZyb20gXCIuL0Jhc2VTcGljZUNvbW1hbmRcIlxuXG5leHBvcnQgaW50ZXJmYWNlIE1PU0ZFVENvbW1hbmRQcm9wcyB7XG4gIG5hbWU6IHN0cmluZ1xuICBkcmFpbjogc3RyaW5nXG4gIGdhdGU6IHN0cmluZ1xuICBzb3VyY2U6IHN0cmluZ1xuICBzdWJzdHJhdGU6IHN0cmluZ1xuICBtb2RlbDogc3RyaW5nXG4gIGxlbmd0aD86IHN0cmluZ1xuICB3aWR0aD86IHN0cmluZ1xuICBkcmFpbkFyZWE/OiBzdHJpbmdcbiAgc291cmNlQXJlYT86IHN0cmluZ1xuICBkcmFpblBlcmltZXRlcj86IHN0cmluZ1xuICBzb3VyY2VQZXJpbWV0ZXI/OiBzdHJpbmdcbiAgZHJhaW5SZXNpc3RhbmNlPzogc3RyaW5nXG4gIHNvdXJjZVJlc2lzdGFuY2U/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGNsYXNzIE1PU0ZFVENvbW1hbmQgaW1wbGVtZW50cyBCYXNlU3BpY2VDb21tYW5kIHtcbiAgY29tbWFuZE5hbWUgPSBcIm1vc2ZldFwiIGFzIGNvbnN0XG4gIHByb3BzOiBNT1NGRVRDb21tYW5kUHJvcHNcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogTU9TRkVUQ29tbWFuZFByb3BzKSB7XG4gICAgdGhpcy5wcm9wcyA9IHByb3BzXG4gIH1cblxuICB0b1NwaWNlU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgY29uc3Qge1xuICAgICAgbmFtZSxcbiAgICAgIGRyYWluLFxuICAgICAgZ2F0ZSxcbiAgICAgIHNvdXJjZSxcbiAgICAgIHN1YnN0cmF0ZSxcbiAgICAgIG1vZGVsLFxuICAgICAgbGVuZ3RoLFxuICAgICAgd2lkdGgsXG4gICAgICBkcmFpbkFyZWEsXG4gICAgICBzb3VyY2VBcmVhLFxuICAgICAgZHJhaW5QZXJpbWV0ZXIsXG4gICAgICBzb3VyY2VQZXJpbWV0ZXIsXG4gICAgICBkcmFpblJlc2lzdGFuY2UsXG4gICAgICBzb3VyY2VSZXNpc3RhbmNlLFxuICAgIH0gPSB0aGlzLnByb3BzXG5cbiAgICBsZXQgc3BpY2VTdHJpbmcgPSBgTSR7bmFtZX0gJHtkcmFpbn0gJHtnYXRlfSAke3NvdXJjZX0gJHtzdWJzdHJhdGV9ICR7bW9kZWx9YFxuXG4gICAgY29uc3QgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+ID0ge1xuICAgICAgTDogbGVuZ3RoLFxuICAgICAgVzogd2lkdGgsXG4gICAgICBBRDogZHJhaW5BcmVhLFxuICAgICAgQVM6IHNvdXJjZUFyZWEsXG4gICAgICBQRDogZHJhaW5QZXJpbWV0ZXIsXG4gICAgICBQUzogc291cmNlUGVyaW1ldGVyLFxuICAgICAgTlJEOiBkcmFpblJlc2lzdGFuY2UsXG4gICAgICBOUlM6IHNvdXJjZVJlc2lzdGFuY2UsXG4gICAgfVxuXG4gICAgT2JqZWN0LmVudHJpZXMocGFyYW1zKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICBzcGljZVN0cmluZyArPSBgICR7a2V5fT0ke3ZhbHVlfWBcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgcmV0dXJuIHNwaWNlU3RyaW5nXG4gIH1cbn1cbiIsICJpbXBvcnQgdHlwZSB7IEJhc2VTcGljZUNvbW1hbmQgfSBmcm9tIFwiLi9CYXNlU3BpY2VDb21tYW5kXCJcblxuZXhwb3J0IGludGVyZmFjZSBWb2x0YWdlQ29udHJvbGxlZFN3aXRjaENvbW1hbmRQcm9wcyB7XG4gIG5hbWU6IHN0cmluZ1xuICBwb3NpdGl2ZU5vZGU6IHN0cmluZ1xuICBuZWdhdGl2ZU5vZGU6IHN0cmluZ1xuICBwb3NpdGl2ZUNvbnRyb2w6IHN0cmluZ1xuICBuZWdhdGl2ZUNvbnRyb2w6IHN0cmluZ1xuICBtb2RlbDogc3RyaW5nXG59XG5cbmV4cG9ydCBjbGFzcyBWb2x0YWdlQ29udHJvbGxlZFN3aXRjaENvbW1hbmQgaW1wbGVtZW50cyBCYXNlU3BpY2VDb21tYW5kIHtcbiAgY29tbWFuZE5hbWUgPSBcInZvbHRhZ2VfY29udHJvbGxlZF9zd2l0Y2hcIiBhcyBjb25zdFxuICBwcm9wczogVm9sdGFnZUNvbnRyb2xsZWRTd2l0Y2hDb21tYW5kUHJvcHNcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogVm9sdGFnZUNvbnRyb2xsZWRTd2l0Y2hDb21tYW5kUHJvcHMpIHtcbiAgICB0aGlzLnByb3BzID0gcHJvcHNcbiAgfVxuXG4gIHRvU3BpY2VTdHJpbmcoKTogc3RyaW5nIHtcbiAgICBjb25zdCB7XG4gICAgICBuYW1lLFxuICAgICAgcG9zaXRpdmVOb2RlLFxuICAgICAgbmVnYXRpdmVOb2RlLFxuICAgICAgcG9zaXRpdmVDb250cm9sLFxuICAgICAgbmVnYXRpdmVDb250cm9sLFxuICAgICAgbW9kZWwsXG4gICAgfSA9IHRoaXMucHJvcHNcbiAgICByZXR1cm4gYFMke25hbWV9ICR7cG9zaXRpdmVOb2RlfSAke25lZ2F0aXZlTm9kZX0gJHtwb3NpdGl2ZUNvbnRyb2x9ICR7bmVnYXRpdmVDb250cm9sfSAke21vZGVsfWBcbiAgfVxufVxuIiwgImltcG9ydCB7IFNwaWNlTmV0bGlzdCB9IGZyb20gXCIuL3NwaWNlLWNsYXNzZXMvU3BpY2VOZXRsaXN0XCJcbmltcG9ydCB7IFNwaWNlQ29tcG9uZW50IH0gZnJvbSBcIi4vc3BpY2UtY2xhc3Nlcy9TcGljZUNvbXBvbmVudFwiXG5pbXBvcnQgeyBSZXNpc3RvckNvbW1hbmQgfSBmcm9tIFwiLi9zcGljZS1jb21tYW5kcy9SZXNpc3RvckNvbW1hbmRcIlxuaW1wb3J0IHsgQ2FwYWNpdG9yQ29tbWFuZCB9IGZyb20gXCIuL3NwaWNlLWNvbW1hbmRzL0NhcGFjaXRvckNvbW1hbmRcIlxuaW1wb3J0IHsgVm9sdGFnZVNvdXJjZUNvbW1hbmQgfSBmcm9tIFwiLi9zcGljZS1jb21tYW5kcy9Wb2x0YWdlU291cmNlQ29tbWFuZFwiXG5pbXBvcnQgeyBDdXJyZW50U291cmNlQ29tbWFuZCB9IGZyb20gXCIuL3NwaWNlLWNvbW1hbmRzL0N1cnJlbnRTb3VyY2VDb21tYW5kXCJcbmltcG9ydCB7IEJKVENvbW1hbmQgfSBmcm9tIFwiLi9zcGljZS1jb21tYW5kcy9CSlRDb21tYW5kXCJcbmltcG9ydCB7IERpb2RlQ29tbWFuZCB9IGZyb20gXCIuL3NwaWNlLWNvbW1hbmRzL0Rpb2RlQ29tbWFuZFwiXG5pbXBvcnQgeyBJbmR1Y3RvckNvbW1hbmQgfSBmcm9tIFwiLi9zcGljZS1jb21tYW5kcy9JbmR1Y3RvckNvbW1hbmRcIlxuaW1wb3J0IHsgTU9TRkVUQ29tbWFuZCB9IGZyb20gXCIuL3NwaWNlLWNvbW1hbmRzL01PU0ZFVENvbW1hbmRcIlxuaW1wb3J0IHsgVm9sdGFnZUNvbnRyb2xsZWRTd2l0Y2hDb21tYW5kIH0gZnJvbSBcIi4vc3BpY2UtY29tbWFuZHMvVm9sdGFnZUNvbnRyb2xsZWRTd2l0Y2hDb21tYW5kXCJcbmltcG9ydCB0eXBlIHtcbiAgQW55Q2lyY3VpdEVsZW1lbnQsXG4gIFNpbXVsYXRpb25Td2l0Y2gsXG4gIFNpbXVsYXRpb25Wb2x0YWdlUHJvYmUsXG59IGZyb20gXCJjaXJjdWl0LWpzb25cIlxuaW1wb3J0IHsgZ2V0U291cmNlUG9ydENvbm5lY3Rpdml0eU1hcEZyb21DaXJjdWl0SnNvbiB9IGZyb20gXCJjaXJjdWl0LWpzb24tdG8tY29ubmVjdGl2aXR5LW1hcFwiXG5pbXBvcnQgeyBzdSB9IGZyb20gXCJAdHNjaXJjdWl0L2NpcmN1aXQtanNvbi11dGlsXCJcblxuZXhwb3J0IGZ1bmN0aW9uIGNpcmN1aXRKc29uVG9TcGljZShcbiAgY2lyY3VpdEpzb246IEFueUNpcmN1aXRFbGVtZW50W10sXG4pOiBTcGljZU5ldGxpc3Qge1xuICBjb25zdCBuZXRsaXN0ID0gbmV3IFNwaWNlTmV0bGlzdChcIiogQ2lyY3VpdCBKU09OIHRvIFNQSUNFIE5ldGxpc3RcIilcbiAgY29uc3Qgc291cmNlQ29tcG9uZW50cyA9IHN1KGNpcmN1aXRKc29uKS5zb3VyY2VfY29tcG9uZW50Lmxpc3QoKVxuICBjb25zdCBzb3VyY2VQb3J0cyA9IHN1KGNpcmN1aXRKc29uKS5zb3VyY2VfcG9ydC5saXN0KClcbiAgY29uc3Qgc291cmNlVHJhY2VzID0gc3UoY2lyY3VpdEpzb24pLnNvdXJjZV90cmFjZS5saXN0KClcbiAgY29uc3Qgc2ltdWxhdGlvblByb2JlcyA9IGNpcmN1aXRKc29uLmZpbHRlcihcbiAgICAoZWxtKSA9PiBlbG0udHlwZSA9PT0gXCJzaW11bGF0aW9uX3ZvbHRhZ2VfcHJvYmVcIixcbiAgKSBhcyBTaW11bGF0aW9uVm9sdGFnZVByb2JlW11cbiAgY29uc3Qgc2ltdWxhdGlvblN3aXRjaGVzID0gY2lyY3VpdEpzb25cbiAgICAuZmlsdGVyKFxuICAgICAgKGVsZW1lbnQpID0+IChlbGVtZW50IGFzIHsgdHlwZT86IHN0cmluZyB9KS50eXBlID09PSBcInNpbXVsYXRpb25fc3dpdGNoXCIsXG4gICAgKVxuICAgIC5tYXAoKGVsZW1lbnQpID0+IGVsZW1lbnQgYXMgdW5rbm93biBhcyBTaW11bGF0aW9uU3dpdGNoKVxuICBjb25zdCBzaW11bGF0aW9uU3dpdGNoTWFwID0gbmV3IE1hcDxzdHJpbmcsIFNpbXVsYXRpb25Td2l0Y2g+KClcblxuICBmb3IgKGNvbnN0IHNpbVN3aXRjaCBvZiBzaW11bGF0aW9uU3dpdGNoZXMpIHtcbiAgICBpZiAoc2ltU3dpdGNoLnNvdXJjZV9jb21wb25lbnRfaWQpIHtcbiAgICAgIHNpbXVsYXRpb25Td2l0Y2hNYXAuc2V0KHNpbVN3aXRjaC5zb3VyY2VfY29tcG9uZW50X2lkLCBzaW1Td2l0Y2gpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgY29ubk1hcCA9IGdldFNvdXJjZVBvcnRDb25uZWN0aXZpdHlNYXBGcm9tQ2lyY3VpdEpzb24oY2lyY3VpdEpzb24pXG5cbiAgLy8gQ3JlYXRlIG5vZGUgbWFwcGluZyBmcm9tIHBvcnQgY29ubmVjdGlvbnNcbiAgY29uc3Qgbm9kZU1hcCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KClcbiAgY29uc3QgbmV0VG9Ob2RlTmFtZSA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KClcbiAgbGV0IG5vZGVDb3VudGVyID0gMVxuXG4gIGNvbnN0IHByb2JlTmFtZXMgPSBuZXcgU2V0PHN0cmluZz4oKVxuICBpZiAoc2ltdWxhdGlvblByb2Jlcy5sZW5ndGggPiAwKSB7XG4gICAgZm9yIChjb25zdCBwcm9iZSBvZiBzaW11bGF0aW9uUHJvYmVzKSB7XG4gICAgICBpZiAocHJvYmUubmFtZSkge1xuICAgICAgICBwcm9iZU5hbWVzLmFkZChwcm9iZS5uYW1lKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIElmIHRoZXJlIGFyZSBwcm9iZSBuYW1lcyBsaWtlIE4xLCBOMiwgbWFrZSBzdXJlIHdlIGRvbid0IGhhdmUgY29uZmxpY3RzXG4gIGNvbnN0IG51bWVyaWNQcm9iZU5hbWVzID0gWy4uLnByb2JlTmFtZXNdXG4gICAgLm1hcCgobmFtZSkgPT4gL15OKFxcZCspJC9pLmV4ZWMobmFtZSkpXG4gICAgLmZpbHRlcigobSk6IG0gaXMgUmVnRXhwRXhlY0FycmF5ID0+IG0gIT09IG51bGwpXG4gICAgLm1hcCgobSkgPT4gcGFyc2VJbnQobVsxXSwgMTApKVxuXG4gIGlmIChudW1lcmljUHJvYmVOYW1lcy5sZW5ndGggPiAwKSB7XG4gICAgbm9kZUNvdW50ZXIgPSBNYXRoLm1heCguLi5udW1lcmljUHJvYmVOYW1lcykgKyAxXG4gIH1cblxuICBjb25zdCBncm91bmROZXRzID0gbmV3IFNldDxzdHJpbmc+KClcblxuICAvLyBGaW5kIGdyb3VuZCBmcm9tIHNvdXJjZSBuZXRzIHRoYXQgaW5jbHVkZSBcImduZFwiIGluIHRoZSBuYW1lXG4gIGNvbnN0IGduZFNvdXJjZU5ldElkcyA9IG5ldyBTZXQoXG4gICAgc3UoY2lyY3VpdEpzb24pXG4gICAgICAuc291cmNlX25ldC5saXN0KClcbiAgICAgIC5maWx0ZXIoKHNuKSA9PiBzbi5uYW1lPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKFwiZ25kXCIpKVxuICAgICAgLm1hcCgoc24pID0+IHNuLnNvdXJjZV9uZXRfaWQpLFxuICApXG5cbiAgaWYgKGduZFNvdXJjZU5ldElkcy5zaXplID4gMCkge1xuICAgIGZvciAoY29uc3QgdHJhY2Ugb2Ygc3UoY2lyY3VpdEpzb24pLnNvdXJjZV90cmFjZS5saXN0KCkpIHtcbiAgICAgIGlmICh0cmFjZS5jb25uZWN0ZWRfc291cmNlX3BvcnRfaWRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgaXNPbkduZE5ldCA9IHRyYWNlLmNvbm5lY3RlZF9zb3VyY2VfbmV0X2lkcy5zb21lKChuZXRJZCkgPT5cbiAgICAgICAgICBnbmRTb3VyY2VOZXRJZHMuaGFzKG5ldElkKSxcbiAgICAgICAgKVxuICAgICAgICBpZiAoaXNPbkduZE5ldCkge1xuICAgICAgICAgIGNvbnN0IGFQb3J0T25HbmQgPSB0cmFjZS5jb25uZWN0ZWRfc291cmNlX3BvcnRfaWRzWzBdXG4gICAgICAgICAgY29uc3QgZ25kTmV0ID0gY29ubk1hcC5nZXROZXRDb25uZWN0ZWRUb0lkKGFQb3J0T25HbmQpXG4gICAgICAgICAgaWYgKGduZE5ldCkge1xuICAgICAgICAgICAgZ3JvdW5kTmV0cy5hZGQoZ25kTmV0KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEZpbmQgZ3JvdW5kIG5vZGUgZnJvbSBwb3J0cyBuYW1lZCBcIkdORFwiXG4gIGNvbnN0IGdyb3VuZFBvcnRzID0gc291cmNlUG9ydHMuZmlsdGVyKChwKSA9PiBwLm5hbWU/LnRvTG93ZXJDYXNlKCkgPT09IFwiZ25kXCIpXG4gIGZvciAoY29uc3QgZ3JvdW5kUG9ydCBvZiBncm91bmRQb3J0cykge1xuICAgIGNvbnN0IGdyb3VuZE5ldCA9IGNvbm5NYXAuZ2V0TmV0Q29ubmVjdGVkVG9JZChncm91bmRQb3J0LnNvdXJjZV9wb3J0X2lkKVxuICAgIGlmIChncm91bmROZXQpIHtcbiAgICAgIGdyb3VuZE5ldHMuYWRkKGdyb3VuZE5ldClcbiAgICB9XG4gIH1cblxuICBmb3IgKGNvbnN0IHNpbVNvdXJjZSBvZiBzdShjaXJjdWl0SnNvbikuc2ltdWxhdGlvbl92b2x0YWdlX3NvdXJjZS5saXN0KCkpIHtcbiAgICBjb25zdCBuZWdfcG9ydF9pZCA9XG4gICAgICAoc2ltU291cmNlIGFzIGFueSkubmVnYXRpdmVfc291cmNlX3BvcnRfaWQgPz9cbiAgICAgIChzaW1Tb3VyY2UgYXMgYW55KS50ZXJtaW5hbDJfc291cmNlX3BvcnRfaWRcbiAgICBpZiAobmVnX3BvcnRfaWQpIHtcbiAgICAgIGNvbnN0IGduZF9uZXQgPSBjb25uTWFwLmdldE5ldENvbm5lY3RlZFRvSWQobmVnX3BvcnRfaWQpXG4gICAgICBpZiAoZ25kX25ldCkge1xuICAgICAgICBncm91bmROZXRzLmFkZChnbmRfbmV0KVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZvciAoY29uc3QgZ3JvdW5kTmV0IG9mIGdyb3VuZE5ldHMpIHtcbiAgICBuZXRUb05vZGVOYW1lLnNldChncm91bmROZXQsIFwiMFwiKVxuICB9XG5cbiAgLy8gUHJlLWFzc2lnbiBub2RlIG5hbWVzIGZyb20gdm9sdGFnZSBwcm9iZXNcbiAgaWYgKHNpbXVsYXRpb25Qcm9iZXMubGVuZ3RoID4gMCkge1xuICAgIGZvciAoY29uc3QgcHJvYmUgb2Ygc2ltdWxhdGlvblByb2Jlcykge1xuICAgICAgaWYgKCFwcm9iZS5uYW1lKSBjb250aW51ZVxuXG4gICAgICBpZiAoXG4gICAgICAgIHByb2JlLnJlZmVyZW5jZV9pbnB1dF9zb3VyY2VfcG9ydF9pZCB8fFxuICAgICAgICBwcm9iZS5yZWZlcmVuY2VfaW5wdXRfc291cmNlX25ldF9pZFxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGxldCBuZXQ6IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGxcbiAgICAgIGNvbnN0IHNpZ25hbF9wb3J0X2lkID0gcHJvYmUuc2lnbmFsX2lucHV0X3NvdXJjZV9wb3J0X2lkXG4gICAgICBjb25zdCBzaWduYWxfbmV0X2lkID0gcHJvYmUuc2lnbmFsX2lucHV0X3NvdXJjZV9uZXRfaWRcblxuICAgICAgaWYgKHNpZ25hbF9wb3J0X2lkKSB7XG4gICAgICAgIG5ldCA9IGNvbm5NYXAuZ2V0TmV0Q29ubmVjdGVkVG9JZChzaWduYWxfcG9ydF9pZClcbiAgICAgIH0gZWxzZSBpZiAoc2lnbmFsX25ldF9pZCkge1xuICAgICAgICBjb25zdCB0cmFjZSA9IHNvdXJjZVRyYWNlcy5maW5kKCh0KSA9PlxuICAgICAgICAgIHQuY29ubmVjdGVkX3NvdXJjZV9uZXRfaWRzLmluY2x1ZGVzKHNpZ25hbF9uZXRfaWQhKSxcbiAgICAgICAgKVxuICAgICAgICBpZiAodHJhY2UgJiYgdHJhY2UuY29ubmVjdGVkX3NvdXJjZV9wb3J0X2lkcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3QgcG9ydElkID0gdHJhY2UuY29ubmVjdGVkX3NvdXJjZV9wb3J0X2lkc1swXVxuICAgICAgICAgIG5ldCA9IGNvbm5NYXAuZ2V0TmV0Q29ubmVjdGVkVG9JZChwb3J0SWQpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKG5ldCkge1xuICAgICAgICBpZiAoIW5ldFRvTm9kZU5hbWUuaGFzKG5ldCkpIHtcbiAgICAgICAgICBuZXRUb05vZGVOYW1lLnNldChuZXQsIHByb2JlLm5hbWUpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoc2lnbmFsX3BvcnRfaWQgJiYgcHJvYmUubmFtZSkge1xuICAgICAgICAvLyBJdCdzIGEgZmxvYXRpbmcgcG9ydCB3aXRoIGEgcHJvYmUsIHNvIHdlIG1hcCBpdCBkaXJlY3RseS4gVGhpcyBwb3J0XG4gICAgICAgIC8vIHdpbGwgbm93IGJlIHNraXBwZWQgaW4gdGhlIHNlY29uZC1wYXNzIGZvciB1bmNvbm5lY3RlZCBwb3J0cy5cbiAgICAgICAgbm9kZU1hcC5zZXQoc2lnbmFsX3BvcnRfaWQsIHByb2JlLm5hbWUpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gRmlyc3QgcGFzczogYXNzaWduIG5vZGUgbnVtYmVycyB0byBhbGwgY29ubmVjdGVkIG5ldHNcbiAgZm9yIChjb25zdCBwb3J0IG9mIHNvdXJjZVBvcnRzKSB7XG4gICAgY29uc3QgcG9ydElkID0gcG9ydC5zb3VyY2VfcG9ydF9pZFxuICAgIGNvbnN0IG5ldCA9IGNvbm5NYXAuZ2V0TmV0Q29ubmVjdGVkVG9JZChwb3J0SWQpXG4gICAgaWYgKG5ldCkge1xuICAgICAgaWYgKCFuZXRUb05vZGVOYW1lLmhhcyhuZXQpKSB7XG4gICAgICAgIG5ldFRvTm9kZU5hbWUuc2V0KG5ldCwgYE4ke25vZGVDb3VudGVyKyt9YClcbiAgICAgIH1cbiAgICAgIG5vZGVNYXAuc2V0KHBvcnRJZCwgbmV0VG9Ob2RlTmFtZS5nZXQobmV0KSEpXG4gICAgfVxuICB9XG5cbiAgLy8gU2Vjb25kIHBhc3M6IGFzc2lnbiBub2RlIG51bWJlcnMgdG8gdW5jb25uZWN0ZWQgcG9ydHNcbiAgZm9yIChjb25zdCBwb3J0IG9mIHNvdXJjZVBvcnRzKSB7XG4gICAgY29uc3QgcG9ydElkID0gcG9ydC5zb3VyY2VfcG9ydF9pZFxuICAgIC8vIElmIGEgcG9ydCB3YXNuJ3QgaW4gYSBuZXQsIGl0IHdvbid0IGJlIGluIHRoZSBub2RlTWFwIHlldFxuICAgIGlmICghbm9kZU1hcC5oYXMocG9ydElkKSkge1xuICAgICAgLy8gVW5jb25uZWN0ZWQgcG9ydCwgY3JlYXRlIGEgbmV3IGZsb2F0aW5nIG5vZGUgZm9yIGl0XG4gICAgICBub2RlTWFwLnNldChwb3J0SWQsIGBOJHtub2RlQ291bnRlcisrfWApXG4gICAgfVxuICB9XG5cbiAgLy8gUHJvY2VzcyBlYWNoIGNvbXBvbmVudFxuICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiBzb3VyY2VDb21wb25lbnRzKSB7XG4gICAgaWYgKGNvbXBvbmVudC50eXBlICE9PSBcInNvdXJjZV9jb21wb25lbnRcIikgY29udGludWVcblxuICAgIGNvbnN0IGNvbXBvbmVudFBvcnRzID0gc3UoY2lyY3VpdEpzb24pXG4gICAgICAuc291cmNlX3BvcnQubGlzdCh7XG4gICAgICAgIHNvdXJjZV9jb21wb25lbnRfaWQ6IGNvbXBvbmVudC5zb3VyY2VfY29tcG9uZW50X2lkLFxuICAgICAgfSlcbiAgICAgIC5zb3J0KChhLCBiKSA9PiAoYS5waW5fbnVtYmVyID8/IDApIC0gKGIucGluX251bWJlciA/PyAwKSlcblxuICAgIC8vIEdldCBub2RlIG5hbWVzIGZvciBjb21wb25lbnQgcG9ydHNcbiAgICBjb25zdCBub2RlcyA9IGNvbXBvbmVudFBvcnRzLm1hcCgocG9ydCkgPT4ge1xuICAgICAgcmV0dXJuIG5vZGVNYXAuZ2V0KHBvcnQuc291cmNlX3BvcnRfaWQpIHx8IFwiMFwiXG4gICAgfSlcblxuICAgIC8vIENyZWF0ZSBTUElDRSBjb21wb25lbnQgYmFzZWQgb24gdHlwZVxuICAgIGlmIChcImZ0eXBlXCIgaW4gY29tcG9uZW50KSB7XG4gICAgICBsZXQgc3BpY2VDb21wb25lbnQ6IFNwaWNlQ29tcG9uZW50IHwgbnVsbCA9IG51bGxcblxuICAgICAgc3dpdGNoIChjb21wb25lbnQuZnR5cGUpIHtcbiAgICAgICAgY2FzZSBcInNpbXBsZV9yZXNpc3RvclwiOiB7XG4gICAgICAgICAgaWYgKFwicmVzaXN0YW5jZVwiIGluIGNvbXBvbmVudCAmJiBcIm5hbWVcIiBpbiBjb21wb25lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc2lzdG9yQ21kID0gbmV3IFJlc2lzdG9yQ29tbWFuZCh7XG4gICAgICAgICAgICAgIG5hbWU6IGNvbXBvbmVudC5uYW1lLFxuICAgICAgICAgICAgICBwb3NpdGl2ZU5vZGU6IG5vZGVzWzBdIHx8IFwiMFwiLFxuICAgICAgICAgICAgICBuZWdhdGl2ZU5vZGU6IG5vZGVzWzFdIHx8IFwiMFwiLFxuICAgICAgICAgICAgICB2YWx1ZTogZm9ybWF0UmVzaXN0YW5jZShjb21wb25lbnQucmVzaXN0YW5jZSksXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgc3BpY2VDb21wb25lbnQgPSBuZXcgU3BpY2VDb21wb25lbnQoXG4gICAgICAgICAgICAgIGNvbXBvbmVudC5uYW1lLFxuICAgICAgICAgICAgICByZXNpc3RvckNtZCxcbiAgICAgICAgICAgICAgbm9kZXMsXG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcInNpbXBsZV9zd2l0Y2hcIjoge1xuICAgICAgICAgIGNvbnN0IHNhbml0aXplZEJhc2UgPSBzYW5pdGl6ZUlkZW50aWZpZXIoXG4gICAgICAgICAgICBjb21wb25lbnQubmFtZSA/PyBjb21wb25lbnQuc291cmNlX2NvbXBvbmVudF9pZCxcbiAgICAgICAgICAgIFwiU1dcIixcbiAgICAgICAgICApXG4gICAgICAgICAgY29uc3QgcG9zaXRpdmVOb2RlID0gbm9kZXNbMF0gfHwgXCIwXCJcbiAgICAgICAgICBjb25zdCBuZWdhdGl2ZU5vZGUgPSBub2Rlc1sxXSB8fCBcIjBcIlxuICAgICAgICAgIGNvbnN0IGNvbnRyb2xOb2RlID0gYE5DVFJMXyR7c2FuaXRpemVkQmFzZX1gXG4gICAgICAgICAgY29uc3QgbW9kZWxOYW1lID0gYFNXXyR7c2FuaXRpemVkQmFzZX1gXG5cbiAgICAgICAgICBjb25zdCBhc3NvY2lhdGVkU2ltdWxhdGlvblN3aXRjaCA9IHNpbXVsYXRpb25Td2l0Y2hNYXAuZ2V0KFxuICAgICAgICAgICAgY29tcG9uZW50LnNvdXJjZV9jb21wb25lbnRfaWQsXG4gICAgICAgICAgKVxuXG4gICAgICAgICAgY29uc3QgY29udHJvbFZhbHVlID0gYnVpbGRTaW11bGF0aW9uU3dpdGNoQ29udHJvbFZhbHVlKFxuICAgICAgICAgICAgYXNzb2NpYXRlZFNpbXVsYXRpb25Td2l0Y2gsXG4gICAgICAgICAgKVxuXG4gICAgICAgICAgY29uc3Qgc3dpdGNoQ21kID0gbmV3IFZvbHRhZ2VDb250cm9sbGVkU3dpdGNoQ29tbWFuZCh7XG4gICAgICAgICAgICBuYW1lOiBzYW5pdGl6ZWRCYXNlLFxuICAgICAgICAgICAgcG9zaXRpdmVOb2RlLFxuICAgICAgICAgICAgbmVnYXRpdmVOb2RlLFxuICAgICAgICAgICAgcG9zaXRpdmVDb250cm9sOiBjb250cm9sTm9kZSxcbiAgICAgICAgICAgIG5lZ2F0aXZlQ29udHJvbDogXCIwXCIsXG4gICAgICAgICAgICBtb2RlbDogbW9kZWxOYW1lLFxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICBzcGljZUNvbXBvbmVudCA9IG5ldyBTcGljZUNvbXBvbmVudChzYW5pdGl6ZWRCYXNlLCBzd2l0Y2hDbWQsIFtcbiAgICAgICAgICAgIHBvc2l0aXZlTm9kZSxcbiAgICAgICAgICAgIG5lZ2F0aXZlTm9kZSxcbiAgICAgICAgICAgIGNvbnRyb2xOb2RlLFxuICAgICAgICAgICAgXCIwXCIsXG4gICAgICAgICAgXSlcblxuICAgICAgICAgIGlmICghbmV0bGlzdC5tb2RlbHMuaGFzKG1vZGVsTmFtZSkpIHtcbiAgICAgICAgICAgIG5ldGxpc3QubW9kZWxzLnNldChcbiAgICAgICAgICAgICAgbW9kZWxOYW1lLFxuICAgICAgICAgICAgICBgLk1PREVMICR7bW9kZWxOYW1lfSBTVyhSb249MC4xIFJvZmY9MWU5IFZ0PTIuNSBWaD0wLjEpYCxcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBjb250cm9sU291cmNlTmFtZSA9IGBDVFJMXyR7c2FuaXRpemVkQmFzZX1gXG4gICAgICAgICAgY29uc3QgY29udHJvbFNvdXJjZUNtZCA9IG5ldyBWb2x0YWdlU291cmNlQ29tbWFuZCh7XG4gICAgICAgICAgICBuYW1lOiBjb250cm9sU291cmNlTmFtZSxcbiAgICAgICAgICAgIHBvc2l0aXZlTm9kZTogY29udHJvbE5vZGUsXG4gICAgICAgICAgICBuZWdhdGl2ZU5vZGU6IFwiMFwiLFxuICAgICAgICAgICAgdmFsdWU6IGNvbnRyb2xWYWx1ZSxcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgY29uc3QgY29udHJvbENvbXBvbmVudCA9IG5ldyBTcGljZUNvbXBvbmVudChcbiAgICAgICAgICAgIGNvbnRyb2xTb3VyY2VOYW1lLFxuICAgICAgICAgICAgY29udHJvbFNvdXJjZUNtZCxcbiAgICAgICAgICAgIFtjb250cm9sTm9kZSwgXCIwXCJdLFxuICAgICAgICAgIClcblxuICAgICAgICAgIG5ldGxpc3QuYWRkQ29tcG9uZW50KGNvbnRyb2xDb21wb25lbnQpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgXCJzaW1wbGVfY2FwYWNpdG9yXCI6IHtcbiAgICAgICAgICBpZiAoXCJjYXBhY2l0YW5jZVwiIGluIGNvbXBvbmVudCAmJiBcIm5hbWVcIiBpbiBjb21wb25lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGNhcGFjaXRvckNtZCA9IG5ldyBDYXBhY2l0b3JDb21tYW5kKHtcbiAgICAgICAgICAgICAgbmFtZTogY29tcG9uZW50Lm5hbWUsXG4gICAgICAgICAgICAgIHBvc2l0aXZlTm9kZTogbm9kZXNbMF0gfHwgXCIwXCIsXG4gICAgICAgICAgICAgIG5lZ2F0aXZlTm9kZTogbm9kZXNbMV0gfHwgXCIwXCIsXG4gICAgICAgICAgICAgIHZhbHVlOiBmb3JtYXRDYXBhY2l0YW5jZShjb21wb25lbnQuY2FwYWNpdGFuY2UpLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIHNwaWNlQ29tcG9uZW50ID0gbmV3IFNwaWNlQ29tcG9uZW50KFxuICAgICAgICAgICAgICBjb21wb25lbnQubmFtZSxcbiAgICAgICAgICAgICAgY2FwYWNpdG9yQ21kLFxuICAgICAgICAgICAgICBub2RlcyxcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwic2ltcGxlX2Rpb2RlXCI6IHtcbiAgICAgICAgICBpZiAoXCJuYW1lXCIgaW4gY29tcG9uZW50KSB7XG4gICAgICAgICAgICBjb25zdCBhbm9kZVBvcnQgPSBjb21wb25lbnRQb3J0cy5maW5kKFxuICAgICAgICAgICAgICAocCkgPT5cbiAgICAgICAgICAgICAgICBwLm5hbWU/LnRvTG93ZXJDYXNlKCkgPT09IFwiYW5vZGVcIiB8fFxuICAgICAgICAgICAgICAgIHAucG9ydF9oaW50cz8uaW5jbHVkZXMoXCJhbm9kZVwiKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbnN0IGNhdGhvZGVQb3J0ID0gY29tcG9uZW50UG9ydHMuZmluZChcbiAgICAgICAgICAgICAgKHApID0+XG4gICAgICAgICAgICAgICAgcC5uYW1lPy50b0xvd2VyQ2FzZSgpID09PSBcImNhdGhvZGVcIiB8fFxuICAgICAgICAgICAgICAgIHAucG9ydF9oaW50cz8uaW5jbHVkZXMoXCJjYXRob2RlXCIpLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgY29uc3QgcG9zaXRpdmVOb2RlID1cbiAgICAgICAgICAgICAgbm9kZU1hcC5nZXQoYW5vZGVQb3J0Py5zb3VyY2VfcG9ydF9pZCA/PyBcIlwiKSB8fCBcIjBcIlxuICAgICAgICAgICAgY29uc3QgbmVnYXRpdmVOb2RlID1cbiAgICAgICAgICAgICAgbm9kZU1hcC5nZXQoY2F0aG9kZVBvcnQ/LnNvdXJjZV9wb3J0X2lkID8/IFwiXCIpIHx8IFwiMFwiXG5cbiAgICAgICAgICAgIGNvbnN0IG1vZGVsTmFtZSA9IFwiRFwiXG4gICAgICAgICAgICBjb25zdCBkaW9kZUNtZCA9IG5ldyBEaW9kZUNvbW1hbmQoe1xuICAgICAgICAgICAgICBuYW1lOiBjb21wb25lbnQubmFtZSxcbiAgICAgICAgICAgICAgcG9zaXRpdmVOb2RlLFxuICAgICAgICAgICAgICBuZWdhdGl2ZU5vZGUsXG4gICAgICAgICAgICAgIG1vZGVsOiBtb2RlbE5hbWUsIC8vIGdlbmVyaWMgbW9kZWxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBuZXRsaXN0Lm1vZGVscy5zZXQobW9kZWxOYW1lLCBgLk1PREVMICR7bW9kZWxOYW1lfSBEYClcbiAgICAgICAgICAgIHNwaWNlQ29tcG9uZW50ID0gbmV3IFNwaWNlQ29tcG9uZW50KGNvbXBvbmVudC5uYW1lLCBkaW9kZUNtZCwgW1xuICAgICAgICAgICAgICBwb3NpdGl2ZU5vZGUsXG4gICAgICAgICAgICAgIG5lZ2F0aXZlTm9kZSxcbiAgICAgICAgICAgIF0pXG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcInNpbXBsZV9pbmR1Y3RvclwiOiB7XG4gICAgICAgICAgaWYgKFwiaW5kdWN0YW5jZVwiIGluIGNvbXBvbmVudCAmJiBcIm5hbWVcIiBpbiBjb21wb25lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGluZHVjdG9yQ21kID0gbmV3IEluZHVjdG9yQ29tbWFuZCh7XG4gICAgICAgICAgICAgIG5hbWU6IGNvbXBvbmVudC5uYW1lLFxuICAgICAgICAgICAgICBwb3NpdGl2ZU5vZGU6IG5vZGVzWzBdIHx8IFwiMFwiLFxuICAgICAgICAgICAgICBuZWdhdGl2ZU5vZGU6IG5vZGVzWzFdIHx8IFwiMFwiLFxuICAgICAgICAgICAgICB2YWx1ZTogZm9ybWF0SW5kdWN0YW5jZShjb21wb25lbnQuaW5kdWN0YW5jZSksXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgc3BpY2VDb21wb25lbnQgPSBuZXcgU3BpY2VDb21wb25lbnQoXG4gICAgICAgICAgICAgIGNvbXBvbmVudC5uYW1lLFxuICAgICAgICAgICAgICBpbmR1Y3RvckNtZCxcbiAgICAgICAgICAgICAgbm9kZXMsXG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcInNpbXBsZV9tb3NmZXRcIjoge1xuICAgICAgICAgIGlmIChcIm5hbWVcIiBpbiBjb21wb25lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGRyYWluUG9ydCA9IGNvbXBvbmVudFBvcnRzLmZpbmQoXG4gICAgICAgICAgICAgIChwKSA9PlxuICAgICAgICAgICAgICAgIHAubmFtZT8udG9Mb3dlckNhc2UoKSA9PT0gXCJkcmFpblwiIHx8XG4gICAgICAgICAgICAgICAgcC5wb3J0X2hpbnRzPy5pbmNsdWRlcyhcImRyYWluXCIpLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgY29uc3QgZ2F0ZVBvcnQgPSBjb21wb25lbnRQb3J0cy5maW5kKFxuICAgICAgICAgICAgICAocCkgPT5cbiAgICAgICAgICAgICAgICBwLm5hbWU/LnRvTG93ZXJDYXNlKCkgPT09IFwiZ2F0ZVwiIHx8XG4gICAgICAgICAgICAgICAgcC5wb3J0X2hpbnRzPy5pbmNsdWRlcyhcImdhdGVcIiksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb25zdCBzb3VyY2VQb3J0ID0gY29tcG9uZW50UG9ydHMuZmluZChcbiAgICAgICAgICAgICAgKHApID0+XG4gICAgICAgICAgICAgICAgcC5uYW1lPy50b0xvd2VyQ2FzZSgpID09PSBcInNvdXJjZVwiIHx8XG4gICAgICAgICAgICAgICAgcC5wb3J0X2hpbnRzPy5pbmNsdWRlcyhcInNvdXJjZVwiKSxcbiAgICAgICAgICAgIClcblxuICAgICAgICAgICAgY29uc3QgZHJhaW5Ob2RlID1cbiAgICAgICAgICAgICAgbm9kZU1hcC5nZXQoZHJhaW5Qb3J0Py5zb3VyY2VfcG9ydF9pZCA/PyBcIlwiKSB8fCBcIjBcIlxuICAgICAgICAgICAgY29uc3QgZ2F0ZU5vZGUgPSBub2RlTWFwLmdldChnYXRlUG9ydD8uc291cmNlX3BvcnRfaWQgPz8gXCJcIikgfHwgXCIwXCJcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZU5vZGUgPVxuICAgICAgICAgICAgICBub2RlTWFwLmdldChzb3VyY2VQb3J0Py5zb3VyY2VfcG9ydF9pZCA/PyBcIlwiKSB8fCBcIjBcIlxuXG4gICAgICAgICAgICAvLyBGb3IgMy1waW4gTU9TRkVUcywgc3Vic3RyYXRlIGlzIHR5cGljYWxseSBjb25uZWN0ZWQgdG8gc291cmNlXG4gICAgICAgICAgICBjb25zdCBzdWJzdHJhdGVOb2RlID0gc291cmNlTm9kZVxuXG4gICAgICAgICAgICBjb25zdCBjaGFubmVsX3R5cGUgPSAoY29tcG9uZW50IGFzIGFueSkuY2hhbm5lbF90eXBlID8/IFwiblwiXG4gICAgICAgICAgICBjb25zdCBtb3NmZXRfbW9kZSA9IChjb21wb25lbnQgYXMgYW55KS5tb3NmZXRfbW9kZSA/PyBcImVuaGFuY2VtZW50XCJcblxuICAgICAgICAgICAgY29uc3QgbW9kZWxUeXBlID0gYCR7Y2hhbm5lbF90eXBlLnRvVXBwZXJDYXNlKCl9TU9TYFxuICAgICAgICAgICAgY29uc3QgbW9kZWxOYW1lID0gYCR7bW9kZWxUeXBlfV8ke21vc2ZldF9tb2RlLnRvVXBwZXJDYXNlKCl9YFxuXG4gICAgICAgICAgICBpZiAoIW5ldGxpc3QubW9kZWxzLmhhcyhtb2RlbE5hbWUpKSB7XG4gICAgICAgICAgICAgIGlmIChtb3NmZXRfbW9kZSA9PT0gXCJlbmhhbmNlbWVudFwiKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdnRvID0gY2hhbm5lbF90eXBlID09PSBcInBcIiA/IC0xIDogMVxuICAgICAgICAgICAgICAgIG5ldGxpc3QubW9kZWxzLnNldChcbiAgICAgICAgICAgICAgICAgIG1vZGVsTmFtZSxcbiAgICAgICAgICAgICAgICAgIGAuTU9ERUwgJHttb2RlbE5hbWV9ICR7bW9kZWxUeXBlfSAoVlRPPSR7dnRvfSBLUD0wLjEpYCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbmV0bGlzdC5tb2RlbHMuc2V0KFxuICAgICAgICAgICAgICAgICAgbW9kZWxOYW1lLFxuICAgICAgICAgICAgICAgICAgYC5NT0RFTCAke21vZGVsTmFtZX0gJHttb2RlbFR5cGV9IChLUD0wLjEpYCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgbW9zZmV0Q21kID0gbmV3IE1PU0ZFVENvbW1hbmQoe1xuICAgICAgICAgICAgICBuYW1lOiBjb21wb25lbnQubmFtZSxcbiAgICAgICAgICAgICAgZHJhaW46IGRyYWluTm9kZSxcbiAgICAgICAgICAgICAgZ2F0ZTogZ2F0ZU5vZGUsXG4gICAgICAgICAgICAgIHNvdXJjZTogc291cmNlTm9kZSxcbiAgICAgICAgICAgICAgc3Vic3RyYXRlOiBzdWJzdHJhdGVOb2RlLFxuICAgICAgICAgICAgICBtb2RlbDogbW9kZWxOYW1lLFxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgc3BpY2VDb21wb25lbnQgPSBuZXcgU3BpY2VDb21wb25lbnQoY29tcG9uZW50Lm5hbWUsIG1vc2ZldENtZCwgW1xuICAgICAgICAgICAgICBkcmFpbk5vZGUsXG4gICAgICAgICAgICAgIGdhdGVOb2RlLFxuICAgICAgICAgICAgICBzb3VyY2VOb2RlLFxuICAgICAgICAgICAgXSlcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwic2ltcGxlX3RyYW5zaXN0b3JcIjoge1xuICAgICAgICAgIGlmIChcIm5hbWVcIiBpbiBjb21wb25lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbGxlY3RvclBvcnQgPSBjb21wb25lbnRQb3J0cy5maW5kKFxuICAgICAgICAgICAgICAocCkgPT5cbiAgICAgICAgICAgICAgICBwLm5hbWU/LnRvTG93ZXJDYXNlKCkgPT09IFwiY29sbGVjdG9yXCIgfHxcbiAgICAgICAgICAgICAgICBwLnBvcnRfaGludHM/LmluY2x1ZGVzKFwiY29sbGVjdG9yXCIpLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgY29uc3QgYmFzZVBvcnQgPSBjb21wb25lbnRQb3J0cy5maW5kKFxuICAgICAgICAgICAgICAocCkgPT5cbiAgICAgICAgICAgICAgICBwLm5hbWU/LnRvTG93ZXJDYXNlKCkgPT09IFwiYmFzZVwiIHx8XG4gICAgICAgICAgICAgICAgcC5wb3J0X2hpbnRzPy5pbmNsdWRlcyhcImJhc2VcIiksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb25zdCBlbWl0dGVyUG9ydCA9IGNvbXBvbmVudFBvcnRzLmZpbmQoXG4gICAgICAgICAgICAgIChwKSA9PlxuICAgICAgICAgICAgICAgIHAubmFtZT8udG9Mb3dlckNhc2UoKSA9PT0gXCJlbWl0dGVyXCIgfHxcbiAgICAgICAgICAgICAgICBwLnBvcnRfaGludHM/LmluY2x1ZGVzKFwiZW1pdHRlclwiKSxcbiAgICAgICAgICAgIClcblxuICAgICAgICAgICAgaWYgKCFjb2xsZWN0b3JQb3J0IHx8ICFiYXNlUG9ydCB8fCAhZW1pdHRlclBvcnQpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgIGBUcmFuc2lzdG9yICR7Y29tcG9uZW50Lm5hbWV9IGlzIG1pc3NpbmcgcmVxdWlyZWQgcG9ydHMgKGNvbGxlY3RvciwgYmFzZSwgZW1pdHRlcilgLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGNvbGxlY3Rvck5vZGUgPVxuICAgICAgICAgICAgICBub2RlTWFwLmdldChjb2xsZWN0b3JQb3J0LnNvdXJjZV9wb3J0X2lkKSB8fCBcIjBcIlxuICAgICAgICAgICAgY29uc3QgYmFzZU5vZGUgPSBub2RlTWFwLmdldChiYXNlUG9ydC5zb3VyY2VfcG9ydF9pZCkgfHwgXCIwXCJcbiAgICAgICAgICAgIGNvbnN0IGVtaXR0ZXJOb2RlID0gbm9kZU1hcC5nZXQoZW1pdHRlclBvcnQuc291cmNlX3BvcnRfaWQpIHx8IFwiMFwiXG5cbiAgICAgICAgICAgIGNvbnN0IHRyYW5zaXN0b3JfdHlwZSA9IChjb21wb25lbnQgYXMgYW55KS50cmFuc2lzdG9yX3R5cGUgPz8gXCJucG5cIlxuICAgICAgICAgICAgY29uc3QgbW9kZWxOYW1lID0gdHJhbnNpc3Rvcl90eXBlLnRvVXBwZXJDYXNlKClcbiAgICAgICAgICAgIGlmICghbmV0bGlzdC5tb2RlbHMuaGFzKG1vZGVsTmFtZSkpIHtcbiAgICAgICAgICAgICAgbmV0bGlzdC5tb2RlbHMuc2V0KFxuICAgICAgICAgICAgICAgIG1vZGVsTmFtZSxcbiAgICAgICAgICAgICAgICBgLk1PREVMICR7bW9kZWxOYW1lfSAke3RyYW5zaXN0b3JfdHlwZS50b1VwcGVyQ2FzZSgpfWAsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgYmp0Q21kID0gbmV3IEJKVENvbW1hbmQoe1xuICAgICAgICAgICAgICBuYW1lOiBjb21wb25lbnQubmFtZSxcbiAgICAgICAgICAgICAgY29sbGVjdG9yOiBjb2xsZWN0b3JOb2RlLFxuICAgICAgICAgICAgICBiYXNlOiBiYXNlTm9kZSxcbiAgICAgICAgICAgICAgZW1pdHRlcjogZW1pdHRlck5vZGUsXG4gICAgICAgICAgICAgIG1vZGVsOiBtb2RlbE5hbWUsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgc3BpY2VDb21wb25lbnQgPSBuZXcgU3BpY2VDb21wb25lbnQoY29tcG9uZW50Lm5hbWUsIGJqdENtZCwgW1xuICAgICAgICAgICAgICBjb2xsZWN0b3JOb2RlLFxuICAgICAgICAgICAgICBiYXNlTm9kZSxcbiAgICAgICAgICAgICAgZW1pdHRlck5vZGUsXG4gICAgICAgICAgICBdKVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChzcGljZUNvbXBvbmVudCkge1xuICAgICAgICBuZXRsaXN0LmFkZENvbXBvbmVudChzcGljZUNvbXBvbmVudClcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBQcm9jZXNzIHNpbXVsYXRpb24gdm9sdGFnZSBzb3VyY2VzXG4gIGNvbnN0IHNpbXVsYXRpb25Wb2x0YWdlU291cmNlcyA9XG4gICAgc3UoY2lyY3VpdEpzb24pLnNpbXVsYXRpb25fdm9sdGFnZV9zb3VyY2UubGlzdCgpXG5cbiAgZm9yIChjb25zdCBzaW1Tb3VyY2Ugb2Ygc2ltdWxhdGlvblZvbHRhZ2VTb3VyY2VzKSB7XG4gICAgaWYgKHNpbVNvdXJjZS50eXBlICE9PSBcInNpbXVsYXRpb25fdm9sdGFnZV9zb3VyY2VcIikgY29udGludWVcblxuICAgIGlmICgoc2ltU291cmNlIGFzIGFueSkuaXNfZGNfc291cmNlID09PSBmYWxzZSkge1xuICAgICAgLy8gQUMgU291cmNlXG4gICAgICBpZiAoXG4gICAgICAgIFwidGVybWluYWwxX3NvdXJjZV9wb3J0X2lkXCIgaW4gc2ltU291cmNlICYmXG4gICAgICAgIFwidGVybWluYWwyX3NvdXJjZV9wb3J0X2lkXCIgaW4gc2ltU291cmNlICYmXG4gICAgICAgIChzaW1Tb3VyY2UgYXMgYW55KS50ZXJtaW5hbDFfc291cmNlX3BvcnRfaWQgJiZcbiAgICAgICAgKHNpbVNvdXJjZSBhcyBhbnkpLnRlcm1pbmFsMl9zb3VyY2VfcG9ydF9pZFxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IHBvc2l0aXZlTm9kZSA9XG4gICAgICAgICAgbm9kZU1hcC5nZXQoKHNpbVNvdXJjZSBhcyBhbnkpLnRlcm1pbmFsMV9zb3VyY2VfcG9ydF9pZCkgfHwgXCIwXCJcbiAgICAgICAgY29uc3QgbmVnYXRpdmVOb2RlID1cbiAgICAgICAgICBub2RlTWFwLmdldCgoc2ltU291cmNlIGFzIGFueSkudGVybWluYWwyX3NvdXJjZV9wb3J0X2lkKSB8fCBcIjBcIlxuXG4gICAgICAgIGxldCB2YWx1ZSA9IFwiXCJcbiAgICAgICAgY29uc3Qgd2F2ZV9zaGFwZSA9IChzaW1Tb3VyY2UgYXMgYW55KS53YXZlX3NoYXBlXG4gICAgICAgIGlmICh3YXZlX3NoYXBlID09PSBcInNpbmV3YXZlXCIpIHtcbiAgICAgICAgICBjb25zdCB2X29mZnNldCA9IDAgLy8gbm90IHByb3ZpZGVkIGluIGNpcmN1aXRKc29uXG4gICAgICAgICAgY29uc3Qgdl9wZWFrID0gKHNpbVNvdXJjZSBhcyBhbnkpLnZvbHRhZ2UgPz8gMFxuICAgICAgICAgIGNvbnN0IGZyZXEgPSAoc2ltU291cmNlIGFzIGFueSkuZnJlcXVlbmN5ID8/IDBcbiAgICAgICAgICBjb25zdCBkZWxheSA9IDAgLy8gbm90IHByb3ZpZGVkIGluIGNpcmN1aXRKc29uXG4gICAgICAgICAgY29uc3QgZGFtcGluZ19mYWN0b3IgPSAwIC8vIG5vdCBwcm92aWRlZCBpbiBjaXJjdWl0SnNvblxuICAgICAgICAgIGNvbnN0IHBoYXNlID0gKHNpbVNvdXJjZSBhcyBhbnkpLnBoYXNlID8/IDBcbiAgICAgICAgICBpZiAoZnJlcSA+IDApIHtcbiAgICAgICAgICAgIHZhbHVlID0gYFNJTigke3Zfb2Zmc2V0fSAke3ZfcGVha30gJHtmcmVxfSAke2RlbGF5fSAke2RhbXBpbmdfZmFjdG9yfSAke3BoYXNlfSlgXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhbHVlID0gYERDICR7KHNpbVNvdXJjZSBhcyBhbnkpLnZvbHRhZ2UgPz8gMH1gXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHdhdmVfc2hhcGUgPT09IFwic3F1YXJlXCIpIHtcbiAgICAgICAgICBjb25zdCB2X2luaXRpYWwgPSAwXG4gICAgICAgICAgY29uc3Qgdl9wdWxzZWQgPSAoc2ltU291cmNlIGFzIGFueSkudm9sdGFnZSA/PyAwXG4gICAgICAgICAgY29uc3QgZnJlcSA9IChzaW1Tb3VyY2UgYXMgYW55KS5mcmVxdWVuY3kgPz8gMFxuICAgICAgICAgIGNvbnN0IHBlcmlvZF9mcm9tX2ZyZXEgPSBmcmVxID09PSAwID8gSW5maW5pdHkgOiAxIC8gZnJlcVxuICAgICAgICAgIGNvbnN0IHBlcmlvZCA9IChzaW1Tb3VyY2UgYXMgYW55KS5wZXJpb2QgPz8gcGVyaW9kX2Zyb21fZnJlcVxuICAgICAgICAgIGNvbnN0IGR1dHlfY3ljbGUgPSAoc2ltU291cmNlIGFzIGFueSkuZHV0eV9jeWNsZSA/PyAwLjVcbiAgICAgICAgICBjb25zdCBwdWxzZV93aWR0aCA9IHBlcmlvZCAqIGR1dHlfY3ljbGVcbiAgICAgICAgICBjb25zdCBkZWxheSA9IDBcbiAgICAgICAgICBjb25zdCByaXNlX3RpbWUgPSBcIjFuXCJcbiAgICAgICAgICBjb25zdCBmYWxsX3RpbWUgPSBcIjFuXCJcbiAgICAgICAgICB2YWx1ZSA9IGBQVUxTRSgke3ZfaW5pdGlhbH0gJHt2X3B1bHNlZH0gJHtkZWxheX0gJHtyaXNlX3RpbWV9ICR7ZmFsbF90aW1lfSAke3B1bHNlX3dpZHRofSAke3BlcmlvZH0pYFxuICAgICAgICB9IGVsc2UgaWYgKChzaW1Tb3VyY2UgYXMgYW55KS52b2x0YWdlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB2YWx1ZSA9IGBEQyAkeyhzaW1Tb3VyY2UgYXMgYW55KS52b2x0YWdlfWBcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgIGNvbnN0IHZvbHRhZ2VTb3VyY2VDbWQgPSBuZXcgVm9sdGFnZVNvdXJjZUNvbW1hbmQoe1xuICAgICAgICAgICAgbmFtZTogc2ltU291cmNlLnNpbXVsYXRpb25fdm9sdGFnZV9zb3VyY2VfaWQsXG4gICAgICAgICAgICBwb3NpdGl2ZU5vZGUsXG4gICAgICAgICAgICBuZWdhdGl2ZU5vZGUsXG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgY29uc3Qgc3BpY2VDb21wb25lbnQgPSBuZXcgU3BpY2VDb21wb25lbnQoXG4gICAgICAgICAgICBzaW1Tb3VyY2Uuc2ltdWxhdGlvbl92b2x0YWdlX3NvdXJjZV9pZCxcbiAgICAgICAgICAgIHZvbHRhZ2VTb3VyY2VDbWQsXG4gICAgICAgICAgICBbcG9zaXRpdmVOb2RlLCBuZWdhdGl2ZU5vZGVdLFxuICAgICAgICAgIClcbiAgICAgICAgICBuZXRsaXN0LmFkZENvbXBvbmVudChzcGljZUNvbXBvbmVudClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBEQyBTb3VyY2UgKGlzX2RjX3NvdXJjZSBpcyB0cnVlIG9yIHVuZGVmaW5lZClcbiAgICAgIGNvbnN0IHBvc2l0aXZlUG9ydElkID1cbiAgICAgICAgKHNpbVNvdXJjZSBhcyBhbnkpLnBvc2l0aXZlX3NvdXJjZV9wb3J0X2lkID8/XG4gICAgICAgIChzaW1Tb3VyY2UgYXMgYW55KS50ZXJtaW5hbDFfc291cmNlX3BvcnRfaWRcbiAgICAgIGNvbnN0IG5lZ2F0aXZlUG9ydElkID1cbiAgICAgICAgKHNpbVNvdXJjZSBhcyBhbnkpLm5lZ2F0aXZlX3NvdXJjZV9wb3J0X2lkID8/XG4gICAgICAgIChzaW1Tb3VyY2UgYXMgYW55KS50ZXJtaW5hbDJfc291cmNlX3BvcnRfaWRcblxuICAgICAgaWYgKFxuICAgICAgICBwb3NpdGl2ZVBvcnRJZCAmJlxuICAgICAgICBuZWdhdGl2ZVBvcnRJZCAmJlxuICAgICAgICBcInZvbHRhZ2VcIiBpbiBzaW1Tb3VyY2UgJiZcbiAgICAgICAgKHNpbVNvdXJjZSBhcyBhbnkpLnZvbHRhZ2UgIT09IHVuZGVmaW5lZFxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IHBvc2l0aXZlTm9kZSA9IG5vZGVNYXAuZ2V0KHBvc2l0aXZlUG9ydElkKSB8fCBcIjBcIlxuICAgICAgICBjb25zdCBuZWdhdGl2ZU5vZGUgPSBub2RlTWFwLmdldChuZWdhdGl2ZVBvcnRJZCkgfHwgXCIwXCJcblxuICAgICAgICBjb25zdCB2b2x0YWdlU291cmNlQ21kID0gbmV3IFZvbHRhZ2VTb3VyY2VDb21tYW5kKHtcbiAgICAgICAgICBuYW1lOiBzaW1Tb3VyY2Uuc2ltdWxhdGlvbl92b2x0YWdlX3NvdXJjZV9pZCxcbiAgICAgICAgICBwb3NpdGl2ZU5vZGUsXG4gICAgICAgICAgbmVnYXRpdmVOb2RlLFxuICAgICAgICAgIHZhbHVlOiBgREMgJHsoc2ltU291cmNlIGFzIGFueSkudm9sdGFnZX1gLFxuICAgICAgICB9KVxuXG4gICAgICAgIGNvbnN0IHNwaWNlQ29tcG9uZW50ID0gbmV3IFNwaWNlQ29tcG9uZW50KFxuICAgICAgICAgIHNpbVNvdXJjZS5zaW11bGF0aW9uX3ZvbHRhZ2Vfc291cmNlX2lkLFxuICAgICAgICAgIHZvbHRhZ2VTb3VyY2VDbWQsXG4gICAgICAgICAgW3Bvc2l0aXZlTm9kZSwgbmVnYXRpdmVOb2RlXSxcbiAgICAgICAgKVxuICAgICAgICBuZXRsaXN0LmFkZENvbXBvbmVudChzcGljZUNvbXBvbmVudClcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBQcm9jZXNzIHNpbXVsYXRpb24gY3VycmVudCBzb3VyY2VzXG4gIGZvciAoY29uc3Qgc2ltU291cmNlIG9mIHN1KGNpcmN1aXRKc29uKS5zaW11bGF0aW9uX2N1cnJlbnRfc291cmNlLmxpc3QoKSkge1xuICAgIGlmIChzaW1Tb3VyY2UudHlwZSAhPT0gXCJzaW11bGF0aW9uX2N1cnJlbnRfc291cmNlXCIpIGNvbnRpbnVlXG5cbiAgICBpZiAoKHNpbVNvdXJjZSBhcyBhbnkpLmlzX2RjX3NvdXJjZSA9PT0gZmFsc2UpIHtcbiAgICAgIC8vIEFDL1BVTFNFIFNvdXJjZVxuICAgICAgY29uc3QgcG9zaXRpdmVQb3J0SWQgPSAoc2ltU291cmNlIGFzIGFueSkudGVybWluYWwxX3NvdXJjZV9wb3J0X2lkXG4gICAgICBjb25zdCBuZWdhdGl2ZVBvcnRJZCA9IChzaW1Tb3VyY2UgYXMgYW55KS50ZXJtaW5hbDJfc291cmNlX3BvcnRfaWRcblxuICAgICAgaWYgKHBvc2l0aXZlUG9ydElkICYmIG5lZ2F0aXZlUG9ydElkKSB7XG4gICAgICAgIGNvbnN0IHBvc2l0aXZlTm9kZSA9IG5vZGVNYXAuZ2V0KHBvc2l0aXZlUG9ydElkKSB8fCBcIjBcIlxuICAgICAgICBjb25zdCBuZWdhdGl2ZU5vZGUgPSBub2RlTWFwLmdldChuZWdhdGl2ZVBvcnRJZCkgfHwgXCIwXCJcblxuICAgICAgICBsZXQgdmFsdWUgPSBcIlwiXG4gICAgICAgIGNvbnN0IHdhdmVfc2hhcGUgPSAoc2ltU291cmNlIGFzIGFueSkud2F2ZV9zaGFwZVxuICAgICAgICBpZiAod2F2ZV9zaGFwZSA9PT0gXCJzaW5ld2F2ZVwiKSB7XG4gICAgICAgICAgY29uc3QgaV9vZmZzZXQgPSAwIC8vIG5vdCBwcm92aWRlZFxuICAgICAgICAgIGNvbnN0IGlfcGVhayA9ICgoc2ltU291cmNlIGFzIGFueSkucGVha190b19wZWFrX2N1cnJlbnQgPz8gMCkgLyAyXG4gICAgICAgICAgY29uc3QgZnJlcSA9IChzaW1Tb3VyY2UgYXMgYW55KS5mcmVxdWVuY3kgPz8gMFxuICAgICAgICAgIGNvbnN0IGRlbGF5ID0gMFxuICAgICAgICAgIGNvbnN0IGRhbXBpbmdfZmFjdG9yID0gMFxuICAgICAgICAgIGNvbnN0IHBoYXNlID0gKHNpbVNvdXJjZSBhcyBhbnkpLnBoYXNlID8/IDBcbiAgICAgICAgICBpZiAoZnJlcSA+IDApIHtcbiAgICAgICAgICAgIHZhbHVlID0gYFNJTigke2lfb2Zmc2V0fSAke2lfcGVha30gJHtmcmVxfSAke2RlbGF5fSAke2RhbXBpbmdfZmFjdG9yfSAke3BoYXNlfSlgXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhbHVlID0gYERDICR7aV9wZWFrfWBcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAod2F2ZV9zaGFwZSA9PT0gXCJzcXVhcmVcIikge1xuICAgICAgICAgIGNvbnN0IGlfaW5pdGlhbCA9IDBcbiAgICAgICAgICBjb25zdCBpX3B1bHNlZCA9IChzaW1Tb3VyY2UgYXMgYW55KS5wZWFrX3RvX3BlYWtfY3VycmVudCA/PyAwXG4gICAgICAgICAgY29uc3QgZnJlcSA9IChzaW1Tb3VyY2UgYXMgYW55KS5mcmVxdWVuY3kgPz8gMFxuICAgICAgICAgIGNvbnN0IHBlcmlvZF9mcm9tX2ZyZXEgPSBmcmVxID09PSAwID8gSW5maW5pdHkgOiAxIC8gZnJlcVxuICAgICAgICAgIGNvbnN0IHBlcmlvZCA9IChzaW1Tb3VyY2UgYXMgYW55KS5wZXJpb2QgPz8gcGVyaW9kX2Zyb21fZnJlcVxuICAgICAgICAgIGNvbnN0IGR1dHlfY3ljbGUgPSAoc2ltU291cmNlIGFzIGFueSkuZHV0eV9jeWNsZSA/PyAwLjVcbiAgICAgICAgICBjb25zdCBwdWxzZV93aWR0aCA9IHBlcmlvZCAqIGR1dHlfY3ljbGVcbiAgICAgICAgICBjb25zdCBkZWxheSA9IDBcbiAgICAgICAgICBjb25zdCByaXNlX3RpbWUgPSBcIjFuXCJcbiAgICAgICAgICBjb25zdCBmYWxsX3RpbWUgPSBcIjFuXCJcbiAgICAgICAgICB2YWx1ZSA9IGBQVUxTRSgke2lfaW5pdGlhbH0gJHtpX3B1bHNlZH0gJHtkZWxheX0gJHtyaXNlX3RpbWV9ICR7ZmFsbF90aW1lfSAke3B1bHNlX3dpZHRofSAke3BlcmlvZH0pYFxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgY29uc3QgY3VycmVudFNvdXJjZUNtZCA9IG5ldyBDdXJyZW50U291cmNlQ29tbWFuZCh7XG4gICAgICAgICAgICBuYW1lOiBzaW1Tb3VyY2Uuc2ltdWxhdGlvbl9jdXJyZW50X3NvdXJjZV9pZCxcbiAgICAgICAgICAgIHBvc2l0aXZlTm9kZSxcbiAgICAgICAgICAgIG5lZ2F0aXZlTm9kZSxcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICBjb25zdCBzcGljZUNvbXBvbmVudCA9IG5ldyBTcGljZUNvbXBvbmVudChcbiAgICAgICAgICAgIHNpbVNvdXJjZS5zaW11bGF0aW9uX2N1cnJlbnRfc291cmNlX2lkLFxuICAgICAgICAgICAgY3VycmVudFNvdXJjZUNtZCxcbiAgICAgICAgICAgIFtwb3NpdGl2ZU5vZGUsIG5lZ2F0aXZlTm9kZV0sXG4gICAgICAgICAgKVxuICAgICAgICAgIG5ldGxpc3QuYWRkQ29tcG9uZW50KHNwaWNlQ29tcG9uZW50KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIERDIFNvdXJjZVxuICAgICAgY29uc3QgcG9zaXRpdmVQb3J0SWQgPSAoc2ltU291cmNlIGFzIGFueSkucG9zaXRpdmVfc291cmNlX3BvcnRfaWRcbiAgICAgIGNvbnN0IG5lZ2F0aXZlUG9ydElkID0gKHNpbVNvdXJjZSBhcyBhbnkpLm5lZ2F0aXZlX3NvdXJjZV9wb3J0X2lkXG5cbiAgICAgIGlmIChcbiAgICAgICAgcG9zaXRpdmVQb3J0SWQgJiZcbiAgICAgICAgbmVnYXRpdmVQb3J0SWQgJiZcbiAgICAgICAgXCJjdXJyZW50XCIgaW4gc2ltU291cmNlICYmXG4gICAgICAgIChzaW1Tb3VyY2UgYXMgYW55KS5jdXJyZW50ICE9PSB1bmRlZmluZWRcbiAgICAgICkge1xuICAgICAgICBjb25zdCBwb3NpdGl2ZU5vZGUgPSBub2RlTWFwLmdldChwb3NpdGl2ZVBvcnRJZCkgfHwgXCIwXCJcbiAgICAgICAgY29uc3QgbmVnYXRpdmVOb2RlID0gbm9kZU1hcC5nZXQobmVnYXRpdmVQb3J0SWQpIHx8IFwiMFwiXG5cbiAgICAgICAgY29uc3QgY3VycmVudFNvdXJjZUNtZCA9IG5ldyBDdXJyZW50U291cmNlQ29tbWFuZCh7XG4gICAgICAgICAgbmFtZTogc2ltU291cmNlLnNpbXVsYXRpb25fY3VycmVudF9zb3VyY2VfaWQsXG4gICAgICAgICAgcG9zaXRpdmVOb2RlLFxuICAgICAgICAgIG5lZ2F0aXZlTm9kZSxcbiAgICAgICAgICB2YWx1ZTogYERDICR7KHNpbVNvdXJjZSBhcyBhbnkpLmN1cnJlbnR9YCxcbiAgICAgICAgfSlcblxuICAgICAgICBjb25zdCBzcGljZUNvbXBvbmVudCA9IG5ldyBTcGljZUNvbXBvbmVudChcbiAgICAgICAgICBzaW1Tb3VyY2Uuc2ltdWxhdGlvbl9jdXJyZW50X3NvdXJjZV9pZCxcbiAgICAgICAgICBjdXJyZW50U291cmNlQ21kLFxuICAgICAgICAgIFtwb3NpdGl2ZU5vZGUsIG5lZ2F0aXZlTm9kZV0sXG4gICAgICAgIClcbiAgICAgICAgbmV0bGlzdC5hZGRDb21wb25lbnQoc3BpY2VDb21wb25lbnQpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc2ltRXhwZXJpbWVudCA9IGNpcmN1aXRKc29uLmZpbmQoXG4gICAgKGVsbSkgPT4gZWxtLnR5cGUgPT09IFwic2ltdWxhdGlvbl9leHBlcmltZW50XCIsXG4gIClcblxuICBpZiAoc2ltRXhwZXJpbWVudCkge1xuICAgIC8vIFByb2Nlc3Mgc2ltdWxhdGlvbiB2b2x0YWdlIHByb2Jlc1xuICAgIGlmIChzaW11bGF0aW9uUHJvYmVzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IG5vZGVzVG9Qcm9iZSA9IG5ldyBTZXQ8c3RyaW5nPigpXG5cbiAgICAgIGNvbnN0IGdldFBvcnRJZEZyb21OZXRJZCA9IChuZXRJZDogc3RyaW5nKSA9PiB7XG4gICAgICAgIGNvbnN0IHRyYWNlID0gc291cmNlVHJhY2VzLmZpbmQoKHQpID0+XG4gICAgICAgICAgdC5jb25uZWN0ZWRfc291cmNlX25ldF9pZHMuaW5jbHVkZXMobmV0SWQpLFxuICAgICAgICApXG4gICAgICAgIHJldHVybiB0cmFjZT8uY29ubmVjdGVkX3NvdXJjZV9wb3J0X2lkc1swXVxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IHByb2JlIG9mIHNpbXVsYXRpb25Qcm9iZXMpIHtcbiAgICAgICAgbGV0IHNpZ25hbFBvcnRJZCA9IHByb2JlLnNpZ25hbF9pbnB1dF9zb3VyY2VfcG9ydF9pZFxuICAgICAgICBpZiAoIXNpZ25hbFBvcnRJZCkge1xuICAgICAgICAgIGNvbnN0IHNpZ25hbE5ldElkID0gcHJvYmUuc2lnbmFsX2lucHV0X3NvdXJjZV9uZXRfaWRcbiAgICAgICAgICBpZiAoc2lnbmFsTmV0SWQpIHtcbiAgICAgICAgICAgIHNpZ25hbFBvcnRJZCA9IGdldFBvcnRJZEZyb21OZXRJZChzaWduYWxOZXRJZClcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXNpZ25hbFBvcnRJZCkgY29udGludWVcblxuICAgICAgICBjb25zdCBzaWduYWxOb2RlTmFtZSA9IG5vZGVNYXAuZ2V0KHNpZ25hbFBvcnRJZClcbiAgICAgICAgaWYgKCFzaWduYWxOb2RlTmFtZSkgY29udGludWVcblxuICAgICAgICBsZXQgcmVmZXJlbmNlUG9ydElkID0gcHJvYmUucmVmZXJlbmNlX2lucHV0X3NvdXJjZV9wb3J0X2lkXG4gICAgICAgIGlmICghcmVmZXJlbmNlUG9ydElkICYmIHByb2JlLnJlZmVyZW5jZV9pbnB1dF9zb3VyY2VfbmV0X2lkKSB7XG4gICAgICAgICAgcmVmZXJlbmNlUG9ydElkID0gZ2V0UG9ydElkRnJvbU5ldElkKFxuICAgICAgICAgICAgcHJvYmUucmVmZXJlbmNlX2lucHV0X3NvdXJjZV9uZXRfaWQsXG4gICAgICAgICAgKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlZmVyZW5jZVBvcnRJZCkge1xuICAgICAgICAgIGNvbnN0IHJlZmVyZW5jZU5vZGVOYW1lID0gbm9kZU1hcC5nZXQocmVmZXJlbmNlUG9ydElkKVxuICAgICAgICAgIGlmIChyZWZlcmVuY2VOb2RlTmFtZSAmJiByZWZlcmVuY2VOb2RlTmFtZSAhPT0gXCIwXCIpIHtcbiAgICAgICAgICAgIG5vZGVzVG9Qcm9iZS5hZGQoYFYoJHtzaWduYWxOb2RlTmFtZX0sJHtyZWZlcmVuY2VOb2RlTmFtZX0pYClcbiAgICAgICAgICB9IGVsc2UgaWYgKHNpZ25hbE5vZGVOYW1lICE9PSBcIjBcIikge1xuICAgICAgICAgICAgbm9kZXNUb1Byb2JlLmFkZChgVigke3NpZ25hbE5vZGVOYW1lfSlgKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBTaW5nbGUtZW5kZWQgcHJvYmVcbiAgICAgICAgICBpZiAoc2lnbmFsTm9kZU5hbWUgIT09IFwiMFwiKSB7XG4gICAgICAgICAgICBub2Rlc1RvUHJvYmUuYWRkKGBWKCR7c2lnbmFsTm9kZU5hbWV9KWApXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgbm9kZXNUb1Byb2JlLnNpemUgPiAwICYmXG4gICAgICAgIChzaW1FeHBlcmltZW50IGFzIGFueSkuZXhwZXJpbWVudF90eXBlPy5pbmNsdWRlcyhcInRyYW5zaWVudFwiKVxuICAgICAgKSB7XG4gICAgICAgIG5ldGxpc3QucHJpbnRTdGF0ZW1lbnRzLnB1c2goXG4gICAgICAgICAgYC5QUklOVCBUUkFOICR7Wy4uLm5vZGVzVG9Qcm9iZV0uam9pbihcIiBcIil9YCxcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHRpbWVQZXJTdGVwID0gKHNpbUV4cGVyaW1lbnQgYXMgYW55KS50aW1lX3Blcl9zdGVwXG4gICAgY29uc3QgZW5kVGltZSA9IChzaW1FeHBlcmltZW50IGFzIGFueSkuZW5kX3RpbWVfbXNcbiAgICBjb25zdCBzdGFydFRpbWVNcyA9IChzaW1FeHBlcmltZW50IGFzIGFueSkuc3RhcnRfdGltZV9tc1xuXG4gICAgaWYgKHRpbWVQZXJTdGVwICYmIGVuZFRpbWUpIHtcbiAgICAgIC8vIGNpcmN1aXQtanNvbiB2YWx1ZXMgYXJlIGluIG1zLCBTUElDRSByZXF1aXJlcyBzZWNvbmRzXG4gICAgICBjb25zdCBzdGFydFRpbWUgPSAoc3RhcnRUaW1lTXMgPz8gMCkgLyAxMDAwXG5cbiAgICAgIGxldCB0cmFuQ21kID0gYC50cmFuICR7Zm9ybWF0TnVtYmVyRm9yU3BpY2UoXG4gICAgICAgIHRpbWVQZXJTdGVwIC8gMTAwMCxcbiAgICAgICl9ICR7Zm9ybWF0TnVtYmVyRm9yU3BpY2UoZW5kVGltZSAvIDEwMDApfWBcbiAgICAgIGlmIChzdGFydFRpbWUgPiAwKSB7XG4gICAgICAgIHRyYW5DbWQgKz0gYCAke2Zvcm1hdE51bWJlckZvclNwaWNlKHN0YXJ0VGltZSl9YFxuICAgICAgfVxuICAgICAgdHJhbkNtZCArPSBcIiBVSUNcIlxuICAgICAgbmV0bGlzdC50cmFuQ29tbWFuZCA9IHRyYW5DbWRcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV0bGlzdFxufVxuXG5mdW5jdGlvbiBmb3JtYXRSZXNpc3RhbmNlKHJlc2lzdGFuY2U6IG51bWJlcik6IHN0cmluZyB7XG4gIGlmIChyZXNpc3RhbmNlID49IDFlNikgcmV0dXJuIGAke3Jlc2lzdGFuY2UgLyAxZTZ9TUVHYFxuICBpZiAocmVzaXN0YW5jZSA+PSAxZTMpIHJldHVybiBgJHtyZXNpc3RhbmNlIC8gMWUzfUtgXG4gIHJldHVybiByZXNpc3RhbmNlLnRvU3RyaW5nKClcbn1cblxuZnVuY3Rpb24gZm9ybWF0Q2FwYWNpdGFuY2UoY2FwYWNpdGFuY2U6IG51bWJlcik6IHN0cmluZyB7XG4gIGlmIChjYXBhY2l0YW5jZSA+PSAxZS0zKSByZXR1cm4gYCR7Y2FwYWNpdGFuY2UgKiAxZTN9TWBcbiAgaWYgKGNhcGFjaXRhbmNlID49IDFlLTYpIHJldHVybiBgJHtjYXBhY2l0YW5jZSAqIDFlNn1VYFxuICBpZiAoY2FwYWNpdGFuY2UgPj0gMWUtOSkgcmV0dXJuIGAke2NhcGFjaXRhbmNlICogMWU5fU5gXG4gIGlmIChjYXBhY2l0YW5jZSA+PSAxZS0xMikgcmV0dXJuIGAke2NhcGFjaXRhbmNlICogMWUxMn1QYFxuICByZXR1cm4gY2FwYWNpdGFuY2UudG9TdHJpbmcoKVxufVxuXG5mdW5jdGlvbiBmb3JtYXRJbmR1Y3RhbmNlKGluZHVjdGFuY2U6IG51bWJlcik6IHN0cmluZyB7XG4gIGlmIChpbmR1Y3RhbmNlID49IDEpIHJldHVybiBpbmR1Y3RhbmNlLnRvU3RyaW5nKClcbiAgaWYgKGluZHVjdGFuY2UgPj0gMWUtMykgcmV0dXJuIGAke2luZHVjdGFuY2UgKiAxZTN9bWBcbiAgaWYgKGluZHVjdGFuY2UgPj0gMWUtNikgcmV0dXJuIGAke2luZHVjdGFuY2UgKiAxZTZ9dWBcbiAgaWYgKGluZHVjdGFuY2UgPj0gMWUtOSkgcmV0dXJuIGAke2luZHVjdGFuY2UgKiAxZTl9bmBcbiAgaWYgKGluZHVjdGFuY2UgPj0gMWUtMTIpIHJldHVybiBgJHtpbmR1Y3RhbmNlICogMWUxMn1wYFxuICByZXR1cm4gaW5kdWN0YW5jZS50b1N0cmluZygpXG59XG5cbmZ1bmN0aW9uIHNhbml0aXplSWRlbnRpZmllcih2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkLCBwcmVmaXg6IHN0cmluZykge1xuICBpZiAoIXZhbHVlKSByZXR1cm4gcHJlZml4XG4gIGNvbnN0IHNhbml0aXplZCA9IHZhbHVlLnJlcGxhY2UoL1teQS1aYS16MC05X10vZywgXCJfXCIpXG4gIGlmICghc2FuaXRpemVkKSByZXR1cm4gcHJlZml4XG4gIGlmICgvXlswLTldLy50ZXN0KHNhbml0aXplZCkpIHtcbiAgICByZXR1cm4gYCR7cHJlZml4fV8ke3Nhbml0aXplZH1gXG4gIH1cbiAgcmV0dXJuIHNhbml0aXplZFxufVxuXG5mdW5jdGlvbiBidWlsZFNpbXVsYXRpb25Td2l0Y2hDb250cm9sVmFsdWUoXG4gIHNpbXVsYXRpb25Td2l0Y2g6IFNpbXVsYXRpb25Td2l0Y2ggfCB1bmRlZmluZWQsXG4pIHtcbiAgY29uc3QgaGlnaFZvbHRhZ2UgPSA1XG4gIGNvbnN0IGxvd1ZvbHRhZ2UgPSAwXG4gIGNvbnN0IHJpc2VUaW1lID0gXCIxblwiXG4gIGNvbnN0IGZhbGxUaW1lID0gXCIxblwiXG5cbiAgaWYgKCFzaW11bGF0aW9uU3dpdGNoKSB7XG4gICAgcmV0dXJuIGBEQyAke2xvd1ZvbHRhZ2V9YFxuICB9XG5cbiAgY29uc3Qgc3RhcnRzQ2xvc2VkID0gc2ltdWxhdGlvblN3aXRjaC5zdGFydHNfY2xvc2VkID8/IGZhbHNlXG4gIGNvbnN0IGNsb3Nlc0F0ID0gc2ltdWxhdGlvblN3aXRjaC5jbG9zZXNfYXQgPz8gMFxuICBjb25zdCBvcGVuc0F0ID0gc2ltdWxhdGlvblN3aXRjaC5vcGVuc19hdFxuICBjb25zdCBzd2l0Y2hpbmdGcmVxdWVuY3kgPSBzaW11bGF0aW9uU3dpdGNoLnN3aXRjaGluZ19mcmVxdWVuY3lcblxuICBjb25zdCBbaW5pdGlhbFZvbHRhZ2UsIHB1bHNlZFZvbHRhZ2VdID0gc3RhcnRzQ2xvc2VkXG4gICAgPyBbaGlnaFZvbHRhZ2UsIGxvd1ZvbHRhZ2VdXG4gICAgOiBbbG93Vm9sdGFnZSwgaGlnaFZvbHRhZ2VdXG5cbiAgaWYgKHN3aXRjaGluZ0ZyZXF1ZW5jeSAmJiBzd2l0Y2hpbmdGcmVxdWVuY3kgPiAwKSB7XG4gICAgY29uc3QgcGVyaW9kID0gMSAvIHN3aXRjaGluZ0ZyZXF1ZW5jeVxuICAgIGNvbnN0IHdpZHRoRnJvbU9wZW5DbG9zZSA9XG4gICAgICBvcGVuc0F0ICYmIG9wZW5zQXQgPiBjbG9zZXNBdCA/IE1hdGgubWluKG9wZW5zQXQgLSBjbG9zZXNBdCwgcGVyaW9kKSA6IDBcbiAgICBjb25zdCBwdWxzZVdpZHRoID1cbiAgICAgIHdpZHRoRnJvbU9wZW5DbG9zZSA+IDAgPyB3aWR0aEZyb21PcGVuQ2xvc2UgOiBNYXRoLm1heChwZXJpb2QgLyAyLCAxZS05KVxuXG4gICAgcmV0dXJuIGBQVUxTRSgke2Zvcm1hdE51bWJlckZvclNwaWNlKGluaXRpYWxWb2x0YWdlKX0gJHtmb3JtYXROdW1iZXJGb3JTcGljZShwdWxzZWRWb2x0YWdlKX0gJHtmb3JtYXROdW1iZXJGb3JTcGljZShjbG9zZXNBdCl9ICR7cmlzZVRpbWV9ICR7ZmFsbFRpbWV9ICR7Zm9ybWF0TnVtYmVyRm9yU3BpY2UocHVsc2VXaWR0aCl9ICR7Zm9ybWF0TnVtYmVyRm9yU3BpY2UocGVyaW9kKX0pYFxuICB9XG5cbiAgaWYgKG9wZW5zQXQgIT09IHVuZGVmaW5lZCAmJiBvcGVuc0F0ID4gY2xvc2VzQXQpIHtcbiAgICBjb25zdCBwdWxzZVdpZHRoID0gTWF0aC5tYXgob3BlbnNBdCAtIGNsb3Nlc0F0LCAxZS05KVxuICAgIGNvbnN0IHBlcmlvZCA9IGNsb3Nlc0F0ICsgcHVsc2VXaWR0aCAqIDJcblxuICAgIHJldHVybiBgUFVMU0UoJHtmb3JtYXROdW1iZXJGb3JTcGljZShpbml0aWFsVm9sdGFnZSl9ICR7Zm9ybWF0TnVtYmVyRm9yU3BpY2UocHVsc2VkVm9sdGFnZSl9ICR7Zm9ybWF0TnVtYmVyRm9yU3BpY2UoY2xvc2VzQXQpfSAke3Jpc2VUaW1lfSAke2ZhbGxUaW1lfSAke2Zvcm1hdE51bWJlckZvclNwaWNlKHB1bHNlV2lkdGgpfSAke2Zvcm1hdE51bWJlckZvclNwaWNlKHBlcmlvZCl9KWBcbiAgfVxuXG4gIGlmIChjbG9zZXNBdCA+IDApIHtcbiAgICBjb25zdCBwZXJpb2QgPSBjbG9zZXNBdCAqIDJcbiAgICBjb25zdCBwdWxzZVdpZHRoID0gTWF0aC5tYXgocGVyaW9kIC8gMiwgMWUtOSlcbiAgICByZXR1cm4gYFBVTFNFKCR7Zm9ybWF0TnVtYmVyRm9yU3BpY2UoaW5pdGlhbFZvbHRhZ2UpfSAke2Zvcm1hdE51bWJlckZvclNwaWNlKHB1bHNlZFZvbHRhZ2UpfSAke2Zvcm1hdE51bWJlckZvclNwaWNlKGNsb3Nlc0F0KX0gJHtyaXNlVGltZX0gJHtmYWxsVGltZX0gJHtmb3JtYXROdW1iZXJGb3JTcGljZShwdWxzZVdpZHRoKX0gJHtmb3JtYXROdW1iZXJGb3JTcGljZShwZXJpb2QpfSlgXG4gIH1cblxuICByZXR1cm4gYERDICR7c3RhcnRzQ2xvc2VkID8gaGlnaFZvbHRhZ2UgOiBsb3dWb2x0YWdlfWBcbn1cblxuZnVuY3Rpb24gZm9ybWF0TnVtYmVyRm9yU3BpY2UodmFsdWU6IG51bWJlcikge1xuICBpZiAoIU51bWJlci5pc0Zpbml0ZSh2YWx1ZSkpIHJldHVybiBgJHt2YWx1ZX1gXG4gIGlmICh2YWx1ZSA9PT0gMCkgcmV0dXJuIFwiMFwiXG5cbiAgY29uc3QgYWJzVmFsdWUgPSBNYXRoLmFicyh2YWx1ZSlcblxuICBpZiAoYWJzVmFsdWUgPj0gMWUzIHx8IGFic1ZhbHVlIDw9IDFlLTMpIHtcbiAgICByZXR1cm4gTnVtYmVyKHZhbHVlLnRvRXhwb25lbnRpYWwoNikpLnRvU3RyaW5nKClcbiAgfVxuXG4gIHJldHVybiBOdW1iZXIodmFsdWUudG9QcmVjaXNpb24oNikpLnRvU3RyaW5nKClcbn1cbiIsICJleHBvcnQgY2xhc3MgU3BpY2VTdWJjaXJjdWl0IHtcbiAgbmFtZTogc3RyaW5nXG4gIHBpbnM6IHN0cmluZ1tdXG5cbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nLCBwaW5zOiBzdHJpbmdbXSkge1xuICAgIHRoaXMubmFtZSA9IG5hbWVcbiAgICB0aGlzLnBpbnMgPSBwaW5zXG4gIH1cblxuICB0b1NwaWNlU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgY29uc3QgcGluU3RyaW5nID0gdGhpcy5waW5zLmpvaW4oXCIgXCIpXG4gICAgY29uc3QgaGVhZGVyID0gYC5TVUJDS1QgJHt0aGlzLm5hbWV9ICR7cGluU3RyaW5nfWBcbiAgICBjb25zdCBmb290ZXIgPSBgLkVORFMgJHt0aGlzLm5hbWV9YFxuXG4gICAgY29uc3QgYm9keSA9IGAqIFBsYWNlaG9sZGVyIGZvciAke3RoaXMubmFtZX0uIE5vIGRlZmluaXRpb24gZm91bmQgaW4gY2lyY3VpdCBKU09OLmBcblxuICAgIHJldHVybiBbXCJcIiwgaGVhZGVyLCBib2R5LCBmb290ZXJdLmpvaW4oXCJcXG5cIilcbiAgfVxufVxuIiwgImltcG9ydCB0eXBlIHsgQmFzZVNwaWNlQ29tbWFuZCB9IGZyb20gXCIuL0Jhc2VTcGljZUNvbW1hbmRcIlxuXG5leHBvcnQgaW50ZXJmYWNlIEluZHVjdG9yQ291cGxpbmdDb21tYW5kUHJvcHMge1xuICBuYW1lOiBzdHJpbmdcbiAgaW5kdWN0b3JzOiBzdHJpbmdbXVxuICBjb3VwbGluZzogc3RyaW5nXG59XG5cbmV4cG9ydCBjbGFzcyBJbmR1Y3RvckNvdXBsaW5nQ29tbWFuZCBpbXBsZW1lbnRzIEJhc2VTcGljZUNvbW1hbmQge1xuICBjb21tYW5kTmFtZSA9IFwiaW5kdWN0b3JfY291cGxpbmdcIiBhcyBjb25zdFxuICBwcm9wczogSW5kdWN0b3JDb3VwbGluZ0NvbW1hbmRQcm9wc1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBJbmR1Y3RvckNvdXBsaW5nQ29tbWFuZFByb3BzKSB7XG4gICAgdGhpcy5wcm9wcyA9IHByb3BzXG4gIH1cblxuICB0b1NwaWNlU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgY29uc3QgeyBuYW1lLCBpbmR1Y3RvcnMsIGNvdXBsaW5nIH0gPSB0aGlzLnByb3BzXG4gICAgcmV0dXJuIGBLJHtuYW1lfSAke2luZHVjdG9ycy5qb2luKFwiIFwiKX0gJHtjb3VwbGluZ31gXG4gIH1cbn1cbiIsICJpbXBvcnQgdHlwZSB7IEJhc2VTcGljZUNvbW1hbmQgfSBmcm9tIFwiLi9CYXNlU3BpY2VDb21tYW5kXCJcblxuZXhwb3J0IGludGVyZmFjZSBKRkVUQ29tbWFuZFByb3BzIHtcbiAgbmFtZTogc3RyaW5nXG4gIGRyYWluOiBzdHJpbmdcbiAgZ2F0ZTogc3RyaW5nXG4gIHNvdXJjZTogc3RyaW5nXG4gIG1vZGVsOiBzdHJpbmdcbiAgYXJlYT86IHN0cmluZ1xufVxuXG5leHBvcnQgY2xhc3MgSkZFVENvbW1hbmQgaW1wbGVtZW50cyBCYXNlU3BpY2VDb21tYW5kIHtcbiAgY29tbWFuZE5hbWUgPSBcImpmZXRcIiBhcyBjb25zdFxuICBwcm9wczogSkZFVENvbW1hbmRQcm9wc1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBKRkVUQ29tbWFuZFByb3BzKSB7XG4gICAgdGhpcy5wcm9wcyA9IHByb3BzXG4gIH1cblxuICB0b1NwaWNlU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgY29uc3QgeyBuYW1lLCBkcmFpbiwgZ2F0ZSwgc291cmNlLCBtb2RlbCwgYXJlYSB9ID0gdGhpcy5wcm9wc1xuICAgIGxldCBzcGljZVN0cmluZyA9IGBKJHtuYW1lfSAke2RyYWlufSAke2dhdGV9ICR7c291cmNlfSAke21vZGVsfWBcbiAgICBpZiAoYXJlYSkge1xuICAgICAgc3BpY2VTdHJpbmcgKz0gYCAke2FyZWF9YFxuICAgIH1cbiAgICByZXR1cm4gc3BpY2VTdHJpbmdcbiAgfVxufVxuIiwgImltcG9ydCB0eXBlIHsgQmFzZVNwaWNlQ29tbWFuZCB9IGZyb20gXCIuL0Jhc2VTcGljZUNvbW1hbmRcIlxuXG5leHBvcnQgaW50ZXJmYWNlIFN1YmNpcmN1aXRDYWxsQ29tbWFuZFByb3BzIHtcbiAgbmFtZTogc3RyaW5nXG4gIG5vZGVzOiBzdHJpbmdbXVxuICBzdWJjaXJjdWl0TmFtZTogc3RyaW5nXG59XG5cbmV4cG9ydCBjbGFzcyBTdWJjaXJjdWl0Q2FsbENvbW1hbmQgaW1wbGVtZW50cyBCYXNlU3BpY2VDb21tYW5kIHtcbiAgY29tbWFuZE5hbWUgPSBcInN1YmNpcmN1aXRfY2FsbFwiIGFzIGNvbnN0XG4gIHByb3BzOiBTdWJjaXJjdWl0Q2FsbENvbW1hbmRQcm9wc1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBTdWJjaXJjdWl0Q2FsbENvbW1hbmRQcm9wcykge1xuICAgIHRoaXMucHJvcHMgPSBwcm9wc1xuICB9XG5cbiAgdG9TcGljZVN0cmluZygpOiBzdHJpbmcge1xuICAgIGNvbnN0IHsgbmFtZSwgbm9kZXMsIHN1YmNpcmN1aXROYW1lIH0gPSB0aGlzLnByb3BzXG4gICAgcmV0dXJuIGBYJHtuYW1lfSAke25vZGVzLmpvaW4oXCIgXCIpfSAke3N1YmNpcmN1aXROYW1lfWBcbiAgfVxufVxuIiwgImltcG9ydCB0eXBlIHsgQmFzZVNwaWNlQ29tbWFuZCB9IGZyb20gXCIuL0Jhc2VTcGljZUNvbW1hbmRcIlxuXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zbWlzc2lvbkxpbmVDb21tYW5kUHJvcHMge1xuICBuYW1lOiBzdHJpbmdcbiAgYVBvc2l0aXZlOiBzdHJpbmdcbiAgYU5lZ2F0aXZlOiBzdHJpbmdcbiAgYlBvc2l0aXZlOiBzdHJpbmdcbiAgYk5lZ2F0aXZlOiBzdHJpbmdcbiAgaW1wZWRhbmNlOiBzdHJpbmdcbiAgZGVsYXk/OiBzdHJpbmdcbiAgZnJlcXVlbmN5Pzogc3RyaW5nXG4gIG5vcm1hbGl6ZWRMZW5ndGg/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGNsYXNzIFRyYW5zbWlzc2lvbkxpbmVDb21tYW5kIGltcGxlbWVudHMgQmFzZVNwaWNlQ29tbWFuZCB7XG4gIGNvbW1hbmROYW1lID0gXCJ0cmFuc21pc3Npb25fbGluZVwiIGFzIGNvbnN0XG4gIHByb3BzOiBUcmFuc21pc3Npb25MaW5lQ29tbWFuZFByb3BzXG5cbiAgY29uc3RydWN0b3IocHJvcHM6IFRyYW5zbWlzc2lvbkxpbmVDb21tYW5kUHJvcHMpIHtcbiAgICB0aGlzLnByb3BzID0gcHJvcHNcbiAgfVxuXG4gIHRvU3BpY2VTdHJpbmcoKTogc3RyaW5nIHtcbiAgICBjb25zdCB7XG4gICAgICBuYW1lLFxuICAgICAgYVBvc2l0aXZlLFxuICAgICAgYU5lZ2F0aXZlLFxuICAgICAgYlBvc2l0aXZlLFxuICAgICAgYk5lZ2F0aXZlLFxuICAgICAgaW1wZWRhbmNlLFxuICAgICAgZGVsYXksXG4gICAgICBmcmVxdWVuY3ksXG4gICAgICBub3JtYWxpemVkTGVuZ3RoLFxuICAgIH0gPSB0aGlzLnByb3BzXG4gICAgbGV0IHNwaWNlU3RyaW5nID0gYFQke25hbWV9ICR7YVBvc2l0aXZlfSAke2FOZWdhdGl2ZX0gJHtiUG9zaXRpdmV9ICR7Yk5lZ2F0aXZlfSBaMD0ke2ltcGVkYW5jZX1gXG4gICAgaWYgKGRlbGF5KSB7XG4gICAgICBzcGljZVN0cmluZyArPSBgIFREPSR7ZGVsYXl9YFxuICAgIH0gZWxzZSBpZiAoZnJlcXVlbmN5KSB7XG4gICAgICBzcGljZVN0cmluZyArPSBgIEY9JHtmcmVxdWVuY3l9YFxuICAgICAgaWYgKG5vcm1hbGl6ZWRMZW5ndGgpIHtcbiAgICAgICAgc3BpY2VTdHJpbmcgKz0gYCBOTD0ke25vcm1hbGl6ZWRMZW5ndGh9YFxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc3BpY2VT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
|