tas-uell-sdk 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (27) hide show
  1. package/README.md +2 -0
  2. package/esm2020/lib/components/tas-btn/tas-btn.component.mjs +2 -13
  3. package/esm2020/lib/components/tas-feedback-modal/tas-feedback-modal.component.mjs +229 -0
  4. package/esm2020/lib/components/tas-floating-call/tas-floating-call.component.mjs +38 -3
  5. package/esm2020/lib/components/tas-incoming-appointment/tas-incoming-appointment.component.mjs +46 -8
  6. package/esm2020/lib/components/tas-videocall/tas-videocall.component.mjs +41 -6
  7. package/esm2020/lib/components/tas-waiting-room/tas-waiting-room.component.mjs +18 -3
  8. package/esm2020/lib/interfaces/tas.interfaces.mjs +6 -1
  9. package/esm2020/lib/services/tas.service.mjs +40 -1
  10. package/esm2020/lib/tas-uell-sdk.module.mjs +8 -3
  11. package/esm2020/public-api.mjs +2 -1
  12. package/fesm2015/tas-uell-sdk.mjs +421 -36
  13. package/fesm2015/tas-uell-sdk.mjs.map +1 -1
  14. package/fesm2020/tas-uell-sdk.mjs +416 -36
  15. package/fesm2020/tas-uell-sdk.mjs.map +1 -1
  16. package/lib/components/tas-btn/tas-btn.component.d.ts +1 -2
  17. package/lib/components/tas-feedback-modal/tas-feedback-modal.component.d.ts +101 -0
  18. package/lib/components/tas-floating-call/tas-floating-call.component.d.ts +5 -0
  19. package/lib/components/tas-incoming-appointment/tas-incoming-appointment.component.d.ts +12 -1
  20. package/lib/components/tas-videocall/tas-videocall.component.d.ts +8 -2
  21. package/lib/components/tas-waiting-room/tas-waiting-room.component.d.ts +9 -0
  22. package/lib/interfaces/tas.interfaces.d.ts +17 -0
  23. package/lib/services/tas.service.d.ts +15 -1
  24. package/lib/tas-uell-sdk.module.d.ts +5 -4
  25. package/package.json +1 -1
  26. package/public-api.d.ts +1 -0
  27. package/src/lib/styles/tas-global.scss +17 -0
@@ -424,6 +424,42 @@ export class TasService {
424
424
  throw error;
425
425
  }));
426
426
  }
427
+ /**
428
+ * Save video call feedback.
429
+ * POST /v2/proxy/video/save/feedback
430
+ * @param payload Feedback data including videoCallId, motiveId, motiveType, observation, rating (1-5), and tenant
431
+ * @returns Observable that completes on success (HTTP 200 OK, no response body)
432
+ */
433
+ saveFeedback(payload) {
434
+ // Validate rating is between 1 and 5
435
+ if (payload.rating < 1 || payload.rating > 5) {
436
+ return new Observable(observer => {
437
+ observer.error(new Error('Rating must be between 1 and 5'));
438
+ });
439
+ }
440
+ return this.httpClient
441
+ .post('v2/proxy/video/save/feedback', {
442
+ body: payload,
443
+ headers: {},
444
+ })
445
+ .pipe(catchError((error) => {
446
+ console.error('TAS Service: saveFeedback failed', error);
447
+ throw error;
448
+ }));
449
+ }
450
+ /**
451
+ * Get available feedback motives.
452
+ * GET /v2/proxy/video/motives
453
+ * @returns Observable of feedback motives array
454
+ */
455
+ getMotives() {
456
+ return this.httpClient
457
+ .get('v2/proxy/video/motives', { headers: {} })
458
+ .pipe(catchError((error) => {
459
+ console.error('TAS Service: getMotives failed', error);
460
+ throw error;
461
+ }));
462
+ }
427
463
  /**
428
464
  * Start automatic status polling for the current session.
429
465
  * Status is polled every STATUS_POLL_INTERVAL_MS milliseconds.
@@ -522,6 +558,9 @@ export class TasService {
522
558
  get videoCallId() {
523
559
  return this.currentVideoCallId;
524
560
  }
561
+ get tenant() {
562
+ return this.currentTenant;
563
+ }
525
564
  /**
526
565
  * Connects to a TokBox video session
527
566
  */
@@ -679,4 +718,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
679
718
  type: Inject,
680
719
  args: [TAS_CONFIG]
681
720
  }] }, { type: i1.TasUtilityService }]; } });
