@sunbird-cb/toc 0.0.8 → 0.0.10

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/_collection/_common/content-toc/app-toc-content/app-toc-content.component.mjs +40 -4
  2. package/esm2022/lib/_collection/_common/content-toc/app-toc-content-card-v2/app-toc-content-card-v2.component.mjs +210 -63
  3. package/esm2022/lib/components/app-toc-home-v2/app-toc-home-v2.component.mjs +34 -1
  4. package/esm2022/lib/services/app-toc-v2.service.mjs +105 -16
  5. package/esm2022/lib/services/app-toc.service.mjs +303 -43
  6. package/esm2022/lib/services/viewer-util.service.mjs +30 -21
  7. package/esm2022/public-api.mjs +3 -1
  8. package/fesm2022/sunbird-cb-toc.mjs +795 -223
  9. package/fesm2022/sunbird-cb-toc.mjs.map +1 -1
  10. package/lib/_collection/_common/content-toc/app-toc-content/app-toc-content.component.d.ts +2 -0
  11. package/lib/_collection/_common/content-toc/app-toc-content/app-toc-content.component.d.ts.map +1 -1
  12. package/lib/_collection/_common/content-toc/app-toc-content-card-v2/app-toc-content-card-v2.component.d.ts +27 -7
  13. package/lib/_collection/_common/content-toc/app-toc-content-card-v2/app-toc-content-card-v2.component.d.ts.map +1 -1
  14. package/lib/components/app-toc-home-v2/app-toc-home-v2.component.d.ts +6 -0
  15. package/lib/components/app-toc-home-v2/app-toc-home-v2.component.d.ts.map +1 -1
  16. package/lib/services/app-toc-v2.service.d.ts +2 -0
  17. package/lib/services/app-toc-v2.service.d.ts.map +1 -1
  18. package/lib/services/app-toc.service.d.ts +64 -1
  19. package/lib/services/app-toc.service.d.ts.map +1 -1
  20. package/lib/services/viewer-util.service.d.ts.map +1 -1
  21. package/package.json +1 -1
  22. package/public-api.d.ts +2 -0
  23. package/public-api.d.ts.map +1 -1
@@ -161,12 +161,12 @@ export class ViewerUtilService {
161
161
  if (this.tocSvc.hashmap[contentId] &&
162
162
  (!this.tocSvc.hashmap[contentId]['completionStatus'] || this.tocSvc.hashmap[contentId]['completionStatus'] < 2)) {
163
163
  this.tocSvc.hashmap[contentId]['completionPercentage'] = req.request.contents[0].completionPercentage;
164
- this.tocSvc.hashmap[contentId]['completionStatus'] = req.request.contents[0].status;
164
+ this.tocSvc.hashmap[contentId]['completionStatus'] = Number(req.request.contents[0].status) || 0;
165
165
  this.tocSvc.hashmap = { ...this.tocSvc.hashmap };
166
- // Notify UI components about hashmap changes
167
- this.tocSvc.hashmapUpdated.next(this.tocSvc.hashmap);
168
- // Trigger milestone lock recomputation for Learning Pathways
166
+ // Trigger milestone lock recomputation - it will emit hashmapUpdated with both progress and lock changes
169
167
  this.tocSvc.triggerMilestoneLockUpdate();
168
+ // Emit to trigger viewer component refresh for Learning Pathways
169
+ this.markAsCompleteSubject.next(true);
170
170
  }
171
171
  }
172
172
  else {
@@ -357,14 +357,14 @@ export class ViewerUtilService {
357
357
  if (this.tocSvc.hashmap[contentId] &&
358
358
  (!this.tocSvc.hashmap[contentId]['completionStatus'] || this.tocSvc.hashmap[contentId]['completionStatus'] < 2)) {
359
359
  this.tocSvc.hashmap[contentId]['completionPercentage'] = req.request.contents[0].completionPercentage;
360
- this.tocSvc.hashmap[contentId]['completionStatus'] = req.request.contents[0].status;
360
+ this.tocSvc.hashmap[contentId]['completionStatus'] = Number(req.request.contents[0].status) || 0;
361
361
  this.tocSvc.hashmap = { ...this.tocSvc.hashmap };
362
- // Notify UI components about hashmap changes
363
- this.tocSvc.hashmapUpdated.next(this.tocSvc.hashmap);
364
- // Trigger milestone lock recomputation for Learning Pathways
362
+ // Trigger milestone lock recomputation - it will emit hashmapUpdated with both progress and lock changes
365
363
  if (this.tocSvc.triggerMilestoneLockUpdate) {
366
364
  this.tocSvc.triggerMilestoneLockUpdate();
367
365
  }
366
+ // Emit to trigger viewer component refresh for Learning Pathways
367
+ this.markAsCompleteSubject.next(true);
368
368
  }
369
369
  }
370
370
  }
@@ -432,8 +432,14 @@ export class ViewerUtilService {
432
432
  if (this.tocSvc.hashmap[contentId] &&
433
433
  (!this.tocSvc.hashmap[contentId]['completionStatus'] || this.tocSvc.hashmap[contentId]['completionStatus'] < 2)) {
434
434
  this.tocSvc.hashmap[contentId]['completionPercentage'] = contentProgress.completionPercentage;
435
- this.tocSvc.hashmap[contentId]['completionStatus'] = contentProgress.status;
435
+ this.tocSvc.hashmap[contentId]['completionStatus'] = Number(contentProgress.status) || 0;
436
436
  this.tocSvc.hashmap = { ...this.tocSvc.hashmap };
437
+ // Trigger milestone lock recomputation - it will emit hashmapUpdated with both progress and lock changes
438
+ if (this.tocSvc.triggerMilestoneLockUpdate) {
439
+ this.tocSvc.triggerMilestoneLockUpdate();
440
+ }
441
+ // Emit to trigger viewer component refresh for Learning Pathways
442
+ this.markAsCompleteSubject.next(true);
437
443
  }
438
444
  }
439
445
  getFormById(formId) {
@@ -503,16 +509,16 @@ export class ViewerUtilService {
503
509
  if (this.tocSvc.hashmap[contentId] &&
504
510
  (!this.tocSvc.hashmap[contentId]['completionStatus'] || this.tocSvc.hashmap[contentId]['completionStatus'] < 2)) {
505
511
  this.tocSvc.hashmap[contentId]['completionPercentage'] = req.request.contents[0].completionPercentage;
506
- this.tocSvc.hashmap[contentId]['completionStatus'] = req.request.contents[0].status;
512
+ this.tocSvc.hashmap[contentId]['completionStatus'] = Number(req.request.contents[0].status) || 0;
507
513
  this.tocSvc.hashmap[contentId]['parent'] = req.request.contents[0].courseId;
508
514
  this.tocSvc.hashmap[contentId]['progress'] = req.request.contents[0].progressdetails;
509
515
  this.tocSvc.hashmap = { ...this.tocSvc.hashmap };
510
- // Notify UI components about hashmap changes
511
- this.tocSvc.hashmapUpdated.next(this.tocSvc.hashmap);
512
- // Trigger milestone lock recomputation for Learning Pathways
516
+ // Trigger milestone lock recomputation - it will emit hashmapUpdated with both progress and lock changes
513
517
  if (this.tocSvc.triggerMilestoneLockUpdate) {
514
518
  this.tocSvc.triggerMilestoneLockUpdate();
515
519
  }
520
+ // Emit to trigger viewer component refresh for Learning Pathways
521
+ this.markAsCompleteSubject.next(true);
516
522
  }
517
523
  // console.log('Updated hashmap:', this.tocSvc.hashmap)
518
524
  // console.log('this.tocSvc.hashmap---', this.tocSvc.hashmap)
@@ -550,18 +556,21 @@ export class ViewerUtilService {
550
556
  .subscribe(noop, noop);
551
557
  }
552
558
  if (this.tocSvc.hashmap && this.tocSvc.hashmap[contentId] && req.request.contents[0]) {
559
+ // Update hashmap if status changed
553
560
  if (this.tocSvc.hashmap[contentId] &&
554
561
  (!this.tocSvc.hashmap[contentId]['completionStatus'] || this.tocSvc.hashmap[contentId]['completionStatus'] < 2)) {
555
562
  this.tocSvc.hashmap[contentId]['completionPercentage'] = req.request.contents[0].completionPercentage;
556
- this.tocSvc.hashmap[contentId]['completionStatus'] = req.request.contents[0].status;
563
+ this.tocSvc.hashmap[contentId]['completionStatus'] = Number(req.request.contents[0].status) || 0;
557
564
  this.tocSvc.hashmap = { ...this.tocSvc.hashmap };
558
- // Notify UI components about hashmap changes
559
- this.tocSvc.hashmapUpdated.next(this.tocSvc.hashmap);
560
- // Trigger milestone lock recomputation for Learning Pathways
561
- if (this.tocSvc.triggerMilestoneLockUpdate) {
562
- this.tocSvc.triggerMilestoneLockUpdate();
563
- }
564
565
  }
566
+ // ALWAYS trigger milestone lock recomputation when pre-assessment completes
567
+ // This ensures milestone 1 unlocks immediately after pre-assessment completion
568
+ if (this.tocSvc.triggerMilestoneLockUpdate) {
569
+ this.tocSvc.triggerMilestoneLockUpdate();
570
+ }
571
+ // Emit markAsCompleteSubject to trigger viewer component to refresh enrollment and progress
572
+ // This is critical for Learning Pathways to unlock milestones immediately
573
+ this.markAsCompleteSubject.next(true);
565
574
  }
566
575
  }
567
576
  else {
@@ -587,4 +596,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
587
596
  type: Inject,
588
597
  args: ['environment']
589
598
  }] }]; } });
