simpo-component-library 3.6.941 → 3.6.942

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.
@@ -475,6 +475,16 @@ export class RestService {
475
475
  completeBookingGroup(groupId) {
476
476
  return this.http.put(this.APPOINTMENT_URL + `booking/group/complete/${groupId}`, {});
477
477
  }
478
+ getMyBookings(businessId, userId) {
479
+ return this.http.get(this.APPOINTMENT_URL + `booking/group/my?businessId=${businessId}&userId=${userId}`);
480
+ }
481
+ cancelBookingGroup(groupId, reason) {
482
+ const query = reason ? `?reason=${encodeURIComponent(reason)}` : '';
483
+ return this.http.put(this.APPOINTMENT_URL + `booking/group/${groupId}/cancel${query}`, {});
484
+ }
485
+ getCancellationPolicy(businessId) {
486
+ return this.http.get(this.APPOINTMENT_URL + `policy-masters/${businessId}?policyType=CANCELLATION`);
487
+ }
478
488
  generateToken(bId, userId) {
479
489
  return this.http.post(this.PASSBOOK_URL + `ext/connect/simpo/token?businessId=${bId}&userId=${userId}&userType=EXTERNAL_USER`, {});
480
490
  }
@@ -609,4 +619,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
609
619
  type: Inject,
610
620
  args: [APPOINTMENT_URL]
611
621
  }] }] });
