@magic-xpa/engine 4.800.0-dev480.207 → 4.800.0-dev480.210

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.
@@ -1,2 +1,2 @@
1
- export let CurrentClientVersion = '4.800.0-dev480.207';
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ3VycmVudENsaWVudFZlcnNpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbmdpbmUvc3JjL0N1cnJlbnRDbGllbnRWZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxJQUFJLG9CQUFvQixHQUFHLG9CQUFvQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGxldCBDdXJyZW50Q2xpZW50VmVyc2lvbiA9ICc0LjgwMC4wLWRldjQ4MC4yMDcnOyJdfQ==
1
+ export let CurrentClientVersion = '4.800.0-dev480.210';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ3VycmVudENsaWVudFZlcnNpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbmdpbmUvc3JjL0N1cnJlbnRDbGllbnRWZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxJQUFJLG9CQUFvQixHQUFHLG9CQUFvQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGxldCBDdXJyZW50Q2xpZW50VmVyc2lvbiA9ICc0LjgwMC4wLWRldjQ4MC4yMTAnOyJdfQ==
@@ -367,8 +367,10 @@ export class Operation {
367
367
  if (subformTask != null) {
368
368
  let terminateTaskGracefully = true;
369
369
  let rtEvnt = AccessHelper.eventsManager.getLastRtEvent();
370
- if (this._isRoute && rtEvnt !== null && rtEvnt.isGuiTriggeredEvent())
370
+ if (this._isRoute && rtEvnt !== null && rtEvnt.isGuiTriggeredEvent()) {
371
371
  terminateTaskGracefully = false;
372
+ AccessHelper.eventsManager.setStopExecution(true);
373
+ }
372
374
  if (yield subformTask.endTask(true, false, !terminateTaskGracefully, true)) {
373
375
  let parentTask = destSubForm.getForm().getTask();
374
376
  parentTask.TaskService.RemoveRecomputes(parentTask, subformTask);
@@ -764,4 +766,4 @@ export class Operation {
764
766
  return NString.Format("Executing operation number {0}", this._serverId + 1);
765
767
  }
766
768
  }
767
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT3BlcmF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZW5naW5lL3NyYy9ydC9PcGVyYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsS0FBSyxFQUNMLEtBQUssRUFFTCxPQUFPLEVBQ1AsT0FBTyxFQUVQLE1BQU0sRUFDUCxNQUFNLHNCQUFzQixDQUFDO0FBRTlCLE9BQU8sRUFFTCxVQUFVLEVBQ1YsU0FBUyxFQUNULE1BQU0sRUFDTixnQkFBZ0IsRUFDaEIscUJBQXFCLEVBQ3JCLE9BQU8sRUFDUCxlQUFlLEVBQ2YsWUFBWSxFQUNaLFNBQVMsRUFDVixNQUFNLGtCQUFrQixDQUFDO0FBRTFCLE9BQU8sRUFDTCxRQUFRLEVBRVIsUUFBUSxFQUNSLGFBQWEsRUFDYixNQUFNLEVBRU4sK0JBQStCLEVBQy9CLFVBQVUsRUFDWCxNQUFNLGdCQUFnQixDQUFDO0FBRXhCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFLaEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXJELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFFN0UsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRW5ELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztB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TSxDQUFDLFdBQVcsQ0FBQyxDQUFDO29CQUMzQixNQUFNO2dCQUNSLEtBQUssY0FBYyxDQUFDLG1CQUFtQjtvQkFDckMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztvQkFDOUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDdEMsTUFBTSxDQUFDLFlBQVksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFBLE1BQU0sSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBQ3pFLE1BQU07Z0JBQ1IsS0FBSyxjQUFjLENBQUMsY0FBYztvQkFDaEMsTUFBTSxDQUFDLE1BQU0sQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO29CQUMzQyxNQUFNO2dCQUNSLEtBQUssY0FBYyxDQUFDLFlBQVk7b0JBQzlCLE1BQU0sQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7b0JBQzlCLE1BQU07Z0JBQ1I7b0JBQ0UsTUFBTSxDQUFDLFlBQVksQ0FBQyxnQ0FBZ0MsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ2xFLE1BQU07YUFDVDtRQUNILENBQUM7S0FBQTtJQU1ELFVBQVU7UUFDUixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQU1ELG1CQUFtQjtRQUNqQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQU1ELHFCQUFxQjtRQUNuQixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztJQUMvQixDQUFDO0lBRUQsUUFBUTtRQUNOLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxnQ0FBZ0MsRUFBRSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzlFLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQXBwbGljYXRpb25FeGNlcHRpb24sXHJcbiAgRGVidWcsXHJcbiAgSW50MzIsXHJcbiAgTGlzdCxcclxuICBOTnVtYmVyLFxyXG4gIE5TdHJpbmcsXHJcbiAgU3RyaW5nQnVpbGRlcixcclxuICBUaHJlYWRcclxufSBmcm9tICdAbWFnaWMteHBhL21zY29yZWxpYic7XHJcblxyXG5pbXBvcnQge1xyXG4gIENhbGxPcGVyYXRpb25Nb2RlLFxyXG4gIENhbGxPc1Nob3csXHJcbiAgQ29uc3RhbnRzLCBJbnRlcm5hbEludGVyZmFjZSxcclxuICBMb2dnZXIsXHJcbiAgU3RvcmFnZUF0dHJpYnV0ZSxcclxuICBTdG9yYWdlQXR0cmlidXRlQ2hlY2ssXHJcbiAgU3RyVXRpbCxcclxuICBVdGlsU3RyQnl0ZU1vZGUsXHJcbiAgWE1MQ29uc3RhbnRzLFxyXG4gIFhtbFBhcnNlclxyXG59IGZyb20gJ0BtYWdpYy14cGEvdXRpbHMnO1xyXG5cclxuaW1wb3J0IHtcclxuICBDb21tYW5kcyxcclxuICBNZ0NvbnRyb2xCYXNlLFxyXG4gIE5VTV9UWVBFLFxyXG4gIFByb3BJbnRlcmZhY2UsIFJ1bnRpbWVDb250ZXh0QmFzZSxcclxuICBTdHlsZXMsXHJcbiAgVGFza0RlZmluaXRpb25JZCxcclxuICBUYXNrRGVmaW5pdGlvbklkVGFibGVTYXhIYW5kbGVyLFxyXG4gIFZlY3RvclR5cGVcclxufSBmcm9tICdAbWFnaWMteHBhL2d1aSc7XHJcblxyXG5pbXBvcnQgeyBZZXNOb0V4cCB9IGZyb20gJy4uL2V4cC9ZZXNOb0V4cCc7XHJcbmltcG9ydCB7IEFyZ3VtZW50c0xpc3QgfSBmcm9tICcuL0FyZ3VtZW50c0xpc3QnO1xyXG5pbXBvcnQgeyBJQ2xpZW50Q29tbWFuZCB9IGZyb20gJy4uL2NvbW1hbmRzL0lDbGllbnRDb21tYW5kJztcclxuaW1wb3J0IHsgRXhwcmVzc2lvbiB9IGZyb20gJy4uL2V4cC9FeHByZXNzaW9uJztcclxuaW1wb3J0IHsgRXZlbnRIYW5kbGVyIH0gZnJvbSAnLi4vZXZlbnQvRXZlbnRIYW5kbGVyJztcclxuaW1wb3J0IHsgRmllbGQgfSBmcm9tICcuLi9kYXRhL0ZpZWxkJztcclxuaW1wb3J0IHsgUnVuVGltZUV2ZW50IH0gZnJvbSAnLi4vZXZlbnQvUnVuVGltZUV2ZW50JztcclxuaW1wb3J0IHsgTWdGb3JtIH0gZnJvbSAnLi4vZ3VpL01nRm9ybSc7XHJcbmltcG9ydCB7IENvbW1hbmRGYWN0b3J5IH0gZnJvbSAnLi4vY29tbWFuZHMvQ2xpZW50VG9TZXJ2ZXIvQ29tbWFuZEZhY3RvcnknO1xyXG5pbXBvcnQgeyBGbG93TW9uaXRvclF1ZXVlIH0gZnJvbSAnLi4vdXRpbC9GbG93TW9uaXRvclF1ZXVlJztcclxuaW1wb3J0IHsgRXhlY09wZXJDb21tYW5kIH0gZnJvbSAnLi4vY29tbWFuZHMvQ2xpZW50VG9TZXJ2ZXIvRXhlY09wZXJDb21tYW5kJztcclxuaW1wb3J0IHsgTWdDb250cm9sIH0gZnJvbSAnLi4vZ3VpL01nQ29udHJvbCc7XHJcbmltcG9ydCB7IENvbnN0SW50ZXJmYWNlIH0gZnJvbSAnLi4vQ29uc3RJbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBUYXNrIH0gZnJvbSAnLi4vdGFza3MvVGFzayc7XHJcbmltcG9ydCB7IEZsb3dNb25pdG9ySW50ZXJmYWNlIH0gZnJvbSAnLi4vRmxvd01vbml0b3JJbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBMYW5ndWFnZURhdGEgfSBmcm9tICcuLi9lbnYvTGFuZ3VhZ2VEYXRhJztcclxuaW1wb3J0IHsgTGFzdEZvY3VzZWRNYW5hZ2VyIH0gZnJvbSAnLi9MYXN0Rm9jdXNlZE1hbmFnZXInO1xyXG5pbXBvcnQgeyBDb21tYW5kc1RhYmxlIH0gZnJvbSAnLi4vQ29tbWFuZHNUYWJsZSc7XHJcbmltcG9ydCB7IEFjY2Vzc0hlbHBlciB9IGZyb20gJy4uL0FjY2Vzc0hlbHBlcic7XHJcbmltcG9ydCB7R1VJTWFuYWdlcn0gZnJvbSBcIi4uL0dVSU1hbmFnZXJcIjtcclxuXHJcblxyXG4vLy8gPHN1bW1hcnk+XHJcbi8vLyAgIGRhdGEgZm9yIDxvcGVyPiB0YWdcclxuLy8vIDwvc3VtbWFyeT5cclxuZXhwb3J0IGNsYXNzIE9wZXJhdGlvbiB7XHJcbiAgcHJpdmF0ZSBfY29uZEV4cDogWWVzTm9FeHAgPSBuZXcgWWVzTm9FeHAodHJ1ZSk7XHJcbiAgcHJpdmF0ZSBfcmV0YWluRm9jdXM6IFllc05vRXhwID0gbmV3IFllc05vRXhwKGZhbHNlKTtcclxuICBwcml2YXRlIF93YWl0RXhwOiBZZXNOb0V4cCA9IG5ldyBZZXNOb0V4cChmYWxzZSk7XHJcbiAgcHJpdmF0ZSBfc3luY0RhdGE6IFllc05vRXhwID0gbmV3IFllc05vRXhwKGZhbHNlKTsgLy8gY2FsbCBvcGVyYXRpb246IFN5bmMgZGF0YVxyXG4gIHByaXZhdGUgX2FyZ0xpc3Q6IEFyZ3VtZW50c0xpc3QgPSBudWxsO1xyXG4gIHByaXZhdGUgX2Jsb2NrQ2xvc2U6IG51bWJlciA9IDA7XHJcbiAgLy8gaW4gQmxvY2sgQmVnaW4vRWxzZS9Mb29wIG9wZXJhdGlvbjogdGhlIG9wZXJhdGlvbiBpZCB3aGljaCBpcyB0aGUgZW5kIG9mIHRoZSBleGVjdXRpb24gYmxvY2sgKGVsc2UvZW5kKVxyXG4gIHByaXZhdGUgX2Jsb2NrRW5kOiBudW1iZXIgPSAwOyAgLy8gaW4gQmxvY2sgQmVnaW4vRWxzZS9Mb29wIG9wZXJhdGlvbjogdGhlIEJsb2NrIEVuZCBvcGVyYXRpb24gdGhhdCBlbmRzIHRoZSBuZXN0aW5nIGxldmVsXHJcbiAgcHJpdmF0ZSBfYnV0dG9uczogc3RyaW5nID0gJ1xcMCc7IC8vIGJ1dHRvbnMgb2YgdmVyaWZ5IG9wclxyXG4gIHByaXZhdGUgX2NoZWNrQnlTZXJ2ZXI6IGJvb2xlYW4gPSBmYWxzZTsgLy8gZm9yIENhbGwgb3BlcmF0aW9uIHdpdGggc3ViZm9ybSBkZXN0aW5hdGlvblxyXG4gIHByaXZhdGUgX2NtZFRvU2VydmVyOiBJQ2xpZW50Q29tbWFuZCA9IG51bGw7IC8vIGRlZmF1bHQgYnV0dG9uIG9mIHZlcmlmeSBvcHJcclxuICBwcml2YXRlIF9kaXNwbGF5OiBzdHJpbmcgPSAnUyc7IC8vIFN0YXR1cyBsaW5lIHwgbWVzc2FnZSBCb3hcclxuICBwcml2YXRlIF9lcnJMb2dBcHBlbmQ6IGJvb2xlYW4gPSBmYWxzZTsgLy8gYXBwZW5kIHRvIGVycm9yIGxvZyBmb3IgdmVyaWZ5IG9wclxyXG4gIHByaXZhdGUgX2V2dEhhbmRsZXI6IEV2ZW50SGFuZGxlciA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfZXhlY09uU2VydmVyOiBib29sZWFuID0gZmFsc2U7IC8vIGZvciBibG9jayBpZiB3aGljaCBzaG91bGQgYmUgZXhlY3V0ZWQgb24gdGhlIHNlcnZlclxyXG4gIHByaXZhdGUgX2V4ZWNPbkNsaWVudDogYm9vbGVhbiA9IGZhbHNlOyAvLyBmb3IgYmxvY2sgaWYgd2hpY2ggbXVzdCBiZSBleGVjdXRlZCBvbiB0aGUgY2xpZW50XHJcbiAgcHJpdmF0ZSBfZXhwOiBFeHByZXNzaW9uID0gbnVsbDtcclxuICBwcml2YXRlIF9maWVsZDogRmllbGQgPSBudWxsOyAvLyByZWZlcmVuY2UgdG8gdGhlIGZpZWxkXHJcbiAgcHJpdmF0ZSBfZ2xvYmFsUGFyYW1zU2hvdWxkQmVDb3BpZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF9pbWFnZTogc3RyaW5nID0gJ1xcMCc7IC8vIGltYWdlIG9mIHZlcmlmeSBvcHJcclxuICBwcml2YXRlIF9pbmNyZW1lbnRhbDogYm9vbGVhbiA9IGZhbHNlOyAgLy8gSU5DUi0+dHJ1ZSwgTk9STUFMLT5mYWxzZSAoaG93IGF0dHJpYnV0ZSlcclxuICBwcml2YXRlIF9tZXRob2ROYW1lU25pcHBldDogc3RyaW5nID0gbnVsbDsgLy8gRW50cnkgcG9pbnQgbWV0aG9kTmFtZSBmb3Igc25pcHBldFxyXG4gIHByaXZhdGUgX21vZGU6IHN0cmluZyA9ICdcXDAnOyAvLyBFcnJvcnxXYXJuaW5nXHJcbiAgLy8gYnV0IHdlIHN0aWxsIG5lZWQgdG8gc2tpcCB0aGUgYmxvY2sgb3BlcmF0aW9ucyBpbiB0aGUgY2xpZW50XHJcbiAgcHJpdmF0ZSBfcHJnRGVzY3JpcHRpb246IHN0cmluZyA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfcHVibGljTmFtZTogc3RyaW5nID0gbnVsbDtcclxuICBwcml2YXRlIF9yZXR1cm5WYWw6IEZpZWxkID0gbnVsbDsgLy8gcmV0dXJuIHZhbHVlIG9mIHZlcmlmeSBvcHJcclxuICBwcml2YXRlIF9ydEV2dDogUnVuVGltZUV2ZW50ID0gbnVsbDsgLy8gZm9yIFJhaXNlIGV2ZW50XHJcbiAgcHJpdmF0ZSBfc2VydmVySWQ6IG51bWJlciA9IC0xO1xyXG4gIC8vIHRoZSBpbmRleCBvZiB0aGlzIG9wZXJhdGlvbiBpbiB0aGUgc2VydmVyJ3MgZmxvdyAoMCBtZWFucyBpdCdzIHRoZSBmaXJzdCBvcGVyYXRpb24gaW4gdGhlIGhhbmRsZXIsIDEgZm9yIHRoZSBzZWNvbmQgZXRjLikuIFZhbGlkIGZvcjogU2VydmVyXHJcbiAgcHJpdmF0ZSBjYWxsZWRUYXNrRGVmaW5pdGlvbklkOiBUYXNrRGVmaW5pdGlvbklkID0gbnVsbDtcclxuXHJcbiAgcHJpdmF0ZSBfc2hvdzogQ2FsbE9zU2hvdyA9IENhbGxPc1Nob3cuTm9ybWFsO1xyXG4gIHByaXZhdGUgX3N1YmZvcm1DdHJsTmFtZTogc3RyaW5nID0gbnVsbDsgLy8gZm9yIENhbGwgb3BlcmF0aW9uIHdpdGggc3ViZm9ybSBkZXN0aW5hdGlvblxyXG4gIHByaXZhdGUgX3N1YnR5cGU6IHN0cmluZyA9ICdcXDAnOyAvLyBJZnxFbHNlfExvb3BcclxuICBwcml2YXRlIF90YXNrOiBUYXNrID0gbnVsbDsgLy8gdGhlIHRhc2sgb2YgdGhlIG9wZXJhdGlvblxyXG4gIHByaXZhdGUgX3RleHQ6IHN0cmluZyA9IG51bGw7IC8vIHRoZSB2ZXJpZnkgbWVzc2FnZVxyXG4gIHByaXZhdGUgX3RpdGxlOiBzdHJpbmcgPSBudWxsOyAvLyB0aXRsZSBvZiB2ZXJpZnkgb3ByXHJcbiAgcHJpdmF0ZSBfdGl0bGVFeHA6IEV4cHJlc3Npb24gPSBudWxsOyAvLyBleHByZXNzaW9uIGF0dGFjaGVkIHRvIHRpdGxlIG9mIHZlcmlmeSBvcHJcclxuICBwcml2YXRlIF90eXBlOiBudW1iZXIgPSAwOyAvLyBvcGVyYXRpb24gbnVtYmVyIChsaWtlIGluIE1hZ2ljKVxyXG4gIHByaXZhdGUgX3VuZG86IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBwcml2YXRlIF9pc1JvdXRlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfcm91dGVyUGF0aDogc3RyaW5nID0gbnVsbDtcclxuICBwcml2YXRlIF9vcmlnaW5hbFJvdXRlck91dGxldE5hbWU6IHN0cmluZyA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfcm91dGVQYXJhbXM6IExpc3Q8YW55PiA9IG51bGw7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCl7XHJcbiAgfVxyXG5cclxuICBnZXQgQ2FsbGVkVGFza0RlZmluaXRpb25JZCgpOiBUYXNrRGVmaW5pdGlvbklkIHtcclxuICAgIHJldHVybiB0aGlzLmNhbGxlZFRhc2tEZWZpbml0aW9uSWQ7XHJcbiAgfVxyXG5cclxuICBPcGVyQ2FsbE1vZGU6IENhbGxPcGVyYXRpb25Nb2RlID0gMDtcclxuXHJcbiAgc2V0IFRhc2sodmFsdWU6IFRhc2spIHtcclxuICAgIHRoaXMuX3Rhc2sgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIGdldCBUYXNrKCk6IFRhc2sge1xyXG4gICAgcmV0dXJuIHRoaXMuX3Rhc2s7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIEltbWVkaWF0ZSgpOiAgUHJvbWlzZTxib29sZWFuPiAge1xyXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuX3dhaXRFeHAuZ2V0VmFsKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHBhcnNlIGFuIG9wZXJhdGlvblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZmlsbERhdGEodGFza1JlZjogVGFzaywgZXZ0SGFuZGxlcjogRXZlbnRIYW5kbGVyLCBwYXJzZXI6IFhtbFBhcnNlcik6IHZvaWQge1xyXG4gICAgdGhpcy5fdGFzayA9IHRhc2tSZWY7XHJcbiAgICB0aGlzLl9ldnRIYW5kbGVyID0gZXZ0SGFuZGxlcjtcclxuXHJcbiAgICB3aGlsZSAodGhpcy5pbml0SW5uZXJPYmplY3RzKHBhcnNlciwgcGFyc2VyLmdldE5leHRUYWcoKSwgdGFza1JlZikpIHtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBpbml0IGlubmVyIGF0dHJpYnV0ZXMgb2YgT3BlcmF0aW9uIG9iamVjdCBvbiBwYXJzaW5nIHRpbWVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgaW5pdElubmVyT2JqZWN0cyhwYXJzZXI6IFhtbFBhcnNlciwgZm91bmRUYWdOYW1lOiBzdHJpbmcsIHRhc2tSZWY6IFRhc2spOiBib29sZWFuIHtcclxuICAgIGlmIChmb3VuZFRhZ05hbWUgPT09IG51bGwpXHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBpZiAoZm91bmRUYWdOYW1lID09PSBDb25zdEludGVyZmFjZS5NR19UQUdfRVZFTlQpIHtcclxuICAgICAgdGhpcy5fcnRFdnQgPSBuZXcgUnVuVGltZUV2ZW50KHRhc2tSZWYpO1xyXG4gICAgICB0aGlzLl9ydEV2dC5maWxsRGF0YShwYXJzZXIsIHRhc2tSZWYpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoZm91bmRUYWdOYW1lID09PSBDb25zdEludGVyZmFjZS5NR19UQUdfT1BFUikge1xyXG4gICAgICB0aGlzLmZpbGxBdHRyaWJ1dGVzKHBhcnNlciwgdGFza1JlZik7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChmb3VuZFRhZ05hbWUgPT09IFwiL1wiICsgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX09QRVIpIHtcclxuICAgICAgcGFyc2VyLnNldEN1cnJJbmRleDJFbmRPZlRhZygpOyAvLyBzZXRDdXJySW5kZXgoWG1sUGFyc2VyLmlzTmV4dFRhZ0Nsb3NlZChNR19UQUdfQ09OVFJPTCkpO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChmb3VuZFRhZ05hbWUgPT09IFhNTENvbnN0YW50cy5NR19UQUdfVEFTS0RFRklOSVRJT05JRF9FTlRSWSkge1xyXG4gICAgICB0aGlzLkluaXRUYXNrRGVmaW5pdGlvbklEKHBhcnNlcik7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRXhjZXB0aW9uVG9Mb2dXaXRoTXNnKFwiVGhlcmUgaXMgbm8gc3VjaCB0YWcgaW4gT3BlcmF0aW9uLiBJbnNlcnQgZWxzZSBpZiB0byBPcGVyYXRpb24uaW5pdElubmVyT2JqZWN0cyBmb3IgXCIgKyBmb3VuZFRhZ05hbWUpO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZ2V0IHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBvcGVyYXRpb25cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidGFza1JlZlwiPnRoZSB0YXNrIG9mIHRoZSBoYW5kbGVyIGN1cnJlbnQ8L3BhcmFtPlxyXG4gIHByaXZhdGUgZmlsbEF0dHJpYnV0ZXMocGFyc2VyOiBYbWxQYXJzZXIsIHRhc2tSZWY6IFRhc2spOiB2b2lkIHtcclxuICAgIGxldCB0b2tlbnNWZWN0b3I6IExpc3Q8c3RyaW5nPjtcclxuICAgIGxldCBlbmRDb250ZXh0OiBudW1iZXIgPSBwYXJzZXIuZ2V0WE1MZGF0YSgpLmluZGV4T2YoWE1MQ29uc3RhbnRzLlRBR19DTE9TRSwgcGFyc2VyLmdldEN1cnJJbmRleCgpKTtcclxuXHJcbiAgICBpZiAoZW5kQ29udGV4dCAhPT0gLTEgJiYgZW5kQ29udGV4dCA8IHBhcnNlci5nZXRYTUxkYXRhKCkubGVuZ3RoKSB7XHJcblxyXG4gICAgICAvLyBsYXN0IHBvc2l0aW9uIG9mIGl0cyB0YWdcclxuICAgICAgbGV0IHRhZzogU3RyaW5nID0gcGFyc2VyLmdldFhNTHN1YnN0cmluZyhlbmRDb250ZXh0KTtcclxuICAgICAgcGFyc2VyLmFkZDJDdXJySW5kZXgodGFnLmluZGV4T2YoQ29uc3RJbnRlcmZhY2UuTUdfVEFHX09QRVIpICsgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX09QRVIubGVuZ3RoKTtcclxuXHJcbiAgICAgIHRva2Vuc1ZlY3RvciA9IFhtbFBhcnNlci5nZXRUb2tlbnMocGFyc2VyLmdldFhNTHN1YnN0cmluZyhlbmRDb250ZXh0KSwgWE1MQ29uc3RhbnRzLlhNTF9BVFRSX0RFTElNKTtcclxuICAgICAgdGhpcy5pbml0RWxlbWVudHModG9rZW5zVmVjdG9yLCB0YXNrUmVmKTtcclxuXHJcbiAgICAgIC8vIGluaXQgaW5uZXIgcmVmZXJlbmNlOlxyXG4gICAgICBwYXJzZXIuc2V0Q3VyckluZGV4KGVuZENvbnRleHQgKyBYTUxDb25zdGFudHMuVEFHX0NMT1NFLmxlbmd0aCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZUV4Y2VwdGlvblRvTG9nV2l0aE1zZyhcImluIENvbW1hbmQuRmlsbERhdGEoKSBvdXQgb2Ygc3RyaW5nIGJvdW5kc1wiKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBNYWtlIGluaXRpYWxpemF0aW9uIG9mIHByaXZhdGUgZWxlbWVudHMgYnkgZm91bmQgdG9rZW5zXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInRva2Vuc1ZlY3RvclwiPmZvdW5kIHRva2Vucywgd2hpY2ggY29uc2lzdCBhdHRyaWJ1dGUvdmFsdWUgb2YgZXZlcnkgZm91bmRcdGVsZW1lbnQ8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidGFza1JlZlwiPmN1cnJlbnQ8L3BhcmFtPlxyXG4gIHByaXZhdGUgaW5pdEVsZW1lbnRzKHRva2Vuc1ZlY3RvcjogTGlzdDxTdHJpbmc+LCB0YXNrUmVmOiBUYXNrKTogdm9pZCB7XHJcbiAgICBsZXQgYXR0cmlidXRlOiBTdHJpbmcsIHZhbHVlU3RyO1xyXG4gICAgbGV0IGV4cElkOiBudW1iZXI7XHJcbiAgICBsZXQgaXNHdWlUaHJlYWRFeGVjdXRpb246IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBmb3IgKGxldCBqOiBudW1iZXIgPSAwOyBqIDwgdG9rZW5zVmVjdG9yLmxlbmd0aDsgaiArPSAyKSB7XHJcbiAgICAgIGF0dHJpYnV0ZSA9ICh0b2tlbnNWZWN0b3IuZ2V0X0l0ZW0oaikpO1xyXG4gICAgICB2YWx1ZVN0ciA9ICh0b2tlbnNWZWN0b3IuZ2V0X0l0ZW0oaiArIDEpKTtcclxuXHJcbiAgICAgIHN3aXRjaCAoYXR0cmlidXRlKSB7XHJcbiAgICAgICAgY2FzZSBYTUxDb25zdGFudHMuTUdfQVRUUl9UWVBFOlxyXG4gICAgICAgICAgdGhpcy5fdHlwZSA9IFhtbFBhcnNlci5nZXRJbnQodmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0ZMRDpcclxuICAgICAgICAgIHRoaXMuX2ZpZWxkID0gT3BlcmF0aW9uLkluaXRGaWVsZCh2YWx1ZVN0ciwgdGhpcy5fdGFzayk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFhNTENvbnN0YW50cy5NR19BVFRSX0VYUDpcclxuICAgICAgICAgIGV4cElkID0gWG1sUGFyc2VyLmdldEludCh2YWx1ZVN0cik7XHJcbiAgICAgICAgICB0aGlzLl9leHAgPSB0YXNrUmVmLmdldEV4cEJ5SWQoZXhwSWQpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1RFWFQ6XHJcbiAgICAgICAgICB0aGlzLl90ZXh0ID0gWG1sUGFyc2VyLnVuZXNjYXBlKHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9NT0RFOlxyXG4gICAgICAgICAgdGhpcy5fbW9kZSA9IHZhbHVlU3RyWzBdO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1NVQlRZUEU6XHJcbiAgICAgICAgICB0aGlzLl9zdWJ0eXBlID0gdmFsdWVTdHJbMF07XHJcbiAgICAgICAgICBpZiAodGhpcy5fdHlwZSA9PT0gQ29uc3RJbnRlcmZhY2UuTUdfT1BFUl9CTE9DSykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fc3VidHlwZSA9PT0gJ0UnKVxyXG4gICAgICAgICAgICAgIHRoaXMuX3R5cGUgPSBDb25zdEludGVyZmFjZS5NR19PUEVSX0VMU0U7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuX3N1YnR5cGUgPT09ICdMJylcclxuICAgICAgICAgICAgICB0aGlzLl90eXBlID0gQ29uc3RJbnRlcmZhY2UuTUdfT1BFUl9MT09QO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0NMT1NFOlxyXG4gICAgICAgICAgdGhpcy5fYmxvY2tDbG9zZSA9IFhtbFBhcnNlci5nZXRJbnQodmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0VORDpcclxuICAgICAgICAgIHRoaXMuX2Jsb2NrRW5kID0gWG1sUGFyc2VyLmdldEludCh2YWx1ZVN0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfSE9XOlxyXG4gICAgICAgICAgdGhpcy5faW5jcmVtZW50YWwgPSAodmFsdWVTdHIgPT09IFwiSVwiKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9VTkRPOlxyXG4gICAgICAgICAgaWYgKHZhbHVlU3RyWzBdID09PSAnTicpXHJcbiAgICAgICAgICAgIHRoaXMuX3VuZG8gPSBmYWxzZTtcclxuICAgICAgICAgIGVsc2UgaWYgKHZhbHVlU3RyWzBdID09PSAnWScpXHJcbiAgICAgICAgICAgIHRoaXMuX3VuZG8gPSB0cnVlO1xyXG4gICAgICAgICAgZWxzZSBMb2dnZXIuSW5zdGFuY2UuV3JpdGVFeGNlcHRpb25Ub0xvZ1dpdGhNc2coXCJpbiBPcGVyYXRpb24uaW5pdEVsZW1lbnRzKCk6IE5vIHN1Y2ggdmFsdWUgdG8gdGhlIE1HX0FUVFJfVU5ETyBmb3IgXCIgKyB2YWx1ZVN0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfRElTUExBWTpcclxuICAgICAgICAgIHRoaXMuX2Rpc3BsYXkgPSB2YWx1ZVN0clswXTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9XQUlUOlxyXG4gICAgICAgICAgdGhpcy5fd2FpdEV4cC5zZXRWYWwodGFza1JlZiwgdmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1JFVEFJTl9GT0NVUzpcclxuICAgICAgICAgIHRoaXMuX3JldGFpbkZvY3VzLnNldFZhbCh0YXNrUmVmLCB2YWx1ZVN0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfU1lOQ19EQVRBOlxyXG4gICAgICAgICAgdGhpcy5fc3luY0RhdGEuc2V0VmFsKHRhc2tSZWYsIHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9TSE9XOlxyXG4gICAgICAgICAgdGhpcy5fc2hvdyA9IDxDYWxsT3NTaG93PlhtbFBhcnNlci5nZXRJbnQodmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0NORDpcclxuICAgICAgICAgIHRoaXMuX2NvbmRFeHAuc2V0VmFsKHRhc2tSZWYsIHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9BUkdMSVNUOlxyXG4gICAgICAgICAgdGhpcy5fYXJnTGlzdCA9IG5ldyBBcmd1bWVudHNMaXN0KCk7XHJcbiAgICAgICAgICB0aGlzLl9hcmdMaXN0LmZpbGxMaXN0KHZhbHVlU3RyLCB0aGlzLl90YXNrKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9SRUZSRVNIT046XHJcbiAgICAgICAgICB0aGlzLl9hcmdMaXN0LlJlZnJlc2hPblN0cmluZyA9IHZhbHVlU3RyLlRyaW0oKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9TRVJWRVJfSUQ6XHJcbiAgICAgICAgICB0aGlzLl9zZXJ2ZXJJZCA9IFhtbFBhcnNlci5nZXRJbnQodmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX09QRVJfQ0FMTE1PREU6XHJcbiAgICAgICAgICB0aGlzLk9wZXJDYWxsTW9kZSA9IDxDYWxsT3BlcmF0aW9uTW9kZT52YWx1ZVN0clswXTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfU1VCRk9STV9DVFJMOlxyXG4gICAgICAgICAgdGhpcy5fc3ViZm9ybUN0cmxOYW1lID0gWG1sUGFyc2VyLnVuZXNjYXBlKHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9DSEVDS19CWV9TRVJWRVI6XHJcbiAgICAgICAgICB0aGlzLl9jaGVja0J5U2VydmVyID0gWG1sUGFyc2VyLmdldEJvb2xlYW4odmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1BVQkxJQzpcclxuICAgICAgICAgIHRoaXMuX3B1YmxpY05hbWUgPSB2YWx1ZVN0cjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9QUkdfREVTQ1JJUFRJT046XHJcbiAgICAgICAgICB0aGlzLl9wcmdEZXNjcmlwdGlvbiA9IHZhbHVlU3RyO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0NQWV9HTEJfUFJNUzpcclxuICAgICAgICAgIHRoaXMuX2dsb2JhbFBhcmFtc1Nob3VsZEJlQ29waWVkID0gWG1sUGFyc2VyLmdldEJvb2xlYW4odmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0VYRUNfT05fU0VSVkVSOlxyXG4gICAgICAgICAgdGhpcy5fZXhlY09uU2VydmVyID0gWG1sUGFyc2VyLmdldEJvb2xlYW4odmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblx0XHRjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfRVhFQ19PTl9DTElFTlQ6XHJcbiAgICAgICAgICB0aGlzLl9leGVjT25DbGllbnQgPSBYbWxQYXJzZXIuZ2V0Qm9vbGVhbih2YWx1ZVN0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfVElUTEU6XHJcbiAgICAgICAgICB0aGlzLl90aXRsZSA9IFhtbFBhcnNlci51bmVzY2FwZSh2YWx1ZVN0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfVElUTEVfRVhQOlxyXG4gICAgICAgICAgZXhwSWQgPSBYbWxQYXJzZXIuZ2V0SW50KHZhbHVlU3RyKTtcclxuICAgICAgICAgIHRoaXMuX3RpdGxlRXhwID0gdGFza1JlZi5nZXRFeHBCeUlkKGV4cElkKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9JTUFHRTpcclxuICAgICAgICAgIHRoaXMuX2ltYWdlID0gdmFsdWVTdHJbMF07XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfQlVUVE9OUzpcclxuICAgICAgICAgIHRoaXMuX2J1dHRvbnMgPSB2YWx1ZVN0clswXTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9SRVRVUk5fVkFMOlxyXG4gICAgICAgICAgdGhpcy5fcmV0dXJuVmFsID0gT3BlcmF0aW9uLkluaXRGaWVsZCh2YWx1ZVN0ciwgdGhpcy5fdGFzayk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfRVJSX0xPR19BUFBFTkQ6XHJcbiAgICAgICAgICB0aGlzLl9lcnJMb2dBcHBlbmQgPSBYbWxQYXJzZXIuZ2V0Qm9vbGVhbih2YWx1ZVN0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfT1BFUl9NRVRIT0ROQU1FOlxyXG4gICAgICAgICAgdGhpcy5fbWV0aG9kTmFtZVNuaXBwZXQgPSB2YWx1ZVN0cjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9JU19HVUlfVEhSRUFEX0VYRUNVVElPTjpcclxuICAgICAgICAgIGlzR3VpVGhyZWFkRXhlY3V0aW9uID0gWG1sUGFyc2VyLmdldEJvb2xlYW4odmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0lTX1JPVVRFOlxyXG4gICAgICAgICAgdGhpcy5faXNSb3V0ZSA9IFhtbFBhcnNlci5nZXRCb29sZWFuKHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgWE1MQ29uc3RhbnRzLk1HX0FUVFJfUk9VVEVSX1BBVEg6XHJcbiAgICAgICAgICB0aGlzLl9yb3V0ZXJQYXRoID0gWG1sUGFyc2VyLnVuZXNjYXBlKHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVFeGNlcHRpb25Ub0xvZ1dpdGhNc2coXCJUaGVyZSBpcyBubyBzdWNoIHRhZyBpbiBPcGVyYXRpb24gY2xhc3MuIEluc2VydCBjYXNlIHRvIE9wZXJhdGlvbi5pbml0RWxlbWVudHMgZm9yIFwiICsgYXR0cmlidXRlKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5fc2VydmVySWQgPiAtMSlcclxuICAgICAgdGhpcy5fY21kVG9TZXJ2ZXIgPSBDb21tYW5kRmFjdG9yeS5DcmVhdGVFeGVjT3BlckNvbW1hbmQodGhpcy5fdGFzay5nZXRUYXNrVGFnKCksIFwiXCIgKyB0aGlzLl9ldnRIYW5kbGVyLmdldElkKCksIHRoaXMuX3NlcnZlcklkLCBJbnQzMi5NaW5WYWx1ZSwgbnVsbCk7XHJcblxyXG4gICAgaWYgKHRoaXMuX2lzUm91dGUpIHtcclxuICAgICAgdGhpcy5fb3JpZ2luYWxSb3V0ZXJPdXRsZXROYW1lID0gdGhpcy5fc3ViZm9ybUN0cmxOYW1lICE9PSBudWxsID8gdGhpcy5fc3ViZm9ybUN0cmxOYW1lIDogXCJcIjtcclxuXHJcbiAgICAgIGlmICh0aGlzLl9zdWJmb3JtQ3RybE5hbWUgPT0gbnVsbCkge1xyXG4gICAgICAgIGxldCBkZWZhdWx0Um91dGVyT3V0bGV0OiBNZ0NvbnRyb2xCYXNlID0gdGhpcy5fdGFzay5nZXRGb3JtKCkuRGVmYXVsdFJvdXRlck91dGxldDtcclxuICAgICAgICB0aGlzLl9zdWJmb3JtQ3RybE5hbWUgPSBkZWZhdWx0Um91dGVyT3V0bGV0ICE9PSBudWxsID8gZGVmYXVsdFJvdXRlck91dGxldC5OYW1lIDogXCJcIjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vL1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwicGFyc2VyXCI+PC9wYXJhbT5cclxuICBJbml0VGFza0RlZmluaXRpb25JRChwYXJzZXI6IFhtbFBhcnNlcik6IHZvaWQge1xyXG4gICAgbGV0IHhtbEJ1ZmZlcjogc3RyaW5nID0gcGFyc2VyLlJlYWRUb0VuZE9mQ3VycmVudEVsZW1lbnQoKTtcclxuICAgIGxldCB0YXNrRGVmaW5pdGlvbklkVGFibGVTYXhIYW5kbGVyOiBUYXNrRGVmaW5pdGlvbklkVGFibGVTYXhIYW5kbGVyID0gbmV3IFRhc2tEZWZpbml0aW9uSWRUYWJsZVNheEhhbmRsZXIodGhpcy5TZXRUYXNrRGVmaW5pdGlvbklkKTtcclxuICAgIHRhc2tEZWZpbml0aW9uSWRUYWJsZVNheEhhbmRsZXIucGFyc2UoeG1sQnVmZmVyKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gY2FsbGJhY2sgZm9yIHRoZSBzYXggcGFyc2VyXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ0YXNrRGVmaW5pdGlvbklkXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ4bWxJZFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiZGVmYXVsdFRhZ0xpc3RcIj48L3BhcmFtPlxyXG4gIHByaXZhdGUgU2V0VGFza0RlZmluaXRpb25JZCh0YXNrRGVmaW5pdGlvbklkOiBUYXNrRGVmaW5pdGlvbklkKTogdm9pZCB7XHJcbiAgICB0aGlzLmNhbGxlZFRhc2tEZWZpbml0aW9uSWQgPSB0YXNrRGVmaW5pdGlvbklkO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEluaXRpYWxpemUgdGhlIGZpZWxkXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInZhbHVlU3RyXCI+YSByZWZlcmVuY2UgdG8gdGhlIGZpZWxkPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInRhc2tcIj48L3BhcmFtPlxyXG4gIHN0YXRpYyBJbml0RmllbGQodmFsdWVTdHI6IHN0cmluZywgdGFzazogVGFzayk6IEZpZWxkIHtcclxuICAgIGxldCBUYXNrRmllbGQ6IExpc3Q8c3RyaW5nPiA9IFhtbFBhcnNlci5nZXRUb2tlbnModmFsdWVTdHIsICcsJykvKicsJyovO1xyXG4gICAgaWYgKFRhc2tGaWVsZC5sZW5ndGggPT09IDIpIHtcclxuICAgICAgbGV0IHBhcmVudDogbnVtYmVyID0gTk51bWJlci5QYXJzZShUYXNrRmllbGQuZ2V0X0l0ZW0oMCkpO1xyXG4gICAgICBsZXQgZmxkSUQ6IG51bWJlciA9IE5OdW1iZXIuUGFyc2UoVGFza0ZpZWxkLmdldF9JdGVtKDEpKTtcclxuICAgICAgbGV0IGZpZWxkOiBGaWVsZCA9IDxGaWVsZD50YXNrLmdldEZpZWxkRGVmKHBhcmVudCwgZmxkSUQpO1xyXG4gICAgICByZXR1cm4gZmllbGQ7XHJcbiAgICB9XHJcbiAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVFeGNlcHRpb25Ub0xvZ1dpdGhNc2coTlN0cmluZy5Gb3JtYXQoXCJVbmtub3duIGZpZWxkOiAnezB9J1wiLCB2YWx1ZVN0cikpO1xyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZXhlY3V0ZSB0aGUgb3BlcmF0aW9uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm1wcmdDcmVhdG9yXCI+cmVsZXZhbnQgb25seSB3aGVuIHRoZSBvcGVyYXRpb24gYmVsb25ncyB0byBhIG1haW4gcHJvZ3JhbS5cclxuICAvLy8gICBJdCBpZGVudGlmaWVzIHRoZSB0YXNrIHdoaWNoIGNhdXNlZCB0aGlzIG1haW4gcHJvZ3JhbSB0byBwYXJ0aWNpcGF0ZSBpbiB0aGUgcnVudGltZVxyXG4gIC8vLyAgIGZsb3cgKGkuZS4gd2hlbiBydW5uaW5nIGEgdGFzayBmcm9tIGEgZGlmZmVyZW50IGNvbXBvbmVudCwgd2UgaW5zdGFudGlhdGUgaGlzIG1haW4gcHJvZ3JhbVxyXG4gIC8vLyAgIHJpZ2h0IGFib3ZlIGl0LlxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiY3RybFwiPnRoZSBmb2N1cyBuZWVkIHRvIGJlIHJldHVybmVkIGFmdGVyIHRoZSBWRVJJRlkgb3BlcmF0aW9uIGluIE1lc3NhZ2UgQm94IG5lZWRzIG9ubHlcclxuICAvLy8gICBhbGwgYW5vdGhlciBvcGVyYXRpb25zIGNhbiB1c2UgbnVsbFxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicmV0dXJuZWRGcm9tU2VydmVyXCI+dHJ1ZSBpZiB0aGUgc2VydmVyIHJldHVybmVkIHRoZSBleGVjdXRpb24gdG8gdGhpcyBvcGVyYXRpb248L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gYm9vbGVhbiBmb3IgdmVyaWZ5IGFuZCBibG9jayBvcGVyYXRpb25zPC9yZXR1cm5zPlxyXG4gIGFzeW5jIGV4ZWN1dGUocmV0dXJuZWRGcm9tU2VydmVyOiBib29sZWFuKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBsZXQgbGFzdFJ0RXZlbnQ6IFJ1blRpbWVFdmVudCA9IEFjY2Vzc0hlbHBlci5ldmVudHNNYW5hZ2VyLmdldExhc3RSdEV2ZW50KCk7XHJcbiAgICBsZXQgbXByZ0NyZWF0b3I6IFRhc2sgPSBudWxsO1xyXG4gICAgbGV0IGZsb3dNb25pdG9yOiBGbG93TW9uaXRvclF1ZXVlID0gRmxvd01vbml0b3JRdWV1ZS5JbnN0YW5jZTtcclxuXHJcbiAgICBpZiAobGFzdFJ0RXZlbnQgIT09IG51bGwpXHJcbiAgICAgIG1wcmdDcmVhdG9yID0gPFRhc2s+bGFzdFJ0RXZlbnQuZ2V0TWFpblByZ0NyZWF0b3IoKTtcclxuXHJcbiAgICBpZiAocmV0dXJuZWRGcm9tU2VydmVyIHx8XHJcbiAgICAgICghcmV0dXJuZWRGcm9tU2VydmVyICYmICh0aGlzLl90eXBlICE9PSBDb25zdEludGVyZmFjZS5NR19PUEVSX1NFUlZFUiB8fCAhdGhpcy5fY29uZEV4cC5pc1NlcnZlckV4cCgpKSkpIHtcclxuICAgICAgaWYgKCEgYXdhaXQgdGhpcy5jYW5FeGVjdXRlKCkpIHtcclxuICAgICAgICBpZiAodGhpcy5fdHlwZSAhPT0gQ29uc3RJbnRlcmZhY2UuTUdfT1BFUl9MT09QKVxyXG4gICAgICAgICAgYXdhaXQgZmxvd01vbml0b3IuYWRkRmxvd0ZpZWxkT3BlcmF0aW9uKHRoaXMsIGZhbHNlLCB0aGlzLl90YXNrLkdldFRhc2tEZXRhaWxzKCkpO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuX3R5cGUgIT09IENvbnN0SW50ZXJmYWNlLk1HX09QRVJfTE9PUCAmJiB0aGlzLl90eXBlICE9PSBDb25zdEludGVyZmFjZS5NR19PUEVSX0VOREJMT0NLKVxyXG4gICAgLy8gV2UgY2FsbCBhZGRGbG93T3BlcmF0aW9uU2VsZWN0IG9ubHkgYXQgdGhlIGJlZ2luaW5nIGFuZCBlbmQgb2YgdGhlIGxvb3AgYXQgRXZlbnRIYW5kbGVyOjpleGVjdXRlXHJcbiAgICAgIGF3YWl0IGZsb3dNb25pdG9yLmFkZEZsb3dGaWVsZE9wZXJhdGlvbih0aGlzLCB0cnVlLCB0aGlzLl90YXNrLkdldFRhc2tEZXRhaWxzKCkpO1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIHN3aXRjaCAodGhpcy5fdHlwZSkge1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfT1BFUl9WRVJJRlk6XHJcbiAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5vcGVyVmVyaWZ5KCk7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19PUEVSX0JMT0NLOlxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMub3BlckJsb2NrKCk7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19PUEVSX0xPT1A6XHJcbiAgICAgICAgICBpZiAoIXRoaXMuZ2V0RXhlY09uU2VydmVyKCkpXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm9wZXJCbG9jaygpO1xyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMub3BlclNlcnZlcihtcHJnQ3JlYXRvcik7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfT1BFUl9FTFNFOlxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMub3BlckVsc2UoKTtcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX09QRVJfRVZBTFVBVEU6XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLm9wZXJFdmFsdWF0ZSgpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19PUEVSX1VQREFURTpcclxuICAgICAgICAgIGF3YWl0IHRoaXMub3BlclVwZGF0ZShtcHJnQ3JlYXRvcik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX09QRVJfUkFJU0VfRVZFTlQ6XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLm9wZXJSYWlzZUV2ZW50KG1wcmdDcmVhdG9yLCByZXR1cm5lZEZyb21TZXJ2ZXIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19PUEVSX1NFUlZFUjpcclxuICAgICAgICAgIGF3YWl0IHRoaXMub3BlclNlcnZlcihtcHJnQ3JlYXRvcik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX09QRVJfQ0FMTDpcclxuICAgICAgICAgIGlmICh0aGlzLl9wdWJsaWNOYW1lICE9IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5vcGVyQ2FsbFBhcmFsbGVsKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIGlmICh0aGlzLl9zdWJmb3JtQ3RybE5hbWUgPT0gbnVsbClcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5vcGVyQ2FsbChtcHJnQ3JlYXRvcik7XHJcbiAgICAgICAgICAvLyBTdWJmb3JtIERlc3RpbmF0aW9uIENhbGwgb1IgQ2FsbCBSb3V0ZVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGxldCBzdWJmb3JtVGFzazogVGFzaztcclxuICAgICAgICAgICAgbGV0IGlzRW5kUHJvZzogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5fY2hlY2tCeVNlcnZlcikge1xyXG4gICAgICAgICAgICAgIGlmICghKHRoaXMuX2NtZFRvU2VydmVyIGluc3RhbmNlb2YgRXhlY09wZXJDb21tYW5kKSlcclxuICAgICAgICAgICAgICAgIERlYnVnLkFzc2VydChmYWxzZSk7XHJcblxyXG4gICAgICAgICAgICAgIGxldCBjb21tYW5kOiBFeGVjT3BlckNvbW1hbmQgPSA8RXhlY09wZXJDb21tYW5kPnRoaXMuX2NtZFRvU2VydmVyO1xyXG4gICAgICAgICAgICAgIGNvbW1hbmQuQ2hlY2tPbmx5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICBhd2FpdCB0aGlzLm9wZXJDYWxsKG1wcmdDcmVhdG9yKTtcclxuICAgICAgICAgICAgICBjb21tYW5kLkNoZWNrT25seSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIGlmIChBY2Nlc3NIZWxwZXIuZXZlbnRzTWFuYWdlci5nZXROZXh0T3BlcklkeCh0aGlzLCB0cnVlKSA+IC0xKVxyXG4gICAgICAgICAgICAgICAgaXNFbmRQcm9nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGlzRW5kUHJvZykge1xyXG4gICAgICAgICAgICAgIGxldCBkZXN0U3ViRm9ybTogTWdDb250cm9sID0gKDxNZ0Zvcm0+dGhpcy5fdGFzay5nZXRGb3JtKCkpLmdldFN1YkZvcm1DdHJsQnlOYW1lKHRoaXMuX3N1YmZvcm1DdHJsTmFtZSk7XHJcblxyXG4gICAgICAgICAgICAgIC8vIEEgY2FsbCByb3V0ZSBvcGVyYXRpb24gbmVlZHMgYW4gb3V0bGV0LiBJZiBhIG1hdGNoaW5nIG91dGxldCBpcyBub3QgZm91bmQsIENhbGwgcm91dGUgY2Fubm90IGV4ZWN1dGUuXHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuX2lzUm91dGUgJiYgKGRlc3RTdWJGb3JtID09PSBudWxsIHx8ICFkZXN0U3ViRm9ybS5Jc1JvdXRlck91dGxldCgpKSlcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgICAgaWYgKGRlc3RTdWJGb3JtICE9IG51bGwpIHtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5faXNSb3V0ZSkge1xyXG4gICAgICAgICAgICAgICAgICBsZXQgY2FuUm91dGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgbGV0IHJ0RXZudCA9IEFjY2Vzc0hlbHBlci5ldmVudHNNYW5hZ2VyLmdldExhc3RSdEV2ZW50KCk7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChydEV2bnQgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9yb3V0ZVBhcmFtcyA9IHJ0RXZudC5nZXRSb3V0ZVBhcmFtTGlzdCgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoKGF3YWl0IHJ0RXZudC5nZXRBcmdMaXN0KCkuZ2V0QXJnKDApLmdldFZhbHVlKFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEEsIDApKS50cmltKCkgPT09IHRoaXMuX3JvdXRlclBhdGggJiZcclxuICAgICAgICAgICAgICAgICAgICAgICgocnRFdm50LmdldEFyZ0xpc3QoKS5nZXRBcmcoMSkuc2tpcEFyZygpKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoYXdhaXQgcnRFdm50LmdldEFyZ0xpc3QoKS5nZXRBcmcoMSkuZ2V0VmFsdWUoU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQSwgMCkpLnRyaW0oKSA9PT0gdGhpcy5fb3JpZ2luYWxSb3V0ZXJPdXRsZXROYW1lKSlcclxuICAgICAgICAgICAgICAgICAgICAgIGNhblJvdXRlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjYW5Sb3V0ZSlcclxuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHN1YmZvcm1UYXNrID0gPFRhc2s+ZGVzdFN1YkZvcm0uZ2V0U3ViZm9ybVRhc2soKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoc3ViZm9ybVRhc2sgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICBsZXQgdGVybWluYXRlVGFza0dyYWNlZnVsbHkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICBsZXQgcnRFdm50ID0gQWNjZXNzSGVscGVyLmV2ZW50c01hbmFnZXIuZ2V0TGFzdFJ0RXZlbnQoKTtcclxuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2lzUm91dGUgJiYgcnRFdm50ICE9PSBudWxsICYmIHJ0RXZudC5pc0d1aVRyaWdnZXJlZEV2ZW50KCkpXHJcbiAgICAgICAgICAgICAgICAgICAgdGVybWluYXRlVGFza0dyYWNlZnVsbHkgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgaWYgKGF3YWl0IHN1YmZvcm1UYXNrLmVuZFRhc2sodHJ1ZSwgZmFsc2UsICF0ZXJtaW5hdGVUYXNrR3JhY2VmdWxseSwgdHJ1ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcGFyZW50VGFzazogVGFzayA9IDxUYXNrPmRlc3RTdWJGb3JtLmdldEZvcm0oKS5nZXRUYXNrKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50VGFzay5UYXNrU2VydmljZS5SZW1vdmVSZWNvbXB1dGVzKHBhcmVudFRhc2ssIHN1YmZvcm1UYXNrKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgIC8vIGlmIHRoZSB0YXNrIGZhaWxlZCB0byB0ZXJtaW5hdGUsIGRvIG5vIHByb2NlZWQgdG8gY2FsbCB0aGUgbmV3IHRhc2suXHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoTGFzdEZvY3VzZWRNYW5hZ2VyLmdldExhc3RGb2N1c2VkQ29udHJvbCgpICE9IG51bGwgJiZcclxuICAgICAgICAgICAgICAgICAgTGFzdEZvY3VzZWRNYW5hZ2VyLmdldExhc3RGb2N1c2VkQ29udHJvbCgpLmlzRGVzY2VuZGVudE9mQ29udHJvbChkZXN0U3ViRm9ybSkpXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3Rhc2suUmV0YWluRm9jdXMgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGVsc2UgdGhpcy5fdGFzay5SZXRhaW5Gb2N1cyA9IGF3YWl0IHRoaXMuX3JldGFpbkZvY3VzLmdldFZhbCgpO1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5vcGVyQ2FsbChtcHJnQ3JlYXRvcik7XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAvLyBDYWxsIG9wZXJhdGlvbiBzaG91bGQgcmV0dXJuIHdoZXRoZXIgaXQgZXhlY3V0ZWQgYSBDYWxsIFJvdXRlIG9yIG5vdC5cclxuICAgICAgICAgIC8vIFRoaXMgaXMgbmVlZGVkIGJ5IHRoZSBjYWxsZXIgYmVjYXVzZSwgaXQgaGFzIHRvIHN0b3AgZXhlY3V0aW5nIHN1YnNlcXVlbnRcclxuICAgICAgICAgIC8vIG9wZXJhdGlvbnMgaW4gY2FzZSBhIGNhbGwgcm91dGUgZ2V0cyBleGVjdXRlZC5cclxuICAgICAgICAgIHJldHVybiB0aGlzLl9pc1JvdXRlO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVFeGNlcHRpb25Ub0xvZ1dpdGhNc2coXCJUaGVyZSBpcyBubyBzdWNoIHR5cGUgb2Ygb3BlcmF0aW9uIFwiICsgdGhpcy5fdHlwZSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4KSB7XHJcbiAgICAgIHRocm93IGV4O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgY2FsbCBhIHBhcmFsbGVsIHJpY2gtY2xpZW50IHByb2dyYW1cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgb3BlckNhbGxQYXJhbGxlbCgpOiB2b2lkIHtcclxuICAgIE9wZXJhdGlvbi5jYWxsUGFyYWxsZWwodGhpcy5fdGFzaywgdGhpcy5fcHVibGljTmFtZSwgdGhpcy5fYXJnTGlzdCwgdGhpcy5fZ2xvYmFsUGFyYW1zU2hvdWxkQmVDb3BpZWQsIHRoaXMuX3ByZ0Rlc2NyaXB0aW9uKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBjYWxsUGFyYWxsZWwodGFzazogVGFzaywgcHVibGljTmFtZTogc3RyaW5nLCBhcmdMaXN0OiBBcmd1bWVudHNMaXN0LCBnbG9iYWxQYXJhbXNTaG91bGRCZUNvcGllZDogYm9vbGVhbiwgcHJnRGVzY3JpcHRpb246IHN0cmluZyk6IHZvaWQge1xyXG4gIC8vICAgaWYgKHRhc2suSXNPZmZsaW5lKSB7XHJcbiAgLy8gICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZUV4Y2VwdGlvblRvTG9nV2l0aE1zZyhcIkNhbid0IHJ1biBhIHBhcmFsbGVsIHByb2dyYW0gZnJvbSBhbiBvZmZsaW5lIHRhc2tcIik7XHJcbiAgLy8gICAgIHJldHVybjtcclxuICAvLyAgIH1cclxuICAvL1xyXG4gIC8vICAgLy8gIFRoZSByaWNoLWNsaWVudCB3aWxsIHF1ZXJ5IHRoZSBydW50aW1lLWVuZ2luZSBmb3IgdGhlIHVwLXRvLWRhdGUgbGlzdCBvZiBnbG9iYWwgcGFyYW1zXHJcbiAgLy8gICAvLyAgb2YgdGhlIGN1cnJlbnQgY29udGV4dCBvbmx5IGlmIHRoZSBjYWxsRUQgKHBhcmFsbGVsKSBwcm9ncmFtIHJlcXVlc3RzIGNvcHlpbmcgb2YgZ2xvYmFsIHBhcmFtcyxcclxuICAvLyAgIC8vICB0aGUgY2FsbEVSIHByb2dyYW0gc2hvdWxkIHF1ZXJ5IHRoZW0gZnJvbSB0aGUgcnVudGltZS1lbmdpbmVcclxuICAvLyAgIGlmIChnbG9iYWxQYXJhbXNTaG91bGRCZUNvcGllZCkge1xyXG4gIC8vICAgICBsZXQgbWdEYXRhOiBNR0RhdGEgPSB0YXNrLmdldE1HRGF0YSgpO1xyXG4gIC8vICAgICBsZXQgY21kOiBJQ2xpZW50Q29tbWFuZCA9IENvbW1hbmRGYWN0b3J5LkNyZWF0ZVF1ZXJ5R2xvYmFsUGFyYW1zQ29tbWFuZCgpO1xyXG4gIC8vICAgICBtZ0RhdGEuQ21kc1RvU2VydmVyLkFkZChjbWQpO1xyXG4gIC8vICAgICBDb21tYW5kc1Byb2Nlc3Nvck1hbmFnZXIuR2V0Q29tbWFuZHNQcm9jZXNzb3IoKS5FeGVjdXRlKENvbW1hbmRzUHJvY2Vzc29yQmFzZV9TZW5kaW5nSW5zdHJ1Y3Rpb24uT05MWV9DT01NQU5EUyk7XHJcbiAgLy8gICB9XHJcbiAgLy8gICAvLyBjbG9uZSB0aGUgZXhlY3V0aW9uIHByb3BlcnRpZXMgb2YgdGhlIGN1cnJlbnQgY2xpZW50XHJcbiAgLy8gICBMb2dnZXIuaW5zdGFuY2UuV3JpdGVFcnJvclRvTG9nKFwiY2FsbFBhcmFsbGVsIGNhbGxlZFwiKTtcclxuICAvLyAgIGxldCBjYWxsZWRQcm9ncmFtUHJvcHM6IGFueSA9IENsaWVudE1hbmFnZXIuSW5zdGFuY2UuY29weUV4ZWN1dGlvblByb3BzKCk7XHJcbiAgLy8gICBTZXJ2ZXJDb25maWcuSW5zdGFuY2Uuc2V0R2xvYmFsUGFyYW1zKG51bGwpO1xyXG4gIC8vXHJcbiAgLy8gICAvLyBzZXQgdGhlIGNhbGxlZCBwcm9ncmFtJ3MgaW50ZXJuYWwgbmFtZVxyXG4gIC8vICAgY2FsbGVkUHJvZ3JhbVByb3BzLnNldF9JdGVtKENvbnN0SW50ZXJmYWNlLlJFUV9QUkdfTkFNRSwgcHVibGljTmFtZSk7XHJcbiAgLy9cclxuICAvLyAgIC8vIFNlcnZlciBzZW5kcyBwcmdEZXNjaXBydGlvbiBvbmx5IHdoZW4gUHVibGljTmFtZSBpcyBub3Qgc3BlY2lmaWVkLlxyXG4gIC8vICAgLy8gT3RoZXJ3aXNlIHNlcnZlciBzZW5kcyBhIGZpY3RpdmUgcHJnRGVzY3JpcHRpb24gbGlrZSA6IF9Qcm9ncmFtX0lkXzxJU04+LlxyXG4gIC8vICAgLy8gV2hlbiBwdWJsaWMgbmFtZSBpcyBzcGVjaWZpZWQgcHJnRGVzY3JpcHRpb24gaXMgbm90IHVzZWQgYW5kIGl0IHdpbGwgYmUgbnVsbC5cclxuICAvLyAgIGlmICghTlN0cmluZy5Jc051bGxPckVtcHR5KHByZ0Rlc2NyaXB0aW9uKSkge1xyXG4gIC8vICAgICBjYWxsZWRQcm9ncmFtUHJvcHMuc2V0X0l0ZW0oQ29uc3RJbnRlcmZhY2UuUkVRX1BSR19ERVNDUklQVElPTiwgcHJnRGVzY3JpcHRpb24pO1xyXG4gIC8vICAgfVxyXG4gIC8vICAgY2FsbGVkUHJvZ3JhbVByb3BzLnNldF9JdGVtKENvbnN0SW50ZXJmYWNlLlBBUkFMTEVMX0VYRUNVVElPTiwgXCJZXCIpO1xyXG4gIC8vXHJcbiAgLy8gICAvLyBhcmd1bWVudHMgdG8gdGhlIHBhcmFsbGVsIHByb2dyYW1cclxuICAvLyAgIGlmIChhcmdMaXN0ICE9PSBudWxsKSB7XHJcbiAgLy8gICAgIGxldCBwcmdBcmdzOiBzdHJpbmcgPSBhcmdMaXN0LnRvVVJMKHRydWUpO1xyXG4gIC8vICAgICBjYWxsZWRQcm9ncmFtUHJvcHMuc2V0X0l0ZW0oQ29uc3RJbnRlcmZhY2UuUkVRX0FSR1MsIHByZ0FyZ3MpO1xyXG4gIC8vICAgfVxyXG4gIC8vICAgbGV0IFhNTGRhdGE6IFN0cmluZ0J1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcigpO1xyXG4gIC8vICAgdHJ5IHtcclxuICAvLyAgICAgY2FsbGVkUHJvZ3JhbVByb3BzLnN0b3JlVG9YTUwoWE1MZGF0YSk7XHJcbiAgLy9cclxuICAvLyAgICAgLy8gSWYgZW5jb2Rpbmcgd2FzIGRpc2FibGVkLCBlbmFibGUgaXQgdG8gY3JlYXRlIHRoZSByaWdodCBjb21tYW5kIGxpbmUgZm9yIHRoZSBwYXJhbGxlbCBwcm9ncmFtXHJcbiAgLy8gICAgIGxldCBlbmNvZGluZ0VuYWJsZWQ6IGJvb2xlYW4gPSBIdHRwVXRpbGl0eS5FbmNvZGluZ0VuYWJsZWQ7XHJcbiAgLy8gICAgIGlmICghZW5jb2RpbmdFbmFibGVkKVxyXG4gIC8vICAgICAgIEh0dHBVdGlsaXR5LkVuY29kaW5nRW5hYmxlZCA9IHRydWU7XHJcbiAgLy9cclxuICAvLyAgICAgbGV0IHNwYXduaW5nQXJndW1lbnRzOiBzdHJpbmcgPSBIdHRwVXRpbGl0eS5VcmxFbmNvZGUoWE1MZGF0YS5Ub1N0cmluZygpLCBFbmNvZGluZy5VVEY4KTtcclxuICAvLyAgICAgaWYgKCFlbmNvZGluZ0VuYWJsZWQpXHJcbiAgLy8gICAgICAgSHR0cFV0aWxpdHkuRW5jb2RpbmdFbmFibGVkID0gZmFsc2U7XHJcbiAgLy9cclxuICAvLyAgICAgLy8gc3Bhd24gYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIGFzc2VtYmx5IGluc2lkZSB0aGUgY3VycmVudCBwcm9jZXNzXHJcbiAgLy8gICAgIFByb2Nlc3MuU3RhcnRDdXJyZW50RXhlY3V0YWJsZShzcGF3bmluZ0FyZ3VtZW50cyk7XHJcbiAgLy8gICB9XHJcbiAgLy8gICBjYXRjaCAoZXgpIHtcclxuICAvLyAgICAgaWYgKGV4IGluc3RhbmNlb2YgRXhjZXB0aW9uKSB7XHJcbiAgLy8gICAgICAgT3BlcmF0aW9uLmNhbGxPcHJTaG93RXJyb3IodGFzaywgZXgudG9TdHJpbmcoKSk7XHJcbiAgLy8gICAgIH1cclxuICAvLyAgICAgZWxzZVxyXG4gIC8vICAgICAgIHRocm93IGV4O1xyXG4gIC8vICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgdGhlIGNvbmRpdGlvbiB2YWx1ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBhc3luYyBnZXRDb25kVmFsKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuX2NvbmRFeHAuZ2V0VmFsKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZ2V0IHRoZSBvcGVyYXRpb24gdHlwZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZ2V0VHlwZSgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX3R5cGU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZ2V0IHRoZSBvcGVyYXRpb24gdHlwZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZ2V0Um91dGVQYXJhbXMoKTogTGlzdDxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLl9yb3V0ZVBhcmFtcztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRoZSBzZXJ2ZXIgSUQgb2YgdGhpcyBvcGVyYXRpb25cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGdldFNlcnZlcklkKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2VydmVySWQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZXhlY3V0ZSBWZXJpZnlcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz4gYm9vbGVhbiBpcyB0cnVlIGlmIGFuZCBvbmx5IGlmIG1vZGU9PWVycm9yPC9yZXR1cm5zPlxyXG5cclxuICBwcml2YXRlIGFzeW5jIG9wZXJWZXJpZnkoKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBsZXQgaXNFcnJvcjogYm9vbGVhbiA9ICh0aGlzLl9tb2RlID09PSBDb25zdEludGVyZmFjZS5GTFdfVkVSSUZZX01PREVfRVJST1IpO1xyXG5cclxuICAgIGxldCB0ZXh0VG9EaXNwbGF5OiBzdHJpbmcgPSB0aGlzLl9leHAgPT09IG51bGwgPyB0aGlzLl90ZXh0IDogYXdhaXQgdGhpcy5fZXhwLmV2YWx1YXRlV2l0aFJlc3VsdFR5cGVBbmRMZW5ndGgoU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFLCAyNTUpO1xyXG5cclxuICAgIGxldCB0aXRsZVRvRGlzcGxheTogc3RyaW5nID0gdGhpcy5fdGl0bGVFeHAgPT09IG51bGwgPyB0aGlzLl90aXRsZSA6IGF3YWl0IHRoaXMuX3RpdGxlRXhwLmV2YWx1YXRlV2l0aFJlc3VsdFR5cGVBbmRMZW5ndGgoU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFLCAyNTUpO1xyXG5cclxuICAgIHRleHRUb0Rpc3BsYXkgPSB0ZXh0VG9EaXNwbGF5ID09PSBudWxsID8gXCJcIiA6IFN0clV0aWwucnRyaW0odGV4dFRvRGlzcGxheSk7XHJcbiAgICB0aXRsZVRvRGlzcGxheSA9IHRpdGxlVG9EaXNwbGF5ID09PSBudWxsID8gXCJcIiA6IFN0clV0aWwucnRyaW0odGl0bGVUb0Rpc3BsYXkpO1xyXG5cclxuICAgIC8vIEluT3JkZXIgdG8ga2VlcCB0aGUgYmVoYXZpb3Igc2FtZSBhcyBpbiBPbmxpbmUsIFZlcmlmeSBPcGVyYXRpb24gV2FybmluZyBtZXNzYWdlcyB3aWxsIGJlIHdyaXR0ZW5cclxuICAgIC8vIGFzIEVycm9yIG1lc3NhZ2VzIGluIENsaWVudCBsb2cgKFFDUiAjOTE1MTIyKVxyXG4gICAgaWYgKHRoaXMuX2VyckxvZ0FwcGVuZCkge1xyXG4gICAgICBsZXQgcHJnRGVzY3JpcHRpb24gPSAoPFRhc2s+IHRoaXMuX3Rhc2suR2V0Q29udGV4dFRhc2soKSkuR2V0Q29tcHV0ZWRQcm9wZXJ0eShQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9OQU1FKS5HZXRDb21wdXRlZFZhbHVlKCk7XHJcbiAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZUV4Y2VwdGlvblRvTG9nV2l0aE1zZyh0ZXh0VG9EaXNwbGF5ICsgXCIsIHByb2dyYW0gOiBcIiArIHByZ0Rlc2NyaXB0aW9uKTtcclxuICAgIH1cclxuICAgIC8vIFN0YXR1cyBsaW5lXHJcbiAgICBpZiAodGhpcy5fZGlzcGxheSA9PT0gQ29uc3RJbnRlcmZhY2UuRElTUExBWV9TVEFUVVMpIHtcclxuICAgICAgLy8gQmxhbmsgTWVzc2FnZSB3aWxsIG5vdCBiZSBzaG93biwgc2FtZSBhcyBpbiBPbmxpbmVcclxuICAgICAgaWYgKCFOU3RyaW5nLklzTnVsbE9yRW1wdHkodGV4dFRvRGlzcGxheSkpIHtcclxuXHJcbiAgICAgICAgRmxvd01vbml0b3JRdWV1ZS5JbnN0YW5jZS5hZGRGbG93VmVyaWZ5SW5mbyh0ZXh0VG9EaXNwbGF5LCB0aGlzLl90YXNrLkdldFRhc2tEZXRhaWxzKCkpO1xyXG4gICAgICAgIC8vIFByb2R1Y3QgIzE3OCwgVG9waWMgIzYxOiBiZWVwIG9uIHRoZSBjbGllbnQgc2lkZSBvbmx5IHVwb24gdXNlciBlcnJvcnMgKGUuZy4gZHVwbGljYXRlIHJlY29yZCksXHJcbiAgICAgICAgLy8gb3RoZXJ3aXNlIG9ubHkgaWYgc3RhcnRlZCBmcm9tIHRoZSBzdHVkaW8gKEY3KVxyXG4gICAgICAgICg8VGFzaz4gdGhpcy5fdGFzay5HZXRDb250ZXh0VGFzaygpKS5Xcml0ZVRvTWVzc2FnZVBhbmUodGV4dFRvRGlzcGxheSwgZmFsc2UpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBNZXNzYWdlIEJveFxyXG4gICAgZWxzZSB7XHJcbiAgICAgIC8vIEJsYW5rIE1lc3NhZ2Ugd2lsbCBub3QgYmUgc2hvd24sIHNhbWUgYXMgaW4gT25saW5lXHJcbiAgICAgIGlmICghTlN0cmluZy5Jc051bGxPckVtcHR5KHRleHRUb0Rpc3BsYXkpKSB7XHJcbiAgICAgICAgLy8gbWxzIHRyYW5zbGF0aW9uIHdoZW4gZGlzcGxheWluZyB0byBib3guIGZvciBzdGF0dXMgdGhlIHJhbnMgaXMgaSB0aGUgY29udHJvbCBwcm9wZXJ0eS5cclxuICAgICAgICBsZXQgbWxzVHJhbnNUZXh0VG9EaXNwbGF5OiBzdHJpbmcgPSBMYW5ndWFnZURhdGEuSW5zdGFuY2UudHJhbnNsYXRlKHRleHRUb0Rpc3BsYXkpO1xyXG4gICAgICAgIGxldCBtbHNUcmFuc1RpdGxlVG9EaXNwbGF5OiBzdHJpbmcgPSBMYW5ndWFnZURhdGEuSW5zdGFuY2UudHJhbnNsYXRlKHRpdGxlVG9EaXNwbGF5KTtcclxuXHJcblxyXG4gICAgICAgIGxldCB2ZXJpZnlNb2RlOiBudW1iZXIgPSBPcGVyYXRpb24uZ2V0QnV0dG9ucyh0aGlzLl9idXR0b25zKTtcclxuICAgICAgICB2ZXJpZnlNb2RlID0gdmVyaWZ5TW9kZSB8fCBPcGVyYXRpb24uZ2V0SW1hZ2UodGhpcy5faW1hZ2UpO1xyXG4gICAgICAgIHZlcmlmeU1vZGUgPSB2ZXJpZnlNb2RlIDtcclxuXHJcbiAgICAgICAgaWYgKFV0aWxTdHJCeXRlTW9kZS5pc0xvY2FsZURlZkxhbmdKUE4oKSkge1xyXG4gICAgICAgICAgbGV0IGRlbGltUG9zOiBudW1iZXIgPSBtbHNUcmFuc1RleHRUb0Rpc3BsYXkuaW5kZXhPZignfCcpO1xyXG4gICAgICAgICAgaWYgKDAgPD0gZGVsaW1Qb3MgJiYgZGVsaW1Qb3MgPCBtbHNUcmFuc1RleHRUb0Rpc3BsYXkubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIG1sc1RyYW5zVGl0bGVUb0Rpc3BsYXkgPSBtbHNUcmFuc1RleHRUb0Rpc3BsYXkuc3Vic3RyKGRlbGltUG9zICsgMSk7XHJcbiAgICAgICAgICAgIG1sc1RyYW5zVGV4dFRvRGlzcGxheSA9IG1sc1RyYW5zVGV4dFRvRGlzcGxheS5zdWJzdHIoMCwgZGVsaW1Qb3MpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IG1nRm9ybTogTWdGb3JtID0gbnVsbDtcclxuICAgICAgICAvLyBnZXQgdGhlIG9iamVjdCBmb3Igd2hpY2ggdGhlIG1lc3NhZ2Vib3ggd2lsbCBiZSBkaXNwbGF5ZWRcclxuICAgICAgICBpZiAoISg8VGFzaz4gdGhpcy5fdGFzay5HZXRDb250ZXh0VGFzaygpKS5nZXRNR0RhdGEoKS5Jc0Fib3J0aW5nKVxyXG4gICAgICAgICAgbWdGb3JtID0gPE1nRm9ybT4oPFRhc2s+IHRoaXMuX3Rhc2suR2V0Q29udGV4dFRhc2soKSkuZ2V0VG9wTW9zdEZvcm0oKTtcclxuXHJcbiAgICAgICAgLy8gaWYgdGhlIGZvcm0gb2YgdGhlIGN1cnJlbnQgdGFzayBpcyBudWxsIChtYWluIHByb2dyYW0pIHRoZW4gdXNlIHRoZSBmb3JtXHJcbiAgICAgICAgLy8gb2YgbGFzdCBmb2N1c2VkIHRhc2tcclxuICAgICAgICBpZiAobWdGb3JtID09IG51bGwgJiYgTGFzdEZvY3VzZWRNYW5hZ2VyLkluc3RhbmNlLmdldExhc3RGb2N1c2VkVGFzaygpICE9IG51bGwpXHJcbiAgICAgICAgICBtZ0Zvcm0gPSA8TWdGb3JtPkxhc3RGb2N1c2VkTWFuYWdlci5JbnN0YW5jZS5nZXRMYXN0Rm9jdXNlZFRhc2soKS5nZXRUb3BNb3N0Rm9ybSgpO1xyXG4gICAgICAgIGlmIChtZ0Zvcm0gIT0gbnVsbCkge1xyXG4gICAgICAgICAgbWdGb3JtLlJlZnJlc2hVSSgpO1xyXG4gICAgICAgICAgQ29tbWFuZHMuaW52b2tlKCk7XHJcbiAgICAgICAgICBhd2FpdCBUaHJlYWQuU2xlZXAoMTApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgcmV0dXJuVmFsdWU6IG51bWJlciA9IGF3YWl0IEdVSU1hbmFnZXIuSW5zdGFuY2UuTWVzc2FnZUJveChtbHNUcmFuc1RpdGxlVG9EaXNwbGF5LCBtbHNUcmFuc1RleHRUb0Rpc3BsYXksIHZlcmlmeU1vZGUpO1xyXG4gICAgICAgIGF3YWl0IE9wZXJhdGlvbi5zZXRvcGVyVmVyaWZ5UmV0dXJuVmFsdWUocmV0dXJuVmFsdWUsIHRoaXMuX3JldHVyblZhbCk7XHJcblxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGlzRXJyb3I7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyBjb2RlIGFzc2lnbmVkIHRvIGNvcnJlc3BvbmRpbmcgYnV0dG9uc0lEXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuXHJcbiAgcHVibGljIHN0YXRpYyBnZXRCdXR0b25zKGJ1dHRvbnNJRDogc3RyaW5nKTogbnVtYmVyIHtcclxuICAgIGxldCB0bXBidXR0b25zOiBudW1iZXIgPSAwO1xyXG5cclxuICAgIHN3aXRjaCAoYnV0dG9uc0lEKSB7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuQlVUVE9OU19PSzpcclxuICAgICAgICB0bXBidXR0b25zID0gU3R5bGVzLk1TR0JPWF9CVVRUT05fT0s7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuQlVUVE9OU19PS19DQU5DRUw6XHJcbiAgICAgICAgdG1wYnV0dG9ucyA9IFN0eWxlcy5NU0dCT1hfQlVUVE9OX09LX0NBTkNFTDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5CVVRUT05TX0FCT1JUX1JFVFJZX0lHTk9SRTpcclxuICAgICAgICB0bXBidXR0b25zID0gU3R5bGVzLk1TR0JPWF9CVVRUT05fQUJPUlRfUkVUUllfSUdOT1JFO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLkJVVFRPTlNfWUVTX05PX0NBTkNFTDpcclxuICAgICAgICB0bXBidXR0b25zID0gU3R5bGVzLk1TR0JPWF9CVVRUT05fWUVTX05PX0NBTkNFTDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5CVVRUT05TX1lFU19OTzpcclxuICAgICAgICB0bXBidXR0b25zID0gU3R5bGVzLk1TR0JPWF9CVVRUT05fWUVTX05PO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLkJVVFRPTlNfUkVUUllfQ0FOQ0VMOlxyXG4gICAgICAgIHRtcGJ1dHRvbnMgPSBTdHlsZXMuTVNHQk9YX0JVVFRPTl9SRVRSWV9DQU5DRUw7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdG1wYnV0dG9ucztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIGNvZGUgYXNzaWduZWQgdG8gY29ycmVzcG9uZGluZyBpbWFnZUlEXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwdWJsaWMgc3RhdGljIGdldEltYWdlKGltYWdlSUQ6IHN0cmluZyk6IG51bWJlciB7XHJcbiAgICBsZXQgdG1wSW1hZ2U6IG51bWJlciA9IDA7XHJcbiAgICBzd2l0Y2ggKGltYWdlSUQpIHtcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5JTUFHRV9FWENMQU1BVElPTjpcclxuICAgICAgICB0bXBJbWFnZSA9IFN0eWxlcy5NU0dCT1hfSUNPTl9FWENMQU1BVElPTjtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5JTUFHRV9DUklUSUNBTDpcclxuICAgICAgICB0bXBJbWFnZSA9IFN0eWxlcy5NU0dCT1hfSUNPTl9FUlJPUjtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5JTUFHRV9RVUVTVElPTjpcclxuICAgICAgICB0bXBJbWFnZSA9IFN0eWxlcy5NU0dCT1hfSUNPTl9RVUVTVElPTjtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5JTUFHRV9JTkZPUk1BVElPTjpcclxuICAgICAgICB0bXBJbWFnZSA9IFN0eWxlcy5NU0dCT1hfSUNPTl9JTkZPUk1BVElPTjtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHJldHVybiB0bXBJbWFnZTtcclxuICB9XHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgU2V0IFZlcmlmeSBPcGVyYXRpb24gUmV0dXJuIFZhbHVlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBzdGF0aWMgYXN5bmMgc2V0b3BlclZlcmlmeVJldHVyblZhbHVlKHJldHVyblZhbHVlOiBudW1iZXIsIHJldHVyblZhbDogRmllbGQpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmIChyZXR1cm5WYWwgIT09IG51bGwpIHtcclxuICAgICAgbGV0IHJldFZhbHVlTnVtOiBOVU1fVFlQRSA9IG5ldyBOVU1fVFlQRSgpO1xyXG5cclxuICAgICAgcmV0VmFsdWVOdW0uTlVNXzRfTE9ORyhyZXR1cm5WYWx1ZSk7XHJcbiAgICAgIGxldCByZXR1cm5WYWx1ZVN0cjogc3RyaW5nID0gcmV0VmFsdWVOdW0udG9YTUxyZWNvcmQoKTtcclxuXHJcbiAgICAgIGF3YWl0IHJldHVyblZhbC5zZXRWYWx1ZUFuZFN0YXJ0UmVjb21wdXRlKHJldHVyblZhbHVlU3RyLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UpO1xyXG4gICAgICBhd2FpdCByZXR1cm5WYWwudXBkYXRlRGlzcGxheSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGV4ZWN1dGUgQmxvY2tcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz4gYm9vbGVhbiB0cnVlXHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBwcml2YXRlIG9wZXJCbG9jaygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGV4ZWN1dGUgZWxzZSAvIGVsc2VpZlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiBib29sZWFuIHRydWVcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgb3BlckVsc2UoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBleGVjdXRlIEV2YWx1YXRlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGFzeW5jIG9wZXJFdmFsdWF0ZSgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGxldCByZXN1bHQ6IHN0cmluZyA9ICdcXDAnO1xyXG5cclxuICAgIGlmICh0aGlzLl9maWVsZCAhPT0gbnVsbCkge1xyXG4gICAgICByZXN1bHQgPSBhd2FpdCB0aGlzLl9leHAuZXZhbHVhdGVXaXRoUmVzdWx0VHlwZUFuZExlbmd0aCh0aGlzLl9maWVsZC5nZXRUeXBlKCksIHRoaXMuX2ZpZWxkLmdldFNpemUoKSk7XHJcbiAgICAgIGF3YWl0IHRoaXMuX2ZpZWxkLnNldFZhbHVlQW5kU3RhcnRSZWNvbXB1dGUocmVzdWx0LCByZXN1bHQgPT09IG51bGwsIHRydWUsIHRydWUsIGZhbHNlKTtcclxuICAgICAgYXdhaXQgdGhpcy5fZmllbGQudXBkYXRlRGlzcGxheSgpO1xyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAgICByZXN1bHQgPSBhd2FpdCB0aGlzLl9leHAuZXZhbHVhdGVXaXRoUmVzdWx0VHlwZUFuZExlbmd0aChTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU4sIDApO1xyXG4gICAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZXhlY3V0ZSBVcGRhdGVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgYXN5bmMgb3BlclVwZGF0ZShtcHJnQ3JlYXRvcjogVGFzayk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgbGV0IHJlc3VsdDogc3RyaW5nLCBvbGRWYWwsIG5ld1ZhbCwgZmllbGRWYWw7XHJcbiAgICBsZXQgc2V0UmVjb3JkVXBkYXRlZDogYm9vbGVhbjtcclxuICAgIGxldCByZWNvbXB1dGU6IGJvb2xlYW47XHJcbiAgICBsZXQgbk9sZDogTlVNX1RZUEUsIG5OZXcsIG5SZXN1bHQ7XHJcblxyXG4gICAgbGV0IGZsb3dNb25pdG9yOiBGbG93TW9uaXRvclF1ZXVlID0gRmxvd01vbml0b3JRdWV1ZS5JbnN0YW5jZTtcclxuICAgIGZsb3dNb25pdG9yLmFkZEZsb3dPcGVyYXRpb25VcGRhdGUoRmxvd01vbml0b3JJbnRlcmZhY2UuRkxXTVRSX1NUQVJULCB0aGlzLl90YXNrLkdldFRhc2tEZXRhaWxzKCkpO1xyXG5cclxuICAgIC8vIGZvciBub24tbW9kaWZpYWJsZSBmaWVsZCBnbyB0byB0aGUgc2VydmVyLCBpLmUuIHNlcnZlciBjYW4gYWJvcnQgdGhlIHRhc2tcclxuICAgIGlmICghdGhpcy5fZmllbGQuRGJNb2RpZmlhYmxlICYmICh0aGlzLl90YXNrLmdldE1vZGUoKSAhPT0gQ29uc3RhbnRzLlRBU0tfTU9ERV9DUkVBVEUpKSB7XHJcbiAgICAgIGlmICghYXdhaXQgdGhpcy5DYW5Nb2RpZnkobXByZ0NyZWF0b3IpKVxyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGxldCBmaWVsZFR5cGU6IFN0b3JhZ2VBdHRyaWJ1dGUgPSB0aGlzLl9maWVsZC5nZXRUeXBlKCk7XHJcblxyXG4gICAgLy8gaWYgdGhpcyBpcyBhbiBpbmNyZW1lbnRhbCB1cGRhdGVcclxuICAgIGlmICh0aGlzLl9pbmNyZW1lbnRhbCkge1xyXG4gICAgICBpZiAoIXRoaXMuX2ZpZWxkLklzTGlua0ZpZWxkKSB7XHJcbiAgICAgICAgZmllbGRWYWwgPSB0aGlzLl9maWVsZC5nZXRWYWx1ZSh0cnVlKTtcclxuICAgICAgICBuUmVzdWx0ID0gKGZpZWxkVmFsICE9IG51bGxcclxuICAgICAgICAgID8gbmV3IE5VTV9UWVBFKGZpZWxkVmFsKVxyXG4gICAgICAgICAgOiBudWxsKTtcclxuXHJcbiAgICAgICAgLy8gc3VidHJhY3QgdGhlIG9sZCB2YWx1ZSBpZiBub3QgaW4gY3JlYXRlIG1vZGVcclxuICAgICAgICBpZiAodGhpcy5fdGFzay5nZXRNb2RlKCkgIT09IENvbnN0YW50cy5UQVNLX01PREVfQ1JFQVRFKSB7XHJcblxyXG4gICAgICAgICAgLy8gaW5kaWNhdGUgd2UgYXJlIGV2YWx1YXRpbmcgdGhlIG9sZCB2YWx1ZSBvZiB0aGUgZmllbGRzXHJcbiAgICAgICAgICB0aGlzLl90YXNrLnNldEV2YWxPbGRWYWx1ZXModHJ1ZSk7XHJcbiAgICAgICAgICBvbGRWYWwgPSAodGhpcy5fZmllbGQuaXNOdWxsKClcclxuICAgICAgICAgICAgPyB0aGlzLl9maWVsZC5nZXRNYWdpY0RlZmF1bHRWYWx1ZSgpXHJcbiAgICAgICAgICAgIDogYXdhaXQgdGhpcy5fZXhwLmV2YWx1YXRlV2l0aFJlc3VsdFR5cGVBbmRMZW5ndGgoZmllbGRUeXBlLCB0aGlzLl9maWVsZC5nZXRTaXplKCkpKTtcclxuICAgICAgICAgIHRoaXMuX3Rhc2suc2V0RXZhbE9sZFZhbHVlcyhmYWxzZSk7XHJcbiAgICAgICAgICBuT2xkID0gbmV3IE5VTV9UWVBFKG9sZFZhbCk7XHJcbiAgICAgICAgICBuUmVzdWx0ID0gTlVNX1RZUEUuc3ViKG5SZXN1bHQsIG5PbGQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX3Rhc2suZ2V0TW9kZSgpICE9PSBDb25zdGFudHMuVEFTS19NT0RFX0RFTEVURSkge1xyXG4gICAgICAgICAgbmV3VmFsID0gYXdhaXQgdGhpcy5fZXhwLmV2YWx1YXRlV2l0aFJlc3VsdFR5cGVBbmRMZW5ndGgoZmllbGRUeXBlLCB0aGlzLl9maWVsZC5nZXRTaXplKCkpO1xyXG4gICAgICAgICAgaWYgKG5ld1ZhbCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIG5OZXcgPSBuZXcgTlVNX1RZUEUobmV3VmFsKTtcclxuICAgICAgICAgICAgblJlc3VsdCA9IE5VTV9UWVBFLmFkZChuUmVzdWx0LCBuTmV3KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgbk5ldyA9IG5SZXN1bHQgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoblJlc3VsdCAhPSBudWxsKVxyXG4gICAgICAgICAgcmVzdWx0ID0gblJlc3VsdC50b1hNTHJlY29yZCgpO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIHJlc3VsdCA9IHRoaXMuX2ZpZWxkLmdldE1hZ2ljRGVmYXVsdFZhbHVlKCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgLyogSWYgdGhlIGluY3JlbWVudGFsIHVwZGF0ZSBpcyBmb3IgYSBsaW5rIGZpZWxkLCBnbyB0byBzZXJ2ZXIuICovXHJcbiAgICAgICAgLyogVGhpcyBpcyByZXF1aXJlZCB0byBiZSBkb25lIG9uIHNlcnZlciBiZWNhdXNlIG9uIGNsaWVudCwgd2UgZG8gKi9cclxuICAgICAgICAvKiBub3QgaGF2ZSB0aGUgcmVmZXJlbmNlIHRvIHRoZSBvbGQgbGluayByZWNvcmQuICovXHJcbiAgICAgICAgLyogQW5kIGZvciBpbmNyZW1lbnRhbCB1cGRhdGUsIHdlIG5lZWQgdG8gd29yayBvbiAyIHJlY29yZHMgYXMgaW4gKi9cclxuICAgICAgICAvKiBjYXNlIG9mIFFDUiMgOTAwNzM4LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xyXG4gICAgICAgIGF3YWl0IHRoaXMub3BlclNlcnZlcihtcHJnQ3JlYXRvcik7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBlbmQgb2YgIGluY3JlbWVudGFsIHVwZGF0ZVxyXG4gICAgZWxzZVxyXG4gICAgICByZXN1bHQgPSBhd2FpdCB0aGlzLl9leHAuZXZhbHVhdGVXaXRoUmVzdWx0VHlwZUFuZExlbmd0aChmaWVsZFR5cGUsIHRoaXMuX2ZpZWxkLmdldFNpemUoKSk7XHJcblxyXG4gICAgLy8gUUNSIDc0NjA1MyBpZiB0aGUgY2VsbHMgdHlwZSBkb24ndCBtYXRjaCB0aHJvdyBlcnJvclxyXG4gICAgaWYgKGZpZWxkVHlwZSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CX1ZFQ1RPUilcclxuICAgICAgaWYgKHJlc3VsdCAhPSBudWxsKVxyXG4gICAgICAgIHJlc3VsdCA9IE9wZXJhdGlvbi5vcGVyVXBkYXRlVmVjdG9ycyh0aGlzLl9maWVsZCwgcmVzdWx0KTtcclxuXHJcbiAgICByZWNvbXB1dGUgPSAodGhpcy5fZmllbGQuZ2V0VGFzaygpID09PSB0aGlzLl90YXNrKTtcclxuICAgIHNldFJlY29yZFVwZGF0ZWQgPSAoIXJlY29tcHV0ZSB8fCAhdGhpcy5fdW5kbyk7XHJcbiAgICBhd2FpdCB0aGlzLl9maWVsZC5zZXRWYWx1ZUFuZFN0YXJ0UmVjb21wdXRlKHJlc3VsdCwgcmVzdWx0ID09IG51bGwsIHRydWUsIHNldFJlY29yZFVwZGF0ZWQsIGZhbHNlKTtcclxuICAgIGlmICghdGhpcy5fdW5kbylcclxuICAgICAgdGhpcy5fZmllbGQuc2V0VXBkYXRlZCgpO1xyXG5cclxuICAgIC8vIFFDUiAjIDI3MDk0OSA6IElmIGZpZWxkIGlzIHVwZGF0ZWQgd2l0aCB1cGRhdGUgb3BlcmF0aW9uLCBtb2RpZmllZCBmbGFnIHNob3VsZCBiZSBzZXQgaW4gb3JkZXIgdG8gY2F1c2UgcmUtY29tcHV0ZS5cclxuICAgIHRoaXMuX2ZpZWxkLnNldE1vZGlmaWVkKCk7XHJcblxyXG4gICAgYXdhaXQgdGhpcy5fZmllbGQudXBkYXRlRGlzcGxheSgpO1xyXG4gICAgZmxvd01vbml0b3IuYWRkRmxvd09wZXJhdGlvblVwZGF0ZShGbG93TW9uaXRvckludGVyZmFjZS5GTFdNVFJfRU5ELCB0aGlzLl90YXNrLkdldFRhc2tEZXRhaWxzKCkpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBjYW4gYSBub24tbW9kaWZpYWJsZSBmaWVsZCBiZSBtb2RpZmllZC4gdGhlIHdheSB0byBnZXQgdGhlIGFuc3dlciBkZXBlbmRzIG9uIHRoZSBsb2NhbC9yZW1vdGUgZGF0YXZpZXdcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cIm1wcmdDcmVhdG9yXCI+dHJ1ZSBpZiB0aGUgZmllbGQgbWF5IGJlIG1vZGlmaWVkIGFuZCB0aGUgY2FsbGluZyBtZXRob2Qgc2hvdWxkIGNvbnRpbnVlPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgYXN5bmMgQ2FuTW9kaWZ5KG1wcmdDcmVhdG9yOiBUYXNrKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBsZXQgZXhlY09wZXJDb21tYW5kOiBFeGVjT3BlckNvbW1hbmQgPSAoKHRoaXMuX2NtZFRvU2VydmVyIGluc3RhbmNlb2YgRXhlY09wZXJDb21tYW5kKSA/IDxFeGVjT3BlckNvbW1hbmQ+dGhpcy5fY21kVG9TZXJ2ZXIgOiBudWxsKTtcclxuXHJcbiAgICBleGVjT3BlckNvbW1hbmQuT3BlcmF0aW9uID0gdGhpcztcclxuICAgIGV4ZWNPcGVyQ29tbWFuZC5NcHJnQ3JlYXRvciA9IG1wcmdDcmVhdG9yO1xyXG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLlRhc2suRGF0YXZpZXdNYW5hZ2VyLkV4ZWN1dGUodGhpcy5fY21kVG9TZXJ2ZXIpKS5TdWNjZXNzO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHVwZGF0ZXMgdGhlIGRhdGEgY29udGVudCBvZiBhIHZlY3RvciB3aXRob3V0IGNoYW5naW5nIGl0cyBoZWFkZXIgZGF0YVxyXG4gIC8vLyAgIHN1Y2ggYXMgY2VsbCB0eXBlIGFuZCBzaXplIC0gaXMgdXNlZCBvbmx5IGluIHVwZGF0ZSBvcGVyYXRpb25zIGJldHdlZW4gdmVjdG9yc1xyXG4gIC8vLyAgIGZvciBleGFtcGxlIHZlY3RvcnMgb2YgYWxwaGEgd2l0aCBjZWxsIHNpemUgdGhlIGRpZmZlciBvciB2ZWN0b3Igb2YgbWVtbyB3aXRoIHZlY3RvciBvZiBhbHBoYVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ2ZWNcIj50aGUgZmxhdCByZXByZXNlbnRhdGlvbiBvZiB0aGUgdGhlIG5ldyB2ZWN0b3JcclxuICAvLy8gICBmaWVsZCB0aGUgZmllbGQgdG8gYmUgdXBkYXRlZFxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gYSBmbGF0IHJlcHJlc2VudGF0aW9uIG9mIHRoZSB1cGRhdGVkIHZlY3RvciBhZnRlciB0aGUgVXBkYXRlPC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBvcGVyVXBkYXRlVmVjdG9ycyhmaWVsZDogRmllbGQsIHZlYzogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGxldCByZXN1bHQ6IHN0cmluZyA9IG51bGw7XHJcbiAgICBpZiAoZmllbGQuZ2V0VHlwZSgpID09PSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SKSB7XHJcbiAgICAgIGxldCBjZWxsc0F0dHI6IFN0b3JhZ2VBdHRyaWJ1dGUgPSBWZWN0b3JUeXBlLmdldENlbGxzQXR0cih2ZWMpO1xyXG4gICAgICBsZXQgY2VsbHNUeXBlOiBTdG9yYWdlQXR0cmlidXRlID0gZmllbGQuZ2V0Q2VsbHNUeXBlKCk7XHJcblxyXG4gICAgICBpZiAoU3RvcmFnZUF0dHJpYnV0ZUNoZWNrLmlzVGhlU2FtZVR5cGUoY2VsbHNBdHRyLCBjZWxsc1R5cGUpKSB7XHJcbiAgICAgICAgbGV0IG5ld1ZlYzogVmVjdG9yVHlwZSA9IG5ldyBWZWN0b3JUeXBlKHZlYyk7XHJcbiAgICAgICAgbmV3VmVjLmFkanVzdFRvRml0KGZpZWxkKTtcclxuICAgICAgICByZXR1cm4gbmV3VmVjLnRvU3RyaW5nKCk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICAgIHRocm93IG5ldyBBcHBsaWNhdGlvbkV4Y2VwdGlvbihcImluIG9wZXJVcGRhdGVWZWN0b3JzIFwiICsgZmllbGQuZ2V0TmFtZSgpICsgXCIgaXMgbm90IG9mIHR5cGUgdmVjdG9yXCIpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGV4ZWN1dGUgUmFpc2UgRXZlbnRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibXByZ0NyZWF0b3JcIj5pZiB0aGUgb3BlcmF0aW9uIGJlbG9uZ3MgdG8gYSBtYWluIHByb2dyYW0gaXQgcG9pbnRzIHRvIHRoZSB0YXNrIHdoaWNoXHJcbiAgLy8vICAgY2F1c2VkIHRoZSBtYWluIHByb2dyYW0gdG8gYmVjb21lIGFjdGl2ZS4gT3RoZXJ3aXNlIGl0J3MgZmFsc2UuXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJyZXR1cm5lZEZyb21TZXJ2ZXJcIj5pbmRpY2F0ZXMgd2hldGhlciB3ZSBqdXN0IGNhbWUgYmFjayBmcm9tIHRoZSBzZXJ2ZXIgdG8gYmUgcGFzc2VkIHRvIEV2ZW50c01hbmFnZXIuSW5zdGFuY2UuaGFuZGxlRXZlbnQoKTwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBhc3luYyBvcGVyUmFpc2VFdmVudChtcHJnQ3JlYXRvcjogVGFzaywgcmV0dXJuZWRGcm9tU2VydmVyOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XHJcblxyXG4gICAgbGV0IGltbWVkaWF0ZTogYm9vbGVhbiA9IGF3YWl0IHRoaXMuSW1tZWRpYXRlKCk7XHJcblxyXG4gICAgLy8gY3JlYXRlIGEgbmV3IHJ1biB0aW1lIGV2ZW50IHVzaW5nIHRoZSBvcmlnaW5hbCBhcyB0ZW1wbGF0ZVxyXG4gICAgbGV0IGFSdEV2dDogUnVuVGltZUV2ZW50ID0gdGhpcy5fcnRFdnQucmVwbGljYXRlKCk7XHJcbiAgICBhd2FpdCBhUnRFdnQuc2V0UHVibGljTmFtZSgpO1xyXG5cclxuICAgIGFSdEV2dC5zZXRJbW1lZGlhdGUoaW1tZWRpYXRlKTtcclxuICAgIGFSdEV2dC5zZXRNYWluUHJnQ3JlYXRvcihudWxsKTtcclxuXHJcbiAgICBpZiAoaW1tZWRpYXRlKSB7XHJcbiAgICAgIGFSdEV2dC5zZXRDdHJsKDxNZ0NvbnRyb2w+dGhpcy5fdGFzay5nZXRMYXN0UGFya2VkQ3RybCgpKTtcclxuICAgICAgYVJ0RXZ0LnNldEFyZ0xpc3QodGhpcy5fYXJnTGlzdCk7XHJcblxyXG4gICAgICBpZiAoYVJ0RXZ0LmdldFRhc2soKS5pc01haW5Qcm9nKCkpXHJcbiAgICAgICAgYVJ0RXZ0LnNldE1haW5QcmdDcmVhdG9yKG1wcmdDcmVhdG9yKTtcclxuXHJcbiAgICAgIEFjY2Vzc0hlbHBlci5ldmVudHNNYW5hZ2VyLmNoZWNrQW5kU2F2ZVJvdXRlRXZlbnRJZkN0eFJlbW92ZWRGcm9tU3J2ciAoYVJ0RXZ0KTtcclxuICAgICAgQWNjZXNzSGVscGVyLmV2ZW50c01hbmFnZXIucHVzaEV4ZWNTdGFjayh0aGlzLl90YXNrLmdldFRhc2tUYWcoKSAsIHRoaXMuX2V2dEhhbmRsZXIuZ2V0SWQoKS50b1N0cmluZygpICwgdGhpcy5fc2VydmVySWQpO1xyXG4gICAgICBhd2FpdCBBY2Nlc3NIZWxwZXIuZXZlbnRzTWFuYWdlci5oYW5kbGVFdmVudChhUnRFdnQsIHJldHVybmVkRnJvbVNlcnZlcik7XHJcbiAgICAgIEFjY2Vzc0hlbHBlci5ldmVudHNNYW5hZ2VyLnBvcEV4ZWNTdGFjaygpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIC8vIHNlbmQgYXJndW1lbnRzIGJ5IHZhbHVlXHJcbiAgICAgIGxldCBhcmdsaXN0ID0gbmV3IEFyZ3VtZW50c0xpc3QoKTtcclxuICAgICAgYXdhaXQgYXJnbGlzdC5Jbml0aWFsaXplKHRoaXMuX2FyZ0xpc3QpXHJcbiAgICAgIGFSdEV2dC5zZXRBcmdMaXN0KGFyZ2xpc3QpO1xyXG4gICAgICBhUnRFdnQuc2V0VGFzayhudWxsKTtcclxuICAgICAgQWNjZXNzSGVscGVyLmV2ZW50c01hbmFnZXIuYWRkVG9UYWlsKGFSdEV2dCk7XHJcbiAgICAgIEFjY2Vzc0hlbHBlci5ldmVudHNNYW5hZ2VyLmNoZWNrQW5kU2F2ZVJvdXRlRXZlbnRJZkN0eFJlbW92ZWRGcm9tU3J2ciAoYVJ0RXZ0KTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGV4ZWN1dGUgYnJvd3NlciBDYWxsIG9wZXJhdGlvblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJtcHJnQ3JlYXRvclwiPmlmIHRoZSBvcGVyYXRpb24gYmVsb25ncyB0byBhIG1haW4gcHJvZ3JhbSBpdCBwb2ludHMgdG8gdGhlIHRhc2sgd2hpY2hcclxuICAvLy8gICBjYXVzZWQgdGhlIG1haW4gcHJvZ3JhbSB0byBiZWNvbWUgYWN0aXZlLiBPdGhlcndpc2UgaXQncyBmYWxzZS5cclxuICAvLy8gPC9wYXJhbT5cclxuICBwcml2YXRlIGFzeW5jIG9wZXJDYWxsKG1wcmdDcmVhdG9yOiBUYXNrKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBhd2FpdCB0aGlzLm9wZXJTZXJ2ZXIobXByZ0NyZWF0b3IpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGV4ZWN1dGUgU2VydmVyIG9wZXJhdGlvblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJtcHJnQ3JlYXRvclwiPmlmIHRoZSBvcGVyYXRpb24gYmVsb25ncyB0byBhIG1haW4gcHJvZ3JhbSBpdCBwb2ludHMgdG8gdGhlIHRhc2sgd2hpY2hcclxuICAvLy8gICBjYXVzZWQgdGhlIG1haW4gcHJvZ3JhbSB0byBiZWNvbWUgYWN0aXZlLiBPdGhlcndpc2UgaXQncyBmYWxzZS5cclxuICAvLy8gPC9wYXJhbT5cclxuICBhc3luYyBvcGVyU2VydmVyKG1wcmdDcmVhdG9yOiBUYXNrKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBsZXQgY29tbWFuZDogRXhlY09wZXJDb21tYW5kID0gKCh0aGlzLl9jbWRUb1NlcnZlciBpbnN0YW5jZW9mIEV4ZWNPcGVyQ29tbWFuZCkgPyA8RXhlY09wZXJDb21tYW5kPnRoaXMuX2NtZFRvU2VydmVyIDogbnVsbCk7XHJcbiAgICBEZWJ1Zy5Bc3NlcnQoY29tbWFuZCAhPT0gbnVsbCk7XHJcbiAgICBpZiAodGhpcy5fdGFzay5pc01haW5Qcm9nKCkpXHJcbiAgICAgIGNvbW1hbmQuTXByZ0NyZWF0b3IgPSBtcHJnQ3JlYXRvcjtcclxuICAgIGVsc2VcclxuICAgICAgY29tbWFuZC5NcHJnQ3JlYXRvciA9IG51bGw7XHJcblxyXG4gICAgY29tbWFuZC5TZXRFeGVjdXRpb25TdGFjayhBY2Nlc3NIZWxwZXIuZXZlbnRzTWFuYWdlci5nZXRFeGVjU3RhY2soKSk7XHJcbiAgICBjb21tYW5kLk9wZXJhdGlvbiA9IHRoaXM7XHJcbiAgICBhd2FpdCBBY2Nlc3NIZWxwZXIubWdEYXRhVGFibGUuZXhlY1JlcXVlc3RXaXRoU3ViZm9ybVJlY29yZEN5Y2xlKDxDb21tYW5kc1RhYmxlPnRoaXMuX3Rhc2suZ2V0TUdEYXRhKCkuQ21kc1RvU2VydmVyLCB0aGlzLl9jbWRUb1NlcnZlciwgbnVsbCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIEJsb2NrIEVuZCBpbmRleFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZ2V0QmxvY2tFbmQoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9ibG9ja0VuZDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXRzIHRoZSB2YWx1ZSBvZiB0aGUgQmxvY2sgRW5kIGluZGV4XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBzZXRCbG9ja0VuZCh2YWw6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy5fYmxvY2tFbmQgPSB2YWw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIEJsb2NrIENsb3NlIGluZGV4XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZXRCbG9ja0Nsb3NlKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fYmxvY2tDbG9zZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXRzIHRoZSB2YWx1ZSBvZiB0aGUgQmxvY2sgQ2xvc2UgaW5kZXhcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHNldEJsb2NrQ2xvc2UodmFsOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMuX2Jsb2NrQ2xvc2UgPSB2YWw7XHJcbiAgfVxyXG5cclxuICBnZXRUYXNrVGFnKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fdGFzay5nZXRUYXNrVGFnKCk7XHJcbiAgfVxyXG5cclxuICBnZXRIYW5kbGVySWQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9ldnRIYW5kbGVyLmdldElkKCkudG9TdHJpbmcoKTtcclxuICB9XHJcblxyXG4gIGdldEV2ZW50SGFuZGxlcigpOiBFdmVudEhhbmRsZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2V2dEhhbmRsZXI7XHJcbiAgfVxyXG5cclxuICBnZXRFeGVjT25TZXJ2ZXIoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fZXhlY09uU2VydmVyO1xyXG4gIH1cclxuXHJcbiAgc2V0RXhlY09uU2VydmVyKHZhbCA6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuX2V4ZWNPblNlcnZlciA9IHZhbDtcclxuICB9XHJcblxyXG4gIGdldEV4ZWNPbkNsaWVudCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9leGVjT25DbGllbnQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgY2hlY2tzIGlmIHRoZSBvcGVyYXRpb24gY2FuIGJlIGV4ZWN1dGVkIG9yIG5vdFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBwcml2YXRlIGFzeW5jIGNhbkV4ZWN1dGUoKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXRDb25kVmFsKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImJ1ZmZlclwiPjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBwdWJsaWMgYXN5bmMgQWRkRmxvd0Rlc2NyaXB0aW9uKGJ1ZmZlcjogU3RyaW5nQnVpbGRlcik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgc3dpdGNoICh0aGlzLl90eXBlKSB7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfT1BFUl9WRVJJRlk6XHJcbiAgICAgICAgYnVmZmVyLkFwcGVuZChcIlZlcmlmeTogXCIpO1xyXG4gICAgICAgIGlmICh0aGlzLl9leHAgPT0gbnVsbClcclxuICAgICAgICAgIGJ1ZmZlci5BcHBlbmQodGhpcy5fdGV4dCk7XHJcbiAgICAgICAgZWxzZSBidWZmZXIuQXBwZW5kKFwiRXhwICNcIikuQXBwZW5kKHRoaXMuX2V4cC5nZXRJZCgpKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19PUEVSX0JMT0NLOlxyXG4gICAgICAgIGJ1ZmZlci5BcHBlbmQoXCJCbG9jayBJZlwiKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19PUEVSX0xPT1A6XHJcbiAgICAgICAgYnVmZmVyLkFwcGVuZChcIkJsb2NrIExvb3BcIik7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfT1BFUl9FTFNFOlxyXG4gICAgICAgIGJ1ZmZlci5BcHBlbmQoXCJCbG9jayBFbHNlXCIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX09QRVJfRVZBTFVBVEU6XHJcbiAgICAgICAgYnVmZmVyLkFwcGVuZChcIkV2YWx1YXRlIEV4cCAjXCIpLkFwcGVuZCh0aGlzLl9leHAuZ2V0SWQoKSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfT1BFUl9VUERBVEU6XHJcbiAgICAgICAgYnVmZmVyLkFwcGVuZEZvcm1hdChcIlVwZGF0ZSB7MH0gd2l0aCBFeHAgI3sxfVwiLCB0aGlzLl9maWVsZC5nZXRWYXJOYW1lKCksIHRoaXMuX2V4cC5nZXRJZCgpKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19PUEVSX0VOREJMT0NLOlxyXG4gICAgICAgIGJ1ZmZlci5BcHBlbmQoXCJFbmQgQmxvY2tcIik7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfT1BFUl9VU1JfRVhJVDpcclxuICAgICAgICBidWZmZXIuQXBwZW5kKFwiSW52b2tlIE9TXCIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX09QRVJfUkFJU0VfRVZFTlQ6XHJcbiAgICAgICAgYnVmZmVyLkFwcGVuZChcIlJhaXNlIEV2ZW50OlwiKTtcclxuICAgICAgICB0aGlzLl9ydEV2dC5BcHBlbmREZXNjcmlwdGlvbihidWZmZXIpO1xyXG4gICAgICAgIGJ1ZmZlci5BcHBlbmRGb3JtYXQoXCIgKFdhaXQ9ezB9KVwiLCAoYXdhaXQgdGhpcy5JbW1lZGlhdGUoKSA/ICdZJyA6ICdOJykpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX09QRVJfU0VSVkVSOlxyXG4gICAgICAgIGJ1ZmZlci5BcHBlbmQoXCJSdW4gc2VydmVyLXNpZGUgb3BlcmF0aW9uXCIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX09QRVJfQ0FMTDpcclxuICAgICAgICBidWZmZXIuQXBwZW5kKFwiQ2FsbCBwcm9ncmFtXCIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGJ1ZmZlci5BcHBlbmRGb3JtYXQoXCI8PFVua25vd24gT3BlcmF0aW9uIENvZGUgezB9Pj5cIiwgdGhpcy5fdHlwZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIEdldEFyZ0xpc3QoKTogQXJndW1lbnRzTGlzdCB7XHJcbiAgICByZXR1cm4gdGhpcy5fYXJnTGlzdDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy9cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgR2V0UmV0dXJuVmFsdWVGaWVsZCgpOiBGaWVsZCB7XHJcbiAgICByZXR1cm4gdGhpcy5fZmllbGQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICByZXR1cm5zIHN1YmZvcm0gY29udHJvbCBuYW1lIGZvciBjYWxsIHdpdGggZGVzdGluYXRpb25cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgR2V0U3ViZm9ybUNvbnRyb2xOYW1lKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fc3ViZm9ybUN0cmxOYW1lO1xyXG4gIH1cclxuXHJcbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBOU3RyaW5nLkZvcm1hdChcIkV4ZWN1dGluZyBvcGVyYXRpb24gbnVtYmVyIHswfVwiLCB0aGlzLl9zZXJ2ZXJJZCArIDEpO1xyXG4gIH1cclxufVxyXG4iXX0=
769
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT3BlcmF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZW5naW5lL3NyYy9ydC9PcGVyYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsS0FBSyxFQUNMLEtBQUssRUFFTCxPQUFPLEVBQ1AsT0FBTyxFQUVQLE1BQU0sRUFDUCxNQUFNLHNCQUFzQixDQUFDO0FBRTlCLE9BQU8sRUFFTCxVQUFVLEVBQ1YsU0FBUyxFQUNULE1BQU0sRUFDTixnQkFBZ0IsRUFDaEIscUJBQXFCLEVBQ3JCLE9BQU8sRUFDUCxlQUFlLEVBQ2YsWUFBWSxFQUNaLFNBQVMsRUFDVixNQUFNLGtCQUFrQixDQUFDO0FBRTFCLE9BQU8sRUFDTCxRQUFRLEVBRVIsUUFBUSxFQUNSLGFBQWEsRUFDYixNQUFNLEVBRU4sK0JBQStCLEVBQy9CLFVBQVUsRUFDWCxNQUFNLGdCQUFnQixDQUFDO0FBRXhCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFLaEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXJELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFFN0UsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRW5ELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztB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bnRlbnQiOlsiaW1wb3J0IHtcclxuICBBcHBsaWNhdGlvbkV4Y2VwdGlvbixcclxuICBEZWJ1ZyxcclxuICBJbnQzMixcclxuICBMaXN0LFxyXG4gIE5OdW1iZXIsXHJcbiAgTlN0cmluZyxcclxuICBTdHJpbmdCdWlsZGVyLFxyXG4gIFRocmVhZFxyXG59IGZyb20gJ0BtYWdpYy14cGEvbXNjb3JlbGliJztcclxuXHJcbmltcG9ydCB7XHJcbiAgQ2FsbE9wZXJhdGlvbk1vZGUsXHJcbiAgQ2FsbE9zU2hvdyxcclxuICBDb25zdGFudHMsIEludGVybmFsSW50ZXJmYWNlLFxyXG4gIExvZ2dlcixcclxuICBTdG9yYWdlQXR0cmlidXRlLFxyXG4gIFN0b3JhZ2VBdHRyaWJ1dGVDaGVjayxcclxuICBTdHJVdGlsLFxyXG4gIFV0aWxTdHJCeXRlTW9kZSxcclxuICBYTUxDb25zdGFudHMsXHJcbiAgWG1sUGFyc2VyXHJcbn0gZnJvbSAnQG1hZ2ljLXhwYS91dGlscyc7XHJcblxyXG5pbXBvcnQge1xyXG4gIENvbW1hbmRzLFxyXG4gIE1nQ29udHJvbEJhc2UsXHJcbiAgTlVNX1RZUEUsXHJcbiAgUHJvcEludGVyZmFjZSwgUnVudGltZUNvbnRleHRCYXNlLFxyXG4gIFN0eWxlcyxcclxuICBUYXNrRGVmaW5pdGlvbklkLFxyXG4gIFRhc2tEZWZpbml0aW9uSWRUYWJsZVNheEhhbmRsZXIsXHJcbiAgVmVjdG9yVHlwZVxyXG59IGZyb20gJ0BtYWdpYy14cGEvZ3VpJztcclxuXHJcbmltcG9ydCB7IFllc05vRXhwIH0gZnJvbSAnLi4vZXhwL1llc05vRXhwJztcclxuaW1wb3J0IHsgQXJndW1lbnRzTGlzdCB9IGZyb20gJy4vQXJndW1lbnRzTGlzdCc7XHJcbmltcG9ydCB7IElDbGllbnRDb21tYW5kIH0gZnJvbSAnLi4vY29tbWFuZHMvSUNsaWVudENvbW1hbmQnO1xyXG5pbXBvcnQgeyBFeHByZXNzaW9uIH0gZnJvbSAnLi4vZXhwL0V4cHJlc3Npb24nO1xyXG5pbXBvcnQgeyBFdmVudEhhbmRsZXIgfSBmcm9tICcuLi9ldmVudC9FdmVudEhhbmRsZXInO1xyXG5pbXBvcnQgeyBGaWVsZCB9IGZyb20gJy4uL2RhdGEvRmllbGQnO1xyXG5pbXBvcnQgeyBSdW5UaW1lRXZlbnQgfSBmcm9tICcuLi9ldmVudC9SdW5UaW1lRXZlbnQnO1xyXG5pbXBvcnQgeyBNZ0Zvcm0gfSBmcm9tICcuLi9ndWkvTWdGb3JtJztcclxuaW1wb3J0IHsgQ29tbWFuZEZhY3RvcnkgfSBmcm9tICcuLi9jb21tYW5kcy9DbGllbnRUb1NlcnZlci9Db21tYW5kRmFjdG9yeSc7XHJcbmltcG9ydCB7IEZsb3dNb25pdG9yUXVldWUgfSBmcm9tICcuLi91dGlsL0Zsb3dNb25pdG9yUXVldWUnO1xyXG5pbXBvcnQgeyBFeGVjT3BlckNvbW1hbmQgfSBmcm9tICcuLi9jb21tYW5kcy9DbGllbnRUb1NlcnZlci9FeGVjT3BlckNvbW1hbmQnO1xyXG5pbXBvcnQgeyBNZ0NvbnRyb2wgfSBmcm9tICcuLi9ndWkvTWdDb250cm9sJztcclxuaW1wb3J0IHsgQ29uc3RJbnRlcmZhY2UgfSBmcm9tICcuLi9Db25zdEludGVyZmFjZSc7XHJcbmltcG9ydCB7IFRhc2sgfSBmcm9tICcuLi90YXNrcy9UYXNrJztcclxuaW1wb3J0IHsgRmxvd01vbml0b3JJbnRlcmZhY2UgfSBmcm9tICcuLi9GbG93TW9uaXRvckludGVyZmFjZSc7XHJcbmltcG9ydCB7IExhbmd1YWdlRGF0YSB9IGZyb20gJy4uL2Vudi9MYW5ndWFnZURhdGEnO1xyXG5pbXBvcnQgeyBMYXN0Rm9jdXNlZE1hbmFnZXIgfSBmcm9tICcuL0xhc3RGb2N1c2VkTWFuYWdlcic7XHJcbmltcG9ydCB7IENvbW1hbmRzVGFibGUgfSBmcm9tICcuLi9Db21tYW5kc1RhYmxlJztcclxuaW1wb3J0IHsgQWNjZXNzSGVscGVyIH0gZnJvbSAnLi4vQWNjZXNzSGVscGVyJztcclxuaW1wb3J0IHtHVUlNYW5hZ2VyfSBmcm9tIFwiLi4vR1VJTWFuYWdlclwiO1xyXG5cclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vICAgZGF0YSBmb3IgPG9wZXI+IHRhZ1xyXG4vLy8gPC9zdW1tYXJ5PlxyXG5leHBvcnQgY2xhc3MgT3BlcmF0aW9uIHtcclxuICBwcml2YXRlIF9jb25kRXhwOiBZZXNOb0V4cCA9IG5ldyBZZXNOb0V4cCh0cnVlKTtcclxuICBwcml2YXRlIF9yZXRhaW5Gb2N1czogWWVzTm9FeHAgPSBuZXcgWWVzTm9FeHAoZmFsc2UpO1xyXG4gIHByaXZhdGUgX3dhaXRFeHA6IFllc05vRXhwID0gbmV3IFllc05vRXhwKGZhbHNlKTtcclxuICBwcml2YXRlIF9zeW5jRGF0YTogWWVzTm9FeHAgPSBuZXcgWWVzTm9FeHAoZmFsc2UpOyAvLyBjYWxsIG9wZXJhdGlvbjogU3luYyBkYXRhXHJcbiAgcHJpdmF0ZSBfYXJnTGlzdDogQXJndW1lbnRzTGlzdCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfYmxvY2tDbG9zZTogbnVtYmVyID0gMDtcclxuICAvLyBpbiBCbG9jayBCZWdpbi9FbHNlL0xvb3Agb3BlcmF0aW9uOiB0aGUgb3BlcmF0aW9uIGlkIHdoaWNoIGlzIHRoZSBlbmQgb2YgdGhlIGV4ZWN1dGlvbiBibG9jayAoZWxzZS9lbmQpXHJcbiAgcHJpdmF0ZSBfYmxvY2tFbmQ6IG51bWJlciA9IDA7ICAvLyBpbiBCbG9jayBCZWdpbi9FbHNlL0xvb3Agb3BlcmF0aW9uOiB0aGUgQmxvY2sgRW5kIG9wZXJhdGlvbiB0aGF0IGVuZHMgdGhlIG5lc3RpbmcgbGV2ZWxcclxuICBwcml2YXRlIF9idXR0b25zOiBzdHJpbmcgPSAnXFwwJzsgLy8gYnV0dG9ucyBvZiB2ZXJpZnkgb3ByXHJcbiAgcHJpdmF0ZSBfY2hlY2tCeVNlcnZlcjogYm9vbGVhbiA9IGZhbHNlOyAvLyBmb3IgQ2FsbCBvcGVyYXRpb24gd2l0aCBzdWJmb3JtIGRlc3RpbmF0aW9uXHJcbiAgcHJpdmF0ZSBfY21kVG9TZXJ2ZXI6IElDbGllbnRDb21tYW5kID0gbnVsbDsgLy8gZGVmYXVsdCBidXR0b24gb2YgdmVyaWZ5IG9wclxyXG4gIHByaXZhdGUgX2Rpc3BsYXk6IHN0cmluZyA9ICdTJzsgLy8gU3RhdHVzIGxpbmUgfCBtZXNzYWdlIEJveFxyXG4gIHByaXZhdGUgX2VyckxvZ0FwcGVuZDogYm9vbGVhbiA9IGZhbHNlOyAvLyBhcHBlbmQgdG8gZXJyb3IgbG9nIGZvciB2ZXJpZnkgb3ByXHJcbiAgcHJpdmF0ZSBfZXZ0SGFuZGxlcjogRXZlbnRIYW5kbGVyID0gbnVsbDtcclxuICBwcml2YXRlIF9leGVjT25TZXJ2ZXI6IGJvb2xlYW4gPSBmYWxzZTsgLy8gZm9yIGJsb2NrIGlmIHdoaWNoIHNob3VsZCBiZSBleGVjdXRlZCBvbiB0aGUgc2VydmVyXHJcbiAgcHJpdmF0ZSBfZXhlY09uQ2xpZW50OiBib29sZWFuID0gZmFsc2U7IC8vIGZvciBibG9jayBpZiB3aGljaCBtdXN0IGJlIGV4ZWN1dGVkIG9uIHRoZSBjbGllbnRcclxuICBwcml2YXRlIF9leHA6IEV4cHJlc3Npb24gPSBudWxsO1xyXG4gIHByaXZhdGUgX2ZpZWxkOiBGaWVsZCA9IG51bGw7IC8vIHJlZmVyZW5jZSB0byB0aGUgZmllbGRcclxuICBwcml2YXRlIF9nbG9iYWxQYXJhbXNTaG91bGRCZUNvcGllZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX2ltYWdlOiBzdHJpbmcgPSAnXFwwJzsgLy8gaW1hZ2Ugb2YgdmVyaWZ5IG9wclxyXG4gIHByaXZhdGUgX2luY3JlbWVudGFsOiBib29sZWFuID0gZmFsc2U7ICAvLyBJTkNSLT50cnVlLCBOT1JNQUwtPmZhbHNlIChob3cgYXR0cmlidXRlKVxyXG4gIHByaXZhdGUgX21ldGhvZE5hbWVTbmlwcGV0OiBzdHJpbmcgPSBudWxsOyAvLyBFbnRyeSBwb2ludCBtZXRob2ROYW1lIGZvciBzbmlwcGV0XHJcbiAgcHJpdmF0ZSBfbW9kZTogc3RyaW5nID0gJ1xcMCc7IC8vIEVycm9yfFdhcm5pbmdcclxuICAvLyBidXQgd2Ugc3RpbGwgbmVlZCB0byBza2lwIHRoZSBibG9jayBvcGVyYXRpb25zIGluIHRoZSBjbGllbnRcclxuICBwcml2YXRlIF9wcmdEZXNjcmlwdGlvbjogc3RyaW5nID0gbnVsbDtcclxuICBwcml2YXRlIF9wdWJsaWNOYW1lOiBzdHJpbmcgPSBudWxsO1xyXG4gIHByaXZhdGUgX3JldHVyblZhbDogRmllbGQgPSBudWxsOyAvLyByZXR1cm4gdmFsdWUgb2YgdmVyaWZ5IG9wclxyXG4gIHByaXZhdGUgX3J0RXZ0OiBSdW5UaW1lRXZlbnQgPSBudWxsOyAvLyBmb3IgUmFpc2UgZXZlbnRcclxuICBwcml2YXRlIF9zZXJ2ZXJJZDogbnVtYmVyID0gLTE7XHJcbiAgLy8gdGhlIGluZGV4IG9mIHRoaXMgb3BlcmF0aW9uIGluIHRoZSBzZXJ2ZXIncyBmbG93ICgwIG1lYW5zIGl0J3MgdGhlIGZpcnN0IG9wZXJhdGlvbiBpbiB0aGUgaGFuZGxlciwgMSBmb3IgdGhlIHNlY29uZCBldGMuKS4gVmFsaWQgZm9yOiBTZXJ2ZXJcclxuICBwcml2YXRlIGNhbGxlZFRhc2tEZWZpbml0aW9uSWQ6IFRhc2tEZWZpbml0aW9uSWQgPSBudWxsO1xyXG5cclxuICBwcml2YXRlIF9zaG93OiBDYWxsT3NTaG93ID0gQ2FsbE9zU2hvdy5Ob3JtYWw7XHJcbiAgcHJpdmF0ZSBfc3ViZm9ybUN0cmxOYW1lOiBzdHJpbmcgPSBudWxsOyAvLyBmb3IgQ2FsbCBvcGVyYXRpb24gd2l0aCBzdWJmb3JtIGRlc3RpbmF0aW9uXHJcbiAgcHJpdmF0ZSBfc3VidHlwZTogc3RyaW5nID0gJ1xcMCc7IC8vIElmfEVsc2V8TG9vcFxyXG4gIHByaXZhdGUgX3Rhc2s6IFRhc2sgPSBudWxsOyAvLyB0aGUgdGFzayBvZiB0aGUgb3BlcmF0aW9uXHJcbiAgcHJpdmF0ZSBfdGV4dDogc3RyaW5nID0gbnVsbDsgLy8gdGhlIHZlcmlmeSBtZXNzYWdlXHJcbiAgcHJpdmF0ZSBfdGl0bGU6IHN0cmluZyA9IG51bGw7IC8vIHRpdGxlIG9mIHZlcmlmeSBvcHJcclxuICBwcml2YXRlIF90aXRsZUV4cDogRXhwcmVzc2lvbiA9IG51bGw7IC8vIGV4cHJlc3Npb24gYXR0YWNoZWQgdG8gdGl0bGUgb2YgdmVyaWZ5IG9wclxyXG4gIHByaXZhdGUgX3R5cGU6IG51bWJlciA9IDA7IC8vIG9wZXJhdGlvbiBudW1iZXIgKGxpa2UgaW4gTWFnaWMpXHJcbiAgcHJpdmF0ZSBfdW5kbzogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIHByaXZhdGUgX2lzUm91dGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF9yb3V0ZXJQYXRoOiBzdHJpbmcgPSBudWxsO1xyXG4gIHByaXZhdGUgX29yaWdpbmFsUm91dGVyT3V0bGV0TmFtZTogc3RyaW5nID0gbnVsbDtcclxuICBwcml2YXRlIF9yb3V0ZVBhcmFtczogTGlzdDxhbnk+ID0gbnVsbDtcclxuXHJcbiAgY29uc3RydWN0b3IoKXtcclxuICB9XHJcblxyXG4gIGdldCBDYWxsZWRUYXNrRGVmaW5pdGlvbklkKCk6IFRhc2tEZWZpbml0aW9uSWQge1xyXG4gICAgcmV0dXJuIHRoaXMuY2FsbGVkVGFza0RlZmluaXRpb25JZDtcclxuICB9XHJcblxyXG4gIE9wZXJDYWxsTW9kZTogQ2FsbE9wZXJhdGlvbk1vZGUgPSAwO1xyXG5cclxuICBzZXQgVGFzayh2YWx1ZTogVGFzaykge1xyXG4gICAgdGhpcy5fdGFzayA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgZ2V0IFRhc2soKTogVGFzayB7XHJcbiAgICByZXR1cm4gdGhpcy5fdGFzaztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgSW1tZWRpYXRlKCk6ICBQcm9taXNlPGJvb2xlYW4+ICB7XHJcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5fd2FpdEV4cC5nZXRWYWwoKTtcclxuICB9XHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcGFyc2UgYW4gb3BlcmF0aW9uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBmaWxsRGF0YSh0YXNrUmVmOiBUYXNrLCBldnRIYW5kbGVyOiBFdmVudEhhbmRsZXIsIHBhcnNlcjogWG1sUGFyc2VyKTogdm9pZCB7XHJcbiAgICB0aGlzLl90YXNrID0gdGFza1JlZjtcclxuICAgIHRoaXMuX2V2dEhhbmRsZXIgPSBldnRIYW5kbGVyO1xyXG5cclxuICAgIHdoaWxlICh0aGlzLmluaXRJbm5lck9iamVjdHMocGFyc2VyLCBwYXJzZXIuZ2V0TmV4dFRhZygpLCB0YXNrUmVmKSkge1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGluaXQgaW5uZXIgYXR0cmlidXRlcyBvZiBPcGVyYXRpb24gb2JqZWN0IG9uIHBhcnNpbmcgdGltZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBpbml0SW5uZXJPYmplY3RzKHBhcnNlcjogWG1sUGFyc2VyLCBmb3VuZFRhZ05hbWU6IHN0cmluZywgdGFza1JlZjogVGFzayk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKGZvdW5kVGFnTmFtZSA9PT0gbnVsbClcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIGlmIChmb3VuZFRhZ05hbWUgPT09IENvbnN0SW50ZXJmYWNlLk1HX1RBR19FVkVOVCkge1xyXG4gICAgICB0aGlzLl9ydEV2dCA9IG5ldyBSdW5UaW1lRXZlbnQodGFza1JlZik7XHJcbiAgICAgIHRoaXMuX3J0RXZ0LmZpbGxEYXRhKHBhcnNlciwgdGFza1JlZik7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChmb3VuZFRhZ05hbWUgPT09IENvbnN0SW50ZXJmYWNlLk1HX1RBR19PUEVSKSB7XHJcbiAgICAgIHRoaXMuZmlsbEF0dHJpYnV0ZXMocGFyc2VyLCB0YXNrUmVmKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGZvdW5kVGFnTmFtZSA9PT0gXCIvXCIgKyBDb25zdEludGVyZmFjZS5NR19UQUdfT1BFUikge1xyXG4gICAgICBwYXJzZXIuc2V0Q3VyckluZGV4MkVuZE9mVGFnKCk7IC8vIHNldEN1cnJJbmRleChYbWxQYXJzZXIuaXNOZXh0VGFnQ2xvc2VkKE1HX1RBR19DT05UUk9MKSk7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGZvdW5kVGFnTmFtZSA9PT0gWE1MQ29uc3RhbnRzLk1HX1RBR19UQVNLREVGSU5JVElPTklEX0VOVFJZKSB7XHJcbiAgICAgIHRoaXMuSW5pdFRhc2tEZWZpbml0aW9uSUQocGFyc2VyKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVFeGNlcHRpb25Ub0xvZ1dpdGhNc2coXCJUaGVyZSBpcyBubyBzdWNoIHRhZyBpbiBPcGVyYXRpb24uIEluc2VydCBlbHNlIGlmIHRvIE9wZXJhdGlvbi5pbml0SW5uZXJPYmplY3RzIGZvciBcIiArIGZvdW5kVGFnTmFtZSk7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBnZXQgdGhlIGF0dHJpYnV0ZXMgb2YgdGhlIG9wZXJhdGlvblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ0YXNrUmVmXCI+dGhlIHRhc2sgb2YgdGhlIGhhbmRsZXIgY3VycmVudDwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBmaWxsQXR0cmlidXRlcyhwYXJzZXI6IFhtbFBhcnNlciwgdGFza1JlZjogVGFzayk6IHZvaWQge1xyXG4gICAgbGV0IHRva2Vuc1ZlY3RvcjogTGlzdDxzdHJpbmc+O1xyXG4gICAgbGV0IGVuZENvbnRleHQ6IG51bWJlciA9IHBhcnNlci5nZXRYTUxkYXRhKCkuaW5kZXhPZihYTUxDb25zdGFudHMuVEFHX0NMT1NFLCBwYXJzZXIuZ2V0Q3VyckluZGV4KCkpO1xyXG5cclxuICAgIGlmIChlbmRDb250ZXh0ICE9PSAtMSAmJiBlbmRDb250ZXh0IDwgcGFyc2VyLmdldFhNTGRhdGEoKS5sZW5ndGgpIHtcclxuXHJcbiAgICAgIC8vIGxhc3QgcG9zaXRpb24gb2YgaXRzIHRhZ1xyXG4gICAgICBsZXQgdGFnOiBTdHJpbmcgPSBwYXJzZXIuZ2V0WE1Mc3Vic3RyaW5nKGVuZENvbnRleHQpO1xyXG4gICAgICBwYXJzZXIuYWRkMkN1cnJJbmRleCh0YWcuaW5kZXhPZihDb25zdEludGVyZmFjZS5NR19UQUdfT1BFUikgKyBDb25zdEludGVyZmFjZS5NR19UQUdfT1BFUi5sZW5ndGgpO1xyXG5cclxuICAgICAgdG9rZW5zVmVjdG9yID0gWG1sUGFyc2VyLmdldFRva2VucyhwYXJzZXIuZ2V0WE1Mc3Vic3RyaW5nKGVuZENvbnRleHQpLCBYTUxDb25zdGFudHMuWE1MX0FUVFJfREVMSU0pO1xyXG4gICAgICB0aGlzLmluaXRFbGVtZW50cyh0b2tlbnNWZWN0b3IsIHRhc2tSZWYpO1xyXG5cclxuICAgICAgLy8gaW5pdCBpbm5lciByZWZlcmVuY2U6XHJcbiAgICAgIHBhcnNlci5zZXRDdXJySW5kZXgoZW5kQ29udGV4dCArIFhNTENvbnN0YW50cy5UQUdfQ0xPU0UubGVuZ3RoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRXhjZXB0aW9uVG9Mb2dXaXRoTXNnKFwiaW4gQ29tbWFuZC5GaWxsRGF0YSgpIG91dCBvZiBzdHJpbmcgYm91bmRzXCIpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIE1ha2UgaW5pdGlhbGl6YXRpb24gb2YgcHJpdmF0ZSBlbGVtZW50cyBieSBmb3VuZCB0b2tlbnNcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidG9rZW5zVmVjdG9yXCI+Zm91bmQgdG9rZW5zLCB3aGljaCBjb25zaXN0IGF0dHJpYnV0ZS92YWx1ZSBvZiBldmVyeSBmb3VuZFx0ZWxlbWVudDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ0YXNrUmVmXCI+Y3VycmVudDwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBpbml0RWxlbWVudHModG9rZW5zVmVjdG9yOiBMaXN0PFN0cmluZz4sIHRhc2tSZWY6IFRhc2spOiB2b2lkIHtcclxuICAgIGxldCBhdHRyaWJ1dGU6IFN0cmluZywgdmFsdWVTdHI7XHJcbiAgICBsZXQgZXhwSWQ6IG51bWJlcjtcclxuICAgIGxldCBpc0d1aVRocmVhZEV4ZWN1dGlvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIGZvciAobGV0IGo6IG51bWJlciA9IDA7IGogPCB0b2tlbnNWZWN0b3IubGVuZ3RoOyBqICs9IDIpIHtcclxuICAgICAgYXR0cmlidXRlID0gKHRva2Vuc1ZlY3Rvci5nZXRfSXRlbShqKSk7XHJcbiAgICAgIHZhbHVlU3RyID0gKHRva2Vuc1ZlY3Rvci5nZXRfSXRlbShqICsgMSkpO1xyXG5cclxuICAgICAgc3dpdGNoIChhdHRyaWJ1dGUpIHtcclxuICAgICAgICBjYXNlIFhNTENvbnN0YW50cy5NR19BVFRSX1RZUEU6XHJcbiAgICAgICAgICB0aGlzLl90eXBlID0gWG1sUGFyc2VyLmdldEludCh2YWx1ZVN0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfRkxEOlxyXG4gICAgICAgICAgdGhpcy5fZmllbGQgPSBPcGVyYXRpb24uSW5pdEZpZWxkKHZhbHVlU3RyLCB0aGlzLl90YXNrKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgWE1MQ29uc3RhbnRzLk1HX0FUVFJfRVhQOlxyXG4gICAgICAgICAgZXhwSWQgPSBYbWxQYXJzZXIuZ2V0SW50KHZhbHVlU3RyKTtcclxuICAgICAgICAgIHRoaXMuX2V4cCA9IHRhc2tSZWYuZ2V0RXhwQnlJZChleHBJZCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfVEVYVDpcclxuICAgICAgICAgIHRoaXMuX3RleHQgPSBYbWxQYXJzZXIudW5lc2NhcGUodmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX01PREU6XHJcbiAgICAgICAgICB0aGlzLl9tb2RlID0gdmFsdWVTdHJbMF07XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfU1VCVFlQRTpcclxuICAgICAgICAgIHRoaXMuX3N1YnR5cGUgPSB2YWx1ZVN0clswXTtcclxuICAgICAgICAgIGlmICh0aGlzLl90eXBlID09PSBDb25zdEludGVyZmFjZS5NR19PUEVSX0JMT0NLKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9zdWJ0eXBlID09PSAnRScpXHJcbiAgICAgICAgICAgICAgdGhpcy5fdHlwZSA9IENvbnN0SW50ZXJmYWNlLk1HX09QRVJfRUxTRTtcclxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5fc3VidHlwZSA9PT0gJ0wnKVxyXG4gICAgICAgICAgICAgIHRoaXMuX3R5cGUgPSBDb25zdEludGVyZmFjZS5NR19PUEVSX0xPT1A7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfQ0xPU0U6XHJcbiAgICAgICAgICB0aGlzLl9ibG9ja0Nsb3NlID0gWG1sUGFyc2VyLmdldEludCh2YWx1ZVN0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfRU5EOlxyXG4gICAgICAgICAgdGhpcy5fYmxvY2tFbmQgPSBYbWxQYXJzZXIuZ2V0SW50KHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9IT1c6XHJcbiAgICAgICAgICB0aGlzLl9pbmNyZW1lbnRhbCA9ICh2YWx1ZVN0ciA9PT0gXCJJXCIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1VORE86XHJcbiAgICAgICAgICBpZiAodmFsdWVTdHJbMF0gPT09ICdOJylcclxuICAgICAgICAgICAgdGhpcy5fdW5kbyA9IGZhbHNlO1xyXG4gICAgICAgICAgZWxzZSBpZiAodmFsdWVTdHJbMF0gPT09ICdZJylcclxuICAgICAgICAgICAgdGhpcy5fdW5kbyA9IHRydWU7XHJcbiAgICAgICAgICBlbHNlIExvZ2dlci5JbnN0YW5jZS5Xcml0ZUV4Y2VwdGlvblRvTG9nV2l0aE1zZyhcImluIE9wZXJhdGlvbi5pbml0RWxlbWVudHMoKTogTm8gc3VjaCB2YWx1ZSB0byB0aGUgTUdfQVRUUl9VTkRPIGZvciBcIiArIHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9ESVNQTEFZOlxyXG4gICAgICAgICAgdGhpcy5fZGlzcGxheSA9IHZhbHVlU3RyWzBdO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1dBSVQ6XHJcbiAgICAgICAgICB0aGlzLl93YWl0RXhwLnNldFZhbCh0YXNrUmVmLCB2YWx1ZVN0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfUkVUQUlOX0ZPQ1VTOlxyXG4gICAgICAgICAgdGhpcy5fcmV0YWluRm9jdXMuc2V0VmFsKHRhc2tSZWYsIHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9TWU5DX0RBVEE6XHJcbiAgICAgICAgICB0aGlzLl9zeW5jRGF0YS5zZXRWYWwodGFza1JlZiwgdmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1NIT1c6XHJcbiAgICAgICAgICB0aGlzLl9zaG93ID0gPENhbGxPc1Nob3c+WG1sUGFyc2VyLmdldEludCh2YWx1ZVN0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfQ05EOlxyXG4gICAgICAgICAgdGhpcy5fY29uZEV4cC5zZXRWYWwodGFza1JlZiwgdmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0FSR0xJU1Q6XHJcbiAgICAgICAgICB0aGlzLl9hcmdMaXN0ID0gbmV3IEFyZ3VtZW50c0xpc3QoKTtcclxuICAgICAgICAgIHRoaXMuX2FyZ0xpc3QuZmlsbExpc3QodmFsdWVTdHIsIHRoaXMuX3Rhc2spO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1JFRlJFU0hPTjpcclxuICAgICAgICAgIHRoaXMuX2FyZ0xpc3QuUmVmcmVzaE9uU3RyaW5nID0gdmFsdWVTdHIuVHJpbSgpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1NFUlZFUl9JRDpcclxuICAgICAgICAgIHRoaXMuX3NlcnZlcklkID0gWG1sUGFyc2VyLmdldEludCh2YWx1ZVN0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfT1BFUl9DQUxMTU9ERTpcclxuICAgICAgICAgIHRoaXMuT3BlckNhbGxNb2RlID0gPENhbGxPcGVyYXRpb25Nb2RlPnZhbHVlU3RyWzBdO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9TVUJGT1JNX0NUUkw6XHJcbiAgICAgICAgICB0aGlzLl9zdWJmb3JtQ3RybE5hbWUgPSBYbWxQYXJzZXIudW5lc2NhcGUodmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0NIRUNLX0JZX1NFUlZFUjpcclxuICAgICAgICAgIHRoaXMuX2NoZWNrQnlTZXJ2ZXIgPSBYbWxQYXJzZXIuZ2V0Qm9vbGVhbih2YWx1ZVN0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfUFVCTElDOlxyXG4gICAgICAgICAgdGhpcy5fcHVibGljTmFtZSA9IHZhbHVlU3RyO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1BSR19ERVNDUklQVElPTjpcclxuICAgICAgICAgIHRoaXMuX3ByZ0Rlc2NyaXB0aW9uID0gdmFsdWVTdHI7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfQ1BZX0dMQl9QUk1TOlxyXG4gICAgICAgICAgdGhpcy5fZ2xvYmFsUGFyYW1zU2hvdWxkQmVDb3BpZWQgPSBYbWxQYXJzZXIuZ2V0Qm9vbGVhbih2YWx1ZVN0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfRVhFQ19PTl9TRVJWRVI6XHJcbiAgICAgICAgICB0aGlzLl9leGVjT25TZXJ2ZXIgPSBYbWxQYXJzZXIuZ2V0Qm9vbGVhbih2YWx1ZVN0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuXHRcdGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9FWEVDX09OX0NMSUVOVDpcclxuICAgICAgICAgIHRoaXMuX2V4ZWNPbkNsaWVudCA9IFhtbFBhcnNlci5nZXRCb29sZWFuKHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9USVRMRTpcclxuICAgICAgICAgIHRoaXMuX3RpdGxlID0gWG1sUGFyc2VyLnVuZXNjYXBlKHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9USVRMRV9FWFA6XHJcbiAgICAgICAgICBleHBJZCA9IFhtbFBhcnNlci5nZXRJbnQodmFsdWVTdHIpO1xyXG4gICAgICAgICAgdGhpcy5fdGl0bGVFeHAgPSB0YXNrUmVmLmdldEV4cEJ5SWQoZXhwSWQpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0lNQUdFOlxyXG4gICAgICAgICAgdGhpcy5faW1hZ2UgPSB2YWx1ZVN0clswXTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9CVVRUT05TOlxyXG4gICAgICAgICAgdGhpcy5fYnV0dG9ucyA9IHZhbHVlU3RyWzBdO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1JFVFVSTl9WQUw6XHJcbiAgICAgICAgICB0aGlzLl9yZXR1cm5WYWwgPSBPcGVyYXRpb24uSW5pdEZpZWxkKHZhbHVlU3RyLCB0aGlzLl90YXNrKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9FUlJfTE9HX0FQUEVORDpcclxuICAgICAgICAgIHRoaXMuX2VyckxvZ0FwcGVuZCA9IFhtbFBhcnNlci5nZXRCb29sZWFuKHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9PUEVSX01FVEhPRE5BTUU6XHJcbiAgICAgICAgICB0aGlzLl9tZXRob2ROYW1lU25pcHBldCA9IHZhbHVlU3RyO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0lTX0dVSV9USFJFQURfRVhFQ1VUSU9OOlxyXG4gICAgICAgICAgaXNHdWlUaHJlYWRFeGVjdXRpb24gPSBYbWxQYXJzZXIuZ2V0Qm9vbGVhbih2YWx1ZVN0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfSVNfUk9VVEU6XHJcbiAgICAgICAgICB0aGlzLl9pc1JvdXRlID0gWG1sUGFyc2VyLmdldEJvb2xlYW4odmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBYTUxDb25zdGFudHMuTUdfQVRUUl9ST1VURVJfUEFUSDpcclxuICAgICAgICAgIHRoaXMuX3JvdXRlclBhdGggPSBYbWxQYXJzZXIudW5lc2NhcGUodmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZUV4Y2VwdGlvblRvTG9nV2l0aE1zZyhcIlRoZXJlIGlzIG5vIHN1Y2ggdGFnIGluIE9wZXJhdGlvbiBjbGFzcy4gSW5zZXJ0IGNhc2UgdG8gT3BlcmF0aW9uLmluaXRFbGVtZW50cyBmb3IgXCIgKyBhdHRyaWJ1dGUpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0aGlzLl9zZXJ2ZXJJZCA+IC0xKVxyXG4gICAgICB0aGlzLl9jbWRUb1NlcnZlciA9IENvbW1hbmRGYWN0b3J5LkNyZWF0ZUV4ZWNPcGVyQ29tbWFuZCh0aGlzLl90YXNrLmdldFRhc2tUYWcoKSwgXCJcIiArIHRoaXMuX2V2dEhhbmRsZXIuZ2V0SWQoKSwgdGhpcy5fc2VydmVySWQsIEludDMyLk1pblZhbHVlLCBudWxsKTtcclxuXHJcbiAgICBpZiAodGhpcy5faXNSb3V0ZSkge1xyXG4gICAgICB0aGlzLl9vcmlnaW5hbFJvdXRlck91dGxldE5hbWUgPSB0aGlzLl9zdWJmb3JtQ3RybE5hbWUgIT09IG51bGwgPyB0aGlzLl9zdWJmb3JtQ3RybE5hbWUgOiBcIlwiO1xyXG5cclxuICAgICAgaWYgKHRoaXMuX3N1YmZvcm1DdHJsTmFtZSA9PSBudWxsKSB7XHJcbiAgICAgICAgbGV0IGRlZmF1bHRSb3V0ZXJPdXRsZXQ6IE1nQ29udHJvbEJhc2UgPSB0aGlzLl90YXNrLmdldEZvcm0oKS5EZWZhdWx0Um91dGVyT3V0bGV0O1xyXG4gICAgICAgIHRoaXMuX3N1YmZvcm1DdHJsTmFtZSA9IGRlZmF1bHRSb3V0ZXJPdXRsZXQgIT09IG51bGwgPyBkZWZhdWx0Um91dGVyT3V0bGV0Lk5hbWUgOiBcIlwiO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJwYXJzZXJcIj48L3BhcmFtPlxyXG4gIEluaXRUYXNrRGVmaW5pdGlvbklEKHBhcnNlcjogWG1sUGFyc2VyKTogdm9pZCB7XHJcbiAgICBsZXQgeG1sQnVmZmVyOiBzdHJpbmcgPSBwYXJzZXIuUmVhZFRvRW5kT2ZDdXJyZW50RWxlbWVudCgpO1xyXG4gICAgbGV0IHRhc2tEZWZpbml0aW9uSWRUYWJsZVNheEhhbmRsZXI6IFRhc2tEZWZpbml0aW9uSWRUYWJsZVNheEhhbmRsZXIgPSBuZXcgVGFza0RlZmluaXRpb25JZFRhYmxlU2F4SGFuZGxlcih0aGlzLlNldFRhc2tEZWZpbml0aW9uSWQpO1xyXG4gICAgdGFza0RlZmluaXRpb25JZFRhYmxlU2F4SGFuZGxlci5wYXJzZSh4bWxCdWZmZXIpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBjYWxsYmFjayBmb3IgdGhlIHNheCBwYXJzZXJcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInRhc2tEZWZpbml0aW9uSWRcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInhtbElkXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJkZWZhdWx0VGFnTGlzdFwiPjwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBTZXRUYXNrRGVmaW5pdGlvbklkKHRhc2tEZWZpbml0aW9uSWQ6IFRhc2tEZWZpbml0aW9uSWQpOiB2b2lkIHtcclxuICAgIHRoaXMuY2FsbGVkVGFza0RlZmluaXRpb25JZCA9IHRhc2tEZWZpbml0aW9uSWQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgSW5pdGlhbGl6ZSB0aGUgZmllbGRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidmFsdWVTdHJcIj5hIHJlZmVyZW5jZSB0byB0aGUgZmllbGQ8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidGFza1wiPjwvcGFyYW0+XHJcbiAgc3RhdGljIEluaXRGaWVsZCh2YWx1ZVN0cjogc3RyaW5nLCB0YXNrOiBUYXNrKTogRmllbGQge1xyXG4gICAgbGV0IFRhc2tGaWVsZDogTGlzdDxzdHJpbmc+ID0gWG1sUGFyc2VyLmdldFRva2Vucyh2YWx1ZVN0ciwgJywnKS8qJywnKi87XHJcbiAgICBpZiAoVGFza0ZpZWxkLmxlbmd0aCA9PT0gMikge1xyXG4gICAgICBsZXQgcGFyZW50OiBudW1iZXIgPSBOTnVtYmVyLlBhcnNlKFRhc2tGaWVsZC5nZXRfSXRlbSgwKSk7XHJcbiAgICAgIGxldCBmbGRJRDogbnVtYmVyID0gTk51bWJlci5QYXJzZShUYXNrRmllbGQuZ2V0X0l0ZW0oMSkpO1xyXG4gICAgICBsZXQgZmllbGQ6IEZpZWxkID0gPEZpZWxkPnRhc2suZ2V0RmllbGREZWYocGFyZW50LCBmbGRJRCk7XHJcbiAgICAgIHJldHVybiBmaWVsZDtcclxuICAgIH1cclxuICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZUV4Y2VwdGlvblRvTG9nV2l0aE1zZyhOU3RyaW5nLkZvcm1hdChcIlVua25vd24gZmllbGQ6ICd7MH0nXCIsIHZhbHVlU3RyKSk7XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBleGVjdXRlIHRoZSBvcGVyYXRpb25cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibXByZ0NyZWF0b3JcIj5yZWxldmFudCBvbmx5IHdoZW4gdGhlIG9wZXJhdGlvbiBiZWxvbmdzIHRvIGEgbWFpbiBwcm9ncmFtLlxyXG4gIC8vLyAgIEl0IGlkZW50aWZpZXMgdGhlIHRhc2sgd2hpY2ggY2F1c2VkIHRoaXMgbWFpbiBwcm9ncmFtIHRvIHBhcnRpY2lwYXRlIGluIHRoZSBydW50aW1lXHJcbiAgLy8vICAgZmxvdyAoaS5lLiB3aGVuIHJ1bm5pbmcgYSB0YXNrIGZyb20gYSBkaWZmZXJlbnQgY29tcG9uZW50LCB3ZSBpbnN0YW50aWF0ZSBoaXMgbWFpbiBwcm9ncmFtXHJcbiAgLy8vICAgcmlnaHQgYWJvdmUgaXQuXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJjdHJsXCI+dGhlIGZvY3VzIG5lZWQgdG8gYmUgcmV0dXJuZWQgYWZ0ZXIgdGhlIFZFUklGWSBvcGVyYXRpb24gaW4gTWVzc2FnZSBCb3ggbmVlZHMgb25seVxyXG4gIC8vLyAgIGFsbCBhbm90aGVyIG9wZXJhdGlvbnMgY2FuIHVzZSBudWxsXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJyZXR1cm5lZEZyb21TZXJ2ZXJcIj50cnVlIGlmIHRoZSBzZXJ2ZXIgcmV0dXJuZWQgdGhlIGV4ZWN1dGlvbiB0byB0aGlzIG9wZXJhdGlvbjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBib29sZWFuIGZvciB2ZXJpZnkgYW5kIGJsb2NrIG9wZXJhdGlvbnM8L3JldHVybnM+XHJcbiAgYXN5bmMgZXhlY3V0ZShyZXR1cm5lZEZyb21TZXJ2ZXI6IGJvb2xlYW4pOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGxldCBsYXN0UnRFdmVudDogUnVuVGltZUV2ZW50ID0gQWNjZXNzSGVscGVyLmV2ZW50c01hbmFnZXIuZ2V0TGFzdFJ0RXZlbnQoKTtcclxuICAgIGxldCBtcHJnQ3JlYXRvcjogVGFzayA9IG51bGw7XHJcbiAgICBsZXQgZmxvd01vbml0b3I6IEZsb3dNb25pdG9yUXVldWUgPSBGbG93TW9uaXRvclF1ZXVlLkluc3RhbmNlO1xyXG5cclxuICAgIGlmIChsYXN0UnRFdmVudCAhPT0gbnVsbClcclxuICAgICAgbXByZ0NyZWF0b3IgPSA8VGFzaz5sYXN0UnRFdmVudC5nZXRNYWluUHJnQ3JlYXRvcigpO1xyXG5cclxuICAgIGlmIChyZXR1cm5lZEZyb21TZXJ2ZXIgfHxcclxuICAgICAgKCFyZXR1cm5lZEZyb21TZXJ2ZXIgJiYgKHRoaXMuX3R5cGUgIT09IENvbnN0SW50ZXJmYWNlLk1HX09QRVJfU0VSVkVSIHx8ICF0aGlzLl9jb25kRXhwLmlzU2VydmVyRXhwKCkpKSkge1xyXG4gICAgICBpZiAoISBhd2FpdCB0aGlzLmNhbkV4ZWN1dGUoKSkge1xyXG4gICAgICAgIGlmICh0aGlzLl90eXBlICE9PSBDb25zdEludGVyZmFjZS5NR19PUEVSX0xPT1ApXHJcbiAgICAgICAgICBhd2FpdCBmbG93TW9uaXRvci5hZGRGbG93RmllbGRPcGVyYXRpb24odGhpcywgZmFsc2UsIHRoaXMuX3Rhc2suR2V0VGFza0RldGFpbHMoKSk7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5fdHlwZSAhPT0gQ29uc3RJbnRlcmZhY2UuTUdfT1BFUl9MT09QICYmIHRoaXMuX3R5cGUgIT09IENvbnN0SW50ZXJmYWNlLk1HX09QRVJfRU5EQkxPQ0spXHJcbiAgICAvLyBXZSBjYWxsIGFkZEZsb3dPcGVyYXRpb25TZWxlY3Qgb25seSBhdCB0aGUgYmVnaW5pbmcgYW5kIGVuZCBvZiB0aGUgbG9vcCBhdCBFdmVudEhhbmRsZXI6OmV4ZWN1dGVcclxuICAgICAgYXdhaXQgZmxvd01vbml0b3IuYWRkRmxvd0ZpZWxkT3BlcmF0aW9uKHRoaXMsIHRydWUsIHRoaXMuX3Rhc2suR2V0VGFza0RldGFpbHMoKSk7XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgc3dpdGNoICh0aGlzLl90eXBlKSB7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19PUEVSX1ZFUklGWTpcclxuICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLm9wZXJWZXJpZnkoKTtcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX09QRVJfQkxPQ0s6XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5vcGVyQmxvY2soKTtcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX09QRVJfTE9PUDpcclxuICAgICAgICAgIGlmICghdGhpcy5nZXRFeGVjT25TZXJ2ZXIoKSlcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMub3BlckJsb2NrKCk7XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5vcGVyU2VydmVyKG1wcmdDcmVhdG9yKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19PUEVSX0VMU0U6XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5vcGVyRWxzZSgpO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfT1BFUl9FVkFMVUFURTpcclxuICAgICAgICAgIGF3YWl0IHRoaXMub3BlckV2YWx1YXRlKCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX09QRVJfVVBEQVRFOlxyXG4gICAgICAgICAgYXdhaXQgdGhpcy5vcGVyVXBkYXRlKG1wcmdDcmVhdG9yKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfT1BFUl9SQUlTRV9FVkVOVDpcclxuICAgICAgICAgIGF3YWl0IHRoaXMub3BlclJhaXNlRXZlbnQobXByZ0NyZWF0b3IsIHJldHVybmVkRnJvbVNlcnZlcik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX09QRVJfU0VSVkVSOlxyXG4gICAgICAgICAgYXdhaXQgdGhpcy5vcGVyU2VydmVyKG1wcmdDcmVhdG9yKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfT1BFUl9DQUxMOlxyXG4gICAgICAgICAgaWYgKHRoaXMuX3B1YmxpY05hbWUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLm9wZXJDYWxsUGFyYWxsZWwoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2UgaWYgKHRoaXMuX3N1YmZvcm1DdHJsTmFtZSA9PSBudWxsKVxyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLm9wZXJDYWxsKG1wcmdDcmVhdG9yKTtcclxuICAgICAgICAgIC8vIFN1YmZvcm0gRGVzdGluYXRpb24gQ2FsbCBvUiBDYWxsIFJvdXRlXHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbGV0IHN1YmZvcm1UYXNrOiBUYXNrO1xyXG4gICAgICAgICAgICBsZXQgaXNFbmRQcm9nOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9jaGVja0J5U2VydmVyKSB7XHJcbiAgICAgICAgICAgICAgaWYgKCEodGhpcy5fY21kVG9TZXJ2ZXIgaW5zdGFuY2VvZiBFeGVjT3BlckNvbW1hbmQpKVxyXG4gICAgICAgICAgICAgICAgRGVidWcuQXNzZXJ0KGZhbHNlKTtcclxuXHJcbiAgICAgICAgICAgICAgbGV0IGNvbW1hbmQ6IEV4ZWNPcGVyQ29tbWFuZCA9IDxFeGVjT3BlckNvbW1hbmQ+dGhpcy5fY21kVG9TZXJ2ZXI7XHJcbiAgICAgICAgICAgICAgY29tbWFuZC5DaGVja09ubHkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMub3BlckNhbGwobXByZ0NyZWF0b3IpO1xyXG4gICAgICAgICAgICAgIGNvbW1hbmQuQ2hlY2tPbmx5ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgaWYgKEFjY2Vzc0hlbHBlci5ldmVudHNNYW5hZ2VyLmdldE5leHRPcGVySWR4KHRoaXMsIHRydWUpID4gLTEpXHJcbiAgICAgICAgICAgICAgICBpc0VuZFByb2cgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoaXNFbmRQcm9nKSB7XHJcbiAgICAgICAgICAgICAgbGV0IGRlc3RTdWJGb3JtOiBNZ0NvbnRyb2wgPSAoPE1nRm9ybT50aGlzLl90YXNrLmdldEZvcm0oKSkuZ2V0U3ViRm9ybUN0cmxCeU5hbWUodGhpcy5fc3ViZm9ybUN0cmxOYW1lKTtcclxuXHJcbiAgICAgICAgICAgICAgLy8gQSBjYWxsIHJvdXRlIG9wZXJhdGlvbiBuZWVkcyBhbiBvdXRsZXQuIElmIGEgbWF0Y2hpbmcgb3V0bGV0IGlzIG5vdCBmb3VuZCwgQ2FsbCByb3V0ZSBjYW5ub3QgZXhlY3V0ZS5cclxuICAgICAgICAgICAgICBpZiAodGhpcy5faXNSb3V0ZSAmJiAoZGVzdFN1YkZvcm0gPT09IG51bGwgfHwgIWRlc3RTdWJGb3JtLklzUm91dGVyT3V0bGV0KCkpKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgICBpZiAoZGVzdFN1YkZvcm0gIT0gbnVsbCkge1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9pc1JvdXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgIGxldCBjYW5Sb3V0ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICBsZXQgcnRFdm50ID0gQWNjZXNzSGVscGVyLmV2ZW50c01hbmFnZXIuZ2V0TGFzdFJ0RXZlbnQoKTtcclxuICAgICAgICAgICAgICAgICAgaWYgKHJ0RXZudCAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3JvdXRlUGFyYW1zID0gcnRFdm50LmdldFJvdXRlUGFyYW1MaXN0KCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICgoYXdhaXQgcnRFdm50LmdldEFyZ0xpc3QoKS5nZXRBcmcoMCkuZ2V0VmFsdWUoU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQSwgMCkpLnRyaW0oKSA9PT0gdGhpcy5fcm91dGVyUGF0aCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgKChydEV2bnQuZ2V0QXJnTGlzdCgpLmdldEFyZygxKS5za2lwQXJnKCkpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChhd2FpdCBydEV2bnQuZ2V0QXJnTGlzdCgpLmdldEFyZygxKS5nZXRWYWx1ZShTdG9yYWdlQXR0cmlidXRlLkFMUEhBLCAwKSkudHJpbSgpID09PSB0aGlzLl9vcmlnaW5hbFJvdXRlck91dGxldE5hbWUpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgY2FuUm91dGUgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWNhblJvdXRlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgc3ViZm9ybVRhc2sgPSA8VGFzaz5kZXN0U3ViRm9ybS5nZXRTdWJmb3JtVGFzaygpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChzdWJmb3JtVGFzayAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgIGxldCB0ZXJtaW5hdGVUYXNrR3JhY2VmdWxseSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgIGxldCBydEV2bnQgPSBBY2Nlc3NIZWxwZXIuZXZlbnRzTWFuYWdlci5nZXRMYXN0UnRFdmVudCgpO1xyXG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5faXNSb3V0ZSAmJiBydEV2bnQgIT09IG51bGwgJiYgcnRFdm50LmlzR3VpVHJpZ2dlcmVkRXZlbnQoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRlcm1pbmF0ZVRhc2tHcmFjZWZ1bGx5ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgQWNjZXNzSGVscGVyLmV2ZW50c01hbmFnZXIuc2V0U3RvcEV4ZWN1dGlvbih0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBpZiAoYXdhaXQgc3ViZm9ybVRhc2suZW5kVGFzayh0cnVlLCBmYWxzZSwgIXRlcm1pbmF0ZVRhc2tHcmFjZWZ1bGx5LCB0cnVlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwYXJlbnRUYXNrOiBUYXNrID0gPFRhc2s+ZGVzdFN1YkZvcm0uZ2V0Rm9ybSgpLmdldFRhc2soKTtcclxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRUYXNrLlRhc2tTZXJ2aWNlLlJlbW92ZVJlY29tcHV0ZXMocGFyZW50VGFzaywgc3ViZm9ybVRhc2spO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgLy8gaWYgdGhlIHRhc2sgZmFpbGVkIHRvIHRlcm1pbmF0ZSwgZG8gbm8gcHJvY2VlZCB0byBjYWxsIHRoZSBuZXcgdGFzay5cclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChMYXN0Rm9jdXNlZE1hbmFnZXIuZ2V0TGFzdEZvY3VzZWRDb250cm9sKCkgIT0gbnVsbCAmJlxyXG4gICAgICAgICAgICAgICAgICBMYXN0Rm9jdXNlZE1hbmFnZXIuZ2V0TGFzdEZvY3VzZWRDb250cm9sKCkuaXNEZXNjZW5kZW50T2ZDb250cm9sKGRlc3RTdWJGb3JtKSlcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fdGFzay5SZXRhaW5Gb2N1cyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgZWxzZSB0aGlzLl90YXNrLlJldGFpbkZvY3VzID0gYXdhaXQgdGhpcy5fcmV0YWluRm9jdXMuZ2V0VmFsKCk7XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICBhd2FpdCB0aGlzLm9wZXJDYWxsKG1wcmdDcmVhdG9yKTtcclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8vIENhbGwgb3BlcmF0aW9uIHNob3VsZCByZXR1cm4gd2hldGhlciBpdCBleGVjdXRlZCBhIENhbGwgUm91dGUgb3Igbm90LlxyXG4gICAgICAgICAgLy8gVGhpcyBpcyBuZWVkZWQgYnkgdGhlIGNhbGxlciBiZWNhdXNlLCBpdCBoYXMgdG8gc3RvcCBleGVjdXRpbmcgc3Vic2VxdWVudFxyXG4gICAgICAgICAgLy8gb3BlcmF0aW9ucyBpbiBjYXNlIGEgY2FsbCByb3V0ZSBnZXRzIGV4ZWN1dGVkLlxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuX2lzUm91dGU7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZUV4Y2VwdGlvblRvTG9nV2l0aE1zZyhcIlRoZXJlIGlzIG5vIHN1Y2ggdHlwZSBvZiBvcGVyYXRpb24gXCIgKyB0aGlzLl90eXBlKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXgpIHtcclxuICAgICAgdGhyb3cgZXg7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBjYWxsIGEgcGFyYWxsZWwgcmljaC1jbGllbnQgcHJvZ3JhbVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBvcGVyQ2FsbFBhcmFsbGVsKCk6IHZvaWQge1xyXG4gICAgT3BlcmF0aW9uLmNhbGxQYXJhbGxlbCh0aGlzLl90YXNrLCB0aGlzLl9wdWJsaWNOYW1lLCB0aGlzLl9hcmdMaXN0LCB0aGlzLl9nbG9iYWxQYXJhbXNTaG91bGRCZUNvcGllZCwgdGhpcy5fcHJnRGVzY3JpcHRpb24pO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGNhbGxQYXJhbGxlbCh0YXNrOiBUYXNrLCBwdWJsaWNOYW1lOiBzdHJpbmcsIGFyZ0xpc3Q6IEFyZ3VtZW50c0xpc3QsIGdsb2JhbFBhcmFtc1Nob3VsZEJlQ29waWVkOiBib29sZWFuLCBwcmdEZXNjcmlwdGlvbjogc3RyaW5nKTogdm9pZCB7XHJcbiAgLy8gICBpZiAodGFzay5Jc09mZmxpbmUpIHtcclxuICAvLyAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRXhjZXB0aW9uVG9Mb2dXaXRoTXNnKFwiQ2FuJ3QgcnVuIGEgcGFyYWxsZWwgcHJvZ3JhbSBmcm9tIGFuIG9mZmxpbmUgdGFza1wiKTtcclxuICAvLyAgICAgcmV0dXJuO1xyXG4gIC8vICAgfVxyXG4gIC8vXHJcbiAgLy8gICAvLyAgVGhlIHJpY2gtY2xpZW50IHdpbGwgcXVlcnkgdGhlIHJ1bnRpbWUtZW5naW5lIGZvciB0aGUgdXAtdG8tZGF0ZSBsaXN0IG9mIGdsb2JhbCBwYXJhbXNcclxuICAvLyAgIC8vICBvZiB0aGUgY3VycmVudCBjb250ZXh0IG9ubHkgaWYgdGhlIGNhbGxFRCAocGFyYWxsZWwpIHByb2dyYW0gcmVxdWVzdHMgY29weWluZyBvZiBnbG9iYWwgcGFyYW1zLFxyXG4gIC8vICAgLy8gIHRoZSBjYWxsRVIgcHJvZ3JhbSBzaG91bGQgcXVlcnkgdGhlbSBmcm9tIHRoZSBydW50aW1lLWVuZ2luZVxyXG4gIC8vICAgaWYgKGdsb2JhbFBhcmFtc1Nob3VsZEJlQ29waWVkKSB7XHJcbiAgLy8gICAgIGxldCBtZ0RhdGE6IE1HRGF0YSA9IHRhc2suZ2V0TUdEYXRhKCk7XHJcbiAgLy8gICAgIGxldCBjbWQ6IElDbGllbnRDb21tYW5kID0gQ29tbWFuZEZhY3RvcnkuQ3JlYXRlUXVlcnlHbG9iYWxQYXJhbXNDb21tYW5kKCk7XHJcbiAgLy8gICAgIG1nRGF0YS5DbWRzVG9TZXJ2ZXIuQWRkKGNtZCk7XHJcbiAgLy8gICAgIENvbW1hbmRzUHJvY2Vzc29yTWFuYWdlci5HZXRDb21tYW5kc1Byb2Nlc3NvcigpLkV4ZWN1dGUoQ29tbWFuZHNQcm9jZXNzb3JCYXNlX1NlbmRpbmdJbnN0cnVjdGlvbi5PTkxZX0NPTU1BTkRTKTtcclxuICAvLyAgIH1cclxuICAvLyAgIC8vIGNsb25lIHRoZSBleGVjdXRpb24gcHJvcGVydGllcyBvZiB0aGUgY3VycmVudCBjbGllbnRcclxuICAvLyAgIExvZ2dlci5pbnN0YW5jZS5Xcml0ZUVycm9yVG9Mb2coXCJjYWxsUGFyYWxsZWwgY2FsbGVkXCIpO1xyXG4gIC8vICAgbGV0IGNhbGxlZFByb2dyYW1Qcm9wczogYW55ID0gQ2xpZW50TWFuYWdlci5JbnN0YW5jZS5jb3B5RXhlY3V0aW9uUHJvcHMoKTtcclxuICAvLyAgIFNlcnZlckNvbmZpZy5JbnN0YW5jZS5zZXRHbG9iYWxQYXJhbXMobnVsbCk7XHJcbiAgLy9cclxuICAvLyAgIC8vIHNldCB0aGUgY2FsbGVkIHByb2dyYW0ncyBpbnRlcm5hbCBuYW1lXHJcbiAgLy8gICBjYWxsZWRQcm9ncmFtUHJvcHMuc2V0X0l0ZW0oQ29uc3RJbnRlcmZhY2UuUkVRX1BSR19OQU1FLCBwdWJsaWNOYW1lKTtcclxuICAvL1xyXG4gIC8vICAgLy8gU2VydmVyIHNlbmRzIHByZ0Rlc2NpcHJ0aW9uIG9ubHkgd2hlbiBQdWJsaWNOYW1lIGlzIG5vdCBzcGVjaWZpZWQuXHJcbiAgLy8gICAvLyBPdGhlcndpc2Ugc2VydmVyIHNlbmRzIGEgZmljdGl2ZSBwcmdEZXNjcmlwdGlvbiBsaWtlIDogX1Byb2dyYW1fSWRfPElTTj4uXHJcbiAgLy8gICAvLyBXaGVuIHB1YmxpYyBuYW1lIGlzIHNwZWNpZmllZCBwcmdEZXNjcmlwdGlvbiBpcyBub3QgdXNlZCBhbmQgaXQgd2lsbCBiZSBudWxsLlxyXG4gIC8vICAgaWYgKCFOU3RyaW5nLklzTnVsbE9yRW1wdHkocHJnRGVzY3JpcHRpb24pKSB7XHJcbiAgLy8gICAgIGNhbGxlZFByb2dyYW1Qcm9wcy5zZXRfSXRlbShDb25zdEludGVyZmFjZS5SRVFfUFJHX0RFU0NSSVBUSU9OLCBwcmdEZXNjcmlwdGlvbik7XHJcbiAgLy8gICB9XHJcbiAgLy8gICBjYWxsZWRQcm9ncmFtUHJvcHMuc2V0X0l0ZW0oQ29uc3RJbnRlcmZhY2UuUEFSQUxMRUxfRVhFQ1VUSU9OLCBcIllcIik7XHJcbiAgLy9cclxuICAvLyAgIC8vIGFyZ3VtZW50cyB0byB0aGUgcGFyYWxsZWwgcHJvZ3JhbVxyXG4gIC8vICAgaWYgKGFyZ0xpc3QgIT09IG51bGwpIHtcclxuICAvLyAgICAgbGV0IHByZ0FyZ3M6IHN0cmluZyA9IGFyZ0xpc3QudG9VUkwodHJ1ZSk7XHJcbiAgLy8gICAgIGNhbGxlZFByb2dyYW1Qcm9wcy5zZXRfSXRlbShDb25zdEludGVyZmFjZS5SRVFfQVJHUywgcHJnQXJncyk7XHJcbiAgLy8gICB9XHJcbiAgLy8gICBsZXQgWE1MZGF0YTogU3RyaW5nQnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7XHJcbiAgLy8gICB0cnkge1xyXG4gIC8vICAgICBjYWxsZWRQcm9ncmFtUHJvcHMuc3RvcmVUb1hNTChYTUxkYXRhKTtcclxuICAvL1xyXG4gIC8vICAgICAvLyBJZiBlbmNvZGluZyB3YXMgZGlzYWJsZWQsIGVuYWJsZSBpdCB0byBjcmVhdGUgdGhlIHJpZ2h0IGNvbW1hbmQgbGluZSBmb3IgdGhlIHBhcmFsbGVsIHByb2dyYW1cclxuICAvLyAgICAgbGV0IGVuY29kaW5nRW5hYmxlZDogYm9vbGVhbiA9IEh0dHBVdGlsaXR5LkVuY29kaW5nRW5hYmxlZDtcclxuICAvLyAgICAgaWYgKCFlbmNvZGluZ0VuYWJsZWQpXHJcbiAgLy8gICAgICAgSHR0cFV0aWxpdHkuRW5jb2RpbmdFbmFibGVkID0gdHJ1ZTtcclxuICAvL1xyXG4gIC8vICAgICBsZXQgc3Bhd25pbmdBcmd1bWVudHM6IHN0cmluZyA9IEh0dHBVdGlsaXR5LlVybEVuY29kZShYTUxkYXRhLlRvU3RyaW5nKCksIEVuY29kaW5nLlVURjgpO1xyXG4gIC8vICAgICBpZiAoIWVuY29kaW5nRW5hYmxlZClcclxuICAvLyAgICAgICBIdHRwVXRpbGl0eS5FbmNvZGluZ0VuYWJsZWQgPSBmYWxzZTtcclxuICAvL1xyXG4gIC8vICAgICAvLyBzcGF3biBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgYXNzZW1ibHkgaW5zaWRlIHRoZSBjdXJyZW50IHByb2Nlc3NcclxuICAvLyAgICAgUHJvY2Vzcy5TdGFydEN1cnJlbnRFeGVjdXRhYmxlKHNwYXduaW5nQXJndW1lbnRzKTtcclxuICAvLyAgIH1cclxuICAvLyAgIGNhdGNoIChleCkge1xyXG4gIC8vICAgICBpZiAoZXggaW5zdGFuY2VvZiBFeGNlcHRpb24pIHtcclxuICAvLyAgICAgICBPcGVyYXRpb24uY2FsbE9wclNob3dFcnJvcih0YXNrLCBleC50b1N0cmluZygpKTtcclxuICAvLyAgICAgfVxyXG4gIC8vICAgICBlbHNlXHJcbiAgLy8gICAgICAgdGhyb3cgZXg7XHJcbiAgLy8gICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyB0aGUgY29uZGl0aW9uIHZhbHVlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGFzeW5jIGdldENvbmRWYWwoKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5fY29uZEV4cC5nZXRWYWwoKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBnZXQgdGhlIG9wZXJhdGlvbiB0eXBlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZXRUeXBlKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fdHlwZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBnZXQgdGhlIG9wZXJhdGlvbiB0eXBlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZXRSb3V0ZVBhcmFtcygpOiBMaXN0PGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3JvdXRlUGFyYW1zO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgdGhlIHNlcnZlciBJRCBvZiB0aGlzIG9wZXJhdGlvblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZ2V0U2VydmVySWQoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9zZXJ2ZXJJZDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBleGVjdXRlIFZlcmlmeVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiBib29sZWFuIGlzIHRydWUgaWYgYW5kIG9ubHkgaWYgbW9kZT09ZXJyb3I8L3JldHVybnM+XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgb3BlclZlcmlmeSgpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGxldCBpc0Vycm9yOiBib29sZWFuID0gKHRoaXMuX21vZGUgPT09IENvbnN0SW50ZXJmYWNlLkZMV19WRVJJRllfTU9ERV9FUlJPUik7XHJcblxyXG4gICAgbGV0IHRleHRUb0Rpc3BsYXk6IHN0cmluZyA9IHRoaXMuX2V4cCA9PT0gbnVsbCA/IHRoaXMuX3RleHQgOiBhd2FpdCB0aGlzLl9leHAuZXZhbHVhdGVXaXRoUmVzdWx0VHlwZUFuZExlbmd0aChTdG9yYWdlQXR0cmlidXRlLlVOSUNPREUsIDI1NSk7XHJcblxyXG4gICAgbGV0IHRpdGxlVG9EaXNwbGF5OiBzdHJpbmcgPSB0aGlzLl90aXRsZUV4cCA9PT0gbnVsbCA/IHRoaXMuX3RpdGxlIDogYXdhaXQgdGhpcy5fdGl0bGVFeHAuZXZhbHVhdGVXaXRoUmVzdWx0VHlwZUFuZExlbmd0aChTdG9yYWdlQXR0cmlidXRlLlVOSUNPREUsIDI1NSk7XHJcblxyXG4gICAgdGV4dFRvRGlzcGxheSA9IHRleHRUb0Rpc3BsYXkgPT09IG51bGwgPyBcIlwiIDogU3RyVXRpbC5ydHJpbSh0ZXh0VG9EaXNwbGF5KTtcclxuICAgIHRpdGxlVG9EaXNwbGF5ID0gdGl0bGVUb0Rpc3BsYXkgPT09IG51bGwgPyBcIlwiIDogU3RyVXRpbC5ydHJpbSh0aXRsZVRvRGlzcGxheSk7XHJcblxyXG4gICAgLy8gSW5PcmRlciB0byBrZWVwIHRoZSBiZWhhdmlvciBzYW1lIGFzIGluIE9ubGluZSwgVmVyaWZ5IE9wZXJhdGlvbiBXYXJuaW5nIG1lc3NhZ2VzIHdpbGwgYmUgd3JpdHRlblxyXG4gICAgLy8gYXMgRXJyb3IgbWVzc2FnZXMgaW4gQ2xpZW50IGxvZyAoUUNSICM5MTUxMjIpXHJcbiAgICBpZiAodGhpcy5fZXJyTG9nQXBwZW5kKSB7XHJcbiAgICAgIGxldCBwcmdEZXNjcmlwdGlvbiA9ICg8VGFzaz4gdGhpcy5fdGFzay5HZXRDb250ZXh0VGFzaygpKS5HZXRDb21wdXRlZFByb3BlcnR5KFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX05BTUUpLkdldENvbXB1dGVkVmFsdWUoKTtcclxuICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRXhjZXB0aW9uVG9Mb2dXaXRoTXNnKHRleHRUb0Rpc3BsYXkgKyBcIiwgcHJvZ3JhbSA6IFwiICsgcHJnRGVzY3JpcHRpb24pO1xyXG4gICAgfVxyXG4gICAgLy8gU3RhdHVzIGxpbmVcclxuICAgIGlmICh0aGlzLl9kaXNwbGF5ID09PSBDb25zdEludGVyZmFjZS5ESVNQTEFZX1NUQVRVUykge1xyXG4gICAgICAvLyBCbGFuayBNZXNzYWdlIHdpbGwgbm90IGJlIHNob3duLCBzYW1lIGFzIGluIE9ubGluZVxyXG4gICAgICBpZiAoIU5TdHJpbmcuSXNOdWxsT3JFbXB0eSh0ZXh0VG9EaXNwbGF5KSkge1xyXG5cclxuICAgICAgICBGbG93TW9uaXRvclF1ZXVlLkluc3RhbmNlLmFkZEZsb3dWZXJpZnlJbmZvKHRleHRUb0Rpc3BsYXksIHRoaXMuX3Rhc2suR2V0VGFza0RldGFpbHMoKSk7XHJcbiAgICAgICAgLy8gUHJvZHVjdCAjMTc4LCBUb3BpYyAjNjE6IGJlZXAgb24gdGhlIGNsaWVudCBzaWRlIG9ubHkgdXBvbiB1c2VyIGVycm9ycyAoZS5nLiBkdXBsaWNhdGUgcmVjb3JkKSxcclxuICAgICAgICAvLyBvdGhlcndpc2Ugb25seSBpZiBzdGFydGVkIGZyb20gdGhlIHN0dWRpbyAoRjcpXHJcbiAgICAgICAgKDxUYXNrPiB0aGlzLl90YXNrLkdldENvbnRleHRUYXNrKCkpLldyaXRlVG9NZXNzYWdlUGFuZSh0ZXh0VG9EaXNwbGF5LCBmYWxzZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIE1lc3NhZ2UgQm94XHJcbiAgICBlbHNlIHtcclxuICAgICAgLy8gQmxhbmsgTWVzc2FnZSB3aWxsIG5vdCBiZSBzaG93biwgc2FtZSBhcyBpbiBPbmxpbmVcclxuICAgICAgaWYgKCFOU3RyaW5nLklzTnVsbE9yRW1wdHkodGV4dFRvRGlzcGxheSkpIHtcclxuICAgICAgICAvLyBtbHMgdHJhbnNsYXRpb24gd2hlbiBkaXNwbGF5aW5nIHRvIGJveC4gZm9yIHN0YXR1cyB0aGUgcmFucyBpcyBpIHRoZSBjb250cm9sIHByb3BlcnR5LlxyXG4gICAgICAgIGxldCBtbHNUcmFuc1RleHRUb0Rpc3BsYXk6IHN0cmluZyA9IExhbmd1YWdlRGF0YS5JbnN0YW5jZS50cmFuc2xhdGUodGV4dFRvRGlzcGxheSk7XHJcbiAgICAgICAgbGV0IG1sc1RyYW5zVGl0bGVUb0Rpc3BsYXk6IHN0cmluZyA9IExhbmd1YWdlRGF0YS5JbnN0YW5jZS50cmFuc2xhdGUodGl0bGVUb0Rpc3BsYXkpO1xyXG5cclxuXHJcbiAgICAgICAgbGV0IHZlcmlmeU1vZGU6IG51bWJlciA9IE9wZXJhdGlvbi5nZXRCdXR0b25zKHRoaXMuX2J1dHRvbnMpO1xyXG4gICAgICAgIHZlcmlmeU1vZGUgPSB2ZXJpZnlNb2RlIHx8IE9wZXJhdGlvbi5nZXRJbWFnZSh0aGlzLl9pbWFnZSk7XHJcbiAgICAgICAgdmVyaWZ5TW9kZSA9IHZlcmlmeU1vZGUgO1xyXG5cclxuICAgICAgICBpZiAoVXRpbFN0ckJ5dGVNb2RlLmlzTG9jYWxlRGVmTGFuZ0pQTigpKSB7XHJcbiAgICAgICAgICBsZXQgZGVsaW1Qb3M6IG51bWJlciA9IG1sc1RyYW5zVGV4dFRvRGlzcGxheS5pbmRleE9mKCd8Jyk7XHJcbiAgICAgICAgICBpZiAoMCA8PSBkZWxpbVBvcyAmJiBkZWxpbVBvcyA8IG1sc1RyYW5zVGV4dFRvRGlzcGxheS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgbWxzVHJhbnNUaXRsZVRvRGlzcGxheSA9IG1sc1RyYW5zVGV4dFRvRGlzcGxheS5zdWJzdHIoZGVsaW1Qb3MgKyAxKTtcclxuICAgICAgICAgICAgbWxzVHJhbnNUZXh0VG9EaXNwbGF5ID0gbWxzVHJhbnNUZXh0VG9EaXNwbGF5LnN1YnN0cigwLCBkZWxpbVBvcyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgbWdGb3JtOiBNZ0Zvcm0gPSBudWxsO1xyXG4gICAgICAgIC8vIGdldCB0aGUgb2JqZWN0IGZvciB3aGljaCB0aGUgbWVzc2FnZWJveCB3aWxsIGJlIGRpc3BsYXllZFxyXG4gICAgICAgIGlmICghKDxUYXNrPiB0aGlzLl90YXNrLkdldENvbnRleHRUYXNrKCkpLmdldE1HRGF0YSgpLklzQWJvcnRpbmcpXHJcbiAgICAgICAgICBtZ0Zvcm0gPSA8TWdGb3JtPig8VGFzaz4gdGhpcy5fdGFzay5HZXRDb250ZXh0VGFzaygpKS5nZXRUb3BNb3N0Rm9ybSgpO1xyXG5cclxuICAgICAgICAvLyBpZiB0aGUgZm9ybSBvZiB0aGUgY3VycmVudCB0YXNrIGlzIG51bGwgKG1haW4gcHJvZ3JhbSkgdGhlbiB1c2UgdGhlIGZvcm1cclxuICAgICAgICAvLyBvZiBsYXN0IGZvY3VzZWQgdGFza1xyXG4gICAgICAgIGlmIChtZ0Zvcm0gPT0gbnVsbCAmJiBMYXN0Rm9jdXNlZE1hbmFnZXIuSW5zdGFuY2UuZ2V0TGFzdEZvY3VzZWRUYXNrKCkgIT0gbnVsbClcclxuICAgICAgICAgIG1nRm9ybSA9IDxNZ0Zvcm0+TGFzdEZvY3VzZWRNYW5hZ2VyLkluc3RhbmNlLmdldExhc3RGb2N1c2VkVGFzaygpLmdldFRvcE1vc3RGb3JtKCk7XHJcbiAgICAgICAgaWYgKG1nRm9ybSAhPSBudWxsKSB7XHJcbiAgICAgICAgICBtZ0Zvcm0uUmVmcmVzaFVJKCk7XHJcbiAgICAgICAgICBDb21tYW5kcy5pbnZva2UoKTtcclxuICAgICAgICAgIGF3YWl0IFRocmVhZC5TbGVlcCgxMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCByZXR1cm5WYWx1ZTogbnVtYmVyID0gYXdhaXQgR1VJTWFuYWdlci5JbnN0YW5jZS5NZXNzYWdlQm94KG1sc1RyYW5zVGl0bGVUb0Rpc3BsYXksIG1sc1RyYW5zVGV4dFRvRGlzcGxheSwgdmVyaWZ5TW9kZSk7XHJcbiAgICAgICAgYXdhaXQgT3BlcmF0aW9uLnNldG9wZXJWZXJpZnlSZXR1cm5WYWx1ZShyZXR1cm5WYWx1ZSwgdGhpcy5fcmV0dXJuVmFsKTtcclxuXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaXNFcnJvcjtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIGNvZGUgYXNzaWduZWQgdG8gY29ycmVzcG9uZGluZyBidXR0b25zSURcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG5cclxuICBwdWJsaWMgc3RhdGljIGdldEJ1dHRvbnMoYnV0dG9uc0lEOiBzdHJpbmcpOiBudW1iZXIge1xyXG4gICAgbGV0IHRtcGJ1dHRvbnM6IG51bWJlciA9IDA7XHJcblxyXG4gICAgc3dpdGNoIChidXR0b25zSUQpIHtcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5CVVRUT05TX09LOlxyXG4gICAgICAgIHRtcGJ1dHRvbnMgPSBTdHlsZXMuTVNHQk9YX0JVVFRPTl9PSztcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5CVVRUT05TX09LX0NBTkNFTDpcclxuICAgICAgICB0bXBidXR0b25zID0gU3R5bGVzLk1TR0JPWF9CVVRUT05fT0tfQ0FOQ0VMO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLkJVVFRPTlNfQUJPUlRfUkVUUllfSUdOT1JFOlxyXG4gICAgICAgIHRtcGJ1dHRvbnMgPSBTdHlsZXMuTVNHQk9YX0JVVFRPTl9BQk9SVF9SRVRSWV9JR05PUkU7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuQlVUVE9OU19ZRVNfTk9fQ0FOQ0VMOlxyXG4gICAgICAgIHRtcGJ1dHRvbnMgPSBTdHlsZXMuTVNHQk9YX0JVVFRPTl9ZRVNfTk9fQ0FOQ0VMO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLkJVVFRPTlNfWUVTX05POlxyXG4gICAgICAgIHRtcGJ1dHRvbnMgPSBTdHlsZXMuTVNHQk9YX0JVVFRPTl9ZRVNfTk87XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuQlVUVE9OU19SRVRSWV9DQU5DRUw6XHJcbiAgICAgICAgdG1wYnV0dG9ucyA9IFN0eWxlcy5NU0dCT1hfQlVUVE9OX1JFVFJZX0NBTkNFTDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHJldHVybiB0bXBidXR0b25zO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgY29kZSBhc3NpZ25lZCB0byBjb3JyZXNwb25kaW5nIGltYWdlSURcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHB1YmxpYyBzdGF0aWMgZ2V0SW1hZ2UoaW1hZ2VJRDogc3RyaW5nKTogbnVtYmVyIHtcclxuICAgIGxldCB0bXBJbWFnZTogbnVtYmVyID0gMDtcclxuICAgIHN3aXRjaCAoaW1hZ2VJRCkge1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLklNQUdFX0VYQ0xBTUFUSU9OOlxyXG4gICAgICAgIHRtcEltYWdlID0gU3R5bGVzLk1TR0JPWF9JQ09OX0VYQ0xBTUFUSU9OO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLklNQUdFX0NSSVRJQ0FMOlxyXG4gICAgICAgIHRtcEltYWdlID0gU3R5bGVzLk1TR0JPWF9JQ09OX0VSUk9SO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLklNQUdFX1FVRVNUSU9OOlxyXG4gICAgICAgIHRtcEltYWdlID0gU3R5bGVzLk1TR0JPWF9JQ09OX1FVRVNUSU9OO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLklNQUdFX0lORk9STUFUSU9OOlxyXG4gICAgICAgIHRtcEltYWdlID0gU3R5bGVzLk1TR0JPWF9JQ09OX0lORk9STUFUSU9OO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRtcEltYWdlO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBTZXQgVmVyaWZ5IE9wZXJhdGlvbiBSZXR1cm4gVmFsdWVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHN0YXRpYyBhc3luYyBzZXRvcGVyVmVyaWZ5UmV0dXJuVmFsdWUocmV0dXJuVmFsdWU6IG51bWJlciwgcmV0dXJuVmFsOiBGaWVsZCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKHJldHVyblZhbCAhPT0gbnVsbCkge1xyXG4gICAgICBsZXQgcmV0VmFsdWVOdW06IE5VTV9UWVBFID0gbmV3IE5VTV9UWVBFKCk7XHJcblxyXG4gICAgICByZXRWYWx1ZU51bS5OVU1fNF9MT05HKHJldHVyblZhbHVlKTtcclxuICAgICAgbGV0IHJldHVyblZhbHVlU3RyOiBzdHJpbmcgPSByZXRWYWx1ZU51bS50b1hNTHJlY29yZCgpO1xyXG5cclxuICAgICAgYXdhaXQgcmV0dXJuVmFsLnNldFZhbHVlQW5kU3RhcnRSZWNvbXB1dGUocmV0dXJuVmFsdWVTdHIsIGZhbHNlLCB0cnVlLCB0cnVlLCBmYWxzZSk7XHJcbiAgICAgIGF3YWl0IHJldHVyblZhbC51cGRhdGVEaXNwbGF5KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZXhlY3V0ZSBCbG9ja1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiBib29sZWFuIHRydWVcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgb3BlckJsb2NrKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZXhlY3V0ZSBlbHNlIC8gZWxzZWlmXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IGJvb2xlYW4gdHJ1ZVxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBvcGVyRWxzZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGV4ZWN1dGUgRXZhbHVhdGVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgYXN5bmMgb3BlckV2YWx1YXRlKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgbGV0IHJlc3VsdDogc3RyaW5nID0gJ1xcMCc7XHJcblxyXG4gICAgaWYgKHRoaXMuX2ZpZWxkICE9PSBudWxsKSB7XHJcbiAgICAgIHJlc3VsdCA9IGF3YWl0IHRoaXMuX2V4cC5ldmFsdWF0ZVdpdGhSZXN1bHRUeXBlQW5kTGVuZ3RoKHRoaXMuX2ZpZWxkLmdldFR5cGUoKSwgdGhpcy5fZmllbGQuZ2V0U2l6ZSgpKTtcclxuICAgICAgYXdhaXQgdGhpcy5fZmllbGQuc2V0VmFsdWVBbmRTdGFydFJlY29tcHV0ZShyZXN1bHQsIHJlc3VsdCA9PT0gbnVsbCwgdHJ1ZSwgdHJ1ZSwgZmFsc2UpO1xyXG4gICAgICBhd2FpdCB0aGlzLl9maWVsZC51cGRhdGVEaXNwbGF5KCk7XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICAgIHJlc3VsdCA9IGF3YWl0IHRoaXMuX2V4cC5ldmFsdWF0ZVdpdGhSZXN1bHRUeXBlQW5kTGVuZ3RoKFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTiwgMCk7XHJcbiAgICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBleGVjdXRlIFVwZGF0ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBhc3luYyBvcGVyVXBkYXRlKG1wcmdDcmVhdG9yOiBUYXNrKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBsZXQgcmVzdWx0OiBzdHJpbmcsIG9sZFZhbCwgbmV3VmFsLCBmaWVsZFZhbDtcclxuICAgIGxldCBzZXRSZWNvcmRVcGRhdGVkOiBib29sZWFuO1xyXG4gICAgbGV0IHJlY29tcHV0ZTogYm9vbGVhbjtcclxuICAgIGxldCBuT2xkOiBOVU1fVFlQRSwgbk5ldywgblJlc3VsdDtcclxuXHJcbiAgICBsZXQgZmxvd01vbml0b3I6IEZsb3dNb25pdG9yUXVldWUgPSBGbG93TW9uaXRvclF1ZXVlLkluc3RhbmNlO1xyXG4gICAgZmxvd01vbml0b3IuYWRkRmxvd09wZXJhdGlvblVwZGF0ZShGbG93TW9uaXRvckludGVyZmFjZS5GTFdNVFJfU1RBUlQsIHRoaXMuX3Rhc2suR2V0VGFza0RldGFpbHMoKSk7XHJcblxyXG4gICAgLy8gZm9yIG5vbi1tb2RpZmlhYmxlIGZpZWxkIGdvIHRvIHRoZSBzZXJ2ZXIsIGkuZS4gc2VydmVyIGNhbiBhYm9ydCB0aGUgdGFza1xyXG4gICAgaWYgKCF0aGlzLl9maWVsZC5EYk1vZGlmaWFibGUgJiYgKHRoaXMuX3Rhc2suZ2V0TW9kZSgpICE9PSBDb25zdGFudHMuVEFTS19NT0RFX0NSRUFURSkpIHtcclxuICAgICAgaWYgKCFhd2FpdCB0aGlzLkNhbk1vZGlmeShtcHJnQ3JlYXRvcikpXHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgbGV0IGZpZWxkVHlwZTogU3RvcmFnZUF0dHJpYnV0ZSA9IHRoaXMuX2ZpZWxkLmdldFR5cGUoKTtcclxuXHJcbiAgICAvLyBpZiB0aGlzIGlzIGFuIGluY3JlbWVudGFsIHVwZGF0ZVxyXG4gICAgaWYgKHRoaXMuX2luY3JlbWVudGFsKSB7XHJcbiAgICAgIGlmICghdGhpcy5fZmllbGQuSXNMaW5rRmllbGQpIHtcclxuICAgICAgICBmaWVsZFZhbCA9IHRoaXMuX2ZpZWxkLmdldFZhbHVlKHRydWUpO1xyXG4gICAgICAgIG5SZXN1bHQgPSAoZmllbGRWYWwgIT0gbnVsbFxyXG4gICAgICAgICAgPyBuZXcgTlVNX1RZUEUoZmllbGRWYWwpXHJcbiAgICAgICAgICA6IG51bGwpO1xyXG5cclxuICAgICAgICAvLyBzdWJ0cmFjdCB0aGUgb2xkIHZhbHVlIGlmIG5vdCBpbiBjcmVhdGUgbW9kZVxyXG4gICAgICAgIGlmICh0aGlzLl90YXNrLmdldE1vZGUoKSAhPT0gQ29uc3RhbnRzLlRBU0tfTU9ERV9DUkVBVEUpIHtcclxuXHJcbiAgICAgICAgICAvLyBpbmRpY2F0ZSB3ZSBhcmUgZXZhbHVhdGluZyB0aGUgb2xkIHZhbHVlIG9mIHRoZSBmaWVsZHNcclxuICAgICAgICAgIHRoaXMuX3Rhc2suc2V0RXZhbE9sZFZhbHVlcyh0cnVlKTtcclxuICAgICAgICAgIG9sZFZhbCA9ICh0aGlzLl9maWVsZC5pc051bGwoKVxyXG4gICAgICAgICAgICA/IHRoaXMuX2ZpZWxkLmdldE1hZ2ljRGVmYXVsdFZhbHVlKClcclxuICAgICAgICAgICAgOiBhd2FpdCB0aGlzLl9leHAuZXZhbHVhdGVXaXRoUmVzdWx0VHlwZUFuZExlbmd0aChmaWVsZFR5cGUsIHRoaXMuX2ZpZWxkLmdldFNpemUoKSkpO1xyXG4gICAgICAgICAgdGhpcy5fdGFzay5zZXRFdmFsT2xkVmFsdWVzKGZhbHNlKTtcclxuICAgICAgICAgIG5PbGQgPSBuZXcgTlVNX1RZUEUob2xkVmFsKTtcclxuICAgICAgICAgIG5SZXN1bHQgPSBOVU1fVFlQRS5zdWIoblJlc3VsdCwgbk9sZCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5fdGFzay5nZXRNb2RlKCkgIT09IENvbnN0YW50cy5UQVNLX01PREVfREVMRVRFKSB7XHJcbiAgICAgICAgICBuZXdWYWwgPSBhd2FpdCB0aGlzLl9leHAuZXZhbHVhdGVXaXRoUmVzdWx0VHlwZUFuZExlbmd0aChmaWVsZFR5cGUsIHRoaXMuX2ZpZWxkLmdldFNpemUoKSk7XHJcbiAgICAgICAgICBpZiAobmV3VmFsICE9IG51bGwpIHtcclxuICAgICAgICAgICAgbk5ldyA9IG5ldyBOVU1fVFlQRShuZXdWYWwpO1xyXG4gICAgICAgICAgICBuUmVzdWx0ID0gTlVNX1RZUEUuYWRkKG5SZXN1bHQsIG5OZXcpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICBuTmV3ID0gblJlc3VsdCA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChuUmVzdWx0ICE9IG51bGwpXHJcbiAgICAgICAgICByZXN1bHQgPSBuUmVzdWx0LnRvWE1McmVjb3JkKCk7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgcmVzdWx0ID0gdGhpcy5fZmllbGQuZ2V0TWFnaWNEZWZhdWx0VmFsdWUoKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICAvKiBJZiB0aGUgaW5jcmVtZW50YWwgdXBkYXRlIGlzIGZvciBhIGxpbmsgZmllbGQsIGdvIHRvIHNlcnZlci4gKi9cclxuICAgICAgICAvKiBUaGlzIGlzIHJlcXVpcmVkIHRvIGJlIGRvbmUgb24gc2VydmVyIGJlY2F1c2Ugb24gY2xpZW50LCB3ZSBkbyAqL1xyXG4gICAgICAgIC8qIG5vdCBoYXZlIHRoZSByZWZlcmVuY2UgdG8gdGhlIG9sZCBsaW5rIHJlY29yZC4gKi9cclxuICAgICAgICAvKiBBbmQgZm9yIGluY3JlbWVudGFsIHVwZGF0ZSwgd2UgbmVlZCB0byB3b3JrIG9uIDIgcmVjb3JkcyBhcyBpbiAqL1xyXG4gICAgICAgIC8qIGNhc2Ugb2YgUUNSIyA5MDA3MzguICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXHJcbiAgICAgICAgYXdhaXQgdGhpcy5vcGVyU2VydmVyKG1wcmdDcmVhdG9yKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIGVuZCBvZiAgaW5jcmVtZW50YWwgdXBkYXRlXHJcbiAgICBlbHNlXHJcbiAgICAgIHJlc3VsdCA9IGF3YWl0IHRoaXMuX2V4cC5ldmFsdWF0ZVdpdGhSZXN1bHRUeXBlQW5kTGVuZ3RoKGZpZWxkVHlwZSwgdGhpcy5fZmllbGQuZ2V0U2l6ZSgpKTtcclxuXHJcbiAgICAvLyBRQ1IgNzQ2MDUzIGlmIHRoZSBjZWxscyB0eXBlIGRvbid0IG1hdGNoIHRocm93IGVycm9yXHJcbiAgICBpZiAoZmllbGRUeXBlID09PSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SKVxyXG4gICAgICBpZiAocmVzdWx0ICE9IG51bGwpXHJcbiAgICAgICAgcmVzdWx0ID0gT3BlcmF0aW9uLm9wZXJVcGRhdGVWZWN0b3JzKHRoaXMuX2ZpZWxkLCByZXN1bHQpO1xyXG5cclxuICAgIHJlY29tcHV0ZSA9ICh0aGlzLl9maWVsZC5nZXRUYXNrKCkgPT09IHRoaXMuX3Rhc2spO1xyXG4gICAgc2V0UmVjb3JkVXBkYXRlZCA9ICghcmVjb21wdXRlIHx8ICF0aGlzLl91bmRvKTtcclxuICAgIGF3YWl0IHRoaXMuX2ZpZWxkLnNldFZhbHVlQW5kU3RhcnRSZWNvbXB1dGUocmVzdWx0LCByZXN1bHQgPT0gbnVsbCwgdHJ1ZSwgc2V0UmVjb3JkVXBkYXRlZCwgZmFsc2UpO1xyXG4gICAgaWYgKCF0aGlzLl91bmRvKVxyXG4gICAgICB0aGlzLl9maWVsZC5zZXRVcGRhdGVkKCk7XHJcblxyXG4gICAgLy8gUUNSICMgMjcwOTQ5IDogSWYgZmllbGQgaXMgdXBkYXRlZCB3aXRoIHVwZGF0ZSBvcGVyYXRpb24sIG1vZGlmaWVkIGZsYWcgc2hvdWxkIGJlIHNldCBpbiBvcmRlciB0byBjYXVzZSByZS1jb21wdXRlLlxyXG4gICAgdGhpcy5fZmllbGQuc2V0TW9kaWZpZWQoKTtcclxuXHJcbiAgICBhd2FpdCB0aGlzLl9maWVsZC51cGRhdGVEaXNwbGF5KCk7XHJcbiAgICBmbG93TW9uaXRvci5hZGRGbG93T3BlcmF0aW9uVXBkYXRlKEZsb3dNb25pdG9ySW50ZXJmYWNlLkZMV01UUl9FTkQsIHRoaXMuX3Rhc2suR2V0VGFza0RldGFpbHMoKSk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIGNhbiBhIG5vbi1tb2RpZmlhYmxlIGZpZWxkIGJlIG1vZGlmaWVkLiB0aGUgd2F5IHRvIGdldCB0aGUgYW5zd2VyIGRlcGVuZHMgb24gdGhlIGxvY2FsL3JlbW90ZSBkYXRhdmlld1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwibXByZ0NyZWF0b3JcIj50cnVlIGlmIHRoZSBmaWVsZCBtYXkgYmUgbW9kaWZpZWQgYW5kIHRoZSBjYWxsaW5nIG1ldGhvZCBzaG91bGQgY29udGludWU8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBhc3luYyBDYW5Nb2RpZnkobXByZ0NyZWF0b3I6IFRhc2spOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGxldCBleGVjT3BlckNvbW1hbmQ6IEV4ZWNPcGVyQ29tbWFuZCA9ICgodGhpcy5fY21kVG9TZXJ2ZXIgaW5zdGFuY2VvZiBFeGVjT3BlckNvbW1hbmQpID8gPEV4ZWNPcGVyQ29tbWFuZD50aGlzLl9jbWRUb1NlcnZlciA6IG51bGwpO1xyXG5cclxuICAgIGV4ZWNPcGVyQ29tbWFuZC5PcGVyYXRpb24gPSB0aGlzO1xyXG4gICAgZXhlY09wZXJDb21tYW5kLk1wcmdDcmVhdG9yID0gbXByZ0NyZWF0b3I7XHJcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuVGFzay5EYXRhdmlld01hbmFnZXIuRXhlY3V0ZSh0aGlzLl9jbWRUb1NlcnZlcikpLlN1Y2Nlc3M7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgdXBkYXRlcyB0aGUgZGF0YSBjb250ZW50IG9mIGEgdmVjdG9yIHdpdGhvdXQgY2hhbmdpbmcgaXRzIGhlYWRlciBkYXRhXHJcbiAgLy8vICAgc3VjaCBhcyBjZWxsIHR5cGUgYW5kIHNpemUgLSBpcyB1c2VkIG9ubHkgaW4gdXBkYXRlIG9wZXJhdGlvbnMgYmV0d2VlbiB2ZWN0b3JzXHJcbiAgLy8vICAgZm9yIGV4YW1wbGUgdmVjdG9ycyBvZiBhbHBoYSB3aXRoIGNlbGwgc2l6ZSB0aGUgZGlmZmVyIG9yIHZlY3RvciBvZiBtZW1vIHdpdGggdmVjdG9yIG9mIGFscGhhXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInZlY1wiPnRoZSBmbGF0IHJlcHJlc2VudGF0aW9uIG9mIHRoZSB0aGUgbmV3IHZlY3RvclxyXG4gIC8vLyAgIGZpZWxkIHRoZSBmaWVsZCB0byBiZSB1cGRhdGVkXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBhIGZsYXQgcmVwcmVzZW50YXRpb24gb2YgdGhlIHVwZGF0ZWQgdmVjdG9yIGFmdGVyIHRoZSBVcGRhdGU8L3JldHVybnM+XHJcbiAgc3RhdGljIG9wZXJVcGRhdGVWZWN0b3JzKGZpZWxkOiBGaWVsZCwgdmVjOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgbGV0IHJlc3VsdDogc3RyaW5nID0gbnVsbDtcclxuICAgIGlmIChmaWVsZC5nZXRUeXBlKCkgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQl9WRUNUT1IpIHtcclxuICAgICAgbGV0IGNlbGxzQXR0cjogU3RvcmFnZUF0dHJpYnV0ZSA9IFZlY3RvclR5cGUuZ2V0Q2VsbHNBdHRyKHZlYyk7XHJcbiAgICAgIGxldCBjZWxsc1R5cGU6IFN0b3JhZ2VBdHRyaWJ1dGUgPSBmaWVsZC5nZXRDZWxsc1R5cGUoKTtcclxuXHJcbiAgICAgIGlmIChTdG9yYWdlQXR0cmlidXRlQ2hlY2suaXNUaGVTYW1lVHlwZShjZWxsc0F0dHIsIGNlbGxzVHlwZSkpIHtcclxuICAgICAgICBsZXQgbmV3VmVjOiBWZWN0b3JUeXBlID0gbmV3IFZlY3RvclR5cGUodmVjKTtcclxuICAgICAgICBuZXdWZWMuYWRqdXN0VG9GaXQoZmllbGQpO1xyXG4gICAgICAgIHJldHVybiBuZXdWZWMudG9TdHJpbmcoKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG4gICAgdGhyb3cgbmV3IEFwcGxpY2F0aW9uRXhjZXB0aW9uKFwiaW4gb3BlclVwZGF0ZVZlY3RvcnMgXCIgKyBmaWVsZC5nZXROYW1lKCkgKyBcIiBpcyBub3Qgb2YgdHlwZSB2ZWN0b3JcIik7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZXhlY3V0ZSBSYWlzZSBFdmVudFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJtcHJnQ3JlYXRvclwiPmlmIHRoZSBvcGVyYXRpb24gYmVsb25ncyB0byBhIG1haW4gcHJvZ3JhbSBpdCBwb2ludHMgdG8gdGhlIHRhc2sgd2hpY2hcclxuICAvLy8gICBjYXVzZWQgdGhlIG1haW4gcHJvZ3JhbSB0byBiZWNvbWUgYWN0aXZlLiBPdGhlcndpc2UgaXQncyBmYWxzZS5cclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInJldHVybmVkRnJvbVNlcnZlclwiPmluZGljYXRlcyB3aGV0aGVyIHdlIGp1c3QgY2FtZSBiYWNrIGZyb20gdGhlIHNlcnZlciB0byBiZSBwYXNzZWQgdG8gRXZlbnRzTWFuYWdlci5JbnN0YW5jZS5oYW5kbGVFdmVudCgpPC9wYXJhbT5cclxuICBwcml2YXRlIGFzeW5jIG9wZXJSYWlzZUV2ZW50KG1wcmdDcmVhdG9yOiBUYXNrLCByZXR1cm5lZEZyb21TZXJ2ZXI6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcclxuXHJcbiAgICBsZXQgaW1tZWRpYXRlOiBib29sZWFuID0gYXdhaXQgdGhpcy5JbW1lZGlhdGUoKTtcclxuXHJcbiAgICAvLyBjcmVhdGUgYSBuZXcgcnVuIHRpbWUgZXZlbnQgdXNpbmcgdGhlIG9yaWdpbmFsIGFzIHRlbXBsYXRlXHJcbiAgICBsZXQgYVJ0RXZ0OiBSdW5UaW1lRXZlbnQgPSB0aGlzLl9ydEV2dC5yZXBsaWNhdGUoKTtcclxuICAgIGF3YWl0IGFSdEV2dC5zZXRQdWJsaWNOYW1lKCk7XHJcblxyXG4gICAgYVJ0RXZ0LnNldEltbWVkaWF0ZShpbW1lZGlhdGUpO1xyXG4gICAgYVJ0RXZ0LnNldE1haW5QcmdDcmVhdG9yKG51bGwpO1xyXG5cclxuICAgIGlmIChpbW1lZGlhdGUpIHtcclxuICAgICAgYVJ0RXZ0LnNldEN0cmwoPE1nQ29udHJvbD50aGlzLl90YXNrLmdldExhc3RQYXJrZWRDdHJsKCkpO1xyXG4gICAgICBhUnRFdnQuc2V0QXJnTGlzdCh0aGlzLl9hcmdMaXN0KTtcclxuXHJcbiAgICAgIGlmIChhUnRFdnQuZ2V0VGFzaygpLmlzTWFpblByb2coKSlcclxuICAgICAgICBhUnRFdnQuc2V0TWFpblByZ0NyZWF0b3IobXByZ0NyZWF0b3IpO1xyXG5cclxuICAgICAgQWNjZXNzSGVscGVyLmV2ZW50c01hbmFnZXIuY2hlY2tBbmRTYXZlUm91dGVFdmVudElmQ3R4UmVtb3ZlZEZyb21TcnZyIChhUnRFdnQpO1xyXG4gICAgICBBY2Nlc3NIZWxwZXIuZXZlbnRzTWFuYWdlci5wdXNoRXhlY1N0YWNrKHRoaXMuX3Rhc2suZ2V0VGFza1RhZygpICwgdGhpcy5fZXZ0SGFuZGxlci5nZXRJZCgpLnRvU3RyaW5nKCkgLCB0aGlzLl9zZXJ2ZXJJZCk7XHJcbiAgICAgIGF3YWl0IEFjY2Vzc0hlbHBlci5ldmVudHNNYW5hZ2VyLmhhbmRsZUV2ZW50KGFSdEV2dCwgcmV0dXJuZWRGcm9tU2VydmVyKTtcclxuICAgICAgQWNjZXNzSGVscGVyLmV2ZW50c01hbmFnZXIucG9wRXhlY1N0YWNrKCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgLy8gc2VuZCBhcmd1bWVudHMgYnkgdmFsdWVcclxuICAgICAgbGV0IGFyZ2xpc3QgPSBuZXcgQXJndW1lbnRzTGlzdCgpO1xyXG4gICAgICBhd2FpdCBhcmdsaXN0LkluaXRpYWxpemUodGhpcy5fYXJnTGlzdClcclxuICAgICAgYVJ0RXZ0LnNldEFyZ0xpc3QoYXJnbGlzdCk7XHJcbiAgICAgIGFSdEV2dC5zZXRUYXNrKG51bGwpO1xyXG4gICAgICBBY2Nlc3NIZWxwZXIuZXZlbnRzTWFuYWdlci5hZGRUb1RhaWwoYVJ0RXZ0KTtcclxuICAgICAgQWNjZXNzSGVscGVyLmV2ZW50c01hbmFnZXIuY2hlY2tBbmRTYXZlUm91dGVFdmVudElmQ3R4UmVtb3ZlZEZyb21TcnZyIChhUnRFdnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZXhlY3V0ZSBicm93c2VyIENhbGwgb3BlcmF0aW9uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm1wcmdDcmVhdG9yXCI+aWYgdGhlIG9wZXJhdGlvbiBiZWxvbmdzIHRvIGEgbWFpbiBwcm9ncmFtIGl0IHBvaW50cyB0byB0aGUgdGFzayB3aGljaFxyXG4gIC8vLyAgIGNhdXNlZCB0aGUgbWFpbiBwcm9ncmFtIHRvIGJlY29tZSBhY3RpdmUuIE90aGVyd2lzZSBpdCdzIGZhbHNlLlxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIHByaXZhdGUgYXN5bmMgb3BlckNhbGwobXByZ0NyZWF0b3I6IFRhc2spOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGF3YWl0IHRoaXMub3BlclNlcnZlcihtcHJnQ3JlYXRvcik7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZXhlY3V0ZSBTZXJ2ZXIgb3BlcmF0aW9uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm1wcmdDcmVhdG9yXCI+aWYgdGhlIG9wZXJhdGlvbiBiZWxvbmdzIHRvIGEgbWFpbiBwcm9ncmFtIGl0IHBvaW50cyB0byB0aGUgdGFzayB3aGljaFxyXG4gIC8vLyAgIGNhdXNlZCB0aGUgbWFpbiBwcm9ncmFtIHRvIGJlY29tZSBhY3RpdmUuIE90aGVyd2lzZSBpdCdzIGZhbHNlLlxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIGFzeW5jIG9wZXJTZXJ2ZXIobXByZ0NyZWF0b3I6IFRhc2spOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGxldCBjb21tYW5kOiBFeGVjT3BlckNvbW1hbmQgPSAoKHRoaXMuX2NtZFRvU2VydmVyIGluc3RhbmNlb2YgRXhlY09wZXJDb21tYW5kKSA/IDxFeGVjT3BlckNvbW1hbmQ+dGhpcy5fY21kVG9TZXJ2ZXIgOiBudWxsKTtcclxuICAgIERlYnVnLkFzc2VydChjb21tYW5kICE9PSBudWxsKTtcclxuICAgIGlmICh0aGlzLl90YXNrLmlzTWFpblByb2coKSlcclxuICAgICAgY29tbWFuZC5NcHJnQ3JlYXRvciA9IG1wcmdDcmVhdG9yO1xyXG4gICAgZWxzZVxyXG4gICAgICBjb21tYW5kLk1wcmdDcmVhdG9yID0gbnVsbDtcclxuXHJcbiAgICBjb21tYW5kLlNldEV4ZWN1dGlvblN0YWNrKEFjY2Vzc0hlbHBlci5ldmVudHNNYW5hZ2VyLmdldEV4ZWNTdGFjaygpKTtcclxuICAgIGNvbW1hbmQuT3BlcmF0aW9uID0gdGhpcztcclxuICAgIGF3YWl0IEFjY2Vzc0hlbHBlci5tZ0RhdGFUYWJsZS5leGVjUmVxdWVzdFdpdGhTdWJmb3JtUmVjb3JkQ3ljbGUoPENvbW1hbmRzVGFibGU+dGhpcy5fdGFzay5nZXRNR0RhdGEoKS5DbWRzVG9TZXJ2ZXIsIHRoaXMuX2NtZFRvU2VydmVyLCBudWxsKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgQmxvY2sgRW5kIGluZGV4XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZXRCbG9ja0VuZCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Jsb2NrRW5kO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHNldHMgdGhlIHZhbHVlIG9mIHRoZSBCbG9jayBFbmQgaW5kZXhcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHNldEJsb2NrRW5kKHZhbDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLl9ibG9ja0VuZCA9IHZhbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgQmxvY2sgQ2xvc2UgaW5kZXhcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGdldEJsb2NrQ2xvc2UoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9ibG9ja0Nsb3NlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHNldHMgdGhlIHZhbHVlIG9mIHRoZSBCbG9jayBDbG9zZSBpbmRleFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgc2V0QmxvY2tDbG9zZSh2YWw6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy5fYmxvY2tDbG9zZSA9IHZhbDtcclxuICB9XHJcblxyXG4gIGdldFRhc2tUYWcoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl90YXNrLmdldFRhc2tUYWcoKTtcclxuICB9XHJcblxyXG4gIGdldEhhbmRsZXJJZCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX2V2dEhhbmRsZXIuZ2V0SWQoKS50b1N0cmluZygpO1xyXG4gIH1cclxuXHJcbiAgZ2V0RXZlbnRIYW5kbGVyKCk6IEV2ZW50SGFuZGxlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fZXZ0SGFuZGxlcjtcclxuICB9XHJcblxyXG4gIGdldEV4ZWNPblNlcnZlcigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9leGVjT25TZXJ2ZXI7XHJcbiAgfVxyXG5cclxuICBzZXRFeGVjT25TZXJ2ZXIodmFsIDogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5fZXhlY09uU2VydmVyID0gdmFsO1xyXG4gIH1cclxuXHJcbiAgZ2V0RXhlY09uQ2xpZW50KCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2V4ZWNPbkNsaWVudDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBjaGVja3MgaWYgdGhlIG9wZXJhdGlvbiBjYW4gYmUgZXhlY3V0ZWQgb3Igbm90XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgYXN5bmMgY2FuRXhlY3V0ZSgpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIHJldHVybiBhd2FpdCB0aGlzLmdldENvbmRWYWwoKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiYnVmZmVyXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHB1YmxpYyBhc3luYyBBZGRGbG93RGVzY3JpcHRpb24oYnVmZmVyOiBTdHJpbmdCdWlsZGVyKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBzd2l0Y2ggKHRoaXMuX3R5cGUpIHtcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19PUEVSX1ZFUklGWTpcclxuICAgICAgICBidWZmZXIuQXBwZW5kKFwiVmVyaWZ5OiBcIik7XHJcbiAgICAgICAgaWYgKHRoaXMuX2V4cCA9PSBudWxsKVxyXG4gICAgICAgICAgYnVmZmVyLkFwcGVuZCh0aGlzLl90ZXh0KTtcclxuICAgICAgICBlbHNlIGJ1ZmZlci5BcHBlbmQoXCJFeHAgI1wiKS5BcHBlbmQodGhpcy5fZXhwLmdldElkKCkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX09QRVJfQkxPQ0s6XHJcbiAgICAgICAgYnVmZmVyLkFwcGVuZChcIkJsb2NrIElmXCIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX09QRVJfTE9PUDpcclxuICAgICAgICBidWZmZXIuQXBwZW5kKFwiQmxvY2sgTG9vcFwiKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19PUEVSX0VMU0U6XHJcbiAgICAgICAgYnVmZmVyLkFwcGVuZChcIkJsb2NrIEVsc2VcIik7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfT1BFUl9FVkFMVUFURTpcclxuICAgICAgICBidWZmZXIuQXBwZW5kKFwiRXZhbHVhdGUgRXhwICNcIikuQXBwZW5kKHRoaXMuX2V4cC5nZXRJZCgpKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19PUEVSX1VQREFURTpcclxuICAgICAgICBidWZmZXIuQXBwZW5kRm9ybWF0KFwiVXBkYXRlIHswfSB3aXRoIEV4cCAjezF9XCIsIHRoaXMuX2ZpZWxkLmdldFZhck5hbWUoKSwgdGhpcy5fZXhwLmdldElkKCkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX09QRVJfRU5EQkxPQ0s6XHJcbiAgICAgICAgYnVmZmVyLkFwcGVuZChcIkVuZCBCbG9ja1wiKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19PUEVSX1VTUl9FWElUOlxyXG4gICAgICAgIGJ1ZmZlci5BcHBlbmQoXCJJbnZva2UgT1NcIik7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfT1BFUl9SQUlTRV9FVkVOVDpcclxuICAgICAgICBidWZmZXIuQXBwZW5kKFwiUmFpc2UgRXZlbnQ6XCIpO1xyXG4gICAgICAgIHRoaXMuX3J0RXZ0LkFwcGVuZERlc2NyaXB0aW9uKGJ1ZmZlcik7XHJcbiAgICAgICAgYnVmZmVyLkFwcGVuZEZvcm1hdChcIiAoV2FpdD17MH0pXCIsIChhd2FpdCB0aGlzLkltbWVkaWF0ZSgpID8gJ1knIDogJ04nKSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfT1BFUl9TRVJWRVI6XHJcbiAgICAgICAgYnVmZmVyLkFwcGVuZChcIlJ1biBzZXJ2ZXItc2lkZSBvcGVyYXRpb25cIik7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfT1BFUl9DQUxMOlxyXG4gICAgICAgIGJ1ZmZlci5BcHBlbmQoXCJDYWxsIHByb2dyYW1cIik7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgYnVmZmVyLkFwcGVuZEZvcm1hdChcIjw8VW5rbm93biBPcGVyYXRpb24gQ29kZSB7MH0+PlwiLCB0aGlzLl90eXBlKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy9cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgR2V0QXJnTGlzdCgpOiBBcmd1bWVudHNMaXN0IHtcclxuICAgIHJldHVybiB0aGlzLl9hcmdMaXN0O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vL1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBHZXRSZXR1cm5WYWx1ZUZpZWxkKCk6IEZpZWxkIHtcclxuICAgIHJldHVybiB0aGlzLl9maWVsZDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gIHJldHVybnMgc3ViZm9ybSBjb250cm9sIG5hbWUgZm9yIGNhbGwgd2l0aCBkZXN0aW5hdGlvblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBHZXRTdWJmb3JtQ29udHJvbE5hbWUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9zdWJmb3JtQ3RybE5hbWU7XHJcbiAgfVxyXG5cclxuICB0b1N0cmluZygpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIE5TdHJpbmcuRm9ybWF0KFwiRXhlY3V0aW5nIG9wZXJhdGlvbiBudW1iZXIgezB9XCIsIHRoaXMuX3NlcnZlcklkICsgMSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -9967,8 +9967,10 @@ class Operation {
9967
9967
  if (subformTask != null) {
9968
9968
  let terminateTaskGracefully = true;
9969
9969
  let rtEvnt = AccessHelper.eventsManager.getLastRtEvent();
9970
- if (this._isRoute && rtEvnt !== null && rtEvnt.isGuiTriggeredEvent())
9970
+ if (this._isRoute && rtEvnt !== null && rtEvnt.isGuiTriggeredEvent()) {
9971
9971
  terminateTaskGracefully = false;
9972
+ AccessHelper.eventsManager.setStopExecution(true);
9973
+ }
9972
9974
  if (yield subformTask.endTask(true, false, !terminateTaskGracefully, true)) {
9973
9975
  let parentTask = destSubForm.getForm().getTask();
9974
9976
  parentTask.TaskService.RemoveRecomputes(parentTask, subformTask);
@@ -31037,7 +31039,7 @@ class CommandsTable {
31037
31039
  }
31038
31040
  }
31039
31041
 
31040
- let CurrentClientVersion = '4.800.0-dev480.207';
31042
+ let CurrentClientVersion = '4.800.0-dev480.210';
31041
31043
 
31042
31044
  class ClientManager {
31043
31045
  constructor() {