@tiba-spark/client-shared-lib 26.3.0-206 → 26.3.0-219

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.
@@ -33,7 +33,9 @@ export class FacilityService {
33
33
  };
34
34
  this.hasPermissionTypesByPark = (permissionTypes, guid, parkId) => {
35
35
  const facilityDictionary = this.store.selectSnapshot(FacilityState.facilityDictionary);
36
- const featurePermissions = facilityDictionary[guid][parkId].featurePermissions;
36
+ // SPRK3-14812: the dictionary is not hydrated for every guid/park at every point
37
+ // in the change-detection cycle. An unknown park grants nothing (fail closed).
38
+ const featurePermissions = facilityDictionary?.[guid]?.[parkId]?.featurePermissions;
37
39
  const sparkVersion = this.store.selectSnapshot(({ smartpark: { versions } }) => versions[guid]);
38
40
  return permissionTypes.reduce((acc, permissionType) => {
39
41
  const permissionSupportVersion = PermissionTypeSupportedVersionDictionary[permissionType];
@@ -41,7 +43,10 @@ export class FacilityService {
41
43
  console.warn(`Permission ${permissionType} version support is missing in PermissionTypeSupportedVersionDictionary file`);
42
44
  }
43
45
  const isVersionSupported = isVersionGreaterThanEqual(sparkVersion, permissionSupportVersion);
44
- acc[permissionType] = isVersionSupported && featurePermissions.includes(permissionType);
46
+ // isVersionGreaterThanEqual returns undefined (not false) for an unknown version
47
+ // despite its declared boolean return, which leaked undefined into a dictionary
48
+ // typed { [key: string]: boolean }. Coerce so the declared type holds.
49
+ acc[permissionType] = !!(isVersionSupported && featurePermissions?.includes(permissionType));
45
50
  return acc;
46
51
  }, {});
47
52
  };
@@ -50,8 +55,11 @@ export class FacilityService {
50
55
  let isVersionSupported = this.isVersionSupported(permissionType, guid);
51
56
  if (isVersionSupported) {
52
57
  const facilityDictionary = this.store.selectSnapshot(FacilityState.facilityDictionary);
53
- const featurePermissions = facilityDictionary[guid][parkId].featurePermissions;
54
- hasPermission = featurePermissions?.includes(permissionType);
58
+ // SPRK3-14812 (Sentry JAVASCRIPT-ANGULAR-K): the optional chain sat one level too
59
+ // deep -- [guid] and [parkId] were both indexed unguarded. Fail closed, which is
60
+ // what the `hasPermission = false` initialiser above already promises callers.
61
+ const featurePermissions = facilityDictionary?.[guid]?.[parkId]?.featurePermissions;
62
+ hasPermission = !!featurePermissions?.includes(permissionType);
55
63
  }
56
64
  return hasPermission;
57
65
  };
@@ -286,4 +294,4 @@ export class FacilityService {
286
294
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FacilityService, decorators: [{
287
295
  type: Injectable
288
296
  }], ctorParameters: () => [{ type: i1.AppConfigService }, { type: i2.Store }] });
