@c8y/ngx-components 1018.0.273 → 1018.0.276

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.
@@ -173,12 +173,7 @@ export class ContextDashboardService {
173
173
  }
174
174
  }
175
175
  canEditDashboard(mo) {
176
- return this.permissions.canEdit([
177
- Permissions.ROLE_INVENTORY_ADMIN,
178
- Permissions.ROLE_INVENTORY_CREATE,
179
- Permissions.ROLE_MANAGED_OBJECT_ADMIN,
180
- Permissions.ROLE_MANAGED_OBJECT_CREATE
181
- ], mo);
176
+ return this.permissions.canEdit([Permissions.ROLE_INVENTORY_ADMIN, Permissions.ROLE_MANAGED_OBJECT_ADMIN], mo);
182
177
  }
183
178
  /**
184
179
  * Checks if user has permissions to copy dashboard according to his roles.
@@ -448,4 +443,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImpor
448
443
  providedIn: 'root'
449
444
  }]
450
445
  }], ctorParameters: function () { return [{ type: i1.InventoryService }, { type: i2.TabsService }, { type: i2.ModalService }, { type: i3.TranslateService }, { type: i4.Router }, { type: i2.NavigatorService }, { type: i2.Permissions }, { type: i2.AlertService }, { type: i2.DynamicComponentService }, { type: i2.GroupService }]; } });
451
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1kYXNoYm9hcmQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2NvbnRleHQtZGFzaGJvYXJkL2NvbnRleHQtZGFzaGJvYXJkLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQTBCLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pFLE9BQU8sRUFBa0IsZ0JBQWdCLEVBQWUsTUFBTSxhQUFhLENBQUM7QUFDNUUsT0FBTyxFQUNMLFlBQVksRUFFWix1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLE9BQU8sRUFDUCxZQUFZLEVBQ1osWUFBWSxFQUNaLGFBQWEsRUFDYixnQkFBZ0IsRUFDaEIsV0FBVyxFQUNYLE1BQU0sRUFFTixXQUFXLEVBQ1gsV0FBVyxFQUVaLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUNMLE1BQU0sRUFDTixJQUFJLEVBQ0osSUFBSSxFQUNKLElBQUksRUFDSixLQUFLLEVBQ0wsR0FBRyxFQUNILEdBQUcsRUFDSCxPQUFPLEVBQ1AsU0FBUyxFQUNULE1BQU0sRUFDTixHQUFHLEVBQ0osTUFBTSxXQUFXLENBQUM7QUFDbkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNELE9BQU8sRUFDTCxVQUFVLEVBQ1YsTUFBTSxFQUNOLEdBQUcsRUFDSCxRQUFRLEVBQ1IsUUFBUSxFQUNSLEdBQUcsRUFDSCxZQUFZLEVBQ1osT0FBTyxFQUNSLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUdMLG9CQUFvQixFQUdwQixzQkFBc0IsRUFDdEIseUJBQXlCLEVBQ3pCLGtCQUFrQixFQUNuQixNQUFNLDJCQUEyQixDQUFDOzs7Ozs7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O1lBQ3pDLGFBQWEsR0FBRyxvQkFBb0IsQ0FBQyxLQUFLLENBQUM7U0FDNUM7UUFDRCxPQUFPLGFBQWEsQ0FBQztJQUN2QixDQUFDO0lBRU8saUJBQWlCLENBQUMsb0JBQTBDLEVBQUUsS0FBYTtRQUNqRixPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxvQkFBb0IsRUFBRSxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2xGLENBQUM7SUFFTyxlQUFlLENBQUMsU0FBaUQsRUFBRSxPQUFRO1FBQ2pGLElBQ0UsQ0FBQyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNsRSxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxFQUM1QjtZQUNBLE9BQU8sRUFBRSxDQUFDO1NBQ1g7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7O29IQTVsQlUsdUJBQXVCO3dIQUF2Qix1QkFBdUIsY0FGdEIsTUFBTTsyRkFFUCx1QkFBdUI7a0JBSG5DLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IElNYW5hZ2VkT2JqZWN0LCBJbnZlbnRvcnlTZXJ2aWNlLCBJUmVzdWx0TGlzdCB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7XG4gIEFsZXJ0U2VydmljZSxcbiAgQ29udGV4dERhdGEsXG4gIER5bmFtaWNDb21wb25lbnRTZXJ2aWNlLFxuICBnZXRBY3RpdmF0ZWRSb3V0ZSxcbiAgZ2V0dGV4dCxcbiAgR3JvdXBTZXJ2aWNlLFxuICBNb2RhbFNlcnZpY2UsXG4gIE5hdmlnYXRvck5vZGUsXG4gIE5hdmlnYXRvclNlcnZpY2UsXG4gIFBlcm1pc3Npb25zLFxuICBTdGF0dXMsXG4gIFRhYixcbiAgVGFic1NlcnZpY2UsXG4gIFZpZXdDb250ZXh0LFxuICBXaWRnZXRcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge1xuICBhc3NpZ24sXG4gIHBpY2ssXG4gIHNvbWUsXG4gIGtleXMsXG4gIGtleUJ5LFxuICBoYXMsXG4gIGdldCxcbiAgZm9yRWFjaCxcbiAgY2xvbmVEZWVwLFxuICByZWR1Y2UsXG4gIHNldFxufSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgZnJvbSwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIGNhdGNoRXJyb3IsXG4gIGZpbHRlcixcbiAgbWFwLFxuICBtZXJnZUFsbCxcbiAgbWVyZ2VNYXAsXG4gIHRhcCxcbiAgdGhyb3dJZkVtcHR5LFxuICB0b0FycmF5XG59IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gIENvbnRleHREYXNoYm9hcmQsXG4gIENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0LFxuICBDb250ZXh0RGFzaGJvYXJkVHlwZSxcbiAgRGFzaGJvYXJkQ29udGV4dCxcbiAgRGFzaGJvYXJkQ29weUNsaXBib2FyZCxcbiAgU1RZTElOR19DTEFTU19QUkVGSVhFUyxcbiAgQUxMX0dMT0JBTF9ST0xFU19TRUxFQ1RFRCxcbiAgUFJPRFVDVF9FWFBFUklFTkNFXG59IGZyb20gJy4vY29udGV4dC1kYXNoYm9hcmQubW9kZWwnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBDb250ZXh0RGFzaGJvYXJkU2VydmljZSB7XG4gIHJlYWRvbmx5IFJFUE9SVF9QQVJUSUFMX05BTUUgPSAncmVwb3J0Xyc7XG4gIGNvcHlDbGlwYm9hcmQ6IERhc2hib2FyZENvcHlDbGlwYm9hcmQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgSU5WRU5UT1JZX1JPTEVTID0gW1xuICAgIFBlcm1pc3Npb25zLlJPTEVfSU5WRU5UT1JZX0FETUlOLFxuICAgIFBlcm1pc3Npb25zLlJPTEVfTUFOQUdFRF9PQkpFQ1RfQURNSU5cbiAgXTtcbiAgcHJpdmF0ZSBjYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdD4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBERUZBVUxUX1BBR0VTSVpFID0gMTAwMDtcbiAgcHJpdmF0ZSByZWFkb25seSBGUkFHTUVOVF9OQU1FID0gJ2M4eV9EYXNoYm9hcmQnO1xuICBwcml2YXRlIHJlYWRvbmx5IERBU0hCT0FSRF9ST1VURV9QQVRIID0gJ2Rhc2hib2FyZCc7XG4gIHByaXZhdGUgcmVhZG9ubHkgSU5ERVhfU1BMSVQgPSAnISc7XG4gIHByaXZhdGUgX2Zvcm1EaXNhYmxlZCA9IHRydWU7XG5cbiAgZ2V0IGZvcm1EaXNhYmxlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybURpc2FibGVkO1xuICB9XG5cbiAgc2V0IGZvcm1EaXNhYmxlZCh2YWx1ZSkge1xuICAgIHRoaXMuX2Zvcm1EaXNhYmxlZCA9IHZhbHVlO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBpbnZlbnRvcnk6IEludmVudG9yeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0YWJzOiBUYWJzU2VydmljZSxcbiAgICBwcml2YXRlIG1vZGFsOiBNb2RhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBuYXZpZ2F0b3I6IE5hdmlnYXRvclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwZXJtaXNzaW9uczogUGVybWlzc2lvbnMsXG4gICAgcHJpdmF0ZSBhbGVydDogQWxlcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgZHluYW1pY0NvbXBvbmVudDogRHluYW1pY0NvbXBvbmVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBncm91cFNlcnZpY2U6IEdyb3VwU2VydmljZVxuICApIHt9XG5cbiAgYXN5bmMgY3JlYXRlKGRhc2hib2FyZENmZzogQ29udGV4dERhc2hib2FyZCwgY29udGV4dD86IENvbnRleHREYXRhLCBuYW1lID0gJycpIHtcbiAgICBsZXQgaWQgPSAnJztcbiAgICBsZXQgZGFzaGJvYXJkVHlwZTtcblxuICAgIGlmIChjb250ZXh0KSB7XG4gICAgICBpZCA9IGNvbnRleHQuY29udGV4dERhdGEuaWQgYXMgc3RyaW5nO1xuICAgICAgZGFzaGJvYXJkVHlwZSA9IHRoaXMuZ2V0RGFzaGJvYXJkVHlwZUZyb21WaWV3Q29udGV4dChkYXNoYm9hcmRDZmcsIGNvbnRleHQpO1xuICAgIH1cbiAgICBpZiAobmFtZSkge1xuICAgICAgZGFzaGJvYXJkVHlwZSA9IENvbnRleHREYXNoYm9hcmRUeXBlLk5hbWVkO1xuICAgIH1cblxuICAgIGNvbnN0IGRhc2hib2FyZDogUGFydGlhbDxJTWFuYWdlZE9iamVjdD4gPSB7fTtcbiAgICBhc3NpZ24oZGFzaGJvYXJkLCB7IGM4eV9EYXNoYm9hcmQ6IGRhc2hib2FyZENmZyB9KTtcblxuICAgIGNvbnN0IHZhbHVlID1cbiAgICAgIGRhc2hib2FyZFR5cGUgPT09IENvbnRleHREYXNoYm9hcmRUeXBlLkRldmljZVR5cGUgPyBkYXNoYm9hcmRDZmcuZGV2aWNlVHlwZVZhbHVlIDogbmFtZSB8fCBpZDtcblxuICAgIGNvbnN0IGZyYWdtZW50S2V5ID0gdGhpcy5jcmVhdGVGcmFnbWVudEtleShkYXNoYm9hcmRUeXBlLCB2YWx1ZSk7XG4gICAgZGFzaGJvYXJkW2ZyYWdtZW50S2V5XSA9IHt9O1xuXG4gICAgaWYgKHRoaXMuc2hvdWxkU2V0R2xvYmFsKGRhc2hib2FyZCwgY29udGV4dCkpIHtcbiAgICAgIGFzc2lnbihkYXNoYm9hcmQsIHsgYzh5X0dsb2JhbDoge30gfSk7XG4gICAgfVxuICAgIGRhc2hib2FyZC5uYW1lID0gZGFzaGJvYXJkLmM4eV9EYXNoYm9hcmQubmFtZTtcbiAgICBjb25zdCB7IGRhdGEgfSA9XG4gICAgICBkYXNoYm9hcmRUeXBlID09PSBDb250ZXh0RGFzaGJvYXJkVHlwZS5Hcm91cCB8fFxuICAgICAgZGFzaGJvYXJkVHlwZSA9PT0gQ29udGV4dERhc2hib2FyZFR5cGUuRGV2aWNlIHx8XG4gICAgICAoY29udGV4dCAmJiBkYXNoYm9hcmRUeXBlID09PSBDb250ZXh0RGFzaGJvYXJkVHlwZS5OYW1lZClcbiAgICAgICAgPyBhd2FpdCB0aGlzLmludmVudG9yeS5jaGlsZEFkZGl0aW9uc0NyZWF0ZShkYXNoYm9hcmQsIGlkKVxuICAgICAgICA6IGF3YWl0IHRoaXMuaW52ZW50b3J5LmNyZWF0ZShkYXNoYm9hcmQpO1xuICAgIHJldHVybiBkYXRhIGFzIENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0O1xuICB9XG5cbiAgYXN5bmMgZGV0YWlsKGRhc2hib2FyZE1POiBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdCkge1xuICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgdGhpcy5pbnZlbnRvcnkuZGV0YWlsKGRhc2hib2FyZE1PKTtcbiAgICB0aGlzLmNhY2hlLnNldChkYXNoYm9hcmRNTy5pZCwgZGF0YSk7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBhc3luYyB1cGRhdGUoZGFzaGJvYXJkOiBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdCkge1xuICAgIGRhc2hib2FyZC5uYW1lID0gZGFzaGJvYXJkLmM4eV9EYXNoYm9hcmQubmFtZTtcbiAgICBjb25zdCBrZWVwRnJhZ21lbnRzID0gdGhpcy5jbGVhbihwaWNrKGRhc2hib2FyZCwgW3RoaXMuRlJBR01FTlRfTkFNRSwgJ2lkJywgJ25hbWUnXSkpO1xuICAgIGtlZXBGcmFnbWVudHMuYzh5X0dsb2JhbCA9IHRoaXMuc2hvdWxkU2V0R2xvYmFsKGRhc2hib2FyZCk7XG4gICAgYXdhaXQgdGhpcy5zZXJpYWxpemVXaWRnZXRDb25maWdzKGtlZXBGcmFnbWVudHMpO1xuICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgdGhpcy5pbnZlbnRvcnkudXBkYXRlKGtlZXBGcmFnbWVudHMpO1xuICAgIHRoaXMuY2FjaGUuc2V0KGRhc2hib2FyZC5pZCwgZGF0YSk7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBhc3luYyBkZWxldGUoZGFzaGJvYXJkOiBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdCwgd2l0aENvbmZpcm1hdGlvbiA9IHRydWUpIHtcbiAgICB0cnkge1xuICAgICAgaWYgKHdpdGhDb25maXJtYXRpb24pIHtcbiAgICAgICAgbGV0IG1zZzogc3RyaW5nID0gZ2V0dGV4dChcbiAgICAgICAgICBgWW91IGFyZSBhYm91dCB0byBkZWxldGUgdGhlIGRhc2hib2FyZCBcInt7IGRhc2hib2FyZE5hbWUgfX1cIi4gRG8geW91IHdhbnQgdG8gcHJvY2VlZD9gXG4gICAgICAgICk7XG4gICAgICAgIGlmICh0aGlzLmlzRGV2aWNlVHlwZShkYXNoYm9hcmQpKSB7XG4gICAgICAgICAgbXNnID0gZ2V0dGV4dChcbiAgICAgICAgICAgIGBZb3UgYXJlIGFib3V0IHRvIGRlbGV0ZSB0aGUgZGFzaGJvYXJkIFwie3sgZGFzaGJvYXJkTmFtZSB9fVwiIGZyb20gYWxsIGRldmljZXMgb2YgdGhlIHR5cGUgXCJ7eyBkZXZpY2VUeXBlIH19XCIuXG4gICAgICAgICAgIERvIHlvdSB3YW50IHRvIHByb2NlZWQ/YFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy5tb2RhbC5jb25maXJtKFxuICAgICAgICAgIGdldHRleHQoJ0RlbGV0ZSBkYXNoYm9hcmQnKSxcbiAgICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChtc2csIHtcbiAgICAgICAgICAgIGRhc2hib2FyZE5hbWU6IGRhc2hib2FyZC5jOHlfRGFzaGJvYXJkLm5hbWUsXG4gICAgICAgICAgICBkZXZpY2VUeXBlOiBkYXNoYm9hcmQuYzh5X0Rhc2hib2FyZC5kZXZpY2VUeXBlVmFsdWVcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBTdGF0dXMuREFOR0VSLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG9rOiBnZXR0ZXh0KCdEZWxldGUnKSxcbiAgICAgICAgICAgIGNhbmNlbDogZ2V0dGV4dCgnQ2FuY2VsJylcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBhd2FpdCB0aGlzLmludmVudG9yeS5kZWxldGUoZGFzaGJvYXJkKTtcbiAgICAgIGNvbnN0IHRhYlRvUmVtb3ZlID0gQXJyYXkuZnJvbSh0aGlzLnRhYnMuc3RhdGUpLmZpbmQodGFiID0+XG4gICAgICAgIHRhYi5wYXRoLmVuZHNXaXRoKGAke3RoaXMuREFTSEJPQVJEX1JPVVRFX1BBVEh9LyR7ZGFzaGJvYXJkLmlkfWApXG4gICAgICApO1xuICAgICAgdGhpcy50YWJzLnJlbW92ZSh0YWJUb1JlbW92ZSk7XG4gICAgICB0aGlzLnRhYnMucmVmcmVzaCgpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAvLyBpbnRlbmRlZCBlbXB0eVxuICAgIH1cbiAgfVxuXG4gIGFjdGl2YXRlRGFzaGJvYXJkcyhcbiAgICByb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCxcbiAgICB0eXBlczogQ29udGV4dERhc2hib2FyZFR5cGVbXVxuICApOiBPYnNlcnZhYmxlPGJvb2xlYW4gfCBUYWJbXT4ge1xuICAgIGNvbnN0IHsgZGFzaGJvYXJkSWQgfSA9IHJvdXRlLnBhcmFtcztcbiAgICBpZiAoZGFzaGJvYXJkSWQpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldERhc2hib2FyZCQoZGFzaGJvYXJkSWQsIHR5cGVzLCByb3V0ZS5wYXJlbnQuZGF0YS5jb250ZXh0RGF0YSkucGlwZShcbiAgICAgICAgdGFwKGRhc2hib2FyZCA9PiB7XG4gICAgICAgICAgcm91dGUuZGF0YSA9IHsgZGFzaGJvYXJkIH07XG4gICAgICAgIH0pLFxuICAgICAgICBtYXAoKCkgPT4gdHJ1ZSksXG4gICAgICAgIGNhdGNoRXJyb3IoKCkgPT4ge1xuICAgICAgICAgIHJldHVybiBvZihmYWxzZSk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmdldFRhYnMkKHJvdXRlLmRhdGEuY29udGV4dERhdGEsIHR5cGVzKTtcbiAgfVxuXG4gIGdldE5hbWVkRGFzaGJvYXJkT3JDcmVhdGUobmFtZTogc3RyaW5nLCBkZWZhdWx0V2lkZ2V0czogV2lkZ2V0W10sIGNvbnRleHQ/OiBDb250ZXh0RGF0YSkge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5tYXBXaWRnZXRzKGRlZmF1bHRXaWRnZXRzKTtcbiAgICByZXR1cm4gdGhpcy5nZXREYXNoYm9hcmQkKG5hbWUsIFtDb250ZXh0RGFzaGJvYXJkVHlwZS5OYW1lZF0pLnBpcGUoXG4gICAgICB0aHJvd0lmRW1wdHkoKSxcbiAgICAgIGNhdGNoRXJyb3IoKCkgPT5cbiAgICAgICAgZnJvbShcbiAgICAgICAgICB0aGlzLmNyZWF0ZShcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgY2hpbGRyZW4sXG4gICAgICAgICAgICAgIHdpZGdldENsYXNzZXM6IHsgJ2Rhc2hib2FyZC10aGVtZS1saWdodCc6IHRydWUsICdwYW5lbC10aXRsZS1yZWd1bGFyJzogdHJ1ZSB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICAgIG5hbWVcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgcmVmcmVzaFRhYnMoZGFzaGJvYXJkTU86IENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0KSB7XG4gICAgaWYgKCF0aGlzLmlzTmFtZWQoZGFzaGJvYXJkTU8pKSB7XG4gICAgICBjb25zdCB0YWJUb1VwZGF0ZSA9IEFycmF5LmZyb20odGhpcy50YWJzLnN0YXRlKS5maW5kKHRhYiA9PlxuICAgICAgICB0YWIucGF0aC5lbmRzV2l0aChgJHt0aGlzLkRBU0hCT0FSRF9ST1VURV9QQVRIfS8ke2Rhc2hib2FyZE1PLmlkfWApXG4gICAgICApO1xuXG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5kZXRhaWwoZGFzaGJvYXJkTU8pO1xuICAgICAgaWYgKHRhYlRvVXBkYXRlKSB7XG4gICAgICAgIGNvbnN0IHsgaWNvbiwgcHJpb3JpdHksIG5hbWUgfSA9IGRhdGEuYzh5X0Rhc2hib2FyZDtcbiAgICAgICAgdGFiVG9VcGRhdGUuaWNvbiA9IGljb247XG4gICAgICAgIHRhYlRvVXBkYXRlLnByaW9yaXR5ID0gcHJpb3JpdHk7XG4gICAgICAgIHRhYlRvVXBkYXRlLmxhYmVsID0gbmFtZTtcbiAgICAgIH1cbiAgICAgIHRoaXMudGFicy5yZWZyZXNoKCk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlTmF2aWdhdG9ySXRlbShtbzogSU1hbmFnZWRPYmplY3QpIHtcbiAgICB0aGlzLm5hdmlnYXRvci5zdGF0ZS5mb3JFYWNoKG5vZGUgPT4ge1xuICAgICAgaWYgKG5vZGUucGF0aCA9PT0gYHJlcG9ydHMvJHttby5pZH1gKSB7XG4gICAgICAgIHRoaXMubmF2aWdhdG9yLnJlbW92ZShub2RlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAobW8uYzh5X0lzTmF2aWdhdG9yTm9kZSkge1xuICAgICAgY29uc3Qgbm9kZVRvQWRkID0gbmV3IE5hdmlnYXRvck5vZGUoe1xuICAgICAgICBsYWJlbDogbW8ubmFtZSxcbiAgICAgICAgcGF0aDogYHJlcG9ydHMvJHttby5pZH1gLFxuICAgICAgICBpY29uOiBtby5pY29uLFxuICAgICAgICBwcmlvcml0eTogbW8ucHJpb3JpdHlcbiAgICAgIH0pO1xuICAgICAgdGhpcy5uYXZpZ2F0b3IuYWRkKG5vZGVUb0FkZCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgbmF2aWdhdGVUb0Rhc2hib2FyZChkYXNoYm9hcmRNTzogQ29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3QpIHtcbiAgICBpZiAoL2Rhc2hib2FyZC8udGVzdCh0aGlzLnJvdXRlci51cmwpKSB7XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy4uJywgZGFzaGJvYXJkTU8uaWRdLCB7XG4gICAgICAgIHJlbGF0aXZlVG86IGdldEFjdGl2YXRlZFJvdXRlKHRoaXMucm91dGVyKVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICgvXlxcLyhkZXZpY2V8Z3JvdXApXFwvWzAtOV0rJC8udGVzdCh0aGlzLnJvdXRlci51cmwpKSB7XG4gICAgICAvLyBpbiBjYXNlIHRoZSBhZGQgZGFzaGJvYXJkIGJ1dHRvbiBpcyB0aGUgb25seSB0YWIgb24gdGhhdCByb3V0ZVxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycuJywgdGhpcy5EQVNIQk9BUkRfUk9VVEVfUEFUSCwgZGFzaGJvYXJkTU8uaWRdLCB7XG4gICAgICAgIHJlbGF0aXZlVG86IGdldEFjdGl2YXRlZFJvdXRlKHRoaXMucm91dGVyKVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLi4nLCB0aGlzLkRBU0hCT0FSRF9ST1VURV9QQVRILCBkYXNoYm9hcmRNTy5pZF0sIHtcbiAgICAgICAgcmVsYXRpdmVUbzogZ2V0QWN0aXZhdGVkUm91dGUodGhpcy5yb3V0ZXIpXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBjYW5FZGl0RGFzaGJvYXJkKG1vKSB7XG4gICAgcmV0dXJuIHRoaXMucGVybWlzc2lvbnMuY2FuRWRpdChcbiAgICAgIFtcbiAgICAgICAgUGVybWlzc2lvbnMuUk9MRV9JTlZFTlRPUllfQURNSU4sXG4gICAgICAgIFBlcm1pc3Npb25zLlJPTEVfSU5WRU5UT1JZX0NSRUFURSxcbiAgICAgICAgUGVybWlzc2lvbnMuUk9MRV9NQU5BR0VEX09CSkVDVF9BRE1JTixcbiAgICAgICAgUGVybWlzc2lvbnMuUk9MRV9NQU5BR0VEX09CSkVDVF9DUkVBVEVcbiAgICAgIF0sXG4gICAgICBtb1xuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHVzZXIgaGFzIHBlcm1pc3Npb25zIHRvIGNvcHkgZGFzaGJvYXJkIGFjY29yZGluZyB0byBoaXMgcm9sZXMuXG4gICAqXG4gICAqIEByZXR1cm5zIFRydWUgaWYgdXNlciBoYXMgcGVybWlzc2lvbnMgdG8gY29weSBkYXNoYm9hcmQsIGZhbHNlIGlmIGhlIGNhbm5vdC5cbiAgICovXG4gIGhhc1Blcm1pc3Npb25zVG9Db3B5RGFzaGJvYXJkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnBlcm1pc3Npb25zLmhhc0FueVJvbGUoW1xuICAgICAgUGVybWlzc2lvbnMuUk9MRV9JTlZFTlRPUllfQURNSU4sXG4gICAgICBQZXJtaXNzaW9ucy5ST0xFX0lOVkVOVE9SWV9DUkVBVEUsXG4gICAgICBQZXJtaXNzaW9ucy5ST0xFX01BTkFHRURfT0JKRUNUX0FETUlOLFxuICAgICAgUGVybWlzc2lvbnMuUk9MRV9NQU5BR0VEX09CSkVDVF9DUkVBVEVcbiAgICBdKTtcbiAgfVxuXG4gIGlzTmFtZWQoZGFzaGJvYXJkOiBQYXJ0aWFsPENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0Pikge1xuICAgIHJldHVybiBzb21lKGtleXMoZGFzaGJvYXJkKSwgcHJvcCA9PlxuICAgICAgbmV3IFJlZ0V4cChcbiAgICAgICAgYF4ke3RoaXMuRlJBR01FTlRfTkFNRX0ke3RoaXMuSU5ERVhfU1BMSVR9JHtDb250ZXh0RGFzaGJvYXJkVHlwZS5OYW1lZH0ke3RoaXMuSU5ERVhfU1BMSVR9YFxuICAgICAgKS50ZXN0KHByb3ApXG4gICAgKTtcbiAgfVxuXG4gIGlzUmVwb3J0KGRhc2hib2FyZDogUGFydGlhbDxDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdD4pIHtcbiAgICByZXR1cm4gc29tZShrZXlzKGRhc2hib2FyZCksIHByb3AgPT5cbiAgICAgIG5ldyBSZWdFeHAoXG4gICAgICAgIGBeJHt0aGlzLkZSQUdNRU5UX05BTUV9JHt0aGlzLklOREVYX1NQTElUfSR7Q29udGV4dERhc2hib2FyZFR5cGUuTmFtZWR9JHt0aGlzLklOREVYX1NQTElUfSR7dGhpcy5SRVBPUlRfUEFSVElBTF9OQU1FfWBcbiAgICAgICkudGVzdChwcm9wKVxuICAgICk7XG4gIH1cblxuICBpc0RldmljZVR5cGUoZGFzaGJvYXJkOiBQYXJ0aWFsPENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0Pikge1xuICAgIHJldHVybiBzb21lKGtleXMoZGFzaGJvYXJkKSwgcHJvcCA9PlxuICAgICAgbmV3IFJlZ0V4cChcbiAgICAgICAgYF4ke3RoaXMuRlJBR01FTlRfTkFNRX0ke3RoaXMuSU5ERVhfU1BMSVR9JHtDb250ZXh0RGFzaGJvYXJkVHlwZS5EZXZpY2VUeXBlfSR7dGhpcy5JTkRFWF9TUExJVH1gXG4gICAgICApLnRlc3QocHJvcClcbiAgICApO1xuICB9XG5cbiAgaXNEZXZpY2VEYXNoYm9hcmQoZGFzaGJvYXJkOiBQYXJ0aWFsPENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0Pik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzb21lKGtleXMoZGFzaGJvYXJkKSwgcHJvcCA9PlxuICAgICAgbmV3IFJlZ0V4cChcbiAgICAgICAgYF4ke3RoaXMuRlJBR01FTlRfTkFNRX0ke3RoaXMuSU5ERVhfU1BMSVR9JHtDb250ZXh0RGFzaGJvYXJkVHlwZS5EZXZpY2V9JHt0aGlzLklOREVYX1NQTElUfWBcbiAgICAgICkudGVzdChwcm9wKVxuICAgICk7XG4gIH1cblxuICBpc0dyb3VwRGFzaGJvYXJkKGRhc2hib2FyZDogUGFydGlhbDxDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdD4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gc29tZShrZXlzKGRhc2hib2FyZCksIHByb3AgPT5cbiAgICAgIG5ldyBSZWdFeHAoXG4gICAgICAgIGBeJHt0aGlzLkZSQUdNRU5UX05BTUV9JHt0aGlzLklOREVYX1NQTElUfSR7Q29udGV4dERhc2hib2FyZFR5cGUuR3JvdXB9JHt0aGlzLklOREVYX1NQTElUfWBcbiAgICAgICkudGVzdChwcm9wKVxuICAgICk7XG4gIH1cblxuICBnZXRGaWx0ZXJlZERhc2hib2FyZFN0eWxlcyhzdHlsZUxpc3Q6IHN0cmluZ1tdKSB7XG4gICAgcmV0dXJuIHN0eWxlTGlzdC5maWx0ZXIoYyA9PlxuICAgICAgU1RZTElOR19DTEFTU19QUkVGSVhFUy5zb21lKGNsYXNzUHJlZml4ID0+IGMuc3RhcnRzV2l0aChjbGFzc1ByZWZpeCkpXG4gICAgKTtcbiAgfVxuXG4gIGdldFN0eWxpbmcoc3R5bGVMaXN0LCBzdHlsZU5hbWUsIGRlZmF1bHRWYWx1ZSkge1xuICAgIGNvbnN0IHN0eWxpbmcgPSBzdHlsZUxpc3QuZmluZChcbiAgICAgIHN0eWxlID0+IHN0eWxlICYmIG5ldyBSZWdFeHAoYC0ke3N0eWxlTmFtZX0kYCwgJ2knKS50ZXN0KHN0eWxlLmNsYXNzKVxuICAgICk7XG4gICAgcmV0dXJuIHN0eWxpbmcgPyBzdHlsaW5nLmNsYXNzIDogZGVmYXVsdFZhbHVlO1xuICB9XG5cbiAgbWFwV2lkZ2V0cyh3aWRnZXRzOiBXaWRnZXRbXSkge1xuICAgIHJldHVybiBrZXlCeShcbiAgICAgIHdpZGdldHMubWFwKHdpZGdldCA9PiB7XG4gICAgICAgIHdpZGdldC5pZCA9IFN0cmluZyhNYXRoLnJhbmRvbSgpKS5zdWJzdHIoMik7XG4gICAgICAgIHJldHVybiB3aWRnZXQ7XG4gICAgICB9KSxcbiAgICAgICdpZCdcbiAgICApO1xuICB9XG5cbiAgZ2V0RGFzaGJvYXJkJChkYXNoYm9hcmRJZE9yTmFtZSwgZGFzaGJvYXJkVHlwZTogQ29udGV4dERhc2hib2FyZFR5cGVbXSwgbW8/OiBJTWFuYWdlZE9iamVjdCkge1xuICAgIGNvbnN0IGNhY2hlID0gdGhpcy5jYWNoZS5nZXQoZGFzaGJvYXJkSWRPck5hbWUpO1xuXG4gICAgY29uc3QgZGFzaGJvYXJkcyA9IG1vXG4gICAgICA/IHRoaXMuZ2V0Q29udGV4dERhc2hib2FyZHMobW8sIGRhc2hib2FyZFR5cGUpXG4gICAgICA6IFt0aGlzLmdldE5hbWVkRGFzaGJvYXJkKGRhc2hib2FyZElkT3JOYW1lKV07XG5cbiAgICBjb25zdCBjYWNoZVJlZnJlc2ggPSB0aGlzLmdldENvbnRleHREYXNoYm9hcmRzJChkYXNoYm9hcmRzKS5waXBlKFxuICAgICAgdGFwKGRhc2hib2FyZCA9PiB0aGlzLmNhY2hlRGFzaGJvYXJkKGRhc2hib2FyZCkpLFxuICAgICAgZmlsdGVyKFxuICAgICAgICBkYXNoYm9hcmQgPT5cbiAgICAgICAgICBkYXNoYm9hcmQuaWQgPT09IGRhc2hib2FyZElkT3JOYW1lIHx8XG4gICAgICAgICAgaGFzKFxuICAgICAgICAgICAgZGFzaGJvYXJkLFxuICAgICAgICAgICAgYCR7dGhpcy5GUkFHTUVOVF9OQU1FfSR7dGhpcy5JTkRFWF9TUExJVH0ke0NvbnRleHREYXNoYm9hcmRUeXBlLk5hbWVkfSR7dGhpcy5JTkRFWF9TUExJVH0ke2Rhc2hib2FyZElkT3JOYW1lfWBcbiAgICAgICAgICApXG4gICAgICApXG4gICAgKTtcbiAgICByZXR1cm4gY2FjaGUgPyBvZihjYWNoZSkgOiBjYWNoZVJlZnJlc2g7XG4gIH1cblxuICBhc3luYyBwYXN0ZURhc2hib2FyZChuZXdDb250ZXh0OiBEYXNoYm9hcmRDb250ZXh0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuY29weUNsaXBib2FyZCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHRoaXMuY2FuUGFzdGVEYXNoYm9hcmQodGhpcy5jb3B5Q2xpcGJvYXJkLCBuZXdDb250ZXh0LmNvbnRleHQpKSB7XG4gICAgICAgICAgY29uc3QgZGFzaGJvYXJkVG9QYXN0ZSA9IHRoaXMuY3JlYXRlQ29udGV4dERhc2hib2FyZENvcHkoXG4gICAgICAgICAgICB0aGlzLmNvcHlDbGlwYm9hcmQuZGFzaGJvYXJkLFxuICAgICAgICAgICAgbmV3Q29udGV4dC5jb250ZXh0RGF0YSxcbiAgICAgICAgICAgIHRoaXMuY29weUNsaXBib2FyZC5jb250ZXh0LmNvbnRleHREYXRhXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCBkYXNoYm9hcmQgPSBhd2FpdCB0aGlzLmNyZWF0ZSh0aGlzLmNsZWFuKGRhc2hib2FyZFRvUGFzdGUpLCBuZXdDb250ZXh0KTtcblxuICAgICAgICAgIC8vIGxpbmtpbmcgY2hpbGRBZGRpdGlvbnMgZm9yIGUuZy4gdG8gZ3JhbnQgYWNjZXNzIHRvIHRoZSBpbWFnZXMgdXBsb2FkZWQgYnkgdGhlIGltYWdlIHdpZGdldCBmb3IgdXNlcnMgd2l0aCBvbmx5IGludmVudG9yeSByb2xlcy5cbiAgICAgICAgICBjb25zdCB7IGRhdGE6IGNoaWxkQWRkaXRpb25zIH0gPSBhd2FpdCB0aGlzLmludmVudG9yeS5jaGlsZEFkZGl0aW9uc0xpc3QoXG4gICAgICAgICAgICB0aGlzLmNvcHlDbGlwYm9hcmQuZGFzaGJvYXJkSWQsXG4gICAgICAgICAgICB7IHBhZ2VTaXplOiAyMDAwIH1cbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChjaGlsZEFkZGl0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuaW52ZW50b3J5LmNoaWxkQWRkaXRpb25zQnVsa0FkZChjaGlsZEFkZGl0aW9ucywgZGFzaGJvYXJkLmlkKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLmNvcHlDbGlwYm9hcmQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvRGFzaGJvYXJkKGRhc2hib2FyZCk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICB0aGlzLmFsZXJ0Lndhcm5pbmcoZ2V0dGV4dCgnSW5zdWZmaWNpZW50IHBlcm1pc3Npb25zIGZvciB0aGlzIGFjdGlvbi4nKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0Q29udGV4dEZvckdTKG1vOiBJTWFuYWdlZE9iamVjdCk6IHN0cmluZyB8IG51bGwge1xuICAgIGlmICh0aGlzLmdyb3VwU2VydmljZS5pc0RldmljZShtbykpIHtcbiAgICAgIHJldHVybiBQUk9EVUNUX0VYUEVSSUVOQ0UuREFTSEJPQVJELkNPTlRFWFQuREVWSUNFO1xuICAgIH0gZWxzZSBpZiAodGhpcy5ncm91cFNlcnZpY2UuaXNBc3NldChtbykpIHtcbiAgICAgIHJldHVybiBQUk9EVUNUX0VYUEVSSUVOQ0UuREFTSEJPQVJELkNPTlRFWFQuQVNTRVQ7XG4gICAgfSBlbHNlIGlmICh0aGlzLmdyb3VwU2VydmljZS5pc0dyb3VwKG1vKSkge1xuICAgICAgcmV0dXJuIFBST0RVQ1RfRVhQRVJJRU5DRS5EQVNIQk9BUkQuQ09OVEVYVC5HUk9VUDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZXJpYWxpemVXaWRnZXRDb25maWdzKGRhc2hib2FyZDogQ29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBjaGlsZHJlbiA9IGNsb25lRGVlcChkYXNoYm9hcmQuYzh5X0Rhc2hib2FyZC5jaGlsZHJlbik7XG4gICAgaWYgKCFjaGlsZHJlbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjb25maWdzID0gT2JqZWN0LnZhbHVlcyhjaGlsZHJlbik7XG4gICAgY29uc3QgZGV0YWlscyA9IGNvbmZpZ3MubWFwKCh7IGNvbXBvbmVudElkLCBjb25maWcgfSkgPT4gKHsgY29tcG9uZW50SWQsIGNvbmZpZyB9KSk7XG4gICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IHRoaXMuZHluYW1pY0NvbXBvbmVudC5zZXJpYWxpemVDb25maWdzKGRldGFpbHMpO1xuICAgIHJlc3VsdHMuZm9yRWFjaCgocmVzdWx0LCBpbmRleCkgPT4ge1xuICAgICAgT2JqZWN0LmVudHJpZXMocmVzdWx0KS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgc2V0KGRldGFpbHNbaW5kZXhdLmNvbmZpZywga2V5LCB2YWx1ZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBkYXNoYm9hcmQuYzh5X0Rhc2hib2FyZC5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICB9XG5cbiAgcHJpdmF0ZSBjYW5QYXN0ZURhc2hib2FyZChcbiAgICBjb3B5Q2xpcGJvYXJkOiBEYXNoYm9hcmRDb3B5Q2xpcGJvYXJkLFxuICAgIGN1cnJlbnRDb250ZXh0OiBWaWV3Q29udGV4dFxuICApOiBib29sZWFuIHtcbiAgICBjb25zdCBjbGlwYm9hcmRWaWV3Q29udGV4dCA9IGNvcHlDbGlwYm9hcmQuY29udGV4dC5jb250ZXh0O1xuXG4gICAgaWYgKGN1cnJlbnRDb250ZXh0ICE9PSBjbGlwYm9hcmRWaWV3Q29udGV4dCkge1xuICAgICAgaWYgKGNsaXBib2FyZFZpZXdDb250ZXh0ID09PSBWaWV3Q29udGV4dC5EZXZpY2UpIHtcbiAgICAgICAgdGhpcy5hbGVydC53YXJuaW5nKGdldHRleHQoJ0RldmljZSBkYXNoYm9hcmRzIGNhbiBvbmx5IGJlIGNvcGllZCBpbnRvIGEgZGV2aWNlLicpKTtcbiAgICAgIH0gZWxzZSBpZiAoY2xpcGJvYXJkVmlld0NvbnRleHQgPT09IFZpZXdDb250ZXh0Lkdyb3VwKSB7XG4gICAgICAgIHRoaXMuYWxlcnQud2FybmluZyhnZXR0ZXh0KCdHcm91cCBkYXNoYm9hcmRzIGNhbiBvbmx5IGJlIGNvcGllZCBpbnRvIGEgZ3JvdXAuJykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQ29udGV4dERhc2hib2FyZENvcHkoXG4gICAgZGFzaDogQ29udGV4dERhc2hib2FyZCxcbiAgICBuZXdDb250ZXh0OiBQYXJ0aWFsPElNYW5hZ2VkT2JqZWN0PixcbiAgICBvbGRDb250ZXh0OiBQYXJ0aWFsPElNYW5hZ2VkT2JqZWN0PlxuICApOiBDb250ZXh0RGFzaGJvYXJkIHtcbiAgICBjb25zdCBjaGlsZHJlbiA9IHJlZHVjZShcbiAgICAgIGRhc2guY2hpbGRyZW4sXG4gICAgICAoX2NoaWxkcmVuLCBjaGlsZCkgPT4ge1xuICAgICAgICBjb25zdCB7IGlkIH0gPSBjaGlsZDtcbiAgICAgICAgY29uc3QgY2ZnID0gY2hpbGQuY29uZmlnO1xuICAgICAgICBjb25zdCBwcm9wZXJ0aWVzVG9Db3B5ID0ge1xuICAgICAgICAgIGRldmljZTogZGV2aWNlID0+IHRoaXMucmVwbGFjZUNvbnRleHRJbk9iaihkZXZpY2UsIG5ld0NvbnRleHQsIG9sZENvbnRleHQpLFxuICAgICAgICAgIGRhdGFwb2ludHM6IGRhdGFQb2ludHMgPT5cbiAgICAgICAgICAgIHRoaXMucmVwbGFjZUNvbnRleHRJbkRhdGFQb2ludHMoZGF0YVBvaW50cywgbmV3Q29udGV4dCwgb2xkQ29udGV4dCksXG4gICAgICAgICAgZGF0YVBvaW50czogZGF0YVBvaW50cyA9PlxuICAgICAgICAgICAgdGhpcy5yZXBsYWNlQ29udGV4dEluRGF0YVBvaW50cyhkYXRhUG9pbnRzLCBuZXdDb250ZXh0LCBvbGRDb250ZXh0KSxcbiAgICAgICAgICBkYXRhcG9pbnRzR2F1Z2U6IGRhdGFQb2ludHMgPT5cbiAgICAgICAgICAgIHRoaXMucmVwbGFjZUNvbnRleHRJbkRhdGFQb2ludHMoZGF0YVBvaW50cywgbmV3Q29udGV4dCwgb2xkQ29udGV4dCksXG4gICAgICAgICAgZGF0YXBvaW50c0xhYmVsczogZGF0YVBvaW50cyA9PlxuICAgICAgICAgICAgdGhpcy5yZXBsYWNlQ29udGV4dEluRGF0YVBvaW50cyhkYXRhUG9pbnRzLCBuZXdDb250ZXh0LCBvbGRDb250ZXh0KVxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChjZmcpIHtcbiAgICAgICAgICB0aGlzLmNvcHlQcm9wZXJ0aWVzKGNmZywgcHJvcGVydGllc1RvQ29weSk7XG4gICAgICAgICAgaWYgKGNmZy5vcHRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLmNvcHlQcm9wZXJ0aWVzKGNmZy5vcHRpb25zLCBwcm9wZXJ0aWVzVG9Db3B5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBfY2hpbGRyZW5baWRdID0gY2xvbmVEZWVwKGNoaWxkKTtcbiAgICAgICAgcmV0dXJuIF9jaGlsZHJlbjtcbiAgICAgIH0sXG4gICAgICB7fVxuICAgICk7XG5cbiAgICBkYXNoLmNoaWxkcmVuID0gY2hpbGRyZW47XG4gICAgcmV0dXJuIGRhc2g7XG4gIH1cblxuICBwcml2YXRlIGNvcHlQcm9wZXJ0aWVzKG9iaiwgcHJvcGVydGllc1RvQ29weSkge1xuICAgIGZvckVhY2gocHJvcGVydGllc1RvQ29weSwgKGNvcHlGbiwgcHJvcGVydHkpID0+IHtcbiAgICAgIGlmIChvYmpbcHJvcGVydHldKSB7XG4gICAgICAgIG9ialtwcm9wZXJ0eV0gPSBjb3B5Rm4ob2JqW3Byb3BlcnR5XSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHJlcGxhY2VDb250ZXh0SW5EYXRhUG9pbnRzKFxuICAgIGRhdGFQb2ludHMsXG4gICAgbmV3Q29udGV4dDogUGFydGlhbDxJTWFuYWdlZE9iamVjdD4sXG4gICAgb2xkQ29udGV4dDogUGFydGlhbDxJTWFuYWdlZE9iamVjdD5cbiAgKSB7XG4gICAgZGF0YVBvaW50cy5mb3JFYWNoKGRwID0+IHtcbiAgICAgIGRwLl9fdGFyZ2V0ID0gdGhpcy5yZXBsYWNlQ29udGV4dEluT2JqKGRwLl9fdGFyZ2V0LCBuZXdDb250ZXh0LCBvbGRDb250ZXh0KTtcbiAgICB9KTtcbiAgICByZXR1cm4gZGF0YVBvaW50cztcbiAgfVxuXG4gIHByaXZhdGUgcmVwbGFjZUNvbnRleHRJbk9iaihcbiAgICBvYmo6IFBhcnRpYWw8SU1hbmFnZWRPYmplY3Q+LFxuICAgIG5ld0NvbnRleHQ6IFBhcnRpYWw8SU1hbmFnZWRPYmplY3Q+LFxuICAgIG9sZENvbnRleHQ6IFBhcnRpYWw8SU1hbmFnZWRPYmplY3Q+XG4gICkge1xuICAgIGlmIChvYmogJiYgb2JqLmlkID09PSBvbGRDb250ZXh0LmlkKSB7XG4gICAgICBPYmplY3QuYXNzaWduKG9iaiwgcGljayhuZXdDb250ZXh0LCBbJ2lkJywgJ25hbWUnXSkpO1xuICAgIH1cbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRUYWJzJChtbzogQ29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3QsIGRhc2hib2FyZFR5cGU6IENvbnRleHREYXNoYm9hcmRUeXBlW10pIHtcbiAgICBjb25zdCBkYXNoYm9hcmRzID0gdGhpcy5nZXRDb250ZXh0RGFzaGJvYXJkcyhtbywgZGFzaGJvYXJkVHlwZSk7XG5cbiAgICByZXR1cm4gdGhpcy5nZXRDb250ZXh0RGFzaGJvYXJkcyQoZGFzaGJvYXJkcykucGlwZShcbiAgICAgIG1lcmdlTWFwKGRhc2hib2FyZCA9PiB0aGlzLnZlcmlmeURhc2hib2FyZEF2YWlsYWJpbGl0eSQoZGFzaGJvYXJkKSksXG4gICAgICBtZXJnZU1hcCgoW2Rhc2hib2FyZF0pID0+IHRoaXMucmVtb3ZlRGFzaGJvYXJkTW9Qcm9wZXJ0eShkYXNoYm9hcmQpKSxcbiAgICAgIHRhcChkYXNoYm9hcmQgPT4gdGhpcy5jYWNoZURhc2hib2FyZChkYXNoYm9hcmQpKSxcbiAgICAgIG1hcChkYXNoYm9hcmQgPT4gdGhpcy5jcmVhdGVEYXNoYm9hcmRUYWIoZGFzaGJvYXJkKSksXG4gICAgICB0b0FycmF5KClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSB2ZXJpZnlEYXNoYm9hcmRBdmFpbGFiaWxpdHkkKGRhc2hib2FyZDogQ29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3QpIHtcbiAgICBjb25zdCBnbG9iYWxSb2xlc0lkcyA9IGRhc2hib2FyZD8uYzh5X0Rhc2hib2FyZD8uZ2xvYmFsUm9sZXNJZHM7XG4gICAgY29uc3QgY2FuRWRpdCA9IGZyb20oXG4gICAgICB0aGlzLnBlcm1pc3Npb25zLmNhbkVkaXQodGhpcy5JTlZFTlRPUllfUk9MRVMsIGRhc2hib2FyZCwgeyBza2lwUmVxdWVzdENoZWNrOiB0cnVlIH0pXG4gICAgKTtcbiAgICBjb25zdCBoYXNBbnlHbG9iYWxSb2xlID1cbiAgICAgICFnbG9iYWxSb2xlc0lkcyB8fCBnbG9iYWxSb2xlc0lkcyA9PT0gQUxMX0dMT0JBTF9ST0xFU19TRUxFQ1RFRFxuICAgICAgICA/IG9mKHRydWUpXG4gICAgICAgIDogb2YodGhpcy5wZXJtaXNzaW9ucy5oYXNBbnlHbG9iYWxSb2xlKGdsb2JhbFJvbGVzSWRzKSk7XG5cbiAgICByZXR1cm4gY29tYmluZUxhdGVzdChbb2YoZGFzaGJvYXJkKSwgY2FuRWRpdCwgaGFzQW55R2xvYmFsUm9sZV0pLnBpcGUoXG4gICAgICBmaWx0ZXIoKFssIGNhbkVkaXQsIGhhc0FueUdsb2JhbFJvbGVdKSA9PiBjYW5FZGl0IHx8IGhhc0FueUdsb2JhbFJvbGUpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29udGV4dERhc2hib2FyZHMkKHJlcXVlc3RzOiBBcnJheTxQcm9taXNlPElSZXN1bHRMaXN0PElNYW5hZ2VkT2JqZWN0Pj4+KSB7XG4gICAgcmV0dXJuIGZyb20ocmVxdWVzdHMpLnBpcGUoXG4gICAgICBtZXJnZUFsbCgpLFxuICAgICAgbWVyZ2VNYXAocmVzcG9uc2UgPT4gcmVzcG9uc2UuZGF0YSBhcyBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdFtdKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYW5zIGFscmVhZHkgY29ycnVwdGVkIGRhc2hib2FyZHMgZnJvbSBkYXNoYm9hcmRNbyBwcm9wZXJ0eS5cbiAgICogQWRkZWQgdG8gZml4IGRhc2hib2FyZHMgb24gdGhlIGNsb3VkIGluc3RhbmNlIChldS1sYXRlc3QpLlxuICAgKiBAZGVwcmVjYXRlZCBUaGlzIGlzIGdvaW5nIHRvIGJlIHJlbW92ZWQgYWZ0ZXIgMTAwNy43LjAuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHJlbW92ZURhc2hib2FyZE1vUHJvcGVydHkoXG4gICAgZGFzaGJvYXJkOiBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdFxuICApOiBQcm9taXNlPENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0PiB7XG4gICAgY29uc3QgZGFzaGJvYXJkQ29weSA9IGNsb25lRGVlcChkYXNoYm9hcmQpO1xuICAgIGNvbnN0IGNoaWxkcmVuID0gZ2V0KGRhc2hib2FyZENvcHksICdjOHlfRGFzaGJvYXJkLmNoaWxkcmVuJyk7XG4gICAgbGV0IHVwZGF0ZURhc2hib2FyZCA9IGZhbHNlO1xuXG4gICAgZm9yRWFjaChjaGlsZHJlbiwgY2hpbGQgPT4ge1xuICAgICAgaWYgKGdldChjaGlsZCwgJ2NvbXBvbmVudFRyYW5zZm9ybUNvbmZpZ1dpdGhDb250ZXh0JykpIHtcbiAgICAgICAgZGVsZXRlIGNoaWxkLmNvbXBvbmVudFRyYW5zZm9ybUNvbmZpZ1dpdGhDb250ZXh0O1xuICAgICAgICB1cGRhdGVEYXNoYm9hcmQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKGdldChjaGlsZCwgJ2NvbmZpZy5kYXNoYm9hcmRNbycpKSB7XG4gICAgICAgIGRlbGV0ZSBjaGlsZC5jb25maWcuZGFzaGJvYXJkTW87XG4gICAgICAgIHVwZGF0ZURhc2hib2FyZCA9IHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAodXBkYXRlRGFzaGJvYXJkKSB7XG4gICAgICBhd2FpdCB0aGlzLnVwZGF0ZShkYXNoYm9hcmRDb3B5KTtcbiAgICB9XG4gICAgcmV0dXJuIGRhc2hib2FyZENvcHk7XG4gIH1cblxuICBwcml2YXRlIGNhY2hlRGFzaGJvYXJkKGRhc2hib2FyZDogQ29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3QpIHtcbiAgICB0aGlzLmNhY2hlLnNldChkYXNoYm9hcmQuaWQsIGRhc2hib2FyZCk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZURhc2hib2FyZFRhYihkYXNoYm9hcmQ6IENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0KSB7XG4gICAgY29uc3QgeyBjOHlfRGFzaGJvYXJkOiBfZGFzaGJvYXJkLCBpZCB9ID0gZGFzaGJvYXJkO1xuICAgIHJldHVybiB7XG4gICAgICBpY29uOiBfZGFzaGJvYXJkLmljb24sXG4gICAgICBwYXRoOiBgJHt0aGlzLkRBU0hCT0FSRF9ST1VURV9QQVRIfS8ke2lkfWAsXG4gICAgICBsYWJlbDogX2Rhc2hib2FyZC5uYW1lLFxuICAgICAgcHJpb3JpdHk6IF9kYXNoYm9hcmQucHJpb3JpdHksXG4gICAgICBoaWRlOiB0aGlzLmlzUmVwb3J0KGRhc2hib2FyZClcbiAgICB9IGFzIFRhYjtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYW4oZGFzaGJvYXJkKSB7XG4gICAgY29uc3QganNvblN0cmluZyA9IEpTT04uc3RyaW5naWZ5KGRhc2hib2FyZCwgKGtleSwgdmFsdWUpID0+IHtcbiAgICAgIGlmIChrZXkgPT09ICckJGhhc2hLZXknIHx8IGtleSA9PT0gJ2tsYXNzZXMnKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9KTtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShqc29uU3RyaW5nKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TmFtZWREYXNoYm9hcmQobmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuaW52ZW50b3J5Lmxpc3Qoe1xuICAgICAgZnJhZ21lbnRUeXBlOiBgJHt0aGlzLkZSQUdNRU5UX05BTUV9JHt0aGlzLklOREVYX1NQTElUfSR7Q29udGV4dERhc2hib2FyZFR5cGUuTmFtZWR9JHt0aGlzLklOREVYX1NQTElUfSR7bmFtZX1gLFxuICAgICAgcGFnZVNpemU6IDFcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29udGV4dERhc2hib2FyZHMobW86IElNYW5hZ2VkT2JqZWN0LCBkYXNoYm9hcmRUeXBlOiBDb250ZXh0RGFzaGJvYXJkVHlwZVtdKSB7XG4gICAgcmV0dXJuIGRhc2hib2FyZFR5cGUubWFwKCh0eXBlOiBDb250ZXh0RGFzaGJvYXJkVHlwZSkgPT5cbiAgICAgIHRoaXMuaW52ZW50b3J5Lmxpc3Qoe1xuICAgICAgICBmcmFnbWVudFR5cGU6IHRoaXMuY3JlYXRlRGFzaGJvYXJkRnJhZ21lbnQobW8sIHR5cGUpLFxuICAgICAgICBwYWdlU2l6ZTogdGhpcy5ERUZBVUxUX1BBR0VTSVpFXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZURhc2hib2FyZEZyYWdtZW50KG1vOiBJTWFuYWdlZE9iamVjdCwgdHlwZTogQ29udGV4dERhc2hib2FyZFR5cGUpIHtcbiAgICBsZXQgdmFsdWU7XG4gICAgaWYgKG1vLmM4eV9SZXBvcnQpIHtcbiAgICAgIHZhbHVlID0gYCR7dGhpcy5SRVBPUlRfUEFSVElBTF9OQU1FfSR7bW8uaWR9YDtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgPSB0eXBlID09PSBDb250ZXh0RGFzaGJvYXJkVHlwZS5EZXZpY2VUeXBlID8gbW8udHlwZSA6IG1vLmlkO1xuICAgIH1cbiAgICByZXR1cm4gYCR7dGhpcy5GUkFHTUVOVF9OQU1FfSR7dGhpcy5JTkRFWF9TUExJVH0ke3R5cGV9JHt0aGlzLklOREVYX1NQTElUfSR7dmFsdWV9YDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGFzaGJvYXJkVHlwZUZyb21WaWV3Q29udGV4dChkYXNoYm9hcmRDZmcsIGNvbnRleHQpIHtcbiAgICBsZXQgZGFzaGJvYXJkVHlwZTtcbiAgICBpZiAoY29udGV4dC5jb250ZXh0ID09PSBWaWV3Q29udGV4dC5EZXZpY2UpIHtcbiAgICAgIGRhc2hib2FyZFR5cGUgPSBkYXNoYm9hcmRDZmcuZGV2aWNlVHlwZVxuICAgICAgICA/IENvbnRleHREYXNoYm9hcmRUeXBlLkRldmljZVR5cGVcbiAgICAgICAgOiBDb250ZXh0RGFzaGJvYXJkVHlwZS5EZXZpY2U7XG4gICAgfVxuICAgIGlmIChjb250ZXh0LmNvbnRleHQgPT09IFZpZXdDb250ZXh0Lkdyb3VwKSB7XG4gICAgICBkYXNoYm9hcmRUeXBlID0gQ29udGV4dERhc2hib2FyZFR5cGUuR3JvdXA7XG4gICAgfVxuICAgIHJldHVybiBkYXNoYm9hcmRUeXBlO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVGcmFnbWVudEtleShjb250ZXh0RGFzaGJvYXJkVHlwZTogQ29udGV4dERhc2hib2FyZFR5cGUsIHZhbHVlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gW3RoaXMuRlJBR01FTlRfTkFNRSwgY29udGV4dERhc2hib2FyZFR5cGUsIHZhbHVlXS5qb2luKHRoaXMuSU5ERVhfU1BMSVQpO1xuICB9XG5cbiAgcHJpdmF0ZSBzaG91bGRTZXRHbG9iYWwoZGFzaGJvYXJkOiBQYXJ0aWFsPENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0PiwgY29udGV4dD8pIHtcbiAgICBpZiAoXG4gICAgICAoIWNvbnRleHQgJiYgdGhpcy5pc05hbWVkKGRhc2hib2FyZCkgJiYgIXRoaXMuaXNSZXBvcnQoZGFzaGJvYXJkKSkgfHxcbiAgICAgIHRoaXMuaXNEZXZpY2VUeXBlKGRhc2hib2FyZClcbiAgICApIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cbiJdfQ==
446
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1kYXNoYm9hcmQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2NvbnRleHQtZGFzaGJvYXJkL2NvbnRleHQtZGFzaGJvYXJkLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQTBCLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pFLE9BQU8sRUFBa0IsZ0JBQWdCLEVBQWUsTUFBTSxhQUFhLENBQUM7QUFDNUUsT0FBTyxFQUNMLFlBQVksRUFFWix1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLE9BQU8sRUFDUCxZQUFZLEVBQ1osWUFBWSxFQUNaLGFBQWEsRUFDYixnQkFBZ0IsRUFDaEIsV0FBVyxFQUNYLE1BQU0sRUFFTixXQUFXLEVBQ1gsV0FBVyxFQUVaLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUNMLE1BQU0sRUFDTixJQUFJLEVBQ0osSUFBSSxFQUNKLElBQUksRUFDSixLQUFLLEVBQ0wsR0FBRyxFQUNILEdBQUcsRUFDSCxPQUFPLEVBQ1AsU0FBUyxFQUNULE1BQU0sRUFDTixHQUFHLEVBQ0osTUFBTSxXQUFXLENBQUM7QUFDbkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNELE9BQU8sRUFDTCxVQUFVLEVBQ1YsTUFBTSxFQUNOLEdBQUcsRUFDSCxRQUFRLEVBQ1IsUUFBUSxFQUNSLEdBQUcsRUFDSCxZQUFZLEVBQ1osT0FBTyxFQUNSLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUdMLG9CQUFvQixFQUdwQixzQkFBc0IsRUFDdEIseUJBQXlCLEVBQ3pCLGtCQUFrQixFQUNuQixNQUFNLDJCQUEyQixDQUFDOzs7Ozs7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Q0QsT0FBTyxhQUFhLENBQUM7SUFDdkIsQ0FBQztJQUVPLGlCQUFpQixDQUFDLG9CQUEwQyxFQUFFLEtBQWE7UUFDakYsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsb0JBQW9CLEVBQUUsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNsRixDQUFDO0lBRU8sZUFBZSxDQUFDLFNBQWlELEVBQUUsT0FBUTtRQUNqRixJQUNFLENBQUMsQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDbEUsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsRUFDNUI7WUFDQSxPQUFPLEVBQUUsQ0FBQztTQUNYO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDOztvSEF2bEJVLHVCQUF1Qjt3SEFBdkIsdUJBQXVCLGNBRnRCLE1BQU07MkZBRVAsdUJBQXVCO2tCQUhuQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBJTWFuYWdlZE9iamVjdCwgSW52ZW50b3J5U2VydmljZSwgSVJlc3VsdExpc3QgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQge1xuICBBbGVydFNlcnZpY2UsXG4gIENvbnRleHREYXRhLFxuICBEeW5hbWljQ29tcG9uZW50U2VydmljZSxcbiAgZ2V0QWN0aXZhdGVkUm91dGUsXG4gIGdldHRleHQsXG4gIEdyb3VwU2VydmljZSxcbiAgTW9kYWxTZXJ2aWNlLFxuICBOYXZpZ2F0b3JOb2RlLFxuICBOYXZpZ2F0b3JTZXJ2aWNlLFxuICBQZXJtaXNzaW9ucyxcbiAgU3RhdHVzLFxuICBUYWIsXG4gIFRhYnNTZXJ2aWNlLFxuICBWaWV3Q29udGV4dCxcbiAgV2lkZ2V0XG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtcbiAgYXNzaWduLFxuICBwaWNrLFxuICBzb21lLFxuICBrZXlzLFxuICBrZXlCeSxcbiAgaGFzLFxuICBnZXQsXG4gIGZvckVhY2gsXG4gIGNsb25lRGVlcCxcbiAgcmVkdWNlLFxuICBzZXRcbn0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIGZyb20sIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBjYXRjaEVycm9yLFxuICBmaWx0ZXIsXG4gIG1hcCxcbiAgbWVyZ2VBbGwsXG4gIG1lcmdlTWFwLFxuICB0YXAsXG4gIHRocm93SWZFbXB0eSxcbiAgdG9BcnJheVxufSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuICBDb250ZXh0RGFzaGJvYXJkLFxuICBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdCxcbiAgQ29udGV4dERhc2hib2FyZFR5cGUsXG4gIERhc2hib2FyZENvbnRleHQsXG4gIERhc2hib2FyZENvcHlDbGlwYm9hcmQsXG4gIFNUWUxJTkdfQ0xBU1NfUFJFRklYRVMsXG4gIEFMTF9HTE9CQUxfUk9MRVNfU0VMRUNURUQsXG4gIFBST0RVQ1RfRVhQRVJJRU5DRVxufSBmcm9tICcuL2NvbnRleHQtZGFzaGJvYXJkLm1vZGVsJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQ29udGV4dERhc2hib2FyZFNlcnZpY2Uge1xuICByZWFkb25seSBSRVBPUlRfUEFSVElBTF9OQU1FID0gJ3JlcG9ydF8nO1xuICBjb3B5Q2xpcGJvYXJkOiBEYXNoYm9hcmRDb3B5Q2xpcGJvYXJkO1xuICBwcml2YXRlIHJlYWRvbmx5IElOVkVOVE9SWV9ST0xFUyA9IFtcbiAgICBQZXJtaXNzaW9ucy5ST0xFX0lOVkVOVE9SWV9BRE1JTixcbiAgICBQZXJtaXNzaW9ucy5ST0xFX01BTkFHRURfT0JKRUNUX0FETUlOXG4gIF07XG4gIHByaXZhdGUgY2FjaGUgPSBuZXcgTWFwPHN0cmluZywgQ29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3Q+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgREVGQVVMVF9QQUdFU0laRSA9IDEwMDA7XG4gIHByaXZhdGUgcmVhZG9ubHkgRlJBR01FTlRfTkFNRSA9ICdjOHlfRGFzaGJvYXJkJztcbiAgcHJpdmF0ZSByZWFkb25seSBEQVNIQk9BUkRfUk9VVEVfUEFUSCA9ICdkYXNoYm9hcmQnO1xuICBwcml2YXRlIHJlYWRvbmx5IElOREVYX1NQTElUID0gJyEnO1xuICBwcml2YXRlIF9mb3JtRGlzYWJsZWQgPSB0cnVlO1xuXG4gIGdldCBmb3JtRGlzYWJsZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1EaXNhYmxlZDtcbiAgfVxuXG4gIHNldCBmb3JtRGlzYWJsZWQodmFsdWUpIHtcbiAgICB0aGlzLl9mb3JtRGlzYWJsZWQgPSB2YWx1ZTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgaW52ZW50b3J5OiBJbnZlbnRvcnlTZXJ2aWNlLFxuICAgIHByaXZhdGUgdGFiczogVGFic1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBtb2RhbDogTW9kYWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgbmF2aWdhdG9yOiBOYXZpZ2F0b3JTZXJ2aWNlLFxuICAgIHByaXZhdGUgcGVybWlzc2lvbnM6IFBlcm1pc3Npb25zLFxuICAgIHByaXZhdGUgYWxlcnQ6IEFsZXJ0U2VydmljZSxcbiAgICBwcml2YXRlIGR5bmFtaWNDb21wb25lbnQ6IER5bmFtaWNDb21wb25lbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgZ3JvdXBTZXJ2aWNlOiBHcm91cFNlcnZpY2VcbiAgKSB7fVxuXG4gIGFzeW5jIGNyZWF0ZShkYXNoYm9hcmRDZmc6IENvbnRleHREYXNoYm9hcmQsIGNvbnRleHQ/OiBDb250ZXh0RGF0YSwgbmFtZSA9ICcnKSB7XG4gICAgbGV0IGlkID0gJyc7XG4gICAgbGV0IGRhc2hib2FyZFR5cGU7XG5cbiAgICBpZiAoY29udGV4dCkge1xuICAgICAgaWQgPSBjb250ZXh0LmNvbnRleHREYXRhLmlkIGFzIHN0cmluZztcbiAgICAgIGRhc2hib2FyZFR5cGUgPSB0aGlzLmdldERhc2hib2FyZFR5cGVGcm9tVmlld0NvbnRleHQoZGFzaGJvYXJkQ2ZnLCBjb250ZXh0KTtcbiAgICB9XG4gICAgaWYgKG5hbWUpIHtcbiAgICAgIGRhc2hib2FyZFR5cGUgPSBDb250ZXh0RGFzaGJvYXJkVHlwZS5OYW1lZDtcbiAgICB9XG5cbiAgICBjb25zdCBkYXNoYm9hcmQ6IFBhcnRpYWw8SU1hbmFnZWRPYmplY3Q+ID0ge307XG4gICAgYXNzaWduKGRhc2hib2FyZCwgeyBjOHlfRGFzaGJvYXJkOiBkYXNoYm9hcmRDZmcgfSk7XG5cbiAgICBjb25zdCB2YWx1ZSA9XG4gICAgICBkYXNoYm9hcmRUeXBlID09PSBDb250ZXh0RGFzaGJvYXJkVHlwZS5EZXZpY2VUeXBlID8gZGFzaGJvYXJkQ2ZnLmRldmljZVR5cGVWYWx1ZSA6IG5hbWUgfHwgaWQ7XG5cbiAgICBjb25zdCBmcmFnbWVudEtleSA9IHRoaXMuY3JlYXRlRnJhZ21lbnRLZXkoZGFzaGJvYXJkVHlwZSwgdmFsdWUpO1xuICAgIGRhc2hib2FyZFtmcmFnbWVudEtleV0gPSB7fTtcblxuICAgIGlmICh0aGlzLnNob3VsZFNldEdsb2JhbChkYXNoYm9hcmQsIGNvbnRleHQpKSB7XG4gICAgICBhc3NpZ24oZGFzaGJvYXJkLCB7IGM4eV9HbG9iYWw6IHt9IH0pO1xuICAgIH1cbiAgICBkYXNoYm9hcmQubmFtZSA9IGRhc2hib2FyZC5jOHlfRGFzaGJvYXJkLm5hbWU7XG4gICAgY29uc3QgeyBkYXRhIH0gPVxuICAgICAgZGFzaGJvYXJkVHlwZSA9PT0gQ29udGV4dERhc2hib2FyZFR5cGUuR3JvdXAgfHxcbiAgICAgIGRhc2hib2FyZFR5cGUgPT09IENvbnRleHREYXNoYm9hcmRUeXBlLkRldmljZSB8fFxuICAgICAgKGNvbnRleHQgJiYgZGFzaGJvYXJkVHlwZSA9PT0gQ29udGV4dERhc2hib2FyZFR5cGUuTmFtZWQpXG4gICAgICAgID8gYXdhaXQgdGhpcy5pbnZlbnRvcnkuY2hpbGRBZGRpdGlvbnNDcmVhdGUoZGFzaGJvYXJkLCBpZClcbiAgICAgICAgOiBhd2FpdCB0aGlzLmludmVudG9yeS5jcmVhdGUoZGFzaGJvYXJkKTtcbiAgICByZXR1cm4gZGF0YSBhcyBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdDtcbiAgfVxuXG4gIGFzeW5jIGRldGFpbChkYXNoYm9hcmRNTzogQ29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3QpIHtcbiAgICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IHRoaXMuaW52ZW50b3J5LmRldGFpbChkYXNoYm9hcmRNTyk7XG4gICAgdGhpcy5jYWNoZS5zZXQoZGFzaGJvYXJkTU8uaWQsIGRhdGEpO1xuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlKGRhc2hib2FyZDogQ29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3QpIHtcbiAgICBkYXNoYm9hcmQubmFtZSA9IGRhc2hib2FyZC5jOHlfRGFzaGJvYXJkLm5hbWU7XG4gICAgY29uc3Qga2VlcEZyYWdtZW50cyA9IHRoaXMuY2xlYW4ocGljayhkYXNoYm9hcmQsIFt0aGlzLkZSQUdNRU5UX05BTUUsICdpZCcsICduYW1lJ10pKTtcbiAgICBrZWVwRnJhZ21lbnRzLmM4eV9HbG9iYWwgPSB0aGlzLnNob3VsZFNldEdsb2JhbChkYXNoYm9hcmQpO1xuICAgIGF3YWl0IHRoaXMuc2VyaWFsaXplV2lkZ2V0Q29uZmlncyhrZWVwRnJhZ21lbnRzKTtcbiAgICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IHRoaXMuaW52ZW50b3J5LnVwZGF0ZShrZWVwRnJhZ21lbnRzKTtcbiAgICB0aGlzLmNhY2hlLnNldChkYXNoYm9hcmQuaWQsIGRhdGEpO1xuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlKGRhc2hib2FyZDogQ29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3QsIHdpdGhDb25maXJtYXRpb24gPSB0cnVlKSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICh3aXRoQ29uZmlybWF0aW9uKSB7XG4gICAgICAgIGxldCBtc2c6IHN0cmluZyA9IGdldHRleHQoXG4gICAgICAgICAgYFlvdSBhcmUgYWJvdXQgdG8gZGVsZXRlIHRoZSBkYXNoYm9hcmQgXCJ7eyBkYXNoYm9hcmROYW1lIH19XCIuIERvIHlvdSB3YW50IHRvIHByb2NlZWQ/YFxuICAgICAgICApO1xuICAgICAgICBpZiAodGhpcy5pc0RldmljZVR5cGUoZGFzaGJvYXJkKSkge1xuICAgICAgICAgIG1zZyA9IGdldHRleHQoXG4gICAgICAgICAgICBgWW91IGFyZSBhYm91dCB0byBkZWxldGUgdGhlIGRhc2hib2FyZCBcInt7IGRhc2hib2FyZE5hbWUgfX1cIiBmcm9tIGFsbCBkZXZpY2VzIG9mIHRoZSB0eXBlIFwie3sgZGV2aWNlVHlwZSB9fVwiLlxuICAgICAgICAgICBEbyB5b3Ugd2FudCB0byBwcm9jZWVkP2BcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHRoaXMubW9kYWwuY29uZmlybShcbiAgICAgICAgICBnZXR0ZXh0KCdEZWxldGUgZGFzaGJvYXJkJyksXG4gICAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQobXNnLCB7XG4gICAgICAgICAgICBkYXNoYm9hcmROYW1lOiBkYXNoYm9hcmQuYzh5X0Rhc2hib2FyZC5uYW1lLFxuICAgICAgICAgICAgZGV2aWNlVHlwZTogZGFzaGJvYXJkLmM4eV9EYXNoYm9hcmQuZGV2aWNlVHlwZVZhbHVlXG4gICAgICAgICAgfSksXG4gICAgICAgICAgU3RhdHVzLkRBTkdFUixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBvazogZ2V0dGV4dCgnRGVsZXRlJyksXG4gICAgICAgICAgICBjYW5jZWw6IGdldHRleHQoJ0NhbmNlbCcpXG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgYXdhaXQgdGhpcy5pbnZlbnRvcnkuZGVsZXRlKGRhc2hib2FyZCk7XG4gICAgICBjb25zdCB0YWJUb1JlbW92ZSA9IEFycmF5LmZyb20odGhpcy50YWJzLnN0YXRlKS5maW5kKHRhYiA9PlxuICAgICAgICB0YWIucGF0aC5lbmRzV2l0aChgJHt0aGlzLkRBU0hCT0FSRF9ST1VURV9QQVRIfS8ke2Rhc2hib2FyZC5pZH1gKVxuICAgICAgKTtcbiAgICAgIHRoaXMudGFicy5yZW1vdmUodGFiVG9SZW1vdmUpO1xuICAgICAgdGhpcy50YWJzLnJlZnJlc2goKTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgLy8gaW50ZW5kZWQgZW1wdHlcbiAgICB9XG4gIH1cblxuICBhY3RpdmF0ZURhc2hib2FyZHMoXG4gICAgcm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsXG4gICAgdHlwZXM6IENvbnRleHREYXNoYm9hcmRUeXBlW11cbiAgKTogT2JzZXJ2YWJsZTxib29sZWFuIHwgVGFiW10+IHtcbiAgICBjb25zdCB7IGRhc2hib2FyZElkIH0gPSByb3V0ZS5wYXJhbXM7XG4gICAgaWYgKGRhc2hib2FyZElkKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXREYXNoYm9hcmQkKGRhc2hib2FyZElkLCB0eXBlcywgcm91dGUucGFyZW50LmRhdGEuY29udGV4dERhdGEpLnBpcGUoXG4gICAgICAgIHRhcChkYXNoYm9hcmQgPT4ge1xuICAgICAgICAgIHJvdXRlLmRhdGEgPSB7IGRhc2hib2FyZCB9O1xuICAgICAgICB9KSxcbiAgICAgICAgbWFwKCgpID0+IHRydWUpLFxuICAgICAgICBjYXRjaEVycm9yKCgpID0+IHtcbiAgICAgICAgICByZXR1cm4gb2YoZmFsc2UpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5nZXRUYWJzJChyb3V0ZS5kYXRhLmNvbnRleHREYXRhLCB0eXBlcyk7XG4gIH1cblxuICBnZXROYW1lZERhc2hib2FyZE9yQ3JlYXRlKG5hbWU6IHN0cmluZywgZGVmYXVsdFdpZGdldHM6IFdpZGdldFtdLCBjb250ZXh0PzogQ29udGV4dERhdGEpIHtcbiAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMubWFwV2lkZ2V0cyhkZWZhdWx0V2lkZ2V0cyk7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RGFzaGJvYXJkJChuYW1lLCBbQ29udGV4dERhc2hib2FyZFR5cGUuTmFtZWRdKS5waXBlKFxuICAgICAgdGhyb3dJZkVtcHR5KCksXG4gICAgICBjYXRjaEVycm9yKCgpID0+XG4gICAgICAgIGZyb20oXG4gICAgICAgICAgdGhpcy5jcmVhdGUoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNoaWxkcmVuLFxuICAgICAgICAgICAgICB3aWRnZXRDbGFzc2VzOiB7ICdkYXNoYm9hcmQtdGhlbWUtbGlnaHQnOiB0cnVlLCAncGFuZWwtdGl0bGUtcmVndWxhcic6IHRydWUgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgICBuYW1lXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIHJlZnJlc2hUYWJzKGRhc2hib2FyZE1POiBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdCkge1xuICAgIGlmICghdGhpcy5pc05hbWVkKGRhc2hib2FyZE1PKSkge1xuICAgICAgY29uc3QgdGFiVG9VcGRhdGUgPSBBcnJheS5mcm9tKHRoaXMudGFicy5zdGF0ZSkuZmluZCh0YWIgPT5cbiAgICAgICAgdGFiLnBhdGguZW5kc1dpdGgoYCR7dGhpcy5EQVNIQk9BUkRfUk9VVEVfUEFUSH0vJHtkYXNoYm9hcmRNTy5pZH1gKVxuICAgICAgKTtcblxuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMuZGV0YWlsKGRhc2hib2FyZE1PKTtcbiAgICAgIGlmICh0YWJUb1VwZGF0ZSkge1xuICAgICAgICBjb25zdCB7IGljb24sIHByaW9yaXR5LCBuYW1lIH0gPSBkYXRhLmM4eV9EYXNoYm9hcmQ7XG4gICAgICAgIHRhYlRvVXBkYXRlLmljb24gPSBpY29uO1xuICAgICAgICB0YWJUb1VwZGF0ZS5wcmlvcml0eSA9IHByaW9yaXR5O1xuICAgICAgICB0YWJUb1VwZGF0ZS5sYWJlbCA9IG5hbWU7XG4gICAgICB9XG4gICAgICB0aGlzLnRhYnMucmVmcmVzaCgpO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZU5hdmlnYXRvckl0ZW0obW86IElNYW5hZ2VkT2JqZWN0KSB7XG4gICAgdGhpcy5uYXZpZ2F0b3Iuc3RhdGUuZm9yRWFjaChub2RlID0+IHtcbiAgICAgIGlmIChub2RlLnBhdGggPT09IGByZXBvcnRzLyR7bW8uaWR9YCkge1xuICAgICAgICB0aGlzLm5hdmlnYXRvci5yZW1vdmUobm9kZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKG1vLmM4eV9Jc05hdmlnYXRvck5vZGUpIHtcbiAgICAgIGNvbnN0IG5vZGVUb0FkZCA9IG5ldyBOYXZpZ2F0b3JOb2RlKHtcbiAgICAgICAgbGFiZWw6IG1vLm5hbWUsXG4gICAgICAgIHBhdGg6IGByZXBvcnRzLyR7bW8uaWR9YCxcbiAgICAgICAgaWNvbjogbW8uaWNvbixcbiAgICAgICAgcHJpb3JpdHk6IG1vLnByaW9yaXR5XG4gICAgICB9KTtcbiAgICAgIHRoaXMubmF2aWdhdG9yLmFkZChub2RlVG9BZGQpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG5hdmlnYXRlVG9EYXNoYm9hcmQoZGFzaGJvYXJkTU86IENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0KSB7XG4gICAgaWYgKC9kYXNoYm9hcmQvLnRlc3QodGhpcy5yb3V0ZXIudXJsKSkge1xuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycuLicsIGRhc2hib2FyZE1PLmlkXSwge1xuICAgICAgICByZWxhdGl2ZVRvOiBnZXRBY3RpdmF0ZWRSb3V0ZSh0aGlzLnJvdXRlcilcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoL15cXC8oZGV2aWNlfGdyb3VwKVxcL1swLTldKyQvLnRlc3QodGhpcy5yb3V0ZXIudXJsKSkge1xuICAgICAgLy8gaW4gY2FzZSB0aGUgYWRkIGRhc2hib2FyZCBidXR0b24gaXMgdGhlIG9ubHkgdGFiIG9uIHRoYXQgcm91dGVcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLicsIHRoaXMuREFTSEJPQVJEX1JPVVRFX1BBVEgsIGRhc2hib2FyZE1PLmlkXSwge1xuICAgICAgICByZWxhdGl2ZVRvOiBnZXRBY3RpdmF0ZWRSb3V0ZSh0aGlzLnJvdXRlcilcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy4uJywgdGhpcy5EQVNIQk9BUkRfUk9VVEVfUEFUSCwgZGFzaGJvYXJkTU8uaWRdLCB7XG4gICAgICAgIHJlbGF0aXZlVG86IGdldEFjdGl2YXRlZFJvdXRlKHRoaXMucm91dGVyKVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgY2FuRWRpdERhc2hib2FyZChtbykge1xuICAgIHJldHVybiB0aGlzLnBlcm1pc3Npb25zLmNhbkVkaXQoXG4gICAgICBbUGVybWlzc2lvbnMuUk9MRV9JTlZFTlRPUllfQURNSU4sIFBlcm1pc3Npb25zLlJPTEVfTUFOQUdFRF9PQkpFQ1RfQURNSU5dLFxuICAgICAgbW9cbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB1c2VyIGhhcyBwZXJtaXNzaW9ucyB0byBjb3B5IGRhc2hib2FyZCBhY2NvcmRpbmcgdG8gaGlzIHJvbGVzLlxuICAgKlxuICAgKiBAcmV0dXJucyBUcnVlIGlmIHVzZXIgaGFzIHBlcm1pc3Npb25zIHRvIGNvcHkgZGFzaGJvYXJkLCBmYWxzZSBpZiBoZSBjYW5ub3QuXG4gICAqL1xuICBoYXNQZXJtaXNzaW9uc1RvQ29weURhc2hib2FyZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wZXJtaXNzaW9ucy5oYXNBbnlSb2xlKFtcbiAgICAgIFBlcm1pc3Npb25zLlJPTEVfSU5WRU5UT1JZX0FETUlOLFxuICAgICAgUGVybWlzc2lvbnMuUk9MRV9JTlZFTlRPUllfQ1JFQVRFLFxuICAgICAgUGVybWlzc2lvbnMuUk9MRV9NQU5BR0VEX09CSkVDVF9BRE1JTixcbiAgICAgIFBlcm1pc3Npb25zLlJPTEVfTUFOQUdFRF9PQkpFQ1RfQ1JFQVRFXG4gICAgXSk7XG4gIH1cblxuICBpc05hbWVkKGRhc2hib2FyZDogUGFydGlhbDxDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdD4pIHtcbiAgICByZXR1cm4gc29tZShrZXlzKGRhc2hib2FyZCksIHByb3AgPT5cbiAgICAgIG5ldyBSZWdFeHAoXG4gICAgICAgIGBeJHt0aGlzLkZSQUdNRU5UX05BTUV9JHt0aGlzLklOREVYX1NQTElUfSR7Q29udGV4dERhc2hib2FyZFR5cGUuTmFtZWR9JHt0aGlzLklOREVYX1NQTElUfWBcbiAgICAgICkudGVzdChwcm9wKVxuICAgICk7XG4gIH1cblxuICBpc1JlcG9ydChkYXNoYm9hcmQ6IFBhcnRpYWw8Q29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3Q+KSB7XG4gICAgcmV0dXJuIHNvbWUoa2V5cyhkYXNoYm9hcmQpLCBwcm9wID0+XG4gICAgICBuZXcgUmVnRXhwKFxuICAgICAgICBgXiR7dGhpcy5GUkFHTUVOVF9OQU1FfSR7dGhpcy5JTkRFWF9TUExJVH0ke0NvbnRleHREYXNoYm9hcmRUeXBlLk5hbWVkfSR7dGhpcy5JTkRFWF9TUExJVH0ke3RoaXMuUkVQT1JUX1BBUlRJQUxfTkFNRX1gXG4gICAgICApLnRlc3QocHJvcClcbiAgICApO1xuICB9XG5cbiAgaXNEZXZpY2VUeXBlKGRhc2hib2FyZDogUGFydGlhbDxDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdD4pIHtcbiAgICByZXR1cm4gc29tZShrZXlzKGRhc2hib2FyZCksIHByb3AgPT5cbiAgICAgIG5ldyBSZWdFeHAoXG4gICAgICAgIGBeJHt0aGlzLkZSQUdNRU5UX05BTUV9JHt0aGlzLklOREVYX1NQTElUfSR7Q29udGV4dERhc2hib2FyZFR5cGUuRGV2aWNlVHlwZX0ke3RoaXMuSU5ERVhfU1BMSVR9YFxuICAgICAgKS50ZXN0KHByb3ApXG4gICAgKTtcbiAgfVxuXG4gIGlzRGV2aWNlRGFzaGJvYXJkKGRhc2hib2FyZDogUGFydGlhbDxDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdD4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gc29tZShrZXlzKGRhc2hib2FyZCksIHByb3AgPT5cbiAgICAgIG5ldyBSZWdFeHAoXG4gICAgICAgIGBeJHt0aGlzLkZSQUdNRU5UX05BTUV9JHt0aGlzLklOREVYX1NQTElUfSR7Q29udGV4dERhc2hib2FyZFR5cGUuRGV2aWNlfSR7dGhpcy5JTkRFWF9TUExJVH1gXG4gICAgICApLnRlc3QocHJvcClcbiAgICApO1xuICB9XG5cbiAgaXNHcm91cERhc2hib2FyZChkYXNoYm9hcmQ6IFBhcnRpYWw8Q29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3Q+KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHNvbWUoa2V5cyhkYXNoYm9hcmQpLCBwcm9wID0+XG4gICAgICBuZXcgUmVnRXhwKFxuICAgICAgICBgXiR7dGhpcy5GUkFHTUVOVF9OQU1FfSR7dGhpcy5JTkRFWF9TUExJVH0ke0NvbnRleHREYXNoYm9hcmRUeXBlLkdyb3VwfSR7dGhpcy5JTkRFWF9TUExJVH1gXG4gICAgICApLnRlc3QocHJvcClcbiAgICApO1xuICB9XG5cbiAgZ2V0RmlsdGVyZWREYXNoYm9hcmRTdHlsZXMoc3R5bGVMaXN0OiBzdHJpbmdbXSkge1xuICAgIHJldHVybiBzdHlsZUxpc3QuZmlsdGVyKGMgPT5cbiAgICAgIFNUWUxJTkdfQ0xBU1NfUFJFRklYRVMuc29tZShjbGFzc1ByZWZpeCA9PiBjLnN0YXJ0c1dpdGgoY2xhc3NQcmVmaXgpKVxuICAgICk7XG4gIH1cblxuICBnZXRTdHlsaW5nKHN0eWxlTGlzdCwgc3R5bGVOYW1lLCBkZWZhdWx0VmFsdWUpIHtcbiAgICBjb25zdCBzdHlsaW5nID0gc3R5bGVMaXN0LmZpbmQoXG4gICAgICBzdHlsZSA9PiBzdHlsZSAmJiBuZXcgUmVnRXhwKGAtJHtzdHlsZU5hbWV9JGAsICdpJykudGVzdChzdHlsZS5jbGFzcylcbiAgICApO1xuICAgIHJldHVybiBzdHlsaW5nID8gc3R5bGluZy5jbGFzcyA6IGRlZmF1bHRWYWx1ZTtcbiAgfVxuXG4gIG1hcFdpZGdldHMod2lkZ2V0czogV2lkZ2V0W10pIHtcbiAgICByZXR1cm4ga2V5QnkoXG4gICAgICB3aWRnZXRzLm1hcCh3aWRnZXQgPT4ge1xuICAgICAgICB3aWRnZXQuaWQgPSBTdHJpbmcoTWF0aC5yYW5kb20oKSkuc3Vic3RyKDIpO1xuICAgICAgICByZXR1cm4gd2lkZ2V0O1xuICAgICAgfSksXG4gICAgICAnaWQnXG4gICAgKTtcbiAgfVxuXG4gIGdldERhc2hib2FyZCQoZGFzaGJvYXJkSWRPck5hbWUsIGRhc2hib2FyZFR5cGU6IENvbnRleHREYXNoYm9hcmRUeXBlW10sIG1vPzogSU1hbmFnZWRPYmplY3QpIHtcbiAgICBjb25zdCBjYWNoZSA9IHRoaXMuY2FjaGUuZ2V0KGRhc2hib2FyZElkT3JOYW1lKTtcblxuICAgIGNvbnN0IGRhc2hib2FyZHMgPSBtb1xuICAgICAgPyB0aGlzLmdldENvbnRleHREYXNoYm9hcmRzKG1vLCBkYXNoYm9hcmRUeXBlKVxuICAgICAgOiBbdGhpcy5nZXROYW1lZERhc2hib2FyZChkYXNoYm9hcmRJZE9yTmFtZSldO1xuXG4gICAgY29uc3QgY2FjaGVSZWZyZXNoID0gdGhpcy5nZXRDb250ZXh0RGFzaGJvYXJkcyQoZGFzaGJvYXJkcykucGlwZShcbiAgICAgIHRhcChkYXNoYm9hcmQgPT4gdGhpcy5jYWNoZURhc2hib2FyZChkYXNoYm9hcmQpKSxcbiAgICAgIGZpbHRlcihcbiAgICAgICAgZGFzaGJvYXJkID0+XG4gICAgICAgICAgZGFzaGJvYXJkLmlkID09PSBkYXNoYm9hcmRJZE9yTmFtZSB8fFxuICAgICAgICAgIGhhcyhcbiAgICAgICAgICAgIGRhc2hib2FyZCxcbiAgICAgICAgICAgIGAke3RoaXMuRlJBR01FTlRfTkFNRX0ke3RoaXMuSU5ERVhfU1BMSVR9JHtDb250ZXh0RGFzaGJvYXJkVHlwZS5OYW1lZH0ke3RoaXMuSU5ERVhfU1BMSVR9JHtkYXNoYm9hcmRJZE9yTmFtZX1gXG4gICAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gICAgcmV0dXJuIGNhY2hlID8gb2YoY2FjaGUpIDogY2FjaGVSZWZyZXNoO1xuICB9XG5cbiAgYXN5bmMgcGFzdGVEYXNoYm9hcmQobmV3Q29udGV4dDogRGFzaGJvYXJkQ29udGV4dCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmNvcHlDbGlwYm9hcmQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICh0aGlzLmNhblBhc3RlRGFzaGJvYXJkKHRoaXMuY29weUNsaXBib2FyZCwgbmV3Q29udGV4dC5jb250ZXh0KSkge1xuICAgICAgICAgIGNvbnN0IGRhc2hib2FyZFRvUGFzdGUgPSB0aGlzLmNyZWF0ZUNvbnRleHREYXNoYm9hcmRDb3B5KFxuICAgICAgICAgICAgdGhpcy5jb3B5Q2xpcGJvYXJkLmRhc2hib2FyZCxcbiAgICAgICAgICAgIG5ld0NvbnRleHQuY29udGV4dERhdGEsXG4gICAgICAgICAgICB0aGlzLmNvcHlDbGlwYm9hcmQuY29udGV4dC5jb250ZXh0RGF0YVxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgZGFzaGJvYXJkID0gYXdhaXQgdGhpcy5jcmVhdGUodGhpcy5jbGVhbihkYXNoYm9hcmRUb1Bhc3RlKSwgbmV3Q29udGV4dCk7XG5cbiAgICAgICAgICAvLyBsaW5raW5nIGNoaWxkQWRkaXRpb25zIGZvciBlLmcuIHRvIGdyYW50IGFjY2VzcyB0byB0aGUgaW1hZ2VzIHVwbG9hZGVkIGJ5IHRoZSBpbWFnZSB3aWRnZXQgZm9yIHVzZXJzIHdpdGggb25seSBpbnZlbnRvcnkgcm9sZXMuXG4gICAgICAgICAgY29uc3QgeyBkYXRhOiBjaGlsZEFkZGl0aW9ucyB9ID0gYXdhaXQgdGhpcy5pbnZlbnRvcnkuY2hpbGRBZGRpdGlvbnNMaXN0KFxuICAgICAgICAgICAgdGhpcy5jb3B5Q2xpcGJvYXJkLmRhc2hib2FyZElkLFxuICAgICAgICAgICAgeyBwYWdlU2l6ZTogMjAwMCB9XG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoY2hpbGRBZGRpdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmludmVudG9yeS5jaGlsZEFkZGl0aW9uc0J1bGtBZGQoY2hpbGRBZGRpdGlvbnMsIGRhc2hib2FyZC5pZCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5jb3B5Q2xpcGJvYXJkID0gdW5kZWZpbmVkO1xuICAgICAgICAgIHRoaXMubmF2aWdhdGVUb0Rhc2hib2FyZChkYXNoYm9hcmQpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgdGhpcy5hbGVydC53YXJuaW5nKGdldHRleHQoJ0luc3VmZmljaWVudCBwZXJtaXNzaW9ucyBmb3IgdGhpcyBhY3Rpb24uJykpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldENvbnRleHRGb3JHUyhtbzogSU1hbmFnZWRPYmplY3QpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBpZiAodGhpcy5ncm91cFNlcnZpY2UuaXNEZXZpY2UobW8pKSB7XG4gICAgICByZXR1cm4gUFJPRFVDVF9FWFBFUklFTkNFLkRBU0hCT0FSRC5DT05URVhULkRFVklDRTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuZ3JvdXBTZXJ2aWNlLmlzQXNzZXQobW8pKSB7XG4gICAgICByZXR1cm4gUFJPRFVDVF9FWFBFUklFTkNFLkRBU0hCT0FSRC5DT05URVhULkFTU0VUO1xuICAgIH0gZWxzZSBpZiAodGhpcy5ncm91cFNlcnZpY2UuaXNHcm91cChtbykpIHtcbiAgICAgIHJldHVybiBQUk9EVUNUX0VYUEVSSUVOQ0UuREFTSEJPQVJELkNPTlRFWFQuR1JPVVA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2VyaWFsaXplV2lkZ2V0Q29uZmlncyhkYXNoYm9hcmQ6IENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBjbG9uZURlZXAoZGFzaGJvYXJkLmM4eV9EYXNoYm9hcmQuY2hpbGRyZW4pO1xuICAgIGlmICghY2hpbGRyZW4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY29uZmlncyA9IE9iamVjdC52YWx1ZXMoY2hpbGRyZW4pO1xuICAgIGNvbnN0IGRldGFpbHMgPSBjb25maWdzLm1hcCgoeyBjb21wb25lbnRJZCwgY29uZmlnIH0pID0+ICh7IGNvbXBvbmVudElkLCBjb25maWcgfSkpO1xuICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCB0aGlzLmR5bmFtaWNDb21wb25lbnQuc2VyaWFsaXplQ29uZmlncyhkZXRhaWxzKTtcbiAgICByZXN1bHRzLmZvckVhY2goKHJlc3VsdCwgaW5kZXgpID0+IHtcbiAgICAgIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgIHNldChkZXRhaWxzW2luZGV4XS5jb25maWcsIGtleSwgdmFsdWUpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgZGFzaGJvYXJkLmM4eV9EYXNoYm9hcmQuY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgfVxuXG4gIHByaXZhdGUgY2FuUGFzdGVEYXNoYm9hcmQoXG4gICAgY29weUNsaXBib2FyZDogRGFzaGJvYXJkQ29weUNsaXBib2FyZCxcbiAgICBjdXJyZW50Q29udGV4dDogVmlld0NvbnRleHRcbiAgKTogYm9vbGVhbiB7XG4gICAgY29uc3QgY2xpcGJvYXJkVmlld0NvbnRleHQgPSBjb3B5Q2xpcGJvYXJkLmNvbnRleHQuY29udGV4dDtcblxuICAgIGlmIChjdXJyZW50Q29udGV4dCAhPT0gY2xpcGJvYXJkVmlld0NvbnRleHQpIHtcbiAgICAgIGlmIChjbGlwYm9hcmRWaWV3Q29udGV4dCA9PT0gVmlld0NvbnRleHQuRGV2aWNlKSB7XG4gICAgICAgIHRoaXMuYWxlcnQud2FybmluZyhnZXR0ZXh0KCdEZXZpY2UgZGFzaGJvYXJkcyBjYW4gb25seSBiZSBjb3BpZWQgaW50byBhIGRldmljZS4nKSk7XG4gICAgICB9IGVsc2UgaWYgKGNsaXBib2FyZFZpZXdDb250ZXh0ID09PSBWaWV3Q29udGV4dC5Hcm91cCkge1xuICAgICAgICB0aGlzLmFsZXJ0Lndhcm5pbmcoZ2V0dGV4dCgnR3JvdXAgZGFzaGJvYXJkcyBjYW4gb25seSBiZSBjb3BpZWQgaW50byBhIGdyb3VwLicpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUNvbnRleHREYXNoYm9hcmRDb3B5KFxuICAgIGRhc2g6IENvbnRleHREYXNoYm9hcmQsXG4gICAgbmV3Q29udGV4dDogUGFydGlhbDxJTWFuYWdlZE9iamVjdD4sXG4gICAgb2xkQ29udGV4dDogUGFydGlhbDxJTWFuYWdlZE9iamVjdD5cbiAgKTogQ29udGV4dERhc2hib2FyZCB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSByZWR1Y2UoXG4gICAgICBkYXNoLmNoaWxkcmVuLFxuICAgICAgKF9jaGlsZHJlbiwgY2hpbGQpID0+IHtcbiAgICAgICAgY29uc3QgeyBpZCB9ID0gY2hpbGQ7XG4gICAgICAgIGNvbnN0IGNmZyA9IGNoaWxkLmNvbmZpZztcbiAgICAgICAgY29uc3QgcHJvcGVydGllc1RvQ29weSA9IHtcbiAgICAgICAgICBkZXZpY2U6IGRldmljZSA9PiB0aGlzLnJlcGxhY2VDb250ZXh0SW5PYmooZGV2aWNlLCBuZXdDb250ZXh0LCBvbGRDb250ZXh0KSxcbiAgICAgICAgICBkYXRhcG9pbnRzOiBkYXRhUG9pbnRzID0+XG4gICAgICAgICAgICB0aGlzLnJlcGxhY2VDb250ZXh0SW5EYXRhUG9pbnRzKGRhdGFQb2ludHMsIG5ld0NvbnRleHQsIG9sZENvbnRleHQpLFxuICAgICAgICAgIGRhdGFQb2ludHM6IGRhdGFQb2ludHMgPT5cbiAgICAgICAgICAgIHRoaXMucmVwbGFjZUNvbnRleHRJbkRhdGFQb2ludHMoZGF0YVBvaW50cywgbmV3Q29udGV4dCwgb2xkQ29udGV4dCksXG4gICAgICAgICAgZGF0YXBvaW50c0dhdWdlOiBkYXRhUG9pbnRzID0+XG4gICAgICAgICAgICB0aGlzLnJlcGxhY2VDb250ZXh0SW5EYXRhUG9pbnRzKGRhdGFQb2ludHMsIG5ld0NvbnRleHQsIG9sZENvbnRleHQpLFxuICAgICAgICAgIGRhdGFwb2ludHNMYWJlbHM6IGRhdGFQb2ludHMgPT5cbiAgICAgICAgICAgIHRoaXMucmVwbGFjZUNvbnRleHRJbkRhdGFQb2ludHMoZGF0YVBvaW50cywgbmV3Q29udGV4dCwgb2xkQ29udGV4dClcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoY2ZnKSB7XG4gICAgICAgICAgdGhpcy5jb3B5UHJvcGVydGllcyhjZmcsIHByb3BlcnRpZXNUb0NvcHkpO1xuICAgICAgICAgIGlmIChjZmcub3B0aW9ucykge1xuICAgICAgICAgICAgdGhpcy5jb3B5UHJvcGVydGllcyhjZmcub3B0aW9ucywgcHJvcGVydGllc1RvQ29weSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgX2NoaWxkcmVuW2lkXSA9IGNsb25lRGVlcChjaGlsZCk7XG4gICAgICAgIHJldHVybiBfY2hpbGRyZW47XG4gICAgICB9LFxuICAgICAge31cbiAgICApO1xuXG4gICAgZGFzaC5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICAgIHJldHVybiBkYXNoO1xuICB9XG5cbiAgcHJpdmF0ZSBjb3B5UHJvcGVydGllcyhvYmosIHByb3BlcnRpZXNUb0NvcHkpIHtcbiAgICBmb3JFYWNoKHByb3BlcnRpZXNUb0NvcHksIChjb3B5Rm4sIHByb3BlcnR5KSA9PiB7XG4gICAgICBpZiAob2JqW3Byb3BlcnR5XSkge1xuICAgICAgICBvYmpbcHJvcGVydHldID0gY29weUZuKG9ialtwcm9wZXJ0eV0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZXBsYWNlQ29udGV4dEluRGF0YVBvaW50cyhcbiAgICBkYXRhUG9pbnRzLFxuICAgIG5ld0NvbnRleHQ6IFBhcnRpYWw8SU1hbmFnZWRPYmplY3Q+LFxuICAgIG9sZENvbnRleHQ6IFBhcnRpYWw8SU1hbmFnZWRPYmplY3Q+XG4gICkge1xuICAgIGRhdGFQb2ludHMuZm9yRWFjaChkcCA9PiB7XG4gICAgICBkcC5fX3RhcmdldCA9IHRoaXMucmVwbGFjZUNvbnRleHRJbk9iaihkcC5fX3RhcmdldCwgbmV3Q29udGV4dCwgb2xkQ29udGV4dCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGRhdGFQb2ludHM7XG4gIH1cblxuICBwcml2YXRlIHJlcGxhY2VDb250ZXh0SW5PYmooXG4gICAgb2JqOiBQYXJ0aWFsPElNYW5hZ2VkT2JqZWN0PixcbiAgICBuZXdDb250ZXh0OiBQYXJ0aWFsPElNYW5hZ2VkT2JqZWN0PixcbiAgICBvbGRDb250ZXh0OiBQYXJ0aWFsPElNYW5hZ2VkT2JqZWN0PlxuICApIHtcbiAgICBpZiAob2JqICYmIG9iai5pZCA9PT0gb2xkQ29udGV4dC5pZCkge1xuICAgICAgT2JqZWN0LmFzc2lnbihvYmosIHBpY2sobmV3Q29udGV4dCwgWydpZCcsICduYW1lJ10pKTtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VGFicyQobW86IENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0LCBkYXNoYm9hcmRUeXBlOiBDb250ZXh0RGFzaGJvYXJkVHlwZVtdKSB7XG4gICAgY29uc3QgZGFzaGJvYXJkcyA9IHRoaXMuZ2V0Q29udGV4dERhc2hib2FyZHMobW8sIGRhc2hib2FyZFR5cGUpO1xuXG4gICAgcmV0dXJuIHRoaXMuZ2V0Q29udGV4dERhc2hib2FyZHMkKGRhc2hib2FyZHMpLnBpcGUoXG4gICAgICBtZXJnZU1hcChkYXNoYm9hcmQgPT4gdGhpcy52ZXJpZnlEYXNoYm9hcmRBdmFpbGFiaWxpdHkkKGRhc2hib2FyZCkpLFxuICAgICAgbWVyZ2VNYXAoKFtkYXNoYm9hcmRdKSA9PiB0aGlzLnJlbW92ZURhc2hib2FyZE1vUHJvcGVydHkoZGFzaGJvYXJkKSksXG4gICAgICB0YXAoZGFzaGJvYXJkID0+IHRoaXMuY2FjaGVEYXNoYm9hcmQoZGFzaGJvYXJkKSksXG4gICAgICBtYXAoZGFzaGJvYXJkID0+IHRoaXMuY3JlYXRlRGFzaGJvYXJkVGFiKGRhc2hib2FyZCkpLFxuICAgICAgdG9BcnJheSgpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgdmVyaWZ5RGFzaGJvYXJkQXZhaWxhYmlsaXR5JChkYXNoYm9hcmQ6IENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0KSB7XG4gICAgY29uc3QgZ2xvYmFsUm9sZXNJZHMgPSBkYXNoYm9hcmQ/LmM4eV9EYXNoYm9hcmQ/Lmdsb2JhbFJvbGVzSWRzO1xuICAgIGNvbnN0IGNhbkVkaXQgPSBmcm9tKFxuICAgICAgdGhpcy5wZXJtaXNzaW9ucy5jYW5FZGl0KHRoaXMuSU5WRU5UT1JZX1JPTEVTLCBkYXNoYm9hcmQsIHsgc2tpcFJlcXVlc3RDaGVjazogdHJ1ZSB9KVxuICAgICk7XG4gICAgY29uc3QgaGFzQW55R2xvYmFsUm9sZSA9XG4gICAgICAhZ2xvYmFsUm9sZXNJZHMgfHwgZ2xvYmFsUm9sZXNJZHMgPT09IEFMTF9HTE9CQUxfUk9MRVNfU0VMRUNURURcbiAgICAgICAgPyBvZih0cnVlKVxuICAgICAgICA6IG9mKHRoaXMucGVybWlzc2lvbnMuaGFzQW55R2xvYmFsUm9sZShnbG9iYWxSb2xlc0lkcykpO1xuXG4gICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoW29mKGRhc2hib2FyZCksIGNhbkVkaXQsIGhhc0FueUdsb2JhbFJvbGVdKS5waXBlKFxuICAgICAgZmlsdGVyKChbLCBjYW5FZGl0LCBoYXNBbnlHbG9iYWxSb2xlXSkgPT4gY2FuRWRpdCB8fCBoYXNBbnlHbG9iYWxSb2xlKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldENvbnRleHREYXNoYm9hcmRzJChyZXF1ZXN0czogQXJyYXk8UHJvbWlzZTxJUmVzdWx0TGlzdDxJTWFuYWdlZE9iamVjdD4+Pikge1xuICAgIHJldHVybiBmcm9tKHJlcXVlc3RzKS5waXBlKFxuICAgICAgbWVyZ2VBbGwoKSxcbiAgICAgIG1lcmdlTWFwKHJlc3BvbnNlID0+IHJlc3BvbnNlLmRhdGEgYXMgQ29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3RbXSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFucyBhbHJlYWR5IGNvcnJ1cHRlZCBkYXNoYm9hcmRzIGZyb20gZGFzaGJvYXJkTW8gcHJvcGVydHkuXG4gICAqIEFkZGVkIHRvIGZpeCBkYXNoYm9hcmRzIG9uIHRoZSBjbG91ZCBpbnN0YW5jZSAoZXUtbGF0ZXN0KS5cbiAgICogQGRlcHJlY2F0ZWQgVGhpcyBpcyBnb2luZyB0byBiZSByZW1vdmVkIGFmdGVyIDEwMDcuNy4wLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyByZW1vdmVEYXNoYm9hcmRNb1Byb3BlcnR5KFxuICAgIGRhc2hib2FyZDogQ29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3RcbiAgKTogUHJvbWlzZTxDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdD4ge1xuICAgIGNvbnN0IGRhc2hib2FyZENvcHkgPSBjbG9uZURlZXAoZGFzaGJvYXJkKTtcbiAgICBjb25zdCBjaGlsZHJlbiA9IGdldChkYXNoYm9hcmRDb3B5LCAnYzh5X0Rhc2hib2FyZC5jaGlsZHJlbicpO1xuICAgIGxldCB1cGRhdGVEYXNoYm9hcmQgPSBmYWxzZTtcblxuICAgIGZvckVhY2goY2hpbGRyZW4sIGNoaWxkID0+IHtcbiAgICAgIGlmIChnZXQoY2hpbGQsICdjb21wb25lbnRUcmFuc2Zvcm1Db25maWdXaXRoQ29udGV4dCcpKSB7XG4gICAgICAgIGRlbGV0ZSBjaGlsZC5jb21wb25lbnRUcmFuc2Zvcm1Db25maWdXaXRoQ29udGV4dDtcbiAgICAgICAgdXBkYXRlRGFzaGJvYXJkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChnZXQoY2hpbGQsICdjb25maWcuZGFzaGJvYXJkTW8nKSkge1xuICAgICAgICBkZWxldGUgY2hpbGQuY29uZmlnLmRhc2hib2FyZE1vO1xuICAgICAgICB1cGRhdGVEYXNoYm9hcmQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKHVwZGF0ZURhc2hib2FyZCkge1xuICAgICAgYXdhaXQgdGhpcy51cGRhdGUoZGFzaGJvYXJkQ29weSk7XG4gICAgfVxuICAgIHJldHVybiBkYXNoYm9hcmRDb3B5O1xuICB9XG5cbiAgcHJpdmF0ZSBjYWNoZURhc2hib2FyZChkYXNoYm9hcmQ6IENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0KSB7XG4gICAgdGhpcy5jYWNoZS5zZXQoZGFzaGJvYXJkLmlkLCBkYXNoYm9hcmQpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVEYXNoYm9hcmRUYWIoZGFzaGJvYXJkOiBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdCkge1xuICAgIGNvbnN0IHsgYzh5X0Rhc2hib2FyZDogX2Rhc2hib2FyZCwgaWQgfSA9IGRhc2hib2FyZDtcbiAgICByZXR1cm4ge1xuICAgICAgaWNvbjogX2Rhc2hib2FyZC5pY29uLFxuICAgICAgcGF0aDogYCR7dGhpcy5EQVNIQk9BUkRfUk9VVEVfUEFUSH0vJHtpZH1gLFxuICAgICAgbGFiZWw6IF9kYXNoYm9hcmQubmFtZSxcbiAgICAgIHByaW9yaXR5OiBfZGFzaGJvYXJkLnByaW9yaXR5LFxuICAgICAgaGlkZTogdGhpcy5pc1JlcG9ydChkYXNoYm9hcmQpXG4gICAgfSBhcyBUYWI7XG4gIH1cblxuICBwcml2YXRlIGNsZWFuKGRhc2hib2FyZCkge1xuICAgIGNvbnN0IGpzb25TdHJpbmcgPSBKU09OLnN0cmluZ2lmeShkYXNoYm9hcmQsIChrZXksIHZhbHVlKSA9PiB7XG4gICAgICBpZiAoa2V5ID09PSAnJCRoYXNoS2V5JyB8fCBrZXkgPT09ICdrbGFzc2VzJykge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfSk7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UoanNvblN0cmluZyk7XG4gIH1cblxuICBwcml2YXRlIGdldE5hbWVkRGFzaGJvYXJkKG5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmludmVudG9yeS5saXN0KHtcbiAgICAgIGZyYWdtZW50VHlwZTogYCR7dGhpcy5GUkFHTUVOVF9OQU1FfSR7dGhpcy5JTkRFWF9TUExJVH0ke0NvbnRleHREYXNoYm9hcmRUeXBlLk5hbWVkfSR7dGhpcy5JTkRFWF9TUExJVH0ke25hbWV9YCxcbiAgICAgIHBhZ2VTaXplOiAxXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldENvbnRleHREYXNoYm9hcmRzKG1vOiBJTWFuYWdlZE9iamVjdCwgZGFzaGJvYXJkVHlwZTogQ29udGV4dERhc2hib2FyZFR5cGVbXSkge1xuICAgIHJldHVybiBkYXNoYm9hcmRUeXBlLm1hcCgodHlwZTogQ29udGV4dERhc2hib2FyZFR5cGUpID0+XG4gICAgICB0aGlzLmludmVudG9yeS5saXN0KHtcbiAgICAgICAgZnJhZ21lbnRUeXBlOiB0aGlzLmNyZWF0ZURhc2hib2FyZEZyYWdtZW50KG1vLCB0eXBlKSxcbiAgICAgICAgcGFnZVNpemU6IHRoaXMuREVGQVVMVF9QQUdFU0laRVxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVEYXNoYm9hcmRGcmFnbWVudChtbzogSU1hbmFnZWRPYmplY3QsIHR5cGU6IENvbnRleHREYXNoYm9hcmRUeXBlKSB7XG4gICAgbGV0IHZhbHVlO1xuICAgIGlmIChtby5jOHlfUmVwb3J0KSB7XG4gICAgICB2YWx1ZSA9IGAke3RoaXMuUkVQT1JUX1BBUlRJQUxfTkFNRX0ke21vLmlkfWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlID0gdHlwZSA9PT0gQ29udGV4dERhc2hib2FyZFR5cGUuRGV2aWNlVHlwZSA/IG1vLnR5cGUgOiBtby5pZDtcbiAgICB9XG4gICAgcmV0dXJuIGAke3RoaXMuRlJBR01FTlRfTkFNRX0ke3RoaXMuSU5ERVhfU1BMSVR9JHt0eXBlfSR7dGhpcy5JTkRFWF9TUExJVH0ke3ZhbHVlfWA7XG4gIH1cblxuICBwcml2YXRlIGdldERhc2hib2FyZFR5cGVGcm9tVmlld0NvbnRleHQoZGFzaGJvYXJkQ2ZnLCBjb250ZXh0KSB7XG4gICAgbGV0IGRhc2hib2FyZFR5cGU7XG4gICAgaWYgKGNvbnRleHQuY29udGV4dCA9PT0gVmlld0NvbnRleHQuRGV2aWNlKSB7XG4gICAgICBkYXNoYm9hcmRUeXBlID0gZGFzaGJvYXJkQ2ZnLmRldmljZVR5cGVcbiAgICAgICAgPyBDb250ZXh0RGFzaGJvYXJkVHlwZS5EZXZpY2VUeXBlXG4gICAgICAgIDogQ29udGV4dERhc2hib2FyZFR5cGUuRGV2aWNlO1xuICAgIH1cbiAgICBpZiAoY29udGV4dC5jb250ZXh0ID09PSBWaWV3Q29udGV4dC5Hcm91cCkge1xuICAgICAgZGFzaGJvYXJkVHlwZSA9IENvbnRleHREYXNoYm9hcmRUeXBlLkdyb3VwO1xuICAgIH1cbiAgICByZXR1cm4gZGFzaGJvYXJkVHlwZTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRnJhZ21lbnRLZXkoY29udGV4dERhc2hib2FyZFR5cGU6IENvbnRleHREYXNoYm9hcmRUeXBlLCB2YWx1ZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIFt0aGlzLkZSQUdNRU5UX05BTUUsIGNvbnRleHREYXNoYm9hcmRUeXBlLCB2YWx1ZV0uam9pbih0aGlzLklOREVYX1NQTElUKTtcbiAgfVxuXG4gIHByaXZhdGUgc2hvdWxkU2V0R2xvYmFsKGRhc2hib2FyZDogUGFydGlhbDxDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdD4sIGNvbnRleHQ/KSB7XG4gICAgaWYgKFxuICAgICAgKCFjb250ZXh0ICYmIHRoaXMuaXNOYW1lZChkYXNoYm9hcmQpICYmICF0aGlzLmlzUmVwb3J0KGRhc2hib2FyZCkpIHx8XG4gICAgICB0aGlzLmlzRGV2aWNlVHlwZShkYXNoYm9hcmQpXG4gICAgKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG59XG4iXX0=
@@ -154,7 +154,7 @@ export class DashboardChildComponent {
154
154
  setTimeout(() => this.setDynamicDimension());
155
155
  }
156
156
  if (this.useIntersection && 'IntersectionObserver' in window) {
157
- const intersectionObserver = new IntersectionObserver(event => (this.intersected = this.childInView(event[0], intersectionObserver)));
157
+ const intersectionObserver = new IntersectionObserver(events => (this.intersected = this.childInView(events, intersectionObserver)));
158
158
  intersectionObserver.observe(this.element.nativeElement);
159
159
  }
160
160
  else {
@@ -227,9 +227,10 @@ export class DashboardChildComponent {
227
227
  getOrder() {
228
228
  return `${Math.round((this.y + (this.x + 1) / 100) * 100)}`;
229
229
  }
230
- childInView(event, observer) {
231
- if (event.isIntersecting) {
232
- observer.unobserve(event.target);
230
+ childInView(events, observer) {
231
+ const intersectingEvent = events.find(event => event.isIntersecting);
232
+ if (intersectingEvent) {
233
+ observer.unobserve(intersectingEvent.target);
233
234
  return true;
234
235
  }
235
236
  return false;
@@ -271,4 +272,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImpor
271
272
  type: HostBinding,
272
273
  args: ['attr.style']
273
274
  }] } });
274
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFzaGJvYXJkLWNoaWxkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvZGFzaGJvYXJkL2Rhc2hib2FyZC1jaGlsZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9jb3JlL2Rhc2hib2FyZC9kYXNoYm9hcmQtY2hpbGQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUNMLFNBQVMsRUFDVCxlQUFlLEVBQ2YsVUFBVSxFQUNWLFlBQVksRUFDWixXQUFXLEVBQ1gsS0FBSyxFQUNMLE1BQU0sRUFDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFekQsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDbkYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7Ozs7Ozs7Ozs7QUFHM0Q7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNENHO0FBUUgsTUFBTSxPQUFPLHVCQUF1QjtJQXVIbEMsWUFDUyxTQUE2QixFQUM1QixTQUF1QixFQUN4QixPQUFtQjtRQUZuQixjQUFTLEdBQVQsU0FBUyxDQUFvQjtRQUM1QixjQUFTLEdBQVQsU0FBUyxDQUFjO1FBQ3hCLFlBQU8sR0FBUCxPQUFPLENBQVk7UUF6SDVCLFlBQU8sR0FBb0MsRUFBRSxDQUFDO1FBTzlDLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDakIsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUNuQixZQUFPLEdBQUcsRUFBRSxDQUFDO1FBRWIsYUFBUSxHQUFHLE1BQU0sQ0FBQztRQUNsQixjQUFTLEdBQUcsTUFBTSxDQUFDO1FBWW5COztXQUVHO1FBQ00sVUFBSyxHQUFHLENBQUMsQ0FBQztRQUVuQjs7V0FFRztRQUNNLFdBQU0sR0FBRyxDQUFDLENBQUM7UUFPcEI7O1dBRUc7UUFDTSxXQUFNLEdBQUcsRUFBRSxDQUFDO1FBRXJCOzs7V0FHRztRQUNNLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFFMUI7O1dBRUc7UUFDTSxvQkFBZSxHQUFHLEtBQUssQ0FBQztRQUVqQzs7V0FFRztRQUNPLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQTJCLENBQUM7UUFFcEU7O1dBRUc7UUFDTyxjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQTJCLENBQUM7UUFFbEU7O1dBRUc7UUFFSCxVQUFLLEdBQTBDLEVBQUUsQ0FBQztRQWdCbEQ7O1dBRUc7UUFDSCxnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUVwQjs7V0FFRztRQUNILGVBQVUsR0FBc0IsSUFBSSxDQUFDO0lBNkJsQyxDQUFDO0lBekhKLElBQW9ELGVBQWUsQ0FDakUsT0FBd0M7UUFFeEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQWtFRDs7T0FFRztJQUNILElBQUksT0FBTyxDQUFDLEtBQUs7UUFDZixJQUFJLENBQUMsUUFBUSxHQUFHLEdBQUcsS0FBSyxJQUFJLENBQUM7SUFDL0IsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBSSxRQUFRLENBQUMsS0FBSztRQUNoQixJQUFJLENBQUMsU0FBUyxHQUFHLEdBQUcsS0FBSyxJQUFJLENBQUM7SUFDaEMsQ0FBQztJQVlEOzs7T0FHRztJQUNILElBQ0ksV0FBVztRQUNiLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyx3QkFBd0IsQ0FBQzt5QkFDMUIsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDO3NCQUNiLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQzs0QkFDSixJQUFJLENBQUMsS0FBSzt5QkFDYixJQUFJLENBQUMsTUFBTTs7Y0FFdEIsSUFBSSxDQUFDLE1BQU0sSUFBSSxFQUFFO2FBQ2xCLElBQUksQ0FBQyxRQUFRLEVBQUU7S0FDdkIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQWNELFdBQVc7UUFDVCxJQUFJLENBQUMsT0FBTyxHQUFHO1lBQ2IsSUFBSSxFQUFFLElBQUk7WUFDVixnQkFBZ0IsRUFBRSxJQUFJO1lBQ3RCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN2QixXQUFXLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDMUIsR0FBRyxJQUFJLENBQUMsS0FBSztTQUNkLENBQUM7SUFDSixDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksSUFBSSxDQUFDLENBQUMsS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUU7WUFDaEQsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLENBQUM7U0FDOUM7UUFDRCxJQUFJLElBQUksQ0FBQyxlQUFlLElBQUksc0JBQXNCLElBQUksTUFBTSxFQUFFO1lBQzVELE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxvQkFBb0IsQ0FDbkQsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsb0JBQW9CLENBQUMsQ0FBQyxDQUMvRSxDQUFDO1lBQ0Ysb0JBQW9CLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDMUQ7YUFBTTtZQUNMLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1NBQ3pCO0lBQ0gsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELG1CQUFtQjtRQUNqQixNQUFNLEVBQUUsR0FBRyxJQUFJLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDeEMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDWCxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVYLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxhQUFhLENBQUMsTUFBb0I7UUFDaEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDckIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUNoQyxJQUFJLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDaEMsTUFBTSxXQUFXLEdBQUcsSUFBSSxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUMxRCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVELFdBQVcsQ0FBQyxNQUFvQjtRQUM5QixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztRQUN2QixJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUNoQyxNQUFNLFdBQVcsR0FBRyxJQUFJLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3hELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRCxLQUFLLENBQUMsTUFBbUI7UUFDdkIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUNwRCxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztRQUN0QixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUN4QixJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQztRQUN2QixJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztRQUN4QixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbkIsSUFBSSxNQUFNLEVBQUU7WUFDVixNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQ3ZCO1FBQ0QsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUU7WUFDM0IsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3RDLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2hDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzNCO0lBQ0gsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtZQUMzQixJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDdkM7UUFDRCxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBRUQsVUFBVSxDQUFDLE9BQXdDLEVBQUUsT0FBTyxHQUFHLEtBQUs7UUFDbEUsSUFBSSxPQUFPLEVBQUU7WUFDWCxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsR0FBRyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDOUM7YUFBTTtZQUNMLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQztTQUM5QztJQUNILENBQUM7SUFFTyx1QkFBdUI7UUFDN0IsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRWhELElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNWLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDdEM7SUFDSCxDQUFDO0lBRU8sUUFBUTtRQUNkLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLEVBQUUsQ0FBQztJQUM5RCxDQUFDO0lBRU8sV0FBVyxDQUFDLEtBQUssRUFBRSxRQUFRO1FBQ2pDLElBQUksS0FBSyxDQUFDLGNBQWMsRUFBRTtZQUN4QixRQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNqQyxPQUFPLElBQUksQ0FBQztTQUNiO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDOztvSEF2T1UsdUJBQXVCO3dHQUF2Qix1QkFBdUIsd2FBRWpCLDZCQUE2QixrREN2RWhELG1vRkFzRUE7MkZERGEsdUJBQXVCO2tCQVBuQyxTQUFTOytCQUNFLHFCQUFxQixRQUV6Qjt3QkFDSixLQUFLLEVBQUUsc0JBQXNCO3FCQUM5Qjs2SkFJbUQsZUFBZTtzQkFBbEUsZUFBZTt1QkFBQyw2QkFBNkI7Z0JBZ0JyQyxDQUFDO3NCQUFULEtBQUs7Z0JBS0csQ0FBQztzQkFBVCxLQUFLO2dCQUtHLEtBQUs7c0JBQWIsS0FBSztnQkFLRyxNQUFNO3NCQUFkLEtBQUs7Z0JBS0csSUFBSTtzQkFBWixLQUFLO2dCQUtHLE1BQU07c0JBQWQsS0FBSztnQkFNRyxRQUFRO3NCQUFoQixLQUFLO2dCQUtHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBS0ksV0FBVztzQkFBcEIsTUFBTTtnQkFLRyxTQUFTO3NCQUFsQixNQUFNO2dCQU1QLEtBQUs7c0JBREosS0FBSztnQkFnQ0YsV0FBVztzQkFEZCxXQUFXO3VCQUFDLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZGtEcmFnLCBDZGtEcmFnRW5kLCBDZGtEcmFnU3RhcnQgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RCaW5kaW5nLFxuICBJbnB1dCxcbiAgT3V0cHV0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IERhc2hib2FyZENoaWxkQWN0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi9kYXNoYm9hcmQtY2hpbGQtYWN0aW9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYXNoYm9hcmRDaGlsZENoYW5nZSB9IGZyb20gJy4vZGFzaGJvYXJkLWNoaWxkLWNoYW5nZSc7XG5pbXBvcnQgeyBEYXNoYm9hcmRDb21wb25lbnQgfSBmcm9tICcuL2Rhc2hib2FyZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGFzaGJvYXJkQ2hpbGREaW1lbnNpb24sIFdpZGdldCB9IGZyb20gJy4vZGFzaGJvYXJkLm1vZGVsJztcblxuLyoqXG4gKiBBIGRhc2hib2FyZCBjaGlsZCBhbGxvd3MgdG8gcG9zaXRpb24gZWxlbWVudHNcbiAqIGNvcnJlY3RseSBvbiBhIGdyaWQuIFRoZSB1c2VyIGNhbiB0aGVuIHJlc2l6ZSBhbmRcbiAqIHJlYXJyYW5nZSB0aGUgZWxlbWVudHMsIGFzIGxvbmcgYXMgdGhleSBhcmUgbm90IGBmcm96ZW5gLlxuICpcbiAqIEJ5IHNldHRpbmcgYGM4eS1kYXNoYm9hcmQtY2hpbGQtYWN0aW9uc2AgYW5kXG4gKiBgYzh5LWRhc2hib2FyZC1jaGlsZC10aXRsZWAgb24gdGhlIGVsZW1lbnQgeW91IGNhbiBhZGRcbiAqIGN1c3RvbSBhY3Rpb25zIG9yIGEgY3VzdG9tIHRpdGxlIHRvIHRoZSBjdXJyZW50IGNoaWxkLlxuICpcbiAqIEJ5IGFkZGluZyB0aGUgY29ycmVjdCBicmFuZGVkIGNsYXNzZXMsIHlvdSBjYW4gZGVmaW5lXG4gKiB0aGUgbG9vayBhbmQgZmVlbCBvZiB0aGUgY2hpbGQuIEJ5IGRlZmF1bHQgaXQgaXMgZGlzcGxheWVkXG4gKiBhcyBhIGNhcmQuXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiBgYGBodG1sXG4gKiAgIDxjOHktZGFzaGJvYXJkLWNoaWxkXG4gKiAgICAgI2NwV2lkZ2V0M1xuICogICAgIFtpc0Zyb3plbl09XCJpc0Zyb3plblwiXG4gKiAgICAgW3hdPVwiMFwiXG4gKiAgICAgW3ldPVwiM1wiXG4gKiAgICAgW3dpZHRoXT1cIjRcIlxuICogICAgIFtoZWlnaHRdPVwiNFwiXG4gKiAgICAgW2NsYXNzXT1cIidjYXJkLWRhc2hib2FyZCBwYW5lbC1jb250ZW50LXRyYW5zcGFyZW50J1wiXG4gKiAgID5cbiAqICAgICA8Yzh5LWRhc2hib2FyZC1jaGlsZC10aXRsZSAqbmdJZj1cInNob3dUaXRsZVwiPlxuICogICAgICAgPHNwYW4+VHJhbnNwYXJlbnQhPC9zcGFuPlxuICogICAgIDwvYzh5LWRhc2hib2FyZC1jaGlsZC10aXRsZT5cbiAqICAgICA8Yzh5LWRhc2hib2FyZC1jaGlsZC1hY3Rpb24+XG4gKiAgICAgICA8YSBocmVmPVwiXCIgKGNsaWNrKT1cInNob3dUaXRsZSA9ICFzaG93VGl0bGU7IChmYWxzZSlcIj5cbiAqICAgICAgICAgPGkgW2M4eUljb25dPVwiJ2hlYWRpbmcnXCI+PC9pPiBIaWRlL3Nob3cgdGl0bGVcbiAqICAgICAgIDwvYT5cbiAqICAgICA8L2M4eS1kYXNoYm9hcmQtY2hpbGQtYWN0aW9uPlxuICogICAgIDxjOHktZGFzaGJvYXJkLWNoaWxkLWFjdGlvbj5cbiAqICAgICAgIDxhIGhyZWY9XCJcIiAoY2xpY2spPVwiY3BXaWRnZXQzLmlzRnJvemVuID0gIWNwV2lkZ2V0My5pc0Zyb3plbjsgKGZhbHNlKVwiPlxuICogICAgICAgICA8aSBbYzh5SWNvbl09XCJjcFdpZGdldDMuaXNGcm96ZW4gPyAnbG9jaycgOiAndW5sb2NrJ1wiPjwvaT4gVG9nZ2xlIGZyZWV6ZVxuICogICAgICAgPC9hPlxuICogICAgIDwvYzh5LWRhc2hib2FyZC1jaGlsZC1hY3Rpb24+XG4gKiAgICAgeDoge3sgY3BXaWRnZXQzLnggfX08YnIgLz5cbiAqICAgICB5OiB7eyBjcFdpZGdldDMueSB9fTxiciAvPlxuICogICAgIHdpZHRoOiB7eyBjcFdpZGdldDMud2lkdGggfX08YnIgLz5cbiAqICAgICBoZWlnaHQ6IHt7IGNwV2lkZ2V0My5oZWlnaHQgfX08YnIgLz5cbiAqICAgPC9jOHktZGFzaGJvYXJkLWNoaWxkPlxuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1kYXNoYm9hcmQtY2hpbGQnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGFzaGJvYXJkLWNoaWxkLmNvbXBvbmVudC5odG1sJyxcbiAgaG9zdDoge1xuICAgIGNsYXNzOiAnZGFzaGJvYXJkLWdyaWQtY2hpbGQnXG4gIH1cbn0pXG5leHBvcnQgY2xhc3MgRGFzaGJvYXJkQ2hpbGRDb21wb25lbnQgaW1wbGVtZW50cyBEYXNoYm9hcmRDaGlsZERpbWVuc2lvbiB7XG4gIGFjdGlvbnM6IERhc2hib2FyZENoaWxkQWN0aW9uQ29tcG9uZW50W10gPSBbXTtcbiAgQENvbnRlbnRDaGlsZHJlbihEYXNoYm9hcmRDaGlsZEFjdGlvbkNvbXBvbmVudCkgc2V0IHRlbXBsYXRlQWN0aW9ucyhcbiAgICBhY3Rpb25zOiBEYXNoYm9hcmRDaGlsZEFjdGlvbkNvbXBvbmVudFtdXG4gICkge1xuICAgIHRoaXMuYWRkQWN0aW9ucyhhY3Rpb25zLCB0cnVlKTtcbiAgfVxuICBkcmFnU291cmNlOiBDZGtEcmFnO1xuICBpc1Jlc2l6ZSA9IGZhbHNlO1xuICBpc0RyYWdnaW5nID0gZmFsc2U7XG4gIGtsYXNzZXMgPSB7fTtcblxuICBfcHhXaWR0aCA9ICcxMDAlJztcbiAgX3B4SGVpZ2h0ID0gJzEwMCUnO1xuXG4gIC8qKlxuICAgKiBUaGUgeCBwb3NpdGlvbiBvZiB0aGUgY2hpbGQuXG4gICAqL1xuICBASW5wdXQoKSB4O1xuXG4gIC8qKlxuICAgKiBUaGUgeSBwb3NpdGlvbiBvZiB0aGUgY2hpbGQuXG4gICAqL1xuICBASW5wdXQoKSB5O1xuXG4gIC8qKlxuICAgKiBUaGUgd2lkdGggb2YgdGhlIGNvbXBvbmVudCBpbiBncmlkLWNvbHVtbnMuXG4gICAqL1xuICBASW5wdXQoKSB3aWR0aCA9IDE7XG5cbiAgLyoqXG4gICAqIFRoZSBoZWlnaHQgb2YgdGhlIGNvbXBvbmVudCBpbiBncmlkLXJvd3MuXG4gICAqL1xuICBASW5wdXQoKSBoZWlnaHQgPSAxO1xuXG4gIC8qKlxuICAgKiBUaGUgZGF0YSBvYmplY3QgY2FuIGJlIHVzZWQgYXMgYSBkYXRhVHJhbnNmZXIgb2JqZWN0IGZvciBldmVudHMgb2YgdGhlIGNoaWxkLlxuICAgKi9cbiAgQElucHV0KCkgZGF0YTogV2lkZ2V0IHwgYW55O1xuXG4gIC8qKlxuICAgKiBUaGUgbWFyZ2luIG9mIHRoZSBjaGlsZCBpbiBwaXhlbC5cbiAgICovXG4gIEBJbnB1dCgpIG1hcmdpbiA9IDEyO1xuXG4gIC8qKlxuICAgKiBJZiBhIGRhc2hib2FyZCBpcyBmcm96ZW4sIGFsbCBjaGlsZHJlbiBjYW5ub3QgYmUgbW92ZWRcbiAgICogb3IgcmVzaXplZC5cbiAgICovXG4gIEBJbnB1dCgpIGlzRnJvemVuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFRoZSBjaGlsZCBjb250ZW50IGlzIGluaXRpYWxpemVkLCBhcyBzb29uIGl0IGlzIHNjcm9sbGVkIGludG8gdmlld3BvcnRcbiAgICovXG4gIEBJbnB1dCgpIHVzZUludGVyc2VjdGlvbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBBbiBldmVudCBmaXJlZCBpZiBhIGNoaWxkIGNoYW5nZSBpcyBzdGFydGVkIChkcmFnZ2luZyBvciByZXNpemluZylcbiAgICovXG4gIEBPdXRwdXQoKSBjaGFuZ2VTdGFydCA9IG5ldyBFdmVudEVtaXR0ZXI8RGFzaGJvYXJkQ2hpbGRDb21wb25lbnQ+KCk7XG5cbiAgLyoqXG4gICAqIEFuIGV2ZW50IGZpcmVkIGlmIGEgY2hpbGQgY2hhbmdlIGlzIGVuZGVkXG4gICAqL1xuICBAT3V0cHV0KCkgY2hhbmdlRW5kID0gbmV3IEV2ZW50RW1pdHRlcjxEYXNoYm9hcmRDaGlsZENvbXBvbmVudD4oKTtcblxuICAvKipcbiAgICogQWxsIGNsYXNzZXMgYWRkZWQgdG8gdGhpcyBjaGlsZFxuICAgKi9cbiAgQElucHV0KClcbiAgY2xhc3M6IHN0cmluZ1tdIHwgeyBba2V5OiBzdHJpbmddOiBib29sZWFuIH0gPSB7fTtcblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgcGl4ZWwgd2lkdGggb2YgdGhlIGNoaWxkICh1c2VkIGZvciByZXNpemluZylcbiAgICovXG4gIHNldCBweFdpZHRoKHZhbHVlKSB7XG4gICAgdGhpcy5fcHhXaWR0aCA9IGAke3ZhbHVlfXB4YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBwaXhlbCBoZWlnaHQgb2YgdGhlIGNoaWxkICh1c2VkIGZvciByZXNpemluZylcbiAgICovXG4gIHNldCBweEhlaWdodCh2YWx1ZSkge1xuICAgIHRoaXMuX3B4SGVpZ2h0ID0gYCR7dmFsdWV9cHhgO1xuICB9XG5cbiAgLyoqXG4gICAqIEFuIGluZGljYXRvciBpZiB0aGUgY2hpbGQgaXMgaW50ZXJzZWN0ZWQgKHRoYXQgbWVhbiB2aXNpYmxlIGZvciB0aGUgdXNlcilcbiAgICovXG4gIGludGVyc2VjdGVkID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFRlbGxzIGlmIHRoZSBsYXN0IGNoYW5nZSB3YXMgYSBkcmFnZ2luZyBvciByZXNpemluZyBldmVudDtcbiAgICovXG4gIGxhc3RDaGFuZ2U6ICdkcmFnJyB8ICdyZXNpemUnID0gbnVsbDtcblxuICAvKipcbiAgICogbmFzdHkgd29ya2Fyb3VuZCBmb3IgdGhhdCBpc3N1ZTpcbiAgICogaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9pc3N1ZXMvOTM0M1xuICAgKi9cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLnN0eWxlJylcbiAgZ2V0IGlubGluZVN0eWxlKCkge1xuICAgIHJldHVybiB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0U3R5bGUoYFxuICAgIGdyaWQtY29sdW1uLXN0YXJ0OiAke3RoaXMueCArIDF9O1xuICAgIGdyaWQtcm93LXN0YXJ0OiAke3RoaXMueSArIDF9O1xuICAgIGdyaWQtY29sdW1uLWVuZDogc3BhbiAke3RoaXMud2lkdGh9O1xuICAgIGdyaWQtcm93LWVuZDogc3BhbiAke3RoaXMuaGVpZ2h0fTtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBtYXJnaW46ICR7dGhpcy5tYXJnaW4gfHwgMTJ9cHg7XG4gICAgb3JkZXI6ICR7dGhpcy5nZXRPcmRlcigpfTtcbiAgICBgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgb2JzZXJ2YWJsZSBzdWJzY3JpcHRpb24gd2hpY2ggaXMgbGlzdGVuIHRvXG4gICAqIG9uIGNoYW5nZXMgKGRyYWcgb3IgcmVzaXplKS5cbiAgICovXG4gIGNoYW5nZVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBkYXNoYm9hcmQ6IERhc2hib2FyZENvbXBvbmVudCxcbiAgICBwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyLFxuICAgIHB1YmxpYyBlbGVtZW50OiBFbGVtZW50UmVmXG4gICkge31cblxuICBuZ09uQ2hhbmdlcygpOiB2b2lkIHtcbiAgICB0aGlzLmtsYXNzZXMgPSB7XG4gICAgICBjYXJkOiB0cnVlLFxuICAgICAgJ2NhcmQtZGFzaGJvYXJkJzogdHJ1ZSxcbiAgICAgIGRpc2FibGVkOiB0aGlzLmlzRnJvemVuLFxuICAgICAgJ29uLXJlc2l6ZSc6IHRoaXMuaXNSZXNpemUsXG4gICAgICAuLi50aGlzLmNsYXNzXG4gICAgfTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnggPT09IHVuZGVmaW5lZCB8fCB0aGlzLnkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnNldER5bmFtaWNEaW1lbnNpb24oKSk7XG4gICAgfVxuICAgIGlmICh0aGlzLnVzZUludGVyc2VjdGlvbiAmJiAnSW50ZXJzZWN0aW9uT2JzZXJ2ZXInIGluIHdpbmRvdykge1xuICAgICAgY29uc3QgaW50ZXJzZWN0aW9uT2JzZXJ2ZXIgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoXG4gICAgICAgIGV2ZW50ID0+ICh0aGlzLmludGVyc2VjdGVkID0gdGhpcy5jaGlsZEluVmlldyhldmVudFswXSwgaW50ZXJzZWN0aW9uT2JzZXJ2ZXIpKVxuICAgICAgKTtcbiAgICAgIGludGVyc2VjdGlvbk9ic2VydmVyLm9ic2VydmUodGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmludGVyc2VjdGVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5kYXNoYm9hcmQuY2hpbGRyZW4ucHVzaCh0aGlzKTtcbiAgfVxuXG4gIHNldER5bmFtaWNEaW1lbnNpb24oKSB7XG4gICAgY29uc3QgZHMgPSBuZXcgRGFzaGJvYXJkQ2hpbGRDaGFuZ2UodGhpcyk7XG4gICAgY29uc3QgeyB4LCB5IH0gPSBkcy5maW5kRnJlZURpbWVuc2lvbigpO1xuICAgIHRoaXMueCA9IHg7XG4gICAgdGhpcy55ID0geTtcblxuICAgIHRoaXMuZGFzaGJvYXJkLmVtaXRDaGFuZ2UodGhpcyk7XG4gIH1cblxuICByZXNpemVTdGFydGVkKCRldmVudDogQ2RrRHJhZ1N0YXJ0KSB7XG4gICAgdGhpcy5pc1Jlc2l6ZSA9IHRydWU7XG4gICAgdGhpcy5kYXNoYm9hcmQudXBkYXRlUmVjdFNpemUoKTtcbiAgICB0aGlzLmRyYWdTb3VyY2UgPSAkZXZlbnQuc291cmNlO1xuICAgIGNvbnN0IHBvc2l0aW9uaW5nID0gbmV3IERhc2hib2FyZENoaWxkQ2hhbmdlKHRoaXMpO1xuICAgIHRoaXMuY2hhbmdlU3Vic2NyaXB0aW9uID0gcG9zaXRpb25pbmcucmVzaXplJC5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmNoYW5nZVN0YXJ0LmVtaXQodGhpcyk7XG4gICAgdGhpcy5uZ09uQ2hhbmdlcygpO1xuICB9XG5cbiAgZHJhZ1N0YXJ0ZWQoJGV2ZW50OiBDZGtEcmFnU3RhcnQpIHtcbiAgICB0aGlzLmlzRHJhZ2dpbmcgPSB0cnVlO1xuICAgIHRoaXMuZGFzaGJvYXJkLnVwZGF0ZVJlY3RTaXplKCk7XG4gICAgdGhpcy5kcmFnU291cmNlID0gJGV2ZW50LnNvdXJjZTtcbiAgICBjb25zdCBwb3NpdGlvbmluZyA9IG5ldyBEYXNoYm9hcmRDaGlsZENoYW5nZSh0aGlzKTtcbiAgICB0aGlzLmNoYW5nZVN1YnNjcmlwdGlvbiA9IHBvc2l0aW9uaW5nLmRyYWckLnN1YnNjcmliZSgpO1xuICAgIHRoaXMuY2hhbmdlU3RhcnQuZW1pdCh0aGlzKTtcbiAgfVxuXG4gIHJlc2V0KCRldmVudD86IENka0RyYWdFbmQpIHtcbiAgICB0aGlzLmxhc3RDaGFuZ2UgPSB0aGlzLmlzUmVzaXplID8gJ3Jlc2l6ZScgOiAnZHJhZyc7XG4gICAgdGhpcy5pc1Jlc2l6ZSA9IGZhbHNlO1xuICAgIHRoaXMuaXNEcmFnZ2luZyA9IGZhbHNlO1xuICAgIHRoaXMuX3B4V2lkdGggPSAnMTAwJSc7XG4gICAgdGhpcy5fcHhIZWlnaHQgPSAnMTAwJSc7XG4gICAgdGhpcy5uZ09uQ2hhbmdlcygpO1xuICAgIGlmICgkZXZlbnQpIHtcbiAgICAgICRldmVudC5zb3VyY2UucmVzZXQoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuY2hhbmdlU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLmNoYW5nZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgdGhpcy5kYXNoYm9hcmQuZW1pdENoYW5nZSh0aGlzKTtcbiAgICAgIHRoaXMuY2hhbmdlRW5kLmVtaXQodGhpcyk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMuY2hhbmdlU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLmNoYW5nZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICB0aGlzLnJlbW92ZVNlbGZGcm9tRGFzaGJvYXJkKCk7XG4gIH1cblxuICBhZGRBY3Rpb25zKGFjdGlvbnM6IERhc2hib2FyZENoaWxkQWN0aW9uQ29tcG9uZW50W10sIHByZXBlbmQgPSBmYWxzZSkge1xuICAgIGlmIChwcmVwZW5kKSB7XG4gICAgICB0aGlzLmFjdGlvbnMgPSBbLi4uYWN0aW9ucywgLi4udGhpcy5hY3Rpb25zXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hY3Rpb25zID0gWy4uLnRoaXMuYWN0aW9ucywgLi4uYWN0aW9uc107XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVTZWxmRnJvbURhc2hib2FyZCgpIHtcbiAgICBjb25zdCBpID0gdGhpcy5kYXNoYm9hcmQuY2hpbGRyZW4uaW5kZXhPZih0aGlzKTtcblxuICAgIGlmIChpID49IDApIHtcbiAgICAgIHRoaXMuZGFzaGJvYXJkLmNoaWxkcmVuLnNwbGljZShpLCAxKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldE9yZGVyKCkge1xuICAgIHJldHVybiBgJHtNYXRoLnJvdW5kKCh0aGlzLnkgKyAodGhpcy54ICsgMSkgLyAxMDApICogMTAwKX1gO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGlsZEluVmlldyhldmVudCwgb2JzZXJ2ZXIpIHtcbiAgICBpZiAoZXZlbnQuaXNJbnRlcnNlY3RpbmcpIHtcbiAgICAgIG9ic2VydmVyLnVub2JzZXJ2ZShldmVudC50YXJnZXQpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuIiwiPGRpdiBjZGtEcm9wTGlzdD5cbiAgPGRpdiAqbmdJZj1cImlzUmVzaXplXCIgY2xhc3M9XCJjYXJkLXBsYWNlaG9sZGVyXCI+PC9kaXY+XG4gIDxkaXZcbiAgICBbbmdDbGFzc109XCJrbGFzc2VzXCJcbiAgICBjZGtEcmFnXG4gICAgW25nU3R5bGVdPVwieyB3aWR0aDogX3B4V2lkdGgsIGhlaWdodDogX3B4SGVpZ2h0IH1cIlxuICAgIChjZGtEcmFnU3RhcnRlZCk9XCJkcmFnU3RhcnRlZCgkZXZlbnQpXCJcbiAgICAoY2RrRHJhZ0VuZGVkKT1cInJlc2V0KCRldmVudClcIlxuICAgIFtjZGtEcmFnRGlzYWJsZWRdPVwiaXNGcm96ZW5cIlxuICA+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJjYXJkLWhlYWRlci1hY3Rpb25zIGNhcmQtaGVhZGVyLWdyaWRcIlxuICAgICAgW25nQ2xhc3NdPVwieyAnZHJhZy1oYW5kbGUnOiAhaXNGcm96ZW4sIGRyYWdnYWJsZUN1cnNvcjogIWlzRnJvemVuIH1cIlxuICAgICAgY2RrRHJhZ0hhbmRsZVxuICAgICAgW3N0eWxlLi0tZGFzaGJvYXJkLXRpbWUtY29udGV4dF09XCJcbiAgICAgICAgZGF0YT8uY29uZmlnPy53aWRnZXRJbnN0YW5jZUdsb2JhbFRpbWVDb250ZXh0ID8gJ2Jsb2NrJyA6ICdub25lJ1xuICAgICAgXCJcbiAgICA+XG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJjOHktZGFzaGJvYXJkLWNoaWxkLXRpdGxlXCI+PC9uZy1jb250ZW50PlxuICAgICAgPGRpdiBjbGFzcz1cImhlYWRlci1hY3Rpb25zIGQtZmxleCBhLWktY2VudGVyXCIgKm5nSWY9XCIhaXNGcm96ZW4gJiYgYWN0aW9ucy5sZW5ndGggPiAwXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwibS1sLWF1dG9cIiBzdHlsZT1cImRpc3BsYXk6IHZhcigtLWRhc2hib2FyZC10aW1lLWNvbnRleHQpXCI+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9XCJidG4tY2xlYW5cIlxuICAgICAgICAgICAgdG9vbHRpcD1cInt7ICdUaGlzIHdpZGdldCBpcyBpbiBzeW5jIHdpdGggdGhlIGRhc2hib2FyZCB0aW1lIHJhbmdlLicgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgcGxhY2VtZW50PVwidG9wXCJcbiAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInVGhpcyB3aWRnZXQgaXMgaW4gc3luYyB3aXRoIHRoZSBkYXNoYm9hcmQgdGltZSByYW5nZS4nIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImM4eS1pY29uLWJhZGdlIGQtaW5saW5lLWZsZXhcIj5cbiAgICAgICAgICAgICAgPGkgYzh5SWNvbj1cImNsb2NrXCI+PC9pPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJhZGdlIGJhZGdlLXN1Y2Nlc3NcIj5cbiAgICAgICAgICAgICAgICA8aSBjOHlJY29uPVwibGlua1wiIGNsYXNzPVwidGV4dC1ncmF5LXdoaXRlXCI+PC9pPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm9wdGlvbnNCdG4gZHJvcGRvd25cIiBkcm9wZG93biBwbGFjZW1lbnQ9XCJib3R0b20gcmlnaHRcIj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0aXRsZT1cInt7ICdTZXR0aW5ncycgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgY2xhc3M9XCJidG5JY29uIGM4eS1kcm9wZG93blwiXG4gICAgICAgICAgICAoY2xpY2spPVwiKGZhbHNlKVwiXG4gICAgICAgICAgICBkcm9wZG93blRvZ2dsZVxuICAgICAgICAgICAgYXJpYS1oYXNwb3B1cD1cInRydWVcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpIFtjOHlJY29uXT1cIidjb2cnXCI+PC9pPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDx1bCBjbGFzcz1cImRyb3Bkb3duLW1lbnUgZHJvcGRvd24tbWVudS1yaWdodFwiIHN0eWxlPVwicmlnaHQ6IC0xcHhcIiAqZHJvcGRvd25NZW51PlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIGFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImFjdGlvbi50ZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC91bD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY2FyZC1pbm5lci1zY3JvbGxcIj5cbiAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2XG4gICAgICAqbmdJZj1cIiFpc0Zyb3plbiAmJiAhaXNEcmFnZ2luZ1wiXG4gICAgICBjbGFzcz1cInJlc2l6ZS1oYW5kbGUgaGlkZGVuLXhzXCJcbiAgICAgIGNka0RyYWdcbiAgICAgIFtjZGtEcmFnRGlzYWJsZWRdPVwiaXNGcm96ZW5cIlxuICAgICAgKGNka0RyYWdTdGFydGVkKT1cInJlc2l6ZVN0YXJ0ZWQoJGV2ZW50KVwiXG4gICAgICAoY2RrRHJhZ0VuZGVkKT1cInJlc2V0KCRldmVudClcIlxuICAgID48L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwicmVzaXplLWljb24gaGlkZGVuLXhzXCIgKm5nSWY9XCIhaXNGcm96ZW4gJiYgIWlzRHJhZ2dpbmdcIj48L2Rpdj5cblxuICAgIDxkaXYgKmNka0RyYWdQbGFjZWhvbGRlciBjbGFzcz1cImNhcmQtcGxhY2Vob2xkZXJcIj48L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
275
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFzaGJvYXJkLWNoaWxkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvZGFzaGJvYXJkL2Rhc2hib2FyZC1jaGlsZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9jb3JlL2Rhc2hib2FyZC9kYXNoYm9hcmQtY2hpbGQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUNMLFNBQVMsRUFDVCxlQUFlLEVBQ2YsVUFBVSxFQUNWLFlBQVksRUFDWixXQUFXLEVBQ1gsS0FBSyxFQUNMLE1BQU0sRUFDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFekQsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDbkYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7Ozs7Ozs7Ozs7QUFHM0Q7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNENHO0FBUUgsTUFBTSxPQUFPLHVCQUF1QjtJQXVIbEMsWUFDUyxTQUE2QixFQUM1QixTQUF1QixFQUN4QixPQUFtQjtRQUZuQixjQUFTLEdBQVQsU0FBUyxDQUFvQjtRQUM1QixjQUFTLEdBQVQsU0FBUyxDQUFjO1FBQ3hCLFlBQU8sR0FBUCxPQUFPLENBQVk7UUF6SDVCLFlBQU8sR0FBb0MsRUFBRSxDQUFDO1FBTzlDLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDakIsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUNuQixZQUFPLEdBQUcsRUFBRSxDQUFDO1FBRWIsYUFBUSxHQUFHLE1BQU0sQ0FBQztRQUNsQixjQUFTLEdBQUcsTUFBTSxDQUFDO1FBWW5COztXQUVHO1FBQ00sVUFBSyxHQUFHLENBQUMsQ0FBQztR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TUFBTTtnQkFNUCxLQUFLO3NCQURKLEtBQUs7Z0JBZ0NGLFdBQVc7c0JBRGQsV0FBVzt1QkFBQyxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2RrRHJhZywgQ2RrRHJhZ0VuZCwgQ2RrRHJhZ1N0YXJ0IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XG5pbXBvcnQge1xuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0QmluZGluZyxcbiAgSW5wdXQsXG4gIE91dHB1dFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERvbVNhbml0aXplciB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBEYXNoYm9hcmRDaGlsZEFjdGlvbkNvbXBvbmVudCB9IGZyb20gJy4vZGFzaGJvYXJkLWNoaWxkLWFjdGlvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGFzaGJvYXJkQ2hpbGRDaGFuZ2UgfSBmcm9tICcuL2Rhc2hib2FyZC1jaGlsZC1jaGFuZ2UnO1xuaW1wb3J0IHsgRGFzaGJvYXJkQ29tcG9uZW50IH0gZnJvbSAnLi9kYXNoYm9hcmQuY29tcG9uZW50JztcbmltcG9ydCB7IERhc2hib2FyZENoaWxkRGltZW5zaW9uLCBXaWRnZXQgfSBmcm9tICcuL2Rhc2hib2FyZC5tb2RlbCc7XG5cbi8qKlxuICogQSBkYXNoYm9hcmQgY2hpbGQgYWxsb3dzIHRvIHBvc2l0aW9uIGVsZW1lbnRzXG4gKiBjb3JyZWN0bHkgb24gYSBncmlkLiBUaGUgdXNlciBjYW4gdGhlbiByZXNpemUgYW5kXG4gKiByZWFycmFuZ2UgdGhlIGVsZW1lbnRzLCBhcyBsb25nIGFzIHRoZXkgYXJlIG5vdCBgZnJvemVuYC5cbiAqXG4gKiBCeSBzZXR0aW5nIGBjOHktZGFzaGJvYXJkLWNoaWxkLWFjdGlvbnNgIGFuZFxuICogYGM4eS1kYXNoYm9hcmQtY2hpbGQtdGl0bGVgIG9uIHRoZSBlbGVtZW50IHlvdSBjYW4gYWRkXG4gKiBjdXN0b20gYWN0aW9ucyBvciBhIGN1c3RvbSB0aXRsZSB0byB0aGUgY3VycmVudCBjaGlsZC5cbiAqXG4gKiBCeSBhZGRpbmcgdGhlIGNvcnJlY3QgYnJhbmRlZCBjbGFzc2VzLCB5b3UgY2FuIGRlZmluZVxuICogdGhlIGxvb2sgYW5kIGZlZWwgb2YgdGhlIGNoaWxkLiBCeSBkZWZhdWx0IGl0IGlzIGRpc3BsYXllZFxuICogYXMgYSBjYXJkLlxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogYGBgaHRtbFxuICogICA8Yzh5LWRhc2hib2FyZC1jaGlsZFxuICogICAgICNjcFdpZGdldDNcbiAqICAgICBbaXNGcm96ZW5dPVwiaXNGcm96ZW5cIlxuICogICAgIFt4XT1cIjBcIlxuICogICAgIFt5XT1cIjNcIlxuICogICAgIFt3aWR0aF09XCI0XCJcbiAqICAgICBbaGVpZ2h0XT1cIjRcIlxuICogICAgIFtjbGFzc109XCInY2FyZC1kYXNoYm9hcmQgcGFuZWwtY29udGVudC10cmFuc3BhcmVudCdcIlxuICogICA+XG4gKiAgICAgPGM4eS1kYXNoYm9hcmQtY2hpbGQtdGl0bGUgKm5nSWY9XCJzaG93VGl0bGVcIj5cbiAqICAgICAgIDxzcGFuPlRyYW5zcGFyZW50ITwvc3Bhbj5cbiAqICAgICA8L2M4eS1kYXNoYm9hcmQtY2hpbGQtdGl0bGU+XG4gKiAgICAgPGM4eS1kYXNoYm9hcmQtY2hpbGQtYWN0aW9uPlxuICogICAgICAgPGEgaHJlZj1cIlwiIChjbGljayk9XCJzaG93VGl0bGUgPSAhc2hvd1RpdGxlOyAoZmFsc2UpXCI+XG4gKiAgICAgICAgIDxpIFtjOHlJY29uXT1cIidoZWFkaW5nJ1wiPjwvaT4gSGlkZS9zaG93IHRpdGxlXG4gKiAgICAgICA8L2E+XG4gKiAgICAgPC9jOHktZGFzaGJvYXJkLWNoaWxkLWFjdGlvbj5cbiAqICAgICA8Yzh5LWRhc2hib2FyZC1jaGlsZC1hY3Rpb24+XG4gKiAgICAgICA8YSBocmVmPVwiXCIgKGNsaWNrKT1cImNwV2lkZ2V0My5pc0Zyb3plbiA9ICFjcFdpZGdldDMuaXNGcm96ZW47IChmYWxzZSlcIj5cbiAqICAgICAgICAgPGkgW2M4eUljb25dPVwiY3BXaWRnZXQzLmlzRnJvemVuID8gJ2xvY2snIDogJ3VubG9jaydcIj48L2k+IFRvZ2dsZSBmcmVlemVcbiAqICAgICAgIDwvYT5cbiAqICAgICA8L2M4eS1kYXNoYm9hcmQtY2hpbGQtYWN0aW9uPlxuICogICAgIHg6IHt7IGNwV2lkZ2V0My54IH19PGJyIC8+XG4gKiAgICAgeToge3sgY3BXaWRnZXQzLnkgfX08YnIgLz5cbiAqICAgICB3aWR0aDoge3sgY3BXaWRnZXQzLndpZHRoIH19PGJyIC8+XG4gKiAgICAgaGVpZ2h0OiB7eyBjcFdpZGdldDMuaGVpZ2h0IH19PGJyIC8+XG4gKiAgIDwvYzh5LWRhc2hib2FyZC1jaGlsZD5cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktZGFzaGJvYXJkLWNoaWxkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Rhc2hib2FyZC1jaGlsZC5jb21wb25lbnQuaHRtbCcsXG4gIGhvc3Q6IHtcbiAgICBjbGFzczogJ2Rhc2hib2FyZC1ncmlkLWNoaWxkJ1xuICB9XG59KVxuZXhwb3J0IGNsYXNzIERhc2hib2FyZENoaWxkQ29tcG9uZW50IGltcGxlbWVudHMgRGFzaGJvYXJkQ2hpbGREaW1lbnNpb24ge1xuICBhY3Rpb25zOiBEYXNoYm9hcmRDaGlsZEFjdGlvbkNvbXBvbmVudFtdID0gW107XG4gIEBDb250ZW50Q2hpbGRyZW4oRGFzaGJvYXJkQ2hpbGRBY3Rpb25Db21wb25lbnQpIHNldCB0ZW1wbGF0ZUFjdGlvbnMoXG4gICAgYWN0aW9uczogRGFzaGJvYXJkQ2hpbGRBY3Rpb25Db21wb25lbnRbXVxuICApIHtcbiAgICB0aGlzLmFkZEFjdGlvbnMoYWN0aW9ucywgdHJ1ZSk7XG4gIH1cbiAgZHJhZ1NvdXJjZTogQ2RrRHJhZztcbiAgaXNSZXNpemUgPSBmYWxzZTtcbiAgaXNEcmFnZ2luZyA9IGZhbHNlO1xuICBrbGFzc2VzID0ge307XG5cbiAgX3B4V2lkdGggPSAnMTAwJSc7XG4gIF9weEhlaWdodCA9ICcxMDAlJztcblxuICAvKipcbiAgICogVGhlIHggcG9zaXRpb24gb2YgdGhlIGNoaWxkLlxuICAgKi9cbiAgQElucHV0KCkgeDtcblxuICAvKipcbiAgICogVGhlIHkgcG9zaXRpb24gb2YgdGhlIGNoaWxkLlxuICAgKi9cbiAgQElucHV0KCkgeTtcblxuICAvKipcbiAgICogVGhlIHdpZHRoIG9mIHRoZSBjb21wb25lbnQgaW4gZ3JpZC1jb2x1bW5zLlxuICAgKi9cbiAgQElucHV0KCkgd2lkdGggPSAxO1xuXG4gIC8qKlxuICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBjb21wb25lbnQgaW4gZ3JpZC1yb3dzLlxuICAgKi9cbiAgQElucHV0KCkgaGVpZ2h0ID0gMTtcblxuICAvKipcbiAgICogVGhlIGRhdGEgb2JqZWN0IGNhbiBiZSB1c2VkIGFzIGEgZGF0YVRyYW5zZmVyIG9iamVjdCBmb3IgZXZlbnRzIG9mIHRoZSBjaGlsZC5cbiAgICovXG4gIEBJbnB1dCgpIGRhdGE6IFdpZGdldCB8IGFueTtcblxuICAvKipcbiAgICogVGhlIG1hcmdpbiBvZiB0aGUgY2hpbGQgaW4gcGl4ZWwuXG4gICAqL1xuICBASW5wdXQoKSBtYXJnaW4gPSAxMjtcblxuICAvKipcbiAgICogSWYgYSBkYXNoYm9hcmQgaXMgZnJvemVuLCBhbGwgY2hpbGRyZW4gY2Fubm90IGJlIG1vdmVkXG4gICAqIG9yIHJlc2l6ZWQuXG4gICAqL1xuICBASW5wdXQoKSBpc0Zyb3plbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBUaGUgY2hpbGQgY29udGVudCBpcyBpbml0aWFsaXplZCwgYXMgc29vbiBpdCBpcyBzY3JvbGxlZCBpbnRvIHZpZXdwb3J0XG4gICAqL1xuICBASW5wdXQoKSB1c2VJbnRlcnNlY3Rpb24gPSBmYWxzZTtcblxuICAvKipcbiAgICogQW4gZXZlbnQgZmlyZWQgaWYgYSBjaGlsZCBjaGFuZ2UgaXMgc3RhcnRlZCAoZHJhZ2dpbmcgb3IgcmVzaXppbmcpXG4gICAqL1xuICBAT3V0cHV0KCkgY2hhbmdlU3RhcnQgPSBuZXcgRXZlbnRFbWl0dGVyPERhc2hib2FyZENoaWxkQ29tcG9uZW50PigpO1xuXG4gIC8qKlxuICAgKiBBbiBldmVudCBmaXJlZCBpZiBhIGNoaWxkIGNoYW5nZSBpcyBlbmRlZFxuICAgKi9cbiAgQE91dHB1dCgpIGNoYW5nZUVuZCA9IG5ldyBFdmVudEVtaXR0ZXI8RGFzaGJvYXJkQ2hpbGRDb21wb25lbnQ+KCk7XG5cbiAgLyoqXG4gICAqIEFsbCBjbGFzc2VzIGFkZGVkIHRvIHRoaXMgY2hpbGRcbiAgICovXG4gIEBJbnB1dCgpXG4gIGNsYXNzOiBzdHJpbmdbXSB8IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB9ID0ge307XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHBpeGVsIHdpZHRoIG9mIHRoZSBjaGlsZCAodXNlZCBmb3IgcmVzaXppbmcpXG4gICAqL1xuICBzZXQgcHhXaWR0aCh2YWx1ZSkge1xuICAgIHRoaXMuX3B4V2lkdGggPSBgJHt2YWx1ZX1weGA7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgcGl4ZWwgaGVpZ2h0IG9mIHRoZSBjaGlsZCAodXNlZCBmb3IgcmVzaXppbmcpXG4gICAqL1xuICBzZXQgcHhIZWlnaHQodmFsdWUpIHtcbiAgICB0aGlzLl9weEhlaWdodCA9IGAke3ZhbHVlfXB4YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbiBpbmRpY2F0b3IgaWYgdGhlIGNoaWxkIGlzIGludGVyc2VjdGVkICh0aGF0IG1lYW4gdmlzaWJsZSBmb3IgdGhlIHVzZXIpXG4gICAqL1xuICBpbnRlcnNlY3RlZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBUZWxscyBpZiB0aGUgbGFzdCBjaGFuZ2Ugd2FzIGEgZHJhZ2dpbmcgb3IgcmVzaXppbmcgZXZlbnQ7XG4gICAqL1xuICBsYXN0Q2hhbmdlOiAnZHJhZycgfCAncmVzaXplJyA9IG51bGw7XG5cbiAgLyoqXG4gICAqIG5hc3R5IHdvcmthcm91bmQgZm9yIHRoYXQgaXNzdWU6XG4gICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvaXNzdWVzLzkzNDNcbiAgICovXG4gIEBIb3N0QmluZGluZygnYXR0ci5zdHlsZScpXG4gIGdldCBpbmxpbmVTdHlsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFN0eWxlKGBcbiAgICBncmlkLWNvbHVtbi1zdGFydDogJHt0aGlzLnggKyAxfTtcbiAgICBncmlkLXJvdy1zdGFydDogJHt0aGlzLnkgKyAxfTtcbiAgICBncmlkLWNvbHVtbi1lbmQ6IHNwYW4gJHt0aGlzLndpZHRofTtcbiAgICBncmlkLXJvdy1lbmQ6IHNwYW4gJHt0aGlzLmhlaWdodH07XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgbWFyZ2luOiAke3RoaXMubWFyZ2luIHx8IDEyfXB4O1xuICAgIG9yZGVyOiAke3RoaXMuZ2V0T3JkZXIoKX07XG4gICAgYCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIG9ic2VydmFibGUgc3Vic2NyaXB0aW9uIHdoaWNoIGlzIGxpc3RlbiB0b1xuICAgKiBvbiBjaGFuZ2VzIChkcmFnIG9yIHJlc2l6ZSkuXG4gICAqL1xuICBjaGFuZ2VTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgZGFzaGJvYXJkOiBEYXNoYm9hcmRDb21wb25lbnQsXG4gICAgcHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcixcbiAgICBwdWJsaWMgZWxlbWVudDogRWxlbWVudFJlZlxuICApIHt9XG5cbiAgbmdPbkNoYW5nZXMoKTogdm9pZCB7XG4gICAgdGhpcy5rbGFzc2VzID0ge1xuICAgICAgY2FyZDogdHJ1ZSxcbiAgICAgICdjYXJkLWRhc2hib2FyZCc6IHRydWUsXG4gICAgICBkaXNhYmxlZDogdGhpcy5pc0Zyb3plbixcbiAgICAgICdvbi1yZXNpemUnOiB0aGlzLmlzUmVzaXplLFxuICAgICAgLi4udGhpcy5jbGFzc1xuICAgIH07XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy54ID09PSB1bmRlZmluZWQgfHwgdGhpcy55ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zZXREeW5hbWljRGltZW5zaW9uKCkpO1xuICAgIH1cbiAgICBpZiAodGhpcy51c2VJbnRlcnNlY3Rpb24gJiYgJ0ludGVyc2VjdGlvbk9ic2VydmVyJyBpbiB3aW5kb3cpIHtcbiAgICAgIGNvbnN0IGludGVyc2VjdGlvbk9ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKFxuICAgICAgICBldmVudHMgPT4gKHRoaXMuaW50ZXJzZWN0ZWQgPSB0aGlzLmNoaWxkSW5WaWV3KGV2ZW50cywgaW50ZXJzZWN0aW9uT2JzZXJ2ZXIpKVxuICAgICAgKTtcbiAgICAgIGludGVyc2VjdGlvbk9ic2VydmVyLm9ic2VydmUodGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmludGVyc2VjdGVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5kYXNoYm9hcmQuY2hpbGRyZW4ucHVzaCh0aGlzKTtcbiAgfVxuXG4gIHNldER5bmFtaWNEaW1lbnNpb24oKSB7XG4gICAgY29uc3QgZHMgPSBuZXcgRGFzaGJvYXJkQ2hpbGRDaGFuZ2UodGhpcyk7XG4gICAgY29uc3QgeyB4LCB5IH0gPSBkcy5maW5kRnJlZURpbWVuc2lvbigpO1xuICAgIHRoaXMueCA9IHg7XG4gICAgdGhpcy55ID0geTtcblxuICAgIHRoaXMuZGFzaGJvYXJkLmVtaXRDaGFuZ2UodGhpcyk7XG4gIH1cblxuICByZXNpemVTdGFydGVkKCRldmVudDogQ2RrRHJhZ1N0YXJ0KSB7XG4gICAgdGhpcy5pc1Jlc2l6ZSA9IHRydWU7XG4gICAgdGhpcy5kYXNoYm9hcmQudXBkYXRlUmVjdFNpemUoKTtcbiAgICB0aGlzLmRyYWdTb3VyY2UgPSAkZXZlbnQuc291cmNlO1xuICAgIGNvbnN0IHBvc2l0aW9uaW5nID0gbmV3IERhc2hib2FyZENoaWxkQ2hhbmdlKHRoaXMpO1xuICAgIHRoaXMuY2hhbmdlU3Vic2NyaXB0aW9uID0gcG9zaXRpb25pbmcucmVzaXplJC5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmNoYW5nZVN0YXJ0LmVtaXQodGhpcyk7XG4gICAgdGhpcy5uZ09uQ2hhbmdlcygpO1xuICB9XG5cbiAgZHJhZ1N0YXJ0ZWQoJGV2ZW50OiBDZGtEcmFnU3RhcnQpIHtcbiAgICB0aGlzLmlzRHJhZ2dpbmcgPSB0cnVlO1xuICAgIHRoaXMuZGFzaGJvYXJkLnVwZGF0ZVJlY3RTaXplKCk7XG4gICAgdGhpcy5kcmFnU291cmNlID0gJGV2ZW50LnNvdXJjZTtcbiAgICBjb25zdCBwb3NpdGlvbmluZyA9IG5ldyBEYXNoYm9hcmRDaGlsZENoYW5nZSh0aGlzKTtcbiAgICB0aGlzLmNoYW5nZVN1YnNjcmlwdGlvbiA9IHBvc2l0aW9uaW5nLmRyYWckLnN1YnNjcmliZSgpO1xuICAgIHRoaXMuY2hhbmdlU3RhcnQuZW1pdCh0aGlzKTtcbiAgfVxuXG4gIHJlc2V0KCRldmVudD86IENka0RyYWdFbmQpIHtcbiAgICB0aGlzLmxhc3RDaGFuZ2UgPSB0aGlzLmlzUmVzaXplID8gJ3Jlc2l6ZScgOiAnZHJhZyc7XG4gICAgdGhpcy5pc1Jlc2l6ZSA9IGZhbHNlO1xuICAgIHRoaXMuaXNEcmFnZ2luZyA9IGZhbHNlO1xuICAgIHRoaXMuX3B4V2lkdGggPSAnMTAwJSc7XG4gICAgdGhpcy5fcHhIZWlnaHQgPSAnMTAwJSc7XG4gICAgdGhpcy5uZ09uQ2hhbmdlcygpO1xuICAgIGlmICgkZXZlbnQpIHtcbiAgICAgICRldmVudC5zb3VyY2UucmVzZXQoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuY2hhbmdlU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLmNoYW5nZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgdGhpcy5kYXNoYm9hcmQuZW1pdENoYW5nZSh0aGlzKTtcbiAgICAgIHRoaXMuY2hhbmdlRW5kLmVtaXQodGhpcyk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMuY2hhbmdlU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLmNoYW5nZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICB0aGlzLnJlbW92ZVNlbGZGcm9tRGFzaGJvYXJkKCk7XG4gIH1cblxuICBhZGRBY3Rpb25zKGFjdGlvbnM6IERhc2hib2FyZENoaWxkQWN0aW9uQ29tcG9uZW50W10sIHByZXBlbmQgPSBmYWxzZSkge1xuICAgIGlmIChwcmVwZW5kKSB7XG4gICAgICB0aGlzLmFjdGlvbnMgPSBbLi4uYWN0aW9ucywgLi4udGhpcy5hY3Rpb25zXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hY3Rpb25zID0gWy4uLnRoaXMuYWN0aW9ucywgLi4uYWN0aW9uc107XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVTZWxmRnJvbURhc2hib2FyZCgpIHtcbiAgICBjb25zdCBpID0gdGhpcy5kYXNoYm9hcmQuY2hpbGRyZW4uaW5kZXhPZih0aGlzKTtcblxuICAgIGlmIChpID49IDApIHtcbiAgICAgIHRoaXMuZGFzaGJvYXJkLmNoaWxkcmVuLnNwbGljZShpLCAxKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldE9yZGVyKCkge1xuICAgIHJldHVybiBgJHtNYXRoLnJvdW5kKCh0aGlzLnkgKyAodGhpcy54ICsgMSkgLyAxMDApICogMTAwKX1gO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGlsZEluVmlldyhldmVudHMsIG9ic2VydmVyKSB7XG4gICAgY29uc3QgaW50ZXJzZWN0aW5nRXZlbnQgPSBldmVudHMuZmluZChldmVudCA9PiBldmVudC5pc0ludGVyc2VjdGluZyk7XG4gICAgaWYgKGludGVyc2VjdGluZ0V2ZW50KSB7XG4gICAgICBvYnNlcnZlci51bm9ic2VydmUoaW50ZXJzZWN0aW5nRXZlbnQudGFyZ2V0KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbiIsIjxkaXYgY2RrRHJvcExpc3Q+XG4gIDxkaXYgKm5nSWY9XCJpc1Jlc2l6ZVwiIGNsYXNzPVwiY2FyZC1wbGFjZWhvbGRlclwiPjwvZGl2PlxuICA8ZGl2XG4gICAgW25nQ2xhc3NdPVwia2xhc3Nlc1wiXG4gICAgY2RrRHJhZ1xuICAgIFtuZ1N0eWxlXT1cInsgd2lkdGg6IF9weFdpZHRoLCBoZWlnaHQ6IF9weEhlaWdodCB9XCJcbiAgICAoY2RrRHJhZ1N0YXJ0ZWQpPVwiZHJhZ1N0YXJ0ZWQoJGV2ZW50KVwiXG4gICAgKGNka0RyYWdFbmRlZCk9XCJyZXNldCgkZXZlbnQpXCJcbiAgICBbY2RrRHJhZ0Rpc2FibGVkXT1cImlzRnJvemVuXCJcbiAgPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiY2FyZC1oZWFkZXItYWN0aW9ucyBjYXJkLWhlYWRlci1ncmlkXCJcbiAgICAgIFtuZ0NsYXNzXT1cInsgJ2RyYWctaGFuZGxlJzogIWlzRnJvemVuLCBkcmFnZ2FibGVDdXJzb3I6ICFpc0Zyb3plbiB9XCJcbiAgICAgIGNka0RyYWdIYW5kbGVcbiAgICAgIFtzdHlsZS4tLWRhc2hib2FyZC10aW1lLWNvbnRleHRdPVwiXG4gICAgICAgIGRhdGE/LmNvbmZpZz8ud2lkZ2V0SW5zdGFuY2VHbG9iYWxUaW1lQ29udGV4dCA/ICdibG9jaycgOiAnbm9uZSdcbiAgICAgIFwiXG4gICAgPlxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiYzh5LWRhc2hib2FyZC1jaGlsZC10aXRsZVwiPjwvbmctY29udGVudD5cbiAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItYWN0aW9ucyBkLWZsZXggYS1pLWNlbnRlclwiICpuZ0lmPVwiIWlzRnJvemVuICYmIGFjdGlvbnMubGVuZ3RoID4gMFwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cIm0tbC1hdXRvXCIgc3R5bGU9XCJkaXNwbGF5OiB2YXIoLS1kYXNoYm9hcmQtdGltZS1jb250ZXh0KVwiPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGNsYXNzPVwiYnRuLWNsZWFuXCJcbiAgICAgICAgICAgIHRvb2x0aXA9XCJ7eyAnVGhpcyB3aWRnZXQgaXMgaW4gc3luYyB3aXRoIHRoZSBkYXNoYm9hcmQgdGltZSByYW5nZS4nIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgIHBsYWNlbWVudD1cInRvcFwiXG4gICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1RoaXMgd2lkZ2V0IGlzIGluIHN5bmMgd2l0aCB0aGUgZGFzaGJvYXJkIHRpbWUgcmFuZ2UuJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjOHktaWNvbi1iYWRnZSBkLWlubGluZS1mbGV4XCI+XG4gICAgICAgICAgICAgIDxpIGM4eUljb249XCJjbG9ja1wiPjwvaT5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBiYWRnZS1zdWNjZXNzXCI+XG4gICAgICAgICAgICAgICAgPGkgYzh5SWNvbj1cImxpbmtcIiBjbGFzcz1cInRleHQtZ3JheS13aGl0ZVwiPjwvaT5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJvcHRpb25zQnRuIGRyb3Bkb3duXCIgZHJvcGRvd24gcGxhY2VtZW50PVwiYm90dG9tIHJpZ2h0XCI+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdGl0bGU9XCJ7eyAnU2V0dGluZ3MnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgIGNsYXNzPVwiYnRuSWNvbiBjOHktZHJvcGRvd25cIlxuICAgICAgICAgICAgKGNsaWNrKT1cIihmYWxzZSlcIlxuICAgICAgICAgICAgZHJvcGRvd25Ub2dnbGVcbiAgICAgICAgICAgIGFyaWEtaGFzcG9wdXA9XCJ0cnVlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aSBbYzh5SWNvbl09XCInY29nJ1wiPjwvaT5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8dWwgY2xhc3M9XCJkcm9wZG93bi1tZW51IGRyb3Bkb3duLW1lbnUtcmlnaHRcIiBzdHlsZT1cInJpZ2h0OiAtMXB4XCIgKmRyb3Bkb3duTWVudT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBhY3Rpb25zXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJhY3Rpb24udGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImNhcmQtaW5uZXItc2Nyb2xsXCI+XG4gICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgPC9kaXY+XG4gICAgPGRpdlxuICAgICAgKm5nSWY9XCIhaXNGcm96ZW4gJiYgIWlzRHJhZ2dpbmdcIlxuICAgICAgY2xhc3M9XCJyZXNpemUtaGFuZGxlIGhpZGRlbi14c1wiXG4gICAgICBjZGtEcmFnXG4gICAgICBbY2RrRHJhZ0Rpc2FibGVkXT1cImlzRnJvemVuXCJcbiAgICAgIChjZGtEcmFnU3RhcnRlZCk9XCJyZXNpemVTdGFydGVkKCRldmVudClcIlxuICAgICAgKGNka0RyYWdFbmRlZCk9XCJyZXNldCgkZXZlbnQpXCJcbiAgICA+PC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInJlc2l6ZS1pY29uIGhpZGRlbi14c1wiICpuZ0lmPVwiIWlzRnJvemVuICYmICFpc0RyYWdnaW5nXCI+PC9kaXY+XG5cbiAgICA8ZGl2ICpjZGtEcmFnUGxhY2Vob2xkZXIgY2xhc3M9XCJjYXJkLXBsYWNlaG9sZGVyXCI+PC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
@@ -409,12 +409,7 @@ class ContextDashboardService {
409
409
  });
410
410
  }
411
411
  canEditDashboard(mo) {
412
- return this.permissions.canEdit([
413
- Permissions.ROLE_INVENTORY_ADMIN,
414
- Permissions.ROLE_INVENTORY_CREATE,
415
- Permissions.ROLE_MANAGED_OBJECT_ADMIN,
416
- Permissions.ROLE_MANAGED_OBJECT_CREATE
417
- ], mo);
412
+ return this.permissions.canEdit([Permissions.ROLE_INVENTORY_ADMIN, Permissions.ROLE_MANAGED_OBJECT_ADMIN], mo);
418
413
  }
419
414
  /**
420
415
  * Checks if user has permissions to copy dashboard according to his roles.