axidio-styleguide-library1-v2 0.0.899 → 0.0.900
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.
|
@@ -405,7 +405,7 @@ export class HorizontalGroupedBarWithScrollZoomComponent extends ComponentUnique
|
|
|
405
405
|
})
|
|
406
406
|
.text(function (d) {
|
|
407
407
|
var isValueToBeIgnored = false;
|
|
408
|
-
if (isMobile && !self.isHeaderVisible) {
|
|
408
|
+
if ((isMobile && !self.isHeaderVisible) || isria) {
|
|
409
409
|
let firstPart = d.split(/[\s\-]+/)[0];
|
|
410
410
|
return firstPart.substring(0, 3).toLowerCase();
|
|
411
411
|
}
|
|
@@ -451,7 +451,7 @@ export class HorizontalGroupedBarWithScrollZoomComponent extends ComponentUnique
|
|
|
451
451
|
});
|
|
452
452
|
}
|
|
453
453
|
}
|
|
454
|
-
if (isMobile && !this.isHeaderVisible) {
|
|
454
|
+
if ((isMobile && !this.isHeaderVisible) || isria) {
|
|
455
455
|
svg
|
|
456
456
|
.selectAll('g.x1.axis1 g.tick text')
|
|
457
457
|
.classed('mobile-xaxis-override', true);
|
|
@@ -1369,4 +1369,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
1369
1369
|
}], headerMenuclickEvent: [{
|
|
1370
1370
|
type: Output
|
|
1371
1371
|
}] } });
|
|
1372
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9yaXpvbnRhbC1ncm91cGVkLWJhci13aXRoLXNjcm9sbC16b29tLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2F4aWRpby1zdHlsZWd1aWRlLWxpYnJhcnkvc3JjL2xpYi9ob3Jpem9udGFsLWdyb3VwZWQtYmFyLXdpdGgtc2Nyb2xsLXpvb20vaG9yaXpvbnRhbC1ncm91cGVkLWJhci13aXRoLXNjcm9sbC16b29tLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2F4aWRpby1zdHlsZWd1aWRlLWxpYnJhcnkvc3JjL2xpYi9ob3Jpem9udGFsLWdyb3VwZWQtYmFyLXdpdGgtc2Nyb2xsLXpvb20vaG9yaXpvbnRhbC1ncm91cGVkLWJhci13aXRoLXNjcm9sbC16b29tLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsU0FBUyxFQUVULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUNaLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDakQsT0FBTyxXQUFXLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFFekIsT0FBTyxrQkFBa0IsTUFBTSxrQkFBa0IsQ0FBQzs7Ozs7OztBQVdsRCxNQUFNLE9BQU8sMkNBQ1gsU0FBUSxpQkFBaUI7SUF5RXpCO1FBQ0UsS0FBSyxFQUFFLENBQUM7UUEvREEsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDckMseUJBQW9CLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUN6RCxvQkFBZSxHQUFZLElBQUksQ0FBQztRQUNoQyxrQkFBYSxHQUFZLElBQUksQ0FBQztRQUM5Qiw0QkFBdUIsR0FBWSxLQUFLLENBQUM7UUFD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QzlCLFNBQVMsR0FBRyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO3dCQUNsRSxJQUFJLENBQUMsQ0FBQyxTQUFTLEVBQUUsR0FBRyxHQUFHLEVBQUUsQ0FBQzs0QkFDeEIsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUM7Z0NBQ3BDLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQztvQ0FDcEQsU0FBUyxDQUFDLEtBQUssQ0FBQzt3Q0FDZCxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQzt3Q0FDN0IsQ0FBQyxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUM7cUNBQzFDLENBQUMsQ0FBQztnQ0FDTCxDQUFDOztvQ0FDQyxTQUFTLENBQUMsS0FBSyxDQUFDO3dDQUNkLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDO3dDQUM3QixDQUFDLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQztxQ0FDMUMsQ0FBQyxDQUFDOzRCQUNQLENBQUM7O2dDQUNDLFNBQVMsQ0FBQyxLQUFLLENBQUM7b0NBQ2QsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUM7b0NBQzdCLENBQUMsQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxTQUFT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QUFDO0lBQ0QscUJBQXFCLENBQUMsRUFBRTtRQUN0QixJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFDRCxjQUFjLENBQUMsS0FBSztRQUNsQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUN0QixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUN6QixDQUFDO0lBQ0QsY0FBYyxDQUFDLEtBQUs7UUFDbEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDdEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDekIsQ0FBQztJQUNELDhCQUE4QixDQUFDLEtBQUs7UUFDbEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUIsQ0FBQzsrR0F2OENVLDJDQUEyQzttR0FBM0MsMkNBQTJDLGdoQkN6QnhELGs3SEF3SEE7OzRGRC9GYSwyQ0FBMkM7a0JBVHZELFNBQVM7K0JBQ0UsNkNBQTZDLGlCQU14QyxpQkFBaUIsQ0FBQyxJQUFJO3dEQU9yQyxZQUFZO3NCQURYLFNBQVM7dUJBQUMscUJBQXFCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUlsRCxpQkFBaUI7c0JBRGhCLFNBQVM7dUJBQUMsZ0JBQWdCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUdwQyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLHdCQUF3QjtzQkFBaEMsS0FBSztnQkFDSSxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLG9CQUFvQjtzQkFBN0IsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIE9uSW5pdCxcclxuICBWaWV3Q2hpbGQsXHJcbiAgRWxlbWVudFJlZixcclxuICBJbnB1dCxcclxuICBPdXRwdXQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRVbmlxdWVJZCB9IGZyb20gJy4uL3VuaXF1ZS1pZCc7XHJcbmltcG9ydCBDaGFydEhlbHBlciBmcm9tICcuLi9jaGFydC1oZWxwZXInO1xyXG5pbXBvcnQgKiBhcyBkMyBmcm9tICdkMyc7XHJcbmltcG9ydCB7IFJlc2l6ZWRFdmVudCB9IGZyb20gJ2FuZ3VsYXItcmVzaXplLWV2ZW50JztcclxuaW1wb3J0IEhlYWRlckNvbmZpZ0hlbHBlciBmcm9tICcuLi9oZWFkZXItY29uZmlnJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLWhvcml6b250YWwtZ3JvdXBlZC1iYXItd2l0aC1zY3JvbGwtem9vbScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2hvcml6b250YWwtZ3JvdXBlZC1iYXItd2l0aC1zY3JvbGwtem9vbS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbXHJcbiAgICAnLi9ob3Jpem9udGFsLWdyb3VwZWQtYmFyLXdpdGgtc2Nyb2xsLXpvb20uY29tcG9uZW50Lmxlc3MnLFxyXG4gICAgJy4uL2NvbW1vbi1zdHlsZXMubGVzcycsXHJcbiAgXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgSG9yaXpvbnRhbEdyb3VwZWRCYXJXaXRoU2Nyb2xsWm9vbUNvbXBvbmVudFxyXG4gIGV4dGVuZHMgQ29tcG9uZW50VW5pcXVlSWRcclxuICBpbXBsZW1lbnRzIE9uSW5pdFxyXG57XHJcbiAgQFZpZXdDaGlsZCgnZ3JvdXBjaGFydGNvbnRhaW5lcicsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgY29udGFpbmVyRWx0ITogRWxlbWVudFJlZjtcclxuXHJcbiAgQFZpZXdDaGlsZCgnZ3JvdXBjb250YWluZXInLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIGdyb3VwY29udGFpbmVyRWx0ITogRWxlbWVudFJlZjtcclxuXHJcbiAgQElucHV0KCkgY2hhcnREYXRhOiBhbnk7XHJcbiAgQElucHV0KCkgY3VzdG9tQ2hhcnRDb25maWd1cmF0aW9uOiBhbnk7XHJcbiAgQE91dHB1dCgpIGNsaWNrRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgaGVhZGVyTWVudWNsaWNrRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBpc0hlYWRlclZpc2libGU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIGxlZ2VuZFZpc2libGU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIGlzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kOiBib29sZWFuID0gZmFsc2U7XHJcbiAgY2hhcnRDb25maWd1cmF0aW9uOiBhbnkgPSB7fTtcclxuICBvYmplY3RLZXlzID0gT2JqZWN0LmtleXM7XHJcblxyXG4gIGRlZmF1bHRDb25maWd1cmF0aW9uOiBhbnkgPSB7XHJcbiAgICBtYXJnaW46IHsgdG9wOiAyMCwgcmlnaHQ6IDIwLCBib3R0b206IDIwLCBsZWZ0OiA0MCB9LFxyXG4gICAgbGFiZWxGb3JtYXR0ZXI6IENoYXJ0SGVscGVyLmRlZmF1bHRGb3JtYXR0ZXIsXHJcbiAgICBzdmdIZWlnaHQ6IDcwLFxyXG4gICAgbnVtYmVyT2ZZVGlja3M6IDUsXHJcbiAgICBsZWdlbmRKdXN0aWZpZWQ6IHRydWUsXHJcbiAgICB5TGluZUF4aXNMYWJlbEZvbWF0dGVyOiBDaGFydEhlbHBlci5kZWZhdWx0Rm9ybWF0dGVyLFxyXG4gICAgeUF4aXNMYWJlbEZvbWF0dGVyOiBDaGFydEhlbHBlci5kZWZhdWx0Rm9ybWF0dGVyLFxyXG4gICAgbGluZUdyYXBoQ29sb3I6ICcjRjZEMjgzJyxcclxuICAgIHNob3dMaW5lQ2hhcnRBeGlzOiB0cnVlLFxyXG4gICAgc2hvd1ZhbHVlczogdHJ1ZSxcclxuICAgIGhlYWRlck1lbnVPcHRpb25zOiBIZWFkZXJDb25maWdIZWxwZXIuaGVhZGVyQ29uZmlnLmhlYWRlck1lbnVPcHRpb25zLFxyXG4gICAgeEF4aXNHcmlkOiB1bmRlZmluZWQsXHJcbiAgICB5QXhpc0dyaWQ6IGZhbHNlLFxyXG4gICAgbGVnZW5kVmlzaWJsZTogZmFsc2UsXHJcbiAgICBpc0hlYWRlclZpc2libGU6IHVuZGVmaW5lZCxcclxuICAgIGlzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kOiB1bmRlZmluZWQsXHJcbiAgICBpc011bHRpQ2hhcnRHcmlkTGluZTogdW5kZWZpbmVkLFxyXG4gICAgaXNGdWxsU2NyZWVuOiB1bmRlZmluZWQsXHJcbiAgICBjdXN0b21Zc2NhbGU6IHVuZGVmaW5lZCxcclxuICAgIHRleHRzT25CYXI6IHVuZGVmaW5lZCxcclxuICAgIGlzWGF4aXNMYWJlbEhpZGRlbjogdW5kZWZpbmVkLFxyXG4gICAgaXNZYXhpc0xhYmVsSGlkZGVuOiBmYWxzZSxcclxuICAgIGlzWWF4aXNIaWRkZW46IHVuZGVmaW5lZCxcclxuICAgIGlzWWF4aXNEYXNoZWQ6IHVuZGVmaW5lZCxcclxuICAgIHRleHRGb3JtYXR0ZXI6IHVuZGVmaW5lZCxcclxuICAgIGlzTm9BbHRlcm5hdGVYYXhpc1RleHQ6IHVuZGVmaW5lZCxcclxuICAgIGlzWGdyaWRCZXR3ZWVuTGFiZWxzOiB1bmRlZmluZWQsXHJcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjRkZGRkZGJyxcclxuICAgIGhpZGVMZWdlbmRPblRvcDogdHJ1ZSxcclxuICAgIGlzWGF4aXNDb2xvcjogJyM5OTk5OTknLFxyXG4gICAgbGFiZWxPdmVybGFwTWlub3JGaXg6IHRydWUsXHJcbiAgICBub0hvdmVyRWZmZWN0OiB0cnVlLFxyXG4gICAgbm9Ib3ZlckRpc3BsYXlEYXRhOiB0cnVlLFxyXG4gICAgc2hvd1hheGlzVG9wOiB0cnVlLFxyXG4gICAgZGlzcGxheVlheGlzTGFiZWxzOiB1bmRlZmluZWQsXHJcbiAgICB4TGFiZWxzT25TYW1lTGluZTogdW5kZWZpbmVkLFxyXG4gICAgdGV4dEFsd2F5c0hvcml6b250YWw6IHVuZGVmaW5lZCxcclxuICAgIGxlZ2VuZEF0VG9wUmlnaHQ6IHVuZGVmaW5lZCxcclxuICAgIGlzRHJpbGxkb3duQ2hhcnQ6IHRydWUsXHJcbiAgICBkaXNwbGF5VGl0bGVPblRvcDogdW5kZWZpbmVkLFxyXG4gICAgaXNUb2dnbGVWaXNpYmxlOiB1bmRlZmluZWQsXHJcbiAgICBpc1RpdGxlSGlkZGVuOiB1bmRlZmluZWQsXHJcbiAgICBpc0Rpc3BsYXlCYXJEZXRhaWxzQXRCb3R0b206IHVuZGVmaW5lZCxcclxuICAgIGhvd21hbnlCYXJEZXRhaWxzVG9EaXNwbGF5OiAwLFxyXG4gICAgYmFyVmF1bGVDb2xvcjogdW5kZWZpbmVkLFxyXG4gICAgZGVmYXVsdEJhckhlaWdodDogMixcclxuICB9O1xyXG5cclxuICB1bmlxdWVJZDogYW55ID0gdGhpcy5nZXRVbmlxdWVJZCgpO1xyXG4gIGlzWm9vbWVkT3V0OiBib29sZWFuID0gdHJ1ZTtcclxuICBpc0REMU9wZW46IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc0REMk9wZW46IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gIH1cclxuXHJcbiAgb25SZXNpemVkKGV2ZW50OiBSZXNpemVkRXZlbnQpIHtcclxuICAgIGxldCBzZWxmID0gdGhpcztcclxuICAgIHNldFRpbWVvdXQoXHJcbiAgICAgIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBkMy5zZWxlY3QoJyMnICsgc2VsZi51bmlxdWVJZCkucmVtb3ZlKCk7XHJcbiAgICAgICAgc2VsZi5pbml0aWFsaXplZ3JvdXBDaGFydCgpO1xyXG4gICAgICB9LmJpbmQoc2VsZiksXHJcbiAgICAgIDEwXHJcbiAgICApO1xyXG4gIH1cclxuICBpc1pvb21PdXRTZWxlY3RlZChpc1pvb21PdXQsIGV2ZW50KSB7XHJcbiAgICB0aGlzLmlzWm9vbWVkT3V0ID0gaXNab29tT3V0O1xyXG4gICAgdGhpcy5vblJlc2l6ZWQoZXZlbnQpO1xyXG4gIH1cclxuICBoYW5kbGVab29taW5ab29tb3V0Q2xpY2soeyBpc1pvb21PdXQsIGV2ZW50IH0pIHtcclxuICAgIHRoaXMuaXNab29tT3V0U2VsZWN0ZWQoaXNab29tT3V0LCBldmVudCk7XHJcbiAgfVxyXG4gIG5nT25Jbml0KCkge31cclxuICBpc0xlZ2VuZFZpc2libGUoKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuY2hhcnREYXRhICYmXHJcbiAgICAgIHRoaXMuY2hhcnREYXRhLm1ldGFEYXRhLmNvbG9ycyAmJlxyXG4gICAgICBPYmplY3Qua2V5cyh0aGlzLmNoYXJ0RGF0YS5tZXRhRGF0YS5jb2xvcnMpLmxlbmd0aCA+IDFcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAga2VlcE9yZGVyID0gKGEsIGIpID0+IHtcclxuICAgIHJldHVybiBhO1xyXG4gIH07XHJcblxyXG4gIGdldCBpc0FsZXJ0RW5hYmxlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbj8uaGVhZGVyTWVudU9wdGlvbnM/LnNvbWUoXHJcbiAgICAgIChvcHRpb24pID0+IG9wdGlvbi5pZCA9PT0gJ2VkaXRBbGVydCdcclxuICAgICk7XHJcbiAgfSAgXHJcbiAgaW5pdGlhbGl6ZWdyb3VwQ2hhcnQoKSB7XHJcbiAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICBsZXQgZGF0YSA9IFtdO1xyXG4gICAgbGV0IG1ldGFEYXRhOiBhbnkgPSBudWxsO1xyXG4gICAgbGV0IGtleUxpc3QgPSBudWxsO1xyXG4gICAgbGV0IGxpbmVEYXRhID0gbnVsbDtcclxuICAgIGxldCBjb2xvck1hcCA9IHt9O1xyXG4gICAgdmFyIGZvcm1hdEZyb21CYWNrZW5kO1xyXG4gICAgdmFyIGZvcm1hdEZvckh1Z2VOdW1iZXJzO1xyXG4gICAgY29uc3QgaXNNb2JpbGUgPSB3aW5kb3cuaW5uZXJXaWR0aCA8IDU3NjtcclxuICAgIGNvbnN0IGlzVGFibGV0ID0gd2luZG93LmlubmVyV2lkdGggPj0gNTc2ICYmIHdpbmRvdy5pbm5lcldpZHRoIDwgOTkyO1xyXG4gICAgY29uc3QgaXNEZXNrdG9wID0gd2luZG93LmlubmVyV2lkdGggPj0gOTkyO1xyXG5cclxuICAgbGV0IGlzcmlhID0gdGhpcy5jdXN0b21DaGFydENvbmZpZ3VyYXRpb24uaXNSaWFcclxuXHJcbiAgICB2YXIgeDogYW55O1xyXG5cclxuICAgIHZhciBhbHRlcm5hdGVfdGV4dCA9IGZhbHNlO1xyXG4gICAgdmFyIHNob3J0X3RpY2tfbGVuZ3RoID0gNDtcclxuICAgIHZhciBsb25nX3RpY2tfbGVuZ3RoID0gMTY7XHJcbiAgICAvKipcclxuICAgICAqIGxvbmdlciB0aWNrIGxlbmd0aCBuZWVkZWQgZm9yIHdlZWtseSBjaGFydHNcclxuICAgICAqL1xyXG4gICAgdmFyIHNob3J0X3RpY2tfbGVuZ3RoX2JnID0gNTtcclxuICAgIHZhciBsb25nX3RpY2tfbGVuZ3RoX2JnID0gMzA7XHJcbiAgICB2YXIgbGVmdEFuZFJpZ2h0U3BhY2VzID0gNTA7XHJcbiAgICB2YXIgcmlnaHRTdmdXaWR0aCA9IDYwO1xyXG4gICAgdmFyIHRlbXBTY2FsZTtcclxuXHJcbiAgICBmb3IgKHZhciBpIGluIHRoaXMuZGVmYXVsdENvbmZpZ3VyYXRpb24pIHtcclxuICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb25baV0gPSBDaGFydEhlbHBlci5nZXRWYWx1ZUJ5Q29uZmlndXJhdGlvblR5cGUoXHJcbiAgICAgICAgaSxcclxuICAgICAgICB0aGlzLmRlZmF1bHRDb25maWd1cmF0aW9uLFxyXG4gICAgICAgIHRoaXMuY3VzdG9tQ2hhcnRDb25maWd1cmF0aW9uXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgZGF0YSA9IHRoaXMuY2hhcnREYXRhLmRhdGE7XHJcbiAgICBtZXRhRGF0YSA9IHRoaXMuY2hhcnREYXRhLm1ldGFEYXRhO1xyXG4gICAgbGluZURhdGEgPSB0aGlzLmNoYXJ0RGF0YS5saW5lRGF0YTtcclxuXHJcbiAgICAvLyBpZiAobGluZURhdGEgfHwgdGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEpIHtcclxuICAgIC8vICAgcmlnaHRTdmdXaWR0aCA9IDYwO1xyXG4gICAgLy8gfVxyXG4gICAgaWYgKCFtZXRhRGF0YS5jb2xvckFib3ZlVGFyZ2V0KSB7XHJcbiAgICAgIG1ldGFEYXRhWydjb2xvckFib3ZlVGFyZ2V0J10gPSBtZXRhRGF0YS5jb2xvcnM7XHJcbiAgICB9XHJcbiAgICBjb2xvck1hcCA9IG1ldGFEYXRhLmNvbG9ycztcclxuICAgIGtleUxpc3QgPSBtZXRhRGF0YS5rZXlMaXN0O1xyXG5cclxuICAgIHZhciBjaGFydENvbnRhaW5lciA9IGQzLnNlbGVjdCh0aGlzLmNvbnRhaW5lckVsdC5uYXRpdmVFbGVtZW50KTtcclxuICAgIHZhciB2ZXJ0aWNhbHN0YWNrZWRjb250YWluZXIgPSBkMy5zZWxlY3QoXHJcbiAgICAgIHRoaXMuZ3JvdXBjb250YWluZXJFbHQubmF0aXZlRWxlbWVudFxyXG4gICAgKTtcclxuICAgIHZhciBtYXJnaW4gPSB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5tYXJnaW47XHJcbiAgICB2YXIgd2lkdGggPVxyXG4gICAgICBwYXJzZUludChjaGFydENvbnRhaW5lci5zdHlsZSgnd2lkdGgnKSkgLSBtYXJnaW4ubGVmdCAtIG1hcmdpbi5yaWdodDtcclxuICAgIGlmICh0aGlzLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCA+IDMwICYmIHRoaXMuaXNab29tZWRPdXQpIHtcclxuICAgICAgd2lkdGggPVxyXG4gICAgICAgIHdpZHRoID4gdGhpcy5jaGFydERhdGEuZGF0YS5sZW5ndGggKiA0MFxyXG4gICAgICAgICAgPyB0aGlzLmNoYXJ0RGF0YS5kcm9wZG93bkRhdGExXHJcbiAgICAgICAgICAgID8gdGhpcy5jaGFydERhdGEuZGF0YS5sZW5ndGggKiA2MFxyXG4gICAgICAgICAgICA6IHdpZHRoXHJcbiAgICAgICAgICA6IHRoaXMuY2hhcnREYXRhLmRyb3Bkb3duRGF0YTFcclxuICAgICAgICAgID8gdGhpcy5jaGFydERhdGEuZGF0YS5sZW5ndGggKiA2MFxyXG4gICAgICAgICAgOiB0aGlzLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCAqIDQwO1xyXG5cclxuICAgICAgd2lkdGggPVxyXG4gICAgICAgIHdpZHRoID4gdGhpcy5jaGFydERhdGEuZGF0YS5sZW5ndGggKiA0MFxyXG4gICAgICAgICAgPyB3aWR0aFxyXG4gICAgICAgICAgOiB0aGlzLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCAqIDQwO1xyXG4gICAgfVxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmNoYXJ0RGF0YS5kcm9wZG93bkRhdGEyICYmXHJcbiAgICAgIHdpZHRoIDwgdGhpcy5jaGFydERhdGEuZGF0YS5sZW5ndGggKiAxMjAgJiZcclxuICAgICAgdGhpcy5pc1pvb21lZE91dFxyXG4gICAgKSB7XHJcbiAgICAgIHdpZHRoID0gdGhpcy5jaGFydERhdGEuZGF0YS5sZW5ndGggKiAxMjA7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5jaGFydERhdGEuZGF0YS5sZW5ndGggPiA4ICYmICF0aGlzLmlzWm9vbWVkT3V0KSB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLmNoYXJ0RGF0YS5kcm9wZG93bkRhdGEyICYmXHJcbiAgICAgICAgd2lkdGggPCB0aGlzLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCAqIDI1MFxyXG4gICAgICApIHtcclxuICAgICAgICB3aWR0aCA9IHRoaXMuY2hhcnREYXRhLmRhdGEubGVuZ3RoICogMjUwO1xyXG4gICAgICB9IGVsc2Ugd2lkdGggPSB0aGlzLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCAqIDE2MDtcclxuICAgIH1cclxuICAgIC8vIGlmICh0aGlzLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCA+IDgpIHtcclxuICAgIC8vICAgd2lkdGggPSB0aGlzLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCAqIDE0MDtcclxuICAgIC8vIH1cclxuXHJcbiAgICB2YXIgaGVpZ2h0ID1cclxuICAgICAgcGFyc2VJbnQodmVydGljYWxzdGFja2VkY29udGFpbmVyLnN0eWxlKCdoZWlnaHQnKSkgKlxyXG4gICAgICAgIChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5zdmdIZWlnaHQgLyAxMDApIC1cclxuICAgICAgbWFyZ2luLnRvcCAtXHJcbiAgICAgIG1hcmdpbi5ib3R0b207XHJcbiAgICAvKipcclxuICAgICAqIGVudGlyZSBoZWlnaHQgdXNlZCBpbiB3ZWVrbHkgY2hhcnRzIGFzIHggYXhpcyBuZWVkZWQgdG8gYmUgZGlzcGxheWVkIGF0IHRoZSBib3R0b20gb2YgdGhlIGNoYXJ0XHJcbiAgICAgKi9cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNGdWxsU2NyZWVuICE9IHVuZGVmaW5lZCAmJlxyXG4gICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0Z1bGxTY3JlZW5cclxuICAgICkge1xyXG4gICAgICBoZWlnaHQgPVxyXG4gICAgICAgIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnN2Z0hlaWdodCAhPSA3MFxyXG4gICAgICAgICAgPyB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5zdmdIZWlnaHRcclxuICAgICAgICAgIDogcGFyc2VJbnQodmVydGljYWxzdGFja2VkY29udGFpbmVyLnN0eWxlKCdoZWlnaHQnKSk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNEcmlsbGRvd25DaGFydCAmJiAhdGhpcy5pc0hlYWRlclZpc2libGUpIHtcclxuICAgICAgaGVpZ2h0ID1cclxuICAgICAgICBwYXJzZUludCh2ZXJ0aWNhbHN0YWNrZWRjb250YWluZXIuc3R5bGUoJ2hlaWdodCcpKSAtXHJcbiAgICAgICAgbWFyZ2luLnRvcCAtXHJcbiAgICAgICAgbWFyZ2luLmJvdHRvbSAtXHJcbiAgICAgICAgMTMwO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0hlYWRlclZpc2libGUpIHtcclxuICAgICAgaGVpZ2h0ID1cclxuICAgICAgICBwYXJzZUludCh2ZXJ0aWNhbHN0YWNrZWRjb250YWluZXIuc3R5bGUoJ2hlaWdodCcpKSAtXHJcbiAgICAgICAgbWFyZ2luLnRvcCAtXHJcbiAgICAgICAgbWFyZ2luLmJvdHRvbSAtXHJcbiAgICAgICAgMTAwO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBmb3IgaGlkaW5nIGhlYWRlclxyXG4gICAgICogdXNlZCBieSB3ZWVrbHkgY2hhcnRzXHJcbiAgICAgKi9cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0hlYWRlclZpc2libGUgIT0gdW5kZWZpbmVkKVxyXG4gICAgICB0aGlzLmlzSGVhZGVyVmlzaWJsZSA9IHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzSGVhZGVyVmlzaWJsZTtcclxuICAgIC8qKlxyXG4gICAgICogZm9yIGhpZGluZyBsZWdlbmRzXHJcbiAgICAgKiB1c2VkIGJ5IHdlZWtseSBjaGFydHNcclxuICAgICAqL1xyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmxlZ2VuZFZpc2libGUgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMubGVnZW5kVmlzaWJsZSA9IHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmxlZ2VuZFZpc2libGU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBmb3IgcmVtb3ZpbmcgYmFja2dyb3VuZCBjb2xvciBzbyB0aGF0IGl0IGNhbiB0YWtlIHBhcmVudHMgY29sb3JcclxuICAgICAqXHJcbiAgICAgKi9cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1RyYW5zcGFyZW50QmFja2dyb3VuZCAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5pc1RyYW5zcGFyZW50QmFja2dyb3VuZCA9XHJcbiAgICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNUcmFuc3BhcmVudEJhY2tncm91bmQ7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIGZvcm1hdCBkYXRhIHZhbHVlcyBiYXNlZCBvbiBjb25maWd1cmF0aW9uIHJlY2VpdmVkXHJcbiAgICAgKi9cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi50ZXh0Rm9ybWF0dGVyICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICBmb3JtYXRGcm9tQmFja2VuZCA9IENoYXJ0SGVscGVyLmRhdGFWYWx1ZUZvcm1hdHRlcihcclxuICAgICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi50ZXh0Rm9ybWF0dGVyXHJcbiAgICAgICk7XHJcbiAgICAgIGZvcm1hdEZvckh1Z2VOdW1iZXJzID0gQ2hhcnRIZWxwZXIuZGF0YVZhbHVlRm9ybWF0dGVyKCcuMnMnKTtcclxuICAgIH1cclxuICAgIHZhciBvdXRlckNvbnRhaW5lciA9IGNoYXJ0Q29udGFpbmVyXHJcbiAgICAgIC5hcHBlbmQoJ2RpdicpXHJcbiAgICAgIC5hdHRyKCdpZCcsIHNlbGYudW5pcXVlSWQpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICdvdXRlci1jb250YWluZXInKVxyXG4gICAgICAuc3R5bGUoJ3dpZHRoJywgJzEwMCUnKVxyXG4gICAgICAuc3R5bGUoJ2hlaWdodCcsIGhlaWdodClcclxuXHJcbiAgICAgIC5zdHlsZSgnb3ZlcmZsb3cteCcsICdoaWRkZW4nKVxyXG4gICAgICAuc3R5bGUoJ3BhZGRpbmctbGVmdCcsIGAke21hcmdpbi5sZWZ0fXB4YClcclxuICAgICAgLy8gLmNhbGwoQ2hhcnRIZWxwZXIucmVzcG9uc2l2ZWZ5KVxyXG5cclxuICAgICAgLnN0eWxlKCdwYWRkaW5nLXJpZ2h0JywgYCR7cmlnaHRTdmdXaWR0aH1weGApXHJcbiAgICAgIC5zdHlsZSgnbWFyZ2luLWxlZnQnLCAnMTVweCcpO1xyXG4gICAgdmFyIHN2Z1lBeGlzTGVmdCA9IG91dGVyQ29udGFpbmVyXHJcbiAgICAgIC5hcHBlbmQoJ3N2ZycpXHJcbiAgICAgIC5hdHRyKCd3aWR0aCcsICcxMDAnKVxyXG4gICAgICAuYXR0cignaGVpZ2h0JywgaGVpZ2h0ICsgbWFyZ2luLnRvcCArIG1hcmdpbi5ib3R0b20gKyAxMClcclxuICAgICAgLnN0eWxlKCdwb3NpdGlvbicsICdhYnNvbHV0ZScpXHJcbiAgICAgIC5zdHlsZSgnbGVmdCcsICcwJylcclxuICAgICAgLnN0eWxlKCd6LWluZGV4JywgMSlcclxuICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgIC5hdHRyKFxyXG4gICAgICAgICd0cmFuc2Zvcm0nLFxyXG4gICAgICAgICd0cmFuc2xhdGUoJyArIChtYXJnaW4ubGVmdCArIDE1KSArICcsJyArIG1hcmdpbi50b3AgKyAnKSdcclxuICAgICAgKTtcclxuXHJcbiAgICB2YXIgc3ZnWUF4aXNSaWdodCA9IG91dGVyQ29udGFpbmVyXHJcbiAgICAgIC5hcHBlbmQoJ3N2ZycpXHJcbiAgICAgIC5hdHRyKCd3aWR0aCcsIHJpZ2h0U3ZnV2lkdGgpXHJcbiAgICAgIC5hdHRyKCdoZWlnaHQnLCBoZWlnaHQgKyBtYXJnaW4udG9wICsgbWFyZ2luLmJvdHRvbSArIDEwKVxyXG4gICAgICAuc3R5bGUoJ3Bvc2l0aW9uJywgJ2Fic29sdXRlJylcclxuICAgICAgLnN0eWxlKCdyaWdodCcsICcxMnB4JylcclxuICAgICAgLnN0eWxlKCd6LWluZGV4JywgMSlcclxuICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKCcgKyAwICsgJywnICsgbWFyZ2luLnRvcCArICcpJyk7XHJcblxyXG4gICAgdmFyIGlubmVyQ29udGFpbmVyID0gb3V0ZXJDb250YWluZXJcclxuICAgICAgLmFwcGVuZCgnZGl2JylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2lubmVyLWNvbnRhaW5lcicpXHJcbiAgICAgIC5zdHlsZSgnd2lkdGgnLCAnMTAwJScpXHJcbiAgICAgIC5zdHlsZSgnb3ZlcmZsb3cteCcsICdhdXRvJyk7XHJcblxyXG4gICAgdmFyIHN2ZyA9IGlubmVyQ29udGFpbmVyXHJcbiAgICAgIC5hcHBlbmQoJ3N2ZycpXHJcbiAgICAgIC8vIC5hdHRyKCdpZCcsIHNlbGYudW5pcXVlSWQpXHJcbiAgICAgIC5hdHRyKCd3aWR0aCcsIHdpZHRoIC0gcmlnaHRTdmdXaWR0aClcclxuICAgICAgLmF0dHIoJ2hlaWdodCcsIGhlaWdodCArIG1hcmdpbi50b3AgKyBtYXJnaW4uYm90dG9tICsgMzApXHJcbiAgICAgIC8vIC5jYWxsKENoYXJ0SGVscGVyLnJlc3BvbnNpdmVmeSlcclxuICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKCcgKyAwICsgJywnICsgbWFyZ2luLnRvcCArICcpJyk7XHJcblxyXG4gICAgdmFyIHN1Ymdyb3VwczogYW55ID0ga2V5TGlzdDtcclxuXHJcbiAgICB2YXIgZ3JvdXBzID0gZDNcclxuICAgICAgLm1hcChkYXRhLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgIHJldHVybiBkLm5hbWU7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5rZXlzKCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiB4IGF4aXMgcmFuZ2UgbWFkZSBzaW1pbGFyIHRvIGxpbmUgY2hhcnQgb3IgdmVydGljYWwgc3RhY2sgc28gdGhhdCBhbGwgdGhlIGNoYXJ0cyB3aWxsIGdldCBhbGlnbmVkIHdpdGggZWFjaCBvdGhlci5cclxuICAgICAqL1xyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzTXVsdGlDaGFydEdyaWRMaW5lICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICB4ID0gZDNcclxuICAgICAgICAuc2NhbGVCYW5kKClcclxuICAgICAgICAucmFuZ2VSb3VuZChbd2lkdGgsIDBdKVxyXG4gICAgICAgIC5hbGlnbigwLjUpXHJcbiAgICAgICAgLnBhZGRpbmcoWzAuNV0pXHJcbiAgICAgICAgLmRvbWFpbihcclxuICAgICAgICAgIGRhdGEubWFwKGZ1bmN0aW9uIChkOiBhbnkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGQubmFtZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgeCA9IGQzXHJcbiAgICAgICAgLnNjYWxlQmFuZCgpXHJcbiAgICAgICAgLmRvbWFpbihncm91cHMpXHJcbiAgICAgICAgLnJhbmdlKFtsZWZ0QW5kUmlnaHRTcGFjZXMsIHdpZHRoIC0gcmlnaHRTdmdXaWR0aCAtIGxlZnRBbmRSaWdodFNwYWNlc10pXHJcbiAgICAgICAgLnBhZGRpbmcoWzAuM10pO1xyXG4gICAgfVxyXG4gICAgLy8geC5iYW5kd2lkdGgoOTYpO1xyXG4gICAgdmFyIHhTY2FsZUZyb21PcmlnaW4gPSBkM1xyXG4gICAgICAuc2NhbGVCYW5kKClcclxuICAgICAgLmRvbWFpbihncm91cHMpXHJcbiAgICAgIC5yYW5nZShbMCwgd2lkdGggLSByaWdodFN2Z1dpZHRoXSk7XHJcbiAgICAvLyAucGFkZGluZyhbMC4yXSk7XHJcbiAgICAvKipcclxuICAgICAqIGRyYXcgc2Vjb25kIHggYXhpcyBvbiB0b3BcclxuICAgICAqL1xyXG4gICAgLy8gaWYgKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnNob3dYYXhpc1RvcCkge1xyXG4gICAgLy8gICBzdmdcclxuICAgIC8vICAgICAuYXBwZW5kKCdnJylcclxuICAgIC8vICAgICAuYXR0cignY2xhc3MnLCAnbGliLWxpbmUtYXhpcy10ZXh0IGxpYi1saW5lLXgtYXhpcy10ZXh0IHgtYXhpcycpXHJcbiAgICAvLyAgICAgLmF0dHIoJ3N0eWxlJywgc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ueEF4aXNDdXN0b21UZXh0U3R5bGVzKVxyXG4gICAgLy8gICAgIC5jYWxsKGQzLmF4aXNCb3R0b20oeCkudGlja1NpemUoMCkpO1xyXG4gICAgLy8gfVxyXG4gICAgLy8gZDMuc3ZnLmF4aXMoKS5zY2FsZSh4KS5vcmllbnQoJ2JvdHRvbScpLnRpY2tzKDEpLmlubmVyVGlja1NpemUoLWhlaWdodCk7XHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNNdWx0aUNoYXJ0R3JpZExpbmUgPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBub3JtYWwgdGlja3MgZm9yIGFsbCBkYXNoYm9hcmQgY2hhcnRzXHJcbiAgICAgICAqL1xyXG4gICAgICBzdmdcclxuICAgICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgICAuYXR0cignY2xhc3MnLCAneDEgYXhpczEnKVxyXG4gICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKDAsJyArIGhlaWdodCArICcpJylcclxuICAgICAgICAuY2FsbChkMy5heGlzQm90dG9tKHgpKVxyXG4gICAgICAgIC5jYWxsKChnKSA9PiBnLnNlbGVjdCgnLmRvbWFpbicpLnJlbW92ZSgpKTtcclxuXHJcbiAgICAgIHN2Zy5zZWxlY3RBbGwoJ2cueDEuYXhpczEgZy50aWNrIGxpbmUnKS5yZW1vdmUoKTtcclxuXHJcbiAgICAgIHN2Z1xyXG4gICAgICAgIC5zZWxlY3RBbGwoJ2cueDEuYXhpczEgZy50aWNrIHRleHQnKVxyXG4gICAgICAgIC5hdHRyKCdjbGFzcycsICdsaWIteGF4aXMtbGFiZWxzLXRleHRzLWRyaWxsZG93bicpXHJcbiAgICAgICAgLnN0eWxlKCdmaWxsJywgJ3ZhcigtLWNoYXJ0LXRleHQtY29sb3IpJyk7XHJcblxyXG4gICAgICAvLyAuYXR0cigneScsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgLy8gICBpZiAoYWx0ZXJuYXRlX3RleHQpIHtcclxuICAgICAgLy8gICAgIGFsdGVybmF0ZV90ZXh0ID0gZmFsc2U7XHJcbiAgICAgIC8vICAgICByZXR1cm4gbG9uZ190aWNrX2xlbmd0aCArIDE7XHJcbiAgICAgIC8vICAgfSBlbHNlIHtcclxuICAgICAgLy8gICAgIGFsdGVybmF0ZV90ZXh0ID0gdHJ1ZTtcclxuICAgICAgLy8gICAgIHJldHVybiBzaG9ydF90aWNrX2xlbmd0aCArIDE7XHJcbiAgICAgIC8vICAgfVxyXG4gICAgICAvLyB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBiaWdnZXIgdGlja3MgZm9yIHdlZWtseSBjaGFydHMgYW5kIG1vcmUgc3BhY2UgZnJvbSB4IGF4aXMgdG8gbGFiZWxzXHJcbiAgICAgICAqL1xyXG4gICAgICAvKipcclxuICAgICAgICogZHJhdyB4IGF4aXNcclxuICAgICAgICovXHJcbiAgICAgIHN2Z1xyXG4gICAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAgIC5hdHRyKCdjbGFzcycsICd4MSBheGlzMScpXHJcbiAgICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoMCwnICsgaGVpZ2h0ICsgJyknKVxyXG4gICAgICAgIC5jYWxsKGQzLmF4aXNCb3R0b20oeCkudGlja1NpemUoMCkpXHJcbiAgICAgICAgLmNhbGwoKGcpID0+IGcuc2VsZWN0KCcuZG9tYWluJykuYXR0cignZmlsbCcsICdub25lJykpO1xyXG4gICAgICAvKipcclxuICAgICAgICogdGljayBsaW5lIHNpemUgaW4gYWx0ZXJuYXRlIGZhc2hpb25cclxuICAgICAgICovXHJcbiAgICAgIHN2Zy5zZWxlY3RBbGwoJ2cueDEuYXhpczEgZy50aWNrIGxpbmUnKS5hdHRyKCd5MicsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBhbHRlcm5hdGVfdGV4dCAmJlxyXG4gICAgICAgICAgc2VsZi5jaGFydENvbmZpZ3VyYXRpb24uaXNOb0FsdGVybmF0ZVhheGlzVGV4dCA9PSB1bmRlZmluZWRcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGFsdGVybmF0ZV90ZXh0ID0gZmFsc2U7XHJcbiAgICAgICAgICByZXR1cm4gbG9uZ190aWNrX2xlbmd0aF9iZyAtIDc7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGFsdGVybmF0ZV90ZXh0ID0gdHJ1ZTtcclxuICAgICAgICAgIHJldHVybiBzaG9ydF90aWNrX2xlbmd0aF9iZyAtIDQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgLyoqXHJcbiAgICAgICAqIHJlc2V0IHRoZSBmbGFnIHNvIHRoYXQgdmFsdWVzIGNhbiBiZSBzaG93biBpbiBzYW1lIGFsdGVybmF0ZSBmYXNoaW9uXHJcbiAgICAgICAqL1xyXG4gICAgICBhbHRlcm5hdGVfdGV4dCA9IGZhbHNlO1xyXG4gICAgICAvKipcclxuICAgICAgICogcHJpbnQgeC1heGlzIGxhYmVsIHRleHRzXHJcbiAgICAgICAqIHVzZWQgYnkgd2Vla2x5IGNoYXJ0c1xyXG4gICAgICAgKi9cclxuICAgICAgc3ZnXHJcbiAgICAgICAgLnNlbGVjdEFsbCgnZy54MS5heGlzMSBnLnRpY2sgdGV4dCcpXHJcbiAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi14YXhpcy1sYWJlbHMtdGV4dHMtd2Vla2x5Y2hhcnRzJylcclxuICAgICAgICAuYXR0cigneScsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgIGlmIChhbHRlcm5hdGVfdGV4dCkge1xyXG4gICAgICAgICAgICBhbHRlcm5hdGVfdGV4dCA9IGZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm4gbG9uZ190aWNrX2xlbmd0aF9iZztcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGFsdGVybmF0ZV90ZXh0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgcmV0dXJuIHNob3J0X3RpY2tfbGVuZ3RoX2JnO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnhMYWJlbHNPblNhbWVMaW5lKSB7XHJcbiAgICAgIHN2Z1xyXG4gICAgICAgIC5zZWxlY3RBbGwoJ2cueDEuYXhpczEgZy50aWNrIHRleHQnKVxyXG4gICAgICAgIC5hdHRyKCdjbGFzcycsICdsaWIteGF4aXMtbGFiZWxzLXRleHRzLWRyaWxsZG93bicpXHJcbiAgICAgICAgLnN0eWxlKCdmb250LXNpemUnLCB0aGlzLmlzSGVhZGVyVmlzaWJsZSA/ICcxOHB4JyA6ICcxNHB4JylcclxuICAgICAgICAuYXR0cihcclxuICAgICAgICAgICd5JyxcclxuICAgICAgICAgIHRoaXMuaXNIZWFkZXJWaXNpYmxlXHJcbiAgICAgICAgICAgID8gc2hvcnRfdGlja19sZW5ndGhfYmcgKyAyNVxyXG4gICAgICAgICAgICA6IHNob3J0X3RpY2tfbGVuZ3RoX2JnXHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5hdHRyKCd4JywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgIGlmIChzZWxmLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCA+IDggJiYgIXNlbGYuaXNab29tZWRPdXQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIC0yNTsgLy8gTW92ZSBmaXJzdCBsaW5lIHRleHQgc2xpZ2h0bHkgdG8gdGhlIGxlZnQgdG9vXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gMDsgLy8gRGVmYXVsdCBwb3NpdGlvblxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLnRleHQoZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgIHZhciBpc1ZhbHVlVG9CZUlnbm9yZWQgPSBmYWxzZTtcclxuICAgICAgICAgIGlmIChpc01vYmlsZSAmJiAhc2VsZi5pc0hlYWRlclZpc2libGUpIHtcclxuICAgICAgICAgICAgbGV0IGZpcnN0UGFydCA9IGQuc3BsaXQoL1tcXHNcXC1dKy8pWzBdO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGZpcnN0UGFydC5zdWJzdHJpbmcoMCwgMykudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGRhdGEubWFwKChpbmRpdjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICBpbmRpdi5uYW1lLnRvTG93ZXJDYXNlKCkgPT0gZC50cmltKCkudG9Mb3dlckNhc2UoKSAmJlxyXG4gICAgICAgICAgICAgIGluZGl2W21ldGFEYXRhLmtleUxpc3RbMF1dID09IC0xXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgIGlzVmFsdWVUb0JlSWdub3JlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgaWYgKGlzVmFsdWVUb0JlSWdub3JlZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAvLyBJZiBsYWJlbCBsb29rcyBsaWtlIGEgZGF0ZSAoY29udGFpbnMgZGlnaXRzIGFuZCAtIG9yIC8pLCBzaG93IGZ1bGwgbGFiZWwgYXMgb25lIGxpbmVcclxuICAgICAgICAgIGlmICgvXFxkezIsNH1bLVxcL10vLnRlc3QoZCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoZC50cmltKCkuaW5kZXhPZignICcpID4gLTEpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGQudHJpbSgpLnN1YnN0cmluZygwLCBkLmluZGV4T2YoJyAnKSkudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBkLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIGlmICghaXNNb2JpbGUpIHtcclxuICAgICAgICBzdmdcclxuICAgICAgICAgIC5zZWxlY3RBbGwoJ2cueDEuYXhpczEgZy50aWNrJylcclxuICAgICAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgICAgcmV0dXJuICEvXFxkezIsNH1bLVxcL10vLnRlc3QoZCk7IC8vIE9ubHkgcHJvY2VzcyBub24tZGF0ZSBsYWJlbHNcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAuYXBwZW5kKCd0ZXh0JylcclxuICAgICAgICAgIC5hdHRyKCdjbGFzcycsICdsaWIteGF4aXMtbGFiZWxzLXRleHRzLWRyaWxsZG93bicpXHJcbiAgICAgICAgICAuYXR0cigneScsIGxvbmdfdGlja19sZW5ndGhfYmcpXHJcbiAgICAgICAgICAuYXR0cignZmlsbCcsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpXHJcbiAgICAgICAgICAuYXR0cigneCcsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICAgIGlmIChzZWxmLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCA+IDggJiYgIXNlbGYuaXNab29tZWRPdXQpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gLTI1OyAvLyBNb3ZlIHRleHQgc2xpZ2h0bHkgdG8gdGhlIGxlZnRcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gMDsgLy8gRGVmYXVsdCBwb3NpdGlvblxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC50ZXh0KGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICAgIGlmIChkLnRyaW0oKS5pbmRleE9mKCcgJykgPiAtMSkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBkLnRyaW0oKS5zdWJzdHJpbmcoZC5pbmRleE9mKCcgJyksIGQubGVuZ3RoKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiAnJztcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoaXNNb2JpbGUgJiYgIXRoaXMuaXNIZWFkZXJWaXNpYmxlKSB7XHJcbiAgICAgIHN2Z1xyXG4gICAgICAgIC5zZWxlY3RBbGwoJ2cueDEuYXhpczEgZy50aWNrIHRleHQnKVxyXG4gICAgICAgIC5jbGFzc2VkKCdtb2JpbGUteGF4aXMtb3ZlcnJpZGUnLCB0cnVlKTtcclxuICAgIH1cclxuICAgIC8qKnkgc2NhbGUgZm9yIGxlZnQgeSBheGlzICovXHJcbiAgICB2YXIgeSA9IGQzLnNjYWxlTGluZWFyKCkucmFuZ2VSb3VuZChbaGVpZ2h0LCAwXSk7XHJcbiAgICB2YXIgbWF4VmFsdWUgPSBkMy5tYXgoZGF0YSwgKGQpID0+IGQzLm1heChrZXlMaXN0LCAoa2V5KSA9PiArZFtrZXldKSk7XHJcbiAgICBpZiAobWF4VmFsdWUgPT0gMCkge1xyXG4gICAgICBpZiAodGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEpIHtcclxuICAgICAgICBtYXhWYWx1ZSA9IHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLnRhcmdldCArIDIwO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG1heFZhbHVlID0gMTAwO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ueUF4aXNHcmlkKSB7XHJcbiAgICAgIC8vIHN2Z1xyXG4gICAgICAvLyAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAvLyAgIC5hdHRyKCdjbGFzcycsICdncmlkJylcclxuICAgICAgLy8gICAuY2FsbChcclxuICAgICAgLy8gICAgIGQzXHJcbiAgICAgIC8vICAgICAgIC5heGlzTGVmdCh5KVxyXG4gICAgICAvLyAgICAgICAudGlja3Moc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ubnVtYmVyT2ZZVGlja3MpXHJcbiAgICAgIC8vICAgICAgIC50aWNrU2l6ZSgtd2lkdGgpXHJcbiAgICAgIC8vICAgICAgIC50aWNrRm9ybWF0KCcnKVxyXG4gICAgICAvLyAgIClcclxuICAgICAgLy8gICAvLyAuc3R5bGUoJ3N0cm9rZS1kYXNoYXJyYXknLCAnNSA1JylcclxuICAgICAgLy8gICAuc3R5bGUoJ2NvbG9yJywgJyNCOUI5QjknKVxyXG4gICAgICAvLyAgIC5zdHlsZSgnb3BhY2l0eScsICcwLjUnKVxyXG4gICAgICAvLyAgIC5jYWxsKChnKSA9PiBnLnNlbGVjdCgnLmRvbWFpbicpLnJlbW92ZSgpKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5jdXN0b21Zc2NhbGUpIHtcclxuICAgICAgLyoqXHJcbiAgICAgICAqIGluY3JlYXNlIHktc2NhbGUgc28gdGhhdCB2YWx1ZXMgd29udCBjcm9zcyBvciBleGNlZWQgb3V0IG9mIHJhbmdlXHJcbiAgICAgICAqIHVzZWQgaW4gd2Vla2x5IGNoYXJ0c1xyXG4gICAgICAgKi9cclxuICAgICAgbWF4VmFsdWUgPSBtYXhWYWx1ZSAqIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmN1c3RvbVlzY2FsZTtcclxuICAgIH1cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEgJiZcclxuICAgICAgbWF4VmFsdWUgPCB0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXRcclxuICAgICkge1xyXG4gICAgICBtYXhWYWx1ZSA9XHJcbiAgICAgICAgbWF4VmFsdWUgPCAxMCAmJiB0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXQgPCAxMFxyXG4gICAgICAgICAgPyB0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXQgKyAzXHJcbiAgICAgICAgICA6IHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLnRhcmdldCArIDIwO1xyXG4gICAgfVxyXG4gICAgeS5kb21haW4oWzAsIG1heFZhbHVlXSkubmljZSgpO1xyXG4gICAgbGV0IGxpbmVZc2NhbGU7XHJcblxyXG4gICAgaWYgKGxpbmVEYXRhICE9IG51bGwpIHtcclxuICAgICAgbGV0IG1heExpbmVWYWx1ZSA9IGQzLm1heChsaW5lRGF0YSwgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICByZXR1cm4gK2QudmFsdWU7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgbWF4TGluZVZhbHVlID0gbWF4TGluZVZhbHVlICogdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uY3VzdG9tWXNjYWxlO1xyXG5cclxuICAgICAgbGV0IG1pbkxpbmVWYWx1ZSA9IGQzLm1pbihsaW5lRGF0YSwgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICByZXR1cm4gK2QudmFsdWU7XHJcbiAgICAgIH0pO1xyXG4gICAgICBpZiAobWF4TGluZVZhbHVlID4gMCkgbWluTGluZVZhbHVlID0gbWluTGluZVZhbHVlIC0gMztcclxuICAgICAgaWYgKG1pbkxpbmVWYWx1ZSA+IDApIHtcclxuICAgICAgICBtaW5MaW5lVmFsdWUgPSAwO1xyXG4gICAgICB9XHJcbiAgICAgIGxpbmVZc2NhbGUgPSBkM1xyXG4gICAgICAgIC5zY2FsZUxpbmVhcigpXHJcbiAgICAgICAgLmRvbWFpbihbbWluTGluZVZhbHVlLCBtYXhMaW5lVmFsdWVdKVxyXG4gICAgICAgIC5yYW5nZShbaGVpZ2h0LCBtaW5MaW5lVmFsdWVdKTtcclxuICAgIH1cclxuICAgIGxldCB5TGluZUF4aXM7XHJcbiAgICBpZiAobGluZVlzY2FsZSAhPSBudWxsKSB7XHJcbiAgICAgIHlMaW5lQXhpcyA9IGQzXHJcbiAgICAgICAgLmF4aXNSaWdodChsaW5lWXNjYWxlKVxyXG4gICAgICAgIC50aWNrcyhzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5udW1iZXJPZllUaWNrcylcclxuICAgICAgICAudGlja1NpemUoMClcclxuICAgICAgICAudGlja0Zvcm1hdChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi55TGluZUF4aXNMYWJlbEZvbWF0dGVyKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogc2hvdyB4LWF4aXMgZ3JpZCBiZXR3ZWVuIGxhYmVsc1xyXG4gICAgICogdXNlZCBieSB3ZWVrbHkgY2hhcnRzXHJcbiAgICAgKi9cclxuICAgIGlmIChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1hncmlkQmV0d2VlbkxhYmVscykge1xyXG4gICAgICBzdmdcclxuICAgICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgICAuYXR0cignY2xhc3MnLCAnZ3JpZCcpXHJcbiAgICAgICAgLmF0dHIoXHJcbiAgICAgICAgICAndHJhbnNmb3JtJyxcclxuICAgICAgICAgICd0cmFuc2xhdGUoJyArIHguYmFuZHdpZHRoKCkgLyAyICsgJywnICsgaGVpZ2h0ICsgJyknXHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5jYWxsKGQzLmF4aXNCb3R0b20oeCkudGlja1NpemUoLWhlaWdodCkudGlja0Zvcm1hdCgnJykpXHJcbiAgICAgICAgLnN0eWxlKCdzdHJva2UtZGFzaGFycmF5JywgJzUgNScpXHJcbiAgICAgICAgLnN0eWxlKCdjb2xvcicsICd2YXIoLS1jaGFydC1ncmlkLWNvbG9yLCAjOTk5OTk5KScpIC8vIFVzZSBDU1MgdmFyaWFibGVcclxuICAgICAgICAuY2FsbCgoZykgPT4gZy5zZWxlY3QoJy5kb21haW4nKS5yZW1vdmUoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnlBeGlzR3JpZCkge1xyXG4gICAgICBzdmdcclxuICAgICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgICAuY2FsbChcclxuICAgICAgICAgIGQzXHJcbiAgICAgICAgICAgIC5heGlzTGVmdCh5KVxyXG4gICAgICAgICAgICAudGlja3Moc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ubnVtYmVyT2ZZVGlja3MpXHJcbiAgICAgICAgICAgIC50aWNrU2l6ZSgtd2lkdGgpXHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5zdHlsZSgnY29sb3InLCAndmFyKC0tY2hhcnQtYXhpcy1jb2xvciwgI0I5QjlCOSknKVxyXG4gICAgICAgIC5zdHlsZSgnb3BhY2l0eScsICcwLjUnKVxyXG4gICAgICAgIC5jYWxsKChnKSA9PiB7XHJcbiAgICAgICAgICBnLnNlbGVjdCgnLmRvbWFpbicpXHJcbiAgICAgICAgICAgIC5yZW1vdmUoKVxyXG4gICAgICAgICAgICAuc3R5bGUoJ3N0cm9rZScsICd2YXIoLS1jaGFydC1kb21haW4tY29sb3IsICMwMDAwMDApJyk7IC8vIEFkZCBDU1MgdmFyaWFibGUgZm9yIGRvbWFpblxyXG4gICAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgc3ZnXHJcbiAgICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgICAgLmNhbGwoZDMuYXhpc0xlZnQoeSkudGlja3Moc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ubnVtYmVyT2ZZVGlja3MpKVxyXG4gICAgICAgIC5zdHlsZSgnY29sb3InLCAndmFyKC0tY2hhcnQtYXhpcy1jb2xvciwgI0I5QjlCOSknKVxyXG4gICAgICAgIC5zdHlsZSgnb3BhY2l0eScsICcwLjUnKVxyXG4gICAgICAgIC5jYWxsKChnKSA9PiB7XHJcbiAgICAgICAgICBnLnNlbGVjdCgnLmRvbWFpbicpXHJcbiAgICAgICAgICAgIC5zdHlsZSgnc3Ryb2tlJywgJ3ZhcigtLWNoYXJ0LWRvbWFpbi1jb2xvciwgIzAwMDAwMCknKSAvLyBBZGQgQ1NTIHZhcmlhYmxlIGZvciBkb21haW5cclxuICAgICAgICAgICAgLnN0eWxlKCdzdHJva2Utd2lkdGgnLCAnMXB4Jyk7IC8vIEVuc3VyZSB2aXNpYmlsaXR5XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHhTdWJncm91cCA9IGQzLnNjYWxlQmFuZCgpLmRvbWFpbihzdWJncm91cHMpO1xyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzTXVsdGlDaGFydEdyaWRMaW5lID09IHVuZGVmaW5lZCkge1xyXG4gICAgICB4U3ViZ3JvdXAucmFuZ2UoWzAsIHguYmFuZHdpZHRoKCldKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiB1c2VkIHRvIG1ha2UgZ3JvdXBlZCBiYXJzIHdpdGggbGVzc2VyIHdpZHRoIGFzIHdlIGFyZSBub3QgdXNpbmcgcGFkZGluZyBmb3Igd2lkdGhcclxuICAgICAgICogdXNlZCBieSB3ZWVrbHkgY2hhcnRzXHJcbiAgICAgICAqL1xyXG4gICAgICB4U3ViZ3JvdXAucmFuZ2UoWzAsIHguYmFuZHdpZHRoKCldKTtcclxuICAgIH1cclxuICAgIC8vIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0RyaWxsZG93bkNoYXJ0KSB7XHJcblxyXG4gICAgLy8gfVxyXG4gICAgdmFyIGNvbG9yID0gZDNcclxuICAgICAgLnNjYWxlT3JkaW5hbCgpXHJcbiAgICAgIC5kb21haW4oc3ViZ3JvdXBzKVxyXG4gICAgICAucmFuZ2UoT2JqZWN0LnZhbHVlcyhtZXRhRGF0YS5jb2xvcnMpKTtcclxuICAgIC8vIHZhciBjb2xvckFib3ZlVGFyZ2V0ID0gZDNcclxuICAgIC8vICAgLnNjYWxlT3JkaW5hbCgpXHJcbiAgICAvLyAgIC5kb21haW4oc3ViZ3JvdXBzKVxyXG4gICAgLy8gICAucmFuZ2UoT2JqZWN0LnZhbHVlcyhtZXRhRGF0YS5jb2xvckFib3ZlVGFyZ2V0KSk7XHJcbiAgICB2YXIgc3RhdGUgPSBzdmdcclxuICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgIC5zZWxlY3RBbGwoJy5zdGF0ZScpXHJcbiAgICAgIC5kYXRhKGRhdGEpXHJcbiAgICAgIC5lbnRlcigpXHJcbiAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICByZXR1cm4gJ3RyYW5zbGF0ZSgnICsgeChkLm5hbWUpICsgJywwKSc7XHJcbiAgICAgIH0pO1xyXG4gICAgc3RhdGVcclxuICAgICAgLnNlbGVjdEFsbCgncmVjdCcpXHJcbiAgICAgIC5kYXRhKGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgbGV0IG5ld0xpc3Q6IGFueSA9IFtdO1xyXG4gICAgICAgIHN1Ymdyb3Vwcy5tYXAoZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgICAgLy8gaWYgKGtleSAhPT0gXCJncm91cFwiKSB7XHJcbiAgICAgICAgICBsZXQgb2JqOiBhbnkgPSB7IGtleToga2V5LCB2YWx1ZTogZFtrZXldLCBuYW1lOiBkLm5hbWUgfTtcclxuICAgICAgICAgIG5ld0xpc3QucHVzaChvYmopO1xyXG4gICAgICAgICAgLy8gfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBuZXdMaXN0O1xyXG4gICAgICB9KVxyXG4gICAgICAuZW50ZXIoKVxyXG4gICAgICAuYXBwZW5kKCdyZWN0JylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2JhcnMnKVxyXG4gICAgICAub24oJ2NsaWNrJywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICBpZiAoZC5rZXkgIT0gJ1RhcmdldCcpIHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgIW1ldGFEYXRhLmJhcldpdGhvdXRDbGljayB8fFxyXG4gICAgICAgICAgICAhbWV0YURhdGEuYmFyV2l0aG91dENsaWNrLmxlbmd0aCB8fFxyXG4gICAgICAgICAgICAoIW1ldGFEYXRhLmJhcldpdGhvdXRDbGljay5pbmNsdWRlcyhkPy5uYW1lKSAmJlxyXG4gICAgICAgICAgICAgICFtZXRhRGF0YS5iYXJXaXRob3V0Q2xpY2suaW5jbHVkZXMoZD8ua2V5KSlcclxuICAgICAgICAgIClcclxuICAgICAgICAgICAgLy8gc2VsZi5oYW5kbGVDbGljayhkLmRhdGEubmFtZSk7XHJcbiAgICAgICAgICAgIHNlbGYuaGFuZGxlQ2xpY2soZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICAuYXR0cigneCcsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgaWYgKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmlzRHJpbGxkb3duQ2hhcnQpIHtcclxuICAgICAgICAgIGRhdGEubWFwKChpbmRpdjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChpbmRpdi5uYW1lID09IGQubmFtZSkge1xyXG4gICAgICAgICAgICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMoaW5kaXYpLmZpbHRlcigodGVtcCwgaSkgPT4gaSAhPSAwKTtcclxuICAgICAgICAgICAgICB0ZW1wU2NhbGUgPSBkMy5zY2FsZUJhbmQoKS5kb21haW4oa2V5cykucmFuZ2UoWzAsIHguYmFuZHdpZHRoKCldKTtcclxuICAgICAgICAgICAgICBpZiAoeC5iYW5kd2lkdGgoKSA+IDEwMCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuY2hhcnREYXRhLmRhdGEubGVuZ3RoID09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHNlbGYuY2hhcnREYXRhLmRhdGFbMF0pLmxlbmd0aCA9PSAyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcFNjYWxlLnJhbmdlKFtcclxuICAgICAgICAgICAgICAgICAgICAgIDAgKyAoeC5iYW5kd2lkdGgoKSAtIDEyNSkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgeC5iYW5kd2lkdGgoKSAtICh4LmJhbmR3aWR0aCgpIC0gMTI1KSAvIDIsXHJcbiAgICAgICAgICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gLnBhZGRpbmcoMC4wNSk7XHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIHRlbXBTY2FsZS5yYW5nZShbXHJcbiAgICAgICAgICAgICAgICAgICAgICAwICsgKHguYmFuZHdpZHRoKCkgLSAxMjUpIC8gMixcclxuICAgICAgICAgICAgICAgICAgICAgIHguYmFuZHdpZHRoKCkgLSAoeC5iYW5kd2lkdGgoKSAtIDEyNSkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgICAgICAgICAvLyAucGFkZGluZygwLjA1KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZVxyXG4gICAgICAgICAgICAgICAgICB0ZW1wU2NhbGUucmFuZ2UoW1xyXG4gICAgICAgICAgICAgICAgICAgIDAgKyAoeC5iYW5kd2lkdGgoKSAtIDEyNSkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgIHguYmFuZHdpZHRoKCkgLSAoeC5iYW5kd2lkdGgoKSAtIDEyNSkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICBdKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgcmV0dXJuIHRlbXBTY2FsZShkLmtleSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB4U3ViZ3JvdXAoZC5rZXkpO1xyXG4gICAgICB9KVxyXG4gICAgICAuYXR0cigneScsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgaWYgKGQudmFsdWUgPT0gLTEpIHtcclxuICAgICAgICAgIHJldHVybiB5KDApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGQudmFsdWUgPj0gMCkge1xyXG4gICAgICAgICAgY29uc3QgYmFySGVpZ2h0ID0gaGVpZ2h0IC0geShkLnZhbHVlKTtcclxuICAgICAgICAgIGNvbnN0IG1pbkhlaWdodCA9IHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmRlZmF1bHRCYXJIZWlnaHQgfHwgMjtcclxuICAgICAgICAgIHJldHVybiBiYXJIZWlnaHQgPCBtaW5IZWlnaHQgPyB5KDApIC0gbWluSGVpZ2h0IDogeShkLnZhbHVlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB5KDApO1xyXG4gICAgICB9KVxyXG4gICAgICAuYXR0cignd2lkdGgnLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgIGlmIChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0RyaWxsZG93bkNoYXJ0KSB7XHJcbiAgICAgICAgICAvLyB2YXIgdGVtcFNjYWxlO1xyXG5cclxuICAgICAgICAgIGRhdGEubWFwKChpbmRpdjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChpbmRpdi5uYW1lID09IGQubmFtZSkge1xyXG4gICAgICAgICAgICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMoaW5kaXYpLmZpbHRlcigodGVtcCwgaSkgPT4gaSAhPSAwKTtcclxuICAgICAgICAgICAgICB2YXIgdGVtcDtcclxuICAgICAgICAgICAgICB0ZW1wU2NhbGUgPSBkMy5zY2FsZUJhbmQoKS5kb21haW4oa2V5cykucmFuZ2UoWzAsIHguYmFuZHdpZHRoKCldKTtcclxuICAgICAgICAgICAgICBpZiAoeC5iYW5kd2lkdGgoKSA+IDEwMCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuY2hhcnREYXRhLmRhdGEubGVuZ3RoID09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHNlbGYuY2hhcnREYXRhLmRhdGFbMF0pLmxlbmd0aCA9PSAyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcFNjYWxlLnJhbmdlKFtcclxuICAgICAgICAgICAgICAgICAgICAgIDAgKyAoeC5iYW5kd2lkdGgoKSAtIDEyNSkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgeC5iYW5kd2lkdGgoKSAtICh4LmJhbmR3aWR0aCgpIC0gMTI1KSAvIDIsXHJcbiAgICAgICAgICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gLnBhZGRpbmcoMC4wNSk7XHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIHRlbXBTY2FsZS5yYW5nZShbXHJcbiAgICAgICAgICAgICAgICAgICAgICAwICsgKHguYmFuZHdpZHRoKCkgLSAxMjUpIC8gMixcclxuICAgICAgICAgICAgICAgICAgICAgIHguYmFuZHdpZHRoKCkgLSAoeC5iYW5kd2lkdGgoKSAtIDEyNSkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgICAgICAgICAvLyAucGFkZGluZygwLjA1KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZVxyXG4gICAgICAgICAgICAgICAgICB0ZW1wU2NhbGUucmFuZ2UoW1xyXG4gICAgICAgICAgICAgICAgICAgIDAgKyAoeC5iYW5kd2lkdGgoKSAtIDEyNSkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgIHguYmFuZHdpZHRoKCkgLSAoeC5iYW5kd2lkdGgoKSAtIDEyNSkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICBdKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgcmV0dXJuIHNlbGYuaXNab29tZWRPdXRcclxuICAgICAgICAgICAgPyB0ZW1wU2NhbGUuYmFuZHdpZHRoKClcclxuICAgICAgICAgICAgOiBzZWxmLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCAmJiBzZWxmLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCA+IDhcclxuICAgICAgICAgICAgPyB0ZW1wU2NhbGUuYmFuZHdpZHRoKCkgKiAwLjVcclxuICAgICAgICAgICAgOiB0ZW1wU2NhbGUuYmFuZHdpZHRoKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzZWxmLmlzWm9vbWVkT3V0XHJcbiAgICAgICAgICA/IHRlbXBTY2FsZS5iYW5kd2lkdGgoKVxyXG4gICAgICAgICAgOiBzZWxmLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCAmJiBzZWxmLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCA+IDhcclxuICAgICAgICAgID8gdGVtcFNjYWxlLmJhbmR3aWR0aCgpICogMC41XHJcbiAgICAgICAgICA6IHRlbXBTY2FsZS5iYW5kd2lkdGgoKTtcclxuICAgICAgfSlcclxuICAgICAgLmF0dHIoJ2hlaWdodCcsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgaWYgKGQudmFsdWUgPT0gLTEpIHtcclxuICAgICAgICAgIHJldHVybiBoZWlnaHQgLSB5KDApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGQudmFsdWUgPj0gMCkge1xyXG4gICAgICAgICAgY29uc3QgYmFySGVpZ2h0ID0gaGVpZ2h0IC0geShkLnZhbHVlKTtcclxuICAgICAgICAgIGNvbnN0IG1pbkhlaWdodCA9IHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmRlZmF1bHRCYXJIZWlnaHQgfHwgMjtcclxuICAgICAgICAgIHJldHVybiBNYXRoLm1heChiYXJIZWlnaHQsIG1pbkhlaWdodCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gaGVpZ2h0IC0geSgwKTtcclxuICAgICAgfSlcclxuICAgICAgLnN0eWxlKCdjdXJzb3InLCAoKSA9PlxyXG4gICAgICAgIHNlbGYuY2hhcnREYXRhLm1ldGFEYXRhLmhhc0RyaWxsRG93biA/ICdwb2ludGVyJyA6ICdkZWZhdWx0J1xyXG4gICAgICApXHJcbiAgICAgIC5hdHRyKCdmaWxsJywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBkLnZhbHVlICYmXHJcbiAgICAgICAgICBzZWxmLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YSAmJlxyXG4gICAgICAgICAgZC52YWx1ZSA+PSBwYXJzZUludChzZWxmLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXQpICYmXHJcbiAgICAgICAgICBzZWxmLmNoYXJ0RGF0YS5tZXRhRGF0YS5jb2xvckFib3ZlVGFyZ2V0XHJcbiAgICAgICAgKVxyXG4gICAgICAgICAgcmV0dXJuIHNlbGYuY2hhcnREYXRhLm1ldGFEYXRhLmNvbG9yQWJvdmVUYXJnZXRbZC5rZXldO1xyXG4gICAgICAgIHJldHVybiBzZWxmLmNoYXJ0RGF0YS5tZXRhRGF0YS5jb2xvcnNbZC5rZXldO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIGRpc3BsYXkgYW5nbGVkIHRleHRzIG9uIHRoZSBiYXJzXHJcbiAgICAgKi9cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi50ZXh0c09uQmFyICE9IHVuZGVmaW5lZCAmJiAhdGhpcy5pc1pvb21lZE91dCkge1xyXG4gICAgICBzdGF0ZVxyXG4gICAgICAgIC5zZWxlY3RBbGwoJ3RleHQnKVxyXG4gICAgICAgIC5kYXRhKGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICBsZXQgbmV3TGlzdDogYW55ID0gW107XHJcbiAgICAgICAgICBzdWJncm91cHMubWFwKGZ1bmN0aW9uIChrZXkpIHtcclxuICAgICAgICAgICAgbGV0IG9iajogYW55ID0geyBrZXk6IGtleSwgdmFsdWU6IGRba2V5XSwgbmFtZTogZC5uYW1lIH07XHJcbiAgICAgICAgICAgIG5ld0xpc3QucHVzaChvYmopO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICByZXR1cm4gbmV3TGlzdDtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5lbnRlcigpXHJcbiAgICAgICAgLmFwcGVuZCgndGV4dCcpXHJcbiAgICAgICAgLmF0dHIoJ2ZpbGwnLCAndmFyKC0tY2hhcnQtdGV4dC1jb2xvciknKVxyXG4gICAgICAgIC5hdHRyKCd4JywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmF0dHIoJ3knLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuYXR0cignY2xhc3MnLCAnbGliLWRhdGEtbGFiZWxzLXdlZWtseWNoYXJ0cycpXHJcbiAgICAgICAgLnRleHQoZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgIHJldHVybiBkLmtleSAmJiBkLnZhbHVlXHJcbiAgICAgICAgICAgID8gZC5rZXkubGVuZ3RoID4gMjBcclxuICAgICAgICAgICAgICA/IGQua2V5LnN1YnN0cmluZygwLCAxNykgKyAnLi4uJ1xyXG4gICAgICAgICAgICAgIDogZC5rZXlcclxuICAgICAgICAgICAgOiAnJztcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5zdHlsZSgnZmlsbCcsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICByZXR1cm4gJyMwMDAnO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLnN0eWxlKCdmb250LXdlaWdodCcsICdib2xkJylcclxuICAgICAgICAuc3R5bGUoJ2ZvbnQtc2l6ZScsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICBpZiAoc2VsZi5pc1pvb21lZE91dCkge1xyXG4gICAgICAgICAgICByZXR1cm4gJzlweCc7IC8vIPCfkYggWm9vbWVkIG91dCBtb2RlXHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmlzRHJpbGxkb3duQ2hhcnQpIHtcclxuICAgICAgICAgICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoID4gMTkwMCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiAnMThweCc7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAod2luZG93LmlubmVyV2lkdGggPCAxNDAwKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuICcxMHB4JztcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICByZXR1cm4gJzE0cHgnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gJzE0cHgnO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICBkYXRhLm1hcCgoaW5kaXY6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoaW5kaXYubmFtZSA9PSBkLm5hbWUpIHtcclxuICAgICAgICAgICAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzKGluZGl2KS5maWx0ZXIoKHRlbXAsIGkpID0+IGkgIT0gMCk7XHJcbiAgICAgICAgICAgICAgdmFyIHRlbXA7XHJcbiAgICAgICAgICAgICAgdGVtcFNjYWxlID0gZDMuc2NhbGVCYW5kKCkuZG9tYWluKGtleXMpLnJhbmdlKFswLCB4LmJhbmR3aWR0aCgpXSk7XHJcbiAgICAgICAgICAgICAgaWYgKHguYmFuZHdpZHRoKCkgPiAxMDApIHtcclxuICAgICAgICAgICAgICAgIGlmIChzZWxmLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCA9PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhzZWxmLmNoYXJ0RGF0YS5kYXRhWzBdKS5sZW5ndGggPT0gMikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRlbXBTY2FsZS5yYW5nZShbXHJcbiAgICAgICAgICAgICAgICAgICAgICAwICsgKHguYmFuZHdpZHRoKCkgLSAyMDApIC8gMixcclxuICAgICAgICAgICAgICAgICAgICAgIHguYmFuZHdpZHRoKCkgLSAoeC5iYW5kd2lkdGgoKSAtIDIwMCkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIC5wYWRkaW5nKDAuMDUpO1xyXG4gICAgICAgICAgICAgICAgICB9IGVsc2VcclxuICAgICAgICAgICAgICAgICAgICB0ZW1wU2NhbGUucmFuZ2UoW1xyXG4gICAgICAgICAgICAgICAgICAgICAgMCArICh4LmJhbmR3aWR0aCgpIC0gMzAwKSAvIDIsXHJcbiAgICAgICAgICAgICAgICAgICAgICB4LmJhbmR3aWR0aCgpIC0gKHguYmFuZHdpZHRoKCkgLSAzMDApIC8gMixcclxuICAgICAgICAgICAgICAgICAgICBdKTtcclxuICAgICAgICAgICAgICAgICAgLy8gLnBhZGRpbmcoMC4wNSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2VcclxuICAgICAgICAgICAgICAgICAgdGVtcFNjYWxlLnJhbmdlKFtcclxuICAgICAgICAgICAgICAgICAgICAwICsgKHguYmFuZHdpZHRoKCkgLSAxMjUpIC8gMixcclxuICAgICAgICAgICAgICAgICAgICB4LmJhbmR3aWR0aCgpIC0gKHguYmFuZHdpZHRoKCkgLSAxMjUpIC8gMixcclxuICAgICAgICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICogaWYgc2V0LCB0aGVuIGFsbCB0ZXh0cyBsbCBiZSBob3Jpem9udGFsXHJcbiAgICAgICAgICAgKi9cclxuICAgICAgICAgIGlmIChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi50ZXh0QWx3YXlzSG9yaXpvbnRhbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICd0cmFuc2xhdGUoJyArIHhTdWJncm91cChkLmtleSkgKyAnLCcgKyAoeShkLnZhbHVlKSAtIDMpICsgJyknXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAvKipcclxuICAgICAgICAgICAqIHJvdGF0ZSB0ZXh0cyBoYXZpbmcgbW9yZSB0aGFuIG9uZSBkaWdpdHNcclxuICAgICAgICAgICAqL1xyXG4gICAgICAgICAgLy8gaWYgKGQudmFsdWUgPiA5KVxyXG4gICAgICAgICAgaWYgKCFpc05hTih0ZW1wU2NhbGUoZC5rZXkpKSlcclxuICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAndHJhbnNsYXRlKCcgK1xyXG4gICAgICAgICAgICAgICh0ZW1wU2NhbGUoZC5rZXkpICsgdGVtcFNjYWxlLmJhbmR3aWR0aCgpICogMC41NSkgK1xyXG4gICAgICAgICAgICAgICcsJyArXHJcbiAgICAgICAgICAgICAgKHkoMCkgLSAxMCkgK1xyXG4gICAgICAgICAgICAgICcpIHJvdGF0ZSgyNzApJ1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgcmV0dXJuICd0cmFuc2xhdGUoMCwwKSc7XHJcbiAgICAgICAgICAvLyBlbHNlXHJcbiAgICAgICAgICAvLyAgIHJldHVybiAoXHJcbiAgICAgICAgICAvLyAgICAgJ3RyYW5zbGF0ZSgnICtcclxuICAgICAgICAgIC8vICAgICAodGVtcFNjYWxlKGQua2V5KSArIHRlbXBTY2FsZS5iYW5kd2lkdGgoKSAvIDIpICtcclxuICAgICAgICAgIC8vICAgICAnLCcgK1xyXG4gICAgICAgICAgLy8gICAgIHkoMCkgK1xyXG4gICAgICAgICAgLy8gICAgICcpJ1xyXG4gICAgICAgICAgLy8gICApO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLm9uKCdjbGljaycsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICFtZXRhRGF0YS5iYXJXaXRob3V0Q2xpY2sgfHxcclxuICAgICAgICAgICAgIW1ldGFEYXRhLmJhcldpdGhvdXRDbGljay5sZW5ndGggfHxcclxuICAgICAgICAgICAgKCFtZXRhRGF0YS5iYXJXaXRob3V0Q2xpY2suaW5jbHVkZXMoZD8ubmFtZSkgJiZcclxuICAgICAgICAgICAgICAhbWV0YURhdGEuYmFyV2l0aG91dENsaWNrLmluY2x1ZGVzKGQ/LmtleSkpXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgICAgIHNlbGYuaGFuZGxlQ2xpY2soZCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIHN0YXRlXHJcbiAgICAgICAgLnNlbGVjdEFsbCgnLmxpYi1kYXRhLWxhYmVscy13ZWVrbHljaGFydHMnKVxyXG4gICAgICAgIC5vbignbW91c2VvdXQnLCBoYW5kbGVNb3VzZU91dClcclxuICAgICAgICAub24oJ21vdXNlb3ZlcicsIGhhbmRsZU1vdXNlT3Zlcik7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uZGlzcGxheVRpdGxlT25Ub3ApIHtcclxuICAgICAgc3RhdGVcclxuICAgICAgICAuc2VsZWN0QWxsKCdyZWN0JylcclxuICAgICAgICAub24oJ21vdXNlb3V0JywgaGFuZGxlTW91c2VPdXQpXHJcbiAgICAgICAgLm9uKCdtb3VzZW92ZXInLCBoYW5kbGVNb3VzZU92ZXIpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gaGFuZGxlTW91c2VPdmVyKGQsIGkpIHtcclxuICAgICAgc3ZnXHJcbiAgICAgICAgLmFwcGVuZCgnZm9yZWlnbk9iamVjdCcpXHJcbiAgICAgICAgLmF0dHIoJ3gnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAvLyAuLi5leGlzdGluZyBjb2RlIGZvciB0ZW1wU2NhbGUgY2FsY3VsYXRpb24uLi5cclxuICAgICAgICAgIHZhciBlbGVtZW50c0NvdW50ZXI7XHJcbiAgICAgICAgICBkYXRhLm1hcCgoaW5kaXY6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoaW5kaXYubmFtZSA9PSBkLm5hbWUpIHtcclxuICAgICAgICAgICAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzKGluZGl2KS5maWx0ZXIoKHRlbXAsIGkpID0+IGkgIT0gMCk7XHJcbiAgICAgICAgICAgICAgZWxlbWVudHNDb3VudGVyID0ga2V5cy5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgdGVtcFNjYWxlID0gZDMuc2NhbGVCYW5kKCkuZG9tYWluKGtleXMpLnJhbmdlKFswLCB4LmJhbmR3aWR0aCgpXSk7XHJcbiAgICAgICAgICAgICAgaWYgKHguYmFuZHdpZHRoKCkgPiAxMDApIHtcclxuICAgICAgICAgICAgICAgIGlmIChzZWxmLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCA9PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhzZWxmLmNoYXJ0RGF0YS5kYXRhWzBdKS5sZW5ndGggPT0gMikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRlbXBTY2FsZS5yYW5nZShbXHJcbiAgICAgICAgICAgICAgICAgICAgICAwICsgKHguYmFuZHdpZHRoKCkgLSAyMDApIC8gMixcclxuICAgICAgICAgICAgICAgICAgICAgIHguYmFuZHdpZHRoKCkgLSAoeC5iYW5kd2lkdGgoKSAtIDIwMCkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgICAgICAgICB9IGVsc2VcclxuICAgICAgICAgICAgICAgICAgICB0ZW1wU2NhbGUucmFuZ2UoW1xyXG4gICAgICAgICAgICAgICAgICAgICAgMCArICh4LmJhbmR3aWR0aCgpIC0gMzAwKSAvIDIsXHJcbiAgICAgICAgICAgICAgICAgICAgICB4LmJhbmR3aWR0aCgpIC0gKHguYmFuZHdpZHRoKCkgLSAzMDApIC8gMixcclxuICAgICAgICAgICAgICAgICAgICBdKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZVxyXG4gICAgICAgICAgICAgICAgICB0ZW1wU2NhbGUucmFuZ2UoW1xyXG4gICAgICAgICAgICAgICAgICAgIDAgKyAoeC5iYW5kd2lkdGgoKSAtIDEyNSkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgIHguYmFuZHdpZHRoKCkgLSAoeC5iYW5kd2lkdGgoKSAtIDEyNSkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICBdKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgaWYgKG1ldGFEYXRhLmhhc0RyaWxsRG93bikge1xyXG4gICAgICAgICAgICBpZiAodGVtcFNjYWxlLmJhbmR3aWR0aCgpICsgbGVmdEFuZFJpZ2h0U3BhY2VzICogMiA+IDE4MCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICB4KGQubmFtZSkgKyB0ZW1wU2NhbGUoZC5rZXkpICsgdGVtcFNjYWxlLmJhbmR3aWR0aCgpIC8gMiAtIDkwXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgIHgoZC5uYW1lKSArXHJcbiAgICAgICAgICAgICAgdGVtcFNjYWxlKGQua2V5KSAtXHJcbiAgICAgICAgICAgICAgKHRlbXBTY2FsZS5iYW5kd2lkdGgoKSArIGxlZnRBbmRSaWdodFNwYWNlcyAqIDIpIC8gMiArXHJcbiAgICAgICAgICAgICAgdGVtcFNjYWxlLmJhbmR3aWR0aCgpIC8gMlxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSBlbHNlIHJldHVybiB4KGQubmFtZSkgKyB0ZW1wU2NhbGUoZC5rZXkpIC0gKHRlbXBTY2FsZS5iYW5kd2lkdGgoKSArIGxlZnRBbmRSaWdodFNwYWNlcyAqIDIpIC8gMiArIHRlbXBTY2FsZS5iYW5kd2lkdGgoKSAvIDI7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuYXR0cignY2xhc3MnLCAnbGliLXZlcnRpY2Fsc3RhY2stdGl0bGUtb250b3AnKVxyXG4gICAgICAgIC5hdHRyKCd5JywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgcmV0dXJuIHkoZC52YWx1ZSkgLSAzIC0gNDAgLSAxMDtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5hdHRyKCdkeScsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgIHJldHVybiBkLmNsYXNzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmF0dHIoJ3dpZHRoJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgZGF0YS5tYXAoKGluZGl2OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKGluZGl2Lm5hbWUgPT0gZC5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyhpbmRpdikuZmlsdGVyKCh0ZW1wLCBpKSA9PiBpICE9IDApO1xyXG4gICAgICAgICAgICAgIHRlbXBTY2FsZSA9IGQzLnNjYWxlQmFuZCgpLmRvbWFpbihrZXlzKS5yYW5nZShbMCwgeC5iYW5kd2lkdGgoKV0pO1xyXG4gICAgICAgICAgICAgIGlmICh4LmJhbmR3aWR0aCgpID4gMTAwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5jaGFydERhdGEuZGF0YS5sZW5ndGggPT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMoc2VsZi5jaGFydERhdGEuZGF0YVswXSkubGVuZ3RoID09IDIpIHtcclxuICAgICAgICAgICAgICAgICAgICB0ZW1wU2NhbGUucmFuZ2UoW1xyXG4gICAgICAgICAgICAgICAgICAgICAgMCArICh4LmJhbmR3aWR0aCgpIC0gMjAwKSAvIDIsXHJcbiAgICAgICAgICAgICAgICAgICAgICB4LmJhbmR3aWR0aCgpIC0gKHguYmFuZHdpZHRoKCkgLSAyMDApIC8gMixcclxuICAgICAgICAgICAgICAgICAgICBdKTtcclxuICAgICAgICAgICAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcFNjYWxlLnJhbmdlKFtcclxuICAgICAgICAgICAgICAgICAgICAgIDAgKyAoeC5iYW5kd2lkdGgoKSAtIDMwMCkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgeC5iYW5kd2lkdGgoKSAtICh4LmJhbmR3aWR0aCgpIC0gMzAwKSAvIDIsXHJcbiAgICAgICAgICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2VcclxuICAgICAgICAgICAgICAgICAgdGVtcFNjYWxlLnJhbmdlKFtcclxuICAgICAgICAgICAgICAgICAgICAwICsgKHguYmFuZHdpZHRoKCkgLSAxMjUpIC8gMixcclxuICAgICAgICAgICAgICAgICAgICB4LmJhbmR3aWR0aCgpIC0gKHguYmFuZHdpZHRoKCkgLSAxMjUpIC8gMixcclxuICAgICAgICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIGlmIChtZXRhRGF0YS5oYXNEcmlsbERvd24pIHtcclxuICAgICAgICAgICAgaWYgKHRlbXBTY2FsZS5iYW5kd2lkdGgoKSArIGxlZnRBbmRSaWdodFNwYWNlcyAqIDIgPiAxODApIHtcclxuICAgICAgICAgICAgICByZXR1cm4gJzE4MHB4JztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gdGVtcFNjYWxlLmJhbmR3aWR0aCgpICsgbGVmdEFuZFJpZ2h0U3BhY2VzICogMjtcclxuICAgICAgICAgIH0gZWxzZSByZXR1cm4gdGVtcFNjYWxlLmJhbmR3aWR0aCgpICsgbGVmdEFuZFJpZ2h0U3BhY2VzICogMjtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5hdHRyKCdoZWlnaHQnLCA0MClcclxuICAgICAgICAuYXBwZW5kKCd4aHRtbDpkaXYnKVxyXG4gICAgICAgIC5hdHRyKCdjbGFzcycsICd0aXRsZScpXHJcbiAgICAgICAgLnN0eWxlKCd6LWluZGV4JywgOTkpXHJcbiAgICAgICAgLmh0bWwoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgLy8gU2hvdyB0aGUgeC1heGlzIGxhYmVsIChiYXIgbmFtZSkgZm9yIHRoaXMgYmFyLCBub3QgdGhlIGRhdGUgb3IgYW55IG90aGVyIHZhbHVlXHJcbiAgICAgICAgICBsZXQgYmFyTGFiZWwgPSBkLm5hbWU7IC8vIFRoaXMgaXMgdGhlIHgtYXhpcyBsYWJlbCBmb3IgdGhlIGJhclxyXG4gICAgICAgICAgbGV0IGRhdGFUeXBlID0gbWV0YURhdGEuZGF0YVR5cGUgPyBtZXRhRGF0YS5kYXRhVHlwZSA6ICcnO1xyXG4gICAgICAgICAgbGV0IHZhbHVlID0gZC52YWx1ZTtcclxuICAgICAgICAgIGxldCBrZXkgPSBkLmtleTtcclxuICAgICAgICAgIC8vIFRvb2x0aXA6IHNob3cgeC1heGlzIGxhYmVsIGFuZCB2YWx1ZSwgYnV0IGRvIG5vdCBzaG93IGRhdGVcclxuICAgICAgICAgIGxldCBkZXNpcmVkVGV4dCA9XHJcbiAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cInRpdGxlLWJhci1uYW1lXCI+JyArIGJhckxhYmVsICsgJzwvc3Bhbj4nO1xyXG4gICAgICAgICAgZGVzaXJlZFRleHQgKz1cclxuICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwidGl0bGUtYmFyLXZhbHVlXCI+PHNwYW4+JyArXHJcbiAgICAgICAgICAgIHZhbHVlICtcclxuICAgICAgICAgICAgJzwvc3Bhbj4nICtcclxuICAgICAgICAgICAgZGF0YVR5cGUgK1xyXG4gICAgICAgICAgICAnPC9zcGFuPic7XHJcbiAgICAgICAgICByZXR1cm4gZGVzaXJlZFRleHQ7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBoYW5kbGVNb3VzZU91dChkLCBpKSB7XHJcbiAgICAgIGlmICghc2VsZi5jaGFydENvbmZpZ3VyYXRpb24uZGlzcGxheVRpdGxlT25Ub3ApIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgc3ZnLnNlbGVjdEFsbCgnLmxpYi12ZXJ0aWNhbHN0YWNrLXRpdGxlLW9udG9wJykucmVtb3ZlKCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIGRpc3BsYXkgZGF0YSB2YWx1ZXMgb24gbW91c2Ugb3ZlclxyXG4gICAgICogdXNlZCBieSBkYXNoYm9hcmQgY2hhcnRzXHJcbiAgICAgKi9cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24udGV4dHNPbkJhciA9PSB1bmRlZmluZWQgJiZcclxuICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uZGlzcGxheVRpdGxlT25Ub3AgPT0gdW5kZWZpbmVkXHJcbiAgICApIHtcclxuICAgICAgc3RhdGVcclxuICAgICAgICAuc2VsZWN0QWxsKCdyZWN0JylcclxuICAgICAgICAub24oJ21vdXNlb3V0JywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgIHN0YXRlLnNlbGVjdEFsbCgnLmJhcnN0ZXh0JykucmVtb3ZlKCk7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAub24oJ21vdXNlb3ZlcicsIGZ1bmN0aW9uIChkMSkge1xyXG4gICAgICAgICAgc3RhdGVcclxuICAgICAgICAgICAgLnNlbGVjdEFsbCgndGV4dCcpXHJcbiAgICAgICAgICAgIC5kYXRhKGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICAgICAgbGV0IG5ld0xpc3Q6IGFueSA9IFtdO1xyXG4gICAgICAgICAgICAgIHN1Ymdyb3Vwcy5tYXAoZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICBrZXkgIT09ICduYW1lJyAmJlxyXG4gICAgICAgICAgICAgICAgICBkMS5rZXkgPT0ga2V5ICYmXHJcbiAgICAgICAgICAgICAgICAgIGQxLnZhbHVlID09IGRba2V5XSAmJlxyXG4gICAgICAgICAgICAgICAgICBkMS5uYW1lID09IGQubmFtZVxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgIGxldCBvYmo6IGFueSA9IHsga2V5OiBrZXksIHZhbHVlOiBkW2tleV0sIG5hbWU6IGQubmFtZSB9O1xyXG4gICAgICAgICAgICAgICAgICBuZXdMaXN0LnB1c2gob2JqKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICByZXR1cm4gbmV3TGlzdDtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmVudGVyKClcclxuICAgICAgICAgICAgLmFwcGVuZCgndGV4dCcpXHJcbiAgICAgICAgICAgIC5hdHRyKCdmaWxsJywgJ3ZhcigtLWNoYXJ0LXRleHQtY29sb3IpJylcclxuICAgICAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2JhcnN0ZXh0JylcclxuICAgICAgICAgICAgLmF0dHIoJ3gnLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiB4U3ViZ3JvdXAoZC5rZXkpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuYXR0cigneScsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHkoZC52YWx1ZSk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5hdHRyKFxyXG4gICAgICAgICAgICAgICdzdHlsZScsXHJcbiAgICAgICAgICAgICAgJ2ZvbnQtc2l6ZTogJyArICcuODVlbScgKyAnOycgKyAnIGZvbnQtd2VpZ2h0OicgKyAnYm9sZCcgKyAnOydcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAuc3R5bGUoJ2ZpbGwnLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBtZXRhRGF0YS5jb2xvcnNbZC5rZXldO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuYXR0cihcclxuICAgICAgICAgICAgICAnd2lkdGgnLFxyXG4gICAgICAgICAgICAgIHNlbGYuaXNab29tZWRPdXQgPyB4U3ViZ3JvdXAuYmFuZHdpZHRoKCkgOiB4U3ViZ3JvdXAuYmFuZHdpZHRoKClcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAudGV4dChmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBkLnZhbHVlO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHN2Z1xyXG4gICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ3gyIGF4aXMyJylcclxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoMCwnICsgaGVpZ2h0ICsgJyknKVxyXG4gICAgICAuc3R5bGUoJ2NvbG9yJywgJ3ZhcigtLWNoYXJ0LWF4aXMtY29sb3IsICMwMDApJykgLy8gVXNlIENTUyB2YXJpYWJsZSBpbnN0ZWFkIG9mIGhhcmRjb2RlZCAjMDAwXHJcbiAgICAgIC5jYWxsKGQzLmF4aXNCb3R0b20oeFNjYWxlRnJvbU9yaWdpbikudGlja1NpemUoMCkpXHJcbiAgICAgIC5jYWxsKChnKSA9PiBnLnNlbGVjdCgnLmRvbWFpbicpLmF0dHIoJ2ZpbGwnLCAnbm9uZScpKTtcclxuICAgIHN2Zy5zZWxlY3RBbGwoJ2cueDIuYXhpczIgZy50aWNrIHRleHQnKS5zdHlsZSgnZGlzcGxheScsICdub25lJyk7XHJcbiAgICBzdmdcclxuICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICdsaWItc3RhY2tlZC15LWF4aXMtdGV4dCB5YXhpcy1kYXNoZWQnKVxyXG4gICAgICAuYXR0cignc3R5bGUnLCBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0N1c3RvbVRleHRTdHlsZXMpXHJcbiAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKDAsMCknKVxyXG4gICAgICAuY2FsbCh5KVxyXG4gICAgICAuc3R5bGUoJ2Rpc3BsYXknLCAnbm9uZScpO1xyXG4gICAgc3ZnWUF4aXNMZWZ0XHJcbiAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi15YXhpcy1sYWJlbHMtdGV4dHMtZHJpbGxkb3duIHlheGlzLWRhc2hlZCcpXHJcbiAgICAgIC5hdHRyKCdzdHlsZScsIHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnlBeGlzQ3VzdG9tVGV4dFN0eWxlcylcclxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoMCwwKScpXHJcbiAgICAgIC5jYWxsKFxyXG4gICAgICAgIGQzXHJcbiAgICAgICAgICAuYXhpc0xlZnQoeSlcclxuICAgICAgICAgIC50aWNrU2l6ZSgwKVxyXG4gICAgICAgICAgLnRpY2tzKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLm51bWJlck9mWVRpY2tzKVxyXG4gICAgICAgICAgLnRpY2tGb3JtYXQoZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkID0gc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ueUF4aXNMYWJlbEZvbWF0dGVyXHJcbiAgICAgICAgICAgICAgPyBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0xhYmVsRm9tYXR0ZXIoZClcclxuICAgICAgICAgICAgICA6IGQ7XHJcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXR0ZWQgPj0gMTAwMCA/IGZvcm1hdHRlZCAvIDEwMDAgKyAnaycgOiBmb3JtYXR0ZWQ7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICApXHJcbiAgICAgIC5jYWxsKChnKSA9PiB7XHJcbiAgICAgICAgLy8gU3R5bGUgdGhlIGRvbWFpbiBsaW5lIGZvciB0aGVtZSBzdXBwb3J0XHJcbiAgICAgICAgZy5zZWxlY3QoJy5kb21haW4nKVxyXG4gICAgICAgICAgLnN0eWxlKCdzdHJva2UnLCAndmFyKC0tY2hhcnQtZG9tYWluLWNvbG9yLCAjMDAwMDAwKScpXHJcbiAgICAgICAgICAuc3R5bGUoJ3N0cm9rZS13aWR0aCcsICcxcHgnKTtcclxuICAgICAgfSlcclxuICAgICAgLnNlbGVjdEFsbCgndGV4dCcpXHJcbiAgICAgIC5zdHlsZSgnZmlsbCcsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpO1xyXG4gICAgc3ZnWUF4aXNSaWdodFxyXG4gICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi15YXhpcy1sYWJlbHMtdGV4dHMtZHJpbGxkb3duIHlheGlzLWRhc2hlZCcpXHJcbiAgICAgIC5hdHRyKCdzdHlsZScsIHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnlBeGlzQ3VzdG9tVGV4dFN0eWxlcylcclxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoMCwwKScpXHJcbiAgICAgIC5jYWxsKHkpXHJcbiAgICAgIC5zdHlsZSgnZGlzcGxheScsICdub25lJyk7XHJcbiAgICAvKipcclxuICAgICAqIGhpZGUgeCBheGlzIGxhYmVsc1xyXG4gICAgICogY29uZmlnIGlzIHRoZXJlIGZvciBmdXR1cmUgdXNlXHJcbiAgICAgKiB1c2VkIGJ5IHdlZWtseSBjaGFydHNcclxuICAgICAqL1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1hheGlzTGFiZWxIaWRkZW4gIT0gdW5kZWZpbmVkICYmXHJcbiAgICAgIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzWGF4aXNMYWJlbEhpZGRlblxyXG4gICAgKSB7XHJcbiAgICAgIGQzLnNlbGVjdEFsbCgnZy5saWItbGluZS14LWF4aXMtdGV4dCA+IGcgPiB0ZXh0JykuYXR0cihcclxuICAgICAgICAnY2xhc3MnLFxyXG4gICAgICAgICdsaWItZGlzcGxheS1oaWRkZW4nXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIGhpZGUgeSBheGlzIGxhYmVsc1xyXG4gICAgICogdXNlZCBieSB3ZWVrbHkgY2hhcnRzXHJcbiAgICAgKi9cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNZYXhpc0xhYmVsSGlkZGVuICE9IHVuZGVmaW5lZCAmJlxyXG4gICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1lheGlzTGFiZWxIaWRkZW5cclxuICAgICkge1xyXG4gICAgICBkMy5zZWxlY3RBbGwoJy55YXhpcy1kYXNoZWQgPiBnID4gdGV4dCcpLmF0dHIoXHJcbiAgICAgICAgJ2NsYXNzJyxcclxuICAgICAgICAnbGliLWRpc3BsYXktaGlkZGVuJ1xyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBoaWRlIHkgYXhpcyBsYWJlbHNcclxuICAgICAqIGNvbmZpZyBpcyB0aGVyZSBmb3IgZnV0dXJlIHVzZVxyXG4gICAgICovXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzWWF4aXNIaWRkZW4gIT0gdW5kZWZpbmVkICYmXHJcbiAgICAgIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzWWF4aXNIaWRkZW5cclxuICAgICkge1xyXG4gICAgICBkMy5zZWxlY3RBbGwoJy55YXhpcy1kYXNoZWQnKS5hdHRyKCdjbGFzcycsICdsaWItZGlzcGxheS1oaWRkZW4nKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogZGFzaGVkIHkgYXhpc1xyXG4gICAgICogdXNlZCBieSB3ZWVrbHkgY2hhcnRzXHJcbiAgICAgKi9cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNZYXhpc0Rhc2hlZCAhPSB1bmRlZmluZWQgJiZcclxuICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNZYXhpc0Rhc2hlZFxyXG4gICAgKSB7XHJcbiAgICAgIGQzLnNlbGVjdEFsbCgnLnlheGlzLWRhc2hlZCcpXHJcbiAgICAgICAgLnN0eWxlKCdzdHJva2UtZGFzaGFycmF5JywgJzUgNScpXHJcbiAgICAgICAgLnN0eWxlKCdjb2xvcicsICd2YXIoLS1jaGFydC1heGlzLWNvbG9yLCAjOTk5OTk5KScpOyAvLyBVc2UgQ1NTIHZhcmlhYmxlXHJcbiAgICB9XHJcbiAgICBpZiAobGluZURhdGEgIT0gbnVsbCkge1xyXG4gICAgICBpZiAobGluZURhdGEgJiYgc2VsZi5jaGFydENvbmZpZ3VyYXRpb24uc2hvd0xpbmVDaGFydEF4aXMpIHtcclxuICAgICAgICBzdmdZQXhpc1JpZ2h0XHJcbiAgICAgICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgICAgIC5hdHRyKCdjbGFzcycsICdsaWItc3RhY2tlZC15LWF4aXMtdGV4dDEnKVxyXG4gICAgICAgICAgLmF0dHIoJ3N0eWxlJywgc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ueUF4aXNDdXN0b21UZXh0U3R5bGVzKVxyXG4gICAgICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoJyArIDAgKyAnLDApJylcclxuICAgICAgICAgIC5jYWxsKHlMaW5lQXhpcyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogdXNlZCB0byBkaXNwbGF5IHkgbGFiZWxcclxuICAgICAqL1xyXG5cclxuICAgIC8vIGlmICh0aGlzLmlzWm9vbWVkT3V0KSB7XHJcbiAgICAvLyAgIHN2Z1xyXG4gICAgLy8gICAgIC5zZWxlY3RBbGwoJy5saWIteGF4aXMtbGFiZWxzLXRleHRzLWRyaWxsZG93bicpXHJcbiAgICAvLyAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi1kaXNwbGF5LWhpZGRlbicpO1xyXG4gICAgLy8gfVxyXG5cclxuICAgIGlmICh0aGlzLmlzWm9vbWVkT3V0KSB7XHJcbiAgICAgIC8vIHN2Z1xyXG4gICAgICAvLyAgIC5zZWxlY3RBbGwoJy5saWIteGF4aXMtbGFiZWxzLXRleHRzLWRyaWxsZG93bicpXHJcbiAgICAgIC8vICAgLmF0dHIoJ3RyYW5zZm9ybScsICdyb3RhdGUoLTMwKScpXHJcbiAgICAgIC8vICAgLmF0dHIoJ3RleHQtYW5jaG9yJywgJ2VuZCcpXHJcbiAgICAgIC8vICAgLmF0dHIoJ3gnLCAnLTUnKVxyXG4gICAgICAvLyAgIC5hdHRyKCdkeScsIG51bGwpXHJcbiAgICAgIC8vICAgLnN0eWxlKCdmaWxsJywgJ3ZhcigtLWNoYXJ0LXRleHQtY29sb3IpJyk7XHJcbiAgICAgIHN2Z1xyXG4gICAgICAgIC5zZWxlY3RBbGwoJy5saWIteGF4aXMtbGFiZWxzLXRleHRzLWRyaWxsZG93bicpXHJcbiAgICAgICAgLmVhY2goKGQsIGksIG5vZGVzKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCB0ZXh0ID0gZDMuc2VsZWN0KG5vZGVzW2ldKTtcclxuICAgICAgICAgIGNvbnN0IGxhYmVsID0gdGV4dC50ZXh0KCk7XHJcbiAgICAgICAgICBjb25zdCB3b3JkcyA9IGxhYmVsLnNwbGl0KCcgJyk7XHJcblxyXG4gICAgICAgICAgdGV4dC50ZXh0KG51bGwpOyAvLyBDbGVhciBjdXJyZW50IHRleHRcclxuXHJcbiAgICAgICAgICAvLyBBZGQgZWFjaCB3b3JkIHRvIGEgbmV3IHRzcGFuXHJcbiAgICAgICAgICB3b3Jkcy5mb3JFYWNoKCh3b3JkLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICB0ZXh0LmFwcGVuZCgndHNwYW4nKS50ZXh0KHdvcmQpO1xyXG4gICAgICAgICAgICAvLyAuYXR0cigneCcsICcxNScpXHJcbiAgICAgICAgICAgIC8vIC5hdHRyKCdkeScsIGluZGV4ID09PSAwID8gJzBlbScgOiAnMC45ZW0nKSAvLyBSZWR1Y2VkIHZlcnRpY2FsIHNwYWNpbmdcclxuICAgICAgICAgICAgLy8gLmF0dHIoJ3RleHQtYW5jaG9yJywgJ2VuZCcpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuc3R5bGUoJ2ZpbGwnLCAndmFyKC0tY2hhcnQtdGV4dC1jb2xvciknKVxyXG4gICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBudWxsKTsgLy8gUmVtb3ZlIHJvdGF0ZSBpZiB1c2luZyBsaW5lIGJyZWFrc1xyXG5cclxuICAgICAgLy8gT3B0aW9uYWw6IEFkanVzdCBib3R0b20gbWFyZ2luIG9yIGNoYXJ0IGxheW91dFxyXG4gICAgICBzdmdcclxuICAgICAgICAuc2VsZWN0KCcueC1heGlzJylcclxuICAgICAgICAuYXR0cigndHJhbnNmb3JtJywgYHRyYW5zbGF0ZSgwLCAke2hlaWdodCAtIG1hcmdpbi5ib3R0b20gKyAxMH0pYCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiB1c2VkIHRvIHdyaXRlIHkgbGFiZWxzIGJhc2VkIG9uIGNvbmZpZ3VyYXRpb25cclxuICAgICAqL1xyXG5pZiAobWV0YURhdGEueUxhYmVsKSB7XHJcbiAgY29uc3QgeVBvc2l0aW9uID0gaXNyaWEgPyAwIC0gbWFyZ2luLmxlZnQgLyAyIC0gMzAgOiAwIC0gbWFyZ2luLmxlZnQgLyAyIC0gNDA7XHJcblxyXG4gIHN2Z1lBeGlzTGVmdFxyXG4gICAgLmFwcGVuZCgndGV4dCcpXHJcbiAgICAuYXR0cignY2xhc3MnLCAnbGliLWF4aXMtZ3JvdXAtbGFiZWwgZm9udC1zaXplLTEnKVxyXG4gICAgLmF0dHIoJ3N0eWxlJywgc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ueUF4aXNDdXN0b21sYWJlbFN0eWxlcylcclxuICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAncm90YXRlKC05MCknKVxyXG4gICAgLmF0dHIoJ3knLCB5UG9zaXRpb24pXHJcbiAgICAuYXR0cigneCcsIDAgLSBoZWlnaHQgLyAyKVxyXG4gICAgLmF0dHIoJ2R5JywgJzFlbScpXHJcbiAgICAuc3R5bGUoJ3RleHQtYW5jaG9yJywgJ21pZGRsZScpXHJcbiAgICAuYXR0cignZmlsbCcsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpO1xyXG5cclxuICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNNdWx0aUNoYXJ0R3JpZExpbmUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgc3ZnWUF4aXNMZWZ0XHJcbiAgICAgIC5zZWxlY3RBbGwoJy5saWItYXhpcy1ncm91cC1sYWJlbCcpXHJcbiAgICAgIC5zdHlsZSgnZm9udC1zaXplJywgJ3NtYWxsZXInKVxyXG4gICAgICAudGV4dChtZXRhRGF0YS55TGFiZWwpO1xyXG4gIH0gZWxzZSB7XHJcbiAgICBzdmdcclxuICAgICAgLnNlbGVjdEFsbCgnLmxpYi1heGlzLWdyb3VwLWxhYmVsJylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi15bGFiZWwtd2Vla2x5Q2hhcnRzJylcclxuICAgICAgLnRleHQobWV0YURhdGEueUxhYmVsLnRvTG93ZXJDYXNlKCkpO1xyXG4gIH1cclxufVxyXG5cclxuICAgIGlmICh0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YSkge1xyXG4gICAgICBjb25zdCB5WmVybyA9IHkodGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEudGFyZ2V0KTtcclxuICAgICAgc3ZnXHJcbiAgICAgICAgLmFwcGVuZCgnbGluZScpXHJcbiAgICAgICAgLmF0dHIoJ3gxJywgMClcclxuICAgICAgICAuYXR0cigneDInLCB3aWR0aClcclxuICAgICAgICAuYXR0cigneTEnLCB5WmVybylcclxuICAgICAgICAuYXR0cigneTInLCB5WmVybylcclxuICAgICAgICAuc3R5bGUoJ3N0cm9rZS1kYXNoYXJyYXknLCAnNSA1JylcclxuICAgICAgICAuc3R5bGUoJ3N0cm9rZScsIHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLmNvbG9yKTtcclxuICAgICAgLy8gc3ZnWUF4aXNSaWdodFxyXG4gICAgICAvLyAgIC5hcHBlbmQoJ2xpbmUnKVxyXG4gICAgICAvLyAgIC5hdHRyKCd4MScsIDApXHJcbiAgICAgIC8vICAgLmF0dHIoJ3gyJywgcmlnaHRTdmdXaWR0aClcclxuICAgICAgLy8gICAuYXR0cigneTEnLCB5WmVybylcclxuICAgICAgLy8gICAuYXR0cigneTInLCB5WmVybylcclxuICAgICAgLy8gICAuc3R5bGUoJ3N0cm9rZScsIHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLmNvbG9yKTtcclxuICAgICAgc3ZnWUF4aXNSaWdodFxyXG4gICAgICAgIC5hcHBlbmQoJ2ZvcmVpZ25PYmplY3QnKVxyXG4gICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKCcgKyAwICsgJywnICsgKHlaZXJvIC0gMzApICsgJyknKVxyXG4gICAgICAgIC5hdHRyKCd3aWR0aCcsIHJpZ2h0U3ZnV2lkdGgpXHJcbiAgICAgICAgLmF0dHIoJ2hlaWdodCcsIDUwKVxyXG4gICAgICAgIC5hcHBlbmQoJ3hodG1sOmRpdicpXHJcbiAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ3RhcmdldC1kaXNwbGF5JylcclxuICAgICAgICAuc3R5bGUoJ2NvbG9yJywgJ3ZhcigtLWNoYXJ0LXRleHQtY29sb3IpJylcclxuICAgICAgICAuaHRtbChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICBsZXQgZGF0YVR5cGVUZW1wID0gJyc7XHJcbiAgICAgICAgICBsZXQgdGFyZ2V0TGluZU5hbWUgPSAndGFyZ2V0JztcclxuICAgICAgICAgIGlmIChtZXRhRGF0YS5kYXRhVHlwZSkge1xyXG4gICAgICAgICAgICBkYXRhVHlwZVRlbXAgPSBtZXRhRGF0YS5kYXRhVHlwZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgc2VsZi5jaGFydERhdGEudGFyZ2V0TGluZURhdGEgJiZcclxuICAgICAgICAgICAgc2VsZi5jaGFydERhdGEudGFyZ2V0TGluZURhdGEudGFyZ2V0TmFtZVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHRhcmdldExpbmVOYW1lID0gc2VsZi5jaGFydERhdGEudGFyZ2V0TGluZURhdGEudGFyZ2V0TmFtZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIGA8ZGl2PiR7dGFyZ2V0TGluZU5hbWV9PC9kaXY+YCArXHJcbiAgICAgICAgICAgICc8ZGl2PicgK1xyXG4gICAgICAgICAgICBzZWxmLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXQgK1xyXG4gICAgICAgICAgICAnJyArXHJcbiAgICAgICAgICAgIGRhdGFUeXBlVGVtcCArXHJcbiAgICAgICAgICAgICc8L2Rpdj4nXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzRHJpbGxkb3duQ2hhcnQpIHtcclxuICAgICAgLyoqXHJcbiAgICAgICAqIHVzZWQgYnkgZHJpbGxkb3duIGNoYXJ0c1xyXG4gICAgICAgKi9cclxuICAgICAgLy8gc3ZnXHJcbiAgICAgIC8vICAgLnNlbGVjdEFsbCgnLmxpYi1heGlzLWdyb3VwLWxhYmVsJylcclxuICAgICAgLy8gICAuYXR0cignY2xhc3MnLCAnbGliLXlsYWJlbC1kcmlsbGRvd25jaGFydHMnKVxyXG4gICAgICAvLyAgIC50ZXh0KG1ldGFEYXRhLnlMYWJlbC50b0xvd2VyQ2FzZSgpKTtcclxuICAgICAgc3ZnLnNlbGVjdEFsbCgnZy54MS5heGlzMSBnLnRpY2sgbGluZScpLnN0eWxlKCdkaXNwbGF5JywgJ25vbmUnKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAobWV0YURhdGEueExhYmVsKSB7XHJcbiAgICAgIGZ1bmN0aW9uIGlzQWNyb255bShsYWJlbCkge1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAobGFiZWwubGVuZ3RoIDw9IDQgJiYgL15bQS1aXSskLy50ZXN0KGxhYmVsKSkgfHxcclxuICAgICAgICAgIChsYWJlbCA9PT0gbGFiZWwudG9VcHBlckNhc2UoKSAmJiAvW0EtWl0vLnRlc3QobGFiZWwpKVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgeExhYmVsVGV4dCA9IG1ldGFEYXRhLnhMYWJlbDtcclxuICAgICAgY29uc3QgaXNBY3IgPSBpc0Fjcm9ueW0oeExhYmVsVGV4dC5yZXBsYWNlKC9bXkEtWmEtel0vZywgJycpKTtcclxuXHJcbiAgICAgICAgY29uc3QgeFBvc2l0aW9uID0gaXNyaWEgPyAoaGVpZ2h0ICsgbWFyZ2luLnRvcCArIG1hcmdpbi5ib3R0b20pIDogKGhlaWdodCArIG1hcmdpbi50b3AgKyBtYXJnaW4uYm90dG9tICsgMTApO1xyXG5cclxuICAgICAgc3ZnXHJcbiAgICAgICAgLmFwcGVuZCgndGV4dCcpXHJcbiAgICAgICAgLmF0dHIoJ2NsYXNzJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgbGV0IGJhc2VDbGFzcyA9ICdsaWItYXhpcy1ncm91cC1sYWJlbCBmb250LXNpemUtMSc7XHJcbiAgICAgICAgICBpZiAoc2VsZi5jaGFydENvbmZpZ3VyYXRpb24uaXNEcmlsbGRvd25DaGFydClcclxuICAgICAgICAgICAgcmV0dXJuIGJhc2VDbGFzcyArICcgbGliLXhsYWJlbC1kcmlsbGRvd25jaGFydHMnO1xyXG4gICAgICAgICAgaWYgKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmlzTXVsdGlDaGFydEdyaWRMaW5lICE9IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgcmV0dXJuIGJhc2VDbGFzcyArICcgbGliLXhsYWJlbC13ZWVrbHlDaGFydHMnO1xyXG4gICAgICAgICAgcmV0dXJuIGJhc2VDbGFzcyArICcgbGliLWF4aXMtd2F0ZXJmYWxsLWxhYmVsJztcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5hdHRyKCdzdHlsZScsIHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnhBeGlzQ3VzdG9tbGFiZWxTdHlsZXMpXHJcbiAgICAgICAgLmF0dHIoXHJcbiAgICAgICAgICAndHJhbnNmb3JtJyxcclxuICAgICAgICAgICd0cmFuc2xhdGUoJyArIHdpZHRoIC8gMiArICcgLCcgKyB4UG9zaXRpb24gKyAnKSdcclxuICAgICAgICApXHJcbiAgICAgICAgLnN0eWxlKCd0ZXh0LWFuY2hvcicsICdtaWRkbGUnKVxyXG4gICAgICAgIC5zdHlsZSgnZmlsbCcsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpXHJcbiAgICAgICAgLnRleHQoaXNBY3IgPyB4TGFiZWxUZXh0LnRvVXBwZXJDYXNlKCkgOiB4TGFiZWxUZXh0LnRvTG93ZXJDYXNlKCkpXHJcbiAgICAgICAgLnN0eWxlKCd0ZXh0LXRyYW5zZm9ybScsIGlzQWNyID8gJ25vbmUnIDogJ2NhcGl0YWxpemUnKTtcclxuICAgIH1cclxuICAgIGlmIChtZXRhRGF0YS5saW5leUxhYmVsKSB7XHJcbiAgICAgIHN2Z1lBeGlzUmlnaHRcclxuICAgICAgICAuYXBwZW5kKCd0ZXh0JylcclxuICAgICAgICAuYXR0cignY2xhc3MnLCAnbGliLWF4aXMtZ3JvdXAtbGFiZWwgbGliLWxpbmUtYXhpcycpXHJcbiAgICAgICAgLmF0dHIoJ2ZpbGwnLCAndmFyKC0tY2hhcnQtdGV4dC1jb2xvciknKVxyXG4gICAgICAgIC5hdHRyKCdzdHlsZScsIHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnlBeGlzQ3VzdG9tbGFiZWxTdHlsZXMpXHJcbiAgICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoMCwwKSByb3RhdGUoOTApJylcclxuICAgICAgICAuYXR0cigneScsIDAgLSAxMDApXHJcbiAgICAgICAgLmF0dHIoJ3gnLCAwICsgMTAwKVxyXG4gICAgICAgIC5hdHRyKCdkeScsICc1ZW0nKVxyXG4gICAgICAgIC5zdHlsZSgndGV4dC1hbmNob3InLCAnbWlkZGxlJylcclxuICAgICAgICAuc3R5bGUoJ2ZvbnQtc2l6ZScsICdzbWFsbGVyJylcclxuICAgICAgICAudGV4dChtZXRhRGF0YS5saW5leUxhYmVsKTtcclxuICAgIH1cclxuICAgIGlmIChsaW5lRGF0YSkge1xyXG4gICAgICBzdmdcclxuICAgICAgICAuYXBwZW5kKCdwYXRoJylcclxuICAgICAgICAuZGF0dW0obGluZURhdGEpXHJcbiAgICAgICAgLmF0dHIoJ2ZpbGwnLCAnbm9uZScpXHJcbiAgICAgICAgLmF0dHIoJ3N0cm9rZScsIHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmxpbmVHcmFwaENvbG9yKVxyXG4gICAgICAgIC5hdHRyKCdzdHJva2Utd2lkdGgnLCAxLjUpXHJcbiAgICAgICAgLmF0dHIoXHJcbiAgICAgICAgICAnZCcsXHJcbiAgICAgICAgICBkM1xyXG4gICAgICAgICAgICAubGluZSgpXHJcbiAgICAgICAgICAgIC54KGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHgoZC5uYW1lKSArIHguYmFuZHdpZHRoKCkgLyAyO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAueShmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBsaW5lWXNjYWxlKGQudmFsdWUpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICB2YXIgZG90ID0gc3ZnXHJcbiAgICAgICAgLnNlbGVjdEFsbCgnbXlDaXJjbGVzJylcclxuICAgICAgICAuZGF0YShsaW5lRGF0YSlcclxuICAgICAgICAuZW50ZXIoKVxyXG4gICAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAgIC5vbignY2xpY2snLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAhbWV0YURhdGEuYmFyV2l0aG91dENsaWNrIHx8XHJcbiAgICAgICAgICAgICFtZXRhRGF0YS5iYXJXaXRob3V0Q2xpY2subGVuZ3RoIHx8XHJcbiAgICAgICAgICAgICghbWV0YURhdGEuYmFyV2l0aG91dENsaWNrLmluY2x1ZGVzKGQ/Lm5hbWUpICYmXHJcbiAgICAgICAgICAgICAgIW1ldGFEYXRhLmJhcldpdGhvdXRDbGljay5pbmNsdWRlcyhkPy5rZXkpKVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgICBzZWxmLmhhbmRsZUNsaWNrKGQpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgZG90XHJcbiAgICAgICAgLmFwcGVuZCgnY2lyY2xlJylcclxuICAgICAgICAuYXR0cignZmlsbCcsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICByZXR1cm4gc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ubGluZUdyYXBoQ29sb3I7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuYXR0cignc3Ryb2tlJywgJ25vbmUnKVxyXG4gICAgICAgIC5hdHRyKCdjeCcsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICByZXR1cm4geChkLm5hbWUpICsgeC5iYW5kd2lkdGgoKSAvIDI7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuYXR0cignY3knLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgcmV0dXJuIGxpbmVZc2NhbGUoZC52YWx1ZSk7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuc3R5bGUoJ2N1cnNvcicsICgpID0+XHJcbiAgICAgICAgICBzZWxmLmNoYXJ0RGF0YS5tZXRhRGF0YS5oYXNEcmlsbERvd24gPyAncG9pbnRlcicgOiAnZGVmYXVsdCdcclxuICAgICAgICApXHJcbiAgICAgICAgLmF0dHIoJ3InLCAzKTtcclxuXHJcbiAgICAgIGlmIChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5saW5lR3JhcGhDb2xvcikge1xyXG4gICAgICAgIGRvdFxyXG4gICAgICAgICAgLmFwcGVuZCgndGV4dCcpXHJcbiAgICAgICAgICAuYXR0cignY2xhc3MnLCAnZG90JylcclxuICAgICAgICAgIC5hdHRyKCdmaWxsJywgJ3ZhcigtLWNoYXJ0LXRleHQtY29sb3IpJylcclxuICAgICAgICAgIC5hdHRyKCdjb2xvcicsIHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmxpbmVHcmFwaENvbG9yKVxyXG4gICAgICAgICAgLmF0dHIoJ3N0eWxlJywgJ2ZvbnQtc2l6ZTogJyArICcuODVlbScpXHJcbiAgICAgICAgICAuYXR0cigneCcsIGZ1bmN0aW9uIChkLCBpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB4KGQubmFtZSkgKyB4LmJhbmR3aWR0aCgpIC8gMjtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAuYXR0cigneScsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBsaW5lWXNjYWxlKGQudmFsdWUpO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC5hdHRyKCdkeScsICctMWVtJylcclxuICAgICAgICAgIC50ZXh0KGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5sYWJlbEZvcm1hdHRlcihkLnZhbHVlKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoYW5kbGVDbGljayhkOiBhbnkpIHtcclxuICAgIGlmICh0aGlzLmNoYXJ0RGF0YS5tZXRhRGF0YS5oYXNEcmlsbERvd24gfHwgZD8udG9nZ2xlRnJvbSlcclxuICAgICAgdGhpcy5jbGlja0V2ZW50LmVtaXQoZCk7XHJcbiAgfVxyXG4gIGhhbmRsZUhlYWRlck1lbnVDbGljayhpZCkge1xyXG4gICAgdGhpcy5oZWFkZXJNZW51Y2xpY2tFdmVudC5lbWl0KGlkKTtcclxuICB9XHJcbiAgaGFuZGxlREQxQ2xpY2soZXZlbnQpIHtcclxuICAgIHRoaXMuaXNERDFPcGVuID0gdHJ1ZTtcclxuICAgIHRoaXMuaXNERDJPcGVuID0gZmFsc2U7XHJcbiAgfVxyXG4gIGhhbmRsZUREMkNsaWNrKGV2ZW50KSB7XHJcbiAgICB0aGlzLmlzREQyT3BlbiA9IHRydWU7XHJcbiAgICB0aGlzLmlzREQxT3BlbiA9IGZhbHNlO1xyXG4gIH1cclxuICBoYW5kbGVDb21wYXJlQnlGaWx0ZXJTZWxlY3Rpb24oZXZlbnQpIHtcclxuICAgIHRoaXMuY2xpY2tFdmVudC5lbWl0KGV2ZW50KTtcclxuICB9XHJcbn1cclxuIiwiPGRpdlxyXG4gICNncm91cGNvbnRhaW5lclxyXG4gIGNsYXNzPVwibGliLWNoYXJ0LXdyYXBwZXJcIlxyXG4gIFtuZ0NsYXNzXT1cInsgJ2xpYi1uby1iYWNrZ3JvdW5kJzogaXNUcmFuc3BhcmVudEJhY2tncm91bmQgfVwiXHJcbiAgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jYXJkLWJnKTtcIlxyXG4gIChyZXNpemVkKT1cIm9uUmVzaXplZCgkZXZlbnQpXCJcclxuPlxyXG4gIDxkaXYgY2xhc3M9XCJoZWFkZXItYWx0XCIgKm5nSWY9XCIhaXNIZWFkZXJWaXNpYmxlXCI+XHJcbiAgICA8bGliLWNoYXJ0LWhlYWRlci12MlxyXG4gICAgICBbY2hhcnREYXRhXT1cImNoYXJ0RGF0YVwiXHJcbiAgICAgIFtjaGFydENvbmZpZ3VyYXRpb25dPVwiY2hhcnRDb25maWd1cmF0aW9uXCJcclxuICAgICAgKGNsaWNrRXZlbnQpPVwiaGFuZGxlQ2xpY2soJGV2ZW50KVwiXHJcbiAgICA+PC9saWItY2hhcnQtaGVhZGVyLXYyPlxyXG4gICAgPGxpYi1jaGFydC1oZWFkZXItdjNcclxuICAgICAgW2NoYXJ0RGF0YV09XCJjaGFydERhdGFcIlxyXG4gICAgICBbY2hhcnRDb25maWd1cmF0aW9uXT1cImNoYXJ0Q29uZmlndXJhdGlvblwiXHJcbiAgICAgIChjb21wYXJlQnlGaWx0ZXJTZWxlY3Rpb24pPVwiaGFuZGxlQ29tcGFyZUJ5RmlsdGVyU2VsZWN0aW9uKCRldmVudClcIlxyXG4gICAgICAoem9vbUluWm9vbU91dENsaWNrKT1cImhhbmRsZVpvb21pblpvb21vdXRDbGljaygkZXZlbnQpXCJcclxuICAgID48L2xpYi1jaGFydC1oZWFkZXItdjM+XHJcbiAgPC9kaXY+XHJcbiAgPGxpYi1jaGFydC1oZWFkZXItdjFcclxuICAgIFt0aXRsZV09XCJjaGFydERhdGEubWV0YURhdGEudGl0bGVcIlxyXG4gICAgW2hhc0RyaWxsRG93bl09XCJjaGFydERhdGEubWV0YURhdGEuaGFzRHJpbGxEb3duXCJcclxuICAgIFtpc0VkaXRFbmFibGVkXT1cImNoYXJ0RGF0YS5tZXRhRGF0YS5pc0VkaXRFbmFibGVkXCJcclxuICAgIFttZW51T3B0aW9uc109XCJjaGFydENvbmZpZ3VyYXRpb24uaGVhZGVyTWVudU9wdGlvbnNcIlxyXG4gICAgW2lzcmlhXT1cImN1c3RvbUNoYXJ0Q29uZmlndXJhdGlvbi5pc1JpYVwiXHJcbiAgICBbc2VsZWN0ZWRLcGlUb29sdG9wXT1cImNoYXJ0Q29uZmlndXJhdGlvbi5zZWxlY3RlZEtwaVRvb2x0b3BcIlxyXG4gICAgKG1lbnVPcHRpb25DbGlja0V2ZW50KT1cImhhbmRsZUhlYWRlck1lbnVDbGljaygkZXZlbnQpXCJcclxuICAgIFtpc0FsZXJ0RW5hYmxlZF09XCJpc0FsZXJ0RW5hYmxlZFwiXHJcbiAgICAqbmdJZj1cImlzSGVhZGVyVmlzaWJsZVwiXHJcbiAgPjwvbGliLWNoYXJ0LWhlYWRlci12MT5cclxuICA8ZGl2XHJcbiAgICAqbmdJZj1cIlxyXG4gICAgICBjaGFydERhdGEgJiZcclxuICAgICAgY2hhcnREYXRhLm1ldGFEYXRhICYmXHJcbiAgICAgIGNoYXJ0Q29uZmlndXJhdGlvbi5sZWdlbmRKdXN0aWZpZWQgJiZcclxuICAgICAgbGVnZW5kVmlzaWJsZSAmJlxyXG4gICAgICBjaGFydENvbmZpZ3VyYXRpb24ubGVnZW5kQXRUb3BSaWdodFxyXG4gICAgXCJcclxuICAgIGNsYXNzPVwibGVnZW5kLWhvbGRlci1yaWdodFwiXHJcbiAgICBbc3R5bGUuaGVpZ2h0XT1cImNoYXJ0Q29uZmlndXJhdGlvbi5mb290ZXJIZWlnaHRcIlxyXG4gID5cclxuICAgIDx1bCBjbGFzcz1cImRpc3BsYXktZmxleFwiPlxyXG4gICAgICA8bGlcclxuICAgICAgICBjbGFzcz1cImxlZ2VuZHMtcG9zaXRpb25pbmctaW5saW5lXCJcclxuICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBjaGFydERhdGEubWV0YURhdGEuY29sb3JzIHwga2V5dmFsdWUgOiBrZWVwT3JkZXJcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPHNwYW5cclxuICAgICAgICAgIGNsYXNzPVwibGliLWRvbnV0LWp1c3RpZmllZC1sYWJlbC1pY29uLWRyaWxsZG93blwiXHJcbiAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJpdGVtLnZhbHVlXCJcclxuICAgICAgICA+PC9zcGFuXHJcbiAgICAgICAgPjxzcGFuPnt7IGl0ZW0ua2V5IH19PC9zcGFuPlxyXG4gICAgICA8L2xpPlxyXG4gICAgPC91bD5cclxuICA8L2Rpdj5cclxuICA8ZGl2XHJcbiAgICBbc3R5bGUuaGVpZ2h0XT1cImNoYXJ0Q29uZmlndXJhdGlvbi5zdmdIZWlnaHRcIlxyXG4gICAgaWQ9XCJncm91cGNoYXJ0Y29udGFpbmVyXCJcclxuICAgICNncm91cGNoYXJ0Y29udGFpbmVyXHJcbiAgICBjbGFzcz1cImxpYi1jaGFydC1zdmdcIlxyXG4gID48L2Rpdj5cclxuXHJcblxyXG4gIDwhLS0gPGRpdlxyXG4gICAgKm5nSWY9XCJcclxuICAgICAgY2hhcnREYXRhICYmXHJcbiAgICAgIGNoYXJ0RGF0YS5tZXRhRGF0YSAmJlxyXG4gICAgICBjaGFydENvbmZpZ3VyYXRpb24ubGVnZW5kSnVzdGlmaWVkICYmXHJcbiAgICAgIGxlZ2VuZFZpc2libGUgJiZcclxuICAgICAgIWNoYXJ0Q29uZmlndXJhdGlvbi5sZWdlbmRBdFRvcFJpZ2h0XHJcbiAgICBcIlxyXG4gICAgY2xhc3M9XCJsaWItZG9udXQtY2hhcnQtZm9vdGVyXCJcclxuICAgIFtzdHlsZS5oZWlnaHRdPVwiY2hhcnRDb25maWd1cmF0aW9uLmZvb3RlckhlaWdodFwiXHJcbiAgPlxyXG4gICAgPHVsIGNsYXNzPVwibGliLWRvbnV0LWp1c3RpZmllZC1sYWJlbC13cmFwcGVyXCI+XHJcbiAgICAgIDxsaVxyXG4gICAgICAgIGNsYXNzPVwibGliLWRvbnV0LWp1c3RpZmllZC1sYWJlbC1pdGVtXCJcclxuICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBjaGFydERhdGEubWV0YURhdGEuY29sb3JzIHwga2V5dmFsdWVcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPHNwYW5cclxuICAgICAgICAgIGNsYXNzPVwibGliLWRvbnV0LWp1c3RpZmllZC1sYWJlbC1pY29uXCJcclxuICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cIml0ZW0udmFsdWVcIlxyXG4gICAgICAgID48L3NwYW5cclxuICAgICAgICA+PHNwYW4+e3sgaXRlbS5rZXkgfX08L3NwYW4+XHJcbiAgICAgIDwvbGk+XHJcbiAgICA8L3VsPlxyXG4gIDwvZGl2PiAtLT5cclxuXHJcblxyXG4gIDwhLS0gPGRpdiAqbmdJZj1cImNoYXJ0Q29uZmlndXJhdGlvbj8uaXNEaXNwbGF5QmFyRGV0YWlsc0F0Qm90dG9tXCI+XHJcbiAgICA8ZGl2XHJcbiAgICAgIGNsYXNzPVwiYmFyLXZhbHVlcyBsaWItZGlzcGxheS1mbGV4IGxpYi1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGxpYi1hbGlnbi1pdGVtcy1jZW50ZXJcIlxyXG4gICAgICAqbmdGb3I9XCJcclxuICAgICAgICBsZXQgaXRlbSBvZiBjaGFydERhdGEubWV0YURhdGEuY29sb3JzIHwga2V5dmFsdWUgOiBrZWVwT3JkZXI7XHJcbiAgICAgICAgbGV0IGkgPSBpbmRleFxyXG4gICAgICBcIj5cclxuICAgICAgPGRpdlxyXG4gICAgICAgIGNsYXNzPVwiYmFyLW5hbWUgZm9udC1zaXplLTFcIlxyXG4gICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICBjaGFydERhdGEuZGF0YVswXVtpdGVtLmtleV0gJiZcclxuICAgICAgICAgIGkgPD0gY2hhcnRDb25maWd1cmF0aW9uLmhvd21hbnlCYXJEZXRhaWxzVG9EaXNwbGF5XHJcbiAgICAgICAgXCJcclxuICAgICAgPlxyXG4gICAgICAgIHt7IGl0ZW0ua2V5IH19XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgY2xhc3M9XCJiYXItdmFsdWUgbGliLWRpc3BsYXktZmxleCBsaWItYWxpZ24taXRlbXMtY2VudGVyIGZvbnQtc2l6ZS0xXCJcclxuICAgICAgICBbc3R5bGUuY29sb3JdPVwiXHJcbiAgICAgICAgICBjaGFydENvbmZpZ3VyYXRpb24uYmFyVmF1bGVDb2xvciA/IGJhclZhdWxlQ29sb3IgOiBpdGVtLnZhbHVlXHJcbiAgICAgICAgXCJcclxuICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgY2hhcnREYXRhLmRhdGFbMF1baXRlbS5rZXldICYmXHJcbiAgICAgICAgICBpIDw9IGNoYXJ0Q29uZmlndXJhdGlvbi5ob3dtYW55QmFyRGV0YWlsc1RvRGlzcGxheVxyXG4gICAgICAgIFwiXHJcbiAgICAgID5cclxuICAgICAgICB7eyBjaGFydERhdGEuZGF0YVswXVtpdGVtLmtleV0gfX1cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj4gLS0+XHJcbjwvZGl2PlxyXG4iXX0=
|
|
1372
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9yaXpvbnRhbC1ncm91cGVkLWJhci13aXRoLXNjcm9sbC16b29tLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2F4aWRpby1zdHlsZWd1aWRlLWxpYnJhcnkvc3JjL2xpYi9ob3Jpem9udGFsLWdyb3VwZWQtYmFyLXdpdGgtc2Nyb2xsLXpvb20vaG9yaXpvbnRhbC1ncm91cGVkLWJhci13aXRoLXNjcm9sbC16b29tLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2F4aWRpby1zdHlsZWd1aWRlLWxpYnJhcnkvc3JjL2xpYi9ob3Jpem9udGFsLWdyb3VwZWQtYmFyLXdpdGgtc2Nyb2xsLXpvb20vaG9yaXpvbnRhbC1ncm91cGVkLWJhci13aXRoLXNjcm9sbC16b29tLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsU0FBUyxFQUVULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUNaLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDakQsT0FBTyxXQUFXLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFFekIsT0FBTyxrQkFBa0IsTUFBTSxrQkFBa0IsQ0FBQzs7Ozs7OztBQVdsRCxNQUFNLE9BQU8sMkNBQ1gsU0FBUSxpQkFBaUI7SUF5RXpCO1FBQ0UsS0FBSyxFQUFFLENBQUM7UUEvREEsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDckMseUJBQW9CLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUN6RCxvQkFBZSxHQUFZLElBQUksQ0FBQztRQUNoQyxrQkFBYSxHQUFZLElBQUksQ0FBQztRQUM5Qiw0QkFBdUIsR0FBWSxLQUFLLENBQUM7UUFD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QVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUNELHFCQUFxQixDQUFDLEVBQUU7UUFDdEIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBQ0QsY0FBYyxDQUFDLEtBQUs7UUFDbEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDdEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDekIsQ0FBQztJQUNELGNBQWMsQ0FBQyxLQUFLO1FBQ2xCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0lBQ3pCLENBQUM7SUFDRCw4QkFBOEIsQ0FBQyxLQUFLO1FBQ2xDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlCLENBQUM7K0dBdjhDVSwyQ0FBMkM7bUdBQTNDLDJDQUEyQyxnaEJDekJ4RCxrN0hBd0hBOzs0RkQvRmEsMkNBQTJDO2tCQVR2RCxTQUFTOytCQUNFLDZDQUE2QyxpQkFNeEMsaUJBQWlCLENBQUMsSUFBSTt3REFPckMsWUFBWTtzQkFEWCxTQUFTO3VCQUFDLHFCQUFxQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFJbEQsaUJBQWlCO3NCQURoQixTQUFTO3VCQUFDLGdCQUFnQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFHcEMsU0FBUztzQkFBakIsS0FBSztnQkFDRyx3QkFBd0I7c0JBQWhDLEtBQUs7Z0JBQ0ksVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxvQkFBb0I7c0JBQTdCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBPbkluaXQsXHJcbiAgVmlld0NoaWxkLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgSW5wdXQsXHJcbiAgT3V0cHV0LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBWaWV3RW5jYXBzdWxhdGlvbixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tcG9uZW50VW5pcXVlSWQgfSBmcm9tICcuLi91bmlxdWUtaWQnO1xyXG5pbXBvcnQgQ2hhcnRIZWxwZXIgZnJvbSAnLi4vY2hhcnQtaGVscGVyJztcclxuaW1wb3J0ICogYXMgZDMgZnJvbSAnZDMnO1xyXG5pbXBvcnQgeyBSZXNpemVkRXZlbnQgfSBmcm9tICdhbmd1bGFyLXJlc2l6ZS1ldmVudCc7XHJcbmltcG9ydCBIZWFkZXJDb25maWdIZWxwZXIgZnJvbSAnLi4vaGVhZGVyLWNvbmZpZyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1ob3Jpem9udGFsLWdyb3VwZWQtYmFyLXdpdGgtc2Nyb2xsLXpvb20nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9ob3Jpem9udGFsLWdyb3VwZWQtYmFyLXdpdGgtc2Nyb2xsLXpvb20uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogW1xyXG4gICAgJy4vaG9yaXpvbnRhbC1ncm91cGVkLWJhci13aXRoLXNjcm9sbC16b29tLmNvbXBvbmVudC5sZXNzJyxcclxuICAgICcuLi9jb21tb24tc3R5bGVzLmxlc3MnLFxyXG4gIF0sXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEhvcml6b250YWxHcm91cGVkQmFyV2l0aFNjcm9sbFpvb21Db21wb25lbnRcclxuICBleHRlbmRzIENvbXBvbmVudFVuaXF1ZUlkXHJcbiAgaW1wbGVtZW50cyBPbkluaXRcclxue1xyXG4gIEBWaWV3Q2hpbGQoJ2dyb3VwY2hhcnRjb250YWluZXInLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIGNvbnRhaW5lckVsdCE6IEVsZW1lbnRSZWY7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2dyb3VwY29udGFpbmVyJywgeyBzdGF0aWM6IHRydWUgfSlcclxuICBncm91cGNvbnRhaW5lckVsdCE6IEVsZW1lbnRSZWY7XHJcblxyXG4gIEBJbnB1dCgpIGNoYXJ0RGF0YTogYW55O1xyXG4gIEBJbnB1dCgpIGN1c3RvbUNoYXJ0Q29uZmlndXJhdGlvbjogYW55O1xyXG4gIEBPdXRwdXQoKSBjbGlja0V2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIGhlYWRlck1lbnVjbGlja0V2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgaXNIZWFkZXJWaXNpYmxlOiBib29sZWFuID0gdHJ1ZTtcclxuICBsZWdlbmRWaXNpYmxlOiBib29sZWFuID0gdHJ1ZTtcclxuICBpc1RyYW5zcGFyZW50QmFja2dyb3VuZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGNoYXJ0Q29uZmlndXJhdGlvbjogYW55ID0ge307XHJcbiAgb2JqZWN0S2V5cyA9IE9iamVjdC5rZXlzO1xyXG5cclxuICBkZWZhdWx0Q29uZmlndXJhdGlvbjogYW55ID0ge1xyXG4gICAgbWFyZ2luOiB7IHRvcDogMjAsIHJpZ2h0OiAyMCwgYm90dG9tOiAyMCwgbGVmdDogNDAgfSxcclxuICAgIGxhYmVsRm9ybWF0dGVyOiBDaGFydEhlbHBlci5kZWZhdWx0Rm9ybWF0dGVyLFxyXG4gICAgc3ZnSGVpZ2h0OiA3MCxcclxuICAgIG51bWJlck9mWVRpY2tzOiA1LFxyXG4gICAgbGVnZW5kSnVzdGlmaWVkOiB0cnVlLFxyXG4gICAgeUxpbmVBeGlzTGFiZWxGb21hdHRlcjogQ2hhcnRIZWxwZXIuZGVmYXVsdEZvcm1hdHRlcixcclxuICAgIHlBeGlzTGFiZWxGb21hdHRlcjogQ2hhcnRIZWxwZXIuZGVmYXVsdEZvcm1hdHRlcixcclxuICAgIGxpbmVHcmFwaENvbG9yOiAnI0Y2RDI4MycsXHJcbiAgICBzaG93TGluZUNoYXJ0QXhpczogdHJ1ZSxcclxuICAgIHNob3dWYWx1ZXM6IHRydWUsXHJcbiAgICBoZWFkZXJNZW51T3B0aW9uczogSGVhZGVyQ29uZmlnSGVscGVyLmhlYWRlckNvbmZpZy5oZWFkZXJNZW51T3B0aW9ucyxcclxuICAgIHhBeGlzR3JpZDogdW5kZWZpbmVkLFxyXG4gICAgeUF4aXNHcmlkOiBmYWxzZSxcclxuICAgIGxlZ2VuZFZpc2libGU6IGZhbHNlLFxyXG4gICAgaXNIZWFkZXJWaXNpYmxlOiB1bmRlZmluZWQsXHJcbiAgICBpc1RyYW5zcGFyZW50QmFja2dyb3VuZDogdW5kZWZpbmVkLFxyXG4gICAgaXNNdWx0aUNoYXJ0R3JpZExpbmU6IHVuZGVmaW5lZCxcclxuICAgIGlzRnVsbFNjcmVlbjogdW5kZWZpbmVkLFxyXG4gICAgY3VzdG9tWXNjYWxlOiB1bmRlZmluZWQsXHJcbiAgICB0ZXh0c09uQmFyOiB1bmRlZmluZWQsXHJcbiAgICBpc1hheGlzTGFiZWxIaWRkZW46IHVuZGVmaW5lZCxcclxuICAgIGlzWWF4aXNMYWJlbEhpZGRlbjogZmFsc2UsXHJcbiAgICBpc1lheGlzSGlkZGVuOiB1bmRlZmluZWQsXHJcbiAgICBpc1lheGlzRGFzaGVkOiB1bmRlZmluZWQsXHJcbiAgICB0ZXh0Rm9ybWF0dGVyOiB1bmRlZmluZWQsXHJcbiAgICBpc05vQWx0ZXJuYXRlWGF4aXNUZXh0OiB1bmRlZmluZWQsXHJcbiAgICBpc1hncmlkQmV0d2VlbkxhYmVsczogdW5kZWZpbmVkLFxyXG4gICAgYmFja2dyb3VuZENvbG9yOiAnI0ZGRkZGRicsXHJcbiAgICBoaWRlTGVnZW5kT25Ub3A6IHRydWUsXHJcbiAgICBpc1hheGlzQ29sb3I6ICcjOTk5OTk5JyxcclxuICAgIGxhYmVsT3ZlcmxhcE1pbm9yRml4OiB0cnVlLFxyXG4gICAgbm9Ib3ZlckVmZmVjdDogdHJ1ZSxcclxuICAgIG5vSG92ZXJEaXNwbGF5RGF0YTogdHJ1ZSxcclxuICAgIHNob3dYYXhpc1RvcDogdHJ1ZSxcclxuICAgIGRpc3BsYXlZYXhpc0xhYmVsczogdW5kZWZpbmVkLFxyXG4gICAgeExhYmVsc09uU2FtZUxpbmU6IHVuZGVmaW5lZCxcclxuICAgIHRleHRBbHdheXNIb3Jpem9udGFsOiB1bmRlZmluZWQsXHJcbiAgICBsZWdlbmRBdFRvcFJpZ2h0OiB1bmRlZmluZWQsXHJcbiAgICBpc0RyaWxsZG93bkNoYXJ0OiB0cnVlLFxyXG4gICAgZGlzcGxheVRpdGxlT25Ub3A6IHVuZGVmaW5lZCxcclxuICAgIGlzVG9nZ2xlVmlzaWJsZTogdW5kZWZpbmVkLFxyXG4gICAgaXNUaXRsZUhpZGRlbjogdW5kZWZpbmVkLFxyXG4gICAgaXNEaXNwbGF5QmFyRGV0YWlsc0F0Qm90dG9tOiB1bmRlZmluZWQsXHJcbiAgICBob3dtYW55QmFyRGV0YWlsc1RvRGlzcGxheTogMCxcclxuICAgIGJhclZhdWxlQ29sb3I6IHVuZGVmaW5lZCxcclxuICAgIGRlZmF1bHRCYXJIZWlnaHQ6IDIsXHJcbiAgfTtcclxuXHJcbiAgdW5pcXVlSWQ6IGFueSA9IHRoaXMuZ2V0VW5pcXVlSWQoKTtcclxuICBpc1pvb21lZE91dDogYm9vbGVhbiA9IHRydWU7XHJcbiAgaXNERDFPcGVuOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaXNERDJPcGVuOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgc3VwZXIoKTtcclxuICB9XHJcblxyXG4gIG9uUmVzaXplZChldmVudDogUmVzaXplZEV2ZW50KSB7XHJcbiAgICBsZXQgc2VsZiA9IHRoaXM7XHJcbiAgICBzZXRUaW1lb3V0KFxyXG4gICAgICBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgZDMuc2VsZWN0KCcjJyArIHNlbGYudW5pcXVlSWQpLnJlbW92ZSgpO1xyXG4gICAgICAgIHNlbGYuaW5pdGlhbGl6ZWdyb3VwQ2hhcnQoKTtcclxuICAgICAgfS5iaW5kKHNlbGYpLFxyXG4gICAgICAxMFxyXG4gICAgKTtcclxuICB9XHJcbiAgaXNab29tT3V0U2VsZWN0ZWQoaXNab29tT3V0LCBldmVudCkge1xyXG4gICAgdGhpcy5pc1pvb21lZE91dCA9IGlzWm9vbU91dDtcclxuICAgIHRoaXMub25SZXNpemVkKGV2ZW50KTtcclxuICB9XHJcbiAgaGFuZGxlWm9vbWluWm9vbW91dENsaWNrKHsgaXNab29tT3V0LCBldmVudCB9KSB7XHJcbiAgICB0aGlzLmlzWm9vbU91dFNlbGVjdGVkKGlzWm9vbU91dCwgZXZlbnQpO1xyXG4gIH1cclxuICBuZ09uSW5pdCgpIHt9XHJcbiAgaXNMZWdlbmRWaXNpYmxlKCkge1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmNoYXJ0RGF0YSAmJlxyXG4gICAgICB0aGlzLmNoYXJ0RGF0YS5tZXRhRGF0YS5jb2xvcnMgJiZcclxuICAgICAgT2JqZWN0LmtleXModGhpcy5jaGFydERhdGEubWV0YURhdGEuY29sb3JzKS5sZW5ndGggPiAxXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIGtlZXBPcmRlciA9IChhLCBiKSA9PiB7XHJcbiAgICByZXR1cm4gYTtcclxuICB9O1xyXG5cclxuICBnZXQgaXNBbGVydEVuYWJsZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5jaGFydENvbmZpZ3VyYXRpb24/LmhlYWRlck1lbnVPcHRpb25zPy5zb21lKFxyXG4gICAgICAob3B0aW9uKSA9PiBvcHRpb24uaWQgPT09ICdlZGl0QWxlcnQnXHJcbiAgICApO1xyXG4gIH0gIFxyXG4gIGluaXRpYWxpemVncm91cENoYXJ0KCkge1xyXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgbGV0IGRhdGEgPSBbXTtcclxuICAgIGxldCBtZXRhRGF0YTogYW55ID0gbnVsbDtcclxuICAgIGxldCBrZXlMaXN0ID0gbnVsbDtcclxuICAgIGxldCBsaW5lRGF0YSA9IG51bGw7XHJcbiAgICBsZXQgY29sb3JNYXAgPSB7fTtcclxuICAgIHZhciBmb3JtYXRGcm9tQmFja2VuZDtcclxuICAgIHZhciBmb3JtYXRGb3JIdWdlTnVtYmVycztcclxuICAgIGNvbnN0IGlzTW9iaWxlID0gd2luZG93LmlubmVyV2lkdGggPCA1NzY7XHJcbiAgICBjb25zdCBpc1RhYmxldCA9IHdpbmRvdy5pbm5lcldpZHRoID49IDU3NiAmJiB3aW5kb3cuaW5uZXJXaWR0aCA8IDk5MjtcclxuICAgIGNvbnN0IGlzRGVza3RvcCA9IHdpbmRvdy5pbm5lcldpZHRoID49IDk5MjtcclxuXHJcbiAgIGxldCBpc3JpYSA9IHRoaXMuY3VzdG9tQ2hhcnRDb25maWd1cmF0aW9uLmlzUmlhXHJcblxyXG4gICAgdmFyIHg6IGFueTtcclxuXHJcbiAgICB2YXIgYWx0ZXJuYXRlX3RleHQgPSBmYWxzZTtcclxuICAgIHZhciBzaG9ydF90aWNrX2xlbmd0aCA9IDQ7XHJcbiAgICB2YXIgbG9uZ190aWNrX2xlbmd0aCA9IDE2O1xyXG4gICAgLyoqXHJcbiAgICAgKiBsb25nZXIgdGljayBsZW5ndGggbmVlZGVkIGZvciB3ZWVrbHkgY2hhcnRzXHJcbiAgICAgKi9cclxuICAgIHZhciBzaG9ydF90aWNrX2xlbmd0aF9iZyA9IDU7XHJcbiAgICB2YXIgbG9uZ190aWNrX2xlbmd0aF9iZyA9IDMwO1xyXG4gICAgdmFyIGxlZnRBbmRSaWdodFNwYWNlcyA9IDUwO1xyXG4gICAgdmFyIHJpZ2h0U3ZnV2lkdGggPSA2MDtcclxuICAgIHZhciB0ZW1wU2NhbGU7XHJcblxyXG4gICAgZm9yICh2YXIgaSBpbiB0aGlzLmRlZmF1bHRDb25maWd1cmF0aW9uKSB7XHJcbiAgICAgIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uW2ldID0gQ2hhcnRIZWxwZXIuZ2V0VmFsdWVCeUNvbmZpZ3VyYXRpb25UeXBlKFxyXG4gICAgICAgIGksXHJcbiAgICAgICAgdGhpcy5kZWZhdWx0Q29uZmlndXJhdGlvbixcclxuICAgICAgICB0aGlzLmN1c3RvbUNoYXJ0Q29uZmlndXJhdGlvblxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGRhdGEgPSB0aGlzLmNoYXJ0RGF0YS5kYXRhO1xyXG4gICAgbWV0YURhdGEgPSB0aGlzLmNoYXJ0RGF0YS5tZXRhRGF0YTtcclxuICAgIGxpbmVEYXRhID0gdGhpcy5jaGFydERhdGEubGluZURhdGE7XHJcblxyXG4gICAgLy8gaWYgKGxpbmVEYXRhIHx8IHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhKSB7XHJcbiAgICAvLyAgIHJpZ2h0U3ZnV2lkdGggPSA2MDtcclxuICAgIC8vIH1cclxuICAgIGlmICghbWV0YURhdGEuY29sb3JBYm92ZVRhcmdldCkge1xyXG4gICAgICBtZXRhRGF0YVsnY29sb3JBYm92ZVRhcmdldCddID0gbWV0YURhdGEuY29sb3JzO1xyXG4gICAgfVxyXG4gICAgY29sb3JNYXAgPSBtZXRhRGF0YS5jb2xvcnM7XHJcbiAgICBrZXlMaXN0ID0gbWV0YURhdGEua2V5TGlzdDtcclxuXHJcbiAgICB2YXIgY2hhcnRDb250YWluZXIgPSBkMy5zZWxlY3QodGhpcy5jb250YWluZXJFbHQubmF0aXZlRWxlbWVudCk7XHJcbiAgICB2YXIgdmVydGljYWxzdGFja2VkY29udGFpbmVyID0gZDMuc2VsZWN0KFxyXG4gICAgICB0aGlzLmdyb3VwY29udGFpbmVyRWx0Lm5hdGl2ZUVsZW1lbnRcclxuICAgICk7XHJcbiAgICB2YXIgbWFyZ2luID0gdGhpcy5jaGFydENvbmZpZ3VyYXRpb24ubWFyZ2luO1xyXG4gICAgdmFyIHdpZHRoID1cclxuICAgICAgcGFyc2VJbnQoY2hhcnRDb250YWluZXIuc3R5bGUoJ3dpZHRoJykpIC0gbWFyZ2luLmxlZnQgLSBtYXJnaW4ucmlnaHQ7XHJcbiAgICBpZiAodGhpcy5jaGFydERhdGEuZGF0YS5sZW5ndGggPiAzMCAmJiB0aGlzLmlzWm9vbWVkT3V0KSB7XHJcbiAgICAgIHdpZHRoID1cclxuICAgICAgICB3aWR0aCA+IHRoaXMuY2hhcnREYXRhLmRhdGEubGVuZ3RoICogNDBcclxuICAgICAgICAgID8gdGhpcy5jaGFydERhdGEuZHJvcGRvd25EYXRhMVxyXG4gICAgICAgICAgICA/IHRoaXMuY2hhcnREYXRhLmRhdGEubGVuZ3RoICogNjBcclxuICAgICAgICAgICAgOiB3aWR0aFxyXG4gICAgICAgICAgOiB0aGlzLmNoYXJ0RGF0YS5kcm9wZG93bkRhdGExXHJcbiAgICAgICAgICA/IHRoaXMuY2hhcnREYXRhLmRhdGEubGVuZ3RoICogNjBcclxuICAgICAgICAgIDogdGhpcy5jaGFydERhdGEuZGF0YS5sZW5ndGggKiA0MDtcclxuXHJcbiAgICAgIHdpZHRoID1cclxuICAgICAgICB3aWR0aCA+IHRoaXMuY2hhcnREYXRhLmRhdGEubGVuZ3RoICogNDBcclxuICAgICAgICAgID8gd2lkdGhcclxuICAgICAgICAgIDogdGhpcy5jaGFydERhdGEuZGF0YS5sZW5ndGggKiA0MDtcclxuICAgIH1cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5jaGFydERhdGEuZHJvcGRvd25EYXRhMiAmJlxyXG4gICAgICB3aWR0aCA8IHRoaXMuY2hhcnREYXRhLmRhdGEubGVuZ3RoICogMTIwICYmXHJcbiAgICAgIHRoaXMuaXNab29tZWRPdXRcclxuICAgICkge1xyXG4gICAgICB3aWR0aCA9IHRoaXMuY2hhcnREYXRhLmRhdGEubGVuZ3RoICogMTIwO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY2hhcnREYXRhLmRhdGEubGVuZ3RoID4gOCAmJiAhdGhpcy5pc1pvb21lZE91dCkge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5jaGFydERhdGEuZHJvcGRvd25EYXRhMiAmJlxyXG4gICAgICAgIHdpZHRoIDwgdGhpcy5jaGFydERhdGEuZGF0YS5sZW5ndGggKiAyNTBcclxuICAgICAgKSB7XHJcbiAgICAgICAgd2lkdGggPSB0aGlzLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCAqIDI1MDtcclxuICAgICAgfSBlbHNlIHdpZHRoID0gdGhpcy5jaGFydERhdGEuZGF0YS5sZW5ndGggKiAxNjA7XHJcbiAgICB9XHJcbiAgICAvLyBpZiAodGhpcy5jaGFydERhdGEuZGF0YS5sZW5ndGggPiA4KSB7XHJcbiAgICAvLyAgIHdpZHRoID0gdGhpcy5jaGFydERhdGEuZGF0YS5sZW5ndGggKiAxNDA7XHJcbiAgICAvLyB9XHJcblxyXG4gICAgdmFyIGhlaWdodCA9XHJcbiAgICAgIHBhcnNlSW50KHZlcnRpY2Fsc3RhY2tlZGNvbnRhaW5lci5zdHlsZSgnaGVpZ2h0JykpICpcclxuICAgICAgICAoc2VsZi5jaGFydENvbmZpZ3VyYXRpb24uc3ZnSGVpZ2h0IC8gMTAwKSAtXHJcbiAgICAgIG1hcmdpbi50b3AgLVxyXG4gICAgICBtYXJnaW4uYm90dG9tO1xyXG4gICAgLyoqXHJcbiAgICAgKiBlbnRpcmUgaGVpZ2h0IHVzZWQgaW4gd2Vla2x5IGNoYXJ0cyBhcyB4IGF4aXMgbmVlZGVkIHRvIGJlIGRpc3BsYXllZCBhdCB0aGUgYm90dG9tIG9mIHRoZSBjaGFydFxyXG4gICAgICovXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzRnVsbFNjcmVlbiAhPSB1bmRlZmluZWQgJiZcclxuICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNGdWxsU2NyZWVuXHJcbiAgICApIHtcclxuICAgICAgaGVpZ2h0ID1cclxuICAgICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5zdmdIZWlnaHQgIT0gNzBcclxuICAgICAgICAgID8gdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uc3ZnSGVpZ2h0XHJcbiAgICAgICAgICA6IHBhcnNlSW50KHZlcnRpY2Fsc3RhY2tlZGNvbnRhaW5lci5zdHlsZSgnaGVpZ2h0JykpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzRHJpbGxkb3duQ2hhcnQgJiYgIXRoaXMuaXNIZWFkZXJWaXNpYmxlKSB7XHJcbiAgICAgIGhlaWdodCA9XHJcbiAgICAgICAgcGFyc2VJbnQodmVydGljYWxzdGFja2VkY29udGFpbmVyLnN0eWxlKCdoZWlnaHQnKSkgLVxyXG4gICAgICAgIG1hcmdpbi50b3AgLVxyXG4gICAgICAgIG1hcmdpbi5ib3R0b20gLVxyXG4gICAgICAgIDEzMDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNIZWFkZXJWaXNpYmxlKSB7XHJcbiAgICAgIGhlaWdodCA9XHJcbiAgICAgICAgcGFyc2VJbnQodmVydGljYWxzdGFja2VkY29udGFpbmVyLnN0eWxlKCdoZWlnaHQnKSkgLVxyXG4gICAgICAgIG1hcmdpbi50b3AgLVxyXG4gICAgICAgIG1hcmdpbi5ib3R0b20gLVxyXG4gICAgICAgIDEwMDtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogZm9yIGhpZGluZyBoZWFkZXJcclxuICAgICAqIHVzZWQgYnkgd2Vla2x5IGNoYXJ0c1xyXG4gICAgICovXHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNIZWFkZXJWaXNpYmxlICE9IHVuZGVmaW5lZClcclxuICAgICAgdGhpcy5pc0hlYWRlclZpc2libGUgPSB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0hlYWRlclZpc2libGU7XHJcbiAgICAvKipcclxuICAgICAqIGZvciBoaWRpbmcgbGVnZW5kc1xyXG4gICAgICogdXNlZCBieSB3ZWVrbHkgY2hhcnRzXHJcbiAgICAgKi9cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5sZWdlbmRWaXNpYmxlICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLmxlZ2VuZFZpc2libGUgPSB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5sZWdlbmRWaXNpYmxlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogZm9yIHJlbW92aW5nIGJhY2tncm91bmQgY29sb3Igc28gdGhhdCBpdCBjYW4gdGFrZSBwYXJlbnRzIGNvbG9yXHJcbiAgICAgKlxyXG4gICAgICovXHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNUcmFuc3BhcmVudEJhY2tncm91bmQgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuaXNUcmFuc3BhcmVudEJhY2tncm91bmQgPVxyXG4gICAgICAgIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBmb3JtYXQgZGF0YSB2YWx1ZXMgYmFzZWQgb24gY29uZmlndXJhdGlvbiByZWNlaXZlZFxyXG4gICAgICovXHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24udGV4dEZvcm1hdHRlciAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgZm9ybWF0RnJvbUJhY2tlbmQgPSBDaGFydEhlbHBlci5kYXRhVmFsdWVGb3JtYXR0ZXIoXHJcbiAgICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24udGV4dEZvcm1hdHRlclxyXG4gICAgICApO1xyXG4gICAgICBmb3JtYXRGb3JIdWdlTnVtYmVycyA9IENoYXJ0SGVscGVyLmRhdGFWYWx1ZUZvcm1hdHRlcignLjJzJyk7XHJcbiAgICB9XHJcbiAgICB2YXIgb3V0ZXJDb250YWluZXIgPSBjaGFydENvbnRhaW5lclxyXG4gICAgICAuYXBwZW5kKCdkaXYnKVxyXG4gICAgICAuYXR0cignaWQnLCBzZWxmLnVuaXF1ZUlkKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnb3V0ZXItY29udGFpbmVyJylcclxuICAgICAgLnN0eWxlKCd3aWR0aCcsICcxMDAlJylcclxuICAgICAgLnN0eWxlKCdoZWlnaHQnLCBoZWlnaHQpXHJcblxyXG4gICAgICAuc3R5bGUoJ292ZXJmbG93LXgnLCAnaGlkZGVuJylcclxuICAgICAgLnN0eWxlKCdwYWRkaW5nLWxlZnQnLCBgJHttYXJnaW4ubGVmdH1weGApXHJcbiAgICAgIC8vIC5jYWxsKENoYXJ0SGVscGVyLnJlc3BvbnNpdmVmeSlcclxuXHJcbiAgICAgIC5zdHlsZSgncGFkZGluZy1yaWdodCcsIGAke3JpZ2h0U3ZnV2lkdGh9cHhgKVxyXG4gICAgICAuc3R5bGUoJ21hcmdpbi1sZWZ0JywgJzE1cHgnKTtcclxuICAgIHZhciBzdmdZQXhpc0xlZnQgPSBvdXRlckNvbnRhaW5lclxyXG4gICAgICAuYXBwZW5kKCdzdmcnKVxyXG4gICAgICAuYXR0cignd2lkdGgnLCAnMTAwJylcclxuICAgICAgLmF0dHIoJ2hlaWdodCcsIGhlaWdodCArIG1hcmdpbi50b3AgKyBtYXJnaW4uYm90dG9tICsgMTApXHJcbiAgICAgIC5zdHlsZSgncG9zaXRpb24nLCAnYWJzb2x1dGUnKVxyXG4gICAgICAuc3R5bGUoJ2xlZnQnLCAnMCcpXHJcbiAgICAgIC5zdHlsZSgnei1pbmRleCcsIDEpXHJcbiAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAuYXR0cihcclxuICAgICAgICAndHJhbnNmb3JtJyxcclxuICAgICAgICAndHJhbnNsYXRlKCcgKyAobWFyZ2luLmxlZnQgKyAxNSkgKyAnLCcgKyBtYXJnaW4udG9wICsgJyknXHJcbiAgICAgICk7XHJcblxyXG4gICAgdmFyIHN2Z1lBeGlzUmlnaHQgPSBvdXRlckNvbnRhaW5lclxyXG4gICAgICAuYXBwZW5kKCdzdmcnKVxyXG4gICAgICAuYXR0cignd2lkdGgnLCByaWdodFN2Z1dpZHRoKVxyXG4gICAgICAuYXR0cignaGVpZ2h0JywgaGVpZ2h0ICsgbWFyZ2luLnRvcCArIG1hcmdpbi5ib3R0b20gKyAxMClcclxuICAgICAgLnN0eWxlKCdwb3NpdGlvbicsICdhYnNvbHV0ZScpXHJcbiAgICAgIC5zdHlsZSgncmlnaHQnLCAnMTJweCcpXHJcbiAgICAgIC5zdHlsZSgnei1pbmRleCcsIDEpXHJcbiAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgnICsgMCArICcsJyArIG1hcmdpbi50b3AgKyAnKScpO1xyXG5cclxuICAgIHZhciBpbm5lckNvbnRhaW5lciA9IG91dGVyQ29udGFpbmVyXHJcbiAgICAgIC5hcHBlbmQoJ2RpdicpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICdpbm5lci1jb250YWluZXInKVxyXG4gICAgICAuc3R5bGUoJ3dpZHRoJywgJzEwMCUnKVxyXG4gICAgICAuc3R5bGUoJ292ZXJmbG93LXgnLCAnYXV0bycpO1xyXG5cclxuICAgIHZhciBzdmcgPSBpbm5lckNvbnRhaW5lclxyXG4gICAgICAuYXBwZW5kKCdzdmcnKVxyXG4gICAgICAvLyAuYXR0cignaWQnLCBzZWxmLnVuaXF1ZUlkKVxyXG4gICAgICAuYXR0cignd2lkdGgnLCB3aWR0aCAtIHJpZ2h0U3ZnV2lkdGgpXHJcbiAgICAgIC5hdHRyKCdoZWlnaHQnLCBoZWlnaHQgKyBtYXJnaW4udG9wICsgbWFyZ2luLmJvdHRvbSArIDMwKVxyXG4gICAgICAvLyAuY2FsbChDaGFydEhlbHBlci5yZXNwb25zaXZlZnkpXHJcbiAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgnICsgMCArICcsJyArIG1hcmdpbi50b3AgKyAnKScpO1xyXG5cclxuICAgIHZhciBzdWJncm91cHM6IGFueSA9IGtleUxpc3Q7XHJcblxyXG4gICAgdmFyIGdyb3VwcyA9IGQzXHJcbiAgICAgIC5tYXAoZGF0YSwgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICByZXR1cm4gZC5uYW1lO1xyXG4gICAgICB9KVxyXG4gICAgICAua2V5cygpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogeCBheGlzIHJhbmdlIG1hZGUgc2ltaWxhciB0byBsaW5lIGNoYXJ0IG9yIHZlcnRpY2FsIHN0YWNrIHNvIHRoYXQgYWxsIHRoZSBjaGFydHMgd2lsbCBnZXQgYWxpZ25lZCB3aXRoIGVhY2ggb3RoZXIuXHJcbiAgICAgKi9cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc011bHRpQ2hhcnRHcmlkTGluZSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgeCA9IGQzXHJcbiAgICAgICAgLnNjYWxlQmFuZCgpXHJcbiAgICAgICAgLnJhbmdlUm91bmQoW3dpZHRoLCAwXSlcclxuICAgICAgICAuYWxpZ24oMC41KVxyXG4gICAgICAgIC5wYWRkaW5nKFswLjVdKVxyXG4gICAgICAgIC5kb21haW4oXHJcbiAgICAgICAgICBkYXRhLm1hcChmdW5jdGlvbiAoZDogYW55KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBkLm5hbWUudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHggPSBkM1xyXG4gICAgICAgIC5zY2FsZUJhbmQoKVxyXG4gICAgICAgIC5kb21haW4oZ3JvdXBzKVxyXG4gICAgICAgIC5yYW5nZShbbGVmdEFuZFJpZ2h0U3BhY2VzLCB3aWR0aCAtIHJpZ2h0U3ZnV2lkdGggLSBsZWZ0QW5kUmlnaHRTcGFjZXNdKVxyXG4gICAgICAgIC5wYWRkaW5nKFswLjNdKTtcclxuICAgIH1cclxuICAgIC8vIHguYmFuZHdpZHRoKDk2KTtcclxuICAgIHZhciB4U2NhbGVGcm9tT3JpZ2luID0gZDNcclxuICAgICAgLnNjYWxlQmFuZCgpXHJcbiAgICAgIC5kb21haW4oZ3JvdXBzKVxyXG4gICAgICAucmFuZ2UoWzAsIHdpZHRoIC0gcmlnaHRTdmdXaWR0aF0pO1xyXG4gICAgLy8gLnBhZGRpbmcoWzAuMl0pO1xyXG4gICAgLyoqXHJcbiAgICAgKiBkcmF3IHNlY29uZCB4IGF4aXMgb24gdG9wXHJcbiAgICAgKi9cclxuICAgIC8vIGlmIChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5zaG93WGF4aXNUb3ApIHtcclxuICAgIC8vICAgc3ZnXHJcbiAgICAvLyAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAvLyAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi1saW5lLWF4aXMtdGV4dCBsaWItbGluZS14LWF4aXMtdGV4dCB4LWF4aXMnKVxyXG4gICAgLy8gICAgIC5hdHRyKCdzdHlsZScsIHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnhBeGlzQ3VzdG9tVGV4dFN0eWxlcylcclxuICAgIC8vICAgICAuY2FsbChkMy5heGlzQm90dG9tKHgpLnRpY2tTaXplKDApKTtcclxuICAgIC8vIH1cclxuICAgIC8vIGQzLnN2Zy5heGlzKCkuc2NhbGUoeCkub3JpZW50KCdib3R0b20nKS50aWNrcygxKS5pbm5lclRpY2tTaXplKC1oZWlnaHQpO1xyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzTXVsdGlDaGFydEdyaWRMaW5lID09IHVuZGVmaW5lZCkge1xyXG4gICAgICAvKipcclxuICAgICAgICogbm9ybWFsIHRpY2tzIGZvciBhbGwgZGFzaGJvYXJkIGNoYXJ0c1xyXG4gICAgICAgKi9cclxuICAgICAgc3ZnXHJcbiAgICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ3gxIGF4aXMxJylcclxuICAgICAgICAuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgwLCcgKyBoZWlnaHQgKyAnKScpXHJcbiAgICAgICAgLmNhbGwoZDMuYXhpc0JvdHRvbSh4KSlcclxuICAgICAgICAuY2FsbCgoZykgPT4gZy5zZWxlY3QoJy5kb21haW4nKS5yZW1vdmUoKSk7XHJcblxyXG4gICAgICBzdmcuc2VsZWN0QWxsKCdnLngxLmF4aXMxIGcudGljayBsaW5lJykucmVtb3ZlKCk7XHJcblxyXG4gICAgICBzdmdcclxuICAgICAgICAuc2VsZWN0QWxsKCdnLngxLmF4aXMxIGcudGljayB0ZXh0JylcclxuICAgICAgICAuYXR0cignY2xhc3MnLCAnbGliLXhheGlzLWxhYmVscy10ZXh0cy1kcmlsbGRvd24nKVxyXG4gICAgICAgIC5zdHlsZSgnZmlsbCcsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpO1xyXG5cclxuICAgICAgLy8gLmF0dHIoJ3knLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIC8vICAgaWYgKGFsdGVybmF0ZV90ZXh0KSB7XHJcbiAgICAgIC8vICAgICBhbHRlcm5hdGVfdGV4dCA9IGZhbHNlO1xyXG4gICAgICAvLyAgICAgcmV0dXJuIGxvbmdfdGlja19sZW5ndGggKyAxO1xyXG4gICAgICAvLyAgIH0gZWxzZSB7XHJcbiAgICAgIC8vICAgICBhbHRlcm5hdGVfdGV4dCA9IHRydWU7XHJcbiAgICAgIC8vICAgICByZXR1cm4gc2hvcnRfdGlja19sZW5ndGggKyAxO1xyXG4gICAgICAvLyAgIH1cclxuICAgICAgLy8gfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvKipcclxuICAgICAgICogYmlnZ2VyIHRpY2tzIGZvciB3ZWVrbHkgY2hhcnRzIGFuZCBtb3JlIHNwYWNlIGZyb20geCBheGlzIHRvIGxhYmVsc1xyXG4gICAgICAgKi9cclxuICAgICAgLyoqXHJcbiAgICAgICAqIGRyYXcgeCBheGlzXHJcbiAgICAgICAqL1xyXG4gICAgICBzdmdcclxuICAgICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgICAuYXR0cignY2xhc3MnLCAneDEgYXhpczEnKVxyXG4gICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKDAsJyArIGhlaWdodCArICcpJylcclxuICAgICAgICAuY2FsbChkMy5heGlzQm90dG9tKHgpLnRpY2tTaXplKDApKVxyXG4gICAgICAgIC5jYWxsKChnKSA9PiBnLnNlbGVjdCgnLmRvbWFpbicpLmF0dHIoJ2ZpbGwnLCAnbm9uZScpKTtcclxuICAgICAgLyoqXHJcbiAgICAgICAqIHRpY2sgbGluZSBzaXplIGluIGFsdGVybmF0ZSBmYXNoaW9uXHJcbiAgICAgICAqL1xyXG4gICAgICBzdmcuc2VsZWN0QWxsKCdnLngxLmF4aXMxIGcudGljayBsaW5lJykuYXR0cigneTInLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgYWx0ZXJuYXRlX3RleHQgJiZcclxuICAgICAgICAgIHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmlzTm9BbHRlcm5hdGVYYXhpc1RleHQgPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBhbHRlcm5hdGVfdGV4dCA9IGZhbHNlO1xyXG4gICAgICAgICAgcmV0dXJuIGxvbmdfdGlja19sZW5ndGhfYmcgLSA3O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBhbHRlcm5hdGVfdGV4dCA9IHRydWU7XHJcbiAgICAgICAgICByZXR1cm4gc2hvcnRfdGlja19sZW5ndGhfYmcgLSA0O1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiByZXNldCB0aGUgZmxhZyBzbyB0aGF0IHZhbHVlcyBjYW4gYmUgc2hvd24gaW4gc2FtZSBhbHRlcm5hdGUgZmFzaGlvblxyXG4gICAgICAgKi9cclxuICAgICAgYWx0ZXJuYXRlX3RleHQgPSBmYWxzZTtcclxuICAgICAgLyoqXHJcbiAgICAgICAqIHByaW50IHgtYXhpcyBsYWJlbCB0ZXh0c1xyXG4gICAgICAgKiB1c2VkIGJ5IHdlZWtseSBjaGFydHNcclxuICAgICAgICovXHJcbiAgICAgIHN2Z1xyXG4gICAgICAgIC5zZWxlY3RBbGwoJ2cueDEuYXhpczEgZy50aWNrIHRleHQnKVxyXG4gICAgICAgIC5hdHRyKCdjbGFzcycsICdsaWIteGF4aXMtbGFiZWxzLXRleHRzLXdlZWtseWNoYXJ0cycpXHJcbiAgICAgICAgLmF0dHIoJ3knLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICBpZiAoYWx0ZXJuYXRlX3RleHQpIHtcclxuICAgICAgICAgICAgYWx0ZXJuYXRlX3RleHQgPSBmYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuIGxvbmdfdGlja19sZW5ndGhfYmc7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBhbHRlcm5hdGVfdGV4dCA9IHRydWU7XHJcbiAgICAgICAgICAgIHJldHVybiBzaG9ydF90aWNrX2xlbmd0aF9iZztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIGlmIChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi54TGFiZWxzT25TYW1lTGluZSkge1xyXG4gICAgICBzdmdcclxuICAgICAgICAuc2VsZWN0QWxsKCdnLngxLmF4aXMxIGcudGljayB0ZXh0JylcclxuICAgICAgICAuYXR0cignY2xhc3MnLCAnbGliLXhheGlzLWxhYmVscy10ZXh0cy1kcmlsbGRvd24nKVxyXG4gICAgICAgIC5zdHlsZSgnZm9udC1zaXplJywgdGhpcy5pc0hlYWRlclZpc2libGUgPyAnMThweCcgOiAnMTRweCcpXHJcbiAgICAgICAgLmF0dHIoXHJcbiAgICAgICAgICAneScsXHJcbiAgICAgICAgICB0aGlzLmlzSGVhZGVyVmlzaWJsZVxyXG4gICAgICAgICAgICA/IHNob3J0X3RpY2tfbGVuZ3RoX2JnICsgMjVcclxuICAgICAgICAgICAgOiBzaG9ydF90aWNrX2xlbmd0aF9iZ1xyXG4gICAgICAgIClcclxuICAgICAgICAuYXR0cigneCcsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICBpZiAoc2VsZi5jaGFydERhdGEuZGF0YS5sZW5ndGggPiA4ICYmICFzZWxmLmlzWm9vbWVkT3V0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiAtMjU7IC8vIE1vdmUgZmlyc3QgbGluZSB0ZXh0IHNsaWdodGx5IHRvIHRoZSBsZWZ0IHRvb1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIDA7IC8vIERlZmF1bHQgcG9zaXRpb25cclxuICAgICAgICB9KVxyXG4gICAgICAgIC50ZXh0KGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICB2YXIgaXNWYWx1ZVRvQmVJZ25vcmVkID0gZmFsc2U7XHJcbiAgICAgICAgICBpZiAoKGlzTW9iaWxlICYmICFzZWxmLmlzSGVhZGVyVmlzaWJsZSkgfHwgaXNyaWEpIHtcclxuICAgICAgICAgICAgbGV0IGZpcnN0UGFydCA9IGQuc3BsaXQoL1tcXHNcXC1dKy8pWzBdO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGZpcnN0UGFydC5zdWJzdHJpbmcoMCwgMykudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGRhdGEubWFwKChpbmRpdjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICBpbmRpdi5uYW1lLnRvTG93ZXJDYXNlKCkgPT0gZC50cmltKCkudG9Mb3dlckNhc2UoKSAmJlxyXG4gICAgICAgICAgICAgIGluZGl2W21ldGFEYXRhLmtleUxpc3RbMF1dID09IC0xXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgIGlzVmFsdWVUb0JlSWdub3JlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgaWYgKGlzVmFsdWVUb0JlSWdub3JlZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAvLyBJZiBsYWJlbCBsb29rcyBsaWtlIGEgZGF0ZSAoY29udGFpbnMgZGlnaXRzIGFuZCAtIG9yIC8pLCBzaG93IGZ1bGwgbGFiZWwgYXMgb25lIGxpbmVcclxuICAgICAgICAgIGlmICgvXFxkezIsNH1bLVxcL10vLnRlc3QoZCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoZC50cmltKCkuaW5kZXhPZignICcpID4gLTEpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGQudHJpbSgpLnN1YnN0cmluZygwLCBkLmluZGV4T2YoJyAnKSkudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBkLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIGlmICghaXNNb2JpbGUpIHtcclxuICAgICAgICBzdmdcclxuICAgICAgICAgIC5zZWxlY3RBbGwoJ2cueDEuYXhpczEgZy50aWNrJylcclxuICAgICAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgICAgcmV0dXJuICEvXFxkezIsNH1bLVxcL10vLnRlc3QoZCk7IC8vIE9ubHkgcHJvY2VzcyBub24tZGF0ZSBsYWJlbHNcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAuYXBwZW5kKCd0ZXh0JylcclxuICAgICAgICAgIC5hdHRyKCdjbGFzcycsICdsaWIteGF4aXMtbGFiZWxzLXRleHRzLWRyaWxsZG93bicpXHJcbiAgICAgICAgICAuYXR0cigneScsIGxvbmdfdGlja19sZW5ndGhfYmcpXHJcbiAgICAgICAgICAuYXR0cignZmlsbCcsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpXHJcbiAgICAgICAgICAuYXR0cigneCcsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICAgIGlmIChzZWxmLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCA+IDggJiYgIXNlbGYuaXNab29tZWRPdXQpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gLTI1OyAvLyBNb3ZlIHRleHQgc2xpZ2h0bHkgdG8gdGhlIGxlZnRcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gMDsgLy8gRGVmYXVsdCBwb3NpdGlvblxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC50ZXh0KGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICAgIGlmIChkLnRyaW0oKS5pbmRleE9mKCcgJykgPiAtMSkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBkLnRyaW0oKS5zdWJzdHJpbmcoZC5pbmRleE9mKCcgJyksIGQubGVuZ3RoKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiAnJztcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoKGlzTW9iaWxlICYmICF0aGlzLmlzSGVhZGVyVmlzaWJsZSkgfHwgaXNyaWEpIHtcclxuICAgICAgc3ZnXHJcbiAgICAgICAgLnNlbGVjdEFsbCgnZy54MS5heGlzMSBnLnRpY2sgdGV4dCcpXHJcbiAgICAgICAgLmNsYXNzZWQoJ21vYmlsZS14YXhpcy1vdmVycmlkZScsIHRydWUpO1xyXG4gICAgfVxyXG4gICAgLyoqeSBzY2FsZSBmb3IgbGVmdCB5IGF4aXMgKi9cclxuICAgIHZhciB5ID0gZDMuc2NhbGVMaW5lYXIoKS5yYW5nZVJvdW5kKFtoZWlnaHQsIDBdKTtcclxuICAgIHZhciBtYXhWYWx1ZSA9IGQzLm1heChkYXRhLCAoZCkgPT4gZDMubWF4KGtleUxpc3QsIChrZXkpID0+ICtkW2tleV0pKTtcclxuICAgIGlmIChtYXhWYWx1ZSA9PSAwKSB7XHJcbiAgICAgIGlmICh0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YSkge1xyXG4gICAgICAgIG1heFZhbHVlID0gdGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEudGFyZ2V0ICsgMjA7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbWF4VmFsdWUgPSAxMDA7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0dyaWQpIHtcclxuICAgICAgLy8gc3ZnXHJcbiAgICAgIC8vICAgLmFwcGVuZCgnZycpXHJcbiAgICAgIC8vICAgLmF0dHIoJ2NsYXNzJywgJ2dyaWQnKVxyXG4gICAgICAvLyAgIC5jYWxsKFxyXG4gICAgICAvLyAgICAgZDNcclxuICAgICAgLy8gICAgICAgLmF4aXNMZWZ0KHkpXHJcbiAgICAgIC8vICAgICAgIC50aWNrcyhzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5udW1iZXJPZllUaWNrcylcclxuICAgICAgLy8gICAgICAgLnRpY2tTaXplKC13aWR0aClcclxuICAgICAgLy8gICAgICAgLnRpY2tGb3JtYXQoJycpXHJcbiAgICAgIC8vICAgKVxyXG4gICAgICAvLyAgIC8vIC5zdHlsZSgnc3Ryb2tlLWRhc2hhcnJheScsICc1IDUnKVxyXG4gICAgICAvLyAgIC5zdHlsZSgnY29sb3InLCAnI0I5QjlCOScpXHJcbiAgICAgIC8vICAgLnN0eWxlKCdvcGFjaXR5JywgJzAuNScpXHJcbiAgICAgIC8vICAgLmNhbGwoKGcpID0+IGcuc2VsZWN0KCcuZG9tYWluJykucmVtb3ZlKCkpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmN1c3RvbVlzY2FsZSkge1xyXG4gICAgICAvKipcclxuICAgICAgICogaW5jcmVhc2UgeS1zY2FsZSBzbyB0aGF0IHZhbHVlcyB3b250IGNyb3NzIG9yIGV4Y2VlZCBvdXQgb2YgcmFuZ2VcclxuICAgICAgICogdXNlZCBpbiB3ZWVrbHkgY2hhcnRzXHJcbiAgICAgICAqL1xyXG4gICAgICBtYXhWYWx1ZSA9IG1heFZhbHVlICogdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uY3VzdG9tWXNjYWxlO1xyXG4gICAgfVxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YSAmJlxyXG4gICAgICBtYXhWYWx1ZSA8IHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLnRhcmdldFxyXG4gICAgKSB7XHJcbiAgICAgIG1heFZhbHVlID1cclxuICAgICAgICBtYXhWYWx1ZSA8IDEwICYmIHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLnRhcmdldCA8IDEwXHJcbiAgICAgICAgICA/IHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLnRhcmdldCArIDNcclxuICAgICAgICAgIDogdGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEudGFyZ2V0ICsgMjA7XHJcbiAgICB9XHJcbiAgICB5LmRvbWFpbihbMCwgbWF4VmFsdWVdKS5uaWNlKCk7XHJcbiAgICBsZXQgbGluZVlzY2FsZTtcclxuXHJcbiAgICBpZiAobGluZURhdGEgIT0gbnVsbCkge1xyXG4gICAgICBsZXQgbWF4TGluZVZhbHVlID0gZDMubWF4KGxpbmVEYXRhLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgIHJldHVybiArZC52YWx1ZTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBtYXhMaW5lVmFsdWUgPSBtYXhMaW5lVmFsdWUgKiB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5jdXN0b21Zc2NhbGU7XHJcblxyXG4gICAgICBsZXQgbWluTGluZVZhbHVlID0gZDMubWluKGxpbmVEYXRhLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgIHJldHVybiArZC52YWx1ZTtcclxuICAgICAgfSk7XHJcbiAgICAgIGlmIChtYXhMaW5lVmFsdWUgPiAwKSBtaW5MaW5lVmFsdWUgPSBtaW5MaW5lVmFsdWUgLSAzO1xyXG4gICAgICBpZiAobWluTGluZVZhbHVlID4gMCkge1xyXG4gICAgICAgIG1pbkxpbmVWYWx1ZSA9IDA7XHJcbiAgICAgIH1cclxuICAgICAgbGluZVlzY2FsZSA9IGQzXHJcbiAgICAgICAgLnNjYWxlTGluZWFyKClcclxuICAgICAgICAuZG9tYWluKFttaW5MaW5lVmFsdWUsIG1heExpbmVWYWx1ZV0pXHJcbiAgICAgICAgLnJhbmdlKFtoZWlnaHQsIG1pbkxpbmVWYWx1ZV0pO1xyXG4gICAgfVxyXG4gICAgbGV0IHlMaW5lQXhpcztcclxuICAgIGlmIChsaW5lWXNjYWxlICE9IG51bGwpIHtcclxuICAgICAgeUxpbmVBeGlzID0gZDNcclxuICAgICAgICAuYXhpc1JpZ2h0KGxpbmVZc2NhbGUpXHJcbiAgICAgICAgLnRpY2tzKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLm51bWJlck9mWVRpY2tzKVxyXG4gICAgICAgIC50aWNrU2l6ZSgwKVxyXG4gICAgICAgIC50aWNrRm9ybWF0KHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnlMaW5lQXhpc0xhYmVsRm9tYXR0ZXIpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBzaG93IHgtYXhpcyBncmlkIGJldHdlZW4gbGFiZWxzXHJcbiAgICAgKiB1c2VkIGJ5IHdlZWtseSBjaGFydHNcclxuICAgICAqL1xyXG4gICAgaWYgKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmlzWGdyaWRCZXR3ZWVuTGFiZWxzKSB7XHJcbiAgICAgIHN2Z1xyXG4gICAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAgIC5hdHRyKCdjbGFzcycsICdncmlkJylcclxuICAgICAgICAuYXR0cihcclxuICAgICAgICAgICd0cmFuc2Zvcm0nLFxyXG4gICAgICAgICAgJ3RyYW5zbGF0ZSgnICsgeC5iYW5kd2lkdGgoKSAvIDIgKyAnLCcgKyBoZWlnaHQgKyAnKSdcclxuICAgICAgICApXHJcbiAgICAgICAgLmNhbGwoZDMuYXhpc0JvdHRvbSh4KS50aWNrU2l6ZSgtaGVpZ2h0KS50aWNrRm9ybWF0KCcnKSlcclxuICAgICAgICAuc3R5bGUoJ3N0cm9rZS1kYXNoYXJyYXknLCAnNSA1JylcclxuICAgICAgICAuc3R5bGUoJ2NvbG9yJywgJ3ZhcigtLWNoYXJ0LWdyaWQtY29sb3IsICM5OTk5OTkpJykgLy8gVXNlIENTUyB2YXJpYWJsZVxyXG4gICAgICAgIC5jYWxsKChnKSA9PiBnLnNlbGVjdCgnLmRvbWFpbicpLnJlbW92ZSgpKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24ueUF4aXNHcmlkKSB7XHJcbiAgICAgIHN2Z1xyXG4gICAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAgIC5jYWxsKFxyXG4gICAgICAgICAgZDNcclxuICAgICAgICAgICAgLmF4aXNMZWZ0KHkpXHJcbiAgICAgICAgICAgIC50aWNrcyhzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5udW1iZXJPZllUaWNrcylcclxuICAgICAgICAgICAgLnRpY2tTaXplKC13aWR0aClcclxuICAgICAgICApXHJcbiAgICAgICAgLnN0eWxlKCdjb2xvcicsICd2YXIoLS1jaGFydC1heGlzLWNvbG9yLCAjQjlCOUI5KScpXHJcbiAgICAgICAgLnN0eWxlKCdvcGFjaXR5JywgJzAuNScpXHJcbiAgICAgICAgLmNhbGwoKGcpID0+IHtcclxuICAgICAgICAgIGcuc2VsZWN0KCcuZG9tYWluJylcclxuICAgICAgICAgICAgLnJlbW92ZSgpXHJcbiAgICAgICAgICAgIC5zdHlsZSgnc3Ryb2tlJywgJ3ZhcigtLWNoYXJ0LWRvbWFpbi1jb2xvciwgIzAwMDAwMCknKTsgLy8gQWRkIENTUyB2YXJpYWJsZSBmb3IgZG9tYWluXHJcbiAgICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzdmdcclxuICAgICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgICAuY2FsbChkMy5heGlzTGVmdCh5KS50aWNrcyhzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5udW1iZXJPZllUaWNrcykpXHJcbiAgICAgICAgLnN0eWxlKCdjb2xvcicsICd2YXIoLS1jaGFydC1heGlzLWNvbG9yLCAjQjlCOUI5KScpXHJcbiAgICAgICAgLnN0eWxlKCdvcGFjaXR5JywgJzAuNScpXHJcbiAgICAgICAgLmNhbGwoKGcpID0+IHtcclxuICAgICAgICAgIGcuc2VsZWN0KCcuZG9tYWluJylcclxuICAgICAgICAgICAgLnN0eWxlKCdzdHJva2UnLCAndmFyKC0tY2hhcnQtZG9tYWluLWNvbG9yLCAjMDAwMDAwKScpIC8vIEFkZCBDU1MgdmFyaWFibGUgZm9yIGRvbWFpblxyXG4gICAgICAgICAgICAuc3R5bGUoJ3N0cm9rZS13aWR0aCcsICcxcHgnKTsgLy8gRW5zdXJlIHZpc2liaWxpdHlcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgeFN1Ymdyb3VwID0gZDMuc2NhbGVCYW5kKCkuZG9tYWluKHN1Ymdyb3Vwcyk7XHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNNdWx0aUNoYXJ0R3JpZExpbmUgPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHhTdWJncm91cC5yYW5nZShbMCwgeC5iYW5kd2lkdGgoKV0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLyoqXHJcbiAgICAgICAqIHVzZWQgdG8gbWFrZSBncm91cGVkIGJhcnMgd2l0aCBsZXNzZXIgd2lkdGggYXMgd2UgYXJlIG5vdCB1c2luZyBwYWRkaW5nIGZvciB3aWR0aFxyXG4gICAgICAgKiB1c2VkIGJ5IHdlZWtseSBjaGFydHNcclxuICAgICAgICovXHJcbiAgICAgIHhTdWJncm91cC5yYW5nZShbMCwgeC5iYW5kd2lkdGgoKV0pO1xyXG4gICAgfVxyXG4gICAgLy8gaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzRHJpbGxkb3duQ2hhcnQpIHtcclxuXHJcbiAgICAvLyB9XHJcbiAgICB2YXIgY29sb3IgPSBkM1xyXG4gICAgICAuc2NhbGVPcmRpbmFsKClcclxuICAgICAgLmRvbWFpbihzdWJncm91cHMpXHJcbiAgICAgIC5yYW5nZShPYmplY3QudmFsdWVzKG1ldGFEYXRhLmNvbG9ycykpO1xyXG4gICAgLy8gdmFyIGNvbG9yQWJvdmVUYXJnZXQgPSBkM1xyXG4gICAgLy8gICAuc2NhbGVPcmRpbmFsKClcclxuICAgIC8vICAgLmRvbWFpbihzdWJncm91cHMpXHJcbiAgICAvLyAgIC5yYW5nZShPYmplY3QudmFsdWVzKG1ldGFEYXRhLmNvbG9yQWJvdmVUYXJnZXQpKTtcclxuICAgIHZhciBzdGF0ZSA9IHN2Z1xyXG4gICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgLnNlbGVjdEFsbCgnLnN0YXRlJylcclxuICAgICAgLmRhdGEoZGF0YSlcclxuICAgICAgLmVudGVyKClcclxuICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgIHJldHVybiAndHJhbnNsYXRlKCcgKyB4KGQubmFtZSkgKyAnLDApJztcclxuICAgICAgfSk7XHJcbiAgICBzdGF0ZVxyXG4gICAgICAuc2VsZWN0QWxsKCdyZWN0JylcclxuICAgICAgLmRhdGEoZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICBsZXQgbmV3TGlzdDogYW55ID0gW107XHJcbiAgICAgICAgc3ViZ3JvdXBzLm1hcChmdW5jdGlvbiAoa2V5KSB7XHJcbiAgICAgICAgICAvLyBpZiAoa2V5ICE9PSBcImdyb3VwXCIpIHtcclxuICAgICAgICAgIGxldCBvYmo6IGFueSA9IHsga2V5OiBrZXksIHZhbHVlOiBkW2tleV0sIG5hbWU6IGQubmFtZSB9O1xyXG4gICAgICAgICAgbmV3TGlzdC5wdXNoKG9iaik7XHJcbiAgICAgICAgICAvLyB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIG5ld0xpc3Q7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5lbnRlcigpXHJcbiAgICAgIC5hcHBlbmQoJ3JlY3QnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnYmFycycpXHJcbiAgICAgIC5vbignY2xpY2snLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgIGlmIChkLmtleSAhPSAnVGFyZ2V0Jykge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAhbWV0YURhdGEuYmFyV2l0aG91dENsaWNrIHx8XHJcbiAgICAgICAgICAgICFtZXRhRGF0YS5iYXJXaXRob3V0Q2xpY2subGVuZ3RoIHx8XHJcbiAgICAgICAgICAgICghbWV0YURhdGEuYmFyV2l0aG91dENsaWNrLmluY2x1ZGVzKGQ/Lm5hbWUpICYmXHJcbiAgICAgICAgICAgICAgIW1ldGFEYXRhLmJhcldpdGhvdXRDbGljay5pbmNsdWRlcyhkPy5rZXkpKVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgICAvLyBzZWxmLmhhbmRsZUNsaWNrKGQuZGF0YS5uYW1lKTtcclxuICAgICAgICAgICAgc2VsZi5oYW5kbGVDbGljayhkKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIC5hdHRyKCd4JywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICBpZiAoc2VsZi5jaGFydENvbmZpZ3VyYXRpb24uaXNEcmlsbGRvd25DaGFydCkge1xyXG4gICAgICAgICAgZGF0YS5tYXAoKGluZGl2OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKGluZGl2Lm5hbWUgPT0gZC5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyhpbmRpdikuZmlsdGVyKCh0ZW1wLCBpKSA9PiBpICE9IDApO1xyXG4gICAgICAgICAgICAgIHRlbXBTY2FsZSA9IGQzLnNjYWxlQmFuZCgpLmRvbWFpbihrZXlzKS5yYW5nZShbMCwgeC5iYW5kd2lkdGgoKV0pO1xyXG4gICAgICAgICAgICAgIGlmICh4LmJhbmR3aWR0aCgpID4gMTAwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5jaGFydERhdGEuZGF0YS5sZW5ndGggPT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMoc2VsZi5jaGFydERhdGEuZGF0YVswXSkubGVuZ3RoID09IDIpIHtcclxuICAgICAgICAgICAgICAgICAgICB0ZW1wU2NhbGUucmFuZ2UoW1xyXG4gICAgICAgICAgICAgICAgICAgICAgMCArICh4LmJhbmR3aWR0aCgpIC0gMTI1KSAvIDIsXHJcbiAgICAgICAgICAgICAgICAgICAgICB4LmJhbmR3aWR0aCgpIC0gKHguYmFuZHdpZHRoKCkgLSAxMjUpIC8gMixcclxuICAgICAgICAgICAgICAgICAgICBdKTtcclxuICAgICAgICAgICAgICAgICAgICAvLyAucGFkZGluZygwLjA1KTtcclxuICAgICAgICAgICAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcFNjYWxlLnJhbmdlKFtcclxuICAgICAgICAgICAgICAgICAgICAgIDAgKyAoeC5iYW5kd2lkdGgoKSAtIDEyNSkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgeC5iYW5kd2lkdGgoKSAtICh4LmJhbmR3aWR0aCgpIC0gMTI1KSAvIDIsXHJcbiAgICAgICAgICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgICAgICAgICAgIC8vIC5wYWRkaW5nKDAuMDUpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICAgICAgICAgIHRlbXBTY2FsZS5yYW5nZShbXHJcbiAgICAgICAgICAgICAgICAgICAgMCArICh4LmJhbmR3aWR0aCgpIC0gMTI1KSAvIDIsXHJcbiAgICAgICAgICAgICAgICAgICAgeC5iYW5kd2lkdGgoKSAtICh4LmJhbmR3aWR0aCgpIC0gMTI1KSAvIDIsXHJcbiAgICAgICAgICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICByZXR1cm4gdGVtcFNjYWxlKGQua2V5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHhTdWJncm91cChkLmtleSk7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5hdHRyKCd5JywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICBpZiAoZC52YWx1ZSA9PSAtMSkge1xyXG4gICAgICAgICAgcmV0dXJuIHkoMCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZC52YWx1ZSA+PSAwKSB7XHJcbiAgICAgICAgICBjb25zdCBiYXJIZWlnaHQgPSBoZWlnaHQgLSB5KGQudmFsdWUpO1xyXG4gICAgICAgICAgY29uc3QgbWluSGVpZ2h0ID0gc2VsZi5jaGFydENvbmZpZ3VyYXRpb24uZGVmYXVsdEJhckhlaWdodCB8fCAyO1xyXG4gICAgICAgICAgcmV0dXJuIGJhckhlaWdodCA8IG1pbkhlaWdodCA/IHkoMCkgLSBtaW5IZWlnaHQgOiB5KGQudmFsdWUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHkoMCk7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5hdHRyKCd3aWR0aCcsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgaWYgKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmlzRHJpbGxkb3duQ2hhcnQpIHtcclxuICAgICAgICAgIC8vIHZhciB0ZW1wU2NhbGU7XHJcblxyXG4gICAgICAgICAgZGF0YS5tYXAoKGluZGl2OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKGluZGl2Lm5hbWUgPT0gZC5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyhpbmRpdikuZmlsdGVyKCh0ZW1wLCBpKSA9PiBpICE9IDApO1xyXG4gICAgICAgICAgICAgIHZhciB0ZW1wO1xyXG4gICAgICAgICAgICAgIHRlbXBTY2FsZSA9IGQzLnNjYWxlQmFuZCgpLmRvbWFpbihrZXlzKS5yYW5nZShbMCwgeC5iYW5kd2lkdGgoKV0pO1xyXG4gICAgICAgICAgICAgIGlmICh4LmJhbmR3aWR0aCgpID4gMTAwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5jaGFydERhdGEuZGF0YS5sZW5ndGggPT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMoc2VsZi5jaGFydERhdGEuZGF0YVswXSkubGVuZ3RoID09IDIpIHtcclxuICAgICAgICAgICAgICAgICAgICB0ZW1wU2NhbGUucmFuZ2UoW1xyXG4gICAgICAgICAgICAgICAgICAgICAgMCArICh4LmJhbmR3aWR0aCgpIC0gMTI1KSAvIDIsXHJcbiAgICAgICAgICAgICAgICAgICAgICB4LmJhbmR3aWR0aCgpIC0gKHguYmFuZHdpZHRoKCkgLSAxMjUpIC8gMixcclxuICAgICAgICAgICAgICAgICAgICBdKTtcclxuICAgICAgICAgICAgICAgICAgICAvLyAucGFkZGluZygwLjA1KTtcclxuICAgICAgICAgICAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcFNjYWxlLnJhbmdlKFtcclxuICAgICAgICAgICAgICAgICAgICAgIDAgKyAoeC5iYW5kd2lkdGgoKSAtIDEyNSkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgeC5iYW5kd2lkdGgoKSAtICh4LmJhbmR3aWR0aCgpIC0gMTI1KSAvIDIsXHJcbiAgICAgICAgICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgICAgICAgICAgIC8vIC5wYWRkaW5nKDAuMDUpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICAgICAgICAgIHRlbXBTY2FsZS5yYW5nZShbXHJcbiAgICAgICAgICAgICAgICAgICAgMCArICh4LmJhbmR3aWR0aCgpIC0gMTI1KSAvIDIsXHJcbiAgICAgICAgICAgICAgICAgICAgeC5iYW5kd2lkdGgoKSAtICh4LmJhbmR3aWR0aCgpIC0gMTI1KSAvIDIsXHJcbiAgICAgICAgICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICByZXR1cm4gc2VsZi5pc1pvb21lZE91dFxyXG4gICAgICAgICAgICA/IHRlbXBTY2FsZS5iYW5kd2lkdGgoKVxyXG4gICAgICAgICAgICA6IHNlbGYuY2hhcnREYXRhLmRhdGEubGVuZ3RoICYmIHNlbGYuY2hhcnREYXRhLmRhdGEubGVuZ3RoID4gOFxyXG4gICAgICAgICAgICA/IHRlbXBTY2FsZS5iYW5kd2lkdGgoKSAqIDAuNVxyXG4gICAgICAgICAgICA6IHRlbXBTY2FsZS5iYW5kd2lkdGgoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHNlbGYuaXNab29tZWRPdXRcclxuICAgICAgICAgID8gdGVtcFNjYWxlLmJhbmR3aWR0aCgpXHJcbiAgICAgICAgICA6IHNlbGYuY2hhcnREYXRhLmRhdGEubGVuZ3RoICYmIHNlbGYuY2hhcnREYXRhLmRhdGEubGVuZ3RoID4gOFxyXG4gICAgICAgICAgPyB0ZW1wU2NhbGUuYmFuZHdpZHRoKCkgKiAwLjVcclxuICAgICAgICAgIDogdGVtcFNjYWxlLmJhbmR3aWR0aCgpO1xyXG4gICAgICB9KVxyXG4gICAgICAuYXR0cignaGVpZ2h0JywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICBpZiAoZC52YWx1ZSA9PSAtMSkge1xyXG4gICAgICAgICAgcmV0dXJuIGhlaWdodCAtIHkoMCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZC52YWx1ZSA+PSAwKSB7XHJcbiAgICAgICAgICBjb25zdCBiYXJIZWlnaHQgPSBoZWlnaHQgLSB5KGQudmFsdWUpO1xyXG4gICAgICAgICAgY29uc3QgbWluSGVpZ2h0ID0gc2VsZi5jaGFydENvbmZpZ3VyYXRpb24uZGVmYXVsdEJhckhlaWdodCB8fCAyO1xyXG4gICAgICAgICAgcmV0dXJuIE1hdGgubWF4KGJhckhlaWdodCwgbWluSGVpZ2h0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBoZWlnaHQgLSB5KDApO1xyXG4gICAgICB9KVxyXG4gICAgICAuc3R5bGUoJ2N1cnNvcicsICgpID0+XHJcbiAgICAgICAgc2VsZi5jaGFydERhdGEubWV0YURhdGEuaGFzRHJpbGxEb3duID8gJ3BvaW50ZXInIDogJ2RlZmF1bHQnXHJcbiAgICAgIClcclxuICAgICAgLmF0dHIoJ2ZpbGwnLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGQudmFsdWUgJiZcclxuICAgICAgICAgIHNlbGYuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhICYmXHJcbiAgICAgICAgICBkLnZhbHVlID49IHBhcnNlSW50KHNlbGYuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLnRhcmdldCkgJiZcclxuICAgICAgICAgIHNlbGYuY2hhcnREYXRhLm1ldGFEYXRhLmNvbG9yQWJvdmVUYXJnZXRcclxuICAgICAgICApXHJcbiAgICAgICAgICByZXR1cm4gc2VsZi5jaGFydERhdGEubWV0YURhdGEuY29sb3JBYm92ZVRhcmdldFtkLmtleV07XHJcbiAgICAgICAgcmV0dXJuIHNlbGYuY2hhcnREYXRhLm1ldGFEYXRhLmNvbG9yc1tkLmtleV07XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogZGlzcGxheSBhbmdsZWQgdGV4dHMgb24gdGhlIGJhcnNcclxuICAgICAqL1xyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnRleHRzT25CYXIgIT0gdW5kZWZpbmVkICYmICF0aGlzLmlzWm9vbWVkT3V0KSB7XHJcbiAgICAgIHN0YXRlXHJcbiAgICAgICAgLnNlbGVjdEFsbCgndGV4dCcpXHJcbiAgICAgICAgLmRhdGEoZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgIGxldCBuZXdMaXN0OiBhbnkgPSBbXTtcclxuICAgICAgICAgIHN1Ymdyb3Vwcy5tYXAoZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgICAgICBsZXQgb2JqOiBhbnkgPSB7IGtleToga2V5LCB2YWx1ZTogZFtrZXldLCBuYW1lOiBkLm5hbWUgfTtcclxuICAgICAgICAgICAgbmV3TGlzdC5wdXNoKG9iaik7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHJldHVybiBuZXdMaXN0O1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmVudGVyKClcclxuICAgICAgICAuYXBwZW5kKCd0ZXh0JylcclxuICAgICAgICAuYXR0cignZmlsbCcsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpXHJcbiAgICAgICAgLmF0dHIoJ3gnLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuYXR0cigneScsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5hdHRyKCdjbGFzcycsICdsaWItZGF0YS1sYWJlbHMtd2Vla2x5Y2hhcnRzJylcclxuICAgICAgICAudGV4dChmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgcmV0dXJuIGQua2V5ICYmIGQudmFsdWVcclxuICAgICAgICAgICAgPyBkLmtleS5sZW5ndGggPiAyMFxyXG4gICAgICAgICAgICAgID8gZC5rZXkuc3Vic3RyaW5nKDAsIDE3KSArICcuLi4nXHJcbiAgICAgICAgICAgICAgOiBkLmtleVxyXG4gICAgICAgICAgICA6ICcnO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLnN0eWxlKCdmaWxsJywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgIHJldHVybiAnIzAwMCc7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuc3R5bGUoJ2ZvbnQtd2VpZ2h0JywgJ2JvbGQnKVxyXG4gICAgICAgIC5zdHlsZSgnZm9udC1zaXplJywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgIGlmIChzZWxmLmlzWm9vbWVkT3V0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnOXB4JzsgLy8g8J+RiCBab29tZWQgb3V0IG1vZGVcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAoc2VsZi5jaGFydENvbmZpZ3VyYXRpb24uaXNEcmlsbGRvd25DaGFydCkge1xyXG4gICAgICAgICAgICBpZiAod2luZG93LmlubmVyV2lkdGggPiAxOTAwKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuICcxOHB4JztcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA8IDE0MDApIHtcclxuICAgICAgICAgICAgICByZXR1cm4gJzEwcHgnO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHJldHVybiAnMTRweCc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnMTRweCc7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuYXR0cigndHJhbnNmb3JtJywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgIGRhdGEubWFwKChpbmRpdjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChpbmRpdi5uYW1lID09IGQubmFtZSkge1xyXG4gICAgICAgICAgICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMoaW5kaXYpLmZpbHRlcigodGVtcCwgaSkgPT4gaSAhPSAwKTtcclxuICAgICAgICAgICAgICB2YXIgdGVtcDtcclxuICAgICAgICAgICAgICB0ZW1wU2NhbGUgPSBkMy5zY2FsZUJhbmQoKS5kb21haW4oa2V5cykucmFuZ2UoWzAsIHguYmFuZHdpZHRoKCldKTtcclxuICAgICAgICAgICAgICBpZiAoeC5iYW5kd2lkdGgoKSA+IDEwMCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuY2hhcnREYXRhLmRhdGEubGVuZ3RoID09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHNlbGYuY2hhcnREYXRhLmRhdGFbMF0pLmxlbmd0aCA9PSAyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcFNjYWxlLnJhbmdlKFtcclxuICAgICAgICAgICAgICAgICAgICAgIDAgKyAoeC5iYW5kd2lkdGgoKSAtIDIwMCkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgeC5iYW5kd2lkdGgoKSAtICh4LmJhbmR3aWR0aCgpIC0gMjAwKSAvIDIsXHJcbiAgICAgICAgICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gLnBhZGRpbmcoMC4wNSk7XHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIHRlbXBTY2FsZS5yYW5nZShbXHJcbiAgICAgICAgICAgICAgICAgICAgICAwICsgKHguYmFuZHdpZHRoKCkgLSAzMDApIC8gMixcclxuICAgICAgICAgICAgICAgICAgICAgIHguYmFuZHdpZHRoKCkgLSAoeC5iYW5kd2lkdGgoKSAtIDMwMCkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgICAgICAgICAvLyAucGFkZGluZygwLjA1KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZVxyXG4gICAgICAgICAgICAgICAgICB0ZW1wU2NhbGUucmFuZ2UoW1xyXG4gICAgICAgICAgICAgICAgICAgIDAgKyAoeC5iYW5kd2lkdGgoKSAtIDEyNSkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgIHguYmFuZHdpZHRoKCkgLSAoeC5iYW5kd2lkdGgoKSAtIDEyNSkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICBdKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgKiBpZiBzZXQsIHRoZW4gYWxsIHRleHRzIGxsIGJlIGhvcml6b250YWxcclxuICAgICAgICAgICAqL1xyXG4gICAgICAgICAgaWYgKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnRleHRBbHdheXNIb3Jpem9udGFsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgJ3RyYW5zbGF0ZSgnICsgeFN1Ymdyb3VwKGQua2V5KSArICcsJyArICh5KGQudmFsdWUpIC0gMykgKyAnKSdcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICogcm90YXRlIHRleHRzIGhhdmluZyBtb3JlIHRoYW4gb25lIGRpZ2l0c1xyXG4gICAgICAgICAgICovXHJcbiAgICAgICAgICAvLyBpZiAoZC52YWx1ZSA+IDkpXHJcbiAgICAgICAgICBpZiAoIWlzTmFOKHRlbXBTY2FsZShkLmtleSkpKVxyXG4gICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICd0cmFuc2xhdGUoJyArXHJcbiAgICAgICAgICAgICAgKHRlbXBTY2FsZShkLmtleSkgKyB0ZW1wU2NhbGUuYmFuZHdpZHRoKCkgKiAwLjU1KSArXHJcbiAgICAgICAgICAgICAgJywnICtcclxuICAgICAgICAgICAgICAoeSgwKSAtIDEwKSArXHJcbiAgICAgICAgICAgICAgJykgcm90YXRlKDI3MCknXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICByZXR1cm4gJ3RyYW5zbGF0ZSgwLDApJztcclxuICAgICAgICAgIC8vIGVsc2VcclxuICAgICAgICAgIC8vICAgcmV0dXJuIChcclxuICAgICAgICAgIC8vICAgICAndHJhbnNsYXRlKCcgK1xyXG4gICAgICAgICAgLy8gICAgICh0ZW1wU2NhbGUoZC5rZXkpICsgdGVtcFNjYWxlLmJhbmR3aWR0aCgpIC8gMikgK1xyXG4gICAgICAgICAgLy8gICAgICcsJyArXHJcbiAgICAgICAgICAvLyAgICAgeSgwKSArXHJcbiAgICAgICAgICAvLyAgICAgJyknXHJcbiAgICAgICAgICAvLyAgICk7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAub24oJ2NsaWNrJywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgIW1ldGFEYXRhLmJhcldpdGhvdXRDbGljayB8fFxyXG4gICAgICAgICAgICAhbWV0YURhdGEuYmFyV2l0aG91dENsaWNrLmxlbmd0aCB8fFxyXG4gICAgICAgICAgICAoIW1ldGFEYXRhLmJhcldpdGhvdXRDbGljay5pbmNsdWRlcyhkPy5uYW1lKSAmJlxyXG4gICAgICAgICAgICAgICFtZXRhRGF0YS5iYXJXaXRob3V0Q2xpY2suaW5jbHVkZXMoZD8ua2V5KSlcclxuICAgICAgICAgIClcclxuICAgICAgICAgICAgc2VsZi5oYW5kbGVDbGljayhkKTtcclxuICAgICAgICB9KTtcclxuICAgICAgc3RhdGVcclxuICAgICAgICAuc2VsZWN0QWxsKCcubGliLWRhdGEtbGFiZWxzLXdlZWtseWNoYXJ0cycpXHJcbiAgICAgICAgLm9uKCdtb3VzZW91dCcsIGhhbmRsZU1vdXNlT3V0KVxyXG4gICAgICAgIC5vbignbW91c2VvdmVyJywgaGFuZGxlTW91c2VPdmVyKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5kaXNwbGF5VGl0bGVPblRvcCkge1xyXG4gICAgICBzdGF0ZVxyXG4gICAgICAgIC5zZWxlY3RBbGwoJ3JlY3QnKVxyXG4gICAgICAgIC5vbignbW91c2VvdXQnLCBoYW5kbGVNb3VzZU91dClcclxuICAgICAgICAub24oJ21vdXNlb3ZlcicsIGhhbmRsZU1vdXNlT3Zlcik7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBoYW5kbGVNb3VzZU92ZXIoZCwgaSkge1xyXG4gICAgICBzdmdcclxuICAgICAgICAuYXBwZW5kKCdmb3JlaWduT2JqZWN0JylcclxuICAgICAgICAuYXR0cigneCcsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgIC8vIC4uLmV4aXN0aW5nIGNvZGUgZm9yIHRlbXBTY2FsZSBjYWxjdWxhdGlvbi4uLlxyXG4gICAgICAgICAgdmFyIGVsZW1lbnRzQ291bnRlcjtcclxuICAgICAgICAgIGRhdGEubWFwKChpbmRpdjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChpbmRpdi5uYW1lID09IGQubmFtZSkge1xyXG4gICAgICAgICAgICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMoaW5kaXYpLmZpbHRlcigodGVtcCwgaSkgPT4gaSAhPSAwKTtcclxuICAgICAgICAgICAgICBlbGVtZW50c0NvdW50ZXIgPSBrZXlzLmxlbmd0aDtcclxuICAgICAgICAgICAgICB0ZW1wU2NhbGUgPSBkMy5zY2FsZUJhbmQoKS5kb21haW4oa2V5cykucmFuZ2UoWzAsIHguYmFuZHdpZHRoKCldKTtcclxuICAgICAgICAgICAgICBpZiAoeC5iYW5kd2lkdGgoKSA+IDEwMCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuY2hhcnREYXRhLmRhdGEubGVuZ3RoID09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHNlbGYuY2hhcnREYXRhLmRhdGFbMF0pLmxlbmd0aCA9PSAyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcFNjYWxlLnJhbmdlKFtcclxuICAgICAgICAgICAgICAgICAgICAgIDAgKyAoeC5iYW5kd2lkdGgoKSAtIDIwMCkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgeC5iYW5kd2lkdGgoKSAtICh4LmJhbmR3aWR0aCgpIC0gMjAwKSAvIDIsXHJcbiAgICAgICAgICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIHRlbXBTY2FsZS5yYW5nZShbXHJcbiAgICAgICAgICAgICAgICAgICAgICAwICsgKHguYmFuZHdpZHRoKCkgLSAzMDApIC8gMixcclxuICAgICAgICAgICAgICAgICAgICAgIHguYmFuZHdpZHRoKCkgLSAoeC5iYW5kd2lkdGgoKSAtIDMwMCkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICAgICAgICAgIHRlbXBTY2FsZS5yYW5nZShbXHJcbiAgICAgICAgICAgICAgICAgICAgMCArICh4LmJhbmR3aWR0aCgpIC0gMTI1KSAvIDIsXHJcbiAgICAgICAgICAgICAgICAgICAgeC5iYW5kd2lkdGgoKSAtICh4LmJhbmR3aWR0aCgpIC0gMTI1KSAvIDIsXHJcbiAgICAgICAgICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBpZiAobWV0YURhdGEuaGFzRHJpbGxEb3duKSB7XHJcbiAgICAgICAgICAgIGlmICh0ZW1wU2NhbGUuYmFuZHdpZHRoKCkgKyBsZWZ0QW5kUmlnaHRTcGFjZXMgKiAyID4gMTgwKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgIHgoZC5uYW1lKSArIHRlbXBTY2FsZShkLmtleSkgKyB0ZW1wU2NhbGUuYmFuZHdpZHRoKCkgLyAyIC0gOTBcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgeChkLm5hbWUpICtcclxuICAgICAgICAgICAgICB0ZW1wU2NhbGUoZC5rZXkpIC1cclxuICAgICAgICAgICAgICAodGVtcFNjYWxlLmJhbmR3aWR0aCgpICsgbGVmdEFuZFJpZ2h0U3BhY2VzICogMikgLyAyICtcclxuICAgICAgICAgICAgICB0ZW1wU2NhbGUuYmFuZHdpZHRoKCkgLyAyXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9IGVsc2UgcmV0dXJuIHgoZC5uYW1lKSArIHRlbXBTY2FsZShkLmtleSkgLSAodGVtcFNjYWxlLmJhbmR3aWR0aCgpICsgbGVmdEFuZFJpZ2h0U3BhY2VzICogMikgLyAyICsgdGVtcFNjYWxlLmJhbmR3aWR0aCgpIC8gMjtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5hdHRyKCdjbGFzcycsICdsaWItdmVydGljYWxzdGFjay10aXRsZS1vbnRvcCcpXHJcbiAgICAgICAgLmF0dHIoJ3knLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICByZXR1cm4geShkLnZhbHVlKSAtIDMgLSA0MCAtIDEwO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmF0dHIoJ2R5JywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgcmV0dXJuIGQuY2xhc3M7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuYXR0cignd2lkdGgnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICBkYXRhLm1hcCgoaW5kaXY6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoaW5kaXYubmFtZSA9PSBkLm5hbWUpIHtcclxuICAgICAgICAgICAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzKGluZGl2KS5maWx0ZXIoKHRlbXAsIGkpID0+IGkgIT0gMCk7XHJcbiAgICAgICAgICAgICAgdGVtcFNjYWxlID0gZDMuc2NhbGVCYW5kKCkuZG9tYWluKGtleXMpLnJhbmdlKFswLCB4LmJhbmR3aWR0aCgpXSk7XHJcbiAgICAgICAgICAgICAgaWYgKHguYmFuZHdpZHRoKCkgPiAxMDApIHtcclxuICAgICAgICAgICAgICAgIGlmIChzZWxmLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCA9PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhzZWxmLmNoYXJ0RGF0YS5kYXRhWzBdKS5sZW5ndGggPT0gMikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRlbXBTY2FsZS5yYW5nZShbXHJcbiAgICAgICAgICAgICAgICAgICAgICAwICsgKHguYmFuZHdpZHRoKCkgLSAyMDApIC8gMixcclxuICAgICAgICAgICAgICAgICAgICAgIHguYmFuZHdpZHRoKCkgLSAoeC5iYW5kd2lkdGgoKSAtIDIwMCkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgICAgICAgICB9IGVsc2VcclxuICAgICAgICAgICAgICAgICAgICB0ZW1wU2NhbGUucmFuZ2UoW1xyXG4gICAgICAgICAgICAgICAgICAgICAgMCArICh4LmJhbmR3aWR0aCgpIC0gMzAwKSAvIDIsXHJcbiAgICAgICAgICAgICAgICAgICAgICB4LmJhbmR3aWR0aCgpIC0gKHguYmFuZHdpZHRoKCkgLSAzMDApIC8gMixcclxuICAgICAgICAgICAgICAgICAgICBdKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZVxyXG4gICAgICAgICAgICAgICAgICB0ZW1wU2NhbGUucmFuZ2UoW1xyXG4gICAgICAgICAgICAgICAgICAgIDAgKyAoeC5iYW5kd2lkdGgoKSAtIDEyNSkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgIHguYmFuZHdpZHRoKCkgLSAoeC5iYW5kd2lkdGgoKSAtIDEyNSkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICBdKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgaWYgKG1ldGFEYXRhLmhhc0RyaWxsRG93bikge1xyXG4gICAgICAgICAgICBpZiAodGVtcFNjYWxlLmJhbmR3aWR0aCgpICsgbGVmdEFuZFJpZ2h0U3BhY2VzICogMiA+IDE4MCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiAnMTgwcHgnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0ZW1wU2NhbGUuYmFuZHdpZHRoKCkgKyBsZWZ0QW5kUmlnaHRTcGFjZXMgKiAyO1xyXG4gICAgICAgICAgfSBlbHNlIHJldHVybiB0ZW1wU2NhbGUuYmFuZHdpZHRoKCkgKyBsZWZ0QW5kUmlnaHRTcGFjZXMgKiAyO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmF0dHIoJ2hlaWdodCcsIDQwKVxyXG4gICAgICAgIC5hcHBlbmQoJ3hodG1sOmRpdicpXHJcbiAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ3RpdGxlJylcclxuICAgICAgICAuc3R5bGUoJ3otaW5kZXgnLCA5OSlcclxuICAgICAgICAuaHRtbChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAvLyBTaG93IHRoZSB4LWF4aXMgbGFiZWwgKGJhciBuYW1lKSBmb3IgdGhpcyBiYXIsIG5vdCB0aGUgZGF0ZSBvciBhbnkgb3RoZXIgdmFsdWVcclxuICAgICAgICAgIGxldCBiYXJMYWJlbCA9IGQubmFtZTsgLy8gVGhpcyBpcyB0aGUgeC1heGlzIGxhYmVsIGZvciB0aGUgYmFyXHJcbiAgICAgICAgICBsZXQgZGF0YVR5cGUgPSBtZXRhRGF0YS5kYXRhVHlwZSA/IG1ldGFEYXRhLmRhdGFUeXBlIDogJyc7XHJcbiAgICAgICAgICBsZXQgdmFsdWUgPSBkLnZhbHVlO1xyXG4gICAgICAgICAgbGV0IGtleSA9IGQua2V5O1xyXG4gICAgICAgICAgLy8gVG9vbHRpcDogc2hvdyB4LWF4aXMgbGFiZWwgYW5kIHZhbHVlLCBidXQgZG8gbm90IHNob3cgZGF0ZVxyXG4gICAgICAgICAgbGV0IGRlc2lyZWRUZXh0ID1cclxuICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwidGl0bGUtYmFyLW5hbWVcIj4nICsgYmFyTGFiZWwgKyAnPC9zcGFuPic7XHJcbiAgICAgICAgICBkZXNpcmVkVGV4dCArPVxyXG4gICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJ0aXRsZS1iYXItdmFsdWVcIj48c3Bhbj4nICtcclxuICAgICAgICAgICAgdmFsdWUgK1xyXG4gICAgICAgICAgICAnPC9zcGFuPicgK1xyXG4gICAgICAgICAgICBkYXRhVHlwZSArXHJcbiAgICAgICAgICAgICc8L3NwYW4+JztcclxuICAgICAgICAgIHJldHVybiBkZXNpcmVkVGV4dDtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGhhbmRsZU1vdXNlT3V0KGQsIGkpIHtcclxuICAgICAgaWYgKCFzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5kaXNwbGF5VGl0bGVPblRvcCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBzdmcuc2VsZWN0QWxsKCcubGliLXZlcnRpY2Fsc3RhY2stdGl0bGUtb250b3AnKS5yZW1vdmUoKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogZGlzcGxheSBkYXRhIHZhbHVlcyBvbiBtb3VzZSBvdmVyXHJcbiAgICAgKiB1c2VkIGJ5IGRhc2hib2FyZCBjaGFydHNcclxuICAgICAqL1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi50ZXh0c09uQmFyID09IHVuZGVmaW5lZCAmJlxyXG4gICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5kaXNwbGF5VGl0bGVPblRvcCA9PSB1bmRlZmluZWRcclxuICAgICkge1xyXG4gICAgICBzdGF0ZVxyXG4gICAgICAgIC5zZWxlY3RBbGwoJ3JlY3QnKVxyXG4gICAgICAgIC5vbignbW91c2VvdXQnLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgc3RhdGUuc2VsZWN0QWxsKCcuYmFyc3RleHQnKS5yZW1vdmUoKTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5vbignbW91c2VvdmVyJywgZnVuY3Rpb24gKGQxKSB7XHJcbiAgICAgICAgICBzdGF0ZVxyXG4gICAgICAgICAgICAuc2VsZWN0QWxsKCd0ZXh0JylcclxuICAgICAgICAgICAgLmRhdGEoZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgICAgICBsZXQgbmV3TGlzdDogYW55ID0gW107XHJcbiAgICAgICAgICAgICAgc3ViZ3JvdXBzLm1hcChmdW5jdGlvbiAoa2V5KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgIGtleSAhPT0gJ25hbWUnICYmXHJcbiAgICAgICAgICAgICAgICAgIGQxLmtleSA9PSBrZXkgJiZcclxuICAgICAgICAgICAgICAgICAgZDEudmFsdWUgPT0gZFtrZXldICYmXHJcbiAgICAgICAgICAgICAgICAgIGQxLm5hbWUgPT0gZC5uYW1lXHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgbGV0IG9iajogYW55ID0geyBrZXk6IGtleSwgdmFsdWU6IGRba2V5XSwgbmFtZTogZC5uYW1lIH07XHJcbiAgICAgICAgICAgICAgICAgIG5ld0xpc3QucHVzaChvYmopO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIHJldHVybiBuZXdMaXN0O1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuZW50ZXIoKVxyXG4gICAgICAgICAgICAuYXBwZW5kKCd0ZXh0JylcclxuICAgICAgICAgICAgLmF0dHIoJ2ZpbGwnLCAndmFyKC0tY2hhcnQtdGV4dC1jb2xvciknKVxyXG4gICAgICAgICAgICAuYXR0cignY2xhc3MnLCAnYmFyc3RleHQnKVxyXG4gICAgICAgICAgICAuYXR0cigneCcsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHhTdWJncm91cChkLmtleSk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5hdHRyKCd5JywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgICAgICByZXR1cm4geShkLnZhbHVlKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmF0dHIoXHJcbiAgICAgICAgICAgICAgJ3N0eWxlJyxcclxuICAgICAgICAgICAgICAnZm9udC1zaXplOiAnICsgJy44NWVtJyArICc7JyArICcgZm9udC13ZWlnaHQ6JyArICdib2xkJyArICc7J1xyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIC5zdHlsZSgnZmlsbCcsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIG1ldGFEYXRhLmNvbG9yc1tkLmtleV07XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5hdHRyKFxyXG4gICAgICAgICAgICAgICd3aWR0aCcsXHJcbiAgICAgICAgICAgICAgc2VsZi5pc1pvb21lZE91dCA/IHhTdWJncm91cC5iYW5kd2lkdGgoKSA6IHhTdWJncm91cC5iYW5kd2lkdGgoKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIC50ZXh0KGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGQudmFsdWU7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgc3ZnXHJcbiAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAneDIgYXhpczInKVxyXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgwLCcgKyBoZWlnaHQgKyAnKScpXHJcbiAgICAgIC5zdHlsZSgnY29sb3InLCAndmFyKC0tY2hhcnQtYXhpcy1jb2xvciwgIzAwMCknKSAvLyBVc2UgQ1NTIHZhcmlhYmxlIGluc3RlYWQgb2YgaGFyZGNvZGVkICMwMDBcclxuICAgICAgLmNhbGwoZDMuYXhpc0JvdHRvbSh4U2NhbGVGcm9tT3JpZ2luKS50aWNrU2l6ZSgwKSlcclxuICAgICAgLmNhbGwoKGcpID0+IGcuc2VsZWN0KCcuZG9tYWluJykuYXR0cignZmlsbCcsICdub25lJykpO1xyXG4gICAgc3ZnLnNlbGVjdEFsbCgnZy54Mi5heGlzMiBnLnRpY2sgdGV4dCcpLnN0eWxlKCdkaXNwbGF5JywgJ25vbmUnKTtcclxuICAgIHN2Z1xyXG4gICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi1zdGFja2VkLXktYXhpcy10ZXh0IHlheGlzLWRhc2hlZCcpXHJcbiAgICAgIC5hdHRyKCdzdHlsZScsIHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnlBeGlzQ3VzdG9tVGV4dFN0eWxlcylcclxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoMCwwKScpXHJcbiAgICAgIC5jYWxsKHkpXHJcbiAgICAgIC5zdHlsZSgnZGlzcGxheScsICdub25lJyk7XHJcbiAgICBzdmdZQXhpc0xlZnRcclxuICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnbGliLXlheGlzLWxhYmVscy10ZXh0cy1kcmlsbGRvd24geWF4aXMtZGFzaGVkJylcclxuICAgICAgLmF0dHIoJ3N0eWxlJywgc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ueUF4aXNDdXN0b21UZXh0U3R5bGVzKVxyXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgwLDApJylcclxuICAgICAgLmNhbGwoXHJcbiAgICAgICAgZDNcclxuICAgICAgICAgIC5heGlzTGVmdCh5KVxyXG4gICAgICAgICAgLnRpY2tTaXplKDApXHJcbiAgICAgICAgICAudGlja3Moc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ubnVtYmVyT2ZZVGlja3MpXHJcbiAgICAgICAgICAudGlja0Zvcm1hdChmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWQgPSBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0xhYmVsRm9tYXR0ZXJcclxuICAgICAgICAgICAgICA/IHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnlBeGlzTGFiZWxGb21hdHRlcihkKVxyXG4gICAgICAgICAgICAgIDogZDtcclxuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdHRlZCA+PSAxMDAwID8gZm9ybWF0dGVkIC8gMTAwMCArICdrJyA6IGZvcm1hdHRlZDtcclxuICAgICAgICAgIH0pXHJcbiAgICAgIClcclxuICAgICAgLmNhbGwoKGcpID0+IHtcclxuICAgICAgICAvLyBTdHlsZSB0aGUgZG9tYWluIGxpbmUgZm9yIHRoZW1lIHN1cHBvcnRcclxuICAgICAgICBnLnNlbGVjdCgnLmRvbWFpbicpXHJcbiAgICAgICAgICAuc3R5bGUoJ3N0cm9rZScsICd2YXIoLS1jaGFydC1kb21haW4tY29sb3IsICMwMDAwMDApJylcclxuICAgICAgICAgIC5zdHlsZSgnc3Ryb2tlLXdpZHRoJywgJzFweCcpO1xyXG4gICAgICB9KVxyXG4gICAgICAuc2VsZWN0QWxsKCd0ZXh0JylcclxuICAgICAgLnN0eWxlKCdmaWxsJywgJ3ZhcigtLWNoYXJ0LXRleHQtY29sb3IpJyk7XHJcbiAgICBzdmdZQXhpc1JpZ2h0XHJcbiAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnbGliLXlheGlzLWxhYmVscy10ZXh0cy1kcmlsbGRvd24geWF4aXMtZGFzaGVkJylcclxuICAgICAgLmF0dHIoJ3N0eWxlJywgc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ueUF4aXNDdXN0b21UZXh0U3R5bGVzKVxyXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgwLDApJylcclxuICAgICAgLmNhbGwoeSlcclxuICAgICAgLnN0eWxlKCdkaXNwbGF5JywgJ25vbmUnKTtcclxuICAgIC8qKlxyXG4gICAgICogaGlkZSB4IGF4aXMgbGFiZWxzXHJcbiAgICAgKiBjb25maWcgaXMgdGhlcmUgZm9yIGZ1dHVyZSB1c2VcclxuICAgICAqIHVzZWQgYnkgd2Vla2x5IGNoYXJ0c1xyXG4gICAgICovXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzWGF4aXNMYWJlbEhpZGRlbiAhPSB1bmRlZmluZWQgJiZcclxuICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNYYXhpc0xhYmVsSGlkZGVuXHJcbiAgICApIHtcclxuICAgICAgZDMuc2VsZWN0QWxsKCdnLmxpYi1saW5lLXgtYXhpcy10ZXh0ID4gZyA+IHRleHQnKS5hdHRyKFxyXG4gICAgICAgICdjbGFzcycsXHJcbiAgICAgICAgJ2xpYi1kaXNwbGF5LWhpZGRlbidcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogaGlkZSB5IGF4aXMgbGFiZWxzXHJcbiAgICAgKiB1c2VkIGJ5IHdlZWtseSBjaGFydHNcclxuICAgICAqL1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1lheGlzTGFiZWxIaWRkZW4gIT0gdW5kZWZpbmVkICYmXHJcbiAgICAgIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzWWF4aXNMYWJlbEhpZGRlblxyXG4gICAgKSB7XHJcbiAgICAgIGQzLnNlbGVjdEFsbCgnLnlheGlzLWRhc2hlZCA+IGcgPiB0ZXh0JykuYXR0cihcclxuICAgICAgICAnY2xhc3MnLFxyXG4gICAgICAgICdsaWItZGlzcGxheS1oaWRkZW4nXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIGhpZGUgeSBheGlzIGxhYmVsc1xyXG4gICAgICogY29uZmlnIGlzIHRoZXJlIGZvciBmdXR1cmUgdXNlXHJcbiAgICAgKi9cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNZYXhpc0hpZGRlbiAhPSB1bmRlZmluZWQgJiZcclxuICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNZYXhpc0hpZGRlblxyXG4gICAgKSB7XHJcbiAgICAgIGQzLnNlbGVjdEFsbCgnLnlheGlzLWRhc2hlZCcpLmF0dHIoJ2NsYXNzJywgJ2xpYi1kaXNwbGF5LWhpZGRlbicpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBkYXNoZWQgeSBheGlzXHJcbiAgICAgKiB1c2VkIGJ5IHdlZWtseSBjaGFydHNcclxuICAgICAqL1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1lheGlzRGFzaGVkICE9IHVuZGVmaW5lZCAmJlxyXG4gICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1lheGlzRGFzaGVkXHJcbiAgICApIHtcclxuICAgICAgZDMuc2VsZWN0QWxsKCcueWF4aXMtZGFzaGVkJylcclxuICAgICAgICAuc3R5bGUoJ3N0cm9rZS1kYXNoYXJyYXknLCAnNSA1JylcclxuICAgICAgICAuc3R5bGUoJ2NvbG9yJywgJ3ZhcigtLWNoYXJ0LWF4aXMtY29sb3IsICM5OTk5OTkpJyk7IC8vIFVzZSBDU1MgdmFyaWFibGVcclxuICAgIH1cclxuICAgIGlmIChsaW5lRGF0YSAhPSBudWxsKSB7XHJcbiAgICAgIGlmIChsaW5lRGF0YSAmJiBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5zaG93TGluZUNoYXJ0QXhpcykge1xyXG4gICAgICAgIHN2Z1lBeGlzUmlnaHRcclxuICAgICAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi1zdGFja2VkLXktYXhpcy10ZXh0MScpXHJcbiAgICAgICAgICAuYXR0cignc3R5bGUnLCBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0N1c3RvbVRleHRTdHlsZXMpXHJcbiAgICAgICAgICAuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgnICsgMCArICcsMCknKVxyXG4gICAgICAgICAgLmNhbGwoeUxpbmVBeGlzKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiB1c2VkIHRvIGRpc3BsYXkgeSBsYWJlbFxyXG4gICAgICovXHJcblxyXG4gICAgLy8gaWYgKHRoaXMuaXNab29tZWRPdXQpIHtcclxuICAgIC8vICAgc3ZnXHJcbiAgICAvLyAgICAgLnNlbGVjdEFsbCgnLmxpYi14YXhpcy1sYWJlbHMtdGV4dHMtZHJpbGxkb3duJylcclxuICAgIC8vICAgICAuYXR0cignY2xhc3MnLCAnbGliLWRpc3BsYXktaGlkZGVuJyk7XHJcbiAgICAvLyB9XHJcblxyXG4gICAgaWYgKHRoaXMuaXNab29tZWRPdXQpIHtcclxuICAgICAgLy8gc3ZnXHJcbiAgICAgIC8vICAgLnNlbGVjdEFsbCgnLmxpYi14YXhpcy1sYWJlbHMtdGV4dHMtZHJpbGxkb3duJylcclxuICAgICAgLy8gICAuYXR0cigndHJhbnNmb3JtJywgJ3JvdGF0ZSgtMzApJylcclxuICAgICAgLy8gICAuYXR0cigndGV4dC1hbmNob3InLCAnZW5kJylcclxuICAgICAgLy8gICAuYXR0cigneCcsICctNScpXHJcbiAgICAgIC8vICAgLmF0dHIoJ2R5JywgbnVsbClcclxuICAgICAgLy8gICAuc3R5bGUoJ2ZpbGwnLCAndmFyKC0tY2hhcnQtdGV4dC1jb2xvciknKTtcclxuICAgICAgc3ZnXHJcbiAgICAgICAgLnNlbGVjdEFsbCgnLmxpYi14YXhpcy1sYWJlbHMtdGV4dHMtZHJpbGxkb3duJylcclxuICAgICAgICAuZWFjaCgoZCwgaSwgbm9kZXMpID0+IHtcclxuICAgICAgICAgIGNvbnN0IHRleHQgPSBkMy5zZWxlY3Qobm9kZXNbaV0pO1xyXG4gICAgICAgICAgY29uc3QgbGFiZWwgPSB0ZXh0LnRleHQoKTtcclxuICAgICAgICAgIGNvbnN0IHdvcmRzID0gbGFiZWwuc3BsaXQoJyAnKTtcclxuXHJcbiAgICAgICAgICB0ZXh0LnRleHQobnVsbCk7IC8vIENsZWFyIGN1cnJlbnQgdGV4dFxyXG5cclxuICAgICAgICAgIC8vIEFkZCBlYWNoIHdvcmQgdG8gYSBuZXcgdHNwYW5cclxuICAgICAgICAgIHdvcmRzLmZvckVhY2goKHdvcmQsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgIHRleHQuYXBwZW5kKCd0c3BhbicpLnRleHQod29yZCk7XHJcbiAgICAgICAgICAgIC8vIC5hdHRyKCd4JywgJzE1JylcclxuICAgICAgICAgICAgLy8gLmF0dHIoJ2R5JywgaW5kZXggPT09IDAgPyAnMGVtJyA6ICcwLjllbScpIC8vIFJlZHVjZWQgdmVydGljYWwgc3BhY2luZ1xyXG4gICAgICAgICAgICAvLyAuYXR0cigndGV4dC1hbmNob3InLCAnZW5kJyk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5zdHlsZSgnZmlsbCcsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpXHJcbiAgICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIG51bGwpOyAvLyBSZW1vdmUgcm90YXRlIGlmIHVzaW5nIGxpbmUgYnJlYWtzXHJcblxyXG4gICAgICAvLyBPcHRpb25hbDogQWRqdXN0IGJvdHRvbSBtYXJnaW4gb3IgY2hhcnQgbGF5b3V0XHJcbiAgICAgIHN2Z1xyXG4gICAgICAgIC5zZWxlY3QoJy54LWF4aXMnKVxyXG4gICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBgdHJhbnNsYXRlKDAsICR7aGVpZ2h0IC0gbWFyZ2luLmJvdHRvbSArIDEwfSlgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIHVzZWQgdG8gd3JpdGUgeSBsYWJlbHMgYmFzZWQgb24gY29uZmlndXJhdGlvblxyXG4gICAgICovXHJcbmlmIChtZXRhRGF0YS55TGFiZWwpIHtcclxuICBjb25zdCB5UG9zaXRpb24gPSBpc3JpYSA/IDAgLSBtYXJnaW4ubGVmdCAvIDIgLSAzMCA6IDAgLSBtYXJnaW4ubGVmdCAvIDIgLSA0MDtcclxuXHJcbiAgc3ZnWUF4aXNMZWZ0XHJcbiAgICAuYXBwZW5kKCd0ZXh0JylcclxuICAgIC5hdHRyKCdjbGFzcycsICdsaWItYXhpcy1ncm91cC1sYWJlbCBmb250LXNpemUtMScpXHJcbiAgICAuYXR0cignc3R5bGUnLCBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0N1c3RvbWxhYmVsU3R5bGVzKVxyXG4gICAgLmF0dHIoJ3RyYW5zZm9ybScsICdyb3RhdGUoLTkwKScpXHJcbiAgICAuYXR0cigneScsIHlQb3NpdGlvbilcclxuICAgIC5hdHRyKCd4JywgMCAtIGhlaWdodCAvIDIpXHJcbiAgICAuYXR0cignZHknLCAnMWVtJylcclxuICAgIC5zdHlsZSgndGV4dC1hbmNob3InLCAnbWlkZGxlJylcclxuICAgIC5hdHRyKCdmaWxsJywgJ3ZhcigtLWNoYXJ0LXRleHQtY29sb3IpJyk7XHJcblxyXG4gIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc011bHRpQ2hhcnRHcmlkTGluZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICBzdmdZQXhpc0xlZnRcclxuICAgICAgLnNlbGVjdEFsbCgnLmxpYi1heGlzLWdyb3VwLWxhYmVsJylcclxuICAgICAgLnN0eWxlKCdmb250LXNpemUnLCAnc21hbGxlcicpXHJcbiAgICAgIC50ZXh0KG1ldGFEYXRhLnlMYWJlbCk7XHJcbiAgfSBlbHNlIHtcclxuICAgIHN2Z1xyXG4gICAgICAuc2VsZWN0QWxsKCcubGliLWF4aXMtZ3JvdXAtbGFiZWwnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnbGliLXlsYWJlbC13ZWVrbHlDaGFydHMnKVxyXG4gICAgICAudGV4dChtZXRhRGF0YS55TGFiZWwudG9Mb3dlckNhc2UoKSk7XHJcbiAgfVxyXG59XHJcblxyXG4gICAgaWYgKHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhKSB7XHJcbiAgICAgIGNvbnN0IHlaZXJvID0geSh0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXQpO1xyXG4gICAgICBzdmdcclxuICAgICAgICAuYXBwZW5kKCdsaW5lJylcclxuICAgICAgICAuYXR0cigneDEnLCAwKVxyXG4gICAgICAgIC5hdHRyKCd4MicsIHdpZHRoKVxyXG4gICAgICAgIC5hdHRyKCd5MScsIHlaZXJvKVxyXG4gICAgICAgIC5hdHRyKCd5MicsIHlaZXJvKVxyXG4gICAgICAgIC5zdHlsZSgnc3Ryb2tlLWRhc2hhcnJheScsICc1IDUnKVxyXG4gICAgICAgIC5zdHlsZSgnc3Ryb2tlJywgdGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEuY29sb3IpO1xyXG4gICAgICAvLyBzdmdZQXhpc1JpZ2h0XHJcbiAgICAgIC8vICAgLmFwcGVuZCgnbGluZScpXHJcbiAgICAgIC8vICAgLmF0dHIoJ3gxJywgMClcclxuICAgICAgLy8gICAuYXR0cigneDInLCByaWdodFN2Z1dpZHRoKVxyXG4gICAgICAvLyAgIC5hdHRyKCd5MScsIHlaZXJvKVxyXG4gICAgICAvLyAgIC5hdHRyKCd5MicsIHlaZXJvKVxyXG4gICAgICAvLyAgIC5zdHlsZSgnc3Ryb2tlJywgdGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEuY29sb3IpO1xyXG4gICAgICBzdmdZQXhpc1JpZ2h0XHJcbiAgICAgICAgLmFwcGVuZCgnZm9yZWlnbk9iamVjdCcpXHJcbiAgICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoJyArIDAgKyAnLCcgKyAoeVplcm8gLSAzMCkgKyAnKScpXHJcbiAgICAgICAgLmF0dHIoJ3dpZHRoJywgcmlnaHRTdmdXaWR0aClcclxuICAgICAgICAuYXR0cignaGVpZ2h0JywgNTApXHJcbiAgICAgICAgLmFwcGVuZCgneGh0bWw6ZGl2JylcclxuICAgICAgICAuYXR0cignY2xhc3MnLCAndGFyZ2V0LWRpc3BsYXknKVxyXG4gICAgICAgIC5zdHlsZSgnY29sb3InLCAndmFyKC0tY2hhcnQtdGV4dC1jb2xvciknKVxyXG4gICAgICAgIC5odG1sKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgIGxldCBkYXRhVHlwZVRlbXAgPSAnJztcclxuICAgICAgICAgIGxldCB0YXJnZXRMaW5lTmFtZSA9ICd0YXJnZXQnO1xyXG4gICAgICAgICAgaWYgKG1ldGFEYXRhLmRhdGFUeXBlKSB7XHJcbiAgICAgICAgICAgIGRhdGFUeXBlVGVtcCA9IG1ldGFEYXRhLmRhdGFUeXBlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBzZWxmLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YSAmJlxyXG4gICAgICAgICAgICBzZWxmLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXROYW1lXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgdGFyZ2V0TGluZU5hbWUgPSBzZWxmLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXROYW1lO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgYDxkaXY+JHt0YXJnZXRMaW5lTmFtZX08L2Rpdj5gICtcclxuICAgICAgICAgICAgJzxkaXY+JyArXHJcbiAgICAgICAgICAgIHNlbGYuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLnRhcmdldCArXHJcbiAgICAgICAgICAgICcnICtcclxuICAgICAgICAgICAgZGF0YVR5cGVUZW1wICtcclxuICAgICAgICAgICAgJzwvZGl2PidcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNEcmlsbGRvd25DaGFydCkge1xyXG4gICAgICAvKipcclxuICAgICAgICogdXNlZCBieSBkcmlsbGRvd24gY2hhcnRzXHJcbiAgICAgICAqL1xyXG4gICAgICAvLyBzdmdcclxuICAgICAgLy8gICAuc2VsZWN0QWxsKCcubGliLWF4aXMtZ3JvdXAtbGFiZWwnKVxyXG4gICAgICAvLyAgIC5hdHRyKCdjbGFzcycsICdsaWIteWxhYmVsLWRyaWxsZG93bmNoYXJ0cycpXHJcbiAgICAgIC8vICAgLnRleHQobWV0YURhdGEueUxhYmVsLnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgICBzdmcuc2VsZWN0QWxsKCdnLngxLmF4aXMxIGcudGljayBsaW5lJykuc3R5bGUoJ2Rpc3BsYXknLCAnbm9uZScpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChtZXRhRGF0YS54TGFiZWwpIHtcclxuICAgICAgZnVuY3Rpb24gaXNBY3JvbnltKGxhYmVsKSB7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgIChsYWJlbC5sZW5ndGggPD0gNCAmJiAvXltBLVpdKyQvLnRlc3QobGFiZWwpKSB8fFxyXG4gICAgICAgICAgKGxhYmVsID09PSBsYWJlbC50b1VwcGVyQ2FzZSgpICYmIC9bQS1aXS8udGVzdChsYWJlbCkpXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCB4TGFiZWxUZXh0ID0gbWV0YURhdGEueExhYmVsO1xyXG4gICAgICBjb25zdCBpc0FjciA9IGlzQWNyb255bSh4TGFiZWxUZXh0LnJlcGxhY2UoL1teQS1aYS16XS9nLCAnJykpO1xyXG5cclxuICAgICAgICBjb25zdCB4UG9zaXRpb24gPSBpc3JpYSA/IChoZWlnaHQgKyBtYXJnaW4udG9wICsgbWFyZ2luLmJvdHRvbSkgOiAoaGVpZ2h0ICsgbWFyZ2luLnRvcCArIG1hcmdpbi5ib3R0b20gKyAxMCk7XHJcblxyXG4gICAgICBzdmdcclxuICAgICAgICAuYXBwZW5kKCd0ZXh0JylcclxuICAgICAgICAuYXR0cignY2xhc3MnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICBsZXQgYmFzZUNsYXNzID0gJ2xpYi1heGlzLWdyb3VwLWxhYmVsIGZvbnQtc2l6ZS0xJztcclxuICAgICAgICAgIGlmIChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0RyaWxsZG93bkNoYXJ0KVxyXG4gICAgICAgICAgICByZXR1cm4gYmFzZUNsYXNzICsgJyBsaWIteGxhYmVsLWRyaWxsZG93bmNoYXJ0cyc7XHJcbiAgICAgICAgICBpZiAoc2VsZi5jaGFydENvbmZpZ3VyYXRpb24uaXNNdWx0aUNoYXJ0R3JpZExpbmUgIT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICByZXR1cm4gYmFzZUNsYXNzICsgJyBsaWIteGxhYmVsLXdlZWtseUNoYXJ0cyc7XHJcbiAgICAgICAgICByZXR1cm4gYmFzZUNsYXNzICsgJyBsaWItYXhpcy13YXRlcmZhbGwtbGFiZWwnO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmF0dHIoJ3N0eWxlJywgc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ueEF4aXNDdXN0b21sYWJlbFN0eWxlcylcclxuICAgICAgICAuYXR0cihcclxuICAgICAgICAgICd0cmFuc2Zvcm0nLFxyXG4gICAgICAgICAgJ3RyYW5zbGF0ZSgnICsgd2lkdGggLyAyICsgJyAsJyArIHhQb3NpdGlvbiArICcpJ1xyXG4gICAgICAgIClcclxuICAgICAgICAuc3R5bGUoJ3RleHQtYW5jaG9yJywgJ21pZGRsZScpXHJcbiAgICAgICAgLnN0eWxlKCdmaWxsJywgJ3ZhcigtLWNoYXJ0LXRleHQtY29sb3IpJylcclxuICAgICAgICAudGV4dChpc0FjciA/IHhMYWJlbFRleHQudG9VcHBlckNhc2UoKSA6IHhMYWJlbFRleHQudG9Mb3dlckNhc2UoKSlcclxuICAgICAgICAuc3R5bGUoJ3RleHQtdHJhbnNmb3JtJywgaXNBY3IgPyAnbm9uZScgOiAnY2FwaXRhbGl6ZScpO1xyXG4gICAgfVxyXG4gICAgaWYgKG1ldGFEYXRhLmxpbmV5TGFiZWwpIHtcclxuICAgICAgc3ZnWUF4aXNSaWdodFxyXG4gICAgICAgIC5hcHBlbmQoJ3RleHQnKVxyXG4gICAgICAgIC5hdHRyKCdjbGFzcycsICdsaWItYXhpcy1ncm91cC1sYWJlbCBsaWItbGluZS1heGlzJylcclxuICAgICAgICAuYXR0cignZmlsbCcsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpXHJcbiAgICAgICAgLmF0dHIoJ3N0eWxlJywgc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ueUF4aXNDdXN0b21sYWJlbFN0eWxlcylcclxuICAgICAgICAuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgwLDApIHJvdGF0ZSg5MCknKVxyXG4gICAgICAgIC5hdHRyKCd5JywgMCAtIDEwMClcclxuICAgICAgICAuYXR0cigneCcsIDAgKyAxMDApXHJcbiAgICAgICAgLmF0dHIoJ2R5JywgJzVlbScpXHJcbiAgICAgICAgLnN0eWxlKCd0ZXh0LWFuY2hvcicsICdtaWRkbGUnKVxyXG4gICAgICAgIC5zdHlsZSgnZm9udC1zaXplJywgJ3NtYWxsZXInKVxyXG4gICAgICAgIC50ZXh0KG1ldGFEYXRhLmxpbmV5TGFiZWwpO1xyXG4gICAgfVxyXG4gICAgaWYgKGxpbmVEYXRhKSB7XHJcbiAgICAgIHN2Z1xyXG4gICAgICAgIC5hcHBlbmQoJ3BhdGgnKVxyXG4gICAgICAgIC5kYXR1bShsaW5lRGF0YSlcclxuICAgICAgICAuYXR0cignZmlsbCcsICdub25lJylcclxuICAgICAgICAuYXR0cignc3Ryb2tlJywgc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ubGluZUdyYXBoQ29sb3IpXHJcbiAgICAgICAgLmF0dHIoJ3N0cm9rZS13aWR0aCcsIDEuNSlcclxuICAgICAgICAuYXR0cihcclxuICAgICAgICAgICdkJyxcclxuICAgICAgICAgIGQzXHJcbiAgICAgICAgICAgIC5saW5lKClcclxuICAgICAgICAgICAgLngoZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgICAgICByZXR1cm4geChkLm5hbWUpICsgeC5iYW5kd2lkdGgoKSAvIDI7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC55KGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGxpbmVZc2NhbGUoZC52YWx1ZSk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgIHZhciBkb3QgPSBzdmdcclxuICAgICAgICAuc2VsZWN0QWxsKCdteUNpcmNsZXMnKVxyXG4gICAgICAgIC5kYXRhKGxpbmVEYXRhKVxyXG4gICAgICAgIC5lbnRlcigpXHJcbiAgICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgICAgLm9uKCdjbGljaycsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICFtZXRhRGF0YS5iYXJXaXRob3V0Q2xpY2sgfHxcclxuICAgICAgICAgICAgIW1ldGFEYXRhLmJhcldpdGhvdXRDbGljay5sZW5ndGggfHxcclxuICAgICAgICAgICAgKCFtZXRhRGF0YS5iYXJXaXRob3V0Q2xpY2suaW5jbHVkZXMoZD8ubmFtZSkgJiZcclxuICAgICAgICAgICAgICAhbWV0YURhdGEuYmFyV2l0aG91dENsaWNrLmluY2x1ZGVzKGQ/LmtleSkpXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgICAgIHNlbGYuaGFuZGxlQ2xpY2soZCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICBkb3RcclxuICAgICAgICAuYXBwZW5kKCdjaXJjbGUnKVxyXG4gICAgICAgIC5hdHRyKCdmaWxsJywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgIHJldHVybiBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5saW5lR3JhcGhDb2xvcjtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5hdHRyKCdzdHJva2UnLCAnbm9uZScpXHJcbiAgICAgICAgLmF0dHIoJ2N4JywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgIHJldHVybiB4KGQubmFtZSkgKyB4LmJhbmR3aWR0aCgpIC8gMjtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5hdHRyKCdjeScsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICByZXR1cm4gbGluZVlzY2FsZShkLnZhbHVlKTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5zdHlsZSgnY3Vyc29yJywgKCkgPT5cclxuICAgICAgICAgIHNlbGYuY2hhcnREYXRhLm1ldGFEYXRhLmhhc0RyaWxsRG93biA/ICdwb2ludGVyJyA6ICdkZWZhdWx0J1xyXG4gICAgICAgIClcclxuICAgICAgICAuYXR0cigncicsIDMpO1xyXG5cclxuICAgICAgaWYgKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmxpbmVHcmFwaENvbG9yKSB7XHJcbiAgICAgICAgZG90XHJcbiAgICAgICAgICAuYXBwZW5kKCd0ZXh0JylcclxuICAgICAgICAgIC5hdHRyKCdjbGFzcycsICdkb3QnKVxyXG4gICAgICAgICAgLmF0dHIoJ2ZpbGwnLCAndmFyKC0tY2hhcnQtdGV4dC1jb2xvciknKVxyXG4gICAgICAgICAgLmF0dHIoJ2NvbG9yJywgc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ubGluZUdyYXBoQ29sb3IpXHJcbiAgICAgICAgICAuYXR0cignc3R5bGUnLCAnZm9udC1zaXplOiAnICsgJy44NWVtJylcclxuICAgICAgICAgIC5hdHRyKCd4JywgZnVuY3Rpb24gKGQsIGkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHgoZC5uYW1lKSArIHguYmFuZHdpZHRoKCkgLyAyO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC5hdHRyKCd5JywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGxpbmVZc2NhbGUoZC52YWx1ZSk7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLmF0dHIoJ2R5JywgJy0xZW0nKVxyXG4gICAgICAgICAgLnRleHQoZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmxhYmVsRm9ybWF0dGVyKGQudmFsdWUpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhhbmRsZUNsaWNrKGQ6IGFueSkge1xyXG4gICAgaWYgKHRoaXMuY2hhcnREYXRhLm1ldGFEYXRhLmhhc0RyaWxsRG93biB8fCBkPy50b2dnbGVGcm9tKVxyXG4gICAgICB0aGlzLmNsaWNrRXZlbnQuZW1pdChkKTtcclxuICB9XHJcbiAgaGFuZGxlSGVhZGVyTWVudUNsaWNrKGlkKSB7XHJcbiAgICB0aGlzLmhlYWRlck1lbnVjbGlja0V2ZW50LmVtaXQoaWQpO1xyXG4gIH1cclxuICBoYW5kbGVERDFDbGljayhldmVudCkge1xyXG4gICAgdGhpcy5pc0REMU9wZW4gPSB0cnVlO1xyXG4gICAgdGhpcy5pc0REMk9wZW4gPSBmYWxzZTtcclxuICB9XHJcbiAgaGFuZGxlREQyQ2xpY2soZXZlbnQpIHtcclxuICAgIHRoaXMuaXNERDJPcGVuID0gdHJ1ZTtcclxuICAgIHRoaXMuaXNERDFPcGVuID0gZmFsc2U7XHJcbiAgfVxyXG4gIGhhbmRsZUNvbXBhcmVCeUZpbHRlclNlbGVjdGlvbihldmVudCkge1xyXG4gICAgdGhpcy5jbGlja0V2ZW50LmVtaXQoZXZlbnQpO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2XHJcbiAgI2dyb3VwY29udGFpbmVyXHJcbiAgY2xhc3M9XCJsaWItY2hhcnQtd3JhcHBlclwiXHJcbiAgW25nQ2xhc3NdPVwieyAnbGliLW5vLWJhY2tncm91bmQnOiBpc1RyYW5zcGFyZW50QmFja2dyb3VuZCB9XCJcclxuICBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6IHZhcigtLWNhcmQtYmcpO1wiXHJcbiAgKHJlc2l6ZWQpPVwib25SZXNpemVkKCRldmVudClcIlxyXG4+XHJcbiAgPGRpdiBjbGFzcz1cImhlYWRlci1hbHRcIiAqbmdJZj1cIiFpc0hlYWRlclZpc2libGVcIj5cclxuICAgIDxsaWItY2hhcnQtaGVhZGVyLXYyXHJcbiAgICAgIFtjaGFydERhdGFdPVwiY2hhcnREYXRhXCJcclxuICAgICAgW2NoYXJ0Q29uZmlndXJhdGlvbl09XCJjaGFydENvbmZpZ3VyYXRpb25cIlxyXG4gICAgICAoY2xpY2tFdmVudCk9XCJoYW5kbGVDbGljaygkZXZlbnQpXCJcclxuICAgID48L2xpYi1jaGFydC1oZWFkZXItdjI+XHJcbiAgICA8bGliLWNoYXJ0LWhlYWRlci12M1xyXG4gICAgICBbY2hhcnREYXRhXT1cImNoYXJ0RGF0YVwiXHJcbiAgICAgIFtjaGFydENvbmZpZ3VyYXRpb25dPVwiY2hhcnRDb25maWd1cmF0aW9uXCJcclxuICAgICAgKGNvbXBhcmVCeUZpbHRlclNlbGVjdGlvbik9XCJoYW5kbGVDb21wYXJlQnlGaWx0ZXJTZWxlY3Rpb24oJGV2ZW50KVwiXHJcbiAgICAgICh6b29tSW5ab29tT3V0Q2xpY2spPVwiaGFuZGxlWm9vbWluWm9vbW91dENsaWNrKCRldmVudClcIlxyXG4gICAgPjwvbGliLWNoYXJ0LWhlYWRlci12Mz5cclxuICA8L2Rpdj5cclxuICA8bGliLWNoYXJ0LWhlYWRlci12MVxyXG4gICAgW3RpdGxlXT1cImNoYXJ0RGF0YS5tZXRhRGF0YS50aXRsZVwiXHJcbiAgICBbaGFzRHJpbGxEb3duXT1cImNoYXJ0RGF0YS5tZXRhRGF0YS5oYXNEcmlsbERvd25cIlxyXG4gICAgW2lzRWRpdEVuYWJsZWRdPVwiY2hhcnREYXRhLm1ldGFEYXRhLmlzRWRpdEVuYWJsZWRcIlxyXG4gICAgW21lbnVPcHRpb25zXT1cImNoYXJ0Q29uZmlndXJhdGlvbi5oZWFkZXJNZW51T3B0aW9uc1wiXHJcbiAgICBbaXNyaWFdPVwiY3VzdG9tQ2hhcnRDb25maWd1cmF0aW9uLmlzUmlhXCJcclxuICAgIFtzZWxlY3RlZEtwaVRvb2x0b3BdPVwiY2hhcnRDb25maWd1cmF0aW9uLnNlbGVjdGVkS3BpVG9vbHRvcFwiXHJcbiAgICAobWVudU9wdGlvbkNsaWNrRXZlbnQpPVwiaGFuZGxlSGVhZGVyTWVudUNsaWNrKCRldmVudClcIlxyXG4gICAgW2lzQWxlcnRFbmFibGVkXT1cImlzQWxlcnRFbmFibGVkXCJcclxuICAgICpuZ0lmPVwiaXNIZWFkZXJWaXNpYmxlXCJcclxuICA+PC9saWItY2hhcnQtaGVhZGVyLXYxPlxyXG4gIDxkaXZcclxuICAgICpuZ0lmPVwiXHJcbiAgICAgIGNoYXJ0RGF0YSAmJlxyXG4gICAgICBjaGFydERhdGEubWV0YURhdGEgJiZcclxuICAgICAgY2hhcnRDb25maWd1cmF0aW9uLmxlZ2VuZEp1c3RpZmllZCAmJlxyXG4gICAgICBsZWdlbmRWaXNpYmxlICYmXHJcbiAgICAgIGNoYXJ0Q29uZmlndXJhdGlvbi5sZWdlbmRBdFRvcFJpZ2h0XHJcbiAgICBcIlxyXG4gICAgY2xhc3M9XCJsZWdlbmQtaG9sZGVyLXJpZ2h0XCJcclxuICAgIFtzdHlsZS5oZWlnaHRdPVwiY2hhcnRDb25maWd1cmF0aW9uLmZvb3RlckhlaWdodFwiXHJcbiAgPlxyXG4gICAgPHVsIGNsYXNzPVwiZGlzcGxheS1mbGV4XCI+XHJcbiAgICAgIDxsaVxyXG4gICAgICAgIGNsYXNzPVwibGVnZW5kcy1wb3NpdGlvbmluZy1pbmxpbmVcIlxyXG4gICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGNoYXJ0RGF0YS5tZXRhRGF0YS5jb2xvcnMgfCBrZXl2YWx1ZSA6IGtlZXBPcmRlclwiXHJcbiAgICAgID5cclxuICAgICAgICA8c3BhblxyXG4gICAgICAgICAgY2xhc3M9XCJsaWItZG9udXQtanVzdGlmaWVkLWxhYmVsLWljb24tZHJpbGxkb3duXCJcclxuICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cIml0ZW0udmFsdWVcIlxyXG4gICAgICAgID48L3NwYW5cclxuICAgICAgICA+PHNwYW4+e3sgaXRlbS5rZXkgfX08L3NwYW4+XHJcbiAgICAgIDwvbGk+XHJcbiAgICA8L3VsPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXZcclxuICAgIFtzdHlsZS5oZWlnaHRdPVwiY2hhcnRDb25maWd1cmF0aW9uLnN2Z0hlaWdodFwiXHJcbiAgICBpZD1cImdyb3VwY2hhcnRjb250YWluZXJcIlxyXG4gICAgI2dyb3VwY2hhcnRjb250YWluZXJcclxuICAgIGNsYXNzPVwibGliLWNoYXJ0LXN2Z1wiXHJcbiAgPjwvZGl2PlxyXG5cclxuXHJcbiAgPCEtLSA8ZGl2XHJcbiAgICAqbmdJZj1cIlxyXG4gICAgICBjaGFydERhdGEgJiZcclxuICAgICAgY2hhcnREYXRhLm1ldGFEYXRhICYmXHJcbiAgICAgIGNoYXJ0Q29uZmlndXJhdGlvbi5sZWdlbmRKdXN0aWZpZWQgJiZcclxuICAgICAgbGVnZW5kVmlzaWJsZSAmJlxyXG4gICAgICAhY2hhcnRDb25maWd1cmF0aW9uLmxlZ2VuZEF0VG9wUmlnaHRcclxuICAgIFwiXHJcbiAgICBjbGFzcz1cImxpYi1kb251dC1jaGFydC1mb290ZXJcIlxyXG4gICAgW3N0eWxlLmhlaWdodF09XCJjaGFydENvbmZpZ3VyYXRpb24uZm9vdGVySGVpZ2h0XCJcclxuICA+XHJcbiAgICA8dWwgY2xhc3M9XCJsaWItZG9udXQtanVzdGlmaWVkLWxhYmVsLXdyYXBwZXJcIj5cclxuICAgICAgPGxpXHJcbiAgICAgICAgY2xhc3M9XCJsaWItZG9udXQtanVzdGlmaWVkLWxhYmVsLWl0ZW1cIlxyXG4gICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGNoYXJ0RGF0YS5tZXRhRGF0YS5jb2xvcnMgfCBrZXl2YWx1ZVwiXHJcbiAgICAgID5cclxuICAgICAgICA8c3BhblxyXG4gICAgICAgICAgY2xhc3M9XCJsaWItZG9udXQtanVzdGlmaWVkLWxhYmVsLWljb25cIlxyXG4gICAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiaXRlbS52YWx1ZVwiXHJcbiAgICAgICAgPjwvc3BhblxyXG4gICAgICAgID48c3Bhbj57eyBpdGVtLmtleSB9fTwvc3Bhbj5cclxuICAgICAgPC9saT5cclxuICAgIDwvdWw+XHJcbiAgPC9kaXY+IC0tPlxyXG5cclxuXHJcbiAgPCEtLSA8ZGl2ICpuZ0lmPVwiY2hhcnRDb25maWd1cmF0aW9uPy5pc0Rpc3BsYXlCYXJEZXRhaWxzQXRCb3R0b21cIj5cclxuICAgIDxkaXZcclxuICAgICAgY2xhc3M9XCJiYXItdmFsdWVzIGxpYi1kaXNwbGF5LWZsZXggbGliLWp1c3RpZnktY29udGVudC1jZW50ZXIgbGliLWFsaWduLWl0ZW1zLWNlbnRlclwiXHJcbiAgICAgICpuZ0Zvcj1cIlxyXG4gICAgICAgIGxldCBpdGVtIG9mIGNoYXJ0RGF0YS5tZXRhRGF0YS5jb2xvcnMgfCBrZXl2YWx1ZSA6IGtlZXBPcmRlcjtcclxuICAgICAgICBsZXQgaSA9IGluZGV4XHJcbiAgICAgIFwiPlxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgY2xhc3M9XCJiYXItbmFtZSBmb250LXNpemUtMVwiXHJcbiAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgIGNoYXJ0RGF0YS5kYXRhWzBdW2l0ZW0ua2V5XSAmJlxyXG4gICAgICAgICAgaSA8PSBjaGFydENvbmZpZ3VyYXRpb24uaG93bWFueUJhckRldGFpbHNUb0Rpc3BsYXlcclxuICAgICAgICBcIlxyXG4gICAgICA+XHJcbiAgICAgICAge3sgaXRlbS5rZXkgfX1cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXZcclxuICAgICAgICBjbGFzcz1cImJhci12YWx1ZSBsaWItZGlzcGxheS1mbGV4IGxpYi1hbGlnbi1pdGVtcy1jZW50ZXIgZm9udC1zaXplLTFcIlxyXG4gICAgICAgIFtzdHlsZS5jb2xvcl09XCJcclxuICAgICAgICAgIGNoYXJ0Q29uZmlndXJhdGlvbi5iYXJWYXVsZUNvbG9yID8gYmFyVmF1bGVDb2xvciA6IGl0ZW0udmFsdWVcclxuICAgICAgICBcIlxyXG4gICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICBjaGFydERhdGEuZGF0YVswXVtpdGVtLmtleV0gJiZcclxuICAgICAgICAgIGkgPD0gY2hhcnRDb25maWd1cmF0aW9uLmhvd21hbnlCYXJEZXRhaWxzVG9EaXNwbGF5XHJcbiAgICAgICAgXCJcclxuICAgICAgPlxyXG4gICAgICAgIHt7IGNoYXJ0RGF0YS5kYXRhWzBdW2l0ZW0ua2V5XSB9fVxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PiAtLT5cclxuPC9kaXY+XHJcbiJdfQ==
|