590
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld2VyLXV0aWwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcnkvc3VuYmlyZC1jYi90b2Mvc3JjL2xpYi9zZXJ2aWNlcy92aWV3ZXItdXRpbC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQTtBQUM3RCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUVsRCxPQUFPLEVBQUUsSUFBSSxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUNoRCxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUE7Ozs7Ozs7QUFRekIsTUFBTSxPQUFPLGlCQUFpQjtJQW9CNUIsWUFDVSxJQUFnQixFQUNoQixhQUFvQyxFQUNwQyxVQUFnQyxFQUNoQyxNQUFxQixFQUNyQixPQUE2QixFQUM3QixjQUFzQyxFQUN0QyxhQUFnQyxFQUNULFdBQWdCO1FBUHZDLFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIsa0JBQWEsR0FBYixhQUFhLENBQXVCO1FBQ3BDLGVBQVUsR0FBVixVQUFVLENBQXNCO1FBQ2hDLFdBQU0sR0FBTixNQUFNLENBQWU7UUFDckIsWUFBTyxHQUFQLE9BQU8sQ0FBc0I7UUFDN0IsbUJBQWMsR0FBZCxjQUFjLENBQXdCO1FBQ3RDLGtCQUFhLEdBQWIsYUFBYSxDQUFtQjtRQUNULGdCQUFXLEdBQVgsV0FBVyxDQUFLO1FBM0JqRCxrQkFBYSxHQUFHO1lBQ2QsV0FBVyxFQUFFLHNDQUFzQztZQUNuRCxzRUFBc0U7WUFDdEUsZUFBZSxFQUFFLGtDQUFrQztZQUNuRCxrQkFBa0IsRUFBRSxxQ0FBcUM7WUFDekQsYUFBYSxFQUFFLENBQUMsTUFBYyxFQUFFLEVBQUUsQ0FBQywrQ0FBK0MsTUFBTSxFQUFFO1lBQzFGLFdBQVcsRUFBRSwwQ0FBMEM7WUFDdkQsdUZBQXVGO1lBQ3ZGLDJEQUEyRDtZQUMzRCwyQkFBMkIsRUFBRSwwQ0FBMEM7U0FFeEUsQ0FBQTtRQUNELGtCQUFhLEdBQUcsSUFBSSxNQUFNLENBQUMsc0NBQXNDLEVBQUUsSUFBSSxDQUFDLENBQUE7UUFDeEUsa0JBQWEsR0FBRyxvQkFBb0IsQ0FBQTtRQUNwQywwQkFBcUIsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFBO1FBQ3JDLHNCQUFpQixHQUFHLElBQUksT0FBTyxFQUFFLENBQUE7UUFDakMsc0JBQWlCLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQTtRQUNqQyxlQUFVLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQTtRQUN4RyxzQkFBaUIsR0FBUSxFQUFFLENBQUE7UUE4WTNCLHlCQUFvQixHQUFHLENBQUMsSUFBSSxHQUFHLEVBQUUsRUFBRSxNQUFjLEVBQUUsTUFBYyxFQUFVLEVBQUU7WUFDM0UsT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLEdBQUcsa0JBQWtCLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUE7UUFDdEUsQ0FBQyxDQUFBO0lBdFlHLENBQUM7SUFFTCxLQUFLLENBQUMsaUJBQWlCLENBQUMsR0FBVztRQUNqQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQ3JCLE1BQU0sWUFBWSxHQUFHLE1BQU0sSUFBSSxDQUFDLElBQUk7YUFDakMsR0FBRyxDQUFNLEdBQUcsQ0FBQzthQUNiLFNBQVMsRUFBRTthQUNYLEtBQUssQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUE7UUFDNUIsT0FBTyxZQUFZLENBQUE7SUFDckIsQ0FBQztJQUVPLEtBQUssQ0FBQyxXQUFXLENBQUMsVUFBa0I7UUFDMUMsa0JBQWtCO1FBQ2xCLHlEQUF5RDtRQUN6RCxpQkFBaUI7UUFDakIsK0JBQStCO1FBQy9CLE9BQU07SUFDUixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsT0FBaUIsRUFBRSxHQUFXLEVBQUUsUUFBaUI7UUFDaEUsSUFBSTtZQUNGLE1BQU0sSUFBSSxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQTtZQUN6QixJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLEdBQUcsRUFBRTtnQkFDOUIsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQTtnQkFDNUMsTUFBTSxZQUFZLEdBQUcsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFBO2dCQUN6QyxJQUFJLE9BQU8sR0FBRyxVQUFVLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO2dCQUNqRCxJQUNFLFFBQVEsS0FBSyxTQUFTLENBQUMsVUFBVSxDQUFDLEdBQUc7b0JBQ3JDLFFBQVEsS0FBSyxTQUFTLENBQUMsVUFBVSxDQUFDLElBQUk7b0JBQ3RDLFFBQVEsS0FBSyxTQUFTLENBQUMsVUFBVSxDQUFDLEdBQUc7b0JBQ3JDLFFBQVEsS0FBSyxTQUFTLENBQUMsVUFBVSxDQUFDLEdBQUc7b0JBQ3JDLFFBQVEsS0FBSyxTQUFTLENBQUMsVUFBVSxDQUFDLE9BQU87b0JBQ3pDLFFBQVEsS0FBSyxTQUFTLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFDeEM7b0JBQ0EsSUFBSSxPQUFPLElBQUksQ0FBQyxFQUFFO3dCQUNoQiwwQ0FBMEM7d0JBQzFDLE9BQU8sR0FBRyxDQUFDLENBQUE7cUJBQ1o7eUJBQU0sSUFBSSxPQUFPLElBQUksRUFBRSxFQUFFO3dCQUN4QixnREFBZ0Q7d0JBQ2hELE9BQU8sR0FBRyxHQUFHLENBQUE7cUJBQ2Q7aUJBQ0Y7Z0JBQ0QsT0FBTyxPQUFPLENBQUE7YUFDZjtZQUNELE9BQU8sQ0FBQyxDQUFBO1NBQ1Q7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNWLHVDQUF1QztZQUN2QyxPQUFPLENBQUMsR0FBRyxDQUFDLGlDQUFpQyxFQUFFLENBQUMsQ0FBQyxDQUFBO1lBQ2pELE9BQU8sQ0FBQyxDQUFBO1NBQ1Q7SUFDSCxDQUFDO0lBRUQsU0FBUyxDQUFDLE9BQWlCLEVBQUUsR0FBVyxFQUFFLFFBQWlCO1FBQ3pELElBQUk7WUFDRixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQTtZQUNoRSx3QkFBd0I7WUFDeEIsSUFDRSxRQUFRLEtBQUssU0FBUyxDQUFDLFVBQVUsQ0FBQyxHQUFHO2dCQUNyQyxRQUFRLEtBQUssU0FBUyxDQUFDLFVBQVUsQ0FBQyxJQUFJO2dCQUN0QyxRQUFRLEtBQUssU0FBUyxDQUFDLFVBQVUsQ0FBQyxHQUFHO2dCQUNyQyxRQUFRLEtBQUssU0FBUyxDQUFDLFVBQVUsQ0FBQyxHQUFHO2dCQUNyQyxRQUFRLEtBQUssU0FBUyxDQUFDLFVBQVUsQ0FBQyxNQUFNO2dCQUN4QyxRQUFRLEtBQUssU0FBUyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQ3JDO2dCQUNBLHlEQUF5RDtnQkFDekQsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRTtvQkFDOUIsT0FBTyxDQUFDLENBQUE7aUJBQ1Q7Z0JBQ0QsOERBQThEO2dCQUM5RCxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxFQUFFO29CQUMvQixPQUFPLENBQUMsQ0FBQTtpQkFDVDthQUNGO2lCQUFNO2dCQUNMLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxHQUFHLEVBQUU7b0JBQ2hDLE9BQU8sQ0FBQyxDQUFBO2lCQUNUO2FBQ0Y7WUFDRCxPQUFPLENBQUMsQ0FBQTtTQUNUO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDVix1Q0FBdUM7WUFDdkMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxvQ0FBb0MsRUFBRSxDQUFDLENBQUMsQ0FBQTtZQUNwRCxPQUFPLENBQUMsQ0FBQTtTQUNUO0lBQ0gsQ0FBQztJQUVELHNCQUFzQixDQUFDLFNBQWlCLEVBQUUsT0FBWSxFQUFFLFlBQXFCLEVBQUUsT0FBZ0I7UUFDN0YsSUFBSSxHQUFRLENBQUE7UUFDWixJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFO1lBQ2xDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxTQUFTLENBQUMsQ0FBQTtZQUMzRCxHQUFHLEdBQUc7Z0JBQ0osT0FBTyxFQUFFO29CQUNQLE1BQU0sRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxNQUFNLElBQUksRUFBRTtvQkFDbkQsUUFBUSxFQUFFO3dCQUNSOzRCQUNFLFNBQVM7NEJBQ1QsT0FBTzs0QkFDUCxRQUFROzRCQUNSLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDOzRCQUM1RSxRQUFRLEVBQUUsWUFBWTs0QkFDdEIsY0FBYyxFQUFFLEtBQUssQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLDJCQUEyQixDQUFDOzRCQUNyRSxlQUFlLEVBQUU7Z0NBQ2YsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRO2dDQUMxQixPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87Z0NBQ3hCLFFBQVEsRUFBRSxPQUFPLENBQUMsU0FBUzs2QkFDNUI7NEJBQ0Qsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDO3lCQUNsRztxQkFDRjtpQkFDRjthQUNGLENBQUE7WUFDRCwyQ0FBMkM7WUFDM0Msc0NBQXNDO1lBQ3RDLGdEQUFnRDtZQUVoRCxjQUFjO1lBQ2Qsb0ZBQW9GO1lBQ3BGLDJCQUEyQjtZQUMzQixXQUFXO1lBQ1gsY0FBYztZQUNkLHNFQUFzRTtZQUN0RSwyQkFBMkI7WUFDM0IsSUFBSTtZQUNKLElBQUksQ0FBQyxJQUFJO2lCQUNOLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxJQUFJLFNBQVMsRUFBRSxFQUFFLEdBQUcsQ0FBQztpQkFDaEUsU0FBUyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQTtZQUN4QixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQztnQkFDaEMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtnQkFDakgsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsc0JBQXNCLENBQUMsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQTtnQkFDckcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsa0JBQWtCLENBQUMsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUE7Z0JBQ25GLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFBO2dCQUVoRCw2Q0FBNkM7Z0JBQzdDLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFBO2dCQUVwRCw2REFBNkQ7Z0JBQzdELElBQUksQ0FBQyxNQUFNLENBQUMsMEJBQTBCLEVBQUUsQ0FBQTthQUN6QztTQUNGO2FBQU07WUFDTCxHQUFHLEdBQUcsRUFBRSxDQUFBO1lBQ1IsYUFBYTtTQUNkO0lBQ0gsQ0FBQztJQUVELHFCQUFxQixDQUFDLFFBQWdCLEVBQUUsT0FBZSxFQUFFLFVBQWtCO1FBQ3pFLE1BQU0sUUFBUSxHQUFHO1lBQ2YsUUFBUTtZQUNSLE9BQU87U0FDUixDQUFBO1FBQ0QsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUE7UUFDdkQsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLDBCQUEwQixDQUFBO1FBQ3RFLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsMEJBQTBCLENBQUE7UUFDakUsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDcEIsSUFBSSxlQUFlLENBQUMsY0FBYyxLQUFLLGtCQUFrQixFQUFFO2dCQUN6RCxzREFBc0Q7Z0JBQ3RELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxlQUFlLEVBQUUsVUFBVSxDQUFDLENBQUE7Z0JBRWxGLElBQUksV0FBVyxFQUFFO29CQUNmLDRDQUE0QztvQkFDNUMsUUFBUSxDQUFDLFFBQVEsR0FBRyxXQUFXLENBQUMsVUFBVSxDQUFBO29CQUUxQyxpRUFBaUU7b0JBQ2pFLElBQUksV0FBVyxDQUFDLFVBQVUsRUFBRTt3QkFDMUIsTUFBTSxVQUFVLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FDcEMsQ0FBQyxNQUFXLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEtBQUssV0FBVyxDQUFDLFVBQVUsQ0FDaEUsQ0FBQTt3QkFFRCxJQUFJLFVBQVUsSUFBSSxVQUFVLENBQUMsT0FBTyxFQUFFOzRCQUNwQyxRQUFRLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUE7eUJBQ3RDO3FCQUNGO2lCQUNGO2FBQ0Y7aUJBQU0sSUFBSSxlQUFlLElBQUksbUJBQW1CLENBQUMsa0JBQWtCO2dCQUNsRSxDQUFDLGVBQWUsQ0FBQyxlQUFlLEtBQUssU0FBUyxDQUFDLGdCQUFnQixDQUFDLE9BQU87b0JBQ3JFLGVBQWUsQ0FBQyxlQUFlLEtBQUssU0FBUyxDQUFDLGdCQUFnQixDQUFDLGVBQWU7dUJBQzNFLGVBQWUsQ0FBQyxlQUFlLEtBQUssU0FBUyxDQUFDLGdCQUFnQixDQUFDLGVBQWUsQ0FDbEYsRUFDRDtnQkFDQSxlQUFlLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsU0FBNkIsRUFBRSxFQUFFO29CQUN2RSxJQUFJLFNBQVMsQ0FBQyxlQUFlLEtBQUssU0FBUyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRTt3QkFDbkUsNENBQTRDO3dCQUM1QyxNQUFNLG9CQUFvQixHQUFHLGNBQWMsSUFBSSxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBb0IsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsS0FBSyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUE7d0JBQ3BJLElBQUksU0FBUyxDQUFDLFVBQVUsSUFBSSxTQUFTLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTs0QkFDM0UsSUFBSSxvQkFBb0IsSUFBSSxvQkFBb0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dDQUMzRCxRQUFRLENBQUMsT0FBTyxHQUFHLG9CQUFvQixDQUFDLG9CQUFvQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFBO2dDQUN0RixRQUFRLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUE7NkJBQ3pDO2lDQUFNO2dDQUNMLE1BQU0sSUFBSSxHQUFRLE1BQU0sSUFBSSxDQUFDLHdCQUF3QixDQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLFFBQVEsQ0FBQyxDQUFBO2dDQUN0RyxRQUFRLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUE7Z0NBQ2pDLFFBQVEsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQTs2QkFDaEM7eUJBQ0Y7cUJBQ0Y7eUJBQU0sSUFBSSxlQUFlLENBQUMsZUFBZSxLQUFLLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLEVBQUU7d0JBQ3pGLElBQUksUUFBUSxDQUFDLFFBQVEsS0FBSyxRQUFRLEVBQUU7NEJBQ2xDLE1BQU0sZ0JBQWdCLEdBQUcsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQW9CLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLEtBQUssZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFBOzRCQUNwSCxJQUFJLGVBQWUsQ0FBQyxVQUFVLElBQUksZUFBZSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7Z0NBQ3ZGLElBQUksZ0JBQWdCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtvQ0FDL0IsUUFBUSxDQUFDLE9BQU8sR0FBRyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQTtvQ0FDOUUsUUFBUSxDQUFDLFFBQVEsR0FBRyxlQUFlLENBQUMsVUFBVSxDQUFBO2lDQUMvQzs2QkFDRjt5QkFDRjtxQkFDRjtnQkFDSCxDQUFDLENBQUMsQ0FBQTthQUNIO1NBQ0Y7UUFDRCxPQUFPLFFBQVEsQ0FBQTtJQUNqQixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSyxxQkFBcUIsQ0FBQyxPQUFZLEVBQUUsVUFBa0I7UUFDNUQsMERBQTBEO1FBQzFELElBQUksT0FBTyxDQUFDLFNBQVMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUN6RCxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO2dCQUNoRCxPQUFPLElBQUksQ0FBQTthQUNaO1NBQ0Y7UUFFRCw2REFBNkQ7UUFDN0QsSUFBSSxPQUFPLENBQUMsVUFBVSxLQUFLLFVBQVUsRUFBRTtZQUNyQyxPQUFPLElBQUksQ0FBQTtTQUNaO1FBRUQsaUNBQWlDO1FBQ2pDLElBQUksT0FBTyxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUN2RCxLQUFLLE1BQU0sS0FBSyxJQUFJLE9BQU8sQ0FBQyxRQUFRLEVBQUU7Z0JBQ3BDLElBQUksSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsRUFBRTtvQkFDakQsT0FBTyxJQUFJLENBQUE7aUJBQ1o7YUFDRjtTQUNGO1FBRUQsT0FBTyxLQUFLLENBQUE7SUFDZCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCw0QkFBNEIsQ0FBQyxzQkFBMkIsRUFBRSxVQUFrQjtRQUMxRSxnQ0FBZ0M7UUFDaEMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLGFBQWEsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUMsYUFBYSxDQUFDLEVBQUU7WUFDakcsT0FBTyxJQUFJLENBQUE7U0FDWjtRQUVELDhCQUE4QjtRQUM5QixLQUFLLE1BQU0sU0FBUyxJQUFJLHNCQUFzQixDQUFDLGFBQWEsRUFBRTtZQUM1RCxpQ0FBaUM7WUFDakMsSUFBSSxTQUFTLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUN6RCw0Q0FBNEM7Z0JBQzVDLEtBQUssTUFBTSxNQUFNLElBQUksU0FBUyxDQUFDLE9BQU8sRUFBRTtvQkFDdEMsNkNBQTZDO29CQUM3QyxJQUFJLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLEVBQUU7d0JBQ2xELE9BQU8sTUFBTSxDQUFBO3FCQUNkO2lCQUNGO2FBQ0Y7U0FDRjtRQUVELE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQztJQUVELDBCQUEwQixDQUFDLFVBQWtCO1FBRTNDLElBQUksWUFBWSxHQUFRLFNBQVMsQ0FBQTtRQUNqQyxJQUFJLGFBQWEsR0FBRyxLQUFLLENBQUE7UUFDekIsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUE7UUFDdkQsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDcEIsZUFBZSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsS0FBSyxFQUFFLFNBQTZCLEVBQUUsRUFBRTtnQkFDeEUsSUFBSSxTQUFTLENBQUMsZUFBZSxLQUFLLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUU7b0JBQ25FLDRDQUE0QztvQkFDNUMsSUFBSSxTQUFTLENBQUMsU0FBUyxJQUFJLFNBQVMsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO3dCQUN6RSxZQUFZLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsQ0FBQTt3QkFDaEUsYUFBYSxHQUFHLElBQUksQ0FBQTtxQkFDckI7aUJBQ0Y7WUFDSCxDQUFDLENBQ0EsQ0FBQTtZQUNELElBQUksQ0FBQyxhQUFhLEVBQUU7Z0JBQ2xCLElBQUksZUFBZSxDQUFDLFNBQVMsSUFBSSxlQUFlLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtvQkFDckYsWUFBWSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsa0JBQWtCLENBQUMsZUFBZSxDQUFDLENBQUE7aUJBQ3ZFO2FBQ0Y7U0FDRjtRQUNELE9BQU8sWUFBWSxDQUFBO0lBQ3JCLENBQUM7SUFFRCxLQUFLLENBQUMsd0JBQXdCLENBQUMsU0FBNkIsRUFBRSxXQUFtQixFQUFFLGVBQW9CLEVBQUUsU0FBYztRQUNySCw0Q0FBNEM7UUFDNUMsTUFBTSxVQUFVLEdBQVEsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQWtDLEVBQUUsRUFBRTtZQUNuSixJQUFJLElBQUksRUFBRTtnQkFDUiw0Q0FBNEM7Z0JBQzVDLE1BQU0sWUFBWSxHQUFHLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyw4QkFBOEIsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxNQUFNLEVBQUUsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBUSxFQUFFLEVBQUU7b0JBQ3ZLLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxPQUFPLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUU7d0JBQzVDLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQTtxQkFDbkI7b0JBQ0QsT0FBTyxDQUFDLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBQyxVQUFVLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUE7Z0JBRTFELENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFO29CQUNyQixPQUFPLENBQUMsRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQTtnQkFDMUQsQ0FBQyxDQUFDLENBQUE7Z0JBQ0YsSUFBSSxDQUFDLFVBQVUsQ0FBQywwQkFBMEIsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQywwQkFBMEIsRUFBRSxHQUFHLFlBQVksQ0FBQyxDQUFBO2dCQUM3RyxPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBQyxVQUFVLEVBQUUsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQTthQUM1RTtRQUNILENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFO1lBQ3JCLE9BQU8sQ0FBQyxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsVUFBVSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFBO1FBQzFELENBQUMsQ0FBQyxDQUFBO1FBQ0YsT0FBTyxVQUFVLENBQUE7SUFDbkIsQ0FBQztJQUVELDBCQUEwQixDQUFDLFNBQWlCLEVBQUUsWUFBcUIsRUFBRSxPQUFnQixFQUFFLE1BQWU7UUFDcEcsSUFBSSxHQUFRLENBQUE7UUFDWixJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFO1lBQ2xDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxTQUFTLENBQUMsQ0FBQTtZQUMzRCxHQUFHLEdBQUc7Z0JBQ0osT0FBTyxFQUFFO29CQUNQLE1BQU0sRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxNQUFNLElBQUksRUFBRTtvQkFDbkQsUUFBUSxFQUFFO3dCQUNSOzRCQUNFLFNBQVM7NEJBQ1QsT0FBTzs0QkFDUCxRQUFROzRCQUNSLE1BQU0sRUFBRSxNQUFNLElBQUksQ0FBQzs0QkFDbkIsUUFBUSxFQUFFLFlBQVk7NEJBQ3RCLGNBQWMsRUFBRSxLQUFLLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQywyQkFBMkIsQ0FBQzs0QkFDckUsb0JBQW9CLEVBQUUsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO3lCQUM3QztxQkFDRjtpQkFDRjthQUNGLENBQUE7WUFFRCxJQUFJLENBQUMsSUFBSTtpQkFDTixLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsSUFBSSxTQUFTLEVBQUUsRUFBRSxHQUFHLENBQUM7aUJBQ2hFLFNBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUE7WUFDeEIsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDcEYsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUM7b0JBQ2hDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7b0JBQ2pILElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLHNCQUFzQixDQUFDLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsb0JBQW9CLENBQUE7b0JBQ3JHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFBO29CQUNuRixJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQTtvQkFFaEQsNkNBQTZDO29CQUM3QyxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQTtvQkFFcEQsNkRBQTZEO29CQUM3RCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsMEJBQTBCLEVBQUU7d0JBQzFDLElBQUksQ0FBQyxNQUFNLENBQUMsMEJBQTBCLEVBQUUsQ0FBQTtxQkFDekM7aUJBQ0Y7YUFDRjtTQUNGO2FBQU07WUFDTCxHQUFHLEdBQUcsRUFBRSxDQUFBO1lBQ1IsYUFBYTtTQUNkO0lBQ0gsQ0FBQztJQUVELFVBQVUsQ0FBQyxTQUFpQjtRQUMxQixNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFBO1FBQzlHLElBQUksR0FBRyxHQUFHLDJDQUEyQyxTQUFTLEVBQUUsQ0FBQTtRQUNoRSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ2YsR0FBRyxHQUFHLDJDQUEyQyxTQUFTLEVBQUUsQ0FBQTtTQUM3RDthQUFNO1lBQ0wsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUMxRixHQUFHLEdBQUcsMkNBQTJDLFNBQVMsRUFBRSxDQUFBO2FBQzdEO2lCQUFNO2dCQUNMLEdBQUcsR0FBRyx3QkFBd0IsU0FBUyxFQUFFLENBQUE7YUFDMUM7U0FDRjtRQUNELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHO1FBQ2xCLDJDQUEyQztRQUMzQyx1SkFBdUo7UUFDdkosR0FBRyxDQUNKLENBQUE7SUFDSCxDQUFDO0lBRUQsZUFBZSxDQUFDLEdBQVc7UUFDekIsT0FBTyxHQUFHO1lBQ1IsMkNBQTJDO1lBQzNDLENBQUMsQ0FBQyxxQkFBcUIsR0FBRyxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNuSCxDQUFDLENBQUMsRUFBRSxDQUFBO0lBQ1IsQ0FBQztJQU1ELGdCQUFnQixDQUFDLElBQVM7UUFDeEIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUNmLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUMxQixJQUFJLENBQUMsYUFBYSxFQUNsQixJQUFJLENBQUMsb0JBQW9CLENBQzFCLENBQ0YsQ0FBQTtJQUNILENBQUM7SUFDRCxZQUFZLENBQUMsWUFBb0I7UUFDL0IsT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLElBQUksWUFBWSxFQUFFLENBQUE7SUFDaEQsQ0FBQztJQUVELFlBQVksQ0FBQyxHQUFXO1FBQ3RCLE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFBO1FBQ2pELE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsV0FBVyxPQUFPLEVBQUUsQ0FBQTtJQUM5RixDQUFDO0lBRUQsU0FBUyxDQUFDLEdBQVc7UUFDbkIsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUE7UUFDakQsT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGdCQUFnQixXQUFXLE9BQU8sRUFBRSxDQUFBO0lBQzFHLENBQUM7SUFFRCxpQkFBaUI7SUFDakIsdUJBQXVCO0lBQ3ZCLDJEQUEyRDtJQUMzRCx3Q0FBd0M7SUFDeEMsbUJBQW1CO0lBQ25CLHFIQUFxSDtJQUNySCwyQkFBMkI7SUFDM0IsMkdBQTJHO0lBQzNHLGlCQUFpQjtJQUNqQix1RkFBdUY7SUFDdkYsVUFBVTtJQUNWLHNEQUFzRDtJQUN0RCxNQUFNO0lBRU4sWUFBWSxDQUFDLEVBQVUsRUFBRSxJQUFZO1FBQ25DLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQXFCLGdEQUFnRCxFQUFFLFNBQVMsSUFBSSxFQUFFLENBQUMsQ0FBQTtJQUM3RyxDQUFDO0lBRUQsaUNBQWlDLENBQUMsU0FBaUIsRUFBRSxlQUFvQjtRQUN2RSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQztZQUNoQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsa0JBQWtCLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO1lBQ2pILElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLHNCQUFzQixDQUFDLEdBQUcsZUFBZSxDQUFDLG9CQUFvQixDQUFBO1lBQzdGLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsZUFBZSxDQUFDLE1BQU0sQ0FBQTtZQUMzRSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQTtTQUNqRDtJQUNILENBQUM7SUFFRCxXQUFXLENBQUMsTUFBYztRQUN4QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUE7SUFDaEUsQ0FBQztJQUVELFVBQVUsQ0FBQyxRQUFhO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUE7SUFDdEUsQ0FBQztJQUVELHNDQUFzQyxDQUFDLFNBQWlCLEVBQUUsT0FBWTtRQUNwRSxJQUFJLEdBQVEsQ0FBQTtRQUNaLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUU7WUFDbEMsR0FBRyxHQUFHO2dCQUNKLE9BQU8sRUFBRTtvQkFDUCxNQUFNLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsTUFBTSxJQUFJLEVBQUU7b0JBQ25ELFFBQVEsRUFBRTt3QkFDUjs0QkFDRSxTQUFTOzRCQUNULFdBQVc7NEJBQ1gsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxTQUFTLENBQUM7NEJBQzVFLDBCQUEwQjs0QkFDMUIsY0FBYyxFQUFFLEtBQUssQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLDJCQUEyQixDQUFDOzRCQUNyRSxlQUFlLEVBQUU7Z0NBQ2YsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRO2dDQUMxQixPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87Z0NBQ3hCLFFBQVEsRUFBRSxPQUFPLENBQUMsU0FBUzs2QkFDNUI7NEJBQ0Qsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDO3lCQUNsRztxQkFDRjtpQkFDRjthQUNGLENBQUE7WUFDRCwyQ0FBMkM7WUFDM0Msc0NBQXNDO1lBQ3RDLGdEQUFnRDtZQUVoRCxjQUFjO1lBQ2Qsb0ZBQW9GO1lBQ3BGLDJCQUEyQjtZQUMzQixXQUFXO1lBQ1gsY0FBYztZQUNkLHNFQUFzRTtZQUN0RSwyQkFBMkI7WUFDM0IsSUFBSTtZQUNKLFlBQVk7WUFDWixzRUFBc0U7WUFDdEUsMkJBQTJCO1lBQzNCLHVEQUF1RDtZQUN2RCxtRkFBbUY7WUFDbkYsdURBQXVEO1lBRXZELHVDQUF1QztZQUN2QyxrRUFBa0U7WUFFbEUsMEJBQTBCO1lBQzFCLDRCQUE0QjtZQUM1QixzQkFBc0I7WUFDdEIsMEJBQTBCO1lBQzFCLHlEQUF5RDtZQUN6RCxzQ0FBc0M7WUFDdEMsTUFBTTtZQUNOLElBQUk7WUFDSiwwQ0FBMEM7WUFDMUMsMEJBQTBCO1lBRTFCLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxTQUFTLENBQUMsQ0FBQTtZQUNyRSxJQUFJLGNBQWMsR0FBRyxDQUFDLEVBQUU7Z0JBQ3RCLElBQUksQ0FBQyxJQUFJO3FCQUNOLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsMkJBQTJCLEVBQUUsRUFBRSxHQUFHLENBQUM7cUJBQy9ELFNBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUE7YUFDekI7WUFDRCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQztnQkFDaEMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtnQkFDakgsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsc0JBQXNCLENBQUMsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQTtnQkFDckcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsa0JBQWtCLENBQUMsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUE7Z0JBQ25GLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQTtnQkFDM0UsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFBO2dCQUNwRixJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQTtnQkFFaEQsNkNBQTZDO2dCQUM3QyxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQTtnQkFFcEQsNkRBQTZEO2dCQUM3RCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsMEJBQTBCLEVBQUU7b0JBQzFDLElBQUksQ0FBQyxNQUFNLENBQUMsMEJBQTBCLEVBQUUsQ0FBQTtpQkFDekM7YUFDRjtZQUVELHVEQUF1RDtZQUV2RCw2REFBNkQ7U0FDOUQ7YUFBTTtZQUNMLEdBQUcsR0FBRyxFQUFFLENBQUE7WUFDUixhQUFhO1NBQ2Q7SUFDSCxDQUFDO0lBRUQsMENBQTBDLENBQUMsU0FBaUIsRUFBRSxNQUFlLEVBQUUsUUFBaUI7UUFDOUYsSUFBSSxHQUFRLENBQUE7UUFDWixJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFO1lBQ2xDLEdBQUcsR0FBRztnQkFDSixPQUFPLEVBQUU7b0JBQ1Asc0RBQXNEO29CQUN0RCxRQUFRLEVBQUU7d0JBQ1I7NEJBQ0UsU0FBUzs0QkFDVCxXQUFXOzRCQUNYLE1BQU0sRUFBRSxNQUFNLElBQUksQ0FBQzs0QkFDbkIsMEJBQTBCOzRCQUMxQixjQUFjLEVBQUUsS0FBSyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsMkJBQTJCLENBQUM7NEJBQ3JFLG9CQUFvQixFQUFFLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQzs0QkFDOUMsZUFBZSxFQUFFO2dDQUNmLFVBQVUsRUFBRSxRQUFRLElBQUkscUNBQXFDOzZCQUM5RDt5QkFDRjtxQkFDRjtpQkFDRjthQUNGLENBQUE7WUFDRCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsOEJBQThCLENBQUMsU0FBUyxDQUFDLENBQUE7WUFDckUsSUFBSSxjQUFjLEdBQUcsQ0FBQyxFQUFFO2dCQUN0QixJQUFJLENBQUMsSUFBSTtxQkFDTixLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLDJCQUEyQixFQUFFLEVBQUUsR0FBRyxDQUFDO3FCQUMvRCxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFBO2FBQ3pCO1lBQ0QsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDcEYsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUM7b0JBQ2hDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7b0JBQ2pILElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLHNCQUFzQixDQUFDLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsb0JBQW9CLENBQUE7b0JBQ3JHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFBO29CQUNuRixJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQTtvQkFFaEQsNkNBQTZDO29CQUM3QyxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQTtvQkFFcEQsNkRBQTZEO29CQUM3RCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsMEJBQTBCLEVBQUU7d0JBQzFDLElBQUksQ0FBQyxNQUFNLENBQUMsMEJBQTBCLEVBQUUsQ0FBQTtxQkFDekM7aUJBQ0Y7YUFDRjtTQUNGO2FBQU07WUFDTCxHQUFHLEdBQUcsRUFBRSxDQUFBO1lBQ1IsYUFBYTtTQUNkO0lBQ0gsQ0FBQztJQUVELDhCQUE4QixDQUFDLFVBQWtCO1FBQy9DLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUN6RSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFBO1NBQ2hFO1FBQ0QsT0FBTyxDQUFDLENBQUE7SUFDVixDQUFDOytHQTVtQlUsaUJBQWlCLDZQQTRCbEIsYUFBYTttSEE1QlosaUJBQWlCLGNBRmhCLE1BQU07OzRGQUVQLGlCQUFpQjtrQkFIN0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQTZCSSxNQUFNOzJCQUFDLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25maWd1cmF0aW9uc1NlcnZpY2UsIERvbWFpbkNvbmZTZXJ2aWNlIH0gZnJvbSAnQHN1bmJpcmQtY2IvdXRpbHMtdjInXG5pbXBvcnQgeyBOc0NvbnRlbnQgfSBmcm9tICcuLi9fc2VydmljZXMvd2lkZ2V0LWNvbnRlbnQubW9kZWwnXG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJ1xuaW1wb3J0IHsgbm9vcCwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnXG5pbXBvcnQgZGF5anMgZnJvbSAnZGF5anMnXG5pbXBvcnQgeyBBcHBUb2NTZXJ2aWNlIH0gZnJvbSAnLi9hcHAtdG9jLnNlcnZpY2UnXG5pbXBvcnQgeyBDb250ZW50TGFuZ3VhZ2VTZXJ2aWNlLCBXaWRnZXRVc2VyU2VydmljZUxpYiB9IGZyb20gJ0BzdW5iaXJkLWNiL2NvbnN1bXB0aW9uJ1xuaW1wb3J0IHsgV2lkZ2V0Q29udGVudFNlcnZpY2UgfSBmcm9tICcuLi9fY29sbGVjdGlvbi1hcGknXG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBWaWV3ZXJVdGlsU2VydmljZSB7XG4gIEFQSV9FTkRQT0lOVFMgPSB7XG4gICAgc2V0UzNDb29raWU6IGAvYXBpcy92OC9wcm90ZWN0ZWQvY29udGVudC9zZXRDb29raWVgLFxuICAgIC8vIFBST0dSRVNTX1VQREFURTogYC9hcGlzL3Byb3RlY3RlZC92OC91c2VyL3JlYWxUaW1lUHJvZ3Jlc3MvdXBkYXRlYCxcbiAgICBQUk9HUkVTU19VUERBVEU6IGAvYXBpcy9wcm94aWVzL3Y4L2NvbnRlbnQtcHJvZ3Jlc2AsXG4gICAgQVNTRVNTTUVOVF9TRUNUSU9OOiBgL2FwaXMvcHJveGllcy92OC9hc3Nlc3NtZW50L3Y1L3JlYWRgLFxuICAgIEdFVF9GT1JNX0JZSUQ6IChmb3JtSWQ6IHN0cmluZykgPT4gYGFwaXMvcHJveGllcy92OC9mb3Jtcy92Mi9nZXRGb3JtQnlJZD9mb3JtSWQ9JHtmb3JtSWR9YCxcbiAgICBTVUJNSVRfRk9STTogYC9hcGlzL3Byb3hpZXMvdjgvZm9ybXMvdjIvc2F2ZUZvcm1TdWJtaXRgLFxuICAgIC8vIEdFVF9GT1JNX0JZSUQ6IChmb3JtSWQ6IHN0cmluZykgPT4gYGFwaXMvcHJveGllcy92OC9mb3Jtcy9nZXRGb3JtQnlJZD9pZD0ke2Zvcm1JZH1gLFxuICAgIC8vIFNVQk1JVF9GT1JNOiBgL2FwaXMvcHJveGllcy92OC9mb3Jtcy92MS9zYXZlRm9ybVN1Ym1pdGAsXG4gICAgUFJFX0FTU0VTU01FTlRfU1RBVEVfVVBEQVRFOiBgL2FwaXMvcHJveGllcy92OC9jb250ZW50L3YyL3N0YXRlL3VwZGF0ZWBcblxuICB9XG4gIGRvd25sb2FkUmVnZXggPSBuZXcgUmVnRXhwKGAoL2NvbnRlbnQtc3RvcmUvLio/KShcXFxcXFwpP1xcXFxcXFxcP1snXCJdKWAsICdnbScpXG4gIGF1dGhvcmluZ0Jhc2UgPSAnL2FwaXMvYXV0aENvbnRlbnQvJ1xuICBtYXJrQXNDb21wbGV0ZVN1YmplY3QgPSBuZXcgU3ViamVjdCgpXG4gIGF1dG9QbGF5TmV4dFZpZGVvID0gbmV3IFN1YmplY3QoKVxuICBhdXRvUGxheU5leHRBdWRpbyA9IG5ldyBTdWJqZWN0KClcbiAgZm9yUHJldmlldyA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluY2x1ZGVzKCcvcHVibGljLycpIHx8IHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluY2x1ZGVzKCcmcHJldmlldz10cnVlJylcbiAgcHVibGljVXNlckRldGFpbHM6IGFueSA9IHt9XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcbiAgICBwcml2YXRlIGNvbmZpZ3NlcnZpY2U6IENvbmZpZ3VyYXRpb25zU2VydmljZSxcbiAgICBwcml2YXRlIGNvbnRlbnRTdmM6IFdpZGdldENvbnRlbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgdG9jU3ZjOiBBcHBUb2NTZXJ2aWNlLFxuICAgIHByaXZhdGUgdXNlclN2YzogV2lkZ2V0VXNlclNlcnZpY2VMaWIsXG4gICAgcHJpdmF0ZSBjb250ZW50TGFuZ1N2YzogQ29udGVudExhbmd1YWdlU2VydmljZSxcbiAgICBwcml2YXRlIGRvbWFpbkNvbmZTdmM6IERvbWFpbkNvbmZTZXJ2aWNlLFxuICAgIEBJbmplY3QoJ2Vudmlyb25tZW50JykgcHJpdmF0ZSBlbnZpcm9ubWVudDogYW55XG4gICkgeyB9XG5cbiAgYXN5bmMgZmV0Y2hNYW5pZmVzdEZpbGUodXJsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFMzQ29va2llKHVybClcbiAgICBjb25zdCBtYW5pZmVzdEZpbGUgPSBhd2FpdCB0aGlzLmh0dHBcbiAgICAgIC5nZXQ8YW55Pih1cmwpXG4gICAgICAudG9Qcm9taXNlKClcbiAgICAgIC5jYXRjaCgoX2VycjogYW55KSA9PiB7IH0pXG4gICAgcmV0dXJuIG1hbmlmZXN0RmlsZVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZXRTM0Nvb2tpZShfY29udGVudElkOiBzdHJpbmcpIHtcbiAgICAvLyBhd2FpdCB0aGlzLmh0dHBcbiAgICAvLyAgIC5wb3N0KHRoaXMuQVBJX0VORFBPSU5UUy5zZXRTM0Nvb2tpZSwgeyBjb250ZW50SWQgfSlcbiAgICAvLyAgIC50b1Byb21pc2UoKVxuICAgIC8vICAgLmNhdGNoKChfZXJyOiBhbnkpID0+IHsgfSlcbiAgICByZXR1cm5cbiAgfVxuXG4gIGNhbGN1bGF0ZVBlcmNlbnQoY3VycmVudDogc3RyaW5nW10sIG1heDogbnVtYmVyLCBtaW1lVHlwZT86IHN0cmluZyk6IG51bWJlciB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHRlbXAgPSBbLi4uY3VycmVudF1cbiAgICAgIGlmICh0ZW1wICYmIHRlbXAubGVuZ3RoICYmIG1heCkge1xuICAgICAgICBjb25zdCBsYXRlc3QgPSBwYXJzZUZsb2F0KHRlbXAucG9wKCkgfHwgJzAnKVxuICAgICAgICBjb25zdCBwZXJjZW50TWlsaXMgPSAobGF0ZXN0IC8gbWF4KSAqIDEwMFxuICAgICAgICBsZXQgcGVyY2VudCA9IHBhcnNlRmxvYXQocGVyY2VudE1pbGlzLnRvRml4ZWQoMikpXG4gICAgICAgIGlmIChcbiAgICAgICAgICBtaW1lVHlwZSA9PT0gTnNDb250ZW50LkVNaW1lVHlwZXMuTVA0IHx8XG4gICAgICAgICAgbWltZVR5cGUgPT09IE5zQ29udGVudC5FTWltZVR5cGVzLk0zVTggfHxcbiAgICAgICAgICBtaW1lVHlwZSA9PT0gTnNDb250ZW50LkVNaW1lVHlwZXMuTVAzIHx8XG4gICAgICAgICAgbWltZVR5cGUgPT09IE5zQ29udGVudC5FTWltZVR5cGVzLk00QSB8fFxuICAgICAgICAgIG1pbWVUeXBlID09PSBOc0NvbnRlbnQuRU1pbWVUeXBlcy5ZT1VUVUJFIHx8XG4gICAgICAgICAgbWltZVR5cGUgPT09IE5zQ29udGVudC5FTWltZVR5cGVzLlNVUlZFWVxuICAgICAgICApIHtcbiAgICAgICAgICBpZiAocGVyY2VudCA8PSA1KSB7XG4gICAgICAgICAgICAvLyBpZiBwZXJjZW50YWdlIGlzIGxlc3MgdGhhbiA1JSBtYWtlIGl0IDBcbiAgICAgICAgICAgIHBlcmNlbnQgPSAwXG4gICAgICAgICAgfSBlbHNlIGlmIChwZXJjZW50ID49IDk1KSB7XG4gICAgICAgICAgICAvLyBpZiBwZXJjZW50YWdlIGlzIGdyZWF0ZXIgdGhhbiA5NSUgbWFrZSBpdCAxMDBcbiAgICAgICAgICAgIHBlcmNlbnQgPSAxMDBcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBlcmNlbnRcbiAgICAgIH1cbiAgICAgIHJldHVybiAwXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLmxvZygnRXJyb3IgaW4gY2FsY3VsYXRpbmcgcGVyY2VudGFnZScsIGUpXG4gICAgICByZXR1cm4gMFxuICAgIH1cbiAgfVxuXG4gIGdldFN0YXR1cyhjdXJyZW50OiBzdHJpbmdbXSwgbWF4OiBudW1iZXIsIG1pbWVUeXBlPzogc3RyaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBlcmNlbnRhZ2UgPSB0aGlzLmNhbGN1bGF0ZVBlcmNlbnQoY3VycmVudCwgbWF4LCBtaW1lVHlwZSlcbiAgICAgIC8vIGZvciB2aWRlb3MgYW5kIGF1ZGlvc1xuICAgICAgaWYgKFxuICAgICAgICBtaW1lVHlwZSA9PT0gTnNDb250ZW50LkVNaW1lVHlwZXMuTVA0IHx8XG4gICAgICAgIG1pbWVUeXBlID09PSBOc0NvbnRlbnQuRU1pbWVUeXBlcy5NM1U4IHx8XG4gICAgICAgIG1pbWVUeXBlID09PSBOc0NvbnRlbnQuRU1pbWVUeXBlcy5NUDMgfHxcbiAgICAgICAgbWltZVR5cGUgPT09IE5zQ29udGVudC5FTWltZVR5cGVzLk00QSB8fFxuICAgICAgICBtaW1lVHlwZSA9PT0gTnNDb250ZW50LkVNaW1lVHlwZXMuU1VSVkVZIHx8XG4gICAgICAgIG1pbWVUeXBlID09PSBOc0NvbnRlbnQuRU1pbWVUeXBlcy5QREZcbiAgICAgICkge1xuICAgICAgICAvLyBpZiBwZXJjZW50YWdlIGlzIGxlc3MgdGhhbiA1JSB0aGVuIG1ha2Ugc3RhdHVzIHN0YXJ0ZWRcbiAgICAgICAgaWYgKE1hdGguY2VpbChwZXJjZW50YWdlKSA8PSA1KSB7XG4gICAgICAgICAgcmV0dXJuIDFcbiAgICAgICAgfVxuICAgICAgICAvLyBpZiBwZXJjZW50YWdlIGlzIGdyZWF0ZXIgdGhhbiA5NSUgdGhlbiBtYWtlIHN0YXR1cyBjb21wbGV0ZVxuICAgICAgICBpZiAoTWF0aC5jZWlsKHBlcmNlbnRhZ2UpID49IDk1KSB7XG4gICAgICAgICAgcmV0dXJuIDJcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKE1hdGguY2VpbChwZXJjZW50YWdlKSA+PSAxMDApIHtcbiAgICAgICAgICByZXR1cm4gMlxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gMVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tY29uc29sZVxuICAgICAgY29uc29sZS5sb2coJ0Vycm9yIGluIGdldHRpbmcgY29tcGxldGlvbiBzdGF0dXMnLCBlKVxuICAgICAgcmV0dXJuIDFcbiAgICB9XG4gIH1cblxuICByZWFsVGltZVByb2dyZXNzVXBkYXRlKGNvbnRlbnRJZDogc3RyaW5nLCByZXF1ZXN0OiBhbnksIGNvbGxlY3Rpb25JZD86IHN0cmluZywgYmF0Y2hJZD86IHN0cmluZykge1xuICAgIGxldCByZXE6IGFueVxuICAgIGlmICh0aGlzLmNvbmZpZ3NlcnZpY2UudXNlclByb2ZpbGUpIHtcbiAgICAgIGNvbnN0IGxhbmd1YWdlID0gdGhpcy5nZXRSZXNvdXJjZUNvbnRlbnRMYW5ndWFnZShjb250ZW50SWQpXG4gICAgICByZXEgPSB7XG4gICAgICAgIHJlcXVlc3Q6IHtcbiAgICAgICAgICB1c2VySWQ6IHRoaXMuY29uZmlnc2VydmljZS51c2VyUHJvZmlsZS51c2VySWQgfHwgJycsXG4gICAgICAgICAgY29udGVudHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgY29udGVudElkLFxuICAgICAgICAgICAgICBiYXRjaElkLFxuICAgICAgICAgICAgICBsYW5ndWFnZSxcbiAgICAgICAgICAgICAgc3RhdHVzOiB0aGlzLmdldFN0YXR1cyhyZXF1ZXN0LmN1cnJlbnQsIHJlcXVlc3QubWF4X3NpemUsIHJlcXVlc3QubWltZV90eXBlKSxcbiAgICAgICAgICAgICAgY291cnNlSWQ6IGNvbGxlY3Rpb25JZCxcbiAgICAgICAgICAgICAgbGFzdEFjY2Vzc1RpbWU6IGRheWpzKG5ldyBEYXRlKCkpLmZvcm1hdCgnWVlZWS1NTS1ERCBISDptbTpzczpTU1NaWicpLFxuICAgICAgICAgICAgICBwcm9ncmVzc2RldGFpbHM6IHtcbiAgICAgICAgICAgICAgICBtYXhfc2l6ZTogcmVxdWVzdC5tYXhfc2l6ZSxcbiAgICAgICAgICAgICAgICBjdXJyZW50OiByZXF1ZXN0LmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgbWltZVR5cGU6IHJlcXVlc3QubWltZV90eXBlLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBjb21wbGV0aW9uUGVyY2VudGFnZTogdGhpcy5jYWxjdWxhdGVQZXJjZW50KHJlcXVlc3QuY3VycmVudCwgcmVxdWVzdC5tYXhfc2l6ZSwgcmVxdWVzdC5taW1lX3R5cGUpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgfVxuICAgICAgLy8gaWYgKHRoaXMuY29uZmlnc2VydmljZS5jc3Rva2VuICE9PSAnJykge1xuICAgICAgLy8gICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKClcbiAgICAgIC8vICAgLnNldCgnY3N0b2tlbicsIHRoaXMuY29uZmlnc2VydmljZS5jc3Rva2VuKVxuXG4gICAgICAvLyAgIHRoaXMuaHR0cFxuICAgICAgLy8gICAucGF0Y2goYCR7dGhpcy5BUElfRU5EUE9JTlRTLlBST0dSRVNTX1VQREFURX0vJHtjb250ZW50SWR9YCwgeyBoZWFkZXJzIH0gLCByZXEpXG4gICAgICAvLyAgIC5zdWJzY3JpYmUobm9vcCwgbm9vcClcbiAgICAgIC8vIH0gZWxzZSB7XG4gICAgICAvLyAgIHRoaXMuaHR0cFxuICAgICAgLy8gICAucGF0Y2goYCR7dGhpcy5BUElfRU5EUE9JTlRTLlBST0dSRVNTX1VQREFURX0vJHtjb250ZW50SWR9YCwgcmVxKVxuICAgICAgLy8gICAuc3Vic2NyaWJlKG5vb3AsIG5vb3ApXG4gICAgICAvLyB9XG4gICAgICB0aGlzLmh0dHBcbiAgICAgICAgLnBhdGNoKGAke3RoaXMuQVBJX0VORFBPSU5UUy5QUk9HUkVTU19VUERBVEV9LyR7Y29udGVudElkfWAsIHJlcSlcbiAgICAgICAgLnN1YnNjcmliZShub29wLCBub29wKVxuICAgICAgaWYgKHRoaXMudG9jU3ZjLmhhc2htYXBbY29udGVudElkXSAmJlxuICAgICAgICAoIXRoaXMudG9jU3ZjLmhhc2htYXBbY29udGVudElkXVsnY29tcGxldGlvblN0YXR1cyddIHx8IHRoaXMudG9jU3ZjLmhhc2htYXBbY29udGVudElkXVsnY29tcGxldGlvblN0YXR1cyddIDwgMikpIHtcbiAgICAgICAgdGhpcy50b2NTdmMuaGFzaG1hcFtjb250ZW50SWRdWydjb21wbGV0aW9uUGVyY2VudGFnZSddID0gcmVxLnJlcXVlc3QuY29udGVudHNbMF0uY29tcGxldGlvblBlcmNlbnRhZ2VcbiAgICAgICAgdGhpcy50b2NTdmMuaGFzaG1hcFtjb250ZW50SWRdWydjb21wbGV0aW9uU3RhdHVzJ10gPSByZXEucmVxdWVzdC5jb250ZW50c1swXS5zdGF0dXNcbiAgICAgICAgdGhpcy50b2NTdmMuaGFzaG1hcCA9IHsgLi4udGhpcy50b2NTdmMuaGFzaG1hcCB9XG4gICAgICAgIFxuICAgICAgICAvLyBOb3RpZnkgVUkgY29tcG9uZW50cyBhYm91dCBoYXNobWFwIGNoYW5nZXNcbiAgICAgICAgdGhpcy50b2NTdmMuaGFzaG1hcFVwZGF0ZWQubmV4dCh0aGlzLnRvY1N2Yy5oYXNobWFwKVxuICAgICAgICBcbiAgICAgICAgLy8gVHJpZ2dlciBtaWxlc3RvbmUgbG9jayByZWNvbXB1dGF0aW9uIGZvciBMZWFybmluZyBQYXRod2F5c1xuICAgICAgICB0aGlzLnRvY1N2Yy50cmlnZ2VyTWlsZXN0b25lTG9ja1VwZGF0ZSgpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcSA9IHt9XG4gICAgICAvLyBkbyBub3RoaW5nXG4gICAgfVxuICB9XG5cbiAgZ2V0QmF0Y2hJZEFuZENvdXJzZUlkKGNvdXJzZUlkOiBzdHJpbmcsIGJhdGNoSWQ6IHN0cmluZywgcmVzb3VyY2VJZDogc3RyaW5nKSB7XG4gICAgY29uc3QgdGVtcERhdGEgPSB7XG4gICAgICBjb3Vyc2VJZCxcbiAgICAgIGJhdGNoSWQsXG4gICAgfVxuICAgIGNvbnN0IHRlbXBDb250ZW50RGF0YSA9IHRoaXMuY29udGVudFN2Yy5jdXJyZW50TWV0YURhdGFcbiAgICBjb25zdCB0ZW1wQ29udGVudFJlYWREYXRhID0gdGhpcy5jb250ZW50U3ZjLmN1cnJlbnRDb250ZW50UmVhZE1ldGFEYXRhXG4gICAgY29uc3QgZW5yb2xsbWVudExpc3QgPSB0aGlzLmNvbnRlbnRTdmMuY3VycmVudEJhdGNoRW5yb2xsbWVudExpc3RcbiAgICBpZiAoIXRoaXMuZm9yUHJldmlldykge1xuICAgICAgaWYgKHRlbXBDb250ZW50RGF0YS5jb3Vyc2VDYXRlZ29yeSA9PT0gJ0xlYXJuaW5nIFBhdGh3YXknKSB7XG4gICAgICAgIC8vIEZpbmQgdGhlIGNvdXJzZSB0aGF0IGNvbnRhaW5zIHRoZSBnaXZlbiByZXNvdXJjZSBJRFxuICAgICAgICBjb25zdCBmb3VuZENvdXJzZSA9IHRoaXMuZmluZENvdXJzZUNvbnRhaW5pbmdSZXNvdXJjZSh0ZW1wQ29udGVudERhdGEsIHJlc291cmNlSWQpXG5cbiAgICAgICAgaWYgKGZvdW5kQ291cnNlKSB7XG4gICAgICAgICAgLy8gQWx3YXlzIHVwZGF0ZSBjb3Vyc2VJZCBpZiBjb3Vyc2UgaXMgZm91bmRcbiAgICAgICAgICB0ZW1wRGF0YS5jb3Vyc2VJZCA9IGZvdW5kQ291cnNlLmlkZW50aWZpZXJcblxuICAgICAgICAgIC8vIFRyeSB0byBmaW5kIGJhdGNoIElEIGZyb20gZW5yb2xsbWVudCBkYXRhIGZvciB0aGUgZm91bmQgY291cnNlXG4gICAgICAgICAgaWYgKGZvdW5kQ291cnNlLmlkZW50aWZpZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGVucm9sbG1lbnQgPSBlbnJvbGxtZW50TGlzdC5maW5kKFxuICAgICAgICAgICAgICAoY291cnNlOiBhbnkpID0+IGNvdXJzZS5jb2xsZWN0aW9uSWQgPT09IGZvdW5kQ291cnNlLmlkZW50aWZpZXJcbiAgICAgICAgICAgIClcblxuICAgICAgICAgICAgaWYgKGVucm9sbG1lbnQgJiYgZW5yb2xsbWVudC5iYXRjaElkKSB7XG4gICAgICAgICAgICAgIHRlbXBEYXRhLmJhdGNoSWQgPSBlbnJvbGxtZW50LmJhdGNoSWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodGVtcENvbnRlbnREYXRhICYmIHRlbXBDb250ZW50UmVhZERhdGEuY3VtdWxhdGl2ZVRyYWNraW5nICYmXG4gICAgICAgICh0ZW1wQ29udGVudERhdGEucHJpbWFyeUNhdGVnb3J5ID09PSBOc0NvbnRlbnQuRVByaW1hcnlDYXRlZ29yeS5QUk9HUkFNIHx8XG4gICAgICAgICAgdGVtcENvbnRlbnREYXRhLnByaW1hcnlDYXRlZ29yeSA9PT0gTnNDb250ZW50LkVQcmltYXJ5Q2F0ZWdvcnkuQ1VSQVRFRF9QUk9HUkFNXG4gICAgICAgICAgfHwgdGVtcENvbnRlbnREYXRhLnByaW1hcnlDYXRlZ29yeSA9PT0gTnNDb250ZW50LkVQcmltYXJ5Q2F0ZWdvcnkuQkxFTkRFRF9QUk9HUkFNXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICB0ZW1wQ29udGVudERhdGEuY2hpbGRyZW4uZm9yRWFjaChhc3luYyAoY2hpbGRMaXN0OiBOc0NvbnRlbnQuSUNvbnRlbnQpID0+IHtcbiAgICAgICAgICBpZiAoY2hpbGRMaXN0LnByaW1hcnlDYXRlZ29yeSA9PT0gTnNDb250ZW50LkVQcmltYXJ5Q2F0ZWdvcnkuQ09VUlNFKSB7XG4gICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG1heC1saW5lLWxlbmd0aFxuICAgICAgICAgICAgY29uc3QgY291cnNlRW5yb2xsbWVudExpc3QgPSBlbnJvbGxtZW50TGlzdCAmJiBlbnJvbGxtZW50TGlzdC5maWx0ZXIoKHY6IE5zQ29udGVudC5JQ291cnNlKSA9PiB2LmNvbnRlbnRJZCA9PT0gY2hpbGRMaXN0LmlkZW50aWZpZXIpXG4gICAgICAgICAgICBpZiAoY2hpbGRMaXN0LmNoaWxkTm9kZXMgJiYgY2hpbGRMaXN0LmNoaWxkTm9kZXMuaW5kZXhPZihyZXNvdXJjZUlkKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgaWYgKGNvdXJzZUVucm9sbG1lbnRMaXN0ICYmIGNvdXJzZUVucm9sbG1lbnRMaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0ZW1wRGF0YS5iYXRjaElkID0gY291cnNlRW5yb2xsbWVudExpc3RbY291cnNlRW5yb2xsbWVudExpc3QubGVuZ3RoIC0gMV0uYmF0Y2guYmF0Y2hJZFxuICAgICAgICAgICAgICAgIHRlbXBEYXRhLmNvdXJzZUlkID0gY2hpbGRMaXN0LmlkZW50aWZpZXJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhOiBhbnkgPSBhd2FpdCB0aGlzLmNoZWNrRm9yQ291cnNlRW5yb2xsbWVudChjaGlsZExpc3QsIHJlc291cmNlSWQsIGVucm9sbG1lbnRMaXN0LCB0ZW1wRGF0YSlcbiAgICAgICAgICAgICAgICB0ZW1wRGF0YS5jb3Vyc2VJZCA9IGRhdGEuY291cnNlSWRcbiAgICAgICAgICAgICAgICB0ZW1wRGF0YS5iYXRjaElkID0gZGF0YS5iYXRjaElkXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKHRlbXBDb250ZW50RGF0YS5wcmltYXJ5Q2F0ZWdvcnkgPT09IE5zQ29udGVudC5FUHJpbWFyeUNhdGVnb3J5LkJMRU5ERURfUFJPR1JBTSkge1xuICAgICAgICAgICAgaWYgKHRlbXBEYXRhLmNvdXJzZUlkID09PSBjb3Vyc2VJZCkge1xuICAgICAgICAgICAgICBjb25zdCBiUEVucm9sbG1lbnRMaXN0ID0gZW5yb2xsbWVudExpc3QuZmlsdGVyKCh2OiBOc0NvbnRlbnQuSUNvdXJzZSkgPT4gdi5jb250ZW50SWQgPT09IHRlbXBDb250ZW50RGF0YS5pZGVudGlmaWVyKVxuICAgICAgICAgICAgICBpZiAodGVtcENvbnRlbnREYXRhLmNoaWxkTm9kZXMgJiYgdGVtcENvbnRlbnREYXRhLmNoaWxkTm9kZXMuaW5kZXhPZihyZXNvdXJjZUlkKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICBpZiAoYlBFbnJvbGxtZW50TGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICB0ZW1wRGF0YS5iYXRjaElkID0gYlBFbnJvbGxtZW50TGlzdFtiUEVucm9sbG1lbnRMaXN0Lmxlbmd0aCAtIDFdLmJhdGNoLmJhdGNoSWRcbiAgICAgICAgICAgICAgICAgIHRlbXBEYXRhLmNvdXJzZUlkID0gdGVtcENvbnRlbnREYXRhLmlkZW50aWZpZXJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0ZW1wRGF0YVxuICB9XG5cbiAgLyoqXG4gICAqIFJlY3Vyc2l2ZWx5IHNlYXJjaGVzIGZvciBhIHJlc291cmNlIElEIGluIGEgY29udGVudCdzIGNoaWxkcmVuIGhpZXJhcmNoeVxuICAgKiBAcGFyYW0gY29udGVudCBUaGUgY29udGVudCBvYmplY3QgdG8gc2VhcmNoIGluXG4gICAqIEBwYXJhbSByZXNvdXJjZUlkIFRoZSByZXNvdXJjZSBJRCB0byBmaW5kXG4gICAqIEByZXR1cm5zIHRydWUgaWYgcmVzb3VyY2UgaXMgZm91bmQsIGZhbHNlIG90aGVyd2lzZVxuICAgKi9cbiAgcHJpdmF0ZSBmaW5kUmVzb3VyY2VJbkNvbnRlbnQoY29udGVudDogYW55LCByZXNvdXJjZUlkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAvLyBDaGVjayBpZiB0aGlzIGNvbnRlbnQgaGFzIHRoZSByZXNvdXJjZSBpbiBpdHMgbGVhZk5vZGVzXG4gICAgaWYgKGNvbnRlbnQubGVhZk5vZGVzICYmIEFycmF5LmlzQXJyYXkoY29udGVudC5sZWFmTm9kZXMpKSB7XG4gICAgICBpZiAoY29udGVudC5sZWFmTm9kZXMuaW5kZXhPZihyZXNvdXJjZUlkKSAhPT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiB0aGlzIGNvbnRlbnQncyBpZGVudGlmaWVyIG1hdGNoZXMgdGhlIHJlc291cmNlIElEXG4gICAgaWYgKGNvbnRlbnQuaWRlbnRpZmllciA9PT0gcmVzb3VyY2VJZCkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICAvLyBSZWN1cnNpdmVseSBzZWFyY2ggaW4gY2hpbGRyZW5cbiAgICBpZiAoY29udGVudC5jaGlsZHJlbiAmJiBBcnJheS5pc0FycmF5KGNvbnRlbnQuY2hpbGRyZW4pKSB7XG4gICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGNvbnRlbnQuY2hpbGRyZW4pIHtcbiAgICAgICAgaWYgKHRoaXMuZmluZFJlc291cmNlSW5Db250ZW50KGNoaWxkLCByZXNvdXJjZUlkKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kcyB0aGUgY291cnNlIHRoYXQgY29udGFpbnMgYSBnaXZlbiByZXNvdXJjZSBJRCBpbiBhIExlYXJuaW5nIFBhdGh3YXlcbiAgICogQHBhcmFtIGxlYXJuaW5nUGF0aHdheUNvbnRlbnQgVGhlIExlYXJuaW5nIFBhdGh3YXkgY29udGVudCBkYXRhXG4gICAqIEBwYXJhbSByZXNvdXJjZUlkIFRoZSByZXNvdXJjZSBJRCB0byBmaW5kXG4gICAqIEByZXR1cm5zIFRoZSBjb3Vyc2Ugb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHJlc291cmNlLCBvciBudWxsIGlmIG5vdCBmb3VuZFxuICAgKi9cbiAgZmluZENvdXJzZUNvbnRhaW5pbmdSZXNvdXJjZShsZWFybmluZ1BhdGh3YXlDb250ZW50OiBhbnksIHJlc291cmNlSWQ6IHN0cmluZyk6IGFueSB7XG4gICAgLy8gQ2hlY2sgaWYgbWlsZXN0b25lc192MSBleGlzdHNcbiAgICBpZiAoIWxlYXJuaW5nUGF0aHdheUNvbnRlbnQubWlsZXN0b25lc192MSB8fCAhQXJyYXkuaXNBcnJheShsZWFybmluZ1BhdGh3YXlDb250ZW50Lm1pbGVzdG9uZXNfdjEpKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIC8vIExvb3AgdGhyb3VnaCBlYWNoIG1pbGVzdG9uZVxuICAgIGZvciAoY29uc3QgbWlsZXN0b25lIG9mIGxlYXJuaW5nUGF0aHdheUNvbnRlbnQubWlsZXN0b25lc192MSkge1xuICAgICAgLy8gQ2hlY2sgaWYgbWlsZXN0b25lIGhhcyBjb3Vyc2VzXG4gICAgICBpZiAobWlsZXN0b25lLmNvdXJzZXMgJiYgQXJyYXkuaXNBcnJheShtaWxlc3RvbmUuY291cnNlcykpIHtcbiAgICAgICAgLy8gTG9vcCB0aHJvdWdoIGVhY2ggY291cnNlIGluIHRoZSBtaWxlc3RvbmVcbiAgICAgICAgZm9yIChjb25zdCBjb3Vyc2Ugb2YgbWlsZXN0b25lLmNvdXJzZXMpIHtcbiAgICAgICAgICAvLyBDaGVjayBpZiB0aGlzIGNvdXJzZSBjb250YWlucyB0aGUgcmVzb3VyY2VcbiAgICAgICAgICBpZiAodGhpcy5maW5kUmVzb3VyY2VJbkNvbnRlbnQoY291cnNlLCByZXNvdXJjZUlkKSkge1xuICAgICAgICAgICAgcmV0dXJuIGNvdXJzZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBnZXRSZXNvdXJjZUNvbnRlbnRMYW5ndWFnZShyZXNvdXJjZUlkOiBzdHJpbmcpIHtcblxuICAgIGxldCB0ZW1wTGFuZ3VhZ2U6IGFueSA9ICdlbmdsaXNoJ1xuICAgIGxldCBsYW5ndWFnZUZvdW5kID0gZmFsc2VcbiAgICBjb25zdCB0ZW1wQ29udGVudERhdGEgPSB0aGlzLmNvbnRlbnRTdmMuY3VycmVudE1ldGFEYXRhXG4gICAgaWYgKCF0aGlzLmZvclByZXZpZXcpIHtcbiAgICAgIHRlbXBDb250ZW50RGF0YS5jaGlsZHJlbj8uZm9yRWFjaChhc3luYyAoY2hpbGRMaXN0OiBOc0NvbnRlbnQuSUNvbnRlbnQpID0+IHtcbiAgICAgICAgaWYgKGNoaWxkTGlzdC5wcmltYXJ5Q2F0ZWdvcnkgPT09IE5zQ29udGVudC5FUHJpbWFyeUNhdGVnb3J5LkNPVVJTRSkge1xuICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbWF4LWxpbmUtbGVuZ3RoXG4gICAgICAgICAgaWYgKGNoaWxkTGlzdC5sZWFmTm9kZXMgJiYgY2hpbGRMaXN0LmxlYWZOb2Rlcy5pbmRleE9mKHJlc291cmNlSWQpICE9PSAtMSkge1xuICAgICAgICAgICAgdGVtcExhbmd1YWdlID0gdGhpcy5jb250ZW50TGFuZ1N2Yy5nZXRDb250ZW50TGFuZ3VhZ2UoY2hpbGRMaXN0KVxuICAgICAgICAgICAgbGFuZ3VhZ2VGb3VuZCA9IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIClcbiAgICAgIGlmICghbGFuZ3VhZ2VGb3VuZCkge1xuICAgICAgICBpZiAodGVtcENvbnRlbnREYXRhLmxlYWZOb2RlcyAmJiB0ZW1wQ29udGVudERhdGEubGVhZk5vZGVzLmluZGV4T2YocmVzb3VyY2VJZCkgIT09IC0xKSB7XG4gICAgICAgICAgdGVtcExhbmd1YWdlID0gdGhpcy5jb250ZW50TGFuZ1N2Yy5nZXRDb250ZW50TGFuZ3VhZ2UodGVtcENvbnRlbnREYXRhKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0ZW1wTGFuZ3VhZ2VcbiAgfVxuXG4gIGFzeW5jIGNoZWNrRm9yQ291cnNlRW5yb2xsbWVudChjaGlsZExpc3Q6IE5zQ29udGVudC5JQ29udGVudCwgX3Jlc291cmNlSWQ6IHN0cmluZywgX2Vucm9sbG1lbnRMaXN0OiBhbnksIF90ZW1wRGF0YTogYW55KSB7XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBtYXgtbGluZS1sZW5ndGhcbiAgICBjb25zdCBjb3Vyc2VEYXRhOiBhbnkgPSBhd2FpdCB0aGlzLmNvbnRlbnRTdmMuYXV0b0Fzc2lnbkJhdGNoQXBpKGNoaWxkTGlzdC5pZGVudGlmaWVyKS50b1Byb21pc2UoKS50aGVuKGFzeW5jIChkYXRhOiBOc0NvbnRlbnQuSUJhdGNoTGlzdFJlc3BvbnNlKSA9PiB7XG4gICAgICBpZiAoZGF0YSkge1xuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG1heC1saW5lLWxlbmd0aFxuICAgICAgICBjb25zdCByZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLnVzZXJTdmMuZmV0Y2hFbnJvbGxtZW50RGF0YUJ5Q29udGVudElkKHRoaXMuY29uZmlnc2VydmljZS51c2VyUHJvZmlsZT8udXNlcklkLCBjaGlsZExpc3QuaWRlbnRpZmllcikudG9Qcm9taXNlKCkudGhlbihhc3luYyAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAocmVzICYmIHJlcy5jb3Vyc2VzICYmIHJlcy5jb3Vyc2VzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlcy5jb3Vyc2VzXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBbeyBjb3Vyc2VJZDogY2hpbGRMaXN0LmlkZW50aWZpZXIsIGJhdGNoSWQ6ICcnIH1dXG5cbiAgICAgICAgfSkuY2F0Y2goKF9lcnI6IGFueSkgPT4ge1xuICAgICAgICAgIHJldHVybiBbeyBjb3Vyc2VJZDogY2hpbGRMaXN0LmlkZW50aWZpZXIsIGJhdGNoSWQ6ICcnIH1dXG4gICAgICAgIH0pXG4gICAgICAgIHRoaXMuY29udGVudFN2Yy5jdXJyZW50QmF0Y2hFbnJvbGxtZW50TGlzdCA9IFsuLi50aGlzLmNvbnRlbnRTdmMuY3VycmVudEJhdGNoRW5yb2xsbWVudExpc3QsIC4uLnJlc3BvbnNlRGF0YV1cbiAgICAgICAgcmV0dXJuIHsgY291cnNlSWQ6IGNoaWxkTGlzdC5pZGVudGlmaWVyLCBiYXRjaElkOiByZXNwb25zZURhdGFbMF0uYmF0Y2hJZCB9XG4gICAgICB9XG4gICAgfSkuY2F0Y2goKF9lcnI6IGFueSkgPT4ge1xuICAgICAgcmV0dXJuIFt7IGNvdXJzZUlkOiBjaGlsZExpc3QuaWRlbnRpZmllciwgYmF0Y2hJZDogJycgfV1cbiAgICB9KVxuICAgIHJldHVybiBjb3Vyc2VEYXRhXG4gIH1cblxuICByZWFsVGltZVByb2dyZXNzVXBkYXRlUXVpeihjb250ZW50SWQ6IHN0cmluZywgY29sbGVjdGlvbklkPzogc3RyaW5nLCBiYXRjaElkPzogc3RyaW5nLCBzdGF0dXM/OiBudW1iZXIpIHtcbiAgICBsZXQgcmVxOiBhbnlcbiAgICBpZiAodGhpcy5jb25maWdzZXJ2aWNlLnVzZXJQcm9maWxlKSB7XG4gICAgICBjb25zdCBsYW5ndWFnZSA9IHRoaXMuZ2V0UmVzb3VyY2VDb250ZW50TGFuZ3VhZ2UoY29udGVudElkKVxuICAgICAgcmVxID0ge1xuICAgICAgICByZXF1ZXN0OiB7XG4gICAgICAgICAgdXNlcklkOiB0aGlzLmNvbmZpZ3NlcnZpY2UudXNlclByb2ZpbGUudXNlcklkIHx8ICcnLFxuICAgICAgICAgIGNvbnRlbnRzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNvbnRlbnRJZCxcbiAgICAgICAgICAgICAgYmF0Y2hJZCxcbiAgICAgICAgICAgICAgbGFuZ3VhZ2UsXG4gICAgICAgICAgICAgIHN0YXR1czogc3RhdHVzIHx8IDIsXG4gICAgICAgICAgICAgIGNvdXJzZUlkOiBjb2xsZWN0aW9uSWQsXG4gICAgICAgICAgICAgIGxhc3RBY2Nlc3NUaW1lOiBkYXlqcyhuZXcgRGF0ZSgpKS5mb3JtYXQoJ1lZWVktTU0tREQgSEg6bW06c3M6U1NTWlonKSxcbiAgICAgICAgICAgICAgY29tcGxldGlvblBlcmNlbnRhZ2U6IHN0YXR1cyA9PT0gMiA/IDEwMCA6IDAsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICB9XG5cbiAgICAgIHRoaXMuaHR0cFxuICAgICAgICAucGF0Y2goYCR7dGhpcy5BUElfRU5EUE9JTlRTLlBST0dSRVNTX1VQREFURX0vJHtjb250ZW50SWR9YCwgcmVxKVxuICAgICAgICAuc3Vic2NyaWJlKG5vb3AsIG5vb3ApXG4gICAgICBpZiAodGhpcy50b2NTdmMuaGFzaG1hcCAmJiB0aGlzLnRvY1N2Yy5oYXNobWFwW2NvbnRlbnRJZF0gJiYgcmVxLnJlcXVlc3QuY29udGVudHNbMF0pIHtcbiAgICAgICAgaWYgKHRoaXMudG9jU3ZjLmhhc2htYXBbY29udGVudElkXSAmJlxuICAgICAgICAgICghdGhpcy50b2NTdmMuaGFzaG1hcFtjb250ZW50SWRdWydjb21wbGV0aW9uU3RhdHVzJ10gfHwgdGhpcy50b2NTdmMuaGFzaG1hcFtjb250ZW50SWRdWydjb21wbGV0aW9uU3RhdHVzJ10gPCAyKSkge1xuICAgICAgICAgIHRoaXMudG9jU3ZjLmhhc2htYXBbY29udGVudElkXVsnY29tcGxldGlvblBlcmNlbnRhZ2UnXSA9IHJlcS5yZXF1ZXN0LmNvbnRlbnRzWzBdLmNvbXBsZXRpb25QZXJjZW50YWdlXG4gICAgICAgICAgdGhpcy50b2NTdmMuaGFzaG1hcFtjb250ZW50SWRdWydjb21wbGV0aW9uU3RhdHVzJ10gPSByZXEucmVxdWVzdC5jb250ZW50c1swXS5zdGF0dXNcbiAgICAgICAgICB0aGlzLnRvY1N2Yy5oYXNobWFwID0geyAuLi50aGlzLnRvY1N2Yy5oYXNobWFwIH1cbiAgICAgICAgICBcbiAgICAgICAgICAvLyBOb3RpZnkgVUkgY29tcG9uZW50cyBhYm91dCBoYXNobWFwIGNoYW5nZXNcbiAgICAgICAgICB0aGlzLnRvY1N2Yy5oYXNobWFwVXBkYXRlZC5uZXh0KHRoaXMudG9jU3ZjLmhhc2htYXApXG4gICAgICAgICAgXG4gICAgICAgICAgLy8gVHJpZ2dlciBtaWxlc3RvbmUgbG9jayByZWNvbXB1dGF0aW9uIGZvciBMZWFybmluZyBQYXRod2F5c1xuICAgICAgICAgIGlmICh0aGlzLnRvY1N2Yy50cmlnZ2VyTWlsZXN0b25lTG9ja1VwZGF0ZSkge1xuICAgICAgICAgICAgdGhpcy50b2NTdmMudHJpZ2dlck1pbGVzdG9uZUxvY2tVcGRhdGUoKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXEgPSB7fVxuICAgICAgLy8gZG8gbm90aGluZ1xuICAgIH1cbiAgfVxuXG4gIGdldENvbnRlbnQoY29udGVudElkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPE5zQ29udGVudC5JQ29udGVudD4ge1xuICAgIGNvbnN0IGZvclByZXZpZXcgPSB3aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcygnL3B1YmxpYy8nKSB8fCB3aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcygnJnByZXZpZXc9dHJ1ZScpXG4gICAgbGV0IHVybCA9IGAvYXBpcy9wcm94aWVzL3Y4L2FjdGlvbi9jb250ZW50L3YzL3JlYWQvJHtjb250ZW50SWR9YFxuICAgIGlmICghZm9yUHJldmlldykge1xuICAgICAgdXJsID0gYC9hcGlzL3Byb3hpZXMvdjgvYWN0aW9uL2NvbnRlbnQvdjMvcmVhZC8ke2NvbnRlbnRJZH1gXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh3aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcygnZWRpdE1vZGU9dHJ1ZScpICYmIHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluY2x1ZGVzKCdfcmMnKSkge1xuICAgICAgICB1cmwgPSBgL2FwaXMvcHJveGllcy92OC9hY3Rpb24vY29udGVudC92My9yZWFkLyR7Y29udGVudElkfWBcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHVybCA9IGAvYXBpL2NvbnRlbnQvdjEvcmVhZC8ke2NvbnRlbnRJZH1gXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE5zQ29udGVudC5JQ29udGVudD4oXG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXG4gICAgICAvLyBgL2FwaXMvYXV0aEFwaS9hY3Rpb24vY29udGVudC9oaWVyYXJjaHkvJHtjb250ZW50SWR9P3Jvb3RPcmc9JHt0aGlzLmNvbmZpZ3NlcnZpY2Uucm9vdE9yZyB8fCAnaWdvdCd9Jm9yZz0ke3RoaXMuY29uZmlnc2VydmljZS5hY3RpdmVPcmcgfHwgJ2RvcHQnfWAsXG4gICAgICB1cmxcbiAgICApXG4gIH1cblxuICBnZXRBdXRob3JpbmdVcmwodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB1cmxcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcbiAgICAgID8gYC9hcGlzL2F1dGhDb250ZW50LyR7dXJsLmluY2x1ZGVzKCcvY29udGVudC1zdG9yZS8nKSA/IG5ldyBVUkwodXJsKS5wYXRobmFtZS5zbGljZSgxKSA6IGVuY29kZVVSSUNvbXBvbmVudCh1cmwpfWBcbiAgICAgIDogJydcbiAgfVxuXG4gIHJlZ2V4RG93bmxvYWRSZXBsYWNlID0gKF9zdHIgPSAnJywgZ3JvdXAxOiBzdHJpbmcsIGdyb3VwMjogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgICByZXR1cm4gYCR7dGhpcy5hdXRob3JpbmdCYXNlfSR7ZW5jb2RlVVJJQ29tcG9uZW50KGdyb3VwMSl9JHtncm91cDJ9YFxuICB9XG5cbiAgcmVwbGFjZVRvQXV0aFVybChkYXRhOiBhbnkpOiBhbnkge1xuICAgIHJldHVybiBKU09OLnBhcnNlKFxuICAgICAgSlNPTi5zdHJpbmdpZnkoZGF0YSkucmVwbGFjZShcbiAgICAgICAgdGhpcy5kb3dubG9hZFJlZ2V4LFxuICAgICAgICB0aGlzLnJlZ2V4RG93bmxvYWRSZXBsYWNlLFxuICAgICAgKSxcbiAgICApXG4gIH1cbiAgcmVhZFNlY3Rpb25zKGFzc2Vzc21lbnRJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGAke3RoaXMuQVBJX0VORFBPSU5UU30vJHthc3Nlc3NtZW50SWR9YFxuICB9XG5cbiAgZ2V0UHVibGljVXJsKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBtYWluVXJsID0gdXJsLnNwbGl0KCcvY29udGVudCcpLnBvcCgpIHx8ICcnXG4gICAgcmV0dXJuIGAke3RoaXMuZW52aXJvbm1lbnQuY29udGVudEhvc3R9LyR7dGhpcy5lbnZpcm9ubWVudC5jb250ZW50QnVja2V0fS9jb250ZW50JHttYWluVXJsfWBcbiAgfVxuXG4gIGdldENkblVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgbWFpblVybCA9IHVybC5zcGxpdCgnL2NvbnRlbnQnKS5wb3AoKSB8fCAnJ1xuICAgIHJldHVybiBgJHt0aGlzLmRvbWFpbkNvbmZTdmMuZ2V0RG9tYWluQ0ROSG9zdCgpfS8ke3RoaXMuZW52aXJvbm1lbnQuY2RuQ29udGVudEJ1Y2tldH0vY29udGVudCR7bWFpblVybH1gXG4gIH1cblxuICAvLyAgZmV0Y2hDb250ZW50KFxuICAvLyAgIGNvbnRlbnRJZDogc3RyaW5nLFxuICAvLyAgIGhpZXJhcmNoeVR5cGU6ICdhbGwnIHwgJ21pbmltYWwnIHwgJ2RldGFpbCcgPSAnZGV0YWlsJ1xuICAvLyAgICk6IE9ic2VydmFibGU8TnNDb250ZW50LklDb250ZW50PiB7XG4gIC8vICAgICBsZXQgdXJsID0gJydcbiAgLy8gICAgIGNvbnN0IGZvclByZXZpZXcgPSB3aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcygnL3B1YmxpYy8nKSB8fCB3aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcygnJnByZXZpZXc9dHJ1ZScpXG4gIC8vICAgICAgIGlmICghZm9yUHJldmlldykge1xuICAvLyAgICAgICAgIHVybCA9IGAvYXBpcy9wcm94aWVzL3Y4L2FjdGlvbi9jb250ZW50L3YzL2hpZXJhcmNoeS8ke2NvbnRlbnRJZH0/aGllcmFyY2h5VHlwZT0ke2hpZXJhcmNoeVR5cGV9YFxuICAvLyAgICAgICB9IGVsc2Uge1xuICAvLyAgICAgICAgIHVybCA9IGAvYXBpL2NvdXJzZS92MS9oaWVyYXJjaHkvJHtjb250ZW50SWR9P2hpZXJhcmNoeVR5cGU9JHtoaWVyYXJjaHlUeXBlfWBcbiAgLy8gICAgICAgfVxuICAvLyAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxOc0NvbnRlbnQuSUNvbnRlbnQ+KHVybClcbiAgLy8gICB9XG5cbiAgZmV0Y2hDb250ZW50KGlkOiBzdHJpbmcsIHR5cGU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE5zQ29udGVudC5JQ29udGVudD4oYC9hcGlzL3Byb3hpZXMvdjgvYWN0aW9uL2NvbnRlbnQvdjMvaGllcmFyY2h5LyR7aWR9P21vZGU9JHt0eXBlfWApXG4gIH1cblxuICB1cGRhdGVDb250ZW50SGFzaE1hcEZvckFzc2Vzc3RlbnQoY29udGVudElkOiBzdHJpbmcsIGNvbnRlbnRQcm9ncmVzczogYW55KSB7XG4gICAgaWYgKHRoaXMudG9jU3ZjLmhhc2htYXBbY29udGVudElkXSAmJlxuICAgICAgKCF0aGlzLnRvY1N2Yy5oYXNobWFwW2NvbnRlbnRJZF1bJ2NvbXBsZXRpb25TdGF0dXMnXSB8fCB0aGlzLnRvY1N2Yy5oYXNobWFwW2NvbnRlbnRJZF1bJ2NvbXBsZXRpb25TdGF0dXMnXSA8IDIpKSB7XG4gICAgICB0aGlzLnRvY1N2Yy5oYXNobWFwW2NvbnRlbnRJZF1bJ2NvbXBsZXRpb25QZXJjZW50YWdlJ10gPSBjb250ZW50UHJvZ3Jlc3MuY29tcGxldGlvblBlcmNlbnRhZ2VcbiAgICAgIHRoaXMudG9jU3ZjLmhhc2htYXBbY29udGVudElkXVsnY29tcGxldGlvblN0YXR1cyddID0gY29udGVudFByb2dyZXNzLnN0YXR1c1xuICAgICAgdGhpcy50b2NTdmMuaGFzaG1hcCA9IHsgLi4udGhpcy50b2NTdmMuaGFzaG1hcCB9XG4gICAgfVxuICB9XG5cbiAgZ2V0Rm9ybUJ5SWQoZm9ybUlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLkFQSV9FTkRQT0lOVFMuR0VUX0ZPUk1fQllJRChmb3JtSWQpKVxuICB9XG5cbiAgc3VibWl0Rm9ybShmb3JtRGF0YTogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4odGhpcy5BUElfRU5EUE9JTlRTLlNVQk1JVF9GT1JNLCBmb3JtRGF0YSlcbiAgfVxuXG4gIHJlYWxUaW1lUHJvZ3Jlc3NVcGRhdGVGb3JQcmVBc3Nlc3NtZW50KGNvbnRlbnRJZDogc3RyaW5nLCByZXF1ZXN0OiBhbnkpIHtcbiAgICBsZXQgcmVxOiBhbnlcbiAgICBpZiAodGhpcy5jb25maWdzZXJ2aWNlLnVzZXJQcm9maWxlKSB7XG4gICAgICByZXEgPSB7XG4gICAgICAgIHJlcXVlc3Q6IHtcbiAgICAgICAgICB1c2VySWQ6IHRoaXMuY29uZmlnc2VydmljZS51c2VyUHJvZmlsZS51c2VySWQgfHwgJycsXG4gICAgICAgICAgY29udGVudHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgY29udGVudElkLFxuICAgICAgICAgICAgICAvLyBiYXRjaElkLFxuICAgICAgICAgICAgICBzdGF0dXM6IHRoaXMuZ2V0U3RhdHVzKHJlcXVlc3QuY3VycmVudCwgcmVxdWVzdC5tYXhfc2l6ZSwgcmVxdWVzdC5taW1lX3R5cGUpLFxuICAgICAgICAgICAgICAvLyBjb3Vyc2VJZDogY29sbGVjdGlvbklkLFxuICAgICAgICAgICAgICBsYXN0QWNjZXNzVGltZTogZGF5anMobmV3IERhdGUoKSkuZm9ybWF0KCdZWVlZLU1NLUREIEhIOm1tOnNzOlNTU1paJyksXG4gICAgICAgICAgICAgIHByb2dyZXNzZGV0YWlsczoge1xuICAgICAgICAgICAgICAgIG1heF9zaXplOiByZXF1ZXN0Lm1heF9zaXplLFxuICAgICAgICAgICAgICAgIGN1cnJlbnQ6IHJlcXVlc3QuY3VycmVudCxcbiAgICAgICAgICAgICAgICBtaW1lVHlwZTogcmVxdWVzdC5taW1lX3R5cGUsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGNvbXBsZXRpb25QZXJjZW50YWdlOiB0aGlzLmNhbGN1bGF0ZVBlcmNlbnQocmVxdWVzdC5jdXJyZW50LCByZXF1ZXN0Lm1heF9zaXplLCByZXF1ZXN0Lm1pbWVfdHlwZSksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICB9XG4gICAgICAvLyBpZiAodGhpcy5jb25maWdzZXJ2aWNlLmNzdG9rZW4gIT09ICcnKSB7XG4gICAgICAvLyAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKVxuICAgICAgLy8gICAuc2V0KCdjc3Rva2VuJywgdGhpcy5jb25maWdzZXJ2aWNlLmNzdG9rZW4pXG5cbiAgICAgIC8vICAgdGhpcy5odHRwXG4gICAgICAvLyAgIC5wYXRjaChgJHt0aGlzLkFQSV9FTkRQT0lOVFMuUFJPR1JFU1NfVVBEQVRFfS8ke2NvbnRlbnRJZH1gLCB7IGhlYWRlcnMgfSAsIHJlcSlcbiAgICAgIC8vICAgLnN1YnNjcmliZShub29wLCBub29wKVxuICAgICAgLy8gfSBlbHNlIHtcbiAgICAgIC8vICAgdGhpcy5odHRwXG4gICAgICAvLyAgIC5wYXRjaChgJHt0aGlzLkFQSV9FTkRQT0lOVFMuUFJPR1JFU1NfVVBEQVRFfS8ke2NvbnRlbnRJZH1gLCByZXEpXG4gICAgICAvLyAgIC5zdWJzY3JpYmUobm9vcCwgbm9vcClcbiAgICAgIC8vIH1cbiAgICAgIC8vIHRoaXMuaHR0cFxuICAgICAgLy8gICAucGF0Y2goYCR7dGhpcy5BUElfRU5EUE9JTlRTLlBST0dSRVNTX1VQREFURX0vJHtjb250ZW50SWR9YCwgcmVxKVxuICAgICAgLy8gICAuc3Vic2NyaWJlKG5vb3AsIG5vb3ApXG4gICAgICAvL2NvbnN0IGNvbnRlbnRJZE5ldz0gcmVxLnJlcXVlc3QuY29udGVudHNbMF0uY29udGVudElkXG4gICAgICAvLyBjb25zdCB1cGRhdGVkQ29tcGxldGlvblBlcmNlbnRhZ2UgPSByZXEucmVxdWVzdC5jb250ZW50c1swXS5jb21wbGV0aW9uUGVyY2VudGFnZVxuICAgICAgLy8gY29uc3QgdXBkYXRlZFN0YXR1cyA9IHJlcS5yZXF1ZXN0LmNvbnRlbnRzWzBdLnN0YXR1c1xuXG4gICAgICAvLyAvLyBDbG9uZSB0aGUgaW5uZXIgb2JqZWN0IGFuZCB1cGRhdGVcbiAgICAgIC8vIGNvbnN0IGV4aXN0aW5nQ29udGVudCA9IHRoaXMudG9jU3ZjLmhhc2htYXBbY29udGVudElkTmV3XSB8fCB7fVxuXG4gICAgICAvLyB0aGlzLnRvY1N2Yy5oYXNobWFwID0ge1xuICAgICAgLy8gICAuLi50aGlzLnRvY1N2Yy5oYXNobWFwLFxuICAgICAgLy8gICBbY29udGVudElkTmV3XToge1xuICAgICAgLy8gICAgIC4uLmV4aXN0aW5nQ29udGVudCxcbiAgICAgIC8vICAgICBjb21wbGV0aW9uUGVyY2VudGFnZTogdXBkYXRlZENvbXBsZXRpb25QZXJjZW50YWdlLFxuICAgICAgLy8gICAgIGNvbXBsZXRpb25TdGF0dXM6IHVwZGF0ZWRTdGF0dXNcbiAgICAgIC8vICAgfVxuICAgICAgLy8gfVxuICAgICAgLy8gY29uc29sZS5sb2coJ3JlcScsIEpTT04uc3RyaW5naWZ5KHJlcSkpXG4gICAgICAvLyBjb25zb2xlLmxvZygncmVxJywgcmVxKVxuXG4gICAgICBjb25zdCByZXNvdXJjZVN0YXR1cyA9IHRoaXMuZ2V0UHJlQXNzZXNzbWVudFJlc291cmNlU3RhdHVzKGNvbnRlbnRJZClcbiAgICAgIGlmIChyZXNvdXJjZVN0YXR1cyA8IDIpIHtcbiAgICAgICAgdGhpcy5odHRwXG4gICAgICAgICAgLnBhdGNoKGAke3RoaXMuQVBJX0VORFBPSU5UUy5QUkVfQVNTRVNTTUVOVF9TVEFURV9VUERBVEV9YCwgcmVxKVxuICAgICAgICAgIC5zdWJzY3JpYmUobm9vcCwgbm9vcClcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnRvY1N2Yy5oYXNobWFwW2NvbnRlbnRJZF0gJiZcbiAgICAgICAgKCF0aGlzLnRvY1N2Yy5oYXNobWFwW2NvbnRlbnRJZF1bJ2NvbXBsZXRpb25TdGF0dXMnXSB8fCB0aGlzLnRvY1N2Yy5oYXNobWFwW2NvbnRlbnRJZF1bJ2NvbXBsZXRpb25TdGF0dXMnXSA8IDIpKSB7XG4gICAgICAgIHRoaXMudG9jU3ZjLmhhc2htYXBbY29udGVudElkXVsnY29tcGxldGlvblBlcmNlbnRhZ2UnXSA9IHJlcS5yZXF1ZXN0LmNvbnRlbnRzWzBdLmNvbXBsZXRpb25QZXJjZW50YWdlXG4gICAgICAgIHRoaXMudG9jU3ZjLmhhc2htYXBbY29udGVudElkXVsnY29tcGxldGlvblN0YXR1cyddID0gcmVxLnJlcXVlc3QuY29udGVudHNbMF0uc3RhdHVzXG4gICAgICAgIHRoaXMudG9jU3ZjLmhhc2htYXBbY29udGVudElkXVsncGFyZW50J10gPSByZXEucmVxdWVzdC5jb250ZW50c1swXS5jb3Vyc2VJZFxuICAgICAgICB0aGlzLnRvY1N2Yy5oYXNobWFwW2NvbnRlbnRJZF1bJ3Byb2dyZXNzJ10gPSByZXEucmVxdWVzdC5jb250ZW50c1swXS5wcm9ncmVzc2RldGFpbHNcbiAgICAgICAgdGhpcy50b2NTdmMuaGFzaG1hcCA9IHsgLi4udGhpcy50b2NTdmMuaGFzaG1hcCB9XG4gICAgICAgIFxuICAgICAgICAvLyBOb3RpZnkgVUkgY29tcG9uZW50cyBhYm91dCBoYXNobWFwIGNoYW5nZXNcbiAgICAgICAgdGhpcy50b2NTdmMuaGFzaG1hcFVwZGF0ZWQubmV4dCh0aGlzLnRvY1N2Yy5oYXNobWFwKVxuICAgICAgICBcbiAgICAgICAgLy8gVHJpZ2dlciBtaWxlc3RvbmUgbG9jayByZWNvbXB1dGF0aW9uIGZvciBMZWFybmluZyBQYXRod2F5c1xuICAgICAgICBpZiAodGhpcy50b2NTdmMudHJpZ2dlck1pbGVzdG9uZUxvY2tVcGRhdGUpIHtcbiAgICAgICAgICB0aGlzLnRvY1N2Yy50cmlnZ2VyTWlsZXN0b25lTG9ja1VwZGF0ZSgpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gY29uc29sZS5sb2coJ1VwZGF0ZWQgaGFzaG1hcDonLCB0aGlzLnRvY1N2Yy5oYXNobWFwKVxuXG4gICAgICAvLyBjb25zb2xlLmxvZygndGhpcy50b2NTdmMuaGFzaG1hcC0tLScsIHRoaXMudG9jU3ZjLmhhc2htYXApXG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcSA9IHt9XG4gICAgICAvLyBkbyBub3RoaW5nXG4gICAgfVxuICB9XG5cbiAgcmVhbFRpbWVQcm9ncmVzc1VwZGF0ZUZvclByZUFzc2Vzc21lbnRRdWl6KGNvbnRlbnRJZDogc3RyaW5nLCBzdGF0dXM/OiBudW1iZXIsIG1pbWVUeXBlPzogc3RyaW5nKSB7XG4gICAgbGV0IHJlcTogYW55XG4gICAgaWYgKHRoaXMuY29uZmlnc2VydmljZS51c2VyUHJvZmlsZSkge1xuICAgICAgcmVxID0ge1xuICAgICAgICByZXF1ZXN0OiB7XG4gICAgICAgICAgLy91c2VySWQ6IHRoaXMuY29uZmlnc2VydmljZS51c2VyUHJvZmlsZS51c2VySWQgfHwgJycsXG4gICAgICAgICAgY29udGVudHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgY29udGVudElkLFxuICAgICAgICAgICAgICAvLyBiYXRjaElkLFxuICAgICAgICAgICAgICBzdGF0dXM6IHN0YXR1cyB8fCAyLFxuICAgICAgICAgICAgICAvLyBjb3Vyc2VJZDogY29sbGVjdGlvbklkLFxuICAgICAgICAgICAgICBsYXN0QWNjZXNzVGltZTogZGF5anMobmV3IERhdGUoKSkuZm9ybWF0KCdZWVlZLU1NLUREIEhIOm1tOnNzOlNTU1paJyksXG4gICAgICAgICAgICAgIGNvbXBsZXRpb25QZXJjZW50YWdlOiBzdGF0dXMgPT09IDIgPyAxMDAuMCA6IDAsXG4gICAgICAgICAgICAgIHByb2dyZXNzZGV0YWlsczoge1xuICAgICAgICAgICAgICAgIFwibWltZVR5cGVcIjogbWltZVR5cGUgfHwgXCJhcHBsaWNhdGlvbi92bmQuc3VuYmlyZC5xdWVzdGlvbnNldFwiXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICB9XG4gICAgICBjb25zdCByZXNvdXJjZVN0YXR1cyA9IHRoaXMuZ2V0UHJlQXNzZXNzbWVudFJlc291cmNlU3RhdHVzKGNvbnRlbnRJZClcbiAgICAgIGlmIChyZXNvdXJjZVN0YXR1cyA8IDIpIHtcbiAgICAgICAgdGhpcy5odHRwXG4gICAgICAgICAgLnBhdGNoKGAke3RoaXMuQVBJX0VORFBPSU5UUy5QUkVfQVNTRVNTTUVOVF9TVEFURV9VUERBVEV9YCwgcmVxKVxuICAgICAgICAgIC5zdWJzY3JpYmUobm9vcCwgbm9vcClcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnRvY1N2Yy5oYXNobWFwICYmIHRoaXMudG9jU3ZjLmhhc2htYXBbY29udGVudElkXSAmJiByZXEucmVxdWVzdC5jb250ZW50c1swXSkge1xuICAgICAgICBpZiAodGhpcy50b2NTdmMuaGFzaG1hcFtjb250ZW50SWRdICYmXG4gICAgICAgICAgKCF0aGlzLnRvY1N2Yy5oYXNobWFwW2NvbnRlbnRJZF1bJ2NvbXBsZXRpb25TdGF0dXMnXSB8fCB0aGlzLnRvY1N2Yy5oYXNobWFwW2NvbnRlbnRJZF1bJ2NvbXBsZXRpb25TdGF0dXMnXSA8IDIpKSB7XG4gICAgICAgICAgdGhpcy50b2NTdmMuaGFzaG1hcFtjb250ZW50SWRdWydjb21wbGV0aW9uUGVyY2VudGFnZSddID0gcmVxLnJlcXVlc3QuY29udGVudHNbMF0uY29tcGxldGlvblBlcmNlbnRhZ2VcbiAgICAgICAgICB0aGlzLnRvY1N2Yy5oYXNobWFwW2NvbnRlbnRJZF1bJ2NvbXBsZXRpb25TdGF0dXMnXSA9IHJlcS5yZXF1ZXN0LmNvbnRlbnRzWzBdLnN0YXR1c1xuICAgICAgICAgIHRoaXMudG9jU3ZjLmhhc2htYXAgPSB7IC4uLnRoaXMudG9jU3ZjLmhhc2htYXAgfVxuICAgICAgICAgIFxuICAgICAgICAgIC8vIE5vdGlmeSBVSSBjb21wb25lbnRzIGFib3V0IGhhc2htYXAgY2hhbmdlc1xuICAgICAgICAgIHRoaXMudG9jU3ZjLmhhc2htYXBVcGRhdGVkLm5leHQodGhpcy50b2NTdmMuaGFzaG1hcClcbiAgICAgICAgICBcbiAgICAgICAgICAvLyBUcmlnZ2VyIG1pbGVzdG9uZSBsb2NrIHJlY29tcHV0YXRpb24gZm9yIExlYXJuaW5nIFBhdGh3YXlzXG4gICAgICAgICAgaWYgKHRoaXMudG9jU3ZjLnRyaWdnZXJNaWxlc3RvbmVMb2NrVXBkYXRlKSB7XG4gICAgICAgICAgICB0aGlzLnRvY1N2Yy50cmlnZ2VyTWlsZXN0b25lTG9ja1VwZGF0ZSgpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcSA9IHt9XG4gICAgICAvLyBkbyBub3RoaW5nXG4gICAgfVxuICB9XG5cbiAgZ2V0UHJlQXNzZXNzbWVudFJlc291cmNlU3RhdHVzKHJlc291cmNlSWQ6IHN0cmluZykge1xuICAgIGlmICh0aGlzLnRvY1N2YyAmJiB0aGlzLnRvY1N2Yy5oYXNobWFwICYmIHRoaXMudG9jU3ZjLmhhc2htYXBbcmVzb3VyY2VJZF0pIHtcbiAgICAgIHJldHVybiB0aGlzLnRvY1N2Yy5oYXNobWFwW3Jlc291cmNlSWRdWydjb21wbGV0aW9uU3RhdHVzJ10gfHwgMVxuICAgIH1cbiAgICByZXR1cm4gMVxuICB9XG5cblxufVxuIl19
599
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld2VyLXV0aWwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcnkvc3VuYmlyZC1jYi90b2Mvc3JjL2xpYi9zZXJ2aWNlcy92aWV3ZXItdXRpbC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQTtBQUM3RCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUVsRCxPQUFPLEVBQUUsSUFBSSxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUNoRCxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUE7Ozs7Ozs7QUFRekIsTUFBTSxPQUFPLGlCQUFpQjtJQW9CNUIsWUFDVSxJQUFnQixFQUNoQixhQUFvQyxFQUNwQyxVQUFnQyxFQUNoQyxNQUFxQixFQUNyQixPQUE2QixFQUM3QixjQUFzQyxFQUN0QyxhQUFnQyxFQUNULFdBQWdCO1FBUHZDLFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIsa0JBQWEsR0FBYixhQUFhLENBQXVCO1FBQ3BDLGVBQVUsR0FBVixVQUFVLENBQXNCO1FBQ2hDLFdBQU0sR0FBTixNQUFNLENBQWU7UUFDckIsWUFBTyxHQUFQLE9BQU8sQ0FBc0I7UUFDN0IsbUJBQWMsR0FBZCxjQUFjLENBQXdCO1FBQ3RDLGtCQUFhLEdBQWIsYUFBYSxDQUFtQjtRQUNULGdCQUFXLEdBQVgsV0FBVyxDQUFLO1FBM0JqRCxrQkFBYSxHQUFHO1lBQ2QsV0FBVyxFQUFFLHNDQUFzQztZQUNuRCxzRUFBc0U7WUFDdEUsZUFBZSxFQUFFLGtDQUFrQztZQUNuRCxrQkFBa0IsRUFBRSxxQ0FBcUM7WUFDekQsYUFBYSxFQUFFLENBQUMsTUFBYyxFQUFFLEVBQUUsQ0FBQywrQ0FBK0MsTUFBTSxFQUFFO1lBQzFGLFdBQVcsRUFBRSwwQ0FBMEM7WUFDdkQsdUZBQXVGO1lBQ3ZG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NUUsK0VBQStFO2dCQUMvRSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsMEJBQTBCLEVBQUU7b0JBQzFDLElBQUksQ0FBQyxNQUFNLENBQUMsMEJBQTBCLEVBQUUsQ0FBQTtpQkFDekM7Z0JBRUQsNEZBQTRGO2dCQUM1RiwwRUFBMEU7Z0JBQzFFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7YUFDdEM7U0FDRjthQUFNO1lBQ0wsR0FBRyxHQUFHLEVBQUUsQ0FBQTtZQUNSLGFBQWE7U0FDZDtJQUNILENBQUM7SUFFRCw4QkFBOEIsQ0FBQyxVQUFrQjtRQUMvQyxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDekUsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQTtTQUNoRTtRQUNELE9BQU8sQ0FBQyxDQUFBO0lBQ1YsQ0FBQzsrR0EzbkJVLGlCQUFpQiw2UEE0QmxCLGFBQWE7bUhBNUJaLGlCQUFpQixjQUZoQixNQUFNOzs0RkFFUCxpQkFBaUI7a0JBSDdCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkE2QkksTUFBTTsyQkFBQyxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uZmlndXJhdGlvbnNTZXJ2aWNlLCBEb21haW5Db25mU2VydmljZSB9IGZyb20gJ0BzdW5iaXJkLWNiL3V0aWxzLXYyJ1xuaW1wb3J0IHsgTnNDb250ZW50IH0gZnJvbSAnLi4vX3NlcnZpY2VzL3dpZGdldC1jb250ZW50Lm1vZGVsJ1xuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCdcbmltcG9ydCB7IG5vb3AsIE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJ1xuaW1wb3J0IGRheWpzIGZyb20gJ2RheWpzJ1xuaW1wb3J0IHsgQXBwVG9jU2VydmljZSB9IGZyb20gJy4vYXBwLXRvYy5zZXJ2aWNlJ1xuaW1wb3J0IHsgQ29udGVudExhbmd1YWdlU2VydmljZSwgV2lkZ2V0VXNlclNlcnZpY2VMaWIgfSBmcm9tICdAc3VuYmlyZC1jYi9jb25zdW1wdGlvbidcbmltcG9ydCB7IFdpZGdldENvbnRlbnRTZXJ2aWNlIH0gZnJvbSAnLi4vX2NvbGxlY3Rpb24tYXBpJ1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgVmlld2VyVXRpbFNlcnZpY2Uge1xuICBBUElfRU5EUE9JTlRTID0ge1xuICAgIHNldFMzQ29va2llOiBgL2FwaXMvdjgvcHJvdGVjdGVkL2NvbnRlbnQvc2V0Q29va2llYCxcbiAgICAvLyBQUk9HUkVTU19VUERBVEU6IGAvYXBpcy9wcm90ZWN0ZWQvdjgvdXNlci9yZWFsVGltZVByb2dyZXNzL3VwZGF0ZWAsXG4gICAgUFJPR1JFU1NfVVBEQVRFOiBgL2FwaXMvcHJveGllcy92OC9jb250ZW50LXByb2dyZXNgLFxuICAgIEFTU0VTU01FTlRfU0VDVElPTjogYC9hcGlzL3Byb3hpZXMvdjgvYXNzZXNzbWVudC92NS9yZWFkYCxcbiAgICBHRVRfRk9STV9CWUlEOiAoZm9ybUlkOiBzdHJpbmcpID0+IGBhcGlzL3Byb3hpZXMvdjgvZm9ybXMvdjIvZ2V0Rm9ybUJ5SWQ/Zm9ybUlkPSR7Zm9ybUlkfWAsXG4gICAgU1VCTUlUX0ZPUk06IGAvYXBpcy9wcm94aWVzL3Y4L2Zvcm1zL3YyL3NhdmVGb3JtU3VibWl0YCxcbiAgICAvLyBHRVRfRk9STV9CWUlEOiAoZm9ybUlkOiBzdHJpbmcpID0+IGBhcGlzL3Byb3hpZXMvdjgvZm9ybXMvZ2V0Rm9ybUJ5SWQ/aWQ9JHtmb3JtSWR9YCxcbiAgICAvLyBTVUJNSVRfRk9STTogYC9hcGlzL3Byb3hpZXMvdjgvZm9ybXMvdjEvc2F2ZUZvcm1TdWJtaXRgLFxuICAgIFBSRV9BU1NFU1NNRU5UX1NUQVRFX1VQREFURTogYC9hcGlzL3Byb3hpZXMvdjgvY29udGVudC92Mi9zdGF0ZS91cGRhdGVgXG5cbiAgfVxuICBkb3dubG9hZFJlZ2V4ID0gbmV3IFJlZ0V4cChgKC9jb250ZW50LXN0b3JlLy4qPykoXFxcXFxcKT9cXFxcXFxcXD9bJ1wiXSlgLCAnZ20nKVxuICBhdXRob3JpbmdCYXNlID0gJy9hcGlzL2F1dGhDb250ZW50LydcbiAgbWFya0FzQ29tcGxldGVTdWJqZWN0ID0gbmV3IFN1YmplY3QoKVxuICBhdXRvUGxheU5leHRWaWRlbyA9IG5ldyBTdWJqZWN0KClcbiAgYXV0b1BsYXlOZXh0QXVkaW8gPSBuZXcgU3ViamVjdCgpXG4gIGZvclByZXZpZXcgPSB3aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcygnL3B1YmxpYy8nKSB8fCB3aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcygnJnByZXZpZXc9dHJ1ZScpXG4gIHB1YmxpY1VzZXJEZXRhaWxzOiBhbnkgPSB7fVxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgcHJpdmF0ZSBjb25maWdzZXJ2aWNlOiBDb25maWd1cmF0aW9uc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb250ZW50U3ZjOiBXaWRnZXRDb250ZW50U2VydmljZSxcbiAgICBwcml2YXRlIHRvY1N2YzogQXBwVG9jU2VydmljZSxcbiAgICBwcml2YXRlIHVzZXJTdmM6IFdpZGdldFVzZXJTZXJ2aWNlTGliLFxuICAgIHByaXZhdGUgY29udGVudExhbmdTdmM6IENvbnRlbnRMYW5ndWFnZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBkb21haW5Db25mU3ZjOiBEb21haW5Db25mU2VydmljZSxcbiAgICBASW5qZWN0KCdlbnZpcm9ubWVudCcpIHByaXZhdGUgZW52aXJvbm1lbnQ6IGFueVxuICApIHsgfVxuXG4gIGFzeW5jIGZldGNoTWFuaWZlc3RGaWxlKHVybDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRTM0Nvb2tpZSh1cmwpXG4gICAgY29uc3QgbWFuaWZlc3RGaWxlID0gYXdhaXQgdGhpcy5odHRwXG4gICAgICAuZ2V0PGFueT4odXJsKVxuICAgICAgLnRvUHJvbWlzZSgpXG4gICAgICAuY2F0Y2goKF9lcnI6IGFueSkgPT4geyB9KVxuICAgIHJldHVybiBtYW5pZmVzdEZpbGVcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2V0UzNDb29raWUoX2NvbnRlbnRJZDogc3RyaW5nKSB7XG4gICAgLy8gYXdhaXQgdGhpcy5odHRwXG4gICAgLy8gICAucG9zdCh0aGlzLkFQSV9FTkRQT0lOVFMuc2V0UzNDb29raWUsIHsgY29udGVudElkIH0pXG4gICAgLy8gICAudG9Qcm9taXNlKClcbiAgICAvLyAgIC5jYXRjaCgoX2VycjogYW55KSA9PiB7IH0pXG4gICAgcmV0dXJuXG4gIH1cblxuICBjYWxjdWxhdGVQZXJjZW50KGN1cnJlbnQ6IHN0cmluZ1tdLCBtYXg6IG51bWJlciwgbWltZVR5cGU/OiBzdHJpbmcpOiBudW1iZXIge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB0ZW1wID0gWy4uLmN1cnJlbnRdXG4gICAgICBpZiAodGVtcCAmJiB0ZW1wLmxlbmd0aCAmJiBtYXgpIHtcbiAgICAgICAgY29uc3QgbGF0ZXN0ID0gcGFyc2VGbG9hdCh0ZW1wLnBvcCgpIHx8ICcwJylcbiAgICAgICAgY29uc3QgcGVyY2VudE1pbGlzID0gKGxhdGVzdCAvIG1heCkgKiAxMDBcbiAgICAgICAgbGV0IHBlcmNlbnQgPSBwYXJzZUZsb2F0KHBlcmNlbnRNaWxpcy50b0ZpeGVkKDIpKVxuICAgICAgICBpZiAoXG4gICAgICAgICAgbWltZVR5cGUgPT09IE5zQ29udGVudC5FTWltZVR5cGVzLk1QNCB8fFxuICAgICAgICAgIG1pbWVUeXBlID09PSBOc0NvbnRlbnQuRU1pbWVUeXBlcy5NM1U4IHx8XG4gICAgICAgICAgbWltZVR5cGUgPT09IE5zQ29udGVudC5FTWltZVR5cGVzLk1QMyB8fFxuICAgICAgICAgIG1pbWVUeXBlID09PSBOc0NvbnRlbnQuRU1pbWVUeXBlcy5NNEEgfHxcbiAgICAgICAgICBtaW1lVHlwZSA9PT0gTnNDb250ZW50LkVNaW1lVHlwZXMuWU9VVFVCRSB8fFxuICAgICAgICAgIG1pbWVUeXBlID09PSBOc0NvbnRlbnQuRU1pbWVUeXBlcy5TVVJWRVlcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKHBlcmNlbnQgPD0gNSkge1xuICAgICAgICAgICAgLy8gaWYgcGVyY2VudGFnZSBpcyBsZXNzIHRoYW4gNSUgbWFrZSBpdCAwXG4gICAgICAgICAgICBwZXJjZW50ID0gMFxuICAgICAgICAgIH0gZWxzZSBpZiAocGVyY2VudCA+PSA5NSkge1xuICAgICAgICAgICAgLy8gaWYgcGVyY2VudGFnZSBpcyBncmVhdGVyIHRoYW4gOTUlIG1ha2UgaXQgMTAwXG4gICAgICAgICAgICBwZXJjZW50ID0gMTAwXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwZXJjZW50XG4gICAgICB9XG4gICAgICByZXR1cm4gMFxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tY29uc29sZVxuICAgICAgY29uc29sZS5sb2coJ0Vycm9yIGluIGNhbGN1bGF0aW5nIHBlcmNlbnRhZ2UnLCBlKVxuICAgICAgcmV0dXJuIDBcbiAgICB9XG4gIH1cblxuICBnZXRTdGF0dXMoY3VycmVudDogc3RyaW5nW10sIG1heDogbnVtYmVyLCBtaW1lVHlwZT86IHN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwZXJjZW50YWdlID0gdGhpcy5jYWxjdWxhdGVQZXJjZW50KGN1cnJlbnQsIG1heCwgbWltZVR5cGUpXG4gICAgICAvLyBmb3IgdmlkZW9zIGFuZCBhdWRpb3NcbiAgICAgIGlmIChcbiAgICAgICAgbWltZVR5cGUgPT09IE5zQ29udGVudC5FTWltZVR5cGVzLk1QNCB8fFxuICAgICAgICBtaW1lVHlwZSA9PT0gTnNDb250ZW50LkVNaW1lVHlwZXMuTTNVOCB8fFxuICAgICAgICBtaW1lVHlwZSA9PT0gTnNDb250ZW50LkVNaW1lVHlwZXMuTVAzIHx8XG4gICAgICAgIG1pbWVUeXBlID09PSBOc0NvbnRlbnQuRU1pbWVUeXBlcy5NNEEgfHxcbiAgICAgICAgbWltZVR5cGUgPT09IE5zQ29udGVudC5FTWltZVR5cGVzLlNVUlZFWSB8fFxuICAgICAgICBtaW1lVHlwZSA9PT0gTnNDb250ZW50LkVNaW1lVHlwZXMuUERGXG4gICAgICApIHtcbiAgICAgICAgLy8gaWYgcGVyY2VudGFnZSBpcyBsZXNzIHRoYW4gNSUgdGhlbiBtYWtlIHN0YXR1cyBzdGFydGVkXG4gICAgICAgIGlmIChNYXRoLmNlaWwocGVyY2VudGFnZSkgPD0gNSkge1xuICAgICAgICAgIHJldHVybiAxXG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgcGVyY2VudGFnZSBpcyBncmVhdGVyIHRoYW4gOTUlIHRoZW4gbWFrZSBzdGF0dXMgY29tcGxldGVcbiAgICAgICAgaWYgKE1hdGguY2VpbChwZXJjZW50YWdlKSA+PSA5NSkge1xuICAgICAgICAgIHJldHVybiAyXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChNYXRoLmNlaWwocGVyY2VudGFnZSkgPj0gMTAwKSB7XG4gICAgICAgICAgcmV0dXJuIDJcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIDFcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUubG9nKCdFcnJvciBpbiBnZXR0aW5nIGNvbXBsZXRpb24gc3RhdHVzJywgZSlcbiAgICAgIHJldHVybiAxXG4gICAgfVxuICB9XG5cbiAgcmVhbFRpbWVQcm9ncmVzc1VwZGF0ZShjb250ZW50SWQ6IHN0cmluZywgcmVxdWVzdDogYW55LCBjb2xsZWN0aW9uSWQ/OiBzdHJpbmcsIGJhdGNoSWQ/OiBzdHJpbmcpIHtcbiAgICBsZXQgcmVxOiBhbnlcbiAgICBpZiAodGhpcy5jb25maWdzZXJ2aWNlLnVzZXJQcm9maWxlKSB7XG4gICAgICBjb25zdCBsYW5ndWFnZSA9IHRoaXMuZ2V0UmVzb3VyY2VDb250ZW50TGFuZ3VhZ2UoY29udGVudElkKVxuICAgICAgcmVxID0ge1xuICAgICAgICByZXF1ZXN0OiB7XG4gICAgICAgICAgdXNlcklkOiB0aGlzLmNvbmZpZ3NlcnZpY2UudXNlclByb2ZpbGUudXNlcklkIHx8ICcnLFxuICAgICAgICAgIGNvbnRlbnRzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNvbnRlbnRJZCxcbiAgICAgICAgICAgICAgYmF0Y2hJZCxcbiAgICAgICAgICAgICAgbGFuZ3VhZ2UsXG4gICAgICAgICAgICAgIHN0YXR1czogdGhpcy5nZXRTdGF0dXMocmVxdWVzdC5jdXJyZW50LCByZXF1ZXN0Lm1heF9zaXplLCByZXF1ZXN0Lm1pbWVfdHlwZSksXG4gICAgICAgICAgICAgIGNvdXJzZUlkOiBjb2xsZWN0aW9uSWQsXG4gICAgICAgICAgICAgIGxhc3RBY2Nlc3NUaW1lOiBkYXlqcyhuZXcgRGF0ZSgpKS5mb3JtYXQoJ1lZWVktTU0tREQgSEg6bW06c3M6U1NTWlonKSxcbiAgICAgICAgICAgICAgcHJvZ3Jlc3NkZXRhaWxzOiB7XG4gICAgICAgICAgICAgICAgbWF4X3NpemU6IHJlcXVlc3QubWF4X3NpemUsXG4gICAgICAgICAgICAgICAgY3VycmVudDogcmVxdWVzdC5jdXJyZW50LFxuICAgICAgICAgICAgICAgIG1pbWVUeXBlOiByZXF1ZXN0Lm1pbWVfdHlwZSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgY29tcGxldGlvblBlcmNlbnRhZ2U6IHRoaXMuY2FsY3VsYXRlUGVyY2VudChyZXF1ZXN0LmN1cnJlbnQsIHJlcXVlc3QubWF4X3NpemUsIHJlcXVlc3QubWltZV90eXBlKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIH1cbiAgICAgIC8vIGlmICh0aGlzLmNvbmZpZ3NlcnZpY2UuY3N0b2tlbiAhPT0gJycpIHtcbiAgICAgIC8vICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpXG4gICAgICAvLyAgIC5zZXQoJ2NzdG9rZW4nLCB0aGlzLmNvbmZpZ3NlcnZpY2UuY3N0b2tlbilcblxuICAgICAgLy8gICB0aGlzLmh0dHBcbiAgICAgIC8vICAgLnBhdGNoKGAke3RoaXMuQVBJX0VORFBPSU5UUy5QUk9HUkVTU19VUERBVEV9LyR7Y29udGVudElkfWAsIHsgaGVhZGVycyB9ICwgcmVxKVxuICAgICAgLy8gICAuc3Vic2NyaWJlKG5vb3AsIG5vb3ApXG4gICAgICAvLyB9IGVsc2Uge1xuICAgICAgLy8gICB0aGlzLmh0dHBcbiAgICAgIC8vICAgLnBhdGNoKGAke3RoaXMuQVBJX0VORFBPSU5UUy5QUk9HUkVTU19VUERBVEV9LyR7Y29udGVudElkfWAsIHJlcSlcbiAgICAgIC8vICAgLnN1YnNjcmliZShub29wLCBub29wKVxuICAgICAgLy8gfVxuICAgICAgdGhpcy5odHRwXG4gICAgICAgIC5wYXRjaChgJHt0aGlzLkFQSV9FTkRQT0lOVFMuUFJPR1JFU1NfVVBEQVRFfS8ke2NvbnRlbnRJZH1gLCByZXEpXG4gICAgICAgIC5zdWJzY3JpYmUobm9vcCwgbm9vcClcbiAgICAgIFxuICAgICAgaWYgKHRoaXMudG9jU3ZjLmhhc2htYXBbY29udGVudElkXSAmJlxuICAgICAgICAoIXRoaXMudG9jU3ZjLmhhc2htYXBbY29udGVudElkXVsnY29tcGxldGlvblN0YXR1cyddIHx8IHRoaXMudG9jU3ZjLmhhc2htYXBbY29udGVudElkXVsnY29tcGxldGlvblN0YXR1cyddIDwgMikpIHtcbiAgICAgICAgdGhpcy50b2NTdmMuaGFzaG1hcFtjb250ZW50SWRdWydjb21wbGV0aW9uUGVyY2VudGFnZSddID0gcmVxLnJlcXVlc3QuY29udGVudHNbMF0uY29tcGxldGlvblBlcmNlbnRhZ2VcbiAgICAgICAgdGhpcy50b2NTdmMuaGFzaG1hcFtjb250ZW50SWRdWydjb21wbGV0aW9uU3RhdHVzJ10gPSBOdW1iZXIocmVxLnJlcXVlc3QuY29udGVudHNbMF0uc3RhdHVzKSB8fCAwXG4gICAgICAgIHRoaXMudG9jU3ZjLmhhc2htYXAgPSB7IC4uLnRoaXMudG9jU3ZjLmhhc2htYXAgfVxuICAgICAgICBcbiAgICAgICAgLy8gVHJpZ2dlciBtaWxlc3RvbmUgbG9jayByZWNvbXB1dGF0aW9uIC0gaXQgd2lsbCBlbWl0IGhhc2htYXBVcGRhdGVkIHdpdGggYm90aCBwcm9ncmVzcyBhbmQgbG9jayBjaGFuZ2VzXG4gICAgICAgIHRoaXMudG9jU3ZjLnRyaWdnZXJNaWxlc3RvbmVMb2NrVXBkYXRlKClcbiAgICAgICAgICAvLyBFbWl0IHRvIHRyaWdnZXIgdmlld2VyIGNvbXBvbmVudCByZWZyZXNoIGZvciBMZWFybmluZyBQYXRod2F5c1xuICAgICAgICAgIHRoaXMubWFya0FzQ29tcGxldGVTdWJqZWN0Lm5leHQodHJ1ZSlcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmVxID0ge31cbiAgICAgIC8vIGRvIG5vdGhpbmdcbiAgICB9XG4gIH1cblxuICBnZXRCYXRjaElkQW5kQ291cnNlSWQoY291cnNlSWQ6IHN0cmluZywgYmF0Y2hJZDogc3RyaW5nLCByZXNvdXJjZUlkOiBzdHJpbmcpIHtcbiAgICBjb25zdCB0ZW1wRGF0YSA9IHtcbiAgICAgIGNvdXJzZUlkLFxuICAgICAgYmF0Y2hJZCxcbiAgICB9XG4gICAgXG4gICAgY29uc3QgdGVtcENvbnRlbnREYXRhID0gdGhpcy5jb250ZW50U3ZjLmN1cnJlbnRNZXRhRGF0YVxuICAgIGNvbnN0IHRlbXBDb250ZW50UmVhZERhdGEgPSB0aGlzLmNvbnRlbnRTdmMuY3VycmVudENvbnRlbnRSZWFkTWV0YURhdGFcbiAgICBjb25zdCBlbnJvbGxtZW50TGlzdCA9IHRoaXMuY29udGVudFN2Yy5jdXJyZW50QmF0Y2hFbnJvbGxtZW50TGlzdFxuICAgIGlmICghdGhpcy5mb3JQcmV2aWV3KSB7XG4gICAgICBpZiAodGVtcENvbnRlbnREYXRhLmNvdXJzZUNhdGVnb3J5ID09PSAnTGVhcm5pbmcgUGF0aHdheScpIHtcbiAgICAgICAgLy8gRmluZCB0aGUgY291cnNlIHRoYXQgY29udGFpbnMgdGhlIGdpdmVuIHJlc291cmNlIElEXG4gICAgICAgIGNvbnN0IGZvdW5kQ291cnNlID0gdGhpcy5maW5kQ291cnNlQ29udGFpbmluZ1Jlc291cmNlKHRlbXBDb250ZW50RGF0YSwgcmVzb3VyY2VJZClcblxuICAgICAgICBpZiAoZm91bmRDb3Vyc2UpIHtcbiAgICAgICAgICAvLyBBbHdheXMgdXBkYXRlIGNvdXJzZUlkIGlmIGNvdXJzZSBpcyBmb3VuZFxuICAgICAgICAgIHRlbXBEYXRhLmNvdXJzZUlkID0gZm91bmRDb3Vyc2UuaWRlbnRpZmllclxuXG4gICAgICAgICAgLy8gVHJ5IHRvIGZpbmQgYmF0Y2ggSUQgZnJvbSBlbnJvbGxtZW50IGRhdGEgZm9yIHRoZSBmb3VuZCBjb3Vyc2VcbiAgICAgICAgICBpZiAoZm91bmRDb3Vyc2UuaWRlbnRpZmllcikge1xuICAgICAgICAgICAgY29uc3QgZW5yb2xsbWVudCA9IGVucm9sbG1lbnRMaXN0LmZpbmQoXG4gICAgICAgICAgICAgIChjb3Vyc2U6IGFueSkgPT4gY291cnNlLmNvbGxlY3Rpb25JZCA9PT0gZm91bmRDb3Vyc2UuaWRlbnRpZmllclxuICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICBpZiAoZW5yb2xsbWVudCAmJiBlbnJvbGxtZW50LmJhdGNoSWQpIHtcbiAgICAgICAgICAgICAgdGVtcERhdGEuYmF0Y2hJZCA9IGVucm9sbG1lbnQuYmF0Y2hJZFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0ZW1wQ29udGVudERhdGEgJiYgdGVtcENvbnRlbnRSZWFkRGF0YS5jdW11bGF0aXZlVHJhY2tpbmcgJiZcbiAgICAgICAgKHRlbXBDb250ZW50RGF0YS5wcmltYXJ5Q2F0ZWdvcnkgPT09IE5zQ29udGVudC5FUHJpbWFyeUNhdGVnb3J5LlBST0dSQU0gfHxcbiAgICAgICAgICB0ZW1wQ29udGVudERhdGEucHJpbWFyeUNhdGVnb3J5ID09PSBOc0NvbnRlbnQuRVByaW1hcnlDYXRlZ29yeS5DVVJBVEVEX1BST0dSQU1cbiAgICAgICAgICB8fCB0ZW1wQ29udGVudERhdGEucHJpbWFyeUNhdGVnb3J5ID09PSBOc0NvbnRlbnQuRVByaW1hcnlDYXRlZ29yeS5CTEVOREVEX1BST0dSQU1cbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIHRlbXBDb250ZW50RGF0YS5jaGlsZHJlbi5mb3JFYWNoKGFzeW5jIChjaGlsZExpc3Q6IE5zQ29udGVudC5JQ29udGVudCkgPT4ge1xuICAgICAgICAgIGlmIChjaGlsZExpc3QucHJpbWFyeUNhdGVnb3J5ID09PSBOc0NvbnRlbnQuRVByaW1hcnlDYXRlZ29yeS5DT1VSU0UpIHtcbiAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbWF4LWxpbmUtbGVuZ3RoXG4gICAgICAgICAgICBjb25zdCBjb3Vyc2VFbnJvbGxtZW50TGlzdCA9IGVucm9sbG1lbnRMaXN0ICYmIGVucm9sbG1lbnRMaXN0LmZpbHRlcigodjogTnNDb250ZW50LklDb3Vyc2UpID0+IHYuY29udGVudElkID09PSBjaGlsZExpc3QuaWRlbnRpZmllcilcbiAgICAgICAgICAgIGlmIChjaGlsZExpc3QuY2hpbGROb2RlcyAmJiBjaGlsZExpc3QuY2hpbGROb2Rlcy5pbmRleE9mKHJlc291cmNlSWQpICE9PSAtMSkge1xuICAgICAgICAgICAgICBpZiAoY291cnNlRW5yb2xsbWVudExpc3QgJiYgY291cnNlRW5yb2xsbWVudExpc3QubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHRlbXBEYXRhLmJhdGNoSWQgPSBjb3Vyc2VFbnJvbGxtZW50TGlzdFtjb3Vyc2VFbnJvbGxtZW50TGlzdC5sZW5ndGggLSAxXS5iYXRjaC5iYXRjaElkXG4gICAgICAgICAgICAgICAgdGVtcERhdGEuY291cnNlSWQgPSBjaGlsZExpc3QuaWRlbnRpZmllclxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGE6IGFueSA9IGF3YWl0IHRoaXMuY2hlY2tGb3JDb3Vyc2VFbnJvbGxtZW50KGNoaWxkTGlzdCwgcmVzb3VyY2VJZCwgZW5yb2xsbWVudExpc3QsIHRlbXBEYXRhKVxuICAgICAgICAgICAgICAgIHRlbXBEYXRhLmNvdXJzZUlkID0gZGF0YS5jb3Vyc2VJZFxuICAgICAgICAgICAgICAgIHRlbXBEYXRhLmJhdGNoSWQgPSBkYXRhLmJhdGNoSWRcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAodGVtcENvbnRlbnREYXRhLnByaW1hcnlDYXRlZ29yeSA9PT0gTnNDb250ZW50LkVQcmltYXJ5Q2F0ZWdvcnkuQkxFTkRFRF9QUk9HUkFNKSB7XG4gICAgICAgICAgICBpZiAodGVtcERhdGEuY291cnNlSWQgPT09IGNvdXJzZUlkKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGJQRW5yb2xsbWVudExpc3QgPSBlbnJvbGxtZW50TGlzdC5maWx0ZXIoKHY6IE5zQ29udGVudC5JQ291cnNlKSA9PiB2LmNvbnRlbnRJZCA9PT0gdGVtcENvbnRlbnREYXRhLmlkZW50aWZpZXIpXG4gICAgICAgICAgICAgIGlmICh0ZW1wQ29udGVudERhdGEuY2hpbGROb2RlcyAmJiB0ZW1wQ29udGVudERhdGEuY2hpbGROb2Rlcy5pbmRleE9mKHJlc291cmNlSWQpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIGlmIChiUEVucm9sbG1lbnRMaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgIHRlbXBEYXRhLmJhdGNoSWQgPSBiUEVucm9sbG1lbnRMaXN0W2JQRW5yb2xsbWVudExpc3QubGVuZ3RoIC0gMV0uYmF0Y2guYmF0Y2hJZFxuICAgICAgICAgICAgICAgICAgdGVtcERhdGEuY291cnNlSWQgPSB0ZW1wQ29udGVudERhdGEuaWRlbnRpZmllclxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRlbXBEYXRhXG4gIH1cblxuICAvKipcbiAgICogUmVjdXJzaXZlbHkgc2VhcmNoZXMgZm9yIGEgcmVzb3VyY2UgSUQgaW4gYSBjb250ZW50J3MgY2hpbGRyZW4gaGllcmFyY2h5XG4gICAqIEBwYXJhbSBjb250ZW50IFRoZSBjb250ZW50IG9iamVjdCB0byBzZWFyY2ggaW5cbiAgICogQHBhcmFtIHJlc291cmNlSWQgVGhlIHJlc291cmNlIElEIHRvIGZpbmRcbiAgICogQHJldHVybnMgdHJ1ZSBpZiByZXNvdXJjZSBpcyBmb3VuZCwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqL1xuICBwcml2YXRlIGZpbmRSZXNvdXJjZUluQ29udGVudChjb250ZW50OiBhbnksIHJlc291cmNlSWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIC8vIENoZWNrIGlmIHRoaXMgY29udGVudCBoYXMgdGhlIHJlc291cmNlIGluIGl0cyBsZWFmTm9kZXNcbiAgICBpZiAoY29udGVudC5sZWFmTm9kZXMgJiYgQXJyYXkuaXNBcnJheShjb250ZW50LmxlYWZOb2RlcykpIHtcbiAgICAgIGlmIChjb250ZW50LmxlYWZOb2Rlcy5pbmRleE9mKHJlc291cmNlSWQpICE9PSAtMSkge1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIHRoaXMgY29udGVudCdzIGlkZW50aWZpZXIgbWF0Y2hlcyB0aGUgcmVzb3VyY2UgSURcbiAgICBpZiAoY29udGVudC5pZGVudGlmaWVyID09PSByZXNvdXJjZUlkKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIC8vIFJlY3Vyc2l2ZWx5IHNlYXJjaCBpbiBjaGlsZHJlblxuICAgIGlmIChjb250ZW50LmNoaWxkcmVuICYmIEFycmF5LmlzQXJyYXkoY29udGVudC5jaGlsZHJlbikpIHtcbiAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgY29udGVudC5jaGlsZHJlbikge1xuICAgICAgICBpZiAodGhpcy5maW5kUmVzb3VyY2VJbkNvbnRlbnQoY2hpbGQsIHJlc291cmNlSWQpKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLyoqXG4gICAqIEZpbmRzIHRoZSBjb3Vyc2UgdGhhdCBjb250YWlucyBhIGdpdmVuIHJlc291cmNlIElEIGluIGEgTGVhcm5pbmcgUGF0aHdheVxuICAgKiBAcGFyYW0gbGVhcm5pbmdQYXRod2F5Q29udGVudCBUaGUgTGVhcm5pbmcgUGF0aHdheSBjb250ZW50IGRhdGFcbiAgICogQHBhcmFtIHJlc291cmNlSWQgVGhlIHJlc291cmNlIElEIHRvIGZpbmRcbiAgICogQHJldHVybnMgVGhlIGNvdXJzZSBvYmplY3QgY29udGFpbmluZyB0aGUgcmVzb3VyY2UsIG9yIG51bGwgaWYgbm90IGZvdW5kXG4gICAqL1xuICBmaW5kQ291cnNlQ29udGFpbmluZ1Jlc291cmNlKGxlYXJuaW5nUGF0aHdheUNvbnRlbnQ6IGFueSwgcmVzb3VyY2VJZDogc3RyaW5nKTogYW55IHtcbiAgICAvLyBDaGVjayBpZiBtaWxlc3RvbmVzX3YxIGV4aXN0c1xuICAgIGlmICghbGVhcm5pbmdQYXRod2F5Q29udGVudC5taWxlc3RvbmVzX3YxIHx8ICFBcnJheS5pc0FycmF5KGxlYXJuaW5nUGF0aHdheUNvbnRlbnQubWlsZXN0b25lc192MSkpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgLy8gTG9vcCB0aHJvdWdoIGVhY2ggbWlsZXN0b25lXG4gICAgZm9yIChjb25zdCBtaWxlc3RvbmUgb2YgbGVhcm5pbmdQYXRod2F5Q29udGVudC5taWxlc3RvbmVzX3YxKSB7XG4gICAgICAvLyBDaGVjayBpZiBtaWxlc3RvbmUgaGFzIGNvdXJzZXNcbiAgICAgIGlmIChtaWxlc3RvbmUuY291cnNlcyAmJiBBcnJheS5pc0FycmF5KG1pbGVzdG9uZS5jb3Vyc2VzKSkge1xuICAgICAgICAvLyBMb29wIHRocm91Z2ggZWFjaCBjb3Vyc2UgaW4gdGhlIG1pbGVzdG9uZVxuICAgICAgICBmb3IgKGNvbnN0IGNvdXJzZSBvZiBtaWxlc3RvbmUuY291cnNlcykge1xuICAgICAgICAgIC8vIENoZWNrIGlmIHRoaXMgY291cnNlIGNvbnRhaW5zIHRoZSByZXNvdXJjZVxuICAgICAgICAgIGlmICh0aGlzLmZpbmRSZXNvdXJjZUluQ29udGVudChjb3Vyc2UsIHJlc291cmNlSWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gY291cnNlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGdldFJlc291cmNlQ29udGVudExhbmd1YWdlKHJlc291cmNlSWQ6IHN0cmluZykge1xuXG4gICAgbGV0IHRlbXBMYW5ndWFnZTogYW55ID0gJ2VuZ2xpc2gnXG4gICAgbGV0IGxhbmd1YWdlRm91bmQgPSBmYWxzZVxuICAgIGNvbnN0IHRlbXBDb250ZW50RGF0YSA9IHRoaXMuY29udGVudFN2Yy5jdXJyZW50TWV0YURhdGFcbiAgICBpZiAoIXRoaXMuZm9yUHJldmlldykge1xuICAgICAgdGVtcENvbnRlbnREYXRhLmNoaWxkcmVuPy5mb3JFYWNoKGFzeW5jIChjaGlsZExpc3Q6IE5zQ29udGVudC5JQ29udGVudCkgPT4ge1xuICAgICAgICBpZiAoY2hpbGRMaXN0LnByaW1hcnlDYXRlZ29yeSA9PT0gTnNDb250ZW50LkVQcmltYXJ5Q2F0ZWdvcnkuQ09VUlNFKSB7XG4gICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBtYXgtbGluZS1sZW5ndGhcbiAgICAgICAgICBpZiAoY2hpbGRMaXN0LmxlYWZOb2RlcyAmJiBjaGlsZExpc3QubGVhZk5vZGVzLmluZGV4T2YocmVzb3VyY2VJZCkgIT09IC0xKSB7XG4gICAgICAgICAgICB0ZW1wTGFuZ3VhZ2UgPSB0aGlzLmNvbnRlbnRMYW5nU3ZjLmdldENvbnRlbnRMYW5ndWFnZShjaGlsZExpc3QpXG4gICAgICAgICAgICBsYW5ndWFnZUZvdW5kID0gdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgKVxuICAgICAgaWYgKCFsYW5ndWFnZUZvdW5kKSB7XG4gICAgICAgIGlmICh0ZW1wQ29udGVudERhdGEubGVhZk5vZGVzICYmIHRlbXBDb250ZW50RGF0YS5sZWFmTm9kZXMuaW5kZXhPZihyZXNvdXJjZUlkKSAhPT0gLTEpIHtcbiAgICAgICAgICB0ZW1wTGFuZ3VhZ2UgPSB0aGlzLmNvbnRlbnRMYW5nU3ZjLmdldENvbnRlbnRMYW5ndWFnZSh0ZW1wQ29udGVudERhdGEpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRlbXBMYW5ndWFnZVxuICB9XG5cbiAgYXN5bmMgY2hlY2tGb3JDb3Vyc2VFbnJvbGxtZW50KGNoaWxkTGlzdDogTnNDb250ZW50LklDb250ZW50LCBfcmVzb3VyY2VJZDogc3RyaW5nLCBfZW5yb2xsbWVudExpc3Q6IGFueSwgX3RlbXBEYXRhOiBhbnkpIHtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG1heC1saW5lLWxlbmd0aFxuICAgIGNvbnN0IGNvdXJzZURhdGE6IGFueSA9IGF3YWl0IHRoaXMuY29udGVudFN2Yy5hdXRvQXNzaWduQmF0Y2hBcGkoY2hpbGRMaXN0LmlkZW50aWZpZXIpLnRvUHJvbWlzZSgpLnRoZW4oYXN5bmMgKGRhdGE6IE5zQ29udGVudC5JQmF0Y2hMaXN0UmVzcG9uc2UpID0+IHtcbiAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbWF4LWxpbmUtbGVuZ3RoXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMudXNlclN2Yy5mZXRjaEVucm9sbG1lbnREYXRhQnlDb250ZW50SWQodGhpcy5jb25maWdzZXJ2aWNlLnVzZXJQcm9maWxlPy51c2VySWQsIGNoaWxkTGlzdC5pZGVudGlmaWVyKS50b1Byb21pc2UoKS50aGVuKGFzeW5jIChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChyZXMgJiYgcmVzLmNvdXJzZXMgJiYgcmVzLmNvdXJzZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzLmNvdXJzZXNcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIFt7IGNvdXJzZUlkOiBjaGlsZExpc3QuaWRlbnRpZmllciwgYmF0Y2hJZDogJycgfV1cblxuICAgICAgICB9KS5jYXRjaCgoX2VycjogYW55KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIFt7IGNvdXJzZUlkOiBjaGlsZExpc3QuaWRlbnRpZmllciwgYmF0Y2hJZDogJycgfV1cbiAgICAgICAgfSlcbiAgICAgICAgdGhpcy5jb250ZW50U3ZjLmN1cnJlbnRCYXRjaEVucm9sbG1lbnRMaXN0ID0gWy4uLnRoaXMuY29udGVudFN2Yy5jdXJyZW50QmF0Y2hFbnJvbGxtZW50TGlzdCwgLi4ucmVzcG9uc2VEYXRhXVxuICAgICAgICByZXR1cm4geyBjb3Vyc2VJZDogY2hpbGRMaXN0LmlkZW50aWZpZXIsIGJhdGNoSWQ6IHJlc3BvbnNlRGF0YVswXS5iYXRjaElkIH1cbiAgICAgIH1cbiAgICB9KS5jYXRjaCgoX2VycjogYW55KSA9PiB7XG4gICAgICByZXR1cm4gW3sgY291cnNlSWQ6IGNoaWxkTGlzdC5pZGVudGlmaWVyLCBiYXRjaElkOiAnJyB9XVxuICAgIH0pXG4gICAgcmV0dXJuIGNvdXJzZURhdGFcbiAgfVxuXG4gIHJlYWxUaW1lUHJvZ3Jlc3NVcGRhdGVRdWl6KGNvbnRlbnRJZDogc3RyaW5nLCBjb2xsZWN0aW9uSWQ/OiBzdHJpbmcsIGJhdGNoSWQ/OiBzdHJpbmcsIHN0YXR1cz86IG51bWJlcikge1xuICAgIGxldCByZXE6IGFueVxuICAgIGlmICh0aGlzLmNvbmZpZ3NlcnZpY2UudXNlclByb2ZpbGUpIHtcbiAgICAgIGNvbnN0IGxhbmd1YWdlID0gdGhpcy5nZXRSZXNvdXJjZUNvbnRlbnRMYW5ndWFnZShjb250ZW50SWQpXG4gICAgICByZXEgPSB7XG4gICAgICAgIHJlcXVlc3Q6IHtcbiAgICAgICAgICB1c2VySWQ6IHRoaXMuY29uZmlnc2VydmljZS51c2VyUHJvZmlsZS51c2VySWQgfHwgJycsXG4gICAgICAgICAgY29udGVudHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgY29udGVudElkLFxuICAgICAgICAgICAgICBiYXRjaElkLFxuICAgICAgICAgICAgICBsYW5ndWFnZSxcbiAgICAgICAgICAgICAgc3RhdHVzOiBzdGF0dXMgfHwgMixcbiAgICAgICAgICAgICAgY291cnNlSWQ6IGNvbGxlY3Rpb25JZCxcbiAgICAgICAgICAgICAgbGFzdEFjY2Vzc1RpbWU6IGRheWpzKG5ldyBEYXRlKCkpLmZvcm1hdCgnWVlZWS1NTS1ERCBISDptbTpzczpTU1NaWicpLFxuICAgICAgICAgICAgICBjb21wbGV0aW9uUGVyY2VudGFnZTogc3RhdHVzID09PSAyID8gMTAwIDogMCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIH1cblxuICAgICAgdGhpcy5odHRwXG4gICAgICAgIC5wYXRjaChgJHt0aGlzLkFQSV9FTkRQT0lOVFMuUFJPR1JFU1NfVVBEQVRFfS8ke2NvbnRlbnRJZH1gLCByZXEpXG4gICAgICAgIC5zdWJzY3JpYmUobm9vcCwgbm9vcClcbiAgICAgICAgXG4gICAgICBpZiAodGhpcy50b2NTdmMuaGFzaG1hcCAmJiB0aGlzLnRvY1N2Yy5oYXNobWFwW2NvbnRlbnRJZF0gJiYgcmVxLnJlcXVlc3QuY29udGVudHNbMF0pIHtcbiAgICAgICAgaWYgKHRoaXMudG9jU3ZjLmhhc2htYXBbY29udGVudElkXSAmJlxuICAgICAgICAgICghdGhpcy50b2NTdmMuaGFzaG1hcFtjb250ZW50SWRdWydjb21wbGV0aW9uU3RhdHVzJ10gfHwgdGhpcy50b2NTdmMuaGFzaG1hcFtjb250ZW50SWRdWydjb21wbGV0aW9uU3RhdHVzJ10gPCAyKSkge1xuICAgICAgICAgIHRoaXMudG9jU3ZjLmhhc2htYXBbY29udGVudElkXVsnY29tcGxldGlvblBlcmNlbnRhZ2UnXSA9IHJlcS5yZXF1ZXN0LmNvbnRlbnRzWzBdLmNvbXBsZXRpb25QZXJjZW50YWdlXG4gICAgICAgICAgdGhpcy50b2NTdmMuaGFzaG1hcFtjb250ZW50SWRdWydjb21wbGV0aW9uU3RhdHVzJ10gPSBOdW1iZXIocmVxLnJlcXVlc3QuY29udGVudHNbMF0uc3RhdHVzKSB8fCAwXG4gICAgICAgICAgdGhpcy50b2NTdmMuaGFzaG1hcCA9IHsgLi4udGhpcy50b2NTdmMuaGFzaG1hcCB9XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gVHJpZ2dlciBtaWxlc3RvbmUgbG9jayByZWNvbXB1dGF0aW9uIC0gaXQgd2lsbCBlbWl0IGhhc2htYXBVcGRhdGVkIHdpdGggYm90aCBwcm9ncmVzcyBhbmQgbG9jayBjaGFuZ2VzXG4gICAgICAgICAgaWYgKHRoaXMudG9jU3ZjLnRyaWdnZXJNaWxlc3RvbmVMb2NrVXBkYXRlKSB7XG4gICAgICAgICAgICB0aGlzLnRvY1N2Yy50cmlnZ2VyTWlsZXN0b25lTG9ja1VwZGF0ZSgpXG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIC8vIEVtaXQgdG8gdHJpZ2dlciB2aWV3ZXIgY29tcG9uZW50IHJlZnJlc2ggZm9yIExlYXJuaW5nIFBhdGh3YXlzXG4gICAgICAgICAgdGhpcy5tYXJrQXNDb21wbGV0ZVN1YmplY3QubmV4dCh0cnVlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcSA9IHt9XG4gICAgICAvLyBkbyBub3RoaW5nXG4gICAgfVxuICB9XG5cbiAgZ2V0Q29udGVudChjb250ZW50SWQ6IHN0cmluZyk6IE9ic2VydmFibGU8TnNDb250ZW50LklDb250ZW50PiB7XG4gICAgY29uc3QgZm9yUHJldmlldyA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluY2x1ZGVzKCcvcHVibGljLycpIHx8IHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluY2x1ZGVzKCcmcHJldmlldz10cnVlJylcbiAgICBsZXQgdXJsID0gYC9hcGlzL3Byb3hpZXMvdjgvYWN0aW9uL2NvbnRlbnQvdjMvcmVhZC8ke2NvbnRlbnRJZH1gXG4gICAgaWYgKCFmb3JQcmV2aWV3KSB7XG4gICAgICB1cmwgPSBgL2FwaXMvcHJveGllcy92OC9hY3Rpb24vY29udGVudC92My9yZWFkLyR7Y29udGVudElkfWBcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluY2x1ZGVzKCdlZGl0TW9kZT10cnVlJykgJiYgd2luZG93LmxvY2F0aW9uLmhyZWYuaW5jbHVkZXMoJ19yYycpKSB7XG4gICAgICAgIHVybCA9IGAvYXBpcy9wcm94aWVzL3Y4L2FjdGlvbi9jb250ZW50L3YzL3JlYWQvJHtjb250ZW50SWR9YFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdXJsID0gYC9hcGkvY29udGVudC92MS9yZWFkLyR7Y29udGVudElkfWBcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TnNDb250ZW50LklDb250ZW50PihcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcbiAgICAgIC8vIGAvYXBpcy9hdXRoQXBpL2FjdGlvbi9jb250ZW50L2hpZXJhcmNoeS8ke2NvbnRlbnRJZH0/cm9vdE9yZz0ke3RoaXMuY29uZmlnc2VydmljZS5yb290T3JnIHx8ICdpZ290J30mb3JnPSR7dGhpcy5jb25maWdzZXJ2aWNlLmFjdGl2ZU9yZyB8fCAnZG9wdCd9YCxcbiAgICAgIHVybFxuICAgIClcbiAgfVxuXG4gIGdldEF1dGhvcmluZ1VybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHVybFxuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxuICAgICAgPyBgL2FwaXMvYXV0aENvbnRlbnQvJHt1cmwuaW5jbHVkZXMoJy9jb250ZW50LXN0b3JlLycpID8gbmV3IFVSTCh1cmwpLnBhdGhuYW1lLnNsaWNlKDEpIDogZW5jb2RlVVJJQ29tcG9uZW50KHVybCl9YFxuICAgICAgOiAnJ1xuICB9XG5cbiAgcmVnZXhEb3dubG9hZFJlcGxhY2UgPSAoX3N0ciA9ICcnLCBncm91cDE6IHN0cmluZywgZ3JvdXAyOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICAgIHJldHVybiBgJHt0aGlzLmF1dGhvcmluZ0Jhc2V9JHtlbmNvZGVVUklDb21wb25lbnQoZ3JvdXAxKX0ke2dyb3VwMn1gXG4gIH1cblxuICByZXBsYWNlVG9BdXRoVXJsKGRhdGE6IGFueSk6IGFueSB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UoXG4gICAgICBKU09OLnN0cmluZ2lmeShkYXRhKS5yZXBsYWNlKFxuICAgICAgICB0aGlzLmRvd25sb2FkUmVnZXgsXG4gICAgICAgIHRoaXMucmVnZXhEb3dubG9hZFJlcGxhY2UsXG4gICAgICApLFxuICAgIClcbiAgfVxuICByZWFkU2VjdGlvbnMoYXNzZXNzbWVudElkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYCR7dGhpcy5BUElfRU5EUE9JTlRTfS8ke2Fzc2Vzc21lbnRJZH1gXG4gIH1cblxuICBnZXRQdWJsaWNVcmwodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IG1haW5VcmwgPSB1cmwuc3BsaXQoJy9jb250ZW50JykucG9wKCkgfHwgJydcbiAgICByZXR1cm4gYCR7dGhpcy5lbnZpcm9ubWVudC5jb250ZW50SG9zdH0vJHt0aGlzLmVudmlyb25tZW50LmNvbnRlbnRCdWNrZXR9L2NvbnRlbnQke21haW5Vcmx9YFxuICB9XG5cbiAgZ2V0Q2RuVXJsKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBtYWluVXJsID0gdXJsLnNwbGl0KCcvY29udGVudCcpLnBvcCgpIHx8ICcnXG4gICAgcmV0dXJuIGAke3RoaXMuZG9tYWluQ29uZlN2Yy5nZXREb21haW5DRE5Ib3N0KCl9LyR7dGhpcy5lbnZpcm9ubWVudC5jZG5Db250ZW50QnVja2V0fS9jb250ZW50JHttYWluVXJsfWBcbiAgfVxuXG4gIC8vICBmZXRjaENvbnRlbnQoXG4gIC8vICAgY29udGVudElkOiBzdHJpbmcsXG4gIC8vICAgaGllcmFyY2h5VHlwZTogJ2FsbCcgfCAnbWluaW1hbCcgfCAnZGV0YWlsJyA9ICdkZXRhaWwnXG4gIC8vICAgKTogT2JzZXJ2YWJsZTxOc0NvbnRlbnQuSUNvbnRlbnQ+IHtcbiAgLy8gICAgIGxldCB1cmwgPSAnJ1xuICAvLyAgICAgY29uc3QgZm9yUHJldmlldyA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluY2x1ZGVzKCcvcHVibGljLycpIHx8IHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluY2x1ZGVzKCcmcHJldmlldz10cnVlJylcbiAgLy8gICAgICAgaWYgKCFmb3JQcmV2aWV3KSB7XG4gIC8vICAgICAgICAgdXJsID0gYC9hcGlzL3Byb3hpZXMvdjgvYWN0aW9uL2NvbnRlbnQvdjMvaGllcmFyY2h5LyR7Y29udGVudElkfT9oaWVyYXJjaHlUeXBlPSR7aGllcmFyY2h5VHlwZX1gXG4gIC8vICAgICAgIH0gZWxzZSB7XG4gIC8vICAgICAgICAgdXJsID0gYC9hcGkvY291cnNlL3YxL2hpZXJhcmNoeS8ke2NvbnRlbnRJZH0/aGllcmFyY2h5VHlwZT0ke2hpZXJhcmNoeVR5cGV9YFxuICAvLyAgICAgICB9XG4gIC8vICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE5zQ29udGVudC5JQ29udGVudD4odXJsKVxuICAvLyAgIH1cblxuICBmZXRjaENvbnRlbnQoaWQ6IHN0cmluZywgdHlwZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TnNDb250ZW50LklDb250ZW50PihgL2FwaXMvcHJveGllcy92OC9hY3Rpb24vY29udGVudC92My9oaWVyYXJjaHkvJHtpZH0/bW9kZT0ke3R5cGV9YClcbiAgfVxuXG4gIHVwZGF0ZUNvbnRlbnRIYXNoTWFwRm9yQXNzZXNzdGVudChjb250ZW50SWQ6IHN0cmluZywgY29udGVudFByb2dyZXNzOiBhbnkpIHtcbiAgICBcbiAgICBpZiAodGhpcy50b2NTdmMuaGFzaG1hcFtjb250ZW50SWRdICYmXG4gICAgICAoIXRoaXMudG9jU3ZjLmhhc2htYXBbY29udGVudElkXVsnY29tcGxldGlvblN0YXR1cyddIHx8IHRoaXMudG9jU3ZjLmhhc2htYXBbY29udGVudElkXVsnY29tcGxldGlvblN0YXR1cyddIDwgMikpIHtcbiAgICAgIHRoaXMudG9jU3ZjLmhhc2htYXBbY29udGVudElkXVsnY29tcGxldGlvblBlcmNlbnRhZ2UnXSA9IGNvbnRlbnRQcm9ncmVzcy5jb21wbGV0aW9uUGVyY2VudGFnZVxuICAgICAgdGhpcy50b2NTdmMuaGFzaG1hcFtjb250ZW50SWRdWydjb21wbGV0aW9uU3RhdHVzJ10gPSBOdW1iZXIoY29udGVudFByb2dyZXNzLnN0YXR1cykgfHwgMFxuICAgICAgdGhpcy50b2NTdmMuaGFzaG1hcCA9IHsgLi4udGhpcy50b2NTdmMuaGFzaG1hcCB9XG4gICAgICBcbiAgICAgIC8vIFRyaWdnZXIgbWlsZXN0b25lIGxvY2sgcmVjb21wdXRhdGlvbiAtIGl0IHdpbGwgZW1pdCBoYXNobWFwVXBkYXRlZCB3aXRoIGJvdGggcHJvZ3Jlc3MgYW5kIGxvY2sgY2hhbmdlc1xuICAgICAgaWYgKHRoaXMudG9jU3ZjLnRyaWdnZXJNaWxlc3RvbmVMb2NrVXBkYXRlKSB7XG4gICAgICAgIHRoaXMudG9jU3ZjLnRyaWdnZXJNaWxlc3RvbmVMb2NrVXBkYXRlKClcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gRW1pdCB0byB0cmlnZ2VyIHZpZXdlciBjb21wb25lbnQgcmVmcmVzaCBmb3IgTGVhcm5pbmcgUGF0aHdheXNcbiAgICAgIHRoaXMubWFya0FzQ29tcGxldGVTdWJqZWN0Lm5leHQodHJ1ZSlcbiAgICB9XG4gIH1cblxuICBnZXRGb3JtQnlJZChmb3JtSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuQVBJX0VORFBPSU5UUy5HRVRfRk9STV9CWUlEKGZvcm1JZCkpXG4gIH1cblxuICBzdWJtaXRGb3JtKGZvcm1EYXRhOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55Pih0aGlzLkFQSV9FTkRQT0lOVFMuU1VCTUlUX0ZPUk0sIGZvcm1EYXRhKVxuICB9XG5cbiAgcmVhbFRpbWVQcm9ncmVzc1VwZGF0ZUZvclByZUFzc2Vzc21lbnQoY29udGVudElkOiBzdHJpbmcsIHJlcXVlc3Q6IGFueSkge1xuICAgIGxldCByZXE6IGFueVxuICAgIGlmICh0aGlzLmNvbmZpZ3NlcnZpY2UudXNlclByb2ZpbGUpIHtcbiAgICAgIHJlcSA9IHtcbiAgICAgICAgcmVxdWVzdDoge1xuICAgICAgICAgIHVzZXJJZDogdGhpcy5jb25maWdzZXJ2aWNlLnVzZXJQcm9maWxlLnVzZXJJZCB8fCAnJyxcbiAgICAgICAgICBjb250ZW50czogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjb250ZW50SWQsXG4gICAgICAgICAgICAgIC8vIGJhdGNoSWQsXG4gICAgICAgICAgICAgIHN0YXR1czogdGhpcy5nZXRTdGF0dXMocmVxdWVzdC5jdXJyZW50LCByZXF1ZXN0Lm1heF9zaXplLCByZXF1ZXN0Lm1pbWVfdHlwZSksXG4gICAgICAgICAgICAgIC8vIGNvdXJzZUlkOiBjb2xsZWN0aW9uSWQsXG4gICAgICAgICAgICAgIGxhc3RBY2Nlc3NUaW1lOiBkYXlqcyhuZXcgRGF0ZSgpKS5mb3JtYXQoJ1lZWVktTU0tREQgSEg6bW06c3M6U1NTWlonKSxcbiAgICAgICAgICAgICAgcHJvZ3Jlc3NkZXRhaWxzOiB7XG4gICAgICAgICAgICAgICAgbWF4X3NpemU6IHJlcXVlc3QubWF4X3NpemUsXG4gICAgICAgICAgICAgICAgY3VycmVudDogcmVxdWVzdC5jdXJyZW50LFxuICAgICAgICAgICAgICAgIG1pbWVUeXBlOiByZXF1ZXN0Lm1pbWVfdHlwZSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgY29tcGxldGlvblBlcmNlbnRhZ2U6IHRoaXMuY2FsY3VsYXRlUGVyY2VudChyZXF1ZXN0LmN1cnJlbnQsIHJlcXVlc3QubWF4X3NpemUsIHJlcXVlc3QubWltZV90eXBlKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIH1cbiAgICAgIC8vIGlmICh0aGlzLmNvbmZpZ3NlcnZpY2UuY3N0b2tlbiAhPT0gJycpIHtcbiAgICAgIC8vICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpXG4gICAgICAvLyAgIC5zZXQoJ2NzdG9rZW4nLCB0aGlzLmNvbmZpZ3NlcnZpY2UuY3N0b2tlbilcblxuICAgICAgLy8gICB0aGlzLmh0dHBcbiAgICAgIC8vICAgLnBhdGNoKGAke3RoaXMuQVBJX0VORFBPSU5UUy5QUk9HUkVTU19VUERBVEV9LyR7Y29udGVudElkfWAsIHsgaGVhZGVycyB9ICwgcmVxKVxuICAgICAgLy8gICAuc3Vic2NyaWJlKG5vb3AsIG5vb3ApXG4gICAgICAvLyB9IGVsc2Uge1xuICAgICAgLy8gICB0aGlzLmh0dHBcbiAgICAgIC8vICAgLnBhdGNoKGAke3RoaXMuQVBJX0VORFBPSU5UUy5QUk9HUkVTU19VUERBVEV9LyR7Y29udGVudElkfWAsIHJlcSlcbiAgICAgIC8vICAgLnN1YnNjcmliZShub29wLCBub29wKVxuICAgICAgLy8gfVxuICAgICAgLy8gdGhpcy5odHRwXG4gICAgICAvLyAgIC5wYXRjaChgJHt0aGlzLkFQSV9FTkRQT0lOVFMuUFJPR1JFU1NfVVBEQVRFfS8ke2NvbnRlbnRJZH1gLCByZXEpXG4gICAgICAvLyAgIC5zdWJzY3JpYmUobm9vcCwgbm9vcClcbiAgICAgIC8vY29uc3QgY29udGVudElkTmV3PSByZXEucmVxdWVzdC5jb250ZW50c1swXS5jb250ZW50SWRcbiAgICAgIC8vIGNvbnN0IHVwZGF0ZWRDb21wbGV0aW9uUGVyY2VudGFnZSA9IHJlcS5yZXF1ZXN0LmNvbnRlbnRzWzBdLmNvbXBsZXRpb25QZXJjZW50YWdlXG4gICAgICAvLyBjb25zdCB1cGRhdGVkU3RhdHVzID0gcmVxLnJlcXVlc3QuY29udGVudHNbMF0uc3RhdHVzXG5cbiAgICAgIC8vIC8vIENsb25lIHRoZSBpbm5lciBvYmplY3QgYW5kIHVwZGF0ZVxuICAgICAgLy8gY29uc3QgZXhpc3RpbmdDb250ZW50ID0gdGhpcy50b2NTdmMuaGFzaG1hcFtjb250ZW50SWROZXddIHx8IHt9XG5cbiAgICAgIC8vIHRoaXMudG9jU3ZjLmhhc2htYXAgPSB7XG4gICAgICAvLyAgIC4uLnRoaXMudG9jU3ZjLmhhc2htYXAsXG4gICAgICAvLyAgIFtjb250ZW50SWROZXddOiB7XG4gICAgICAvLyAgICAgLi4uZXhpc3RpbmdDb250ZW50LFxuICAgICAgLy8gICAgIGNvbXBsZXRpb25QZXJjZW50YWdlOiB1cGRhdGVkQ29tcGxldGlvblBlcmNlbnRhZ2UsXG4gICAgICAvLyAgICAgY29tcGxldGlvblN0YXR1czogdXBkYXRlZFN0YXR1c1xuICAgICAgLy8gICB9XG4gICAgICAvLyB9XG4gICAgICAvLyBjb25zb2xlLmxvZygncmVxJywgSlNPTi5zdHJpbmdpZnkocmVxKSlcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdyZXEnLCByZXEpXG5cbiAgICAgIGNvbnN0IHJlc291cmNlU3RhdHVzID0gdGhpcy5nZXRQcmVBc3Nlc3NtZW50UmVzb3VyY2VTdGF0dXMoY29udGVudElkKVxuICAgICAgaWYgKHJlc291cmNlU3RhdHVzIDwgMikge1xuICAgICAgICB0aGlzLmh0dHBcbiAgICAgICAgICAucGF0Y2goYCR7dGhpcy5BUElfRU5EUE9JTlRTLlBSRV9BU1NFU1NNRU5UX1NUQVRFX1VQREFURX1gLCByZXEpXG4gICAgICAgICAgLnN1YnNjcmliZShub29wLCBub29wKVxuICAgICAgfVxuICAgICAgXG4gICAgICBpZiAodGhpcy50b2NTdmMuaGFzaG1hcFtjb250ZW50SWRdICYmXG4gICAgICAgICghdGhpcy50b2NTdmMuaGFzaG1hcFtjb250ZW50SWRdWydjb21wbGV0aW9uU3RhdHVzJ10gfHwgdGhpcy50b2NTdmMuaGFzaG1hcFtjb250ZW50SWRdWydjb21wbGV0aW9uU3RhdHVzJ10gPCAyKSkge1xuICAgICAgICB0aGlzLnRvY1N2Yy5oYXNobWFwW2NvbnRlbnRJZF1bJ2NvbXBsZXRpb25QZXJjZW50YWdlJ10gPSByZXEucmVxdWVzdC5jb250ZW50c1swXS5jb21wbGV0aW9uUGVyY2VudGFnZVxuICAgICAgICB0aGlzLnRvY1N2Yy5oYXNobWFwW2NvbnRlbnRJZF1bJ2NvbXBsZXRpb25TdGF0dXMnXSA9IE51bWJlcihyZXEucmVxdWVzdC5jb250ZW50c1swXS5zdGF0dXMpIHx8IDBcbiAgICAgICAgdGhpcy50b2NTdmMuaGFzaG1hcFtjb250ZW50SWRdWydwYXJlbnQnXSA9IHJlcS5yZXF1ZXN0LmNvbnRlbnRzWzBdLmNvdXJzZUlkXG4gICAgICAgIHRoaXMudG9jU3ZjLmhhc2htYXBbY29udGVudElkXVsncHJvZ3Jlc3MnXSA9IHJlcS5yZXF1ZXN0LmNvbnRlbnRzWzBdLnByb2dyZXNzZGV0YWlsc1xuICAgICAgICB0aGlzLnRvY1N2Yy5oYXNobWFwID0geyAuLi50aGlzLnRvY1N2Yy5oYXNobWFwIH1cbiAgICAgICAgXG4gICAgICAgIC8vIFRyaWdnZXIgbWlsZXN0b25lIGxvY2sgcmVjb21wdXRhdGlvbiAtIGl0IHdpbGwgZW1pdCBoYXNobWFwVXBkYXRlZCB3aXRoIGJvdGggcHJvZ3Jlc3MgYW5kIGxvY2sgY2hhbmdlc1xuICAgICAgICBpZiAodGhpcy50b2NTdmMudHJpZ2dlck1pbGVzdG9uZUxvY2tVcGRhdGUpIHtcbiAgICAgICAgICB0aGlzLnRvY1N2Yy50cmlnZ2VyTWlsZXN0b25lTG9ja1VwZGF0ZSgpXG4gICAgICAgIH1cbiAgICAgICAgICAvLyBFbWl0IHRvIHRyaWdnZXIgdmlld2VyIGNvbXBvbmVudCByZWZyZXNoIGZvciBMZWFybmluZyBQYXRod2F5c1xuICAgICAgICAgIHRoaXMubWFya0FzQ29tcGxldGVTdWJqZWN0Lm5leHQodHJ1ZSlcbiAgICAgIH1cblxuICAgICAgLy8gY29uc29sZS5sb2coJ1VwZGF0ZWQgaGFzaG1hcDonLCB0aGlzLnRvY1N2Yy5oYXNobWFwKVxuXG4gICAgICAvLyBjb25zb2xlLmxvZygndGhpcy50b2NTdmMuaGFzaG1hcC0tLScsIHRoaXMudG9jU3ZjLmhhc2htYXApXG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcSA9IHt9XG4gICAgICAvLyBkbyBub3RoaW5nXG4gICAgfVxuICB9XG5cbiAgcmVhbFRpbWVQcm9ncmVzc1VwZGF0ZUZvclByZUFzc2Vzc21lbnRRdWl6KGNvbnRlbnRJZDogc3RyaW5nLCBzdGF0dXM/OiBudW1iZXIsIG1pbWVUeXBlPzogc3RyaW5nKSB7XG4gICAgbGV0IHJlcTogYW55XG4gICAgaWYgKHRoaXMuY29uZmlnc2VydmljZS51c2VyUHJvZmlsZSkge1xuICAgICAgcmVxID0ge1xuICAgICAgICByZXF1ZXN0OiB7XG4gICAgICAgICAgLy91c2VySWQ6IHRoaXMuY29uZmlnc2VydmljZS51c2VyUHJvZmlsZS51c2VySWQgfHwgJycsXG4gICAgICAgICAgY29udGVudHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgY29udGVudElkLFxuICAgICAgICAgICAgICAvLyBiYXRjaElkLFxuICAgICAgICAgICAgICBzdGF0dXM6IHN0YXR1cyB8fCAyLFxuICAgICAgICAgICAgICAvLyBjb3Vyc2VJZDogY29sbGVjdGlvbklkLFxuICAgICAgICAgICAgICBsYXN0QWNjZXNzVGltZTogZGF5anMobmV3IERhdGUoKSkuZm9ybWF0KCdZWVlZLU1NLUREIEhIOm1tOnNzOlNTU1paJyksXG4gICAgICAgICAgICAgIGNvbXBsZXRpb25QZXJjZW50YWdlOiBzdGF0dXMgPT09IDIgPyAxMDAuMCA6IDAsXG4gICAgICAgICAgICAgIHByb2dyZXNzZGV0YWlsczoge1xuICAgICAgICAgICAgICAgIFwibWltZVR5cGVcIjogbWltZVR5cGUgfHwgXCJhcHBsaWNhdGlvbi92bmQuc3VuYmlyZC5xdWVzdGlvbnNldFwiXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICB9XG4gICAgICBjb25zdCByZXNvdXJjZVN0YXR1cyA9IHRoaXMuZ2V0UHJlQXNzZXNzbWVudFJlc291cmNlU3RhdHVzKGNvbnRlbnRJZClcbiAgICAgIGlmIChyZXNvdXJjZVN0YXR1cyA8IDIpIHtcbiAgICAgICAgdGhpcy5odHRwXG4gICAgICAgICAgLnBhdGNoKGAke3RoaXMuQVBJX0VORFBPSU5UUy5QUkVfQVNTRVNTTUVOVF9TVEFURV9VUERBVEV9YCwgcmVxKVxuICAgICAgICAgIC5zdWJzY3JpYmUobm9vcCwgbm9vcClcbiAgICAgIH1cbiAgICAgIFxuICAgICAgaWYgKHRoaXMudG9jU3ZjLmhhc2htYXAgJiYgdGhpcy50b2NTdmMuaGFzaG1hcFtjb250ZW50SWRdICYmIHJlcS5yZXF1ZXN0LmNvbnRlbnRzWzBdKSB7XG4gICAgICAgIC8vIFVwZGF0ZSBoYXNobWFwIGlmIHN0YXR1cyBjaGFuZ2VkXG4gICAgICAgIGlmICh0aGlzLnRvY1N2Yy5oYXNobWFwW2NvbnRlbnRJZF0gJiZcbiAgICAgICAgICAoIXRoaXMudG9jU3ZjLmhhc2htYXBbY29udGVudElkXVsnY29tcGxldGlvblN0YXR1cyddIHx8IHRoaXMudG9jU3ZjLmhhc2htYXBbY29udGVudElkXVsnY29tcGxldGlvblN0YXR1cyddIDwgMikpIHtcbiAgICAgICAgICB0aGlzLnRvY1N2Yy5oYXNobWFwW2NvbnRlbnRJZF1bJ2NvbXBsZXRpb25QZXJjZW50YWdlJ10gPSByZXEucmVxdWVzdC5jb250ZW50c1swXS5jb21wbGV0aW9uUGVyY2VudGFnZVxuICAgICAgICAgIHRoaXMudG9jU3ZjLmhhc2htYXBbY29udGVudElkXVsnY29tcGxldGlvblN0YXR1cyddID0gTnVtYmVyKHJlcS5yZXF1ZXN0LmNvbnRlbnRzWzBdLnN0YXR1cykgfHwgMFxuICAgICAgICAgIHRoaXMudG9jU3ZjLmhhc2htYXAgPSB7IC4uLnRoaXMudG9jU3ZjLmhhc2htYXAgfVxuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAvLyBBTFdBWVMgdHJpZ2dlciBtaWxlc3RvbmUgbG9jayByZWNvbXB1dGF0aW9uIHdoZW4gcHJlLWFzc2Vzc21lbnQgY29tcGxldGVzXG4gICAgICAgIC8vIFRoaXMgZW5zdXJlcyBtaWxlc3RvbmUgMSB1bmxvY2tzIGltbWVkaWF0ZWx5IGFmdGVyIHByZS1hc3Nlc3NtZW50IGNvbXBsZXRpb25cbiAgICAgICAgaWYgKHRoaXMudG9jU3ZjLnRyaWdnZXJNaWxlc3RvbmVMb2NrVXBkYXRlKSB7XG4gICAgICAgICAgdGhpcy50b2NTdmMudHJpZ2dlck1pbGVzdG9uZUxvY2tVcGRhdGUoKVxuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAvLyBFbWl0IG1hcmtBc0NvbXBsZXRlU3ViamVjdCB0byB0cmlnZ2VyIHZpZXdlciBjb21wb25lbnQgdG8gcmVmcmVzaCBlbnJvbGxtZW50IGFuZCBwcm9ncmVzc1xuICAgICAgICAvLyBUaGlzIGlzIGNyaXRpY2FsIGZvciBMZWFybmluZyBQYXRod2F5cyB0byB1bmxvY2sgbWlsZXN0b25lcyBpbW1lZGlhdGVseVxuICAgICAgICB0aGlzLm1hcmtBc0NvbXBsZXRlU3ViamVjdC5uZXh0KHRydWUpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcSA9IHt9XG4gICAgICAvLyBkbyBub3RoaW5nXG4gICAgfVxuICB9XG5cbiAgZ2V0UHJlQXNzZXNzbWVudFJlc291cmNlU3RhdHVzKHJlc291cmNlSWQ6IHN0cmluZykge1xuICAgIGlmICh0aGlzLnRvY1N2YyAmJiB0aGlzLnRvY1N2Yy5oYXNobWFwICYmIHRoaXMudG9jU3ZjLmhhc2htYXBbcmVzb3VyY2VJZF0pIHtcbiAgICAgIHJldHVybiB0aGlzLnRvY1N2Yy5oYXNobWFwW3Jlc291cmNlSWRdWydjb21wbGV0aW9uU3RhdHVzJ10gfHwgMVxuICAgIH1cbiAgICByZXR1cm4gMVxuICB9XG5cblxufVxuIl19
@@ -63,9 +63,11 @@ export * from './lib/_collection/_common/content-toc/app-toc-about/app-toc-about
63
63
  export * from './lib/_collection/_common/content-toc/app-toc-content/app-toc-content.component';
