axidio-styleguide-library1-v2 0.1.64 → 0.1.65
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/esm2022/lib/horizontal-bars-with-scroll-zoom/horizontal-bars-with-scroll-zoom.component.mjs
CHANGED
|
@@ -387,26 +387,27 @@ export class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
|
|
|
387
387
|
.attr('transform', 'translate(' + xScale.bandwidth() / 2 + ',' + height + ')')
|
|
388
388
|
.call(d3.axisBottom(xScale).tickSize(-height).tickFormat(''))
|
|
389
389
|
.style('stroke-dasharray', '5 5')
|
|
390
|
-
.style('color', '#999999')
|
|
391
|
-
// .style("opacity", "0.5")
|
|
390
|
+
.style('color', 'var(--chart-grid-color, #999999)')
|
|
392
391
|
.call((g) => g.select('.domain').remove());
|
|
393
392
|
}
|
|
394
393
|
/**
|
|
395
394
|
* used to draw y-axis grid
|
|
396
395
|
*/
|
|
397
396
|
if (self.chartConfiguration.yAxisGrid) {
|
|
398
|
-
svg
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
//
|
|
397
|
+
// svg
|
|
398
|
+
// .append('g')
|
|
399
|
+
// .attr('class', 'grid')
|
|
400
|
+
// .call(
|
|
401
|
+
// d3
|
|
402
|
+
// .axisLeft(yScale)
|
|
403
|
+
// .ticks(self.chartConfiguration.numberOfYTicks)
|
|
404
|
+
// .tickSize(-width)
|
|
405
|
+
// .tickFormat('')
|
|
406
|
+
// )
|
|
407
|
+
// // Remove hardcoded colors and use CSS variables
|
|
408
|
+
// .style('color', 'var(--chart-grid-color)')
|
|
409
|
+
// .style('opacity', '1')
|
|
410
|
+
// // .call((g) => g.select('.domain').remove());
|
|
410
411
|
}
|
|
411
412
|
var layer = svg
|
|
412
413
|
.selectAll('.layer')
|
|
@@ -1287,4 +1288,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
1287
1288
|
}], headerMenuclickEvent: [{
|
|
1288
1289
|
type: Output
|
|
1289
1290
|
}] } });
|
|
1290
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9yaXpvbnRhbC1iYXJzLXdpdGgtc2Nyb2xsLXpvb20uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXhpZGlvLXN0eWxlZ3VpZGUtbGlicmFyeS9zcmMvbGliL2hvcml6b250YWwtYmFycy13aXRoLXNjcm9sbC16b29tL2hvcml6b250YWwtYmFycy13aXRoLXNjcm9sbC16b29tLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2F4aWRpby1zdHlsZWd1aWRlLWxpYnJhcnkvc3JjL2xpYi9ob3Jpem9udGFsLWJhcnMtd2l0aC1zY3JvbGwtem9vbS9ob3Jpem9udGFsLWJhcnMtd2l0aC1zY3JvbGwtem9vbS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULFNBQVMsRUFFVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2pELE9BQU8sV0FBVyxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBRXpCLE9BQU8sa0JBQWtCLE1BQU0sa0JBQWtCLENBQUM7Ozs7OztBQVdsRCxNQUFNLE9BQU8scUNBQ1gsU0FBUSxpQkFBaUI7SUE4RHpCO1FBQ0UsS0FBSyxFQUFFLENBQUM7UUFyREEsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDckMseUJBQW9CLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUN6RCx1QkFBa0IsR0FBUSxFQUFFLENBQUM7UUFDN0Isb0JBQWUsR0FBWSxJQUFJLENBQUM7UUFDaEMsd0JBQW1CLEdBQVksSUFBSSxDQUFDO1FBQ3BDLGFBQVEsR0FBUSxJQUFJLENBQUMsV0FBVyxFQUFFLENB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QUNELHFCQUFxQixDQUFDLEVBQUU7UUFDdEIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBQ0QsOEJBQThCLENBQUMsS0FBSztRQUNsQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBQ0Qsd0JBQXdCLENBQUMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFO1FBQzNDLDRDQUE0QztRQUM1QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDcEMsQ0FBQzsrR0FoMkNVLHFDQUFxQzttR0FBckMscUNBQXFDLDRqQkN6QmxELHl2Q0FrQ0E7OzRGRFRhLHFDQUFxQztrQkFUakQsU0FBUzsrQkFDRSxzQ0FBc0MsaUJBTWpDLGlCQUFpQixDQUFDLElBQUk7d0RBTXJDLFlBQVk7c0JBRFgsU0FBUzt1QkFBQywrQkFBK0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBSTVELDJCQUEyQjtzQkFEMUIsU0FBUzt1QkFBQywwQkFBMEIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBRzlDLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csd0JBQXdCO3NCQUFoQyxLQUFLO2dCQUNJLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csb0JBQW9CO3NCQUE3QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgT25Jbml0LFxyXG4gIFZpZXdDaGlsZCxcclxuICBFbGVtZW50UmVmLFxyXG4gIElucHV0LFxyXG4gIE91dHB1dCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgVmlld0VuY2Fwc3VsYXRpb24sXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbXBvbmVudFVuaXF1ZUlkIH0gZnJvbSAnLi4vdW5pcXVlLWlkJztcclxuaW1wb3J0IENoYXJ0SGVscGVyIGZyb20gJy4uL2NoYXJ0LWhlbHBlcic7XHJcbmltcG9ydCAqIGFzIGQzIGZyb20gJ2QzJztcclxuaW1wb3J0IHsgUmVzaXplZEV2ZW50IH0gZnJvbSAnYW5ndWxhci1yZXNpemUtZXZlbnQnO1xyXG5pbXBvcnQgSGVhZGVyQ29uZmlnSGVscGVyIGZyb20gJy4uL2hlYWRlci1jb25maWcnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItaG9yaXpvbnRhbC1iYXJzLXdpdGgtc2Nyb2xsLXpvb20nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9ob3Jpem9udGFsLWJhcnMtd2l0aC1zY3JvbGwtem9vbS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbXHJcbiAgICAnLi9ob3Jpem9udGFsLWJhcnMtd2l0aC1zY3JvbGwtem9vbS5jb21wb25lbnQubGVzcycsXHJcbiAgICAnLi4vY29tbW9uLXN0eWxlcy5sZXNzJyxcclxuICBdLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBIb3Jpem9udGFsQmFyc1dpdGhTY3JvbGxab29tQ29tcG9uZW50XHJcbiAgZXh0ZW5kcyBDb21wb25lbnRVbmlxdWVJZFxyXG4gIGltcGxlbWVudHMgT25Jbml0IHtcclxuICBAVmlld0NoaWxkKCd2ZXJ0aWNhbHN0YWNrZWRjaGFydGNvbnRhaW5lcicsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgY29udGFpbmVyRWx0ITogRWxlbWVudFJlZjtcclxuXHJcbiAgQFZpZXdDaGlsZCgndmVydGljYWxzdGFja2VkY29udGFpbmVyJywgeyBzdGF0aWM6IHRydWUgfSlcclxuICB2ZXJ0aWNhbHN0YWNrZWRjb250YWluZXJFbHQhOiBFbGVtZW50UmVmO1xyXG5cclxuICBASW5wdXQoKSBjaGFydERhdGE6IGFueTtcclxuICBASW5wdXQoKSBjdXN0b21DaGFydENvbmZpZ3VyYXRpb246IGFueTtcclxuICBAT3V0cHV0KCkgY2xpY2tFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBoZWFkZXJNZW51Y2xpY2tFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIGNoYXJ0Q29uZmlndXJhdGlvbjogYW55ID0ge307XHJcbiAgaXNIZWFkZXJWaXNpYmxlOiBib29sZWFuID0gdHJ1ZTtcclxuICBpc1RvcENhcHRpb25WaXNpYmxlOiBib29sZWFuID0gdHJ1ZTtcclxuICB1bmlxdWVJZDogYW55ID0gdGhpcy5nZXRVbmlxdWVJZCgpO1xyXG4gIGlzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZGVmYXVsdENvbmZpZ3VyYXRpb246IGFueSA9IHtcclxuICAgIG1hcmdpbjogeyB0b3A6IDIwLCByaWdodDogMjAsIGJvdHRvbTogMjAsIGxlZnQ6IDQwIH0sXHJcbiAgICBzdmdIZWlnaHQ6IDcwLFxyXG4gICAgbGVnZW5kSGVpZ2h0OiAnMTAlJyxcclxuICAgIG51bWJlck9mWVRpY2tzOiA1LFxyXG4gICAgbGFiZWxGb3JtYXR0ZXI6IENoYXJ0SGVscGVyLmRlZmF1bHRGb3JtYXR0ZXIsXHJcbiAgICB4QXhpc0xhYmVsRm9tYXR0ZXI6IENoYXJ0SGVscGVyLmRlZmF1bHRGb3JtYXR0ZXIsXHJcbiAgICB5QXhpc0xhYmVsRm9tYXR0ZXI6IENoYXJ0SGVscGVyLmRlZmF1bHRGb3JtYXR0ZXIsXHJcbiAgICB5TGluZUF4aXNMYWJlbEZvbWF0dGVyOiBDaGFydEhlbHBlci5kZWZhdWx0Rm9ybWF0dGVyLFxyXG4gICAgbGluZUdyYXBoQ29sb3I6ICcjRjZEMjgzJyxcclxuICAgIHNob3dMaW5lQ2hhcnRBeGlzOiB0cnVlLFxyXG4gICAgc2hvd0xlZ2VuZDogZmFsc2UsXHJcbiAgICBmb3JDb21wYXJpc29uOiB0cnVlLFxyXG4gICAgaGVhZGVyTWVudU9wdGlvbnM6IEhlYWRlckNvbmZpZ0hlbHBlci5oZWFkZXJDb25maWcuaGVhZGVyTWVudU9wdGlvbnMsXHJcbiAgICB5QXhpc0dyaWQ6IGZhbHNlLFxyXG4gICAgaXNIZWFkZXJWaXNpYmxlOiB1bmRlZmluZWQsXHJcbiAgICBpc1RyYW5zcGFyZW50QmFja2dyb3VuZDogdW5kZWZpbmVkLFxyXG4gICAgaXNUb3BDYXB0aW9uVmlzaWJsZTogdW5kZWZpbmVkLFxyXG4gICAgaXNNdWx0aUNoYXJ0R3JpZExpbmU6IHVuZGVmaW5lZCxcclxuICAgIGlzRnVsbFNjcmVlbjogdW5kZWZpbmVkLFxyXG4gICAgY3VzdG9tWXNjYWxlOiB1bmRlZmluZWQsXHJcbiAgICBpc1hheGlzTGFiZWxIaWRkZW46IHVuZGVmaW5lZCxcclxuICAgIGlzWWF4aXNMYWJlbEhpZGRlbjogdW5kZWZpbmVkLFxyXG4gICAgaXNZYXhpc0hpZGRlbjogdW5kZWZpbmVkLFxyXG4gICAgaXNZYXhpc0Rhc2hlZDogdW5kZWZpbmVkLFxyXG4gICAgaXNYYXhpc0NvbG9yOiB1bmRlZmluZWQsXHJcbiAgICB0ZXh0Rm9ybWF0dGVyOiB1bmRlZmluZWQsXHJcbiAgICBzaG93VG90YWxPblRvcDogdW5kZWZpbmVkLFxyXG4gICAgYmFja2VuZEZvcm1hdHRlckhhc1ByaW9yaXR5OiB1bmRlZmluZWQsXHJcbiAgICBzaG93QW5nbGVkTGFiZWxzOiB1bmRlZmluZWQsXHJcbiAgICBpc05vQWx0ZXJuYXRlWGF4aXNUZXh0OiB1bmRlZmluZWQsXHJcbiAgICBpc1hncmlkQmV0d2VlbkxhYmVsczogdW5kZWZpbmVkLFxyXG4gICAgc2hvd1hheGlzVG9wOiB1bmRlZmluZWQsXHJcbiAgICB4QXhpc0dyaWQ6IHVuZGVmaW5lZCxcclxuICAgIHhMYWJlbHNPblNhbWVMaW5lOiB1bmRlZmluZWQsXHJcbiAgICBoaWRlWGF4aXNUaWNrOiB1bmRlZmluZWQsXHJcbiAgICBpc0RyaWxsZG93bkNoYXJ0OiB1bmRlZmluZWQsXHJcbiAgICBpc1RhcmdldExpbmU6IHVuZGVmaW5lZCxcclxuICAgIGRpc3BsYXlUaXRsZU9uVG9wOiB1bmRlZmluZWQsXHJcbiAgICBpc1RvZ2dsZVZpc2libGU6IHVuZGVmaW5lZCxcclxuICAgIGlzVGl0bGVIaWRkZW46IHVuZGVmaW5lZCxcclxuICB9O1xyXG4gIGlzQ0M6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc1pvb21lZE91dDogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgc3VwZXIoKTtcclxuICB9XHJcbiAgaXNab29tT3V0U2VsZWN0ZWQoaXNab29tT3V0KSB7XHJcbiAgICB0aGlzLmlzWm9vbWVkT3V0ID0gaXNab29tT3V0O1xyXG4gICAgdGhpcy5uZ09uQ2hhbmdlcygpO1xyXG4gIH1cclxuICBuZ09uQ2hhbmdlcygpIHtcclxuICAgIGxldCBzZWxmID0gdGhpcztcclxuICAgIGQzLnNlbGVjdCgnIycgKyBzZWxmLnVuaXF1ZUlkKS5yZW1vdmUoKTtcclxuICAgIHRoaXMuaW5pdGlhbGl6ZVN0YWNrZWRDaGFydCgpO1xyXG4gIH1cclxuICBvblJlc2l6ZWQoZXZlbnQ6IFJlc2l6ZWRFdmVudCkge1xyXG4gICAgbGV0IHNlbGYgPSB0aGlzO1xyXG4gICAgc2V0VGltZW91dChcclxuICAgICAgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGQzLnNlbGVjdCgnIycgKyBzZWxmLnVuaXF1ZUlkKS5yZW1vdmUoKTtcclxuICAgICAgICBzZWxmLmluaXRpYWxpemVTdGFja2VkQ2hhcnQoKTtcclxuICAgICAgfS5iaW5kKHNlbGYpLFxyXG4gICAgICAxMFxyXG4gICAgKTtcclxuICB9XHJcbiAgbmdPbkluaXQoKSB7IH1cclxuXHJcbiAgaW5pdGlhbGl6ZVN0YWNrZWRDaGFydCgpIHtcclxuICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgIGxldCBkYXRhOiBhbnkgPSBbXTtcclxuICAgIGxldCBtZXRhRGF0YTogYW55ID0gbnVsbDtcclxuICAgIGxldCBrZXlMaXN0ID0gbnVsbDtcclxuICAgIGxldCBsaW5lRGF0YSA9IG51bGw7XHJcbiAgICBsZXQgY29sb3JzOiBhbnkgPSBudWxsO1xyXG4gICAgdmFyIGFsdGVybmF0ZV90ZXh0ID0gZmFsc2U7XHJcbiAgICB2YXIgYWx0ZXJuYXRlX2xhYmVsID0gZmFsc2U7XHJcbiAgICB2YXIgc2hvcnRfdGlja19sZW5ndGggPSA0O1xyXG4gICAgdmFyIGxvbmdfdGlja19sZW5ndGggPSAxNjtcclxuICAgIHZhciBzaG9ydF90aWNrX2xlbmd0aF9iZyA9IDU7XHJcbiAgICB2YXIgbG9uZ190aWNrX2xlbmd0aF9iZyA9IDMwO1xyXG4gICAgdmFyIGZvcm1hdEZyb21CYWNrZW5kO1xyXG4gICAgdmFyIGZvcm1hdEZvckh1Z2VOdW1iZXJzO1xyXG4gICAgdmFyIHRlbXBPYmplY3RIb2xkZXIgPSB7fTtcclxuICAgIHZhciByaWdodFN2Z1dpZHRoID0gNjA7XHJcbiAgICB2YXIgbGVmdEFuZFJpZ2h0U3BhY2VzID0gNTA7XHJcblxyXG4gICAgICAgbGV0IGlzcmlhID0gdGhpcy5jdXN0b21DaGFydENvbmZpZ3VyYXRpb24uaXNSaWFcclxuXHJcbiAgICAvLyBSZXNwb25zaXZlIGJyZWFrcG9pbnRzXHJcbiAgICBjb25zdCBpc01vYmlsZSA9IHdpbmRvdy5pbm5lcldpZHRoIDwgNTc2O1xyXG4gICAgY29uc3QgaXNUYWJsZXQgPSB3aW5kb3cuaW5uZXJXaWR0aCA+PSA1NzYgJiYgd2luZG93LmlubmVyV2lkdGggPCA5OTI7XHJcbiAgICBjb25zdCBpc0Rlc2t0b3AgPSB3aW5kb3cuaW5uZXJXaWR0aCA+PSA5OTI7XHJcblxyXG4gICAgLy8gQWRqdXN0IG1hcmdpbnMgYW5kIGZvbnQgc2l6ZXMgYmFzZWQgb24gZGV2aWNlXHJcbiAgICBpZiAoaXNNb2JpbGUpIHtcclxuICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24ubWFyZ2luID0geyB0b3A6IDIwLCByaWdodDogMTAsIGJvdHRvbTogNDAsIGxlZnQ6IDMwIH07XHJcbiAgICAgIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLm51bWJlck9mWVRpY2tzID0gNDtcclxuICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uc3ZnSGVpZ2h0ID0gNjA7XHJcbiAgICB9IGVsc2UgaWYgKGlzVGFibGV0KSB7XHJcbiAgICAgIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLm1hcmdpbiA9IHsgdG9wOiAyNSwgcmlnaHQ6IDIwLCBib3R0b206IDQ1LCBsZWZ0OiA0MCB9O1xyXG4gICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5udW1iZXJPZllUaWNrcyA9IDY7XHJcbiAgICAgIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnN2Z0hlaWdodCA9IDcwO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24ubWFyZ2luID0geyB0b3A6IDMwLCByaWdodDogMzAsIGJvdHRvbTogNTAsIGxlZnQ6IDYwIH07XHJcbiAgICAgIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLm51bWJlck9mWVRpY2tzID0gNztcclxuICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uc3ZnSGVpZ2h0ID0gODA7XHJcbiAgICB9XHJcblxyXG4gICAgZm9yICh2YXIgaSBpbiB0aGlzLmRlZmF1bHRDb25maWd1cmF0aW9uKSB7XHJcbiAgICAgIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uW2ldID0gQ2hhcnRIZWxwZXIuZ2V0VmFsdWVCeUNvbmZpZ3VyYXRpb25UeXBlKFxyXG4gICAgICAgIGksXHJcbiAgICAgICAgdGhpcy5kZWZhdWx0Q29uZmlndXJhdGlvbixcclxuICAgICAgICB0aGlzLmN1c3RvbUNoYXJ0Q29uZmlndXJhdGlvblxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgZGF0YSA9IHRoaXMuY2hhcnREYXRhLmRhdGE7XHJcbiAgICBtZXRhRGF0YSA9IHRoaXMuY2hhcnREYXRhLm1ldGFEYXRhO1xyXG4gICAgaWYgKG1ldGFEYXRhLnVuaXQgPT0gdW5kZWZpbmVkKSBtZXRhRGF0YS51bml0ID0gJyc7XHJcbiAgICBpZiAobWV0YURhdGEuaXNDQykge1xyXG4gICAgICB0aGlzLmlzQ0MgPSBtZXRhRGF0YS5pc0NDO1xyXG4gICAgfVxyXG4gICAgaWYgKG1ldGFEYXRhLmJhcldpdGhvdXRDbGljayAmJiBtZXRhRGF0YS5iYXJXaXRob3V0Q2xpY2subGVuZ3RoKSB7XHJcbiAgICAgIG1ldGFEYXRhLmJhcldpdGhvdXRDbGljayA9IG1ldGFEYXRhLmJhcldpdGhvdXRDbGljay5tYXAoKGVsZSkgPT5cclxuICAgICAgICBlbGUudG9Mb3dlckNhc2UoKVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbWV0YURhdGEuYmFyV2l0aG91dENsaWNrID0gW107XHJcbiAgICB9XHJcbiAgICBsaW5lRGF0YSA9IHRoaXMuY2hhcnREYXRhLmxpbmVEYXRhO1xyXG4gICAgY29sb3JzID0gbWV0YURhdGEuY29sb3JzO1xyXG4gICAga2V5TGlzdCA9IG1ldGFEYXRhLmtleUxpc3Q7XHJcblxyXG4gICAgdmFyIGNoYXJ0Q29udGFpbmVyID0gZDMuc2VsZWN0KHRoaXMuY29udGFpbmVyRWx0Lm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgdmFyIHZlcnRpY2Fsc3RhY2tlZGNvbnRhaW5lciA9IGQzLnNlbGVjdChcclxuICAgICAgdGhpcy52ZXJ0aWNhbHN0YWNrZWRjb250YWluZXJFbHQubmF0aXZlRWxlbWVudFxyXG4gICAgKTtcclxuXHJcbiAgICBsZXQgcGFyc2VkTnVtID0gcGFyc2VGbG9hdCh0aGlzLmNoYXJ0RGF0YT8udGFyZ2V0TGluZURhdGE/LnRhcmdldCk7XHJcbiAgICBpZiAoIWlzTmFOKHBhcnNlZE51bSkpIHtcclxuICAgICAgaWYgKE51bWJlci5pc0ludGVnZXIocGFyc2VkTnVtKSkge1xyXG4gICAgICAgIHBhcnNlZE51bSA9IHBhcnNlSW50KHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLnRhcmdldCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcGFyc2VkTnVtID0gcGFyc2VGbG9hdCh0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB2YXIgbWFyZ2luID0gdGhpcy5jaGFydENvbmZpZ3VyYXRpb24ubWFyZ2luO1xyXG5cclxuICAgIC8vIFJlc3BvbnNpdmUgd2lkdGggYW5kIGhlaWdodFxyXG4gICAgdmFyIGNvbnRhaW5lcldpZHRoID0gY2hhcnRDb250YWluZXIubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xyXG4gICAgdmFyIGNvbnRhaW5lckhlaWdodCA9IHZlcnRpY2Fsc3RhY2tlZGNvbnRhaW5lci5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O1xyXG4gICAgdmFyIHdpZHRoID0gY29udGFpbmVyV2lkdGggLSBtYXJnaW4ubGVmdCAtIG1hcmdpbi5yaWdodDtcclxuICAgIHZhciBoZWlnaHQgPSBjb250YWluZXJIZWlnaHQgKiAoc2VsZi5jaGFydENvbmZpZ3VyYXRpb24uc3ZnSGVpZ2h0IC8gMTAwKSAtIG1hcmdpbi50b3AgLSBtYXJnaW4uYm90dG9tO1xyXG5cclxuICAgIC8vIEFkanVzdCB3aWR0aCBmb3IgbGFyZ2UgZGF0YXNldHMgYW5kIHpvb21cclxuICAgIGlmICh0aGlzLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCA+IDMwICYmIHRoaXMuaXNab29tZWRPdXQpIHtcclxuICAgICAgd2lkdGggPSB3aWR0aCA+IHRoaXMuY2hhcnREYXRhLmRhdGEubGVuZ3RoICogKGlzTW9iaWxlID8gMTUgOiAyNSlcclxuICAgICAgICA/IHdpZHRoXHJcbiAgICAgICAgOiB0aGlzLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCAqIChpc01vYmlsZSA/IDE1IDogMjUpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY2hhcnREYXRhLmRhdGEubGVuZ3RoID4gOCAmJiAhdGhpcy5pc1pvb21lZE91dCkge1xyXG4gICAgICB3aWR0aCA9IHRoaXMuY2hhcnREYXRhLmRhdGEubGVuZ3RoICogKGlzTW9iaWxlID8gNjAgOiAxMzApO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEZ1bGxzY3JlZW4gYW5kIGRyaWxsZG93biBhZGp1c3RtZW50c1xyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzRnVsbFNjcmVlbiAhPSB1bmRlZmluZWQgJiYgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNGdWxsU2NyZWVuKSB7XHJcbiAgICAgIGhlaWdodCA9IHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnN2Z0hlaWdodCAhPSA4MFxyXG4gICAgICAgID8gdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uc3ZnSGVpZ2h0XHJcbiAgICAgICAgOiBjb250YWluZXJIZWlnaHQ7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNEcmlsbGRvd25DaGFydCkge1xyXG4gICAgICBoZWlnaHQgPSBjb250YWluZXJIZWlnaHQgLSBtYXJnaW4udG9wIC0gbWFyZ2luLmJvdHRvbSAtIChpc01vYmlsZSA/IDYwIDogMTMwKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyAuLi5leGlzdGluZyBjb2RlLi4uXHJcbiAgICAvKipcclxuICAgICAqIGZvciBoaWRpbmcgaGVhZGVyXHJcbiAgICAgKiB1c2VkIGJ5IHdlZWtseSBjaGFydHNcclxuICAgICAqL1xyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzSGVhZGVyVmlzaWJsZSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5pc0hlYWRlclZpc2libGUgPSB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0hlYWRlclZpc2libGU7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIGZvciBoaWRpbmcgbGVnZW5kc1xyXG4gICAgICogdXNlZCBieSB3ZWVrbHkgY2hhcnRzXHJcbiAgICAgKi9cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1RvcENhcHRpb25WaXNpYmxlICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAvL1VQREFURU5BTUVcclxuICAgICAgdGhpcy5pc1RvcENhcHRpb25WaXNpYmxlID0gdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNUb3BDYXB0aW9uVmlzaWJsZTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogZm9yIHJlbW92aW5nIGJhY2tncm91bmQgY29sb3Igc28gdGhhdCBpdCBjYW4gdGFrZSBwYXJlbnRzIGNvbG9yXHJcbiAgICAgKlxyXG4gICAgICovXHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNUcmFuc3BhcmVudEJhY2tncm91bmQgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuaXNUcmFuc3BhcmVudEJhY2tncm91bmQgPVxyXG4gICAgICAgIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBmb3JtYXQgZGF0YSB2YWx1ZXMgYmFzZWQgb24gY29uZmlndXJhdGlvbiByZWNlaXZlZFxyXG4gICAgICovXHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24udGV4dEZvcm1hdHRlciAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgZm9ybWF0RnJvbUJhY2tlbmQgPSBDaGFydEhlbHBlci5kYXRhVmFsdWVGb3JtYXR0ZXIoXHJcbiAgICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24udGV4dEZvcm1hdHRlclxyXG4gICAgICApO1xyXG4gICAgICBmb3JtYXRGb3JIdWdlTnVtYmVycyA9IENoYXJ0SGVscGVyLmRhdGFWYWx1ZUZvcm1hdHRlcignLjJzJyk7XHJcbiAgICB9XHJcbiAgICB2YXIgb3V0ZXJDb250YWluZXIgPSBjaGFydENvbnRhaW5lclxyXG4gICAgICAuYXBwZW5kKCdkaXYnKVxyXG4gICAgICAuYXR0cignaWQnLCBzZWxmLnVuaXF1ZUlkKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnb3V0ZXItY29udGFpbmVyJylcclxuICAgICAgLnN0eWxlKCd3aWR0aCcsICcxMDAlJylcclxuICAgICAgLnN0eWxlKCdoZWlnaHQnLCBoZWlnaHQpXHJcblxyXG4gICAgICAuc3R5bGUoJ292ZXJmbG93LXgnLCAnaGlkZGVuJylcclxuICAgICAgLnN0eWxlKCdwYWRkaW5nLWxlZnQnLCBgJHttYXJnaW4ubGVmdH1weGApXHJcbiAgICAgIC5zdHlsZSgnbWFyZ2luLWxlZnQnLCAnMTBweCcpXHJcbiAgICAgIC5zdHlsZSgncGFkZGluZy1yaWdodCcsIGAke3JpZ2h0U3ZnV2lkdGh9cHhgKTtcclxuXHJcbiAgICB2YXIgc3ZnWUF4aXNMZWZ0ID0gb3V0ZXJDb250YWluZXJcclxuICAgICAgLmFwcGVuZCgnc3ZnJylcclxuICAgICAgLmF0dHIoJ3dpZHRoJywgJzgwJylcclxuICAgICAgLmF0dHIoJ2hlaWdodCcsIGhlaWdodCArIG1hcmdpbi50b3AgKyBtYXJnaW4uYm90dG9tKVxyXG4gICAgICAuc3R5bGUoJ3Bvc2l0aW9uJywgJ2Fic29sdXRlJylcclxuICAgICAgLnN0eWxlKCdsZWZ0JywgJzAnKVxyXG4gICAgICAuc3R5bGUoJ3otaW5kZXgnLCAxKVxyXG4gICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoJyArIChtYXJnaW4ubGVmdCArIDEwKSArICcsJyArIG1hcmdpbi50b3AgKyAnKScpO1xyXG5cclxuICAgIHZhciBzdmdZQXhpc1JpZ2h0ID0gb3V0ZXJDb250YWluZXJcclxuICAgICAgLmFwcGVuZCgnc3ZnJylcclxuICAgICAgLmF0dHIoJ3dpZHRoJywgcmlnaHRTdmdXaWR0aClcclxuICAgICAgLmF0dHIoJ2hlaWdodCcsIGhlaWdodCArIG1hcmdpbi50b3AgKyBtYXJnaW4uYm90dG9tKVxyXG4gICAgICAuc3R5bGUoJ3Bvc2l0aW9uJywgJ2Fic29sdXRlJylcclxuICAgICAgLnN0eWxlKCdyaWdodCcsICcycHgnKVxyXG4gICAgICAuc3R5bGUoJ3otaW5kZXgnLCAxKVxyXG4gICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoJyArIDAgKyAnLCcgKyBtYXJnaW4udG9wICsgJyknKTtcclxuXHJcbiAgICB2YXIgaW5uZXJDb250YWluZXIgPSBvdXRlckNvbnRhaW5lclxyXG4gICAgICAuYXBwZW5kKCdkaXYnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnaW5uZXItY29udGFpbmVyJylcclxuICAgICAgLnN0eWxlKCd3aWR0aCcsICcxMDAlJylcclxuICAgICAgLnN0eWxlKCdvdmVyZmxvdy14JywgJ2F1dG8nKTtcclxuXHJcblxyXG4gICAgLy8gQ2FsY3VsYXRlIGJhciB3aWR0aCBhbmQgcGFkZGluZyBmb3IgbW9iaWxlIHRvIGF2b2lkIG92ZXJsYXAgYW5kIGFkZCBzcGFjZSBiZXR3ZWVuIGJhcnNcclxuICAgIGxldCBiYXJXaWR0aDtcclxuICAgIGxldCBiYXJQYWRkaW5nID0gMTI7IC8vIHB4LCBzcGFjZSBiZXR3ZWVuIGJhcnMgb24gbW9iaWxlXHJcbiAgICBsZXQgcmVxdWlyZWRTdmdXaWR0aDtcclxuICAgIGlmIChpc01vYmlsZSkge1xyXG4gICAgICAvLyBVc2UgYSBtaW5pbXVtIHdpZHRoIHBlciBiYXIgYW5kIGFkZCBwYWRkaW5nIGJldHdlZW4gYmFyc1xyXG4gICAgICBjb25zdCBtaW5CYXJXaWR0aCA9IDMyOyAvLyBweCwgY2FuIGFkanVzdCBhcyBuZWVkZWRcclxuICAgICAgYmFyV2lkdGggPSBtaW5CYXJXaWR0aDtcclxuICAgICAgcmVxdWlyZWRTdmdXaWR0aCA9IE1hdGgubWF4KFxyXG4gICAgICAgIHdpZHRoIC0gcmlnaHRTdmdXaWR0aCxcclxuICAgICAgICAoYmFyV2lkdGggKyBiYXJQYWRkaW5nKSAqIGRhdGEubGVuZ3RoICsgbGVmdEFuZFJpZ2h0U3BhY2VzICogMiArIHJpZ2h0U3ZnV2lkdGggLSBiYXJQYWRkaW5nIC8vIG5vIHBhZGRpbmcgYWZ0ZXIgbGFzdCBiYXJcclxuICAgICAgKTtcclxuICAgICAgaW5uZXJDb250YWluZXIuc3R5bGUoJ292ZXJmbG93LXgnLCAnYXV0bycpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgYmFyV2lkdGggPSBNYXRoLm1heCg0MCwgKHdpZHRoIC0gcmlnaHRTdmdXaWR0aCAtIGxlZnRBbmRSaWdodFNwYWNlcyAqIDIpIC8gZGF0YS5sZW5ndGgpO1xyXG4gICAgICBiYXJQYWRkaW5nID0gMDtcclxuICAgICAgcmVxdWlyZWRTdmdXaWR0aCA9IHdpZHRoIC0gcmlnaHRTdmdXaWR0aDtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgc3ZnID0gaW5uZXJDb250YWluZXJcclxuICAgICAgLmFwcGVuZCgnc3ZnJylcclxuICAgICAgLmF0dHIoJ3dpZHRoJywgcmVxdWlyZWRTdmdXaWR0aClcclxuICAgICAgLmF0dHIoJ2hlaWdodCcsIGhlaWdodCArIG1hcmdpbi50b3AgKyBtYXJnaW4uYm90dG9tICsgMzApXHJcbiAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgnICsgMCArICcsJyArIG1hcmdpbi50b3AgKyAnKScpO1xyXG5cclxuICAgIGxldCBzdGFja0tleSA9IGtleUxpc3Q7XHJcbiAgICB2YXIgc3RhY2s6IGFueSA9IGQzXHJcbiAgICAgIC5zdGFjaygpXHJcbiAgICAgIC5rZXlzKHN0YWNrS2V5KVxyXG4gICAgICAvKi5vcmRlcihkMy5zdGFja09yZGVyKSovXHJcbiAgICAgIC5vZmZzZXQoZDMuc3RhY2tPZmZzZXROb25lKTtcclxuICAgIHZhciBsYXllcnM6IGFueSA9IHN0YWNrKGRhdGEpO1xyXG4gICAgZGF0YS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XHJcbiAgICAgIHJldHVybiBiLnRvdGFsIC0gYS50b3RhbDtcclxuICAgIH0pO1xyXG4gICAgbGV0IGxpbmVZc2NhbGU7XHJcbiAgICBpZiAobGluZURhdGEgIT0gbnVsbCkge1xyXG4gICAgICBsaW5lWXNjYWxlID0gZDNcclxuICAgICAgICAuc2NhbGVMaW5lYXIoKVxyXG4gICAgICAgIC5kb21haW4oW1xyXG4gICAgICAgICAgMCxcclxuICAgICAgICAgIGQzLm1heChsaW5lRGF0YSwgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgICAgcmV0dXJuICtkLnZhbHVlO1xyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgXSlcclxuICAgICAgICAucmFuZ2UoW2hlaWdodCwgMF0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENhbGN1bGF0ZSBiYXIgd2lkdGggZm9yIG1vYmlsZSB0byBhdm9pZCBvdmVybGFwXHJcbiAgICAvLyAuLi5iYXJXaWR0aCBpcyBub3cgY2FsY3VsYXRlZCBhYm92ZSwgcmVtb3ZlIGR1cGxpY2F0ZS4uLlxyXG5cclxuICAgIHZhciB4U2NhbGUgPSBkM1xyXG4gICAgICAuc2NhbGVCYW5kKClcclxuICAgICAgLnJhbmdlUm91bmQoW1xyXG4gICAgICAgIGxlZnRBbmRSaWdodFNwYWNlcyxcclxuICAgICAgICB3aWR0aCAtIHJpZ2h0U3ZnV2lkdGggLSBsZWZ0QW5kUmlnaHRTcGFjZXNcclxuICAgICAgXSlcclxuICAgICAgLmRvbWFpbihcclxuICAgICAgICBkYXRhLm1hcChmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgcmV0dXJuIGQubmFtZTtcclxuICAgICAgICB9KS5yZXZlcnNlKClcclxuICAgICAgKVxyXG4gICAgICAucGFkZGluZyhpc01vYmlsZSA/IDAuMiA6IDAuNSk7XHJcblxyXG4gICAgdmFyIHhTY2FsZUZyb21PcmlnaW4gPSBkM1xyXG4gICAgICAuc2NhbGVCYW5kKClcclxuICAgICAgLnJhbmdlUm91bmQoW3dpZHRoIC0gcmlnaHRTdmdXaWR0aCwgMF0pXHJcbiAgICAgIC5kb21haW4oXHJcbiAgICAgICAgZGF0YS5tYXAoZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgIHJldHVybiBkLm5hbWU7XHJcbiAgICAgICAgfSkucmV2ZXJzZSgpXHJcbiAgICAgICk7XHJcbiAgICAvLyAuLi5leGlzdGluZyBjb2RlLi4uXHJcbiAgICAvKipcclxuICAgICAqIGRyYXcgc2Vjb25kIHggYXhpcyBvbiB0b3BcclxuICAgICAqL1xyXG4gICAgaWYgKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnNob3dYYXhpc1RvcCkge1xyXG4gICAgICBzdmdcclxuICAgICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgICAuYXR0cignY2xhc3MnLCAnbGliLWxpbmUtYXhpcy10ZXh0IGxpYi1saW5lLXgtYXhpcy10ZXh0IHgtYXhpcycpXHJcbiAgICAgICAgLmF0dHIoJ3N0eWxlJywgc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ueEF4aXNDdXN0b21UZXh0U3R5bGVzKVxyXG4gICAgICAgIC5jYWxsKGQzLmF4aXNCb3R0b20oeFNjYWxlKS50aWNrU2l6ZSgwKSk7XHJcbiAgICAgIHN2Zy5zZWxlY3RBbGwoJy54LWF4aXMgPiBnID4gdGV4dCcpLmF0dHIoJ2NsYXNzJywgJ2xpYi1kaXNwbGF5LWhpZGRlbicpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBkcmF3IHNlY29uZCB4IGF4aXMgb24gdG9wXHJcbiAgICAgKi9cclxuICAgIC8vIGlmIChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5zaG93WGF4aXNBdFRhcmdldCkge1xyXG4gICAgLy8gICBzdmdcclxuICAgIC8vICAgICAuYXBwZW5kKCdnJylcclxuICAgIC8vICAgICAuYXR0cignY2xhc3MnLCAnbGliLWxpbmUtYXhpcy10ZXh0IGxpYi1saW5lLXgtYXhpcy10ZXh0IHgtYXhpcycpXHJcbiAgICAvLyAgICAgLmF0dHIoJ3N0eWxlJywgc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ueEF4aXNDdXN0b21UZXh0U3R5bGVzKVxyXG4gICAgLy8gICAgIC5jYWxsKGQzLmF4aXNCb3R0b20oeFNjYWxlKS50aWNrU2l6ZSgwKSk7XHJcbiAgICAvLyAgIHN2Zy5zZWxlY3RBbGwoJy54LWF4aXMgPiBnID4gdGV4dCcpLmF0dHIoJ2NsYXNzJywgJ2xpYi1kaXNwbGF5LWhpZGRlbicpO1xyXG4gICAgLy8gfVxyXG5pZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24ueEF4aXNHcmlkKSB7XHJcbiAgZm9yICh2YXIgaiA9IDA7IGogPCB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi54QXhpc0dyaWQubGVuZ3RoOyBqKyspIHtcclxuICAgIHN2Z1xyXG4gICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgYHgke2ogKyAyfSBheGlzJHtqICsgMn1gKVxyXG4gICAgICAuc3R5bGUoJ2NvbG9yJywgJ3ZhcigtLWNoYXJ0LWdyaWQtY29sb3IpJykgLy8gVXNlIENTUyB2YXJpYWJsZSBpbnN0ZWFkIG9mIGhhcmRjb2RlZFxyXG4gICAgICAuYXR0cihcclxuICAgICAgICAndHJhbnNmb3JtJyxcclxuICAgICAgICAndHJhbnNsYXRlKDAsJyArIGhlaWdodCAqIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnhBeGlzR3JpZFtqXSArICcpJ1xyXG4gICAgICApXHJcbiAgICAgIC5jYWxsKGQzLmF4aXNCb3R0b20oeFNjYWxlKS50aWNrU2l6ZSgwKS50aWNrcyg1KS50aWNrRm9ybWF0KCcnKSlcclxuICAgICAgLnN0eWxlKCdmaWxsJywgJ3ZhcigtLWNoYXJ0LXRleHQtY29sb3IpJyk7XHJcbiAgfVxyXG59XHJcblxyXG4gICAgbGV0IHlTY2FsZSA9IGQzLnNjYWxlTGluZWFyKCkucmFuZ2VSb3VuZChbaGVpZ2h0LCAwXSk7XHJcbiAgICAvKipcclxuICAgICAqIHVwZGF0ZSBtYXggdmFrdWVzIHNvIHRoYXQgdGhlIHZha3VlIHdvbnQgZXhjZWVkIHRoZSBtYXggbGltaXRcclxuICAgICAqIHVzZWQgYnkgd2Vla2x5IGNoYXJ0c1xyXG4gICAgICovXHJcbiAgICB2YXIgbWF4VmFsdWUgPSBkMy5tYXgobGF5ZXJzLCAoZCkgPT4gZDMubWF4KGQsIChkKSA9PiBkWzFdKSk7XHJcbiAgICBpZiAobWF4VmFsdWUgPT0gMCkge1xyXG4gICAgICBpZiAodGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEpIHtcclxuICAgICAgICBtYXhWYWx1ZSA9IHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLnRhcmdldCArIDIwO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG1heFZhbHVlID0gMTAwO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uY3VzdG9tWXNjYWxlKSB7XHJcbiAgICAgIG1heFZhbHVlID0gbWF4VmFsdWUgKiB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5jdXN0b21Zc2NhbGU7XHJcbiAgICB9XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhICYmXHJcbiAgICAgIG1heFZhbHVlIDwgdGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEudGFyZ2V0XHJcbiAgICApIHtcclxuICAgICAgbWF4VmFsdWUgPVxyXG4gICAgICAgIG1heFZhbHVlIDwgMTAgJiYgdGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEudGFyZ2V0IDwgMTBcclxuICAgICAgICAgID8gdGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEudGFyZ2V0ICsgM1xyXG4gICAgICAgICAgOiB0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXQgKyAyMDtcclxuICAgIH1cclxuICAgIHlTY2FsZS5kb21haW4oWzAsIG1heFZhbHVlXSkubmljZSgpO1xyXG5cclxuICAgIGxldCB4QXhpcyA9IGQzXHJcbiAgICAgIC5heGlzQm90dG9tKHhTY2FsZSlcclxuICAgICAgLnRpY2tTaXplKDApXHJcbiAgICAgIC50aWNrRm9ybWF0KHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnhBeGlzTGFiZWxGb21hdHRlcik7XHJcblxyXG4gICAgbGV0IHlBeGlzID0gZDNcclxuICAgICAgLmF4aXNMZWZ0KHlTY2FsZSlcclxuICAgICAgLnRpY2tzKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLm51bWJlck9mWVRpY2tzKVxyXG4gICAgICAudGlja1NpemUoMClcclxuICAgICAgLnRpY2tGb3JtYXQoc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ueUF4aXNMYWJlbEZvbWF0dGVyKTtcclxuXHJcbiAgICBsZXQgeUxpbmVBeGlzO1xyXG4gICAgaWYgKGxpbmVZc2NhbGUgIT0gbnVsbCkge1xyXG4gICAgICB5TGluZUF4aXMgPSBkM1xyXG4gICAgICAgIC5heGlzUmlnaHQobGluZVlzY2FsZSlcclxuICAgICAgICAudGlja3Moc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ubnVtYmVyT2ZZVGlja3MpXHJcbiAgICAgICAgLnRpY2tTaXplKDApXHJcbiAgICAgICAgLnRpY2tGb3JtYXQoc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ueUxpbmVBeGlzTGFiZWxGb21hdHRlcik7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIGJldHdlZW4geC1heGlzIGxhYmVsIHVzZWQgYnkgd2Vla2x5IGNoYXJ0c1xyXG4gICAgICogaXNYZ3JpZEJldHdlZW5MYWJlbHMgd2lsbCBiZSB1bmRlZmluZWQgZm9yIGRhc2hib2FyZCBjaGFydHNcclxuICAgICAqL1xyXG4gICAgaWYgKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmlzWGdyaWRCZXR3ZWVuTGFiZWxzKSB7XHJcbiAgICAgIHN2Z1xyXG4gICAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAgIC5hdHRyKCdjbGFzcycsICdncmlkJylcclxuICAgICAgICAuYXR0cihcclxuICAgICAgICAgICd0cmFuc2Zvcm0nLFxyXG4gICAgICAgICAgJ3RyYW5zbGF0ZSgnICsgeFNjYWxlLmJhbmR3aWR0aCgpIC8gMiArICcsJyArIGhlaWdodCArICcpJ1xyXG4gICAgICAgIClcclxuICAgICAgICAuY2FsbChkMy5heGlzQm90dG9tKHhTY2FsZSkudGlja1NpemUoLWhlaWdodCkudGlja0Zvcm1hdCgnJykpXHJcbiAgICAgICAgLnN0eWxlKCdzdHJva2UtZGFzaGFycmF5JywgJzUgNScpXHJcbiAgICAgICAgLnN0eWxlKCdjb2xvcicsICcjOTk5OTk5JylcclxuICAgICAgICAvLyAuc3R5bGUoXCJvcGFjaXR5XCIsIFwiMC41XCIpXHJcbiAgICAgICAgLmNhbGwoKGcpID0+IGcuc2VsZWN0KCcuZG9tYWluJykucmVtb3ZlKCkpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiB1c2VkIHRvIGRyYXcgeS1heGlzIGdyaWRcclxuICAgICAqL1xyXG5pZiAoc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ueUF4aXNHcmlkKSB7XHJcbiAgc3ZnXHJcbiAgICAuYXBwZW5kKCdnJylcclxuICAgIC5hdHRyKCdjbGFzcycsICdncmlkJylcclxuICAgIC5jYWxsKFxyXG4gICAgICBkM1xyXG4gICAgICAgIC5heGlzTGVmdCh5U2NhbGUpXHJcbiAgICAgICAgLnRpY2tzKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLm51bWJlck9mWVRpY2tzKVxyXG4gICAgICAgIC50aWNrU2l6ZSgtd2lkdGgpXHJcbiAgICAgICAgLnRpY2tGb3JtYXQoJycpXHJcbiAgICApXHJcbiAgICAvLyBSZW1vdmUgaGFyZGNvZGVkIGNvbG9ycyBhbmQgdXNlIENTUyB2YXJpYWJsZXNcclxuICAgIC5zdHlsZSgnY29sb3InLCAndmFyKC0tY2hhcnQtZ3JpZC1jb2xvciknKVxyXG4gICAgLnN0eWxlKCdvcGFjaXR5JywgJzEnKVxyXG4gICAgLy8gLmNhbGwoKGcpID0+IGcuc2VsZWN0KCcuZG9tYWluJykucmVtb3ZlKCkpO1xyXG59XHJcblxyXG5cclxuICAgIHZhciBsYXllciA9IHN2Z1xyXG4gICAgICAuc2VsZWN0QWxsKCcubGF5ZXInKVxyXG4gICAgICAuZGF0YShsYXllcnMpXHJcbiAgICAgIC5lbnRlcigpXHJcbiAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnbGF5ZXInKVxyXG4gICAgICAuc3R5bGUoJ2ZpbGwnLCBmdW5jdGlvbiAoZCwgaSkge1xyXG4gICAgICAgIHJldHVybiBtZXRhRGF0YS5jb2xvcnNbZC5rZXldO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICB2YXIgcmVjdCA9IGxheWVyXHJcbiAgICAgIC5zZWxlY3RBbGwoJ3JlY3QnKVxyXG4gICAgICAuZGF0YShmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgIHJldHVybiBkO1xyXG4gICAgICB9KVxyXG4gICAgICAuZW50ZXIoKTtcclxuXHJcbiAgICByZWN0XHJcbiAgICAgIC5hcHBlbmQoJ3JlY3QnKVxyXG4gICAgICAub24oJ2NsaWNrJywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICBpZiAoIWxpbmVEYXRhIHx8IHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmZvckNvbXBhcmlzb24pIHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgIW1ldGFEYXRhLmJhcldpdGhvdXRDbGljayB8fFxyXG4gICAgICAgICAgICAhbWV0YURhdGEuYmFyV2l0aG91dENsaWNrLmxlbmd0aCB8fFxyXG4gICAgICAgICAgICAhbWV0YURhdGEuYmFyV2l0aG91dENsaWNrLmluY2x1ZGVzKGQuZGF0YS5uYW1lLnRvTG93ZXJDYXNlKCkpXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgICAgIHNlbGYuaGFuZGxlQ2xpY2soZC5kYXRhLm5hbWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgLmF0dHIoJ3knLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgIGlmICghaXNOYU4oZFswXSkgJiYgIWlzTmFOKGRbMV0pKSB7XHJcbiAgICAgICAgICBjb25zdCBhY3R1YWxIZWlnaHQgPSB5U2NhbGUoZFswXSkgLSB5U2NhbGUoZFsxXSk7XHJcbiAgICAgICAgICByZXR1cm4gYWN0dWFsSGVpZ2h0IDwgMyA/IHlTY2FsZShkWzBdKSAtIDMgOiB5U2NhbGUoZFsxXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgICB9KVxyXG4gICAgICAuYXR0cigneCcsIGZ1bmN0aW9uIChkLCBpKSB7XHJcbiAgICAgICAgaWYgKGlzTW9iaWxlKSB7XHJcbiAgICAgICAgICAvLyBPbiBtb2JpbGUsIHBvc2l0aW9uIGJhcnMgd2l0aCBwYWRkaW5nXHJcbiAgICAgICAgICByZXR1cm4gbGVmdEFuZFJpZ2h0U3BhY2VzICsgaSAqIChiYXJXaWR0aCArIGJhclBhZGRpbmcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2VsZi5jaGFydENvbmZpZ3VyYXRpb24uaXNNdWx0aUNoYXJ0R3JpZExpbmUgPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICByZXR1cm4geFNjYWxlKGQuZGF0YS5uYW1lKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0RyaWxsZG93bkNoYXJ0ICYmXHJcbiAgICAgICAgICAgIHNlbGYuY2hhcnREYXRhLmRhdGEubGVuZ3RoIDw9IDNcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICByZXR1cm4geFNjYWxlKGQuZGF0YS5uYW1lKSArIHhTY2FsZS5iYW5kd2lkdGgoKSAvIDIgLSAzNTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiB4U2NhbGUoZC5kYXRhLm5hbWUpICsgeFNjYWxlLmJhbmR3aWR0aCgpICogMC4xO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgLmF0dHIoJ2hlaWdodCcsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgaWYgKCFpc05hTihkWzBdKSAmJiAhaXNOYU4oZFsxXSkpIHtcclxuICAgICAgICAgIGNvbnN0IGFjdHVhbEhlaWdodCA9IHlTY2FsZShkWzBdKSAtIHlTY2FsZShkWzFdKTtcclxuICAgICAgICAgIHJldHVybiBhY3R1YWxIZWlnaHQgPCAzID8gMyA6IGFjdHVhbEhlaWdodDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5hdHRyKCd3aWR0aCcsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgLy8gVXNlIGNhbGN1bGF0ZWQgYmFyV2lkdGggZm9yIG1vYmlsZSwgb3RoZXJ3aXNlIHNjYWxlXHJcbiAgICAgICAgaWYgKGlzTW9iaWxlKSB7XHJcbiAgICAgICAgICByZXR1cm4gYmFyV2lkdGg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5pc011bHRpQ2hhcnRHcmlkTGluZSA9PSB1bmRlZmluZWRcclxuICAgICAgICAgID8geFNjYWxlLmJhbmR3aWR0aCgpXHJcbiAgICAgICAgICA6IHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmlzRHJpbGxkb3duQ2hhcnQgJiZcclxuICAgICAgICAgICAgc2VsZi5jaGFydERhdGEuZGF0YS5sZW5ndGggPD0gM1xyXG4gICAgICAgICAgICA/IDcwXHJcbiAgICAgICAgICAgIDogeFNjYWxlLmJhbmR3aWR0aCgpICogMC44O1xyXG4gICAgICB9KVxyXG4gICAgICAvLyAuc3R5bGUoJ2N1cnNvcicsICdwb2ludGVyJyk7XHJcbiAgICAgIC5zdHlsZSgnY3Vyc29yJywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICBpZiAobWV0YURhdGEuaGFzRHJpbGxEb3duKSB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIG1ldGFEYXRhLmJhcldpdGhvdXRDbGljay5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAgIG1ldGFEYXRhLmJhcldpdGhvdXRDbGljay5pbmNsdWRlcyhkLmRhdGEubmFtZS50b0xvd2VyQ2FzZSgpKVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnZGVmYXVsdCc7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gJ3BvaW50ZXInO1xyXG4gICAgICAgIH0gZWxzZSByZXR1cm4gJ2RlZmF1bHQnO1xyXG4gICAgICB9KVxyXG4gICAgICAuc3R5bGUoJ2ZpbGwnLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICFpc05hTihkWzBdKSAmJlxyXG4gICAgICAgICAgIWlzTmFOKGRbMV0pICYmXHJcbiAgICAgICAgICBzZWxmLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YSAmJlxyXG4gICAgICAgICAgcGFyc2VGbG9hdChkWzFdKSAtIHBhcnNlRmxvYXQoZFswXSkgPj1cclxuICAgICAgICAgIHBhcnNlRmxvYXQoc2VsZi5jaGFydERhdGEudGFyZ2V0TGluZURhdGEudGFyZ2V0KVxyXG4gICAgICAgIClcclxuICAgICAgICAgIHJldHVybiBzZWxmLmNoYXJ0RGF0YT8udGFyZ2V0TGluZURhdGE/LmJhckFib3ZlVGFyZ2V0Q29sb3I7XHJcblxyXG4gICAgICAgIHJldHVybiBtZXRhRGF0YS5jb2xvcnNbZC5rZXldO1xyXG4gICAgICB9KTtcclxuICAgIC8qKlxyXG4gICAgICogZG8gbm90IHNob3cgdmFsdXMgb24gaG92ZXIgYXMgaXRzIGFscmVheSBkaXNsYXllZFxyXG4gICAgICovXHJcbiAgICBpZiAoIXRoaXMuaXNDQyAmJiAhc2VsZi5jaGFydENvbmZpZ3VyYXRpb24uaXNNdWx0aUNoYXJ0R3JpZExpbmUpIHtcclxuICAgICAgcmVjdFxyXG4gICAgICAgIC5hcHBlbmQoJ3N2Zzp0aXRsZScpIC8vIFRJVExFIEFQUEVOREVEIEhFUkVcclxuICAgICAgICAudGV4dChmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgcmV0dXJuIGRbMV0gLSBkWzBdO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuaXNDQykge1xyXG4gICAgICByZWN0XHJcbiAgICAgICAgLmFwcGVuZCgndGV4dCcpXHJcbiAgICAgICAgLmF0dHIoJ3gnLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgcmV0dXJuIHhTY2FsZShkLmRhdGEubmFtZSk7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuYXR0cigndGV4dC1hbmNob3InLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgaWYgKCFkWzBdKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnZW5kJztcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnc3RhcnQnO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ3ZlcnRpY2FsYmFyX190ZXh0JylcclxuICAgICAgICAuYXR0cigneScsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICBpZiAoIWRbMF0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHlTY2FsZShkWzFdKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB5U2NhbGUoZFsxXSkgLSA3O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLy8gLmF0dHIoXCJ5XCIsIGZ1bmN0aW9uIChkKSB7IHJldHVybiB5U2NhbGUoZFswXSkgLSB5U2NhbGUoZFsxXSk7IH0pXHJcbiAgICAgICAgLmF0dHIoJ2R5JywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgIHJldHVybiBkLmNsYXNzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLnRleHQoZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgIGlmICghZFswXSkge1xyXG4gICAgICAgICAgICBpZiAoIWlzTmFOKGRbMV0gLSBkWzBdKSkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBNYXRoLnJvdW5kKChkWzFdIC0gZFswXSkgKiAxMDApIC8gMTAwO1xyXG4gICAgICAgICAgICB9IGVsc2UgcmV0dXJuO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKCFpc05hTihkWzFdKSkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBNYXRoLnJvdW5kKGRbMV0gKiAxMDApIC8gMTAwO1xyXG4gICAgICAgICAgICB9IGVsc2UgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICAgc3ZnXHJcbiAgICAgICAgLmFwcGVuZCgnZm9yZWlnbk9iamVjdCcpXHJcbiAgICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoJyArIDAgKyAnLCcgKyAoeVplcm8gLSAyNSkgKyAnKScpXHJcbiAgICAgICAgLmF0dHIoJ3dpZHRoJywgd2lkdGgpXHJcbiAgICAgICAgLmF0dHIoJ2hlaWdodCcsIDMwKVxyXG4gICAgICAgIC5hcHBlbmQoJ3hodG1sOmRpdicpXHJcbiAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ3RhcmdldC1kaXNwbGF5JylcclxuICAgICAgICAuc3R5bGUoJ2NvbG9yJywgdGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEuY29sb3IpXHJcbiAqL1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogb24gaG92ZXIsIGRpc3BsYXkgdGl0bGUgb24gdG9wXHJcbiAgICAgKi9cclxuICAgIGZ1bmN0aW9uIGhhbmRsZU1vdXNlT3ZlcihkLCBpKSB7XHJcbiAgICAgIGlmICghc2VsZi5jaGFydENvbmZpZ3VyYXRpb24uZGlzcGxheVRpdGxlT25Ub3ApIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgc3ZnXHJcbiAgICAgICAgLnNlbGVjdEFsbCgncmVjdCcpXHJcbiAgICAgICAgLmZpbHRlcihmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICAgICAgcmV0dXJuIGRhdGEgPT0gZDtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5zdHlsZSgnZmlsbCcsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICFpc05hTihkWzBdKSAmJlxyXG4gICAgICAgICAgICAhaXNOYU4oZFsxXSkgJiZcclxuICAgICAgICAgICAgc2VsZi5jaGFydERhdGEudGFyZ2V0TGluZURhdGEgJiZcclxuICAgICAgICAgICAgcGFyc2VGbG9hdChkWzFdKSAtIHBhcnNlRmxvYXQoZFswXSkgPj1cclxuICAgICAgICAgICAgcGFyc2VGbG9hdChzZWxmLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXQpXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgICAgIHJldHVybiBzZWxmLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS5iYXJBYm92ZVRhcmdldEhvdmVyQ29sb3JcclxuICAgICAgICAgICAgICA/IHNlbGYuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLmJhckFib3ZlVGFyZ2V0SG92ZXJDb2xvclxyXG4gICAgICAgICAgICAgIDogc2VsZi5jaGFydERhdGE/LnRhcmdldExpbmVEYXRhPy5iYXJBYm92ZVRhcmdldENvbG9yXHJcbiAgICAgICAgICAgICAgICA/IHNlbGYuY2hhcnREYXRhPy50YXJnZXRMaW5lRGF0YT8uYmFyQWJvdmVUYXJnZXRDb2xvclxyXG4gICAgICAgICAgICAgICAgOiAnJztcclxuXHJcbiAgICAgICAgICByZXR1cm4gbWV0YURhdGEuaG92ZXJDb2xvciA/IG1ldGFEYXRhLmhvdmVyQ29sb3IgOiAnJztcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgIHN2Z1xyXG4gICAgICAgIC5hcHBlbmQoJ2ZvcmVpZ25PYmplY3QnKVxyXG4gICAgICAgIC5hdHRyKCd4JywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgaWYgKHhTY2FsZS5iYW5kd2lkdGgoKSArIGxlZnRBbmRSaWdodFNwYWNlcyAqIDIgPiAxODApIHtcclxuICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICB4U2NhbGUoZC5kYXRhLm5hbWUpIC1cclxuICAgICAgICAgICAgICBsZWZ0QW5kUmlnaHRTcGFjZXMgK1xyXG4gICAgICAgICAgICAgICh4U2NhbGUuYmFuZHdpZHRoKCkgKyBsZWZ0QW5kUmlnaHRTcGFjZXMgKiAyIC0gMTgwKSAvIDJcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiB4U2NhbGUoZC5kYXRhLm5hbWUpIC0gbGVmdEFuZFJpZ2h0U3BhY2VzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi12ZXJ0aWNhbHN0YWNrLXRpdGxlLW9udG9wJylcclxuICAgICAgICAuYXR0cigneScsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgIC8vIEluY3JlYXNlIHRoZSBnYXAgYmV0d2VlbiB0aGUgYmFyIGFuZCB0aGUgdG9vbHRpcCAod2FzIC0xIC0gNDApXHJcbiAgICAgICAgICByZXR1cm4geVNjYWxlKGRbMV0pIC0gMSAtIDUwOyAvLyAxMHB4IG1vcmUgZ2FwXHJcbiAgICAgICAgfSlcclxuICAgICAgICAuYXR0cignZHknLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICByZXR1cm4gZC5jbGFzcztcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5hdHRyKCd3aWR0aCcsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKGQuZGF0YS5uYW1lICYmIC93ZWVrL2kudGVzdChkLmRhdGEubmFtZSkgJiYgL1xcZHs0fS1cXGR7Mn0tXFxkezJ9Ly50ZXN0KGQuZGF0YS5uYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgIHJldHVybiAnMjUwcHgnOyAvLyBpbmNyZWFzZSBmb3Igd2VlayArIGRhdGVcclxuICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmICh4U2NhbGUuYmFuZHdpZHRoKCkgKyBsZWZ0QW5kUmlnaHRTcGFjZXMgKiAyID4gMTgwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnMTgwcHgnO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHhTY2FsZS5iYW5kd2lkdGgoKSArIGxlZnRBbmRSaWdodFNwYWNlcyAqIDI7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuYXR0cignaGVpZ2h0JywgNDApXHJcbiAgICAgICAgLmFwcGVuZCgneGh0bWw6ZGl2JylcclxuICAgICAgICAuYXR0cignY2xhc3MnLCAndGl0bGUnKVxyXG4gICAgICAgIC5zdHlsZSgnei1pbmRleCcsIDk5KVxyXG4gICAgICAgIC5odG1sKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgIC8vIFRvb2x0aXAgY29udGVudCB3aXRob3V0IGFueSBhcnJvdyBtYXJrXHJcbiAgICAgICAgICBpZiAoIWlzTmFOKGRbMV0gLSBkWzBdKSkge1xyXG4gICAgICAgICAgICBpZiAoZFsxXSAtIGRbMF0gPT09IDApIHtcclxuICAgICAgICAgICAgICByZXR1cm4gJzxzcGFuIGNsYXNzPVwidGl0bGUtdG9wLXRleHRcIj4wPC9zcGFuPic7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGRhdGFUeXBlID0gbWV0YURhdGEuZGF0YVR5cGUgPyBtZXRhRGF0YS5kYXRhVHlwZSA6ICcnO1xyXG4gICAgICAgICAgICB2YXIgZGVzaXJlZFRleHQgPSAnJztcclxuICAgICAgICAgICAgLy8gQWx3YXlzIHNob3cgdGhlIGZ1bGwgeC1heGlzIGxhYmVsIChjYXRlZ29yeSBuYW1lKSBpbiB0aGUgdG9vbHRpcFxyXG4gICAgICAgICAgICBkZXNpcmVkVGV4dCA9XHJcbiAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwidGl0bGUtYmFyLW5hbWVcIj4nICtcclxuICAgICAgICAgICAgICAoZC5kYXRhLm5hbWUgPyBkLmRhdGEubmFtZSA6ICcnKSArXHJcbiAgICAgICAgICAgICAgJzwvc3Bhbj4nO1xyXG5cclxuICAgICAgICAgICAgZGVzaXJlZFRleHQgKz0gbWV0YURhdGEudW5pdFxyXG4gICAgICAgICAgICAgID8gJzxzcGFuIGNsYXNzPVwidGl0bGUtdG9wLXRleHRcIj4nICtcclxuICAgICAgICAgICAgICBtZXRhRGF0YS51bml0ICtcclxuICAgICAgICAgICAgICAoZFsxXSAtIGRbMF0pICsgJyAnICtcclxuICAgICAgICAgICAgICBkYXRhVHlwZSArXHJcbiAgICAgICAgICAgICAgJzwvc3Bhbj4nXHJcbiAgICAgICAgICAgICAgOiAnPHNwYW4gY2xhc3M9XCJ0aXRsZS10b3AtdGV4dFwiPicgK1xyXG4gICAgICAgICAgICAgIChkWzFdIC0gZFswXSkgKyAnICcgK1xyXG4gICAgICAgICAgICAgIGRhdGFUeXBlICtcclxuICAgICAgICAgICAgICAnPC9zcGFuPic7XHJcblxyXG4gICAgICAgICAgICAvLyBObyBhcnJvdyBtYXJrIG9yIGFycm93IEhUTUwvQ1NTIGluIHRvb2x0aXBcclxuICAgICAgICAgICAgcmV0dXJuIGRlc2lyZWRUZXh0O1xyXG4gICAgICAgICAgfSBlbHNlIHJldHVybjtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBoYW5kbGVNb3VzZU91dChkLCBpKSB7XHJcbiAgICAgIGlmICghc2VsZi5jaGFydENvbmZpZ3VyYXRpb24uZGlzcGxheVRpdGxlT25Ub3ApIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgLy8gc3ZnLnNlbGVjdEFsbCgncmVjdCcpLnN0eWxlKCdmaWxsJywgbWV0YURhdGEuY29sb3JzW2Qua2V5XSk7XHJcbiAgICAgIHN2Zy5zZWxlY3RBbGwoJ3JlY3QnKS5zdHlsZSgnZmlsbCcsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgIWlzTmFOKGRbMF0pICYmXHJcbiAgICAgICAgICAhaXNOYU4oZFsxXSkgJiZcclxuICAgICAgICAgIHNlbGYuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhICYmXHJcbiAgICAgICAgICBwYXJzZUZsb2F0KGRbMV0pIC0gcGFyc2VGbG9hdChkWzBdKSA+PVxyXG4gICAgICAgICAgcGFyc2VGbG9hdChzZWxmLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXQpXHJcbiAgICAgICAgKVxyXG4gICAgICAgICAgcmV0dXJuIHNlbGYuY2hhcnREYXRhPy50YXJnZXRMaW5lRGF0YT8uYmFyQWJvdmVUYXJnZXRDb2xvcjtcclxuXHJcbiAgICAgICAgcmV0dXJuIG1ldGFEYXRhLmNvbG9yc1tkLmtleV07XHJcbiAgICAgIH0pO1xyXG4gICAgICBzdmcuc2VsZWN0QWxsKCcubGliLXZlcnRpY2Fsc3RhY2stdGl0bGUtb250b3AnKS5yZW1vdmUoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIHVzZWQgdG8gc2hvdyB2YWx1ZSBvbiB0b3Agb2YgdGhlIGJhcnNcclxuICAgICAqIG5lZWQgdG8gYmUgdXNlZCBieSBiYXIgY2hhcnRzIG9ubHkob25lIGJhciBzaG91bGQgY29udGFpbiBvbmUgdmFsdWUpXHJcbiAgICAgKiB1c2VkIGJ5IHdlZWtseSBjaGFydHNcclxuICAgICAqL1xyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnNob3dUb3RhbE9uVG9wICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICByZWN0XHJcbiAgICAgICAgLmFwcGVuZCgndGV4dCcpXHJcbiAgICAgICAgLmF0dHIoJ3gnLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgcmV0dXJuIHhTY2FsZShkLmRhdGEubmFtZSkgKyB4U2NhbGUuYmFuZHdpZHRoKCkgLyAyO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi12ZXJ0aWNhbHN0YWNrLWxhYmVscy1vbnRvcC13ZWtseWNoYXJ0cycpXHJcbiAgICAgICAgLmF0dHIoJ3knLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgcmV0dXJuIHlTY2FsZShkWzFdKSAtIDM7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuYXR0cignZHknLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgcmV0dXJuIGQuY2xhc3M7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAudGV4dChmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgaWYgKCFpc05hTihkWzFdIC0gZFswXSkpIHtcclxuICAgICAgICAgICAgaWYgKGRbMV0gLSBkWzBdID09IDApIHtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGRbMV0gLSBkWzBdIDw9IDk5OSlcclxuICAgICAgICAgICAgICByZXR1cm4gbWV0YURhdGEudW5pdFxyXG4gICAgICAgICAgICAgICAgPyBtZXRhRGF0YS51bml0ICsgZm9ybWF0RnJvbUJhY2tlbmQoZFsxXSAtIGRbMF0pXHJcbiAgICAgICAgICAgICAgICA6IGZvcm1hdEZyb21CYWNrZW5kKGRbMV0gLSBkWzBdKTtcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgIHJldHVybiBtZXRhRGF0YS51bml0XHJcbiAgICAgICAgICAgICAgICA/IG1ldGFEYXRhLnVuaXQgKyBmb3JtYXRGb3JIdWdlTnVtYmVycyhkWzFdIC0gZFswXSlcclxuICAgICAgICAgICAgICAgIDogZm9ybWF0Rm9ySHVnZU51bWJlcnMoZFsxXSAtIGRbMF0pO1xyXG4gICAgICAgICAgfSBlbHNlIHJldHVybjtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogdXNlZCB0byBzaG93IGFuZ2xlZCB2YWx1ZXMgb24gdG9wIG9mIHRoZSBiYXJzXHJcbiAgICAgKiB1c2VkIGJ5IHdlZWtseSBjaGFydHNcclxuICAgICAqL1xyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnNob3dBbmdsZWRMYWJlbHMgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJlY3RcclxuICAgICAgICAuYXBwZW5kKCd0ZXh0JylcclxuICAgICAgICAuYXR0cigneCcsIDApXHJcbiAgICAgICAgLmF0dHIoJ2ZpbGwnLCBmdW5jdGlvbiAoZCwgaSkge1xyXG4gICAgICAgICAgcmV0dXJuIG1ldGFEYXRhLmNvbG9yc1tkLmtleV07XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuYXR0cignY2xhc3MnLCAnbGliLWRhdGEtbGFiZWxzLWFuZ2xlZC13ZWVrbHljaGFydHMnKVxyXG4gICAgICAgIC5hdHRyKCd5JywgMClcclxuICAgICAgICAuYXR0cignZHknLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgcmV0dXJuIGQuY2xhc3M7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAudGV4dChmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgaWYgKCFpc05hTihkWzFdIC0gZFswXSkgJiYgZFsxXSAtIGRbMF0gPiAwKSB7XHJcbiAgICAgICAgICAgIGlmIChkWzFdIC0gZFswXSA8PSA5OTkpXHJcbiAgICAgICAgICAgICAgcmV0dXJuIG1ldGFEYXRhLnVuaXRcclxuICAgICAgICAgICAgICAgID8gbWV0YURhdGEudW5pdCArIGZvcm1hdEZyb21CYWNrZW5kKGRbMV0gLSBkWzBdKVxyXG4gICAgICAgICAgICAgICAgOiBmb3JtYXRGcm9tQmFja2VuZChkWzFdIC0gZFswXSk7XHJcbiAgICAgICAgICAgIGVsc2UgcmV0dXJuIG1ldGFEYXRhLnVuaXQgKyBmb3JtYXRGb3JIdWdlTnVtYmVycyhkWzFdIC0gZFswXSk7XHJcbiAgICAgICAgICB9IGVsc2UgcmV0dXJuO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICBpZiAoIWlzTmFOKGRbMV0gLSBkWzBdKSAmJiBkWzFdIC0gZFswXSA+IDApIHtcclxuICAgICAgICAgICAgdmFyIHRvdGFsID0gMDtcclxuICAgICAgICAgICAgdmFyIGluY3JlbWVudGVyOiBudW1iZXIgPSAxO1xyXG4gICAgICAgICAgICBtZXRhRGF0YS5rZXlMaXN0LmZvckVhY2goKGtleSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChkLmRhdGFba2V5XSkgdG90YWwgPSB0b3RhbCArIGQuZGF0YVtrZXldO1xyXG4gICAgICAgICAgICAgIGVsc2UgaW5jcmVtZW50ZXIgPSAyO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgaWYgKHRlbXBPYmplY3RIb2xkZXJbZC5kYXRhLm5hbWVdID09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgIHRlbXBPYmplY3RIb2xkZXJbZC5kYXRhLm5hbWVdID0gMTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0ZW1wT2JqZWN0SG9sZGVyW2QuZGF0YS5uYW1lXSA9XHJcbiAgICAgICAgICAgICAgICB0ZW1wT2JqZWN0SG9sZGVyW2QuZGF0YS5uYW1lXSArIGluY3JlbWVudGVyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHN3aXRjaCAodGVtcE9iamVjdEhvbGRlcltkLmRhdGEubmFtZV0pIHtcclxuICAgICAgICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgICAndHJhbnNsYXRlKCcgK1xyXG4gICAgICAgICAgICAgICAgICAoeFNjYWxlKGQuZGF0YS5uYW1lKSArIHhTY2FsZS5iYW5kd2lkdGgoKSAvIDMpICtcclxuICAgICAgICAgICAgICAgICAgJywnICtcclxuICAgICAgICAgICAgICAgICAgKHlTY2FsZSh0b3RhbCkgLSAzKSArXHJcbiAgICAgICAgICAgICAgICAgICcpIHJvdGF0ZSgyNzApJ1xyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgICAndHJhbnNsYXRlKCcgK1xyXG4gICAgICAgICAgICAgICAgICAoeFNjYWxlKGQuZGF0YS5uYW1lKSArIHhTY2FsZS5iYW5kd2lkdGgoKSAvIDIgKyAyKSArXHJcbiAgICAgICAgICAgICAgICAgICcsJyArXHJcbiAgICAgICAgICAgICAgICAgICh5U2NhbGUodG90YWwpIC0gMykgK1xyXG4gICAgICAgICAgICAgICAgICAnKSByb3RhdGUoMjcwKSdcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICAgICd0cmFuc2xhdGUoJyArXHJcbiAgICAgICAgICAgICAgICAgICh4U2NhbGUoZC5kYXRhLm5hbWUpICsgKHhTY2FsZS5iYW5kd2lkdGgoKSAqIDMpIC8gNCkgK1xyXG4gICAgICAgICAgICAgICAgICAnLCcgK1xyXG4gICAgICAgICAgICAgICAgICAoeVNjYWxlKHRvdGFsKSAtIDMpICtcclxuICAgICAgICAgICAgICAgICAgJykgcm90YXRlKDI3MCknXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gJ3JvdGF0ZSgwKSc7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbmlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc011bHRpQ2hhcnRHcmlkTGluZSA9PSB1bmRlZmluZWQpIHtcclxuICBpZiAoaXNNb2JpbGUpIHtcclxuICAgIC8vIEN1c3RvbSB4LWF4aXMgbGFiZWwgcmVuZGVyaW5nIGZvciBtb2JpbGU6IGV2ZW5seSBkaXN0cmlidXRlIHVuZGVyIGVhY2ggYmFyXHJcbiAgICBzdmcuc2VsZWN0QWxsKCcuY3VzdG9tLXgtbGFiZWwnKS5yZW1vdmUoKTtcclxuICAgIGRhdGEuZm9yRWFjaChmdW5jdGlvbiAoZCwgaSkge1xyXG4gICAgICBjb25zdCB4VmFsID0gbGVmdEFuZFJpZ2h0U3BhY2VzICsgaSAqIChiYXJXaWR0aCArIGJhclBhZGRpbmcpICsgYmFyV2lkdGggLyAyO1xyXG4gICAgICBzdmcuYXBwZW5kKCd0ZXh0JylcclxuICAgICAgICAuYXR0cignY2xhc3MnLCAnY3VzdG9tLXgtbGFiZWwnKVxyXG4gICAgICAgIC5hdHRyKCd4JywgMClcclxuICAgICAgICAuYXR0cigneScsIGhlaWdodCArIDE4KVxyXG4gICAgICAgIC5hdHRyKCd0ZXh0LWFuY2hvcicsICdtaWRkbGUnKVxyXG4gICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKCcgKyAoeFZhbCArIDIwKSArICcsMCknKSAvLyBjdXJyZW50IHZhbHVlICsgMjBcclxuICAgICAgICAuc3R5bGUoJ2ZvbnQtc2l6ZScsICcxMHB4JylcclxuICAgICAgICAuc3R5bGUoJ2ZpbGwnLCAndmFyKC0tY2hhcnQtdGV4dC1jb2xvciknKVxyXG4gICAgICAgIC5zdHlsZSgnd3JpdGluZy1tb2RlJywgJ3NpZGV3YXlzLWxyJykgLy8gd3JpdGluZyBtb2RlIGZvciBtb2JpbGVcclxuICAgICAgICAudGV4dChkLm5hbWUuc3Vic3RyaW5nKDAsIDMpKTtcclxuICAgIH0pO1xyXG4gIH0gZWxzZSB7XHJcbiAgICBzdmdcclxuICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKDAsJyArIGhlaWdodCArICcpJylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi1zdGFja2VkLXgtYXhpcy10ZXh0JylcclxuICAgICAgLmNhbGwoeEF4aXMpXHJcbiAgICAgIC5zZWxlY3RBbGwoJ3RleHQnKVxyXG4gICAgICAuc3R5bGUoJ2ZpbGwnLCAndmFyKC0tY2hhcnQtdGV4dC1jb2xvciknKVxyXG4gICAgICAuc3R5bGUoJ2ZvbnQtc2l6ZScsICcxMnB4JylcclxuICAgICAgLmF0dHIoJ3RleHQtYW5jaG9yJywgJ21pZGRsZScpXHJcbiAgICAgIC5hdHRyKCdkeCcsICcwJylcclxuICAgICAgLmF0dHIoJ2R5JywgJzAuNzFlbScpXHJcbiAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBudWxsKVxyXG4gICAgICAudGV4dChmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgIHJldHVybiBkO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHN2Z1xyXG4gICAgLmFwcGVuZCgnZycpXHJcbiAgICAuYXR0cignY2xhc3MnLCAnbGliLXN0YWNrZWQteS1heGlzLXRleHQnKVxyXG4gICAgLmF0dHIoJ3N0eWxlJywgc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ueUF4aXNDdXN0b21UZXh0U3R5bGVzKVxyXG4gICAgLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoMCwwKScpXHJcbiAgICAuY2FsbCh5QXhpcylcclxuICAgIC5zZWxlY3RBbGwoJ3RleHQnKVxyXG4gIC5zdHlsZSgnZmlsbCcsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpO1xyXG59ZWxzZSBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNEcmlsbGRvd25DaGFydCkge1xyXG4gIHN2Z1xyXG4gICAgLmFwcGVuZCgnZycpXHJcbiAgICAuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgwLCcgKyBoZWlnaHQgKyAnKScpXHJcbiAgICAuYXR0cignY2xhc3MnLCAnbGliLXN0YWNrZWQteC1heGlzLXRleHQgbXVsdGljaGFydDEnKVxyXG4gICAgLmNhbGwoeEF4aXMpXHJcbiAgICAuc3R5bGUoJ2Rpc3BsYXknLCAnbm9uZScpXHJcblxyXG4gIHN2Z1lBeGlzTGVmdFxyXG4gICAgLmFwcGVuZCgnZycpXHJcbiAgICAuYXR0cignY2xhc3MnLCAnbGliLXlheGlzLWxhYmVscy10ZXh0cy1kcmlsbGRvd24geWF4aXMtZGFzaGVkJylcclxuICAgIC5hdHRyKCdzdHlsZScsIHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnlBeGlzQ3VzdG9tVGV4dFN0eWxlcylcclxuICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKDAsMCknKVxyXG4gICAgLmNhbGwoeUF4aXMpXHJcbiAgICAgIC5zZWxlY3RBbGwoJ3RleHQnKVxyXG4gIC5zdHlsZSgnZmlsbCcsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpO1xyXG4gICAgXHJcbiAgc3ZnWUF4aXNSaWdodFxyXG4gICAgLmFwcGVuZCgnZycpXHJcbiAgICAuYXR0cignY2xhc3MnLCAnbGliLXlheGlzLWxhYmVscy10ZXh0cy1kcmlsbGRvd24geWF4aXMtZGFzaGVkJylcclxuICAgIC5hdHRyKCdzdHlsZScsIHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnlBeGlzQ3VzdG9tVGV4dFN0eWxlcylcclxuICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKDAsMCknKVxyXG4gICAgLmNhbGwoeUF4aXMpXHJcbiAgICAuc3R5bGUoJ2Rpc3BsYXknLCAnbm9uZScpXHJcbn1cclxuZWxzZSB7XHJcbiAgc3ZnXHJcbiAgICAuYXBwZW5kKCdnJylcclxuICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKDAsJyArIGhlaWdodCArICcpJylcclxuICAgIC5hdHRyKCdjbGFzcycsICdsaWItc3RhY2tlZC14LWF4aXMtdGV4dCBtdWx0aWNoYXJ0JylcclxuICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKDAsJyArIGhlaWdodCArICcpJylcclxuICAgIC5jYWxsKHhBeGlzKVxyXG4gICAgLnNlbGVjdEFsbCgndGV4dCcpXHJcbiAgLnN0eWxlKCdmaWxsJywgJ3ZhcigtLWNoYXJ0LXRleHQtY29sb3IpJyk7XHJcblxyXG4gIHN2Z1xyXG4gICAgLmFwcGVuZCgnZycpXHJcbiAgICAuYXR0cignY2xhc3MnLCAnbGliLXN0YWNrZWQteS1heGlzLXRleHQgeWF4aXMtZGFzaGVkJylcclxuICAgIC5hdHRyKCdzdHlsZScsIHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnlBeGlzQ3VzdG9tVGV4dFN0eWxlcylcclxuICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKDAsMCknKVxyXG4gICAgLmNhbGwoeUF4aXMpXHJcbiAgICAgIC5zZWxlY3RBbGwoJ3RleHQnKVxyXG4gIC5zdHlsZSgnZmlsbCcsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpO1xyXG59XHJcbiAgICAvKipcclxuICAgICAqIGZvciBleGlzdGluZyBjaGFydHMsIHBsYWNlIHhheGlzIGxhYmVscyBuZWFyZXIgdG8geGF4aXNcclxuICAgICAqIHVzZWQgYnkgZXhpc3RpbmcgY2hhcnRzXHJcbiAgICAgKi9cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc011bHRpQ2hhcnRHcmlkTGluZSA9PSB1bmRlZmluZWQpIHtcclxuICAgICAgZDMuc2VsZWN0QWxsKCdnLmxpYi1zdGFja2VkLXgtYXhpcy10ZXh0IGcudGljayB0ZXh0JykuYXR0cihcclxuICAgICAgICAneScsXHJcbiAgICAgICAgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgaWYgKGFsdGVybmF0ZV90ZXh0KSB7XHJcbiAgICAgICAgICAgIGFsdGVybmF0ZV90ZXh0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiBsb25nX3RpY2tfbGVuZ3RoICsgMTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGFsdGVybmF0ZV90ZXh0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgcmV0dXJuIHNob3J0X3RpY2tfbGVuZ3RoICsgMTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBkMy5zZWxlY3RBbGwoJy5tdWx0aWNoYXJ0ID4gZyA+IHRleHQnKS5hdHRyKFxyXG4gICAgICAgICdjbGFzcycsXHJcbiAgICAgICAgJ2xpYi1kaXNwbGF5LWhpZGRlbidcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogYmFzZWQgb2YgdGhlIGZsYWcsIGhpZGUgb3Igc2hvdyB4YXhpcyB0ZXh0c1xyXG4gICAgICogdXNlZCBieSB3ZWVrbHkgY2hhcnRzXHJcbiAgICAgKi9cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNYYXhpc0xhYmVsSGlkZGVuICE9IHVuZGVmaW5lZCAmJlxyXG4gICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1hheGlzTGFiZWxIaWRkZW5cclxuICAgICkge1xyXG4gICAgICBkMy5zZWxlY3RBbGwoJy5tdWx0aWNoYXJ0ID4gZyA+IHRleHQnKS5hdHRyKFxyXG4gICAgICAgICdjbGFzcycsXHJcbiAgICAgICAgJ2xpYi1kaXNwbGF5LWhpZGRlbidcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNYYXhpc0xhYmVsSGlkZGVuICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICBzdmdcclxuICAgICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgICAuYXR0cignY2xhc3MnLCAneDEgYXhpczEnKVxyXG4gICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKDAsJyArIGhlaWdodCArICcpJylcclxuICAgICAgICAuc3R5bGUoJ2NvbG9yJywgJyMwMDAnKVxyXG5cclxuICAgICAgICAuY2FsbChkMy5heGlzQm90dG9tKHhTY2FsZSkudGlja1NpemUoMCkpXHJcbiAgICAgICAgLmNhbGwoKGcpID0+IGcuc2VsZWN0KCcuZG9tYWluJykuYXR0cignZmlsbCcsICdub25lJykpO1xyXG4gICAgICBzdmdcclxuICAgICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgICAuYXR0cignY2xhc3MnLCAneDIgYXhpczInKVxyXG4gICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKDAsJyArIGhlaWdodCArICcpJylcclxuICAgICAgICAuc3R5bGUoJ2NvbG9yJywgJyMwMDAnKVxyXG5cclxuICAgICAgICAuY2FsbChkMy5heGlzQm90dG9tKHhTY2FsZUZyb21PcmlnaW4pLnRpY2tTaXplKDApKVxyXG4gICAgICAgIC5jYWxsKChnKSA9PiBnLnNlbGVjdCgnLmRvbWFpbicpLmF0dHIoJ2ZpbGwnLCAnbm9uZScpKTtcclxuICAgICAgc3ZnLnNlbGVjdEFsbCgnLmF4aXMyID4gZyA+IHRleHQnKS5hdHRyKCdjbGFzcycsICdsaWItZGlzcGxheS1oaWRkZW4nKTtcclxuICAgICAgLy8gc3ZnLnNlbGVjdEFsbCgnZy54Mi5heGlzMiBnLnRpY2sgdGV4dCcpLnN0eWxlKCdkaXNwbGF5JywgJ25vbmUnKTtcclxuICAgICAgc3ZnLnNlbGVjdEFsbCgnLngxLmF4aXMxIC50aWNrIGxpbmUnKS5hdHRyKCd5MicsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAoc2VsZi5jaGFydENvbmZpZ3VyYXRpb24uaGlkZVhheGlzVGljaykge1xyXG4gICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIGlzTm9BbHRlcm5hdGVYYXhpc1RleHQgaXMgdXNlZCB0byBwcmV2ZW50IHgtYXhpcyBsYWJlbCB0byBiZSBkaXNwbGF5ZWQgaW4gYWx0ZXJuYXRlIGZhc2hpb25cclxuICAgICAgICAgKiBmb3IgZnV0dXJlIHVzZVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGFsdGVybmF0ZV90ZXh0ICYmXHJcbiAgICAgICAgICBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5pc05vQWx0ZXJuYXRlWGF4aXNUZXh0ID09IHVuZGVmaW5lZFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgYWx0ZXJuYXRlX3RleHQgPSBmYWxzZTtcclxuICAgICAgICAgIHJldHVybiBsb25nX3RpY2tfbGVuZ3RoX2JnIC0gNztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgYWx0ZXJuYXRlX3RleHQgPSB0cnVlO1xyXG4gICAgICAgICAgcmV0dXJuIHNob3J0X3RpY2tfbGVuZ3RoX2JnIC0gNDtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICAvKipcclxuICAgICAgICogcmVzZXQgdGhlIGZsYWcgc28gdGhhdCB0ZXh0cyBhbHNvIGZvbGxvdyB0aGUgcGF0dGVybiBvZiB0aWNrc1xyXG4gICAgICAgKiB1c2VkIGJ5IHdlZWtseSBjaGFydHNcclxuICAgICAgICovXHJcbiAgICAgIGFsdGVybmF0ZV90ZXh0ID0gZmFsc2U7XHJcbiAgICAgIHN2Z1xyXG4gICAgICAgIC5zZWxlY3RBbGwoJ2cueDEuYXhpczEgZy50aWNrIHRleHQnKVxyXG4gICAgICAgIC8vIC5hdHRyKCdjbGFzcycsICdsaWIteGF4aXMtbGFiZWxzLXRleHRzLXdlZWtseWNoYXJ0cycpXHJcbiAgICAgICAgLmF0dHIoJ2NsYXNzJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgaWYgKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmlzRHJpbGxkb3duQ2hhcnQpIHtcclxuICAgICAgICAgICAgaWYgKGRhdGEgJiYgZGF0YS5sZW5ndGggPiA4KSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuICdsaWIteGF4aXMtbGFiZWxzLXRleHRzLWRyaWxsZG93bi1hbHQnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiAnbGliLXhheGlzLWxhYmVscy10ZXh0cy1kcmlsbGRvd24nO1xyXG4gICAgICAgICAgfSBlbHNlIHJldHVybiAnbGliLXhheGlzLWxhYmVscy10ZXh0cy13ZWVrbHljaGFydHMnO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmF0dHIoJ3knLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICBpZiAoYWx0ZXJuYXRlX3RleHQpIHtcclxuICAgICAgICAgICAgYWx0ZXJuYXRlX3RleHQgPSBmYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuIGxvbmdfdGlja19sZW5ndGhfYmc7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBhbHRlcm5hdGVfdGV4dCA9IHRydWU7XHJcbiAgICAgICAgICAgIHJldHVybiBzaG9ydF90aWNrX2xlbmd0aF9iZztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIGlmIChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi54TGFiZWxzT25TYW1lTGluZSkge1xyXG4gICAgICBzdmdcclxuICAgICAgICAuc2VsZWN0QWxsKCdnLngxLmF4aXMxIGcudGljayB0ZXh0JylcclxuICAgICAgICAuYXR0cignY2xhc3MnLCAnbGliLXhheGlzLWxhYmVscy10ZXh0cy1kcmlsbGRvd24nKVxyXG4gICAgICAgIC5hdHRyKCd5Jywgc2hvcnRfdGlja19sZW5ndGhfYmcpXHJcbiAgICAgICAgLnRleHQoZnVuY3Rpb24gKGQsIGkpIHtcclxuICAgICAgICAgIGlmIChpc01vYmlsZSkge1xyXG4gICAgICAgICAgICAvLyBJZiBsYWJlbCBoYXMgbW9yZSB0aGFuIG9uZSB3b3JkLCBzaG93IG9ubHkgZmlyc3QgMyBsZXR0ZXJzIG9mIGZpcnN0IHdvcmRcclxuICAgICAgICAgICAgdmFyIGZpcnN0V29yZCA9IGQuc3BsaXQoJyAnKVswXTtcclxuICAgICAgICAgICAgcmV0dXJuIGZpcnN0V29yZC5zdWJzdHJpbmcoMCwgMyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoZC50cmltKCkuaW5kZXhPZignICcpID4gLTEpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGQudHJpbSgpLnN1YnN0cmluZygwLCBkLmluZGV4T2YoJyAnKSkudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBkLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuYXR0cigndHJhbnNmb3JtJywgZnVuY3Rpb24odGhpczogU1ZHVGV4dEVsZW1lbnQsIGQsIGkpIHtcclxuICAgICAgICAgIGlmIChpc01vYmlsZSkge1xyXG4gICAgICAgICAgICB2YXIgdG90YWxCYXJzID0gMDtcclxuICAgICAgICAgICAgaWYgKHRoaXMucGFyZW50Tm9kZSAmJiB0aGlzLnBhcmVudE5vZGUucGFyZW50Tm9kZSkge1xyXG4gICAgICAgICAgICAgIHRvdGFsQmFycyA9IGQzLnNlbGVjdCh0aGlzLnBhcmVudE5vZGUucGFyZW50Tm9kZSkuc2VsZWN0QWxsKCdnLnRpY2snKS5zaXplKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRvdGFsQmFycyA9PT0gMikge1xyXG4gICAgICAgICAgICAgIHJldHVybiAndHJhbnNsYXRlKDAsMCknO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHJldHVybiAndHJhbnNsYXRlKCcgKyAoaSAqIDMwKSArICcsMCknO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9KTtcclxuICAgICAgc3ZnXHJcbiAgICAgICAgLnNlbGVjdEFsbCgnZy54MS5heGlzMSBnLnRpY2snKVxyXG4gICAgICAgIC5hcHBlbmQoJ3RleHQnKVxyXG4gICAgICAgIC5hdHRyKCdjbGFzcycsICdsaWIteGF4aXMtbGFiZWxzLXRleHRzLWRyaWxsZG93bicpXHJcbiAgICAgICAgLmF0dHIoJ3knLCBsb25nX3RpY2tfbGVuZ3RoX2JnKVxyXG4gICAgICAgIC5hdHRyKCdmaWxsJywgJ2N1cnJlbnRDb2xvcicpXHJcbiAgICAgICAgLnRleHQoZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgIC8vIEZvciBtb2JpbGUsIGRvIG5vdCBwcmludCB0aGUgc2Vjb25kIHdvcmQgYXQgYWxsXHJcbiAgICAgICAgICBpZiAoaXNNb2JpbGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGQudHJpbSgpLmluZGV4T2YoJyAnKSA+IC0xKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBkLnRyaW0oKS5zdWJzdHJpbmcoZC5pbmRleE9mKCcgJyksIGQubGVuZ3RoKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIGZ1bmN0aW9uKGQsIGkpIHtcclxuICAgICAgICAgIGlmIChpc01vYmlsZSAmJiBpID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAndHJhbnNsYXRlKDIwLDApJztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBoaWRlIHlheGlzIHZhbHVlc1xyXG4gICAgICogdXNlZCBieSB3ZWVrbHkgY2hhcnRzXHJcbiAgICAgKi9cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNZYXhpc0xhYmVsSGlkZGVuICE9IHVuZGVmaW5lZCAmJlxyXG4gICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1lheGlzTGFiZWxIaWRkZW5cclxuICAgICkge1xyXG4gICAgICBzdmdcclxuICAgICAgICAuc2VsZWN0QWxsKCcueWF4aXMtZGFzaGVkID4gZyA+IHRleHQnKVxyXG4gICAgICAgIC5hdHRyKCdjbGFzcycsICdsaWItZGlzcGxheS1oaWRkZW4nKTtcclxuICAgIH1cclxuICAgIC8qKiBoaWRlIHkgYXhpcyBsYWJlbHNcclxuICAgICAqIGNvbmZpZyBpcyB0aGVyZSBmb3IgZnV0dXJlIHVzZVxyXG4gICAgICovXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzWWF4aXNIaWRkZW4gIT0gdW5kZWZpbmVkICYmXHJcbiAgICAgIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzWWF4aXNIaWRkZW5cclxuICAgICkge1xyXG4gICAgICBkMy5zZWxlY3RBbGwoJy55YXhpcy1kYXNoZWQnKS5hdHRyKCdjbGFzcycsICdsaWItZGlzcGxheS1oaWRkZW4nKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogZGFzaGVkIHkgYXhpc1xyXG4gICAgICogdXNlZCBieSB3ZWVrbHkgY2hhcnRzXHJcbiAgICAgKi9cclxuaWYgKFxyXG4gIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzWWF4aXNEYXNoZWQgIT0gdW5kZWZpbmVkICYmXHJcbiAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNZYXhpc0Rhc2hlZFxyXG4pIHtcclxuICBkMy5zZWxlY3RBbGwoJy55YXhpcy1kYXNoZWQnKVxyXG4gICAgLnN0eWxlKCdzdHJva2UtZGFzaGFycmF5JywgJzUgNScpXHJcbiAgICAuc3R5bGUoJ2NvbG9yJywgJ3ZhcigtLWNoYXJ0LWdyaWQtY29sb3IpJyk7IC8vIFVzZSBDU1MgdmFyaWFibGVcclxufVxyXG4gICAgLyoqXHJcbiAgICAgKiB4IGF4aXMgY29sb3JcclxuICAgICAqIHVzZWQgYnkgd2Vla2x5IGNoYXJ0c1xyXG4gICAgICovXHJcbmlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1hheGlzQ29sb3IgIT0gdW5kZWZpbmVkKSB7XHJcbiAgZDMuc2VsZWN0QWxsKCcubXVsdGljaGFydCcpLnN0eWxlKFxyXG4gICAgJ2NvbG9yJyxcclxuICAgIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzWGF4aXNDb2xvciB8fCAndmFyKC0tY2hhcnQtdGV4dC1jb2xvciknXHJcbiAgKTtcclxufVxyXG4gICAgLyoqXHJcbiAgICAgKiB1c2VkIHRvIGRpc3BsYXkgeSBsYWJlbFxyXG4gICAgICovXHJcbmlmICh0aGlzLmlzWm9vbWVkT3V0ICYmIHRoaXMuY2hhcnREYXRhLmRhdGEubGVuZ3RoID4gOCkge1xyXG4gIHN2Z1xyXG4gICAgLnNlbGVjdEFsbCgnLmxpYi14YXhpcy1sYWJlbHMtdGV4dHMtZHJpbGxkb3duJylcclxuICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAncm90YXRlKC05MCknKVxyXG4gICAgLmF0dHIoJ3RleHQtYW5jaG9yJywgJ2VuZCcpXHJcbiAgICAuYXR0cigneCcsICctNScpXHJcbiAgICAuYXR0cignZHknLCBudWxsKTtcclxufVxyXG5cclxuZnVuY3Rpb24gc3R5bGVBeGlzRG9tYWluKCkge1xyXG4gIHN2Zy5zZWxlY3RBbGwoJy5kb21haW4nKVxyXG4gICAgLnN0eWxlKCdzdHJva2UnLCAndmFyKC0tY2hhcnQtYXhpcy1jb2xvciknKVxyXG4gICAgLnN0eWxlKCdzdHJva2Utd2lkdGgnLCAnMXB4Jyk7XHJcbiAgXHJcbiAgc3ZnWUF4aXNMZWZ0LnNlbGVjdEFsbCgnLmRvbWFpbicpXHJcbiAgICAuc3R5bGUoJ3N0cm9rZScsICd2YXIoLS1jaGFydC1heGlzLWNvbG9yKScpXHJcbiAgICAuc3R5bGUoJ3N0cm9rZS13aWR0aCcsICcxcHgnKTtcclxuICAgIFxyXG4gIHN2Z1lBeGlzUmlnaHQuc2VsZWN0QWxsKCcuZG9tYWluJylcclxuICAgIC5zdHlsZSgnc3Ryb2tlJywgJ3ZhcigtLWNoYXJ0LWF4aXMtY29sb3IpJylcclxuICAgIC5zdHlsZSgnc3Ryb2tlLXdpZHRoJywgJzFweCcpO1xyXG59XHJcblxyXG5zdHlsZUF4aXNEb21haW4oKTtcclxuXHJcbiAgICBpZiAobWV0YURhdGEueUxhYmVsKSB7XHJcbiAgICAgIHN2Z1lBeGlzTGVmdC5zZWxlY3RBbGwoJy5saWItYXhpcy1ncm91cC1sYWJlbCwgLmxpYi15bGFiZWwtZHJpbGxkb3duY2hhcnRzLCAubGliLXlsYWJlbC13ZWVrbHlDaGFydHMnKS5yZW1vdmUoKTtcclxuICAgICAgZnVuY3Rpb24gaXNBY3JvbnltKGxhYmVsKSB7XHJcbiAgICAgICAgcmV0dXJuIChsYWJlbC5sZW5ndGggPD0gNCAmJiAvXltBLVpdKyQvLnRlc3QobGFiZWwpKSB8fCAobGFiZWwgPT09IGxhYmVsLnRvVXBwZXJDYXNlKCkgJiYgL1tBLVpdLy50ZXN0KGxhYmVsKSk7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgeUxhYmVsVGV4dCA9IG1ldGFEYXRhLnlMYWJlbDtcclxuICAgICAgY29uc3QgaXNBY3IgPSBpc0Fjcm9ueW0oeUxhYmVsVGV4dC5yZXBsYWNlKC9bXkEtWmEtel0vZywgJycpKTtcclxuXHJcbiAgICAgY29uc3QgeVBvc2l0aW9uID0gaXNyaWEgPyAwIC0gbWFyZ2luLmxlZnQgLyAyIC0gMzAgOiAwIC0gbWFyZ2luLmxlZnQgLyAyIC0gNDA7XHJcblxyXG4gICAgICBzdmdZQXhpc0xlZnRcclxuICAgICAgICAuYXBwZW5kKCd0ZXh0JylcclxuXHJcbiAgICAgICAgICAgICAgICAuYXR0cignY2xhc3MnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICBsZXQgYmFzZUNsYXNzID0gJ2xpYi1heGlzLWdyb3VwLWxhYmVsIGZvbnQtc2l6ZS0xJztcclxuICAgICAgICAgIGlmIChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0RyaWxsZG93bkNoYXJ0KVxyXG4gICAgICAgICAgICByZXR1cm4gYmFzZUNsYXNzICsgJyBsaWIteWxhYmVsLWRyaWxsZG93bmNoYXJ0cyc7XHJcbiAgICAgICAgICBpZiAoc2VsZi5jaGFydENvbmZpZ3VyYXRpb24uaXNNdWx0aUNoYXJ0R3JpZExpbmUgIT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICByZXR1cm4gYmFzZUNsYXNzICsgJyBsaWIteWxhYmVsLXdlZWtseUNoYXJ0cyc7XHJcbiAgICAgICAgICByZXR1cm4gYmFzZUNsYXNzICsgJyBsaWItYXhpcy13YXRlcmZhbGwtbGFiZWwnO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmF0dHIoJ3N0eWxlJywgc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ueUF4aXNDdXN0b21sYWJlbFN0eWxlcylcclxuICAgICAgICAuYXR0cigndHJhbnNmb3JtJywgJ3JvdGF0ZSgtOTApJylcclxuICAgICAgICAuYXR0cigneScsIHlQb3NpdGlvbilcclxuICAgICAgICAuYXR0cigneCcsIDAgLSBoZWlnaHQgLyAyKVxyXG4gICAgICAgIC5hdHRyKCdkeScsICcxZW0nKVxyXG4gICAgICAgIC5zdHlsZSgndGV4dC1hbmNob3InLCAnbWlkZGxlJylcclxuICAgICAgICAuc3R5bGUoJ2ZpbGwnLCAndmFyKC0tY2hhcnQtdGV4dC1jb2xvciknKVxyXG4gICAgICAgIC5zdHlsZSgnY29sb3InLCAndmFyKC0tY2hhcnQtdGV4dC1jb2xvciknKVxyXG4gICAgICAgIC50ZXh0KGlzQWNyID8geUxhYmVsVGV4dC50b1VwcGVyQ2FzZSgpIDogeUxhYmVsVGV4dC50b0xvd2VyQ2FzZSgpKVxyXG4gICAgICAgIC5zdHlsZSgndGV4dC10cmFuc2Zvcm0nLCBpc0FjciA/ICdub25lJyA6ICdjYXBpdGFsaXplJyk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEpIHtcclxuICAgICAgY29uc3QgeVplcm8gPSB5U2NhbGUocGFyc2VkTnVtKTtcclxuICAgICAgc3ZnXHJcbiAgICAgICAgLmFwcGVuZCgnbGluZScpXHJcbiAgICAgICAgLmF0dHIoJ3gxJywgMClcclxuICAgICAgICAuYXR0cigneDInLCB3aWR0aClcclxuICAgICAgICAuYXR0cigneTEnLCB5WmVybylcclxuICAgICAgICAuYXR0cigneTInLCB5WmVybylcclxuICAgICAgICAuc3R5bGUoJ3N0cm9rZS1kYXNoYXJyYXknLCAnNSA1JylcclxuICAgICAgICAuc3R5bGUoJ3N0cm9rZScsIHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLmNvbG9yKTtcclxuICAgICAgLy8gc3ZnWUF4aXNSaWdodFxyXG4gICAgICAvLyAgIC5hcHBlbmQoJ2xpbmUnKVxyXG4gICAgICAvLyAgIC5hdHRyKCd4MScsIDApXHJcbiAgICAgIC8vICAgLmF0dHIoJ3gyJywgcmlnaHRTdmdXaWR0aClcclxuICAgICAgLy8gICAuYXR0cigneTEnLCB5WmVybylcclxuICAgICAgLy8gICAuYXR0cigneTInLCB5WmVybylcclxuICAgICAgLy8gICAuc3R5bGUoJ3N0cm9rZScsIHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLmNvbG9yKTtcclxuICAgICAgc3ZnWUF4aXNSaWdodFxyXG4gICAgICAgIC5hcHBlbmQoJ2ZvcmVpZ25PYmplY3QnKVxyXG4gICAgICAgIC8vIC5hdHRyKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKCcgKyAwICsgJywnICsgKHlaZXJvIC0gMzApICsgJyknKVxyXG4gICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKCcgKyAwICsgJywnICsgKHlaZXJvIC0gMTMpICsgJyknKVxyXG4gICAgICAgIC5hdHRyKCd3aWR0aCcsIHJpZ2h0U3ZnV2lkdGgpXHJcbiAgICAgICAgLmF0dHIoJ2hlaWdodCcsIDUwKVxyXG4gICAgICAgIC5hcHBlbmQoJ3hodG1sOmRpdicpXHJcbiAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ3RhcmdldC1kaXNwbGF5JylcclxuICAgICAgICAuc3R5bGUoJ2NvbG9yJywgJ3ZhcigtLWNoYXJ0LXRleHQtY29sb3IpJylcclxuXHJcbiAgICAgICAgLmh0bWwoZnVuY3Rpb24gKGQsIGkpIHtcclxuICAgICAgICAgIGxldCBkYXRhVHlwZVRlbXAgPSAnJztcclxuICAgICAgICAgIGxldCB0YXJnZXRMaW5lTmFtZSA9ICd0YXJnZXQnO1xyXG4gICAgICAgICAgaWYgKG1ldGFEYXRhLmRhdGFUeXBlKSB7XHJcbiAgICAgICAgICAgIGRhdGFUeXBlVGVtcCA9IG1ldGFEYXRhLmRhdGFUeXBlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBzZWxmLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YSAmJlxyXG4gICAgICAgICAgICBzZWxmLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXROYW1lXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgdGFyZ2V0TGluZU5hbWUgPSBzZWxmLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXROYW1lO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgYDxkaXY+JHt0YXJnZXRMaW5lTmFtZX08L2Rpdj5gICtcclxuICAgICAgICAgICAgJzxkaXY+JyArXHJcbiAgICAgICAgICAgIHNlbGYuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLnRhcmdldCArXHJcbiAgICAgICAgICAgICcnICtcclxuICAgICAgICAgICAgZGF0YVR5cGVUZW1wICtcclxuICAgICAgICAgICAgJzwvZGl2PidcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZWN0XHJcbiAgICAgIC5zZWxlY3RBbGwoJ3JlY3QnKVxyXG4gICAgICAub24oJ21vdXNlZW50ZXInLCBoYW5kbGVNb3VzZU92ZXIpXHJcbiAgICAgIC5vbignbW91c2VvdXQnLCBoYW5kbGVNb3VzZU91dCk7XHJcbiAgICBpZiAobWV0YURhdGEubGluZXlMYWJlbCkge1xyXG4gICAgICBzdmdcclxuICAgICAgICAuYXBwZW5kKCd0ZXh0JylcclxuICAgICAgICAuYXR0cignY2xhc3MnLCAnbGliLWF4aXMtZ3JvdXAtbGFiZWwgbGliLWxpbmUtYXhpcycpXHJcbiAgICAgICAgLmF0dHIoJ3N0eWxlJywgc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ueUF4aXNDdXN0b21sYWJlbFN0eWxlcylcclxuICAgICAgICAuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgnICsgKHdpZHRoIC0gMjApICsgJywwKSByb3RhdGUoOTApJylcclxuICAgICAgICAuYXR0cigneScsIDAgLSBtYXJnaW4ucmlnaHQgKiAzKVxyXG4gICAgICAgIC5hdHRyKCd4JywgaGVpZ2h0IC8gMilcclxuICAgICAgICAuYXR0cignZHknLCAnNWVtJylcclxuICAgICAgICAuc3R5bGUoJ3RleHQtYW5jaG9yJywgJ21pZGRsZScpXHJcbiAgICAgICAgLnRleHQobWV0YURhdGEubGluZXlMYWJlbCk7XHJcbiAgICB9XHJcblxyXG4gICAgICAgIGlmIChtZXRhRGF0YS54TGFiZWwpIHtcclxuICAgICAgZnVuY3Rpb24gaXNBY3JvbnltKGxhYmVsKSB7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgIChsYWJlbC5sZW5ndGggPD0gNCAmJiAvXltBLVpdKyQvLnRlc3QobGFiZWwpKSB8fFxyXG4gICAgICAgICAgKGxhYmVsID09PSBsYWJlbC50b1VwcGVyQ2FzZSgpICYmIC9bQS1aXS8udGVzdChsYWJlbCkpXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCB4TGFiZWxUZXh0ID0gbWV0YURhdGEueExhYmVsO1xyXG4gICAgICBjb25zdCBpc0FjciA9IGlzQWNyb255bSh4TGFiZWxUZXh0LnJlcGxhY2UoL1teQS1aYS16XS9nLCAnJykpO1xyXG5cclxuICAgICAgICBjb25zdCB4UG9zaXRpb24gPSBpc3JpYSA/IChoZWlnaHQgKyBtYXJnaW4udG9wICsgbWFyZ2luLmJvdHRvbSkgOiAoaGVpZ2h0ICsgbWFyZ2luLnRvcCArIG1hcmdpbi5ib3R0b20gKyAxMCk7XHJcblxyXG4gICAgICBzdmdcclxuICAgICAgICAuYXBwZW5kKCd0ZXh0JylcclxuICAgICAgICAuYXR0cignY2xhc3MnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICBsZXQgYmFzZUNsYXNzID0gJ2xpYi1heGlzLWdyb3VwLWxhYmVsIGZvbnQtc2l6ZS0xJztcclxuICAgICAgICAgIGlmIChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0RyaWxsZG93bkNoYXJ0KVxyXG4gICAgICAgICAgICByZXR1cm4gYmFzZUNsYXNzICsgJyBsaWIteGxhYmVsLWRyaWxsZG93bmNoYXJ0cyc7XHJcbiAgICAgICAgICBpZiAoc2VsZi5jaGFydENvbmZpZ3VyYXRpb24uaXNNdWx0aUNoYXJ0R3JpZExpbmUgIT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICByZXR1cm4gYmFzZUNsYXNzICsgJyBsaWIteGxhYmVsLXdlZWtseUNoYXJ0cyc7XHJcbiAgICAgICAgICByZXR1cm4gYmFzZUNsYXNzICsgJyBsaWItYXhpcy13YXRlcmZhbGwtbGFiZWwnO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmF0dHIoJ3N0eWxlJywgc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ueEF4aXNDdXN0b21sYWJlbFN0eWxlcylcclxuICAgICAgICAuYXR0cihcclxuICAgICAgICAgICd0cmFuc2Zvcm0nLFxyXG4gICAgICAgICAgJ3RyYW5zbGF0ZSgnICsgd2lkdGggLyAyICsgJyAsJyArIHhQb3NpdGlvbiArICcpJ1xyXG4gICAgICAgIClcclxuICAgICAgICAuc3R5bGUoJ3RleHQtYW5jaG9yJywgJ21pZGRsZScpXHJcbiAgICAgICAgLnN0eWxlKCdmaWxsJywgJ3ZhcigtLWNoYXJ0LXRleHQtY29sb3IpJylcclxuICAgICAgICAudGV4dChpc0FjciA/IHhMYWJlbFRleHQudG9VcHBlckNhc2UoKSA6IHhMYWJlbFRleHQudG9Mb3dlckNhc2UoKSlcclxuICAgICAgICAuc3R5bGUoJ3RleHQtdHJhbnNmb3JtJywgaXNBY3IgPyAnbm9uZScgOiAnY2FwaXRhbGl6ZScpO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBpZiAobGluZURhdGEgJiYgY29sb3JzKSB7XHJcbiAgICAgIHZhciBkYXRhR3JvdXAgPSBkM1xyXG4gICAgICAgIC5uZXN0KClcclxuICAgICAgICAua2V5KGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICByZXR1cm4gZC5jYXRlZ29yeTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5lbnRyaWVzKGxpbmVEYXRhKTtcclxuXHJcbiAgICAgIHZhciBsaW5lR2VuID0gZDNcclxuICAgICAgICAubGluZSgpXHJcbiAgICAgICAgLngoZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgIHJldHVybiB4U2NhbGUoZC5uYW1lKSArIHhTY2FsZS5iYW5kd2lkdGgoKSAvIDI7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAueShmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgcmV0dXJuIGxpbmVZc2NhbGUoZC52YWx1ZSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICB2YXIgY2FsY3VsYXRlQ1ggPSAoZCkgPT4ge1xyXG4gICAgICAgIHJldHVybiB4U2NhbGUoZC5uYW1lKSArIHhTY2FsZS5iYW5kd2lkdGgoKSAvIDI7XHJcbiAgICAgIH07XHJcblxyXG4gICAgICB2YXIgY2FsY3VsYXRlQ1kgPSAoZCkgPT4ge1xyXG4gICAgICAgIHJldHVybiBsaW5lWXNjYWxlKGQudmFsdWUpO1xyXG4gICAgICB9O1xyXG5cclxuICAgICAgZGF0YUdyb3VwLmZvckVhY2goZnVuY3Rpb24gKGQsIGkpIHtcclxuICAgICAgICBzdmdcclxuICAgICAgICAgIC5hcHBlbmQoJ3BhdGgnKVxyXG4gICAgICAgICAgLmRhdHVtKGQudmFsdWVzKVxyXG4gICAgICAgICAgLmF0dHIoJ2ZpbGwnLCAnbm9uZScpXHJcbiAgICAgICAgICAuYXR0cignc3Ryb2tlJywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgICAgaWYgKCdjYXRlZ29yeScgaW4gZFswXSkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBjb2xvcnNbZFswXS5jYXRlZ29yeV07XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmxpbmVHcmFwaENvbG9yO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLmF0dHIoJ3N0cm9rZS13aWR0aCcsIDIuNSkgLyoqbGluZSB0aGlua25lc3MgKi9cclxuICAgICAgICAgIC5hdHRyKCdkJywgbGluZUdlbihkLnZhbHVlcykpO1xyXG5cclxuICAgICAgICB2YXIgZG90ID0gc3ZnXHJcbiAgICAgICAgICAuc2VsZWN0QWxsKCdteUNpcmNsZXMnKVxyXG4gICAgICAgICAgLmRhdGEoZC52YWx1ZXMpXHJcbiAgICAgICAgICAuZW50ZXIoKVxyXG4gICAgICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgICAgICAub24oJ2NsaWNrJywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgICAgc2VsZi5oYW5kbGVDbGljayhkKTtcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICBkb3RcclxuICAgICAgICAgIC5hcHBlbmQoJ2NpcmNsZScpXHJcbiAgICAgICAgICAuYXR0cignZmlsbCcsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICAgIGlmICgnY2F0ZWdvcnknIGluIGQpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gY29sb3JzW2QuY2F0ZWdvcnldO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHJldHVybiBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5saW5lR3JhcGhDb2xvcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC5hdHRyKCdzdHJva2UnLCAnbm9uZScpXHJcbiAgICAgICAgICAuYXR0cignY3gnLCBmdW5jdGlvbiAoZCwgaSkge1xyXG4gICAgICAgICAgICByZXR1cm4geFNjYWxlKGQubmFtZSkgKyB4U2NhbGUuYmFuZHdpZHRoKCkgLyAyO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC5hdHRyKCdjeScsIGZ1bmN0aW9uIChkLCBpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBsaW5lWXNjYWxlKGQudmFsdWUpO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC5hdHRyKCdyJywgMykgLyoqcmFkaXVzIG9mIGNpcmNsZT01ICovXHJcbiAgICAgICAgICAuc3R5bGUoJ2N1cnNvcicsICdwb2ludGVyJyk7XHJcblxyXG4gICAgICAgIGlmIChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5saW5lR3JhcGhDb2xvcikge1xyXG4gICAgICAgICAgZG90XHJcbiAgICAgICAgICAgIC5hcHBlbmQoJ3RleHQnKVxyXG4gICAgICAgICAgICAuYXR0cignY2xhc3MnLCAnZG90cycpXHJcbiAgICAgICAgICAgIC5hdHRyKCdmaWxsJywgc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ubGluZUdyYXBoQ29sb3IpXHJcbiAgICAgICAgICAgIC5hdHRyKCdzdHlsZScsICdmb250LXNpemU6ICcgKyAnLjg1ZW07JyArICdmb250LXdlaWdodDonICsgJ2JvbGQnKVxyXG4gICAgICAgICAgICAuYXR0cigneCcsIGZ1bmN0aW9uIChkLCBpKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHhTY2FsZShkLm5hbWUpICsgeFNjYWxlLmJhbmR3aWR0aCgpIC8gMjtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmF0dHIoJ3knLCBmdW5jdGlvbiAoZCwgaSkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBsaW5lWXNjYWxlKGQudmFsdWUpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuYXR0cignZHknLCAnLTFlbScpXHJcbiAgICAgICAgICAgIC50ZXh0KGZ1bmN0aW9uIChkLCBpKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmxhYmVsRm9ybWF0dGVyKGQudmFsdWUpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgLy8gc3ZnLmF0dHIoJ3dpZHRoJywgMTUwKS5zdHlsZSgnbWF4LXdpZHRoJywgMTUwKS5zdHlsZSgnb3ZlcmZsb3cteCcsICdhdXRvJyk7XHJcbiAgfVxyXG4gIGhhbmRsZUNsaWNrKGQ6IGFueSkge1xyXG4gICAgaWYgKHRoaXMuY2hhcnREYXRhPy5tZXRhRGF0YT8uaGFzRHJpbGxEb3duIHx8IGQ/LnRvZ2dsZUZyb20pXHJcbiAgICAgIHRoaXMuY2xpY2tFdmVudC5lbWl0KGQpO1xyXG4gIH1cclxuICBoYW5kbGVIZWFkZXJNZW51Q2xpY2soaWQpIHtcclxuICAgIHRoaXMuaGVhZGVyTWVudWNsaWNrRXZlbnQuZW1pdChpZCk7XHJcbiAgfVxyXG4gIGhhbmRsZUNvbXBhcmVCeUZpbHRlclNlbGVjdGlvbihldmVudCkge1xyXG4gICAgdGhpcy5jbGlja0V2ZW50LmVtaXQoZXZlbnQpO1xyXG4gIH1cclxuICBoYW5kbGVab29taW5ab29tb3V0Q2xpY2soeyBpc1pvb21PdXQsIGV2ZW50IH0pIHtcclxuICAgIC8vIHRoaXMuaXNab29tT3V0U2VsZWN0ZWQoaXNab29tT3V0LCBldmVudCk7XHJcbiAgICB0aGlzLmlzWm9vbU91dFNlbGVjdGVkKGlzWm9vbU91dCk7XHJcbiAgfVxyXG59XHJcbiIsIjxtZXRhIGh0dHAtZXF1aXY9XCJDQUNIRS1DT05UUk9MXCIgY29udGVudD1cIk5PLUNBQ0hFXCIgLz5cclxuPG1ldGEgaHR0cC1lcXVpdj1cIkVYUElSRVNcIiBjb250ZW50PVwiU2F0LCAwMSBKdW4gMjAwNCAxMToxMjowMSBHTVRcIiAvPlxyXG48ZGl2XHJcbiAgI3ZlcnRpY2Fsc3RhY2tlZGNvbnRhaW5lclxyXG4gIGNsYXNzPVwibGliLWNoYXJ0LXdyYXBwZXJcIlxyXG4gIFtuZ0NsYXNzXT1cInsgJ2xpYi1uby1iYWNrZ3JvdW5kJzogaXNUcmFuc3BhcmVudEJhY2tncm91bmQgfVwiXHJcbiAgICBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6IHZhcigtLWNhcmQtYmcpO1wiXHJcblxyXG4gIChyZXNpemVkKT1cIm9uUmVzaXplZCgkZXZlbnQpXCJcclxuPlxyXG4gIDxkaXYgY2xhc3M9XCJoZWFkZXItYWx0XCIgKm5nSWY9XCIhaXNIZWFkZXJWaXNpYmxlXCI+XHJcbiAgICA8bGliLWNoYXJ0LWhlYWRlci12MlxyXG4gICAgICBbY2hhcnREYXRhXT1cImNoYXJ0RGF0YVwiXHJcbiAgICAgIFtjaGFydENvbmZpZ3VyYXRpb25dPVwiY2hhcnRDb25maWd1cmF0aW9uXCJcclxuICAgICAgKGNsaWNrRXZlbnQpPVwiaGFuZGxlQ2xpY2soJGV2ZW50KVwiXHJcbiAgICA+PC9saWItY2hhcnQtaGVhZGVyLXYyPlxyXG5cclxuICAgIDwhLS0gPHNwYW4gKm5nSWY9XCJjaGFydENvbmZpZ3VyYXRpb24uaXNDb21wYXJlYnlEcm9wZG93blZpc2libGVcIj5cclxuICAgICAgPGxpYi1kcm9wZG93bj48L2xpYi1kcm9wZG93bj5cclxuICAgIDwvc3Bhbj4gLS0+XHJcbiAgICA8bGliLWNoYXJ0LWhlYWRlci12M1xyXG4gICAgICBbY2hhcnREYXRhXT1cImNoYXJ0RGF0YVwiXHJcbiAgICAgIFtjaGFydENvbmZpZ3VyYXRpb25dPVwiY2hhcnRDb25maWd1cmF0aW9uXCJcclxuICAgICAgKGNvbXBhcmVCeUZpbHRlclNlbGVjdGlvbik9XCJoYW5kbGVDb21wYXJlQnlGaWx0ZXJTZWxlY3Rpb24oJGV2ZW50KVwiXHJcbiAgICAgICh6b29tSW5ab29tT3V0Q2xpY2spPVwiaGFuZGxlWm9vbWluWm9vbW91dENsaWNrKCRldmVudClcIlxyXG4gICAgPjwvbGliLWNoYXJ0LWhlYWRlci12Mz5cclxuICA8L2Rpdj5cclxuICA8ZGl2XHJcbiAgICBbc3R5bGUuaGVpZ2h0XT1cImNoYXJ0Q29uZmlndXJhdGlvbi5zdmdIZWlnaHRcIlxyXG4gICAgaWQ9XCJ2ZXJ0aWNhbHN0YWNrZWRjaGFydGNvbnRhaW5lclwiXHJcbiAgICAjdmVydGljYWxzdGFja2VkY2hhcnRjb250YWluZXJcclxuICAgIGNsYXNzPVwibGliLWNoYXJ0LXN2Z1wiXHJcbiAgPjwvZGl2PlxyXG48L2Rpdj5cclxuIl19
|
|
1291
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9yaXpvbnRhbC1iYXJzLXdpdGgtc2Nyb2xsLXpvb20uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXhpZGlvLXN0eWxlZ3VpZGUtbGlicmFyeS9zcmMvbGliL2hvcml6b250YWwtYmFycy13aXRoLXNjcm9sbC16b29tL2hvcml6b250YWwtYmFycy13aXRoLXNjcm9sbC16b29tLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2F4aWRpby1zdHlsZWd1aWRlLWxpYnJhcnkvc3JjL2xpYi9ob3Jpem9udGFsLWJhcnMtd2l0aC1zY3JvbGwtem9vbS9ob3Jpem9udGFsLWJhcnMtd2l0aC1zY3JvbGwtem9vbS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULFNBQVMsRUFFVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2pELE9BQU8sV0FBVyxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBRXpCLE9BQU8sa0JBQWtCLE1BQU0sa0JBQWtCLENBQUM7Ozs7OztBQVdsRCxNQUFNLE9BQU8scUNBQ1gsU0FBUSxpQkFBaUI7SUE4RHpCO1FBQ0UsS0FBSyxFQUFFLENBQUM7UUFyREEsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDckMseUJBQW9CLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUN6RCx1QkFBa0IsR0FBUSxFQUFFLENBQUM7UUFDN0Isb0JBQWUsR0FBWSxJQUFJLENBQUM7UUFDaEMsd0JBQW1CLEdBQVksSUFBSSxDQUFDO1FBQ3BDLGFBQVEsR0FBUSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbkMsNEJBQXVCLEdBQVksS0FBSyxDQUFDO1FBQ3pDLHlCQUFvQixHQUFRO1lBQzFCLE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUU7WUFDcEQsU0FBUyxFQUFFLEVBQUU7WUFDYixZQUFZLEVBQUUsS0FBSztZQUNuQixjQUFjLEVBQUUsQ0FBQztZQUNqQixjQUFjLEVBQUUsV0FBVyxDQUFDLGdCQUFnQjtZQUM1QyxrQkFBa0IsRUFBRSxXQUFXLENBQUMsZ0JBQWdCO1lBQ2hELGtCQUFrQixFQUFFLFdBQVcsQ0FBQyxnQkFBZ0I7WUFDaEQsc0JBQXNCLEVBQUUsV0FBVyxDQUFDLGdCQUFnQjtZQUNwRCxjQUFjLEVBQUUsU0FBUztZQUN6QixpQkFBaUIsRUFBRSxJQUFJO1lBQ3ZCLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLGFBQWEsRUFBRSxJQUFJO1lBQ25CLGlCQUFpQixFQUFFLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxpQkFBaUI7WUFDcEUsU0FBUyxFQUFFLEtBQUs7WUFDaEIsZUFBZSxFQUFFLFNBQVM7WUFDMUIsdUJBQXVCLEVBQUUsU0FBUztZQUNsQyxtQkFBbUIsRUFBRSxTQUFTO1lBQzlCLG9CQUFvQixFQUFFLFNBQVM7WUFDL0IsWUFBWSxFQUFFLFNBQVM7WUFDdkIsWUFBWSxFQUFFLFNBQVM7WUFDdkIsa0JBQWtCLEVBQUUsU0FBUztZQUM3QixrQkFBa0IsRUFBRSxTQUFTO1lBQzdCLGFBQWEsRUFBRSxTQUFTO1lBQ3hCLGFBQWEsRUFBRSxTQUFTO1lBQ3hCLFlBQVksRUFBRSxTQUFTO1lBQ3ZCLGFBQWEsRUFBRSxTQUFTO1lBQ3hCLGNBQWMsRUFBRSxTQUFTO1lBQ3pCLDJCQUEyQixFQUFFLFNBQVM7WUFDdEMsZ0JBQWdCLEVBQUUsU0FBUztZQUMzQixzQkFBc0IsRUFBRSxTQUFTO1lBQ2pDLG9CQUFvQixFQUFFLFNBQVM7WUFDL0IsWUFBWSxFQUFFLFNBQVM7WUFDdkIsU0FBUyxFQUFFLFNBQVM7WUFDcEIsaUJBQWlCLEVBQUUsU0FBUztZQUM1QixhQUFhLEVBQUUsU0FBUztZQUN4QixnQkFBZ0IsRUFBRSxTQUFTO1lBQzNCLFlBQVksRUFBRSxTQUFTO1lBQ3ZCLGlCQUFpQixFQUFFLFNBQVM7WUFDNUIsZUFBZSxFQUFFLFNBQVM7WUFDMUIsYUFBYSxFQUFFLFNBQVM7U0FDekIsQ0FBQztRQUNGLFNBQUksR0FBWSxLQUFLLENBQUM7UUFDdEIsZ0JBQVcsR0FBWSxJQUFJLENBQUM7SUFJNUIsQ0FBQztJQUNELGlCQUFpQixDQUFDLFNBQVM7UUFDekIsSUFBSSxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUM7UUFDN0IsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFDRCxXQUFXO1FBQ1QsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2hCLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN4QyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBQ0QsU0FBUyxDQUFDLEtBQW1CO1FBQzNCLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQztRQUNoQixVQUFVLENBQ1I7WUFDRSxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDeEMsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDaEMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFDWixFQUFFLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFDRCxRQUFRLEtBQUssQ0FBQztJQUVkLHNCQUFzQjtRQUNwQixJQUFJLElBQUksR0FBRyxJQUFJLENBQUM7UUFDaEIsSUFBSSxJQUFJLEdBQVEsRUFBRSxDQUFDO1FBQ25CLElBQUksUUFBUSxHQUFRLElBQUksQ0FBQztRQUN6QixJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDbkIsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLElBQUksTUFBTSxHQUFRLElBQUksQ0FBQztRQUN2QixJQUFJLGNBQWMsR0FBRyxLQUFLLENBQUM7UUFDM0IsSUFBSSxlQUFlLEdBQUcsS0FBSyxDQUFDO1FBQzVCLElBQUksaUJBQWlCLEdBQUcsQ0FBQyxDQUFDO1FBQzFCLElBQUksZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO1FBQzFCLElBQUksb0JBQW9CLEdBQUcsQ0FBQyxDQUFDO1FBQzdCLElBQUksbUJBQW1CLEdBQUcsRUFBRSxDQUFDO1FBQzdCLElBQUksaUJBQWlCLENBQUM7UUFDdEIsSUFBSSxvQkFBb0IsQ0FBQztRQUN6QixJQUFJLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztRQUMxQixJQUFJLGFBQWEsR0FBRyxFQUFFLENBQUM7UUFDdkIsSUFBSSxrQkFBa0IsR0FBRyxFQUFFLENBQUM7UUFFekIsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEtBQUssQ0FBQTtRQUVsRCx5QkFBeUI7UUFDekIsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7UUFDekMsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLFVBQVUsSUFBSSxHQUFHLElBQUksTUFBTSxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7UUFDckUsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLFVBQVUsSUFBSSxHQUFHLENBQUM7UUFFM0MsZ0RBQWdEO1FBQ2hELElBQUksUUFBUSxFQUFFLENBQUM7WUFDYixJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDO1lBQzlFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO1lBQzNDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ3pDLENBQUM7YUFBTSxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUM7WUFDOUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7WUFDM0MsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7UUFDekMsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDO1lBQzlFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO1lBQzNDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ3pDLENBQUM7UUFFRCxLQUFLLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBQ3hDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUMsMkJBQTJCLENBQ2xFLENBQUMsRUFDRCxJQUFJLENBQUMsb0JBQW9CLEVBQ3pCLElBQUksQ0FBQyx3QkFBd0IsQ0FDOUIsQ0FBQztRQUNKLENBQUM7UUFDRCxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUM7UUFDM0IsUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDO1FBQ25DLElBQUksUUFBUSxDQUFDLElBQUksSUFBSSxTQUFTO1lBQUUsUUFBUSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7UUFDbkQsSUFBSSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDO1FBQzVCLENBQUM7UUFDRCxJQUFJLFFBQVEsQ0FBQyxlQUFlLElBQUksUUFBUSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNoRSxRQUFRLENBQUMsZUFBZSxHQUFHLFFBQVEsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FDOUQsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUNsQixDQUFDO1FBQ0osQ0FBQzthQUFNLENBQUM7WUFDTixRQUFRLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztRQUNoQyxDQUFDO1FBQ0QsUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDO1FBQ25DLE1BQU0sR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO1FBQ3pCLE9BQU8sR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDO1FBRTNCLElBQUksY0FBYyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNoRSxJQUFJLHdCQUF3QixHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQ3RDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxhQUFhLENBQy9DLENBQUM7UUFFRixJQUFJLFNBQVMsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxjQUFjLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDbkUsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQ3RCLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO2dCQUNoQyxTQUFTLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzdELENBQUM7aUJBQU0sQ0FBQztnQkFDTixTQUFTLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQy9ELENBQUM7UUFDSCxDQUFDO1FBQ0QsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQztRQUU1Qyw4QkFBOEI7UUFDOUIsSUFBSSxjQUFjLEdBQUcsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDLHFCQUFxQixFQUFFLENBQUMsS0FBSyxDQUFDO1FBQ3pFLElBQUksZUFBZSxHQUFHLHdCQUF3QixDQUFDLElBQUksRUFBRSxDQUFDLHFCQUFxQixFQUFFLENBQUMsTUFBTSxDQUFDO1FBQ3JGLElBQUksS0FBSyxHQUFHLGNBQWMsR0FBRyxNQUFNLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDeEQsSUFBSSxNQUFNLEdBQUcsZUFBZSxHQUFHLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFFdEcsMkNBQTJDO1FBQzNDLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDeEQsS0FBSyxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUMvRCxDQUFDLENBQUMsS0FBSztnQkFDUCxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3hELENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDeEQsS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM3RCxDQUFDO1FBRUQsdUNBQXVDO1FBQ3ZDLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksSUFBSSxTQUFTLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksRUFBRSxDQUFDO1lBQzlGLE1BQU0sR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxJQUFJLEVBQUU7Z0JBQzlDLENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUztnQkFDbkMsQ0FBQyxDQUFDLGVBQWUsQ0FBQztRQUN0QixDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUM3QyxNQUFNLEdBQUcsZUFBZSxHQUFHLE1BQU0sQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNoRixDQUFDO1FBRUQsc0JBQXNCO1FBQ3RCOzs7V0FHRztRQUNILElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLGVBQWUsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUN6RCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxlQUFlLENBQUM7UUFDakUsQ0FBQztRQUNEOzs7V0FHRztRQUNILElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLG1CQUFtQixJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQzdELFlBQVk7WUFDWixJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLG1CQUFtQixDQUFDO1FBQ3pFLENBQUM7UUFDRDs7O1dBR0c7UUFDSCxJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyx1QkFBdUIsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNqRSxJQUFJLENBQUMsdUJBQXVCO2dCQUMxQixJQUFJLENBQUMsa0JBQWtCLENBQUMsdUJBQXVCLENBQUM7UUFDcEQsQ0FBQztRQUNEOztXQUVHO1FBQ0gsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsYUFBYSxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ3ZELGlCQUFpQixHQUFHLFdBQVcsQ0FBQyxrQkFBa0IsQ0FDaEQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGFBQWEsQ0FDdEMsQ0FBQztZQUNGLG9CQUFvQixHQUFHLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvRCxDQUFDO1FBQ0QsSUFBSSxjQUFjLEdBQUcsY0FBYzthQUNoQyxNQUFNLENBQUMsS0FBSyxDQUFDO2FBQ2IsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDO2FBQ3pCLElBQUksQ0FBQyxPQUFPLEVBQUUsaUJBQWlCLENBQUM7YUFDaEMsS0FBSyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUM7YUFDdEIsS0FBSyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUM7YUFFdkIsS0FBSyxDQUFDLFlBQVksRUFBRSxRQUFRLENBQUM7YUFDN0IsS0FBSyxDQUFDLGNBQWMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQzthQUN6QyxLQUFLLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQzthQUM1QixLQUFLLENBQUMsZUFBZSxFQUFFLEdBQUcsYUFBYSxJQUFJLENBQUMsQ0FBQztRQUVoRCxJQUFJLFlBQVksR0FBRyxjQUFjO2FBQzlCLE1BQU0sQ0FBQyxLQUFLLENBQUM7YUFDYixJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQzthQUNuQixJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU0sR0FBRyxNQUFNLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7YUFDbkQsS0FBSyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUM7YUFDN0IsS0FBSyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUM7YUFDbEIsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7YUFDbkIsTUFBTSxDQUFDLEdBQUcsQ0FBQzthQUNYLElBQUksQ0FBQyxXQUFXLEVBQUUsWUFBWSxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztRQUVqRixJQUFJLGFBQWEsR0FBRyxjQUFjO2FBQy9CLE1BQU0sQ0FBQyxLQUFLLENBQUM7YUFDYixJQUFJLENBQUMsT0FBTyxFQUFFLGFBQWEsQ0FBQzthQUM1QixJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU0sR0FBRyxNQUFNLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7YUFDbkQsS0FBSyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUM7YUFDN0IsS0FBSyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUM7YUFDckIsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7YUFDbkIsTUFBTSxDQUFDLEdBQUcsQ0FBQzthQUNYLElBQUksQ0FBQyxXQUFXLEVBQUUsWUFBWSxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztRQUVoRSxJQUFJLGNBQWMsR0FBRyxjQUFjO2FBQ2hDLE1BQU0sQ0FBQyxLQUFLLENBQUM7YUFDYixJQUFJLENBQUMsT0FBTyxFQUFFLGlCQUFpQixDQUFDO2FBQ2hDLEtBQUssQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDO2FBQ3RCLEtBQUssQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFHL0IseUZBQXlGO1FBQ3pGLElBQUksUUFBUSxDQUFDO1FBQ2IsSUFBSSxVQUFVLEdBQUcsRUFBRSxDQUFDLENBQUMsbUNBQW1DO1FBQ3hELElBQUksZ0JBQWdCLENBQUM7UUFDckIsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNiLDJEQUEyRDtZQUMzRCxNQUFNLFdBQVcsR0FBRyxFQUFFLENBQUMsQ0FBQywyQkFBMkI7WUFDbkQsUUFBUSxHQUFHLFdBQVcsQ0FBQztZQUN2QixnQkFBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUN6QixLQUFLLEdBQUcsYUFBYSxFQUNyQixDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLGtCQUFrQixHQUFHLENBQUMsR0FBRyxhQUFhLEdBQUcsVUFBVSxDQUFDLDRCQUE0QjthQUN6SCxDQUFDO1lBQ0YsY0FBYyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDN0MsQ0FBQzthQUFNLENBQUM7WUFDTixRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEdBQUcsYUFBYSxHQUFHLGtCQUFrQixHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN4RixVQUFVLEdBQUcsQ0FBQyxDQUFDO1lBQ2YsZ0JBQWdCLEdBQUcsS0FBSyxHQUFHLGFBQWEsQ0FBQztRQUMzQyxDQUFDO1FBRUQsSUFBSSxHQUFHLEdBQUcsY0FBYzthQUNyQixNQUFNLENBQUMsS0FBSyxDQUFDO2FBQ2IsSUFBSSxDQUFDLE9BQU8sRUFBRSxnQkFBZ0IsQ0FBQzthQUMvQixJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU0sR0FBRyxNQUFNLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO2FBQ3hELE1BQU0sQ0FBQyxHQUFHLENBQUM7YUFDWCxJQUFJLENBQUMsV0FBVyxFQUFFLFlBQVksR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLE1BQU0sQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFFaEUsSUFBSSxRQUFRLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLElBQUksS0FBSyxHQUFRLEVBQUU7YUFDaEIsS0FBSyxFQUFFO2FBQ1AsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUNmLHlCQUF5QjthQUN4QixNQUFNLENBQUMsRUFBRSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQzlCLElBQUksTUFBTSxHQUFRLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDdEIsT0FBTyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDM0IsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLFVBQVUsQ0FBQztRQUNmLElBQUksUUFBUSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3JCLFVBQVUsR0FBRyxFQUFFO2lCQUNaLFdBQVcsRUFBRTtpQkFDYixNQUFNLENBQUM7Z0JBQ04sQ0FBQztnQkFDRCxFQUFFLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUM7b0JBQzFCLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO2dCQUNsQixDQUFDLENBQUM7YUFDSCxDQUFDO2lCQUNELEtBQUssQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hCLENBQUM7UUFFRCxrREFBa0Q7UUFDbEQsMkRBQTJEO1FBRTNELElBQUksTUFBTSxHQUFHLEVBQUU7YUFDWixTQUFTLEVBQUU7YUFDWCxVQUFVLENBQUM7WUFDVixrQkFBa0I7WUFDbEIsS0FBSyxHQUFHLGFBQWEsR0FBRyxrQkFBa0I7U0FDM0MsQ0FBQzthQUNELE1BQU0sQ0FDTCxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQztZQUNsQixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDaEIsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQ2I7YUFDQSxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRWpDLElBQUksZ0JBQWdCLEdBQUcsRUFBRTthQUN0QixTQUFTLEVBQUU7YUFDWCxVQUFVLENBQUMsQ0FBQyxLQUFLLEdBQUcsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQ3RDLE1BQU0sQ0FDTCxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQztZQUNsQixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDaEIsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQ2IsQ0FBQztRQUNKLHNCQUFzQjtRQUN0Qjs7V0FFRztRQUNILElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3pDLEdBQUc7aUJBQ0EsTUFBTSxDQUFDLEdBQUcsQ0FBQztpQkFDWCxJQUFJLENBQUMsT0FBTyxFQUFFLGdEQUFnRCxDQUFDO2lCQUMvRCxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxxQkFBcUIsQ0FBQztpQkFDNUQsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDM0MsR0FBRyxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztRQUMxRSxDQUFDO1FBQ0Q7O1dBRUc7UUFDSCxtREFBbUQ7UUFDbkQsUUFBUTtRQUNSLG1CQUFtQjtRQUNuQix1RUFBdUU7UUFDdkUsb0VBQW9FO1FBQ3BFLGdEQUFnRDtRQUNoRCw2RUFBNkU7UUFDN0UsSUFBSTtRQUNSLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3RDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUNsRSxHQUFHO3FCQUNBLE1BQU0sQ0FBQyxHQUFHLENBQUM7cUJBQ1gsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO3FCQUN2QyxLQUFLLENBQUMsT0FBTyxFQUFFLHlCQUF5QixDQUFDLENBQUMsd0NBQXdDO3FCQUNsRixJQUFJLENBQ0gsV0FBVyxFQUNYLGNBQWMsR0FBRyxNQUFNLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQ3JFO3FCQUNBLElBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO3FCQUMvRCxLQUFLLENBQUMsTUFBTSxFQUFFLHlCQUF5QixDQUFDLENBQUM7WUFDOUMsQ0FBQztRQUNILENBQUM7UUFFRyxJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEQ7OztXQUdHO1FBQ0gsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdELElBQUksUUFBUSxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ2xCLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDbEMsUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7WUFDdkQsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLFFBQVEsR0FBRyxHQUFHLENBQUM7WUFDakIsQ0FBQztRQUNILENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN6QyxRQUFRLEdBQUcsUUFBUSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLENBQUM7UUFDN0QsQ0FBQztRQUNELElBQ0UsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjO1lBQzdCLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQy9DLENBQUM7WUFDRCxRQUFRO2dCQUNOLFFBQVEsR0FBRyxFQUFFLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsTUFBTSxHQUFHLEVBQUU7b0JBQ3hELENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQztvQkFDMUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDbEQsQ0FBQztRQUNELE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUVwQyxJQUFJLEtBQUssR0FBRyxFQUFFO2FBQ1gsVUFBVSxDQUFDLE1BQU0sQ0FBQzthQUNsQixRQUFRLENBQUMsQ0FBQyxDQUFDO2FBQ1gsVUFBVSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBRTFELElBQUksS0FBSyxHQUFHLEVBQUU7YUFDWCxRQUFRLENBQUMsTUFBTSxDQUFDO2FBQ2hCLEtBQUssQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDO2FBQzdDLFFBQVEsQ0FBQyxDQUFDLENBQUM7YUFDWCxVQUFVLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFFMUQsSUFBSSxTQUFTLENBQUM7UUFDZCxJQUFJLFVBQVUsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUN2QixTQUFTLEdBQUcsRUFBRTtpQkFDWCxTQUFTLENBQUMsVUFBVSxDQUFDO2lCQUNyQixLQUFLLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGNBQWMsQ0FBQztpQkFDN0MsUUFBUSxDQUFDLENBQUMsQ0FBQztpQkFDWCxVQUFVLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDaEUsQ0FBQztRQUNEOzs7V0FHRztRQUNILElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFDakQsR0FBRztpQkFDQSxNQUFNLENBQUMsR0FBRyxDQUFDO2lCQUNYLElBQUksQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDO2lCQUNyQixJQUFJLENBQ0gsV0FBVyxFQUNYLFlBQVksR0FBRyxNQUFNLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxNQUFNLEdBQUcsR0FBRyxDQUMzRDtpQkFDQSxJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7aUJBQzVELEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxLQUFLLENBQUM7aUJBQ2hDLEtBQUssQ0FBQyxPQUFPLEVBQUUsa0NBQWtDLENBQUM7aUJBQ2xELElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQy9DLENBQUM7UUFDRDs7V0FFRztRQUNQLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3hDLFFBQVE7WUFDUixtQkFBbUI7WUFDbkIsNkJBQTZCO1lBQzdCLGFBQWE7WUFDYixXQUFXO1lBQ1gsNEJBQTRCO1lBQzVCLHlEQUF5RDtZQUN6RCw0QkFBNEI7WUFDNUIsMEJBQTBCO1lBQzFCLFFBQVE7WUFDUix1REFBdUQ7WUFDdkQsaURBQWlEO1lBQ2pELDZCQUE2QjtZQUM3QixxREFBcUQ7UUFDckQsQ0FBQztRQUdHLElBQUksS0FBSyxHQUFHLEdBQUc7YUFDWixTQUFTLENBQUMsUUFBUSxDQUFDO2FBQ25CLElBQUksQ0FBQyxNQUFNLENBQUM7YUFDWixLQUFLLEVBQUU7YUFDUCxNQUFNLENBQUMsR0FBRyxDQUFDO2FBQ1gsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUM7YUFDdEIsS0FBSyxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQzNCLE9BQU8sUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDaEMsQ0FBQyxDQUFDLENBQUM7UUFFTCxJQUFJLElBQUksR0FBRyxLQUFLO2FBQ2IsU0FBUyxDQUFDLE1BQU0sQ0FBQzthQUNqQixJQUFJLENBQUMsVUFBVSxDQUFDO1lBQ2YsT0FBTyxDQUFDLENBQUM7UUFDWCxDQUFDLENBQUM7YUFDRCxLQUFLLEVBQUUsQ0FBQztRQUVYLElBQUk7YUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDO2FBQ2QsRUFBRSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUM7WUFDdEIsSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ3ZELElBQ0UsQ0FBQyxRQUFRLENBQUMsZUFBZTtvQkFDekIsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLE1BQU07b0JBQ2hDLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7b0JBRTdELElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNsQyxDQUFDO1FBQ0gsQ0FBQyxDQUFDO2FBQ0QsSUFBSSxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUM7WUFDcEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNqQyxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNqRCxPQUFPLFlBQVksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM1RCxDQUFDO1lBQ0QsT0FBTyxDQUFDLENBQUM7UUFDWCxDQUFDLENBQUM7YUFDRCxJQUFJLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDdkIsSUFBSSxRQUFRLEVBQUUsQ0FBQztnQkFDYix3Q0FBd0M7Z0JBQ3hDLE9BQU8sa0JBQWtCLEdBQUcsQ0FBQyxHQUFHLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQyxDQUFDO1lBQzFELENBQUM7WUFDRCxJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxvQkFBb0IsSUFBSSxTQUFTLEVBQUUsQ0FBQztnQkFDOUQsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM3QixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFDRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsZ0JBQWdCO29CQUN4QyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUMvQixDQUFDO29CQUNELE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQzNELENBQUM7Z0JBQ0QsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsU0FBUyxFQUFFLEdBQUcsR0FBRyxDQUFDO1lBQ3hELENBQUM7UUFDSCxDQUFDLENBQUM7YUFDRCxJQUFJLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQztZQUN6QixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ2pDLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pELE9BQU8sWUFBWSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7WUFDN0MsQ0FBQztZQUNELE9BQU8sQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFDO2FBQ0QsSUFBSSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUM7WUFDeEIsc0RBQXNEO1lBQ3RELElBQUksUUFBUSxFQUFFLENBQUM7Z0JBQ2IsT0FBTyxRQUFRLENBQUM7WUFDbEIsQ0FBQztZQUNELE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLG9CQUFvQixJQUFJLFNBQVM7Z0JBQzlELENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFO2dCQUNwQixDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGdCQUFnQjtvQkFDeEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUM7b0JBQy9CLENBQUMsQ0FBQyxFQUFFO29CQUNKLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLEdBQUcsR0FBRyxDQUFDO1FBQ2pDLENBQUMsQ0FBQztZQUNGLCtCQUErQjthQUM5QixLQUFLLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQztZQUMxQixJQUFJLFFBQVEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDMUIsSUFDRSxRQUFRLENBQUMsZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDO29CQUNuQyxRQUFRLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxFQUM1RCxDQUFDO29CQUNELE9BQU8sU0FBUyxDQUFDO2dCQUNuQixDQUFDO2dCQUNELE9BQU8sU0FBUyxDQUFDO1lBQ25CLENBQUM7O2dCQUFNLE9BQU8sU0FBUyxDQUFDO1FBQzFCLENBQUMsQ0FBQzthQUNELEtBQUssQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDO1lBQ3hCLElBQ0UsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNaLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDWixJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWM7Z0JBQzdCLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNuQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDO2dCQUVoRCxPQUFPLElBQUksQ0FBQyxTQUFTLEVBQUUsY0FBYyxFQUFFLG1CQUFtQixDQUFDO1lBRTdELE9BQU8sUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDaEMsQ0FBQyxDQUFDLENBQUM7UUFDTDs7V0FFRztRQUNILElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFDaEUsSUFBSTtpQkFDRCxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsc0JBQXNCO2lCQUMxQyxJQUFJLENBQUMsVUFBVSxDQUFDO2dCQUNmLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNyQixDQUFDLENBQUMsQ0FBQztRQUNQLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNkLElBQUk7aUJBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQztpQkFDZCxJQUFJLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQztnQkFDcEIsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM3QixDQUFDLENBQUM7aUJBQ0QsSUFBSSxDQUFDLGFBQWEsRUFBRSxVQUFVLENBQUM7Z0JBQzlCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDVixPQUFPLEtBQUssQ0FBQztnQkFDZixDQUFDO3FCQUFNLENBQUM7b0JBQ04sT0FBTyxPQUFPLENBQUM7Z0JBQ2pCLENBQUM7WUFDSCxDQUFDLENBQUM7aUJBQ0QsSUFBSSxDQUFDLE9BQU8sRUFBRSxtQkFBbUIsQ0FBQztpQkFDbEMsSUFBSSxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUM7Z0JBQ3BCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDVixPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDdEIsQ0FBQztxQkFBTSxDQUFDO29CQUNOLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDMUIsQ0FBQztZQUNILENBQUMsQ0FBQztnQkFDRixtRUFBbUU7aUJBQ2xFLElBQUksQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDO2dCQUNyQixPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUM7WUFDakIsQ0FBQyxDQUFDO2lCQUNELElBQUksQ0FBQyxVQUFVLENBQUM7Z0JBQ2YsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUNWLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7d0JBQ3hCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7b0JBQy9DLENBQUM7O3dCQUFNLE9BQU87Z0JBQ2hCLENBQUM7cUJBQU0sQ0FBQztvQkFDTixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7d0JBQ2pCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO29CQUN0QyxDQUFDOzt3QkFBTSxPQUFPO2dCQUNoQixDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDO1FBRUQ7Ozs7Ozs7OztPQVNEO1FBRUM7O1dBRUc7UUFDSCxTQUFTLGVBQWUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGlCQUFpQixFQUFFLENBQUM7Z0JBQy9DLE9BQU87WUFDVCxDQUFDO1lBQ0QsR0FBRztpQkFDQSxTQUFTLENBQUMsTUFBTSxDQUFDO2lCQUNqQixNQUFNLENBQUMsVUFBVSxJQUFJO2dCQUNwQixPQUFPLElBQUksSUFBSSxDQUFDLENBQUM7WUFDbkIsQ0FBQyxDQUFDO2lCQUNELEtBQUssQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDO2dCQUN4QixJQUNFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDWixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ1osSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjO29CQUM3QixVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDbkMsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQztvQkFFaEQsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyx3QkFBd0I7d0JBQzNELENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyx3QkFBd0I7d0JBQ3hELENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLGNBQWMsRUFBRSxtQkFBbUI7NEJBQ25ELENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLGNBQWMsRUFBRSxtQkFBbUI7NEJBQ3JELENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBRVgsT0FBTyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDeEQsQ0FBQyxDQUFDLENBQUM7WUFFTCxHQUFHO2lCQUNBLE1BQU0sQ0FBQyxlQUFlLENBQUM7aUJBQ3ZCLElBQUksQ0FBQyxHQUFHLEVBQUU7Z0JBQ1QsSUFBSSxNQUFNLENBQUMsU0FBUyxFQUFFLEdBQUcsa0JBQWtCLEdBQUcsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO29CQUN0RCxPQUFPLENBQ0wsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO3dCQUNuQixrQkFBa0I7d0JBQ2xCLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxHQUFHLGtCQUFrQixHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQ3hELENBQUM7Z0JBQ0osQ0FBQztnQkFDRCxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLGtCQUFrQixDQUFDO1lBQ2xELENBQUMsQ0FBQztpQkFDRCxJQUFJLENBQUMsT0FBTyxFQUFFLCtCQUErQixDQUFDO2lCQUM5QyxJQUFJLENBQUMsR0FBRyxFQUFFO2dCQUNULGlFQUFpRTtnQkFDakUsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLGdCQUFnQjtZQUNoRCxDQUFDLENBQUM7aUJBQ0QsSUFBSSxDQUFDLElBQUksRUFBRTtnQkFDVixPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUM7WUFDakIsQ0FBQyxDQUFDO2lCQUNELElBQUksQ0FBQyxPQUFPLEVBQUU7Z0JBQ1gsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztvQkFDbkYsT0FBTyxPQUFPLENBQUMsQ0FBQywyQkFBMkI7Z0JBQ25ELENBQUM7Z0JBRUEsSUFBSSxNQUFNLENBQUMsU0FBUyxFQUFFLEdBQUcsa0JBQWtCLEdBQUcsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO29CQUN0RCxPQUFPLE9BQU8sQ0FBQztnQkFDakIsQ0FBQztnQkFDRCxPQUFPLE1BQU0sQ0FBQyxTQUFTLEVBQUUsR0FBRyxrQkFBa0IsR0FBRyxDQUFDLENBQUM7WUFDckQsQ0FBQyxDQUFDO2lCQUNELElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDO2lCQUNsQixNQUFNLENBQUMsV0FBVyxDQUFDO2lCQUNuQixJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQztpQkFDdEIsS0FBSyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUM7aUJBQ3BCLElBQUksQ0FBQztnQkFDSix5Q0FBeUM7Z0JBQ3pDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQ3hCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQzt3QkFDdEIsT0FBTyx1Q0FBdUMsQ0FBQztvQkFDakQsQ0FBQztvQkFDRCxJQUFJLFFBQVEsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQzFELElBQUksV0FBVyxHQUFHLEVBQUUsQ0FBQztvQkFDckIsbUVBQW1FO29CQUNuRSxXQUFXO3dCQUNULCtCQUErQjs0QkFDL0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzs0QkFDaEMsU0FBUyxDQUFDO29CQUVaLFdBQVcsSUFBSSxRQUFRLENBQUMsSUFBSTt3QkFDMUIsQ0FBQyxDQUFDLCtCQUErQjs0QkFDakMsUUFBUSxDQUFDLElBQUk7NEJBQ2IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRzs0QkFDbkIsUUFBUTs0QkFDUixTQUFTO3dCQUNULENBQUMsQ0FBQywrQkFBK0I7NEJBQ2pDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUc7NEJBQ25CLFFBQVE7NEJBQ1IsU0FBUyxDQUFDO29CQUVaLDZDQUE2QztvQkFDN0MsT0FBTyxXQUFXLENBQUM7Z0JBQ3JCLENBQUM7O29CQUFNLE9BQU87WUFDaEIsQ0FBQyxDQUFDLENBQUM7UUFFUCxDQUFDO1FBQ0QsU0FBUyxjQUFjLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO2dCQUMvQyxPQUFPO1lBQ1QsQ0FBQztZQUNELCtEQUErRDtZQUMvRCxHQUFHLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDO2dCQUM3QyxJQUNFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDWixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ1osSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjO29CQUM3QixVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDbkMsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQztvQkFFaEQsT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLGNBQWMsRUFBRSxtQkFBbUIsQ0FBQztnQkFFN0QsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNoQyxDQUFDLENBQUMsQ0FBQztZQUNILEdBQUcsQ0FBQyxTQUFTLENBQUMsZ0NBQWdDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUMzRCxDQUFDO1FBRUQ7Ozs7V0FJRztRQUNILElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLGNBQWMsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUN4RCxJQUFJO2lCQUNELE1BQU0sQ0FBQyxNQUFNLENBQUM7aUJBQ2QsSUFBSSxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUM7Z0JBQ3BCLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUN0RCxDQUFDLENBQUM7aUJBQ0QsSUFBSSxDQUFDLE9BQU8sRUFBRSw0Q0FBNEMsQ0FBQztpQkFDM0QsSUFBSSxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUM7Z0JBQ3BCLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMxQixDQUFDLENBQUM7aUJBQ0QsSUFBSSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUM7Z0JBQ3JCLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQztZQUNqQixDQUFDLENBQUM7aUJBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQztnQkFDZixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUN4QixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7d0JBQ3JCLE9BQU87b0JBQ1QsQ0FBQztvQkFDRCxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRzt3QkFDcEIsT0FBTyxRQUFRLENBQUMsSUFBSTs0QkFDbEIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs0QkFDaEQsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7d0JBRW5DLE9BQU8sUUFBUSxDQUFDLElBQUk7NEJBQ2xCLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7NEJBQ25ELENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzFDLENBQUM7O29CQUFNLE9BQU87WUFDaEIsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDO1FBQ0Q7OztXQUdHO1FBQ0gsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsZ0JBQWdCLElBQUksU0FBUyxFQUFFLENBQUM7WUFDMUQsSUFBSTtpQkFDRCxNQUFNLENBQUMsTUFBTSxDQUFDO2lCQUNkLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO2lCQUNaLElBQUksQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQztnQkFDMUIsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNoQyxDQUFDLENBQUM7aUJBQ0QsSUFBSSxDQUFDLE9BQU8sRUFBRSxxQ0FBcUMsQ0FBQztpQkFDcEQsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7aUJBQ1osSUFBSSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUM7Z0JBQ3JCLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQztZQUNqQixDQUFDLENBQUM7aUJBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQztnQkFDZixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUMzQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRzt3QkFDcEIsT0FBTyxRQUFRLENBQUMsSUFBSTs0QkFDbEIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs0QkFDaEQsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7d0JBQ2hDLE9BQU8sUUFBUSxDQUFDLElBQUksR0FBRyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hFLENBQUM7O29CQUFNLE9BQU87WUFDaEIsQ0FBQyxDQUFDO2lCQUNELElBQUksQ0FBQyxXQUFXLEVBQUUsVUFBVSxDQUFDO2dCQUM1QixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUMzQyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7b0JBQ2QsSUFBSSxXQUFXLEdBQVcsQ0FBQyxDQUFDO29CQUM1QixRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO3dCQUMvQixJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDOzRCQUFFLEtBQUssR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQzs7NEJBQ3hDLFdBQVcsR0FBRyxDQUFDLENBQUM7b0JBQ3ZCLENBQUMsQ0FBQyxDQUFDO29CQUNILElBQUksZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxTQUFTLEVBQUUsQ0FBQzt3QkFDL0MsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ3BDLENBQUM7eUJBQU0sQ0FBQzt3QkFDTixnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQzs0QkFDM0IsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxXQUFXLENBQUM7b0JBQ2hELENBQUM7b0JBQ0QsUUFBUSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7d0JBQ3RDLEtBQUssQ0FBQzs0QkFDSixPQUFPLENBQ0wsWUFBWTtnQ0FDWixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0NBQzlDLEdBQUc7Z0NBQ0gsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dDQUNuQixlQUFlLENBQ2hCLENBQUM7d0JBQ0osS0FBSyxDQUFDOzRCQUNKLE9BQU8sQ0FDTCxZQUFZO2dDQUNaLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7Z0NBQ2xELEdBQUc7Z0NBQ0gsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dDQUNuQixlQUFlLENBQ2hCLENBQUM7d0JBQ0o7NEJBQ0UsT0FBTyxDQUNMLFlBQVk7Z0NBQ1osQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7Z0NBQ3BELEdBQUc7Z0NBQ0gsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dDQUNuQixlQUFlLENBQ2hCLENBQUM7b0JBQ04sQ0FBQztnQkFDSCxDQUFDO2dCQUNELE9BQU8sV0FBVyxDQUFDO1lBQ3JCLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQztRQUNMLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLG9CQUFvQixJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQzlELElBQUksUUFBUSxFQUFFLENBQUM7Z0JBQ2IsNkVBQTZFO2dCQUM3RSxHQUFHLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQzFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztvQkFDekIsTUFBTSxJQUFJLEdBQUcsa0JBQWtCLEdBQUcsQ0FBQyxHQUFHLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQyxHQUFHLFFBQVEsR0FBRyxDQUFDLENBQUM7b0JBQzdFLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO3lCQUNmLElBQUksQ0FBQyxPQUFPLEVBQUUsZ0JBQWdCLENBQUM7eUJBQy9CLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO3lCQUNaLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxHQUFHLEVBQUUsQ0FBQzt5QkFDdEIsSUFBSSxDQUFDLGFBQWEsRUFBRSxRQUFRLENBQUM7eUJBQzdCLElBQUksQ0FBQyxXQUFXLEVBQUUsWUFBWSxHQUFHLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLHFCQUFxQjt5QkFDM0UsS0FBSyxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUM7eUJBQzFCLEtBQUssQ0FBQyxNQUFNLEVBQUUseUJBQXlCLENBQUM7eUJBQ3hDLEtBQUssQ0FBQyxjQUFjLEVBQUUsYUFBYSxDQUFDLENBQUMsMEJBQTBCO3lCQUMvRCxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2xDLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLEdBQUc7cUJBQ0EsTUFBTSxDQUFDLEdBQUcsQ0FBQztxQkFDWCxJQUFJLENBQUMsV0FBVyxFQUFFLGNBQWMsR0FBRyxNQUFNLEdBQUcsR0FBRyxDQUFDO3FCQUNoRCxJQUFJLENBQUMsT0FBTyxFQUFFLHlCQUF5QixDQUFDO3FCQUN4QyxJQUFJLENBQUMsS0FBSyxDQUFDO3FCQUNYLFNBQVMsQ0FBQyxNQUFNLENBQUM7cUJBQ2pCLEtBQUssQ0FBQyxNQUFNLEVBQUUseUJBQXlCLENBQUM7cUJBQ3hDLEtBQUssQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDO3FCQUMxQixJQUFJLENBQUMsYUFBYSxFQUFFLFFBQVEsQ0FBQztxQkFDN0IsSUFBSSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUM7cUJBQ2YsSUFBSSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUM7cUJBQ3BCLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDO3FCQUN2QixJQUFJLENBQUMsVUFBVSxDQUFDO29CQUNmLE9BQU8sQ0FBQyxDQUFDO2dCQUNYLENBQUMsQ0FBQyxDQUFDO1lBQ1AsQ0FBQztZQUVELEdBQUc7aUJBQ0EsTUFBTSxDQUFDLEdBQUcsQ0FBQztpQkFDWCxJQUFJLENBQUMsT0FBTyxFQUFFLHlCQUF5QixDQUFDO2lCQUN4QyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxxQkFBcUIsQ0FBQztpQkFDNUQsSUFBSSxDQUFDLFdBQVcsRUFBRSxnQkFBZ0IsQ0FBQztpQkFDbkMsSUFBSSxDQUFDLEtBQUssQ0FBQztpQkFDWCxTQUFTLENBQUMsTUFBTSxDQUFDO2lCQUNuQixLQUFLLENBQUMsTUFBTSxFQUFFLHlCQUF5QixDQUFDLENBQUM7UUFDNUMsQ0FBQzthQUFLLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDbkQsR0FBRztpQkFDQSxNQUFNLENBQUMsR0FBRyxDQUFDO2lCQUNYLElBQUksQ0FBQyxXQUFXLEVBQUUsY0FBYyxHQUFHLE1BQU0sR0FBRyxHQUFHLENBQUM7aUJBQ2hELElBQUksQ0FBQyxPQUFPLEVBQUUscUNBQXFDLENBQUM7aUJBQ3BELElBQUksQ0FBQyxLQUFLLENBQUM7aUJBQ1gsS0FBSyxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQTtZQUUzQixZQUFZO2lCQUNULE1BQU0sQ0FBQyxHQUFHLENBQUM7aUJBQ1gsSUFBSSxDQUFDLE9BQU8sRUFBRSwrQ0FBK0MsQ0FBQztpQkFDOUQsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMscUJBQXFCLENBQUM7aUJBQzVELElBQUksQ0FBQyxXQUFXLEVBQUUsZ0JBQWdCLENBQUM7aUJBQ25DLElBQUksQ0FBQyxLQUFLLENBQUM7aUJBQ1QsU0FBUyxDQUFDLE1BQU0sQ0FBQztpQkFDckIsS0FBSyxDQUFDLE1BQU0sRUFBRSx5QkFBeUIsQ0FBQyxDQUFDO1lBRTFDLGFBQWE7aUJBQ1YsTUFBTSxDQUFDLEdBQUcsQ0FBQztpQkFDWCxJQUFJLENBQUMsT0FBTyxFQUFFLCtDQUErQyxDQUFDO2lCQUM5RCxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxxQkFBcUIsQ0FBQztpQkFDNUQsSUFBSSxDQUFDLFdBQVcsRUFBRSxnQkFBZ0IsQ0FBQztpQkFDbkMsSUFBSSxDQUFDLEtBQUssQ0FBQztpQkFDWCxLQUFLLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFBO1FBQzdCLENBQUM7YUFDSSxDQUFDO1lBQ0osR0FBRztpQkFDQSxNQUFNLENBQUMsR0FBRyxDQUFDO2lCQUNYLElBQUksQ0FBQyxXQUFXLEVBQUUsY0FBYyxHQUFHLE1BQU0sR0FBRyxHQUFHLENBQUM7aUJBQ2hELElBQUksQ0FBQyxPQUFPLEVBQUUsb0NBQW9DLENBQUM7aUJBQ25ELElBQUksQ0FBQyxXQUFXLEVBQUUsY0FBYyxHQUFHLE1BQU0sR0FBRyxHQUFHLENBQUM7aUJBQ2hELElBQUksQ0FBQyxLQUFLLENBQUM7aUJBQ1gsU0FBUyxDQUFDLE1BQU0sQ0FBQztpQkFDbkIsS0FBSyxDQUFDLE1BQU0sRUFBRSx5QkFBeUIsQ0FBQyxDQUFDO1lBRTFDLEdBQUc7aUJBQ0EsTUFBTSxDQUFDLEdBQUcsQ0FBQztpQkFDWCxJQUFJLENBQUMsT0FBTyxFQUFFLHNDQUFzQyxDQUFDO2lCQUNyRCxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxxQkFBcUIsQ0FBQztpQkFDNUQsSUFBSSxDQUFDLFdBQVcsRUFBRSxnQkFBZ0IsQ0FBQztpQkFDbkMsSUFBSSxDQUFDLEtBQUssQ0FBQztpQkFDVCxTQUFTLENBQUMsTUFBTSxDQUFDO2lCQUNyQixLQUFLLENBQUMsTUFBTSxFQUFFLHlCQUF5QixDQUFDLENBQUM7UUFDNUMsQ0FBQztRQUNHOzs7V0FHRztRQUNILElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLG9CQUFvQixJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQzlELEVBQUUsQ0FBQyxTQUFTLENBQUMsdUNBQXVDLENBQUMsQ0FBQyxJQUFJLENBQ3hELEdBQUcsRUFDSDtnQkFDRSxJQUFJLGNBQWMsRUFBRSxDQUFDO29CQUNuQixjQUFjLEdBQUcsS0FBSyxDQUFDO29CQUN2QixPQUFPLGdCQUFnQixHQUFHLENBQUMsQ0FBQztnQkFDOUIsQ0FBQztxQkFBTSxDQUFDO29CQUNOLGNBQWMsR0FBRyxJQUFJLENBQUM7b0JBQ3RCLE9BQU8saUJBQWlCLEdBQUcsQ0FBQyxDQUFDO2dCQUMvQixDQUFDO1lBQ0gsQ0FBQyxDQUNGLENBQUM7UUFDSixDQUFDO2FBQU0sQ0FBQztZQUNOLEVBQUUsQ0FBQyxTQUFTLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxJQUFJLENBQ3pDLE9BQU8sRUFDUCxvQkFBb0IsQ0FDckIsQ0FBQztRQUNKLENBQUM7UUFDRDs7O1dBR0c7UUFDSCxJQUNFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxrQkFBa0IsSUFBSSxTQUFTO1lBQ3ZELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxrQkFBa0IsRUFDMUMsQ0FBQztZQUNELEVBQUUsQ0FBQyxTQUFTLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxJQUFJLENBQ3pDLE9BQU8sRUFDUCxvQkFBb0IsQ0FDckIsQ0FBQztRQUNKLENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxrQkFBa0IsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNuRSxHQUFHO2lCQUNBLE1BQU0sQ0FBQyxHQUFHLENBQUM7aUJBQ1gsSUFBSSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUM7aUJBQ3pCLElBQUksQ0FBQyxXQUFXLEVBQUUsY0FBYyxHQUFHLE1BQU0sR0FBRyxHQUFHLENBQUM7aUJBQ2hELEtBQUssQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDO2lCQUV0QixJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ3ZDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDekQsR0FBRztpQkFDQSxNQUFNLENBQUMsR0FBRyxDQUFDO2lCQUNYLElBQUksQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDO2lCQUN6QixJQUFJLENBQUMsV0FBVyxFQUFFLGNBQWMsR0FBRyxNQUFNLEdBQUcsR0FBRyxDQUFDO2lCQUNoRCxLQUFLLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQztpQkFFdEIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ2pELElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDekQsR0FBRyxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztZQUN2RSxvRUFBb0U7WUFDcEUsR0FBRyxDQUFDLFNBQVMsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUU7Z0JBQy9DLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLGFBQWEsRUFBRSxDQUFDO29CQUMxQyxPQUFPLENBQUMsQ0FBQztnQkFDWCxDQUFDO2dCQUNEOzs7bUJBR0c7Z0JBQ0gsSUFDRSxjQUFjO29CQUNkLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxzQkFBc0IsSUFBSSxTQUFTLEVBQzNELENBQUM7b0JBQ0QsY0FBYyxHQUFHLEtBQUssQ0FBQztvQkFDdkIsT0FBTyxtQkFBbUIsR0FBRyxDQUFDLENBQUM7Z0JBQ2pDLENBQUM7cUJBQU0sQ0FBQztvQkFDTixjQUFjLEdBQUcsSUFBSSxDQUFDO29CQUN0QixPQUFPLG9CQUFvQixHQUFHLENBQUMsQ0FBQztnQkFDbEMsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0g7OztlQUdHO1lBQ0gsY0FBYyxHQUFHLEtBQUssQ0FBQztZQUN2QixHQUFHO2lCQUNBLFNBQVMsQ0FBQyx3QkFBd0IsQ0FBQztnQkFDcEMsd0RBQXdEO2lCQUN2RCxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUNiLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLGdCQUFnQixFQUFFLENBQUM7b0JBQzdDLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7d0JBQzVCLE9BQU8sc0NBQXNDLENBQUM7b0JBQ2hELENBQUM7b0JBQ0QsT0FBTyxrQ0FBa0MsQ0FBQztnQkFDNUMsQ0FBQzs7b0JBQU0sT0FBTyxxQ0FBcUMsQ0FBQztZQUN0RCxDQUFDLENBQUM7aUJBQ0QsSUFBSSxDQUFDLEdBQUcsRUFBRTtnQkFDVCxJQUFJLGNBQWMsRUFBRSxDQUFDO29CQUNuQixjQUFjLEdBQUcsS0FBSyxDQUFDO29CQUN2QixPQUFPLG1CQUFtQixDQUFDO2dCQUM3QixDQUFDO3FCQUFNLENBQUM7b0JBQ04sY0FBYyxHQUFHLElBQUksQ0FBQztvQkFDdEIsT0FBTyxvQkFBb0IsQ0FBQztnQkFDOUIsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDOUMsR0FBRztpQkFDQSxTQUFTLENBQUMsd0JBQXdCLENBQUM7aUJBQ25DLElBQUksQ0FBQyxPQUFPLEVBQUUsa0NBQWtDLENBQUM7aUJBQ2pELElBQUksQ0FBQyxHQUFHLEVBQUUsb0JBQW9CLENBQUM7aUJBQy9CLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO2dCQUNsQixJQUFJLFFBQVEsRUFBRSxDQUFDO29CQUNiLDJFQUEyRTtvQkFDM0UsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDaEMsT0FBTyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDbkMsQ0FBQztnQkFDRCxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDL0IsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQzdELENBQUM7Z0JBQ0QsT0FBTyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDekIsQ0FBQyxDQUFDO2lCQUNELElBQUksQ0FBQyxXQUFXLEVBQUUsVUFBK0IsQ0FBQyxFQUFFLENBQUM7Z0JBQ3BELElBQUksUUFBUSxFQUFFLENBQUM7b0JBQ2IsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDO29CQUNsQixJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsQ0FBQzt3QkFDbEQsU0FBUyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7b0JBQy9FLENBQUM7b0JBQ0QsSUFBSSxTQUFTLEtBQUssQ0FBQyxFQUFFLENBQUM7d0JBQ3BCLE9BQU8sZ0JBQWdCLENBQUM7b0JBQzFCLENBQUM7eUJBQU0sQ0FBQzt3QkFDTixPQUFPLFlBQVksR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUM7b0JBQ3pDLENBQUM7Z0JBQ0gsQ0FBQztnQkFDRCxPQUFPLElBQUksQ0FBQztZQUNkLENBQUMsQ0FBQyxDQUFDO1lBQ0wsR0FBRztpQkFDQSxTQUFTLENBQUMsbUJBQW1CLENBQUM7aUJBQzlCLE1BQU0sQ0FBQyxNQUFNLENBQUM7aUJBQ2QsSUFBSSxDQUFDLE9BQU8sRUFBRSxrQ0FBa0MsQ0FBQztpQkFDakQsSUFBSSxDQUFDLEdBQUcsRUFBRSxtQkFBbUIsQ0FBQztpQkFDOUIsSUFBSSxDQUFDLE1BQU0sRUFBRSxjQUFjLENBQUM7aUJBQzVCLElBQUksQ0FBQyxVQUFVLENBQUM7Z0JBQ2Ysa0RBQWtEO2dCQUNsRCxJQUFJLFFBQVEsRUFBRSxDQUFDO29CQUNiLE9BQU8sRUFBRSxDQUFDO2dCQUNaLENBQUM7Z0JBQ0QsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQy9CLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDcEUsQ0FBQztnQkFDRCxPQUFPLEVBQUUsQ0FBQztZQUNaLENBQUMsQ0FBQztpQkFDRCxJQUFJLENBQUMsV0FBVyxFQUFFLFVBQVMsQ0FBQyxFQUFFLENBQUM7Z0JBQzlCLElBQUksUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztvQkFDeEIsT0FBTyxpQkFBaUIsQ0FBQztnQkFDM0IsQ0FBQztnQkFDRCxPQUFPLElBQUksQ0FBQztZQUNkLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQztRQUNEOzs7V0FHRztRQUNILElBQ0UsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGtCQUFrQixJQUFJLFNBQVM7WUFDdkQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGtCQUFrQixFQUMxQyxDQUFDO1lBQ0QsR0FBRztpQkFDQSxTQUFTLENBQUMsMEJBQTBCLENBQUM7aUJBQ3JDLElBQUksQ0FBQyxPQUFPLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztRQUN6QyxDQUFDO1FBQ0Q7O1dBRUc7UUFDSCxJQUNFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLElBQUksU0FBUztZQUNsRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsYUFBYSxFQUNyQyxDQUFDO1lBQ0QsRUFBRSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLG9CQUFvQixDQUFDLENBQUM7UUFDcEUsQ0FBQztRQUNEOzs7V0FHRztRQUNQLElBQ0UsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGFBQWEsSUFBSSxTQUFTO1lBQ2xELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLEVBQ3JDLENBQUM7WUFDRCxFQUFFLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQztpQkFDMUIsS0FBSyxDQUFDLGtCQUFrQixFQUFFLEtBQUssQ0FBQztpQkFDaEMsS0FBSyxDQUFDLE9BQU8sRUFBRSx5QkFBeUIsQ0FBQyxDQUFDLENBQUMsbUJBQW1CO1FBQ25FLENBQUM7UUFDRzs7O1dBR0c7UUFDUCxJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLElBQUksU0FBUyxFQUFFLENBQUM7WUFDdEQsRUFBRSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxLQUFLLENBQy9CLE9BQU8sRUFDUCxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxJQUFJLHlCQUF5QixDQUNsRSxDQUFDO1FBQ0osQ0FBQztRQUNHOztXQUVHO1FBQ1AsSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN2RCxHQUFHO2lCQUNBLFNBQVMsQ0FBQyxtQ0FBbUMsQ0FBQztpQkFDOUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxhQUFhLENBQUM7aUJBQ2hDLElBQUksQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDO2lCQUMxQixJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQztpQkFDZixJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3RCLENBQUM7UUFFRCxTQUFTLGVBQWU7WUFDdEIsR0FBRyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUM7aUJBQ3JCLEtBQUssQ0FBQyxRQUFRLEVBQUUseUJBQXlCLENBQUM7aUJBQzFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFFaEMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUM7aUJBQzlCLEtBQUssQ0FBQyxRQUFRLEVBQUUseUJBQXlCLENBQUM7aUJBQzFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFFaEMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUM7aUJBQy9CLEtBQUssQ0FBQyxRQUFRLEVBQUUseUJBQXlCLENBQUM7aUJBQzFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDbEMsQ0FBQztRQUVELGVBQWUsRUFBRSxDQUFDO1FBRWQsSUFBSSxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDcEIsWUFBWSxDQUFDLFNBQVMsQ0FBQyw4RUFBOEUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2hILFNBQVMsU0FBUyxDQUFDLEtBQUs7Z0JBQ3RCLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssS0FBSyxDQUFDLFdBQVcsRUFBRSxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUNqSCxDQUFDO1lBQ0QsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQztZQUNuQyxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUUvRCxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7WUFFN0UsWUFBWTtpQkFDVCxNQUFNLENBQUMsTUFBTSxDQUFDO2lCQUVOLElBQUksQ0FBQyxPQUFPLEVBQUU7Z0JBQ3JCLElBQUksU0FBUyxHQUFHLGtDQUFrQyxDQUFDO2dCQUNuRCxJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxnQkFBZ0I7b0JBQzFDLE9BQU8sU0FBUyxHQUFHLDZCQUE2QixDQUFDO2dCQUNuRCxJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxvQkFBb0IsSUFBSSxTQUFTO29CQUMzRCxPQUFPLFNBQVMsR0FBRywwQkFBMEIsQ0FBQztnQkFDaEQsT0FBTyxTQUFTLEdBQUcsMkJBQTJCLENBQUM7WUFDakQsQ0FBQyxDQUFDO2lCQUNELElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLHNCQUFzQixDQUFDO2lCQUM3RCxJQUFJLENBQUMsV0FBVyxFQUFFLGFBQWEsQ0FBQztpQkFDaEMsSUFBSSxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUM7aUJBQ3BCLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLE1BQU0sR0FBRyxDQUFDLENBQUM7aUJBQ3pCLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDO2lCQUNqQixLQUFLLENBQUMsYUFBYSxFQUFFLFFBQVEsQ0FBQztpQkFDOUIsS0FBSyxDQUFDLE1BQU0sRUFBRSx5QkFBeUIsQ0FBQztpQkFDeEMsS0FBSyxDQUFDLE9BQU8sRUFBRSx5QkFBeUIsQ0FBQztpQkFDekMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUM7aUJBQ2pFLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDNUQsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNsQyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDaEMsR0FBRztpQkFDQSxNQUFNLENBQUMsTUFBTSxDQUFDO2lCQUNkLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO2lCQUNiLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDO2lCQUNqQixJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQztpQkFDakIsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUM7aUJBQ2pCLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxLQUFLLENBQUM7aUJBQ2hDLEtBQUssQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDeEQsZ0JBQWdCO1lBQ2hCLG9CQUFvQjtZQUNwQixtQkFBbUI7WUFDbkIsK0JBQStCO1lBQy9CLHVCQUF1QjtZQUN2Qix1QkFBdUI7WUFDdkIsMkRBQTJEO1lBQzNELGFBQWE7aUJBQ1YsTUFBTSxDQUFDLGVBQWUsQ0FBQztnQkFDeEIsa0VBQWtFO2lCQUNqRSxJQUFJLENBQUMsV0FBVyxFQUFFLFlBQVksR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztpQkFDOUQsSUFBSSxDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUM7aUJBQzVCLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDO2lCQUNsQixNQUFNLENBQUMsV0FBVyxDQUFDO2lCQUNuQixJQUFJLENBQUMsT0FBTyxFQUFFLGdCQUFnQixDQUFDO2lCQUMvQixLQUFLLENBQUMsT0FBTyxFQUFFLHlCQUF5QixDQUFDO2lCQUV6QyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztnQkFDbEIsSUFBSSxZQUFZLEdBQUcsRUFBRSxDQUFDO2dCQUN0QixJQUFJLGNBQWMsR0FBRyxRQUFRLENBQUM7Z0JBQzlCLElBQUksUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUN0QixZQUFZLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQztnQkFDbkMsQ0FBQztnQkFDRCxJQUNFLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYztvQkFDN0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsVUFBVSxFQUN4QyxDQUFDO29CQUNELGNBQWMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUM7Z0JBQzVELENBQUM7Z0JBQ0QsT0FBTyxDQUNMLFFBQVEsY0FBYyxRQUFRO29CQUM5QixPQUFPO29CQUNQLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLE1BQU07b0JBQ3BDLEVBQUU7b0JBQ0YsWUFBWTtvQkFDWixRQUFRLENBQ1QsQ0FBQztZQUNKLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQztRQUNELElBQUk7YUFDRCxTQUFTLENBQUMsTUFBTSxDQUFDO2FBQ2pCLEVBQUUsQ0FBQyxZQUFZLEVBQUUsZUFBZSxDQUFDO2FBQ2pDLEVBQUUsQ0FBQyxVQUFVLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDbEMsSUFBSSxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDeEIsR0FBRztpQkFDQSxNQUFNLENBQUMsTUFBTSxDQUFDO2lCQUNkLElBQUksQ0FBQyxPQUFPLEVBQUUsb0NBQW9DLENBQUM7aUJBQ25ELElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLHNCQUFzQixDQUFDO2lCQUM3RCxJQUFJLENBQUMsV0FBVyxFQUFFLFlBQVksR0FBRyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQztpQkFDakUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7aUJBQy9CLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxHQUFHLENBQUMsQ0FBQztpQkFDckIsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUM7aUJBQ2pCLEtBQUssQ0FBQyxhQUFhLEVBQUUsUUFBUSxDQUFDO2lCQUM5QixJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQy9CLENBQUM7UUFFRyxJQUFJLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN4QixTQUFTLFNBQVMsQ0FBQyxLQUFLO2dCQUN0QixPQUFPLENBQ0wsQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUM3QyxDQUFDLEtBQUssS0FBSyxLQUFLLENBQUMsV0FBVyxFQUFFLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUN2RCxDQUFDO1lBQ0osQ0FBQztZQUNELE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUM7WUFDbkMsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFFNUQsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBRS9HLEdBQUc7aUJBQ0EsTUFBTSxDQUFDLE1BQU0sQ0FBQztpQkFDZCxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUNiLElBQUksU0FBUyxHQUFHLGtDQUFrQyxDQUFDO2dCQUNuRCxJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxnQkFBZ0I7b0JBQzFDLE9BQU8sU0FBUyxHQUFHLDZCQUE2QixDQUFDO2dCQUNuRCxJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxvQkFBb0IsSUFBSSxTQUFTO29CQUMzRCxPQUFPLFNBQVMsR0FBRywwQkFBMEIsQ0FBQztnQkFDaEQsT0FBTyxTQUFTLEdBQUcsMkJBQTJCLENBQUM7WUFDakQsQ0FBQyxDQUFDO2lCQUNELElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLHNCQUFzQixDQUFDO2lCQUM3RCxJQUFJLENBQ0gsV0FBVyxFQUNYLFlBQVksR0FBRyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxTQUFTLEdBQUcsR0FBRyxDQUNsRDtpQkFDQSxLQUFLLENBQUMsYUFBYSxFQUFFLFFBQVEsQ0FBQztpQkFDOUIsS0FBSyxDQUFDLE1BQU0sRUFBRSx5QkFBeUIsQ0FBQztpQkFDeEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUM7aUJBQ2pFLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDNUQsQ0FBQztRQUVELElBQUksUUFBUSxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ3ZCLElBQUksU0FBUyxHQUFHLEVBQUU7aUJBQ2YsSUFBSSxFQUFFO2lCQUNOLEdBQUcsQ0FBQyxVQUFVLENBQUM7Z0JBQ2QsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDO1lBQ3BCLENBQUMsQ0FBQztpQkFDRCxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7WUFFckIsSUFBSSxPQUFPLEdBQUcsRUFBRTtpQkFDYixJQUFJLEVBQUU7aUJBQ04sQ0FBQyxDQUFDLFVBQVUsQ0FBQztnQkFDWixPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNqRCxDQUFDLENBQUM7aUJBQ0QsQ0FBQyxDQUFDLFVBQVUsQ0FBQztnQkFDWixPQUFPLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDN0IsQ0FBQyxDQUFDLENBQUM7WUFFTCxJQUFJLFdBQVcsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFO2dCQUN0QixPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNqRCxDQUFDLENBQUM7WUFFRixJQUFJLFdBQVcsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFO2dCQUN0QixPQUFPLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDN0IsQ0FBQyxDQUFDO1lBRUYsU0FBUyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO2dCQUM5QixHQUFHO3FCQUNBLE1BQU0sQ0FBQyxNQUFNLENBQUM7cUJBQ2QsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7cUJBQ2YsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUM7cUJBQ3BCLElBQUksQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDO29CQUN6QixJQUFJLFVBQVUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzt3QkFDdkIsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUMvQixDQUFDO3lCQUFNLENBQUM7d0JBQ04sT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDO29CQUNoRCxDQUFDO2dCQUNILENBQUMsQ0FBQztxQkFDRCxJQUFJLENBQUMsY0FBYyxFQUFFLEdBQUcsQ0FBQyxDQUFDLG9CQUFvQjtxQkFDOUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7Z0JBRWhDLElBQUksR0FBRyxHQUFHLEdBQUc7cUJBQ1YsU0FBUyxDQUFDLFdBQVcsQ0FBQztxQkFDdEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7cUJBQ2QsS0FBSyxFQUFFO3FCQUNQLE1BQU0sQ0FBQyxHQUFHLENBQUM7cUJBQ1gsRUFBRSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUM7b0JBQ3RCLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RCLENBQUMsQ0FBQyxDQUFDO2dCQUVMLEdBQUc7cUJBQ0EsTUFBTSxDQUFDLFFBQVEsQ0FBQztxQkFDaEIsSUFBSSxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUM7b0JBQ3ZCLElBQUksVUFBVSxJQUFJLENBQUMsRUFBRSxDQUFDO3dCQUNwQixPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQzVCLENBQUM7eUJBQU0sQ0FBQzt3QkFDTixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLENBQUM7b0JBQ2hELENBQUM7Z0JBQ0gsQ0FBQyxDQUFDO3FCQUNELElBQUksQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDO3FCQUN0QixJQUFJLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQUM7b0JBQ3hCLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUNqRCxDQUFDLENBQUM7cUJBQ0QsSUFBSSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDO29CQUN4QixPQUFPLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzdCLENBQUMsQ0FBQztxQkFDRCxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLHdCQUF3QjtxQkFDckMsS0FBSyxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztnQkFFOUIsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxFQUFFLENBQUM7b0JBQzNDLEdBQUc7eUJBQ0EsTUFBTSxDQUFDLE1BQU0sQ0FBQzt5QkFDZCxJQUFJLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQzt5QkFDckIsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDO3lCQUNwRCxJQUFJLENBQUMsT0FBTyxFQUFFLGFBQWEsR0FBRyxRQUFRLEdBQUcsY0FBYyxHQUFHLE1BQU0sQ0FBQzt5QkFDakUsSUFBSSxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDO3dCQUN2QixPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztvQkFDakQsQ0FBQyxDQUFDO3lCQUNELElBQUksQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQzt3QkFDdkIsT0FBTyxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUM3QixDQUFDLENBQUM7eUJBQ0QsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUM7eUJBQ2xCLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO3dCQUNsQixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUN6RCxDQUFDLENBQUMsQ0FBQztnQkFDUCxDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBQ0QsOEVBQThFO0lBQ2hGLENBQUM7SUFDRCxXQUFXLENBQUMsQ0FBTTtRQUNoQixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLFlBQVksSUFBSSxDQUFDLEVBQUUsVUFBVTtZQUN6RCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBQ0QscUJBQXFCLENBQUMsRUFBRTtRQUN0QixJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFDRCw4QkFBOEIsQ0FBQyxLQUFLO1FBQ2xDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFDRCx3QkFBd0IsQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUU7UUFDM0MsNENBQTRDO1FBQzVDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNwQyxDQUFDOytHQS8xQ1UscUNBQXFDO21HQUFyQyxxQ0FBcUMsNGpCQ3pCbEQseXZDQWtDQTs7NEZEVGEscUNBQXFDO2tCQVRqRCxTQUFTOytCQUNFLHNDQUFzQyxpQkFNakMsaUJBQWlCLENBQUMsSUFBSTt3REFNckMsWUFBWTtzQkFEWCxTQUFTO3VCQUFDLCtCQUErQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFJNUQsMkJBQTJCO3NCQUQxQixTQUFTO3VCQUFDLDBCQUEwQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFHOUMsU0FBUztzQkFBakIsS0FBSztnQkFDRyx3QkFBd0I7c0JBQWhDLEtBQUs7Z0JBQ0ksVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxvQkFBb0I7c0JBQTdCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBPbkluaXQsXHJcbiAgVmlld0NoaWxkLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgSW5wdXQsXHJcbiAgT3V0cHV0LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBWaWV3RW5jYXBzdWxhdGlvbixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tcG9uZW50VW5pcXVlSWQgfSBmcm9tICcuLi91bmlxdWUtaWQnO1xyXG5pbXBvcnQgQ2hhcnRIZWxwZXIgZnJvbSAnLi4vY2hhcnQtaGVscGVyJztcclxuaW1wb3J0ICogYXMgZDMgZnJvbSAnZDMnO1xyXG5pbXBvcnQgeyBSZXNpemVkRXZlbnQgfSBmcm9tICdhbmd1bGFyLXJlc2l6ZS1ldmVudCc7XHJcbmltcG9ydCBIZWFkZXJDb25maWdIZWxwZXIgZnJvbSAnLi4vaGVhZGVyLWNvbmZpZyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1ob3Jpem9udGFsLWJhcnMtd2l0aC1zY3JvbGwtem9vbScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2hvcml6b250YWwtYmFycy13aXRoLXNjcm9sbC16b29tLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFtcclxuICAgICcuL2hvcml6b250YWwtYmFycy13aXRoLXNjcm9sbC16b29tLmNvbXBvbmVudC5sZXNzJyxcclxuICAgICcuLi9jb21tb24tc3R5bGVzLmxlc3MnLFxyXG4gIF0sXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEhvcml6b250YWxCYXJzV2l0aFNjcm9sbFpvb21Db21wb25lbnRcclxuICBleHRlbmRzIENvbXBvbmVudFVuaXF1ZUlkXHJcbiAgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIEBWaWV3Q2hpbGQoJ3ZlcnRpY2Fsc3RhY2tlZGNoYXJ0Y29udGFpbmVyJywgeyBzdGF0aWM6IHRydWUgfSlcclxuICBjb250YWluZXJFbHQhOiBFbGVtZW50UmVmO1xyXG5cclxuICBAVmlld0NoaWxkKCd2ZXJ0aWNhbHN0YWNrZWRjb250YWluZXInLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIHZlcnRpY2Fsc3RhY2tlZGNvbnRhaW5lckVsdCE6IEVsZW1lbnRSZWY7XHJcblxyXG4gIEBJbnB1dCgpIGNoYXJ0RGF0YTogYW55O1xyXG4gIEBJbnB1dCgpIGN1c3RvbUNoYXJ0Q29uZmlndXJhdGlvbjogYW55O1xyXG4gIEBPdXRwdXQoKSBjbGlja0V2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIGhlYWRlck1lbnVjbGlja0V2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgY2hhcnRDb25maWd1cmF0aW9uOiBhbnkgPSB7fTtcclxuICBpc0hlYWRlclZpc2libGU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIGlzVG9wQ2FwdGlvblZpc2libGU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHVuaXF1ZUlkOiBhbnkgPSB0aGlzLmdldFVuaXF1ZUlkKCk7XHJcbiAgaXNUcmFuc3BhcmVudEJhY2tncm91bmQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBkZWZhdWx0Q29uZmlndXJhdGlvbjogYW55ID0ge1xyXG4gICAgbWFyZ2luOiB7IHRvcDogMjAsIHJpZ2h0OiAyMCwgYm90dG9tOiAyMCwgbGVmdDogNDAgfSxcclxuICAgIHN2Z0hlaWdodDogNzAsXHJcbiAgICBsZWdlbmRIZWlnaHQ6ICcxMCUnLFxyXG4gICAgbnVtYmVyT2ZZVGlja3M6IDUsXHJcbiAgICBsYWJlbEZvcm1hdHRlcjogQ2hhcnRIZWxwZXIuZGVmYXVsdEZvcm1hdHRlcixcclxuICAgIHhBeGlzTGFiZWxGb21hdHRlcjogQ2hhcnRIZWxwZXIuZGVmYXVsdEZvcm1hdHRlcixcclxuICAgIHlBeGlzTGFiZWxGb21hdHRlcjogQ2hhcnRIZWxwZXIuZGVmYXVsdEZvcm1hdHRlcixcclxuICAgIHlMaW5lQXhpc0xhYmVsRm9tYXR0ZXI6IENoYXJ0SGVscGVyLmRlZmF1bHRGb3JtYXR0ZXIsXHJcbiAgICBsaW5lR3JhcGhDb2xvcjogJyNGNkQyODMnLFxyXG4gICAgc2hvd0xpbmVDaGFydEF4aXM6IHRydWUsXHJcbiAgICBzaG93TGVnZW5kOiBmYWxzZSxcclxuICAgIGZvckNvbXBhcmlzb246IHRydWUsXHJcbiAgICBoZWFkZXJNZW51T3B0aW9uczogSGVhZGVyQ29uZmlnSGVscGVyLmhlYWRlckNvbmZpZy5oZWFkZXJNZW51T3B0aW9ucyxcclxuICAgIHlBeGlzR3JpZDogZmFsc2UsXHJcbiAgICBpc0hlYWRlclZpc2libGU6IHVuZGVmaW5lZCxcclxuICAgIGlzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kOiB1bmRlZmluZWQsXHJcbiAgICBpc1RvcENhcHRpb25WaXNpYmxlOiB1bmRlZmluZWQsXHJcbiAgICBpc011bHRpQ2hhcnRHcmlkTGluZTogdW5kZWZpbmVkLFxyXG4gICAgaXNGdWxsU2NyZWVuOiB1bmRlZmluZWQsXHJcbiAgICBjdXN0b21Zc2NhbGU6IHVuZGVmaW5lZCxcclxuICAgIGlzWGF4aXNMYWJlbEhpZGRlbjogdW5kZWZpbmVkLFxyXG4gICAgaXNZYXhpc0xhYmVsSGlkZGVuOiB1bmRlZmluZWQsXHJcbiAgICBpc1lheGlzSGlkZGVuOiB1bmRlZmluZWQsXHJcbiAgICBpc1lheGlzRGFzaGVkOiB1bmRlZmluZWQsXHJcbiAgICBpc1hheGlzQ29sb3I6IHVuZGVmaW5lZCxcclxuICAgIHRleHRGb3JtYXR0ZXI6IHVuZGVmaW5lZCxcclxuICAgIHNob3dUb3RhbE9uVG9wOiB1bmRlZmluZWQsXHJcbiAgICBiYWNrZW5kRm9ybWF0dGVySGFzUHJpb3JpdHk6IHVuZGVmaW5lZCxcclxuICAgIHNob3dBbmdsZWRMYWJlbHM6IHVuZGVmaW5lZCxcclxuICAgIGlzTm9BbHRlcm5hdGVYYXhpc1RleHQ6IHVuZGVmaW5lZCxcclxuICAgIGlzWGdyaWRCZXR3ZWVuTGFiZWxzOiB1bmRlZmluZWQsXHJcbiAgICBzaG93WGF4aXNUb3A6IHVuZGVmaW5lZCxcclxuICAgIHhBeGlzR3JpZDogdW5kZWZpbmVkLFxyXG4gICAgeExhYmVsc09uU2FtZUxpbmU6IHVuZGVmaW5lZCxcclxuICAgIGhpZGVYYXhpc1RpY2s6IHVuZGVmaW5lZCxcclxuICAgIGlzRHJpbGxkb3duQ2hhcnQ6IHVuZGVmaW5lZCxcclxuICAgIGlzVGFyZ2V0TGluZTogdW5kZWZpbmVkLFxyXG4gICAgZGlzcGxheVRpdGxlT25Ub3A6IHVuZGVmaW5lZCxcclxuICAgIGlzVG9nZ2xlVmlzaWJsZTogdW5kZWZpbmVkLFxyXG4gICAgaXNUaXRsZUhpZGRlbjogdW5kZWZpbmVkLFxyXG4gIH07XHJcbiAgaXNDQzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlzWm9vbWVkT3V0OiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gIH1cclxuICBpc1pvb21PdXRTZWxlY3RlZChpc1pvb21PdXQpIHtcclxuICAgIHRoaXMuaXNab29tZWRPdXQgPSBpc1pvb21PdXQ7XHJcbiAgICB0aGlzLm5nT25DaGFuZ2VzKCk7XHJcbiAgfVxyXG4gIG5nT25DaGFuZ2VzKCkge1xyXG4gICAgbGV0IHNlbGYgPSB0aGlzO1xyXG4gICAgZDMuc2VsZWN0KCcjJyArIHNlbGYudW5pcXVlSWQpLnJlbW92ZSgpO1xyXG4gICAgdGhpcy5pbml0aWFsaXplU3RhY2tlZENoYXJ0KCk7XHJcbiAgfVxyXG4gIG9uUmVzaXplZChldmVudDogUmVzaXplZEV2ZW50KSB7XHJcbiAgICBsZXQgc2VsZiA9IHRoaXM7XHJcbiAgICBzZXRUaW1lb3V0KFxyXG4gICAgICBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgZDMuc2VsZWN0KCcjJyArIHNlbGYudW5pcXVlSWQpLnJlbW92ZSgpO1xyXG4gICAgICAgIHNlbGYuaW5pdGlhbGl6ZVN0YWNrZWRDaGFydCgpO1xyXG4gICAgICB9LmJpbmQoc2VsZiksXHJcbiAgICAgIDEwXHJcbiAgICApO1xyXG4gIH1cclxuICBuZ09uSW5pdCgpIHsgfVxyXG5cclxuICBpbml0aWFsaXplU3RhY2tlZENoYXJ0KCkge1xyXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgbGV0IGRhdGE6IGFueSA9IFtdO1xyXG4gICAgbGV0IG1ldGFEYXRhOiBhbnkgPSBudWxsO1xyXG4gICAgbGV0IGtleUxpc3QgPSBudWxsO1xyXG4gICAgbGV0IGxpbmVEYXRhID0gbnVsbDtcclxuICAgIGxldCBjb2xvcnM6IGFueSA9IG51bGw7XHJcbiAgICB2YXIgYWx0ZXJuYXRlX3RleHQgPSBmYWxzZTtcclxuICAgIHZhciBhbHRlcm5hdGVfbGFiZWwgPSBmYWxzZTtcclxuICAgIHZhciBzaG9ydF90aWNrX2xlbmd0aCA9IDQ7XHJcbiAgICB2YXIgbG9uZ190aWNrX2xlbmd0aCA9IDE2O1xyXG4gICAgdmFyIHNob3J0X3RpY2tfbGVuZ3RoX2JnID0gNTtcclxuICAgIHZhciBsb25nX3RpY2tfbGVuZ3RoX2JnID0gMzA7XHJcbiAgICB2YXIgZm9ybWF0RnJvbUJhY2tlbmQ7XHJcbiAgICB2YXIgZm9ybWF0Rm9ySHVnZU51bWJlcnM7XHJcbiAgICB2YXIgdGVtcE9iamVjdEhvbGRlciA9IHt9O1xyXG4gICAgdmFyIHJpZ2h0U3ZnV2lkdGggPSA2MDtcclxuICAgIHZhciBsZWZ0QW5kUmlnaHRTcGFjZXMgPSA1MDtcclxuXHJcbiAgICAgICBsZXQgaXNyaWEgPSB0aGlzLmN1c3RvbUNoYXJ0Q29uZmlndXJhdGlvbi5pc1JpYVxyXG5cclxuICAgIC8vIFJlc3BvbnNpdmUgYnJlYWtwb2ludHNcclxuICAgIGNvbnN0IGlzTW9iaWxlID0gd2luZG93LmlubmVyV2lkdGggPCA1NzY7XHJcbiAgICBjb25zdCBpc1RhYmxldCA9IHdpbmRvdy5pbm5lcldpZHRoID49IDU3NiAmJiB3aW5kb3cuaW5uZXJXaWR0aCA8IDk5MjtcclxuICAgIGNvbnN0IGlzRGVza3RvcCA9IHdpbmRvdy5pbm5lcldpZHRoID49IDk5MjtcclxuXHJcbiAgICAvLyBBZGp1c3QgbWFyZ2lucyBhbmQgZm9udCBzaXplcyBiYXNlZCBvbiBkZXZpY2VcclxuICAgIGlmIChpc01vYmlsZSkge1xyXG4gICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5tYXJnaW4gPSB7IHRvcDogMjAsIHJpZ2h0OiAxMCwgYm90dG9tOiA0MCwgbGVmdDogMzAgfTtcclxuICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24ubnVtYmVyT2ZZVGlja3MgPSA0O1xyXG4gICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5zdmdIZWlnaHQgPSA2MDtcclxuICAgIH0gZWxzZSBpZiAoaXNUYWJsZXQpIHtcclxuICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24ubWFyZ2luID0geyB0b3A6IDI1LCByaWdodDogMjAsIGJvdHRvbTogNDUsIGxlZnQ6IDQwIH07XHJcbiAgICAgIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLm51bWJlck9mWVRpY2tzID0gNjtcclxuICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uc3ZnSGVpZ2h0ID0gNzA7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5tYXJnaW4gPSB7IHRvcDogMzAsIHJpZ2h0OiAzMCwgYm90dG9tOiA1MCwgbGVmdDogNjAgfTtcclxuICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24ubnVtYmVyT2ZZVGlja3MgPSA3O1xyXG4gICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5zdmdIZWlnaHQgPSA4MDtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKHZhciBpIGluIHRoaXMuZGVmYXVsdENvbmZpZ3VyYXRpb24pIHtcclxuICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb25baV0gPSBDaGFydEhlbHBlci5nZXRWYWx1ZUJ5Q29uZmlndXJhdGlvblR5cGUoXHJcbiAgICAgICAgaSxcclxuICAgICAgICB0aGlzLmRlZmF1bHRDb25maWd1cmF0aW9uLFxyXG4gICAgICAgIHRoaXMuY3VzdG9tQ2hhcnRDb25maWd1cmF0aW9uXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICBkYXRhID0gdGhpcy5jaGFydERhdGEuZGF0YTtcclxuICAgIG1ldGFEYXRhID0gdGhpcy5jaGFydERhdGEubWV0YURhdGE7XHJcbiAgICBpZiAobWV0YURhdGEudW5pdCA9PSB1bmRlZmluZWQpIG1ldGFEYXRhLnVuaXQgPSAnJztcclxuICAgIGlmIChtZXRhRGF0YS5pc0NDKSB7XHJcbiAgICAgIHRoaXMuaXNDQyA9IG1ldGFEYXRhLmlzQ0M7XHJcbiAgICB9XHJcbiAgICBpZiAobWV0YURhdGEuYmFyV2l0aG91dENsaWNrICYmIG1ldGFEYXRhLmJhcldpdGhvdXRDbGljay5sZW5ndGgpIHtcclxuICAgICAgbWV0YURhdGEuYmFyV2l0aG91dENsaWNrID0gbWV0YURhdGEuYmFyV2l0aG91dENsaWNrLm1hcCgoZWxlKSA9PlxyXG4gICAgICAgIGVsZS50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBtZXRhRGF0YS5iYXJXaXRob3V0Q2xpY2sgPSBbXTtcclxuICAgIH1cclxuICAgIGxpbmVEYXRhID0gdGhpcy5jaGFydERhdGEubGluZURhdGE7XHJcbiAgICBjb2xvcnMgPSBtZXRhRGF0YS5jb2xvcnM7XHJcbiAgICBrZXlMaXN0ID0gbWV0YURhdGEua2V5TGlzdDtcclxuXHJcbiAgICB2YXIgY2hhcnRDb250YWluZXIgPSBkMy5zZWxlY3QodGhpcy5jb250YWluZXJFbHQubmF0aXZlRWxlbWVudCk7XHJcbiAgICB2YXIgdmVydGljYWxzdGFja2VkY29udGFpbmVyID0gZDMuc2VsZWN0KFxyXG4gICAgICB0aGlzLnZlcnRpY2Fsc3RhY2tlZGNvbnRhaW5lckVsdC5uYXRpdmVFbGVtZW50XHJcbiAgICApO1xyXG5cclxuICAgIGxldCBwYXJzZWROdW0gPSBwYXJzZUZsb2F0KHRoaXMuY2hhcnREYXRhPy50YXJnZXRMaW5lRGF0YT8udGFyZ2V0KTtcclxuICAgIGlmICghaXNOYU4ocGFyc2VkTnVtKSkge1xyXG4gICAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihwYXJzZWROdW0pKSB7XHJcbiAgICAgICAgcGFyc2VkTnVtID0gcGFyc2VJbnQodGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEudGFyZ2V0KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBwYXJzZWROdW0gPSBwYXJzZUZsb2F0KHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLnRhcmdldCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHZhciBtYXJnaW4gPSB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5tYXJnaW47XHJcblxyXG4gICAgLy8gUmVzcG9uc2l2ZSB3aWR0aCBhbmQgaGVpZ2h0XHJcbiAgICB2YXIgY29udGFpbmVyV2lkdGggPSBjaGFydENvbnRhaW5lci5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XHJcbiAgICB2YXIgY29udGFpbmVySGVpZ2h0ID0gdmVydGljYWxzdGFja2VkY29udGFpbmVyLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQ7XHJcbiAgICB2YXIgd2lkdGggPSBjb250YWluZXJXaWR0aCAtIG1hcmdpbi5sZWZ0IC0gbWFyZ2luLnJpZ2h0O1xyXG4gICAgdmFyIGhlaWdodCA9IGNvbnRhaW5lckhlaWdodCAqIChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5zdmdIZWlnaHQgLyAxMDApIC0gbWFyZ2luLnRvcCAtIG1hcmdpbi5ib3R0b207XHJcblxyXG4gICAgLy8gQWRqdXN0IHdpZHRoIGZvciBsYXJnZSBkYXRhc2V0cyBhbmQgem9vbVxyXG4gICAgaWYgKHRoaXMuY2hhcnREYXRhLmRhdGEubGVuZ3RoID4gMzAgJiYgdGhpcy5pc1pvb21lZE91dCkge1xyXG4gICAgICB3aWR0aCA9IHdpZHRoID4gdGhpcy5jaGFydERhdGEuZGF0YS5sZW5ndGggKiAoaXNNb2JpbGUgPyAxNSA6IDI1KVxyXG4gICAgICAgID8gd2lkdGhcclxuICAgICAgICA6IHRoaXMuY2hhcnREYXRhLmRhdGEubGVuZ3RoICogKGlzTW9iaWxlID8gMTUgOiAyNSk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5jaGFydERhdGEuZGF0YS5sZW5ndGggPiA4ICYmICF0aGlzLmlzWm9vbWVkT3V0KSB7XHJcbiAgICAgIHdpZHRoID0gdGhpcy5jaGFydERhdGEuZGF0YS5sZW5ndGggKiAoaXNNb2JpbGUgPyA2MCA6IDEzMCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRnVsbHNjcmVlbiBhbmQgZHJpbGxkb3duIGFkanVzdG1lbnRzXHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNGdWxsU2NyZWVuICE9IHVuZGVmaW5lZCAmJiB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0Z1bGxTY3JlZW4pIHtcclxuICAgICAgaGVpZ2h0ID0gdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uc3ZnSGVpZ2h0ICE9IDgwXHJcbiAgICAgICAgPyB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5zdmdIZWlnaHRcclxuICAgICAgICA6IGNvbnRhaW5lckhlaWdodDtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0RyaWxsZG93bkNoYXJ0KSB7XHJcbiAgICAgIGhlaWdodCA9IGNvbnRhaW5lckhlaWdodCAtIG1hcmdpbi50b3AgLSBtYXJnaW4uYm90dG9tIC0gKGlzTW9iaWxlID8gNjAgOiAxMzApO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIC4uLmV4aXN0aW5nIGNvZGUuLi5cclxuICAgIC8qKlxyXG4gICAgICogZm9yIGhpZGluZyBoZWFkZXJcclxuICAgICAqIHVzZWQgYnkgd2Vla2x5IGNoYXJ0c1xyXG4gICAgICovXHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNIZWFkZXJWaXNpYmxlICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLmlzSGVhZGVyVmlzaWJsZSA9IHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzSGVhZGVyVmlzaWJsZTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogZm9yIGhpZGluZyBsZWdlbmRzXHJcbiAgICAgKiB1c2VkIGJ5IHdlZWtseSBjaGFydHNcclxuICAgICAqL1xyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzVG9wQ2FwdGlvblZpc2libGUgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIC8vVVBEQVRFTkFNRVxyXG4gICAgICB0aGlzLmlzVG9wQ2FwdGlvblZpc2libGUgPSB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1RvcENhcHRpb25WaXNpYmxlO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBmb3IgcmVtb3ZpbmcgYmFja2dyb3VuZCBjb2xvciBzbyB0aGF0IGl0IGNhbiB0YWtlIHBhcmVudHMgY29sb3JcclxuICAgICAqXHJcbiAgICAgKi9cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1RyYW5zcGFyZW50QmFja2dyb3VuZCAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5pc1RyYW5zcGFyZW50QmFja2dyb3VuZCA9XHJcbiAgICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNUcmFuc3BhcmVudEJhY2tncm91bmQ7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIGZvcm1hdCBkYXRhIHZhbHVlcyBiYXNlZCBvbiBjb25maWd1cmF0aW9uIHJlY2VpdmVkXHJcbiAgICAgKi9cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi50ZXh0Rm9ybWF0dGVyICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICBmb3JtYXRGcm9tQmFja2VuZCA9IENoYXJ0SGVscGVyLmRhdGFWYWx1ZUZvcm1hdHRlcihcclxuICAgICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi50ZXh0Rm9ybWF0dGVyXHJcbiAgICAgICk7XHJcbiAgICAgIGZvcm1hdEZvckh1Z2VOdW1iZXJzID0gQ2hhcnRIZWxwZXIuZGF0YVZhbHVlRm9ybWF0dGVyKCcuMnMnKTtcclxuICAgIH1cclxuICAgIHZhciBvdXRlckNvbnRhaW5lciA9IGNoYXJ0Q29udGFpbmVyXHJcbiAgICAgIC5hcHBlbmQoJ2RpdicpXHJcbiAgICAgIC5hdHRyKCdpZCcsIHNlbGYudW5pcXVlSWQpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICdvdXRlci1jb250YWluZXInKVxyXG4gICAgICAuc3R5bGUoJ3dpZHRoJywgJzEwMCUnKVxyXG4gICAgICAuc3R5bGUoJ2hlaWdodCcsIGhlaWdodClcclxuXHJcbiAgICAgIC5zdHlsZSgnb3ZlcmZsb3cteCcsICdoaWRkZW4nKVxyXG4gICAgICAuc3R5bGUoJ3BhZGRpbmctbGVmdCcsIGAke21hcmdpbi5sZWZ0fXB4YClcclxuICAgICAgLnN0eWxlKCdtYXJnaW4tbGVmdCcsICcxMHB4JylcclxuICAgICAgLnN0eWxlKCdwYWRkaW5nLXJpZ2h0JywgYCR7cmlnaHRTdmdXaWR0aH1weGApO1xyXG5cclxuICAgIHZhciBzdmdZQXhpc0xlZnQgPSBvdXRlckNvbnRhaW5lclxyXG4gICAgICAuYXBwZW5kKCdzdmcnKVxyXG4gICAgICAuYXR0cignd2lkdGgnLCAnODAnKVxyXG4gICAgICAuYXR0cignaGVpZ2h0JywgaGVpZ2h0ICsgbWFyZ2luLnRvcCArIG1hcmdpbi5ib3R0b20pXHJcbiAgICAgIC5zdHlsZSgncG9zaXRpb24nLCAnYWJzb2x1dGUnKVxyXG4gICAgICAuc3R5bGUoJ2xlZnQnLCAnMCcpXHJcbiAgICAgIC5zdHlsZSgnei1pbmRleCcsIDEpXHJcbiAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgnICsgKG1hcmdpbi5sZWZ0ICsgMTApICsgJywnICsgbWFyZ2luLnRvcCArICcpJyk7XHJcblxyXG4gICAgdmFyIHN2Z1lBeGlzUmlnaHQgPSBvdXRlckNvbnRhaW5lclxyXG4gICAgICAuYXBwZW5kKCdzdmcnKVxyXG4gICAgICAuYXR0cignd2lkdGgnLCByaWdodFN2Z1dpZHRoKVxyXG4gICAgICAuYXR0cignaGVpZ2h0JywgaGVpZ2h0ICsgbWFyZ2luLnRvcCArIG1hcmdpbi5ib3R0b20pXHJcbiAgICAgIC5zdHlsZSgncG9zaXRpb24nLCAnYWJzb2x1dGUnKVxyXG4gICAgICAuc3R5bGUoJ3JpZ2h0JywgJzJweCcpXHJcbiAgICAgIC5zdHlsZSgnei1pbmRleCcsIDEpXHJcbiAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgnICsgMCArICcsJyArIG1hcmdpbi50b3AgKyAnKScpO1xyXG5cclxuICAgIHZhciBpbm5lckNvbnRhaW5lciA9IG91dGVyQ29udGFpbmVyXHJcbiAgICAgIC5hcHBlbmQoJ2RpdicpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICdpbm5lci1jb250YWluZXInKVxyXG4gICAgICAuc3R5bGUoJ3dpZHRoJywgJzEwMCUnKVxyXG4gICAgICAuc3R5bGUoJ292ZXJmbG93LXgnLCAnYXV0bycpO1xyXG5cclxuXHJcbiAgICAvLyBDYWxjdWxhdGUgYmFyIHdpZHRoIGFuZCBwYWRkaW5nIGZvciBtb2JpbGUgdG8gYXZvaWQgb3ZlcmxhcCBhbmQgYWRkIHNwYWNlIGJldHdlZW4gYmFyc1xyXG4gICAgbGV0IGJhcldpZHRoO1xyXG4gICAgbGV0IGJhclBhZGRpbmcgPSAxMjsgLy8gcHgsIHNwYWNlIGJldHdlZW4gYmFycyBvbiBtb2JpbGVcclxuICAgIGxldCByZXF1aXJlZFN2Z1dpZHRoO1xyXG4gICAgaWYgKGlzTW9iaWxlKSB7XHJcbiAgICAgIC8vIFVzZSBhIG1pbmltdW0gd2lkdGggcGVyIGJhciBhbmQgYWRkIHBhZGRpbmcgYmV0d2VlbiBiYXJzXHJcbiAgICAgIGNvbnN0IG1pbkJhcldpZHRoID0gMzI7IC8vIHB4LCBjYW4gYWRqdXN0IGFzIG5lZWRlZFxyXG4gICAgICBiYXJXaWR0aCA9IG1pbkJhcldpZHRoO1xyXG4gICAgICByZXF1aXJlZFN2Z1dpZHRoID0gTWF0aC5tYXgoXHJcbiAgICAgICAgd2lkdGggLSByaWdodFN2Z1dpZHRoLFxyXG4gICAgICAgIChiYXJXaWR0aCArIGJhclBhZGRpbmcpICogZGF0YS5sZW5ndGggKyBsZWZ0QW5kUmlnaHRTcGFjZXMgKiAyICsgcmlnaHRTdmdXaWR0aCAtIGJhclBhZGRpbmcgLy8gbm8gcGFkZGluZyBhZnRlciBsYXN0IGJhclxyXG4gICAgICApO1xyXG4gICAgICBpbm5lckNvbnRhaW5lci5zdHlsZSgnb3ZlcmZsb3cteCcsICdhdXRvJyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBiYXJXaWR0aCA9IE1hdGgubWF4KDQwLCAod2lkdGggLSByaWdodFN2Z1dpZHRoIC0gbGVmdEFuZFJpZ2h0U3BhY2VzICogMikgLyBkYXRhLmxlbmd0aCk7XHJcbiAgICAgIGJhclBhZGRpbmcgPSAwO1xyXG4gICAgICByZXF1aXJlZFN2Z1dpZHRoID0gd2lkdGggLSByaWdodFN2Z1dpZHRoO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBzdmcgPSBpbm5lckNvbnRhaW5lclxyXG4gICAgICAuYXBwZW5kKCdzdmcnKVxyXG4gICAgICAuYXR0cignd2lkdGgnLCByZXF1aXJlZFN2Z1dpZHRoKVxyXG4gICAgICAuYXR0cignaGVpZ2h0JywgaGVpZ2h0ICsgbWFyZ2luLnRvcCArIG1hcmdpbi5ib3R0b20gKyAzMClcclxuICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKCcgKyAwICsgJywnICsgbWFyZ2luLnRvcCArICcpJyk7XHJcblxyXG4gICAgbGV0IHN0YWNrS2V5ID0ga2V5TGlzdDtcclxuICAgIHZhciBzdGFjazogYW55ID0gZDNcclxuICAgICAgLnN0YWNrKClcclxuICAgICAgLmtleXMoc3RhY2tLZXkpXHJcbiAgICAgIC8qLm9yZGVyKGQzLnN0YWNrT3JkZXIpKi9cclxuICAgICAgLm9mZnNldChkMy5zdGFja09mZnNldE5vbmUpO1xyXG4gICAgdmFyIGxheWVyczogYW55ID0gc3RhY2soZGF0YSk7XHJcbiAgICBkYXRhLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcclxuICAgICAgcmV0dXJuIGIudG90YWwgLSBhLnRvdGFsO1xyXG4gICAgfSk7XHJcbiAgICBsZXQgbGluZVlzY2FsZTtcclxuICAgIGlmIChsaW5lRGF0YSAhPSBudWxsKSB7XHJcbiAgICAgIGxpbmVZc2NhbGUgPSBkM1xyXG4gICAgICAgIC5zY2FsZUxpbmVhcigpXHJcbiAgICAgICAgLmRvbWFpbihbXHJcbiAgICAgICAgICAwLFxyXG4gICAgICAgICAgZDMubWF4KGxpbmVEYXRhLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gK2QudmFsdWU7XHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICBdKVxyXG4gICAgICAgIC5yYW5nZShbaGVpZ2h0LCAwXSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ2FsY3VsYXRlIGJhciB3aWR0aCBmb3IgbW9iaWxlIHRvIGF2b2lkIG92ZXJsYXBcclxuICAgIC8vIC4uLmJhcldpZHRoIGlzIG5vdyBjYWxjdWxhdGVkIGFib3ZlLCByZW1vdmUgZHVwbGljYXRlLi4uXHJcblxyXG4gICAgdmFyIHhTY2FsZSA9IGQzXHJcbiAgICAgIC5zY2FsZUJhbmQoKVxyXG4gICAgICAucmFuZ2VSb3VuZChbXHJcbiAgICAgICAgbGVmdEFuZFJpZ2h0U3BhY2VzLFxyXG4gICAgICAgIHdpZHRoIC0gcmlnaHRTdmdXaWR0aCAtIGxlZnRBbmRSaWdodFNwYWNlc1xyXG4gICAgICBdKVxyXG4gICAgICAuZG9tYWluKFxyXG4gICAgICAgIGRhdGEubWFwKGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICByZXR1cm4gZC5uYW1lO1xyXG4gICAgICAgIH0pLnJldmVyc2UoKVxyXG4gICAgICApXHJcbiAgICAgIC5wYWRkaW5nKGlzTW9iaWxlID8gMC4yIDogMC41KTtcclxuXHJcbiAgICB2YXIgeFNjYWxlRnJvbU9yaWdpbiA9IGQzXHJcbiAgICAgIC5zY2FsZUJhbmQoKVxyXG4gICAgICAucmFuZ2VSb3VuZChbd2lkdGggLSByaWdodFN2Z1dpZHRoLCAwXSlcclxuICAgICAgLmRvbWFpbihcclxuICAgICAgICBkYXRhLm1hcChmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgcmV0dXJuIGQubmFtZTtcclxuICAgICAgICB9KS5yZXZlcnNlKClcclxuICAgICAgKTtcclxuICAgIC8vIC4uLmV4aXN0aW5nIGNvZGUuLi5cclxuICAgIC8qKlxyXG4gICAgICogZHJhdyBzZWNvbmQgeCBheGlzIG9uIHRvcFxyXG4gICAgICovXHJcbiAgICBpZiAoc2VsZi5jaGFydENvbmZpZ3VyYXRpb24uc2hvd1hheGlzVG9wKSB7XHJcbiAgICAgIHN2Z1xyXG4gICAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAgIC5hdHRyKCdjbGFzcycsICdsaWItbGluZS1heGlzLXRleHQgbGliLWxpbmUteC1heGlzLXRleHQgeC1heGlzJylcclxuICAgICAgICAuYXR0cignc3R5bGUnLCBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi54QXhpc0N1c3RvbVRleHRTdHlsZXMpXHJcbiAgICAgICAgLmNhbGwoZDMuYXhpc0JvdHRvbSh4U2NhbGUpLnRpY2tTaXplKDApKTtcclxuICAgICAgc3ZnLnNlbGVjdEFsbCgnLngtYXhpcyA+IGcgPiB0ZXh0JykuYXR0cignY2xhc3MnLCAnbGliLWRpc3BsYXktaGlkZGVuJyk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIGRyYXcgc2Vjb25kIHggYXhpcyBvbiB0b3BcclxuICAgICAqL1xyXG4gICAgLy8gaWYgKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnNob3dYYXhpc0F0VGFyZ2V0KSB7XHJcbiAgICAvLyAgIHN2Z1xyXG4gICAgLy8gICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgLy8gICAgIC5hdHRyKCdjbGFzcycsICdsaWItbGluZS1heGlzLXRleHQgbGliLWxpbmUteC1heGlzLXRleHQgeC1heGlzJylcclxuICAgIC8vICAgICAuYXR0cignc3R5bGUnLCBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi54QXhpc0N1c3RvbVRleHRTdHlsZXMpXHJcbiAgICAvLyAgICAgLmNhbGwoZDMuYXhpc0JvdHRvbSh4U2NhbGUpLnRpY2tTaXplKDApKTtcclxuICAgIC8vICAgc3ZnLnNlbGVjdEFsbCgnLngtYXhpcyA+IGcgPiB0ZXh0JykuYXR0cignY2xhc3MnLCAnbGliLWRpc3BsYXktaGlkZGVuJyk7XHJcbiAgICAvLyB9XHJcbmlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi54QXhpc0dyaWQpIHtcclxuICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnhBeGlzR3JpZC5sZW5ndGg7IGorKykge1xyXG4gICAgc3ZnXHJcbiAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCBgeCR7aiArIDJ9IGF4aXMke2ogKyAyfWApXHJcbiAgICAgIC5zdHlsZSgnY29sb3InLCAndmFyKC0tY2hhcnQtZ3JpZC1jb2xvciknKSAvLyBVc2UgQ1NTIHZhcmlhYmxlIGluc3RlYWQgb2YgaGFyZGNvZGVkXHJcbiAgICAgIC5hdHRyKFxyXG4gICAgICAgICd0cmFuc2Zvcm0nLFxyXG4gICAgICAgICd0cmFuc2xhdGUoMCwnICsgaGVpZ2h0ICogdGhpcy5jaGFydENvbmZpZ3VyYXRpb24ueEF4aXNHcmlkW2pdICsgJyknXHJcbiAgICAgIClcclxuICAgICAgLmNhbGwoZDMuYXhpc0JvdHRvbSh4U2NhbGUpLnRpY2tTaXplKDApLnRpY2tzKDUpLnRpY2tGb3JtYXQoJycpKVxyXG4gICAgICAuc3R5bGUoJ2ZpbGwnLCAndmFyKC0tY2hhcnQtdGV4dC1jb2xvciknKTtcclxuICB9XHJcbn1cclxuXHJcbiAgICBsZXQgeVNjYWxlID0gZDMuc2NhbGVMaW5lYXIoKS5yYW5nZVJvdW5kKFtoZWlnaHQsIDBdKTtcclxuICAgIC8qKlxyXG4gICAgICogdXBkYXRlIG1heCB2YWt1ZXMgc28gdGhhdCB0aGUgdmFrdWUgd29udCBleGNlZWQgdGhlIG1heCBsaW1pdFxyXG4gICAgICogdXNlZCBieSB3ZWVrbHkgY2hhcnRzXHJcbiAgICAgKi9cclxuICAgIHZhciBtYXhWYWx1ZSA9IGQzLm1heChsYXllcnMsIChkKSA9PiBkMy5tYXgoZCwgKGQpID0+IGRbMV0pKTtcclxuICAgIGlmIChtYXhWYWx1ZSA9PSAwKSB7XHJcbiAgICAgIGlmICh0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YSkge1xyXG4gICAgICAgIG1heFZhbHVlID0gdGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEudGFyZ2V0ICsgMjA7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbWF4VmFsdWUgPSAxMDA7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5jdXN0b21Zc2NhbGUpIHtcclxuICAgICAgbWF4VmFsdWUgPSBtYXhWYWx1ZSAqIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmN1c3RvbVlzY2FsZTtcclxuICAgIH1cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEgJiZcclxuICAgICAgbWF4VmFsdWUgPCB0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXRcclxuICAgICkge1xyXG4gICAgICBtYXhWYWx1ZSA9XHJcbiAgICAgICAgbWF4VmFsdWUgPCAxMCAmJiB0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXQgPCAxMFxyXG4gICAgICAgICAgPyB0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXQgKyAzXHJcbiAgICAgICAgICA6IHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLnRhcmdldCArIDIwO1xyXG4gICAgfVxyXG4gICAgeVNjYWxlLmRvbWFpbihbMCwgbWF4VmFsdWVdKS5uaWNlKCk7XHJcblxyXG4gICAgbGV0IHhBeGlzID0gZDNcclxuICAgICAgLmF4aXNCb3R0b20oeFNjYWxlKVxyXG4gICAgICAudGlja1NpemUoMClcclxuICAgICAgLnRpY2tGb3JtYXQoc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ueEF4aXNMYWJlbEZvbWF0dGVyKTtcclxuXHJcbiAgICBsZXQgeUF4aXMgPSBkM1xyXG4gICAgICAuYXhpc0xlZnQoeVNjYWxlKVxyXG4gICAgICAudGlja3Moc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ubnVtYmVyT2ZZVGlja3MpXHJcbiAgICAgIC50aWNrU2l6ZSgwKVxyXG4gICAgICAudGlja0Zvcm1hdChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0xhYmVsRm9tYXR0ZXIpO1xyXG5cclxuICAgIGxldCB5TGluZUF4aXM7XHJcbiAgICBpZiAobGluZVlzY2FsZSAhPSBudWxsKSB7XHJcbiAgICAgIHlMaW5lQXhpcyA9IGQzXHJcbiAgICAgICAgLmF4aXNSaWdodChsaW5lWXNjYWxlKVxyXG4gICAgICAgIC50aWNrcyhzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5udW1iZXJPZllUaWNrcylcclxuICAgICAgICAudGlja1NpemUoMClcclxuICAgICAgICAudGlja0Zvcm1hdChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi55TGluZUF4aXNMYWJlbEZvbWF0dGVyKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogYmV0d2VlbiB4LWF4aXMgbGFiZWwgdXNlZCBieSB3ZWVrbHkgY2hhcnRzXHJcbiAgICAgKiBpc1hncmlkQmV0d2VlbkxhYmVscyB3aWxsIGJlIHVuZGVmaW5lZCBmb3IgZGFzaGJvYXJkIGNoYXJ0c1xyXG4gICAgICovXHJcbiAgICBpZiAoc2VsZi5jaGFydENvbmZpZ3VyYXRpb24uaXNYZ3JpZEJldHdlZW5MYWJlbHMpIHtcclxuICAgICAgc3ZnXHJcbiAgICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2dyaWQnKVxyXG4gICAgICAgIC5hdHRyKFxyXG4gICAgICAgICAgJ3RyYW5zZm9ybScsXHJcbiAgICAgICAgICAndHJhbnNsYXRlKCcgKyB4U2NhbGUuYmFuZHdpZHRoKCkgLyAyICsgJywnICsgaGVpZ2h0ICsgJyknXHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5jYWxsKGQzLmF4aXNCb3R0b20oeFNjYWxlKS50aWNrU2l6ZSgtaGVpZ2h0KS50aWNrRm9ybWF0KCcnKSlcclxuICAgICAgICAuc3R5bGUoJ3N0cm9rZS1kYXNoYXJyYXknLCAnNSA1JylcclxuICAgICAgICAuc3R5bGUoJ2NvbG9yJywgJ3ZhcigtLWNoYXJ0LWdyaWQtY29sb3IsICM5OTk5OTkpJylcclxuICAgICAgICAuY2FsbCgoZykgPT4gZy5zZWxlY3QoJy5kb21haW4nKS5yZW1vdmUoKSk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIHVzZWQgdG8gZHJhdyB5LWF4aXMgZ3JpZFxyXG4gICAgICovXHJcbmlmIChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0dyaWQpIHtcclxuLy8gICBzdmdcclxuLy8gICAgIC5hcHBlbmQoJ2cnKVxyXG4vLyAgICAgLmF0dHIoJ2NsYXNzJywgJ2dyaWQnKVxyXG4vLyAgICAgLmNhbGwoXHJcbi8vICAgICAgIGQzXHJcbi8vICAgICAgICAgLmF4aXNMZWZ0KHlTY2FsZSlcclxuLy8gICAgICAgICAudGlja3Moc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ubnVtYmVyT2ZZVGlja3MpXHJcbi8vICAgICAgICAgLnRpY2tTaXplKC13aWR0aClcclxuLy8gICAgICAgICAudGlja0Zvcm1hdCgnJylcclxuLy8gICAgIClcclxuLy8gICAgIC8vIFJlbW92ZSBoYXJkY29kZWQgY29sb3JzIGFuZCB1c2UgQ1NTIHZhcmlhYmxlc1xyXG4vLyAgICAgLnN0eWxlKCdjb2xvcicsICd2YXIoLS1jaGFydC1ncmlkLWNvbG9yKScpXHJcbi8vICAgICAuc3R5bGUoJ29wYWNpdHknLCAnMScpXHJcbi8vICAgICAvLyAuY2FsbCgoZykgPT4gZy5zZWxlY3QoJy5kb21haW4nKS5yZW1vdmUoKSk7XHJcbn1cclxuXHJcblxyXG4gICAgdmFyIGxheWVyID0gc3ZnXHJcbiAgICAgIC5zZWxlY3RBbGwoJy5sYXllcicpXHJcbiAgICAgIC5kYXRhKGxheWVycylcclxuICAgICAgLmVudGVyKClcclxuICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgIC5hdHRyKCdjbGFzcycsICdsYXllcicpXHJcbiAgICAgIC5zdHlsZSgnZmlsbCcsIGZ1bmN0aW9uIChkLCBpKSB7XHJcbiAgICAgICAgcmV0dXJuIG1ldGFEYXRhLmNvbG9yc1tkLmtleV07XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHZhciByZWN0ID0gbGF5ZXJcclxuICAgICAgLnNlbGVjdEFsbCgncmVjdCcpXHJcbiAgICAgIC5kYXRhKGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgcmV0dXJuIGQ7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5lbnRlcigpO1xyXG5cclxuICAgIHJlY3RcclxuICAgICAgLmFwcGVuZCgncmVjdCcpXHJcbiAgICAgIC5vbignY2xpY2snLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgIGlmICghbGluZURhdGEgfHwgc2VsZi5jaGFydENvbmZpZ3VyYXRpb24uZm9yQ29tcGFyaXNvbikge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAhbWV0YURhdGEuYmFyV2l0aG91dENsaWNrIHx8XHJcbiAgICAgICAgICAgICFtZXRhRGF0YS5iYXJXaXRob3V0Q2xpY2subGVuZ3RoIHx8XHJcbiAgICAgICAgICAgICFtZXRhRGF0YS5iYXJXaXRob3V0Q2xpY2suaW5jbHVkZXMoZC5kYXRhLm5hbWUudG9Mb3dlckNhc2UoKSlcclxuICAgICAgICAgIClcclxuICAgICAgICAgICAgc2VsZi5oYW5kbGVDbGljayhkLmRhdGEubmFtZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICAuYXR0cigneScsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgaWYgKCFpc05hTihkWzBdKSAmJiAhaXNOYU4oZFsxXSkpIHtcclxuICAgICAgICAgIGNvbnN0IGFjdHVhbEhlaWdodCA9IHlTY2FsZShkWzBdKSAtIHlTY2FsZShkWzFdKTtcclxuICAgICAgICAgIHJldHVybiBhY3R1YWxIZWlnaHQgPCAzID8geVNjYWxlKGRbMF0pIC0gMyA6IHlTY2FsZShkWzFdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5hdHRyKCd4JywgZnVuY3Rpb24gKGQsIGkpIHtcclxuICAgICAgICBpZiAoaXNNb2JpbGUpIHtcclxuICAgICAgICAgIC8vIE9uIG1vYmlsZSwgcG9zaXRpb24gYmFycyB3aXRoIHBhZGRpbmdcclxuICAgICAgICAgIHJldHVybiBsZWZ0QW5kUmlnaHRTcGFjZXMgKyBpICogKGJhcldpZHRoICsgYmFyUGFkZGluZyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5pc011bHRpQ2hhcnRHcmlkTGluZSA9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIHJldHVybiB4U2NhbGUoZC5kYXRhLm5hbWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmlzRHJpbGxkb3duQ2hhcnQgJiZcclxuICAgICAgICAgICAgc2VsZi5jaGFydERhdGEuZGF0YS5sZW5ndGggPD0gM1xyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB4U2NhbGUoZC5kYXRhLm5hbWUpICsgeFNjYWxlLmJhbmR3aWR0aCgpIC8gMiAtIDM1O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHhTY2FsZShkLmRhdGEubmFtZSkgKyB4U2NhbGUuYmFuZHdpZHRoKCkgKiAwLjE7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICAuYXR0cignaGVpZ2h0JywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICBpZiAoIWlzTmFOKGRbMF0pICYmICFpc05hTihkWzFdKSkge1xyXG4gICAgICAgICAgY29uc3QgYWN0dWFsSGVpZ2h0ID0geVNjYWxlKGRbMF0pIC0geVNjYWxlKGRbMV0pO1xyXG4gICAgICAgICAgcmV0dXJuIGFjdHVhbEhlaWdodCA8IDMgPyAzIDogYWN0dWFsSGVpZ2h0O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gMDtcclxuICAgICAgfSlcclxuICAgICAgLmF0dHIoJ3dpZHRoJywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAvLyBVc2UgY2FsY3VsYXRlZCBiYXJXaWR0aCBmb3IgbW9iaWxlLCBvdGhlcndpc2Ugc2NhbGVcclxuICAgICAgICBpZiAoaXNNb2JpbGUpIHtcclxuICAgICAgICAgIHJldHVybiBiYXJXaWR0aDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmlzTXVsdGlDaGFydEdyaWRMaW5lID09IHVuZGVmaW5lZFxyXG4gICAgICAgICAgPyB4U2NhbGUuYmFuZHdpZHRoKClcclxuICAgICAgICAgIDogc2VsZi5jaGFydENvbmZpZ3VyYXRpb24uaXNEcmlsbGRvd25DaGFydCAmJlxyXG4gICAgICAgICAgICBzZWxmLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCA8PSAzXHJcbiAgICAgICAgICAgID8gNzBcclxuICAgICAgICAgICAgOiB4U2NhbGUuYmFuZHdpZHRoKCkgKiAwLjg7XHJcbiAgICAgIH0pXHJcbiAgICAgIC8vIC5zdHlsZSgnY3Vyc29yJywgJ3BvaW50ZXInKTtcclxuICAgICAgLnN0eWxlKCdjdXJzb3InLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgIGlmIChtZXRhRGF0YS5oYXNEcmlsbERvd24pIHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgbWV0YURhdGEuYmFyV2l0aG91dENsaWNrLmxlbmd0aCA+IDAgJiZcclxuICAgICAgICAgICAgbWV0YURhdGEuYmFyV2l0aG91dENsaWNrLmluY2x1ZGVzKGQuZGF0YS5uYW1lLnRvTG93ZXJDYXNlKCkpXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgcmV0dXJuICdkZWZhdWx0JztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiAncG9pbnRlcic7XHJcbiAgICAgICAgfSBlbHNlIHJldHVybiAnZGVmYXVsdCc7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5zdHlsZSgnZmlsbCcsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgIWlzTmFOKGRbMF0pICYmXHJcbiAgICAgICAgICAhaXNOYU4oZFsxXSkgJiZcclxuICAgICAgICAgIHNlbGYuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhICYmXHJcbiAgICAgICAgICBwYXJzZUZsb2F0KGRbMV0pIC0gcGFyc2VGbG9hdChkWzBdKSA+PVxyXG4gICAgICAgICAgcGFyc2VGbG9hdChzZWxmLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXQpXHJcbiAgICAgICAgKVxyXG4gICAgICAgICAgcmV0dXJuIHNlbGYuY2hhcnREYXRhPy50YXJnZXRMaW5lRGF0YT8uYmFyQWJvdmVUYXJnZXRDb2xvcjtcclxuXHJcbiAgICAgICAgcmV0dXJuIG1ldGFEYXRhLmNvbG9yc1tkLmtleV07XHJcbiAgICAgIH0pO1xyXG4gICAgLyoqXHJcbiAgICAgKiBkbyBub3Qgc2hvdyB2YWx1cyBvbiBob3ZlciBhcyBpdHMgYWxyZWF5IGRpc2xheWVkXHJcbiAgICAgKi9cclxuICAgIGlmICghdGhpcy5pc0NDICYmICFzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5pc011bHRpQ2hhcnRHcmlkTGluZSkge1xyXG4gICAgICByZWN0XHJcbiAgICAgICAgLmFwcGVuZCgnc3ZnOnRpdGxlJykgLy8gVElUTEUgQVBQRU5ERUQgSEVSRVxyXG4gICAgICAgIC50ZXh0KGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICByZXR1cm4gZFsxXSAtIGRbMF07XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5pc0NDKSB7XHJcbiAgICAgIHJlY3RcclxuICAgICAgICAuYXBwZW5kKCd0ZXh0JylcclxuICAgICAgICAuYXR0cigneCcsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICByZXR1cm4geFNjYWxlKGQuZGF0YS5uYW1lKTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5hdHRyKCd0ZXh0LWFuY2hvcicsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICBpZiAoIWRbMF0pIHtcclxuICAgICAgICAgICAgcmV0dXJuICdlbmQnO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuICdzdGFydCc7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuYXR0cignY2xhc3MnLCAndmVydGljYWxiYXJfX3RleHQnKVxyXG4gICAgICAgIC5hdHRyKCd5JywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgIGlmICghZFswXSkge1xyXG4gICAgICAgICAgICByZXR1cm4geVNjYWxlKGRbMV0pO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHlTY2FsZShkWzFdKSAtIDc7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgICAvLyAuYXR0cihcInlcIiwgZnVuY3Rpb24gKGQpIHsgcmV0dXJuIHlTY2FsZShkWzBdKSAtIHlTY2FsZShkWzFdKTsgfSlcclxuICAgICAgICAuYXR0cignZHknLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgcmV0dXJuIGQuY2xhc3M7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAudGV4dChmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgaWYgKCFkWzBdKSB7XHJcbiAgICAgICAgICAgIGlmICghaXNOYU4oZFsxXSAtIGRbMF0pKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIE1hdGgucm91bmQoKGRbMV0gLSBkWzBdKSAqIDEwMCkgLyAxMDA7XHJcbiAgICAgICAgICAgIH0gZWxzZSByZXR1cm47XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoIWlzTmFOKGRbMV0pKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIE1hdGgucm91bmQoZFsxXSAqIDEwMCkgLyAxMDA7XHJcbiAgICAgICAgICAgIH0gZWxzZSByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgICBzdmdcclxuICAgICAgICAuYXBwZW5kKCdmb3JlaWduT2JqZWN0JylcclxuICAgICAgICAuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgnICsgMCArICcsJyArICh5WmVybyAtIDI1KSArICcpJylcclxuICAgICAgICAuYXR0cignd2lkdGgnLCB3aWR0aClcclxuICAgICAgICAuYXR0cignaGVpZ2h0JywgMzApXHJcbiAgICAgICAgLmFwcGVuZCgneGh0bWw6ZGl2JylcclxuICAgICAgICAuYXR0cignY2xhc3MnLCAndGFyZ2V0LWRpc3BsYXknKVxyXG4gICAgICAgIC5zdHlsZSgnY29sb3InLCB0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS5jb2xvcilcclxuICovXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBvbiBob3ZlciwgZGlzcGxheSB0aXRsZSBvbiB0b3BcclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gaGFuZGxlTW91c2VPdmVyKGQsIGkpIHtcclxuICAgICAgaWYgKCFzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5kaXNwbGF5VGl0bGVPblRvcCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBzdmdcclxuICAgICAgICAuc2VsZWN0QWxsKCdyZWN0JylcclxuICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgICByZXR1cm4gZGF0YSA9PSBkO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLnN0eWxlKCdmaWxsJywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgIWlzTmFOKGRbMF0pICYmXHJcbiAgICAgICAgICAgICFpc05hTihkWzFdKSAmJlxyXG4gICAgICAgICAgICBzZWxmLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YSAmJlxyXG4gICAgICAgICAgICBwYXJzZUZsb2F0KGRbMV0pIC0gcGFyc2VGbG9hdChkWzBdKSA+PVxyXG4gICAgICAgICAgICBwYXJzZUZsb2F0KHNlbGYuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLnRhcmdldClcclxuICAgICAgICAgIClcclxuICAgICAgICAgICAgcmV0dXJuIHNlbGYuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLmJhckFib3ZlVGFyZ2V0SG92ZXJDb2xvclxyXG4gICAgICAgICAgICAgID8gc2VsZi5jaGFydERhdGEudGFyZ2V0TGluZURhdGEuYmFyQWJvdmVUYXJnZXRIb3ZlckNvbG9yXHJcbiAgICAgICAgICAgICAgOiBzZWxmLmNoYXJ0RGF0YT8udGFyZ2V0TGluZURhdGE/LmJhckFib3ZlVGFyZ2V0Q29sb3JcclxuICAgICAgICAgICAgICAgID8gc2VsZi5jaGFydERhdGE/LnRhcmdldExpbmVEYXRhPy5iYXJBYm92ZVRhcmdldENvbG9yXHJcbiAgICAgICAgICAgICAgICA6ICcnO1xyXG5cclxuICAgICAgICAgIHJldHVybiBtZXRhRGF0YS5ob3ZlckNvbG9yID8gbWV0YURhdGEuaG92ZXJDb2xvciA6ICcnO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgc3ZnXHJcbiAgICAgICAgLmFwcGVuZCgnZm9yZWlnbk9iamVjdCcpXHJcbiAgICAgICAgLmF0dHIoJ3gnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICBpZiAoeFNjYWxlLmJhbmR3aWR0aCgpICsgbGVmdEFuZFJpZ2h0U3BhY2VzICogMiA+IDE4MCkge1xyXG4gICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgIHhTY2FsZShkLmRhdGEubmFtZSkgLVxyXG4gICAgICAgICAgICAgIGxlZnRBbmRSaWdodFNwYWNlcyArXHJcbiAgICAgICAgICAgICAgKHhTY2FsZS5iYW5kd2lkdGgoKSArIGxlZnRBbmRSaWdodFNwYWNlcyAqIDIgLSAxODApIC8gMlxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHhTY2FsZShkLmRhdGEubmFtZSkgLSBsZWZ0QW5kUmlnaHRTcGFjZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuYXR0cignY2xhc3MnLCAnbGliLXZlcnRpY2Fsc3RhY2stdGl0bGUtb250b3AnKVxyXG4gICAgICAgIC5hdHRyKCd5JywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgLy8gSW5jcmVhc2UgdGhlIGdhcCBiZXR3ZWVuIHRoZSBiYXIgYW5kIHRoZSB0b29sdGlwICh3YXMgLTEgLSA0MClcclxuICAgICAgICAgIHJldHVybiB5U2NhbGUoZFsxXSkgLSAxIC0gNTA7IC8vIDEwcHggbW9yZSBnYXBcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5hdHRyKCdkeScsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgIHJldHVybiBkLmNsYXNzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmF0dHIoJ3dpZHRoJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAoZC5kYXRhLm5hbWUgJiYgL3dlZWsvaS50ZXN0KGQuZGF0YS5uYW1lKSAmJiAvXFxkezR9LVxcZHsyfS1cXGR7Mn0vLnRlc3QoZC5kYXRhLm5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgcmV0dXJuICcyNTBweCc7IC8vIGluY3JlYXNlIGZvciB3ZWVrICsgZGF0ZVxyXG4gICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHhTY2FsZS5iYW5kd2lkdGgoKSArIGxlZnRBbmRSaWdodFNwYWNlcyAqIDIgPiAxODApIHtcclxuICAgICAgICAgICAgcmV0dXJuICcxODBweCc7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4geFNjYWxlLmJhbmR3aWR0aCgpICsgbGVmdEFuZFJpZ2h0U3BhY2VzICogMjtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5hdHRyKCdoZWlnaHQnLCA0MClcclxuICAgICAgICAuYXBwZW5kKCd4aHRtbDpkaXYnKVxyXG4gICAgICAgIC5hdHRyKCdjbGFzcycsICd0aXRsZScpXHJcbiAgICAgICAgLnN0eWxlKCd6LWluZGV4JywgOTkpXHJcbiAgICAgICAgLmh0bWwoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgLy8gVG9vbHRpcCBjb250ZW50IHdpdGhvdXQgYW55IGFycm93IG1hcmtcclxuICAgICAgICAgIGlmICghaXNOYU4oZFsxXSAtIGRbMF0pKSB7XHJcbiAgICAgICAgICAgIGlmIChkWzFdIC0gZFswXSA9PT0gMCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiAnPHNwYW4gY2xhc3M9XCJ0aXRsZS10b3AtdGV4dFwiPjA8L3NwYW4+JztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgZGF0YVR5cGUgPSBtZXRhRGF0YS5kYXRhVHlwZSA/IG1ldGFEYXRhLmRhdGFUeXBlIDogJyc7XHJcbiAgICAgICAgICAgIHZhciBkZXNpcmVkVGV4dCA9ICcnO1xyXG4gICAgICAgICAgICAvLyBBbHdheXMgc2hvdyB0aGUgZnVsbCB4LWF4aXMgbGFiZWwgKGNhdGVnb3J5IG5hbWUpIGluIHRoZSB0b29sdGlwXHJcbiAgICAgICAgICAgIGRlc2lyZWRUZXh0ID1cclxuICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJ0aXRsZS1iYXItbmFtZVwiPicgK1xyXG4gICAgICAgICAgICAgIChkLmRhdGEubmFtZSA/IGQuZGF0YS5uYW1lIDogJycpICtcclxuICAgICAgICAgICAgICAnPC9zcGFuPic7XHJcblxyXG4gICAgICAgICAgICBkZXNpcmVkVGV4dCArPSBtZXRhRGF0YS51bml0XHJcbiAgICAgICAgICAgICAgPyAnPHNwYW4gY2xhc3M9XCJ0aXRsZS10b3AtdGV4dFwiPicgK1xyXG4gICAgICAgICAgICAgIG1ldGFEYXRhLnVuaXQgK1xyXG4gICAgICAgICAgICAgIChkWzFdIC0gZFswXSkgKyAnICcgK1xyXG4gICAgICAgICAgICAgIGRhdGFUeXBlICtcclxuICAgICAgICAgICAgICAnPC9zcGFuPidcclxuICAgICAgICAgICAgICA6ICc8c3BhbiBjbGFzcz1cInRpdGxlLXRvcC10ZXh0XCI+JyArXHJcbiAgICAgICAgICAgICAgKGRbMV0gLSBkWzBdKSArICcgJyArXHJcbiAgICAgICAgICAgICAgZGF0YVR5cGUgK1xyXG4gICAgICAgICAgICAgICc8L3NwYW4+JztcclxuXHJcbiAgICAgICAgICAgIC8vIE5vIGFycm93IG1hcmsgb3IgYXJyb3cgSFRNTC9DU1MgaW4gdG9vbHRpcFxyXG4gICAgICAgICAgICByZXR1cm4gZGVzaXJlZFRleHQ7XHJcbiAgICAgICAgICB9IGVsc2UgcmV0dXJuO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGhhbmRsZU1vdXNlT3V0KGQsIGkpIHtcclxuICAgICAgaWYgKCFzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5kaXNwbGF5VGl0bGVPblRvcCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICAvLyBzdmcuc2VsZWN0QWxsKCdyZWN0Jykuc3R5bGUoJ2ZpbGwnLCBtZXRhRGF0YS5jb2xvcnNbZC5rZXldKTtcclxuICAgICAgc3ZnLnNlbGVjdEFsbCgncmVjdCcpLnN0eWxlKCdmaWxsJywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAhaXNOYU4oZFswXSkgJiZcclxuICAgICAgICAgICFpc05hTihkWzFdKSAmJlxyXG4gICAgICAgICAgc2VsZi5jaGFydERhdGEudGFyZ2V0TGluZURhdGEgJiZcclxuICAgICAgICAgIHBhcnNlRmxvYXQoZFsxXSkgLSBwYXJzZUZsb2F0KGRbMF0pID49XHJcbiAgICAgICAgICBwYXJzZUZsb2F0KHNlbGYuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLnRhcmdldClcclxuICAgICAgICApXHJcbiAgICAgICAgICByZXR1cm4gc2VsZi5jaGFydERhdGE/LnRhcmdldExpbmVEYXRhPy5iYXJBYm92ZVRhcmdldENvbG9yO1xyXG5cclxuICAgICAgICByZXR1cm4gbWV0YURhdGEuY29sb3JzW2Qua2V5XTtcclxuICAgICAgfSk7XHJcbiAgICAgIHN2Zy5zZWxlY3RBbGwoJy5saWItdmVydGljYWxzdGFjay10aXRsZS1vbnRvcCcpLnJlbW92ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogdXNlZCB0byBzaG93IHZhbHVlIG9uIHRvcCBvZiB0aGUgYmFyc1xyXG4gICAgICogbmVlZCB0byBiZSB1c2VkIGJ5IGJhciBjaGFydHMgb25seShvbmUgYmFyIHNob3VsZCBjb250YWluIG9uZSB2YWx1ZSlcclxuICAgICAqIHVzZWQgYnkgd2Vla2x5IGNoYXJ0c1xyXG4gICAgICovXHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uc2hvd1RvdGFsT25Ub3AgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJlY3RcclxuICAgICAgICAuYXBwZW5kKCd0ZXh0JylcclxuICAgICAgICAuYXR0cigneCcsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICByZXR1cm4geFNjYWxlKGQuZGF0YS5uYW1lKSArIHhTY2FsZS5iYW5kd2lkdGgoKSAvIDI7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuYXR0cignY2xhc3MnLCAnbGliLXZlcnRpY2Fsc3RhY2stbGFiZWxzLW9udG9wLXdla2x5Y2hhcnRzJylcclxuICAgICAgICAuYXR0cigneScsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICByZXR1cm4geVNjYWxlKGRbMV0pIC0gMztcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5hdHRyKCdkeScsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICByZXR1cm4gZC5jbGFzcztcclxuICAgICAgICB9KVxyXG4gICAgICAgIC50ZXh0KGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICBpZiAoIWlzTmFOKGRbMV0gLSBkWzBdKSkge1xyXG4gICAgICAgICAgICBpZiAoZFsxXSAtIGRbMF0gPT0gMCkge1xyXG4gICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZFsxXSAtIGRbMF0gPD0gOTk5KVxyXG4gICAgICAgICAgICAgIHJldHVybiBtZXRhRGF0YS51bml0XHJcbiAgICAgICAgICAgICAgICA/IG1ldGFEYXRhLnVuaXQgKyBmb3JtYXRGcm9tQmFja2VuZChkWzFdIC0gZFswXSlcclxuICAgICAgICAgICAgICAgIDogZm9ybWF0RnJvbUJhY2tlbmQoZFsxXSAtIGRbMF0pO1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgcmV0dXJuIG1ldGFEYXRhLnVuaXRcclxuICAgICAgICAgICAgICAgID8gbWV0YURhdGEudW5pdCArIGZvcm1hdEZvckh1Z2VOdW1iZXJzKGRbMV0gLSBkWzBdKVxyXG4gICAgICAgICAgICAgICAgOiBmb3JtYXRGb3JIdWdlTnVtYmVycyhkWzFdIC0gZFswXSk7XHJcbiAgICAgICAgICB9IGVsc2UgcmV0dXJuO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiB1c2VkIHRvIHNob3cgYW5nbGVkIHZhbHVlcyBvbiB0b3Agb2YgdGhlIGJhcnNcclxuICAgICAqIHVzZWQgYnkgd2Vla2x5IGNoYXJ0c1xyXG4gICAgICovXHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uc2hvd0FuZ2xlZExhYmVscyAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgcmVjdFxyXG4gICAgICAgIC5hcHBlbmQoJ3RleHQnKVxyXG4gICAgICAgIC5hdHRyKCd4JywgMClcclxuICAgICAgICAuYXR0cignZmlsbCcsIGZ1bmN0aW9uIChkLCBpKSB7XHJcbiAgICAgICAgICByZXR1cm4gbWV0YURhdGEuY29sb3JzW2Qua2V5XTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5hdHRyKCdjbGFzcycsICdsaWItZGF0YS1sYWJlbHMtYW5nbGVkLXdlZWtseWNoYXJ0cycpXHJcbiAgICAgICAgLmF0dHIoJ3knLCAwKVxyXG4gICAgICAgIC5hdHRyKCdkeScsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICByZXR1cm4gZC5jbGFzcztcclxuICAgICAgICB9KVxyXG4gICAgICAgIC50ZXh0KGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICBpZiAoIWlzTmFOKGRbMV0gLSBkWzBdKSAmJiBkWzFdIC0gZFswXSA+IDApIHtcclxuICAgICAgICAgICAgaWYgKGRbMV0gLSBkWzBdIDw9IDk5OSlcclxuICAgICAgICAgICAgICByZXR1cm4gbWV0YURhdGEudW5pdFxyXG4gICAgICAgICAgICAgICAgPyBtZXRhRGF0YS51bml0ICsgZm9ybWF0RnJvbUJhY2tlbmQoZFsxXSAtIGRbMF0pXHJcbiAgICAgICAgICAgICAgICA6IGZvcm1hdEZyb21CYWNrZW5kKGRbMV0gLSBkWzBdKTtcclxuICAgICAgICAgICAgZWxzZSByZXR1cm4gbWV0YURhdGEudW5pdCArIGZvcm1hdEZvckh1Z2VOdW1iZXJzKGRbMV0gLSBkWzBdKTtcclxuICAgICAgICAgIH0gZWxzZSByZXR1cm47XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuYXR0cigndHJhbnNmb3JtJywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgIGlmICghaXNOYU4oZFsxXSAtIGRbMF0pICYmIGRbMV0gLSBkWzBdID4gMCkge1xyXG4gICAgICAgICAgICB2YXIgdG90YWwgPSAwO1xyXG4gICAgICAgICAgICB2YXIgaW5jcmVtZW50ZXI6IG51bWJlciA9IDE7XHJcbiAgICAgICAgICAgIG1ldGFEYXRhLmtleUxpc3QuZm9yRWFjaCgoa2V5KSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKGQuZGF0YVtrZXldKSB0b3RhbCA9IHRvdGFsICsgZC5kYXRhW2tleV07XHJcbiAgICAgICAgICAgICAgZWxzZSBpbmNyZW1lbnRlciA9IDI7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBpZiAodGVtcE9iamVjdEhvbGRlcltkLmRhdGEubmFtZV0gPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgdGVtcE9iamVjdEhvbGRlcltkLmRhdGEubmFtZV0gPSAxO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRlbXBPYmplY3RIb2xkZXJbZC5kYXRhLm5hbWVdID1cclxuICAgICAgICAgICAgICAgIHRlbXBPYmplY3RIb2xkZXJbZC5kYXRhLm5hbWVdICsgaW5jcmVtZW50ZXI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc3dpdGNoICh0ZW1wT2JqZWN0SG9sZGVyW2QuZGF0YS5uYW1lXSkge1xyXG4gICAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICAgICd0cmFuc2xhdGUoJyArXHJcbiAgICAgICAgICAgICAgICAgICh4U2NhbGUoZC5kYXRhLm5hbWUpICsgeFNjYWxlLmJhbmR3aWR0aCgpIC8gMykgK1xyXG4gICAgICAgICAgICAgICAgICAnLCcgK1xyXG4gICAgICAgICAgICAgICAgICAoeVNjYWxlKHRvdGFsKSAtIDMpICtcclxuICAgICAgICAgICAgICAgICAgJykgcm90YXRlKDI3MCknXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICAgICd0cmFuc2xhdGUoJyArXHJcbiAgICAgICAgICAgICAgICAgICh4U2NhbGUoZC5kYXRhLm5hbWUpICsgeFNjYWxlLmJhbmR3aWR0aCgpIC8gMiArIDIpICtcclxuICAgICAgICAgICAgICAgICAgJywnICtcclxuICAgICAgICAgICAgICAgICAgKHlTY2FsZSh0b3RhbCkgLSAzKSArXHJcbiAgICAgICAgICAgICAgICAgICcpIHJvdGF0ZSgyNzApJ1xyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgICAgJ3RyYW5zbGF0ZSgnICtcclxuICAgICAgICAgICAgICAgICAgKHhTY2FsZShkLmRhdGEubmFtZSkgKyAoeFNjYWxlLmJhbmR3aWR0aCgpICogMykgLyA0KSArXHJcbiAgICAgICAgICAgICAgICAgICcsJyArXHJcbiAgICAgICAgICAgICAgICAgICh5U2NhbGUodG90YWwpIC0gMykgK1xyXG4gICAgICAgICAgICAgICAgICAnKSByb3RhdGUoMjcwKSdcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiAncm90YXRlKDApJztcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzTXVsdGlDaGFydEdyaWRMaW5lID09IHVuZGVmaW5lZCkge1xyXG4gIGlmIChpc01vYmlsZSkge1xyXG4gICAgLy8gQ3VzdG9tIHgtYXhpcyBsYWJlbCByZW5kZXJpbmcgZm9yIG1vYmlsZTogZXZlbmx5IGRpc3RyaWJ1dGUgdW5kZXIgZWFjaCBiYXJcclxuICAgIHN2Zy5zZWxlY3RBbGwoJy5jdXN0b20teC1sYWJlbCcpLnJlbW92ZSgpO1xyXG4gICAgZGF0YS5mb3JFYWNoKGZ1bmN0aW9uIChkLCBpKSB7XHJcbiAgICAgIGNvbnN0IHhWYWwgPSBsZWZ0QW5kUmlnaHRTcGFjZXMgKyBpICogKGJhcldpZHRoICsgYmFyUGFkZGluZykgKyBiYXJXaWR0aCAvIDI7XHJcbiAgICAgIHN2Zy5hcHBlbmQoJ3RleHQnKVxyXG4gICAgICAgIC5hdHRyKCdjbGFzcycsICdjdXN0b20teC1sYWJlbCcpXHJcbiAgICAgICAgLmF0dHIoJ3gnLCAwKVxyXG4gICAgICAgIC5hdHRyKCd5JywgaGVpZ2h0ICsgMTgpXHJcbiAgICAgICAgLmF0dHIoJ3RleHQtYW5jaG9yJywgJ21pZGRsZScpXHJcbiAgICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoJyArICh4VmFsICsgMjApICsgJywwKScpIC8vIGN1cnJlbnQgdmFsdWUgKyAyMFxyXG4gICAgICAgIC5zdHlsZSgnZm9udC1zaXplJywgJzEwcHgnKVxyXG4gICAgICAgIC5zdHlsZSgnZmlsbCcsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpXHJcbiAgICAgICAgLnN0eWxlKCd3cml0aW5nLW1vZGUnLCAnc2lkZXdheXMtbHInKSAvLyB3cml0aW5nIG1vZGUgZm9yIG1vYmlsZVxyXG4gICAgICAgIC50ZXh0KGQubmFtZS5zdWJzdHJpbmcoMCwgMykpO1xyXG4gICAgfSk7XHJcbiAgfSBlbHNlIHtcclxuICAgIHN2Z1xyXG4gICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoMCwnICsgaGVpZ2h0ICsgJyknKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnbGliLXN0YWNrZWQteC1heGlzLXRleHQnKVxyXG4gICAgICAuY2FsbCh4QXhpcylcclxuICAgICAgLnNlbGVjdEFsbCgndGV4dCcpXHJcbiAgICAgIC5zdHlsZSgnZmlsbCcsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpXHJcbiAgICAgIC5zdHlsZSgnZm9udC1zaXplJywgJzEycHgnKVxyXG4gICAgICAuYXR0cigndGV4dC1hbmNob3InLCAnbWlkZGxlJylcclxuICAgICAgLmF0dHIoJ2R4JywgJzAnKVxyXG4gICAgICAuYXR0cignZHknLCAnMC43MWVtJylcclxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIG51bGwpXHJcbiAgICAgIC50ZXh0KGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgcmV0dXJuIGQ7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc3ZnXHJcbiAgICAuYXBwZW5kKCdnJylcclxuICAgIC5hdHRyKCdjbGFzcycsICdsaWItc3RhY2tlZC15LWF4aXMtdGV4dCcpXHJcbiAgICAuYXR0cignc3R5bGUnLCBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0N1c3RvbVRleHRTdHlsZXMpXHJcbiAgICAuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgwLDApJylcclxuICAgIC5jYWxsKHlBeGlzKVxyXG4gICAgLnNlbGVjdEFsbCgndGV4dCcpXHJcbiAgLnN0eWxlKCdmaWxsJywgJ3ZhcigtLWNoYXJ0LXRleHQtY29sb3IpJyk7XHJcbn1lbHNlIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0RyaWxsZG93bkNoYXJ0KSB7XHJcbiAgc3ZnXHJcbiAgICAuYXBwZW5kKCdnJylcclxuICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKDAsJyArIGhlaWdodCArICcpJylcclxuICAgIC5hdHRyKCdjbGFzcycsICdsaWItc3RhY2tlZC14LWF4aXMtdGV4dCBtdWx0aWNoYXJ0MScpXHJcbiAgICAuY2FsbCh4QXhpcylcclxuICAgIC5zdHlsZSgnZGlzcGxheScsICdub25lJylcclxuXHJcbiAgc3ZnWUF4aXNMZWZ0XHJcbiAgICAuYXBwZW5kKCdnJylcclxuICAgIC5hdHRyKCdjbGFzcycsICdsaWIteWF4aXMtbGFiZWxzLXRleHRzLWRyaWxsZG93biB5YXhpcy1kYXNoZWQnKVxyXG4gICAgLmF0dHIoJ3N0eWxlJywgc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ueUF4aXNDdXN0b21UZXh0U3R5bGVzKVxyXG4gICAgLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoMCwwKScpXHJcbiAgICAuY2FsbCh5QXhpcylcclxuICAgICAgLnNlbGVjdEFsbCgndGV4dCcpXHJcbiAgLnN0eWxlKCdmaWxsJywgJ3ZhcigtLWNoYXJ0LXRleHQtY29sb3IpJyk7XHJcbiAgICBcclxuICBzdmdZQXhpc1JpZ2h0XHJcbiAgICAuYXBwZW5kKCdnJylcclxuICAgIC5hdHRyKCdjbGFzcycsICdsaWIteWF4aXMtbGFiZWxzLXRleHRzLWRyaWxsZG93biB5YXhpcy1kYXNoZWQnKVxyXG4gICAgLmF0dHIoJ3N0eWxlJywgc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ueUF4aXNDdXN0b21UZXh0U3R5bGVzKVxyXG4gICAgLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoMCwwKScpXHJcbiAgICAuY2FsbCh5QXhpcylcclxuICAgIC5zdHlsZSgnZGlzcGxheScsICdub25lJylcclxufVxyXG5lbHNlIHtcclxuICBzdmdcclxuICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoMCwnICsgaGVpZ2h0ICsgJyknKVxyXG4gICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi1zdGFja2VkLXgtYXhpcy10ZXh0IG11bHRpY2hhcnQnKVxyXG4gICAgLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoMCwnICsgaGVpZ2h0ICsgJyknKVxyXG4gICAgLmNhbGwoeEF4aXMpXHJcbiAgICAuc2VsZWN0QWxsKCd0ZXh0JylcclxuICAuc3R5bGUoJ2ZpbGwnLCAndmFyKC0tY2hhcnQtdGV4dC1jb2xvciknKTtcclxuXHJcbiAgc3ZnXHJcbiAgICAuYXBwZW5kKCdnJylcclxuICAgIC5hdHRyKCdjbGFzcycsICdsaWItc3RhY2tlZC15LWF4aXMtdGV4dCB5YXhpcy1kYXNoZWQnKVxyXG4gICAgLmF0dHIoJ3N0eWxlJywgc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ueUF4aXNDdXN0b21UZXh0U3R5bGVzKVxyXG4gICAgLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoMCwwKScpXHJcbiAgICAuY2FsbCh5QXhpcylcclxuICAgICAgLnNlbGVjdEFsbCgndGV4dCcpXHJcbiAgLnN0eWxlKCdmaWxsJywgJ3ZhcigtLWNoYXJ0LXRleHQtY29sb3IpJyk7XHJcbn1cclxuICAgIC8qKlxyXG4gICAgICogZm9yIGV4aXN0aW5nIGNoYXJ0cywgcGxhY2UgeGF4aXMgbGFiZWxzIG5lYXJlciB0byB4YXhpc1xyXG4gICAgICogdXNlZCBieSBleGlzdGluZyBjaGFydHNcclxuICAgICAqL1xyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzTXVsdGlDaGFydEdyaWRMaW5lID09IHVuZGVmaW5lZCkge1xyXG4gICAgICBkMy5zZWxlY3RBbGwoJ2cubGliLXN0YWNrZWQteC1heGlzLXRleHQgZy50aWNrIHRleHQnKS5hdHRyKFxyXG4gICAgICAgICd5JyxcclxuICAgICAgICBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICBpZiAoYWx0ZXJuYXRlX3RleHQpIHtcclxuICAgICAgICAgICAgYWx0ZXJuYXRlX3RleHQgPSBmYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuIGxvbmdfdGlja19sZW5ndGggKyAxO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgYWx0ZXJuYXRlX3RleHQgPSB0cnVlO1xyXG4gICAgICAgICAgICByZXR1cm4gc2hvcnRfdGlja19sZW5ndGggKyAxO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGQzLnNlbGVjdEFsbCgnLm11bHRpY2hhcnQgPiBnID4gdGV4dCcpLmF0dHIoXHJcbiAgICAgICAgJ2NsYXNzJyxcclxuICAgICAgICAnbGliLWRpc3BsYXktaGlkZGVuJ1xyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBiYXNlZCBvZiB0aGUgZmxhZywgaGlkZSBvciBzaG93IHhheGlzIHRleHRzXHJcbiAgICAgKiB1c2VkIGJ5IHdlZWtseSBjaGFydHNcclxuICAgICAqL1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1hheGlzTGFiZWxIaWRkZW4gIT0gdW5kZWZpbmVkICYmXHJcbiAgICAgIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzWGF4aXNMYWJlbEhpZGRlblxyXG4gICAgKSB7XHJcbiAgICAgIGQzLnNlbGVjdEFsbCgnLm11bHRpY2hhcnQgPiBnID4gdGV4dCcpLmF0dHIoXHJcbiAgICAgICAgJ2NsYXNzJyxcclxuICAgICAgICAnbGliLWRpc3BsYXktaGlkZGVuJ1xyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1hheGlzTGFiZWxIaWRkZW4gIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHN2Z1xyXG4gICAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAgIC5hdHRyKCdjbGFzcycsICd4MSBheGlzMScpXHJcbiAgICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoMCwnICsgaGVpZ2h0ICsgJyknKVxyXG4gICAgICAgIC5zdHlsZSgnY29sb3InLCAnIzAwMCcpXHJcblxyXG4gICAgICAgIC5jYWxsKGQzLmF4aXNCb3R0b20oeFNjYWxlKS50aWNrU2l6ZSgwKSlcclxuICAgICAgICAuY2FsbCgoZykgPT4gZy5zZWxlY3QoJy5kb21haW4nKS5hdHRyKCdmaWxsJywgJ25vbmUnKSk7XHJcbiAgICAgIHN2Z1xyXG4gICAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAgIC5hdHRyKCdjbGFzcycsICd4MiBheGlzMicpXHJcbiAgICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoMCwnICsgaGVpZ2h0ICsgJyknKVxyXG4gICAgICAgIC5zdHlsZSgnY29sb3InLCAnIzAwMCcpXHJcblxyXG4gICAgICAgIC5jYWxsKGQzLmF4aXNCb3R0b20oeFNjYWxlRnJvbU9yaWdpbikudGlja1NpemUoMCkpXHJcbiAgICAgICAgLmNhbGwoKGcpID0+IGcuc2VsZWN0KCcuZG9tYWluJykuYXR0cignZmlsbCcsICdub25lJykpO1xyXG4gICAgICBzdmcuc2VsZWN0QWxsKCcuYXhpczIgPiBnID4gdGV4dCcpLmF0dHIoJ2NsYXNzJywgJ2xpYi1kaXNwbGF5LWhpZGRlbicpO1xyXG4gICAgICAvLyBzdmcuc2VsZWN0QWxsKCdnLngyLmF4aXMyIGcudGljayB0ZXh0Jykuc3R5bGUoJ2Rpc3BsYXknLCAnbm9uZScpO1xyXG4gICAgICBzdmcuc2VsZWN0QWxsKCcueDEuYXhpczEgLnRpY2sgbGluZScpLmF0dHIoJ3kyJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmIChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5oaWRlWGF4aXNUaWNrKSB7XHJcbiAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogaXNOb0FsdGVybmF0ZVhheGlzVGV4dCBpcyB1c2VkIHRvIHByZXZlbnQgeC1heGlzIGxhYmVsIHRvIGJlIGRpc3BsYXllZCBpbiBhbHRlcm5hdGUgZmFzaGlvblxyXG4gICAgICAgICAqIGZvciBmdXR1cmUgdXNlXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgYWx0ZXJuYXRlX3RleHQgJiZcclxuICAgICAgICAgIHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmlzTm9BbHRlcm5hdGVYYXhpc1RleHQgPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBhbHRlcm5hdGVfdGV4dCA9IGZhbHNlO1xyXG4gICAgICAgICAgcmV0dXJuIGxvbmdfdGlja19sZW5ndGhfYmcgLSA3O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBhbHRlcm5hdGVfdGV4dCA9IHRydWU7XHJcbiAgICAgICAgICByZXR1cm4gc2hvcnRfdGlja19sZW5ndGhfYmcgLSA0O1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiByZXNldCB0aGUgZmxhZyBzbyB0aGF0IHRleHRzIGFsc28gZm9sbG93IHRoZSBwYXR0ZXJuIG9mIHRpY2tzXHJcbiAgICAgICAqIHVzZWQgYnkgd2Vla2x5IGNoYXJ0c1xyXG4gICAgICAgKi9cclxuICAgICAgYWx0ZXJuYXRlX3RleHQgPSBmYWxzZTtcclxuICAgICAgc3ZnXHJcbiAgICAgICAgLnNlbGVjdEFsbCgnZy54MS5heGlzMSBnLnRpY2sgdGV4dCcpXHJcbiAgICAgICAgLy8gLmF0dHIoJ2NsYXNzJywgJ2xpYi14YXhpcy1sYWJlbHMtdGV4dHMtd2Vla2x5Y2hhcnRzJylcclxuICAgICAgICAuYXR0cignY2xhc3MnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICBpZiAoc2VsZi5jaGFydENvbmZpZ3VyYXRpb24uaXNEcmlsbGRvd25DaGFydCkge1xyXG4gICAgICAgICAgICBpZiAoZGF0YSAmJiBkYXRhLmxlbmd0aCA+IDgpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gJ2xpYi14YXhpcy1sYWJlbHMtdGV4dHMtZHJpbGxkb3duLWFsdCc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuICdsaWIteGF4aXMtbGFiZWxzLXRleHRzLWRyaWxsZG93bic7XHJcbiAgICAgICAgICB9IGVsc2UgcmV0dXJuICdsaWIteGF4aXMtbGFiZWxzLXRleHRzLXdlZWtseWNoYXJ0cyc7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuYXR0cigneScsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgIGlmIChhbHRlcm5hdGVfdGV4dCkge1xyXG4gICAgICAgICAgICBhbHRlcm5hdGVfdGV4dCA9IGZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm4gbG9uZ190aWNrX2xlbmd0aF9iZztcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGFsdGVybmF0ZV90ZXh0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgcmV0dXJuIHNob3J0X3RpY2tfbGVuZ3RoX2JnO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnhMYWJlbHNPblNhbWVMaW5lKSB7XHJcbiAgICAgIHN2Z1xyXG4gICAgICAgIC5zZWxlY3RBbGwoJ2cueDEuYXhpczEgZy50aWNrIHRleHQnKVxyXG4gICAgICAgIC5hdHRyKCdjbGFzcycsICdsaWIteGF4aXMtbGFiZWxzLXRleHRzLWRyaWxsZG93bicpXHJcbiAgICAgICAgLmF0dHIoJ3knLCBzaG9ydF90aWNrX2xlbmd0aF9iZylcclxuICAgICAgICAudGV4dChmdW5jdGlvbiAoZCwgaSkge1xyXG4gICAgICAgICAgaWYgKGlzTW9iaWxlKSB7XHJcbiAgICAgICAgICAgIC8vIElmIGxhYmVsIGhhcyBtb3JlIHRoYW4gb25lIHdvcmQsIHNob3cgb25seSBmaXJzdCAzIGxldHRlcnMgb2YgZmlyc3Qgd29yZFxyXG4gICAgICAgICAgICB2YXIgZmlyc3RXb3JkID0gZC5zcGxpdCgnICcpWzBdO1xyXG4gICAgICAgICAgICByZXR1cm4gZmlyc3RXb3JkLnN1YnN0cmluZygwLCAzKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChkLnRyaW0oKS5pbmRleE9mKCcgJykgPiAtMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZC50cmltKCkuc3Vic3RyaW5nKDAsIGQuaW5kZXhPZignICcpKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIGQudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBmdW5jdGlvbih0aGlzOiBTVkdUZXh0RWxlbWVudCwgZCwgaSkge1xyXG4gICAgICAgICAgaWYgKGlzTW9iaWxlKSB7XHJcbiAgICAgICAgICAgIHZhciB0b3RhbEJhcnMgPSAwO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5wYXJlbnROb2RlICYmIHRoaXMucGFyZW50Tm9kZS5wYXJlbnROb2RlKSB7XHJcbiAgICAgICAgICAgICAgdG90YWxCYXJzID0gZDMuc2VsZWN0KHRoaXMucGFyZW50Tm9kZS5wYXJlbnROb2RlKS5zZWxlY3RBbGwoJ2cudGljaycpLnNpemUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodG90YWxCYXJzID09PSAyKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuICd0cmFuc2xhdGUoMCwwKSc7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuICd0cmFuc2xhdGUoJyArIChpICogMzApICsgJywwKSc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICBzdmdcclxuICAgICAgICAuc2VsZWN0QWxsKCdnLngxLmF4aXMxIGcudGljaycpXHJcbiAgICAgICAgLmFwcGVuZCgndGV4dCcpXHJcbiAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi14YXhpcy1sYWJlbHMtdGV4dHMtZHJpbGxkb3duJylcclxuICAgICAgICAuYXR0cigneScsIGxvbmdfdGlja19sZW5ndGhfYmcpXHJcbiAgICAgICAgLmF0dHIoJ2ZpbGwnLCAnY3VycmVudENvbG9yJylcclxuICAgICAgICAudGV4dChmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgLy8gRm9yIG1vYmlsZSwgZG8gbm90IHByaW50IHRoZSBzZWNvbmQgd29yZCBhdCBhbGxcclxuICAgICAgICAgIGlmIChpc01vYmlsZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoZC50cmltKCkuaW5kZXhPZignICcpID4gLTEpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGQudHJpbSgpLnN1YnN0cmluZyhkLmluZGV4T2YoJyAnKSwgZC5sZW5ndGgpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuYXR0cigndHJhbnNmb3JtJywgZnVuY3Rpb24oZCwgaSkge1xyXG4gICAgICAgICAgaWYgKGlzTW9iaWxlICYmIGkgPT09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuICd0cmFuc2xhdGUoMjAsMCknO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIGhpZGUgeWF4aXMgdmFsdWVzXHJcbiAgICAgKiB1c2VkIGJ5IHdlZWtseSBjaGFydHNcclxuICAgICAqL1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1lheGlzTGFiZWxIaWRkZW4gIT0gdW5kZWZpbmVkICYmXHJcbiAgICAgIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzWWF4aXNMYWJlbEhpZGRlblxyXG4gICAgKSB7XHJcbiAgICAgIHN2Z1xyXG4gICAgICAgIC5zZWxlY3RBbGwoJy55YXhpcy1kYXNoZWQgPiBnID4gdGV4dCcpXHJcbiAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi1kaXNwbGF5LWhpZGRlbicpO1xyXG4gICAgfVxyXG4gICAgLyoqIGhpZGUgeSBheGlzIGxhYmVsc1xyXG4gICAgICogY29uZmlnIGlzIHRoZXJlIGZvciBmdXR1cmUgdXNlXHJcbiAgICAgKi9cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNZYXhpc0hpZGRlbiAhPSB1bmRlZmluZWQgJiZcclxuICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNZYXhpc0hpZGRlblxyXG4gICAgKSB7XHJcbiAgICAgIGQzLnNlbGVjdEFsbCgnLnlheGlzLWRhc2hlZCcpLmF0dHIoJ2NsYXNzJywgJ2xpYi1kaXNwbGF5LWhpZGRlbicpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBkYXNoZWQgeSBheGlzXHJcbiAgICAgKiB1c2VkIGJ5IHdlZWtseSBjaGFydHNcclxuICAgICAqL1xyXG5pZiAoXHJcbiAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNZYXhpc0Rhc2hlZCAhPSB1bmRlZmluZWQgJiZcclxuICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1lheGlzRGFzaGVkXHJcbikge1xyXG4gIGQzLnNlbGVjdEFsbCgnLnlheGlzLWRhc2hlZCcpXHJcbiAgICAuc3R5bGUoJ3N0cm9rZS1kYXNoYXJyYXknLCAnNSA1JylcclxuICAgIC5zdHlsZSgnY29sb3InLCAndmFyKC0tY2hhcnQtZ3JpZC1jb2xvciknKTsgLy8gVXNlIENTUyB2YXJpYWJsZVxyXG59XHJcbiAgICAvKipcclxuICAgICAqIHggYXhpcyBjb2xvclxyXG4gICAgICogdXNlZCBieSB3ZWVrbHkgY2hhcnRzXHJcbiAgICAgKi9cclxuaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzWGF4aXNDb2xvciAhPSB1bmRlZmluZWQpIHtcclxuICBkMy5zZWxlY3RBbGwoJy5tdWx0aWNoYXJ0Jykuc3R5bGUoXHJcbiAgICAnY29sb3InLFxyXG4gICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNYYXhpc0NvbG9yIHx8ICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKSdcclxuICApO1xyXG59XHJcbiAgICAvKipcclxuICAgICAqIHVzZWQgdG8gZGlzcGxheSB5IGxhYmVsXHJcbiAgICAgKi9cclxuaWYgKHRoaXMuaXNab29tZWRPdXQgJiYgdGhpcy5jaGFydERhdGEuZGF0YS5sZW5ndGggPiA4KSB7XHJcbiAgc3ZnXHJcbiAgICAuc2VsZWN0QWxsKCcubGliLXhheGlzLWxhYmVscy10ZXh0cy1kcmlsbGRvd24nKVxyXG4gICAgLmF0dHIoJ3RyYW5zZm9ybScsICdyb3RhdGUoLTkwKScpXHJcbiAgICAuYXR0cigndGV4dC1hbmNob3InLCAnZW5kJylcclxuICAgIC5hdHRyKCd4JywgJy01JylcclxuICAgIC5hdHRyKCdkeScsIG51bGwpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBzdHlsZUF4aXNEb21haW4oKSB7XHJcbiAgc3ZnLnNlbGVjdEFsbCgnLmRvbWFpbicpXHJcbiAgICAuc3R5bGUoJ3N0cm9rZScsICd2YXIoLS1jaGFydC1heGlzLWNvbG9yKScpXHJcbiAgICAuc3R5bGUoJ3N0cm9rZS13aWR0aCcsICcxcHgnKTtcclxuICBcclxuICBzdmdZQXhpc0xlZnQuc2VsZWN0QWxsKCcuZG9tYWluJylcclxuICAgIC5zdHlsZSgnc3Ryb2tlJywgJ3ZhcigtLWNoYXJ0LWF4aXMtY29sb3IpJylcclxuICAgIC5zdHlsZSgnc3Ryb2tlLXdpZHRoJywgJzFweCcpO1xyXG4gICAgXHJcbiAgc3ZnWUF4aXNSaWdodC5zZWxlY3RBbGwoJy5kb21haW4nKVxyXG4gICAgLnN0eWxlKCdzdHJva2UnLCAndmFyKC0tY2hhcnQtYXhpcy1jb2xvciknKVxyXG4gICAgLnN0eWxlKCdzdHJva2Utd2lkdGgnLCAnMXB4Jyk7XHJcbn1cclxuXHJcbnN0eWxlQXhpc0RvbWFpbigpO1xyXG5cclxuICAgIGlmIChtZXRhRGF0YS55TGFiZWwpIHtcclxuICAgICAgc3ZnWUF4aXNMZWZ0LnNlbGVjdEFsbCgnLmxpYi1heGlzLWdyb3VwLWxhYmVsLCAubGliLXlsYWJlbC1kcmlsbGRvd25jaGFydHMsIC5saWIteWxhYmVsLXdlZWtseUNoYXJ0cycpLnJlbW92ZSgpO1xyXG4gICAgICBmdW5jdGlvbiBpc0Fjcm9ueW0obGFiZWwpIHtcclxuICAgICAgICByZXR1cm4gKGxhYmVsLmxlbmd0aCA8PSA0ICYmIC9eW0EtWl0rJC8udGVzdChsYWJlbCkpIHx8IChsYWJlbCA9PT0gbGFiZWwudG9VcHBlckNhc2UoKSAmJiAvW0EtWl0vLnRlc3QobGFiZWwpKTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCB5TGFiZWxUZXh0ID0gbWV0YURhdGEueUxhYmVsO1xyXG4gICAgICBjb25zdCBpc0FjciA9IGlzQWNyb255bSh5TGFiZWxUZXh0LnJlcGxhY2UoL1teQS1aYS16XS9nLCAnJykpO1xyXG5cclxuICAgICBjb25zdCB5UG9zaXRpb24gPSBpc3JpYSA/IDAgLSBtYXJnaW4ubGVmdCAvIDIgLSAzMCA6IDAgLSBtYXJnaW4ubGVmdCAvIDIgLSA0MDtcclxuXHJcbiAgICAgIHN2Z1lBeGlzTGVmdFxyXG4gICAgICAgIC5hcHBlbmQoJ3RleHQnKVxyXG5cclxuICAgICAgICAgICAgICAgIC5hdHRyKCdjbGFzcycsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgIGxldCBiYXNlQ2xhc3MgPSAnbGliLWF4aXMtZ3JvdXAtbGFiZWwgZm9udC1zaXplLTEnO1xyXG4gICAgICAgICAgaWYgKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmlzRHJpbGxkb3duQ2hhcnQpXHJcbiAgICAgICAgICAgIHJldHVybiBiYXNlQ2xhc3MgKyAnIGxpYi15bGFiZWwtZHJpbGxkb3duY2hhcnRzJztcclxuICAgICAgICAgIGlmIChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5pc011bHRpQ2hhcnRHcmlkTGluZSAhPSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgIHJldHVybiBiYXNlQ2xhc3MgKyAnIGxpYi15bGFiZWwtd2Vla2x5Q2hhcnRzJztcclxuICAgICAgICAgIHJldHVybiBiYXNlQ2xhc3MgKyAnIGxpYi1heGlzLXdhdGVyZmFsbC1sYWJlbCc7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuYXR0cignc3R5bGUnLCBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0N1c3RvbWxhYmVsU3R5bGVzKVxyXG4gICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAncm90YXRlKC05MCknKVxyXG4gICAgICAgIC5hdHRyKCd5JywgeVBvc2l0aW9uKVxyXG4gICAgICAgIC5hdHRyKCd4JywgMCAtIGhlaWdodCAvIDIpXHJcbiAgICAgICAgLmF0dHIoJ2R5JywgJzFlbScpXHJcbiAgICAgICAgLnN0eWxlKCd0ZXh0LWFuY2hvcicsICdtaWRkbGUnKVxyXG4gICAgICAgIC5zdHlsZSgnZmlsbCcsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpXHJcbiAgICAgICAgLnN0eWxlKCdjb2xvcicsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpXHJcbiAgICAgICAgLnRleHQoaXNBY3IgPyB5TGFiZWxUZXh0LnRvVXBwZXJDYXNlKCkgOiB5TGFiZWxUZXh0LnRvTG93ZXJDYXNlKCkpXHJcbiAgICAgICAgLnN0eWxlKCd0ZXh0LXRyYW5zZm9ybScsIGlzQWNyID8gJ25vbmUnIDogJ2NhcGl0YWxpemUnKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YSkge1xyXG4gICAgICBjb25zdCB5WmVybyA9IHlTY2FsZShwYXJzZWROdW0pO1xyXG4gICAgICBzdmdcclxuICAgICAgICAuYXBwZW5kKCdsaW5lJylcclxuICAgICAgICAuYXR0cigneDEnLCAwKVxyXG4gICAgICAgIC5hdHRyKCd4MicsIHdpZHRoKVxyXG4gICAgICAgIC5hdHRyKCd5MScsIHlaZXJvKVxyXG4gICAgICAgIC5hdHRyKCd5MicsIHlaZXJvKVxyXG4gICAgICAgIC5zdHlsZSgnc3Ryb2tlLWRhc2hhcnJheScsICc1IDUnKVxyXG4gICAgICAgIC5zdHlsZSgnc3Ryb2tlJywgdGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEuY29sb3IpO1xyXG4gICAgICAvLyBzdmdZQXhpc1JpZ2h0XHJcbiAgICAgIC8vICAgLmFwcGVuZCgnbGluZScpXHJcbiAgICAgIC8vICAgLmF0dHIoJ3gxJywgMClcclxuICAgICAgLy8gICAuYXR0cigneDInLCByaWdodFN2Z1dpZHRoKVxyXG4gICAgICAvLyAgIC5hdHRyKCd5MScsIHlaZXJvKVxyXG4gICAgICAvLyAgIC5hdHRyKCd5MicsIHlaZXJvKVxyXG4gICAgICAvLyAgIC5zdHlsZSgnc3Ryb2tlJywgdGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEuY29sb3IpO1xyXG4gICAgICBzdmdZQXhpc1JpZ2h0XHJcbiAgICAgICAgLmFwcGVuZCgnZm9yZWlnbk9iamVjdCcpXHJcbiAgICAgICAgLy8gLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoJyArIDAgKyAnLCcgKyAoeVplcm8gLSAzMCkgKyAnKScpXHJcbiAgICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoJyArIDAgKyAnLCcgKyAoeVplcm8gLSAxMykgKyAnKScpXHJcbiAgICAgICAgLmF0dHIoJ3dpZHRoJywgcmlnaHRTdmdXaWR0aClcclxuICAgICAgICAuYXR0cignaGVpZ2h0JywgNTApXHJcbiAgICAgICAgLmFwcGVuZCgneGh0bWw6ZGl2JylcclxuICAgICAgICAuYXR0cignY2xhc3MnLCAndGFyZ2V0LWRpc3BsYXknKVxyXG4gICAgICAgIC5zdHlsZSgnY29sb3InLCAndmFyKC0tY2hhcnQtdGV4dC1jb2xvciknKVxyXG5cclxuICAgICAgICAuaHRtbChmdW5jdGlvbiAoZCwgaSkge1xyXG4gICAgICAgICAgbGV0IGRhdGFUeXBlVGVtcCA9ICcnO1xyXG4gICAgICAgICAgbGV0IHRhcmdldExpbmVOYW1lID0gJ3RhcmdldCc7XHJcbiAgICAgICAgICBpZiAobWV0YURhdGEuZGF0YVR5cGUpIHtcclxuICAgICAgICAgICAgZGF0YVR5cGVUZW1wID0gbWV0YURhdGEuZGF0YVR5cGU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHNlbGYuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhICYmXHJcbiAgICAgICAgICAgIHNlbGYuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLnRhcmdldE5hbWVcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICB0YXJnZXRMaW5lTmFtZSA9IHNlbGYuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLnRhcmdldE5hbWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICBgPGRpdj4ke3RhcmdldExpbmVOYW1lfTwvZGl2PmAgK1xyXG4gICAgICAgICAgICAnPGRpdj4nICtcclxuICAgICAgICAgICAgc2VsZi5jaGFydERhdGEudGFyZ2V0TGluZURhdGEudGFyZ2V0ICtcclxuICAgICAgICAgICAgJycgK1xyXG4gICAgICAgICAgICBkYXRhVHlwZVRlbXAgK1xyXG4gICAgICAgICAgICAnPC9kaXY+J1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHJlY3RcclxuICAgICAgLnNlbGVjdEFsbCgncmVjdCcpXHJcbiAgICAgIC5vbignbW91c2VlbnRlcicsIGhhbmRsZU1vdXNlT3ZlcilcclxuICAgICAgLm9uKCdtb3VzZW91dCcsIGhhbmRsZU1vdXNlT3V0KTtcclxuICAgIGlmIChtZXRhRGF0YS5saW5leUxhYmVsKSB7XHJcbiAgICAgIHN2Z1xyXG4gICAgICAgIC5hcHBlbmQoJ3RleHQnKVxyXG4gICAgICAgIC5hdHRyKCdjbGFzcycsICdsaWItYXhpcy1ncm91cC1sYWJlbCBsaWItbGluZS1heGlzJylcclxuICAgICAgICAuYXR0cignc3R5bGUnLCBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0N1c3RvbWxhYmVsU3R5bGVzKVxyXG4gICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKCcgKyAod2lkdGggLSAyMCkgKyAnLDApIHJvdGF0ZSg5MCknKVxyXG4gICAgICAgIC5hdHRyKCd5JywgMCAtIG1hcmdpbi5yaWdodCAqIDMpXHJcbiAgICAgICAgLmF0dHIoJ3gnLCBoZWlnaHQgLyAyKVxyXG4gICAgICAgIC5hdHRyKCdkeScsICc1ZW0nKVxyXG4gICAgICAgIC5zdHlsZSgndGV4dC1hbmNob3InLCAnbWlkZGxlJylcclxuICAgICAgICAudGV4dChtZXRhRGF0YS5saW5leUxhYmVsKTtcclxuICAgIH1cclxuXHJcbiAgICAgICAgaWYgKG1ldGFEYXRhLnhMYWJlbCkge1xyXG4gICAgICBmdW5jdGlvbiBpc0Fjcm9ueW0obGFiZWwpIHtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgKGxhYmVsLmxlbmd0aCA8PSA0ICYmIC9eW0EtWl0rJC8udGVzdChsYWJlbCkpIHx8XHJcbiAgICAgICAgICAobGFiZWwgPT09IGxhYmVsLnRvVXBwZXJDYXNlKCkgJiYgL1tBLVpdLy50ZXN0KGxhYmVsKSlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHhMYWJlbFRleHQgPSBtZXRhRGF0YS54TGFiZWw7XHJcbiAgICAgIGNvbnN0IGlzQWNyID0gaXNBY3JvbnltKHhMYWJlbFRleHQucmVwbGFjZSgvW15BLVphLXpdL2csICcnKSk7XHJcblxyXG4gICAgICAgIGNvbnN0IHhQb3NpdGlvbiA9IGlzcmlhID8gKGhlaWdodCArIG1hcmdpbi50b3AgKyBtYXJnaW4uYm90dG9tKSA6IChoZWlnaHQgKyBtYXJnaW4udG9wICsgbWFyZ2luLmJvdHRvbSArIDEwKTtcclxuXHJcbiAgICAgIHN2Z1xyXG4gICAgICAgIC5hcHBlbmQoJ3RleHQnKVxyXG4gICAgICAgIC5hdHRyKCdjbGFzcycsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgIGxldCBiYXNlQ2xhc3MgPSAnbGliLWF4aXMtZ3JvdXAtbGFiZWwgZm9udC1zaXplLTEnO1xyXG4gICAgICAgICAgaWYgKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmlzRHJpbGxkb3duQ2hhcnQpXHJcbiAgICAgICAgICAgIHJldHVybiBiYXNlQ2xhc3MgKyAnIGxpYi14bGFiZWwtZHJpbGxkb3duY2hhcnRzJztcclxuICAgICAgICAgIGlmIChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5pc011bHRpQ2hhcnRHcmlkTGluZSAhPSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgIHJldHVybiBiYXNlQ2xhc3MgKyAnIGxpYi14bGFiZWwtd2Vla2x5Q2hhcnRzJztcclxuICAgICAgICAgIHJldHVybiBiYXNlQ2xhc3MgKyAnIGxpYi1heGlzLXdhdGVyZmFsbC1sYWJlbCc7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuYXR0cignc3R5bGUnLCBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi54QXhpc0N1c3RvbWxhYmVsU3R5bGVzKVxyXG4gICAgICAgIC5hdHRyKFxyXG4gICAgICAgICAgJ3RyYW5zZm9ybScsXHJcbiAgICAgICAgICAndHJhbnNsYXRlKCcgKyB3aWR0aCAvIDIgKyAnICwnICsgeFBvc2l0aW9uICsgJyknXHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5zdHlsZSgndGV4dC1hbmNob3InLCAnbWlkZGxlJylcclxuICAgICAgICAuc3R5bGUoJ2ZpbGwnLCAndmFyKC0tY2hhcnQtdGV4dC1jb2xvciknKVxyXG4gICAgICAgIC50ZXh0KGlzQWNyID8geExhYmVsVGV4dC50b1VwcGVyQ2FzZSgpIDogeExhYmVsVGV4dC50b0xvd2VyQ2FzZSgpKVxyXG4gICAgICAgIC5zdHlsZSgndGV4dC10cmFuc2Zvcm0nLCBpc0FjciA/ICdub25lJyA6ICdjYXBpdGFsaXplJyk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIGlmIChsaW5lRGF0YSAmJiBjb2xvcnMpIHtcclxuICAgICAgdmFyIGRhdGFHcm91cCA9IGQzXHJcbiAgICAgICAgLm5lc3QoKVxyXG4gICAgICAgIC5rZXkoZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgIHJldHVybiBkLmNhdGVnb3J5O1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmVudHJpZXMobGluZURhdGEpO1xyXG5cclxuICAgICAgdmFyIGxpbmVHZW4gPSBkM1xyXG4gICAgICAgIC5saW5lKClcclxuICAgICAgICAueChmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgcmV0dXJuIHhTY2FsZShkLm5hbWUpICsgeFNjYWxlLmJhbmR3aWR0aCgpIC8gMjtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC55KGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICByZXR1cm4gbGluZVlzY2FsZShkLnZhbHVlKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgIHZhciBjYWxjdWxhdGVDWCA9IChkKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHhTY2FsZShkLm5hbWUpICsgeFNjYWxlLmJhbmR3aWR0aCgpIC8gMjtcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHZhciBjYWxjdWxhdGVDWSA9IChkKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGxpbmVZc2NhbGUoZC52YWx1ZSk7XHJcbiAgICAgIH07XHJcblxyXG4gICAgICBkYXRhR3JvdXAuZm9yRWFjaChmdW5jdGlvbiAoZCwgaSkge1xyXG4gICAgICAgIHN2Z1xyXG4gICAgICAgICAgLmFwcGVuZCgncGF0aCcpXHJcbiAgICAgICAgICAuZGF0dW0oZC52YWx1ZXMpXHJcbiAgICAgICAgICAuYXR0cignZmlsbCcsICdub25lJylcclxuICAgICAgICAgIC5hdHRyKCdzdHJva2UnLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICBpZiAoJ2NhdGVnb3J5JyBpbiBkWzBdKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGNvbG9yc1tkWzBdLmNhdGVnb3J5XTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICByZXR1cm4gc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ubGluZUdyYXBoQ29sb3I7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAuYXR0cignc3Ryb2tlLXdpZHRoJywgMi41KSAvKipsaW5lIHRoaW5rbmVzcyAqL1xyXG4gICAgICAgICAgLmF0dHIoJ2QnLCBsaW5lR2VuKGQudmFsdWVzKSk7XHJcblxyXG4gICAgICAgIHZhciBkb3QgPSBzdmdcclxuICAgICAgICAgIC5zZWxlY3RBbGwoJ215Q2lyY2xlcycpXHJcbiAgICAgICAgICAuZGF0YShkLnZhbHVlcylcclxuICAgICAgICAgIC5lbnRlcigpXHJcbiAgICAgICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgICAgIC5vbignY2xpY2snLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICBzZWxmLmhhbmRsZUNsaWNrKGQpO1xyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGRvdFxyXG4gICAgICAgICAgLmFwcGVuZCgnY2lyY2xlJylcclxuICAgICAgICAgIC5hdHRyKCdmaWxsJywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgICAgaWYgKCdjYXRlZ29yeScgaW4gZCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBjb2xvcnNbZC5jYXRlZ29yeV07XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmxpbmVHcmFwaENvbG9yO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLmF0dHIoJ3N0cm9rZScsICdub25lJylcclxuICAgICAgICAgIC5hdHRyKCdjeCcsIGZ1bmN0aW9uIChkLCBpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB4U2NhbGUoZC5uYW1lKSArIHhTY2FsZS5iYW5kd2lkdGgoKSAvIDI7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLmF0dHIoJ2N5JywgZnVuY3Rpb24gKGQsIGkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGxpbmVZc2NhbGUoZC52YWx1ZSk7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLmF0dHIoJ3InLCAzKSAvKipyYWRpdXMgb2YgY2lyY2xlPTUgKi9cclxuICAgICAgICAgIC5zdHlsZSgnY3Vyc29yJywgJ3BvaW50ZXInKTtcclxuXHJcbiAgICAgICAgaWYgKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmxpbmVHcmFwaENvbG9yKSB7XHJcbiAgICAgICAgICBkb3RcclxuICAgICAgICAgICAgLmFwcGVuZCgndGV4dCcpXHJcbiAgICAgICAgICAgIC5hdHRyKCdjbGFzcycsICdkb3RzJylcclxuICAgICAgICAgICAgLmF0dHIoJ2ZpbGwnLCBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5saW5lR3JhcGhDb2xvcilcclxuICAgICAgICAgICAgLmF0dHIoJ3N0eWxlJywgJ2ZvbnQtc2l6ZTogJyArICcuODVlbTsnICsgJ2ZvbnQtd2VpZ2h0OicgKyAnYm9sZCcpXHJcbiAgICAgICAgICAgIC5hdHRyKCd4JywgZnVuY3Rpb24gKGQsIGkpIHtcclxuICAgICAgICAgICAgICByZXR1cm4geFNjYWxlKGQubmFtZSkgKyB4U2NhbGUuYmFuZHdpZHRoKCkgLyAyO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuYXR0cigneScsIGZ1bmN0aW9uIChkLCBpKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGxpbmVZc2NhbGUoZC52YWx1ZSk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5hdHRyKCdkeScsICctMWVtJylcclxuICAgICAgICAgICAgLnRleHQoZnVuY3Rpb24gKGQsIGkpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ubGFiZWxGb3JtYXR0ZXIoZC52YWx1ZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvLyBzdmcuYXR0cignd2lkdGgnLCAxNTApLnN0eWxlKCdtYXgtd2lkdGgnLCAxNTApLnN0eWxlKCdvdmVyZmxvdy14JywgJ2F1dG8nKTtcclxuICB9XHJcbiAgaGFuZGxlQ2xpY2soZDogYW55KSB7XHJcbiAgICBpZiAodGhpcy5jaGFydERhdGE/Lm1ldGFEYXRhPy5oYXNEcmlsbERvd24gfHwgZD8udG9nZ2xlRnJvbSlcclxuICAgICAgdGhpcy5jbGlja0V2ZW50LmVtaXQoZCk7XHJcbiAgfVxyXG4gIGhhbmRsZUhlYWRlck1lbnVDbGljayhpZCkge1xyXG4gICAgdGhpcy5oZWFkZXJNZW51Y2xpY2tFdmVudC5lbWl0KGlkKTtcclxuICB9XHJcbiAgaGFuZGxlQ29tcGFyZUJ5RmlsdGVyU2VsZWN0aW9uKGV2ZW50KSB7XHJcbiAgICB0aGlzLmNsaWNrRXZlbnQuZW1pdChldmVudCk7XHJcbiAgfVxyXG4gIGhhbmRsZVpvb21pblpvb21vdXRDbGljayh7IGlzWm9vbU91dCwgZXZlbnQgfSkge1xyXG4gICAgLy8gdGhpcy5pc1pvb21PdXRTZWxlY3RlZChpc1pvb21PdXQsIGV2ZW50KTtcclxuICAgIHRoaXMuaXNab29tT3V0U2VsZWN0ZWQoaXNab29tT3V0KTtcclxuICB9XHJcbn1cclxuIiwiPG1ldGEgaHR0cC1lcXVpdj1cIkNBQ0hFLUNPTlRST0xcIiBjb250ZW50PVwiTk8tQ0FDSEVcIiAvPlxyXG48bWV0YSBodHRwLWVxdWl2PVwiRVhQSVJFU1wiIGNvbnRlbnQ9XCJTYXQsIDAxIEp1biAyMDA0IDExOjEyOjAxIEdNVFwiIC8+XHJcbjxkaXZcclxuICAjdmVydGljYWxzdGFja2VkY29udGFpbmVyXHJcbiAgY2xhc3M9XCJsaWItY2hhcnQtd3JhcHBlclwiXHJcbiAgW25nQ2xhc3NdPVwieyAnbGliLW5vLWJhY2tncm91bmQnOiBpc1RyYW5zcGFyZW50QmFja2dyb3VuZCB9XCJcclxuICAgIHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY2FyZC1iZyk7XCJcclxuXHJcbiAgKHJlc2l6ZWQpPVwib25SZXNpemVkKCRldmVudClcIlxyXG4+XHJcbiAgPGRpdiBjbGFzcz1cImhlYWRlci1hbHRcIiAqbmdJZj1cIiFpc0hlYWRlclZpc2libGVcIj5cclxuICAgIDxsaWItY2hhcnQtaGVhZGVyLXYyXHJcbiAgICAgIFtjaGFydERhdGFdPVwiY2hhcnREYXRhXCJcclxuICAgICAgW2NoYXJ0Q29uZmlndXJhdGlvbl09XCJjaGFydENvbmZpZ3VyYXRpb25cIlxyXG4gICAgICAoY2xpY2tFdmVudCk9XCJoYW5kbGVDbGljaygkZXZlbnQpXCJcclxuICAgID48L2xpYi1jaGFydC1oZWFkZXItdjI+XHJcblxyXG4gICAgPCEtLSA8c3BhbiAqbmdJZj1cImNoYXJ0Q29uZmlndXJhdGlvbi5pc0NvbXBhcmVieURyb3Bkb3duVmlzaWJsZVwiPlxyXG4gICAgICA8bGliLWRyb3Bkb3duPjwvbGliLWRyb3Bkb3duPlxyXG4gICAgPC9zcGFuPiAtLT5cclxuICAgIDxsaWItY2hhcnQtaGVhZGVyLXYzXHJcbiAgICAgIFtjaGFydERhdGFdPVwiY2hhcnREYXRhXCJcclxuICAgICAgW2NoYXJ0Q29uZmlndXJhdGlvbl09XCJjaGFydENvbmZpZ3VyYXRpb25cIlxyXG4gICAgICAoY29tcGFyZUJ5RmlsdGVyU2VsZWN0aW9uKT1cImhhbmRsZUNvbXBhcmVCeUZpbHRlclNlbGVjdGlvbigkZXZlbnQpXCJcclxuICAgICAgKHpvb21Jblpvb21PdXRDbGljayk9XCJoYW5kbGVab29taW5ab29tb3V0Q2xpY2soJGV2ZW50KVwiXHJcbiAgICA+PC9saWItY2hhcnQtaGVhZGVyLXYzPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXZcclxuICAgIFtzdHlsZS5oZWlnaHRdPVwiY2hhcnRDb25maWd1cmF0aW9uLnN2Z0hlaWdodFwiXHJcbiAgICBpZD1cInZlcnRpY2Fsc3RhY2tlZGNoYXJ0Y29udGFpbmVyXCJcclxuICAgICN2ZXJ0aWNhbHN0YWNrZWRjaGFydGNvbnRhaW5lclxyXG4gICAgY2xhc3M9XCJsaWItY2hhcnQtc3ZnXCJcclxuICA+PC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
|