@yuuvis/app-drive 0.7.3 → 0.8.0

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.
Files changed (23) hide show
  1. package/esm2022/lib/components/add-button/add-button-overlay/add-button-overlay.component.mjs +2 -2
  2. package/esm2022/lib/components/drive-search/drive-search-overlay/drive-search-overlay.component.mjs +343 -0
  3. package/esm2022/lib/components/drive-search/drive-search.component.mjs +83 -0
  4. package/esm2022/lib/components/index.mjs +2 -2
  5. package/esm2022/lib/components/search-filter/search-filter.component.mjs +14 -330
  6. package/esm2022/lib/drive.icons.mjs +5 -2
  7. package/esm2022/lib/pages/files/files.component.mjs +24 -24
  8. package/esm2022/lib/services/drive/drive.interface.mjs +1 -1
  9. package/esm2022/lib/services/drive/drive.service.mjs +9 -4
  10. package/fesm2022/yuuvis-app-drive.mjs +490 -438
  11. package/fesm2022/yuuvis-app-drive.mjs.map +1 -1
  12. package/lib/components/drive-search/drive-search-overlay/drive-search-overlay.component.d.ts +52 -0
  13. package/lib/components/drive-search/drive-search.component.d.ts +21 -0
  14. package/lib/components/index.d.ts +1 -0
  15. package/lib/components/search-filter/search-filter.component.d.ts +0 -2
  16. package/lib/container/drive/drive.component.d.ts +3 -0
  17. package/lib/drive.icons.d.ts +3 -0
  18. package/lib/pages/files/files.component.d.ts +10 -7
  19. package/lib/services/drive/drive.interface.d.ts +1 -0
  20. package/lib/services/drive/drive.service.d.ts +1 -1
  21. package/package.json +2 -2
  22. package/esm2022/lib/components/search-filter/date-range-picker/date-range-picker.component.mjs +0 -38
  23. package/lib/components/search-filter/date-range-picker/date-range-picker.component.d.ts +0 -13
@@ -44,6 +44,7 @@ export class DriveService {
44
44
  currentFolder: null,
45
45
  query: null,
46
46
  queryTitle: null,
47
+ extendedQuery: false,
47
48
  selection: [],
48
49
  actions: [],
49
50
  busy: false,
@@ -100,10 +101,11 @@ export class DriveService {
100
101
  patchState(this.state$, { selection: o });
101
102
  this._getActions();
102
103
  }
103
- updateQuery(query, queryTitle = null) {
104
+ updateQuery(query, queryTitle = null, extendedQuery = false) {
104
105
  patchState(this.state$, {
105
106
  query: this.applyFolderListSearchConditions(query),
106
- queryTitle: queryTitle
107
+ queryTitle: queryTitle,
108
+ extendedQuery: extendedQuery
107
109
  });
108
110
  }
109
111
  setSort(property, order) {
@@ -118,7 +120,10 @@ export class DriveService {
118
120
  }
119
121
  }
120
122
  updateCurrentFolder(currentFolderID) {
121
- patchState(this.state$, { currentFolder: currentFolderID || null });
123
+ patchState(this.state$, {
124
+ currentFolder: currentFolderID || null,
125
+ extendedQuery: false,
126
+ });
122
127
  }
123
128
  #copyToFolder(objects, folderId, options, validateNames = true) {
124
129
  return validateNames
@@ -434,4 +439,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
434
439
  providedIn: 'root'
435
440
  }]
436
441
  }], ctorParameters: () => [] });
