@alfresco/aca-shared 7.0.0-14990178084 → 7.0.0-15040599250
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/services/app.extension.service.mjs +13 -4
- package/esm2022/rules/app.rules.mjs +30 -150
- package/esm2022/rules/navigation.rules.mjs +1 -68
- package/fesm2022/alfresco-aca-shared-rules.mjs +30 -217
- package/fesm2022/alfresco-aca-shared-rules.mjs.map +1 -1
- package/fesm2022/alfresco-aca-shared.mjs +12 -3
- package/fesm2022/alfresco-aca-shared.mjs.map +1 -1
- package/lib/services/app.extension.service.d.ts +1 -1
- package/package.json +1 -1
- package/rules/app.rules.d.ts +1 -93
- package/rules/navigation.rules.d.ts +0 -55
|
@@ -436,9 +436,18 @@ export class AppExtensionService {
|
|
|
436
436
|
}
|
|
437
437
|
// todo: move to ADF/RuleService
|
|
438
438
|
evaluateRule(ruleId, ...args) {
|
|
439
|
-
|
|
440
|
-
if (
|
|
441
|
-
|
|
439
|
+
let evaluatorList = [];
|
|
440
|
+
if (Array.isArray(ruleId)) {
|
|
441
|
+
evaluatorList = ruleId.filter((rule) => !!this.getEvaluator(rule)).map((rule) => this.getEvaluator(rule));
|
|
442
|
+
}
|
|
443
|
+
else {
|
|
444
|
+
const evaluator = this.getEvaluator(ruleId);
|
|
445
|
+
if (evaluator) {
|
|
446
|
+
evaluatorList.push(evaluator);
|
|
447
|
+
}
|
|
448
|
+
}
|
|
449
|
+
if (evaluatorList?.length > 0) {
|
|
450
|
+
return evaluatorList.every((evaluator) => evaluator(this, ...args));
|
|
442
451
|
}
|
|
443
452
|
return false;
|
|
444
453
|
}
|
|
@@ -477,4 +486,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImpor
|
|
|
477
486
|
providedIn: 'root'
|
|
478
487
|
}]
|
|
479
488
|
}], ctorParameters: () => [{ type: i1.AuthenticationService }, { type: i2.Store }, { type: i3.ExtensionLoaderService }, { type: i3.ExtensionService }, { type: i4.NodePermissionService }, { type: i1.AppConfigService }, { type: i5.MatIconRegistry }, { type: i6.DomSanitizer }, { type: i1.LogService }] });
|
|
480
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmV4dGVuc2lvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYWNhLXNoYXJlZC9zcmMvbGliL3NlcnZpY2VzL2FwcC5leHRlbnNpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUVILE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNwQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDekQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3pELE9BQU8sRUFBWSxjQUFjLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN0RSxPQUFPLEVBRUwsaUJBQWlCLEVBR2pCLHNCQUFzQixFQUV0QixnQkFBZ0IsRUFFaEIsV0FBVyxFQUNYLFlBQVksRUFJWixnQkFBZ0IsRUFDaEIsZ0JBQWdCLEVBS2hCLFdBQVcsRUFDWixNQUFNLDBCQUEwQixDQUFDO0FBQ2xDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxxQkFBcUIsRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN6RixPQUFPLEVBQUUsZUFBZSxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUk1RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7O0FBTXJDLE1BQU0sT0FBTyxtQkFBbUI7SUF1RHJCO0lBQ0c7SUFDQTtJQUNBO0lBQ0g7SUFDQTtJQUNHO0lBQ0E7SUFDQTtJQTlESixXQUFXLEdBQUcsSUFBSSxlQUFlLENBQWlCLEVBQUUsQ0FBQyxDQUFDO0lBQzlELG1CQUFtQixHQUFHLElB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wqkgMjAwNS0yMDI1IEh5bGFuZCBTb2Z0d2FyZSwgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogQWxmcmVzY28gRXhhbXBsZSBDb250ZW50IEFwcGxpY2F0aW9uXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEFsZnJlc2NvIEV4YW1wbGUgQ29udGVudCBBcHBsaWNhdGlvbi5cbiAqIElmIHRoZSBzb2Z0d2FyZSB3YXMgcHVyY2hhc2VkIHVuZGVyIGEgcGFpZCBBbGZyZXNjbyBsaWNlbnNlLCB0aGUgdGVybXMgb2ZcbiAqIHRoZSBwYWlkIGxpY2Vuc2UgYWdyZWVtZW50IHdpbGwgcHJldmFpbC4gT3RoZXJ3aXNlLCB0aGUgc29mdHdhcmUgaXNcbiAqIHByb3ZpZGVkIHVuZGVyIHRoZSBmb2xsb3dpbmcgb3BlbiBzb3VyY2UgbGljZW5zZSB0ZXJtczpcbiAqXG4gKiBUaGUgQWxmcmVzY28gRXhhbXBsZSBDb250ZW50IEFwcGxpY2F0aW9uIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4gKlxuICogVGhlIEFsZnJlc2NvIEV4YW1wbGUgQ29udGVudCBBcHBsaWNhdGlvbiBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2ZcbiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZVxuICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gKiBmcm9tIEh5bGFuZCBTb2Z0d2FyZS4gSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuICovXG5cbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN0b3JlIH0gZnJvbSAnQG5ncngvc3RvcmUnO1xuaW1wb3J0IHsgTWF0SWNvblJlZ2lzdHJ5IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IEFwcFN0b3JlLCBnZXRSdWxlQ29udGV4dCB9IGZyb20gJ0BhbGZyZXNjby9hY2Etc2hhcmVkL3N0b3JlJztcbmltcG9ydCB7XG4gIENvbnRlbnRBY3Rpb25SZWYsXG4gIENvbnRlbnRBY3Rpb25UeXBlLFxuICBEb2N1bWVudExpc3RQcmVzZXRSZWYsXG4gIEV4dGVuc2lvbkNvbmZpZyxcbiAgRXh0ZW5zaW9uTG9hZGVyU2VydmljZSxcbiAgRXh0ZW5zaW9uUmVmLFxuICBFeHRlbnNpb25TZXJ2aWNlLFxuICBJY29uUmVmLFxuICBtZXJnZUFycmF5cyxcbiAgbWVyZ2VPYmplY3RzLFxuICBOYXZCYXJHcm91cFJlZixcbiAgTmF2aWdhdGlvblN0YXRlLFxuICBQcm9maWxlU3RhdGUsXG4gIHJlZHVjZUVtcHR5TWVudXMsXG4gIHJlZHVjZVNlcGFyYXRvcnMsXG4gIFJ1bGVDb250ZXh0LFxuICBSdWxlRXZhbHVhdG9yLFxuICBTZWxlY3Rpb25TdGF0ZSxcbiAgU2lkZWJhclRhYlJlZixcbiAgc29ydEJ5T3JkZXJcbn0gZnJvbSAnQGFsZnJlc2NvL2FkZi1leHRlbnNpb25zJztcbmltcG9ydCB7IEFwcENvbmZpZ1NlcnZpY2UsIEF1dGhlbnRpY2F0aW9uU2VydmljZSwgTG9nU2VydmljZSB9IGZyb20gJ0BhbGZyZXNjby9hZGYtY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE5vZGVFbnRyeSwgUmVwb3NpdG9yeUluZm8gfSBmcm9tICdAYWxmcmVzY28vanMtYXBpJztcbmltcG9ydCB7IFZpZXdlclJ1bGVzIH0gZnJvbSAnLi4vbW9kZWxzL3ZpZXdlci5ydWxlcyc7XG5pbXBvcnQgeyBCYWRnZSB9IGZyb20gJy4uL21vZGVscy90eXBlcyc7XG5pbXBvcnQgeyBOb2RlUGVybWlzc2lvblNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9ub2RlLXBlcm1pc3Npb24uc2VydmljZSc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBTZWFyY2hDYXRlZ29yeSB9IGZyb20gJ0BhbGZyZXNjby9hZGYtY29udGVudC1zZXJ2aWNlcyc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEFwcEV4dGVuc2lvblNlcnZpY2UgaW1wbGVtZW50cyBSdWxlQ29udGV4dCB7XG4gIHByaXZhdGUgX3JlZmVyZW5jZXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEV4dGVuc2lvblJlZltdPihbXSk7XG4gIGJ1bGtBY3Rpb25FeGVjdXRlZCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIG5hdmJhcjogQXJyYXk8TmF2QmFyR3JvdXBSZWY+ID0gW107XG4gIHNpZGViYXJUYWJzOiBBcnJheTxTaWRlYmFyVGFiUmVmPiA9IFtdO1xuICBjb250ZW50TWV0YWRhdGE6IGFueTtcbiAgc2VhcmNoOiBhbnk7XG4gIHZpZXdlclJ1bGVzOiBWaWV3ZXJSdWxlcyA9IHt9O1xuXG4gIHByaXZhdGUgX2hlYWRlckFjdGlvbnMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFycmF5PENvbnRlbnRBY3Rpb25SZWY+PihbXSk7XG4gIHByaXZhdGUgX3Rvb2xiYXJBY3Rpb25zID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBcnJheTxDb250ZW50QWN0aW9uUmVmPj4oW10pO1xuICBwcml2YXRlIF92aWV3ZXJUb29sYmFyQWN0aW9ucyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXJyYXk8Q29udGVudEFjdGlvblJlZj4+KFtdKTtcbiAgcHJpdmF0ZSBfc2hhcmVkTGlua1ZpZXdlclRvb2xiYXJBY3Rpb25zID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBcnJheTxDb250ZW50QWN0aW9uUmVmPj4oW10pO1xuICBwcml2YXRlIF9jb250ZXh0TWVudUFjdGlvbnMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFycmF5PENvbnRlbnRBY3Rpb25SZWY+PihbXSk7XG4gIHByaXZhdGUgX29wZW5XaXRoQWN0aW9ucyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXJyYXk8Q29udGVudEFjdGlvblJlZj4+KFtdKTtcbiAgcHJpdmF0ZSBfY3JlYXRlQWN0aW9ucyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXJyYXk8Q29udGVudEFjdGlvblJlZj4+KFtdKTtcbiAgcHJpdmF0ZSBfc2lkZWJhckFjdGlvbnMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFycmF5PENvbnRlbnRBY3Rpb25SZWY+PihbXSk7XG4gIHByaXZhdGUgX2JhZGdlcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXJyYXk8QmFkZ2U+PihbXSk7XG4gIHByaXZhdGUgX2ZpbGVzRG9jdW1lbnRMaXN0UHJlc2V0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBcnJheTxEb2N1bWVudExpc3RQcmVzZXRSZWY+PihbXSk7XG4gIHByaXZhdGUgX2N1c3RvbU1ldGFkYXRhUGFuZWxzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBcnJheTxDb250ZW50QWN0aW9uUmVmPj4oW10pO1xuICBwcml2YXRlIF9idWxrQWN0aW9ucyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXJyYXk8Q29udGVudEFjdGlvblJlZj4+KFtdKTtcblxuICBkb2N1bWVudExpc3RQcmVzZXRzOiB7XG4gICAgbGlicmFyaWVzOiBBcnJheTxEb2N1bWVudExpc3RQcmVzZXRSZWY+O1xuICAgIGZhdm9yaXRlTGlicmFyaWVzOiBBcnJheTxEb2N1bWVudExpc3RQcmVzZXRSZWY+O1xuICAgIHNoYXJlZDogQXJyYXk8RG9jdW1lbnRMaXN0UHJlc2V0UmVmPjtcbiAgICByZWNlbnQ6IEFycmF5PERvY3VtZW50TGlzdFByZXNldFJlZj47XG4gICAgZmF2b3JpdGVzOiBBcnJheTxEb2N1bWVudExpc3RQcmVzZXRSZWY+O1xuICAgIHRyYXNoY2FuOiBBcnJheTxEb2N1bWVudExpc3RQcmVzZXRSZWY+O1xuICAgIHNlYXJjaExpYnJhcmllczogQXJyYXk8RG9jdW1lbnRMaXN0UHJlc2V0UmVmPjtcbiAgICBzZWFyY2hSZXN1bHRzOiBBcnJheTxEb2N1bWVudExpc3RQcmVzZXRSZWY+O1xuICB9ID0ge1xuICAgIGxpYnJhcmllczogW10sXG4gICAgZmF2b3JpdGVMaWJyYXJpZXM6IFtdLFxuICAgIHNoYXJlZDogW10sXG4gICAgcmVjZW50OiBbXSxcbiAgICBmYXZvcml0ZXM6IFtdLFxuICAgIHRyYXNoY2FuOiBbXSxcbiAgICBzZWFyY2hMaWJyYXJpZXM6IFtdLFxuICAgIHNlYXJjaFJlc3VsdHM6IFtdXG4gIH07XG5cbiAgc2VsZWN0aW9uOiBTZWxlY3Rpb25TdGF0ZTtcbiAgbmF2aWdhdGlvbjogTmF2aWdhdGlvblN0YXRlO1xuICBwcm9maWxlOiBQcm9maWxlU3RhdGU7XG4gIHJlcG9zaXRvcnk6IFJlcG9zaXRvcnlJbmZvO1xuICB3aXRoQ3JlZGVudGlhbHM6IGJvb2xlYW47XG5cbiAgcmVmZXJlbmNlcyQ6IE9ic2VydmFibGU8RXh0ZW5zaW9uUmVmW10+O1xuICBmaWxlc0RvY3VtZW50TGlzdFByZXNldCQ6IE9ic2VydmFibGU8RG9jdW1lbnRMaXN0UHJlc2V0UmVmW10+ID0gdGhpcy5fZmlsZXNEb2N1bWVudExpc3RQcmVzZXQuYXNPYnNlcnZhYmxlKCk7XG5cbiAgY29uZmlnOiBFeHRlbnNpb25Db25maWc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGF1dGg6IEF1dGhlbnRpY2F0aW9uU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgc3RvcmU6IFN0b3JlPEFwcFN0b3JlPixcbiAgICBwcm90ZWN0ZWQgbG9hZGVyOiBFeHRlbnNpb25Mb2FkZXJTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBleHRlbnNpb25zOiBFeHRlbnNpb25TZXJ2aWNlLFxuICAgIHB1YmxpYyBwZXJtaXNzaW9uczogTm9kZVBlcm1pc3Npb25TZXJ2aWNlLFxuICAgIHB1YmxpYyBhcHBDb25maWc6IEFwcENvbmZpZ1NlcnZpY2UsXG4gICAgcHJvdGVjdGVkIG1hdEljb25SZWdpc3RyeTogTWF0SWNvblJlZ2lzdHJ5LFxuICAgIHByb3RlY3RlZCBzYW5pdGl6ZXI6IERvbVNhbml0aXplcixcbiAgICBwcm90ZWN0ZWQgbG9nZ2VyOiBMb2dTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMucmVmZXJlbmNlcyQgPSB0aGlzLl9yZWZlcmVuY2VzLmFzT2JzZXJ2YWJsZSgpO1xuXG4gICAgdGhpcy5zdG9yZS5zZWxlY3QoZ2V0UnVsZUNvbnRleHQpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICB0aGlzLnNlbGVjdGlvbiA9IHJlc3VsdC5zZWxlY3Rpb247XG4gICAgICB0aGlzLm5hdmlnYXRpb24gPSByZXN1bHQubmF2aWdhdGlvbjtcbiAgICAgIHRoaXMucHJvZmlsZSA9IHJlc3VsdC5wcm9maWxlO1xuICAgICAgdGhpcy5yZXBvc2l0b3J5ID0gcmVzdWx0LnJlcG9zaXRvcnk7XG5cbiAgICAgIGlmICh0aGlzLmNvbmZpZykge1xuICAgICAgICB0aGlzLnNldHVwKHRoaXMuY29uZmlnKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGxvYWQoKSB7XG4gICAgdGhpcy5jb25maWcgPSBhd2FpdCB0aGlzLmV4dGVuc2lvbnMubG9hZCgpO1xuICAgIHRoaXMuc2V0dXAodGhpcy5jb25maWcpO1xuICB9XG5cbiAgc2V0dXAoY29uZmlnOiBFeHRlbnNpb25Db25maWcpIHtcbiAgICBpZiAoIWNvbmZpZykge1xuICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0V4dGVuc2lvbiBjb25maWd1cmF0aW9uIG5vdCBmb3VuZCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2hlYWRlckFjdGlvbnMubmV4dCh0aGlzLmxvYWRlci5nZXRDb250ZW50QWN0aW9ucyhjb25maWcsICdmZWF0dXJlcy5oZWFkZXInKSk7XG4gICAgdGhpcy5fc2lkZWJhckFjdGlvbnMubmV4dCh0aGlzLmxvYWRlci5nZXRDb250ZW50QWN0aW9ucyhjb25maWcsICdmZWF0dXJlcy5zaWRlYmFyLnRvb2xiYXInKSk7XG4gICAgdGhpcy5fdG9vbGJhckFjdGlvbnMubmV4dCh0aGlzLmxvYWRlci5nZXRDb250ZW50QWN0aW9ucyhjb25maWcsICdmZWF0dXJlcy50b29sYmFyJykpO1xuICAgIHRoaXMuX3ZpZXdlclRvb2xiYXJBY3Rpb25zLm5leHQodGhpcy5sb2FkZXIuZ2V0Q29udGVudEFjdGlvbnMoY29uZmlnLCAnZmVhdHVyZXMudmlld2VyLnRvb2xiYXJBY3Rpb25zJykpO1xuICAgIHRoaXMuX3NoYXJlZExpbmtWaWV3ZXJUb29sYmFyQWN0aW9ucy5uZXh0KHRoaXMubG9hZGVyLmdldENvbnRlbnRBY3Rpb25zKGNvbmZpZywgJ2ZlYXR1cmVzLnZpZXdlci5zaGFyZWQudG9vbGJhckFjdGlvbnMnKSk7XG4gICAgdGhpcy5fY29udGV4dE1lbnVBY3Rpb25zLm5leHQodGhpcy5sb2FkZXIuZ2V0Q29udGVudEFjdGlvbnMoY29uZmlnLCAnZmVhdHVyZXMuY29udGV4dE1lbnUnKSk7XG4gICAgdGhpcy5fb3BlbldpdGhBY3Rpb25zLm5leHQodGhpcy5sb2FkZXIuZ2V0Q29udGVudEFjdGlvbnMoY29uZmlnLCAnZmVhdHVyZXMudmlld2VyLm9wZW5XaXRoJykpO1xuICAgIHRoaXMuX2NyZWF0ZUFjdGlvbnMubmV4dCh0aGlzLmxvYWRlci5nZXRFbGVtZW50czxDb250ZW50QWN0aW9uUmVmPihjb25maWcsICdmZWF0dXJlcy5jcmVhdGUnKSk7XG4gICAgdGhpcy5fYmFkZ2VzLm5leHQodGhpcy5sb2FkZXIuZ2V0RWxlbWVudHM8QmFkZ2U+KGNvbmZpZywgJ2ZlYXR1cmVzLmJhZGdlcycpKTtcbiAgICB0aGlzLl9maWxlc0RvY3VtZW50TGlzdFByZXNldC5uZXh0KHRoaXMuZ2V0RG9jdW1lbnRMaXN0UHJlc2V0KGNvbmZpZywgJ2ZpbGVzJykpO1xuICAgIHRoaXMuX2N1c3RvbU1ldGFkYXRhUGFuZWxzLm5leHQodGhpcy5sb2FkZXIuZ2V0RWxlbWVudHM8Q29udGVudEFjdGlvblJlZj4oY29uZmlnLCAnZmVhdHVyZXMuY3VzdG9tTWV0YWRhdGFQYW5lbHMnKSk7XG4gICAgdGhpcy5fYnVsa0FjdGlvbnMubmV4dCh0aGlzLmxvYWRlci5nZXRFbGVtZW50czxDb250ZW50QWN0aW9uUmVmPihjb25maWcsICdmZWF0dXJlcy5idWxrLWFjdGlvbnMnKSk7XG5cbiAgICB0aGlzLm5hdmJhciA9IHRoaXMubG9hZE5hdkJhcihjb25maWcpO1xuICAgIHRoaXMuc2lkZWJhclRhYnMgPSB0aGlzLmxvYWRlci5nZXRFbGVtZW50czxTaWRlYmFyVGFiUmVmPihjb25maWcsICdmZWF0dXJlcy5zaWRlYmFyLnRhYnMnKTtcbiAgICB0aGlzLmNvbnRlbnRNZXRhZGF0YSA9IHRoaXMubG9hZENvbnRlbnRNZXRhZGF0YShjb25maWcpO1xuICAgIHRoaXMuc2VhcmNoID0gdGhpcy5sb2FkU2VhcmNoRm9ybXMoY29uZmlnKTtcbiAgICB0aGlzLnNlYXJjaD8uZm9yRWFjaCgoc2VhcmNoU2V0KSA9PiB7XG4gICAgICBzZWFyY2hTZXQuY2F0ZWdvcmllcyA9IHNlYXJjaFNldC5jYXRlZ29yaWVzPy5maWx0ZXIoKGNhdGVnb3J5KSA9PiB0aGlzLmZpbHRlclZpc2libGUoY2F0ZWdvcnkpKTtcbiAgICB9KTtcblxuICAgIHRoaXMuZG9jdW1lbnRMaXN0UHJlc2V0cyA9IHtcbiAgICAgIGxpYnJhcmllczogdGhpcy5nZXREb2N1bWVudExpc3RQcmVzZXQoY29uZmlnLCAnbGlicmFyaWVzJyksXG4gICAgICBmYXZvcml0ZUxpYnJhcmllczogdGhpcy5nZXREb2N1bWVudExpc3RQcmVzZXQoY29uZmlnLCAnZmF2b3JpdGVMaWJyYXJpZXMnKSxcbiAgICAgIHNoYXJlZDogdGhpcy5nZXREb2N1bWVudExpc3RQcmVzZXQoY29uZmlnLCAnc2hhcmVkJyksXG4gICAgICByZWNlbnQ6IHRoaXMuZ2V0RG9jdW1lbnRMaXN0UHJlc2V0KGNvbmZpZywgJ3JlY2VudCcpLFxuICAgICAgZmF2b3JpdGVzOiB0aGlzLmdldERvY3VtZW50TGlzdFByZXNldChjb25maWcsICdmYXZvcml0ZXMnKSxcbiAgICAgIHRyYXNoY2FuOiB0aGlzLmdldERvY3VtZW50TGlzdFByZXNldChjb25maWcsICd0cmFzaGNhbicpLFxuICAgICAgc2VhcmNoTGlicmFyaWVzOiB0aGlzLmdldERvY3VtZW50TGlzdFByZXNldChjb25maWcsICdzZWFyY2gtbGlicmFyaWVzJyksXG4gICAgICBzZWFyY2hSZXN1bHRzOiB0aGlzLmdldERvY3VtZW50TGlzdFByZXNldChjb25maWcsICdzZWFyY2gtcmVzdWx0cycpXG4gICAgfTtcblxuICAgIHRoaXMud2l0aENyZWRlbnRpYWxzID0gdGhpcy5hcHBDb25maWcuZ2V0PGJvb2xlYW4+KCdhdXRoLndpdGhDcmVkZW50aWFscycsIGZhbHNlKTtcblxuICAgIGlmIChjb25maWcuZmVhdHVyZXM/LnZpZXdlcikge1xuICAgICAgdGhpcy52aWV3ZXJSdWxlcyA9IChjb25maWcuZmVhdHVyZXMudmlld2VyWydydWxlcyddIGFzIFZpZXdlclJ1bGVzKSB8fCB7fTtcbiAgICB9XG5cbiAgICB0aGlzLnJlZ2lzdGVySWNvbnMoY29uZmlnKTtcblxuICAgIGNvbnN0IHJlZmVyZW5jZXMgPSAoY29uZmlnLiRyZWZlcmVuY2VzIHx8IFtdKS5maWx0ZXIoKGVudHJ5KSA9PiB0eXBlb2YgZW50cnkgPT09ICdvYmplY3QnKS5tYXAoKGVudHJ5KSA9PiBlbnRyeSBhcyBFeHRlbnNpb25SZWYpO1xuICAgIHRoaXMuX3JlZmVyZW5jZXMubmV4dChyZWZlcmVuY2VzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZWdpc3Rlckljb25zKGNvbmZpZzogRXh0ZW5zaW9uQ29uZmlnKSB7XG4gICAgY29uc3QgaWNvbnM6IEFycmF5PEljb25SZWY+ID0gdGhpcy5sb2FkZXIuZ2V0RWxlbWVudHM8SWNvblJlZj4oY29uZmlnLCAnZmVhdHVyZXMuaWNvbnMnKS5maWx0ZXIoKGVudHJ5KSA9PiAhZW50cnkuZGlzYWJsZWQpO1xuXG4gICAgZm9yIChjb25zdCBpY29uIG9mIGljb25zKSB7XG4gICAgICBjb25zdCBbbnMsIGlkXSA9IGljb24uaWQuc3BsaXQoJzonKTtcbiAgICAgIGNvbnN0IHZhbHVlID0gaWNvbi52YWx1ZTtcblxuICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICB0aGlzLmxvZ2dlci53YXJuKGBNaXNzaW5nIGljb24gdmFsdWUgZm9yIFwiJHtpY29uLmlkfVwiLmApO1xuICAgICAgfSBlbHNlIGlmICghbnMgfHwgIWlkKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLndhcm4oYEluY29ycmVjdCBpY29uIGlkIGZvcm1hdC5gKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubWF0SWNvblJlZ2lzdHJ5LmFkZFN2Z0ljb25Jbk5hbWVzcGFjZShucywgaWQsIHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RSZXNvdXJjZVVybCh2YWx1ZSkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBsb2FkTmF2QmFyKGNvbmZpZzogRXh0ZW5zaW9uQ29uZmlnKTogQXJyYXk8TmF2QmFyR3JvdXBSZWY+IHtcbiAgICByZXR1cm4gdGhpcy5sb2FkZXIuZ2V0RWxlbWVudHM8TmF2QmFyR3JvdXBSZWY+KGNvbmZpZywgJ2ZlYXR1cmVzLm5hdmJhcicpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldERvY3VtZW50TGlzdFByZXNldChjb25maWc6IEV4dGVuc2lvbkNvbmZpZywga2V5OiBzdHJpbmcpOiBEb2N1bWVudExpc3RQcmVzZXRSZWZbXSB7XG4gICAgcmV0dXJuIHRoaXMubG9hZGVyXG4gICAgICAuZ2V0RWxlbWVudHM8RG9jdW1lbnRMaXN0UHJlc2V0UmVmPihjb25maWcsIGBmZWF0dXJlcy5kb2N1bWVudExpc3QuJHtrZXl9YClcbiAgICAgIC5maWx0ZXIoKGdyb3VwKSA9PiB0aGlzLmZpbHRlclZpc2libGUoZ3JvdXApKVxuICAgICAgLmZpbHRlcigoZW50cnkpID0+ICFlbnRyeS5kaXNhYmxlZClcbiAgICAgIC5tYXAoKGVudHJ5KSA9PiB7XG4gICAgICAgIGVudHJ5LnJlc2l6YWJsZSA9IGVudHJ5LnJlc2l6YWJsZSA/PyB0cnVlO1xuICAgICAgICByZXR1cm4gZW50cnk7XG4gICAgICB9KVxuICAgICAgLnNvcnQoc29ydEJ5T3JkZXIpO1xuICB9XG5cbiAgZ2V0QXBwbGljYXRpb25OYXZpZ2F0aW9uKGVsZW1lbnRzKTogQXJyYXk8TmF2QmFyR3JvdXBSZWY+IHtcbiAgICByZXR1cm4gZWxlbWVudHNcbiAgICAgIC5maWx0ZXIoKGdyb3VwKSA9PiB0aGlzLmZpbHRlclZpc2libGUoZ3JvdXApKVxuICAgICAgLm1hcCgoZ3JvdXApID0+ICh7XG4gICAgICAgIC4uLmdyb3VwLFxuICAgICAgICBpdGVtczogKGdyb3VwLml0ZW1zIHx8IFtdKVxuICAgICAgICAgIC5maWx0ZXIoKGVudHJ5KSA9PiAhZW50cnkuZGlzYWJsZWQpXG4gICAgICAgICAgLmZpbHRlcigoaXRlbSkgPT4gdGhpcy5maWx0ZXJWaXNpYmxlKGl0ZW0pKVxuICAgICAgICAgIC5zb3J0KHNvcnRCeU9yZGVyKVxuICAgICAgICAgIC5tYXAoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGlmIChpdGVtLmNoaWxkcmVuICYmIGl0ZW0uY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBpdGVtLmNoaWxkcmVuID0gaXRlbS5jaGlsZHJlblxuICAgICAgICAgICAgICAgIC5maWx0ZXIoKGVudHJ5KSA9PiAhZW50cnkuZGlzYWJsZWQpXG4gICAgICAgICAgICAgICAgLmZpbHRlcigoY2hpbGQpID0+IHRoaXMuZmlsdGVyVmlzaWJsZShjaGlsZCkpXG4gICAgICAgICAgICAgICAgLnNvcnQoc29ydEJ5T3JkZXIpXG4gICAgICAgICAgICAgICAgLm1hcCgoY2hpbGQpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChjaGlsZC5jb21wb25lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAuLi5jaGlsZFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBpZiAoIWNoaWxkLmNsaWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkUm91dGVSZWYgPSB0aGlzLmV4dGVuc2lvbnMuZ2V0Um91dGVCeUlkKGNoaWxkLnJvdXRlKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGRVcmwgPSBgLyR7Y2hpbGRSb3V0ZVJlZiA/IGNoaWxkUm91dGVSZWYucGF0aCA6IGNoaWxkLnJvdXRlfWA7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgLi4uY2hpbGQsXG4gICAgICAgICAgICAgICAgICAgICAgdXJsOiBjaGlsZFVybFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAuLi5jaGlsZCxcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBjaGlsZC5jbGlja1xuICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIC4uLml0ZW1cbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGl0ZW0uY29tcG9uZW50KSB7XG4gICAgICAgICAgICAgIHJldHVybiB7IC4uLml0ZW0gfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFpdGVtLmNsaWNrKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHJvdXRlUmVmID0gdGhpcy5leHRlbnNpb25zLmdldFJvdXRlQnlJZChpdGVtLnJvdXRlKTtcbiAgICAgICAgICAgICAgY29uc3QgdXJsID0gYC8ke3JvdXRlUmVmID8gcm91dGVSZWYucGF0aCA6IGl0ZW0ucm91dGV9YDtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgICAgIHVybFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgICBhY3Rpb246IGl0ZW0uY2xpY2tcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSlcbiAgICAgICAgICAucmVkdWNlKHJlZHVjZUVtcHR5TWVudXMsIFtdKVxuICAgICAgfSkpO1xuICB9XG5cbiAgbG9hZENvbnRlbnRNZXRhZGF0YShjb25maWc6IEV4dGVuc2lvbkNvbmZpZyk6IGFueSB7XG4gICAgY29uc3QgZWxlbWVudHMgPSB0aGlzLmxvYWRlci5nZXRFbGVtZW50czxhbnk+KGNvbmZpZywgJ2ZlYXR1cmVzLmNvbnRlbnQtbWV0YWRhdGEtcHJlc2V0cycpO1xuICAgIGlmICghZWxlbWVudHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBsZXQgcHJlc2V0cyA9IHt9O1xuICAgIHByZXNldHMgPSB0aGlzLmZpbHRlckRpc2FibGVkKG1lcmdlT2JqZWN0cyhwcmVzZXRzLCAuLi5lbGVtZW50cykpO1xuXG4gICAgY29uc3QgbWV0YWRhdGEgPSB0aGlzLmFwcENvbmZpZy5jb25maWdbJ2NvbnRlbnQtbWV0YWRhdGEnXSB8fCB7fTtcbiAgICBtZXRhZGF0YS5wcmVzZXRzID0gcHJlc2V0cztcblxuICAgIHRoaXMuYXBwQ29uZmlnLmNvbmZpZ1snY29udGVudC1tZXRhZGF0YSddID0gbWV0YWRhdGE7XG4gICAgcmV0dXJuIHsgcHJlc2V0cyB9O1xuICB9XG5cbiAgbG9hZFNlYXJjaEZvcm1zKGNvbmZpZzogRXh0ZW5zaW9uQ29uZmlnKTogYW55IHtcbiAgICBjb25zdCBlbGVtZW50cyA9IHRoaXMubG9hZGVyLmdldEVsZW1lbnRzPGFueT4oY29uZmlnLCAnZmVhdHVyZXMuc2VhcmNoJyk7XG4gICAgaWYgKCFlbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHNlYXJjaCA9IG1lcmdlQXJyYXlzKFtdLCBlbGVtZW50cylcbiAgICAgIC5maWx0ZXIoKGVudHJ5KSA9PiAhZW50cnkuZGlzYWJsZWQpXG4gICAgICAuZmlsdGVyKChlbnRyeSkgPT4gdGhpcy5maWx0ZXJWaXNpYmxlKGVudHJ5KSlcbiAgICAgIC5zb3J0KHNvcnRCeU9yZGVyKTtcblxuICAgIHRoaXMuYXBwQ29uZmlnLmNvbmZpZ1snc2VhcmNoJ10gPSBzZWFyY2g7XG4gICAgcmV0dXJuIHNlYXJjaDtcbiAgfVxuXG4gIGZpbHRlckRpc2FibGVkKG9iamVjdDogQXJyYXk8eyBkaXNhYmxlZDogYm9vbGVhbiB9PiB8IHsgZGlzYWJsZWQ6IGJvb2xlYW4gfSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KG9iamVjdCkpIHtcbiAgICAgIHJldHVybiBvYmplY3QuZmlsdGVyKChpdGVtKSA9PiAhaXRlbS5kaXNhYmxlZCkubWFwKChpdGVtKSA9PiB0aGlzLmZpbHRlckRpc2FibGVkKGl0ZW0pKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAoIW9iamVjdC5kaXNhYmxlZCkge1xuICAgICAgICBPYmplY3Qua2V5cyhvYmplY3QpLmZvckVhY2goKHByb3ApID0+IHtcbiAgICAgICAgICBvYmplY3RbcHJvcF0gPSB0aGlzLmZpbHRlckRpc2FibGVkKG9iamVjdFtwcm9wXSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gb2JqZWN0O1xuICAgIH1cbiAgfVxuXG4gIGdldFNpZGViYXJUYWJzKCk6IEFycmF5PFNpZGViYXJUYWJSZWY+IHtcbiAgICByZXR1cm4gdGhpcy5zaWRlYmFyVGFicy5maWx0ZXIoKGFjdGlvbikgPT4gdGhpcy5maWx0ZXJWaXNpYmxlKGFjdGlvbikpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRBY3Rpb25EaXNhYmxlZEZyb21SdWxlKGFjdGlvbjogQ29udGVudEFjdGlvblJlZikge1xuICAgIGxldCBkaXNhYmxlZCA9IGZhbHNlO1xuXG4gICAgaWYgKGFjdGlvbj8ucnVsZXM/LmVuYWJsZWQpIHtcbiAgICAgIGRpc2FibGVkID0gIXRoaXMuZXh0ZW5zaW9ucy5ldmFsdWF0ZVJ1bGUoYWN0aW9uLnJ1bGVzLmVuYWJsZWQsIHRoaXMpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAuLi5hY3Rpb24sXG4gICAgICBkaXNhYmxlZFxuICAgIH07XG4gIH1cblxuICB1cGRhdGVTaWRlYmFyQWN0aW9ucygpIHtcbiAgICB0aGlzLl9zaWRlYmFyQWN0aW9ucy5uZXh0KHRoaXMubG9hZGVyLmdldENvbnRlbnRBY3Rpb25zKHRoaXMuY29uZmlnLCAnZmVhdHVyZXMuc2lkZWJhci50b29sYmFyJykpO1xuICB9XG5cbiAgZ2V0Q3JlYXRlQWN0aW9ucygpOiBPYnNlcnZhYmxlPEFycmF5PENvbnRlbnRBY3Rpb25SZWY+PiB7XG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZUFjdGlvbnMucGlwZShcbiAgICAgIG1hcCgoY3JlYXRlQWN0aW9ucykgPT5cbiAgICAgICAgY3JlYXRlQWN0aW9uc1xuICAgICAgICAgIC5maWx0ZXIoKGFjdGlvbikgPT4gdGhpcy5maWx0ZXJWaXNpYmxlKGFjdGlvbikpXG4gICAgICAgICAgLm1hcCgoYWN0aW9uKSA9PiB0aGlzLmNvcHlBY3Rpb24oYWN0aW9uKSlcbiAgICAgICAgICAubWFwKChhY3Rpb24pID0+IHRoaXMuYnVpbGRNZW51KGFjdGlvbikpXG4gICAgICAgICAgLm1hcCgoYWN0aW9uKSA9PiB0aGlzLnNldEFjdGlvbkRpc2FibGVkRnJvbVJ1bGUoYWN0aW9uKSlcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgZ2V0QmFkZ2VzKG5vZGU6IE5vZGVFbnRyeSk6IE9ic2VydmFibGU8QXJyYXk8QmFkZ2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuX2JhZGdlcy5waXBlKG1hcCgoYmFkZ2VzKSA9PiBiYWRnZXMuZmlsdGVyKChiYWRnZSkgPT4gdGhpcy5ldmFsdWF0ZVJ1bGUoYmFkZ2UucnVsZXMudmlzaWJsZSwgbm9kZSkpKSk7XG4gIH1cblxuICBnZXRDdXN0b21NZXRhZGF0YVBhbmVscyhub2RlOiBOb2RlRW50cnkpOiBPYnNlcnZhYmxlPEFycmF5PENvbnRlbnRBY3Rpb25SZWY+PiB7XG4gICAgcmV0dXJuIHRoaXMuX2N1c3RvbU1ldGFkYXRhUGFuZWxzLnBpcGUobWFwKChwYW5lbHMpID0+IHBhbmVscy5maWx0ZXIoKHBhbmVsKSA9PiB0aGlzLmV2YWx1YXRlUnVsZShwYW5lbC5ydWxlcy52aXNpYmxlLCBub2RlKSkpKTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRNZW51KGFjdGlvblJlZjogQ29udGVudEFjdGlvblJlZik6IENvbnRlbnRBY3Rpb25SZWYge1xuICAgIGlmIChhY3Rpb25SZWYudHlwZSA9PT0gQ29udGVudEFjdGlvblR5cGUubWVudSAmJiBhY3Rpb25SZWYuY2hpbGRyZW4gJiYgYWN0aW9uUmVmLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGNoaWxkcmVuID0gYWN0aW9uUmVmLmNoaWxkcmVuLmZpbHRlcigoYWN0aW9uKSA9PiB0aGlzLmZpbHRlclZpc2libGUoYWN0aW9uKSkubWFwKChhY3Rpb24pID0+IHRoaXMuYnVpbGRNZW51KGFjdGlvbikpO1xuXG4gICAgICBhY3Rpb25SZWYuY2hpbGRyZW4gPSBjaGlsZHJlblxuICAgICAgICAubWFwKChhY3Rpb24pID0+IHRoaXMuc2V0QWN0aW9uRGlzYWJsZWRGcm9tUnVsZShhY3Rpb24pKVxuICAgICAgICAuc29ydChzb3J0QnlPcmRlcilcbiAgICAgICAgLnJlZHVjZShyZWR1Y2VFbXB0eU1lbnVzLCBbXSlcbiAgICAgICAgLnJlZHVjZShyZWR1Y2VTZXBhcmF0b3JzLCBbXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFjdGlvblJlZjtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QWxsb3dlZEFjdGlvbnMoYWN0aW9uczogQ29udGVudEFjdGlvblJlZltdKTogQ29udGVudEFjdGlvblJlZltdIHtcbiAgICByZXR1cm4gKGFjdGlvbnMgfHwgW10pXG4gICAgICAuZmlsdGVyKChhY3Rpb24pID0+IHRoaXMuZmlsdGVyVmlzaWJsZShhY3Rpb24pKVxuICAgICAgLm1hcCgoYWN0aW9uKSA9PiB7XG4gICAgICAgIGlmIChhY3Rpb24udHlwZSA9PT0gQ29udGVudEFjdGlvblR5cGUubWVudSkge1xuICAgICAgICAgIGNvbnN0IGNvcHkgPSB0aGlzLmNvcHlBY3Rpb24oYWN0aW9uKTtcbiAgICAgICAgICBpZiAoY29weS5jaGlsZHJlbiAmJiBjb3B5LmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvcHkuY2hpbGRyZW4gPSBjb3B5LmNoaWxkcmVuXG4gICAgICAgICAgICAgIC5maWx0ZXIoKGVudHJ5KSA9PiAhZW50cnkuZGlzYWJsZWQpXG4gICAgICAgICAgICAgIC5maWx0ZXIoKGNoaWxkQWN0aW9uKSA9PiB0aGlzLmZpbHRlclZpc2libGUoY2hpbGRBY3Rpb24pKVxuICAgICAgICAgICAgICAuc29ydChzb3J0QnlPcmRlcilcbiAgICAgICAgICAgICAgLnJlZHVjZShyZWR1Y2VTZXBhcmF0b3JzLCBbXSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBjb3B5O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY3Rpb247XG4gICAgICB9KVxuICAgICAgLm1hcCgoYWN0aW9uKSA9PiB0aGlzLnNldEFjdGlvbkRpc2FibGVkRnJvbVJ1bGUoYWN0aW9uKSlcbiAgICAgIC5yZWR1Y2UocmVkdWNlRW1wdHlNZW51cywgW10pXG4gICAgICAucmVkdWNlKHJlZHVjZVNlcGFyYXRvcnMsIFtdKTtcbiAgfVxuXG4gIGdldEFsbG93ZWRTaWRlYmFyQWN0aW9ucygpOiBPYnNlcnZhYmxlPEFycmF5PENvbnRlbnRBY3Rpb25SZWY+PiB7XG4gICAgcmV0dXJuIHRoaXMuX3NpZGViYXJBY3Rpb25zLnBpcGUobWFwKChzaWRlYmFyQWN0aW9ucykgPT4gdGhpcy5nZXRBbGxvd2VkQWN0aW9ucyhzaWRlYmFyQWN0aW9ucykpKTtcbiAgfVxuXG4gIGdldEFsbG93ZWRUb29sYmFyQWN0aW9ucygpOiBPYnNlcnZhYmxlPEFycmF5PENvbnRlbnRBY3Rpb25SZWY+PiB7XG4gICAgcmV0dXJuIHRoaXMuX3Rvb2xiYXJBY3Rpb25zLnBpcGUobWFwKCh0b29sYmFyQWN0aW9ucykgPT4gdGhpcy5nZXRBbGxvd2VkQWN0aW9ucyh0b29sYmFyQWN0aW9ucykpKTtcbiAgfVxuXG4gIGdldFZpZXdlclRvb2xiYXJBY3Rpb25zKCk6IE9ic2VydmFibGU8QXJyYXk8Q29udGVudEFjdGlvblJlZj4+IHtcbiAgICByZXR1cm4gdGhpcy5fdmlld2VyVG9vbGJhckFjdGlvbnMucGlwZShtYXAoKHZpZXdlclRvb2xiYXJBY3Rpb25zKSA9PiB0aGlzLmdldEFsbG93ZWRBY3Rpb25zKHZpZXdlclRvb2xiYXJBY3Rpb25zKSkpO1xuICB9XG5cbiAgZ2V0QnVsa0FjdGlvbnMoKTogT2JzZXJ2YWJsZTxBcnJheTxDb250ZW50QWN0aW9uUmVmPj4ge1xuICAgIHJldHVybiB0aGlzLl9idWxrQWN0aW9ucy5waXBlKG1hcCgoYnVsa0FjdGlvbnMpID0+IHRoaXMuZ2V0QWxsb3dlZEFjdGlvbnMoYnVsa0FjdGlvbnMpKSk7XG4gIH1cblxuICBnZXRPcGVuV2l0aEFjdGlvbnMoKTogT2JzZXJ2YWJsZTxBcnJheTxDb250ZW50QWN0aW9uUmVmPj4ge1xuICAgIHJldHVybiB0aGlzLl9vcGVuV2l0aEFjdGlvbnMucGlwZShtYXAoKG9wZW5XaXRoQWN0aW9ucykgPT4gdGhpcy5nZXRBbGxvd2VkQWN0aW9ucyhvcGVuV2l0aEFjdGlvbnMpKSk7XG4gIH1cblxuICBnZXRTaGFyZWRMaW5rVmlld2VyVG9vbGJhckFjdGlvbnMoKTogT2JzZXJ2YWJsZTxBcnJheTxDb250ZW50QWN0aW9uUmVmPj4ge1xuICAgIHJldHVybiB0aGlzLl9zaGFyZWRMaW5rVmlld2VyVG9vbGJhckFjdGlvbnMucGlwZShcbiAgICAgIG1hcCgoc2hhcmVkTGlua1ZpZXdlclRvb2xiYXJBY3Rpb25zKSA9PiAoIXRoaXMuc2VsZWN0aW9uLmlzRW1wdHkgPyB0aGlzLmdldEFsbG93ZWRBY3Rpb25zKHNoYXJlZExpbmtWaWV3ZXJUb29sYmFyQWN0aW9ucykgOiBbXSkpXG4gICAgKTtcbiAgfVxuXG4gIGdldEhlYWRlckFjdGlvbnMoKTogT2JzZXJ2YWJsZTxBcnJheTxDb250ZW50QWN0aW9uUmVmPj4ge1xuICAgIHJldHVybiB0aGlzLl9oZWFkZXJBY3Rpb25zLnBpcGUoXG4gICAgICBtYXAoKGhlYWRlckFjdGlvbnMpID0+XG4gICAgICAgIGhlYWRlckFjdGlvbnNcbiAgICAgICAgICAuZmlsdGVyKChhY3Rpb24pID0+IHRoaXMuZmlsdGVyVmlzaWJsZShhY3Rpb24pKVxuICAgICAgICAgIC5tYXAoKGFjdGlvbikgPT4ge1xuICAgICAgICAgICAgaWYgKGFjdGlvbi50eXBlID09PSBDb250ZW50QWN0aW9uVHlwZS5tZW51KSB7XG4gICAgICAgICAgICAgIGNvbnN0IGNvcHkgPSB0aGlzLmNvcHlBY3Rpb24oYWN0aW9uKTtcbiAgICAgICAgICAgICAgaWYgKGNvcHkuY2hpbGRyZW4gJiYgY29weS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgY29weS5jaGlsZHJlbiA9IGNvcHkuY2hpbGRyZW5cbiAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKGNoaWxkQWN0aW9uKSA9PiB0aGlzLmZpbHRlclZpc2libGUoY2hpbGRBY3Rpb24pKVxuICAgICAgICAgICAgICAgICAgLnNvcnQoc29ydEJ5T3JkZXIpXG4gICAgICAgICAgICAgICAgICAucmVkdWNlKHJlZHVjZUVtcHR5TWVudXMsIFtdKVxuICAgICAgICAgICAgICAgICAgLnJlZHVjZShyZWR1Y2VTZXBhcmF0b3JzLCBbXSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIGNvcHk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBhY3Rpb247XG4gICAgICAgICAgfSlcbiAgICAgICAgICAubWFwKChhY3Rpb24pID0+IHRoaXMuc2V0QWN0aW9uRGlzYWJsZWRGcm9tUnVsZShhY3Rpb24pKVxuICAgICAgICAgIC5zb3J0KHNvcnRCeU9yZGVyKVxuICAgICAgICAgIC5yZWR1Y2UocmVkdWNlRW1wdHlNZW51cywgW10pXG4gICAgICAgICAgLnJlZHVjZShyZWR1Y2VTZXBhcmF0b3JzLCBbXSlcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgZ2V0QWxsb3dlZENvbnRleHRNZW51QWN0aW9ucygpOiBPYnNlcnZhYmxlPEFycmF5PENvbnRlbnRBY3Rpb25SZWY+PiB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbnRleHRNZW51QWN0aW9ucy5waXBlKG1hcCgoY29udGV4dE1lbnVBY3Rpb25zKSA9PiAoIXRoaXMuc2VsZWN0aW9uLmlzRW1wdHkgPyB0aGlzLmdldEFsbG93ZWRBY3Rpb25zKGNvbnRleHRNZW51QWN0aW9ucykgOiBbXSkpKTtcbiAgfVxuXG4gIGNvcHlBY3Rpb24oYWN0aW9uOiBDb250ZW50QWN0aW9uUmVmKTogQ29udGVudEFjdGlvblJlZiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmFjdGlvbixcbiAgICAgIGNoaWxkcmVuOiAoYWN0aW9uLmNoaWxkcmVuIHx8IFtdKS5tYXAoKGNoaWxkKSA9PiB0aGlzLmNvcHlBY3Rpb24oY2hpbGQpKVxuICAgIH07XG4gIH1cblxuICBmaWx0ZXJWaXNpYmxlKGFjdGlvbjogQ29udGVudEFjdGlvblJlZiB8IFNpZGViYXJUYWJSZWYgfCBEb2N1bWVudExpc3RQcmVzZXRSZWYgfCBTZWFyY2hDYXRlZ29yeSk6IGJvb2xlYW4ge1xuICAgIGlmIChhY3Rpb24/LnJ1bGVzPy52aXNpYmxlKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShhY3Rpb24ucnVsZXMudmlzaWJsZSkpIHtcbiAgICAgICAgcmV0dXJuIGFjdGlvbi5ydWxlcy52aXNpYmxlLmV2ZXJ5KChydWxlKSA9PiB0aGlzLmV4dGVuc2lvbnMuZXZhbHVhdGVSdWxlKHJ1bGUsIHRoaXMpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmV4dGVuc2lvbnMuZXZhbHVhdGVSdWxlKGFjdGlvbi5ydWxlcy52aXNpYmxlLCB0aGlzKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpc1ZpZXdlckV4dGVuc2lvbkRpc2FibGVkKGV4dGVuc2lvbjogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKGV4dGVuc2lvbikge1xuICAgICAgaWYgKGV4dGVuc2lvbi5kaXNhYmxlZCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGV4dGVuc2lvbi5ydWxlcz8uZGlzYWJsZWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXh0ZW5zaW9ucy5ldmFsdWF0ZVJ1bGUoZXh0ZW5zaW9uLnJ1bGVzLmRpc2FibGVkLCB0aGlzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBydW5BY3Rpb25CeUlkKGlkOiBzdHJpbmcsIGFkZGl0aW9uYWxQYXlsb2FkPzogYW55KSB7XG4gICAgY29uc3QgYWN0aW9uID0gdGhpcy5leHRlbnNpb25zLmdldEFjdGlvbkJ5SWQoaWQpO1xuICAgIGlmIChhY3Rpb24pIHtcbiAgICAgIGNvbnN0IHsgdHlwZSwgcGF5bG9hZCB9ID0gYWN0aW9uO1xuICAgICAgY29uc3QgY29udGV4dCA9IHtcbiAgICAgICAgc2VsZWN0aW9uOiB0aGlzLnNlbGVjdGlvblxuICAgICAgfTtcbiAgICAgIGNvbnN0IGV4cHJlc3Npb24gPSB0aGlzLmV4dGVuc2lvbnMucnVuRXhwcmVzc2lvbihwYXlsb2FkLCBjb250ZXh0KTtcblxuICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaCh7XG4gICAgICAgIHR5cGUsXG4gICAgICAgIHBheWxvYWQ6IGV4cHJlc3Npb24sXG4gICAgICAgIGNvbmZpZ3VyYXRpb246IGFkZGl0aW9uYWxQYXlsb2FkXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IGlkLFxuICAgICAgICBjb25maWd1cmF0aW9uOiBhZGRpdGlvbmFsUGF5bG9hZFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLy8gdG9kbzogbW92ZSB0byBBREYvUnVsZVNlcnZpY2VcbiAgaXNSdWxlRGVmaW5lZChydWxlSWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIShydWxlSWQgJiYgdGhpcy5nZXRFdmFsdWF0b3IocnVsZUlkKSk7XG4gIH1cblxuICAvLyB0b2RvOiBtb3ZlIHRvIEFERi9SdWxlU2VydmljZVxuICBldmFsdWF0ZVJ1bGUocnVsZUlkOiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZXZhbHVhdG9yID0gdGhpcy5nZXRFdmFsdWF0b3IocnVsZUlkKTtcblxuICAgIGlmIChldmFsdWF0b3IpIHtcbiAgICAgIHJldHVybiBldmFsdWF0b3IodGhpcywgLi4uYXJncyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZ2V0RXZhbHVhdG9yKGtleTogc3RyaW5nKTogUnVsZUV2YWx1YXRvciB7XG4gICAgcmV0dXJuIHRoaXMuZXh0ZW5zaW9ucy5nZXRFdmFsdWF0b3Ioa2V5KTtcbiAgfVxuXG4gIGNhblByZXZpZXdOb2RlKG5vZGU6IE5vZGVFbnRyeSkge1xuICAgIGNvbnN0IHJ1bGVzID0gdGhpcy52aWV3ZXJSdWxlcztcblxuICAgIGlmICh0aGlzLmlzUnVsZURlZmluZWQocnVsZXMuY2FuUHJldmlldykpIHtcbiAgICAgIGNvbnN0IGNhblByZXZpZXcgPSB0aGlzLmV2YWx1YXRlUnVsZShydWxlcy5jYW5QcmV2aWV3LCBub2RlKTtcblxuICAgICAgaWYgKCFjYW5QcmV2aWV3KSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGNhblNob3dWaWV3ZXJOYXZpZ2F0aW9uKG5vZGU6IE5vZGVFbnRyeSkge1xuICAgIGNvbnN0IHJ1bGVzID0gdGhpcy52aWV3ZXJSdWxlcztcblxuICAgIGlmICh0aGlzLmlzUnVsZURlZmluZWQocnVsZXMuc2hvd05hdmlnYXRpb24pKSB7XG4gICAgICBjb25zdCBzaG93TmF2aWdhdGlvbiA9IHRoaXMuZXZhbHVhdGVSdWxlKHJ1bGVzLnNob3dOYXZpZ2F0aW9uLCBub2RlKTtcbiAgICAgIGlmICghc2hvd05hdmlnYXRpb24pIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgYnVsa0FjdGlvbkV4ZWN1dGVkKCk6IHZvaWQge1xuICAgIHRoaXMuYnVsa0FjdGlvbkV4ZWN1dGVkJC5uZXh0KCk7XG4gIH1cbn1cbiJdfQ==
|
|
489
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmV4dGVuc2lvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYWNhLXNoYXJlZC9zcmMvbGliL3NlcnZpY2VzL2FwcC5leHRlbnNpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUVILE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNwQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDekQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3pELE9BQU8sRUFBWSxjQUFjLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN0RSxPQUFPLEVBRUwsaUJBQWlCLEVBR2pCLHNCQUFzQixFQUV0QixnQkFBZ0IsRUFFaEIsV0FBVyxFQUNYLFlBQVksRUFJWixnQkFBZ0IsRUFDaEIsZ0JBQWdCLEVBS2hCLFdBQVcsRUFDWixNQUFNLDBCQUEwQixDQUFDO0FBQ2xDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxxQkFBcUIsRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN6RixPQUFPLEVBQUUsZUFBZSxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUk1RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7O0FBTXJDLE1BQU0sT0FBTyxtQkFBbUI7SUF1RHJCO0lBQ0c7SUFDQTtJQUNBO0lBQ0g7SUFDQTtJQUNHO0lBQ0E7SUFDQTtJQTlESixXQUFXLEdBQUcsSUFBSSxlQUFlLENBQWlCLEVBQUUsQ0FBQyxDQUFDO0lBQzlELG1CQUFtQixHQUFHLElB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QUFDO1FBRS9CLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQztZQUM3QyxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDckUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUNwQixPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNsQyxDQUFDO3VHQXpnQlUsbUJBQW1COzJHQUFuQixtQkFBbUIsY0FGbEIsTUFBTTs7MkZBRVAsbUJBQW1CO2tCQUgvQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogQ29weXJpZ2h0IMKpIDIwMDUtMjAyNSBIeWxhbmQgU29mdHdhcmUsIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIEFsZnJlc2NvIEV4YW1wbGUgQ29udGVudCBBcHBsaWNhdGlvblxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBBbGZyZXNjbyBFeGFtcGxlIENvbnRlbnQgQXBwbGljYXRpb24uXG4gKiBJZiB0aGUgc29mdHdhcmUgd2FzIHB1cmNoYXNlZCB1bmRlciBhIHBhaWQgQWxmcmVzY28gbGljZW5zZSwgdGhlIHRlcm1zIG9mXG4gKiB0aGUgcGFpZCBsaWNlbnNlIGFncmVlbWVudCB3aWxsIHByZXZhaWwuIE90aGVyd2lzZSwgdGhlIHNvZnR3YXJlIGlzXG4gKiBwcm92aWRlZCB1bmRlciB0aGUgZm9sbG93aW5nIG9wZW4gc291cmNlIGxpY2Vuc2UgdGVybXM6XG4gKlxuICogVGhlIEFsZnJlc2NvIEV4YW1wbGUgQ29udGVudCBBcHBsaWNhdGlvbiBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuICpcbiAqIFRoZSBBbGZyZXNjbyBFeGFtcGxlIENvbnRlbnQgQXBwbGljYXRpb24gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGVcbiAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICogZnJvbSBIeWxhbmQgU29mdHdhcmUuIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiAqL1xuXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7IE1hdEljb25SZWdpc3RyeSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBBcHBTdG9yZSwgZ2V0UnVsZUNvbnRleHQgfSBmcm9tICdAYWxmcmVzY28vYWNhLXNoYXJlZC9zdG9yZSc7XG5pbXBvcnQge1xuICBDb250ZW50QWN0aW9uUmVmLFxuICBDb250ZW50QWN0aW9uVHlwZSxcbiAgRG9jdW1lbnRMaXN0UHJlc2V0UmVmLFxuICBFeHRlbnNpb25Db25maWcsXG4gIEV4dGVuc2lvbkxvYWRlclNlcnZpY2UsXG4gIEV4dGVuc2lvblJlZixcbiAgRXh0ZW5zaW9uU2VydmljZSxcbiAgSWNvblJlZixcbiAgbWVyZ2VBcnJheXMsXG4gIG1lcmdlT2JqZWN0cyxcbiAgTmF2QmFyR3JvdXBSZWYsXG4gIE5hdmlnYXRpb25TdGF0ZSxcbiAgUHJvZmlsZVN0YXRlLFxuICByZWR1Y2VFbXB0eU1lbnVzLFxuICByZWR1Y2VTZXBhcmF0b3JzLFxuICBSdWxlQ29udGV4dCxcbiAgUnVsZUV2YWx1YXRvcixcbiAgU2VsZWN0aW9uU3RhdGUsXG4gIFNpZGViYXJUYWJSZWYsXG4gIHNvcnRCeU9yZGVyXG59IGZyb20gJ0BhbGZyZXNjby9hZGYtZXh0ZW5zaW9ucyc7XG5pbXBvcnQgeyBBcHBDb25maWdTZXJ2aWNlLCBBdXRoZW50aWNhdGlvblNlcnZpY2UsIExvZ1NlcnZpY2UgfSBmcm9tICdAYWxmcmVzY28vYWRmLWNvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBOb2RlRW50cnksIFJlcG9zaXRvcnlJbmZvIH0gZnJvbSAnQGFsZnJlc2NvL2pzLWFwaSc7XG5pbXBvcnQgeyBWaWV3ZXJSdWxlcyB9IGZyb20gJy4uL21vZGVscy92aWV3ZXIucnVsZXMnO1xuaW1wb3J0IHsgQmFkZ2UgfSBmcm9tICcuLi9tb2RlbHMvdHlwZXMnO1xuaW1wb3J0IHsgTm9kZVBlcm1pc3Npb25TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvbm9kZS1wZXJtaXNzaW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgU2VhcmNoQ2F0ZWdvcnkgfSBmcm9tICdAYWxmcmVzY28vYWRmLWNvbnRlbnQtc2VydmljZXMnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBBcHBFeHRlbnNpb25TZXJ2aWNlIGltcGxlbWVudHMgUnVsZUNvbnRleHQge1xuICBwcml2YXRlIF9yZWZlcmVuY2VzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxFeHRlbnNpb25SZWZbXT4oW10pO1xuICBidWxrQWN0aW9uRXhlY3V0ZWQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBuYXZiYXI6IEFycmF5PE5hdkJhckdyb3VwUmVmPiA9IFtdO1xuICBzaWRlYmFyVGFiczogQXJyYXk8U2lkZWJhclRhYlJlZj4gPSBbXTtcbiAgY29udGVudE1ldGFkYXRhOiBhbnk7XG4gIHNlYXJjaDogYW55O1xuICB2aWV3ZXJSdWxlczogVmlld2VyUnVsZXMgPSB7fTtcblxuICBwcml2YXRlIF9oZWFkZXJBY3Rpb25zID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBcnJheTxDb250ZW50QWN0aW9uUmVmPj4oW10pO1xuICBwcml2YXRlIF90b29sYmFyQWN0aW9ucyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXJyYXk8Q29udGVudEFjdGlvblJlZj4+KFtdKTtcbiAgcHJpdmF0ZSBfdmlld2VyVG9vbGJhckFjdGlvbnMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFycmF5PENvbnRlbnRBY3Rpb25SZWY+PihbXSk7XG4gIHByaXZhdGUgX3NoYXJlZExpbmtWaWV3ZXJUb29sYmFyQWN0aW9ucyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXJyYXk8Q29udGVudEFjdGlvblJlZj4+KFtdKTtcbiAgcHJpdmF0ZSBfY29udGV4dE1lbnVBY3Rpb25zID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBcnJheTxDb250ZW50QWN0aW9uUmVmPj4oW10pO1xuICBwcml2YXRlIF9vcGVuV2l0aEFjdGlvbnMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFycmF5PENvbnRlbnRBY3Rpb25SZWY+PihbXSk7XG4gIHByaXZhdGUgX2NyZWF0ZUFjdGlvbnMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFycmF5PENvbnRlbnRBY3Rpb25SZWY+PihbXSk7XG4gIHByaXZhdGUgX3NpZGViYXJBY3Rpb25zID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBcnJheTxDb250ZW50QWN0aW9uUmVmPj4oW10pO1xuICBwcml2YXRlIF9iYWRnZXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFycmF5PEJhZGdlPj4oW10pO1xuICBwcml2YXRlIF9maWxlc0RvY3VtZW50TGlzdFByZXNldCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXJyYXk8RG9jdW1lbnRMaXN0UHJlc2V0UmVmPj4oW10pO1xuICBwcml2YXRlIF9jdXN0b21NZXRhZGF0YVBhbmVscyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXJyYXk8Q29udGVudEFjdGlvblJlZj4+KFtdKTtcbiAgcHJpdmF0ZSBfYnVsa0FjdGlvbnMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFycmF5PENvbnRlbnRBY3Rpb25SZWY+PihbXSk7XG5cbiAgZG9jdW1lbnRMaXN0UHJlc2V0czoge1xuICAgIGxpYnJhcmllczogQXJyYXk8RG9jdW1lbnRMaXN0UHJlc2V0UmVmPjtcbiAgICBmYXZvcml0ZUxpYnJhcmllczogQXJyYXk8RG9jdW1lbnRMaXN0UHJlc2V0UmVmPjtcbiAgICBzaGFyZWQ6IEFycmF5PERvY3VtZW50TGlzdFByZXNldFJlZj47XG4gICAgcmVjZW50OiBBcnJheTxEb2N1bWVudExpc3RQcmVzZXRSZWY+O1xuICAgIGZhdm9yaXRlczogQXJyYXk8RG9jdW1lbnRMaXN0UHJlc2V0UmVmPjtcbiAgICB0cmFzaGNhbjogQXJyYXk8RG9jdW1lbnRMaXN0UHJlc2V0UmVmPjtcbiAgICBzZWFyY2hMaWJyYXJpZXM6IEFycmF5PERvY3VtZW50TGlzdFByZXNldFJlZj47XG4gICAgc2VhcmNoUmVzdWx0czogQXJyYXk8RG9jdW1lbnRMaXN0UHJlc2V0UmVmPjtcbiAgfSA9IHtcbiAgICBsaWJyYXJpZXM6IFtdLFxuICAgIGZhdm9yaXRlTGlicmFyaWVzOiBbXSxcbiAgICBzaGFyZWQ6IFtdLFxuICAgIHJlY2VudDogW10sXG4gICAgZmF2b3JpdGVzOiBbXSxcbiAgICB0cmFzaGNhbjogW10sXG4gICAgc2VhcmNoTGlicmFyaWVzOiBbXSxcbiAgICBzZWFyY2hSZXN1bHRzOiBbXVxuICB9O1xuXG4gIHNlbGVjdGlvbjogU2VsZWN0aW9uU3RhdGU7XG4gIG5hdmlnYXRpb246IE5hdmlnYXRpb25TdGF0ZTtcbiAgcHJvZmlsZTogUHJvZmlsZVN0YXRlO1xuICByZXBvc2l0b3J5OiBSZXBvc2l0b3J5SW5mbztcbiAgd2l0aENyZWRlbnRpYWxzOiBib29sZWFuO1xuXG4gIHJlZmVyZW5jZXMkOiBPYnNlcnZhYmxlPEV4dGVuc2lvblJlZltdPjtcbiAgZmlsZXNEb2N1bWVudExpc3RQcmVzZXQkOiBPYnNlcnZhYmxlPERvY3VtZW50TGlzdFByZXNldFJlZltdPiA9IHRoaXMuX2ZpbGVzRG9jdW1lbnRMaXN0UHJlc2V0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIGNvbmZpZzogRXh0ZW5zaW9uQ29uZmlnO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBhdXRoOiBBdXRoZW50aWNhdGlvblNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIHN0b3JlOiBTdG9yZTxBcHBTdG9yZT4sXG4gICAgcHJvdGVjdGVkIGxvYWRlcjogRXh0ZW5zaW9uTG9hZGVyU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgZXh0ZW5zaW9uczogRXh0ZW5zaW9uU2VydmljZSxcbiAgICBwdWJsaWMgcGVybWlzc2lvbnM6IE5vZGVQZXJtaXNzaW9uU2VydmljZSxcbiAgICBwdWJsaWMgYXBwQ29uZmlnOiBBcHBDb25maWdTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBtYXRJY29uUmVnaXN0cnk6IE1hdEljb25SZWdpc3RyeSxcbiAgICBwcm90ZWN0ZWQgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXG4gICAgcHJvdGVjdGVkIGxvZ2dlcjogTG9nU2VydmljZVxuICApIHtcbiAgICB0aGlzLnJlZmVyZW5jZXMkID0gdGhpcy5fcmVmZXJlbmNlcy5hc09ic2VydmFibGUoKTtcblxuICAgIHRoaXMuc3RvcmUuc2VsZWN0KGdldFJ1bGVDb250ZXh0KS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgdGhpcy5zZWxlY3Rpb24gPSByZXN1bHQuc2VsZWN0aW9uO1xuICAgICAgdGhpcy5uYXZpZ2F0aW9uID0gcmVzdWx0Lm5hdmlnYXRpb247XG4gICAgICB0aGlzLnByb2ZpbGUgPSByZXN1bHQucHJvZmlsZTtcbiAgICAgIHRoaXMucmVwb3NpdG9yeSA9IHJlc3VsdC5yZXBvc2l0b3J5O1xuXG4gICAgICBpZiAodGhpcy5jb25maWcpIHtcbiAgICAgICAgdGhpcy5zZXR1cCh0aGlzLmNvbmZpZyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBsb2FkKCkge1xuICAgIHRoaXMuY29uZmlnID0gYXdhaXQgdGhpcy5leHRlbnNpb25zLmxvYWQoKTtcbiAgICB0aGlzLnNldHVwKHRoaXMuY29uZmlnKTtcbiAgfVxuXG4gIHNldHVwKGNvbmZpZzogRXh0ZW5zaW9uQ29uZmlnKSB7XG4gICAgaWYgKCFjb25maWcpIHtcbiAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdFeHRlbnNpb24gY29uZmlndXJhdGlvbiBub3QgZm91bmQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9oZWFkZXJBY3Rpb25zLm5leHQodGhpcy5sb2FkZXIuZ2V0Q29udGVudEFjdGlvbnMoY29uZmlnLCAnZmVhdHVyZXMuaGVhZGVyJykpO1xuICAgIHRoaXMuX3NpZGViYXJBY3Rpb25zLm5leHQodGhpcy5sb2FkZXIuZ2V0Q29udGVudEFjdGlvbnMoY29uZmlnLCAnZmVhdHVyZXMuc2lkZWJhci50b29sYmFyJykpO1xuICAgIHRoaXMuX3Rvb2xiYXJBY3Rpb25zLm5leHQodGhpcy5sb2FkZXIuZ2V0Q29udGVudEFjdGlvbnMoY29uZmlnLCAnZmVhdHVyZXMudG9vbGJhcicpKTtcbiAgICB0aGlzLl92aWV3ZXJUb29sYmFyQWN0aW9ucy5uZXh0KHRoaXMubG9hZGVyLmdldENvbnRlbnRBY3Rpb25zKGNvbmZpZywgJ2ZlYXR1cmVzLnZpZXdlci50b29sYmFyQWN0aW9ucycpKTtcbiAgICB0aGlzLl9zaGFyZWRMaW5rVmlld2VyVG9vbGJhckFjdGlvbnMubmV4dCh0aGlzLmxvYWRlci5nZXRDb250ZW50QWN0aW9ucyhjb25maWcsICdmZWF0dXJlcy52aWV3ZXIuc2hhcmVkLnRvb2xiYXJBY3Rpb25zJykpO1xuICAgIHRoaXMuX2NvbnRleHRNZW51QWN0aW9ucy5uZXh0KHRoaXMubG9hZGVyLmdldENvbnRlbnRBY3Rpb25zKGNvbmZpZywgJ2ZlYXR1cmVzLmNvbnRleHRNZW51JykpO1xuICAgIHRoaXMuX29wZW5XaXRoQWN0aW9ucy5uZXh0KHRoaXMubG9hZGVyLmdldENvbnRlbnRBY3Rpb25zKGNvbmZpZywgJ2ZlYXR1cmVzLnZpZXdlci5vcGVuV2l0aCcpKTtcbiAgICB0aGlzLl9jcmVhdGVBY3Rpb25zLm5leHQodGhpcy5sb2FkZXIuZ2V0RWxlbWVudHM8Q29udGVudEFjdGlvblJlZj4oY29uZmlnLCAnZmVhdHVyZXMuY3JlYXRlJykpO1xuICAgIHRoaXMuX2JhZGdlcy5uZXh0KHRoaXMubG9hZGVyLmdldEVsZW1lbnRzPEJhZGdlPihjb25maWcsICdmZWF0dXJlcy5iYWRnZXMnKSk7XG4gICAgdGhpcy5fZmlsZXNEb2N1bWVudExpc3RQcmVzZXQubmV4dCh0aGlzLmdldERvY3VtZW50TGlzdFByZXNldChjb25maWcsICdmaWxlcycpKTtcbiAgICB0aGlzLl9jdXN0b21NZXRhZGF0YVBhbmVscy5uZXh0KHRoaXMubG9hZGVyLmdldEVsZW1lbnRzPENvbnRlbnRBY3Rpb25SZWY+KGNvbmZpZywgJ2ZlYXR1cmVzLmN1c3RvbU1ldGFkYXRhUGFuZWxzJykpO1xuICAgIHRoaXMuX2J1bGtBY3Rpb25zLm5leHQodGhpcy5sb2FkZXIuZ2V0RWxlbWVudHM8Q29udGVudEFjdGlvblJlZj4oY29uZmlnLCAnZmVhdHVyZXMuYnVsay1hY3Rpb25zJykpO1xuXG4gICAgdGhpcy5uYXZiYXIgPSB0aGlzLmxvYWROYXZCYXIoY29uZmlnKTtcbiAgICB0aGlzLnNpZGViYXJUYWJzID0gdGhpcy5sb2FkZXIuZ2V0RWxlbWVudHM8U2lkZWJhclRhYlJlZj4oY29uZmlnLCAnZmVhdHVyZXMuc2lkZWJhci50YWJzJyk7XG4gICAgdGhpcy5jb250ZW50TWV0YWRhdGEgPSB0aGlzLmxvYWRDb250ZW50TWV0YWRhdGEoY29uZmlnKTtcbiAgICB0aGlzLnNlYXJjaCA9IHRoaXMubG9hZFNlYXJjaEZvcm1zKGNvbmZpZyk7XG4gICAgdGhpcy5zZWFyY2g/LmZvckVhY2goKHNlYXJjaFNldCkgPT4ge1xuICAgICAgc2VhcmNoU2V0LmNhdGVnb3JpZXMgPSBzZWFyY2hTZXQuY2F0ZWdvcmllcz8uZmlsdGVyKChjYXRlZ29yeSkgPT4gdGhpcy5maWx0ZXJWaXNpYmxlKGNhdGVnb3J5KSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmRvY3VtZW50TGlzdFByZXNldHMgPSB7XG4gICAgICBsaWJyYXJpZXM6IHRoaXMuZ2V0RG9jdW1lbnRMaXN0UHJlc2V0KGNvbmZpZywgJ2xpYnJhcmllcycpLFxuICAgICAgZmF2b3JpdGVMaWJyYXJpZXM6IHRoaXMuZ2V0RG9jdW1lbnRMaXN0UHJlc2V0KGNvbmZpZywgJ2Zhdm9yaXRlTGlicmFyaWVzJyksXG4gICAgICBzaGFyZWQ6IHRoaXMuZ2V0RG9jdW1lbnRMaXN0UHJlc2V0KGNvbmZpZywgJ3NoYXJlZCcpLFxuICAgICAgcmVjZW50OiB0aGlzLmdldERvY3VtZW50TGlzdFByZXNldChjb25maWcsICdyZWNlbnQnKSxcbiAgICAgIGZhdm9yaXRlczogdGhpcy5nZXREb2N1bWVudExpc3RQcmVzZXQoY29uZmlnLCAnZmF2b3JpdGVzJyksXG4gICAgICB0cmFzaGNhbjogdGhpcy5nZXREb2N1bWVudExpc3RQcmVzZXQoY29uZmlnLCAndHJhc2hjYW4nKSxcbiAgICAgIHNlYXJjaExpYnJhcmllczogdGhpcy5nZXREb2N1bWVudExpc3RQcmVzZXQoY29uZmlnLCAnc2VhcmNoLWxpYnJhcmllcycpLFxuICAgICAgc2VhcmNoUmVzdWx0czogdGhpcy5nZXREb2N1bWVudExpc3RQcmVzZXQoY29uZmlnLCAnc2VhcmNoLXJlc3VsdHMnKVxuICAgIH07XG5cbiAgICB0aGlzLndpdGhDcmVkZW50aWFscyA9IHRoaXMuYXBwQ29uZmlnLmdldDxib29sZWFuPignYXV0aC53aXRoQ3JlZGVudGlhbHMnLCBmYWxzZSk7XG5cbiAgICBpZiAoY29uZmlnLmZlYXR1cmVzPy52aWV3ZXIpIHtcbiAgICAgIHRoaXMudmlld2VyUnVsZXMgPSAoY29uZmlnLmZlYXR1cmVzLnZpZXdlclsncnVsZXMnXSBhcyBWaWV3ZXJSdWxlcykgfHwge307XG4gICAgfVxuXG4gICAgdGhpcy5yZWdpc3Rlckljb25zKGNvbmZpZyk7XG5cbiAgICBjb25zdCByZWZlcmVuY2VzID0gKGNvbmZpZy4kcmVmZXJlbmNlcyB8fCBbXSkuZmlsdGVyKChlbnRyeSkgPT4gdHlwZW9mIGVudHJ5ID09PSAnb2JqZWN0JykubWFwKChlbnRyeSkgPT4gZW50cnkgYXMgRXh0ZW5zaW9uUmVmKTtcbiAgICB0aGlzLl9yZWZlcmVuY2VzLm5leHQocmVmZXJlbmNlcyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVnaXN0ZXJJY29ucyhjb25maWc6IEV4dGVuc2lvbkNvbmZpZykge1xuICAgIGNvbnN0IGljb25zOiBBcnJheTxJY29uUmVmPiA9IHRoaXMubG9hZGVyLmdldEVsZW1lbnRzPEljb25SZWY+KGNvbmZpZywgJ2ZlYXR1cmVzLmljb25zJykuZmlsdGVyKChlbnRyeSkgPT4gIWVudHJ5LmRpc2FibGVkKTtcblxuICAgIGZvciAoY29uc3QgaWNvbiBvZiBpY29ucykge1xuICAgICAgY29uc3QgW25zLCBpZF0gPSBpY29uLmlkLnNwbGl0KCc6Jyk7XG4gICAgICBjb25zdCB2YWx1ZSA9IGljb24udmFsdWU7XG5cbiAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIud2FybihgTWlzc2luZyBpY29uIHZhbHVlIGZvciBcIiR7aWNvbi5pZH1cIi5gKTtcbiAgICAgIH0gZWxzZSBpZiAoIW5zIHx8ICFpZCkge1xuICAgICAgICB0aGlzLmxvZ2dlci53YXJuKGBJbmNvcnJlY3QgaWNvbiBpZCBmb3JtYXQuYCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm1hdEljb25SZWdpc3RyeS5hZGRTdmdJY29uSW5OYW1lc3BhY2UobnMsIGlkLCB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0UmVzb3VyY2VVcmwodmFsdWUpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgbG9hZE5hdkJhcihjb25maWc6IEV4dGVuc2lvbkNvbmZpZyk6IEFycmF5PE5hdkJhckdyb3VwUmVmPiB7XG4gICAgcmV0dXJuIHRoaXMubG9hZGVyLmdldEVsZW1lbnRzPE5hdkJhckdyb3VwUmVmPihjb25maWcsICdmZWF0dXJlcy5uYXZiYXInKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXREb2N1bWVudExpc3RQcmVzZXQoY29uZmlnOiBFeHRlbnNpb25Db25maWcsIGtleTogc3RyaW5nKTogRG9jdW1lbnRMaXN0UHJlc2V0UmVmW10ge1xuICAgIHJldHVybiB0aGlzLmxvYWRlclxuICAgICAgLmdldEVsZW1lbnRzPERvY3VtZW50TGlzdFByZXNldFJlZj4oY29uZmlnLCBgZmVhdHVyZXMuZG9jdW1lbnRMaXN0LiR7a2V5fWApXG4gICAgICAuZmlsdGVyKChncm91cCkgPT4gdGhpcy5maWx0ZXJWaXNpYmxlKGdyb3VwKSlcbiAgICAgIC5maWx0ZXIoKGVudHJ5KSA9PiAhZW50cnkuZGlzYWJsZWQpXG4gICAgICAubWFwKChlbnRyeSkgPT4ge1xuICAgICAgICBlbnRyeS5yZXNpemFibGUgPSBlbnRyeS5yZXNpemFibGUgPz8gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIGVudHJ5O1xuICAgICAgfSlcbiAgICAgIC5zb3J0KHNvcnRCeU9yZGVyKTtcbiAgfVxuXG4gIGdldEFwcGxpY2F0aW9uTmF2aWdhdGlvbihlbGVtZW50cyk6IEFycmF5PE5hdkJhckdyb3VwUmVmPiB7XG4gICAgcmV0dXJuIGVsZW1lbnRzXG4gICAgICAuZmlsdGVyKChncm91cCkgPT4gdGhpcy5maWx0ZXJWaXNpYmxlKGdyb3VwKSlcbiAgICAgIC5tYXAoKGdyb3VwKSA9PiAoe1xuICAgICAgICAuLi5ncm91cCxcbiAgICAgICAgaXRlbXM6IChncm91cC5pdGVtcyB8fCBbXSlcbiAgICAgICAgICAuZmlsdGVyKChlbnRyeSkgPT4gIWVudHJ5LmRpc2FibGVkKVxuICAgICAgICAgIC5maWx0ZXIoKGl0ZW0pID0+IHRoaXMuZmlsdGVyVmlzaWJsZShpdGVtKSlcbiAgICAgICAgICAuc29ydChzb3J0QnlPcmRlcilcbiAgICAgICAgICAubWFwKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXRlbS5jaGlsZHJlbiAmJiBpdGVtLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgaXRlbS5jaGlsZHJlbiA9IGl0ZW0uY2hpbGRyZW5cbiAgICAgICAgICAgICAgICAuZmlsdGVyKChlbnRyeSkgPT4gIWVudHJ5LmRpc2FibGVkKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoKGNoaWxkKSA9PiB0aGlzLmZpbHRlclZpc2libGUoY2hpbGQpKVxuICAgICAgICAgICAgICAgIC5zb3J0KHNvcnRCeU9yZGVyKVxuICAgICAgICAgICAgICAgIC5tYXAoKGNoaWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoY2hpbGQuY29tcG9uZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgLi4uY2hpbGRcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgaWYgKCFjaGlsZC5jbGljaykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZFJvdXRlUmVmID0gdGhpcy5leHRlbnNpb25zLmdldFJvdXRlQnlJZChjaGlsZC5yb3V0ZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkVXJsID0gYC8ke2NoaWxkUm91dGVSZWYgPyBjaGlsZFJvdXRlUmVmLnBhdGggOiBjaGlsZC5yb3V0ZX1gO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgIC4uLmNoaWxkLFxuICAgICAgICAgICAgICAgICAgICAgIHVybDogY2hpbGRVcmxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgLi4uY2hpbGQsXG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbjogY2hpbGQuY2xpY2tcbiAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAuLi5pdGVtXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChpdGVtLmNvbXBvbmVudCkge1xuICAgICAgICAgICAgICByZXR1cm4geyAuLi5pdGVtIH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghaXRlbS5jbGljaykge1xuICAgICAgICAgICAgICBjb25zdCByb3V0ZVJlZiA9IHRoaXMuZXh0ZW5zaW9ucy5nZXRSb3V0ZUJ5SWQoaXRlbS5yb3V0ZSk7XG4gICAgICAgICAgICAgIGNvbnN0IHVybCA9IGAvJHtyb3V0ZVJlZiA/IHJvdXRlUmVmLnBhdGggOiBpdGVtLnJvdXRlfWA7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgICAgICB1cmxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgICAgYWN0aW9uOiBpdGVtLmNsaWNrXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLnJlZHVjZShyZWR1Y2VFbXB0eU1lbnVzLCBbXSlcbiAgICAgIH0pKTtcbiAgfVxuXG4gIGxvYWRDb250ZW50TWV0YWRhdGEoY29uZmlnOiBFeHRlbnNpb25Db25maWcpOiBhbnkge1xuICAgIGNvbnN0IGVsZW1lbnRzID0gdGhpcy5sb2FkZXIuZ2V0RWxlbWVudHM8YW55Pihjb25maWcsICdmZWF0dXJlcy5jb250ZW50LW1ldGFkYXRhLXByZXNldHMnKTtcbiAgICBpZiAoIWVsZW1lbnRzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgbGV0IHByZXNldHMgPSB7fTtcbiAgICBwcmVzZXRzID0gdGhpcy5maWx0ZXJEaXNhYmxlZChtZXJnZU9iamVjdHMocHJlc2V0cywgLi4uZWxlbWVudHMpKTtcblxuICAgIGNvbnN0IG1ldGFkYXRhID0gdGhpcy5hcHBDb25maWcuY29uZmlnWydjb250ZW50LW1ldGFkYXRhJ10gfHwge307XG4gICAgbWV0YWRhdGEucHJlc2V0cyA9IHByZXNldHM7XG5cbiAgICB0aGlzLmFwcENvbmZpZy5jb25maWdbJ2NvbnRlbnQtbWV0YWRhdGEnXSA9IG1ldGFkYXRhO1xuICAgIHJldHVybiB7IHByZXNldHMgfTtcbiAgfVxuXG4gIGxvYWRTZWFyY2hGb3Jtcyhjb25maWc6IEV4dGVuc2lvbkNvbmZpZyk6IGFueSB7XG4gICAgY29uc3QgZWxlbWVudHMgPSB0aGlzLmxvYWRlci5nZXRFbGVtZW50czxhbnk+KGNvbmZpZywgJ2ZlYXR1cmVzLnNlYXJjaCcpO1xuICAgIGlmICghZWxlbWVudHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBzZWFyY2ggPSBtZXJnZUFycmF5cyhbXSwgZWxlbWVudHMpXG4gICAgICAuZmlsdGVyKChlbnRyeSkgPT4gIWVudHJ5LmRpc2FibGVkKVxuICAgICAgLmZpbHRlcigoZW50cnkpID0+IHRoaXMuZmlsdGVyVmlzaWJsZShlbnRyeSkpXG4gICAgICAuc29ydChzb3J0QnlPcmRlcik7XG5cbiAgICB0aGlzLmFwcENvbmZpZy5jb25maWdbJ3NlYXJjaCddID0gc2VhcmNoO1xuICAgIHJldHVybiBzZWFyY2g7XG4gIH1cblxuICBmaWx0ZXJEaXNhYmxlZChvYmplY3Q6IEFycmF5PHsgZGlzYWJsZWQ6IGJvb2xlYW4gfT4gfCB7IGRpc2FibGVkOiBib29sZWFuIH0pIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShvYmplY3QpKSB7XG4gICAgICByZXR1cm4gb2JqZWN0LmZpbHRlcigoaXRlbSkgPT4gIWl0ZW0uZGlzYWJsZWQpLm1hcCgoaXRlbSkgPT4gdGhpcy5maWx0ZXJEaXNhYmxlZChpdGVtKSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0Jykge1xuICAgICAgaWYgKCFvYmplY3QuZGlzYWJsZWQpIHtcbiAgICAgICAgT2JqZWN0LmtleXMob2JqZWN0KS5mb3JFYWNoKChwcm9wKSA9PiB7XG4gICAgICAgICAgb2JqZWN0W3Byb3BdID0gdGhpcy5maWx0ZXJEaXNhYmxlZChvYmplY3RbcHJvcF0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICB9XG4gIH1cblxuICBnZXRTaWRlYmFyVGFicygpOiBBcnJheTxTaWRlYmFyVGFiUmVmPiB7XG4gICAgcmV0dXJuIHRoaXMuc2lkZWJhclRhYnMuZmlsdGVyKChhY3Rpb24pID0+IHRoaXMuZmlsdGVyVmlzaWJsZShhY3Rpb24pKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0QWN0aW9uRGlzYWJsZWRGcm9tUnVsZShhY3Rpb246IENvbnRlbnRBY3Rpb25SZWYpIHtcbiAgICBsZXQgZGlzYWJsZWQgPSBmYWxzZTtcblxuICAgIGlmIChhY3Rpb24/LnJ1bGVzPy5lbmFibGVkKSB7XG4gICAgICBkaXNhYmxlZCA9ICF0aGlzLmV4dGVuc2lvbnMuZXZhbHVhdGVSdWxlKGFjdGlvbi5ydWxlcy5lbmFibGVkLCB0aGlzKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uYWN0aW9uLFxuICAgICAgZGlzYWJsZWRcbiAgICB9O1xuICB9XG5cbiAgdXBkYXRlU2lkZWJhckFjdGlvbnMoKSB7XG4gICAgdGhpcy5fc2lkZWJhckFjdGlvbnMubmV4dCh0aGlzLmxvYWRlci5nZXRDb250ZW50QWN0aW9ucyh0aGlzLmNvbmZpZywgJ2ZlYXR1cmVzLnNpZGViYXIudG9vbGJhcicpKTtcbiAgfVxuXG4gIGdldENyZWF0ZUFjdGlvbnMoKTogT2JzZXJ2YWJsZTxBcnJheTxDb250ZW50QWN0aW9uUmVmPj4ge1xuICAgIHJldHVybiB0aGlzLl9jcmVhdGVBY3Rpb25zLnBpcGUoXG4gICAgICBtYXAoKGNyZWF0ZUFjdGlvbnMpID0+XG4gICAgICAgIGNyZWF0ZUFjdGlvbnNcbiAgICAgICAgICAuZmlsdGVyKChhY3Rpb24pID0+IHRoaXMuZmlsdGVyVmlzaWJsZShhY3Rpb24pKVxuICAgICAgICAgIC5tYXAoKGFjdGlvbikgPT4gdGhpcy5jb3B5QWN0aW9uKGFjdGlvbikpXG4gICAgICAgICAgLm1hcCgoYWN0aW9uKSA9PiB0aGlzLmJ1aWxkTWVudShhY3Rpb24pKVxuICAgICAgICAgIC5tYXAoKGFjdGlvbikgPT4gdGhpcy5zZXRBY3Rpb25EaXNhYmxlZEZyb21SdWxlKGFjdGlvbikpXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIGdldEJhZGdlcyhub2RlOiBOb2RlRW50cnkpOiBPYnNlcnZhYmxlPEFycmF5PEJhZGdlPj4ge1xuICAgIHJldHVybiB0aGlzLl9iYWRnZXMucGlwZShtYXAoKGJhZGdlcykgPT4gYmFkZ2VzLmZpbHRlcigoYmFkZ2UpID0+IHRoaXMuZXZhbHVhdGVSdWxlKGJhZGdlLnJ1bGVzLnZpc2libGUsIG5vZGUpKSkpO1xuICB9XG5cbiAgZ2V0Q3VzdG9tTWV0YWRhdGFQYW5lbHMobm9kZTogTm9kZUVudHJ5KTogT2JzZXJ2YWJsZTxBcnJheTxDb250ZW50QWN0aW9uUmVmPj4ge1xuICAgIHJldHVybiB0aGlzLl9jdXN0b21NZXRhZGF0YVBhbmVscy5waXBlKG1hcCgocGFuZWxzKSA9PiBwYW5lbHMuZmlsdGVyKChwYW5lbCkgPT4gdGhpcy5ldmFsdWF0ZVJ1bGUocGFuZWwucnVsZXMudmlzaWJsZSwgbm9kZSkpKSk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkTWVudShhY3Rpb25SZWY6IENvbnRlbnRBY3Rpb25SZWYpOiBDb250ZW50QWN0aW9uUmVmIHtcbiAgICBpZiAoYWN0aW9uUmVmLnR5cGUgPT09IENvbnRlbnRBY3Rpb25UeXBlLm1lbnUgJiYgYWN0aW9uUmVmLmNoaWxkcmVuICYmIGFjdGlvblJlZi5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBjaGlsZHJlbiA9IGFjdGlvblJlZi5jaGlsZHJlbi5maWx0ZXIoKGFjdGlvbikgPT4gdGhpcy5maWx0ZXJWaXNpYmxlKGFjdGlvbikpLm1hcCgoYWN0aW9uKSA9PiB0aGlzLmJ1aWxkTWVudShhY3Rpb24pKTtcblxuICAgICAgYWN0aW9uUmVmLmNoaWxkcmVuID0gY2hpbGRyZW5cbiAgICAgICAgLm1hcCgoYWN0aW9uKSA9PiB0aGlzLnNldEFjdGlvbkRpc2FibGVkRnJvbVJ1bGUoYWN0aW9uKSlcbiAgICAgICAgLnNvcnQoc29ydEJ5T3JkZXIpXG4gICAgICAgIC5yZWR1Y2UocmVkdWNlRW1wdHlNZW51cywgW10pXG4gICAgICAgIC5yZWR1Y2UocmVkdWNlU2VwYXJhdG9ycywgW10pO1xuICAgIH1cblxuICAgIHJldHVybiBhY3Rpb25SZWY7XG4gIH1cblxuICBwcml2YXRlIGdldEFsbG93ZWRBY3Rpb25zKGFjdGlvbnM6IENvbnRlbnRBY3Rpb25SZWZbXSk6IENvbnRlbnRBY3Rpb25SZWZbXSB7XG4gICAgcmV0dXJuIChhY3Rpb25zIHx8IFtdKVxuICAgICAgLmZpbHRlcigoYWN0aW9uKSA9PiB0aGlzLmZpbHRlclZpc2libGUoYWN0aW9uKSlcbiAgICAgIC5tYXAoKGFjdGlvbikgPT4ge1xuICAgICAgICBpZiAoYWN0aW9uLnR5cGUgPT09IENvbnRlbnRBY3Rpb25UeXBlLm1lbnUpIHtcbiAgICAgICAgICBjb25zdCBjb3B5ID0gdGhpcy5jb3B5QWN0aW9uKGFjdGlvbik7XG4gICAgICAgICAgaWYgKGNvcHkuY2hpbGRyZW4gJiYgY29weS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb3B5LmNoaWxkcmVuID0gY29weS5jaGlsZHJlblxuICAgICAgICAgICAgICAuZmlsdGVyKChlbnRyeSkgPT4gIWVudHJ5LmRpc2FibGVkKVxuICAgICAgICAgICAgICAuZmlsdGVyKChjaGlsZEFjdGlvbikgPT4gdGhpcy5maWx0ZXJWaXNpYmxlKGNoaWxkQWN0aW9uKSlcbiAgICAgICAgICAgICAgLnNvcnQoc29ydEJ5T3JkZXIpXG4gICAgICAgICAgICAgIC5yZWR1Y2UocmVkdWNlU2VwYXJhdG9ycywgW10pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gY29weTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWN0aW9uO1xuICAgICAgfSlcbiAgICAgIC5tYXAoKGFjdGlvbikgPT4gdGhpcy5zZXRBY3Rpb25EaXNhYmxlZEZyb21SdWxlKGFjdGlvbikpXG4gICAgICAucmVkdWNlKHJlZHVjZUVtcHR5TWVudXMsIFtdKVxuICAgICAgLnJlZHVjZShyZWR1Y2VTZXBhcmF0b3JzLCBbXSk7XG4gIH1cblxuICBnZXRBbGxvd2VkU2lkZWJhckFjdGlvbnMoKTogT2JzZXJ2YWJsZTxBcnJheTxDb250ZW50QWN0aW9uUmVmPj4ge1xuICAgIHJldHVybiB0aGlzLl9zaWRlYmFyQWN0aW9ucy5waXBlKG1hcCgoc2lkZWJhckFjdGlvbnMpID0+IHRoaXMuZ2V0QWxsb3dlZEFjdGlvbnMoc2lkZWJhckFjdGlvbnMpKSk7XG4gIH1cblxuICBnZXRBbGxvd2VkVG9vbGJhckFjdGlvbnMoKTogT2JzZXJ2YWJsZTxBcnJheTxDb250ZW50QWN0aW9uUmVmPj4ge1xuICAgIHJldHVybiB0aGlzLl90b29sYmFyQWN0aW9ucy5waXBlKG1hcCgodG9vbGJhckFjdGlvbnMpID0+IHRoaXMuZ2V0QWxsb3dlZEFjdGlvbnModG9vbGJhckFjdGlvbnMpKSk7XG4gIH1cblxuICBnZXRWaWV3ZXJUb29sYmFyQWN0aW9ucygpOiBPYnNlcnZhYmxlPEFycmF5PENvbnRlbnRBY3Rpb25SZWY+PiB7XG4gICAgcmV0dXJuIHRoaXMuX3ZpZXdlclRvb2xiYXJBY3Rpb25zLnBpcGUobWFwKCh2aWV3ZXJUb29sYmFyQWN0aW9ucykgPT4gdGhpcy5nZXRBbGxvd2VkQWN0aW9ucyh2aWV3ZXJUb29sYmFyQWN0aW9ucykpKTtcbiAgfVxuXG4gIGdldEJ1bGtBY3Rpb25zKCk6IE9ic2VydmFibGU8QXJyYXk8Q29udGVudEFjdGlvblJlZj4+IHtcbiAgICByZXR1cm4gdGhpcy5fYnVsa0FjdGlvbnMucGlwZShtYXAoKGJ1bGtBY3Rpb25zKSA9PiB0aGlzLmdldEFsbG93ZWRBY3Rpb25zKGJ1bGtBY3Rpb25zKSkpO1xuICB9XG5cbiAgZ2V0T3BlbldpdGhBY3Rpb25zKCk6IE9ic2VydmFibGU8QXJyYXk8Q29udGVudEFjdGlvblJlZj4+IHtcbiAgICByZXR1cm4gdGhpcy5fb3BlbldpdGhBY3Rpb25zLnBpcGUobWFwKChvcGVuV2l0aEFjdGlvbnMpID0+IHRoaXMuZ2V0QWxsb3dlZEFjdGlvbnMob3BlbldpdGhBY3Rpb25zKSkpO1xuICB9XG5cbiAgZ2V0U2hhcmVkTGlua1ZpZXdlclRvb2xiYXJBY3Rpb25zKCk6IE9ic2VydmFibGU8QXJyYXk8Q29udGVudEFjdGlvblJlZj4+IHtcbiAgICByZXR1cm4gdGhpcy5fc2hhcmVkTGlua1ZpZXdlclRvb2xiYXJBY3Rpb25zLnBpcGUoXG4gICAgICBtYXAoKHNoYXJlZExpbmtWaWV3ZXJUb29sYmFyQWN0aW9ucykgPT4gKCF0aGlzLnNlbGVjdGlvbi5pc0VtcHR5ID8gdGhpcy5nZXRBbGxvd2VkQWN0aW9ucyhzaGFyZWRMaW5rVmlld2VyVG9vbGJhckFjdGlvbnMpIDogW10pKVxuICAgICk7XG4gIH1cblxuICBnZXRIZWFkZXJBY3Rpb25zKCk6IE9ic2VydmFibGU8QXJyYXk8Q29udGVudEFjdGlvblJlZj4+IHtcbiAgICByZXR1cm4gdGhpcy5faGVhZGVyQWN0aW9ucy5waXBlKFxuICAgICAgbWFwKChoZWFkZXJBY3Rpb25zKSA9PlxuICAgICAgICBoZWFkZXJBY3Rpb25zXG4gICAgICAgICAgLmZpbHRlcigoYWN0aW9uKSA9PiB0aGlzLmZpbHRlclZpc2libGUoYWN0aW9uKSlcbiAgICAgICAgICAubWFwKChhY3Rpb24pID0+IHtcbiAgICAgICAgICAgIGlmIChhY3Rpb24udHlwZSA9PT0gQ29udGVudEFjdGlvblR5cGUubWVudSkge1xuICAgICAgICAgICAgICBjb25zdCBjb3B5ID0gdGhpcy5jb3B5QWN0aW9uKGFjdGlvbik7XG4gICAgICAgICAgICAgIGlmIChjb3B5LmNoaWxkcmVuICYmIGNvcHkuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGNvcHkuY2hpbGRyZW4gPSBjb3B5LmNoaWxkcmVuXG4gICAgICAgICAgICAgICAgICAuZmlsdGVyKChjaGlsZEFjdGlvbikgPT4gdGhpcy5maWx0ZXJWaXNpYmxlKGNoaWxkQWN0aW9uKSlcbiAgICAgICAgICAgICAgICAgIC5zb3J0KHNvcnRCeU9yZGVyKVxuICAgICAgICAgICAgICAgICAgLnJlZHVjZShyZWR1Y2VFbXB0eU1lbnVzLCBbXSlcbiAgICAgICAgICAgICAgICAgIC5yZWR1Y2UocmVkdWNlU2VwYXJhdG9ycywgW10pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBjb3B5O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gYWN0aW9uO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLm1hcCgoYWN0aW9uKSA9PiB0aGlzLnNldEFjdGlvbkRpc2FibGVkRnJvbVJ1bGUoYWN0aW9uKSlcbiAgICAgICAgICAuc29ydChzb3J0QnlPcmRlcilcbiAgICAgICAgICAucmVkdWNlKHJlZHVjZUVtcHR5TWVudXMsIFtdKVxuICAgICAgICAgIC5yZWR1Y2UocmVkdWNlU2VwYXJhdG9ycywgW10pXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIGdldEFsbG93ZWRDb250ZXh0TWVudUFjdGlvbnMoKTogT2JzZXJ2YWJsZTxBcnJheTxDb250ZW50QWN0aW9uUmVmPj4ge1xuICAgIHJldHVybiB0aGlzLl9jb250ZXh0TWVudUFjdGlvbnMucGlwZShtYXAoKGNvbnRleHRNZW51QWN0aW9ucykgPT4gKCF0aGlzLnNlbGVjdGlvbi5pc0VtcHR5ID8gdGhpcy5nZXRBbGxvd2VkQWN0aW9ucyhjb250ZXh0TWVudUFjdGlvbnMpIDogW10pKSk7XG4gIH1cblxuICBjb3B5QWN0aW9uKGFjdGlvbjogQ29udGVudEFjdGlvblJlZik6IENvbnRlbnRBY3Rpb25SZWYge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5hY3Rpb24sXG4gICAgICBjaGlsZHJlbjogKGFjdGlvbi5jaGlsZHJlbiB8fCBbXSkubWFwKChjaGlsZCkgPT4gdGhpcy5jb3B5QWN0aW9uKGNoaWxkKSlcbiAgICB9O1xuICB9XG5cbiAgZmlsdGVyVmlzaWJsZShhY3Rpb246IENvbnRlbnRBY3Rpb25SZWYgfCBTaWRlYmFyVGFiUmVmIHwgRG9jdW1lbnRMaXN0UHJlc2V0UmVmIHwgU2VhcmNoQ2F0ZWdvcnkpOiBib29sZWFuIHtcbiAgICBpZiAoYWN0aW9uPy5ydWxlcz8udmlzaWJsZSkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYWN0aW9uLnJ1bGVzLnZpc2libGUpKSB7XG4gICAgICAgIHJldHVybiBhY3Rpb24ucnVsZXMudmlzaWJsZS5ldmVyeSgocnVsZSkgPT4gdGhpcy5leHRlbnNpb25zLmV2YWx1YXRlUnVsZShydWxlLCB0aGlzKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5leHRlbnNpb25zLmV2YWx1YXRlUnVsZShhY3Rpb24ucnVsZXMudmlzaWJsZSwgdGhpcyk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaXNWaWV3ZXJFeHRlbnNpb25EaXNhYmxlZChleHRlbnNpb246IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmIChleHRlbnNpb24pIHtcbiAgICAgIGlmIChleHRlbnNpb24uZGlzYWJsZWQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChleHRlbnNpb24ucnVsZXM/LmRpc2FibGVkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmV4dGVuc2lvbnMuZXZhbHVhdGVSdWxlKGV4dGVuc2lvbi5ydWxlcy5kaXNhYmxlZCwgdGhpcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcnVuQWN0aW9uQnlJZChpZDogc3RyaW5nLCBhZGRpdGlvbmFsUGF5bG9hZD86IGFueSkge1xuICAgIGNvbnN0IGFjdGlvbiA9IHRoaXMuZXh0ZW5zaW9ucy5nZXRBY3Rpb25CeUlkKGlkKTtcbiAgICBpZiAoYWN0aW9uKSB7XG4gICAgICBjb25zdCB7IHR5cGUsIHBheWxvYWQgfSA9IGFjdGlvbjtcbiAgICAgIGNvbnN0IGNvbnRleHQgPSB7XG4gICAgICAgIHNlbGVjdGlvbjogdGhpcy5zZWxlY3Rpb25cbiAgICAgIH07XG4gICAgICBjb25zdCBleHByZXNzaW9uID0gdGhpcy5leHRlbnNpb25zLnJ1bkV4cHJlc3Npb24ocGF5bG9hZCwgY29udGV4dCk7XG5cbiAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goe1xuICAgICAgICB0eXBlLFxuICAgICAgICBwYXlsb2FkOiBleHByZXNzaW9uLFxuICAgICAgICBjb25maWd1cmF0aW9uOiBhZGRpdGlvbmFsUGF5bG9hZFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBpZCxcbiAgICAgICAgY29uZmlndXJhdGlvbjogYWRkaXRpb25hbFBheWxvYWRcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIHRvZG86IG1vdmUgdG8gQURGL1J1bGVTZXJ2aWNlXG4gIGlzUnVsZURlZmluZWQocnVsZUlkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISEocnVsZUlkICYmIHRoaXMuZ2V0RXZhbHVhdG9yKHJ1bGVJZCkpO1xuICB9XG5cbiAgLy8gdG9kbzogbW92ZSB0byBBREYvUnVsZVNlcnZpY2VcbiAgZXZhbHVhdGVSdWxlKHJ1bGVJZDogc3RyaW5nIHwgc3RyaW5nW10sIC4uLmFyZ3M6IGFueVtdKTogYm9vbGVhbiB7XG4gICAgbGV0IGV2YWx1YXRvckxpc3Q6IFJ1bGVFdmFsdWF0b3JbXSA9IFtdO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHJ1bGVJZCkpIHtcbiAgICAgIGV2YWx1YXRvckxpc3QgPSBydWxlSWQuZmlsdGVyKChydWxlKSA9PiAhIXRoaXMuZ2V0RXZhbHVhdG9yKHJ1bGUpKS5tYXAoKHJ1bGUpID0+IHRoaXMuZ2V0RXZhbHVhdG9yKHJ1bGUpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZXZhbHVhdG9yID0gdGhpcy5nZXRFdmFsdWF0b3IocnVsZUlkKTtcbiAgICAgIGlmIChldmFsdWF0b3IpIHtcbiAgICAgICAgZXZhbHVhdG9yTGlzdC5wdXNoKGV2YWx1YXRvcik7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChldmFsdWF0b3JMaXN0Py5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gZXZhbHVhdG9yTGlzdC5ldmVyeSgoZXZhbHVhdG9yKSA9PiBldmFsdWF0b3IodGhpcywgLi4uYXJncykpO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGdldEV2YWx1YXRvcihrZXk6IHN0cmluZyk6IFJ1bGVFdmFsdWF0b3Ige1xuICAgIHJldHVybiB0aGlzLmV4dGVuc2lvbnMuZ2V0RXZhbHVhdG9yKGtleSk7XG4gIH1cblxuICBjYW5QcmV2aWV3Tm9kZShub2RlOiBOb2RlRW50cnkpIHtcbiAgICBjb25zdCBydWxlcyA9IHRoaXMudmlld2VyUnVsZXM7XG5cbiAgICBpZiAodGhpcy5pc1J1bGVEZWZpbmVkKHJ1bGVzLmNhblByZXZpZXcpKSB7XG4gICAgICBjb25zdCBjYW5QcmV2aWV3ID0gdGhpcy5ldmFsdWF0ZVJ1bGUocnVsZXMuY2FuUHJldmlldywgbm9kZSk7XG5cbiAgICAgIGlmICghY2FuUHJldmlldykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBjYW5TaG93Vmlld2VyTmF2aWdhdGlvbihub2RlOiBOb2RlRW50cnkpIHtcbiAgICBjb25zdCBydWxlcyA9IHRoaXMudmlld2VyUnVsZXM7XG5cbiAgICBpZiAodGhpcy5pc1J1bGVEZWZpbmVkKHJ1bGVzLnNob3dOYXZpZ2F0aW9uKSkge1xuICAgICAgY29uc3Qgc2hvd05hdmlnYXRpb24gPSB0aGlzLmV2YWx1YXRlUnVsZShydWxlcy5zaG93TmF2aWdhdGlvbiwgbm9kZSk7XG4gICAgICBpZiAoIXNob3dOYXZpZ2F0aW9uKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGJ1bGtBY3Rpb25FeGVjdXRlZCgpOiB2b2lkIHtcbiAgICB0aGlzLmJ1bGtBY3Rpb25FeGVjdXRlZCQubmV4dCgpO1xuICB9XG59XG4iXX0=
|