@arsedizioni/ars-utils 18.2.492 → 18.2.493

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.
@@ -179,7 +179,7 @@ export declare class ClipperService implements OnDestroy {
179
179
  /**
180
180
  * Retrieve current dashboard
181
181
  */
182
- loadDashboard(): void;
182
+ loadDashboard(): Subscription;
183
183
  /**
184
184
  * Update unread items
185
185
  * @param module : the module
@@ -449,7 +449,7 @@ export class ClipperService {
449
449
  * Retrieve current dashboard
450
450
  */
451
451
  loadDashboard() {
452
- this.httpClient
452
+ return this.httpClient
453
453
  .post(this._serviceUri + '/account/dashboard', { refreshing: true }).subscribe((r) => {
454
454
  if (r.success) {
455
455
  this.dashboard.documentUpdates = r.value.documentUpdates;
@@ -945,4 +945,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.4", ngImpor
945
945
  providedIn: 'root',
946
946
  }]
947
947
  }] });
948
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpcHBlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJzLXV0aWxzL2NsaXBwZXIuY29tbW9uL2NvbW1vbi9zZXJ2aWNlcy9jbGlwcGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDNUUsT0FBTyxFQUFFLFVBQVUsRUFBcUIsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEYsT0FBTyxFQUM0QixnQkFBZ0IsRUFHbEMsV0FBVyxFQUMzQixNQUFNLDZCQUE2QixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxhQUFhLEVBQXFGLE1BQU0sMkJBQTJCLENBQUM7QUFFN0ksT0FBTyxFQUFnQixFQUFFLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BELE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGdCQUFnQixFQUEwUSwwQkFBMEIsRUFBZ3pCLE1BQU0sZ0JBQWdCLENBQUM7QUFDenBDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxhQUFhLENBQUM7O0FBTTlDLE1BQU0sT0FBTyxjQUFjO0lBSDNCO1FBS1UsZUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUVoQyxxQkFBZ0IsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUM1QyxrQkFBYSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUV0QyxnQkFBVyxHQUFrQixJQUFJLENBQUM7UUFJbEMsV0FBTSxHQUF3QixtQkFBbUIsQ0FBQyxJQUFJLENBQUM7UUFJdkQsZUFBVSxHQUE0QixJQUFJLENBQUM7UUFZbkMsYUFBUSxHQUFH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QyxHQUFHLENBQ3hCLElBQUksQ0FBQyxXQUFXLEdBQUcsOEJBQThCLEdBQUcsRUFBRSxHQUFHLE9BQU8sR0FBRyxHQUFHLEVBQ3RFLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxDQUN6QixDQUFDO0lBQ0osQ0FBQzs4R0Fyc0NVLGNBQWM7a0hBQWQsY0FBYyxjQUZiLE1BQU07OzJGQUVQLGNBQWM7a0JBSDFCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEhlYWRlcnMsIEh0dHBSZXF1ZXN0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBPbkRlc3Ryb3ksIFNpZ25hbCwgY29tcHV0ZWQsIGluamVjdCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgQXBpUmVzdWx0LCBCcm9hZGNhc3RNZXNzYWdlSW5mbywgQnJvYWRjYXN0U2VydmljZSxcclxuICBGb2xkZXIsXHJcbiAgRm9sZGVyVHJlZSxcclxuICBOYW1lVmFsdWVJdGVtLCBTeXN0ZW1VdGlsc1xyXG59IGZyb20gJ0BhcnNlZGl6aW9uaS9hcnMtdXRpbHMvY29yZSc7XHJcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UsIFJlY292ZXJQYXNzd29yZERpYWxvZ0RhdGEsIFJlY292ZXJQYXNzd29yZERpYWxvZ1Jlc3VsdCwgUmVzZXRQYXNzd29yZERpYWxvZ1Jlc3VsdCB9IGZyb20gJ0BhcnNlZGl6aW9uaS9hcnMtdXRpbHMvdWknO1xyXG5pbXBvcnQgeyBMb2dpbk9BdXRoVHlwZSB9IGZyb20gJ0BhcnNlZGl6aW9uaS9hcnMtdXRpbHMvdWkub2F1dGgnO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24sIG9mLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgQ2xpcHBlclNlcnZpY2VGbGFncywgQ2xpcHBlckRhc2hib2FyZCwgQ2xpcHBlckRhc2hib2FyZFJlc3VsdCwgQ2xpcHBlckRvY3VtZW50SW5mbywgQ2xpcHBlckRvY3VtZW50U3RydWN0dXJlLCBDbGlwcGVyRG9jdW1lbnRVcGRhdGVTdGF0ZVBhcmFtcywgQ2xpcHBlckV4cG9ydERvY3VtZW50c1BhcmFtcywgQ2xpcHBlckxvZ2luSW5mbywgQ2xpcHBlckxvZ2luUmVzdWx0LCBDbGlwcGVyTW9kdWxlLCBDbGlwcGVyT1RQSW5mbywgQ2xpcHBlclNlYXJjaEFyc0V2ZW50c1BhcmFtcywgQ2xpcHBlclNlYXJjaEFyc0V2ZW50c1Jlc3VsdCwgQ2xpcHBlclF1ZXJ5UmVmZXJlbmNlc01vZGUsIENsaXBwZXJSZWZlcmVuY2VzU2VhcmNoUGFyYW1zLCBDbGlwcGVyU2VhcmNoRmFjZXRzUmVzdWx0LCBDbGlwcGVyU2VhcmNoUGFyYW1zLCBDbGlwcGVyU2VhcmNoUmVzdWx0LCBDbGlwcGVyU2VuZERvY3VtZW50c0J5RW1haWxQYXJhbXMsIENsaXBwZXJUYXhvbm9teVBhcmFtcywgQ2xpcHBlclVzZXJMaW5rLCBDbGlwcGVyVXNlclNlYXJjaCwgQ2xpcHBlclVzZXJUcmlhbEluZm8sIENsaXBwZXJVc2VyV29ya2luZ0RvY3VtZW50LCBDbGlwcGVyVGVhbU1lbWJlckluZm8sIENsaXBwZXJUZWFtc1NlYXJjaFBhcmFtcywgQ2xpcHBlclRlYW1zU2VhcmNoUmVzdWx0LCBDbGlwcGVyVGVhbUluZm8sIENsaXBwZXJUZWFtTWVtYmVyc1NlYXJjaFJlc3VsdCwgQ2xpcHBlckNhbGVuZGFyU2VhcmNoUGFyYW1zLCBDbGlwcGVyQ2FsZW5kYXJTZWFyY2hSZXN1bHQsIENsaXBwZXJTZWFyY2hDYWxlbmRhclNuYXBzaG90UmVzdWx0LCBDbGlwcGVyQ2FsZW5kYXJDb3B5RGVhZGxpbmVzUGFyYW1zLCBDbGlwcGVyRGVhZGxpbmVJbmZvLCBDbGlwcGVyQ2FsZW5kYXJTYXZlRGVhZGxpbmVQYXJhbXMsIENsaXBwZXJBcmNoaXZlRm9sZGVyc1NlYXJjaFBhcmFtcywgQ2xpcHBlckFyY2hpdmVGb2xkZXJzU2VhcmNoUmVzdWx0LCBDbGlwcGVyQXJjaGl2ZUZpbGVJbmZvLCBDbGlwcGVyQXJjaGl2ZUZvbGRlcnNJbXBvcnRQYXJhbXMsIENsaXBwZXJBcmNoaXZlRmlsZXNTZWFyY2hSZXN1bHQsIENsaXBwZXJBcmNoaXZlRmlsZXNEZWxldGVQYXJhbXMsIENsaXBwZXJBcmNoaXZlRmlsZXNDb3B5UGFyYW1zLCBDbGlwcGVyQXJjaGl2ZUZpbGVzU2VhcmNoUGFyYW1zIH0gZnJvbSAnLi4vZGVmaW5pdGlvbnMnO1xyXG5pbXBvcnQgeyBDbGlwcGVyTWVzc2FnZXMgfSBmcm9tICcuLi9tZXNzYWdlcyc7XHJcblxyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIENsaXBwZXJTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcclxuXHJcbiAgcHJpdmF0ZSBodHRwQ2xpZW50ID0gaW5qZWN0KEh0dHBDbGllbnQpO1xyXG4gIHByaXZhdGUgYnJvYWRjYXN0U2VydmljZVN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbiB8IG51bGw7XHJcbiAgcHJpdmF0ZSBicm9hZGNhc3RTZXJ2aWNlID0gaW5qZWN0KEJyb2FkY2FzdFNlcnZpY2UpO1xyXG4gIHByaXZhdGUgZGlhbG9nU2VydmljZSA9IGluamVjdChEaWFsb2dTZXJ2aWNlKTtcclxuXHJcbiAgcHJpdmF0ZSBfc2VydmljZVVyaTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcbiAgZ2V0IHNlcnZpY2VVcmkoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9zZXJ2aWNlVXJpO1xyXG4gIH1cclxuICBwcml2YXRlIF9mbGFnczogQ2xpcHBlclNlcnZpY2VGbGFncyA9IENsaXBwZXJTZXJ2aWNlRmxhZ3MuTm9uZTtcclxuICBnZXQgZmxhZ3MoKTogQ2xpcHBlclNlcnZpY2VGbGFncyB7XHJcbiAgICByZXR1cm4gdGhpcy5fZmxhZ3M7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2xvZ2luSW5mbzogQ2xpcHBlckxvZ2luSW5mbyB8IG51bGwgPSBudWxsO1xyXG4gIGdldCBsb2dpbkluZm8oKTogQ2xpcHBlckxvZ2luSW5mbyB8IG51bGwge1xyXG4gICAgaWYgKCF0aGlzLl9sb2dpbkluZm8pIHtcclxuICAgICAgY29uc3QgbG9naW5JbmZvID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2NsaXBwZXJfbG9naW4nKTtcclxuICAgICAgaWYgKGxvZ2luSW5mbykge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICB0aGlzLl9sb2dpbkluZm8gPSBKU09OLnBhcnNlKGxvZ2luSW5mbykgYXMgQ2xpcHBlckxvZ2luSW5mbztcclxuICAgICAgICB9IGNhdGNoIHsgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5fbG9naW5JbmZvO1xyXG4gIH1cclxuICBwdWJsaWMgcmVhZG9ubHkgbG9nZ2VkSW4gPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIHB1YmxpYyByZWFkb25seSBsb2dnaW5nSW4gPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIHB1YmxpYyByZWFkb25seSBzbmFwc2hvdCA9IHNpZ25hbDxDbGlwcGVyU2VhcmNoUmVzdWx0PihudWxsKTtcclxuICBwdWJsaWMgcmVhZG9ubHkgc3VwcG9ydHNSUyA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XHJcbiAgcHVibGljIHJlYWRvbmx5IHJlZmVyZW5jZXNTbmFwc2hvdCA9IHNpZ25hbDxDbGlwcGVyU2VhcmNoUmVzdWx0PihudWxsKTtcclxuICBwdWJsaWMgcmVhZG9ubHkgZGFzaGJvYXJkOiBDbGlwcGVyRGFzaGJvYXJkID0gbmV3IENsaXBwZXJEYXNoYm9hcmQoKTtcclxuICBwdWJsaWMgcmVhZG9ubHkgYmFnID0gc2lnbmFsPENsaXBwZXJEb2N1bWVudEluZm9bXT4oW10pO1xyXG4gIHB1YmxpYyByZWFkb25seSBiYWdUb3RhbDogU2lnbmFsPG51bWJlcj4gPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgICByZXR1cm4gdGhpcy5iYWcoKS5sZW5ndGg7XHJcbiAgfSk7XHJcbiAgcHVibGljIHJlYWRvbmx5IHZpc2libGUgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIHByaXZhdGUgX3RlYW1zOiBOYW1lVmFsdWVJdGVtPHN0cmluZz5bXSA9IFtdO1xyXG4gIGdldCB0ZWFtcygpOiBOYW1lVmFsdWVJdGVtPHN0cmluZz5bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5fdGVhbXM7XHJcbiAgfVxyXG4gIHB1YmxpYyBjdXJyZW50VGVhbUlkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuICBwdWJsaWMgY3VycmVudFRlYW1OYW1lID0gc2lnbmFsPHN0cmluZz4oXCJQRVJTT05BTEVcIik7XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgaWYgKHRoaXMuYnJvYWRjYXN0U2VydmljZVN1YnNjcmlwdGlvbikge1xyXG4gICAgICB0aGlzLmJyb2FkY2FzdFNlcnZpY2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEluaXRpYWxpemUgc2VydmljZVxyXG4gICAqIEBwYXJhbSBzZXJ2aWNlVXJpIDogdGhlIHNlcnZpY2UgdXJpXHJcbiAgICogQHBhcmFtIGZsYWdzOiB0aGUgc2VydmljZSBmbGFncy4gRGVmYXVsdCBpcyBub25lLlxyXG4gICAqL1xyXG4gIGluaXRpYWxpemUoXHJcbiAgICBzZXJ2aWNlVXJpOiBzdHJpbmcsXHJcbiAgICBmbGFnczogQ2xpcHBlclNlcnZpY2VGbGFncyA9IENsaXBwZXJTZXJ2aWNlRmxhZ3MuTm9uZSkge1xyXG5cclxuICAgIC8vIENyZWF0ZSB1bmlxdWUgY2xpZW50IGlkXHJcbiAgICBpZiAoIWxvY2FsU3RvcmFnZS5nZXRJdGVtKCdjbGlwcGVyX2NsaWVudF9pZCcpKSB7XHJcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdjbGlwcGVyX2NsaWVudF9pZCcsIFN5c3RlbVV0aWxzLmdlbmVyYXRlVVVJRCgpKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBJbml0aWFsaXplXHJcbiAgICB0aGlzLl9zZXJ2aWNlVXJpID0gc2VydmljZVVyaTtcclxuICAgIHRoaXMuX2ZsYWdzID0gZmxhZ3M7XHJcblxyXG4gICAgLy8gUmVhY3QgdG8gbWVzc2FnZSBicm9hZGNhc3RpbmdcclxuICAgIGlmICghdGhpcy5icm9hZGNhc3RTZXJ2aWNlU3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgIHRoaXMuYnJvYWRjYXN0U2VydmljZVN1YnNjcmlwdGlvbiA9IHRoaXMuYnJvYWRjYXN0U2VydmljZS5nZXRNZXNzYWdlKCkuc3Vic2NyaWJlKChtZXNzYWdlOiBCcm9hZGNhc3RNZXNzYWdlSW5mbykgPT4ge1xyXG4gICAgICAgIGlmIChtZXNzYWdlLmlkID09PSBDbGlwcGVyTWVzc2FnZXMuTE9HSU5fQ0hBTkdFRCkge1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubG9naW4oXHJcbiAgICAgICAgICAgICAgbWVzc2FnZS5kYXRhLmVtYWlsLFxyXG4gICAgICAgICAgICAgIG1lc3NhZ2UuZGF0YS5wYXNzd29yZCxcclxuICAgICAgICAgICAgICB0cnVlLFxyXG4gICAgICAgICAgICAgIG1lc3NhZ2UuZGF0YS5vYXV0aCxcclxuICAgICAgICAgICAgICBtZXNzYWdlLmRhdGEub2F1dGhBY2Nlc3NUb2tlbikuc3Vic2NyaWJlKChyOiBBcGlSZXN1bHQ8Q2xpcHBlckxvZ2luUmVzdWx0PikgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFyLnN1Y2Nlc3MpXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5lcnJvcihyLm1lc3NhZ2UsIG51bGwsIFwiRXJyb3JlIGRpIENsaXBwZXJcIik7XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKCh0aGlzLmZsYWdzICYgQ2xpcHBlclNlcnZpY2VGbGFncy5EaXNwbGF5Q29ubmVjdGlvblN0YXRlTWVzc2FnZXMpID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS50b2FzdCgnQ29ubmVzc28gYSBDbGlwcGVyJywgMTUwMCwgJ3Bvd2VyJyk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgLy8gTG9hZCBiYWdcclxuICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkQmFnKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9LCA1MDApO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobWVzc2FnZS5pZCA9PT0gQ2xpcHBlck1lc3NhZ2VzLkxPR09VVCkge1xyXG4gICAgICAgICAgaWYgKHRoaXMubG9nZ2VkSW4oKSkge1xyXG4gICAgICAgICAgICB0aGlzLmxvZ291dCgpLnN1YnNjcmliZShyID0+IHtcclxuICAgICAgICAgICAgICBpZiAoIXIuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmVycm9yKFwiPHA+XCIgKyByLm1lc3NhZ2UgKyBcIjwvcD48YnI+PGJyPjxocj48cCBjbGFzcz0nc21hbGwnPjxpPlBlciBlbGltaW5hcmUgbGEgY29uZmlndXJhemlvbmUgZGkgQ2xpcHBlciBhY2NlZGVyZSBhOjxicj48Yj5tZW51ID4gcGVyc29uYWxpenphID4gY29sbGVnYW1lbnRpPC9iPjwvaT48L3A+XCIsIG51bGwsIFwiRXJyb3JlIGRpIENsaXBwZXJcIik7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmICgodGhpcy5mbGFncyAmIENsaXBwZXJTZXJ2aWNlRmxhZ3MuRGlzcGxheUNvbm5lY3Rpb25TdGF0ZU1lc3NhZ2VzKSA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnRvYXN0KCdEaXNjb25uZXNzbyBkYSBDbGlwcGVyJywgMTUwMCwgJ3Bvd2VyX29mZicpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gRW1wdHkgYmFnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmJhZy5zZXQoW10pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmNsZWFyKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBFdmVsdWF0ZSBjdXJyZW50IHNlc3Npb24gc3RvcmFnZSBpbiBjYXNlIG9mIHBhZ2UgcmVmcmVzaCAoRjUpXHJcbiAgICBpZiAoIXRoaXMubG9nZ2VkSW4oKSAmJiB0aGlzLmdldFRva2VuKCkpIHtcclxuICAgICAgLy8gQXV0byBsb2dpblxyXG4gICAgICB0aGlzLmxvZ2dlZEluLnNldCh0cnVlKTtcclxuICAgICAgLy8gTm90aWZ5XHJcbiAgICAgIHRoaXMuYnJvYWRjYXN0U2VydmljZS5zZW5kTWVzc2FnZShDbGlwcGVyTWVzc2FnZXMuTE9HSU5fQ09NUExFVEVEKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gKiBTZXQgSldUIHRva2Vuc1xyXG4gKiBAcGFyYW0gdmFsdWUgOiB0aGUgbG9naW4gcmVzdWx0XHJcbiAqL1xyXG4gIHByaXZhdGUgc2V0VG9rZW4odmFsdWU6IENsaXBwZXJMb2dpblJlc3VsdCkge1xyXG4gICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnY2xpcHBlcl9qd3QnLCB2YWx1ZS50b2tlbik7XHJcbiAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCdjbGlwcGVyX2p3dF9yZWZyZXNoJywgdmFsdWUucmVmcmVzaFRva2VuID8/ICcnKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiBjdXJyZW50IEpXVCB0b2tlblxyXG4gICAqIEBwYXJhbSByZWZyZXNoOiB0cnVlIHRvIGdldCB0aGUgcmVmcmVzaCB0b2tlbi4gRGVmYXVsdCBpcyBmYWxzZS5cclxuICAgKi9cclxuICBnZXRUb2tlbihyZWZyZXNoOiBib29sZWFuID0gZmFsc2UpOiBzdHJpbmcge1xyXG4gICAgbGV0IHRva2VuID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShyZWZyZXNoID8gJ2NsaXBwZXJfand0X3JlZnJlc2gnIDogJ2NsaXBwZXJfand0Jyk7XHJcbiAgICBpZiAodG9rZW4gJiYgdG9rZW5bMF0gPT09ICdcIicpIHtcclxuICAgICAgcmV0dXJuIHRva2VuLnN1YnN0cmluZygxLCB0b2tlbi5sZW5ndGggLSAxKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0b2tlbiA/PyAnJztcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBTdG9yZSBsb2dpbiBpbmZvXHJcbiAgICovXHJcbiAgc3RvcmVMb2dpbigpIHtcclxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdjbGlwcGVyX2xvZ2luJywgSlNPTi5zdHJpbmdpZnkodGhpcy5fbG9naW5JbmZvKSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICogUGVyZm9ybSBhdXRvIGxvZ2luIHVzaW5nIGN1cnJlbnQgbGluayBkYXRhXHJcbiAgICogQHBhcmFtIGVtYWlsOiB0aGUgb3B0aW9uYWwgZW1haWwgaWYgdXNpbmcgT0F1dGgyXHJcbiAgICogQHBhcm1hIHBhc3N3b3JkOiB0aGUgb3B0aW9uYWwgcGFzc3dvcmQgaWYgdXNpbmcgT0F1dGgyXHJcbiAgICogQHBhcmFtIHJlbWVtYmVyOiByZW1lbWJlciBjcmVkZW50aWFscyBcclxuICAgKiBAcGFyYW0gb2F1dGg6IHRoZSBvcHRpb25hbCBvcGVuIGF1dGhlbnRpY2F0aW9uIHN1cHBvcnRlZFxyXG4gICAqIEBwYXJhbSBvYXV0aEFjY2Vzc1Rva2VuOiB0aGUgb3B0aW9uYWwgT0F1dGgyIGFjY2VzcyB0b2tlblxyXG4gKiBAcGFyYW0gb25TdWNjZXM6IGZ1bmN0aW9uIHRvIGV4ZWN1dGUgb24gc2VjY2Vzc1xyXG4gKi9cclxuICBhdXRvTG9naW4oXHJcbiAgICBlbWFpbDogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCA9IG51bGwsXHJcbiAgICBwYXNzd29yZDogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCA9IG51bGwsXHJcbiAgICByZW1lbWJlcjogYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQgPSBmYWxzZSxcclxuICAgIG9hdXRoOiBMb2dpbk9BdXRoVHlwZSB8IG51bGwgfCB1bmRlZmluZWQgPSBudWxsLFxyXG4gICAgb2F1dGhBY2Nlc3NUb2tlbjogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCA9IG51bGwsXHJcbiAgICBvblN1Y2NlczogRnVuY3Rpb24gfCBudWxsIHwgdW5kZWZpbmVkID0gbnVsbCk6IGJvb2xlYW4ge1xyXG4gICAgdGhpcy5sb2dpbihlbWFpbCwgcGFzc3dvcmQsIHJlbWVtYmVyLCBvYXV0aCwgb2F1dGhBY2Nlc3NUb2tlbilcclxuICAgICAgLnN1YnNjcmliZSgocjogQXBpUmVzdWx0PENsaXBwZXJMb2dpblJlc3VsdD4pID0+IHtcclxuICAgICAgICBpZiAoIXIuc3VjY2Vzcykge1xyXG4gICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmVycm9yKHIubWVzc2FnZSwgbnVsbCwgXCJFcnJvcmUgaW4gQ2xpcHBlclwiKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnRvYXN0KCdDb25uZXNzbyBhIENsaXBwZXInLCAxNTAwLCAncG93ZXInKTtcclxuICAgICAgICAgIGlmIChvblN1Y2Nlcykge1xyXG4gICAgICAgICAgICBvblN1Y2NlcygpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFBlcmZvcm0gYXV0byBsb2dvdXRcclxuICAgKiBAcGFyYW0gb25TdWNjZXM6IGZ1bmN0aW9uIHRvIGV4ZWN1dGUgb24gc2VjY2Vzc1xyXG4gICAqL1xyXG4gIGF1dG9Mb2dvdXQoXHJcbiAgICBvblN1Y2NlczogRnVuY3Rpb24gfCBudWxsIHwgdW5kZWZpbmVkID0gbnVsbCkge1xyXG4gICAgaWYgKCF0aGlzLmxvZ2dlZEluKCkpIHJldHVybjtcclxuICAgIHRoaXMubG9nb3V0KCkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogciA9PiB7XHJcbiAgICAgICAgaWYgKCFyLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5lcnJvcihyLm1lc3NhZ2UsIG51bGwsIFwiRXJyb3JlIGluIENsaXBwZXJcIik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS50b2FzdCgnRGlzY29ubmVzc28gZGEgQ2xpcHBlcicsIDE1MDAsICdwb3dlcl9vZmYnKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jbGVhcigpXHJcbiAgICAgICAgaWYgKG9uU3VjY2VzKSB7XHJcbiAgICAgICAgICBvblN1Y2NlcygpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQZXJmb3JtIGxvZ2luICAgXHJcbiAgICogQHBhcmFtIGVtYWlsOiB0aGUgb3B0aW9hbmwgZW1haWwgaWYgdXNpbmcgT0F1dGgyXHJcbiAgICogQHBhcm1hIHBhc3N3b3JkOiB0aGUgb3B0aW9uYWwgcGFzc3dvcmQgaWYgdXNpbmcgT0F1dGgyXHJcbiAgICogQHBhcmFtIHJlbWVtYmVyOiByZW1lbWJlciBjcmVkZW50aWFscyBcclxuICAgKiBAcGFyYW0gb2F1dGg6IHRoZSBvcHRpb25hbCBvcGVuIGF1dGhlbnRpY2F0aW9uIHN1cHBvcnRlZFxyXG4gICAqIEBwYXJhbSBvYXV0aEFjY2Vzc1Rva2VuOiB0aGUgb3B0aW9uYWwgT0F1dGgyIGFjY2VzcyB0b2tlblxyXG4gICAqIEByZXR1cm5zOiB0aGUgbG9naW4gcmVzdWx0XHJcbiAgICovXHJcbiAgbG9naW4oZW1haWw6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQgPSBudWxsLFxyXG4gICAgcGFzc3dvcmQ6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQgPSBudWxsLFxyXG4gICAgcmVtZW1iZXI6IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkID0gZmFsc2UsXHJcbiAgICBvYXV0aDogTG9naW5PQXV0aFR5cGUgfCBudWxsIHwgdW5kZWZpbmVkID0gbnVsbCxcclxuICAgIG9hdXRoQWNjZXNzVG9rZW46IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQgPSBudWxsKSB7XHJcbiAgICB0aGlzLmxvZ2dpbmdJbi5zZXQodHJ1ZSk7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XHJcbiAgICAgIC5wb3N0PEFwaVJlc3VsdDxDbGlwcGVyTG9naW5SZXN1bHQ+PihcclxuICAgICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9sb2dpbjInLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIHVzZXI6IG9hdXRoID8gbnVsbCA6IGVtYWlsLFxyXG4gICAgICAgICAgcGFzc3dvcmQ6IG9hdXRoID8gbnVsbCA6IHBhc3N3b3JkLFxyXG4gICAgICAgICAgY2xpZW50SWQ6IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiY2xpcHBlcl9jbGllbnRfaWRcIiksXHJcbiAgICAgICAgICBPQVVUSDogb2F1dGhcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGhlYWRlcnM6XHJcbiAgICAgICAgICAgICFvYXV0aFxyXG4gICAgICAgICAgICAgID8gbmV3IEh0dHBIZWFkZXJzKClcclxuICAgICAgICAgICAgICA6IG5ldyBIdHRwSGVhZGVycygpXHJcbiAgICAgICAgICAgICAgICAuc2V0KFwiQXV0aG9yaXphdGlvblwiLCBvYXV0aEFjY2Vzc1Rva2VuKVxyXG4gICAgICAgIH0pXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIGNhdGNoRXJyb3IoZXJyID0+IHtcclxuICAgICAgICAgIHRoaXMubG9nZ2luZ0luLnNldChmYWxzZSk7XHJcbiAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnY2xpcHBlcl9sb2dpbicpO1xyXG4gICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyKTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBtYXAoKHI6IEFwaVJlc3VsdDxDbGlwcGVyTG9naW5SZXN1bHQ+KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxvZ2dpbmdJbi5zZXQoZmFsc2UpO1xyXG4gICAgICAgICAgaWYgKHIuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICAvLyBTdG9yZSBhY2Nlc3MgdG9rZW5cclxuICAgICAgICAgICAgdGhpcy5zZXRUb2tlbihyLnZhbHVlKTtcclxuICAgICAgICAgICAgY29uc3QgbG9naW5JbmZvOiBDbGlwcGVyTG9naW5JbmZvID0ge1xyXG4gICAgICAgICAgICAgIGNvbnRleHQ6IHIudmFsdWUuY29udGV4dCxcclxuICAgICAgICAgICAgICB1c2VyU2V0dGluZ3M6IHIudmFsdWUuc2V0dGluZ3MsXHJcbiAgICAgICAgICAgICAgT0FVVEg6IG9hdXRoXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFvYXV0aCkge1xyXG4gICAgICAgICAgICAgIGxvZ2luSW5mby51c2VyQ3JlZGVudGlhbHMgPVxyXG4gICAgICAgICAgICAgICAgU3lzdGVtVXRpbHMuY2lwaGVyKFxyXG4gICAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeSh7XHJcbiAgICAgICAgICAgICAgICAgICAgZW1haWw6IGVtYWlsLFxyXG4gICAgICAgICAgICAgICAgICAgIHBhc3N3b3JkOiBwYXNzd29yZCxcclxuICAgICAgICAgICAgICAgICAgICByZW1lbWJlcjogcmVtZW1iZXIsXHJcbiAgICAgICAgICAgICAgICAgIH0pLCBsb2dpbkluZm8uY29udGV4dC51c2VySWQudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gVXBkYXRlIGluZm8gICAgICAgICAgICBcclxuICAgICAgICAgICAgdGhpcy5fbG9naW5JbmZvID0gbG9naW5JbmZvO1xyXG4gICAgICAgICAgICB0aGlzLnN0b3JlTG9naW4oKTtcclxuICAgICAgICAgICAgdGhpcy5sb2dnZWRJbi5zZXQodHJ1ZSk7XHJcbiAgICAgICAgICAgIC8vIE5vdGlmeVxyXG4gICAgICAgICAgICB0aGlzLmJyb2FkY2FzdFNlcnZpY2Uuc2VuZE1lc3NhZ2UoQ2xpcHBlck1lc3NhZ2VzLkxPR0lOX0NPTVBMRVRFRCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcjtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUGVyZm9ybSBsb2dvdXRcclxuICAgKi9cclxuICBsb2dvdXQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8YW55Pih0aGlzLl9zZXJ2aWNlVXJpICsgJy9sb2dvdXQnLCB7fSkucGlwZShcclxuICAgICAgbWFwKHIgPT4ge1xyXG4gICAgICAgIHRoaXMuY2xlYXIoKTtcclxuICAgICAgICByZXR1cm4gclxyXG4gICAgICB9KSxcclxuICAgICAgY2F0Y2hFcnJvcigoX2UpID0+IHtcclxuICAgICAgICB0aGlzLmNsZWFyKCk7XHJcbiAgICAgICAgcmV0dXJuIG9mKFtdKTtcclxuICAgICAgfSkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAqIFJlc2V0IGxvZ2luIHJlZnJlc2ggdGltZXIgYW5kIGxvZ2luIHN0YXRlXHJcbiAqL1xyXG4gIHJlc2V0KCkge1xyXG4gICAgLy8gQ2xlYXIgbG9naW4gaW5mb1xyXG4gICAgdGhpcy5fbG9naW5JbmZvID0gbnVsbDtcclxuICAgIC8vIExvZ2dlZCBvdXRcclxuICAgIHRoaXMubG9nZ2VkSW4uc2V0KGZhbHNlKTtcclxuICAgIC8vIE5vdGlmeVxyXG4gICAgdGhpcy5icm9hZGNhc3RTZXJ2aWNlLnNlbmRNZXNzYWdlKENsaXBwZXJNZXNzYWdlcy5MT0dPVVRfQ09NUExFVEVEKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENsZWFyIGxvZ2luIGRhdGFcclxuICAgKi9cclxuICBjbGVhcigpIHtcclxuICAgIC8vIENsZWFyIGxvY2FsIHN0b3JhZ2VcclxuICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oJ2NsaXBwZXJfand0Jyk7XHJcbiAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKCdjbGlwcGVyX2p3dF9yZWZyZXNoJyk7XHJcbiAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKCdjbGlwcGVyX29hdXRoJyk7XHJcbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnY2xpcHBlcl9sb2dpbicpO1xyXG5cclxuICAgIC8vIFJlc2V0IGxvZ2luXHJcbiAgICB0aGlzLnJlc2V0KCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAqIFBlcmZvcm0gdG9rZW4gcmVmcmVzaFxyXG4gKi9cclxuICByZWZyZXNoKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5nZXQ8QXBpUmVzdWx0PENsaXBwZXJMb2dpblJlc3VsdD4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9yZWZyZXNoMi8/dG9rZW49JyArIHRoaXMuZ2V0VG9rZW4odHJ1ZSlcclxuICAgICkucGlwZShtYXAoKHI6IEFwaVJlc3VsdDxDbGlwcGVyTG9naW5SZXN1bHQ+KSA9PiB7XHJcbiAgICAgIC8vIFVwZGF0ZSB0b2tlblxyXG4gICAgICB0aGlzLnNldFRva2VuKHIudmFsdWUpO1xyXG4gICAgfSkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgKiBHZXQgYSBuZXcgb25lIHRpbWUgcGFzc3dvcmRcclxuICAqIEBwYXJhbSBpZDogdGhlIG9wdGlvbmFsIHJlcG9zaXRvcnkgaWQgXHJcbiAgKi9cclxuICBuZXdPVFAoaWQ6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5nZXQ8QXBpUmVzdWx0PENsaXBwZXJPVFBJbmZvPj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL290cC9uZXcvP2lkPScgKyBpZCxcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBMb2FkIEFycyBldmVudHMgY2FsZW5kYXJcclxuICAgKi9cclxuICBldmVudHMocGFyYW1zOiBDbGlwcGVyU2VhcmNoQXJzRXZlbnRzUGFyYW1zKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8QXBpUmVzdWx0PENsaXBwZXJTZWFyY2hBcnNFdmVudHNSZXN1bHQ+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvYXJzL2V2ZW50cycsXHJcbiAgICAgIHBhcmFtc1xyXG4gICAgKTtcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBRdWVyeSBkb2N1bWVudHNcclxuICAgKi9cclxuICBxdWVyeShwYXJhbXM6IENsaXBwZXJTZWFyY2hQYXJhbXMpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxBcGlSZXN1bHQ8Q2xpcHBlclNlYXJjaFJlc3VsdD4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9kb2N1bWVudHMnLFxyXG4gICAgICBwYXJhbXNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgZmFjZXRzIGZvciBhIHF1ZXJ5XHJcbiAgICovXHJcbiAgcXVlcnlGYWNldHMocGFyYW1zOiBDbGlwcGVyU2VhcmNoUGFyYW1zKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8QXBpUmVzdWx0PENsaXBwZXJTZWFyY2hGYWNldHNSZXN1bHQ+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvZG9jdW1lbnRzL2ZhY2V0cycsXHJcbiAgICAgIHBhcmFtc1xyXG4gICAgKTtcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAqIFVwZGF0ZSBkb2N1bWVudCBzdGF0ZVxyXG4gICovXHJcbiAgdXBkYXRlU3RhdGUocGFyYW1zOiBDbGlwcGVyRG9jdW1lbnRVcGRhdGVTdGF0ZVBhcmFtcykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxudW1iZXI+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvZG9jdW1lbnRzL3N0YXRlL3VwZGF0ZScsXHJcbiAgICAgIHBhcmFtc1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEV4cG9ydCBhIGRvY3VtZW50IGluIHBkZiBmb3JtYXRcclxuICAgKi9cclxuICBleHBvcnRQZGYoaWQ6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5nZXQoXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2RvY3VtZW50cy9leHBvcnQvJyArIGlkLFxyXG4gICAgICB7IHJlc3BvbnNlVHlwZTogJ2Jsb2InIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIC8qKlxyXG4gKiBFeHBvcnQgZG9jdW1lbnQgbGlzdCAocXVlcnkgb3Igc2VsZWN0ZWQgaXRlbXMpIG9yIGV4cG9ydCBkZWFkbGluZXMgYXMgaWNzXHJcbiAqL1xyXG4gIGV4cG9ydChwYXJhbXM6IENsaXBwZXJFeHBvcnREb2N1bWVudHNQYXJhbXMpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdChcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvZG9jdW1lbnRzL2V4cG9ydCcsXHJcbiAgICAgIHBhcmFtcyxcclxuICAgICAgeyByZXNwb25zZVR5cGU6ICdibG9iJyB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2VuZCBkb2N1bWVudHMgbGluayBieSBlbWFpbFxyXG4gICAqL1xyXG4gIHNlbmRUbyhwYXJhbXM6IENsaXBwZXJTZW5kRG9jdW1lbnRzQnlFbWFpbFBhcmFtcykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxudW1iZXI+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvZG9jdW1lbnRzL3NlbmQnLFxyXG4gICAgICBwYXJhbXNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEaXNwbGF5IGEgcGFnZSB0aGUgZnVsbCBkb2N1bWVudCByZXBvcnRcclxuICAgKi9cclxuICByZXBvcnQoaWQ6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5nZXQoXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2RvY3VtZW50cy9yZXBvcnQvJyArIGlkLFxyXG4gICAgICB7IHJlc3BvbnNlVHlwZTogJ2Jsb2InIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgZG9jdW1lbnQgY29tbWVudFxyXG4gICAqL1xyXG4gIGNvbW1lbnQoaWQ6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5nZXQ8QXBpUmVzdWx0PHN0cmluZz4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9kb2N1bWVudHMvY29tbWVudC8nICsgaWRcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgZG9jdW1lbnQgaW5mb1xyXG4gICAqL1xyXG4gIGluZm8oaWQ6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5nZXQ8QXBpUmVzdWx0PENsaXBwZXJEb2N1bWVudEluZm8+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvZG9jdW1lbnRzL2luZm8vJyArIGlkXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGRvY3VtZW50IHN0cnVjdHVyZVxyXG4gICAqL1xyXG4gIGluZGV4KGlkOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0PEFwaVJlc3VsdDxDbGlwcGVyRG9jdW1lbnRTdHJ1Y3R1cmU+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvZG9jdW1lbnRzL3N0cnVjdHVyZS8nICsgaWRcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgZG9jdW1lbnQgbGFzdCB1cGRhdGVcclxuICAgKi9cclxuICBsYXN0VXBkYXRlKGlkOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0PEFwaVJlc3VsdDxzdHJpbmc+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvZG9jdW1lbnRzL2xhc3QtdXBkYXRlLycgKyBpZFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFF1ZXJ5IGRvY3VtZW50IHJlZmVyZW5jZXNcclxuICAgKi9cclxuICByZWZlcmVuY2VzKHBhcmFtczogQ2xpcHBlclJlZmVyZW5jZXNTZWFyY2hQYXJhbXMpIHtcclxuICAgIGxldCBtb2RlID0gcGFyYW1zLm1vZGU7XHJcbiAgICBpZiAoIW1vZGUpIG1vZGUgPSBDbGlwcGVyUXVlcnlSZWZlcmVuY2VzTW9kZS5SZWZlcmVuY2VzSW47XHJcbiAgICBzd2l0Y2ggKG1vZGUpIHtcclxuICAgICAgY2FzZSBDbGlwcGVyUXVlcnlSZWZlcmVuY2VzTW9kZS5SZWZlcmVuY2VzSW46XHJcbiAgICAgIGNhc2UgQ2xpcHBlclF1ZXJ5UmVmZXJlbmNlc01vZGUuUmVmZXJlbmNlc091dDpcclxuICAgICAgICBwYXJhbXMubW9kZSA9IG1vZGU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxDbGlwcGVyU2VhcmNoUmVzdWx0Pj4oXHJcbiAgICAgICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9kb2N1bWVudHMvcmVmZXJlbmNlcycsXHJcbiAgICAgICAgICBwYXJhbXNcclxuICAgICAgICApO1xyXG4gICAgICBjYXNlIENsaXBwZXJRdWVyeVJlZmVyZW5jZXNNb2RlLkNoYW5nZXNJbjpcclxuICAgICAgY2FzZSBDbGlwcGVyUXVlcnlSZWZlcmVuY2VzTW9kZS5DaGFuZ2VzT3V0OlxyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxBcGlSZXN1bHQ8Q2xpcHBlclNlYXJjaFJlc3VsdD4+KFxyXG4gICAgICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvZG9jdW1lbnRzL2NoYW5nZXMnLFxyXG4gICAgICAgICAgcGFyYW1zXHJcbiAgICAgICAgKTtcclxuICAgICAgY2FzZSBDbGlwcGVyUXVlcnlSZWZlcmVuY2VzTW9kZS5KdXJpczpcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8QXBpUmVzdWx0PENsaXBwZXJTZWFyY2hSZXN1bHQ+PihcclxuICAgICAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2RvY3VtZW50cy9qdXJpcycsXHJcbiAgICAgICAgICBwYXJhbXNcclxuICAgICAgICApO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGZhY2V0cyBmb3IgYSBkb2N1bWVudCByZWZlcmVuY2VzXHJcbiAgICovXHJcbiAgcmVmZXJlbmNlc0ZhY2V0cyhwYXJhbXM6IENsaXBwZXJSZWZlcmVuY2VzU2VhcmNoUGFyYW1zKSB7XHJcbiAgICBsZXQgbW9kZSA9IHBhcmFtcy5tb2RlID8/IENsaXBwZXJRdWVyeVJlZmVyZW5jZXNNb2RlLlJlZmVyZW5jZXNJbjtcclxuICAgIHN3aXRjaCAobW9kZSkge1xyXG4gICAgICBjYXNlIENsaXBwZXJRdWVyeVJlZmVyZW5jZXNNb2RlLlJlZmVyZW5jZXNJbjpcclxuICAgICAgY2FzZSBDbGlwcGVyUXVlcnlSZWZlcmVuY2VzTW9kZS5SZWZlcmVuY2VzT3V0OlxyXG4gICAgICAgIHBhcmFtcy5tb2RlID0gbW9kZTtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8QXBpUmVzdWx0PENsaXBwZXJTZWFyY2hGYWNldHNSZXN1bHQ+PihcclxuICAgICAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2RvY3VtZW50cy9yZWZlcmVuY2VzL2ZhY2V0cycsXHJcbiAgICAgICAgICBwYXJhbXNcclxuICAgICAgICApO1xyXG4gICAgICBjYXNlIENsaXBwZXJRdWVyeVJlZmVyZW5jZXNNb2RlLkNoYW5nZXNJbjpcclxuICAgICAgY2FzZSBDbGlwcGVyUXVlcnlSZWZlcmVuY2VzTW9kZS5DaGFuZ2VzT3V0OlxyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxBcGlSZXN1bHQ8Q2xpcHBlclNlYXJjaEZhY2V0c1Jlc3VsdD4+KFxyXG4gICAgICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvZG9jdW1lbnRzL2NoYW5nZXMvZmFjZXRzJyxcclxuICAgICAgICAgIHBhcmFtc1xyXG4gICAgICAgICk7XHJcbiAgICAgIGNhc2UgQ2xpcHBlclF1ZXJ5UmVmZXJlbmNlc01vZGUuSnVyaXM6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxDbGlwcGVyU2VhcmNoRmFjZXRzUmVzdWx0Pj4oXHJcbiAgICAgICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9kb2N1bWVudHMvanVyaXMvZmFjZXRzJyxcclxuICAgICAgICAgIHBhcmFtc1xyXG4gICAgICAgICk7XHJcbiAgICAgIGRlZmF1bHQ6IHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGRvY3VtZW50IGp1cmlzIGFydGljbGVzXHJcbiAgICovXHJcbiAganVyaXNBcnRpY2xlcyhwYXJhbXM6IENsaXBwZXJTZWFyY2hQYXJhbXMpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxBcGlSZXN1bHQ8Q2xpcHBlclNlYXJjaFJlc3VsdD4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9kb2N1bWVudHMvanVyaXMvYXJ0aWNsZXMnLFxyXG4gICAgICBwYXJhbXNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAqIEdldCBkZWFkbGluZXMgc25hcHNob3QgYmFzZWQgb24gdGhlIGRlYWRsaW5lc1xyXG4gICovXHJcbiAgZGVhZGxpbmVzU25hcHNob3QocGFyYW1zOiBDbGlwcGVyQ2FsZW5kYXJTZWFyY2hQYXJhbXMpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxBcGlSZXN1bHQ8Q2xpcHBlclNlYXJjaENhbGVuZGFyU25hcHNob3RSZXN1bHQ+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvZG9jdW1lbnRzL2NhbGVuZGFyL3NuYXBzaG90JyxcclxuICAgICAgcGFyYW1zXHJcbiAgICApO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHJpZXZlIHRoZSB0YXhvbm9teVxyXG4gICAqL1xyXG4gIGdldFRheG9ub215KHBhcmFtczogQ2xpcHBlclRheG9ub215UGFyYW1zIHwgbnVsbCA9IG51bGwpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxBcGlSZXN1bHQ8Rm9sZGVyVHJlZT4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy90YXhvbm9teScsXHJcbiAgICAgIHBhcmFtcyA/PyB7IG1vZGVsOiAwLCBjb3VudEl0ZW1zOiBmYWxzZSB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0cmlldmUgdG9waWNzXHJcbiAgICovXHJcbiAgZ2V0VG9waWNzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5nZXQ8QXBpUmVzdWx0PE5hbWVWYWx1ZUl0ZW08c3RyaW5nPltdPj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL3RvcGljcydcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICogUmV0cmlldmUgdG9waWNzIGFzIHRyZWVcclxuICovXHJcbiAgZ2V0VG9waWNzQXNUcmVlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5nZXQ8QXBpUmVzdWx0PEZvbGRlclRyZWU+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvdG9waWNzMidcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZSB0YWdzXHJcbiAgICovXHJcbiAgZ2V0VGFncygpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0PEFwaVJlc3VsdDxOYW1lVmFsdWVJdGVtPHN0cmluZz5bXT4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy90YWdzJ1xyXG4gICAgKTtcclxuICB9XHJcblxyXG5cclxuICAvLy9cclxuICAvLyBEQVNIQk9BUkRcclxuICAvLy9cclxuICAvKipcclxuICAqIFJldHJpZXZlIGN1cnJlbnQgZGFzaGJvYXJkXHJcbiAgKi9cclxuICBsb2FkRGFzaGJvYXJkKCkge1xyXG4gICAgdGhpcy5odHRwQ2xpZW50XHJcbiAgICAgIC5wb3N0PEFwaVJlc3VsdDxDbGlwcGVyRGFzaGJvYXJkUmVzdWx0Pj4oXHJcbiAgICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvYWNjb3VudC9kYXNoYm9hcmQnLFxyXG4gICAgICAgIHsgcmVmcmVzaGluZzogdHJ1ZSB9XHJcbiAgICAgICkuc3Vic2NyaWJlKChyOiBBcGlSZXN1bHQ8Q2xpcHBlckRhc2hib2FyZFJlc3VsdD4pID0+IHtcclxuICAgICAgICBpZiAoci5zdWNjZXNzKSB7XHJcbiAgICAgICAgICB0aGlzLmRhc2hib2FyZC5kb2N1bWVudFVwZGF0ZXMgPSByLnZhbHVlLmRvY3VtZW50VXBkYXRlcztcclxuICAgICAgICAgIHRoaXMuZGFzaGJvYXJkLmV4cGlyZWREZWFkbGluZXMgPSByLnZhbHVlLmV4cGlyZWREZWFkbGluZXM7XHJcbiAgICAgICAgICB0aGlzLmRhc2hib2FyZC5leHBpcmluZ0RlYWRsaW5lcyA9IHIudmFsdWUuZXhwaXJpbmdEZWFkbGluZXM7XHJcbiAgICAgICAgICB0aGlzLmRhc2hib2FyZC5pc1RyaWFsID0gci52YWx1ZS5pc1RyaWFsO1xyXG4gICAgICAgICAgdGhpcy5kYXNoYm9hcmQuaXRlbXMuc2V0KHIudmFsdWUuaXRlbXMpO1xyXG4gICAgICAgICAgdGhpcy5icm9hZGNhc3RTZXJ2aWNlLnNlbmRNZXNzYWdlKENsaXBwZXJNZXNzYWdlcy5DT01NQU5EX0RBU0hCT0FSRF9VUERBVEVEKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgKiBVcGRhdGUgdW5yZWFkIGl0ZW1zXHJcbiAgKiBAcGFyYW0gbW9kdWxlIDogdGhlIG1vZHVsZVxyXG4gICogQHBhcmFtIGluY3JlbWVudCA6IHRoZSBpbmNyZW1lbnQgKGNhbiBiZSBuZWdhdGl2ZSlcclxuICAqL1xyXG4gIHVwZGF0ZVVucmVhZEl0ZW1zKG1vZHVsZTogQ2xpcHBlck1vZHVsZSwgaW5jcmVtZW50OiBudW1iZXIpIHtcclxuICAgIHRoaXMuZGFzaGJvYXJkLnVwZGF0ZVVucmVhZEl0ZW1zKG1vZHVsZSwgaW5jcmVtZW50KTtcclxuICAgIHRoaXMuYnJvYWRjYXN0U2VydmljZS5zZW5kTWVzc2FnZShDbGlwcGVyTWVzc2FnZXMuQ09NTUFORF9EQVNIQk9BUkRfVVBEQVRFRCk7XHJcbiAgfVxyXG5cclxuICAvLy9cclxuICAvLyBMSU5LU1xyXG4gIC8vL1xyXG5cclxuICAvKipcclxuICAqIFNhdmUgYSB1c2VyIGxpbmtcclxuICAqIEBwYXJhbSBpdGVtOiB0aGUgdXNlciBsaW5rXHJcbiAgKi9cclxuICBzYXZlTGluayhpdGVtOiBDbGlwcGVyVXNlckxpbmspIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxBcGlSZXN1bHQ8Ym9vbGVhbj4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9hY2NvdW50L2xpbmtzL3NhdmUnLFxyXG4gICAgICBpdGVtXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGVsZXRlIGEgdXNlciBsaW5rXHJcbiAgICogQHBhcmFtIGl0ZW06IHRoZSB1c2VyIGxpbmtcclxuICAgKi9cclxuICBkZWxldGVMaW5rKGl0ZW06IENsaXBwZXJVc2VyTGluaykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxib29sZWFuPj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2FjY291bnQvbGlua3MvZGVsZXRlJyxcclxuICAgICAgaXRlbVxyXG4gICAgKTtcclxuICB9XHJcblxyXG5cclxuICAvLy9cclxuICAvLyBCQUcgLSBXT1JLSU5HIERPQ1VNRU5UU1xyXG4gIC8vL1xyXG5cclxuICAvKipcclxuICAgKiBMb2FkIHdvcmtpbmcgZG9jdW1lbnRzXHJcbiAgICovXHJcbiAgbG9hZEJhZygpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcclxuICAgICAgLmdldDxBcGlSZXN1bHQ8Q2xpcHBlclVzZXJXb3JraW5nRG9jdW1lbnRbXT4+KFxyXG4gICAgICAgIHRoaXMuc2VydmljZVVyaSArICcvZG9jdW1lbnRzL3dvcmtpbmcnXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAocjogQXBpUmVzdWx0PENsaXBwZXJVc2VyV29ya2luZ0RvY3VtZW50W10+KSA9PiB7XHJcbiAgICAgICAgICBpZiAoIXIuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuZXJyb3Ioci5tZXNzYWdlKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChyLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgaXRlbXM6IENsaXBwZXJEb2N1bWVudEluZm9bXSA9IFtdO1xyXG4gICAgICAgICAgICAgIHIudmFsdWUuZm9yRWFjaChuID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChuLmRvY3VtZW50RGVzY3JpcHRvcikge1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCBkb2N1bWVudEluZm8gPSBKU09OLnBhcnNlKG4uZG9jdW1lbnREZXNjcmlwdG9yKTtcclxuICAgICAgICAgICAgICAgICAgaWYgKGRvY3VtZW50SW5mbykge1xyXG4gICAgICAgICAgICAgICAgICAgIG4uZG9jdW1lbnRJZCA9IGRvY3VtZW50SW5mby5Eb2N1bWVudElkIHx8IGRvY3VtZW50SW5mby5JZDtcclxuICAgICAgICAgICAgICAgICAgICBuLnRpdGxlMSA9IGRvY3VtZW50SW5mby5UaXRsZTEgPz8gZG9jdW1lbnRJbmZvLlRpdGxlMjtcclxuICAgICAgICAgICAgICAgICAgICBuLnRpdGxlMiA9IGRvY3VtZW50SW5mby5UaXRsZTEgPyBkb2N1bWVudEluZm8uVGl0bGUyIDogbnVsbDtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBuLmRvY3VtZW50RGVzY3JpcHRvciA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2gobik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5iYWcuc2V0KGl0ZW1zKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWRkIG9uZSBvciBtb3JlIHdvcmtpbmcgZG9jdW1lbnRcclxuICAgKiBAcGFyYW0gZG9jdW1lbnRJZHMgOiB0aGUgZG9jdW1lbnQgaWRzIHRvIGFkZFxyXG4gICAqL1xyXG4gIGFkZFRvQmFnKGRvY3VtZW50SWRzOiBzdHJpbmdbXSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxyXG4gICAgICAucG9zdDxBcGlSZXN1bHQ8Q2xpcHBlclVzZXJXb3JraW5nRG9jdW1lbnRbXT4+KFxyXG4gICAgICAgIHRoaXMuc2VydmljZVVyaSArICcvZG9jdW1lbnRzL3dvcmtpbmcvYWRkJyxcclxuICAgICAgICB7IGRvY3VtZW50SWRzOiBkb2N1bWVudElkcyB9XHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSgocjogQXBpUmVzdWx0PENsaXBwZXJVc2VyV29ya2luZ0RvY3VtZW50W10+KSA9PiB7XHJcbiAgICAgICAgaWYgKCFyLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5lcnJvcihyLm1lc3NhZ2UpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAoci52YWx1ZSkge1xyXG4gICAgICAgICAgICBjb25zdCBuZXdJdGVtczogQ2xpcHBlckRvY3VtZW50SW5mb1tdID0gW107XHJcbiAgICAgICAgICAgIHIudmFsdWUuZm9yRWFjaChuID0+IHtcclxuICAgICAgICAgICAgICBpZiAobi5kb2N1bWVudERlc2NyaXB0b3IpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRvY3VtZW50SW5mbyA9IEpTT04ucGFyc2Uobi5kb2N1bWVudERlc2NyaXB0b3IpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGRvY3VtZW50SW5mbykge1xyXG4gICAgICAgICAgICAgICAgICBuLmRvY3VtZW50SWQgPSBkb2N1bWVudEluZm8uRG9jdW1lbnRJZCB8fCBkb2N1bWVudEluZm8uSWQ7XHJcbiAgICAgICAgICAgICAgICAgIG4udGl0bGUxID0gZG9jdW1lbnRJbmZvLlRpdGxlMSA/PyBkb2N1bWVudEluZm8uVGl0bGUyO1xyXG4gICAgICAgICAgICAgICAgICBuLnRpdGxlMiA9IGRvY3VtZW50SW5mby5UaXRsZTEgPyBkb2N1bWVudEluZm8uVGl0bGUyIDogbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIG4uZG9jdW1lbnREZXNjcmlwdG9yID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIG5ld0l0ZW1zLnB1c2gobik7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgaWYgKG5ld0l0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICB0aGlzLmJhZy51cGRhdGUoKHZhbHVlczogYW55KSA9PiBbLi4udmFsdWVzLCAuLi5uZXdJdGVtc10pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS50b2FzdCgnT3BlcmF6aW9uZSBjb21wbGV0YXRhIGNvbiBzdWNjZXNzby4nKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVtb3ZlIG9uZSB3b3JraW5nIGRvY3VtZW50XHJcbiAgICogQHBhcmFtIGRvY3VtZW50SWQgOiB0aGUgZG9jdW1lbnQgaWRcclxuICAgKi9cclxuICByZW1vdmVGcm9tQmFnKGRvY3VtZW50SWQ6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxyXG4gICAgICAucG9zdDxBcGlSZXN1bHQ8bnVtYmVyPj4oXHJcbiAgICAgICAgdGhpcy5zZXJ2aWNlVXJpICsgJy9kb2N1bWVudHMvd29ya2luZy9kZWxldGUnLFxyXG4gICAgICAgIHsgZG9jdW1lbnRJZHM6IFtkb2N1bWVudElkXSB9XHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSgocjogQXBpUmVzdWx0PG51bWJlcj4pID0+IHtcclxuICAgICAgICBpZiAoIXIuc3VjY2Vzcykge1xyXG4gICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmVycm9yKHIubWVzc2FnZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IHAgPSB0aGlzLmJhZygpLmZpbmRJbmRleCgobjogYW55KSA9PiBuLmRvY3VtZW50SWQgPT09IGRvY3VtZW50SWQpO1xyXG4gICAgICAgICAgaWYgKHAgIT09IC0xKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYmFnLnVwZGF0ZSgodmFsdWVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICB2YWx1ZXMuc3BsaWNlKHAsIDEpO1xyXG4gICAgICAgICAgICAgIHJldHVybiBbLi4udmFsdWVzXTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS50b2FzdCgnT3BlcmF6aW9uZSBjb21wbGV0YXRhIGNvbiBzdWNjZXNzby4nKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2xlYXIgYWxsIHdvcmtpbmcgZG9jdW1lbnRzXHJcbiAgICovXHJcbiAgY2xlYXJCYWcoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XHJcbiAgICAgIC5wb3N0PEFwaVJlc3VsdDxudW1iZXI+PihcclxuICAgICAgICB0aGlzLnNlcnZpY2VVcmkgKyAnL2RvY3VtZW50cy93b3JraW5nL2RlbGV0ZScsXHJcbiAgICAgICAgeyBkZWxldGVBbGw6IHRydWUgfVxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoKHI6IEFwaVJlc3VsdDxudW1iZXI+KSA9PiB7XHJcbiAgICAgICAgaWYgKCFyLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5lcnJvcihyLm1lc3NhZ2UpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmJhZy5zZXQoW10pO1xyXG4gICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnRvYXN0KCdPcGVyYXppb25lIGNvbXBsZXRhdGEgY29uIHN1Y2Nlc3NvLicpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLy9cclxuICAvLyBXT1JLSU5HIFNFQVJDSEVTXHJcbiAgLy8vXHJcblxyXG4gIC8qKlxyXG4gICAqIExvYWQgd29ya2luZyBzZWFyY2hlc1xyXG4gICAqIEBwYXJhbTogbW9kdWxlOiB0aGUgbW9kdWxlIHRvIGxvYWQgc2VhcmNoZXMgZm9yXHJcbiAgICovXHJcbiAgbG9hZFNlYXJjaGVzKG1vZHVsZTogQ2xpcHBlck1vZHVsZSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxyXG4gICAgICAuZ2V0PEFwaVJlc3VsdDxDbGlwcGVyVXNlclNlYXJjaFtdPj4oXHJcbiAgICAgICAgdGhpcy5zZXJ2aWNlVXJpICsgJy9kb2N1bWVudHMvc2VhcmNoZXMvP21vZHVsZT0nICsgbW9kdWxlXHJcbiAgICAgIClcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNhdmUgYSB3b3JraW5nIHNlYXJjaFxyXG4gICAqIEBwYXJhbSBwYXJhbXMgOiB0aGUgY2xpcHBlciB1c2VyIHNlYXJjaFxyXG4gICAqL1xyXG4gIHNhdmVTZWFyY2gocGFyYW1zOiBDbGlwcGVyVXNlclNlYXJjaCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxyXG4gICAgICAucG9zdDxBcGlSZXN1bHQ8Q2xpcHBlclVzZXJTZWFyY2g+PihcclxuICAgICAgICB0aGlzLnNlcnZpY2VVcmkgKyAnL2RvY3VtZW50cy9zZWFyY2hlcy9zYXZlJyxcclxuICAgICAgICBwYXJhbXNcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlbW92ZSBvbmUgd29ya2luZyBzZWFyY2hcclxuICAgKiBAcGFyYW0gaWQgOiB0aGUgaWQgdG8gcmVtb3ZlXHJcbiAgICovXHJcbiAgZGVsZXRlU2VhcmNoKGlkOiBudW1iZXIpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcclxuICAgICAgLnBvc3Q8QXBpUmVzdWx0PG51bWJlcj4+KFxyXG4gICAgICAgIHRoaXMuc2VydmljZVVyaSArICcvZG9jdW1lbnRzL3NlYXJjaGVzL2RlbGV0ZScsXHJcbiAgICAgICAgeyBpZDogaWQgfVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgLy8vXHJcbiAgLy8gVVNFUiBTRVRUSU5HUyBBTkQgVFJJQUxcclxuICAvLy9cclxuXHJcbiAgLyoqXHJcbiogUmVzZXQgYSB1c2VyIHBhc3N3b3JkXHJcbiogQHBhcmFtIHBhcmFtcyBwYXJhbWV0ZXJzXHJcbiovXHJcbiAgcmVzZXRQYXNzd29yZChwYXJhbXM6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxSZXNldFBhc3N3b3JkRGlhbG9nUmVzdWx0Pj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2FjY291bnQvcGFzc3dvcmQvcmVzZXQnLFxyXG4gICAgICBwYXJhbXNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZWNvdmVyIHBhc3N3b3JkXHJcbiAgICogQHBhcmFtIHBhcmFtcyBwYXJhbWV0ZXJzXHJcbiAgICovXHJcbiAgcmVjb3ZlclBhc3N3b3JkKHBhcmFtczogUmVjb3ZlclBhc3N3b3JkRGlhbG9nRGF0YSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxSZWNvdmVyUGFzc3dvcmREaWFsb2dSZXN1bHQ+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvYWNjb3VudC9wYXNzd29yZC9yZWNvdmVyJyxcclxuICAgICAgcGFyYW1zXHJcbiAgICApO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZSBzZXR0aW5ncyBcclxuICAgICAqIEBwYXJhbSBwYXJhbXMgcGFyYW1ldGVyc1xyXG4gICAqL1xyXG4gIHVwZGF0ZVNldHRpbmdzKHBhcmFtczogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8QXBpUmVzdWx0PGJvb2xlYW4+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvYWNjb3VudC9zZXR0aW5ncy91cGRhdGUnLFxyXG4gICAgICBwYXJhbXNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGUgY2hhbm5lbCBzdGF0ZVxyXG4gICAqIEBwYXJhbSBpZDogdGhlIGNoYW5uZWwgaWQgKDEsIDIsIDMsIDQpXHJcbiAgICovXHJcbiAgdXBkYXRlQ2hhbm5lbFN0YXRlKGlkOiBudW1iZXIsIGVuYWJsZWQ6IGJvb2xlYW4pIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxBcGlSZXN1bHQ8Q2xpcHBlckRhc2hib2FyZFJlc3VsdD4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9hY2NvdW50L3NldHRpbmdzL2NoYW5uZWxzL3VwZGF0ZScsXHJcbiAgICAgIHtcclxuICAgICAgICBjaGFubmVsSWQ6IGlkLFxyXG4gICAgICAgIGlzRW5hYmxlZDogZW5hYmxlZCxcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCB0cmlhbCBpbmZvXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZXRUcmlhbEluZm8oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LmdldDxBcGlSZXN1bHQ8Q2xpcHBlclVzZXJUcmlhbEluZm8+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvYWNjb3VudC90cmlhbCdcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGUgdHJpYWwgaW5mb1xyXG4gICAqL1xyXG4gIHVwZGF0ZVRyaWFsSW5mbygpIHtcclxuICAgIGlmICghdGhpcy5fbG9naW5JbmZvIHx8IHRoaXMuX2xvZ2luSW5mbz8uY29udGV4dC5oYXNUcmlhbCA9PT0gZmFsc2UpXHJcbiAgICAgIHJldHVybjsgLy8gTm90IHN1cHBvcnRlZFxyXG4gICAgdGhpcy5nZXRUcmlhbEluZm8oKS5zdWJzY3JpYmUoKHI6IEFwaVJlc3VsdDxDbGlwcGVyVXNlclRyaWFsSW5mbz4pID0+IHtcclxuICAgICAgaWYgKHIuc3VjY2Vzcykge1xyXG4gICAgICAgIGlmIChyLnZhbHVlKSB7XHJcbiAgICAgICAgICB0aGlzLl9sb2dpbkluZm8uY29udGV4dC5oYXNUcmlhbCA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLl9sb2dpbkluZm8uY29udGV4dC50cmlhbEluZm8gPSByLnZhbHVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLl9sb2dpbkluZm8uY29udGV4dC5oYXNUcmlhbCA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5fbG9naW5JbmZvLmNvbnRleHQudHJpYWxJbmZvID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8vXHJcbiAgLy8gVEVBTVNcclxuICAvLy9cclxuXHJcbiAgLyoqXHJcbiAgKiBSZW5hbWUgYSB0ZWFtXHJcbiAgKiBAcGFyYW0gbmV3TmFtZSA6IHRoZSBuZXcgbmFtZVxyXG4gICovXHJcbiAgcmVuYW1lVGVhbShuZXdOYW1lOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxBcGlSZXN1bHQ8Q2xpcHBlclRlYW1JbmZvPj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2FjY291bnQvdGVhbXMvdXBkYXRlJyxcclxuICAgICAgeyB0aXRsZTogbmV3TmFtZSB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0cmlldmUgdGVhbXNcclxuICAgKi9cclxuICBnZXRUZWFtcyhwYXJhbXM6IENsaXBwZXJUZWFtc1NlYXJjaFBhcmFtcykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxDbGlwcGVyVGVhbXNTZWFyY2hSZXN1bHQ+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvYWNjb3VudC90ZWFtcycsXHJcbiAgICAgIHBhcmFtc1xyXG4gICAgKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHI6IEFwaVJlc3VsdDxDbGlwcGVyVGVhbXNTZWFyY2hSZXN1bHQ+KSA9PiB7XHJcbiAgICAgICAgICAvLyBTdG9yZSB0ZWFtc1xyXG4gICAgICAgICAgdGhpcy5fdGVhbXMgPSByLnZhbHVlLml0ZW1zO1xyXG4gICAgICAgICAgcmV0dXJuIHI7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHJpZXZlIHRlYW0gbWVtYmVyc1xyXG4gICAqL1xyXG4gIGdldFRlYW1NZW1iZXJzKHBhcmFtczogQ2xpcHBlclRlYW1zU2VhcmNoUGFyYW1zKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8QXBpUmVzdWx0PENsaXBwZXJUZWFtTWVtYmVyc1NlYXJjaFJlc3VsdD4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9hY2NvdW50L3RlYW1zL21lbWJlcnMnLFxyXG4gICAgICBwYXJhbXNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEZWxldGUgbWVtYmVyc1xyXG4gICAqIEBwYXJhbSBpZHM6IHRoZSBpZCBsaXN0IHRvIGRlbGV0ZVxyXG4gICAqL1xyXG4gIGRlbGV0ZVRlYW1NZW1iZXJzKGlkczogbnVtYmVyW10pIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxBcGlSZXN1bHQ8bnVtYmVyPj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2FjY291bnQvdGVhbXMvbWVtYmVycy9kZWxldGUnLFxyXG4gICAgICB7IGlkczogaWRzIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTYXZlIG1lbWJlclxyXG4gICAqIEBwYXJhbSBpdGVtOiB0aGUgaXRlbSB0byBzYXZlXHJcbiAgICovXHJcbiAgc2F2ZVRlYW1NZW1iZXIoaXRlbTogQ2xpcHBlclRlYW1NZW1iZXJJbmZvKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8QXBpUmVzdWx0PENsaXBwZXJUZWFtTWVtYmVySW5mbz4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9hY2NvdW50L3RlYW1zL21lbWJlcnMvc2F2ZScsXHJcbiAgICAgIGl0ZW1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vXHJcbiAgLy8gQ0FMRU5EQVJcclxuICAvLy9cclxuICAvKipcclxuICAgKiBRdWVyeSBjYWxlbmRhclxyXG4gICAqL1xyXG4gIHF1ZXJ5Q2FsZW5kYXIocGFyYW1zOiBDbGlwcGVyQ2FsZW5kYXJTZWFyY2hQYXJhbXMpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxBcGlSZXN1bHQ8Q2xpcHBlckNhbGVuZGFyU2VhcmNoUmVzdWx0Pj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2NhbGVuZGFyJyxcclxuICAgICAgcGFyYW1zXHJcbiAgICApXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocjogQXBpUmVzdWx0PENsaXBwZXJDYWxlbmRhclNlYXJjaFJlc3VsdD4pID0+IHtcclxuICAgICAgICAgIC8vIFN0b3JlIHRlYW1zXHJcbiAgICAgICAgICBpZiAoci5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3RlYW1zID0gci52YWx1ZS50ZWFtcztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgdGhlIGNhbGVuZGFyIHNuYXBzaG90XHJcbiAgICovXHJcbiAgY2FsZW5kYXJTbmFwc2hvdChwYXJhbXM6IENsaXBwZXJDYWxlbmRhclNlYXJjaFBhcmFtcykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxDbGlwcGVyU2VhcmNoQ2FsZW5kYXJTbmFwc2hvdFJlc3VsdD4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9jYWxlbmRhci9zbmFwc2hvdCcsXHJcbiAgICAgIHBhcmFtc1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERlbGV0ZSBvbmUgb3IgbW9yZSBpdGVtc1xyXG4gICAqIEBwYXJhbSBpZHM6IGlkcyB0byBkZWxldGVcclxuICAgKi9cclxuICBkZWxldGVDYWxlbmRhckRlYWRsaW5lcyhpZHM6IHN0cmluZ1tdKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8QXBpUmVzdWx0PG51bWJlcj4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9jYWxlbmRhci9kZWxldGUnLFxyXG4gICAgICB7IGlkczogaWRzIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb3B5IG9uZSBvciBtb3JlIGl0ZW1zXHJcbiAgICogQHBhcmFtIHBhcmFtcyBwYXJhbWV0ZXJzXHJcbiAgICovXHJcbiAgY29weUNhbGVuZGFyRGVhZGxpbmVzKHBhcmFtczogQ2xpcHBlckNhbGVuZGFyQ29weURlYWRsaW5lc1BhcmFtcykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxudW1iZXI+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvY2FsZW5kYXIvY29weScsXHJcbiAgICAgIHBhcmFtc1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENsb3NlIGEgZGVhZGxpbmVcclxuICAgKiBAcGFyYW0gaWQgOiB0aGUgaWQgdG8gY2xvc2VcclxuICAgKi9cclxuICBjbG9zZUNhbGVuZGFyRGVhZGxpbmUoaWQ6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxDbGlwcGVyRGVhZGxpbmVJbmZvPj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2NhbGVuZGFyL2Nsb3NlJyxcclxuICAgICAgeyBpZDogaWQgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNhdmUgYW4gaXRlbVxyXG4gICAqIEBwYXJhbSBwYXJhbXMgcGFyYW1ldGVyc1xyXG4gICAqL1xyXG4gIHNhdmVDYWxlbmRhckRlYWRsaW5lKHBhcmFtczogQ2xpcHBlckNhbGVuZGFyU2F2ZURlYWRsaW5lUGFyYW1zKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8QXBpUmVzdWx0PENsaXBwZXJEZWFkbGluZUluZm9bXT4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9jYWxlbmRhci9zYXZlJyxcclxuICAgICAgcGFyYW1zXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0cml2ZSBhIG4gaXRlbVxyXG4gICAqIEBwYXJhbSBpZCA6IHRoZSBpdGVtIGlkXHJcbiAgICovXHJcbiAgZ2V0Q2FsZW5kYXJEZWFkbGluZShpZDogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LmdldDxBcGlSZXN1bHQ8Q2xpcHBlckRlYWRsaW5lSW5mbz4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9jYWxlbmRhci8nICsgaWRcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFeHBvcnQgdG8gaUNhbGVuZGFyIGZvcm1hdFxyXG4gICAqIEBwYXJhbSBpZHMgOiBkZWFkbGluZXMgdG8gZXhwb3J0XHJcbiAgICovXHJcbiAgZXhwb3J0Q2FsZW5kYXJEZWFkbGluZXMoaWRzOiBzdHJpbmdbXSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9jYWxlbmRhci9leHBvcnQnLFxyXG4gICAgICB7IGlkczogaWRzIH0sXHJcbiAgICAgIHtcclxuICAgICAgICByZXNwb25zZVR5cGU6ICdibG9iJ1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLy8vXHJcbiAgLy8gQVJDSElWRVxyXG4gIC8vL1xyXG4gIC8qKlxyXG4gICogUmV0cmlldmUgYWxsIGZvbGRlcnNcclxuICAqIEBwYXJhbSBwYXJhbXMgOiBwYXJhbWV0ZXJzXHJcbiAgKi9cclxuICBnZXRBcmNoaXZlRm9sZGVycyhwYXJhbXM6IENsaXBwZXJBcmNoaXZlRm9sZGVyc1NlYXJjaFBhcmFtcykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxyXG4gICAgICAucG9zdDxBcGlSZXN1bHQ8Q2xpcHBlckFyY2hpdmVGb2xkZXJzU2VhcmNoUmVzdWx0Pj4oXHJcbiAgICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvYXJjaGl2ZS9mb2xkZXJzJyxcclxuICAgICAgICBwYXJhbXNcclxuICAgICAgKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHI6IEFwaVJlc3VsdDxDbGlwcGVyQXJjaGl2ZUZvbGRlcnNTZWFyY2hSZXN1bHQ+KSA9PiB7XHJcbiAgICAgICAgICAvLyBTdG9yZSB0ZWFtc1xyXG4gICAgICAgICAgaWYgKHIuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICB0aGlzLl90ZWFtcyA9IHIudmFsdWUudGVhbXM7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcjtcclxuXHJcbiAgICAgICAgICByZXR1cm4gcjtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2F2ZSBmb2xkZXJcclxuICAgKiBAcGFyYW0gcGFyYW1zIDogcGFyYW1ldGVyc1xyXG4gICAqL1xyXG4gIHNhdmVBcmNoaXZlRm9sZGVyKHBhcmFtczogRm9sZGVyKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8QXBpUmVzdWx0PEZvbGRlcj4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9hcmNoaXZlL2ZvbGRlcnMvc2F2ZScsXHJcbiAgICAgIHBhcmFtc1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEV4cG9ydCBmb2xkZXJzXHJcbiAgICogQHBhcmFtIGlkOiB0aGUgZm9sZGVyIGlkIG9yIG51bGwgdG8gZXhwb3J0IGFsbCBmb2xkZXJzXHJcbiAgICogQHBhcmFtIHRlYW1JZDogdGhlIG9wdGlvbmFsIHRlYW0gaWQuIERlZmF1bHQgbnVsbCAocGVyc29uYWwpXHJcbiAgICovXHJcbiAgZXhwb3J0QXJjaGl2ZUZvbGRlcnMoaWQ6IHN0cmluZyB8IG51bGwgPSBudWxsLCB0ZWFtSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsKSB7XHJcbiAgICBsZXQgdXJsID0gdGhpcy5fc2VydmljZVVyaSArICcvYXJjaGl2ZS9leHBvcnQvPyc7XHJcbiAgICBpZiAoaWQpIHtcclxuICAgICAgdXJsICs9ICdpZD0nICsgaWQ7XHJcbiAgICB9XHJcbiAgICBpZiAodGVhbUlkKSB7XHJcbiAgICAgIGlmIChpZCkge1xyXG4gICAgICAgIHVybCArPSAnJic7XHJcbiAgICAgIH1cclxuICAgICAgdXJsICs9ICd0ZWFtPScgKyB0ZWFtSWQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LmdldChcclxuICAgICAgdXJsLFxyXG4gICAgICB7XHJcbiAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHtcclxuICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vb2N0ZXQtc3RyYW0nXHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgcmVzcG9uc2VUeXBlOiAnYmxvYidcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEltcG9ydCBmb2xkZXJzXHJcbiAgICogQHBhcmFtIHBhcmFtcyA6IHBhcmFtZXRlcnNcclxuICAgKi9cclxuICBpbXBvcnRBcmNoaXZlRm9sZGVycyhwYXJhbXM6IENsaXBwZXJBcmNoaXZlRm9sZGVyc0ltcG9ydFBhcmFtcykge1xyXG4gICAgLy8gUHJlcGFyZSBmb3JtXHJcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xyXG4gICAgZm9ybURhdGEuYXBwZW5kKHBhcmFtcy5maWxlLm5hbWUsIHBhcmFtcy5maWxlKTtcclxuICAgIGZvcm1EYXRhLmFwcGVuZCgnc291cmNlRmlsZU5hbWUnLCBwYXJhbXMuZmlsZS5uYW1lKTtcclxuICAgIGZvcm1EYXRhLmFwcGVuZCgnb3ZlcndyaXRlJywgcGFyYW1zLm92ZXJ3cml0ZSA9PT0gdHJ1ZSA/IFwidHJ1ZVwiIDogXCJmYWxzZVwiKTtcclxuICAgIGlmIChwYXJhbXMuZGVzdEZvbGRlcklkKSB7XHJcbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnZGVzdEZvbGRlcklkJywgcGFyYW1zLmRlc3RGb2xkZXJJZCk7XHJcbiAgICB9XHJcbiAgICBpZiAocGFyYW1zLnRlYW1JZCkge1xyXG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ3RlYW1JZCcsIHBhcmFtcy50ZWFtSWQpO1xyXG4gICAgfVxyXG4gICAgLy8gQ3JlYXRlIHJlcXVlc3RcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucmVxdWVzdChcclxuICAgICAgbmV3IEh0dHBSZXF1ZXN0KFxyXG4gICAgICAgICdQT1NUJyxcclxuICAgICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9hcmNoaXZlL2ltcG9ydC8nLFxyXG4gICAgICAgIGZvcm1EYXRhLFxyXG4gICAgICAgIHsgcmVwb3J0UHJvZ3Jlc3M6IHRydWUgfVxyXG4gICAgICApXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGZpbGVzIGFuZCBmb2xkZXJzXHJcbiAgICogQHBhcmFtIHBhcmFtcyA6IHBhcmFtZXRlcnNcclxuICAgKi9cclxuICBxdWVyeUFyY2hpdmVJdGVtcyhwYXJhbXM6IENsaXBwZXJBcmNoaXZlRmlsZXNTZWFyY2hQYXJhbXMpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxBcGlSZXN1bHQ8Q2xpcHBlckFyY2hpdmVGaWxlc1NlYXJjaFJlc3VsdD4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9hcmNoaXZlL2ZpbGVzJyxcclxuICAgICAgcGFyYW1zXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGVsZXRlIGZpbGUgYW5kIGZvbGRlcnNcclxuICAgKiBAcGFyYW0gcGFyYW1zIHBhcmFtZXRlcnNcclxuICAgKi9cclxuICBkZWxldGVBcmNoaXZlSXRlbXMocGFyYW1zOiBDbGlwcGVyQXJjaGl2ZUZpbGVzRGVsZXRlUGFyYW1zKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8QXBpUmVzdWx0PG51bWJlcj4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9hcmNoaXZlL2ZpbGVzL2RlbGV0ZScsXHJcbiAgICAgIHBhcmFtc1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENvcHkgIGZpbGUgYW5kIGZvbGRlcnMgdG8gYW5vdGhlciBmb2xkZXIgb3IgdGhlIHNhbWVcclxuICAgKiBAcGFyYW0gcGFyYW1zIHBhcmFtZXRlcnNcclxuICAgKi9cclxuICBjb3B5QXJjaGl2ZUl0ZW1zKHBhcmFtczogQ2xpcHBlckFyY2hpdmVGaWxlc0NvcHlQYXJhbXMpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxBcGlSZXN1bHQ8bnVtYmVyPj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2FyY2hpdmUvZmlsZXMvY29weScsXHJcbiAgICAgIHBhcmFtc1xyXG4gICAgKTtcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBTYXZlIGEgZmlsZVxyXG4gICAqIEBwYXJhbSBwYXJhbXMgOiBwYXJhbWV0ZXJzXHJcbiAgICovXHJcbiAgc2F2ZUFyY2hpdmVGaWxlKHBhcmFtczogQ2xpcHBlckFyY2hpdmVGaWxlSW5mbykge1xyXG4gICAgLy8gUHJlcGFyZSBmb3JtXHJcbiAgICBsZXQgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcclxuICAgIGlmIChwYXJhbXMuZmlsZSkgZm9ybURhdGEuYXBwZW5kKHBhcmFtcy5maWxlLmZpbGUubmFtZSwgcGFyYW1zLmZpbGUuZmlsZSk7XHJcbiAgICBpZiAocGFyYW1zLmlkKSBmb3JtRGF0YS5hcHBlbmQoJ2lkJywgcGFyYW1zLmlkKTtcclxuICAgIGZvcm1EYXRhLmFwcGVuZCgnZm9sZGVySWQnLCBwYXJhbXMuZm9sZGVySWQpO1xyXG4gICAgaWYgKHBhcmFtcy50b3BpY0lkKSB7XHJcbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgndG9waWNJZCcsIHBhcmFtcy50b3BpY0lkKTtcclxuICAgICAgZm9ybURhdGEuYXBwZW5kKCd0b3BpY1BhdGgnLCBwYXJhbXMudG9waWNQYXRoKTtcclxuICAgIH1cclxuICAgIGlmIChwYXJhbXMudGl0bGUxKSBmb3JtRGF0YS5hcHBlbmQoJ3RpdGxlMScsIHBhcmFtcy50aXRsZTEpO1xyXG4gICAgaWYgKHBhcmFtcy50aXRsZTIpIGZvcm1EYXRhLmFwcGVuZCgndGl0bGUyJywgcGFyYW1zLnRpdGxlMik7XHJcbiAgICBpZiAocGFyYW1zLm9yaWdpbikgZm9ybURhdGEuYXBwZW5kKCdvcmlnaW4nLCBwYXJhbXMub3JpZ2luKTtcclxuICAgIGlmIChwYXJhbXMub3JpZ2luRGVzY3JpcHRpb24pIHtcclxuICAgICAgZm9ybURhdGEuYXBwZW5kKCdvcmlnaW5EZXNjcmlwdGlvbicsIHBhcmFtcy5vcmlnaW5EZXNjcmlwdGlvbik7XHJcbiAgICB9XHJcbiAgICBpZiAocGFyYW1zLmRvY3VtZW50SWQpIGZvcm1EYXRhLmFwcGVuZCgnZG9jdW1lbnRJZCcsIHBhcmFtcy5kb2N1bWVudElkKTtcclxuICAgIGlmIChwYXJhbXMuZG9jdW1lbnRJZHMpIGZvcm1EYXRhLmFwcGVuZCgnZG9jdW1lbnRJZHMnLCBwYXJhbXMuZG9jdW1lbnRJZHMpO1xyXG4gICAgaWYgKHBhcmFtcy5iaW5hcnlJZCkgZm9ybURhdGEuYXBwZW5kKCdiaW5hcnlJZCcsIHBhcmFtcy5iaW5hcnlJZD8udG9TdHJpbmcoKSk7XHJcbiAgICBpZiAocGFyYW1zLnRhZ3MpIGZvcm1EYXRhLmFwcGVuZCgndGFncycsIHBhcmFtcy50YWdzKTtcclxuICAgIGlmIChwYXJhbXMubm90ZXMpIGZvcm1EYXRhLmFwcGVuZCgnbm90ZXMnLCBwYXJhbXMubm90ZXMpO1xyXG4gICAgaWYgKHBhcmFtcy5maWxlTmFtZSkgZm9ybURhdGEuYXBwZW5kKCdmaWxlTmFtZScsIHBhcmFtcy5maWxlTmFtZSk7XHJcbiAgICBpZiAocGFyYW1zLmZpbGVUeXBlKSBmb3JtRGF0YS5hcHBlbmQoJ2ZpbGVUeXBlJywgKHBhcmFtcy5maWxlVHlwZSBhcyBudW1iZXIpLnRvU3RyaW5nKCkpO1xyXG4gICAgaWYgKHBhcmFtcy5zdG9yYWdlVHlwZSkgZm9ybURhdGEuYXBwZW5kKCdzdG9yYWdlVHlwZScsIChwYXJhbXMuc3RvcmFnZVR5cGUgYXMgbnVtYmVyKS50b1N0cmluZygpKTtcclxuICAgIGlmIChwYXJhbXMubW9kZWwpIGZvcm1EYXRhLmFwcGVuZCgnbW9kZWwnLCAocGFyYW1zLm1vZGVsIGFzIG51bWJlcikudG9TdHJpbmcoKSk7XHJcblxyXG4gICAgLy8gQ3JlYXRlIHJlcXVlc3RcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucmVxdWVzdChcclxuICAgICAgbmV3IEh0dHBSZXF1ZXN0KFxyXG4gICAgICAgICdQT1NUJyxcclxuICAgICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9hcmNoaXZlL2ZpbGVzL3NhdmUnLFxyXG4gICAgICAgIGZvcm1EYXRhLFxyXG4gICAgICAgIHsgcmVwb3J0UHJvZ3Jlc3M6IHRydWUgfVxyXG4gICAgICApXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGZpbGUgZGF0YVxyXG4gICAqIEBwYXJhbSBpZCA6IHRoZSBpdGVtIGlkXHJcbiAgICovXHJcbiAgZ2V0QXJjaGl2ZUZpbGUoaWQ6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5nZXQ8QXBpUmVzdWx0PENsaXBwZXJBcmNoaXZlRmlsZUluZm8+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvYXJjaGl2ZS9maWxlcy8nICsgaWQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRG93bmxvYWQgZmlsZVxyXG4gICAqIEBwYXJhbSBpZCA6IHRoZSBiaW5hcnkgaWQgdG8gZG93bmxvYWRcclxuICAgKiBAcGFyYW0gb3RwIDogdGhlIG9wdGlvbmFsIG9uZSB0aW1lIHBhc3N3b3JkXHJcbiAgICovXHJcbiAgZG93bmxvYWRBcmNoaXZlRmlsZShpZDogbnVtYmVyLCBvdHA6IHN0cmluZyA9IG51bGwpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9hcmNoaXZlL2ZpbGVzL2Rvd25sb2FkLz9pZD0nICsgaWQgKyAnJm90cD0nICsgb3RwLFxyXG4gICAgICB7IHJlc3BvbnNlVHlwZTogJ2Jsb2InIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuXHJcbn1cclxuIl19
948
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpcHBlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJzLXV0aWxzL2NsaXBwZXIuY29tbW9uL2NvbW1vbi9zZXJ2aWNlcy9jbGlwcGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDNUUsT0FBTyxFQUFFLFVBQVUsRUFBcUIsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEYsT0FBTyxFQUM0QixnQkFBZ0IsRUFHbEMsV0FBVyxFQUMzQixNQUFNLDZCQUE2QixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxhQUFhLEVBQXFGLE1BQU0sMkJBQTJCLENBQUM7QUFFN0ksT0FBTyxFQUFnQixFQUFFLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BELE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGdCQUFnQixFQUEwUSwwQkFBMEIsRUFBZ3pCLE1BQU0sZ0JBQWdCLENBQUM7QUFDenBDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxhQUFhLENBQUM7O0FBTTlDLE1BQU0sT0FBTyxjQUFjO0lBSDNCO1FBS1UsZUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUVoQyxxQkFBZ0IsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUM1QyxrQkFBYSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUV0QyxnQkFBVyxHQUFrQixJQUFJLENBQUM7UUFJbEMsV0FBTSxHQUF3QixtQkFBbUIsQ0FBQyxJQUFJLENBQUM7UUFJdkQsZUFBVSxHQUE0QixJQUFJLENBQUM7UUFZbkMsYUFBUSxHQUFH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QVUsQ0FBQyxHQUFHLENBQ3hCLElBQUksQ0FBQyxXQUFXLEdBQUcsOEJBQThCLEdBQUcsRUFBRSxHQUFHLE9BQU8sR0FBRyxHQUFHLEVBQ3RFLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxDQUN6QixDQUFDO0lBQ0osQ0FBQzs4R0Fyc0NVLGNBQWM7a0hBQWQsY0FBYyxjQUZiLE1BQU07OzJGQUVQLGNBQWM7a0JBSDFCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEhlYWRlcnMsIEh0dHBSZXF1ZXN0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBPbkRlc3Ryb3ksIFNpZ25hbCwgY29tcHV0ZWQsIGluamVjdCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgQXBpUmVzdWx0LCBCcm9hZGNhc3RNZXNzYWdlSW5mbywgQnJvYWRjYXN0U2VydmljZSxcclxuICBGb2xkZXIsXHJcbiAgRm9sZGVyVHJlZSxcclxuICBOYW1lVmFsdWVJdGVtLCBTeXN0ZW1VdGlsc1xyXG59IGZyb20gJ0BhcnNlZGl6aW9uaS9hcnMtdXRpbHMvY29yZSc7XHJcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UsIFJlY292ZXJQYXNzd29yZERpYWxvZ0RhdGEsIFJlY292ZXJQYXNzd29yZERpYWxvZ1Jlc3VsdCwgUmVzZXRQYXNzd29yZERpYWxvZ1Jlc3VsdCB9IGZyb20gJ0BhcnNlZGl6aW9uaS9hcnMtdXRpbHMvdWknO1xyXG5pbXBvcnQgeyBMb2dpbk9BdXRoVHlwZSB9IGZyb20gJ0BhcnNlZGl6aW9uaS9hcnMtdXRpbHMvdWkub2F1dGgnO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24sIG9mLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgQ2xpcHBlclNlcnZpY2VGbGFncywgQ2xpcHBlckRhc2hib2FyZCwgQ2xpcHBlckRhc2hib2FyZFJlc3VsdCwgQ2xpcHBlckRvY3VtZW50SW5mbywgQ2xpcHBlckRvY3VtZW50U3RydWN0dXJlLCBDbGlwcGVyRG9jdW1lbnRVcGRhdGVTdGF0ZVBhcmFtcywgQ2xpcHBlckV4cG9ydERvY3VtZW50c1BhcmFtcywgQ2xpcHBlckxvZ2luSW5mbywgQ2xpcHBlckxvZ2luUmVzdWx0LCBDbGlwcGVyTW9kdWxlLCBDbGlwcGVyT1RQSW5mbywgQ2xpcHBlclNlYXJjaEFyc0V2ZW50c1BhcmFtcywgQ2xpcHBlclNlYXJjaEFyc0V2ZW50c1Jlc3VsdCwgQ2xpcHBlclF1ZXJ5UmVmZXJlbmNlc01vZGUsIENsaXBwZXJSZWZlcmVuY2VzU2VhcmNoUGFyYW1zLCBDbGlwcGVyU2VhcmNoRmFjZXRzUmVzdWx0LCBDbGlwcGVyU2VhcmNoUGFyYW1zLCBDbGlwcGVyU2VhcmNoUmVzdWx0LCBDbGlwcGVyU2VuZERvY3VtZW50c0J5RW1haWxQYXJhbXMsIENsaXBwZXJUYXhvbm9teVBhcmFtcywgQ2xpcHBlclVzZXJMaW5rLCBDbGlwcGVyVXNlclNlYXJjaCwgQ2xpcHBlclVzZXJUcmlhbEluZm8sIENsaXBwZXJVc2VyV29ya2luZ0RvY3VtZW50LCBDbGlwcGVyVGVhbU1lbWJlckluZm8sIENsaXBwZXJUZWFtc1NlYXJjaFBhcmFtcywgQ2xpcHBlclRlYW1zU2VhcmNoUmVzdWx0LCBDbGlwcGVyVGVhbUluZm8sIENsaXBwZXJUZWFtTWVtYmVyc1NlYXJjaFJlc3VsdCwgQ2xpcHBlckNhbGVuZGFyU2VhcmNoUGFyYW1zLCBDbGlwcGVyQ2FsZW5kYXJTZWFyY2hSZXN1bHQsIENsaXBwZXJTZWFyY2hDYWxlbmRhclNuYXBzaG90UmVzdWx0LCBDbGlwcGVyQ2FsZW5kYXJDb3B5RGVhZGxpbmVzUGFyYW1zLCBDbGlwcGVyRGVhZGxpbmVJbmZvLCBDbGlwcGVyQ2FsZW5kYXJTYXZlRGVhZGxpbmVQYXJhbXMsIENsaXBwZXJBcmNoaXZlRm9sZGVyc1NlYXJjaFBhcmFtcywgQ2xpcHBlckFyY2hpdmVGb2xkZXJzU2VhcmNoUmVzdWx0LCBDbGlwcGVyQXJjaGl2ZUZpbGVJbmZvLCBDbGlwcGVyQXJjaGl2ZUZvbGRlcnNJbXBvcnRQYXJhbXMsIENsaXBwZXJBcmNoaXZlRmlsZXNTZWFyY2hSZXN1bHQsIENsaXBwZXJBcmNoaXZlRmlsZXNEZWxldGVQYXJhbXMsIENsaXBwZXJBcmNoaXZlRmlsZXNDb3B5UGFyYW1zLCBDbGlwcGVyQXJjaGl2ZUZpbGVzU2VhcmNoUGFyYW1zIH0gZnJvbSAnLi4vZGVmaW5pdGlvbnMnO1xyXG5pbXBvcnQgeyBDbGlwcGVyTWVzc2FnZXMgfSBmcm9tICcuLi9tZXNzYWdlcyc7XHJcblxyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIENsaXBwZXJTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcclxuXHJcbiAgcHJpdmF0ZSBodHRwQ2xpZW50ID0gaW5qZWN0KEh0dHBDbGllbnQpO1xyXG4gIHByaXZhdGUgYnJvYWRjYXN0U2VydmljZVN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbiB8IG51bGw7XHJcbiAgcHJpdmF0ZSBicm9hZGNhc3RTZXJ2aWNlID0gaW5qZWN0KEJyb2FkY2FzdFNlcnZpY2UpO1xyXG4gIHByaXZhdGUgZGlhbG9nU2VydmljZSA9IGluamVjdChEaWFsb2dTZXJ2aWNlKTtcclxuXHJcbiAgcHJpdmF0ZSBfc2VydmljZVVyaTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcbiAgZ2V0IHNlcnZpY2VVcmkoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9zZXJ2aWNlVXJpO1xyXG4gIH1cclxuICBwcml2YXRlIF9mbGFnczogQ2xpcHBlclNlcnZpY2VGbGFncyA9IENsaXBwZXJTZXJ2aWNlRmxhZ3MuTm9uZTtcclxuICBnZXQgZmxhZ3MoKTogQ2xpcHBlclNlcnZpY2VGbGFncyB7XHJcbiAgICByZXR1cm4gdGhpcy5fZmxhZ3M7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2xvZ2luSW5mbzogQ2xpcHBlckxvZ2luSW5mbyB8IG51bGwgPSBudWxsO1xyXG4gIGdldCBsb2dpbkluZm8oKTogQ2xpcHBlckxvZ2luSW5mbyB8IG51bGwge1xyXG4gICAgaWYgKCF0aGlzLl9sb2dpbkluZm8pIHtcclxuICAgICAgY29uc3QgbG9naW5JbmZvID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2NsaXBwZXJfbG9naW4nKTtcclxuICAgICAgaWYgKGxvZ2luSW5mbykge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICB0aGlzLl9sb2dpbkluZm8gPSBKU09OLnBhcnNlKGxvZ2luSW5mbykgYXMgQ2xpcHBlckxvZ2luSW5mbztcclxuICAgICAgICB9IGNhdGNoIHsgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5fbG9naW5JbmZvO1xyXG4gIH1cclxuICBwdWJsaWMgcmVhZG9ubHkgbG9nZ2VkSW4gPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIHB1YmxpYyByZWFkb25seSBsb2dnaW5nSW4gPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIHB1YmxpYyByZWFkb25seSBzbmFwc2hvdCA9IHNpZ25hbDxDbGlwcGVyU2VhcmNoUmVzdWx0PihudWxsKTtcclxuICBwdWJsaWMgcmVhZG9ubHkgc3VwcG9ydHNSUyA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XHJcbiAgcHVibGljIHJlYWRvbmx5IHJlZmVyZW5jZXNTbmFwc2hvdCA9IHNpZ25hbDxDbGlwcGVyU2VhcmNoUmVzdWx0PihudWxsKTtcclxuICBwdWJsaWMgcmVhZG9ubHkgZGFzaGJvYXJkOiBDbGlwcGVyRGFzaGJvYXJkID0gbmV3IENsaXBwZXJEYXNoYm9hcmQoKTtcclxuICBwdWJsaWMgcmVhZG9ubHkgYmFnID0gc2lnbmFsPENsaXBwZXJEb2N1bWVudEluZm9bXT4oW10pO1xyXG4gIHB1YmxpYyByZWFkb25seSBiYWdUb3RhbDogU2lnbmFsPG51bWJlcj4gPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgICByZXR1cm4gdGhpcy5iYWcoKS5sZW5ndGg7XHJcbiAgfSk7XHJcbiAgcHVibGljIHJlYWRvbmx5IHZpc2libGUgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIHByaXZhdGUgX3RlYW1zOiBOYW1lVmFsdWVJdGVtPHN0cmluZz5bXSA9IFtdO1xyXG4gIGdldCB0ZWFtcygpOiBOYW1lVmFsdWVJdGVtPHN0cmluZz5bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5fdGVhbXM7XHJcbiAgfVxyXG4gIHB1YmxpYyBjdXJyZW50VGVhbUlkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuICBwdWJsaWMgY3VycmVudFRlYW1OYW1lID0gc2lnbmFsPHN0cmluZz4oXCJQRVJTT05BTEVcIik7XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgaWYgKHRoaXMuYnJvYWRjYXN0U2VydmljZVN1YnNjcmlwdGlvbikge1xyXG4gICAgICB0aGlzLmJyb2FkY2FzdFNlcnZpY2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEluaXRpYWxpemUgc2VydmljZVxyXG4gICAqIEBwYXJhbSBzZXJ2aWNlVXJpIDogdGhlIHNlcnZpY2UgdXJpXHJcbiAgICogQHBhcmFtIGZsYWdzOiB0aGUgc2VydmljZSBmbGFncy4gRGVmYXVsdCBpcyBub25lLlxyXG4gICAqL1xyXG4gIGluaXRpYWxpemUoXHJcbiAgICBzZXJ2aWNlVXJpOiBzdHJpbmcsXHJcbiAgICBmbGFnczogQ2xpcHBlclNlcnZpY2VGbGFncyA9IENsaXBwZXJTZXJ2aWNlRmxhZ3MuTm9uZSkge1xyXG5cclxuICAgIC8vIENyZWF0ZSB1bmlxdWUgY2xpZW50IGlkXHJcbiAgICBpZiAoIWxvY2FsU3RvcmFnZS5nZXRJdGVtKCdjbGlwcGVyX2NsaWVudF9pZCcpKSB7XHJcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdjbGlwcGVyX2NsaWVudF9pZCcsIFN5c3RlbVV0aWxzLmdlbmVyYXRlVVVJRCgpKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBJbml0aWFsaXplXHJcbiAgICB0aGlzLl9zZXJ2aWNlVXJpID0gc2VydmljZVVyaTtcclxuICAgIHRoaXMuX2ZsYWdzID0gZmxhZ3M7XHJcblxyXG4gICAgLy8gUmVhY3QgdG8gbWVzc2FnZSBicm9hZGNhc3RpbmdcclxuICAgIGlmICghdGhpcy5icm9hZGNhc3RTZXJ2aWNlU3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgIHRoaXMuYnJvYWRjYXN0U2VydmljZVN1YnNjcmlwdGlvbiA9IHRoaXMuYnJvYWRjYXN0U2VydmljZS5nZXRNZXNzYWdlKCkuc3Vic2NyaWJlKChtZXNzYWdlOiBCcm9hZGNhc3RNZXNzYWdlSW5mbykgPT4ge1xyXG4gICAgICAgIGlmIChtZXNzYWdlLmlkID09PSBDbGlwcGVyTWVzc2FnZXMuTE9HSU5fQ0hBTkdFRCkge1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubG9naW4oXHJcbiAgICAgICAgICAgICAgbWVzc2FnZS5kYXRhLmVtYWlsLFxyXG4gICAgICAgICAgICAgIG1lc3NhZ2UuZGF0YS5wYXNzd29yZCxcclxuICAgICAgICAgICAgICB0cnVlLFxyXG4gICAgICAgICAgICAgIG1lc3NhZ2UuZGF0YS5vYXV0aCxcclxuICAgICAgICAgICAgICBtZXNzYWdlLmRhdGEub2F1dGhBY2Nlc3NUb2tlbikuc3Vic2NyaWJlKChyOiBBcGlSZXN1bHQ8Q2xpcHBlckxvZ2luUmVzdWx0PikgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFyLnN1Y2Nlc3MpXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5lcnJvcihyLm1lc3NhZ2UsIG51bGwsIFwiRXJyb3JlIGRpIENsaXBwZXJcIik7XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKCh0aGlzLmZsYWdzICYgQ2xpcHBlclNlcnZpY2VGbGFncy5EaXNwbGF5Q29ubmVjdGlvblN0YXRlTWVzc2FnZXMpID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS50b2FzdCgnQ29ubmVzc28gYSBDbGlwcGVyJywgMTUwMCwgJ3Bvd2VyJyk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgLy8gTG9hZCBiYWdcclxuICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkQmFnKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9LCA1MDApO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobWVzc2FnZS5pZCA9PT0gQ2xpcHBlck1lc3NhZ2VzLkxPR09VVCkge1xyXG4gICAgICAgICAgaWYgKHRoaXMubG9nZ2VkSW4oKSkge1xyXG4gICAgICAgICAgICB0aGlzLmxvZ291dCgpLnN1YnNjcmliZShyID0+IHtcclxuICAgICAgICAgICAgICBpZiAoIXIuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmVycm9yKFwiPHA+XCIgKyByLm1lc3NhZ2UgKyBcIjwvcD48YnI+PGJyPjxocj48cCBjbGFzcz0nc21hbGwnPjxpPlBlciBlbGltaW5hcmUgbGEgY29uZmlndXJhemlvbmUgZGkgQ2xpcHBlciBhY2NlZGVyZSBhOjxicj48Yj5tZW51ID4gcGVyc29uYWxpenphID4gY29sbGVnYW1lbnRpPC9iPjwvaT48L3A+XCIsIG51bGwsIFwiRXJyb3JlIGRpIENsaXBwZXJcIik7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmICgodGhpcy5mbGFncyAmIENsaXBwZXJTZXJ2aWNlRmxhZ3MuRGlzcGxheUNvbm5lY3Rpb25TdGF0ZU1lc3NhZ2VzKSA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnRvYXN0KCdEaXNjb25uZXNzbyBkYSBDbGlwcGVyJywgMTUwMCwgJ3Bvd2VyX29mZicpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gRW1wdHkgYmFnXHJcbiAgICAgICAgICAgICAgICB0aGlzLmJhZy5zZXQoW10pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmNsZWFyKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBFdmVsdWF0ZSBjdXJyZW50IHNlc3Npb24gc3RvcmFnZSBpbiBjYXNlIG9mIHBhZ2UgcmVmcmVzaCAoRjUpXHJcbiAgICBpZiAoIXRoaXMubG9nZ2VkSW4oKSAmJiB0aGlzLmdldFRva2VuKCkpIHtcclxuICAgICAgLy8gQXV0byBsb2dpblxyXG4gICAgICB0aGlzLmxvZ2dlZEluLnNldCh0cnVlKTtcclxuICAgICAgLy8gTm90aWZ5XHJcbiAgICAgIHRoaXMuYnJvYWRjYXN0U2VydmljZS5zZW5kTWVzc2FnZShDbGlwcGVyTWVzc2FnZXMuTE9HSU5fQ09NUExFVEVEKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gKiBTZXQgSldUIHRva2Vuc1xyXG4gKiBAcGFyYW0gdmFsdWUgOiB0aGUgbG9naW4gcmVzdWx0XHJcbiAqL1xyXG4gIHByaXZhdGUgc2V0VG9rZW4odmFsdWU6IENsaXBwZXJMb2dpblJlc3VsdCkge1xyXG4gICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnY2xpcHBlcl9qd3QnLCB2YWx1ZS50b2tlbik7XHJcbiAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCdjbGlwcGVyX2p3dF9yZWZyZXNoJywgdmFsdWUucmVmcmVzaFRva2VuID8/ICcnKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiBjdXJyZW50IEpXVCB0b2tlblxyXG4gICAqIEBwYXJhbSByZWZyZXNoOiB0cnVlIHRvIGdldCB0aGUgcmVmcmVzaCB0b2tlbi4gRGVmYXVsdCBpcyBmYWxzZS5cclxuICAgKi9cclxuICBnZXRUb2tlbihyZWZyZXNoOiBib29sZWFuID0gZmFsc2UpOiBzdHJpbmcge1xyXG4gICAgbGV0IHRva2VuID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShyZWZyZXNoID8gJ2NsaXBwZXJfand0X3JlZnJlc2gnIDogJ2NsaXBwZXJfand0Jyk7XHJcbiAgICBpZiAodG9rZW4gJiYgdG9rZW5bMF0gPT09ICdcIicpIHtcclxuICAgICAgcmV0dXJuIHRva2VuLnN1YnN0cmluZygxLCB0b2tlbi5sZW5ndGggLSAxKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0b2tlbiA/PyAnJztcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBTdG9yZSBsb2dpbiBpbmZvXHJcbiAgICovXHJcbiAgc3RvcmVMb2dpbigpIHtcclxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdjbGlwcGVyX2xvZ2luJywgSlNPTi5zdHJpbmdpZnkodGhpcy5fbG9naW5JbmZvKSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICogUGVyZm9ybSBhdXRvIGxvZ2luIHVzaW5nIGN1cnJlbnQgbGluayBkYXRhXHJcbiAgICogQHBhcmFtIGVtYWlsOiB0aGUgb3B0aW9uYWwgZW1haWwgaWYgdXNpbmcgT0F1dGgyXHJcbiAgICogQHBhcm1hIHBhc3N3b3JkOiB0aGUgb3B0aW9uYWwgcGFzc3dvcmQgaWYgdXNpbmcgT0F1dGgyXHJcbiAgICogQHBhcmFtIHJlbWVtYmVyOiByZW1lbWJlciBjcmVkZW50aWFscyBcclxuICAgKiBAcGFyYW0gb2F1dGg6IHRoZSBvcHRpb25hbCBvcGVuIGF1dGhlbnRpY2F0aW9uIHN1cHBvcnRlZFxyXG4gICAqIEBwYXJhbSBvYXV0aEFjY2Vzc1Rva2VuOiB0aGUgb3B0aW9uYWwgT0F1dGgyIGFjY2VzcyB0b2tlblxyXG4gKiBAcGFyYW0gb25TdWNjZXM6IGZ1bmN0aW9uIHRvIGV4ZWN1dGUgb24gc2VjY2Vzc1xyXG4gKi9cclxuICBhdXRvTG9naW4oXHJcbiAgICBlbWFpbDogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCA9IG51bGwsXHJcbiAgICBwYXNzd29yZDogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCA9IG51bGwsXHJcbiAgICByZW1lbWJlcjogYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQgPSBmYWxzZSxcclxuICAgIG9hdXRoOiBMb2dpbk9BdXRoVHlwZSB8IG51bGwgfCB1bmRlZmluZWQgPSBudWxsLFxyXG4gICAgb2F1dGhBY2Nlc3NUb2tlbjogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCA9IG51bGwsXHJcbiAgICBvblN1Y2NlczogRnVuY3Rpb24gfCBudWxsIHwgdW5kZWZpbmVkID0gbnVsbCk6IGJvb2xlYW4ge1xyXG4gICAgdGhpcy5sb2dpbihlbWFpbCwgcGFzc3dvcmQsIHJlbWVtYmVyLCBvYXV0aCwgb2F1dGhBY2Nlc3NUb2tlbilcclxuICAgICAgLnN1YnNjcmliZSgocjogQXBpUmVzdWx0PENsaXBwZXJMb2dpblJlc3VsdD4pID0+IHtcclxuICAgICAgICBpZiAoIXIuc3VjY2Vzcykge1xyXG4gICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmVycm9yKHIubWVzc2FnZSwgbnVsbCwgXCJFcnJvcmUgaW4gQ2xpcHBlclwiKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnRvYXN0KCdDb25uZXNzbyBhIENsaXBwZXInLCAxNTAwLCAncG93ZXInKTtcclxuICAgICAgICAgIGlmIChvblN1Y2Nlcykge1xyXG4gICAgICAgICAgICBvblN1Y2NlcygpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFBlcmZvcm0gYXV0byBsb2dvdXRcclxuICAgKiBAcGFyYW0gb25TdWNjZXM6IGZ1bmN0aW9uIHRvIGV4ZWN1dGUgb24gc2VjY2Vzc1xyXG4gICAqL1xyXG4gIGF1dG9Mb2dvdXQoXHJcbiAgICBvblN1Y2NlczogRnVuY3Rpb24gfCBudWxsIHwgdW5kZWZpbmVkID0gbnVsbCkge1xyXG4gICAgaWYgKCF0aGlzLmxvZ2dlZEluKCkpIHJldHVybjtcclxuICAgIHRoaXMubG9nb3V0KCkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogciA9PiB7XHJcbiAgICAgICAgaWYgKCFyLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5lcnJvcihyLm1lc3NhZ2UsIG51bGwsIFwiRXJyb3JlIGluIENsaXBwZXJcIik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS50b2FzdCgnRGlzY29ubmVzc28gZGEgQ2xpcHBlcicsIDE1MDAsICdwb3dlcl9vZmYnKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jbGVhcigpXHJcbiAgICAgICAgaWYgKG9uU3VjY2VzKSB7XHJcbiAgICAgICAgICBvblN1Y2NlcygpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQZXJmb3JtIGxvZ2luICAgXHJcbiAgICogQHBhcmFtIGVtYWlsOiB0aGUgb3B0aW9hbmwgZW1haWwgaWYgdXNpbmcgT0F1dGgyXHJcbiAgICogQHBhcm1hIHBhc3N3b3JkOiB0aGUgb3B0aW9uYWwgcGFzc3dvcmQgaWYgdXNpbmcgT0F1dGgyXHJcbiAgICogQHBhcmFtIHJlbWVtYmVyOiByZW1lbWJlciBjcmVkZW50aWFscyBcclxuICAgKiBAcGFyYW0gb2F1dGg6IHRoZSBvcHRpb25hbCBvcGVuIGF1dGhlbnRpY2F0aW9uIHN1cHBvcnRlZFxyXG4gICAqIEBwYXJhbSBvYXV0aEFjY2Vzc1Rva2VuOiB0aGUgb3B0aW9uYWwgT0F1dGgyIGFjY2VzcyB0b2tlblxyXG4gICAqIEByZXR1cm5zOiB0aGUgbG9naW4gcmVzdWx0XHJcbiAgICovXHJcbiAgbG9naW4oZW1haWw6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQgPSBudWxsLFxyXG4gICAgcGFzc3dvcmQ6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQgPSBudWxsLFxyXG4gICAgcmVtZW1iZXI6IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkID0gZmFsc2UsXHJcbiAgICBvYXV0aDogTG9naW5PQXV0aFR5cGUgfCBudWxsIHwgdW5kZWZpbmVkID0gbnVsbCxcclxuICAgIG9hdXRoQWNjZXNzVG9rZW46IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQgPSBudWxsKSB7XHJcbiAgICB0aGlzLmxvZ2dpbmdJbi5zZXQodHJ1ZSk7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XHJcbiAgICAgIC5wb3N0PEFwaVJlc3VsdDxDbGlwcGVyTG9naW5SZXN1bHQ+PihcclxuICAgICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9sb2dpbjInLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIHVzZXI6IG9hdXRoID8gbnVsbCA6IGVtYWlsLFxyXG4gICAgICAgICAgcGFzc3dvcmQ6IG9hdXRoID8gbnVsbCA6IHBhc3N3b3JkLFxyXG4gICAgICAgICAgY2xpZW50SWQ6IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiY2xpcHBlcl9jbGllbnRfaWRcIiksXHJcbiAgICAgICAgICBPQVVUSDogb2F1dGhcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGhlYWRlcnM6XHJcbiAgICAgICAgICAgICFvYXV0aFxyXG4gICAgICAgICAgICAgID8gbmV3IEh0dHBIZWFkZXJzKClcclxuICAgICAgICAgICAgICA6IG5ldyBIdHRwSGVhZGVycygpXHJcbiAgICAgICAgICAgICAgICAuc2V0KFwiQXV0aG9yaXphdGlvblwiLCBvYXV0aEFjY2Vzc1Rva2VuKVxyXG4gICAgICAgIH0pXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIGNhdGNoRXJyb3IoZXJyID0+IHtcclxuICAgICAgICAgIHRoaXMubG9nZ2luZ0luLnNldChmYWxzZSk7XHJcbiAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnY2xpcHBlcl9sb2dpbicpO1xyXG4gICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyKTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBtYXAoKHI6IEFwaVJlc3VsdDxDbGlwcGVyTG9naW5SZXN1bHQ+KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxvZ2dpbmdJbi5zZXQoZmFsc2UpO1xyXG4gICAgICAgICAgaWYgKHIuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICAvLyBTdG9yZSBhY2Nlc3MgdG9rZW5cclxuICAgICAgICAgICAgdGhpcy5zZXRUb2tlbihyLnZhbHVlKTtcclxuICAgICAgICAgICAgY29uc3QgbG9naW5JbmZvOiBDbGlwcGVyTG9naW5JbmZvID0ge1xyXG4gICAgICAgICAgICAgIGNvbnRleHQ6IHIudmFsdWUuY29udGV4dCxcclxuICAgICAgICAgICAgICB1c2VyU2V0dGluZ3M6IHIudmFsdWUuc2V0dGluZ3MsXHJcbiAgICAgICAgICAgICAgT0FVVEg6IG9hdXRoXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFvYXV0aCkge1xyXG4gICAgICAgICAgICAgIGxvZ2luSW5mby51c2VyQ3JlZGVudGlhbHMgPVxyXG4gICAgICAgICAgICAgICAgU3lzdGVtVXRpbHMuY2lwaGVyKFxyXG4gICAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeSh7XHJcbiAgICAgICAgICAgICAgICAgICAgZW1haWw6IGVtYWlsLFxyXG4gICAgICAgICAgICAgICAgICAgIHBhc3N3b3JkOiBwYXNzd29yZCxcclxuICAgICAgICAgICAgICAgICAgICByZW1lbWJlcjogcmVtZW1iZXIsXHJcbiAgICAgICAgICAgICAgICAgIH0pLCBsb2dpbkluZm8uY29udGV4dC51c2VySWQudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gVXBkYXRlIGluZm8gICAgICAgICAgICBcclxuICAgICAgICAgICAgdGhpcy5fbG9naW5JbmZvID0gbG9naW5JbmZvO1xyXG4gICAgICAgICAgICB0aGlzLnN0b3JlTG9naW4oKTtcclxuICAgICAgICAgICAgdGhpcy5sb2dnZWRJbi5zZXQodHJ1ZSk7XHJcbiAgICAgICAgICAgIC8vIE5vdGlmeVxyXG4gICAgICAgICAgICB0aGlzLmJyb2FkY2FzdFNlcnZpY2Uuc2VuZE1lc3NhZ2UoQ2xpcHBlck1lc3NhZ2VzLkxPR0lOX0NPTVBMRVRFRCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcjtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUGVyZm9ybSBsb2dvdXRcclxuICAgKi9cclxuICBsb2dvdXQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8YW55Pih0aGlzLl9zZXJ2aWNlVXJpICsgJy9sb2dvdXQnLCB7fSkucGlwZShcclxuICAgICAgbWFwKHIgPT4ge1xyXG4gICAgICAgIHRoaXMuY2xlYXIoKTtcclxuICAgICAgICByZXR1cm4gclxyXG4gICAgICB9KSxcclxuICAgICAgY2F0Y2hFcnJvcigoX2UpID0+IHtcclxuICAgICAgICB0aGlzLmNsZWFyKCk7XHJcbiAgICAgICAgcmV0dXJuIG9mKFtdKTtcclxuICAgICAgfSkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAqIFJlc2V0IGxvZ2luIHJlZnJlc2ggdGltZXIgYW5kIGxvZ2luIHN0YXRlXHJcbiAqL1xyXG4gIHJlc2V0KCkge1xyXG4gICAgLy8gQ2xlYXIgbG9naW4gaW5mb1xyXG4gICAgdGhpcy5fbG9naW5JbmZvID0gbnVsbDtcclxuICAgIC8vIExvZ2dlZCBvdXRcclxuICAgIHRoaXMubG9nZ2VkSW4uc2V0KGZhbHNlKTtcclxuICAgIC8vIE5vdGlmeVxyXG4gICAgdGhpcy5icm9hZGNhc3RTZXJ2aWNlLnNlbmRNZXNzYWdlKENsaXBwZXJNZXNzYWdlcy5MT0dPVVRfQ09NUExFVEVEKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENsZWFyIGxvZ2luIGRhdGFcclxuICAgKi9cclxuICBjbGVhcigpIHtcclxuICAgIC8vIENsZWFyIGxvY2FsIHN0b3JhZ2VcclxuICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oJ2NsaXBwZXJfand0Jyk7XHJcbiAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKCdjbGlwcGVyX2p3dF9yZWZyZXNoJyk7XHJcbiAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKCdjbGlwcGVyX29hdXRoJyk7XHJcbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnY2xpcHBlcl9sb2dpbicpO1xyXG5cclxuICAgIC8vIFJlc2V0IGxvZ2luXHJcbiAgICB0aGlzLnJlc2V0KCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAqIFBlcmZvcm0gdG9rZW4gcmVmcmVzaFxyXG4gKi9cclxuICByZWZyZXNoKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5nZXQ8QXBpUmVzdWx0PENsaXBwZXJMb2dpblJlc3VsdD4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9yZWZyZXNoMi8/dG9rZW49JyArIHRoaXMuZ2V0VG9rZW4odHJ1ZSlcclxuICAgICkucGlwZShtYXAoKHI6IEFwaVJlc3VsdDxDbGlwcGVyTG9naW5SZXN1bHQ+KSA9PiB7XHJcbiAgICAgIC8vIFVwZGF0ZSB0b2tlblxyXG4gICAgICB0aGlzLnNldFRva2VuKHIudmFsdWUpO1xyXG4gICAgfSkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgKiBHZXQgYSBuZXcgb25lIHRpbWUgcGFzc3dvcmRcclxuICAqIEBwYXJhbSBpZDogdGhlIG9wdGlvbmFsIHJlcG9zaXRvcnkgaWQgXHJcbiAgKi9cclxuICBuZXdPVFAoaWQ6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5nZXQ8QXBpUmVzdWx0PENsaXBwZXJPVFBJbmZvPj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL290cC9uZXcvP2lkPScgKyBpZCxcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBMb2FkIEFycyBldmVudHMgY2FsZW5kYXJcclxuICAgKi9cclxuICBldmVudHMocGFyYW1zOiBDbGlwcGVyU2VhcmNoQXJzRXZlbnRzUGFyYW1zKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8QXBpUmVzdWx0PENsaXBwZXJTZWFyY2hBcnNFdmVudHNSZXN1bHQ+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvYXJzL2V2ZW50cycsXHJcbiAgICAgIHBhcmFtc1xyXG4gICAgKTtcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBRdWVyeSBkb2N1bWVudHNcclxuICAgKi9cclxuICBxdWVyeShwYXJhbXM6IENsaXBwZXJTZWFyY2hQYXJhbXMpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxBcGlSZXN1bHQ8Q2xpcHBlclNlYXJjaFJlc3VsdD4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9kb2N1bWVudHMnLFxyXG4gICAgICBwYXJhbXNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgZmFjZXRzIGZvciBhIHF1ZXJ5XHJcbiAgICovXHJcbiAgcXVlcnlGYWNldHMocGFyYW1zOiBDbGlwcGVyU2VhcmNoUGFyYW1zKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8QXBpUmVzdWx0PENsaXBwZXJTZWFyY2hGYWNldHNSZXN1bHQ+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvZG9jdW1lbnRzL2ZhY2V0cycsXHJcbiAgICAgIHBhcmFtc1xyXG4gICAgKTtcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAqIFVwZGF0ZSBkb2N1bWVudCBzdGF0ZVxyXG4gICovXHJcbiAgdXBkYXRlU3RhdGUocGFyYW1zOiBDbGlwcGVyRG9jdW1lbnRVcGRhdGVTdGF0ZVBhcmFtcykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxudW1iZXI+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvZG9jdW1lbnRzL3N0YXRlL3VwZGF0ZScsXHJcbiAgICAgIHBhcmFtc1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEV4cG9ydCBhIGRvY3VtZW50IGluIHBkZiBmb3JtYXRcclxuICAgKi9cclxuICBleHBvcnRQZGYoaWQ6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5nZXQoXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2RvY3VtZW50cy9leHBvcnQvJyArIGlkLFxyXG4gICAgICB7IHJlc3BvbnNlVHlwZTogJ2Jsb2InIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIC8qKlxyXG4gKiBFeHBvcnQgZG9jdW1lbnQgbGlzdCAocXVlcnkgb3Igc2VsZWN0ZWQgaXRlbXMpIG9yIGV4cG9ydCBkZWFkbGluZXMgYXMgaWNzXHJcbiAqL1xyXG4gIGV4cG9ydChwYXJhbXM6IENsaXBwZXJFeHBvcnREb2N1bWVudHNQYXJhbXMpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdChcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvZG9jdW1lbnRzL2V4cG9ydCcsXHJcbiAgICAgIHBhcmFtcyxcclxuICAgICAgeyByZXNwb25zZVR5cGU6ICdibG9iJyB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2VuZCBkb2N1bWVudHMgbGluayBieSBlbWFpbFxyXG4gICAqL1xyXG4gIHNlbmRUbyhwYXJhbXM6IENsaXBwZXJTZW5kRG9jdW1lbnRzQnlFbWFpbFBhcmFtcykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxudW1iZXI+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvZG9jdW1lbnRzL3NlbmQnLFxyXG4gICAgICBwYXJhbXNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEaXNwbGF5IGEgcGFnZSB0aGUgZnVsbCBkb2N1bWVudCByZXBvcnRcclxuICAgKi9cclxuICByZXBvcnQoaWQ6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5nZXQoXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2RvY3VtZW50cy9yZXBvcnQvJyArIGlkLFxyXG4gICAgICB7IHJlc3BvbnNlVHlwZTogJ2Jsb2InIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgZG9jdW1lbnQgY29tbWVudFxyXG4gICAqL1xyXG4gIGNvbW1lbnQoaWQ6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5nZXQ8QXBpUmVzdWx0PHN0cmluZz4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9kb2N1bWVudHMvY29tbWVudC8nICsgaWRcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgZG9jdW1lbnQgaW5mb1xyXG4gICAqL1xyXG4gIGluZm8oaWQ6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5nZXQ8QXBpUmVzdWx0PENsaXBwZXJEb2N1bWVudEluZm8+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvZG9jdW1lbnRzL2luZm8vJyArIGlkXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGRvY3VtZW50IHN0cnVjdHVyZVxyXG4gICAqL1xyXG4gIGluZGV4KGlkOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0PEFwaVJlc3VsdDxDbGlwcGVyRG9jdW1lbnRTdHJ1Y3R1cmU+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvZG9jdW1lbnRzL3N0cnVjdHVyZS8nICsgaWRcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgZG9jdW1lbnQgbGFzdCB1cGRhdGVcclxuICAgKi9cclxuICBsYXN0VXBkYXRlKGlkOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0PEFwaVJlc3VsdDxzdHJpbmc+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvZG9jdW1lbnRzL2xhc3QtdXBkYXRlLycgKyBpZFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFF1ZXJ5IGRvY3VtZW50IHJlZmVyZW5jZXNcclxuICAgKi9cclxuICByZWZlcmVuY2VzKHBhcmFtczogQ2xpcHBlclJlZmVyZW5jZXNTZWFyY2hQYXJhbXMpIHtcclxuICAgIGxldCBtb2RlID0gcGFyYW1zLm1vZGU7XHJcbiAgICBpZiAoIW1vZGUpIG1vZGUgPSBDbGlwcGVyUXVlcnlSZWZlcmVuY2VzTW9kZS5SZWZlcmVuY2VzSW47XHJcbiAgICBzd2l0Y2ggKG1vZGUpIHtcclxuICAgICAgY2FzZSBDbGlwcGVyUXVlcnlSZWZlcmVuY2VzTW9kZS5SZWZlcmVuY2VzSW46XHJcbiAgICAgIGNhc2UgQ2xpcHBlclF1ZXJ5UmVmZXJlbmNlc01vZGUuUmVmZXJlbmNlc091dDpcclxuICAgICAgICBwYXJhbXMubW9kZSA9IG1vZGU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxDbGlwcGVyU2VhcmNoUmVzdWx0Pj4oXHJcbiAgICAgICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9kb2N1bWVudHMvcmVmZXJlbmNlcycsXHJcbiAgICAgICAgICBwYXJhbXNcclxuICAgICAgICApO1xyXG4gICAgICBjYXNlIENsaXBwZXJRdWVyeVJlZmVyZW5jZXNNb2RlLkNoYW5nZXNJbjpcclxuICAgICAgY2FzZSBDbGlwcGVyUXVlcnlSZWZlcmVuY2VzTW9kZS5DaGFuZ2VzT3V0OlxyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxBcGlSZXN1bHQ8Q2xpcHBlclNlYXJjaFJlc3VsdD4+KFxyXG4gICAgICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvZG9jdW1lbnRzL2NoYW5nZXMnLFxyXG4gICAgICAgICAgcGFyYW1zXHJcbiAgICAgICAgKTtcclxuICAgICAgY2FzZSBDbGlwcGVyUXVlcnlSZWZlcmVuY2VzTW9kZS5KdXJpczpcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8QXBpUmVzdWx0PENsaXBwZXJTZWFyY2hSZXN1bHQ+PihcclxuICAgICAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2RvY3VtZW50cy9qdXJpcycsXHJcbiAgICAgICAgICBwYXJhbXNcclxuICAgICAgICApO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGZhY2V0cyBmb3IgYSBkb2N1bWVudCByZWZlcmVuY2VzXHJcbiAgICovXHJcbiAgcmVmZXJlbmNlc0ZhY2V0cyhwYXJhbXM6IENsaXBwZXJSZWZlcmVuY2VzU2VhcmNoUGFyYW1zKSB7XHJcbiAgICBsZXQgbW9kZSA9IHBhcmFtcy5tb2RlID8/IENsaXBwZXJRdWVyeVJlZmVyZW5jZXNNb2RlLlJlZmVyZW5jZXNJbjtcclxuICAgIHN3aXRjaCAobW9kZSkge1xyXG4gICAgICBjYXNlIENsaXBwZXJRdWVyeVJlZmVyZW5jZXNNb2RlLlJlZmVyZW5jZXNJbjpcclxuICAgICAgY2FzZSBDbGlwcGVyUXVlcnlSZWZlcmVuY2VzTW9kZS5SZWZlcmVuY2VzT3V0OlxyXG4gICAgICAgIHBhcmFtcy5tb2RlID0gbW9kZTtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8QXBpUmVzdWx0PENsaXBwZXJTZWFyY2hGYWNldHNSZXN1bHQ+PihcclxuICAgICAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2RvY3VtZW50cy9yZWZlcmVuY2VzL2ZhY2V0cycsXHJcbiAgICAgICAgICBwYXJhbXNcclxuICAgICAgICApO1xyXG4gICAgICBjYXNlIENsaXBwZXJRdWVyeVJlZmVyZW5jZXNNb2RlLkNoYW5nZXNJbjpcclxuICAgICAgY2FzZSBDbGlwcGVyUXVlcnlSZWZlcmVuY2VzTW9kZS5DaGFuZ2VzT3V0OlxyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxBcGlSZXN1bHQ8Q2xpcHBlclNlYXJjaEZhY2V0c1Jlc3VsdD4+KFxyXG4gICAgICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvZG9jdW1lbnRzL2NoYW5nZXMvZmFjZXRzJyxcclxuICAgICAgICAgIHBhcmFtc1xyXG4gICAgICAgICk7XHJcbiAgICAgIGNhc2UgQ2xpcHBlclF1ZXJ5UmVmZXJlbmNlc01vZGUuSnVyaXM6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxDbGlwcGVyU2VhcmNoRmFjZXRzUmVzdWx0Pj4oXHJcbiAgICAgICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9kb2N1bWVudHMvanVyaXMvZmFjZXRzJyxcclxuICAgICAgICAgIHBhcmFtc1xyXG4gICAgICAgICk7XHJcbiAgICAgIGRlZmF1bHQ6IHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGRvY3VtZW50IGp1cmlzIGFydGljbGVzXHJcbiAgICovXHJcbiAganVyaXNBcnRpY2xlcyhwYXJhbXM6IENsaXBwZXJTZWFyY2hQYXJhbXMpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxBcGlSZXN1bHQ8Q2xpcHBlclNlYXJjaFJlc3VsdD4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9kb2N1bWVudHMvanVyaXMvYXJ0aWNsZXMnLFxyXG4gICAgICBwYXJhbXNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAqIEdldCBkZWFkbGluZXMgc25hcHNob3QgYmFzZWQgb24gdGhlIGRlYWRsaW5lc1xyXG4gICovXHJcbiAgZGVhZGxpbmVzU25hcHNob3QocGFyYW1zOiBDbGlwcGVyQ2FsZW5kYXJTZWFyY2hQYXJhbXMpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxBcGlSZXN1bHQ8Q2xpcHBlclNlYXJjaENhbGVuZGFyU25hcHNob3RSZXN1bHQ+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvZG9jdW1lbnRzL2NhbGVuZGFyL3NuYXBzaG90JyxcclxuICAgICAgcGFyYW1zXHJcbiAgICApO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHJpZXZlIHRoZSB0YXhvbm9teVxyXG4gICAqL1xyXG4gIGdldFRheG9ub215KHBhcmFtczogQ2xpcHBlclRheG9ub215UGFyYW1zIHwgbnVsbCA9IG51bGwpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxBcGlSZXN1bHQ8Rm9sZGVyVHJlZT4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy90YXhvbm9teScsXHJcbiAgICAgIHBhcmFtcyA/PyB7IG1vZGVsOiAwLCBjb3VudEl0ZW1zOiBmYWxzZSB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0cmlldmUgdG9waWNzXHJcbiAgICovXHJcbiAgZ2V0VG9waWNzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5nZXQ8QXBpUmVzdWx0PE5hbWVWYWx1ZUl0ZW08c3RyaW5nPltdPj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL3RvcGljcydcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICogUmV0cmlldmUgdG9waWNzIGFzIHRyZWVcclxuICovXHJcbiAgZ2V0VG9waWNzQXNUcmVlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5nZXQ8QXBpUmVzdWx0PEZvbGRlclRyZWU+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvdG9waWNzMidcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZSB0YWdzXHJcbiAgICovXHJcbiAgZ2V0VGFncygpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0PEFwaVJlc3VsdDxOYW1lVmFsdWVJdGVtPHN0cmluZz5bXT4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy90YWdzJ1xyXG4gICAgKTtcclxuICB9XHJcblxyXG5cclxuICAvLy9cclxuICAvLyBEQVNIQk9BUkRcclxuICAvLy9cclxuICAvKipcclxuICAqIFJldHJpZXZlIGN1cnJlbnQgZGFzaGJvYXJkXHJcbiAgKi9cclxuICBsb2FkRGFzaGJvYXJkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxyXG4gICAgICAucG9zdDxBcGlSZXN1bHQ8Q2xpcHBlckRhc2hib2FyZFJlc3VsdD4+KFxyXG4gICAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2FjY291bnQvZGFzaGJvYXJkJyxcclxuICAgICAgICB7IHJlZnJlc2hpbmc6IHRydWUgfVxyXG4gICAgICApLnN1YnNjcmliZSgocjogQXBpUmVzdWx0PENsaXBwZXJEYXNoYm9hcmRSZXN1bHQ+KSA9PiB7XHJcbiAgICAgICAgaWYgKHIuc3VjY2Vzcykge1xyXG4gICAgICAgICAgdGhpcy5kYXNoYm9hcmQuZG9jdW1lbnRVcGRhdGVzID0gci52YWx1ZS5kb2N1bWVudFVwZGF0ZXM7XHJcbiAgICAgICAgICB0aGlzLmRhc2hib2FyZC5leHBpcmVkRGVhZGxpbmVzID0gci52YWx1ZS5leHBpcmVkRGVhZGxpbmVzO1xyXG4gICAgICAgICAgdGhpcy5kYXNoYm9hcmQuZXhwaXJpbmdEZWFkbGluZXMgPSByLnZhbHVlLmV4cGlyaW5nRGVhZGxpbmVzO1xyXG4gICAgICAgICAgdGhpcy5kYXNoYm9hcmQuaXNUcmlhbCA9IHIudmFsdWUuaXNUcmlhbDtcclxuICAgICAgICAgIHRoaXMuZGFzaGJvYXJkLml0ZW1zLnNldChyLnZhbHVlLml0ZW1zKTtcclxuICAgICAgICAgIHRoaXMuYnJvYWRjYXN0U2VydmljZS5zZW5kTWVzc2FnZShDbGlwcGVyTWVzc2FnZXMuQ09NTUFORF9EQVNIQk9BUkRfVVBEQVRFRCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICogVXBkYXRlIHVucmVhZCBpdGVtc1xyXG4gICogQHBhcmFtIG1vZHVsZSA6IHRoZSBtb2R1bGVcclxuICAqIEBwYXJhbSBpbmNyZW1lbnQgOiB0aGUgaW5jcmVtZW50IChjYW4gYmUgbmVnYXRpdmUpXHJcbiAgKi9cclxuICB1cGRhdGVVbnJlYWRJdGVtcyhtb2R1bGU6IENsaXBwZXJNb2R1bGUsIGluY3JlbWVudDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLmRhc2hib2FyZC51cGRhdGVVbnJlYWRJdGVtcyhtb2R1bGUsIGluY3JlbWVudCk7XHJcbiAgICB0aGlzLmJyb2FkY2FzdFNlcnZpY2Uuc2VuZE1lc3NhZ2UoQ2xpcHBlck1lc3NhZ2VzLkNPTU1BTkRfREFTSEJPQVJEX1VQREFURUQpO1xyXG4gIH1cclxuXHJcbiAgLy8vXHJcbiAgLy8gTElOS1NcclxuICAvLy9cclxuXHJcbiAgLyoqXHJcbiAgKiBTYXZlIGEgdXNlciBsaW5rXHJcbiAgKiBAcGFyYW0gaXRlbTogdGhlIHVzZXIgbGlua1xyXG4gICovXHJcbiAgc2F2ZUxpbmsoaXRlbTogQ2xpcHBlclVzZXJMaW5rKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8QXBpUmVzdWx0PGJvb2xlYW4+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvYWNjb3VudC9saW5rcy9zYXZlJyxcclxuICAgICAgaXRlbVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERlbGV0ZSBhIHVzZXIgbGlua1xyXG4gICAqIEBwYXJhbSBpdGVtOiB0aGUgdXNlciBsaW5rXHJcbiAgICovXHJcbiAgZGVsZXRlTGluayhpdGVtOiBDbGlwcGVyVXNlckxpbmspIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxBcGlSZXN1bHQ8Ym9vbGVhbj4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9hY2NvdW50L2xpbmtzL2RlbGV0ZScsXHJcbiAgICAgIGl0ZW1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vXHJcbiAgLy8gQkFHIC0gV09SS0lORyBET0NVTUVOVFNcclxuICAvLy9cclxuXHJcbiAgLyoqXHJcbiAgICogTG9hZCB3b3JraW5nIGRvY3VtZW50c1xyXG4gICAqL1xyXG4gIGxvYWRCYWcoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XHJcbiAgICAgIC5nZXQ8QXBpUmVzdWx0PENsaXBwZXJVc2VyV29ya2luZ0RvY3VtZW50W10+PihcclxuICAgICAgICB0aGlzLnNlcnZpY2VVcmkgKyAnL2RvY3VtZW50cy93b3JraW5nJ1xyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgKHI6IEFwaVJlc3VsdDxDbGlwcGVyVXNlcldvcmtpbmdEb2N1bWVudFtdPikgPT4ge1xyXG4gICAgICAgICAgaWYgKCFyLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmVycm9yKHIubWVzc2FnZSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoci52YWx1ZSkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGl0ZW1zOiBDbGlwcGVyRG9jdW1lbnRJbmZvW10gPSBbXTtcclxuICAgICAgICAgICAgICByLnZhbHVlLmZvckVhY2gobiA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAobi5kb2N1bWVudERlc2NyaXB0b3IpIHtcclxuICAgICAgICAgICAgICAgICAgY29uc3QgZG9jdW1lbnRJbmZvID0gSlNPTi5wYXJzZShuLmRvY3VtZW50RGVzY3JpcHRvcik7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChkb2N1bWVudEluZm8pIHtcclxuICAgICAgICAgICAgICAgICAgICBuLmRvY3VtZW50SWQgPSBkb2N1bWVudEluZm8uRG9jdW1lbnRJZCB8fCBkb2N1bWVudEluZm8uSWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgbi50aXRsZTEgPSBkb2N1bWVudEluZm8uVGl0bGUxID8/IGRvY3VtZW50SW5mby5UaXRsZTI7XHJcbiAgICAgICAgICAgICAgICAgICAgbi50aXRsZTIgPSBkb2N1bWVudEluZm8uVGl0bGUxID8gZG9jdW1lbnRJbmZvLlRpdGxlMiA6IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgbi5kb2N1bWVudERlc2NyaXB0b3IgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKG4pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIHRoaXMuYmFnLnNldChpdGVtcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZCBvbmUgb3IgbW9yZSB3b3JraW5nIGRvY3VtZW50XHJcbiAgICogQHBhcmFtIGRvY3VtZW50SWRzIDogdGhlIGRvY3VtZW50IGlkcyB0byBhZGRcclxuICAgKi9cclxuICBhZGRUb0JhZyhkb2N1bWVudElkczogc3RyaW5nW10pIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcclxuICAgICAgLnBvc3Q8QXBpUmVzdWx0PENsaXBwZXJVc2VyV29ya2luZ0RvY3VtZW50W10+PihcclxuICAgICAgICB0aGlzLnNlcnZpY2VVcmkgKyAnL2RvY3VtZW50cy93b3JraW5nL2FkZCcsXHJcbiAgICAgICAgeyBkb2N1bWVudElkczogZG9jdW1lbnRJZHMgfVxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoKHI6IEFwaVJlc3VsdDxDbGlwcGVyVXNlcldvcmtpbmdEb2N1bWVudFtdPikgPT4ge1xyXG4gICAgICAgIGlmICghci5zdWNjZXNzKSB7XHJcbiAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuZXJyb3Ioci5tZXNzYWdlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKHIudmFsdWUpIHtcclxuICAgICAgICAgICAgY29uc3QgbmV3SXRlbXM6IENsaXBwZXJEb2N1bWVudEluZm9bXSA9IFtdO1xyXG4gICAgICAgICAgICByLnZhbHVlLmZvckVhY2gobiA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKG4uZG9jdW1lbnREZXNjcmlwdG9yKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkb2N1bWVudEluZm8gPSBKU09OLnBhcnNlKG4uZG9jdW1lbnREZXNjcmlwdG9yKTtcclxuICAgICAgICAgICAgICAgIGlmIChkb2N1bWVudEluZm8pIHtcclxuICAgICAgICAgICAgICAgICAgbi5kb2N1bWVudElkID0gZG9jdW1lbnRJbmZvLkRvY3VtZW50SWQgfHwgZG9jdW1lbnRJbmZvLklkO1xyXG4gICAgICAgICAgICAgICAgICBuLnRpdGxlMSA9IGRvY3VtZW50SW5mby5UaXRsZTEgPz8gZG9jdW1lbnRJbmZvLlRpdGxlMjtcclxuICAgICAgICAgICAgICAgICAgbi50aXRsZTIgPSBkb2N1bWVudEluZm8uVGl0bGUxID8gZG9jdW1lbnRJbmZvLlRpdGxlMiA6IG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBuLmRvY3VtZW50RGVzY3JpcHRvciA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICBuZXdJdGVtcy5wdXNoKG4pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGlmIChuZXdJdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5iYWcudXBkYXRlKCh2YWx1ZXM6IGFueSkgPT4gWy4uLnZhbHVlcywgLi4ubmV3SXRlbXNdKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UudG9hc3QoJ09wZXJhemlvbmUgY29tcGxldGF0YSBjb24gc3VjY2Vzc28uJyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlbW92ZSBvbmUgd29ya2luZyBkb2N1bWVudFxyXG4gICAqIEBwYXJhbSBkb2N1bWVudElkIDogdGhlIGRvY3VtZW50IGlkXHJcbiAgICovXHJcbiAgcmVtb3ZlRnJvbUJhZyhkb2N1bWVudElkOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcclxuICAgICAgLnBvc3Q8QXBpUmVzdWx0PG51bWJlcj4+KFxyXG4gICAgICAgIHRoaXMuc2VydmljZVVyaSArICcvZG9jdW1lbnRzL3dvcmtpbmcvZGVsZXRlJyxcclxuICAgICAgICB7IGRvY3VtZW50SWRzOiBbZG9jdW1lbnRJZF0gfVxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoKHI6IEFwaVJlc3VsdDxudW1iZXI+KSA9PiB7XHJcbiAgICAgICAgaWYgKCFyLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5lcnJvcihyLm1lc3NhZ2UpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb25zdCBwID0gdGhpcy5iYWcoKS5maW5kSW5kZXgoKG46IGFueSkgPT4gbi5kb2N1bWVudElkID09PSBkb2N1bWVudElkKTtcclxuICAgICAgICAgIGlmIChwICE9PSAtMSkge1xyXG4gICAgICAgICAgICB0aGlzLmJhZy51cGRhdGUoKHZhbHVlczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgdmFsdWVzLnNwbGljZShwLCAxKTtcclxuICAgICAgICAgICAgICByZXR1cm4gWy4uLnZhbHVlc107XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UudG9hc3QoJ09wZXJhemlvbmUgY29tcGxldGF0YSBjb24gc3VjY2Vzc28uJyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENsZWFyIGFsbCB3b3JraW5nIGRvY3VtZW50c1xyXG4gICAqL1xyXG4gIGNsZWFyQmFnKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxyXG4gICAgICAucG9zdDxBcGlSZXN1bHQ8bnVtYmVyPj4oXHJcbiAgICAgICAgdGhpcy5zZXJ2aWNlVXJpICsgJy9kb2N1bWVudHMvd29ya2luZy9kZWxldGUnLFxyXG4gICAgICAgIHsgZGVsZXRlQWxsOiB0cnVlIH1cclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKChyOiBBcGlSZXN1bHQ8bnVtYmVyPikgPT4ge1xyXG4gICAgICAgIGlmICghci5zdWNjZXNzKSB7XHJcbiAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuZXJyb3Ioci5tZXNzYWdlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5iYWcuc2V0KFtdKTtcclxuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS50b2FzdCgnT3BlcmF6aW9uZSBjb21wbGV0YXRhIGNvbiBzdWNjZXNzby4nKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8vXHJcbiAgLy8gV09SS0lORyBTRUFSQ0hFU1xyXG4gIC8vL1xyXG5cclxuICAvKipcclxuICAgKiBMb2FkIHdvcmtpbmcgc2VhcmNoZXNcclxuICAgKiBAcGFyYW06IG1vZHVsZTogdGhlIG1vZHVsZSB0byBsb2FkIHNlYXJjaGVzIGZvclxyXG4gICAqL1xyXG4gIGxvYWRTZWFyY2hlcyhtb2R1bGU6IENsaXBwZXJNb2R1bGUpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcclxuICAgICAgLmdldDxBcGlSZXN1bHQ8Q2xpcHBlclVzZXJTZWFyY2hbXT4+KFxyXG4gICAgICAgIHRoaXMuc2VydmljZVVyaSArICcvZG9jdW1lbnRzL3NlYXJjaGVzLz9tb2R1bGU9JyArIG1vZHVsZVxyXG4gICAgICApXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTYXZlIGEgd29ya2luZyBzZWFyY2hcclxuICAgKiBAcGFyYW0gcGFyYW1zIDogdGhlIGNsaXBwZXIgdXNlciBzZWFyY2hcclxuICAgKi9cclxuICBzYXZlU2VhcmNoKHBhcmFtczogQ2xpcHBlclVzZXJTZWFyY2gpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcclxuICAgICAgLnBvc3Q8QXBpUmVzdWx0PENsaXBwZXJVc2VyU2VhcmNoPj4oXHJcbiAgICAgICAgdGhpcy5zZXJ2aWNlVXJpICsgJy9kb2N1bWVudHMvc2VhcmNoZXMvc2F2ZScsXHJcbiAgICAgICAgcGFyYW1zXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZW1vdmUgb25lIHdvcmtpbmcgc2VhcmNoXHJcbiAgICogQHBhcmFtIGlkIDogdGhlIGlkIHRvIHJlbW92ZVxyXG4gICAqL1xyXG4gIGRlbGV0ZVNlYXJjaChpZDogbnVtYmVyKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XHJcbiAgICAgIC5wb3N0PEFwaVJlc3VsdDxudW1iZXI+PihcclxuICAgICAgICB0aGlzLnNlcnZpY2VVcmkgKyAnL2RvY3VtZW50cy9zZWFyY2hlcy9kZWxldGUnLFxyXG4gICAgICAgIHsgaWQ6IGlkIH1cclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIC8vL1xyXG4gIC8vIFVTRVIgU0VUVElOR1MgQU5EIFRSSUFMXHJcbiAgLy8vXHJcblxyXG4gIC8qKlxyXG4qIFJlc2V0IGEgdXNlciBwYXNzd29yZFxyXG4qIEBwYXJhbSBwYXJhbXMgcGFyYW1ldGVyc1xyXG4qL1xyXG4gIHJlc2V0UGFzc3dvcmQocGFyYW1zOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxBcGlSZXN1bHQ8UmVzZXRQYXNzd29yZERpYWxvZ1Jlc3VsdD4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9hY2NvdW50L3Bhc3N3b3JkL3Jlc2V0JyxcclxuICAgICAgcGFyYW1zXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVjb3ZlciBwYXNzd29yZFxyXG4gICAqIEBwYXJhbSBwYXJhbXMgcGFyYW1ldGVyc1xyXG4gICAqL1xyXG4gIHJlY292ZXJQYXNzd29yZChwYXJhbXM6IFJlY292ZXJQYXNzd29yZERpYWxvZ0RhdGEpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxBcGlSZXN1bHQ8UmVjb3ZlclBhc3N3b3JkRGlhbG9nUmVzdWx0Pj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2FjY291bnQvcGFzc3dvcmQvcmVjb3ZlcicsXHJcbiAgICAgIHBhcmFtc1xyXG4gICAgKTtcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGUgc2V0dGluZ3MgXHJcbiAgICAgKiBAcGFyYW0gcGFyYW1zIHBhcmFtZXRlcnNcclxuICAgKi9cclxuICB1cGRhdGVTZXR0aW5ncyhwYXJhbXM6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxib29sZWFuPj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2FjY291bnQvc2V0dGluZ3MvdXBkYXRlJyxcclxuICAgICAgcGFyYW1zXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlIGNoYW5uZWwgc3RhdGVcclxuICAgKiBAcGFyYW0gaWQ6IHRoZSBjaGFubmVsIGlkICgxLCAyLCAzLCA0KVxyXG4gICAqL1xyXG4gIHVwZGF0ZUNoYW5uZWxTdGF0ZShpZDogbnVtYmVyLCBlbmFibGVkOiBib29sZWFuKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8QXBpUmVzdWx0PENsaXBwZXJEYXNoYm9hcmRSZXN1bHQ+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvYWNjb3VudC9zZXR0aW5ncy9jaGFubmVscy91cGRhdGUnLFxyXG4gICAgICB7XHJcbiAgICAgICAgY2hhbm5lbElkOiBpZCxcclxuICAgICAgICBpc0VuYWJsZWQ6IGVuYWJsZWQsXHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgdHJpYWwgaW5mb1xyXG4gICAqL1xyXG4gIHByaXZhdGUgZ2V0VHJpYWxJbmZvKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5nZXQ8QXBpUmVzdWx0PENsaXBwZXJVc2VyVHJpYWxJbmZvPj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2FjY291bnQvdHJpYWwnXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlIHRyaWFsIGluZm9cclxuICAgKi9cclxuICB1cGRhdGVUcmlhbEluZm8oKSB7XHJcbiAgICBpZiAoIXRoaXMuX2xvZ2luSW5mbyB8fCB0aGlzLl9sb2dpbkluZm8/LmNvbnRleHQuaGFzVHJpYWwgPT09IGZhbHNlKVxyXG4gICAgICByZXR1cm47IC8vIE5vdCBzdXBwb3J0ZWRcclxuICAgIHRoaXMuZ2V0VHJpYWxJbmZvKCkuc3Vic2NyaWJlKChyOiBBcGlSZXN1bHQ8Q2xpcHBlclVzZXJUcmlhbEluZm8+KSA9PiB7XHJcbiAgICAgIGlmIChyLnN1Y2Nlc3MpIHtcclxuICAgICAgICBpZiAoci52YWx1ZSkge1xyXG4gICAgICAgICAgdGhpcy5fbG9naW5JbmZvLmNvbnRleHQuaGFzVHJpYWwgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5fbG9naW5JbmZvLmNvbnRleHQudHJpYWxJbmZvID0gci52YWx1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5fbG9naW5JbmZvLmNvbnRleHQuaGFzVHJpYWwgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuX2xvZ2luSW5mby5jb250ZXh0LnRyaWFsSW5mbyA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vL1xyXG4gIC8vIFRFQU1TXHJcbiAgLy8vXHJcblxyXG4gIC8qKlxyXG4gICogUmVuYW1lIGEgdGVhbVxyXG4gICogQHBhcmFtIG5ld05hbWUgOiB0aGUgbmV3IG5hbWVcclxuICAqL1xyXG4gIHJlbmFtZVRlYW0obmV3TmFtZTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8QXBpUmVzdWx0PENsaXBwZXJUZWFtSW5mbz4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9hY2NvdW50L3RlYW1zL3VwZGF0ZScsXHJcbiAgICAgIHsgdGl0bGU6IG5ld05hbWUgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHJpZXZlIHRlYW1zXHJcbiAgICovXHJcbiAgZ2V0VGVhbXMocGFyYW1zOiBDbGlwcGVyVGVhbXNTZWFyY2hQYXJhbXMpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxBcGlSZXN1bHQ8Q2xpcHBlclRlYW1zU2VhcmNoUmVzdWx0Pj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2FjY291bnQvdGVhbXMnLFxyXG4gICAgICBwYXJhbXNcclxuICAgIClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyOiBBcGlSZXN1bHQ8Q2xpcHBlclRlYW1zU2VhcmNoUmVzdWx0PikgPT4ge1xyXG4gICAgICAgICAgLy8gU3RvcmUgdGVhbXNcclxuICAgICAgICAgIHRoaXMuX3RlYW1zID0gci52YWx1ZS5pdGVtcztcclxuICAgICAgICAgIHJldHVybiByO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZSB0ZWFtIG1lbWJlcnNcclxuICAgKi9cclxuICBnZXRUZWFtTWVtYmVycyhwYXJhbXM6IENsaXBwZXJUZWFtc1NlYXJjaFBhcmFtcykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxDbGlwcGVyVGVhbU1lbWJlcnNTZWFyY2hSZXN1bHQ+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvYWNjb3VudC90ZWFtcy9tZW1iZXJzJyxcclxuICAgICAgcGFyYW1zXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGVsZXRlIG1lbWJlcnNcclxuICAgKiBAcGFyYW0gaWRzOiB0aGUgaWQgbGlzdCB0byBkZWxldGVcclxuICAgKi9cclxuICBkZWxldGVUZWFtTWVtYmVycyhpZHM6IG51bWJlcltdKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8QXBpUmVzdWx0PG51bWJlcj4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9hY2NvdW50L3RlYW1zL21lbWJlcnMvZGVsZXRlJyxcclxuICAgICAgeyBpZHM6IGlkcyB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2F2ZSBtZW1iZXJcclxuICAgKiBAcGFyYW0gaXRlbTogdGhlIGl0ZW0gdG8gc2F2ZVxyXG4gICAqL1xyXG4gIHNhdmVUZWFtTWVtYmVyKGl0ZW06IENsaXBwZXJUZWFtTWVtYmVySW5mbykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxDbGlwcGVyVGVhbU1lbWJlckluZm8+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvYWNjb3VudC90ZWFtcy9tZW1iZXJzL3NhdmUnLFxyXG4gICAgICBpdGVtXHJcbiAgICApO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vL1xyXG4gIC8vIENBTEVOREFSXHJcbiAgLy8vXHJcbiAgLyoqXHJcbiAgICogUXVlcnkgY2FsZW5kYXJcclxuICAgKi9cclxuICBxdWVyeUNhbGVuZGFyKHBhcmFtczogQ2xpcHBlckNhbGVuZGFyU2VhcmNoUGFyYW1zKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8QXBpUmVzdWx0PENsaXBwZXJDYWxlbmRhclNlYXJjaFJlc3VsdD4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9jYWxlbmRhcicsXHJcbiAgICAgIHBhcmFtc1xyXG4gICAgKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHI6IEFwaVJlc3VsdDxDbGlwcGVyQ2FsZW5kYXJTZWFyY2hSZXN1bHQ+KSA9PiB7XHJcbiAgICAgICAgICAvLyBTdG9yZSB0ZWFtc1xyXG4gICAgICAgICAgaWYgKHIuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICB0aGlzLl90ZWFtcyA9IHIudmFsdWUudGVhbXM7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcjtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IHRoZSBjYWxlbmRhciBzbmFwc2hvdFxyXG4gICAqL1xyXG4gIGNhbGVuZGFyU25hcHNob3QocGFyYW1zOiBDbGlwcGVyQ2FsZW5kYXJTZWFyY2hQYXJhbXMpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxBcGlSZXN1bHQ8Q2xpcHBlclNlYXJjaENhbGVuZGFyU25hcHNob3RSZXN1bHQ+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvY2FsZW5kYXIvc25hcHNob3QnLFxyXG4gICAgICBwYXJhbXNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEZWxldGUgb25lIG9yIG1vcmUgaXRlbXNcclxuICAgKiBAcGFyYW0gaWRzOiBpZHMgdG8gZGVsZXRlXHJcbiAgICovXHJcbiAgZGVsZXRlQ2FsZW5kYXJEZWFkbGluZXMoaWRzOiBzdHJpbmdbXSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxudW1iZXI+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvY2FsZW5kYXIvZGVsZXRlJyxcclxuICAgICAgeyBpZHM6IGlkcyB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ29weSBvbmUgb3IgbW9yZSBpdGVtc1xyXG4gICAqIEBwYXJhbSBwYXJhbXMgcGFyYW1ldGVyc1xyXG4gICAqL1xyXG4gIGNvcHlDYWxlbmRhckRlYWRsaW5lcyhwYXJhbXM6IENsaXBwZXJDYWxlbmRhckNvcHlEZWFkbGluZXNQYXJhbXMpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxBcGlSZXN1bHQ8bnVtYmVyPj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2NhbGVuZGFyL2NvcHknLFxyXG4gICAgICBwYXJhbXNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDbG9zZSBhIGRlYWRsaW5lXHJcbiAgICogQHBhcmFtIGlkIDogdGhlIGlkIHRvIGNsb3NlXHJcbiAgICovXHJcbiAgY2xvc2VDYWxlbmRhckRlYWRsaW5lKGlkOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxBcGlSZXN1bHQ8Q2xpcHBlckRlYWRsaW5lSW5mbz4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9jYWxlbmRhci9jbG9zZScsXHJcbiAgICAgIHsgaWQ6IGlkIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTYXZlIGFuIGl0ZW1cclxuICAgKiBAcGFyYW0gcGFyYW1zIHBhcmFtZXRlcnNcclxuICAgKi9cclxuICBzYXZlQ2FsZW5kYXJEZWFkbGluZShwYXJhbXM6IENsaXBwZXJDYWxlbmRhclNhdmVEZWFkbGluZVBhcmFtcykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxDbGlwcGVyRGVhZGxpbmVJbmZvW10+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvY2FsZW5kYXIvc2F2ZScsXHJcbiAgICAgIHBhcmFtc1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHJpdmUgYSBuIGl0ZW1cclxuICAgKiBAcGFyYW0gaWQgOiB0aGUgaXRlbSBpZFxyXG4gICAqL1xyXG4gIGdldENhbGVuZGFyRGVhZGxpbmUoaWQ6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5nZXQ8QXBpUmVzdWx0PENsaXBwZXJEZWFkbGluZUluZm8+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvY2FsZW5kYXIvJyArIGlkXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRXhwb3J0IHRvIGlDYWxlbmRhciBmb3JtYXRcclxuICAgKiBAcGFyYW0gaWRzIDogZGVhZGxpbmVzIHRvIGV4cG9ydFxyXG4gICAqL1xyXG4gIGV4cG9ydENhbGVuZGFyRGVhZGxpbmVzKGlkczogc3RyaW5nW10pIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdChcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvY2FsZW5kYXIvZXhwb3J0JyxcclxuICAgICAgeyBpZHM6IGlkcyB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgcmVzcG9uc2VUeXBlOiAnYmxvYidcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8vL1xyXG4gIC8vIEFSQ0hJVkVcclxuICAvLy9cclxuICAvKipcclxuICAqIFJldHJpZXZlIGFsbCBmb2xkZXJzXHJcbiAgKiBAcGFyYW0gcGFyYW1zIDogcGFyYW1ldGVyc1xyXG4gICovXHJcbiAgZ2V0QXJjaGl2ZUZvbGRlcnMocGFyYW1zOiBDbGlwcGVyQXJjaGl2ZUZvbGRlcnNTZWFyY2hQYXJhbXMpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcclxuICAgICAgLnBvc3Q8QXBpUmVzdWx0PENsaXBwZXJBcmNoaXZlRm9sZGVyc1NlYXJjaFJlc3VsdD4+KFxyXG4gICAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2FyY2hpdmUvZm9sZGVycycsXHJcbiAgICAgICAgcGFyYW1zXHJcbiAgICAgIClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyOiBBcGlSZXN1bHQ8Q2xpcHBlckFyY2hpdmVGb2xkZXJzU2VhcmNoUmVzdWx0PikgPT4ge1xyXG4gICAgICAgICAgLy8gU3RvcmUgdGVhbXNcclxuICAgICAgICAgIGlmIChyLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgdGhpcy5fdGVhbXMgPSByLnZhbHVlLnRlYW1zO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHI7XHJcblxyXG4gICAgICAgICAgcmV0dXJuIHI7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNhdmUgZm9sZGVyXHJcbiAgICogQHBhcmFtIHBhcmFtcyA6IHBhcmFtZXRlcnNcclxuICAgKi9cclxuICBzYXZlQXJjaGl2ZUZvbGRlcihwYXJhbXM6IEZvbGRlcikge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxGb2xkZXI+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvYXJjaGl2ZS9mb2xkZXJzL3NhdmUnLFxyXG4gICAgICBwYXJhbXNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFeHBvcnQgZm9sZGVyc1xyXG4gICAqIEBwYXJhbSBpZDogdGhlIGZvbGRlciBpZCBvciBudWxsIHRvIGV4cG9ydCBhbGwgZm9sZGVyc1xyXG4gICAqIEBwYXJhbSB0ZWFtSWQ6IHRoZSBvcHRpb25hbCB0ZWFtIGlkLiBEZWZhdWx0IG51bGwgKHBlcnNvbmFsKVxyXG4gICAqL1xyXG4gIGV4cG9ydEFyY2hpdmVGb2xkZXJzKGlkOiBzdHJpbmcgfCBudWxsID0gbnVsbCwgdGVhbUlkOiBzdHJpbmcgfCBudWxsID0gbnVsbCkge1xyXG4gICAgbGV0IHVybCA9IHRoaXMuX3NlcnZpY2VVcmkgKyAnL2FyY2hpdmUvZXhwb3J0Lz8nO1xyXG4gICAgaWYgKGlkKSB7XHJcbiAgICAgIHVybCArPSAnaWQ9JyArIGlkO1xyXG4gICAgfVxyXG4gICAgaWYgKHRlYW1JZCkge1xyXG4gICAgICBpZiAoaWQpIHtcclxuICAgICAgICB1cmwgKz0gJyYnO1xyXG4gICAgICB9XHJcbiAgICAgIHVybCArPSAndGVhbT0nICsgdGVhbUlkO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5nZXQoXHJcbiAgICAgIHVybCxcclxuICAgICAge1xyXG4gICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XHJcbiAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmFtJ1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIHJlc3BvbnNlVHlwZTogJ2Jsb2InXHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbXBvcnQgZm9sZGVyc1xyXG4gICAqIEBwYXJhbSBwYXJhbXMgOiBwYXJhbWV0ZXJzXHJcbiAgICovXHJcbiAgaW1wb3J0QXJjaGl2ZUZvbGRlcnMocGFyYW1zOiBDbGlwcGVyQXJjaGl2ZUZvbGRlcnNJbXBvcnRQYXJhbXMpIHtcclxuICAgIC8vIFByZXBhcmUgZm9ybVxyXG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcclxuICAgIGZvcm1EYXRhLmFwcGVuZChwYXJhbXMuZmlsZS5uYW1lLCBwYXJhbXMuZmlsZSk7XHJcbiAgICBmb3JtRGF0YS5hcHBlbmQoJ3NvdXJjZUZpbGVOYW1lJywgcGFyYW1zLmZpbGUubmFtZSk7XHJcbiAgICBmb3JtRGF0YS5hcHBlbmQoJ292ZXJ3cml0ZScsIHBhcmFtcy5vdmVyd3JpdGUgPT09IHRydWUgPyBcInRydWVcIiA6IFwiZmFsc2VcIik7XHJcbiAgICBpZiAocGFyYW1zLmRlc3RGb2xkZXJJZCkge1xyXG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ2Rlc3RGb2xkZXJJZCcsIHBhcmFtcy5kZXN0Rm9sZGVySWQpO1xyXG4gICAgfVxyXG4gICAgaWYgKHBhcmFtcy50ZWFtSWQpIHtcclxuICAgICAgZm9ybURhdGEuYXBwZW5kKCd0ZWFtSWQnLCBwYXJhbXMudGVhbUlkKTtcclxuICAgIH1cclxuICAgIC8vIENyZWF0ZSByZXF1ZXN0XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnJlcXVlc3QoXHJcbiAgICAgIG5ldyBIdHRwUmVxdWVzdChcclxuICAgICAgICAnUE9TVCcsXHJcbiAgICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvYXJjaGl2ZS9pbXBvcnQvJyxcclxuICAgICAgICBmb3JtRGF0YSxcclxuICAgICAgICB7IHJlcG9ydFByb2dyZXNzOiB0cnVlIH1cclxuICAgICAgKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBmaWxlcyBhbmQgZm9sZGVyc1xyXG4gICAqIEBwYXJhbSBwYXJhbXMgOiBwYXJhbWV0ZXJzXHJcbiAgICovXHJcbiAgcXVlcnlBcmNoaXZlSXRlbXMocGFyYW1zOiBDbGlwcGVyQXJjaGl2ZUZpbGVzU2VhcmNoUGFyYW1zKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8QXBpUmVzdWx0PENsaXBwZXJBcmNoaXZlRmlsZXNTZWFyY2hSZXN1bHQ+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvYXJjaGl2ZS9maWxlcycsXHJcbiAgICAgIHBhcmFtc1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERlbGV0ZSBmaWxlIGFuZCBmb2xkZXJzXHJcbiAgICogQHBhcmFtIHBhcmFtcyBwYXJhbWV0ZXJzXHJcbiAgICovXHJcbiAgZGVsZXRlQXJjaGl2ZUl0ZW1zKHBhcmFtczogQ2xpcHBlckFyY2hpdmVGaWxlc0RlbGV0ZVBhcmFtcykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxudW1iZXI+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvYXJjaGl2ZS9maWxlcy9kZWxldGUnLFxyXG4gICAgICBwYXJhbXNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb3B5ICBmaWxlIGFuZCBmb2xkZXJzIHRvIGFub3RoZXIgZm9sZGVyIG9yIHRoZSBzYW1lXHJcbiAgICogQHBhcmFtIHBhcmFtcyBwYXJhbWV0ZXJzXHJcbiAgICovXHJcbiAgY29weUFyY2hpdmVJdGVtcyhwYXJhbXM6IENsaXBwZXJBcmNoaXZlRmlsZXNDb3B5UGFyYW1zKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8QXBpUmVzdWx0PG51bWJlcj4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9hcmNoaXZlL2ZpbGVzL2NvcHknLFxyXG4gICAgICBwYXJhbXNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogU2F2ZSBhIGZpbGVcclxuICAgKiBAcGFyYW0gcGFyYW1zIDogcGFyYW1ldGVyc1xyXG4gICAqL1xyXG4gIHNhdmVBcmNoaXZlRmlsZShwYXJhbXM6IENsaXBwZXJBcmNoaXZlRmlsZUluZm8pIHtcclxuICAgIC8vIFByZXBhcmUgZm9ybVxyXG4gICAgbGV0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XHJcbiAgICBpZiAocGFyYW1zLmZpbGUpIGZvcm1EYXRhLmFwcGVuZChwYXJhbXMuZmlsZS5maWxlLm5hbWUsIHBhcmFtcy5maWxlLmZpbGUpO1xyXG4gICAgaWYgKHBhcmFtcy5pZCkgZm9ybURhdGEuYXBwZW5kKCdpZCcsIHBhcmFtcy5pZCk7XHJcbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2ZvbGRlcklkJywgcGFyYW1zLmZvbGRlcklkKTtcclxuICAgIGlmIChwYXJhbXMudG9waWNJZCkge1xyXG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ3RvcGljSWQnLCBwYXJhbXMudG9waWNJZCk7XHJcbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgndG9waWNQYXRoJywgcGFyYW1zLnRvcGljUGF0aCk7XHJcbiAgICB9XHJcbiAgICBpZiAocGFyYW1zLnRpdGxlMSkgZm9ybURhdGEuYXBwZW5kKCd0aXRsZTEnLCBwYXJhbXMudGl0bGUxKTtcclxuICAgIGlmIChwYXJhbXMudGl0bGUyKSBmb3JtRGF0YS5hcHBlbmQoJ3RpdGxlMicsIHBhcmFtcy50aXRsZTIpO1xyXG4gICAgaWYgKHBhcmFtcy5vcmlnaW4pIGZvcm1EYXRhLmFwcGVuZCgnb3JpZ2luJywgcGFyYW1zLm9yaWdpbik7XHJcbiAgICBpZiAocGFyYW1zLm9yaWdpbkRlc2NyaXB0aW9uKSB7XHJcbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnb3JpZ2luRGVzY3JpcHRpb24nLCBwYXJhbXMub3JpZ2luRGVzY3JpcHRpb24pO1xyXG4gICAgfVxyXG4gICAgaWYgKHBhcmFtcy5kb2N1bWVudElkKSBmb3JtRGF0YS5hcHBlbmQoJ2RvY3VtZW50SWQnLCBwYXJhbXMuZG9jdW1lbnRJZCk7XHJcbiAgICBpZiAocGFyYW1zLmRvY3VtZW50SWRzKSBmb3JtRGF0YS5hcHBlbmQoJ2RvY3VtZW50SWRzJywgcGFyYW1zLmRvY3VtZW50SWRzKTtcclxuICAgIGlmIChwYXJhbXMuYmluYXJ5SWQpIGZvcm1EYXRhLmFwcGVuZCgnYmluYXJ5SWQnLCBwYXJhbXMuYmluYXJ5SWQ/LnRvU3RyaW5nKCkpO1xyXG4gICAgaWYgKHBhcmFtcy50YWdzKSBmb3JtRGF0YS5hcHBlbmQoJ3RhZ3MnLCBwYXJhbXMudGFncyk7XHJcbiAgICBpZiAocGFyYW1zLm5vdGVzKSBmb3JtRGF0YS5hcHBlbmQoJ25vdGVzJywgcGFyYW1zLm5vdGVzKTtcclxuICAgIGlmIChwYXJhbXMuZmlsZU5hbWUpIGZvcm1EYXRhLmFwcGVuZCgnZmlsZU5hbWUnLCBwYXJhbXMuZmlsZU5hbWUpO1xyXG4gICAgaWYgKHBhcmFtcy5maWxlVHlwZSkgZm9ybURhdGEuYXBwZW5kKCdmaWxlVHlwZScsIChwYXJhbXMuZmlsZVR5cGUgYXMgbnVtYmVyKS50b1N0cmluZygpKTtcclxuICAgIGlmIChwYXJhbXMuc3RvcmFnZVR5cGUpIGZvcm1EYXRhLmFwcGVuZCgnc3RvcmFnZVR5cGUnLCAocGFyYW1zLnN0b3JhZ2VUeXBlIGFzIG51bWJlcikudG9TdHJpbmcoKSk7XHJcbiAgICBpZiAocGFyYW1zLm1vZGVsKSBmb3JtRGF0YS5hcHBlbmQoJ21vZGVsJywgKHBhcmFtcy5tb2RlbCBhcyBudW1iZXIpLnRvU3RyaW5nKCkpO1xyXG5cclxuICAgIC8vIENyZWF0ZSByZXF1ZXN0XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnJlcXVlc3QoXHJcbiAgICAgIG5ldyBIdHRwUmVxdWVzdChcclxuICAgICAgICAnUE9TVCcsXHJcbiAgICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvYXJjaGl2ZS9maWxlcy9zYXZlJyxcclxuICAgICAgICBmb3JtRGF0YSxcclxuICAgICAgICB7IHJlcG9ydFByb2dyZXNzOiB0cnVlIH1cclxuICAgICAgKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBmaWxlIGRhdGFcclxuICAgKiBAcGFyYW0gaWQgOiB0aGUgaXRlbSBpZFxyXG4gICAqL1xyXG4gIGdldEFyY2hpdmVGaWxlKGlkOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0PEFwaVJlc3VsdDxDbGlwcGVyQXJjaGl2ZUZpbGVJbmZvPj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2FyY2hpdmUvZmlsZXMvJyArIGlkKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERvd25sb2FkIGZpbGVcclxuICAgKiBAcGFyYW0gaWQgOiB0aGUgYmluYXJ5IGlkIHRvIGRvd25sb2FkXHJcbiAgICogQHBhcmFtIG90cCA6IHRoZSBvcHRpb25hbCBvbmUgdGltZSBwYXNzd29yZFxyXG4gICAqL1xyXG4gIGRvd25sb2FkQXJjaGl2ZUZpbGUoaWQ6IG51bWJlciwgb3RwOiBzdHJpbmcgPSBudWxsKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LmdldChcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvYXJjaGl2ZS9maWxlcy9kb3dubG9hZC8/aWQ9JyArIGlkICsgJyZvdHA9JyArIG90cCxcclxuICAgICAgeyByZXNwb25zZVR5cGU6ICdibG9iJyB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcblxyXG59XHJcbiJdfQ==
@@ -2423,7 +2423,7 @@ class ClipperService {
2423
2423
  * Retrieve current dashboard
2424
2424
  */
2425
2425
  loadDashboard() {
2426
- this.httpClient
2426
+ return this.httpClient
2427
2427
  .post(this._serviceUri + '/account/dashboard', { refreshing: true }).subscribe((r) => {
2428
2428
  if (r.success) {
2429
2429
  this.dashboard.documentUpdates = r.value.documentUpdates;