64
64
  export * from './lib/_collection/_common/content-toc/app-toc-teachers-notes/app-toc-teachers-notes.component';
65
65
  export * from './lib/_collection/_common/content-toc/app-toc-batch-assignments/app-toc-batch-assignments.component';
66
+ export * from './lib/_services/widget-content.service';
67
+ export * from './lib/models/discussion-forum.model';
66
68
  // Karma Points module
67
69
  export * from './lib/_collection/_common/content-toc/karma-points/karma-points.module';
68
70
  export * from './lib/_collection/_common/content-toc/karma-points/karma-points.component';
69
71
  export * from './lib/_collection/_common/toc-kpi-values/toc-kpi-values.module';
70
72
  export * from './lib/_collection/_common/toc-kpi-values/toc-kpi-values.component';
71
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnJhcnkvc3VuYmlyZC1jYi90b2Mvc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjO0FBQ2QsY0FBYywwQkFBMEIsQ0FBQTtBQUV4QyxtRkFBbUY7QUFDbkYsd0RBQXdEO0FBRXhELFdBQVc7QUFDWCxjQUFjLGdDQUFnQyxDQUFBO0FBQzlDLGNBQWMsbUNBQW1DLENBQUE7QUFDakQsY0FBYywrQkFBK0IsQ0FBQTtBQUM3QyxjQUFjLG1DQUFtQyxDQUFBO0FBQ2pELGNBQWMsc0NBQXNDLENBQUE7QUFDcEQsY0FBYyw4QkFBOEIsQ0FBQTtBQUM1QyxjQUFjLGtDQUFrQyxDQUFBO0FBQ2hELGNBQWMsb0NBQW9DLENBQUE7QUFDbEQsU0FBUztBQUNULGNBQWMsNEJBQTRCLENBQUE7QUFDMUMsY0FBYyxzQ0FBc0MsQ0FBQTtBQUNwRCxjQUFjLDZCQUE2QixDQUFBO0FBQzNDLGNBQWMsMkJBQTJCLENBQUE7QUFFekMsWUFBWTtBQUNaLGNBQWMsMENBQTBDLENBQUE7QUFDeEQsY0FBYywrQ0FBK0MsQ0FBQTtBQUM3RCxjQUFjLDJEQUEyRCxDQUFBO0FBQ3pFLGNBQWMsdURBQXVELENBQUE7QUFDckUsY0FBYyxxREFBcUQsQ0FBQTtBQUNuRSxjQUFjLHlDQUF5QyxDQUFBO0FBQ3ZELGNBQWMsMENBQTBDLENBQUE7QUFDeEQsY0FBYyxzREFBc0QsQ0FBQTtBQUVwRSxhQUFhO0FBQ2IsY0FBYywwREFBMEQsQ0FBQTtBQUN4RSxjQUFjLDREQUE0RCxDQUFBO0FBQzFFLGNBQWMsc0VBQXNFLENBQUE7QUFDcEYsY0FBYyxrRUFBa0UsQ0FBQTtBQUNoRixjQUFjLGtGQUFrRixDQUFBO0FBQ2hHLGNBQWMsOERBQThELENBQUE7QUFDNUUsY0FBYyw0RUFBNEUsQ0FBQTtBQUMxRixjQUFjLHNFQUFzRSxDQUFBO0FBQ3BGLGNBQWMsOERBQThELENBQUE7QUFDNUUsY0FBYyxvRUFBb0UsQ0FBQTtBQUNsRixjQUFjLDREQUE0RCxDQUFBO0FBQzFFLGNBQWMsZ0VBQWdFLENBQUE7QUFDOUUsY0FBYyxrRkFBa0YsQ0FBQTtBQUNoRyxjQUFjLG9FQUFvRSxDQUFBO0FBQ2xGLGNBQWMsc0VBQXNFLENBQUE7QUFDcEYsY0FBYyxvRUFBb0UsQ0FBQTtBQUNsRixjQUFjLDhFQUE4RSxDQUFBO0FBQzVGLGNBQWMsMEVBQTBFLENBQUE7QUFDeEYsY0FBYyxrRUFBa0UsQ0FBQTtBQUNoRixjQUFjLHNFQUFzRSxDQUFBO0FBQ3BGLGNBQWMsb0VBQW9FLENBQUE7QUFFbEYsbUJBQW1CO0FBQ25CLGNBQWMsa0RBQWtELENBQUE7QUFHaEUsbUJBQW1CO0FBQ25CLGNBQWMsa0NBQWtDLENBQUE7QUFDaEQsY0FBYywrQ0FBK0MsQ0FBQTtBQUU3RCxzQkFBc0I7QUFDdEIsY0FBYywwREFBMEQsQ0FBQTtBQUN4RSxjQUFjLDZEQUE2RCxDQUFBO0FBQzNFLGNBQWMsaUZBQWlGLENBQUE7QUFDL0YsY0FBYyw2RUFBNkUsQ0FBQTtBQUMzRixjQUFjLGlGQUFpRixDQUFBO0FBQy9GLGNBQWMsK0ZBQStGLENBQUE7QUFDN0csY0FBYyxxR0FBcUcsQ0FBQTtBQUVuSCxzQkFBc0I7QUFDdEIsY0FBYyx3RUFBd0UsQ0FBQTtBQUN0RixjQUFjLDJFQUEyRSxDQUFBO0FBQ3pGLGNBQWMsZ0VBQWdFLENBQUE7QUFDOUUsY0FBYyxtRUFBbUUsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2YgdG9jXG4gKi9cblxuLy8gTWFpbiBtb2R1bGVcbmV4cG9ydCAqIGZyb20gJy4vbGliL2FwcC10b2MtbGliLm1vZHVsZSdcblxuLy8gUm91dGluZyBtb2R1bGUgKE9QVElPTkFMIC0gb25seSBpbXBvcnQgaWYgeW91IHdhbnQgdG8gdXNlIHByZS1jb25maWd1cmVkIHJvdXRlcylcbi8vIFlvdSBjYW4gY29uZmlndXJlIHJvdXRpbmcgaW4geW91ciBhcHBsaWNhdGlvbiBpbnN0ZWFkXG5cbi8vIFNlcnZpY2VzXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9hcHAtdG9jLnNlcnZpY2UnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9hcHAtdG9jLXYyLnNlcnZpY2UnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9hY3Rpb24uc2VydmljZSdcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL2xvYWQtY2hlY2suc2VydmljZSdcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL3Jlc2V0LXJhdGluZ3Muc2VydmljZSdcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL3RpbWVyLnNlcnZpY2UnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy90aXRsZS10YWcuc2VydmljZSdcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL3ZpZXdlci11dGlsLnNlcnZpY2UnXG4vLyBNb2RlbHNcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscy9hcHAtdG9jLm1vZGVsJ1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kZWxzL2FwcC10b2MtYW5hbHl0aWNzLm1vZGVsJ1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kZWxzL21ldGEtdGFnLm1vZGVsJ1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kZWxzL3JhdGluZy5tb2RlbCdcblxuLy8gUmVzb2x2ZXJzXG5leHBvcnQgKiBmcm9tICcuL2xpYi9yZXNvbHZlcnMvYXBwLXRvYy1yZXNvbHZlci5zZXJ2aWNlJ1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcmVzb2x2ZXJzL2FwcC10b2MtY2lvcy1yZXNvbHZlci5zZXJ2aWNlJ1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcmVzb2x2ZXJzL2FwcC10b2MtY2lvcy11c2VyLWVucm9sbC1yZXNvbHZlci5zZXJ2aWNlJ1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcmVzb2x2ZXJzL2FwcC10b2MtY29udGVudC1yZWFkLXJlc29sdmVyLnNlcnZpY2UnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9yZXNvbHZlcnMvYXBwLXRvYy1leHQtcHVibGljLXJlc29sdmVyLnNlcnZpY2UnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9yZXNvbHZlcnMvY29uZmlnLXJlc29sdmVyLnNlcnZpY2UnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9yZXNvbHZlcnMvcHJvZmlsZS1yZXNvbHZlci5zZXJ2aWNlJ1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcmVzb2x2ZXJzL3Jlc3RyaWN0ZWQtZmVhdHVyZXMtcmVzb2x2ZXIuc2VydmljZSdcblxuLy8gQ29tcG9uZW50c1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9hcHAtdG9jLWJhbm5lci9hcHAtdG9jLWJhbm5lci5jb21wb25lbnQnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2FwcC10b2MtY29ob3J0cy9hcHAtdG9jLWNvaG9ydHMuY29tcG9uZW50J1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9hcHAtdG9jLWNvbnRlbnQtY2FyZC9hcHAtdG9jLWNvbnRlbnQtY2FyZC5jb21wb25lbnQnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2FwcC10b2MtZGlzY3Vzc2lvbi9hcHAtdG9jLWRpc2N1c3Npb24uY29tcG9uZW50J1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9hcHAtdG9jLWRpYWxvZy1pbnRyby12aWRlby9hcHAtdG9jLWRpYWxvZy1pbnRyby12aWRlby5jb21wb25lbnQnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2FwcC10b2Mtb3ZlcnZpZXcvYXBwLXRvYy1vdmVydmlldy5jb21wb25lbnQnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2FwcC10b2MtYW5hbHl0aWNzLXRpbGVzL2FwcC10b2MtYW5hbHl0aWNzLXRpbGVzLmNvbXBvbmVudCdcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvYXBwLXRvYy1zZXNzaW9uLWNhcmQvYXBwLXRvYy1zZXNzaW9uLWNhcmQuY29tcG9uZW50J1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9hcHAtdG9jLXNlc3Npb25zL2FwcC10b2Mtc2Vzc2lvbnMuY29tcG9uZW50J1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9hcHAtdG9jLXNpbmdsZS1wYWdlL2FwcC10b2Mtc2luZ2xlLXBhZ2UuY29tcG9uZW50J1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9hcHAtdG9jLWhvbWUtdjIvYXBwLXRvYy1ob21lLXYyLmNvbXBvbmVudCdcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvYXBwLXRvYy1jaW9zLWhvbWUvYXBwLXRvYy1jaW9zLWhvbWUuY29tcG9uZW50J1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9rbm93bGVkZ2UtYXJ0aWZhY3QtZGV0YWlscy9rbm93bGVkZ2UtYXJ0aWZhY3QtZGV0YWlscy5jb21wb25lbnQnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2NyZWF0ZS1iYXRjaC1kaWFsb2cvY3JlYXRlLWJhdGNoLWRpYWxvZy5jb21wb25lbnQnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2Vucm9sbC1xdWVzdGlvbm5haXJlL2Vucm9sbC1xdWVzdGlvbm5haXJlLmNvbXBvbmVudCdcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZW5yb2xsLXByb2ZpbGUtZm9ybS9lbnJvbGwtcHJvZmlsZS1mb3JtLmNvbXBvbmVudCdcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZW5yb2xsLWxhbmd1YWdlLWRpYWxvZ3VlL2Vucm9sbC1sYW5ndWFnZS1kaWFsb2d1ZS5jb21wb25lbnQnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2NvbXBsZXRpb24tc3VydmV5LWZvcm0vY29tcGxldGlvbi1zdXJ2ZXktZm9ybS5jb21wb25lbnQnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3B1YmxpYy1zdXJ2ZXktZm9ybS9wdWJsaWMtc3VydmV5LWZvcm0uY29tcG9uZW50J1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9zdXJ2ZXktZm9ybS1xdWVzdGlvbi9zdXJ2ZXktZm9ybS1xdWVzdGlvbi5jb21wb25lbnQnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3N1cnZleS1mb3JtLXNlY3Rpb24vc3VydmV5LWZvcm0tc2VjdGlvbi5jb21wb25lbnQnXG5cbi8vIFJvdXRlIENvbXBvbmVudHNcbmV4cG9ydCAqIGZyb20gJy4vbGliL3JvdXRlcy9hcHAtdG9jLWhvbWUvYXBwLXRvYy1ob21lLmNvbXBvbmVudCdcblxuXG4vLyBTaGFyZSBUT0MgbW9kdWxlXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zaGFyZS10b2Mvc2hhcmUtdG9jLm1vZHVsZSdcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NoYXJlLXRvYy9zaGFyZS10b2Mvc2hhcmUtdG9jLmNvbXBvbmVudCdcblxuLy8gQ29udGVudCBUT0MgbW9kdWxlc1xuZXhwb3J0ICogZnJvbSAnLi9saWIvX2NvbGxlY3Rpb24vX2NvbW1vbi9jb250ZW50LXRvYy9jb250ZW50LXRvYy5tb2R1bGUnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9fY29sbGVjdGlvbi9fY29tbW9uL2NvbnRlbnQtdG9jL2NvbnRlbnQtdG9jLmNvbXBvbmVudCdcbmV4cG9ydCAqIGZyb20gJy4vbGliL19jb2xsZWN0aW9uL19jb21tb24vY29udGVudC10b2MvcmV2aWV3cy1jb250ZW50L3Jldmlld3MtY29udGVudC5jb21wb25lbnQnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9fY29sbGVjdGlvbi9fY29tbW9uL2NvbnRlbnQtdG9jL2FwcC10b2MtYWJvdXQvYXBwLXRvYy1hYm91dC5jb21wb25lbnQnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9fY29sbGVjdGlvbi9fY29tbW9uL2NvbnRlbnQtdG9jL2FwcC10b2MtY29udGVudC9hcHAtdG9jLWNvbnRlbnQuY29tcG9uZW50J1xuZXhwb3J0ICogZnJvbSAnLi9saWIvX2NvbGxlY3Rpb24vX2NvbW1vbi9jb250ZW50LXRvYy9hcHAtdG9jLXRlYWNoZXJzLW5vdGVzL2FwcC10b2MtdGVhY2hlcnMtbm90ZXMuY29tcG9uZW50J1xuZXhwb3J0ICogZnJvbSAnLi9saWIvX2NvbGxlY3Rpb24vX2NvbW1vbi9jb250ZW50LXRvYy9hcHAtdG9jLWJhdGNoLWFzc2lnbm1lbnRzL2FwcC10b2MtYmF0Y2gtYXNzaWdubWVudHMuY29tcG9uZW50J1xuXG4vLyBLYXJtYSBQb2ludHMgbW9kdWxlXG5leHBvcnQgKiBmcm9tICcuL2xpYi9fY29sbGVjdGlvbi9fY29tbW9uL2NvbnRlbnQtdG9jL2thcm1hLXBvaW50cy9rYXJtYS1wb2ludHMubW9kdWxlJ1xuZXhwb3J0ICogZnJvbSAnLi9saWIvX2NvbGxlY3Rpb24vX2NvbW1vbi9jb250ZW50LXRvYy9rYXJtYS1wb2ludHMva2FybWEtcG9pbnRzLmNvbXBvbmVudCdcbmV4cG9ydCAqIGZyb20gJy4vbGliL19jb2xsZWN0aW9uL19jb21tb24vdG9jLWtwaS12YWx1ZXMvdG9jLWtwaS12YWx1ZXMubW9kdWxlJ1xuZXhwb3J0ICogZnJvbSAnLi9saWIvX2NvbGxlY3Rpb24vX2NvbW1vbi90b2Mta3BpLXZhbHVlcy90b2Mta3BpLXZhbHVlcy5jb21wb25lbnQnXG5cbiJdfQ==
73
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnJhcnkvc3VuYmlyZC1jYi90b2Mvc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjO0FBQ2QsY0FBYywwQkFBMEIsQ0FBQTtBQUV4QyxtRkFBbUY7QUFDbkYsd0RBQXdEO0FBRXhELFdBQVc7QUFDWCxjQUFjLGdDQUFnQyxDQUFBO0FBQzlDLGNBQWMsbUNBQW1DLENBQUE7QUFDakQsY0FBYywrQkFBK0IsQ0FBQTtBQUM3QyxjQUFjLG1DQUFtQyxDQUFBO0FBQ2pELGNBQWMsc0NBQXNDLENBQUE7QUFDcEQsY0FBYyw4QkFBOEIsQ0FBQTtBQUM1QyxjQUFjLGtDQUFrQyxDQUFBO0FBQ2hELGNBQWMsb0NBQW9DLENBQUE7QUFDbEQsU0FBUztBQUNULGNBQWMsNEJBQTRCLENBQUE7QUFDMUMsY0FBYyxzQ0FBc0MsQ0FBQTtBQUNwRCxjQUFjLDZCQUE2QixDQUFBO0FBQzNDLGNBQWMsMkJBQTJCLENBQUE7QUFFekMsWUFBWTtBQUNaLGNBQWMsMENBQTBDLENBQUE7QUFDeEQsY0FBYywrQ0FBK0MsQ0FBQTtBQUM3RCxjQUFjLDJEQUEyRCxDQUFBO0FBQ3pFLGNBQWMsdURBQXVELENBQUE7QUFDckUsY0FBYyxxREFBcUQsQ0FBQTtBQUNuRSxjQUFjLHlDQUF5QyxDQUFBO0FBQ3ZELGNBQWMsMENBQTBDLENBQUE7QUFDeEQsY0FBYyxzREFBc0QsQ0FBQTtBQUVwRSxhQUFhO0FBQ2IsY0FBYywwREFBMEQsQ0FBQTtBQUN4RSxjQUFjLDREQUE0RCxDQUFBO0FBQzFFLGNBQWMsc0VBQXNFLENBQUE7QUFDcEYsY0FBYyxrRUFBa0UsQ0FBQTtBQUNoRixjQUFjLGtGQUFrRixDQUFBO0FBQ2hHLGNBQWMsOERBQThELENBQUE7QUFDNUUsY0FBYyw0RUFBNEUsQ0FBQTtBQUMxRixjQUFjLHNFQUFzRSxDQUFBO0FBQ3BGLGNBQWMsOERBQThELENBQUE7QUFDNUUsY0FBYyxvRUFBb0UsQ0FBQTtBQUNsRixjQUFjLDREQUE0RCxDQUFBO0FBQzFFLGNBQWMsZ0VBQWdFLENBQUE7QUFDOUUsY0FBYyxrRkFBa0YsQ0FBQTtBQUNoRyxjQUFjLG9FQUFvRSxDQUFBO0FBQ2xGLGNBQWMsc0VBQXNFLENBQUE7QUFDcEYsY0FBYyxvRUFBb0UsQ0FBQTtBQUNsRixjQUFjLDhFQUE4RSxDQUFBO0FBQzVGLGNBQWMsMEVBQTBFLENBQUE7QUFDeEYsY0FBYyxrRUFBa0UsQ0FBQTtBQUNoRixjQUFjLHNFQUFzRSxDQUFBO0FBQ3BGLGNBQWMsb0VBQW9FLENBQUE7QUFFbEYsbUJBQW1CO0FBQ25CLGNBQWMsa0RBQWtELENBQUE7QUFHaEUsbUJBQW1CO0FBQ25CLGNBQWMsa0NBQWtDLENBQUE7QUFDaEQsY0FBYywrQ0FBK0MsQ0FBQTtBQUU3RCxzQkFBc0I7QUFDdEIsY0FBYywwREFBMEQsQ0FBQTtBQUN4RSxjQUFjLDZEQUE2RCxDQUFBO0FBQzNFLGNBQWMsaUZBQWlGLENBQUE7QUFDL0YsY0FBYyw2RUFBNkUsQ0FBQTtBQUMzRixjQUFjLGlGQUFpRixDQUFBO0FBQy9GLGNBQWMsK0ZBQStGLENBQUE7QUFDN0csY0FBYyxxR0FBcUcsQ0FBQTtBQUNuSCxjQUFjLHdDQUF3QyxDQUFBO0FBQ3RELGNBQWMscUNBQXFDLENBQUE7QUFFbkQsc0JBQXNCO0FBQ3RCLGNBQWMsd0VBQXdFLENBQUE7QUFDdEYsY0FBYywyRUFBMkUsQ0FBQTtBQUN6RixjQUFjLGdFQUFnRSxDQUFBO0FBQzlFLGNBQWMsbUVBQW1FLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogUHVibGljIEFQSSBTdXJmYWNlIG9mIHRvY1xuICovXG5cbi8vIE1haW4gbW9kdWxlXG5leHBvcnQgKiBmcm9tICcuL2xpYi9hcHAtdG9jLWxpYi5tb2R1bGUnXG5cbi8vIFJvdXRpbmcgbW9kdWxlIChPUFRJT05BTCAtIG9ubHkgaW1wb3J0IGlmIHlvdSB3YW50IHRvIHVzZSBwcmUtY29uZmlndXJlZCByb3V0ZXMpXG4vLyBZb3UgY2FuIGNvbmZpZ3VyZSByb3V0aW5nIGluIHlvdXIgYXBwbGljYXRpb24gaW5zdGVhZFxuXG4vLyBTZXJ2aWNlc1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvYXBwLXRvYy5zZXJ2aWNlJ1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvYXBwLXRvYy12Mi5zZXJ2aWNlJ1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvYWN0aW9uLnNlcnZpY2UnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9sb2FkLWNoZWNrLnNlcnZpY2UnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9yZXNldC1yYXRpbmdzLnNlcnZpY2UnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy90aW1lci5zZXJ2aWNlJ1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvdGl0bGUtdGFnLnNlcnZpY2UnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy92aWV3ZXItdXRpbC5zZXJ2aWNlJ1xuLy8gTW9kZWxzXG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RlbHMvYXBwLXRvYy5tb2RlbCdcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscy9hcHAtdG9jLWFuYWx5dGljcy5tb2RlbCdcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscy9tZXRhLXRhZy5tb2RlbCdcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscy9yYXRpbmcubW9kZWwnXG5cbi8vIFJlc29sdmVyc1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcmVzb2x2ZXJzL2FwcC10b2MtcmVzb2x2ZXIuc2VydmljZSdcbmV4cG9ydCAqIGZyb20gJy4vbGliL3Jlc29sdmVycy9hcHAtdG9jLWNpb3MtcmVzb2x2ZXIuc2VydmljZSdcbmV4cG9ydCAqIGZyb20gJy4vbGliL3Jlc29sdmVycy9hcHAtdG9jLWNpb3MtdXNlci1lbnJvbGwtcmVzb2x2ZXIuc2VydmljZSdcbmV4cG9ydCAqIGZyb20gJy4vbGliL3Jlc29sdmVycy9hcHAtdG9jLWNvbnRlbnQtcmVhZC1yZXNvbHZlci5zZXJ2aWNlJ1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcmVzb2x2ZXJzL2FwcC10b2MtZXh0LXB1YmxpYy1yZXNvbHZlci5zZXJ2aWNlJ1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcmVzb2x2ZXJzL2NvbmZpZy1yZXNvbHZlci5zZXJ2aWNlJ1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcmVzb2x2ZXJzL3Byb2ZpbGUtcmVzb2x2ZXIuc2VydmljZSdcbmV4cG9ydCAqIGZyb20gJy4vbGliL3Jlc29sdmVycy9yZXN0cmljdGVkLWZlYXR1cmVzLXJlc29sdmVyLnNlcnZpY2UnXG5cbi8vIENvbXBvbmVudHNcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvYXBwLXRvYy1iYW5uZXIvYXBwLXRvYy1iYW5uZXIuY29tcG9uZW50J1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9hcHAtdG9jLWNvaG9ydHMvYXBwLXRvYy1jb2hvcnRzLmNvbXBvbmVudCdcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvYXBwLXRvYy1jb250ZW50LWNhcmQvYXBwLXRvYy1jb250ZW50LWNhcmQuY29tcG9uZW50J1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9hcHAtdG9jLWRpc2N1c3Npb24vYXBwLXRvYy1kaXNjdXNzaW9uLmNvbXBvbmVudCdcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvYXBwLXRvYy1kaWFsb2ctaW50cm8tdmlkZW8vYXBwLXRvYy1kaWFsb2ctaW50cm8tdmlkZW8uY29tcG9uZW50J1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9hcHAtdG9jLW92ZXJ2aWV3L2FwcC10b2Mtb3ZlcnZpZXcuY29tcG9uZW50J1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9hcHAtdG9jLWFuYWx5dGljcy10aWxlcy9hcHAtdG9jLWFuYWx5dGljcy10aWxlcy5jb21wb25lbnQnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2FwcC10b2Mtc2Vzc2lvbi1jYXJkL2FwcC10b2Mtc2Vzc2lvbi1jYXJkLmNvbXBvbmVudCdcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvYXBwLXRvYy1zZXNzaW9ucy9hcHAtdG9jLXNlc3Npb25zLmNvbXBvbmVudCdcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvYXBwLXRvYy1zaW5nbGUtcGFnZS9hcHAtdG9jLXNpbmdsZS1wYWdlLmNvbXBvbmVudCdcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvYXBwLXRvYy1ob21lLXYyL2FwcC10b2MtaG9tZS12Mi5jb21wb25lbnQnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2FwcC10b2MtY2lvcy1ob21lL2FwcC10b2MtY2lvcy1ob21lLmNvbXBvbmVudCdcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMva25vd2xlZGdlLWFydGlmYWN0LWRldGFpbHMva25vd2xlZGdlLWFydGlmYWN0LWRldGFpbHMuY29tcG9uZW50J1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9jcmVhdGUtYmF0Y2gtZGlhbG9nL2NyZWF0ZS1iYXRjaC1kaWFsb2cuY29tcG9uZW50J1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9lbnJvbGwtcXVlc3Rpb25uYWlyZS9lbnJvbGwtcXVlc3Rpb25uYWlyZS5jb21wb25lbnQnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2Vucm9sbC1wcm9maWxlLWZvcm0vZW5yb2xsLXByb2ZpbGUtZm9ybS5jb21wb25lbnQnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2Vucm9sbC1sYW5ndWFnZS1kaWFsb2d1ZS9lbnJvbGwtbGFuZ3VhZ2UtZGlhbG9ndWUuY29tcG9uZW50J1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9jb21wbGV0aW9uLXN1cnZleS1mb3JtL2NvbXBsZXRpb24tc3VydmV5LWZvcm0uY29tcG9uZW50J1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9wdWJsaWMtc3VydmV5LWZvcm0vcHVibGljLXN1cnZleS1mb3JtLmNvbXBvbmVudCdcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvc3VydmV5LWZvcm0tcXVlc3Rpb24vc3VydmV5LWZvcm0tcXVlc3Rpb24uY29tcG9uZW50J1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9zdXJ2ZXktZm9ybS1zZWN0aW9uL3N1cnZleS1mb3JtLXNlY3Rpb24uY29tcG9uZW50J1xuXG4vLyBSb3V0ZSBDb21wb25lbnRzXG5leHBvcnQgKiBmcm9tICcuL2xpYi9yb3V0ZXMvYXBwLXRvYy1ob21lL2FwcC10b2MtaG9tZS5jb21wb25lbnQnXG5cblxuLy8gU2hhcmUgVE9DIG1vZHVsZVxuZXhwb3J0ICogZnJvbSAnLi9saWIvc2hhcmUtdG9jL3NoYXJlLXRvYy5tb2R1bGUnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zaGFyZS10b2Mvc2hhcmUtdG9jL3NoYXJlLXRvYy5jb21wb25lbnQnXG5cbi8vIENvbnRlbnQgVE9DIG1vZHVsZXNcbmV4cG9ydCAqIGZyb20gJy4vbGliL19jb2xsZWN0aW9uL19jb21tb24vY29udGVudC10b2MvY29udGVudC10b2MubW9kdWxlJ1xuZXhwb3J0ICogZnJvbSAnLi9saWIvX2NvbGxlY3Rpb24vX2NvbW1vbi9jb250ZW50LXRvYy9jb250ZW50LXRvYy5jb21wb25lbnQnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9fY29sbGVjdGlvbi9fY29tbW9uL2NvbnRlbnQtdG9jL3Jldmlld3MtY29udGVudC9yZXZpZXdzLWNvbnRlbnQuY29tcG9uZW50J1xuZXhwb3J0ICogZnJvbSAnLi9saWIvX2NvbGxlY3Rpb24vX2NvbW1vbi9jb250ZW50LXRvYy9hcHAtdG9jLWFib3V0L2FwcC10b2MtYWJvdXQuY29tcG9uZW50J1xuZXhwb3J0ICogZnJvbSAnLi9saWIvX2NvbGxlY3Rpb24vX2NvbW1vbi9jb250ZW50LXRvYy9hcHAtdG9jLWNvbnRlbnQvYXBwLXRvYy1jb250ZW50LmNvbXBvbmVudCdcbmV4cG9ydCAqIGZyb20gJy4vbGliL19jb2xsZWN0aW9uL19jb21tb24vY29udGVudC10b2MvYXBwLXRvYy10ZWFjaGVycy1ub3Rlcy9hcHAtdG9jLXRlYWNoZXJzLW5vdGVzLmNvbXBvbmVudCdcbmV4cG9ydCAqIGZyb20gJy4vbGliL19jb2xsZWN0aW9uL19jb21tb24vY29udGVudC10b2MvYXBwLXRvYy1iYXRjaC1hc3NpZ25tZW50cy9hcHAtdG9jLWJhdGNoLWFzc2lnbm1lbnRzLmNvbXBvbmVudCdcbmV4cG9ydCAqIGZyb20gJy4vbGliL19zZXJ2aWNlcy93aWRnZXQtY29udGVudC5zZXJ2aWNlJ1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kZWxzL2Rpc2N1c3Npb24tZm9ydW0ubW9kZWwnXG5cbi8vIEthcm1hIFBvaW50cyBtb2R1bGVcbmV4cG9ydCAqIGZyb20gJy4vbGliL19jb2xsZWN0aW9uL19jb21tb24vY29udGVudC10b2Mva2FybWEtcG9pbnRzL2thcm1hLXBvaW50cy5tb2R1bGUnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9fY29sbGVjdGlvbi9fY29tbW9uL2NvbnRlbnQtdG9jL2thcm1hLXBvaW50cy9rYXJtYS1wb2ludHMuY29tcG9uZW50J1xuZXhwb3J0ICogZnJvbSAnLi9saWIvX2NvbGxlY3Rpb24vX2NvbW1vbi90b2Mta3BpLXZhbHVlcy90b2Mta3BpLXZhbHVlcy5tb2R1bGUnXG5leHBvcnQgKiBmcm9tICcuL2xpYi9fY29sbGVjdGlvbi9fY29tbW9uL3RvYy1rcGktdmFsdWVzL3RvYy1rcGktdmFsdWVzLmNvbXBvbmVudCdcblxuIl19