@coolon/angular-ui-powerups 16.1.0-alpha.300 → 16.1.0-alpha.302

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.
@@ -71,7 +71,7 @@ export class PlaceRouter extends GarbageCollector {
71
71
  this.routingSessionFinished(segments);
72
72
  }, (visit) => {
73
73
  this.recordFinishedVisit(visit);
74
- });
74
+ }, () => this.activeVisit$.value);
75
75
  const { chain } = Dsl.disposeWith(this);
76
76
  this.navigationInProgress$ = chain(this.navigationSession$).isNotNil();
77
77
  this.interactionSyncInProgress$ = chain(this.navigationSession$)
@@ -465,4 +465,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
465
465
  providedIn: 'root',
466
466
  }]
467
467
  }], ctorParameters: function () { return [{ type: i1.Router }, { type: i2.Location }, { type: i3.InteractionService }, { type: i4.UrlService }, { type: i5.PlaceHistory }]; } });
468
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhY2Utcm91dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXVpLXBvd2VydXBzL3NyYy9saWIvcGxhY2UvcGxhY2Utcm91dGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFFTCxnQkFBZ0IsRUFDaEIsYUFBYSxFQUNiLGVBQWUsRUFFZixlQUFlLEVBQ2YsTUFBTSxFQUVQLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQUUsb0JBQW9CLEVBQ2xDLEdBQUcsRUFDSCxnQkFBZ0IsRUFFaEIsTUFBTSxFQUNOLGlCQUFpQixFQUNqQixvQkFBb0IsRUFLckIsTUFBTSxnQkFBZ0IsQ0FBQztBQUl4QixPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSw2Q0FBNkMsQ0FBQztBQUMvRSxPQUFPLEVBQUMsMkJBQTJCLEVBQUMsTUFBTSxpRUFBaUUsQ0FBQztBQUM1RyxPQUFPLEVBQUMsbUNBQW1DLEVBQUMsTUFBTSwyRUFBMkUsQ0FBQztBQUM5SCxPQUFPLEVBQUMseUNBQXlDLEVBQUMsTUFBTSxrRkFBa0YsQ0FBQztBQUMzSSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0saUNBQWlDLENBQUM7QUFDM0QsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0seUNBQXlDLENBQUM7QUFFMUUsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sMkNBQTJDLENBQUM7QUFDN0UsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFFdEQsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDcEQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixD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U0FDSjtJQUNILENBQUM7SUFFTyxPQUFPLENBQ2IscUJBQTRELEVBQzVELE1BQWdDO1FBRWhDLElBQUkscUJBQXFCLFlBQVksS0FBSyxFQUFFO1lBQzFDLE9BQU8scUJBQXFCLENBQUM7U0FDOUI7YUFBTTtZQUNMLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxNQUFNLENBQUMsQ0FBQztTQUNsRDtJQUNILENBQUM7dUdBM2pCVSxXQUFXOzJHQUFYLFdBQVcsY0FGVixNQUFNOzsyRkFFUCxXQUFXO2tCQUh2QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TG9jYXRpb259IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcbmltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7XG4gIEFjdGl2YXRlZFJvdXRlU25hcHNob3QsXG4gIE5hdmlnYXRpb25DYW5jZWwsXG4gIE5hdmlnYXRpb25FbmQsXG4gIE5hdmlnYXRpb25FcnJvcixcbiAgTmF2aWdhdGlvbkV4dHJhcyxcbiAgTmF2aWdhdGlvblN0YXJ0LFxuICBSb3V0ZXIsXG4gIFJvdXRlclN0YXRlU25hcHNob3Rcbn0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xuaW1wb3J0IHtcbiAgYXNzZXJ0LFxuICBEZWJ1Z0NvbnRleHQsIERlbGVnYXRpbmdWYWx1ZU1vZGVsLCBEaXNwb3NhYmxlLCBEaXNwb3NlZFdpdGgsXG4gIERzbCxcbiAgR2FyYmFnZUNvbGxlY3RvcixcbiAgTGlzdE1vZGVsLFxuICBMb2dnZXIsXG4gIE11dGFibGVWYWx1ZU1vZGVsLFxuICBTaW5nbGVTZWxlY3Rpb25Nb2RlbCxcbiAgVHJhbnNhY3Rpb24sXG4gIFRyYW5zYWN0aW9uT2JzZXJ2ZXIsXG4gIFZhbHVlTW9kZWwsXG4gIFZhbHVlTW9kZWxDaGFpblxufSBmcm9tICdAY29vbG9uL3BlY3Rpbic7XG5pbXBvcnQge0NvbnN0cnVjdGFibGV9IGZyb20gXCJAY29vbG9uL3R5cGVzY3JpcHQtdXRpbGl0aWVzXCI7XG5pbXBvcnQgdHlwZSB7RGlzcG9zYWJsZUNvbXBvbmVudH0gZnJvbSAnLi4vY29tcG9uZW50cy9kaXNwb3NhYmxlLWNvbXBvbmVudCc7XG5pbXBvcnQgdHlwZSB7SW50ZXJhY3Rpb25TZXJ2aWNlUm91dGluZ0FkYXB0ZXJ9IGZyb20gXCIuLi9pbnRlcmFjdGlvbi9zZXJ2aWNlcy9pbnRlcmFjdGlvbi1zZXJ2aWNlLXJvdXRpbmctYWRhcHRlclwiO1xuaW1wb3J0IHtJbnRlcmFjdGlvblNlcnZpY2V9IGZyb20gXCIuLi9pbnRlcmFjdGlvbi9zZXJ2aWNlcy9pbnRlcmFjdGlvbi5zZXJ2aWNlXCI7XG5pbXBvcnQge05hdmlnYXRpbmdEdXJpbmdJbnRlcmFjdGlvbn0gZnJvbSBcIi4vbmF2aWdhdGlvbi9zZXNzaW9uL2ludGVyYWN0aW9ucy9uYXZpZ2F0aW5nLWR1cmluZy1pbnRlcmFjdGlvblwiO1xuaW1wb3J0IHtQb3BTdGF0ZUR1cmluZ0ludGVyYWN0aW9uTmF2aWdhdGlvbn0gZnJvbSBcIi4vbmF2aWdhdGlvbi9zZXNzaW9uL2ludGVyYWN0aW9ucy9wb3Atc3RhdGUtZHVyaW5nLWludGVyYWN0aW9uLW5hdmlnYXRpb25cIjtcbmltcG9ydCB7U3luY2hyb25pc2VJbnRlcmFjdGlvbkNvbnRleHRJZHNXaXRoUm91dGV9IGZyb20gXCIuL25hdmlnYXRpb24vc2Vzc2lvbi9pbnRlcmFjdGlvbnMvc3luY2hyb25pc2UtaW50ZXJhY3Rpb24tY29udGV4dC1pZHMtd2l0aC1yb3V0ZVwiO1xuaW1wb3J0IHtOYXZpZ2F0aW5nfSBmcm9tIFwiLi9uYXZpZ2F0aW9uL3Nlc3Npb24vbmF2aWdhdGluZ1wiO1xuaW1wb3J0IHtOYXZpZ2F0aW9uQ29udGV4dH0gZnJvbSBcIi4vbmF2aWdhdGlvbi9zZXNzaW9uL25hdmlnYXRpb24tY29udGV4dFwiO1xuaW1wb3J0IHR5cGUge05hdmlnYXRpb25TZXNzaW9ufSBmcm9tIFwiLi9uYXZpZ2F0aW9uL3Nlc3Npb24vbmF2aWdhdGlvbi1zZXNzaW9uXCI7XG5pbXBvcnQge1BvcFN0YXRlTmF2aWdhdGlvbn0gZnJvbSBcIi4vbmF2aWdhdGlvbi9zZXNzaW9uL3BvcC1zdGF0ZS1uYXZpZ2F0aW9uXCI7XG5pbXBvcnQge1BsYWNlQXV0aFNlcnZpY2V9IGZyb20gXCIuL3BsYWNlLWF1dGgtc2VydmljZVwiO1xuaW1wb3J0IHR5cGUge1BsYWNlQ29tcG9uZW50fSBmcm9tIFwiLi9wbGFjZS1jb21wb25lbnRcIjtcbmltcG9ydCB7Z2V0UGxhY2VEZWZpbml0aW9ufSBmcm9tIFwiLi9wbGFjZS1tZXRhZGF0YVwiO1xuaW1wb3J0IHtQbGFjZUhpc3Rvcnl9IGZyb20gXCIuL3BsYWNlLWhpc3RvcnlcIjtcbmltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4vdXJsLXNlcnZpY2VcIjtcbmltcG9ydCB0eXBlIHtVcmxTbmFwc2hvdH0gZnJvbSBcIi4vdXJsLXNuYXBzaG90XCI7XG5pbXBvcnQge1Zpc2l0fSBmcm9tIFwiLi92aXNpdFwiO1xuaW1wb3J0IHR5cGUge1Zpc2l0U2VnbWVudH0gZnJvbSBcIi4vdmlzaXQtc2VnbWVudFwiO1xuXG4vLyBmdW5jdGlvbiBhc0FycmF5PFQ+KGl0ZW06IFQgfCBUW10pOiBUW10ge1xuLy8gICByZXR1cm4gQXJyYXkuaXNBcnJheShpdGVtKSA/IGl0ZW0gOiBbaXRlbV07XG4vLyB9XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBQbGFjZVJvdXRlciBleHRlbmRzIEdhcmJhZ2VDb2xsZWN0b3Ige1xuICByZWFkb25seSBuYXZpZ2F0aW9uU2Vzc2lvbiQgPSBuZXcgTXV0YWJsZVZhbHVlTW9kZWw8TmF2aWdhdGlvblNlc3Npb24+KCk7XG4gIHJlYWRvbmx5IG5hdmlnYXRpb25JblByb2dyZXNzJDogVmFsdWVNb2RlbENoYWluPGJvb2xlYW4+O1xuICByZWFkb25seSBuYXZpZ2F0aW9uU2Vzc2lvbk5hbWUkOiBWYWx1ZU1vZGVsQ2hhaW48c3RyaW5nPjsgLy8gdXNlZCBieSB0ZXN0c1xuICByZWFkb25seSBpbnRlcmFjdGlvblN5bmNJblByb2dyZXNzJDogVmFsdWVNb2RlbDxib29sZWFuPjtcblxuICBwcml2YXRlIHJlYWRvbmx5IG5hdmlnYXRpb25Db250ZXh0OiBOYXZpZ2F0aW9uQ29udGV4dC5JbXBsO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2FjdGl2ZVZpc2l0JCA9IG5ldyBNdXRhYmxlVmFsdWVNb2RlbDxWaXNpdD4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXJJbnRlcmFjdGlvbkFkYXB0ZXI6IEludGVyYWN0aW9uU2VydmljZVJvdXRpbmdBZGFwdGVyO1xuICBwcml2YXRlIHNlc3Npb25GaW5pc2hlZEpvYnM6ICgoKSA9PiB2b2lkKVtdID0gW107XG5cbiAgLy8gUHJlZGljYXRlcyB0aGF0LCBnaXZlbiB0aGUgb3JpZ2luYXRpbmcgY2hhbmdlJ3MgdHJhbnNhY3Rpb24gbWV0YWRhdGEsIGRlY2lkZSBhbiBpbi1wbGFjZVxuICAvLyBwYXJhbWV0ZXIgY2hhbmdlIHNob3VsZCByZXBsYWNlIHJhdGhlciB0aGFuIHB1c2ggYSBoaXN0b3J5IGVudHJ5LiBUaGUgcm91dGVyIGl0c2VsZiBzdGF5c1xuICAvLyBhZ25vc3RpYyBhYm91dCB3aGF0IHRoZSBtZXRhZGF0YSBtZWFucyAtIHByb2R1Y2VycyAoZS5nLiBTaW5nbGVTZWxlY3Rpb25Nb2RlbCBjb3JyZWN0aW9ucykgdGFnXG4gIC8vIHRoZSB0cmFuc2FjdGlvbiBhbmQgcmVnaXN0ZXIgYSBwcmVkaWNhdGUgaGVyZS4gU2VlIHNraXBIaXN0b3J5SWYgLyBub3RpZnlWaXNpdFNlZ21lbnRDaGFuZ2VkLlxuICBwcml2YXRlIHJlYWRvbmx5IHNraXBIaXN0b3J5UHJlZGljYXRlczogQXJyYXk8KG1ldGFkYXRhOiBUcmFuc2FjdGlvbi5NZXRhRGF0YSkgPT4gYm9vbGVhbj4gPSBbXTtcblxuICAvLyBBIG5hdmlnYXRpb24gdHJpZ2dlcmVkIHdoaWxlIGFuIGludGVycnVwdGlibGUgc2Vzc2lvbiBpcyBpbiBmbGlnaHQgaXMgcGFya2VkIGhlcmUgYW5kIHJ1biB3aGVuXG4gIC8vIHRoYXQgc2Vzc2lvbiBmaW5pc2hlcy4gT25seSB0aGUgbW9zdCByZWNlbnQgcGVuZGluZyBuYXZpZ2F0aW9uIGlzIHJldGFpbmVkIChjb2FsZXNjaW5nKS5cbiAgcHJpdmF0ZSBwZW5kaW5nTmF2aWdhdGlvbj86IHtcbiAgICByZWFkb25seSB2aXNpdDogVmlzaXQ7XG4gICAgcmVhZG9ubHkgcnVuTmF2aWdhdGlvbkNvbW1hbmRzOiAocm91dGVyOiBSb3V0ZXIpID0+IHVua25vd247XG4gICAgcmVhZG9ubHkgcmVzb2x2ZTogKCkgPT4gdm9pZDtcbiAgICByZWFkb25seSByZWplY3Q6IChyZWFzb24/OiB1bmtub3duKSA9PiB2b2lkO1xuICB9O1xuICBwcml2YXRlIHF1ZXVlZE5hdmlnYXRpb25EZXB0aCA9IDA7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IE1BWF9RVUVVRURfTkFWSUdBVElPTl9ERVBUSCA9IDU7XG5cbiAgcmVhZG9ubHkgYXV0aFNlcnZpY2UgPSBuZXcgUGxhY2VBdXRoU2VydmljZSgpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWR5JCA9IHRoaXMucmVnaXN0ZXJEaXNwb3NhYmxlKFxuICAgIG5ldyBEZWxlZ2F0aW5nVmFsdWVNb2RlbDxib29sZWFuPigpLndpdGhEZWZhdWx0KHRydWUpXG4gICk7XG4gIHJlYWRvbmx5IHJlYWR5JCA9IHRoaXMuX3JlYWR5JC5yZWFkb25seSQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBhbmd1bGFyUm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSBhbmd1bGFyTG9jYXRpb246IExvY2F0aW9uLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgaW50ZXJhY3Rpb25TZXJ2aWNlOiBJbnRlcmFjdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSB1cmxTZXJ2aWNlOiBVcmxTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcGxhY2VIaXN0b3J5OiBQbGFjZUhpc3RvcnlcbiAgKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIGlmICh3aW5kb3dbJ0N5cHJlc3MnXSkge1xuICAgICAgd2luZG93WydhdXAuUGxhY2VSb3V0ZXInXSA9IHRoaXM7XG4gICAgfVxuXG4gICAgdGhpcy5yb3V0ZXJJbnRlcmFjdGlvbkFkYXB0ZXIgPVxuICAgICAgaW50ZXJhY3Rpb25TZXJ2aWNlLnJlZ2lzdGVyUGxhY2VSb3V0ZXIodGhpcyk7XG5cbiAgICAvLyBUT0RPOiBNYWtlIHRoaXMgYW4gaW50ZXJmYWNlIGFuZCB1c2UgJ3RoaXMnIGluc3RlYWQuXG4gICAgdGhpcy5uYXZpZ2F0aW9uQ29udGV4dCA9IG5ldyBOYXZpZ2F0aW9uQ29udGV4dC5JbXBsKFxuICAgICAgdGhpcy51cmxTZXJ2aWNlLFxuICAgICAgdGhpcy5yb3V0ZXJJbnRlcmFjdGlvbkFkYXB0ZXIsXG4gICAgICAodXJsU25hcHNob3Q6IFVybFNuYXBzaG90LCBvcHRpb25zOiB7IHJlcGxhY2VVcmw6IGJvb2xlYW4gfSkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5uYXZpZ2F0ZUJ5VXJsKHVybFNuYXBzaG90LCBvcHRpb25zKTtcbiAgICAgIH0sXG4gICAgICAoc3RhdGUpID0+IHtcbiAgICAgICAgdGhpcy50cmFuc2l0aW9uVG8oc3RhdGUpO1xuICAgICAgfSxcbiAgICAgIChzZWdtZW50cykgPT4ge1xuICAgICAgICB0aGlzLnJvdXRpbmdTZXNzaW9uRmluaXNoZWQoc2VnbWVudHMpO1xuICAgICAgfSxcbiAgICAgICh2aXNpdCkgPT4ge1xuICAgICAgICB0aGlzLnJlY29yZEZpbmlzaGVkVmlzaXQodmlzaXQpO1xuICAgICAgfVxuICAgICk7XG5cbiAgICBjb25zdCB7IGNoYWluIH0gPSBEc2wuZGlzcG9zZVdpdGgodGhpcyk7XG4gICAgdGhpcy5uYXZpZ2F0aW9uSW5Qcm9ncmVzcyQgPSBjaGFpbih0aGlzLm5hdmlnYXRpb25TZXNzaW9uJCkuaXNOb3ROaWwoKTtcbiAgICB0aGlzLmludGVyYWN0aW9uU3luY0luUHJvZ3Jlc3MkID0gY2hhaW4odGhpcy5uYXZpZ2F0aW9uU2Vzc2lvbiQpXG4gICAgICAucGx1Y2soJ2lzSW50ZXJhY3Rpb25TeW5jJylcbiAgICAgIC5vdGhlcndpc2UoZmFsc2UpO1xuXG4gICAgY29uc3QgaWRsZVN0YXRlTmFtZSA9IGNoYWluKHRoaXMuaW50ZXJhY3Rpb25TZXJ2aWNlLmFjdGl2ZSkubWFwKChhY3RpdmUpID0+XG4gICAgICBhY3RpdmUgPyAnSWRsZUR1cmluZ0ludGVyYWN0aW9uJyA6ICdJZGxlJ1xuICAgICk7XG4gICAgdGhpcy5uYXZpZ2F0aW9uU2Vzc2lvbk5hbWUkID0gY2hhaW4odGhpcy5uYXZpZ2F0aW9uU2Vzc2lvbiQpXG4gICAgICAucGx1Y2soJ25hbWUnKVxuICAgICAgLm90aGVyd2lzZShpZGxlU3RhdGVOYW1lKTtcblxuICAgIERlYnVnQ29udGV4dC50YWcodGhpcy5fYWN0aXZlVmlzaXQkLCAnUGxhY2VSb3V0ZXIuYWN0aXZlVmlzaXQnKTtcblxuICAgIC8vIFRPRE86IG1ha2Ugc2V0dXAgdGhlIGNhbGxiYWNrcyBpbiBkdXJpbmcgbW9kdWxlIGluaXRpYXRpb24gdG8gbWFrZSB0aGlzIHRlc3RhYmxlLlxuICAgIGFuZ3VsYXJSb3V0ZXIuZXZlbnRzLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgIC8vIFJvdXRpbmcgZXZlbnQgc2VxdWVuY2VcbiAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT1cbiAgICAgIC8vIE5hdmlnYXRpb25TdGFydCAtPiAuLi4uIC0+IE5hdmlnYXRpb25DYW5jZWwgLS0+IHJlZGlyZWN0LCBnbyBhcm91bmQgYWdhaW4gaW4gdGhlIHNhbWUgc2Vzc2lvblxuICAgICAgLy8gTmF2aWdhdGlvblN0YXJ0IC0+IC4uLi4gLT4gTmF2aWdhdGlvbkVuZCAtLT4gbmF2aWdhdGlvbiBjb21wbGV0ZSwgZW5kIHNlc3Npb24uXG4gICAgICAvLyBOYXZpZ2F0aW9uU3RhcnQgLT4gLi4uLiAtPiBOYXZpZ2F0aW9uRXJyb3IgLS0+IG5hdmlnYXRpb24gYWJvcnRlZCwgZW5kIHNlc3Npb24uXG4gICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PVxuICAgICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvblN0YXJ0KSB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGAtLS0+IE5hdmlnYXRpb25TdGFydFske2V2ZW50LmlkfV06ICR7ZXZlbnQudXJsfSAoJHtldmVudC5uYXZpZ2F0aW9uVHJpZ2dlcn0pYCk7XG4gICAgICAgIGlmIChldmVudC5uYXZpZ2F0aW9uVHJpZ2dlciA9PT0gJ3BvcHN0YXRlJykge1xuICAgICAgICAgIHRoaXMub25Qb3BTdGF0ZShldmVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5vblJvdXRlclN0YXJ0ZWQoZXZlbnQpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGA8LS0tIE5hdmlnYXRpb25TdGFydFske2V2ZW50LmlkfV06ICR7ZXZlbnQudXJsfSAoJHtldmVudC5uYXZpZ2F0aW9uVHJpZ2dlcn0pYCk7XG4gICAgICB9XG4gICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kKSB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGAtLS0+IE5hdmlnYXRpb25FbmRbJHtldmVudC5pZH1dOiAke2V2ZW50LnVybH1gKTtcbiAgICAgICAgdGhpcy5vblJvdXRlckVuZChldmVudCk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGA8LS0tIE5hdmlnYXRpb25FbmRbJHtldmVudC5pZH1dOiAke2V2ZW50LnVybH1gKTtcbiAgICAgIH1cbiAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FcnJvcikge1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhgLS0tPiBOYXZpZ2F0aW9uRXJyb3JbJHtldmVudC5pZH1dOiAke2V2ZW50LnVybH1gKTtcbiAgICAgICAgdGhpcy5vblJvdXRlckVycm9yKGV2ZW50KTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coYDwtLS0gTmF2aWdhdGlvbkVycm9yWyR7ZXZlbnQuaWR9XTogJHtldmVudC51cmx9YCk7XG4gICAgICB9XG4gICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uQ2FuY2VsKSB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGAtLS0+IE5hdmlnYXRpb25DYW5jZWxbJHtldmVudC5pZH1dOiAke2V2ZW50LnVybH1gKTtcbiAgICAgICAgdGhpcy5vblJvdXRlckNhbmNlbGxlZChldmVudCk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGA8LS0tIE5hdmlnYXRpb25DYW5jZWxbJHtldmVudC5pZH1dOiAke2V2ZW50LnVybH1gKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIFRoZSByb3V0ZXIgbmVlZHMgdG8ga25vdyBhYm91dCB1cmwgY2hhbmdlcyBhbmQgaW4gc29tZSBjYXNlcyB0aGV5IGFyZSB0aGUgb25seSB3YXkgdGhlIHJvdXRlciBjYW4ga25vdyBpZlxuICAgIC8vIHRoZSBiYWNrIGJ1dHRvbiB3YXMgY2xpY2tlZC5cbiAgICBhbmd1bGFyTG9jYXRpb24ub25VcmxDaGFuZ2UoKHVybCkgPT4gdGhpcy5vblVybENoYW5nZWQodXJsKSk7XG5cbiAgICAvLyBBdXRvbWF0aWMgc2VsZWN0aW9uIGNvcnJlY3Rpb25zIChhdXRvLXNlbGVjdC1maXJzdCAvIHNlbGVjdC1uZWFyZXN0KSB0YWcgdGhlaXIgdHJhbnNhY3Rpb24gc29cbiAgICAvLyB0aGV5IHJlZmluZSB0aGUgVVJMIGluIHBsYWNlIHJhdGhlciB0aGFuIGFjY3J1aW5nIGJhY2stc3RhY2sgZW50cmllcy4gQSBkZWxpYmVyYXRlIHVzZXJcbiAgICAvLyBzZWxlY3QoKSBpcyB1bnRhZ2dlZCBhbmQgdGhlcmVmb3JlIHB1c2hlcyBhIGhpc3RvcnkgZW50cnkuXG4gICAgdGhpcy5za2lwSGlzdG9yeUlmKChtZXRhZGF0YSkgPT4gbWV0YWRhdGEuZ2V0KFNpbmdsZVNlbGVjdGlvbk1vZGVsLkFVVE9fQ09SUkVDVElPTikgPT09IHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIGEgcHJlZGljYXRlIHRoYXQgZGVjaWRlcywgZnJvbSB0aGUgb3JpZ2luYXRpbmcgY2hhbmdlJ3MgdHJhbnNhY3Rpb24gbWV0YWRhdGEsIHdoZXRoZXIgYW5cbiAgICogaW4tcGxhY2UgdmlzaXQtcGFyYW1ldGVyIGNoYW5nZSBzaG91bGQgcmVwbGFjZSB0aGUgY3VycmVudCBoaXN0b3J5IGVudHJ5IGluc3RlYWQgb2YgcHVzaGluZyBhIG5ld1xuICAgKiBvbmUuIFVzZSB0aGlzIHRvIHN1cHByZXNzIGhpc3RvcnkgZm9yIHByb2dyYW1tYXRpYy9hdXRvbWF0aWMgY2hhbmdlcyB3aGlsZSBsZWF2aW5nIGRlbGliZXJhdGVcbiAgICogdXNlciBuYXZpZ2F0aW9ucyBhcyBwdXNoZXMuIFJldHVybnMgYSB7QGxpbmsgRGlzcG9zYWJsZX0gdGhhdCByZW1vdmVzIHRoZSBwcmVkaWNhdGUuXG4gICAqL1xuICBza2lwSGlzdG9yeUlmKHByZWRpY2F0ZTogKG1ldGFkYXRhOiBUcmFuc2FjdGlvbi5NZXRhRGF0YSkgPT4gYm9vbGVhbik6IERpc3Bvc2FibGUge1xuICAgIHRoaXMuc2tpcEhpc3RvcnlQcmVkaWNhdGVzLnB1c2gocHJlZGljYXRlKTtcbiAgICByZXR1cm4ge1xuICAgICAgZGlzcG9zZTogKCkgPT4ge1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuc2tpcEhpc3RvcnlQcmVkaWNhdGVzLmluZGV4T2YocHJlZGljYXRlKTtcbiAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICB0aGlzLnNraXBIaXN0b3J5UHJlZGljYXRlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgc2hvdWxkUmVwbGFjZUhpc3RvcnkobWV0YWRhdGE/OiBUcmFuc2FjdGlvbi5NZXRhRGF0YSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIW1ldGFkYXRhICYmIHRoaXMuc2tpcEhpc3RvcnlQcmVkaWNhdGVzLnNvbWUocHJlZGljYXRlID0+IHByZWRpY2F0ZShtZXRhZGF0YSkpO1xuICB9XG5cbiAgcG9zdHBvbmVSb3V0aW5nVW50aWwoY29uZGl0aW9uJDogVmFsdWVNb2RlbDxib29sZWFuPikge1xuICAgIHRoaXMuX3JlYWR5JC5zZXREZWxlZ2F0ZShjb25kaXRpb24kKTtcbiAgfVxuXG4gIGFzeW5jIGdldEF1dGhlbnRpY2F0aW9uRmFpbHVyZVJlZGlyZWN0KFxuICAgIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LFxuICAgIHN0YXRlOiBSb3V0ZXJTdGF0ZVNuYXBzaG90XG4gICk6IFByb21pc2U8VmlzaXQ+IHtcbiAgICByZXR1cm4gdGhpcy5hdXRoU2VydmljZS5nZXRBdXRoZW50aWNhdGlvbkZhaWx1cmVSZWRpcmVjdChcbiAgICAgIGFjdGl2YXRlZFJvdXRlLFxuICAgICAgc3RhdGVcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgZ2V0QXV0aG9yaXNhdGlvbkZhaWx1cmVSZWRpcmVjdE9wdGlvbnMoXG4gICAgY29tcG9uZW50OiBDb25zdHJ1Y3RhYmxlPFBsYWNlQ29tcG9uZW50PlxuICApOiBQcm9taXNlPFZpc2l0W10+IHtcbiAgICByZXR1cm4gdGhpcy5hdXRoU2VydmljZS5nZXRBdXRob3Jpc2F0aW9uRmFpbHVyZVJlZGlyZWN0T3B0aW9ucyhjb21wb25lbnQpO1xuICB9XG5cbiAgZ2V0IG5hdmlnYXRpb25TZXNzaW9uKCkge1xuICAgIHJldHVybiB0aGlzLm5hdmlnYXRpb25TZXNzaW9uJC52YWx1ZTtcbiAgfVxuXG4gIGdldCBjdXJyZW50U2Vzc2lvbigpIHtcbiAgICByZXR1cm4gdGhpcy5uYXZpZ2F0aW9uU2Vzc2lvbiQudmFsdWU7XG4gIH1cblxuICBpc05hdmlnYXRpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubmF2aWdhdGlvbkluUHJvZ3Jlc3MkLnZhbHVlO1xuICB9XG5cbiAgYXN5bmMgd2FpdFVudGlsUm91dGVyUmVhZHkoKSB7XG4gICAgY29uc3QgeyB3YWl0VW50aWwgfSA9IERzbC5kaXNwb3NlV2l0aCh0aGlzKTtcbiAgICBhd2FpdCB3YWl0VW50aWwodGhpcy5yZWFkeSQpLmJlY29tZXNUcnV0aHkoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGFzeW5jIHdhaXRVbnRpbElkbGUoKTogUHJvbWlzZTx0aGlzPiB7XG4gICAgY29uc3QgeyB3YWl0VW50aWwgfSA9IERzbC5kaXNwb3NlV2l0aCh0aGlzKTtcbiAgICBhd2FpdCB3YWl0VW50aWwodGhpcy5uYXZpZ2F0aW9uSW5Qcm9ncmVzcyQpLmJlY29tZXNGYWxzZXkoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGFzeW5jIHdhaXRBY3Rpdml0aWVzU3luY2hyb25pc2VkKCk6IFByb21pc2U8dGhpcz4ge1xuICAgIGNvbnN0IHsgd2FpdFVudGlsIH0gPSBEc2wuZGlzcG9zZVdpdGgodGhpcyk7XG4gICAgYXdhaXQgd2FpdFVudGlsKHRoaXMuaW50ZXJhY3Rpb25TeW5jSW5Qcm9ncmVzcyQpLmJlY29tZXNGYWxzZXkoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIEBUcmFjZSgpXG4gIG9uUG9wU3RhdGUoZXZlbnQ6IE5hdmlnYXRpb25TdGFydCkge1xuICAgIGFzc2VydC5pc1RydXRoeShldmVudC5uYXZpZ2F0aW9uVHJpZ2dlciA9PT0gJ3BvcHN0YXRlJyk7XG4gICAgaWYgKHRoaXMuY3VycmVudFNlc3Npb24pIHtcbiAgICAgIHRoaXMuY3VycmVudFNlc3Npb24ub25Qb3BTdGF0ZShldmVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHBvcHBlZEhpc3RvcnlVcmwgPSBldmVudC51cmw7XG4gICAgICBjb25zdCBjdXJyZW50Um91dGVyVXJsID0gdGhpcy51cmxTZXJ2aWNlLmdldEN1cnJlbnRSb3V0ZXJVcmwoKTtcbiAgICAgIGNvbnN0IHNlc3Npb24gPSB0aGlzLmludGVyYWN0aW9uU2VydmljZS5pc0FjdGl2ZSgpXG4gICAgICAgID8gbmV3IFBvcFN0YXRlRHVyaW5nSW50ZXJhY3Rpb25OYXZpZ2F0aW9uKFxuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uQ29udGV4dCxcbiAgICAgICAgICAgIGN1cnJlbnRSb3V0ZXJVcmwsXG4gICAgICAgICAgICBwb3BwZWRIaXN0b3J5VXJsXG4gICAgICAgICAgKVxuICAgICAgICA6IG5ldyBQb3BTdGF0ZU5hdmlnYXRpb24oXG4gICAgICAgICAgICB0aGlzLm5hdmlnYXRpb25Db250ZXh0LFxuICAgICAgICAgICAgY3VycmVudFJvdXRlclVybCxcbiAgICAgICAgICAgIHBvcHBlZEhpc3RvcnlVcmxcbiAgICAgICAgICApO1xuICAgICAgdGhpcy50cmFuc2l0aW9uVG8oc2Vzc2lvbik7XG4gICAgfVxuICB9XG5cbiAgLy8gQFRyYWNlKClcbiAgb25Sb3V0ZXJTdGFydGVkKGV2ZW50OiBOYXZpZ2F0aW9uU3RhcnQpIHtcbiAgICBhc3NlcnQuaXNGYWxzZXkoZXZlbnQubmF2aWdhdGlvblRyaWdnZXIgPT09ICdwb3BzdGF0ZScpO1xuICAgIC8vIGNvbnN0IGluSW50ZXJhY3Rpb24gPSB0aGlzLmludGVyYWN0aW9uU2VydmljZS5pc0FjdGl2ZSgpO1xuICAgIGlmICh0aGlzLmN1cnJlbnRTZXNzaW9uKSB7XG4gICAgICB0aGlzLmN1cnJlbnRTZXNzaW9uLm9uUm91dGVyU3RhcnRlZChldmVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudHJhbnNpdGlvblRvKFxuICAgICAgICB0aGlzLmNyZWF0ZU5hdmlnYXRpb25TZXNzaW9uKHRoaXMudXJsU2VydmljZS5nZXRDdXJyZW50Um91dGVyVXJsKCkpXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8vIEBUcmFjZSgpXG4gIG9uVXJsQ2hhbmdlZChuZXdVcmw6IHN0cmluZykge1xuICAgIC8vIHRoZSBiYWNrIGJ1dHRvbiBjYW4gdHJpZ2dlciBhIHVybCBjaGFuZ2Ugd2l0aG91dCBhIG5hdmlnYXRpb24gc2Vzc2lvbiBpbiBwcm9ncmVzcyBzbyB3ZVxuICAgIC8vIGNvbnNvbGUubG9nKGAtLS0+IFVybCBDaGFuZ2VkICR7bmV3VXJsfWApO1xuICAgIGlmICh0aGlzLmN1cnJlbnRTZXNzaW9uKSB7XG4gICAgICB0aGlzLmN1cnJlbnRTZXNzaW9uLm9uVXJsQ2hhbmdlKG5ld1VybCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUubG9nKCdGWUk6IHVybCBjaGFuZ2VkIHdpdGhvdXQgYSBuYXZpZ2F0aW9uIHNlc3Npb24gaW4gcHJvZ3Jlc3MnKTtcbiAgICB9XG4gICAgLy8gY29uc29sZS5sb2coYDwtLS0gVXJsIENoYW5nZWRgKTtcbiAgfVxuXG4gIC8vIEBUcmFjZSgpXG4gIG9uUm91dGVyQ2FuY2VsbGVkKGV2ZW50OiBOYXZpZ2F0aW9uQ2FuY2VsKSB7XG4gICAgdGhpcy5jdXJyZW50U2Vzc2lvbi5vblJvdXRlckNhbmNlbGxlZChldmVudCk7XG4gIH1cblxuICAvLyBAVHJhY2UoKVxuICBvblJvdXRlckVycm9yKGV2ZW50OiBOYXZpZ2F0aW9uRXJyb3IpIHtcbiAgICB0aGlzLmN1cnJlbnRTZXNzaW9uLm9uUm91dGVyRXJyb3IoZXZlbnQpO1xuICB9XG5cbiAgLy8gQFRyYWNlKClcbiAgb25Sb3V0ZXJFbmQoZXZlbnQ6IE5hdmlnYXRpb25FbmQpIHtcbiAgICB0aGlzLmN1cnJlbnRTZXNzaW9uLm9uUm91dGVyRW5kKGV2ZW50KTtcbiAgfVxuXG4gIGFzeW5jIG5hdmlnYXRlKHZpc2l0OiBWaXNpdCk7XG4gIGFzeW5jIG5hdmlnYXRlKFxuICAgIHBsYWNlQ29tcG9uZW50OiBDb25zdHJ1Y3RhYmxlPFBsYWNlQ29tcG9uZW50PixcbiAgICBwYXJhbXM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICApO1xuICBhc3luYyBuYXZpZ2F0ZShcbiAgICB2aXNpdE9yUGxhY2VDb21wb25lbnQ6IFZpc2l0IHwgQ29uc3RydWN0YWJsZTxQbGFjZUNvbXBvbmVudD4sXG4gICAgcGFyYW1zPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgKSB7XG4gICAgY29uc3QgdmlzaXQgPSB0aGlzLnRvVmlzaXQoXG4gICAgICB2aXNpdE9yUGxhY2VDb21wb25lbnQsXG4gICAgICBwYXJhbXNcbiAgICApLmNvcHlXaXRoRGVmYXVsdHNGcm9tKHRoaXMuYWN0aXZlVmlzaXQkLnZhbHVlKTtcbiAgICByZXR1cm4gdGhpcy5kb05hdmlnYXRpb24odmlzaXQsIGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IHRoaXMuYW5ndWxhclJvdXRlci5uYXZpZ2F0ZSh2aXNpdC5nZXRSb3V0ZXJDb21tYW5kcygpKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIEBUcmFjZSgpXG4gIGFzeW5jIGRvTmF2aWdhdGlvbihcbiAgICB2aXNpdDogVmlzaXQsXG4gICAgcnVuTmF2aWdhdGlvbkNvbW1hbmRzOiAocm91dGVyOiBSb3V0ZXIpID0+IHVua25vd25cbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMubmF2aWdhdGlvbkluUHJvZ3Jlc3MkLnZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVPdmVybGFwcGluZ05hdmlnYXRpb24odmlzaXQsIHJ1bk5hdmlnYXRpb25Db21tYW5kcyk7XG4gICAgfVxuICAgIGNvbnN0IG5hdmlnYXRpb24gPSB0aGlzLmNyZWF0ZU5hdmlnYXRpb25TZXNzaW9uKFxuICAgICAgdGhpcy51cmxTZXJ2aWNlLmdldEN1cnJlbnRSb3V0ZXJVcmwoKVxuICAgICk7XG4gICAgbmF2aWdhdGlvbi5pbml0aWFsaXNlVmlzaXRTZWdtZW50cyh2aXNpdCk7XG4gICAgdGhpcy50cmFuc2l0aW9uVG8obmF2aWdhdGlvbik7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHJ1bk5hdmlnYXRpb25Db21tYW5kcyh0aGlzLmFuZ3VsYXJSb3V0ZXIpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICAvLyBDaGVjayBpZiB0aGUgcm91dGVyIGhhcyBmaW5pc2hlZCAoaW4gdGhlIGNhc2Ugd2hlcmUgbm8gcm91dGVyIGNoYW5nZSByZXF1aXJlZCkgYW5kIHdlJ3JlIHN0aWxsIGluICBhXG4gICAgICAvLyB0cmFuc2llbnQgc3RhdGUgYW5kIGZpbmlzaCBvZiB0aGUgdHJhbnNpdGlvbi5cbiAgICAgIGlmICghdGhpcy5hbmd1bGFyUm91dGVyLmdldEN1cnJlbnROYXZpZ2F0aW9uKCkgJiYgdGhpcy5jdXJyZW50U2Vzc2lvbikge1xuICAgICAgICB0aGlzLmN1cnJlbnRTZXNzaW9uLm9uUm91dGVyRW5kKFxuICAgICAgICAgIG5ldyBOYXZpZ2F0aW9uRW5kKC0xLCAnJywgdGhpcy51cmxTZXJ2aWNlLmdldEN1cnJlbnRSb3V0ZXJVcmwoKSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyBhIG5hdmlnYXRpb24gdHJpZ2dlcmVkIHdoaWxlIGFub3RoZXIgaXMgYWxyZWFkeSBpbiBmbGlnaHQ6IHF1ZXVlIGl0IChjb2FsZXNjaW5nIHRvIHRoZVxuICAgKiBsYXRlc3QpIGFuZCBydW4gaXQgb25jZSB0aGUgaW4tZmxpZ2h0IHNlc3Npb24gZmluaXNoZXMuXG4gICAqXG4gICAqIEhpc3Rvcnk6IHRoaXMgdXNlZCB0byB0aHJvdyBgaWxsZWdhbFN0YXRlKCdOYXZpZ2F0aW9uIGFscmVhZHkgaW4gcHJvZ3Jlc3MnKWAgKGtpbGxlZCB0aGVcbiAgICogdHJpZ2dlcmluZyBhY3Rpb24pLCB0aGVuIGRyb3BwZWQgcmVhbC12cy1yZWFsIGNvbGxpc2lvbnMgYXMgYW4gaW50ZXJpbSBwb2xpY3kgcGVuZGluZ1xuICAgKiBwcm9kdWN0aW9uIGV2aWRlbmNlLiBUaGUgZXZpZGVuY2UgYXJyaXZlZDogYSBgbmF2aWdhdGUoKWAgaXNzdWVkIGZyb20gYG9uUGxhY2VSZWFkeWAgb3IgYVxuICAgKiByb3V0ZS1wYXJhbWV0ZXIgc3Vic2NyaXB0aW9uIGNhbiBsYW5kIHdoaWxlIHRoZSBhY3RpdmF0aW5nIG5hdmlnYXRpb24ncyBzZXNzaW9uIGlzIHN0aWxsXG4gICAqIHNldHRsaW5nIOKAlCBkcm9wcGluZyBpdCBsZWF2ZXMgYSBwbGFjZSB0aGF0IG5ldmVyIGZpbmlzaGVzIG5hdmlnYXRpbmcgKGUuZy4gYVxuICAgKiByZWRpcmVjdFRvRmlyc3RDaGlsZC1zdHlsZSBjaGlsZCB0aGF0IG5ldmVyIGFwcGVhcnMpLCBhbmQgdGhlIGNhbGxlciBjYW4ndCB0ZWxsIGJlY2F1c2UgdGhlXG4gICAqIGRyb3BwZWQgcHJvbWlzZSByZXNvbHZlZCBub3JtYWxseS4gUG9wc3RhdGUgbmV2ZXIgZW50ZXJzIGRvTmF2aWdhdGlvbiAoaXQgYXJyaXZlcyB2aWEgcm91dGVyXG4gICAqIGV2ZW50cyAtPiBvblBvcFN0YXRlKSwgc28gcXVldWVpbmcgcHJvZ3JhbW1hdGljIG5hdmlnYXRpb25zIGJlaGluZCBhbiBpbi1mbGlnaHQgc2Vzc2lvblxuICAgKiBwcmVzZXJ2ZXMgdXNlci1pbnRlbnQgb3JkZXJpbmcuXG4gICAqL1xuICBwcml2YXRlIGhhbmRsZU92ZXJsYXBwaW5nTmF2aWdhdGlvbihcbiAgICB2aXNpdDogVmlzaXQsXG4gICAgcnVuTmF2aWdhdGlvbkNvbW1hbmRzOiAocm91dGVyOiBSb3V0ZXIpID0+IHVua25vd25cbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMubmF2aWdhdGlvblNlc3Npb247XG4gICAgY29uc3QgZGVidWcgPSB7XG4gICAgICBpblByb2dyZXNzOiB7XG4gICAgICAgIHNlc3Npb246IGN1cnJlbnQ/Lm5hbWUsXG4gICAgICAgIHN0YXRlOiBjdXJyZW50Py50b1N0cmluZygpLFxuICAgICAgICBpc0ludGVyYWN0aW9uU3luYzogY3VycmVudD8uaXNJbnRlcmFjdGlvblN5bmMsXG4gICAgICAgIGlzSW50ZXJydXB0aWJsZTogY3VycmVudD8uaXNJbnRlcnJ1cHRpYmxlLFxuICAgICAgICBpc1BvcFN0YXRlOiBjdXJyZW50Py5pc1BvcFN0YXRlLFxuICAgICAgICBzZWdtZW50czogY3VycmVudD8uZ2V0VmlzaXRTZWdtZW50cygpLm1hcChzID0+IHMudG9EZWJ1Z1N0cmluZygpKSxcbiAgICAgIH0sXG4gICAgICBpbmNvbWluZzogdmlzaXQ/LnRvRGVidWdTdHJpbmcoKSxcbiAgICAgIGN1cnJlbnRVcmw6IHRoaXMudXJsU2VydmljZS5nZXRDdXJyZW50Um91dGVyVXJsKCksXG4gICAgfTtcblxuICAgIExvZ2dlci5nZXQodGhpcykud2FybihcbiAgICAgIGBOYXZpZ2F0aW9uIHRyaWdnZXJlZCB3aGlsZSBzZXNzaW9uICcke2N1cnJlbnQ/Lm5hbWV9JyBpcyBpbiBwcm9ncmVzczsgYCArXG4gICAgICAgIGBxdWV1ZWluZyB0aGUgaW5jb21pbmcgbmF2aWdhdGlvbiB0byBydW4gb25jZSBpdCBmaW5pc2hlcy5gLFxuICAgICAgZGVidWdcbiAgICApO1xuICAgIHJldHVybiB0aGlzLnF1ZXVlTmF2aWdhdGlvbih2aXNpdCwgcnVuTmF2aWdhdGlvbkNvbW1hbmRzKTtcbiAgfVxuXG4gIHByaXZhdGUgcXVldWVOYXZpZ2F0aW9uKFxuICAgIHZpc2l0OiBWaXNpdCxcbiAgICBydW5OYXZpZ2F0aW9uQ29tbWFuZHM6IChyb3V0ZXI6IFJvdXRlcikgPT4gdW5rbm93blxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBmbHVzaEFscmVhZHlTY2hlZHVsZWQgPSAhIXRoaXMucGVuZGluZ05hdmlnYXRpb247XG4gICAgaWYgKHRoaXMucGVuZGluZ05hdmlnYXRpb24pIHtcbiAgICAgIC8vIENvYWxlc2NlOiBzdXBlcnNlZGUgdGhlIHByZXZpb3VzbHkgcXVldWVkIG5hdmlnYXRpb24gc28gb25seSB0aGUgbW9zdCByZWNlbnQgdGFyZ2V0IHJ1bnMuXG4gICAgICB0aGlzLnBlbmRpbmdOYXZpZ2F0aW9uLnJlc29sdmUoKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMucGVuZGluZ05hdmlnYXRpb24gPSB7IHZpc2l0LCBydW5OYXZpZ2F0aW9uQ29tbWFuZHMsIHJlc29sdmUsIHJlamVjdCB9O1xuICAgICAgaWYgKCFmbHVzaEFscmVhZHlTY2hlZHVsZWQpIHtcbiAgICAgICAgdGhpcy5ydW5BZnRlclJvdXRpbmdTZXNzaW9uRmluaXNoZXMoKCkgPT4gdGhpcy5mbHVzaFBlbmRpbmdOYXZpZ2F0aW9uKCkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBmbHVzaFBlbmRpbmdOYXZpZ2F0aW9uKCk6IHZvaWQge1xuICAgIGNvbnN0IHBlbmRpbmcgPSB0aGlzLnBlbmRpbmdOYXZpZ2F0aW9uO1xuICAgIGlmICghcGVuZGluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnBlbmRpbmdOYXZpZ2F0aW9uID0gdW5kZWZpbmVkO1xuXG4gICAgaWYgKHRoaXMucXVldWVkTmF2aWdhdGlvbkRlcHRoID49IFBsYWNlUm91dGVyLk1BWF9RVUVVRURfTkFWSUdBVElPTl9ERVBUSCkge1xuICAgICAgTG9nZ2VyLmdldCh0aGlzKS53YXJuKFxuICAgICAgICBgRHJvcHBpbmcgcXVldWVkIG5hdmlnYXRpb24gYWZ0ZXIgJHt0aGlzLnF1ZXVlZE5hdmlnYXRpb25EZXB0aH0gY29uc2VjdXRpdmUgZGVmZXJyYWxzIHRvIGAgK1xuICAgICAgICAgIGBhdm9pZCBhIG5hdmlnYXRpb24gbG9vcC5gLFxuICAgICAgICB7IHZpc2l0OiBwZW5kaW5nLnZpc2l0Py50b0RlYnVnU3RyaW5nKCkgfVxuICAgICAgKTtcbiAgICAgIHRoaXMucXVldWVkTmF2aWdhdGlvbkRlcHRoID0gMDtcbiAgICAgIHBlbmRpbmcucmVzb2x2ZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucXVldWVkTmF2aWdhdGlvbkRlcHRoKys7XG4gICAgdGhpcy5kb05hdmlnYXRpb24ocGVuZGluZy52aXNpdCwgcGVuZGluZy5ydW5OYXZpZ2F0aW9uQ29tbWFuZHMpLnRoZW4oXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHRoaXMucXVldWVkTmF2aWdhdGlvbkRlcHRoID0gMDtcbiAgICAgICAgcGVuZGluZy5yZXNvbHZlKCk7XG4gICAgICB9LFxuICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgIHRoaXMucXVldWVkTmF2aWdhdGlvbkRlcHRoID0gMDtcbiAgICAgICAgcGVuZGluZy5yZWplY3QoZXJyb3IpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBuYXZpZ2F0ZUJ5VXJsKFxuICAgIHVybFNuYXBzaG90OiBVcmxTbmFwc2hvdCxcbiAgICBuYXZpZ2F0aW9uRXh0cmFzPzogTmF2aWdhdGlvbkV4dHJhc1xuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAvLyBjb25zb2xlLmxvZyhgIyMjIG5hdmlnYXRpb25CeVVybCAtPiAke3VybFNuYXBzaG90LnVybFRyZWUudG9TdHJpbmcoKX1gKTtcbiAgICByZXR1cm4gdGhpcy5hbmd1bGFyUm91dGVyLm5hdmlnYXRlQnlVcmwoXG4gICAgICB1cmxTbmFwc2hvdC51cmxUcmVlLFxuICAgICAgbmF2aWdhdGlvbkV4dHJhc1xuICAgICk7XG4gIH1cblxuICBnZXQgYWN0aXZlVmlzaXQkKCk6IFZhbHVlTW9kZWw8VmlzaXQ+IHtcbiAgICByZXR1cm4gdGhpcy5fYWN0aXZlVmlzaXQkLnJlYWRvbmx5JDtcbiAgfVxuXG4gIGZpbHRlckF1dGhvcml6ZWRQbGFjZXMocGxhY2VzOiBSZWFkb25seUFycmF5PENvbnN0cnVjdGFibGU8UGxhY2VDb21wb25lbnQ+Piwgb3B0aW9uczogRGlzcG9zZWRXaXRoKTogTGlzdE1vZGVsPENvbnN0cnVjdGFibGU8UGxhY2VDb21wb25lbnQ+PiB7XG4gICAgY29uc3QgeyBjaGFpbiB9ID0gRHNsLmRpc3Bvc2VXaXRoKG9wdGlvbnMuZGlzcG9zZWRXaXRoKTtcbiAgICByZXR1cm4gY2hhaW4odGhpcy5hdXRoU2VydmljZS5hY2Nlc3NHdWFyZCQpLm1hcFRvTGlzdCgoZykgPT5cbiAgICAgIHBsYWNlcy5maWx0ZXIoKHApID0+IGcuaXNBdXRob3Jpc2VkKGdldFBsYWNlRGVmaW5pdGlvbihwKSkpXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIG5vdGlmeVZpc2l0U2VnbWVudENoYW5nZWQoXG4gICAgaXM6IFZpc2l0U2VnbWVudCxcbiAgICB3YXM6IFZpc2l0U2VnbWVudCxcbiAgICBtZXRhZGF0YT86IFRyYW5zYWN0aW9uLk1ldGFEYXRhXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIGNvbnNvbGUubG9nKFwiUGxhY2VSb3V0ZXIubm90aWZ5VmlzaXRTZWdtZW50Q2hhbmdlZFwiLCBpcy50b0RlYnVnU3RyaW5nKCksIHdhcy50b0RlYnVnU3RyaW5nKCkpO1xuICAgIHRoaXMucGxhY2VIaXN0b3J5LnVwZGF0ZVZpc2l0U2VnbWVudChpcyk7XG5cbiAgICAvLyBGSVhNRTogbm8gcm91dGUgaWQgLT4gcm91dGUgaWQgZHVwbGljYXRlcyByb3V0ZSBwYXJhbWV0ZXJzXG4gICAgY29uc3QgdmlzaXQgPSB0aGlzLmFjdGl2ZVZpc2l0JC52YWx1ZS5jb3B5QW5kUmVwbGFjZVNlZ21lbnQoaXMpO1xuICAgIGlmIChpcy5oYXNSb3V0aW5nQ2hhbmdlZEZyb20od2FzKSkge1xuICAgICAgLy8gQW4gaW4tcGxhY2UgcGFyYW1ldGVyIGNoYW5nZSAobW9kZWwgLT4gcm91dGUpIHB1c2hlcyBhIGhpc3RvcnkgZW50cnkgYnkgZGVmYXVsdCBzbyBhXG4gICAgICAvLyBkZWxpYmVyYXRlIHNlbGVjdGlvbiBpcyByZWFjaGFibGUgdmlhIHRoZSBiYWNrIGJ1dHRvbi4gQXV0b21hdGljIHJlZmluZW1lbnRzXG4gICAgICAvLyAoYXV0by1zZWxlY3QtZmlyc3QgLyBzZWxlY3QtbmVhcmVzdCBjb3JyZWN0aW9ucykgdGFnIHRoZWlyIHRyYW5zYWN0aW9uIG1ldGFkYXRhIGFuZCBhXG4gICAgICAvLyByZWdpc3RlcmVkIHNraXBIaXN0b3J5SWYgcHJlZGljYXRlIHJlcGxhY2VzIGluc3RlYWQgLSBzZWUgc2tpcEhpc3RvcnlJZi5cbiAgICAgIGNvbnN0IHJlcGxhY2VVcmwgPSB0aGlzLnNob3VsZFJlcGxhY2VIaXN0b3J5KG1ldGFkYXRhKTtcbiAgICAgIGF3YWl0IHRoaXMuZG9OYXZpZ2F0aW9uKHZpc2l0LCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHVybFNuYXBzaG90ID0gdGhpcy51cmxTZXJ2aWNlXG4gICAgICAgICAgLnBhcnNlVXJsKHRoaXMuYW5ndWxhclJvdXRlci5yb3V0ZXJTdGF0ZS5zbmFwc2hvdC51cmwpXG4gICAgICAgICAgLnVwZGF0ZVZpc2l0U2VnbWVudChpcyk7XG4gICAgICAgIHJldHVybiB0aGlzLm5hdmlnYXRlQnlVcmwodXJsU25hcHNob3QsIHsgcmVwbGFjZVVybCB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlTmF2aWdhdGlvblNlc3Npb24oY3VycmVudFJvdXRlclVybDogc3RyaW5nKTogTmF2aWdhdGlvblNlc3Npb24ge1xuICAgIGNvbnN0IGluSW50ZXJhY3Rpb24gPSB0aGlzLmludGVyYWN0aW9uU2VydmljZS5pc0FjdGl2ZSgpO1xuICAgIHJldHVybiBpbkludGVyYWN0aW9uXG4gICAgICA/IG5ldyBOYXZpZ2F0aW5nRHVyaW5nSW50ZXJhY3Rpb24oXG4gICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uQ29udGV4dCxcbiAgICAgICAgICBjdXJyZW50Um91dGVyVXJsXG4gICAgICAgIClcbiAgICAgIDogbmV3IE5hdmlnYXRpbmcodGhpcy5uYXZpZ2F0aW9uQ29udGV4dCwgY3VycmVudFJvdXRlclVybCk7XG4gIH1cblxuICAvLyBAVHJhY2UoKVxuXG4gIHByb3RlY3RlZCB0cmFuc2l0aW9uVG8obmV4dDogTmF2aWdhdGlvblNlc3Npb24pIHtcbiAgICBjb25zdCBwcmV2aW91cyA9IHRoaXMubmF2aWdhdGlvblNlc3Npb24kLnZhbHVlO1xuICAgIGlmICghcHJldmlvdXMpIHtcbiAgICAgIHRoaXMucGxhY2VIaXN0b3J5Lm5vdGlmeU5hdmlnYXRpb25TdGFydGVkKCk7XG4gICAgfVxuICAgIGFzc2VydC5pc1RydXRoeShuZXh0ICE9PSBwcmV2aW91cyk7XG4gICAgLy8gTG9nZ2VyLmdldCh0aGlzKS5pbmZvKGAjIyMgUm91dGVyIFN0YXRlIFRyYW5zaXRpb246ICR7cHJldmlvdXMgPyBwcmV2aW91cy50b1N0cmluZygpIDogJ251bGwnfSAtPiAke25leHQudG9TdHJpbmcoKX1gKTtcbiAgICB0aGlzLm5hdmlnYXRpb25TZXNzaW9uJC52YWx1ZSA9IG5leHQ7XG4gICAgaWYgKHByZXZpb3VzKSB7XG4gICAgICBwcmV2aW91cy5kaXNwb3NlKCk7XG4gICAgfVxuICAgIG5leHQubm90aWZ5QWN0aXZlKCk7XG4gIH1cblxuICAvLyBAVHJhY2UoKVxuXG4gIHByaXZhdGUgcm91dGluZ1Nlc3Npb25GaW5pc2hlZCh2aXNpdD86IFZpc2l0KSB7XG4gICAgaWYgKHZpc2l0KSB7XG4gICAgICBhc3NlcnQuaXNUcnV0aHkodGhpcy5uYXZpZ2F0aW9uSW5Qcm9ncmVzcyQudmFsdWUpO1xuICAgICAgdGhpcy5yZWNvcmRGaW5pc2hlZFZpc2l0KHZpc2l0KTtcbiAgICB9XG4gICAgY29uc3Qgc2Vzc2lvbiA9IHRoaXMuY3VycmVudFNlc3Npb247XG4gICAgc2Vzc2lvbi5kaXNwb3NlKCk7XG4gICAgdGhpcy5uYXZpZ2F0aW9uU2Vzc2lvbiQudmFsdWUgPSBudWxsO1xuICAgIC8vIGNvbnNvbGUubG9nKGAjIyMgUm91dGVyIFNlc3Npb24gRmluaXNoZWQgKHdhcyAke3Nlc3Npb24udG9TdHJpbmcoKX0pYCk7XG4gICAgLy8gU25hcHNob3QtYW5kLXN3YXA6IGpvYnMgcmVnaXN0ZXJlZCBEVVJJTkcgdGhlIGRyYWluIChlLmcuIHRoZSBpbnRlcmFjdGlvbi1pZCBzeW5jJ3MgbmVzdGVkXG4gICAgLy8gY29tcGxldGlvbiBqb2IsIG9yIGEgcXVldWVkIG5hdmlnYXRpb24gcmUtcXVldWVpbmcpIGJlbG9uZyB0byB0aGUgTkVYVCBzZXNzaW9uIGZpbmlzaC4gVGhlXG4gICAgLy8gb2xkIGZvckVhY2gtdGhlbi1yZWFzc2lnbiBib3RoIHNraXBwZWQgdGhlbSAoZm9yRWFjaCBkb2Vzbid0IHZpc2l0IGFwcGVuZGVkIGl0ZW1zKSBhbmQgdGhlblxuICAgIC8vIGRpc2NhcmRlZCB0aGVtLlxuICAgIGNvbnN0IGpvYnMgPSB0aGlzLnNlc3Npb25GaW5pc2hlZEpvYnM7XG4gICAgdGhpcy5zZXNzaW9uRmluaXNoZWRKb2JzID0gW107XG4gICAgam9icy5mb3JFYWNoKChqb2IpID0+IGpvYigpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNvcmRzIGEgY29tcGxldGVkIG5hdmlnYXRpb24ncyB2aXNpdCB3aXRob3V0IGZpbmlzaGluZyB0aGUgc2Vzc2lvbi4gU2hhcmVkIGJ5IHRoZSBub3JtYWxcbiAgICogZmluaXNoIHBhdGggYW5kIHNlc3Npb25zIHRoYXQgaGFuZCBvdmVyIHRvIHZpc2l0bGVzcyBob3VzZWtlZXBpbmcgKHNlZVxuICAgKiBOYXZpZ2F0aW9uQ29udGV4dC5yZWNvcmRWaXNpdCkuXG4gICAqL1xuICBwcml2YXRlIHJlY29yZEZpbmlzaGVkVmlzaXQodmlzaXQ6IFZpc2l0KSB7XG4gICAgdGhpcy5wbGFjZUhpc3Rvcnkubm90aWZ5TmF2aWdhdGlvbkZpbmlzaGVkKHZpc2l0KTtcbiAgICAvLyBXZSB1cGRhdGUgdGhlIGFjdGl2ZSB2aXNpdHMgYmVmb3JlIHdlIGZpbmlzaCB0aGUgc2Vzc2lvbiBzbyB0aGVcbiAgICAvLyBwbGFjZSBvdXRsZXRzIGNhbiBpZ25vcmUgdGhlIGluY29taW5nIGNoYW5nZXMgdW50aWwgdGhpbmdzIGFyZSBzZXR0bGVkLlxuICAgIHRoaXMuX2FjdGl2ZVZpc2l0JC52YWx1ZSA9IHZpc2l0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgYGZ1bmNgIHdoZW4gdGhlIE5FWFQgbmF2aWdhdGlvbiBzZXNzaW9uIGZpbmlzaGVzIOKAlCB3aGljaCBtYXkgYmUgYSBzZXNzaW9uIHRoYXQgaGFzbid0XG4gICAqIHN0YXJ0ZWQgeWV0ICh0aGUgaW50ZXJhY3Rpb24taWQgc3luYyByZWdpc3RlcnMgaXRzIGNvbXBsZXRpb24gam9iIGJlZm9yZSBzdGFydGluZyB0aGUgc3luY1xuICAgKiBzZXNzaW9uLCBhbmQgam9icyByZWdpc3RlcmVkIHdoaWxlIGEgZHJhaW4gaXMgcnVubmluZyBiZWxvbmcgdG8gdGhlIGZvbGxvd2luZyBzZXNzaW9uKS5cbiAgICovXG4gIHByaXZhdGUgcnVuQWZ0ZXJSb3V0aW5nU2Vzc2lvbkZpbmlzaGVzKGZ1bmM6ICgpID0+IHZvaWQpIHtcbiAgICB0aGlzLnNlc3Npb25GaW5pc2hlZEpvYnMucHVzaChmdW5jKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTeW5jJ3MgdGhlIGN1cnJlbnQgaW50ZXJhY3Rpb24gc3RhdGUgd2l0aCB0aGUgVVJMLiAgV2UgbmVlZCB0byBwdXNoIHNvbWV0aGluZyBpbiB0aGUgVVJMIGluIG9yZGVyXG4gICAqIHRvIGJlIGFibGUgdG8gY2FwdHVyZSB0aGUgYmFjayBidXR0b24gb24gdGhlIGZpcnN0IHBhZ2UuICBJZiB3ZSBkb24ndCB0aGVuIHRoZSBiYWNrIGNsaWNrIHdpbGwgZXhpdFxuICAgKiB0aGUgYXBwIGRpcmVjdGx5IGFuZCB3ZSBkb24ndCBnZXQgdG8gYXNrLlxuICAgKi9cbiAgLy8gQFRyYWNlKClcbiAgc3luY0ludGVyYWN0aW9uQ29udGV4dElkc1dpdGhSb3V0ZXIoXG4gICAgb25TeW5jQ29tcGxldGU6ICgpID0+IHZvaWQgPSAoKSA9PiB7XG4gICAgICAvLyBub29wXG4gICAgfVxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5uYXZpZ2F0aW9uU2Vzc2lvbikge1xuICAgICAgLy8gY29uc29sZS5sb2coYE5hdmlnYXRpb24gYWN0aXZlIC0+ICR7dGhpcy5uYXZpZ2F0aW9uU2Vzc2lvbi50b1N0cmluZygpfSwgc3luYyBkZWxheWVkIHVudGlsIGZpbmlzaGVkLmApO1xuICAgICAgLy8gY29uc3Qgc2Vzc2lvbiA9IHRoaXMubmF2aWdhdGlvblNlc3Npb247XG4gICAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcbiAgICAgICAgY29uc3Qgc3RhcnRTeW5jV2hlbklkbGUgPSAoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMubmF2aWdhdGlvblNlc3Npb24pIHtcbiAgICAgICAgICAgIC8vIEEgam9iIGRyYWluZWQgYmVmb3JlIHVzIChlLmcuIGEgcXVldWVkIG5hdmlnYXRpb24pIGFscmVhZHkgc3RhcnRlZCBhIG5ldyBzZXNzaW9uO1xuICAgICAgICAgICAgLy8gdHJhbnNpdGlvbmluZyBub3cgd291bGQgZGlzcG9zZSBpdCBtaWQtZmxpZ2h0LiBSZS1kZWZlciB1bnRpbCB0aGF0IG9uZSBmaW5pc2hlcy5cbiAgICAgICAgICAgIHRoaXMucnVuQWZ0ZXJSb3V0aW5nU2Vzc2lvbkZpbmlzaGVzKHN0YXJ0U3luY1doZW5JZGxlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5ydW5BZnRlclJvdXRpbmdTZXNzaW9uRmluaXNoZXMoKCkgPT4ge1xuICAgICAgICAgICAgb25TeW5jQ29tcGxldGUoKTtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjb25zdCBzeW5jU2Vzc2lvbiA9IG5ldyBTeW5jaHJvbmlzZUludGVyYWN0aW9uQ29udGV4dElkc1dpdGhSb3V0ZShcbiAgICAgICAgICAgIHRoaXMubmF2aWdhdGlvbkNvbnRleHQsXG4gICAgICAgICAgICB0aGlzLnVybFNlcnZpY2UuZ2V0Q3VycmVudFJvdXRlclVybCgpLFxuICAgICAgICAgICAgZmFsc2VcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMudHJhbnNpdGlvblRvKHN5bmNTZXNzaW9uKTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5ydW5BZnRlclJvdXRpbmdTZXNzaW9uRmluaXNoZXMoc3RhcnRTeW5jV2hlbklkbGUpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhgTm8gbmF2aWdhdGlvbiBpbiBwcm9ncmVzcywgc3RhcnRpbmcgc3luY2hyb25pc2F0aW9uIGpvYmApO1xuICAgICAgICB0aGlzLnJ1bkFmdGVyUm91dGluZ1Nlc3Npb25GaW5pc2hlcygoKSA9PiB7XG4gICAgICAgICAgb25TeW5jQ29tcGxldGUoKTtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBzZXNzaW9uID0gbmV3IFN5bmNocm9uaXNlSW50ZXJhY3Rpb25Db250ZXh0SWRzV2l0aFJvdXRlKFxuICAgICAgICAgIHRoaXMubmF2aWdhdGlvbkNvbnRleHQsXG4gICAgICAgICAgdGhpcy51cmxTZXJ2aWNlLmdldEN1cnJlbnRSb3V0ZXJVcmwoKSxcbiAgICAgICAgICBmYWxzZVxuICAgICAgICApO1xuICAgICAgICB0aGlzLnRyYW5zaXRpb25UbyhzZXNzaW9uKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdG9WaXNpdChcbiAgICB2aXNpdE9yUGxhY2VDb21wb25lbnQ6IFZpc2l0IHwgQ29uc3RydWN0YWJsZTxQbGFjZUNvbXBvbmVudD4sXG4gICAgcGFyYW1zPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgKSB7XG4gICAgaWYgKHZpc2l0T3JQbGFjZUNvbXBvbmVudCBpbnN0YW5jZW9mIFZpc2l0KSB7XG4gICAgICByZXR1cm4gdmlzaXRPclBsYWNlQ29tcG9uZW50O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gVmlzaXQuZ290byh2aXNpdE9yUGxhY2VDb21wb25lbnQsIHBhcmFtcyk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgUGxhY2VSb3V0ZXIge1xuXG4gIGV4cG9ydCBpbnRlcmZhY2UgUmVkaXJlY3Rpb25zIHtcbiAgICAvKipcbiAgICAgKiBOT1RFOiBmb3Igbm93IHRoaXMgb25seSBzdXBwb3J0cyB0b3AgbGV2ZWwgcGxhY2VzLiAgU3VwcG9ydCBmb3IgY2hpbGQgcGxhY2VzIHdpbGwgcmVxdWlyZSBhIG1vcmUgZnVuZGFtZW50YWxcbiAgICAgKiBjaGFuZ2UgdG8gdmlzaXRzIHRvIHN1cHBvcnQgbmVzdGluZ1xuICAgICAqL1xuICAgIG9uQXV0aGVudGljYXRpb25GYWlsdXJlKGFjdGl2YXRlZFJvdXRlPzogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgc3RhdGU/OiBSb3V0ZXJTdGF0ZVNuYXBzaG90KTogVmlzaXQgfCBDb25zdHJ1Y3RhYmxlPFBsYWNlQ29tcG9uZW50PjtcblxuICAgIC8qKlxuICAgICAqIE5PVEU6IGZvciBub3cgdGhpcyBvbmx5IHN1cHBvcnRzIHRvcCBsZXZlbCBwbGFjZXMuICBTdXBwb3J0IGZvciBjaGlsZCBwbGFjZXMgd2lsbCByZXF1aXJlIGEgbW9yZSBmdW5kYW1lbnRhbFxuICAgICAqIGNoYW5nZSB0byB2aXNpdHMgdG8gc3VwcG9ydCBuZXN0aW5nXG4gICAgICogQHBhcmFtIGNvbXBvbmVudFxuICAgICAqL1xuICAgIG9uQXV0aG9yaXNhdGlvbkZhaWx1cmUoY29tcG9uZW50OiBDb25zdHJ1Y3RhYmxlPFBsYWNlQ29tcG9uZW50Pik6IChDb25zdHJ1Y3RhYmxlPFBsYWNlQ29tcG9uZW50PiB8IFZpc2l0KVtdO1xuICB9XG59XG4iXX0=
468
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhY2Utcm91dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXVpLXBvd2VydXBzL3NyYy9saWIvcGxhY2UvcGxhY2Utcm91dGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFFTCxnQkFBZ0IsRUFDaEIsYUFBYSxFQUNiLGVBQWUsRUFFZixlQUFlLEVBQ2YsTUFBTSxFQUVQLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQUUsb0JBQW9CLEVBQ2xDLEdBQUcsRUFDSCxnQkFBZ0IsRUFFaEIsTUFBTSxFQUNOLGlCQUFpQixFQUNqQixvQkFBb0IsRUFLckIsTUFBTSxnQkFBZ0IsQ0FBQztBQUl4QixPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSw2Q0FBNkMsQ0FBQztBQUMvRSxPQUFPLEVBQUMsMkJBQTJCLEVBQUMsTUFBTSxpRUFBaUUsQ0FBQztBQUM1RyxPQUFPLEVBQUMsbUNBQW1DLEVBQUMsTUFBTSwyRUFBMkUsQ0FBQztBQUM5SCxPQUFPLEVBQUMseUNBQXlDLEVBQUMsTUFBTSxrRkFBa0YsQ0FBQztBQUMzSSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0saUNBQWlDLENBQUM7QUFDM0QsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0seUNBQXlDLENBQUM7QUFFMUUsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sMkNBQTJDLENBQUM7QUFDN0UsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFFdEQsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDcEQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixD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WUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzdCLENBQUMsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBRU8sT0FBTyxDQUNiLHFCQUE0RCxFQUM1RCxNQUFnQztRQUVoQyxJQUFJLHFCQUFxQixZQUFZLEtBQUssRUFBRTtZQUMxQyxPQUFPLHFCQUFxQixDQUFDO1NBQzlCO2FBQU07WUFDTCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsTUFBTSxDQUFDLENBQUM7U0FDbEQ7SUFDSCxDQUFDO3VHQTVqQlUsV0FBVzsyR0FBWCxXQUFXLGNBRlYsTUFBTTs7MkZBRVAsV0FBVztrQkFIdkIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0xvY2F0aW9ufSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XG5pbXBvcnQge0luamVjdGFibGV9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQge1xuICBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LFxuICBOYXZpZ2F0aW9uQ2FuY2VsLFxuICBOYXZpZ2F0aW9uRW5kLFxuICBOYXZpZ2F0aW9uRXJyb3IsXG4gIE5hdmlnYXRpb25FeHRyYXMsXG4gIE5hdmlnYXRpb25TdGFydCxcbiAgUm91dGVyLFxuICBSb3V0ZXJTdGF0ZVNuYXBzaG90XG59IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcbmltcG9ydCB7XG4gIGFzc2VydCxcbiAgRGVidWdDb250ZXh0LCBEZWxlZ2F0aW5nVmFsdWVNb2RlbCwgRGlzcG9zYWJsZSwgRGlzcG9zZWRXaXRoLFxuICBEc2wsXG4gIEdhcmJhZ2VDb2xsZWN0b3IsXG4gIExpc3RNb2RlbCxcbiAgTG9nZ2VyLFxuICBNdXRhYmxlVmFsdWVNb2RlbCxcbiAgU2luZ2xlU2VsZWN0aW9uTW9kZWwsXG4gIFRyYW5zYWN0aW9uLFxuICBUcmFuc2FjdGlvbk9ic2VydmVyLFxuICBWYWx1ZU1vZGVsLFxuICBWYWx1ZU1vZGVsQ2hhaW5cbn0gZnJvbSAnQGNvb2xvbi9wZWN0aW4nO1xuaW1wb3J0IHtDb25zdHJ1Y3RhYmxlfSBmcm9tIFwiQGNvb2xvbi90eXBlc2NyaXB0LXV0aWxpdGllc1wiO1xuaW1wb3J0IHR5cGUge0Rpc3Bvc2FibGVDb21wb25lbnR9IGZyb20gJy4uL2NvbXBvbmVudHMvZGlzcG9zYWJsZS1jb21wb25lbnQnO1xuaW1wb3J0IHR5cGUge0ludGVyYWN0aW9uU2VydmljZVJvdXRpbmdBZGFwdGVyfSBmcm9tIFwiLi4vaW50ZXJhY3Rpb24vc2VydmljZXMvaW50ZXJhY3Rpb24tc2VydmljZS1yb3V0aW5nLWFkYXB0ZXJcIjtcbmltcG9ydCB7SW50ZXJhY3Rpb25TZXJ2aWNlfSBmcm9tIFwiLi4vaW50ZXJhY3Rpb24vc2VydmljZXMvaW50ZXJhY3Rpb24uc2VydmljZVwiO1xuaW1wb3J0IHtOYXZpZ2F0aW5nRHVyaW5nSW50ZXJhY3Rpb259IGZyb20gXCIuL25hdmlnYXRpb24vc2Vzc2lvbi9pbnRlcmFjdGlvbnMvbmF2aWdhdGluZy1kdXJpbmctaW50ZXJhY3Rpb25cIjtcbmltcG9ydCB7UG9wU3RhdGVEdXJpbmdJbnRlcmFjdGlvbk5hdmlnYXRpb259IGZyb20gXCIuL25hdmlnYXRpb24vc2Vzc2lvbi9pbnRlcmFjdGlvbnMvcG9wLXN0YXRlLWR1cmluZy1pbnRlcmFjdGlvbi1uYXZpZ2F0aW9uXCI7XG5pbXBvcnQge1N5bmNocm9uaXNlSW50ZXJhY3Rpb25Db250ZXh0SWRzV2l0aFJvdXRlfSBmcm9tIFwiLi9uYXZpZ2F0aW9uL3Nlc3Npb24vaW50ZXJhY3Rpb25zL3N5bmNocm9uaXNlLWludGVyYWN0aW9uLWNvbnRleHQtaWRzLXdpdGgtcm91dGVcIjtcbmltcG9ydCB7TmF2aWdhdGluZ30gZnJvbSBcIi4vbmF2aWdhdGlvbi9zZXNzaW9uL25hdmlnYXRpbmdcIjtcbmltcG9ydCB7TmF2aWdhdGlvbkNvbnRleHR9IGZyb20gXCIuL25hdmlnYXRpb24vc2Vzc2lvbi9uYXZpZ2F0aW9uLWNvbnRleHRcIjtcbmltcG9ydCB0eXBlIHtOYXZpZ2F0aW9uU2Vzc2lvbn0gZnJvbSBcIi4vbmF2aWdhdGlvbi9zZXNzaW9uL25hdmlnYXRpb24tc2Vzc2lvblwiO1xuaW1wb3J0IHtQb3BTdGF0ZU5hdmlnYXRpb259IGZyb20gXCIuL25hdmlnYXRpb24vc2Vzc2lvbi9wb3Atc3RhdGUtbmF2aWdhdGlvblwiO1xuaW1wb3J0IHtQbGFjZUF1dGhTZXJ2aWNlfSBmcm9tIFwiLi9wbGFjZS1hdXRoLXNlcnZpY2VcIjtcbmltcG9ydCB0eXBlIHtQbGFjZUNvbXBvbmVudH0gZnJvbSBcIi4vcGxhY2UtY29tcG9uZW50XCI7XG5pbXBvcnQge2dldFBsYWNlRGVmaW5pdGlvbn0gZnJvbSBcIi4vcGxhY2UtbWV0YWRhdGFcIjtcbmltcG9ydCB7UGxhY2VIaXN0b3J5fSBmcm9tIFwiLi9wbGFjZS1oaXN0b3J5XCI7XG5pbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuL3VybC1zZXJ2aWNlXCI7XG5pbXBvcnQgdHlwZSB7VXJsU25hcHNob3R9IGZyb20gXCIuL3VybC1zbmFwc2hvdFwiO1xuaW1wb3J0IHtWaXNpdH0gZnJvbSBcIi4vdmlzaXRcIjtcbmltcG9ydCB0eXBlIHtWaXNpdFNlZ21lbnR9IGZyb20gXCIuL3Zpc2l0LXNlZ21lbnRcIjtcblxuLy8gZnVuY3Rpb24gYXNBcnJheTxUPihpdGVtOiBUIHwgVFtdKTogVFtdIHtcbi8vICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoaXRlbSkgPyBpdGVtIDogW2l0ZW1dO1xuLy8gfVxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgUGxhY2VSb3V0ZXIgZXh0ZW5kcyBHYXJiYWdlQ29sbGVjdG9yIHtcbiAgcmVhZG9ubHkgbmF2aWdhdGlvblNlc3Npb24kID0gbmV3IE11dGFibGVWYWx1ZU1vZGVsPE5hdmlnYXRpb25TZXNzaW9uPigpO1xuICByZWFkb25seSBuYXZpZ2F0aW9uSW5Qcm9ncmVzcyQ6IFZhbHVlTW9kZWxDaGFpbjxib29sZWFuPjtcbiAgcmVhZG9ubHkgbmF2aWdhdGlvblNlc3Npb25OYW1lJDogVmFsdWVNb2RlbENoYWluPHN0cmluZz47IC8vIHVzZWQgYnkgdGVzdHNcbiAgcmVhZG9ubHkgaW50ZXJhY3Rpb25TeW5jSW5Qcm9ncmVzcyQ6IFZhbHVlTW9kZWw8Ym9vbGVhbj47XG5cbiAgcHJpdmF0ZSByZWFkb25seSBuYXZpZ2F0aW9uQ29udGV4dDogTmF2aWdhdGlvbkNvbnRleHQuSW1wbDtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9hY3RpdmVWaXNpdCQgPSBuZXcgTXV0YWJsZVZhbHVlTW9kZWw8VmlzaXQ+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgcm91dGVySW50ZXJhY3Rpb25BZGFwdGVyOiBJbnRlcmFjdGlvblNlcnZpY2VSb3V0aW5nQWRhcHRlcjtcbiAgcHJpdmF0ZSBzZXNzaW9uRmluaXNoZWRKb2JzOiAoKCkgPT4gdm9pZClbXSA9IFtdO1xuXG4gIC8vIFByZWRpY2F0ZXMgdGhhdCwgZ2l2ZW4gdGhlIG9yaWdpbmF0aW5nIGNoYW5nZSdzIHRyYW5zYWN0aW9uIG1ldGFkYXRhLCBkZWNpZGUgYW4gaW4tcGxhY2VcbiAgLy8gcGFyYW1ldGVyIGNoYW5nZSBzaG91bGQgcmVwbGFjZSByYXRoZXIgdGhhbiBwdXNoIGEgaGlzdG9yeSBlbnRyeS4gVGhlIHJvdXRlciBpdHNlbGYgc3RheXNcbiAgLy8gYWdub3N0aWMgYWJvdXQgd2hhdCB0aGUgbWV0YWRhdGEgbWVhbnMgLSBwcm9kdWNlcnMgKGUuZy4gU2luZ2xlU2VsZWN0aW9uTW9kZWwgY29ycmVjdGlvbnMpIHRhZ1xuICAvLyB0aGUgdHJhbnNhY3Rpb24gYW5kIHJlZ2lzdGVyIGEgcHJlZGljYXRlIGhlcmUuIFNlZSBza2lwSGlzdG9yeUlmIC8gbm90aWZ5VmlzaXRTZWdtZW50Q2hhbmdlZC5cbiAgcHJpdmF0ZSByZWFkb25seSBza2lwSGlzdG9yeVByZWRpY2F0ZXM6IEFycmF5PChtZXRhZGF0YTogVHJhbnNhY3Rpb24uTWV0YURhdGEpID0+IGJvb2xlYW4+ID0gW107XG5cbiAgLy8gQSBuYXZpZ2F0aW9uIHRyaWdnZXJlZCB3aGlsZSBhbiBpbnRlcnJ1cHRpYmxlIHNlc3Npb24gaXMgaW4gZmxpZ2h0IGlzIHBhcmtlZCBoZXJlIGFuZCBydW4gd2hlblxuICAvLyB0aGF0IHNlc3Npb24gZmluaXNoZXMuIE9ubHkgdGhlIG1vc3QgcmVjZW50IHBlbmRpbmcgbmF2aWdhdGlvbiBpcyByZXRhaW5lZCAoY29hbGVzY2luZykuXG4gIHByaXZhdGUgcGVuZGluZ05hdmlnYXRpb24/OiB7XG4gICAgcmVhZG9ubHkgdmlzaXQ6IFZpc2l0O1xuICAgIHJlYWRvbmx5IHJ1bk5hdmlnYXRpb25Db21tYW5kczogKHJvdXRlcjogUm91dGVyKSA9PiB1bmtub3duO1xuICAgIHJlYWRvbmx5IHJlc29sdmU6ICgpID0+IHZvaWQ7XG4gICAgcmVhZG9ubHkgcmVqZWN0OiAocmVhc29uPzogdW5rbm93bikgPT4gdm9pZDtcbiAgfTtcbiAgcHJpdmF0ZSBxdWV1ZWROYXZpZ2F0aW9uRGVwdGggPSAwO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBNQVhfUVVFVUVEX05BVklHQVRJT05fREVQVEggPSA1O1xuXG4gIHJlYWRvbmx5IGF1dGhTZXJ2aWNlID0gbmV3IFBsYWNlQXV0aFNlcnZpY2UoKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkeSQgPSB0aGlzLnJlZ2lzdGVyRGlzcG9zYWJsZShcbiAgICBuZXcgRGVsZWdhdGluZ1ZhbHVlTW9kZWw8Ym9vbGVhbj4oKS53aXRoRGVmYXVsdCh0cnVlKVxuICApO1xuICByZWFkb25seSByZWFkeSQgPSB0aGlzLl9yZWFkeSQucmVhZG9ubHkkO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgYW5ndWxhclJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgYW5ndWxhckxvY2F0aW9uOiBMb2NhdGlvbixcbiAgICBwcml2YXRlIHJlYWRvbmx5IGludGVyYWN0aW9uU2VydmljZTogSW50ZXJhY3Rpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdXJsU2VydmljZTogVXJsU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBsYWNlSGlzdG9yeTogUGxhY2VIaXN0b3J5XG4gICkge1xuICAgIHN1cGVyKCk7XG5cbiAgICBpZiAod2luZG93WydDeXByZXNzJ10pIHtcbiAgICAgIHdpbmRvd1snYXVwLlBsYWNlUm91dGVyJ10gPSB0aGlzO1xuICAgIH1cblxuICAgIHRoaXMucm91dGVySW50ZXJhY3Rpb25BZGFwdGVyID1cbiAgICAgIGludGVyYWN0aW9uU2VydmljZS5yZWdpc3RlclBsYWNlUm91dGVyKHRoaXMpO1xuXG4gICAgLy8gVE9ETzogTWFrZSB0aGlzIGFuIGludGVyZmFjZSBhbmQgdXNlICd0aGlzJyBpbnN0ZWFkLlxuICAgIHRoaXMubmF2aWdhdGlvbkNvbnRleHQgPSBuZXcgTmF2aWdhdGlvbkNvbnRleHQuSW1wbChcbiAgICAgIHRoaXMudXJsU2VydmljZSxcbiAgICAgIHRoaXMucm91dGVySW50ZXJhY3Rpb25BZGFwdGVyLFxuICAgICAgKHVybFNuYXBzaG90OiBVcmxTbmFwc2hvdCwgb3B0aW9uczogeyByZXBsYWNlVXJsOiBib29sZWFuIH0pID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF2aWdhdGVCeVVybCh1cmxTbmFwc2hvdCwgb3B0aW9ucyk7XG4gICAgICB9LFxuICAgICAgKHN0YXRlKSA9PiB7XG4gICAgICAgIHRoaXMudHJhbnNpdGlvblRvKHN0YXRlKTtcbiAgICAgIH0sXG4gICAgICAoc2VnbWVudHMpID0+IHtcbiAgICAgICAgdGhpcy5yb3V0aW5nU2Vzc2lvbkZpbmlzaGVkKHNlZ21lbnRzKTtcbiAgICAgIH0sXG4gICAgICAodmlzaXQpID0+IHtcbiAgICAgICAgdGhpcy5yZWNvcmRGaW5pc2hlZFZpc2l0KHZpc2l0KTtcbiAgICAgIH0sXG4gICAgICAoKSA9PiB0aGlzLmFjdGl2ZVZpc2l0JC52YWx1ZVxuICAgICk7XG5cbiAgICBjb25zdCB7IGNoYWluIH0gPSBEc2wuZGlzcG9zZVdpdGgodGhpcyk7XG4gICAgdGhpcy5uYXZpZ2F0aW9uSW5Qcm9ncmVzcyQgPSBjaGFpbih0aGlzLm5hdmlnYXRpb25TZXNzaW9uJCkuaXNOb3ROaWwoKTtcbiAgICB0aGlzLmludGVyYWN0aW9uU3luY0luUHJvZ3Jlc3MkID0gY2hhaW4odGhpcy5uYXZpZ2F0aW9uU2Vzc2lvbiQpXG4gICAgICAucGx1Y2soJ2lzSW50ZXJhY3Rpb25TeW5jJylcbiAgICAgIC5vdGhlcndpc2UoZmFsc2UpO1xuXG4gICAgY29uc3QgaWRsZVN0YXRlTmFtZSA9IGNoYWluKHRoaXMuaW50ZXJhY3Rpb25TZXJ2aWNlLmFjdGl2ZSkubWFwKChhY3RpdmUpID0+XG4gICAgICBhY3RpdmUgPyAnSWRsZUR1cmluZ0ludGVyYWN0aW9uJyA6ICdJZGxlJ1xuICAgICk7XG4gICAgdGhpcy5uYXZpZ2F0aW9uU2Vzc2lvbk5hbWUkID0gY2hhaW4odGhpcy5uYXZpZ2F0aW9uU2Vzc2lvbiQpXG4gICAgICAucGx1Y2soJ25hbWUnKVxuICAgICAgLm90aGVyd2lzZShpZGxlU3RhdGVOYW1lKTtcblxuICAgIERlYnVnQ29udGV4dC50YWcodGhpcy5fYWN0aXZlVmlzaXQkLCAnUGxhY2VSb3V0ZXIuYWN0aXZlVmlzaXQnKTtcblxuICAgIC8vIFRPRE86IG1ha2Ugc2V0dXAgdGhlIGNhbGxiYWNrcyBpbiBkdXJpbmcgbW9kdWxlIGluaXRpYXRpb24gdG8gbWFrZSB0aGlzIHRlc3RhYmxlLlxuICAgIGFuZ3VsYXJSb3V0ZXIuZXZlbnRzLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgIC8vIFJvdXRpbmcgZXZlbnQgc2VxdWVuY2VcbiAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT1cbiAgICAgIC8vIE5hdmlnYXRpb25TdGFydCAtPiAuLi4uIC0+IE5hdmlnYXRpb25DYW5jZWwgLS0+IHJlZGlyZWN0LCBnbyBhcm91bmQgYWdhaW4gaW4gdGhlIHNhbWUgc2Vzc2lvblxuICAgICAgLy8gTmF2aWdhdGlvblN0YXJ0IC0+IC4uLi4gLT4gTmF2aWdhdGlvbkVuZCAtLT4gbmF2aWdhdGlvbiBjb21wbGV0ZSwgZW5kIHNlc3Npb24uXG4gICAgICAvLyBOYXZpZ2F0aW9uU3RhcnQgLT4gLi4uLiAtPiBOYXZpZ2F0aW9uRXJyb3IgLS0+IG5hdmlnYXRpb24gYWJvcnRlZCwgZW5kIHNlc3Npb24uXG4gICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PVxuICAgICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvblN0YXJ0KSB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGAtLS0+IE5hdmlnYXRpb25TdGFydFske2V2ZW50LmlkfV06ICR7ZXZlbnQudXJsfSAoJHtldmVudC5uYXZpZ2F0aW9uVHJpZ2dlcn0pYCk7XG4gICAgICAgIGlmIChldmVudC5uYXZpZ2F0aW9uVHJpZ2dlciA9PT0gJ3BvcHN0YXRlJykge1xuICAgICAgICAgIHRoaXMub25Qb3BTdGF0ZShldmVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5vblJvdXRlclN0YXJ0ZWQoZXZlbnQpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGA8LS0tIE5hdmlnYXRpb25TdGFydFske2V2ZW50LmlkfV06ICR7ZXZlbnQudXJsfSAoJHtldmVudC5uYXZpZ2F0aW9uVHJpZ2dlcn0pYCk7XG4gICAgICB9XG4gICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kKSB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGAtLS0+IE5hdmlnYXRpb25FbmRbJHtldmVudC5pZH1dOiAke2V2ZW50LnVybH1gKTtcbiAgICAgICAgdGhpcy5vblJvdXRlckVuZChldmVudCk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGA8LS0tIE5hdmlnYXRpb25FbmRbJHtldmVudC5pZH1dOiAke2V2ZW50LnVybH1gKTtcbiAgICAgIH1cbiAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FcnJvcikge1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhgLS0tPiBOYXZpZ2F0aW9uRXJyb3JbJHtldmVudC5pZH1dOiAke2V2ZW50LnVybH1gKTtcbiAgICAgICAgdGhpcy5vblJvdXRlckVycm9yKGV2ZW50KTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coYDwtLS0gTmF2aWdhdGlvbkVycm9yWyR7ZXZlbnQuaWR9XTogJHtldmVudC51cmx9YCk7XG4gICAgICB9XG4gICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uQ2FuY2VsKSB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGAtLS0+IE5hdmlnYXRpb25DYW5jZWxbJHtldmVudC5pZH1dOiAke2V2ZW50LnVybH1gKTtcbiAgICAgICAgdGhpcy5vblJvdXRlckNhbmNlbGxlZChldmVudCk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGA8LS0tIE5hdmlnYXRpb25DYW5jZWxbJHtldmVudC5pZH1dOiAke2V2ZW50LnVybH1gKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIFRoZSByb3V0ZXIgbmVlZHMgdG8ga25vdyBhYm91dCB1cmwgY2hhbmdlcyBhbmQgaW4gc29tZSBjYXNlcyB0aGV5IGFyZSB0aGUgb25seSB3YXkgdGhlIHJvdXRlciBjYW4ga25vdyBpZlxuICAgIC8vIHRoZSBiYWNrIGJ1dHRvbiB3YXMgY2xpY2tlZC5cbiAgICBhbmd1bGFyTG9jYXRpb24ub25VcmxDaGFuZ2UoKHVybCkgPT4gdGhpcy5vblVybENoYW5nZWQodXJsKSk7XG5cbiAgICAvLyBBdXRvbWF0aWMgc2VsZWN0aW9uIGNvcnJlY3Rpb25zIChhdXRvLXNlbGVjdC1maXJzdCAvIHNlbGVjdC1uZWFyZXN0KSB0YWcgdGhlaXIgdHJhbnNhY3Rpb24gc29cbiAgICAvLyB0aGV5IHJlZmluZSB0aGUgVVJMIGluIHBsYWNlIHJhdGhlciB0aGFuIGFjY3J1aW5nIGJhY2stc3RhY2sgZW50cmllcy4gQSBkZWxpYmVyYXRlIHVzZXJcbiAgICAvLyBzZWxlY3QoKSBpcyB1bnRhZ2dlZCBhbmQgdGhlcmVmb3JlIHB1c2hlcyBhIGhpc3RvcnkgZW50cnkuXG4gICAgdGhpcy5za2lwSGlzdG9yeUlmKChtZXRhZGF0YSkgPT4gbWV0YWRhdGEuZ2V0KFNpbmdsZVNlbGVjdGlvbk1vZGVsLkFVVE9fQ09SUkVDVElPTikgPT09IHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIGEgcHJlZGljYXRlIHRoYXQgZGVjaWRlcywgZnJvbSB0aGUgb3JpZ2luYXRpbmcgY2hhbmdlJ3MgdHJhbnNhY3Rpb24gbWV0YWRhdGEsIHdoZXRoZXIgYW5cbiAgICogaW4tcGxhY2UgdmlzaXQtcGFyYW1ldGVyIGNoYW5nZSBzaG91bGQgcmVwbGFjZSB0aGUgY3VycmVudCBoaXN0b3J5IGVudHJ5IGluc3RlYWQgb2YgcHVzaGluZyBhIG5ld1xuICAgKiBvbmUuIFVzZSB0aGlzIHRvIHN1cHByZXNzIGhpc3RvcnkgZm9yIHByb2dyYW1tYXRpYy9hdXRvbWF0aWMgY2hhbmdlcyB3aGlsZSBsZWF2aW5nIGRlbGliZXJhdGVcbiAgICogdXNlciBuYXZpZ2F0aW9ucyBhcyBwdXNoZXMuIFJldHVybnMgYSB7QGxpbmsgRGlzcG9zYWJsZX0gdGhhdCByZW1vdmVzIHRoZSBwcmVkaWNhdGUuXG4gICAqL1xuICBza2lwSGlzdG9yeUlmKHByZWRpY2F0ZTogKG1ldGFkYXRhOiBUcmFuc2FjdGlvbi5NZXRhRGF0YSkgPT4gYm9vbGVhbik6IERpc3Bvc2FibGUge1xuICAgIHRoaXMuc2tpcEhpc3RvcnlQcmVkaWNhdGVzLnB1c2gocHJlZGljYXRlKTtcbiAgICByZXR1cm4ge1xuICAgICAgZGlzcG9zZTogKCkgPT4ge1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuc2tpcEhpc3RvcnlQcmVkaWNhdGVzLmluZGV4T2YocHJlZGljYXRlKTtcbiAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICB0aGlzLnNraXBIaXN0b3J5UHJlZGljYXRlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgc2hvdWxkUmVwbGFjZUhpc3RvcnkobWV0YWRhdGE/OiBUcmFuc2FjdGlvbi5NZXRhRGF0YSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIW1ldGFkYXRhICYmIHRoaXMuc2tpcEhpc3RvcnlQcmVkaWNhdGVzLnNvbWUocHJlZGljYXRlID0+IHByZWRpY2F0ZShtZXRhZGF0YSkpO1xuICB9XG5cbiAgcG9zdHBvbmVSb3V0aW5nVW50aWwoY29uZGl0aW9uJDogVmFsdWVNb2RlbDxib29sZWFuPikge1xuICAgIHRoaXMuX3JlYWR5JC5zZXREZWxlZ2F0ZShjb25kaXRpb24kKTtcbiAgfVxuXG4gIGFzeW5jIGdldEF1dGhlbnRpY2F0aW9uRmFpbHVyZVJlZGlyZWN0KFxuICAgIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LFxuICAgIHN0YXRlOiBSb3V0ZXJTdGF0ZVNuYXBzaG90XG4gICk6IFByb21pc2U8VmlzaXQ+IHtcbiAgICByZXR1cm4gdGhpcy5hdXRoU2VydmljZS5nZXRBdXRoZW50aWNhdGlvbkZhaWx1cmVSZWRpcmVjdChcbiAgICAgIGFjdGl2YXRlZFJvdXRlLFxuICAgICAgc3RhdGVcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgZ2V0QXV0aG9yaXNhdGlvbkZhaWx1cmVSZWRpcmVjdE9wdGlvbnMoXG4gICAgY29tcG9uZW50OiBDb25zdHJ1Y3RhYmxlPFBsYWNlQ29tcG9uZW50PlxuICApOiBQcm9taXNlPFZpc2l0W10+IHtcbiAgICByZXR1cm4gdGhpcy5hdXRoU2VydmljZS5nZXRBdXRob3Jpc2F0aW9uRmFpbHVyZVJlZGlyZWN0T3B0aW9ucyhjb21wb25lbnQpO1xuICB9XG5cbiAgZ2V0IG5hdmlnYXRpb25TZXNzaW9uKCkge1xuICAgIHJldHVybiB0aGlzLm5hdmlnYXRpb25TZXNzaW9uJC52YWx1ZTtcbiAgfVxuXG4gIGdldCBjdXJyZW50U2Vzc2lvbigpIHtcbiAgICByZXR1cm4gdGhpcy5uYXZpZ2F0aW9uU2Vzc2lvbiQudmFsdWU7XG4gIH1cblxuICBpc05hdmlnYXRpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubmF2aWdhdGlvbkluUHJvZ3Jlc3MkLnZhbHVlO1xuICB9XG5cbiAgYXN5bmMgd2FpdFVudGlsUm91dGVyUmVhZHkoKSB7XG4gICAgY29uc3QgeyB3YWl0VW50aWwgfSA9IERzbC5kaXNwb3NlV2l0aCh0aGlzKTtcbiAgICBhd2FpdCB3YWl0VW50aWwodGhpcy5yZWFkeSQpLmJlY29tZXNUcnV0aHkoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGFzeW5jIHdhaXRVbnRpbElkbGUoKTogUHJvbWlzZTx0aGlzPiB7XG4gICAgY29uc3QgeyB3YWl0VW50aWwgfSA9IERzbC5kaXNwb3NlV2l0aCh0aGlzKTtcbiAgICBhd2FpdCB3YWl0VW50aWwodGhpcy5uYXZpZ2F0aW9uSW5Qcm9ncmVzcyQpLmJlY29tZXNGYWxzZXkoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGFzeW5jIHdhaXRBY3Rpdml0aWVzU3luY2hyb25pc2VkKCk6IFByb21pc2U8dGhpcz4ge1xuICAgIGNvbnN0IHsgd2FpdFVudGlsIH0gPSBEc2wuZGlzcG9zZVdpdGgodGhpcyk7XG4gICAgYXdhaXQgd2FpdFVudGlsKHRoaXMuaW50ZXJhY3Rpb25TeW5jSW5Qcm9ncmVzcyQpLmJlY29tZXNGYWxzZXkoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIEBUcmFjZSgpXG4gIG9uUG9wU3RhdGUoZXZlbnQ6IE5hdmlnYXRpb25TdGFydCkge1xuICAgIGFzc2VydC5pc1RydXRoeShldmVudC5uYXZpZ2F0aW9uVHJpZ2dlciA9PT0gJ3BvcHN0YXRlJyk7XG4gICAgaWYgKHRoaXMuY3VycmVudFNlc3Npb24pIHtcbiAgICAgIHRoaXMuY3VycmVudFNlc3Npb24ub25Qb3BTdGF0ZShldmVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHBvcHBlZEhpc3RvcnlVcmwgPSBldmVudC51cmw7XG4gICAgICBjb25zdCBjdXJyZW50Um91dGVyVXJsID0gdGhpcy51cmxTZXJ2aWNlLmdldEN1cnJlbnRSb3V0ZXJVcmwoKTtcbiAgICAgIGNvbnN0IHNlc3Npb24gPSB0aGlzLmludGVyYWN0aW9uU2VydmljZS5pc0FjdGl2ZSgpXG4gICAgICAgID8gbmV3IFBvcFN0YXRlRHVyaW5nSW50ZXJhY3Rpb25OYXZpZ2F0aW9uKFxuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uQ29udGV4dCxcbiAgICAgICAgICAgIGN1cnJlbnRSb3V0ZXJVcmwsXG4gICAgICAgICAgICBwb3BwZWRIaXN0b3J5VXJsXG4gICAgICAgICAgKVxuICAgICAgICA6IG5ldyBQb3BTdGF0ZU5hdmlnYXRpb24oXG4gICAgICAgICAgICB0aGlzLm5hdmlnYXRpb25Db250ZXh0LFxuICAgICAgICAgICAgY3VycmVudFJvdXRlclVybCxcbiAgICAgICAgICAgIHBvcHBlZEhpc3RvcnlVcmxcbiAgICAgICAgICApO1xuICAgICAgdGhpcy50cmFuc2l0aW9uVG8oc2Vzc2lvbik7XG4gICAgfVxuICB9XG5cbiAgLy8gQFRyYWNlKClcbiAgb25Sb3V0ZXJTdGFydGVkKGV2ZW50OiBOYXZpZ2F0aW9uU3RhcnQpIHtcbiAgICBhc3NlcnQuaXNGYWxzZXkoZXZlbnQubmF2aWdhdGlvblRyaWdnZXIgPT09ICdwb3BzdGF0ZScpO1xuICAgIC8vIGNvbnN0IGluSW50ZXJhY3Rpb24gPSB0aGlzLmludGVyYWN0aW9uU2VydmljZS5pc0FjdGl2ZSgpO1xuICAgIGlmICh0aGlzLmN1cnJlbnRTZXNzaW9uKSB7XG4gICAgICB0aGlzLmN1cnJlbnRTZXNzaW9uLm9uUm91dGVyU3RhcnRlZChldmVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudHJhbnNpdGlvblRvKFxuICAgICAgICB0aGlzLmNyZWF0ZU5hdmlnYXRpb25TZXNzaW9uKHRoaXMudXJsU2VydmljZS5nZXRDdXJyZW50Um91dGVyVXJsKCkpXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8vIEBUcmFjZSgpXG4gIG9uVXJsQ2hhbmdlZChuZXdVcmw6IHN0cmluZykge1xuICAgIC8vIHRoZSBiYWNrIGJ1dHRvbiBjYW4gdHJpZ2dlciBhIHVybCBjaGFuZ2Ugd2l0aG91dCBhIG5hdmlnYXRpb24gc2Vzc2lvbiBpbiBwcm9ncmVzcyBzbyB3ZVxuICAgIC8vIGNvbnNvbGUubG9nKGAtLS0+IFVybCBDaGFuZ2VkICR7bmV3VXJsfWApO1xuICAgIGlmICh0aGlzLmN1cnJlbnRTZXNzaW9uKSB7XG4gICAgICB0aGlzLmN1cnJlbnRTZXNzaW9uLm9uVXJsQ2hhbmdlKG5ld1VybCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUubG9nKCdGWUk6IHVybCBjaGFuZ2VkIHdpdGhvdXQgYSBuYXZpZ2F0aW9uIHNlc3Npb24gaW4gcHJvZ3Jlc3MnKTtcbiAgICB9XG4gICAgLy8gY29uc29sZS5sb2coYDwtLS0gVXJsIENoYW5nZWRgKTtcbiAgfVxuXG4gIC8vIEBUcmFjZSgpXG4gIG9uUm91dGVyQ2FuY2VsbGVkKGV2ZW50OiBOYXZpZ2F0aW9uQ2FuY2VsKSB7XG4gICAgdGhpcy5jdXJyZW50U2Vzc2lvbi5vblJvdXRlckNhbmNlbGxlZChldmVudCk7XG4gIH1cblxuICAvLyBAVHJhY2UoKVxuICBvblJvdXRlckVycm9yKGV2ZW50OiBOYXZpZ2F0aW9uRXJyb3IpIHtcbiAgICB0aGlzLmN1cnJlbnRTZXNzaW9uLm9uUm91dGVyRXJyb3IoZXZlbnQpO1xuICB9XG5cbiAgLy8gQFRyYWNlKClcbiAgb25Sb3V0ZXJFbmQoZXZlbnQ6IE5hdmlnYXRpb25FbmQpIHtcbiAgICB0aGlzLmN1cnJlbnRTZXNzaW9uLm9uUm91dGVyRW5kKGV2ZW50KTtcbiAgfVxuXG4gIGFzeW5jIG5hdmlnYXRlKHZpc2l0OiBWaXNpdCk7XG4gIGFzeW5jIG5hdmlnYXRlKFxuICAgIHBsYWNlQ29tcG9uZW50OiBDb25zdHJ1Y3RhYmxlPFBsYWNlQ29tcG9uZW50PixcbiAgICBwYXJhbXM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICApO1xuICBhc3luYyBuYXZpZ2F0ZShcbiAgICB2aXNpdE9yUGxhY2VDb21wb25lbnQ6IFZpc2l0IHwgQ29uc3RydWN0YWJsZTxQbGFjZUNvbXBvbmVudD4sXG4gICAgcGFyYW1zPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgKSB7XG4gICAgY29uc3QgdmlzaXQgPSB0aGlzLnRvVmlzaXQoXG4gICAgICB2aXNpdE9yUGxhY2VDb21wb25lbnQsXG4gICAgICBwYXJhbXNcbiAgICApLmNvcHlXaXRoRGVmYXVsdHNGcm9tKHRoaXMuYWN0aXZlVmlzaXQkLnZhbHVlKTtcbiAgICByZXR1cm4gdGhpcy5kb05hdmlnYXRpb24odmlzaXQsIGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IHRoaXMuYW5ndWxhclJvdXRlci5uYXZpZ2F0ZSh2aXNpdC5nZXRSb3V0ZXJDb21tYW5kcygpKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIEBUcmFjZSgpXG4gIGFzeW5jIGRvTmF2aWdhdGlvbihcbiAgICB2aXNpdDogVmlzaXQsXG4gICAgcnVuTmF2aWdhdGlvbkNvbW1hbmRzOiAocm91dGVyOiBSb3V0ZXIpID0+IHVua25vd25cbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMubmF2aWdhdGlvbkluUHJvZ3Jlc3MkLnZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVPdmVybGFwcGluZ05hdmlnYXRpb24odmlzaXQsIHJ1bk5hdmlnYXRpb25Db21tYW5kcyk7XG4gICAgfVxuICAgIGNvbnN0IG5hdmlnYXRpb24gPSB0aGlzLmNyZWF0ZU5hdmlnYXRpb25TZXNzaW9uKFxuICAgICAgdGhpcy51cmxTZXJ2aWNlLmdldEN1cnJlbnRSb3V0ZXJVcmwoKVxuICAgICk7XG4gICAgbmF2aWdhdGlvbi5pbml0aWFsaXNlVmlzaXRTZWdtZW50cyh2aXNpdCk7XG4gICAgdGhpcy50cmFuc2l0aW9uVG8obmF2aWdhdGlvbik7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHJ1bk5hdmlnYXRpb25Db21tYW5kcyh0aGlzLmFuZ3VsYXJSb3V0ZXIpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICAvLyBDaGVjayBpZiB0aGUgcm91dGVyIGhhcyBmaW5pc2hlZCAoaW4gdGhlIGNhc2Ugd2hlcmUgbm8gcm91dGVyIGNoYW5nZSByZXF1aXJlZCkgYW5kIHdlJ3JlIHN0aWxsIGluICBhXG4gICAgICAvLyB0cmFuc2llbnQgc3RhdGUgYW5kIGZpbmlzaCBvZiB0aGUgdHJhbnNpdGlvbi5cbiAgICAgIGlmICghdGhpcy5hbmd1bGFyUm91dGVyLmdldEN1cnJlbnROYXZpZ2F0aW9uKCkgJiYgdGhpcy5jdXJyZW50U2Vzc2lvbikge1xuICAgICAgICB0aGlzLmN1cnJlbnRTZXNzaW9uLm9uUm91dGVyRW5kKFxuICAgICAgICAgIG5ldyBOYXZpZ2F0aW9uRW5kKC0xLCAnJywgdGhpcy51cmxTZXJ2aWNlLmdldEN1cnJlbnRSb3V0ZXJVcmwoKSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyBhIG5hdmlnYXRpb24gdHJpZ2dlcmVkIHdoaWxlIGFub3RoZXIgaXMgYWxyZWFkeSBpbiBmbGlnaHQ6IHF1ZXVlIGl0IChjb2FsZXNjaW5nIHRvIHRoZVxuICAgKiBsYXRlc3QpIGFuZCBydW4gaXQgb25jZSB0aGUgaW4tZmxpZ2h0IHNlc3Npb24gZmluaXNoZXMuXG4gICAqXG4gICAqIEhpc3Rvcnk6IHRoaXMgdXNlZCB0byB0aHJvdyBgaWxsZWdhbFN0YXRlKCdOYXZpZ2F0aW9uIGFscmVhZHkgaW4gcHJvZ3Jlc3MnKWAgKGtpbGxlZCB0aGVcbiAgICogdHJpZ2dlcmluZyBhY3Rpb24pLCB0aGVuIGRyb3BwZWQgcmVhbC12cy1yZWFsIGNvbGxpc2lvbnMgYXMgYW4gaW50ZXJpbSBwb2xpY3kgcGVuZGluZ1xuICAgKiBwcm9kdWN0aW9uIGV2aWRlbmNlLiBUaGUgZXZpZGVuY2UgYXJyaXZlZDogYSBgbmF2aWdhdGUoKWAgaXNzdWVkIGZyb20gYG9uUGxhY2VSZWFkeWAgb3IgYVxuICAgKiByb3V0ZS1wYXJhbWV0ZXIgc3Vic2NyaXB0aW9uIGNhbiBsYW5kIHdoaWxlIHRoZSBhY3RpdmF0aW5nIG5hdmlnYXRpb24ncyBzZXNzaW9uIGlzIHN0aWxsXG4gICAqIHNldHRsaW5nIOKAlCBkcm9wcGluZyBpdCBsZWF2ZXMgYSBwbGFjZSB0aGF0IG5ldmVyIGZpbmlzaGVzIG5hdmlnYXRpbmcgKGUuZy4gYVxuICAgKiByZWRpcmVjdFRvRmlyc3RDaGlsZC1zdHlsZSBjaGlsZCB0aGF0IG5ldmVyIGFwcGVhcnMpLCBhbmQgdGhlIGNhbGxlciBjYW4ndCB0ZWxsIGJlY2F1c2UgdGhlXG4gICAqIGRyb3BwZWQgcHJvbWlzZSByZXNvbHZlZCBub3JtYWxseS4gUG9wc3RhdGUgbmV2ZXIgZW50ZXJzIGRvTmF2aWdhdGlvbiAoaXQgYXJyaXZlcyB2aWEgcm91dGVyXG4gICAqIGV2ZW50cyAtPiBvblBvcFN0YXRlKSwgc28gcXVldWVpbmcgcHJvZ3JhbW1hdGljIG5hdmlnYXRpb25zIGJlaGluZCBhbiBpbi1mbGlnaHQgc2Vzc2lvblxuICAgKiBwcmVzZXJ2ZXMgdXNlci1pbnRlbnQgb3JkZXJpbmcuXG4gICAqL1xuICBwcml2YXRlIGhhbmRsZU92ZXJsYXBwaW5nTmF2aWdhdGlvbihcbiAgICB2aXNpdDogVmlzaXQsXG4gICAgcnVuTmF2aWdhdGlvbkNvbW1hbmRzOiAocm91dGVyOiBSb3V0ZXIpID0+IHVua25vd25cbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMubmF2aWdhdGlvblNlc3Npb247XG4gICAgY29uc3QgZGVidWcgPSB7XG4gICAgICBpblByb2dyZXNzOiB7XG4gICAgICAgIHNlc3Npb246IGN1cnJlbnQ/Lm5hbWUsXG4gICAgICAgIHN0YXRlOiBjdXJyZW50Py50b1N0cmluZygpLFxuICAgICAgICBpc0ludGVyYWN0aW9uU3luYzogY3VycmVudD8uaXNJbnRlcmFjdGlvblN5bmMsXG4gICAgICAgIGlzSW50ZXJydXB0aWJsZTogY3VycmVudD8uaXNJbnRlcnJ1cHRpYmxlLFxuICAgICAgICBpc1BvcFN0YXRlOiBjdXJyZW50Py5pc1BvcFN0YXRlLFxuICAgICAgICBzZWdtZW50czogY3VycmVudD8uZ2V0VmlzaXRTZWdtZW50cygpLm1hcChzID0+IHMudG9EZWJ1Z1N0cmluZygpKSxcbiAgICAgIH0sXG4gICAgICBpbmNvbWluZzogdmlzaXQ/LnRvRGVidWdTdHJpbmcoKSxcbiAgICAgIGN1cnJlbnRVcmw6IHRoaXMudXJsU2VydmljZS5nZXRDdXJyZW50Um91dGVyVXJsKCksXG4gICAgfTtcblxuICAgIExvZ2dlci5nZXQodGhpcykud2FybihcbiAgICAgIGBOYXZpZ2F0aW9uIHRyaWdnZXJlZCB3aGlsZSBzZXNzaW9uICcke2N1cnJlbnQ/Lm5hbWV9JyBpcyBpbiBwcm9ncmVzczsgYCArXG4gICAgICAgIGBxdWV1ZWluZyB0aGUgaW5jb21pbmcgbmF2aWdhdGlvbiB0byBydW4gb25jZSBpdCBmaW5pc2hlcy5gLFxuICAgICAgZGVidWdcbiAgICApO1xuICAgIHJldHVybiB0aGlzLnF1ZXVlTmF2aWdhdGlvbih2aXNpdCwgcnVuTmF2aWdhdGlvbkNvbW1hbmRzKTtcbiAgfVxuXG4gIHByaXZhdGUgcXVldWVOYXZpZ2F0aW9uKFxuICAgIHZpc2l0OiBWaXNpdCxcbiAgICBydW5OYXZpZ2F0aW9uQ29tbWFuZHM6IChyb3V0ZXI6IFJvdXRlcikgPT4gdW5rbm93blxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBmbHVzaEFscmVhZHlTY2hlZHVsZWQgPSAhIXRoaXMucGVuZGluZ05hdmlnYXRpb247XG4gICAgaWYgKHRoaXMucGVuZGluZ05hdmlnYXRpb24pIHtcbiAgICAgIC8vIENvYWxlc2NlOiBzdXBlcnNlZGUgdGhlIHByZXZpb3VzbHkgcXVldWVkIG5hdmlnYXRpb24gc28gb25seSB0aGUgbW9zdCByZWNlbnQgdGFyZ2V0IHJ1bnMuXG4gICAgICB0aGlzLnBlbmRpbmdOYXZpZ2F0aW9uLnJlc29sdmUoKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMucGVuZGluZ05hdmlnYXRpb24gPSB7IHZpc2l0LCBydW5OYXZpZ2F0aW9uQ29tbWFuZHMsIHJlc29sdmUsIHJlamVjdCB9O1xuICAgICAgaWYgKCFmbHVzaEFscmVhZHlTY2hlZHVsZWQpIHtcbiAgICAgICAgdGhpcy5ydW5BZnRlclJvdXRpbmdTZXNzaW9uRmluaXNoZXMoKCkgPT4gdGhpcy5mbHVzaFBlbmRpbmdOYXZpZ2F0aW9uKCkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBmbHVzaFBlbmRpbmdOYXZpZ2F0aW9uKCk6IHZvaWQge1xuICAgIGNvbnN0IHBlbmRpbmcgPSB0aGlzLnBlbmRpbmdOYXZpZ2F0aW9uO1xuICAgIGlmICghcGVuZGluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnBlbmRpbmdOYXZpZ2F0aW9uID0gdW5kZWZpbmVkO1xuXG4gICAgaWYgKHRoaXMucXVldWVkTmF2aWdhdGlvbkRlcHRoID49IFBsYWNlUm91dGVyLk1BWF9RVUVVRURfTkFWSUdBVElPTl9ERVBUSCkge1xuICAgICAgTG9nZ2VyLmdldCh0aGlzKS53YXJuKFxuICAgICAgICBgRHJvcHBpbmcgcXVldWVkIG5hdmlnYXRpb24gYWZ0ZXIgJHt0aGlzLnF1ZXVlZE5hdmlnYXRpb25EZXB0aH0gY29uc2VjdXRpdmUgZGVmZXJyYWxzIHRvIGAgK1xuICAgICAgICAgIGBhdm9pZCBhIG5hdmlnYXRpb24gbG9vcC5gLFxuICAgICAgICB7IHZpc2l0OiBwZW5kaW5nLnZpc2l0Py50b0RlYnVnU3RyaW5nKCkgfVxuICAgICAgKTtcbiAgICAgIHRoaXMucXVldWVkTmF2aWdhdGlvbkRlcHRoID0gMDtcbiAgICAgIHBlbmRpbmcucmVzb2x2ZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucXVldWVkTmF2aWdhdGlvbkRlcHRoKys7XG4gICAgdGhpcy5kb05hdmlnYXRpb24ocGVuZGluZy52aXNpdCwgcGVuZGluZy5ydW5OYXZpZ2F0aW9uQ29tbWFuZHMpLnRoZW4oXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHRoaXMucXVldWVkTmF2aWdhdGlvbkRlcHRoID0gMDtcbiAgICAgICAgcGVuZGluZy5yZXNvbHZlKCk7XG4gICAgICB9LFxuICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgIHRoaXMucXVldWVkTmF2aWdhdGlvbkRlcHRoID0gMDtcbiAgICAgICAgcGVuZGluZy5yZWplY3QoZXJyb3IpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBuYXZpZ2F0ZUJ5VXJsKFxuICAgIHVybFNuYXBzaG90OiBVcmxTbmFwc2hvdCxcbiAgICBuYXZpZ2F0aW9uRXh0cmFzPzogTmF2aWdhdGlvbkV4dHJhc1xuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAvLyBjb25zb2xlLmxvZyhgIyMjIG5hdmlnYXRpb25CeVVybCAtPiAke3VybFNuYXBzaG90LnVybFRyZWUudG9TdHJpbmcoKX1gKTtcbiAgICByZXR1cm4gdGhpcy5hbmd1bGFyUm91dGVyLm5hdmlnYXRlQnlVcmwoXG4gICAgICB1cmxTbmFwc2hvdC51cmxUcmVlLFxuICAgICAgbmF2aWdhdGlvbkV4dHJhc1xuICAgICk7XG4gIH1cblxuICBnZXQgYWN0aXZlVmlzaXQkKCk6IFZhbHVlTW9kZWw8VmlzaXQ+IHtcbiAgICByZXR1cm4gdGhpcy5fYWN0aXZlVmlzaXQkLnJlYWRvbmx5JDtcbiAgfVxuXG4gIGZpbHRlckF1dGhvcml6ZWRQbGFjZXMocGxhY2VzOiBSZWFkb25seUFycmF5PENvbnN0cnVjdGFibGU8UGxhY2VDb21wb25lbnQ+Piwgb3B0aW9uczogRGlzcG9zZWRXaXRoKTogTGlzdE1vZGVsPENvbnN0cnVjdGFibGU8UGxhY2VDb21wb25lbnQ+PiB7XG4gICAgY29uc3QgeyBjaGFpbiB9ID0gRHNsLmRpc3Bvc2VXaXRoKG9wdGlvbnMuZGlzcG9zZWRXaXRoKTtcbiAgICByZXR1cm4gY2hhaW4odGhpcy5hdXRoU2VydmljZS5hY2Nlc3NHdWFyZCQpLm1hcFRvTGlzdCgoZykgPT5cbiAgICAgIHBsYWNlcy5maWx0ZXIoKHApID0+IGcuaXNBdXRob3Jpc2VkKGdldFBsYWNlRGVmaW5pdGlvbihwKSkpXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIG5vdGlmeVZpc2l0U2VnbWVudENoYW5nZWQoXG4gICAgaXM6IFZpc2l0U2VnbWVudCxcbiAgICB3YXM6IFZpc2l0U2VnbWVudCxcbiAgICBtZXRhZGF0YT86IFRyYW5zYWN0aW9uLk1ldGFEYXRhXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIGNvbnNvbGUubG9nKFwiUGxhY2VSb3V0ZXIubm90aWZ5VmlzaXRTZWdtZW50Q2hhbmdlZFwiLCBpcy50b0RlYnVnU3RyaW5nKCksIHdhcy50b0RlYnVnU3RyaW5nKCkpO1xuICAgIHRoaXMucGxhY2VIaXN0b3J5LnVwZGF0ZVZpc2l0U2VnbWVudChpcyk7XG5cbiAgICAvLyBGSVhNRTogbm8gcm91dGUgaWQgLT4gcm91dGUgaWQgZHVwbGljYXRlcyByb3V0ZSBwYXJhbWV0ZXJzXG4gICAgY29uc3QgdmlzaXQgPSB0aGlzLmFjdGl2ZVZpc2l0JC52YWx1ZS5jb3B5QW5kUmVwbGFjZVNlZ21lbnQoaXMpO1xuICAgIGlmIChpcy5oYXNSb3V0aW5nQ2hhbmdlZEZyb20od2FzKSkge1xuICAgICAgLy8gQW4gaW4tcGxhY2UgcGFyYW1ldGVyIGNoYW5nZSAobW9kZWwgLT4gcm91dGUpIHB1c2hlcyBhIGhpc3RvcnkgZW50cnkgYnkgZGVmYXVsdCBzbyBhXG4gICAgICAvLyBkZWxpYmVyYXRlIHNlbGVjdGlvbiBpcyByZWFjaGFibGUgdmlhIHRoZSBiYWNrIGJ1dHRvbi4gQXV0b21hdGljIHJlZmluZW1lbnRzXG4gICAgICAvLyAoYXV0by1zZWxlY3QtZmlyc3QgLyBzZWxlY3QtbmVhcmVzdCBjb3JyZWN0aW9ucykgdGFnIHRoZWlyIHRyYW5zYWN0aW9uIG1ldGFkYXRhIGFuZCBhXG4gICAgICAvLyByZWdpc3RlcmVkIHNraXBIaXN0b3J5SWYgcHJlZGljYXRlIHJlcGxhY2VzIGluc3RlYWQgLSBzZWUgc2tpcEhpc3RvcnlJZi5cbiAgICAgIGNvbnN0IHJlcGxhY2VVcmwgPSB0aGlzLnNob3VsZFJlcGxhY2VIaXN0b3J5KG1ldGFkYXRhKTtcbiAgICAgIGF3YWl0IHRoaXMuZG9OYXZpZ2F0aW9uKHZpc2l0LCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHVybFNuYXBzaG90ID0gdGhpcy51cmxTZXJ2aWNlXG4gICAgICAgICAgLnBhcnNlVXJsKHRoaXMuYW5ndWxhclJvdXRlci5yb3V0ZXJTdGF0ZS5zbmFwc2hvdC51cmwpXG4gICAgICAgICAgLnVwZGF0ZVZpc2l0U2VnbWVudChpcyk7XG4gICAgICAgIHJldHVybiB0aGlzLm5hdmlnYXRlQnlVcmwodXJsU25hcHNob3QsIHsgcmVwbGFjZVVybCB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlTmF2aWdhdGlvblNlc3Npb24oY3VycmVudFJvdXRlclVybDogc3RyaW5nKTogTmF2aWdhdGlvblNlc3Npb24ge1xuICAgIGNvbnN0IGluSW50ZXJhY3Rpb24gPSB0aGlzLmludGVyYWN0aW9uU2VydmljZS5pc0FjdGl2ZSgpO1xuICAgIHJldHVybiBpbkludGVyYWN0aW9uXG4gICAgICA/IG5ldyBOYXZpZ2F0aW5nRHVyaW5nSW50ZXJhY3Rpb24oXG4gICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uQ29udGV4dCxcbiAgICAgICAgICBjdXJyZW50Um91dGVyVXJsXG4gICAgICAgIClcbiAgICAgIDogbmV3IE5hdmlnYXRpbmcodGhpcy5uYXZpZ2F0aW9uQ29udGV4dCwgY3VycmVudFJvdXRlclVybCk7XG4gIH1cblxuICAvLyBAVHJhY2UoKVxuXG4gIHByb3RlY3RlZCB0cmFuc2l0aW9uVG8obmV4dDogTmF2aWdhdGlvblNlc3Npb24pIHtcbiAgICBjb25zdCBwcmV2aW91cyA9IHRoaXMubmF2aWdhdGlvblNlc3Npb24kLnZhbHVlO1xuICAgIGlmICghcHJldmlvdXMpIHtcbiAgICAgIHRoaXMucGxhY2VIaXN0b3J5Lm5vdGlmeU5hdmlnYXRpb25TdGFydGVkKCk7XG4gICAgfVxuICAgIGFzc2VydC5pc1RydXRoeShuZXh0ICE9PSBwcmV2aW91cyk7XG4gICAgLy8gTG9nZ2VyLmdldCh0aGlzKS5pbmZvKGAjIyMgUm91dGVyIFN0YXRlIFRyYW5zaXRpb246ICR7cHJldmlvdXMgPyBwcmV2aW91cy50b1N0cmluZygpIDogJ251bGwnfSAtPiAke25leHQudG9TdHJpbmcoKX1gKTtcbiAgICB0aGlzLm5hdmlnYXRpb25TZXNzaW9uJC52YWx1ZSA9IG5leHQ7XG4gICAgaWYgKHByZXZpb3VzKSB7XG4gICAgICBwcmV2aW91cy5kaXNwb3NlKCk7XG4gICAgfVxuICAgIG5leHQubm90aWZ5QWN0aXZlKCk7XG4gIH1cblxuICAvLyBAVHJhY2UoKVxuXG4gIHByaXZhdGUgcm91dGluZ1Nlc3Npb25GaW5pc2hlZCh2aXNpdD86IFZpc2l0KSB7XG4gICAgaWYgKHZpc2l0KSB7XG4gICAgICBhc3NlcnQuaXNUcnV0aHkodGhpcy5uYXZpZ2F0aW9uSW5Qcm9ncmVzcyQudmFsdWUpO1xuICAgICAgdGhpcy5yZWNvcmRGaW5pc2hlZFZpc2l0KHZpc2l0KTtcbiAgICB9XG4gICAgY29uc3Qgc2Vzc2lvbiA9IHRoaXMuY3VycmVudFNlc3Npb247XG4gICAgc2Vzc2lvbi5kaXNwb3NlKCk7XG4gICAgdGhpcy5uYXZpZ2F0aW9uU2Vzc2lvbiQudmFsdWUgPSBudWxsO1xuICAgIC8vIGNvbnNvbGUubG9nKGAjIyMgUm91dGVyIFNlc3Npb24gRmluaXNoZWQgKHdhcyAke3Nlc3Npb24udG9TdHJpbmcoKX0pYCk7XG4gICAgLy8gU25hcHNob3QtYW5kLXN3YXA6IGpvYnMgcmVnaXN0ZXJlZCBEVVJJTkcgdGhlIGRyYWluIChlLmcuIHRoZSBpbnRlcmFjdGlvbi1pZCBzeW5jJ3MgbmVzdGVkXG4gICAgLy8gY29tcGxldGlvbiBqb2IsIG9yIGEgcXVldWVkIG5hdmlnYXRpb24gcmUtcXVldWVpbmcpIGJlbG9uZyB0byB0aGUgTkVYVCBzZXNzaW9uIGZpbmlzaC4gVGhlXG4gICAgLy8gb2xkIGZvckVhY2gtdGhlbi1yZWFzc2lnbiBib3RoIHNraXBwZWQgdGhlbSAoZm9yRWFjaCBkb2Vzbid0IHZpc2l0IGFwcGVuZGVkIGl0ZW1zKSBhbmQgdGhlblxuICAgIC8vIGRpc2NhcmRlZCB0aGVtLlxuICAgIGNvbnN0IGpvYnMgPSB0aGlzLnNlc3Npb25GaW5pc2hlZEpvYnM7XG4gICAgdGhpcy5zZXNzaW9uRmluaXNoZWRKb2JzID0gW107XG4gICAgam9icy5mb3JFYWNoKChqb2IpID0+IGpvYigpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNvcmRzIGEgY29tcGxldGVkIG5hdmlnYXRpb24ncyB2aXNpdCB3aXRob3V0IGZpbmlzaGluZyB0aGUgc2Vzc2lvbi4gU2hhcmVkIGJ5IHRoZSBub3JtYWxcbiAgICogZmluaXNoIHBhdGggYW5kIHNlc3Npb25zIHRoYXQgaGFuZCBvdmVyIHRvIHZpc2l0bGVzcyBob3VzZWtlZXBpbmcgKHNlZVxuICAgKiBOYXZpZ2F0aW9uQ29udGV4dC5yZWNvcmRWaXNpdCkuXG4gICAqL1xuICBwcml2YXRlIHJlY29yZEZpbmlzaGVkVmlzaXQodmlzaXQ6IFZpc2l0KSB7XG4gICAgdGhpcy5wbGFjZUhpc3Rvcnkubm90aWZ5TmF2aWdhdGlvbkZpbmlzaGVkKHZpc2l0KTtcbiAgICAvLyBXZSB1cGRhdGUgdGhlIGFjdGl2ZSB2aXNpdHMgYmVmb3JlIHdlIGZpbmlzaCB0aGUgc2Vzc2lvbiBzbyB0aGVcbiAgICAvLyBwbGFjZSBvdXRsZXRzIGNhbiBpZ25vcmUgdGhlIGluY29taW5nIGNoYW5nZXMgdW50aWwgdGhpbmdzIGFyZSBzZXR0bGVkLlxuICAgIHRoaXMuX2FjdGl2ZVZpc2l0JC52YWx1ZSA9IHZpc2l0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgYGZ1bmNgIHdoZW4gdGhlIE5FWFQgbmF2aWdhdGlvbiBzZXNzaW9uIGZpbmlzaGVzIOKAlCB3aGljaCBtYXkgYmUgYSBzZXNzaW9uIHRoYXQgaGFzbid0XG4gICAqIHN0YXJ0ZWQgeWV0ICh0aGUgaW50ZXJhY3Rpb24taWQgc3luYyByZWdpc3RlcnMgaXRzIGNvbXBsZXRpb24gam9iIGJlZm9yZSBzdGFydGluZyB0aGUgc3luY1xuICAgKiBzZXNzaW9uLCBhbmQgam9icyByZWdpc3RlcmVkIHdoaWxlIGEgZHJhaW4gaXMgcnVubmluZyBiZWxvbmcgdG8gdGhlIGZvbGxvd2luZyBzZXNzaW9uKS5cbiAgICovXG4gIHByaXZhdGUgcnVuQWZ0ZXJSb3V0aW5nU2Vzc2lvbkZpbmlzaGVzKGZ1bmM6ICgpID0+IHZvaWQpIHtcbiAgICB0aGlzLnNlc3Npb25GaW5pc2hlZEpvYnMucHVzaChmdW5jKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTeW5jJ3MgdGhlIGN1cnJlbnQgaW50ZXJhY3Rpb24gc3RhdGUgd2l0aCB0aGUgVVJMLiAgV2UgbmVlZCB0byBwdXNoIHNvbWV0aGluZyBpbiB0aGUgVVJMIGluIG9yZGVyXG4gICAqIHRvIGJlIGFibGUgdG8gY2FwdHVyZSB0aGUgYmFjayBidXR0b24gb24gdGhlIGZpcnN0IHBhZ2UuICBJZiB3ZSBkb24ndCB0aGVuIHRoZSBiYWNrIGNsaWNrIHdpbGwgZXhpdFxuICAgKiB0aGUgYXBwIGRpcmVjdGx5IGFuZCB3ZSBkb24ndCBnZXQgdG8gYXNrLlxuICAgKi9cbiAgLy8gQFRyYWNlKClcbiAgc3luY0ludGVyYWN0aW9uQ29udGV4dElkc1dpdGhSb3V0ZXIoXG4gICAgb25TeW5jQ29tcGxldGU6ICgpID0+IHZvaWQgPSAoKSA9PiB7XG4gICAgICAvLyBub29wXG4gICAgfVxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5uYXZpZ2F0aW9uU2Vzc2lvbikge1xuICAgICAgLy8gY29uc29sZS5sb2coYE5hdmlnYXRpb24gYWN0aXZlIC0+ICR7dGhpcy5uYXZpZ2F0aW9uU2Vzc2lvbi50b1N0cmluZygpfSwgc3luYyBkZWxheWVkIHVudGlsIGZpbmlzaGVkLmApO1xuICAgICAgLy8gY29uc3Qgc2Vzc2lvbiA9IHRoaXMubmF2aWdhdGlvblNlc3Npb247XG4gICAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcbiAgICAgICAgY29uc3Qgc3RhcnRTeW5jV2hlbklkbGUgPSAoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMubmF2aWdhdGlvblNlc3Npb24pIHtcbiAgICAgICAgICAgIC8vIEEgam9iIGRyYWluZWQgYmVmb3JlIHVzIChlLmcuIGEgcXVldWVkIG5hdmlnYXRpb24pIGFscmVhZHkgc3RhcnRlZCBhIG5ldyBzZXNzaW9uO1xuICAgICAgICAgICAgLy8gdHJhbnNpdGlvbmluZyBub3cgd291bGQgZGlzcG9zZSBpdCBtaWQtZmxpZ2h0LiBSZS1kZWZlciB1bnRpbCB0aGF0IG9uZSBmaW5pc2hlcy5cbiAgICAgICAgICAgIHRoaXMucnVuQWZ0ZXJSb3V0aW5nU2Vzc2lvbkZpbmlzaGVzKHN0YXJ0U3luY1doZW5JZGxlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5ydW5BZnRlclJvdXRpbmdTZXNzaW9uRmluaXNoZXMoKCkgPT4ge1xuICAgICAgICAgICAgb25TeW5jQ29tcGxldGUoKTtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjb25zdCBzeW5jU2Vzc2lvbiA9IG5ldyBTeW5jaHJvbmlzZUludGVyYWN0aW9uQ29udGV4dElkc1dpdGhSb3V0ZShcbiAgICAgICAgICAgIHRoaXMubmF2aWdhdGlvbkNvbnRleHQsXG4gICAgICAgICAgICB0aGlzLnVybFNlcnZpY2UuZ2V0Q3VycmVudFJvdXRlclVybCgpLFxuICAgICAgICAgICAgZmFsc2VcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMudHJhbnNpdGlvblRvKHN5bmNTZXNzaW9uKTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5ydW5BZnRlclJvdXRpbmdTZXNzaW9uRmluaXNoZXMoc3RhcnRTeW5jV2hlbklkbGUpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhgTm8gbmF2aWdhdGlvbiBpbiBwcm9ncmVzcywgc3RhcnRpbmcgc3luY2hyb25pc2F0aW9uIGpvYmApO1xuICAgICAgICB0aGlzLnJ1bkFmdGVyUm91dGluZ1Nlc3Npb25GaW5pc2hlcygoKSA9PiB7XG4gICAgICAgICAgb25TeW5jQ29tcGxldGUoKTtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBzZXNzaW9uID0gbmV3IFN5bmNocm9uaXNlSW50ZXJhY3Rpb25Db250ZXh0SWRzV2l0aFJvdXRlKFxuICAgICAgICAgIHRoaXMubmF2aWdhdGlvbkNvbnRleHQsXG4gICAgICAgICAgdGhpcy51cmxTZXJ2aWNlLmdldEN1cnJlbnRSb3V0ZXJVcmwoKSxcbiAgICAgICAgICBmYWxzZVxuICAgICAgICApO1xuICAgICAgICB0aGlzLnRyYW5zaXRpb25UbyhzZXNzaW9uKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdG9WaXNpdChcbiAgICB2aXNpdE9yUGxhY2VDb21wb25lbnQ6IFZpc2l0IHwgQ29uc3RydWN0YWJsZTxQbGFjZUNvbXBvbmVudD4sXG4gICAgcGFyYW1zPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgKSB7XG4gICAgaWYgKHZpc2l0T3JQbGFjZUNvbXBvbmVudCBpbnN0YW5jZW9mIFZpc2l0KSB7XG4gICAgICByZXR1cm4gdmlzaXRPclBsYWNlQ29tcG9uZW50O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gVmlzaXQuZ290byh2aXNpdE9yUGxhY2VDb21wb25lbnQsIHBhcmFtcyk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgUGxhY2VSb3V0ZXIge1xuXG4gIGV4cG9ydCBpbnRlcmZhY2UgUmVkaXJlY3Rpb25zIHtcbiAgICAvKipcbiAgICAgKiBOT1RFOiBmb3Igbm93IHRoaXMgb25seSBzdXBwb3J0cyB0b3AgbGV2ZWwgcGxhY2VzLiAgU3VwcG9ydCBmb3IgY2hpbGQgcGxhY2VzIHdpbGwgcmVxdWlyZSBhIG1vcmUgZnVuZGFtZW50YWxcbiAgICAgKiBjaGFuZ2UgdG8gdmlzaXRzIHRvIHN1cHBvcnQgbmVzdGluZ1xuICAgICAqL1xuICAgIG9uQXV0aGVudGljYXRpb25GYWlsdXJlKGFjdGl2YXRlZFJvdXRlPzogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgc3RhdGU/OiBSb3V0ZXJTdGF0ZVNuYXBzaG90KTogVmlzaXQgfCBDb25zdHJ1Y3RhYmxlPFBsYWNlQ29tcG9uZW50PjtcblxuICAgIC8qKlxuICAgICAqIE5PVEU6IGZvciBub3cgdGhpcyBvbmx5IHN1cHBvcnRzIHRvcCBsZXZlbCBwbGFjZXMuICBTdXBwb3J0IGZvciBjaGlsZCBwbGFjZXMgd2lsbCByZXF1aXJlIGEgbW9yZSBmdW5kYW1lbnRhbFxuICAgICAqIGNoYW5nZSB0byB2aXNpdHMgdG8gc3VwcG9ydCBuZXN0aW5nXG4gICAgICogQHBhcmFtIGNvbXBvbmVudFxuICAgICAqL1xuICAgIG9uQXV0aG9yaXNhdGlvbkZhaWx1cmUoY29tcG9uZW50OiBDb25zdHJ1Y3RhYmxlPFBsYWNlQ29tcG9uZW50Pik6IChDb25zdHJ1Y3RhYmxlPFBsYWNlQ29tcG9uZW50PiB8IFZpc2l0KVtdO1xuICB9XG59XG4iXX0=
@@ -1,7 +1,8 @@
1
1
  /**
2
2
  * @file Automatically generated by barrelsby.
3
3
  */