682
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YXMtdWVsbC1zZGsvc3JjL2xpYi9zZXJ2aWNlcy90YXMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNuRCxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEUsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0QyxPQUFPLEVBUUwsY0FBYyxFQUNkLGNBQWMsRUFDZCxTQUFTLEVBQ1QsZUFBZSxFQUNmLFNBQVMsRUFDVCxRQUFRLEdBS1QsTUFBTSw4QkFBOEIsQ0FBQztBQUN0QyxPQUFPLEVBQ0wsVUFBVSxFQUNWLGVBQWUsR0FHaEIsTUFBTSxzQkFBc0IsQ0FBQzs7O0FBRTlCLDZDQUE2QztBQUM3QyxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsQ0FBQztBQU0zRixNQUFNLE9BQU8sVUFBVTtJQTBFckIsWUFDbUMsVUFBeUIsRUFDOUIsTUFBaUIsRUFDckMsaUJBQW9DO1FBRlgsZUFBVSxHQUFWLFVBQVUsQ0FBZTtRQUM5QixXQUFNLEdBQU4sTUFBTSxDQUFXO1FBQ3JDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUE1RXRDLFlBQU8sR0FBc0IsSUFBSSxDQUFDO1FBQ2xDLGNBQVMsR0FBd0IsSUFBSSxDQUFDO1FBQ3RDLGdCQUFXLEdBQW9CLEVBQUUsQ0FBQztRQUVsQyxxQkFBZ0IsR0FBRyxJQUFJLGVBQWUsQ0FBWSxTQUFTLENBQUMsSUFBSSxDQUFDLENB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Q0FBQztZQUN0RCxPQUFPO1NBQ1I7UUFFRCx1Q0FBdUM7UUFDdkMsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRTtZQUMzQixZQUFZLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDbEQ7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxzQkFBc0I7UUFDM0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLGVBQWUsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBQzlDLENBQUM7O3dHQXoxQlUsVUFBVSxrQkEyRVgsZUFBZSxhQUNmLFVBQVU7NEdBNUVULFVBQVUsY0FIVCxNQUFNOzRGQUdQLFVBQVU7a0JBSnRCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkE2RUksTUFBTTsyQkFBQyxlQUFlOzswQkFDdEIsTUFBTTsyQkFBQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUYXNVdGlsaXR5U2VydmljZSB9IGZyb20gJy4vdGFzLXV0aWxpdHkuc2VydmljZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCwgZmluYWxpemUsIHNoYXJlUmVwbGF5IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0ICogYXMgT1QgZnJvbSAnQG9wZW50b2svY2xpZW50JztcbmltcG9ydCB7XG4gIEdlbmVyYXRlVG9rZW5SZXNwb25zZSxcbiAgU3RhcnRTZXNzaW9uUmVxdWVzdCxcbiAgRmluaXNoU2Vzc2lvblJlc3BvbnNlLFxuICBQcm94eVZpZGVvU3RhdHVzUmVxdWVzdCxcbiAgUHJveHlWaWRlb1N0YXR1c1Jlc3BvbnNlLFxuICBQcm94eVZpZGVvRmluaXNoUmVxdWVzdCxcbiAgUHJveHlWaWRlb1VzZXJNb2RpZnlSZXF1ZXN0LFxuICBVc2VyQ2FsbEFjdGlvbixcbiAgUm9vbVVzZXJTdGF0dXMsXG4gIEdlb1N0YXR1cyxcbiAgVGFzQnVzaW5lc3NSb2xlLFxuICBDYWxsU3RhdGUsXG4gIFZpZXdNb2RlLFxuICBXYWl0aW5nUm9vbVVzZXIsXG4gIFVzZXJHZW9JbmZvLFxuICBUYXNBcHBvaW50bWVudCxcbiAgR2V0QXBwb2ludG1lbnRzUmVxdWVzdCxcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy90YXMuaW50ZXJmYWNlcyc7XG5pbXBvcnQge1xuICBUQVNfQ09ORklHLFxuICBUQVNfSFRUUF9DTElFTlQsXG4gIFRhc0NvbmZpZyxcbiAgVGFzSHR0cENsaWVudCxcbn0gZnJvbSAnLi4vY29uZmlnL3Rhcy5jb25maWcnO1xuXG4vLyBSZS1leHBvcnQgZW51bXMgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbmV4cG9ydCB7IENhbGxTdGF0ZSwgVmlld01vZGUsIFRhc0J1c2luZXNzUm9sZSwgVXNlckNhbGxBY3Rpb24sIFJvb21Vc2VyU3RhdHVzLCBHZW9TdGF0dXMgfTtcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuICBcbmV4cG9ydCBjbGFzcyBUYXNTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBzZXNzaW9uOiBPVC5TZXNzaW9uIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgcHVibGlzaGVyOiBPVC5QdWJsaXNoZXIgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBzdWJzY3JpYmVyczogT1QuU3Vic2NyaWJlcltdID0gW107XG5cbiAgcHJpdmF0ZSBjYWxsU3RhdGVTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDYWxsU3RhdGU+KENhbGxTdGF0ZS5JRExFKTtcbiAgcHVibGljIGNhbGxTdGF0ZSQgPSB0aGlzLmNhbGxTdGF0ZVN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgcHJpdmF0ZSB2aWV3TW9kZVN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFZpZXdNb2RlPihWaWV3TW9kZS5GVUxMU0NSRUVOKTtcbiAgcHVibGljIHZpZXdNb2RlJCA9IHRoaXMudmlld01vZGVTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIHByaXZhdGUgaXNNdXRlZFN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHVibGljIGlzTXV0ZWQkID0gdGhpcy5pc011dGVkU3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICAvLyBTZXNzaW9uIGluZm8gZm9yIFBpUCBtb2RlIHJlc3RvcmF0aW9uXG4gIHByaXZhdGUgY3VycmVudFNlc3Npb25JZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgY3VycmVudFRva2VuOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSByZWFkb25seSBTVE9SQUdFX0tFWSA9ICd0YXNfc2Vzc2lvbl9zdGF0ZSc7XG4gIHByaXZhdGUgcmVhZG9ubHkgRElTQ09OTkVDVEVEX0ZMQUdfS0VZID0gJ3Rhc19zZXNzaW9uX2Rpc2Nvbm5lY3RlZCc7XG4gIHByaXZhdGUgaXNGaW5pc2hpbmdTZXNzaW9uOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLy8gUHJveHktdmlkZW8gY2lyY3VpdCBzdGF0ZVxuICBwcml2YXRlIHByb3h5VmlkZW9TZXNzaW9uSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHByb3h5VmlkZW9Ub2tlbjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgY3VycmVudEJ1c2luZXNzUm9sZTogVGFzQnVzaW5lc3NSb2xlID0gVGFzQnVzaW5lc3NSb2xlLlVTRVI7XG5cbiAgLy8gV2FpdGluZyByb29tIGFuZCBzdGF0dXMgcG9sbGluZ1xuICBwcml2YXRlIHdhaXRpbmdSb29tVXNlcnNTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxXYWl0aW5nUm9vbVVzZXJbXT4oW10pO1xuICBwdWJsaWMgd2FpdGluZ1Jvb21Vc2VycyQgPSB0aGlzLndhaXRpbmdSb29tVXNlcnNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIHByaXZhdGUgb3duZXJIYXNKb2luZWRTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHB1YmxpYyBvd25lckhhc0pvaW5lZCQgPSB0aGlzLm93bmVySGFzSm9pbmVkU3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICAvLyBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgdHJ1ZSB3aGVuIG93bmVyIHdhcyBwcmVzZW50IGJ1dCB0aGVuIGxlZnRcbiAgcHJpdmF0ZSBvd25lckhhc0xlZnRTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHB1YmxpYyBvd25lckhhc0xlZnQkID0gdGhpcy5vd25lckhhc0xlZnRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIHByaXZhdGUgam9pbmFibGVTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHB1YmxpYyBqb2luYWJsZSQgPSB0aGlzLmpvaW5hYmxlU3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICAvLyBPYnNlcnZhYmxlIGZvciB3aGVuIGJhY2tlbmQgcmVxdWVzdHMgZ2VvbG9jYXRpb24gYWN0aXZhdGlvblxuICBwcml2YXRlIGFjdGl2YXRlR2VvU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwdWJsaWMgYWN0aXZhdGVHZW8kID0gdGhpcy5hY3RpdmF0ZUdlb1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgLy8gT2JzZXJ2YWJsZSBmb3Igd2hlbiBnZW8gcmVxdWVzdCBpcyBhY3RpdmUgKG93bmVyIHdhaXRpbmcgZm9yIHVzZXIgcmVzcG9uc2UpXG4gIHByaXZhdGUgZ2VvUmVxdWVzdEFjdGl2ZVN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHVibGljIGdlb1JlcXVlc3RBY3RpdmUkID0gdGhpcy5nZW9SZXF1ZXN0QWN0aXZlU3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICAvLyBPYnNlcnZhYmxlIGZvciB3aGVuIGFsbCBnZW8gaGFzIGJlZW4gZ3JhbnRlZFxuICBwcml2YXRlIGFsbEdlb0dyYW50ZWRTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHB1YmxpYyBhbGxHZW9HcmFudGVkJCA9IHRoaXMuYWxsR2VvR3JhbnRlZFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgLy8gT2JzZXJ2YWJsZSBmb3IgaW5kaXZpZHVhbCB1c2VyIGdlbyBzdGF0dXMgKGZvciBvd25lciBwYW5lbClcbiAgcHJpdmF0ZSB1c2VyR2VvSW5mb1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFVzZXJHZW9JbmZvW10+KFtdKTtcbiAgcHVibGljIHVzZXJHZW9JbmZvJCA9IHRoaXMudXNlckdlb0luZm9TdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIHByaXZhdGUgc3RhdHVzUG9sbGluZ0ludGVydmFsOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRJbnRlcnZhbD4gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSByZWFkb25seSBERUZBVUxUX1BPTExfSU5URVJWQUxfTVMgPSAzMDAwMDsgLy8gRGVmYXVsdCAzMHNcbiAgcHJpdmF0ZSB3YXNPd25lclByZXNlbnQgPSBmYWxzZTtcblxuICAvLyBDdXJyZW50IGNhbGwgY29udGV4dFxuICBwcml2YXRlIGN1cnJlbnRBcHBvaW50bWVudElkOiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBjdXJyZW50VmlkZW9DYWxsSWQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGN1cnJlbnRUZW5hbnQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIC8vIFN0YXR1cyBjYWNoZSAoMSBzZWNvbmQgVFRMKVxuICBwcml2YXRlIHJlYWRvbmx5IFNUQVRVU19DQUNIRV9UVExfTVMgPSAxMDAwO1xuICBwcml2YXRlIHN0YXR1c0NhY2hlOiB7XG4gICAga2V5OiBzdHJpbmc7XG4gICAgcmVzcG9uc2U6IFByb3h5VmlkZW9TdGF0dXNSZXNwb25zZSB8IG51bGw7XG4gICAgZXJyb3I6IGFueSB8IG51bGw7XG4gICAgdGltZXN0YW1wOiBudW1iZXI7XG4gIH0gfCBudWxsID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KFRBU19IVFRQX0NMSUVOVCkgcHJpdmF0ZSBodHRwQ2xpZW50OiBUYXNIdHRwQ2xpZW50LFxuICAgIEBJbmplY3QoVEFTX0NPTkZJRykgcHJpdmF0ZSBjb25maWc6IFRhc0NvbmZpZyxcbiAgICBwcml2YXRlIHRhc1V0aWxpdHlTZXJ2aWNlOiBUYXNVdGlsaXR5U2VydmljZVxuICApIHt9XG5cbiAgLy8gLi4uIChHZXR0ZXJzIGFuZCBvdGhlciBtZXRob2RzIHJlbWFpbiB1bmNoYW5nZWQpXG5cbiAgLyoqXG4gICAqIFN0YXJ0IGF1dG9tYXRpYyBzdGF0dXMgcG9sbGluZyBmb3IgdGhlIGN1cnJlbnQgc2Vzc2lvbi5cbiAgICogU3RhdHVzIGlzIHBvbGxlZCBldmVyeSBpbnRlcnZhbE1zIChkZWZhdWx0IDMwcykuXG4gICAqL1xuICBwdWJsaWMgc3RhcnRTdGF0dXNQb2xsaW5nKFxuICAgIHBhcmFtczogUHJveHlWaWRlb1N0YXR1c1JlcXVlc3QsIFxuICAgIGludGVydmFsTXM6IG51bWJlciA9IHRoaXMuREVGQVVMVF9QT0xMX0lOVEVSVkFMX01TXG4gICk6IHZvaWQge1xuICAgIHRoaXMuc3RvcFN0YXR1c1BvbGxpbmcoKTsgLy8gQ2xlYXIgYW55IGV4aXN0aW5nIHBvbGxpbmdcblxuICAgIC8vIFN0b3JlIGNvbnRleHQgZm9yIHBvbGxpbmdcbiAgICBpZiAocGFyYW1zLnNlc3Npb25JZCkge1xuICAgICAgdGhpcy5jdXJyZW50U2Vzc2lvbklkID0gcGFyYW1zLnNlc3Npb25JZDtcbiAgICB9XG4gICAgaWYgKHBhcmFtcy5hcHBvaW50bWVudElkKSB7XG4gICAgICB0aGlzLmN1cnJlbnRBcHBvaW50bWVudElkID0gcGFyYW1zLmFwcG9pbnRtZW50SWQ7XG4gICAgfVxuICAgIGlmIChwYXJhbXMudGVuYW50KSB7XG4gICAgICB0aGlzLmN1cnJlbnRUZW5hbnQgPSBwYXJhbXMudGVuYW50O1xuICAgIH1cblxuXG5cbiAgICAvLyBJbml0aWFsIHN0YXR1cyBmZXRjaFxuICAgIHRoaXMuZmV0Y2hBbmRQcm9jZXNzU3RhdHVzKHBhcmFtcyk7XG5cbiAgICAvLyBTZXQgdXAgcGVyaW9kaWMgcG9sbGluZ1xuICAgIHRoaXMuc3RhdHVzUG9sbGluZ0ludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgdGhpcy5mZXRjaEFuZFByb2Nlc3NTdGF0dXMocGFyYW1zKTtcbiAgICB9LCBpbnRlcnZhbE1zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9wIGF1dG9tYXRpYyBzdGF0dXMgcG9sbGluZy5cbiAgICovXG4gIHB1YmxpYyBzdG9wU3RhdHVzUG9sbGluZygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdGF0dXNQb2xsaW5nSW50ZXJ2YWwpIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5zdGF0dXNQb2xsaW5nSW50ZXJ2YWwpO1xuICAgICAgdGhpcy5zdGF0dXNQb2xsaW5nSW50ZXJ2YWwgPSBudWxsO1xuICAgIH1cbiAgICAvLyBEbyBOT1QgcmVzZXQgd2FpdGluZyByb29tIHN0YXRlIGhlcmUsIGFzIG90aGVyIGNvbXBvbmVudHMgbWlnaHQgb2JzZXJ2ZSBpdFxuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0IHBvbGxpbmcgc3RhdGUgKHdhaXRpbmcgcm9vbSwgb3duZXIgc3RhdHVzLCBldGMpXG4gICAqIENhbGwgdGhpcyB3aGVuIGNvbXBsZXRlbHkgZXhpdGluZyB0aGUgZmxvd1xuICAgKi9cbiAgcHVibGljIHJlc2V0UG9sbGluZ1N0YXRlKCk6IHZvaWQge1xuICAgIHRoaXMuc3RvcFN0YXR1c1BvbGxpbmcoKTtcbiAgICB0aGlzLndhaXRpbmdSb29tVXNlcnNTdWJqZWN0Lm5leHQoW10pO1xuICAgIHRoaXMub3duZXJIYXNKb2luZWRTdWJqZWN0Lm5leHQoZmFsc2UpO1xuICAgIHRoaXMub3duZXJIYXNMZWZ0U3ViamVjdC5uZXh0KGZhbHNlKTtcbiAgICB0aGlzLmpvaW5hYmxlU3ViamVjdC5uZXh0KGZhbHNlKTtcbiAgICB0aGlzLndhc093bmVyUHJlc2VudCA9IGZhbHNlO1xuICB9XG5cbiAgLy8gR2V0dGVyc1xuICBwdWJsaWMgZ2V0IGN1cnJlbnRTZXNzaW9uKCk6IE9ULlNlc3Npb24gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5zZXNzaW9uO1xuICB9XG5cbiAgcHVibGljIGdldCBjdXJyZW50UHVibGlzaGVyKCk6IE9ULlB1Ymxpc2hlciB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLnB1Ymxpc2hlcjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY3VycmVudFN1YnNjcmliZXJzKCk6IE9ULlN1YnNjcmliZXJbXSB7XG4gICAgcmV0dXJuIHRoaXMuc3Vic2NyaWJlcnM7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHNlc3Npb25JZCgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50U2Vzc2lvbklkO1xuICB9XG5cbiAgcHVibGljIGdldCB0b2tlbigpOiBzdHJpbmcgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50VG9rZW47XG4gIH1cblxuICBwdWJsaWMgZ2V0IHByb3h5U2Vzc2lvbklkKCk6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLnByb3h5VmlkZW9TZXNzaW9uSWQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHByb3h5VG9rZW4oKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMucHJveHlWaWRlb1Rva2VuO1xuICB9XG5cbiAgcHVibGljIGdldCBidXNpbmVzc1JvbGUoKTogVGFzQnVzaW5lc3NSb2xlIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50QnVzaW5lc3NSb2xlO1xuICB9XG5cbiAgcHVibGljIGdldCBpc011dGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzTXV0ZWRTdWJqZWN0LmdldFZhbHVlKCk7XG4gIH1cblxuICAvLyBWaWV3IE1vZGUgTWV0aG9kc1xuICBwdWJsaWMgc2V0Vmlld01vZGUobW9kZTogVmlld01vZGUpOiB2b2lkIHtcbiAgICB0aGlzLnZpZXdNb2RlU3ViamVjdC5uZXh0KG1vZGUpO1xuICAgIGlmICh0aGlzLmN1cnJlbnRTZXNzaW9uSWQgJiYgdGhpcy5jdXJyZW50VG9rZW4pIHtcbiAgICAgIHRoaXMuc2F2ZVNlc3Npb25TdGF0ZShcbiAgICAgICAgdGhpcy5jdXJyZW50U2Vzc2lvbklkLFxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbixcbiAgICAgICAgbW9kZSxcbiAgICAgICAgdGhpcy5jdXJyZW50QnVzaW5lc3NSb2xlXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBlbnRlclBpcE1vZGUoKTogdm9pZCB7XG4gICAgdGhpcy52aWV3TW9kZVN1YmplY3QubmV4dChWaWV3TW9kZS5QSVApO1xuICAgIGlmICh0aGlzLmN1cnJlbnRTZXNzaW9uSWQgJiYgdGhpcy5jdXJyZW50VG9rZW4pIHtcbiAgICAgIHRoaXMuc2F2ZVNlc3Npb25TdGF0ZShcbiAgICAgICAgdGhpcy5jdXJyZW50U2Vzc2lvbklkLFxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbixcbiAgICAgICAgVmlld01vZGUuUElQLFxuICAgICAgICB0aGlzLmN1cnJlbnRCdXNpbmVzc1JvbGVcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGV4aXRQaXBNb2RlKCk6IHZvaWQge1xuICAgIHRoaXMudmlld01vZGVTdWJqZWN0Lm5leHQoVmlld01vZGUuRlVMTFNDUkVFTik7XG4gICAgaWYgKHRoaXMuY3VycmVudFNlc3Npb25JZCAmJiB0aGlzLmN1cnJlbnRUb2tlbikge1xuICAgICAgdGhpcy5zYXZlU2Vzc2lvblN0YXRlKFxuICAgICAgICB0aGlzLmN1cnJlbnRTZXNzaW9uSWQsXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLFxuICAgICAgICBWaWV3TW9kZS5GVUxMU0NSRUVOLFxuICAgICAgICB0aGlzLmN1cnJlbnRCdXNpbmVzc1JvbGVcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGlzUGlwTW9kZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy52aWV3TW9kZVN1YmplY3QuZ2V0VmFsdWUoKSA9PT0gVmlld01vZGUuUElQO1xuICB9XG5cbiAgLy8gQXVkaW8gQ29udHJvbFxuICBwdWJsaWMgdG9nZ2xlTXV0ZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5wdWJsaXNoZXIpIHtcbiAgICAgIGNvbnN0IG5ld011dGVTdGF0ZSA9ICF0aGlzLmlzTXV0ZWRTdWJqZWN0LmdldFZhbHVlKCk7XG4gICAgICBjb25zdCBzaG91bGRFbmFibGVBdWRpbyA9ICFuZXdNdXRlU3RhdGU7XG5cbiAgICAgIC8vIFVzZSBPcGVuVG9rJ3MgcHVibGlzaEF1ZGlvXG4gICAgICB0aGlzLnB1Ymxpc2hlci5wdWJsaXNoQXVkaW8oc2hvdWxkRW5hYmxlQXVkaW8pO1xuXG4gICAgICAvLyBBbHNvIGRpcmVjdGx5IGNvbnRyb2wgdGhlIE1lZGlhU3RyZWFtVHJhY2sgYXMgYmFja3VwXG4gICAgICBjb25zdCBhdWRpb1RyYWNrID0gdGhpcy5wdWJsaXNoZXIuZ2V0QXVkaW9Tb3VyY2U/LigpO1xuICAgICAgaWYgKGF1ZGlvVHJhY2spIHtcbiAgICAgICAgYXVkaW9UcmFjay5lbmFibGVkID0gc2hvdWxkRW5hYmxlQXVkaW87XG4gICAgICB9XG5cbiAgICAgIHRoaXMuaXNNdXRlZFN1YmplY3QubmV4dChuZXdNdXRlU3RhdGUpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZXRNdXRlKG11dGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucHVibGlzaGVyKSB7XG4gICAgICB0aGlzLnB1Ymxpc2hlci5wdWJsaXNoQXVkaW8oIW11dGVkKTtcbiAgICAgIHRoaXMuaXNNdXRlZFN1YmplY3QubmV4dChtdXRlZCk7XG4gICAgfVxuICB9XG5cbiAgLy8gU2Vzc2lvbiBNYW5hZ2VtZW50XG4gIHB1YmxpYyBkaXNjb25uZWN0U2Vzc2lvbihjbGVhclN0b3JhZ2U6IGJvb2xlYW4gPSB0cnVlKTogdm9pZCB7XG5cblxuICAgIC8vIENhbGwgZmluaXNoU2Vzc2lvbiBiZWZvcmUgZGlzY29ubmVjdGluZyBpZiB3ZSBoYXZlIGEgc2Vzc2lvbklkXG4gICAgY29uc3Qgc2Vzc2lvbklkVG9GaW5pc2ggPSB0aGlzLmN1cnJlbnRTZXNzaW9uSWQ7XG5cbiAgICAvLyBDbGVhciBzdG9yYWdlIEZJUlNUIHRvIHByZXZlbnQgYW55IHJhY2UgY29uZGl0aW9ucyB3aGVyZSBzdGF0ZSBtaWdodCBiZSBzYXZlZCBhZnRlciBkaXNjb25uZWN0XG4gICAgaWYgKGNsZWFyU3RvcmFnZSkge1xuICAgICAgdGhpcy5jbGVhclNlc3Npb25TdGF0ZSgpO1xuICAgICAgLy8gU2V0IGEgZmxhZyB0byBpbmRpY2F0ZSB0aGlzIHNlc3Npb24gd2FzIGludGVudGlvbmFsbHkgZGlzY29ubmVjdGVkXG4gICAgICAvLyBUaGlzIHByZXZlbnRzIHJlY29ubmVjdGlvbiBvbiBwYWdlIHJlbG9hZFxuICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSh0aGlzLkRJU0NPTk5FQ1RFRF9GTEFHX0tFWSwgJ3RydWUnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zZXNzaW9uKSB7XG4gICAgICB0aGlzLnNlc3Npb24uZGlzY29ubmVjdCgpO1xuICAgICAgdGhpcy5zZXNzaW9uID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy5wdWJsaXNoZXIgPSBudWxsO1xuICAgIHRoaXMuc3Vic2NyaWJlcnMgPSBbXTtcbiAgICB0aGlzLmN1cnJlbnRTZXNzaW9uSWQgPSBudWxsO1xuICAgIHRoaXMuY3VycmVudFRva2VuID0gbnVsbDtcbiAgICB0aGlzLnByb3h5VmlkZW9TZXNzaW9uSWQgPSBudWxsO1xuICAgIHRoaXMucHJveHlWaWRlb1Rva2VuID0gbnVsbDtcbiAgICB0aGlzLmlzTXV0ZWRTdWJqZWN0Lm5leHQoZmFsc2UpOyAvLyBSZXNldCBtdXRlIHN0YXRlXG4gICAgdGhpcy52aWV3TW9kZVN1YmplY3QubmV4dChWaWV3TW9kZS5GVUxMU0NSRUVOKTtcbiAgICB0aGlzLmNhbGxTdGF0ZVN1YmplY3QubmV4dChDYWxsU3RhdGUuRElTQ09OTkVDVEVEKTtcblxuICAgIC8vIENhbGwgcHJveHkgZmluaXNoIGFmdGVyIGRpc2Nvbm5lY3RpbmcgKG9ubHkgaWYgbm90IGFscmVhZHkgZmluaXNoaW5nKVxuICAgIGlmIChzZXNzaW9uSWRUb0ZpbmlzaCAmJiAhdGhpcy5pc0ZpbmlzaGluZ1Nlc3Npb24pIHtcbiAgICAgIHRoaXMuaXNGaW5pc2hpbmdTZXNzaW9uID0gdHJ1ZTtcbiAgICAgIHRoaXMuZmluaXNoUHJveHlWaWRlb1Nlc3Npb24oe1xuICAgICAgICBzZXNzaW9uSWQ6IHNlc3Npb25JZFRvRmluaXNoLFxuICAgICAgICBidXNpbmVzc1JvbGU6IHRoaXMuY3VycmVudEJ1c2luZXNzUm9sZSxcbiAgICAgIH0pLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IChyZXNwb25zZSkgPT4ge1xuXG4gICAgICAgICAgdGhpcy5pc0ZpbmlzaGluZ1Nlc3Npb24gPSBmYWxzZTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xuXG4gICAgICAgICAgdGhpcy5pc0ZpbmlzaGluZ1Nlc3Npb24gPSBmYWxzZTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBpc0NhbGxBY3RpdmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY2FsbFN0YXRlU3ViamVjdC5nZXRWYWx1ZSgpID09PSBDYWxsU3RhdGUuQ09OTkVDVEVEO1xuICB9XG5cbiAgLy8gU3RhdGUgUGVyc2lzdGVuY2VcbiAgcHJpdmF0ZSBzYXZlU2Vzc2lvblN0YXRlKFxuICAgIHNlc3Npb25JZDogc3RyaW5nLFxuICAgIHRva2VuOiBzdHJpbmcsXG4gICAgdmlld01vZGU6IFZpZXdNb2RlLFxuICAgIGJ1c2luZXNzUm9sZTogVGFzQnVzaW5lc3NSb2xlID0gVGFzQnVzaW5lc3NSb2xlLlVTRVJcbiAgKTogdm9pZCB7XG4gICAgY29uc3Qgc3RhdGUgPSB7XG4gICAgICBzZXNzaW9uSWQsXG4gICAgICB0b2tlbixcbiAgICAgIHZpZXdNb2RlLFxuICAgICAgYnVzaW5lc3NSb2xlLFxuICAgIH07XG4gICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSh0aGlzLlNUT1JBR0VfS0VZLCBKU09OLnN0cmluZ2lmeShzdGF0ZSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhclNlc3Npb25TdGF0ZSgpOiB2b2lkIHtcbiAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuU1RPUkFHRV9LRVkpO1xuICAgIC8vIEFsc28gY2xlYXIgdGhlIGRpc2Nvbm5lY3RlZCBmbGFnIHdoZW4gY2xlYXJpbmcgc3RhdGVcbiAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuRElTQ09OTkVDVEVEX0ZMQUdfS0VZKTtcbiAgfVxuXG4gIHB1YmxpYyBjYW5SZXN0b3JlU2Vzc2lvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISFzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKHRoaXMuU1RPUkFHRV9LRVkpO1xuICB9XG5cbiAgcHVibGljIHJlc3RvcmVTZXNzaW9uKGNvbnRhaW5lcklkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBzYXZlZFN0YXRlID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSh0aGlzLlNUT1JBR0VfS0VZKTtcbiAgICBpZiAoIXNhdmVkU3RhdGUpIHJldHVybjtcblxuICAgIC8vIENoZWNrIGlmIHRoaXMgc2Vzc2lvbiB3YXMgaW50ZW50aW9uYWxseSBkaXNjb25uZWN0ZWRcbiAgICAvLyBJZiBzbywgZG9uJ3QgcmVzdG9yZSBpdCBvbiBwYWdlIHJlbG9hZFxuICAgIGNvbnN0IHdhc0Rpc2Nvbm5lY3RlZCA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0odGhpcy5ESVNDT05ORUNURURfRkxBR19LRVkpO1xuICAgIGlmICh3YXNEaXNjb25uZWN0ZWQgPT09ICd0cnVlJykge1xuXG4gICAgICB0aGlzLmNsZWFyU2Vzc2lvblN0YXRlKCk7XG4gICAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuRElTQ09OTkVDVEVEX0ZMQUdfS0VZKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBEb24ndCByZXN0b3JlIGlmIHdlJ3JlIGFscmVhZHkgZGlzY29ubmVjdGVkIG9yIGlmIHRoZXJlJ3Mgbm8gYWN0aXZlIHNlc3Npb25cbiAgICAvLyBUaGlzIHByZXZlbnRzIHJlc3RvcmluZyBzZXNzaW9ucyB0aGF0IHdlcmUgcHJvcGVybHkgZGlzY29ubmVjdGVkXG4gICAgaWYgKHRoaXMuY2FsbFN0YXRlU3ViamVjdC5nZXRWYWx1ZSgpID09PSBDYWxsU3RhdGUuRElTQ09OTkVDVEVEKSB7XG5cbiAgICAgIHRoaXMuY2xlYXJTZXNzaW9uU3RhdGUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RhdGUgPSBKU09OLnBhcnNlKHNhdmVkU3RhdGUpO1xuICAgICAgaWYgKHN0YXRlLnNlc3Npb25JZCAmJiBzdGF0ZS50b2tlbikge1xuXG4gICAgICAgIC8vIEZvcmNlIFBpUCBtb2RlIGZvciByZXN0b3JhdGlvbiB0byBlbnN1cmUgVUkgY29uc2lzdGVuY3lcbiAgICAgICAgdGhpcy52aWV3TW9kZVN1YmplY3QubmV4dChWaWV3TW9kZS5QSVApO1xuXG4gICAgICAgIGlmIChzdGF0ZS5idXNpbmVzc1JvbGUpIHtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRCdXNpbmVzc1JvbGUgPSBzdGF0ZS5idXNpbmVzc1JvbGU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbm5lY3RTZXNzaW9uKFxuICAgICAgICAgIHN0YXRlLnNlc3Npb25JZCxcbiAgICAgICAgICBzdGF0ZS50b2tlbixcbiAgICAgICAgICBjb250YWluZXJJZCwgLy8gVXNlIHRoZSBzYW1lIGNvbnRhaW5lciBmb3IgYm90aCBzaW5jZSB3ZSBhcmUgaW4gUGlQXG4gICAgICAgICAgY29udGFpbmVySWQsXG4gICAgICAgICAgdGhpcy5jdXJyZW50QnVzaW5lc3NSb2xlXG4gICAgICAgIClcbiAgICAgICAgICAudGhlbigoKSA9PiB7XG5cbiAgICAgICAgICAgIC8vIENsZWFyIHRoZSBkaXNjb25uZWN0ZWQgZmxhZyBpZiByZXN0b3JhdGlvbiBzdWNjZWVkc1xuICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLkRJU0NPTk5FQ1RFRF9GTEFHX0tFWSk7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuY2F0Y2goKGVycikgPT4ge1xuXG4gICAgICAgICAgICB0aGlzLmNsZWFyU2Vzc2lvblN0YXRlKCk7IC8vIENsZWFyIGJhZCBzdGF0ZVxuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcblxuICAgICAgdGhpcy5jbGVhclNlc3Npb25TdGF0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEFQSSBNZXRob2RzXG4gIC8qKlxuICAgKiBQUk9YWSBjaXJjdWl0IHRva2VuOiAvdjIvcHJveHkvdmlkZW8vc3RhcnRcbiAgICovXG4gIHB1YmxpYyBzdGFydFByb3h5VmlkZW9TZXNzaW9uKFxuICAgIHBheWxvYWQ6IFN0YXJ0U2Vzc2lvblJlcXVlc3RcbiAgKTogT2JzZXJ2YWJsZTxHZW5lcmF0ZVRva2VuUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAucG9zdDxHZW5lcmF0ZVRva2VuUmVzcG9uc2U+KCd2Mi9wcm94eS92aWRlby9zdGFydCcsIHtcbiAgICAgICAgYm9keTogcGF5bG9hZCxcbiAgICAgICAgaGVhZGVyczoge30sXG4gICAgICB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzcG9uc2U6IGFueSkgPT4gcmVzcG9uc2UgYXMgR2VuZXJhdGVUb2tlblJlc3BvbnNlKSxcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdUQVMgU2VydmljZTogc3RhcnRQcm94eVZpZGVvU2Vzc2lvbiBmYWlsZWQnLCBlcnJvcik7XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIGNhY2hlIGtleSBmcm9tIHJlcXVlc3QgcGF5bG9hZFxuICAgKi9cbiAgcHJpdmF0ZSBnZXRTdGF0dXNDYWNoZUtleShwYXlsb2FkOiBQcm94eVZpZGVvU3RhdHVzUmVxdWVzdCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3BheWxvYWQucm9vbVR5cGV9LSR7cGF5bG9hZC5lbnRpdHlJZH0tJHtwYXlsb2FkLnRlbmFudH0tJHtwYXlsb2FkLnNlc3Npb25JZCB8fCAnJ31gO1xuICB9XG5cbiAgcHJpdmF0ZSBpbmZsaWdodFN0YXR1c1JlcXVlc3RzID0gbmV3IE1hcDxzdHJpbmcsIE9ic2VydmFibGU8UHJveHlWaWRlb1N0YXR1c1Jlc3BvbnNlPj4oKTtcblxuICAvKipcbiAgICogUFJPWFkgY2lyY3VpdCBzdGF0dXM6IC92Mi9wcm94eS92aWRlby9zdGF0dXNcbiAgICogVXNlcyBhIDEtc2Vjb25kIGNhY2hlIHRvIGF2b2lkIHJlZHVuZGFudCBBUEkgY2FsbHMgZnJvbSBtdWx0aXBsZSBjb21wb25lbnRzXG4gICAqIEltcGxlbWVudHMgcmVxdWVzdCBkZWR1cGxpY2F0aW9uIGZvciBzaW11bHRhbmVvdXMgY2FsbHNcbiAgICovXG4gIHB1YmxpYyBnZXRQcm94eVZpZGVvU3RhdHVzKFxuICAgIHBheWxvYWQ6IFByb3h5VmlkZW9TdGF0dXNSZXF1ZXN0XG4gICk6IE9ic2VydmFibGU8UHJveHlWaWRlb1N0YXR1c1Jlc3BvbnNlPiB7XG4gICAgY29uc3QgY2FjaGVLZXkgPSB0aGlzLmdldFN0YXR1c0NhY2hlS2V5KHBheWxvYWQpO1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cbiAgICAvLyAxLiBDaGVjayBpZiB3ZSBoYXZlIGEgdmFsaWQgY2FjaGVkIHJlc3VsdCAobGVzcyB0aGFuIDEgc2Vjb25kIG9sZClcbiAgICBpZiAodGhpcy5zdGF0dXNDYWNoZSAmJiBcbiAgICAgICAgdGhpcy5zdGF0dXNDYWNoZS5rZXkgPT09IGNhY2hlS2V5ICYmIFxuICAgICAgICAobm93IC0gdGhpcy5zdGF0dXNDYWNoZS50aW1lc3RhbXApIDwgdGhpcy5TVEFUVVNfQ0FDSEVfVFRMX01TKSB7XG4gICAgICBcbiAgICAgIC8vIFJldHVybiBjYWNoZWQgZXJyb3IgaWYgcHJlc2VudFxuICAgICAgaWYgKHRoaXMuc3RhdHVzQ2FjaGUuZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKG9ic2VydmVyID0+IHtcbiAgICAgICAgICBvYnNlcnZlci5lcnJvcih0aGlzLnN0YXR1c0NhY2hlIS5lcnJvcik7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBSZXR1cm4gY2FjaGVkIHJlc3BvbnNlXG4gICAgICBpZiAodGhpcy5zdGF0dXNDYWNoZS5yZXNwb25zZSkge1xuICAgICAgICByZXR1cm4gbmV3IE9ic2VydmFibGUob2JzZXJ2ZXIgPT4ge1xuICAgICAgICAgIG9ic2VydmVyLm5leHQodGhpcy5zdGF0dXNDYWNoZSEucmVzcG9uc2UhKTtcbiAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAyLiBDaGVjayBpZiB0aGVyZSBpcyBhbHJlYWR5IGFuIGluZmxpZ2h0IHJlcXVlc3QgZm9yIHRoaXMga2V5XG4gICAgaWYgKHRoaXMuaW5mbGlnaHRTdGF0dXNSZXF1ZXN0cy5oYXMoY2FjaGVLZXkpKSB7XG4gICAgICByZXR1cm4gdGhpcy5pbmZsaWdodFN0YXR1c1JlcXVlc3RzLmdldChjYWNoZUtleSkhO1xuICAgIH1cblxuICAgIC8vIDMuIE1ha2UgdGhlIEFQSSBjYWxsLCBzaGFyZSBpdCwgYW5kIGNhY2hlIHRoZSBPYnNlcnZhYmxlXG4gICAgY29uc3QgcmVxdWVzdCQ6IE9ic2VydmFibGU8UHJveHlWaWRlb1N0YXR1c1Jlc3BvbnNlPiA9IHRoaXMuaHR0cENsaWVudFxuICAgICAgLnBvc3Q8UHJveHlWaWRlb1N0YXR1c1Jlc3BvbnNlPigndjIvcHJveHkvdmlkZW8vc3RhdHVzJywge1xuICAgICAgICBib2R5OiBwYXlsb2FkLFxuICAgICAgICBoZWFkZXJzOiB7fSxcbiAgICAgIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3QgdHlwZWRSZXNwb25zZSA9IHJlc3BvbnNlIGFzIFByb3h5VmlkZW9TdGF0dXNSZXNwb25zZTtcbiAgICAgICAgICAvLyBDYWNoZSBzdWNjZXNzZnVsIHJlc3BvbnNlXG4gICAgICAgICAgdGhpcy5zdGF0dXNDYWNoZSA9IHtcbiAgICAgICAgICAgIGtleTogY2FjaGVLZXksXG4gICAgICAgICAgICByZXNwb25zZTogdHlwZWRSZXNwb25zZSxcbiAgICAgICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgICAgICAgIH07XG4gICAgICAgICAgcmV0dXJuIHR5cGVkUmVzcG9uc2U7XG4gICAgICAgIH0pLFxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1RBUyBTZXJ2aWNlOiBnZXRQcm94eVZpZGVvU3RhdHVzIGZhaWxlZCcsIGVycm9yKTtcbiAgICAgICAgICAvLyBDYWNoZSBlcnJvciByZXNwb25zZVxuICAgICAgICAgIHRoaXMuc3RhdHVzQ2FjaGUgPSB7XG4gICAgICAgICAgICBrZXk6IGNhY2hlS2V5LFxuICAgICAgICAgICAgcmVzcG9uc2U6IG51bGwsXG4gICAgICAgICAgICBlcnJvcjogZXJyb3IsXG4gICAgICAgICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgICAgICAgfTtcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfSksXG4gICAgICAgIC8vIENsZWFuIHVwIGluZmxpZ2h0IG1hcCB3aGVuIHRoZSBvYnNlcnZhYmxlIGNvbXBsZXRlcyBvciBlcnJvcnNcbiAgICAgICAgZmluYWxpemUoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuaW5mbGlnaHRTdGF0dXNSZXF1ZXN0cy5kZWxldGUoY2FjaGVLZXkpO1xuICAgICAgICB9KSxcbiAgICAgICAgLy8gU2hhcmUgdGhlIHJlc3VsdCB3aXRoIGFsbCBzdWJzY3JpYmVycyAoZGVkdXBsaWNhdGlvbilcbiAgICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICAgICk7XG5cbiAgICB0aGlzLmluZmxpZ2h0U3RhdHVzUmVxdWVzdHMuc2V0KGNhY2hlS2V5LCByZXF1ZXN0JCk7XG4gICAgcmV0dXJuIHJlcXVlc3QkO1xuICB9XG5cbiAgLyoqXG4gICAqIFBST1hZIGNpcmN1aXQgdXNlciBtb2RpZmljYXRpb246IC92Mi9wcm94eS92aWRlby91c2VyL21vZGlmeVxuICAgKi9cbiAgcHVibGljIG1vZGlmeVByb3h5VmlkZW9Vc2VyKHBheWxvYWQ6IFByb3h5VmlkZW9Vc2VyTW9kaWZ5UmVxdWVzdCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgLnBhdGNoPGFueT4oJ3YyL3Byb3h5L3ZpZGVvL3VzZXIvbW9kaWZ5Jywge1xuICAgICAgICBib2R5OiBwYXlsb2FkLFxuICAgICAgICBoZWFkZXJzOiB7fSxcbiAgICAgIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdUQVMgU2VydmljZTogbW9kaWZ5UHJveHlWaWRlb1VzZXIgZmFpbGVkJywgZXJyb3IpO1xuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBmaW5pc2hQcm94eVZpZGVvU2Vzc2lvbihwYXlsb2FkOiBQcm94eVZpZGVvRmluaXNoUmVxdWVzdCkge1xuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcbiAgICAgIC5wb3N0PEZpbmlzaFNlc3Npb25SZXNwb25zZT4oJ3YyL3Byb3h5L3ZpZGVvL2ZpbmlzaCcsIHtcbiAgICAgICAgYm9keTogcGF5bG9hZCxcbiAgICAgICAgaGVhZGVyczoge30sXG4gICAgICB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzcG9uc2U6IGFueSkgPT4gcmVzcG9uc2UgYXMgRmluaXNoU2Vzc2lvblJlc3BvbnNlKSxcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdUQVMgU2VydmljZTogZmluaXNoUHJveHlWaWRlb1Nlc3Npb24gZmFpbGVkJywgZXJyb3IpO1xuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdXNlciBhcHBvaW50bWVudHMgd2l0aGluIGEgZGF0ZSByYW5nZS5cbiAgICogQHBhcmFtIHBhcmFtcyBEYXRlIHJhbmdlIGZvciBxdWVyeWluZyBhcHBvaW50bWVudHNcbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZSBvZiBhcHBvaW50bWVudCBhcnJheVxuICAgKi9cbiAgcHVibGljIGdldEFwcG9pbnRtZW50cyhwYXJhbXM6IEdldEFwcG9pbnRtZW50c1JlcXVlc3QpOiBPYnNlcnZhYmxlPFRhc0FwcG9pbnRtZW50W10+IHtcbiAgICAvLyBOb3JtYWxpemUgZGF0ZXMgdG8gWVlZWS1NTS1ERCBmb3JtYXQgKGhhbmRsZXMgSVNPIHRpbWVzdGFtcHMgbGlrZSAyMDI2LTAxLTE1VDAzOjAwOjAwLjAwMCswMDAwKVxuICAgIGNvbnN0IG5vcm1hbGl6ZURhdGUgPSAoZGF0ZTogc3RyaW5nKTogc3RyaW5nID0+IGRhdGUuc3BsaXQoJ1QnKVswXTtcbiAgICBjb25zdCBmcm9tRGF0ZSA9IG5vcm1hbGl6ZURhdGUocGFyYW1zLmZyb21EYXRlKTtcbiAgICBjb25zdCB0b0RhdGUgPSBub3JtYWxpemVEYXRlKHBhcmFtcy50b0RhdGUpO1xuICAgIFxuICAgIGxldCB1cmw6IHN0cmluZztcblxuICAgIC8vIElmIGRhdGVzIGFyZSB0aGUgc2FtZSwgdXNlIG9ubHkgaW5pdERhdGVcbiAgICAvLyBpZiAoZnJvbURhdGUgPT09IHRvRGF0ZSkge1xuICAgIC8vICAgdXJsID0gYHYyL3Byb3h5L2FwcG9pbnRtZW50L2FnZW5kYXMvdXNlci9hcHBvaW50bWVudHM/ZnJvbURhdGU9JHtmcm9tRGF0ZX0mcm9vbVR5cGU9VEFTYDtcbiAgICAvLyB9IGVsc2Uge1xuICAgICAgdXJsID0gYHYyL3Byb3h5L2FwcG9pbnRtZW50L2FnZW5kYXMvdXNlci9hcHBvaW50bWVudHM/ZnJvbURhdGU9JHtmcm9tRGF0ZX0mdG9EYXRlPSR7dG9EYXRlfSZyb29tVHlwZT1UQVNgO1xuICAgIC8vIH1cblxuICAgIGlmIChwYXJhbXMuZW50aXR5SWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdXJsICs9IGAmZW50aXR5SWQ9JHtwYXJhbXMuZW50aXR5SWR9YDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAuZ2V0PFRhc0FwcG9pbnRtZW50W10+KHVybCwgeyBoZWFkZXJzOiB7fSB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignVEFTIFNlcnZpY2U6IGdldEFwcG9pbnRtZW50cyBmYWlsZWQnLCBlcnJvcik7XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IGF1dG9tYXRpYyBzdGF0dXMgcG9sbGluZyBmb3IgdGhlIGN1cnJlbnQgc2Vzc2lvbi5cbiAgICogU3RhdHVzIGlzIHBvbGxlZCBldmVyeSBTVEFUVVNfUE9MTF9JTlRFUlZBTF9NUyBtaWxsaXNlY29uZHMuXG4gICAqL1xuXG5cbiAgLyoqXG4gICAqIFN0b3AgYXV0b21hdGljIHN0YXR1cyBwb2xsaW5nLlxuICAgKi9cblxuXG4gIC8qKlxuICAgKiBGZXRjaCBzdGF0dXMgYW5kIHByb2Nlc3MgdGhlIHJlc3BvbnNlLlxuICAgKi9cbiAgcHJpdmF0ZSBmZXRjaEFuZFByb2Nlc3NTdGF0dXMocGFyYW1zOiBQcm94eVZpZGVvU3RhdHVzUmVxdWVzdCk6IHZvaWQge1xuICAgIHRoaXMuZ2V0UHJveHlWaWRlb1N0YXR1cyhwYXJhbXMpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgdGhpcy5wcm9jZXNzU3RhdHVzUmVzcG9uc2UocmVzcG9uc2UpO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoZXJyKSA9PiB7XG5cbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUHJvY2VzcyBzdGF0dXMgcmVzcG9uc2UgdG8gdXBkYXRlIHdhaXRpbmcgcm9vbSB1c2VycyBhbmQgb3duZXIgam9pbiBzdGF0dXMuXG4gICAqL1xuICBwcml2YXRlIHByb2Nlc3NTdGF0dXNSZXNwb25zZShyZXNwb25zZTogUHJveHlWaWRlb1N0YXR1c1Jlc3BvbnNlKTogdm9pZCB7XG4gICAgY29uc3QgY29udGVudCA9IHJlc3BvbnNlLmNvbnRlbnQ7XG5cbiAgICAvLyBVcGRhdGUgdmlkZW9DYWxsSWQgaWYgYXZhaWxhYmxlXG4gICAgaWYgKGNvbnRlbnQudmlkZW9DYWxsSWQpIHtcbiAgICAgIHRoaXMuY3VycmVudFZpZGVvQ2FsbElkID0gY29udGVudC52aWRlb0NhbGxJZDtcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgc2Vzc2lvbklkIGlmIGF2YWlsYWJsZVxuICAgIGlmIChjb250ZW50LnNlc3Npb25JZCkge1xuICAgICAgdGhpcy5jdXJyZW50U2Vzc2lvbklkID0gY29udGVudC5zZXNzaW9uSWQ7XG4gICAgICB0aGlzLnByb3h5VmlkZW9TZXNzaW9uSWQgPSBjb250ZW50LnNlc3Npb25JZDtcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgam9pbmFibGUgc3RhdHVzXG4gICAgdGhpcy5qb2luYWJsZVN1YmplY3QubmV4dChjb250ZW50LmpvaW5hYmxlKTtcblxuICAgIC8vIFVwZGF0ZSBhY3RpdmF0ZUdlbyBzdGF0dXNcbiAgICBpZiAoY29udGVudC5hY3RpdmF0ZUdlbyAhPT0gdW5kZWZpbmVkKSB7XG5cbiAgICAgIHRoaXMuYWN0aXZhdGVHZW9TdWJqZWN0Lm5leHQoY29udGVudC5hY3RpdmF0ZUdlbyk7XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIGdlb1JlcXVlc3RBY3RpdmUgc3RhdHVzIChvd25lciB3YWl0aW5nIGZvciB1c2VyIGdlbyByZXNwb25zZSlcbiAgICBpZiAoY29udGVudC5nZW9SZXF1ZXN0QWN0aXZlICE9PSB1bmRlZmluZWQgJiYgY29udGVudC5nZW9SZXF1ZXN0QWN0aXZlICE9PSBudWxsKSB7XG5cbiAgICAgIHRoaXMuZ2VvUmVxdWVzdEFjdGl2ZVN1YmplY3QubmV4dChjb250ZW50Lmdlb1JlcXVlc3RBY3RpdmUpO1xuICAgIH0gZWxzZSBpZiAoY29udGVudC5nZW9SZXF1ZXN0QWN0aXZlID09PSBudWxsKSB7XG4gICAgICAvLyBSZXNldCB0byBmYWxzZSB3aGVuIG51bGxcbiAgICAgIHRoaXMuZ2VvUmVxdWVzdEFjdGl2ZVN1YmplY3QubmV4dChmYWxzZSk7XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIGFsbEdlb0dyYW50ZWQgc3RhdHVzIChhbGwgdXNlcnMgcmVzcG9uZGVkIHdpdGggZ2VvKVxuICAgIGlmIChjb250ZW50LmFsbEdlb0dyYW50ZWQgIT09IHVuZGVmaW5lZCkge1xuXG4gICAgICB0aGlzLmFsbEdlb0dyYW50ZWRTdWJqZWN0Lm5leHQoY29udGVudC5hbGxHZW9HcmFudGVkKTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiBvd25lciBoYXMgam9pbmVkXG4gICAgY29uc3Qgb3duZXJKb2luZWQgPSB0aGlzLnRhc1V0aWxpdHlTZXJ2aWNlLmNoZWNrSWZPd25lckpvaW5lZChjb250ZW50LnVzZXJzKTtcbiAgICB0aGlzLm93bmVySGFzSm9pbmVkU3ViamVjdC5uZXh0KG93bmVySm9pbmVkKTtcblxuICAgIC8vIERldGVjdCBpZiBvd25lciBsZWZ0OiB3YXMgcHJlc2VudCwgbm93IG5vdCBwcmVzZW50XG4gICAgaWYgKHRoaXMud2FzT3duZXJQcmVzZW50ICYmICFvd25lckpvaW5lZCkge1xuXG4gICAgICB0aGlzLm93bmVySGFzTGVmdFN1YmplY3QubmV4dCh0cnVlKTtcbiAgICB9XG5cbiAgICBpZiAob3duZXJKb2luZWQpIHtcbiAgICAgIHRoaXMud2FzT3duZXJQcmVzZW50ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBFeHRyYWN0IHdhaXRpbmcgcm9vbSB1c2VycyAoc3RhdHVzID09PSBXQUlUSU5HKVxuICAgIGNvbnN0IHdhaXRpbmdVc2VyczogV2FpdGluZ1Jvb21Vc2VyW10gPSBjb250ZW50LnVzZXJzXG4gICAgICAuZmlsdGVyKCh1KSA9PiAodS5zdGF0dXMgYXMgc3RyaW5nKSA9PT0gJ1dBSVRJTkcnKVxuICAgICAgLm1hcCgodSkgPT4gKHtcbiAgICAgICAgdXNlcklkOiB1LnVzZXJJZCxcbiAgICAgICAgbmFtZTogYFVzZXIgJHt1LnVzZXJJZH1gLCAvLyBUT0RPOiBGZXRjaCBhY3R1YWwgdXNlciBuYW1lcyBmcm9tIGEgdXNlciBzZXJ2aWNlXG4gICAgICAgIHN0YXR1czogUm9vbVVzZXJTdGF0dXMuV0FJVElORyxcbiAgICAgIH0pKTtcblxuICAgIHRoaXMud2FpdGluZ1Jvb21Vc2Vyc1N1YmplY3QubmV4dCh3YWl0aW5nVXNlcnMpO1xuXG4gICAgLy8gRXh0cmFjdCBnZW8gaW5mbyBmb3IgVVNFUiByb2xlIHBhcnRpY2lwYW50cyAoZm9yIG93bmVyIHBhbmVsKVxuICAgIGNvbnN0IHVzZXJHZW9JbmZvOiBVc2VyR2VvSW5mb1tdID0gY29udGVudC51c2Vyc1xuICAgICAgLmZpbHRlcigodSkgPT4gdS5yb2wgPT09ICdVU0VSJylcbiAgICAgIC5tYXAoKHUpID0+ICh7XG4gICAgICAgIHVzZXJJZDogdS51c2VySWQsXG4gICAgICAgIGdlb1N0YXR1czogdS5nZW9TdGF0dXMsXG4gICAgICAgIGxhdGl0dWRlOiB1LmxhdGl0dWRlLFxuICAgICAgICBsb25naXR1ZGU6IHUubG9uZ2l0dWRlLFxuICAgICAgfSkpO1xuXG4gICAgdGhpcy51c2VyR2VvSW5mb1N1YmplY3QubmV4dCh1c2VyR2VvSW5mbyk7XG4gIH1cblxuICAvKipcbiAgICogQWRtaXQgYSB1c2VyIGZyb20gdGhlIHdhaXRpbmcgcm9vbSBieSBjaGFuZ2luZyB0aGVpciBzdGF0dXMuXG4gICAqL1xuICBwdWJsaWMgYWRtaXRVc2VyRnJvbVdhaXRpbmdSb29tKFxuICAgIHVzZXJJZDogbnVtYmVyLFxuICAgIHZpZGVvQ2FsbElkOiBudW1iZXJcbiAgKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5tb2RpZnlQcm94eVZpZGVvVXNlcih7XG4gICAgICB1c2VySWQsXG4gICAgICB2aWRlb0NhbGxJZCxcbiAgICAgIGFjdGlvbjogVXNlckNhbGxBY3Rpb24uV0FJVElOR19ST09NX0xFQVZFLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gR2V0dGVycyBmb3IgY3VycmVudCBjYWxsIGNvbnRleHRcbiAgcHVibGljIGdldCBhcHBvaW50bWVudElkKCk6IG51bWJlciB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRBcHBvaW50bWVudElkO1xuICB9XG5cbiAgcHVibGljIGdldCB2aWRlb0NhbGxJZCgpOiBudW1iZXIgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50VmlkZW9DYWxsSWQ7XG4gIH1cblxuICAvKipcbiAgICogQ29ubmVjdHMgdG8gYSBUb2tCb3ggdmlkZW8gc2Vzc2lvblxuICAgKi9cbiAgcHVibGljIGNvbm5lY3RTZXNzaW9uKFxuICAgIHNlc3Npb25JZDogc3RyaW5nLFxuICAgIHRva2VuOiBzdHJpbmcsXG4gICAgcHVibGlzaGVyRWxlbWVudDogc3RyaW5nLFxuICAgIHN1YnNjcmliZXJFbGVtZW50OiBzdHJpbmcsXG4gICAgYnVzaW5lc3NSb2xlOiBUYXNCdXNpbmVzc1JvbGUgPSBUYXNCdXNpbmVzc1JvbGUuVVNFUlxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmNhbGxTdGF0ZVN1YmplY3QubmV4dChDYWxsU3RhdGUuQ09OTkVDVElORyk7XG4gICAgdGhpcy5jdXJyZW50U2Vzc2lvbklkID0gc2Vzc2lvbklkO1xuICAgIHRoaXMuY3VycmVudFRva2VuID0gdG9rZW47XG4gICAgdGhpcy5jdXJyZW50QnVzaW5lc3NSb2xlID0gYnVzaW5lc3NSb2xlO1xuICAgIHRoaXMuaXNGaW5pc2hpbmdTZXNzaW9uID0gZmFsc2U7IC8vIFJlc2V0IGZsYWcgZm9yIG5ldyBzZXNzaW9uXG5cbiAgICAvLyBTYXZlIGluaXRpYWwgc3RhdGUgKGRlZmF1bHRpbmcgdG8gY3VycmVudCB2aWV3IG1vZGUpXG4gICAgdGhpcy5zYXZlU2Vzc2lvblN0YXRlKFxuICAgICAgc2Vzc2lvbklkLFxuICAgICAgdG9rZW4sXG4gICAgICB0aGlzLnZpZXdNb2RlU3ViamVjdC5nZXRWYWx1ZSgpLFxuICAgICAgYnVzaW5lc3NSb2xlXG4gICAgKTtcbiAgICAvLyBDbGVhciB0aGUgZGlzY29ubmVjdGVkIGZsYWcgd2hlbiBzdGFydGluZyBhIG5ldyBjb25uZWN0aW9uXG4gICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLkRJU0NPTk5FQ1RFRF9GTEFHX0tFWSk7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKCFPVC5jaGVja1N5c3RlbVJlcXVpcmVtZW50cygpKSB7XG4gICAgICAgIHRoaXMuY2FsbFN0YXRlU3ViamVjdC5uZXh0KENhbGxTdGF0ZS5FUlJPUik7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ0Jyb3dzZXIgbm90IGNvbXBhdGlibGUgd2l0aCBUb2tCb3gnKSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zZXNzaW9uID0gT1QuaW5pdFNlc3Npb24odGhpcy5jb25maWcudG9rQm94QXBpS2V5LCBzZXNzaW9uSWQpO1xuXG4gICAgICAvLyBIYW5kbGUgbmV3IHN0cmVhbXMgKHJlbW90ZSBwYXJ0aWNpcGFudHMgam9pbmluZylcbiAgICAgIHRoaXMuc2Vzc2lvbi5vbignc3RyZWFtQ3JlYXRlZCcsIChldmVudCkgPT4ge1xuICAgICAgICBjb25zdCBzdWJzY3JpYmVyID0gdGhpcy5zZXNzaW9uPy5zdWJzY3JpYmUoXG4gICAgICAgICAgZXZlbnQuc3RyZWFtLFxuICAgICAgICAgIHN1YnNjcmliZXJFbGVtZW50LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGluc2VydE1vZGU6ICdhcHBlbmQnLFxuICAgICAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgICAgIGhlaWdodDogJzEwMCUnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igc3Vic2NyaWJpbmcgdG8gc3RyZWFtOicsIGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgIGlmIChzdWJzY3JpYmVyKSB7XG4gICAgICAgICAgdGhpcy5zdWJzY3JpYmVycy5wdXNoKHN1YnNjcmliZXIpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLy8gSGFuZGxlIHN0cmVhbXMgZW5kaW5nIChyZW1vdGUgcGFydGljaXBhbnRzIGxlYXZpbmcpXG4gICAgICB0aGlzLnNlc3Npb24ub24oJ3N0cmVhbURlc3Ryb3llZCcsIChldmVudCkgPT4ge1xuICAgICAgICB0aGlzLnN1YnNjcmliZXJzID0gdGhpcy5zdWJzY3JpYmVycy5maWx0ZXIoXG4gICAgICAgICAgKHN1YikgPT4gc3ViLnN0cmVhbT8uc3RyZWFtSWQgIT09IGV2ZW50LnN0cmVhbS5zdHJlYW1JZFxuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIEhhbmRsZSBzZXNzaW9uIGRpc2Nvbm5lY3Rpb25cbiAgICAgIHRoaXMuc2Vzc2lvbi5vbignc2Vzc2lvbkRpc2Nvbm5lY3RlZCcsICgpID0+IHtcbiAgICAgICAgdGhpcy5jYWxsU3RhdGVTdWJqZWN0Lm5leHQoQ2FsbFN0YXRlLkRJU0NPTk5FQ1RFRCk7XG5cbiAgICAgICAgLy8gQ2FsbCBmaW5pc2hTZXNzaW9uIHdoZW4gc2Vzc2lvbiBpcyBkaXNjb25uZWN0ZWQgKGUuZy4sIGJ5IHNlcnZlcilcbiAgICAgICAgLy8gT25seSBjYWxsIGlmIG5vdCBhbHJlYWR5IGZpbmlzaGluZyAocHJldmVudHMgZHVwbGljYXRlIGNhbGxzKVxuICAgICAgICBjb25zdCBzZXNzaW9uSWRUb0ZpbmlzaCA9IHRoaXMuY3VycmVudFNlc3Npb25JZDtcbiAgICAgICAgaWYgKHNlc3Npb25JZFRvRmluaXNoICYmICF0aGlzLmlzRmluaXNoaW5nU2Vzc2lvbikge1xuICAgICAgICAgIHRoaXMuaXNGaW5pc2hpbmdTZXNzaW9uID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLmZpbmlzaFByb3h5VmlkZW9TZXNzaW9uKHtcbiAgICAgICAgICAgIHNlc3Npb25JZDogc2Vzc2lvbklkVG9GaW5pc2gsXG4gICAgICAgICAgICBidXNpbmVzc1JvbGU6IHRoaXMuY3VycmVudEJ1c2luZXNzUm9sZSxcbiAgICAgICAgICB9KS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgbmV4dDogKHJlc3BvbnNlKSA9PiB7XG5cbiAgICAgICAgICAgICAgdGhpcy5pc0ZpbmlzaGluZ1Nlc3Npb24gPSBmYWxzZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG5cbiAgICAgICAgICAgICAgdGhpcy5pc0ZpbmlzaGluZ1Nlc3Npb24gPSBmYWxzZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvLyBDb25uZWN0IHRvIHNlc3Npb25cbiAgICAgIHRoaXMuc2Vzc2lvbi5jb25uZWN0KHRva2VuLCAoZXJyb3IpID0+IHtcbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgY29ubmVjdGluZyB0byBzZXNzaW9uOicsIGVycm9yKTtcbiAgICAgICAgICB0aGlzLmNhbGxTdGF0ZVN1YmplY3QubmV4dChDYWxsU3RhdGUuRVJST1IpO1xuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSW5pdGlhbGl6ZSBwdWJsaXNoZXIgKGxvY2FsIHZpZGVvKVxuICAgICAgICB0aGlzLnB1Ymxpc2hlciA9IE9ULmluaXRQdWJsaXNoZXIoXG4gICAgICAgICAgcHVibGlzaGVyRWxlbWVudCxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpbnNlcnRNb2RlOiAnYXBwZW5kJyxcbiAgICAgICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIChlcnIpID0+IHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgaW5pdGlhbGl6aW5nIHB1Ymxpc2hlcjonLCBlcnIpO1xuICAgICAgICAgICAgICB0aGlzLmNhbGxTdGF0ZVN1YmplY3QubmV4dChDYWxsU3RhdGUuRVJST1IpO1xuICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBQdWJsaXNoIHRvIHNlc3Npb25cbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbj8ucHVibGlzaCh0aGlzLnB1Ymxpc2hlciwgKHB1YkVycikgPT4ge1xuICAgICAgICAgICAgICBpZiAocHViRXJyKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgcHVibGlzaGluZyBzdHJlYW06JywgcHViRXJyKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxTdGF0ZVN1YmplY3QubmV4dChDYWxsU3RhdGUuRVJST1IpO1xuICAgICAgICAgICAgICAgIHJlamVjdChwdWJFcnIpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FsbFN0YXRlU3ViamVjdC5uZXh0KENhbGxTdGF0ZS5DT05ORUNURUQpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBWaWRlbyBFbGVtZW50IE1vdmVtZW50IE1ldGhvZHNcbiAgcHVibGljIG1vdmVQdWJsaXNoZXJUbyhuZXdDb250YWluZXJJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnB1Ymxpc2hlcikgcmV0dXJuO1xuXG4gICAgY29uc3QgcHVibGlzaGVyRWxlbWVudCA9IHRoaXMucHVibGlzaGVyLmVsZW1lbnQ7XG4gICAgY29uc3QgbmV3Q29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQobmV3Q29udGFpbmVySWQpO1xuXG4gICAgaWYgKHB1Ymxpc2hlckVsZW1lbnQgJiYgbmV3Q29udGFpbmVyKSB7XG4gICAgICBuZXdDb250YWluZXIuYXBwZW5kQ2hpbGQocHVibGlzaGVyRWxlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG1vdmVTdWJzY3JpYmVyc1RvKG5ld0NvbnRhaW5lcklkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBuZXdDb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChuZXdDb250YWluZXJJZCk7XG4gICAgaWYgKCFuZXdDb250YWluZXIpIHJldHVybjtcblxuICAgIHRoaXMuc3Vic2NyaWJlcnMuZm9yRWFjaCgoc3Vic2NyaWJlcikgPT4ge1xuICAgICAgY29uc3Qgc3Vic2NyaWJlckVsZW1lbnQgPSBzdWJzY3JpYmVyLmVsZW1lbnQ7XG4gICAgICBpZiAoc3Vic2NyaWJlckVsZW1lbnQpIHtcbiAgICAgICAgbmV3Q29udGFpbmVyLmFwcGVuZENoaWxkKHN1YnNjcmliZXJFbGVtZW50KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNb3ZlcyB0aGUgbWFpbiB2aWRlbyAoc3Vic2NyaWJlciBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSBwdWJsaXNoZXIpIHRvIGEgY29udGFpbmVyLlxuICAgKiBVc2VkIGZvciBQaVAgbW9kZSB0byBzaG93IG9ubHkgb25lIHZpZGVvLlxuICAgKi9cbiAgcHVibGljIG1vdmVNYWluVmlkZW9UbyhuZXdDb250YWluZXJJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgbmV3Q29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQobmV3Q29udGFpbmVySWQpO1xuICAgIGlmICghbmV3Q29udGFpbmVyKSByZXR1cm47XG5cbiAgICAvLyBQcmVmZXIgcmVtb3RlIHZpZGVvIChzdWJzY3JpYmVyKSBhcyBtYWluXG4gICAgaWYgKHRoaXMuc3Vic2NyaWJlcnMubGVuZ3RoID4gMCAmJiB0aGlzLnN1YnNjcmliZXJzWzBdLmVsZW1lbnQpIHtcbiAgICAgIG5ld0NvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLnN1YnNjcmliZXJzWzBdLmVsZW1lbnQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEZhbGwgYmFjayB0byBsb2NhbCB2aWRlbyAocHVibGlzaGVyKVxuICAgIGlmICh0aGlzLnB1Ymxpc2hlcj8uZWxlbWVudCkge1xuICAgICAgbmV3Q29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMucHVibGlzaGVyLmVsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNb3ZlcyB2aWRlb3MgYmFjayB0byBmdWxsc2NyZWVuIGNvbnRhaW5lcnNcbiAgICovXG4gIHB1YmxpYyBtb3ZlVmlkZW9zVG9GdWxsc2NyZWVuKCk6IHZvaWQge1xuICAgIHRoaXMubW92ZVN1YnNjcmliZXJzVG8oJ3N1YnNjcmliZXItY29udGFpbmVyJyk7XG4gICAgdGhpcy5tb3ZlUHVibGlzaGVyVG8oJ3B1Ymxpc2hlci1jb250YWluZXInKTtcbiAgfVxufVxuIl19
721
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YXMtdWVsbC1zZGsvc3JjL2xpYi9zZXJ2aWNlcy90YXMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNuRCxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEUsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0QyxPQUFPLEVBUUwsY0FBYyxFQUNkLGNBQWMsRUFDZCxTQUFTLEVBQ1QsZUFBZSxFQUNmLFNBQVMsRUFDVCxRQUFRLEdBT1QsTUFBTSw4QkFBOEIsQ0FBQztBQUN0QyxPQUFPLEVBQ0wsVUFBVSxFQUNWLGVBQWUsR0FHaEIsTUFBTSxzQkFBc0IsQ0FBQzs7O0FBRTlCLDZDQUE2QztBQUM3QyxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsQ0FBQztBQU0zRixNQUFNLE9BQU8sVUFBVTtJQTBFckIsWUFDbUMsVUFBeUIsRUFDOUIsTUFBaUIsRUFDckMsaUJBQW9DO1FBRlgsZUFBVSxHQUFWLFVBQVUsQ0FBZTtRQUM5QixXQUFNLEdBQU4sTUFBTSxDQUFXO1FBQ3JDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUE1RXRDLFlBQU8sR0FBc0IsSUFBSSxDQUFDO1FBQ2xDLGNBQVMsR0FBd0IsSUFBSSxDQUFDO1FBQ3RDLGdCQUFXLEdBQW9CLEVBQUUsQ0FBQztRQUVsQyxxQkFBZ0IsR0FBRyxJQUFJLGVBQWUsQ0FBWSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkUsZUFBVSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUVqRCxvQkFBZSxHQUFHLElBQUksZUFBZSxDQUFXLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN0RSxjQUFTLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUUvQyxtQkFBYyxHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQ3RELGFBQVEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRXJELHdDQUF3QztRQUNoQyxxQkFBZ0IsR0FBa0IsSUFBSSxDQUFDO1FBQ3ZDLGlCQUFZLEdBQWtCLElBQUksQ0FBQztRQUMxQixnQkFBVyxHQUFHLG1CQUFtQixDQUFDO1FBQ2xDLDBCQUFxQixHQUFHLDBCQUEwQixDQUFDO1FBQzVELHVCQUFrQixHQUFZLEtBQUssQ0FBQztRQUU1Qyw0QkFBNEI7UUFDcEIsd0JBQW1CLEdBQWtCLElBQUksQ0FBQztRQUMxQyxvQkFBZSxHQUFrQixJQUFJLENBQUM7UUFDdEMsd0JBQW1CLEdBQW9CLGVBQWUsQ0FBQyxJQUFJLENBQUM7UUFFcEUsa0NBQWtDO1FBQzFCLDRCQUF1QixHQUFHLElBQUksZUFBZSxDQUFvQixFQUFFLENBQUMsQ0FBQztRQUN0RSxzQkFBaUIsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFL0QsMEJBQXFCLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDN0Qsb0JBQWUsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFbkUsa0VBQWtFO1FBQzFELHdCQUFtQixHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQzNELGtCQUFhLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFlBQVksRUFBRSxDQUFDO1FBRXZELG9CQUFlLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDdkQsY0FBUyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFdkQsOERBQThEO1FBQ3RELHVCQUFrQixHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQzFELGlCQUFZLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksRUFBRSxDQUFDO1FBRTdELDhFQUE4RTtRQUN0RSw0QkFBdUIsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUMvRCxzQkFBaUIsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFdkUsK0NBQStDO1FBQ3ZDLHlCQUFvQixHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQzVELG1CQUFjLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFlBQVksRUFBRSxDQUFDO1FBRWpFLDhEQUE4RDtRQUN0RCx1QkFBa0IsR0FBRyxJQUFJLGVBQWUsQ0FBZ0IsRUFBRSxDQUFDLENBQUM7UUFDN0QsaUJBQVksR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFckQsMEJBQXFCLEdBQTBDLElBQUksQ0FBQztRQUMzRCw2QkFBd0IsR0FBRyxLQUFLLENBQUMsQ0FBQyxjQUFjO1FBQ3pELG9CQUFlLEdBQUcsS0FBSyxDQUFDO1FBRWhDLHVCQUF1QjtRQUNmLHlCQUFvQixHQUFrQixJQUFJLENBQUM7UUFDM0MsdUJBQWtCLEdBQWtCLElBQUksQ0FBQztRQUN6QyxrQkFBYSxHQUFrQixJQUFJLENBQUM7UUFFNUMsOEJBQThCO1FBQ2Isd0JBQW1CLEdBQUcsSUFBSSxDQUFDO1FBQ3BDLGdCQUFXLEdBS1IsSUFBSSxDQUFDO1FBNFVSLDJCQUFzQixHQUFHLElBQUksR0FBRyxFQUFnRCxDQUFDO0lBdFV0RixDQUFDO0lBRUosbURBQW1EO0lBRW5EOzs7T0FHRztJQUNJLGtCQUFrQixDQUN2QixNQUErQixFQUMvQixhQUFxQixJQUFJLENBQUMsd0JBQXdCO1FBRWxELElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUMsNkJBQTZCO1FBRXZELDRCQUE0QjtRQUM1QixJQUFJLE1BQU0sQ0FBQyxTQUFTLEVBQUU7WUFDcEIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUM7U0FDMUM7UUFDRCxJQUFJLE1BQU0sQ0FBQyxhQUFhLEVBQUU7WUFDeEIsSUFBSSxDQUFDLG9CQUFvQixHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUM7U0FDbEQ7UUFDRCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUU7WUFDakIsSUFBSSxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1NBQ3BDO1FBSUQsdUJBQXVCO1FBQ3ZCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVuQywwQkFBMEI7UUFDMUIsSUFBSSxDQUFDLHFCQUFxQixHQUFHLFdBQVcsQ0FBQyxHQUFHLEVBQUU7WUFDNUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3JDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUNqQixDQUFDO0lBRUQ7O09BRUc7SUFDSSxpQkFBaUI7UUFDdEIsSUFBSSxJQUFJLENBQUMscUJBQXFCLEVBQUU7WUFDOUIsYUFBYSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1lBQzFDLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUM7U0FDbkM7UUFDRCw2RUFBNkU7SUFDL0UsQ0FBQztJQUVEOzs7T0FHRztJQUNJLGlCQUFpQjtRQUN0QixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztJQUMvQixDQUFDO0lBRUQsVUFBVTtJQUNWLElBQVcsY0FBYztRQUN2QixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQUVELElBQVcsZ0JBQWdCO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDO0lBRUQsSUFBVyxrQkFBa0I7UUFDM0IsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUFXLFNBQVM7UUFDbEIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7SUFDL0IsQ0FBQztJQUVELElBQVcsS0FBSztRQUNkLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUMzQixDQUFDO0lBRUQsSUFBVyxjQUFjO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDO0lBQ2xDLENBQUM7SUFFRCxJQUFXLFVBQVU7UUFDbkIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQzlCLENBQUM7SUFFRCxJQUFXLFlBQVk7UUFDckIsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUM7SUFDbEMsQ0FBQztJQUVELElBQVcsT0FBTztRQUNoQixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDeEMsQ0FBQztJQUVELG9CQUFvQjtJQUNiLFdBQVcsQ0FBQyxJQUFjO1FBQy9CLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hDLElBQUksSUFBSSxDQUFDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDOUMsSUFBSSxDQUFDLGdCQUFnQixDQUNuQixJQUFJLENBQUMsZ0JBQWdCLEVBQ3JCLElBQUksQ0FBQyxZQUFZLEVBQ2pCLElBQUksRUFDSixJQUFJLENBQUMsbUJBQW1CLENBQ3pCLENBQUM7U0FDSDtJQUNILENBQUM7SUFFTSxZQUFZO1FBQ2pCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN4QyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQzlDLElBQUksQ0FBQyxnQkFBZ0IsQ0FDbkIsSUFBSSxDQUFDLGdCQUFnQixFQUNyQixJQUFJLENBQUMsWUFBWSxFQUNqQixRQUFRLENBQUMsR0FBRyxFQUNaLElBQUksQ0FBQyxtQkFBbUIsQ0FDekIsQ0FBQztTQUNIO0lBQ0gsQ0FBQztJQUVNLFdBQVc7UUFDaEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQy9DLElBQUksSUFBSSxDQUFDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDOUMsSUFBSSxDQUFDLGdCQUFnQixDQUNuQixJQUFJLENBQUMsZ0JBQWdCLEVBQ3JCLElBQUksQ0FBQyxZQUFZLEVBQ2pCLFFBQVEsQ0FBQyxVQUFVLEVBQ25CLElBQUksQ0FBQyxtQkFBbUIsQ0FDekIsQ0FBQztTQUNIO0lBQ0gsQ0FBQztJQUVNLFNBQVM7UUFDZCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLEtBQUssUUFBUSxDQUFDLEdBQUcsQ0FBQztJQUMxRCxDQUFDO0lBRUQsZ0JBQWdCO0lBQ1QsVUFBVTtRQUNmLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNsQixNQUFNLFlBQVksR0FBRyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDckQsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLFlBQVksQ0FBQztZQUV4Qyw2QkFBNkI7WUFDN0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUUvQyx1REFBdUQ7WUFDdkQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDO1lBQ3JELElBQUksVUFBVSxFQUFFO2dCQUNkLFVBQVUsQ0FBQyxPQUFPLEdBQUcsaUJBQWlCLENBQUM7YUFDeEM7WUFFRCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUN4QztJQUNILENBQUM7SUFFTSxPQUFPLENBQUMsS0FBYztRQUMzQixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDbEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNwQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNqQztJQUNILENBQUM7SUFFRCxxQkFBcUI7SUFDZCxpQkFBaUIsQ0FBQyxlQUF3QixJQUFJO1FBR25ELGlFQUFpRTtRQUNqRSxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztRQUVoRCxpR0FBaUc7UUFDakcsSUFBSSxZQUFZLEVBQUU7WUFDaEIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDekIscUVBQXFFO1lBQ3JFLDRDQUE0QztZQUM1QyxjQUFjLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxNQUFNLENBQUMsQ0FBQztTQUM1RDtRQUVELElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNoQixJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1NBQ3JCO1FBQ0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDdEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztRQUM3QixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztRQUN6QixJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1FBQzVCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsbUJBQW1CO1FBQ3BELElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUVuRCx3RUFBd0U7UUFDeEUsSUFBSSxpQkFBaUIsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtZQUNqRCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDO1lBQy9CLElBQUksQ0FBQyx1QkFBdUIsQ0FBQztnQkFDM0IsU0FBUyxFQUFFLGlCQUFpQjtnQkFDNUIsWUFBWSxFQUFFLElBQUksQ0FBQyxtQkFBbUI7YUFDdkMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztnQkFDWCxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRTtvQkFFakIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQztnQkFDbEMsQ0FBQztnQkFDRCxLQUFLLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtvQkFFZixJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDO2dCQUNsQyxDQUFDO2FBQ0YsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBRU0sWUFBWTtRQUNqQixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsS0FBSyxTQUFTLENBQUMsU0FBUyxDQUFDO0lBQ2xFLENBQUM7SUFFRCxvQkFBb0I7SUFDWixnQkFBZ0IsQ0FDdEIsU0FBaUIsRUFDakIsS0FBYSxFQUNiLFFBQWtCLEVBQ2xCLGVBQWdDLGVBQWUsQ0FBQyxJQUFJO1FBRXBELE1BQU0sS0FBSyxHQUFHO1lBQ1osU0FBUztZQUNULEtBQUs7WUFDTCxRQUFRO1lBQ1IsWUFBWTtTQUNiLENBQUM7UUFDRixjQUFjLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFTyxpQkFBaUI7UUFDdkIsY0FBYyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDNUMsdURBQXVEO1FBQ3ZELGNBQWMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVNLGlCQUFpQjtRQUN0QixPQUFPLENBQUMsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRU0sY0FBYyxDQUFDLFdBQW1CO1FBQ3ZDLE1BQU0sVUFBVSxHQUFHLGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzVELElBQUksQ0FBQyxVQUFVO1lBQUUsT0FBTztRQUV4Qix1REFBdUQ7UUFDdkQseUNBQXlDO1FBQ3pDLE1BQU0sZUFBZSxHQUFHLGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDM0UsSUFBSSxlQUFlLEtBQUssTUFBTSxFQUFFO1lBRTlCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ3pCLGNBQWMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7WUFDdEQsT0FBTztTQUNSO1FBRUQsOEVBQThFO1FBQzlFLG1FQUFtRTtRQUNuRSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsS0FBSyxTQUFTLENBQUMsWUFBWSxFQUFFO1lBRS9ELElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ3pCLE9BQU87U0FDUjtRQUVELElBQUk7WUFDRixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3JDLElBQUksS0FBSyxDQUFDLFNBQVMsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFO2dCQUVsQywwREFBMEQ7Z0JBQzFELElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFFeEMsSUFBSSxLQUFLLENBQUMsWUFBWSxFQUFFO29CQUN0QixJQUFJLENBQUMsbUJBQW1CLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQztpQkFDL0M7Z0JBRUQsSUFBSSxDQUFDLGNBQWMsQ0FDakIsS0FBSyxDQUFDLFNBQVMsRUFDZixLQUFLLENBQUMsS0FBSyxFQUNYLFdBQVcsRUFBRSxzREFBc0Q7Z0JBQ25FLFdBQVcsRUFDWCxJQUFJLENBQUMsbUJBQW1CLENBQ3pCO3FCQUNFLElBQUksQ0FBQyxHQUFHLEVBQUU7b0JBRVQsc0RBQXNEO29CQUN0RCxjQUFjLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO2dCQUN4RCxDQUFDLENBQUM7cUJBQ0QsS0FBSyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7b0JBRWIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQyxrQkFBa0I7Z0JBQzlDLENBQUMsQ0FBQyxDQUFDO2FBQ047U0FDRjtRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBRVYsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7U0FDMUI7SUFDSCxDQUFDO0lBRUQsY0FBYztJQUNkOztPQUVHO0lBQ0ksc0JBQXNCLENBQzNCLE9BQTRCO1FBRTVCLE9BQU8sSUFBSSxDQUFDLFVBQVU7YUFDbkIsSUFBSSxDQUF3QixzQkFBc0IsRUFBRTtZQUNuRCxJQUFJLEVBQUUsT0FBTztZQUNiLE9BQU8sRUFBRSxFQUFFO1NBQ1osQ0FBQzthQUNELElBQUksQ0FDSCxHQUFHLENBQUMsQ0FBQyxRQUFhLEVBQUUsRUFBRSxDQUFDLFFBQWlDLENBQUMsRUFDekQsVUFBVSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDbkIsT0FBTyxDQUFDLEtBQUssQ0FBQyw0Q0FBNEMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNuRSxNQUFNLEtBQUssQ0FBQztRQUNkLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDTixDQUFDO0lBRUQ7O09BRUc7SUFDSyxpQkFBaUIsQ0FBQyxPQUFnQztRQUN4RCxPQUFPLEdBQUcsT0FBTyxDQUFDLFFBQVEsSUFBSSxPQUFPLENBQUMsUUFBUSxJQUFJLE9BQU8sQ0FBQyxNQUFNLElBQUksT0FBTyxDQUFDLFNBQVMsSUFBSSxFQUFFLEVBQUUsQ0FBQztJQUNoRyxDQUFDO0lBSUQ7Ozs7T0FJRztJQUNJLG1CQUFtQixDQUN4QixPQUFnQztRQUVoQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDakQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBRXZCLHFFQUFxRTtRQUNyRSxJQUFJLElBQUksQ0FBQyxXQUFXO1lBQ2hCLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxLQUFLLFFBQVE7WUFDakMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsbUJBQW1CLEVBQUU7WUFFakUsaUNBQWlDO1lBQ2pDLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUU7Z0JBQzFCLE9BQU8sSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUU7b0JBQy9CLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDMUMsQ0FBQyxDQUFDLENBQUM7YUFDSjtZQUVELHlCQUF5QjtZQUN6QixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFO2dCQUM3QixPQUFPLElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFO29CQUMvQixRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFZLENBQUMsUUFBUyxDQUFDLENBQUM7b0JBQzNDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDdEIsQ0FBQyxDQUFDLENBQUM7YUFDSjtTQUNGO1FBRUQsZ0VBQWdFO1FBQ2hFLElBQUksSUFBSSxDQUFDLHNCQUFzQixDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUM3QyxPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFFLENBQUM7U0FDbkQ7UUFFRCwyREFBMkQ7UUFDM0QsTUFBTSxRQUFRLEdBQXlDLElBQUksQ0FBQyxVQUFVO2FBQ25FLElBQUksQ0FBMkIsdUJBQXVCLEVBQUU7WUFDdkQsSUFBSSxFQUFFLE9BQU87WUFDYixPQUFPLEVBQUUsRUFBRTtTQUNaLENBQUM7YUFDRCxJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUU7WUFDcEIsTUFBTSxhQUFhLEdBQUcsUUFBb0MsQ0FBQztZQUMzRCw0QkFBNEI7WUFDNUIsSUFBSSxDQUFDLFdBQVcsR0FBRztnQkFDakIsR0FBRyxFQUFFLFFBQVE7Z0JBQ2IsUUFBUSxFQUFFLGFBQWE7Z0JBQ3ZCLEtBQUssRUFBRSxJQUFJO2dCQUNYLFNBQVMsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFO2FBQ3RCLENBQUM7WUFDRixPQUFPLGFBQWEsQ0FBQztRQUN2QixDQUFDLENBQUMsRUFDRixVQUFVLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNuQixPQUFPLENBQUMsS0FBSyxDQUFDLHlDQUF5QyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ2hFLHVCQUF1QjtZQUN2QixJQUFJLENBQUMsV0FBVyxHQUFHO2dCQUNqQixHQUFHLEVBQUUsUUFBUTtnQkFDYixRQUFRLEVBQUUsSUFBSTtnQkFDZCxLQUFLLEVBQUUsS0FBSztnQkFDWixTQUFTLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRTthQUN0QixDQUFDO1lBQ0YsTUFBTSxLQUFLLENBQUM7UUFDZCxDQUFDLENBQUM7UUFDRixnRUFBZ0U7UUFDaEUsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUNaLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDL0MsQ0FBQyxDQUFDO1FBQ0Ysd0RBQXdEO1FBQ3hELFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FDZixDQUFDO1FBRUosSUFBSSxDQUFDLHNCQUFzQixDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDcEQsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksb0JBQW9CLENBQUMsT0FBb0M7UUFDOUQsT0FBTyxJQUFJLENBQUMsVUFBVTthQUNuQixLQUFLLENBQU0sNEJBQTRCLEVBQUU7WUFDeEMsSUFBSSxFQUFFLE9BQU87WUFDYixPQUFPLEVBQUUsRUFBRTtTQUNaLENBQUM7YUFDRCxJQUFJLENBQ0gsVUFBVSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDbkIsT0FBTyxDQUFDLEtBQUssQ0FBQywwQ0FBMEMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNqRSxNQUFNLEtBQUssQ0FBQztRQUNkLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDTixDQUFDO0lBRU0sdUJBQXVCLENBQUMsT0FBZ0M7UUFDN0QsT0FBTyxJQUFJLENBQUMsVUFBVTthQUNuQixJQUFJLENBQXdCLHVCQUF1QixFQUFFO1lBQ3BELElBQUksRUFBRSxPQUFPO1lBQ2IsT0FBTyxFQUFFLEVBQUU7U0FDWixDQUFDO2FBQ0QsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLFFBQWEsRUFBRSxFQUFFLENBQUMsUUFBaUMsQ0FBQyxFQUN6RCxVQUFVLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNuQixPQUFPLENBQUMsS0FBSyxDQUFDLDZDQUE2QyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3BFLE1BQU0sS0FBSyxDQUFDO1FBQ2QsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNOLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksZUFBZSxDQUFDLE1BQThCO1FBQ25ELGtHQUFrRztRQUNsRyxNQUFNLGFBQWEsR0FBRyxDQUFDLElBQVksRUFBVSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuRSxNQUFNLFFBQVEsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2hELE1BQU0sTUFBTSxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFNUMsSUFBSSxHQUFXLENBQUM7UUFFaEIsMkNBQTJDO1FBQzNDLDZCQUE2QjtRQUM3Qiw4RkFBOEY7UUFDOUYsV0FBVztRQUNULEdBQUcsR0FBRywyREFBMkQsUUFBUSxXQUFXLE1BQU0sZUFBZSxDQUFDO1FBQzVHLElBQUk7UUFFSixJQUFJLE1BQU0sQ0FBQyxRQUFRLEtBQUssU0FBUyxFQUFFO1lBQ2pDLEdBQUcsSUFBSSxhQUFhLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztTQUN2QztRQUVELE9BQU8sSUFBSSxDQUFDLFVBQVU7YUFDbkIsR0FBRyxDQUFtQixHQUFHLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLENBQUM7YUFDM0MsSUFBSSxDQUNILFVBQVUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ25CLE9BQU8sQ0FBQyxLQUFLLENBQUMscUNBQXFDLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDNUQsTUFBTSxLQUFLLENBQUM7UUFDZCxDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ04sQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksWUFBWSxDQUFDLE9BQTRCO1FBQzlDLHFDQUFxQztRQUNyQyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzVDLE9BQU8sSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQy9CLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsZ0NBQWdDLENBQUMsQ0FBQyxDQUFDO1lBQzlELENBQUMsQ0FBQyxDQUFDO1NBQ0o7UUFFRCxPQUFPLElBQUksQ0FBQyxVQUFVO2FBQ25CLElBQUksQ0FBTyw4QkFBOEIsRUFBRTtZQUMxQyxJQUFJLEVBQUUsT0FBTztZQUNiLE9BQU8sRUFBRSxFQUFFO1NBQ1osQ0FBQzthQUNELElBQUksQ0FDSCxVQUFVLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNuQixPQUFPLENBQUMsS0FBSyxDQUFDLGtDQUFrQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3pELE1BQU0sS0FBSyxDQUFDO1FBQ2QsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNOLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksVUFBVTtRQUNmLE9BQU8sSUFBSSxDQUFDLFVBQVU7YUFDbkIsR0FBRyxDQUFtQix3QkFBd0IsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsQ0FBQzthQUNoRSxJQUFJLENBQ0gsVUFBVSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDbkIsT0FBTyxDQUFDLEtBQUssQ0FBQyxnQ0FBZ0MsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN2RCxNQUFNLEtBQUssQ0FBQztRQUNkLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDTixDQUFDO0lBRUQ7OztPQUdHO0lBR0g7O09BRUc7SUFHSDs7T0FFRztJQUNLLHFCQUFxQixDQUFDLE1BQStCO1FBQzNELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDekMsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUU7Z0JBQ2pCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN2QyxDQUFDO1lBQ0QsS0FBSyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFFZixDQUFDO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0sscUJBQXFCLENBQUMsUUFBa0M7UUFDOUQsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQztRQUVqQyxrQ0FBa0M7UUFDbEMsSUFBSSxPQUFPLENBQUMsV0FBVyxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDO1NBQy9DO1FBRUQsZ0NBQWdDO1FBQ2hDLElBQUksT0FBTyxDQUFDLFNBQVMsRUFBRTtZQUNyQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQztZQUMxQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQztTQUM5QztRQUVELHlCQUF5QjtRQUN6QixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFNUMsNEJBQTRCO1FBQzVCLElBQUksT0FBTyxDQUFDLFdBQVcsS0FBSyxTQUFTLEVBQUU7WUFFckMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDbkQ7UUFFRCx1RUFBdUU7UUFDdkUsSUFBSSxPQUFPLENBQUMsZ0JBQWdCLEtBQUssU0FBUyxJQUFJLE9BQU8sQ0FBQyxnQkFBZ0IsS0FBSyxJQUFJLEVBQUU7WUFFL0UsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztTQUM3RDthQUFNLElBQUksT0FBTyxDQUFDLGdCQUFnQixLQUFLLElBQUksRUFBRTtZQUM1QywyQkFBMkI7WUFDM0IsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUMxQztRQUVELDZEQUE2RDtRQUM3RCxJQUFJLE9BQU8sQ0FBQyxhQUFhLEtBQUssU0FBUyxFQUFFO1lBRXZDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1NBQ3ZEO1FBRUQsNEJBQTRCO1FBQzVCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0UsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUU3QyxxREFBcUQ7UUFDckQsSUFBSSxJQUFJLENBQUMsZUFBZSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBRXhDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDckM7UUFFRCxJQUFJLFdBQVcsRUFBRTtZQUNmLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1NBQzdCO1FBRUQsa0RBQWtEO1FBQ2xELE1BQU0sWUFBWSxHQUFzQixPQUFPLENBQUMsS0FBSzthQUNsRCxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFFLENBQUMsQ0FBQyxNQUFpQixLQUFLLFNBQVMsQ0FBQzthQUNqRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDWCxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU07WUFDaEIsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDLE1BQU0sRUFBRTtZQUN4QixNQUFNLEVBQUUsY0FBYyxDQUFDLE9BQU87U0FDL0IsQ0FBQyxDQUFDLENBQUM7UUFFTixJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRWhELGdFQUFnRTtRQUNoRSxNQUFNLFdBQVcsR0FBa0IsT0FBTyxDQUFDLEtBQUs7YUFDN0MsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLE1BQU0sQ0FBQzthQUMvQixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDWCxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU07WUFDaEIsU0FBUyxFQUFFLENBQUMsQ0FBQyxTQUFTO1lBQ3RCLFFBQVEsRUFBRSxDQUFDLENBQUMsUUFBUTtZQUNwQixTQUFTLEVBQUUsQ0FBQyxDQUFDLFNBQVM7U0FDdkIsQ0FBQyxDQUFDLENBQUM7UUFFTixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRDs7T0FFRztJQUNJLHdCQUF3QixDQUM3QixNQUFjLEVBQ2QsV0FBbUI7UUFFbkIsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUM7WUFDL0IsTUFBTTtZQUNOLFdBQVc7WUFDWCxNQUFNLEVBQUUsY0FBYyxDQUFDLGtCQUFrQjtTQUMxQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsbUNBQW1DO0lBQ25DLElBQVcsYUFBYTtRQUN0QixPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQztJQUNuQyxDQUFDO0lBRUQsSUFBVyxXQUFXO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDO0lBQ2pDLENBQUM7SUFFRCxJQUFXLE1BQU07UUFDZixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDNUIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksY0FBYyxDQUNuQixTQUFpQixFQUNqQixLQUFhLEVBQ2IsZ0JBQXdCLEVBQ3hCLGlCQUF5QixFQUN6QixlQUFnQyxlQUFlLENBQUMsSUFBSTtRQUVwRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsU0FBUyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBQzFCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxZQUFZLENBQUM7UUFDeEMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQyxDQUFDLDZCQUE2QjtRQUU5RCx1REFBdUQ7UUFDdkQsSUFBSSxDQUFDLGdCQUFnQixDQUNuQixTQUFTLEVBQ1QsS0FBSyxFQUNMLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLEVBQy9CLFlBQVksQ0FDYixDQUFDO1FBQ0YsNkRBQTZEO1FBQzdELGNBQWMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFFdEQsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNyQyxJQUFJLENBQUMsRUFBRSxDQUFDLHVCQUF1QixFQUFFLEVBQUU7Z0JBQ2pDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUM1QyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsb0NBQW9DLENBQUMsQ0FBQyxDQUFDO2dCQUN4RCxPQUFPO2FBQ1I7WUFFRCxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFFbkUsbURBQW1EO1lBQ25ELElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLGVBQWUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUN6QyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FDeEMsS0FBSyxDQUFDLE1BQU0sRUFDWixpQkFBaUIsRUFDakI7b0JBQ0UsVUFBVSxFQUFFLFFBQVE7b0JBQ3BCLEtBQUssRUFBRSxNQUFNO29CQUNiLE1BQU0sRUFBRSxNQUFNO2lCQUNmLEVBQ0QsQ0FBQyxLQUFLLEVBQUUsRUFBRTtvQkFDUixJQUFJLEtBQUssRUFBRTt3QkFDVCxPQUFPLENBQUMsS0FBSyxDQUFDLDhCQUE4QixFQUFFLEtBQUssQ0FBQyxDQUFDO3FCQUN0RDtnQkFDSCxDQUFDLENBQ0YsQ0FBQztnQkFDRixJQUFJLFVBQVUsRUFBRTtvQkFDZCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztpQkFDbkM7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUVILHNEQUFzRDtZQUN0RCxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUMzQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUN4QyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxRQUFRLEtBQUssS0FBSyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQ3hELENBQUM7WUFDSixDQUFDLENBQUMsQ0FBQztZQUVILCtCQUErQjtZQUMvQixJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxxQkFBcUIsRUFBRSxHQUFHLEVBQUU7Z0JBQzFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUVuRCxvRUFBb0U7Z0JBQ3BFLGdFQUFnRTtnQkFDaEUsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7Z0JBQ2hELElBQUksaUJBQWlCLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUU7b0JBQ2pELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUM7b0JBQy9CLElBQUksQ0FBQyx1QkFBdUIsQ0FBQzt3QkFDM0IsU0FBUyxFQUFFLGlCQUFpQjt3QkFDNUIsWUFBWSxFQUFFLElBQUksQ0FBQyxtQkFBbUI7cUJBQ3ZDLENBQUMsQ0FBQyxTQUFTLENBQUM7d0JBQ1gsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUU7NEJBRWpCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7d0JBQ2xDLENBQUM7d0JBQ0QsS0FBSyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7NEJBRWYsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQzt3QkFDbEMsQ0FBQztxQkFDRixDQUFDLENBQUM7aUJBQ0o7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUVILHFCQUFxQjtZQUNyQixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDcEMsSUFBSSxLQUFLLEVBQUU7b0JBQ1QsT0FBTyxDQUFDLEtBQUssQ0FBQyw4QkFBOEIsRUFBRSxLQUFLLENBQUMsQ0FBQztvQkFDckQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQzVDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDZCxPQUFPO2lCQUNSO2dCQUVELHFDQUFxQztnQkFDckMsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUMsYUFBYSxDQUMvQixnQkFBZ0IsRUFDaEI7b0JBQ0UsVUFBVSxFQUFFLFFBQVE7b0JBQ3BCLEtBQUssRUFBRSxNQUFNO29CQUNiLE1BQU0sRUFBRSxNQUFNO2lCQUNmLEVBQ0QsQ0FBQyxHQUFHLEVBQUUsRUFBRTtvQkFDTixJQUFJLEdBQUcsRUFBRTt3QkFDUCxPQUFPLENBQUMsS0FBSyxDQUFDLCtCQUErQixFQUFFLEdBQUcsQ0FBQyxDQUFDO3dCQUNwRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQzt3QkFDNUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO3dCQUNaLE9BQU87cUJBQ1I7b0JBRUQscUJBQXFCO29CQUNyQixJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUU7d0JBQy9DLElBQUksTUFBTSxFQUFFOzRCQUNWLE9BQU8sQ0FBQyxLQUFLLENBQUMsMEJBQTBCLEVBQUUsTUFBTSxDQUFDLENBQUM7NEJBQ2xELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDOzRCQUM1QyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7eUJBQ2hCOzZCQUFNOzRCQUNMLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDOzRCQUNoRCxPQUFPLEVBQUUsQ0FBQzt5QkFDWDtvQkFDSCxDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDLENBQ0YsQ0FBQztZQUNKLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsaUNBQWlDO0lBQzFCLGVBQWUsQ0FBQyxjQUFzQjtRQUMzQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVM7WUFBRSxPQUFPO1FBRTVCLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUM7UUFDaEQsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUU3RCxJQUFJLGdCQUFnQixJQUFJLFlBQVksRUFBRTtZQUNwQyxZQUFZLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLENBQUM7U0FDNUM7SUFDSCxDQUFDO0lBRU0saUJBQWlCLENBQUMsY0FBc0I7UUFDN0MsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUM3RCxJQUFJLENBQUMsWUFBWTtZQUFFLE9BQU87UUFFMUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRTtZQUN0QyxNQUFNLGlCQUFpQixHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUM7WUFDN0MsSUFBSSxpQkFBaUIsRUFBRTtnQkFDckIsWUFBWSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO2FBQzdDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksZUFBZSxDQUFDLGNBQXNCO1FBQzNDLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLFlBQVk7WUFBRSxPQUFPO1FBRTFCLDJDQUEyQztRQUMzQyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRTtZQUM5RCxZQUFZLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDdEQsT0FBTztTQUNSO1FBRUQsdUNBQXVDO1FBQ3ZDLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUU7WUFDM0IsWUFBWSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ2xEO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ksc0JBQXNCO1FBQzNCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQyxlQUFlLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUM5QyxDQUFDOzt3R0F4NEJVLFVBQVUsa0JBMkVYLGVBQWUsYUFDZixVQUFVOzRHQTVFVCxVQUFVLGNBSFQsTUFBTTs0RkFHUCxVQUFVO2tCQUp0QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBNkVJLE1BQU07MkJBQUMsZUFBZTs7MEJBQ3RCLE1BQU07MkJBQUMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVGFzVXRpbGl0eVNlcnZpY2UgfSBmcm9tICcuL3Rhcy11dGlsaXR5LnNlcnZpY2UnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAsIGZpbmFsaXplLCBzaGFyZVJlcGxheSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCAqIGFzIE9UIGZyb20gJ0BvcGVudG9rL2NsaWVudCc7XG5pbXBvcnQge1xuICBHZW5lcmF0ZVRva2VuUmVzcG9uc2UsXG4gIFN0YXJ0U2Vzc2lvblJlcXVlc3QsXG4gIEZpbmlzaFNlc3Npb25SZXNwb25zZSxcbiAgUHJveHlWaWRlb1N0YXR1c1JlcXVlc3QsXG4gIFByb3h5VmlkZW9TdGF0dXNSZXNwb25zZSxcbiAgUHJveHlWaWRlb0ZpbmlzaFJlcXVlc3QsXG4gIFByb3h5VmlkZW9Vc2VyTW9kaWZ5UmVxdWVzdCxcbiAgVXNlckNhbGxBY3Rpb24sXG4gIFJvb21Vc2VyU3RhdHVzLFxuICBHZW9TdGF0dXMsXG4gIFRhc0J1c2luZXNzUm9sZSxcbiAgQ2FsbFN0YXRlLFxuICBWaWV3TW9kZSxcbiAgV2FpdGluZ1Jvb21Vc2VyLFxuICBVc2VyR2VvSW5mbyxcbiAgVGFzQXBwb2ludG1lbnQsXG4gIEdldEFwcG9pbnRtZW50c1JlcXVlc3QsXG4gIFNhdmVGZWVkYmFja1JlcXVlc3QsXG4gIEZlZWRiYWNrTW90aXZlLFxufSBmcm9tICcuLi9pbnRlcmZhY2VzL3Rhcy5pbnRlcmZhY2VzJztcbmltcG9ydCB7XG4gIFRBU19DT05GSUcsXG4gIFRBU19IVFRQX0NMSUVOVCxcbiAgVGFzQ29uZmlnLFxuICBUYXNIdHRwQ2xpZW50LFxufSBmcm9tICcuLi9jb25maWcvdGFzLmNvbmZpZyc7XG5cbi8vIFJlLWV4cG9ydCBlbnVtcyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuZXhwb3J0IHsgQ2FsbFN0YXRlLCBWaWV3TW9kZSwgVGFzQnVzaW5lc3NSb2xlLCBVc2VyQ2FsbEFjdGlvbiwgUm9vbVVzZXJTdGF0dXMsIEdlb1N0YXR1cyB9O1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG4gIFxuZXhwb3J0IGNsYXNzIFRhc1NlcnZpY2Uge1xuICBwcml2YXRlIHNlc3Npb246IE9ULlNlc3Npb24gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBwdWJsaXNoZXI6IE9ULlB1Ymxpc2hlciB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHN1YnNjcmliZXJzOiBPVC5TdWJzY3JpYmVyW10gPSBbXTtcblxuICBwcml2YXRlIGNhbGxTdGF0ZVN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PENhbGxTdGF0ZT4oQ2FsbFN0YXRlLklETEUpO1xuICBwdWJsaWMgY2FsbFN0YXRlJCA9IHRoaXMuY2FsbFN0YXRlU3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICBwcml2YXRlIHZpZXdNb2RlU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Vmlld01vZGU+KFZpZXdNb2RlLkZVTExTQ1JFRU4pO1xuICBwdWJsaWMgdmlld01vZGUkID0gdGhpcy52aWV3TW9kZVN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgcHJpdmF0ZSBpc011dGVkU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwdWJsaWMgaXNNdXRlZCQgPSB0aGlzLmlzTXV0ZWRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIC8vIFNlc3Npb24gaW5mbyBmb3IgUGlQIG1vZGUgcmVzdG9yYXRpb25cbiAgcHJpdmF0ZSBjdXJyZW50U2Vzc2lvbklkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBjdXJyZW50VG9rZW46IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHJlYWRvbmx5IFNUT1JBR0VfS0VZID0gJ3Rhc19zZXNzaW9uX3N0YXRlJztcbiAgcHJpdmF0ZSByZWFkb25seSBESVNDT05ORUNURURfRkxBR19LRVkgPSAndGFzX3Nlc3Npb25fZGlzY29ubmVjdGVkJztcbiAgcHJpdmF0ZSBpc0ZpbmlzaGluZ1Nlc3Npb246IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvLyBQcm94eS12aWRlbyBjaXJjdWl0IHN0YXRlXG4gIHByaXZhdGUgcHJveHlWaWRlb1Nlc3Npb25JZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgcHJveHlWaWRlb1Rva2VuOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBjdXJyZW50QnVzaW5lc3NSb2xlOiBUYXNCdXNpbmVzc1JvbGUgPSBUYXNCdXNpbmVzc1JvbGUuVVNFUjtcblxuICAvLyBXYWl0aW5nIHJvb20gYW5kIHN0YXR1cyBwb2xsaW5nXG4gIHByaXZhdGUgd2FpdGluZ1Jvb21Vc2Vyc1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFdhaXRpbmdSb29tVXNlcltdPihbXSk7XG4gIHB1YmxpYyB3YWl0aW5nUm9vbVVzZXJzJCA9IHRoaXMud2FpdGluZ1Jvb21Vc2Vyc1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgcHJpdmF0ZSBvd25lckhhc0pvaW5lZFN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHVibGljIG93bmVySGFzSm9pbmVkJCA9IHRoaXMub3duZXJIYXNKb2luZWRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIC8vIE9ic2VydmFibGUgdGhhdCBlbWl0cyB0cnVlIHdoZW4gb3duZXIgd2FzIHByZXNlbnQgYnV0IHRoZW4gbGVmdFxuICBwcml2YXRlIG93bmVySGFzTGVmdFN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHVibGljIG93bmVySGFzTGVmdCQgPSB0aGlzLm93bmVySGFzTGVmdFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgcHJpdmF0ZSBqb2luYWJsZVN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHVibGljIGpvaW5hYmxlJCA9IHRoaXMuam9pbmFibGVTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIC8vIE9ic2VydmFibGUgZm9yIHdoZW4gYmFja2VuZCByZXF1ZXN0cyBnZW9sb2NhdGlvbiBhY3RpdmF0aW9uXG4gIHByaXZhdGUgYWN0aXZhdGVHZW9TdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHB1YmxpYyBhY3RpdmF0ZUdlbyQgPSB0aGlzLmFjdGl2YXRlR2VvU3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICAvLyBPYnNlcnZhYmxlIGZvciB3aGVuIGdlbyByZXF1ZXN0IGlzIGFjdGl2ZSAob3duZXIgd2FpdGluZyBmb3IgdXNlciByZXNwb25zZSlcbiAgcHJpdmF0ZSBnZW9SZXF1ZXN0QWN0aXZlU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwdWJsaWMgZ2VvUmVxdWVzdEFjdGl2ZSQgPSB0aGlzLmdlb1JlcXVlc3RBY3RpdmVTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIC8vIE9ic2VydmFibGUgZm9yIHdoZW4gYWxsIGdlbyBoYXMgYmVlbiBncmFudGVkXG4gIHByaXZhdGUgYWxsR2VvR3JhbnRlZFN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHVibGljIGFsbEdlb0dyYW50ZWQkID0gdGhpcy5hbGxHZW9HcmFudGVkU3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICAvLyBPYnNlcnZhYmxlIGZvciBpbmRpdmlkdWFsIHVzZXIgZ2VvIHN0YXR1cyAoZm9yIG93bmVyIHBhbmVsKVxuICBwcml2YXRlIHVzZXJHZW9JbmZvU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VXNlckdlb0luZm9bXT4oW10pO1xuICBwdWJsaWMgdXNlckdlb0luZm8kID0gdGhpcy51c2VyR2VvSW5mb1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgcHJpdmF0ZSBzdGF0dXNQb2xsaW5nSW50ZXJ2YWw6IFJldHVyblR5cGU8dHlwZW9mIHNldEludGVydmFsPiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHJlYWRvbmx5IERFRkFVTFRfUE9MTF9JTlRFUlZBTF9NUyA9IDMwMDAwOyAvLyBEZWZhdWx0IDMwc1xuICBwcml2YXRlIHdhc093bmVyUHJlc2VudCA9IGZhbHNlO1xuXG4gIC8vIEN1cnJlbnQgY2FsbCBjb250ZXh0XG4gIHByaXZhdGUgY3VycmVudEFwcG9pbnRtZW50SWQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGN1cnJlbnRWaWRlb0NhbGxJZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgY3VycmVudFRlbmFudDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgLy8gU3RhdHVzIGNhY2hlICgxIHNlY29uZCBUVEwpXG4gIHByaXZhdGUgcmVhZG9ubHkgU1RBVFVTX0NBQ0hFX1RUTF9NUyA9IDEwMDA7XG4gIHByaXZhdGUgc3RhdHVzQ2FjaGU6IHtcbiAgICBrZXk6IHN0cmluZztcbiAgICByZXNwb25zZTogUHJveHlWaWRlb1N0YXR1c1Jlc3BvbnNlIHwgbnVsbDtcbiAgICBlcnJvcjogYW55IHwgbnVsbDtcbiAgICB0aW1lc3RhbXA6IG51bWJlcjtcbiAgfSB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoVEFTX0hUVFBfQ0xJRU5UKSBwcml2YXRlIGh0dHBDbGllbnQ6IFRhc0h0dHBDbGllbnQsXG4gICAgQEluamVjdChUQVNfQ09ORklHKSBwcml2YXRlIGNvbmZpZzogVGFzQ29uZmlnLFxuICAgIHByaXZhdGUgdGFzVXRpbGl0eVNlcnZpY2U6IFRhc1V0aWxpdHlTZXJ2aWNlXG4gICkge31cblxuICAvLyAuLi4gKEdldHRlcnMgYW5kIG90aGVyIG1ldGhvZHMgcmVtYWluIHVuY2hhbmdlZClcblxuICAvKipcbiAgICogU3RhcnQgYXV0b21hdGljIHN0YXR1cyBwb2xsaW5nIGZvciB0aGUgY3VycmVudCBzZXNzaW9uLlxuICAgKiBTdGF0dXMgaXMgcG9sbGVkIGV2ZXJ5IGludGVydmFsTXMgKGRlZmF1bHQgMzBzKS5cbiAgICovXG4gIHB1YmxpYyBzdGFydFN0YXR1c1BvbGxpbmcoXG4gICAgcGFyYW1zOiBQcm94eVZpZGVvU3RhdHVzUmVxdWVzdCwgXG4gICAgaW50ZXJ2YWxNczogbnVtYmVyID0gdGhpcy5ERUZBVUxUX1BPTExfSU5URVJWQUxfTVNcbiAgKTogdm9pZCB7XG4gICAgdGhpcy5zdG9wU3RhdHVzUG9sbGluZygpOyAvLyBDbGVhciBhbnkgZXhpc3RpbmcgcG9sbGluZ1xuXG4gICAgLy8gU3RvcmUgY29udGV4dCBmb3IgcG9sbGluZ1xuICAgIGlmIChwYXJhbXMuc2Vzc2lvbklkKSB7XG4gICAgICB0aGlzLmN1cnJlbnRTZXNzaW9uSWQgPSBwYXJhbXMuc2Vzc2lvbklkO1xuICAgIH1cbiAgICBpZiAocGFyYW1zLmFwcG9pbnRtZW50SWQpIHtcbiAgICAgIHRoaXMuY3VycmVudEFwcG9pbnRtZW50SWQgPSBwYXJhbXMuYXBwb2ludG1lbnRJZDtcbiAgICB9XG4gICAgaWYgKHBhcmFtcy50ZW5hbnQpIHtcbiAgICAgIHRoaXMuY3VycmVudFRlbmFudCA9IHBhcmFtcy50ZW5hbnQ7XG4gICAgfVxuXG5cblxuICAgIC8vIEluaXRpYWwgc3RhdHVzIGZldGNoXG4gICAgdGhpcy5mZXRjaEFuZFByb2Nlc3NTdGF0dXMocGFyYW1zKTtcblxuICAgIC8vIFNldCB1cCBwZXJpb2RpYyBwb2xsaW5nXG4gICAgdGhpcy5zdGF0dXNQb2xsaW5nSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICB0aGlzLmZldGNoQW5kUHJvY2Vzc1N0YXR1cyhwYXJhbXMpO1xuICAgIH0sIGludGVydmFsTXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0b3AgYXV0b21hdGljIHN0YXR1cyBwb2xsaW5nLlxuICAgKi9cbiAgcHVibGljIHN0b3BTdGF0dXNQb2xsaW5nKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnN0YXR1c1BvbGxpbmdJbnRlcnZhbCkge1xuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLnN0YXR1c1BvbGxpbmdJbnRlcnZhbCk7XG4gICAgICB0aGlzLnN0YXR1c1BvbGxpbmdJbnRlcnZhbCA9IG51bGw7XG4gICAgfVxuICAgIC8vIERvIE5PVCByZXNldCB3YWl0aW5nIHJvb20gc3RhdGUgaGVyZSwgYXMgb3RoZXIgY29tcG9uZW50cyBtaWdodCBvYnNlcnZlIGl0XG4gIH1cblxuICAvKipcbiAgICogUmVzZXQgcG9sbGluZyBzdGF0ZSAod2FpdGluZyByb29tLCBvd25lciBzdGF0dXMsIGV0YylcbiAgICogQ2FsbCB0aGlzIHdoZW4gY29tcGxldGVseSBleGl0aW5nIHRoZSBmbG93XG4gICAqL1xuICBwdWJsaWMgcmVzZXRQb2xsaW5nU3RhdGUoKTogdm9pZCB7XG4gICAgdGhpcy5zdG9wU3RhdHVzUG9sbGluZygpO1xuICAgIHRoaXMud2FpdGluZ1Jvb21Vc2Vyc1N1YmplY3QubmV4dChbXSk7XG4gICAgdGhpcy5vd25lckhhc0pvaW5lZFN1YmplY3QubmV4dChmYWxzZSk7XG4gICAgdGhpcy5vd25lckhhc0xlZnRTdWJqZWN0Lm5leHQoZmFsc2UpO1xuICAgIHRoaXMuam9pbmFibGVTdWJqZWN0Lm5leHQoZmFsc2UpO1xuICAgIHRoaXMud2FzT3duZXJQcmVzZW50ID0gZmFsc2U7XG4gIH1cblxuICAvLyBHZXR0ZXJzXG4gIHB1YmxpYyBnZXQgY3VycmVudFNlc3Npb24oKTogT1QuU2Vzc2lvbiB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLnNlc3Npb247XG4gIH1cblxuICBwdWJsaWMgZ2V0IGN1cnJlbnRQdWJsaXNoZXIoKTogT1QuUHVibGlzaGVyIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMucHVibGlzaGVyO1xuICB9XG5cbiAgcHVibGljIGdldCBjdXJyZW50U3Vic2NyaWJlcnMoKTogT1QuU3Vic2NyaWJlcltdIHtcbiAgICByZXR1cm4gdGhpcy5zdWJzY3JpYmVycztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc2Vzc2lvbklkKCk6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRTZXNzaW9uSWQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHRva2VuKCk6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRUb2tlbjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcHJveHlTZXNzaW9uSWQoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMucHJveHlWaWRlb1Nlc3Npb25JZDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcHJveHlUb2tlbigpOiBzdHJpbmcgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5wcm94eVZpZGVvVG9rZW47XG4gIH1cblxuICBwdWJsaWMgZ2V0IGJ1c2luZXNzUm9sZSgpOiBUYXNCdXNpbmVzc1JvbGUge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRCdXNpbmVzc1JvbGU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlzTXV0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNNdXRlZFN1YmplY3QuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIC8vIFZpZXcgTW9kZSBNZXRob2RzXG4gIHB1YmxpYyBzZXRWaWV3TW9kZShtb2RlOiBWaWV3TW9kZSk6IHZvaWQge1xuICAgIHRoaXMudmlld01vZGVTdWJqZWN0Lm5leHQobW9kZSk7XG4gICAgaWYgKHRoaXMuY3VycmVudFNlc3Npb25JZCAmJiB0aGlzLmN1cnJlbnRUb2tlbikge1xuICAgICAgdGhpcy5zYXZlU2Vzc2lvblN0YXRlKFxuICAgICAgICB0aGlzLmN1cnJlbnRTZXNzaW9uSWQsXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLFxuICAgICAgICBtb2RlLFxuICAgICAgICB0aGlzLmN1cnJlbnRCdXNpbmVzc1JvbGVcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGVudGVyUGlwTW9kZSgpOiB2b2lkIHtcbiAgICB0aGlzLnZpZXdNb2RlU3ViamVjdC5uZXh0KFZpZXdNb2RlLlBJUCk7XG4gICAgaWYgKHRoaXMuY3VycmVudFNlc3Npb25JZCAmJiB0aGlzLmN1cnJlbnRUb2tlbikge1xuICAgICAgdGhpcy5zYXZlU2Vzc2lvblN0YXRlKFxuICAgICAgICB0aGlzLmN1cnJlbnRTZXNzaW9uSWQsXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLFxuICAgICAgICBWaWV3TW9kZS5QSVAsXG4gICAgICAgIHRoaXMuY3VycmVudEJ1c2luZXNzUm9sZVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZXhpdFBpcE1vZGUoKTogdm9pZCB7XG4gICAgdGhpcy52aWV3TW9kZVN1YmplY3QubmV4dChWaWV3TW9kZS5GVUxMU0NSRUVOKTtcbiAgICBpZiAodGhpcy5jdXJyZW50U2Vzc2lvbklkICYmIHRoaXMuY3VycmVudFRva2VuKSB7XG4gICAgICB0aGlzLnNhdmVTZXNzaW9uU3RhdGUoXG4gICAgICAgIHRoaXMuY3VycmVudFNlc3Npb25JZCxcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4sXG4gICAgICAgIFZpZXdNb2RlLkZVTExTQ1JFRU4sXG4gICAgICAgIHRoaXMuY3VycmVudEJ1c2luZXNzUm9sZVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaXNQaXBNb2RlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnZpZXdNb2RlU3ViamVjdC5nZXRWYWx1ZSgpID09PSBWaWV3TW9kZS5QSVA7XG4gIH1cblxuICAvLyBBdWRpbyBDb250cm9sXG4gIHB1YmxpYyB0b2dnbGVNdXRlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnB1Ymxpc2hlcikge1xuICAgICAgY29uc3QgbmV3TXV0ZVN0YXRlID0gIXRoaXMuaXNNdXRlZFN1YmplY3QuZ2V0VmFsdWUoKTtcbiAgICAgIGNvbnN0IHNob3VsZEVuYWJsZUF1ZGlvID0gIW5ld011dGVTdGF0ZTtcblxuICAgICAgLy8gVXNlIE9wZW5Ub2sncyBwdWJsaXNoQXVkaW9cbiAgICAgIHRoaXMucHVibGlzaGVyLnB1Ymxpc2hBdWRpbyhzaG91bGRFbmFibGVBdWRpbyk7XG5cbiAgICAgIC8vIEFsc28gZGlyZWN0bHkgY29udHJvbCB0aGUgTWVkaWFTdHJlYW1UcmFjayBhcyBiYWNrdXBcbiAgICAgIGNvbnN0IGF1ZGlvVHJhY2sgPSB0aGlzLnB1Ymxpc2hlci5nZXRBdWRpb1NvdXJjZT8uKCk7XG4gICAgICBpZiAoYXVkaW9UcmFjaykge1xuICAgICAgICBhdWRpb1RyYWNrLmVuYWJsZWQgPSBzaG91bGRFbmFibGVBdWRpbztcbiAgICAgIH1cblxuICAgICAgdGhpcy5pc011dGVkU3ViamVjdC5uZXh0KG5ld011dGVTdGF0ZSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNldE11dGUobXV0ZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5wdWJsaXNoZXIpIHtcbiAgICAgIHRoaXMucHVibGlzaGVyLnB1Ymxpc2hBdWRpbyghbXV0ZWQpO1xuICAgICAgdGhpcy5pc011dGVkU3ViamVjdC5uZXh0KG11dGVkKTtcbiAgICB9XG4gIH1cblxuICAvLyBTZXNzaW9uIE1hbmFnZW1lbnRcbiAgcHVibGljIGRpc2Nvbm5lY3RTZXNzaW9uKGNsZWFyU3RvcmFnZTogYm9vbGVhbiA9IHRydWUpOiB2b2lkIHtcblxuXG4gICAgLy8gQ2FsbCBmaW5pc2hTZXNzaW9uIGJlZm9yZSBkaXNjb25uZWN0aW5nIGlmIHdlIGhhdmUgYSBzZXNzaW9uSWRcbiAgICBjb25zdCBzZXNzaW9uSWRUb0ZpbmlzaCA9IHRoaXMuY3VycmVudFNlc3Npb25JZDtcblxuICAgIC8vIENsZWFyIHN0b3JhZ2UgRklSU1QgdG8gcHJldmVudCBhbnkgcmFjZSBjb25kaXRpb25zIHdoZXJlIHN0YXRlIG1pZ2h0IGJlIHNhdmVkIGFmdGVyIGRpc2Nvbm5lY3RcbiAgICBpZiAoY2xlYXJTdG9yYWdlKSB7XG4gICAgICB0aGlzLmNsZWFyU2Vzc2lvblN0YXRlKCk7XG4gICAgICAvLyBTZXQgYSBmbGFnIHRvIGluZGljYXRlIHRoaXMgc2Vzc2lvbiB3YXMgaW50ZW50aW9uYWxseSBkaXNjb25uZWN0ZWRcbiAgICAgIC8vIFRoaXMgcHJldmVudHMgcmVjb25uZWN0aW9uIG9uIHBhZ2UgcmVsb2FkXG4gICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKHRoaXMuRElTQ09OTkVDVEVEX0ZMQUdfS0VZLCAndHJ1ZScpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNlc3Npb24pIHtcbiAgICAgIHRoaXMuc2Vzc2lvbi5kaXNjb25uZWN0KCk7XG4gICAgICB0aGlzLnNlc3Npb24gPSBudWxsO1xuICAgIH1cbiAgICB0aGlzLnB1Ymxpc2hlciA9IG51bGw7XG4gICAgdGhpcy5zdWJzY3JpYmVycyA9IFtdO1xuICAgIHRoaXMuY3VycmVudFNlc3Npb25JZCA9IG51bGw7XG4gICAgdGhpcy5jdXJyZW50VG9rZW4gPSBudWxsO1xuICAgIHRoaXMucHJveHlWaWRlb1Nlc3Npb25JZCA9IG51bGw7XG4gICAgdGhpcy5wcm94eVZpZGVvVG9rZW4gPSBudWxsO1xuICAgIHRoaXMuaXNNdXRlZFN1YmplY3QubmV4dChmYWxzZSk7IC8vIFJlc2V0IG11dGUgc3RhdGVcbiAgICB0aGlzLnZpZXdNb2RlU3ViamVjdC5uZXh0KFZpZXdNb2RlLkZVTExTQ1JFRU4pO1xuICAgIHRoaXMuY2FsbFN0YXRlU3ViamVjdC5uZXh0KENhbGxTdGF0ZS5ESVNDT05ORUNURUQpO1xuXG4gICAgLy8gQ2FsbCBwcm94eSBmaW5pc2ggYWZ0ZXIgZGlzY29ubmVjdGluZyAob25seSBpZiBub3QgYWxyZWFkeSBmaW5pc2hpbmcpXG4gICAgaWYgKHNlc3Npb25JZFRvRmluaXNoICYmICF0aGlzLmlzRmluaXNoaW5nU2Vzc2lvbikge1xuICAgICAgdGhpcy5pc0ZpbmlzaGluZ1Nlc3Npb24gPSB0cnVlO1xuICAgICAgdGhpcy5maW5pc2hQcm94eVZpZGVvU2Vzc2lvbih7XG4gICAgICAgIHNlc3Npb25JZDogc2Vzc2lvbklkVG9GaW5pc2gsXG4gICAgICAgIGJ1c2luZXNzUm9sZTogdGhpcy5jdXJyZW50QnVzaW5lc3NSb2xlLFxuICAgICAgfSkuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKHJlc3BvbnNlKSA9PiB7XG5cbiAgICAgICAgICB0aGlzLmlzRmluaXNoaW5nU2Vzc2lvbiA9IGZhbHNlO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG5cbiAgICAgICAgICB0aGlzLmlzRmluaXNoaW5nU2Vzc2lvbiA9IGZhbHNlO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGlzQ2FsbEFjdGl2ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jYWxsU3RhdGVTdWJqZWN0LmdldFZhbHVlKCkgPT09IENhbGxTdGF0ZS5DT05ORUNURUQ7XG4gIH1cblxuICAvLyBTdGF0ZSBQZXJzaXN0ZW5jZVxuICBwcml2YXRlIHNhdmVTZXNzaW9uU3RhdGUoXG4gICAgc2Vzc2lvbklkOiBzdHJpbmcsXG4gICAgdG9rZW46IHN0cmluZyxcbiAgICB2aWV3TW9kZTogVmlld01vZGUsXG4gICAgYnVzaW5lc3NSb2xlOiBUYXNCdXNpbmVzc1JvbGUgPSBUYXNCdXNpbmVzc1JvbGUuVVNFUlxuICApOiB2b2lkIHtcbiAgICBjb25zdCBzdGF0ZSA9IHtcbiAgICAgIHNlc3Npb25JZCxcbiAgICAgIHRva2VuLFxuICAgICAgdmlld01vZGUsXG4gICAgICBidXNpbmVzc1JvbGUsXG4gICAgfTtcbiAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKHRoaXMuU1RPUkFHRV9LRVksIEpTT04uc3RyaW5naWZ5KHN0YXRlKSk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFyU2Vzc2lvblN0YXRlKCk6IHZvaWQge1xuICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5TVE9SQUdFX0tFWSk7XG4gICAgLy8gQWxzbyBjbGVhciB0aGUgZGlzY29ubmVjdGVkIGZsYWcgd2hlbiBjbGVhcmluZyBzdGF0ZVxuICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5ESVNDT05ORUNURURfRkxBR19LRVkpO1xuICB9XG5cbiAgcHVibGljIGNhblJlc3RvcmVTZXNzaW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXNlc3Npb25TdG9yYWdlLmdldEl0ZW0odGhpcy5TVE9SQUdFX0tFWSk7XG4gIH1cblxuICBwdWJsaWMgcmVzdG9yZVNlc3Npb24oY29udGFpbmVySWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHNhdmVkU3RhdGUgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKHRoaXMuU1RPUkFHRV9LRVkpO1xuICAgIGlmICghc2F2ZWRTdGF0ZSkgcmV0dXJuO1xuXG4gICAgLy8gQ2hlY2sgaWYgdGhpcyBzZXNzaW9uIHdhcyBpbnRlbnRpb25hbGx5IGRpc2Nvbm5lY3RlZFxuICAgIC8vIElmIHNvLCBkb24ndCByZXN0b3JlIGl0IG9uIHBhZ2UgcmVsb2FkXG4gICAgY29uc3Qgd2FzRGlzY29ubmVjdGVkID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSh0aGlzLkRJU0NPTk5FQ1RFRF9GTEFHX0tFWSk7XG4gICAgaWYgKHdhc0Rpc2Nvbm5lY3RlZCA9PT0gJ3RydWUnKSB7XG5cbiAgICAgIHRoaXMuY2xlYXJTZXNzaW9uU3RhdGUoKTtcbiAgICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5ESVNDT05ORUNURURfRkxBR19LRVkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIERvbid0IHJlc3RvcmUgaWYgd2UncmUgYWxyZWFkeSBkaXNjb25uZWN0ZWQgb3IgaWYgdGhlcmUncyBubyBhY3RpdmUgc2Vzc2lvblxuICAgIC8vIFRoaXMgcHJldmVudHMgcmVzdG9yaW5nIHNlc3Npb25zIHRoYXQgd2VyZSBwcm9wZXJseSBkaXNjb25uZWN0ZWRcbiAgICBpZiAodGhpcy5jYWxsU3RhdGVTdWJqZWN0LmdldFZhbHVlKCkgPT09IENhbGxTdGF0ZS5ESVNDT05ORUNURUQpIHtcblxuICAgICAgdGhpcy5jbGVhclNlc3Npb25TdGF0ZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdGF0ZSA9IEpTT04ucGFyc2Uoc2F2ZWRTdGF0ZSk7XG4gICAgICBpZiAoc3RhdGUuc2Vzc2lvbklkICYmIHN0YXRlLnRva2VuKSB7XG5cbiAgICAgICAgLy8gRm9yY2UgUGlQIG1vZGUgZm9yIHJlc3RvcmF0aW9uIHRvIGVuc3VyZSBVSSBjb25zaXN0ZW5jeVxuICAgICAgICB0aGlzLnZpZXdNb2RlU3ViamVjdC5uZXh0KFZpZXdNb2RlLlBJUCk7XG5cbiAgICAgICAgaWYgKHN0YXRlLmJ1c2luZXNzUm9sZSkge1xuICAgICAgICAgIHRoaXMuY3VycmVudEJ1c2luZXNzUm9sZSA9IHN0YXRlLmJ1c2luZXNzUm9sZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29ubmVjdFNlc3Npb24oXG4gICAgICAgICAgc3RhdGUuc2Vzc2lvbklkLFxuICAgICAgICAgIHN0YXRlLnRva2VuLFxuICAgICAgICAgIGNvbnRhaW5lcklkLCAvLyBVc2UgdGhlIHNhbWUgY29udGFpbmVyIGZvciBib3RoIHNpbmNlIHdlIGFyZSBpbiBQaVBcbiAgICAgICAgICBjb250YWluZXJJZCxcbiAgICAgICAgICB0aGlzLmN1cnJlbnRCdXNpbmVzc1JvbGVcbiAgICAgICAgKVxuICAgICAgICAgIC50aGVuKCgpID0+IHtcblxuICAgICAgICAgICAgLy8gQ2xlYXIgdGhlIGRpc2Nvbm5lY3RlZCBmbGFnIGlmIHJlc3RvcmF0aW9uIHN1Y2NlZWRzXG4gICAgICAgICAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuRElTQ09OTkVDVEVEX0ZMQUdfS0VZKTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5jYXRjaCgoZXJyKSA9PiB7XG5cbiAgICAgICAgICAgIHRoaXMuY2xlYXJTZXNzaW9uU3RhdGUoKTsgLy8gQ2xlYXIgYmFkIHN0YXRlXG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuXG4gICAgICB0aGlzLmNsZWFyU2Vzc2lvblN0YXRlKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gQVBJIE1ldGhvZHNcbiAgLyoqXG4gICAqIFBST1hZIGNpcmN1aXQgdG9rZW46IC92Mi9wcm94eS92aWRlby9zdGFydFxuICAgKi9cbiAgcHVibGljIHN0YXJ0UHJveHlWaWRlb1Nlc3Npb24oXG4gICAgcGF5bG9hZDogU3RhcnRTZXNzaW9uUmVxdWVzdFxuICApOiBPYnNlcnZhYmxlPEdlbmVyYXRlVG9rZW5SZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcbiAgICAgIC5wb3N0PEdlbmVyYXRlVG9rZW5SZXNwb25zZT4oJ3YyL3Byb3h5L3ZpZGVvL3N0YXJ0Jywge1xuICAgICAgICBib2R5OiBwYXlsb2FkLFxuICAgICAgICBoZWFkZXJzOiB7fSxcbiAgICAgIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZXNwb25zZTogYW55KSA9PiByZXNwb25zZSBhcyBHZW5lcmF0ZVRva2VuUmVzcG9uc2UpLFxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1RBUyBTZXJ2aWNlOiBzdGFydFByb3h5VmlkZW9TZXNzaW9uIGZhaWxlZCcsIGVycm9yKTtcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgY2FjaGUga2V5IGZyb20gcmVxdWVzdCBwYXlsb2FkXG4gICAqL1xuICBwcml2YXRlIGdldFN0YXR1c0NhY2hlS2V5KHBheWxvYWQ6IFByb3h5VmlkZW9TdGF0dXNSZXF1ZXN0KTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7cGF5bG9hZC5yb29tVHlwZX0tJHtwYXlsb2FkLmVudGl0eUlkfS0ke3BheWxvYWQudGVuYW50fS0ke3BheWxvYWQuc2Vzc2lvbklkIHx8ICcnfWA7XG4gIH1cblxuICBwcml2YXRlIGluZmxpZ2h0U3RhdHVzUmVxdWVzdHMgPSBuZXcgTWFwPHN0cmluZywgT2JzZXJ2YWJsZTxQcm94eVZpZGVvU3RhdHVzUmVzcG9uc2U+PigpO1xuXG4gIC8qKlxuICAgKiBQUk9YWSBjaXJjdWl0IHN0YXR1czogL3YyL3Byb3h5L3ZpZGVvL3N0YXR1c1xuICAgKiBVc2VzIGEgMS1zZWNvbmQgY2FjaGUgdG8gYXZvaWQgcmVkdW5kYW50IEFQSSBjYWxscyBmcm9tIG11bHRpcGxlIGNvbXBvbmVudHNcbiAgICogSW1wbGVtZW50cyByZXF1ZXN0IGRlZHVwbGljYXRpb24gZm9yIHNpbXVsdGFuZW91cyBjYWxsc1xuICAgKi9cbiAgcHVibGljIGdldFByb3h5VmlkZW9TdGF0dXMoXG4gICAgcGF5bG9hZDogUHJveHlWaWRlb1N0YXR1c1JlcXVlc3RcbiAgKTogT2JzZXJ2YWJsZTxQcm94eVZpZGVvU3RhdHVzUmVzcG9uc2U+IHtcbiAgICBjb25zdCBjYWNoZUtleSA9IHRoaXMuZ2V0U3RhdHVzQ2FjaGVLZXkocGF5bG9hZCk7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblxuICAgIC8vIDEuIENoZWNrIGlmIHdlIGhhdmUgYSB2YWxpZCBjYWNoZWQgcmVzdWx0IChsZXNzIHRoYW4gMSBzZWNvbmQgb2xkKVxuICAgIGlmICh0aGlzLnN0YXR1c0NhY2hlICYmIFxuICAgICAgICB0aGlzLnN0YXR1c0NhY2hlLmtleSA9PT0gY2FjaGVLZXkgJiYgXG4gICAgICAgIChub3cgLSB0aGlzLnN0YXR1c0NhY2hlLnRpbWVzdGFtcCkgPCB0aGlzLlNUQVRVU19DQUNIRV9UVExfTVMpIHtcbiAgICAgIFxuICAgICAgLy8gUmV0dXJuIGNhY2hlZCBlcnJvciBpZiBwcmVzZW50XG4gICAgICBpZiAodGhpcy5zdGF0dXNDYWNoZS5lcnJvcikge1xuICAgICAgICByZXR1cm4gbmV3IE9ic2VydmFibGUob2JzZXJ2ZXIgPT4ge1xuICAgICAgICAgIG9ic2VydmVyLmVycm9yKHRoaXMuc3RhdHVzQ2FjaGUhLmVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIFJldHVybiBjYWNoZWQgcmVzcG9uc2VcbiAgICAgIGlmICh0aGlzLnN0YXR1c0NhY2hlLnJlc3BvbnNlKSB7XG4gICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShvYnNlcnZlciA9PiB7XG4gICAgICAgICAgb2JzZXJ2ZXIubmV4dCh0aGlzLnN0YXR1c0NhY2hlIS5yZXNwb25zZSEpO1xuICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDIuIENoZWNrIGlmIHRoZXJlIGlzIGFscmVhZHkgYW4gaW5mbGlnaHQgcmVxdWVzdCBmb3IgdGhpcyBrZXlcbiAgICBpZiAodGhpcy5pbmZsaWdodFN0YXR1c1JlcXVlc3RzLmhhcyhjYWNoZUtleSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmluZmxpZ2h0U3RhdHVzUmVxdWVzdHMuZ2V0KGNhY2hlS2V5KSE7XG4gICAgfVxuXG4gICAgLy8gMy4gTWFrZSB0aGUgQVBJIGNhbGwsIHNoYXJlIGl0LCBhbmQgY2FjaGUgdGhlIE9ic2VydmFibGVcbiAgICBjb25zdCByZXF1ZXN0JDogT2JzZXJ2YWJsZTxQcm94eVZpZGVvU3RhdHVzUmVzcG9uc2U+ID0gdGhpcy5odHRwQ2xpZW50XG4gICAgICAucG9zdDxQcm94eVZpZGVvU3RhdHVzUmVzcG9uc2U+KCd2Mi9wcm94eS92aWRlby9zdGF0dXMnLCB7XG4gICAgICAgIGJvZHk6IHBheWxvYWQsXG4gICAgICAgIGhlYWRlcnM6IHt9LFxuICAgICAgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCB0eXBlZFJlc3BvbnNlID0gcmVzcG9uc2UgYXMgUHJveHlWaWRlb1N0YXR1c1Jlc3BvbnNlO1xuICAgICAgICAgIC8vIENhY2hlIHN1Y2Nlc3NmdWwgcmVzcG9uc2VcbiAgICAgICAgICB0aGlzLnN0YXR1c0NhY2hlID0ge1xuICAgICAgICAgICAga2V5OiBjYWNoZUtleSxcbiAgICAgICAgICAgIHJlc3BvbnNlOiB0eXBlZFJlc3BvbnNlLFxuICAgICAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgICAgICAgfTtcbiAgICAgICAgICByZXR1cm4gdHlwZWRSZXNwb25zZTtcbiAgICAgICAgfSksXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignVEFTIFNlcnZpY2U6IGdldFByb3h5VmlkZW9TdGF0dXMgZmFpbGVkJywgZXJyb3IpO1xuICAgICAgICAgIC8vIENhY2hlIGVycm9yIHJlc3BvbnNlXG4gICAgICAgICAgdGhpcy5zdGF0dXNDYWNoZSA9IHtcbiAgICAgICAgICAgIGtleTogY2FjaGVLZXksXG4gICAgICAgICAgICByZXNwb25zZTogbnVsbCxcbiAgICAgICAgICAgIGVycm9yOiBlcnJvcixcbiAgICAgICAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9KSxcbiAgICAgICAgLy8gQ2xlYW4gdXAgaW5mbGlnaHQgbWFwIHdoZW4gdGhlIG9ic2VydmFibGUgY29tcGxldGVzIG9yIGVycm9yc1xuICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5pbmZsaWdodFN0YXR1c1JlcXVlc3RzLmRlbGV0ZShjYWNoZUtleSk7XG4gICAgICAgIH0pLFxuICAgICAgICAvLyBTaGFyZSB0aGUgcmVzdWx0IHdpdGggYWxsIHN1YnNjcmliZXJzIChkZWR1cGxpY2F0aW9uKVxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgICAgKTtcblxuICAgIHRoaXMuaW5mbGlnaHRTdGF0dXNSZXF1ZXN0cy5zZXQoY2FjaGVLZXksIHJlcXVlc3QkKTtcbiAgICByZXR1cm4gcmVxdWVzdCQ7XG4gIH1cblxuICAvKipcbiAgICogUFJPWFkgY2lyY3VpdCB1c2VyIG1vZGlmaWNhdGlvbjogL3YyL3Byb3h5L3ZpZGVvL3VzZXIvbW9kaWZ5XG4gICAqL1xuICBwdWJsaWMgbW9kaWZ5UHJveHlWaWRlb1VzZXIocGF5bG9hZDogUHJveHlWaWRlb1VzZXJNb2RpZnlSZXF1ZXN0KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAucGF0Y2g8YW55PigndjIvcHJveHkvdmlkZW8vdXNlci9tb2RpZnknLCB7XG4gICAgICAgIGJvZHk6IHBheWxvYWQsXG4gICAgICAgIGhlYWRlcnM6IHt9LFxuICAgICAgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1RBUyBTZXJ2aWNlOiBtb2RpZnlQcm94eVZpZGVvVXNlciBmYWlsZWQnLCBlcnJvcik7XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgcHVibGljIGZpbmlzaFByb3h5VmlkZW9TZXNzaW9uKHBheWxvYWQ6IFByb3h5VmlkZW9GaW5pc2hSZXF1ZXN0KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgLnBvc3Q8RmluaXNoU2Vzc2lvblJlc3BvbnNlPigndjIvcHJveHkvdmlkZW8vZmluaXNoJywge1xuICAgICAgICBib2R5OiBwYXlsb2FkLFxuICAgICAgICBoZWFkZXJzOiB7fSxcbiAgICAgIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZXNwb25zZTogYW55KSA9PiByZXNwb25zZSBhcyBGaW5pc2hTZXNzaW9uUmVzcG9uc2UpLFxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1RBUyBTZXJ2aWNlOiBmaW5pc2hQcm94eVZpZGVvU2Vzc2lvbiBmYWlsZWQnLCBlcnJvcik7XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB1c2VyIGFwcG9pbnRtZW50cyB3aXRoaW4gYSBkYXRlIHJhbmdlLlxuICAgKiBAcGFyYW0gcGFyYW1zIERhdGUgcmFuZ2UgZm9yIHF1ZXJ5aW5nIGFwcG9pbnRtZW50c1xuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlIG9mIGFwcG9pbnRtZW50IGFycmF5XG4gICAqL1xuICBwdWJsaWMgZ2V0QXBwb2ludG1lbnRzKHBhcmFtczogR2V0QXBwb2ludG1lbnRzUmVxdWVzdCk6IE9ic2VydmFibGU8VGFzQXBwb2ludG1lbnRbXT4ge1xuICAgIC8vIE5vcm1hbGl6ZSBkYXRlcyB0byBZWVlZLU1NLUREIGZvcm1hdCAoaGFuZGxlcyBJU08gdGltZXN0YW1wcyBsaWtlIDIwMjYtMDEtMTVUMDM6MDA6MDAuMDAwKzAwMDApXG4gICAgY29uc3Qgbm9ybWFsaXplRGF0ZSA9IChkYXRlOiBzdHJpbmcpOiBzdHJpbmcgPT4gZGF0ZS5zcGxpdCgnVCcpWzBdO1xuICAgIGNvbnN0IGZyb21EYXRlID0gbm9ybWFsaXplRGF0ZShwYXJhbXMuZnJvbURhdGUpO1xuICAgIGNvbnN0IHRvRGF0ZSA9IG5vcm1hbGl6ZURhdGUocGFyYW1zLnRvRGF0ZSk7XG4gICAgXG4gICAgbGV0IHVybDogc3RyaW5nO1xuXG4gICAgLy8gSWYgZGF0ZXMgYXJlIHRoZSBzYW1lLCB1c2Ugb25seSBpbml0RGF0ZVxuICAgIC8vIGlmIChmcm9tRGF0ZSA9PT0gdG9EYXRlKSB7XG4gICAgLy8gICB1cmwgPSBgdjIvcHJveHkvYXBwb2ludG1lbnQvYWdlbmRhcy91c2VyL2FwcG9pbnRtZW50cz9mcm9tRGF0ZT0ke2Zyb21EYXRlfSZyb29tVHlwZT1UQVNgO1xuICAgIC8vIH0gZWxzZSB7XG4gICAgICB1cmwgPSBgdjIvcHJveHkvYXBwb2ludG1lbnQvYWdlbmRhcy91c2VyL2FwcG9pbnRtZW50cz9mcm9tRGF0ZT0ke2Zyb21EYXRlfSZ0b0RhdGU9JHt0b0RhdGV9JnJvb21UeXBlPVRBU2A7XG4gICAgLy8gfVxuXG4gICAgaWYgKHBhcmFtcy5lbnRpdHlJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB1cmwgKz0gYCZlbnRpdHlJZD0ke3BhcmFtcy5lbnRpdHlJZH1gO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcbiAgICAgIC5nZXQ8VGFzQXBwb2ludG1lbnRbXT4odXJsLCB7IGhlYWRlcnM6IHt9IH0pXG4gICAgICAucGlwZShcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdUQVMgU2VydmljZTogZ2V0QXBwb2ludG1lbnRzIGZhaWxlZCcsIGVycm9yKTtcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICAvKipcbiAgICogU2F2ZSB2aWRlbyBjYWxsIGZlZWRiYWNrLlxuICAgKiBQT1NUIC92Mi9wcm94eS92aWRlby9zYXZlL2ZlZWRiYWNrXG4gICAqIEBwYXJhbSBwYXlsb2FkIEZlZWRiYWNrIGRhdGEgaW5jbHVkaW5nIHZpZGVvQ2FsbElkLCBtb3RpdmVJZCwgbW90aXZlVHlwZSwgb2JzZXJ2YXRpb24sIHJhdGluZyAoMS01KSwgYW5kIHRlbmFudFxuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlIHRoYXQgY29tcGxldGVzIG9uIHN1Y2Nlc3MgKEhUVFAgMjAwIE9LLCBubyByZXNwb25zZSBib2R5KVxuICAgKi9cbiAgcHVibGljIHNhdmVGZWVkYmFjayhwYXlsb2FkOiBTYXZlRmVlZGJhY2tSZXF1ZXN0KTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgLy8gVmFsaWRhdGUgcmF0aW5nIGlzIGJldHdlZW4gMSBhbmQgNVxuICAgIGlmIChwYXlsb2FkLnJhdGluZyA8IDEgfHwgcGF5bG9hZC5yYXRpbmcgPiA1KSB7XG4gICAgICByZXR1cm4gbmV3IE9ic2VydmFibGUob2JzZXJ2ZXIgPT4ge1xuICAgICAgICBvYnNlcnZlci5lcnJvcihuZXcgRXJyb3IoJ1JhdGluZyBtdXN0IGJlIGJldHdlZW4gMSBhbmQgNScpKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcbiAgICAgIC5wb3N0PHZvaWQ+KCd2Mi9wcm94eS92aWRlby9zYXZlL2ZlZWRiYWNrJywge1xuICAgICAgICBib2R5OiBwYXlsb2FkLFxuICAgICAgICBoZWFkZXJzOiB7fSxcbiAgICAgIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdUQVMgU2VydmljZTogc2F2ZUZlZWRiYWNrIGZhaWxlZCcsIGVycm9yKTtcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGF2YWlsYWJsZSBmZWVkYmFjayBtb3RpdmVzLlxuICAgKiBHRVQgL3YyL3Byb3h5L3ZpZGVvL21vdGl2ZXNcbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZSBvZiBmZWVkYmFjayBtb3RpdmVzIGFycmF5XG4gICAqL1xuICBwdWJsaWMgZ2V0TW90aXZlcygpOiBPYnNlcnZhYmxlPEZlZWRiYWNrTW90aXZlW10+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAuZ2V0PEZlZWRiYWNrTW90aXZlW10+KCd2Mi9wcm94eS92aWRlby9tb3RpdmVzJywgeyBoZWFkZXJzOiB7fSB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignVEFTIFNlcnZpY2U6IGdldE1vdGl2ZXMgZmFpbGVkJywgZXJyb3IpO1xuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCBhdXRvbWF0aWMgc3RhdHVzIHBvbGxpbmcgZm9yIHRoZSBjdXJyZW50IHNlc3Npb24uXG4gICAqIFN0YXR1cyBpcyBwb2xsZWQgZXZlcnkgU1RBVFVTX1BPTExfSU5URVJWQUxfTVMgbWlsbGlzZWNvbmRzLlxuICAgKi9cblxuXG4gIC8qKlxuICAgKiBTdG9wIGF1dG9tYXRpYyBzdGF0dXMgcG9sbGluZy5cbiAgICovXG5cblxuICAvKipcbiAgICogRmV0Y2ggc3RhdHVzIGFuZCBwcm9jZXNzIHRoZSByZXNwb25zZS5cbiAgICovXG4gIHByaXZhdGUgZmV0Y2hBbmRQcm9jZXNzU3RhdHVzKHBhcmFtczogUHJveHlWaWRlb1N0YXR1c1JlcXVlc3QpOiB2b2lkIHtcbiAgICB0aGlzLmdldFByb3h5VmlkZW9TdGF0dXMocGFyYW1zKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIHRoaXMucHJvY2Vzc1N0YXR1c1Jlc3BvbnNlKHJlc3BvbnNlKTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKGVycikgPT4ge1xuXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb2Nlc3Mgc3RhdHVzIHJlc3BvbnNlIHRvIHVwZGF0ZSB3YWl0aW5nIHJvb20gdXNlcnMgYW5kIG93bmVyIGpvaW4gc3RhdHVzLlxuICAgKi9cbiAgcHJpdmF0ZSBwcm9jZXNzU3RhdHVzUmVzcG9uc2UocmVzcG9uc2U6IFByb3h5VmlkZW9TdGF0dXNSZXNwb25zZSk6IHZvaWQge1xuICAgIGNvbnN0IGNvbnRlbnQgPSByZXNwb25zZS5jb250ZW50O1xuXG4gICAgLy8gVXBkYXRlIHZpZGVvQ2FsbElkIGlmIGF2YWlsYWJsZVxuICAgIGlmIChjb250ZW50LnZpZGVvQ2FsbElkKSB7XG4gICAgICB0aGlzLmN1cnJlbnRWaWRlb0NhbGxJZCA9IGNvbnRlbnQudmlkZW9DYWxsSWQ7XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIHNlc3Npb25JZCBpZiBhdmFpbGFibGVcbiAgICBpZiAoY29udGVudC5zZXNzaW9uSWQpIHtcbiAgICAgIHRoaXMuY3VycmVudFNlc3Npb25JZCA9IGNvbnRlbnQuc2Vzc2lvbklkO1xuICAgICAgdGhpcy5wcm94eVZpZGVvU2Vzc2lvbklkID0gY29udGVudC5zZXNzaW9uSWQ7XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIGpvaW5hYmxlIHN0YXR1c1xuICAgIHRoaXMuam9pbmFibGVTdWJqZWN0Lm5leHQoY29udGVudC5qb2luYWJsZSk7XG5cbiAgICAvLyBVcGRhdGUgYWN0aXZhdGVHZW8gc3RhdHVzXG4gICAgaWYgKGNvbnRlbnQuYWN0aXZhdGVHZW8gIT09IHVuZGVmaW5lZCkge1xuXG4gICAgICB0aGlzLmFjdGl2YXRlR2VvU3ViamVjdC5uZXh0KGNvbnRlbnQuYWN0aXZhdGVHZW8pO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSBnZW9SZXF1ZXN0QWN0aXZlIHN0YXR1cyAob3duZXIgd2FpdGluZyBmb3IgdXNlciBnZW8gcmVzcG9uc2UpXG4gICAgaWYgKGNvbnRlbnQuZ2VvUmVxdWVzdEFjdGl2ZSAhPT0gdW5kZWZpbmVkICYmIGNvbnRlbnQuZ2VvUmVxdWVzdEFjdGl2ZSAhPT0gbnVsbCkge1xuXG4gICAgICB0aGlzLmdlb1JlcXVlc3RBY3RpdmVTdWJqZWN0Lm5leHQoY29udGVudC5nZW9SZXF1ZXN0QWN0aXZlKTtcbiAgICB9IGVsc2UgaWYgKGNvbnRlbnQuZ2VvUmVxdWVzdEFjdGl2ZSA9PT0gbnVsbCkge1xuICAgICAgLy8gUmVzZXQgdG8gZmFsc2Ugd2hlbiBudWxsXG4gICAgICB0aGlzLmdlb1JlcXVlc3RBY3RpdmVTdWJqZWN0Lm5leHQoZmFsc2UpO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSBhbGxHZW9HcmFudGVkIHN0YXR1cyAoYWxsIHVzZXJzIHJlc3BvbmRlZCB3aXRoIGdlbylcbiAgICBpZiAoY29udGVudC5hbGxHZW9HcmFudGVkICE9PSB1bmRlZmluZWQpIHtcblxuICAgICAgdGhpcy5hbGxHZW9HcmFudGVkU3ViamVjdC5uZXh0KGNvbnRlbnQuYWxsR2VvR3JhbnRlZCk7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgb3duZXIgaGFzIGpvaW5lZFxuICAgIGNvbnN0IG93bmVySm9pbmVkID0gdGhpcy50YXNVdGlsaXR5U2VydmljZS5jaGVja0lmT3duZXJKb2luZWQoY29udGVudC51c2Vycyk7XG4gICAgdGhpcy5vd25lckhhc0pvaW5lZFN1YmplY3QubmV4dChvd25lckpvaW5lZCk7XG5cbiAgICAvLyBEZXRlY3QgaWYgb3duZXIgbGVmdDogd2FzIHByZXNlbnQsIG5vdyBub3QgcHJlc2VudFxuICAgIGlmICh0aGlzLndhc093bmVyUHJlc2VudCAmJiAhb3duZXJKb2luZWQpIHtcblxuICAgICAgdGhpcy5vd25lckhhc0xlZnRTdWJqZWN0Lm5leHQodHJ1ZSk7XG4gICAgfVxuXG4gICAgaWYgKG93bmVySm9pbmVkKSB7XG4gICAgICB0aGlzLndhc093bmVyUHJlc2VudCA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gRXh0cmFjdCB3YWl0aW5nIHJvb20gdXNlcnMgKHN0YXR1cyA9PT0gV0FJVElORylcbiAgICBjb25zdCB3YWl0aW5nVXNlcnM6IFdhaXRpbmdSb29tVXNlcltdID0gY29udGVudC51c2Vyc1xuICAgICAgLmZpbHRlcigodSkgPT4gKHUuc3RhdHVzIGFzIHN0cmluZykgPT09ICdXQUlUSU5HJylcbiAgICAgIC5tYXAoKHUpID0+ICh7XG4gICAgICAgIHVzZXJJZDogdS51c2VySWQsXG4gICAgICAgIG5hbWU6IGBVc2VyICR7dS51c2VySWR9YCwgLy8gVE9ETzogRmV0Y2ggYWN0dWFsIHVzZXIgbmFtZXMgZnJvbSBhIHVzZXIgc2VydmljZVxuICAgICAgICBzdGF0dXM6IFJvb21Vc2VyU3RhdHVzLldBSVRJTkcsXG4gICAgICB9KSk7XG5cbiAgICB0aGlzLndhaXRpbmdSb29tVXNlcnNTdWJqZWN0Lm5leHQod2FpdGluZ1VzZXJzKTtcblxuICAgIC8vIEV4dHJhY3QgZ2VvIGluZm8gZm9yIFVTRVIgcm9sZSBwYXJ0aWNpcGFudHMgKGZvciBvd25lciBwYW5lbClcbiAgICBjb25zdCB1c2VyR2VvSW5mbzogVXNlckdlb0luZm9bXSA9IGNvbnRlbnQudXNlcnNcbiAgICAgIC5maWx0ZXIoKHUpID0+IHUucm9sID09PSAnVVNFUicpXG4gICAgICAubWFwKCh1KSA9PiAoe1xuICAgICAgICB1c2VySWQ6IHUudXNlcklkLFxuICAgICAgICBnZW9TdGF0dXM6IHUuZ2VvU3RhdHVzLFxuICAgICAgICBsYXRpdHVkZTogdS5sYXRpdHVkZSxcbiAgICAgICAgbG9uZ2l0dWRlOiB1LmxvbmdpdHVkZSxcbiAgICAgIH0pKTtcblxuICAgIHRoaXMudXNlckdlb0luZm9TdWJqZWN0Lm5leHQodXNlckdlb0luZm8pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkbWl0IGEgdXNlciBmcm9tIHRoZSB3YWl0aW5nIHJvb20gYnkgY2hhbmdpbmcgdGhlaXIgc3RhdHVzLlxuICAgKi9cbiAgcHVibGljIGFkbWl0VXNlckZyb21XYWl0aW5nUm9vbShcbiAgICB1c2VySWQ6IG51bWJlcixcbiAgICB2aWRlb0NhbGxJZDogbnVtYmVyXG4gICk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMubW9kaWZ5UHJveHlWaWRlb1VzZXIoe1xuICAgICAgdXNlcklkLFxuICAgICAgdmlkZW9DYWxsSWQsXG4gICAgICBhY3Rpb246IFVzZXJDYWxsQWN0aW9uLldBSVRJTkdfUk9PTV9MRUFWRSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIEdldHRlcnMgZm9yIGN1cnJlbnQgY2FsbCBjb250ZXh0XG4gIHB1YmxpYyBnZXQgYXBwb2ludG1lbnRJZCgpOiBudW1iZXIgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50QXBwb2ludG1lbnRJZDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdmlkZW9DYWxsSWQoKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudFZpZGVvQ2FsbElkO1xuICB9XG5cbiAgcHVibGljIGdldCB0ZW5hbnQoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudFRlbmFudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25uZWN0cyB0byBhIFRva0JveCB2aWRlbyBzZXNzaW9uXG4gICAqL1xuICBwdWJsaWMgY29ubmVjdFNlc3Npb24oXG4gICAgc2Vzc2lvbklkOiBzdHJpbmcsXG4gICAgdG9rZW46IHN0cmluZyxcbiAgICBwdWJsaXNoZXJFbGVtZW50OiBzdHJpbmcsXG4gICAgc3Vic2NyaWJlckVsZW1lbnQ6IHN0cmluZyxcbiAgICBidXNpbmVzc1JvbGU6IFRhc0J1c2luZXNzUm9sZSA9IFRhc0J1c2luZXNzUm9sZS5VU0VSXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuY2FsbFN0YXRlU3ViamVjdC5uZXh0KENhbGxTdGF0ZS5DT05ORUNUSU5HKTtcbiAgICB0aGlzLmN1cnJlbnRTZXNzaW9uSWQgPSBzZXNzaW9uSWQ7XG4gICAgdGhpcy5jdXJyZW50VG9rZW4gPSB0b2tlbjtcbiAgICB0aGlzLmN1cnJlbnRCdXNpbmVzc1JvbGUgPSBidXNpbmVzc1JvbGU7XG4gICAgdGhpcy5pc0ZpbmlzaGluZ1Nlc3Npb24gPSBmYWxzZTsgLy8gUmVzZXQgZmxhZyBmb3IgbmV3IHNlc3Npb25cblxuICAgIC8vIFNhdmUgaW5pdGlhbCBzdGF0ZSAoZGVmYXVsdGluZyB0byBjdXJyZW50IHZpZXcgbW9kZSlcbiAgICB0aGlzLnNhdmVTZXNzaW9uU3RhdGUoXG4gICAgICBzZXNzaW9uSWQsXG4gICAgICB0b2tlbixcbiAgICAgIHRoaXMudmlld01vZGVTdWJqZWN0LmdldFZhbHVlKCksXG4gICAgICBidXNpbmVzc1JvbGVcbiAgICApO1xuICAgIC8vIENsZWFyIHRoZSBkaXNjb25uZWN0ZWQgZmxhZyB3aGVuIHN0YXJ0aW5nIGEgbmV3IGNvbm5lY3Rpb25cbiAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuRElTQ09OTkVDVEVEX0ZMQUdfS0VZKTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAoIU9ULmNoZWNrU3lzdGVtUmVxdWlyZW1lbnRzKCkpIHtcbiAgICAgICAgdGhpcy5jYWxsU3RhdGVTdWJqZWN0Lm5leHQoQ2FsbFN0YXRlLkVSUk9SKTtcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignQnJvd3NlciBub3QgY29tcGF0aWJsZSB3aXRoIFRva0JveCcpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnNlc3Npb24gPSBPVC5pbml0U2Vzc2lvbih0aGlzLmNvbmZpZy50b2tCb3hBcGlLZXksIHNlc3Npb25JZCk7XG5cbiAgICAgIC8vIEhhbmRsZSBuZXcgc3RyZWFtcyAocmVtb3RlIHBhcnRpY2lwYW50cyBqb2luaW5nKVxuICAgICAgdGhpcy5zZXNzaW9uLm9uKCdzdHJlYW1DcmVhdGVkJywgKGV2ZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IHN1YnNjcmliZXIgPSB0aGlzLnNlc3Npb24/LnN1YnNjcmliZShcbiAgICAgICAgICBldmVudC5zdHJlYW0sXG4gICAgICAgICAgc3Vic2NyaWJlckVsZW1lbnQsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaW5zZXJ0TW9kZTogJ2FwcGVuZCcsXG4gICAgICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAgICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgICAgICAgfSxcbiAgICAgICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBzdWJzY3JpYmluZyB0byBzdHJlYW06JywgZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHN1YnNjcmliZXIpIHtcbiAgICAgICAgICB0aGlzLnN1YnNjcmliZXJzLnB1c2goc3Vic2NyaWJlcik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvLyBIYW5kbGUgc3RyZWFtcyBlbmRpbmcgKHJlbW90ZSBwYXJ0aWNpcGFudHMgbGVhdmluZylcbiAgICAgIHRoaXMuc2Vzc2lvbi5vbignc3RyZWFtRGVzdHJveWVkJywgKGV2ZW50KSA9PiB7XG4gICAgICAgIHRoaXMuc3Vic2NyaWJlcnMgPSB0aGlzLnN1YnNjcmliZXJzLmZpbHRlcihcbiAgICAgICAgICAoc3ViKSA9PiBzdWIuc3RyZWFtPy5zdHJlYW1JZCAhPT0gZXZlbnQuc3RyZWFtLnN0cmVhbUlkXG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgICAgLy8gSGFuZGxlIHNlc3Npb24gZGlzY29ubmVjdGlvblxuICAgICAgdGhpcy5zZXNzaW9uLm9uKCdzZXNzaW9uRGlzY29ubmVjdGVkJywgKCkgPT4ge1xuICAgICAgICB0aGlzLmNhbGxTdGF0ZVN1YmplY3QubmV4dChDYWxsU3RhdGUuRElTQ09OTkVDVEVEKTtcblxuICAgICAgICAvLyBDYWxsIGZpbmlzaFNlc3Npb24gd2hlbiBzZXNzaW9uIGlzIGRpc2Nvbm5lY3RlZCAoZS5nLiwgYnkgc2VydmVyKVxuICAgICAgICAvLyBPbmx5IGNhbGwgaWYgbm90IGFscmVhZHkgZmluaXNoaW5nIChwcmV2ZW50cyBkdXBsaWNhdGUgY2FsbHMpXG4gICAgICAgIGNvbnN0IHNlc3Npb25JZFRvRmluaXNoID0gdGhpcy5jdXJyZW50U2Vzc2lvbklkO1xuICAgICAgICBpZiAoc2Vzc2lvbklkVG9GaW5pc2ggJiYgIXRoaXMuaXNGaW5pc2hpbmdTZXNzaW9uKSB7XG4gICAgICAgICAgdGhpcy5pc0ZpbmlzaGluZ1Nlc3Npb24gPSB0cnVlO1xuICAgICAgICAgIHRoaXMuZmluaXNoUHJveHlWaWRlb1Nlc3Npb24oe1xuICAgICAgICAgICAgc2Vzc2lvbklkOiBzZXNzaW9uSWRUb0ZpbmlzaCxcbiAgICAgICAgICAgIGJ1c2luZXNzUm9sZTogdGhpcy5jdXJyZW50QnVzaW5lc3NSb2xlLFxuICAgICAgICAgIH0pLnN1YnNjcmliZSh7XG4gICAgICAgICAgICBuZXh0OiAocmVzcG9uc2UpID0+IHtcblxuICAgICAgICAgICAgICB0aGlzLmlzRmluaXNoaW5nU2Vzc2lvbiA9IGZhbHNlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcblxuICAgICAgICAgICAgICB0aGlzLmlzRmluaXNoaW5nU2Vzc2lvbiA9IGZhbHNlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIENvbm5lY3QgdG8gc2Vzc2lvblxuICAgICAgdGhpcy5zZXNzaW9uLmNvbm5lY3QodG9rZW4sIChlcnJvcikgPT4ge1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBjb25uZWN0aW5nIHRvIHNlc3Npb246JywgZXJyb3IpO1xuICAgICAgICAgIHRoaXMuY2FsbFN0YXRlU3ViamVjdC5uZXh0KENhbGxTdGF0ZS5FUlJPUik7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJbml0aWFsaXplIHB1Ymxpc2hlciAobG9jYWwgdmlkZW8pXG4gICAgICAgIHRoaXMucHVibGlzaGVyID0gT1QuaW5pdFB1Ymxpc2hlcihcbiAgICAgICAgICBwdWJsaXNoZXJFbGVtZW50LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGluc2VydE1vZGU6ICdhcHBlbmQnLFxuICAgICAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgICAgIGhlaWdodDogJzEwMCUnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgKGVycikgPT4ge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBpbml0aWFsaXppbmcgcHVibGlzaGVyOicsIGVycik7XG4gICAgICAgICAgICAgIHRoaXMuY2FsbFN0YXRlU3ViamVjdC5uZXh0KENhbGxTdGF0ZS5FUlJPUik7XG4gICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFB1Ymxpc2ggdG8gc2Vzc2lvblxuICAgICAgICAgICAgdGhpcy5zZXNzaW9uPy5wdWJsaXNoKHRoaXMucHVibGlzaGVyLCAocHViRXJyKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChwdWJFcnIpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBwdWJsaXNoaW5nIHN0cmVhbTonLCBwdWJFcnIpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2FsbFN0YXRlU3ViamVjdC5uZXh0KENhbGxTdGF0ZS5FUlJPUik7XG4gICAgICAgICAgICAgICAgcmVqZWN0KHB1YkVycik7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsU3RhdGVTdWJqZWN0Lm5leHQoQ2FsbFN0YXRlLkNPTk5FQ1RFRCk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFZpZGVvIEVsZW1lbnQgTW92ZW1lbnQgTWV0aG9kc1xuICBwdWJsaWMgbW92ZVB1Ymxpc2hlclRvKG5ld0NvbnRhaW5lcklkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucHVibGlzaGVyKSByZXR1cm47XG5cbiAgICBjb25zdCBwdWJsaXNoZXJFbGVtZW50ID0gdGhpcy5wdWJsaXNoZXIuZWxlbWVudDtcbiAgICBjb25zdCBuZXdDb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChuZXdDb250YWluZXJJZCk7XG5cbiAgICBpZiAocHVibGlzaGVyRWxlbWVudCAmJiBuZXdDb250YWluZXIpIHtcbiAgICAgIG5ld0NvbnRhaW5lci5hcHBlbmRDaGlsZChwdWJsaXNoZXJFbGVtZW50KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbW92ZVN1YnNjcmliZXJzVG8obmV3Q29udGFpbmVySWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IG5ld0NvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG5ld0NvbnRhaW5lcklkKTtcbiAgICBpZiAoIW5ld0NvbnRhaW5lcikgcmV0dXJuO1xuXG4gICAgdGhpcy5zdWJzY3JpYmVycy5mb3JFYWNoKChzdWJzY3JpYmVyKSA9PiB7XG4gICAgICBjb25zdCBzdWJzY3JpYmVyRWxlbWVudCA9IHN1YnNjcmliZXIuZWxlbWVudDtcbiAgICAgIGlmIChzdWJzY3JpYmVyRWxlbWVudCkge1xuICAgICAgICBuZXdDb250YWluZXIuYXBwZW5kQ2hpbGQoc3Vic2NyaWJlckVsZW1lbnQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE1vdmVzIHRoZSBtYWluIHZpZGVvIChzdWJzY3JpYmVyIGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIHB1Ymxpc2hlcikgdG8gYSBjb250YWluZXIuXG4gICAqIFVzZWQgZm9yIFBpUCBtb2RlIHRvIHNob3cgb25seSBvbmUgdmlkZW8uXG4gICAqL1xuICBwdWJsaWMgbW92ZU1haW5WaWRlb1RvKG5ld0NvbnRhaW5lcklkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBuZXdDb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChuZXdDb250YWluZXJJZCk7XG4gICAgaWYgKCFuZXdDb250YWluZXIpIHJldHVybjtcblxuICAgIC8vIFByZWZlciByZW1vdGUgdmlkZW8gKHN1YnNjcmliZXIpIGFzIG1haW5cbiAgICBpZiAodGhpcy5zdWJzY3JpYmVycy5sZW5ndGggPiAwICYmIHRoaXMuc3Vic2NyaWJlcnNbMF0uZWxlbWVudCkge1xuICAgICAgbmV3Q29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuc3Vic2NyaWJlcnNbMF0uZWxlbWVudCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gRmFsbCBiYWNrIHRvIGxvY2FsIHZpZGVvIChwdWJsaXNoZXIpXG4gICAgaWYgKHRoaXMucHVibGlzaGVyPy5lbGVtZW50KSB7XG4gICAgICBuZXdDb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5wdWJsaXNoZXIuZWxlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1vdmVzIHZpZGVvcyBiYWNrIHRvIGZ1bGxzY3JlZW4gY29udGFpbmVyc1xuICAgKi9cbiAgcHVibGljIG1vdmVWaWRlb3NUb0Z1bGxzY3JlZW4oKTogdm9pZCB7XG4gICAgdGhpcy5tb3ZlU3Vic2NyaWJlcnNUbygnc3Vic2NyaWJlci1jb250YWluZXInKTtcbiAgICB0aGlzLm1vdmVQdWJsaXNoZXJUbygncHVibGlzaGVyLWNvbnRhaW5lcicpO1xuICB9XG59XG4iXX0=
@@ -8,6 +8,7 @@ import { TasFloatingCallComponent } from './components/tas-floating-call/tas-flo
8
8
  import { TasWaitingRoomComponent } from './components/tas-waiting-room/tas-waiting-room.component';