612
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9zZXJ2aWNlcy9yZXN0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFjLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFBRSxHQUFHLEVBQXdDLE1BQU0sTUFBTSxDQUFDO0FBS2pFLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEcsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG9DQUFvQyxDQUFBO0FBQzdELE9BQU8sRUFBeUIsT0FBTyxFQUE2QixNQUFNLG1DQUFtQyxDQUFDO0FBQzlHLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUdsRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUNBQWlDLENBQUM7Ozs7QUFNaEUsTUFBTSxPQUFPLFdBQVc7SUFZdEIsWUFDbUIsSUFBZ0IsRUFDUixRQUFnQixFQUNWLGFBQXFCLEVBQzFCLFFBQWdCLEVBQ3pCLGFBQTRCLEVBQ2QsT0FBb0IsRUFDckIsWUFBb0IsRUFDakIsZUFBdUI7UUFQdkMsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUNSLGFBQVEsR0FBUixRQUFRLENBQVE7UUFDVixrQkFBYSxHQUFiLGFBQWEsQ0FBUTtRQUMxQixhQUFRLEdBQVIsUUFBUSxDQUFRO1FBQ3pCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQ2QsWUFBTyxHQUFQLE9BQU8sQ0FBYTtRQUNyQixpQkFBWSxHQUFaLFlBQVksQ0FBUTtRQUNqQixvQkFBZSxHQUFmLGVBQWUsQ0FBUTtRQWxCMUQsMERBQTBEO1FBQzFELHFFQUFxRTtRQUNyRSwyRUFBMkU7UUFDM0UsZ0VBQWdFO1FBQ2hFLDJFQUEyRTtRQUNuRSw4QkFBeUIsR0FBd0IsSUFBSSxDQUFDO1FBRzlELGdCQUFXLEdBQVksS0FBSyxDQUFDO1FBYzdCLGdCQUFXLEdBQVcseUNBQXlDLENBQUM7SUFEaEUsQ0FBQztJQUVELDJEQUEyRDtJQUMzRCxrQkFBa0I7UUFDaEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDN0YsQ0FBQztJQUNELFdBQVc7UUFDVCxJQUFJLElBQUksQ0FBQyx5QkFBeUI7WUFDaEMsSUFBSSxDQUFDLHlCQUF5QixFQUFFLFdBQVcsRUFBRSxDQUFDO0lBQ2xELENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxZQUF1QztRQUN4RCxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMxQixJQUFJLGFBQWEsR0FBa0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDekUsSUFBSSxDQUFDLGFBQWE7WUFDaEIsYUFBYSxHQUFHLEVBQUUsQ0FBQztRQUNyQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsZ0RBQWdELFlBQVksZ0JBQWdCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFhLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBWSxFQUFFLEVBQUUsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoTyxDQUFDO0lBQ0QsMkJBQTJCLENBQUMsWUFBb0I7UUFDOUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLDBEQUEwRCxZQUFZLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFhLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUUsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3TSxDQUFDO0lBQ0QsK0JBQStCO0lBQy9CLDRCQUE0QixDQUFDLE9BQVk7UUFDdkMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FDbEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxrQ0FBa0MsRUFBRSxPQUFPLENBQzVELENBQUE7SUFDSCxDQUFDO0lBQ0Qsc0JBQXNCLENBQUMsT0FBWTtRQUNqQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDOUIsTUFBTSxPQUFPLEdBQUcsSUFBSSxXQUFXLENBQUM7WUFDOUIsZUFBZSxFQUFFLFVBQVUsS0FBSyxFQUFFO1NBQ25DLENBQUMsQ0FBQztRQUNILE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxpREFBaUQsT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUE7SUFDakksQ0FBQztJQUNELDRCQUE0QixDQUFDLFVBQWtCO1FBQzdDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQ2xCLElBQUksQ0FBQyxRQUFRLEdBQUcscUJBQXFCLFVBQVUsRUFBRSxDQUNsRCxDQUFBO0lBQ0gsQ0FBQztJQUNELGFBQWEsQ0FBQyxNQUFZLEVBQUUsT0FBYTtRQUN2QyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLEdBQUcsaUNBQWlDLE1BQU0sWUFBWSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ3pHLENBQUM7SUFDRCx1QkFBdUI7UUFDckIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLHVEQUF1RCxDQUFDLENBQUM7SUFDbkcsQ0FBQztJQUNELGNBQWMsQ0FBQyxPQUFZO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyw2Q0FBNkMsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2pILENBQUM7SUFDRCxpQkFBaUIsQ0FBQyxZQUEyQixJQUFJO1FBQy9DLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzFCLE1BQU0sT0FBTyxHQUFRO1lBQ25CLE1BQU0sRUFBRSxDQUFDO1lBQ1QsUUFBUSxFQUFFLENBQUM7WUFDWCxNQUFNLEVBQUUsU0FBUztZQUNqQixhQUFhLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDO1lBQ3BELE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJO1lBQzdDLE9BQU8sRUFBRSxNQUFNO1NBQ2hCLENBQUE7UUFDRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsNkNBQTZDLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFZLEVBQUUsRUFBRSxDQUFDLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlNLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxXQUEwQixJQUFJO1FBQ2hELElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzFCLE1BQU0sT0FBTyxHQUFRO1lBQ25CLE1BQU0sRUFBRSxDQUFDO1lBQ1QsUUFBUSxFQUFFLENBQUM7WUFDWCxhQUFhLEVBQUUsUUFBUTtZQUN2QixhQUFhLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDO1lBQ3BELFVBQVUsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUM7WUFDN0UsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUk7WUFDN0MsT0FBTyxFQUFFLE1BQU07U0FDaEIsQ0FBQTtRQUNELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRywrQ0FBK0MsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFhLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQVksRUFBRSxFQUFFLENBQUMsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaE4sQ0FBQztJQUVELGtCQUFrQixDQUFDLGFBQXVCO1FBQ3hDLE1BQU0sT0FBTyxHQUFHO1lBQ2QsR0FBRyxFQUFFLGFBQWE7U0FDbkIsQ0FBQTtRQUNELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyx5Q0FBeUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFVBQWUsRUFBRSxFQUFFLENBQUMsSUFBSSxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0wsQ0FBQztJQUVELGdCQUFnQjtRQUVkLE1BQU0sVUFBVSxHQUFXLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNuRyxNQUFNLGFBQWEsR0FBVyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsSUFBSSxZQUFZLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNuSCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsMkNBQTJDLFVBQVUsVUFBVSxhQUFhLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFhLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUUsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuTixDQUFDO0lBQ0QsaUJBQWlCO1FBQ2YsTUFBTSxPQUFPLEdBQVE7WUFDbkIsTUFBTSxFQUFFLENBQUM7WUFDVCxRQUFRLEVBQUUsR0FBRztZQUNiLE9BQU8sRUFBRSxNQUFNO1lBQ2YsVUFBVSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQztTQUM5RSxDQUFBO1FBQ0QsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLG9DQUFvQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFhLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFVBQWUsRUFBRSxFQUFFLENBQUMsSUFBSSxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0wsQ0FBQztJQUVELGtCQUFrQixDQUFDLGFBQXVCLEVBQUUsV0FBcUIsRUFBRSxVQUFrQixFQUFFLFFBQWdCLEVBQUUsUUFBZ0IsRUFBRSxTQUFpQixFQUFFLFNBQWlCLEVBQUUsTUFBYyxFQUFFLE1BQWMsRUFBRSxJQUFZO1FBQzNNLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzFCLElBQUksT0FBTyxHQUFRO1lBQ2pCLFlBQVksRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUM7WUFDL0UsZUFBZSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQztZQUN0RCxjQUFjLEVBQUUsYUFBYTtZQUM3QixZQUFZLEVBQUUsV0FBVztZQUN6QixZQUFZLEVBQUUsVUFBVTtZQUN4QixRQUFRLEVBQUUsTUFBTTtZQUNoQixRQUFRLEVBQUUsTUFBTTtZQUNoQixVQUFVLEVBQUUsSUFBSTtZQUNoQixRQUFRLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSTtZQUMvQyxPQUFPLEVBQUUsTUFBTTtTQUNoQixDQUFBO1FBQ0QsSUFBSSxRQUFRLEdBQUcsQ0FBQztZQUNkLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxRQUFRLENBQUM7UUFDakMsSUFBSSxRQUFRLEdBQUcsQ0FBQztZQUNkLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxRQUFRLENBQUM7UUFDakMsSUFBSSxTQUFTLEdBQUcsQ0FBQztZQUNmLE9BQU8sQ0FBQyxXQUFXLENBQUMsR0FBRyxTQUFTLENBQUM7UUFDbkMsSUFBSSxTQUFTLEdBQUcsQ0FBQztZQUNmLE9BQU8sQ0FBQyxXQUFXLENBQUMsR0FBRyxTQUFTLENBQUM7UUFDbkMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLCtDQUErQyxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQWEsRUFBRSxFQUFFO1lBQzFJLE9BQU87Z0JBQ0wsS0FBSyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSztnQkFDMUIsUUFBUSxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUTtnQkFDaEMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUTtnQkFDaEMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQVksRUFBRSxFQUFFLENBQUMsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDdEUsQ0FBQTtRQUNILENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO0lBQ0Qsc0JBQXNCLENBQUMsVUFBa0I7UUFDdkMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDMUIsTUFBTSxPQUFPLEdBQVE7WUFDbkIsWUFBWSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQztZQUMvRSxZQUFZLEVBQUUsQ0FBQyxVQUFVLENBQUM7WUFDMUIsZUFBZSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQztZQUN0RCxRQUFRLEVBQUUsQ0FBQztZQUNYLFVBQVUsRUFBRSxFQUFFO1lBQ2QsUUFBUSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUk7WUFDL0MsT0FBTyxFQUFFLE1BQU07U0FDaEIsQ0FBQTtRQUNELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyw2Q0FBNkMsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFhLEVBQUUsRUFBRTtZQUN4SSxPQUFPO2dCQUNMLEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSztnQkFDckIsSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQVksRUFBRSxFQUFFLENBQUMsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDdEUsQ0FBQTtRQUNILENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO0lBQ0Qsd0JBQXdCLENBQUMsWUFBb0I7UUFDM0MsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDMUIsTUFBTSxPQUFPLEdBQVE7WUFDbkIsWUFBWSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQztZQUMvRSxjQUFjLEVBQUUsQ0FBQyxZQUFZLENBQUM7WUFDOUIsZUFBZSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQztZQUN0RCxRQUFRLEVBQUUsQ0FBQztZQUNYLFVBQVUsRUFBRSxFQUFFO1lBQ2QsUUFBUSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUk7WUFDL0MsT0FBTyxFQUFFLE1BQU07U0FDaEIsQ0FBQTtRQUNELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyw2Q0FBNkMsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFhLEVBQUUsRUFBRTtZQUN4SSxPQUFPO2dCQUNMLEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSztnQkFDckIsSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQVksRUFBRSxFQUFFLENBQUMsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDdEUsQ0FBQTtRQUNILENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO0lBRUQsU0FBUyxDQUFDLE9BQWU7UUFDdkIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLDJCQUEyQixFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzlFLENBQUM7SUFDRCxhQUFhLENBQUMsU0FBaUI7UUFDN0IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLDJDQUEyQyxTQUFTLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNyRyxDQUFDO0lBRUQsV0FBVyxDQUFDLE1BQWMsRUFBRSxXQUFtQjtRQUM3QyxNQUFNLFVBQVUsR0FBVyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbkcsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLHFDQUFxQyxNQUFNLGdCQUFnQixXQUFXLGVBQWUsVUFBVSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDakosQ0FBQztJQUNELFNBQVMsQ0FBQyxNQUFjLEVBQUUsR0FBVyxFQUFFLFVBQXNCO1FBQzNELE1BQU0sVUFBVSxHQUFXLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNuRyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsc0NBQXNDLE1BQU0sUUFBUSxHQUFHLGVBQWUsVUFBVSxFQUFFLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDdkksQ0FBQztJQUNELFNBQVMsQ0FBQyxNQUFjLEVBQUUsV0FBbUI7UUFDM0MsTUFBTSxVQUFVLEdBQVcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ25HLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxnQ0FBZ0MsTUFBTSxnQkFBZ0IsV0FBVyxlQUFlLFVBQVUsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzVJLENBQUM7SUFDRCxzQkFBc0IsQ0FBQyxNQUFjO1FBQ25DLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxtQ0FBbUMsTUFBTSxxQkFBcUIsQ0FBQyxDQUFDO0lBQ3ZHLENBQUM7SUFFRCxXQUFXLENBQUMsUUFBYTtRQUN2QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsc0JBQXNCLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUNELFlBQVksQ0FBQyxNQUFjLEVBQUUsUUFBNEM7UUFDdkUsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLCtCQUErQixNQUFNLGFBQWEsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUNyRyxDQUFDO0lBQ0QsV0FBVyxDQUFDLE1BQWM7UUFDeEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLGtDQUFrQyxNQUFNLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN6RixDQUFDO0lBQ0QsY0FBYyxDQUFDLElBQVM7UUFDdEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLDRCQUE0QixFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFDRCxhQUFhLENBQUMsT0FBWTtRQUN4QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsNEJBQTRCLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUNELGFBQWEsQ0FBQyxPQUFZO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyw0QkFBNEIsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM5RSxDQUFDO0lBQ0QsZUFBZSxDQUFDLE1BQWM7UUFDNUIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLCtCQUErQixNQUFNLG9CQUFvQixDQUFDLENBQUE7SUFDakcsQ0FBQztJQUNELGNBQWMsQ0FBQyxNQUFjLEVBQUUsT0FBWTtRQUN6QyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsc0NBQXNDLE1BQU0sRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2hHLENBQUM7SUFFRCxVQUFVO0lBQ1Ysa0JBQWtCLENBQUMsT0FBWTtRQUM3QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEdBQUcsZUFBZSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFDRCxrQkFBa0IsQ0FBQyxPQUFZO1FBQzdCLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLHdCQUF3QixDQUFDLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUMxRixJQUFJLG9CQUFvQixHQUFHLEVBQUUsR0FBRyxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxDQUFDO1FBQ3BFLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxnQkFBZ0IsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO0lBQ3JGLENBQUM7SUFDRCxvQkFBb0IsQ0FBQyxNQUFjO1FBQ2pDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxvQ0FBb0MsTUFBTSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQWEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFZLEVBQUUsRUFBRSxDQUFDLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQUEsQ0FBQztJQUN0TCxDQUFDO0lBRUQsYUFBYSxDQUFDLE9BQVk7UUFDeEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLG1DQUFtQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3RGLENBQUM7SUFFRCxlQUFlLENBQUMsT0FBWTtRQUMxQixNQUFNLFVBQVUsR0FBVyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbkcsc0NBQXNDO1FBQ3RDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxvQ0FBb0MsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN0RixDQUFDO0lBRUQsY0FBYyxDQUFDLFFBQWE7UUFDMUIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLG1DQUFtQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3RGLENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxNQUFXLEVBQUUsZ0JBQXFCO1FBQ3ZELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxpREFBaUQsTUFBTSxxQkFBcUIsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQTtJQUMzSSxDQUFDO0lBRUQsaUJBQWlCLENBQUMsSUFBUztRQUN6QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcscUJBQXFCLEVBQUUsSUFBSSxDQUFDLENBQUE7SUFDcEUsQ0FBQztJQUVELGNBQWMsQ0FBQyxVQUFlLEVBQUUsSUFBWSxFQUFFLElBQVk7UUFDeEQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FDbEIsSUFBSSxDQUFDLFFBQVEsR0FBRyw4Q0FBOEMsVUFBVSxTQUFTLElBQUksU0FBUyxJQUFJLEVBQUUsQ0FDckcsQ0FBQTtJQUNILENBQUM7SUFFRCxlQUFlLENBQUMsVUFBZSxFQUFFLElBQVU7UUFDekMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FDbEIsSUFBSSxDQUFDLFFBQVEsR0FBRywrQ0FBK0MsVUFBVSxTQUFTLElBQUksRUFBRSxDQUN6RixDQUFBO0lBQ0gsQ0FBQztJQUVELGFBQWEsQ0FBQyxVQUFlLEVBQUUsSUFBUyxFQUFFLElBQVMsRUFBRSxVQUFnQjtRQUNuRSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDaEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FDbEIsSUFBSSxDQUFDLFFBQVEsR0FBRyw2Q0FBNkMsVUFBVSxTQUFTLElBQUksU0FBUyxJQUFJLEVBQUUsQ0FDcEcsQ0FBQTtRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FDbEIsSUFBSSxDQUFDLFFBQVEsR0FBRyw2Q0FBNkMsVUFBVSxTQUFTLElBQUksU0FBUyxJQUFJLGVBQWUsVUFBVSxFQUFFLENBQzdILENBQUE7UUFFSCxDQUFDO0lBQ0gsQ0FBQztJQUVELHFCQUFxQixDQUFDLFVBQWUsRUFBRSxJQUFZLEVBQUUsSUFBWSxFQUFFLFVBQWtCLEVBQUUsU0FBaUI7UUFDdEcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2YsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FDbEIsSUFBSSxDQUFDLFFBQVEsR0FBRywyQ0FBMkMsVUFBVSxTQUFTLElBQUksU0FBUyxJQUFJLGVBQWUsVUFBVSxFQUFFLENBQzNILENBQUE7UUFDSCxDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQ2xCLElBQUksQ0FBQyxRQUFRLEdBQUcsMkNBQTJDLFVBQVUsU0FBUyxJQUFJLFNBQVMsSUFBSSxlQUFlLFVBQVUsY0FBYyxTQUFTLEVBQUUsQ0FDbEosQ0FBQTtRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsaUJBQWlCLENBQUMsSUFBUztRQUN6QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUNsQixJQUFJLENBQUMsUUFBUSxHQUFHLDRDQUE0QyxFQUFFLElBQUksQ0FDbkUsQ0FBQTtJQUNILENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxHQUFRLEVBQUUsU0FBYyxFQUFFLFFBQWE7UUFDM0QsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FDbEIsSUFBSSxDQUFDLFFBQVEsR0FBRyx5QkFBeUIsR0FBRywyQkFBMkIsU0FBUyxxQ0FBcUMsUUFBUSxFQUFFLENBQ2hJLENBQUE7SUFDSCxDQUFDO0lBRUQsb0NBQW9DLENBQUMsVUFBZSxFQUFFLE9BQVk7UUFDaEUsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FDbEIsSUFBSSxDQUFDLFFBQVEsR0FBRyx5Q0FBeUMsVUFBVSxZQUFZLE9BQU8sOEJBQThCLENBQ3JILENBQUE7SUFDSCxDQUFDO0lBRUQsZUFBZSxDQUFDLE9BQVk7UUFDMUIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FDbkIsSUFBSSxDQUFDLFFBQVEsR0FBRyw2Q0FBNkMsT0FBTyxFQUFFLGNBQWMsSUFBSSxFQUFFLEVBQUUsRUFBRSxPQUFPLENBQ3RHLENBQUE7SUFDSCxDQUFDO0lBRUQsaUJBQWlCLENBQUMsSUFBUztRQUN6QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUNuQixJQUFJLENBQUMsUUFBUSxHQUFHLHNEQUFzRCxFQUFFLElBQUksQ0FDN0UsQ0FBQTtJQUNILENBQUM7SUFFRCw0QkFBNEIsQ0FBQyxPQUFZO1FBQ3ZDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQ25CLElBQUksQ0FBQyxRQUFRLEdBQUcsdUNBQXVDLEVBQUUsT0FBTyxDQUNqRSxDQUFBO0lBQ0gsQ0FBQztJQUdELDhCQUE4QixDQUFDLE9BQVk7UUFDekMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFdEQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FDbEIsSUFBSSxDQUFDLFFBQVEsR0FBRyx5Q0FBeUMsVUFBVSxZQUFZLE9BQU8sRUFBRSxDQUN6RixDQUFBO0lBQ0gsQ0FBQztJQUVELGVBQWUsQ0FBQyxPQUFZO1FBQzFCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQ2xCLElBQUksQ0FBQyxRQUFRLEdBQUcsbUJBQW1CLEVBQUUsT0FBTyxDQUM3QyxDQUFBO0lBQ0gsQ0FBQztJQUVELHNCQUFzQixDQUFDLElBQVM7UUFDOUIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FDbEIsSUFBSSxDQUFDLFFBQVEsR0FBRyw2QkFBNkIsRUFBRSxJQUFJLENBQ3BELENBQUE7SUFDSCxDQUFDO0lBRUQsY0FBYyxDQUFDLE9BQVk7UUFDekIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FDbEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxnQ0FBZ0MsRUFBRSxPQUFPLENBQUMsQ0FBQTtJQUM5RCxDQUFDO0lBRUQsV0FBVyxDQUFDLE1BQVc7UUFDckIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FDbEIsSUFBSSxDQUFDLFFBQVEsR0FBRyw0QkFBNEIsTUFBTSxFQUFFLENBQ3JELENBQUE7SUFDSCxDQUFDO0lBRUQsbUJBQW1CLENBQUMsT0FBWTtRQUM5QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUNsQixJQUFJLENBQUMsUUFBUSxHQUFHLHlCQUF5QixFQUFFLE9BQU8sQ0FDbkQsQ0FBQTtJQUNILENBQUM7SUFFRCx5QkFBeUI7UUFDdkIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FDbEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxvQ0FBb0MsQ0FDckQsQ0FBQTtJQUNILENBQUM7SUFFTyxTQUFTLENBQUksR0FBa0I7UUFDckMsSUFBSSxDQUFDLEdBQUc7WUFBRSxPQUFPLElBQUksQ0FBQztRQUN0QixJQUFJLENBQUM7WUFBQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFNLENBQUM7UUFBQyxDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQUMsT0FBTyxJQUFJLENBQUM7UUFBQyxDQUFDO0lBQzdELENBQUM7SUFFRCxXQUFXO1FBQ1QsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDckQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBMEIsV0FBVyxDQUFDLENBQUM7UUFFckUsa0JBQWtCO1FBQ2xCLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzNELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQTBCLGNBQWMsQ0FBQyxDQUFDO1FBRTVFLDJFQUEyRTtRQUMzRSxNQUFNLFVBQVUsR0FBRyxDQUFDLE9BQU8sRUFBRSxVQUFVLElBQUksV0FBVyxFQUFFLFVBQVUsSUFBSSxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUVyRixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsdUJBQXVCLFVBQVUsYUFBYSxDQUFDLENBQUM7SUFDdkYsQ0FBQztJQUdELG1CQUFtQjtRQUNqQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsSUFBSSxzQ0FBc0MsQ0FBQztRQUNoRyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUNsQixJQUFJLENBQUMsUUFBUSxHQUFHLDZDQUE2QyxVQUFVLEVBQUUsQ0FDMUUsQ0FBQztJQUNKLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxPQUFZO1FBQy9CLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQ25CLElBQUksQ0FBQyxRQUFRLEdBQUcsdUNBQXVDLEVBQUUsT0FBTyxDQUNqRSxDQUFBO0lBQ0gsQ0FBQztJQUVELHNCQUFzQixDQUFDLE9BQVk7UUFDakMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FDbEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxrQ0FBa0MsT0FBTyxlQUFlLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQzdHLENBQUE7SUFDSCxDQUFDO0lBRUQsMkJBQTJCLENBQUMsWUFBaUI7UUFDM0MsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FDbkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxrQ0FBa0MsRUFDbEQsWUFBWSxDQUNiLENBQUM7SUFDSixDQUFDO0lBRUQsY0FBYyxDQUFDLE9BQVk7UUFDekIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FDbkIsSUFBSSxDQUFDLFFBQVEsR0FBRyw2Q0FBNkMsRUFBRSxPQUFPLENBQ3ZFLENBQUE7SUFDSCxDQUFDO0lBQ0QsdUJBQXVCO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQ2xCLElBQUksQ0FBQyxRQUFRLEdBQUcscUJBQXFCLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQ2xGLENBQUE7SUFDSCxDQUFDO0lBQ0QsWUFBWSxDQUFDLE9BQVk7UUFDdkIsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFBO1FBQ1osSUFBSSxPQUFPLEVBQUUsT0FBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQy9ELEdBQUcsR0FBRyxHQUFHLEdBQUcsYUFBYSxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUE7UUFDNUMsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQ2xCLElBQUksQ0FBQyxRQUFRLEdBQUcscUNBQXFDLE9BQU8sQ0FBQyxVQUFVLEdBQUcsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUNwRixDQUFBO0lBQ0gsQ0FBQztJQUVELHdCQUF3QixDQUFDLE9BQVk7UUFDbkMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FDbEIsSUFBSSxDQUFDLGVBQWUsR0FBRyxjQUFjLEVBQUUsT0FBTyxDQUMvQyxDQUFBO0lBQ0gsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFZO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQ2xCLElBQUksQ0FBQyxRQUFRLEdBQUcsMENBQTBDLE9BQU8sQ0FBQyxTQUFTLFlBQVksT0FBTyxDQUFDLE9BQU8sZUFBZSxPQUFPLENBQUMsVUFBVSxFQUFFLENBQzFJLENBQUE7SUFDSCxDQUFDO0lBRUQsWUFBWSxDQUFDLE9BQWU7UUFDMUIsSUFBSSxPQUFPLEdBQUc7WUFDWixPQUFPLEVBQUUsT0FBTztZQUNoQixVQUFVLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRTtZQUNwRCxNQUFNLEVBQUUsQ0FBQztZQUNULFFBQVEsRUFBRSxJQUFJO1NBQ2YsQ0FBQTtRQUNELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQ2xCLElBQUksQ0FBQyxRQUFRLEdBQUcscUJBQXFCLEVBQUUsT0FBTyxDQUFDLENBQUE7SUFDbkQsQ0FBQztJQUNELGNBQWMsQ0FBQyxLQUFVO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQ25CLElBQUksQ0FBQyxRQUFRLEdBQUcsMERBQTBELEtBQUssZUFBZSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FDdkksQ0FBQTtJQUNILENBQUM7SUFDRCxrQkFBa0IsQ0FBQyxPQUFZO1FBQzdCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQ25CLElBQUksQ0FBQyxRQUFRLEdBQUcscUNBQXFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsRUFBRSxPQUFPLENBQ2hGLENBQUE7SUFDSCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsTUFBVyxFQUFFLElBQVM7UUFDckMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FDbEIsdURBQXVELE1BQU0sU0FBUyxJQUFJLEVBQUUsQ0FDN0UsQ0FBQTtJQUNILENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxPQUFZO1FBQzVCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQ2xCLG9EQUFvRCxPQUFPLEVBQUUsQ0FDOUQsQ0FBQTtJQUNILENBQUM7SUFHRCxZQUFZO1FBQ1YsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FDbEIsdUVBQXVFLENBQ3hFLENBQUE7SUFDSCxDQUFDO0lBRUQsV0FBVztRQUNULE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQ2xCLHFEQUFxRCxDQUN0RCxDQUFBO0lBQ0gsQ0FBQztJQUVELHlCQUF5QixDQUFDLE9BQVksRUFBRSxNQUFXLEVBQUUsSUFBUztRQUM1RCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUNsQixrRUFBa0UsT0FBTyxXQUFXLE1BQU0sU0FBUyxJQUFJLEVBQUUsQ0FDMUcsQ0FBQTtJQUNILENBQUM7SUFFRCxjQUFjLENBQUMsSUFBUztRQUN0QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUNsQixzREFBc0QsRUFBRSxJQUFJLENBQzdELENBQUE7SUFDSCxDQUFDO0lBRUQsWUFBWSxDQUFDLE9BQWtDO1FBQzdDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQ2xCLElBQUksQ0FBQyxRQUFRLEdBQUcseUJBQXlCLEVBQUUsT0FBTyxDQUNuRCxDQUFBO0lBQ0gsQ0FBQztJQUVELHFCQUFxQixDQUFDLE9BQThCO1FBQ2xELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQ2xCLElBQUksQ0FBQyxRQUFRLEdBQUcsaUNBQWlDLEVBQUUsT0FBTyxDQUMzRCxDQUFBO0lBQ0gsQ0FBQztJQUVELGtCQUFrQixDQUFDLE9BQWtDO1FBQ25ELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQ2xCLElBQUksQ0FBQyxRQUFRLEdBQUcsNkJBQTZCLEVBQUUsT0FBTyxDQUN2RCxDQUFBO0lBQ0gsQ0FBQztJQUVELGVBQWUsQ0FBQyxPQUFZO1FBQzFCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQ25CLElBQUksQ0FBQyxRQUFRLEdBQUcseUJBQXlCLEVBQUUsT0FBTyxDQUNuRCxDQUFBO0lBQ0gsQ0FBQztJQUVELHNCQUFzQixDQUFDLFdBQWdCO1FBQ3JDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQ25CO0NBQ0wsRUFBRSxXQUFXLENBQ1QsQ0FBQTtJQUNILENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxNQUFjO1FBQ25DLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9DLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQ2xCLElBQUksQ0FBQyxRQUFRLEdBQUcsa0NBQWtDLE1BQU0sZUFBZSxVQUFVLEVBQUUsQ0FDcEYsQ0FBQTtJQUNILENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUNsQiw4RkFBOEYsQ0FDL0YsQ0FBQTtJQUNILENBQUM7SUFFRCxZQUFZLENBQUMsTUFBYyxFQUFFLE1BQVcsRUFBRSxNQUFlO1FBQ3ZELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQ25CLElBQUksQ0FBQyxRQUFRLEdBQUcsMENBQTBDLE1BQU0saUJBQWlCLE1BQU0sRUFBRSxFQUFFLE1BQU0sQ0FDbEcsQ0FBQTtJQUNILENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxTQUFpQixFQUFFLFVBQWtCO1FBQ3pELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQ2xCLElBQUksQ0FBQyxRQUFRLEdBQUcsMkNBQTJDLFNBQVMsZUFBZSxVQUFVLGFBQWEsRUFBRSxFQUFFLENBQy9HLENBQUE7SUFDSCxDQUFDO0lBQ0Qsa0JBQWtCLENBQUMsVUFBaUI7UUFDbEMsSUFBSSxHQUFHLEdBQVEsRUFBRSxDQUFDO1FBRWxCLEtBQUssSUFBSSxLQUFLLElBQUksVUFBVSxFQUFFLENBQUM7WUFDN0IsS0FBSyxJQUFJLFVBQVUsSUFBSSxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQ3hDLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVztvQkFDekIsU0FBUztnQkFFWCxJQUFJLFFBQVEsR0FBRyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7Z0JBQ2pGLElBQUksU0FBUyxHQUFHLFVBQVUsQ0FBQyxjQUFjLENBQUM7Z0JBRTFDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztvQkFDbkIsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDckIsQ0FBQztnQkFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7b0JBQzlCLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQ2hDLENBQUM7Z0JBQ0QsS0FBSyxDQUFDLGFBQWEsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxXQUFXLENBQUM7Z0JBQzlDLEtBQUssQ0FBQyxjQUFjLENBQUMsR0FBRyxVQUFVLENBQUMsWUFBWSxDQUFDO2dCQUVoRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDbkQsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUMxQyxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVELGVBQWUsQ0FBQyxPQUFZO1FBQzFCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGVBQWUsR0FBRyx5QkFBeUIsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNsRixDQUFDO0lBQ0QsOEJBQThCLENBQUMsVUFBa0I7UUFDL0MsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsZUFBZSxHQUFHLG9CQUFvQixVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQ2hGLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBWTtRQUN0QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxlQUFlLEdBQUcsNEJBQTRCLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDckYsQ0FBQztJQUNELFdBQVcsQ0FBQyxPQUFZO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsR0FBRyxvQkFBb0IsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM5RSxDQUFDO0lBQ0QsZUFBZSxDQUFDLE9BQWU7UUFDN0IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsZUFBZSxHQUFHLGlCQUFpQixPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFDRCxvQkFBb0IsQ0FBQyxPQUFlO1FBQ2xDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsR0FBRyx5QkFBeUIsT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDdkYsQ0FBQztJQUNELG9CQUFvQixDQUFDLE9BQWU7UUFDbEMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsZUFBZSxHQUFHLDBCQUEwQixPQUFPLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN2RixDQUFDO0lBQ0QsYUFBYSxDQUFDLEdBQVEsRUFBRSxNQUFXO1FBQ2pDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxzQ0FBc0MsR0FBRyxXQUFXLE1BQU0seUJBQXlCLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDckksQ0FBQztJQUNELHFCQUFxQixDQUFDLE9BQVk7UUFDaEMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxHQUFHLCtCQUErQixFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBQ3BGLENBQUM7SUFDRCxZQUFZLENBQUMsT0FBWSxFQUFFLFlBQXFCO1FBQzlDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM5QixNQUFNLE9BQU8sR0FBRyxJQUFJLFdBQVcsQ0FBQztZQUM5QixlQUFlLEVBQUUsVUFBVSxLQUFLLEVBQUU7U0FDbkMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUNqQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEdBQUcsK0NBQStDLEVBQUUsT0FBTyxFQUFFLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUE7UUFDM0gsQ0FBQzthQUNJLENBQUM7WUFDSixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEdBQUcsMENBQTBDLEVBQUUsT0FBTyxFQUFFLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUE7UUFDdEgsQ0FBQztJQUNILENBQUM7SUFDRCxjQUFjLENBQUMsVUFBZ0I7UUFDN0IsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzlCLE1BQU0sT0FBTyxHQUFHLElBQUksV0FBVyxDQUFDO1lBQzlCLGVBQWUsRUFBRSxVQUFVLEtBQUssRUFBRTtTQUNuQyxDQUFDLENBQUM7UUFDSCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEdBQUcsMkNBQTJDLFVBQVUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFBO0lBQzlILENBQUM7SUFDRCxlQUFlO1FBQ2IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLG9CQUFvQixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMscUJBQXFCLENBQUMsQ0FBQTtJQUNuSCxDQUFDO0lBQ0Qsa0JBQWtCLENBQUMsVUFBZTtRQUNoQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDOUIsTUFBTSxPQUFPLEdBQUcsSUFBSSxXQUFXLENBQUM7WUFDOUIsZUFBZSxFQUFFLFVBQVUsS0FBSyxFQUFFO1NBQ25DLENBQUMsQ0FBQztRQUNILE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRywwQ0FBMEMsVUFBVSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUE7SUFDNUgsQ0FBQztJQUNELGlCQUFpQixDQUFDLEdBQVE7UUFDeEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLGdDQUFnQyxHQUFHLG1CQUFtQixDQUFDLENBQUE7SUFDOUYsQ0FBQztJQUNELGlCQUFpQixDQUFDLEdBQVEsRUFBRSxPQUFlO1FBQ3pDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxnQ0FBZ0MsR0FBRyxZQUFZLE9BQU8sRUFBRSxDQUFDLENBQUE7SUFDaEcsQ0FBQztJQUNELGVBQWUsQ0FBQyxHQUFRLEVBQUUsTUFBVyxFQUFFLFFBQWdCLEVBQUUsVUFBZSxFQUFFLFlBQXFCO1FBQzdGLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQ2xCLElBQUksQ0FBQyxRQUFRLEdBQUcsdURBQXVELEdBQUcsV0FBVyxNQUFNLGNBQWMsUUFBUSxlQUFlLFVBQVUsaUJBQWlCLFlBQVksRUFBRSxDQUMxSyxDQUFBO0lBQ0gsQ0FBQztJQUNELHlCQUF5QixDQUFDLE1BQVcsRUFBRSxJQUFTO1FBQzlDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQ25CLElBQUksQ0FBQyxRQUFRLEdBQUcsd0NBQXdDLE1BQU0sRUFBRSxFQUFFLElBQUksQ0FDdkUsQ0FBQTtJQUNILENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxHQUFRLEVBQUUsTUFBVztRQUN0QyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDOUIsTUFBTSxPQUFPLEdBQUcsSUFBSSxXQUFXLENBQUM7WUFDOUIsZUFBZSxFQUFFLFVBQVUsS0FBSyxFQUFFO1NBQ25DLENBQUMsQ0FBQztRQUNILE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxxREFBcUQsR0FBRyxXQUFXLE1BQU0sRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUE7SUFDN0ksQ0FBQztJQUNELFFBQVE7UUFDTixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQTtRQUNuRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFDRCxrQkFBa0IsQ0FBQyxPQUFZO1FBQzdCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM5QixNQUFNLE9BQU8sR0FBRyxJQUFJLFdBQVcsQ0FBQztZQUM5QixlQUFlLEVBQUUsVUFBVSxLQUFLLEVBQUU7U0FDbkMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxHQUFHLGdDQUFnQyxFQUFFLE9BQU8sRUFBRSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFBO0lBQzNHLENBQUM7SUFDRCxnQkFBZ0IsQ0FBQyxRQUFhO1FBQzVCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxtQ0FBbUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUE7SUFDOUYsQ0FBQztJQUVELGFBQWEsQ0FBQyxPQUFZO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxxQ0FBcUMsT0FBTyxFQUFFLENBQUMsQ0FBQTtJQUMxRixDQUFDO0lBRUQsVUFBVSxDQUFDLE9BQVk7UUFDckIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLGtCQUFrQixFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBQ3BFLENBQUM7SUFDRCwyQkFBMkIsQ0FBQyxPQUFZO1FBQ3RDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGVBQWUsR0FBRyxpQ0FBaUMsT0FBTyxFQUFFLENBQUMsQ0FBQTtJQUN6RixDQUFDO0lBQ0QsY0FBYyxDQUFDLE9BQVk7UUFDekIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLDZCQUE2QixFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBQzlFLENBQUM7SUFFRDs7O09BR0c7SUFDSCxTQUFTLENBQUMsVUFBa0IsRUFBRSxVQUFrQjtRQUM5QyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsOEJBQThCLEVBQUUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUNuRyxDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQVk7UUFDdEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLGdDQUFnQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2xGLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxPQUFZO1FBQzNCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxxQ0FBcUMsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN2RixDQUFDO0lBRUQsb0JBQW9CLENBQUMsT0FBWTtRQUMvQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsb0NBQW9DLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDdEYsQ0FBQztJQUVELEtBQUssQ0FBQyxZQUFpQjtRQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLDJCQUEyQixFQUFFLFlBQVksQ0FBQzthQUN0RSxTQUFTLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLHNDQUFzQyxDQUFDO1FBQy9ILE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxtREFBbUQsVUFBVSxFQUFFLENBQUMsQ0FBQTtJQUN2RyxDQUFDO0lBRUQsWUFBWSxDQUFDLE1BQVc7UUFDdEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLGtCQUFrQixNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ25FLENBQUM7K0dBOXVCVSxXQUFXLDRDQWNaLE9BQU8sYUFDUCxhQUFhLGFBQ2IsUUFBUSwwQ0FFUixhQUFhLGFBQ2IsWUFBWSxhQUNaLGVBQWU7bUhBcEJkLFdBQVcsY0FGVixNQUFNOzs0RkFFUCxXQUFXO2tCQUh2QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBZUksTUFBTTsyQkFBQyxPQUFPOzswQkFDZCxNQUFNOzJCQUFDLGFBQWE7OzBCQUNwQixNQUFNOzJCQUFDLFFBQVE7OzBCQUVmLE1BQU07MkJBQUMsYUFBYTs7MEJBQ3BCLE1BQU07MkJBQUMsWUFBWTs7MEJBQ25CLE1BQU07MkJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XHJcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgT25EZXN0cm95IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgbWFwLCBPYnNlcnZhYmxlLCBTdWJzY3JpYmVyLCBTdWJzY3JpcHRpb24gfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBSZXZpZXcgfSBmcm9tIFwiLi4vZWNvbW1lcmNlL3N0eWxlcy9yZXZpZXcubW9kYWxcIjtcclxuaW1wb3J0IHsgRGV2aWNlSW5mbywgVXNlciB9IGZyb20gXCIuLi9lY29tbWVyY2Uvc3R5bGVzL3VzZXIubW9kYWxcIjtcclxuaW1wb3J0IHsgUGluQ29kZUxvY2F0aW9uSW50ZXIgfSBmcm9tIFwiLi4vZWNvbW1lcmNlL3N0eWxlcy9QaW5jb2RlTG9jYXRpb25JbnRlci5tb2RlbFwiO1xyXG5pbXBvcnQgeyBQaW5jb2RlTG9jYXRpb24gfSBmcm9tIFwiLi4vZWNvbW1lcmNlL3N0eWxlcy9QaW5jb2RlTG9jYXRpb24ubW9kZWxcIjtcclxuaW1wb3J0IHsgQVBJX1VSTCwgQ01JU19VUkwsIEVDT01NRVJDRV9VUkwsIFBBU1NCT09LX1VSTCwgQVBQT0lOVE1FTlRfVVJMIH0gZnJvbSAnLi4vdG9rZW5zL2FwaS10b2tlbic7XHJcbmltcG9ydCB7IENhdGVnb3J5IH0gZnJvbSBcIi4uL2Vjb21tZXJjZS9zdHlsZXMvY2F0ZWdvcnkubW9kYWxcIlxyXG5pbXBvcnQgeyBjaGVja0l0ZW1BbHJlYWR5QWRkZWQsIFByb2R1Y3QsIHN5bmNJdGVtVG9TZXJ2ZXJEQlJlcXVlc3QgfSBmcm9tIFwiLi4vZWNvbW1lcmNlL3N0eWxlcy9wcm9kdWN0Lm1vZGFsXCI7XHJcbmltcG9ydCB7IENvbGxlY3Rpb24gfSBmcm9tIFwiLi4vZWNvbW1lcmNlL3N0eWxlcy9Db2xsZWN0aW9uLm1vZGFsXCI7XHJcbmltcG9ydCB7IFN0b3JhZ2VTZXJ2aWNlU2VydmljZSB9IGZyb20gXCIuL3N0b3JhZ2Uuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBDb29raWVTZXJ2aWNlIH0gZnJvbSBcIm5neC1jb29raWUtc2VydmljZVwiO1xyXG5pbXBvcnQgeyBMT0NBTF9TVE9SQUdFIH0gZnJvbSAnLi4vc2VydmljZXMvbG9jYWwtc3RvcmFnZS50b2tlbic7XHJcbmltcG9ydCB7IFN0b3JhZ2VMaWtlIH0gZnJvbSAnLi4vc2VydmljZXMvc3RvcmFnZS1saWtlJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSZXN0U2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcblxyXG4gIC8vIHByaXZhdGUgQkFTRV9VUkw6IHN0cmluZyA9IFwiaHR0cHM6Ly9kZXYtYXBpLnNpbXBvLmFpL1wiO1xyXG4gIC8vIHByaXZhdGUgRUNPTU1FUkNFX1VSTDogc3RyaW5nID0gXCJodHRwczovL2Rldi1lY29tbWVyY2Uuc2ltcG8uYWkvXCI7XHJcbiAgLy8gcHJpdmF0ZSBDTUlTX1VSTDogc3RyaW5nID0gXCJodHRwczovL2FwaS1jbWlzLnRlanNvZnQuY29tL1wiOyAvL3Byb2R1Y3Rpb25cclxuICAvLyBwcml2YXRlIENNSVNfVVJMOiBzdHJpbmcgPSBcImh0dHBzOi8vZGV2LWFwaS5zaW1wby5haS9cIjsgLy9kZXZcclxuICAvLyBwcml2YXRlIENNSVNfVVJMOiBzdHJpbmcgPSBcImh0dHBzOi8vc3RhZ2VhcGktY21pcy50ZWpzb2Z0LmNvbS9cIjsgLy9zdGFnZVxyXG4gIHByaXZhdGUgZW52aXJvbm1lbnRUeXBlU3Vic2NyaWJlcjogU3Vic2NyaXB0aW9uIHwgbnVsbCA9IG51bGw7XHJcbiAgYnVzaW5lc3NEZXRhaWxzOiBhbnk7XHJcbiAgc3ViSW5kdXN0cnlOYW1lOiBhbnk7XHJcbiAgaXNKZXdlbGxlcnk6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGh0dHA6IEh0dHBDbGllbnQsXHJcbiAgICBASW5qZWN0KEFQSV9VUkwpIHByaXZhdGUgQkFTRV9VUkw6IHN0cmluZyxcclxuICAgIEBJbmplY3QoRUNPTU1FUkNFX1VSTCkgcHJpdmF0ZSBFQ09NTUVSQ0VfVVJMOiBzdHJpbmcsXHJcbiAgICBASW5qZWN0KENNSVNfVVJMKSBwcml2YXRlIENNSVNfVVJMOiBzdHJpbmcsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvb2tpZVNlcnZpY2U6IENvb2tpZVNlcnZpY2UsXHJcbiAgICBASW5qZWN0KExPQ0FMX1NUT1JBR0UpIHByaXZhdGUgc3RvcmFnZTogU3RvcmFnZUxpa2UsXHJcbiAgICBASW5qZWN0KFBBU1NCT09LX1VSTCkgcHJpdmF0ZSBQQVNTQk9PS19VUkw6IHN0cmluZyxcclxuICAgIEBJbmplY3QoQVBQT0lOVE1FTlRfVVJMKSBwcml2YXRlIEFQUE9JTlRNRU5UX1VSTDogc3RyaW5nLFxyXG4gICAgLy8gQEluamVjdChSRUNPTU1FTkRBVElPTl9VUkwpIHByaXZhdGUgUkVDT01NRU5EQVRJT05fVVJMOiBzdHJpbmdcclxuICApIHtcclxuICB9XHJcbiAgb3JyYUJhc2VVcmw6IHN0cmluZyA9ICdodHRwczovL3N0YWdlYXBpLW9ycmEubGV0c21vYmlsaXR5LmNvbS8nO1xyXG4gIC8vIHBhc3NCb29rVXJsOiBzdHJpbmcgPSBcImh0dHBzOi8vcHJvZC1wYXNzYm9vay5zaW1wby5haS9cIjtcclxuICBnZXRCdXNpbmVzc0RldGFpbHMoKSB7XHJcbiAgICB0aGlzLmlzSmV3ZWxsZXJ5ID0gdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2lzTWF0ZXJpYWxCYXNlZFByaWNpbmcnKSA9PSAndHJ1ZScgPyB0cnVlIDogZmFsc2U7XHJcbiAgfVxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZW52aXJvbm1lbnRUeXBlU3Vic2NyaWJlcilcclxuICAgICAgdGhpcy5lbnZpcm9ubWVudFR5cGVTdWJzY3JpYmVyPy51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0RmVhdHVyZWRQcm9kdWN0KGNvbGxlY3Rpb25JZDogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbCkge1xyXG4gICAgdGhpcy5nZXRCdXNpbmVzc0RldGFpbHMoKTtcclxuICAgIGxldCBzdWJJbmR1c3RyeUlkOiBzdHJpbmcgfCBudWxsID0gdGhpcy5zdG9yYWdlLmdldEl0ZW0oXCJzdWJJbmR1c3RyeUlkXCIpO1xyXG4gICAgaWYgKCFzdWJJbmR1c3RyeUlkKVxyXG4gICAgICBzdWJJbmR1c3RyeUlkID0gXCJcIjtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL3Byb2R1Y3QvY29sbGVjdGlvbi9pZD9jb2xsZWN0aW9uSWQ9JHtjb2xsZWN0aW9uSWR9JmlzSmV3ZWxsZXJ5PSR7dGhpcy5pc0pld2VsbGVyeX1gKS5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4gcmVzcG9uc2UuZGF0YT8ubWFwKChwcm9kdWN0OiBhbnkpID0+IG5ldyBQcm9kdWN0KHByb2R1Y3QpKSkpO1xyXG4gIH1cclxuICBnZXRDYXRlZ29yaWVzQnlDb2xsZWN0aW9uSWQoY29sbGVjdGlvbklkOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL2ludmVudG9yeS9jYXRlZ29yeS9jb2xsZWN0aW9uSWQ/Y29sbGVjdGlvbklkPSR7Y29sbGVjdGlvbklkfWApLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiByZXNwb25zZS5kYXRhPy5tYXAoKGNhdGVnb3J5OiBhbnkpID0+IG5ldyBDYXRlZ29yeShjYXRlZ29yeSkpKSk7XHJcbiAgfVxyXG4gIC8vIGh0dHBzOi8vbmV3ZGV2LWFwaS5zaW1wby5haS9cclxuICBnZXRBbGxDYXRlZ29yaWVzQnlCdXNpbmVzc0lkKHBheWxvYWQ6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoXHJcbiAgICAgIHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL2ludmVudG9yeS9nZXQvY2F0ZWdvcnlgLCBwYXlsb2FkXHJcbiAgICApXHJcbiAgfVxyXG4gIGdldFBhc3Nib29rT3JkZXJTdGF0dXMob3JkZXJJZDogYW55KSB7XHJcbiAgICBjb25zdCB0b2tlbiA9IHRoaXMuZ2V0VG9rZW4oKTtcclxuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xyXG4gICAgICAnQXV0aG9yaXphdGlvbic6IGBCZWFyZXIgJHt0b2tlbn1gXHJcbiAgICB9KTtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdCh0aGlzLlBBU1NCT09LX1VSTCArIGBwYXNzYm9vay9tYW51YWwvcGF5bWVudC9zdGF0dXM/cGF5bWVudE9yZGVySWQ9JHtvcmRlcklkfWAsIHt9LCB7IGhlYWRlcnM6IGhlYWRlcnMgfSlcclxuICB9XHJcbiAgZ2V0UHJvZHVjdEJ5U2VsZWN0ZWRDYXRlZ29yeShjYXRlZ29yeUlkOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxyXG4gICAgICB0aGlzLkJBU0VfVVJMICsgYGVjb21tZXJjZS9wcm9kdWN0LyR7Y2F0ZWdvcnlJZH1gXHJcbiAgICApXHJcbiAgfVxyXG4gIGdldEFsbFNjaGVtZXModXNlcklkPzogYW55LCBzdG9yZUlkPzogYW55KTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuUEFTU0JPT0tfVVJMICsgYGV4dC9jb25uZWN0L3NpbXBvL3VzZXI/dXNlcklkPSR7dXNlcklkfSZzdG9yZUlkPSR7c3RvcmVJZH1gKTtcclxuICB9XHJcbiAgZ2V0QWxsUmVkZW1wdGlvblNjaGVtZXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLm9ycmFCYXNlVXJsICsgYHBhc3NCb29rL3JlZGVtcHRpb24vYW1vdW50L2NoZWNrP3VzZXJDb2RlPUNfMDAwMzEzODg1YCk7XHJcbiAgfVxyXG4gIGdldEFsbFByb2R1Y3RzKHBheWxvYWQ6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQodGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvcHJvZHVjdC9pdGVtL3NlYXJjaD9pc0pld2VsbGVyeT0ke3RoaXMuaXNKZXdlbGxlcnl9YCwgcGF5bG9hZCk7XHJcbiAgfVxyXG4gIGdldFByb2R1Y3REZXRhaWxzKHByb2R1Y3RJZDogc3RyaW5nIHwgbnVsbCA9IG51bGwpIHtcclxuICAgIHRoaXMuZ2V0QnVzaW5lc3NEZXRhaWxzKCk7XHJcbiAgICBjb25zdCBwYXlsb2FkOiBhbnkgPSB7XHJcbiAgICAgIHBhZ2VObzogMCxcclxuICAgICAgcGFnZVNpemU6IDEsXHJcbiAgICAgIGl0ZW1JZDogcHJvZHVjdElkLFxyXG4gICAgICBzdWJJbmR1c3RyeUlkOiB0aGlzLnN0b3JhZ2UuZ2V0SXRlbShcInN1YkluZHVzdHJ5SWRcIiksXHJcbiAgICAgIHVzZXJJZDogdGhpcy5zdG9yYWdlLmdldEl0ZW0oXCJwZXJJZFwiKSA/PyBudWxsLFxyXG4gICAgICByZXF1ZXN0OiBcIlVTRVJcIlxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQodGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvcHJvZHVjdC9pdGVtL3NlYXJjaD9pc0pld2VsbGVyeT0ke3RoaXMuaXNKZXdlbGxlcnl9YCwgcGF5bG9hZCkucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHJlc3BvbnNlLmRhdGEuZGF0YS5tYXAoKHByb2R1Y3Q6IGFueSkgPT4gbmV3IFByb2R1Y3QocHJvZHVjdCkpKSk7XHJcbiAgfVxyXG5cclxuICBnZXRQcm9kdWN0RGV0YWlsc1YyKHNsdWdOYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbCkge1xyXG4gICAgdGhpcy5nZXRCdXNpbmVzc0RldGFpbHMoKTtcclxuICAgIGNvbnN0IHBheWxvYWQ6IGFueSA9IHtcclxuICAgICAgcGFnZU5vOiAwLFxyXG4gICAgICBwYWdlU2l6ZTogMSxcclxuICAgICAgc2x1Z2lmaWVkTmFtZTogc2x1Z05hbWUsXHJcbiAgICAgIHN1YkluZHVzdHJ5SWQ6IHRoaXMuc3RvcmFnZS5nZXRJdGVtKFwic3ViSW5kdXN0cnlJZFwiKSxcclxuICAgICAgYnVzaW5lc3NJZDogdGhpcy5zdG9yYWdlLmdldEl0ZW0oXCJiSWRcIikgPz8gdGhpcy5zdG9yYWdlLmdldEl0ZW0oXCJidXNpbmVzc0lkXCIpLFxyXG4gICAgICB1c2VySWQ6IHRoaXMuc3RvcmFnZS5nZXRJdGVtKFwicGVySWRcIikgPz8gbnVsbCxcclxuICAgICAgcmVxdWVzdDogXCJVU0VSXCJcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL3Byb2R1Y3QvaXRlbVYyL3NlYXJjaD9pc0pld2VsbGVyeT0ke3RoaXMuaXNKZXdlbGxlcnl9YCwgcGF5bG9hZCkucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHJlc3BvbnNlLmRhdGEuZGF0YS5tYXAoKHByb2R1Y3Q6IGFueSkgPT4gbmV3IFByb2R1Y3QocHJvZHVjdCkpKSk7XHJcbiAgfVxyXG5cclxuICBnZXRDb2xsZWN0aW9uQnlJZHMoY29sbGVjdGlvbklkczogc3RyaW5nW10pIHtcclxuICAgIGNvbnN0IHBheWxvYWQgPSB7XHJcbiAgICAgIGlkczogY29sbGVjdGlvbklkc1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQodGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvaW52ZW50b3J5L2NvbGxlY3Rpb24vbGlzdC9hbGxgLCBwYXlsb2FkKS5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4gcmVzcG9uc2UuZGF0YT8ubWFwKChjb2xsZWN0aW9uOiBhbnkpID0+IG5ldyBDb2xsZWN0aW9uKGNvbGxlY3Rpb24pKSkpO1xyXG4gIH1cclxuXHJcbiAgZ2V0QWxsQ2F0ZWdvcmllcygpIHtcclxuXHJcbiAgICBjb25zdCBidXNpbmVzc0lkOiBzdHJpbmcgPSB0aGlzLnN0b3JhZ2UuZ2V0SXRlbShcImJJZFwiKSA/PyB0aGlzLnN0b3JhZ2UuZ2V0SXRlbShcImJ1c2luZXNzSWRcIikgPz8gXCJcIjtcclxuICAgIGNvbnN0IHN1YkluZHVzdHJ5SWQ6IHN0cmluZyA9IHRoaXMuc3RvcmFnZS5nZXRJdGVtKFwic3ViSW5kdXN0cnlJZFwiKSA/PyBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcInN1YkluZHVzdHJ5SWRcIikgPz8gXCJcIjtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL2ludmVudG9yeS9mZWF0dXJlZD9idXNpbmVzc0lkPSR7YnVzaW5lc3NJZH0mc3ViSWQ9JHtzdWJJbmR1c3RyeUlkfWApLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiByZXNwb25zZS5kYXRhPy5tYXAoKGNhdGVnb3J5OiBhbnkpID0+IG5ldyBDYXRlZ29yeShjYXRlZ29yeSkpKSk7XHJcbiAgfVxyXG4gIGdldEFsbENvbGxlY3Rpb25zKCkge1xyXG4gICAgY29uc3QgcGF5bG9hZDogYW55ID0ge1xyXG4gICAgICBwYWdlTm86IDAsXHJcbiAgICAgIHBhZ2VTaXplOiAxMDAsXHJcbiAgICAgIHJlcXVlc3Q6IFwiVVNFUlwiLFxyXG4gICAgICBidXNpbmVzc0lkOiB0aGlzLnN0b3JhZ2UuZ2V0SXRlbShcImJJZFwiKSA/PyB0aGlzLnN0b3JhZ2UuZ2V0SXRlbShcImJ1c2luZXNzSWRcIilcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KHRoaXMuQkFTRV9VUkwgKyAnZWNvbW1lcmNlL2ludmVudG9yeS9nZXQvY29sbGVjdGlvbicsIHBheWxvYWQpLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiByZXNwb25zZS5kYXRhLmRhdGE/Lm1hcCgoY29sbGVjdGlvbjogYW55KSA9PiBuZXcgQ29sbGVjdGlvbihjb2xsZWN0aW9uKSkpKTtcclxuICB9XHJcblxyXG4gIGdldEZpbHRlcmVkUHJvZHVjdChjb2xsZWN0aW9uSWRzOiBzdHJpbmdbXSwgY2F0ZWdvcnlJZHM6IHN0cmluZ1tdLCBzZWFyY2hUZXh0OiBzdHJpbmcsIG1pblByaWNlOiBudW1iZXIsIG1heFByaWNlOiBudW1iZXIsIG1pblJhdGluZzogbnVtYmVyLCBtYXhSYXRpbmc6IG51bWJlciwgc29ydEJ5OiBzdHJpbmcsIHBhZ2VObzogbnVtYmVyLCBzaXplOiBudW1iZXIpIHtcclxuICAgIHRoaXMuZ2V0QnVzaW5lc3NEZXRhaWxzKCk7XHJcbiAgICBsZXQgcGF5bG9hZDogYW55ID0ge1xyXG4gICAgICBcImJ1c2luZXNzSWRcIjogdGhpcy5zdG9yYWdlLmdldEl0ZW0oXCJiSWRcIikgPz8gdGhpcy5zdG9yYWdlLmdldEl0ZW0oXCJidXNpbmVzc0lkXCIpLFxyXG4gICAgICBcInN1YkluZHVzdHJ5SWRcIjogdGhpcy5zdG9yYWdlLmdldEl0ZW0oXCJzdWJJbmR1c3RyeUlkXCIpLFxyXG4gICAgICBcImNvbGxlY3Rpb25JZFwiOiBjb2xsZWN0aW9uSWRzLFxyXG4gICAgICBcImNhdGVnb3J5SWRcIjogY2F0ZWdvcnlJZHMsXHJcbiAgICAgIFwic2VhcmNoVGV4dFwiOiBzZWFyY2hUZXh0LFxyXG4gICAgICBcInNvcnRCeVwiOiBzb3J0QnksXHJcbiAgICAgIFwicGFnZU5vXCI6IHBhZ2VObyxcclxuICAgICAgXCJwYWdlU2l6ZVwiOiBzaXplLFxyXG4gICAgICBcInVzZXJJZFwiOiB0aGlzLnN0b3JhZ2UuZ2V0SXRlbShcInBlcklkXCIpID8/IG51bGwsXHJcbiAgICAgIHJlcXVlc3Q6IFwiVVNFUlwiXHJcbiAgICB9XHJcbiAgICBpZiAobWluUHJpY2UgPiAwKVxyXG4gICAgICBwYXlsb2FkW1wibWluUHJpY2VcIl0gPSBtaW5QcmljZTtcclxuICAgIGlmIChtYXhQcmljZSA+IDApXHJcbiAgICAgIHBheWxvYWRbXCJtYXhQcmljZVwiXSA9IG1heFByaWNlO1xyXG4gICAgaWYgKG1pblJhdGluZyA+IDApXHJcbiAgICAgIHBheWxvYWRbXCJtaW5SYXRpbmdcIl0gPSBtaW5SYXRpbmc7XHJcbiAgICBpZiAobWF4UmF0aW5nID4gMClcclxuICAgICAgcGF5bG9hZFtcIm1heFJhdGluZ1wiXSA9IG1heFJhdGluZztcclxuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL3Byb2R1Y3QvaXRlbVYyL3NlYXJjaD9pc0pld2VsbGVyeT0ke3RoaXMuaXNKZXdlbGxlcnl9YCwgcGF5bG9hZCkucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBjb3VudDogcmVzcG9uc2UuZGF0YS5jb3VudCxcclxuICAgICAgICBtaW5QcmljZTogcmVzcG9uc2UuZGF0YS5taW5QcmljZSxcclxuICAgICAgICBtYXhQcmljZTogcmVzcG9uc2UuZGF0YS5tYXhQcmljZSxcclxuICAgICAgICBkYXRhOiByZXNwb25zZS5kYXRhLmRhdGE/Lm1hcCgocHJvZHVjdDogYW55KSA9PiBuZXcgUHJvZHVjdChwcm9kdWN0KSlcclxuICAgICAgfVxyXG4gICAgfSkpO1xyXG4gIH1cclxuICBnZXRQcm9kdWN0QnlDYXRlZ29yeUlkKGNhdGVnb3J5SWQ6IHN0cmluZykge1xyXG4gICAgdGhpcy5nZXRCdXNpbmVzc0RldGFpbHMoKTtcclxuICAgIGNvbnN0IHBheWxvYWQ6IGFueSA9IHtcclxuICAgICAgXCJidXNpbmVzc0lkXCI6IHRoaXMuc3RvcmFnZS5nZXRJdGVtKFwiYklkXCIpID8/IHRoaXMuc3RvcmFnZS5nZXRJdGVtKFwiYnVzaW5lc3NJZFwiKSxcclxuICAgICAgXCJjYXRlZ29yeUlkXCI6IFtjYXRlZ29yeUlkXSxcclxuICAgICAgXCJzdWJJbmR1c3RyeUlkXCI6IHRoaXMuc3RvcmFnZS5nZXRJdGVtKFwic3ViSW5kdXN0cnlJZFwiKSxcclxuICAgICAgXCJwYWdlTm9cIjogMCxcclxuICAgICAgXCJwYWdlU2l6ZVwiOiAxMCxcclxuICAgICAgXCJ1c2VySWRcIjogdGhpcy5zdG9yYWdlLmdldEl0ZW0oXCJwZXJJZFwiKSA/PyBudWxsLFxyXG4gICAgICByZXF1ZXN0OiBcIlVTRVJcIlxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQodGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvcHJvZHVjdC9pdGVtL3NlYXJjaD9pc0pld2VsbGVyeT0ke3RoaXMuaXNKZXdlbGxlcnl9YCwgcGF5bG9hZCkucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBjb3VudDogcmVzcG9uc2UuY291bnQsXHJcbiAgICAgICAgZGF0YTogcmVzcG9uc2UuZGF0YS5kYXRhPy5tYXAoKHByb2R1Y3Q6IGFueSkgPT4gbmV3IFByb2R1Y3QocHJvZHVjdCkpXHJcbiAgICAgIH1cclxuICAgIH0pKTtcclxuICB9XHJcbiAgZ2V0UHJvZHVjdEJ5Q29sbGVjdGlvbklkKGNvbGxlY3Rpb25JZDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmdldEJ1c2luZXNzRGV0YWlscygpO1xyXG4gICAgY29uc3QgcGF5bG9hZDogYW55ID0ge1xyXG4gICAgICBcImJ1c2luZXNzSWRcIjogdGhpcy5zdG9yYWdlLmdldEl0ZW0oXCJiSWRcIikgPz8gdGhpcy5zdG9yYWdlLmdldEl0ZW0oXCJidXNpbmVzc0lkXCIpLFxyXG4gICAgICBcImNvbGxlY3Rpb25JZFwiOiBbY29sbGVjdGlvbklkXSxcclxuICAgICAgXCJzdWJJbmR1c3RyeUlkXCI6IHRoaXMuc3RvcmFnZS5nZXRJdGVtKFwic3ViSW5kdXN0cnlJZFwiKSxcclxuICAgICAgXCJwYWdlTm9cIjogMCxcclxuICAgICAgXCJwYWdlU2l6ZVwiOiAxMCxcclxuICAgICAgXCJ1c2VySWRcIjogdGhpcy5zdG9yYWdlLmdldEl0ZW0oXCJwZXJJZFwiKSA/PyBudWxsLFxyXG4gICAgICByZXF1ZXN0OiBcIlVTRVJcIlxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQodGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvcHJvZHVjdC9pdGVtL3NlYXJjaD9pc0pld2VsbGVyeT0ke3RoaXMuaXNKZXdlbGxlcnl9YCwgcGF5bG9hZCkucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBjb3VudDogcmVzcG9uc2UuY291bnQsXHJcbiAgICAgICAgZGF0YTogcmVzcG9uc2UuZGF0YS5kYXRhPy5tYXAoKHByb2R1Y3Q6IGFueSkgPT4gbmV3IFByb2R1Y3QocHJvZHVjdCkpXHJcbiAgICAgIH1cclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIGFkZFJldmlldyhwYXlsb2FkOiBSZXZpZXcpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdCh0aGlzLkJBU0VfVVJMICsgYGVjb21tZXJjZS91c2VyL2FkZC9yZXZpZXdgLCBwYXlsb2FkKTtcclxuICB9XHJcbiAgZ2V0QWxsUmV2aWV3cyhwcm9kdWN0SWQ6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQodGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvdXNlci9maWx0ZXIvcmV2aWV3cz9wcm9kdWN0SWQ9JHtwcm9kdWN0SWR9YCwgbnVsbCk7XHJcbiAgfVxyXG5cclxuICBnZW5lcmF0ZU9UUChtb2JpbGU6IHN0cmluZywgY291bnRyeUNvZGU6IHN0cmluZykge1xyXG4gICAgY29uc3QgYnVzaW5lc3NJZDogc3RyaW5nID0gdGhpcy5zdG9yYWdlLmdldEl0ZW0oXCJiSWRcIikgPz8gdGhpcy5zdG9yYWdlLmdldEl0ZW0oXCJidXNpbmVzc0lkXCIpID8/IFwiXCI7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QodGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvdXNlci9vdHAvdHJpZ2dlcj9tb2JpbGU9JHttb2JpbGV9JmNvdW50cnlDb2RlPSR7Y291bnRyeUNvZGV9JmJ1c2luZXNzSWQ9JHtidXNpbmVzc0lkfWAsIG51bGwpO1xyXG4gIH1cclxuICB2ZXJpZnlPVFAobW9iaWxlOiBzdHJpbmcsIG90cDogc3RyaW5nLCBkZXZpY2VJbmZvOiBEZXZpY2VJbmZvKSB7XHJcbiAgICBjb25zdCBidXNpbmVzc0lkOiBzdHJpbmcgPSB0aGlzLnN0b3JhZ2UuZ2V0SXRlbShcImJJZFwiKSA/PyB0aGlzLnN0b3JhZ2UuZ2V0SXRlbShcImJ1c2luZXNzSWRcIikgPz8gXCJcIjtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL3VzZXIvYXV0aGVudGljYXRlP21vYmlsZT0ke21vYmlsZX0mb3RwPSR7b3RwfSZidXNpbmVzc0lkPSR7YnVzaW5lc3NJZH1gLCBkZXZpY2VJbmZvKTtcclxuICB9XHJcbiAgcmVzZW5kT1RQKG1vYmlsZTogc3RyaW5nLCBjb3VudHJ5Q29kZTogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBidXNpbmVzc0lkOiBzdHJpbmcgPSB0aGlzLnN0b3JhZ2UuZ2V0SXRlbShcImJJZFwiKSA/PyB0aGlzLnN0b3JhZ2UuZ2V0SXRlbShcImJ1c2luZXNzSWRcIikgPz8gXCJcIjtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdCh0aGlzLkJBU0VfVVJMICsgYGVjb21tZXJjZS91c2VyL3Jlc2VuZD9tb2JpbGU9JHttb2JpbGV9JmNvdW50cnlDb2RlPSR7Y291bnRyeUNvZGV9JmJ1c2luZXNzSWQ9JHtidXNpbmVzc0lkfWAsIG51bGwpO1xyXG4gIH1cclxuICBhcHBsaWNhYmxlRGlzY291bnRMaXN0KGNhcnRJZDogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLkJBU0VfVVJMICsgYGVjb21tZXJjZS9vcmRlci9kaXNjb3VudC1jb3Vwb24vJHtjYXJ0SWR9L2FwcGxpY2FiaWxpdHkvbGlzdGApO1xyXG4gIH1cclxuXHJcbiAgYWRkSXRlbVRvREIodXNlckNhcnQ6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL29yZGVyL2NhcnRgLCB1c2VyQ2FydCk7XHJcbiAgfVxyXG4gIGdldFVzZXJJdGVtcyh1c2VySWQ6IHN0cmluZywgY2FydFR5cGU6ICdDQVJUJyB8ICdXSVNITElTVCcgfCAnVFJJQUxfQ0FSVCcpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL29yZGVyL2NhcnQ/dXNlcklkPSR7dXNlcklkfSZjYXJ0VHlwZT0ke2NhcnRUeXBlfWApO1xyXG4gIH1cclxuICBnZXRVc2VySW5mbyh1c2VySWQ6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQodGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvdXNlci9nZXQvdXNlcj91c2VySWQ9JHt1c2VySWR9YCwgbnVsbCk7XHJcbiAgfVxyXG4gIGFkZFVzZXJBZGRyZXNzKHVzZXI6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQodGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvdXNlci91cGRhdGUvdXNlcmAsIHVzZXIpO1xyXG4gIH1cclxuICB1cGRhdGVQcm9maWxlKHBheWxvYWQ6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQodGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvdXNlci91cGRhdGUvdXNlcmAsIHBheWxvYWQpO1xyXG4gIH1cclxuICBnZXRVc2VyT3JkZXJzKHBheWxvYWQ6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQodGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2Uvb3JkZXIvdXNlci9vcmRlcmAsIHBheWxvYWQpO1xyXG4gIH1cclxuICBnZXRVc2VyV2lzaGxpc3QodXNlcklkOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL29yZGVyL2NhcnQ/dXNlcklkPSR7dXNlcklkfSZjYXJ0VHlwZT1XSVNITElTVGApXHJcbiAgfVxyXG4gIG1vdmVJdGVtVG9DYXJ0KHVzZXJJZDogc3RyaW5nLCBwYXlsb2FkOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL29yZGVyL3VwZGF0ZS9jYXJ0P3VzZXJJZD0ke3VzZXJJZH1gLCBwYXlsb2FkKTtcclxuICB9XHJcblxyXG4gIC8vIFBheW1lbnRcclxuICBjcmVhdGVQYXltZW50VG9rZW4ocGF5bG9hZDogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QodGhpcy5FQ09NTUVSQ0VfVVJMICsgYHBheW1lbnQvb3JkZXJgLCBwYXlsb2FkKTtcclxuICB9XHJcbiAgY2hlY2tQYXltZW50U3RhdHVzKHBheWxvYWQ6IGFueSkge1xyXG4gICAgbGV0IGlzSmV3ZWxsZXJ5ID0gdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2lzTWF0ZXJpYWxCYXNlZFByaWNpbmcnKSA9PSAndHJ1ZScgPyB0cnVlIDogZmFsc2U7XHJcbiAgICBsZXQgcGF5bG9hZFdpdGhKZXdlbGxlcnkgPSB7IC4uLnBheWxvYWQsIGlzSmV3ZWxsZXJ5OiBpc0pld2VsbGVyeSB9O1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KHRoaXMuRUNPTU1FUkNFX1VSTCArIGBwYXltZW50L3N0YXR1c2AsIHBheWxvYWRXaXRoSmV3ZWxsZXJ5KTtcclxuICB9XHJcbiAgZ2V0UmVjZW50Vmlld1Byb2R1Y3QodXNlcklkOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdCh0aGlzLkJBU0VfVVJMICsgYGVjb21tZXJjZS91c2VyL3JlY2VudFZpZXc/dXNlcklkPSR7dXNlcklkfWAsIG51bGwpLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiByZXNwb25zZS5kYXRhPy5tYXAoKHByb2R1Y3Q6IGFueSkgPT4gbmV3IFByb2R1Y3QocHJvZHVjdCkpKSk7O1xyXG4gIH1cclxuXHJcbiAgc2VuZFNpZ251cE9UUChwYXlsb2FkOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdCh0aGlzLkJBU0VfVVJMICsgYGVjb21tZXJjZS91c2VyL3NpZ251cC9vdHAvdHJpZ2dlcmAsIHBheWxvYWQpO1xyXG4gIH1cclxuXHJcbiAgdmVyaWZ5U2lnbnVwT1RQKHBheWxvYWQ6IGFueSkge1xyXG4gICAgY29uc3QgYnVzaW5lc3NJZDogc3RyaW5nID0gdGhpcy5zdG9yYWdlLmdldEl0ZW0oXCJiSWRcIikgPz8gdGhpcy5zdG9yYWdlLmdldEl0ZW0oXCJidXNpbmVzc0lkXCIpID8/ICcnO1xyXG4gICAgLy8gcGF5bG9hZFtcImJ1c2luZXNzSWRcIl0gPSBidXNpbmVzc0lkO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQodGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvdXNlci9hdXRoZW50aWNhdGUvc2lnbnVwYCwgcGF5bG9hZCk7XHJcbiAgfVxyXG5cclxuICBzaWduaW5QYXNzd29yZChwYXNzRGF0YTogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dCh0aGlzLkJBU0VfVVJMICsgYGVjb21tZXJjZS91c2VyL2F1dGhlbnRpY2F0ZS9sb2dpbmAsIHBhc3NEYXRhKTtcclxuICB9XHJcblxyXG4gIGVuZFVzZXJSZWZmZXJhbERldGFpbHModXNlcklkOiBhbnksIHJlZmVycmFsVW5pcXVlSWQ6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL2FwaS9lbmQtdXNlci9yZWZlcnJhbERldGFpbHM/dXNlcklkPSR7dXNlcklkfSZyZWZlcnJhbFVuaXF1ZUlkPSR7cmVmZXJyYWxVbmlxdWVJZH1gLCB7fSlcclxuICB9XHJcblxyXG4gIGNyZWF0ZUFwcG9pbnRtZW50KGRhdGE6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KHRoaXMuQkFTRV9VUkwgKyBgY3JtL2FwcG9pbnRtZW50L2FkZGAsIGRhdGEpXHJcbiAgfVxyXG5cclxuICBnZXRBbGxMb2NhdGlvbihidXNpbmVzc0lkOiBhbnksIHNpemU6IG51bWJlciwgcGFnZTogbnVtYmVyKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChcclxuICAgICAgdGhpcy5CQVNFX1VSTCArIGBjcm0vYXBwb2ludG1lbnQvY29uZmlnL2xvY2F0aW9uP2J1c2luZXNzSWQ9JHtidXNpbmVzc0lkfSZzaXplPSR7c2l6ZX0mcGFnZT0ke3BhZ2V9YFxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgZ2V0QWxsVGltZVNsb3RzKGxvY2F0aW9uSWQ6IGFueSwgZGF0ZTogRGF0ZSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXHJcbiAgICAgIHRoaXMuQkFTRV9VUkwgKyBgY3JtL2FwcG9pbnRtZW50L2NvbmZpZy90aW1lc2xvdHM/bG9jYXRpb25JZD0ke2xvY2F0aW9uSWR9JmRhdGU9JHtkYXRlfWBcclxuICAgIClcclxuICB9XHJcblxyXG4gIGdldEFsbFNlcnZpY2UoYnVzaW5lc3NJZDogYW55LCBzaXplOiBhbnksIHBhZ2U6IGFueSwgbG9jYXRpb25JZD86IGFueSkge1xyXG4gICAgaWYgKCFsb2NhdGlvbklkKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxyXG4gICAgICAgIHRoaXMuQkFTRV9VUkwgKyBgY3JtL2FwcG9pbnRtZW50L2NvbmZpZy9zZXJ2aWNlP2J1c2luZXNzSWQ9JHtidXNpbmVzc0lkfSZzaXplPSR7c2l6ZX0mcGFnZT0ke3BhZ2V9YFxyXG4gICAgICApXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldChcclxuICAgICAgICB0aGlzLkJBU0VfVVJMICsgYGNybS9hcHBvaW50bWVudC9jb25maWcvc2VydmljZT9idXNpbmVzc0lkPSR7YnVzaW5lc3NJZH0mc2l6ZT0ke3NpemV9JnBhZ2U9JHtwYWdlfSZsb2NhdGlvbklkPSR7bG9jYXRpb25JZH1gXHJcbiAgICAgIClcclxuXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRBbGxTdGFmZkJ5TG9jYXRpb24oYnVzaW5lc3NJZDogYW55LCBzaXplOiBudW1iZXIsIHBhZ2U6IG51bWJlciwgbG9jYXRpb25JZDogc3RyaW5nLCBzZXJ2aWNlSWQ6IHN0cmluZykge1xyXG4gICAgaWYgKCFzZXJ2aWNlSWQpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXHJcbiAgICAgICAgdGhpcy5CQVNFX1VSTCArIGBjcm0vYXBwb2ludG1lbnQvY29uZmlnL3N0YWZmP2J1c2luZXNzSWQ9JHtidXNpbmVzc0lkfSZzaXplPSR7c2l6ZX0mcGFnZT0ke3BhZ2V9JmxvY2F0aW9uSWQ9JHtsb2NhdGlvbklkfWBcclxuICAgICAgKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXHJcbiAgICAgICAgdGhpcy5CQVNFX1VSTCArIGBjcm0vYXBwb2ludG1lbnQvY29uZmlnL3N0YWZmP2J1c2luZXNzSWQ9JHtidXNpbmVzc0lkfSZzaXplPSR7c2l6ZX0mcGFnZT0ke3BhZ2V9JmxvY2F0aW9uSWQ9JHtsb2NhdGlvbklkfSZzZXJ2aWNlSWQ9JHtzZXJ2aWNlSWR9YFxyXG4gICAgICApXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRBdmFpbGFibGVTbG90cyhkYXRhOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KFxyXG4gICAgICB0aGlzLkJBU0VfVVJMICsgYGNybS9hcHBvaW50bWVudC9jb25maWcvYXZhaWxhYmxlL3RpbWVzbG90c2AsIGRhdGFcclxuICAgIClcclxuICB9XHJcblxyXG4gIGdldFNlbGVjdGVkTGlzdEZpZWxkcyhiSWQ6IGFueSwgc2hvd0luRXJwOiBhbnksIGZvcm1OYW1lOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxyXG4gICAgICB0aGlzLkNNSVNfVVJMICsgYGNybS9maWVsZHM/YnVzaW5lc3NJZD0ke2JJZH0mc3RhdHVzPXRydWUmc2hvd0luRm9ybT0ke3Nob3dJbkVycH0maXNQYWdpbmF0aW9uPWZhbHNlJmZpZWxkQ2F0ZWdvcnk9JHtmb3JtTmFtZX1gXHJcbiAgICApXHJcbiAgfVxyXG5cclxuICBnZXRBY3RpdmVTdWJzY3JpcHRpb25Gb3JGZWVTdHJ1Y3R1cmUoYnVzaW5lc3NJZDogYW55LCBncmFkZUlkOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxyXG4gICAgICB0aGlzLkNNSVNfVVJMICsgYGNybS9zdWJzY3JpcHRpb24vcGxhbi9saXN0P2J1c2luZXNzSWQ9JHtidXNpbmVzc0lkfSZncmFkZUlkPSR7Z3JhZGVJZH0mc3RhdHVzPXRydWUmaXNEZWxldGVkPWZhbHNlYFxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgY3JlYXRlQWRtaXNzaW9uKHBheWxvYWQ6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KFxyXG4gICAgICB0aGlzLkNNSVNfVVJMICsgYGNybS9yZWdpc3RyYXRpb24vYWRtaXNzaW9uP3JlZ2lzdHJhdGlvbklkPSR7cGF5bG9hZD8ucmVnaXN0cmF0aW9uSWQgfHwgJyd9YCwgcGF5bG9hZFxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgY3JlYXRlUGF5bWVudExpbmsoZGF0YTogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoXHJcbiAgICAgIHRoaXMuQ01JU19VUkwgKyBgY3JtL3JlZ2lzdHJhdGlvbi9hZG1pc3Npb24vdjIvcGF5bWVudD9pc0Zyb21XZWI9dHJ1ZWAsIGRhdGFcclxuICAgIClcclxuICB9XHJcblxyXG4gIGNyZWF0ZVJlZ2lzdHJhdGlvbkZvclBheW1lbnQocGF5bG9hZDogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoXHJcbiAgICAgIHRoaXMuQ01JU19VUkwgKyBgY3JtL3JlZ2lzdHJhdGlvbi9yZWdpc3RyYXRpb24vcGF5bWVudGAsIHBheWxvYWRcclxuICAgIClcclxuICB9XHJcblxyXG5cclxuICBnZXRTdWJzY3JpcHRpb25Gb3JGZWVTdHJ1Y3R1cmUoZ3JhZGVJZDogYW55KSB7XHJcbiAgICBjb25zdCBidXNpbmVzc0lkID0gdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2J1c2luZXNzSWQnKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChcclxuICAgICAgdGhpcy5DTUlTX1VSTCArIGBjcm0vc3Vic2NyaXB0aW9uL3BsYW4vbGlzdD9idXNpbmVzc0lkPSR7YnVzaW5lc3NJZH0mZ3JhZGVJZD0ke2dyYWRlSWR9YFxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgZ2V0RmVlU3RydWN0dXJlKHBheWxvYWQ6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoXHJcbiAgICAgIHRoaXMuQ01JU19VUkwgKyBgY3JtL2ZlZS9zdHJ1Y3R1cmVgLCBwYXlsb2FkXHJcbiAgICApXHJcbiAgfVxyXG5cclxuICBuZXdGZWVTdHJ1Y3R1cmVHZXRMaXN0KGRhdGE6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoXHJcbiAgICAgIHRoaXMuQ01JU19VUkwgKyBgY3JtL2ZlZS9zdHJ1Y3R1cmUvdjIvZmlsdGVyYCwgZGF0YVxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgZ2V0QWxsRG9jdW1lbnQocGF5bG9hZDogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChcclxuICAgICAgdGhpcy5DTUlTX1VSTCArIGBjcm0vbWFzdGVyL2RvY3VtZW50VHlwZS9maWx0ZXJgLCBwYXlsb2FkKVxyXG4gIH1cclxuXHJcbiAgZ2V0TGVhZEJ5SWQobGVhZElkOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxyXG4gICAgICB0aGlzLkNNSVNfVVJMICsgYGNybS9sZWFkcy9nZXQtb25lP2xlYWRJZD0ke2xlYWRJZH1gXHJcbiAgICApXHJcbiAgfVxyXG5cclxuICBnZXRSZWdpc3RyYXRpb25MaXN0KHBheWxvYWQ6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoXHJcbiAgICAgIHRoaXMuQ01JU19VUkwgKyBgY3JtL3JlZ2lzdHJhdGlvbi9nZXRBbGxgLCBwYXlsb2FkXHJcbiAgICApXHJcbiAgfVxyXG5cclxuICBnZXRBbGxDb21wb25lbnRDYXRlZ29yaWVzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXHJcbiAgICAgIHRoaXMuQkFTRV9VUkwgKyBgYWRtaW4vbWFzdGVyL3RlbXBsYXRlL2NhdGVnb3J5L2FsbGBcclxuICAgIClcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2FmZVBhcnNlPFQ+KHJhdzogc3RyaW5nIHwgbnVsbCk6IFQgfCBudWxsIHtcclxuICAgIGlmICghcmF3KSByZXR1cm4gbnVsbDtcclxuICAgIHRyeSB7IHJldHVybiBKU09OLnBhcnNlKHJhdykgYXMgVDsgfSBjYXRjaCB7IHJldHVybiBudWxsOyB9XHJcbiAgfVxyXG5cclxuICBnZXRUZW1wbGF0ZSgpIHtcclxuICAgIGNvbnN0IGJEZXRhaWxzUmF3ID0gdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2JEZXRhaWxzJyk7XHJcbiAgICBjb25zdCBkZXRhaWxzID0gdGhpcy5zYWZlUGFyc2U8eyB0ZW1wbGF0ZUlkPzogc3RyaW5nIH0+KGJEZXRhaWxzUmF3KTtcclxuXHJcbiAgICAvLyBmYWxsYmFjayBzb3VyY2VcclxuICAgIGNvbnN0IHdlYnNpdGVEYXRhUmF3ID0gdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ3dlYnNpdGVEYXRhJyk7XHJcbiAgICBjb25zdCB3ZWJzaXRlRGF0YSA9IHRoaXMuc2FmZVBhcnNlPHsgaG9tZVBhZ2VJZD86IHN0cmluZyB9Pih3ZWJzaXRlRGF0YVJhdyk7XHJcblxyXG4gICAgLy8gcHJlZmVyIHRlbXBsYXRlSWQgZnJvbSBiRGV0YWlsczsgZWxzZSBmYWxsYmFjayB0byB3ZWJzaXRlRGF0YS5ob21lUGFnZUlkXHJcbiAgICBjb25zdCB0ZW1wbGF0ZUlkID0gKGRldGFpbHM/LnRlbXBsYXRlSWQgPz8gd2Vic2l0ZURhdGE/LmhvbWVQYWdlSWQgPz8gJycpLnRvU3RyaW5nKCk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5CQVNFX1VSTCArIGBidXNpbmVzcy92My93ZWJzaXRlLyR7dGVtcGxhdGVJZH0vcGFnZXMvbGlzdGApO1xyXG4gIH1cclxuXHJcblxyXG4gIGdldEVjb21tZXJjZUNvbmZpZ3MoKSB7XHJcbiAgICBjb25zdCBidXNpbmVzc0lkID0gdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2J1c2luZXNzSWQnKSA/PyBcIjFmMTA2NTFmLTkyNTgtNmI2My05ZDIzLWEzZDY5MWFjZWI4OFwiO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXHJcbiAgICAgIHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL2Vjb21tZXJjZS9jb25maWcvYWxsP2J1c2luZXNzSWQ9JHtidXNpbmVzc0lkfWBcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwb3N0VmlkZW9DYWxsRGV0YWlscyhwYXlsb2FkOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChcclxuICAgICAgdGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvZWNvbW1lcmNlL2NvbmZpZy92aWRlby1jYWxsYCwgcGF5bG9hZFxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgZ2V0U3RvcmVMb2NhdG9yRGV0YWlscyhwaW5jb2RlOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxyXG4gICAgICB0aGlzLkJBU0VfVVJMICsgYGVjb21tZXJjZS9zdG9yZS9uZWFyYnk/cGluY29kZT0ke3BpbmNvZGV9JmJ1c2luZXNzSWQ9JHt0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnYnVzaW5lc3NJZCcpfWBcclxuICAgIClcclxuICB9XHJcblxyXG4gIHNhdmVJbWFnZXNUb0J1c2luZXNzTGlicmFyeShtZWRpYVJlcXVlc3Q6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KFxyXG4gICAgICB0aGlzLkJBU0VfVVJMICsgYGFkbWluL2xpYnJhcnkvaW1hZ2UvbGlicmFyeS9zYXZlYCxcclxuICAgICAgbWVkaWFSZXF1ZXN0XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcmVnZW5lcmF0ZVRleHQocmVxdWVzdDogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoXHJcbiAgICAgIHRoaXMuQkFTRV9VUkwgKyBgYWRtaW4vY29udGVudC9zdWdnZXN0L3YyL3dlYnNpdGUvaW5kaXZpZHVhbGAsIHJlcXVlc3RcclxuICAgIClcclxuICB9XHJcbiAgZ2V0Q2F0ZWdvcmllc0hlYWRlckRhdGEoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChcclxuICAgICAgdGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvcHJvZHVjdC8ke3RoaXMuc3RvcmFnZS5nZXRJdGVtKCdidXNpbmVzc0lkJyl9L2hlYWRlcnNgXHJcbiAgICApXHJcbiAgfVxyXG4gIGdldEFsbFN0b3JlcyhwYXlsb2FkOiBhbnkpIHtcclxuICAgIGxldCB1cmwgPSAnJ1xyXG4gICAgaWYgKHBheWxvYWQ/LnBpbmNvZGUgJiYgcGF5bG9hZC5waW5jb2RlLnRvU3RyaW5nKCkubGVuZ3RoID09IDYpIHtcclxuICAgICAgdXJsID0gdXJsICsgYCAmcGluY29kZT0ke3BheWxvYWQucGluY29kZX1gXHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChcclxuICAgICAgdGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2Uvc3RvcmUvZ2V0L3YyP2J1c2luZXNzSWQ9JHtwYXlsb2FkLmJ1c2luZXNzSWR9JHt1cmx9YCwgJydcclxuICAgIClcclxuICB9XHJcblxyXG4gIGdldEFsbEFwcG9pbnRtZW50U2VydmljZShwYXlsb2FkOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KFxyXG4gICAgICB0aGlzLkFQUE9JTlRNRU5UX1VSTCArICdzZXJ2aWNlL2xpc3QnLCBwYXlsb2FkXHJcbiAgICApXHJcbiAgfVxyXG5cclxuICBnZXRBbGxTdGFmZihwYXlsb2FkOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxyXG4gICAgICB0aGlzLkJBU0VfVVJMICsgYHN0YWZmL3N0YWZmL3N0b3JlLXN0YWZmLWxpc3Q/c2VydmljZUlkPSR7cGF5bG9hZC5zZXJ2aWNlSWR9JnN0b3JlSWQ9JHtwYXlsb2FkLnN0b3JlSWR9JmJ1c2luZXNzSWQ9JHtwYXlsb2FkLmJ1c2luZXNzSWR9YFxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgZ2V0U3RvcmVCeUlkKHN0b3JlSWQ6IHN0cmluZykge1xyXG4gICAgbGV0IHBheWxvYWQgPSB7XHJcbiAgICAgIHN0b3JlSWQ6IHN0b3JlSWQsXHJcbiAgICAgIGJ1c2luZXNzSWQ6IHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdidXNpbmVzc0lkJykgPz8gXCJcIixcclxuICAgICAgcGFnZU5vOiAwLFxyXG4gICAgICBwYWdlU2l6ZTogMTAwMFxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoXHJcbiAgICAgIHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL3N0b3JlL2dldGAsIHBheWxvYWQpXHJcbiAgfVxyXG4gIHBvc3ROZXdzTGV0dGVyKGVtYWlsOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChcclxuICAgICAgdGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvZWNvbW1lcmNlL2NvbmZpZy9yZWdpc3RlcmVkL25ld3NsZXR0ZXI/ZW1haWw9JHtlbWFpbH0mYnVzaW5lc3NJZD0ke3RoaXMuc3RvcmFnZS5nZXRJdGVtKCdidXNpbmVzc0lkJyl9YCwgJydcclxuICAgIClcclxuICB9XHJcbiAgYWRkUmV2aWV3VG9Qcm9kdWN0KHBheWxvYWQ6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KFxyXG4gICAgICB0aGlzLkJBU0VfVVJMICsgYGVjb21tZXJjZS91c2VyL2FkZC9yZXZpZXc/b3JkZXJJZD0ke3BheWxvYWQub3JkZXJJZH1gLCBwYXlsb2FkXHJcbiAgICApXHJcbiAgfVxyXG5cclxuICBnZXRBbGxTdG9yZXNPcnJhKHBhZ2VObzogYW55LCBzaXplOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxyXG4gICAgICBgaHR0cHM6Ly9zdGFnZWFwaS1vcnJhLmxldHNtb2JpbGl0eS5jb20vc3RvcmU/cGFnZU5vPSR7cGFnZU5vfSZzaXplPSR7c2l6ZX1gXHJcbiAgICApXHJcbiAgfVxyXG5cclxuICBnZXRzdGFmZkJ5U3RvcmVJZChzdG9yZUlkOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxyXG4gICAgICBgaHR0cHM6Ly9zdGFnZWFwaS1vcnJhLmxldHNtb2JpbGl0eS5jb20vc3RhZmYvZ2V0LyR7c3RvcmVJZH1gXHJcbiAgICApXHJcbiAgfVxyXG5cclxuXHJcbiAgZ2V0QWxsU2NoZW1lKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXHJcbiAgICAgIGBodHRwczovL3N0YWdlYXBpLW9ycmEubGV0c21vYmlsaXR5LmNvbS9zY2hlbWUvZ2V0QWxsU2NoZW1lcy9kYXNoYm9hcmRgXHJcbiAgICApXHJcbiAgfVxyXG5cclxuICBnZXRBbGxTdGF0ZSgpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxyXG4gICAgICBgaHR0cHM6Ly9zdGFnZWFwaS1vcnJhLmxldHNtb2JpbGl0eS5jb20vc3RhdGUvZ2V0QWxsYFxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgZ2V0Q2l0eUJ5U3RhdGVCeXBhZ2luYXRlZChzdGF0ZUlkOiBhbnksIHBhZ2VObzogYW55LCBzaXplOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxyXG4gICAgICBgaHR0cHM6Ly9zdGFnZWFwaS1vcnJhLmxldHNtb2JpbGl0eS5jb20vY2l0eS9nZXRCeVN0YXRlP3N0YXRlSWQ9JHtzdGF0ZUlkfSZwYWdlTm89JHtwYWdlTm99JnNpemU9JHtzaXplfWBcclxuICAgIClcclxuICB9XHJcblxyXG4gIGdldFN0b3JlQnlTbGFiKGRhdGE6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoXHJcbiAgICAgIGBodHRwczovL3N0YWdlYXBpLW9ycmEubGV0c21vYmlsaXR5LmNvbS9zdG9yZS9nZXRTbGFiYCwgZGF0YVxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgYWRkVHJpYWxJdGVtKHJlcXVlc3Q6IHN5bmNJdGVtVG9TZXJ2ZXJEQlJlcXVlc3QpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KFxyXG4gICAgICB0aGlzLkJBU0VfVVJMICsgYGVjb21tZXJjZS9vcmRlci9jYXJ0L3YyYCwgcmVxdWVzdFxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgY2hlY2tJdGVtQWxyZWFkeUFkZGVkKHJlcXVlc3Q6IGNoZWNrSXRlbUFscmVhZHlBZGRlZCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoXHJcbiAgICAgIHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL29yZGVyL2NhcnQvY2hlY2svaXRlbWAsIHJlcXVlc3RcclxuICAgIClcclxuICB9XHJcblxyXG4gIGRlbGV0ZUl0ZW1Gcm9tQ2FydChyZXF1ZXN0OiBzeW5jSXRlbVRvU2VydmVyREJSZXF1ZXN0KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChcclxuICAgICAgdGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2Uvb3JkZXIvY2FydC9yZW1vdmVgLCByZXF1ZXN0XHJcbiAgICApXHJcbiAgfVxyXG5cclxuICBib29rQXBwb2ludG1lbnQocmVxdWVzdDogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoXHJcbiAgICAgIHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL3VzZXIvdHJ5LWhvbWVgLCByZXF1ZXN0XHJcbiAgICApXHJcbiAgfVxyXG5cclxuICBjcmVhdGVFbnJvbGxtZW50U2NoZW1lKGVucm9sbGVtZW50OiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChcclxuICAgICAgYCAgaHR0cHM6Ly9zdGFnZWFwaS1vcnJhLmxldHNtb2JpbGl0eS5jb20vZW5yb2xsbWVudC9jcmVhdGUvbmV3L3RlbXA/bWFudWFsUGF5PXRydWUmaXNXZWJSZXF1ZXN0PXRydWVcclxuYCwgZW5yb2xsZW1lbnRcclxuICAgIClcclxuICB9XHJcblxyXG4gIGdldEhvbWVBcHBvaW50bWVudExpc3QodXNlcklkOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGJ1c2luZXNzSWQgPSB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnYklkJyk7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChcclxuICAgICAgdGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvdXNlci90cnktaG9tZT91c2VySWQ9JHt1c2VySWR9JmJ1c2luZXNzSWQ9JHtidXNpbmVzc0lkfWBcclxuICAgIClcclxuICB9XHJcblxyXG4gIGdldEFsbE9ycmFTY2hlbWUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChcclxuICAgICAgJ2h0dHBzOi8vc3RhZ2VhcGktb3JyYS5sZXRzbW9iaWxpdHkuY29tL3Bhc3NCb29rL3JlZGVtcHRpb24vYW1vdW50L2NoZWNrP3VzZXJDb2RlPUNfMDAwMzEzODg1J1xyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgcmVkZWVtU2NoZW1lKHNjaGVtZTogc3RyaW5nLCBjYXJ0SWQ6IGFueSwgYWN0aW9uOiBib29sZWFuKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoXHJcbiAgICAgIHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL29yZGVyL2NhcnQvcmVkZW1wdGlvbj9jYXJ0SWQ9JHtjYXJ0SWR9JnJlbW92ZVNjaGVtZT0ke2FjdGlvbn1gLCBzY2hlbWVcclxuICAgIClcclxuICB9XHJcblxyXG4gIGdldFJldmlld3NCeVByb2R1Y3RJZChwcm9kdWN0SWQ6IHN0cmluZywgcGFnZU51bWJlcjogbnVtYmVyKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChcclxuICAgICAgdGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvdXNlci9maWx0ZXIvcmV2aWV3cz9wcm9kdWN0SWQ9JHtwcm9kdWN0SWR9JnBhZ2VOdW1iZXI9JHtwYWdlTnVtYmVyfSZwYWdlU2l6ZT0zYCwge31cclxuICAgIClcclxuICB9XHJcbiAgZ2V0RmllbGRzVG9EaXNwbGF5KGZpZWxkc0xpc3Q6IGFueVtdKSB7XHJcbiAgICBsZXQgbWFwOiBhbnkgPSB7fTtcclxuXHJcbiAgICBmb3IgKGxldCBmaWVsZCBvZiBmaWVsZHNMaXN0KSB7XHJcbiAgICAgIGZvciAobGV0IGZpZWxkR3JvdXAgb2YgZmllbGQuZmllbGRHcm91cCkge1xyXG4gICAgICAgIGlmICghZmllbGRHcm91cC5maWVsZFN0ZXBJZClcclxuICAgICAgICAgIGNvbnRpbnVlO1xyXG5cclxuICAgICAgICBsZXQgc3RlcE5hbWUgPSBmaWVsZEdyb3VwLmZpZWxkU3RlcE5hbWUgPyBmaWVsZEdyb3VwLmZpZWxkU3RlcE5hbWUgOiAndW5kZWZpbmVkJztcclxuICAgICAgICBsZXQgZ3JvdXBOYW1lID0gZmllbGRHcm91cC5maWVsZEdyb3VwTmFtZTtcclxuXHJcbiAgICAgICAgaWYgKCFtYXBbc3RlcE5hbWVdKSB7XHJcbiAgICAgICAgICBtYXBbc3RlcE5hbWVdID0ge307XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghbWFwW3N0ZXBOYW1lXVtncm91cE5hbWVdKSB7XHJcbiAgICAgICAgICBtYXBbc3RlcE5hbWVdW2dyb3VwTmFtZV0gPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmllbGRbJ2ZpZWxkU3RlcElkJ10gPSBmaWVsZEdyb3VwLmZpZWxkU3RlcElkO1xyXG4gICAgICAgIGZpZWxkWydmaWVsZEdyb3VwSWQnXSA9IGZpZWxkR3JvdXAuZmllbGRHcm91cElkO1xyXG5cclxuICAgICAgICBjb25zdCBuZXdGaWVsZCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZmllbGQpKTtcclxuICAgICAgICBtYXBbc3RlcE5hbWVdW2dyb3VwTmFtZV0ucHVzaChuZXdGaWVsZCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbWFwO1xyXG4gIH1cclxuXHJcbiAgZ2V0Qm9va2luZ1Nsb3RzKHBheWxvYWQ6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQodGhpcy5BUFBPSU5UTUVOVF9VUkwgKyAnYm9va2luZy9hdmFpbGFibGUtc2xvdHMnLCBwYXlsb2FkKTtcclxuICB9XHJcbiAgZ2V0QnVzaW5lc3NBcHBvaW50bWVudFNldHRpbmdzKGJ1c2luZXNzSWQ6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5BUFBPSU5UTUVOVF9VUkwgKyBgc2VydmljZS9zZXR0aW5ncy8ke2J1c2luZXNzSWR9YCk7XHJcbiAgfVxyXG5cclxuICByZXNvbHZlQ2FydChwYXlsb2FkOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KHRoaXMuQVBQT0lOVE1FTlRfVVJMICsgJ2Jvb2tpbmcvZ3JvdXAvcmVzb2x2ZS1jYXJ0JywgcGF5bG9hZCk7XHJcbiAgfVxyXG4gIGhvbGRCb29raW5nKHBheWxvYWQ6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KHRoaXMuQVBQT0lOVE1FTlRfVVJMICsgJ2Jvb2tpbmcvZ3JvdXAvaG9sZCcsIHBheWxvYWQpO1xyXG4gIH1cclxuICBnZXRCb29raW5nR3JvdXAoZ3JvdXBJZDogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLkFQUE9JTlRNRU5UX1VSTCArIGBib29raW5nL2dyb3VwLyR7Z3JvdXBJZH1gKTtcclxuICB9XHJcbiAgZ2VuZXJhdGVQYXltZW50VG9rZW4oZ3JvdXBJZDogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QodGhpcy5BUFBPSU5UTUVOVF9VUkwgKyBgcGF5bWVudC90b2tlbj9ncm91cElkPSR7Z3JvdXBJZH1gLCB7fSk7XHJcbiAgfVxyXG4gIGNvbXBsZXRlQm9va2luZ0dyb3VwKGdyb3VwSWQ6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQodGhpcy5BUFBPSU5UTUVOVF9VUkwgKyBgYm9va2luZy9ncm91cC9jb21wbGV0ZS8ke2dyb3VwSWR9YCwge30pO1xyXG4gIH1cclxuICBnZW5lcmF0ZVRva2VuKGJJZDogYW55LCB1c2VySWQ6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KHRoaXMuUEFTU0JPT0tfVVJMICsgYGV4dC9jb25uZWN0L3NpbXBvL3Rva2VuP2J1c2luZXNzSWQ9JHtiSWR9JnVzZXJJZD0ke3VzZXJJZH0mdXNlclR5cGU9RVhURVJOQUxfVVNFUmAsIHt9KTtcclxuICB9XHJcbiAgZ2V0QWxsRW5yb2xsZWRTY2hlbWVzKHBheWxvYWQ6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQodGhpcy5QQVNTQk9PS19VUkwgKyAnZXh0L2Nvbm5lY3Qvc2ltcG8vc2NoZW1lL2xpc3QnLCBwYXlsb2FkKVxyXG4gIH1cclxuICBlbnJvbGxTY2hlbWUocGF5bG9hZDogYW55LCBjaGVja0NoYXJnZXM6IGJvb2xlYW4pIHtcclxuICAgIGNvbnN0IHRva2VuID0gdGhpcy5nZXRUb2tlbigpO1xyXG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycyh7XHJcbiAgICAgICdBdXRob3JpemF0aW9uJzogYEJlYXJlciAke3Rva2VufWBcclxuICAgIH0pO1xyXG4gICAgaWYgKGNoZWNrQ2hhcmdlcykge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QodGhpcy5QQVNTQk9PS19VUkwgKyAncGFzc2Jvb2svY2FydC9pbml0aWF0ZS9wYXltZW50P21hbnVhbFBheT10cnVlJywgcGF5bG9hZCwgeyBoZWFkZXJzOiBoZWFkZXJzIH0pXHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KHRoaXMuUEFTU0JPT0tfVVJMICsgJ3Bhc3Nib29rL2luaXRpYXRlL3BheW1lbnQ/bWFudWFsUGF5PXRydWUnLCBwYXlsb2FkLCB7IGhlYWRlcnM6IGhlYWRlcnMgfSlcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0QmVuZWZpdFNsYWIocGFzc2Jvb2tJZD86IGFueSkge1xyXG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLmdldFRva2VuKCk7XHJcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKHtcclxuICAgICAgJ0F1dGhvcml6YXRpb24nOiBgQmVhcmVyICR7dG9rZW59YFxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QodGhpcy5QQVNTQk9PS19VUkwgKyBgcGFzc2Jvb2svYmVuZWZpdC9wZXJjZW50YWdlcz9wYXNzYm9va0lkPSR7cGFzc2Jvb2tJZH1gLCB7fSwgeyBoZWFkZXJzOiBoZWFkZXJzIH0pXHJcbiAgfVxyXG4gIGdldEFsbFN0YWZmTGlzdCgpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuQkFTRV9VUkwgKyBgc3RhZmYvc3RhZmYvbGlzdC8ke3RoaXMuc3RvcmFnZS5nZXRJdGVtKCdidXNpbmVzc0lkJyl9P2lzUGFnaW5hdGlvbj1mYWxzZWApXHJcbiAgfVxyXG4gIHJlcXVlc3RSZWRlZW1wdGlvbihwYXNzYm9va0lkOiBhbnkpIHtcclxuICAgIGNvbnN0IHRva2VuID0gdGhpcy5nZXRUb2tlbigpO1xyXG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycyh7XHJcbiAgICAgICdBdXRob3JpemF0aW9uJzogYEJlYXJlciAke3Rva2VufWBcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQodGhpcy5QQVNTQk9PS19VUkwgKyBgcGFzc2Jvb2svcmVxdWVzdC9yZWRlbXB0aW9uP3Bhc3NCb29rSWQ9JHtwYXNzYm9va0lkfWAsIHt9LCB7IGhlYWRlcnM6IGhlYWRlcnMgfSlcclxuICB9XHJcbiAgUGFzc2Jvb2tBcHBTdGF0dXMoYklkOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuQkFTRV9VUkwgKyBgYXBwL2FwcC9jaGVjay1hcHA/YnVzaW5lc3NJZD0ke2JJZH0mYXBwTmFtZT1QYXNzYm9va2ApXHJcbiAgfVxyXG4gIGNoZWNrQXBwSW5zdGFsbGVkKGJJZDogYW55LCBhcHBOYW1lOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuQkFTRV9VUkwgKyBgYXBwL2FwcC9jaGVjay1hcHA/YnVzaW5lc3NJZD0ke2JJZH0mYXBwTmFtZT0ke2FwcE5hbWV9YClcclxuICB9XHJcbiAgZ2V0UmVkZWVtUG9pbnRzKGJJZDogYW55LCB1c2VySWQ6IGFueSwgZXZldFR5cGU6IHN0cmluZywgb3JkZXJWYWx1ZTogYW55LCByZXdhcmRQb2ludHM6IGJvb2xlYW4pIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxyXG4gICAgICB0aGlzLkJBU0VfVVJMICsgYGVjb21tZXJjZS9hcGkvcmVmZXJyYWxzL2F2YWlsYWJsZS1hbW91bnQ/YnVzaW5lc3NJZD0ke2JJZH0mdXNlcklkPSR7dXNlcklkfSZldmVudFR5cGU9JHtldmV0VHlwZX0mb3JkZXJWYWx1ZT0ke29yZGVyVmFsdWV9JnJld2FyZFBvaW50cz0ke3Jld2FyZFBvaW50c31gXHJcbiAgICApXHJcbiAgfVxyXG4gIHBheW1lbnRXaXRoQ29tcGxldGVQb2ludHMoY2FydElkOiBhbnksIGRhdGE6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KFxyXG4gICAgICB0aGlzLkJBU0VfVVJMICsgYGVjb21tZXJjZS9vcmRlci9vcmRlci9yZXdhcmRzP2NhcnRJZD0ke2NhcnRJZH1gLCBkYXRhXHJcbiAgICApXHJcbiAgfVxyXG5cclxuICBnZXRBbGxQYXNzYm9va0R1ZXMoYklkOiBhbnksIHVzZXJJZDogYW55KSB7XHJcbiAgICBjb25zdCB0b2tlbiA9IHRoaXMuZ2V0VG9rZW4oKTtcclxuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xyXG4gICAgICAnQXV0aG9yaXphdGlvbic6IGBCZWFyZXIgJHt0b2tlbn1gXHJcbiAgICB9KTtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuUEFTU0JPT0tfVVJMICsgYHBhc3Nib29rL3BheW1lbnQvZHVlcz9wYWdlPTAmc2l6ZT0xMDAwJmJ1c2luZXNzSWQ9JHtiSWR9JnVzZXJJZD0ke3VzZXJJZH1gLCB7IGhlYWRlcnM6IGhlYWRlcnMgfSlcclxuICB9XHJcbiAgZ2V0VG9rZW4oKSB7XHJcbiAgICBsZXQgdG9rZW4gPSB0aGlzLmNvb2tpZVNlcnZpY2UuZ2V0KCdwYXNzQm9va1Rva2VuJylcclxuICAgIHJldHVybiB0b2tlbjtcclxuICB9XHJcbiAgZ2V0QWxsVHJhbnNhY3Rpb25zKHBheWxvYWQ6IGFueSkge1xyXG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLmdldFRva2VuKCk7XHJcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKHtcclxuICAgICAgJ0F1dGhvcml6YXRpb24nOiBgQmVhcmVyICR7dG9rZW59YFxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dCh0aGlzLlBBU1NCT09LX1VSTCArIGBkYXNoYm9hcmQvdjMvdHJhbnNhY3Rpb25zL3BhZ2VgLCBwYXlsb2FkLCB7IGhlYWRlcnM6IGhlYWRlcnMgfSlcclxuICB9XHJcbiAgZ2V0U2NoZW1lRGV0YWlscyhzY2hlbWVJZDogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QodGhpcy5QQVNTQk9PS19VUkwgKyBgZXh0L2Nvbm5lY3Qvc2ltcG8vZ2V0L3NjaGVtZT9pZD0ke3NjaGVtZUlkfWAsIHt9KVxyXG4gIH1cclxuXHJcbiAgZ2V0TWV0YWxQcmljZShzdG9yZUlkOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuUEFTU0JPT0tfVVJMICsgYGV4dC9jb25uZWN0L3NpbXBvL21ldGFsL3ByaWNlcz9pZD0ke3N0b3JlSWR9YClcclxuICB9XHJcblxyXG4gIGNyZWF0ZUxlYWQocGF5bG9hZDogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QodGhpcy5CQVNFX1VSTCArIGBidXNpbmVzcy9jb250YWN0YCwgcGF5bG9hZClcclxuICB9XHJcbiAgZ2V0QXBwb2ludG1lbnRQYXltZW50U3RhdHVzKG9yZGVySWQ6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5BUFBPSU5UTUVOVF9VUkwgKyBgcGF5bWVudC92ZXJpZnkvc3RhdHVzP29yZGVySWQ9JHtvcmRlcklkfWApXHJcbiAgfVxyXG4gIGdldE90cEZvckxvZ2luKHBheWxvYWQ6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQodGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvdXNlci9nZW5lcmF0ZS1vdHBgLCBwYXlsb2FkKVxyXG4gIH1cclxuXHJcbiAgLyoqIE5ldyBPVFAgQVBJOiBQVVQgL2Vjb21tZXJjZS91c2VyL2F1dGgvc2VuZC1vdHBcclxuICAgKiAgQm9keTogeyBpZGVudGlmaWVyLCBidXNpbmVzc0lkIH1cclxuICAgKiAgUmVzcG9uc2U6IHsgZGF0YTogeyBpc0V4aXN0aW5nVXNlcjogYm9vbGVhbiwgbWVzc2FnZTogc3RyaW5nIH0gfVxyXG4gICAqL1xyXG4gIHNlbmRPdHBWMihpZGVudGlmaWVyOiBzdHJpbmcsIGJ1c2luZXNzSWQ6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQodGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvdXNlci9hdXRoL3NlbmQtb3RwYCwgeyBpZGVudGlmaWVyLCBidXNpbmVzc0lkIH0pO1xyXG4gIH1cclxuXHJcbiAgdmVyaWZ5T3RwVjIocGF5bG9hZDogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dCh0aGlzLkJBU0VfVVJMICsgYGVjb21tZXJjZS91c2VyL2F1dGgvdmVyaWZ5LW90cGAsIHBheWxvYWQpO1xyXG4gIH1cclxuXHJcbiAgY29tcGxldGVTaWdudXBWMihwYXlsb2FkOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL3VzZXIvYXV0aC9jb21wbGV0ZS1zaWdudXBgLCBwYXlsb2FkKTtcclxuICB9XHJcblxyXG4gIGxvZ2luV2l0aFBhc3N3b3JkTmV3KHBheWxvYWQ6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQodGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvdXNlci9hdXRoL2xvZ2luLXBhc3N3b3JkYCwgcGF5bG9hZCk7XHJcbiAgfVxyXG5cclxuICBmbHVzaChldmVudHNUb1NlbmQ6IGFueSkge1xyXG4gICAgdGhpcy5odHRwLnBvc3QodGhpcy5CQVNFX1VSTCArICdlY29tbWVyY2UvYW5hbHl0aWNzL2JhdGNoJywgZXZlbnRzVG9TZW5kKVxyXG4gICAgICAuc3Vic2NyaWJlKHsgZXJyb3I6ICgpID0+IHsgfSB9KTtcclxuICB9XHJcblxyXG4gIGdldFBvcHVsYXJTZWFyY2hlcygpIHtcclxuICAgIGNvbnN0IGJ1c2luZXNzSWQgPSB0aGlzLnN0b3JhZ2UuZ2V0SXRlbShcImJJZFwiKSA/PyB0aGlzLnN0b3JhZ2UuZ2V0SXRlbShcImJ1c2luZXNzSWRcIikgPz8gXCIxZjEyMTA4MS1kYmVhLTY1YzYtYWQ4OS0xZGZlOGNkZGE5MDJcIjtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL2ludmVudG9yeS9wb3B1bGFyLXNlYXJjaGVzP2J1c2luZXNzSWQ9JHtidXNpbmVzc0lkfWApXHJcbiAgfVxyXG5cclxuICBnZXRNZW51SXRlbXMobWVudUlkOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL21lbnUvJHttZW51SWR9YCk7XHJcbiAgfVxyXG5cclxuICAvLyBnZXRIb21lUmVjb21tZW5kYXRpb25zKGJ1c2luZXNzSWQ6IGFueSwgVXNlcklkOiBhbnkpIHtcclxuICAvLyAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuUkVDT01NRU5EQVRJT05fVVJMICsgYGFwaS92MS9yZWNvbW1lbmRhdGlvbnMvJHtVc2VySWR9L2hvbWU/YnVzaW5lc3NJZD0ke2J1c2luZXNzSWR9JnBhZ2U9MSZwYWdlU2l6ZT0yMGApXHJcbiAgLy8gfVxyXG5cclxuICAvLyBnZXRDYXJ0UmVjb21tZW5kYXRpb25zKGJ1c2luZXNzSWQ6IGFueSwgVXNlcklkOiBhbnkpIHtcclxuICAvLyAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuUkVDT01NRU5EQVRJT05fVVJMICsgYGFwaS92MS9yZWNvbW1lbmRhdGlvbnMvJHtVc2VySWR9L2NhcnQ/YnVzaW5lc3NJZD0ke2J1c2luZXNzSWR9JnBhZ2U9MSZwYWdlU2l6ZT0xNWApXHJcbiAgLy8gfVxyXG5cclxuICAvLyBnZXRQcm9kdWN0RGVzY3JpcHRpb25SZWNvbW1lbmRhdGlvbnMoYnVzaW5lc3NJZDogYW55LCBVc2VySWQ6IGFueSkge1xyXG4gIC8vICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5SRUNPTU1FTkRBVElPTl9VUkwgKyBgYXBpL3YxL3JlY29tbWVuZGF0aW9ucy8ke1VzZXJJZH0vcGRwP2J1c2luZXNzSWQ9JHtidXNpbmVzc0lkfSZwYWdlPTEmcGFnZVNpemU9MTBgKVxyXG4gIC8vIH1cclxufVxyXG4iXX0=
622
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9zZXJ2aWNlcy9yZXN0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFjLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFBRSxHQUFHLEVBQXdDLE1BQU0sTUFBTSxDQUFDO0FBS2pFLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEcsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG9DQUFvQyxDQUFBO0FBQzdELE9BQU8sRUFBeUIsT0FBTyxFQUE2QixNQUFNLG1DQUFtQyxDQUFDO0FBQzlHLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUdsRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUNBQWlDLENBQUM7Ozs7QUFNaEUsTUFBTSxPQUFPLFdBQVc7SUFZdEIsWUFDbUIsSUFBZ0IsRUFDUixRQUFnQixFQUNWLGFBQXFCLEVBQzFCLFFBQWdCLEVBQ3pCLGFBQTRCLEVBQ2QsT0FBb0IsRUFDckIsWUFBb0IsRUFDakIsZUFBdUI7UUFQdkMsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUNSLGFBQVEsR0FBUixRQUFRLENBQVE7UUFDVixrQkFBYSxHQUFiLGFBQWEsQ0FBUTtRQUMxQixhQUFRLEdBQVIsUUFBUSxDQUFRO1FBQ3pCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQ2QsWUFBTyxHQUFQLE9BQU8sQ0FBYTtRQUNyQixpQkFBWSxHQUFaLFlBQVksQ0FBUTtRQUNqQixvQkFBZSxHQUFmLGVBQWUsQ0FBUTtRQWxCMUQsMERBQTBEO1FBQzFE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QixNQUFNOzJCQUFDLFFBQVE7OzBCQUVmLE1BQU07MkJBQUMsYUFBYTs7MEJBQ3BCLE1BQU07MkJBQUMsWUFBWTs7MEJBQ25CLE1BQU07MkJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XHJcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgT25EZXN0cm95IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgbWFwLCBPYnNlcnZhYmxlLCBTdWJzY3JpYmVyLCBTdWJzY3JpcHRpb24gfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBSZXZpZXcgfSBmcm9tIFwiLi4vZWNvbW1lcmNlL3N0eWxlcy9yZXZpZXcubW9kYWxcIjtcclxuaW1wb3J0IHsgRGV2aWNlSW5mbywgVXNlciB9IGZyb20gXCIuLi9lY29tbWVyY2Uvc3R5bGVzL3VzZXIubW9kYWxcIjtcclxuaW1wb3J0IHsgUGluQ29kZUxvY2F0aW9uSW50ZXIgfSBmcm9tIFwiLi4vZWNvbW1lcmNlL3N0eWxlcy9QaW5jb2RlTG9jYXRpb25JbnRlci5tb2RlbFwiO1xyXG5pbXBvcnQgeyBQaW5jb2RlTG9jYXRpb24gfSBmcm9tIFwiLi4vZWNvbW1lcmNlL3N0eWxlcy9QaW5jb2RlTG9jYXRpb24ubW9kZWxcIjtcclxuaW1wb3J0IHsgQVBJX1VSTCwgQ01JU19VUkwsIEVDT01NRVJDRV9VUkwsIFBBU1NCT09LX1VSTCwgQVBQT0lOVE1FTlRfVVJMIH0gZnJvbSAnLi4vdG9rZW5zL2FwaS10b2tlbic7XHJcbmltcG9ydCB7IENhdGVnb3J5IH0gZnJvbSBcIi4uL2Vjb21tZXJjZS9zdHlsZXMvY2F0ZWdvcnkubW9kYWxcIlxyXG5pbXBvcnQgeyBjaGVja0l0ZW1BbHJlYWR5QWRkZWQsIFByb2R1Y3QsIHN5bmNJdGVtVG9TZXJ2ZXJEQlJlcXVlc3QgfSBmcm9tIFwiLi4vZWNvbW1lcmNlL3N0eWxlcy9wcm9kdWN0Lm1vZGFsXCI7XHJcbmltcG9ydCB7IENvbGxlY3Rpb24gfSBmcm9tIFwiLi4vZWNvbW1lcmNlL3N0eWxlcy9Db2xsZWN0aW9uLm1vZGFsXCI7XHJcbmltcG9ydCB7IFN0b3JhZ2VTZXJ2aWNlU2VydmljZSB9IGZyb20gXCIuL3N0b3JhZ2Uuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBDb29raWVTZXJ2aWNlIH0gZnJvbSBcIm5neC1jb29raWUtc2VydmljZVwiO1xyXG5pbXBvcnQgeyBMT0NBTF9TVE9SQUdFIH0gZnJvbSAnLi4vc2VydmljZXMvbG9jYWwtc3RvcmFnZS50b2tlbic7XHJcbmltcG9ydCB7IFN0b3JhZ2VMaWtlIH0gZnJvbSAnLi4vc2VydmljZXMvc3RvcmFnZS1saWtlJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSZXN0U2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcblxyXG4gIC8vIHByaXZhdGUgQkFTRV9VUkw6IHN0cmluZyA9IFwiaHR0cHM6Ly9kZXYtYXBpLnNpbXBvLmFpL1wiO1xyXG4gIC8vIHByaXZhdGUgRUNPTU1FUkNFX1VSTDogc3RyaW5nID0gXCJodHRwczovL2Rldi1lY29tbWVyY2Uuc2ltcG8uYWkvXCI7XHJcbiAgLy8gcHJpdmF0ZSBDTUlTX1VSTDogc3RyaW5nID0gXCJodHRwczovL2FwaS1jbWlzLnRlanNvZnQuY29tL1wiOyAvL3Byb2R1Y3Rpb25cclxuICAvLyBwcml2YXRlIENNSVNfVVJMOiBzdHJpbmcgPSBcImh0dHBzOi8vZGV2LWFwaS5zaW1wby5haS9cIjsgLy9kZXZcclxuICAvLyBwcml2YXRlIENNSVNfVVJMOiBzdHJpbmcgPSBcImh0dHBzOi8vc3RhZ2VhcGktY21pcy50ZWpzb2Z0LmNvbS9cIjsgLy9zdGFnZVxyXG4gIHByaXZhdGUgZW52aXJvbm1lbnRUeXBlU3Vic2NyaWJlcjogU3Vic2NyaXB0aW9uIHwgbnVsbCA9IG51bGw7XHJcbiAgYnVzaW5lc3NEZXRhaWxzOiBhbnk7XHJcbiAgc3ViSW5kdXN0cnlOYW1lOiBhbnk7XHJcbiAgaXNKZXdlbGxlcnk6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGh0dHA6IEh0dHBDbGllbnQsXHJcbiAgICBASW5qZWN0KEFQSV9VUkwpIHByaXZhdGUgQkFTRV9VUkw6IHN0cmluZyxcclxuICAgIEBJbmplY3QoRUNPTU1FUkNFX1VSTCkgcHJpdmF0ZSBFQ09NTUVSQ0VfVVJMOiBzdHJpbmcsXHJcbiAgICBASW5qZWN0KENNSVNfVVJMKSBwcml2YXRlIENNSVNfVVJMOiBzdHJpbmcsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvb2tpZVNlcnZpY2U6IENvb2tpZVNlcnZpY2UsXHJcbiAgICBASW5qZWN0KExPQ0FMX1NUT1JBR0UpIHByaXZhdGUgc3RvcmFnZTogU3RvcmFnZUxpa2UsXHJcbiAgICBASW5qZWN0KFBBU1NCT09LX1VSTCkgcHJpdmF0ZSBQQVNTQk9PS19VUkw6IHN0cmluZyxcclxuICAgIEBJbmplY3QoQVBQT0lOVE1FTlRfVVJMKSBwcml2YXRlIEFQUE9JTlRNRU5UX1VSTDogc3RyaW5nLFxyXG4gICAgLy8gQEluamVjdChSRUNPTU1FTkRBVElPTl9VUkwpIHByaXZhdGUgUkVDT01NRU5EQVRJT05fVVJMOiBzdHJpbmdcclxuICApIHtcclxuICB9XHJcbiAgb3JyYUJhc2VVcmw6IHN0cmluZyA9ICdodHRwczovL3N0YWdlYXBpLW9ycmEubGV0c21vYmlsaXR5LmNvbS8nO1xyXG4gIC8vIHBhc3NCb29rVXJsOiBzdHJpbmcgPSBcImh0dHBzOi8vcHJvZC1wYXNzYm9vay5zaW1wby5haS9cIjtcclxuICBnZXRCdXNpbmVzc0RldGFpbHMoKSB7XHJcbiAgICB0aGlzLmlzSmV3ZWxsZXJ5ID0gdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2lzTWF0ZXJpYWxCYXNlZFByaWNpbmcnKSA9PSAndHJ1ZScgPyB0cnVlIDogZmFsc2U7XHJcbiAgfVxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZW52aXJvbm1lbnRUeXBlU3Vic2NyaWJlcilcclxuICAgICAgdGhpcy5lbnZpcm9ubWVudFR5cGVTdWJzY3JpYmVyPy51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0RmVhdHVyZWRQcm9kdWN0KGNvbGxlY3Rpb25JZDogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbCkge1xyXG4gICAgdGhpcy5nZXRCdXNpbmVzc0RldGFpbHMoKTtcclxuICAgIGxldCBzdWJJbmR1c3RyeUlkOiBzdHJpbmcgfCBudWxsID0gdGhpcy5zdG9yYWdlLmdldEl0ZW0oXCJzdWJJbmR1c3RyeUlkXCIpO1xyXG4gICAgaWYgKCFzdWJJbmR1c3RyeUlkKVxyXG4gICAgICBzdWJJbmR1c3RyeUlkID0gXCJcIjtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL3Byb2R1Y3QvY29sbGVjdGlvbi9pZD9jb2xsZWN0aW9uSWQ9JHtjb2xsZWN0aW9uSWR9JmlzSmV3ZWxsZXJ5PSR7dGhpcy5pc0pld2VsbGVyeX1gKS5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4gcmVzcG9uc2UuZGF0YT8ubWFwKChwcm9kdWN0OiBhbnkpID0+IG5ldyBQcm9kdWN0KHByb2R1Y3QpKSkpO1xyXG4gIH1cclxuICBnZXRDYXRlZ29yaWVzQnlDb2xsZWN0aW9uSWQoY29sbGVjdGlvbklkOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL2ludmVudG9yeS9jYXRlZ29yeS9jb2xsZWN0aW9uSWQ/Y29sbGVjdGlvbklkPSR7Y29sbGVjdGlvbklkfWApLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiByZXNwb25zZS5kYXRhPy5tYXAoKGNhdGVnb3J5OiBhbnkpID0+IG5ldyBDYXRlZ29yeShjYXRlZ29yeSkpKSk7XHJcbiAgfVxyXG4gIC8vIGh0dHBzOi8vbmV3ZGV2LWFwaS5zaW1wby5haS9cclxuICBnZXRBbGxDYXRlZ29yaWVzQnlCdXNpbmVzc0lkKHBheWxvYWQ6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoXHJcbiAgICAgIHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL2ludmVudG9yeS9nZXQvY2F0ZWdvcnlgLCBwYXlsb2FkXHJcbiAgICApXHJcbiAgfVxyXG4gIGdldFBhc3Nib29rT3JkZXJTdGF0dXMob3JkZXJJZDogYW55KSB7XHJcbiAgICBjb25zdCB0b2tlbiA9IHRoaXMuZ2V0VG9rZW4oKTtcclxuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xyXG4gICAgICAnQXV0aG9yaXphdGlvbic6IGBCZWFyZXIgJHt0b2tlbn1gXHJcbiAgICB9KTtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdCh0aGlzLlBBU1NCT09LX1VSTCArIGBwYXNzYm9vay9tYW51YWwvcGF5bWVudC9zdGF0dXM/cGF5bWVudE9yZGVySWQ9JHtvcmRlcklkfWAsIHt9LCB7IGhlYWRlcnM6IGhlYWRlcnMgfSlcclxuICB9XHJcbiAgZ2V0UHJvZHVjdEJ5U2VsZWN0ZWRDYXRlZ29yeShjYXRlZ29yeUlkOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxyXG4gICAgICB0aGlzLkJBU0VfVVJMICsgYGVjb21tZXJjZS9wcm9kdWN0LyR7Y2F0ZWdvcnlJZH1gXHJcbiAgICApXHJcbiAgfVxyXG4gIGdldEFsbFNjaGVtZXModXNlcklkPzogYW55LCBzdG9yZUlkPzogYW55KTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuUEFTU0JPT0tfVVJMICsgYGV4dC9jb25uZWN0L3NpbXBvL3VzZXI/dXNlcklkPSR7dXNlcklkfSZzdG9yZUlkPSR7c3RvcmVJZH1gKTtcclxuICB9XHJcbiAgZ2V0QWxsUmVkZW1wdGlvblNjaGVtZXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLm9ycmFCYXNlVXJsICsgYHBhc3NCb29rL3JlZGVtcHRpb24vYW1vdW50L2NoZWNrP3VzZXJDb2RlPUNfMDAwMzEzODg1YCk7XHJcbiAgfVxyXG4gIGdldEFsbFByb2R1Y3RzKHBheWxvYWQ6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQodGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvcHJvZHVjdC9pdGVtL3NlYXJjaD9pc0pld2VsbGVyeT0ke3RoaXMuaXNKZXdlbGxlcnl9YCwgcGF5bG9hZCk7XHJcbiAgfVxyXG4gIGdldFByb2R1Y3REZXRhaWxzKHByb2R1Y3RJZDogc3RyaW5nIHwgbnVsbCA9IG51bGwpIHtcclxuICAgIHRoaXMuZ2V0QnVzaW5lc3NEZXRhaWxzKCk7XHJcbiAgICBjb25zdCBwYXlsb2FkOiBhbnkgPSB7XHJcbiAgICAgIHBhZ2VObzogMCxcclxuICAgICAgcGFnZVNpemU6IDEsXHJcbiAgICAgIGl0ZW1JZDogcHJvZHVjdElkLFxyXG4gICAgICBzdWJJbmR1c3RyeUlkOiB0aGlzLnN0b3JhZ2UuZ2V0SXRlbShcInN1YkluZHVzdHJ5SWRcIiksXHJcbiAgICAgIHVzZXJJZDogdGhpcy5zdG9yYWdlLmdldEl0ZW0oXCJwZXJJZFwiKSA/PyBudWxsLFxyXG4gICAgICByZXF1ZXN0OiBcIlVTRVJcIlxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQodGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvcHJvZHVjdC9pdGVtL3NlYXJjaD9pc0pld2VsbGVyeT0ke3RoaXMuaXNKZXdlbGxlcnl9YCwgcGF5bG9hZCkucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHJlc3BvbnNlLmRhdGEuZGF0YS5tYXAoKHByb2R1Y3Q6IGFueSkgPT4gbmV3IFByb2R1Y3QocHJvZHVjdCkpKSk7XHJcbiAgfVxyXG5cclxuICBnZXRQcm9kdWN0RGV0YWlsc1YyKHNsdWdOYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbCkge1xyXG4gICAgdGhpcy5nZXRCdXNpbmVzc0RldGFpbHMoKTtcclxuICAgIGNvbnN0IHBheWxvYWQ6IGFueSA9IHtcclxuICAgICAgcGFnZU5vOiAwLFxyXG4gICAgICBwYWdlU2l6ZTogMSxcclxuICAgICAgc2x1Z2lmaWVkTmFtZTogc2x1Z05hbWUsXHJcbiAgICAgIHN1YkluZHVzdHJ5SWQ6IHRoaXMuc3RvcmFnZS5nZXRJdGVtKFwic3ViSW5kdXN0cnlJZFwiKSxcclxuICAgICAgYnVzaW5lc3NJZDogdGhpcy5zdG9yYWdlLmdldEl0ZW0oXCJiSWRcIikgPz8gdGhpcy5zdG9yYWdlLmdldEl0ZW0oXCJidXNpbmVzc0lkXCIpLFxyXG4gICAgICB1c2VySWQ6IHRoaXMuc3RvcmFnZS5nZXRJdGVtKFwicGVySWRcIikgPz8gbnVsbCxcclxuICAgICAgcmVxdWVzdDogXCJVU0VSXCJcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL3Byb2R1Y3QvaXRlbVYyL3NlYXJjaD9pc0pld2VsbGVyeT0ke3RoaXMuaXNKZXdlbGxlcnl9YCwgcGF5bG9hZCkucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHJlc3BvbnNlLmRhdGEuZGF0YS5tYXAoKHByb2R1Y3Q6IGFueSkgPT4gbmV3IFByb2R1Y3QocHJvZHVjdCkpKSk7XHJcbiAgfVxyXG5cclxuICBnZXRDb2xsZWN0aW9uQnlJZHMoY29sbGVjdGlvbklkczogc3RyaW5nW10pIHtcclxuICAgIGNvbnN0IHBheWxvYWQgPSB7XHJcbiAgICAgIGlkczogY29sbGVjdGlvbklkc1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQodGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvaW52ZW50b3J5L2NvbGxlY3Rpb24vbGlzdC9hbGxgLCBwYXlsb2FkKS5waXBlKG1hcCgocmVzcG9uc2U6IGFueSkgPT4gcmVzcG9uc2UuZGF0YT8ubWFwKChjb2xsZWN0aW9uOiBhbnkpID0+IG5ldyBDb2xsZWN0aW9uKGNvbGxlY3Rpb24pKSkpO1xyXG4gIH1cclxuXHJcbiAgZ2V0QWxsQ2F0ZWdvcmllcygpIHtcclxuXHJcbiAgICBjb25zdCBidXNpbmVzc0lkOiBzdHJpbmcgPSB0aGlzLnN0b3JhZ2UuZ2V0SXRlbShcImJJZFwiKSA/PyB0aGlzLnN0b3JhZ2UuZ2V0SXRlbShcImJ1c2luZXNzSWRcIikgPz8gXCJcIjtcclxuICAgIGNvbnN0IHN1YkluZHVzdHJ5SWQ6IHN0cmluZyA9IHRoaXMuc3RvcmFnZS5nZXRJdGVtKFwic3ViSW5kdXN0cnlJZFwiKSA/PyBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcInN1YkluZHVzdHJ5SWRcIikgPz8gXCJcIjtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL2ludmVudG9yeS9mZWF0dXJlZD9idXNpbmVzc0lkPSR7YnVzaW5lc3NJZH0mc3ViSWQ9JHtzdWJJbmR1c3RyeUlkfWApLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiByZXNwb25zZS5kYXRhPy5tYXAoKGNhdGVnb3J5OiBhbnkpID0+IG5ldyBDYXRlZ29yeShjYXRlZ29yeSkpKSk7XHJcbiAgfVxyXG4gIGdldEFsbENvbGxlY3Rpb25zKCkge1xyXG4gICAgY29uc3QgcGF5bG9hZDogYW55ID0ge1xyXG4gICAgICBwYWdlTm86IDAsXHJcbiAgICAgIHBhZ2VTaXplOiAxMDAsXHJcbiAgICAgIHJlcXVlc3Q6IFwiVVNFUlwiLFxyXG4gICAgICBidXNpbmVzc0lkOiB0aGlzLnN0b3JhZ2UuZ2V0SXRlbShcImJJZFwiKSA/PyB0aGlzLnN0b3JhZ2UuZ2V0SXRlbShcImJ1c2luZXNzSWRcIilcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KHRoaXMuQkFTRV9VUkwgKyAnZWNvbW1lcmNlL2ludmVudG9yeS9nZXQvY29sbGVjdGlvbicsIHBheWxvYWQpLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiByZXNwb25zZS5kYXRhLmRhdGE/Lm1hcCgoY29sbGVjdGlvbjogYW55KSA9PiBuZXcgQ29sbGVjdGlvbihjb2xsZWN0aW9uKSkpKTtcclxuICB9XHJcblxyXG4gIGdldEZpbHRlcmVkUHJvZHVjdChjb2xsZWN0aW9uSWRzOiBzdHJpbmdbXSwgY2F0ZWdvcnlJZHM6IHN0cmluZ1tdLCBzZWFyY2hUZXh0OiBzdHJpbmcsIG1pblByaWNlOiBudW1iZXIsIG1heFByaWNlOiBudW1iZXIsIG1pblJhdGluZzogbnVtYmVyLCBtYXhSYXRpbmc6IG51bWJlciwgc29ydEJ5OiBzdHJpbmcsIHBhZ2VObzogbnVtYmVyLCBzaXplOiBudW1iZXIpIHtcclxuICAgIHRoaXMuZ2V0QnVzaW5lc3NEZXRhaWxzKCk7XHJcbiAgICBsZXQgcGF5bG9hZDogYW55ID0ge1xyXG4gICAgICBcImJ1c2luZXNzSWRcIjogdGhpcy5zdG9yYWdlLmdldEl0ZW0oXCJiSWRcIikgPz8gdGhpcy5zdG9yYWdlLmdldEl0ZW0oXCJidXNpbmVzc0lkXCIpLFxyXG4gICAgICBcInN1YkluZHVzdHJ5SWRcIjogdGhpcy5zdG9yYWdlLmdldEl0ZW0oXCJzdWJJbmR1c3RyeUlkXCIpLFxyXG4gICAgICBcImNvbGxlY3Rpb25JZFwiOiBjb2xsZWN0aW9uSWRzLFxyXG4gICAgICBcImNhdGVnb3J5SWRcIjogY2F0ZWdvcnlJZHMsXHJcbiAgICAgIFwic2VhcmNoVGV4dFwiOiBzZWFyY2hUZXh0LFxyXG4gICAgICBcInNvcnRCeVwiOiBzb3J0QnksXHJcbiAgICAgIFwicGFnZU5vXCI6IHBhZ2VObyxcclxuICAgICAgXCJwYWdlU2l6ZVwiOiBzaXplLFxyXG4gICAgICBcInVzZXJJZFwiOiB0aGlzLnN0b3JhZ2UuZ2V0SXRlbShcInBlcklkXCIpID8/IG51bGwsXHJcbiAgICAgIHJlcXVlc3Q6IFwiVVNFUlwiXHJcbiAgICB9XHJcbiAgICBpZiAobWluUHJpY2UgPiAwKVxyXG4gICAgICBwYXlsb2FkW1wibWluUHJpY2VcIl0gPSBtaW5QcmljZTtcclxuICAgIGlmIChtYXhQcmljZSA+IDApXHJcbiAgICAgIHBheWxvYWRbXCJtYXhQcmljZVwiXSA9IG1heFByaWNlO1xyXG4gICAgaWYgKG1pblJhdGluZyA+IDApXHJcbiAgICAgIHBheWxvYWRbXCJtaW5SYXRpbmdcIl0gPSBtaW5SYXRpbmc7XHJcbiAgICBpZiAobWF4UmF0aW5nID4gMClcclxuICAgICAgcGF5bG9hZFtcIm1heFJhdGluZ1wiXSA9IG1heFJhdGluZztcclxuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL3Byb2R1Y3QvaXRlbVYyL3NlYXJjaD9pc0pld2VsbGVyeT0ke3RoaXMuaXNKZXdlbGxlcnl9YCwgcGF5bG9hZCkucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBjb3VudDogcmVzcG9uc2UuZGF0YS5jb3VudCxcclxuICAgICAgICBtaW5QcmljZTogcmVzcG9uc2UuZGF0YS5taW5QcmljZSxcclxuICAgICAgICBtYXhQcmljZTogcmVzcG9uc2UuZGF0YS5tYXhQcmljZSxcclxuICAgICAgICBkYXRhOiByZXNwb25zZS5kYXRhLmRhdGE/Lm1hcCgocHJvZHVjdDogYW55KSA9PiBuZXcgUHJvZHVjdChwcm9kdWN0KSlcclxuICAgICAgfVxyXG4gICAgfSkpO1xyXG4gIH1cclxuICBnZXRQcm9kdWN0QnlDYXRlZ29yeUlkKGNhdGVnb3J5SWQ6IHN0cmluZykge1xyXG4gICAgdGhpcy5nZXRCdXNpbmVzc0RldGFpbHMoKTtcclxuICAgIGNvbnN0IHBheWxvYWQ6IGFueSA9IHtcclxuICAgICAgXCJidXNpbmVzc0lkXCI6IHRoaXMuc3RvcmFnZS5nZXRJdGVtKFwiYklkXCIpID8/IHRoaXMuc3RvcmFnZS5nZXRJdGVtKFwiYnVzaW5lc3NJZFwiKSxcclxuICAgICAgXCJjYXRlZ29yeUlkXCI6IFtjYXRlZ29yeUlkXSxcclxuICAgICAgXCJzdWJJbmR1c3RyeUlkXCI6IHRoaXMuc3RvcmFnZS5nZXRJdGVtKFwic3ViSW5kdXN0cnlJZFwiKSxcclxuICAgICAgXCJwYWdlTm9cIjogMCxcclxuICAgICAgXCJwYWdlU2l6ZVwiOiAxMCxcclxuICAgICAgXCJ1c2VySWRcIjogdGhpcy5zdG9yYWdlLmdldEl0ZW0oXCJwZXJJZFwiKSA/PyBudWxsLFxyXG4gICAgICByZXF1ZXN0OiBcIlVTRVJcIlxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQodGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvcHJvZHVjdC9pdGVtL3NlYXJjaD9pc0pld2VsbGVyeT0ke3RoaXMuaXNKZXdlbGxlcnl9YCwgcGF5bG9hZCkucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBjb3VudDogcmVzcG9uc2UuY291bnQsXHJcbiAgICAgICAgZGF0YTogcmVzcG9uc2UuZGF0YS5kYXRhPy5tYXAoKHByb2R1Y3Q6IGFueSkgPT4gbmV3IFByb2R1Y3QocHJvZHVjdCkpXHJcbiAgICAgIH1cclxuICAgIH0pKTtcclxuICB9XHJcbiAgZ2V0UHJvZHVjdEJ5Q29sbGVjdGlvbklkKGNvbGxlY3Rpb25JZDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmdldEJ1c2luZXNzRGV0YWlscygpO1xyXG4gICAgY29uc3QgcGF5bG9hZDogYW55ID0ge1xyXG4gICAgICBcImJ1c2luZXNzSWRcIjogdGhpcy5zdG9yYWdlLmdldEl0ZW0oXCJiSWRcIikgPz8gdGhpcy5zdG9yYWdlLmdldEl0ZW0oXCJidXNpbmVzc0lkXCIpLFxyXG4gICAgICBcImNvbGxlY3Rpb25JZFwiOiBbY29sbGVjdGlvbklkXSxcclxuICAgICAgXCJzdWJJbmR1c3RyeUlkXCI6IHRoaXMuc3RvcmFnZS5nZXRJdGVtKFwic3ViSW5kdXN0cnlJZFwiKSxcclxuICAgICAgXCJwYWdlTm9cIjogMCxcclxuICAgICAgXCJwYWdlU2l6ZVwiOiAxMCxcclxuICAgICAgXCJ1c2VySWRcIjogdGhpcy5zdG9yYWdlLmdldEl0ZW0oXCJwZXJJZFwiKSA/PyBudWxsLFxyXG4gICAgICByZXF1ZXN0OiBcIlVTRVJcIlxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQodGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvcHJvZHVjdC9pdGVtL3NlYXJjaD9pc0pld2VsbGVyeT0ke3RoaXMuaXNKZXdlbGxlcnl9YCwgcGF5bG9hZCkucGlwZShtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBjb3VudDogcmVzcG9uc2UuY291bnQsXHJcbiAgICAgICAgZGF0YTogcmVzcG9uc2UuZGF0YS5kYXRhPy5tYXAoKHByb2R1Y3Q6IGFueSkgPT4gbmV3IFByb2R1Y3QocHJvZHVjdCkpXHJcbiAgICAgIH1cclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIGFkZFJldmlldyhwYXlsb2FkOiBSZXZpZXcpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdCh0aGlzLkJBU0VfVVJMICsgYGVjb21tZXJjZS91c2VyL2FkZC9yZXZpZXdgLCBwYXlsb2FkKTtcclxuICB9XHJcbiAgZ2V0QWxsUmV2aWV3cyhwcm9kdWN0SWQ6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQodGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvdXNlci9maWx0ZXIvcmV2aWV3cz9wcm9kdWN0SWQ9JHtwcm9kdWN0SWR9YCwgbnVsbCk7XHJcbiAgfVxyXG5cclxuICBnZW5lcmF0ZU9UUChtb2JpbGU6IHN0cmluZywgY291bnRyeUNvZGU6IHN0cmluZykge1xyXG4gICAgY29uc3QgYnVzaW5lc3NJZDogc3RyaW5nID0gdGhpcy5zdG9yYWdlLmdldEl0ZW0oXCJiSWRcIikgPz8gdGhpcy5zdG9yYWdlLmdldEl0ZW0oXCJidXNpbmVzc0lkXCIpID8/IFwiXCI7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QodGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvdXNlci9vdHAvdHJpZ2dlcj9tb2JpbGU9JHttb2JpbGV9JmNvdW50cnlDb2RlPSR7Y291bnRyeUNvZGV9JmJ1c2luZXNzSWQ9JHtidXNpbmVzc0lkfWAsIG51bGwpO1xyXG4gIH1cclxuICB2ZXJpZnlPVFAobW9iaWxlOiBzdHJpbmcsIG90cDogc3RyaW5nLCBkZXZpY2VJbmZvOiBEZXZpY2VJbmZvKSB7XHJcbiAgICBjb25zdCBidXNpbmVzc0lkOiBzdHJpbmcgPSB0aGlzLnN0b3JhZ2UuZ2V0SXRlbShcImJJZFwiKSA/PyB0aGlzLnN0b3JhZ2UuZ2V0SXRlbShcImJ1c2luZXNzSWRcIikgPz8gXCJcIjtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL3VzZXIvYXV0aGVudGljYXRlP21vYmlsZT0ke21vYmlsZX0mb3RwPSR7b3RwfSZidXNpbmVzc0lkPSR7YnVzaW5lc3NJZH1gLCBkZXZpY2VJbmZvKTtcclxuICB9XHJcbiAgcmVzZW5kT1RQKG1vYmlsZTogc3RyaW5nLCBjb3VudHJ5Q29kZTogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBidXNpbmVzc0lkOiBzdHJpbmcgPSB0aGlzLnN0b3JhZ2UuZ2V0SXRlbShcImJJZFwiKSA/PyB0aGlzLnN0b3JhZ2UuZ2V0SXRlbShcImJ1c2luZXNzSWRcIikgPz8gXCJcIjtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdCh0aGlzLkJBU0VfVVJMICsgYGVjb21tZXJjZS91c2VyL3Jlc2VuZD9tb2JpbGU9JHttb2JpbGV9JmNvdW50cnlDb2RlPSR7Y291bnRyeUNvZGV9JmJ1c2luZXNzSWQ9JHtidXNpbmVzc0lkfWAsIG51bGwpO1xyXG4gIH1cclxuICBhcHBsaWNhYmxlRGlzY291bnRMaXN0KGNhcnRJZDogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLkJBU0VfVVJMICsgYGVjb21tZXJjZS9vcmRlci9kaXNjb3VudC1jb3Vwb24vJHtjYXJ0SWR9L2FwcGxpY2FiaWxpdHkvbGlzdGApO1xyXG4gIH1cclxuXHJcbiAgYWRkSXRlbVRvREIodXNlckNhcnQ6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL29yZGVyL2NhcnRgLCB1c2VyQ2FydCk7XHJcbiAgfVxyXG4gIGdldFVzZXJJdGVtcyh1c2VySWQ6IHN0cmluZywgY2FydFR5cGU6ICdDQVJUJyB8ICdXSVNITElTVCcgfCAnVFJJQUxfQ0FSVCcpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL29yZGVyL2NhcnQ/dXNlcklkPSR7dXNlcklkfSZjYXJ0VHlwZT0ke2NhcnRUeXBlfWApO1xyXG4gIH1cclxuICBnZXRVc2VySW5mbyh1c2VySWQ6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQodGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvdXNlci9nZXQvdXNlcj91c2VySWQ9JHt1c2VySWR9YCwgbnVsbCk7XHJcbiAgfVxyXG4gIGFkZFVzZXJBZGRyZXNzKHVzZXI6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQodGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvdXNlci91cGRhdGUvdXNlcmAsIHVzZXIpO1xyXG4gIH1cclxuICB1cGRhdGVQcm9maWxlKHBheWxvYWQ6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQodGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvdXNlci91cGRhdGUvdXNlcmAsIHBheWxvYWQpO1xyXG4gIH1cclxuICBnZXRVc2VyT3JkZXJzKHBheWxvYWQ6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQodGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2Uvb3JkZXIvdXNlci9vcmRlcmAsIHBheWxvYWQpO1xyXG4gIH1cclxuICBnZXRVc2VyV2lzaGxpc3QodXNlcklkOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL29yZGVyL2NhcnQ/dXNlcklkPSR7dXNlcklkfSZjYXJ0VHlwZT1XSVNITElTVGApXHJcbiAgfVxyXG4gIG1vdmVJdGVtVG9DYXJ0KHVzZXJJZDogc3RyaW5nLCBwYXlsb2FkOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL29yZGVyL3VwZGF0ZS9jYXJ0P3VzZXJJZD0ke3VzZXJJZH1gLCBwYXlsb2FkKTtcclxuICB9XHJcblxyXG4gIC8vIFBheW1lbnRcclxuICBjcmVhdGVQYXltZW50VG9rZW4ocGF5bG9hZDogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QodGhpcy5FQ09NTUVSQ0VfVVJMICsgYHBheW1lbnQvb3JkZXJgLCBwYXlsb2FkKTtcclxuICB9XHJcbiAgY2hlY2tQYXltZW50U3RhdHVzKHBheWxvYWQ6IGFueSkge1xyXG4gICAgbGV0IGlzSmV3ZWxsZXJ5ID0gdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2lzTWF0ZXJpYWxCYXNlZFByaWNpbmcnKSA9PSAndHJ1ZScgPyB0cnVlIDogZmFsc2U7XHJcbiAgICBsZXQgcGF5bG9hZFdpdGhKZXdlbGxlcnkgPSB7IC4uLnBheWxvYWQsIGlzSmV3ZWxsZXJ5OiBpc0pld2VsbGVyeSB9O1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KHRoaXMuRUNPTU1FUkNFX1VSTCArIGBwYXltZW50L3N0YXR1c2AsIHBheWxvYWRXaXRoSmV3ZWxsZXJ5KTtcclxuICB9XHJcbiAgZ2V0UmVjZW50Vmlld1Byb2R1Y3QodXNlcklkOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdCh0aGlzLkJBU0VfVVJMICsgYGVjb21tZXJjZS91c2VyL3JlY2VudFZpZXc/dXNlcklkPSR7dXNlcklkfWAsIG51bGwpLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiByZXNwb25zZS5kYXRhPy5tYXAoKHByb2R1Y3Q6IGFueSkgPT4gbmV3IFByb2R1Y3QocHJvZHVjdCkpKSk7O1xyXG4gIH1cclxuXHJcbiAgc2VuZFNpZ251cE9UUChwYXlsb2FkOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdCh0aGlzLkJBU0VfVVJMICsgYGVjb21tZXJjZS91c2VyL3NpZ251cC9vdHAvdHJpZ2dlcmAsIHBheWxvYWQpO1xyXG4gIH1cclxuXHJcbiAgdmVyaWZ5U2lnbnVwT1RQKHBheWxvYWQ6IGFueSkge1xyXG4gICAgY29uc3QgYnVzaW5lc3NJZDogc3RyaW5nID0gdGhpcy5zdG9yYWdlLmdldEl0ZW0oXCJiSWRcIikgPz8gdGhpcy5zdG9yYWdlLmdldEl0ZW0oXCJidXNpbmVzc0lkXCIpID8/ICcnO1xyXG4gICAgLy8gcGF5bG9hZFtcImJ1c2luZXNzSWRcIl0gPSBidXNpbmVzc0lkO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQodGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvdXNlci9hdXRoZW50aWNhdGUvc2lnbnVwYCwgcGF5bG9hZCk7XHJcbiAgfVxyXG5cclxuICBzaWduaW5QYXNzd29yZChwYXNzRGF0YTogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dCh0aGlzLkJBU0VfVVJMICsgYGVjb21tZXJjZS91c2VyL2F1dGhlbnRpY2F0ZS9sb2dpbmAsIHBhc3NEYXRhKTtcclxuICB9XHJcblxyXG4gIGVuZFVzZXJSZWZmZXJhbERldGFpbHModXNlcklkOiBhbnksIHJlZmVycmFsVW5pcXVlSWQ6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL2FwaS9lbmQtdXNlci9yZWZlcnJhbERldGFpbHM/dXNlcklkPSR7dXNlcklkfSZyZWZlcnJhbFVuaXF1ZUlkPSR7cmVmZXJyYWxVbmlxdWVJZH1gLCB7fSlcclxuICB9XHJcblxyXG4gIGNyZWF0ZUFwcG9pbnRtZW50KGRhdGE6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KHRoaXMuQkFTRV9VUkwgKyBgY3JtL2FwcG9pbnRtZW50L2FkZGAsIGRhdGEpXHJcbiAgfVxyXG5cclxuICBnZXRBbGxMb2NhdGlvbihidXNpbmVzc0lkOiBhbnksIHNpemU6IG51bWJlciwgcGFnZTogbnVtYmVyKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChcclxuICAgICAgdGhpcy5CQVNFX1VSTCArIGBjcm0vYXBwb2ludG1lbnQvY29uZmlnL2xvY2F0aW9uP2J1c2luZXNzSWQ9JHtidXNpbmVzc0lkfSZzaXplPSR7c2l6ZX0mcGFnZT0ke3BhZ2V9YFxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgZ2V0QWxsVGltZVNsb3RzKGxvY2F0aW9uSWQ6IGFueSwgZGF0ZTogRGF0ZSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXHJcbiAgICAgIHRoaXMuQkFTRV9VUkwgKyBgY3JtL2FwcG9pbnRtZW50L2NvbmZpZy90aW1lc2xvdHM/bG9jYXRpb25JZD0ke2xvY2F0aW9uSWR9JmRhdGU9JHtkYXRlfWBcclxuICAgIClcclxuICB9XHJcblxyXG4gIGdldEFsbFNlcnZpY2UoYnVzaW5lc3NJZDogYW55LCBzaXplOiBhbnksIHBhZ2U6IGFueSwgbG9jYXRpb25JZD86IGFueSkge1xyXG4gICAgaWYgKCFsb2NhdGlvbklkKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxyXG4gICAgICAgIHRoaXMuQkFTRV9VUkwgKyBgY3JtL2FwcG9pbnRtZW50L2NvbmZpZy9zZXJ2aWNlP2J1c2luZXNzSWQ9JHtidXNpbmVzc0lkfSZzaXplPSR7c2l6ZX0mcGFnZT0ke3BhZ2V9YFxyXG4gICAgICApXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldChcclxuICAgICAgICB0aGlzLkJBU0VfVVJMICsgYGNybS9hcHBvaW50bWVudC9jb25maWcvc2VydmljZT9idXNpbmVzc0lkPSR7YnVzaW5lc3NJZH0mc2l6ZT0ke3NpemV9JnBhZ2U9JHtwYWdlfSZsb2NhdGlvbklkPSR7bG9jYXRpb25JZH1gXHJcbiAgICAgIClcclxuXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRBbGxTdGFmZkJ5TG9jYXRpb24oYnVzaW5lc3NJZDogYW55LCBzaXplOiBudW1iZXIsIHBhZ2U6IG51bWJlciwgbG9jYXRpb25JZDogc3RyaW5nLCBzZXJ2aWNlSWQ6IHN0cmluZykge1xyXG4gICAgaWYgKCFzZXJ2aWNlSWQpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXHJcbiAgICAgICAgdGhpcy5CQVNFX1VSTCArIGBjcm0vYXBwb2ludG1lbnQvY29uZmlnL3N0YWZmP2J1c2luZXNzSWQ9JHtidXNpbmVzc0lkfSZzaXplPSR7c2l6ZX0mcGFnZT0ke3BhZ2V9JmxvY2F0aW9uSWQ9JHtsb2NhdGlvbklkfWBcclxuICAgICAgKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXHJcbiAgICAgICAgdGhpcy5CQVNFX1VSTCArIGBjcm0vYXBwb2ludG1lbnQvY29uZmlnL3N0YWZmP2J1c2luZXNzSWQ9JHtidXNpbmVzc0lkfSZzaXplPSR7c2l6ZX0mcGFnZT0ke3BhZ2V9JmxvY2F0aW9uSWQ9JHtsb2NhdGlvbklkfSZzZXJ2aWNlSWQ9JHtzZXJ2aWNlSWR9YFxyXG4gICAgICApXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRBdmFpbGFibGVTbG90cyhkYXRhOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KFxyXG4gICAgICB0aGlzLkJBU0VfVVJMICsgYGNybS9hcHBvaW50bWVudC9jb25maWcvYXZhaWxhYmxlL3RpbWVzbG90c2AsIGRhdGFcclxuICAgIClcclxuICB9XHJcblxyXG4gIGdldFNlbGVjdGVkTGlzdEZpZWxkcyhiSWQ6IGFueSwgc2hvd0luRXJwOiBhbnksIGZvcm1OYW1lOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxyXG4gICAgICB0aGlzLkNNSVNfVVJMICsgYGNybS9maWVsZHM/YnVzaW5lc3NJZD0ke2JJZH0mc3RhdHVzPXRydWUmc2hvd0luRm9ybT0ke3Nob3dJbkVycH0maXNQYWdpbmF0aW9uPWZhbHNlJmZpZWxkQ2F0ZWdvcnk9JHtmb3JtTmFtZX1gXHJcbiAgICApXHJcbiAgfVxyXG5cclxuICBnZXRBY3RpdmVTdWJzY3JpcHRpb25Gb3JGZWVTdHJ1Y3R1cmUoYnVzaW5lc3NJZDogYW55LCBncmFkZUlkOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxyXG4gICAgICB0aGlzLkNNSVNfVVJMICsgYGNybS9zdWJzY3JpcHRpb24vcGxhbi9saXN0P2J1c2luZXNzSWQ9JHtidXNpbmVzc0lkfSZncmFkZUlkPSR7Z3JhZGVJZH0mc3RhdHVzPXRydWUmaXNEZWxldGVkPWZhbHNlYFxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgY3JlYXRlQWRtaXNzaW9uKHBheWxvYWQ6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KFxyXG4gICAgICB0aGlzLkNNSVNfVVJMICsgYGNybS9yZWdpc3RyYXRpb24vYWRtaXNzaW9uP3JlZ2lzdHJhdGlvbklkPSR7cGF5bG9hZD8ucmVnaXN0cmF0aW9uSWQgfHwgJyd9YCwgcGF5bG9hZFxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgY3JlYXRlUGF5bWVudExpbmsoZGF0YTogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoXHJcbiAgICAgIHRoaXMuQ01JU19VUkwgKyBgY3JtL3JlZ2lzdHJhdGlvbi9hZG1pc3Npb24vdjIvcGF5bWVudD9pc0Zyb21XZWI9dHJ1ZWAsIGRhdGFcclxuICAgIClcclxuICB9XHJcblxyXG4gIGNyZWF0ZVJlZ2lzdHJhdGlvbkZvclBheW1lbnQocGF5bG9hZDogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoXHJcbiAgICAgIHRoaXMuQ01JU19VUkwgKyBgY3JtL3JlZ2lzdHJhdGlvbi9yZWdpc3RyYXRpb24vcGF5bWVudGAsIHBheWxvYWRcclxuICAgIClcclxuICB9XHJcblxyXG5cclxuICBnZXRTdWJzY3JpcHRpb25Gb3JGZWVTdHJ1Y3R1cmUoZ3JhZGVJZDogYW55KSB7XHJcbiAgICBjb25zdCBidXNpbmVzc0lkID0gdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2J1c2luZXNzSWQnKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChcclxuICAgICAgdGhpcy5DTUlTX1VSTCArIGBjcm0vc3Vic2NyaXB0aW9uL3BsYW4vbGlzdD9idXNpbmVzc0lkPSR7YnVzaW5lc3NJZH0mZ3JhZGVJZD0ke2dyYWRlSWR9YFxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgZ2V0RmVlU3RydWN0dXJlKHBheWxvYWQ6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoXHJcbiAgICAgIHRoaXMuQ01JU19VUkwgKyBgY3JtL2ZlZS9zdHJ1Y3R1cmVgLCBwYXlsb2FkXHJcbiAgICApXHJcbiAgfVxyXG5cclxuICBuZXdGZWVTdHJ1Y3R1cmVHZXRMaXN0KGRhdGE6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoXHJcbiAgICAgIHRoaXMuQ01JU19VUkwgKyBgY3JtL2ZlZS9zdHJ1Y3R1cmUvdjIvZmlsdGVyYCwgZGF0YVxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgZ2V0QWxsRG9jdW1lbnQocGF5bG9hZDogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChcclxuICAgICAgdGhpcy5DTUlTX1VSTCArIGBjcm0vbWFzdGVyL2RvY3VtZW50VHlwZS9maWx0ZXJgLCBwYXlsb2FkKVxyXG4gIH1cclxuXHJcbiAgZ2V0TGVhZEJ5SWQobGVhZElkOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxyXG4gICAgICB0aGlzLkNNSVNfVVJMICsgYGNybS9sZWFkcy9nZXQtb25lP2xlYWRJZD0ke2xlYWRJZH1gXHJcbiAgICApXHJcbiAgfVxyXG5cclxuICBnZXRSZWdpc3RyYXRpb25MaXN0KHBheWxvYWQ6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoXHJcbiAgICAgIHRoaXMuQ01JU19VUkwgKyBgY3JtL3JlZ2lzdHJhdGlvbi9nZXRBbGxgLCBwYXlsb2FkXHJcbiAgICApXHJcbiAgfVxyXG5cclxuICBnZXRBbGxDb21wb25lbnRDYXRlZ29yaWVzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXHJcbiAgICAgIHRoaXMuQkFTRV9VUkwgKyBgYWRtaW4vbWFzdGVyL3RlbXBsYXRlL2NhdGVnb3J5L2FsbGBcclxuICAgIClcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2FmZVBhcnNlPFQ+KHJhdzogc3RyaW5nIHwgbnVsbCk6IFQgfCBudWxsIHtcclxuICAgIGlmICghcmF3KSByZXR1cm4gbnVsbDtcclxuICAgIHRyeSB7IHJldHVybiBKU09OLnBhcnNlKHJhdykgYXMgVDsgfSBjYXRjaCB7IHJldHVybiBudWxsOyB9XHJcbiAgfVxyXG5cclxuICBnZXRUZW1wbGF0ZSgpIHtcclxuICAgIGNvbnN0IGJEZXRhaWxzUmF3ID0gdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2JEZXRhaWxzJyk7XHJcbiAgICBjb25zdCBkZXRhaWxzID0gdGhpcy5zYWZlUGFyc2U8eyB0ZW1wbGF0ZUlkPzogc3RyaW5nIH0+KGJEZXRhaWxzUmF3KTtcclxuXHJcbiAgICAvLyBmYWxsYmFjayBzb3VyY2VcclxuICAgIGNvbnN0IHdlYnNpdGVEYXRhUmF3ID0gdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ3dlYnNpdGVEYXRhJyk7XHJcbiAgICBjb25zdCB3ZWJzaXRlRGF0YSA9IHRoaXMuc2FmZVBhcnNlPHsgaG9tZVBhZ2VJZD86IHN0cmluZyB9Pih3ZWJzaXRlRGF0YVJhdyk7XHJcblxyXG4gICAgLy8gcHJlZmVyIHRlbXBsYXRlSWQgZnJvbSBiRGV0YWlsczsgZWxzZSBmYWxsYmFjayB0byB3ZWJzaXRlRGF0YS5ob21lUGFnZUlkXHJcbiAgICBjb25zdCB0ZW1wbGF0ZUlkID0gKGRldGFpbHM/LnRlbXBsYXRlSWQgPz8gd2Vic2l0ZURhdGE/LmhvbWVQYWdlSWQgPz8gJycpLnRvU3RyaW5nKCk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5CQVNFX1VSTCArIGBidXNpbmVzcy92My93ZWJzaXRlLyR7dGVtcGxhdGVJZH0vcGFnZXMvbGlzdGApO1xyXG4gIH1cclxuXHJcblxyXG4gIGdldEVjb21tZXJjZUNvbmZpZ3MoKSB7XHJcbiAgICBjb25zdCBidXNpbmVzc0lkID0gdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2J1c2luZXNzSWQnKSA/PyBcIjFmMTA2NTFmLTkyNTgtNmI2My05ZDIzLWEzZDY5MWFjZWI4OFwiO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXHJcbiAgICAgIHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL2Vjb21tZXJjZS9jb25maWcvYWxsP2J1c2luZXNzSWQ9JHtidXNpbmVzc0lkfWBcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwb3N0VmlkZW9DYWxsRGV0YWlscyhwYXlsb2FkOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChcclxuICAgICAgdGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvZWNvbW1lcmNlL2NvbmZpZy92aWRlby1jYWxsYCwgcGF5bG9hZFxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgZ2V0U3RvcmVMb2NhdG9yRGV0YWlscyhwaW5jb2RlOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxyXG4gICAgICB0aGlzLkJBU0VfVVJMICsgYGVjb21tZXJjZS9zdG9yZS9uZWFyYnk/cGluY29kZT0ke3BpbmNvZGV9JmJ1c2luZXNzSWQ9JHt0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnYnVzaW5lc3NJZCcpfWBcclxuICAgIClcclxuICB9XHJcblxyXG4gIHNhdmVJbWFnZXNUb0J1c2luZXNzTGlicmFyeShtZWRpYVJlcXVlc3Q6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KFxyXG4gICAgICB0aGlzLkJBU0VfVVJMICsgYGFkbWluL2xpYnJhcnkvaW1hZ2UvbGlicmFyeS9zYXZlYCxcclxuICAgICAgbWVkaWFSZXF1ZXN0XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcmVnZW5lcmF0ZVRleHQocmVxdWVzdDogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoXHJcbiAgICAgIHRoaXMuQkFTRV9VUkwgKyBgYWRtaW4vY29udGVudC9zdWdnZXN0L3YyL3dlYnNpdGUvaW5kaXZpZHVhbGAsIHJlcXVlc3RcclxuICAgIClcclxuICB9XHJcbiAgZ2V0Q2F0ZWdvcmllc0hlYWRlckRhdGEoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChcclxuICAgICAgdGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvcHJvZHVjdC8ke3RoaXMuc3RvcmFnZS5nZXRJdGVtKCdidXNpbmVzc0lkJyl9L2hlYWRlcnNgXHJcbiAgICApXHJcbiAgfVxyXG4gIGdldEFsbFN0b3JlcyhwYXlsb2FkOiBhbnkpIHtcclxuICAgIGxldCB1cmwgPSAnJ1xyXG4gICAgaWYgKHBheWxvYWQ/LnBpbmNvZGUgJiYgcGF5bG9hZC5waW5jb2RlLnRvU3RyaW5nKCkubGVuZ3RoID09IDYpIHtcclxuICAgICAgdXJsID0gdXJsICsgYCAmcGluY29kZT0ke3BheWxvYWQucGluY29kZX1gXHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChcclxuICAgICAgdGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2Uvc3RvcmUvZ2V0L3YyP2J1c2luZXNzSWQ9JHtwYXlsb2FkLmJ1c2luZXNzSWR9JHt1cmx9YCwgJydcclxuICAgIClcclxuICB9XHJcblxyXG4gIGdldEFsbEFwcG9pbnRtZW50U2VydmljZShwYXlsb2FkOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KFxyXG4gICAgICB0aGlzLkFQUE9JTlRNRU5UX1VSTCArICdzZXJ2aWNlL2xpc3QnLCBwYXlsb2FkXHJcbiAgICApXHJcbiAgfVxyXG5cclxuICBnZXRBbGxTdGFmZihwYXlsb2FkOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxyXG4gICAgICB0aGlzLkJBU0VfVVJMICsgYHN0YWZmL3N0YWZmL3N0b3JlLXN0YWZmLWxpc3Q/c2VydmljZUlkPSR7cGF5bG9hZC5zZXJ2aWNlSWR9JnN0b3JlSWQ9JHtwYXlsb2FkLnN0b3JlSWR9JmJ1c2luZXNzSWQ9JHtwYXlsb2FkLmJ1c2luZXNzSWR9YFxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgZ2V0U3RvcmVCeUlkKHN0b3JlSWQ6IHN0cmluZykge1xyXG4gICAgbGV0IHBheWxvYWQgPSB7XHJcbiAgICAgIHN0b3JlSWQ6IHN0b3JlSWQsXHJcbiAgICAgIGJ1c2luZXNzSWQ6IHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdidXNpbmVzc0lkJykgPz8gXCJcIixcclxuICAgICAgcGFnZU5vOiAwLFxyXG4gICAgICBwYWdlU2l6ZTogMTAwMFxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoXHJcbiAgICAgIHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL3N0b3JlL2dldGAsIHBheWxvYWQpXHJcbiAgfVxyXG4gIHBvc3ROZXdzTGV0dGVyKGVtYWlsOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChcclxuICAgICAgdGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvZWNvbW1lcmNlL2NvbmZpZy9yZWdpc3RlcmVkL25ld3NsZXR0ZXI/ZW1haWw9JHtlbWFpbH0mYnVzaW5lc3NJZD0ke3RoaXMuc3RvcmFnZS5nZXRJdGVtKCdidXNpbmVzc0lkJyl9YCwgJydcclxuICAgIClcclxuICB9XHJcbiAgYWRkUmV2aWV3VG9Qcm9kdWN0KHBheWxvYWQ6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KFxyXG4gICAgICB0aGlzLkJBU0VfVVJMICsgYGVjb21tZXJjZS91c2VyL2FkZC9yZXZpZXc/b3JkZXJJZD0ke3BheWxvYWQub3JkZXJJZH1gLCBwYXlsb2FkXHJcbiAgICApXHJcbiAgfVxyXG5cclxuICBnZXRBbGxTdG9yZXNPcnJhKHBhZ2VObzogYW55LCBzaXplOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxyXG4gICAgICBgaHR0cHM6Ly9zdGFnZWFwaS1vcnJhLmxldHNtb2JpbGl0eS5jb20vc3RvcmU/cGFnZU5vPSR7cGFnZU5vfSZzaXplPSR7c2l6ZX1gXHJcbiAgICApXHJcbiAgfVxyXG5cclxuICBnZXRzdGFmZkJ5U3RvcmVJZChzdG9yZUlkOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxyXG4gICAgICBgaHR0cHM6Ly9zdGFnZWFwaS1vcnJhLmxldHNtb2JpbGl0eS5jb20vc3RhZmYvZ2V0LyR7c3RvcmVJZH1gXHJcbiAgICApXHJcbiAgfVxyXG5cclxuXHJcbiAgZ2V0QWxsU2NoZW1lKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXHJcbiAgICAgIGBodHRwczovL3N0YWdlYXBpLW9ycmEubGV0c21vYmlsaXR5LmNvbS9zY2hlbWUvZ2V0QWxsU2NoZW1lcy9kYXNoYm9hcmRgXHJcbiAgICApXHJcbiAgfVxyXG5cclxuICBnZXRBbGxTdGF0ZSgpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxyXG4gICAgICBgaHR0cHM6Ly9zdGFnZWFwaS1vcnJhLmxldHNtb2JpbGl0eS5jb20vc3RhdGUvZ2V0QWxsYFxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgZ2V0Q2l0eUJ5U3RhdGVCeXBhZ2luYXRlZChzdGF0ZUlkOiBhbnksIHBhZ2VObzogYW55LCBzaXplOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxyXG4gICAgICBgaHR0cHM6Ly9zdGFnZWFwaS1vcnJhLmxldHNtb2JpbGl0eS5jb20vY2l0eS9nZXRCeVN0YXRlP3N0YXRlSWQ9JHtzdGF0ZUlkfSZwYWdlTm89JHtwYWdlTm99JnNpemU9JHtzaXplfWBcclxuICAgIClcclxuICB9XHJcblxyXG4gIGdldFN0b3JlQnlTbGFiKGRhdGE6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoXHJcbiAgICAgIGBodHRwczovL3N0YWdlYXBpLW9ycmEubGV0c21vYmlsaXR5LmNvbS9zdG9yZS9nZXRTbGFiYCwgZGF0YVxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgYWRkVHJpYWxJdGVtKHJlcXVlc3Q6IHN5bmNJdGVtVG9TZXJ2ZXJEQlJlcXVlc3QpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KFxyXG4gICAgICB0aGlzLkJBU0VfVVJMICsgYGVjb21tZXJjZS9vcmRlci9jYXJ0L3YyYCwgcmVxdWVzdFxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgY2hlY2tJdGVtQWxyZWFkeUFkZGVkKHJlcXVlc3Q6IGNoZWNrSXRlbUFscmVhZHlBZGRlZCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoXHJcbiAgICAgIHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL29yZGVyL2NhcnQvY2hlY2svaXRlbWAsIHJlcXVlc3RcclxuICAgIClcclxuICB9XHJcblxyXG4gIGRlbGV0ZUl0ZW1Gcm9tQ2FydChyZXF1ZXN0OiBzeW5jSXRlbVRvU2VydmVyREJSZXF1ZXN0KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChcclxuICAgICAgdGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2Uvb3JkZXIvY2FydC9yZW1vdmVgLCByZXF1ZXN0XHJcbiAgICApXHJcbiAgfVxyXG5cclxuICBib29rQXBwb2ludG1lbnQocmVxdWVzdDogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoXHJcbiAgICAgIHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL3VzZXIvdHJ5LWhvbWVgLCByZXF1ZXN0XHJcbiAgICApXHJcbiAgfVxyXG5cclxuICBjcmVhdGVFbnJvbGxtZW50U2NoZW1lKGVucm9sbGVtZW50OiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChcclxuICAgICAgYCAgaHR0cHM6Ly9zdGFnZWFwaS1vcnJhLmxldHNtb2JpbGl0eS5jb20vZW5yb2xsbWVudC9jcmVhdGUvbmV3L3RlbXA/bWFudWFsUGF5PXRydWUmaXNXZWJSZXF1ZXN0PXRydWVcclxuYCwgZW5yb2xsZW1lbnRcclxuICAgIClcclxuICB9XHJcblxyXG4gIGdldEhvbWVBcHBvaW50bWVudExpc3QodXNlcklkOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGJ1c2luZXNzSWQgPSB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnYklkJyk7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChcclxuICAgICAgdGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvdXNlci90cnktaG9tZT91c2VySWQ9JHt1c2VySWR9JmJ1c2luZXNzSWQ9JHtidXNpbmVzc0lkfWBcclxuICAgIClcclxuICB9XHJcblxyXG4gIGdldEFsbE9ycmFTY2hlbWUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChcclxuICAgICAgJ2h0dHBzOi8vc3RhZ2VhcGktb3JyYS5sZXRzbW9iaWxpdHkuY29tL3Bhc3NCb29rL3JlZGVtcHRpb24vYW1vdW50L2NoZWNrP3VzZXJDb2RlPUNfMDAwMzEzODg1J1xyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgcmVkZWVtU2NoZW1lKHNjaGVtZTogc3RyaW5nLCBjYXJ0SWQ6IGFueSwgYWN0aW9uOiBib29sZWFuKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoXHJcbiAgICAgIHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL29yZGVyL2NhcnQvcmVkZW1wdGlvbj9jYXJ0SWQ9JHtjYXJ0SWR9JnJlbW92ZVNjaGVtZT0ke2FjdGlvbn1gLCBzY2hlbWVcclxuICAgIClcclxuICB9XHJcblxyXG4gIGdldFJldmlld3NCeVByb2R1Y3RJZChwcm9kdWN0SWQ6IHN0cmluZywgcGFnZU51bWJlcjogbnVtYmVyKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChcclxuICAgICAgdGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvdXNlci9maWx0ZXIvcmV2aWV3cz9wcm9kdWN0SWQ9JHtwcm9kdWN0SWR9JnBhZ2VOdW1iZXI9JHtwYWdlTnVtYmVyfSZwYWdlU2l6ZT0zYCwge31cclxuICAgIClcclxuICB9XHJcbiAgZ2V0RmllbGRzVG9EaXNwbGF5KGZpZWxkc0xpc3Q6IGFueVtdKSB7XHJcbiAgICBsZXQgbWFwOiBhbnkgPSB7fTtcclxuXHJcbiAgICBmb3IgKGxldCBmaWVsZCBvZiBmaWVsZHNMaXN0KSB7XHJcbiAgICAgIGZvciAobGV0IGZpZWxkR3JvdXAgb2YgZmllbGQuZmllbGRHcm91cCkge1xyXG4gICAgICAgIGlmICghZmllbGRHcm91cC5maWVsZFN0ZXBJZClcclxuICAgICAgICAgIGNvbnRpbnVlO1xyXG5cclxuICAgICAgICBsZXQgc3RlcE5hbWUgPSBmaWVsZEdyb3VwLmZpZWxkU3RlcE5hbWUgPyBmaWVsZEdyb3VwLmZpZWxkU3RlcE5hbWUgOiAndW5kZWZpbmVkJztcclxuICAgICAgICBsZXQgZ3JvdXBOYW1lID0gZmllbGRHcm91cC5maWVsZEdyb3VwTmFtZTtcclxuXHJcbiAgICAgICAgaWYgKCFtYXBbc3RlcE5hbWVdKSB7XHJcbiAgICAgICAgICBtYXBbc3RlcE5hbWVdID0ge307XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghbWFwW3N0ZXBOYW1lXVtncm91cE5hbWVdKSB7XHJcbiAgICAgICAgICBtYXBbc3RlcE5hbWVdW2dyb3VwTmFtZV0gPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmllbGRbJ2ZpZWxkU3RlcElkJ10gPSBmaWVsZEdyb3VwLmZpZWxkU3RlcElkO1xyXG4gICAgICAgIGZpZWxkWydmaWVsZEdyb3VwSWQnXSA9IGZpZWxkR3JvdXAuZmllbGRHcm91cElkO1xyXG5cclxuICAgICAgICBjb25zdCBuZXdGaWVsZCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZmllbGQpKTtcclxuICAgICAgICBtYXBbc3RlcE5hbWVdW2dyb3VwTmFtZV0ucHVzaChuZXdGaWVsZCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbWFwO1xyXG4gIH1cclxuXHJcbiAgZ2V0Qm9va2luZ1Nsb3RzKHBheWxvYWQ6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQodGhpcy5BUFBPSU5UTUVOVF9VUkwgKyAnYm9va2luZy9hdmFpbGFibGUtc2xvdHMnLCBwYXlsb2FkKTtcclxuICB9XHJcbiAgZ2V0QnVzaW5lc3NBcHBvaW50bWVudFNldHRpbmdzKGJ1c2luZXNzSWQ6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5BUFBPSU5UTUVOVF9VUkwgKyBgc2VydmljZS9zZXR0aW5ncy8ke2J1c2luZXNzSWR9YCk7XHJcbiAgfVxyXG5cclxuICByZXNvbHZlQ2FydChwYXlsb2FkOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KHRoaXMuQVBQT0lOVE1FTlRfVVJMICsgJ2Jvb2tpbmcvZ3JvdXAvcmVzb2x2ZS1jYXJ0JywgcGF5bG9hZCk7XHJcbiAgfVxyXG4gIGhvbGRCb29raW5nKHBheWxvYWQ6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KHRoaXMuQVBQT0lOVE1FTlRfVVJMICsgJ2Jvb2tpbmcvZ3JvdXAvaG9sZCcsIHBheWxvYWQpO1xyXG4gIH1cclxuICBnZXRCb29raW5nR3JvdXAoZ3JvdXBJZDogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLkFQUE9JTlRNRU5UX1VSTCArIGBib29raW5nL2dyb3VwLyR7Z3JvdXBJZH1gKTtcclxuICB9XHJcbiAgZ2VuZXJhdGVQYXltZW50VG9rZW4oZ3JvdXBJZDogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QodGhpcy5BUFBPSU5UTUVOVF9VUkwgKyBgcGF5bWVudC90b2tlbj9ncm91cElkPSR7Z3JvdXBJZH1gLCB7fSk7XHJcbiAgfVxyXG4gIGNvbXBsZXRlQm9va2luZ0dyb3VwKGdyb3VwSWQ6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQodGhpcy5BUFBPSU5UTUVOVF9VUkwgKyBgYm9va2luZy9ncm91cC9jb21wbGV0ZS8ke2dyb3VwSWR9YCwge30pO1xyXG4gIH1cclxuICBnZXRNeUJvb2tpbmdzKGJ1c2luZXNzSWQ6IHN0cmluZywgdXNlcklkOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuQVBQT0lOVE1FTlRfVVJMICsgYGJvb2tpbmcvZ3JvdXAvbXk/YnVzaW5lc3NJZD0ke2J1c2luZXNzSWR9JnVzZXJJZD0ke3VzZXJJZH1gKTtcclxuICB9XHJcbiAgY2FuY2VsQm9va2luZ0dyb3VwKGdyb3VwSWQ6IHN0cmluZywgcmVhc29uPzogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBxdWVyeSA9IHJlYXNvbiA/IGA/cmVhc29uPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHJlYXNvbil9YCA6ICcnO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQodGhpcy5BUFBPSU5UTUVOVF9VUkwgKyBgYm9va2luZy9ncm91cC8ke2dyb3VwSWR9L2NhbmNlbCR7cXVlcnl9YCwge30pO1xyXG4gIH1cclxuICBnZXRDYW5jZWxsYXRpb25Qb2xpY3koYnVzaW5lc3NJZDogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLkFQUE9JTlRNRU5UX1VSTCArIGBwb2xpY3ktbWFzdGVycy8ke2J1c2luZXNzSWR9P3BvbGljeVR5cGU9Q0FOQ0VMTEFUSU9OYCk7XHJcbiAgfVxyXG4gIGdlbmVyYXRlVG9rZW4oYklkOiBhbnksIHVzZXJJZDogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QodGhpcy5QQVNTQk9PS19VUkwgKyBgZXh0L2Nvbm5lY3Qvc2ltcG8vdG9rZW4/YnVzaW5lc3NJZD0ke2JJZH0mdXNlcklkPSR7dXNlcklkfSZ1c2VyVHlwZT1FWFRFUk5BTF9VU0VSYCwge30pO1xyXG4gIH1cclxuICBnZXRBbGxFbnJvbGxlZFNjaGVtZXMocGF5bG9hZDogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dCh0aGlzLlBBU1NCT09LX1VSTCArICdleHQvY29ubmVjdC9zaW1wby9zY2hlbWUvbGlzdCcsIHBheWxvYWQpXHJcbiAgfVxyXG4gIGVucm9sbFNjaGVtZShwYXlsb2FkOiBhbnksIGNoZWNrQ2hhcmdlczogYm9vbGVhbikge1xyXG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLmdldFRva2VuKCk7XHJcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKHtcclxuICAgICAgJ0F1dGhvcml6YXRpb24nOiBgQmVhcmVyICR7dG9rZW59YFxyXG4gICAgfSk7XHJcbiAgICBpZiAoY2hlY2tDaGFyZ2VzKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdCh0aGlzLlBBU1NCT09LX1VSTCArICdwYXNzYm9vay9jYXJ0L2luaXRpYXRlL3BheW1lbnQ/bWFudWFsUGF5PXRydWUnLCBwYXlsb2FkLCB7IGhlYWRlcnM6IGhlYWRlcnMgfSlcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QodGhpcy5QQVNTQk9PS19VUkwgKyAncGFzc2Jvb2svaW5pdGlhdGUvcGF5bWVudD9tYW51YWxQYXk9dHJ1ZScsIHBheWxvYWQsIHsgaGVhZGVyczogaGVhZGVycyB9KVxyXG4gICAgfVxyXG4gIH1cclxuICBnZXRCZW5lZml0U2xhYihwYXNzYm9va0lkPzogYW55KSB7XHJcbiAgICBjb25zdCB0b2tlbiA9IHRoaXMuZ2V0VG9rZW4oKTtcclxuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xyXG4gICAgICAnQXV0aG9yaXphdGlvbic6IGBCZWFyZXIgJHt0b2tlbn1gXHJcbiAgICB9KTtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdCh0aGlzLlBBU1NCT09LX1VSTCArIGBwYXNzYm9vay9iZW5lZml0L3BlcmNlbnRhZ2VzP3Bhc3Nib29rSWQ9JHtwYXNzYm9va0lkfWAsIHt9LCB7IGhlYWRlcnM6IGhlYWRlcnMgfSlcclxuICB9XHJcbiAgZ2V0QWxsU3RhZmZMaXN0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5CQVNFX1VSTCArIGBzdGFmZi9zdGFmZi9saXN0LyR7dGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2J1c2luZXNzSWQnKX0/aXNQYWdpbmF0aW9uPWZhbHNlYClcclxuICB9XHJcbiAgcmVxdWVzdFJlZGVlbXB0aW9uKHBhc3Nib29rSWQ6IGFueSkge1xyXG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLmdldFRva2VuKCk7XHJcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKHtcclxuICAgICAgJ0F1dGhvcml6YXRpb24nOiBgQmVhcmVyICR7dG9rZW59YFxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dCh0aGlzLlBBU1NCT09LX1VSTCArIGBwYXNzYm9vay9yZXF1ZXN0L3JlZGVtcHRpb24/cGFzc0Jvb2tJZD0ke3Bhc3Nib29rSWR9YCwge30sIHsgaGVhZGVyczogaGVhZGVycyB9KVxyXG4gIH1cclxuICBQYXNzYm9va0FwcFN0YXR1cyhiSWQ6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5CQVNFX1VSTCArIGBhcHAvYXBwL2NoZWNrLWFwcD9idXNpbmVzc0lkPSR7YklkfSZhcHBOYW1lPVBhc3Nib29rYClcclxuICB9XHJcbiAgY2hlY2tBcHBJbnN0YWxsZWQoYklkOiBhbnksIGFwcE5hbWU6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5CQVNFX1VSTCArIGBhcHAvYXBwL2NoZWNrLWFwcD9idXNpbmVzc0lkPSR7YklkfSZhcHBOYW1lPSR7YXBwTmFtZX1gKVxyXG4gIH1cclxuICBnZXRSZWRlZW1Qb2ludHMoYklkOiBhbnksIHVzZXJJZDogYW55LCBldmV0VHlwZTogc3RyaW5nLCBvcmRlclZhbHVlOiBhbnksIHJld2FyZFBvaW50czogYm9vbGVhbikge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXHJcbiAgICAgIHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL2FwaS9yZWZlcnJhbHMvYXZhaWxhYmxlLWFtb3VudD9idXNpbmVzc0lkPSR7YklkfSZ1c2VySWQ9JHt1c2VySWR9JmV2ZW50VHlwZT0ke2V2ZXRUeXBlfSZvcmRlclZhbHVlPSR7b3JkZXJWYWx1ZX0mcmV3YXJkUG9pbnRzPSR7cmV3YXJkUG9pbnRzfWBcclxuICAgIClcclxuICB9XHJcbiAgcGF5bWVudFdpdGhDb21wbGV0ZVBvaW50cyhjYXJ0SWQ6IGFueSwgZGF0YTogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoXHJcbiAgICAgIHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL29yZGVyL29yZGVyL3Jld2FyZHM/Y2FydElkPSR7Y2FydElkfWAsIGRhdGFcclxuICAgIClcclxuICB9XHJcblxyXG4gIGdldEFsbFBhc3Nib29rRHVlcyhiSWQ6IGFueSwgdXNlcklkOiBhbnkpIHtcclxuICAgIGNvbnN0IHRva2VuID0gdGhpcy5nZXRUb2tlbigpO1xyXG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycyh7XHJcbiAgICAgICdBdXRob3JpemF0aW9uJzogYEJlYXJlciAke3Rva2VufWBcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5QQVNTQk9PS19VUkwgKyBgcGFzc2Jvb2svcGF5bWVudC9kdWVzP3BhZ2U9MCZzaXplPTEwMDAmYnVzaW5lc3NJZD0ke2JJZH0mdXNlcklkPSR7dXNlcklkfWAsIHsgaGVhZGVyczogaGVhZGVycyB9KVxyXG4gIH1cclxuICBnZXRUb2tlbigpIHtcclxuICAgIGxldCB0b2tlbiA9IHRoaXMuY29va2llU2VydmljZS5nZXQoJ3Bhc3NCb29rVG9rZW4nKVxyXG4gICAgcmV0dXJuIHRva2VuO1xyXG4gIH1cclxuICBnZXRBbGxUcmFuc2FjdGlvbnMocGF5bG9hZDogYW55KSB7XHJcbiAgICBjb25zdCB0b2tlbiA9IHRoaXMuZ2V0VG9rZW4oKTtcclxuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xyXG4gICAgICAnQXV0aG9yaXphdGlvbic6IGBCZWFyZXIgJHt0b2tlbn1gXHJcbiAgICB9KTtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KHRoaXMuUEFTU0JPT0tfVVJMICsgYGRhc2hib2FyZC92My90cmFuc2FjdGlvbnMvcGFnZWAsIHBheWxvYWQsIHsgaGVhZGVyczogaGVhZGVycyB9KVxyXG4gIH1cclxuICBnZXRTY2hlbWVEZXRhaWxzKHNjaGVtZUlkOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdCh0aGlzLlBBU1NCT09LX1VSTCArIGBleHQvY29ubmVjdC9zaW1wby9nZXQvc2NoZW1lP2lkPSR7c2NoZW1lSWR9YCwge30pXHJcbiAgfVxyXG5cclxuICBnZXRNZXRhbFByaWNlKHN0b3JlSWQ6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5QQVNTQk9PS19VUkwgKyBgZXh0L2Nvbm5lY3Qvc2ltcG8vbWV0YWwvcHJpY2VzP2lkPSR7c3RvcmVJZH1gKVxyXG4gIH1cclxuXHJcbiAgY3JlYXRlTGVhZChwYXlsb2FkOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdCh0aGlzLkJBU0VfVVJMICsgYGJ1c2luZXNzL2NvbnRhY3RgLCBwYXlsb2FkKVxyXG4gIH1cclxuICBnZXRBcHBvaW50bWVudFBheW1lbnRTdGF0dXMob3JkZXJJZDogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLkFQUE9JTlRNRU5UX1VSTCArIGBwYXltZW50L3ZlcmlmeS9zdGF0dXM/b3JkZXJJZD0ke29yZGVySWR9YClcclxuICB9XHJcbiAgZ2V0T3RwRm9yTG9naW4ocGF5bG9hZDogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dCh0aGlzLkJBU0VfVVJMICsgYGVjb21tZXJjZS91c2VyL2dlbmVyYXRlLW90cGAsIHBheWxvYWQpXHJcbiAgfVxyXG5cclxuICAvKiogTmV3IE9UUCBBUEk6IFBVVCAvZWNvbW1lcmNlL3VzZXIvYXV0aC9zZW5kLW90cFxyXG4gICAqICBCb2R5OiB7IGlkZW50aWZpZXIsIGJ1c2luZXNzSWQgfVxyXG4gICAqICBSZXNwb25zZTogeyBkYXRhOiB7IGlzRXhpc3RpbmdVc2VyOiBib29sZWFuLCBtZXNzYWdlOiBzdHJpbmcgfSB9XHJcbiAgICovXHJcbiAgc2VuZE90cFYyKGlkZW50aWZpZXI6IHN0cmluZywgYnVzaW5lc3NJZDogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dCh0aGlzLkJBU0VfVVJMICsgYGVjb21tZXJjZS91c2VyL2F1dGgvc2VuZC1vdHBgLCB7IGlkZW50aWZpZXIsIGJ1c2luZXNzSWQgfSk7XHJcbiAgfVxyXG5cclxuICB2ZXJpZnlPdHBWMihwYXlsb2FkOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL3VzZXIvYXV0aC92ZXJpZnktb3RwYCwgcGF5bG9hZCk7XHJcbiAgfVxyXG5cclxuICBjb21wbGV0ZVNpZ251cFYyKHBheWxvYWQ6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQodGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvdXNlci9hdXRoL2NvbXBsZXRlLXNpZ251cGAsIHBheWxvYWQpO1xyXG4gIH1cclxuXHJcbiAgbG9naW5XaXRoUGFzc3dvcmROZXcocGF5bG9hZDogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dCh0aGlzLkJBU0VfVVJMICsgYGVjb21tZXJjZS91c2VyL2F1dGgvbG9naW4tcGFzc3dvcmRgLCBwYXlsb2FkKTtcclxuICB9XHJcblxyXG4gIGZsdXNoKGV2ZW50c1RvU2VuZDogYW55KSB7XHJcbiAgICB0aGlzLmh0dHAucG9zdCh0aGlzLkJBU0VfVVJMICsgJ2Vjb21tZXJjZS9hbmFseXRpY3MvYmF0Y2gnLCBldmVudHNUb1NlbmQpXHJcbiAgICAgIC5zdWJzY3JpYmUoeyBlcnJvcjogKCkgPT4geyB9IH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0UG9wdWxhclNlYXJjaGVzKCkge1xyXG4gICAgY29uc3QgYnVzaW5lc3NJZCA9IHRoaXMuc3RvcmFnZS5nZXRJdGVtKFwiYklkXCIpID8/IHRoaXMuc3RvcmFnZS5nZXRJdGVtKFwiYnVzaW5lc3NJZFwiKSA/PyBcIjFmMTIxMDgxLWRiZWEtNjVjNi1hZDg5LTFkZmU4Y2RkYTkwMlwiO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvaW52ZW50b3J5L3BvcHVsYXItc2VhcmNoZXM/YnVzaW5lc3NJZD0ke2J1c2luZXNzSWR9YClcclxuICB9XHJcblxyXG4gIGdldE1lbnVJdGVtcyhtZW51SWQ6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvbWVudS8ke21lbnVJZH1gKTtcclxuICB9XHJcblxyXG4gIC8vIGdldEhvbWVSZWNvbW1lbmRhdGlvbnMoYnVzaW5lc3NJZDogYW55LCBVc2VySWQ6IGFueSkge1xyXG4gIC8vICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5SRUNPTU1FTkRBVElPTl9VUkwgKyBgYXBpL3YxL3JlY29tbWVuZGF0aW9ucy8ke1VzZXJJZH0vaG9tZT9idXNpbmVzc0lkPSR7YnVzaW5lc3NJZH0mcGFnZT0xJnBhZ2VTaXplPTIwYClcclxuICAvLyB9XHJcblxyXG4gIC8vIGdldENhcnRSZWNvbW1lbmRhdGlvbnMoYnVzaW5lc3NJZDogYW55LCBVc2VySWQ6IGFueSkge1xyXG4gIC8vICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5SRUNPTU1FTkRBVElPTl9VUkwgKyBgYXBpL3YxL3JlY29tbWVuZGF0aW9ucy8ke1VzZXJJZH0vY2FydD9idXNpbmVzc0lkPSR7YnVzaW5lc3NJZH0mcGFnZT0xJnBhZ2VTaXplPTE1YClcclxuICAvLyB9XHJcblxyXG4gIC8vIGdldFByb2R1Y3REZXNjcmlwdGlvblJlY29tbWVuZGF0aW9ucyhidXNpbmVzc0lkOiBhbnksIFVzZXJJZDogYW55KSB7XHJcbiAgLy8gICByZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLlJFQ09NTUVOREFUSU9OX1VSTCArIGBhcGkvdjEvcmVjb21tZW5kYXRpb25zLyR7VXNlcklkfS9wZHA/YnVzaW5lc3NJZD0ke2J1c2luZXNzSWR9JnBhZ2U9MSZwYWdlU2l6ZT0xMGApXHJcbiAgLy8gfVxyXG59XHJcbiJdfQ==