4
+ export * from "./quiet-rejections";
4
5
  export * from "./visibility-service";
5
6
  export * from "./markdown/markdown.service";
6
7
  export * from "./markdown/pill-plugin";
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci11aS1wb3dlcnVwcy9zcmMvbGliL3NlcnZpY2VzL2V4cG9ydHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyx3QkFBd0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGUgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgYmFycmVsc2J5LlxuICovXG5cbmV4cG9ydCAqIGZyb20gXCIuL3Zpc2liaWxpdHktc2VydmljZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbWFya2Rvd24vbWFya2Rvd24uc2VydmljZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbWFya2Rvd24vcGlsbC1wbHVnaW5cIjtcbiJdfQ==
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci11aS1wb3dlcnVwcy9zcmMvbGliL3NlcnZpY2VzL2V4cG9ydHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLHdCQUF3QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZSBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBiYXJyZWxzYnkuXG4gKi9cblxuZXhwb3J0ICogZnJvbSBcIi4vcXVpZXQtcmVqZWN0aW9uc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdmlzaWJpbGl0eS1zZXJ2aWNlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9tYXJrZG93bi9tYXJrZG93bi5zZXJ2aWNlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9tYXJrZG93bi9waWxsLXBsdWdpblwiO1xuIl19
@@ -0,0 +1,87 @@
1
+ import { ENVIRONMENT_INITIALIZER, ErrorHandler, Inject, Injectable, InjectionToken, Optional } from '@angular/core';
2
+ import { Rejection } from '@coolon/pectin';
3
+ import * as i0 from "@angular/core";
4
+ /**
5
+ * Keeps handled rejections out of the console, and lets everything else through.
6
+ *
7
+ * A rejection marked handled (pectin's `Rejection`) has already been dealt with — a cancelled dialog,
8
+ * a refused request whose handler showed its message, a transport error the app reported — so the
9
+ * code that awaited it just stops. Without this, each one surfaces as an "Uncaught (in promise)"
10
+ * error. Anything not marked is reported as before, so real bugs stay visible.
11
+ *
12
+ * Works with zone.js, which hands an unhandled rejection to Angular's ErrorHandler wrapped in an Error
13
+ * carrying the original as `rejection`, and without it, where the browser raises an
14
+ * `unhandledrejection` event (and Angular 20's global error listeners forward the raw reason).
15
+ *
16
+ * Turn on `?traceRejections` (or localStorage `aup.traceRejections=true`, or `{trace: true}`) to log
17
+ * the quiet ones with their stack at debug level — for when something stops and the console is silent.
18
+ */
19
+ export function provideQuietRejections(options) {
20
+ return [
21
+ { provide: QuietRejections.OPTIONS, useValue: options ?? {} },
22
+ { provide: ErrorHandler, useClass: QuietRejectionsErrorHandler },
23
+ { provide: ENVIRONMENT_INITIALIZER, multi: true, useValue: QuietRejections.listenForUnhandledRejections },
24
+ ];
25
+ }
26
+ export var QuietRejections;
27
+ (function (QuietRejections) {
28
+ QuietRejections.OPTIONS = new InjectionToken('QuietRejections.Options');
29
+ /** What was rejected: zone.js wraps an unhandled rejection in an Error carrying it as `rejection`. */
30
+ function reasonOf(error) {
31
+ return error instanceof Error && 'rejection' in error && 'promise' in error
32
+ ? error.rejection
33
+ : error;
34
+ }
35
+ QuietRejections.reasonOf = reasonOf;
36
+ /** Whether the page asked for quiet rejections to be traced. */
37
+ function traceRequested() {
38
+ try {
39
+ return typeof window !== 'undefined'
40
+ && (new URLSearchParams(window.location.search).has('traceRejections')
41
+ || window.localStorage?.getItem('aup.traceRejections') === 'true');
42
+ }
43
+ catch {
44
+ return false;
45
+ }
46
+ }
47
+ QuietRejections.traceRequested = traceRequested;
48
+ /** Without zone.js the browser reports unhandled rejections itself; keep it quiet about handled ones. */
49
+ function listenForUnhandledRejections() {
50
+ if (typeof window === 'undefined') {
51
+ return;
52
+ }
53
+ window.addEventListener('unhandledrejection', event => {
54
+ if (Rejection.isHandled(event.reason)) {
55
+ event.preventDefault();
56
+ }
57
+ });
58
+ }
59
+ QuietRejections.listenForUnhandledRejections = listenForUnhandledRejections;
60
+ })(QuietRejections || (QuietRejections = {}));
61
+ export class QuietRejectionsErrorHandler extends ErrorHandler {
62
+ trace;
63
+ constructor(options) {
64
+ super();
65
+ this.trace = options?.trace ?? QuietRejections.traceRequested();
66
+ }
67
+ handleError(error) {
68
+ const reason = QuietRejections.reasonOf(error);
69
+ if (!Rejection.isHandled(reason)) {
70
+ super.handleError(error);
71
+ }
72
+ else if (this.trace) {
73
+ console.debug('[quiet rejection]', reason);
74
+ }
75
+ }
76
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: QuietRejectionsErrorHandler, deps: [{ token: QuietRejections.OPTIONS, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
77
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: QuietRejectionsErrorHandler });
78
+ }
79
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: QuietRejectionsErrorHandler, decorators: [{
80
+ type: Injectable
81
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
82
+ type: Optional
83
+ }, {
84
+ type: Inject,
85
+ args: [QuietRejections.OPTIONS]
86
+ }] }]; } });
87
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVpZXQtcmVqZWN0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci11aS1wb3dlcnVwcy9zcmMvbGliL3NlcnZpY2VzL3F1aWV0LXJlamVjdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLHVCQUF1QixFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQVcsTUFBTSxlQUFlLENBQUM7QUFDNUgsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDOztBQUV6Qzs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE1BQU0sVUFBVSxzQkFBc0IsQ0FBQyxPQUFpQztJQUN0RSxPQUFPO1FBQ0wsRUFBQyxPQUFPLEVBQUUsZUFBZSxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxJQUFJLEVBQUUsRUFBQztRQUMzRCxFQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLDJCQUEyQixFQUFDO1FBQzlELEVBQUMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLGVBQWUsQ0FBQyw0QkFBNEIsRUFBQztLQUN4RyxDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sS0FBVyxlQUFlLENBc0MvQjtBQXRDRCxXQUFpQixlQUFlO0lBT2pCLHVCQUFPLEdBQUcsSUFBSSxjQUFjLENBQVUseUJBQXlCLENBQUMsQ0FBQztJQUU5RSxzR0FBc0c7SUFDdEcsU0FBZ0IsUUFBUSxDQUFDLEtBQWM7UUFDckMsT0FBTyxLQUFLLFlBQVksS0FBSyxJQUFJLFdBQVcsSUFBSSxLQUFLLElBQUksU0FBUyxJQUFJLEtBQUs7WUFDekUsQ0FBQyxDQUFFLEtBQXNDLENBQUMsU0FBUztZQUNuRCxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQ1osQ0FBQztJQUplLHdCQUFRLFdBSXZCLENBQUE7SUFFRCxnRUFBZ0U7SUFDaEUsU0FBZ0IsY0FBYztRQUM1QixJQUFJO1lBQ0YsT0FBTyxPQUFPLE1BQU0sS0FBSyxXQUFXO21CQUMvQixDQUFDLElBQUksZUFBZSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDO3VCQUNqRSxNQUFNLENBQUMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLE1BQU0sQ0FBQyxDQUFDO1NBQ3hFO1FBQUMsTUFBTTtZQUNOLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7SUFDSCxDQUFDO0lBUmUsOEJBQWMsaUJBUTdCLENBQUE7SUFFRCx5R0FBeUc7SUFDekcsU0FBZ0IsNEJBQTRCO1FBQzFDLElBQUksT0FBTyxNQUFNLEtBQUssV0FBVyxFQUFFO1lBQ2pDLE9BQU87U0FDUjtRQUNELE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxvQkFBb0IsRUFBRSxLQUFLLENBQUMsRUFBRTtZQUNwRCxJQUFJLFNBQVMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUNyQyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7YUFDeEI7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFUZSw0Q0FBNEIsK0JBUzNDLENBQUE7QUFDSCxDQUFDLEVBdENnQixlQUFlLEtBQWYsZUFBZSxRQXNDL0I7QUFHRCxNQUFNLE9BQU8sMkJBQTRCLFNBQVEsWUFBWTtJQUUxQyxLQUFLLENBQVU7SUFFaEMsWUFBeUQsT0FBaUM7UUFDeEYsS0FBSyxFQUFFLENBQUM7UUFDUixJQUFJLENBQUMsS0FBSyxHQUFHLE9BQU8sRUFBRSxLQUFLLElBQUksZUFBZSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ2xFLENBQUM7SUFFUSxXQUFXLENBQUMsS0FBYztRQUNqQyxNQUFNLE1BQU0sR0FBRyxlQUFlLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ2hDLEtBQUssQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDMUI7YUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDckIsT0FBTyxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsRUFBRSxNQUFNLENBQUMsQ0FBQztTQUM1QztJQUNILENBQUM7dUdBaEJVLDJCQUEyQixrQkFJTixlQUFlLENBQUMsT0FBTzsyR0FKNUMsMkJBQTJCOzsyRkFBM0IsMkJBQTJCO2tCQUR2QyxVQUFVOzswQkFLSSxRQUFROzswQkFBSSxNQUFNOzJCQUFDLGVBQWUsQ0FBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtFTlZJUk9OTUVOVF9JTklUSUFMSVpFUiwgRXJyb3JIYW5kbGVyLCBJbmplY3QsIEluamVjdGFibGUsIEluamVjdGlvblRva2VuLCBPcHRpb25hbCwgUHJvdmlkZXJ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtSZWplY3Rpb259IGZyb20gJ0Bjb29sb24vcGVjdGluJztcblxuLyoqXG4gKiBLZWVwcyBoYW5kbGVkIHJlamVjdGlvbnMgb3V0IG9mIHRoZSBjb25zb2xlLCBhbmQgbGV0cyBldmVyeXRoaW5nIGVsc2UgdGhyb3VnaC5cbiAqXG4gKiBBIHJlamVjdGlvbiBtYXJrZWQgaGFuZGxlZCAocGVjdGluJ3MgYFJlamVjdGlvbmApIGhhcyBhbHJlYWR5IGJlZW4gZGVhbHQgd2l0aCDigJQgYSBjYW5jZWxsZWQgZGlhbG9nLFxuICogYSByZWZ1c2VkIHJlcXVlc3Qgd2hvc2UgaGFuZGxlciBzaG93ZWQgaXRzIG1lc3NhZ2UsIGEgdHJhbnNwb3J0IGVycm9yIHRoZSBhcHAgcmVwb3J0ZWQg4oCUIHNvIHRoZVxuICogY29kZSB0aGF0IGF3YWl0ZWQgaXQganVzdCBzdG9wcy4gV2l0aG91dCB0aGlzLCBlYWNoIG9uZSBzdXJmYWNlcyBhcyBhbiBcIlVuY2F1Z2h0IChpbiBwcm9taXNlKVwiXG4gKiBlcnJvci4gQW55dGhpbmcgbm90IG1hcmtlZCBpcyByZXBvcnRlZCBhcyBiZWZvcmUsIHNvIHJlYWwgYnVncyBzdGF5IHZpc2libGUuXG4gKlxuICogV29ya3Mgd2l0aCB6b25lLmpzLCB3aGljaCBoYW5kcyBhbiB1bmhhbmRsZWQgcmVqZWN0aW9uIHRvIEFuZ3VsYXIncyBFcnJvckhhbmRsZXIgd3JhcHBlZCBpbiBhbiBFcnJvclxuICogY2FycnlpbmcgdGhlIG9yaWdpbmFsIGFzIGByZWplY3Rpb25gLCBhbmQgd2l0aG91dCBpdCwgd2hlcmUgdGhlIGJyb3dzZXIgcmFpc2VzIGFuXG4gKiBgdW5oYW5kbGVkcmVqZWN0aW9uYCBldmVudCAoYW5kIEFuZ3VsYXIgMjAncyBnbG9iYWwgZXJyb3IgbGlzdGVuZXJzIGZvcndhcmQgdGhlIHJhdyByZWFzb24pLlxuICpcbiAqIFR1cm4gb24gYD90cmFjZVJlamVjdGlvbnNgIChvciBsb2NhbFN0b3JhZ2UgYGF1cC50cmFjZVJlamVjdGlvbnM9dHJ1ZWAsIG9yIGB7dHJhY2U6IHRydWV9YCkgdG8gbG9nXG4gKiB0aGUgcXVpZXQgb25lcyB3aXRoIHRoZWlyIHN0YWNrIGF0IGRlYnVnIGxldmVsIOKAlCBmb3Igd2hlbiBzb21ldGhpbmcgc3RvcHMgYW5kIHRoZSBjb25zb2xlIGlzIHNpbGVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVRdWlldFJlamVjdGlvbnMob3B0aW9ucz86IFF1aWV0UmVqZWN0aW9ucy5PcHRpb25zKTogUHJvdmlkZXJbXSB7XG4gIHJldHVybiBbXG4gICAge3Byb3ZpZGU6IFF1aWV0UmVqZWN0aW9ucy5PUFRJT05TLCB1c2VWYWx1ZTogb3B0aW9ucyA/PyB7fX0sXG4gICAge3Byb3ZpZGU6IEVycm9ySGFuZGxlciwgdXNlQ2xhc3M6IFF1aWV0UmVqZWN0aW9uc0Vycm9ySGFuZGxlcn0sXG4gICAge3Byb3ZpZGU6IEVOVklST05NRU5UX0lOSVRJQUxJWkVSLCBtdWx0aTogdHJ1ZSwgdXNlVmFsdWU6IFF1aWV0UmVqZWN0aW9ucy5saXN0ZW5Gb3JVbmhhbmRsZWRSZWplY3Rpb25zfSxcbiAgXTtcbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBRdWlldFJlamVjdGlvbnMge1xuXG4gIGV4cG9ydCBpbnRlcmZhY2UgT3B0aW9ucyB7XG4gICAgLyoqIExvZyB0aGUgcXVpZXQgcmVqZWN0aW9ucyBhdCBkZWJ1ZyBsZXZlbC4gRGVmYXVsdHMgdG8gdGhlIGB0cmFjZVJlamVjdGlvbnNgIGZsYWcuICovXG4gICAgdHJhY2U/OiBib29sZWFuO1xuICB9XG5cbiAgZXhwb3J0IGNvbnN0IE9QVElPTlMgPSBuZXcgSW5qZWN0aW9uVG9rZW48T3B0aW9ucz4oJ1F1aWV0UmVqZWN0aW9ucy5PcHRpb25zJyk7XG5cbiAgLyoqIFdoYXQgd2FzIHJlamVjdGVkOiB6b25lLmpzIHdyYXBzIGFuIHVuaGFuZGxlZCByZWplY3Rpb24gaW4gYW4gRXJyb3IgY2FycnlpbmcgaXQgYXMgYHJlamVjdGlvbmAuICovXG4gIGV4cG9ydCBmdW5jdGlvbiByZWFzb25PZihlcnJvcjogdW5rbm93bik6IHVua25vd24ge1xuICAgIHJldHVybiBlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmICdyZWplY3Rpb24nIGluIGVycm9yICYmICdwcm9taXNlJyBpbiBlcnJvclxuICAgICAgPyAoZXJyb3IgYXMgRXJyb3IgJiB7cmVqZWN0aW9uOiB1bmtub3dufSkucmVqZWN0aW9uXG4gICAgICA6IGVycm9yO1xuICB9XG5cbiAgLyoqIFdoZXRoZXIgdGhlIHBhZ2UgYXNrZWQgZm9yIHF1aWV0IHJlamVjdGlvbnMgdG8gYmUgdHJhY2VkLiAqL1xuICBleHBvcnQgZnVuY3Rpb24gdHJhY2VSZXF1ZXN0ZWQoKTogYm9vbGVhbiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICAmJiAobmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKS5oYXMoJ3RyYWNlUmVqZWN0aW9ucycpXG4gICAgICAgICAgfHwgd2luZG93LmxvY2FsU3RvcmFnZT8uZ2V0SXRlbSgnYXVwLnRyYWNlUmVqZWN0aW9ucycpID09PSAndHJ1ZScpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBXaXRob3V0IHpvbmUuanMgdGhlIGJyb3dzZXIgcmVwb3J0cyB1bmhhbmRsZWQgcmVqZWN0aW9ucyBpdHNlbGY7IGtlZXAgaXQgcXVpZXQgYWJvdXQgaGFuZGxlZCBvbmVzLiAqL1xuICBleHBvcnQgZnVuY3Rpb24gbGlzdGVuRm9yVW5oYW5kbGVkUmVqZWN0aW9ucygpOiB2b2lkIHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3VuaGFuZGxlZHJlamVjdGlvbicsIGV2ZW50ID0+IHtcbiAgICAgIGlmIChSZWplY3Rpb24uaXNIYW5kbGVkKGV2ZW50LnJlYXNvbikpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgUXVpZXRSZWplY3Rpb25zRXJyb3JIYW5kbGVyIGV4dGVuZHMgRXJyb3JIYW5kbGVyIHtcblxuICBwcml2YXRlIHJlYWRvbmx5IHRyYWNlOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKEBPcHRpb25hbCgpIEBJbmplY3QoUXVpZXRSZWplY3Rpb25zLk9QVElPTlMpIG9wdGlvbnM/OiBRdWlldFJlamVjdGlvbnMuT3B0aW9ucykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy50cmFjZSA9IG9wdGlvbnM/LnRyYWNlID8/IFF1aWV0UmVqZWN0aW9ucy50cmFjZVJlcXVlc3RlZCgpO1xuICB9XG5cbiAgb3ZlcnJpZGUgaGFuZGxlRXJyb3IoZXJyb3I6IHVua25vd24pOiB2b2lkIHtcbiAgICBjb25zdCByZWFzb24gPSBRdWlldFJlamVjdGlvbnMucmVhc29uT2YoZXJyb3IpO1xuICAgIGlmICghUmVqZWN0aW9uLmlzSGFuZGxlZChyZWFzb24pKSB7XG4gICAgICBzdXBlci5oYW5kbGVFcnJvcihlcnJvcik7XG4gICAgfSBlbHNlIGlmICh0aGlzLnRyYWNlKSB7XG4gICAgICBjb25zb2xlLmRlYnVnKCdbcXVpZXQgcmVqZWN0aW9uXScsIHJlYXNvbik7XG4gICAgfVxuICB9XG59XG4iXX0=