@esfaenza/httpservice 11.2.52 → 11.2.54

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  import { __awaiter } from "tslib";
2
2
  // Angular
3
- import { HttpClient, HttpErrorResponse, HttpEventType, HttpHeaders } from "@angular/common/http";
3
+ import { HttpClient, HttpErrorResponse, HttpEventType, HttpHeaders, HttpParams } from "@angular/common/http";
4
4
  import { Injectable, Inject, Optional } from "@angular/core";
5
5
  // Es Faenza
6
6
  import { CacheService } from "@esfaenza/preferences";
@@ -293,11 +293,12 @@ export class HTTPService {
293
293
  * @param {HttpParams} params Parametri della chiamata
294
294
  */
295
295
  getFileNative(url, params = null) {
296
+ var encodedParams = new HttpParams();
296
297
  // Encodo tutti i parametri per evitare casi particolari
297
298
  let parKeys = params.keys();
298
299
  for (let i = 0; i < parKeys.length; i++)
299
- params.set(parKeys[i], encodeURIComponent(params.get(parKeys[i])));
300
- let finalUrl = url + (params ? "?" + params.toString() : "");
300
+ encodedParams = encodedParams.set(parKeys[i], encodeURIComponent(params.get(parKeys[i])));
301
+ let finalUrl = url + (params ? "?" + encodedParams.toString() : "");
301
302
  window.location.href = finalUrl;
302
303
  }
303
304
  /**
@@ -768,4 +769,4 @@ HTTPService.ctorParameters = () => [
768
769
  { type: CacheService },
769
770
  { type: UtilityService }
770
771
  ];
771
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cHNlcnZpY2Uuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2h0dHBzZXJ2aWNlL3NyYy9saWIvaHR0cHNlcnZpY2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsVUFBVTtBQUNWLE9BQU8sRUFBRSxVQUFVLEVBQUUsaUJBQWlCLEVBQWEsYUFBYSxFQUFFLFdBQVcsRUFBK0MsTUFBTSxzQkFBc0IsQ0FBQztBQUN6SixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFN0QsWUFBWTtBQUNaLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFdEQsa0NBQWtDO0FBQ2xDLE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25GLE9BQU8sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRWxFLGtDQUFrQztBQUNsQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsdUJBQXVCLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUVySSxXQUFXO0FBQ1gsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFdkUsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQVFqRDs7O0dBR0c7QUFFSCxNQUFNLE9BQU8sV0FBVztJQTJCdEI7O09BRUc7SUFD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RSxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDeEIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLEdBQUcsQ0FBQyxPQUFlO1FBQ3pCLElBQUksSUFBSSxDQUFDLFVBQVU7WUFDakIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsQ0FBQTtJQUMzQyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ssR0FBRyxDQUFDLE9BQWU7UUFDekIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUNqQixPQUFPLENBQUMsSUFBSSxDQUFDLHdCQUF3QixHQUFHLE9BQU8sQ0FBQyxDQUFBO1lBQ2hELE9BQU8sRUFBRSxDQUFDO1NBQ1g7UUFDRCxPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbkMsQ0FBQzs7O1lBaDJCRixVQUFVOzs7NENBZ0NOLE1BQU0sU0FBQyxXQUFXO1lBL0NkLHFCQUFxQjs0Q0FpRHpCLFFBQVEsWUFBSSxNQUFNLFNBQUMsaUJBQWlCOzRDQUNwQyxRQUFRLFlBQUksTUFBTSxTQUFDLFdBQVc7NENBQzlCLFFBQVEsWUFBSSxNQUFNLFNBQUMsUUFBUTs0Q0FDM0IsUUFBUSxZQUFJLE1BQU0sU0FBQyx1QkFBdUI7MENBQzFDLFFBQVEsWUFBSSxNQUFNLFNBQUMsYUFBYTswQ0FDaEMsUUFBUSxZQUFJLE1BQU0sU0FBQyxVQUFVO1lBckV6QixVQUFVO1lBSVYsWUFBWTtZQUNaLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBBbmd1bGFyXHJcbmltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBFcnJvclJlc3BvbnNlLCBIdHRwRXZlbnQsIEh0dHBFdmVudFR5cGUsIEh0dHBIZWFkZXJzLCBIdHRwUGFyYW1zLCBIdHRwUHJvZ3Jlc3NFdmVudCwgSHR0cFJlc3BvbnNlIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XHJcbmltcG9ydCB7IEluamVjdGFibGUsIEluamVjdCwgT3B0aW9uYWwgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuLy8gRXMgRmFlbnphXHJcbmltcG9ydCB7IENhY2hlU2VydmljZSB9IGZyb20gXCJAZXNmYWVuemEvcHJlZmVyZW5jZXNcIjtcclxuaW1wb3J0IHsgVXRpbGl0eVNlcnZpY2UgfSBmcm9tIFwiQGVzZmFlbnphL2V4dGVuc2lvbnNcIjtcclxuXHJcbi8vIERpcmV0dGl2ZSwgQ29tcG9uZW50aSwgTGlicmVyaWVcclxuaW1wb3J0IHsgY2F0Y2hFcnJvciwgY29uY2F0TWFwLCBkZWxheSwgZmluYWxpemUsIG1hcCwgc2NhbiB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xyXG5pbXBvcnQgeyBmb3JrSm9pbiwgZnJvbSwgT2JzZXJ2YWJsZSwgb2YsIHRocm93RXJyb3IgfSBmcm9tIFwicnhqc1wiO1xyXG5cclxuLy8gQ2hpYW1hdGUgYWkgUmVwb3NpdG9yeSAvIHRva2Vuc1xyXG5pbXBvcnQgeyBIVFRQX0lOVkFMSURBVElPTiwgQ0xJRU5UX0NBQ0hFX0RVUkFUSU9OX1MsIEJBQ0tFTkRfVVJMLCBIVFRQX0xPQ0FMRSwgQVBQX05BTUUsIENBQ0hFX0JZX1VTRVIsIERFQlVHX01PREUgfSBmcm9tICcuL3Rva2Vucyc7XHJcblxyXG4vLyBNb2RlbGxpIFxyXG5pbXBvcnQgeyBIdHRwU2VydmljZUV4dGVuc2lvbnMgfSBmcm9tICcuL2NvbmZpZy9IdHRwU2VydmljZUV4dGVuc2lvbnMnO1xyXG5pbXBvcnQgeyBEb3dubG9hZCB9IGZyb20gJy4vbW9kZWxzL0Rvd25sb2FkJztcclxuaW1wb3J0IHsgTG9jIH0gZnJvbSAnLi9odHRwc2VydmljZS5zZXJ2aWNlLmxvYyc7XHJcbmltcG9ydCB7IENhY2hlSW5mb3MgfSBmcm9tIFwiLi9tb2RlbHMvQ2FjaGVJbmZvc1wiO1xyXG5cclxuLyoqXHJcbiAqIERpY2hpYXJhemlvbmUgZGVsbGEgdmFyaWFiaWxlIGdsb2JhbGUgZGF5anMuIEwnb25lcmUgZGkgXCJjcmVhcmxhXCIgw6ggYWZmaWRhdG8gYWxsJ2FwcGxpY2F6aW9uZSBjaGUgdXRpbGl6emEgcXVlc3RhIGxpYnJlcmlhLCBcclxuICogY2hlIGRvdnLDoCBpbXBvcnRhcmUgbG8gc2NyaXB0IGdsb2JhbGUgZGkgZGF5anMgbmVsbGEgQ0xJXHJcbiAqL1xyXG5kZWNsYXJlIHZhciBkYXlqczogYW55O1xyXG5cclxuLyoqXHJcbiAqIFNlcnZpemlvIHV0aWxpenphdG8gcGVyIGVmZmV0dHVhcmUgcXVhbHNpYXNpIHRpcG8gZGkgY2hpYW1hdGEgSFRUUCBkYWxsJ2FwcGxpY2F6aW9uZSwgZ2VzdGlzY2UgZXJyb3JpIGUgY2FjaGUgZGVsbGUgcmlzcG9zdGUgbmF0aXZhbWVudGUgZSBuZSBwdcOyIGVzc2VyZSBcclxuICogZXN0ZXNvL21vZGlmaWNhdG8gaWwgY29tcG9ydGFtZW50byBpbXBsZW1lbnRhbmRvIGxhIGNsYXNzZSBkaSBcImhvb2tcIiAqKklIdHRwU2VydmljZUV4dGVuc2lvbnMqKiBlIHJlZ2lzdHJhbmRvbGEgbmVsIHByb3ZpZGVyIGRlbGxhIGNsYXNzZSAqKkh0dHBTZXJ2aWNlRXh0ZW5zaW9ucyoqXHJcbiAqL1xyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBIVFRQU2VydmljZSB7XHJcblxyXG4gIC8qKiBDYWNoZSBkZWxsbyBzdGF0byBkZWxsZSBjaGlhbWF0ZSBIVFRQIGF0dHVhbG1lbnRlIGVmZmV0dHVhdGUuIE9nbmkgY2hpYW1hdGEgw6ggcmFwcHJlc2VudGF0YSBkYSB1biBHVUlEIGUgbG8gc3RhdHVzIGFzc3VtZSB2YWxvcmUgKipmYWxzZSoqIHNvbG8gc3VnbGkgZXJyb3JpICovXHJcbiAgcHJpdmF0ZSBjYWxsU3RhdHVzOiB7IFtpZDogc3RyaW5nXTogeyB1cmw6IHN0cmluZywgc3VjY2VzczogYm9vbGVhbiB9IH0gPSB7fTtcclxuICAvKiogTm9tZSBkZWxsYSBjYWNoZSBpbiBjdWkgdmVuZ29ubyBzdG9yaWNpenphdGUgbGUgaW5mb3JtYXppb25pIHN1bGxlIHJpc3Bvc3RlIGRlbGxlIGNoaWFtYXRlIHNvdHRvIGZvcm1hIGRpIGRpY3Rpb25hcnkgKi9cclxuICBwcml2YXRlIGxvY2FsU3RvcmFnZUh0dHBDYWNoZUtleSA9IG51bGw7XHJcbiAgLyoqIE5vbWUgZGVsbGEgY2FjaGUgaW4gY3VpIHZlbmdvbm8gc3RvcmljaXp6YXRlIGxlIGluZm9ybWF6aW9uaSBzdWxsZSByaXNwb3N0ZSBkZWxsZSBjaGlhbWF0ZSBzb3R0byBmb3JtYSBkaSBkaWN0aW9uYXJ5LCBzb2xvIHBlciBsZSBjaGlhbWF0ZSBjb24gdW4gdGVtcG8gZGVmaW5pdG8gZGkgY2FjaGluZyAqL1xyXG4gIHByaXZhdGUgbG9jYWxTdG9yYWdlSHR0cFRpbWVkQ2FjaGVLZXkgPSBudWxsO1xyXG4gIC8qKiBOb21lIGRlbGxhIGNhY2hlIGluIGN1aSB2ZW5nb25vIHN0b3JpY2l6emF0ZSBsZSBpbmZvcm1hemlvbmkgc3VsbG8gc2NhZGVyZSBkZWxsYSBjYWNoZSBzdGVzc2EgKi9cclxuICBwcml2YXRlIGxvY2FsU3RvcmFnZUh0dHBDYWNoZUV4cGlyZUtleSA9IG51bGw7XHJcbiAgLyoqIElkZW50aXTDoCBjb2xsZWdhdGEgYWwgdG9rZW4gZGkgYXV0ZW50aWNhemlvbmUgZGEgdXNhcmUsIHJpY2hpZXN0YSBhbCBwcm9ncmFtbWEgY2hlIHV0aWxpenphIGxhIGxpYnJlcmlhIGF0dHJhdmVyc28gbCdob29rICoqcmV0cmlldmVJZGVudGl0eSoqIGRlbGxhICoqSHR0cFNlcnZpY2VFeHRlbnNpb25zKiogKi9cclxuICBwcml2YXRlIG1lOiB7IElkdGVuYW50OiBzdHJpbmcsIElkVXNlcjogc3RyaW5nIH0gPSBudWxsO1xyXG4gIC8qKiBJbmRpY2EgY2hlIGxhIGNhY2hlIGEgdGVtcG8gZGV2J2Vzc2VyZSBwZXJzaXN0aXRhIGlsIHByaW1hIHBvc3NpYmlsZSAqL1xyXG4gIHByaXZhdGUgUGVyc2lzdFRpbWVkQ2FjaGVBU0FQOiBib29sZWFuID0gZmFsc2U7XHJcbiAgLyoqIEluZGljYSBjaGUgbGEgY2FjaGUgc2VuemEgbGltaXRpIGRpIHRlbXBvIGRldidlc3NlcmUgcGVyc2lzdGl0YSBpbCBwcmltYSBwb3NzaWJpbGUgKi9cclxuICBwcml2YXRlIFBlcnNpc3RVbnRpbWVkQ2FjaGVBU0FQOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIEltcGxlbWVudGF6aW9uZSBkZWxsYSBjbGFzc2UgZGkgZXN0ZW5zaW9uZSBwZXIgY29sbGVnYXJlIGkgY29tcG9ydGFtZW50aSBkZWxsYSBsaWJyZXJpYSBhbGwnYXBwbGljYXppb25lIGluIGN1aSDDqCB1c2F0YS4gXHJcbiAgICogXHJcbiAgICogU2Ugw6ggc3RhdG8gZWZmZXR0dWF0byBpbCBwcm92aWRlIGRlbGxhIGNsYXNzZSAqKkh0dHBTZXJ2aWNlRXh0ZW5zaW9ucyoqIHZlcnLDoCB1c2F0byBxdWVsIHByb3ZpZGVyLCBhbHRyaW1lbnRpIHZlcnLDoCBjcmVhdGEgdW5hIG51b3ZhIGlzdGFuemEgZGkgZGVmYXVsdFxyXG4gICAqL1xyXG4gIHByaXZhdGUgRXh0ZW5zaW9uc0ltcGw6IEh0dHBTZXJ2aWNlRXh0ZW5zaW9ucztcclxuXHJcbiAgLyoqIExpc3RhIGRlbGxlIHVsdGltZSAzIGNoaWFtYXRlIGNvbXBsZXRhdGUgY29uIHN1Y2Nlc3NvIGluIG9yZGluZSBkaSBjb21wbGV0YW1lbnRvIChpbiBwb3NpemlvbmUgMCBjJ8OoIGwndWx0aW1hIGNvbXBsZXRhdGEgZWNjZXRlcmEuLi4pICovXHJcbiAgcHVibGljIExhc3RUaHJlZUNvbXBsZXRlZENhbGxzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICAvKipcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBASW5qZWN0KEJBQ0tFTkRfVVJMKSBwcml2YXRlIEJBQ0tFTkRfVVJMLFxyXG4gICAgcHJpdmF0ZSBFWFRFTlNJT05fQ0xBU1M6IEh0dHBTZXJ2aWNlRXh0ZW5zaW9ucyxcclxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoSFRUUF9JTlZBTElEQVRJT04pIHByaXZhdGUgSFRUUF9JTlZBTElEQVRJT04sXHJcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEhUVFBfTE9DQUxFKSBwcml2YXRlIExPQ0FMRSxcclxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoQVBQX05BTUUpIHByaXZhdGUgQVBQX05BTUUsXHJcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KENMSUVOVF9DQUNIRV9EVVJBVElPTl9TKSBwcml2YXRlIENMSUVOVF9DQUNIRV9EVVJBVElPTl9TLFxyXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChDQUNIRV9CWV9VU0VSKSBwcml2YXRlIENBQ0hFX0JZX1VTRVI6IGJvb2xlYW4sXHJcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KERFQlVHX01PREUpIHByaXZhdGUgREVCVUdfTU9ERTogYm9vbGVhbixcclxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcclxuICAgIHByaXZhdGUgbG9jYWxTdG9yYWdlOiBDYWNoZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHV0aXNFeHRzOiBVdGlsaXR5U2VydmljZVxyXG4gICkge1xyXG5cclxuICAgIHRoaXMuRXh0ZW5zaW9uc0ltcGwgPSB0aGlzLkVYVEVOU0lPTl9DTEFTUyB8fCBuZXcgSHR0cFNlcnZpY2VFeHRlbnNpb25zKCk7XHJcbiAgICB0aGlzLm1lID0gdGhpcy5FeHRlbnNpb25zSW1wbC5yZXRyaWV2ZUlkZW50aXR5KCk7XHJcbiAgICB0aGlzLmxvY2FsU3RvcmFnZUh0dHBDYWNoZUtleSA9ICh0aGlzLkFQUF9OQU1FID8/IFwiQVBQXCIpLnJlcGxhY2UoL1xccy9nLCAnXycpICsgXCJfSHR0cENhY2hlXCI7XHJcbiAgICB0aGlzLmxvY2FsU3RvcmFnZUh0dHBUaW1lZENhY2hlS2V5ID0gKHRoaXMuQVBQX05BTUUgPz8gXCJBUFBcIikucmVwbGFjZSgvXFxzL2csICdfJykgKyBcIl9IdHRwVGltZWRDYWNoZVwiO1xyXG4gICAgdGhpcy5sb2NhbFN0b3JhZ2VIdHRwQ2FjaGVFeHBpcmVLZXkgPSB0aGlzLmxvY2FsU3RvcmFnZUh0dHBDYWNoZUtleSArIFwiX0V4cGlyZVwiO1xyXG5cclxuICAgIHRoaXMuYWRqdXN0T2xkU3RvcmFnZVN5c3RlbSgpO1xyXG5cclxuICAgIGlmICh0aGlzLnVudGltZWRDYWNoZUV4cGlyZWQoKSlcclxuICAgICAgdGhpcy5yZXNldEh0dHBVbnRpbWVkQ2FjaGVTdG9yYWdlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZSB2ZWRvIGNoZSBjaSBzb25vIGVsZW1lbnRpIHNhbHZhdGkgbmVsIGxvY2FsU3RvcmFnZSBwcm92byBhIHRvZ2xpZXJsaSBlIGEgcmlzYWx2YXJsaSB2aWEgcHJlZmVyZW5jZS5cclxuICAgKiBOZWwgY2FzbyBtaWdsaW9yZSBsaSBzcG9zdG8gZGFsIGxvY2FsU3RvcmFnZSBhbCBEQiBkaSBwcmVmZXJlbmNlLCBuZWwgY2FzbyBwZWdnaW9yZSBsaSB0b2xnbyBlIGxpIHJpc2Fsdm8gbmVsIGxvY2FsU3RvcmFnZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgYXN5bmMgYWRqdXN0T2xkU3RvcmFnZVN5c3RlbSgpIHtcclxuICAgIHZhciBsc1RpbWVkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5sb2NhbFN0b3JhZ2VIdHRwVGltZWRDYWNoZUtleSk7XHJcbiAgICB2YXIgbHNVbnRpbWVkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5sb2NhbFN0b3JhZ2VIdHRwQ2FjaGVLZXkpO1xyXG4gICAgaWYgKCFsc1RpbWVkICYmICFsc1VudGltZWQpXHJcbiAgICAgIHJldHVybjtcclxuXHJcbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLmxvY2FsU3RvcmFnZUh0dHBUaW1lZENhY2hlS2V5KTtcclxuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMubG9jYWxTdG9yYWdlSHR0cENhY2hlS2V5KTtcclxuICAgIGxzVGltZWQgPSBsc1RpbWVkID8gSlNPTi5wYXJzZShsc1RpbWVkKSA6IHt9O1xyXG4gICAgbHNVbnRpbWVkID0gbHNVbnRpbWVkID8gSlNPTi5wYXJzZShsc1VudGltZWQpIDoge307XHJcblxyXG4gICAgYXdhaXQgZm9ya0pvaW4oW1xyXG4gICAgICB0aGlzLmxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMubG9jYWxTdG9yYWdlSHR0cFRpbWVkQ2FjaGVLZXksIGxzVGltZWQpLFxyXG4gICAgICB0aGlzLmxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMubG9jYWxTdG9yYWdlSHR0cENhY2hlS2V5LCBsc1VudGltZWQpXHJcbiAgICBdKS50b1Byb21pc2UoKTtcclxuXHJcbiAgICB0aGlzLmxvZyh0aGlzLmxvYyhcIkNvbnZlcnRlZCBvbGQgc3RvcmFnZSBzeXN0ZW0gdG8gbmV3IG9uZVwiKSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFc2VjdXppb25lIGRpIHVuYSBHRVQgSFRUUCBjb24gZXZlbnR1YWxtZW50ZSBsYSBnZXN0aW9uZSBkZWxsYSBjYWNoZSBxdWFsb3JhIGxhIGNoaWFtYXRhIHRlcm1pbmkgY29uIGxhIGNvbnZlbnppb25lIFwiI2NhY2hlXCJcclxuICAgKiBcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsIFVSTCBzdSBjdWkgZWZmZXR0dWFyZSBsYSBjaGlhbWF0YVxyXG4gICAqIEBwYXJhbSB7SHR0cFBhcmFtc30gcGFyYW1zIFBhcmFtZXRyaSBkZWxsYSBjaGlhbWF0YVxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0cmFuc2FjdGlvbiBDb2RpY2UgdHJhbnNhemlvbmUgY29sbGVnYXRvIGEgcXVlc3RhIGNoaWFtYXRhLiBWaWVuZSBpbnNlcml0byBuZWxsJ0hlYWRlciBcIlgtVFgtSURcIiBlIGxhdG8gQmFja2VuZCBkb3Zyw6AgZXNzZXJlIGdlc3RpdG8gZGkgY29uc2VndWVuemFcclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHN1Y2Nlc2Z1bFJlc3VsdE1hbmRhdG9yeSBJbmRpY2EgY2hlIHF1ZXN0YSBjaGlhbWF0YSBkZXZlIGFzc29sdXRhbWVudGUgYW5kYXJlIGJlbmUuIEluIGNhc28gY29udHJhcmlvIHZpZW5lIGZpc2ljYW1lbnRlIGZhdHRvIGlsIHRocm93IGNoZSBwdcOyIGVzc2VyZSBcclxuICAgKiByYWNjb2x0byBkYSBjaGkgdXNhIGxhIGxpYnJlcmlhIG5lbGxhIHBpcGUgXCJvbkVycm9yXCIgZGVsbCdPYnNlcnZhYmxlIHJlc3RpdHVpdG8gZWQgZXNzZXJlIGdlc3RpdG8gaW4gbWFuaWVyYSBub24gc3RhbmRhcmRcclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcnJvckNhbGxiYWNrIENhbGxiYWNrIGNoaWFtYXRvIGluIGNhc28gZGkgZXJyb3JlXHJcbiAgICogXHJcbiAgICogQHJldHVybnMge09ic2VydmFibGU8VD59IE9ic2VydmFibGUgY2hlIGNvbnRpZW5lIGlsIHJpc3VsdGF0byBkZWxsYSBjaGlhbWF0YVxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXQ8VD4odXJsOiBzdHJpbmcsIHBhcmFtczogSHR0cFBhcmFtcyA9IG51bGwsIHRyYW5zYWN0aW9uID0gXCJcIiwgc3VjY2VzZnVsUmVzdWx0TWFuZGF0b3J5OiBib29sZWFuID0gdHJ1ZSwgZXJyb3JDYWxsYmFjazogRnVuY3Rpb24gPSBudWxsKTogT2JzZXJ2YWJsZTxUPiB7XHJcbiAgICAvLyBUT0RPIHByb3ZhcmUgZSB0ZXN0YXJlXHJcbiAgICByZXR1cm4gZnJvbShbdGhpcy5kZWZhdWx0U3RhcnRDYWxsKHVybCldKS5waXBlKFxyXG4gICAgICBjb25jYXRNYXAoKG15R3VpZDogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgbGV0IGNhY2hlZEluZm9zID0gdGhpcy50cnlHZXRDYWNoZUluZm9ybWF0aW9ucyh1cmwsIHBhcmFtcyk7XHJcbiAgICAgICAgaWYgKGNhY2hlZEluZm9zLmNhY2hlICYmIGNhY2hlZEluZm9zLmNhY2hlSXRlbSkge1xyXG4gICAgICAgICAgdGhpcy5sb2codGhpcy5sb2MoXCJSZXN1bHQgZm9yXCIpICsgXCIgXCIgKyB1cmwgKyBcIiBcIiArIHRoaXMubG9jKFwicmV0cmlldmVkIGZyb20gY2FjaGVcIikpO1xyXG4gICAgICAgICAgcmV0dXJuIG9mPFQ+KGNhY2hlZEluZm9zLmNhY2hlSXRlbSkucGlwZShkZWxheSgwKSwgZmluYWxpemUoKCkgPT4geyB0aGlzLnRyeUZpbmFsaXplQnlHdWlkKG15R3VpZCk7IH0pKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBodHRwQ2FsbCA9IHRoaXMuaHR0cC5nZXQ8VD4oY2FjaGVkSW5mb3MuZmluYWxVcmwsIHsgaGVhZGVyczogdGhpcy5nZXRIZWFkZXJzKHRyYW5zYWN0aW9uKSwgcGFyYW1zOiBwYXJhbXMgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiBodHRwQ2FsbC5waXBlKFxyXG4gICAgICAgICAgbWFwKChyZXM6IFQpID0+IHtcclxuICAgICAgICAgICAgbGV0IHJlc3BvbnNlSXRlbSA9IDxUPnJlcztcclxuXHJcbiAgICAgICAgICAgIGlmIChjYWNoZWRJbmZvcy5jYWNoZSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuY2FjaGVSZXNwb25zZSh0aGlzLnV0aXNFeHRzLmRlZXBDbG9uZShyZXNwb25zZUl0ZW0pLCBjYWNoZWRJbmZvcyk7XHJcbiAgICAgICAgICAgICAgdGhpcy5sb2codGhpcy5sb2MoXCJDYWNoZWQgcmVzdWx0IGZvclwiKSArIFwiIFwiICsgdXJsKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlSXRlbTtcclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgY2F0Y2hFcnJvcigoZXJyLCBjYXVnaHQpOiBPYnNlcnZhYmxlPFQ+ID0+IHtcclxuICAgICAgICAgICAgaWYgKGVycm9yQ2FsbGJhY2spIGVycm9yQ2FsbGJhY2soKTtcclxuICAgICAgICAgICAgcmV0dXJuICFzdWNjZXNmdWxSZXN1bHRNYW5kYXRvcnkgPyB0aHJvd0Vycm9yKGVycikgOiB0aGlzLnJlZ2lzdGVyRXJyb3JBbmRSZXR1cm5FbXB0eU9ic2VydmFibGUoZXJyLCBteUd1aWQpO1xyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7IHRoaXMudHJ5RmluYWxpemVCeUd1aWQobXlHdWlkLCBjYWNoZWRJbmZvcyk7IH0pXHJcbiAgICAgICAgKTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFc2VjdXppb25lIGRpIHVuYSBHRVQgSFRUUCBjb24gZXZlbnR1YWxtZW50ZSBsYSBnZXN0aW9uZSBkZWxsYSBjYWNoZSBxdWFsb3JhIGxhIGNoaWFtYXRhIHRlcm1pbmkgY29uIGxhIGNvbnZlbnppb25lIFwiI2NhY2hlXCJcclxuICAgKiBcclxuICAgKiBDYXNvIHNwZWNpZmljbyBkaSBjaGlhbWF0YSBjaGUgZGV2ZSByZXN0aXR1aXJlIHVuIEJsb2IgbyB1biBBcnJheUJ1ZmZlciBuYXRpdm8gZGEgZWxhYm9yYXJlXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVybCBVUkwgc3UgY3VpIGVmZmV0dHVhcmUgbGEgY2hpYW1hdGFcclxuICAgKiBAcGFyYW0ge0h0dHBQYXJhbXN9IHBhcmFtcyBQYXJhbWV0cmkgZGVsbGEgY2hpYW1hdGFcclxuICAgKiBAcGFyYW0ge1wiYXJyYXlidWZmZXJcInwgXCJibG9iXCJ9IHR5cGUgVGlwbyBkaSByaXRvcm5vIHJpY2hpZXN0b1xyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0cmFuc2FjdGlvbiBDb2RpY2UgdHJhbnNhemlvbmUgY29sbGVnYXRvIGEgcXVlc3RhIGNoaWFtYXRhLiBWaWVuZSBpbnNlcml0byBuZWxsJ0hlYWRlciBcIlgtVFgtSURcIiBlIGxhdG8gQmFja2VuZCBkb3Zyw6AgZXNzZXJlIGdlc3RpdG8gZGkgY29uc2VndWVuemFcclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHN1Y2Nlc2Z1bFJlc3VsdE1hbmRhdG9yeSBJbmRpY2EgY2hlIHF1ZXN0YSBjaGlhbWF0YSBkZXZlIGFzc29sdXRhbWVudGUgYW5kYXJlIGJlbmUuIEluIGNhc28gY29udHJhcmlvIHZpZW5lIGZpc2ljYW1lbnRlIGZhdHRvIGlsIHRocm93IGNoZSBwdcOyIGVzc2VyZSBcclxuICAgKiByYWNjb2x0byBkYSBjaGkgdXNhIGxhIGxpYnJlcmlhIG5lbGxhIHBpcGUgXCJvbkVycm9yXCIgZGVsbCdPYnNlcnZhYmxlIHJlc3RpdHVpdG8gZWQgZXNzZXJlIGdlc3RpdG8gaW4gbWFuaWVyYSBub24gc3RhbmRhcmRcclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcnJvckNhbGxiYWNrIENhbGxiYWNrIGNoaWFtYXRvIGluIGNhc28gZGkgZXJyb3JlXHJcbiAgICogXHJcbiAgICogQHJldHVybnMge09ic2VydmFibGU8QmxvYiB8IEFycmF5QnVmZmVyPn0gT2JzZXJ2YWJsZSBjaGUgY29udGllbmUgaWwgcmlzdWx0YXRvIGRlbGxhIGNoaWFtYXRhXHJcbiAgICovXHJcbiAgcHVibGljIGdldFJhdyh1cmw6IHN0cmluZywgcGFyYW1zOiBIdHRwUGFyYW1zID0gbnVsbCwgdHlwZTogXCJhcnJheWJ1ZmZlclwiIHwgXCJibG9iXCIgPSBcImFycmF5YnVmZmVyXCIsIHRyYW5zYWN0aW9uID0gXCJcIiwgc3VjY2VzZnVsUmVzdWx0TWFuZGF0b3J5OiBib29sZWFuID0gdHJ1ZSwgZXJyb3JDYWxsYmFjayA9IG51bGwpOiBPYnNlcnZhYmxlPEJsb2IgfCBBcnJheUJ1ZmZlcj4ge1xyXG4gICAgcmV0dXJuIGZyb20oW3RoaXMuZGVmYXVsdFN0YXJ0Q2FsbCh1cmwpXSkucGlwZShcclxuICAgICAgY29uY2F0TWFwKChteUd1aWQ6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIGxldCBjYWNoZWRJbmZvcyA9IHRoaXMudHJ5R2V0Q2FjaGVJbmZvcm1hdGlvbnModXJsLCBwYXJhbXMpO1xyXG4gICAgICAgIGlmIChjYWNoZWRJbmZvcy5jYWNoZSAmJiBjYWNoZWRJbmZvcy5jYWNoZUl0ZW0pIHtcclxuICAgICAgICAgIHRoaXMubG9nKHRoaXMubG9jKFwiUmVzdWx0IGZvclwiKSArIFwiIFwiICsgdXJsICsgXCIgXCIgKyB0aGlzLmxvYyhcInJldHJpZXZlZCBmcm9tIGNhY2hlXCIpKTtcclxuICAgICAgICAgIHJldHVybiBvZjxhbnk+KGNhY2hlZEluZm9zLmNhY2hlSXRlbSkucGlwZShkZWxheSgwKSwgZmluYWxpemUoKCkgPT4geyB0aGlzLnRyeUZpbmFsaXplQnlHdWlkKG15R3VpZCk7IH0pKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBodHRwQ2FsbCA9IHRoaXMuaHR0cC5nZXQoY2FjaGVkSW5mb3MuZmluYWxVcmwsIHsgcmVzcG9uc2VUeXBlOiA8YW55PnR5cGUsIGhlYWRlcnM6IHRoaXMuZ2V0SGVhZGVycyh0cmFuc2FjdGlvbiksIHBhcmFtczogcGFyYW1zIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gaHR0cENhbGwucGlwZShcclxuICAgICAgICAgIG1hcCgoYmxvYjogQmxvYiB8IEFycmF5QnVmZmVyKSA9PiB7XHJcblxyXG4gICAgICAgICAgICBpZiAoY2FjaGVkSW5mb3MuY2FjaGUpIHtcclxuICAgICAgICAgICAgICB0aGlzLmNhY2hlUmVzcG9uc2UoYmxvYiwgY2FjaGVkSW5mb3MpO1xyXG4gICAgICAgICAgICAgIHRoaXMubG9nKHRoaXMubG9jKFwiQ2FjaGVkIHJlc3VsdCBmb3JcIikgKyBcIiBcIiArIHVybCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBibG9iO1xyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgICBjYXRjaEVycm9yKChlcnIsIGNhdWdodCk6IE9ic2VydmFibGU8QmxvYj4gPT4ge1xyXG4gICAgICAgICAgICBpZiAoZXJyb3JDYWxsYmFjaykgZXJyb3JDYWxsYmFjaygpO1xyXG4gICAgICAgICAgICByZXR1cm4gIXN1Y2Nlc2Z1bFJlc3VsdE1hbmRhdG9yeSA/IHRocm93RXJyb3IoZXJyKSA6IHRoaXMucmVnaXN0ZXJFcnJvckFuZFJldHVybkVtcHR5T2JzZXJ2YWJsZShlcnIsIG15R3VpZCk7XHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICAgIGZpbmFsaXplKCgpID0+IHsgdGhpcy50cnlGaW5hbGl6ZUJ5R3VpZChteUd1aWQsIGNhY2hlZEluZm9zKTsgfSlcclxuICAgICAgICApO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICogRXNlY3V6aW9uZSBkaSB1bmEgUE9TVCBIVFRQXHJcbiAgKiBcclxuICAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVVJMIHN1IGN1aSBlZmZldHR1YXJlIGxhIGNoaWFtYXRhXHJcbiAgKiBAcGFyYW0ge2FueX0gYm9keURhdGEgRFRPIHBlciBsYSBjaGlhbWF0YVxyXG4gICogQHBhcmFtIHtIdHRwUGFyYW1zfSBwYXJhbXMgUGFyYW1ldHJpIGRlbGxhIGNoaWFtYXRhXHJcbiAgKiBAcGFyYW0ge3N0cmluZ30gdHJhbnNhY3Rpb24gQ29kaWNlIHRyYW5zYXppb25lIGNvbGxlZ2F0byBhIHF1ZXN0YSBjaGlhbWF0YS4gVmllbmUgaW5zZXJpdG8gbmVsbCdIZWFkZXIgXCJYLVRYLUlEXCIgZSBsYXRvIEJhY2tlbmQgZG92csOgIGVzc2VyZSBnZXN0aXRvIGRpIGNvbnNlZ3VlbnphXHJcbiAgKiBAcGFyYW0ge2Jvb2xlYW59IHN1Y2Nlc2Z1bFJlc3VsdE1hbmRhdG9yeSBJbmRpY2EgY2hlIHF1ZXN0YSBjaGlhbWF0YSBkZXZlIGFzc29sdXRhbWVudGUgYW5kYXJlIGJlbmUuIEluIGNhc28gY29udHJhcmlvIHZpZW5lIGZpc2ljYW1lbnRlIGZhdHRvIGlsIHRocm93IGNoZSBwdcOyIGVzc2VyZSBcclxuICAqIHJhY2NvbHRvIGRhIGNoaSB1c2EgbGEgbGlicmVyaWEgbmVsbGEgcGlwZSBcIm9uRXJyb3JcIiBkZWxsJ09ic2VydmFibGUgcmVzdGl0dWl0byBlZCBlc3NlcmUgZ2VzdGl0byBpbiBtYW5pZXJhIG5vbiBzdGFuZGFyZFxyXG4gICogXHJcbiAgKiBAcmV0dXJucyB7T2JzZXJ2YWJsZTxUPn0gT2JzZXJ2YWJsZSBjaGUgY29udGllbmUgaWwgcmlzdWx0YXRvIGRlbGxhIGNoaWFtYXRhXHJcbiAgKi9cclxuICBwdWJsaWMgcG9zdDxUPih1cmw6IHN0cmluZywgYm9keURhdGE6IGFueSwgcGFyYW1zOiBIdHRwUGFyYW1zID0gbnVsbCwgdHJhbnNhY3Rpb24gPSBcIlwiLCBzdWNjZXNmdWxSZXN1bHRNYW5kYXRvcnk6IGJvb2xlYW4gPSB0cnVlKTogT2JzZXJ2YWJsZTxUPiB7XHJcbiAgICByZXR1cm4gZnJvbShbdGhpcy5kZWZhdWx0U3RhcnRDYWxsKHVybCldKS5waXBlKFxyXG4gICAgICBjb25jYXRNYXAoKG15R3VpZDogc3RyaW5nKSA9PiB7XHJcblxyXG4gICAgICAgIHZhciBodHRwQ2FsbCA9IHRoaXMuaHR0cC5wb3N0PFQ+KHVybCwgYm9keURhdGEsIHsgaGVhZGVyczogdGhpcy5nZXRIZWFkZXJzKHRyYW5zYWN0aW9uKSwgcGFyYW1zOiBwYXJhbXMgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiBodHRwQ2FsbC5waXBlKFxyXG4gICAgICAgICAgY2F0Y2hFcnJvcigoZXJyLCBjYXVnaHQpOiBPYnNlcnZhYmxlPFQ+ID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuICFzdWNjZXNmdWxSZXN1bHRNYW5kYXRvcnkgPyB0aHJvd0Vycm9yKGVycikgOiB0aGlzLnJlZ2lzdGVyRXJyb3JBbmRSZXR1cm5FbXB0eU9ic2VydmFibGUoZXJyLCBteUd1aWQpO1xyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7IHRoaXMudHJ5RmluYWxpemVCeUd1aWQobXlHdWlkKTsgfSlcclxuICAgICAgICApO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcbiAgXHJcbiAgLyoqXHJcbiAgKiBFc2VjdXppb25lIGRpIHVuYSBERUxFVEUgSFRUUFxyXG4gICpcclxuICAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVVJMIHN1IGN1aSBlZmZldHR1YXJlIGxhIGNoaWFtYXRhXHJcbiAgKiBAcGFyYW0ge0h0dHBQYXJhbXN9IHBhcmFtcyBQYXJhbWV0cmkgZGVsbGEgY2hpYW1hdGFcclxuICAqIEBwYXJhbSB7c3RyaW5nfSB0cmFuc2FjdGlvbiBDb2RpY2UgdHJhbnNhemlvbmUgY29sbGVnYXRvIGEgcXVlc3RhIGNoaWFtYXRhLiBWaWVuZSBpbnNlcml0byBuZWxsJ0hlYWRlciBcIlgtVFgtSURcIiBlIGxhdG8gQmFja2VuZCBkb3Zyw6AgZXNzZXJlIGdlc3RpdG8gZGkgY29uc2VndWVuemFcclxuICAqIEBwYXJhbSB7Ym9vbGVhbn0gc3VjY2VzZnVsUmVzdWx0TWFuZGF0b3J5IEluZGljYSBjaGUgcXVlc3RhIGNoaWFtYXRhIGRldmUgYXNzb2x1dGFtZW50ZSBhbmRhcmUgYmVuZS4gSW4gY2FzbyBjb250cmFyaW8gdmllbmUgZmlzaWNhbWVudGUgZmF0dG8gaWwgdGhyb3cgY2hlIHB1w7IgZXNzZXJlIFxyXG4gICogcmFjY29sdG8gZGEgY2hpIHVzYSBsYSBsaWJyZXJpYSBuZWxsYSBwaXBlIFwib25FcnJvclwiIGRlbGwnT2JzZXJ2YWJsZSByZXN0aXR1aXRvIGVkIGVzc2VyZSBnZXN0aXRvIGluIG1hbmllcmEgbm9uIHN0YW5kYXJkXHJcbiAgKiBcclxuICAqIEByZXR1cm5zIHtPYnNlcnZhYmxlPFQ+fSBPYnNlcnZhYmxlIGNoZSBjb250aWVuZSBpbCByaXN1bHRhdG8gZGVsbGEgY2hpYW1hdGFcclxuICAqL1xyXG4gIHB1YmxpYyBkZWxldGU8VD4odXJsOiBzdHJpbmcsIHBhcmFtczogSHR0cFBhcmFtcyA9IG51bGwsIHRyYW5zYWN0aW9uID0gXCJcIiwgc3VjY2VzZnVsUmVzdWx0TWFuZGF0b3J5OiBib29sZWFuID0gdHJ1ZSk6IE9ic2VydmFibGU8VD4ge1xyXG5cclxuICAgIHJldHVybiBmcm9tKFt0aGlzLmRlZmF1bHRTdGFydENhbGwodXJsKV0pLnBpcGUoXHJcbiAgICAgIGNvbmNhdE1hcCgobXlHdWlkOiBzdHJpbmcpID0+IHtcclxuXHJcbiAgICAgICAgdmFyIGh0dHBDYWxsID0gdGhpcy5odHRwLmRlbGV0ZTxUPih1cmwsIHsgaGVhZGVyczogdGhpcy5nZXRIZWFkZXJzKHRyYW5zYWN0aW9uKSwgcGFyYW1zOiBwYXJhbXMgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiBodHRwQ2FsbC5waXBlKFxyXG4gICAgICAgICAgY2F0Y2hFcnJvcigoZXJyLCBjYXVnaHQpOiBPYnNlcnZhYmxlPFQ+ID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuICFzdWNjZXNmdWxSZXN1bHRNYW5kYXRvcnkgPyB0aHJvd0Vycm9yKGVycikgOiB0aGlzLnJlZ2lzdGVyRXJyb3JBbmRSZXR1cm5FbXB0eU9ic2VydmFibGUoZXJyLCBteUd1aWQpO1xyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7IHRoaXMudHJ5RmluYWxpemVCeUd1aWQobXlHdWlkKTsgfSlcclxuICAgICAgICApO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEVzZWN1emlvbmUgZGkgdW5hIFBVVCBIVFRQXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVybCBVUkwgc3UgY3VpIGVmZmV0dHVhcmUgbGEgY2hpYW1hdGFcclxuICAgKiBAcGFyYW0ge2FueX0gYm9keURhdGEgRFRPIHBlciBsYSBjaGlhbWF0YVxyXG4gICAqIEBwYXJhbSB7SHR0cFBhcmFtc30gcGFyYW1zIFBhcmFtZXRyaSBkZWxsYSBjaGlhbWF0YVxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0cmFuc2FjdGlvbiBDb2RpY2UgdHJhbnNhemlvbmUgY29sbGVnYXRvIGEgcXVlc3RhIGNoaWFtYXRhLiBWaWVuZSBpbnNlcml0byBuZWxsJ0hlYWRlciBcIlgtVFgtSURcIiBlIGxhdG8gQmFja2VuZCBkb3Zyw6AgZXNzZXJlIGdlc3RpdG8gZGkgY29uc2VndWVuemFcclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHN1Y2Nlc2Z1bFJlc3VsdE1hbmRhdG9yeSBJbmRpY2EgY2hlIHF1ZXN0YSBjaGlhbWF0YSBkZXZlIGFzc29sdXRhbWVudGUgYW5kYXJlIGJlbmUuIEluIGNhc28gY29udHJhcmlvIHZpZW5lIGZpc2ljYW1lbnRlIGZhdHRvIGlsIHRocm93IGNoZSBwdcOyIGVzc2VyZSBcclxuICAgKiByYWNjb2x0byBkYSBjaGkgdXNhIGxhIGxpYnJlcmlhIG5lbGxhIHBpcGUgXCJvbkVycm9yXCIgZGVsbCdPYnNlcnZhYmxlIHJlc3RpdHVpdG8gZWQgZXNzZXJlIGdlc3RpdG8gaW4gbWFuaWVyYSBub24gc3RhbmRhcmRcclxuICAgKiBcclxuICAgKiBAcmV0dXJucyB7T2JzZXJ2YWJsZTxUPn0gT2JzZXJ2YWJsZSBjaGUgY29udGllbmUgaWwgcmlzdWx0YXRvIGRlbGxhIGNoaWFtYXRhXHJcbiAgICovXHJcbiAgcHVibGljIHB1dDxUPih1cmw6IHN0cmluZywgYm9keURhdGE6IGFueSwgcGFyYW1zOiBIdHRwUGFyYW1zID0gbnVsbCwgdHJhbnNhY3Rpb24gPSBcIlwiLCBzdWNjZXNmdWxSZXN1bHRNYW5kYXRvcnk6IGJvb2xlYW4gPSB0cnVlKTogT2JzZXJ2YWJsZTxUPiB7XHJcbiAgICByZXR1cm4gZnJvbShbdGhpcy5kZWZhdWx0U3RhcnRDYWxsKHVybCldKS5waXBlKFxyXG4gICAgICBjb25jYXRNYXAoKG15R3VpZDogc3RyaW5nKSA9PiB7XHJcblxyXG4gICAgICAgIHZhciBodHRwQ2FsbCA9IHRoaXMuaHR0cC5wdXQ8VD4odXJsLCBib2R5RGF0YSwgeyBoZWFkZXJzOiB0aGlzLmdldEhlYWRlcnModHJhbnNhY3Rpb24pLCBwYXJhbXM6IHBhcmFtcyB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGh0dHBDYWxsLnBpcGUoXHJcbiAgICAgICAgICBjYXRjaEVycm9yKChlcnIsIGNhdWdodCk6IE9ic2VydmFibGU8VD4gPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gIXN1Y2Nlc2Z1bFJlc3VsdE1hbmRhdG9yeSA/IHRocm93RXJyb3IoZXJyKSA6IHRoaXMucmVnaXN0ZXJFcnJvckFuZFJldHVybkVtcHR5T2JzZXJ2YWJsZShlcnIsIG15R3VpZCk7XHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICAgIGZpbmFsaXplKCgpID0+IHsgdGhpcy50cnlGaW5hbGl6ZUJ5R3VpZChteUd1aWQpOyB9KVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRXNlY3V6aW9uZSBkaSB1bmEgUE9TVCBIVFRQXHJcbiAgICogXHJcbiAgICogQ2FzaXN0aWNhIHBhcnRpY29sYXJlIGluIGN1aSBiaXNvZ25hIGFuY2hlIGludmlhcmUgZGVpIEZpbGVcclxuICAgKiBcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsIFVSTCBzdSBjdWkgZWZmZXR0dWFyZSBsYSBjaGlhbWF0YVxyXG4gICAqIEBwYXJhbSB7YW55fSBib2R5RGF0YSBEVE8gcGVyIGxhIGNoaWFtYXRhXHJcbiAgICogQHBhcmFtIHtGaWxlW10gfCBGaWxlfSBmaWxlQXJyYXlPckZpbGUgU2luZ29sbyBmaWxlIG8gbGlzdGEgZGkgZmlsZSBkYSBpbnZpYXJlLiBJbCB0aXBvICoqRmlsZSoqIMOoIHF1ZWxsbyBuYXRpdm8gZGVsIEphdmFzY3JpcHRcclxuICAgKiBcclxuICAgKiBAcmV0dXJucyB7T2JzZXJ2YWJsZTxUPn0gT2JzZXJ2YWJsZSBjaGUgY29udGllbmUgaWwgcmlzdWx0YXRvIGRlbGxhIGNoaWFtYXRhXHJcbiAgICovXHJcbiAgcHVibGljIHBvc3R3aXRoRmlsZXM8VD4odXJsOiBzdHJpbmcsIGJvZHlEYXRhOiBhbnksIGZpbGVBcnJheU9yRmlsZTogRmlsZVtdIHwgRmlsZSk6IE9ic2VydmFibGU8VD4ge1xyXG4gICAgcmV0dXJuIGZyb20oW3RoaXMuZGVmYXVsdFN0YXJ0Q2FsbCh1cmwpXSkucGlwZShcclxuICAgICAgY29uY2F0TWFwKChteUd1aWQ6IHN0cmluZykgPT4ge1xyXG5cclxuICAgICAgICB2YXIgZm9ybURhdGEgPSB0aGlzLmdldEZpbGVzRm9ybURhdGEoZmlsZUFycmF5T3JGaWxlKTtcclxuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoXCJib2R5XCIsIEpTT04uc3RyaW5naWZ5KGJvZHlEYXRhKSk7XHJcblxyXG4gICAgICAgIHZhciBodHRwQ2FsbCA9IHRoaXMuaHR0cC5wb3N0PFQ+KHVybCwgZm9ybURhdGEsIHsgaGVhZGVyczogdGhpcy5nZXRIZWFkZXJzKG51bGwsIHRydWUsIG51bGwsIG51bGwpIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gaHR0cENhbGwucGlwZShcclxuICAgICAgICAgIGNhdGNoRXJyb3IoKGVyciwgY2F1Z2h0KTogT2JzZXJ2YWJsZTxUPiA9PiB7IHJldHVybiB0aGlzLnJlZ2lzdGVyRXJyb3JBbmRSZXR1cm5FbXB0eU9ic2VydmFibGUoZXJyLCBteUd1aWQpOyB9KSxcclxuICAgICAgICAgIGZpbmFsaXplKCgpID0+IHsgdGhpcy50cnlGaW5hbGl6ZUJ5R3VpZChteUd1aWQpOyB9KVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRXNlY3V6aW9uZSBkaSB1bmEgUE9TVCBIVFRQXHJcbiAgICogXHJcbiAgICogQ2FzaXN0aWNhIHBhcnRpY29sYXJlIGluIGN1aSB2aWVuZSByZXN0aXR1aXRvIHVuIGZpbGUgZ2VzdGl0byBjb21lIE9iamVjdFVSTCBpbCBjdWkgVVJMIHNpIHB1w7IgZ2VzdGlyZSBkYWwgcGFyYW1ldHJvIGRpIGNhbGxiYWNrICoqZ2V0RmlsZUNhbGxiYWNrKiouIFxyXG4gICAqIExhIGNoaWFtYXRhIG5vbiBoYSB1biB0aXBvIHJlc3RpdHVpdG8gaW4gcXVhbnRvIGlsIHJpc3VsdGF0byBkZXYnZXNzZXJlIGdlc3RpdG8gYXR0cmF2ZXJzbyBsYSBjYWxsYmFjayAqKmdldEZpbGVDYWxsYmFjayoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVybCBVUkwgc3UgY3VpIGVmZmV0dHVhcmUgbGEgY2hpYW1hdGFcclxuICAgKiBAcGFyYW0ge0t9IGJvZHlEYXRhIERUTyBwZXIgbGEgY2hpYW1hdGFcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgTm9tZSBkZWwgZmlsZSBjaGUgc2kgc3RhIHJpY2hpZWRlbmRvLCByaW1hbmUgbGF0byBGcm9udGVuZCBlIHNlcnZlIHBlciBhc3NlZ25hcmUgYXJiaXRyYXJpYW1lbnRlIHVuIG5vbWUgYWwgZmlsZSByZXN0aXR1aXRvLCBzZSB2dW90byB2aWVuZSB1dGlsaXp6YXRhIGxhIENvbnRlbnQtRGlzcG9zaXRpb24gZGVsbGEgcmlzcG9zdGFcclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBnZXRGaWxlQ2FsbGJhY2sgQ2FsbGJhY2sgYSBkdWUgcGFyYW1ldHJpICh1cmw6IHN0cmluZywgZmlsZW5hbWU6IHN0cmluZykgcGVyIGdlc3RpcmUgaWwgcmlzdWx0YXRvIGRlbCBmaWxlIHJpY2hpZXN0by4gKipVdGlsaXp6YXJlIFV0aWxpdHlTZXJ2aWNlLmZpbGVEb3dubG9hZCoqIGRpIEBlc2ZhZW56YS9leHRlbnNpb25zXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gYWZ0ZXJHZXRGaWxlIENhbGxiYWNrIGRhIGNoaWFtYXJlIGRvcG8gYXZlciBnZXN0aXRvIGxhIHJpc3Bvc3RhIGRlbCAqKmdldEZpbGVDYWxsYmFjayoqLCBpbiBjYXNvICoqaGFuZGxlRXJyb3IqKiBmb3NzZSAqKmZhbHNlKiogdmVycsOgIHJpY2hpYW1hdG8gYW5jaGUgaW4gY2FzbyBkaSBlcnJvcmVcclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGhhbmRsZUVycm9yIEluZGljYSBzZSBkaSBkZWZhdWx0IGdsaSBlcnJvcmkgZGV2b25vIGVzc2VyZSBnZXN0aXRpIGRhbGxhIGxpYnJlcmlhIG8gc2UgZGV2b25vIGVzc2VyZSBpZ25vcmF0aVxyXG4gICAqL1xyXG4gIHB1YmxpYyBwb3N0R2V0RmlsZTxLPih1cmw6IHN0cmluZywgYm9keURhdGE6IEssIGZpbGVuYW1lOiBzdHJpbmcsIGdldEZpbGVDYWxsYmFjazogKHVybDogc3RyaW5nLCBmaWxlbmFtZTogc3RyaW5nKSA9PiBhbnksIGFmdGVyR2V0RmlsZTogKCkgPT4gYW55ID0gbnVsbCwgaGFuZGxlRXJyb3I6IGJvb2xlYW4gPSB0cnVlLCBwYXJzPzogSHR0cFBhcmFtcyk6IHZvaWQge1xyXG4gICAgbGV0IG15R3VpZCA9IHRoaXMuZGVmYXVsdFN0YXJ0Q2FsbCh1cmwpO1xyXG5cclxuICAgIHRoaXMuaHR0cC5wb3N0KHVybCwgYm9keURhdGEsIHsgcGFyYW1zOiBwYXJzLCBoZWFkZXJzOiB0aGlzLmdldEhlYWRlcnMoKSwgb2JzZXJ2ZTogJ3Jlc3BvbnNlJywgcmVzcG9uc2VUeXBlOiBcImJsb2JcIiB9KS5waXBlKFxyXG4gICAgICBjYXRjaEVycm9yKChlcnIsIGNhdWdodCk6IE9ic2VydmFibGU8c3RyaW5nPiA9PiB7XHJcbiAgICAgICAgaWYgKGFmdGVyR2V0RmlsZSAmJiAhaGFuZGxlRXJyb3IpIGFmdGVyR2V0RmlsZSgpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlZ2lzdGVyRXJyb3JBbmRSZXR1cm5FbXB0eU9ic2VydmFibGUoZXJyLCBteUd1aWQsIGhhbmRsZUVycm9yKTtcclxuICAgICAgfSksXHJcbiAgICAgIGZpbmFsaXplKCgpID0+IHsgdGhpcy50cnlGaW5hbGl6ZUJ5R3VpZChteUd1aWQpOyB9KVxyXG4gICAgKS5zdWJzY3JpYmUoKHJlc3BvbnNlOiBIdHRwUmVzcG9uc2U8QmxvYj4pID0+IHtcclxuICAgICAgbGV0IHJldFVybCA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKHJlc3BvbnNlLmJvZHkpO1xyXG4gICAgICBsZXQgZm4gPSByZXNwb25zZS5oZWFkZXJzLmdldCgnY29udGVudC1kaXNwb3NpdGlvbicpPy5zcGxpdCgnOycpWzFdPy5zcGxpdCgnZmlsZW5hbWUnKVsxXT8uc3BsaXQoJz0nKVsxXT8udHJpbSgpLnJlcGxhY2UoL1xcXCIvZywgJycpO1xyXG5cclxuICAgICAgZ2V0RmlsZUNhbGxiYWNrKHJldFVybCwgZmlsZW5hbWUgfHwgZm4pO1xyXG4gICAgICBpZiAoYWZ0ZXJHZXRGaWxlKSBhZnRlckdldEZpbGUoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRXNlY3V6aW9uZSBkaSB1bmEgR0VUIEhUVFBcclxuICAgKiBcclxuICAgKiBDYXNpc3RpY2EgcGFydGljb2xhcmUgaW4gY3VpIHZpZW5lIHJlc3RpdHVpdG8gdW4gZmlsZSBnZXN0aXRvIGNvbWUgT2JqZWN0VVJMIGlsIGN1aSBVUkwgc2kgcHXDsiBnZXN0aXJlIGRhbCBwYXJhbWV0cm8gZGkgY2FsbGJhY2sgKipnZXRGaWxlQ2FsbGJhY2sqKi4gXHJcbiAgICogTGEgY2hpYW1hdGEgbm9uIGhhIHVuIHRpcG8gcmVzdGl0dWl0byBpbiBxdWFudG8gaWwgcmlzdWx0YXRvIGRldidlc3NlcmUgZ2VzdGl0byBhdHRyYXZlcnNvIGxhIGNhbGxiYWNrICoqZ2V0RmlsZUNhbGxiYWNrKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsIFVSTCBzdSBjdWkgZWZmZXR0dWFyZSBsYSBjaGlhbWF0YVxyXG4gICAqIEBwYXJhbSB7SHR0cFBhcmFtc30gcGFyYW1zIFBhcmFtZXRyaSBkZWxsYSBjaGlhbWF0YVxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZSBOb21lIGRlbCBmaWxlIGNoZSBzaSBzdGEgcmljaGllZGVuZG8sIHJpbWFuZSBsYXRvIEZyb250ZW5kIGUgc2VydmUgcGVyIGFzc2VnbmFyZSBhcmJpdHJhcmlhbWVudGUgdW4gbm9tZSBhbCBmaWxlIHJlc3RpdHVpdG8sIHNlIHZ1b3RvIHZpZW5lIHV0aWxpenphdGEgbGEgQ29udGVudC1EaXNwb3NpdGlvbiBkZWxsYSByaXNwb3N0YVxyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGdldEZpbGVDYWxsYmFjayBDYWxsYmFjayBhIGR1ZSBwYXJhbWV0cmkgKHVybDogc3RyaW5nLCBmaWxlbmFtZTogc3RyaW5nKSBwZXIgZ2VzdGlyZSBpbCByaXN1bHRhdG8gZGVsIGZpbGUgcmljaGllc3RvLiAqKlV0aWxpenphcmUgVXRpbGl0eVNlcnZpY2UuZmlsZURvd25sb2FkKiogZGkgQGVzZmFlbnphL2V4dGVuc2lvbnNcclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBhZnRlckdldEZpbGUgQ2FsbGJhY2sgZGEgY2hpYW1hcmUgZG9wbyBhdmVyIGdlc3RpdG8gbGEgcmlzcG9zdGEgZGVsICoqZ2V0RmlsZUNhbGxiYWNrKiosIGluIGNhc28gKipoYW5kbGVFcnJvcioqIGZvc3NlICoqZmFsc2UqKiB2ZXJyw6AgcmljaGlhbWF0byBhbmNoZSBpbiBjYXNvIGRpIGVycm9yZVxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaGFuZGxlRXJyb3IgSW5kaWNhIHNlIGRpIGRlZmF1bHQgZ2xpIGVycm9yaSBkZXZvbm8gZXNzZXJlIGdlc3RpdGkgZGFsbGEgbGlicmVyaWEgbyBzZSBkZXZvbm8gZXNzZXJlIGlnbm9yYXRpXHJcbiAgICovXHJcbiAgcHVibGljIGdldEZpbGUodXJsOiBzdHJpbmcsIHBhcmFtczogSHR0cFBhcmFtcyA9IG51bGwsIGZpbGVuYW1lOiBzdHJpbmcsIGdldEZpbGVDYWxsYmFjazogKHVybDogc3RyaW5nLCBmaWxlbmFtZTogc3RyaW5nKSA9PiBhbnksIGFmdGVyR2V0RmlsZTogKCkgPT4gYW55ID0gbnVsbCwgaGFuZGxlRXJyb3I6IGJvb2xlYW4gPSB0cnVlKTogdm9pZCB7XHJcbiAgICBsZXQgbXlHdWlkID0gdGhpcy5kZWZhdWx0U3RhcnRDYWxsKHVybCk7XHJcblxyXG4gICAgdGhpcy5odHRwLmdldCh1cmwsIHsgcGFyYW1zOiBwYXJhbXMsIGhlYWRlcnM6IHRoaXMuZ2V0SGVhZGVycygpLCBvYnNlcnZlOiAncmVzcG9uc2UnLCByZXNwb25zZVR5cGU6IFwiYmxvYlwiIH0pLnBpcGUoXHJcbiAgICAgIGNhdGNoRXJyb3IoKGVyciwgY2F1Z2h0KTogT2JzZXJ2YWJsZTxzdHJpbmc+ID0+IHtcclxuICAgICAgICBpZiAoYWZ0ZXJHZXRGaWxlICYmICFoYW5kbGVFcnJvcikgYWZ0ZXJHZXRGaWxlKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVnaXN0ZXJFcnJvckFuZFJldHVybkVtcHR5T2JzZXJ2YWJsZShlcnIsIG15R3VpZCwgaGFuZGxlRXJyb3IpO1xyXG4gICAgICB9KSxcclxuICAgICAgZmluYWxpemUoKCkgPT4geyB0aGlzLnRyeUZpbmFsaXplQnlHdWlkKG15R3VpZCk7IH0pXHJcbiAgICApLnN1YnNjcmliZSgocmVzcG9uc2U6IEh0dHBSZXNwb25zZTxCbG9iPikgPT4ge1xyXG4gICAgICBsZXQgcmV0VXJsID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwocmVzcG9uc2UuYm9keSk7XHJcbiAgICAgIGxldCBmbiA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdjb250ZW50LWRpc3Bvc2l0aW9uJyk/LnNwbGl0KCc7JylbMV0/LnNwbGl0KCdmaWxlbmFtZScpWzFdPy5zcGxpdCgnPScpWzFdPy50cmltKCkucmVwbGFjZSgvXFxcIi9nLCAnJyk7XHJcblxyXG4gICAgICBnZXRGaWxlQ2FsbGJhY2socmV0VXJsLCBmaWxlbmFtZSB8fCBmbik7XHJcbiAgICAgIGlmIChhZnRlckdldEZpbGUpIGFmdGVyR2V0RmlsZSgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEb3dubG9hZCBuYXRpdm8gZGkgdW4gZmlsZS4gSW50ZXJuYW1lbnRlIHV0aWxpenphIGlsIHBhdHRlcm4gKip3aW5kb3cubG9jYXRpb24uaHJlZiA9IFwiLi4uXCIqKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVVJMIHN1IGN1aSBlZmZldHR1YXJlIGxhIGNoaWFtYXRhXHJcbiAgICogQHBhcmFtIHtIdHRwUGFyYW1zfSBwYXJhbXMgUGFyYW1ldHJpIGRlbGxhIGNoaWFtYXRhXHJcbiAgICovXHJcbiAgcHVibGljIGdldEZpbGVOYXRpdmUodXJsOiBzdHJpbmcsIHBhcmFtczogSHR0cFBhcmFtcyA9IG51bGwpOiB2b2lkIHtcclxuXHJcbiAgICAvLyBFbmNvZG8gdHV0dGkgaSBwYXJhbWV0cmkgcGVyIGV2aXRhcmUgY2FzaSBwYXJ0aWNvbGFyaVxyXG4gICAgbGV0IHBhcktleXMgPSBwYXJhbXMua2V5cygpO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJLZXlzLmxlbmd0aDsgaSsrKVxyXG4gICAgICBwYXJhbXMuc2V0KHBhcktleXNbaV0sIGVuY29kZVVSSUNvbXBvbmVudChwYXJhbXMuZ2V0KHBhcktleXNbaV0pKSk7XHJcblxyXG4gICAgbGV0IGZpbmFsVXJsID0gdXJsICsgKHBhcmFtcyA/IFwiP1wiICsgcGFyYW1zLnRvU3RyaW5nKCkgOiBcIlwiKTtcclxuICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gZmluYWxVcmw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFc2VjdXppb25lIGRpIHVuYSBHRVQgZGkgdW4gZmlsZSBjaGUgZW1ldHRlIGkgdmFyaSBldmVudGkgZGkgcHJvZ3Jlc3NvIGRpIGRvd25sb2FkLlxyXG4gICAqIFV0aWxpenphcmxhIHBlciBvdmVycmlkYXJlIGxhIGRpYWxvZyBuYXRpdmEgZGkgcHJvZ3Jlc3MgZGVsIGJyb3dzZXIgZSBzb3N0aXR1aXJsYSBjb24gcXVhbGNvc2EgdGlwbyBxdWVsbG8gY2hlIGZhIE1FR0EuXHJcbiAgICogXHJcbiAgICogSW4gY2FzbyBzaSB2b2dsaWEgb3R0ZW5lcmUgaWwgcmlzdWx0YXRvIG5hdGl2byBkZWwgYnJvd3NlciBkZWwgZG93bmxvYWQgdXRpbGl6emFyZSAqKmdldEZpbGVOYXRpdmUodXJsLCBwYXJzKSoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVybCBVUkwgc3UgY3VpIGVmZmV0dHVhcmUgbGEgY2hpYW1hdGFcclxuICAgKiBAcGFyYW0ge0h0dHBQYXJhbXN9IHBhcmFtcyBQYXJhbWV0cmkgZGVsbGEgY2hpYW1hdGFcclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBnZXRGaWxlQ2FsbGJhY2sgQ2FsbGJhY2sgYSBkdWUgcGFyYW1ldHJpICh1cmw6IHN0cmluZywgZmlsZW5hbWU6IHN0cmluZykgcGVyIGdlc3RpcmUgaWwgcmlzdWx0YXRvIGRlbCBmaWxlIHJpY2hpZXN0by4gKipVdGlsaXp6YXJlIFV0aWxpdHlTZXJ2aWNlLmZpbGVEb3dubG9hZCoqIGRpIEBlc2ZhZW56YS9leHRlbnNpb25zXHJcbiAgICogXHJcbiAgICogQHJldHVybnMge09ic2VydmFibGU8RG93bmxvYWQ+fSBPYnNlcnZhYmxlIGRlaSB2YXJpIHN0ZXAgZGkgcHJvZ3Jlc3NvIGRlbCBkb3dubG9hZFxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXRGaWxlV2l0aFByb2dyZXNzKHVybDogc3RyaW5nLCBwYXJhbXM6IEh0dHBQYXJhbXMgPSBudWxsLCBnZXRGaWxlQ2FsbGJhY2s6ICh1cmw6IHN0cmluZywgZmlsZW5hbWU6IHN0cmluZykgPT4gYW55KTogT2JzZXJ2YWJsZTxEb3dubG9hZD4ge1xyXG4gICAgbGV0IG15R3VpZCA9IHRoaXMuZGVmYXVsdFN0YXJ0Q2FsbCh1cmwpO1xyXG5cclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHVybCwgeyByZXNwb25zZVR5cGU6ICdibG9iJywgaGVhZGVyczogdGhpcy5nZXRIZWFkZXJzKCksIHBhcmFtczogcGFyYW1zLCBvYnNlcnZlOiAnZXZlbnRzJywgcmVwb3J0UHJvZ3Jlc3M6IHRydWUgfSlcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgc2NhbigocHJldmlvdXM6IERvd25sb2FkLCBldmVudDogSHR0cEV2ZW50PEJsb2I+KTogRG93bmxvYWQgPT4ge1xyXG5cclxuICAgICAgICAgIGlmICh0aGlzLmlzSHR0cFByb2dyZXNzRXZlbnQoZXZlbnQpKSB7XHJcbiAgICAgICAgICAgIGxldCBwcm9ncmVzcyA9IGV2ZW50LnRvdGFsID8gKGV2ZW50LmxvYWRlZCA+IGV2ZW50LnRvdGFsID8gMTAwIDogTWF0aC5yb3VuZCgoMTAwICogZXZlbnQubG9hZGVkKSAvIGV2ZW50LnRvdGFsKSkgOiBwcmV2aW91cy5wcm9ncmVzcztcclxuICAgICAgICAgICAgcmV0dXJuIHsgcHJvZ3Jlc3M6IHByb2dyZXNzLCBzdGF0ZTogJ0lOX1BST0dSRVNTJywgY29udGVudDogbnVsbCB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuaXNIdHRwUmVzcG9uc2UoZXZlbnQpKSB7XHJcbiAgICAgICAgICAgIGlmIChldmVudC5ib2R5KSB7XHJcbiAgICAgICAgICAgICAgbGV0IGNkaXNwID0gZXZlbnQuaGVhZGVycy5nZXQoJ2NvbnRlbnQtZGlzcG9zaXRpb24nKTtcclxuICAgICAgICAgICAgICBsZXQgY2Rpc3BGaWxlbmFtZSA9IGNkaXNwLnNwbGl0KCc7JylbMV0uc3BsaXQoJ2ZpbGVuYW1lJylbMV0uc3BsaXQoJz0nKVsxXS50cmltKCkucmVwbGFjZSgvXFxcIi9nLCAnJyk7XHJcbiAgICAgICAgICAgICAgbGV0IHJldFVybCA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGV2ZW50LmJvZHkpO1xyXG4gICAgICAgICAgICAgIGdldEZpbGVDYWxsYmFjayhyZXRVcmwsIGNkaXNwRmlsZW5hbWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB7IHByb2dyZXNzOiAxMDAsIHN0YXRlOiAnRE9ORScsIGNvbnRlbnQ6IGV2ZW50LmJvZHkgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHJldHVybiBwcmV2aW91cztcclxuICAgICAgICB9LCB7IHN0YXRlOiAnUEVORElORycsIHByb2dyZXNzOiAwLCBjb250ZW50OiBudWxsIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVyciwgXyk6IE9ic2VydmFibGU8RG93bmxvYWQ+ID0+IHsgcmV0dXJuIHRoaXMucmVnaXN0ZXJFcnJvckFuZFJldHVybkVtcHR5T2JzZXJ2YWJsZShlcnIsIG15R3VpZCkgfSksXHJcbiAgICAgICAgZmluYWxpemUoKCkgPT4geyB0aGlzLnRyeUZpbmFsaXplQnlHdWlkKG15R3VpZCk7IH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSaWNvbm9zY2Ugc2UgbCdldmVudG8gSFRUUCDDqCBkaSB0aXBvICoqSHR0cFJlc3BvbnNlKiogZSwgc2Ugc8OsLCBsbyBjYXN0YSBhbCB0aXBvIGNvcnJldHRvIHBlciBlc3NlcmUgdXRpbGl6emF0byBjb3JyZXR0YW1lbnRlIG5lbCBibG9jY28gZGkgY29kaWNlIHN1Y2Nlc3Npdm9cclxuICAgKi9cclxuICAgcHJpdmF0ZSBpc0h0dHBSZXNwb25zZTxUPihldmVudDogSHR0cEV2ZW50PFQ+KTogZXZlbnQgaXMgSHR0cFJlc3BvbnNlPFQ+IHtcclxuICAgIHJldHVybiBldmVudC50eXBlID09PSBIdHRwRXZlbnRUeXBlLlJlc3BvbnNlXHJcbiAgfVxyXG4gIFxyXG4gIC8qKlxyXG4gICAqIFJpY29ub3NjZSBzZSBsJ2V2ZW50byBIVFRQIMOoIGRpIHRpcG8gKipIdHRwUHJvZ3Jlc3NFdmVudCoqIGUsIHNlIHPDrCwgbG8gY2FzdGEgYWwgdGlwbyBjb3JyZXR0byBwZXIgZXNzZXJlIHV0aWxpenphdG8gY29ycmV0dGFtZW50ZSBuZWwgYmxvY2NvIGRpIGNvZGljZSBzdWNjZXNzaXZvXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBpc0h0dHBQcm9ncmVzc0V2ZW50KGV2ZW50OiBIdHRwRXZlbnQ8dW5rbm93bj4pOiBldmVudCBpcyBIdHRwUHJvZ3Jlc3NFdmVudCB7XHJcbiAgICByZXR1cm4gZXZlbnQudHlwZSA9PT0gSHR0cEV2ZW50VHlwZS5Eb3dubG9hZFByb2dyZXNzIHx8IGV2ZW50LnR5cGUgPT09IEh0dHBFdmVudFR5cGUuVXBsb2FkUHJvZ3Jlc3NcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdlc3Rpb25lIGRlbGwnaW5pemlvIGRpIHVuYSBjaGlhbWF0YSBhZCB1biBjZXJ0byBVUkwsIHZpZW5lIGdlbmVyYXRvIHVuIEdVSUQgZGEgYXNzZWduYXJjaSwgY29udHJvbGxhdGEgbGEgc2NhZGVuemEgZGVsbGEgY2FjaGUsIFxyXG4gICAqIGUgZXZlbnR1YWxtZW50ZSBsb2dnYXRvIGlsIGZhdHRvIGNoZSBzdGEgcGVyIGVzc2VyZSBlZmZldHR1YXRhIHVuYSBjaGlhbWF0YSBIVFRQXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVybCBVcmwgYSBjdWkgZWZmZXR0dWFyZSBsYSBjaGlhbWF0YVxyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IEdVSUQgYXNzZWduYXRvIGFsbGEgY2hpYW1hdGFcclxuICAgKi9cclxuICBwcml2YXRlIGRlZmF1bHRTdGFydENhbGwodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgbGV0IG15R3VpZCA9IHRoaXMuZ2V0R1VJRCgpO1xyXG4gICAgdGhpcy5jaGVja0NhY2hlSW52YWxpZGF0aW9uKHVybCk7XHJcbiAgICB0aGlzLmNhbGxTdGF0dXNbbXlHdWlkXSA9IHsgdXJsOiB1cmwsIHN1Y2Nlc3M6IHRydWUgfTtcclxuICAgIHRoaXMubG9nKHRoaXMubG9jKFwiU3RhcnRpbmcgY2FsbFwiKSArIFwiIFwiICsgbXlHdWlkICsgXCIgXCIgKyB0aGlzLmxvYyhcImF0IFVSTFwiKSArIFwiOiBcIiArIHVybCk7XHJcbiAgICByZXR1cm4gbXlHdWlkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGF0byB1biB1cmwgdmVuZ29ubyBjb250cm9sbGF0ZSBsZSBpbmZvcm1hemlvbmkgc3UgdHV0dGkgZ2xpIHVybCBkYSBpbnZhbGlkYXJlIGNvbGxlZ2F0aSBhbGwndXJsIGNoaWFtYXRvIGUsIHNlIHByZXNlbnRpIGluIGNhY2hlLCBpbnZhbGlkYXRpXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVybCBVUkwgcGVyIGN1aSBjb250cm9sbGFyZSBzZSBjaSBzb25vIGNoaWFtYXRlIGluIGNhY2hlIGRhIGludmFsaWRhcmVcclxuICAgKi9cclxuICBwcml2YXRlIGNoZWNrQ2FjaGVJbnZhbGlkYXRpb24odXJsOiBzdHJpbmcpIHtcclxuICAgIGxldCBjYWNoZSA9IHRoaXMubG9jYWxTdG9yYWdlLmdldExvY2FsSXRlbTxhbnk+KHRoaXMubG9jYWxTdG9yYWdlSHR0cENhY2hlS2V5KTtcclxuICAgIGxldCB0bXAgPSAvI2NhY2hlKDo/LShcXGQrKSkvZ2kuZXhlYyh1cmwpO1xyXG4gICAgbGV0IGNhY2hlVGltZSA9IHRtcCA/IHRtcFsyXSA6IG51bGw7XHJcbiAgICBsZXQgbm9ybWFsaXplZFVybCA9IHVybC5yZXBsYWNlKFwiI2NhY2hlXCIgKyAoY2FjaGVUaW1lID8gXCItXCIgKyBjYWNoZVRpbWUgOiBcIlwiKSwgXCJcIikucmVwbGFjZSh0aGlzLkJBQ0tFTkRfVVJMLCBcIlwiKTtcclxuXHJcbiAgICBpZiAoIWNhY2hlIHx8ICF0aGlzLkhUVFBfSU5WQUxJREFUSU9OIHx8ICF0aGlzLkhUVFBfSU5WQUxJREFUSU9OW25vcm1hbGl6ZWRVcmxdKVxyXG4gICAgICByZXR1cm47XHJcblxyXG4gICAgbGV0IGFwaXNUb0ludmFsaWRhdGU6IHN0cmluZ1tdID0gdGhpcy5IVFRQX0lOVkFMSURBVElPTltub3JtYWxpemVkVXJsXTtcclxuICAgIGlmICghYXBpc1RvSW52YWxpZGF0ZSB8fCBhcGlzVG9JbnZhbGlkYXRlLmxlbmd0aCA9PSAwKVxyXG4gICAgICByZXR1cm47XHJcblxyXG4gICAgbGV0IGtleXNUb1JlbW92ZTogc3RyaW5nW10gPSBbXTtcclxuICAgIGFwaXNUb0ludmFsaWRhdGUuZm9yRWFjaChhcGkgPT4ge1xyXG4gICAgICBsZXQgY2FjaGVLZXkgPSB0aGlzLm1ha2VDYWNoZUtleShhcGksIG51bGwpO1xyXG4gICAgICBmb3IgKGxldCBpdGVtIGluIGNhY2hlKVxyXG4gICAgICAgIGlmIChpdGVtLmluZGV4T2YoY2FjaGVLZXkpICE9IC0xKVxyXG4gICAgICAgICAga2V5c1RvUmVtb3ZlLnB1c2goaXRlbSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXNUb1JlbW92ZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgayA9IGtleXNUb1JlbW92ZVtpXTtcclxuICAgICAgdGhpcy5sb2codGhpcy5sb2MoXCJJbnZsYWxpZGF0aW5nIGNhY2hlIGVsZW1lbnRcIikgKyBcIiBcIiArIGspO1xyXG4gICAgICBkZWxldGUgY2FjaGVba107XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5sb2NhbFN0b3JhZ2Uuc2V0TG9jYWxJdGVtKHRoaXMubG9jYWxTdG9yYWdlSHR0cENhY2hlS2V5LCBjYWNoZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGaW5hbGl6emF6aW9uZSBkaSB1bmEgY2hpYW1hdGFcclxuICAgKiBcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gZ3VpZCBHVUlEIGNvbGxlZ2F0byBhbGxhIGNoaWFtYXRhIGFwcGVuYSB0ZXJtaW5hdGFcclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHBlcnNpc3RDYWNoZUlmSWRsZSBFZmZldHR1YSBpbCBwZXJzaXN0IGRlbGxhIGNhY2hlIEhUVFAgc29sbyBzZSBub24gY2kgc29ubyBhbHRyZSBjaGlhbWF0ZSBpbiBjb3JzbywgcGVyIGV2aXRhcmVcclxuICAgKiBjaGUgbWkgY2FtYmkgc290dG8gbCdvZ2dldHRvIGRpIGNhY2hlIG1lbnRyZSBzdG8gc2FsdmFuZG8gbGUgaW5mb3JtYXppb25pXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBhc3luYyB0cnlGaW5hbGl6ZUJ5R3VpZChndWlkOiBzdHJpbmcsIGNhY2hlSW5mb3M/OiBDYWNoZUluZm9zKSB7XHJcbiAgICB0aGlzLmxvZyh0aGlzLmxvYyhcIkZpbmFsaXppbmcgY2FsbFwiKSArIFwiIFwiICsgZ3VpZCArIFwiIFwiICsgdGhpcy5sb2MoXCJ3aXRoIHN0YXR1c1wiKSArIFwiOiBcIiArICghdGhpcy5jYWxsU3RhdHVzW2d1aWRdID8gJ1Vua25vd24nIDogdGhpcy5jYWxsU3RhdHVzW2d1aWRdLnN1Y2Nlc3MgPyB0aGlzLmxvYygnU3VjY2VzcycpIDogdGhpcy5sb2MoJ0ZhaWx1cmUnKSkpO1xyXG5cclxuICAgIC8vIFRPRE86IFBlcmRlcmUgMy00IG9yZSBwZXIgY2FwaXJlIHBlcmNow6kgb2duaSB0YW50byBhcnJpdmEgbnVsbCBpbiBjYXNpIHBlc2FudGkgZGkgT2JzZXJ2YWJsZSBzcGFtbWF0aSBhIHJhbmRvbVxyXG4gICAgaWYgKHRoaXMuY2FsbFN0YXR1c1tndWlkXSkge1xyXG4gICAgICAvLyBBbGxhIHByaW1hIGNoaWFtYXRhIGJ1b25hLCBzaWduaWZpY2EgY2hlIGFsbWVubyBpbCBsb2dpbiBjZSBsJ2hvLiBQb3NzbyBtZXR0ZXJtaSBpbiBtb2RhbGl0w6AgcmVkaXJlY3RJblByb2dyZXNzIGZhbHNlXHJcbiAgICAgIC8vIGUgcmlpbml6aWFyZSBhIHZhbHV0YXJlIGVycm9yaSBkaSBqYXZhc2hpdFxyXG4gICAgICBpZiAodGhpcy5jYWxsU3RhdHVzW2d1aWRdLnN1Y2Nlc3MgJiYgdGhpcy5FeHRlbnNpb25zSW1wbC5yZWFkUmVkaXJlY3Rpb25TdGF0dXMoKSlcclxuICAgICAgICB0aGlzLkV4dGVuc2lvbnNJbXBsLndyaXRlUmVkaXJlY3Rpb25TdGF0dXMoZmFsc2UpO1xyXG5cclxuICAgICAgLy8gQWdnaXVuZ28gbGEgY2hpYW1hdGEgYWxsYSBsaXN0YSBkZWxsZSB1bHRpbWUgMyBjb21wbGV0YXRlXHJcbiAgICAgIHRoaXMuTGFzdFRocmVlQ29tcGxldGVkQ2FsbHMudW5zaGlmdCh0aGlzLmNhbGxTdGF0dXNbZ3VpZF0udXJsKVxyXG4gICAgICBpZiAodGhpcy5MYXN0VGhyZWVDb21wbGV0ZWRDYWxscy5sZW5ndGggPiAzKVxyXG4gICAgICAgIHRoaXMuTGFzdFRocmVlQ29tcGxldGVkQ2FsbHMucG9wKCk7XHJcblxyXG4gICAgICAvLyBJbiBvZ25pIGNhc28gcXVlc3RhIHBvc3NvIHJpbXVvdmVybGFcclxuICAgICAgZGVsZXRlIHRoaXMuY2FsbFN0YXR1c1tndWlkXTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBTZSB2ZW5nbyBkYSB1bmEgY2hpYW1hdGEgY2hlIGhhIGFnZ2lvcm5hdG8gbGEgY2FjaGUgYSB0aW1lciBvIGdsb2JhbGUgbWFyY28gaWwgZmF0dG8gY2hlIHF1ZWxsYSBjYWNoZSBkZXYnZXNzZXJlIGFnZ2lvcm5hdGFcclxuICAgIGlmIChjYWNoZUluZm9zICYmIGNhY2hlSW5mb3MuY2FjaGUpIHtcclxuICAgICAgdGhpcy5QZXJzaXN0VGltZWRDYWNoZUFTQVAgPSB0aGlzLlBlcnNpc3RUaW1lZENhY2hlQVNBUCB8fCAhIWNhY2hlSW5mb3MuY2FjaGVUaW1lO1xyXG4gICAgICB0aGlzLlBlcnNpc3RVbnRpbWVkQ2FjaGVBU0FQID0gdGhpcy5QZXJzaXN0VGltZWRDYWNoZUFTQVAgfHwgIWNhY2hlSW5mb3MuY2FjaGVUaW1lO1xyXG4gICAgICB0aGlzLmxvZyh0aGlzLmxvYyhcIk1hcmtpbmcgY2FjaGUgdG8gYmUgcGVyc2lzdGVkIGFzIHNvb24gYXMgcG9zc2libGVcIikpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFNlIHVuYSBkZWxsZSBkdWUgY2FjaGUgZGV2b25vIGVzc2VyZSBhZ2dpb3JuYXRlIGUgbm9uIGhvIG5lc3N1bmEgY2hpYW1hdGEgaW4gY29yc28gZWZmZXR0dW8gbCdhZ2dpb3JuYW1lbnRvIGluIGJhc2UgYSBxdWFsZSBkZWxsZSBkdWUgdmEgYWdnaW9ybmF0YVxyXG4gICAgLy8gQWxsYSBmaW5lIGRpIHR1dHRvIG1hcmNvIGNvbWUgZmF0dG9cclxuICAgIGlmICgodGhpcy5QZXJzaXN0VGltZWRDYWNoZUFTQVAgfHwgdGhpcy5QZXJzaXN0VW50aW1lZENhY2hlQVNBUCkgJiYgT2JqZWN0LmtleXModGhpcy5jYWxsU3RhdHVzKS5sZW5ndGggPT0gMCkge1xyXG5cclxuICAgICAgdmFyIHRvQ2FsbCA9IFtdO1xyXG4gICAgICBsZXQgdG1wS2V5ID0gXCJcIjtcclxuICAgICAgaWYgKHRoaXMuUGVyc2lzdFRpbWVkQ2FjaGVBU0FQKSB7XHJcbiAgICAgICAgdG1wS2V5ID0gdGhpcy5sb2NhbFN0b3JhZ2VIdHRwVGltZWRDYWNoZUtleTtcclxuICAgICAgICB0b0NhbGwucHVzaCh0aGlzLmxvY2FsU3RvcmFnZS5zZXRJdGVtKHRtcEtleSwgdGhpcy5sb2NhbFN0b3JhZ2UuZ2V0TG9jYWxJdGVtKHRtcEtleSkpKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMuUGVyc2lzdFVudGltZWRDYWNoZUFTQVApIHtcclxuICAgICAgICB0bXBLZXkgPSB0aGlzLmxvY2FsU3RvcmFnZUh0dHBDYWNoZUtleTtcclxuICAgICAgICB0b0NhbGwucHVzaCh0aGlzLmxvY2FsU3RvcmFnZS5zZXRJdGVtKHRtcEtleSwgdGhpcy5sb2NhbFN0b3JhZ2UuZ2V0TG9jYWxJdGVtKHRtcEtleSkpKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5sb2codGhpcy5sb2MoXCJObyBtb3JlIEhUVFAgY2FsbHMgdG8gYmUgZXhlY3V0ZWQsIGVudGVyaW5nIGlkbGUgc3RhdGUgYW5kIHBlcnNpc3RpbmcgbW9kaWZpZWQgY2FjaGVzXCIpICsgXCIuLi5cIik7XHJcbiAgICAgIHZhciByZXQgPSBhd2FpdCBmb3JrSm9pbih0b0NhbGwpLnRvUHJvbWlzZSgpO1xyXG4gICAgICBpZiAocmV0KVxyXG4gICAgICAgIHRoaXMubG9nKHRoaXMubG9jKFwiQ2FjaGVzIHN1Y2Nlc2Z1bGx5IHBlcnNpc3RlZFwiKSk7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICB0aGlzLmxvZyh0aGlzLmxvYyhcIkVycm9ycyBwZXJzaXN0aW5nIG1vZGlmaWVkIGNhY2hlc1wiKSk7XHJcbiAgICAgIHRoaXMuUGVyc2lzdFRpbWVkQ2FjaGVBU0FQID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuUGVyc2lzdFVudGltZWRDYWNoZUFTQVAgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEhlbHBlciBjaGUgZGF0byB1biB1bmljbyBGaWxlIG8gdW5hIGxpc3RhIGRpIEZpbGUgY3JlYSB1biBvZ2dldHRvIEZvcm1EYXRhIGNoZSBwdcOyIGVzc2VyZSBpbnZpYXRvIGNvbW9kYW1lbnRlIFxyXG4gICAqIGFkIHVuIGJhY2tlbmQgQVNQLk5FVCBkYSBjdWkgc2kgcG90csOgIGFjY2VkZXJlIGEgUmVxdWVzdC5Gb3JtLkZpbGVzXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHtGaWxlIHwgRmlsZVtdfSBmaWxlQXJyYXlPckZpbGUgU2luZ29sbyBGaWxlIG8gbGlzdGEgZGkgRmlsZS4gTi5COiBuZWxsYSBmaXJtYSBkZWxsYSBmdW56aW9uZSB2aWVuZSBjb25zaWRlcmF0byAqKmFueSoqIHBlciBmYXJlIHRlc3Qgc3VsbGUgcHJvcHJpZXTDoCBcclxuICAgKiBpbnZlY2UgY2hlIGZhcmUgdGVzdCBjb24gbCcqKmlzdGFuY2VvZioqXHJcbiAgICogXHJcbiAgICogQHJldHVybnMge0Zvcm1EYXRhfSBGb3JtRGF0YSBjb250ZW5lbnRlIHR1dHRpIGkgZmlsZSBwYXNzYXRpXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZXRGaWxlc0Zvcm1EYXRhKGZpbGVBcnJheU9yRmlsZTogYW55KTogRm9ybURhdGEge1xyXG4gICAgdmFyIGZvcm1EYXRhOiBGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xyXG5cclxuICAgIGlmIChmaWxlQXJyYXlPckZpbGUpIHtcclxuICAgICAgaWYgKGZpbGVBcnJheU9yRmlsZS5sZW5ndGgpXHJcbiAgICAgICAgZmlsZUFycmF5T3JGaWxlLmZvckVhY2godCA9PiB7IGZvcm1EYXRhLmFwcGVuZChcImZpbGVcIiwgdCwgdC5uYW1lKTsgfSk7XHJcbiAgICAgIGVsc2UgaWYgKGZpbGVBcnJheU9yRmlsZS5uYW1lKVxyXG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZChcImZpbGVzXCIsIGZpbGVBcnJheU9yRmlsZSwgZmlsZUFycmF5T3JGaWxlLm5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmb3JtRGF0YTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEhlbHBlciBjaGUgaW4gYmFzZSBhaSBwYXJhbWV0cmkgZGlzcG9uaWJpbGkgZ2VuZXJhIGdsaSBIZWFkZXIgSFRUUCBwZXIgbGEgY2hpYW1hdGEgZGEgZWZmZXR0dWFyZVxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZW50VHlwZSBJbmRpY2Egc2UgYWdnaXVuZ2VyZSBhZ2xpIGhlYWRlciBcIkNvbnRlbnQtVHlwZVwiLCB2YWxvcml6emF0byBhbCB2YWxvcmUgZGVsIHBhcmFtZXRyb1xyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhY2NlcHQgSW5kaWNhIHNlIGFnZ2l1bmdlcmUgYWdsaSBoZWFkZXIgXCJBY2NlcHRcIiwgdmFsb3JpenphdG8gYWwgdmFsb3JlIGRlbCBwYXJhbWV0cm9cclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGluY2x1ZGVBdXRoIEluZGljYSBzZSBhZ2dpdW5nZXJlIGFnbGkgaGVhZGVyIFwiQXV0aG9yaXphdGlvblwiLCB2YWxvcml6emF0byBjb2wgdG9rZW4gcmVjdXBlcmF0byBkYWxsJ2hvb2sgKipyZXRyaWV2ZUFjY2Vzc1Rva2VuKiogZGVsbGEgY2xhc3NlIGRpIGVzdGVuc2lvbmVcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdHJhbnNhY3Rpb25JZCBJbmRpY2Egc2UgYWdnaXVuZ2VyZSBhZ2xpIGhlYWRlciBcIlgtVFgtSURcIiwgdmFsb3JpenphdG8gYWwgdmFsb3JlIGRlbCBwYXJhbWV0cm9cclxuICAgKiBcclxuICAgKiBAcmV0dXJucyB7SHR0cEhlYWRlcnN9IEhlYWRlciBnZW5lcmF0aSBpbiBiYXNlIGFpIHBhcmFtZXRyaVxyXG4gICAqL1xyXG4gIHByaXZhdGUgZ2V0SGVhZGVycyh0cmFuc2FjdGlvbklkID0gXCJcIiwgaW5jbHVkZUF1dGg6IGJvb2xlYW4gPSB0cnVlLCBjb250ZW50VHlwZTogc3RyaW5nID0gXCJhcHBsaWNhdGlvbi9qc29uXCIsIGFjY2VwdDogc3RyaW5nID0gXCJhcHBsaWNhdGlvbi9qc29uXCIpOiBIdHRwSGVhZGVycyB7XHJcbiAgICB2YXIgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpO1xyXG4gICAgdmFyIGF1dGh0b2tlbiA9IHRoaXMuRXh0ZW5zaW9uc0ltcGwucmV0cmlldmVBY2Nlc3NUb2tlbigpO1xyXG5cclxuICAgIGlmIChjb250ZW50VHlwZSlcclxuICAgICAgaGVhZGVycyA9IGhlYWRlcnMuYXBwZW5kKFwiQ29udGVudC1UeXBlXCIsIGNvbnRlbnRUeXBlKTtcclxuXHJcbiAgICBpZiAodHJhbnNhY3Rpb25JZClcclxuICAgICAgaGVhZGVycyA9IGhlYWRlcnMuYXBwZW5kKFwiWC1UWC1JRFwiLCB0cmFuc2FjdGlvbklkKTtcclxuXHJcbiAgICBpZiAoYXV0aHRva2VuICYmIGluY2x1ZGVBdXRoKVxyXG4gICAgICBoZWFkZXJzID0gaGVhZGVycy5hcHBlbmQoXCJBdXRob3JpemF0aW9uXCIsIFwiQmVhcmVyIFwiICsgYXV0aHRva2VuKTtcclxuXHJcbiAgICBpZiAoYWNjZXB0KVxyXG4gICAgICBoZWFkZXJzID0gaGVhZGVycy5hcHBlbmQoXCJBY2NlcHRcIiwgYWNjZXB0KTtcclxuXHJcbiAgICBoZWFkZXJzID0gaGVhZGVycy5hcHBlbmQoXCJBY2NlcHQtTGFuZ3VhZ2VcIiwgdGhpcy5MT0NBTEUgPz8gJ2l0LUlUJyk7XHJcbiAgICByZXR1cm4gaGVhZGVycztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdlc3Rpb25lIGRpIGRlZmF1bHQgZGVnbGkgZXJyb3JpXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHthbnl9IHJlcyBSaXN1bHRhdG8gZGVsbGEgY2hpYW1hdGEgZWZmZXR0dWF0YVxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBndWlkIElkZW50aWZpY2F0aXZvIEdVSUQgZGVsbGEgY2hpYW1hdGEgZWZmZXR0dWF0YVxyXG4gICAqL1xyXG4gIHByaXZhdGUgYXN5bmMgb25FcnJvcihyZXM6IEh0dHBFcnJvclJlc3BvbnNlIHwgVHlwZUVycm9yLCBndWlkOiBzdHJpbmcpIHtcclxuICAgIGlmKHRoaXMuY2FsbFN0YXR1c1tndWlkXSlcclxuICAgICAgdGhpcy5jYWxsU3RhdHVzW2d1aWRdLnN1Y2Nlc3MgPSBmYWxzZTtcclxuXHJcbiAgICAvL01pIGFzc2ljdXJvIGNoZSB0dXR0aSBnbGkgZXJyb3JpIGR1cmFudGUgaWwgcmVkaXJlY3QgYWwgbG9naW4gdmVuZ2FubyBpZ25vcmF0aVxyXG4gICAgaWYgKHRoaXMuRXh0ZW5zaW9uc0ltcGwucmVhZFJlZGlyZWN0aW5nVG9Mb2dpbigpKSB7XHJcbiAgICAgIHRoaXMubG9nKHRoaXMubG9jKFwiUmVkaXJlY3RpbmcgdG8gTG9naW4sIGlnbm9yaW5nIEhUVFAgZXJyb3Igb24gY2FsbFwiKSArIFwiIFwiICsgZ3VpZCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvL01pIGFzc2ljdXJvIGNoZSB2ZW5nYSBnZXN0aXRvIHVuIHNvbG8gZXJyb3JlIHBlciB2b2x0YVxyXG4gICAgaWYgKHRoaXMuRXh0ZW5zaW9uc0ltcGwucmVhZEhhbmRsaW5nRXJyb3JTdGF0dXMoKSkge1xyXG4gICAgICB0aGlzLmxvZyh0aGlzLmxvYyhcIkFscmVhZHkgSGFuZGxpbmcgYW4gZXJyb3IsIGlnbm9yaW5nIEhUVFAgZXJyb3Igb24gY2FsbFwiKSArIFwiIFwiICsgZ3VpZCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5FeHRlbnNpb25zSW1wbC53cml0ZUhhbmRsaW5nRXJyb3JTdGF0dXModHJ1ZSk7XHJcblxyXG4gICAgbGV0IGZpbmFsRXJyb3IgPSBcIlwiO1xyXG4gICAgbGV0IGZpbmFsU3RhdHVzID0gXCJcIjtcclxuICAgIGlmICh0aGlzLmlzVHlwZUVycm9yKHJlcykpIHtcclxuICAgICAgZmluYWxFcnJvciA9IHJlcy5tZXNzYWdlO1xyXG4gICAgICBmaW5hbFN0YXR1cyA9IFwiSFRUUCBTZXJ2aWNlIEludGVybmFsIEVycm9yXCI7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLmlzSHR0cEVycm9yUmVzcG9uc2UocmVzKSkge1xyXG5cclxuICAgICAgZmluYWxFcnJvciA9IGF3YWl0IHRoaXMuZ2V0SHR0cEVycm9yVGV4dChyZXMuZXJyb3IpO1xyXG4gICAgICBmaW5hbFN0YXR1cyA9IHJlcy5zdGF0dXMudG9TdHJpbmcoKTtcclxuXHJcbiAgICAgIHN3aXRjaCAocmVzLnN0YXR1cykge1xyXG4gICAgICAgIC8vIFVuYXV0aG9yaXplZFxyXG4gICAgICAgIGNhc2UgNDAxOlxyXG4gICAgICAgICAgaWYgKHRoaXMuRXh0ZW5zaW9uc0ltcGwucmVhZFJlZGlyZWN0aW9uU3RhdHVzKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2codGhpcy5sb2MoXCJFcnJvciA0MDEgb24gY2FsbFwiKSArIFwiIFwiICsgZ3VpZCArIFwiIFwiICsgdGhpcy5sb2MoXCJ3aXRoIHJlZGlyZWN0IGFscmVhZHkgaW4gcHJvZ3Jlc3MuIElnbm9yaW5nIHRoaXMgZXZlbnRcIikpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmxvZyh0aGlzLmxvYyhcIkVycm9yIDQwMSBvbiBjYWxsXCIpICsgXCIgXCIgKyBndWlkICsgXCIgXCIgKyB0aGlzLmxvYyhcInJlZGlyZWN0aW5nIHRvIGxvZ2luLlwiKSk7XHJcbiAgICAgICAgICB0aGlzLkV4dGVuc2lvbnNJbXBsLndyaXRlUmVkaXJlY3Rpb25TdGF0dXModHJ1ZSk7XHJcbiAgICAgICAgICB0aGlzLkV4dGVuc2lvbnNJbXBsLndyaXRlUmVkaXJlY3RpbmdUb0xvZ2luKHRydWUpO1xyXG4gICAgICAgICAgdGhpcy5FeHRlbnNpb25zSW1wbC5yZWRpcmVjdFRvTG9naW4oKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAvLyBIYW5kbGVkIGV4Y2VwdGlvblxyXG4gICAgICAgIGNhc2UgNDAwOlxyXG4gICAgICAgIC8vIE5vIFBlcm1pc3Npb25zXHJcbiAgICAgICAgY2FzZSA0MDM6XHJcbiAgICAgICAgICB0aGlzLkV4dGVuc2lvbnNJbXBsLmhhbmRsZUJsb2NraW5nRXhjZXB0aW9uKHJlcy5zdGF0dXMsIGZpbmFsRXJyb3IpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIC8vIE5vdCBmb3VuZFxyXG4gICAgICAgIGNhc2UgNDA0OlxyXG4gICAgICAgICAgdGhpcy5FeHRlbnNpb25zSW1wbC5oYW5kbGVCbG9ja2luZ0V4Y2VwdGlvbihyZXMuc3RhdHVzLCB0aGlzLmxvYyhcIlJlc291cmNlIG5vdCBmb3VuZFwiKSk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgLy8gTm90Q29uZmlndXJlZEV4Y2VwdGlvblxyXG4gICAgICAgIGNhc2UgNDQ0OlxyXG4gICAgICAgICAgaWYgKHRoaXMuRXh0ZW5zaW9uc0ltcGwucmVhZFJlZGlyZWN0aW9uU3RhdHVzKCkpXHJcbiAgICAgICAgICAgIHRoaXMubG9nKHRoaXMubG9jKFwiRXJyb3IgNDQ0IG9uIGNhbGxcIikgKyBcIiBcIiArIGd1aWQgKyBcIiBcIiArIHRoaXMubG9jKFwid2l0aCByZWRpcmVjdCBhbHJlYWR5IGluIHByb2dyZXNzLiBJZ25vcmluZyB0aGlzIGV2ZW50XCIpKTtcclxuICAgICAgICAgIGVsc2UgaWYgKCF0aGlzLkV4dGVuc2lvbnNJbXBsLmhhbmRsZU5vdENvbmZpZ3VyZWRFeGNlcHRpb24oKSlcclxuICAgICAgICAgICAgdGhpcy5FeHRlbnNpb25zSW1wbC5oYW5kbGVCbG9ja2luZ0V4Y2VwdGlvbihyZXMuc3RhdHVzLCBmaW5hbEVycm9yKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgICBmaW5hbEVycm9yID0gXCJTZXJ2ZXIgbWlnaHQgYmUgb2ZmbGluZVwiICsgKHJlcy5zdGF0dXNUZXh0ID8gXCIgKFwiICsgcmVzLnN0YXR1c1RleHQgKyBcIikgXCIgOiBcIlwiKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuRXh0ZW5zaW9uc0ltcGwuaGFuZGxlRXhjZXB0aW9uKGZpbmFsU3RhdHVzLCBmaW5hbEVycm9yKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERhdG8gdW4gZXJyb3JlIHJlc3RpdHVpc2NlIHVuYSBwcm9taXNlIGNvbiBsYSBzdHJpbmdhIGZpbmFsZSBkZWxsJ2Vycm9yZSBpbiBtb2RvIGRhIHBvdGVyIGZhcmUgdW4gYXdhaXRcclxuICAgKiBcclxuICAgKiBAcGFyYW0ge2FueX0gZXJyIEVycm9yZSBkYSBjb250cm9sbGFyZVxyXG4gICAqIFxyXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZz59IFByb21pc2UgY2hlIHJpc29sdmUgY29uIGxhIHN0cmluZ2EgZmluYWxlIGRlbGwnZXJyb3JlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZXRIdHRwRXJyb3JUZXh0KGVycjogYW55KTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgIC8vIFNlIGhvIHVuIEJsb2IgcHXDsiBlc3NlcmUgbyB1biBDYWxsUmVzdWx0IG8gc3VwcG9uZ28gdW5hIHNlbXBsaWNlIHN0cmluZ2EsXHJcbiAgICAvLyBhbHRyaW1lbnRpIHBvdHJlYmJlIGVzc2VyZSBkaXJldHRhbWVudGUgdW4gQ2FsbFJlc3VsdCwgb3BwdXJlIHVuYSBzZW1wbGljZSBzdHJpbmdhXHJcbiAgICByZXR1cm4gbmV3IFByb21pc2U8c3RyaW5nPigocmVzb2x2ZSkgPT4ge1xyXG4gICAgICBpZiAoZXJyIGluc3RhbmNlb2YgQmxvYikge1xyXG4gICAgICAgIGxldCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgICAgIHJlYWRlci5vbmxvYWQgPSAoZTogRXZlbnQpID0+IHtcclxuICAgICAgICAgIGxldCBlcnJNc2cgPSAoPGFueT5lLnRhcmdldCkucmVzdWx0O1xyXG4gICAgICAgICAgbGV0IGpzb25lcnJNc2c6IGFueTtcclxuICAgICAgICAgIHRyeSB7IGpzb25lcnJNc2cgPSBKU09OLnBhcnNlKGVyck1zZyk7IH0gY2F0Y2ggKGUpIHsgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlc29sdmUoanNvbmVyck1zZyAmJiB0aGlzLmlzQ2FsbFJlc3VsdChqc29uZXJyTXNnKSA/IGpzb25lcnJNc2cuZXJyb3IubWVzc2FnZSA6IGVyck1zZyk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICByZWFkZXIucmVhZEFzVGV4dChlcnIpXHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodGhpcy5pc0NhbGxSZXN1bHQoZXJyKSlcclxuICAgICAgICByZXR1cm4gcmVzb2x2ZShlcnIuZXJyb3IubWVzc2FnZSk7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICByZXR1cm4gcmVzb2x2ZShlcnI/LnRvU3RyaW5nKCkpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSaWNvbm9zY2Ugc2UgbCdvZ2dldHRvIMOoIGRpIHRpcG8gKipDYWxsUmVzdWx0KiogZSwgc2Ugc8OsLCBsbyBjYXN0YSBhbCB0aXBvIGNvcnJldHRvIHBlciBlc3NlcmUgdXRpbGl6emF0byBjb3JyZXR0YW1lbnRlIG5lbCBibG9jY28gZGkgY29kaWNlIHN1Y2Nlc3Npdm9cclxuICAgKiBcclxuICAgKiBAcGFyYW0ge2FueX0gZXJyIEVycm9yZSBkYSBjb250cm9sbGFyZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgaXNDYWxsUmVzdWx0KGVycjogYW55KTogZXJyIGlzIHsgZXJyb3I6IHsgbWVzc2FnZTogc3RyaW5nIH0gfSB7XHJcbiAgICByZXR1cm4gISFlcnI/LmVycm9yPy5tZXNzYWdlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmljb25vc2NlIHNlIGwnZXJyb3JlIMOoIGRpIHRpcG8gKipIdHRwRXJyb3JSZXNwb25zZSoqIGUsIHNlIHPDrCwgbG8gY2FzdGEgYWwgdGlwbyBjb3JyZXR0byBwZXIgZXNzZXJlIHV0aWxpenphdG8gY29ycmV0dGFtZW50ZSBuZWwgYmxvY2NvIGRpIGNvZGljZSBzdWNjZXNzaXZvXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHthbnl9IGVyciBFcnJvcmUgZGEgY29udHJvbGxhcmVcclxuICAgKi9cclxuICBwcml2YXRlIGlzSHR0cEVycm9yUmVzcG9uc2UoZXJyOiBhbnkpOiBlcnIgaXMgSHR0cEVycm9yUmVzcG9uc2Uge1xyXG4gICAgcmV0dXJuIGVyciBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlO1xyXG4gIH1cclxuXHJcbiAgIC8qKlxyXG4gICAqIFJpY29ub3NjZSBzZSBsJ2Vycm9yZSDDqCBkaSB0aXBvICoqVHlwZUVycm9yKiogZSwgc2Ugc8OsLCBsbyBjYXN0YSBhbCB0aXBvIGNvcnJldHRvIHBlciBlc3NlcmUgdXRpbGl6emF0byBjb3JyZXR0YW1lbnRlIG5lbCBibG9jY28gZGkgY29kaWNlIHN1Y2Nlc3Npdm9cclxuICAgKiBcclxuICAgKiBAcGFyYW0ge2FueX0gZXJyIEVycm9yZSBkYSBjb250cm9sbGFyZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgaXNUeXBlRXJyb3IoZXJyOiBhbnkpOiBlcnIgaXMgVHlwZUVycm9yIHtcclxuICAgIHJldHVybiBlcnIubmFtZSA9PSBcIlR5cGVFcnJvclwiO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ29tZSBkaWNlIGlsIG5vbWUsIHJlZ2lzdHJhIHVuIGVycm9yZSBlIHJlc3RpdHVpc2NlIHVuIE9ic2VydmFibGUgdnVvdG8gY29tZSByaXN1bHRhdG8gZGVsbGEgY2hpYW1hdGFcclxuICAgKiBcclxuICAgKiBAcGFyYW0ge2FueX0gcmVzIFJpc3VsdGF0byBkZWxsYSBjaGlhbWF0YSBlZmZldHR1YXRhXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGd1aWQgSWRlbnRpZmljYXRpdm8gR1VJRCBkZWxsYSBjaGlhbWF0YSBlZmZldHR1YXRhXHJcbiAgICogQHBhcmFtIHtib29sZWFufSBoYW5kbGVFcnJvciBJbmRpY2Egc2UgZ2VzdGlyZSBsJ2Vycm9yZSB2aWEgbGlicmVyaWEgbyBzZSBsaW1pdGFyc2kgYSByZXN0aXR1aXJlIGwnT2JzZXJ2YWJsZSB2dW90b1xyXG4gICAqIFxyXG4gICAqIEByZXR1cm5zIHtPYnNlcnZhYmxlPGFueT59IE9ic2VydmFibGUgdnVvdG9cclxuICAgKi9cclxuICBwcml2YXRlIHJlZ2lzdGVyRXJyb3JBbmRSZXR1cm5FbXB0eU9ic2VydmFibGUocmVzOiBhbnksIGd1aWQ6IHN0cmluZywgaGFuZGxlRXJyb3I6IGJvb2xlYW4gPSB0cnVlKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIGlmIChoYW5kbGVFcnJvcilcclxuICAgICAgdGhpcy5vbkVycm9yKHJlcywgZ3VpZCk7XHJcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoKCkgPT4geyB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERhdG8gdW4gVXJsIGUgZGVpIHBhcmFtZXRyaSBjZXJjYSBkaSByZWN1cGVyYXJlIGwnZXZlbnR1YWxlIG9nZ2V0dG8gZ2nDoCBzYWx2YXRvIGluIGNhY2hlIGNvbiBsZSBpbmZvcm1hemlvbmkgYmFzZSBkZWxsYSBjYWNoZSBzdGVzc2FcclxuICAgKiBcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsIFVSTCBzdSBjdWkgZWZmZXR0dWFyZSBsYSBjaGlhbWF0YVxyXG4gICAqIEBwYXJhbSB7SHR0cFBhcmFtc30gcGFyYW1zIFBhcmFtZXRyaSBkZWxsYSBjaGlhbWF0YSAobnVsbGkgaW4gY2FzbyBkaSBQT1NUKVxyXG4gICAqIFxyXG4gICAqIEByZXR1cm5zIHtDYWNoZUluZm9zfSBPZ2dldHRvIGNvbnRlbmVudGUgbGUgaW5mb3JtYXppb25pIHN1bGxhIGNhY2hlIHBlciBsJ29nZ2V0dG8gc3BlY2lmaWNhdG9cclxuICAgKi9cclxuICBwcml2YXRlIHRyeUdldENhY2hlSW5mb3JtYXRpb25zKHVybDogc3RyaW5nLCBwYXJhbXM6IEh0dHBQYXJhbXMpOiBDYWNoZUluZm9zIHtcclxuXHJcbiAgICBsZXQgY2FjaGluZ0tleSA9IG51bGwsIGNhY2hlVGltZSA9IG51bGwsIGl0ZW0gPSBudWxsO1xyXG4gICAgbGV0IHVzZUNhY2hpbmcgPSAhISgvI2NhY2hlL2dpLmV4ZWModXJsKSk7XHJcblxyXG4gICAgaWYgKHVzZUNhY2hpbmcpIHtcclxuICAgICAgbGV0IHRtcCA9IC8jY2FjaGUoOj8tKFxcZCspKS9naS5leGVjKHVybCk7XHJcbiAgICAgIGNhY2hlVGltZSA9IHRtcCA/IHRtcFsyXSA6IG51bGw7XHJcblxyXG4gICAgICB1cmwgPSB1cmwucmVwbGFjZShcIiNjYWNoZVwiICsgKGNhY2hlVGltZSA/IFwiLVwiICsgY2FjaGVUaW1lIDogXCJcIiksIFwiXCIpO1xyXG4gICAgICBpZiAodGhpcy51bnRpbWVkQ2FjaGVFeHBpcmVkKCkgJiYgIWNhY2hlVGltZSlcclxuICAgICAgICB0aGlzLnJlc2V0SHR0cFVudGltZWRDYWNoZVN0b3JhZ2UoKTtcclxuXHJcbiAgICAgIGNhY2hpbmdLZXkgPSB0aGlzLm1ha2VDYWNoZUtleSh1cmwsIHBhcmFtcyk7XHJcbiAgICAgIGxldCBjYWNoZUtleSA9IGNhY2hlVGltZSA/IHRoaXMubG9jYWxTdG9yYWdlSHR0cFRpbWVkQ2FjaGVLZXkgOiB0aGlzLmxvY2FsU3RvcmFnZUh0dHBDYWNoZUtleVxyXG4gICAgICBsZXQgY2FjaGVMcyA9IHRoaXMubG9jYWxTdG9yYWdlLmdldExvY2FsSXRlbShjYWNoZUtleSk7XHJcbiAgICAgIGxldCBjYWNoZSA9IGNhY2hlTHMgPyBjYWNoZUxzIDoge307XHJcblxyXG4gICAgICBpZiAoY2FjaGUgJiYgY2FjaGVbY2FjaGluZ0tleV0gJiYgIXRoaXMudGltZWRDYWNoZUl0ZW1FeHBpcmVkKGNhY2hlW2NhY2hpbmdLZXldKSkge1xyXG4gICAgICAgIC8vIFNlIGdlc3Rpc2NvIGlsIHRlbXBvIGVzYXR0byBkZWxsYSBjYWNoZSBwcmltYSBkaSByZXN0aXR1aXJlIGwnb2dnZXR0byBjYWNoYXRvIGxvIHJpcHVsaXNjbyBcclxuICAgICAgICAvLyBkYWxsZSBwcm9wcmlldMOgIGludGVybmUgY2hlIGdsaSBobyBhZ2dpdW50byBwZXIgY29udHJvbGxhcm5lIGxhIHNjYWRlbnphXHJcbiAgICAgICAgaWYgKGNhY2hlVGltZSlcclxuICAgICAgICAgIGRlbGV0ZSBjYWNoZVtjYWNoaW5nS2V5XS5fX2V4cGlyZTtcclxuXHJcbiAgICAgICAgaXRlbSA9IGNhY2hlW2NhY2hpbmdLZXldXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBQZXIgYXNzaWN1cmFybWkgY2hlIGlsIHJpZmVpcm1lbnRvIGRlZ2xpIG9nZ2V0dGkgc2lhIGRpdmVyc28gdXRpbGl6em8gaWwgZGVlcENsb25lXHJcbiAgICByZXR1cm4gbmV3IENhY2hlSW5mb3ModXJsLCB1c2VDYWNoaW5nLCBjYWNoaW5nS2V5LCBjYWNoZVRpbWUsIHRoaXMudXRpc0V4dHMuZGVlcENsb25lKGl0ZW0pKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEluc2VyaXNjZSB1biBvZ2dldHRvIG5lbGxhIGNhY2hlIGFwcHJvcHJpYXRhIGluIGJhc2UgYWxsZSBpbmZvcm1hemlvbmkgY29udGVudXRlIG5lbCBwYXJhbWV0cm8gKipjYWNoZUluZm9zKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0ge1R9IGl0ZW0gT2dnZXR0byBkYSBpbnNlcmlyZSBuZWxsYSBjYWNoZVxyXG4gICAqIEBwYXJhbSB7Q2FjaGVJbmZvc30gY2FjaGVJbmZvcyBJbmZvcm1hemlvbmkgc3VsbGEgY2FjaGUgcmVjdXBlcmF0ZSBkYSB1bmEgY2hpYW1hdGEgcHJlY2VkZW50ZSBhICoqdHJ5R2V0Q2FjaGVJbmZvcm1hdGlvbnMqKlxyXG4gICAqL1xyXG4gIHByaXZhdGUgY2FjaGVSZXNwb25zZTxUPihpdGVtOiBULCBjYWNoZUluZm9zOiBDYWNoZUluZm9zKTogdm9pZCB7XHJcbiAgICBsZXQgY2FjaGVLZXkgPSBjYWNoZUluZm9zLmNhY2hlVGltZSA/IHRoaXMubG9jYWxTdG9yYWdlSHR0cFRpbWVkQ2FjaGVLZXkgOiB0aGlzLmxvY2FsU3RvcmFnZUh0dHBDYWNoZUtleVxyXG4gICAgbGV0IGNhY2hlTHMgPSB0aGlzLmxvY2FsU3RvcmFnZS5nZXRMb2NhbEl0ZW0oY2FjaGVLZXkpO1xyXG4gICAgbGV0IGNhY2hlID0gY2FjaGVMcyA/IGNhY2hlTHMgOiB7fTtcclxuXHJcbiAgICBjYWNoZVtjYWNoZUluZm9zLmNhY2hlS2V5XSA9IGl0ZW07XHJcbiAgICBpZiAoY2FjaGVJbmZvcy5jYWNoZVRpbWUpXHJcbiAgICAgIGNhY2hlW2NhY2hlSW5mb3MuY2FjaGVLZXldLl9fZXhwaXJlID0gZGF5anMoKS5hZGQoY2FjaGVJbmZvcy5jYWNoZVRpbWUsIFwic2Vjb25kc1wiKTtcclxuXHJcbiAgICB0aGlzLmxvY2FsU3RvcmFnZS5zZXRMb2NhbEl0ZW0oY2FjaGVLZXksIGNhY2hlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbnRyb2xsYSBzZSBsYSBjYWNoZSBwZXIgbGUgY2hpYW1hdGUgc2VuemEgZXhwaXJlIHRpbWUgw6ggc2NhZHV0YVxyXG4gICAqIFxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAqKnRydWUqKiBzZSBsYSBjYWNoZSDDqCBzY2FkdXRhIGUgZGV2J2Vzc2VyZSByaXB1bGl0YSwgKipmYWxzZSoqIGFsdHJpbWVudGlcclxuICAgKi9cclxuICBwcml2YXRlIHVudGltZWRDYWNoZUV4cGlyZWQoKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgZXhwaXJlID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLmxvY2FsU3RvcmFnZUh0dHBDYWNoZUV4cGlyZUtleSkpO1xyXG4gICAgcmV0dXJuICFleHBpcmUgfHwgZXhwaXJlICYmIGRheWpzKGV4cGlyZSkgPCBkYXlqcygpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ29udHJvbGxhIHNlIGxhIGNhY2hlIHBlciB1bmEgY2hpYW1hdGEgY2hlIGhhIHVuIHRlbXBvIGRpIHZpdGEgYmVuIGRlZmluaXRvIMOoIHNjYWR1dGEgbyBtZW5vXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHthbnl9IGl0ZW0gT2dnZXR0byByZWN1cGVyYXRvIGRhbGxhIGNhY2hlIGEgY3VpIGhvIGFnZ2l1bnRvIGxhIGNoaWF2ZSBpbnRlcm5hIF9fZXhwaXJlXHJcbiAgICogXHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59ICoqdHJ1ZSoqIHNlIGxhIGNhY2hlIMOoIHNjYWR1dGEgZSBkZXYnZXNzZXJlIHJpcHVsaXRhLCAqKmZhbHNlKiogYWx0cmltZW50aVxyXG4gICAqL1xyXG4gIHByaXZhdGUgdGltZWRDYWNoZUl0ZW1FeHBpcmVkKGl0ZW06IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGRheWpzKGl0ZW0uX19leHBpcmUpIDwgZGF5anMoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJpcHVsaXNjZSBsYSBjYWNoZSBlIGltcG9zdGEgbGEgcHJvc3NpbWEgc2NhZGVuemEgYWQgYWRlc3NvICsgKipDTElFTlRfQ0FDSEVfRFVSQVRJT05fUyoqICh0b2tlbiB2YWxvcml6emF0byBpbiBmYXNlIGRpIGNvbmZpZ3VyYXppb25lIGRhbGxhIHByb3ByaWV0w6AgKipjbGllbnRDYWNoZUR1cmF0aW9uUyoqIGRlbGxhIGNsYXNzZSAqKkh0dHBTZXJ2aWNlTW9kdWxlQ29uZmlnKiopXHJcbiAgICovXHJcbiAgcHVibGljIGFzeW5jIHJlc2V0SHR0cFVudGltZWRDYWNoZVN0b3JhZ2UoKSB7XHJcbiAgICBhd2FpdCB0aGlzLmxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMubG9jYWxTdG9yYWdlSHR0cENhY2hlS2V5LCB7fSkudG9Qcm9taXNlKCk7XHJcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLmxvY2FsU3RvcmFnZUh0dHBDYWNoZUV4cGlyZUtleSwgSlNPTi5zdHJpbmdpZnkoZGF5anMoKS5hZGQodGhpcy5DTElFTlRfQ0FDSEVfRFVSQVRJT05fUyA/PyAzNjAwLCBcInNlY29uZFwiKSkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmlwdWxpc2NlIGxhIGNhY2hlIGRlbGxlIGNoaWFtYXRlIGNvbiB1biB0ZW1wbyBkaSBleHBpcmUgZGVmaW5pdG9cclxuICAgKi9cclxuICBwdWJsaWMgYXN5bmMgcmVzZXRIdHRwVGltZWRDYWNoZVN0b3JhZ2UoKSB7XHJcbiAgICBhd2FpdCB0aGlzLmxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMubG9jYWxTdG9yYWdlSHR0cFRpbWVkQ2FjaGVLZXksIHt9KS50b1Byb21pc2UoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdlbmVyYSB1bmEgY2hpYXZlIHBlciBsYSBjYWNoZSBkZWxsZSBjaGlhbWF0ZSBpbiBiYXNlIGFkIFVSTCBlIFBhcmFtZXRyaSBIVFRQXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVybCBVUkwgc3UgY3VpIGVmZmV0dHVhcmUgbGEgY2hpYW1hdGFcclxuICAgKiBAcGFyYW0ge0h0dHBQYXJhbXN9IHBhcmFtcyBQYXJhbWV0cmkgZGVsbGEgY2hpYW1hdGFcclxuICAgKiBcclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBDaGlhdmUgY2hlIHJhcHByZXNlbnRhIGluIG1hbmllcmEgdW5pdm9jYSBsYSBjaGlhbWF0YVxyXG4gICAqL1xyXG4gICBwcml2YXRlIG1ha2VDYWNoZUtleSh1cmw6IHN0cmluZywgcGFyYW1zOiBIdHRwUGFyYW1zKTogc3RyaW5nIHtcclxuICAgIGxldCBhdXRoS2V5UGFydCA9ICh0aGlzLm1lID8gdGhpcy5tZS5JZHRlbmFudCA6IFwiXCIpICsgKHRoaXMubWUgJiYgdGhpcy5DQUNIRV9CWV9VU0VSID8gdGhpcy5tZS5JZFVzZXIgOiBcIlwiKTtcclxuICAgIGxldCBwYXJhbXNLZXlQYXJ0ID0gcGFyYW1zICYmIHBhcmFtcy5rZXlzKCkubGVuZ3RoID4gMCA/IHBhcmFtcy5rZXlzKCkucmVkdWNlKChwcmV2OiBhbnksIG5leHQ6IGFueSkgPT4gcHJldiArIFwiLFwiICsgbmV4dCArICc9JyArIHBhcmFtcy5nZXQobmV4dCksIFwiXCIpIDogXCJcIjtcclxuICAgIHJldHVybiBhdXRoS2V5UGFydCArIFwiX1wiICsgdXJsLnN1YnN0cmluZyh1cmwuaW5kZXhPZihcImFwaVwiKSArIDQpICsgXCI/XCIgKyBwYXJhbXNLZXlQYXJ0O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2VuZXJhemlvbmUgR1VJRFxyXG4gICAqIFxyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IE51b3ZvIEdVSUQgZ2VuZXJhdG8gaW4gbWFuaWVyYSBjYXN1YWxlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZXRHVUlEKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gJ3h4eHh4eHh4LXh4eHgtNHh4eC15eHh4LXh4eHh4eHh4eHh4eCcucmVwbGFjZSgvW3h5XS9nLCBmdW5jdGlvbiAoYykge1xyXG4gICAgICB2YXIgciA9IE1hdGgucmFuZG9tKCkgKiAxNiB8IDAsIHYgPSBjID09ICd4JyA/IHIgOiAociAmIDB4MyB8IDB4OCk7XHJcbiAgICAgIHJldHVybiB2LnRvU3RyaW5nKDE2KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBzY3JpdmVyZSBsb2cgYSBjb25zb2xlIHF1YWxvcmEgKipERUJVR19NT0RFKiogcmlzdWx0YXNzZSAqKnRydWUqKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIE1lc3NhZ2dpbyBkaSBsb2dcclxuICAgKi9cclxuICBwcml2YXRlIGxvZyhtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLkRFQlVHX01PREUpXHJcbiAgICAgIGNvbnNvbGUubG9nKFwiQGh0dHBzZXJ2aWNlOiBcIiArIG1lc3NhZ2UpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBIZWxwZXIgcGVyIGxhIGxvY2FsaXp6YXppb25lIGRlaSBtZXNzYWdnaVxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIE1lc3NhZ2dpbyBkYSBsb2NhbGl6emFyZVxyXG4gICAqIFxyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IE1lc3NhZ2dpbyBsb2NhbGl6emF0b1xyXG4gICAqL1xyXG4gIHByaXZhdGUgbG9jKG1lc3NhZ2U6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAoIUxvY1ttZXNzYWdlXSkge1xyXG4gICAgICBjb25zb2xlLndhcm4oXCJVbnRyYW5zbGF0ZWQgbWVzc2FnZTogXCIgKyBtZXNzYWdlKVxyXG4gICAgICByZXR1cm4gXCJcIjtcclxuICAgIH1cclxuICAgIHJldHVybiBMb2NbbWVzc2FnZV1bdGhpcy5MT0NBTEVdO1xyXG4gIH1cclxufSJdfQ==
772
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cHNlcnZpY2Uuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2h0dHBzZXJ2aWNlL3NyYy9saWIvaHR0cHNlcnZpY2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsVUFBVTtBQUNWLE9BQU8sRUFBRSxVQUFVLEVBQUUsaUJBQWlCLEVBQWEsYUFBYSxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQW1DLE1BQU0sc0JBQXNCLENBQUM7QUFDekosT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTdELFlBQVk7QUFDWixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDckQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXRELGtDQUFrQztBQUNsQyxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRixPQUFPLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVsRSxrQ0FBa0M7QUFDbEMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLHVCQUF1QixFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFckksV0FBVztBQUNYLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRXZFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFRakQ7OztHQUdHO0FBRUgsTUFBTSxPQUFPLFdBQVc7SUEyQnRC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QyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7WUFDbkUsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3hCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxHQUFHLENBQUMsT0FBZTtRQUN6QixJQUFJLElBQUksQ0FBQyxVQUFVO1lBQ2pCLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLENBQUE7SUFDM0MsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNLLEdBQUcsQ0FBQyxPQUFlO1FBQ3pCLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDakIsT0FBTyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxPQUFPLENBQUMsQ0FBQTtZQUNoRCxPQUFPLEVBQUUsQ0FBQztTQUNYO1FBQ0QsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ25DLENBQUM7OztZQWgyQkYsVUFBVTs7OzRDQWdDTixNQUFNLFNBQUMsV0FBVztZQS9DZCxxQkFBcUI7NENBaUR6QixRQUFRLFlBQUksTUFBTSxTQUFDLGlCQUFpQjs0Q0FDcEMsUUFBUSxZQUFJLE1BQU0sU0FBQyxXQUFXOzRDQUM5QixRQUFRLFlBQUksTUFBTSxTQUFDLFFBQVE7NENBQzNCLFFBQVEsWUFBSSxNQUFNLFNBQUMsdUJBQXVCOzBDQUMxQyxRQUFRLFlBQUksTUFBTSxTQUFDLGFBQWE7MENBQ2hDLFFBQVEsWUFBSSxNQUFNLFNBQUMsVUFBVTtZQXJFekIsVUFBVTtZQUlWLFlBQVk7WUFDWixjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQW5ndWxhclxyXG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwRXJyb3JSZXNwb25zZSwgSHR0cEV2ZW50LCBIdHRwRXZlbnRUeXBlLCBIdHRwSGVhZGVycywgSHR0cFBhcmFtcywgSHR0cFByb2dyZXNzRXZlbnQsIEh0dHBSZXNwb25zZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3QsIE9wdGlvbmFsIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuXHJcbi8vIEVzIEZhZW56YVxyXG5pbXBvcnQgeyBDYWNoZVNlcnZpY2UgfSBmcm9tIFwiQGVzZmFlbnphL3ByZWZlcmVuY2VzXCI7XHJcbmltcG9ydCB7IFV0aWxpdHlTZXJ2aWNlIH0gZnJvbSBcIkBlc2ZhZW56YS9leHRlbnNpb25zXCI7XHJcblxyXG4vLyBEaXJldHRpdmUsIENvbXBvbmVudGksIExpYnJlcmllXHJcbmltcG9ydCB7IGNhdGNoRXJyb3IsIGNvbmNhdE1hcCwgZGVsYXksIGZpbmFsaXplLCBtYXAsIHNjYW4gfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcclxuaW1wb3J0IHsgZm9ya0pvaW4sIGZyb20sIE9ic2VydmFibGUsIG9mLCB0aHJvd0Vycm9yIH0gZnJvbSBcInJ4anNcIjtcclxuXHJcbi8vIENoaWFtYXRlIGFpIFJlcG9zaXRvcnkgLyB0b2tlbnNcclxuaW1wb3J0IHsgSFRUUF9JTlZBTElEQVRJT04sIENMSUVOVF9DQUNIRV9EVVJBVElPTl9TLCBCQUNLRU5EX1VSTCwgSFRUUF9MT0NBTEUsIEFQUF9OQU1FLCBDQUNIRV9CWV9VU0VSLCBERUJVR19NT0RFIH0gZnJvbSAnLi90b2tlbnMnO1xyXG5cclxuLy8gTW9kZWxsaSBcclxuaW1wb3J0IHsgSHR0cFNlcnZpY2VFeHRlbnNpb25zIH0gZnJvbSAnLi9jb25maWcvSHR0cFNlcnZpY2VFeHRlbnNpb25zJztcclxuaW1wb3J0IHsgRG93bmxvYWQgfSBmcm9tICcuL21vZGVscy9Eb3dubG9hZCc7XHJcbmltcG9ydCB7IExvYyB9IGZyb20gJy4vaHR0cHNlcnZpY2Uuc2VydmljZS5sb2MnO1xyXG5pbXBvcnQgeyBDYWNoZUluZm9zIH0gZnJvbSBcIi4vbW9kZWxzL0NhY2hlSW5mb3NcIjtcclxuXHJcbi8qKlxyXG4gKiBEaWNoaWFyYXppb25lIGRlbGxhIHZhcmlhYmlsZSBnbG9iYWxlIGRheWpzLiBMJ29uZXJlIGRpIFwiY3JlYXJsYVwiIMOoIGFmZmlkYXRvIGFsbCdhcHBsaWNhemlvbmUgY2hlIHV0aWxpenphIHF1ZXN0YSBsaWJyZXJpYSwgXHJcbiAqIGNoZSBkb3Zyw6AgaW1wb3J0YXJlIGxvIHNjcmlwdCBnbG9iYWxlIGRpIGRheWpzIG5lbGxhIENMSVxyXG4gKi9cclxuZGVjbGFyZSB2YXIgZGF5anM6IGFueTtcclxuXHJcbi8qKlxyXG4gKiBTZXJ2aXppbyB1dGlsaXp6YXRvIHBlciBlZmZldHR1YXJlIHF1YWxzaWFzaSB0aXBvIGRpIGNoaWFtYXRhIEhUVFAgZGFsbCdhcHBsaWNhemlvbmUsIGdlc3Rpc2NlIGVycm9yaSBlIGNhY2hlIGRlbGxlIHJpc3Bvc3RlIG5hdGl2YW1lbnRlIGUgbmUgcHXDsiBlc3NlcmUgXHJcbiAqIGVzdGVzby9tb2RpZmljYXRvIGlsIGNvbXBvcnRhbWVudG8gaW1wbGVtZW50YW5kbyBsYSBjbGFzc2UgZGkgXCJob29rXCIgKipJSHR0cFNlcnZpY2VFeHRlbnNpb25zKiogZSByZWdpc3RyYW5kb2xhIG5lbCBwcm92aWRlciBkZWxsYSBjbGFzc2UgKipIdHRwU2VydmljZUV4dGVuc2lvbnMqKlxyXG4gKi9cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgSFRUUFNlcnZpY2Uge1xyXG5cclxuICAvKiogQ2FjaGUgZGVsbG8gc3RhdG8gZGVsbGUgY2hpYW1hdGUgSFRUUCBhdHR1YWxtZW50ZSBlZmZldHR1YXRlLiBPZ25pIGNoaWFtYXRhIMOoIHJhcHByZXNlbnRhdGEgZGEgdW4gR1VJRCBlIGxvIHN0YXR1cyBhc3N1bWUgdmFsb3JlICoqZmFsc2UqKiBzb2xvIHN1Z2xpIGVycm9yaSAqL1xyXG4gIHByaXZhdGUgY2FsbFN0YXR1czogeyBbaWQ6IHN0cmluZ106IHsgdXJsOiBzdHJpbmcsIHN1Y2Nlc3M6IGJvb2xlYW4gfSB9ID0ge307XHJcbiAgLyoqIE5vbWUgZGVsbGEgY2FjaGUgaW4gY3VpIHZlbmdvbm8gc3RvcmljaXp6YXRlIGxlIGluZm9ybWF6aW9uaSBzdWxsZSByaXNwb3N0ZSBkZWxsZSBjaGlhbWF0ZSBzb3R0byBmb3JtYSBkaSBkaWN0aW9uYXJ5ICovXHJcbiAgcHJpdmF0ZSBsb2NhbFN0b3JhZ2VIdHRwQ2FjaGVLZXkgPSBudWxsO1xyXG4gIC8qKiBOb21lIGRlbGxhIGNhY2hlIGluIGN1aSB2ZW5nb25vIHN0b3JpY2l6emF0ZSBsZSBpbmZvcm1hemlvbmkgc3VsbGUgcmlzcG9zdGUgZGVsbGUgY2hpYW1hdGUgc290dG8gZm9ybWEgZGkgZGljdGlvbmFyeSwgc29sbyBwZXIgbGUgY2hpYW1hdGUgY29uIHVuIHRlbXBvIGRlZmluaXRvIGRpIGNhY2hpbmcgKi9cclxuICBwcml2YXRlIGxvY2FsU3RvcmFnZUh0dHBUaW1lZENhY2hlS2V5ID0gbnVsbDtcclxuICAvKiogTm9tZSBkZWxsYSBjYWNoZSBpbiBjdWkgdmVuZ29ubyBzdG9yaWNpenphdGUgbGUgaW5mb3JtYXppb25pIHN1bGxvIHNjYWRlcmUgZGVsbGEgY2FjaGUgc3Rlc3NhICovXHJcbiAgcHJpdmF0ZSBsb2NhbFN0b3JhZ2VIdHRwQ2FjaGVFeHBpcmVLZXkgPSBudWxsO1xyXG4gIC8qKiBJZGVudGl0w6AgY29sbGVnYXRhIGFsIHRva2VuIGRpIGF1dGVudGljYXppb25lIGRhIHVzYXJlLCByaWNoaWVzdGEgYWwgcHJvZ3JhbW1hIGNoZSB1dGlsaXp6YSBsYSBsaWJyZXJpYSBhdHRyYXZlcnNvIGwnaG9vayAqKnJldHJpZXZlSWRlbnRpdHkqKiBkZWxsYSAqKkh0dHBTZXJ2aWNlRXh0ZW5zaW9ucyoqICovXHJcbiAgcHJpdmF0ZSBtZTogeyBJZHRlbmFudDogc3RyaW5nLCBJZFVzZXI6IHN0cmluZyB9ID0gbnVsbDtcclxuICAvKiogSW5kaWNhIGNoZSBsYSBjYWNoZSBhIHRlbXBvIGRldidlc3NlcmUgcGVyc2lzdGl0YSBpbCBwcmltYSBwb3NzaWJpbGUgKi9cclxuICBwcml2YXRlIFBlcnNpc3RUaW1lZENhY2hlQVNBUDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIC8qKiBJbmRpY2EgY2hlIGxhIGNhY2hlIHNlbnphIGxpbWl0aSBkaSB0ZW1wbyBkZXYnZXNzZXJlIHBlcnNpc3RpdGEgaWwgcHJpbWEgcG9zc2liaWxlICovXHJcbiAgcHJpdmF0ZSBQZXJzaXN0VW50aW1lZENhY2hlQVNBUDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBJbXBsZW1lbnRhemlvbmUgZGVsbGEgY2xhc3NlIGRpIGVzdGVuc2lvbmUgcGVyIGNvbGxlZ2FyZSBpIGNvbXBvcnRhbWVudGkgZGVsbGEgbGlicmVyaWEgYWxsJ2FwcGxpY2F6aW9uZSBpbiBjdWkgw6ggdXNhdGEuIFxyXG4gICAqIFxyXG4gICAqIFNlIMOoIHN0YXRvIGVmZmV0dHVhdG8gaWwgcHJvdmlkZSBkZWxsYSBjbGFzc2UgKipIdHRwU2VydmljZUV4dGVuc2lvbnMqKiB2ZXJyw6AgdXNhdG8gcXVlbCBwcm92aWRlciwgYWx0cmltZW50aSB2ZXJyw6AgY3JlYXRhIHVuYSBudW92YSBpc3RhbnphIGRpIGRlZmF1bHRcclxuICAgKi9cclxuICBwcml2YXRlIEV4dGVuc2lvbnNJbXBsOiBIdHRwU2VydmljZUV4dGVuc2lvbnM7XHJcblxyXG4gIC8qKiBMaXN0YSBkZWxsZSB1bHRpbWUgMyBjaGlhbWF0ZSBjb21wbGV0YXRlIGNvbiBzdWNjZXNzbyBpbiBvcmRpbmUgZGkgY29tcGxldGFtZW50byAoaW4gcG9zaXppb25lIDAgYyfDqCBsJ3VsdGltYSBjb21wbGV0YXRhIGVjY2V0ZXJhLi4uKSAqL1xyXG4gIHB1YmxpYyBMYXN0VGhyZWVDb21wbGV0ZWRDYWxsczogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgQEluamVjdChCQUNLRU5EX1VSTCkgcHJpdmF0ZSBCQUNLRU5EX1VSTCxcclxuICAgIHByaXZhdGUgRVhURU5TSU9OX0NMQVNTOiBIdHRwU2VydmljZUV4dGVuc2lvbnMsXHJcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEhUVFBfSU5WQUxJREFUSU9OKSBwcml2YXRlIEhUVFBfSU5WQUxJREFUSU9OLFxyXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChIVFRQX0xPQ0FMRSkgcHJpdmF0ZSBMT0NBTEUsXHJcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEFQUF9OQU1FKSBwcml2YXRlIEFQUF9OQU1FLFxyXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChDTElFTlRfQ0FDSEVfRFVSQVRJT05fUykgcHJpdmF0ZSBDTElFTlRfQ0FDSEVfRFVSQVRJT05fUyxcclxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoQ0FDSEVfQllfVVNFUikgcHJpdmF0ZSBDQUNIRV9CWV9VU0VSOiBib29sZWFuLFxyXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChERUJVR19NT0RFKSBwcml2YXRlIERFQlVHX01PREU6IGJvb2xlYW4sXHJcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXHJcbiAgICBwcml2YXRlIGxvY2FsU3RvcmFnZTogQ2FjaGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB1dGlzRXh0czogVXRpbGl0eVNlcnZpY2VcclxuICApIHtcclxuXHJcbiAgICB0aGlzLkV4dGVuc2lvbnNJbXBsID0gdGhpcy5FWFRFTlNJT05fQ0xBU1MgfHwgbmV3IEh0dHBTZXJ2aWNlRXh0ZW5zaW9ucygpO1xyXG4gICAgdGhpcy5tZSA9IHRoaXMuRXh0ZW5zaW9uc0ltcGwucmV0cmlldmVJZGVudGl0eSgpO1xyXG4gICAgdGhpcy5sb2NhbFN0b3JhZ2VIdHRwQ2FjaGVLZXkgPSAodGhpcy5BUFBfTkFNRSA/PyBcIkFQUFwiKS5yZXBsYWNlKC9cXHMvZywgJ18nKSArIFwiX0h0dHBDYWNoZVwiO1xyXG4gICAgdGhpcy5sb2NhbFN0b3JhZ2VIdHRwVGltZWRDYWNoZUtleSA9ICh0aGlzLkFQUF9OQU1FID8/IFwiQVBQXCIpLnJlcGxhY2UoL1xccy9nLCAnXycpICsgXCJfSHR0cFRpbWVkQ2FjaGVcIjtcclxuICAgIHRoaXMubG9jYWxTdG9yYWdlSHR0cENhY2hlRXhwaXJlS2V5ID0gdGhpcy5sb2NhbFN0b3JhZ2VIdHRwQ2FjaGVLZXkgKyBcIl9FeHBpcmVcIjtcclxuXHJcbiAgICB0aGlzLmFkanVzdE9sZFN0b3JhZ2VTeXN0ZW0oKTtcclxuXHJcbiAgICBpZiAodGhpcy51bnRpbWVkQ2FjaGVFeHBpcmVkKCkpXHJcbiAgICAgIHRoaXMucmVzZXRIdHRwVW50aW1lZENhY2hlU3RvcmFnZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2UgdmVkbyBjaGUgY2kgc29ubyBlbGVtZW50aSBzYWx2YXRpIG5lbCBsb2NhbFN0b3JhZ2UgcHJvdm8gYSB0b2dsaWVybGkgZSBhIHJpc2FsdmFybGkgdmlhIHByZWZlcmVuY2UuXHJcbiAgICogTmVsIGNhc28gbWlnbGlvcmUgbGkgc3Bvc3RvIGRhbCBsb2NhbFN0b3JhZ2UgYWwgREIgZGkgcHJlZmVyZW5jZSwgbmVsIGNhc28gcGVnZ2lvcmUgbGkgdG9sZ28gZSBsaSByaXNhbHZvIG5lbCBsb2NhbFN0b3JhZ2VcclxuICAgKi9cclxuICBwcml2YXRlIGFzeW5jIGFkanVzdE9sZFN0b3JhZ2VTeXN0ZW0oKSB7XHJcbiAgICB2YXIgbHNUaW1lZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMubG9jYWxTdG9yYWdlSHR0cFRpbWVkQ2FjaGVLZXkpO1xyXG4gICAgdmFyIGxzVW50aW1lZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMubG9jYWxTdG9yYWdlSHR0cENhY2hlS2V5KTtcclxuICAgIGlmICghbHNUaW1lZCAmJiAhbHNVbnRpbWVkKVxyXG4gICAgICByZXR1cm47XHJcblxyXG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5sb2NhbFN0b3JhZ2VIdHRwVGltZWRDYWNoZUtleSk7XHJcbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLmxvY2FsU3RvcmFnZUh0dHBDYWNoZUtleSk7XHJcbiAgICBsc1RpbWVkID0gbHNUaW1lZCA/IEpTT04ucGFyc2UobHNUaW1lZCkgOiB7fTtcclxuICAgIGxzVW50aW1lZCA9IGxzVW50aW1lZCA/IEpTT04ucGFyc2UobHNVbnRpbWVkKSA6IHt9O1xyXG5cclxuICAgIGF3YWl0IGZvcmtKb2luKFtcclxuICAgICAgdGhpcy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLmxvY2FsU3RvcmFnZUh0dHBUaW1lZENhY2hlS2V5LCBsc1RpbWVkKSxcclxuICAgICAgdGhpcy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLmxvY2FsU3RvcmFnZUh0dHBDYWNoZUtleSwgbHNVbnRpbWVkKVxyXG4gICAgXSkudG9Qcm9taXNlKCk7XHJcblxyXG4gICAgdGhpcy5sb2codGhpcy5sb2MoXCJDb252ZXJ0ZWQgb2xkIHN0b3JhZ2Ugc3lzdGVtIHRvIG5ldyBvbmVcIikpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRXNlY3V6aW9uZSBkaSB1bmEgR0VUIEhUVFAgY29uIGV2ZW50dWFsbWVudGUgbGEgZ2VzdGlvbmUgZGVsbGEgY2FjaGUgcXVhbG9yYSBsYSBjaGlhbWF0YSB0ZXJtaW5pIGNvbiBsYSBjb252ZW56aW9uZSBcIiNjYWNoZVwiXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVybCBVUkwgc3UgY3VpIGVmZmV0dHVhcmUgbGEgY2hpYW1hdGFcclxuICAgKiBAcGFyYW0ge0h0dHBQYXJhbXN9IHBhcmFtcyBQYXJhbWV0cmkgZGVsbGEgY2hpYW1hdGFcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdHJhbnNhY3Rpb24gQ29kaWNlIHRyYW5zYXppb25lIGNvbGxlZ2F0byBhIHF1ZXN0YSBjaGlhbWF0YS4gVmllbmUgaW5zZXJpdG8gbmVsbCdIZWFkZXIgXCJYLVRYLUlEXCIgZSBsYXRvIEJhY2tlbmQgZG92csOgIGVzc2VyZSBnZXN0aXRvIGRpIGNvbnNlZ3VlbnphXHJcbiAgICogQHBhcmFtIHtib29sZWFufSBzdWNjZXNmdWxSZXN1bHRNYW5kYXRvcnkgSW5kaWNhIGNoZSBxdWVzdGEgY2hpYW1hdGEgZGV2ZSBhc3NvbHV0YW1lbnRlIGFuZGFyZSBiZW5lLiBJbiBjYXNvIGNvbnRyYXJpbyB2aWVuZSBmaXNpY2FtZW50ZSBmYXR0byBpbCB0aHJvdyBjaGUgcHXDsiBlc3NlcmUgXHJcbiAgICogcmFjY29sdG8gZGEgY2hpIHVzYSBsYSBsaWJyZXJpYSBuZWxsYSBwaXBlIFwib25FcnJvclwiIGRlbGwnT2JzZXJ2YWJsZSByZXN0aXR1aXRvIGVkIGVzc2VyZSBnZXN0aXRvIGluIG1hbmllcmEgbm9uIHN0YW5kYXJkXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZXJyb3JDYWxsYmFjayBDYWxsYmFjayBjaGlhbWF0byBpbiBjYXNvIGRpIGVycm9yZVxyXG4gICAqIFxyXG4gICAqIEByZXR1cm5zIHtPYnNlcnZhYmxlPFQ+fSBPYnNlcnZhYmxlIGNoZSBjb250aWVuZSBpbCByaXN1bHRhdG8gZGVsbGEgY2hpYW1hdGFcclxuICAgKi9cclxuICBwdWJsaWMgZ2V0PFQ+KHVybDogc3RyaW5nLCBwYXJhbXM6IEh0dHBQYXJhbXMgPSBudWxsLCB0cmFuc2FjdGlvbiA9IFwiXCIsIHN1Y2Nlc2Z1bFJlc3VsdE1hbmRhdG9yeTogYm9vbGVhbiA9IHRydWUsIGVycm9yQ2FsbGJhY2s6IEZ1bmN0aW9uID0gbnVsbCk6IE9ic2VydmFibGU8VD4ge1xyXG4gICAgLy8gVE9ETyBwcm92YXJlIGUgdGVzdGFyZVxyXG4gICAgcmV0dXJuIGZyb20oW3RoaXMuZGVmYXVsdFN0YXJ0Q2FsbCh1cmwpXSkucGlwZShcclxuICAgICAgY29uY2F0TWFwKChteUd1aWQ6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIGxldCBjYWNoZWRJbmZvcyA9IHRoaXMudHJ5R2V0Q2FjaGVJbmZvcm1hdGlvbnModXJsLCBwYXJhbXMpO1xyXG4gICAgICAgIGlmIChjYWNoZWRJbmZvcy5jYWNoZSAmJiBjYWNoZWRJbmZvcy5jYWNoZUl0ZW0pIHtcclxuICAgICAgICAgIHRoaXMubG9nKHRoaXMubG9jKFwiUmVzdWx0IGZvclwiKSArIFwiIFwiICsgdXJsICsgXCIgXCIgKyB0aGlzLmxvYyhcInJldHJpZXZlZCBmcm9tIGNhY2hlXCIpKTtcclxuICAgICAgICAgIHJldHVybiBvZjxUPihjYWNoZWRJbmZvcy5jYWNoZUl0ZW0pLnBpcGUoZGVsYXkoMCksIGZpbmFsaXplKCgpID0+IHsgdGhpcy50cnlGaW5hbGl6ZUJ5R3VpZChteUd1aWQpOyB9KSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgaHR0cENhbGwgPSB0aGlzLmh0dHAuZ2V0PFQ+KGNhY2hlZEluZm9zLmZpbmFsVXJsLCB7IGhlYWRlcnM6IHRoaXMuZ2V0SGVhZGVycyh0cmFuc2FjdGlvbiksIHBhcmFtczogcGFyYW1zIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gaHR0cENhbGwucGlwZShcclxuICAgICAgICAgIG1hcCgocmVzOiBUKSA9PiB7XHJcbiAgICAgICAgICAgIGxldCByZXNwb25zZUl0ZW0gPSA8VD5yZXM7XHJcblxyXG4gICAgICAgICAgICBpZiAoY2FjaGVkSW5mb3MuY2FjaGUpIHtcclxuICAgICAgICAgICAgICB0aGlzLmNhY2hlUmVzcG9uc2UodGhpcy51dGlzRXh0cy5kZWVwQ2xvbmUocmVzcG9uc2VJdGVtKSwgY2FjaGVkSW5mb3MpO1xyXG4gICAgICAgICAgICAgIHRoaXMubG9nKHRoaXMubG9jKFwiQ2FjaGVkIHJlc3VsdCBmb3JcIikgKyBcIiBcIiArIHVybCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZUl0ZW07XHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICAgIGNhdGNoRXJyb3IoKGVyciwgY2F1Z2h0KTogT2JzZXJ2YWJsZTxUPiA9PiB7XHJcbiAgICAgICAgICAgIGlmIChlcnJvckNhbGxiYWNrKSBlcnJvckNhbGxiYWNrKCk7XHJcbiAgICAgICAgICAgIHJldHVybiAhc3VjY2VzZnVsUmVzdWx0TWFuZGF0b3J5ID8gdGhyb3dFcnJvcihlcnIpIDogdGhpcy5yZWdpc3RlckVycm9yQW5kUmV0dXJuRW1wdHlPYnNlcnZhYmxlKGVyciwgbXlHdWlkKTtcclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgZmluYWxpemUoKCkgPT4geyB0aGlzLnRyeUZpbmFsaXplQnlHdWlkKG15R3VpZCwgY2FjaGVkSW5mb3MpOyB9KVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRXNlY3V6aW9uZSBkaSB1bmEgR0VUIEhUVFAgY29uIGV2ZW50dWFsbWVudGUgbGEgZ2VzdGlvbmUgZGVsbGEgY2FjaGUgcXVhbG9yYSBsYSBjaGlhbWF0YSB0ZXJtaW5pIGNvbiBsYSBjb252ZW56aW9uZSBcIiNjYWNoZVwiXHJcbiAgICogXHJcbiAgICogQ2FzbyBzcGVjaWZpY28gZGkgY2hpYW1hdGEgY2hlIGRldmUgcmVzdGl0dWlyZSB1biBCbG9iIG8gdW4gQXJyYXlCdWZmZXIgbmF0aXZvIGRhIGVsYWJvcmFyZVxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVVJMIHN1IGN1aSBlZmZldHR1YXJlIGxhIGNoaWFtYXRhXHJcbiAgICogQHBhcmFtIHtIdHRwUGFyYW1zfSBwYXJhbXMgUGFyYW1ldHJpIGRlbGxhIGNoaWFtYXRhXHJcbiAgICogQHBhcmFtIHtcImFycmF5YnVmZmVyXCJ8IFwiYmxvYlwifSB0eXBlIFRpcG8gZGkgcml0b3JubyByaWNoaWVzdG9cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdHJhbnNhY3Rpb24gQ29kaWNlIHRyYW5zYXppb25lIGNvbGxlZ2F0byBhIHF1ZXN0YSBjaGlhbWF0YS4gVmllbmUgaW5zZXJpdG8gbmVsbCdIZWFkZXIgXCJYLVRYLUlEXCIgZSBsYXRvIEJhY2tlbmQgZG92csOgIGVzc2VyZSBnZXN0aXRvIGRpIGNvbnNlZ3VlbnphXHJcbiAgICogQHBhcmFtIHtib29sZWFufSBzdWNjZXNmdWxSZXN1bHRNYW5kYXRvcnkgSW5kaWNhIGNoZSBxdWVzdGEgY2hpYW1hdGEgZGV2ZSBhc3NvbHV0YW1lbnRlIGFuZGFyZSBiZW5lLiBJbiBjYXNvIGNvbnRyYXJpbyB2aWVuZSBmaXNpY2FtZW50ZSBmYXR0byBpbCB0aHJvdyBjaGUgcHXDsiBlc3NlcmUgXHJcbiAgICogcmFjY29sdG8gZGEgY2hpIHVzYSBsYSBsaWJyZXJpYSBuZWxsYSBwaXBlIFwib25FcnJvclwiIGRlbGwnT2JzZXJ2YWJsZSByZXN0aXR1aXRvIGVkIGVzc2VyZSBnZXN0aXRvIGluIG1hbmllcmEgbm9uIHN0YW5kYXJkXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZXJyb3JDYWxsYmFjayBDYWxsYmFjayBjaGlhbWF0byBpbiBjYXNvIGRpIGVycm9yZVxyXG4gICAqIFxyXG4gICAqIEByZXR1cm5zIHtPYnNlcnZhYmxlPEJsb2IgfCBBcnJheUJ1ZmZlcj59IE9ic2VydmFibGUgY2hlIGNvbnRpZW5lIGlsIHJpc3VsdGF0byBkZWxsYSBjaGlhbWF0YVxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXRSYXcodXJsOiBzdHJpbmcsIHBhcmFtczogSHR0cFBhcmFtcyA9IG51bGwsIHR5cGU6IFwiYXJyYXlidWZmZXJcIiB8IFwiYmxvYlwiID0gXCJhcnJheWJ1ZmZlclwiLCB0cmFuc2FjdGlvbiA9IFwiXCIsIHN1Y2Nlc2Z1bFJlc3VsdE1hbmRhdG9yeTogYm9vbGVhbiA9IHRydWUsIGVycm9yQ2FsbGJhY2sgPSBudWxsKTogT2JzZXJ2YWJsZTxCbG9iIHwgQXJyYXlCdWZmZXI+IHtcclxuICAgIHJldHVybiBmcm9tKFt0aGlzLmRlZmF1bHRTdGFydENhbGwodXJsKV0pLnBpcGUoXHJcbiAgICAgIGNvbmNhdE1hcCgobXlHdWlkOiBzdHJpbmcpID0+IHtcclxuICAgICAgICBsZXQgY2FjaGVkSW5mb3MgPSB0aGlzLnRyeUdldENhY2hlSW5mb3JtYXRpb25zKHVybCwgcGFyYW1zKTtcclxuICAgICAgICBpZiAoY2FjaGVkSW5mb3MuY2FjaGUgJiYgY2FjaGVkSW5mb3MuY2FjaGVJdGVtKSB7XHJcbiAgICAgICAgICB0aGlzLmxvZyh0aGlzLmxvYyhcIlJlc3VsdCBmb3JcIikgKyBcIiBcIiArIHVybCArIFwiIFwiICsgdGhpcy5sb2MoXCJyZXRyaWV2ZWQgZnJvbSBjYWNoZVwiKSk7XHJcbiAgICAgICAgICByZXR1cm4gb2Y8YW55PihjYWNoZWRJbmZvcy5jYWNoZUl0ZW0pLnBpcGUoZGVsYXkoMCksIGZpbmFsaXplKCgpID0+IHsgdGhpcy50cnlGaW5hbGl6ZUJ5R3VpZChteUd1aWQpOyB9KSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgaHR0cENhbGwgPSB0aGlzLmh0dHAuZ2V0KGNhY2hlZEluZm9zLmZpbmFsVXJsLCB7IHJlc3BvbnNlVHlwZTogPGFueT50eXBlLCBoZWFkZXJzOiB0aGlzLmdldEhlYWRlcnModHJhbnNhY3Rpb24pLCBwYXJhbXM6IHBhcmFtcyB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGh0dHBDYWxsLnBpcGUoXHJcbiAgICAgICAgICBtYXAoKGJsb2I6IEJsb2IgfCBBcnJheUJ1ZmZlcikgPT4ge1xyXG5cclxuICAgICAgICAgICAgaWYgKGNhY2hlZEluZm9zLmNhY2hlKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5jYWNoZVJlc3BvbnNlKGJsb2IsIGNhY2hlZEluZm9zKTtcclxuICAgICAgICAgICAgICB0aGlzLmxvZyh0aGlzLmxvYyhcIkNhY2hlZCByZXN1bHQgZm9yXCIpICsgXCIgXCIgKyB1cmwpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gYmxvYjtcclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgY2F0Y2hFcnJvcigoZXJyLCBjYXVnaHQpOiBPYnNlcnZhYmxlPEJsb2I+ID0+IHtcclxuICAgICAgICAgICAgaWYgKGVycm9yQ2FsbGJhY2spIGVycm9yQ2FsbGJhY2soKTtcclxuICAgICAgICAgICAgcmV0dXJuICFzdWNjZXNmdWxSZXN1bHRNYW5kYXRvcnkgPyB0aHJvd0Vycm9yKGVycikgOiB0aGlzLnJlZ2lzdGVyRXJyb3JBbmRSZXR1cm5FbXB0eU9ic2VydmFibGUoZXJyLCBteUd1aWQpO1xyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7IHRoaXMudHJ5RmluYWxpemVCeUd1aWQobXlHdWlkLCBjYWNoZWRJbmZvcyk7IH0pXHJcbiAgICAgICAgKTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAqIEVzZWN1emlvbmUgZGkgdW5hIFBPU1QgSFRUUFxyXG4gICogXHJcbiAgKiBAcGFyYW0ge3N0cmluZ30gdXJsIFVSTCBzdSBjdWkgZWZmZXR0dWFyZSBsYSBjaGlhbWF0YVxyXG4gICogQHBhcmFtIHthbnl9IGJvZHlEYXRhIERUTyBwZXIgbGEgY2hpYW1hdGFcclxuICAqIEBwYXJhbSB7SHR0cFBhcmFtc30gcGFyYW1zIFBhcmFtZXRyaSBkZWxsYSBjaGlhbWF0YVxyXG4gICogQHBhcmFtIHtzdHJpbmd9IHRyYW5zYWN0aW9uIENvZGljZSB0cmFuc2F6aW9uZSBjb2xsZWdhdG8gYSBxdWVzdGEgY2hpYW1hdGEuIFZpZW5lIGluc2VyaXRvIG5lbGwnSGVhZGVyIFwiWC1UWC1JRFwiIGUgbGF0byBCYWNrZW5kIGRvdnLDoCBlc3NlcmUgZ2VzdGl0byBkaSBjb25zZWd1ZW56YVxyXG4gICogQHBhcmFtIHtib29sZWFufSBzdWNjZXNmdWxSZXN1bHRNYW5kYXRvcnkgSW5kaWNhIGNoZSBxdWVzdGEgY2hpYW1hdGEgZGV2ZSBhc3NvbHV0YW1lbnRlIGFuZGFyZSBiZW5lLiBJbiBjYXNvIGNvbnRyYXJpbyB2aWVuZSBmaXNpY2FtZW50ZSBmYXR0byBpbCB0aHJvdyBjaGUgcHXDsiBlc3NlcmUgXHJcbiAgKiByYWNjb2x0byBkYSBjaGkgdXNhIGxhIGxpYnJlcmlhIG5lbGxhIHBpcGUgXCJvbkVycm9yXCIgZGVsbCdPYnNlcnZhYmxlIHJlc3RpdHVpdG8gZWQgZXNzZXJlIGdlc3RpdG8gaW4gbWFuaWVyYSBub24gc3RhbmRhcmRcclxuICAqIFxyXG4gICogQHJldHVybnMge09ic2VydmFibGU8VD59IE9ic2VydmFibGUgY2hlIGNvbnRpZW5lIGlsIHJpc3VsdGF0byBkZWxsYSBjaGlhbWF0YVxyXG4gICovXHJcbiAgcHVibGljIHBvc3Q8VD4odXJsOiBzdHJpbmcsIGJvZHlEYXRhOiBhbnksIHBhcmFtczogSHR0cFBhcmFtcyA9IG51bGwsIHRyYW5zYWN0aW9uID0gXCJcIiwgc3VjY2VzZnVsUmVzdWx0TWFuZGF0b3J5OiBib29sZWFuID0gdHJ1ZSk6IE9ic2VydmFibGU8VD4ge1xyXG4gICAgcmV0dXJuIGZyb20oW3RoaXMuZGVmYXVsdFN0YXJ0Q2FsbCh1cmwpXSkucGlwZShcclxuICAgICAgY29uY2F0TWFwKChteUd1aWQ6IHN0cmluZykgPT4ge1xyXG5cclxuICAgICAgICB2YXIgaHR0cENhbGwgPSB0aGlzLmh0dHAucG9zdDxUPih1cmwsIGJvZHlEYXRhLCB7IGhlYWRlcnM6IHRoaXMuZ2V0SGVhZGVycyh0cmFuc2FjdGlvbiksIHBhcmFtczogcGFyYW1zIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gaHR0cENhbGwucGlwZShcclxuICAgICAgICAgIGNhdGNoRXJyb3IoKGVyciwgY2F1Z2h0KTogT2JzZXJ2YWJsZTxUPiA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiAhc3VjY2VzZnVsUmVzdWx0TWFuZGF0b3J5ID8gdGhyb3dFcnJvcihlcnIpIDogdGhpcy5yZWdpc3RlckVycm9yQW5kUmV0dXJuRW1wdHlPYnNlcnZhYmxlKGVyciwgbXlHdWlkKTtcclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgZmluYWxpemUoKCkgPT4geyB0aGlzLnRyeUZpbmFsaXplQnlHdWlkKG15R3VpZCk7IH0pXHJcbiAgICAgICAgKTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG4gIFxyXG4gIC8qKlxyXG4gICogRXNlY3V6aW9uZSBkaSB1bmEgREVMRVRFIEhUVFBcclxuICAqXHJcbiAgKiBAcGFyYW0ge3N0cmluZ30gdXJsIFVSTCBzdSBjdWkgZWZmZXR0dWFyZSBsYSBjaGlhbWF0YVxyXG4gICogQHBhcmFtIHtIdHRwUGFyYW1zfSBwYXJhbXMgUGFyYW1ldHJpIGRlbGxhIGNoaWFtYXRhXHJcbiAgKiBAcGFyYW0ge3N0cmluZ30gdHJhbnNhY3Rpb24gQ29kaWNlIHRyYW5zYXppb25lIGNvbGxlZ2F0byBhIHF1ZXN0YSBjaGlhbWF0YS4gVmllbmUgaW5zZXJpdG8gbmVsbCdIZWFkZXIgXCJYLVRYLUlEXCIgZSBsYXRvIEJhY2tlbmQgZG92csOgIGVzc2VyZSBnZXN0aXRvIGRpIGNvbnNlZ3VlbnphXHJcbiAgKiBAcGFyYW0ge2Jvb2xlYW59IHN1Y2Nlc2Z1bFJlc3VsdE1hbmRhdG9yeSBJbmRpY2EgY2hlIHF1ZXN0YSBjaGlhbWF0YSBkZXZlIGFzc29sdXRhbWVudGUgYW5kYXJlIGJlbmUuIEluIGNhc28gY29udHJhcmlvIHZpZW5lIGZpc2ljYW1lbnRlIGZhdHRvIGlsIHRocm93IGNoZSBwdcOyIGVzc2VyZSBcclxuICAqIHJhY2NvbHRvIGRhIGNoaSB1c2EgbGEgbGlicmVyaWEgbmVsbGEgcGlwZSBcIm9uRXJyb3JcIiBkZWxsJ09ic2VydmFibGUgcmVzdGl0dWl0byBlZCBlc3NlcmUgZ2VzdGl0byBpbiBtYW5pZXJhIG5vbiBzdGFuZGFyZFxyXG4gICogXHJcbiAgKiBAcmV0dXJucyB7T2JzZXJ2YWJsZTxUPn0gT2JzZXJ2YWJsZSBjaGUgY29udGllbmUgaWwgcmlzdWx0YXRvIGRlbGxhIGNoaWFtYXRhXHJcbiAgKi9cclxuICBwdWJsaWMgZGVsZXRlPFQ+KHVybDogc3RyaW5nLCBwYXJhbXM6IEh0dHBQYXJhbXMgPSBudWxsLCB0cmFuc2FjdGlvbiA9IFwiXCIsIHN1Y2Nlc2Z1bFJlc3VsdE1hbmRhdG9yeTogYm9vbGVhbiA9IHRydWUpOiBPYnNlcnZhYmxlPFQ+IHtcclxuXHJcbiAgICByZXR1cm4gZnJvbShbdGhpcy5kZWZhdWx0U3RhcnRDYWxsKHVybCldKS5waXBlKFxyXG4gICAgICBjb25jYXRNYXAoKG15R3VpZDogc3RyaW5nKSA9PiB7XHJcblxyXG4gICAgICAgIHZhciBodHRwQ2FsbCA9IHRoaXMuaHR0cC5kZWxldGU8VD4odXJsLCB7IGhlYWRlcnM6IHRoaXMuZ2V0SGVhZGVycyh0cmFuc2FjdGlvbiksIHBhcmFtczogcGFyYW1zIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gaHR0cENhbGwucGlwZShcclxuICAgICAgICAgIGNhdGNoRXJyb3IoKGVyciwgY2F1Z2h0KTogT2JzZXJ2YWJsZTxUPiA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiAhc3VjY2VzZnVsUmVzdWx0TWFuZGF0b3J5ID8gdGhyb3dFcnJvcihlcnIpIDogdGhpcy5yZWdpc3RlckVycm9yQW5kUmV0dXJuRW1wdHlPYnNlcnZhYmxlKGVyciwgbXlHdWlkKTtcclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgZmluYWxpemUoKCkgPT4geyB0aGlzLnRyeUZpbmFsaXplQnlHdWlkKG15R3VpZCk7IH0pXHJcbiAgICAgICAgKTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFc2VjdXppb25lIGRpIHVuYSBQVVQgSFRUUFxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVVJMIHN1IGN1aSBlZmZldHR1YXJlIGxhIGNoaWFtYXRhXHJcbiAgICogQHBhcmFtIHthbnl9IGJvZHlEYXRhIERUTyBwZXIgbGEgY2hpYW1hdGFcclxuICAgKiBAcGFyYW0ge0h0dHBQYXJhbXN9IHBhcmFtcyBQYXJhbWV0cmkgZGVsbGEgY2hpYW1hdGFcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdHJhbnNhY3Rpb24gQ29kaWNlIHRyYW5zYXppb25lIGNvbGxlZ2F0byBhIHF1ZXN0YSBjaGlhbWF0YS4gVmllbmUgaW5zZXJpdG8gbmVsbCdIZWFkZXIgXCJYLVRYLUlEXCIgZSBsYXRvIEJhY2tlbmQgZG92csOgIGVzc2VyZSBnZXN0aXRvIGRpIGNvbnNlZ3VlbnphXHJcbiAgICogQHBhcmFtIHtib29sZWFufSBzdWNjZXNmdWxSZXN1bHRNYW5kYXRvcnkgSW5kaWNhIGNoZSBxdWVzdGEgY2hpYW1hdGEgZGV2ZSBhc3NvbHV0YW1lbnRlIGFuZGFyZSBiZW5lLiBJbiBjYXNvIGNvbnRyYXJpbyB2aWVuZSBmaXNpY2FtZW50ZSBmYXR0byBpbCB0aHJvdyBjaGUgcHXDsiBlc3NlcmUgXHJcbiAgICogcmFjY29sdG8gZGEgY2hpIHVzYSBsYSBsaWJyZXJpYSBuZWxsYSBwaXBlIFwib25FcnJvclwiIGRlbGwnT2JzZXJ2YWJsZSByZXN0aXR1aXRvIGVkIGVzc2VyZSBnZXN0aXRvIGluIG1hbmllcmEgbm9uIHN0YW5kYXJkXHJcbiAgICogXHJcbiAgICogQHJldHVybnMge09ic2VydmFibGU8VD59IE9ic2VydmFibGUgY2hlIGNvbnRpZW5lIGlsIHJpc3VsdGF0byBkZWxsYSBjaGlhbWF0YVxyXG4gICAqL1xyXG4gIHB1YmxpYyBwdXQ8VD4odXJsOiBzdHJpbmcsIGJvZHlEYXRhOiBhbnksIHBhcmFtczogSHR0cFBhcmFtcyA9IG51bGwsIHRyYW5zYWN0aW9uID0gXCJcIiwgc3VjY2VzZnVsUmVzdWx0TWFuZGF0b3J5OiBib29sZWFuID0gdHJ1ZSk6IE9ic2VydmFibGU8VD4ge1xyXG4gICAgcmV0dXJuIGZyb20oW3RoaXMuZGVmYXVsdFN0YXJ0Q2FsbCh1cmwpXSkucGlwZShcclxuICAgICAgY29uY2F0TWFwKChteUd1aWQ6IHN0cmluZykgPT4ge1xyXG5cclxuICAgICAgICB2YXIgaHR0cENhbGwgPSB0aGlzLmh0dHAucHV0PFQ+KHVybCwgYm9keURhdGEsIHsgaGVhZGVyczogdGhpcy5nZXRIZWFkZXJzKHRyYW5zYWN0aW9uKSwgcGFyYW1zOiBwYXJhbXMgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiBodHRwQ2FsbC5waXBlKFxyXG4gICAgICAgICAgY2F0Y2hFcnJvcigoZXJyLCBjYXVnaHQpOiBPYnNlcnZhYmxlPFQ+ID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuICFzdWNjZXNmdWxSZXN1bHRNYW5kYXRvcnkgPyB0aHJvd0Vycm9yKGVycikgOiB0aGlzLnJlZ2lzdGVyRXJyb3JBbmRSZXR1cm5FbXB0eU9ic2VydmFibGUoZXJyLCBteUd1aWQpO1xyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7IHRoaXMudHJ5RmluYWxpemVCeUd1aWQobXlHdWlkKTsgfSlcclxuICAgICAgICApO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEVzZWN1emlvbmUgZGkgdW5hIFBPU1QgSFRUUFxyXG4gICAqIFxyXG4gICAqIENhc2lzdGljYSBwYXJ0aWNvbGFyZSBpbiBjdWkgYmlzb2duYSBhbmNoZSBpbnZpYXJlIGRlaSBGaWxlXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVybCBVUkwgc3UgY3VpIGVmZmV0dHVhcmUgbGEgY2hpYW1hdGFcclxuICAgKiBAcGFyYW0ge2FueX0gYm9keURhdGEgRFRPIHBlciBsYSBjaGlhbWF0YVxyXG4gICAqIEBwYXJhbSB7RmlsZVtdIHwgRmlsZX0gZmlsZUFycmF5T3JGaWxlIFNpbmdvbG8gZmlsZSBvIGxpc3RhIGRpIGZpbGUgZGEgaW52aWFyZS4gSWwgdGlwbyAqKkZpbGUqKiDDqCBxdWVsbG8gbmF0aXZvIGRlbCBKYXZhc2NyaXB0XHJcbiAgICogXHJcbiAgICogQHJldHVybnMge09ic2VydmFibGU8VD59IE9ic2VydmFibGUgY2hlIGNvbnRpZW5lIGlsIHJpc3VsdGF0byBkZWxsYSBjaGlhbWF0YVxyXG4gICAqL1xyXG4gIHB1YmxpYyBwb3N0d2l0aEZpbGVzPFQ+KHVybDogc3RyaW5nLCBib2R5RGF0YTogYW55LCBmaWxlQXJyYXlPckZpbGU6IEZpbGVbXSB8IEZpbGUpOiBPYnNlcnZhYmxlPFQ+IHtcclxuICAgIHJldHVybiBmcm9tKFt0aGlzLmRlZmF1bHRTdGFydENhbGwodXJsKV0pLnBpcGUoXHJcbiAgICAgIGNvbmNhdE1hcCgobXlHdWlkOiBzdHJpbmcpID0+IHtcclxuXHJcbiAgICAgICAgdmFyIGZvcm1EYXRhID0gdGhpcy5nZXRGaWxlc0Zvcm1EYXRhKGZpbGVBcnJheU9yRmlsZSk7XHJcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKFwiYm9keVwiLCBKU09OLnN0cmluZ2lmeShib2R5RGF0YSkpO1xyXG5cclxuICAgICAgICB2YXIgaHR0cENhbGwgPSB0aGlzLmh0dHAucG9zdDxUPih1cmwsIGZvcm1EYXRhLCB7IGhlYWRlcnM6IHRoaXMuZ2V0SGVhZGVycyhudWxsLCB0cnVlLCBudWxsLCBudWxsKSB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGh0dHBDYWxsLnBpcGUoXHJcbiAgICAgICAgICBjYXRjaEVycm9yKChlcnIsIGNhdWdodCk6IE9ic2VydmFibGU8VD4gPT4geyByZXR1cm4gdGhpcy5yZWdpc3RlckVycm9yQW5kUmV0dXJuRW1wdHlPYnNlcnZhYmxlKGVyciwgbXlHdWlkKTsgfSksXHJcbiAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7IHRoaXMudHJ5RmluYWxpemVCeUd1aWQobXlHdWlkKTsgfSlcclxuICAgICAgICApO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEVzZWN1emlvbmUgZGkgdW5hIFBPU1QgSFRUUFxyXG4gICAqIFxyXG4gICAqIENhc2lzdGljYSBwYXJ0aWNvbGFyZSBpbiBjdWkgdmllbmUgcmVzdGl0dWl0byB1biBmaWxlIGdlc3RpdG8gY29tZSBPYmplY3RVUkwgaWwgY3VpIFVSTCBzaSBwdcOyIGdlc3RpcmUgZGFsIHBhcmFtZXRybyBkaSBjYWxsYmFjayAqKmdldEZpbGVDYWxsYmFjayoqLiBcclxuICAgKiBMYSBjaGlhbWF0YSBub24gaGEgdW4gdGlwbyByZXN0aXR1aXRvIGluIHF1YW50byBpbCByaXN1bHRhdG8gZGV2J2Vzc2VyZSBnZXN0aXRvIGF0dHJhdmVyc28gbGEgY2FsbGJhY2sgKipnZXRGaWxlQ2FsbGJhY2sqKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVVJMIHN1IGN1aSBlZmZldHR1YXJlIGxhIGNoaWFtYXRhXHJcbiAgICogQHBhcmFtIHtLfSBib2R5RGF0YSBEVE8gcGVyIGxhIGNoaWFtYXRhXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIE5vbWUgZGVsIGZpbGUgY2hlIHNpIHN0YSByaWNoaWVkZW5kbywgcmltYW5lIGxhdG8gRnJvbnRlbmQgZSBzZXJ2ZSBwZXIgYXNzZWduYXJlIGFyYml0cmFyaWFtZW50ZSB1biBub21lIGFsIGZpbGUgcmVzdGl0dWl0bywgc2UgdnVvdG8gdmllbmUgdXRpbGl6emF0YSBsYSBDb250ZW50LURpc3Bvc2l0aW9uIGRlbGxhIHJpc3Bvc3RhXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZ2V0RmlsZUNhbGxiYWNrIENhbGxiYWNrIGEgZHVlIHBhcmFtZXRyaSAodXJsOiBzdHJpbmcsIGZpbGVuYW1lOiBzdHJpbmcpIHBlciBnZXN0aXJlIGlsIHJpc3VsdGF0byBkZWwgZmlsZSByaWNoaWVzdG8uICoqVXRpbGl6emFyZSBVdGlsaXR5U2VydmljZS5maWxlRG93bmxvYWQqKiBkaSBAZXNmYWVuemEvZXh0ZW5zaW9uc1xyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGFmdGVyR2V0RmlsZSBDYWxsYmFjayBkYSBjaGlhbWFyZSBkb3BvIGF2ZXIgZ2VzdGl0byBsYSByaXNwb3N0YSBkZWwgKipnZXRGaWxlQ2FsbGJhY2sqKiwgaW4gY2FzbyAqKmhhbmRsZUVycm9yKiogZm9zc2UgKipmYWxzZSoqIHZlcnLDoCByaWNoaWFtYXRvIGFuY2hlIGluIGNhc28gZGkgZXJyb3JlXHJcbiAgICogQHBhcmFtIHtib29sZWFufSBoYW5kbGVFcnJvciBJbmRpY2Egc2UgZGkgZGVmYXVsdCBnbGkgZXJyb3JpIGRldm9ubyBlc3NlcmUgZ2VzdGl0aSBkYWxsYSBsaWJyZXJpYSBvIHNlIGRldm9ubyBlc3NlcmUgaWdub3JhdGlcclxuICAgKi9cclxuICBwdWJsaWMgcG9zdEdldEZpbGU8Sz4odXJsOiBzdHJpbmcsIGJvZHlEYXRhOiBLLCBmaWxlbmFtZTogc3RyaW5nLCBnZXRGaWxlQ2FsbGJhY2s6ICh1cmw6IHN0cmluZywgZmlsZW5hbWU6IHN0cmluZykgPT4gYW55LCBhZnRlckdldEZpbGU6ICgpID0+IGFueSA9IG51bGwsIGhhbmRsZUVycm9yOiBib29sZWFuID0gdHJ1ZSwgcGFycz86IEh0dHBQYXJhbXMpOiB2b2lkIHtcclxuICAgIGxldCBteUd1aWQgPSB0aGlzLmRlZmF1bHRTdGFydENhbGwodXJsKTtcclxuXHJcbiAgICB0aGlzLmh0dHAucG9zdCh1cmwsIGJvZHlEYXRhLCB7IHBhcmFtczogcGFycywgaGVhZGVyczogdGhpcy5nZXRIZWFkZXJzKCksIG9ic2VydmU6ICdyZXNwb25zZScsIHJlc3BvbnNlVHlwZTogXCJibG9iXCIgfSkucGlwZShcclxuICAgICAgY2F0Y2hFcnJvcigoZXJyLCBjYXVnaHQpOiBPYnNlcnZhYmxlPHN0cmluZz4gPT4ge1xyXG4gICAgICAgIGlmIChhZnRlckdldEZpbGUgJiYgIWhhbmRsZUVycm9yKSBhZnRlckdldEZpbGUoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZWdpc3RlckVycm9yQW5kUmV0dXJuRW1wdHlPYnNlcnZhYmxlKGVyciwgbXlHdWlkLCBoYW5kbGVFcnJvcik7XHJcbiAgICAgIH0pLFxyXG4gICAgICBmaW5hbGl6ZSgoKSA9PiB7IHRoaXMudHJ5RmluYWxpemVCeUd1aWQobXlHdWlkKTsgfSlcclxuICAgICkuc3Vic2NyaWJlKChyZXNwb25zZTogSHR0cFJlc3BvbnNlPEJsb2I+KSA9PiB7XHJcbiAgICAgIGxldCByZXRVcmwgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChyZXNwb25zZS5ib2R5KTtcclxuICAgICAgbGV0IGZuID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoJ2NvbnRlbnQtZGlzcG9zaXRpb24nKT8uc3BsaXQoJzsnKVsxXT8uc3BsaXQoJ2ZpbGVuYW1lJylbMV0/LnNwbGl0KCc9JylbMV0/LnRyaW0oKS5yZXBsYWNlKC9cXFwiL2csICcnKTtcclxuXHJcbiAgICAgIGdldEZpbGVDYWxsYmFjayhyZXRVcmwsIGZpbGVuYW1lIHx8IGZuKTtcclxuICAgICAgaWYgKGFmdGVyR2V0RmlsZSkgYWZ0ZXJHZXRGaWxlKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEVzZWN1emlvbmUgZGkgdW5hIEdFVCBIVFRQXHJcbiAgICogXHJcbiAgICogQ2FzaXN0aWNhIHBhcnRpY29sYXJlIGluIGN1aSB2aWVuZSByZXN0aXR1aXRvIHVuIGZpbGUgZ2VzdGl0byBjb21lIE9iamVjdFVSTCBpbCBjdWkgVVJMIHNpIHB1w7IgZ2VzdGlyZSBkYWwgcGFyYW1ldHJvIGRpIGNhbGxiYWNrICoqZ2V0RmlsZUNhbGxiYWNrKiouIFxyXG4gICAqIExhIGNoaWFtYXRhIG5vbiBoYSB1biB0aXBvIHJlc3RpdHVpdG8gaW4gcXVhbnRvIGlsIHJpc3VsdGF0byBkZXYnZXNzZXJlIGdlc3RpdG8gYXR0cmF2ZXJzbyBsYSBjYWxsYmFjayAqKmdldEZpbGVDYWxsYmFjayoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVybCBVUkwgc3UgY3VpIGVmZmV0dHVhcmUgbGEgY2hpYW1hdGFcclxuICAgKiBAcGFyYW0ge0h0dHBQYXJhbXN9IHBhcmFtcyBQYXJhbWV0cmkgZGVsbGEgY2hpYW1hdGFcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgTm9tZSBkZWwgZmlsZSBjaGUgc2kgc3RhIHJpY2hpZWRlbmRvLCByaW1hbmUgbGF0byBGcm9udGVuZCBlIHNlcnZlIHBlciBhc3NlZ25hcmUgYXJiaXRyYXJpYW1lbnRlIHVuIG5vbWUgYWwgZmlsZSByZXN0aXR1aXRvLCBzZSB2dW90byB2aWVuZSB1dGlsaXp6YXRhIGxhIENvbnRlbnQtRGlzcG9zaXRpb24gZGVsbGEgcmlzcG9zdGFcclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBnZXRGaWxlQ2FsbGJhY2sgQ2FsbGJhY2sgYSBkdWUgcGFyYW1ldHJpICh1cmw6IHN0cmluZywgZmlsZW5hbWU6IHN0cmluZykgcGVyIGdlc3RpcmUgaWwgcmlzdWx0YXRvIGRlbCBmaWxlIHJpY2hpZXN0by4gKipVdGlsaXp6YXJlIFV0aWxpdHlTZXJ2aWNlLmZpbGVEb3dubG9hZCoqIGRpIEBlc2ZhZW56YS9leHRlbnNpb25zXHJcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gYWZ0ZXJHZXRGaWxlIENhbGxiYWNrIGRhIGNoaWFtYXJlIGRvcG8gYXZlciBnZXN0aXRvIGxhIHJpc3Bvc3RhIGRlbCAqKmdldEZpbGVDYWxsYmFjayoqLCBpbiBjYXNvICoqaGFuZGxlRXJyb3IqKiBmb3NzZSAqKmZhbHNlKiogdmVycsOgIHJpY2hpYW1hdG8gYW5jaGUgaW4gY2FzbyBkaSBlcnJvcmVcclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGhhbmRsZUVycm9yIEluZGljYSBzZSBkaSBkZWZhdWx0IGdsaSBlcnJvcmkgZGV2b25vIGVzc2VyZSBnZXN0aXRpIGRhbGxhIGxpYnJlcmlhIG8gc2UgZGV2b25vIGVzc2VyZSBpZ25vcmF0aVxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXRGaWxlKHVybDogc3RyaW5nLCBwYXJhbXM6IEh0dHBQYXJhbXMgPSBudWxsLCBmaWxlbmFtZTogc3RyaW5nLCBnZXRGaWxlQ2FsbGJhY2s6ICh1cmw6IHN0cmluZywgZmlsZW5hbWU6IHN0cmluZykgPT4gYW55LCBhZnRlckdldEZpbGU6ICgpID0+IGFueSA9IG51bGwsIGhhbmRsZUVycm9yOiBib29sZWFuID0gdHJ1ZSk6IHZvaWQge1xyXG4gICAgbGV0IG15R3VpZCA9IHRoaXMuZGVmYXVsdFN0YXJ0Q2FsbCh1cmwpO1xyXG5cclxuICAgIHRoaXMuaHR0cC5nZXQodXJsLCB7IHBhcmFtczogcGFyYW1zLCBoZWFkZXJzOiB0aGlzLmdldEhlYWRlcnMoKSwgb2JzZXJ2ZTogJ3Jlc3BvbnNlJywgcmVzcG9uc2VUeXBlOiBcImJsb2JcIiB9KS5waXBlKFxyXG4gICAgICBjYXRjaEVycm9yKChlcnIsIGNhdWdodCk6IE9ic2VydmFibGU8c3RyaW5nPiA9PiB7XHJcbiAgICAgICAgaWYgKGFmdGVyR2V0RmlsZSAmJiAhaGFuZGxlRXJyb3IpIGFmdGVyR2V0RmlsZSgpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlZ2lzdGVyRXJyb3JBbmRSZXR1cm5FbXB0eU9ic2VydmFibGUoZXJyLCBteUd1aWQsIGhhbmRsZUVycm9yKTtcclxuICAgICAgfSksXHJcbiAgICAgIGZpbmFsaXplKCgpID0+IHsgdGhpcy50cnlGaW5hbGl6ZUJ5R3VpZChteUd1aWQpOyB9KVxyXG4gICAgKS5zdWJzY3JpYmUoKHJlc3BvbnNlOiBIdHRwUmVzcG9uc2U8QmxvYj4pID0+IHtcclxuICAgICAgbGV0IHJldFVybCA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKHJlc3BvbnNlLmJvZHkpO1xyXG4gICAgICBsZXQgZm4gPSByZXNwb25zZS5oZWFkZXJzLmdldCgnY29udGVudC1kaXNwb3NpdGlvbicpPy5zcGxpdCgnOycpWzFdPy5zcGxpdCgnZmlsZW5hbWUnKVsxXT8uc3BsaXQoJz0nKVsxXT8udHJpbSgpLnJlcGxhY2UoL1xcXCIvZywgJycpO1xyXG5cclxuICAgICAgZ2V0RmlsZUNhbGxiYWNrKHJldFVybCwgZmlsZW5hbWUgfHwgZm4pO1xyXG4gICAgICBpZiAoYWZ0ZXJHZXRGaWxlKSBhZnRlckdldEZpbGUoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRG93bmxvYWQgbmF0aXZvIGRpIHVuIGZpbGUuIEludGVybmFtZW50ZSB1dGlsaXp6YSBpbCBwYXR0ZXJuICoqd2luZG93LmxvY2F0aW9uLmhyZWYgPSBcIi4uLlwiKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsIFVSTCBzdSBjdWkgZWZmZXR0dWFyZSBsYSBjaGlhbWF0YVxyXG4gICAqIEBwYXJhbSB7SHR0cFBhcmFtc30gcGFyYW1zIFBhcmFtZXRyaSBkZWxsYSBjaGlhbWF0YVxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXRGaWxlTmF0aXZlKHVybDogc3RyaW5nLCBwYXJhbXM6IEh0dHBQYXJhbXMgPSBudWxsKTogdm9pZCB7XHJcbiAgICB2YXIgZW5jb2RlZFBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XHJcbiAgICAvLyBFbmNvZG8gdHV0dGkgaSBwYXJhbWV0cmkgcGVyIGV2aXRhcmUgY2FzaSBwYXJ0aWNvbGFyaVxyXG4gICAgbGV0IHBhcktleXMgPSBwYXJhbXMua2V5cygpO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJLZXlzLmxlbmd0aDsgaSsrKVxyXG4gICAgICBlbmNvZGVkUGFyYW1zID0gZW5jb2RlZFBhcmFtcy5zZXQocGFyS2V5c1tpXSwgZW5jb2RlVVJJQ29tcG9uZW50KHBhcmFtcy5nZXQocGFyS2V5c1tpXSkpKTtcclxuXHJcbiAgICBsZXQgZmluYWxVcmwgPSB1cmwgKyAocGFyYW1zID8gXCI/XCIgKyBlbmNvZGVkUGFyYW1zLnRvU3RyaW5nKCkgOiBcIlwiKTtcclxuICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gZmluYWxVcmw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFc2VjdXppb25lIGRpIHVuYSBHRVQgZGkgdW4gZmlsZSBjaGUgZW1ldHRlIGkgdmFyaSBldmVudGkgZGkgcHJvZ3Jlc3NvIGRpIGRvd25sb2FkLlxyXG4gICAqIFV0aWxpenphcmxhIHBlciBvdmVycmlkYXJlIGxhIGRpYWxvZyBuYXRpdmEgZGkgcHJvZ3Jlc3MgZGVsIGJyb3dzZXIgZSBzb3N0aXR1aXJsYSBjb24gcXVhbGNvc2EgdGlwbyBxdWVsbG8gY2hlIGZhIE1FR0EuXHJcbiAgICogXHJcbiAgICogSW4gY2FzbyBzaSB2b2dsaWEgb3R0ZW5lcmUgaWwgcmlzdWx0YXRvIG5hdGl2byBkZWwgYnJvd3NlciBkZWwgZG93bmxvYWQgdXRpbGl6emFyZSAqKmdldEZpbGVOYXRpdmUodXJsLCBwYXJzKSoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVybCBVUkwgc3UgY3VpIGVmZmV0dHVhcmUgbGEgY2hpYW1hdGFcclxuICAgKiBAcGFyYW0ge0h0dHBQYXJhbXN9IHBhcmFtcyBQYXJhbWV0cmkgZGVsbGEgY2hpYW1hdGFcclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBnZXRGaWxlQ2FsbGJhY2sgQ2FsbGJhY2sgYSBkdWUgcGFyYW1ldHJpICh1cmw6IHN0cmluZywgZmlsZW5hbWU6IHN0cmluZykgcGVyIGdlc3RpcmUgaWwgcmlzdWx0YXRvIGRlbCBmaWxlIHJpY2hpZXN0by4gKipVdGlsaXp6YXJlIFV0aWxpdHlTZXJ2aWNlLmZpbGVEb3dubG9hZCoqIGRpIEBlc2ZhZW56YS9leHRlbnNpb25zXHJcbiAgICogXHJcbiAgICogQHJldHVybnMge09ic2VydmFibGU8RG93bmxvYWQ+fSBPYnNlcnZhYmxlIGRlaSB2YXJpIHN0ZXAgZGkgcHJvZ3Jlc3NvIGRlbCBkb3dubG9hZFxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXRGaWxlV2l0aFByb2dyZXNzKHVybDogc3RyaW5nLCBwYXJhbXM6IEh0dHBQYXJhbXMgPSBudWxsLCBnZXRGaWxlQ2FsbGJhY2s6ICh1cmw6IHN0cmluZywgZmlsZW5hbWU6IHN0cmluZykgPT4gYW55KTogT2JzZXJ2YWJsZTxEb3dubG9hZD4ge1xyXG4gICAgbGV0IG15R3VpZCA9IHRoaXMuZGVmYXVsdFN0YXJ0Q2FsbCh1cmwpO1xyXG5cclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHVybCwgeyByZXNwb25zZVR5cGU6ICdibG9iJywgaGVhZGVyczogdGhpcy5nZXRIZWFkZXJzKCksIHBhcmFtczogcGFyYW1zLCBvYnNlcnZlOiAnZXZlbnRzJywgcmVwb3J0UHJvZ3Jlc3M6IHRydWUgfSlcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgc2NhbigocHJldmlvdXM6IERvd25sb2FkLCBldmVudDogSHR0cEV2ZW50PEJsb2I+KTogRG93bmxvYWQgPT4ge1xyXG5cclxuICAgICAgICAgIGlmICh0aGlzLmlzSHR0cFByb2dyZXNzRXZlbnQoZXZlbnQpKSB7XHJcbiAgICAgICAgICAgIGxldCBwcm9ncmVzcyA9IGV2ZW50LnRvdGFsID8gKGV2ZW50LmxvYWRlZCA+IGV2ZW50LnRvdGFsID8gMTAwIDogTWF0aC5yb3VuZCgoMTAwICogZXZlbnQubG9hZGVkKSAvIGV2ZW50LnRvdGFsKSkgOiBwcmV2aW91cy5wcm9ncmVzcztcclxuICAgICAgICAgICAgcmV0dXJuIHsgcHJvZ3Jlc3M6IHByb2dyZXNzLCBzdGF0ZTogJ0lOX1BST0dSRVNTJywgY29udGVudDogbnVsbCB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuaXNIdHRwUmVzcG9uc2UoZXZlbnQpKSB7XHJcbiAgICAgICAgICAgIGlmIChldmVudC5ib2R5KSB7XHJcbiAgICAgICAgICAgICAgbGV0IGNkaXNwID0gZXZlbnQuaGVhZGVycy5nZXQoJ2NvbnRlbnQtZGlzcG9zaXRpb24nKTtcclxuICAgICAgICAgICAgICBsZXQgY2Rpc3BGaWxlbmFtZSA9IGNkaXNwLnNwbGl0KCc7JylbMV0uc3BsaXQoJ2ZpbGVuYW1lJylbMV0uc3BsaXQoJz0nKVsxXS50cmltKCkucmVwbGFjZSgvXFxcIi9nLCAnJyk7XHJcbiAgICAgICAgICAgICAgbGV0IHJldFVybCA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGV2ZW50LmJvZHkpO1xyXG4gICAgICAgICAgICAgIGdldEZpbGVDYWxsYmFjayhyZXRVcmwsIGNkaXNwRmlsZW5hbWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB7IHByb2dyZXNzOiAxMDAsIHN0YXRlOiAnRE9ORScsIGNvbnRlbnQ6IGV2ZW50LmJvZHkgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHJldHVybiBwcmV2aW91cztcclxuICAgICAgICB9LCB7IHN0YXRlOiAnUEVORElORycsIHByb2dyZXNzOiAwLCBjb250ZW50OiBudWxsIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVyciwgXyk6IE9ic2VydmFibGU8RG93bmxvYWQ+ID0+IHsgcmV0dXJuIHRoaXMucmVnaXN0ZXJFcnJvckFuZFJldHVybkVtcHR5T2JzZXJ2YWJsZShlcnIsIG15R3VpZCkgfSksXHJcbiAgICAgICAgZmluYWxpemUoKCkgPT4geyB0aGlzLnRyeUZpbmFsaXplQnlHdWlkKG15R3VpZCk7IH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSaWNvbm9zY2Ugc2UgbCdldmVudG8gSFRUUCDDqCBkaSB0aXBvICoqSHR0cFJlc3BvbnNlKiogZSwgc2Ugc8OsLCBsbyBjYXN0YSBhbCB0aXBvIGNvcnJldHRvIHBlciBlc3NlcmUgdXRpbGl6emF0byBjb3JyZXR0YW1lbnRlIG5lbCBibG9jY28gZGkgY29kaWNlIHN1Y2Nlc3Npdm9cclxuICAgKi9cclxuICAgcHJpdmF0ZSBpc0h0dHBSZXNwb25zZTxUPihldmVudDogSHR0cEV2ZW50PFQ+KTogZXZlbnQgaXMgSHR0cFJlc3BvbnNlPFQ+IHtcclxuICAgIHJldHVybiBldmVudC50eXBlID09PSBIdHRwRXZlbnRUeXBlLlJlc3BvbnNlXHJcbiAgfVxyXG4gIFxyXG4gIC8qKlxyXG4gICAqIFJpY29ub3NjZSBzZSBsJ2V2ZW50byBIVFRQIMOoIGRpIHRpcG8gKipIdHRwUHJvZ3Jlc3NFdmVudCoqIGUsIHNlIHPDrCwgbG8gY2FzdGEgYWwgdGlwbyBjb3JyZXR0byBwZXIgZXNzZXJlIHV0aWxpenphdG8gY29ycmV0dGFtZW50ZSBuZWwgYmxvY2NvIGRpIGNvZGljZSBzdWNjZXNzaXZvXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBpc0h0dHBQcm9ncmVzc0V2ZW50KGV2ZW50OiBIdHRwRXZlbnQ8dW5rbm93bj4pOiBldmVudCBpcyBIdHRwUHJvZ3Jlc3NFdmVudCB7XHJcbiAgICByZXR1cm4gZXZlbnQudHlwZSA9PT0gSHR0cEV2ZW50VHlwZS5Eb3dubG9hZFByb2dyZXNzIHx8IGV2ZW50LnR5cGUgPT09IEh0dHBFdmVudFR5cGUuVXBsb2FkUHJvZ3Jlc3NcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdlc3Rpb25lIGRlbGwnaW5pemlvIGRpIHVuYSBjaGlhbWF0YSBhZCB1biBjZXJ0byBVUkwsIHZpZW5lIGdlbmVyYXRvIHVuIEdVSUQgZGEgYXNzZWduYXJjaSwgY29udHJvbGxhdGEgbGEgc2NhZGVuemEgZGVsbGEgY2FjaGUsIFxyXG4gICAqIGUgZXZlbnR1YWxtZW50ZSBsb2dnYXRvIGlsIGZhdHRvIGNoZSBzdGEgcGVyIGVzc2VyZSBlZmZldHR1YXRhIHVuYSBjaGlhbWF0YSBIVFRQXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVybCBVcmwgYSBjdWkgZWZmZXR0dWFyZSBsYSBjaGlhbWF0YVxyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IEdVSUQgYXNzZWduYXRvIGFsbGEgY2hpYW1hdGFcclxuICAgKi9cclxuICBwcml2YXRlIGRlZmF1bHRTdGFydENhbGwodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgbGV0IG15R3VpZCA9IHRoaXMuZ2V0R1VJRCgpO1xyXG4gICAgdGhpcy5jaGVja0NhY2hlSW52YWxpZGF0aW9uKHVybCk7XHJcbiAgICB0aGlzLmNhbGxTdGF0dXNbbXlHdWlkXSA9IHsgdXJsOiB1cmwsIHN1Y2Nlc3M6IHRydWUgfTtcclxuICAgIHRoaXMubG9nKHRoaXMubG9jKFwiU3RhcnRpbmcgY2FsbFwiKSArIFwiIFwiICsgbXlHdWlkICsgXCIgXCIgKyB0aGlzLmxvYyhcImF0IFVSTFwiKSArIFwiOiBcIiArIHVybCk7XHJcbiAgICByZXR1cm4gbXlHdWlkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGF0byB1biB1cmwgdmVuZ29ubyBjb250cm9sbGF0ZSBsZSBpbmZvcm1hemlvbmkgc3UgdHV0dGkgZ2xpIHVybCBkYSBpbnZhbGlkYXJlIGNvbGxlZ2F0aSBhbGwndXJsIGNoaWFtYXRvIGUsIHNlIHByZXNlbnRpIGluIGNhY2hlLCBpbnZhbGlkYXRpXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVybCBVUkwgcGVyIGN1aSBjb250cm9sbGFyZSBzZSBjaSBzb25vIGNoaWFtYXRlIGluIGNhY2hlIGRhIGludmFsaWRhcmVcclxuICAgKi9cclxuICBwcml2YXRlIGNoZWNrQ2FjaGVJbnZhbGlkYXRpb24odXJsOiBzdHJpbmcpIHtcclxuICAgIGxldCBjYWNoZSA9IHRoaXMubG9jYWxTdG9yYWdlLmdldExvY2FsSXRlbTxhbnk+KHRoaXMubG9jYWxTdG9yYWdlSHR0cENhY2hlS2V5KTtcclxuICAgIGxldCB0bXAgPSAvI2NhY2hlKDo/LShcXGQrKSkvZ2kuZXhlYyh1cmwpO1xyXG4gICAgbGV0IGNhY2hlVGltZSA9IHRtcCA/IHRtcFsyXSA6IG51bGw7XHJcbiAgICBsZXQgbm9ybWFsaXplZFVybCA9IHVybC5yZXBsYWNlKFwiI2NhY2hlXCIgKyAoY2FjaGVUaW1lID8gXCItXCIgKyBjYWNoZVRpbWUgOiBcIlwiKSwgXCJcIikucmVwbGFjZSh0aGlzLkJBQ0tFTkRfVVJMLCBcIlwiKTtcclxuXHJcbiAgICBpZiAoIWNhY2hlIHx8ICF0aGlzLkhUVFBfSU5WQUxJREFUSU9OIHx8ICF0aGlzLkhUVFBfSU5WQUxJREFUSU9OW25vcm1hbGl6ZWRVcmxdKVxyXG4gICAgICByZXR1cm47XHJcblxyXG4gICAgbGV0IGFwaXNUb0ludmFsaWRhdGU6IHN0cmluZ1tdID0gdGhpcy5IVFRQX0lOVkFMSURBVElPTltub3JtYWxpemVkVXJsXTtcclxuICAgIGlmICghYXBpc1RvSW52YWxpZGF0ZSB8fCBhcGlzVG9JbnZhbGlkYXRlLmxlbmd0aCA9PSAwKVxyXG4gICAgICByZXR1cm47XHJcblxyXG4gICAgbGV0IGtleXNUb1JlbW92ZTogc3RyaW5nW10gPSBbXTtcclxuICAgIGFwaXNUb0ludmFsaWRhdGUuZm9yRWFjaChhcGkgPT4ge1xyXG4gICAgICBsZXQgY2FjaGVLZXkgPSB0aGlzLm1ha2VDYWNoZUtleShhcGksIG51bGwpO1xyXG4gICAgICBmb3IgKGxldCBpdGVtIGluIGNhY2hlKVxyXG4gICAgICAgIGlmIChpdGVtLmluZGV4T2YoY2FjaGVLZXkpICE9IC0xKVxyXG4gICAgICAgICAga2V5c1RvUmVtb3ZlLnB1c2goaXRlbSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXNUb1JlbW92ZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgayA9IGtleXNUb1JlbW92ZVtpXTtcclxuICAgICAgdGhpcy5sb2codGhpcy5sb2MoXCJJbnZsYWxpZGF0aW5nIGNhY2hlIGVsZW1lbnRcIikgKyBcIiBcIiArIGspO1xyXG4gICAgICBkZWxldGUgY2FjaGVba107XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5sb2NhbFN0b3JhZ2Uuc2V0TG9jYWxJdGVtKHRoaXMubG9jYWxTdG9yYWdlSHR0cENhY2hlS2V5LCBjYWNoZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGaW5hbGl6emF6aW9uZSBkaSB1bmEgY2hpYW1hdGFcclxuICAgKiBcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gZ3VpZCBHVUlEIGNvbGxlZ2F0byBhbGxhIGNoaWFtYXRhIGFwcGVuYSB0ZXJtaW5hdGFcclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHBlcnNpc3RDYWNoZUlmSWRsZSBFZmZldHR1YSBpbCBwZXJzaXN0IGRlbGxhIGNhY2hlIEhUVFAgc29sbyBzZSBub24gY2kgc29ubyBhbHRyZSBjaGlhbWF0ZSBpbiBjb3JzbywgcGVyIGV2aXRhcmVcclxuICAgKiBjaGUgbWkgY2FtYmkgc290dG8gbCdvZ2dldHRvIGRpIGNhY2hlIG1lbnRyZSBzdG8gc2FsdmFuZG8gbGUgaW5mb3JtYXppb25pXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBhc3luYyB0cnlGaW5hbGl6ZUJ5R3VpZChndWlkOiBzdHJpbmcsIGNhY2hlSW5mb3M/OiBDYWNoZUluZm9zKSB7XHJcbiAgICB0aGlzLmxvZyh0aGlzLmxvYyhcIkZpbmFsaXppbmcgY2FsbFwiKSArIFwiIFwiICsgZ3VpZCArIFwiIFwiICsgdGhpcy5sb2MoXCJ3aXRoIHN0YXR1c1wiKSArIFwiOiBcIiArICghdGhpcy5jYWxsU3RhdHVzW2d1aWRdID8gJ1Vua25vd24nIDogdGhpcy5jYWxsU3RhdHVzW2d1aWRdLnN1Y2Nlc3MgPyB0aGlzLmxvYygnU3VjY2VzcycpIDogdGhpcy5sb2MoJ0ZhaWx1cmUnKSkpO1xyXG5cclxuICAgIC8vIFRPRE86IFBlcmRlcmUgMy00IG9yZSBwZXIgY2FwaXJlIHBlcmNow6kgb2duaSB0YW50byBhcnJpdmEgbnVsbCBpbiBjYXNpIHBlc2FudGkgZGkgT2JzZXJ2YWJsZSBzcGFtbWF0aSBhIHJhbmRvbVxyXG4gICAgaWYgKHRoaXMuY2FsbFN0YXR1c1tndWlkXSkge1xyXG4gICAgICAvLyBBbGxhIHByaW1hIGNoaWFtYXRhIGJ1b25hLCBzaWduaWZpY2EgY2hlIGFsbWVubyBpbCBsb2dpbiBjZSBsJ2hvLiBQb3NzbyBtZXR0ZXJtaSBpbiBtb2RhbGl0w6AgcmVkaXJlY3RJblByb2dyZXNzIGZhbHNlXHJcbiAgICAgIC8vIGUgcmlpbml6aWFyZSBhIHZhbHV0YXJlIGVycm9yaSBkaSBqYXZhc2hpdFxyXG4gICAgICBpZiAodGhpcy5jYWxsU3RhdHVzW2d1aWRdLnN1Y2Nlc3MgJiYgdGhpcy5FeHRlbnNpb25zSW1wbC5yZWFkUmVkaXJlY3Rpb25TdGF0dXMoKSlcclxuICAgICAgICB0aGlzLkV4dGVuc2lvbnNJbXBsLndyaXRlUmVkaXJlY3Rpb25TdGF0dXMoZmFsc2UpO1xyXG5cclxuICAgICAgLy8gQWdnaXVuZ28gbGEgY2hpYW1hdGEgYWxsYSBsaXN0YSBkZWxsZSB1bHRpbWUgMyBjb21wbGV0YXRlXHJcbiAgICAgIHRoaXMuTGFzdFRocmVlQ29tcGxldGVkQ2FsbHMudW5zaGlmdCh0aGlzLmNhbGxTdGF0dXNbZ3VpZF0udXJsKVxyXG4gICAgICBpZiAodGhpcy5MYXN0VGhyZWVDb21wbGV0ZWRDYWxscy5sZW5ndGggPiAzKVxyXG4gICAgICAgIHRoaXMuTGFzdFRocmVlQ29tcGxldGVkQ2FsbHMucG9wKCk7XHJcblxyXG4gICAgICAvLyBJbiBvZ25pIGNhc28gcXVlc3RhIHBvc3NvIHJpbXVvdmVybGFcclxuICAgICAgZGVsZXRlIHRoaXMuY2FsbFN0YXR1c1tndWlkXTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBTZSB2ZW5nbyBkYSB1bmEgY2hpYW1hdGEgY2hlIGhhIGFnZ2lvcm5hdG8gbGEgY2FjaGUgYSB0aW1lciBvIGdsb2JhbGUgbWFyY28gaWwgZmF0dG8gY2hlIHF1ZWxsYSBjYWNoZSBkZXYnZXNzZXJlIGFnZ2lvcm5hdGFcclxuICAgIGlmIChjYWNoZUluZm9zICYmIGNhY2hlSW5mb3MuY2FjaGUpIHtcclxuICAgICAgdGhpcy5QZXJzaXN0VGltZWRDYWNoZUFTQVAgPSB0aGlzLlBlcnNpc3RUaW1lZENhY2hlQVNBUCB8fCAhIWNhY2hlSW5mb3MuY2FjaGVUaW1lO1xyXG4gICAgICB0aGlzLlBlcnNpc3RVbnRpbWVkQ2FjaGVBU0FQID0gdGhpcy5QZXJzaXN0VGltZWRDYWNoZUFTQVAgfHwgIWNhY2hlSW5mb3MuY2FjaGVUaW1lO1xyXG4gICAgICB0aGlzLmxvZyh0aGlzLmxvYyhcIk1hcmtpbmcgY2FjaGUgdG8gYmUgcGVyc2lzdGVkIGFzIHNvb24gYXMgcG9zc2libGVcIikpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFNlIHVuYSBkZWxsZSBkdWUgY2FjaGUgZGV2b25vIGVzc2VyZSBhZ2dpb3JuYXRlIGUgbm9uIGhvIG5lc3N1bmEgY2hpYW1hdGEgaW4gY29yc28gZWZmZXR0dW8gbCdhZ2dpb3JuYW1lbnRvIGluIGJhc2UgYSBxdWFsZSBkZWxsZSBkdWUgdmEgYWdnaW9ybmF0YVxyXG4gICAgLy8gQWxsYSBmaW5lIGRpIHR1dHRvIG1hcmNvIGNvbWUgZmF0dG9cclxuICAgIGlmICgodGhpcy5QZXJzaXN0VGltZWRDYWNoZUFTQVAgfHwgdGhpcy5QZXJzaXN0VW50aW1lZENhY2hlQVNBUCkgJiYgT2JqZWN0LmtleXModGhpcy5jYWxsU3RhdHVzKS5sZW5ndGggPT0gMCkge1xyXG5cclxuICAgICAgdmFyIHRvQ2FsbCA9IFtdO1xyXG4gICAgICBsZXQgdG1wS2V5ID0gXCJcIjtcclxuICAgICAgaWYgKHRoaXMuUGVyc2lzdFRpbWVkQ2FjaGVBU0FQKSB7XHJcbiAgICAgICAgdG1wS2V5ID0gdGhpcy5sb2NhbFN0b3JhZ2VIdHRwVGltZWRDYWNoZUtleTtcclxuICAgICAgICB0b0NhbGwucHVzaCh0aGlzLmxvY2FsU3RvcmFnZS5zZXRJdGVtKHRtcEtleSwgdGhpcy5sb2NhbFN0b3JhZ2UuZ2V0TG9jYWxJdGVtKHRtcEtleSkpKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMuUGVyc2lzdFVudGltZWRDYWNoZUFTQVApIHtcclxuICAgICAgICB0bXBLZXkgPSB0aGlzLmxvY2FsU3RvcmFnZUh0dHBDYWNoZUtleTtcclxuICAgICAgICB0b0NhbGwucHVzaCh0aGlzLmxvY2FsU3RvcmFnZS5zZXRJdGVtKHRtcEtleSwgdGhpcy5sb2NhbFN0b3JhZ2UuZ2V0TG9jYWxJdGVtKHRtcEtleSkpKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5sb2codGhpcy5sb2MoXCJObyBtb3JlIEhUVFAgY2FsbHMgdG8gYmUgZXhlY3V0ZWQsIGVudGVyaW5nIGlkbGUgc3RhdGUgYW5kIHBlcnNpc3RpbmcgbW9kaWZpZWQgY2FjaGVzXCIpICsgXCIuLi5cIik7XHJcbiAgICAgIHZhciByZXQgPSBhd2FpdCBmb3JrSm9pbih0b0NhbGwpLnRvUHJvbWlzZSgpO1xyXG4gICAgICBpZiAocmV0KVxyXG4gICAgICAgIHRoaXMubG9nKHRoaXMubG9jKFwiQ2FjaGVzIHN1Y2Nlc2Z1bGx5IHBlcnNpc3RlZFwiKSk7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICB0aGlzLmxvZyh0aGlzLmxvYyhcIkVycm9ycyBwZXJzaXN0aW5nIG1vZGlmaWVkIGNhY2hlc1wiKSk7XHJcbiAgICAgIHRoaXMuUGVyc2lzdFRpbWVkQ2FjaGVBU0FQID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuUGVyc2lzdFVudGltZWRDYWNoZUFTQVAgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEhlbHBlciBjaGUgZGF0byB1biB1bmljbyBGaWxlIG8gdW5hIGxpc3RhIGRpIEZpbGUgY3JlYSB1biBvZ2dldHRvIEZvcm1EYXRhIGNoZSBwdcOyIGVzc2VyZSBpbnZpYXRvIGNvbW9kYW1lbnRlIFxyXG4gICAqIGFkIHVuIGJhY2tlbmQgQVNQLk5FVCBkYSBjdWkgc2kgcG90csOgIGFjY2VkZXJlIGEgUmVxdWVzdC5Gb3JtLkZpbGVzXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHtGaWxlIHwgRmlsZVtdfSBmaWxlQXJyYXlPckZpbGUgU2luZ29sbyBGaWxlIG8gbGlzdGEgZGkgRmlsZS4gTi5COiBuZWxsYSBmaXJtYSBkZWxsYSBmdW56aW9uZSB2aWVuZSBjb25zaWRlcmF0byAqKmFueSoqIHBlciBmYXJlIHRlc3Qgc3VsbGUgcHJvcHJpZXTDoCBcclxuICAgKiBpbnZlY2UgY2hlIGZhcmUgdGVzdCBjb24gbCcqKmlzdGFuY2VvZioqXHJcbiAgICogXHJcbiAgICogQHJldHVybnMge0Zvcm1EYXRhfSBGb3JtRGF0YSBjb250ZW5lbnRlIHR1dHRpIGkgZmlsZSBwYXNzYXRpXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZXRGaWxlc0Zvcm1EYXRhKGZpbGVBcnJheU9yRmlsZTogYW55KTogRm9ybURhdGEge1xyXG4gICAgdmFyIGZvcm1EYXRhOiBGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xyXG5cclxuICAgIGlmIChmaWxlQXJyYXlPckZpbGUpIHtcclxuICAgICAgaWYgKGZpbGVBcnJheU9yRmlsZS5sZW5ndGgpXHJcbiAgICAgICAgZmlsZUFycmF5T3JGaWxlLmZvckVhY2godCA9PiB7IGZvcm1EYXRhLmFwcGVuZChcImZpbGVcIiwgdCwgdC5uYW1lKTsgfSk7XHJcbiAgICAgIGVsc2UgaWYgKGZpbGVBcnJheU9yRmlsZS5uYW1lKVxyXG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZChcImZpbGVzXCIsIGZpbGVBcnJheU9yRmlsZSwgZmlsZUFycmF5T3JGaWxlLm5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmb3JtRGF0YTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEhlbHBlciBjaGUgaW4gYmFzZSBhaSBwYXJhbWV0cmkgZGlzcG9uaWJpbGkgZ2VuZXJhIGdsaSBIZWFkZXIgSFRUUCBwZXIgbGEgY2hpYW1hdGEgZGEgZWZmZXR0dWFyZVxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZW50VHlwZSBJbmRpY2Egc2UgYWdnaXVuZ2VyZSBhZ2xpIGhlYWRlciBcIkNvbnRlbnQtVHlwZVwiLCB2YWxvcml6emF0byBhbCB2YWxvcmUgZGVsIHBhcmFtZXRyb1xyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhY2NlcHQgSW5kaWNhIHNlIGFnZ2l1bmdlcmUgYWdsaSBoZWFkZXIgXCJBY2NlcHRcIiwgdmFsb3JpenphdG8gYWwgdmFsb3JlIGRlbCBwYXJhbWV0cm9cclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGluY2x1ZGVBdXRoIEluZGljYSBzZSBhZ2dpdW5nZXJlIGFnbGkgaGVhZGVyIFwiQXV0aG9yaXphdGlvblwiLCB2YWxvcml6emF0byBjb2wgdG9rZW4gcmVjdXBlcmF0byBkYWxsJ2hvb2sgKipyZXRyaWV2ZUFjY2Vzc1Rva2VuKiogZGVsbGEgY2xhc3NlIGRpIGVzdGVuc2lvbmVcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdHJhbnNhY3Rpb25JZCBJbmRpY2Egc2UgYWdnaXVuZ2VyZSBhZ2xpIGhlYWRlciBcIlgtVFgtSURcIiwgdmFsb3JpenphdG8gYWwgdmFsb3JlIGRlbCBwYXJhbWV0cm9cclxuICAgKiBcclxuICAgKiBAcmV0dXJucyB7SHR0cEhlYWRlcnN9IEhlYWRlciBnZW5lcmF0aSBpbiBiYXNlIGFpIHBhcmFtZXRyaVxyXG4gICAqL1xyXG4gIHByaXZhdGUgZ2V0SGVhZGVycyh0cmFuc2FjdGlvbklkID0gXCJcIiwgaW5jbHVkZUF1dGg6IGJvb2xlYW4gPSB0cnVlLCBjb250ZW50VHlwZTogc3RyaW5nID0gXCJhcHBsaWNhdGlvbi9qc29uXCIsIGFjY2VwdDogc3RyaW5nID0gXCJhcHBsaWNhdGlvbi9qc29uXCIpOiBIdHRwSGVhZGVycyB7XHJcbiAgICB2YXIgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpO1xyXG4gICAgdmFyIGF1dGh0b2tlbiA9IHRoaXMuRXh0ZW5zaW9uc0ltcGwucmV0cmlldmVBY2Nlc3NUb2tlbigpO1xyXG5cclxuICAgIGlmIChjb250ZW50VHlwZSlcclxuICAgICAgaGVhZGVycyA9IGhlYWRlcnMuYXBwZW5kKFwiQ29udGVudC1UeXBlXCIsIGNvbnRlbnRUeXBlKTtcclxuXHJcbiAgICBpZiAodHJhbnNhY3Rpb25JZClcclxuICAgICAgaGVhZGVycyA9IGhlYWRlcnMuYXBwZW5kKFwiWC1UWC1JRFwiLCB0cmFuc2FjdGlvbklkKTtcclxuXHJcbiAgICBpZiAoYXV0aHRva2VuICYmIGluY2x1ZGVBdXRoKVxyXG4gICAgICBoZWFkZXJzID0gaGVhZGVycy5hcHBlbmQoXCJBdXRob3JpemF0aW9uXCIsIFwiQmVhcmVyIFwiICsgYXV0aHRva2VuKTtcclxuXHJcbiAgICBpZiAoYWNjZXB0KVxyXG4gICAgICBoZWFkZXJzID0gaGVhZGVycy5hcHBlbmQoXCJBY2NlcHRcIiwgYWNjZXB0KTtcclxuXHJcbiAgICBoZWFkZXJzID0gaGVhZGVycy5hcHBlbmQoXCJBY2NlcHQtTGFuZ3VhZ2VcIiwgdGhpcy5MT0NBTEUgPz8gJ2l0LUlUJyk7XHJcbiAgICByZXR1cm4gaGVhZGVycztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdlc3Rpb25lIGRpIGRlZmF1bHQgZGVnbGkgZXJyb3JpXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHthbnl9IHJlcyBSaXN1bHRhdG8gZGVsbGEgY2hpYW1hdGEgZWZmZXR0dWF0YVxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBndWlkIElkZW50aWZpY2F0aXZvIEdVSUQgZGVsbGEgY2hpYW1hdGEgZWZmZXR0dWF0YVxyXG4gICAqL1xyXG4gIHByaXZhdGUgYXN5bmMgb25FcnJvcihyZXM6IEh0dHBFcnJvclJlc3BvbnNlIHwgVHlwZUVycm9yLCBndWlkOiBzdHJpbmcpIHtcclxuICAgIGlmKHRoaXMuY2FsbFN0YXR1c1tndWlkXSlcclxuICAgICAgdGhpcy5jYWxsU3RhdHVzW2d1aWRdLnN1Y2Nlc3MgPSBmYWxzZTtcclxuXHJcbiAgICAvL01pIGFzc2ljdXJvIGNoZSB0dXR0aSBnbGkgZXJyb3JpIGR1cmFudGUgaWwgcmVkaXJlY3QgYWwgbG9naW4gdmVuZ2FubyBpZ25vcmF0aVxyXG4gICAgaWYgKHRoaXMuRXh0ZW5zaW9uc0ltcGwucmVhZFJlZGlyZWN0aW5nVG9Mb2dpbigpKSB7XHJcbiAgICAgIHRoaXMubG9nKHRoaXMubG9jKFwiUmVkaXJlY3RpbmcgdG8gTG9naW4sIGlnbm9yaW5nIEhUVFAgZXJyb3Igb24gY2FsbFwiKSArIFwiIFwiICsgZ3VpZCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvL01pIGFzc2ljdXJvIGNoZSB2ZW5nYSBnZXN0aXRvIHVuIHNvbG8gZXJyb3JlIHBlciB2b2x0YVxyXG4gICAgaWYgKHRoaXMuRXh0ZW5zaW9uc0ltcGwucmVhZEhhbmRsaW5nRXJyb3JTdGF0dXMoKSkge1xyXG4gICAgICB0aGlzLmxvZyh0aGlzLmxvYyhcIkFscmVhZHkgSGFuZGxpbmcgYW4gZXJyb3IsIGlnbm9yaW5nIEhUVFAgZXJyb3Igb24gY2FsbFwiKSArIFwiIFwiICsgZ3VpZCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5FeHRlbnNpb25zSW1wbC53cml0ZUhhbmRsaW5nRXJyb3JTdGF0dXModHJ1ZSk7XHJcblxyXG4gICAgbGV0IGZpbmFsRXJyb3IgPSBcIlwiO1xyXG4gICAgbGV0IGZpbmFsU3RhdHVzID0gXCJcIjtcclxuICAgIGlmICh0aGlzLmlzVHlwZUVycm9yKHJlcykpIHtcclxuICAgICAgZmluYWxFcnJvciA9IHJlcy5tZXNzYWdlO1xyXG4gICAgICBmaW5hbFN0YXR1cyA9IFwiSFRUUCBTZXJ2aWNlIEludGVybmFsIEVycm9yXCI7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLmlzSHR0cEVycm9yUmVzcG9uc2UocmVzKSkge1xyXG5cclxuICAgICAgZmluYWxFcnJvciA9IGF3YWl0IHRoaXMuZ2V0SHR0cEVycm9yVGV4dChyZXMuZXJyb3IpO1xyXG4gICAgICBmaW5hbFN0YXR1cyA9IHJlcy5zdGF0dXMudG9TdHJpbmcoKTtcclxuXHJcbiAgICAgIHN3aXRjaCAocmVzLnN0YXR1cykge1xyXG4gICAgICAgIC8vIFVuYXV0aG9yaXplZFxyXG4gICAgICAgIGNhc2UgNDAxOlxyXG4gICAgICAgICAgaWYgKHRoaXMuRXh0ZW5zaW9uc0ltcGwucmVhZFJlZGlyZWN0aW9uU3RhdHVzKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2codGhpcy5sb2MoXCJFcnJvciA0MDEgb24gY2FsbFwiKSArIFwiIFwiICsgZ3VpZCArIFwiIFwiICsgdGhpcy5sb2MoXCJ3aXRoIHJlZGlyZWN0IGFscmVhZHkgaW4gcHJvZ3Jlc3MuIElnbm9yaW5nIHRoaXMgZXZlbnRcIikpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmxvZyh0aGlzLmxvYyhcIkVycm9yIDQwMSBvbiBjYWxsXCIpICsgXCIgXCIgKyBndWlkICsgXCIgXCIgKyB0aGlzLmxvYyhcInJlZGlyZWN0aW5nIHRvIGxvZ2luLlwiKSk7XHJcbiAgICAgICAgICB0aGlzLkV4dGVuc2lvbnNJbXBsLndyaXRlUmVkaXJlY3Rpb25TdGF0dXModHJ1ZSk7XHJcbiAgICAgICAgICB0aGlzLkV4dGVuc2lvbnNJbXBsLndyaXRlUmVkaXJlY3RpbmdUb0xvZ2luKHRydWUpO1xyXG4gICAgICAgICAgdGhpcy5FeHRlbnNpb25zSW1wbC5yZWRpcmVjdFRvTG9naW4oKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAvLyBIYW5kbGVkIGV4Y2VwdGlvblxyXG4gICAgICAgIGNhc2UgNDAwOlxyXG4gICAgICAgIC8vIE5vIFBlcm1pc3Npb25zXHJcbiAgICAgICAgY2FzZSA0MDM6XHJcbiAgICAgICAgICB0aGlzLkV4dGVuc2lvbnNJbXBsLmhhbmRsZUJsb2NraW5nRXhjZXB0aW9uKHJlcy5zdGF0dXMsIGZpbmFsRXJyb3IpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIC8vIE5vdCBmb3VuZFxyXG4gICAgICAgIGNhc2UgNDA0OlxyXG4gICAgICAgICAgdGhpcy5FeHRlbnNpb25zSW1wbC5oYW5kbGVCbG9ja2luZ0V4Y2VwdGlvbihyZXMuc3RhdHVzLCB0aGlzLmxvYyhcIlJlc291cmNlIG5vdCBmb3VuZFwiKSk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgLy8gTm90Q29uZmlndXJlZEV4Y2VwdGlvblxyXG4gICAgICAgIGNhc2UgNDQ0OlxyXG4gICAgICAgICAgaWYgKHRoaXMuRXh0ZW5zaW9uc0ltcGwucmVhZFJlZGlyZWN0aW9uU3RhdHVzKCkpXHJcbiAgICAgICAgICAgIHRoaXMubG9nKHRoaXMubG9jKFwiRXJyb3IgNDQ0IG9uIGNhbGxcIikgKyBcIiBcIiArIGd1aWQgKyBcIiBcIiArIHRoaXMubG9jKFwid2l0aCByZWRpcmVjdCBhbHJlYWR5IGluIHByb2dyZXNzLiBJZ25vcmluZyB0aGlzIGV2ZW50XCIpKTtcclxuICAgICAgICAgIGVsc2UgaWYgKCF0aGlzLkV4dGVuc2lvbnNJbXBsLmhhbmRsZU5vdENvbmZpZ3VyZWRFeGNlcHRpb24oKSlcclxuICAgICAgICAgICAgdGhpcy5FeHRlbnNpb25zSW1wbC5oYW5kbGVCbG9ja2luZ0V4Y2VwdGlvbihyZXMuc3RhdHVzLCBmaW5hbEVycm9yKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgICBmaW5hbEVycm9yID0gXCJTZXJ2ZXIgbWlnaHQgYmUgb2ZmbGluZVwiICsgKHJlcy5zdGF0dXNUZXh0ID8gXCIgKFwiICsgcmVzLnN0YXR1c1RleHQgKyBcIikgXCIgOiBcIlwiKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuRXh0ZW5zaW9uc0ltcGwuaGFuZGxlRXhjZXB0aW9uKGZpbmFsU3RhdHVzLCBmaW5hbEVycm9yKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERhdG8gdW4gZXJyb3JlIHJlc3RpdHVpc2NlIHVuYSBwcm9taXNlIGNvbiBsYSBzdHJpbmdhIGZpbmFsZSBkZWxsJ2Vycm9yZSBpbiBtb2RvIGRhIHBvdGVyIGZhcmUgdW4gYXdhaXRcclxuICAgKiBcclxuICAgKiBAcGFyYW0ge2FueX0gZXJyIEVycm9yZSBkYSBjb250cm9sbGFyZVxyXG4gICAqIFxyXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZz59IFByb21pc2UgY2hlIHJpc29sdmUgY29uIGxhIHN0cmluZ2EgZmluYWxlIGRlbGwnZXJyb3JlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZXRIdHRwRXJyb3JUZXh0KGVycjogYW55KTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgIC8vIFNlIGhvIHVuIEJsb2IgcHXDsiBlc3NlcmUgbyB1biBDYWxsUmVzdWx0IG8gc3VwcG9uZ28gdW5hIHNlbXBsaWNlIHN0cmluZ2EsXHJcbiAgICAvLyBhbHRyaW1lbnRpIHBvdHJlYmJlIGVzc2VyZSBkaXJldHRhbWVudGUgdW4gQ2FsbFJlc3VsdCwgb3BwdXJlIHVuYSBzZW1wbGljZSBzdHJpbmdhXHJcbiAgICByZXR1cm4gbmV3IFByb21pc2U8c3RyaW5nPigocmVzb2x2ZSkgPT4ge1xyXG4gICAgICBpZiAoZXJyIGluc3RhbmNlb2YgQmxvYikge1xyXG4gICAgICAgIGxldCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgICAgIHJlYWRlci5vbmxvYWQgPSAoZTogRXZlbnQpID0+IHtcclxuICAgICAgICAgIGxldCBlcnJNc2cgPSAoPGFueT5lLnRhcmdldCkucmVzdWx0O1xyXG4gICAgICAgICAgbGV0IGpzb25lcnJNc2c6IGFueTtcclxuICAgICAgICAgIHRyeSB7IGpzb25lcnJNc2cgPSBKU09OLnBhcnNlKGVyck1zZyk7IH0gY2F0Y2ggKGUpIHsgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlc29sdmUoanNvbmVyck1zZyAmJiB0aGlzLmlzQ2FsbFJlc3VsdChqc29uZXJyTXNnKSA/IGpzb25lcnJNc2cuZXJyb3IubWVzc2FnZSA6IGVyck1zZyk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICByZWFkZXIucmVhZEFzVGV4dChlcnIpXHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodGhpcy5pc0NhbGxSZXN1bHQoZXJyKSlcclxuICAgICAgICByZXR1cm4gcmVzb2x2ZShlcnIuZXJyb3IubWVzc2FnZSk7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICByZXR1cm4gcmVzb2x2ZShlcnI/LnRvU3RyaW5nKCkpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSaWNvbm9zY2Ugc2UgbCdvZ2dldHRvIMOoIGRpIHRpcG8gKipDYWxsUmVzdWx0KiogZSwgc2Ugc8OsLCBsbyBjYXN0YSBhbCB0aXBvIGNvcnJldHRvIHBlciBlc3NlcmUgdXRpbGl6emF0byBjb3JyZXR0YW1lbnRlIG5lbCBibG9jY28gZGkgY29kaWNlIHN1Y2Nlc3Npdm9cclxuICAgKiBcclxuICAgKiBAcGFyYW0ge2FueX0gZXJyIEVycm9yZSBkYSBjb250cm9sbGFyZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgaXNDYWxsUmVzdWx0KGVycjogYW55KTogZXJyIGlzIHsgZXJyb3I6IHsgbWVzc2FnZTogc3RyaW5nIH0gfSB7XHJcbiAgICByZXR1cm4gISFlcnI/LmVycm9yPy5tZXNzYWdlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmljb25vc2NlIHNlIGwnZXJyb3JlIMOoIGRpIHRpcG8gKipIdHRwRXJyb3JSZXNwb25zZSoqIGUsIHNlIHPDrCwgbG8gY2FzdGEgYWwgdGlwbyBjb3JyZXR0byBwZXIgZXNzZXJlIHV0aWxpenphdG8gY29ycmV0dGFtZW50ZSBuZWwgYmxvY2NvIGRpIGNvZGljZSBzdWNjZXNzaXZvXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHthbnl9IGVyciBFcnJvcmUgZGEgY29udHJvbGxhcmVcclxuICAgKi9cclxuICBwcml2YXRlIGlzSHR0cEVycm9yUmVzcG9uc2UoZXJyOiBhbnkpOiBlcnIgaXMgSHR0cEVycm9yUmVzcG9uc2Uge1xyXG4gICAgcmV0dXJuIGVyciBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlO1xyXG4gIH1cclxuXHJcbiAgIC8qKlxyXG4gICAqIFJpY29ub3NjZSBzZSBsJ2Vycm9yZSDDqCBkaSB0aXBvICoqVHlwZUVycm9yKiogZSwgc2Ugc8OsLCBsbyBjYXN0YSBhbCB0aXBvIGNvcnJldHRvIHBlciBlc3NlcmUgdXRpbGl6emF0byBjb3JyZXR0YW1lbnRlIG5lbCBibG9jY28gZGkgY29kaWNlIHN1Y2Nlc3Npdm9cclxuICAgKiBcclxuICAgKiBAcGFyYW0ge2FueX0gZXJyIEVycm9yZSBkYSBjb250cm9sbGFyZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgaXNUeXBlRXJyb3IoZXJyOiBhbnkpOiBlcnIgaXMgVHlwZUVycm9yIHtcclxuICAgIHJldHVybiBlcnIubmFtZSA9PSBcIlR5cGVFcnJvclwiO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ29tZSBkaWNlIGlsIG5vbWUsIHJlZ2lzdHJhIHVuIGVycm9yZSBlIHJlc3RpdHVpc2NlIHVuIE9ic2VydmFibGUgdnVvdG8gY29tZSByaXN1bHRhdG8gZGVsbGEgY2hpYW1hdGFcclxuICAgKiBcclxuICAgKiBAcGFyYW0ge2FueX0gcmVzIFJpc3VsdGF0byBkZWxsYSBjaGlhbWF0YSBlZmZldHR1YXRhXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGd1aWQgSWRlbnRpZmljYXRpdm8gR1VJRCBkZWxsYSBjaGlhbWF0YSBlZmZldHR1YXRhXHJcbiAgICogQHBhcmFtIHtib29sZWFufSBoYW5kbGVFcnJvciBJbmRpY2Egc2UgZ2VzdGlyZSBsJ2Vycm9yZSB2aWEgbGlicmVyaWEgbyBzZSBsaW1pdGFyc2kgYSByZXN0aXR1aXJlIGwnT2JzZXJ2YWJsZSB2dW90b1xyXG4gICAqIFxyXG4gICAqIEByZXR1cm5zIHtPYnNlcnZhYmxlPGFueT59IE9ic2VydmFibGUgdnVvdG9cclxuICAgKi9cclxuICBwcml2YXRlIHJlZ2lzdGVyRXJyb3JBbmRSZXR1cm5FbXB0eU9ic2VydmFibGUocmVzOiBhbnksIGd1aWQ6IHN0cmluZywgaGFuZGxlRXJyb3I6IGJvb2xlYW4gPSB0cnVlKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIGlmIChoYW5kbGVFcnJvcilcclxuICAgICAgdGhpcy5vbkVycm9yKHJlcywgZ3VpZCk7XHJcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoKCkgPT4geyB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERhdG8gdW4gVXJsIGUgZGVpIHBhcmFtZXRyaSBjZXJjYSBkaSByZWN1cGVyYXJlIGwnZXZlbnR1YWxlIG9nZ2V0dG8gZ2nDoCBzYWx2YXRvIGluIGNhY2hlIGNvbiBsZSBpbmZvcm1hemlvbmkgYmFzZSBkZWxsYSBjYWNoZSBzdGVzc2FcclxuICAgKiBcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsIFVSTCBzdSBjdWkgZWZmZXR0dWFyZSBsYSBjaGlhbWF0YVxyXG4gICAqIEBwYXJhbSB7SHR0cFBhcmFtc30gcGFyYW1zIFBhcmFtZXRyaSBkZWxsYSBjaGlhbWF0YSAobnVsbGkgaW4gY2FzbyBkaSBQT1NUKVxyXG4gICAqIFxyXG4gICAqIEByZXR1cm5zIHtDYWNoZUluZm9zfSBPZ2dldHRvIGNvbnRlbmVudGUgbGUgaW5mb3JtYXppb25pIHN1bGxhIGNhY2hlIHBlciBsJ29nZ2V0dG8gc3BlY2lmaWNhdG9cclxuICAgKi9cclxuICBwcml2YXRlIHRyeUdldENhY2hlSW5mb3JtYXRpb25zKHVybDogc3RyaW5nLCBwYXJhbXM6IEh0dHBQYXJhbXMpOiBDYWNoZUluZm9zIHtcclxuXHJcbiAgICBsZXQgY2FjaGluZ0tleSA9IG51bGwsIGNhY2hlVGltZSA9IG51bGwsIGl0ZW0gPSBudWxsO1xyXG4gICAgbGV0IHVzZUNhY2hpbmcgPSAhISgvI2NhY2hlL2dpLmV4ZWModXJsKSk7XHJcblxyXG4gICAgaWYgKHVzZUNhY2hpbmcpIHtcclxuICAgICAgbGV0IHRtcCA9IC8jY2FjaGUoOj8tKFxcZCspKS9naS5leGVjKHVybCk7XHJcbiAgICAgIGNhY2hlVGltZSA9IHRtcCA/IHRtcFsyXSA6IG51bGw7XHJcblxyXG4gICAgICB1cmwgPSB1cmwucmVwbGFjZShcIiNjYWNoZVwiICsgKGNhY2hlVGltZSA/IFwiLVwiICsgY2FjaGVUaW1lIDogXCJcIiksIFwiXCIpO1xyXG4gICAgICBpZiAodGhpcy51bnRpbWVkQ2FjaGVFeHBpcmVkKCkgJiYgIWNhY2hlVGltZSlcclxuICAgICAgICB0aGlzLnJlc2V0SHR0cFVudGltZWRDYWNoZVN0b3JhZ2UoKTtcclxuXHJcbiAgICAgIGNhY2hpbmdLZXkgPSB0aGlzLm1ha2VDYWNoZUtleSh1cmwsIHBhcmFtcyk7XHJcbiAgICAgIGxldCBjYWNoZUtleSA9IGNhY2hlVGltZSA/IHRoaXMubG9jYWxTdG9yYWdlSHR0cFRpbWVkQ2FjaGVLZXkgOiB0aGlzLmxvY2FsU3RvcmFnZUh0dHBDYWNoZUtleVxyXG4gICAgICBsZXQgY2FjaGVMcyA9IHRoaXMubG9jYWxTdG9yYWdlLmdldExvY2FsSXRlbShjYWNoZUtleSk7XHJcbiAgICAgIGxldCBjYWNoZSA9IGNhY2hlTHMgPyBjYWNoZUxzIDoge307XHJcblxyXG4gICAgICBpZiAoY2FjaGUgJiYgY2FjaGVbY2FjaGluZ0tleV0gJiYgIXRoaXMudGltZWRDYWNoZUl0ZW1FeHBpcmVkKGNhY2hlW2NhY2hpbmdLZXldKSkge1xyXG4gICAgICAgIC8vIFNlIGdlc3Rpc2NvIGlsIHRlbXBvIGVzYXR0byBkZWxsYSBjYWNoZSBwcmltYSBkaSByZXN0aXR1aXJlIGwnb2dnZXR0byBjYWNoYXRvIGxvIHJpcHVsaXNjbyBcclxuICAgICAgICAvLyBkYWxsZSBwcm9wcmlldMOgIGludGVybmUgY2hlIGdsaSBobyBhZ2dpdW50byBwZXIgY29udHJvbGxhcm5lIGxhIHNjYWRlbnphXHJcbiAgICAgICAgaWYgKGNhY2hlVGltZSlcclxuICAgICAgICAgIGRlbGV0ZSBjYWNoZVtjYWNoaW5nS2V5XS5fX2V4cGlyZTtcclxuXHJcbiAgICAgICAgaXRlbSA9IGNhY2hlW2NhY2hpbmdLZXldXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBQZXIgYXNzaWN1cmFybWkgY2hlIGlsIHJpZmVpcm1lbnRvIGRlZ2xpIG9nZ2V0dGkgc2lhIGRpdmVyc28gdXRpbGl6em8gaWwgZGVlcENsb25lXHJcbiAgICByZXR1cm4gbmV3IENhY2hlSW5mb3ModXJsLCB1c2VDYWNoaW5nLCBjYWNoaW5nS2V5LCBjYWNoZVRpbWUsIHRoaXMudXRpc0V4dHMuZGVlcENsb25lKGl0ZW0pKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEluc2VyaXNjZSB1biBvZ2dldHRvIG5lbGxhIGNhY2hlIGFwcHJvcHJpYXRhIGluIGJhc2UgYWxsZSBpbmZvcm1hemlvbmkgY29udGVudXRlIG5lbCBwYXJhbWV0cm8gKipjYWNoZUluZm9zKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0ge1R9IGl0ZW0gT2dnZXR0byBkYSBpbnNlcmlyZSBuZWxsYSBjYWNoZVxyXG4gICAqIEBwYXJhbSB7Q2FjaGVJbmZvc30gY2FjaGVJbmZvcyBJbmZvcm1hemlvbmkgc3VsbGEgY2FjaGUgcmVjdXBlcmF0ZSBkYSB1bmEgY2hpYW1hdGEgcHJlY2VkZW50ZSBhICoqdHJ5R2V0Q2FjaGVJbmZvcm1hdGlvbnMqKlxyXG4gICAqL1xyXG4gIHByaXZhdGUgY2FjaGVSZXNwb25zZTxUPihpdGVtOiBULCBjYWNoZUluZm9zOiBDYWNoZUluZm9zKTogdm9pZCB7XHJcbiAgICBsZXQgY2FjaGVLZXkgPSBjYWNoZUluZm9zLmNhY2hlVGltZSA/IHRoaXMubG9jYWxTdG9yYWdlSHR0cFRpbWVkQ2FjaGVLZXkgOiB0aGlzLmxvY2FsU3RvcmFnZUh0dHBDYWNoZUtleVxyXG4gICAgbGV0IGNhY2hlTHMgPSB0aGlzLmxvY2FsU3RvcmFnZS5nZXRMb2NhbEl0ZW0oY2FjaGVLZXkpO1xyXG4gICAgbGV0IGNhY2hlID0gY2FjaGVMcyA/IGNhY2hlTHMgOiB7fTtcclxuXHJcbiAgICBjYWNoZVtjYWNoZUluZm9zLmNhY2hlS2V5XSA9IGl0ZW07XHJcbiAgICBpZiAoY2FjaGVJbmZvcy5jYWNoZVRpbWUpXHJcbiAgICAgIGNhY2hlW2NhY2hlSW5mb3MuY2FjaGVLZXldLl9fZXhwaXJlID0gZGF5anMoKS5hZGQoY2FjaGVJbmZvcy5jYWNoZVRpbWUsIFwic2Vjb25kc1wiKTtcclxuXHJcbiAgICB0aGlzLmxvY2FsU3RvcmFnZS5zZXRMb2NhbEl0ZW0oY2FjaGVLZXksIGNhY2hlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbnRyb2xsYSBzZSBsYSBjYWNoZSBwZXIgbGUgY2hpYW1hdGUgc2VuemEgZXhwaXJlIHRpbWUgw6ggc2NhZHV0YVxyXG4gICAqIFxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAqKnRydWUqKiBzZSBsYSBjYWNoZSDDqCBzY2FkdXRhIGUgZGV2J2Vzc2VyZSByaXB1bGl0YSwgKipmYWxzZSoqIGFsdHJpbWVudGlcclxuICAgKi9cclxuICBwcml2YXRlIHVudGltZWRDYWNoZUV4cGlyZWQoKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgZXhwaXJlID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLmxvY2FsU3RvcmFnZUh0dHBDYWNoZUV4cGlyZUtleSkpO1xyXG4gICAgcmV0dXJuICFleHBpcmUgfHwgZXhwaXJlICYmIGRheWpzKGV4cGlyZSkgPCBkYXlqcygpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ29udHJvbGxhIHNlIGxhIGNhY2hlIHBlciB1bmEgY2hpYW1hdGEgY2hlIGhhIHVuIHRlbXBvIGRpIHZpdGEgYmVuIGRlZmluaXRvIMOoIHNjYWR1dGEgbyBtZW5vXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHthbnl9IGl0ZW0gT2dnZXR0byByZWN1cGVyYXRvIGRhbGxhIGNhY2hlIGEgY3VpIGhvIGFnZ2l1bnRvIGxhIGNoaWF2ZSBpbnRlcm5hIF9fZXhwaXJlXHJcbiAgICogXHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59ICoqdHJ1ZSoqIHNlIGxhIGNhY2hlIMOoIHNjYWR1dGEgZSBkZXYnZXNzZXJlIHJpcHVsaXRhLCAqKmZhbHNlKiogYWx0cmltZW50aVxyXG4gICAqL1xyXG4gIHByaXZhdGUgdGltZWRDYWNoZUl0ZW1FeHBpcmVkKGl0ZW06IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGRheWpzKGl0ZW0uX19leHBpcmUpIDwgZGF5anMoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJpcHVsaXNjZSBsYSBjYWNoZSBlIGltcG9zdGEgbGEgcHJvc3NpbWEgc2NhZGVuemEgYWQgYWRlc3NvICsgKipDTElFTlRfQ0FDSEVfRFVSQVRJT05fUyoqICh0b2tlbiB2YWxvcml6emF0byBpbiBmYXNlIGRpIGNvbmZpZ3VyYXppb25lIGRhbGxhIHByb3ByaWV0w6AgKipjbGllbnRDYWNoZUR1cmF0aW9uUyoqIGRlbGxhIGNsYXNzZSAqKkh0dHBTZXJ2aWNlTW9kdWxlQ29uZmlnKiopXHJcbiAgICovXHJcbiAgcHVibGljIGFzeW5jIHJlc2V0SHR0cFVudGltZWRDYWNoZVN0b3JhZ2UoKSB7XHJcbiAgICBhd2FpdCB0aGlzLmxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMubG9jYWxTdG9yYWdlSHR0cENhY2hlS2V5LCB7fSkudG9Qcm9taXNlKCk7XHJcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLmxvY2FsU3RvcmFnZUh0dHBDYWNoZUV4cGlyZUtleSwgSlNPTi5zdHJpbmdpZnkoZGF5anMoKS5hZGQodGhpcy5DTElFTlRfQ0FDSEVfRFVSQVRJT05fUyA/PyAzNjAwLCBcInNlY29uZFwiKSkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmlwdWxpc2NlIGxhIGNhY2hlIGRlbGxlIGNoaWFtYXRlIGNvbiB1biB0ZW1wbyBkaSBleHBpcmUgZGVmaW5pdG9cclxuICAgKi9cclxuICBwdWJsaWMgYXN5bmMgcmVzZXRIdHRwVGltZWRDYWNoZVN0b3JhZ2UoKSB7XHJcbiAgICBhd2FpdCB0aGlzLmxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMubG9jYWxTdG9yYWdlSHR0cFRpbWVkQ2FjaGVLZXksIHt9KS50b1Byb21pc2UoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdlbmVyYSB1bmEgY2hpYXZlIHBlciBsYSBjYWNoZSBkZWxsZSBjaGlhbWF0ZSBpbiBiYXNlIGFkIFVSTCBlIFBhcmFtZXRyaSBIVFRQXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVybCBVUkwgc3UgY3VpIGVmZmV0dHVhcmUgbGEgY2hpYW1hdGFcclxuICAgKiBAcGFyYW0ge0h0dHBQYXJhbXN9IHBhcmFtcyBQYXJhbWV0cmkgZGVsbGEgY2hpYW1hdGFcclxuICAgKiBcclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBDaGlhdmUgY2hlIHJhcHByZXNlbnRhIGluIG1hbmllcmEgdW5pdm9jYSBsYSBjaGlhbWF0YVxyXG4gICAqL1xyXG4gICBwcml2YXRlIG1ha2VDYWNoZUtleSh1cmw6IHN0cmluZywgcGFyYW1zOiBIdHRwUGFyYW1zKTogc3RyaW5nIHtcclxuICAgIGxldCBhdXRoS2V5UGFydCA9ICh0aGlzLm1lID8gdGhpcy5tZS5JZHRlbmFudCA6IFwiXCIpICsgKHRoaXMubWUgJiYgdGhpcy5DQUNIRV9CWV9VU0VSID8gdGhpcy5tZS5JZFVzZXIgOiBcIlwiKTtcclxuICAgIGxldCBwYXJhbXNLZXlQYXJ0ID0gcGFyYW1zICYmIHBhcmFtcy5rZXlzKCkubGVuZ3RoID4gMCA/IHBhcmFtcy5rZXlzKCkucmVkdWNlKChwcmV2OiBhbnksIG5leHQ6IGFueSkgPT4gcHJldiArIFwiLFwiICsgbmV4dCArICc9JyArIHBhcmFtcy5nZXQobmV4dCksIFwiXCIpIDogXCJcIjtcclxuICAgIHJldHVybiBhdXRoS2V5UGFydCArIFwiX1wiICsgdXJsLnN1YnN0cmluZyh1cmwuaW5kZXhPZihcImFwaVwiKSArIDQpICsgXCI/XCIgKyBwYXJhbXNLZXlQYXJ0O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2VuZXJhemlvbmUgR1VJRFxyXG4gICAqIFxyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IE51b3ZvIEdVSUQgZ2VuZXJhdG8gaW4gbWFuaWVyYSBjYXN1YWxlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZXRHVUlEKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gJ3h4eHh4eHh4LXh4eHgtNHh4eC15eHh4LXh4eHh4eHh4eHh4eCcucmVwbGFjZSgvW3h5XS9nLCBmdW5jdGlvbiAoYykge1xyXG4gICAgICB2YXIgciA9IE1hdGgucmFuZG9tKCkgKiAxNiB8IDAsIHYgPSBjID09ICd4JyA/IHIgOiAociAmIDB4MyB8IDB4OCk7XHJcbiAgICAgIHJldHVybiB2LnRvU3RyaW5nKDE2KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBzY3JpdmVyZSBsb2cgYSBjb25zb2xlIHF1YWxvcmEgKipERUJVR19NT0RFKiogcmlzdWx0YXNzZSAqKnRydWUqKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIE1lc3NhZ2dpbyBkaSBsb2dcclxuICAgKi9cclxuICBwcml2YXRlIGxvZyhtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLkRFQlVHX01PREUpXHJcbiAgICAgIGNvbnNvbGUubG9nKFwiQGh0dHBzZXJ2aWNlOiBcIiArIG1lc3NhZ2UpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBIZWxwZXIgcGVyIGxhIGxvY2FsaXp6YXppb25lIGRlaSBtZXNzYWdnaVxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIE1lc3NhZ2dpbyBkYSBsb2NhbGl6emFyZVxyXG4gICAqIFxyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IE1lc3NhZ2dpbyBsb2NhbGl6emF0b1xyXG4gICAqL1xyXG4gIHByaXZhdGUgbG9jKG1lc3NhZ2U6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAoIUxvY1ttZXNzYWdlXSkge1xyXG4gICAgICBjb25zb2xlLndhcm4oXCJVbnRyYW5zbGF0ZWQgbWVzc2FnZTogXCIgKyBtZXNzYWdlKVxyXG4gICAgICByZXR1cm4gXCJcIjtcclxuICAgIH1cclxuICAgIHJldHVybiBMb2NbbWVzc2FnZV1bdGhpcy5MT0NBTEVdO1xyXG4gIH1cclxufSJdfQ==
@@ -1,5 +1,5 @@
1
1
  import { __awaiter } from 'tslib';
2
- import { HttpEventType, HttpHeaders, HttpErrorResponse, HttpClient } from '@angular/common/http';
2
+ import { HttpParams, HttpEventType, HttpHeaders, HttpErrorResponse, HttpClient } from '@angular/common/http';
3
3
  import { InjectionToken, Injectable, Inject, Optional, NgModule } from '@angular/core';
4
4
  import { CacheService } from '@esfaenza/preferences';
5
5
  import { UtilityService } from '@esfaenza/extensions';
@@ -431,11 +431,12 @@ class HTTPService {
431
431
  * @param {HttpParams} params Parametri della chiamata
432
432
  */
433
433
  getFileNative(url, params = null) {
434
+ var encodedParams = new HttpParams();
434
435
  // Encodo tutti i parametri per evitare casi particolari
435
436
  let parKeys = params.keys();
436
437
  for (let i = 0; i < parKeys.length; i++)
437
- params.set(parKeys[i], encodeURIComponent(params.get(parKeys[i])));
438
- let finalUrl = url + (params ? "?" + params.toString() : "");
438
+ encodedParams = encodedParams.set(parKeys[i], encodeURIComponent(params.get(parKeys[i])));
439
+ let finalUrl = url + (params ? "?" + encodedParams.toString() : "");
439
440
  window.location.href = finalUrl;
440
441
  }
441
442
  /**