289
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjaWxpdHkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC1zaGFyZWQtbGliL3NyYy9saWJyYXJpZXMvbW9kdWxlcy9mYWNpbGl0eS9mYWNpbGl0eS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR3JELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDbkMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBYyxFQUFFLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUU3RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUcvRixPQUFPLEVBQUUsd0NBQXdDLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUU5RSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUM3RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRzNFLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7OztBQUdqRCxNQUFNLE9BQU8sZUFB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RUFBRSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN6RyxPQUFPLGFBQWEsQ0FBQztJQUN2QixDQUFDOytHQW5VVSxlQUFlO21IQUFmLGVBQWU7OzRGQUFmLGVBQWU7a0JBRDNCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb21wdXRlZCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgU3RvcmUgfSBmcm9tICdAbmd4cy9zdG9yZSc7XG5pbXBvcnQgeyBjbG9uZURlZXAgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBmaWx0ZXIsIGZpcnN0LCBtYXAsIE9ic2VydmFibGUsIG9mLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEVOR0xJU0hfTEFOR1VBR0UgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvZ2xvYmFsLWNvbnN0YW50cyc7XG5pbXBvcnQgeyBBcHBUeXBlIH0gZnJvbSAnLi4vLi4vZW51bXMvYXBwLXR5cGUuZW51bSc7XG5pbXBvcnQgeyBTZWFyY2hGYWNpbGl0aWVzTW9kZSB9IGZyb20gJy4uLy4uL2VudW1zL3NlYXJjaC1mYWNpbGl0eS1tb2RlLmVudW0nO1xuaW1wb3J0IHsgTWVudUl0ZW0gfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL21lbnUtaXRlbS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUGVybWlzc2lvblR5cGUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlLXByb3h5L2Nsb3VkLXNlcnZpY2UtcHJveGllcyc7XG5pbXBvcnQgeyBGYWNpbGl0eVRyZWVEdG8sIFBhcmtCcmFuY2hUeXBlIH0gZnJvbSAnLi4vLi4vc2VydmljZS1wcm94eS9pZGVudGl0eS1zZXJ2aWNlLXByb3hpZXMnO1xuaW1wb3J0IHsgRmFjaWxpdHlEdG8gfSBmcm9tICcuLi8uLi9zZXJ2aWNlLXByb3h5L3JwYy1zZXJ2aWNlLXByb3hpZXMnO1xuaW1wb3J0IHsgQXBwQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FwcC1jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBQZXJtaXNzaW9uVHlwZVN1cHBvcnRlZFZlcnNpb25EaWN0aW9uYXJ5IH0gZnJvbSAnLi4vLi4vc3RhdGljLWZpbGVzJztcbmltcG9ydCB7IE51bWJlck1hcCB9IGZyb20gJy4uLy4uL3V0aWxzL2xhbmcudXRpbCc7XG5pbXBvcnQgeyBpc1ZlcnNpb25HcmVhdGVyVGhhbkVxdWFsIH0gZnJvbSAnLi4vLi4vdXRpbHMvc3VwcG9ydC12ZXJzaW9uLnV0aWwnO1xuaW1wb3J0IHsgU2lkZU5hdlNvcnRCeSB9IGZyb20gJy4uL3NpZGVuYXYvc2lkZW5hdi1zb3J0LmVudW0nO1xuaW1wb3J0IHsgREVGQVVMVF9TT1JUX01FTlUsIFNpZGVuYXZTdGF0ZSB9IGZyb20gJy4uL3NpZGVuYXYvc2lkZW5hdi5zdGF0ZSc7XG5pbXBvcnQgeyBGYWNpbGl0eURpY3Rpb25hcnkgfSBmcm9tICcuL2ZhY2lsaXR5LW1vZGFsJztcbmltcG9ydCB7IEZhY2lsaXR5V2l0aEd1aWQgfSBmcm9tICcuL2ZhY2lsaXR5LXdpdGgtZ3VpZC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQ2xlYXJJbmFjdGl2ZVNlbGVjdGVkUGFya0FjdGlvbiB9IGZyb20gJy4vZmFjaWxpdHkuYWN0aW9ucyc7XG5pbXBvcnQgeyBGYWNpbGl0eVN0YXRlIH0gZnJvbSAnLi9mYWNpbGl0eS5zdGF0ZSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBGYWNpbGl0eVNlcnZpY2Uge1xuXG4gIGdldCBsb2FkaW5nJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5sb2FkaW5nLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkaW5nOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGFwcENvbmZpZzogQXBwQ29uZmlnU2VydmljZSwgcHJpdmF0ZSBzdG9yZTogU3RvcmUpIHtcbiAgfVxuXG4gIGlzUGFyZW50ID0gKGZhY2lsaXR5OiBGYWNpbGl0eVRyZWVEdG8pID0+IHRydWU7XG4gIGlzQ2hpbGRyZW4gPSAoZmFjaWxpdHk6IEZhY2lsaXR5VHJlZUR0bykgPT4gdHJ1ZTtcbiAgaXNQYXJlbnRPckNoaWxkID0gKGZhY2lsaXR5OiBGYWNpbGl0eVRyZWVEdG8pID0+IHRoaXMuaXNDaGlsZHJlbihmYWNpbGl0eSkgfHwgdGhpcy5pc1BhcmVudChmYWNpbGl0eSk7XG4gIGlzQ2hpbGQgPSAoZmFjaWxpdHk6IEZhY2lsaXR5VHJlZUR0bykgPT4gZmFjaWxpdHkudHlwZSA9PT0gUGFya0JyYW5jaFR5cGUuUGFyaztcblxuICBoYXNTeXN0ZW1BZG1pblBlcm1pc3Npb25zID0gKCkgPT4ge1xuICAgIGNvbnN0IGZlYXR1cmVQZXJtaXNzaW9ucyA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoRmFjaWxpdHlTdGF0ZS5mZWF0dXJlUGVybWlzc2lvbnMpO1xuICAgIHJldHVybiBmZWF0dXJlUGVybWlzc2lvbnM/LnNvbWUocCA9PiBwID09PSBQZXJtaXNzaW9uVHlwZS5PcGVyYXRpb25hbEFkbWluIHx8IHAgPT09IFBlcm1pc3Npb25UeXBlLlN5c3RlbUFkbWluKTtcbiAgfTtcblxuICBoYXNQZXJtaXNzaW9uVHlwZXNCeVBhcmsgPSAocGVybWlzc2lvblR5cGVzOiBQZXJtaXNzaW9uVHlwZVtdLCBndWlkOiBzdHJpbmcsIHBhcmtJZDogbnVtYmVyKSA9PiB7XG4gICAgY29uc3QgZmFjaWxpdHlEaWN0aW9uYXJ5ID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChGYWNpbGl0eVN0YXRlLmZhY2lsaXR5RGljdGlvbmFyeSk7XG4gICAgY29uc3QgZmVhdHVyZVBlcm1pc3Npb25zID0gZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdW3BhcmtJZF0uZmVhdHVyZVBlcm1pc3Npb25zO1xuICAgIGNvbnN0IHNwYXJrVmVyc2lvbiA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoKHsgc21hcnRwYXJrOiB7IHZlcnNpb25zIH0gfSkgPT4gdmVyc2lvbnNbZ3VpZF0pO1xuXG4gICAgcmV0dXJuIHBlcm1pc3Npb25UeXBlcy5yZWR1Y2UoKGFjYywgcGVybWlzc2lvblR5cGUpID0+IHtcbiAgICAgIGNvbnN0IHBlcm1pc3Npb25TdXBwb3J0VmVyc2lvbiA9IFBlcm1pc3Npb25UeXBlU3VwcG9ydGVkVmVyc2lvbkRpY3Rpb25hcnlbcGVybWlzc2lvblR5cGVdO1xuICAgICAgaWYgKCFwZXJtaXNzaW9uU3VwcG9ydFZlcnNpb24pIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBQZXJtaXNzaW9uICR7cGVybWlzc2lvblR5cGV9IHZlcnNpb24gc3VwcG9ydCBpcyBtaXNzaW5nIGluIFBlcm1pc3Npb25UeXBlU3VwcG9ydGVkVmVyc2lvbkRpY3Rpb25hcnkgZmlsZWApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBpc1ZlcnNpb25TdXBwb3J0ZWQgPSBpc1ZlcnNpb25HcmVhdGVyVGhhbkVxdWFsKHNwYXJrVmVyc2lvbiwgcGVybWlzc2lvblN1cHBvcnRWZXJzaW9uKTtcbiAgICAgIGFjY1twZXJtaXNzaW9uVHlwZV0gPSBpc1ZlcnNpb25TdXBwb3J0ZWQgJiYgZmVhdHVyZVBlcm1pc3Npb25zLmluY2x1ZGVzKHBlcm1pc3Npb25UeXBlKTtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30gYXMgeyBba2V5OiBzdHJpbmddOiBib29sZWFuOyB9KTtcbiAgfTtcblxuICBoYXNQZXJtaXNzaW9uVHlwZUJ5UGFyayA9IChwZXJtaXNzaW9uVHlwZTogUGVybWlzc2lvblR5cGUsIGd1aWQ6IHN0cmluZywgcGFya0lkOiBudW1iZXIpID0+IHtcbiAgICBsZXQgaGFzUGVybWlzc2lvbiA9IGZhbHNlO1xuICAgIGxldCBpc1ZlcnNpb25TdXBwb3J0ZWQgPSB0aGlzLmlzVmVyc2lvblN1cHBvcnRlZChwZXJtaXNzaW9uVHlwZSwgZ3VpZCk7XG4gICAgaWYgKGlzVmVyc2lvblN1cHBvcnRlZCkge1xuICAgICAgY29uc3QgZmFjaWxpdHlEaWN0aW9uYXJ5ID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChGYWNpbGl0eVN0YXRlLmZhY2lsaXR5RGljdGlvbmFyeSk7XG4gICAgICBjb25zdCBmZWF0dXJlUGVybWlzc2lvbnMgPSBmYWNpbGl0eURpY3Rpb25hcnlbZ3VpZF1bcGFya0lkXS5mZWF0dXJlUGVybWlzc2lvbnM7XG4gICAgICBoYXNQZXJtaXNzaW9uID0gZmVhdHVyZVBlcm1pc3Npb25zPy5pbmNsdWRlcyhwZXJtaXNzaW9uVHlwZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGhhc1Blcm1pc3Npb247XG4gIH07XG5cbiAgaGFzUGVybWlzc2lvblR5cGUkID0gKHBlcm1pc3Npb25UeXBlOiBQZXJtaXNzaW9uVHlwZSkgPT5cbiAgICB0aGlzLmlzVmVyc2lvblN1cHBvcnRlZCQocGVybWlzc2lvblR5cGUpLnBpcGUoc3dpdGNoTWFwKGlzVmVyc2lvblN1cHBvcnRlZCA9PiB7XG4gICAgICByZXR1cm4gIWlzVmVyc2lvblN1cHBvcnRlZCA/IG9mKGZhbHNlKSA6IHRoaXMuc3RvcmUuc2VsZWN0KEZhY2lsaXR5U3RhdGUuZmVhdHVyZVBlcm1pc3Npb25zKS5waXBlKG1hcChmZWF0dXJlUGVybWlzc2lvbnMgPT5cbiAgICAgICAgZmVhdHVyZVBlcm1pc3Npb25zPy5pbmNsdWRlcyhwZXJtaXNzaW9uVHlwZSkpKTtcbiAgICB9KSk7XG5cbiAgaXNWZXJzaW9uU3VwcG9ydGVkJCA9IChwZXJtaXNzaW9uVHlwZTogUGVybWlzc2lvblR5cGUpID0+XG4gICAgdGhpcy5zdG9yZS5zZWxlY3QoRmFjaWxpdHlTdGF0ZS5ndWlkKS5waXBlKGZpbHRlcihndWlkID0+ICEhZ3VpZCksIG1hcChndWlkID0+IHRoaXMuaXNWZXJzaW9uU3VwcG9ydGVkKHBlcm1pc3Npb25UeXBlLCBndWlkKSkpO1xuXG4gIGhhc1Blcm1pc3Npb25UeXBlU2lnbmFsKHBlcm1pc3Npb25UeXBlOiBQZXJtaXNzaW9uVHlwZSkge1xuICAgIHJldHVybiBjb21wdXRlZCgoKSA9PiB7XG4gICAgICBsZXQgaXNQZXJtaXR0ZWQgPSBmYWxzZTtcbiAgICAgIGNvbnN0IGlzVmVyc2lvblN1cHBvcnRlZCA9IHRoaXMuaXNWZXJzaW9uU3VwcG9ydGVkU2lnbmFsKHBlcm1pc3Npb25UeXBlKSgpO1xuICAgICAgaWYgKGlzVmVyc2lvblN1cHBvcnRlZCkge1xuICAgICAgICBjb25zdCBmZWF0dXJlUGVybWlzc2lvbnMgPSB0aGlzLnN0b3JlLnNlbGVjdFNpZ25hbChGYWNpbGl0eVN0YXRlLmZlYXR1cmVQZXJtaXNzaW9ucykoKTtcbiAgICAgICAgaXNQZXJtaXR0ZWQgPSAhIWZlYXR1cmVQZXJtaXNzaW9ucz8uaW5jbHVkZXMocGVybWlzc2lvblR5cGUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaXNQZXJtaXR0ZWQ7XG4gICAgfSk7XG4gIH1cbiAgICBcbiAgaXNWZXJzaW9uU3VwcG9ydGVkU2lnbmFsKHBlcm1pc3Npb25UeXBlOiBQZXJtaXNzaW9uVHlwZSkge1xuICAgIHJldHVybiBjb21wdXRlZCgoKSA9PiB7XG4gICAgICBjb25zdCBndWlkID0gdGhpcy5zdG9yZS5zZWxlY3RTaWduYWwoRmFjaWxpdHlTdGF0ZS5ndWlkKSgpO1xuICAgICAgcmV0dXJuICEhZ3VpZCAmJiB0aGlzLmlzVmVyc2lvblN1cHBvcnRlZChwZXJtaXNzaW9uVHlwZSwgZ3VpZCk7XG4gICAgfSk7XG4gIH1cblxuICBpc1ZlcnNpb25TdXBwb3J0ZWQgPSAocGVybWlzc2lvblR5cGU6IFBlcm1pc3Npb25UeXBlLCBndWlkOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBzcGFya1ZlcnNpb24gPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KCh7IHNtYXJ0cGFyazogeyB2ZXJzaW9ucyB9IH0pID0+IHZlcnNpb25zW2d1aWRdKTtcbiAgICBjb25zdCBwZXJtaXNzaW9uU3VwcG9ydFZlcnNpb24gPSBQZXJtaXNzaW9uVHlwZVN1cHBvcnRlZFZlcnNpb25EaWN0aW9uYXJ5W3Blcm1pc3Npb25UeXBlXTtcbiAgICBpZiAoIXBlcm1pc3Npb25TdXBwb3J0VmVyc2lvbikge1xuICAgICAgY29uc29sZS53YXJuKGBQZXJtaXNzaW9uICR7cGVybWlzc2lvblR5cGV9IHZlcnNpb24gc3VwcG9ydCBpcyBtaXNzaW5nIGluIFBlcm1pc3Npb25UeXBlU3VwcG9ydGVkVmVyc2lvbkRpY3Rpb25hcnkgZmlsZWApO1xuICAgIH1cblxuICAgIHJldHVybiBpc1ZlcnNpb25HcmVhdGVyVGhhbkVxdWFsKHNwYXJrVmVyc2lvbiwgcGVybWlzc2lvblN1cHBvcnRWZXJzaW9uKTtcbiAgfTtcblxuICBoYXNQZXJtaXNzaW9uVHlwZSA9IChwZXJtaXNzaW9uVHlwZTogUGVybWlzc2lvblR5cGUpID0+IHtcbiAgICBjb25zdCBndWlkID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChGYWNpbGl0eVN0YXRlLmd1aWQpO1xuICAgIGNvbnN0IHNwYXJrVmVyc2lvbiA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoKHsgc21hcnRwYXJrOiB7IHZlcnNpb25zIH0gfSkgPT4gdmVyc2lvbnNbZ3VpZF0pO1xuICAgIGNvbnN0IHBlcm1pc3Npb25TdXBwb3J0VmVyc2lvbiA9IFBlcm1pc3Npb25UeXBlU3VwcG9ydGVkVmVyc2lvbkRpY3Rpb25hcnlbcGVybWlzc2lvblR5cGVdO1xuICAgIGlmICghcGVybWlzc2lvblN1cHBvcnRWZXJzaW9uKSB7XG4gICAgICBjb25zb2xlLndhcm4oYFBlcm1pc3Npb24gJHtwZXJtaXNzaW9uVHlwZX0gdmVyc2lvbiBzdXBwb3J0IGlzIG1pc3NpbmcgaW4gUGVybWlzc2lvblR5cGVTdXBwb3J0ZWRWZXJzaW9uRGljdGlvbmFyeWApO1xuICAgIH1cblxuICAgIGNvbnN0IGlzVmVyc2lvblN1cHBvcnRlZCA9IGlzVmVyc2lvbkdyZWF0ZXJUaGFuRXF1YWwoc3BhcmtWZXJzaW9uLCBwZXJtaXNzaW9uU3VwcG9ydFZlcnNpb24pO1xuICAgIGNvbnN0IGZlYXR1cmVQZXJtaXNzaW9ucyA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoRmFjaWxpdHlTdGF0ZS5mZWF0dXJlUGVybWlzc2lvbnMpO1xuICAgIHJldHVybiBpc1ZlcnNpb25TdXBwb3J0ZWQgJiYgZmVhdHVyZVBlcm1pc3Npb25zPy5pbmNsdWRlcyhwZXJtaXNzaW9uVHlwZSk7XG4gIH07XG5cbiAgZ2V0RmFjaWxpdGllcyhmYWNpbGl0eVRyZWU6IEZhY2lsaXR5VHJlZUR0b1tdLCBmaWx0ZXI6IChGYWNpbGl0eVRyZWVEdG8pID0+IGJvb2xlYW4gPSBudWxsKTogRmFjaWxpdHlUcmVlRHRvW10ge1xuICAgIGNvbnN0IGZhY2lsaXRpZXM6IEZhY2lsaXR5VHJlZUR0b1tdID0gW107XG4gICAgY29uc3QgaXNDbG91ZEFwcCA9IHRoaXMuYXBwQ29uZmlnLmdldENvbmZpZygpLmFwcFR5cGUgPT09IEFwcFR5cGUuQ2xvdWQ7XG5cbiAgICBmYWNpbGl0eVRyZWUuZm9yRWFjaChmID0+IHtcbiAgICAgIGNvbnN0IGZhY2lsaXR5Q29weSA9IG5ldyBGYWNpbGl0eVRyZWVEdG8oZik7XG4gICAgICBpZiAoaXNDbG91ZEFwcCkge1xuICAgICAgICBmYWNpbGl0eUNvcHkuaWQgPSBmLmNsb3VkSWQ7XG4gICAgICB9XG4gICAgICBpZiAoIWZpbHRlciB8fCBmaWx0ZXIoZmFjaWxpdHlDb3B5KSkge1xuICAgICAgICBmYWNpbGl0aWVzLnB1c2goZmFjaWxpdHlDb3B5KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBmYWNpbGl0aWVzO1xuICB9XG5cbiAgZXh0cmFjdEZhY2lsaXR5TWFwKGZhY2lsaXR5VHJlZTogRmFjaWxpdHlUcmVlRHRvW10pIHtcbiAgICBjb25zdCBpc0Nsb3VkQXBwID0gdGhpcy5hcHBDb25maWcuZ2V0Q29uZmlnKCkuYXBwVHlwZSA9PT0gQXBwVHlwZS5DbG91ZDtcbiAgICBjb25zdCBmYWNpbGl0aWVzTWFwID0gbmV3IE1hcDxudW1iZXIsIEZhY2lsaXR5VHJlZUR0bz4oKTtcbiAgICB0aGlzLmZsYXRlblRyZWUoZmFjaWxpdHlUcmVlLCBmYWNpbGl0aWVzTWFwLCBpc0Nsb3VkQXBwKTtcbiAgICByZXR1cm4gZmFjaWxpdGllc01hcDtcbiAgfVxuXG4gIHBvcHVsYXRlRmFjaWxpdGllcyhmYWNpbGl0eURpY3Rpb25hcnk6IEZhY2lsaXR5RGljdGlvbmFyeSwgbW9kZTogU2VhcmNoRmFjaWxpdGllc01vZGUsIHNpbmdsZUd1aWREaXNwbGF5OiBzdHJpbmcpOiBGYWNpbGl0eVdpdGhHdWlkW10ge1xuICAgIGNvbnN0IGNsb25lZEZhY2lsaXRpZXMgPSBjbG9uZURlZXAoZmFjaWxpdHlEaWN0aW9uYXJ5KTtcbiAgICBsZXQgZmFjaWxpdGllczogRmFjaWxpdHlXaXRoR3VpZFtdID0gW107XG4gICAgaWYgKCEhc2luZ2xlR3VpZERpc3BsYXkpIHtcbiAgICAgIGZhY2lsaXRpZXMgPSB0aGlzLnBvcHVsYXRlU2luZ2xlR3VpZChjbG9uZWRGYWNpbGl0aWVzW3NpbmdsZUd1aWREaXNwbGF5XSwgbW9kZSwgc2luZ2xlR3VpZERpc3BsYXkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmYWNpbGl0aWVzID0gdGhpcy5wb3B1bGF0ZU11bHRpR3VpZHMoY2xvbmVkRmFjaWxpdGllcywgbW9kZSk7XG4gICAgfVxuXG4gICAgLy8gSW5hY3RpdmUgZmFjaWxpdGllcyBhcmUga2VwdCDigJQgdGhlIHNlcnZlciBhbHJlYWR5IGRlY2lkZXMgcGVyIG1vZHVsZSB3aG8gbWF5IHNlZSB0aGVtXG4gICAgLy8gKEFwcE1vZHVsZS5jYyBuZXZlciByZXR1cm5zIHRoZW0pLCBhbmQgdGhlIGRyb3Bkb3duIHJlbmRlcnMgdGhlbSB0YWdnZWQgXCIoaW5hY3RpdmUpXCJcbiAgICByZXR1cm4gZmFjaWxpdGllcy5zb3J0KChhLCBiKSA9PiBhLmRhdGEubmFtZS5sb2NhbGVDb21wYXJlKGIuZGF0YS5uYW1lLCBFTkdMSVNIX0xBTkdVQUdFLCB7IG51bWVyaWM6IHRydWUgfSkpO1xuICB9XG5cbiAgZ2V0RmFjaWxpdHlXaXRoR3VpZChmYWNpbGl0aWVzOiBGYWNpbGl0eVdpdGhHdWlkW10sIHBhcmtJZDogbnVtYmVyLCBndWlkOiBzdHJpbmcsIHNob3dOb25lVGV4dDogYm9vbGVhbixcbiAgICBtaW5pbXVtVmVyc2lvblN1cHBvcnQ6IHN0cmluZywgcGVybWlzc2lvblN1cHBvcnQ6IFBlcm1pc3Npb25UeXBlKTogRmFjaWxpdHlXaXRoR3VpZCB7XG4gICAgbGV0IGZhY2lsaXR5VG9TZWxlY3RBc0RlZmF1bHQ6IEZhY2lsaXR5V2l0aEd1aWQ7XG4gICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBndWlkIG9yIHBhcmtJZCB3ZSBkb24ndCBzZWxlY3QgYSBkZWZhdWx0IHBhcmtcbiAgICBpZiAoKCEhZ3VpZCAmJiAhIXBhcmtJZCkgfHwgIXNob3dOb25lVGV4dCkge1xuICAgICAgaWYgKCFndWlkICYmICFwYXJrSWQpIHtcbiAgICAgICAgZ3VpZCA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoRmFjaWxpdHlTdGF0ZS5ndWlkKTtcbiAgICAgICAgcGFya0lkID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChGYWNpbGl0eVN0YXRlLnBhcmtJZCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFdlIHNlYXJjaCBmb3IgdGhlIHBhcmsgaXRzZWxmXG4gICAgICBmYWNpbGl0eVRvU2VsZWN0QXNEZWZhdWx0ID0gZmFjaWxpdGllcy5maW5kKGYgPT4gZi5ndWlkID09PSBndWlkICYmIGYuZGF0YS5pZCA9PT0gcGFya0lkKTtcbiAgICAgIC8vIElmIHdlIGRpZG4ndCBmaW5kIGEgcGFya1xuICAgICAgLy8gV2UgY2hlY2sgaWYgdGhlIGd1aWQgKyBwYXJrSWQgaXMgZnJvbSBhIHBhcmVudCBwYXJrIHNvIHdlIHNlYXJjaCBmb3IgdGhlIGNoaWxkIHBhcmtcbiAgICAgIGlmICghZmFjaWxpdHlUb1NlbGVjdEFzRGVmYXVsdCkge1xuICAgICAgICBmYWNpbGl0eVRvU2VsZWN0QXNEZWZhdWx0ID0gZmFjaWxpdGllcy5maW5kKGYgPT4gZi5ndWlkID09PSBndWlkICYmIGYuZGF0YS5tdWx0aVBhcmtQYXJlbnRJRCA9PT0gcGFya0lkKTtcbiAgICAgIH1cbiAgICAgIC8vIElmIHdlIGRpZG4ndCBmaW5kIGEgcGFya1xuICAgICAgLy8gV2UgY2hlY2sgaWYgdGhlIGd1aWQgKyBwYXJrSWQgaXMgZnJvbSBhIGNoaWxkIHBhcmsgc28gd2Ugc2VhcmNoIGZvciB0aGUgcGFyZW50IHBhcmtcbiAgICAgIGlmICghZmFjaWxpdHlUb1NlbGVjdEFzRGVmYXVsdCkge1xuICAgICAgICBjb25zdCBwYXJlbnRQYXJrSWQgPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KEZhY2lsaXR5U3RhdGUubXVsdGlQYXJrUGFyZW50SUQpO1xuICAgICAgICBmYWNpbGl0eVRvU2VsZWN0QXNEZWZhdWx0ID0gZmFjaWxpdGllcy5maW5kKGYgPT4gZi5ndWlkID09PSBndWlkICYmIGYuZGF0YS5pZCA9PT0gcGFyZW50UGFya0lkKTtcbiAgICAgICAgcGFya0lkID0gZmFjaWxpdHlUb1NlbGVjdEFzRGVmYXVsdCA/IHBhcmVudFBhcmtJZCA6IHBhcmtJZDtcbiAgICAgIH1cblxuICAgICAgLy8gSWYgd2UgZGlkbid0IGZpbmQgYSBwYXJrIG9yIHRoZSBwYXJrIGlzIE5PVCBzdXBwb3J0ZWQgb3IgTk9UIHBlcm1pdHRlZCwgdHJ5IHRvIGZpbmQgdGhlIGZpcnN0IHN1cHBvcnRlZCBmYWNpbGl0eVxuICAgICAgaWYgKCFmYWNpbGl0eVRvU2VsZWN0QXNEZWZhdWx0IHx8ICF0aGlzLmlzRmFjaWxpdHlWZXJzaW9uU3VwcG9ydGVkKGZhY2lsaXR5VG9TZWxlY3RBc0RlZmF1bHQsIG1pbmltdW1WZXJzaW9uU3VwcG9ydCkgfHxcbiAgICAgICAgIXRoaXMuaXNGYWNpbGl0eVBlcm1pc3Npb25TdXBwb3J0ZWQoZmFjaWxpdHlUb1NlbGVjdEFzRGVmYXVsdCwgcGVybWlzc2lvblN1cHBvcnQpKSB7XG4gICAgICAgIGZhY2lsaXR5VG9TZWxlY3RBc0RlZmF1bHQgPSBmYWNpbGl0aWVzLmZpbmQoZiA9PiB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaXNGYWNpbGl0eVZlcnNpb25TdXBwb3J0ZWQoZiwgbWluaW11bVZlcnNpb25TdXBwb3J0KSAmJiB0aGlzLmlzRmFjaWxpdHlQZXJtaXNzaW9uU3VwcG9ydGVkKGYsIHBlcm1pc3Npb25TdXBwb3J0KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhY2lsaXR5VG9TZWxlY3RBc0RlZmF1bHQ7XG4gIH1cblxuICBpc0ZhY2lsaXR5VmVyc2lvblN1cHBvcnRlZChmYWNpbGl0eTogRmFjaWxpdHlXaXRoR3VpZCwgbWluaW11bVZlcnNpb25TdXBwb3J0OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5pc0d1aWRWZXJzaW9uU3VwcG9ydGVkKGZhY2lsaXR5Lmd1aWQsIG1pbmltdW1WZXJzaW9uU3VwcG9ydCk7XG4gIH1cblxuICBpc0ZhY2lsaXR5UGVybWlzc2lvblN1cHBvcnRlZChmYWNpbGl0eTogRmFjaWxpdHlXaXRoR3VpZCwgcGVybWlzc2lvbnNUeXBlOiBQZXJtaXNzaW9uVHlwZSkge1xuICAgIHJldHVybiAhUGVybWlzc2lvblR5cGVbcGVybWlzc2lvbnNUeXBlXSB8fCB0aGlzLmhhc1Blcm1pc3Npb25UeXBlQnlQYXJrKHBlcm1pc3Npb25zVHlwZSwgZmFjaWxpdHkuZ3VpZCwgZmFjaWxpdHkuZGF0YS5pZCk7XG4gIH1cblxuICBpc0d1aWRWZXJzaW9uU3VwcG9ydGVkKGd1aWQ6IHN0cmluZywgbWluaW11bVZlcnNpb25TdXBwb3J0OiBzdHJpbmcpIHtcbiAgICBjb25zdCBzcGFya1ZlcnNpb24gPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KCh7IHNtYXJ0cGFyazogeyB2ZXJzaW9ucyB9IH0pID0+IHZlcnNpb25zW2d1aWRdKTtcbiAgICByZXR1cm4gIW1pbmltdW1WZXJzaW9uU3VwcG9ydCB8fCAoc3BhcmtWZXJzaW9uICYmIGlzVmVyc2lvbkdyZWF0ZXJUaGFuRXF1YWwoc3BhcmtWZXJzaW9uLCBtaW5pbXVtVmVyc2lvblN1cHBvcnQpKTtcbiAgfVxuXG4gIGNsZWFySW5hY3RpdmVTZWxlY3RlZFBhcmsoKSB7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgQ2xlYXJJbmFjdGl2ZVNlbGVjdGVkUGFya0FjdGlvbigpKTtcbiAgfVxuXG4gIHByaXZhdGUgcG9wdWxhdGVNdWx0aUd1aWRzKGZhY2lsaXR5RGljdGlvbmFyeTogRmFjaWxpdHlEaWN0aW9uYXJ5LCBtb2RlOiBTZWFyY2hGYWNpbGl0aWVzTW9kZSk6IEZhY2lsaXR5V2l0aEd1aWRbXSB7XG4gICAgY29uc3QgZmFjaWxpdGllczogRmFjaWxpdHlXaXRoR3VpZFtdID0gW107XG4gICAgZm9yIChjb25zdCBndWlkIG9mIE9iamVjdC5rZXlzKGZhY2lsaXR5RGljdGlvbmFyeSkpIHtcbiAgICAgIGZhY2lsaXRpZXMucHVzaCguLi50aGlzLnBvcHVsYXRlU2luZ2xlR3VpZChmYWNpbGl0eURpY3Rpb25hcnlbZ3VpZF0sIG1vZGUsIGd1aWQpKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhY2lsaXRpZXM7XG4gIH1cblxuICBwcml2YXRlIHBvcHVsYXRlU2luZ2xlR3VpZChsb3RzTWFwOiBOdW1iZXJNYXA8RmFjaWxpdHlEdG8+LCBtb2RlOiBTZWFyY2hGYWNpbGl0aWVzTW9kZSwgZ3VpZDogc3RyaW5nKTogRmFjaWxpdHlXaXRoR3VpZFtdIHtcbiAgICBjb25zdCBmYWNpbGl0aWVzOiBGYWNpbGl0eVdpdGhHdWlkW10gPSBbXTtcbiAgICBjb25zdCBsb3RzOiBGYWNpbGl0eUR0b1tdID0gT2JqZWN0LnZhbHVlcyhsb3RzTWFwKTtcbiAgICBjb25zdCBwYXJlbnRQYXJrOiBGYWNpbGl0eUR0byA9IGxvdHMuZmluZChsID0+IGwuaXNNdWx0aVBhcmspO1xuXG4gICAgZm9yIChjb25zdCBsb3Qgb2YgbG90cykge1xuICAgICAgaWYgKG1vZGUgPT09IFNlYXJjaEZhY2lsaXRpZXNNb2RlLm9ubHlQYXJlbnRzICYmIGxvdC5tdWx0aVBhcmtQYXJlbnRJRCA9PT0gMCB8fFxuICAgICAgICBtb2RlID09PSBTZWFyY2hGYWNpbGl0aWVzTW9kZS5vbmx5Q2hpbGRyZW4gJiYgbG90LmlzTXVsdGlQYXJrID09PSAwIHx8XG4gICAgICAgIG1vZGUgPT09IFNlYXJjaEZhY2lsaXRpZXNNb2RlLnBhcmVudHNXaXRoQ2hpbGRyZW4pIHtcbiAgICAgICAgbG90Lm5hbWUgPSAhIXBhcmVudFBhcmsgJiYgIWxvdC5pc011bHRpUGFyayA/IGAke3BhcmVudFBhcmsubmFtZX0gLSAke2xvdC5uYW1lfWAgOiBgJHtsb3QubmFtZX1gO1xuICAgICAgICBmYWNpbGl0aWVzLnB1c2goeyBndWlkLCBkYXRhOiBsb3QgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhY2lsaXRpZXM7XG4gIH1cblxuICBwcml2YXRlIGZsYXRlblRyZWUoZmFjaWxpdHlUcmVlOiBGYWNpbGl0eVRyZWVEdG9bXSwgZmFjaWxpdGllc01hcDogTWFwPG51bWJlciwgRmFjaWxpdHlUcmVlRHRvPiwgaXNDbG91ZEFwcDogYm9vbGVhbikge1xuICAgIGZhY2lsaXR5VHJlZS5mb3JFYWNoKGZ0ID0+IHtcbiAgICAgIGlmIChmdC5jaGlsZHJlbikge1xuICAgICAgICBjb25zdCBmbGF0Tm9kZTogRmFjaWxpdHlUcmVlRHRvID0gRmFjaWxpdHlUcmVlRHRvLmZyb21KUyhmdCk7XG4gICAgICAgIHRoaXMuYWRkVG9NYXAoaXNDbG91ZEFwcCwgZmFjaWxpdGllc01hcCwgZmxhdE5vZGUpO1xuICAgICAgICB0aGlzLmZsYXRlblRyZWUoZnQuY2hpbGRyZW4sIGZhY2lsaXRpZXNNYXAsIGlzQ2xvdWRBcHApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZnQuY2hpbGRyZW4gPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuYWRkVG9NYXAoaXNDbG91ZEFwcCwgZmFjaWxpdGllc01hcCwgZnQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRUb01hcChpc0Nsb3VkQXBwOiBib29sZWFuLCBmYWNpbGl0aWVzTWFwOiBNYXA8bnVtYmVyLCBGYWNpbGl0eVRyZWVEdG8+LCBmdDogRmFjaWxpdHlUcmVlRHRvKSB7XG4gICAgaWYgKGlzQ2xvdWRBcHApIHtcbiAgICAgIGZhY2lsaXRpZXNNYXAuc2V0KGZ0LmNsb3VkSWQsIGZ0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZmFjaWxpdGllc01hcC5zZXQoZnQuaWQsIGZ0KTtcbiAgICB9XG4gIH1cblxuICBnZXRQYXJrSWRzKCk6IG51bWJlcltdIHtcbiAgICBsZXQgZ3VpZCA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoRmFjaWxpdHlTdGF0ZS5ndWlkKTtcbiAgICBsZXQgcGFya0lkID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChGYWNpbGl0eVN0YXRlLnBhcmtJZCk7XG4gICAgbGV0IHBhcmtJZHMgPSB0aGlzLmdldFBhcmtzKHBhcmtJZCwgZ3VpZCk7XG4gICAgcmV0dXJuIHBhcmtJZHM7XG4gIH1cblxuICBpbml0U2VsZWN0ZWRQYXJrKGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSkge1xuICAgIHJldHVybiBhY3RpdmF0ZWRSb3V0ZS5wYXJhbXMucGlwZShcbiAgICAgIGZpbHRlcihwYXJhbXMgPT4gT2JqZWN0LmtleXMocGFyYW1zKS5sZW5ndGggPiAwKSxcbiAgICAgIHN3aXRjaE1hcChwYXJhbXMgPT4ge1xuICAgICAgICBsZXQgZ3VpZDogc3RyaW5nO1xuICAgICAgICBjb25zdCBwYXJrSWQgPSArcGFyYW1zLnBhcmtJZDtcbiAgICAgICAgY29uc3QgdGliYUtleSA9IHBhcmFtcy50aWJhS2V5O1xuICAgICAgICByZXR1cm4gdGhpcy5zdG9yZS5zZWxlY3QoRmFjaWxpdHlTdGF0ZS50aWJhS2V5cykucGlwZShcbiAgICAgICAgICBmaWx0ZXIodGliYUtleXMgPT4gT2JqZWN0LmtleXModGliYUtleXMpLmxlbmd0aCA+IDApLFxuICAgICAgICAgIG1hcCh0aWJhS2V5cyA9PiB7XG4gICAgICAgICAgICBndWlkID0gT2JqZWN0LmtleXModGliYUtleXMpW3RpYmFLZXldO1xuICAgICAgICAgICAgcmV0dXJuIHsgZ3VpZCwgcGFya0lkIH07XG4gICAgICAgICAgfSkpO1xuICAgICAgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQYXJrcyhwYXJrSWQ6IG51bWJlciwgZ3VpZDogc3RyaW5nKSB7XG4gICAgbGV0IHBhcmtJZHMgPSBbXTtcbiAgICBjb25zdCBmYWNpbGl0eURpY3Rpb25hcnkgPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KEZhY2lsaXR5U3RhdGUuZmFjaWxpdHlEaWN0aW9uYXJ5KTtcbiAgICBjb25zdCBndWlkRmFjaWxpdGllc01hcCA9IGZhY2lsaXR5RGljdGlvbmFyeVtndWlkXTtcblxuICAgIGlmIChndWlkRmFjaWxpdGllc01hcCAmJiBndWlkRmFjaWxpdGllc01hcFtwYXJrSWRdPy5pc011bHRpUGFyaykge1xuICAgICAgcGFya0lkcyA9IE9iamVjdC52YWx1ZXMoZ3VpZEZhY2lsaXRpZXNNYXApLmZpbHRlcihmID0+ICFmLmlzTXVsdGlQYXJrKS5tYXAoZiA9PiBmLmlkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGFya0lkcy5wdXNoKHBhcmtJZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmtJZHM7XG4gIH1cblxuICBwdWJsaWMgZ2V0RGVmYXVsdEZhY2lsaXR5Um91dGVCeU1lbnVJdGVtcyhtZW51SXRlbXM6IE1lbnVJdGVtW10pIHtcbiAgICBsZXQgbWVudUl0ZW06IE1lbnVJdGVtO1xuICAgIGNvbnN0IGd1aWQgPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KEZhY2lsaXR5U3RhdGUuZ3VpZCk7XG4gICAgY29uc3QgcGFya0lkID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChGYWNpbGl0eVN0YXRlLnBhcmtJZCk7XG5cbiAgICBpZiAoISFndWlkICYmIHBhcmtJZCA+PSAwKSB7XG4gICAgICBtZW51SXRlbSA9IHRoaXMuZ2V0QWN0aXZlTWVudUZhY2lsaXR5KG1lbnVJdGVtcywgcGFya0lkLCBndWlkKTtcbiAgICAgIGlmICghbWVudUl0ZW0pIHtcbiAgICAgICAgbWVudUl0ZW0gPSB0aGlzLmdldEFjdGl2ZU1lbnVGYWNpbGl0eUNoaWxkKG1lbnVJdGVtcywgcGFya0lkLCBndWlkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIW1lbnVJdGVtKSB7XG4gICAgICBtZW51SXRlbSA9IHRoaXMuZ2V0Rmlyc3RNZW51SXRlbUZhY2lsaXR5KG1lbnVJdGVtcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1lbnVJdGVtPy5yb3V0ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXREZWZhdWx0RmFjaWxpdHlSb3V0ZSgpIHtcbiAgICBjb25zdCBtZW51SXRlbXMgPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KFNpZGVuYXZTdGF0ZS5tZW51SXRlbXMpO1xuICAgIHJldHVybiB0aGlzLmdldERlZmF1bHRGYWNpbGl0eVJvdXRlQnlNZW51SXRlbXMobWVudUl0ZW1zKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRGYWNpbGl0eURpY3Rpb25hcnkkKCk6IE9ic2VydmFibGU8RmFjaWxpdHlEaWN0aW9uYXJ5PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RvcmUuc2VsZWN0KEZhY2lsaXR5U3RhdGUuZmFjaWxpdHlEaWN0aW9uYXJ5KS5waXBlKFxuICAgICAgZmlsdGVyKGZhY2lsaXR5RGljdGlvbmFyeSA9PiBPYmplY3Qua2V5cyhmYWNpbGl0eURpY3Rpb25hcnkpLmxlbmd0aCA+IDApLFxuICAgICAgZmlyc3QoKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldEFjdGl2ZU1lbnVGYWNpbGl0eSA9IChtZW51SXRlbXM6IE1lbnVJdGVtW10sIHBhcmtJZDogbnVtYmVyLCBndWlkOiBzdHJpbmcpID0+XG4gICAgbWVudUl0ZW1zLmZpbmQobWVudUl0ZW0gPT4gbWVudUl0ZW0ucHJvcGVydGllcz8uZ3VpZCA9PT0gZ3VpZCAmJiBtZW51SXRlbS5pZCA9PT0gcGFya0lkKTtcblxuICBwcml2YXRlIGdldEFjdGl2ZU1lbnVGYWNpbGl0eUNoaWxkKG1lbnVJdGVtczogTWVudUl0ZW1bXSwgcGFya0lkOiBudW1iZXIsIGd1aWQ6IHN0cmluZykge1xuICAgIGNvbnN0IG11bHRpRmFjaWxpdHlQYXJlbnRJRCA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoRmFjaWxpdHlTdGF0ZS5tdWx0aVBhcmtQYXJlbnRJRCk7XG4gICAgY29uc3QgbWVudUl0ZW1QYXJlbnQgPSBtZW51SXRlbXMuZmluZChtZW51SXRlbSA9PiBtZW51SXRlbS5wcm9wZXJ0aWVzPy5ndWlkID09PSBndWlkICYmIG1lbnVJdGVtLmlkID09PSBtdWx0aUZhY2lsaXR5UGFyZW50SUQpO1xuICAgIGNvbnN0IG1lbnVJdGVtID0gbWVudUl0ZW1QYXJlbnQ/LmNoaWxkcmVuPy5maW5kKG1lbnVJdGVtID0+IG1lbnVJdGVtLmlkID09PSBwYXJrSWQpO1xuICAgIHJldHVybiBtZW51SXRlbTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Rmlyc3RNZW51SXRlbUZhY2lsaXR5KG1lbnVJdGVtczogTWVudUl0ZW1bXSkge1xuICAgIC8vIHdlIHNvcnQgYnkgbmFtZSAodGhlIGRlZmF1bHQgbWVudSBpdGVtIHNvcnQgcHJvcGVydHkpIGFuZCByb3V0ZSB0byB0aGUgZmlyc3QgbWVudSBpdGVtXG4gICAgY29uc3Qgc29ydFByb3BlcnR5ID0gREVGQVVMVF9TT1JUX01FTlUgPT09IFNpZGVOYXZTb3J0QnkucGFya2luZ19sb3Rfc29ydF9ieV9uYW1lX2FfeiA/ICduYW1lJyA6ICdzaXRlY29kZSc7XG4gICAgY29uc3QgZmlyc3RNZW51SXRlbSA9IGNsb25lRGVlcChtZW51SXRlbXMpLnNvcnQoKGEsIGIpID0+IGFbc29ydFByb3BlcnR5XSA+IGJbc29ydFByb3BlcnR5XSA/IDEgOiAtMSlbMF07XG4gICAgcmV0dXJuIGZpcnN0TWVudUl0ZW07XG4gIH1cbn1cbiJdfQ==
297
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjaWxpdHkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC1zaGFyZWQtbGliL3NyYy9saWJyYXJpZXMvbW9kdWxlcy9mYWNpbGl0eS9mYWNpbGl0eS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR3JELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDbkMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBYyxFQUFFLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUU3RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUcvRixPQUFPLEVBQUUsd0NBQXdDLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUU5RSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUM3RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRzNFLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7OztBQUdqRCxNQUFNLE9BQU8sZUFB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R0FBRyxpQkFBaUIsS0FBSyxhQUFhLENBQUMsNEJBQTRCLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDO1FBQzVHLE1BQU0sYUFBYSxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekcsT0FBTyxhQUFhLENBQUM7SUFDdkIsQ0FBQzsrR0EzVVUsZUFBZTttSEFBZixlQUFlOzs0RkFBZixlQUFlO2tCQUQzQixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29tcHV0ZWQsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFN0b3JlIH0gZnJvbSAnQG5neHMvc3RvcmUnO1xuaW1wb3J0IHsgY2xvbmVEZWVwIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZmlsdGVyLCBmaXJzdCwgbWFwLCBPYnNlcnZhYmxlLCBvZiwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBFTkdMSVNIX0xBTkdVQUdFIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2dsb2JhbC1jb25zdGFudHMnO1xuaW1wb3J0IHsgQXBwVHlwZSB9IGZyb20gJy4uLy4uL2VudW1zL2FwcC10eXBlLmVudW0nO1xuaW1wb3J0IHsgU2VhcmNoRmFjaWxpdGllc01vZGUgfSBmcm9tICcuLi8uLi9lbnVtcy9zZWFyY2gtZmFjaWxpdHktbW9kZS5lbnVtJztcbmltcG9ydCB7IE1lbnVJdGVtIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9tZW51LWl0ZW0uaW50ZXJmYWNlJztcbmltcG9ydCB7IFBlcm1pc3Npb25UeXBlIH0gZnJvbSAnLi4vLi4vc2VydmljZS1wcm94eS9jbG91ZC1zZXJ2aWNlLXByb3hpZXMnO1xuaW1wb3J0IHsgRmFjaWxpdHlUcmVlRHRvLCBQYXJrQnJhbmNoVHlwZSB9IGZyb20gJy4uLy4uL3NlcnZpY2UtcHJveHkvaWRlbnRpdHktc2VydmljZS1wcm94aWVzJztcbmltcG9ydCB7IEZhY2lsaXR5RHRvIH0gZnJvbSAnLi4vLi4vc2VydmljZS1wcm94eS9ycGMtc2VydmljZS1wcm94aWVzJztcbmltcG9ydCB7IEFwcENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hcHAtY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgUGVybWlzc2lvblR5cGVTdXBwb3J0ZWRWZXJzaW9uRGljdGlvbmFyeSB9IGZyb20gJy4uLy4uL3N0YXRpYy1maWxlcyc7XG5pbXBvcnQgeyBOdW1iZXJNYXAgfSBmcm9tICcuLi8uLi91dGlscy9sYW5nLnV0aWwnO1xuaW1wb3J0IHsgaXNWZXJzaW9uR3JlYXRlclRoYW5FcXVhbCB9IGZyb20gJy4uLy4uL3V0aWxzL3N1cHBvcnQtdmVyc2lvbi51dGlsJztcbmltcG9ydCB7IFNpZGVOYXZTb3J0QnkgfSBmcm9tICcuLi9zaWRlbmF2L3NpZGVuYXYtc29ydC5lbnVtJztcbmltcG9ydCB7IERFRkFVTFRfU09SVF9NRU5VLCBTaWRlbmF2U3RhdGUgfSBmcm9tICcuLi9zaWRlbmF2L3NpZGVuYXYuc3RhdGUnO1xuaW1wb3J0IHsgRmFjaWxpdHlEaWN0aW9uYXJ5IH0gZnJvbSAnLi9mYWNpbGl0eS1tb2RhbCc7XG5pbXBvcnQgeyBGYWNpbGl0eVdpdGhHdWlkIH0gZnJvbSAnLi9mYWNpbGl0eS13aXRoLWd1aWQuaW50ZXJmYWNlJztcbmltcG9ydCB7IENsZWFySW5hY3RpdmVTZWxlY3RlZFBhcmtBY3Rpb24gfSBmcm9tICcuL2ZhY2lsaXR5LmFjdGlvbnMnO1xuaW1wb3J0IHsgRmFjaWxpdHlTdGF0ZSB9IGZyb20gJy4vZmFjaWxpdHkuc3RhdGUnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRmFjaWxpdHlTZXJ2aWNlIHtcblxuICBnZXQgbG9hZGluZyQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMubG9hZGluZy5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZGluZzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBhcHBDb25maWc6IEFwcENvbmZpZ1NlcnZpY2UsIHByaXZhdGUgc3RvcmU6IFN0b3JlKSB7XG4gIH1cblxuICBpc1BhcmVudCA9IChmYWNpbGl0eTogRmFjaWxpdHlUcmVlRHRvKSA9PiB0cnVlO1xuICBpc0NoaWxkcmVuID0gKGZhY2lsaXR5OiBGYWNpbGl0eVRyZWVEdG8pID0+IHRydWU7XG4gIGlzUGFyZW50T3JDaGlsZCA9IChmYWNpbGl0eTogRmFjaWxpdHlUcmVlRHRvKSA9PiB0aGlzLmlzQ2hpbGRyZW4oZmFjaWxpdHkpIHx8IHRoaXMuaXNQYXJlbnQoZmFjaWxpdHkpO1xuICBpc0NoaWxkID0gKGZhY2lsaXR5OiBGYWNpbGl0eVRyZWVEdG8pID0+IGZhY2lsaXR5LnR5cGUgPT09IFBhcmtCcmFuY2hUeXBlLlBhcms7XG5cbiAgaGFzU3lzdGVtQWRtaW5QZXJtaXNzaW9ucyA9ICgpID0+IHtcbiAgICBjb25zdCBmZWF0dXJlUGVybWlzc2lvbnMgPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KEZhY2lsaXR5U3RhdGUuZmVhdHVyZVBlcm1pc3Npb25zKTtcbiAgICByZXR1cm4gZmVhdHVyZVBlcm1pc3Npb25zPy5zb21lKHAgPT4gcCA9PT0gUGVybWlzc2lvblR5cGUuT3BlcmF0aW9uYWxBZG1pbiB8fCBwID09PSBQZXJtaXNzaW9uVHlwZS5TeXN0ZW1BZG1pbik7XG4gIH07XG5cbiAgaGFzUGVybWlzc2lvblR5cGVzQnlQYXJrID0gKHBlcm1pc3Npb25UeXBlczogUGVybWlzc2lvblR5cGVbXSwgZ3VpZDogc3RyaW5nLCBwYXJrSWQ6IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IGZhY2lsaXR5RGljdGlvbmFyeSA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoRmFjaWxpdHlTdGF0ZS5mYWNpbGl0eURpY3Rpb25hcnkpO1xuICAgIC8vIFNQUkszLTE0ODEyOiB0aGUgZGljdGlvbmFyeSBpcyBub3QgaHlkcmF0ZWQgZm9yIGV2ZXJ5IGd1aWQvcGFyayBhdCBldmVyeSBwb2ludFxuICAgIC8vIGluIHRoZSBjaGFuZ2UtZGV0ZWN0aW9uIGN5Y2xlLiBBbiB1bmtub3duIHBhcmsgZ3JhbnRzIG5vdGhpbmcgKGZhaWwgY2xvc2VkKS5cbiAgICBjb25zdCBmZWF0dXJlUGVybWlzc2lvbnMgPSBmYWNpbGl0eURpY3Rpb25hcnk/LltndWlkXT8uW3BhcmtJZF0/LmZlYXR1cmVQZXJtaXNzaW9ucztcbiAgICBjb25zdCBzcGFya1ZlcnNpb24gPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KCh7IHNtYXJ0cGFyazogeyB2ZXJzaW9ucyB9IH0pID0+IHZlcnNpb25zW2d1aWRdKTtcblxuICAgIHJldHVybiBwZXJtaXNzaW9uVHlwZXMucmVkdWNlKChhY2MsIHBlcm1pc3Npb25UeXBlKSA9PiB7XG4gICAgICBjb25zdCBwZXJtaXNzaW9uU3VwcG9ydFZlcnNpb24gPSBQZXJtaXNzaW9uVHlwZVN1cHBvcnRlZFZlcnNpb25EaWN0aW9uYXJ5W3Blcm1pc3Npb25UeXBlXTtcbiAgICAgIGlmICghcGVybWlzc2lvblN1cHBvcnRWZXJzaW9uKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgUGVybWlzc2lvbiAke3Blcm1pc3Npb25UeXBlfSB2ZXJzaW9uIHN1cHBvcnQgaXMgbWlzc2luZyBpbiBQZXJtaXNzaW9uVHlwZVN1cHBvcnRlZFZlcnNpb25EaWN0aW9uYXJ5IGZpbGVgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgaXNWZXJzaW9uU3VwcG9ydGVkID0gaXNWZXJzaW9uR3JlYXRlclRoYW5FcXVhbChzcGFya1ZlcnNpb24sIHBlcm1pc3Npb25TdXBwb3J0VmVyc2lvbik7XG4gICAgICAvLyBpc1ZlcnNpb25HcmVhdGVyVGhhbkVxdWFsIHJldHVybnMgdW5kZWZpbmVkIChub3QgZmFsc2UpIGZvciBhbiB1bmtub3duIHZlcnNpb25cbiAgICAgIC8vIGRlc3BpdGUgaXRzIGRlY2xhcmVkIGJvb2xlYW4gcmV0dXJuLCB3aGljaCBsZWFrZWQgdW5kZWZpbmVkIGludG8gYSBkaWN0aW9uYXJ5XG4gICAgICAvLyB0eXBlZCB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfS4gQ29lcmNlIHNvIHRoZSBkZWNsYXJlZCB0eXBlIGhvbGRzLlxuICAgICAgYWNjW3Blcm1pc3Npb25UeXBlXSA9ICEhKGlzVmVyc2lvblN1cHBvcnRlZCAmJiBmZWF0dXJlUGVybWlzc2lvbnM/LmluY2x1ZGVzKHBlcm1pc3Npb25UeXBlKSk7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9IGFzIHsgW2tleTogc3RyaW5nXTogYm9vbGVhbjsgfSk7XG4gIH07XG5cbiAgaGFzUGVybWlzc2lvblR5cGVCeVBhcmsgPSAocGVybWlzc2lvblR5cGU6IFBlcm1pc3Npb25UeXBlLCBndWlkOiBzdHJpbmcsIHBhcmtJZDogbnVtYmVyKSA9PiB7XG4gICAgbGV0IGhhc1Blcm1pc3Npb24gPSBmYWxzZTtcbiAgICBsZXQgaXNWZXJzaW9uU3VwcG9ydGVkID0gdGhpcy5pc1ZlcnNpb25TdXBwb3J0ZWQocGVybWlzc2lvblR5cGUsIGd1aWQpO1xuICAgIGlmIChpc1ZlcnNpb25TdXBwb3J0ZWQpIHtcbiAgICAgIGNvbnN0IGZhY2lsaXR5RGljdGlvbmFyeSA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoRmFjaWxpdHlTdGF0ZS5mYWNpbGl0eURpY3Rpb25hcnkpO1xuICAgICAgLy8gU1BSSzMtMTQ4MTIgKFNlbnRyeSBKQVZBU0NSSVBULUFOR1VMQVItSyk6IHRoZSBvcHRpb25hbCBjaGFpbiBzYXQgb25lIGxldmVsIHRvb1xuICAgICAgLy8gZGVlcCAtLSBbZ3VpZF0gYW5kIFtwYXJrSWRdIHdlcmUgYm90aCBpbmRleGVkIHVuZ3VhcmRlZC4gRmFpbCBjbG9zZWQsIHdoaWNoIGlzXG4gICAgICAvLyB3aGF0IHRoZSBgaGFzUGVybWlzc2lvbiA9IGZhbHNlYCBpbml0aWFsaXNlciBhYm92ZSBhbHJlYWR5IHByb21pc2VzIGNhbGxlcnMuXG4gICAgICBjb25zdCBmZWF0dXJlUGVybWlzc2lvbnMgPSBmYWNpbGl0eURpY3Rpb25hcnk/LltndWlkXT8uW3BhcmtJZF0/LmZlYXR1cmVQZXJtaXNzaW9ucztcbiAgICAgIGhhc1Blcm1pc3Npb24gPSAhIWZlYXR1cmVQZXJtaXNzaW9ucz8uaW5jbHVkZXMocGVybWlzc2lvblR5cGUpO1xuICAgIH1cblxuICAgIHJldHVybiBoYXNQZXJtaXNzaW9uO1xuICB9O1xuXG4gIGhhc1Blcm1pc3Npb25UeXBlJCA9IChwZXJtaXNzaW9uVHlwZTogUGVybWlzc2lvblR5cGUpID0+XG4gICAgdGhpcy5pc1ZlcnNpb25TdXBwb3J0ZWQkKHBlcm1pc3Npb25UeXBlKS5waXBlKHN3aXRjaE1hcChpc1ZlcnNpb25TdXBwb3J0ZWQgPT4ge1xuICAgICAgcmV0dXJuICFpc1ZlcnNpb25TdXBwb3J0ZWQgPyBvZihmYWxzZSkgOiB0aGlzLnN0b3JlLnNlbGVjdChGYWNpbGl0eVN0YXRlLmZlYXR1cmVQZXJtaXNzaW9ucykucGlwZShtYXAoZmVhdHVyZVBlcm1pc3Npb25zID0+XG4gICAgICAgIGZlYXR1cmVQZXJtaXNzaW9ucz8uaW5jbHVkZXMocGVybWlzc2lvblR5cGUpKSk7XG4gICAgfSkpO1xuXG4gIGlzVmVyc2lvblN1cHBvcnRlZCQgPSAocGVybWlzc2lvblR5cGU6IFBlcm1pc3Npb25UeXBlKSA9PlxuICAgIHRoaXMuc3RvcmUuc2VsZWN0KEZhY2lsaXR5U3RhdGUuZ3VpZCkucGlwZShmaWx0ZXIoZ3VpZCA9PiAhIWd1aWQpLCBtYXAoZ3VpZCA9PiB0aGlzLmlzVmVyc2lvblN1cHBvcnRlZChwZXJtaXNzaW9uVHlwZSwgZ3VpZCkpKTtcblxuICBoYXNQZXJtaXNzaW9uVHlwZVNpZ25hbChwZXJtaXNzaW9uVHlwZTogUGVybWlzc2lvblR5cGUpIHtcbiAgICByZXR1cm4gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgbGV0IGlzUGVybWl0dGVkID0gZmFsc2U7XG4gICAgICBjb25zdCBpc1ZlcnNpb25TdXBwb3J0ZWQgPSB0aGlzLmlzVmVyc2lvblN1cHBvcnRlZFNpZ25hbChwZXJtaXNzaW9uVHlwZSkoKTtcbiAgICAgIGlmIChpc1ZlcnNpb25TdXBwb3J0ZWQpIHtcbiAgICAgICAgY29uc3QgZmVhdHVyZVBlcm1pc3Npb25zID0gdGhpcy5zdG9yZS5zZWxlY3RTaWduYWwoRmFjaWxpdHlTdGF0ZS5mZWF0dXJlUGVybWlzc2lvbnMpKCk7XG4gICAgICAgIGlzUGVybWl0dGVkID0gISFmZWF0dXJlUGVybWlzc2lvbnM/LmluY2x1ZGVzKHBlcm1pc3Npb25UeXBlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGlzUGVybWl0dGVkO1xuICAgIH0pO1xuICB9XG4gICAgXG4gIGlzVmVyc2lvblN1cHBvcnRlZFNpZ25hbChwZXJtaXNzaW9uVHlwZTogUGVybWlzc2lvblR5cGUpIHtcbiAgICByZXR1cm4gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgY29uc3QgZ3VpZCA9IHRoaXMuc3RvcmUuc2VsZWN0U2lnbmFsKEZhY2lsaXR5U3RhdGUuZ3VpZCkoKTtcbiAgICAgIHJldHVybiAhIWd1aWQgJiYgdGhpcy5pc1ZlcnNpb25TdXBwb3J0ZWQocGVybWlzc2lvblR5cGUsIGd1aWQpO1xuICAgIH0pO1xuICB9XG5cbiAgaXNWZXJzaW9uU3VwcG9ydGVkID0gKHBlcm1pc3Npb25UeXBlOiBQZXJtaXNzaW9uVHlwZSwgZ3VpZDogc3RyaW5nKSA9PiB7XG4gICAgY29uc3Qgc3BhcmtWZXJzaW9uID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdCgoeyBzbWFydHBhcms6IHsgdmVyc2lvbnMgfSB9KSA9PiB2ZXJzaW9uc1tndWlkXSk7XG4gICAgY29uc3QgcGVybWlzc2lvblN1cHBvcnRWZXJzaW9uID0gUGVybWlzc2lvblR5cGVTdXBwb3J0ZWRWZXJzaW9uRGljdGlvbmFyeVtwZXJtaXNzaW9uVHlwZV07XG4gICAgaWYgKCFwZXJtaXNzaW9uU3VwcG9ydFZlcnNpb24pIHtcbiAgICAgIGNvbnNvbGUud2FybihgUGVybWlzc2lvbiAke3Blcm1pc3Npb25UeXBlfSB2ZXJzaW9uIHN1cHBvcnQgaXMgbWlzc2luZyBpbiBQZXJtaXNzaW9uVHlwZVN1cHBvcnRlZFZlcnNpb25EaWN0aW9uYXJ5IGZpbGVgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaXNWZXJzaW9uR3JlYXRlclRoYW5FcXVhbChzcGFya1ZlcnNpb24sIHBlcm1pc3Npb25TdXBwb3J0VmVyc2lvbik7XG4gIH07XG5cbiAgaGFzUGVybWlzc2lvblR5cGUgPSAocGVybWlzc2lvblR5cGU6IFBlcm1pc3Npb25UeXBlKSA9PiB7XG4gICAgY29uc3QgZ3VpZCA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoRmFjaWxpdHlTdGF0ZS5ndWlkKTtcbiAgICBjb25zdCBzcGFya1ZlcnNpb24gPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KCh7IHNtYXJ0cGFyazogeyB2ZXJzaW9ucyB9IH0pID0+IHZlcnNpb25zW2d1aWRdKTtcbiAgICBjb25zdCBwZXJtaXNzaW9uU3VwcG9ydFZlcnNpb24gPSBQZXJtaXNzaW9uVHlwZVN1cHBvcnRlZFZlcnNpb25EaWN0aW9uYXJ5W3Blcm1pc3Npb25UeXBlXTtcbiAgICBpZiAoIXBlcm1pc3Npb25TdXBwb3J0VmVyc2lvbikge1xuICAgICAgY29uc29sZS53YXJuKGBQZXJtaXNzaW9uICR7cGVybWlzc2lvblR5cGV9IHZlcnNpb24gc3VwcG9ydCBpcyBtaXNzaW5nIGluIFBlcm1pc3Npb25UeXBlU3VwcG9ydGVkVmVyc2lvbkRpY3Rpb25hcnlgKTtcbiAgICB9XG5cbiAgICBjb25zdCBpc1ZlcnNpb25TdXBwb3J0ZWQgPSBpc1ZlcnNpb25HcmVhdGVyVGhhbkVxdWFsKHNwYXJrVmVyc2lvbiwgcGVybWlzc2lvblN1cHBvcnRWZXJzaW9uKTtcbiAgICBjb25zdCBmZWF0dXJlUGVybWlzc2lvbnMgPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KEZhY2lsaXR5U3RhdGUuZmVhdHVyZVBlcm1pc3Npb25zKTtcbiAgICByZXR1cm4gaXNWZXJzaW9uU3VwcG9ydGVkICYmIGZlYXR1cmVQZXJtaXNzaW9ucz8uaW5jbHVkZXMocGVybWlzc2lvblR5cGUpO1xuICB9O1xuXG4gIGdldEZhY2lsaXRpZXMoZmFjaWxpdHlUcmVlOiBGYWNpbGl0eVRyZWVEdG9bXSwgZmlsdGVyOiAoRmFjaWxpdHlUcmVlRHRvKSA9PiBib29sZWFuID0gbnVsbCk6IEZhY2lsaXR5VHJlZUR0b1tdIHtcbiAgICBjb25zdCBmYWNpbGl0aWVzOiBGYWNpbGl0eVRyZWVEdG9bXSA9IFtdO1xuICAgIGNvbnN0IGlzQ2xvdWRBcHAgPSB0aGlzLmFwcENvbmZpZy5nZXRDb25maWcoKS5hcHBUeXBlID09PSBBcHBUeXBlLkNsb3VkO1xuXG4gICAgZmFjaWxpdHlUcmVlLmZvckVhY2goZiA9PiB7XG4gICAgICBjb25zdCBmYWNpbGl0eUNvcHkgPSBuZXcgRmFjaWxpdHlUcmVlRHRvKGYpO1xuICAgICAgaWYgKGlzQ2xvdWRBcHApIHtcbiAgICAgICAgZmFjaWxpdHlDb3B5LmlkID0gZi5jbG91ZElkO1xuICAgICAgfVxuICAgICAgaWYgKCFmaWx0ZXIgfHwgZmlsdGVyKGZhY2lsaXR5Q29weSkpIHtcbiAgICAgICAgZmFjaWxpdGllcy5wdXNoKGZhY2lsaXR5Q29weSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZmFjaWxpdGllcztcbiAgfVxuXG4gIGV4dHJhY3RGYWNpbGl0eU1hcChmYWNpbGl0eVRyZWU6IEZhY2lsaXR5VHJlZUR0b1tdKSB7XG4gICAgY29uc3QgaXNDbG91ZEFwcCA9IHRoaXMuYXBwQ29uZmlnLmdldENvbmZpZygpLmFwcFR5cGUgPT09IEFwcFR5cGUuQ2xvdWQ7XG4gICAgY29uc3QgZmFjaWxpdGllc01hcCA9IG5ldyBNYXA8bnVtYmVyLCBGYWNpbGl0eVRyZWVEdG8+KCk7XG4gICAgdGhpcy5mbGF0ZW5UcmVlKGZhY2lsaXR5VHJlZSwgZmFjaWxpdGllc01hcCwgaXNDbG91ZEFwcCk7XG4gICAgcmV0dXJuIGZhY2lsaXRpZXNNYXA7XG4gIH1cblxuICBwb3B1bGF0ZUZhY2lsaXRpZXMoZmFjaWxpdHlEaWN0aW9uYXJ5OiBGYWNpbGl0eURpY3Rpb25hcnksIG1vZGU6IFNlYXJjaEZhY2lsaXRpZXNNb2RlLCBzaW5nbGVHdWlkRGlzcGxheTogc3RyaW5nKTogRmFjaWxpdHlXaXRoR3VpZFtdIHtcbiAgICBjb25zdCBjbG9uZWRGYWNpbGl0aWVzID0gY2xvbmVEZWVwKGZhY2lsaXR5RGljdGlvbmFyeSk7XG4gICAgbGV0IGZhY2lsaXRpZXM6IEZhY2lsaXR5V2l0aEd1aWRbXSA9IFtdO1xuICAgIGlmICghIXNpbmdsZUd1aWREaXNwbGF5KSB7XG4gICAgICBmYWNpbGl0aWVzID0gdGhpcy5wb3B1bGF0ZVNpbmdsZUd1aWQoY2xvbmVkRmFjaWxpdGllc1tzaW5nbGVHdWlkRGlzcGxheV0sIG1vZGUsIHNpbmdsZUd1aWREaXNwbGF5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZmFjaWxpdGllcyA9IHRoaXMucG9wdWxhdGVNdWx0aUd1aWRzKGNsb25lZEZhY2lsaXRpZXMsIG1vZGUpO1xuICAgIH1cblxuICAgIC8vIEluYWN0aXZlIGZhY2lsaXRpZXMgYXJlIGtlcHQg4oCUIHRoZSBzZXJ2ZXIgYWxyZWFkeSBkZWNpZGVzIHBlciBtb2R1bGUgd2hvIG1heSBzZWUgdGhlbVxuICAgIC8vIChBcHBNb2R1bGUuY2MgbmV2ZXIgcmV0dXJucyB0aGVtKSwgYW5kIHRoZSBkcm9wZG93biByZW5kZXJzIHRoZW0gdGFnZ2VkIFwiKGluYWN0aXZlKVwiXG4gICAgcmV0dXJuIGZhY2lsaXRpZXMuc29ydCgoYSwgYikgPT4gYS5kYXRhLm5hbWUubG9jYWxlQ29tcGFyZShiLmRhdGEubmFtZSwgRU5HTElTSF9MQU5HVUFHRSwgeyBudW1lcmljOiB0cnVlIH0pKTtcbiAgfVxuXG4gIGdldEZhY2lsaXR5V2l0aEd1aWQoZmFjaWxpdGllczogRmFjaWxpdHlXaXRoR3VpZFtdLCBwYXJrSWQ6IG51bWJlciwgZ3VpZDogc3RyaW5nLCBzaG93Tm9uZVRleHQ6IGJvb2xlYW4sXG4gICAgbWluaW11bVZlcnNpb25TdXBwb3J0OiBzdHJpbmcsIHBlcm1pc3Npb25TdXBwb3J0OiBQZXJtaXNzaW9uVHlwZSk6IEZhY2lsaXR5V2l0aEd1aWQge1xuICAgIGxldCBmYWNpbGl0eVRvU2VsZWN0QXNEZWZhdWx0OiBGYWNpbGl0eVdpdGhHdWlkO1xuICAgIC8vIElmIHdlIGRvbid0IGhhdmUgZ3VpZCBvciBwYXJrSWQgd2UgZG9uJ3Qgc2VsZWN0IGEgZGVmYXVsdCBwYXJrXG4gICAgaWYgKCghIWd1aWQgJiYgISFwYXJrSWQpIHx8ICFzaG93Tm9uZVRleHQpIHtcbiAgICAgIGlmICghZ3VpZCAmJiAhcGFya0lkKSB7XG4gICAgICAgIGd1aWQgPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KEZhY2lsaXR5U3RhdGUuZ3VpZCk7XG4gICAgICAgIHBhcmtJZCA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoRmFjaWxpdHlTdGF0ZS5wYXJrSWQpO1xuICAgICAgfVxuXG4gICAgICAvLyBXZSBzZWFyY2ggZm9yIHRoZSBwYXJrIGl0c2VsZlxuICAgICAgZmFjaWxpdHlUb1NlbGVjdEFzRGVmYXVsdCA9IGZhY2lsaXRpZXMuZmluZChmID0+IGYuZ3VpZCA9PT0gZ3VpZCAmJiBmLmRhdGEuaWQgPT09IHBhcmtJZCk7XG4gICAgICAvLyBJZiB3ZSBkaWRuJ3QgZmluZCBhIHBhcmtcbiAgICAgIC8vIFdlIGNoZWNrIGlmIHRoZSBndWlkICsgcGFya0lkIGlzIGZyb20gYSBwYXJlbnQgcGFyayBzbyB3ZSBzZWFyY2ggZm9yIHRoZSBjaGlsZCBwYXJrXG4gICAgICBpZiAoIWZhY2lsaXR5VG9TZWxlY3RBc0RlZmF1bHQpIHtcbiAgICAgICAgZmFjaWxpdHlUb1NlbGVjdEFzRGVmYXVsdCA9IGZhY2lsaXRpZXMuZmluZChmID0+IGYuZ3VpZCA9PT0gZ3VpZCAmJiBmLmRhdGEubXVsdGlQYXJrUGFyZW50SUQgPT09IHBhcmtJZCk7XG4gICAgICB9XG4gICAgICAvLyBJZiB3ZSBkaWRuJ3QgZmluZCBhIHBhcmtcbiAgICAgIC8vIFdlIGNoZWNrIGlmIHRoZSBndWlkICsgcGFya0lkIGlzIGZyb20gYSBjaGlsZCBwYXJrIHNvIHdlIHNlYXJjaCBmb3IgdGhlIHBhcmVudCBwYXJrXG4gICAgICBpZiAoIWZhY2lsaXR5VG9TZWxlY3RBc0RlZmF1bHQpIHtcbiAgICAgICAgY29uc3QgcGFyZW50UGFya0lkID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChGYWNpbGl0eVN0YXRlLm11bHRpUGFya1BhcmVudElEKTtcbiAgICAgICAgZmFjaWxpdHlUb1NlbGVjdEFzRGVmYXVsdCA9IGZhY2lsaXRpZXMuZmluZChmID0+IGYuZ3VpZCA9PT0gZ3VpZCAmJiBmLmRhdGEuaWQgPT09IHBhcmVudFBhcmtJZCk7XG4gICAgICAgIHBhcmtJZCA9IGZhY2lsaXR5VG9TZWxlY3RBc0RlZmF1bHQgPyBwYXJlbnRQYXJrSWQgOiBwYXJrSWQ7XG4gICAgICB9XG5cbiAgICAgIC8vIElmIHdlIGRpZG4ndCBmaW5kIGEgcGFyayBvciB0aGUgcGFyayBpcyBOT1Qgc3VwcG9ydGVkIG9yIE5PVCBwZXJtaXR0ZWQsIHRyeSB0byBmaW5kIHRoZSBmaXJzdCBzdXBwb3J0ZWQgZmFjaWxpdHlcbiAgICAgIGlmICghZmFjaWxpdHlUb1NlbGVjdEFzRGVmYXVsdCB8fCAhdGhpcy5pc0ZhY2lsaXR5VmVyc2lvblN1cHBvcnRlZChmYWNpbGl0eVRvU2VsZWN0QXNEZWZhdWx0LCBtaW5pbXVtVmVyc2lvblN1cHBvcnQpIHx8XG4gICAgICAgICF0aGlzLmlzRmFjaWxpdHlQZXJtaXNzaW9uU3VwcG9ydGVkKGZhY2lsaXR5VG9TZWxlY3RBc0RlZmF1bHQsIHBlcm1pc3Npb25TdXBwb3J0KSkge1xuICAgICAgICBmYWNpbGl0eVRvU2VsZWN0QXNEZWZhdWx0ID0gZmFjaWxpdGllcy5maW5kKGYgPT4ge1xuICAgICAgICAgIHJldHVybiB0aGlzLmlzRmFjaWxpdHlWZXJzaW9uU3VwcG9ydGVkKGYsIG1pbmltdW1WZXJzaW9uU3VwcG9ydCkgJiYgdGhpcy5pc0ZhY2lsaXR5UGVybWlzc2lvblN1cHBvcnRlZChmLCBwZXJtaXNzaW9uU3VwcG9ydCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWNpbGl0eVRvU2VsZWN0QXNEZWZhdWx0O1xuICB9XG5cbiAgaXNGYWNpbGl0eVZlcnNpb25TdXBwb3J0ZWQoZmFjaWxpdHk6IEZhY2lsaXR5V2l0aEd1aWQsIG1pbmltdW1WZXJzaW9uU3VwcG9ydDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNHdWlkVmVyc2lvblN1cHBvcnRlZChmYWNpbGl0eS5ndWlkLCBtaW5pbXVtVmVyc2lvblN1cHBvcnQpO1xuICB9XG5cbiAgaXNGYWNpbGl0eVBlcm1pc3Npb25TdXBwb3J0ZWQoZmFjaWxpdHk6IEZhY2lsaXR5V2l0aEd1aWQsIHBlcm1pc3Npb25zVHlwZTogUGVybWlzc2lvblR5cGUpIHtcbiAgICByZXR1cm4gIVBlcm1pc3Npb25UeXBlW3Blcm1pc3Npb25zVHlwZV0gfHwgdGhpcy5oYXNQZXJtaXNzaW9uVHlwZUJ5UGFyayhwZXJtaXNzaW9uc1R5cGUsIGZhY2lsaXR5Lmd1aWQsIGZhY2lsaXR5LmRhdGEuaWQpO1xuICB9XG5cbiAgaXNHdWlkVmVyc2lvblN1cHBvcnRlZChndWlkOiBzdHJpbmcsIG1pbmltdW1WZXJzaW9uU3VwcG9ydDogc3RyaW5nKSB7XG4gICAgY29uc3Qgc3BhcmtWZXJzaW9uID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdCgoeyBzbWFydHBhcms6IHsgdmVyc2lvbnMgfSB9KSA9PiB2ZXJzaW9uc1tndWlkXSk7XG4gICAgcmV0dXJuICFtaW5pbXVtVmVyc2lvblN1cHBvcnQgfHwgKHNwYXJrVmVyc2lvbiAmJiBpc1ZlcnNpb25HcmVhdGVyVGhhbkVxdWFsKHNwYXJrVmVyc2lvbiwgbWluaW11bVZlcnNpb25TdXBwb3J0KSk7XG4gIH1cblxuICBjbGVhckluYWN0aXZlU2VsZWN0ZWRQYXJrKCkge1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IENsZWFySW5hY3RpdmVTZWxlY3RlZFBhcmtBY3Rpb24oKSk7XG4gIH1cblxuICBwcml2YXRlIHBvcHVsYXRlTXVsdGlHdWlkcyhmYWNpbGl0eURpY3Rpb25hcnk6IEZhY2lsaXR5RGljdGlvbmFyeSwgbW9kZTogU2VhcmNoRmFjaWxpdGllc01vZGUpOiBGYWNpbGl0eVdpdGhHdWlkW10ge1xuICAgIGNvbnN0IGZhY2lsaXRpZXM6IEZhY2lsaXR5V2l0aEd1aWRbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgZ3VpZCBvZiBPYmplY3Qua2V5cyhmYWNpbGl0eURpY3Rpb25hcnkpKSB7XG4gICAgICBmYWNpbGl0aWVzLnB1c2goLi4udGhpcy5wb3B1bGF0ZVNpbmdsZUd1aWQoZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdLCBtb2RlLCBndWlkKSk7XG4gICAgfVxuICAgIHJldHVybiBmYWNpbGl0aWVzO1xuICB9XG5cbiAgcHJpdmF0ZSBwb3B1bGF0ZVNpbmdsZUd1aWQobG90c01hcDogTnVtYmVyTWFwPEZhY2lsaXR5RHRvPiwgbW9kZTogU2VhcmNoRmFjaWxpdGllc01vZGUsIGd1aWQ6IHN0cmluZyk6IEZhY2lsaXR5V2l0aEd1aWRbXSB7XG4gICAgY29uc3QgZmFjaWxpdGllczogRmFjaWxpdHlXaXRoR3VpZFtdID0gW107XG4gICAgY29uc3QgbG90czogRmFjaWxpdHlEdG9bXSA9IE9iamVjdC52YWx1ZXMobG90c01hcCk7XG4gICAgY29uc3QgcGFyZW50UGFyazogRmFjaWxpdHlEdG8gPSBsb3RzLmZpbmQobCA9PiBsLmlzTXVsdGlQYXJrKTtcblxuICAgIGZvciAoY29uc3QgbG90IG9mIGxvdHMpIHtcbiAgICAgIGlmIChtb2RlID09PSBTZWFyY2hGYWNpbGl0aWVzTW9kZS5vbmx5UGFyZW50cyAmJiBsb3QubXVsdGlQYXJrUGFyZW50SUQgPT09IDAgfHxcbiAgICAgICAgbW9kZSA9PT0gU2VhcmNoRmFjaWxpdGllc01vZGUub25seUNoaWxkcmVuICYmIGxvdC5pc011bHRpUGFyayA9PT0gMCB8fFxuICAgICAgICBtb2RlID09PSBTZWFyY2hGYWNpbGl0aWVzTW9kZS5wYXJlbnRzV2l0aENoaWxkcmVuKSB7XG4gICAgICAgIGxvdC5uYW1lID0gISFwYXJlbnRQYXJrICYmICFsb3QuaXNNdWx0aVBhcmsgPyBgJHtwYXJlbnRQYXJrLm5hbWV9IC0gJHtsb3QubmFtZX1gIDogYCR7bG90Lm5hbWV9YDtcbiAgICAgICAgZmFjaWxpdGllcy5wdXNoKHsgZ3VpZCwgZGF0YTogbG90IH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWNpbGl0aWVzO1xuICB9XG5cbiAgcHJpdmF0ZSBmbGF0ZW5UcmVlKGZhY2lsaXR5VHJlZTogRmFjaWxpdHlUcmVlRHRvW10sIGZhY2lsaXRpZXNNYXA6IE1hcDxudW1iZXIsIEZhY2lsaXR5VHJlZUR0bz4sIGlzQ2xvdWRBcHA6IGJvb2xlYW4pIHtcbiAgICBmYWNpbGl0eVRyZWUuZm9yRWFjaChmdCA9PiB7XG4gICAgICBpZiAoZnQuY2hpbGRyZW4pIHtcbiAgICAgICAgY29uc3QgZmxhdE5vZGU6IEZhY2lsaXR5VHJlZUR0byA9IEZhY2lsaXR5VHJlZUR0by5mcm9tSlMoZnQpO1xuICAgICAgICB0aGlzLmFkZFRvTWFwKGlzQ2xvdWRBcHAsIGZhY2lsaXRpZXNNYXAsIGZsYXROb2RlKTtcbiAgICAgICAgdGhpcy5mbGF0ZW5UcmVlKGZ0LmNoaWxkcmVuLCBmYWNpbGl0aWVzTWFwLCBpc0Nsb3VkQXBwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZ0LmNoaWxkcmVuID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmFkZFRvTWFwKGlzQ2xvdWRBcHAsIGZhY2lsaXRpZXNNYXAsIGZ0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkVG9NYXAoaXNDbG91ZEFwcDogYm9vbGVhbiwgZmFjaWxpdGllc01hcDogTWFwPG51bWJlciwgRmFjaWxpdHlUcmVlRHRvPiwgZnQ6IEZhY2lsaXR5VHJlZUR0bykge1xuICAgIGlmIChpc0Nsb3VkQXBwKSB7XG4gICAgICBmYWNpbGl0aWVzTWFwLnNldChmdC5jbG91ZElkLCBmdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZhY2lsaXRpZXNNYXAuc2V0KGZ0LmlkLCBmdCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0UGFya0lkcygpOiBudW1iZXJbXSB7XG4gICAgbGV0IGd1aWQgPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KEZhY2lsaXR5U3RhdGUuZ3VpZCk7XG4gICAgbGV0IHBhcmtJZCA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoRmFjaWxpdHlTdGF0ZS5wYXJrSWQpO1xuICAgIGxldCBwYXJrSWRzID0gdGhpcy5nZXRQYXJrcyhwYXJrSWQsIGd1aWQpO1xuICAgIHJldHVybiBwYXJrSWRzO1xuICB9XG5cbiAgaW5pdFNlbGVjdGVkUGFyayhhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUpIHtcbiAgICByZXR1cm4gYWN0aXZhdGVkUm91dGUucGFyYW1zLnBpcGUoXG4gICAgICBmaWx0ZXIocGFyYW1zID0+IE9iamVjdC5rZXlzKHBhcmFtcykubGVuZ3RoID4gMCksXG4gICAgICBzd2l0Y2hNYXAocGFyYW1zID0+IHtcbiAgICAgICAgbGV0IGd1aWQ6IHN0cmluZztcbiAgICAgICAgY29uc3QgcGFya0lkID0gK3BhcmFtcy5wYXJrSWQ7XG4gICAgICAgIGNvbnN0IHRpYmFLZXkgPSBwYXJhbXMudGliYUtleTtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmUuc2VsZWN0KEZhY2lsaXR5U3RhdGUudGliYUtleXMpLnBpcGUoXG4gICAgICAgICAgZmlsdGVyKHRpYmFLZXlzID0+IE9iamVjdC5rZXlzKHRpYmFLZXlzKS5sZW5ndGggPiAwKSxcbiAgICAgICAgICBtYXAodGliYUtleXMgPT4ge1xuICAgICAgICAgICAgZ3VpZCA9IE9iamVjdC5rZXlzKHRpYmFLZXlzKVt0aWJhS2V5XTtcbiAgICAgICAgICAgIHJldHVybiB7IGd1aWQsIHBhcmtJZCB9O1xuICAgICAgICAgIH0pKTtcbiAgICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UGFya3MocGFya0lkOiBudW1iZXIsIGd1aWQ6IHN0cmluZykge1xuICAgIGxldCBwYXJrSWRzID0gW107XG4gICAgY29uc3QgZmFjaWxpdHlEaWN0aW9uYXJ5ID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChGYWNpbGl0eVN0YXRlLmZhY2lsaXR5RGljdGlvbmFyeSk7XG4gICAgY29uc3QgZ3VpZEZhY2lsaXRpZXNNYXAgPSBmYWNpbGl0eURpY3Rpb25hcnlbZ3VpZF07XG5cbiAgICBpZiAoZ3VpZEZhY2lsaXRpZXNNYXAgJiYgZ3VpZEZhY2lsaXRpZXNNYXBbcGFya0lkXT8uaXNNdWx0aVBhcmspIHtcbiAgICAgIHBhcmtJZHMgPSBPYmplY3QudmFsdWVzKGd1aWRGYWNpbGl0aWVzTWFwKS5maWx0ZXIoZiA9PiAhZi5pc011bHRpUGFyaykubWFwKGYgPT4gZi5pZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcmtJZHMucHVzaChwYXJrSWQpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJrSWRzO1xuICB9XG5cbiAgcHVibGljIGdldERlZmF1bHRGYWNpbGl0eVJvdXRlQnlNZW51SXRlbXMobWVudUl0ZW1zOiBNZW51SXRlbVtdKSB7XG4gICAgbGV0IG1lbnVJdGVtOiBNZW51SXRlbTtcbiAgICBjb25zdCBndWlkID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChGYWNpbGl0eVN0YXRlLmd1aWQpO1xuICAgIGNvbnN0IHBhcmtJZCA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoRmFjaWxpdHlTdGF0ZS5wYXJrSWQpO1xuXG4gICAgaWYgKCEhZ3VpZCAmJiBwYXJrSWQgPj0gMCkge1xuICAgICAgbWVudUl0ZW0gPSB0aGlzLmdldEFjdGl2ZU1lbnVGYWNpbGl0eShtZW51SXRlbXMsIHBhcmtJZCwgZ3VpZCk7XG4gICAgICBpZiAoIW1lbnVJdGVtKSB7XG4gICAgICAgIG1lbnVJdGVtID0gdGhpcy5nZXRBY3RpdmVNZW51RmFjaWxpdHlDaGlsZChtZW51SXRlbXMsIHBhcmtJZCwgZ3VpZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFtZW51SXRlbSkge1xuICAgICAgbWVudUl0ZW0gPSB0aGlzLmdldEZpcnN0TWVudUl0ZW1GYWNpbGl0eShtZW51SXRlbXMpO1xuICAgIH1cblxuICAgIHJldHVybiBtZW51SXRlbT8ucm91dGU7XG4gIH1cblxuICBwdWJsaWMgZ2V0RGVmYXVsdEZhY2lsaXR5Um91dGUoKSB7XG4gICAgY29uc3QgbWVudUl0ZW1zID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChTaWRlbmF2U3RhdGUubWVudUl0ZW1zKTtcbiAgICByZXR1cm4gdGhpcy5nZXREZWZhdWx0RmFjaWxpdHlSb3V0ZUJ5TWVudUl0ZW1zKG1lbnVJdGVtcyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0RmFjaWxpdHlEaWN0aW9uYXJ5JCgpOiBPYnNlcnZhYmxlPEZhY2lsaXR5RGljdGlvbmFyeT4ge1xuICAgIHJldHVybiB0aGlzLnN0b3JlLnNlbGVjdChGYWNpbGl0eVN0YXRlLmZhY2lsaXR5RGljdGlvbmFyeSkucGlwZShcbiAgICAgIGZpbHRlcihmYWNpbGl0eURpY3Rpb25hcnkgPT4gT2JqZWN0LmtleXMoZmFjaWxpdHlEaWN0aW9uYXJ5KS5sZW5ndGggPiAwKSxcbiAgICAgIGZpcnN0KClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRBY3RpdmVNZW51RmFjaWxpdHkgPSAobWVudUl0ZW1zOiBNZW51SXRlbVtdLCBwYXJrSWQ6IG51bWJlciwgZ3VpZDogc3RyaW5nKSA9PlxuICAgIG1lbnVJdGVtcy5maW5kKG1lbnVJdGVtID0+IG1lbnVJdGVtLnByb3BlcnRpZXM/Lmd1aWQgPT09IGd1aWQgJiYgbWVudUl0ZW0uaWQgPT09IHBhcmtJZCk7XG5cbiAgcHJpdmF0ZSBnZXRBY3RpdmVNZW51RmFjaWxpdHlDaGlsZChtZW51SXRlbXM6IE1lbnVJdGVtW10sIHBhcmtJZDogbnVtYmVyLCBndWlkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBtdWx0aUZhY2lsaXR5UGFyZW50SUQgPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KEZhY2lsaXR5U3RhdGUubXVsdGlQYXJrUGFyZW50SUQpO1xuICAgIGNvbnN0IG1lbnVJdGVtUGFyZW50ID0gbWVudUl0ZW1zLmZpbmQobWVudUl0ZW0gPT4gbWVudUl0ZW0ucHJvcGVydGllcz8uZ3VpZCA9PT0gZ3VpZCAmJiBtZW51SXRlbS5pZCA9PT0gbXVsdGlGYWNpbGl0eVBhcmVudElEKTtcbiAgICBjb25zdCBtZW51SXRlbSA9IG1lbnVJdGVtUGFyZW50Py5jaGlsZHJlbj8uZmluZChtZW51SXRlbSA9PiBtZW51SXRlbS5pZCA9PT0gcGFya0lkKTtcbiAgICByZXR1cm4gbWVudUl0ZW07XG4gIH1cblxuICBwcml2YXRlIGdldEZpcnN0TWVudUl0ZW1GYWNpbGl0eShtZW51SXRlbXM6IE1lbnVJdGVtW10pIHtcbiAgICAvLyB3ZSBzb3J0IGJ5IG5hbWUgKHRoZSBkZWZhdWx0IG1lbnUgaXRlbSBzb3J0IHByb3BlcnR5KSBhbmQgcm91dGUgdG8gdGhlIGZpcnN0IG1lbnUgaXRlbVxuICAgIGNvbnN0IHNvcnRQcm9wZXJ0eSA9IERFRkFVTFRfU09SVF9NRU5VID09PSBTaWRlTmF2U29ydEJ5LnBhcmtpbmdfbG90X3NvcnRfYnlfbmFtZV9hX3ogPyAnbmFtZScgOiAnc2l0ZWNvZGUnO1xuICAgIGNvbnN0IGZpcnN0TWVudUl0ZW0gPSBjbG9uZURlZXAobWVudUl0ZW1zKS5zb3J0KChhLCBiKSA9PiBhW3NvcnRQcm9wZXJ0eV0gPiBiW3NvcnRQcm9wZXJ0eV0gPyAxIDogLTEpWzBdO1xuICAgIHJldHVybiBmaXJzdE1lbnVJdGVtO1xuICB9XG59XG4iXX0=