9
9
  import { TasAvatarComponent } from './components/tas-avatar/tas-avatar.component';
10
10
  import { TasIncomingAppointmentComponent } from './components/tas-incoming-appointment/tas-incoming-appointment.component';
11
+ import { TasFeedbackModalComponent } from './components/tas-feedback-modal/tas-feedback-modal.component';
11
12
  import { TasService } from './services/tas.service';
12
13
  import { TAS_CONFIG, TAS_HTTP_CLIENT, } from './config/tas.config';
13
14
  import * as i0 from "@angular/core";
@@ -58,12 +59,14 @@ TasUellSdkModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", versio
58
59
  TasFloatingCallComponent,
59
60
  TasWaitingRoomComponent,
60
61
  TasAvatarComponent,
61
- TasIncomingAppointmentComponent], imports: [CommonModule, FormsModule, NgbTooltipModule], exports: [TasButtonComponent,
62
+ TasIncomingAppointmentComponent,
63
+ TasFeedbackModalComponent], imports: [CommonModule, FormsModule, NgbTooltipModule], exports: [TasButtonComponent,
62
64
  TasVideocallComponent,
63
65
  TasFloatingCallComponent,
64
66
  TasWaitingRoomComponent,
65
67
  TasAvatarComponent,
66
- TasIncomingAppointmentComponent] });
68
+ TasIncomingAppointmentComponent,
69
+ TasFeedbackModalComponent] });
67
70
  TasUellSdkModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: TasUellSdkModule, imports: [[CommonModule, FormsModule, NgbTooltipModule]] });
