tas-uell-sdk 0.1.2 → 0.1.3
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.
- package/README.md +7 -1
- package/esm2020/lib/components/tas-btn/tas-btn.component.mjs +2 -2
- package/esm2020/lib/components/tas-incoming-appointment/tas-incoming-appointment.component.mjs +41 -28
- package/esm2020/lib/components/tas-videocall/tas-videocall.component.mjs +3 -3
- package/esm2020/lib/interfaces/tas.interfaces.mjs +2 -1
- package/esm2020/lib/services/tas.service.mjs +12 -2
- package/fesm2015/tas-uell-sdk.mjs +55 -31
- package/fesm2015/tas-uell-sdk.mjs.map +1 -1
- package/fesm2020/tas-uell-sdk.mjs +55 -31
- package/fesm2020/tas-uell-sdk.mjs.map +1 -1
- package/lib/components/tas-incoming-appointment/tas-incoming-appointment.component.d.ts +15 -6
- package/lib/interfaces/tas.interfaces.d.ts +7 -1
- package/package.json +1 -1
|
@@ -348,7 +348,17 @@ export class TasService {
|
|
|
348
348
|
* @returns Observable of appointment array
|
|
349
349
|
*/
|
|
350
350
|
getAppointments(params) {
|
|
351
|
-
|
|
351
|
+
// Normalize dates to YYYY-MM-DD format (handles ISO timestamps like 2026-01-15T03:00:00.000+0000)
|
|
352
|
+
const normalizeDate = (date) => date.split('T')[0];
|
|
353
|
+
const fromDate = normalizeDate(params.fromDate);
|
|
354
|
+
const toDate = normalizeDate(params.toDate);
|
|
355
|
+
let url;
|
|
356
|
+
// If dates are the same, use only initDate
|
|
357
|
+
// if (fromDate === toDate) {
|
|
358
|
+
// url = `v2/proxy/appointment/agendas/user/appointments?fromDate=${fromDate}&roomType=TAS`;
|
|
359
|
+
// } else {
|
|
360
|
+
url = `v2/proxy/appointment/agendas/user/appointments?fromDate=${fromDate}&toDate=${toDate}&roomType=TAS`;
|
|
361
|
+
// }
|
|
352
362
|
if (params.entityId !== undefined) {
|
|
353
363
|
url += `&entityId=${params.entityId}`;
|
|
354
364
|
}
|
|
@@ -607,4 +617,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
|
|
|
607
617
|
type: Inject,
|
|
608
618
|
args: [TAS_CONFIG]
|
|
609
619
|
}] }, { type: i1.TasUtilityService }]; } });
|
|
610
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YXMtdWVsbC1zZGsvc3JjL2xpYi9zZXJ2aWNlcy90YXMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQUUsZUFBZSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakQsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0QyxPQUFPLEVBUUwsY0FBYyxFQUNkLGNBQWMsRUFFZCxlQUFlLEVBRWYsU0FBUyxFQUNULFFBQVEsR0FJVCxNQUFNLDhCQUE4QixDQUFDO0FBQ3RDLE9BQU8sRUFDTCxVQUFVLEVBQ1YsZUFBZSxHQUdoQixNQUFNLHNCQUFzQixDQUFDOzs7QUFFOUIsNkNBQTZDO0FBQzdDLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLENBQUM7QUFNaEYsTUFBTSxPQUFPLFVBQVU7SUE2RHJCLFlBQ21DLFVBQXlCLEVBQzlCLE1BQWlCLEVBQ3JDLGlCQUFvQztRQUZYLGVBQVUsR0FBVixVQUFVLENBQWU7UUFDOUIsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQUNyQyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBL0R0QyxZQUFPLEdBQXNCLElBQUksQ0FBQztRQUNsQyxjQUFTLEdBQXdCLElBQUksQ0FBQztRQUN0QyxnQkFBVyxHQUFvQixFQUFFLENBQUM7UUFFbEMscUJBQWdCLEdBQUcsSUFBSSxlQUFlLENBQVksU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25FLGVBQVUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxFQUFF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WUFDOUQsWUFBWSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3RELE9BQU87U0FDUjtRQUVELHVDQUF1QztRQUN2QyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFO1lBQzNCLFlBQVksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUNsRDtJQUNILENBQUM7SUFFRDs7T0FFRztJQUNJLHNCQUFzQjtRQUMzQixJQUFJLENBQUMsaUJBQWlCLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsZUFBZSxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFDOUMsQ0FBQzs7d0dBanZCVSxVQUFVLGtCQThEWCxlQUFlLGFBQ2YsVUFBVTs0R0EvRFQsVUFBVSxjQUhULE1BQU07NEZBR1AsVUFBVTtrQkFKdEIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQWdFSSxNQUFNOzJCQUFDLGVBQWU7OzBCQUN0QixNQUFNOzJCQUFDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRhc1V0aWxpdHlTZXJ2aWNlIH0gZnJvbSAnLi90YXMtdXRpbGl0eS5zZXJ2aWNlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0ICogYXMgT1QgZnJvbSAnQG9wZW50b2svY2xpZW50JztcbmltcG9ydCB7XG4gIEdlbmVyYXRlVG9rZW5SZXNwb25zZSxcbiAgU3RhcnRTZXNzaW9uUmVxdWVzdCxcbiAgRmluaXNoU2Vzc2lvblJlc3BvbnNlLFxuICBQcm94eVZpZGVvU3RhdHVzUmVxdWVzdCxcbiAgUHJveHlWaWRlb1N0YXR1c1Jlc3BvbnNlLFxuICBQcm94eVZpZGVvRmluaXNoUmVxdWVzdCxcbiAgUHJveHlWaWRlb1VzZXJNb2RpZnlSZXF1ZXN0LFxuICBVc2VyQ2FsbEFjdGlvbixcbiAgUm9vbVVzZXJTdGF0dXMsXG4gIFRhc0N1cnJlbnRVc2VyLFxuICBUYXNCdXNpbmVzc1JvbGUsXG4gIFRhc1VzZXJSb2xlLFxuICBDYWxsU3RhdGUsXG4gIFZpZXdNb2RlLFxuICBXYWl0aW5nUm9vbVVzZXIsXG4gIFRhc0FwcG9pbnRtZW50LFxuICBHZXRBcHBvaW50bWVudHNSZXF1ZXN0LFxufSBmcm9tICcuLi9pbnRlcmZhY2VzL3Rhcy5pbnRlcmZhY2VzJztcbmltcG9ydCB7XG4gIFRBU19DT05GSUcsXG4gIFRBU19IVFRQX0NMSUVOVCxcbiAgVGFzQ29uZmlnLFxuICBUYXNIdHRwQ2xpZW50LFxufSBmcm9tICcuLi9jb25maWcvdGFzLmNvbmZpZyc7XG5cbi8vIFJlLWV4cG9ydCBlbnVtcyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuZXhwb3J0IHsgQ2FsbFN0YXRlLCBWaWV3TW9kZSwgVGFzQnVzaW5lc3NSb2xlLCBVc2VyQ2FsbEFjdGlvbiwgUm9vbVVzZXJTdGF0dXMgfTtcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuICBcbmV4cG9ydCBjbGFzcyBUYXNTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBzZXNzaW9uOiBPVC5TZXNzaW9uIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgcHVibGlzaGVyOiBPVC5QdWJsaXNoZXIgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBzdWJzY3JpYmVyczogT1QuU3Vic2NyaWJlcltdID0gW107XG5cbiAgcHJpdmF0ZSBjYWxsU3RhdGVTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDYWxsU3RhdGU+KENhbGxTdGF0ZS5JRExFKTtcbiAgcHVibGljIGNhbGxTdGF0ZSQgPSB0aGlzLmNhbGxTdGF0ZVN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgcHJpdmF0ZSB2aWV3TW9kZVN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFZpZXdNb2RlPihWaWV3TW9kZS5GVUxMU0NSRUVOKTtcbiAgcHVibGljIHZpZXdNb2RlJCA9IHRoaXMudmlld01vZGVTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIHByaXZhdGUgaXNNdXRlZFN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHVibGljIGlzTXV0ZWQkID0gdGhpcy5pc011dGVkU3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICAvLyBTZXNzaW9uIGluZm8gZm9yIFBpUCBtb2RlIHJlc3RvcmF0aW9uXG4gIHByaXZhdGUgY3VycmVudFNlc3Npb25JZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgY3VycmVudFRva2VuOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSByZWFkb25seSBTVE9SQUdFX0tFWSA9ICd0YXNfc2Vzc2lvbl9zdGF0ZSc7XG4gIHByaXZhdGUgcmVhZG9ubHkgRElTQ09OTkVDVEVEX0ZMQUdfS0VZID0gJ3Rhc19zZXNzaW9uX2Rpc2Nvbm5lY3RlZCc7XG4gIHByaXZhdGUgaXNGaW5pc2hpbmdTZXNzaW9uOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLy8gUHJveHktdmlkZW8gY2lyY3VpdCBzdGF0ZVxuICBwcml2YXRlIHByb3h5VmlkZW9TZXNzaW9uSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHByb3h5VmlkZW9Ub2tlbjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgY3VycmVudEJ1c2luZXNzUm9sZTogVGFzQnVzaW5lc3NSb2xlID0gVGFzQnVzaW5lc3NSb2xlLlVTRVI7XG5cbiAgLy8gV2FpdGluZyByb29tIGFuZCBzdGF0dXMgcG9sbGluZ1xuICBwcml2YXRlIHdhaXRpbmdSb29tVXNlcnNTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxXYWl0aW5nUm9vbVVzZXJbXT4oW10pO1xuICBwdWJsaWMgd2FpdGluZ1Jvb21Vc2VycyQgPSB0aGlzLndhaXRpbmdSb29tVXNlcnNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIHByaXZhdGUgb3duZXJIYXNKb2luZWRTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHB1YmxpYyBvd25lckhhc0pvaW5lZCQgPSB0aGlzLm93bmVySGFzSm9pbmVkU3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICAvLyBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgdHJ1ZSB3aGVuIG93bmVyIHdhcyBwcmVzZW50IGJ1dCB0aGVuIGxlZnRcbiAgcHJpdmF0ZSBvd25lckhhc0xlZnRTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHB1YmxpYyBvd25lckhhc0xlZnQkID0gdGhpcy5vd25lckhhc0xlZnRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIHByaXZhdGUgam9pbmFibGVTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHB1YmxpYyBqb2luYWJsZSQgPSB0aGlzLmpvaW5hYmxlU3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICAvLyBPYnNlcnZhYmxlIGZvciB3aGVuIGJhY2tlbmQgcmVxdWVzdHMgZ2VvbG9jYXRpb24gYWN0aXZhdGlvblxuICBwcml2YXRlIGFjdGl2YXRlR2VvU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwdWJsaWMgYWN0aXZhdGVHZW8kID0gdGhpcy5hY3RpdmF0ZUdlb1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgLy8gT2JzZXJ2YWJsZSBmb3Igd2hlbiBnZW8gcmVxdWVzdCBpcyBhY3RpdmUgKG93bmVyIHdhaXRpbmcgZm9yIHVzZXIgcmVzcG9uc2UpXG4gIHByaXZhdGUgZ2VvUmVxdWVzdEFjdGl2ZVN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHVibGljIGdlb1JlcXVlc3RBY3RpdmUkID0gdGhpcy5nZW9SZXF1ZXN0QWN0aXZlU3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICAvLyBPYnNlcnZhYmxlIGZvciB3aGVuIGFsbCBnZW8gaGFzIGJlZW4gZ3JhbnRlZFxuICBwcml2YXRlIGFsbEdlb0dyYW50ZWRTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHB1YmxpYyBhbGxHZW9HcmFudGVkJCA9IHRoaXMuYWxsR2VvR3JhbnRlZFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgcHJpdmF0ZSBzdGF0dXNQb2xsaW5nSW50ZXJ2YWw6IFJldHVyblR5cGU8dHlwZW9mIHNldEludGVydmFsPiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHJlYWRvbmx5IERFRkFVTFRfUE9MTF9JTlRFUlZBTF9NUyA9IDMwMDAwOyAvLyBEZWZhdWx0IDMwc1xuICBwcml2YXRlIHdhc093bmVyUHJlc2VudCA9IGZhbHNlO1xuXG4gIC8vIEN1cnJlbnQgY2FsbCBjb250ZXh0XG4gIHByaXZhdGUgY3VycmVudEFwcG9pbnRtZW50SWQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGN1cnJlbnRWaWRlb0NhbGxJZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgY3VycmVudFRlbmFudDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChUQVNfSFRUUF9DTElFTlQpIHByaXZhdGUgaHR0cENsaWVudDogVGFzSHR0cENsaWVudCxcbiAgICBASW5qZWN0KFRBU19DT05GSUcpIHByaXZhdGUgY29uZmlnOiBUYXNDb25maWcsXG4gICAgcHJpdmF0ZSB0YXNVdGlsaXR5U2VydmljZTogVGFzVXRpbGl0eVNlcnZpY2VcbiAgKSB7fVxuXG4gIC8vIC4uLiAoR2V0dGVycyBhbmQgb3RoZXIgbWV0aG9kcyByZW1haW4gdW5jaGFuZ2VkKVxuXG4gIC8qKlxuICAgKiBTdGFydCBhdXRvbWF0aWMgc3RhdHVzIHBvbGxpbmcgZm9yIHRoZSBjdXJyZW50IHNlc3Npb24uXG4gICAqIFN0YXR1cyBpcyBwb2xsZWQgZXZlcnkgaW50ZXJ2YWxNcyAoZGVmYXVsdCAzMHMpLlxuICAgKi9cbiAgcHVibGljIHN0YXJ0U3RhdHVzUG9sbGluZyhcbiAgICBwYXJhbXM6IFByb3h5VmlkZW9TdGF0dXNSZXF1ZXN0LCBcbiAgICBpbnRlcnZhbE1zOiBudW1iZXIgPSB0aGlzLkRFRkFVTFRfUE9MTF9JTlRFUlZBTF9NU1xuICApOiB2b2lkIHtcbiAgICB0aGlzLnN0b3BTdGF0dXNQb2xsaW5nKCk7IC8vIENsZWFyIGFueSBleGlzdGluZyBwb2xsaW5nXG5cbiAgICAvLyBTdG9yZSBjb250ZXh0IGZvciBwb2xsaW5nXG4gICAgaWYgKHBhcmFtcy5zZXNzaW9uSWQpIHtcbiAgICAgIHRoaXMuY3VycmVudFNlc3Npb25JZCA9IHBhcmFtcy5zZXNzaW9uSWQ7XG4gICAgfVxuICAgIGlmIChwYXJhbXMuYXBwb2ludG1lbnRJZCkge1xuICAgICAgdGhpcy5jdXJyZW50QXBwb2ludG1lbnRJZCA9IHBhcmFtcy5hcHBvaW50bWVudElkO1xuICAgIH1cbiAgICBpZiAocGFyYW1zLnRlbmFudCkge1xuICAgICAgdGhpcy5jdXJyZW50VGVuYW50ID0gcGFyYW1zLnRlbmFudDtcbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZyhgW1RBUyBERUJVR10gU3RhcnRpbmcgc3RhdHVzIHBvbGxpbmcgd2l0aCBpbnRlcnZhbCAke2ludGVydmFsTXN9bXNgKTtcblxuICAgIC8vIEluaXRpYWwgc3RhdHVzIGZldGNoXG4gICAgdGhpcy5mZXRjaEFuZFByb2Nlc3NTdGF0dXMocGFyYW1zKTtcblxuICAgIC8vIFNldCB1cCBwZXJpb2RpYyBwb2xsaW5nXG4gICAgdGhpcy5zdGF0dXNQb2xsaW5nSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICB0aGlzLmZldGNoQW5kUHJvY2Vzc1N0YXR1cyhwYXJhbXMpO1xuICAgIH0sIGludGVydmFsTXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0b3AgYXV0b21hdGljIHN0YXR1cyBwb2xsaW5nLlxuICAgKi9cbiAgcHVibGljIHN0b3BTdGF0dXNQb2xsaW5nKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnN0YXR1c1BvbGxpbmdJbnRlcnZhbCkge1xuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLnN0YXR1c1BvbGxpbmdJbnRlcnZhbCk7XG4gICAgICB0aGlzLnN0YXR1c1BvbGxpbmdJbnRlcnZhbCA9IG51bGw7XG4gICAgfVxuICAgIC8vIERvIE5PVCByZXNldCB3YWl0aW5nIHJvb20gc3RhdGUgaGVyZSwgYXMgb3RoZXIgY29tcG9uZW50cyBtaWdodCBvYnNlcnZlIGl0XG4gIH1cblxuICAvKipcbiAgICogUmVzZXQgcG9sbGluZyBzdGF0ZSAod2FpdGluZyByb29tLCBvd25lciBzdGF0dXMsIGV0YylcbiAgICogQ2FsbCB0aGlzIHdoZW4gY29tcGxldGVseSBleGl0aW5nIHRoZSBmbG93XG4gICAqL1xuICBwdWJsaWMgcmVzZXRQb2xsaW5nU3RhdGUoKTogdm9pZCB7XG4gICAgdGhpcy5zdG9wU3RhdHVzUG9sbGluZygpO1xuICAgIHRoaXMud2FpdGluZ1Jvb21Vc2Vyc1N1YmplY3QubmV4dChbXSk7XG4gICAgdGhpcy5vd25lckhhc0pvaW5lZFN1YmplY3QubmV4dChmYWxzZSk7XG4gICAgdGhpcy5vd25lckhhc0xlZnRTdWJqZWN0Lm5leHQoZmFsc2UpO1xuICAgIHRoaXMuam9pbmFibGVTdWJqZWN0Lm5leHQoZmFsc2UpO1xuICAgIHRoaXMud2FzT3duZXJQcmVzZW50ID0gZmFsc2U7XG4gIH1cblxuICAvLyBHZXR0ZXJzXG4gIHB1YmxpYyBnZXQgY3VycmVudFNlc3Npb24oKTogT1QuU2Vzc2lvbiB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLnNlc3Npb247XG4gIH1cblxuICBwdWJsaWMgZ2V0IGN1cnJlbnRQdWJsaXNoZXIoKTogT1QuUHVibGlzaGVyIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMucHVibGlzaGVyO1xuICB9XG5cbiAgcHVibGljIGdldCBjdXJyZW50U3Vic2NyaWJlcnMoKTogT1QuU3Vic2NyaWJlcltdIHtcbiAgICByZXR1cm4gdGhpcy5zdWJzY3JpYmVycztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc2Vzc2lvbklkKCk6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRTZXNzaW9uSWQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHRva2VuKCk6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRUb2tlbjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcHJveHlTZXNzaW9uSWQoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMucHJveHlWaWRlb1Nlc3Npb25JZDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcHJveHlUb2tlbigpOiBzdHJpbmcgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5wcm94eVZpZGVvVG9rZW47XG4gIH1cblxuICBwdWJsaWMgZ2V0IGJ1c2luZXNzUm9sZSgpOiBUYXNCdXNpbmVzc1JvbGUge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRCdXNpbmVzc1JvbGU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlzTXV0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNNdXRlZFN1YmplY3QuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIC8vIFZpZXcgTW9kZSBNZXRob2RzXG4gIHB1YmxpYyBzZXRWaWV3TW9kZShtb2RlOiBWaWV3TW9kZSk6IHZvaWQge1xuICAgIHRoaXMudmlld01vZGVTdWJqZWN0Lm5leHQobW9kZSk7XG4gICAgaWYgKHRoaXMuY3VycmVudFNlc3Npb25JZCAmJiB0aGlzLmN1cnJlbnRUb2tlbikge1xuICAgICAgdGhpcy5zYXZlU2Vzc2lvblN0YXRlKFxuICAgICAgICB0aGlzLmN1cnJlbnRTZXNzaW9uSWQsXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLFxuICAgICAgICBtb2RlLFxuICAgICAgICB0aGlzLmN1cnJlbnRCdXNpbmVzc1JvbGVcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGVudGVyUGlwTW9kZSgpOiB2b2lkIHtcbiAgICB0aGlzLnZpZXdNb2RlU3ViamVjdC5uZXh0KFZpZXdNb2RlLlBJUCk7XG4gICAgaWYgKHRoaXMuY3VycmVudFNlc3Npb25JZCAmJiB0aGlzLmN1cnJlbnRUb2tlbikge1xuICAgICAgdGhpcy5zYXZlU2Vzc2lvblN0YXRlKFxuICAgICAgICB0aGlzLmN1cnJlbnRTZXNzaW9uSWQsXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLFxuICAgICAgICBWaWV3TW9kZS5QSVAsXG4gICAgICAgIHRoaXMuY3VycmVudEJ1c2luZXNzUm9sZVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZXhpdFBpcE1vZGUoKTogdm9pZCB7XG4gICAgdGhpcy52aWV3TW9kZVN1YmplY3QubmV4dChWaWV3TW9kZS5GVUxMU0NSRUVOKTtcbiAgICBpZiAodGhpcy5jdXJyZW50U2Vzc2lvbklkICYmIHRoaXMuY3VycmVudFRva2VuKSB7XG4gICAgICB0aGlzLnNhdmVTZXNzaW9uU3RhdGUoXG4gICAgICAgIHRoaXMuY3VycmVudFNlc3Npb25JZCxcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4sXG4gICAgICAgIFZpZXdNb2RlLkZVTExTQ1JFRU4sXG4gICAgICAgIHRoaXMuY3VycmVudEJ1c2luZXNzUm9sZVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaXNQaXBNb2RlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnZpZXdNb2RlU3ViamVjdC5nZXRWYWx1ZSgpID09PSBWaWV3TW9kZS5QSVA7XG4gIH1cblxuICAvLyBBdWRpbyBDb250cm9sXG4gIHB1YmxpYyB0b2dnbGVNdXRlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnB1Ymxpc2hlcikge1xuICAgICAgY29uc3QgbmV3TXV0ZVN0YXRlID0gIXRoaXMuaXNNdXRlZFN1YmplY3QuZ2V0VmFsdWUoKTtcbiAgICAgIGNvbnN0IHNob3VsZEVuYWJsZUF1ZGlvID0gIW5ld011dGVTdGF0ZTtcblxuICAgICAgLy8gVXNlIE9wZW5Ub2sncyBwdWJsaXNoQXVkaW9cbiAgICAgIHRoaXMucHVibGlzaGVyLnB1Ymxpc2hBdWRpbyhzaG91bGRFbmFibGVBdWRpbyk7XG5cbiAgICAgIC8vIEFsc28gZGlyZWN0bHkgY29udHJvbCB0aGUgTWVkaWFTdHJlYW1UcmFjayBhcyBiYWNrdXBcbiAgICAgIGNvbnN0IGF1ZGlvVHJhY2sgPSB0aGlzLnB1Ymxpc2hlci5nZXRBdWRpb1NvdXJjZT8uKCk7XG4gICAgICBpZiAoYXVkaW9UcmFjaykge1xuICAgICAgICBhdWRpb1RyYWNrLmVuYWJsZWQgPSBzaG91bGRFbmFibGVBdWRpbztcbiAgICAgIH1cblxuICAgICAgdGhpcy5pc011dGVkU3ViamVjdC5uZXh0KG5ld011dGVTdGF0ZSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNldE11dGUobXV0ZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5wdWJsaXNoZXIpIHtcbiAgICAgIHRoaXMucHVibGlzaGVyLnB1Ymxpc2hBdWRpbyghbXV0ZWQpO1xuICAgICAgdGhpcy5pc011dGVkU3ViamVjdC5uZXh0KG11dGVkKTtcbiAgICB9XG4gIH1cblxuICAvLyBTZXNzaW9uIE1hbmFnZW1lbnRcbiAgcHVibGljIGRpc2Nvbm5lY3RTZXNzaW9uKGNsZWFyU3RvcmFnZTogYm9vbGVhbiA9IHRydWUpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgICdbVEFTIERFQlVHXSBUYXNTZXJ2aWNlLmRpc2Nvbm5lY3RTZXNzaW9uIGNhbGxlZC4gY2xlYXJTdG9yYWdlOicsXG4gICAgICBjbGVhclN0b3JhZ2VcbiAgICApO1xuXG4gICAgLy8gQ2FsbCBmaW5pc2hTZXNzaW9uIGJlZm9yZSBkaXNjb25uZWN0aW5nIGlmIHdlIGhhdmUgYSBzZXNzaW9uSWRcbiAgICBjb25zdCBzZXNzaW9uSWRUb0ZpbmlzaCA9IHRoaXMuY3VycmVudFNlc3Npb25JZDtcblxuICAgIC8vIENsZWFyIHN0b3JhZ2UgRklSU1QgdG8gcHJldmVudCBhbnkgcmFjZSBjb25kaXRpb25zIHdoZXJlIHN0YXRlIG1pZ2h0IGJlIHNhdmVkIGFmdGVyIGRpc2Nvbm5lY3RcbiAgICBpZiAoY2xlYXJTdG9yYWdlKSB7XG4gICAgICB0aGlzLmNsZWFyU2Vzc2lvblN0YXRlKCk7XG4gICAgICAvLyBTZXQgYSBmbGFnIHRvIGluZGljYXRlIHRoaXMgc2Vzc2lvbiB3YXMgaW50ZW50aW9uYWxseSBkaXNjb25uZWN0ZWRcbiAgICAgIC8vIFRoaXMgcHJldmVudHMgcmVjb25uZWN0aW9uIG9uIHBhZ2UgcmVsb2FkXG4gICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKHRoaXMuRElTQ09OTkVDVEVEX0ZMQUdfS0VZLCAndHJ1ZScpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNlc3Npb24pIHtcbiAgICAgIHRoaXMuc2Vzc2lvbi5kaXNjb25uZWN0KCk7XG4gICAgICB0aGlzLnNlc3Npb24gPSBudWxsO1xuICAgIH1cbiAgICB0aGlzLnB1Ymxpc2hlciA9IG51bGw7XG4gICAgdGhpcy5zdWJzY3JpYmVycyA9IFtdO1xuICAgIHRoaXMuY3VycmVudFNlc3Npb25JZCA9IG51bGw7XG4gICAgdGhpcy5jdXJyZW50VG9rZW4gPSBudWxsO1xuICAgIHRoaXMucHJveHlWaWRlb1Nlc3Npb25JZCA9IG51bGw7XG4gICAgdGhpcy5wcm94eVZpZGVvVG9rZW4gPSBudWxsO1xuICAgIHRoaXMuaXNNdXRlZFN1YmplY3QubmV4dChmYWxzZSk7IC8vIFJlc2V0IG11dGUgc3RhdGVcbiAgICB0aGlzLnZpZXdNb2RlU3ViamVjdC5uZXh0KFZpZXdNb2RlLkZVTExTQ1JFRU4pO1xuICAgIHRoaXMuY2FsbFN0YXRlU3ViamVjdC5uZXh0KENhbGxTdGF0ZS5ESVNDT05ORUNURUQpO1xuXG4gICAgLy8gQ2FsbCBwcm94eSBmaW5pc2ggYWZ0ZXIgZGlzY29ubmVjdGluZyAob25seSBpZiBub3QgYWxyZWFkeSBmaW5pc2hpbmcpXG4gICAgaWYgKHNlc3Npb25JZFRvRmluaXNoICYmICF0aGlzLmlzRmluaXNoaW5nU2Vzc2lvbikge1xuICAgICAgdGhpcy5pc0ZpbmlzaGluZ1Nlc3Npb24gPSB0cnVlO1xuICAgICAgdGhpcy5maW5pc2hQcm94eVZpZGVvU2Vzc2lvbih7XG4gICAgICAgIHNlc3Npb25JZDogc2Vzc2lvbklkVG9GaW5pc2gsXG4gICAgICAgIGJ1c2luZXNzUm9sZTogdGhpcy5jdXJyZW50QnVzaW5lc3NSb2xlLFxuICAgICAgfSkuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ1tUQVMgREVCVUddIFNlc3Npb24gZmluaXNoZWQgc3VjY2Vzc2Z1bGx5OicsIHJlc3BvbnNlKTtcbiAgICAgICAgICB0aGlzLmlzRmluaXNoaW5nU2Vzc2lvbiA9IGZhbHNlO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignW1RBUyBERUJVR10gRXJyb3IgZmluaXNoaW5nIHNlc3Npb246JywgZXJyb3IpO1xuICAgICAgICAgIHRoaXMuaXNGaW5pc2hpbmdTZXNzaW9uID0gZmFsc2U7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaXNDYWxsQWN0aXZlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNhbGxTdGF0ZVN1YmplY3QuZ2V0VmFsdWUoKSA9PT0gQ2FsbFN0YXRlLkNPTk5FQ1RFRDtcbiAgfVxuXG4gIC8vIFN0YXRlIFBlcnNpc3RlbmNlXG4gIHByaXZhdGUgc2F2ZVNlc3Npb25TdGF0ZShcbiAgICBzZXNzaW9uSWQ6IHN0cmluZyxcbiAgICB0b2tlbjogc3RyaW5nLFxuICAgIHZpZXdNb2RlOiBWaWV3TW9kZSxcbiAgICBidXNpbmVzc1JvbGU6IFRhc0J1c2luZXNzUm9sZSA9IFRhc0J1c2luZXNzUm9sZS5VU0VSXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IHN0YXRlID0ge1xuICAgICAgc2Vzc2lvbklkLFxuICAgICAgdG9rZW4sXG4gICAgICB2aWV3TW9kZSxcbiAgICAgIGJ1c2luZXNzUm9sZSxcbiAgICB9O1xuICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0odGhpcy5TVE9SQUdFX0tFWSwgSlNPTi5zdHJpbmdpZnkoc3RhdGUpKTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJTZXNzaW9uU3RhdGUoKTogdm9pZCB7XG4gICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLlNUT1JBR0VfS0VZKTtcbiAgICAvLyBBbHNvIGNsZWFyIHRoZSBkaXNjb25uZWN0ZWQgZmxhZyB3aGVuIGNsZWFyaW5nIHN0YXRlXG4gICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLkRJU0NPTk5FQ1RFRF9GTEFHX0tFWSk7XG4gIH1cblxuICBwdWJsaWMgY2FuUmVzdG9yZVNlc3Npb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSh0aGlzLlNUT1JBR0VfS0VZKTtcbiAgfVxuXG4gIHB1YmxpYyByZXN0b3JlU2Vzc2lvbihjb250YWluZXJJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3Qgc2F2ZWRTdGF0ZSA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0odGhpcy5TVE9SQUdFX0tFWSk7XG4gICAgaWYgKCFzYXZlZFN0YXRlKSByZXR1cm47XG5cbiAgICAvLyBDaGVjayBpZiB0aGlzIHNlc3Npb24gd2FzIGludGVudGlvbmFsbHkgZGlzY29ubmVjdGVkXG4gICAgLy8gSWYgc28sIGRvbid0IHJlc3RvcmUgaXQgb24gcGFnZSByZWxvYWRcbiAgICBjb25zdCB3YXNEaXNjb25uZWN0ZWQgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKHRoaXMuRElTQ09OTkVDVEVEX0ZMQUdfS0VZKTtcbiAgICBpZiAod2FzRGlzY29ubmVjdGVkID09PSAndHJ1ZScpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdbVEFTIERFQlVHXSBTZXNzaW9uIHdhcyBpbnRlbnRpb25hbGx5IGRpc2Nvbm5lY3RlZCwgc2tpcHBpbmcgcmVzdG9yZScpO1xuICAgICAgdGhpcy5jbGVhclNlc3Npb25TdGF0ZSgpO1xuICAgICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLkRJU0NPTk5FQ1RFRF9GTEFHX0tFWSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gRG9uJ3QgcmVzdG9yZSBpZiB3ZSdyZSBhbHJlYWR5IGRpc2Nvbm5lY3RlZCBvciBpZiB0aGVyZSdzIG5vIGFjdGl2ZSBzZXNzaW9uXG4gICAgLy8gVGhpcyBwcmV2ZW50cyByZXN0b3Jpbmcgc2Vzc2lvbnMgdGhhdCB3ZXJlIHByb3Blcmx5IGRpc2Nvbm5lY3RlZFxuICAgIGlmICh0aGlzLmNhbGxTdGF0ZVN1YmplY3QuZ2V0VmFsdWUoKSA9PT0gQ2FsbFN0YXRlLkRJU0NPTk5FQ1RFRCkge1xuICAgICAgY29uc29sZS5sb2coJ1tUQVMgREVCVUddIENhbGwgc3RhdGUgaXMgRElTQ09OTkVDVEVELCBza2lwcGluZyByZXN0b3JlJyk7XG4gICAgICB0aGlzLmNsZWFyU2Vzc2lvblN0YXRlKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0YXRlID0gSlNPTi5wYXJzZShzYXZlZFN0YXRlKTtcbiAgICAgIGlmIChzdGF0ZS5zZXNzaW9uSWQgJiYgc3RhdGUudG9rZW4pIHtcbiAgICAgICAgY29uc29sZS5sb2coJ1tUQVMgREVCVUddIFJlc3RvcmluZyBzZXNzaW9uIGZyb20gc3RvcmFnZScpO1xuICAgICAgICAvLyBGb3JjZSBQaVAgbW9kZSBmb3IgcmVzdG9yYXRpb24gdG8gZW5zdXJlIFVJIGNvbnNpc3RlbmN5XG4gICAgICAgIHRoaXMudmlld01vZGVTdWJqZWN0Lm5leHQoVmlld01vZGUuUElQKTtcblxuICAgICAgICBpZiAoc3RhdGUuYnVzaW5lc3NSb2xlKSB7XG4gICAgICAgICAgdGhpcy5jdXJyZW50QnVzaW5lc3NSb2xlID0gc3RhdGUuYnVzaW5lc3NSb2xlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb25uZWN0U2Vzc2lvbihcbiAgICAgICAgICBzdGF0ZS5zZXNzaW9uSWQsXG4gICAgICAgICAgc3RhdGUudG9rZW4sXG4gICAgICAgICAgY29udGFpbmVySWQsIC8vIFVzZSB0aGUgc2FtZSBjb250YWluZXIgZm9yIGJvdGggc2luY2Ugd2UgYXJlIGluIFBpUFxuICAgICAgICAgIGNvbnRhaW5lcklkLFxuICAgICAgICAgIHRoaXMuY3VycmVudEJ1c2luZXNzUm9sZVxuICAgICAgICApXG4gICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ1tUQVMgREVCVUddIFNlc3Npb24gcmVzdG9yZWQgc3VjY2Vzc2Z1bGx5Jyk7XG4gICAgICAgICAgICAvLyBDbGVhciB0aGUgZGlzY29ubmVjdGVkIGZsYWcgaWYgcmVzdG9yYXRpb24gc3VjY2VlZHNcbiAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5ESVNDT05ORUNURURfRkxBR19LRVkpO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tUQVMgREVCVUddIEZhaWxlZCB0byByZXN0b3JlIHNlc3Npb246JywgZXJyKTtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJTZXNzaW9uU3RhdGUoKTsgLy8gQ2xlYXIgYmFkIHN0YXRlXG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcignW1RBUyBERUJVR10gRXJyb3IgcGFyc2luZyBzYXZlZCBzZXNzaW9uIHN0YXRlJywgZSk7XG4gICAgICB0aGlzLmNsZWFyU2Vzc2lvblN0YXRlKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gQVBJIE1ldGhvZHNcbiAgLyoqXG4gICAqIFBST1hZIGNpcmN1aXQgdG9rZW46IC92Mi9wcm94eS92aWRlby9zdGFydFxuICAgKi9cbiAgcHVibGljIHN0YXJ0UHJveHlWaWRlb1Nlc3Npb24oXG4gICAgcGF5bG9hZDogU3RhcnRTZXNzaW9uUmVxdWVzdFxuICApOiBPYnNlcnZhYmxlPEdlbmVyYXRlVG9rZW5SZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcbiAgICAgIC5wb3N0PEdlbmVyYXRlVG9rZW5SZXNwb25zZT4oJ3YyL3Byb3h5L3ZpZGVvL3N0YXJ0Jywge1xuICAgICAgICBib2R5OiBwYXlsb2FkLFxuICAgICAgICBoZWFkZXJzOiB7fSxcbiAgICAgIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZXNwb25zZTogYW55KSA9PiByZXNwb25zZSBhcyBHZW5lcmF0ZVRva2VuUmVzcG9uc2UpLFxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1RBUyBTZXJ2aWNlOiBzdGFydFByb3h5VmlkZW9TZXNzaW9uIGZhaWxlZCcsIGVycm9yKTtcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUFJPWFkgY2lyY3VpdCBzdGF0dXM6IC92Mi9wcm94eS92aWRlby9zdGF0dXNcbiAgICovXG4gIHB1YmxpYyBnZXRQcm94eVZpZGVvU3RhdHVzKFxuICAgIHBheWxvYWQ6IFByb3h5VmlkZW9TdGF0dXNSZXF1ZXN0XG4gICk6IE9ic2VydmFibGU8UHJveHlWaWRlb1N0YXR1c1Jlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgLnBvc3Q8UHJveHlWaWRlb1N0YXR1c1Jlc3BvbnNlPigndjIvcHJveHkvdmlkZW8vc3RhdHVzJywge1xuICAgICAgICBib2R5OiBwYXlsb2FkLFxuICAgICAgICBoZWFkZXJzOiB7fSxcbiAgICAgIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZXNwb25zZTogYW55KSA9PiByZXNwb25zZSBhcyBQcm94eVZpZGVvU3RhdHVzUmVzcG9uc2UpLFxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1RBUyBTZXJ2aWNlOiBnZXRQcm94eVZpZGVvU3RhdHVzIGZhaWxlZCcsIGVycm9yKTtcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUFJPWFkgY2lyY3VpdCB1c2VyIG1vZGlmaWNhdGlvbjogL3YyL3Byb3h5L3ZpZGVvL3VzZXIvbW9kaWZ5XG4gICAqL1xuICBwdWJsaWMgbW9kaWZ5UHJveHlWaWRlb1VzZXIocGF5bG9hZDogUHJveHlWaWRlb1VzZXJNb2RpZnlSZXF1ZXN0KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAucGF0Y2g8YW55PigndjIvcHJveHkvdmlkZW8vdXNlci9tb2RpZnknLCB7XG4gICAgICAgIGJvZHk6IHBheWxvYWQsXG4gICAgICAgIGhlYWRlcnM6IHt9LFxuICAgICAgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1RBUyBTZXJ2aWNlOiBtb2RpZnlQcm94eVZpZGVvVXNlciBmYWlsZWQnLCBlcnJvcik7XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgcHVibGljIGZpbmlzaFByb3h5VmlkZW9TZXNzaW9uKHBheWxvYWQ6IFByb3h5VmlkZW9GaW5pc2hSZXF1ZXN0KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgLnBvc3Q8RmluaXNoU2Vzc2lvblJlc3BvbnNlPigndjIvcHJveHkvdmlkZW8vZmluaXNoJywge1xuICAgICAgICBib2R5OiBwYXlsb2FkLFxuICAgICAgICBoZWFkZXJzOiB7fSxcbiAgICAgIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZXNwb25zZTogYW55KSA9PiByZXNwb25zZSBhcyBGaW5pc2hTZXNzaW9uUmVzcG9uc2UpLFxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1RBUyBTZXJ2aWNlOiBmaW5pc2hQcm94eVZpZGVvU2Vzc2lvbiBmYWlsZWQnLCBlcnJvcik7XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB1c2VyIGFwcG9pbnRtZW50cyB3aXRoaW4gYSBkYXRlIHJhbmdlLlxuICAgKiBAcGFyYW0gcGFyYW1zIERhdGUgcmFuZ2UgZm9yIHF1ZXJ5aW5nIGFwcG9pbnRtZW50c1xuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlIG9mIGFwcG9pbnRtZW50IGFycmF5XG4gICAqL1xuICBwdWJsaWMgZ2V0QXBwb2ludG1lbnRzKHBhcmFtczogR2V0QXBwb2ludG1lbnRzUmVxdWVzdCk6IE9ic2VydmFibGU8VGFzQXBwb2ludG1lbnRbXT4ge1xuICAgIGxldCB1cmwgPSBgdjIvcHJveHkvYXBwb2ludG1lbnQvYWdlbmRhcy91c2VyL2FwcG9pbnRtZW50cz9mcm9tRGF0ZT0ke3BhcmFtcy5mcm9tRGF0ZX0mdG9EYXRlPSR7cGFyYW1zLnRvRGF0ZX0mcm9vbVR5cGU9VEFTYDtcblxuICAgIGlmIChwYXJhbXMuZW50aXR5SWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdXJsICs9IGAmZW50aXR5SWQ9JHtwYXJhbXMuZW50aXR5SWR9YDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAuZ2V0PFRhc0FwcG9pbnRtZW50W10+KHVybCwgeyBoZWFkZXJzOiB7fSB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignVEFTIFNlcnZpY2U6IGdldEFwcG9pbnRtZW50cyBmYWlsZWQnLCBlcnJvcik7XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IGF1dG9tYXRpYyBzdGF0dXMgcG9sbGluZyBmb3IgdGhlIGN1cnJlbnQgc2Vzc2lvbi5cbiAgICogU3RhdHVzIGlzIHBvbGxlZCBldmVyeSBTVEFUVVNfUE9MTF9JTlRFUlZBTF9NUyBtaWxsaXNlY29uZHMuXG4gICAqL1xuXG5cbiAgLyoqXG4gICAqIFN0b3AgYXV0b21hdGljIHN0YXR1cyBwb2xsaW5nLlxuICAgKi9cblxuXG4gIC8qKlxuICAgKiBGZXRjaCBzdGF0dXMgYW5kIHByb2Nlc3MgdGhlIHJlc3BvbnNlLlxuICAgKi9cbiAgcHJpdmF0ZSBmZXRjaEFuZFByb2Nlc3NTdGF0dXMocGFyYW1zOiBQcm94eVZpZGVvU3RhdHVzUmVxdWVzdCk6IHZvaWQge1xuICAgIHRoaXMuZ2V0UHJveHlWaWRlb1N0YXR1cyhwYXJhbXMpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgdGhpcy5wcm9jZXNzU3RhdHVzUmVzcG9uc2UocmVzcG9uc2UpO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoZXJyKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tUQVMgREVCVUddIFN0YXR1cyBwb2xsaW5nIGVycm9yOicsIGVycik7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb2Nlc3Mgc3RhdHVzIHJlc3BvbnNlIHRvIHVwZGF0ZSB3YWl0aW5nIHJvb20gdXNlcnMgYW5kIG93bmVyIGpvaW4gc3RhdHVzLlxuICAgKi9cbiAgcHJpdmF0ZSBwcm9jZXNzU3RhdHVzUmVzcG9uc2UocmVzcG9uc2U6IFByb3h5VmlkZW9TdGF0dXNSZXNwb25zZSk6IHZvaWQge1xuICAgIGNvbnN0IGNvbnRlbnQgPSByZXNwb25zZS5jb250ZW50O1xuXG4gICAgLy8gVXBkYXRlIHZpZGVvQ2FsbElkIGlmIGF2YWlsYWJsZVxuICAgIGlmIChjb250ZW50LnZpZGVvQ2FsbElkKSB7XG4gICAgICB0aGlzLmN1cnJlbnRWaWRlb0NhbGxJZCA9IGNvbnRlbnQudmlkZW9DYWxsSWQ7XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIHNlc3Npb25JZCBpZiBhdmFpbGFibGVcbiAgICBpZiAoY29udGVudC5zZXNzaW9uSWQpIHtcbiAgICAgIHRoaXMuY3VycmVudFNlc3Npb25JZCA9IGNvbnRlbnQuc2Vzc2lvbklkO1xuICAgICAgdGhpcy5wcm94eVZpZGVvU2Vzc2lvbklkID0gY29udGVudC5zZXNzaW9uSWQ7XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIGpvaW5hYmxlIHN0YXR1c1xuICAgIHRoaXMuam9pbmFibGVTdWJqZWN0Lm5leHQoY29udGVudC5qb2luYWJsZSk7XG5cbiAgICAvLyBVcGRhdGUgYWN0aXZhdGVHZW8gc3RhdHVzXG4gICAgaWYgKGNvbnRlbnQuYWN0aXZhdGVHZW8gIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc29sZS5sb2coJ1tUQVMgREVCVUddIGFjdGl2YXRlR2VvIHJlY2VpdmVkOicsIGNvbnRlbnQuYWN0aXZhdGVHZW8pO1xuICAgICAgdGhpcy5hY3RpdmF0ZUdlb1N1YmplY3QubmV4dChjb250ZW50LmFjdGl2YXRlR2VvKTtcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgZ2VvUmVxdWVzdEFjdGl2ZSBzdGF0dXMgKG93bmVyIHdhaXRpbmcgZm9yIHVzZXIgZ2VvIHJlc3BvbnNlKVxuICAgIGlmIChjb250ZW50Lmdlb1JlcXVlc3RBY3RpdmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc29sZS5sb2coJ1tUQVMgREVCVUddIGdlb1JlcXVlc3RBY3RpdmUgcmVjZWl2ZWQ6JywgY29udGVudC5nZW9SZXF1ZXN0QWN0aXZlKTtcbiAgICAgIHRoaXMuZ2VvUmVxdWVzdEFjdGl2ZVN1YmplY3QubmV4dChjb250ZW50Lmdlb1JlcXVlc3RBY3RpdmUpO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSBhbGxHZW9HcmFudGVkIHN0YXR1cyAoYWxsIHVzZXJzIHJlc3BvbmRlZCB3aXRoIGdlbylcbiAgICBpZiAoY29udGVudC5hbGxHZW9HcmFudGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdbVEFTIERFQlVHXSBhbGxHZW9HcmFudGVkIHJlY2VpdmVkOicsIGNvbnRlbnQuYWxsR2VvR3JhbnRlZCk7XG4gICAgICB0aGlzLmFsbEdlb0dyYW50ZWRTdWJqZWN0Lm5leHQoY29udGVudC5hbGxHZW9HcmFudGVkKTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiBvd25lciBoYXMgam9pbmVkXG4gICAgY29uc3Qgb3duZXJKb2luZWQgPSB0aGlzLnRhc1V0aWxpdHlTZXJ2aWNlLmNoZWNrSWZPd25lckpvaW5lZChjb250ZW50LnVzZXJzKTtcbiAgICB0aGlzLm93bmVySGFzSm9pbmVkU3ViamVjdC5uZXh0KG93bmVySm9pbmVkKTtcblxuICAgIC8vIERldGVjdCBpZiBvd25lciBsZWZ0OiB3YXMgcHJlc2VudCwgbm93IG5vdCBwcmVzZW50XG4gICAgaWYgKHRoaXMud2FzT3duZXJQcmVzZW50ICYmICFvd25lckpvaW5lZCkge1xuICAgICAgY29uc29sZS5sb2coJ1tUQVMgREVCVUddIE93bmVyIGhhcyBsZWZ0IHRoZSBzZXNzaW9uJyk7XG4gICAgICB0aGlzLm93bmVySGFzTGVmdFN1YmplY3QubmV4dCh0cnVlKTtcbiAgICB9XG5cbiAgICBpZiAob3duZXJKb2luZWQpIHtcbiAgICAgIHRoaXMud2FzT3duZXJQcmVzZW50ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBFeHRyYWN0IHdhaXRpbmcgcm9vbSB1c2VycyAoc3RhdHVzID09PSBXQUlUSU5HKVxuICAgIGNvbnN0IHdhaXRpbmdVc2VyczogV2FpdGluZ1Jvb21Vc2VyW10gPSBjb250ZW50LnVzZXJzXG4gICAgICAuZmlsdGVyKCh1KSA9PiAodS5zdGF0dXMgYXMgc3RyaW5nKSA9PT0gJ1dBSVRJTkcnKVxuICAgICAgLm1hcCgodSkgPT4gKHtcbiAgICAgICAgdXNlcklkOiB1LnVzZXJJZCxcbiAgICAgICAgbmFtZTogYFVzZXIgJHt1LnVzZXJJZH1gLCAvLyBUT0RPOiBGZXRjaCBhY3R1YWwgdXNlciBuYW1lcyBmcm9tIGEgdXNlciBzZXJ2aWNlXG4gICAgICAgIHN0YXR1czogUm9vbVVzZXJTdGF0dXMuV0FJVElORyxcbiAgICAgIH0pKTtcblxuICAgIHRoaXMud2FpdGluZ1Jvb21Vc2Vyc1N1YmplY3QubmV4dCh3YWl0aW5nVXNlcnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkbWl0IGEgdXNlciBmcm9tIHRoZSB3YWl0aW5nIHJvb20gYnkgY2hhbmdpbmcgdGhlaXIgc3RhdHVzLlxuICAgKi9cbiAgcHVibGljIGFkbWl0VXNlckZyb21XYWl0aW5nUm9vbShcbiAgICB1c2VySWQ6IG51bWJlcixcbiAgICB2aWRlb0NhbGxJZDogbnVtYmVyXG4gICk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMubW9kaWZ5UHJveHlWaWRlb1VzZXIoe1xuICAgICAgdXNlcklkLFxuICAgICAgdmlkZW9DYWxsSWQsXG4gICAgICBhY3Rpb246IFVzZXJDYWxsQWN0aW9uLldBSVRJTkdfUk9PTV9MRUFWRSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIEdldHRlcnMgZm9yIGN1cnJlbnQgY2FsbCBjb250ZXh0XG4gIHB1YmxpYyBnZXQgYXBwb2ludG1lbnRJZCgpOiBudW1iZXIgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50QXBwb2ludG1lbnRJZDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdmlkZW9DYWxsSWQoKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudFZpZGVvQ2FsbElkO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbm5lY3RzIHRvIGEgVG9rQm94IHZpZGVvIHNlc3Npb25cbiAgICovXG4gIHB1YmxpYyBjb25uZWN0U2Vzc2lvbihcbiAgICBzZXNzaW9uSWQ6IHN0cmluZyxcbiAgICB0b2tlbjogc3RyaW5nLFxuICAgIHB1Ymxpc2hlckVsZW1lbnQ6IHN0cmluZyxcbiAgICBzdWJzY3JpYmVyRWxlbWVudDogc3RyaW5nLFxuICAgIGJ1c2luZXNzUm9sZTogVGFzQnVzaW5lc3NSb2xlID0gVGFzQnVzaW5lc3NSb2xlLlVTRVJcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5jYWxsU3RhdGVTdWJqZWN0Lm5leHQoQ2FsbFN0YXRlLkNPTk5FQ1RJTkcpO1xuICAgIHRoaXMuY3VycmVudFNlc3Npb25JZCA9IHNlc3Npb25JZDtcbiAgICB0aGlzLmN1cnJlbnRUb2tlbiA9IHRva2VuO1xuICAgIHRoaXMuY3VycmVudEJ1c2luZXNzUm9sZSA9IGJ1c2luZXNzUm9sZTtcbiAgICB0aGlzLmlzRmluaXNoaW5nU2Vzc2lvbiA9IGZhbHNlOyAvLyBSZXNldCBmbGFnIGZvciBuZXcgc2Vzc2lvblxuXG4gICAgLy8gU2F2ZSBpbml0aWFsIHN0YXRlIChkZWZhdWx0aW5nIHRvIGN1cnJlbnQgdmlldyBtb2RlKVxuICAgIHRoaXMuc2F2ZVNlc3Npb25TdGF0ZShcbiAgICAgIHNlc3Npb25JZCxcbiAgICAgIHRva2VuLFxuICAgICAgdGhpcy52aWV3TW9kZVN1YmplY3QuZ2V0VmFsdWUoKSxcbiAgICAgIGJ1c2luZXNzUm9sZVxuICAgICk7XG4gICAgLy8gQ2xlYXIgdGhlIGRpc2Nvbm5lY3RlZCBmbGFnIHdoZW4gc3RhcnRpbmcgYSBuZXcgY29ubmVjdGlvblxuICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5ESVNDT05ORUNURURfRkxBR19LRVkpO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmICghT1QuY2hlY2tTeXN0ZW1SZXF1aXJlbWVudHMoKSkge1xuICAgICAgICB0aGlzLmNhbGxTdGF0ZVN1YmplY3QubmV4dChDYWxsU3RhdGUuRVJST1IpO1xuICAgICAgICByZWplY3QobmV3IEVycm9yKCdCcm93c2VyIG5vdCBjb21wYXRpYmxlIHdpdGggVG9rQm94JykpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc2Vzc2lvbiA9IE9ULmluaXRTZXNzaW9uKHRoaXMuY29uZmlnLnRva0JveEFwaUtleSwgc2Vzc2lvbklkKTtcblxuICAgICAgLy8gSGFuZGxlIG5ldyBzdHJlYW1zIChyZW1vdGUgcGFydGljaXBhbnRzIGpvaW5pbmcpXG4gICAgICB0aGlzLnNlc3Npb24ub24oJ3N0cmVhbUNyZWF0ZWQnLCAoZXZlbnQpID0+IHtcbiAgICAgICAgY29uc3Qgc3Vic2NyaWJlciA9IHRoaXMuc2Vzc2lvbj8uc3Vic2NyaWJlKFxuICAgICAgICAgIGV2ZW50LnN0cmVhbSxcbiAgICAgICAgICBzdWJzY3JpYmVyRWxlbWVudCxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpbnNlcnRNb2RlOiAnYXBwZW5kJyxcbiAgICAgICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHN1YnNjcmliaW5nIHRvIHN0cmVhbTonLCBlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgICBpZiAoc3Vic2NyaWJlcikge1xuICAgICAgICAgIHRoaXMuc3Vic2NyaWJlcnMucHVzaChzdWJzY3JpYmVyKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIEhhbmRsZSBzdHJlYW1zIGVuZGluZyAocmVtb3RlIHBhcnRpY2lwYW50cyBsZWF2aW5nKVxuICAgICAgdGhpcy5zZXNzaW9uLm9uKCdzdHJlYW1EZXN0cm95ZWQnLCAoZXZlbnQpID0+IHtcbiAgICAgICAgdGhpcy5zdWJzY3JpYmVycyA9IHRoaXMuc3Vic2NyaWJlcnMuZmlsdGVyKFxuICAgICAgICAgIChzdWIpID0+IHN1Yi5zdHJlYW0/LnN0cmVhbUlkICE9PSBldmVudC5zdHJlYW0uc3RyZWFtSWRcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBIYW5kbGUgc2Vzc2lvbiBkaXNjb25uZWN0aW9uXG4gICAgICB0aGlzLnNlc3Npb24ub24oJ3Nlc3Npb25EaXNjb25uZWN0ZWQnLCAoKSA9PiB7XG4gICAgICAgIHRoaXMuY2FsbFN0YXRlU3ViamVjdC5uZXh0KENhbGxTdGF0ZS5ESVNDT05ORUNURUQpO1xuXG4gICAgICAgIC8vIENhbGwgZmluaXNoU2Vzc2lvbiB3aGVuIHNlc3Npb24gaXMgZGlzY29ubmVjdGVkIChlLmcuLCBieSBzZXJ2ZXIpXG4gICAgICAgIC8vIE9ubHkgY2FsbCBpZiBub3QgYWxyZWFkeSBmaW5pc2hpbmcgKHByZXZlbnRzIGR1cGxpY2F0ZSBjYWxscylcbiAgICAgICAgY29uc3Qgc2Vzc2lvbklkVG9GaW5pc2ggPSB0aGlzLmN1cnJlbnRTZXNzaW9uSWQ7XG4gICAgICAgIGlmIChzZXNzaW9uSWRUb0ZpbmlzaCAmJiAhdGhpcy5pc0ZpbmlzaGluZ1Nlc3Npb24pIHtcbiAgICAgICAgICB0aGlzLmlzRmluaXNoaW5nU2Vzc2lvbiA9IHRydWU7XG4gICAgICAgICAgdGhpcy5maW5pc2hQcm94eVZpZGVvU2Vzc2lvbih7XG4gICAgICAgICAgICBzZXNzaW9uSWQ6IHNlc3Npb25JZFRvRmluaXNoLFxuICAgICAgICAgICAgYnVzaW5lc3NSb2xlOiB0aGlzLmN1cnJlbnRCdXNpbmVzc1JvbGUsXG4gICAgICAgICAgfSkuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgIG5leHQ6IChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZygnW1RBUyBERUJVR10gU2Vzc2lvbiBmaW5pc2hlZCBvbiBkaXNjb25uZWN0IGV2ZW50OicsIHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgdGhpcy5pc0ZpbmlzaGluZ1Nlc3Npb24gPSBmYWxzZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tUQVMgREVCVUddIEVycm9yIGZpbmlzaGluZyBzZXNzaW9uIG9uIGRpc2Nvbm5lY3Q6JywgZXJyb3IpO1xuICAgICAgICAgICAgICB0aGlzLmlzRmluaXNoaW5nU2Vzc2lvbiA9IGZhbHNlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIENvbm5lY3QgdG8gc2Vzc2lvblxuICAgICAgdGhpcy5zZXNzaW9uLmNvbm5lY3QodG9rZW4sIChlcnJvcikgPT4ge1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBjb25uZWN0aW5nIHRvIHNlc3Npb246JywgZXJyb3IpO1xuICAgICAgICAgIHRoaXMuY2FsbFN0YXRlU3ViamVjdC5uZXh0KENhbGxTdGF0ZS5FUlJPUik7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJbml0aWFsaXplIHB1Ymxpc2hlciAobG9jYWwgdmlkZW8pXG4gICAgICAgIHRoaXMucHVibGlzaGVyID0gT1QuaW5pdFB1Ymxpc2hlcihcbiAgICAgICAgICBwdWJsaXNoZXJFbGVtZW50LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGluc2VydE1vZGU6ICdhcHBlbmQnLFxuICAgICAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgICAgIGhlaWdodDogJzEwMCUnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgKGVycikgPT4ge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBpbml0aWFsaXppbmcgcHVibGlzaGVyOicsIGVycik7XG4gICAgICAgICAgICAgIHRoaXMuY2FsbFN0YXRlU3ViamVjdC5uZXh0KENhbGxTdGF0ZS5FUlJPUik7XG4gICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFB1Ymxpc2ggdG8gc2Vzc2lvblxuICAgICAgICAgICAgdGhpcy5zZXNzaW9uPy5wdWJsaXNoKHRoaXMucHVibGlzaGVyLCAocHViRXJyKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChwdWJFcnIpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBwdWJsaXNoaW5nIHN0cmVhbTonLCBwdWJFcnIpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2FsbFN0YXRlU3ViamVjdC5uZXh0KENhbGxTdGF0ZS5FUlJPUik7XG4gICAgICAgICAgICAgICAgcmVqZWN0KHB1YkVycik7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsU3RhdGVTdWJqZWN0Lm5leHQoQ2FsbFN0YXRlLkNPTk5FQ1RFRCk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFZpZGVvIEVsZW1lbnQgTW92ZW1lbnQgTWV0aG9kc1xuICBwdWJsaWMgbW92ZVB1Ymxpc2hlclRvKG5ld0NvbnRhaW5lcklkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucHVibGlzaGVyKSByZXR1cm47XG5cbiAgICBjb25zdCBwdWJsaXNoZXJFbGVtZW50ID0gdGhpcy5wdWJsaXNoZXIuZWxlbWVudDtcbiAgICBjb25zdCBuZXdDb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChuZXdDb250YWluZXJJZCk7XG5cbiAgICBpZiAocHVibGlzaGVyRWxlbWVudCAmJiBuZXdDb250YWluZXIpIHtcbiAgICAgIG5ld0NvbnRhaW5lci5hcHBlbmRDaGlsZChwdWJsaXNoZXJFbGVtZW50KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbW92ZVN1YnNjcmliZXJzVG8obmV3Q29udGFpbmVySWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IG5ld0NvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG5ld0NvbnRhaW5lcklkKTtcbiAgICBpZiAoIW5ld0NvbnRhaW5lcikgcmV0dXJuO1xuXG4gICAgdGhpcy5zdWJzY3JpYmVycy5mb3JFYWNoKChzdWJzY3JpYmVyKSA9PiB7XG4gICAgICBjb25zdCBzdWJzY3JpYmVyRWxlbWVudCA9IHN1YnNjcmliZXIuZWxlbWVudDtcbiAgICAgIGlmIChzdWJzY3JpYmVyRWxlbWVudCkge1xuICAgICAgICBuZXdDb250YWluZXIuYXBwZW5kQ2hpbGQoc3Vic2NyaWJlckVsZW1lbnQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE1vdmVzIHRoZSBtYWluIHZpZGVvIChzdWJzY3JpYmVyIGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIHB1Ymxpc2hlcikgdG8gYSBjb250YWluZXIuXG4gICAqIFVzZWQgZm9yIFBpUCBtb2RlIHRvIHNob3cgb25seSBvbmUgdmlkZW8uXG4gICAqL1xuICBwdWJsaWMgbW92ZU1haW5WaWRlb1RvKG5ld0NvbnRhaW5lcklkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBuZXdDb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChuZXdDb250YWluZXJJZCk7XG4gICAgaWYgKCFuZXdDb250YWluZXIpIHJldHVybjtcblxuICAgIC8vIFByZWZlciByZW1vdGUgdmlkZW8gKHN1YnNjcmliZXIpIGFzIG1haW5cbiAgICBpZiAodGhpcy5zdWJzY3JpYmVycy5sZW5ndGggPiAwICYmIHRoaXMuc3Vic2NyaWJlcnNbMF0uZWxlbWVudCkge1xuICAgICAgbmV3Q29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuc3Vic2NyaWJlcnNbMF0uZWxlbWVudCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gRmFsbCBiYWNrIHRvIGxvY2FsIHZpZGVvIChwdWJsaXNoZXIpXG4gICAgaWYgKHRoaXMucHVibGlzaGVyPy5lbGVtZW50KSB7XG4gICAgICBuZXdDb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5wdWJsaXNoZXIuZWxlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1vdmVzIHZpZGVvcyBiYWNrIHRvIGZ1bGxzY3JlZW4gY29udGFpbmVyc1xuICAgKi9cbiAgcHVibGljIG1vdmVWaWRlb3NUb0Z1bGxzY3JlZW4oKTogdm9pZCB7XG4gICAgdGhpcy5tb3ZlU3Vic2NyaWJlcnNUbygnc3Vic2NyaWJlci1jb250YWluZXInKTtcbiAgICB0aGlzLm1vdmVQdWJsaXNoZXJUbygncHVibGlzaGVyLWNvbnRhaW5lcicpO1xuICB9XG59XG4iXX0=
|
|
620
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YXMtdWVsbC1zZGsvc3JjL2xpYi9zZXJ2aWNlcy90YXMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQUUsZUFBZSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakQsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0QyxPQUFPLEVBUUwsY0FBYyxFQUNkLGNBQWMsRUFDZCxlQUFlLEVBQ2YsU0FBUyxFQUNULFFBQVEsR0FJVCxNQUFNLDhCQUE4QixDQUFDO0FBQ3RDLE9BQU8sRUFDTCxVQUFVLEVBQ1YsZUFBZSxHQUdoQixNQUFNLHNCQUFzQixDQUFDOzs7QUFFOUIsNkNBQTZDO0FBQzdDLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLENBQUM7QUFNaEYsTUFBTSxPQUFPLFVBQVU7SUE2RHJCLFlBQ21DLFVBQXlCLEVBQzlCLE1BQWlCLEVBQ3JDLGlCQUFvQztRQUZYLGVBQVUsR0FBVixVQUFVLENBQWU7UUFDOUIsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQUNyQyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBL0R0QyxZQUFPLEdBQXNCLElBQUksQ0FBQztRQUNsQyxjQUFTLEdBQXdCLElBQUksQ0FBQztRQUN0QyxnQkFBVyxHQUFvQixFQUFFLENBQUM7UUFFbEMscUJBQWdCLEdBQUcsSUFBSSxlQUFlLENBQVksU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25FLGVBQVUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxFQUFF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LENBQUMsQ0FBQzthQUM3QztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNJLGVBQWUsQ0FBQyxjQUFzQjtRQUMzQyxNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyxZQUFZO1lBQUUsT0FBTztRQUUxQiwyQ0FBMkM7UUFDM0MsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUU7WUFDOUQsWUFBWSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3RELE9BQU87U0FDUjtRQUVELHVDQUF1QztRQUN2QyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFO1lBQzNCLFlBQVksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUNsRDtJQUNILENBQUM7SUFFRDs7T0FFRztJQUNJLHNCQUFzQjtRQUMzQixJQUFJLENBQUMsaUJBQWlCLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsZUFBZSxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFDOUMsQ0FBQzs7d0dBN3ZCVSxVQUFVLGtCQThEWCxlQUFlLGFBQ2YsVUFBVTs0R0EvRFQsVUFBVSxjQUhULE1BQU07NEZBR1AsVUFBVTtrQkFKdEIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQWdFSSxNQUFNOzJCQUFDLGVBQWU7OzBCQUN0QixNQUFNOzJCQUFDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRhc1V0aWxpdHlTZXJ2aWNlIH0gZnJvbSAnLi90YXMtdXRpbGl0eS5zZXJ2aWNlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0ICogYXMgT1QgZnJvbSAnQG9wZW50b2svY2xpZW50JztcbmltcG9ydCB7XG4gIEdlbmVyYXRlVG9rZW5SZXNwb25zZSxcbiAgU3RhcnRTZXNzaW9uUmVxdWVzdCxcbiAgRmluaXNoU2Vzc2lvblJlc3BvbnNlLFxuICBQcm94eVZpZGVvU3RhdHVzUmVxdWVzdCxcbiAgUHJveHlWaWRlb1N0YXR1c1Jlc3BvbnNlLFxuICBQcm94eVZpZGVvRmluaXNoUmVxdWVzdCxcbiAgUHJveHlWaWRlb1VzZXJNb2RpZnlSZXF1ZXN0LFxuICBVc2VyQ2FsbEFjdGlvbixcbiAgUm9vbVVzZXJTdGF0dXMsXG4gIFRhc0J1c2luZXNzUm9sZSxcbiAgQ2FsbFN0YXRlLFxuICBWaWV3TW9kZSxcbiAgV2FpdGluZ1Jvb21Vc2VyLFxuICBUYXNBcHBvaW50bWVudCxcbiAgR2V0QXBwb2ludG1lbnRzUmVxdWVzdCxcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy90YXMuaW50ZXJmYWNlcyc7XG5pbXBvcnQge1xuICBUQVNfQ09ORklHLFxuICBUQVNfSFRUUF9DTElFTlQsXG4gIFRhc0NvbmZpZyxcbiAgVGFzSHR0cENsaWVudCxcbn0gZnJvbSAnLi4vY29uZmlnL3Rhcy5jb25maWcnO1xuXG4vLyBSZS1leHBvcnQgZW51bXMgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbmV4cG9ydCB7IENhbGxTdGF0ZSwgVmlld01vZGUsIFRhc0J1c2luZXNzUm9sZSwgVXNlckNhbGxBY3Rpb24sIFJvb21Vc2VyU3RhdHVzIH07XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbiAgXG5leHBvcnQgY2xhc3MgVGFzU2VydmljZSB7XG4gIHByaXZhdGUgc2Vzc2lvbjogT1QuU2Vzc2lvbiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHB1Ymxpc2hlcjogT1QuUHVibGlzaGVyIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgc3Vic2NyaWJlcnM6IE9ULlN1YnNjcmliZXJbXSA9IFtdO1xuXG4gIHByaXZhdGUgY2FsbFN0YXRlU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q2FsbFN0YXRlPihDYWxsU3RhdGUuSURMRSk7XG4gIHB1YmxpYyBjYWxsU3RhdGUkID0gdGhpcy5jYWxsU3RhdGVTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIHByaXZhdGUgdmlld01vZGVTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxWaWV3TW9kZT4oVmlld01vZGUuRlVMTFNDUkVFTik7XG4gIHB1YmxpYyB2aWV3TW9kZSQgPSB0aGlzLnZpZXdNb2RlU3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICBwcml2YXRlIGlzTXV0ZWRTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHB1YmxpYyBpc011dGVkJCA9IHRoaXMuaXNNdXRlZFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgLy8gU2Vzc2lvbiBpbmZvIGZvciBQaVAgbW9kZSByZXN0b3JhdGlvblxuICBwcml2YXRlIGN1cnJlbnRTZXNzaW9uSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGN1cnJlbnRUb2tlbjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgcmVhZG9ubHkgU1RPUkFHRV9LRVkgPSAndGFzX3Nlc3Npb25fc3RhdGUnO1xuICBwcml2YXRlIHJlYWRvbmx5IERJU0NPTk5FQ1RFRF9GTEFHX0tFWSA9ICd0YXNfc2Vzc2lvbl9kaXNjb25uZWN0ZWQnO1xuICBwcml2YXRlIGlzRmluaXNoaW5nU2Vzc2lvbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vIFByb3h5LXZpZGVvIGNpcmN1aXQgc3RhdGVcbiAgcHJpdmF0ZSBwcm94eVZpZGVvU2Vzc2lvbklkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBwcm94eVZpZGVvVG9rZW46IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGN1cnJlbnRCdXNpbmVzc1JvbGU6IFRhc0J1c2luZXNzUm9sZSA9IFRhc0J1c2luZXNzUm9sZS5VU0VSO1xuXG4gIC8vIFdhaXRpbmcgcm9vbSBhbmQgc3RhdHVzIHBvbGxpbmdcbiAgcHJpdmF0ZSB3YWl0aW5nUm9vbVVzZXJzU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8V2FpdGluZ1Jvb21Vc2VyW10+KFtdKTtcbiAgcHVibGljIHdhaXRpbmdSb29tVXNlcnMkID0gdGhpcy53YWl0aW5nUm9vbVVzZXJzU3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICBwcml2YXRlIG93bmVySGFzSm9pbmVkU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwdWJsaWMgb3duZXJIYXNKb2luZWQkID0gdGhpcy5vd25lckhhc0pvaW5lZFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgLy8gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRydWUgd2hlbiBvd25lciB3YXMgcHJlc2VudCBidXQgdGhlbiBsZWZ0XG4gIHByaXZhdGUgb3duZXJIYXNMZWZ0U3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwdWJsaWMgb3duZXJIYXNMZWZ0JCA9IHRoaXMub3duZXJIYXNMZWZ0U3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICBwcml2YXRlIGpvaW5hYmxlU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwdWJsaWMgam9pbmFibGUkID0gdGhpcy5qb2luYWJsZVN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgLy8gT2JzZXJ2YWJsZSBmb3Igd2hlbiBiYWNrZW5kIHJlcXVlc3RzIGdlb2xvY2F0aW9uIGFjdGl2YXRpb25cbiAgcHJpdmF0ZSBhY3RpdmF0ZUdlb1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHVibGljIGFjdGl2YXRlR2VvJCA9IHRoaXMuYWN0aXZhdGVHZW9TdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIC8vIE9ic2VydmFibGUgZm9yIHdoZW4gZ2VvIHJlcXVlc3QgaXMgYWN0aXZlIChvd25lciB3YWl0aW5nIGZvciB1c2VyIHJlc3BvbnNlKVxuICBwcml2YXRlIGdlb1JlcXVlc3RBY3RpdmVTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHB1YmxpYyBnZW9SZXF1ZXN0QWN0aXZlJCA9IHRoaXMuZ2VvUmVxdWVzdEFjdGl2ZVN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgLy8gT2JzZXJ2YWJsZSBmb3Igd2hlbiBhbGwgZ2VvIGhhcyBiZWVuIGdyYW50ZWRcbiAgcHJpdmF0ZSBhbGxHZW9HcmFudGVkU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwdWJsaWMgYWxsR2VvR3JhbnRlZCQgPSB0aGlzLmFsbEdlb0dyYW50ZWRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIHByaXZhdGUgc3RhdHVzUG9sbGluZ0ludGVydmFsOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRJbnRlcnZhbD4gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSByZWFkb25seSBERUZBVUxUX1BPTExfSU5URVJWQUxfTVMgPSAzMDAwMDsgLy8gRGVmYXVsdCAzMHNcbiAgcHJpdmF0ZSB3YXNPd25lclByZXNlbnQgPSBmYWxzZTtcblxuICAvLyBDdXJyZW50IGNhbGwgY29udGV4dFxuICBwcml2YXRlIGN1cnJlbnRBcHBvaW50bWVudElkOiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBjdXJyZW50VmlkZW9DYWxsSWQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGN1cnJlbnRUZW5hbnQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoVEFTX0hUVFBfQ0xJRU5UKSBwcml2YXRlIGh0dHBDbGllbnQ6IFRhc0h0dHBDbGllbnQsXG4gICAgQEluamVjdChUQVNfQ09ORklHKSBwcml2YXRlIGNvbmZpZzogVGFzQ29uZmlnLFxuICAgIHByaXZhdGUgdGFzVXRpbGl0eVNlcnZpY2U6IFRhc1V0aWxpdHlTZXJ2aWNlXG4gICkge31cblxuICAvLyAuLi4gKEdldHRlcnMgYW5kIG90aGVyIG1ldGhvZHMgcmVtYWluIHVuY2hhbmdlZClcblxuICAvKipcbiAgICogU3RhcnQgYXV0b21hdGljIHN0YXR1cyBwb2xsaW5nIGZvciB0aGUgY3VycmVudCBzZXNzaW9uLlxuICAgKiBTdGF0dXMgaXMgcG9sbGVkIGV2ZXJ5IGludGVydmFsTXMgKGRlZmF1bHQgMzBzKS5cbiAgICovXG4gIHB1YmxpYyBzdGFydFN0YXR1c1BvbGxpbmcoXG4gICAgcGFyYW1zOiBQcm94eVZpZGVvU3RhdHVzUmVxdWVzdCwgXG4gICAgaW50ZXJ2YWxNczogbnVtYmVyID0gdGhpcy5ERUZBVUxUX1BPTExfSU5URVJWQUxfTVNcbiAgKTogdm9pZCB7XG4gICAgdGhpcy5zdG9wU3RhdHVzUG9sbGluZygpOyAvLyBDbGVhciBhbnkgZXhpc3RpbmcgcG9sbGluZ1xuXG4gICAgLy8gU3RvcmUgY29udGV4dCBmb3IgcG9sbGluZ1xuICAgIGlmIChwYXJhbXMuc2Vzc2lvbklkKSB7XG4gICAgICB0aGlzLmN1cnJlbnRTZXNzaW9uSWQgPSBwYXJhbXMuc2Vzc2lvbklkO1xuICAgIH1cbiAgICBpZiAocGFyYW1zLmFwcG9pbnRtZW50SWQpIHtcbiAgICAgIHRoaXMuY3VycmVudEFwcG9pbnRtZW50SWQgPSBwYXJhbXMuYXBwb2ludG1lbnRJZDtcbiAgICB9XG4gICAgaWYgKHBhcmFtcy50ZW5hbnQpIHtcbiAgICAgIHRoaXMuY3VycmVudFRlbmFudCA9IHBhcmFtcy50ZW5hbnQ7XG4gICAgfVxuXG4gICAgY29uc29sZS5sb2coYFtUQVMgREVCVUddIFN0YXJ0aW5nIHN0YXR1cyBwb2xsaW5nIHdpdGggaW50ZXJ2YWwgJHtpbnRlcnZhbE1zfW1zYCk7XG5cbiAgICAvLyBJbml0aWFsIHN0YXR1cyBmZXRjaFxuICAgIHRoaXMuZmV0Y2hBbmRQcm9jZXNzU3RhdHVzKHBhcmFtcyk7XG5cbiAgICAvLyBTZXQgdXAgcGVyaW9kaWMgcG9sbGluZ1xuICAgIHRoaXMuc3RhdHVzUG9sbGluZ0ludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgdGhpcy5mZXRjaEFuZFByb2Nlc3NTdGF0dXMocGFyYW1zKTtcbiAgICB9LCBpbnRlcnZhbE1zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9wIGF1dG9tYXRpYyBzdGF0dXMgcG9sbGluZy5cbiAgICovXG4gIHB1YmxpYyBzdG9wU3RhdHVzUG9sbGluZygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdGF0dXNQb2xsaW5nSW50ZXJ2YWwpIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5zdGF0dXNQb2xsaW5nSW50ZXJ2YWwpO1xuICAgICAgdGhpcy5zdGF0dXNQb2xsaW5nSW50ZXJ2YWwgPSBudWxsO1xuICAgIH1cbiAgICAvLyBEbyBOT1QgcmVzZXQgd2FpdGluZyByb29tIHN0YXRlIGhlcmUsIGFzIG90aGVyIGNvbXBvbmVudHMgbWlnaHQgb2JzZXJ2ZSBpdFxuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0IHBvbGxpbmcgc3RhdGUgKHdhaXRpbmcgcm9vbSwgb3duZXIgc3RhdHVzLCBldGMpXG4gICAqIENhbGwgdGhpcyB3aGVuIGNvbXBsZXRlbHkgZXhpdGluZyB0aGUgZmxvd1xuICAgKi9cbiAgcHVibGljIHJlc2V0UG9sbGluZ1N0YXRlKCk6IHZvaWQge1xuICAgIHRoaXMuc3RvcFN0YXR1c1BvbGxpbmcoKTtcbiAgICB0aGlzLndhaXRpbmdSb29tVXNlcnNTdWJqZWN0Lm5leHQoW10pO1xuICAgIHRoaXMub3duZXJIYXNKb2luZWRTdWJqZWN0Lm5leHQoZmFsc2UpO1xuICAgIHRoaXMub3duZXJIYXNMZWZ0U3ViamVjdC5uZXh0KGZhbHNlKTtcbiAgICB0aGlzLmpvaW5hYmxlU3ViamVjdC5uZXh0KGZhbHNlKTtcbiAgICB0aGlzLndhc093bmVyUHJlc2VudCA9IGZhbHNlO1xuICB9XG5cbiAgLy8gR2V0dGVyc1xuICBwdWJsaWMgZ2V0IGN1cnJlbnRTZXNzaW9uKCk6IE9ULlNlc3Npb24gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5zZXNzaW9uO1xuICB9XG5cbiAgcHVibGljIGdldCBjdXJyZW50UHVibGlzaGVyKCk6IE9ULlB1Ymxpc2hlciB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLnB1Ymxpc2hlcjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY3VycmVudFN1YnNjcmliZXJzKCk6IE9ULlN1YnNjcmliZXJbXSB7XG4gICAgcmV0dXJuIHRoaXMuc3Vic2NyaWJlcnM7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHNlc3Npb25JZCgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50U2Vzc2lvbklkO1xuICB9XG5cbiAgcHVibGljIGdldCB0b2tlbigpOiBzdHJpbmcgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50VG9rZW47XG4gIH1cblxuICBwdWJsaWMgZ2V0IHByb3h5U2Vzc2lvbklkKCk6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLnByb3h5VmlkZW9TZXNzaW9uSWQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHByb3h5VG9rZW4oKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMucHJveHlWaWRlb1Rva2VuO1xuICB9XG5cbiAgcHVibGljIGdldCBidXNpbmVzc1JvbGUoKTogVGFzQnVzaW5lc3NSb2xlIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50QnVzaW5lc3NSb2xlO1xuICB9XG5cbiAgcHVibGljIGdldCBpc011dGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzTXV0ZWRTdWJqZWN0LmdldFZhbHVlKCk7XG4gIH1cblxuICAvLyBWaWV3IE1vZGUgTWV0aG9kc1xuICBwdWJsaWMgc2V0Vmlld01vZGUobW9kZTogVmlld01vZGUpOiB2b2lkIHtcbiAgICB0aGlzLnZpZXdNb2RlU3ViamVjdC5uZXh0KG1vZGUpO1xuICAgIGlmICh0aGlzLmN1cnJlbnRTZXNzaW9uSWQgJiYgdGhpcy5jdXJyZW50VG9rZW4pIHtcbiAgICAgIHRoaXMuc2F2ZVNlc3Npb25TdGF0ZShcbiAgICAgICAgdGhpcy5jdXJyZW50U2Vzc2lvbklkLFxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbixcbiAgICAgICAgbW9kZSxcbiAgICAgICAgdGhpcy5jdXJyZW50QnVzaW5lc3NSb2xlXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBlbnRlclBpcE1vZGUoKTogdm9pZCB7XG4gICAgdGhpcy52aWV3TW9kZVN1YmplY3QubmV4dChWaWV3TW9kZS5QSVApO1xuICAgIGlmICh0aGlzLmN1cnJlbnRTZXNzaW9uSWQgJiYgdGhpcy5jdXJyZW50VG9rZW4pIHtcbiAgICAgIHRoaXMuc2F2ZVNlc3Npb25TdGF0ZShcbiAgICAgICAgdGhpcy5jdXJyZW50U2Vzc2lvbklkLFxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbixcbiAgICAgICAgVmlld01vZGUuUElQLFxuICAgICAgICB0aGlzLmN1cnJlbnRCdXNpbmVzc1JvbGVcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGV4aXRQaXBNb2RlKCk6IHZvaWQge1xuICAgIHRoaXMudmlld01vZGVTdWJqZWN0Lm5leHQoVmlld01vZGUuRlVMTFNDUkVFTik7XG4gICAgaWYgKHRoaXMuY3VycmVudFNlc3Npb25JZCAmJiB0aGlzLmN1cnJlbnRUb2tlbikge1xuICAgICAgdGhpcy5zYXZlU2Vzc2lvblN0YXRlKFxuICAgICAgICB0aGlzLmN1cnJlbnRTZXNzaW9uSWQsXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLFxuICAgICAgICBWaWV3TW9kZS5GVUxMU0NSRUVOLFxuICAgICAgICB0aGlzLmN1cnJlbnRCdXNpbmVzc1JvbGVcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGlzUGlwTW9kZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy52aWV3TW9kZVN1YmplY3QuZ2V0VmFsdWUoKSA9PT0gVmlld01vZGUuUElQO1xuICB9XG5cbiAgLy8gQXVkaW8gQ29udHJvbFxuICBwdWJsaWMgdG9nZ2xlTXV0ZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5wdWJsaXNoZXIpIHtcbiAgICAgIGNvbnN0IG5ld011dGVTdGF0ZSA9ICF0aGlzLmlzTXV0ZWRTdWJqZWN0LmdldFZhbHVlKCk7XG4gICAgICBjb25zdCBzaG91bGRFbmFibGVBdWRpbyA9ICFuZXdNdXRlU3RhdGU7XG5cbiAgICAgIC8vIFVzZSBPcGVuVG9rJ3MgcHVibGlzaEF1ZGlvXG4gICAgICB0aGlzLnB1Ymxpc2hlci5wdWJsaXNoQXVkaW8oc2hvdWxkRW5hYmxlQXVkaW8pO1xuXG4gICAgICAvLyBBbHNvIGRpcmVjdGx5IGNvbnRyb2wgdGhlIE1lZGlhU3RyZWFtVHJhY2sgYXMgYmFja3VwXG4gICAgICBjb25zdCBhdWRpb1RyYWNrID0gdGhpcy5wdWJsaXNoZXIuZ2V0QXVkaW9Tb3VyY2U/LigpO1xuICAgICAgaWYgKGF1ZGlvVHJhY2spIHtcbiAgICAgICAgYXVkaW9UcmFjay5lbmFibGVkID0gc2hvdWxkRW5hYmxlQXVkaW87XG4gICAgICB9XG5cbiAgICAgIHRoaXMuaXNNdXRlZFN1YmplY3QubmV4dChuZXdNdXRlU3RhdGUpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZXRNdXRlKG11dGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucHVibGlzaGVyKSB7XG4gICAgICB0aGlzLnB1Ymxpc2hlci5wdWJsaXNoQXVkaW8oIW11dGVkKTtcbiAgICAgIHRoaXMuaXNNdXRlZFN1YmplY3QubmV4dChtdXRlZCk7XG4gICAgfVxuICB9XG5cbiAgLy8gU2Vzc2lvbiBNYW5hZ2VtZW50XG4gIHB1YmxpYyBkaXNjb25uZWN0U2Vzc2lvbihjbGVhclN0b3JhZ2U6IGJvb2xlYW4gPSB0cnVlKTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coXG4gICAgICAnW1RBUyBERUJVR10gVGFzU2VydmljZS5kaXNjb25uZWN0U2Vzc2lvbiBjYWxsZWQuIGNsZWFyU3RvcmFnZTonLFxuICAgICAgY2xlYXJTdG9yYWdlXG4gICAgKTtcblxuICAgIC8vIENhbGwgZmluaXNoU2Vzc2lvbiBiZWZvcmUgZGlzY29ubmVjdGluZyBpZiB3ZSBoYXZlIGEgc2Vzc2lvbklkXG4gICAgY29uc3Qgc2Vzc2lvbklkVG9GaW5pc2ggPSB0aGlzLmN1cnJlbnRTZXNzaW9uSWQ7XG5cbiAgICAvLyBDbGVhciBzdG9yYWdlIEZJUlNUIHRvIHByZXZlbnQgYW55IHJhY2UgY29uZGl0aW9ucyB3aGVyZSBzdGF0ZSBtaWdodCBiZSBzYXZlZCBhZnRlciBkaXNjb25uZWN0XG4gICAgaWYgKGNsZWFyU3RvcmFnZSkge1xuICAgICAgdGhpcy5jbGVhclNlc3Npb25TdGF0ZSgpO1xuICAgICAgLy8gU2V0IGEgZmxhZyB0byBpbmRpY2F0ZSB0aGlzIHNlc3Npb24gd2FzIGludGVudGlvbmFsbHkgZGlzY29ubmVjdGVkXG4gICAgICAvLyBUaGlzIHByZXZlbnRzIHJlY29ubmVjdGlvbiBvbiBwYWdlIHJlbG9hZFxuICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSh0aGlzLkRJU0NPTk5FQ1RFRF9GTEFHX0tFWSwgJ3RydWUnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zZXNzaW9uKSB7XG4gICAgICB0aGlzLnNlc3Npb24uZGlzY29ubmVjdCgpO1xuICAgICAgdGhpcy5zZXNzaW9uID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy5wdWJsaXNoZXIgPSBudWxsO1xuICAgIHRoaXMuc3Vic2NyaWJlcnMgPSBbXTtcbiAgICB0aGlzLmN1cnJlbnRTZXNzaW9uSWQgPSBudWxsO1xuICAgIHRoaXMuY3VycmVudFRva2VuID0gbnVsbDtcbiAgICB0aGlzLnByb3h5VmlkZW9TZXNzaW9uSWQgPSBudWxsO1xuICAgIHRoaXMucHJveHlWaWRlb1Rva2VuID0gbnVsbDtcbiAgICB0aGlzLmlzTXV0ZWRTdWJqZWN0Lm5leHQoZmFsc2UpOyAvLyBSZXNldCBtdXRlIHN0YXRlXG4gICAgdGhpcy52aWV3TW9kZVN1YmplY3QubmV4dChWaWV3TW9kZS5GVUxMU0NSRUVOKTtcbiAgICB0aGlzLmNhbGxTdGF0ZVN1YmplY3QubmV4dChDYWxsU3RhdGUuRElTQ09OTkVDVEVEKTtcblxuICAgIC8vIENhbGwgcHJveHkgZmluaXNoIGFmdGVyIGRpc2Nvbm5lY3RpbmcgKG9ubHkgaWYgbm90IGFscmVhZHkgZmluaXNoaW5nKVxuICAgIGlmIChzZXNzaW9uSWRUb0ZpbmlzaCAmJiAhdGhpcy5pc0ZpbmlzaGluZ1Nlc3Npb24pIHtcbiAgICAgIHRoaXMuaXNGaW5pc2hpbmdTZXNzaW9uID0gdHJ1ZTtcbiAgICAgIHRoaXMuZmluaXNoUHJveHlWaWRlb1Nlc3Npb24oe1xuICAgICAgICBzZXNzaW9uSWQ6IHNlc3Npb25JZFRvRmluaXNoLFxuICAgICAgICBidXNpbmVzc1JvbGU6IHRoaXMuY3VycmVudEJ1c2luZXNzUm9sZSxcbiAgICAgIH0pLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdbVEFTIERFQlVHXSBTZXNzaW9uIGZpbmlzaGVkIHN1Y2Nlc3NmdWxseTonLCByZXNwb25zZSk7XG4gICAgICAgICAgdGhpcy5pc0ZpbmlzaGluZ1Nlc3Npb24gPSBmYWxzZTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tUQVMgREVCVUddIEVycm9yIGZpbmlzaGluZyBzZXNzaW9uOicsIGVycm9yKTtcbiAgICAgICAgICB0aGlzLmlzRmluaXNoaW5nU2Vzc2lvbiA9IGZhbHNlO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGlzQ2FsbEFjdGl2ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jYWxsU3RhdGVTdWJqZWN0LmdldFZhbHVlKCkgPT09IENhbGxTdGF0ZS5DT05ORUNURUQ7XG4gIH1cblxuICAvLyBTdGF0ZSBQZXJzaXN0ZW5jZVxuICBwcml2YXRlIHNhdmVTZXNzaW9uU3RhdGUoXG4gICAgc2Vzc2lvbklkOiBzdHJpbmcsXG4gICAgdG9rZW46IHN0cmluZyxcbiAgICB2aWV3TW9kZTogVmlld01vZGUsXG4gICAgYnVzaW5lc3NSb2xlOiBUYXNCdXNpbmVzc1JvbGUgPSBUYXNCdXNpbmVzc1JvbGUuVVNFUlxuICApOiB2b2lkIHtcbiAgICBjb25zdCBzdGF0ZSA9IHtcbiAgICAgIHNlc3Npb25JZCxcbiAgICAgIHRva2VuLFxuICAgICAgdmlld01vZGUsXG4gICAgICBidXNpbmVzc1JvbGUsXG4gICAgfTtcbiAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKHRoaXMuU1RPUkFHRV9LRVksIEpTT04uc3RyaW5naWZ5KHN0YXRlKSk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFyU2Vzc2lvblN0YXRlKCk6IHZvaWQge1xuICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5TVE9SQUdFX0tFWSk7XG4gICAgLy8gQWxzbyBjbGVhciB0aGUgZGlzY29ubmVjdGVkIGZsYWcgd2hlbiBjbGVhcmluZyBzdGF0ZVxuICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5ESVNDT05ORUNURURfRkxBR19LRVkpO1xuICB9XG5cbiAgcHVibGljIGNhblJlc3RvcmVTZXNzaW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXNlc3Npb25TdG9yYWdlLmdldEl0ZW0odGhpcy5TVE9SQUdFX0tFWSk7XG4gIH1cblxuICBwdWJsaWMgcmVzdG9yZVNlc3Npb24oY29udGFpbmVySWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHNhdmVkU3RhdGUgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKHRoaXMuU1RPUkFHRV9LRVkpO1xuICAgIGlmICghc2F2ZWRTdGF0ZSkgcmV0dXJuO1xuXG4gICAgLy8gQ2hlY2sgaWYgdGhpcyBzZXNzaW9uIHdhcyBpbnRlbnRpb25hbGx5IGRpc2Nvbm5lY3RlZFxuICAgIC8vIElmIHNvLCBkb24ndCByZXN0b3JlIGl0IG9uIHBhZ2UgcmVsb2FkXG4gICAgY29uc3Qgd2FzRGlzY29ubmVjdGVkID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSh0aGlzLkRJU0NPTk5FQ1RFRF9GTEFHX0tFWSk7XG4gICAgaWYgKHdhc0Rpc2Nvbm5lY3RlZCA9PT0gJ3RydWUnKSB7XG4gICAgICBjb25zb2xlLmxvZygnW1RBUyBERUJVR10gU2Vzc2lvbiB3YXMgaW50ZW50aW9uYWxseSBkaXNjb25uZWN0ZWQsIHNraXBwaW5nIHJlc3RvcmUnKTtcbiAgICAgIHRoaXMuY2xlYXJTZXNzaW9uU3RhdGUoKTtcbiAgICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5ESVNDT05ORUNURURfRkxBR19LRVkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIERvbid0IHJlc3RvcmUgaWYgd2UncmUgYWxyZWFkeSBkaXNjb25uZWN0ZWQgb3IgaWYgdGhlcmUncyBubyBhY3RpdmUgc2Vzc2lvblxuICAgIC8vIFRoaXMgcHJldmVudHMgcmVzdG9yaW5nIHNlc3Npb25zIHRoYXQgd2VyZSBwcm9wZXJseSBkaXNjb25uZWN0ZWRcbiAgICBpZiAodGhpcy5jYWxsU3RhdGVTdWJqZWN0LmdldFZhbHVlKCkgPT09IENhbGxTdGF0ZS5ESVNDT05ORUNURUQpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdbVEFTIERFQlVHXSBDYWxsIHN0YXRlIGlzIERJU0NPTk5FQ1RFRCwgc2tpcHBpbmcgcmVzdG9yZScpO1xuICAgICAgdGhpcy5jbGVhclNlc3Npb25TdGF0ZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdGF0ZSA9IEpTT04ucGFyc2Uoc2F2ZWRTdGF0ZSk7XG4gICAgICBpZiAoc3RhdGUuc2Vzc2lvbklkICYmIHN0YXRlLnRva2VuKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdbVEFTIERFQlVHXSBSZXN0b3Jpbmcgc2Vzc2lvbiBmcm9tIHN0b3JhZ2UnKTtcbiAgICAgICAgLy8gRm9yY2UgUGlQIG1vZGUgZm9yIHJlc3RvcmF0aW9uIHRvIGVuc3VyZSBVSSBjb25zaXN0ZW5jeVxuICAgICAgICB0aGlzLnZpZXdNb2RlU3ViamVjdC5uZXh0KFZpZXdNb2RlLlBJUCk7XG5cbiAgICAgICAgaWYgKHN0YXRlLmJ1c2luZXNzUm9sZSkge1xuICAgICAgICAgIHRoaXMuY3VycmVudEJ1c2luZXNzUm9sZSA9IHN0YXRlLmJ1c2luZXNzUm9sZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29ubmVjdFNlc3Npb24oXG4gICAgICAgICAgc3RhdGUuc2Vzc2lvbklkLFxuICAgICAgICAgIHN0YXRlLnRva2VuLFxuICAgICAgICAgIGNvbnRhaW5lcklkLCAvLyBVc2UgdGhlIHNhbWUgY29udGFpbmVyIGZvciBib3RoIHNpbmNlIHdlIGFyZSBpbiBQaVBcbiAgICAgICAgICBjb250YWluZXJJZCxcbiAgICAgICAgICB0aGlzLmN1cnJlbnRCdXNpbmVzc1JvbGVcbiAgICAgICAgKVxuICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdbVEFTIERFQlVHXSBTZXNzaW9uIHJlc3RvcmVkIHN1Y2Nlc3NmdWxseScpO1xuICAgICAgICAgICAgLy8gQ2xlYXIgdGhlIGRpc2Nvbm5lY3RlZCBmbGFnIGlmIHJlc3RvcmF0aW9uIHN1Y2NlZWRzXG4gICAgICAgICAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuRElTQ09OTkVDVEVEX0ZMQUdfS0VZKTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdbVEFTIERFQlVHXSBGYWlsZWQgdG8gcmVzdG9yZSBzZXNzaW9uOicsIGVycik7XG4gICAgICAgICAgICB0aGlzLmNsZWFyU2Vzc2lvblN0YXRlKCk7IC8vIENsZWFyIGJhZCBzdGF0ZVxuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tUQVMgREVCVUddIEVycm9yIHBhcnNpbmcgc2F2ZWQgc2Vzc2lvbiBzdGF0ZScsIGUpO1xuICAgICAgdGhpcy5jbGVhclNlc3Npb25TdGF0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEFQSSBNZXRob2RzXG4gIC8qKlxuICAgKiBQUk9YWSBjaXJjdWl0IHRva2VuOiAvdjIvcHJveHkvdmlkZW8vc3RhcnRcbiAgICovXG4gIHB1YmxpYyBzdGFydFByb3h5VmlkZW9TZXNzaW9uKFxuICAgIHBheWxvYWQ6IFN0YXJ0U2Vzc2lvblJlcXVlc3RcbiAgKTogT2JzZXJ2YWJsZTxHZW5lcmF0ZVRva2VuUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAucG9zdDxHZW5lcmF0ZVRva2VuUmVzcG9uc2U+KCd2Mi9wcm94eS92aWRlby9zdGFydCcsIHtcbiAgICAgICAgYm9keTogcGF5bG9hZCxcbiAgICAgICAgaGVhZGVyczoge30sXG4gICAgICB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzcG9uc2U6IGFueSkgPT4gcmVzcG9uc2UgYXMgR2VuZXJhdGVUb2tlblJlc3BvbnNlKSxcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdUQVMgU2VydmljZTogc3RhcnRQcm94eVZpZGVvU2Vzc2lvbiBmYWlsZWQnLCBlcnJvcik7XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFBST1hZIGNpcmN1aXQgc3RhdHVzOiAvdjIvcHJveHkvdmlkZW8vc3RhdHVzXG4gICAqL1xuICBwdWJsaWMgZ2V0UHJveHlWaWRlb1N0YXR1cyhcbiAgICBwYXlsb2FkOiBQcm94eVZpZGVvU3RhdHVzUmVxdWVzdFxuICApOiBPYnNlcnZhYmxlPFByb3h5VmlkZW9TdGF0dXNSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcbiAgICAgIC5wb3N0PFByb3h5VmlkZW9TdGF0dXNSZXNwb25zZT4oJ3YyL3Byb3h5L3ZpZGVvL3N0YXR1cycsIHtcbiAgICAgICAgYm9keTogcGF5bG9hZCxcbiAgICAgICAgaGVhZGVyczoge30sXG4gICAgICB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzcG9uc2U6IGFueSkgPT4gcmVzcG9uc2UgYXMgUHJveHlWaWRlb1N0YXR1c1Jlc3BvbnNlKSxcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdUQVMgU2VydmljZTogZ2V0UHJveHlWaWRlb1N0YXR1cyBmYWlsZWQnLCBlcnJvcik7XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFBST1hZIGNpcmN1aXQgdXNlciBtb2RpZmljYXRpb246IC92Mi9wcm94eS92aWRlby91c2VyL21vZGlmeVxuICAgKi9cbiAgcHVibGljIG1vZGlmeVByb3h5VmlkZW9Vc2VyKHBheWxvYWQ6IFByb3h5VmlkZW9Vc2VyTW9kaWZ5UmVxdWVzdCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgLnBhdGNoPGFueT4oJ3YyL3Byb3h5L3ZpZGVvL3VzZXIvbW9kaWZ5Jywge1xuICAgICAgICBib2R5OiBwYXlsb2FkLFxuICAgICAgICBoZWFkZXJzOiB7fSxcbiAgICAgIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdUQVMgU2VydmljZTogbW9kaWZ5UHJveHlWaWRlb1VzZXIgZmFpbGVkJywgZXJyb3IpO1xuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBmaW5pc2hQcm94eVZpZGVvU2Vzc2lvbihwYXlsb2FkOiBQcm94eVZpZGVvRmluaXNoUmVxdWVzdCkge1xuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcbiAgICAgIC5wb3N0PEZpbmlzaFNlc3Npb25SZXNwb25zZT4oJ3YyL3Byb3h5L3ZpZGVvL2ZpbmlzaCcsIHtcbiAgICAgICAgYm9keTogcGF5bG9hZCxcbiAgICAgICAgaGVhZGVyczoge30sXG4gICAgICB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzcG9uc2U6IGFueSkgPT4gcmVzcG9uc2UgYXMgRmluaXNoU2Vzc2lvblJlc3BvbnNlKSxcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdUQVMgU2VydmljZTogZmluaXNoUHJveHlWaWRlb1Nlc3Npb24gZmFpbGVkJywgZXJyb3IpO1xuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdXNlciBhcHBvaW50bWVudHMgd2l0aGluIGEgZGF0ZSByYW5nZS5cbiAgICogQHBhcmFtIHBhcmFtcyBEYXRlIHJhbmdlIGZvciBxdWVyeWluZyBhcHBvaW50bWVudHNcbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZSBvZiBhcHBvaW50bWVudCBhcnJheVxuICAgKi9cbiAgcHVibGljIGdldEFwcG9pbnRtZW50cyhwYXJhbXM6IEdldEFwcG9pbnRtZW50c1JlcXVlc3QpOiBPYnNlcnZhYmxlPFRhc0FwcG9pbnRtZW50W10+IHtcbiAgICAvLyBOb3JtYWxpemUgZGF0ZXMgdG8gWVlZWS1NTS1ERCBmb3JtYXQgKGhhbmRsZXMgSVNPIHRpbWVzdGFtcHMgbGlrZSAyMDI2LTAxLTE1VDAzOjAwOjAwLjAwMCswMDAwKVxuICAgIGNvbnN0IG5vcm1hbGl6ZURhdGUgPSAoZGF0ZTogc3RyaW5nKTogc3RyaW5nID0+IGRhdGUuc3BsaXQoJ1QnKVswXTtcbiAgICBjb25zdCBmcm9tRGF0ZSA9IG5vcm1hbGl6ZURhdGUocGFyYW1zLmZyb21EYXRlKTtcbiAgICBjb25zdCB0b0RhdGUgPSBub3JtYWxpemVEYXRlKHBhcmFtcy50b0RhdGUpO1xuICAgIFxuICAgIGxldCB1cmw6IHN0cmluZztcblxuICAgIC8vIElmIGRhdGVzIGFyZSB0aGUgc2FtZSwgdXNlIG9ubHkgaW5pdERhdGVcbiAgICAvLyBpZiAoZnJvbURhdGUgPT09IHRvRGF0ZSkge1xuICAgIC8vICAgdXJsID0gYHYyL3Byb3h5L2FwcG9pbnRtZW50L2FnZW5kYXMvdXNlci9hcHBvaW50bWVudHM/ZnJvbURhdGU9JHtmcm9tRGF0ZX0mcm9vbVR5cGU9VEFTYDtcbiAgICAvLyB9IGVsc2Uge1xuICAgICAgdXJsID0gYHYyL3Byb3h5L2FwcG9pbnRtZW50L2FnZW5kYXMvdXNlci9hcHBvaW50bWVudHM/ZnJvbURhdGU9JHtmcm9tRGF0ZX0mdG9EYXRlPSR7dG9EYXRlfSZyb29tVHlwZT1UQVNgO1xuICAgIC8vIH1cblxuICAgIGlmIChwYXJhbXMuZW50aXR5SWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdXJsICs9IGAmZW50aXR5SWQ9JHtwYXJhbXMuZW50aXR5SWR9YDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAuZ2V0PFRhc0FwcG9pbnRtZW50W10+KHVybCwgeyBoZWFkZXJzOiB7fSB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignVEFTIFNlcnZpY2U6IGdldEFwcG9pbnRtZW50cyBmYWlsZWQnLCBlcnJvcik7XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IGF1dG9tYXRpYyBzdGF0dXMgcG9sbGluZyBmb3IgdGhlIGN1cnJlbnQgc2Vzc2lvbi5cbiAgICogU3RhdHVzIGlzIHBvbGxlZCBldmVyeSBTVEFUVVNfUE9MTF9JTlRFUlZBTF9NUyBtaWxsaXNlY29uZHMuXG4gICAqL1xuXG5cbiAgLyoqXG4gICAqIFN0b3AgYXV0b21hdGljIHN0YXR1cyBwb2xsaW5nLlxuICAgKi9cblxuXG4gIC8qKlxuICAgKiBGZXRjaCBzdGF0dXMgYW5kIHByb2Nlc3MgdGhlIHJlc3BvbnNlLlxuICAgKi9cbiAgcHJpdmF0ZSBmZXRjaEFuZFByb2Nlc3NTdGF0dXMocGFyYW1zOiBQcm94eVZpZGVvU3RhdHVzUmVxdWVzdCk6IHZvaWQge1xuICAgIHRoaXMuZ2V0UHJveHlWaWRlb1N0YXR1cyhwYXJhbXMpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgdGhpcy5wcm9jZXNzU3RhdHVzUmVzcG9uc2UocmVzcG9uc2UpO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoZXJyKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tUQVMgREVCVUddIFN0YXR1cyBwb2xsaW5nIGVycm9yOicsIGVycik7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb2Nlc3Mgc3RhdHVzIHJlc3BvbnNlIHRvIHVwZGF0ZSB3YWl0aW5nIHJvb20gdXNlcnMgYW5kIG93bmVyIGpvaW4gc3RhdHVzLlxuICAgKi9cbiAgcHJpdmF0ZSBwcm9jZXNzU3RhdHVzUmVzcG9uc2UocmVzcG9uc2U6IFByb3h5VmlkZW9TdGF0dXNSZXNwb25zZSk6IHZvaWQge1xuICAgIGNvbnN0IGNvbnRlbnQgPSByZXNwb25zZS5jb250ZW50O1xuXG4gICAgLy8gVXBkYXRlIHZpZGVvQ2FsbElkIGlmIGF2YWlsYWJsZVxuICAgIGlmIChjb250ZW50LnZpZGVvQ2FsbElkKSB7XG4gICAgICB0aGlzLmN1cnJlbnRWaWRlb0NhbGxJZCA9IGNvbnRlbnQudmlkZW9DYWxsSWQ7XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIHNlc3Npb25JZCBpZiBhdmFpbGFibGVcbiAgICBpZiAoY29udGVudC5zZXNzaW9uSWQpIHtcbiAgICAgIHRoaXMuY3VycmVudFNlc3Npb25JZCA9IGNvbnRlbnQuc2Vzc2lvbklkO1xuICAgICAgdGhpcy5wcm94eVZpZGVvU2Vzc2lvbklkID0gY29udGVudC5zZXNzaW9uSWQ7XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIGpvaW5hYmxlIHN0YXR1c1xuICAgIHRoaXMuam9pbmFibGVTdWJqZWN0Lm5leHQoY29udGVudC5qb2luYWJsZSk7XG5cbiAgICAvLyBVcGRhdGUgYWN0aXZhdGVHZW8gc3RhdHVzXG4gICAgaWYgKGNvbnRlbnQuYWN0aXZhdGVHZW8gIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc29sZS5sb2coJ1tUQVMgREVCVUddIGFjdGl2YXRlR2VvIHJlY2VpdmVkOicsIGNvbnRlbnQuYWN0aXZhdGVHZW8pO1xuICAgICAgdGhpcy5hY3RpdmF0ZUdlb1N1YmplY3QubmV4dChjb250ZW50LmFjdGl2YXRlR2VvKTtcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgZ2VvUmVxdWVzdEFjdGl2ZSBzdGF0dXMgKG93bmVyIHdhaXRpbmcgZm9yIHVzZXIgZ2VvIHJlc3BvbnNlKVxuICAgIGlmIChjb250ZW50Lmdlb1JlcXVlc3RBY3RpdmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc29sZS5sb2coJ1tUQVMgREVCVUddIGdlb1JlcXVlc3RBY3RpdmUgcmVjZWl2ZWQ6JywgY29udGVudC5nZW9SZXF1ZXN0QWN0aXZlKTtcbiAgICAgIHRoaXMuZ2VvUmVxdWVzdEFjdGl2ZVN1YmplY3QubmV4dChjb250ZW50Lmdlb1JlcXVlc3RBY3RpdmUpO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSBhbGxHZW9HcmFudGVkIHN0YXR1cyAoYWxsIHVzZXJzIHJlc3BvbmRlZCB3aXRoIGdlbylcbiAgICBpZiAoY29udGVudC5hbGxHZW9HcmFudGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdbVEFTIERFQlVHXSBhbGxHZW9HcmFudGVkIHJlY2VpdmVkOicsIGNvbnRlbnQuYWxsR2VvR3JhbnRlZCk7XG4gICAgICB0aGlzLmFsbEdlb0dyYW50ZWRTdWJqZWN0Lm5leHQoY29udGVudC5hbGxHZW9HcmFudGVkKTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiBvd25lciBoYXMgam9pbmVkXG4gICAgY29uc3Qgb3duZXJKb2luZWQgPSB0aGlzLnRhc1V0aWxpdHlTZXJ2aWNlLmNoZWNrSWZPd25lckpvaW5lZChjb250ZW50LnVzZXJzKTtcbiAgICB0aGlzLm93bmVySGFzSm9pbmVkU3ViamVjdC5uZXh0KG93bmVySm9pbmVkKTtcblxuICAgIC8vIERldGVjdCBpZiBvd25lciBsZWZ0OiB3YXMgcHJlc2VudCwgbm93IG5vdCBwcmVzZW50XG4gICAgaWYgKHRoaXMud2FzT3duZXJQcmVzZW50ICYmICFvd25lckpvaW5lZCkge1xuICAgICAgY29uc29sZS5sb2coJ1tUQVMgREVCVUddIE93bmVyIGhhcyBsZWZ0IHRoZSBzZXNzaW9uJyk7XG4gICAgICB0aGlzLm93bmVySGFzTGVmdFN1YmplY3QubmV4dCh0cnVlKTtcbiAgICB9XG5cbiAgICBpZiAob3duZXJKb2luZWQpIHtcbiAgICAgIHRoaXMud2FzT3duZXJQcmVzZW50ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBFeHRyYWN0IHdhaXRpbmcgcm9vbSB1c2VycyAoc3RhdHVzID09PSBXQUlUSU5HKVxuICAgIGNvbnN0IHdhaXRpbmdVc2VyczogV2FpdGluZ1Jvb21Vc2VyW10gPSBjb250ZW50LnVzZXJzXG4gICAgICAuZmlsdGVyKCh1KSA9PiAodS5zdGF0dXMgYXMgc3RyaW5nKSA9PT0gJ1dBSVRJTkcnKVxuICAgICAgLm1hcCgodSkgPT4gKHtcbiAgICAgICAgdXNlcklkOiB1LnVzZXJJZCxcbiAgICAgICAgbmFtZTogYFVzZXIgJHt1LnVzZXJJZH1gLCAvLyBUT0RPOiBGZXRjaCBhY3R1YWwgdXNlciBuYW1lcyBmcm9tIGEgdXNlciBzZXJ2aWNlXG4gICAgICAgIHN0YXR1czogUm9vbVVzZXJTdGF0dXMuV0FJVElORyxcbiAgICAgIH0pKTtcblxuICAgIHRoaXMud2FpdGluZ1Jvb21Vc2Vyc1N1YmplY3QubmV4dCh3YWl0aW5nVXNlcnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkbWl0IGEgdXNlciBmcm9tIHRoZSB3YWl0aW5nIHJvb20gYnkgY2hhbmdpbmcgdGhlaXIgc3RhdHVzLlxuICAgKi9cbiAgcHVibGljIGFkbWl0VXNlckZyb21XYWl0aW5nUm9vbShcbiAgICB1c2VySWQ6IG51bWJlcixcbiAgICB2aWRlb0NhbGxJZDogbnVtYmVyXG4gICk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMubW9kaWZ5UHJveHlWaWRlb1VzZXIoe1xuICAgICAgdXNlcklkLFxuICAgICAgdmlkZW9DYWxsSWQsXG4gICAgICBhY3Rpb246IFVzZXJDYWxsQWN0aW9uLldBSVRJTkdfUk9PTV9MRUFWRSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIEdldHRlcnMgZm9yIGN1cnJlbnQgY2FsbCBjb250ZXh0XG4gIHB1YmxpYyBnZXQgYXBwb2ludG1lbnRJZCgpOiBudW1iZXIgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50QXBwb2ludG1lbnRJZDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdmlkZW9DYWxsSWQoKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudFZpZGVvQ2FsbElkO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbm5lY3RzIHRvIGEgVG9rQm94IHZpZGVvIHNlc3Npb25cbiAgICovXG4gIHB1YmxpYyBjb25uZWN0U2Vzc2lvbihcbiAgICBzZXNzaW9uSWQ6IHN0cmluZyxcbiAgICB0b2tlbjogc3RyaW5nLFxuICAgIHB1Ymxpc2hlckVsZW1lbnQ6IHN0cmluZyxcbiAgICBzdWJzY3JpYmVyRWxlbWVudDogc3RyaW5nLFxuICAgIGJ1c2luZXNzUm9sZTogVGFzQnVzaW5lc3NSb2xlID0gVGFzQnVzaW5lc3NSb2xlLlVTRVJcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5jYWxsU3RhdGVTdWJqZWN0Lm5leHQoQ2FsbFN0YXRlLkNPTk5FQ1RJTkcpO1xuICAgIHRoaXMuY3VycmVudFNlc3Npb25JZCA9IHNlc3Npb25JZDtcbiAgICB0aGlzLmN1cnJlbnRUb2tlbiA9IHRva2VuO1xuICAgIHRoaXMuY3VycmVudEJ1c2luZXNzUm9sZSA9IGJ1c2luZXNzUm9sZTtcbiAgICB0aGlzLmlzRmluaXNoaW5nU2Vzc2lvbiA9IGZhbHNlOyAvLyBSZXNldCBmbGFnIGZvciBuZXcgc2Vzc2lvblxuXG4gICAgLy8gU2F2ZSBpbml0aWFsIHN0YXRlIChkZWZhdWx0aW5nIHRvIGN1cnJlbnQgdmlldyBtb2RlKVxuICAgIHRoaXMuc2F2ZVNlc3Npb25TdGF0ZShcbiAgICAgIHNlc3Npb25JZCxcbiAgICAgIHRva2VuLFxuICAgICAgdGhpcy52aWV3TW9kZVN1YmplY3QuZ2V0VmFsdWUoKSxcbiAgICAgIGJ1c2luZXNzUm9sZVxuICAgICk7XG4gICAgLy8gQ2xlYXIgdGhlIGRpc2Nvbm5lY3RlZCBmbGFnIHdoZW4gc3RhcnRpbmcgYSBuZXcgY29ubmVjdGlvblxuICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5ESVNDT05ORUNURURfRkxBR19LRVkpO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmICghT1QuY2hlY2tTeXN0ZW1SZXF1aXJlbWVudHMoKSkge1xuICAgICAgICB0aGlzLmNhbGxTdGF0ZVN1YmplY3QubmV4dChDYWxsU3RhdGUuRVJST1IpO1xuICAgICAgICByZWplY3QobmV3IEVycm9yKCdCcm93c2VyIG5vdCBjb21wYXRpYmxlIHdpdGggVG9rQm94JykpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc2Vzc2lvbiA9IE9ULmluaXRTZXNzaW9uKHRoaXMuY29uZmlnLnRva0JveEFwaUtleSwgc2Vzc2lvbklkKTtcblxuICAgICAgLy8gSGFuZGxlIG5ldyBzdHJlYW1zIChyZW1vdGUgcGFydGljaXBhbnRzIGpvaW5pbmcpXG4gICAgICB0aGlzLnNlc3Npb24ub24oJ3N0cmVhbUNyZWF0ZWQnLCAoZXZlbnQpID0+IHtcbiAgICAgICAgY29uc3Qgc3Vic2NyaWJlciA9IHRoaXMuc2Vzc2lvbj8uc3Vic2NyaWJlKFxuICAgICAgICAgIGV2ZW50LnN0cmVhbSxcbiAgICAgICAgICBzdWJzY3JpYmVyRWxlbWVudCxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpbnNlcnRNb2RlOiAnYXBwZW5kJyxcbiAgICAgICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHN1YnNjcmliaW5nIHRvIHN0cmVhbTonLCBlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgICBpZiAoc3Vic2NyaWJlcikge1xuICAgICAgICAgIHRoaXMuc3Vic2NyaWJlcnMucHVzaChzdWJzY3JpYmVyKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIEhhbmRsZSBzdHJlYW1zIGVuZGluZyAocmVtb3RlIHBhcnRpY2lwYW50cyBsZWF2aW5nKVxuICAgICAgdGhpcy5zZXNzaW9uLm9uKCdzdHJlYW1EZXN0cm95ZWQnLCAoZXZlbnQpID0+IHtcbiAgICAgICAgdGhpcy5zdWJzY3JpYmVycyA9IHRoaXMuc3Vic2NyaWJlcnMuZmlsdGVyKFxuICAgICAgICAgIChzdWIpID0+IHN1Yi5zdHJlYW0/LnN0cmVhbUlkICE9PSBldmVudC5zdHJlYW0uc3RyZWFtSWRcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBIYW5kbGUgc2Vzc2lvbiBkaXNjb25uZWN0aW9uXG4gICAgICB0aGlzLnNlc3Npb24ub24oJ3Nlc3Npb25EaXNjb25uZWN0ZWQnLCAoKSA9PiB7XG4gICAgICAgIHRoaXMuY2FsbFN0YXRlU3ViamVjdC5uZXh0KENhbGxTdGF0ZS5ESVNDT05ORUNURUQpO1xuXG4gICAgICAgIC8vIENhbGwgZmluaXNoU2Vzc2lvbiB3aGVuIHNlc3Npb24gaXMgZGlzY29ubmVjdGVkIChlLmcuLCBieSBzZXJ2ZXIpXG4gICAgICAgIC8vIE9ubHkgY2FsbCBpZiBub3QgYWxyZWFkeSBmaW5pc2hpbmcgKHByZXZlbnRzIGR1cGxpY2F0ZSBjYWxscylcbiAgICAgICAgY29uc3Qgc2Vzc2lvbklkVG9GaW5pc2ggPSB0aGlzLmN1cnJlbnRTZXNzaW9uSWQ7XG4gICAgICAgIGlmIChzZXNzaW9uSWRUb0ZpbmlzaCAmJiAhdGhpcy5pc0ZpbmlzaGluZ1Nlc3Npb24pIHtcbiAgICAgICAgICB0aGlzLmlzRmluaXNoaW5nU2Vzc2lvbiA9IHRydWU7XG4gICAgICAgICAgdGhpcy5maW5pc2hQcm94eVZpZGVvU2Vzc2lvbih7XG4gICAgICAgICAgICBzZXNzaW9uSWQ6IHNlc3Npb25JZFRvRmluaXNoLFxuICAgICAgICAgICAgYnVzaW5lc3NSb2xlOiB0aGlzLmN1cnJlbnRCdXNpbmVzc1JvbGUsXG4gICAgICAgICAgfSkuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgIG5leHQ6IChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZygnW1RBUyBERUJVR10gU2Vzc2lvbiBmaW5pc2hlZCBvbiBkaXNjb25uZWN0IGV2ZW50OicsIHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgdGhpcy5pc0ZpbmlzaGluZ1Nlc3Npb24gPSBmYWxzZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tUQVMgREVCVUddIEVycm9yIGZpbmlzaGluZyBzZXNzaW9uIG9uIGRpc2Nvbm5lY3Q6JywgZXJyb3IpO1xuICAgICAgICAgICAgICB0aGlzLmlzRmluaXNoaW5nU2Vzc2lvbiA9IGZhbHNlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIENvbm5lY3QgdG8gc2Vzc2lvblxuICAgICAgdGhpcy5zZXNzaW9uLmNvbm5lY3QodG9rZW4sIChlcnJvcikgPT4ge1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBjb25uZWN0aW5nIHRvIHNlc3Npb246JywgZXJyb3IpO1xuICAgICAgICAgIHRoaXMuY2FsbFN0YXRlU3ViamVjdC5uZXh0KENhbGxTdGF0ZS5FUlJPUik7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJbml0aWFsaXplIHB1Ymxpc2hlciAobG9jYWwgdmlkZW8pXG4gICAgICAgIHRoaXMucHVibGlzaGVyID0gT1QuaW5pdFB1Ymxpc2hlcihcbiAgICAgICAgICBwdWJsaXNoZXJFbGVtZW50LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGluc2VydE1vZGU6ICdhcHBlbmQnLFxuICAgICAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgICAgIGhlaWdodDogJzEwMCUnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgKGVycikgPT4ge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBpbml0aWFsaXppbmcgcHVibGlzaGVyOicsIGVycik7XG4gICAgICAgICAgICAgIHRoaXMuY2FsbFN0YXRlU3ViamVjdC5uZXh0KENhbGxTdGF0ZS5FUlJPUik7XG4gICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFB1Ymxpc2ggdG8gc2Vzc2lvblxuICAgICAgICAgICAgdGhpcy5zZXNzaW9uPy5wdWJsaXNoKHRoaXMucHVibGlzaGVyLCAocHViRXJyKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChwdWJFcnIpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBwdWJsaXNoaW5nIHN0cmVhbTonLCBwdWJFcnIpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2FsbFN0YXRlU3ViamVjdC5uZXh0KENhbGxTdGF0ZS5FUlJPUik7XG4gICAgICAgICAgICAgICAgcmVqZWN0KHB1YkVycik7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsU3RhdGVTdWJqZWN0Lm5leHQoQ2FsbFN0YXRlLkNPTk5FQ1RFRCk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFZpZGVvIEVsZW1lbnQgTW92ZW1lbnQgTWV0aG9kc1xuICBwdWJsaWMgbW92ZVB1Ymxpc2hlclRvKG5ld0NvbnRhaW5lcklkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucHVibGlzaGVyKSByZXR1cm47XG5cbiAgICBjb25zdCBwdWJsaXNoZXJFbGVtZW50ID0gdGhpcy5wdWJsaXNoZXIuZWxlbWVudDtcbiAgICBjb25zdCBuZXdDb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChuZXdDb250YWluZXJJZCk7XG5cbiAgICBpZiAocHVibGlzaGVyRWxlbWVudCAmJiBuZXdDb250YWluZXIpIHtcbiAgICAgIG5ld0NvbnRhaW5lci5hcHBlbmRDaGlsZChwdWJsaXNoZXJFbGVtZW50KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbW92ZVN1YnNjcmliZXJzVG8obmV3Q29udGFpbmVySWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IG5ld0NvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG5ld0NvbnRhaW5lcklkKTtcbiAgICBpZiAoIW5ld0NvbnRhaW5lcikgcmV0dXJuO1xuXG4gICAgdGhpcy5zdWJzY3JpYmVycy5mb3JFYWNoKChzdWJzY3JpYmVyKSA9PiB7XG4gICAgICBjb25zdCBzdWJzY3JpYmVyRWxlbWVudCA9IHN1YnNjcmliZXIuZWxlbWVudDtcbiAgICAgIGlmIChzdWJzY3JpYmVyRWxlbWVudCkge1xuICAgICAgICBuZXdDb250YWluZXIuYXBwZW5kQ2hpbGQoc3Vic2NyaWJlckVsZW1lbnQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE1vdmVzIHRoZSBtYWluIHZpZGVvIChzdWJzY3JpYmVyIGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIHB1Ymxpc2hlcikgdG8gYSBjb250YWluZXIuXG4gICAqIFVzZWQgZm9yIFBpUCBtb2RlIHRvIHNob3cgb25seSBvbmUgdmlkZW8uXG4gICAqL1xuICBwdWJsaWMgbW92ZU1haW5WaWRlb1RvKG5ld0NvbnRhaW5lcklkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBuZXdDb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChuZXdDb250YWluZXJJZCk7XG4gICAgaWYgKCFuZXdDb250YWluZXIpIHJldHVybjtcblxuICAgIC8vIFByZWZlciByZW1vdGUgdmlkZW8gKHN1YnNjcmliZXIpIGFzIG1haW5cbiAgICBpZiAodGhpcy5zdWJzY3JpYmVycy5sZW5ndGggPiAwICYmIHRoaXMuc3Vic2NyaWJlcnNbMF0uZWxlbWVudCkge1xuICAgICAgbmV3Q29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuc3Vic2NyaWJlcnNbMF0uZWxlbWVudCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gRmFsbCBiYWNrIHRvIGxvY2FsIHZpZGVvIChwdWJsaXNoZXIpXG4gICAgaWYgKHRoaXMucHVibGlzaGVyPy5lbGVtZW50KSB7XG4gICAgICBuZXdDb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5wdWJsaXNoZXIuZWxlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1vdmVzIHZpZGVvcyBiYWNrIHRvIGZ1bGxzY3JlZW4gY29udGFpbmVyc1xuICAgKi9cbiAgcHVibGljIG1vdmVWaWRlb3NUb0Z1bGxzY3JlZW4oKTogdm9pZCB7XG4gICAgdGhpcy5tb3ZlU3Vic2NyaWJlcnNUbygnc3Vic2NyaWJlci1jb250YWluZXInKTtcbiAgICB0aGlzLm1vdmVQdWJsaXNoZXJUbygncHVibGlzaGVyLWNvbnRhaW5lcicpO1xuICB9XG59XG4iXX0=
|