437
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJpdmUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYXBwcy9kcml2ZS9zcmMvbGliL3NlcnZpY2VzL2RyaXZlL2RyaXZlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4RCxPQUFPLEVBQ0wsY0FBYyxFQUNkLG1CQUFtQixFQUNuQixnQkFBZ0IsRUFDaEIsa0JBQWtCLEVBRWxCLFVBQVUsRUFDVixZQUFZLEVBRVosYUFBYSxFQUNiLFVBQVUsRUFFVixZQUFZLEVBQ2IsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQVUsY0FBYyxFQUFFLFdBQVcsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQy9ELE9BQU8sRUFBYyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xHLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDaEcsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzNELE9BQU8sRUFJTCxpQkFBaUIsRUFDakIsV0FBVyxFQUNYLG9CQUFvQixFQUlyQixNQUFNLG1CQUFt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Q3BFLENBQUM7K0dBOWVVLFlBQVk7bUhBQVosWUFBWSxjQUZYLE1BQU07OzRGQUVQLFlBQVk7a0JBSHhCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IE5hdmlnYXRpb25TdGFydCwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IHBhdGNoU3RhdGUsIHNpZ25hbFN0YXRlIH0gZnJvbSAnQG5ncngvc2lnbmFscyc7XG5pbXBvcnQge1xuICBCYWNrZW5kU2VydmljZSxcbiAgQmFzZU9iamVjdFR5cGVGaWVsZCxcbiAgQ2xpcGJvYXJkU2VydmljZSxcbiAgQ29udGVudFN0cmVhbUZpZWxkLFxuICBEbXNPYmplY3QsXG4gIERtc1NlcnZpY2UsXG4gIEV2ZW50U2VydmljZSxcbiAgU2VhcmNoUXVlcnksXG4gIFNlYXJjaFNlcnZpY2UsXG4gIFN5c3RlbVR5cGUsXG4gIFl1dkV2ZW50LFxuICBZdXZFdmVudFR5cGVcbn0gZnJvbSAnQHl1dXZpcy9jbGllbnQtY29yZSc7XG5pbXBvcnQgeyBBY3Rpb24sIEFjdGlvbnNTZXJ2aWNlLCBCQVNFX0FDVElPTiB9IGZyb20gJ0B5dXV2aXMvY2xpZW50LWZyYW1ld29yay9hY3Rpb25zJztcbmltcG9ydCB7IFl2Y092ZXJsYXlTZXJ2aWNlIH0gZnJvbSAnQHl1dXZpcy9jb21wb25lbnRzL292ZXJsYXknO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCwgY2F0Y2hFcnJvciwgZmlsdGVyLCBmb3JrSm9pbiwgbWFwLCBvZiwgc3dpdGNoTWFwLCB0YXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFDVElPTl9DT05URVhULCBBUFBfSUQsIEFQUF9TQ0hFTUEsIEZTX1BST1BFUlRJRVMsIEZTX1NPVFMgfSBmcm9tICcuLi8uLi9kcml2ZS5zY2hlbWEnO1xuaW1wb3J0IHsgRFJJVkVfQVBQX0JSRUFEQ1JVTUJfTUFYX0RFUFRIIH0gZnJvbSAnLi4vdG9rZW5zJztcbmltcG9ydCB7XG4gIEJyZWFkQ3J1bWIsXG4gIENyZWF0ZUVycm9yLFxuICBDcmVhdGVSZXN1bHQsXG4gIERSSVZFX0FDVElPTl9NT0RFLFxuICBEUklWRV9FVkVOVCxcbiAgRFJJVkVfUk9PVF9GT0xERVJfSUQsXG4gIERyaXZlU3RhdGUsXG4gIERyaXZlVmFsaWRhdGVQYXlsb2FkLFxuICBEcml2ZVZhbGlkYXRlUmVzcG9uc2Vcbn0gZnJvbSAnLi9kcml2ZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUmVzb2x2ZU5hbWVDb25mbGljdHNDb21wb25lbnQgfSBmcm9tICcuL3Jlc29sdmUtbmFtZS1jb25mbGljdHMvcmVzb2x2ZS1uYW1lLWNvbmZsaWN0cy5jb21wb25lbnQnO1xuaW1wb3J0IHsgUmVzb2x2ZU5hbWVDb25mbGljdHNQYXlsb2FkIH0gZnJvbSAnLi9yZXNvbHZlLW5hbWUtY29uZmxpY3RzL3Jlc29sdmUtbmFtZS1jb25mbGljdHMuaW50ZXJmYWNlJztcbmltcG9ydCB7IG1hcFNlYXJjaFJlc3VsdCB9IGZyb20gJy4vdmVyc2lvbnMvdmVyc2lvbnMubWFwcGluZyc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIERyaXZlU2VydmljZSB7XG4gIHJlYWRvbmx5ICNhY3Rpb25zU2VydmljZSA9IGluamVjdChBY3Rpb25zU2VydmljZSk7XG4gIHJlYWRvbmx5ICNldmVudFNlcnZpY2UgPSBpbmplY3QoRXZlbnRTZXJ2aWNlKTtcbiAgcmVhZG9ubHkgI3JvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuICByZWFkb25seSAjZG1zU2VydmljZSA9IGluamVjdChEbXNTZXJ2aWNlKTtcbiAgcmVhZG9ubHkgI3NlYXJjaFNlcnZpY2UgPSBpbmplY3QoU2VhcmNoU2VydmljZSk7XG4gIHJlYWRvbmx5ICNvdmVybGF5ID0gaW5qZWN0KFl2Y092ZXJsYXlTZXJ2aWNlKTtcbiAgcmVhZG9ubHkgI2JhY2tlbmQgPSBpbmplY3QoQmFja2VuZFNlcnZpY2UpO1xuICByZWFkb25seSAjY2xpcGJvYXJkU2VydmljZSA9IGluamVjdChDbGlwYm9hcmRTZXJ2aWNlKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IE1BWF9ERVBUSDogbnVtYmVyID0gaW5qZWN0KERSSVZFX0FQUF9CUkVBRENSVU1CX01BWF9ERVBUSCk7XG4gIHByaXZhdGUgYnJlYWRjcnVtYkNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIHsgbmFtZTogc3RyaW5nOyBpZDogc3RyaW5nOyBwYXJlbnRJZDogc3RyaW5nIHwgbnVsbCB9PigpO1xuXG4gICNldmVudFNvdXJjZSA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgZXZlbnRzJDogT2JzZXJ2YWJsZTxzdHJpbmc+ID0gdGhpcy4jZXZlbnRTb3VyY2UuYXNPYnNlcnZhYmxlKCk7XG5cbiAgcmVhZG9ubHkgI2RlZmF1bHRTb3J0OiB7XG4gICAgcHJvcGVydHk6IHN0cmluZztcbiAgICBvcmRlcjogJ2FzYycgfCAnZGVzYyc7XG4gIH0gPSB7XG4gICAgcHJvcGVydHk6IEZTX1BST1BFUlRJRVMubmFtZSxcbiAgICBvcmRlcjogJ2FzYydcbiAgfTtcblxuICByZWFkb25seSBpbml0aWFsU3RhdGU6IERyaXZlU3RhdGUgPSB7XG4gICAgY3VycmVudEZvbGRlcjogbnVsbCxcbiAgICBxdWVyeTogbnVsbCxcbiAgICBxdWVyeVRpdGxlOiBudWxsLFxuICAgIHNlbGVjdGlvbjogW10sXG4gICAgYWN0aW9uczogW10sXG4gICAgYnVzeTogZmFsc2UsXG4gICAgc29ydDogdGhpcy4jZGVmYXVsdFNvcnQsXG4gICAgYnJlYWRjcnVtYjoge1xuICAgICAgbG9hZGluZzogZmFsc2UsXG4gICAgICBwYXJ0aWFsOiBmYWxzZSxcbiAgICAgIGl0ZW1zOiBbXSxcbiAgICAgIGZvbGRlcjogbnVsbFxuICAgIH0sXG4gICAgdmVyc2lvbnM6IHtcbiAgICAgIHZlcnNpb25zTGlzdDogW10sXG4gICAgICBzZWxlY3RlZFZlcnNpb246IG51bGxcbiAgICB9LFxuICAgIHNlbGVjdGVkRG1zT2JqZWN0OiBudWxsXG4gIH07XG5cbiAgcmVhZG9ubHkgc3RhdGUkID0gc2lnbmFsU3RhdGU8RHJpdmVTdGF0ZT4odGhpcy5pbml0aWFsU3RhdGUpO1xuICByZWFkb25seSBicmVhZGNydW1iRm9sZGVyUHJldmlldyA9IHRoaXMuc3RhdGUkLmJyZWFkY3J1bWIuZm9sZGVyO1xuICBwcml2YXRlIF9idXN5VGFza0NvdW50ID0gMDtcbiAgcHJpdmF0ZSBfZGVmYXVsdFJpYmJvbkFjdGlvbnM6IEFjdGlvbltdID0gW107XG4gIGxhc3RSb3V0ZVVSTD86IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLiNyb3V0ZXIuZXZlbnRzXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKCksXG4gICAgICAgIGZpbHRlcigoZSkgPT4gdGhpcy5zdGF0ZSQuc2VsZWN0aW9uKCkubGVuZ3RoID4gMCAmJiBlIGluc3RhbmNlb2YgTmF2aWdhdGlvblN0YXJ0KVxuICAgICAgKVxuICAgICAgLy8gY2xlYXIgc2VsZWN0aW9uIG9uIHJvdXRlIGNobmFnZXNcbiAgICAgIC5zdWJzY3JpYmUoeyBuZXh0OiAoKSA9PiB0aGlzLnNldFNlbGVjdGlvbihbXSkgfSk7XG5cbiAgICB0aGlzLiNldmVudFNlcnZpY2Uub24oWXV2RXZlbnRUeXBlLkRNU19PQkpFQ1RfVVBEQVRFRCkuc3Vic2NyaWJlKChlOiBZdXZFdmVudCkgPT4ge1xuICAgICAgLy8gY2hlY2sgaWYgY3VycmVudCBzZWxlY3Rpb24gY29udGFpbnMgdGhlIHVwZGF0ZWQgb2JqZWN0XG4gICAgICBjb25zdCBkbXNPYmplY3QgPSBlLmRhdGEgYXMgRG1zT2JqZWN0O1xuICAgICAgY29uc3Qgc2VsZWN0aW9uID0gdGhpcy5zdGF0ZSQuc2VsZWN0aW9uKCk7XG4gICAgICBjb25zdCBtYXRjaElkeCA9IHNlbGVjdGlvbi5maW5kSW5kZXgoKG8pID0+IG8uaWQgPT09IGRtc09iamVjdC5pZCk7XG4gICAgICBpZiAobWF0Y2hJZHggIT09IC0xKSB7XG4gICAgICAgIC8vIHVwZGF0ZSB0aGUgb2JqZWN0IGluIHRoZSBzZWxlY3Rpb25cbiAgICAgICAgc2VsZWN0aW9uW21hdGNoSWR4XSA9IGRtc09iamVjdDtcbiAgICAgICAgcGF0Y2hTdGF0ZSh0aGlzLnN0YXRlJCwgeyBzZWxlY3Rpb246IFsuLi5zZWxlY3Rpb25dIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy4jZXZlbnRTZXJ2aWNlXG4gICAgICAub24oWXV2RXZlbnRUeXBlLkRNU19PQkpFQ1RfREVMRVRFRCwgWXV2RXZlbnRUeXBlLkRNU19PQkpFQ1RfQ1JFQVRFRCwgWXV2RXZlbnRUeXBlLkRNU19PQkpFQ1RTX01PVkVEKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLmVtaXRFdmVudChEUklWRV9FVkVOVC5yZWZyZXNoKSk7XG4gIH1cblxuICAjbWFwZWRDdXJyZW50Rm9sZGVyKCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlJC5jdXJyZW50Rm9sZGVyKCkgPT09IERSSVZFX1JPT1RfRk9MREVSX0lEID8gbnVsbCA6IHRoaXMuc3RhdGUkLmN1cnJlbnRGb2xkZXIoKTtcbiAgfVxuXG4gIGVtaXRFdmVudChldnQ6IHN0cmluZykge1xuICAgIHRoaXMuI2V2ZW50U291cmNlLm5leHQoZXZ0KTtcbiAgfVxuXG4gIHNldEJ1c3koYnVzeTogYm9vbGVhbikge1xuICAgIGlmIChidXN5KSB0aGlzLl9idXN5VGFza0NvdW50Kys7XG4gICAgZWxzZSBpZiAodGhpcy5fYnVzeVRhc2tDb3VudCA+IDApIHRoaXMuX2J1c3lUYXNrQ291bnQtLTtcbiAgICBwYXRjaFN0YXRlKHRoaXMuc3RhdGUkLCB7IGJ1c3k6IHRoaXMuX2J1c3lUYXNrQ291bnQgIT09IDAgfSk7XG4gIH1cblxuICBzZXRTZWxlY3Rpb24obzogRG1zT2JqZWN0W10pIHtcbiAgICBwYXRjaFN0YXRlKHRoaXMuc3RhdGUkLCB7IHNlbGVjdGlvbjogbyB9KTtcbiAgICB0aGlzLl9nZXRBY3Rpb25zKCk7XG4gIH1cblxuICB1cGRhdGVRdWVyeShxdWVyeTogU2VhcmNoUXVlcnksIHF1ZXJ5VGl0bGU6IHN0cmluZyB8IG51bGwgPSBudWxsKSB7XG4gICAgcGF0Y2hTdGF0ZSh0aGlzLnN0YXRlJCwge1xuICAgICAgcXVlcnk6IHRoaXMuYXBwbHlGb2xkZXJMaXN0U2VhcmNoQ29uZGl0aW9ucyhxdWVyeSksXG4gICAgICBxdWVyeVRpdGxlOiBxdWVyeVRpdGxlXG4gICAgfSk7XG4gIH1cblxuICBzZXRTb3J0KHByb3BlcnR5OiBzdHJpbmcsIG9yZGVyOiAnYXNjJyB8ICdkZXNjJykge1xuICAgIGNvbnN0IHN0YXRlUXVlcnkgPSB0aGlzLnN0YXRlJC5xdWVyeSgpO1xuICAgIGlmIChzdGF0ZVF1ZXJ5KSB7XG4gICAgICBjb25zdCBjbG9uZWRRdWVyeVN0YXRlID0gc3RydWN0dXJlZENsb25lKHN0YXRlUXVlcnkpO1xuXG4gICAgICAvLyBUT0RPOiByZW1vdmUgaWYgZm9sZGVycyBzaG91bGQgc3RheSBvbiB0b3BcbiAgICAgIGNsb25lZFF1ZXJ5U3RhdGUuc29ydCA9IFtdO1xuXG4gICAgICBjb25zdCBzb3J0ID0gcHJvcGVydHkgPyB7IHByb3BlcnR5LCBvcmRlciB9IDogeyAuLi50aGlzLiNkZWZhdWx0U29ydCwgb3JkZXIgfTtcblxuICAgICAgcGF0Y2hTdGF0ZSh0aGlzLnN0YXRlJCwgeyBxdWVyeTogY2xvbmVkUXVlcnlTdGF0ZSwgc29ydCB9KTtcbiAgICAgIHRoaXMuYXBwbHlGb2xkZXJMaXN0U2VhcmNoQ29uZGl0aW9ucyhjbG9uZWRRdWVyeVN0YXRlLCAhcHJvcGVydHkpO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZUN1cnJlbnRGb2xkZXIoY3VycmVudEZvbGRlcklEOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKSB7XG4gICAgcGF0Y2hTdGF0ZSh0aGlzLnN0YXRlJCwgeyBjdXJyZW50Rm9sZGVyOiBjdXJyZW50Rm9sZGVySUQgfHwgbnVsbCB9KTtcbiAgfVxuXG4gICNjb3B5VG9Gb2xkZXIob2JqZWN0czogRG1zT2JqZWN0W10sIGZvbGRlcklkOiBzdHJpbmcgfCBudWxsLCBvcHRpb25zOiB7IHdhaXRGb3JTZWFyY2hDb25zaXN0ZW5jeTogYm9vbGVhbiB9LCB2YWxpZGF0ZU5hbWVzID0gdHJ1ZSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHZhbGlkYXRlTmFtZXNcbiAgICAgID8gdGhpcy52YWxpZGF0ZU5hbWVzKFxuICAgICAgICAgIG9iamVjdHMuZmlsdGVyKChvKSA9PiBvLnNvdHMuaW5jbHVkZXMoRlNfU09UUy5vYmplY3QpKS5tYXAoKGYpID0+IGYuZGF0YVtGU19QUk9QRVJUSUVTLm5hbWVdIGFzIHN0cmluZyksXG4gICAgICAgICAgZm9sZGVySWRcbiAgICAgICAgKS5waXBlKFxuICAgICAgICAgIHN3aXRjaE1hcCgocmVzOiBEcml2ZVZhbGlkYXRlUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXMuZXhpc3RpbmdGaWxlTmFtZXM/Lmxlbmd0aCB8fCByZXMuaW52YWxpZEZpbGVOYW1lcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHRoaXMuI3Jlc29sdmVOYW1lQ29uZmxpY3RzKHtcbiAgICAgICAgICAgICAgICBleGlzdGluZ0ZpbGVOYW1lczogcmVzLmV4aXN0aW5nRmlsZU5hbWVzLFxuICAgICAgICAgICAgICAgIGludmFsaWRGaWxlTmFtZXM6IHJlcy5pbnZhbGlkRmlsZU5hbWVzLFxuICAgICAgICAgICAgICAgIG1vZGU6ICdjb3B5JyxcbiAgICAgICAgICAgICAgICBpdGVtczogb2JqZWN0c1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgcmV0dXJuIG9mKFtdKTtcbiAgICAgICAgICAgIH0gZWxzZSByZXR1cm4gdGhpcy4jZG1zU2VydmljZS5jb3B5RG1zT2JqZWN0cyhmb2xkZXJJZCwgb2JqZWN0cywgb3B0aW9ucyk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgOiB0aGlzLiNkbXNTZXJ2aWNlLmNvcHlEbXNPYmplY3RzKGZvbGRlcklkLCBvYmplY3RzLCBvcHRpb25zKTtcbiAgfVxuXG4gICNtb3ZlVG9Gb2xkZXIob2JqZWN0czogRG1zT2JqZWN0W10sIGZvbGRlcklkOiBzdHJpbmcgfCBudWxsLCBvcHRpb25zOiB7IHdhaXRGb3JTZWFyY2hDb25zaXN0ZW5jeTogYm9vbGVhbiB9LCB2YWxpZGF0ZU5hbWVzID0gdHJ1ZSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHZhbGlkYXRlTmFtZXNcbiAgICAgID8gdGhpcy52YWxpZGF0ZU5hbWVzKFxuICAgICAgICAgIG9iamVjdHMuZmlsdGVyKChvKSA9PiBvLnNvdHMuaW5jbHVkZXMoRlNfU09UUy5vYmplY3QpKS5tYXAoKGYpID0+IGYuZGF0YVtGU19QUk9QRVJUSUVTLm5hbWVdIGFzIHN0cmluZyksXG4gICAgICAgICAgZm9sZGVySWRcbiAgICAgICAgKS5waXBlKFxuICAgICAgICAgIHN3aXRjaE1hcCgocmVzOiBEcml2ZVZhbGlkYXRlUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXMuZXhpc3RpbmdGaWxlTmFtZXM/Lmxlbmd0aCB8fCByZXMuaW52YWxpZEZpbGVOYW1lcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdWQUxJREFUSU9OOiAnLCB7IHJlcyB9KTtcbiAgICAgICAgICAgICAgdGhpcy4jcmVzb2x2ZU5hbWVDb25mbGljdHMoe1xuICAgICAgICAgICAgICAgIGV4aXN0aW5nRmlsZU5hbWVzOiByZXMuZXhpc3RpbmdGaWxlTmFtZXMsXG4gICAgICAgICAgICAgICAgaW52YWxpZEZpbGVOYW1lczogcmVzLmludmFsaWRGaWxlTmFtZXMsXG4gICAgICAgICAgICAgICAgbW9kZTogJ21vdmUnLFxuICAgICAgICAgICAgICAgIGl0ZW1zOiBvYmplY3RzXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICByZXR1cm4gb2YoW10pO1xuICAgICAgICAgICAgfSBlbHNlIHJldHVybiB0aGlzLiNkbXNTZXJ2aWNlLm1vdmVEbXNPYmplY3RzKGZvbGRlcklkLCBvYmplY3RzLCBvcHRpb25zKTtcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICA6IHRoaXMuI2Rtc1NlcnZpY2UubW92ZURtc09iamVjdHMoZm9sZGVySWQsIG9iamVjdHMsIG9wdGlvbnMpO1xuICB9XG5cbiAgY29weVRvQ3VycmVudEZvbGRlcihvYmplY3RzOiBEbXNPYmplY3RbXSwgdmFsaWRhdGVOYW1lcyA9IHRydWUpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB7IHdhaXRGb3JTZWFyY2hDb25zaXN0ZW5jeTogdHJ1ZSB9O1xuICAgIHJldHVybiB0aGlzLiNjb3B5VG9Gb2xkZXIob2JqZWN0cywgdGhpcy4jbWFwZWRDdXJyZW50Rm9sZGVyKCksIG9wdGlvbnMsIHZhbGlkYXRlTmFtZXMpO1xuICB9XG5cbiAgbW92ZVRvQ3VycmVudEZvbGRlcihvYmplY3RzOiBEbXNPYmplY3RbXSwgdmFsaWRhdGVOYW1lcyA9IHRydWUpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB7IHdhaXRGb3JTZWFyY2hDb25zaXN0ZW5jeTogdHJ1ZSB9O1xuICAgIHJldHVybiB0aGlzLiNtb3ZlVG9Gb2xkZXIob2JqZWN0cywgdGhpcy4jbWFwZWRDdXJyZW50Rm9sZGVyKCksIG9wdGlvbnMsIHZhbGlkYXRlTmFtZXMpO1xuICB9XG5cbiAgI3Jlc29sdmVOYW1lQ29uZmxpY3RzKHBheWxvYWQ6IFJlc29sdmVOYW1lQ29uZmxpY3RzUGF5bG9hZCkge1xuICAgIHRoaXMuI292ZXJsYXkub3BlbihSZXNvbHZlTmFtZUNvbmZsaWN0c0NvbXBvbmVudCwgcGF5bG9hZCwge1xuICAgICAgbWF4V2lkdGg6ICc0MDBweCdcbiAgICB9KTtcbiAgfVxuXG4gIHBhc3RlRnJvbUNsaXBib2FyZChkZXN0aW5hdGlvbk9iamVjdD86IERtc09iamVjdCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3QgY2QgPSB0aGlzLiNjbGlwYm9hcmRTZXJ2aWNlLmdldENsaXBib2FyZERhdGEoQVBQX0lEKTtcbiAgICBjb25zdCBkZXN0aW5hdGlvbiA9IGRlc3RpbmF0aW9uT2JqZWN0Py5pc0ZvbGRlciA/IGRlc3RpbmF0aW9uT2JqZWN0LmlkIDogdGhpcy4jbWFwZWRDdXJyZW50Rm9sZGVyKCk7XG4gICAgcmV0dXJuIChcbiAgICAgIGNkICYmIGNkLm9iamVjdHMgJiYgY2Qub2JqZWN0cy5sZW5ndGggPiAwXG4gICAgICAgID8gY2Q/Lm1vZGUgPT09IERSSVZFX0FDVElPTl9NT0RFLkNVVFxuICAgICAgICAgID8gdGhpcy4jbW92ZVRvRm9sZGVyKGNkLm9iamVjdHMgfHwgW10sIGRlc3RpbmF0aW9uLCB7IHdhaXRGb3JTZWFyY2hDb25zaXN0ZW5jeTogdHJ1ZSB9LCB0cnVlKVxuICAgICAgICAgIDogY2Q/Lm1vZGUgPT09IERSSVZFX0FDVElPTl9NT0RFLkNPUFlcbiAgICAgICAgICAgID8gdGhpcy4jY29weVRvRm9sZGVyKGNkLm9iamVjdHMgfHwgW10sIGRlc3RpbmF0aW9uLCB7IHdhaXRGb3JTZWFyY2hDb25zaXN0ZW5jeTogdHJ1ZSB9LCB0cnVlKVxuICAgICAgICAgICAgOiBvZihudWxsKVxuICAgICAgICA6IG9mKG51bGwpXG4gICAgKS5waXBlKFxuICAgICAgdGFwKChyZXMpID0+IHtcbiAgICAgICAgcmVzICYmIHRoaXMuZW1pdEV2ZW50KERSSVZFX0VWRU5ULnJlZnJlc2gpO1xuICAgICAgICB0aGlzLiNjbGlwYm9hcmRTZXJ2aWNlLmNsZWFyKCk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBjaGVja05hbWVzQW5kVXBsb2FkKGZpbGVzOiBGaWxlW10sIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IE9ic2VydmFibGU8Q3JlYXRlUmVzdWx0W10+IHtcbiAgICByZXR1cm4gdGhpcy52YWxpZGF0ZU5hbWVzKFxuICAgICAgZmlsZXMubWFwKChmKSA9PiBmLm5hbWUpLFxuICAgICAgdGhpcy4jbWFwZWRDdXJyZW50Rm9sZGVyKClcbiAgICApLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHJlczogRHJpdmVWYWxpZGF0ZVJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGlmIChyZXMuZXhpc3RpbmdGaWxlTmFtZXM/Lmxlbmd0aCB8fCByZXMuaW52YWxpZEZpbGVOYW1lcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgY29uc3QgcmVzUGF5bG9hZDogUmVzb2x2ZU5hbWVDb25mbGljdHNQYXlsb2FkID0ge1xuICAgICAgICAgICAgZXhpc3RpbmdGaWxlTmFtZXM6IHJlcy5leGlzdGluZ0ZpbGVOYW1lcyxcbiAgICAgICAgICAgIGludmFsaWRGaWxlTmFtZXM6IHJlcy5pbnZhbGlkRmlsZU5hbWVzLFxuICAgICAgICAgICAgbW9kZTogJ3VwbG9hZCcsXG4gICAgICAgICAgICBpdGVtczogZmlsZXMsXG4gICAgICAgICAgICBkYXRhXG4gICAgICAgICAgfTtcbiAgICAgICAgICB0aGlzLiNvdmVybGF5Lm9wZW4oUmVzb2x2ZU5hbWVDb25mbGljdHNDb21wb25lbnQsIHJlc1BheWxvYWQpO1xuICAgICAgICAgIHJldHVybiBvZihbXSk7XG4gICAgICAgIH0gZWxzZSByZXR1cm4gdGhpcy51cGxvYWQoZmlsZXMsIGRhdGEpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgdXBsb2FkQ29udGVudChvYmplY3RJZDogc3RyaW5nLCBmaWxlOiBGaWxlKTogT2JzZXJ2YWJsZTxDcmVhdGVSZXN1bHRbXT4ge1xuICAgIHJldHVybiB0aGlzLiNkbXNTZXJ2aWNlLnVwbG9hZENvbnRlbnQob2JqZWN0SWQsIGZpbGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwbG9hZHMgZmlsZXMgdG8gdGhlIGN1cnJlbnQgZm9sZGVyXG4gICAqIEBwYXJhbSBmaWxlcyBmaWxlcyB0byBiZSB1cGxvYWRlZFxuICAgKiBAcGFyYW0gZGF0YSBhZGRpdGlvbmFsIGRhdGEgdG8gYmUgYXBwbGllZCB0byB0aGUgb2JqZWN0XG4gICAqL1xuICB1cGxvYWQoZmlsZXM6IEZpbGVbXSwgZGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogT2JzZXJ2YWJsZTxDcmVhdGVSZXN1bHRbXT4ge1xuICAgIHJldHVybiBmb3JrSm9pbihcbiAgICAgIGZpbGVzLm1hcCgoZmlsZTogRmlsZSkgPT4ge1xuICAgICAgICBjb25zdCB1cGxvYWREYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0gZGF0YSB8fCB7fTtcbiAgICAgICAgLy8gYXBwbHkgZmlsZXN5c3RlbSBTT1RcbiAgICAgICAgY29uc3Qgc290cyA9IHVwbG9hZERhdGFbQmFzZU9iamVjdFR5cGVGaWVsZC5TRUNPTkRBUllfT0JKRUNUX1RZUEVfSURTXSB8fCBbXTtcbiAgICAgICAgdXBsb2FkRGF0YVtCYXNlT2JqZWN0VHlwZUZpZWxkLlNFQ09OREFSWV9PQkpFQ1RfVFlQRV9JRFNdID0gWy4uLnNvdHMsIEZTX1NPVFMub2JqZWN0XTtcbiAgICAgICAgLy8gc2V0dXAgdGhlIG5hbWUgdG8gYmUgdGhlIGZpbGVuYW1lXG4gICAgICAgIHVwbG9hZERhdGFbRlNfUFJPUEVSVElFUy5uYW1lXSA9IGZpbGUubmFtZTtcbiAgICAgICAgY29uc3QgY2YgPSB0aGlzLiNtYXBlZEN1cnJlbnRGb2xkZXIoKTtcbiAgICAgICAgaWYgKGNmICYmIGNmICE9PSBEUklWRV9ST09UX0ZPTERFUl9JRCkgdXBsb2FkRGF0YVtCYXNlT2JqZWN0VHlwZUZpZWxkLlBBUkVOVF9JRF0gPSBjZjtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2Rtc1NlcnZpY2UuY3JlYXRlRG1zT2JqZWN0KFN5c3RlbVR5cGUuRE9DVU1FTlQsIHVwbG9hZERhdGEsIFtmaWxlXSwgZmlsZS5uYW1lKS5waXBlKFxuICAgICAgICAgIG1hcCgocmVzKSA9PiAoeyBpZDogcmVzWzBdIH0pKSxcbiAgICAgICAgICBjYXRjaEVycm9yKChlOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YoeyBlcnJvcjogdGhpcy4jbWFwQ3JlYXRlRXJyb3IoZSkgfSkpXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBjcmVhdGVGb2xkZXIobmFtZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxDcmVhdGVSZXN1bHQ+IHtcbiAgICBjb25zdCBwYXJlbnRJRCA9IHRoaXMuI21hcGVkQ3VycmVudEZvbGRlcigpO1xuICAgIGNvbnN0IGRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgICBkYXRhW0ZTX1BST1BFUlRJRVMubmFtZV0gPSBuYW1lO1xuICAgIC8vIGFwcGx5IGZpbGVzeXN0ZW0gU09UXG4gICAgZGF0YVtCYXNlT2JqZWN0VHlwZUZpZWxkLlNFQ09OREFSWV9PQkpFQ1RfVFlQRV9JRFNdID0gW0ZTX1NPVFMub2JqZWN0XTtcbiAgICBpZiAocGFyZW50SUQgJiYgcGFyZW50SUQgIT09IERSSVZFX1JPT1RfRk9MREVSX0lEKSBkYXRhW0Jhc2VPYmplY3RUeXBlRmllbGQuUEFSRU5UX0lEXSA9IHBhcmVudElEO1xuICAgIHJldHVybiB0aGlzLiNkbXNTZXJ2aWNlLmNyZWF0ZURtc09iamVjdChBUFBfU0NIRU1BLnR5cGVzLmZvbGRlci5vYmplY3RUeXBlIHx8ICcnLCBkYXRhLCBbXSkucGlwZShcbiAgICAgIG1hcCgocmVzKSA9PiAoeyBpZDogcmVzWzBdIH0pKSxcbiAgICAgIGNhdGNoRXJyb3IoKGU6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZih7IGVycm9yOiB0aGlzLiNtYXBDcmVhdGVFcnJvcihlKSB9KSlcbiAgICApO1xuICB9XG5cbiAgI21hcENyZWF0ZUVycm9yKGU6IEh0dHBFcnJvclJlc3BvbnNlKTogQ3JlYXRlRXJyb3Ige1xuICAgIGxldCBlcnJvcjogQ3JlYXRlRXJyb3IgPSAnZGVmYXVsdCc7XG4gICAgY29uc3QgZWMgPSBlLmVycm9yLnNlcnZpY2VFcnJvckNvZGU7XG4gICAgaWYgKGVjID09PSA5OTk5OSkge1xuICAgICAgY29uc3QgaWVjID0gZS5lcnJvci5pbm5lckVycm9yPy5zZXJ2aWNlRXJyb3JDb2RlO1xuICAgICAgaWYgKGllYyA9PT0gMTEwMDApIGVycm9yID0gJ25hbWVFeGlzdHMnO1xuICAgIH1cbiAgICByZXR1cm4gZXJyb3I7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGZvciBleGlzdGluZyBuYW1lcyBhbmQgaW52YWxpZCBjaGFyYWN0ZXJzXG4gICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIHRvIGJlIGNoZWNrZWRcbiAgICogQHBhcmFtIHBhcmVudElkIFRoZSBwYXJlbnQgZm9sZGVyICh3aWxsIGJlICdyb290JyBpZiBub3QgcHJvdmlkZWQpXG4gICAqIEByZXR1cm5zIGFscmVhZHkgZXhpc3RpbmcgbmFtZXNcbiAgICovXG4gIHZhbGlkYXRlTmFtZXMobmFtZXM6IHN0cmluZ1tdLCBwYXJlbnRJZD86IHN0cmluZyB8IG51bGwpOiBPYnNlcnZhYmxlPERyaXZlVmFsaWRhdGVSZXNwb25zZT4ge1xuICAgIGNvbnNvbGUubG9nKHsgbmFtZXMsIHBhcmVudElkIH0pO1xuXG4gICAgaWYgKHBhcmVudElkID09PSBEUklWRV9ST09UX0ZPTERFUl9JRCkgcGFyZW50SWQgPSB1bmRlZmluZWQ7XG4gICAgY29uc3QgZHZwOiBEcml2ZVZhbGlkYXRlUGF5bG9hZCA9IHtcbiAgICAgIGFwcDogJ29zZHJpdmUnLFxuICAgICAgZmlsZU5hbWVzOiBuYW1lcyxcbiAgICAgIHRhcmdldEZvbGRlcklkOiBwYXJlbnRJZCB8fCB1bmRlZmluZWRcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLiNiYWNrZW5kLnBvc3QoJy9kbXMvb2JqZWN0cy92YWxpZGF0ZScsIGR2cCkucGlwZShjYXRjaEVycm9yKChyZXM6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZihyZXMuZXJyb3IpKSk7XG4gIH1cblxuICBnZXREZWZhdWx0UmliYm9uQWN0aW9ucygpIHtcbiAgICBpZiAoIXRoaXMuX2RlZmF1bHRSaWJib25BY3Rpb25zLmxlbmd0aCkge1xuICAgICAgLy9bQkFTRV9BQ1RJT04uZG93bmxvYWQsIEJBU0VfQUNUSU9OLmRlbGV0ZSwgJ2FwcC5kcml2ZS5hY3Rpb24ucmVuYW1lJywgQkFTRV9BQ1RJT04uY29weSwgQkFTRV9BQ1RJT04uY3V0XVxuICAgICAgT2JqZWN0LnZhbHVlcyh7IC4uLkJBU0VfQUNUSU9OLCByZW5hbWU6ICdhcHAuZHJpdmUuYWN0aW9uLnJlbmFtZScgfSkuZm9yRWFjaCgoaWQpID0+IHtcbiAgICAgICAgY29uc3QgYSA9IHRoaXMuI2FjdGlvbnNTZXJ2aWNlLmdldEFjdGlvbkJ5SWQoaWQsIEFDVElPTl9DT05URVhUKTtcbiAgICAgICAgaWYgKGEpIHRoaXMuX2RlZmF1bHRSaWJib25BY3Rpb25zLnB1c2goYSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2RlZmF1bHRSaWJib25BY3Rpb25zO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0QWN0aW9ucygpIHtcbiAgICB0aGlzLnNldEJ1c3kodHJ1ZSk7XG4gICAgdGhpcy4jYWN0aW9uc1NlcnZpY2VcbiAgICAgIC5nZXRBY3Rpb25zKHRoaXMuc3RhdGUkLnNlbGVjdGlvbigpLCB7XG4gICAgICAgIGNvbnRleHQ6IEFDVElPTl9DT05URVhUXG4gICAgICB9KVxuICAgICAgLnN1YnNjcmliZSgoYWN0aW9uczogQWN0aW9uW10pID0+IHtcbiAgICAgICAgcGF0Y2hTdGF0ZSh0aGlzLnN0YXRlJCwgeyBhY3Rpb25zIH0pO1xuICAgICAgfSlcbiAgICAgIC5hZGQoKCkgPT4gdGhpcy5zZXRCdXN5KGZhbHNlKSk7XG4gIH1cblxuICAvKipcbiAgICogQXBwbHkgc2VhcmNoIGNvbmRpdGlvbnMgcmVnYXJkaW5nIGZvbGRlciBsaXN0aW5nc1xuICAgKiBAcGFyYW0gcVxuICAgKi9cbiAgYXBwbHlGb2xkZXJMaXN0U2VhcmNoQ29uZGl0aW9ucyhxOiBTZWFyY2hRdWVyeSwgYWRkQmFzZVR5cGVJZCA9IHRydWUpOiBTZWFyY2hRdWVyeSB7XG4gICAgLy8gZm9sZGVycyBmaXJzdFxuICAgIGlmICghcS5zb3J0KSBxLnNvcnQgPSBbXTtcbiAgICBhZGRCYXNlVHlwZUlkICYmXG4gICAgICBxLnNvcnQucHVzaCh7XG4gICAgICAgIGZpZWxkOiBCYXNlT2JqZWN0VHlwZUZpZWxkLkJBU0VfVFlQRV9JRCxcbiAgICAgICAgb3JkZXI6ICdkZXNjJ1xuICAgICAgfSk7XG4gICAgcSA9IHRoaXMuYXBwbHlCYXNpY1NlYXJjaENvbmRpdGlvbnMocSk7XG5cbiAgICByZXR1cm4gcTtcbiAgfVxuXG4gIGFwcGx5QmFzaWNTZWFyY2hDb25kaXRpb25zKHE6IFNlYXJjaFF1ZXJ5KTogU2VhcmNoUXVlcnkge1xuICAgIHEuZmllbGRzID0gW1xuICAgICAgQmFzZU9iamVjdFR5cGVGaWVsZC5PQkpFQ1RfSUQsXG4gICAgICBCYXNlT2JqZWN0VHlwZUZpZWxkLk1PRElGSUNBVElPTl9EQVRFLFxuICAgICAgQmFzZU9iamVjdFR5cGVGaWVsZC5NT0RJRklFRF9CWSxcbiAgICAgIENvbnRlbnRTdHJlYW1GaWVsZC5GSUxFTkFNRSxcbiAgICAgIENvbnRlbnRTdHJlYW1GaWVsZC5NSU1FX1RZUEUsXG4gICAgICBDb250ZW50U3RyZWFtRmllbGQuSUQsXG4gICAgICBDb250ZW50U3RyZWFtRmllbGQuTEVOR1RIXG4gICAgXTtcbiAgICBpZiAoIXEudHlwZXMgfHwgIXEudHlwZXMuaW5jbHVkZXMoRlNfU09UUy5vYmplY3QpKSBxLnR5cGVzID0gWy4uLihxLnR5cGVzIHx8IFtdKSwgRlNfU09UUy5vYmplY3RdO1xuICAgIC8vIHEuc29ydE9wdGlvbnMucHVzaChuZXcgU29ydE9wdGlvbihCYXNlT2JqZWN0VHlwZUZpZWxkLkJBU0VfVFlQRV9JRCwgJ2Rlc2MnKSk7XG4gICAgY29uc3Qgc29ydCA9IHRoaXMuc3RhdGUkLnNvcnQoKSB8fCB0aGlzLiNkZWZhdWx0U29ydDtcbiAgICBpZiAoIXEuc29ydCkgcS5zb3J0ID0gW107XG4gICAgcS5zb3J0LnB1c2goe1xuICAgICAgZmllbGQ6IHNvcnQucHJvcGVydHksXG4gICAgICBvcmRlcjogc29ydC5vcmRlclxuICAgIH0pO1xuICAgIHEuaW5jbHVkZVBlcm1pc3Npb25zID0gdHJ1ZTtcbiAgICAvLyBuZXcgU29ydE9wdGlvbihzb3J0LnByb3BlcnR5LCBzb3J0Lm9yZGVyKSk7XG4gICAgcmV0dXJuIHE7XG4gIH1cblxuICByZXNvbHZlRmlsZXNTdGF0ZShpZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Rm9sZGVySGllcmFyY2h5KGlkKTtcbiAgfVxuXG4gIGdldEZvbGRlckhpZXJhcmNoeShmb2xkZXJJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxCcmVhZENydW1iW10+IHtcbiAgICBwYXRjaFN0YXRlKHRoaXMuc3RhdGUkLCB7XG4gICAgICBicmVhZGNydW1iOiB7XG4gICAgICAgIC4uLnRoaXMuaW5pdGlhbFN0YXRlLmJyZWFkY3J1bWIsXG4gICAgICAgIGxvYWRpbmc6IHRydWVcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBmb2xkZXJJZCA9PT0gRFJJVkVfUk9PVF9GT0xERVJfSURcbiAgICAgID8gb2YoW10pXG4gICAgICA6IHRoaXMuI2ZldGNoRm9sZGVyKGZvbGRlcklkLCAwLCB0aGlzLk1BWF9ERVBUSCkucGlwZShcbiAgICAgICAgICB0YXAoKHJlczogeyBwYXJ0aWFsOiBib29sZWFuOyBpdGVtczogQnJlYWRDcnVtYltdIH0pID0+IHtcbiAgICAgICAgICAgIGxldCBpdGVtczogQnJlYWRDcnVtYltdID0gW107XG4gICAgICAgICAgICBpZiAocmVzLml0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgaXRlbXMgPSBbLi4uaXRlbXMsIC4uLnJlcy5pdGVtc107XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHBhdGNoU3RhdGUodGhpcy5zdGF0ZSQsIHtcbiAgICAgICAgICAgICAgYnJlYWRjcnVtYjoge1xuICAgICAgICAgICAgICAgIC4uLnRoaXMuaW5pdGlhbFN0YXRlLmJyZWFkY3J1bWIsXG4gICAgICAgICAgICAgICAgcGFydGlhbDogcmVzLnBhcnRpYWwsXG4gICAgICAgICAgICAgICAgbG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgICAgICAgaXRlbXNcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgbWFwKChyZXMpID0+IHJlcy5pdGVtcylcbiAgICAgICAgKTtcbiAgfVxuXG4gICNmZXRjaEZvbGRlcihcbiAgICBmb2xkZXJJZDogc3RyaW5nLFxuICAgIGRlcHRoOiBudW1iZXIsXG4gICAgbWF4RGVwdGg6IG51bWJlclxuICApOiBPYnNlcnZhYmxlPHtcbiAgICBwYXJ0aWFsOiBib29sZWFuO1xuICAgIGl0ZW1zOiBCcmVhZENydW1iW107XG4gIH0+IHtcbiAgICBpZiAoZGVwdGggPj0gbWF4RGVwdGgpIHJldHVybiBvZih7IHBhcnRpYWw6IHRydWUsIGl0ZW1zOiBbXSB9KTtcbiAgICBjb25zdCBjYWNoZWRGb2xkZXIgPSB0aGlzLmJyZWFkY3J1bWJDYWNoZS5nZXQoZm9sZGVySWQpO1xuICAgIGlmIChjYWNoZWRGb2xkZXIpIHtcbiAgICAgIHJldHVybiBjYWNoZWRGb2xkZXIucGFyZW50SWRcbiAgICAgICAgPyB0aGlzLiNmZXRjaEZvbGRlcihjYWNoZWRGb2xkZXIucGFyZW50SWQsIGRlcHRoICsgMSwgbWF4RGVwdGgpLnBpcGUoXG4gICAgICAgICAgICBtYXAoKHBhcmVudEZvbGRlcnMpID0+ICh7XG4gICAgICAgICAgICAgIHBhcnRpYWw6IHBhcmVudEZvbGRlcnMucGFydGlhbCxcbiAgICAgICAgICAgICAgaXRlbXM6IFsuLi5wYXJlbnRGb2xkZXJzLml0ZW1zLCB7IG5hbWU6IGNhY2hlZEZvbGRlci5uYW1lLCBpZDogY2FjaGVkRm9sZGVyLmlkIH1dXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgICApXG4gICAgICAgIDogb2Yoe1xuICAgICAgICAgICAgcGFydGlhbDogZmFsc2UsXG4gICAgICAgICAgICBpdGVtczogW3sgbmFtZTogY2FjaGVkRm9sZGVyLm5hbWUsIGlkOiBjYWNoZWRGb2xkZXIuaWQgfV1cbiAgICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuI2Rtc1NlcnZpY2UuZ2V0RG1zT2JqZWN0KGZvbGRlcklkKS5waXBlKFxuICAgICAgbWFwKChmb2xkZXIpID0+IHtcbiAgICAgICAgY29uc3QgY3VycmVudEZvbGRlciA9IHtcbiAgICAgICAgICBuYW1lOiBmb2xkZXIuZGF0YVtGU19QUk9QRVJUSUVTLm5hbWVdIGFzIHN0cmluZyxcbiAgICAgICAgICBpZDogZm9sZGVyLmRhdGFbQmFzZU9iamVjdFR5cGVGaWVsZC5PQkpFQ1RfSURdIGFzIHN0cmluZyxcbiAgICAgICAgICBwYXJlbnRJZDogZm9sZGVyLnBhcmVudElkXG4gICAgICAgIH07XG4gICAgICAgIC8vIHRoaXMuYnJlYWRjcnVtYkNhY2hlLnNldChmb2xkZXIuaWQsIGN1cnJlbnRGb2xkZXIpO1xuICAgICAgICByZXR1cm4gY3VycmVudEZvbGRlcjtcbiAgICAgIH0pLFxuICAgICAgc3dpdGNoTWFwKChmb2xkZXIpID0+IHtcbiAgICAgICAgaWYgKCFmb2xkZXIucGFyZW50SWQpIHtcbiAgICAgICAgICByZXR1cm4gb2Yoe1xuICAgICAgICAgICAgcGFydGlhbDogZmFsc2UsXG4gICAgICAgICAgICBpdGVtczogW3sgbmFtZTogZm9sZGVyLm5hbWUsIGlkOiBmb2xkZXIuaWQgfV1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLiNmZXRjaEZvbGRlcihmb2xkZXIucGFyZW50SWQsIGRlcHRoICsgMSwgbWF4RGVwdGgpLnBpcGUoXG4gICAgICAgICAgbWFwKChwYXJlbnRGb2xkZXJzKSA9PiAoe1xuICAgICAgICAgICAgcGFydGlhbDogcGFyZW50Rm9sZGVycy5wYXJ0aWFsLFxuICAgICAgICAgICAgaXRlbXM6IFsuLi5wYXJlbnRGb2xkZXJzLml0ZW1zLCB7IG5hbWU6IGZvbGRlci5uYW1lLCBpZDogZm9sZGVyLmlkIH1dXG4gICAgICAgICAgfSkpXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXRWZXJzaW9ucyhpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxEbXNPYmplY3RbXT4ge1xuICAgIHBhdGNoU3RhdGUodGhpcy5zdGF0ZSQsIHsgYnVzeTogdHJ1ZSB9KTtcbiAgICByZXR1cm4gdGhpcy4jZG1zU2VydmljZS5nZXREbXNPYmplY3RWZXJzaW9ucyhpZCkucGlwZShcbiAgICAgIHRhcCgodmVyc2lvbnMpID0+IHtcbiAgICAgICAgcGF0Y2hTdGF0ZSh0aGlzLnN0YXRlJCwge1xuICAgICAgICAgIGJ1c3k6IGZhbHNlLFxuICAgICAgICAgIHZlcnNpb25zOiB7XG4gICAgICAgICAgICB2ZXJzaW9uc0xpc3Q6IG1hcFNlYXJjaFJlc3VsdCh2ZXJzaW9ucyksXG4gICAgICAgICAgICBzZWxlY3RlZFZlcnNpb246IHRoaXMuc3RhdGUkLnZlcnNpb25zKCkuc2VsZWN0ZWRWZXJzaW9uXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldFNlbGVjdGVkRG1zT2JqZWN0KGlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPERtc09iamVjdD4ge1xuICAgIHJldHVybiB0aGlzLiNkbXNTZXJ2aWNlLmdldERtc09iamVjdChpZCkucGlwZShcbiAgICAgIHRhcCgoZG1zT2JqZWN0KSA9PlxuICAgICAgICBwYXRjaFN0YXRlKHRoaXMuc3RhdGUkLCB7XG4gICAgICAgICAgc2VsZWN0ZWREbXNPYmplY3Q6IGRtc09iamVjdCxcbiAgICAgICAgICB2ZXJzaW9uczoge1xuICAgICAgICAgICAgdmVyc2lvbnNMaXN0OiB0aGlzLnN0YXRlJC52ZXJzaW9ucy52ZXJzaW9uc0xpc3QoKSxcbiAgICAgICAgICAgIHNlbGVjdGVkVmVyc2lvbjogW2Rtc09iamVjdF1cbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHNldFNlbGVjdGVkVmVyc2lvbih2ZXJzaW9uOiBhbnkpIHtcbiAgICB0aGlzLnNldEJ1c3kodHJ1ZSk7XG4gICAgcmV0dXJuIHRoaXMuI2Rtc1NlcnZpY2UuZ2V0RG1zT2JqZWN0VmVyc2lvbih2ZXJzaW9uLmRtc09iamVjdC5pZCwgdmVyc2lvbi5kbXNPYmplY3QudmVyc2lvbikucGlwZShcbiAgICAgIHRhcCgocmVzKSA9PlxuICAgICAgICBwYXRjaFN0YXRlKHRoaXMuc3RhdGUkLCB7XG4gICAgICAgICAgdmVyc2lvbnM6IHtcbiAgICAgICAgICAgIHZlcnNpb25zTGlzdDogdGhpcy5zdGF0ZSQudmVyc2lvbnMudmVyc2lvbnNMaXN0KCksXG4gICAgICAgICAgICBzZWxlY3RlZFZlcnNpb246IFtyZXNdXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgKSxcbiAgICAgIHRhcCgoKSA9PiB0aGlzLnNldEJ1c3koZmFsc2UpKVxuICAgICk7XG4gIH1cblxuICBzZXROZXdWZXJzaW9uKHZlcnNpb24/OiBudW1iZXIpOiBPYnNlcnZhYmxlPERtc09iamVjdFtdIHwgbnVsbD4ge1xuICAgIHBhdGNoU3RhdGUodGhpcy5zdGF0ZSQsIHsgYnVzeTogdHJ1ZSB9KTtcbiAgICBjb25zdCBzZWxlY3RlZFZlcnNpb24gPSB0aGlzLnN0YXRlJC52ZXJzaW9ucy5zZWxlY3RlZFZlcnNpb24oKTtcbiAgICBpZiAoc2VsZWN0ZWRWZXJzaW9uKSB7XG4gICAgICBjb25zdCB2ZXJzaW9uTnVtYmVyOiBudW1iZXIgPSB2ZXJzaW9uID8/IHNlbGVjdGVkVmVyc2lvblswXS52ZXJzaW9uO1xuICAgICAgcmV0dXJuIHRoaXMuI2Rtc1NlcnZpY2UucmVzdG9yZURtc09iamVjdChzZWxlY3RlZFZlcnNpb25bMF0uaWQsIHZlcnNpb25OdW1iZXIpLnBpcGUoc3dpdGNoTWFwKChvYmplY3Q6IERtc09iamVjdCkgPT4gdGhpcy5nZXRWZXJzaW9ucyhvYmplY3QuaWQpKSk7XG4gICAgfVxuICAgIHJldHVybiBvZihudWxsKTtcbiAgfVxuXG4gIGNsZWFyVmVyc2lvbnMoKSB7XG4gICAgcGF0Y2hTdGF0ZSh0aGlzLnN0YXRlJCwgeyB2ZXJzaW9uczogdGhpcy5pbml0aWFsU3RhdGUudmVyc2lvbnMgfSk7XG4gIH1cbn1cbiJdfQ==
442
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJpdmUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYXBwcy9kcml2ZS9zcmMvbGliL3NlcnZpY2VzL2RyaXZlL2RyaXZlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4RCxPQUFPLEVBQ0wsY0FBYyxFQUNkLG1CQUFtQixFQUNuQixnQkFBZ0IsRUFDaEIsa0JBQWtCLEVBRWxCLFVBQVUsRUFDVixZQUFZLEVBRVosYUFBYSxFQUNiLFVBQVUsRUFFVixZQUFZLEVBQ2IsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQVUsY0FBYyxFQUFFLFdBQVcsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQy9ELE9BQU8sRUFBYyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xHLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDaEcsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzNELE9BQU8sRUFJTCxpQkFBaUIsRUFDakIsV0FBVyxFQUNYLG9CQUFvQixFQUlyQixNQUFNLG1CQUFt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VSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7K0dBbmZVLFlBQVk7bUhBQVosWUFBWSxjQUZYLE1BQU07OzRGQUVQLFlBQVk7a0JBSHhCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IE5hdmlnYXRpb25TdGFydCwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IHBhdGNoU3RhdGUsIHNpZ25hbFN0YXRlIH0gZnJvbSAnQG5ncngvc2lnbmFscyc7XG5pbXBvcnQge1xuICBCYWNrZW5kU2VydmljZSxcbiAgQmFzZU9iamVjdFR5cGVGaWVsZCxcbiAgQ2xpcGJvYXJkU2VydmljZSxcbiAgQ29udGVudFN0cmVhbUZpZWxkLFxuICBEbXNPYmplY3QsXG4gIERtc1NlcnZpY2UsXG4gIEV2ZW50U2VydmljZSxcbiAgU2VhcmNoUXVlcnksXG4gIFNlYXJjaFNlcnZpY2UsXG4gIFN5c3RlbVR5cGUsXG4gIFl1dkV2ZW50LFxuICBZdXZFdmVudFR5cGVcbn0gZnJvbSAnQHl1dXZpcy9jbGllbnQtY29yZSc7XG5pbXBvcnQgeyBBY3Rpb24sIEFjdGlvbnNTZXJ2aWNlLCBCQVNFX0FDVElPTiB9IGZyb20gJ0B5dXV2aXMvY2xpZW50LWZyYW1ld29yay9hY3Rpb25zJztcbmltcG9ydCB7IFl2Y092ZXJsYXlTZXJ2aWNlIH0gZnJvbSAnQHl1dXZpcy9jb21wb25lbnRzL292ZXJsYXknO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCwgY2F0Y2hFcnJvciwgZmlsdGVyLCBmb3JrSm9pbiwgbWFwLCBvZiwgc3dpdGNoTWFwLCB0YXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFDVElPTl9DT05URVhULCBBUFBfSUQsIEFQUF9TQ0hFTUEsIEZTX1BST1BFUlRJRVMsIEZTX1NPVFMgfSBmcm9tICcuLi8uLi9kcml2ZS5zY2hlbWEnO1xuaW1wb3J0IHsgRFJJVkVfQVBQX0JSRUFEQ1JVTUJfTUFYX0RFUFRIIH0gZnJvbSAnLi4vdG9rZW5zJztcbmltcG9ydCB7XG4gIEJyZWFkQ3J1bWIsXG4gIENyZWF0ZUVycm9yLFxuICBDcmVhdGVSZXN1bHQsXG4gIERSSVZFX0FDVElPTl9NT0RFLFxuICBEUklWRV9FVkVOVCxcbiAgRFJJVkVfUk9PVF9GT0xERVJfSUQsXG4gIERyaXZlU3RhdGUsXG4gIERyaXZlVmFsaWRhdGVQYXlsb2FkLFxuICBEcml2ZVZhbGlkYXRlUmVzcG9uc2Vcbn0gZnJvbSAnLi9kcml2ZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUmVzb2x2ZU5hbWVDb25mbGljdHNDb21wb25lbnQgfSBmcm9tICcuL3Jlc29sdmUtbmFtZS1jb25mbGljdHMvcmVzb2x2ZS1uYW1lLWNvbmZsaWN0cy5jb21wb25lbnQnO1xuaW1wb3J0IHsgUmVzb2x2ZU5hbWVDb25mbGljdHNQYXlsb2FkIH0gZnJvbSAnLi9yZXNvbHZlLW5hbWUtY29uZmxpY3RzL3Jlc29sdmUtbmFtZS1jb25mbGljdHMuaW50ZXJmYWNlJztcbmltcG9ydCB7IG1hcFNlYXJjaFJlc3VsdCB9IGZyb20gJy4vdmVyc2lvbnMvdmVyc2lvbnMubWFwcGluZyc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIERyaXZlU2VydmljZSB7XG4gIHJlYWRvbmx5ICNhY3Rpb25zU2VydmljZSA9IGluamVjdChBY3Rpb25zU2VydmljZSk7XG4gIHJlYWRvbmx5ICNldmVudFNlcnZpY2UgPSBpbmplY3QoRXZlbnRTZXJ2aWNlKTtcbiAgcmVhZG9ubHkgI3JvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuICByZWFkb25seSAjZG1zU2VydmljZSA9IGluamVjdChEbXNTZXJ2aWNlKTtcbiAgcmVhZG9ubHkgI3NlYXJjaFNlcnZpY2UgPSBpbmplY3QoU2VhcmNoU2VydmljZSk7XG4gIHJlYWRvbmx5ICNvdmVybGF5ID0gaW5qZWN0KFl2Y092ZXJsYXlTZXJ2aWNlKTtcbiAgcmVhZG9ubHkgI2JhY2tlbmQgPSBpbmplY3QoQmFja2VuZFNlcnZpY2UpO1xuICByZWFkb25seSAjY2xpcGJvYXJkU2VydmljZSA9IGluamVjdChDbGlwYm9hcmRTZXJ2aWNlKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IE1BWF9ERVBUSDogbnVtYmVyID0gaW5qZWN0KERSSVZFX0FQUF9CUkVBRENSVU1CX01BWF9ERVBUSCk7XG4gIHByaXZhdGUgYnJlYWRjcnVtYkNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIHsgbmFtZTogc3RyaW5nOyBpZDogc3RyaW5nOyBwYXJlbnRJZDogc3RyaW5nIHwgbnVsbCB9PigpO1xuXG4gICNldmVudFNvdXJjZSA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgZXZlbnRzJDogT2JzZXJ2YWJsZTxzdHJpbmc+ID0gdGhpcy4jZXZlbnRTb3VyY2UuYXNPYnNlcnZhYmxlKCk7XG5cbiAgcmVhZG9ubHkgI2RlZmF1bHRTb3J0OiB7XG4gICAgcHJvcGVydHk6IHN0cmluZztcbiAgICBvcmRlcjogJ2FzYycgfCAnZGVzYyc7XG4gIH0gPSB7XG4gICAgcHJvcGVydHk6IEZTX1BST1BFUlRJRVMubmFtZSxcbiAgICBvcmRlcjogJ2FzYydcbiAgfTtcblxuICByZWFkb25seSBpbml0aWFsU3RhdGU6IERyaXZlU3RhdGUgPSB7XG4gICAgY3VycmVudEZvbGRlcjogbnVsbCxcbiAgICBxdWVyeTogbnVsbCxcbiAgICBxdWVyeVRpdGxlOiBudWxsLFxuICAgIGV4dGVuZGVkUXVlcnk6IGZhbHNlLFxuICAgIHNlbGVjdGlvbjogW10sXG4gICAgYWN0aW9uczogW10sXG4gICAgYnVzeTogZmFsc2UsXG4gICAgc29ydDogdGhpcy4jZGVmYXVsdFNvcnQsXG4gICAgYnJlYWRjcnVtYjoge1xuICAgICAgbG9hZGluZzogZmFsc2UsXG4gICAgICBwYXJ0aWFsOiBmYWxzZSxcbiAgICAgIGl0ZW1zOiBbXSxcbiAgICAgIGZvbGRlcjogbnVsbFxuICAgIH0sXG4gICAgdmVyc2lvbnM6IHtcbiAgICAgIHZlcnNpb25zTGlzdDogW10sXG4gICAgICBzZWxlY3RlZFZlcnNpb246IG51bGxcbiAgICB9LFxuICAgIHNlbGVjdGVkRG1zT2JqZWN0OiBudWxsXG4gIH07XG5cbiAgcmVhZG9ubHkgc3RhdGUkID0gc2lnbmFsU3RhdGU8RHJpdmVTdGF0ZT4odGhpcy5pbml0aWFsU3RhdGUpO1xuICByZWFkb25seSBicmVhZGNydW1iRm9sZGVyUHJldmlldyA9IHRoaXMuc3RhdGUkLmJyZWFkY3J1bWIuZm9sZGVyO1xuICBwcml2YXRlIF9idXN5VGFza0NvdW50ID0gMDtcbiAgcHJpdmF0ZSBfZGVmYXVsdFJpYmJvbkFjdGlvbnM6IEFjdGlvbltdID0gW107XG4gIGxhc3RSb3V0ZVVSTD86IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLiNyb3V0ZXIuZXZlbnRzXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKCksXG4gICAgICAgIGZpbHRlcigoZSkgPT4gdGhpcy5zdGF0ZSQuc2VsZWN0aW9uKCkubGVuZ3RoID4gMCAmJiBlIGluc3RhbmNlb2YgTmF2aWdhdGlvblN0YXJ0KVxuICAgICAgKVxuICAgICAgLy8gY2xlYXIgc2VsZWN0aW9uIG9uIHJvdXRlIGNobmFnZXNcbiAgICAgIC5zdWJzY3JpYmUoeyBuZXh0OiAoKSA9PiB0aGlzLnNldFNlbGVjdGlvbihbXSkgfSk7XG5cbiAgICB0aGlzLiNldmVudFNlcnZpY2Uub24oWXV2RXZlbnRUeXBlLkRNU19PQkpFQ1RfVVBEQVRFRCkuc3Vic2NyaWJlKChlOiBZdXZFdmVudCkgPT4ge1xuICAgICAgLy8gY2hlY2sgaWYgY3VycmVudCBzZWxlY3Rpb24gY29udGFpbnMgdGhlIHVwZGF0ZWQgb2JqZWN0XG4gICAgICBjb25zdCBkbXNPYmplY3QgPSBlLmRhdGEgYXMgRG1zT2JqZWN0O1xuICAgICAgY29uc3Qgc2VsZWN0aW9uID0gdGhpcy5zdGF0ZSQuc2VsZWN0aW9uKCk7XG4gICAgICBjb25zdCBtYXRjaElkeCA9IHNlbGVjdGlvbi5maW5kSW5kZXgoKG8pID0+IG8uaWQgPT09IGRtc09iamVjdC5pZCk7XG4gICAgICBpZiAobWF0Y2hJZHggIT09IC0xKSB7XG4gICAgICAgIC8vIHVwZGF0ZSB0aGUgb2JqZWN0IGluIHRoZSBzZWxlY3Rpb25cbiAgICAgICAgc2VsZWN0aW9uW21hdGNoSWR4XSA9IGRtc09iamVjdDtcbiAgICAgICAgcGF0Y2hTdGF0ZSh0aGlzLnN0YXRlJCwgeyBzZWxlY3Rpb246IFsuLi5zZWxlY3Rpb25dIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy4jZXZlbnRTZXJ2aWNlXG4gICAgICAub24oWXV2RXZlbnRUeXBlLkRNU19PQkpFQ1RfREVMRVRFRCwgWXV2RXZlbnRUeXBlLkRNU19PQkpFQ1RfQ1JFQVRFRCwgWXV2RXZlbnRUeXBlLkRNU19PQkpFQ1RTX01PVkVEKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLmVtaXRFdmVudChEUklWRV9FVkVOVC5yZWZyZXNoKSk7XG4gIH1cblxuICAjbWFwZWRDdXJyZW50Rm9sZGVyKCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlJC5jdXJyZW50Rm9sZGVyKCkgPT09IERSSVZFX1JPT1RfRk9MREVSX0lEID8gbnVsbCA6IHRoaXMuc3RhdGUkLmN1cnJlbnRGb2xkZXIoKTtcbiAgfVxuXG4gIGVtaXRFdmVudChldnQ6IHN0cmluZykge1xuICAgIHRoaXMuI2V2ZW50U291cmNlLm5leHQoZXZ0KTtcbiAgfVxuXG4gIHNldEJ1c3koYnVzeTogYm9vbGVhbikge1xuICAgIGlmIChidXN5KSB0aGlzLl9idXN5VGFza0NvdW50Kys7XG4gICAgZWxzZSBpZiAodGhpcy5fYnVzeVRhc2tDb3VudCA+IDApIHRoaXMuX2J1c3lUYXNrQ291bnQtLTtcbiAgICBwYXRjaFN0YXRlKHRoaXMuc3RhdGUkLCB7IGJ1c3k6IHRoaXMuX2J1c3lUYXNrQ291bnQgIT09IDAgfSk7XG4gIH1cblxuICBzZXRTZWxlY3Rpb24obzogRG1zT2JqZWN0W10pIHtcbiAgICBwYXRjaFN0YXRlKHRoaXMuc3RhdGUkLCB7IHNlbGVjdGlvbjogbyB9KTtcbiAgICB0aGlzLl9nZXRBY3Rpb25zKCk7XG4gIH1cblxuICB1cGRhdGVRdWVyeShxdWVyeTogU2VhcmNoUXVlcnksIHF1ZXJ5VGl0bGU6IHN0cmluZyB8IG51bGwgPSBudWxsLCBleHRlbmRlZFF1ZXJ5ID0gZmFsc2UpIHtcbiAgICBwYXRjaFN0YXRlKHRoaXMuc3RhdGUkLCB7XG4gICAgICBxdWVyeTogdGhpcy5hcHBseUZvbGRlckxpc3RTZWFyY2hDb25kaXRpb25zKHF1ZXJ5KSxcbiAgICAgIHF1ZXJ5VGl0bGU6IHF1ZXJ5VGl0bGUsXG4gICAgICBleHRlbmRlZFF1ZXJ5OiBleHRlbmRlZFF1ZXJ5XG4gICAgfSk7XG4gIH1cblxuICBzZXRTb3J0KHByb3BlcnR5OiBzdHJpbmcsIG9yZGVyOiAnYXNjJyB8ICdkZXNjJykge1xuICAgIGNvbnN0IHN0YXRlUXVlcnkgPSB0aGlzLnN0YXRlJC5xdWVyeSgpO1xuICAgIGlmIChzdGF0ZVF1ZXJ5KSB7XG4gICAgICBjb25zdCBjbG9uZWRRdWVyeVN0YXRlID0gc3RydWN0dXJlZENsb25lKHN0YXRlUXVlcnkpO1xuXG4gICAgICAvLyBUT0RPOiByZW1vdmUgaWYgZm9sZGVycyBzaG91bGQgc3RheSBvbiB0b3BcbiAgICAgIGNsb25lZFF1ZXJ5U3RhdGUuc29ydCA9IFtdO1xuXG4gICAgICBjb25zdCBzb3J0ID0gcHJvcGVydHkgPyB7IHByb3BlcnR5LCBvcmRlciB9IDogeyAuLi50aGlzLiNkZWZhdWx0U29ydCwgb3JkZXIgfTtcblxuICAgICAgcGF0Y2hTdGF0ZSh0aGlzLnN0YXRlJCwgeyBxdWVyeTogY2xvbmVkUXVlcnlTdGF0ZSwgc29ydCB9KTtcbiAgICAgIHRoaXMuYXBwbHlGb2xkZXJMaXN0U2VhcmNoQ29uZGl0aW9ucyhjbG9uZWRRdWVyeVN0YXRlLCAhcHJvcGVydHkpO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZUN1cnJlbnRGb2xkZXIoY3VycmVudEZvbGRlcklEOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKSB7XG4gICAgcGF0Y2hTdGF0ZSh0aGlzLnN0YXRlJCwgeyBcbiAgICAgIGN1cnJlbnRGb2xkZXI6IGN1cnJlbnRGb2xkZXJJRCB8fCBudWxsLFxuICAgICAgZXh0ZW5kZWRRdWVyeTogZmFsc2UsXG4gICAgfSk7XG4gIH1cblxuICAjY29weVRvRm9sZGVyKG9iamVjdHM6IERtc09iamVjdFtdLCBmb2xkZXJJZDogc3RyaW5nIHwgbnVsbCwgb3B0aW9uczogeyB3YWl0Rm9yU2VhcmNoQ29uc2lzdGVuY3k6IGJvb2xlYW4gfSwgdmFsaWRhdGVOYW1lcyA9IHRydWUpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB2YWxpZGF0ZU5hbWVzXG4gICAgICA/IHRoaXMudmFsaWRhdGVOYW1lcyhcbiAgICAgICAgICBvYmplY3RzLmZpbHRlcigobykgPT4gby5zb3RzLmluY2x1ZGVzKEZTX1NPVFMub2JqZWN0KSkubWFwKChmKSA9PiBmLmRhdGFbRlNfUFJPUEVSVElFUy5uYW1lXSBhcyBzdHJpbmcpLFxuICAgICAgICAgIGZvbGRlcklkXG4gICAgICAgICkucGlwZShcbiAgICAgICAgICBzd2l0Y2hNYXAoKHJlczogRHJpdmVWYWxpZGF0ZVJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzLmV4aXN0aW5nRmlsZU5hbWVzPy5sZW5ndGggfHwgcmVzLmludmFsaWRGaWxlTmFtZXM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICB0aGlzLiNyZXNvbHZlTmFtZUNvbmZsaWN0cyh7XG4gICAgICAgICAgICAgICAgZXhpc3RpbmdGaWxlTmFtZXM6IHJlcy5leGlzdGluZ0ZpbGVOYW1lcyxcbiAgICAgICAgICAgICAgICBpbnZhbGlkRmlsZU5hbWVzOiByZXMuaW52YWxpZEZpbGVOYW1lcyxcbiAgICAgICAgICAgICAgICBtb2RlOiAnY29weScsXG4gICAgICAgICAgICAgICAgaXRlbXM6IG9iamVjdHNcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHJldHVybiBvZihbXSk7XG4gICAgICAgICAgICB9IGVsc2UgcmV0dXJuIHRoaXMuI2Rtc1NlcnZpY2UuY29weURtc09iamVjdHMoZm9sZGVySWQsIG9iamVjdHMsIG9wdGlvbnMpO1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIDogdGhpcy4jZG1zU2VydmljZS5jb3B5RG1zT2JqZWN0cyhmb2xkZXJJZCwgb2JqZWN0cywgb3B0aW9ucyk7XG4gIH1cblxuICAjbW92ZVRvRm9sZGVyKG9iamVjdHM6IERtc09iamVjdFtdLCBmb2xkZXJJZDogc3RyaW5nIHwgbnVsbCwgb3B0aW9uczogeyB3YWl0Rm9yU2VhcmNoQ29uc2lzdGVuY3k6IGJvb2xlYW4gfSwgdmFsaWRhdGVOYW1lcyA9IHRydWUpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB2YWxpZGF0ZU5hbWVzXG4gICAgICA/IHRoaXMudmFsaWRhdGVOYW1lcyhcbiAgICAgICAgICBvYmplY3RzLmZpbHRlcigobykgPT4gby5zb3RzLmluY2x1ZGVzKEZTX1NPVFMub2JqZWN0KSkubWFwKChmKSA9PiBmLmRhdGFbRlNfUFJPUEVSVElFUy5uYW1lXSBhcyBzdHJpbmcpLFxuICAgICAgICAgIGZvbGRlcklkXG4gICAgICAgICkucGlwZShcbiAgICAgICAgICBzd2l0Y2hNYXAoKHJlczogRHJpdmVWYWxpZGF0ZVJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzLmV4aXN0aW5nRmlsZU5hbWVzPy5sZW5ndGggfHwgcmVzLmludmFsaWRGaWxlTmFtZXM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZygnVkFMSURBVElPTjogJywgeyByZXMgfSk7XG4gICAgICAgICAgICAgIHRoaXMuI3Jlc29sdmVOYW1lQ29uZmxpY3RzKHtcbiAgICAgICAgICAgICAgICBleGlzdGluZ0ZpbGVOYW1lczogcmVzLmV4aXN0aW5nRmlsZU5hbWVzLFxuICAgICAgICAgICAgICAgIGludmFsaWRGaWxlTmFtZXM6IHJlcy5pbnZhbGlkRmlsZU5hbWVzLFxuICAgICAgICAgICAgICAgIG1vZGU6ICdtb3ZlJyxcbiAgICAgICAgICAgICAgICBpdGVtczogb2JqZWN0c1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgcmV0dXJuIG9mKFtdKTtcbiAgICAgICAgICAgIH0gZWxzZSByZXR1cm4gdGhpcy4jZG1zU2VydmljZS5tb3ZlRG1zT2JqZWN0cyhmb2xkZXJJZCwgb2JqZWN0cywgb3B0aW9ucyk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgOiB0aGlzLiNkbXNTZXJ2aWNlLm1vdmVEbXNPYmplY3RzKGZvbGRlcklkLCBvYmplY3RzLCBvcHRpb25zKTtcbiAgfVxuXG4gIGNvcHlUb0N1cnJlbnRGb2xkZXIob2JqZWN0czogRG1zT2JqZWN0W10sIHZhbGlkYXRlTmFtZXMgPSB0cnVlKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBjb25zdCBvcHRpb25zID0geyB3YWl0Rm9yU2VhcmNoQ29uc2lzdGVuY3k6IHRydWUgfTtcbiAgICByZXR1cm4gdGhpcy4jY29weVRvRm9sZGVyKG9iamVjdHMsIHRoaXMuI21hcGVkQ3VycmVudEZvbGRlcigpLCBvcHRpb25zLCB2YWxpZGF0ZU5hbWVzKTtcbiAgfVxuXG4gIG1vdmVUb0N1cnJlbnRGb2xkZXIob2JqZWN0czogRG1zT2JqZWN0W10sIHZhbGlkYXRlTmFtZXMgPSB0cnVlKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBjb25zdCBvcHRpb25zID0geyB3YWl0Rm9yU2VhcmNoQ29uc2lzdGVuY3k6IHRydWUgfTtcbiAgICByZXR1cm4gdGhpcy4jbW92ZVRvRm9sZGVyKG9iamVjdHMsIHRoaXMuI21hcGVkQ3VycmVudEZvbGRlcigpLCBvcHRpb25zLCB2YWxpZGF0ZU5hbWVzKTtcbiAgfVxuXG4gICNyZXNvbHZlTmFtZUNvbmZsaWN0cyhwYXlsb2FkOiBSZXNvbHZlTmFtZUNvbmZsaWN0c1BheWxvYWQpIHtcbiAgICB0aGlzLiNvdmVybGF5Lm9wZW4oUmVzb2x2ZU5hbWVDb25mbGljdHNDb21wb25lbnQsIHBheWxvYWQsIHtcbiAgICAgIG1heFdpZHRoOiAnNDAwcHgnXG4gICAgfSk7XG4gIH1cblxuICBwYXN0ZUZyb21DbGlwYm9hcmQoZGVzdGluYXRpb25PYmplY3Q/OiBEbXNPYmplY3QpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGNvbnN0IGNkID0gdGhpcy4jY2xpcGJvYXJkU2VydmljZS5nZXRDbGlwYm9hcmREYXRhKEFQUF9JRCk7XG4gICAgY29uc3QgZGVzdGluYXRpb24gPSBkZXN0aW5hdGlvbk9iamVjdD8uaXNGb2xkZXIgPyBkZXN0aW5hdGlvbk9iamVjdC5pZCA6IHRoaXMuI21hcGVkQ3VycmVudEZvbGRlcigpO1xuICAgIHJldHVybiAoXG4gICAgICBjZCAmJiBjZC5vYmplY3RzICYmIGNkLm9iamVjdHMubGVuZ3RoID4gMFxuICAgICAgICA/IGNkPy5tb2RlID09PSBEUklWRV9BQ1RJT05fTU9ERS5DVVRcbiAgICAgICAgICA/IHRoaXMuI21vdmVUb0ZvbGRlcihjZC5vYmplY3RzIHx8IFtdLCBkZXN0aW5hdGlvbiwgeyB3YWl0Rm9yU2VhcmNoQ29uc2lzdGVuY3k6IHRydWUgfSwgdHJ1ZSlcbiAgICAgICAgICA6IGNkPy5tb2RlID09PSBEUklWRV9BQ1RJT05fTU9ERS5DT1BZXG4gICAgICAgICAgICA/IHRoaXMuI2NvcHlUb0ZvbGRlcihjZC5vYmplY3RzIHx8IFtdLCBkZXN0aW5hdGlvbiwgeyB3YWl0Rm9yU2VhcmNoQ29uc2lzdGVuY3k6IHRydWUgfSwgdHJ1ZSlcbiAgICAgICAgICAgIDogb2YobnVsbClcbiAgICAgICAgOiBvZihudWxsKVxuICAgICkucGlwZShcbiAgICAgIHRhcCgocmVzKSA9PiB7XG4gICAgICAgIHJlcyAmJiB0aGlzLmVtaXRFdmVudChEUklWRV9FVkVOVC5yZWZyZXNoKTtcbiAgICAgICAgdGhpcy4jY2xpcGJvYXJkU2VydmljZS5jbGVhcigpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgY2hlY2tOYW1lc0FuZFVwbG9hZChmaWxlczogRmlsZVtdLCBkYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBPYnNlcnZhYmxlPENyZWF0ZVJlc3VsdFtdPiB7XG4gICAgcmV0dXJuIHRoaXMudmFsaWRhdGVOYW1lcyhcbiAgICAgIGZpbGVzLm1hcCgoZikgPT4gZi5uYW1lKSxcbiAgICAgIHRoaXMuI21hcGVkQ3VycmVudEZvbGRlcigpXG4gICAgKS5waXBlKFxuICAgICAgc3dpdGNoTWFwKChyZXM6IERyaXZlVmFsaWRhdGVSZXNwb25zZSkgPT4ge1xuICAgICAgICBpZiAocmVzLmV4aXN0aW5nRmlsZU5hbWVzPy5sZW5ndGggfHwgcmVzLmludmFsaWRGaWxlTmFtZXM/Lmxlbmd0aCkge1xuICAgICAgICAgIGNvbnN0IHJlc1BheWxvYWQ6IFJlc29sdmVOYW1lQ29uZmxpY3RzUGF5bG9hZCA9IHtcbiAgICAgICAgICAgIGV4aXN0aW5nRmlsZU5hbWVzOiByZXMuZXhpc3RpbmdGaWxlTmFtZXMsXG4gICAgICAgICAgICBpbnZhbGlkRmlsZU5hbWVzOiByZXMuaW52YWxpZEZpbGVOYW1lcyxcbiAgICAgICAgICAgIG1vZGU6ICd1cGxvYWQnLFxuICAgICAgICAgICAgaXRlbXM6IGZpbGVzLFxuICAgICAgICAgICAgZGF0YVxuICAgICAgICAgIH07XG4gICAgICAgICAgdGhpcy4jb3ZlcmxheS5vcGVuKFJlc29sdmVOYW1lQ29uZmxpY3RzQ29tcG9uZW50LCByZXNQYXlsb2FkKTtcbiAgICAgICAgICByZXR1cm4gb2YoW10pO1xuICAgICAgICB9IGVsc2UgcmV0dXJuIHRoaXMudXBsb2FkKGZpbGVzLCBkYXRhKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHVwbG9hZENvbnRlbnQob2JqZWN0SWQ6IHN0cmluZywgZmlsZTogRmlsZSk6IE9ic2VydmFibGU8Q3JlYXRlUmVzdWx0W10+IHtcbiAgICByZXR1cm4gdGhpcy4jZG1zU2VydmljZS51cGxvYWRDb250ZW50KG9iamVjdElkLCBmaWxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGxvYWRzIGZpbGVzIHRvIHRoZSBjdXJyZW50IGZvbGRlclxuICAgKiBAcGFyYW0gZmlsZXMgZmlsZXMgdG8gYmUgdXBsb2FkZWRcbiAgICogQHBhcmFtIGRhdGEgYWRkaXRpb25hbCBkYXRhIHRvIGJlIGFwcGxpZWQgdG8gdGhlIG9iamVjdFxuICAgKi9cbiAgdXBsb2FkKGZpbGVzOiBGaWxlW10sIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IE9ic2VydmFibGU8Q3JlYXRlUmVzdWx0W10+IHtcbiAgICByZXR1cm4gZm9ya0pvaW4oXG4gICAgICBmaWxlcy5tYXAoKGZpbGU6IEZpbGUpID0+IHtcbiAgICAgICAgY29uc3QgdXBsb2FkRGF0YTogUmVjb3JkPHN0cmluZywgYW55PiA9IGRhdGEgfHwge307XG4gICAgICAgIC8vIGFwcGx5IGZpbGVzeXN0ZW0gU09UXG4gICAgICAgIGNvbnN0IHNvdHMgPSB1cGxvYWREYXRhW0Jhc2VPYmplY3RUeXBlRmllbGQuU0VDT05EQVJZX09CSkVDVF9UWVBFX0lEU10gfHwgW107XG4gICAgICAgIHVwbG9hZERhdGFbQmFzZU9iamVjdFR5cGVGaWVsZC5TRUNPTkRBUllfT0JKRUNUX1RZUEVfSURTXSA9IFsuLi5zb3RzLCBGU19TT1RTLm9iamVjdF07XG4gICAgICAgIC8vIHNldHVwIHRoZSBuYW1lIHRvIGJlIHRoZSBmaWxlbmFtZVxuICAgICAgICB1cGxvYWREYXRhW0ZTX1BST1BFUlRJRVMubmFtZV0gPSBmaWxlLm5hbWU7XG4gICAgICAgIGNvbnN0IGNmID0gdGhpcy4jbWFwZWRDdXJyZW50Rm9sZGVyKCk7XG4gICAgICAgIGlmIChjZiAmJiBjZiAhPT0gRFJJVkVfUk9PVF9GT0xERVJfSUQpIHVwbG9hZERhdGFbQmFzZU9iamVjdFR5cGVGaWVsZC5QQVJFTlRfSURdID0gY2Y7XG4gICAgICAgIHJldHVybiB0aGlzLiNkbXNTZXJ2aWNlLmNyZWF0ZURtc09iamVjdChTeXN0ZW1UeXBlLkRPQ1VNRU5ULCB1cGxvYWREYXRhLCBbZmlsZV0sIGZpbGUubmFtZSkucGlwZShcbiAgICAgICAgICBtYXAoKHJlcykgPT4gKHsgaWQ6IHJlc1swXSB9KSksXG4gICAgICAgICAgY2F0Y2hFcnJvcigoZTogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKHsgZXJyb3I6IHRoaXMuI21hcENyZWF0ZUVycm9yKGUpIH0pKVxuICAgICAgICApO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgY3JlYXRlRm9sZGVyKG5hbWU6IHN0cmluZyk6IE9ic2VydmFibGU8Q3JlYXRlUmVzdWx0PiB7XG4gICAgY29uc3QgcGFyZW50SUQgPSB0aGlzLiNtYXBlZEN1cnJlbnRGb2xkZXIoKTtcbiAgICBjb25zdCBkYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG4gICAgZGF0YVtGU19QUk9QRVJUSUVTLm5hbWVdID0gbmFtZTtcbiAgICAvLyBhcHBseSBmaWxlc3lzdGVtIFNPVFxuICAgIGRhdGFbQmFzZU9iamVjdFR5cGVGaWVsZC5TRUNPTkRBUllfT0JKRUNUX1RZUEVfSURTXSA9IFtGU19TT1RTLm9iamVjdF07XG4gICAgaWYgKHBhcmVudElEICYmIHBhcmVudElEICE9PSBEUklWRV9ST09UX0ZPTERFUl9JRCkgZGF0YVtCYXNlT2JqZWN0VHlwZUZpZWxkLlBBUkVOVF9JRF0gPSBwYXJlbnRJRDtcbiAgICByZXR1cm4gdGhpcy4jZG1zU2VydmljZS5jcmVhdGVEbXNPYmplY3QoQVBQX1NDSEVNQS50eXBlcy5mb2xkZXIub2JqZWN0VHlwZSB8fCAnJywgZGF0YSwgW10pLnBpcGUoXG4gICAgICBtYXAoKHJlcykgPT4gKHsgaWQ6IHJlc1swXSB9KSksXG4gICAgICBjYXRjaEVycm9yKChlOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YoeyBlcnJvcjogdGhpcy4jbWFwQ3JlYXRlRXJyb3IoZSkgfSkpXG4gICAgKTtcbiAgfVxuXG4gICNtYXBDcmVhdGVFcnJvcihlOiBIdHRwRXJyb3JSZXNwb25zZSk6IENyZWF0ZUVycm9yIHtcbiAgICBsZXQgZXJyb3I6IENyZWF0ZUVycm9yID0gJ2RlZmF1bHQnO1xuICAgIGNvbnN0IGVjID0gZS5lcnJvci5zZXJ2aWNlRXJyb3JDb2RlO1xuICAgIGlmIChlYyA9PT0gOTk5OTkpIHtcbiAgICAgIGNvbnN0IGllYyA9IGUuZXJyb3IuaW5uZXJFcnJvcj8uc2VydmljZUVycm9yQ29kZTtcbiAgICAgIGlmIChpZWMgPT09IDExMDAwKSBlcnJvciA9ICduYW1lRXhpc3RzJztcbiAgICB9XG4gICAgcmV0dXJuIGVycm9yO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBmb3IgZXhpc3RpbmcgbmFtZXMgYW5kIGludmFsaWQgY2hhcmFjdGVyc1xuICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSB0byBiZSBjaGVja2VkXG4gICAqIEBwYXJhbSBwYXJlbnRJZCBUaGUgcGFyZW50IGZvbGRlciAod2lsbCBiZSAncm9vdCcgaWYgbm90IHByb3ZpZGVkKVxuICAgKiBAcmV0dXJucyBhbHJlYWR5IGV4aXN0aW5nIG5hbWVzXG4gICAqL1xuICB2YWxpZGF0ZU5hbWVzKG5hbWVzOiBzdHJpbmdbXSwgcGFyZW50SWQ/OiBzdHJpbmcgfCBudWxsKTogT2JzZXJ2YWJsZTxEcml2ZVZhbGlkYXRlUmVzcG9uc2U+IHtcbiAgICBjb25zb2xlLmxvZyh7IG5hbWVzLCBwYXJlbnRJZCB9KTtcblxuICAgIGlmIChwYXJlbnRJZCA9PT0gRFJJVkVfUk9PVF9GT0xERVJfSUQpIHBhcmVudElkID0gdW5kZWZpbmVkO1xuICAgIGNvbnN0IGR2cDogRHJpdmVWYWxpZGF0ZVBheWxvYWQgPSB7XG4gICAgICBhcHA6ICdvc2RyaXZlJyxcbiAgICAgIGZpbGVOYW1lczogbmFtZXMsXG4gICAgICB0YXJnZXRGb2xkZXJJZDogcGFyZW50SWQgfHwgdW5kZWZpbmVkXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy4jYmFja2VuZC5wb3N0KCcvZG1zL29iamVjdHMvdmFsaWRhdGUnLCBkdnApLnBpcGUoY2F0Y2hFcnJvcigocmVzOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YocmVzLmVycm9yKSkpO1xuICB9XG5cbiAgZ2V0RGVmYXVsdFJpYmJvbkFjdGlvbnMoKSB7XG4gICAgaWYgKCF0aGlzLl9kZWZhdWx0UmliYm9uQWN0aW9ucy5sZW5ndGgpIHtcbiAgICAgIC8vW0JBU0VfQUNUSU9OLmRvd25sb2FkLCBCQVNFX0FDVElPTi5kZWxldGUsICdhcHAuZHJpdmUuYWN0aW9uLnJlbmFtZScsIEJBU0VfQUNUSU9OLmNvcHksIEJBU0VfQUNUSU9OLmN1dF1cbiAgICAgIE9iamVjdC52YWx1ZXMoeyAuLi5CQVNFX0FDVElPTiwgcmVuYW1lOiAnYXBwLmRyaXZlLmFjdGlvbi5yZW5hbWUnIH0pLmZvckVhY2goKGlkKSA9PiB7XG4gICAgICAgIGNvbnN0IGEgPSB0aGlzLiNhY3Rpb25zU2VydmljZS5nZXRBY3Rpb25CeUlkKGlkLCBBQ1RJT05fQ09OVEVYVCk7XG4gICAgICAgIGlmIChhKSB0aGlzLl9kZWZhdWx0UmliYm9uQWN0aW9ucy5wdXNoKGEpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9kZWZhdWx0UmliYm9uQWN0aW9ucztcbiAgfVxuXG4gIHByaXZhdGUgX2dldEFjdGlvbnMoKSB7XG4gICAgdGhpcy5zZXRCdXN5KHRydWUpO1xuICAgIHRoaXMuI2FjdGlvbnNTZXJ2aWNlXG4gICAgICAuZ2V0QWN0aW9ucyh0aGlzLnN0YXRlJC5zZWxlY3Rpb24oKSwge1xuICAgICAgICBjb250ZXh0OiBBQ1RJT05fQ09OVEVYVFxuICAgICAgfSlcbiAgICAgIC5zdWJzY3JpYmUoKGFjdGlvbnM6IEFjdGlvbltdKSA9PiB7XG4gICAgICAgIHBhdGNoU3RhdGUodGhpcy5zdGF0ZSQsIHsgYWN0aW9ucyB9KTtcbiAgICAgIH0pXG4gICAgICAuYWRkKCgpID0+IHRoaXMuc2V0QnVzeShmYWxzZSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGx5IHNlYXJjaCBjb25kaXRpb25zIHJlZ2FyZGluZyBmb2xkZXIgbGlzdGluZ3NcbiAgICogQHBhcmFtIHFcbiAgICovXG4gIGFwcGx5Rm9sZGVyTGlzdFNlYXJjaENvbmRpdGlvbnMocTogU2VhcmNoUXVlcnksIGFkZEJhc2VUeXBlSWQgPSB0cnVlKTogU2VhcmNoUXVlcnkge1xuICAgIC8vIGZvbGRlcnMgZmlyc3RcbiAgICBpZiAoIXEuc29ydCkgcS5zb3J0ID0gW107XG4gICAgYWRkQmFzZVR5cGVJZCAmJlxuICAgICAgcS5zb3J0LnB1c2goe1xuICAgICAgICBmaWVsZDogQmFzZU9iamVjdFR5cGVGaWVsZC5CQVNFX1RZUEVfSUQsXG4gICAgICAgIG9yZGVyOiAnZGVzYydcbiAgICAgIH0pO1xuICAgIHEgPSB0aGlzLmFwcGx5QmFzaWNTZWFyY2hDb25kaXRpb25zKHEpO1xuXG4gICAgcmV0dXJuIHE7XG4gIH1cblxuICBhcHBseUJhc2ljU2VhcmNoQ29uZGl0aW9ucyhxOiBTZWFyY2hRdWVyeSk6IFNlYXJjaFF1ZXJ5IHtcbiAgICBxLmZpZWxkcyA9IFtcbiAgICAgIEJhc2VPYmplY3RUeXBlRmllbGQuT0JKRUNUX0lELFxuICAgICAgQmFzZU9iamVjdFR5cGVGaWVsZC5NT0RJRklDQVRJT05fREFURSxcbiAgICAgIEJhc2VPYmplY3RUeXBlRmllbGQuTU9ESUZJRURfQlksXG4gICAgICBDb250ZW50U3RyZWFtRmllbGQuRklMRU5BTUUsXG4gICAgICBDb250ZW50U3RyZWFtRmllbGQuTUlNRV9UWVBFLFxuICAgICAgQ29udGVudFN0cmVhbUZpZWxkLklELFxuICAgICAgQ29udGVudFN0cmVhbUZpZWxkLkxFTkdUSFxuICAgIF07XG4gICAgaWYgKCFxLnR5cGVzIHx8ICFxLnR5cGVzLmluY2x1ZGVzKEZTX1NPVFMub2JqZWN0KSkgcS50eXBlcyA9IFsuLi4ocS50eXBlcyB8fCBbXSksIEZTX1NPVFMub2JqZWN0XTtcbiAgICAvLyBxLnNvcnRPcHRpb25zLnB1c2gobmV3IFNvcnRPcHRpb24oQmFzZU9iamVjdFR5cGVGaWVsZC5CQVNFX1RZUEVfSUQsICdkZXNjJykpO1xuICAgIGNvbnN0IHNvcnQgPSB0aGlzLnN0YXRlJC5zb3J0KCkgfHwgdGhpcy4jZGVmYXVsdFNvcnQ7XG4gICAgaWYgKCFxLnNvcnQpIHEuc29ydCA9IFtdO1xuICAgIHEuc29ydC5wdXNoKHtcbiAgICAgIGZpZWxkOiBzb3J0LnByb3BlcnR5LFxuICAgICAgb3JkZXI6IHNvcnQub3JkZXJcbiAgICB9KTtcbiAgICBxLmluY2x1ZGVQZXJtaXNzaW9ucyA9IHRydWU7XG4gICAgLy8gbmV3IFNvcnRPcHRpb24oc29ydC5wcm9wZXJ0eSwgc29ydC5vcmRlcikpO1xuICAgIHJldHVybiBxO1xuICB9XG5cbiAgcmVzb2x2ZUZpbGVzU3RhdGUoaWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmdldEZvbGRlckhpZXJhcmNoeShpZCk7XG4gIH1cblxuICBnZXRGb2xkZXJIaWVyYXJjaHkoZm9sZGVySWQ6IHN0cmluZyk6IE9ic2VydmFibGU8QnJlYWRDcnVtYltdPiB7XG4gICAgcGF0Y2hTdGF0ZSh0aGlzLnN0YXRlJCwge1xuICAgICAgYnJlYWRjcnVtYjoge1xuICAgICAgICAuLi50aGlzLmluaXRpYWxTdGF0ZS5icmVhZGNydW1iLFxuICAgICAgICBsb2FkaW5nOiB0cnVlXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZm9sZGVySWQgPT09IERSSVZFX1JPT1RfRk9MREVSX0lEXG4gICAgICA/IG9mKFtdKVxuICAgICAgOiB0aGlzLiNmZXRjaEZvbGRlcihmb2xkZXJJZCwgMCwgdGhpcy5NQVhfREVQVEgpLnBpcGUoXG4gICAgICAgICAgdGFwKChyZXM6IHsgcGFydGlhbDogYm9vbGVhbjsgaXRlbXM6IEJyZWFkQ3J1bWJbXSB9KSA9PiB7XG4gICAgICAgICAgICBsZXQgaXRlbXM6IEJyZWFkQ3J1bWJbXSA9IFtdO1xuICAgICAgICAgICAgaWYgKHJlcy5pdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIGl0ZW1zID0gWy4uLml0ZW1zLCAuLi5yZXMuaXRlbXNdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwYXRjaFN0YXRlKHRoaXMuc3RhdGUkLCB7XG4gICAgICAgICAgICAgIGJyZWFkY3J1bWI6IHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLmluaXRpYWxTdGF0ZS5icmVhZGNydW1iLFxuICAgICAgICAgICAgICAgIHBhcnRpYWw6IHJlcy5wYXJ0aWFsLFxuICAgICAgICAgICAgICAgIGxvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGl0ZW1zXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIG1hcCgocmVzKSA9PiByZXMuaXRlbXMpXG4gICAgICAgICk7XG4gIH1cblxuICAjZmV0Y2hGb2xkZXIoXG4gICAgZm9sZGVySWQ6IHN0cmluZyxcbiAgICBkZXB0aDogbnVtYmVyLFxuICAgIG1heERlcHRoOiBudW1iZXJcbiAgKTogT2JzZXJ2YWJsZTx7XG4gICAgcGFydGlhbDogYm9vbGVhbjtcbiAgICBpdGVtczogQnJlYWRDcnVtYltdO1xuICB9PiB7XG4gICAgaWYgKGRlcHRoID49IG1heERlcHRoKSByZXR1cm4gb2YoeyBwYXJ0aWFsOiB0cnVlLCBpdGVtczogW10gfSk7XG4gICAgY29uc3QgY2FjaGVkRm9sZGVyID0gdGhpcy5icmVhZGNydW1iQ2FjaGUuZ2V0KGZvbGRlcklkKTtcbiAgICBpZiAoY2FjaGVkRm9sZGVyKSB7XG4gICAgICByZXR1cm4gY2FjaGVkRm9sZGVyLnBhcmVudElkXG4gICAgICAgID8gdGhpcy4jZmV0Y2hGb2xkZXIoY2FjaGVkRm9sZGVyLnBhcmVudElkLCBkZXB0aCArIDEsIG1heERlcHRoKS5waXBlKFxuICAgICAgICAgICAgbWFwKChwYXJlbnRGb2xkZXJzKSA9PiAoe1xuICAgICAgICAgICAgICBwYXJ0aWFsOiBwYXJlbnRGb2xkZXJzLnBhcnRpYWwsXG4gICAgICAgICAgICAgIGl0ZW1zOiBbLi4ucGFyZW50Rm9sZGVycy5pdGVtcywgeyBuYW1lOiBjYWNoZWRGb2xkZXIubmFtZSwgaWQ6IGNhY2hlZEZvbGRlci5pZCB9XVxuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgKVxuICAgICAgICA6IG9mKHtcbiAgICAgICAgICAgIHBhcnRpYWw6IGZhbHNlLFxuICAgICAgICAgICAgaXRlbXM6IFt7IG5hbWU6IGNhY2hlZEZvbGRlci5uYW1lLCBpZDogY2FjaGVkRm9sZGVyLmlkIH1dXG4gICAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLiNkbXNTZXJ2aWNlLmdldERtc09iamVjdChmb2xkZXJJZCkucGlwZShcbiAgICAgIG1hcCgoZm9sZGVyKSA9PiB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRGb2xkZXIgPSB7XG4gICAgICAgICAgbmFtZTogZm9sZGVyLmRhdGFbRlNfUFJPUEVSVElFUy5uYW1lXSBhcyBzdHJpbmcsXG4gICAgICAgICAgaWQ6IGZvbGRlci5kYXRhW0Jhc2VPYmplY3RUeXBlRmllbGQuT0JKRUNUX0lEXSBhcyBzdHJpbmcsXG4gICAgICAgICAgcGFyZW50SWQ6IGZvbGRlci5wYXJlbnRJZFxuICAgICAgICB9O1xuICAgICAgICAvLyB0aGlzLmJyZWFkY3J1bWJDYWNoZS5zZXQoZm9sZGVyLmlkLCBjdXJyZW50Rm9sZGVyKTtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRGb2xkZXI7XG4gICAgICB9KSxcbiAgICAgIHN3aXRjaE1hcCgoZm9sZGVyKSA9PiB7XG4gICAgICAgIGlmICghZm9sZGVyLnBhcmVudElkKSB7XG4gICAgICAgICAgcmV0dXJuIG9mKHtcbiAgICAgICAgICAgIHBhcnRpYWw6IGZhbHNlLFxuICAgICAgICAgICAgaXRlbXM6IFt7IG5hbWU6IGZvbGRlci5uYW1lLCBpZDogZm9sZGVyLmlkIH1dXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy4jZmV0Y2hGb2xkZXIoZm9sZGVyLnBhcmVudElkLCBkZXB0aCArIDEsIG1heERlcHRoKS5waXBlKFxuICAgICAgICAgIG1hcCgocGFyZW50Rm9sZGVycykgPT4gKHtcbiAgICAgICAgICAgIHBhcnRpYWw6IHBhcmVudEZvbGRlcnMucGFydGlhbCxcbiAgICAgICAgICAgIGl0ZW1zOiBbLi4ucGFyZW50Rm9sZGVycy5pdGVtcywgeyBuYW1lOiBmb2xkZXIubmFtZSwgaWQ6IGZvbGRlci5pZCB9XVxuICAgICAgICAgIH0pKVxuICAgICAgICApO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0VmVyc2lvbnMoaWQ6IHN0cmluZyk6IE9ic2VydmFibGU8RG1zT2JqZWN0W10+IHtcbiAgICBwYXRjaFN0YXRlKHRoaXMuc3RhdGUkLCB7IGJ1c3k6IHRydWUgfSk7XG4gICAgcmV0dXJuIHRoaXMuI2Rtc1NlcnZpY2UuZ2V0RG1zT2JqZWN0VmVyc2lvbnMoaWQpLnBpcGUoXG4gICAgICB0YXAoKHZlcnNpb25zKSA9PiB7XG4gICAgICAgIHBhdGNoU3RhdGUodGhpcy5zdGF0ZSQsIHtcbiAgICAgICAgICBidXN5OiBmYWxzZSxcbiAgICAgICAgICB2ZXJzaW9uczoge1xuICAgICAgICAgICAgdmVyc2lvbnNMaXN0OiBtYXBTZWFyY2hSZXN1bHQodmVyc2lvbnMpLFxuICAgICAgICAgICAgc2VsZWN0ZWRWZXJzaW9uOiB0aGlzLnN0YXRlJC52ZXJzaW9ucygpLnNlbGVjdGVkVmVyc2lvblxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXRTZWxlY3RlZERtc09iamVjdChpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxEbXNPYmplY3Q+IHtcbiAgICByZXR1cm4gdGhpcy4jZG1zU2VydmljZS5nZXREbXNPYmplY3QoaWQpLnBpcGUoXG4gICAgICB0YXAoKGRtc09iamVjdCkgPT5cbiAgICAgICAgcGF0Y2hTdGF0ZSh0aGlzLnN0YXRlJCwge1xuICAgICAgICAgIHNlbGVjdGVkRG1zT2JqZWN0OiBkbXNPYmplY3QsXG4gICAgICAgICAgdmVyc2lvbnM6IHtcbiAgICAgICAgICAgIHZlcnNpb25zTGlzdDogdGhpcy5zdGF0ZSQudmVyc2lvbnMudmVyc2lvbnNMaXN0KCksXG4gICAgICAgICAgICBzZWxlY3RlZFZlcnNpb246IFtkbXNPYmplY3RdXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBzZXRTZWxlY3RlZFZlcnNpb24odmVyc2lvbjogYW55KSB7XG4gICAgdGhpcy5zZXRCdXN5KHRydWUpO1xuICAgIHJldHVybiB0aGlzLiNkbXNTZXJ2aWNlLmdldERtc09iamVjdFZlcnNpb24odmVyc2lvbi5kbXNPYmplY3QuaWQsIHZlcnNpb24uZG1zT2JqZWN0LnZlcnNpb24pLnBpcGUoXG4gICAgICB0YXAoKHJlcykgPT5cbiAgICAgICAgcGF0Y2hTdGF0ZSh0aGlzLnN0YXRlJCwge1xuICAgICAgICAgIHZlcnNpb25zOiB7XG4gICAgICAgICAgICB2ZXJzaW9uc0xpc3Q6IHRoaXMuc3RhdGUkLnZlcnNpb25zLnZlcnNpb25zTGlzdCgpLFxuICAgICAgICAgICAgc2VsZWN0ZWRWZXJzaW9uOiBbcmVzXVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICksXG4gICAgICB0YXAoKCkgPT4gdGhpcy5zZXRCdXN5KGZhbHNlKSlcbiAgICApO1xuICB9XG5cbiAgc2V0TmV3VmVyc2lvbih2ZXJzaW9uPzogbnVtYmVyKTogT2JzZXJ2YWJsZTxEbXNPYmplY3RbXSB8IG51bGw+IHtcbiAgICBwYXRjaFN0YXRlKHRoaXMuc3RhdGUkLCB7IGJ1c3k6IHRydWUgfSk7XG4gICAgY29uc3Qgc2VsZWN0ZWRWZXJzaW9uID0gdGhpcy5zdGF0ZSQudmVyc2lvbnMuc2VsZWN0ZWRWZXJzaW9uKCk7XG4gICAgaWYgKHNlbGVjdGVkVmVyc2lvbikge1xuICAgICAgY29uc3QgdmVyc2lvbk51bWJlcjogbnVtYmVyID0gdmVyc2lvbiA/PyBzZWxlY3RlZFZlcnNpb25bMF0udmVyc2lvbjtcbiAgICAgIHJldHVybiB0aGlzLiNkbXNTZXJ2aWNlLnJlc3RvcmVEbXNPYmplY3Qoc2VsZWN0ZWRWZXJzaW9uWzBdLmlkLCB2ZXJzaW9uTnVtYmVyKS5waXBlKHN3aXRjaE1hcCgob2JqZWN0OiBEbXNPYmplY3QpID0+IHRoaXMuZ2V0VmVyc2lvbnMob2JqZWN0LmlkKSkpO1xuICAgIH1cbiAgICByZXR1cm4gb2YobnVsbCk7XG4gIH1cblxuICBjbGVhclZlcnNpb25zKCkge1xuICAgIHBhdGNoU3RhdGUodGhpcy5zdGF0ZSQsIHsgdmVyc2lvbnM6IHRoaXMuaW5pdGlhbFN0YXRlLnZlcnNpb25zIH0pO1xuICB9XG59XG4iXX0=