68
71
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: TasUellSdkModule, decorators: [{
69
72
  type: NgModule,
@@ -75,6 +78,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
75
78
  TasWaitingRoomComponent,
76
79
  TasAvatarComponent,
77
80
  TasIncomingAppointmentComponent,
81
+ TasFeedbackModalComponent,
78
82
  ],
79
83
  imports: [CommonModule, FormsModule, NgbTooltipModule],
80
84
  exports: [
@@ -84,7 +88,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
84
88
  TasWaitingRoomComponent,
85
89
  TasAvatarComponent,
86
90
  TasIncomingAppointmentComponent,
91
+ TasFeedbackModalComponent,
87
92
  ],
88
93
  }]
89
94
  }] });
90
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzLXVlbGwtc2RrLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3Rhcy11ZWxsLXNkay9zcmMvbGliL3Rhcy11ZWxsLXNkay5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBdUIsTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUMzRixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQUN0RyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwwREFBMEQsQ0FBQztBQUNuRyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUNsRixPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSwwRUFBMEUsQ0FBQztBQUMzSCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDcEQsT0FBTyxFQUNMLFVBQVUsRUFDVixlQUFlLEdBR2hCLE1BQU0scUJBQXFCLENBQUM7O0FBcUI3QixNQUFNLE9BQU8sZ0JBQWdCO0lBQzNCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09BNEJHO0lBQ0gsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUdkO1FBQ0MsT0FBTztZQUNMLFFBQVEsRUFBRSxnQkFBZ0I7WUFDMUIsU0FBUyxFQUFFO2dCQUNULEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLE1BQU0sRUFBRTtnQkFDakQsRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsVUFBVSxFQUFFO2dCQUMxRCxVQUFVO2FBQ1g7U0FDRixDQUFDO0lBQ0osQ0FBQzs7OEdBMUNVLGdCQUFnQjsrR0FBaEIsZ0JBQWdCLGlCQWpCekIsa0JBQWtCO1FBQ2xCLHFCQUFxQjtRQUNyQix3QkFBd0I7UUFDeEIsdUJBQXVCO1FBQ3ZCLGtCQUFrQjtRQUNsQiwrQkFBK0IsYUFFdkIsWUFBWSxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsYUFFbkQsa0JBQWtCO1FBQ2xCLHFCQUFxQjtRQUNyQix3QkFBd0I7UUFDeEIsdUJBQXVCO1FBQ3ZCLGtCQUFrQjtRQUNsQiwrQkFBK0I7K0dBR3RCLGdCQUFnQixZQVZsQixDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLENBQUM7NEZBVTNDLGdCQUFnQjtrQkFuQjVCLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFO3dCQUNaLGtCQUFrQjt3QkFDbEIscUJBQXFCO3dCQUNyQix3QkFBd0I7d0JBQ3hCLHVCQUF1Qjt3QkFDdkIsa0JBQWtCO3dCQUNsQiwrQkFBK0I7cUJBQ2hDO29CQUNELE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLENBQUM7b0JBQ3RELE9BQU8sRUFBRTt3QkFDUCxrQkFBa0I7d0JBQ2xCLHFCQUFxQjt3QkFDckIsd0JBQXdCO3dCQUN4Qix1QkFBdUI7d0JBQ3ZCLGtCQUFrQjt3QkFDbEIsK0JBQStCO3FCQUNoQztpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlLCBNb2R1bGVXaXRoUHJvdmlkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBOZ2JUb29sdGlwTW9kdWxlIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xuaW1wb3J0IHsgVGFzQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3Rhcy1idG4vdGFzLWJ0bi5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGFzVmlkZW9jYWxsQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3Rhcy12aWRlb2NhbGwvdGFzLXZpZGVvY2FsbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGFzRmxvYXRpbmdDYWxsQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3Rhcy1mbG9hdGluZy1jYWxsL3Rhcy1mbG9hdGluZy1jYWxsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUYXNXYWl0aW5nUm9vbUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy90YXMtd2FpdGluZy1yb29tL3Rhcy13YWl0aW5nLXJvb20uY29tcG9uZW50JztcbmltcG9ydCB7IFRhc0F2YXRhckNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy90YXMtYXZhdGFyL3Rhcy1hdmF0YXIuY29tcG9uZW50JztcbmltcG9ydCB7IFRhc0luY29taW5nQXBwb2ludG1lbnRDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvdGFzLWluY29taW5nLWFwcG9pbnRtZW50L3Rhcy1pbmNvbWluZy1hcHBvaW50bWVudC5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGFzU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvdGFzLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgVEFTX0NPTkZJRyxcbiAgVEFTX0hUVFBfQ0xJRU5ULFxuICBUYXNDb25maWcsXG4gIFRhc0h0dHBDbGllbnQsXG59IGZyb20gJy4vY29uZmlnL3Rhcy5jb25maWcnO1xuXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFtcbiAgICBUYXNCdXR0b25Db21wb25lbnQsXG4gICAgVGFzVmlkZW9jYWxsQ29tcG9uZW50LFxuICAgIFRhc0Zsb2F0aW5nQ2FsbENvbXBvbmVudCxcbiAgICBUYXNXYWl0aW5nUm9vbUNvbXBvbmVudCxcbiAgICBUYXNBdmF0YXJDb21wb25lbnQsXG4gICAgVGFzSW5jb21pbmdBcHBvaW50bWVudENvbXBvbmVudCxcbiAgXSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRm9ybXNNb2R1bGUsIE5nYlRvb2x0aXBNb2R1bGVdLFxuICBleHBvcnRzOiBbXG4gICAgVGFzQnV0dG9uQ29tcG9uZW50LFxuICAgIFRhc1ZpZGVvY2FsbENvbXBvbmVudCxcbiAgICBUYXNGbG9hdGluZ0NhbGxDb21wb25lbnQsXG4gICAgVGFzV2FpdGluZ1Jvb21Db21wb25lbnQsXG4gICAgVGFzQXZhdGFyQ29tcG9uZW50LFxuICAgIFRhc0luY29taW5nQXBwb2ludG1lbnRDb21wb25lbnQsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIFRhc1VlbGxTZGtNb2R1bGUge1xuICAvKipcbiAgICogVXNlIGZvclJvb3QoKSB0byBjb25maWd1cmUgdGhlIFRBUyBTREsgbW9kdWxlIHdpdGggcmVxdWlyZWQgZGVwZW5kZW5jaWVzLlxuICAgKiBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbmNlIGluIHlvdXIgcm9vdCBBcHBNb2R1bGUuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogaW1wb3J0IHsgVGFzVWVsbFNka01vZHVsZSwgVGFzSHR0cENsaWVudCB9IGZyb20gJ3Rhcy11ZWxsLXNkayc7XG4gICAqXG4gICAqIC8vIENyZWF0ZSBhbiBhZGFwdGVyIHRoYXQgaW1wbGVtZW50cyBUYXNIdHRwQ2xpZW50XG4gICAqIEBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG4gICAqIGV4cG9ydCBjbGFzcyBNeUh0dHBBZGFwdGVyIGltcGxlbWVudHMgVGFzSHR0cENsaWVudCB7XG4gICAqICAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50KSB7fVxuICAgKiAgIHBvc3Q8VD4odXJsOiBzdHJpbmcsIG9wdGlvbnM6IHsgYm9keTogYW55OyBoZWFkZXJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB9KTogT2JzZXJ2YWJsZTxUPiB7XG4gICAqICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8VD4odXJsLCBvcHRpb25zLmJvZHksIHsgaGVhZGVyczogb3B0aW9ucy5oZWFkZXJzIH0pO1xuICAgKiAgIH1cbiAgICogfVxuICAgKlxuICAgKiAvLyBJbiB5b3VyIEFwcE1vZHVsZVxuICAgKiBATmdNb2R1bGUoe1xuICAgKiAgIGltcG9ydHM6IFtcbiAgICogICAgIFRhc1VlbGxTZGtNb2R1bGUuZm9yUm9vdCh7XG4gICAqICAgICAgIGNvbmZpZzogeyB0b2tCb3hBcGlLZXk6ICdZT1VSX1RPS0JPWF9BUElfS0VZJyB9LFxuICAgKiAgICAgICBodHRwQ2xpZW50OiBNeUh0dHBBZGFwdGVyXG4gICAqICAgICB9KVxuICAgKiAgIF1cbiAgICogfSlcbiAgICogZXhwb3J0IGNsYXNzIEFwcE1vZHVsZSB7IH1cbiAgICogYGBgXG4gICAqL1xuICBzdGF0aWMgZm9yUm9vdChvcHRpb25zOiB7XG4gICAgY29uZmlnOiBUYXNDb25maWc7XG4gICAgaHR0cENsaWVudDogbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4gVGFzSHR0cENsaWVudDtcbiAgfSk6IE1vZHVsZVdpdGhQcm92aWRlcnM8VGFzVWVsbFNka01vZHVsZT4ge1xuICAgIHJldHVybiB7XG4gICAgICBuZ01vZHVsZTogVGFzVWVsbFNka01vZHVsZSxcbiAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7IHByb3ZpZGU6IFRBU19DT05GSUcsIHVzZVZhbHVlOiBvcHRpb25zLmNvbmZpZyB9LFxuICAgICAgICB7IHByb3ZpZGU6IFRBU19IVFRQX0NMSUVOVCwgdXNlQ2xhc3M6IG9wdGlvbnMuaHR0cENsaWVudCB9LFxuICAgICAgICBUYXNTZXJ2aWNlLFxuICAgICAgXSxcbiAgICB9O1xuICB9XG59XG4iXX0=
95
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzLXVlbGwtc2RrLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3Rhcy11ZWxsLXNkay9zcmMvbGliL3Rhcy11ZWxsLXNkay5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBdUIsTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUMzRixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQUN0RyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwwREFBMEQsQ0FBQztBQUNuRyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUNsRixPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSwwRUFBMEUsQ0FBQztBQUMzSCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw4REFBOEQsQ0FBQztBQUN6RyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDcEQsT0FBTyxFQUNMLFVBQVUsRUFDVixlQUFlLEdBR2hCLE1BQU0scUJBQXFCLENBQUM7O0FBdUI3QixNQUFNLE9BQU8sZ0JBQWdCO0lBQzNCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09BNEJHO0lBQ0gsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUdkO1FBQ0MsT0FBTztZQUNMLFFBQVEsRUFBRSxnQkFBZ0I7WUFDMUIsU0FBUyxFQUFFO2dCQUNULEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLE1BQU0sRUFBRTtnQkFDakQsRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsVUFBVSxFQUFFO2dCQUMxRCxVQUFVO2FBQ1g7U0FDRixDQUFDO0lBQ0osQ0FBQzs7OEdBMUNVLGdCQUFnQjsrR0FBaEIsZ0JBQWdCLGlCQW5CekIsa0JBQWtCO1FBQ2xCLHFCQUFxQjtRQUNyQix3QkFBd0I7UUFDeEIsdUJBQXVCO1FBQ3ZCLGtCQUFrQjtRQUNsQiwrQkFBK0I7UUFDL0IseUJBQXlCLGFBRWpCLFlBQVksRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLGFBRW5ELGtCQUFrQjtRQUNsQixxQkFBcUI7UUFDckIsd0JBQXdCO1FBQ3hCLHVCQUF1QjtRQUN2QixrQkFBa0I7UUFDbEIsK0JBQStCO1FBQy9CLHlCQUF5QjsrR0FHaEIsZ0JBQWdCLFlBWGxCLENBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsQ0FBQzs0RkFXM0MsZ0JBQWdCO2tCQXJCNUIsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUU7d0JBQ1osa0JBQWtCO3dCQUNsQixxQkFBcUI7d0JBQ3JCLHdCQUF3Qjt3QkFDeEIsdUJBQXVCO3dCQUN2QixrQkFBa0I7d0JBQ2xCLCtCQUErQjt3QkFDL0IseUJBQXlCO3FCQUMxQjtvQkFDRCxPQUFPLEVBQUUsQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixDQUFDO29CQUN0RCxPQUFPLEVBQUU7d0JBQ1Asa0JBQWtCO3dCQUNsQixxQkFBcUI7d0JBQ3JCLHdCQUF3Qjt3QkFDeEIsdUJBQXVCO3dCQUN2QixrQkFBa0I7d0JBQ2xCLCtCQUErQjt3QkFDL0IseUJBQXlCO3FCQUMxQjtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlLCBNb2R1bGVXaXRoUHJvdmlkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBOZ2JUb29sdGlwTW9kdWxlIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xuaW1wb3J0IHsgVGFzQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3Rhcy1idG4vdGFzLWJ0bi5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGFzVmlkZW9jYWxsQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3Rhcy12aWRlb2NhbGwvdGFzLXZpZGVvY2FsbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGFzRmxvYXRpbmdDYWxsQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3Rhcy1mbG9hdGluZy1jYWxsL3Rhcy1mbG9hdGluZy1jYWxsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUYXNXYWl0aW5nUm9vbUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy90YXMtd2FpdGluZy1yb29tL3Rhcy13YWl0aW5nLXJvb20uY29tcG9uZW50JztcbmltcG9ydCB7IFRhc0F2YXRhckNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy90YXMtYXZhdGFyL3Rhcy1hdmF0YXIuY29tcG9uZW50JztcbmltcG9ydCB7IFRhc0luY29taW5nQXBwb2ludG1lbnRDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvdGFzLWluY29taW5nLWFwcG9pbnRtZW50L3Rhcy1pbmNvbWluZy1hcHBvaW50bWVudC5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGFzRmVlZGJhY2tNb2RhbENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy90YXMtZmVlZGJhY2stbW9kYWwvdGFzLWZlZWRiYWNrLW1vZGFsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUYXNTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy90YXMuc2VydmljZSc7XG5pbXBvcnQge1xuICBUQVNfQ09ORklHLFxuICBUQVNfSFRUUF9DTElFTlQsXG4gIFRhc0NvbmZpZyxcbiAgVGFzSHR0cENsaWVudCxcbn0gZnJvbSAnLi9jb25maWcvdGFzLmNvbmZpZyc7XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW1xuICAgIFRhc0J1dHRvbkNvbXBvbmVudCxcbiAgICBUYXNWaWRlb2NhbGxDb21wb25lbnQsXG4gICAgVGFzRmxvYXRpbmdDYWxsQ29tcG9uZW50LFxuICAgIFRhc1dhaXRpbmdSb29tQ29tcG9uZW50LFxuICAgIFRhc0F2YXRhckNvbXBvbmVudCxcbiAgICBUYXNJbmNvbWluZ0FwcG9pbnRtZW50Q29tcG9uZW50LFxuICAgIFRhc0ZlZWRiYWNrTW9kYWxDb21wb25lbnQsXG4gIF0sXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEZvcm1zTW9kdWxlLCBOZ2JUb29sdGlwTW9kdWxlXSxcbiAgZXhwb3J0czogW1xuICAgIFRhc0J1dHRvbkNvbXBvbmVudCxcbiAgICBUYXNWaWRlb2NhbGxDb21wb25lbnQsXG4gICAgVGFzRmxvYXRpbmdDYWxsQ29tcG9uZW50LFxuICAgIFRhc1dhaXRpbmdSb29tQ29tcG9uZW50LFxuICAgIFRhc0F2YXRhckNvbXBvbmVudCxcbiAgICBUYXNJbmNvbWluZ0FwcG9pbnRtZW50Q29tcG9uZW50LFxuICAgIFRhc0ZlZWRiYWNrTW9kYWxDb21wb25lbnQsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIFRhc1VlbGxTZGtNb2R1bGUge1xuICAvKipcbiAgICogVXNlIGZvclJvb3QoKSB0byBjb25maWd1cmUgdGhlIFRBUyBTREsgbW9kdWxlIHdpdGggcmVxdWlyZWQgZGVwZW5kZW5jaWVzLlxuICAgKiBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbmNlIGluIHlvdXIgcm9vdCBBcHBNb2R1bGUuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogaW1wb3J0IHsgVGFzVWVsbFNka01vZHVsZSwgVGFzSHR0cENsaWVudCB9IGZyb20gJ3Rhcy11ZWxsLXNkayc7XG4gICAqXG4gICAqIC8vIENyZWF0ZSBhbiBhZGFwdGVyIHRoYXQgaW1wbGVtZW50cyBUYXNIdHRwQ2xpZW50XG4gICAqIEBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG4gICAqIGV4cG9ydCBjbGFzcyBNeUh0dHBBZGFwdGVyIGltcGxlbWVudHMgVGFzSHR0cENsaWVudCB7XG4gICAqICAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50KSB7fVxuICAgKiAgIHBvc3Q8VD4odXJsOiBzdHJpbmcsIG9wdGlvbnM6IHsgYm9keTogYW55OyBoZWFkZXJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB9KTogT2JzZXJ2YWJsZTxUPiB7XG4gICAqICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8VD4odXJsLCBvcHRpb25zLmJvZHksIHsgaGVhZGVyczogb3B0aW9ucy5oZWFkZXJzIH0pO1xuICAgKiAgIH1cbiAgICogfVxuICAgKlxuICAgKiAvLyBJbiB5b3VyIEFwcE1vZHVsZVxuICAgKiBATmdNb2R1bGUoe1xuICAgKiAgIGltcG9ydHM6IFtcbiAgICogICAgIFRhc1VlbGxTZGtNb2R1bGUuZm9yUm9vdCh7XG4gICAqICAgICAgIGNvbmZpZzogeyB0b2tCb3hBcGlLZXk6ICdZT1VSX1RPS0JPWF9BUElfS0VZJyB9LFxuICAgKiAgICAgICBodHRwQ2xpZW50OiBNeUh0dHBBZGFwdGVyXG4gICAqICAgICB9KVxuICAgKiAgIF1cbiAgICogfSlcbiAgICogZXhwb3J0IGNsYXNzIEFwcE1vZHVsZSB7IH1cbiAgICogYGBgXG4gICAqL1xuICBzdGF0aWMgZm9yUm9vdChvcHRpb25zOiB7XG4gICAgY29uZmlnOiBUYXNDb25maWc7XG4gICAgaHR0cENsaWVudDogbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4gVGFzSHR0cENsaWVudDtcbiAgfSk6IE1vZHVsZVdpdGhQcm92aWRlcnM8VGFzVWVsbFNka01vZHVsZT4ge1xuICAgIHJldHVybiB7XG4gICAgICBuZ01vZHVsZTogVGFzVWVsbFNka01vZHVsZSxcbiAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7IHByb3ZpZGU6IFRBU19DT05GSUcsIHVzZVZhbHVlOiBvcHRpb25zLmNvbmZpZyB9LFxuICAgICAgICB7IHByb3ZpZGU6IFRBU19IVFRQX0NMSUVOVCwgdXNlQ2xhc3M6IG9wdGlvbnMuaHR0cENsaWVudCB9LFxuICAgICAgICBUYXNTZXJ2aWNlLFxuICAgICAgXSxcbiAgICB9O1xuICB9XG59XG4iXX0=
@@ -16,6 +16,7 @@ export * from './lib/components/tas-videocall/tas-videocall.component';
16
16
  export * from './lib/components/tas-floating-call/tas-floating-call.component';
