verben-workflow-ui 0.5.72 → 0.5.74

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.
@@ -114,7 +114,14 @@ export class DesignerCanvasComponent {
114
114
  const nodeInfo = this.state.findNodeById(stageId);
115
115
  if (nodeInfo) {
116
116
  this.activeStageId = stageId;
117
- this.activeStageData = { ...nodeInfo.node.stageData, id: stageId };
117
+ // Seed the entry-point toggle from the node's actual start state, which is
118
+ // the source of truth for the start circle and API serialization. The
119
+ // auto-assigned entry node has isStartNode=true without stageData.IsEntryPoint.
120
+ this.activeStageData = {
121
+ ...nodeInfo.node.stageData,
122
+ IsEntryPoint: nodeInfo.node.isStartNode,
123
+ id: stageId,
124
+ };
118
125
  console.log(this.activeStageData, "ACTIVE STAGE DATA");
119
126
  this.showStageDialogLocal = true;
120
127
  }
@@ -182,6 +189,23 @@ export class DesignerCanvasComponent {
182
189
  ...stageData,
183
190
  };
184
191
  console.log('Updated stage data:', nodeInfo.node.stageData);
192
+ // Sync the entry-point flag onto node.isStartNode, which drives both the
193
+ // start circle and the IsEntryPoint value serialized to the API.
194
+ if (stageData.IsEntryPoint) {
195
+ // Enforce a single entry point: this node becomes the sole start node.
196
+ this.state.swimlanes.forEach((swimlane) => {
197
+ swimlane.nodes?.forEach((node) => {
198
+ node.isStartNode = node.id === this.activeStageId;
199
+ });
200
+ });
201
+ this.state.startNodeId = this.activeStageId;
202
+ }
203
+ else {
204
+ nodeInfo.node.isStartNode = false;
205
+ if (this.state.startNodeId === this.activeStageId) {
206
+ this.state.startNodeId = null;
207
+ }
208
+ }
185
209
  // Emit event for parent component to know about the update
186
210
  this.stagePropertiesUpdated.emit({
187
211
  nodeId: this.activeStageId,
@@ -1199,4 +1223,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
1199
1223
  type: HostListener,
1200
1224
  args: ['window:mouseup', ['$event']]
1201
1225
  }] } });
1202
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzaWduZXItY2FudmFzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZlcmJlbi13b3JrZmxvdy11aS9zcmMvbGliL2NvbXBvbmVudHMvd29ya2Zsb3ctZGVzaWduZXIvZGVzaWduZXItY2FudmFzL2Rlc2lnbmVyLWNhbnZhcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9jb21wb25lbnRzL3dvcmtmbG93LWRlc2lnbmVyL2Rlc2lnbmVyLWNhbnZhcy9kZXNpZ25lci1jYW52YXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBQ04sTUFBTSxFQUNOLFNBQVMsR0FFVixNQUFNLGVBQWUsQ0FBQzs7Ozs7Ozs7Ozs7O0FBa0J2QixNQUFNLE9BQU8sdUJBQXVCO0lBNkd6QjtJQUNDO0lBN0dELFlBQVksR0FBYSxJQUFJLENBQUM7SUFDN0IsZUFBZSxHQUFHLElBQUksWUFBWSxFQUE0QixDQUFDO0lBQy9ELGVBQWUsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBQy9DLG9CQUFvQixHQUNsQixJQUFJLENBQUM7SUFDRyxzQkFBc0IsR0FBRyxJQUFJLFlBQVksRUFHL0MsQ0FBQztJQUNLLHVCQUF1QixHQUFHLElBQUksWUFBWSxFQUdoRCxDQUFDO0lBRUwsK0JBQStCO0lBQ1EsU0FBUyxDQUEwQjtJQUcxRSxlQUFlLENBQUMsS0FBaUI7UUFDL0Isc0VBQXNFO1FBQ3RFLElBQ0UsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCO1lBQ3RCLENBQUMsSUFBSSxDQUFDLHNCQUFzQjtZQUM1QixDQUFDLElBQUksQ0FBQyxZQUFZLElBQUksdUNBQXVDO1lBQzdELElBQUks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LENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBzaWduYWwsXG4gIFZpZXdDaGlsZCxcbiAgV3JpdGFibGVTaWduYWwsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRXNjYWxhdGlvblR5cGUsIEZvcm0sIFdvcmtmbG93LCBXb3JrZmxvd0FjdGlvbiwgV29ya2Zsb3dTdGFnZSB9IGZyb20gJ3ZlcmJlbi13b3JrZmxvdy11aS9zcmMvbGliL21vZGVscyc7XG5pbXBvcnQgeyBXb3JrZmxvd0RhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vd29ya2Zsb3ctZGF0YS5zZXJ2aWNlJztcbmltcG9ydCB7IFdvcmtmbG93RGVzaWduZXJTdGF0ZSB9IGZyb20gJy4uL3dvcmtmbG93LWRlc2lnbmVyLnN0YXRlJztcbmltcG9ydCB7XG4gIENvbm5lY3Rpb24sXG4gIENvbm5lY3Rpb25Qb2ludCxcbiAgTm9kZSxcbiAgU3dpbWxhbmVJdGVtLFxuICBUb29sVHlwZSxcbiAgTm9kZSBhcyBXRk5vZGUsXG59IGZyb20gJy4uL3dvcmtmbG93LWRlc2lnbmVyLnR5cGVzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLWRlc2lnbmVyLWNhbnZhcycsXG4gIHRlbXBsYXRlVXJsOiAnLi9kZXNpZ25lci1jYW52YXMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vZGVzaWduZXItY2FudmFzLmNvbXBvbmVudC5jc3MnLFxufSlcbmV4cG9ydCBjbGFzcyBEZXNpZ25lckNhbnZhc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIHNlbGVjdGVkVG9vbDogVG9vbFR5cGUgPSBudWxsO1xuICBAT3V0cHV0KCkgY2xpY2tlZFBvc2l0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjx7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0+KCk7XG4gIEBPdXRwdXQoKSBzdWJmbG93U2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIHBlbmRpbmdTdGFnZVBvc2l0aW9uOiB7IHN3aW1sYW5lSW5kZXg6IG51bWJlcjsgeDogbnVtYmVyOyB5OiBudW1iZXIgfSB8IG51bGwgPVxuICAgIG51bGw7XG4gIEBPdXRwdXQoKSBzdGFnZVByb3BlcnRpZXNVcGRhdGVkID0gbmV3IEV2ZW50RW1pdHRlcjx7XG4gICAgbm9kZUlkOiBzdHJpbmc7XG4gICAgc3RhZ2VEYXRhOiBQYXJ0aWFsPFdvcmtmbG93U3RhZ2U+O1xuICB9PigpO1xuICBAT3V0cHV0KCkgYWN0aW9uUHJvcGVydGllc1VwZGF0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHtcbiAgICBjb25uZWN0aW9uSWQ6IHN0cmluZztcbiAgICBhY3Rpb25EYXRhOiBQYXJ0aWFsPFdvcmtmbG93QWN0aW9uPjtcbiAgfT4oKTtcblxuICAvLyBSZWZlcmVuY2UgdG8gdGhlIFNWRyBlbGVtZW50XG4gIEBWaWV3Q2hpbGQoJ2NhbnZhcycsIHsgc3RhdGljOiB0cnVlIH0pIGNhbnZhc1JlZiE6IEVsZW1lbnRSZWY8U1ZHRWxlbWVudD47XG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93Om1vdXNldXAnLCBbJyRldmVudCddKVxuICBvbldpbmRvd01vdXNlVXAoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAvLyBJZiB3ZSBoYXZlIGEgcG9wdXAgb3BlbiBidXQgdGhlIG1vdXNlIGlzIHJlbGVhc2VkIG91dHNpZGUsIGNsZWFuIHVwXG4gICAgaWYgKFxuICAgICAgIXRoaXMuc2hvd1N1YmZsb3dQb3B1cCAmJlxuICAgICAgIXRoaXMuc2hvd1N0YXJ0Tm9kZUZvcm1Qb3B1cCAmJlxuICAgICAgIXRoaXMucG9wdXBWaXNpYmxlICYmIC8vIE9ubHkgZW5kIGRyYWcgaWYgbm8gcG9wdXAgaXMgdmlzaWJsZVxuICAgICAgdGhpcy5zdGF0ZS5pc0Nvbm5lY3Rpb25EcmFnZ2luZygpXG4gICAgKSB7XG4gICAgICBjb25zb2xlLmxvZygnRXh0ZXJuYWwgbW91c2V1cCBkZXRlY3RlZCAtIGNsZWFuaW5nIHVwIGNvbm5lY3Rpb24gZHJhZycpO1xuICAgICAgdGhpcy5zdGF0ZS5lbmRDb25uZWN0aW9uRHJhZygpO1xuICAgIH1cbiAgfVxuXG4gIC8vIENhbnZhcyBkaW1lbnNpb25zXG4gIGNhbnZhc1dpZHRoID0gMzAwMDtcbiAgY2FudmFzSGVpZ2h0ID0gMjAwMDtcblxuICAvLyBHcmlkIHNpemVcbiAgZ3JpZFNpemUgPSAyMDtcblxuICBzd2ltbGFuZUhlaWdodCA9IDI2MztcbiAgdmlzaWJsZUNvbm5lY3Rpb25Qb2ludHNOb2RlSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBwb3B1cFZpc2libGUgPSBmYWxzZTtcbiAgcG9wdXBYID0gMDtcbiAgcG9wdXBZID0gMDtcbiAgYWxsb3dlZE5vZGVUeXBlczogc3RyaW5nW10gPSBbXTtcblxuICBzaG93U3RhcnROb2RlRm9ybVBvcHVwOiBib29sZWFuID0gZmFsc2U7XG4gIHN0YXJ0Tm9kZUZvcm1zTGlzdDogRm9ybVtdID0gW107XG4gIGlzTG9hZGluZ1N0YXJ0Tm9kZUZvcm1zOiBib29sZWFuID0gZmFsc2U7XG4gIHN0YXJ0Tm9kZUZvcm1Qb3B1cFg6IG51bWJlciA9IDA7XG4gIHN0YXJ0Tm9kZUZvcm1Qb3B1cFk6IG51bWJlciA9IDA7XG4gIGFjdGl2ZU5vZGVGb3JGb3JtU2VsZWN0aW9uOiBOb2RlIHwgbnVsbCA9IG51bGw7XG4gIG5vZGVGb3JtczogV3JpdGFibGVTaWduYWw8XG4gICAgUmVjb3JkPHN0cmluZywgeyBmb3JtSWQ6IHN0cmluZzsgZm9ybU5hbWU6IHN0cmluZyB9PlxuICA+ID0gc2lnbmFsKHt9KTtcblxuICBzaG93U3ViZmxvd1BvcHVwOiBib29sZWFuID0gZmFsc2U7XG4gIHdvcmtmbG93c0xpc3Q6IFdvcmtmbG93W10gPSBbXTtcbiAgaXNMb2FkaW5nV29ya2Zsb3dzOiBib29sZWFuID0gZmFsc2U7XG4gIHN1YmZsb3dQb3B1cFg6IG51bWJlciA9IDA7XG4gIHN1YmZsb3dQb3B1cFk6IG51bWJlciA9IDA7XG4gIHBlbmRpbmdTdWJmbG93UG9zaXRpb246IHtcbiAgICBzd2ltbGFuZUluZGV4OiBudW1iZXI7XG4gICAgeDogbnVtYmVyO1xuICAgIHk6IG51bWJlcjtcbiAgfSB8IG51bGwgPSBudWxsO1xuXG4gIHBlbmRpbmdEZWNpc2lvbkNvbm5lY3Rpb246IHtcbiAgICBkZWNpc2lvbk5vZGVJZDogc3RyaW5nO1xuICAgIHN3aW1sYW5lSW5kZXg6IG51bWJlcjtcbiAgICB4OiBudW1iZXI7XG4gICAgeTogbnVtYmVyO1xuICB9IHwgbnVsbCA9IG51bGw7XG5cbiAgcGVuZGluZ0Nvbm5lY3Rpb25Tb3VyY2VQb2ludDogQ29ubmVjdGlvblBvaW50IHwgbnVsbCA9IG51bGw7XG4gIHBlbmRpbmdDb25uZWN0aW9uU291cmNlU3dpbWxhbmVJbmRleDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgLy8g4pSA4pSA4pSAIE5vZGUtZHJhZyBzdGF0ZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgaXNEcmFnZ2luZ05vZGUgPSBmYWxzZTtcbiAgZHJhZ2dpbmdOb2RlOiBOb2RlIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgZHJhZ2dpbmdOb2RlU3dpbWxhbmVJbmRleDogbnVtYmVyID0gLTE7XG4gIC8qKiBNb3VzZSBvZmZzZXQgcmVsYXRpdmUgdG8gbm9kZSB0b3AtbGVmdCBhdCBkcmFnIHN0YXJ0IChhYnNvbHV0ZSBjYW52YXMgY29vcmRzKS4gKi9cbiAgcHJpdmF0ZSBkcmFnT2Zmc2V0WCA9IDA7XG4gIHByaXZhdGUgZHJhZ09mZnNldFkgPSAwO1xuXG4gIHNob3dEZWNpc2lvbkNvbmRpdGlvbkRpYWxvZzogYm9vbGVhbiA9IGZhbHNlO1xuICBzaG93Q29uZGl0aW9uc0RpYWxvZzogYm9vbGVhbiA9IGZhbHNlO1xuICBhY3RpdmVEZWNpc2lvbk5vZGVJZDogc3RyaW5nID0gJyc7XG4gIGFjdGl2ZUNvbm5lY3Rpb25JZDogc3RyaW5nID0gJyc7XG4gIGRlY2lzaW9uQ29uZGl0aW9uUG9wdXBYOiBudW1iZXIgPSAwO1xuICBkZWNpc2lvbkNvbmRpdGlvblBvcHVwWTogbnVtYmVyID0gMDtcblxuICBpc0NyZWF0aW5nU3RhZ2VGcm9tRGVjaXNpb246IGJvb2xlYW4gPSBmYWxzZTtcbiAgcGVuZGluZ0RlY2lzaW9uQ29uZGl0aW9uOiBzdHJpbmcgPSAnJztcbiAgYWN0aXZlU3RhZ2VJZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIGFjdGl2ZUFjdGlvbklkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICBzaG93U3RhZ2VEaWFsb2dMb2NhbDogYm9vbGVhbiA9IGZhbHNlO1xuICBzaG93RXNjYWxhdGlvbkRpYWxvZ0xvY2FsOiBib29sZWFuID0gZmFsc2U7XG4gIGFjdGl2ZUVzY2FsYXRpb25UeXBlOiBXcml0YWJsZVNpZ25hbDxFc2NhbGF0aW9uVHlwZSB8IG51bGw+ID0gc2lnbmFsKG51bGwpO1xuICBhY3RpdmVTdGFnZUNvZGU6IFdyaXRhYmxlU2lnbmFsPHN0cmluZyB8IG51bGw+ID0gc2lnbmFsKG51bGwpO1xuICBhY3RpdmVTdGFnZURhdGE6IFBhcnRpYWw8V29ya2Zsb3dTdGFnZT4gPSB7fTtcbiAgYWN0aXZlQWN0aW9uRGF0YTogQ29ubmVjdGlvbiB8IG51bGwgPSBudWxsO1xuXG4gIHNob3dBY3Rpb25EaWFsb2dMb2NhbDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHBvdGVudGlhbFRhcmdldFBvaW50SWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBzdGF0ZTogV29ya2Zsb3dEZXNpZ25lclN0YXRlLFxuICAgIHByaXZhdGUgZGF0YVNlcnZpY2U6IFdvcmtmbG93RGF0YVNlcnZpY2VcbiAgKSB7IH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZUNhbnZhc1NpemUoKTtcbiAgfVxuXG4gIC8vIEhhbmRsZSBtb3VzZSBjbGljayBvbiBjYW52YXNcbiAgb25DYW52YXNDbGljayhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIC8vIE9ubHkgcHJvY2VzcyBjYW52YXMgY2xpY2tzIGlmIGEgdG9vbCBpcyBzZWxlY3RlZFxuICAgIGlmICghdGhpcy5zZWxlY3RlZFRvb2wpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBHZXQgdGhlIHBvc2l0aW9uIHdoZXJlIHRoZSBjbGljayBvY2N1cnJlZFxuICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5nZXRNb3VzZVBvc2l0aW9uKGV2ZW50KTtcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgICdDYW52YXMgY2xpY2tlZCBhdDonLFxuICAgICAgcG9zaXRpb24sXG4gICAgICAnd2l0aCB0b29sOicsXG4gICAgICB0aGlzLnNlbGVjdGVkVG9vbFxuICAgICk7XG5cbiAgICAvLyBDYWxjdWxhdGUgdGhlIHN3aW1sYW5lIGluZGV4IGJhc2VkIG9uIHBvc2l0aW9uXG4gICAgLy8gY29uc3Qgc3dpbWxhbmVJbmRleCA9IE1hdGguZmxvb3IocG9zaXRpb24ueSAvIHRoaXMuc3dpbWxhbmVIZWlnaHQpO1xuXG4gICAgLy8gT25seSBlbWl0IHRoZSBwb3NpdGlvbiBpZiB3ZSBoYXZlIGEgdG9vbCBzZWxlY3RlZCBhbmQgaXQncyBhIHZhbGlkIGNsaWNrIGFyZWFcbiAgICBpZiAodGhpcy5zZWxlY3RlZFRvb2wpIHtcbiAgICAgIHRoaXMuY2xpY2tlZFBvc2l0aW9uLmVtaXQoe1xuICAgICAgICB4OiBwb3NpdGlvbi54LFxuICAgICAgICB5OiBwb3NpdGlvbi55LFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgb25TaG93U2hpZWxkRGlhbG9nKHN0YWdlSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIC8vIEZpbmQgdGhlIG5vZGVcbiAgICBjb25zdCBub2RlSW5mbyA9IHRoaXMuc3RhdGUuZmluZE5vZGVCeUlkKHN0YWdlSWQpO1xuICAgIGlmIChub2RlSW5mbykge1xuICAgICAgdGhpcy5hY3RpdmVTdGFnZUlkID0gc3RhZ2VJZDtcbiAgICAgIHRoaXMuYWN0aXZlU3RhZ2VEYXRhID0geyAuLi5ub2RlSW5mby5ub2RlLnN0YWdlRGF0YSwgaWQ6IHN0YWdlSWQgfTtcbiAgICAgIGNvbnNvbGUubG9nKHRoaXMuYWN0aXZlU3RhZ2VEYXRhLCBcIkFDVElWRSBTVEFHRSBEQVRBXCIpO1xuICAgICAgdGhpcy5zaG93U3RhZ2VEaWFsb2dMb2NhbCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgb25TaG93QWN0aW9uRGlhbG9nKGNvbm5lY3Rpb25JbmZvOiBDb25uZWN0aW9uKTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coXCJDT05FQ1RJT05cIiwgY29ubmVjdGlvbkluZm8pO1xuICAgIC8vIEZpbmQgdGhlIG5vZGVcbiAgICAvLyBjb25zdCBjb25uZWN0aW9uSW5mbyA9IHRoaXMuc3RhdGUuZmluZEFjdGlvbkJ5SWQoYWN0aW9uSWQpO1xuICAgIGlmIChjb25uZWN0aW9uSW5mbykge1xuICAgICAgdGhpcy5hY3RpdmVBY3Rpb25JZCA9IGNvbm5lY3Rpb25JbmZvLmlkO1xuICAgICAgdGhpcy5hY3RpdmVBY3Rpb25EYXRhID0gY29ubmVjdGlvbkluZm87XG4gICAgICBjb25zb2xlLmxvZyh0aGlzLmFjdGl2ZUFjdGlvbkRhdGEpO1xuICAgICAgdGhpcy5zaG93QWN0aW9uRGlhbG9nTG9jYWwgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIG9uU2hvd0VzY2FsYXRpb25EaWFsb2coZXZlbnQ6IHtcbiAgICBzdGFnZUlkOiBzdHJpbmc7XG4gICAgdHlwZTogRXNjYWxhdGlvblR5cGU7XG4gIH0pOiB2b2lkIHtcbiAgICAvLyBGaW5kIHRoZSBub2RlXG4gICAgY29uc3Qgbm9kZUluZm8gPSB0aGlzLnN0YXRlLmZpbmROb2RlQnlJZChldmVudC5zdGFnZUlkKTtcbiAgICBpZiAobm9kZUluZm8pIHtcbiAgICAgIHRoaXMuYWN0aXZlU3RhZ2VJZCA9IGV2ZW50LnN0YWdlSWQ7XG4gICAgICB0aGlzLmFjdGl2ZVN0YWdlRGF0YSA9IG5vZGVJbmZvLm5vZGUuc3RhZ2VEYXRhIHx8IHtcbiAgICAgICAgaWQ6IHRoaXMuYWN0aXZlU3RhZ2VJZCxcbiAgICAgIH07XG4gICAgICB0aGlzLmFjdGl2ZUVzY2FsYXRpb25UeXBlLnNldChldmVudC50eXBlKTtcbiAgICAgIHRoaXMuYWN0aXZlU3RhZ2VDb2RlLnNldCh0aGlzLmFjdGl2ZVN0YWdlRGF0YT8uQ29kZSB8fCAnJyk7XG4gICAgICBjb25zb2xlLmxvZygnQWN0aXZlIFN0YWdlIERhdGE6JywgdGhpcy5hY3RpdmVTdGFnZURhdGEpO1xuICAgICAgY29uc29sZS5sb2coJ0VzY2FsYXRpb24gVHlwZTonLCB0aGlzLmFjdGl2ZUVzY2FsYXRpb25UeXBlKCkpO1xuICAgICAgdGhpcy5zaG93RXNjYWxhdGlvbkRpYWxvZ0xvY2FsID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICAvLyBBZGQgdGhpcyBtZXRob2QgdG8gaGFuZGxlIGRpYWxvZyBjbG9zdXJlXG4gIG9uU3RhZ2VEaWFsb2dDbG9zZWQoKTogdm9pZCB7XG4gICAgdGhpcy5zaG93U3RhZ2VEaWFsb2dMb2NhbCA9IGZhbHNlO1xuICAgIHRoaXMuYWN0aXZlU3RhZ2VJZCA9IG51bGw7XG4gICAgdGhpcy5hY3RpdmVTdGFnZURhdGEgPSB7fTtcbiAgfVxuXG4gIG9uQWN0aW9uRGlhbG9nQ2xvc2VkKCk6IHZvaWQge1xuICAgIHRoaXMuc2hvd0FjdGlvbkRpYWxvZ0xvY2FsID0gZmFsc2U7XG4gICAgdGhpcy5hY3RpdmVBY3Rpb25JZCA9IG51bGw7XG4gICAgdGhpcy5hY3RpdmVBY3Rpb25EYXRhID0gbnVsbDtcbiAgfVxuXG4gIG9uQWN0aW9uRGlhbG9nRGVsZXRlZChjb25uZWN0aW9uSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIC8vIFJlbW92ZSB0aGUgY29ubmVjdGlvbiBmcm9tIHN0YXRlXG4gICAgdGhpcy5zdGF0ZS5jb25uZWN0aW9ucyA9IHRoaXMuc3RhdGUuY29ubmVjdGlvbnMuZmlsdGVyKFxuICAgICAgKGMpID0+IGMuaWQgIT09IGNvbm5lY3Rpb25JZFxuICAgICk7XG4gICAgLy8gQ2xvc2UgdGhlIGRpYWxvZ1xuICAgIHRoaXMub25BY3Rpb25EaWFsb2dDbG9zZWQoKTtcbiAgfVxuXG4gIC8vIEFkZCB0aGlzIG1ldGhvZCB0byBoYW5kbGUgZGlhbG9nIGNsb3N1cmVcbiAgb25Fc2NhbGF0aW9uRGlhbG9nQ2xvc2VkKCk6IHZvaWQge1xuICAgIHRoaXMuc2hvd0VzY2FsYXRpb25EaWFsb2dMb2NhbCA9IGZhbHNlO1xuICAgIHRoaXMuYWN0aXZlU3RhZ2VJZCA9IG51bGw7XG4gICAgdGhpcy5hY3RpdmVFc2NhbGF0aW9uVHlwZS5zZXQobnVsbCk7XG4gICAgdGhpcy5hY3RpdmVTdGFnZUNvZGUuc2V0KG51bGwpO1xuICAgIHRoaXMuYWN0aXZlU3RhZ2VEYXRhID0ge307XG4gIH1cblxuICAvLyBBZGQgdGhpcyBtZXRob2QgdG8gaGFuZGxlIHNhdmluZyBzdGFnZSBkYXRhXG4gIG9uU3RhZ2VEaWFsb2dTYXZlZChzdGFnZURhdGE6IFBhcnRpYWw8V29ya2Zsb3dTdGFnZT4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5hY3RpdmVTdGFnZUlkKSB7XG4gICAgICAvLyBFZGl0aW5nIGFuIGV4aXN0aW5nIHN0YWdlXG4gICAgICBjb25zdCBub2RlSW5mbyA9IHRoaXMuc3RhdGUuZmluZE5vZGVCeUlkKHRoaXMuYWN0aXZlU3RhZ2VJZCk7XG4gICAgICBpZiAobm9kZUluZm8pIHtcbiAgICAgICAgLy8gVXBkYXRlIHRoZSBzdGFnZSBkYXRhXG4gICAgICAgIG5vZGVJbmZvLm5vZGUuc3RhZ2VEYXRhID0ge1xuICAgICAgICAgIC4uLm5vZGVJbmZvLm5vZGUuc3RhZ2VEYXRhLFxuICAgICAgICAgIC4uLnN0YWdlRGF0YSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc29sZS5sb2coJ1VwZGF0ZWQgc3RhZ2UgZGF0YTonLCBub2RlSW5mby5ub2RlLnN0YWdlRGF0YSk7XG5cbiAgICAgICAgLy8gRW1pdCBldmVudCBmb3IgcGFyZW50IGNvbXBvbmVudCB0byBrbm93IGFib3V0IHRoZSB1cGRhdGVcbiAgICAgICAgdGhpcy5zdGFnZVByb3BlcnRpZXNVcGRhdGVkLmVtaXQoe1xuICAgICAgICAgIG5vZGVJZDogdGhpcy5hY3RpdmVTdGFnZUlkLFxuICAgICAgICAgIHN0YWdlRGF0YTogbm9kZUluZm8ubm9kZS5zdGFnZURhdGEsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENsb3NlIHRoZSBkaWFsb2dcbiAgICB0aGlzLm9uU3RhZ2VEaWFsb2dDbG9zZWQoKTtcbiAgfVxuXG4gIG9uQWN0aW9uRGlhbG9nU2F2ZWQoYWN0aW9uRGF0YTogQ29ubmVjdGlvbik6IHZvaWQge1xuICAgIGlmICh0aGlzLmFjdGl2ZUFjdGlvbklkKSB7XG4gICAgICAvLyBFZGl0aW5nIGFuIGV4aXN0aW5nIHN0YWdlXG4gICAgICAvLyBsZXQgY29ubmVjdGlvbkluZm8gPSB0aGlzLnN0YXRlLmZpbmRBY3Rpb25CeUlkKHRoaXMuYWN0aXZlQWN0aW9uSWQpO1xuICAgICAgdGhpcy5zdGF0ZS5jb25uZWN0aW9ucyA9IHRoaXMuc3RhdGUuY29ubmVjdGlvbnMubWFwKChjb25uZWN0aW9uLCBpbmRleCkgPT4ge1xuICAgICAgICBpZiAoY29ubmVjdGlvbi5pZCA9PT0gdGhpcy5hY3RpdmVBY3Rpb25JZCkge1xuICAgICAgICAgIGNvbm5lY3Rpb24ubGFiZWwgPSBhY3Rpb25EYXRhLmxhYmVsO1xuICAgICAgICAgIGNvbm5lY3Rpb24uYWN0aW9uID0gYWN0aW9uRGF0YS5hY3Rpb247XG4gICAgICAgICAgY29ubmVjdGlvbi50YXJnZXRTdGF0dXMgPSBhY3Rpb25EYXRhLnRhcmdldFN0YXR1cztcbiAgICAgICAgICBjb25zb2xlLmxvZygnVXBkYXRlZCBhY3Rpb24gZGF0YTonLCBjb25uZWN0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29ubmVjdGlvbjtcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gQ2xvc2UgdGhlIGRpYWxvZ1xuICAgIHRoaXMub25BY3Rpb25EaWFsb2dDbG9zZWQoKTtcbiAgfVxuXG4gIHVwZGF0ZUNhbnZhc1NpemUoKTogdm9pZCB7XG4gICAgY29uc3QgcmVxdWlyZWRIZWlnaHQgPVxuICAgICAgKHRoaXMuc3RhdGUuc3dpbWxhbmVzLmxlbmd0aCArIDEpICogdGhpcy5zd2ltbGFuZUhlaWdodDtcbiAgICB0aGlzLmNhbnZhc0hlaWdodCA9IE1hdGgubWF4KDIwMDAsIHJlcXVpcmVkSGVpZ2h0KTsgLy8gRW5zdXJlIHdlIGhhdmUgYXQgbGVhc3Qgb3VyIGRlZmF1bHQgaGVpZ2h0XG5cbiAgICAvLyBVcGRhdGUgYWxsIHRoZSBzd2ltbGFuZSBjbGlwIHBhdGhzIHdoZW4gc2l6ZSBjaGFuZ2VzXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnN0YXRlLnN3aW1sYW5lcy5mb3JFYWNoKChzd2ltbGFuZSwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgY2xpcFBhdGhJZCA9IGBzd2ltbGFuZS1jbGlwLSR7aW5kZXh9YDtcbiAgICAgICAgY29uc3QgY2xpcFBhdGhFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoY2xpcFBhdGhJZCk7XG4gICAgICAgIGlmIChjbGlwUGF0aEVsZW1lbnQpIHtcbiAgICAgICAgICBjb25zdCByZWN0RWxlbWVudCA9IGNsaXBQYXRoRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdyZWN0Jyk7XG4gICAgICAgICAgaWYgKHJlY3RFbGVtZW50KSB7XG4gICAgICAgICAgICByZWN0RWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3dpZHRoJywgdGhpcy5jYW52YXNXaWR0aC50b1N0cmluZygpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sIDApO1xuICB9XG5cbiAgLy8gSGVscGVyIG1ldGhvZCB0byBnZXQgdGhlIG1vdXNlIHBvc2l0aW9uIHJlbGF0aXZlIHRvIHRoZSBTVkcgY2FudmFzXG4gIHByaXZhdGUgZ2V0TW91c2VQb3NpdGlvbihldmVudDogTW91c2VFdmVudCk6IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfSB7XG4gICAgLy8gVXNlIGNsaWVudFgvWSBhbmQgZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkgZm9yIGNyb3NzLWJyb3dzZXIgY29tcGF0aWJpbGl0eVxuICAgIGNvbnN0IHJlY3QgPSB0aGlzLmNhbnZhc1JlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIHJldHVybiB7XG4gICAgICB4OiBldmVudC5jbGllbnRYIC0gcmVjdC5sZWZ0LFxuICAgICAgeTogZXZlbnQuY2xpZW50WSAtIHJlY3QudG9wLFxuICAgIH07XG4gIH1cblxuICAvLyBIZWxwZXIgbWV0aG9kIHRvIGdldCB0aGUgbW91c2UgcG9zaXRpb24gZm9yIHZpZXdwb3J0LWJhc2VkIHBvcHVwc1xuICAvLyBUaGlzIGFjY291bnRzIGZvciBjYW52YXMgc2Nyb2xsIHBvc2l0aW9uXG4gIHByaXZhdGUgZ2V0Vmlld3BvcnRQb3NpdGlvbihjYW52YXNYOiBudW1iZXIsIGNhbnZhc1k6IG51bWJlcik6IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfSB7XG4gICAgY29uc3QgcGFyZW50RWxlbWVudCA9IHRoaXMuY2FudmFzUmVmLm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudDtcbiAgICBjb25zdCBzY3JvbGxMZWZ0ID0gcGFyZW50RWxlbWVudD8uc2Nyb2xsTGVmdCB8fCAwO1xuICAgIGNvbnN0IHNjcm9sbFRvcCA9IHBhcmVudEVsZW1lbnQ/LnNjcm9sbFRvcCB8fCAwO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IGNhbnZhc1ggLSBzY3JvbGxMZWZ0LFxuICAgICAgeTogY2FudmFzWSAtIHNjcm9sbFRvcCxcbiAgICB9O1xuICB9XG5cbiAgc2hvd0Nvbm5lY3Rpb25Qb2ludHMobm9kZUlkOiBzdHJpbmcsIHN3aW1sYW5lSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMudmlzaWJsZUNvbm5lY3Rpb25Qb2ludHNOb2RlSWQgPSBub2RlSWQ7XG4gIH1cblxuICBpc01vdXNlT3Zlck5vZGUoXG4gICAgZXZlbnQ6IE1vdXNlRXZlbnQsXG4gICAgbm9kZTogV0ZOb2RlLFxuICAgIHN3aW1sYW5lSW5kZXg6IG51bWJlclxuICApOiBib29sZWFuIHtcbiAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMuZ2V0TW91c2VQb3NpdGlvbihldmVudCk7XG4gICAgY29uc3Qgbm9kZUJvdW5kcyA9IHRoaXMuZ2V0Tm9kZUJvdW5kc1dpdGhQYWRkaW5nKG5vZGUsIHN3aW1sYW5lSW5kZXgpO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIHBvc2l0aW9uLnggPj0gbm9kZUJvdW5kcy54ICYmXG4gICAgICBwb3NpdGlvbi54IDw9IG5vZGVCb3VuZHMueCArIG5vZGVCb3VuZHMud2lkdGggJiZcbiAgICAgIHBvc2l0aW9uLnkgPj0gbm9kZUJvdW5kcy55ICYmXG4gICAgICBwb3NpdGlvbi55IDw9IG5vZGVCb3VuZHMueSArIG5vZGVCb3VuZHMuaGVpZ2h0XG4gICAgKTtcbiAgfVxuXG4gIC8vIGhlbHBlciBtZXRob2QgdG8gY2FsY3VsYXRlIG5vZGUgYm91bmRzIHdpdGggcGFkZGluZ1xuICBnZXROb2RlQm91bmRzV2l0aFBhZGRpbmcoXG4gICAgbm9kZTogV0ZOb2RlLFxuICAgIHN3aW1sYW5lSW5kZXg6IG51bWJlclxuICApOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyB3aWR0aDogbnVtYmVyOyBoZWlnaHQ6IG51bWJlciB9IHtcbiAgICBjb25zdCBwYWRkaW5nID0gMTA7IC8vIEFkZCAxMHB4IHBhZGRpbmcgYXJvdW5kIG5vZGVzIGZvciBlYXNpZXIgaG92ZXIgZGV0ZWN0aW9uXG5cbiAgICAvLyBDYWxjdWxhdGUgdGhlIGFic29sdXRlIFkgcG9zaXRpb24gaW5jbHVkaW5nIHN3aW1sYW5lIG9mZnNldFxuICAgIGNvbnN0IGFic29sdXRlWSA9IG5vZGUueSArIHN3aW1sYW5lSW5kZXggKiAyNjM7XG5cbiAgICByZXR1cm4ge1xuICAgICAgeDogbm9kZS54IC0gcGFkZGluZyxcbiAgICAgIHk6IGFic29sdXRlWSAtIHBhZGRpbmcsXG4gICAgICB3aWR0aDogbm9kZS53aWR0aCArIHBhZGRpbmcgKiAyLFxuICAgICAgaGVpZ2h0OiBub2RlLmhlaWdodCArIHBhZGRpbmcgKiAyLFxuICAgIH07XG4gIH1cblxuICBoaWRlQ29ubmVjdGlvblBvaW50cyhub2RlSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmIChcbiAgICAgIHRoaXMudmlzaWJsZUNvbm5lY3Rpb25Qb2ludHNOb2RlSWQgPT09IG5vZGVJZCAmJlxuICAgICAgIXRoaXMuc3RhdGUuaXNDb25uZWN0aW9uRHJhZ2dpbmcoKVxuICAgICkge1xuICAgICAgdGhpcy52aXNpYmxlQ29ubmVjdGlvblBvaW50c05vZGVJZCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgaXNDb25uZWN0aW9uUG9pbnRWaXNpYmxlKG5vZGVJZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudmlzaWJsZUNvbm5lY3Rpb25Qb2ludHNOb2RlSWQgPT09IG5vZGVJZDtcbiAgfVxuXG4gIHN0YXJ0Q29ubmVjdGlvbkRyYWcoXG4gICAgZXZlbnQ6IE1vdXNlRXZlbnQsXG4gICAgcG9pbnQ6IENvbm5lY3Rpb25Qb2ludCxcbiAgICBzd2ltbGFuZUluZGV4OiBudW1iZXJcbiAgKTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgYW4gZXhpdCBwb2ludCBub2RlXG4gICAgY29uc3Qgbm9kZUluZm8gPSB0aGlzLnN0YXRlLmZpbmROb2RlQnlJZChwb2ludC5ub2RlSWQpO1xuICAgIGlmIChcbiAgICAgIG5vZGVJbmZvICYmXG4gICAgICBub2RlSW5mby5ub2RlLnR5cGUgPT09ICdzdGFnZScgJiZcbiAgICAgIG5vZGVJbmZvLm5vZGUuc3RhZ2VEYXRhPy5Jc0V4aXRQb2ludFxuICAgICkge1xuICAgICAgLy8gRG9uJ3QgYWxsb3cgY29ubmVjdGlvbnMgZnJvbSBleGl0IHBvaW50c1xuICAgICAgY29uc29sZS5sb2coJ0Nhbm5vdCBjcmVhdGUgY29ubmVjdGlvbnMgZnJvbSBleGl0IHBvaW50cycpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5nZXRNb3VzZVBvc2l0aW9uKGV2ZW50KTtcbiAgICB0aGlzLnN0YXRlLnN0YXJ0Q29ubmVjdGlvbkRyYWcoXG4gICAgICBwb2ludCxcbiAgICAgIHN3aW1sYW5lSW5kZXgsXG4gICAgICBwb3NpdGlvbi54LFxuICAgICAgcG9zaXRpb24ueVxuICAgICk7XG5cbiAgICAvLyBBZGQgbW91c2UgbW92ZSBhbmQgbW91c2UgdXAgZXZlbnQgbGlzdGVuZXJzIHRvIHRoZSBkb2N1bWVudFxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMub25Nb3VzZU1vdmUpO1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLm9uTW91c2VVcCk7XG4gIH1cblxuICBoaWdobGlnaHRQb3RlbnRpYWxUYXJnZXRzKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnN0YXRlLmlzQ29ubmVjdGlvbkRyYWdnaW5nKCkpIHJldHVybjtcblxuICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5nZXRNb3VzZVBvc2l0aW9uKGV2ZW50KTtcbiAgICBjb25zdCB0YXJnZXRQb2ludEluZm8gPSB0aGlzLmZpbmRDb25uZWN0aW9uUG9pbnRBdFBvc2l0aW9uKFxuICAgICAgcG9zaXRpb24ueCxcbiAgICAgIHBvc2l0aW9uLnlcbiAgICApO1xuXG4gICAgaWYgKFxuICAgICAgdGFyZ2V0UG9pbnRJbmZvICYmXG4gICAgICB0YXJnZXRQb2ludEluZm8ucG9pbnQuaWQgIT09IHRoaXMucG90ZW50aWFsVGFyZ2V0UG9pbnRJZFxuICAgICkge1xuICAgICAgLy8gV2UgaGF2ZSBhIG5ldyB0YXJnZXQgcG9pbnRcbiAgICAgIHRoaXMucG90ZW50aWFsVGFyZ2V0UG9pbnRJZCA9IHRhcmdldFBvaW50SW5mby5wb2ludC5pZDtcbiAgICB9IGVsc2UgaWYgKCF0YXJnZXRQb2ludEluZm8gJiYgdGhpcy5wb3RlbnRpYWxUYXJnZXRQb2ludElkKSB7XG4gICAgICAvLyBXZSdyZSBubyBsb25nZXIgb3ZlciBhIHRhcmdldCBwb2ludFxuICAgICAgdGhpcy5wb3RlbnRpYWxUYXJnZXRQb2ludElkID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgLy8gTm9kZSBkcmFnIGxvZ2ljXG4gIC8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKlxuICAgKiBDYWxsZWQgZnJvbSB0aGUgdGVtcGxhdGUgd2hlbiB0aGUgdXNlciBwcmVzc2VzIHRoZSBtb3VzZSBidXR0b24gb24gYSBub2RlLlxuICAgKiBTdGFydHMgdGhlIGRyYWcgaW50ZXJhY3Rpb24gYW5kIHJlZ2lzdGVycyBkb2N1bWVudC1sZXZlbCBsaXN0ZW5lcnMgc28gdGhlXG4gICAqIGRyYWcgY29udGludWVzIGV2ZW4gd2hlbiB0aGUgY3Vyc29yIGxlYXZlcyB0aGUgU1ZHIGNhbnZhcy5cbiAgICovXG4gIG9uTm9kZU1vdXNlRG93bihldmVudDogTW91c2VFdmVudCwgbm9kZTogTm9kZSwgc3dpbWxhbmVJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgLy8gRG8gbm90IGludGVyZmVyZSB3aXRoIGNvbm5lY3Rpb24gZHJhZ2dpbmcgb3Igb3BlbiBwb3B1cHNcbiAgICBpZiAoXG4gICAgICB0aGlzLnN0YXRlLmlzQ29ubmVjdGlvbkRyYWdnaW5nKCkgfHxcbiAgICAgIHRoaXMucG9wdXBWaXNpYmxlIHx8XG4gICAgICB0aGlzLnNob3dTdGFydE5vZGVGb3JtUG9wdXAgfHxcbiAgICAgIHRoaXMuc2hvd1N1YmZsb3dQb3B1cFxuICAgICkgcmV0dXJuO1xuXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IC8vIFByZXZlbnQgb25DYW52YXNDbGljayBmcm9tIGZpcmluZ1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMuZ2V0TW91c2VQb3NpdGlvbihldmVudCk7XG4gICAgLy8gVGVtcGxhdGUgZm9ybXVsYTogYWJzb2x1dGVTVkdZID0gbm9kZS55ICsgc3dpbWxhbmUub3JkZXIgKiAyNjNcbiAgICBjb25zdCBhYnNvbHV0ZU5vZGVZID0gbm9kZS55ICsgc3dpbWxhbmVJbmRleCAqIHRoaXMuc3dpbWxhbmVIZWlnaHQ7XG5cbiAgICB0aGlzLmlzRHJhZ2dpbmdOb2RlID0gdHJ1ZTtcbiAgICB0aGlzLmRyYWdnaW5nTm9kZSA9IG5vZGU7XG4gICAgdGhpcy5kcmFnZ2luZ05vZGVTd2ltbGFuZUluZGV4ID0gc3dpbWxhbmVJbmRleDtcbiAgICAvLyBTdG9yZSB0aGUgb2Zmc2V0IGZyb20gdGhlIG5vZGUncyB0b3AtbGVmdCBzbyB0aGUgbm9kZSBkb2Vzbid0IGp1bXBcbiAgICB0aGlzLmRyYWdPZmZzZXRYID0gcG9zaXRpb24ueCAtIG5vZGUueDtcbiAgICB0aGlzLmRyYWdPZmZzZXRZID0gcG9zaXRpb24ueSAtIGFic29sdXRlTm9kZVk7XG5cbiAgICAvLyBTZWVkIHBlbmRpbmcgdmFsdWVzIHdpdGggdGhlIG5vZGUncyBDVVJSRU5UIHBvc2l0aW9uIHNvIHRoYXQgYSBwbGFpblxuICAgIC8vIGNsaWNrIChubyBtb3VzZW1vdmUpIGxlYXZlcyBub2RlLnkgdW5jaGFuZ2VkIGluIG9uTm9kZURyYWdFbmQuXG4gICAgdGhpcy5fcGVuZGluZ0Fic29sdXRlWSA9IGFic29sdXRlTm9kZVk7XG4gICAgdGhpcy5fcGVuZGluZ1RhcmdldFN3aW1sYW5lSW5kZXggPSBzd2ltbGFuZUluZGV4O1xuXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5vbk5vZGVEcmFnTW92ZSk7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHRoaXMub25Ob2RlRHJhZ0VuZCk7XG4gIH1cblxuICAvKipcbiAgICogQXJyb3cgZnVuY3Rpb24gKHByZXNlcnZlcyBgdGhpc2ApIOKAlCBydW5zIG9uIGV2ZXJ5IG1vdXNlbW92ZSB3aGlsZSBkcmFnZ2luZ1xuICAgKiBhIG5vZGUuICBVcGRhdGVzIG5vZGUueCAvIG5vZGUueSBpbi1wbGFjZSBzbyBBbmd1bGFyJ3MgY2hhbmdlIGRldGVjdGlvblxuICAgKiBwaWNrcyBpdCB1cCBhbmQgcmVkcmF3cyB0aGUgbm9kZSBhbmQgYWxsIGNvbm5lY3RlZCBwYXRocyBhdXRvbWF0aWNhbGx5LlxuICAgKi9cbiAgb25Ob2RlRHJhZ01vdmUgPSAoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkID0+IHtcbiAgICBpZiAoIXRoaXMuaXNEcmFnZ2luZ05vZGUgfHwgIXRoaXMuZHJhZ2dpbmdOb2RlKSByZXR1cm47XG5cbiAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMuZ2V0TW91c2VQb3NpdGlvbihldmVudCk7XG5cbiAgICAvLyBSYXcgZGVzaXJlZCBhYnNvbHV0ZSBwb3NpdGlvbiBvZiB0aGUgbm9kZSB0b3AtbGVmdFxuICAgIGNvbnN0IHJhd0Fic29sdXRlWCA9IHBvc2l0aW9uLnggLSB0aGlzLmRyYWdPZmZzZXRYO1xuICAgIGNvbnN0IHJhd0Fic29sdXRlWSA9IHBvc2l0aW9uLnkgLSB0aGlzLmRyYWdPZmZzZXRZO1xuXG4gICAgLy8gRGV0ZXJtaW5lIHdoaWNoIHN3aW1sYW5lIHRoZSBub2RlIGlzIGJlaW5nIGRyYWdnZWQgaW50byAgKGJ5IGN1cnNvciBZKVxuICAgIGxldCB0YXJnZXRTd2ltbGFuZUluZGV4ID0gTWF0aC5mbG9vcihwb3NpdGlvbi55IC8gdGhpcy5zd2ltbGFuZUhlaWdodCk7XG4gICAgdGFyZ2V0U3dpbWxhbmVJbmRleCA9IE1hdGgubWF4KFxuICAgICAgMCxcbiAgICAgIE1hdGgubWluKHRhcmdldFN3aW1sYW5lSW5kZXgsIHRoaXMuc3RhdGUuc3dpbWxhbmVzLmxlbmd0aCAtIDEpXG4gICAgKTtcblxuICAgIGNvbnN0IHN3aW1sYW5lVG9wWSA9IHRhcmdldFN3aW1sYW5lSW5kZXggKiB0aGlzLnN3aW1sYW5lSGVpZ2h0O1xuICAgIGNvbnN0IHN3aW1sYW5lQm90dG9tWSA9IHN3aW1sYW5lVG9wWSArIHRoaXMuc3dpbWxhbmVIZWlnaHQ7XG4gICAgY29uc3QgcGFkZGluZyA9IDU7XG5cbiAgICAvLyBYOiBrZWVwIG5vZGUgZnVsbHkgb24gY2FudmFzIChubyBsZWZ0L3JpZ2h0IGJvdW5kYXJ5IG5lZWRlZCBmb3Igc3dpbWxhbmVzKVxuICAgIGNvbnN0IG5ld0Fic29sdXRlWCA9IE1hdGgubWF4KHBhZGRpbmcsIHJhd0Fic29sdXRlWCk7XG5cbiAgICAvLyBZOiBjbGFtcCBzbyB0aGUgbm9kZSBzdGF5cyBpbnNpZGUgdGhlIHRhcmdldGVkIHN3aW1sYW5lXG4gICAgbGV0IG5ld0Fic29sdXRlWSA9IHJhd0Fic29sdXRlWTtcbiAgICBjb25zdCBub2RlID0gdGhpcy5kcmFnZ2luZ05vZGU7XG4gICAgaWYgKG5ld0Fic29sdXRlWSA8IHN3aW1sYW5lVG9wWSArIHBhZGRpbmcpIHtcbiAgICAgIG5ld0Fic29sdXRlWSA9IHN3aW1sYW5lVG9wWSArIHBhZGRpbmc7XG4gICAgfSBlbHNlIGlmIChuZXdBYnNvbHV0ZVkgKyBub2RlLmhlaWdodCA+IHN3aW1sYW5lQm90dG9tWSAtIHBhZGRpbmcpIHtcbiAgICAgIG5ld0Fic29sdXRlWSA9IHN3aW1sYW5lQm90dG9tWSAtIG5vZGUuaGVpZ2h0IC0gcGFkZGluZztcbiAgICB9XG5cbiAgICAvLyBDb252ZXJ0IGFic29sdXRlIFkgdG8gc3dpbWxhbmUtcmVsYXRpdmUgWSBmb3Igc3RvcmFnZVxuICAgIGNvbnN0IG5ld1JlbGF0aXZlWSA9IG5ld0Fic29sdXRlWSAtIHRhcmdldFN3aW1sYW5lSW5kZXggKiB0aGlzLnN3aW1sYW5lSGVpZ2h0O1xuXG4gICAgLy8gTGl2ZSBwcmV2aWV3OiB1cGRhdGUgcG9zaXRpb24gZGlyZWN0bHkuXG4gICAgLy8gVGVtcGxhdGUgZm9ybXVsYTogYWJzb2x1dGVTVkdZID0gbm9kZS55ICsgc3dpbWxhbmUub3JkZXIgKiAyNjNcbiAgICAvLyA9PiBub2RlLnkgPSBhYnNvbHV0ZVkgLSBzd2ltbGFuZS5vcmRlciAqIDI2MyAgKHN3aW1sYW5lLXJlbGF0aXZlKVxuICAgIC8vIFRoZSBub2RlIGlzIFNUSUxMIGluIHRoZSBzb3VyY2Ugc3dpbWxhbmUncyBhcnJheSBkdXJpbmcgcHJldmlldyxcbiAgICAvLyBzbyBzd2ltbGFuZS5vcmRlciA9IGRyYWdnaW5nTm9kZVN3aW1sYW5lSW5kZXguXG4gICAgbm9kZS54ID0gbmV3QWJzb2x1dGVYO1xuICAgIG5vZGUueSA9IG5ld0Fic29sdXRlWSAtIHRoaXMuZHJhZ2dpbmdOb2RlU3dpbWxhbmVJbmRleCAqIHRoaXMuc3dpbWxhbmVIZWlnaHQ7XG5cbiAgICAvLyBTdG9yZSBjb21wdXRlZCB2YWx1ZXMgZm9yIG9uTm9kZURyYWdFbmRcbiAgICB0aGlzLl9wZW5kaW5nVGFyZ2V0U3dpbWxhbmVJbmRleCA9IHRhcmdldFN3aW1sYW5lSW5kZXg7XG4gICAgdGhpcy5fcGVuZGluZ0Fic29sdXRlWSA9IG5ld0Fic29sdXRlWTtcbiAgfTtcblxuICAvKiogU2NyYXRjaCBmaWVsZHMgdXNlZCB0byBwYXNzIGNvbXB1dGVkIHZhbHVlcyBmcm9tIG1vdmUg4oaSIGVuZCBoYW5kbGVycy4gKi9cbiAgcHJpdmF0ZSBfcGVuZGluZ1RhcmdldFN3aW1sYW5lSW5kZXggPSAtMTtcbiAgcHJpdmF0ZSBfcGVuZGluZ0Fic29sdXRlWSA9IDA7XG5cbiAgLyoqXG4gICAqIEFycm93IGZ1bmN0aW9uIChwcmVzZXJ2ZXMgYHRoaXNgKSDigJQgZmlyZXMgb24gbW91c2V1cCBhZnRlciBhIG5vZGUgZHJhZy5cbiAgICogRmluYWxpc2VzIHRoZSBub2RlIHBvc2l0aW9uIGFuZCBwZXJmb3JtcyBzd2ltbGFuZSBtaWdyYXRpb24gaWYgbmVjZXNzYXJ5LlxuICAgKi9cbiAgb25Ob2RlRHJhZ0VuZCA9IChfZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkID0+IHtcbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLm9uTm9kZURyYWdNb3ZlKTtcbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5vbk5vZGVEcmFnRW5kKTtcblxuICAgIGlmICghdGhpcy5pc0RyYWdnaW5nTm9kZSB8fCAhdGhpcy5kcmFnZ2luZ05vZGUpIHtcbiAgICAgIHRoaXMuaXNEcmFnZ2luZ05vZGUgPSBmYWxzZTtcbiAgICAgIHRoaXMuZHJhZ2dpbmdOb2RlID0gbnVsbDtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBub2RlID0gdGhpcy5kcmFnZ2luZ05vZGU7XG4gICAgY29uc3QgZnJvbUluZGV4ID0gdGhpcy5kcmFnZ2luZ05vZGVTd2ltbGFuZUluZGV4O1xuICAgIGNvbnN0IHRvSW5kZXggPSB0aGlzLl9wZW5kaW5nVGFyZ2V0U3dpbWxhbmVJbmRleCAhPT0gLTFcbiAgICAgID8gdGhpcy5fcGVuZGluZ1RhcmdldFN3aW1sYW5lSW5kZXhcbiAgICAgIDogZnJvbUluZGV4O1xuICAgIGNvbnN0IGFic29sdXRlWSA9IHRoaXMuX3BlbmRpbmdBYnNvbHV0ZVk7XG5cbiAgICBpZiAoZnJvbUluZGV4ICE9PSB0b0luZGV4KSB7XG4gICAgICAvLyBDcm9zcy1zd2ltbGFuZSBkcm9wOiBzdGF0ZSBoZWxwZXIgbW92ZXMgbm9kZSBiZXR3ZWVuIGFycmF5cyxcbiAgICAgIC8vIHVwZGF0ZXMgY29ubmVjdGlvbnMsIGFuZCBzeW5jcyB0YWdzLiBJdCBhbHNvIHNldHMgbm9kZS55IGNvcnJlY3RseS5cbiAgICAgIHRoaXMuc3RhdGUubW92ZU5vZGVUb1N3aW1sYW5lKG5vZGUuaWQsIGZyb21JbmRleCwgdG9JbmRleCwgbm9kZS54LCBhYnNvbHV0ZVkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTYW1lIHN3aW1sYW5lOiBub2RlLnkgPSBhYnNvbHV0ZVkgLSBzd2ltbGFuZS5vcmRlciAqIDI2MyAoc3dpbWxhbmUtcmVsYXRpdmUpXG4gICAgICBub2RlLnkgPSBhYnNvbHV0ZVkgLSBmcm9tSW5kZXggKiB0aGlzLnN3aW1sYW5lSGVpZ2h0O1xuICAgIH1cblxuICAgIC8vIFJlc2V0IGRyYWcgc3RhdGVcbiAgICB0aGlzLmlzRHJhZ2dpbmdOb2RlID0gZmFsc2U7XG4gICAgdGhpcy5kcmFnZ2luZ05vZGUgPSBudWxsO1xuICAgIHRoaXMuZHJhZ2dpbmdOb2RlU3dpbWxhbmVJbmRleCA9IC0xO1xuICAgIHRoaXMuZHJhZ09mZnNldFggPSAwO1xuICAgIHRoaXMuZHJhZ09mZnNldFkgPSAwO1xuICAgIHRoaXMuX3BlbmRpbmdUYXJnZXRTd2ltbGFuZUluZGV4ID0gLTE7XG4gICAgdGhpcy5fcGVuZGluZ0Fic29sdXRlWSA9IDA7XG4gIH07XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBDU1MgY3Vyc29yIHZhbHVlIGZvciB0aGUgbm9kZSByZW5kZXJpbmcuXG4gICAqIFNob3dzICdncmFiYmluZycgd2hpbGUgdGhlIG5vZGUgaXMgYmVpbmcgZHJhZ2dlZCwgJ2dyYWInIG90aGVyd2lzZS5cbiAgICovXG4gIGdldEN1cnNvckZvck5vZGUobm9kZUlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmlzRHJhZ2dpbmdOb2RlICYmIHRoaXMuZHJhZ2dpbmdOb2RlPy5pZCA9PT0gbm9kZUlkID8gJ2dyYWJiaW5nJyA6ICdncmFiJztcbiAgfVxuXG4gIC8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAvLyBDb25uZWN0aW9uIGRyYWcgbG9naWMgKGV4aXN0aW5nKVxuICAvLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvLyBVc2UgYXJyb3cgZnVuY3Rpb25zIHRvIHByZXNlcnZlICd0aGlzJyBjb250ZXh0XG4gIG9uTW91c2VNb3ZlID0gKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgY29uc3QgcG9zaXRpb24gPSB0aGlzLmdldE1vdXNlUG9zaXRpb24oZXZlbnQpO1xuICAgIHRoaXMudXBkYXRlQ29ubmVjdGlvbkRyYWcocG9zaXRpb24ueCwgcG9zaXRpb24ueSk7XG4gICAgdGhpcy5oaWdobGlnaHRQb3RlbnRpYWxUYXJnZXRzKGV2ZW50KTtcbiAgfTtcblxuICB1cGRhdGVDb25uZWN0aW9uRHJhZyhjdXJyZW50WDogbnVtYmVyLCBjdXJyZW50WTogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMuc3RhdGUuZHJhZ2dpbmdDb25uZWN0aW9uRGF0YS5zb3VyY2VQb2ludCkge1xuICAgICAgdGhpcy5zdGF0ZS5kcmFnZ2luZ0Nvbm5lY3Rpb25EYXRhLmN1cnJlbnRYID0gY3VycmVudFg7XG4gICAgICB0aGlzLnN0YXRlLmRyYWdnaW5nQ29ubmVjdGlvbkRhdGEuY3VycmVudFkgPSBjdXJyZW50WTtcblxuICAgICAgLy8gQ2FsY3VsYXRlIHdoaWNoIHN3aW1sYW5lIHRoZSBjdXJzb3IgaXMgb3ZlclxuICAgICAgY29uc3Qgc3dpbWxhbmVJbmRleCA9IE1hdGguZmxvb3IoY3VycmVudFkgLyB0aGlzLnN3aW1sYW5lSGVpZ2h0KTtcbiAgICAgIGlmIChzd2ltbGFuZUluZGV4ID49IDAgJiYgc3dpbWxhbmVJbmRleCA8IHRoaXMuc3RhdGUuc3dpbWxhbmVzLmxlbmd0aCkge1xuICAgICAgICAvLyBFbnN1cmUgdGhlIHRhcmdldCBzd2ltbGFuZSBpcyBmdWxseSB2aXNpYmxlXG4gICAgICAgIHRoaXMuZW5zdXJlU3dpbWxhbmVJblZpZXcoc3dpbWxhbmVJbmRleCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25Nb3VzZVVwID0gKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5vbk1vdXNlTW92ZSk7XG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHRoaXMub25Nb3VzZVVwKTtcblxuICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5nZXRNb3VzZVBvc2l0aW9uKGV2ZW50KTtcbiAgICBjb25zb2xlLmxvZygnTW91c2UgdXAgYXQgcG9zaXRpb246JywgcG9zaXRpb24pO1xuICAgIGNvbnNvbGUubG9nKCdJcyBjb25uZWN0aW9uIGRyYWdnaW5nOicsIHRoaXMuc3RhdGUuaXNDb25uZWN0aW9uRHJhZ2dpbmcoKSk7XG5cbiAgICAvLyBPbmx5IHByb2NlZWQgaWYgd2UgYXJlIGRyYWdnaW5nIGEgY29ubmVjdGlvblxuICAgIGlmICghdGhpcy5zdGF0ZS5pc0Nvbm5lY3Rpb25EcmFnZ2luZygpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgd2UncmUgZHJvcHBpbmcgb250byBhIGNvbm5lY3Rpb24gcG9pbnRcbiAgICBjb25zdCB0YXJnZXRQb2ludEluZm8gPSB0aGlzLmZpbmRDb25uZWN0aW9uUG9pbnRBdFBvc2l0aW9uKFxuICAgICAgcG9zaXRpb24ueCxcbiAgICAgIHBvc2l0aW9uLnlcbiAgICApO1xuXG4gICAgaWYgKHRhcmdldFBvaW50SW5mbykge1xuICAgICAgLy8gV2UgZm91bmQgYSB0YXJnZXQgY29ubmVjdGlvbiBwb2ludFxuICAgICAgY29uc29sZS5sb2coJ0ZvdW5kIHRhcmdldCBjb25uZWN0aW9uIHBvaW50OicsIHRhcmdldFBvaW50SW5mbyk7XG5cbiAgICAgIC8vIEdldCB0aGUgc291cmNlIHBvaW50IGFuZCBzd2ltbGFuZSBpbmRleFxuICAgICAgY29uc3Qgc291cmNlUG9pbnQgPSB0aGlzLnN0YXRlLmRyYWdnaW5nQ29ubmVjdGlvbkRhdGEuc291cmNlUG9pbnQ7XG4gICAgICBjb25zdCBzb3VyY2VTd2ltbGFuZUluZGV4ID1cbiAgICAgICAgdGhpcy5zdGF0ZS5kcmFnZ2luZ0Nvbm5lY3Rpb25EYXRhLnNvdXJjZVN3aW1sYW5lSW5kZXg7XG5cbiAgICAgIGlmIChzb3VyY2VQb2ludCAmJiBzb3VyY2VTd2ltbGFuZUluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gUHJldmVudCBjb25uZWN0aW5nIGEgbm9kZSB0byBpdHNlbGZcbiAgICAgICAgaWYgKHNvdXJjZVBvaW50Lm5vZGVJZCAhPT0gdGFyZ2V0UG9pbnRJbmZvLm5vZGVJZCkge1xuICAgICAgICAgIC8vIEdldCBzb3VyY2UgYW5kIHRhcmdldCBub2RlIHR5cGVzIHRvIGNoZWNrIGlmIGNvbm5lY3Rpb24gaXMgYWxsb3dlZFxuICAgICAgICAgIGNvbnN0IHNvdXJjZU5vZGVJbmZvID0gdGhpcy5zdGF0ZS5maW5kTm9kZUJ5SWQoc291cmNlUG9pbnQubm9kZUlkKTtcbiAgICAgICAgICBjb25zdCB0YXJnZXROb2RlSW5mbyA9IHRoaXMuc3RhdGUuZmluZE5vZGVCeUlkKFxuICAgICAgICAgICAgdGFyZ2V0UG9pbnRJbmZvLm5vZGVJZFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBzb3VyY2VOb2RlSW5mbyAmJlxuICAgICAgICAgICAgdGFyZ2V0Tm9kZUluZm8gJiZcbiAgICAgICAgICAgIHRoaXMuc3RhdGUuY2FuQ29ubmVjdChcbiAgICAgICAgICAgICAgc291cmNlTm9kZUluZm8ubm9kZS50eXBlLFxuICAgICAgICAgICAgICB0YXJnZXROb2RlSW5mby5ub2RlLnR5cGVcbiAgICAgICAgICAgIClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIENyZWF0ZSB0aGUgY29ubmVjdGlvblxuICAgICAgICAgICAgY29uc3QgY29ubmVjdGlvbiA9IHtcbiAgICAgICAgICAgICAgaWQ6IGBjb25uLSR7RGF0ZS5ub3coKX0tJHtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDAwKX1gLFxuICAgICAgICAgICAgICBzb3VyY2VOb2RlSWQ6IHNvdXJjZVBvaW50Lm5vZGVJZCxcbiAgICAgICAgICAgICAgdGFyZ2V0Tm9kZUlkOiB0YXJnZXRQb2ludEluZm8ubm9kZUlkLFxuICAgICAgICAgICAgICBzb3VyY2VQb2ludElkOiBzb3VyY2VQb2ludC5pZCxcbiAgICAgICAgICAgICAgdGFyZ2V0UG9pbnRJZDogdGFyZ2V0UG9pbnRJbmZvLnBvaW50LmlkLFxuICAgICAgICAgICAgICBzb3VyY2VTd2ltbGFuZUluZGV4OiBzb3VyY2VTd2ltbGFuZUluZGV4LFxuICAgICAgICAgICAgICB0YXJnZXRTd2ltbGFuZUluZGV4OiB0YXJnZXRQb2ludEluZm8uc3dpbWxhbmVJbmRleCxcbiAgICAgICAgICAgICAgbGFiZWw6ICcnLFxuICAgICAgICAgICAgICBhY3Rpb246IG51bGwsXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAvLyBBZGQgdG8gY29ubmVjdGlvbnMgYXJyYXlcbiAgICAgICAgICAgIHRoaXMuc3RhdGUuY29ubmVjdGlvbnMucHVzaChjb25uZWN0aW9uKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdDcmVhdGVkIGRpcmVjdCBjb25uZWN0aW9uIGJldHdlZW4gbm9kZXM6JywgY29ubmVjdGlvbik7XG5cbiAgICAgICAgICAgIC8vIE5vdGlmeSBhYm91dCBjb25uZWN0aW9uIGNyZWF0aW9uXG4gICAgICAgICAgICB0aGlzLm9uQ29ubmVjdGlvbkNyZWF0ZWQoY29ubmVjdGlvbik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAnQ2Fubm90IGNvbm5lY3QgdGhlc2Ugbm9kZSB0eXBlczonLFxuICAgICAgICAgICAgICBzb3VyY2VOb2RlSW5mbz8ubm9kZS50eXBlLFxuICAgICAgICAgICAgICAnLT4nLFxuICAgICAgICAgICAgICB0YXJnZXROb2RlSW5mbz8ubm9kZS50eXBlXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnQ2Fubm90IGNvbm5lY3QgYSBub2RlIHRvIGl0c2VsZicpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEVuZCB0aGUgY29ubmVjdGlvbiBkcmFnXG4gICAgICB0aGlzLnN0YXRlLmVuZENvbm5lY3Rpb25EcmFnKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgdGhlIHBvc2l0aW9uIGlzIHdpdGhpbiBhbnkgc3dpbWxhbmVcbiAgICBjb25zdCBpc0luc2lkZVN3aW1sYW5lID0gdGhpcy5pc1Bvc2l0aW9uSW5zaWRlU3dpbWxhbmUocG9zaXRpb24ueSk7XG4gICAgY29uc29sZS5sb2coJ0lzIGluc2lkZSBzd2ltbGFuZTonLCBpc0luc2lkZVN3aW1sYW5lKTtcblxuICAgIC8vIE9ubHkgc2hvdyBwb3B1cCBpZiB3aXRoaW4gYSBzd2ltbGFuZVxuICAgIGlmIChpc0luc2lkZVN3aW1sYW5lICYmIHRoaXMuc3RhdGUuaXNDb25uZWN0aW9uRHJhZ2dpbmcoKSkge1xuICAgICAgY29uc29sZS5sb2coJ1Nob3dpbmcgY29ubmVjdGlvbiBwb3B1cCcpO1xuICAgICAgdGhpcy5zaG93Q29ubmVjdGlvblBvcHVwKHBvc2l0aW9uLngsIHBvc2l0aW9uLnkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBFbmQgdGhlIGNvbm5lY3Rpb24gZHJhZyBpZiBvdXRzaWRlIGEgc3dpbWxhbmVcbiAgICAgIGNvbnNvbGUubG9nKCdFbmRpbmcgY29ubmVjdGlvbiBkcmFnIHdpdGhvdXQgc2hvd2luZyBwb3B1cCcpO1xuICAgICAgdGhpcy5zdGF0ZS5lbmRDb25uZWN0aW9uRHJhZygpO1xuICAgIH1cbiAgfTtcblxuICBmaW5kQ29ubmVjdGlvblBvaW50QXRQb3NpdGlvbihcbiAgICB4OiBudW1iZXIsXG4gICAgeTogbnVtYmVyLFxuICAgIHRvbGVyYW5jZTogbnVtYmVyID0gMTBcbiAgKToge1xuICAgIHBvaW50OiBDb25uZWN0aW9uUG9pbnQ7XG4gICAgbm9kZUlkOiBzdHJpbmc7XG4gICAgc3dpbWxhbmVJbmRleDogbnVtYmVyO1xuICB9IHwgbnVsbCB7XG4gICAgLy8gSXRlcmF0ZSB0aHJvdWdoIGFsbCBzd2ltbGFuZXMgYW5kIG5vZGVzIHRvIGZpbmQgY29ubmVjdGlvbiBwb2ludHNcbiAgICBmb3IgKFxuICAgICAgbGV0IHN3aW1sYW5lSW5kZXggPSAwO1xuICAgICAgc3dpbWxhbmVJbmRleCA8IHRoaXMuc3RhdGUuc3dpbWxhbmVzLmxlbmd0aDtcbiAgICAgIHN3aW1sYW5lSW5kZXgrK1xuICAgICkge1xuICAgICAgY29uc3Qgc3dpbWxhbmUgPSB0aGlzLnN0YXRlLnN3aW1sYW5lc1tzd2ltbGFuZUluZGV4XTtcblxuICAgICAgaWYgKCFzd2ltbGFuZS5ub2RlcykgY29udGludWU7XG5cbiAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiBzd2ltbGFuZS5ub2Rlcykge1xuICAgICAgICBpZiAoIW5vZGUuY29ubmVjdGlvblBvaW50cykgY29udGludWU7XG5cbiAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBhYnNvbHV0ZSBwb3NpdGlvbiBvZiB0aGUgbm9kZSAoaW5jbHVkaW5nIHN3aW1sYW5lIG9mZnNldClcbiAgICAgICAgY29uc3QgYWJzb2x1dGVOb2RlWCA9IG5vZGUueDtcbiAgICAgICAgY29uc3QgYWJzb2x1dGVOb2RlWSA9IG5vZGUueSArIHN3aW1sYW5lSW5kZXggKiB0aGlzLnN3aW1sYW5lSGVpZ2h0O1xuXG4gICAgICAgIGZvciAoY29uc3QgcG9pbnQgb2Ygbm9kZS5jb25uZWN0aW9uUG9pbnRzKSB7XG4gICAgICAgICAgLy8gQ2FsY3VsYXRlIGFic29sdXRlIHBvc2l0aW9uIG9mIHRoZSBjb25uZWN0aW9uIHBvaW50XG4gICAgICAgICAgY29uc3QgcG9pbnRYID0gYWJzb2x1dGVOb2RlWCArIHBvaW50Lng7XG4gICAgICAgICAgY29uc3QgcG9pbnRZID0gYWJzb2x1dGVOb2RlWSArIHBvaW50Lnk7XG5cbiAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgZ2l2ZW4gcG9zaXRpb24gaXMgd2l0aGluIHRvbGVyYW5jZSBvZiB0aGlzIHBvaW50XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgTWF0aC5hYnMoeCAtIHBvaW50WCkgPD0gdG9sZXJhbmNlICYmXG4gICAgICAgICAgICBNYXRoLmFicyh5IC0gcG9pbnRZKSA8PSB0b2xlcmFuY2VcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHBvaW50OiBwb2ludCxcbiAgICAgICAgICAgICAgbm9kZUlkOiBub2RlLmlkLFxuICAgICAgICAgICAgICBzd2ltbGFuZUluZGV4OiBzd2ltbGFuZUluZGV4LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlzUG9zaXRpb25JbnNpZGVTd2ltbGFuZSh5OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAvLyBDaGVjayBpZiB5IHBvc2l0aW9uIGlzIHdpdGhpbiBhbnkgc3dpbWxhbmVcbiAgICBjb25zdCBzd2ltbGFuZUNvdW50ID0gdGhpcy5zdGF0ZS5zd2ltbGFuZXMubGVuZ3RoO1xuICAgIGlmIChzd2ltbGFuZUNvdW50ID09PSAwKSByZXR1cm4gZmFsc2U7XG5cbiAgICAvLyBFYWNoIHN3aW1sYW5lIGhhcyBhIGhlaWdodCBvZiAyNjNweFxuICAgIGNvbnN0IHRvdGFsU3dpbWxhbmVIZWlnaHQgPSBzd2ltbGFuZUNvdW50ICogdGhpcy5zd2ltbGFuZUhlaWdodDtcblxuICAgIC8vIENoZWNrIGlmIHkgaXMgd2l0aGluIHRoZSB0b3RhbCBoZWlnaHQgb2YgYWxsIHN3aW1sYW5lc1xuICAgIHJldHVybiB5ID49IDAgJiYgeSA8IHRvdGFsU3dpbWxhbmVIZWlnaHQ7XG4gIH1cblxuICBzaG93Q29ubmVjdGlvblBvcHVwKHg6IG51bWJlciwgeTogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coJ1Nob3dpbmcgY29ubmVjdGlvbiBwb3B1cCBhdDonLCB4LCB5KTtcblxuICAgIC8vIENvbnZlcnQgY2FudmFzIGNvb3JkaW5hdGVzIHRvIHZpZXdwb3J0IGNvb3JkaW5hdGVzIGZvciBwb3B1cCBwb3NpdGlvbmluZ1xuICAgIGNvbnN0IHZpZXdwb3J0UG9zID0gdGhpcy5nZXRWaWV3cG9ydFBvc2l0aW9uKHgsIHkpO1xuICAgIHRoaXMucG9wdXBYID0gdmlld3BvcnRQb3MueDtcbiAgICB0aGlzLnBvcHVwWSA9IHZpZXdwb3J0UG9zLnk7XG5cbiAgICAvLyBHZXQgYWxsb3dlZCBub2RlIHR5cGVzIGJhc2VkIG9uIHRoZSBzb3VyY2Ugbm9kZSB0eXBlXG4gICAgdGhpcy5hbGxvd2VkTm9kZVR5cGVzID0gdGhpcy5zdGF0ZS5nZXRBbGxvd2VkVGFyZ2V0Tm9kZVR5cGVzKCk7XG4gICAgY29uc29sZS5sb2coJ0FsbG93ZWQgbm9kZSB0eXBlczonLCB0aGlzLmFsbG93ZWROb2RlVHlwZXMpO1xuXG4gICAgLy8gT25seSBzaG93IHRoZSBwb3B1cCBpZiB3ZSBoYXZlIGFsbG93ZWQgbm9kZSB0eXBlc1xuICAgIGlmICh0aGlzLmFsbG93ZWROb2RlVHlwZXMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5wb3B1cFZpc2libGUgPSB0cnVlO1xuICAgICAgY29uc29sZS5sb2coJ1BvcHVwIHZpc2liaWxpdHkgc2V0IHRvIHRydWUnKTtcblxuICAgICAgLy8gRm9yY2UgdGhlIHBvcHVwIHRvIGJlIHZpc2libGUgaW4gdGhlIG5leHQgdGlja1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdJcyBwb3B1cCB2aXNpYmxlIGluIG5leHQgdGljazonLCB0aGlzLnBvcHVwVmlzaWJsZSk7XG4gICAgICB9LCAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTm8gYWxsb3dlZCBub2RlIHR5cGVzLCBqdXN0IGVuZCB0aGUgZHJhZ1xuICAgICAgY29uc29sZS5sb2coJ05vIGFsbG93ZWQgbm9kZSB0eXBlcywgZW5kaW5nIGRyYWcnKTtcbiAgICAgIHRoaXMuc3RhdGUuZW5kQ29ubmVjdGlvbkRyYWcoKTtcbiAgICB9XG4gIH1cblxuICBoaWRlQ29ubmVjdGlvblBvcHVwKCk6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKCdDYWxsIHRvIGhpZGUnKTtcbiAgICB0aGlzLnBvcHVwVmlzaWJsZSA9IGZhbHNlO1xuICAgIHRoaXMuc3RhdGUuZW5kQ29ubmVjdGlvbkRyYWcoKTtcbiAgfVxuXG4gIC8vIEFkZCB0aGlzIGhhbmRsZXIgdG8gY2xvc2UgdGhlIHBvcHVwIHdoZW4gY2xpY2tpbmcgb3V0c2lkZVxuICAvLyBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpjbGljaycsIFsnJGV2ZW50J10pXG4gIC8vIG9uRG9jdW1lbnRDbGljayhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAvLyAgIGlmICh0aGlzLnBvcHVwVmlzaWJsZSkge1xuICAvLyAgICAgY29uc3QgcG9wdXBFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigndmVyYmVuLXBvcC1VcCcpO1xuICAvLyAgICAgaWYgKHBvcHVwRWxlbWVudCAmJiAhcG9wdXBFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCBhcyBOb2RlKSkge1xuICAvLyAgICAgICB0aGlzLmhpZGVDb25uZWN0aW9uUG9wdXAoKTtcbiAgLy8gICAgIH1cbiAgLy8gICB9XG4gIC8vIH1cblxuICBjcmVhdGVOb2RlQ29ubmVjdGlvbihub2RlVHlwZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgcGF0aERhdGEgPSB0aGlzLnN0YXRlLmdldENvbm5lY3Rpb25QYXRoRGF0YSgpO1xuICAgIGlmICghcGF0aERhdGEpIHtcbiAgICAgIHRoaXMuaGlkZUNvbm5lY3Rpb25Qb3B1cCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIHRoaXMgbm9kZSB0eXBlIGlzIGFsbG93ZWQgdG8gYmUgY3JlYXRlZFxuICAgIGNvbnN0IGFsbG93ZWRUeXBlcyA9IHRoaXMuc3RhdGUuZ2V0QWxsb3dlZFRhcmdldE5vZGVUeXBlcygpO1xuICAgIGlmICghYWxsb3dlZFR5cGVzLmluY2x1ZGVzKG5vZGVUeXBlKSkge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgYENhbm5vdCBjcmVhdGUgY29ubmVjdGlvbiB0byAke25vZGVUeXBlfSBmcm9tIGN1cnJlbnQgbm9kZSB0eXBlYFxuICAgICAgKTtcbiAgICAgIHRoaXMuaGlkZUNvbm5lY3Rpb25Qb3B1cCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHsgZW5kWCwgZW5kWSB9ID0gcGF0aERhdGE7XG5cbiAgICAvLyBEZXRlcm1pbmUgdGhlIHRhcmdldCBzd2ltbGFuZSBmcm9tIHRoZSBkcm9wIHBvc2l0aW9uIChOT1QgdGhlIHNvdXJjZVxuICAgIC8vIHN3aW1sYW5lKS4gYGFkZE5vZGVgIGV4cGVjdHMgYW4gYWJzb2x1dGUgY2FudmFzIFkgcGx1cyB0aGUgdGFyZ2V0XG4gICAgLy8gc3dpbWxhbmUgaW5kZXgsIGFuZCBwZXJmb3JtcyB0aGUgc3dpbWxhbmUtcmVsYXRpdmUgY29udmVyc2lvbiBpdHNlbGYuXG4gICAgbGV0IHRhcmdldFN3aW1sYW5lSW5kZXggPSBNYXRoLmZsb29yKGVuZFkgLyB0aGlzLnN3aW1sYW5lSGVpZ2h0KTtcbiAgICB0YXJnZXRTd2ltbGFuZUluZGV4ID0gTWF0aC5tYXgoXG4gICAgICAwLFxuICAgICAgTWF0aC5taW4odGFyZ2V0U3dpbWxhbmVJbmRleCwgdGhpcy5zdGF0ZS5zd2ltbGFuZXMubGVuZ3RoIC0gMSlcbiAgICApO1xuXG4gICAgLy8gR2V0IHNvdXJjZSBub2RlIGluZm9cbiAgICBjb25zdCBzb3VyY2VQb2ludCA9IHRoaXMuc3RhdGUuZHJhZ2dpbmdDb25uZWN0aW9uRGF0YS5zb3VyY2VQb2ludDtcbiAgICBpZiAoIXNvdXJjZVBvaW50KSB7XG4gICAgICB0aGlzLmhpZGVDb25uZWN0aW9uUG9wdXAoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzb3VyY2VOb2RlSW5mbyA9IHRoaXMuc3RhdGUuZmluZE5vZGVCeUlkKHNvdXJjZVBvaW50Lm5vZGVJZCk7XG4gICAgaWYgKCFzb3VyY2VOb2RlSW5mbykge1xuICAgICAgdGhpcy5oaWRlQ29ubmVjdGlvblBvcHVwKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gSWYgY29ubmVjdGluZyBmcm9tIGEgZGVjaXNpb24gdG8gYSBzdGFnZSwgc2hvdyBjb25kaXRpb24gcG9wdXAgZmlyc3RcbiAgICBpZiAoc291cmNlTm9kZUluZm8ubm9kZS50eXBlID09PSAnZGVjaXNpb24nICYmIG5vZGVUeXBlID09PSAnc3RhZ2UnKSB7XG4gICAgICAvLyBTdG9yZSBpbmZvcm1hdGlvbiBmb3IgbGF0ZXIgc3RhZ2UgY3JlYXRpb25cbiAgICAgIHRoaXMucGVuZGluZ0RlY2lzaW9uQ29ubmVjdGlvbiA9IHtcbiAgICAgICAgZGVjaXNpb25Ob2RlSWQ6IHNvdXJjZU5vZGVJbmZvLm5vZGUuaWQsXG4gICAgICAgIHN3aW1sYW5lSW5kZXg6IHRhcmdldFN3aW1sYW5lSW5kZXgsXG4gICAgICAgIHg6IGVuZFgsXG4gICAgICAgIHk6IGVuZFksXG4gICAgICB9O1xuXG4gICAgICAvLyBDZW50ZXIgdGhlIHBvcHVwIG92ZXIgdGhlIGNvbm5lY3Rpb24gZW5kcG9pbnRcbiAgICAgIHRoaXMuZGVjaXNpb25Db25kaXRpb25Qb3B1cFggPSBlbmRYO1xuICAgICAgdGhpcy5kZWNpc2lvbkNvbmRpdGlvblBvcHVwWSA9IGVuZFkgLSAxNTA7IC8vIFBvc2l0aW9uIGFib3ZlIHRoZSBlbmRwb2ludFxuXG4gICAgICAvLyBTZXQgZGVjaXNpb24gbm9kZSBJRFxuICAgICAgdGhpcy5hY3RpdmVEZWNpc2lvbk5vZGVJZCA9IHNvdXJjZU5vZGVJbmZvLm5vZGUuaWQ7XG4gICAgICB0aGlzLnNob3dEZWNpc2lvbkNvbmRpdGlvbkRpYWxvZyA9IHRydWU7XG5cbiAgICAgIC8vIEVuZCB0aGUgY29ubmVjdGlvbiBkcmFnXG4gICAgICB0aGlzLmhpZGVDb25uZWN0aW9uUG9wdXAoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgcHJlY29uZGl0aW9ucyBiYXNlZCBvbiBub2RlIHR5cGVcbiAgICBpZiAobm9kZVR5cGUgPT09ICdzdGFnZScpIHtcbiAgICAgIC8vIENyZWF0ZSB0aGUgc3RhZ2UgaW4gdGhlIHRhcmdldCBzd2ltbGFuZS4gYGFkZE5vZGVgIGNvbnZlcnRzIHRoZVxuICAgICAgLy8gYWJzb2x1dGUgZW5kWSB0byBhIHN3aW1sYW5lLXJlbGF0aXZlIHBvc2l0aW9uIGludGVybmFsbHkuXG4gICAgICBjb25zdCBuZXdOb2RlID0gdGhpcy5zdGF0ZS5hZGROb2RlKFxuICAgICAgICB0YXJnZXRTd2ltbGFuZUluZGV4LFxuICAgICAgICAnc3RhZ2UnLFxuICAgICAgICBlbmRYLFxuICAgICAgICBlbmRZLFxuICAgICAgICB7IE5hbWU6ICdOZXcgU3RhZ2UnIH0gLy8gQWRkIGRlZmF1bHQgcHJvcGVydGllc1xuICAgICAgKTtcblxuICAgICAgaWYgKFxuICAgICAgICBuZXdOb2RlICYmXG4gICAgICAgIG5ld05vZGUuY29ubmVjdGlvblBvaW50cyAmJlxuICAgICAgICBuZXdOb2RlLmNvbm5lY3Rpb25Qb2ludHMubGVuZ3RoID4gMCAmJlxuICAgICAgICBzb3VyY2VQb2ludFxuICAgICAgKSB7XG4gICAgICAgIC8vIEhhbmRsZSBjb25uZWN0aW9uIGNyZWF0aW9uXG4gICAgICAgIGNvbnN0IG9wcG9zaW5nVHlwZSA9IHtcbiAgICAgICAgICByaWdodDogJ2xlZnQnLFxuICAgICAgICAgIGxlZnQ6ICdyaWdodCcsXG4gICAgICAgICAgdG9wOiAnYm90dG9tJyxcbiAgICAgICAgICBib3R0b206ICd0b3AnLFxuICAgICAgICB9W3NvdXJjZVBvaW50LnR5cGVdIGFzICd0b3AnIHwgJ3JpZ2h0JyB8ICdib3R0b20nIHwgJ2xlZnQnO1xuXG4gICAgICAgIGNvbnN0IHRhcmdldFBvaW50ID0gbmV3Tm9kZS5jb25uZWN0aW9uUG9pbnRzLmZpbmQoXG4gICAgICAgICAgKHApID0+IHAudHlwZSA9PT0gb3Bwb3NpbmdUeXBlXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKHRhcmdldFBvaW50KSB7XG4gICAgICAgICAgLy8gQ3JlYXRlIHRoZSBjb25uZWN0aW9uXG4gICAgICAgICAgY29uc3QgY29ubmVjdGlvbiA9IHRoaXMuc3RhdGUuY3JlYXRlQ29ubmVjdGlvbihcbiAgICAgICAgICAgIG5ld05vZGUuaWQsXG4gICAgICAgICAgICB0YXJnZXRQb2ludC5pZCxcbiAgICAgICAgICAgIHRhcmdldFN3aW1sYW5lSW5kZXhcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKGNvbm5lY3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXMub25Db25uZWN0aW9uQ3JlYXRlZChjb25uZWN0aW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5oaWRlQ29ubmVjdGlvblBvcHVwKCk7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIGlmIChub2RlVHlwZSA9PT0gJ3N1YmZsb3cnKSB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgJ0NyZWF0aW5nIHN1YmZsb3cgZnJvbSBjb25uZWN0aW9uIGF0OicsXG4gICAgICAgIGVuZFgsXG4gICAgICAgIGVuZFksXG4gICAgICAgICdzd2ltbGFuZTonLFxuICAgICAgICB0YXJnZXRTd2ltbGFuZUluZGV4XG4gICAgICApO1xuICAgICAgLy8gU2hvdyB3b3JrZmxvdyBzZWxlY3Rpb24gcG9wdXAgYW5kIHN0b3JlIGNvbm5lY3Rpb24gZGF0YSBmb3IgbGF0ZXIgdXNlXG4gICAgICB0aGlzLnNob3dTdWJmbG93U2VsZWN0aW9uUG9wdXAoZW5kWCwgZW5kWSwgdGFyZ2V0U3dpbWxhbmVJbmRleCk7XG4gICAgICB0aGlzLmhpZGVDb25uZWN0aW9uUG9wdXAoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBGb3Igb3RoZXIgbm9kZXMgQ3JlYXRlIHRoZSBuZXcgbm9kZSBhdCB0aGUgZW5kIHBvc2l0aW9uIG9mIHRoZSBjb25uZWN0aW9uXG4gICAgY29uc3QgbmV3Tm9kZSA9IHRoaXMuc3RhdGUuYWRkTm9kZShcbiAgICAgIHRhcmdldFN3aW1sYW5lSW5kZXgsXG4gICAgICBub2RlVHlwZSBhcyBUb29sVHlwZSxcbiAgICAgIGVuZFgsXG4gICAgICBlbmRZXG4gICAgKTtcblxuICAgIGlmIChcbiAgICAgIG5ld05vZGUgJiZcbiAgICAgIG5ld05vZGUuY29ubmVjdGlvblBvaW50cyAmJlxuICAgICAgbmV3Tm9kZS5jb25uZWN0aW9uUG9pbnRzLmxlbmd0aCA+IDBcbiAgICApIHtcbiAgICAgIC8vIEZpbmQgdGhlIG1vc3QgYXBwcm9wcmlhdGUgY29ubmVjdGlvbiBwb2ludCAoY2xvc2VzdCB0byB0aGUgc291cmNlKVxuICAgICAgaWYgKHNvdXJjZVBvaW50KSB7XG4gICAgICAgIC8vIEZvciBzaW1wbGljaXR5LCB1c2UgdGhlIGZpcnN0IGNvbm5lY3Rpb24gcG9pbnQgb2Ygb3Bwb3NpbmcgdHlwZVxuICAgICAgICAvLyBJbiBhIHJlYWwgaW1wbGVtZW50YXRpb24sIHlvdSdkIGZpbmQgdGhlIGNsb3Nlc3Qgb3IgbW9zdCBhcHByb3ByaWF0ZSBwb2ludFxuICAgICAgICBsZXQgdGFyZ2V0UG9pbnQ7XG5cbiAgICAgICAgLy8gSWYgc291cmNlIGlzIG9uIHJpZ2h0LCB0YXJnZXQgc2hvdWxkIGJlIG9uIGxlZnQsIGV0Yy5cbiAgICAgICAgY29uc3Qgb3Bwb3NpbmdUeXBlID0ge1xuICAgICAgICAgIHJpZ2h0OiAnbGVmdCcsXG4gICAgICAgICAgbGVmdDogJ3JpZ2h0JyxcbiAgICAgICAgICB0b3A6ICdib3R0b20nLFxuICAgICAgICAgIGJvdHRvbTogJ3RvcCcsXG4gICAgICAgIH1bc291cmNlUG9pbnQudHlwZV0gYXMgJ3RvcCcgfCAncmlnaHQnIHwgJ2JvdHRvbScgfCAnbGVmdCc7XG5cbiAgICAgICAgdGFyZ2V0UG9pbnQgPSBuZXdOb2RlLmNvbm5lY3Rpb25Qb2ludHMuZmluZChcbiAgICAgICAgICAocCkgPT4gcC50eXBlID09PSBvcHBvc2luZ1R5cGVcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAodGFyZ2V0UG9pbnQpIHtcbiAgICAgICAgICAvLyBDcmVhdGUgdGhlIGNvbm5lY3Rpb25cbiAgICAgICAgICBjb25zdCBjb25uZWN0aW9uID0gdGhpcy5zdGF0ZS5jcmVhdGVDb25uZWN0aW9uKFxuICAgICAgICAgICAgbmV3Tm9kZS5pZCxcbiAgICAgICAgICAgIHRhcmdldFBvaW50LmlkLFxuICAgICAgICAgICAgdGFyZ2V0U3dpbWxhbmVJbmRleFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAoY29ubmVjdGlvbikge1xuICAgICAgICAgICAgdGhpcy5vbkNvbm5lY3Rpb25DcmVhdGVkKGNvbm5lY3Rpb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzb3VyY2VOb2RlSW5mbykge1xuICAgICAgdGhpcy51cGRhdGVOb2RlQ29ubmVjdGlvbnMoc291cmNlTm9kZUluZm8ubm9kZSk7XG4gICAgfVxuXG4gICAgLy8gRW5kIHRoZSBjb25uZWN0aW9uIGRyYWdcbiAgICB0aGlzLmhpZGVDb25uZWN0aW9uUG9wdXAoKTtcbiAgfVxuXG4gIC8vIE1ldGhvZCB0byBoYW5kbGUgc2F2aW5nIHRoZSBjb25kaXRpb25cbiAgb25EZWNpc2lvbkNvbmRpdGlvblNhdmVkKGV2ZW50OiB7XG4gICAgY29ubmVjdGlvbklkOiBzdHJpbmc7XG4gICAgY29uZGl0aW9uOiBzdHJpbmc7XG4gIH0pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucGVuZGluZ0RlY2lzaW9uQ29ubmVjdGlvbikge1xuICAgICAgdGhpcy5zaG93RGVjaXNpb25Db25kaXRpb25EaWFsb2cgPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB7IGRlY2lzaW9uTm9kZUlkLCBzd2ltbGFuZUluZGV4LCB4LCB5IH0gPVxuICAgICAgdGhpcy5wZW5kaW5nRGVjaXNpb25Db25uZWN0aW9uO1xuXG4gICAgLy8gQ3JlYXRlIHRoZSBzdGFnZSBkaXJlY3RseSB3aXRoIGRlZmF1bHQgcHJvcGVydGllc1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLnN0YXRlLmFkZE5vZGUoXG4gICAgICBzd2ltbGFuZUluZGV4LFxuICAgICAgJ3N0YWdlJyxcbiAgICAgIHgsXG4gICAgICB5LFxuICAgICAgeyBOYW1lOiAnTmV3IFN0YWdlJyB9IC8vIEFkZCBkZWZhdWx0IHByb3BlcnRpZXNcbiAgICApO1xuXG4gICAgaWYgKG5vZGUpIHtcbiAgICAgIGNvbnN0IGRlY2lzaW9uTm9kZUluZm8gPSB0aGlzLnN0YXRlLmZpbmROb2RlQnlJZChkZWNpc2lvbk5vZGVJZCk7XG5cbiAgICAgIGlmIChcbiAgICAgICAgZGVjaXNpb25Ob2RlSW5mbyAmJlxuICAgICAgICBub2RlLmNvbm5lY3Rpb25Qb2ludHMgJiZcbiAgICAgICAgbm9kZS5jb25uZWN0aW9uUG9pbnRzLmxlbmd0aCA+IDBcbiAgICAgICkge1xuICAgICAgICAvLyBGaW5kIGEgc3VpdGFibGUgY29ubmVjdGlvbiBwb2ludCBmcm9tIHRoZSBkZWNpc2lvbiBub2RlXG4gICAgICAgIGNvbnN0IGRlY2lzaW9uTm9kZSA9IGRlY2lzaW9uTm9kZUluZm8ubm9kZTtcbiAgICAgICAgY29uc3QgZGVjaXNpb25Ob2RlUG9pbnRzID0gZGVjaXNpb25Ob2RlLmNvbm5lY3Rpb25Qb2ludHMgfHwgW107XG4gICAgICAgIGNvbnN0IHNvdXJjZVBvaW50ID0gZGVjaXNpb25Ob2RlUG9pbnRzLmZpbmQoXG4gICAgICAgICAgKHApID0+IHAudHlwZSA9PT0gJ3JpZ2h0JyB8fCBwLnR5cGUgPT09ICdib3R0b20nXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKHNvdXJjZVBvaW50KSB7XG4gICAgICAgICAgLy8gRmluZCBvcHBvc2luZyB0eXBlIGNvbm5lY3Rpb24gcG9pbnQgb24gdGhlIG5ldyBzdGFnZVxuICAgICAgICAgIGNvbnN0IG9wcG9zaW5nVHlwZSA9IHtcbiAgICAgICAgICAgIHJpZ2h0OiAnbGVmdCcsXG4gICAgICAgICAgICBib3R0b206ICd0b3AnLFxuICAgICAgICAgICAgbGVmdDogJ3JpZ2h0JyxcbiAgICAgICAgICAgIHRvcDogJ2JvdHRvbScsXG4gICAgICAgICAgfVtzb3VyY2VQb2ludC50eXBlXSBhcyAndG9wJyB8ICdyaWdodCcgfCAnYm90dG9tJyB8ICdsZWZ0JztcblxuICAgICAgICAgIGNvbnN0IHRhcmdldFBvaW50ID0gbm9kZS5jb25uZWN0aW9uUG9pbnRzLmZpbmQoXG4gICAgICAgICAgICAocCkgPT4gcC50eXBlID09PSBvcHBvc2luZ1R5cGVcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKHRhcmdldFBvaW50KSB7XG4gICAgICAgICAgICAvLyBDcmVhdGUgY29ubmVjdGlvbiB3aXRoIGNvbmRpdGlvblxuICAgICAgICAgICAgY29uc3QgY29ubmVjdGlvbiA9IHtcbiAgICAgICAgICAgICAgaWQ6IGBjb25uLSR7RGF0ZS5ub3coKX0tJHtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDAwKX1gLFxuICAgICAgICAgICAgICBzb3VyY2VOb2RlSWQ6IGRlY2lzaW9uTm9kZS5pZCxcbiAgICAgICAgICAgICAgdGFyZ2V0Tm9kZUlkOiBub2RlLmlkLFxuICAgICAgICAgICAgICBzb3VyY2VQb2ludElkOiBzb3VyY2VQb2ludC5pZCxcbiAgICAgICAgICAgICAgdGFyZ2V0UG9pbnRJZDogdGFyZ2V0UG9pbnQuaWQsXG4gICAgICAgICAgICAgIHNvdXJjZVN3aW1sYW5lSW5kZXg6IGRlY2lzaW9uTm9kZUluZm8uc3dpbWxhbmVJbmRleCxcbiAgICAgICAgICAgICAgdGFyZ2V0U3dpbWxhbmVJbmRleDogc3dpbWxhbmVJbmRleCxcbiAgICAgICAgICAgICAgY29uZGl0aW9uOiBldmVudC5jb25kaXRpb24sXG4gICAgICAgICAgICAgIGxhYmVsOiAnJyxcbiAgICAgICAgICAgICAgYWN0aW9uOiBudWxsLFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgLy8gQWRkIGNvbm5lY3Rpb24gdG8gdGhlIHN0YXRlXG4gICAgICAgICAgICB0aGlzLnN0YXRlLmNvbm5lY3Rpb25zLnB1c2goY29ubmVjdGlvbik7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgJ0NyZWF0ZWQgZGVjaXNpb24gY29ubmVjdGlvbiB3aXRoIGNvbmRpdGlvbjonLFxuICAgICAgICAgICAgICBjb25uZWN0aW9uXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENsZWFyIHBlbmRpbmcgZGF0YVxuICAgIHRoaXMucGVuZGluZ0RlY2lzaW9uQ29ubmVjdGlvbiA9IG51bGw7XG4gICAgdGhpcy5wZW5kaW5nRGVjaXNpb25Db25kaXRpb24gPSAnJztcblxuICAgIC8vIEhpZGUgdGhlIGNvbmRpdGlvbiBwb3B1cFxuICAgIHRoaXMuc2hvd0RlY2lzaW9uQ29uZGl0aW9uRGlhbG9nID0gZmFsc2U7XG4gIH1cblxuICBvbkRlY2lzaW9uQ29uZGl0aW9uQ2FuY2VsbGVkKCk6IHZvaWQge1xuICAgIHRoaXMuc2hvd0RlY2lzaW9uQ29uZGl0aW9uRGlhbG9nID0gZmFsc2U7XG4gICAgLy8gRG9uJ3QgY3JlYXRlIHRoZSBzdGFnZSBvciBjb25uZWN0aW9uXG4gIH1cblxuICBnZXRDb25uZWN0aW9uUGF0aCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHBhdGhEYXRhID0gdGhpcy5zdGF0ZS5nZXRDb25uZWN0aW9uUGF0aERhdGEoKTtcbiAgICBpZiAoIXBhdGhEYXRhKSByZXR1cm4gJyc7XG5cbiAgICBjb25zdCB7IHN0YXJ0WCwgc3RhcnRZLCBlbmRYLCBlbmRZIH0gPSBwYXRoRGF0YTtcbiAgICBjb25zdCBzb3VyY2VQb2ludCA9IHRoaXMuc3RhdGUuZHJhZ2dpbmdDb25uZWN0aW9uRGF0YS5zb3VyY2VQb2ludDtcblxuICAgIGlmICghc291cmNlUG9pbnQpIHJldHVybiAnJztcblxuICAgIHJldHVybiB0aGlzLmdldE9ydGhvZ29uYWxQYXRoKHN0YXJ0WCwgc3RhcnRZLCBlbmRYLCBlbmRZLCBzb3VyY2VQb2ludC50eXBlKTtcbiAgfVxuXG4gIGdldENvbm5lY3Rpb25QYXRoRm9yU2F2ZWRDb25uZWN0aW9uKGNvbm5lY3Rpb246IENvbm5lY3Rpb24pOiBzdHJpbmcge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXRoRGF0YSA9IHRoaXMuc3RhdGUuZ2V0Q29ubmVjdGlvbkRhdGEoY29ubmVjdGlvbik7XG4gICAgICBpZiAoIXBhdGhEYXRhKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ05vIHBhdGggZGF0YSBmb3IgY29ubmVjdGlvbjonLCBjb25uZWN0aW9uKTtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB7IHN0YXJ0WCwgc3RhcnRZLCBlbmRYLCBlbmRZIH0gPSBwYXRoRGF0YTtcblxuICAgICAgY29uc3Qgc291cmNlTm9kZUluZm8gPSB0aGlzLnN0YXRlLmZpbmROb2RlQnlJZChjb25uZWN0aW9uLnNvdXJjZU5vZGVJZCk7XG4gICAgICBpZiAoIXNvdXJjZU5vZGVJbmZvKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1NvdXJjZSBub2RlIG5vdCBmb3VuZCBmb3IgY29ubmVjdGlvbjonLCBjb25uZWN0aW9uKTtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzb3VyY2VOb2RlID0gc291cmNlTm9kZUluZm8ubm9kZTtcbiAgICAgIGNvbnN0IHNvdXJjZVBvaW50ID0gc291cmNlTm9kZS5jb25uZWN0aW9uUG9pbnRzPy5maW5kKFxuICAgICAgICAocCkgPT4gcC5pZCA9PT0gY29ubmVjdGlvbi5zb3VyY2VQb2ludElkXG4gICAgICApO1xuXG4gICAgICBpZiAoIXNvdXJjZVBvaW50KSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1NvdXJjZSBwb2ludCBub3QgZm91bmQgZm9yIGNvbm5lY3Rpb246JywgY29ubmVjdGlvbik7XG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuZ2V0T3J0aG9nb25hbFBhdGgoXG4gICAgICAgIHN0YXJ0WCxcbiAgICAgICAgc3RhcnRZLFxuICAgICAgICBlbmRYLFxuICAgICAgICBlbmRZLFxuICAgICAgICBzb3VyY2VQb2ludC50eXBlXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBnZW5lcmF0aW5nIHBhdGggZm9yIGNvbm5lY3Rpb246JywgY29ubmVjdGlvbiwgZXJyb3IpO1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfVxuXG4gIGdldE9ydGhvZ29uYWxQYXRoKFxuICAgIHN0YXJ0WDogbnVtYmVyLFxuICAgIHN0YXJ0WTogbnVtYmVyLFxuICAgIGVuZFg6IG51bWJlcixcbiAgICBlbmRZOiBudW1iZXIsXG4gICAgcG9pbnRUeXBlOiAndG9wJyB8ICdyaWdodCcgfCAnYm90dG9tJyB8ICdsZWZ0J1xuICApOiBzdHJpbmcge1xuICAgIC8vIERldGVybWluZSBpbml0aWFsIGRpcmVjdGlvbiBiYXNlZCBvbiBjb25uZWN0aW9uIHBvaW50IHR5cGVcbiAgICBsZXQgcGF0aCA9ICcnO1xuXG4gICAgLy8gRm9yIHNpZGUgcG9pbnRzIChsZWZ0L3JpZ2h0KSwgc3RhcnQgd2l0aCBob3Jpem9udGFsIGxpbmVcbiAgICBpZiAocG9pbnRUeXBlID09PSAnbGVmdCcgfHwgcG9pbnRUeXBlID09PSAncmlnaHQnKSB7XG4gICAgICAvLyBDYWxjdWxhdGUgaG9yaXpvbnRhbCBkaXN0YW5jZVxuICAgICAgY29uc3QgaG9yaXpvbnRhbERpc3QgPSBlbmRYIC0gc3RhcnRYO1xuXG4gICAgICAvLyBJZiB0aGUgZW5kIHBvaW50IGlzIHZlcnkgY2xvc2UgaG9yaXpvbnRhbGx5LCB1c2UgYSBzaW1wbGUgMy1zZWdtZW50IHBhdGhcbiAgICAgIGlmIChNYXRoLmFicyhob3Jpem9udGFsRGlzdCkgPCAzMCkge1xuICAgICAgICBjb25zdCBtaWRZID0gKHN0YXJ0WSArIGVuZFkpIC8gMjtcbiAgICAgICAgcGF0aCA9IGBNICR7c3RhcnRYfSAke3N0YXJ0WX0gSCAke2VuZFh9IFYgJHttaWRZfSBWICR7ZW5kWX1gO1xuICAgICAgfVxuICAgICAgLy8gT3RoZXJ3aXNlLCBjcmVhdGUgYSBwYXRoIHdpdGggaG9yaXpvbnRhbCBzZWdtZW50IGZpcnN0LCB0aGVuIHZlcnRpY2FsLCB0aGVuIGhvcml6b250YWxcbiAgICAgIGVsc2Uge1xuICAgICAgICBwYXRoID0gYE0gJHtzdGFydFh9ICR7c3RhcnRZfSBIICR7c3RhcnRYICsgaG9yaXpvbnRhbERpc3QgLyAyXG4gICAgICAgICAgfSBWICR7ZW5kWX0gSCAke2VuZFh9YDtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gRm9yIHRvcC9ib3R0b20gcG9pbnRzLCBzdGFydCB3aXRoIHZlcnRpY2FsIGxpbmVcbiAgICBlbHNlIGlmIChwb2ludFR5cGUgPT09ICd0b3AnIHx8IHBvaW50VHlwZSA9PT0gJ2JvdHRvbScpIHtcbiAgICAgIC8vIENhbGN1bGF0ZSB2ZXJ0aWNhbCBkaXN0YW5jZVxuICAgICAgY29uc3QgdmVydGljYWxEaXN0ID0gZW5kWSAtIHN0YXJ0WTtcblxuICAgICAgLy8gSWYgdGhlIGVuZCBwb2ludCBpcyB2ZXJ5IGNsb3NlIHZlcnRpY2FsbHksIHVzZSBhIHNpbXBsZSAzLXNlZ21lbnQgcGF0aFxuICAgICAgaWYgKE1hdGguYWJzKHZlcnRpY2FsRGlzdCkgPCAzMCkge1xuICAgICAgICBjb25zdCBtaWRYID0gKHN0YXJ0WCArIGVuZFgpIC8gMjtcbiAgICAgICAgcGF0aCA9IGBNICR7c3RhcnRYfSAke3N0YXJ0WX0gViAke2VuZFl9IEggJHttaWRYfSBIICR7ZW5kWH1gO1xuICAgICAgfVxuICAgICAgLy8gT3RoZXJ3aXNlLCBjcmVhdGUgYSBwYXRoIHdpdGggdmVydGljYWwgc2VnbWVudCBmaXJzdCwgdGhlbiBob3Jpem9udGFsLCB0aGVuIHZlcnRpY2FsXG4gICAgICBlbHNlIHtcbiAgICAgICAgcGF0aCA9IGBNICR7c3RhcnRYfSAke3N0YXJ0WX0gViAke3N0YXJ0WSArIHZlcnRpY2FsRGlzdCAvIDJcbiAgICAgICAgICB9IEggJHtlbmRYfSBWICR7ZW5kWX1gO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwYXRoO1xuICB9XG5cbiAgc2VsZWN0Rm9ybUZvclN0YWdlKGZvcm06IEZvcm0gfCBudWxsLCBub2RlOiBOb2RlKSB7XG4gICAgLy8gSWYgZm9ybSBpcyBudWxsLCB3ZSdyZSBjbGVhcmluZyB0aGUgc2VsZWN0aW9uXG4gICAgaWYgKG5vZGUpIHtcbiAgICAgIGlmICghbm9kZS5zdGFnZURhdGEpIHtcbiAgICAgICAgbm9kZS5zdGFnZURhdGEgPSB7fTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZvcm0pIHtcbiAgICAgICAgbm9kZS5zdGFnZURhdGEuZm9ybUlkID0gZm9ybS5Db2RlO1xuICAgICAgICBub2RlLnN0YWdlRGF0YS5mb3JtTmFtZSA9IGZvcm0uTmFtZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIENsZWFyIGZvcm0gc2VsZWN0aW9uXG4gICAgICAgIGRlbGV0ZSBub2RlLnN0YWdlRGF0YS5mb3JtSWQ7XG4gICAgICAgIGRlbGV0ZSBub2RlLnN0YWdlRGF0YS5mb3JtTmFtZTtcbiAgICAgIH1cblxuICAgICAgLy8gRW1pdCBhbiBldmVudCB0byB1cGRhdGUgdGhlIHN0YWdlIGRhdGFcbiAgICAgIHRoaXMub25TdGFnZVByb3BlcnRpZXNVcGRhdGVkKHtcbiAgICAgICAgbm9kZUlkOiBub2RlLmlkLFxuICAgICAgICBzdGFnZURhdGE6IG5vZGUuc3RhZ2VEYXRhLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgb25TdGFnZVByb3BlcnRpZXNVcGRhdGVkKGV2ZW50OiB7XG4gICAgbm9kZUlkOiBzdHJpbmc7XG4gICAgc3RhZ2VEYXRhOiBQYXJ0aWFsPFdvcmtmbG93U3RhZ2U+O1xuICB9KTogdm9pZCB7XG4gICAgLy8gRmluZCB0aGUgbm9kZSBpbiB0aGUgc3dpbWxhbmVzXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnN0YXRlLnN3aW1sYW5lcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qgc3dpbWxhbmUgPSB0aGlzLnN0YXRlLnN3aW1sYW5lc1tpXTtcbiAgICAgIGNvbnN0IG5vZGVJbmRleCA9IHN3aW1sYW5lLm5vZGVzPy5maW5kSW5kZXgoKG4pID0+IG4uaWQgPT09IGV2ZW50Lm5vZGVJZCk7XG5cbiAgICAgIGlmIChub2RlSW5kZXggIT09IHVuZGVmaW5lZCAmJiBub2RlSW5kZXggPj0gMCkge1xuICAgICAgICAvLyBVcGRhdGUgdGhlIHN0YWdlIGRhdGFcbiAgICAgICAgaWYgKHN3aW1sYW5lLm5vZGVzKSB7XG4gICAgICAgICAgc3dpbWxhbmUubm9kZXNbbm9kZUluZGV4XS5zdGFnZURhdGEgPSB7XG4gICAgICAgICAgICAuLi5zd2ltbGFuZS5ub2Rlc1tub2RlSW5kZXhdLnN0YWdlRGF0YSxcbiAgICAgICAgICAgIC4uLmV2ZW50LnN0YWdlRGF0YSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgJ1VwZGF0ZWQgc3RhZ2UgZGF0YSBpbiBzd2ltbGFuZTonLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgICdub2RlOicsXG4gICAgICAgICAgICBub2RlSW5kZXgsXG4gICAgICAgICAgICAnZGF0YTonLFxuICAgICAgICAgICAgc3dpbWxhbmUubm9kZXNbbm9kZUluZGV4XS5zdGFnZURhdGFcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uQ29ubmVjdGlvbkNyZWF0ZWQoY29ubmVjdGlvbjogQ29ubmVjdGlvbik6IHZvaWQge1xuICAgIC8vIEFmdGVyIGEgY29ubmVjdGlvbiBpcyBjcmVhdGVkLCByZWZyZXNoIHRoZSBzb3VyY2Ugbm9kZSB0byB1cGRhdGUgaXRzIHN0YXRlXG4gICAgY29uc3Qgc291cmNlTm9kZUluZm8gPSB0aGlzLnN0YXRlLmZpbmROb2RlQnlJZChjb25uZWN0aW9uLnNvdXJjZU5vZGVJZCk7XG4gICAgaWYgKHNvdXJjZU5vZGVJbmZvICYmIHNvdXJjZU5vZGVJbmZvLm5vZGUudHlwZSA9PT0gJ3N0YWdlJykge1xuICAgICAgLy8gUmVmcmVzaCBub2RlIHN0YXRlXG4gICAgICB0aGlzLnVwZGF0ZU5vZGVDb25uZWN0aW9ucyhzb3VyY2VOb2RlSW5mby5ub2RlKTtcbiAgICB9XG4gIH1cblxuICAvLyBIZWxwZXIgbWV0aG9kIHRvIHVwZGF0ZSBub2RlJ3MgY29ubmVjdGlvbiBzdGF0dXNcbiAgdXBkYXRlTm9kZUNvbm5lY3Rpb25zKG5vZGU6IFdGTm9kZSk6IHZvaWQge1xuICAgIC8vIENvdW50IHRoZSBudW1iZXIgb2Ygb3V0Z29pbmcgY29ubmVjdGlvbnMgdGhhdCBjb25uZWN0IHRvIHN0YWdlc1xuICAgIGNvbnN0IG91dGdvaW5nQ29ubmVjdGlvbnMgPSB0aGlzLnN0YXRlLmNvbm5lY3Rpb25zLmZpbHRlcihcbiAgICAgIChjb25uKSA9PiBjb25uLnNvdXJjZU5vZGVJZCA9PT0gbm9kZS5pZFxuICAgICk7XG5cbiAgICAvLyBDaGVjayBpZiB0aGUgdGFyZ2V0IG5vZGVzIGFyZSBzdGFnZXNcbiAgICBjb25zdCBjb25uZWN0ZWRTdGFnZU5vZGVzID0gb3V0Z29pbmdDb25uZWN0aW9uc1xuICAgICAgLm1hcCgoY29ubikgPT4gdGhpcy5zdGF0ZS5maW5kTm9kZUJ5SWQoY29ubi50YXJnZXROb2RlSWQpKVxuICAgICAgLmZpbHRlcigobm9kZUluZm8pID0+IG5vZGVJbmZvICYmIG5vZGVJbmZvLm5vZGUudHlwZSA9PT0gJ3N0YWdlJyk7XG5cbiAgICBub2RlLmhhc011bHRpcGxlQ29ubmVjdGVkU3RhZ2VzID0gY29ubmVjdGVkU3RhZ2VOb2Rlcy5sZW5ndGggPiAxO1xuICAgIG5vZGUuaGFzUGFyYWxsZWxTdGFnZXMgPSBjb25uZWN0ZWRTdGFnZU5vZGVzLmV2ZXJ5KFxuICAgICAgKG5kKSA9PiBuZD8ubm9kZS5zdGFnZURhdGE/LklzUGFyYWxsZWxcbiAgICApO1xuICB9XG5cbiAgb25FZGl0U3dpbWxhbmUoXG4gICAgZXZlbnQ6IE1vdXNlRXZlbnQsXG4gICAgc3dpbWxhbmU6IFN3aW1sYW5lSXRlbSxcbiAgICBzd2ltbGFuZUluZGV4OiBudW1iZXJcbiAgKTogdm9pZCB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IC8vIFByZXZlbnQgdGhlIGNhbnZhcyBjbGljayBldmVudCBmcm9tIGZpcmluZ1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc29sZS5sb2coJ0VkaXQgc3dpbWxhbmUgYnV0dG9uIGNsaWNrZWQgZm9yIHN3aW1sYW5lOicsIHN3aW1sYW5lSW5kZXgpO1xuXG4gICAgLy8gRW1pdCBhIHNwZWNpYWwgZXZlbnQgZm9yIGVkaXRpbmcgYSBzd2ltbGFuZVxuICAgIHRoaXMuY2xpY2tlZFBvc2l0aW9uLmVtaXQoe1xuICAgICAgeDogLTEsIC8vIFNwZWNpYWwgdmFsdWUgdG8gaW5kaWNhdGUgZWRpdCBtb2RlXG4gICAgICB5OiBzd2ltbGFuZUluZGV4LFxuICAgIH0pO1xuICB9XG5cbiAgLy8gc2hvd1N0YXJ0Tm9kZUZvcm1Qb3B1cChldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAvLyAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIC8vICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgLy8gICAvLyBJbXBsZW1lbnRhdGlvbiB3aWxsIGJlIHNpbWlsYXIgdG8gdGhlIHN0YWdlIGZvcm0gcG9wdXBcbiAgLy8gICAvLyBXZSdsbCBuZWVkIHRvIGFkZCBVSSBlbGVtZW50cyBmb3IgdGhpc1xuICAvLyAgIGNvbnNvbGUubG9nKCdTdGFydCBub2RlIGZvcm0gcG9wdXAgcmVxdWVzdGVkJyk7XG5cbiAgLy8gICAvLyBGb3Igbm93LCB0aGlzIGlzIGEgcGxhY2Vob2xkZXJcbiAgLy8gICAvLyBUaGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIHdvdWxkIGxvYWQgZm9ybXMgYW5kIGFkZCB0aGVtIHRvIHRoZSB3b3JrZmxvd1xuICAvLyB9XG5cbiAgdG9nZ2xlU3RhcnROb2RlRm9ybVBvcHVwKFxuICAgIGV2ZW50OiBNb3VzZUV2ZW50LFxuICAgIG5vZGVYOiBudW1iZXIsXG4gICAgbm9kZVk6IG51bWJlcixcbiAgICBzd2ltbGFuZUluZGV4OiBudW1iZXIsXG4gICAgbm9kZT86IE5vZGVcbiAgKTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIC8vIFNldCBwb3B1cCBwb3NpdGlvbiAtIGNvbnZlcnQgY2FudmFzIGNvb3JkaW5hdGVzIHRvIHZpZXdwb3J0IGNvb3JkaW5hdGVzXG4gICAgY29uc3Qgc3dpbWxhbmVPZmZzZXQgPSBzd2ltbGFuZUluZGV4ICogMjYzO1xuICAgIGNvbnN0IGNhbnZhc1ggPSBub2RlWCAtICghbm9kZSA/IDMwIDogMCk7XG4gICAgY29uc3QgY2FudmFzWSA9IG5vZGVZICsgc3dpbWxhbmVPZmZzZXQ7XG5cbiAgICBjb25zdCB2aWV3cG9ydFBvcyA9IHRoaXMuZ2V0Vmlld3BvcnRQb3NpdGlvbihjYW52YXNYLCBjYW52YXNZKTtcbiAgICB0aGlzLnN0YXJ0Tm9kZUZvcm1Qb3B1cFggPSB2aWV3cG9ydFBvcy54O1xuICAgIHRoaXMuc3RhcnROb2RlRm9ybVBvcHVwWSA9IHZpZXdwb3J0UG9zLnk7XG5cbiAgICAvLyBJZiB3ZSdyZSBvcGVuaW5nIHRoZSBwb3B1cCwgbG9hZCBmb3Jtc1xuICAgIGlmICghdGhpcy5zaG93U3RhcnROb2RlRm9ybVBvcHVwKSB7XG4gICAgICB0aGlzLmlzTG9hZGluZ1N0YXJ0Tm9kZUZvcm1zID0gdHJ1ZTtcbiAgICAgIHRoaXMuZGF0YVNlcnZpY2VcbiAgICAgICAgLmdldEZvcm1zKClcbiAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgdGhpcy5zdGFydE5vZGVGb3Jtc0xpc3QgPSByZXNwb25zZS5SZXN1bHQ7XG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmdTdGFydE5vZGVGb3JtcyA9IGZhbHNlO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgbG9hZGluZyBmb3JtczonLCBlcnJvcik7XG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmdTdGFydE5vZGVGb3JtcyA9IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAobm9kZSkge1xuICAgICAgdGhpcy5hY3RpdmVOb2RlRm9yRm9ybVNlbGVjdGlvbiA9IG5vZGU7XG4gICAgICBjb25zb2xlLmxvZygnQWN0aXZlIG5vZGUgZm9yIGZvcm0gc2VsZWN0aW9uOicsIG5vZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFjdGl2ZU5vZGVGb3JGb3JtU2VsZWN0aW9uID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLnNob3dTdGFydE5vZGVGb3JtUG9wdXAgPSAhdGhpcy5zaG93U3RhcnROb2RlRm9ybVBvcHVwO1xuICB9XG5cbiAgc2VsZWN0U3RhcnROb2RlRm9ybShmb3JtOiBGb3JtIHwgbnVsbCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmFjdGl2ZU5vZGVGb3JGb3JtU2VsZWN0aW9uKSB7XG4gICAgICB0aGlzLnNlbGVjdEZvcm1Gb3JTdGFnZShmb3JtLCB0aGlzLmFjdGl2ZU5vZGVGb3JGb3JtU2VsZWN0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGZvcm0pIHtcbiAgICAgICAgdGhpcy5zdGF0ZS5zZXRXb3JrZmxvd0Zvcm0oZm9ybS5Db2RlLCBmb3JtLk5hbWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zdGF0ZS5zZXRXb3JrZmxvd0Zvcm0obnVsbCwgbnVsbCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ2xvc2UgdGhlIHBvcHVwXG4gICAgdGhpcy5zaG93U3RhcnROb2RlRm9ybVBvcHVwID0gZmFsc2U7XG4gIH1cblxuICBzaG93U3ViZmxvd1NlbGVjdGlvblBvcHVwKHg6IG51bWJlciwgeTogbnVtYmVyLCBzd2ltbGFuZUluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAvLyBDb252ZXJ0IGNhbnZhcyBjb29yZGluYXRlcyB0byB2aWV3cG9ydCBjb29yZGluYXRlcyBmb3IgcG9wdXAgcG9zaXRpb25pbmdcbiAgICBjb25zdCB2aWV3cG9ydFBvcyA9IHRoaXMuZ2V0Vmlld3BvcnRQb3NpdGlvbih4LCB5KTtcbiAgICB0aGlzLnN1YmZsb3dQb3B1cFggPSB2aWV3cG9ydFBvcy54O1xuICAgIHRoaXMuc3ViZmxvd1BvcHVwWSA9IHZpZXdwb3J0UG9zLnk7XG4gICAgdGhpcy5wZW5kaW5nU3ViZmxvd1Bvc2l0aW9uID0geyBzd2ltbGFuZUluZGV4LCB4LCB5IH07XG5cbiAgICAvLyBTdG9yZSBjb25uZWN0aW9uIGRhdGEgaWYgd2UncmUgY3JlYXRpbmcgZnJvbSBhIGNvbm5lY3Rpb25cbiAgICBpZiAodGhpcy5zdGF0ZS5pc0Nvbm5lY3Rpb25EcmFnZ2luZygpKSB7XG4gICAgICAvLyBTdG9yZSB0aGUgc291cmNlIGNvbm5lY3Rpb24gZGF0YVxuICAgICAgdGhpcy5wZW5kaW5nQ29ubmVjdGlvblNvdXJjZVBvaW50ID1cbiAgICAgICAgdGhpcy5zdGF0ZS5kcmFnZ2luZ0Nvbm5lY3Rpb25EYXRhLnNvdXJjZVBvaW50ID8/IG51bGw7XG4gICAgICB0aGlzLnBlbmRpbmdDb25uZWN0aW9uU291cmNlU3dpbWxhbmVJbmRleCA9XG4gICAgICAgIHRoaXMuc3RhdGUuZHJhZ2dpbmdDb25uZWN0aW9uRGF0YS5zb3VyY2VTd2ltbGFuZUluZGV4ID8/IG51bGw7XG4gICAgICBjb25zb2xlLmxvZygnU3RvcmVkIGNvbm5lY3Rpb24gZGF0YSBmb3Igc3ViZmxvdzonLCB7XG4gICAgICAgIHNvdXJjZVBvaW50OiB0aGlzLnBlbmRpbmdDb25uZWN0aW9uU291cmNlUG9pbnQsXG4gICAgICAgIHNvdXJjZVN3aW1sYW5lSW5kZXg6IHRoaXMucGVuZGluZ0Nvbm5lY3Rpb25Tb3VyY2VTd2ltbGFuZUluZGV4LFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gTG9hZCB3b3JrZmxvd3NcbiAgICB0aGlzLmlzTG9hZGluZ1dvcmtmbG93cyA9IHRydWU7XG4gICAgdGhpcy5kYXRhU2VydmljZVxuICAgICAgLmdldFdvcmtmbG93cygpXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgdGhpcy53b3JrZmxvd3NMaXN0ID0gcmVzcG9uc2UuUmVzdWx0O1xuICAgICAgICB0aGlzLmlzTG9hZGluZ1dvcmtmbG93cyA9IGZhbHNlO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgbG9hZGluZyB3b3JrZmxvd3M6JywgZXJyb3IpO1xuICAgICAgICB0aGlzLmlzTG9hZGluZ1dvcmtmbG93cyA9IGZhbHNlO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLnNob3dTdWJmbG93UG9wdXAgPSB0cnVlO1xuICB9XG5cbiAgc2VsZWN0U3ViZmxvd1dvcmtmbG93KHdvcmtmbG93OiBXb3JrZmxvdyk6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKCdTZWxlY3Rpbmcgd29ya2Zsb3cgZm9yIHN1YmZsb3c6Jywgd29ya2Zsb3cuTmFtZSk7XG4gICAgY29uc29sZS5sb2coJ1BlbmRpbmcgY29ubmVjdGlvbiBkYXRhOicsIHtcbiAgICAgIHNvdXJjZVBvaW50OiB0aGlzLnBlbmRpbmdDb25uZWN0aW9uU291cmNlUG9pbnQsXG4gICAgICBzb3VyY2VTd2ltbGFuZUluZGV4OiB0aGlzLnBlbmRpbmdDb25uZWN0aW9uU291cmNlU3dpbWxhbmVJbmRleCxcbiAgICAgIHBvc2l0aW9uOiB0aGlzLnBlbmRpbmdTdWJmbG93UG9zaXRpb24sXG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5wZW5kaW5nU3ViZmxvd1Bvc2l0aW9uKSB7XG4gICAgICBjb25zdCB7IHN3aW1sYW5lSW5kZXgsIHgsIHkgfSA9IHRoaXMucGVuZGluZ1N1YmZsb3dQb3NpdGlvbjtcblxuICAgICAgLy8gQ3JlYXRlIHRoZSBzdWJmbG93IG5vZGUgd2l0aCB0aGUgc2VsZWN0ZWQgd29ya2Zsb3cgZGF0YVxuICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuc3RhdGUuYWRkTm9kZShcbiAgICAgICAgc3dpbWxhbmVJbmRleCxcbiAgICAgICAgJ3N1YmZsb3cnLFxuICAgICAgICB4LFxuICAgICAgICB5LFxuICAgICAgICB7IE5hbWU6IHdvcmtmbG93Lk5hbWUgfSwgLy8gSW5pdGlhbGl6ZSBzdGFnZSBuYW1lIGZyb20gd29ya2Zsb3dcbiAgICAgICAgeyBpZDogd29ya2Zsb3cuQ29kZSwgbmFtZTogd29ya2Zsb3cuTmFtZSB9XG4gICAgICApO1xuXG4gICAgICBjb25zb2xlLmxvZygnQ3JlYXRlZCBzdWJmbG93IG5vZGU6Jywgbm9kZSk7XG5cbiAgICAgIC8vIElmIHRoaXMgd2FzIGNyZWF0ZWQgZnJvbSBhIGNvbm5lY3Rpb24sIGNyZWF0ZSB0aGUgY29ubmVjdGlvblxuICAgICAgaWYgKG5vZGUgJiYgdGhpcy5wZW5kaW5nQ29ubmVjdGlvblNvdXJjZVBvaW50KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdDcmVhdGluZyBjb25uZWN0aW9uIHRvIG5ldyBzdWJmbG93IG5vZGUnKTtcblxuICAgICAgICAvLyBGaW5kIGEgc3VpdGFibGUgY29ubmVjdGlvbiBwb2ludCBvbiB0aGUgbmV3IG5vZGVcbiAgICAgICAgaWYgKG5vZGUuY29ubmVjdGlvblBvaW50cyAmJiBub2RlLmNvbm5lY3Rpb25Qb2ludHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnN0IHNvdXJjZVBvaW50ID0gdGhpcy5wZW5kaW5nQ29ubmVjdGlvblNvdXJjZVBvaW50O1xuXG4gICAgICAgICAgLy8gRmluZCBvcHBvc2luZyB0eXBlIGNvbm5lY3Rpb24gcG9pbnRcbiAgICAgICAgICBjb25zdCBvcHBvc2luZ1R5cGUgPSB7XG4gICAgICAgICAgICByaWdodDogJ2xlZnQnLFxuICAgICAgICAgICAgbGVmdDogJ3JpZ2h0JyxcbiAgICAgICAgICAgIHRvcDogJ2JvdHRvbScsXG4gICAgICAgICAgICBib3R0b206ICd0b3AnLFxuICAgICAgICAgIH1bc291cmNlUG9pbnQudHlwZV0gYXMgJ3RvcCcgfCAncmlnaHQnIHwgJ2JvdHRvbScgfCAnbGVmdCc7XG5cbiAgICAgICAgICBjb25zdCB0YXJnZXRQb2ludCA9IG5vZGUuY29ubmVjdGlvblBvaW50cy5maW5kKFxuICAgICAgICAgICAgKHApID0+IHAudHlwZSA9PT0gb3Bwb3NpbmdUeXBlXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmICh0YXJnZXRQb2ludCkge1xuICAgICAgICAgICAgLy8gQ3JlYXRlIGNvbm5lY3Rpb25cbiAgICAgICAgICAgIGNvbnN0IGNvbm5lY3Rpb24gPSB7XG4gICAgICAgICAgICAgIGlkOiBgY29ubi0ke0RhdGUubm93KCl9LSR7TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTAwMCl9YCxcbiAgICAgICAgICAgICAgc291cmNlTm9kZUlkOiBzb3VyY2VQb2ludC5ub2RlSWQsXG4gICAgICAgICAgICAgIHRhcmdldE5vZGVJZDogbm9kZS5pZCxcbiAgICAgICAgICAgICAgc291cmNlUG9pbnRJZDogc291cmNlUG9pbnQuaWQsXG4gICAgICAgICAgICAgIHRhcmdldFBvaW50SWQ6IHRhcmdldFBvaW50LmlkLFxuICAgICAgICAgICAgICBzb3VyY2VTd2ltbGFuZUluZGV4OiB0aGlzLnBlbmRpbmdDb25uZWN0aW9uU291cmNlU3dpbWxhbmVJbmRleCEsXG4gICAgICAgICAgICAgIHRhcmdldFN3aW1sYW5lSW5kZXg6IHN3aW1sYW5lSW5kZXgsXG4gICAgICAgICAgICAgIGxhYmVsOiAnJyxcbiAgICAgICAgICAgICAgYWN0aW9uOiBudWxsLFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgLy8gQWRkIGNvbm5lY3Rpb24gZGlyZWN0bHkgdG8gdGhlIHN0YXRlJ3MgY29ubmVjdGlvbnMgYXJyYXlcbiAgICAgICAgICAgIHRoaXMuc3RhdGUuY29ubmVjdGlvbnMucHVzaChjb25uZWN0aW9uKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdBZGRlZCBjb25uZWN0aW9uIHRvIHN0YXRlOicsIGNvbm5lY3Rpb24pO1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ0Nvbm5lY3Rpb25zIGFmdGVyIGFkZGluZzonLCB0aGlzLnN0YXRlLmNvbm5lY3Rpb25zKTtcbiAgICAgICAgICAgIHRoaXMub25Db25uZWN0aW9uQ3JlYXRlZChjb25uZWN0aW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdGF0ZS5lbmRDb25uZWN0aW9uRHJhZygpO1xuICAgICAgfVxuXG4gICAgICAvLyBSZXNldCBzZWxlY3Rpb24gdG9vbCBpbiBwYXJlbnQgY29tcG9uZW50XG4gICAgICB0aGlzLnN1YmZsb3dTZWxlY3RlZC5lbWl0KCk7XG4gICAgfVxuXG4gICAgLy8gQ2xlYW4gdXBcbiAgICB0aGlzLnNob3dTdWJmbG93UG9wdXAgPSBmYWxzZTtcbiAgICB0aGlzLnBlbmRpbmdTdWJmbG93UG9zaXRpb24gPSBudWxsO1xuICAgIHRoaXMucGVuZGluZ0Nvbm5lY3Rpb25Tb3VyY2VQb2ludCA9IG51bGw7XG4gICAgdGhpcy5wZW5kaW5nQ29ubmVjdGlvblNvdXJjZVN3aW1sYW5lSW5kZXggPSBudWxsO1xuICB9XG5cbiAgc2hvd0RlY2lzaW9uQ29uZGl0aW9uc1BvcHVwKFxuICAgIGV2ZW50OiBNb3VzZUV2ZW50LFxuICAgIG5vZGU6IFdGTm9kZSxcbiAgICBzd2ltbGFuZUluZGV4OiBudW1iZXJcbiAgKTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIC8vIEdldCB0aGUgcG9zaXRpb24gZm9yIHRoZSBwb3B1cFxuICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5nZXRNb3VzZVBvc2l0aW9uKGV2ZW50KTtcblxuICAgIC8vIENvbnZlcnQgY2FudmFzIGNvb3JkaW5hdGVzIHRvIHZpZXdwb3J0IGNvb3JkaW5hdGVzIGZvciBwb3B1cCBwb3NpdGlvbmluZ1xuICAgIGNvbnN0IHZpZXdwb3J0UG9zID0gdGhpcy5nZXRWaWV3cG9ydFBvc2l0aW9uKHBvc2l0aW9uLngsIHBvc2l0aW9uLnkpO1xuXG4gICAgLy8gRmluZCBhbGwgY29ubmVjdGlvbnMgZnJvbSB0aGlzIGRlY2lzaW9uIG5vZGVcbiAgICBjb25zdCBjb25uZWN0aW9ucyA9IHRoaXMuc3RhdGUuY29ubmVjdGlvbnMuZmlsdGVyKFxuICAgICAgKGNvbm4pID0+IGNvbm4uc291cmNlTm9kZUlkID09PSBub2RlLmlkXG4gICAgKTtcblxuICAgIGlmIChjb25uZWN0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgIC8vIE5vIGNvbm5lY3Rpb25zIHRvIHNob3dcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBTaG93IHRoZSBkZWNpc2lvbiBjb25kaXRpb25zIHBvcHVwXG4gICAgdGhpcy5hY3RpdmVEZWNpc2lvbk5vZGVJZCA9IG5vZGUuaWQ7XG4gICAgdGhpcy5kZWNpc2lvbkNvbmRpdGlvblBvcHVwWCA9IHZpZXdwb3J0UG9zLng7XG4gICAgdGhpcy5kZWNpc2lvbkNvbmRpdGlvblBvcHVwWSA9IHZpZXdwb3J0UG9zLnk7XG5cbiAgICAvLyBTZXQgdGhlIGNvcnJlY3QgcG9wdXAgdmlzaWJpbGl0eSBmbGFnIC0gdGhpcyBpcyBsaWtlbHkgdGhlIGlzc3VlXG4gICAgdGhpcy5zaG93RGVjaXNpb25Db25kaXRpb25EaWFsb2cgPSB0cnVlO1xuXG4gICAgLy8gY29uc29sZS5sb2coJ1Nob3dpbmcgZGVjaXNpb24gcG9wdXA6Jywge1xuICAgIC8vICAgeTogZ2xvYmFsWSxcbiAgICAvLyAgIG5vZGVJZDogbm9kZS5pZCxcbiAgICAvLyAgIGlzVmlzaWJsZTogdGhpcy5zaG93RGVjaXNpb25Db25kaXRpb25EaWFsb2csXG4gICAgLy8gfSk7XG4gIH1cblxuICBlbnN1cmVTd2ltbGFuZUluVmlldyhzd2ltbGFuZUluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAvLyBFbnN1cmUgd2UgaGF2ZSBlbm91Z2ggc3dpbWxhbmVzIHZpc2libGVcbiAgICBjb25zdCByZXF1aXJlZEhlaWdodCA9IChzd2ltbGFuZUluZGV4ICsgMSkgKiB0aGlzLnN3aW1sYW5lSGVpZ2h0O1xuICAgIGlmICh0aGlzLmNhbnZhc0hlaWdodCA8IHJlcXVpcmVkSGVpZ2h0KSB7XG4gICAgICB0aGlzLmNhbnZhc0hlaWdodCA9IHJlcXVpcmVkSGVpZ2h0O1xuICAgIH1cbiAgfVxuXG4gIGdldExhYmVsUG9zaXRpb24oY29ubmVjdGlvbjogQ29ubmVjdGlvbik6IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhdGhEYXRhID0gdGhpcy5zdGF0ZS5nZXRDb25uZWN0aW9uRGF0YShjb25uZWN0aW9uKTtcbiAgICAgIGlmICghcGF0aERhdGEpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignTm8gcGF0aCBkYXRhIGZvciBjb25uZWN0aW9uOicsIGNvbm5lY3Rpb24pO1xuICAgICAgICByZXR1cm4geyB4OiAwLCB5OiAwIH07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgc3RhcnRYLCBzdGFydFksIGVuZFgsIGVuZFkgfSA9IHBhdGhEYXRhO1xuXG4gICAgICBjb25zdCBzb3VyY2VOb2RlSW5mbyA9IHRoaXMuc3RhdGUuZmluZE5vZGVCeUlkKGNvbm5lY3Rpb24uc291cmNlTm9kZUlkKTtcbiAgICAgIGlmICghc291cmNlTm9kZUluZm8pIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignU291cmNlIG5vZGUgbm90IGZvdW5kIGZvciBjb25uZWN0aW9uOicsIGNvbm5lY3Rpb24pO1xuICAgICAgICByZXR1cm4geyB4OiAwLCB5OiAwIH07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNvdXJjZU5vZGUgPSBzb3VyY2VOb2RlSW5mby5ub2RlO1xuICAgICAgY29uc3Qgc291cmNlUG9pbnQgPSBzb3VyY2VOb2RlLmNvbm5lY3Rpb25Qb2ludHM/LmZpbmQoXG4gICAgICAgIChwKSA9PiBwLmlkID09PSBjb25uZWN0aW9uLnNvdXJjZVBvaW50SWRcbiAgICAgICk7XG5cbiAgICAgIGlmICghc291cmNlUG9pbnQpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignU291cmNlIHBvaW50IG5vdCBmb3VuZCBmb3IgY29ubmVjdGlvbjonLCBjb25uZWN0aW9uKTtcbiAgICAgICAgcmV0dXJuIHsgeDogMCwgeTogMCB9O1xuICAgICAgfVxuXG4gICAgICAvLyBDYWxjdWxhdGUgbWlkcG9pbnQgYmFzZWQgb24gdGhlIGNvbm5lY3Rpb24gcG9pbnQgdHlwZVxuICAgICAgaWYgKHNvdXJjZVBvaW50LnR5cGUgPT09ICdsZWZ0JyB8fCBzb3VyY2VQb2ludC50eXBlID09PSAncmlnaHQnKSB7XG4gICAgICAgIGNvbnN0IGhvcml6b250YWxEaXN0ID0gZW5kWCAtIHN0YXJ0WDtcblxuICAgICAgICBpZiAoTWF0aC5hYnMoaG9yaXpvbnRhbERpc3QpIDwgMzApIHtcbiAgICAgICAgICAvLyBGb3Igc2hvcnQgaG9yaXpvbnRhbCBjb25uZWN0aW9uc1xuICAgICAgICAgIGNvbnN0IG1pZFkgPSAoc3RhcnRZICsgZW5kWSkgLyAyO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB4OiBzdGFydFggKyAoZW5kWCAtIHN0YXJ0WCkgLyAyLFxuICAgICAgICAgICAgeTogbWlkWSxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEZvciByZWd1bGFyIGNvbm5lY3Rpb25zIHN0YXJ0aW5nIGhvcml6b250YWxseVxuICAgICAgICAgIGNvbnN0IG1pZFggPSBzdGFydFggKyBob3Jpem9udGFsRGlzdCAvIDI7XG4gICAgICAgICAgY29uc3QgbWlkWSA9IGVuZFk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHg6IG1pZFgsXG4gICAgICAgICAgICB5OiAoc3RhcnRZICsgZW5kWSkgLyAyLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vICd0b3AnIG9yICdib3R0b20nXG4gICAgICAgIGNvbnN0IHZlcnRpY2FsRGlzdCA9IGVuZFkgLSBzdGFydFk7XG5cbiAgICAgICAgaWYgKE1hdGguYWJzKHZlcnRpY2FsRGlzdCkgPCAzMCkge1xuICAgICAgICAgIC8vIEZvciBzaG9ydCB2ZXJ0aWNhbCBjb25uZWN0aW9uc1xuICAgICAgICAgIGNvbnN0IG1pZFggPSAoc3RhcnRYICsgZW5kWCkgLyAyO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB4OiBtaWRYLFxuICAgICAgICAgICAgeTogc3RhcnRZICsgKGVuZFkgLSBzdGFydFkpIC8gMixcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEZvciByZWd1bGFyIGNvbm5lY3Rpb25zIHN0YXJ0aW5nIHZlcnRpY2FsbHlcbiAgICAgICAgICBjb25zdCBtaWRYID0gZW5kWDtcbiAgICAgICAgICBjb25zdCBtaWRZID0gc3RhcnRZICsgdmVydGljYWxEaXN0IC8gMjtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeDogKHN0YXJ0WCArIGVuZFgpIC8gMixcbiAgICAgICAgICAgIHk6IG1pZFksXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAnRXJyb3IgY2FsY3VsYXRpbmcgbGFiZWwgcG9zaXRpb24gZm9yIGNvbm5lY3Rpb246JyxcbiAgICAgICAgY29ubmVjdGlvbixcbiAgICAgICAgZXJyb3JcbiAgICAgICk7XG4gICAgICByZXR1cm4geyB4OiAwLCB5OiAwIH07XG4gICAgfVxuICB9XG5cbiAgc2F2ZUNvbm5lY3Rpb25MYWJlbChjb25uZWN0aW9uOiBDb25uZWN0aW9uLCBsYWJlbDogc3RyaW5nKSB7XG4gICAgLy8gVXBkYXRlIHRoZSBjb25uZWN0aW9uIGxhYmVsIGluIHRoZSBzdGF0ZVxuICAgIHRoaXMuc3RhdGUuY29ubmVjdGlvbnMgPSB0aGlzLnN0YXRlLmNvbm5lY3Rpb25zLm1hcCgoY29ubikgPT4ge1xuICAgICAgaWYgKGNvbm4uaWQgPT09IGNvbm5lY3Rpb24uaWQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5jb25uLFxuICAgICAgICAgIGxhYmVsOiBsYWJlbCxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjb25uO1xuICAgIH0pO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiY2FudmFzLWNvbnRhaW5lclwiPlxuICA8c3ZnICNjYW52YXMgW2F0dHIud2lkdGhdPVwiY2FudmFzV2lkdGhcIiBbYXR0ci5oZWlnaHRdPVwiY2FudmFzSGVpZ2h0XCIgY2xhc3M9XCJkZXNpZ25lci1jYW52YXNcIlxuICAgIChjbGljayk9XCJvbkNhbnZhc0NsaWNrKCRldmVudClcIj5cbiAgICA8ZGVmcz5cbiAgICAgIDwhLS0gR3JpZCBwYXR0ZXJuIGRlZmluaXRpb24gLS0+XG5cbiAgICAgIDxwYXR0ZXJuIGlkPVwiZ3JpZFwiIFthdHRyLndpZHRoXT1cImdyaWRTaXplXCIgW2F0dHIuaGVpZ2h0XT1cImdyaWRTaXplXCIgcGF0dGVyblVuaXRzPVwidXNlclNwYWNlT25Vc2VcIj5cbiAgICAgICAgPHBhdGggZD1cIk0gMjAgMCBMIDAgMCAwIDIwXCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjZTJlOGYwXCIgc3Ryb2tlLXdpZHRoPVwiMC41XCIgLz5cbiAgICAgIDwvcGF0dGVybj5cblxuICAgICAgPCEtLSBBcnJvdyBoZWFkIG1hcmtlciBkZWZpbml0aW9uIC0tPlxuICAgICAgPG1hcmtlciBpZD1cImFycm93aGVhZFwiIG1hcmtlcldpZHRoPVwiMTBcIiBtYXJrZXJIZWlnaHQ9XCI3XCIgcmVmWD1cIjlcIiByZWZZPVwiMy41XCIgb3JpZW50PVwiYXV0b1wiPlxuICAgICAgICA8cG9seWdvbiBwb2ludHM9XCIwIDAsIDEwIDMuNSwgMCA3XCIgZmlsbD1cIiNEMzZDRkZcIiAvPlxuICAgICAgPC9tYXJrZXI+XG5cbiAgICAgIDwhLS0gQ29ubmVjdGlvbiBwb2ludDogb3V0ZXIgdHJhbnNwYXJlbnQgcmluZyBleHBhbmRzIHRoZSBoaXQgdGFyZ2V0IHNvIGFcbiAgICAgICAgICAgY29ubmVjdGlvbiBkcmFnIGNhbiBiZSBzdGFydGVkIHdpdGhvdXQgcGl4ZWwtcHJlY2lzZSBhaW0uIFRoZSB2aXNpYmxlXG4gICAgICAgICAgIGNpcmNsZSBzdGF5cyBhdCByPTUuIFRoZSBoaXQgcmluZyBleHRlbmRzIGlud2FyZCB1cCB0byB0aGUgbm9kZSdzXG4gICAgICAgICAgIGRyYWctaGFuZGxlIGVkZ2Ugc28gY2xpY2tzIG5lYXIgdGhlIGVkZ2UgZmFsbCB0byB0aGUgY29ubmVjdGlvbiBwb2ludFxuICAgICAgICAgICAocmVuZGVyZWQgdG9wbW9zdCkgcmF0aGVyIHRoYW4gdG8gdGhlIGRyYWcgaGFuZGxlIGJlbmVhdGguIC0tPlxuICAgICAgPGcgaWQ9XCJjb25uZWN0aW9uLXBvaW50LXRlbXBsYXRlXCI+XG4gICAgICAgIDxjaXJjbGUgcj1cIjEyXCIgZmlsbD1cInRyYW5zcGFyZW50XCIgLz5cbiAgICAgICAgPGNpcmNsZSByPVwiNVwiIGZpbGw9XCIjRDM2Q0ZGXCIgc3Ryb2tlPVwiI0ZGRkZGRlwiIHN0cm9rZS13aWR0aD1cIjFcIiAvPlxuICAgICAgPC9nPlxuXG4gICAgICA8IS0tIERhc2hlZCBsaW5lIHN0eWxlIGZvciBjb25uZWN0aW9uIHByZXZpZXcgLS0+XG4gICAgICA8cGF0dGVybiBpZD1cImRhc2hlZC1saW5lXCIgd2lkdGg9XCIxMFwiIGhlaWdodD1cIjEwXCIgcGF0dGVyblVuaXRzPVwidXNlclNwYWNlT25Vc2VcIj5cbiAgICAgICAgPGxpbmUgeDE9XCIwXCIgeTE9XCI1XCIgeDI9XCIxMFwiIHkyPVwiNVwiIHN0cm9rZT1cIiNEMzZDRkZcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWRhc2hhcnJheT1cIjUsNVwiIC8+XG4gICAgICA8L3BhdHRlcm4+XG5cbiAgICAgIEBmb3IgKHN3aW1sYW5lIG9mIHN0YXRlLnN3aW1sYW5lczsgdHJhY2sgc3dpbWxhbmUub3JkZXIpIHtcbiAgICAgIDxjbGlwUGF0aCBbYXR0ci5pZF09XCInc3dpbWxhbmUtY2xpcC0nICsgc3dpbWxhbmUub3JkZXJcIj5cbiAgICAgICAgPHJlY3QgeD1cIjBcIiB5PVwiMFwiIFthdHRyLndpZHRoXT1cImNhbnZhc1dpZHRoXCIgaGVpZ2h0PVwiMjYzXCIgLz5cbiAgICAgIDwvY2xpcFBhdGg+XG4gICAgICB9XG4gICAgPC9kZWZzPlxuXG4gICAgPCEtLSBCYWNrZ3JvdW5kIGdyaWQgLS0+XG4gICAgPHJlY3Qgd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiMTAwJVwiIGZpbGw9XCJ1cmwoI2dyaWQpXCIgLz5cblxuICAgIDwhLS0gRGlzcGxheSBhIG1lc3NhZ2Ugd2hlbiBubyBzd2ltbGFuZXMgZXhpc3QgLS0+XG4gICAgQGlmIChzdGF0ZS5zd2ltbGFuZXMubGVuZ3RoID09PSAwKSB7XG4gICAgPHRleHQgeD1cIjUwJVwiIHk9XCI1MCVcIiBmb250LWZhbWlseT1cInNhbnMtc2VyaWZcIiBmb250LXNpemU9XCIxNlwiIGZpbGw9XCIjOTRhM2I4XCIgdGV4dC1hbmNob3I9XCJtaWRkbGVcIj5cbiAgICAgIFNlbGVjdCB0aGUgU3dpbWxhbmUgdG9vbCBhbmQgY2xpY2sgb24gdGhlIGNhbnZhcyB0byBhZGQgYSBzd2ltbGFuZVxuICAgIDwvdGV4dD5cbiAgICB9XG5cbiAgICA8IS0tIFRoaXMgaXMgd2hlcmUgd29ya2Zsb3cgZWxlbWVudHMgd2lsbCBiZSBhZGRlZCBsYXRlciAtLT5cbiAgICBAZm9yIChzd2ltbGFuZSBvZiBzdGF0ZS5zd2ltbGFuZXM7IHRyYWNrIHN3aW1sYW5lLm9yZGVyKSB7XG4gICAgPCEtLSA8Z1xuICAgICAgW2F0dHIudHJhbnNmb3JtXT1cIid0cmFuc2xhdGUoMCwnICsgc3dpbWxhbmUub3JkZXIgKiAyNjMgKyAnKSdcIlxuICAgICAgW2F0dHIuY2xpcC1wYXRoXT1cIid1cmwoI3N3aW1sYW5lLWNsaXAtJyArIHN3aW1sYW5lLm9yZGVyICsgJyknXCJcbiAgICA+XG4gICAgICA8cmVjdFxuICAgICAgICB4PVwiMFwiXG4gICAgICAgIHk9XCIwXCJcbiAgICAgICAgW2F0dHIud2lkdGhdPVwiY2FudmFzV2lkdGhcIlxuICAgICAgICBbYXR0ci5oZWlnaHRdPVwiMjYzXCJcbiAgICAgICAgZmlsbD1cIiNmZmZmZmZcIlxuICAgICAgICBzdHJva2U9XCIjZTJlOGYwXCJcbiAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMVwiXG4gICAgICA+PC9yZWN0PlxuXG4gICAgICA8cmVjdFxuICAgICAgICB4PVwiMFwiXG4gICAgICAgIHk9XCIwXCJcbiAgICAgICAgW2F0dHIud2lkdGhdPVwiY2FudmFzV2lkdGhcIlxuICAgICAgICBoZWlnaHQ9XCI0MFwiXG4gICAgICAgIGZpbGw9XCIjZjhmYWZjXCJcbiAgICAgICAgc3Ryb2tlPVwiI2UyZThmMFwiXG4gICAgICAgIHN0cm9rZS13aWR0aD1cIjFcIlxuICAgICAgPjwvcmVjdD5cblxuICAgICAgPHRleHRcbiAgICAgICAgeD1cIjIwXCJcbiAgICAgICAgeT1cIjI1XCJcbiAgICAgICAgZm9udC1mYW1pbHk9XCJzYW5zLXNlcmlmXCJcbiAgICAgICAgZm9udC1zaXplPVwiMTRcIlxuICAgICAgICBmaWxsPVwiIzMzMzMzM1wiXG4gICAgICAgIGZvbnQtd2VpZ2h0PVwiYm9sZFwiXG4gICAgICA+XG4gICAgICAgIHt7IHN3aW1sYW5lLmxhYmVsIH19XG4gICAgICA8L3RleHQ+XG5cbiAgICAgIDxnXG4gICAgICAgIGNsYXNzPVwiZWRpdC1zd2ltbGFuZS1idXR0b25cIlxuICAgICAgICBbYXR0ci50cmFuc2Zvcm1dPVwiJ3RyYW5zbGF0ZSgxMDAsIDIwKSdcIlxuICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgb25FZGl0U3dpbWxhbmUoJGV2ZW50LCBzd2ltbGFuZSwgc3dpbWxhbmUub3JkZXIpO1xuICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICBcIlxuICAgICAgPlxuICAgICAgICA8cmVjdFxuICAgICAgICAgIHg9XCItNVwiXG4gICAgICAgICAgeT1cIi0xNVwiXG4gICAgICAgICAgd2lkdGg9XCI0MFwiXG4gICAgICAgICAgaGVpZ2h0PVwiMjBcIlxuICAgICAgICAgIGZpbGw9XCIjZjNlOGZmXCJcbiAgICAgICAgICByeD1cIjNcIlxuICAgICAgICAgIHJ5PVwiM1wiXG4gICAgICAgICAgc3Ryb2tlPVwiI2Q4YjRmZVwiXG4gICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMVwiXG4gICAgICAgID48L3JlY3Q+XG4gICAgICAgIDx0ZXh0XG4gICAgICAgICAgeD1cIjE1XCJcbiAgICAgICAgICB5PVwiMFwiXG4gICAgICAgICAgZm9udC1mYW1pbHk9XCJzYW5zLXNlcmlmXCJcbiAgICAgICAgICBmb250LXNpemU9XCIxMlwiXG4gICAgICAgICAgZmlsbD1cIiM3ZTIyY2VcIlxuICAgICAgICAgIHRleHQtYW5jaG9yPVwibWlkZGxlXCJcbiAgICAgICAgPlxuICAgICAgICAgIEVkaXRcbiAgICAgICAgPC90ZXh0PlxuICAgICAgPC9nPlxuXG4gICAgICA8ZyBbYXR0ci50cmFuc2Zvcm1dPVwiJ3RyYW5zbGF0ZSgyMDAsIDIwKSdcIj5cbiAgICAgICAgQGZvciAodGFnIG9mIHN3aW1sYW5lLnRhZ3Muc2xpY2UoMCwgMyk7IHRyYWNrIHRhZy5OYW1lOyBsZXQgaSA9ICRpbmRleClcbiAgICAgICAge1xuICAgICAgICA8dGV4dFxuICAgICAgICAgIFthdHRyLnhdPVwiaSAqIDEwMFwiXG4gICAgICAgICAgeT1cIjVcIlxuICAgICAgICAgIGZvbnQtZmFtaWx5PVwic2Fucy1zZXJpZlwiXG4gICAgICAgICAgZm9udC1zaXplPVwiMTJcIlxuICAgICAgICAgIGZpbGw9XCIjNjY2NjY2XCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IHRhZy5OYW1lIH19XG4gICAgICAgIDwvdGV4dD5cbiAgICAgICAgfSBAaWYgKHN3aW1sYW5lLnRhZ3MubGVuZ3RoID4gMykge1xuICAgICAgICA8dGV4dFxuICAgICAgICAgIFthdHRyLnhdPVwiMyAqIDEwMCArIDEwXCJcbiAgICAgICAgICB5PVwiNVwiXG4gICAgICAgICAgZm9udC1mYW1pbHk9XCJzYW5zLXNlcmlmXCJcbiAgICAgICAgICBmb250LXNpemU9XCIxMlwiXG4gICAgICAgICAgZmlsbD1cIiM2NjY2NjZcIlxuICAgICAgICA+XG4gICAgICAgICAgK3t7IHN3aW1sYW5lLnRhZ3MubGVuZ3RoIC0gMyB9fSBtb3JlXG4gICAgICAgIDwvdGV4dD5cbiAgICAgICAgfVxuICAgICAgPC9nPlxuICAgIDwvZz4gLS0+XG5cbiAgICA8ZyBbYXR0ci50cmFuc2Zvcm1dPVwiJ3RyYW5zbGF0ZSgwLCcgKyBzd2ltbGFuZS5vcmRlciAqIDI2MyArICcpJ1wiPlxuICAgICAgPCEtLSBTd2ltbGFuZSBjb250YWluZXIgLSByZW1vdmUgc3Ryb2tlIHRvIG1ha2UgaXQgcHVyZWx5IGJhY2tncm91bmQgLS0+XG4gICAgICA8cmVjdCB4PVwiMFwiIHk9XCIwXCIgW2F0dHIud2lkdGhdPVwiY2FudmFzV2lkdGhcIiBbYXR0ci5oZWlnaHRdPVwiMjYzXCJcbiAgICAgICAgW2F0dHIuZmlsbF09XCJzd2ltbGFuZS5vcmRlciAlIDIgPT09IDAgPyAnI0ZDRjNGRicgOiAnI0VDRkZGNSdcIiBzdHJva2U9XCJub25lXCI+PC9yZWN0PlxuXG4gICAgICA8IS0tIFZlcnRpY2FsIHN3aW1sYW5lIGxhYmVsIG9uIHRoZSBsZWZ0IC0tPlxuICAgICAgPGcgY2xhc3M9XCJzd2ltbGFuZS1sYWJlbFwiPlxuICAgICAgICA8IS0tIFB1cnBsZSBiYWNrZ3JvdW5kIGZvciB0aGUgbGFiZWwgLS0+XG4gICAgICAgIDxyZWN0IHg9XCIwLjVcIiB5PVwiMC41XCIgd2lkdGg9XCI0M1wiIGhlaWdodD1cIjIxNVwiIHJ4PVwiMTAuNVwiIGZpbGw9XCJ3aGl0ZVwiIHN0cm9rZT1cIiNEMzZDRkZcIj48L3JlY3Q+XG5cbiAgICAgICAgPCEtLSBQbHVzIGJ1dHRvbiBhdCB0aGUgdG9wIC0tPlxuICAgICAgICA8ZyAoY2xpY2spPVwiXG4gICAgICAgICAgICBvbkVkaXRTd2ltbGFuZSgkZXZlbnQsIHN3aW1sYW5lLCBzd2ltbGFuZS5vcmRlcik7XG4gICAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICBcIj5cbiAgICAgICAgICA8cmVjdCB4PVwiMTIuNVwiIHk9XCIxMFwiIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxOFwiIGZpbGw9XCJ0cmFuc3BhcmVudFwiIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyXCI+PC9yZWN0PlxuXG4gICAgICAgICAgPHBhdGggZD1cIk0yMi41MiAxMi4xNzRWMTcuMDhIMjcuNDdWMTguNTFIMjIuNTJWMjMuMzk0SDIxLjJWMTguNTFIMTYuMjVWMTcuMDhIMjEuMlYxMi4xNzRIMjIuNTJaXCJcbiAgICAgICAgICAgIGZpbGw9XCIjMDAwMEZGXCIgY2xhc3M9XCJwbHVzLWljb25cIiBzdHlsZT1cImN1cnNvcjogcG9pbnRlclwiPjwvcGF0aD5cbiAgICAgICAgPC9nPlxuXG4gICAgICAgIDwhLS0gU3dpbWxhbmUgbGFiZWwgLS0+XG4gICAgICAgIDx0ZXh0IHg9XCIyMlwiIHk9XCIxMDZcIiBmb250LWZhbWlseT1cInNhbnMtc2VyaWZcIiBmb250LXNpemU9XCIxNFwiIGZpbGw9XCIjMzMzMzMzXCIgdGV4dC1hbmNob3I9XCJtaWRkbGVcIlxuICAgICAgICAgIHRyYW5zZm9ybT1cInJvdGF0ZSgtOTAsIDIyLCAxMDApXCI+XG4gICAgICAgICAge3tcbiAgICAgICAgICBzd2ltbGFuZS5sYWJlbC5sZW5ndGggPiAxMlxuICAgICAgICAgID8gc3dpbWxhbmUubGFiZWwuc3Vic3RyaW5nKDAsIDEwKSArIFwiLi4uXCJcbiAgICAgICAgICA6IHN3aW1sYW5lLmxhYmVsXG4gICAgICAgICAgfX1cbiAgICAgICAgPC90ZXh0PlxuXG4gICAgICAgIDwhLS0gVGFnIGNvdW50IGluZGljYXRvciBhdCB0aGUgYm90dG9tIC0tPlxuICAgICAgICA8cmVjdCB4PVwiMTEuNVwiIHk9XCIxODdcIiB3aWR0aD1cIjIxXCIgaGVpZ2h0PVwiMTlcIiByeD1cIjkuNVwiIGZpbGw9XCIjOUU5RTlFXCI+PC9yZWN0PlxuICAgICAgICA8dGV4dCB4PVwiMjRcIiB5PVwiMjA2XCIgZm9udC1mYW1pbHk9XCJzYW5zLXNlcmlmXCIgZm9udC1zaXplPVwiMTJcIiBmaWxsPVwiYmxhY2tcIiB0ZXh0LWFuY2hvcj1cIm1pZGRsZVwiXG4gICAgICAgICAgdHJhbnNmb3JtPVwicm90YXRlKC05MCwgMjIsIDIwMClcIj5cbiAgICAgICAgICB7eyBzd2ltbGFuZS50YWdzLmxlbmd0aCB9fVxuICAgICAgICA8L3RleHQ+XG4gICAgICA8L2c+XG4gICAgPC9nPlxuXG4gICAgfVxuXG4gICAgPCEtLSBOb2RlcyAtLT5cbiAgICBAZm9yIChzd2ltbGFuZSBvZiBzdGF0ZS5zd2ltbGFuZXM7IHRyYWNrIHN3aW1sYW5lLm9yZGVyKSB7XG4gICAgPCEtLSBSZW5kZXIgbm9kZXMgaW4gdGhpcyBzd2ltbGFuZSAtLT5cbiAgICBAZm9yIChub2RlIG9mIHN3aW1sYW5lLm5vZGVzOyB0cmFjayBub2RlLmlkKSB7XG4gICAgPGcgY2xhc3M9XCJub2RlLWVsZW1lbnRcIiBbYXR0ci50cmFuc2Zvcm1dPVwiXG4gICAgICAgICd0cmFuc2xhdGUoJyArIG5vZGUueCArICcsJyArIChub2RlLnkgKyBzd2ltbGFuZS5vcmRlciAqIDI2MykgKyAnKSdcIlxuICAgICAgKG1vdXNlZW50ZXIpPVwic2hvd0Nvbm5lY3Rpb25Qb2ludHMobm9kZS5pZCwgc3dpbWxhbmUub3JkZXIpXCJcbiAgICAgIChtb3VzZWxlYXZlKT1cImhpZGVDb25uZWN0aW9uUG9pbnRzKG5vZGUuaWQpXCI+XG4gICAgICA8IS0tIFN0YXJ0IG5vZGUgaW5kaWNhdG9yIChjaXJjbGUgYW5kIGFycm93KSBmb3IgdGhlIGZpcnN0IG5vZGUgLS0+XG4gICAgICBAaWYgKG5vZGUuaXNTdGFydE5vZGUpIHtcbiAgICAgIDwhLS0gQ2lyY2xlIC0tPlxuICAgICAgPGNpcmNsZSBjeD1cIi01MFwiIGN5PVwiNTBcIiByPVwiMzBcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiNEMzZDRkZcIiBzdHJva2Utd2lkdGg9XCIxXCI+PC9jaXJjbGU+XG4gICAgICA8IS0tIEZvcm0gaWNvbiBmb3Igc3RhcnQgbm9kZSAtLT5cbiAgICAgIDxzdmc6ZyAoY2xpY2spPVwiXG4gICAgICAgICAgdG9nZ2xlU3RhcnROb2RlRm9ybVBvcHVwKCRldmVudCwgbm9kZS54LCBub2RlLnksIHN3aW1sYW5lLm9yZGVyKVxuICAgICAgICBcIiBjbGFzcz1cInN0YWdlLWljb25cIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoLTQ1LCA0MilcIiBzdHlsZT1cImN1cnNvcjogcG9pbnRlcjsgcG9pbnRlci1ldmVudHM6IGFsbFwiPlxuICAgICAgICA8IS0tIFRyYW5zcGFyZW50IHJlY3RhbmdsZSB0byBjYXB0dXJlIGNsaWNrcyAtLT5cbiAgICAgICAgPHN2ZzpyZWN0IHg9XCItMlwiIHk9XCItMlwiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIGZpbGw9XCJ0cmFuc3BhcmVudFwiIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyXCIgLz5cbiAgICAgICAgPHN2ZzpwYXRoXG4gICAgICAgICAgZD1cIk0xNi41IDIwLjQ3NVYxNy40NzVIMTMuNVYxNi40NzVIMTYuNVYxMy40NzVIMTcuNVYxNi40NzVIMjAuNVYxNy40NzVIMTcuNVYyMC40NzVIMTYuNVpNMy41IDE3LjVWMTYuNUg0LjVWMTcuNUgzLjVaTTYuNSAxNy41VjE2LjVIMTEuNTE3QzExLjUwNTcgMTYuNjc2NyAxMS41MDQzIDE2Ljg0NSAxMS41MTMgMTcuMDA1QzExLjUyMSAxNy4xNjUgMTEuNTMxIDE3LjMzIDExLjU0MyAxNy41SDYuNVpNMy41IDEzLjVWMTIuNUg0LjVWMTMuNUgzLjVaTTYuNSAxMy41VjEyLjVIMTMuODA0QzEzLjYxMjcgMTIuNjM4NyAxMy40MzMzIDEyLjc5MTMgMTMuMjY2IDEyLjk1OEMxMy4wOTkzIDEzLjEyNDcgMTIuOTM3NyAxMy4zMDUzIDEyLjc4MSAxMy41SDYuNVpNMy41IDkuNVY4LjVINC41VjkuNUgzLjVaTTYuNSA5LjVWOC41SDE4LjVWOS41SDYuNVpNMy41IDUuNVY0LjVINC41VjUuNUgzLjVaTTYuNSA1LjVWNC41SDE4LjVWNS41SDYuNVpcIlxuICAgICAgICAgIFthdHRyLmZpbGxdPVwic3RhdGUud29ya2Zsb3dGb3JtSWQgPyAnI0QzNkNGRicgOiAnYmxhY2snXCIgdHJhbnNmb3JtPVwic2NhbGUoMC43KVwiIC8+XG4gICAgICA8L3N2ZzpnPlxuICAgICAgPCEtLSBBcnJvdyBmcm9tIGNpcmNsZSB0byBub2RlIC0tPlxuICAgICAgPHBhdGggZD1cIk0gLTIwIDUwIEwgMCA1MFwiIHN0cm9rZT1cIiNEMzZDRkZcIiBzdHJva2Utd2lkdGg9XCIxXCIgbWFya2VyLWVuZD1cInVybCgjYXJyb3doZWFkKVwiPjwvcGF0aD5cbiAgICAgIH1cblxuICAgICAgPCEtLSBFeGl0IHBvaW50IGluZGljYXRvciAoY2lyY2xlIGFuZCBhcnJvdykgLS0+XG4gICAgICBAaWYgKG5vZGUuc3RhZ2VEYXRhPy5Jc0V4aXRQb2ludCkge1xuICAgICAgPCEtLSBBcnJvdyBmcm9tIG5vZGUgdG8gY2lyY2xlIC0tPlxuICAgICAgPHBhdGggW2F0dHIuZF09XCInTSAnICsgbm9kZS53aWR0aCArICcgNTAgTCAnICsgKG5vZGUud2lkdGggKyAyMCkgKyAnIDUwJ1wiIHN0cm9rZT1cIiNEMzZDRkZcIiBzdHJva2Utd2lkdGg9XCIxXCJcbiAgICAgICAgbWFya2VyLWVuZD1cInVybCgjYXJyb3doZWFkKVwiPjwvcGF0aD5cbiAgICAgIDwhLS0gQ2lyY2xlIC0tPlxuICAgICAgPGNpcmNsZSBbYXR0ci5jeF09XCJub2RlLndpZHRoICsgNTBcIiBjeT1cIjUwXCIgcj1cIjMwXCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjRDM2Q0ZGXCIgc3Ryb2tlLXdpZHRoPVwiMlwiPjwvY2lyY2xlPlxuICAgICAgfVxuXG4gICAgICA8IS0tIElubmVyIGRyYWctaGFuZGxlOiBpbnNldCAxMnB4IHNvIHRoZSBub2RlIGVkZ2UgcmluZyBzdGF5cyBkcmFnLWZyZWUuXG4gICAgICAgICAgIFJlbmRlcmVkIEJFRk9SRSB0aGUgbm9kZSBzaGFwZXMvaWNvbnMgc28gdGhlIGNsaWNrYWJsZSBpY29ucyBwYWludCBvblxuICAgICAgICAgICB0b3Agb2YgaXQgYW5kIHdpbiBwb2ludGVyIGV2ZW50czsgdGhlIG5vZGUgYm9keSBzdGlsbCBmYWxscyB0aHJvdWdoIHRvXG4gICAgICAgICAgIHRoaXMgaGFuZGxlIGJlY2F1c2UgaXRzIHNoYXBlL2xhYmVsIHVzZSBwb2ludGVyLWV2ZW50czpub25lLlxuICAgICAgICAgICBDb25uZWN0aW9uIHBvaW50IDx1c2U+IGVsZW1lbnRzIGFyZSByZW5kZXJlZCBhZnRlciBldmVyeXRoaW5nIHNvIHRoZXlcbiAgICAgICAgICAgc3RheSB0b3Btb3N0IGFuZCB3aW4gcG9pbnRlciBldmVudHMgYXQgdGhlIG5vZGUgZWRnZXMuIC0tPlxuICAgICAgPHJlY3QgY2xhc3M9XCJub2RlLWRyYWctaGFuZGxlXCJcbiAgICAgICAgW2F0dHIueF09XCIxMlwiIFthdHRyLnldPVwiMTJcIlxuICAgICAgICBbYXR0ci53aWR0aF09XCJub2RlLndpZHRoIC0gMjRcIiBbYXR0ci5oZWlnaHRdPVwibm9kZS5oZWlnaHQgLSAyNFwiXG4gICAgICAgIGZpbGw9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgIFtzdHlsZS5jdXJzb3JdPVwiZ2V0Q3Vyc29yRm9yTm9kZShub2RlLmlkKVwiXG4gICAgICAgIChtb3VzZWRvd24pPVwib25Ob2RlTW91c2VEb3duKCRldmVudCwgbm9kZSwgc3dpbWxhbmUub3JkZXIpXCIgLz5cblxuICAgICAgPCEtLSBTdGFnZSBub2RlIC0tPlxuICAgICAgQGlmIChub2RlLnR5cGUgPT09ICdzdGFnZScpIHtcbiAgICAgIDwhLS0gPHJlY3RcbiAgICAgICAgICAgICAgICAgIHg9XCIwXCJcbiAgICAgICAgICAgICAgICAgIHk9XCIwXCJcbiAgICAgICAgICAgICAgICAgIFthdHRyLndpZHRoXT1cIm5vZGUud2lkdGhcIlxuICAgICAgICAgICAgICAgICAgW2F0dHIuaGVpZ2h0XT1cIm5vZGUuaGVpZ2h0XCJcbiAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiNEMzZDRkZcIlxuICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMVwiXG4gICAgICAgICAgICAgICAgPjwvcmVjdD4gLS0+XG4gICAgICA8c3ZnOmcgbGliLXN0YWdlLW5vZGUgW25vZGVdPVwibm9kZVwiIFtpc1N0YXJ0Tm9kZV09XCJub2RlLmlzU3RhcnROb2RlXCJcbiAgICAgICAgKHN0YWdlUHJvcGVydGllc1VwZGF0ZWQpPVwib25TdGFnZVByb3BlcnRpZXNVcGRhdGVkKCRldmVudClcIiAoc2hvd1NoaWVsZERpYWxvZyk9XCJvblNob3dTaGllbGREaWFsb2coJGV2ZW50KVwiXG4gICAgICAgIChzaG93RXNjYWxhdGlvbkRpYWxvZyk9XCJvblNob3dFc2NhbGF0aW9uRGlhbG9nKCRldmVudClcIiAoc2hvd0Zvcm1EaWFsb2cpPVwiXG4gICAgICAgICAgdG9nZ2xlU3RhcnROb2RlRm9ybVBvcHVwKCRldmVudCwgbm9kZS54LCBub2RlLnksIHN3aW1sYW5lLm9yZGVyLCBub2RlKVxuICAgICAgICBcIj48L3N2ZzpnPlxuICAgICAgfVxuXG4gICAgICA8IS0tIERlY2lzaW9uIG5vZGUgLS0+XG4gICAgICBAaWYgKG5vZGUudHlwZSA9PT0gJ2RlY2lzaW9uJykge1xuICAgICAgPHBhdGggW2F0dHIuZF09XCJcbiAgICAgICAgICAnTSAwICcgK1xuICAgICAgICAgIG5vZGUuaGVpZ2h0IC8gMiArXG4gICAgICAgICAgJyBMICcgK1xuICAgICAgICAgIG5vZGUud2lkdGggLyAyICtcbiAgICAgICAgICAnIDAnICtcbiAgICAgICAgICAnIEwgJyArXG4gICAgICAgICAgbm9kZS53aWR0aCArXG4gICAgICAgICAgJyAnICtcbiAgICAgICAgICBub2RlLmhlaWdodCAvIDIgK1xuICAgICAgICAgICcgTCAnICtcbiAgICAgICAgICBub2RlLndpZHRoIC8gMiArXG4gICAgICAgICAgJyAnICtcbiAgICAgICAgICBub2RlLmhlaWdodCArXG4gICAgICAgICAgJyBaJ1xuICAgICAgICBcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiNEMzZDRkZcIiBzdHJva2Utd2lkdGg9XCIxXCIgc3R5bGU9XCJwb2ludGVyLWV2ZW50czogbm9uZVwiPjwvcGF0aD5cblxuICAgICAgPCEtLSBEZWNpc2lvbiBub2RlIGNvbmRpdGlvbiBpbmRpY2F0b3IgaWNvbiAtLT5cbiAgICAgIDxzdmc6ZyAoY2xpY2spPVwic2hvd0RlY2lzaW9uQ29uZGl0aW9uc1BvcHVwKCRldmVudCwgbm9kZSwgc3dpbWxhbmUub3JkZXIpXCIgY2xhc3M9XCJkZWNpc2lvbi1jb25kaXRpb24taWNvblwiXG4gICAgICAgIFthdHRyLnRyYW5zZm9ybV09XCJcbiAgICAgICAgICAndHJhbnNsYXRlKCcgK1xuICAgICAgICAgIChub2RlLndpZHRoIC8gMiAtIDEwKSArXG4gICAgICAgICAgJywnICtcbiAgICAgICAgICAobm9kZS5oZWlnaHQgLyAyIC0gMTApICtcbiAgICAgICAgICAnKSdcbiAgICAgICAgXCI+XG4gICAgICAgIDxzdmc6cmVjdCB4PVwiLTVcIiB5PVwiLTVcIiB3aWR0aD1cIjMwXCIgaGVpZ2h0PVwiMzBcIiBmaWxsPVwidHJhbnNwYXJlbnRcIiBzdHlsZT1cImN1cnNvcjogcG9pbnRlclwiIC8+XG4gICAgICAgIDxzdmc6cGF0aCBkPVwiTTEwIDBIMjBWMkgxMFYwWk0xMCA4SDIwVjEwSDEwVjhaTTEwIDRIMjBWNkgxMFY0Wk0wIDBIOFYySDBWMFpNMCA4SDhWMTBIMFY4Wk0wIDRIOFY2SDBWNFpcIlxuICAgICAgICAgIGZpbGw9XCIjRDM2Q0ZGXCIgLz5cbiAgICAgIDwvc3ZnOmc+XG4gICAgICB9XG5cbiAgICAgIDwhLS0gRm9ybSBub2RlIC0tPlxuICAgICAgQGlmIChub2RlLnR5cGUgPT09ICdmb3JtJykge1xuICAgICAgPHBhdGhcbiAgICAgICAgZD1cIk05NS4wNjI1IDUwLjU1OTFWOTUuMDYyNUM5NS4wNjI1IDk3Ljk3MTYgOTMuOTA2OSAxMDAuNzYyIDkxLjg0OTggMTAyLjgxOUM4OS43OTI4IDEwNC44NzYgODcuMDAyOCAxMDYuMDMxIDg0LjA5MzggMTA2LjAzMUgzMi45MDYyQzI5Ljk5NzIgMTA2LjAzMSAyNy4yMDcyIDEwNC44NzYgMjUuMTUwMiAxMDIuODE5QzIzLjA5MzEgMTAwLjc2MiAyMS45Mzc1IDk3Ljk3MTYgMjEuOTM3NSA5NS4wNjI1VjIxLjkzNzVDMjEuOTM3NSAxOS4wMjg0IDIzLjA5MzEgMTYuMjM4NSAyNS4xNTAyIDE0LjE4MTRDMjcuMjA3MiAxMi4xMjQ0IDI5Ljk5NzIgMTAuOTY4OCAzMi45MDYyIDEwLjk2ODhINTUuNDcyMkM1Ny40MTA5IDEwLjk2OSA1OS4yNzAxIDExLjczOTIgNjAuNjQxMiAxMy4xMDk5TDkyLjkyMTMgNDUuMzkwMUM5NC4yOTIgNDYuNzYxMSA5NS4wNjIyIDQ4LjYyMDQgOTUuMDYyNSA1MC41NTkxWlwiXG4gICAgICAgIHRyYW5zZm9ybT1cInNjYWxlKDAuNylcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiNEMzZDRkZcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIHN0eWxlPVwicG9pbnRlci1ldmVudHM6IG5vbmVcIiAvPlxuICAgICAgPHBhdGhcbiAgICAgICAgZD1cIk01OC41IDEyLjc5NjlWNDAuMjE4OEM1OC41IDQyLjE1ODEgNTkuMjcwNCA0NC4wMTgxIDYwLjY0MTggNDUuMzg5NUM2Mi4wMTMxIDQ2Ljc2MDggNjMuODczMSA0Ny41MzEyIDY1LjgxMjUgNDcuNTMxMkg5My4yMzQ0XCJcbiAgICAgICAgdHJhbnNmb3JtPVwic2NhbGUoMC43KVwiIHN0cm9rZT1cIiNEMzZDRkZcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHlsZT1cInBvaW50ZXItZXZlbnRzOiBub25lXCIgLz5cbiAgICAgIDx0ZXh0IHg9XCI1MCVcIiB5PVwiNTAlXCIgdGV4dC1hbmNob3I9XCJtaWRkbGVcIiBkb21pbmFudC1iYXNlbGluZT1cIm1pZGRsZVwiIGZvbnQtZmFtaWx5PVwic2Fucy1zZXJpZlwiIGZvbnQtc2l6ZT1cIjE0XCJcbiAgICAgICAgZmlsbD1cIiNEMzZDRkZcIiBzdHlsZT1cInBvaW50ZXItZXZlbnRzOiBub25lXCI+XG4gICAgICAgIEZvcm1cbiAgICAgIDwvdGV4dD5cbiAgICAgIH1cblxuICAgICAgPCEtLSBTdWJmbG93IG5vZGUgLS0+XG4gICAgICBAaWYgKG5vZGUudHlwZSA9PT0gJ3N1YmZsb3cnKSB7XG4gICAgICA8c3ZnOmcgbGliLXN0YWdlLW5vZGUgW25vZGVdPVwibm9kZVwiIFtpc1N0YXJ0Tm9kZV09XCJub2RlLmlzU3RhcnROb2RlXCIgW2lzU3ViZmxvd109XCJ0cnVlXCJcbiAgICAgICAgKHN0YWdlUHJvcGVydGllc1VwZGF0ZWQpPVwib25TdGFnZVByb3BlcnRpZXNVcGRhdGVkKCRldmVudClcIiAoc2hvd1NoaWVsZERpYWxvZyk9XCJvblNob3dTaGllbGREaWFsb2coJGV2ZW50KVwiXG4gICAgICAgIChzaG93RXNjYWxhdGlvbkRpYWxvZyk9XCJvblNob3dFc2NhbGF0aW9uRGlhbG9nKCRldmVudClcIiAoc2hvd0Zvcm1EaWFsb2cpPVwiXG4gICAgICAgICAgdG9nZ2xlU3RhcnROb2RlRm9ybVBvcHVwKCRldmVudCwgbm9kZS54LCBub2RlLnksIHN3aW1sYW5lLm9yZGVyLCBub2RlKVxuICAgICAgICBcIj48L3N2ZzpnPlxuICAgICAgfVxuXG4gICAgICA8IS0tIENvbm5lY3Rpb24gcG9pbnRzIGZvciB0aGlzIG5vZGUgKHJlbmRlcmVkIGxhc3QgPSB0b3Btb3N0KSAtLT5cbiAgICAgIEBmb3IgKHBvaW50IG9mIG5vZGUuY29ubmVjdGlvblBvaW50cyB8fCBbXTsgdHJhY2sgcG9pbnQuaWQpIHtcbiAgICAgICAgQGlmIChpc0Nvbm5lY3Rpb25Qb2ludFZpc2libGUobm9kZS5pZCkpIHtcbiAgICAgICAgICA8dXNlIGNsYXNzPVwiY29ubmVjdGlvbi1wb2ludFwiIFthdHRyLmhyZWZdPVwiJyNjb25uZWN0aW9uLXBvaW50LXRlbXBsYXRlJ1wiIFthdHRyLnhdPVwicG9pbnQueFwiIFthdHRyLnldPVwicG9pbnQueVwiXG4gICAgICAgICAgICBbYXR0ci5pZF09XCJwb2ludC5pZFwiIChtb3VzZWRvd24pPVwic3RhcnRDb25uZWN0aW9uRHJhZygkZXZlbnQsIHBvaW50LCBzd2ltbGFuZS5vcmRlcilcIiAvPlxuICAgICAgICB9XG4gICAgICB9XG4gICAgPC9nPlxuICAgIDwhLS0gQSB0cmFuc3BhcmVudCBob3ZlciBhcmVhIGZvciBpbXByb3ZlZCBob3ZlciBkZXRlY3Rpb24gLS0+XG4gICAgPHJlY3QgW2F0dHIueF09XCJub2RlLnggLSAxMFwiIFthdHRyLnldPVwibm9kZS55IC0gMTBcIiBbYXR0ci53aWR0aF09XCJub2RlLndpZHRoICsgMjBcIiBbYXR0ci5oZWlnaHRdPVwibm9kZS5oZWlnaHQgKyAyMFwiXG4gICAgICBmaWxsPVwidHJhbnNwYXJlbnRcIiAobW91c2VvdmVyKT1cInNob3dDb25uZWN0aW9uUG9pbnRzKG5vZGUuaWQsIHN3aW1sYW5lLm9yZGVyKVwiXG4gICAgICAobW91c2VvdXQpPVwiaGlkZUNvbm5lY3Rpb25Qb2ludHMobm9kZS5pZClcIiBzdHlsZT1cInBvaW50ZXItZXZlbnRzOiBub25lXCIgLz5cbiAgICB9IH1cblxuICAgIDwhLS0gQ29ubmVjdGlvbnMgLS0+XG4gICAgQGZvciAoY29ubmVjdGlvbiBvZiBzdGF0ZS5jb25uZWN0aW9uczsgdHJhY2sgY29ubmVjdGlvbi5pZCkge1xuICAgIDxnIGNsYXNzPVwiY29ubmVjdGlvbi1lbGVtZW50XCI+XG4gICAgICA8cGF0aCBbYXR0ci5kXT1cImdldENvbm5lY3Rpb25QYXRoRm9yU2F2ZWRDb25uZWN0aW9uKGNvbm5lY3Rpb24pXCIgc3Ryb2tlPVwiI0QzNkNGRlwiIHN0cm9rZS13aWR0aD1cIjJcIiBmaWxsPVwibm9uZVwiXG4gICAgICAgIG1hcmtlci1lbmQ9XCJ1cmwoI2Fycm93aGVhZClcIj48L3BhdGg+XG5cbiAgICAgIDwhLS0gQ29ubmVjdGlvbiBMYWJlbCAtLT5cbiAgICAgIEBpZiAoY29ubmVjdGlvbi5zb3VyY2VOb2RlSWQgJiYgY29ubmVjdGlvbi50YXJnZXROb2RlSWQpIHtcbiAgICAgIDxmb3JlaWduT2JqZWN0IFthdHRyLnhdPVwiZ2V0TGFiZWxQb3NpdGlvbihjb25uZWN0aW9uKS54XCIgW2F0dHIueV09XCJnZXRMYWJlbFBvc2l0aW9uKGNvbm5lY3Rpb24pLnlcIiB3aWR0aD1cIjE1MFwiXG4gICAgICAgIGhlaWdodD1cIjQwXCIgc3R5bGU9XCJvdmVyZmxvdzogdmlzaWJsZTsgcG9pbnRlci1ldmVudHM6IGFsbDtcIiBbYXR0ci50cmFuc2Zvcm1dPVwiJ3RyYW5zbGF0ZSgtNzUsIC0xMCknXCI+XG4gICAgICAgIDx3Zi1sYWJlbC1lZGl0b3IgW2xhYmVsXT1cImNvbm5lY3Rpb24ubGFiZWwgfHwgJ05ldyBBY3Rpb24nXCIgW3hdPVwiMFwiIFt5XT1cIjBcIiBbaXNDb25uZWN0aW9uXT1cInRydWVcIlxuICAgICAgICAgIChsYWJlbENoYW5nZSk9XCJzYXZlQ29ubmVjdGlvbkxhYmVsKGNvbm5lY3Rpb24sICRldmVudClcIiAob3BlbkRpYWxvZyk9XCJvblNob3dBY3Rpb25EaWFsb2coY29ubmVjdGlvbilcIiAvPlxuICAgICAgPC9mb3JlaWduT2JqZWN0PlxuICAgICAgfVxuICAgIDwvZz5cbiAgICB9XG5cbiAgICA8IS0tIENvbm5lY3Rpb24gcHJldmlldyBsaW5lIC0tPlxuICAgIEBpZiAoc3RhdGUuaXNDb25uZWN0aW9uRHJhZ2dpbmcoKSkge1xuICAgIDxnPlxuICAgICAgPHBhdGggW2F0dHIuZF09XCJnZXRDb25uZWN0aW9uUGF0aCgpXCIgc3Ryb2tlPVwiI0QzNkNGRlwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtZGFzaGFycmF5PVwiNSw1XCIgZmlsbD1cIm5vbmVcIj48L3BhdGg+XG4gICAgPC9nPlxuICAgIH1cbiAgPC9zdmc+XG5cbiAgPGRpdiAqbmdJZj1cInBvcHVwVmlzaWJsZVwiIFtzdHlsZS5wb3NpdGlvbl09XCInYWJzb2x1dGUnXCIgW3N0eWxlLmxlZnQucHhdPVwicG9wdXBYXCIgW3N0eWxlLnRvcC5weF09XCJwb3B1cFlcIj5cbiAgICA8dmVyYmVuLXBvcC1VcCBbZHJvcGRvd25PcGVuXT1cInRydWVcIiBbY3VzdG9tU3R5bGVzXT1cInsgJ3otaW5kZXgnOiAnOTknIH1cIiBbZW5hYmxlTW91c2VMZWF2ZV09XCJmYWxzZVwiXG4gICAgICAoZHJvcGRvd25PcGVuQ2hhbmdlKT1cIiRldmVudCA/IG51bGwgOiBoaWRlQ29ubmVjdGlvblBvcHVwKClcIj5cbiAgICAgIDxkaXYgZHJvcGRvd24tdHJpZ2dlciBzdHlsZT1cImRpc3BsYXk6IG5vbmVcIj5cbiAgICAgICAgPCEtLSBIaWRkZW4gdHJpZ2dlciBlbGVtZW50IC0tPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwicC0zIGJnLXdoaXRlIGJvcmRlciBib3JkZXItZ3JheS0yMDAgcm91bmRlZCBzaGFkb3ctbWRcIiBkcm9wZG93bi1jb250ZW50PlxuICAgICAgICA8aDQgY2xhc3M9XCJtYi0yIGZvbnQtbWVkaXVtXCI+Q3JlYXRlIENvbm5lY3Rpb248L2g0PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtMlwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHR5cGUgb2YgYWxsb3dlZE5vZGVUeXBlc1wiPlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInB4LTMgcHktMiBiZy13aGl0ZSBib3JkZXIgYm9yZGVyLWdyYXktMjAwIHJvdW5kZWQgdGV4dC1zbSBob3ZlcjpiZy1ncmF5LTUwXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImNyZWF0ZU5vZGVDb25uZWN0aW9uKHR5cGUpXCI+XG4gICAgICAgICAgICAgIENyZWF0ZSB7eyB0eXBlIHwgdGl0bGVjYXNlIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicHgtMyBweS0yIGJnLXdoaXRlIGJvcmRlciBib3JkZXItZ3JheS0yMDAgcm91bmRlZCB0ZXh0LXNtIGhvdmVyOmJnLWdyYXktNTBcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImhpZGVDb25uZWN0aW9uUG9wdXAoKVwiPlxuICAgICAgICAgICAgQ2FuY2VsXG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC92ZXJiZW4tcG9wLVVwPlxuICA8L2Rpdj5cblxuICA8ZGl2ICpuZ0lmPVwic2hvd1N0YXJ0Tm9kZUZvcm1Qb3B1cFwiIFtzdHlsZS5wb3NpdGlvbl09XCInYWJzb2x1dGUnXCIgW3N0eWxlLmxlZnQucHhdPVwic3RhcnROb2RlRm9ybVBvcHVwWFwiXG4gICAgW3N0eWxlLnRvcC5weF09XCJzdGFydE5vZGVGb3JtUG9wdXBZXCI+XG4gICAgPHZlcmJlbi1wb3AtVXAgW2Ryb3Bkb3duT3Blbl09XCJ0cnVlXCIgW2N1c3RvbVN0eWxlc109XCJ7ICd6LWluZGV4JzogJzEwMCcgfVwiPlxuICAgICAgPGRpdiBkcm9wZG93bi10cmlnZ2VyIHN0eWxlPVwiZGlzcGxheTogbm9uZVwiPlxuICAgICAgICA8IS0tIEhpZGRlbiB0cmlnZ2VyIGVsZW1lbnQgLS0+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwLTMgYmctd2hpdGUgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCByb3VuZGVkIHNoYWRvdy1tZCB3LTY0XCIgZHJvcGRvd24tY29udGVudFxuICAgICAgICBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6IHdoaXRlOyB6LWluZGV4OiAxMDAwXCI+XG4gICAgICAgIDxoNCBjbGFzcz1cIm1iLTIgZm9udC1tZWRpdW1cIj5TZWxlY3QgV29ya2Zsb3cgRm9ybTwvaDQ+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJpc0xvYWRpbmdTdGFydE5vZGVGb3Jtc1wiIGNsYXNzPVwidGV4dC1jZW50ZXIgcHktMlwiPlxuICAgICAgICAgIExvYWRpbmcgZm9ybXMuLi5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9XCIhaXNMb2FkaW5nU3RhcnROb2RlRm9ybXNcIiBjbGFzcz1cIm1heC1oLTQ4IG92ZXJmbG93LXktYXV0b1wiIHN0eWxlPVwibWF4LWhlaWdodDogMTkycHg7IG92ZXJmbG93LXk6IGF1dG87XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgY2xhc3M9XCJ3LWZ1bGwgcHgtMyBweS0yIGJnLWdyYXktNTAgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCByb3VuZGVkIHRleHQtc20gaG92ZXI6YmctZ3JheS01MCB0ZXh0LWxlZnRcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0U3RhcnROb2RlRm9ybShudWxsKVwiPlxuICAgICAgICAgICAgICBDbGVhciBmb3JtIHNlbGVjdGlvblxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgZm9ybSBvZiBzdGFydE5vZGVGb3Jtc0xpc3RcIiBjbGFzcz1cIm1iLTFcIj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJ3LWZ1bGwgcHgtMyBweS0yIGJnLXdoaXRlIGJvcmRlciBib3JkZXItZ3JheS0yMDAgcm91bmRlZCB0ZXh0LXNtIGhvdmVyOmJnLWdyYXktNTAgdGV4dC1sZWZ0XCJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnYmctYmx1ZS01MCAhYm9yZGVyLWJsdWUtNTAwICFib3JkZXItMiBmb250LXNlbWlib2xkJzogZm9ybT8uQ29kZSA9PT0gYWN0aXZlTm9kZUZvckZvcm1TZWxlY3Rpb24/LnN0YWdlRGF0YT8uZm9ybUlkfVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RTdGFydE5vZGVGb3JtKGZvcm0pXCI+XG4gICAgICAgICAgICAgIHt7IGZvcm0uTmFtZSB9fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cInN0YXJ0Tm9kZUZvcm1zTGlzdC5sZW5ndGggPT09IDBcIiBjbGFzcz1cInRleHQtY2VudGVyIHB5LTIgdGV4dC1ncmF5LTUwMFwiPlxuICAgICAgICAgICAgTm8gZm9ybXMgYXZhaWxhYmxlXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC92ZXJiZW4tcG9wLVVwPlxuICA8L2Rpdj5cblxuICA8ZGl2ICpuZ0lmPVwic2hvd1N1YmZsb3dQb3B1cFwiIFtzdHlsZS5wb3NpdGlvbl09XCInYWJzb2x1dGUnXCIgW3N0eWxlLmxlZnQucHhdPVwic3ViZmxvd1BvcHVwWFwiXG4gICAgW3N0eWxlLnRvcC5weF09XCJzdWJmbG93UG9wdXBZXCI+XG4gICAgPHZlcmJlbi1wb3AtVXAgW2Ryb3Bkb3duT3Blbl09XCJ0cnVlXCIgW2N1c3RvbVN0eWxlc109XCJ7ICd6LWluZGV4JzogJzEwMCcgfVwiPlxuICAgICAgPGRpdiBkcm9wZG93bi10cmlnZ2VyIHN0eWxlPVwiZGlzcGxheTogbm9uZVwiPlxuICAgICAgICA8IS0tIEhpZGRlbiB0cmlnZ2VyIGVsZW1lbnQgLS0+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwLTMgYmctd2hpdGUgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCByb3VuZGVkIHNoYWRvdy1tZCB3LTY0XCIgZHJvcGRvd24tY29udGVudFxuICAgICAgICBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6IHdoaXRlOyB6LWluZGV4OiAxMDAwXCI+XG4gICAgICAgIDxoNCBjbGFzcz1cIm1iLTIgZm9udC1tZWRpdW1cIj5TZWxlY3QgV29ya2Zsb3c8L2g0PlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNMb2FkaW5nV29ya2Zsb3dzXCIgY2xhc3M9XCJ0ZXh0LWNlbnRlciBweS0yXCI+XG4gICAgICAgICAgTG9hZGluZyB3b3JrZmxvd3MuLi5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9XCIhaXNMb2FkaW5nV29ya2Zsb3dzXCIgY2xhc3M9XCJtYXgtaC00OCBvdmVyZmxvdy15LWF1dG9cIiBzdHlsZT1cIm1heC1oZWlnaHQ6IDE5MnB4OyBvdmVyZmxvdy15OiBhdXRvO1wiPlxuICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHdvcmtmbG93IG9mIHdvcmtmbG93c0xpc3RcIiBjbGFzcz1cIm1iLTFcIj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJ3LWZ1bGwgcHgtMyBweS0yIGJnLXdoaXRlIGJvcmRlciBib3JkZXItZ3JheS0yMDAgcm91bmRlZCB0ZXh0LXNtIGhvdmVyOmJnLWdyYXktNTAgdGV4dC1sZWZ0XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdFN1YmZsb3dXb3JrZmxvdyh3b3JrZmxvdylcIj5cbiAgICAgICAgICAgICAge3sgd29ya2Zsb3cuTmFtZSB9fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cIndvcmtmbG93c0xpc3QubGVuZ3RoID09PSAwXCIgY2xhc3M9XCJ0ZXh0LWNlbnRlciBweS0yIHRleHQtZ3JheS01MDBcIj5cbiAgICAgICAgICAgIE5vIHdvcmtmbG93cyBhdmFpbGFibGVcbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L3ZlcmJlbi1wb3AtVXA+XG4gIDwvZGl2PlxuXG4gIDxsaWItY29uZGl0aW9ucy1wb3B1cCBbdmlzaWJsZV09XCJzaG93RGVjaXNpb25Db25kaXRpb25EaWFsb2dcIiBbZGVjaXNpb25Ob2RlSWRdPVwiYWN0aXZlRGVjaXNpb25Ob2RlSWRcIlxuICAgIFtuZXdDb25uZWN0aW9uSWRdPVwiYWN0aXZlQ29ubmVjdGlvbklkXCIgW3BvcHVwWF09XCJkZWNpc2lvbkNvbmRpdGlvblBvcHVwWFwiIFtwb3B1cFldPVwiZGVjaXNpb25Db25kaXRpb25Qb3B1cFlcIlxuICAgIChjbG9zZWQpPVwib25EZWNpc2lvbkNvbmRpdGlvbkNhbmNlbGxlZCgpXCIgKHNhdmVkKT1cIm9uRGVjaXNpb25Db25kaXRpb25TYXZlZCgkZXZlbnQpXCI+PC9saWItY29uZGl0aW9ucy1wb3B1cD5cblxuICA8IS0tIDxsaWItZGVjaXNpb24tcG9wdXBcbiAgICBbdmlzaWJsZV09XCJzaG93Q29uZGl0aW9uc0RpYWxvZ1wiXG4gICAgW2RlY2lzaW9uTm9kZUlkXT1cImFjdGl2ZURlY2lzaW9uTm9kZUlkXCJcbiAgICBbcG9wdXBYXT1cImRlY2lzaW9uQ29uZGl0aW9uUG9wdXBYXCJcbiAgICBbcG9wdXBZXT1cImRlY2lzaW9uQ29uZGl0aW9uUG9wdXBZXCJcbiAgICAoY2xvc2VkKT1cIm9uRGVjaXNpb25Db25kaXRpb25DYW5jZWxsZWQoKVwiXG4gID48L2xpYi1kZWNpc2lvbi1wb3B1cD4gLS0+XG5cbiAgPGxpYi1zdGFnZS1kaWFsb2cgW3Zpc2libGVdPVwic2hvd1N0YWdlRGlhbG9nTG9jYWxcIiBbc3RhZ2VEYXRhXT1cImFjdGl2ZVN0YWdlRGF0YSB8fCB7fVwiXG4gICAgKGNsb3NlZCk9XCJvblN0YWdlRGlhbG9nQ2xvc2VkKClcIiAoc2F2ZWQpPVwib25TdGFnZURpYWxvZ1NhdmVkKCRldmVudClcIj48L2xpYi1zdGFnZS1kaWFsb2c+XG5cbiAgPGxpYi1hY3Rpb24tZGlhbG9nIFt2aXNpYmxlXT1cInNob3dBY3Rpb25EaWFsb2dMb2NhbFwiIFthY3Rpb25EYXRhXT1cImFjdGl2ZUFjdGlvbkRhdGFcIiAoY2xvc2VkKT1cIm9uQWN0aW9uRGlhbG9nQ2xvc2VkKClcIlxuICAgIChzYXZlZCk9XCJvbkFjdGlvbkRpYWxvZ1NhdmVkKCRldmVudClcIiAoZGVsZXRlZCk9XCJvbkFjdGlvbkRpYWxvZ0RlbGV0ZWQoJGV2ZW50KVwiPjwvbGliLWFjdGlvbi1kaWFsb2c+XG5cblxuICA8bGliLWVzY2FsYXRpb24tZGlhbG9nIFt2aXNpYmxlXT1cInNob3dFc2NhbGF0aW9uRGlhbG9nTG9jYWxcIiBbdHlwZV09XCJhY3RpdmVFc2NhbGF0aW9uVHlwZSgpIVwiXG4gICAgW3N0YWdlQ29kZV09XCJhY3RpdmVTdGFnZUNvZGUoKSB8fCAnJ1wiIFt3b3JrZmxvd0NvZGVdPVwic3RhdGUud29ya2Zsb3c/LkNvZGUgfHwgJydcIlxuICAgIChjbG9zZWQpPVwib25Fc2NhbGF0aW9uRGlhbG9nQ2xvc2VkKClcIj48L2xpYi1lc2NhbGF0aW9uLWRpYWxvZz5cbjwvZGl2PlxuIl19
1226
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzaWduZXItY2FudmFzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZlcmJlbi13b3JrZmxvdy11aS9zcmMvbGliL2NvbXBvbmVudHMvd29ya2Zsb3ctZGVzaWduZXIvZGVzaWduZXItY2FudmFzL2Rlc2lnbmVyLWNhbnZhcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9jb21wb25lbnRzL3dvcmtmbG93LWRlc2lnbmVyL2Rlc2lnbmVyLWNhbnZhcy9kZXNpZ25lci1jYW52YXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBQ04sTUFBTSxFQUNOLFNBQVMsR0FFVixNQUFNLGVBQWUsQ0FBQzs7Ozs7Ozs7Ozs7O0FBa0J2QixNQUFNLE9BQU8sdUJBQXVCO0lBNkd6QjtJQUNDO0lBN0dELFlBQVksR0FBYSxJQUFJLENBQUM7SUFDN0IsZUFBZSxHQUFHLElBQUksWUFBWSxFQUE0QixDQUFDO0lBQy9ELGVBQWUsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBQy9DLG9CQUFvQixHQUNsQixJQUFJLENBQUM7SUFDRyxzQkFBc0IsR0FBRyxJQUFJLFlBQVksRUFHL0MsQ0FBQztJQUNLLHVCQUF1QixHQUFHLElBQUksWUFBWSxFQUdoRCxDQUFDO0lBRUwsK0JBQStCO0lBQ1EsU0FBUyxDQUEwQjtJQUcxRSxlQUFlLENBQUMsS0FBaUI7UUFDL0Isc0VBQXNFO1FBQ3RFLElBQ0UsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCO1lBQ3RCLENBQUMsSUFBSSxDQUFDLHNCQUFzQjtZQUM1QixDQUFDLElBQUksQ0FBQyxZQUFZLElBQUksdUNBQXVDO1lBQzdELElBQUks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QUUsQ0FBQztRQUN4QixDQUFDO0lBQ0gsQ0FBQztJQUVELG1CQUFtQixDQUFDLFVBQXNCLEVBQUUsS0FBYTtRQUN2RCwyQ0FBMkM7UUFDM0MsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDM0QsSUFBSSxJQUFJLENBQUMsRUFBRSxLQUFLLFVBQVUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDOUIsT0FBTztvQkFDTCxHQUFHLElBQUk7b0JBQ1AsS0FBSyxFQUFFLEtBQUs7aUJBQ2IsQ0FBQztZQUNKLENBQUM7WUFDRCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzt3R0FyakRVLHVCQUF1Qjs0RkFBdkIsdUJBQXVCLHlkQzdCcEMsMjZvQkFzY0E7OzRGRHphYSx1QkFBdUI7a0JBTG5DLFNBQVM7K0JBQ0UscUJBQXFCOzRIQUt0QixZQUFZO3NCQUFwQixLQUFLO2dCQUNJLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csZUFBZTtzQkFBeEIsTUFBTTtnQkFHRyxzQkFBc0I7c0JBQS9CLE1BQU07Z0JBSUcsdUJBQXVCO3NCQUFoQyxNQUFNO2dCQU1nQyxTQUFTO3NCQUEvQyxTQUFTO3VCQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBR3JDLGVBQWU7c0JBRGQsWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgc2lnbmFsLFxuICBWaWV3Q2hpbGQsXG4gIFdyaXRhYmxlU2lnbmFsLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEVzY2FsYXRpb25UeXBlLCBGb3JtLCBXb3JrZmxvdywgV29ya2Zsb3dBY3Rpb24sIFdvcmtmbG93U3RhZ2UgfSBmcm9tICd2ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9tb2RlbHMnO1xuaW1wb3J0IHsgV29ya2Zsb3dEYXRhU2VydmljZSB9IGZyb20gJy4uL3dvcmtmbG93LWRhdGEuc2VydmljZSc7XG5pbXBvcnQgeyBXb3JrZmxvd0Rlc2lnbmVyU3RhdGUgfSBmcm9tICcuLi93b3JrZmxvdy1kZXNpZ25lci5zdGF0ZSc7XG5pbXBvcnQge1xuICBDb25uZWN0aW9uLFxuICBDb25uZWN0aW9uUG9pbnQsXG4gIE5vZGUsXG4gIFN3aW1sYW5lSXRlbSxcbiAgVG9vbFR5cGUsXG4gIE5vZGUgYXMgV0ZOb2RlLFxufSBmcm9tICcuLi93b3JrZmxvdy1kZXNpZ25lci50eXBlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1kZXNpZ25lci1jYW52YXMnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGVzaWduZXItY2FudmFzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2Rlc2lnbmVyLWNhbnZhcy5jb21wb25lbnQuY3NzJyxcbn0pXG5leHBvcnQgY2xhc3MgRGVzaWduZXJDYW52YXNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBzZWxlY3RlZFRvb2w6IFRvb2xUeXBlID0gbnVsbDtcbiAgQE91dHB1dCgpIGNsaWNrZWRQb3NpdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8eyB4OiBudW1iZXI7IHk6IG51bWJlciB9PigpO1xuICBAT3V0cHV0KCkgc3ViZmxvd1NlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBwZW5kaW5nU3RhZ2VQb3NpdGlvbjogeyBzd2ltbGFuZUluZGV4OiBudW1iZXI7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0gfCBudWxsID1cbiAgICBudWxsO1xuICBAT3V0cHV0KCkgc3RhZ2VQcm9wZXJ0aWVzVXBkYXRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8e1xuICAgIG5vZGVJZDogc3RyaW5nO1xuICAgIHN0YWdlRGF0YTogUGFydGlhbDxXb3JrZmxvd1N0YWdlPjtcbiAgfT4oKTtcbiAgQE91dHB1dCgpIGFjdGlvblByb3BlcnRpZXNVcGRhdGVkID0gbmV3IEV2ZW50RW1pdHRlcjx7XG4gICAgY29ubmVjdGlvbklkOiBzdHJpbmc7XG4gICAgYWN0aW9uRGF0YTogUGFydGlhbDxXb3JrZmxvd0FjdGlvbj47XG4gIH0+KCk7XG5cbiAgLy8gUmVmZXJlbmNlIHRvIHRoZSBTVkcgZWxlbWVudFxuICBAVmlld0NoaWxkKCdjYW52YXMnLCB7IHN0YXRpYzogdHJ1ZSB9KSBjYW52YXNSZWYhOiBFbGVtZW50UmVmPFNWR0VsZW1lbnQ+O1xuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzptb3VzZXVwJywgWyckZXZlbnQnXSlcbiAgb25XaW5kb3dNb3VzZVVwKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgLy8gSWYgd2UgaGF2ZSBhIHBvcHVwIG9wZW4gYnV0IHRoZSBtb3VzZSBpcyByZWxlYXNlZCBvdXRzaWRlLCBjbGVhbiB1cFxuICAgIGlmIChcbiAgICAgICF0aGlzLnNob3dTdWJmbG93UG9wdXAgJiZcbiAgICAgICF0aGlzLnNob3dTdGFydE5vZGVGb3JtUG9wdXAgJiZcbiAgICAgICF0aGlzLnBvcHVwVmlzaWJsZSAmJiAvLyBPbmx5IGVuZCBkcmFnIGlmIG5vIHBvcHVwIGlzIHZpc2libGVcbiAgICAgIHRoaXMuc3RhdGUuaXNDb25uZWN0aW9uRHJhZ2dpbmcoKVxuICAgICkge1xuICAgICAgY29uc29sZS5sb2coJ0V4dGVybmFsIG1vdXNldXAgZGV0ZWN0ZWQgLSBjbGVhbmluZyB1cCBjb25uZWN0aW9uIGRyYWcnKTtcbiAgICAgIHRoaXMuc3RhdGUuZW5kQ29ubmVjdGlvbkRyYWcoKTtcbiAgICB9XG4gIH1cblxuICAvLyBDYW52YXMgZGltZW5zaW9uc1xuICBjYW52YXNXaWR0aCA9IDMwMDA7XG4gIGNhbnZhc0hlaWdodCA9IDIwMDA7XG5cbiAgLy8gR3JpZCBzaXplXG4gIGdyaWRTaXplID0gMjA7XG5cbiAgc3dpbWxhbmVIZWlnaHQgPSAyNjM7XG4gIHZpc2libGVDb25uZWN0aW9uUG9pbnRzTm9kZUlkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgcG9wdXBWaXNpYmxlID0gZmFsc2U7XG4gIHBvcHVwWCA9IDA7XG4gIHBvcHVwWSA9IDA7XG4gIGFsbG93ZWROb2RlVHlwZXM6IHN0cmluZ1tdID0gW107XG5cbiAgc2hvd1N0YXJ0Tm9kZUZvcm1Qb3B1cDogYm9vbGVhbiA9IGZhbHNlO1xuICBzdGFydE5vZGVGb3Jtc0xpc3Q6IEZvcm1bXSA9IFtdO1xuICBpc0xvYWRpbmdTdGFydE5vZGVGb3JtczogYm9vbGVhbiA9IGZhbHNlO1xuICBzdGFydE5vZGVGb3JtUG9wdXBYOiBudW1iZXIgPSAwO1xuICBzdGFydE5vZGVGb3JtUG9wdXBZOiBudW1iZXIgPSAwO1xuICBhY3RpdmVOb2RlRm9yRm9ybVNlbGVjdGlvbjogTm9kZSB8IG51bGwgPSBudWxsO1xuICBub2RlRm9ybXM6IFdyaXRhYmxlU2lnbmFsPFxuICAgIFJlY29yZDxzdHJpbmcsIHsgZm9ybUlkOiBzdHJpbmc7IGZvcm1OYW1lOiBzdHJpbmcgfT5cbiAgPiA9IHNpZ25hbCh7fSk7XG5cbiAgc2hvd1N1YmZsb3dQb3B1cDogYm9vbGVhbiA9IGZhbHNlO1xuICB3b3JrZmxvd3NMaXN0OiBXb3JrZmxvd1tdID0gW107XG4gIGlzTG9hZGluZ1dvcmtmbG93czogYm9vbGVhbiA9IGZhbHNlO1xuICBzdWJmbG93UG9wdXBYOiBudW1iZXIgPSAwO1xuICBzdWJmbG93UG9wdXBZOiBudW1iZXIgPSAwO1xuICBwZW5kaW5nU3ViZmxvd1Bvc2l0aW9uOiB7XG4gICAgc3dpbWxhbmVJbmRleDogbnVtYmVyO1xuICAgIHg6IG51bWJlcjtcbiAgICB5OiBudW1iZXI7XG4gIH0gfCBudWxsID0gbnVsbDtcblxuICBwZW5kaW5nRGVjaXNpb25Db25uZWN0aW9uOiB7XG4gICAgZGVjaXNpb25Ob2RlSWQ6IHN0cmluZztcbiAgICBzd2ltbGFuZUluZGV4OiBudW1iZXI7XG4gICAgeDogbnVtYmVyO1xuICAgIHk6IG51bWJlcjtcbiAgfSB8IG51bGwgPSBudWxsO1xuXG4gIHBlbmRpbmdDb25uZWN0aW9uU291cmNlUG9pbnQ6IENvbm5lY3Rpb25Qb2ludCB8IG51bGwgPSBudWxsO1xuICBwZW5kaW5nQ29ubmVjdGlvblNvdXJjZVN3aW1sYW5lSW5kZXg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gIC8vIOKUgOKUgOKUgCBOb2RlLWRyYWcgc3RhdGUg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gIGlzRHJhZ2dpbmdOb2RlID0gZmFsc2U7XG4gIGRyYWdnaW5nTm9kZTogTm9kZSB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGRyYWdnaW5nTm9kZVN3aW1sYW5lSW5kZXg6IG51bWJlciA9IC0xO1xuICAvKiogTW91c2Ugb2Zmc2V0IHJlbGF0aXZlIHRvIG5vZGUgdG9wLWxlZnQgYXQgZHJhZyBzdGFydCAoYWJzb2x1dGUgY2FudmFzIGNvb3JkcykuICovXG4gIHByaXZhdGUgZHJhZ09mZnNldFggPSAwO1xuICBwcml2YXRlIGRyYWdPZmZzZXRZID0gMDtcblxuICBzaG93RGVjaXNpb25Db25kaXRpb25EaWFsb2c6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc2hvd0NvbmRpdGlvbnNEaWFsb2c6IGJvb2xlYW4gPSBmYWxzZTtcbiAgYWN0aXZlRGVjaXNpb25Ob2RlSWQ6IHN0cmluZyA9ICcnO1xuICBhY3RpdmVDb25uZWN0aW9uSWQ6IHN0cmluZyA9ICcnO1xuICBkZWNpc2lvbkNvbmRpdGlvblBvcHVwWDogbnVtYmVyID0gMDtcbiAgZGVjaXNpb25Db25kaXRpb25Qb3B1cFk6IG51bWJlciA9IDA7XG5cbiAgaXNDcmVhdGluZ1N0YWdlRnJvbURlY2lzaW9uOiBib29sZWFuID0gZmFsc2U7XG4gIHBlbmRpbmdEZWNpc2lvbkNvbmRpdGlvbjogc3RyaW5nID0gJyc7XG4gIGFjdGl2ZVN0YWdlSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBhY3RpdmVBY3Rpb25JZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgc2hvd1N0YWdlRGlhbG9nTG9jYWw6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc2hvd0VzY2FsYXRpb25EaWFsb2dMb2NhbDogYm9vbGVhbiA9IGZhbHNlO1xuICBhY3RpdmVFc2NhbGF0aW9uVHlwZTogV3JpdGFibGVTaWduYWw8RXNjYWxhdGlvblR5cGUgfCBudWxsPiA9IHNpZ25hbChudWxsKTtcbiAgYWN0aXZlU3RhZ2VDb2RlOiBXcml0YWJsZVNpZ25hbDxzdHJpbmcgfCBudWxsPiA9IHNpZ25hbChudWxsKTtcbiAgYWN0aXZlU3RhZ2VEYXRhOiBQYXJ0aWFsPFdvcmtmbG93U3RhZ2U+ID0ge307XG4gIGFjdGl2ZUFjdGlvbkRhdGE6IENvbm5lY3Rpb24gfCBudWxsID0gbnVsbDtcblxuICBzaG93QWN0aW9uRGlhbG9nTG9jYWw6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBwb3RlbnRpYWxUYXJnZXRQb2ludElkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgc3RhdGU6IFdvcmtmbG93RGVzaWduZXJTdGF0ZSxcbiAgICBwcml2YXRlIGRhdGFTZXJ2aWNlOiBXb3JrZmxvd0RhdGFTZXJ2aWNlXG4gICkgeyB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVDYW52YXNTaXplKCk7XG4gIH1cblxuICAvLyBIYW5kbGUgbW91c2UgY2xpY2sgb24gY2FudmFzXG4gIG9uQ2FudmFzQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAvLyBPbmx5IHByb2Nlc3MgY2FudmFzIGNsaWNrcyBpZiBhIHRvb2wgaXMgc2VsZWN0ZWRcbiAgICBpZiAoIXRoaXMuc2VsZWN0ZWRUb29sKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gR2V0IHRoZSBwb3NpdGlvbiB3aGVyZSB0aGUgY2xpY2sgb2NjdXJyZWRcbiAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMuZ2V0TW91c2VQb3NpdGlvbihldmVudCk7XG4gICAgY29uc29sZS5sb2coXG4gICAgICAnQ2FudmFzIGNsaWNrZWQgYXQ6JyxcbiAgICAgIHBvc2l0aW9uLFxuICAgICAgJ3dpdGggdG9vbDonLFxuICAgICAgdGhpcy5zZWxlY3RlZFRvb2xcbiAgICApO1xuXG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBzd2ltbGFuZSBpbmRleCBiYXNlZCBvbiBwb3NpdGlvblxuICAgIC8vIGNvbnN0IHN3aW1sYW5lSW5kZXggPSBNYXRoLmZsb29yKHBvc2l0aW9uLnkgLyB0aGlzLnN3aW1sYW5lSGVpZ2h0KTtcblxuICAgIC8vIE9ubHkgZW1pdCB0aGUgcG9zaXRpb24gaWYgd2UgaGF2ZSBhIHRvb2wgc2VsZWN0ZWQgYW5kIGl0J3MgYSB2YWxpZCBjbGljayBhcmVhXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRUb29sKSB7XG4gICAgICB0aGlzLmNsaWNrZWRQb3NpdGlvbi5lbWl0KHtcbiAgICAgICAgeDogcG9zaXRpb24ueCxcbiAgICAgICAgeTogcG9zaXRpb24ueSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG9uU2hvd1NoaWVsZERpYWxvZyhzdGFnZUlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAvLyBGaW5kIHRoZSBub2RlXG4gICAgY29uc3Qgbm9kZUluZm8gPSB0aGlzLnN0YXRlLmZpbmROb2RlQnlJZChzdGFnZUlkKTtcbiAgICBpZiAobm9kZUluZm8pIHtcbiAgICAgIHRoaXMuYWN0aXZlU3RhZ2VJZCA9IHN0YWdlSWQ7XG4gICAgICAvLyBTZWVkIHRoZSBlbnRyeS1wb2ludCB0b2dnbGUgZnJvbSB0aGUgbm9kZSdzIGFjdHVhbCBzdGFydCBzdGF0ZSwgd2hpY2ggaXNcbiAgICAgIC8vIHRoZSBzb3VyY2Ugb2YgdHJ1dGggZm9yIHRoZSBzdGFydCBjaXJjbGUgYW5kIEFQSSBzZXJpYWxpemF0aW9uLiBUaGVcbiAgICAgIC8vIGF1dG8tYXNzaWduZWQgZW50cnkgbm9kZSBoYXMgaXNTdGFydE5vZGU9dHJ1ZSB3aXRob3V0IHN0YWdlRGF0YS5Jc0VudHJ5UG9pbnQuXG4gICAgICB0aGlzLmFjdGl2ZVN0YWdlRGF0YSA9IHtcbiAgICAgICAgLi4ubm9kZUluZm8ubm9kZS5zdGFnZURhdGEsXG4gICAgICAgIElzRW50cnlQb2ludDogbm9kZUluZm8ubm9kZS5pc1N0YXJ0Tm9kZSxcbiAgICAgICAgaWQ6IHN0YWdlSWQsXG4gICAgICB9O1xuICAgICAgY29uc29sZS5sb2codGhpcy5hY3RpdmVTdGFnZURhdGEsIFwiQUNUSVZFIFNUQUdFIERBVEFcIik7XG4gICAgICB0aGlzLnNob3dTdGFnZURpYWxvZ0xvY2FsID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBvblNob3dBY3Rpb25EaWFsb2coY29ubmVjdGlvbkluZm86IENvbm5lY3Rpb24pOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZyhcIkNPTkVDVElPTlwiLCBjb25uZWN0aW9uSW5mbyk7XG4gICAgLy8gRmluZCB0aGUgbm9kZVxuICAgIC8vIGNvbnN0IGNvbm5lY3Rpb25JbmZvID0gdGhpcy5zdGF0ZS5maW5kQWN0aW9uQnlJZChhY3Rpb25JZCk7XG4gICAgaWYgKGNvbm5lY3Rpb25JbmZvKSB7XG4gICAgICB0aGlzLmFjdGl2ZUFjdGlvbklkID0gY29ubmVjdGlvbkluZm8uaWQ7XG4gICAgICB0aGlzLmFjdGl2ZUFjdGlvbkRhdGEgPSBjb25uZWN0aW9uSW5mbztcbiAgICAgIGNvbnNvbGUubG9nKHRoaXMuYWN0aXZlQWN0aW9uRGF0YSk7XG4gICAgICB0aGlzLnNob3dBY3Rpb25EaWFsb2dMb2NhbCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgb25TaG93RXNjYWxhdGlvbkRpYWxvZyhldmVudDoge1xuICAgIHN0YWdlSWQ6IHN0cmluZztcbiAgICB0eXBlOiBFc2NhbGF0aW9uVHlwZTtcbiAgfSk6IHZvaWQge1xuICAgIC8vIEZpbmQgdGhlIG5vZGVcbiAgICBjb25zdCBub2RlSW5mbyA9IHRoaXMuc3RhdGUuZmluZE5vZGVCeUlkKGV2ZW50LnN0YWdlSWQpO1xuICAgIGlmIChub2RlSW5mbykge1xuICAgICAgdGhpcy5hY3RpdmVTdGFnZUlkID0gZXZlbnQuc3RhZ2VJZDtcbiAgICAgIHRoaXMuYWN0aXZlU3RhZ2VEYXRhID0gbm9kZUluZm8ubm9kZS5zdGFnZURhdGEgfHwge1xuICAgICAgICBpZDogdGhpcy5hY3RpdmVTdGFnZUlkLFxuICAgICAgfTtcbiAgICAgIHRoaXMuYWN0aXZlRXNjYWxhdGlvblR5cGUuc2V0KGV2ZW50LnR5cGUpO1xuICAgICAgdGhpcy5hY3RpdmVTdGFnZUNvZGUuc2V0KHRoaXMuYWN0aXZlU3RhZ2VEYXRhPy5Db2RlIHx8ICcnKTtcbiAgICAgIGNvbnNvbGUubG9nKCdBY3RpdmUgU3RhZ2UgRGF0YTonLCB0aGlzLmFjdGl2ZVN0YWdlRGF0YSk7XG4gICAgICBjb25zb2xlLmxvZygnRXNjYWxhdGlvbiBUeXBlOicsIHRoaXMuYWN0aXZlRXNjYWxhdGlvblR5cGUoKSk7XG4gICAgICB0aGlzLnNob3dFc2NhbGF0aW9uRGlhbG9nTG9jYWwgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIC8vIEFkZCB0aGlzIG1ldGhvZCB0byBoYW5kbGUgZGlhbG9nIGNsb3N1cmVcbiAgb25TdGFnZURpYWxvZ0Nsb3NlZCgpOiB2b2lkIHtcbiAgICB0aGlzLnNob3dTdGFnZURpYWxvZ0xvY2FsID0gZmFsc2U7XG4gICAgdGhpcy5hY3RpdmVTdGFnZUlkID0gbnVsbDtcbiAgICB0aGlzLmFjdGl2ZVN0YWdlRGF0YSA9IHt9O1xuICB9XG5cbiAgb25BY3Rpb25EaWFsb2dDbG9zZWQoKTogdm9pZCB7XG4gICAgdGhpcy5zaG93QWN0aW9uRGlhbG9nTG9jYWwgPSBmYWxzZTtcbiAgICB0aGlzLmFjdGl2ZUFjdGlvbklkID0gbnVsbDtcbiAgICB0aGlzLmFjdGl2ZUFjdGlvbkRhdGEgPSBudWxsO1xuICB9XG5cbiAgb25BY3Rpb25EaWFsb2dEZWxldGVkKGNvbm5lY3Rpb25JZDogc3RyaW5nKTogdm9pZCB7XG4gICAgLy8gUmVtb3ZlIHRoZSBjb25uZWN0aW9uIGZyb20gc3RhdGVcbiAgICB0aGlzLnN0YXRlLmNvbm5lY3Rpb25zID0gdGhpcy5zdGF0ZS5jb25uZWN0aW9ucy5maWx0ZXIoXG4gICAgICAoYykgPT4gYy5pZCAhPT0gY29ubmVjdGlvbklkXG4gICAgKTtcbiAgICAvLyBDbG9zZSB0aGUgZGlhbG9nXG4gICAgdGhpcy5vbkFjdGlvbkRpYWxvZ0Nsb3NlZCgpO1xuICB9XG5cbiAgLy8gQWRkIHRoaXMgbWV0aG9kIHRvIGhhbmRsZSBkaWFsb2cgY2xvc3VyZVxuICBvbkVzY2FsYXRpb25EaWFsb2dDbG9zZWQoKTogdm9pZCB7XG4gICAgdGhpcy5zaG93RXNjYWxhdGlvbkRpYWxvZ0xvY2FsID0gZmFsc2U7XG4gICAgdGhpcy5hY3RpdmVTdGFnZUlkID0gbnVsbDtcbiAgICB0aGlzLmFjdGl2ZUVzY2FsYXRpb25UeXBlLnNldChudWxsKTtcbiAgICB0aGlzLmFjdGl2ZVN0YWdlQ29kZS5zZXQobnVsbCk7XG4gICAgdGhpcy5hY3RpdmVTdGFnZURhdGEgPSB7fTtcbiAgfVxuXG4gIC8vIEFkZCB0aGlzIG1ldGhvZCB0byBoYW5kbGUgc2F2aW5nIHN0YWdlIGRhdGFcbiAgb25TdGFnZURpYWxvZ1NhdmVkKHN0YWdlRGF0YTogUGFydGlhbDxXb3JrZmxvd1N0YWdlPik6IHZvaWQge1xuICAgIGlmICh0aGlzLmFjdGl2ZVN0YWdlSWQpIHtcbiAgICAgIC8vIEVkaXRpbmcgYW4gZXhpc3Rpbmcgc3RhZ2VcbiAgICAgIGNvbnN0IG5vZGVJbmZvID0gdGhpcy5zdGF0ZS5maW5kTm9kZUJ5SWQodGhpcy5hY3RpdmVTdGFnZUlkKTtcbiAgICAgIGlmIChub2RlSW5mbykge1xuICAgICAgICAvLyBVcGRhdGUgdGhlIHN0YWdlIGRhdGFcbiAgICAgICAgbm9kZUluZm8ubm9kZS5zdGFnZURhdGEgPSB7XG4gICAgICAgICAgLi4ubm9kZUluZm8ubm9kZS5zdGFnZURhdGEsXG4gICAgICAgICAgLi4uc3RhZ2VEYXRhLFxuICAgICAgICB9O1xuICAgICAgICBjb25zb2xlLmxvZygnVXBkYXRlZCBzdGFnZSBkYXRhOicsIG5vZGVJbmZvLm5vZGUuc3RhZ2VEYXRhKTtcblxuICAgICAgICAvLyBTeW5jIHRoZSBlbnRyeS1wb2ludCBmbGFnIG9udG8gbm9kZS5pc1N0YXJ0Tm9kZSwgd2hpY2ggZHJpdmVzIGJvdGggdGhlXG4gICAgICAgIC8vIHN0YXJ0IGNpcmNsZSBhbmQgdGhlIElzRW50cnlQb2ludCB2YWx1ZSBzZXJpYWxpemVkIHRvIHRoZSBBUEkuXG4gICAgICAgIGlmIChzdGFnZURhdGEuSXNFbnRyeVBvaW50KSB7XG4gICAgICAgICAgLy8gRW5mb3JjZSBhIHNpbmdsZSBlbnRyeSBwb2ludDogdGhpcyBub2RlIGJlY29tZXMgdGhlIHNvbGUgc3RhcnQgbm9kZS5cbiAgICAgICAgICB0aGlzLnN0YXRlLnN3aW1sYW5lcy5mb3JFYWNoKChzd2ltbGFuZSkgPT4ge1xuICAgICAgICAgICAgc3dpbWxhbmUubm9kZXM/LmZvckVhY2goKG5vZGUpID0+IHtcbiAgICAgICAgICAgICAgbm9kZS5pc1N0YXJ0Tm9kZSA9IG5vZGUuaWQgPT09IHRoaXMuYWN0aXZlU3RhZ2VJZDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuc3RhdGUuc3RhcnROb2RlSWQgPSB0aGlzLmFjdGl2ZVN0YWdlSWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbm9kZUluZm8ubm9kZS5pc1N0YXJ0Tm9kZSA9IGZhbHNlO1xuICAgICAgICAgIGlmICh0aGlzLnN0YXRlLnN0YXJ0Tm9kZUlkID09PSB0aGlzLmFjdGl2ZVN0YWdlSWQpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUuc3RhcnROb2RlSWQgPSBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEVtaXQgZXZlbnQgZm9yIHBhcmVudCBjb21wb25lbnQgdG8ga25vdyBhYm91dCB0aGUgdXBkYXRlXG4gICAgICAgIHRoaXMuc3RhZ2VQcm9wZXJ0aWVzVXBkYXRlZC5lbWl0KHtcbiAgICAgICAgICBub2RlSWQ6IHRoaXMuYWN0aXZlU3RhZ2VJZCxcbiAgICAgICAgICBzdGFnZURhdGE6IG5vZGVJbmZvLm5vZGUuc3RhZ2VEYXRhLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDbG9zZSB0aGUgZGlhbG9nXG4gICAgdGhpcy5vblN0YWdlRGlhbG9nQ2xvc2VkKCk7XG4gIH1cblxuICBvbkFjdGlvbkRpYWxvZ1NhdmVkKGFjdGlvbkRhdGE6IENvbm5lY3Rpb24pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5hY3RpdmVBY3Rpb25JZCkge1xuICAgICAgLy8gRWRpdGluZyBhbiBleGlzdGluZyBzdGFnZVxuICAgICAgLy8gbGV0IGNvbm5lY3Rpb25JbmZvID0gdGhpcy5zdGF0ZS5maW5kQWN0aW9uQnlJZCh0aGlzLmFjdGl2ZUFjdGlvbklkKTtcbiAgICAgIHRoaXMuc3RhdGUuY29ubmVjdGlvbnMgPSB0aGlzLnN0YXRlLmNvbm5lY3Rpb25zLm1hcCgoY29ubmVjdGlvbiwgaW5kZXgpID0+IHtcbiAgICAgICAgaWYgKGNvbm5lY3Rpb24uaWQgPT09IHRoaXMuYWN0aXZlQWN0aW9uSWQpIHtcbiAgICAgICAgICBjb25uZWN0aW9uLmxhYmVsID0gYWN0aW9uRGF0YS5sYWJlbDtcbiAgICAgICAgICBjb25uZWN0aW9uLmFjdGlvbiA9IGFjdGlvbkRhdGEuYWN0aW9uO1xuICAgICAgICAgIGNvbm5lY3Rpb24udGFyZ2V0U3RhdHVzID0gYWN0aW9uRGF0YS50YXJnZXRTdGF0dXM7XG4gICAgICAgICAgY29uc29sZS5sb2coJ1VwZGF0ZWQgYWN0aW9uIGRhdGE6JywgY29ubmVjdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbm5lY3Rpb247XG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIENsb3NlIHRoZSBkaWFsb2dcbiAgICB0aGlzLm9uQWN0aW9uRGlhbG9nQ2xvc2VkKCk7XG4gIH1cblxuICB1cGRhdGVDYW52YXNTaXplKCk6IHZvaWQge1xuICAgIGNvbnN0IHJlcXVpcmVkSGVpZ2h0ID1cbiAgICAgICh0aGlzLnN0YXRlLnN3aW1sYW5lcy5sZW5ndGggKyAxKSAqIHRoaXMuc3dpbWxhbmVIZWlnaHQ7XG4gICAgdGhpcy5jYW52YXNIZWlnaHQgPSBNYXRoLm1heCgyMDAwLCByZXF1aXJlZEhlaWdodCk7IC8vIEVuc3VyZSB3ZSBoYXZlIGF0IGxlYXN0IG91ciBkZWZhdWx0IGhlaWdodFxuXG4gICAgLy8gVXBkYXRlIGFsbCB0aGUgc3dpbWxhbmUgY2xpcCBwYXRocyB3aGVuIHNpemUgY2hhbmdlc1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5zdGF0ZS5zd2ltbGFuZXMuZm9yRWFjaCgoc3dpbWxhbmUsIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IGNsaXBQYXRoSWQgPSBgc3dpbWxhbmUtY2xpcC0ke2luZGV4fWA7XG4gICAgICAgIGNvbnN0IGNsaXBQYXRoRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGNsaXBQYXRoSWQpO1xuICAgICAgICBpZiAoY2xpcFBhdGhFbGVtZW50KSB7XG4gICAgICAgICAgY29uc3QgcmVjdEVsZW1lbnQgPSBjbGlwUGF0aEVsZW1lbnQucXVlcnlTZWxlY3RvcigncmVjdCcpO1xuICAgICAgICAgIGlmIChyZWN0RWxlbWVudCkge1xuICAgICAgICAgICAgcmVjdEVsZW1lbnQuc2V0QXR0cmlidXRlKCd3aWR0aCcsIHRoaXMuY2FudmFzV2lkdGgudG9TdHJpbmcoKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LCAwKTtcbiAgfVxuXG4gIC8vIEhlbHBlciBtZXRob2QgdG8gZ2V0IHRoZSBtb3VzZSBwb3NpdGlvbiByZWxhdGl2ZSB0byB0aGUgU1ZHIGNhbnZhc1xuICBwcml2YXRlIGdldE1vdXNlUG9zaXRpb24oZXZlbnQ6IE1vdXNlRXZlbnQpOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0ge1xuICAgIC8vIFVzZSBjbGllbnRYL1kgYW5kIGdldEJvdW5kaW5nQ2xpZW50UmVjdCgpIGZvciBjcm9zcy1icm93c2VyIGNvbXBhdGliaWxpdHlcbiAgICBjb25zdCByZWN0ID0gdGhpcy5jYW52YXNSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICByZXR1cm4ge1xuICAgICAgeDogZXZlbnQuY2xpZW50WCAtIHJlY3QubGVmdCxcbiAgICAgIHk6IGV2ZW50LmNsaWVudFkgLSByZWN0LnRvcCxcbiAgICB9O1xuICB9XG5cbiAgLy8gSGVscGVyIG1ldGhvZCB0byBnZXQgdGhlIG1vdXNlIHBvc2l0aW9uIGZvciB2aWV3cG9ydC1iYXNlZCBwb3B1cHNcbiAgLy8gVGhpcyBhY2NvdW50cyBmb3IgY2FudmFzIHNjcm9sbCBwb3NpdGlvblxuICBwcml2YXRlIGdldFZpZXdwb3J0UG9zaXRpb24oY2FudmFzWDogbnVtYmVyLCBjYW52YXNZOiBudW1iZXIpOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0ge1xuICAgIGNvbnN0IHBhcmVudEVsZW1lbnQgPSB0aGlzLmNhbnZhc1JlZi5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQ7XG4gICAgY29uc3Qgc2Nyb2xsTGVmdCA9IHBhcmVudEVsZW1lbnQ/LnNjcm9sbExlZnQgfHwgMDtcbiAgICBjb25zdCBzY3JvbGxUb3AgPSBwYXJlbnRFbGVtZW50Py5zY3JvbGxUb3AgfHwgMDtcblxuICAgIHJldHVybiB7XG4gICAgICB4OiBjYW52YXNYIC0gc2Nyb2xsTGVmdCxcbiAgICAgIHk6IGNhbnZhc1kgLSBzY3JvbGxUb3AsXG4gICAgfTtcbiAgfVxuXG4gIHNob3dDb25uZWN0aW9uUG9pbnRzKG5vZGVJZDogc3RyaW5nLCBzd2ltbGFuZUluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnZpc2libGVDb25uZWN0aW9uUG9pbnRzTm9kZUlkID0gbm9kZUlkO1xuICB9XG5cbiAgaXNNb3VzZU92ZXJOb2RlKFxuICAgIGV2ZW50OiBNb3VzZUV2ZW50LFxuICAgIG5vZGU6IFdGTm9kZSxcbiAgICBzd2ltbGFuZUluZGV4OiBudW1iZXJcbiAgKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcG9zaXRpb24gPSB0aGlzLmdldE1vdXNlUG9zaXRpb24oZXZlbnQpO1xuICAgIGNvbnN0IG5vZGVCb3VuZHMgPSB0aGlzLmdldE5vZGVCb3VuZHNXaXRoUGFkZGluZyhub2RlLCBzd2ltbGFuZUluZGV4KTtcblxuICAgIHJldHVybiAoXG4gICAgICBwb3NpdGlvbi54ID49IG5vZGVCb3VuZHMueCAmJlxuICAgICAgcG9zaXRpb24ueCA8PSBub2RlQm91bmRzLnggKyBub2RlQm91bmRzLndpZHRoICYmXG4gICAgICBwb3NpdGlvbi55ID49IG5vZGVCb3VuZHMueSAmJlxuICAgICAgcG9zaXRpb24ueSA8PSBub2RlQm91bmRzLnkgKyBub2RlQm91bmRzLmhlaWdodFxuICAgICk7XG4gIH1cblxuICAvLyBoZWxwZXIgbWV0aG9kIHRvIGNhbGN1bGF0ZSBub2RlIGJvdW5kcyB3aXRoIHBhZGRpbmdcbiAgZ2V0Tm9kZUJvdW5kc1dpdGhQYWRkaW5nKFxuICAgIG5vZGU6IFdGTm9kZSxcbiAgICBzd2ltbGFuZUluZGV4OiBudW1iZXJcbiAgKTogeyB4OiBudW1iZXI7IHk6IG51bWJlcjsgd2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXIgfSB7XG4gICAgY29uc3QgcGFkZGluZyA9IDEwOyAvLyBBZGQgMTBweCBwYWRkaW5nIGFyb3VuZCBub2RlcyBmb3IgZWFzaWVyIGhvdmVyIGRldGVjdGlvblxuXG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBhYnNvbHV0ZSBZIHBvc2l0aW9uIGluY2x1ZGluZyBzd2ltbGFuZSBvZmZzZXRcbiAgICBjb25zdCBhYnNvbHV0ZVkgPSBub2RlLnkgKyBzd2ltbGFuZUluZGV4ICogMjYzO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IG5vZGUueCAtIHBhZGRpbmcsXG4gICAgICB5OiBhYnNvbHV0ZVkgLSBwYWRkaW5nLFxuICAgICAgd2lkdGg6IG5vZGUud2lkdGggKyBwYWRkaW5nICogMixcbiAgICAgIGhlaWdodDogbm9kZS5oZWlnaHQgKyBwYWRkaW5nICogMixcbiAgICB9O1xuICB9XG5cbiAgaGlkZUNvbm5lY3Rpb25Qb2ludHMobm9kZUlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLnZpc2libGVDb25uZWN0aW9uUG9pbnRzTm9kZUlkID09PSBub2RlSWQgJiZcbiAgICAgICF0aGlzLnN0YXRlLmlzQ29ubmVjdGlvbkRyYWdnaW5nKClcbiAgICApIHtcbiAgICAgIHRoaXMudmlzaWJsZUNvbm5lY3Rpb25Qb2ludHNOb2RlSWQgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGlzQ29ubmVjdGlvblBvaW50VmlzaWJsZShub2RlSWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnZpc2libGVDb25uZWN0aW9uUG9pbnRzTm9kZUlkID09PSBub2RlSWQ7XG4gIH1cblxuICBzdGFydENvbm5lY3Rpb25EcmFnKFxuICAgIGV2ZW50OiBNb3VzZUV2ZW50LFxuICAgIHBvaW50OiBDb25uZWN0aW9uUG9pbnQsXG4gICAgc3dpbWxhbmVJbmRleDogbnVtYmVyXG4gICk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAvLyBDaGVjayBpZiB0aGlzIGlzIGFuIGV4aXQgcG9pbnQgbm9kZVxuICAgIGNvbnN0IG5vZGVJbmZvID0gdGhpcy5zdGF0ZS5maW5kTm9kZUJ5SWQocG9pbnQubm9kZUlkKTtcbiAgICBpZiAoXG4gICAgICBub2RlSW5mbyAmJlxuICAgICAgbm9kZUluZm8ubm9kZS50eXBlID09PSAnc3RhZ2UnICYmXG4gICAgICBub2RlSW5mby5ub2RlLnN0YWdlRGF0YT8uSXNFeGl0UG9pbnRcbiAgICApIHtcbiAgICAgIC8vIERvbid0IGFsbG93IGNvbm5lY3Rpb25zIGZyb20gZXhpdCBwb2ludHNcbiAgICAgIGNvbnNvbGUubG9nKCdDYW5ub3QgY3JlYXRlIGNvbm5lY3Rpb25zIGZyb20gZXhpdCBwb2ludHMnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMuZ2V0TW91c2VQb3NpdGlvbihldmVudCk7XG4gICAgdGhpcy5zdGF0ZS5zdGFydENvbm5lY3Rpb25EcmFnKFxuICAgICAgcG9pbnQsXG4gICAgICBzd2ltbGFuZUluZGV4LFxuICAgICAgcG9zaXRpb24ueCxcbiAgICAgIHBvc2l0aW9uLnlcbiAgICApO1xuXG4gICAgLy8gQWRkIG1vdXNlIG1vdmUgYW5kIG1vdXNlIHVwIGV2ZW50IGxpc3RlbmVycyB0byB0aGUgZG9jdW1lbnRcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLm9uTW91c2VNb3ZlKTtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5vbk1vdXNlVXApO1xuICB9XG5cbiAgaGlnaGxpZ2h0UG90ZW50aWFsVGFyZ2V0cyhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zdGF0ZS5pc0Nvbm5lY3Rpb25EcmFnZ2luZygpKSByZXR1cm47XG5cbiAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMuZ2V0TW91c2VQb3NpdGlvbihldmVudCk7XG4gICAgY29uc3QgdGFyZ2V0UG9pbnRJbmZvID0gdGhpcy5maW5kQ29ubmVjdGlvblBvaW50QXRQb3NpdGlvbihcbiAgICAgIHBvc2l0aW9uLngsXG4gICAgICBwb3NpdGlvbi55XG4gICAgKTtcblxuICAgIGlmIChcbiAgICAgIHRhcmdldFBvaW50SW5mbyAmJlxuICAgICAgdGFyZ2V0UG9pbnRJbmZvLnBvaW50LmlkICE9PSB0aGlzLnBvdGVudGlhbFRhcmdldFBvaW50SWRcbiAgICApIHtcbiAgICAgIC8vIFdlIGhhdmUgYSBuZXcgdGFyZ2V0IHBvaW50XG4gICAgICB0aGlzLnBvdGVudGlhbFRhcmdldFBvaW50SWQgPSB0YXJnZXRQb2ludEluZm8ucG9pbnQuaWQ7XG4gICAgfSBlbHNlIGlmICghdGFyZ2V0UG9pbnRJbmZvICYmIHRoaXMucG90ZW50aWFsVGFyZ2V0UG9pbnRJZCkge1xuICAgICAgLy8gV2UncmUgbm8gbG9uZ2VyIG92ZXIgYSB0YXJnZXQgcG9pbnRcbiAgICAgIHRoaXMucG90ZW50aWFsVGFyZ2V0UG9pbnRJZCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gIC8vIE5vZGUgZHJhZyBsb2dpY1xuICAvLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKipcbiAgICogQ2FsbGVkIGZyb20gdGhlIHRlbXBsYXRlIHdoZW4gdGhlIHVzZXIgcHJlc3NlcyB0aGUgbW91c2UgYnV0dG9uIG9uIGEgbm9kZS5cbiAgICogU3RhcnRzIHRoZSBkcmFnIGludGVyYWN0aW9uIGFuZCByZWdpc3RlcnMgZG9jdW1lbnQtbGV2ZWwgbGlzdGVuZXJzIHNvIHRoZVxuICAgKiBkcmFnIGNvbnRpbnVlcyBldmVuIHdoZW4gdGhlIGN1cnNvciBsZWF2ZXMgdGhlIFNWRyBjYW52YXMuXG4gICAqL1xuICBvbk5vZGVNb3VzZURvd24oZXZlbnQ6IE1vdXNlRXZlbnQsIG5vZGU6IE5vZGUsIHN3aW1sYW5lSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIC8vIERvIG5vdCBpbnRlcmZlcmUgd2l0aCBjb25uZWN0aW9uIGRyYWdnaW5nIG9yIG9wZW4gcG9wdXBzXG4gICAgaWYgKFxuICAgICAgdGhpcy5zdGF0ZS5pc0Nvbm5lY3Rpb25EcmFnZ2luZygpIHx8XG4gICAgICB0aGlzLnBvcHVwVmlzaWJsZSB8fFxuICAgICAgdGhpcy5zaG93U3RhcnROb2RlRm9ybVBvcHVwIHx8XG4gICAgICB0aGlzLnNob3dTdWJmbG93UG9wdXBcbiAgICApIHJldHVybjtcblxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyAvLyBQcmV2ZW50IG9uQ2FudmFzQ2xpY2sgZnJvbSBmaXJpbmdcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgY29uc3QgcG9zaXRpb24gPSB0aGlzLmdldE1vdXNlUG9zaXRpb24oZXZlbnQpO1xuICAgIC8vIFRlbXBsYXRlIGZvcm11bGE6IGFic29sdXRlU1ZHWSA9IG5vZGUueSArIHN3aW1sYW5lLm9yZGVyICogMjYzXG4gICAgY29uc3QgYWJzb2x1dGVOb2RlWSA9IG5vZGUueSArIHN3aW1sYW5lSW5kZXggKiB0aGlzLnN3aW1sYW5lSGVpZ2h0O1xuXG4gICAgdGhpcy5pc0RyYWdnaW5nTm9kZSA9IHRydWU7XG4gICAgdGhpcy5kcmFnZ2luZ05vZGUgPSBub2RlO1xuICAgIHRoaXMuZHJhZ2dpbmdOb2RlU3dpbWxhbmVJbmRleCA9IHN3aW1sYW5lSW5kZXg7XG4gICAgLy8gU3RvcmUgdGhlIG9mZnNldCBmcm9tIHRoZSBub2RlJ3MgdG9wLWxlZnQgc28gdGhlIG5vZGUgZG9lc24ndCBqdW1wXG4gICAgdGhpcy5kcmFnT2Zmc2V0WCA9IHBvc2l0aW9uLnggLSBub2RlLng7XG4gICAgdGhpcy5kcmFnT2Zmc2V0WSA9IHBvc2l0aW9uLnkgLSBhYnNvbHV0ZU5vZGVZO1xuXG4gICAgLy8gU2VlZCBwZW5kaW5nIHZhbHVlcyB3aXRoIHRoZSBub2RlJ3MgQ1VSUkVOVCBwb3NpdGlvbiBzbyB0aGF0IGEgcGxhaW5cbiAgICAvLyBjbGljayAobm8gbW91c2Vtb3ZlKSBsZWF2ZXMgbm9kZS55IHVuY2hhbmdlZCBpbiBvbk5vZGVEcmFnRW5kLlxuICAgIHRoaXMuX3BlbmRpbmdBYnNvbHV0ZVkgPSBhYnNvbHV0ZU5vZGVZO1xuICAgIHRoaXMuX3BlbmRpbmdUYXJnZXRTd2ltbGFuZUluZGV4ID0gc3dpbWxhbmVJbmRleDtcblxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMub25Ob2RlRHJhZ01vdmUpO1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLm9uTm9kZURyYWdFbmQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFycm93IGZ1bmN0aW9uIChwcmVzZXJ2ZXMgYHRoaXNgKSDigJQgcnVucyBvbiBldmVyeSBtb3VzZW1vdmUgd2hpbGUgZHJhZ2dpbmdcbiAgICogYSBub2RlLiAgVXBkYXRlcyBub2RlLnggLyBub2RlLnkgaW4tcGxhY2Ugc28gQW5ndWxhcidzIGNoYW5nZSBkZXRlY3Rpb25cbiAgICogcGlja3MgaXQgdXAgYW5kIHJlZHJhd3MgdGhlIG5vZGUgYW5kIGFsbCBjb25uZWN0ZWQgcGF0aHMgYXV0b21hdGljYWxseS5cbiAgICovXG4gIG9uTm9kZURyYWdNb3ZlID0gKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCA9PiB7XG4gICAgaWYgKCF0aGlzLmlzRHJhZ2dpbmdOb2RlIHx8ICF0aGlzLmRyYWdnaW5nTm9kZSkgcmV0dXJuO1xuXG4gICAgY29uc3QgcG9zaXRpb24gPSB0aGlzLmdldE1vdXNlUG9zaXRpb24oZXZlbnQpO1xuXG4gICAgLy8gUmF3IGRlc2lyZWQgYWJzb2x1dGUgcG9zaXRpb24gb2YgdGhlIG5vZGUgdG9wLWxlZnRcbiAgICBjb25zdCByYXdBYnNvbHV0ZVggPSBwb3NpdGlvbi54IC0gdGhpcy5kcmFnT2Zmc2V0WDtcbiAgICBjb25zdCByYXdBYnNvbHV0ZVkgPSBwb3NpdGlvbi55IC0gdGhpcy5kcmFnT2Zmc2V0WTtcblxuICAgIC8vIERldGVybWluZSB3aGljaCBzd2ltbGFuZSB0aGUgbm9kZSBpcyBiZWluZyBkcmFnZ2VkIGludG8gIChieSBjdXJzb3IgWSlcbiAgICBsZXQgdGFyZ2V0U3dpbWxhbmVJbmRleCA9IE1hdGguZmxvb3IocG9zaXRpb24ueSAvIHRoaXMuc3dpbWxhbmVIZWlnaHQpO1xuICAgIHRhcmdldFN3aW1sYW5lSW5kZXggPSBNYXRoLm1heChcbiAgICAgIDAsXG4gICAgICBNYXRoLm1pbih0YXJnZXRTd2ltbGFuZUluZGV4LCB0aGlzLnN0YXRlLnN3aW1sYW5lcy5sZW5ndGggLSAxKVxuICAgICk7XG5cbiAgICBjb25zdCBzd2ltbGFuZVRvcFkgPSB0YXJnZXRTd2ltbGFuZUluZGV4ICogdGhpcy5zd2ltbGFuZUhlaWdodDtcbiAgICBjb25zdCBzd2ltbGFuZUJvdHRvbVkgPSBzd2ltbGFuZVRvcFkgKyB0aGlzLnN3aW1sYW5lSGVpZ2h0O1xuICAgIGNvbnN0IHBhZGRpbmcgPSA1O1xuXG4gICAgLy8gWDoga2VlcCBub2RlIGZ1bGx5IG9uIGNhbnZhcyAobm8gbGVmdC9yaWdodCBib3VuZGFyeSBuZWVkZWQgZm9yIHN3aW1sYW5lcylcbiAgICBjb25zdCBuZXdBYnNvbHV0ZVggPSBNYXRoLm1heChwYWRkaW5nLCByYXdBYnNvbHV0ZVgpO1xuXG4gICAgLy8gWTogY2xhbXAgc28gdGhlIG5vZGUgc3RheXMgaW5zaWRlIHRoZSB0YXJnZXRlZCBzd2ltbGFuZVxuICAgIGxldCBuZXdBYnNvbHV0ZVkgPSByYXdBYnNvbHV0ZVk7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZHJhZ2dpbmdOb2RlO1xuICAgIGlmIChuZXdBYnNvbHV0ZVkgPCBzd2ltbGFuZVRvcFkgKyBwYWRkaW5nKSB7XG4gICAgICBuZXdBYnNvbHV0ZVkgPSBzd2ltbGFuZVRvcFkgKyBwYWRkaW5nO1xuICAgIH0gZWxzZSBpZiAobmV3QWJzb2x1dGVZICsgbm9kZS5oZWlnaHQgPiBzd2ltbGFuZUJvdHRvbVkgLSBwYWRkaW5nKSB7XG4gICAgICBuZXdBYnNvbHV0ZVkgPSBzd2ltbGFuZUJvdHRvbVkgLSBub2RlLmhlaWdodCAtIHBhZGRpbmc7XG4gICAgfVxuXG4gICAgLy8gQ29udmVydCBhYnNvbHV0ZSBZIHRvIHN3aW1sYW5lLXJlbGF0aXZlIFkgZm9yIHN0b3JhZ2VcbiAgICBjb25zdCBuZXdSZWxhdGl2ZVkgPSBuZXdBYnNvbHV0ZVkgLSB0YXJnZXRTd2ltbGFuZUluZGV4ICogdGhpcy5zd2ltbGFuZUhlaWdodDtcblxuICAgIC8vIExpdmUgcHJldmlldzogdXBkYXRlIHBvc2l0aW9uIGRpcmVjdGx5LlxuICAgIC8vIFRlbXBsYXRlIGZvcm11bGE6IGFic29sdXRlU1ZHWSA9IG5vZGUueSArIHN3aW1sYW5lLm9yZGVyICogMjYzXG4gICAgLy8gPT4gbm9kZS55ID0gYWJzb2x1dGVZIC0gc3dpbWxhbmUub3JkZXIgKiAyNjMgIChzd2ltbGFuZS1yZWxhdGl2ZSlcbiAgICAvLyBUaGUgbm9kZSBpcyBTVElMTCBpbiB0aGUgc291cmNlIHN3aW1sYW5lJ3MgYXJyYXkgZHVyaW5nIHByZXZpZXcsXG4gICAgLy8gc28gc3dpbWxhbmUub3JkZXIgPSBkcmFnZ2luZ05vZGVTd2ltbGFuZUluZGV4LlxuICAgIG5vZGUueCA9IG5ld0Fic29sdXRlWDtcbiAgICBub2RlLnkgPSBuZXdBYnNvbHV0ZVkgLSB0aGlzLmRyYWdnaW5nTm9kZVN3aW1sYW5lSW5kZXggKiB0aGlzLnN3aW1sYW5lSGVpZ2h0O1xuXG4gICAgLy8gU3RvcmUgY29tcHV0ZWQgdmFsdWVzIGZvciBvbk5vZGVEcmFnRW5kXG4gICAgdGhpcy5fcGVuZGluZ1RhcmdldFN3aW1sYW5lSW5kZXggPSB0YXJnZXRTd2ltbGFuZUluZGV4O1xuICAgIHRoaXMuX3BlbmRpbmdBYnNvbHV0ZVkgPSBuZXdBYnNvbHV0ZVk7XG4gIH07XG5cbiAgLyoqIFNjcmF0Y2ggZmllbGRzIHVzZWQgdG8gcGFzcyBjb21wdXRlZCB2YWx1ZXMgZnJvbSBtb3ZlIOKGkiBlbmQgaGFuZGxlcnMuICovXG4gIHByaXZhdGUgX3BlbmRpbmdUYXJnZXRTd2ltbGFuZUluZGV4ID0gLTE7XG4gIHByaXZhdGUgX3BlbmRpbmdBYnNvbHV0ZVkgPSAwO1xuXG4gIC8qKlxuICAgKiBBcnJvdyBmdW5jdGlvbiAocHJlc2VydmVzIGB0aGlzYCkg4oCUIGZpcmVzIG9uIG1vdXNldXAgYWZ0ZXIgYSBub2RlIGRyYWcuXG4gICAqIEZpbmFsaXNlcyB0aGUgbm9kZSBwb3NpdGlvbiBhbmQgcGVyZm9ybXMgc3dpbWxhbmUgbWlncmF0aW9uIGlmIG5lY2Vzc2FyeS5cbiAgICovXG4gIG9uTm9kZURyYWdFbmQgPSAoX2V2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCA9PiB7XG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5vbk5vZGVEcmFnTW92ZSk7XG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHRoaXMub25Ob2RlRHJhZ0VuZCk7XG5cbiAgICBpZiAoIXRoaXMuaXNEcmFnZ2luZ05vZGUgfHwgIXRoaXMuZHJhZ2dpbmdOb2RlKSB7XG4gICAgICB0aGlzLmlzRHJhZ2dpbmdOb2RlID0gZmFsc2U7XG4gICAgICB0aGlzLmRyYWdnaW5nTm9kZSA9IG51bGw7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZHJhZ2dpbmdOb2RlO1xuICAgIGNvbnN0IGZyb21JbmRleCA9IHRoaXMuZHJhZ2dpbmdOb2RlU3dpbWxhbmVJbmRleDtcbiAgICBjb25zdCB0b0luZGV4ID0gdGhpcy5fcGVuZGluZ1RhcmdldFN3aW1sYW5lSW5kZXggIT09IC0xXG4gICAgICA/IHRoaXMuX3BlbmRpbmdUYXJnZXRTd2ltbGFuZUluZGV4XG4gICAgICA6IGZyb21JbmRleDtcbiAgICBjb25zdCBhYnNvbHV0ZVkgPSB0aGlzLl9wZW5kaW5nQWJzb2x1dGVZO1xuXG4gICAgaWYgKGZyb21JbmRleCAhPT0gdG9JbmRleCkge1xuICAgICAgLy8gQ3Jvc3Mtc3dpbWxhbmUgZHJvcDogc3RhdGUgaGVscGVyIG1vdmVzIG5vZGUgYmV0d2VlbiBhcnJheXMsXG4gICAgICAvLyB1cGRhdGVzIGNvbm5lY3Rpb25zLCBhbmQgc3luY3MgdGFncy4gSXQgYWxzbyBzZXRzIG5vZGUueSBjb3JyZWN0bHkuXG4gICAgICB0aGlzLnN0YXRlLm1vdmVOb2RlVG9Td2ltbGFuZShub2RlLmlkLCBmcm9tSW5kZXgsIHRvSW5kZXgsIG5vZGUueCwgYWJzb2x1dGVZKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU2FtZSBzd2ltbGFuZTogbm9kZS55ID0gYWJzb2x1dGVZIC0gc3dpbWxhbmUub3JkZXIgKiAyNjMgKHN3aW1sYW5lLXJlbGF0aXZlKVxuICAgICAgbm9kZS55ID0gYWJzb2x1dGVZIC0gZnJvbUluZGV4ICogdGhpcy5zd2ltbGFuZUhlaWdodDtcbiAgICB9XG5cbiAgICAvLyBSZXNldCBkcmFnIHN0YXRlXG4gICAgdGhpcy5pc0RyYWdnaW5nTm9kZSA9IGZhbHNlO1xuICAgIHRoaXMuZHJhZ2dpbmdOb2RlID0gbnVsbDtcbiAgICB0aGlzLmRyYWdnaW5nTm9kZVN3aW1sYW5lSW5kZXggPSAtMTtcbiAgICB0aGlzLmRyYWdPZmZzZXRYID0gMDtcbiAgICB0aGlzLmRyYWdPZmZzZXRZID0gMDtcbiAgICB0aGlzLl9wZW5kaW5nVGFyZ2V0U3dpbWxhbmVJbmRleCA9IC0xO1xuICAgIHRoaXMuX3BlbmRpbmdBYnNvbHV0ZVkgPSAwO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgQ1NTIGN1cnNvciB2YWx1ZSBmb3IgdGhlIG5vZGUgcmVuZGVyaW5nLlxuICAgKiBTaG93cyAnZ3JhYmJpbmcnIHdoaWxlIHRoZSBub2RlIGlzIGJlaW5nIGRyYWdnZWQsICdncmFiJyBvdGhlcndpc2UuXG4gICAqL1xuICBnZXRDdXJzb3JGb3JOb2RlKG5vZGVJZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pc0RyYWdnaW5nTm9kZSAmJiB0aGlzLmRyYWdnaW5nTm9kZT8uaWQgPT09IG5vZGVJZCA/ICdncmFiYmluZycgOiAnZ3JhYic7XG4gIH1cblxuICAvLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgLy8gQ29ubmVjdGlvbiBkcmFnIGxvZ2ljIChleGlzdGluZylcbiAgLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgLy8gVXNlIGFycm93IGZ1bmN0aW9ucyB0byBwcmVzZXJ2ZSAndGhpcycgY29udGV4dFxuICBvbk1vdXNlTW92ZSA9IChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5nZXRNb3VzZVBvc2l0aW9uKGV2ZW50KTtcbiAgICB0aGlzLnVwZGF0ZUNvbm5lY3Rpb25EcmFnKHBvc2l0aW9uLngsIHBvc2l0aW9uLnkpO1xuICAgIHRoaXMuaGlnaGxpZ2h0UG90ZW50aWFsVGFyZ2V0cyhldmVudCk7XG4gIH07XG5cbiAgdXBkYXRlQ29ubmVjdGlvbkRyYWcoY3VycmVudFg6IG51bWJlciwgY3VycmVudFk6IG51bWJlcikge1xuICAgIGlmICh0aGlzLnN0YXRlLmRyYWdnaW5nQ29ubmVjdGlvbkRhdGEuc291cmNlUG9pbnQpIHtcbiAgICAgIHRoaXMuc3RhdGUuZHJhZ2dpbmdDb25uZWN0aW9uRGF0YS5jdXJyZW50WCA9IGN1cnJlbnRYO1xuICAgICAgdGhpcy5zdGF0ZS5kcmFnZ2luZ0Nvbm5lY3Rpb25EYXRhLmN1cnJlbnRZID0gY3VycmVudFk7XG5cbiAgICAgIC8vIENhbGN1bGF0ZSB3aGljaCBzd2ltbGFuZSB0aGUgY3Vyc29yIGlzIG92ZXJcbiAgICAgIGNvbnN0IHN3aW1sYW5lSW5kZXggPSBNYXRoLmZsb29yKGN1cnJlbnRZIC8gdGhpcy5zd2ltbGFuZUhlaWdodCk7XG4gICAgICBpZiAoc3dpbWxhbmVJbmRleCA+PSAwICYmIHN3aW1sYW5lSW5kZXggPCB0aGlzLnN0YXRlLnN3aW1sYW5lcy5sZW5ndGgpIHtcbiAgICAgICAgLy8gRW5zdXJlIHRoZSB0YXJnZXQgc3dpbWxhbmUgaXMgZnVsbHkgdmlzaWJsZVxuICAgICAgICB0aGlzLmVuc3VyZVN3aW1sYW5lSW5WaWV3KHN3aW1sYW5lSW5kZXgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uTW91c2VVcCA9IChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMub25Nb3VzZU1vdmUpO1xuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLm9uTW91c2VVcCk7XG5cbiAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMuZ2V0TW91c2VQb3NpdGlvbihldmVudCk7XG4gICAgY29uc29sZS5sb2coJ01vdXNlIHVwIGF0IHBvc2l0aW9uOicsIHBvc2l0aW9uKTtcbiAgICBjb25zb2xlLmxvZygnSXMgY29ubmVjdGlvbiBkcmFnZ2luZzonLCB0aGlzLnN0YXRlLmlzQ29ubmVjdGlvbkRyYWdnaW5nKCkpO1xuXG4gICAgLy8gT25seSBwcm9jZWVkIGlmIHdlIGFyZSBkcmFnZ2luZyBhIGNvbm5lY3Rpb25cbiAgICBpZiAoIXRoaXMuc3RhdGUuaXNDb25uZWN0aW9uRHJhZ2dpbmcoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIHdlJ3JlIGRyb3BwaW5nIG9udG8gYSBjb25uZWN0aW9uIHBvaW50XG4gICAgY29uc3QgdGFyZ2V0UG9pbnRJbmZvID0gdGhpcy5maW5kQ29ubmVjdGlvblBvaW50QXRQb3NpdGlvbihcbiAgICAgIHBvc2l0aW9uLngsXG4gICAgICBwb3NpdGlvbi55XG4gICAgKTtcblxuICAgIGlmICh0YXJnZXRQb2ludEluZm8pIHtcbiAgICAgIC8vIFdlIGZvdW5kIGEgdGFyZ2V0IGNvbm5lY3Rpb24gcG9pbnRcbiAgICAgIGNvbnNvbGUubG9nKCdGb3VuZCB0YXJnZXQgY29ubmVjdGlvbiBwb2ludDonLCB0YXJnZXRQb2ludEluZm8pO1xuXG4gICAgICAvLyBHZXQgdGhlIHNvdXJjZSBwb2ludCBhbmQgc3dpbWxhbmUgaW5kZXhcbiAgICAgIGNvbnN0IHNvdXJjZVBvaW50ID0gdGhpcy5zdGF0ZS5kcmFnZ2luZ0Nvbm5lY3Rpb25EYXRhLnNvdXJjZVBvaW50O1xuICAgICAgY29uc3Qgc291cmNlU3dpbWxhbmVJbmRleCA9XG4gICAgICAgIHRoaXMuc3RhdGUuZHJhZ2dpbmdDb25uZWN0aW9uRGF0YS5zb3VyY2VTd2ltbGFuZUluZGV4O1xuXG4gICAgICBpZiAoc291cmNlUG9pbnQgJiYgc291cmNlU3dpbWxhbmVJbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIFByZXZlbnQgY29ubmVjdGluZyBhIG5vZGUgdG8gaXRzZWxmXG4gICAgICAgIGlmIChzb3VyY2VQb2ludC5ub2RlSWQgIT09IHRhcmdldFBvaW50SW5mby5ub2RlSWQpIHtcbiAgICAgICAgICAvLyBHZXQgc291cmNlIGFuZCB0YXJnZXQgbm9kZSB0eXBlcyB0byBjaGVjayBpZiBjb25uZWN0aW9uIGlzIGFsbG93ZWRcbiAgICAgICAgICBjb25zdCBzb3VyY2VOb2RlSW5mbyA9IHRoaXMuc3RhdGUuZmluZE5vZGVCeUlkKHNvdXJjZVBvaW50Lm5vZGVJZCk7XG4gICAgICAgICAgY29uc3QgdGFyZ2V0Tm9kZUluZm8gPSB0aGlzLnN0YXRlLmZpbmROb2RlQnlJZChcbiAgICAgICAgICAgIHRhcmdldFBvaW50SW5mby5ub2RlSWRcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgc291cmNlTm9kZUluZm8gJiZcbiAgICAgICAgICAgIHRhcmdldE5vZGVJbmZvICYmXG4gICAgICAgICAgICB0aGlzLnN0YXRlLmNhbkNvbm5lY3QoXG4gICAgICAgICAgICAgIHNvdXJjZU5vZGVJbmZvLm5vZGUudHlwZSxcbiAgICAgICAgICAgICAgdGFyZ2V0Tm9kZUluZm8ubm9kZS50eXBlXG4gICAgICAgICAgICApXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBDcmVhdGUgdGhlIGNvbm5lY3Rpb25cbiAgICAgICAgICAgIGNvbnN0IGNvbm5lY3Rpb24gPSB7XG4gICAgICAgICAgICAgIGlkOiBgY29ubi0ke0RhdGUubm93KCl9LSR7TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTAwMCl9YCxcbiAgICAgICAgICAgICAgc291cmNlTm9kZUlkOiBzb3VyY2VQb2ludC5ub2RlSWQsXG4gICAgICAgICAgICAgIHRhcmdldE5vZGVJZDogdGFyZ2V0UG9pbnRJbmZvLm5vZGVJZCxcbiAgICAgICAgICAgICAgc291cmNlUG9pbnRJZDogc291cmNlUG9pbnQuaWQsXG4gICAgICAgICAgICAgIHRhcmdldFBvaW50SWQ6IHRhcmdldFBvaW50SW5mby5wb2ludC5pZCxcbiAgICAgICAgICAgICAgc291cmNlU3dpbWxhbmVJbmRleDogc291cmNlU3dpbWxhbmVJbmRleCxcbiAgICAgICAgICAgICAgdGFyZ2V0U3dpbWxhbmVJbmRleDogdGFyZ2V0UG9pbnRJbmZvLnN3aW1sYW5lSW5kZXgsXG4gICAgICAgICAgICAgIGxhYmVsOiAnJyxcbiAgICAgICAgICAgICAgYWN0aW9uOiBudWxsLFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgLy8gQWRkIHRvIGNvbm5lY3Rpb25zIGFycmF5XG4gICAgICAgICAgICB0aGlzLnN0YXRlLmNvbm5lY3Rpb25zLnB1c2goY29ubmVjdGlvbik7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnQ3JlYXRlZCBkaXJlY3QgY29ubmVjdGlvbiBiZXR3ZWVuIG5vZGVzOicsIGNvbm5lY3Rpb24pO1xuXG4gICAgICAgICAgICAvLyBOb3RpZnkgYWJvdXQgY29ubmVjdGlvbiBjcmVhdGlvblxuICAgICAgICAgICAgdGhpcy5vbkNvbm5lY3Rpb25DcmVhdGVkKGNvbm5lY3Rpb24pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgJ0Nhbm5vdCBjb25uZWN0IHRoZXNlIG5vZGUgdHlwZXM6JyxcbiAgICAgICAgICAgICAgc291cmNlTm9kZUluZm8/Lm5vZGUudHlwZSxcbiAgICAgICAgICAgICAgJy0+JyxcbiAgICAgICAgICAgICAgdGFyZ2V0Tm9kZUluZm8/Lm5vZGUudHlwZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ0Nhbm5vdCBjb25uZWN0IGEgbm9kZSB0byBpdHNlbGYnKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBFbmQgdGhlIGNvbm5lY3Rpb24gZHJhZ1xuICAgICAgdGhpcy5zdGF0ZS5lbmRDb25uZWN0aW9uRHJhZygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIHRoZSBwb3NpdGlvbiBpcyB3aXRoaW4gYW55IHN3aW1sYW5lXG4gICAgY29uc3QgaXNJbnNpZGVTd2ltbGFuZSA9IHRoaXMuaXNQb3NpdGlvbkluc2lkZVN3aW1sYW5lKHBvc2l0aW9uLnkpO1xuICAgIGNvbnNvbGUubG9nKCdJcyBpbnNpZGUgc3dpbWxhbmU6JywgaXNJbnNpZGVTd2ltbGFuZSk7XG5cbiAgICAvLyBPbmx5IHNob3cgcG9wdXAgaWYgd2l0aGluIGEgc3dpbWxhbmVcbiAgICBpZiAoaXNJbnNpZGVTd2ltbGFuZSAmJiB0aGlzLnN0YXRlLmlzQ29ubmVjdGlvbkRyYWdnaW5nKCkpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdTaG93aW5nIGNvbm5lY3Rpb24gcG9wdXAnKTtcbiAgICAgIHRoaXMuc2hvd0Nvbm5lY3Rpb25Qb3B1cChwb3NpdGlvbi54LCBwb3NpdGlvbi55KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRW5kIHRoZSBjb25uZWN0aW9uIGRyYWcgaWYgb3V0c2lkZSBhIHN3aW1sYW5lXG4gICAgICBjb25zb2xlLmxvZygnRW5kaW5nIGNvbm5lY3Rpb24gZHJhZyB3aXRob3V0IHNob3dpbmcgcG9wdXAnKTtcbiAgICAgIHRoaXMuc3RhdGUuZW5kQ29ubmVjdGlvbkRyYWcoKTtcbiAgICB9XG4gIH07XG5cbiAgZmluZENvbm5lY3Rpb25Qb2ludEF0UG9zaXRpb24oXG4gICAgeDogbnVtYmVyLFxuICAgIHk6IG51bWJlcixcbiAgICB0b2xlcmFuY2U6IG51bWJlciA9IDEwXG4gICk6IHtcbiAgICBwb2ludDogQ29ubmVjdGlvblBvaW50O1xuICAgIG5vZGVJZDogc3RyaW5nO1xuICAgIHN3aW1sYW5lSW5kZXg6IG51bWJlcjtcbiAgfSB8IG51bGwge1xuICAgIC8vIEl0ZXJhdGUgdGhyb3VnaCBhbGwgc3dpbWxhbmVzIGFuZCBub2RlcyB0byBmaW5kIGNvbm5lY3Rpb24gcG9pbnRzXG4gICAgZm9yIChcbiAgICAgIGxldCBzd2ltbGFuZUluZGV4ID0gMDtcbiAgICAgIHN3aW1sYW5lSW5kZXggPCB0aGlzLnN0YXRlLnN3aW1sYW5lcy5sZW5ndGg7XG4gICAgICBzd2ltbGFuZUluZGV4KytcbiAgICApIHtcbiAgICAgIGNvbnN0IHN3aW1sYW5lID0gdGhpcy5zdGF0ZS5zd2ltbGFuZXNbc3dpbWxhbmVJbmRleF07XG5cbiAgICAgIGlmICghc3dpbWxhbmUubm9kZXMpIGNvbnRpbnVlO1xuXG4gICAgICBmb3IgKGNvbnN0IG5vZGUgb2Ygc3dpbWxhbmUubm9kZXMpIHtcbiAgICAgICAgaWYgKCFub2RlLmNvbm5lY3Rpb25Qb2ludHMpIGNvbnRpbnVlO1xuXG4gICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgYWJzb2x1dGUgcG9zaXRpb24gb2YgdGhlIG5vZGUgKGluY2x1ZGluZyBzd2ltbGFuZSBvZmZzZXQpXG4gICAgICAgIGNvbnN0IGFic29sdXRlTm9kZVggPSBub2RlLng7XG4gICAgICAgIGNvbnN0IGFic29sdXRlTm9kZVkgPSBub2RlLnkgKyBzd2ltbGFuZUluZGV4ICogdGhpcy5zd2ltbGFuZUhlaWdodDtcblxuICAgICAgICBmb3IgKGNvbnN0IHBvaW50IG9mIG5vZGUuY29ubmVjdGlvblBvaW50cykge1xuICAgICAgICAgIC8vIENhbGN1bGF0ZSBhYnNvbHV0ZSBwb3NpdGlvbiBvZiB0aGUgY29ubmVjdGlvbiBwb2ludFxuICAgICAgICAgIGNvbnN0IHBvaW50WCA9IGFic29sdXRlTm9kZVggKyBwb2ludC54O1xuICAgICAgICAgIGNvbnN0IHBvaW50WSA9IGFic29sdXRlTm9kZVkgKyBwb2ludC55O1xuXG4gICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGdpdmVuIHBvc2l0aW9uIGlzIHdpdGhpbiB0b2xlcmFuY2Ugb2YgdGhpcyBwb2ludFxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIE1hdGguYWJzKHggLSBwb2ludFgpIDw9IHRvbGVyYW5jZSAmJlxuICAgICAgICAgICAgTWF0aC5hYnMoeSAtIHBvaW50WSkgPD0gdG9sZXJhbmNlXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBwb2ludDogcG9pbnQsXG4gICAgICAgICAgICAgIG5vZGVJZDogbm9kZS5pZCxcbiAgICAgICAgICAgICAgc3dpbWxhbmVJbmRleDogc3dpbWxhbmVJbmRleCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpc1Bvc2l0aW9uSW5zaWRlU3dpbWxhbmUoeTogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgLy8gQ2hlY2sgaWYgeSBwb3NpdGlvbiBpcyB3aXRoaW4gYW55IHN3aW1sYW5lXG4gICAgY29uc3Qgc3dpbWxhbmVDb3VudCA9IHRoaXMuc3RhdGUuc3dpbWxhbmVzLmxlbmd0aDtcbiAgICBpZiAoc3dpbWxhbmVDb3VudCA9PT0gMCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgLy8gRWFjaCBzd2ltbGFuZSBoYXMgYSBoZWlnaHQgb2YgMjYzcHhcbiAgICBjb25zdCB0b3RhbFN3aW1sYW5lSGVpZ2h0ID0gc3dpbWxhbmVDb3VudCAqIHRoaXMuc3dpbWxhbmVIZWlnaHQ7XG5cbiAgICAvLyBDaGVjayBpZiB5IGlzIHdpdGhpbiB0aGUgdG90YWwgaGVpZ2h0IG9mIGFsbCBzd2ltbGFuZXNcbiAgICByZXR1cm4geSA+PSAwICYmIHkgPCB0b3RhbFN3aW1sYW5lSGVpZ2h0O1xuICB9XG5cbiAgc2hvd0Nvbm5lY3Rpb25Qb3B1cCh4OiBudW1iZXIsIHk6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKCdTaG93aW5nIGNvbm5lY3Rpb24gcG9wdXAgYXQ6JywgeCwgeSk7XG5cbiAgICAvLyBDb252ZXJ0IGNhbnZhcyBjb29yZGluYXRlcyB0byB2aWV3cG9ydCBjb29yZGluYXRlcyBmb3IgcG9wdXAgcG9zaXRpb25pbmdcbiAgICBjb25zdCB2aWV3cG9ydFBvcyA9IHRoaXMuZ2V0Vmlld3BvcnRQb3NpdGlvbih4LCB5KTtcbiAgICB0aGlzLnBvcHVwWCA9IHZpZXdwb3J0UG9zLng7XG4gICAgdGhpcy5wb3B1cFkgPSB2aWV3cG9ydFBvcy55O1xuXG4gICAgLy8gR2V0IGFsbG93ZWQgbm9kZSB0eXBlcyBiYXNlZCBvbiB0aGUgc291cmNlIG5vZGUgdHlwZVxuICAgIHRoaXMuYWxsb3dlZE5vZGVUeXBlcyA9IHRoaXMuc3RhdGUuZ2V0QWxsb3dlZFRhcmdldE5vZGVUeXBlcygpO1xuICAgIGNvbnNvbGUubG9nKCdBbGxvd2VkIG5vZGUgdHlwZXM6JywgdGhpcy5hbGxvd2VkTm9kZVR5cGVzKTtcblxuICAgIC8vIE9ubHkgc2hvdyB0aGUgcG9wdXAgaWYgd2UgaGF2ZSBhbGxvd2VkIG5vZGUgdHlwZXNcbiAgICBpZiAodGhpcy5hbGxvd2VkTm9kZVR5cGVzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMucG9wdXBWaXNpYmxlID0gdHJ1ZTtcbiAgICAgIGNvbnNvbGUubG9nKCdQb3B1cCB2aXNpYmlsaXR5IHNldCB0byB0cnVlJyk7XG5cbiAgICAgIC8vIEZvcmNlIHRoZSBwb3B1cCB0byBiZSB2aXNpYmxlIGluIHRoZSBuZXh0IHRpY2tcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZygnSXMgcG9wdXAgdmlzaWJsZSBpbiBuZXh0IHRpY2s6JywgdGhpcy5wb3B1cFZpc2libGUpO1xuICAgICAgfSwgMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5vIGFsbG93ZWQgbm9kZSB0eXBlcywganVzdCBlbmQgdGhlIGRyYWdcbiAgICAgIGNvbnNvbGUubG9nKCdObyBhbGxvd2VkIG5vZGUgdHlwZXMsIGVuZGluZyBkcmFnJyk7XG4gICAgICB0aGlzLnN0YXRlLmVuZENvbm5lY3Rpb25EcmFnKCk7XG4gICAgfVxuICB9XG5cbiAgaGlkZUNvbm5lY3Rpb25Qb3B1cCgpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZygnQ2FsbCB0byBoaWRlJyk7XG4gICAgdGhpcy5wb3B1cFZpc2libGUgPSBmYWxzZTtcbiAgICB0aGlzLnN0YXRlLmVuZENvbm5lY3Rpb25EcmFnKCk7XG4gIH1cblxuICAvLyBBZGQgdGhpcyBoYW5kbGVyIHRvIGNsb3NlIHRoZSBwb3B1cCB3aGVuIGNsaWNraW5nIG91dHNpZGVcbiAgLy8gQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Y2xpY2snLCBbJyRldmVudCddKVxuICAvLyBvbkRvY3VtZW50Q2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgLy8gICBpZiAodGhpcy5wb3B1cFZpc2libGUpIHtcbiAgLy8gICAgIGNvbnN0IHBvcHVwRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ3ZlcmJlbi1wb3AtVXAnKTtcbiAgLy8gICAgIGlmIChwb3B1cEVsZW1lbnQgJiYgIXBvcHVwRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQgYXMgTm9kZSkpIHtcbiAgLy8gICAgICAgdGhpcy5oaWRlQ29ubmVjdGlvblBvcHVwKCk7XG4gIC8vICAgICB9XG4gIC8vICAgfVxuICAvLyB9XG5cbiAgY3JlYXRlTm9kZUNvbm5lY3Rpb24obm9kZVR5cGU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHBhdGhEYXRhID0gdGhpcy5zdGF0ZS5nZXRDb25uZWN0aW9uUGF0aERhdGEoKTtcbiAgICBpZiAoIXBhdGhEYXRhKSB7XG4gICAgICB0aGlzLmhpZGVDb25uZWN0aW9uUG9wdXAoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiB0aGlzIG5vZGUgdHlwZSBpcyBhbGxvd2VkIHRvIGJlIGNyZWF0ZWRcbiAgICBjb25zdCBhbGxvd2VkVHlwZXMgPSB0aGlzLnN0YXRlLmdldEFsbG93ZWRUYXJnZXROb2RlVHlwZXMoKTtcbiAgICBpZiAoIWFsbG93ZWRUeXBlcy5pbmNsdWRlcyhub2RlVHlwZSkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgIGBDYW5ub3QgY3JlYXRlIGNvbm5lY3Rpb24gdG8gJHtub2RlVHlwZX0gZnJvbSBjdXJyZW50IG5vZGUgdHlwZWBcbiAgICAgICk7XG4gICAgICB0aGlzLmhpZGVDb25uZWN0aW9uUG9wdXAoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB7IGVuZFgsIGVuZFkgfSA9IHBhdGhEYXRhO1xuXG4gICAgLy8gRGV0ZXJtaW5lIHRoZSB0YXJnZXQgc3dpbWxhbmUgZnJvbSB0aGUgZHJvcCBwb3NpdGlvbiAoTk9UIHRoZSBzb3VyY2VcbiAgICAvLyBzd2ltbGFuZSkuIGBhZGROb2RlYCBleHBlY3RzIGFuIGFic29sdXRlIGNhbnZhcyBZIHBsdXMgdGhlIHRhcmdldFxuICAgIC8vIHN3aW1sYW5lIGluZGV4LCBhbmQgcGVyZm9ybXMgdGhlIHN3aW1sYW5lLXJlbGF0aXZlIGNvbnZlcnNpb24gaXRzZWxmLlxuICAgIGxldCB0YXJnZXRTd2ltbGFuZUluZGV4ID0gTWF0aC5mbG9vcihlbmRZIC8gdGhpcy5zd2ltbGFuZUhlaWdodCk7XG4gICAgdGFyZ2V0U3dpbWxhbmVJbmRleCA9IE1hdGgubWF4KFxuICAgICAgMCxcbiAgICAgIE1hdGgubWluKHRhcmdldFN3aW1sYW5lSW5kZXgsIHRoaXMuc3RhdGUuc3dpbWxhbmVzLmxlbmd0aCAtIDEpXG4gICAgKTtcblxuICAgIC8vIEdldCBzb3VyY2Ugbm9kZSBpbmZvXG4gICAgY29uc3Qgc291cmNlUG9pbnQgPSB0aGlzLnN0YXRlLmRyYWdnaW5nQ29ubmVjdGlvbkRhdGEuc291cmNlUG9pbnQ7XG4gICAgaWYgKCFzb3VyY2VQb2ludCkge1xuICAgICAgdGhpcy5oaWRlQ29ubmVjdGlvblBvcHVwKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc291cmNlTm9kZUluZm8gPSB0aGlzLnN0YXRlLmZpbmROb2RlQnlJZChzb3VyY2VQb2ludC5ub2RlSWQpO1xuICAgIGlmICghc291cmNlTm9kZUluZm8pIHtcbiAgICAgIHRoaXMuaGlkZUNvbm5lY3Rpb25Qb3B1cCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIElmIGNvbm5lY3RpbmcgZnJvbSBhIGRlY2lzaW9uIHRvIGEgc3RhZ2UsIHNob3cgY29uZGl0aW9uIHBvcHVwIGZpcnN0XG4gICAgaWYgKHNvdXJjZU5vZGVJbmZvLm5vZGUudHlwZSA9PT0gJ2RlY2lzaW9uJyAmJiBub2RlVHlwZSA9PT0gJ3N0YWdlJykge1xuICAgICAgLy8gU3RvcmUgaW5mb3JtYXRpb24gZm9yIGxhdGVyIHN0YWdlIGNyZWF0aW9uXG4gICAgICB0aGlzLnBlbmRpbmdEZWNpc2lvbkNvbm5lY3Rpb24gPSB7XG4gICAgICAgIGRlY2lzaW9uTm9kZUlkOiBzb3VyY2VOb2RlSW5mby5ub2RlLmlkLFxuICAgICAgICBzd2ltbGFuZUluZGV4OiB0YXJnZXRTd2ltbGFuZUluZGV4LFxuICAgICAgICB4OiBlbmRYLFxuICAgICAgICB5OiBlbmRZLFxuICAgICAgfTtcblxuICAgICAgLy8gQ2VudGVyIHRoZSBwb3B1cCBvdmVyIHRoZSBjb25uZWN0aW9uIGVuZHBvaW50XG4gICAgICB0aGlzLmRlY2lzaW9uQ29uZGl0aW9uUG9wdXBYID0gZW5kWDtcbiAgICAgIHRoaXMuZGVjaXNpb25Db25kaXRpb25Qb3B1cFkgPSBlbmRZIC0gMTUwOyAvLyBQb3NpdGlvbiBhYm92ZSB0aGUgZW5kcG9pbnRcblxuICAgICAgLy8gU2V0IGRlY2lzaW9uIG5vZGUgSURcbiAgICAgIHRoaXMuYWN0aXZlRGVjaXNpb25Ob2RlSWQgPSBzb3VyY2VOb2RlSW5mby5ub2RlLmlkO1xuICAgICAgdGhpcy5zaG93RGVjaXNpb25Db25kaXRpb25EaWFsb2cgPSB0cnVlO1xuXG4gICAgICAvLyBFbmQgdGhlIGNvbm5lY3Rpb24gZHJhZ1xuICAgICAgdGhpcy5oaWRlQ29ubmVjdGlvblBvcHVwKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHByZWNvbmRpdGlvbnMgYmFzZWQgb24gbm9kZSB0eXBlXG4gICAgaWYgKG5vZGVUeXBlID09PSAnc3RhZ2UnKSB7XG4gICAgICAvLyBDcmVhdGUgdGhlIHN0YWdlIGluIHRoZSB0YXJnZXQgc3dpbWxhbmUuIGBhZGROb2RlYCBjb252ZXJ0cyB0aGVcbiAgICAgIC8vIGFic29sdXRlIGVuZFkgdG8gYSBzd2ltbGFuZS1yZWxhdGl2ZSBwb3NpdGlvbiBpbnRlcm5hbGx5LlxuICAgICAgY29uc3QgbmV3Tm9kZSA9IHRoaXMuc3RhdGUuYWRkTm9kZShcbiAgICAgICAgdGFyZ2V0U3dpbWxhbmVJbmRleCxcbiAgICAgICAgJ3N0YWdlJyxcbiAgICAgICAgZW5kWCxcbiAgICAgICAgZW5kWSxcbiAgICAgICAgeyBOYW1lOiAnTmV3IFN0YWdlJyB9IC8vIEFkZCBkZWZhdWx0IHByb3BlcnRpZXNcbiAgICAgICk7XG5cbiAgICAgIGlmIChcbiAgICAgICAgbmV3Tm9kZSAmJlxuICAgICAgICBuZXdOb2RlLmNvbm5lY3Rpb25Qb2ludHMgJiZcbiAgICAgICAgbmV3Tm9kZS5jb25uZWN0aW9uUG9pbnRzLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgc291cmNlUG9pbnRcbiAgICAgICkge1xuICAgICAgICAvLyBIYW5kbGUgY29ubmVjdGlvbiBjcmVhdGlvblxuICAgICAgICBjb25zdCBvcHBvc2luZ1R5cGUgPSB7XG4gICAgICAgICAgcmlnaHQ6ICdsZWZ0JyxcbiAgICAgICAgICBsZWZ0OiAncmlnaHQnLFxuICAgICAgICAgIHRvcDogJ2JvdHRvbScsXG4gICAgICAgICAgYm90dG9tOiAndG9wJyxcbiAgICAgICAgfVtzb3VyY2VQb2ludC50eXBlXSBhcyAndG9wJyB8ICdyaWdodCcgfCAnYm90dG9tJyB8ICdsZWZ0JztcblxuICAgICAgICBjb25zdCB0YXJnZXRQb2ludCA9IG5ld05vZGUuY29ubmVjdGlvblBvaW50cy5maW5kKFxuICAgICAgICAgIChwKSA9PiBwLnR5cGUgPT09IG9wcG9zaW5nVHlwZVxuICAgICAgICApO1xuXG4gICAgICAgIGlmICh0YXJnZXRQb2ludCkge1xuICAgICAgICAgIC8vIENyZWF0ZSB0aGUgY29ubmVjdGlvblxuICAgICAgICAgIGNvbnN0IGNvbm5lY3Rpb24gPSB0aGlzLnN0YXRlLmNyZWF0ZUNvbm5lY3Rpb24oXG4gICAgICAgICAgICBuZXdOb2RlLmlkLFxuICAgICAgICAgICAgdGFyZ2V0UG9pbnQuaWQsXG4gICAgICAgICAgICB0YXJnZXRTd2ltbGFuZUluZGV4XG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChjb25uZWN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLm9uQ29ubmVjdGlvbkNyZWF0ZWQoY29ubmVjdGlvbik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuaGlkZUNvbm5lY3Rpb25Qb3B1cCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSBpZiAobm9kZVR5cGUgPT09ICdzdWJmbG93Jykge1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICdDcmVhdGluZyBzdWJmbG93IGZyb20gY29ubmVjdGlvbiBhdDonLFxuICAgICAgICBlbmRYLFxuICAgICAgICBlbmRZLFxuICAgICAgICAnc3dpbWxhbmU6JyxcbiAgICAgICAgdGFyZ2V0U3dpbWxhbmVJbmRleFxuICAgICAgKTtcbiAgICAgIC8vIFNob3cgd29ya2Zsb3cgc2VsZWN0aW9uIHBvcHVwIGFuZCBzdG9yZSBjb25uZWN0aW9uIGRhdGEgZm9yIGxhdGVyIHVzZVxuICAgICAgdGhpcy5zaG93U3ViZmxvd1NlbGVjdGlvblBvcHVwKGVuZFgsIGVuZFksIHRhcmdldFN3aW1sYW5lSW5kZXgpO1xuICAgICAgdGhpcy5oaWRlQ29ubmVjdGlvblBvcHVwKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gRm9yIG90aGVyIG5vZGVzIENyZWF0ZSB0aGUgbmV3IG5vZGUgYXQgdGhlIGVuZCBwb3NpdGlvbiBvZiB0aGUgY29ubmVjdGlvblxuICAgIGNvbnN0IG5ld05vZGUgPSB0aGlzLnN0YXRlLmFkZE5vZGUoXG4gICAgICB0YXJnZXRTd2ltbGFuZUluZGV4LFxuICAgICAgbm9kZVR5cGUgYXMgVG9vbFR5cGUsXG4gICAgICBlbmRYLFxuICAgICAgZW5kWVxuICAgICk7XG5cbiAgICBpZiAoXG4gICAgICBuZXdOb2RlICYmXG4gICAgICBuZXdOb2RlLmNvbm5lY3Rpb25Qb2ludHMgJiZcbiAgICAgIG5ld05vZGUuY29ubmVjdGlvblBvaW50cy5sZW5ndGggPiAwXG4gICAgKSB7XG4gICAgICAvLyBGaW5kIHRoZSBtb3N0IGFwcHJvcHJpYXRlIGNvbm5lY3Rpb24gcG9pbnQgKGNsb3Nlc3QgdG8gdGhlIHNvdXJjZSlcbiAgICAgIGlmIChzb3VyY2VQb2ludCkge1xuICAgICAgICAvLyBGb3Igc2ltcGxpY2l0eSwgdXNlIHRoZSBmaXJzdCBjb25uZWN0aW9uIHBvaW50IG9mIG9wcG9zaW5nIHR5cGVcbiAgICAgICAgLy8gSW4gYSByZWFsIGltcGxlbWVudGF0aW9uLCB5b3UnZCBmaW5kIHRoZSBjbG9zZXN0IG9yIG1vc3QgYXBwcm9wcmlhdGUgcG9pbnRcbiAgICAgICAgbGV0IHRhcmdldFBvaW50O1xuXG4gICAgICAgIC8vIElmIHNvdXJjZSBpcyBvbiByaWdodCwgdGFyZ2V0IHNob3VsZCBiZSBvbiBsZWZ0LCBldGMuXG4gICAgICAgIGNvbnN0IG9wcG9zaW5nVHlwZSA9IHtcbiAgICAgICAgICByaWdodDogJ2xlZnQnLFxuICAgICAgICAgIGxlZnQ6ICdyaWdodCcsXG4gICAgICAgICAgdG9wOiAnYm90dG9tJyxcbiAgICAgICAgICBib3R0b206ICd0b3AnLFxuICAgICAgICB9W3NvdXJjZVBvaW50LnR5cGVdIGFzICd0b3AnIHwgJ3JpZ2h0JyB8ICdib3R0b20nIHwgJ2xlZnQnO1xuXG4gICAgICAgIHRhcmdldFBvaW50ID0gbmV3Tm9kZS5jb25uZWN0aW9uUG9pbnRzLmZpbmQoXG4gICAgICAgICAgKHApID0+IHAudHlwZSA9PT0gb3Bwb3NpbmdUeXBlXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKHRhcmdldFBvaW50KSB7XG4gICAgICAgICAgLy8gQ3JlYXRlIHRoZSBjb25uZWN0aW9uXG4gICAgICAgICAgY29uc3QgY29ubmVjdGlvbiA9IHRoaXMuc3RhdGUuY3JlYXRlQ29ubmVjdGlvbihcbiAgICAgICAgICAgIG5ld05vZGUuaWQsXG4gICAgICAgICAgICB0YXJnZXRQb2ludC5pZCxcbiAgICAgICAgICAgIHRhcmdldFN3aW1sYW5lSW5kZXhcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKGNvbm5lY3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXMub25Db25uZWN0aW9uQ3JlYXRlZChjb25uZWN0aW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc291cmNlTm9kZUluZm8pIHtcbiAgICAgIHRoaXMudXBkYXRlTm9kZUNvbm5lY3Rpb25zKHNvdXJjZU5vZGVJbmZvLm5vZGUpO1xuICAgIH1cblxuICAgIC8vIEVuZCB0aGUgY29ubmVjdGlvbiBkcmFnXG4gICAgdGhpcy5oaWRlQ29ubmVjdGlvblBvcHVwKCk7XG4gIH1cblxuICAvLyBNZXRob2QgdG8gaGFuZGxlIHNhdmluZyB0aGUgY29uZGl0aW9uXG4gIG9uRGVjaXNpb25Db25kaXRpb25TYXZlZChldmVudDoge1xuICAgIGNvbm5lY3Rpb25JZDogc3RyaW5nO1xuICAgIGNvbmRpdGlvbjogc3RyaW5nO1xuICB9KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnBlbmRpbmdEZWNpc2lvbkNvbm5lY3Rpb24pIHtcbiAgICAgIHRoaXMuc2hvd0RlY2lzaW9uQ29uZGl0aW9uRGlhbG9nID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgeyBkZWNpc2lvbk5vZGVJZCwgc3dpbWxhbmVJbmRleCwgeCwgeSB9ID1cbiAgICAgIHRoaXMucGVuZGluZ0RlY2lzaW9uQ29ubmVjdGlvbjtcblxuICAgIC8vIENyZWF0ZSB0aGUgc3RhZ2UgZGlyZWN0bHkgd2l0aCBkZWZhdWx0IHByb3BlcnRpZXNcbiAgICBjb25zdCBub2RlID0gdGhpcy5zdGF0ZS5hZGROb2RlKFxuICAgICAgc3dpbWxhbmVJbmRleCxcbiAgICAgICdzdGFnZScsXG4gICAgICB4LFxuICAgICAgeSxcbiAgICAgIHsgTmFtZTogJ05ldyBTdGFnZScgfSAvLyBBZGQgZGVmYXVsdCBwcm9wZXJ0aWVzXG4gICAgKTtcblxuICAgIGlmIChub2RlKSB7XG4gICAgICBjb25zdCBkZWNpc2lvbk5vZGVJbmZvID0gdGhpcy5zdGF0ZS5maW5kTm9kZUJ5SWQoZGVjaXNpb25Ob2RlSWQpO1xuXG4gICAgICBpZiAoXG4gICAgICAgIGRlY2lzaW9uTm9kZUluZm8gJiZcbiAgICAgICAgbm9kZS5jb25uZWN0aW9uUG9pbnRzICYmXG4gICAgICAgIG5vZGUuY29ubmVjdGlvblBvaW50cy5sZW5ndGggPiAwXG4gICAgICApIHtcbiAgICAgICAgLy8gRmluZCBhIHN1aXRhYmxlIGNvbm5lY3Rpb24gcG9pbnQgZnJvbSB0aGUgZGVjaXNpb24gbm9kZVxuICAgICAgICBjb25zdCBkZWNpc2lvbk5vZGUgPSBkZWNpc2lvbk5vZGVJbmZvLm5vZGU7XG4gICAgICAgIGNvbnN0IGRlY2lzaW9uTm9kZVBvaW50cyA9IGRlY2lzaW9uTm9kZS5jb25uZWN0aW9uUG9pbnRzIHx8IFtdO1xuICAgICAgICBjb25zdCBzb3VyY2VQb2ludCA9IGRlY2lzaW9uTm9kZVBvaW50cy5maW5kKFxuICAgICAgICAgIChwKSA9PiBwLnR5cGUgPT09ICdyaWdodCcgfHwgcC50eXBlID09PSAnYm90dG9tJ1xuICAgICAgICApO1xuXG4gICAgICAgIGlmIChzb3VyY2VQb2ludCkge1xuICAgICAgICAgIC8vIEZpbmQgb3Bwb3NpbmcgdHlwZSBjb25uZWN0aW9uIHBvaW50IG9uIHRoZSBuZXcgc3RhZ2VcbiAgICAgICAgICBjb25zdCBvcHBvc2luZ1R5cGUgPSB7XG4gICAgICAgICAgICByaWdodDogJ2xlZnQnLFxuICAgICAgICAgICAgYm90dG9tOiAndG9wJyxcbiAgICAgICAgICAgIGxlZnQ6ICdyaWdodCcsXG4gICAgICAgICAgICB0b3A6ICdib3R0b20nLFxuICAgICAgICAgIH1bc291cmNlUG9pbnQudHlwZV0gYXMgJ3RvcCcgfCAncmlnaHQnIHwgJ2JvdHRvbScgfCAnbGVmdCc7XG5cbiAgICAgICAgICBjb25zdCB0YXJnZXRQb2ludCA9IG5vZGUuY29ubmVjdGlvblBvaW50cy5maW5kKFxuICAgICAgICAgICAgKHApID0+IHAudHlwZSA9PT0gb3Bwb3NpbmdUeXBlXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmICh0YXJnZXRQb2ludCkge1xuICAgICAgICAgICAgLy8gQ3JlYXRlIGNvbm5lY3Rpb24gd2l0aCBjb25kaXRpb25cbiAgICAgICAgICAgIGNvbnN0IGNvbm5lY3Rpb24gPSB7XG4gICAgICAgICAgICAgIGlkOiBgY29ubi0ke0RhdGUubm93KCl9LSR7TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTAwMCl9YCxcbiAgICAgICAgICAgICAgc291cmNlTm9kZUlkOiBkZWNpc2lvbk5vZGUuaWQsXG4gICAgICAgICAgICAgIHRhcmdldE5vZGVJZDogbm9kZS5pZCxcbiAgICAgICAgICAgICAgc291cmNlUG9pbnRJZDogc291cmNlUG9pbnQuaWQsXG4gICAgICAgICAgICAgIHRhcmdldFBvaW50SWQ6IHRhcmdldFBvaW50LmlkLFxuICAgICAgICAgICAgICBzb3VyY2VTd2ltbGFuZUluZGV4OiBkZWNpc2lvbk5vZGVJbmZvLnN3aW1sYW5lSW5kZXgsXG4gICAgICAgICAgICAgIHRhcmdldFN3aW1sYW5lSW5kZXg6IHN3aW1sYW5lSW5kZXgsXG4gICAgICAgICAgICAgIGNvbmRpdGlvbjogZXZlbnQuY29uZGl0aW9uLFxuICAgICAgICAgICAgICBsYWJlbDogJycsXG4gICAgICAgICAgICAgIGFjdGlvbjogbnVsbCxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIC8vIEFkZCBjb25uZWN0aW9uIHRvIHRoZSBzdGF0ZVxuICAgICAgICAgICAgdGhpcy5zdGF0ZS5jb25uZWN0aW9ucy5wdXNoKGNvbm5lY3Rpb24pO1xuICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICdDcmVhdGVkIGRlY2lzaW9uIGNvbm5lY3Rpb24gd2l0aCBjb25kaXRpb246JyxcbiAgICAgICAgICAgICAgY29ubmVjdGlvblxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDbGVhciBwZW5kaW5nIGRhdGFcbiAgICB0aGlzLnBlbmRpbmdEZWNpc2lvbkNvbm5lY3Rpb24gPSBudWxsO1xuICAgIHRoaXMucGVuZGluZ0RlY2lzaW9uQ29uZGl0aW9uID0gJyc7XG5cbiAgICAvLyBIaWRlIHRoZSBjb25kaXRpb24gcG9wdXBcbiAgICB0aGlzLnNob3dEZWNpc2lvbkNvbmRpdGlvbkRpYWxvZyA9IGZhbHNlO1xuICB9XG5cbiAgb25EZWNpc2lvbkNvbmRpdGlvbkNhbmNlbGxlZCgpOiB2b2lkIHtcbiAgICB0aGlzLnNob3dEZWNpc2lvbkNvbmRpdGlvbkRpYWxvZyA9IGZhbHNlO1xuICAgIC8vIERvbid0IGNyZWF0ZSB0aGUgc3RhZ2Ugb3IgY29ubmVjdGlvblxuICB9XG5cbiAgZ2V0Q29ubmVjdGlvblBhdGgoKTogc3RyaW5nIHtcbiAgICBjb25zdCBwYXRoRGF0YSA9IHRoaXMuc3RhdGUuZ2V0Q29ubmVjdGlvblBhdGhEYXRhKCk7XG4gICAgaWYgKCFwYXRoRGF0YSkgcmV0dXJuICcnO1xuXG4gICAgY29uc3QgeyBzdGFydFgsIHN0YXJ0WSwgZW5kWCwgZW5kWSB9ID0gcGF0aERhdGE7XG4gICAgY29uc3Qgc291cmNlUG9pbnQgPSB0aGlzLnN0YXRlLmRyYWdnaW5nQ29ubmVjdGlvbkRhdGEuc291cmNlUG9pbnQ7XG5cbiAgICBpZiAoIXNvdXJjZVBvaW50KSByZXR1cm4gJyc7XG5cbiAgICByZXR1cm4gdGhpcy5nZXRPcnRob2dvbmFsUGF0aChzdGFydFgsIHN0YXJ0WSwgZW5kWCwgZW5kWSwgc291cmNlUG9pbnQudHlwZSk7XG4gIH1cblxuICBnZXRDb25uZWN0aW9uUGF0aEZvclNhdmVkQ29ubmVjdGlvbihjb25uZWN0aW9uOiBDb25uZWN0aW9uKTogc3RyaW5nIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGF0aERhdGEgPSB0aGlzLnN0YXRlLmdldENvbm5lY3Rpb25EYXRhKGNvbm5lY3Rpb24pO1xuICAgICAgaWYgKCFwYXRoRGF0YSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdObyBwYXRoIGRhdGEgZm9yIGNvbm5lY3Rpb246JywgY29ubmVjdGlvbik7XG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBzdGFydFgsIHN0YXJ0WSwgZW5kWCwgZW5kWSB9ID0gcGF0aERhdGE7XG5cbiAgICAgIGNvbnN0IHNvdXJjZU5vZGVJbmZvID0gdGhpcy5zdGF0ZS5maW5kTm9kZUJ5SWQoY29ubmVjdGlvbi5zb3VyY2VOb2RlSWQpO1xuICAgICAgaWYgKCFzb3VyY2VOb2RlSW5mbykge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdTb3VyY2Ugbm9kZSBub3QgZm91bmQgZm9yIGNvbm5lY3Rpb246JywgY29ubmVjdGlvbik7XG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc291cmNlTm9kZSA9IHNvdXJjZU5vZGVJbmZvLm5vZGU7XG4gICAgICBjb25zdCBzb3VyY2VQb2ludCA9IHNvdXJjZU5vZGUuY29ubmVjdGlvblBvaW50cz8uZmluZChcbiAgICAgICAgKHApID0+IHAuaWQgPT09IGNvbm5lY3Rpb24uc291cmNlUG9pbnRJZFxuICAgICAgKTtcblxuICAgICAgaWYgKCFzb3VyY2VQb2ludCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdTb3VyY2UgcG9pbnQgbm90IGZvdW5kIGZvciBjb25uZWN0aW9uOicsIGNvbm5lY3Rpb24pO1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmdldE9ydGhvZ29uYWxQYXRoKFxuICAgICAgICBzdGFydFgsXG4gICAgICAgIHN0YXJ0WSxcbiAgICAgICAgZW5kWCxcbiAgICAgICAgZW5kWSxcbiAgICAgICAgc291cmNlUG9pbnQudHlwZVxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZ2VuZXJhdGluZyBwYXRoIGZvciBjb25uZWN0aW9uOicsIGNvbm5lY3Rpb24sIGVycm9yKTtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cblxuICBnZXRPcnRob2dvbmFsUGF0aChcbiAgICBzdGFydFg6IG51bWJlcixcbiAgICBzdGFydFk6IG51bWJlcixcbiAgICBlbmRYOiBudW1iZXIsXG4gICAgZW5kWTogbnVtYmVyLFxuICAgIHBvaW50VHlwZTogJ3RvcCcgfCAncmlnaHQnIHwgJ2JvdHRvbScgfCAnbGVmdCdcbiAgKTogc3RyaW5nIHtcbiAgICAvLyBEZXRlcm1pbmUgaW5pdGlhbCBkaXJlY3Rpb24gYmFzZWQgb24gY29ubmVjdGlvbiBwb2ludCB0eXBlXG4gICAgbGV0IHBhdGggPSAnJztcblxuICAgIC8vIEZvciBzaWRlIHBvaW50cyAobGVmdC9yaWdodCksIHN0YXJ0IHdpdGggaG9yaXpvbnRhbCBsaW5lXG4gICAgaWYgKHBvaW50VHlwZSA9PT0gJ2xlZnQnIHx8IHBvaW50VHlwZSA9PT0gJ3JpZ2h0Jykge1xuICAgICAgLy8gQ2FsY3VsYXRlIGhvcml6b250YWwgZGlzdGFuY2VcbiAgICAgIGNvbnN0IGhvcml6b250YWxEaXN0ID0gZW5kWCAtIHN0YXJ0WDtcblxuICAgICAgLy8gSWYgdGhlIGVuZCBwb2ludCBpcyB2ZXJ5IGNsb3NlIGhvcml6b250YWxseSwgdXNlIGEgc2ltcGxlIDMtc2VnbWVudCBwYXRoXG4gICAgICBpZiAoTWF0aC5hYnMoaG9yaXpvbnRhbERpc3QpIDwgMzApIHtcbiAgICAgICAgY29uc3QgbWlkWSA9IChzdGFydFkgKyBlbmRZKSAvIDI7XG4gICAgICAgIHBhdGggPSBgTSAke3N0YXJ0WH0gJHtzdGFydFl9IEggJHtlbmRYfSBWICR7bWlkWX0gViAke2VuZFl9YDtcbiAgICAgIH1cbiAgICAgIC8vIE90aGVyd2lzZSwgY3JlYXRlIGEgcGF0aCB3aXRoIGhvcml6b250YWwgc2VnbWVudCBmaXJzdCwgdGhlbiB2ZXJ0aWNhbCwgdGhlbiBob3Jpem9udGFsXG4gICAgICBlbHNlIHtcbiAgICAgICAgcGF0aCA9IGBNICR7c3RhcnRYfSAke3N0YXJ0WX0gSCAke3N0YXJ0WCArIGhvcml6b250YWxEaXN0IC8gMlxuICAgICAgICAgIH0gViAke2VuZFl9IEggJHtlbmRYfWA7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIEZvciB0b3AvYm90dG9tIHBvaW50cywgc3RhcnQgd2l0aCB2ZXJ0aWNhbCBsaW5lXG4gICAgZWxzZSBpZiAocG9pbnRUeXBlID09PSAndG9wJyB8fCBwb2ludFR5cGUgPT09ICdib3R0b20nKSB7XG4gICAgICAvLyBDYWxjdWxhdGUgdmVydGljYWwgZGlzdGFuY2VcbiAgICAgIGNvbnN0IHZlcnRpY2FsRGlzdCA9IGVuZFkgLSBzdGFydFk7XG5cbiAgICAgIC8vIElmIHRoZSBlbmQgcG9pbnQgaXMgdmVyeSBjbG9zZSB2ZXJ0aWNhbGx5LCB1c2UgYSBzaW1wbGUgMy1zZWdtZW50IHBhdGhcbiAgICAgIGlmIChNYXRoLmFicyh2ZXJ0aWNhbERpc3QpIDwgMzApIHtcbiAgICAgICAgY29uc3QgbWlkWCA9IChzdGFydFggKyBlbmRYKSAvIDI7XG4gICAgICAgIHBhdGggPSBgTSAke3N0YXJ0WH0gJHtzdGFydFl9IFYgJHtlbmRZfSBIICR7bWlkWH0gSCAke2VuZFh9YDtcbiAgICAgIH1cbiAgICAgIC8vIE90aGVyd2lzZSwgY3JlYXRlIGEgcGF0aCB3aXRoIHZlcnRpY2FsIHNlZ21lbnQgZmlyc3QsIHRoZW4gaG9yaXpvbnRhbCwgdGhlbiB2ZXJ0aWNhbFxuICAgICAgZWxzZSB7XG4gICAgICAgIHBhdGggPSBgTSAke3N0YXJ0WH0gJHtzdGFydFl9IFYgJHtzdGFydFkgKyB2ZXJ0aWNhbERpc3QgLyAyXG4gICAgICAgICAgfSBIICR7ZW5kWH0gViAke2VuZFl9YDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcGF0aDtcbiAgfVxuXG4gIHNlbGVjdEZvcm1Gb3JTdGFnZShmb3JtOiBGb3JtIHwgbnVsbCwgbm9kZTogTm9kZSkge1xuICAgIC8vIElmIGZvcm0gaXMgbnVsbCwgd2UncmUgY2xlYXJpbmcgdGhlIHNlbGVjdGlvblxuICAgIGlmIChub2RlKSB7XG4gICAgICBpZiAoIW5vZGUuc3RhZ2VEYXRhKSB7XG4gICAgICAgIG5vZGUuc3RhZ2VEYXRhID0ge307XG4gICAgICB9XG5cbiAgICAgIGlmIChmb3JtKSB7XG4gICAgICAgIG5vZGUuc3RhZ2VEYXRhLmZvcm1JZCA9IGZvcm0uQ29kZTtcbiAgICAgICAgbm9kZS5zdGFnZURhdGEuZm9ybU5hbWUgPSBmb3JtLk5hbWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBDbGVhciBmb3JtIHNlbGVjdGlvblxuICAgICAgICBkZWxldGUgbm9kZS5zdGFnZURhdGEuZm9ybUlkO1xuICAgICAgICBkZWxldGUgbm9kZS5zdGFnZURhdGEuZm9ybU5hbWU7XG4gICAgICB9XG5cbiAgICAgIC8vIEVtaXQgYW4gZXZlbnQgdG8gdXBkYXRlIHRoZSBzdGFnZSBkYXRhXG4gICAgICB0aGlzLm9uU3RhZ2VQcm9wZXJ0aWVzVXBkYXRlZCh7XG4gICAgICAgIG5vZGVJZDogbm9kZS5pZCxcbiAgICAgICAgc3RhZ2VEYXRhOiBub2RlLnN0YWdlRGF0YSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG9uU3RhZ2VQcm9wZXJ0aWVzVXBkYXRlZChldmVudDoge1xuICAgIG5vZGVJZDogc3RyaW5nO1xuICAgIHN0YWdlRGF0YTogUGFydGlhbDxXb3JrZmxvd1N0YWdlPjtcbiAgfSk6IHZvaWQge1xuICAgIC8vIEZpbmQgdGhlIG5vZGUgaW4gdGhlIHN3aW1sYW5lc1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zdGF0ZS5zd2ltbGFuZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHN3aW1sYW5lID0gdGhpcy5zdGF0ZS5zd2ltbGFuZXNbaV07XG4gICAgICBjb25zdCBub2RlSW5kZXggPSBzd2ltbGFuZS5ub2Rlcz8uZmluZEluZGV4KChuKSA9PiBuLmlkID09PSBldmVudC5ub2RlSWQpO1xuXG4gICAgICBpZiAobm9kZUluZGV4ICE9PSB1bmRlZmluZWQgJiYgbm9kZUluZGV4ID49IDApIHtcbiAgICAgICAgLy8gVXBkYXRlIHRoZSBzdGFnZSBkYXRhXG4gICAgICAgIGlmIChzd2ltbGFuZS5ub2Rlcykge1xuICAgICAgICAgIHN3aW1sYW5lLm5vZGVzW25vZGVJbmRleF0uc3RhZ2VEYXRhID0ge1xuICAgICAgICAgICAgLi4uc3dpbWxhbmUubm9kZXNbbm9kZUluZGV4XS5zdGFnZURhdGEsXG4gICAgICAgICAgICAuLi5ldmVudC5zdGFnZURhdGEsXG4gICAgICAgICAgfTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICdVcGRhdGVkIHN0YWdlIGRhdGEgaW4gc3dpbWxhbmU6JyxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICAnbm9kZTonLFxuICAgICAgICAgICAgbm9kZUluZGV4LFxuICAgICAgICAgICAgJ2RhdGE6JyxcbiAgICAgICAgICAgIHN3aW1sYW5lLm5vZGVzW25vZGVJbmRleF0uc3RhZ2VEYXRhXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvbkNvbm5lY3Rpb25DcmVhdGVkKGNvbm5lY3Rpb246IENvbm5lY3Rpb24pOiB2b2lkIHtcbiAgICAvLyBBZnRlciBhIGNvbm5lY3Rpb24gaXMgY3JlYXRlZCwgcmVmcmVzaCB0aGUgc291cmNlIG5vZGUgdG8gdXBkYXRlIGl0cyBzdGF0ZVxuICAgIGNvbnN0IHNvdXJjZU5vZGVJbmZvID0gdGhpcy5zdGF0ZS5maW5kTm9kZUJ5SWQoY29ubmVjdGlvbi5zb3VyY2VOb2RlSWQpO1xuICAgIGlmIChzb3VyY2VOb2RlSW5mbyAmJiBzb3VyY2VOb2RlSW5mby5ub2RlLnR5cGUgPT09ICdzdGFnZScpIHtcbiAgICAgIC8vIFJlZnJlc2ggbm9kZSBzdGF0ZVxuICAgICAgdGhpcy51cGRhdGVOb2RlQ29ubmVjdGlvbnMoc291cmNlTm9kZUluZm8ubm9kZSk7XG4gICAgfVxuICB9XG5cbiAgLy8gSGVscGVyIG1ldGhvZCB0byB1cGRhdGUgbm9kZSdzIGNvbm5lY3Rpb24gc3RhdHVzXG4gIHVwZGF0ZU5vZGVDb25uZWN0aW9ucyhub2RlOiBXRk5vZGUpOiB2b2lkIHtcbiAgICAvLyBDb3VudCB0aGUgbnVtYmVyIG9mIG91dGdvaW5nIGNvbm5lY3Rpb25zIHRoYXQgY29ubmVjdCB0byBzdGFnZXNcbiAgICBjb25zdCBvdXRnb2luZ0Nvbm5lY3Rpb25zID0gdGhpcy5zdGF0ZS5jb25uZWN0aW9ucy5maWx0ZXIoXG4gICAgICAoY29ubikgPT4gY29ubi5zb3VyY2VOb2RlSWQgPT09IG5vZGUuaWRcbiAgICApO1xuXG4gICAgLy8gQ2hlY2sgaWYgdGhlIHRhcmdldCBub2RlcyBhcmUgc3RhZ2VzXG4gICAgY29uc3QgY29ubmVjdGVkU3RhZ2VOb2RlcyA9IG91dGdvaW5nQ29ubmVjdGlvbnNcbiAgICAgIC5tYXAoKGNvbm4pID0+IHRoaXMuc3RhdGUuZmluZE5vZGVCeUlkKGNvbm4udGFyZ2V0Tm9kZUlkKSlcbiAgICAgIC5maWx0ZXIoKG5vZGVJbmZvKSA9PiBub2RlSW5mbyAmJiBub2RlSW5mby5ub2RlLnR5cGUgPT09ICdzdGFnZScpO1xuXG4gICAgbm9kZS5oYXNNdWx0aXBsZUNvbm5lY3RlZFN0YWdlcyA9IGNvbm5lY3RlZFN0YWdlTm9kZXMubGVuZ3RoID4gMTtcbiAgICBub2RlLmhhc1BhcmFsbGVsU3RhZ2VzID0gY29ubmVjdGVkU3RhZ2VOb2Rlcy5ldmVyeShcbiAgICAgIChuZCkgPT4gbmQ/Lm5vZGUuc3RhZ2VEYXRhPy5Jc1BhcmFsbGVsXG4gICAgKTtcbiAgfVxuXG4gIG9uRWRpdFN3aW1sYW5lKFxuICAgIGV2ZW50OiBNb3VzZUV2ZW50LFxuICAgIHN3aW1sYW5lOiBTd2ltbGFuZUl0ZW0sXG4gICAgc3dpbWxhbmVJbmRleDogbnVtYmVyXG4gICk6IHZvaWQge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyAvLyBQcmV2ZW50IHRoZSBjYW52YXMgY2xpY2sgZXZlbnQgZnJvbSBmaXJpbmdcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnNvbGUubG9nKCdFZGl0IHN3aW1sYW5lIGJ1dHRvbiBjbGlja2VkIGZvciBzd2ltbGFuZTonLCBzd2ltbGFuZUluZGV4KTtcblxuICAgIC8vIEVtaXQgYSBzcGVjaWFsIGV2ZW50IGZvciBlZGl0aW5nIGEgc3dpbWxhbmVcbiAgICB0aGlzLmNsaWNrZWRQb3NpdGlvbi5lbWl0KHtcbiAgICAgIHg6IC0xLCAvLyBTcGVjaWFsIHZhbHVlIHRvIGluZGljYXRlIGVkaXQgbW9kZVxuICAgICAgeTogc3dpbWxhbmVJbmRleCxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIHNob3dTdGFydE5vZGVGb3JtUG9wdXAoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgLy8gICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAvLyAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gIC8vICAgLy8gSW1wbGVtZW50YXRpb24gd2lsbCBiZSBzaW1pbGFyIHRvIHRoZSBzdGFnZSBmb3JtIHBvcHVwXG4gIC8vICAgLy8gV2UnbGwgbmVlZCB0byBhZGQgVUkgZWxlbWVudHMgZm9yIHRoaXNcbiAgLy8gICBjb25zb2xlLmxvZygnU3RhcnQgbm9kZSBmb3JtIHBvcHVwIHJlcXVlc3RlZCcpO1xuXG4gIC8vICAgLy8gRm9yIG5vdywgdGhpcyBpcyBhIHBsYWNlaG9sZGVyXG4gIC8vICAgLy8gVGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiB3b3VsZCBsb2FkIGZvcm1zIGFuZCBhZGQgdGhlbSB0byB0aGUgd29ya2Zsb3dcbiAgLy8gfVxuXG4gIHRvZ2dsZVN0YXJ0Tm9kZUZvcm1Qb3B1cChcbiAgICBldmVudDogTW91c2VFdmVudCxcbiAgICBub2RlWDogbnVtYmVyLFxuICAgIG5vZGVZOiBudW1iZXIsXG4gICAgc3dpbWxhbmVJbmRleDogbnVtYmVyLFxuICAgIG5vZGU/OiBOb2RlXG4gICk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAvLyBTZXQgcG9wdXAgcG9zaXRpb24gLSBjb252ZXJ0IGNhbnZhcyBjb29yZGluYXRlcyB0byB2aWV3cG9ydCBjb29yZGluYXRlc1xuICAgIGNvbnN0IHN3aW1sYW5lT2Zmc2V0ID0gc3dpbWxhbmVJbmRleCAqIDI2MztcbiAgICBjb25zdCBjYW52YXNYID0gbm9kZVggLSAoIW5vZGUgPyAzMCA6IDApO1xuICAgIGNvbnN0IGNhbnZhc1kgPSBub2RlWSArIHN3aW1sYW5lT2Zmc2V0O1xuXG4gICAgY29uc3Qgdmlld3BvcnRQb3MgPSB0aGlzLmdldFZpZXdwb3J0UG9zaXRpb24oY2FudmFzWCwgY2FudmFzWSk7XG4gICAgdGhpcy5zdGFydE5vZGVGb3JtUG9wdXBYID0gdmlld3BvcnRQb3MueDtcbiAgICB0aGlzLnN0YXJ0Tm9kZUZvcm1Qb3B1cFkgPSB2aWV3cG9ydFBvcy55O1xuXG4gICAgLy8gSWYgd2UncmUgb3BlbmluZyB0aGUgcG9wdXAsIGxvYWQgZm9ybXNcbiAgICBpZiAoIXRoaXMuc2hvd1N0YXJ0Tm9kZUZvcm1Qb3B1cCkge1xuICAgICAgdGhpcy5pc0xvYWRpbmdTdGFydE5vZGVGb3JtcyA9IHRydWU7XG4gICAgICB0aGlzLmRhdGFTZXJ2aWNlXG4gICAgICAgIC5nZXRGb3JtcygpXG4gICAgICAgIC50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgIHRoaXMuc3RhcnROb2RlRm9ybXNMaXN0ID0gcmVzcG9uc2UuUmVzdWx0O1xuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nU3RhcnROb2RlRm9ybXMgPSBmYWxzZTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGxvYWRpbmcgZm9ybXM6JywgZXJyb3IpO1xuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nU3RhcnROb2RlRm9ybXMgPSBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUpIHtcbiAgICAgIHRoaXMuYWN0aXZlTm9kZUZvckZvcm1TZWxlY3Rpb24gPSBub2RlO1xuICAgICAgY29uc29sZS5sb2coJ0FjdGl2ZSBub2RlIGZvciBmb3JtIHNlbGVjdGlvbjonLCBub2RlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hY3RpdmVOb2RlRm9yRm9ybVNlbGVjdGlvbiA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5zaG93U3RhcnROb2RlRm9ybVBvcHVwID0gIXRoaXMuc2hvd1N0YXJ0Tm9kZUZvcm1Qb3B1cDtcbiAgfVxuXG4gIHNlbGVjdFN0YXJ0Tm9kZUZvcm0oZm9ybTogRm9ybSB8IG51bGwpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5hY3RpdmVOb2RlRm9yRm9ybVNlbGVjdGlvbikge1xuICAgICAgdGhpcy5zZWxlY3RGb3JtRm9yU3RhZ2UoZm9ybSwgdGhpcy5hY3RpdmVOb2RlRm9yRm9ybVNlbGVjdGlvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChmb3JtKSB7XG4gICAgICAgIHRoaXMuc3RhdGUuc2V0V29ya2Zsb3dGb3JtKGZvcm0uQ29kZSwgZm9ybS5OYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc3RhdGUuc2V0V29ya2Zsb3dGb3JtKG51bGwsIG51bGwpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENsb3NlIHRoZSBwb3B1cFxuICAgIHRoaXMuc2hvd1N0YXJ0Tm9kZUZvcm1Qb3B1cCA9IGZhbHNlO1xuICB9XG5cbiAgc2hvd1N1YmZsb3dTZWxlY3Rpb25Qb3B1cCh4OiBudW1iZXIsIHk6IG51bWJlciwgc3dpbWxhbmVJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgLy8gQ29udmVydCBjYW52YXMgY29vcmRpbmF0ZXMgdG8gdmlld3BvcnQgY29vcmRpbmF0ZXMgZm9yIHBvcHVwIHBvc2l0aW9uaW5nXG4gICAgY29uc3Qgdmlld3BvcnRQb3MgPSB0aGlzLmdldFZpZXdwb3J0UG9zaXRpb24oeCwgeSk7XG4gICAgdGhpcy5zdWJmbG93UG9wdXBYID0gdmlld3BvcnRQb3MueDtcbiAgICB0aGlzLnN1YmZsb3dQb3B1cFkgPSB2aWV3cG9ydFBvcy55O1xuICAgIHRoaXMucGVuZGluZ1N1YmZsb3dQb3NpdGlvbiA9IHsgc3dpbWxhbmVJbmRleCwgeCwgeSB9O1xuXG4gICAgLy8gU3RvcmUgY29ubmVjdGlvbiBkYXRhIGlmIHdlJ3JlIGNyZWF0aW5nIGZyb20gYSBjb25uZWN0aW9uXG4gICAgaWYgKHRoaXMuc3RhdGUuaXNDb25uZWN0aW9uRHJhZ2dpbmcoKSkge1xuICAgICAgLy8gU3RvcmUgdGhlIHNvdXJjZSBjb25uZWN0aW9uIGRhdGFcbiAgICAgIHRoaXMucGVuZGluZ0Nvbm5lY3Rpb25Tb3VyY2VQb2ludCA9XG4gICAgICAgIHRoaXMuc3RhdGUuZHJhZ2dpbmdDb25uZWN0aW9uRGF0YS5zb3VyY2VQb2ludCA/PyBudWxsO1xuICAgICAgdGhpcy5wZW5kaW5nQ29ubmVjdGlvblNvdXJjZVN3aW1sYW5lSW5kZXggPVxuICAgICAgICB0aGlzLnN0YXRlLmRyYWdnaW5nQ29ubmVjdGlvbkRhdGEuc291cmNlU3dpbWxhbmVJbmRleCA/PyBudWxsO1xuICAgICAgY29uc29sZS5sb2coJ1N0b3JlZCBjb25uZWN0aW9uIGRhdGEgZm9yIHN1YmZsb3c6Jywge1xuICAgICAgICBzb3VyY2VQb2ludDogdGhpcy5wZW5kaW5nQ29ubmVjdGlvblNvdXJjZVBvaW50LFxuICAgICAgICBzb3VyY2VTd2ltbGFuZUluZGV4OiB0aGlzLnBlbmRpbmdDb25uZWN0aW9uU291cmNlU3dpbWxhbmVJbmRleCxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIExvYWQgd29ya2Zsb3dzXG4gICAgdGhpcy5pc0xvYWRpbmdXb3JrZmxvd3MgPSB0cnVlO1xuICAgIHRoaXMuZGF0YVNlcnZpY2VcbiAgICAgIC5nZXRXb3JrZmxvd3MoKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIHRoaXMud29ya2Zsb3dzTGlzdCA9IHJlc3BvbnNlLlJlc3VsdDtcbiAgICAgICAgdGhpcy5pc0xvYWRpbmdXb3JrZmxvd3MgPSBmYWxzZTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGxvYWRpbmcgd29ya2Zsb3dzOicsIGVycm9yKTtcbiAgICAgICAgdGhpcy5pc0xvYWRpbmdXb3JrZmxvd3MgPSBmYWxzZTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5zaG93U3ViZmxvd1BvcHVwID0gdHJ1ZTtcbiAgfVxuXG4gIHNlbGVjdFN1YmZsb3dXb3JrZmxvdyh3b3JrZmxvdzogV29ya2Zsb3cpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZygnU2VsZWN0aW5nIHdvcmtmbG93IGZvciBzdWJmbG93OicsIHdvcmtmbG93Lk5hbWUpO1xuICAgIGNvbnNvbGUubG9nKCdQZW5kaW5nIGNvbm5lY3Rpb24gZGF0YTonLCB7XG4gICAgICBzb3VyY2VQb2ludDogdGhpcy5wZW5kaW5nQ29ubmVjdGlvblNvdXJjZVBvaW50LFxuICAgICAgc291cmNlU3dpbWxhbmVJbmRleDogdGhpcy5wZW5kaW5nQ29ubmVjdGlvblNvdXJjZVN3aW1sYW5lSW5kZXgsXG4gICAgICBwb3NpdGlvbjogdGhpcy5wZW5kaW5nU3ViZmxvd1Bvc2l0aW9uLFxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMucGVuZGluZ1N1YmZsb3dQb3NpdGlvbikge1xuICAgICAgY29uc3QgeyBzd2ltbGFuZUluZGV4LCB4LCB5IH0gPSB0aGlzLnBlbmRpbmdTdWJmbG93UG9zaXRpb247XG5cbiAgICAgIC8vIENyZWF0ZSB0aGUgc3ViZmxvdyBub2RlIHdpdGggdGhlIHNlbGVjdGVkIHdvcmtmbG93IGRhdGFcbiAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLnN0YXRlLmFkZE5vZGUoXG4gICAgICAgIHN3aW1sYW5lSW5kZXgsXG4gICAgICAgICdzdWJmbG93JyxcbiAgICAgICAgeCxcbiAgICAgICAgeSxcbiAgICAgICAgeyBOYW1lOiB3b3JrZmxvdy5OYW1lIH0sIC8vIEluaXRpYWxpemUgc3RhZ2UgbmFtZSBmcm9tIHdvcmtmbG93XG4gICAgICAgIHsgaWQ6IHdvcmtmbG93LkNvZGUsIG5hbWU6IHdvcmtmbG93Lk5hbWUgfVxuICAgICAgKTtcblxuICAgICAgY29uc29sZS5sb2coJ0NyZWF0ZWQgc3ViZmxvdyBub2RlOicsIG5vZGUpO1xuXG4gICAgICAvLyBJZiB0aGlzIHdhcyBjcmVhdGVkIGZyb20gYSBjb25uZWN0aW9uLCBjcmVhdGUgdGhlIGNvbm5lY3Rpb25cbiAgICAgIGlmIChub2RlICYmIHRoaXMucGVuZGluZ0Nvbm5lY3Rpb25Tb3VyY2VQb2ludCkge1xuICAgICAgICBjb25zb2xlLmxvZygnQ3JlYXRpbmcgY29ubmVjdGlvbiB0byBuZXcgc3ViZmxvdyBub2RlJyk7XG5cbiAgICAgICAgLy8gRmluZCBhIHN1aXRhYmxlIGNvbm5lY3Rpb24gcG9pbnQgb24gdGhlIG5ldyBub2RlXG4gICAgICAgIGlmIChub2RlLmNvbm5lY3Rpb25Qb2ludHMgJiYgbm9kZS5jb25uZWN0aW9uUG9pbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zdCBzb3VyY2VQb2ludCA9IHRoaXMucGVuZGluZ0Nvbm5lY3Rpb25Tb3VyY2VQb2ludDtcblxuICAgICAgICAgIC8vIEZpbmQgb3Bwb3NpbmcgdHlwZSBjb25uZWN0aW9uIHBvaW50XG4gICAgICAgICAgY29uc3Qgb3Bwb3NpbmdUeXBlID0ge1xuICAgICAgICAgICAgcmlnaHQ6ICdsZWZ0JyxcbiAgICAgICAgICAgIGxlZnQ6ICdyaWdodCcsXG4gICAgICAgICAgICB0b3A6ICdib3R0b20nLFxuICAgICAgICAgICAgYm90dG9tOiAndG9wJyxcbiAgICAgICAgICB9W3NvdXJjZVBvaW50LnR5cGVdIGFzICd0b3AnIHwgJ3JpZ2h0JyB8ICdib3R0b20nIHwgJ2xlZnQnO1xuXG4gICAgICAgICAgY29uc3QgdGFyZ2V0UG9pbnQgPSBub2RlLmNvbm5lY3Rpb25Qb2ludHMuZmluZChcbiAgICAgICAgICAgIChwKSA9PiBwLnR5cGUgPT09IG9wcG9zaW5nVHlwZVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAodGFyZ2V0UG9pbnQpIHtcbiAgICAgICAgICAgIC8vIENyZWF0ZSBjb25uZWN0aW9uXG4gICAgICAgICAgICBjb25zdCBjb25uZWN0aW9uID0ge1xuICAgICAgICAgICAgICBpZDogYGNvbm4tJHtEYXRlLm5vdygpfS0ke01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwMDApfWAsXG4gICAgICAgICAgICAgIHNvdXJjZU5vZGVJZDogc291cmNlUG9pbnQubm9kZUlkLFxuICAgICAgICAgICAgICB0YXJnZXROb2RlSWQ6IG5vZGUuaWQsXG4gICAgICAgICAgICAgIHNvdXJjZVBvaW50SWQ6IHNvdXJjZVBvaW50LmlkLFxuICAgICAgICAgICAgICB0YXJnZXRQb2ludElkOiB0YXJnZXRQb2ludC5pZCxcbiAgICAgICAgICAgICAgc291cmNlU3dpbWxhbmVJbmRleDogdGhpcy5wZW5kaW5nQ29ubmVjdGlvblNvdXJjZVN3aW1sYW5lSW5kZXghLFxuICAgICAgICAgICAgICB0YXJnZXRTd2ltbGFuZUluZGV4OiBzd2ltbGFuZUluZGV4LFxuICAgICAgICAgICAgICBsYWJlbDogJycsXG4gICAgICAgICAgICAgIGFjdGlvbjogbnVsbCxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIC8vIEFkZCBjb25uZWN0aW9uIGRpcmVjdGx5IHRvIHRoZSBzdGF0ZSdzIGNvbm5lY3Rpb25zIGFycmF5XG4gICAgICAgICAgICB0aGlzLnN0YXRlLmNvbm5lY3Rpb25zLnB1c2goY29ubmVjdGlvbik7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnQWRkZWQgY29ubmVjdGlvbiB0byBzdGF0ZTonLCBjb25uZWN0aW9uKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdDb25uZWN0aW9ucyBhZnRlciBhZGRpbmc6JywgdGhpcy5zdGF0ZS5jb25uZWN0aW9ucyk7XG4gICAgICAgICAgICB0aGlzLm9uQ29ubmVjdGlvbkNyZWF0ZWQoY29ubmVjdGlvbik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3RhdGUuZW5kQ29ubmVjdGlvbkRyYWcoKTtcbiAgICAgIH1cblxuICAgICAgLy8gUmVzZXQgc2VsZWN0aW9uIHRvb2wgaW4gcGFyZW50IGNvbXBvbmVudFxuICAgICAgdGhpcy5zdWJmbG93U2VsZWN0ZWQuZW1pdCgpO1xuICAgIH1cblxuICAgIC8vIENsZWFuIHVwXG4gICAgdGhpcy5zaG93U3ViZmxvd1BvcHVwID0gZmFsc2U7XG4gICAgdGhpcy5wZW5kaW5nU3ViZmxvd1Bvc2l0aW9uID0gbnVsbDtcbiAgICB0aGlzLnBlbmRpbmdDb25uZWN0aW9uU291cmNlUG9pbnQgPSBudWxsO1xuICAgIHRoaXMucGVuZGluZ0Nvbm5lY3Rpb25Tb3VyY2VTd2ltbGFuZUluZGV4ID0gbnVsbDtcbiAgfVxuXG4gIHNob3dEZWNpc2lvbkNvbmRpdGlvbnNQb3B1cChcbiAgICBldmVudDogTW91c2VFdmVudCxcbiAgICBub2RlOiBXRk5vZGUsXG4gICAgc3dpbWxhbmVJbmRleDogbnVtYmVyXG4gICk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAvLyBHZXQgdGhlIHBvc2l0aW9uIGZvciB0aGUgcG9wdXBcbiAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMuZ2V0TW91c2VQb3NpdGlvbihldmVudCk7XG5cbiAgICAvLyBDb252ZXJ0IGNhbnZhcyBjb29yZGluYXRlcyB0byB2aWV3cG9ydCBjb29yZGluYXRlcyBmb3IgcG9wdXAgcG9zaXRpb25pbmdcbiAgICBjb25zdCB2aWV3cG9ydFBvcyA9IHRoaXMuZ2V0Vmlld3BvcnRQb3NpdGlvbihwb3NpdGlvbi54LCBwb3NpdGlvbi55KTtcblxuICAgIC8vIEZpbmQgYWxsIGNvbm5lY3Rpb25zIGZyb20gdGhpcyBkZWNpc2lvbiBub2RlXG4gICAgY29uc3QgY29ubmVjdGlvbnMgPSB0aGlzLnN0YXRlLmNvbm5lY3Rpb25zLmZpbHRlcihcbiAgICAgIChjb25uKSA9PiBjb25uLnNvdXJjZU5vZGVJZCA9PT0gbm9kZS5pZFxuICAgICk7XG5cbiAgICBpZiAoY29ubmVjdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAvLyBObyBjb25uZWN0aW9ucyB0byBzaG93XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gU2hvdyB0aGUgZGVjaXNpb24gY29uZGl0aW9ucyBwb3B1cFxuICAgIHRoaXMuYWN0aXZlRGVjaXNpb25Ob2RlSWQgPSBub2RlLmlkO1xuICAgIHRoaXMuZGVjaXNpb25Db25kaXRpb25Qb3B1cFggPSB2aWV3cG9ydFBvcy54O1xuICAgIHRoaXMuZGVjaXNpb25Db25kaXRpb25Qb3B1cFkgPSB2aWV3cG9ydFBvcy55O1xuXG4gICAgLy8gU2V0IHRoZSBjb3JyZWN0IHBvcHVwIHZpc2liaWxpdHkgZmxhZyAtIHRoaXMgaXMgbGlrZWx5IHRoZSBpc3N1ZVxuICAgIHRoaXMuc2hvd0RlY2lzaW9uQ29uZGl0aW9uRGlhbG9nID0gdHJ1ZTtcblxuICAgIC8vIGNvbnNvbGUubG9nKCdTaG93aW5nIGRlY2lzaW9uIHBvcHVwOicsIHtcbiAgICAvLyAgIHk6IGdsb2JhbFksXG4gICAgLy8gICBub2RlSWQ6IG5vZGUuaWQsXG4gICAgLy8gICBpc1Zpc2libGU6IHRoaXMuc2hvd0RlY2lzaW9uQ29uZGl0aW9uRGlhbG9nLFxuICAgIC8vIH0pO1xuICB9XG5cbiAgZW5zdXJlU3dpbWxhbmVJblZpZXcoc3dpbWxhbmVJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgLy8gRW5zdXJlIHdlIGhhdmUgZW5vdWdoIHN3aW1sYW5lcyB2aXNpYmxlXG4gICAgY29uc3QgcmVxdWlyZWRIZWlnaHQgPSAoc3dpbWxhbmVJbmRleCArIDEpICogdGhpcy5zd2ltbGFuZUhlaWdodDtcbiAgICBpZiAodGhpcy5jYW52YXNIZWlnaHQgPCByZXF1aXJlZEhlaWdodCkge1xuICAgICAgdGhpcy5jYW52YXNIZWlnaHQgPSByZXF1aXJlZEhlaWdodDtcbiAgICB9XG4gIH1cblxuICBnZXRMYWJlbFBvc2l0aW9uKGNvbm5lY3Rpb246IENvbm5lY3Rpb24pOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXRoRGF0YSA9IHRoaXMuc3RhdGUuZ2V0Q29ubmVjdGlvbkRhdGEoY29ubmVjdGlvbik7XG4gICAgICBpZiAoIXBhdGhEYXRhKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ05vIHBhdGggZGF0YSBmb3IgY29ubmVjdGlvbjonLCBjb25uZWN0aW9uKTtcbiAgICAgICAgcmV0dXJuIHsgeDogMCwgeTogMCB9O1xuICAgICAgfVxuXG4gICAgICBjb25zdCB7IHN0YXJ0WCwgc3RhcnRZLCBlbmRYLCBlbmRZIH0gPSBwYXRoRGF0YTtcblxuICAgICAgY29uc3Qgc291cmNlTm9kZUluZm8gPSB0aGlzLnN0YXRlLmZpbmROb2RlQnlJZChjb25uZWN0aW9uLnNvdXJjZU5vZGVJZCk7XG4gICAgICBpZiAoIXNvdXJjZU5vZGVJbmZvKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1NvdXJjZSBub2RlIG5vdCBmb3VuZCBmb3IgY29ubmVjdGlvbjonLCBjb25uZWN0aW9uKTtcbiAgICAgICAgcmV0dXJuIHsgeDogMCwgeTogMCB9O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzb3VyY2VOb2RlID0gc291cmNlTm9kZUluZm8ubm9kZTtcbiAgICAgIGNvbnN0IHNvdXJjZVBvaW50ID0gc291cmNlTm9kZS5jb25uZWN0aW9uUG9pbnRzPy5maW5kKFxuICAgICAgICAocCkgPT4gcC5pZCA9PT0gY29ubmVjdGlvbi5zb3VyY2VQb2ludElkXG4gICAgICApO1xuXG4gICAgICBpZiAoIXNvdXJjZVBvaW50KSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1NvdXJjZSBwb2ludCBub3QgZm91bmQgZm9yIGNvbm5lY3Rpb246JywgY29ubmVjdGlvbik7XG4gICAgICAgIHJldHVybiB7IHg6IDAsIHk6IDAgfTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2FsY3VsYXRlIG1pZHBvaW50IGJhc2VkIG9uIHRoZSBjb25uZWN0aW9uIHBvaW50IHR5cGVcbiAgICAgIGlmIChzb3VyY2VQb2ludC50eXBlID09PSAnbGVmdCcgfHwgc291cmNlUG9pbnQudHlwZSA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICBjb25zdCBob3Jpem9udGFsRGlzdCA9IGVuZFggLSBzdGFydFg7XG5cbiAgICAgICAgaWYgKE1hdGguYWJzKGhvcml6b250YWxEaXN0KSA8IDMwKSB7XG4gICAgICAgICAgLy8gRm9yIHNob3J0IGhvcml6b250YWwgY29ubmVjdGlvbnNcbiAgICAgICAgICBjb25zdCBtaWRZID0gKHN0YXJ0WSArIGVuZFkpIC8gMjtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeDogc3RhcnRYICsgKGVuZFggLSBzdGFydFgpIC8gMixcbiAgICAgICAgICAgIHk6IG1pZFksXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBGb3IgcmVndWxhciBjb25uZWN0aW9ucyBzdGFydGluZyBob3Jpem9udGFsbHlcbiAgICAgICAgICBjb25zdCBtaWRYID0gc3RhcnRYICsgaG9yaXpvbnRhbERpc3QgLyAyO1xuICAgICAgICAgIGNvbnN0IG1pZFkgPSBlbmRZO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB4OiBtaWRYLFxuICAgICAgICAgICAgeTogKHN0YXJ0WSArIGVuZFkpIC8gMixcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyAndG9wJyBvciAnYm90dG9tJ1xuICAgICAgICBjb25zdCB2ZXJ0aWNhbERpc3QgPSBlbmRZIC0gc3RhcnRZO1xuXG4gICAgICAgIGlmIChNYXRoLmFicyh2ZXJ0aWNhbERpc3QpIDwgMzApIHtcbiAgICAgICAgICAvLyBGb3Igc2hvcnQgdmVydGljYWwgY29ubmVjdGlvbnNcbiAgICAgICAgICBjb25zdCBtaWRYID0gKHN0YXJ0WCArIGVuZFgpIC8gMjtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeDogbWlkWCxcbiAgICAgICAgICAgIHk6IHN0YXJ0WSArIChlbmRZIC0gc3RhcnRZKSAvIDIsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBGb3IgcmVndWxhciBjb25uZWN0aW9ucyBzdGFydGluZyB2ZXJ0aWNhbGx5XG4gICAgICAgICAgY29uc3QgbWlkWCA9IGVuZFg7XG4gICAgICAgICAgY29uc3QgbWlkWSA9IHN0YXJ0WSArIHZlcnRpY2FsRGlzdCAvIDI7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHg6IChzdGFydFggKyBlbmRYKSAvIDIsXG4gICAgICAgICAgICB5OiBtaWRZLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgJ0Vycm9yIGNhbGN1bGF0aW5nIGxhYmVsIHBvc2l0aW9uIGZvciBjb25uZWN0aW9uOicsXG4gICAgICAgIGNvbm5lY3Rpb24sXG4gICAgICAgIGVycm9yXG4gICAgICApO1xuICAgICAgcmV0dXJuIHsgeDogMCwgeTogMCB9O1xuICAgIH1cbiAgfVxuXG4gIHNhdmVDb25uZWN0aW9uTGFiZWwoY29ubmVjdGlvbjogQ29ubmVjdGlvbiwgbGFiZWw6IHN0cmluZykge1xuICAgIC8vIFVwZGF0ZSB0aGUgY29ubmVjdGlvbiBsYWJlbCBpbiB0aGUgc3RhdGVcbiAgICB0aGlzLnN0YXRlLmNvbm5lY3Rpb25zID0gdGhpcy5zdGF0ZS5jb25uZWN0aW9ucy5tYXAoKGNvbm4pID0+IHtcbiAgICAgIGlmIChjb25uLmlkID09PSBjb25uZWN0aW9uLmlkKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uY29ubixcbiAgICAgICAgICBsYWJlbDogbGFiZWwsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gY29ubjtcbiAgICB9KTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNhbnZhcy1jb250YWluZXJcIj5cbiAgPHN2ZyAjY2FudmFzIFthdHRyLndpZHRoXT1cImNhbnZhc1dpZHRoXCIgW2F0dHIuaGVpZ2h0XT1cImNhbnZhc0hlaWdodFwiIGNsYXNzPVwiZGVzaWduZXItY2FudmFzXCJcbiAgICAoY2xpY2spPVwib25DYW52YXNDbGljaygkZXZlbnQpXCI+XG4gICAgPGRlZnM+XG4gICAgICA8IS0tIEdyaWQgcGF0dGVybiBkZWZpbml0aW9uIC0tPlxuXG4gICAgICA8cGF0dGVybiBpZD1cImdyaWRcIiBbYXR0ci53aWR0aF09XCJncmlkU2l6ZVwiIFthdHRyLmhlaWdodF09XCJncmlkU2l6ZVwiIHBhdHRlcm5Vbml0cz1cInVzZXJTcGFjZU9uVXNlXCI+XG4gICAgICAgIDxwYXRoIGQ9XCJNIDIwIDAgTCAwIDAgMCAyMFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiI2UyZThmMFwiIHN0cm9rZS13aWR0aD1cIjAuNVwiIC8+XG4gICAgICA8L3BhdHRlcm4+XG5cbiAgICAgIDwhLS0gQXJyb3cgaGVhZCBtYXJrZXIgZGVmaW5pdGlvbiAtLT5cbiAgICAgIDxtYXJrZXIgaWQ9XCJhcnJvd2hlYWRcIiBtYXJrZXJXaWR0aD1cIjEwXCIgbWFya2VySGVpZ2h0PVwiN1wiIHJlZlg9XCI5XCIgcmVmWT1cIjMuNVwiIG9yaWVudD1cImF1dG9cIj5cbiAgICAgICAgPHBvbHlnb24gcG9pbnRzPVwiMCAwLCAxMCAzLjUsIDAgN1wiIGZpbGw9XCIjRDM2Q0ZGXCIgLz5cbiAgICAgIDwvbWFya2VyPlxuXG4gICAgICA8IS0tIENvbm5lY3Rpb24gcG9pbnQ6IG91dGVyIHRyYW5zcGFyZW50IHJpbmcgZXhwYW5kcyB0aGUgaGl0IHRhcmdldCBzbyBhXG4gICAgICAgICAgIGNvbm5lY3Rpb24gZHJhZyBjYW4gYmUgc3RhcnRlZCB3aXRob3V0IHBpeGVsLXByZWNpc2UgYWltLiBUaGUgdmlzaWJsZVxuICAgICAgICAgICBjaXJjbGUgc3RheXMgYXQgcj01LiBUaGUgaGl0IHJpbmcgZXh0ZW5kcyBpbndhcmQgdXAgdG8gdGhlIG5vZGUnc1xuICAgICAgICAgICBkcmFnLWhhbmRsZSBlZGdlIHNvIGNsaWNrcyBuZWFyIHRoZSBlZGdlIGZhbGwgdG8gdGhlIGNvbm5lY3Rpb24gcG9pbnRcbiAgICAgICAgICAgKHJlbmRlcmVkIHRvcG1vc3QpIHJhdGhlciB0aGFuIHRvIHRoZSBkcmFnIGhhbmRsZSBiZW5lYXRoLiAtLT5cbiAgICAgIDxnIGlkPVwiY29ubmVjdGlvbi1wb2ludC10ZW1wbGF0ZVwiPlxuICAgICAgICA8Y2lyY2xlIHI9XCIxMlwiIGZpbGw9XCJ0cmFuc3BhcmVudFwiIC8+XG4gICAgICAgIDxjaXJjbGUgcj1cIjVcIiBmaWxsPVwiI0QzNkNGRlwiIHN0cm9rZT1cIiNGRkZGRkZcIiBzdHJva2Utd2lkdGg9XCIxXCIgLz5cbiAgICAgIDwvZz5cblxuICAgICAgPCEtLSBEYXNoZWQgbGluZSBzdHlsZSBmb3IgY29ubmVjdGlvbiBwcmV2aWV3IC0tPlxuICAgICAgPHBhdHRlcm4gaWQ9XCJkYXNoZWQtbGluZVwiIHdpZHRoPVwiMTBcIiBoZWlnaHQ9XCIxMFwiIHBhdHRlcm5Vbml0cz1cInVzZXJTcGFjZU9uVXNlXCI+XG4gICAgICAgIDxsaW5lIHgxPVwiMFwiIHkxPVwiNVwiIHgyPVwiMTBcIiB5Mj1cIjVcIiBzdHJva2U9XCIjRDM2Q0ZGXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1kYXNoYXJyYXk9XCI1LDVcIiAvPlxuICAgICAgPC9wYXR0ZXJuPlxuXG4gICAgICBAZm9yIChzd2ltbGFuZSBvZiBzdGF0ZS5zd2ltbGFuZXM7IHRyYWNrIHN3aW1sYW5lLm9yZGVyKSB7XG4gICAgICA8Y2xpcFBhdGggW2F0dHIuaWRdPVwiJ3N3aW1sYW5lLWNsaXAtJyArIHN3aW1sYW5lLm9yZGVyXCI+XG4gICAgICAgIDxyZWN0IHg9XCIwXCIgeT1cIjBcIiBbYXR0ci53aWR0aF09XCJjYW52YXNXaWR0aFwiIGhlaWdodD1cIjI2M1wiIC8+XG4gICAgICA8L2NsaXBQYXRoPlxuICAgICAgfVxuICAgIDwvZGVmcz5cblxuICAgIDwhLS0gQmFja2dyb3VuZCBncmlkIC0tPlxuICAgIDxyZWN0IHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjEwMCVcIiBmaWxsPVwidXJsKCNncmlkKVwiIC8+XG5cbiAgICA8IS0tIERpc3BsYXkgYSBtZXNzYWdlIHdoZW4gbm8gc3dpbWxhbmVzIGV4aXN0IC0tPlxuICAgIEBpZiAoc3RhdGUuc3dpbWxhbmVzLmxlbmd0aCA9PT0gMCkge1xuICAgIDx0ZXh0IHg9XCI1MCVcIiB5PVwiNTAlXCIgZm9udC1mYW1pbHk9XCJzYW5zLXNlcmlmXCIgZm9udC1zaXplPVwiMTZcIiBmaWxsPVwiIzk0YTNiOFwiIHRleHQtYW5jaG9yPVwibWlkZGxlXCI+XG4gICAgICBTZWxlY3QgdGhlIFN3aW1sYW5lIHRvb2wgYW5kIGNsaWNrIG9uIHRoZSBjYW52YXMgdG8gYWRkIGEgc3dpbWxhbmVcbiAgICA8L3RleHQ+XG4gICAgfVxuXG4gICAgPCEtLSBUaGlzIGlzIHdoZXJlIHdvcmtmbG93IGVsZW1lbnRzIHdpbGwgYmUgYWRkZWQgbGF0ZXIgLS0+XG4gICAgQGZvciAoc3dpbWxhbmUgb2Ygc3RhdGUuc3dpbWxhbmVzOyB0cmFjayBzd2ltbGFuZS5vcmRlcikge1xuICAgIDwhLS0gPGdcbiAgICAgIFthdHRyLnRyYW5zZm9ybV09XCIndHJhbnNsYXRlKDAsJyArIHN3aW1sYW5lLm9yZGVyICogMjYzICsgJyknXCJcbiAgICAgIFthdHRyLmNsaXAtcGF0aF09XCIndXJsKCNzd2ltbGFuZS1jbGlwLScgKyBzd2ltbGFuZS5vcmRlciArICcpJ1wiXG4gICAgPlxuICAgICAgPHJlY3RcbiAgICAgICAgeD1cIjBcIlxuICAgICAgICB5PVwiMFwiXG4gICAgICAgIFthdHRyLndpZHRoXT1cImNhbnZhc1dpZHRoXCJcbiAgICAgICAgW2F0dHIuaGVpZ2h0XT1cIjI2M1wiXG4gICAgICAgIGZpbGw9XCIjZmZmZmZmXCJcbiAgICAgICAgc3Ryb2tlPVwiI2UyZThmMFwiXG4gICAgICAgIHN0cm9rZS13aWR0aD1cIjFcIlxuICAgICAgPjwvcmVjdD5cblxuICAgICAgPHJlY3RcbiAgICAgICAgeD1cIjBcIlxuICAgICAgICB5PVwiMFwiXG4gICAgICAgIFthdHRyLndpZHRoXT1cImNhbnZhc1dpZHRoXCJcbiAgICAgICAgaGVpZ2h0PVwiNDBcIlxuICAgICAgICBmaWxsPVwiI2Y4ZmFmY1wiXG4gICAgICAgIHN0cm9rZT1cIiNlMmU4ZjBcIlxuICAgICAgICBzdHJva2Utd2lkdGg9XCIxXCJcbiAgICAgID48L3JlY3Q+XG5cbiAgICAgIDx0ZXh0XG4gICAgICAgIHg9XCIyMFwiXG4gICAgICAgIHk9XCIyNVwiXG4gICAgICAgIGZvbnQtZmFtaWx5PVwic2Fucy1zZXJpZlwiXG4gICAgICAgIGZvbnQtc2l6ZT1cIjE0XCJcbiAgICAgICAgZmlsbD1cIiMzMzMzMzNcIlxuICAgICAgICBmb250LXdlaWdodD1cImJvbGRcIlxuICAgICAgPlxuICAgICAgICB7eyBzd2ltbGFuZS5sYWJlbCB9fVxuICAgICAgPC90ZXh0PlxuXG4gICAgICA8Z1xuICAgICAgICBjbGFzcz1cImVkaXQtc3dpbWxhbmUtYnV0dG9uXCJcbiAgICAgICAgW2F0dHIudHJhbnNmb3JtXT1cIid0cmFuc2xhdGUoMTAwLCAyMCknXCJcbiAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgIG9uRWRpdFN3aW1sYW5lKCRldmVudCwgc3dpbWxhbmUsIHN3aW1sYW5lLm9yZGVyKTtcbiAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgXCJcbiAgICAgID5cbiAgICAgICAgPHJlY3RcbiAgICAgICAgICB4PVwiLTVcIlxuICAgICAgICAgIHk9XCItMTVcIlxuICAgICAgICAgIHdpZHRoPVwiNDBcIlxuICAgICAgICAgIGhlaWdodD1cIjIwXCJcbiAgICAgICAgICBmaWxsPVwiI2YzZThmZlwiXG4gICAgICAgICAgcng9XCIzXCJcbiAgICAgICAgICByeT1cIjNcIlxuICAgICAgICAgIHN0cm9rZT1cIiNkOGI0ZmVcIlxuICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjFcIlxuICAgICAgICA+PC9yZWN0PlxuICAgICAgICA8dGV4dFxuICAgICAgICAgIHg9XCIxNVwiXG4gICAgICAgICAgeT1cIjBcIlxuICAgICAgICAgIGZvbnQtZmFtaWx5PVwic2Fucy1zZXJpZlwiXG4gICAgICAgICAgZm9udC1zaXplPVwiMTJcIlxuICAgICAgICAgIGZpbGw9XCIjN2UyMmNlXCJcbiAgICAgICAgICB0ZXh0LWFuY2hvcj1cIm1pZGRsZVwiXG4gICAgICAgID5cbiAgICAgICAgICBFZGl0XG4gICAgICAgIDwvdGV4dD5cbiAgICAgIDwvZz5cblxuICAgICAgPGcgW2F0dHIudHJhbnNmb3JtXT1cIid0cmFuc2xhdGUoMjAwLCAyMCknXCI+XG4gICAgICAgIEBmb3IgKHRhZyBvZiBzd2ltbGFuZS50YWdzLnNsaWNlKDAsIDMpOyB0cmFjayB0YWcuTmFtZTsgbGV0IGkgPSAkaW5kZXgpXG4gICAgICAgIHtcbiAgICAgICAgPHRleHRcbiAgICAgICAgICBbYXR0ci54XT1cImkgKiAxMDBcIlxuICAgICAgICAgIHk9XCI1XCJcbiAgICAgICAgICBmb250LWZhbWlseT1cInNhbnMtc2VyaWZcIlxuICAgICAgICAgIGZvbnQtc2l6ZT1cIjEyXCJcbiAgICAgICAgICBmaWxsPVwiIzY2NjY2NlwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyB0YWcuTmFtZSB9fVxuICAgICAgICA8L3RleHQ+XG4gICAgICAgIH0gQGlmIChzd2ltbGFuZS50YWdzLmxlbmd0aCA+IDMpIHtcbiAgICAgICAgPHRleHRcbiAgICAgICAgICBbYXR0ci54XT1cIjMgKiAxMDAgKyAxMFwiXG4gICAgICAgICAgeT1cIjVcIlxuICAgICAgICAgIGZvbnQtZmFtaWx5PVwic2Fucy1zZXJpZlwiXG4gICAgICAgICAgZm9udC1zaXplPVwiMTJcIlxuICAgICAgICAgIGZpbGw9XCIjNjY2NjY2XCJcbiAgICAgICAgPlxuICAgICAgICAgICt7eyBzd2ltbGFuZS50YWdzLmxlbmd0aCAtIDMgfX0gbW9yZVxuICAgICAgICA8L3RleHQ+XG4gICAgICAgIH1cbiAgICAgIDwvZz5cbiAgICA8L2c+IC0tPlxuXG4gICAgPGcgW2F0dHIudHJhbnNmb3JtXT1cIid0cmFuc2xhdGUoMCwnICsgc3dpbWxhbmUub3JkZXIgKiAyNjMgKyAnKSdcIj5cbiAgICAgIDwhLS0gU3dpbWxhbmUgY29udGFpbmVyIC0gcmVtb3ZlIHN0cm9rZSB0byBtYWtlIGl0IHB1cmVseSBiYWNrZ3JvdW5kIC0tPlxuICAgICAgPHJlY3QgeD1cIjBcIiB5PVwiMFwiIFthdHRyLndpZHRoXT1cImNhbnZhc1dpZHRoXCIgW2F0dHIuaGVpZ2h0XT1cIjI2M1wiXG4gICAgICAgIFthdHRyLmZpbGxdPVwic3dpbWxhbmUub3JkZXIgJSAyID09PSAwID8gJyNGQ0YzRkYnIDogJyNFQ0ZGRjUnXCIgc3Ryb2tlPVwibm9uZVwiPjwvcmVjdD5cblxuICAgICAgPCEtLSBWZXJ0aWNhbCBzd2ltbGFuZSBsYWJlbCBvbiB0aGUgbGVmdCAtLT5cbiAgICAgIDxnIGNsYXNzPVwic3dpbWxhbmUtbGFiZWxcIj5cbiAgICAgICAgPCEtLSBQdXJwbGUgYmFja2dyb3VuZCBmb3IgdGhlIGxhYmVsIC0tPlxuICAgICAgICA8cmVjdCB4PVwiMC41XCIgeT1cIjAuNVwiIHdpZHRoPVwiNDNcIiBoZWlnaHQ9XCIyMTVcIiByeD1cIjEwLjVcIiBmaWxsPVwid2hpdGVcIiBzdHJva2U9XCIjRDM2Q0ZGXCI+PC9yZWN0PlxuXG4gICAgICAgIDwhLS0gUGx1cyBidXR0b24gYXQgdGhlIHRvcCAtLT5cbiAgICAgICAgPGcgKGNsaWNrKT1cIlxuICAgICAgICAgICAgb25FZGl0U3dpbWxhbmUoJGV2ZW50LCBzd2ltbGFuZSwgc3dpbWxhbmUub3JkZXIpO1xuICAgICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgXCI+XG4gICAgICAgICAgPHJlY3QgeD1cIjEyLjVcIiB5PVwiMTBcIiB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMThcIiBmaWxsPVwidHJhbnNwYXJlbnRcIiBzdHlsZT1cImN1cnNvcjogcG9pbnRlclwiPjwvcmVjdD5cblxuICAgICAgICAgIDxwYXRoIGQ9XCJNMjIuNTIgMTIuMTc0VjE3LjA4SDI3LjQ3VjE4LjUxSDIyLjUyVjIzLjM5NEgyMS4yVjE4LjUxSDE2LjI1VjE3LjA4SDIxLjJWMTIuMTc0SDIyLjUyWlwiXG4gICAgICAgICAgICBmaWxsPVwiIzAwMDBGRlwiIGNsYXNzPVwicGx1cy1pY29uXCIgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXJcIj48L3BhdGg+XG4gICAgICAgIDwvZz5cblxuICAgICAgICA8IS0tIFN3aW1sYW5lIGxhYmVsIC0tPlxuICAgICAgICA8dGV4dCB4PVwiMjJcIiB5PVwiMTA2XCIgZm9udC1mYW1pbHk9XCJzYW5zLXNlcmlmXCIgZm9udC1zaXplPVwiMTRcIiBmaWxsPVwiIzMzMzMzM1wiIHRleHQtYW5jaG9yPVwibWlkZGxlXCJcbiAgICAgICAgICB0cmFuc2Zvcm09XCJyb3RhdGUoLTkwLCAyMiwgMTAwKVwiPlxuICAgICAgICAgIHt7XG4gICAgICAgICAgc3dpbWxhbmUubGFiZWwubGVuZ3RoID4gMTJcbiAgICAgICAgICA/IHN3aW1sYW5lLmxhYmVsLnN1YnN0cmluZygwLCAxMCkgKyBcIi4uLlwiXG4gICAgICAgICAgOiBzd2ltbGFuZS5sYWJlbFxuICAgICAgICAgIH19XG4gICAgICAgIDwvdGV4dD5cblxuICAgICAgICA8IS0tIFRhZyBjb3VudCBpbmRpY2F0b3IgYXQgdGhlIGJvdHRvbSAtLT5cbiAgICAgICAgPHJlY3QgeD1cIjExLjVcIiB5PVwiMTg3XCIgd2lkdGg9XCIyMVwiIGhlaWdodD1cIjE5XCIgcng9XCI5LjVcIiBmaWxsPVwiIzlFOUU5RVwiPjwvcmVjdD5cbiAgICAgICAgPHRleHQgeD1cIjI0XCIgeT1cIjIwNlwiIGZvbnQtZmFtaWx5PVwic2Fucy1zZXJpZlwiIGZvbnQtc2l6ZT1cIjEyXCIgZmlsbD1cImJsYWNrXCIgdGV4dC1hbmNob3I9XCJtaWRkbGVcIlxuICAgICAgICAgIHRyYW5zZm9ybT1cInJvdGF0ZSgtOTAsIDIyLCAyMDApXCI+XG4gICAgICAgICAge3sgc3dpbWxhbmUudGFncy5sZW5ndGggfX1cbiAgICAgICAgPC90ZXh0PlxuICAgICAgPC9nPlxuICAgIDwvZz5cblxuICAgIH1cblxuICAgIDwhLS0gTm9kZXMgLS0+XG4gICAgQGZvciAoc3dpbWxhbmUgb2Ygc3RhdGUuc3dpbWxhbmVzOyB0cmFjayBzd2ltbGFuZS5vcmRlcikge1xuICAgIDwhLS0gUmVuZGVyIG5vZGVzIGluIHRoaXMgc3dpbWxhbmUgLS0+XG4gICAgQGZvciAobm9kZSBvZiBzd2ltbGFuZS5ub2RlczsgdHJhY2sgbm9kZS5pZCkge1xuICAgIDxnIGNsYXNzPVwibm9kZS1lbGVtZW50XCIgW2F0dHIudHJhbnNmb3JtXT1cIlxuICAgICAgICAndHJhbnNsYXRlKCcgKyBub2RlLnggKyAnLCcgKyAobm9kZS55ICsgc3dpbWxhbmUub3JkZXIgKiAyNjMpICsgJyknXCJcbiAgICAgIChtb3VzZWVudGVyKT1cInNob3dDb25uZWN0aW9uUG9pbnRzKG5vZGUuaWQsIHN3aW1sYW5lLm9yZGVyKVwiXG4gICAgICAobW91c2VsZWF2ZSk9XCJoaWRlQ29ubmVjdGlvblBvaW50cyhub2RlLmlkKVwiPlxuICAgICAgPCEtLSBTdGFydCBub2RlIGluZGljYXRvciAoY2lyY2xlIGFuZCBhcnJvdykgZm9yIHRoZSBmaXJzdCBub2RlIC0tPlxuICAgICAgQGlmIChub2RlLmlzU3RhcnROb2RlKSB7XG4gICAgICA8IS0tIENpcmNsZSAtLT5cbiAgICAgIDxjaXJjbGUgY3g9XCItNTBcIiBjeT1cIjUwXCIgcj1cIjMwXCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjRDM2Q0ZGXCIgc3Ryb2tlLXdpZHRoPVwiMVwiPjwvY2lyY2xlPlxuICAgICAgPCEtLSBGb3JtIGljb24gZm9yIHN0YXJ0IG5vZGUgLS0+XG4gICAgICA8c3ZnOmcgKGNsaWNrKT1cIlxuICAgICAgICAgIHRvZ2dsZVN0YXJ0Tm9kZUZvcm1Qb3B1cCgkZXZlbnQsIG5vZGUueCwgbm9kZS55LCBzd2ltbGFuZS5vcmRlcilcbiAgICAgICAgXCIgY2xhc3M9XCJzdGFnZS1pY29uXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKC00NSwgNDIpXCIgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXI7IHBvaW50ZXItZXZlbnRzOiBhbGxcIj5cbiAgICAgICAgPCEtLSBUcmFuc3BhcmVudCByZWN0YW5nbGUgdG8gY2FwdHVyZSBjbGlja3MgLS0+XG4gICAgICAgIDxzdmc6cmVjdCB4PVwiLTJcIiB5PVwiLTJcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiBmaWxsPVwidHJhbnNwYXJlbnRcIiBzdHlsZT1cImN1cnNvcjogcG9pbnRlclwiIC8+XG4gICAgICAgIDxzdmc6cGF0aFxuICAgICAgICAgIGQ9XCJNMTYuNSAyMC40NzVWMTcuNDc1SDEzLjVWMTYuNDc1SDE2LjVWMTMuNDc1SDE3LjVWMTYuNDc1SDIwLjVWMTcuNDc1SDE3LjVWMjAuNDc1SDE2LjVaTTMuNSAxNy41VjE2LjVINC41VjE3LjVIMy41Wk02LjUgMTcuNVYxNi41SDExLjUxN0MxMS41MDU3IDE2LjY3NjcgMTEuNTA0MyAxNi44NDUgMTEuNTEzIDE3LjAwNUMxMS41MjEgMTcuMTY1IDExLjUzMSAxNy4zMyAxMS41NDMgMTcuNUg2LjVaTTMuNSAxMy41VjEyLjVINC41VjEzLjVIMy41Wk02LjUgMTMuNVYxMi41SDEzLjgwNEMxMy42MTI3IDEyLjYzODcgMTMuNDMzMyAxMi43OTEzIDEzLjI2NiAxMi45NThDMTMuMDk5MyAxMy4xMjQ3IDEyLjkzNzcgMTMuMzA1MyAxMi43ODEgMTMuNUg2LjVaTTMuNSA5LjVWOC41SDQuNVY5LjVIMy41Wk02LjUgOS41VjguNUgxOC41VjkuNUg2LjVaTTMuNSA1LjVWNC41SDQuNVY1LjVIMy41Wk02LjUgNS41VjQuNUgxOC41VjUuNUg2LjVaXCJcbiAgICAgICAgICBbYXR0ci5maWxsXT1cInN0YXRlLndvcmtmbG93Rm9ybUlkID8gJyNEMzZDRkYnIDogJ2JsYWNrJ1wiIHRyYW5zZm9ybT1cInNjYWxlKDAuNylcIiAvPlxuICAgICAgPC9zdmc6Zz5cbiAgICAgIDwhLS0gQXJyb3cgZnJvbSBjaXJjbGUgdG8gbm9kZSAtLT5cbiAgICAgIDxwYXRoIGQ9XCJNIC0yMCA1MCBMIDAgNTBcIiBzdHJva2U9XCIjRDM2Q0ZGXCIgc3Ryb2tlLXdpZHRoPVwiMVwiIG1hcmtlci1lbmQ9XCJ1cmwoI2Fycm93aGVhZClcIj48L3BhdGg+XG4gICAgICB9XG5cbiAgICAgIDwhLS0gRXhpdCBwb2ludCBpbmRpY2F0b3IgKGNpcmNsZSBhbmQgYXJyb3cpIC0tPlxuICAgICAgQGlmIChub2RlLnN0YWdlRGF0YT8uSXNFeGl0UG9pbnQpIHtcbiAgICAgIDwhLS0gQXJyb3cgZnJvbSBub2RlIHRvIGNpcmNsZSAtLT5cbiAgICAgIDxwYXRoIFthdHRyLmRdPVwiJ00gJyArIG5vZGUud2lkdGggKyAnIDUwIEwgJyArIChub2RlLndpZHRoICsgMjApICsgJyA1MCdcIiBzdHJva2U9XCIjRDM2Q0ZGXCIgc3Ryb2tlLXdpZHRoPVwiMVwiXG4gICAgICAgIG1hcmtlci1lbmQ9XCJ1cmwoI2Fycm93aGVhZClcIj48L3BhdGg+XG4gICAgICA8IS0tIENpcmNsZSAtLT5cbiAgICAgIDxjaXJjbGUgW2F0dHIuY3hdPVwibm9kZS53aWR0aCArIDUwXCIgY3k9XCI1MFwiIHI9XCIzMFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiI0QzNkNGRlwiIHN0cm9rZS13aWR0aD1cIjJcIj48L2NpcmNsZT5cbiAgICAgIH1cblxuICAgICAgPCEtLSBJbm5lciBkcmFnLWhhbmRsZTogaW5zZXQgMTJweCBzbyB0aGUgbm9kZSBlZGdlIHJpbmcgc3RheXMgZHJhZy1mcmVlLlxuICAgICAgICAgICBSZW5kZXJlZCBCRUZPUkUgdGhlIG5vZGUgc2hhcGVzL2ljb25zIHNvIHRoZSBjbGlja2FibGUgaWNvbnMgcGFpbnQgb25cbiAgICAgICAgICAgdG9wIG9mIGl0IGFuZCB3aW4gcG9pbnRlciBldmVudHM7IHRoZSBub2RlIGJvZHkgc3RpbGwgZmFsbHMgdGhyb3VnaCB0b1xuICAgICAgICAgICB0aGlzIGhhbmRsZSBiZWNhdXNlIGl0cyBzaGFwZS9sYWJlbCB1c2UgcG9pbnRlci1ldmVudHM6bm9uZS5cbiAgICAgICAgICAgQ29ubmVjdGlvbiBwb2ludCA8dXNlPiBlbGVtZW50cyBhcmUgcmVuZGVyZWQgYWZ0ZXIgZXZlcnl0aGluZyBzbyB0aGV5XG4gICAgICAgICAgIHN0YXkgdG9wbW9zdCBhbmQgd2luIHBvaW50ZXIgZXZlbnRzIGF0IHRoZSBub2RlIGVkZ2VzLiAtLT5cbiAgICAgIDxyZWN0IGNsYXNzPVwibm9kZS1kcmFnLWhhbmRsZVwiXG4gICAgICAgIFthdHRyLnhdPVwiMTJcIiBbYXR0ci55XT1cIjEyXCJcbiAgICAgICAgW2F0dHIud2lkdGhdPVwibm9kZS53aWR0aCAtIDI0XCIgW2F0dHIuaGVpZ2h0XT1cIm5vZGUuaGVpZ2h0IC0gMjRcIlxuICAgICAgICBmaWxsPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICBbc3R5bGUuY3Vyc29yXT1cImdldEN1cnNvckZvck5vZGUobm9kZS5pZClcIlxuICAgICAgICAobW91c2Vkb3duKT1cIm9uTm9kZU1vdXNlRG93bigkZXZlbnQsIG5vZGUsIHN3aW1sYW5lLm9yZGVyKVwiIC8+XG5cbiAgICAgIDwhLS0gU3RhZ2Ugbm9kZSAtLT5cbiAgICAgIEBpZiAobm9kZS50eXBlID09PSAnc3RhZ2UnKSB7XG4gICAgICA8IS0tIDxyZWN0XG4gICAgICAgICAgICAgICAgICB4PVwiMFwiXG4gICAgICAgICAgICAgICAgICB5PVwiMFwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci53aWR0aF09XCJub2RlLndpZHRoXCJcbiAgICAgICAgICAgICAgICAgIFthdHRyLmhlaWdodF09XCJub2RlLmhlaWdodFwiXG4gICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICAgICAgICBzdHJva2U9XCIjRDM2Q0ZGXCJcbiAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjFcIlxuICAgICAgICAgICAgICAgID48L3JlY3Q+IC0tPlxuICAgICAgPHN2ZzpnIGxpYi1zdGFnZS1ub2RlIFtub2RlXT1cIm5vZGVcIiBbaXNTdGFydE5vZGVdPVwibm9kZS5pc1N0YXJ0Tm9kZVwiXG4gICAgICAgIChzdGFnZVByb3BlcnRpZXNVcGRhdGVkKT1cIm9uU3RhZ2VQcm9wZXJ0aWVzVXBkYXRlZCgkZXZlbnQpXCIgKHNob3dTaGllbGREaWFsb2cpPVwib25TaG93U2hpZWxkRGlhbG9nKCRldmVudClcIlxuICAgICAgICAoc2hvd0VzY2FsYXRpb25EaWFsb2cpPVwib25TaG93RXNjYWxhdGlvbkRpYWxvZygkZXZlbnQpXCIgKHNob3dGb3JtRGlhbG9nKT1cIlxuICAgICAgICAgIHRvZ2dsZVN0YXJ0Tm9kZUZvcm1Qb3B1cCgkZXZlbnQsIG5vZGUueCwgbm9kZS55LCBzd2ltbGFuZS5vcmRlciwgbm9kZSlcbiAgICAgICAgXCI+PC9zdmc6Zz5cbiAgICAgIH1cblxuICAgICAgPCEtLSBEZWNpc2lvbiBub2RlIC0tPlxuICAgICAgQGlmIChub2RlLnR5cGUgPT09ICdkZWNpc2lvbicpIHtcbiAgICAgIDxwYXRoIFthdHRyLmRdPVwiXG4gICAgICAgICAgJ00gMCAnICtcbiAgICAgICAgICBub2RlLmhlaWdodCAvIDIgK1xuICAgICAgICAgICcgTCAnICtcbiAgICAgICAgICBub2RlLndpZHRoIC8gMiArXG4gICAgICAgICAgJyAwJyArXG4gICAgICAgICAgJyBMICcgK1xuICAgICAgICAgIG5vZGUud2lkdGggK1xuICAgICAgICAgICcgJyArXG4gICAgICAgICAgbm9kZS5oZWlnaHQgLyAyICtcbiAgICAgICAgICAnIEwgJyArXG4gICAgICAgICAgbm9kZS53aWR0aCAvIDIgK1xuICAgICAgICAgICcgJyArXG4gICAgICAgICAgbm9kZS5oZWlnaHQgK1xuICAgICAgICAgICcgWidcbiAgICAgICAgXCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjRDM2Q0ZGXCIgc3Ryb2tlLXdpZHRoPVwiMVwiIHN0eWxlPVwicG9pbnRlci1ldmVudHM6IG5vbmVcIj48L3BhdGg+XG5cbiAgICAgIDwhLS0gRGVjaXNpb24gbm9kZSBjb25kaXRpb24gaW5kaWNhdG9yIGljb24gLS0+XG4gICAgICA8c3ZnOmcgKGNsaWNrKT1cInNob3dEZWNpc2lvbkNvbmRpdGlvbnNQb3B1cCgkZXZlbnQsIG5vZGUsIHN3aW1sYW5lLm9yZGVyKVwiIGNsYXNzPVwiZGVjaXNpb24tY29uZGl0aW9uLWljb25cIlxuICAgICAgICBbYXR0ci50cmFuc2Zvcm1dPVwiXG4gICAgICAgICAgJ3RyYW5zbGF0ZSgnICtcbiAgICAgICAgICAobm9kZS53aWR0aCAvIDIgLSAxMCkgK1xuICAgICAgICAgICcsJyArXG4gICAgICAgICAgKG5vZGUuaGVpZ2h0IC8gMiAtIDEwKSArXG4gICAgICAgICAgJyknXG4gICAgICAgIFwiPlxuICAgICAgICA8c3ZnOnJlY3QgeD1cIi01XCIgeT1cIi01XCIgd2lkdGg9XCIzMFwiIGhlaWdodD1cIjMwXCIgZmlsbD1cInRyYW5zcGFyZW50XCIgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXJcIiAvPlxuICAgICAgICA8c3ZnOnBhdGggZD1cIk0xMCAwSDIwVjJIMTBWMFpNMTAgOEgyMFYxMEgxMFY4Wk0xMCA0SDIwVjZIMTBWNFpNMCAwSDhWMkgwVjBaTTAgOEg4VjEwSDBWOFpNMCA0SDhWNkgwVjRaXCJcbiAgICAgICAgICBmaWxsPVwiI0QzNkNGRlwiIC8+XG4gICAgICA8L3N2ZzpnPlxuICAgICAgfVxuXG4gICAgICA8IS0tIEZvcm0gbm9kZSAtLT5cbiAgICAgIEBpZiAobm9kZS50eXBlID09PSAnZm9ybScpIHtcbiAgICAgIDxwYXRoXG4gICAgICAgIGQ9XCJNOTUuMDYyNSA1MC41NTkxVjk1LjA2MjVDOTUuMDYyNSA5Ny45NzE2IDkzLjkwNjkgMTAwLjc2MiA5MS44NDk4IDEwMi44MTlDODkuNzkyOCAxMDQuODc2IDg3LjAwMjggMTA2LjAzMSA4NC4wOTM4IDEwNi4wMzFIMzIuOTA2MkMyOS45OTcyIDEwNi4wMzEgMjcuMjA3MiAxMDQuODc2IDI1LjE1MDIgMTAyLjgxOUMyMy4wOTMxIDEwMC43NjIgMjEuOTM3NSA5Ny45NzE2IDIxLjkzNzUgOTUuMDYyNVYyMS45Mzc1QzIxLjkzNzUgMTkuMDI4NCAyMy4wOTMxIDE2LjIzODUgMjUuMTUwMiAxNC4xODE0QzI3LjIwNzIgMTIuMTI0NCAyOS45OTcyIDEwLjk2ODggMzIuOTA2MiAxMC45Njg4SDU1LjQ3MjJDNTcuNDEwOSAxMC45NjkgNTkuMjcwMSAxMS43MzkyIDYwLjY0MTIgMTMuMTA5OUw5Mi45MjEzIDQ1LjM5MDFDOTQuMjkyIDQ2Ljc2MTEgOTUuMDYyMiA0OC42MjA0IDk1LjA2MjUgNTAuNTU5MVpcIlxuICAgICAgICB0cmFuc2Zvcm09XCJzY2FsZSgwLjcpXCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjRDM2Q0ZGXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHlsZT1cInBvaW50ZXItZXZlbnRzOiBub25lXCIgLz5cbiAgICAgIDxwYXRoXG4gICAgICAgIGQ9XCJNNTguNSAxMi43OTY5VjQwLjIxODhDNTguNSA0Mi4xNTgxIDU5LjI3MDQgNDQuMDE4MSA2MC42NDE4IDQ1LjM4OTVDNjIuMDEzMSA0Ni43NjA4IDYzLjg3MzEgNDcuNTMxMiA2NS44MTI1IDQ3LjUzMTJIOTMuMjM0NFwiXG4gICAgICAgIHRyYW5zZm9ybT1cInNjYWxlKDAuNylcIiBzdHJva2U9XCIjRDM2Q0ZGXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgc3R5bGU9XCJwb2ludGVyLWV2ZW50czogbm9uZVwiIC8+XG4gICAgICA8dGV4dCB4PVwiNTAlXCIgeT1cIjUwJVwiIHRleHQtYW5jaG9yPVwibWlkZGxlXCIgZG9taW5hbnQtYmFzZWxpbmU9XCJtaWRkbGVcIiBmb250LWZhbWlseT1cInNhbnMtc2VyaWZcIiBmb250LXNpemU9XCIxNFwiXG4gICAgICAgIGZpbGw9XCIjRDM2Q0ZGXCIgc3R5bGU9XCJwb2ludGVyLWV2ZW50czogbm9uZVwiPlxuICAgICAgICBGb3JtXG4gICAgICA8L3RleHQ+XG4gICAgICB9XG5cbiAgICAgIDwhLS0gU3ViZmxvdyBub2RlIC0tPlxuICAgICAgQGlmIChub2RlLnR5cGUgPT09ICdzdWJmbG93Jykge1xuICAgICAgPHN2ZzpnIGxpYi1zdGFnZS1ub2RlIFtub2RlXT1cIm5vZGVcIiBbaXNTdGFydE5vZGVdPVwibm9kZS5pc1N0YXJ0Tm9kZVwiIFtpc1N1YmZsb3ddPVwidHJ1ZVwiXG4gICAgICAgIChzdGFnZVByb3BlcnRpZXNVcGRhdGVkKT1cIm9uU3RhZ2VQcm9wZXJ0aWVzVXBkYXRlZCgkZXZlbnQpXCIgKHNob3dTaGllbGREaWFsb2cpPVwib25TaG93U2hpZWxkRGlhbG9nKCRldmVudClcIlxuICAgICAgICAoc2hvd0VzY2FsYXRpb25EaWFsb2cpPVwib25TaG93RXNjYWxhdGlvbkRpYWxvZygkZXZlbnQpXCIgKHNob3dGb3JtRGlhbG9nKT1cIlxuICAgICAgICAgIHRvZ2dsZVN0YXJ0Tm9kZUZvcm1Qb3B1cCgkZXZlbnQsIG5vZGUueCwgbm9kZS55LCBzd2ltbGFuZS5vcmRlciwgbm9kZSlcbiAgICAgICAgXCI+PC9zdmc6Zz5cbiAgICAgIH1cblxuICAgICAgPCEtLSBDb25uZWN0aW9uIHBvaW50cyBmb3IgdGhpcyBub2RlIChyZW5kZXJlZCBsYXN0ID0gdG9wbW9zdCkgLS0+XG4gICAgICBAZm9yIChwb2ludCBvZiBub2RlLmNvbm5lY3Rpb25Qb2ludHMgfHwgW107IHRyYWNrIHBvaW50LmlkKSB7XG4gICAgICAgIEBpZiAoaXNDb25uZWN0aW9uUG9pbnRWaXNpYmxlKG5vZGUuaWQpKSB7XG4gICAgICAgICAgPHVzZSBjbGFzcz1cImNvbm5lY3Rpb24tcG9pbnRcIiBbYXR0ci5ocmVmXT1cIicjY29ubmVjdGlvbi1wb2ludC10ZW1wbGF0ZSdcIiBbYXR0ci54XT1cInBvaW50LnhcIiBbYXR0ci55XT1cInBvaW50LnlcIlxuICAgICAgICAgICAgW2F0dHIuaWRdPVwicG9pbnQuaWRcIiAobW91c2Vkb3duKT1cInN0YXJ0Q29ubmVjdGlvbkRyYWcoJGV2ZW50LCBwb2ludCwgc3dpbWxhbmUub3JkZXIpXCIgLz5cbiAgICAgICAgfVxuICAgICAgfVxuICAgIDwvZz5cbiAgICA8IS0tIEEgdHJhbnNwYXJlbnQgaG92ZXIgYXJlYSBmb3IgaW1wcm92ZWQgaG92ZXIgZGV0ZWN0aW9uIC0tPlxuICAgIDxyZWN0IFthdHRyLnhdPVwibm9kZS54IC0gMTBcIiBbYXR0ci55XT1cIm5vZGUueSAtIDEwXCIgW2F0dHIud2lkdGhdPVwibm9kZS53aWR0aCArIDIwXCIgW2F0dHIuaGVpZ2h0XT1cIm5vZGUuaGVpZ2h0ICsgMjBcIlxuICAgICAgZmlsbD1cInRyYW5zcGFyZW50XCIgKG1vdXNlb3Zlcik9XCJzaG93Q29ubmVjdGlvblBvaW50cyhub2RlLmlkLCBzd2ltbGFuZS5vcmRlcilcIlxuICAgICAgKG1vdXNlb3V0KT1cImhpZGVDb25uZWN0aW9uUG9pbnRzKG5vZGUuaWQpXCIgc3R5bGU9XCJwb2ludGVyLWV2ZW50czogbm9uZVwiIC8+XG4gICAgfSB9XG5cbiAgICA8IS0tIENvbm5lY3Rpb25zIC0tPlxuICAgIEBmb3IgKGNvbm5lY3Rpb24gb2Ygc3RhdGUuY29ubmVjdGlvbnM7IHRyYWNrIGNvbm5lY3Rpb24uaWQpIHtcbiAgICA8ZyBjbGFzcz1cImNvbm5lY3Rpb24tZWxlbWVudFwiPlxuICAgICAgPHBhdGggW2F0dHIuZF09XCJnZXRDb25uZWN0aW9uUGF0aEZvclNhdmVkQ29ubmVjdGlvbihjb25uZWN0aW9uKVwiIHN0cm9rZT1cIiNEMzZDRkZcIiBzdHJva2Utd2lkdGg9XCIyXCIgZmlsbD1cIm5vbmVcIlxuICAgICAgICBtYXJrZXItZW5kPVwidXJsKCNhcnJvd2hlYWQpXCI+PC9wYXRoPlxuXG4gICAgICA8IS0tIENvbm5lY3Rpb24gTGFiZWwgLS0+XG4gICAgICBAaWYgKGNvbm5lY3Rpb24uc291cmNlTm9kZUlkICYmIGNvbm5lY3Rpb24udGFyZ2V0Tm9kZUlkKSB7XG4gICAgICA8Zm9yZWlnbk9iamVjdCBbYXR0ci54XT1cImdldExhYmVsUG9zaXRpb24oY29ubmVjdGlvbikueFwiIFthdHRyLnldPVwiZ2V0TGFiZWxQb3NpdGlvbihjb25uZWN0aW9uKS55XCIgd2lkdGg9XCIxNTBcIlxuICAgICAgICBoZWlnaHQ9XCI0MFwiIHN0eWxlPVwib3ZlcmZsb3c6IHZpc2libGU7IHBvaW50ZXItZXZlbnRzOiBhbGw7XCIgW2F0dHIudHJhbnNmb3JtXT1cIid0cmFuc2xhdGUoLTc1LCAtMTApJ1wiPlxuICAgICAgICA8d2YtbGFiZWwtZWRpdG9yIFtsYWJlbF09XCJjb25uZWN0aW9uLmxhYmVsIHx8ICdOZXcgQWN0aW9uJ1wiIFt4XT1cIjBcIiBbeV09XCIwXCIgW2lzQ29ubmVjdGlvbl09XCJ0cnVlXCJcbiAgICAgICAgICAobGFiZWxDaGFuZ2UpPVwic2F2ZUNvbm5lY3Rpb25MYWJlbChjb25uZWN0aW9uLCAkZXZlbnQpXCIgKG9wZW5EaWFsb2cpPVwib25TaG93QWN0aW9uRGlhbG9nKGNvbm5lY3Rpb24pXCIgLz5cbiAgICAgIDwvZm9yZWlnbk9iamVjdD5cbiAgICAgIH1cbiAgICA8L2c+XG4gICAgfVxuXG4gICAgPCEtLSBDb25uZWN0aW9uIHByZXZpZXcgbGluZSAtLT5cbiAgICBAaWYgKHN0YXRlLmlzQ29ubmVjdGlvbkRyYWdnaW5nKCkpIHtcbiAgICA8Zz5cbiAgICAgIDxwYXRoIFthdHRyLmRdPVwiZ2V0Q29ubmVjdGlvblBhdGgoKVwiIHN0cm9rZT1cIiNEMzZDRkZcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWRhc2hhcnJheT1cIjUsNVwiIGZpbGw9XCJub25lXCI+PC9wYXRoPlxuICAgIDwvZz5cbiAgICB9XG4gIDwvc3ZnPlxuXG4gIDxkaXYgKm5nSWY9XCJwb3B1cFZpc2libGVcIiBbc3R5bGUucG9zaXRpb25dPVwiJ2Fic29sdXRlJ1wiIFtzdHlsZS5sZWZ0LnB4XT1cInBvcHVwWFwiIFtzdHlsZS50b3AucHhdPVwicG9wdXBZXCI+XG4gICAgPHZlcmJlbi1wb3AtVXAgW2Ryb3Bkb3duT3Blbl09XCJ0cnVlXCIgW2N1c3RvbVN0eWxlc109XCJ7ICd6LWluZGV4JzogJzk5JyB9XCIgW2VuYWJsZU1vdXNlTGVhdmVdPVwiZmFsc2VcIlxuICAgICAgKGRyb3Bkb3duT3BlbkNoYW5nZSk9XCIkZXZlbnQgPyBudWxsIDogaGlkZUNvbm5lY3Rpb25Qb3B1cCgpXCI+XG4gICAgICA8ZGl2IGRyb3Bkb3duLXRyaWdnZXIgc3R5bGU9XCJkaXNwbGF5OiBub25lXCI+XG4gICAgICAgIDwhLS0gSGlkZGVuIHRyaWdnZXIgZWxlbWVudCAtLT5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInAtMyBiZy13aGl0ZSBib3JkZXIgYm9yZGVyLWdyYXktMjAwIHJvdW5kZWQgc2hhZG93LW1kXCIgZHJvcGRvd24tY29udGVudD5cbiAgICAgICAgPGg0IGNsYXNzPVwibWItMiBmb250LW1lZGl1bVwiPkNyZWF0ZSBDb25uZWN0aW9uPC9oND5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTJcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCB0eXBlIG9mIGFsbG93ZWROb2RlVHlwZXNcIj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJweC0zIHB5LTIgYmctd2hpdGUgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCByb3VuZGVkIHRleHQtc20gaG92ZXI6YmctZ3JheS01MFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJjcmVhdGVOb2RlQ29ubmVjdGlvbih0eXBlKVwiPlxuICAgICAgICAgICAgICBDcmVhdGUge3sgdHlwZSB8IHRpdGxlY2FzZSB9fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInB4LTMgcHktMiBiZy13aGl0ZSBib3JkZXIgYm9yZGVyLWdyYXktMjAwIHJvdW5kZWQgdGV4dC1zbSBob3ZlcjpiZy1ncmF5LTUwXCJcbiAgICAgICAgICAgIChjbGljayk9XCJoaWRlQ29ubmVjdGlvblBvcHVwKClcIj5cbiAgICAgICAgICAgIENhbmNlbFxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvdmVyYmVuLXBvcC1VcD5cbiAgPC9kaXY+XG5cbiAgPGRpdiAqbmdJZj1cInNob3dTdGFydE5vZGVGb3JtUG9wdXBcIiBbc3R5bGUucG9zaXRpb25dPVwiJ2Fic29sdXRlJ1wiIFtzdHlsZS5sZWZ0LnB4XT1cInN0YXJ0Tm9kZUZvcm1Qb3B1cFhcIlxuICAgIFtzdHlsZS50b3AucHhdPVwic3RhcnROb2RlRm9ybVBvcHVwWVwiPlxuICAgIDx2ZXJiZW4tcG9wLVVwIFtkcm9wZG93bk9wZW5dPVwidHJ1ZVwiIFtjdXN0b21TdHlsZXNdPVwieyAnei1pbmRleCc6ICcxMDAnIH1cIj5cbiAgICAgIDxkaXYgZHJvcGRvd24tdHJpZ2dlciBzdHlsZT1cImRpc3BsYXk6IG5vbmVcIj5cbiAgICAgICAgPCEtLSBIaWRkZW4gdHJpZ2dlciBlbGVtZW50IC0tPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwicC0zIGJnLXdoaXRlIGJvcmRlciBib3JkZXItZ3JheS0yMDAgcm91bmRlZCBzaGFkb3ctbWQgdy02NFwiIGRyb3Bkb3duLWNvbnRlbnRcbiAgICAgICAgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsgei1pbmRleDogMTAwMFwiPlxuICAgICAgICA8aDQgY2xhc3M9XCJtYi0yIGZvbnQtbWVkaXVtXCI+U2VsZWN0IFdvcmtmbG93IEZvcm08L2g0PlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNMb2FkaW5nU3RhcnROb2RlRm9ybXNcIiBjbGFzcz1cInRleHQtY2VudGVyIHB5LTJcIj5cbiAgICAgICAgICBMb2FkaW5nIGZvcm1zLi4uXG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiIWlzTG9hZGluZ1N0YXJ0Tm9kZUZvcm1zXCIgY2xhc3M9XCJtYXgtaC00OCBvdmVyZmxvdy15LWF1dG9cIiBzdHlsZT1cIm1heC1oZWlnaHQ6IDE5MnB4OyBvdmVyZmxvdy15OiBhdXRvO1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzPVwidy1mdWxsIHB4LTMgcHktMiBiZy1ncmF5LTUwIGJvcmRlciBib3JkZXItZ3JheS0yMDAgcm91bmRlZCB0ZXh0LXNtIGhvdmVyOmJnLWdyYXktNTAgdGV4dC1sZWZ0XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdFN0YXJ0Tm9kZUZvcm0obnVsbClcIj5cbiAgICAgICAgICAgICAgQ2xlYXIgZm9ybSBzZWxlY3Rpb25cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGZvcm0gb2Ygc3RhcnROb2RlRm9ybXNMaXN0XCIgY2xhc3M9XCJtYi0xXCI+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwidy1mdWxsIHB4LTMgcHktMiBiZy13aGl0ZSBib3JkZXIgYm9yZGVyLWdyYXktMjAwIHJvdW5kZWQgdGV4dC1zbSBob3ZlcjpiZy1ncmF5LTUwIHRleHQtbGVmdFwiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2JnLWJsdWUtNTAgIWJvcmRlci1ibHVlLTUwMCAhYm9yZGVyLTIgZm9udC1zZW1pYm9sZCc6IGZvcm0/LkNvZGUgPT09IGFjdGl2ZU5vZGVGb3JGb3JtU2VsZWN0aW9uPy5zdGFnZURhdGE/LmZvcm1JZH1cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0U3RhcnROb2RlRm9ybShmb3JtKVwiPlxuICAgICAgICAgICAgICB7eyBmb3JtLk5hbWUgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJzdGFydE5vZGVGb3Jtc0xpc3QubGVuZ3RoID09PSAwXCIgY2xhc3M9XCJ0ZXh0LWNlbnRlciBweS0yIHRleHQtZ3JheS01MDBcIj5cbiAgICAgICAgICAgIE5vIGZvcm1zIGF2YWlsYWJsZVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvdmVyYmVuLXBvcC1VcD5cbiAgPC9kaXY+XG5cbiAgPGRpdiAqbmdJZj1cInNob3dTdWJmbG93UG9wdXBcIiBbc3R5bGUucG9zaXRpb25dPVwiJ2Fic29sdXRlJ1wiIFtzdHlsZS5sZWZ0LnB4XT1cInN1YmZsb3dQb3B1cFhcIlxuICAgIFtzdHlsZS50b3AucHhdPVwic3ViZmxvd1BvcHVwWVwiPlxuICAgIDx2ZXJiZW4tcG9wLVVwIFtkcm9wZG93bk9wZW5dPVwidHJ1ZVwiIFtjdXN0b21TdHlsZXNdPVwieyAnei1pbmRleCc6ICcxMDAnIH1cIj5cbiAgICAgIDxkaXYgZHJvcGRvd24tdHJpZ2dlciBzdHlsZT1cImRpc3BsYXk6IG5vbmVcIj5cbiAgICAgICAgPCEtLSBIaWRkZW4gdHJpZ2dlciBlbGVtZW50IC0tPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwicC0zIGJnLXdoaXRlIGJvcmRlciBib3JkZXItZ3JheS0yMDAgcm91bmRlZCBzaGFkb3ctbWQgdy02NFwiIGRyb3Bkb3duLWNvbnRlbnRcbiAgICAgICAgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsgei1pbmRleDogMTAwMFwiPlxuICAgICAgICA8aDQgY2xhc3M9XCJtYi0yIGZvbnQtbWVkaXVtXCI+U2VsZWN0IFdvcmtmbG93PC9oND5cbiAgICAgICAgPGRpdiAqbmdJZj1cImlzTG9hZGluZ1dvcmtmbG93c1wiIGNsYXNzPVwidGV4dC1jZW50ZXIgcHktMlwiPlxuICAgICAgICAgIExvYWRpbmcgd29ya2Zsb3dzLi4uXG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiIWlzTG9hZGluZ1dvcmtmbG93c1wiIGNsYXNzPVwibWF4LWgtNDggb3ZlcmZsb3cteS1hdXRvXCIgc3R5bGU9XCJtYXgtaGVpZ2h0OiAxOTJweDsgb3ZlcmZsb3cteTogYXV0bztcIj5cbiAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCB3b3JrZmxvdyBvZiB3b3JrZmxvd3NMaXN0XCIgY2xhc3M9XCJtYi0xXCI+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwidy1mdWxsIHB4LTMgcHktMiBiZy13aGl0ZSBib3JkZXIgYm9yZGVyLWdyYXktMjAwIHJvdW5kZWQgdGV4dC1zbSBob3ZlcjpiZy1ncmF5LTUwIHRleHQtbGVmdFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RTdWJmbG93V29ya2Zsb3cod29ya2Zsb3cpXCI+XG4gICAgICAgICAgICAgIHt7IHdvcmtmbG93Lk5hbWUgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJ3b3JrZmxvd3NMaXN0Lmxlbmd0aCA9PT0gMFwiIGNsYXNzPVwidGV4dC1jZW50ZXIgcHktMiB0ZXh0LWdyYXktNTAwXCI+XG4gICAgICAgICAgICBObyB3b3JrZmxvd3MgYXZhaWxhYmxlXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC92ZXJiZW4tcG9wLVVwPlxuICA8L2Rpdj5cblxuICA8bGliLWNvbmRpdGlvbnMtcG9wdXAgW3Zpc2libGVdPVwic2hvd0RlY2lzaW9uQ29uZGl0aW9uRGlhbG9nXCIgW2RlY2lzaW9uTm9kZUlkXT1cImFjdGl2ZURlY2lzaW9uTm9kZUlkXCJcbiAgICBbbmV3Q29ubmVjdGlvbklkXT1cImFjdGl2ZUNvbm5lY3Rpb25JZFwiIFtwb3B1cFhdPVwiZGVjaXNpb25Db25kaXRpb25Qb3B1cFhcIiBbcG9wdXBZXT1cImRlY2lzaW9uQ29uZGl0aW9uUG9wdXBZXCJcbiAgICAoY2xvc2VkKT1cIm9uRGVjaXNpb25Db25kaXRpb25DYW5jZWxsZWQoKVwiIChzYXZlZCk9XCJvbkRlY2lzaW9uQ29uZGl0aW9uU2F2ZWQoJGV2ZW50KVwiPjwvbGliLWNvbmRpdGlvbnMtcG9wdXA+XG5cbiAgPCEtLSA8bGliLWRlY2lzaW9uLXBvcHVwXG4gICAgW3Zpc2libGVdPVwic2hvd0NvbmRpdGlvbnNEaWFsb2dcIlxuICAgIFtkZWNpc2lvbk5vZGVJZF09XCJhY3RpdmVEZWNpc2lvbk5vZGVJZFwiXG4gICAgW3BvcHVwWF09XCJkZWNpc2lvbkNvbmRpdGlvblBvcHVwWFwiXG4gICAgW3BvcHVwWV09XCJkZWNpc2lvbkNvbmRpdGlvblBvcHVwWVwiXG4gICAgKGNsb3NlZCk9XCJvbkRlY2lzaW9uQ29uZGl0aW9uQ2FuY2VsbGVkKClcIlxuICA+PC9saWItZGVjaXNpb24tcG9wdXA+IC0tPlxuXG4gIDxsaWItc3RhZ2UtZGlhbG9nIFt2aXNpYmxlXT1cInNob3dTdGFnZURpYWxvZ0xvY2FsXCIgW3N0YWdlRGF0YV09XCJhY3RpdmVTdGFnZURhdGEgfHwge31cIlxuICAgIChjbG9zZWQpPVwib25TdGFnZURpYWxvZ0Nsb3NlZCgpXCIgKHNhdmVkKT1cIm9uU3RhZ2VEaWFsb2dTYXZlZCgkZXZlbnQpXCI+PC9saWItc3RhZ2UtZGlhbG9nPlxuXG4gIDxsaWItYWN0aW9uLWRpYWxvZyBbdmlzaWJsZV09XCJzaG93QWN0aW9uRGlhbG9nTG9jYWxcIiBbYWN0aW9uRGF0YV09XCJhY3RpdmVBY3Rpb25EYXRhXCIgKGNsb3NlZCk9XCJvbkFjdGlvbkRpYWxvZ0Nsb3NlZCgpXCJcbiAgICAoc2F2ZWQpPVwib25BY3Rpb25EaWFsb2dTYXZlZCgkZXZlbnQpXCIgKGRlbGV0ZWQpPVwib25BY3Rpb25EaWFsb2dEZWxldGVkKCRldmVudClcIj48L2xpYi1hY3Rpb24tZGlhbG9nPlxuXG5cbiAgPGxpYi1lc2NhbGF0aW9uLWRpYWxvZyBbdmlzaWJsZV09XCJzaG93RXNjYWxhdGlvbkRpYWxvZ0xvY2FsXCIgW3R5cGVdPVwiYWN0aXZlRXNjYWxhdGlvblR5cGUoKSFcIlxuICAgIFtzdGFnZUNvZGVdPVwiYWN0aXZlU3RhZ2VDb2RlKCkgfHwgJydcIiBbd29ya2Zsb3dDb2RlXT1cInN0YXRlLndvcmtmbG93Py5Db2RlIHx8ICcnXCJcbiAgICAoY2xvc2VkKT1cIm9uRXNjYWxhdGlvbkRpYWxvZ0Nsb3NlZCgpXCI+PC9saWItZXNjYWxhdGlvbi1kaWFsb2c+XG48L2Rpdj5cbiJdfQ==