17
17
  export * from './lib/components/tas-avatar/tas-avatar.component';
18
18
  export * from './lib/components/tas-incoming-appointment/tas-incoming-appointment.component';
19
+ export * from './lib/components/tas-feedback-modal/tas-feedback-modal.component';
19
20
  // Module
20
21
  export * from './lib/tas-uell-sdk.module';
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL3Rhcy11ZWxsLXNkay9zcmMvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILDJCQUEyQjtBQUMzQixjQUFjLHlCQUF5QixDQUFDO0FBRXhDLGFBQWE7QUFDYixjQUFjLGlDQUFpQyxDQUFDO0FBRWhELFVBQVU7QUFDVixjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMsb0NBQW9DLENBQUM7QUFDbkQsY0FBYyxvQ0FBb0MsQ0FBQztBQUVuRCxhQUFhO0FBQ2IsY0FBYyw0Q0FBNEMsQ0FBQztBQUMzRCxjQUFjLDhEQUE4RCxDQUFDO0FBQzdFLGNBQWMsd0RBQXdELENBQUM7QUFDdkUsY0FBYyxnRUFBZ0UsQ0FBQztBQUMvRSxjQUFjLGtEQUFrRCxDQUFDO0FBQ2pFLGNBQWMsOEVBQThFLENBQUM7QUFFN0YsU0FBUztBQUNULGNBQWMsMkJBQTJCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogUHVibGljIEFQSSBTdXJmYWNlIG9mIHRhcy11ZWxsLXNka1xuICovXG5cbi8vIENvbmZpZ3VyYXRpb24gYW5kIHRva2Vuc1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29uZmlnL3Rhcy5jb25maWcnO1xuXG4vLyBJbnRlcmZhY2VzXG5leHBvcnQgKiBmcm9tICcuL2xpYi9pbnRlcmZhY2VzL3Rhcy5pbnRlcmZhY2VzJztcblxuLy8gU2VydmljZVxuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvdGFzLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvZ2VvbG9jYXRpb24uc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy90YXMtdXRpbGl0eS5zZXJ2aWNlJztcblxuLy8gQ29tcG9uZW50c1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy90YXMtYnRuL3Rhcy1idG4uY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvdGFzLXdhaXRpbmctcm9vbS90YXMtd2FpdGluZy1yb29tLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3Rhcy12aWRlb2NhbGwvdGFzLXZpZGVvY2FsbC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy90YXMtZmxvYXRpbmctY2FsbC90YXMtZmxvYXRpbmctY2FsbC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy90YXMtYXZhdGFyL3Rhcy1hdmF0YXIuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvdGFzLWluY29taW5nLWFwcG9pbnRtZW50L3Rhcy1pbmNvbWluZy1hcHBvaW50bWVudC5jb21wb25lbnQnO1xuXG4vLyBNb2R1bGVcbmV4cG9ydCAqIGZyb20gJy4vbGliL3Rhcy11ZWxsLXNkay5tb2R1bGUnO1xuIl19
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL3Rhcy11ZWxsLXNkay9zcmMvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILDJCQUEyQjtBQUMzQixjQUFjLHlCQUF5QixDQUFDO0FBRXhDLGFBQWE7QUFDYixjQUFjLGlDQUFpQyxDQUFDO0FBRWhELFVBQVU7QUFDVixjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMsb0NBQW9DLENBQUM7QUFDbkQsY0FBYyxvQ0FBb0MsQ0FBQztBQUVuRCxhQUFhO0FBQ2IsY0FBYyw0Q0FBNEMsQ0FBQztBQUMzRCxjQUFjLDhEQUE4RCxDQUFDO0FBQzdFLGNBQWMsd0RBQXdELENBQUM7QUFDdkUsY0FBYyxnRUFBZ0UsQ0FBQztBQUMvRSxjQUFjLGtEQUFrRCxDQUFDO0FBQ2pFLGNBQWMsOEVBQThFLENBQUM7QUFDN0YsY0FBYyxrRUFBa0UsQ0FBQztBQUVqRixTQUFTO0FBQ1QsY0FBYywyQkFBMkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2YgdGFzLXVlbGwtc2RrXG4gKi9cblxuLy8gQ29uZmlndXJhdGlvbiBhbmQgdG9rZW5zXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb25maWcvdGFzLmNvbmZpZyc7XG5cbi8vIEludGVyZmFjZXNcbmV4cG9ydCAqIGZyb20gJy4vbGliL2ludGVyZmFjZXMvdGFzLmludGVyZmFjZXMnO1xuXG4vLyBTZXJ2aWNlXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy90YXMuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9nZW9sb2NhdGlvbi5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL3Rhcy11dGlsaXR5LnNlcnZpY2UnO1xuXG4vLyBDb21wb25lbnRzXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3Rhcy1idG4vdGFzLWJ0bi5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy90YXMtd2FpdGluZy1yb29tL3Rhcy13YWl0aW5nLXJvb20uY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvdGFzLXZpZGVvY2FsbC90YXMtdmlkZW9jYWxsLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3Rhcy1mbG9hdGluZy1jYWxsL3Rhcy1mbG9hdGluZy1jYWxsLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3Rhcy1hdmF0YXIvdGFzLWF2YXRhci5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy90YXMtaW5jb21pbmctYXBwb2ludG1lbnQvdGFzLWluY29taW5nLWFwcG9pbnRtZW50LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3Rhcy1mZWVkYmFjay1tb2RhbC90YXMtZmVlZGJhY2stbW9kYWwuY29tcG9uZW50JztcblxuLy8gTW9kdWxlXG5leHBvcnQgKiBmcm9tICcuL2xpYi90YXMtdWVsbC1zZGsubW9kdWxlJztcbiJdfQ==