@datagrok-libraries/statistics 1.9.2 → 1.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/css/styles.css +229 -0
- package/package.json +3 -2
- package/src/fit/const.d.ts +58 -0
- package/src/fit/const.d.ts.map +1 -0
- package/src/fit/const.js +63 -0
- package/src/fit/fit-data.d.ts.map +1 -1
- package/src/fit/fit-data.js +37 -5
- package/src/fit/new-fit-API.d.ts +6 -0
- package/src/fit/new-fit-API.d.ts.map +1 -1
- package/src/fit/new-fit-API.js +2 -8
- package/src/mpo/dialogs/desirability-mode-dialog.d.ts +14 -0
- package/src/mpo/dialogs/desirability-mode-dialog.d.ts.map +1 -0
- package/src/mpo/dialogs/desirability-mode-dialog.js +198 -0
- package/src/mpo/editors/desirability-editor-factory.d.ts +15 -0
- package/src/mpo/editors/desirability-editor-factory.d.ts.map +1 -0
- package/src/mpo/editors/desirability-editor-factory.js +11 -0
- package/src/mpo/editors/mpo-categorical-editor.d.ts +24 -0
- package/src/mpo/editors/mpo-categorical-editor.d.ts.map +1 -0
- package/src/mpo/editors/mpo-categorical-editor.js +113 -0
- package/src/mpo/editors/mpo-line-editor.d.ts +46 -0
- package/src/mpo/editors/mpo-line-editor.d.ts.map +1 -0
- package/src/mpo/editors/mpo-line-editor.js +583 -0
- package/src/mpo/mpo-profile-editor.d.ts +42 -6
- package/src/mpo/mpo-profile-editor.d.ts.map +1 -1
- package/src/mpo/mpo-profile-editor.js +368 -59
- package/src/mpo/mpo.d.ts +53 -3
- package/src/mpo/mpo.d.ts.map +1 -1
- package/src/mpo/mpo.js +92 -16
- package/src/mpo/utils.d.ts +6 -0
- package/src/mpo/utils.d.ts.map +1 -0
- package/src/mpo/utils.js +17 -0
- package/src/mpo/mpo-line-editor.d.ts +0 -10
- package/src/mpo/mpo-line-editor.d.ts.map +0 -1
- package/src/mpo/mpo-line-editor.js +0 -258
package/src/fit/new-fit-API.js
CHANGED
|
@@ -547,11 +547,5 @@ export function getCurveConfidenceIntervals(data, paramValues, curveFunction, co
|
|
|
547
547
|
};
|
|
548
548
|
return { confidenceTop: top, confidenceBottom: bottom };
|
|
549
549
|
}
|
|
550
|
-
|
|
551
|
-
// {'x': 0, 'y': 0},
|
|
552
|
-
// {'x': 1, 'y': 0.5},
|
|
553
|
-
// {'x': 2, 'y': 1},
|
|
554
|
-
// {'x': 3, 'y': 10, 'outlier': true},
|
|
555
|
-
// {'x': 4, 'y': 0},
|
|
556
|
-
// ]);
|
|
557
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV3LWZpdC1BUEkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJuZXctZml0LUFQSS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSw0QkFBNEI7QUFDNUIsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0QyxPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLE1BQU0sRUFHTixvQkFBb0IsRUFDcEIsT0FBTyxFQUNQLHVCQUF1QixFQUN2QixTQUFTLEVBQ1Qsd0JBQXdCLEVBQ3hCLFdBQVcsRUFDWCwyQkFBMkIsRUFDM0IsZ0JBQWdCLEVBTWEsTUFBTSxFQUFFLFdBQVcsRUFDaEQsZUFBZSxFQUNmLDhCQUE4QixFQUM5QixrQkFBa0IsRUFDbEIsU0FBUyxFQUNULGFBQWEsRUFFYixjQUFjLEdBQ2YsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFDLFNBQVMsRUFBRSxhQUFhLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDcEQsc0JBQXNCO0FBQ3RCLE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBRS9CLE9BQU8sRUFBQyw2QkFBNkIsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBQzVFLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLDJDQUEyQyxDQUFDO0FBRy9FLGtDQUFrQztBQUNsQyxNQUFNLE9BQWdCLFdBQVc7Q0FNaEM7QUFFRCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRztJQUM5QixPQUFPLEVBQUUsU0FBUztJQUNsQixNQUFNLEVBQUUsUUFBUTtJQUNoQixVQUFVLEVBQUUsWUFBWTtJQUN4QixXQUFXLEVBQUUsYUFBYTtJQUMxQixrQkFBa0IsRUFBRSxnQkFBZ0I7SUFDcEMscUJBQXFCLEVBQUUsbUJBQW1CO0NBQ2xDLENBQUM7QUFtQ1gsTUFBTSxPQUFnQixHQUFHO0lBT3ZCLFlBQXNCLE1BQVksRUFBRSxJQUFlO1FBQ2pELElBQUksQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQztRQUN0QixJ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T0FBTyxLQUFLLEdBQUcsUUFBUSxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM1RSxDQUFDLENBQUM7SUFFRixPQUFPLEVBQUMsYUFBYSxFQUFFLEdBQUcsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLEVBQUMsQ0FBQztBQUN4RCxDQUFDO0FBR0QsNENBQTRDO0FBQzVDLHNCQUFzQjtBQUN0Qix3QkFBd0I7QUFDeEIsc0JBQXNCO0FBQ3RCLHdDQUF3QztBQUN4QyxzQkFBc0I7QUFDdEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi9cbmltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5pbXBvcnQge1xuICBGSVRfRlVOQ1RJT05fTElORUFSLFxuICBsaW5lYXIsXG4gIElGaXRTZXJpZXMsXG4gIElGaXRQb2ludCxcbiAgRklUX0ZVTkNUSU9OX1NJR01PSUQsXG4gIHNpZ21vaWQsXG4gIEZJVF9GVU5DVElPTl9MT0dfTElORUFSLFxuICBsb2dMaW5lYXIsXG4gIEZJVF9GVU5DVElPTl9FWFBPTkVOVElBTCxcbiAgZXhwb25lbnRpYWwsXG4gIEZJVF9GVU5DVElPTl80UExfUkVHUkVTU0lPTixcbiAgZm91clBMUmVncmVzc2lvbixcbiAgSUZpdEZ1bmN0aW9uRGVzY3JpcHRpb24sXG4gIEZpdFBhcmFtQm91bmRzLFxuICBGaXRNYXJrZXJUeXBlLFxuICBGaXRPdXRsaWVyTWFya2VyVHlwZSxcbiAgRml0TGluZVN0eWxlLFxuICBGaXRFcnJvck1vZGVsVHlwZSwgRml0Q3VydmUsIGdldEF1YywgZ2V0RGV0Q29lZmYsXG4gIEZJVF9KU19GVU5DVElPTixcbiAgRklUX0ZVTkNUSU9OXzRQTF9ET1NFX1JFU1BPTlNFLFxuICBmb3VyUExEb3NlUmVzcG9uc2UsXG4gIERST1BMSU5FUyxcbiAgRml0RXJyb3JNb2RlbCxcbiAgRml0Q29uZmlkZW5jZUludGVydmFscyxcbiAgZ2V0Rml0dGVkQ3VydmUsXG59IGZyb20gJy4vZml0LWN1cnZlJztcbmltcG9ydCB7Zml0U2VyaWVzLCBnZXREYXRhUG9pbnRzfSBmcm9tICcuL2ZpdC1kYXRhJztcbi8vQHRzLWlnbm9yZTogbm8gdHlwZXNcbmltcG9ydCAqIGFzIGpTdGF0IGZyb20gJ2pzdGF0JztcbmltcG9ydCB7RXh0cmVtdW0sIE9wdGltaXphdGlvblJlc3VsdH0gZnJvbSAnLi9maXR0aW5nLWFsZ29yaXRobS9vcHRpbWl6ZXItbWlzYyc7XG5pbXBvcnQge3BlcmZvcm1OZWxkZXJNZWFkT3B0aW1pemF0aW9ufSBmcm9tICcuL2ZpdHRpbmctYWxnb3JpdGhtL29wdGltaXplcic7XG5pbXBvcnQge05FTERFUl9NRUFEX0RFRkFVTFRTfSBmcm9tICcuL2ZpdHRpbmctYWxnb3JpdGhtL29wdGltaXplci1uZWxkZXItbWVhZCc7XG5cblxuLyoqIENsYXNzIGZvciB0aGUgZml0IGZ1bmN0aW9ucyAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEZpdEZ1bmN0aW9uPFQgPSBGaXQ+IHtcbiAgYWJzdHJhY3QgZ2V0IG5hbWUoKTogc3RyaW5nO1xuICBhYnN0cmFjdCBnZXQgcGFyYW1ldGVyTmFtZXMoKTogc3RyaW5nW107XG4gIGFic3RyYWN0IGZpbGxQYXJhbXMoZml0Q3VydmU6IEZpdEN1cnZlLCBkYXRhOiBGaXRTZXJpZXMpOiBUO1xuICBhYnN0cmFjdCB5KHBhcmFtczogRmxvYXQzMkFycmF5LCB4OiBudW1iZXIpOiBudW1iZXI7XG4gIGFic3RyYWN0IGdldEluaXRpYWxQYXJhbWV0ZXJzKHg6IG51bWJlcltdLCB5OiBudW1iZXJbXSk6IEZsb2F0MzJBcnJheTtcbn1cblxuZXhwb3J0IGNvbnN0IEZpdEZ1bmN0aW9uVHlwZXMgPSB7XG4gIFNJR01PSUQ6ICdzaWdtb2lkJyxcbiAgTElORUFSOiAnbGluZWFyJyxcbiAgTE9HX0xJTkVBUjogJ2xvZy1saW5lYXInLFxuICBFWFBPTkVOVElBTDogJ2V4cG9uZW50aWFsJyxcbiAgRk9VUl9QTF9SRUdSRVNTSU9OOiAnNHBsLXJlZ3Jlc3Npb24nLFxuICBGT1VSX1BMX0RPU0VfUkVTUE9OU0U6ICc0cGwtZG9zZS1yZXNwb25zZScsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBGaXRGdW5jdGlvblR5cGUgPSB0eXBlb2YgRml0RnVuY3Rpb25UeXBlc1trZXlvZiB0eXBlb2YgRml0RnVuY3Rpb25UeXBlc107XG5cbmludGVyZmFjZSBJRml0IHtcbiAgYXVjOiBudW1iZXI7XG4gIHJTcXVhcmVkOiBudW1iZXI7XG59XG5cbmludGVyZmFjZSBJTGluZWFyRml0IGV4dGVuZHMgSUZpdCB7XG4gIHNsb3BlOiBudW1iZXI7XG4gIGludGVyY2VwdDogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgSUxvZ0xpbmVhckZpdCBleHRlbmRzIElMaW5lYXJGaXQge31cblxuaW50ZXJmYWNlIElTaWdtb2lkRml0IGV4dGVuZHMgSUZpdCB7XG4gIHRvcDogbnVtYmVyO1xuICBzbG9wZTogbnVtYmVyO1xuICBpYzUwOiBudW1iZXI7XG4gIGJvdHRvbTogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgSUV4cG9uZW50aWFsRml0IGV4dGVuZHMgSUZpdCB7XG4gIG1hbnRpc3NhOiBudW1iZXI7XG4gIHBvd2VyOiBudW1iZXI7XG59XG5cbmludGVyZmFjZSBJRm91clBMUmVncmVzc2lvbkZpdCBleHRlbmRzIElGaXQge1xuICB0b3A6IG51bWJlcjtcbiAgYm90dG9tOiBudW1iZXI7XG4gIHNsb3BlOiBudW1iZXI7XG4gIGVjNTA6IG51bWJlcjtcbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEZpdCBpbXBsZW1lbnRzIElGaXQge1xuICBhdWM6IG51bWJlcjtcbiAgclNxdWFyZWQ6IG51bWJlcjtcbiAgc2VyaWVzOiBGaXRTZXJpZXM7XG5cbiAgYWJzdHJhY3QgZ2V0IG5hbWUoKTogc3RyaW5nO1xuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3Rvcih2YWx1ZXM6IElGaXQsIGRhdGE6IEZpdFNlcmllcykge1xuICAgIHRoaXMuYXVjID0gdmFsdWVzLmF1YztcbiAgICB0aGlzLnJTcXVhcmVkID0gdmFsdWVzLnJTcXVhcmVkO1xuICAgIHRoaXMuc2VyaWVzID0gZGF0YTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgSlNGdW5jdGlvbkZpdCBleHRlbmRzIEZpdCB7XG4gIGNvbnN0cnVjdG9yKHZhbHVlczogSUZpdCwgZGF0YTogRml0U2VyaWVzKSB7XG4gICAgc3VwZXIodmFsdWVzLCBkYXRhKTtcbiAgfVxuICBnZXQgbmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBGSVRfSlNfRlVOQ1RJT047XG4gIH1cbn1cblxuY2xhc3MgTGluZWFyRml0IGV4dGVuZHMgRml0IGltcGxlbWVudHMgSUxpbmVhckZpdCB7XG4gIHNsb3BlOiBudW1iZXI7XG4gIGludGVyY2VwdDogbnVtYmVyO1xuXG4gIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEZJVF9GVU5DVElPTl9MSU5FQVI7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcih2YWx1ZXM6IElMaW5lYXJGaXQsIGRhdGE6IEZpdFNlcmllcykge1xuICAgIHN1cGVyKHZhbHVlcywgZGF0YSk7XG4gICAgdGhpcy5zbG9wZSA9IHZhbHVlcy5zbG9wZTtcbiAgICB0aGlzLmludGVyY2VwdCA9IHZhbHVlcy5pbnRlcmNlcHQ7XG4gIH1cbn1cblxuY2xhc3MgTG9nTGluZWFyRml0IGV4dGVuZHMgTGluZWFyRml0IGltcGxlbWVudHMgSUxvZ0xpbmVhckZpdCB7XG4gIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEZJVF9GVU5DVElPTl9MT0dfTElORUFSO1xuICB9XG59XG5cbmNsYXNzIFNpZ21vaWRGaXQgZXh0ZW5kcyBGaXQgaW1wbGVtZW50cyBJU2lnbW9pZEZpdCB7XG4gIHRvcDogbnVtYmVyO1xuICBzbG9wZTogbnVtYmVyO1xuICBpYzUwOiBudW1iZXI7XG4gIGJvdHRvbTogbnVtYmVyO1xuXG4gIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEZJVF9GVU5DVElPTl9TSUdNT0lEO1xuICB9XG5cbiAgY29uc3RydWN0b3IodmFsdWVzOiBJU2lnbW9pZEZpdCwgZGF0YTogRml0U2VyaWVzKSB7XG4gICAgc3VwZXIodmFsdWVzLCBkYXRhKTtcbiAgICB0aGlzLnRvcCA9IHZhbHVlcy50b3A7XG4gICAgdGhpcy5zbG9wZSA9IHZhbHVlcy5zbG9wZTtcbiAgICB0aGlzLmljNTAgPSB2YWx1ZXMuaWM1MDtcbiAgICB0aGlzLmJvdHRvbSA9IHZhbHVlcy5ib3R0b207XG4gIH1cbn1cblxuY2xhc3MgRXhwb25lbnRpYWxGaXQgZXh0ZW5kcyBGaXQgaW1wbGVtZW50cyBJRXhwb25lbnRpYWxGaXQge1xuICBtYW50aXNzYTogbnVtYmVyO1xuICBwb3dlcjogbnVtYmVyO1xuXG4gIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEZJVF9GVU5DVElPTl9FWFBPTkVOVElBTDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHZhbHVlczogSUV4cG9uZW50aWFsRml0LCBkYXRhOiBGaXRTZXJpZXMpIHtcbiAgICBzdXBlcih2YWx1ZXMsIGRhdGEpO1xuICAgIHRoaXMubWFudGlzc2EgPSB2YWx1ZXMubWFudGlzc2E7XG4gICAgdGhpcy5wb3dlciA9IHZhbHVlcy5wb3dlcjtcbiAgfVxufVxuXG5jbGFzcyBGb3VyUExSZWdyZXNzaW9uRml0IGV4dGVuZHMgRml0IGltcGxlbWVudHMgSUZvdXJQTFJlZ3Jlc3Npb25GaXQge1xuICB0b3A6IG51bWJlcjtcbiAgYm90dG9tOiBudW1iZXI7XG4gIHNsb3BlOiBudW1iZXI7XG4gIGVjNTA6IG51bWJlcjtcblxuICBnZXQgbmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBGSVRfRlVOQ1RJT05fNFBMX1JFR1JFU1NJT047XG4gIH1cblxuICBjb25zdHJ1Y3Rvcih2YWx1ZXM6IElGb3VyUExSZWdyZXNzaW9uRml0LCBkYXRhOiBGaXRTZXJpZXMpIHtcbiAgICBzdXBlcih2YWx1ZXMsIGRhdGEpO1xuICAgIHRoaXMudG9wID0gdmFsdWVzLnRvcDtcbiAgICB0aGlzLmJvdHRvbSA9IHZhbHVlcy5ib3R0b207XG4gICAgdGhpcy5zbG9wZSA9IHZhbHVlcy5zbG9wZTtcbiAgICB0aGlzLmVjNTAgPSB2YWx1ZXMuZWM1MDtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRBdWNBbmRSc3F1YXJlZChmaXRDdXJ2ZTogKHg6IG51bWJlcikgPT4gbnVtYmVyLCBkYXRhOiB7eDogbnVtYmVyW10sIHk6IG51bWJlcltdfSk6IElGaXQge1xuICByZXR1cm4ge1xuICAgIGF1YzogZ2V0QXVjKGZpdEN1cnZlLCBkYXRhKSxcbiAgICByU3F1YXJlZDogZ2V0RGV0Q29lZmYoZml0Q3VydmUsIGRhdGEpLFxuICB9O1xufVxuXG4vKiogQ2xhc3MgdGhhdCBpbXBsZW1lbnRzIHRoZSBsaW5lYXIgZnVuY3Rpb24gKi9cbmV4cG9ydCBjbGFzcyBMaW5lYXJGdW5jdGlvbiBleHRlbmRzIEZpdEZ1bmN0aW9uPExpbmVhckZpdD4ge1xuICBnZXQgbmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBGSVRfRlVOQ1RJT05fTElORUFSO1xuICB9XG5cbiAgZ2V0IHBhcmFtZXRlck5hbWVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gWydTbG9wZScsICdJbnRlcmNlcHQnXTtcbiAgfVxuXG4gIGZpbGxQYXJhbXMoZml0Q3VydmU6IEZpdEN1cnZlLCBkYXRhOiBGaXRTZXJpZXMpOiBMaW5lYXJGaXQge1xuICAgIHJldHVybiBuZXcgTGluZWFyRml0KHtcbiAgICAgIC4uLmdldEF1Y0FuZFJzcXVhcmVkKGZpdEN1cnZlLmZpdHRlZEN1cnZlLCBnZXREYXRhUG9pbnRzKGRhdGEpKSxcbiAgICAgIHNsb3BlOiBmaXRDdXJ2ZS5wYXJhbWV0ZXJzWzBdLFxuICAgICAgaW50ZXJjZXB0OiBmaXRDdXJ2ZS5wYXJhbWV0ZXJzWzFdLFxuICAgIH0sIGRhdGEpO1xuICB9XG5cbiAgeShwYXJhbXM6IEZsb2F0MzJBcnJheSwgeDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gbGluZWFyKHBhcmFtcywgeCk7XG4gIH1cblxuICBnZXRJbml0aWFsUGFyYW1ldGVycyh4OiBudW1iZXJbXSwgeTogbnVtYmVyW10pOiBGbG9hdDMyQXJyYXkge1xuICAgIGxldCBtaW5JbmRleCA9IDA7XG4gICAgbGV0IG1heEluZGV4ID0gMDtcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IHgubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh4W2ldIDwgeFttaW5JbmRleF0pXG4gICAgICAgIG1pbkluZGV4ID0gaTtcbiAgICAgIGlmICh4W2ldID4geFttYXhJbmRleF0pXG4gICAgICAgIG1heEluZGV4ID0gaTtcbiAgICB9XG5cbiAgICBjb25zdCBkZWx0YVggPSB4W21heEluZGV4XSAtIHhbbWluSW5kZXhdO1xuICAgIGNvbnN0IGRlbHRhWSA9IHlbbWF4SW5kZXhdIC0geVttaW5JbmRleF07XG4gICAgY29uc3QgQSA9IGRlbHRhWSAvIGRlbHRhWDtcbiAgICBjb25zdCBCID0geVttYXhJbmRleF0gLSBBICogeFttYXhJbmRleF07XG4gICAgY29uc3QgcGFyYW1zID0gbmV3IEZsb2F0MzJBcnJheSgyKTtcbiAgICBwYXJhbXMuc2V0KFtBLCBCXSk7XG4gICAgcmV0dXJuIHBhcmFtcztcbiAgfVxufVxuXG4vKiogQ2xhc3MgdGhhdCBpbXBsZW1lbnRzIHRoZSBzaWdtb2lkIGZ1bmN0aW9uICovXG5leHBvcnQgY2xhc3MgU2lnbW9pZEZ1bmN0aW9uIGV4dGVuZHMgRml0RnVuY3Rpb248U2lnbW9pZEZpdD4ge1xuICBnZXQgbmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBGSVRfRlVOQ1RJT05fU0lHTU9JRDtcbiAgfVxuXG4gIGdldCBwYXJhbWV0ZXJOYW1lcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFsnVG9wJywgJ1Nsb3BlJywgJ0lDNTAnLCAnQm90dG9tJ107XG4gIH1cblxuICBmaWxsUGFyYW1zKGZpdEN1cnZlOiBGaXRDdXJ2ZSwgZGF0YTogRml0U2VyaWVzKTogU2lnbW9pZEZpdCB7XG4gICAgcmV0dXJuIG5ldyBTaWdtb2lkRml0KHtcbiAgICAgIC4uLmdldEF1Y0FuZFJzcXVhcmVkKGZpdEN1cnZlLmZpdHRlZEN1cnZlLCBnZXREYXRhUG9pbnRzKGRhdGEpKSxcbiAgICAgIHRvcDogZml0Q3VydmUucGFyYW1ldGVyc1swXSxcbiAgICAgIHNsb3BlOiBmaXRDdXJ2ZS5wYXJhbWV0ZXJzWzFdLFxuICAgICAgaWM1MDogZml0Q3VydmUucGFyYW1ldGVyc1syXSxcbiAgICAgIGJvdHRvbTogZml0Q3VydmUucGFyYW1ldGVyc1szXSxcbiAgICB9LCBkYXRhKTtcbiAgfVxuXG4gIHkocGFyYW1zOiBGbG9hdDMyQXJyYXksIHg6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIHNpZ21vaWQocGFyYW1zLCB4KTtcbiAgfVxuXG4gIGdldEluaXRpYWxQYXJhbWV0ZXJzKHg6IG51bWJlcltdLCB5OiBudW1iZXJbXSk6IEZsb2F0MzJBcnJheSB7XG4gICAgY29uc3QgZGF0YUJvdW5kcyA9IERHLlJlY3QuZnJvbVhZQXJyYXlzKHgsIHkpO1xuICAgIGNvbnN0IG1lZFkgPSAoZGF0YUJvdW5kcy5tYXhZIC0gZGF0YUJvdW5kcy5taW5ZKSAvIDIgKyBkYXRhQm91bmRzLm1pblk7XG4gICAgbGV0IG1heFlJbnRlcnZhbCA9IGRhdGFCb3VuZHMubWF4WSAtIGRhdGFCb3VuZHMubWluWTtcbiAgICBsZXQgbmVhcmVzdFhJbmRleCA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB4Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBjdXJyZW50SW50ZXJ2YWwgPSBNYXRoLmFicyh5W2ldIC0gbWVkWSk7XG4gICAgICBpZiAoY3VycmVudEludGVydmFsIDwgbWF4WUludGVydmFsKSB7XG4gICAgICAgIG1heFlJbnRlcnZhbCA9IGN1cnJlbnRJbnRlcnZhbDtcbiAgICAgICAgbmVhcmVzdFhJbmRleCA9IGk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHhBdE1lZFkgPSB4W25lYXJlc3RYSW5kZXhdO1xuICAgIGNvbnN0IHNsb3BlID0geVswXSA+IHlbeS5sZW5ndGggLSAxXSA/IDEgOiAtMTtcblxuICAgIC8vIHBhcmFtcyBhcmU6IFttYXgsIHRhbiwgSUM1MCwgbWluXVxuICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBGbG9hdDMyQXJyYXkoNCk7XG4gICAgcGFyYW1zLnNldChbZGF0YUJvdW5kcy5tYXhZLCBzbG9wZSwgeEF0TWVkWSwgZGF0YUJvdW5kcy5taW5ZXSk7XG4gICAgcmV0dXJuIHBhcmFtcztcbiAgfVxufVxuXG4vKiogQ2xhc3MgdGhhdCBpbXBsZW1lbnRzIHRoZSBsaW5lYXIgbG9nYXJpdGhtaWMgZnVuY3Rpb24gKi9cbmV4cG9ydCBjbGFzcyBMb2dMaW5lYXJGdW5jdGlvbiBleHRlbmRzIEZpdEZ1bmN0aW9uPExvZ0xpbmVhckZpdD4ge1xuICBnZXQgbmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBGSVRfRlVOQ1RJT05fTE9HX0xJTkVBUjtcbiAgfVxuXG4gIGdldCBwYXJhbWV0ZXJOYW1lcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFsnU2xvcGUnLCAnSW50ZXJjZXB0J107XG4gIH1cblxuICBmaWxsUGFyYW1zKGZpdEN1cnZlOiBGaXRDdXJ2ZSwgZGF0YTogRml0U2VyaWVzKTogTG9nTGluZWFyRml0IHtcbiAgICByZXR1cm4gbmV3IExvZ0xpbmVhckZpdCh7XG4gICAgICAuLi5nZXRBdWNBbmRSc3F1YXJlZChmaXRDdXJ2ZS5maXR0ZWRDdXJ2ZSwgZ2V0RGF0YVBvaW50cyhkYXRhKSksXG4gICAgICBzbG9wZTogZml0Q3VydmUucGFyYW1ldGVyc1swXSxcbiAgICAgIGludGVyY2VwdDogZml0Q3VydmUucGFyYW1ldGVyc1sxXSxcbiAgICB9LCBkYXRhKTtcbiAgfVxuXG4gIHkocGFyYW1zOiBGbG9hdDMyQXJyYXksIHg6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIGxvZ0xpbmVhcihwYXJhbXMsIHgpO1xuICB9XG5cbiAgZ2V0SW5pdGlhbFBhcmFtZXRlcnMoeDogbnVtYmVyW10sIHk6IG51bWJlcltdKTogRmxvYXQzMkFycmF5IHtcbiAgICBjb25zdCBwYXJhbXMgPSBuZXcgRmxvYXQzMkFycmF5KDIpO1xuICAgIHBhcmFtcy5zZXQoWy01LCAxMDBdKTtcbiAgICByZXR1cm4gcGFyYW1zO1xuICB9XG59XG5cbi8qKiBDbGFzcyB0aGF0IGltcGxlbWVudHMgdGhlIGV4cG9uZW50aWFsIGZ1bmN0aW9uICovXG5leHBvcnQgY2xhc3MgRXhwb25lbnRpYWxGdW5jdGlvbiBleHRlbmRzIEZpdEZ1bmN0aW9uPEV4cG9uZW50aWFsRml0PiB7XG4gIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEZJVF9GVU5DVElPTl9FWFBPTkVOVElBTDtcbiAgfVxuXG4gIGdldCBwYXJhbWV0ZXJOYW1lcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFsnTWFudGlzc2EnLCAnUG93ZXInXTtcbiAgfVxuXG4gIGZpbGxQYXJhbXMoZml0Q3VydmU6IEZpdEN1cnZlLCBkYXRhOiBGaXRTZXJpZXMpOiBFeHBvbmVudGlhbEZpdCB7XG4gICAgcmV0dXJuIG5ldyBFeHBvbmVudGlhbEZpdCh7XG4gICAgICAuLi5nZXRBdWNBbmRSc3F1YXJlZChmaXRDdXJ2ZS5maXR0ZWRDdXJ2ZSwgZ2V0RGF0YVBvaW50cyhkYXRhKSksXG4gICAgICBtYW50aXNzYTogZml0Q3VydmUucGFyYW1ldGVyc1swXSxcbiAgICAgIHBvd2VyOiBmaXRDdXJ2ZS5wYXJhbWV0ZXJzWzFdLFxuICAgIH0sIGRhdGEpO1xuICB9XG5cbiAgeShwYXJhbXM6IEZsb2F0MzJBcnJheSwgeDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gZXhwb25lbnRpYWwocGFyYW1zLCB4KTtcbiAgfVxuXG4gIGdldEluaXRpYWxQYXJhbWV0ZXJzKHg6IG51bWJlcltdLCB5OiBudW1iZXJbXSk6IEZsb2F0MzJBcnJheSB7XG4gICAgY29uc3QgcGFyYW1zID0gbmV3IEZsb2F0MzJBcnJheSgyKTtcbiAgICBwYXJhbXMuc2V0KFsxMDAsIC0yXSk7XG4gICAgcmV0dXJuIHBhcmFtcztcbiAgfVxufVxuXG4vKiogQ2xhc3MgdGhhdCBpbXBsZW1lbnRzIHRoZSBGb3VyIFBhcmFtZXRlciBMb2dpc3RpYyBSZWdyZXNzaW9uIGZ1bmN0aW9uICovXG5leHBvcnQgY2xhc3MgRm91clBMUmVncmVzc2lvbkZ1bmN0aW9uIGV4dGVuZHMgRml0RnVuY3Rpb248Rm91clBMUmVncmVzc2lvbkZpdD4ge1xuICBnZXQgbmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBGSVRfRlVOQ1RJT05fNFBMX1JFR1JFU1NJT047XG4gIH1cblxuICBnZXQgcGFyYW1ldGVyTmFtZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbJ1RvcCcsICdTbG9wZScsICdFQzUwJywgJ0JvdHRvbSddO1xuICB9XG5cbiAgZmlsbFBhcmFtcyhmaXRDdXJ2ZTogRml0Q3VydmUsIGRhdGE6IEZpdFNlcmllcyk6IEZvdXJQTFJlZ3Jlc3Npb25GaXQge1xuICAgIHJldHVybiBuZXcgRm91clBMUmVncmVzc2lvbkZpdCh7XG4gICAgICAuLi5nZXRBdWNBbmRSc3F1YXJlZChmaXRDdXJ2ZS5maXR0ZWRDdXJ2ZSwgZ2V0RGF0YVBvaW50cyhkYXRhKSksXG4gICAgICB0b3A6IGZpdEN1cnZlLnBhcmFtZXRlcnNbMF0sXG4gICAgICBzbG9wZTogZml0Q3VydmUucGFyYW1ldGVyc1sxXSxcbiAgICAgIGVjNTA6IGZpdEN1cnZlLnBhcmFtZXRlcnNbMl0sXG4gICAgICBib3R0b206IGZpdEN1cnZlLnBhcmFtZXRlcnNbM10sXG4gICAgfSwgZGF0YSk7XG4gIH1cblxuICB5KHBhcmFtczogRmxvYXQzMkFycmF5LCB4OiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiBmb3VyUExSZWdyZXNzaW9uKHBhcmFtcywgeCk7XG4gIH1cblxuICBnZXRJbml0aWFsUGFyYW1ldGVycyh4OiBudW1iZXJbXSwgeTogbnVtYmVyW10pOiBGbG9hdDMyQXJyYXkge1xuICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBGbG9hdDMyQXJyYXkoNCk7XG4gICAgY29uc3QgYm90dG9tID0gTWF0aC5taW4oLi4ueSk7XG4gICAgY29uc3QgdG9wID0gTWF0aC5tYXgoLi4ueSk7XG4gICAgY29uc3QgbWVkWSA9ICh0b3AgLSBib3R0b20pIC8gMiArIGJvdHRvbTtcbiAgICBsZXQgbWF4WUludGVydmFsID0gdG9wIC1ib3R0b207XG4gICAgbGV0IG5lYXJlc3RYSW5kZXggPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgeC5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgY3VycmVudEludGVydmFsID0gTWF0aC5hYnMoeVtpXSAtIG1lZFkpO1xuICAgICAgaWYgKGN1cnJlbnRJbnRlcnZhbCA8IG1heFlJbnRlcnZhbCkge1xuICAgICAgICBtYXhZSW50ZXJ2YWwgPSBjdXJyZW50SW50ZXJ2YWw7XG4gICAgICAgIG5lYXJlc3RYSW5kZXggPSBpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBlYzUwID0geFtuZWFyZXN0WEluZGV4XTtcbiAgICBjb25zdCBzbG9wZSA9IHlbMF0gPiB5W3kubGVuZ3RoIC0gMV0/IC0xMCA6IDEwO1xuICAgIHBhcmFtcy5zZXQoW3RvcCwgc2xvcGUsIGVjNTAsIGJvdHRvbV0pO1xuICAgIHJldHVybiBwYXJhbXM7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEZvdXJQTERvc2VSZXNwb25zZUZ1bmN0aW9uIGV4dGVuZHMgRm91clBMUmVncmVzc2lvbkZ1bmN0aW9uIHtcbiAgb3ZlcnJpZGUgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gRklUX0ZVTkNUSU9OXzRQTF9ET1NFX1JFU1BPTlNFO1xuICB9XG5cbiAgb3ZlcnJpZGUgZ2V0IHBhcmFtZXRlck5hbWVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gWydNYXgnLCAnSGlsbCcsICdJQzUwJywgJ01pbiddO1xuICB9XG5cbiAgb3ZlcnJpZGUgeShwYXJhbXM6IEZsb2F0MzJBcnJheSwgeDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gZm91clBMRG9zZVJlc3BvbnNlKHBhcmFtcywgeCk7XG4gIH1cbn1cblxuLyoqIENsYXNzIHRoYXQgaW1wbGVtZW50cyB1c2VyIEpTIGZ1bmN0aW9ucyAqL1xuZXhwb3J0IGNsYXNzIEpzRnVuY3Rpb24gZXh0ZW5kcyBGaXRGdW5jdGlvbjxGaXQ+IHtcbiAgcHJpdmF0ZSBfbmFtZTogc3RyaW5nO1xuICBwcml2YXRlIF9wYXJhbWV0ZXJOYW1lczogc3RyaW5nW107XG5cbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nLCB5RnVuYzogKHBhcmFtczogRmxvYXQzMkFycmF5LCB4OiBudW1iZXIpID0+IG51bWJlcixcbiAgICBnZXRJbml0UGFyYW1zRnVuYzogKHg6IG51bWJlcltdLCB5OiBudW1iZXJbXSkgPT4gRmxvYXQzMkFycmF5LCBwYXJhbWV0ZXJOYW1lczogc3RyaW5nW10pIHtcbiAgICBzdXBlcigpO1xuXG4gICAgdGhpcy5fbmFtZSA9IG5hbWU7XG4gICAgdGhpcy5fcGFyYW1ldGVyTmFtZXMgPSBwYXJhbWV0ZXJOYW1lcztcblxuICAgIHRoaXMueSA9IHlGdW5jO1xuICAgIHRoaXMuZ2V0SW5pdGlhbFBhcmFtZXRlcnMgPSBnZXRJbml0UGFyYW1zRnVuYztcbiAgfVxuXG4gIGZpbGxQYXJhbXMoZml0Q3VydmU6IEZpdEN1cnZlLCBkYXRhOiBGaXRTZXJpZXMpOiBGaXQge1xuICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBGbG9hdDMyQXJyYXkodGhpcy5fcGFyYW1ldGVyTmFtZXMubGVuZ3RoKTtcbiAgICBwYXJhbXMuc2V0KGZpdEN1cnZlLnBhcmFtZXRlcnMpO1xuICAgIHJldHVybiBuZXcgSlNGdW5jdGlvbkZpdCh7Li4uZ2V0QXVjQW5kUnNxdWFyZWQoZml0Q3VydmUuZml0dGVkQ3VydmUsIGdldERhdGFQb2ludHMoZGF0YSkpfSwgZGF0YSk7XG4gIH1cblxuICBnZXQgbmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9uYW1lO1xuICB9XG5cbiAgZ2V0IHBhcmFtZXRlck5hbWVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5fcGFyYW1ldGVyTmFtZXM7XG4gIH1cblxuICB5KHBhcmFtczogRmxvYXQzMkFycmF5LCB4OiBudW1iZXIpOiBudW1iZXIge1xuICAgIHRocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7XG4gIH1cblxuICBnZXRJbml0aWFsUGFyYW1ldGVycyh4OiBudW1iZXJbXSwgeTogbnVtYmVyW10pOiBGbG9hdDMyQXJyYXkge1xuICAgIHRocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7XG4gIH1cbn1cblxuLy8gT2JqZWN0IHdpdGggZml0IGZ1bmN0aW9uc1xuZXhwb3J0IGNvbnN0IGZpdEZ1bmN0aW9uczoge1trZXk6IHN0cmluZ106IEZpdEZ1bmN0aW9uPGFueT59ID0ge1xuICAnbGluZWFyJzogbmV3IExpbmVhckZ1bmN0aW9uKCksXG4gICdzaWdtb2lkJzogbmV3IFNpZ21vaWRGdW5jdGlvbigpLFxuICAnbG9nLWxpbmVhcic6IG5ldyBMb2dMaW5lYXJGdW5jdGlvbigpLFxuICAnZXhwb25lbnRpYWwnOiBuZXcgRXhwb25lbnRpYWxGdW5jdGlvbigpLFxuICAnNHBsLXJlZ3Jlc3Npb24nOiBuZXcgRm91clBMUmVncmVzc2lvbkZ1bmN0aW9uKCksXG4gICc0cGwtZG9zZS1yZXNwb25zZSc6IG5ldyBGb3VyUExEb3NlUmVzcG9uc2VGdW5jdGlvbigpLFxufTtcblxuY2xhc3MgRml0RnVuY3Rpb25zIHtcbiAgc2VyaWVzOiBGaXRTZXJpZXM7XG5cbiAgY29uc3RydWN0b3Ioc2VyaWVzOiBGaXRTZXJpZXMpIHtcbiAgICB0aGlzLnNlcmllcyA9IHNlcmllcztcbiAgfVxuXG4gIGxpbmVhcigpOiBMaW5lYXJGaXQge1xuICAgIHJldHVybiBmaXRGdW5jdGlvbnNbRklUX0ZVTkNUSU9OX0xJTkVBUl1cbiAgICAgIC5maWxsUGFyYW1zKGZpdFNlcmllcyh0aGlzLnNlcmllcywgZml0RnVuY3Rpb25zW0ZJVF9GVU5DVElPTl9MSU5FQVJdKSwgdGhpcy5zZXJpZXMpO1xuICB9XG5cbiAgbG9nTGluZWFyKCk6IExvZ0xpbmVhckZpdCB7XG4gICAgcmV0dXJuIGZpdEZ1bmN0aW9uc1tGSVRfRlVOQ1RJT05fTE9HX0xJTkVBUl1cbiAgICAgIC5maWxsUGFyYW1zKGZpdFNlcmllcyh0aGlzLnNlcmllcywgZml0RnVuY3Rpb25zW0ZJVF9GVU5DVElPTl9MT0dfTElORUFSXSksIHRoaXMuc2VyaWVzKTtcbiAgfVxuXG4gIHNpZ21vaWQoKTogU2lnbW9pZEZpdCB7XG4gICAgcmV0dXJuIGZpdEZ1bmN0aW9uc1tGSVRfRlVOQ1RJT05fU0lHTU9JRF1cbiAgICAgIC5maWxsUGFyYW1zKGZpdFNlcmllcyh0aGlzLnNlcmllcywgZml0RnVuY3Rpb25zW0ZJVF9GVU5DVElPTl9TSUdNT0lEXSksIHRoaXMuc2VyaWVzKTtcbiAgfVxuXG4gIGV4cG9uZW50aWFsKCk6IEV4cG9uZW50aWFsRml0IHtcbiAgICByZXR1cm4gZml0RnVuY3Rpb25zW0ZJVF9GVU5DVElPTl9FWFBPTkVOVElBTF1cbiAgICAgIC5maWxsUGFyYW1zKGZpdFNlcmllcyh0aGlzLnNlcmllcywgZml0RnVuY3Rpb25zW0ZJVF9GVU5DVElPTl9FWFBPTkVOVElBTF0pLCB0aGlzLnNlcmllcyk7XG4gIH1cblxuICBmb3VyUEwoKTogRm91clBMUmVncmVzc2lvbkZpdCB7XG4gICAgcmV0dXJuIGZpdEZ1bmN0aW9uc1tGSVRfRlVOQ1RJT05fNFBMX1JFR1JFU1NJT05dXG4gICAgICAuZmlsbFBhcmFtcyhmaXRTZXJpZXModGhpcy5zZXJpZXMsIGZpdEZ1bmN0aW9uc1tGSVRfRlVOQ1RJT05fNFBMX1JFR1JFU1NJT05dKSwgdGhpcy5zZXJpZXMpO1xuICB9XG5cbiAgZm91clBMRG9zZVJlc3BvbnNlKCk6IEZvdXJQTFJlZ3Jlc3Npb25GaXQge1xuICAgIHJldHVybiBmaXRGdW5jdGlvbnNbRklUX0ZVTkNUSU9OXzRQTF9ET1NFX1JFU1BPTlNFXS5maWxsUGFyYW1zKGZpdFNlcmllcyh0aGlzLnNlcmllcywgZml0RnVuY3Rpb25zW0ZJVF9GVU5DVElPTl80UExfRE9TRV9SRVNQT05TRV0pLCB0aGlzLnNlcmllcyk7XG4gIH1cbn1cblxuXG5leHBvcnQgY2xhc3MgRml0U2VyaWVzIGltcGxlbWVudHMgSUZpdFNlcmllcyB7XG4gIFtrZXk6IHN0cmluZ106IGFueTtcblxuICBmaXQ6IEZpdEZ1bmN0aW9ucztcbiAgcG9pbnRzOiBJRml0UG9pbnRbXTtcblxuICBjb25zdHJ1Y3Rvcihwb2ludHM6IElGaXRQb2ludFtdKSB7XG4gICAgdGhpcy5wb2ludHMgPSBwb2ludHM7XG4gICAgdGhpcy5maXQgPSBuZXcgRml0RnVuY3Rpb25zKHRoaXMpO1xuICB9XG5cbiAgbmFtZT86IHN0cmluZzsgLy8gY29udHJvbHMgdGhlIHNlcmllcyBuYW1lXG4gIGZpdEZ1bmN0aW9uPzogc3RyaW5nIHwgSUZpdEZ1bmN0aW9uRGVzY3JpcHRpb247IC8vIGNvbnRyb2xzIHRoZSBzZXJpZXMgZml0IGZ1bmN0aW9uXG4gIHBhcmFtZXRlcnM/OiBudW1iZXJbXTsgLy8gY29udHJvbHMgdGhlIHNlcmllcyBwYXJhbWV0ZXJzLCBhdXRvLWZpdHRpbmcgd2hlbiBub3QgZGVmaW5lZFxuICBwYXJhbWV0ZXJCb3VuZHM/OiBGaXRQYXJhbUJvdW5kc1tdOyAvLyBkZWZpbmVzIHRoZSBhY2NlcHRhYmxlIHJhbmdlIG9mIGVhY2ggcGFyYW1ldGVyLCB3aGljaCBpcyB0YWtlbiBpbnRvIGFjY291bnQgZHVyaW5nIHRoZSBmaXR0aW5nLiBTZWUgYWxzbyBgcGFyYW1ldGVyc2AuXG4gIG1hcmtlclR5cGU/OiBGaXRNYXJrZXJUeXBlOyAvLyBkZWZpbmVzIHRoZSBzZXJpZXMgbWFya2VyIHR5cGVcbiAgb3V0bGllck1hcmtlclR5cGU/OiBGaXRPdXRsaWVyTWFya2VyVHlwZTsgLy8gZGVmaW5lcyB0aGUgc2VyaWVzIG91dGxpZXIgbWFya2VyIHR5cGVcbiAgbGluZVN0eWxlPzogRml0TGluZVN0eWxlOyAvLyBkZWZpbmVzIHRoZSBzZXJpZXMgbGluZSBzdHlsZVxuICBwb2ludENvbG9yPzogc3RyaW5nOyAvLyBvdmVycmlkZXMgdGhlIHN0YW5kYXJkaXplZCBzZXJpZXMgcG9pbnQgY29sb3JcbiAgZml0TGluZUNvbG9yPzogc3RyaW5nOyAvLyBvdmVycmlkZXMgdGhlIHN0YW5kYXJkaXplZCBzZXJpZXMgZml0IGxpbmUgY29sb3JcbiAgY29uZmlkZW5jZUludGVydmFsQ29sb3I/OiBzdHJpbmc7IC8vIG92ZXJyaWRlcyB0aGUgc3RhbmRhcmRpemVkIHNlcmllcyBjb25maWRlbmNlIGludGVydmFsIGNvbG9yXG4gIG91dGxpZXJDb2xvcj86IHN0cmluZzsgLy8gb3ZlcnJpZGVzIHRoZSBzdGFuZGFyZGl6ZWQgc2VyaWVzIG91dGxpZXIgY29sb3JcbiAgY29ubmVjdERvdHM/OiBib29sZWFuOyAvLyBkZWZpbmVzIHdoZXRoZXIgdG8gY29ubmVjdCB0aGUgcG9pbnRzIHdpdGggbGluZXMgb3Igbm90LiBJZiB0cnVlIGFuZCBzaG93Rml0TGluZSBpcyBmYWxzZSAtIGZpdHRpbmcgaXMgZGlzYWJsZWQgLSBvdGhlcndpc2UsIGl0IHdpbGwgYmUgcmVuZGVyZWQgYWNjb3JkaW5nbHkgdG8gdGhlIHBhcmFtZXRlciB2YWx1ZS5cbiAgc2hvd0ZpdExpbmU/OiBib29sZWFuOyAvLyBkZWZpbmVzIHdoZXRoZXIgdG8gc2hvdyB0aGUgZml0IGxpbmUgb3Igbm90XG4gIHNob3dQb2ludHM/OiBzdHJpbmc7IC8vIGRlZmluZXMgdGhlIGRhdGEgZGlzcGxheSBtb2RlXG4gIHNob3dPdXRsaWVycz86IGJvb2xlYW47IC8vIGRlZmluZXMgd2hldGhlciB0byBzaG93IHRoZSBvdXRsaWVycyBvciBub3RcbiAgc2hvd0N1cnZlQ29uZmlkZW5jZUludGVydmFsPzogYm9vbGVhbjsgLy8gZGVmaW5lcyB3aGV0aGVyIHRvIHNob3cgdGhlIGNvbmZpZGVuY2UgaW50ZXJ2YWxzIG9yIG5vdFxuICBlcnJvck1vZGVsPzogRml0RXJyb3JNb2RlbFR5cGU7IC8vIGRlZmluZXMgdGhlIHNlcmllcyBlcnJvciBtb2RlbFxuICBjbGlja1RvVG9nZ2xlPzogYm9vbGVhbjsgLy8gaWYgdHJ1ZSwgY2xpY2tpbmcgb24gdGhlIHBvaW50IHRvZ2dsZXMgaXRzIG91dGxpZXIgc3RhdHVzIGFuZCBjYXVzZXMgY3VydmUgcmVmaXR0aW5nXG4gIGxhYmVscz86IHtba2V5OiBzdHJpbmddOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFufTsgLy8gY29udHJvbGxlZCBieSBJRml0Q2hhcnREYXRhIGxhYmVsT3B0aW9ucywgc2hvd3MgbGFiZWxzXG4gIGRyb3BsaW5lcz86IHN0cmluZ1tdOyAvLyBkZWZpbmVzIHRoZSBkcm9wbGluZXMgdGhhdCB3b3VsZCBiZSBzaG93biBvbiB0aGUgcGxvdCAoSUM1MClcbiAgY29sdW1uTmFtZT86IHN0cmluZzsgLy8gZGVmaW5lcyB0aGUgY29sdW1uIG5hbWUgd2hlcmUgdGhlIHNlcmllcyBpcyBzdG9yZWRcbn1cblxuXG4vKiogUHJvcGVydGllcyB0aGF0IGRlc2NyaWJlIHtAbGluayBJRml0U2VyaWVzT3B0aW9uc30uIFVzZWZ1bCBmb3IgZWRpdGluZywgaW5pdGlhbGl6YXRpb24sIHRyYW5zZm9ybWF0aW9ucywgZXRjLiAqL1xuZXhwb3J0IGNvbnN0IGZpdFNlcmllc1Byb3BlcnRpZXM6IERHLlByb3BlcnR5W10gPSBbXG4gIERHLlByb3BlcnR5LmpzKCdmaXRGdW5jdGlvbicsIERHLlRZUEUuU1RSSU5HLFxuICAgIHtjYXRlZ29yeTogJ0ZpdHRpbmcnLCBjaG9pY2VzOiBPYmplY3Qua2V5cyhmaXRGdW5jdGlvbnMpLCBkZWZhdWx0VmFsdWU6ICdzaWdtb2lkJ30pLFxuICBERy5Qcm9wZXJ0eS5qcygncG9pbnRDb2xvcicsIERHLlRZUEUuU1RSSU5HLFxuICAgIHtjYXRlZ29yeTogJ1JlbmRlcmluZycsIG51bGxhYmxlOiB0cnVlLCBpbnB1dFR5cGU6ICdDb2xvcid9KSxcbiAgREcuUHJvcGVydHkuanMoJ2ZpdExpbmVDb2xvcicsIERHLlRZUEUuU1RSSU5HLFxuICAgIHtjYXRlZ29yeTogJ1JlbmRlcmluZycsIG51bGxhYmxlOiB0cnVlLCBpbnB1dFR5cGU6ICdDb2xvcid9KSxcbiAgREcuUHJvcGVydHkuanMoJ291dGxpZXJDb2xvcicsIERHLlRZUEUuU1RSSU5HLFxuICAgIHtjYXRlZ29yeTogJ1JlbmRlcmluZycsIG51bGxhYmxlOiB0cnVlLCBpbnB1dFR5cGU6ICdDb2xvcid9KSxcbiAgREcuUHJvcGVydHkuanMoJ2Vycm9yTW9kZWwnLCBERy5UWVBFLlNUUklORywge2NhdGVnb3J5OiAnRml0dGluZycsIGRlZmF1bHRWYWx1ZTogJ2NvbnN0YW50JyxcbiAgICBjaG9pY2VzOiBbJ2NvbnN0YW50JywgJ3Byb3BvcnRpb25hbCcsICdjb21iaW5lZCddLCBudWxsYWJsZTogZmFsc2V9KSxcbiAgREcuUHJvcGVydHkuanMoJ2Nvbm5lY3REb3RzJywgREcuVFlQRS5CT09MLCB7Y2F0ZWdvcnk6ICdGaXR0aW5nJywgZGVmYXVsdFZhbHVlOiBmYWxzZX0pLFxuICBERy5Qcm9wZXJ0eS5qcygnY2xpY2tUb1RvZ2dsZScsIERHLlRZUEUuQk9PTCwge2NhdGVnb3J5OiAnRml0dGluZycsIGRlc2NyaXB0aW9uOlxuICAgICdDbGljayBvbiBhIHBvaW50IHRvIG1hcmsgaXQgYXMgb3V0bGllciBhbmQgcmVmaXQnLCBudWxsYWJsZTogdHJ1ZSwgZGVmYXVsdFZhbHVlOiBmYWxzZX0pLFxuICBERy5Qcm9wZXJ0eS5qcygnc2hvd0ZpdExpbmUnLCBERy5UWVBFLkJPT0wsIHtjYXRlZ29yeTogJ0ZpdHRpbmcnLCBkZWZhdWx0VmFsdWU6IHRydWV9KSxcbiAgREcuUHJvcGVydHkuanMoJ3Nob3dQb2ludHMnLCBERy5UWVBFLlNUUklORywgLy8gcmV3cml0ZSBkZXNjcmlwdGlvblxuICAgIHtjYXRlZ29yeTogJ0ZpdHRpbmcnLCBkZXNjcmlwdGlvbjogJ1doZXRoZXIgcG9pbnRzL2NhbmRsZXN0aWNrcy9ub25lIHNob3VsZCBiZSByZW5kZXJlZCcsXG4gICAgICBkZWZhdWx0VmFsdWU6ICdwb2ludHMnLCBjaG9pY2VzOiBbJ3BvaW50cycsICdjYW5kbGVzdGlja3MnLCAnYm90aCddfSksXG4gIERHLlByb3BlcnR5LmpzKCdzaG93T3V0bGllcnMnLCBERy5UWVBFLkJPT0wsIHtjYXRlZ29yeTogJ0ZpdHRpbmcnLCBkZWZhdWx0VmFsdWU6IHRydWV9KSxcbiAgREcuUHJvcGVydHkuanMoJ3Nob3dDdXJ2ZUNvbmZpZGVuY2VJbnRlcnZhbCcsIERHLlRZUEUuQk9PTCxcbiAgICB7Y2F0ZWdvcnk6ICdGaXR0aW5nJywgZGVzY3JpcHRpb246ICdXaGV0aGVyIGNvbmZpZGVuY2UgaW50ZXJ2YWxzIHNob3VsZCBiZSByZW5kZXJlZCcsIGRlZmF1bHRWYWx1ZTogZmFsc2UsXG4gICAgICAvL0B0cy1pZ25vcmVcbiAgICAgIGZyaWVuZGx5TmFtZTogJ0NvbmZpZGVuY2UgSW50ZXJ2YWwnfSksXG4gIERHLlByb3BlcnR5LmpzKCdtYXJrZXJUeXBlJywgREcuVFlQRS5TVFJJTkcsIHtjYXRlZ29yeTogJ1JlbmRlcmluZycsIGRlZmF1bHRWYWx1ZTogJ2NpcmNsZScsXG4gICAgY2hvaWNlczogWydhc3RlcmlzaycsICdjaXJjbGUnLCAnY3Jvc3MgYm9yZGVyJywgJ2RpYW1vbmQnLCAnc3F1YXJlJywgJ3N0YXInLFxuICAgICAgJ3RyaWFuZ2xlIGJvdHRvbScsICd0cmlhbmdsZSBsZWZ0JywgJ3RyaWFuZ2xlIHJpZ2h0JywgJ3RyaWFuZ2xlIHRvcCddLCBudWxsYWJsZTogZmFsc2UsXG4gICAgLy9AdHMtaWdub3JlXG4gICAgZnJpZW5kbHlOYW1lOiAnTWFya2VyJ30pLFxuICBERy5Qcm9wZXJ0eS5qcygnb3V0bGllck1hcmtlclR5cGUnLCBERy5UWVBFLlNUUklORywge2NhdGVnb3J5OiAnUmVuZGVyaW5nJywgZGVmYXVsdFZhbHVlOiAnb3V0bGllcicsXG4gICAgY2hvaWNlczogWydhc3RlcmlzaycsICdjaXJjbGUnLCAnY3Jvc3MgYm9yZGVyJywgJ2RpYW1vbmQnLCAnb3V0bGllcicsICdzcXVhcmUnLCAnc3RhcicsXG4gICAgICAndHJpYW5nbGUgYm90dG9tJywgJ3RyaWFuZ2xlIGxlZnQnLCAndHJpYW5nbGUgcmlnaHQnLCAndHJpYW5nbGUgdG9wJ10sIG51bGxhYmxlOiBmYWxzZSxcbiAgICAvL0B0cy1pZ25vcmVcbiAgICBmcmllbmRseU5hbWU6ICdPdXRsaWVyIE1hcmtlcid9KSxcbiAgREcuUHJvcGVydHkuanMoJ2xpbmVTdHlsZScsIERHLlRZUEUuU1RSSU5HLCB7Y2F0ZWdvcnk6ICdSZW5kZXJpbmcnLCBkZWZhdWx0VmFsdWU6ICdzb2xpZCcsXG4gICAgY2hvaWNlczogWydzb2xpZCcsICdkb3R0ZWQnLCAnZGFzaGVkJywgJ2Rhc2hkb3R0ZWQnXSwgbnVsbGFibGU6IGZhbHNlfSksXG4gIERHLlByb3BlcnR5LmpzKCdkcm9wbGluZXMnLCBERy5UWVBFLlNUUklOR19MSVNULCB7ZGVzY3JpcHRpb246ICdXaGV0aGVyIHNwZWNpZmljIGRyb3BsaW5lcyBzaG91bGQgYmUgcmVuZGVyZWQnLFxuICAgIGNob2ljZXM6IERST1BMSU5FUywgaW5wdXRUeXBlOiAnTXVsdGlDaG9pY2UnfSksXG4gIERHLlByb3BlcnR5LmpzKCdjb2x1bW5OYW1lJywgREcuVFlQRS5TVFJJTkcsIHtkZXNjcmlwdGlvbjogJ0NvbHVtbiBuYW1lIHdoZXJlIHRoZSBzZXJpZXMgaXMgc3RvcmVkJywgZGVmYXVsdFZhbHVlOiAnJ30pLFxuXTtcblxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3JDcmVhdGVGaXRGdW5jdGlvbihzZXJpZXNGaXRGdW5jOiBzdHJpbmcgfCBJRml0RnVuY3Rpb25EZXNjcmlwdGlvbik6IEZpdEZ1bmN0aW9uPEZpdD4ge1xuICBpZiAodHlwZW9mIHNlcmllc0ZpdEZ1bmMgPT09ICdzdHJpbmcnKVxuICAgIHJldHVybiBmaXRGdW5jdGlvbnNbc2VyaWVzRml0RnVuY107XG4gIGVsc2UgaWYgKCFmaXRGdW5jdGlvbnNbc2VyaWVzRml0RnVuYy5uYW1lXSkge1xuICAgIGNvbnN0IG5hbWUgPSBzZXJpZXNGaXRGdW5jLm5hbWU7XG4gICAgY29uc3QgcGFyYW1OYW1lcyA9IHNlcmllc0ZpdEZ1bmMucGFyYW1ldGVyTmFtZXM7XG4gICAgY29uc3QgZml0RnVuY3Rpb25QYXJ0cyA9IHNlcmllc0ZpdEZ1bmMuZnVuY3Rpb24uc3BsaXQoJz0+JykubWFwKChlbGVtKSA9PiBlbGVtLnRyaW0oKSk7XG4gICAgY29uc3QgZ2V0SW5pdFBhcmFtc1BhcnRzID0gc2VyaWVzRml0RnVuYy5nZXRJbml0aWFsUGFyYW1ldGVycy5zcGxpdCgnPT4nKS5tYXAoKGVsZW0pID0+IGVsZW0udHJpbSgpKTtcbiAgICBjb25zdCBmaXRGdW5jdGlvbiA9IG5ldyBGdW5jdGlvbihmaXRGdW5jdGlvblBhcnRzWzBdLnNsaWNlKDEsIGZpdEZ1bmN0aW9uUGFydHNbMF0ubGVuZ3RoIC0gMSksXG4gICAgICBgJHtmaXRGdW5jdGlvblBhcnRzWzFdLmluY2x1ZGVzKCc7JykgPyAnJyA6ICdyZXR1cm4gJ30ke2ZpdEZ1bmN0aW9uUGFydHNbMV19YCk7XG4gICAgY29uc3QgZ2V0SW5pdFBhcmFtc0Z1bmMgPSBuZXcgRnVuY3Rpb24oZ2V0SW5pdFBhcmFtc1BhcnRzWzBdLnNsaWNlKDEsIGdldEluaXRQYXJhbXNQYXJ0c1swXS5sZW5ndGggLSAxKSxcbiAgICAgIGByZXR1cm4gJHtnZXRJbml0UGFyYW1zUGFydHNbMV19YCk7XG4gICAgY29uc3QgZml0RnVuYyA9IG5ldyBKc0Z1bmN0aW9uKG5hbWUsIChmaXRGdW5jdGlvbiBhcyAocGFyYW1zOiBGbG9hdDMyQXJyYXksIHg6IG51bWJlcikgPT4gbnVtYmVyKSxcbiAgICAgIChnZXRJbml0UGFyYW1zRnVuYyBhcyAoeDogbnVtYmVyW10sIHk6IG51bWJlcltdKSA9PiBGbG9hdDMyQXJyYXkpLCBwYXJhbU5hbWVzKTtcbiAgICBmaXRGdW5jdGlvbnNbbmFtZV0gPSBmaXRGdW5jO1xuICB9XG5cbiAgcmV0dXJuIGZpdEZ1bmN0aW9uc1tzZXJpZXNGaXRGdW5jLm5hbWVdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZml0RGF0YShkYXRhOiB7eDogbnVtYmVyW10sIHk6IG51bWJlcltdfSwgZml0RnVuY3Rpb246IEZpdEZ1bmN0aW9uPEZpdD4sIGVycm9yTW9kZWw/OiBGaXRFcnJvck1vZGVsVHlwZSxcbiAgcGFyYW1ldGVyQm91bmRzPzogRml0UGFyYW1Cb3VuZHNbXSk6IEZpdEN1cnZlIHtcbiAgZXJyb3JNb2RlbCA/Pz0gRml0RXJyb3JNb2RlbC5DT05TVEFOVCBhcyBGaXRFcnJvck1vZGVsVHlwZTtcbiAgY29uc3QgY3VydmVGdW5jdGlvbiA9IGZpdEZ1bmN0aW9uLnk7XG4gIGxldCBwYXJhbVZhbHVlcyA9IGZpdEZ1bmN0aW9uLmdldEluaXRpYWxQYXJhbWV0ZXJzKGRhdGEueCwgZGF0YS55KTtcblxuICBjb25zdCBvZiA9IG9iamVjdGl2ZUZhY3RvcnkoY3VydmVGdW5jdGlvbiwgZGF0YSwgZXJyb3JNb2RlbCk7XG4gIGNvbnN0IGJvdHRvbVBhcmFtQm91bmRzID0gbmV3IEZsb2F0MzJBcnJheShmaXRGdW5jdGlvbi5wYXJhbWV0ZXJOYW1lcy5sZW5ndGgpO1xuICBjb25zdCB0b3BQYXJhbUJvdW5kcyA9IG5ldyBGbG9hdDMyQXJyYXkoZml0RnVuY3Rpb24ucGFyYW1ldGVyTmFtZXMubGVuZ3RoKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaXRGdW5jdGlvbi5wYXJhbWV0ZXJOYW1lcy5sZW5ndGg7IGkrKykge1xuICAgIGJvdHRvbVBhcmFtQm91bmRzW2ldID0gcGFyYW1WYWx1ZXNbaV0gPT09IDAgPyAtMSA6IHBhcmFtVmFsdWVzW2ldIC0gTWF0aC5hYnMocGFyYW1WYWx1ZXNbaV0gKiAwLjUpO1xuICAgIHRvcFBhcmFtQm91bmRzW2ldID0gcGFyYW1WYWx1ZXNbaV0gPT09IDAgPyAxIDogcGFyYW1WYWx1ZXNbaV0gKyBNYXRoLmFicyhwYXJhbVZhbHVlc1tpXSAqIDAuNSk7XG4gIH1cbiAgY29uc3QgcGFyYW1ldGVyQm91bmRzQml0c2V0OiBERy5CaXRTZXQgPSBERy5CaXRTZXQuY3JlYXRlKGZpdEZ1bmN0aW9uLnBhcmFtZXRlck5hbWVzLmxlbmd0aCAqIDIpO1xuICBpZiAocGFyYW1ldGVyQm91bmRzICYmIHBhcmFtZXRlckJvdW5kcy5sZW5ndGggIT09IDApIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcmFtZXRlckJvdW5kcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHBhcmFtZXRlckJvdW5kc1tpXS5taW4gIT09IHVuZGVmaW5lZCAmJiBwYXJhbWV0ZXJCb3VuZHNbaV0ubWluICE9PSBudWxsKSB7XG4gICAgICAgIGJvdHRvbVBhcmFtQm91bmRzW2ldID0gcGFyYW1ldGVyQm91bmRzW2ldLm1pbiE7XG4gICAgICAgIHBhcmFtZXRlckJvdW5kc0JpdHNldC5zZXQoaSAqIDIsIHRydWUpO1xuICAgICAgfVxuICAgICAgaWYgKHBhcmFtZXRlckJvdW5kc1tpXS5tYXggIT09IHVuZGVmaW5lZCAmJiBwYXJhbWV0ZXJCb3VuZHNbaV0ubWF4ICE9PSBudWxsKSB7XG4gICAgICAgIHRvcFBhcmFtQm91bmRzW2ldID0gcGFyYW1ldGVyQm91bmRzW2ldLm1heCE7XG4gICAgICAgIHBhcmFtZXRlckJvdW5kc0JpdHNldC5zZXQoaSAqIDIgKyAxLCB0cnVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgY29uc3QgZ2V0Q29uc2lzdGVuY3kgPSAoZXh0cmVtdW06IEV4dHJlbXVtKSA9PiB7XG4gICAgY29uc3QgcmVzaWR1YWxzID0gb2YoZXh0cmVtdW0ucG9pbnQpLnJlc2lkdWFscztcbiAgICBsZXQgcTFxNCA9IDA7XG4gICAgbGV0IHEycTMgPSAwO1xuICAgIC8vIFRPRE86IHJld3JpdGUgcXVhcnRpbGVzIHRvIGEgYmV0dGVyIGNvbmRpdGlvblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVzaWR1YWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocmVzaWR1YWxzLmxlbmd0aCAvIDQgPiBpKVxuICAgICAgICBxMXE0ICs9IE1hdGgucG93KHJlc2lkdWFsc1tpXSwgMik7XG4gICAgICBlbHNlIGlmICgzICogcmVzaWR1YWxzLmxlbmd0aCAvIDQgPiBpKVxuICAgICAgICBxMnEzICs9IE1hdGgucG93KHJlc2lkdWFsc1tpXSwgMik7XG4gICAgICBlbHNlXG4gICAgICAgIHExcTQgKz0gTWF0aC5wb3cocmVzaWR1YWxzW2ldLCAyKTtcbiAgICB9XG4gICAgcmV0dXJuIHExcTQgLyBxMnEzO1xuICB9O1xuXG4gIGxldCBpdGVyID0gLTE7XG4gIGxldCBjb250aW51ZU9wdGltaXphdGlvbiA9IDA7XG4gIGxldCBzdGF0aXN0aWNzOiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgbGV0IG9wdGltaXphdGlvbjogT3B0aW1pemF0aW9uUmVzdWx0O1xuICBsZXQgbWluSWR4ID0gMDtcbiAgZG8ge1xuICAgIG9wdGltaXphdGlvbiA9IHBlcmZvcm1OZWxkZXJNZWFkT3B0aW1pemF0aW9uKG9mLCBib3R0b21QYXJhbUJvdW5kcywgdG9wUGFyYW1Cb3VuZHMsIHtcbiAgICAgIHRvbGVyYW5jZTogTkVMREVSX01FQURfREVGQVVMVFMuVE9MRVJBTkNFLFxuICAgICAgbWF4SXRlcjogTkVMREVSX01FQURfREVGQVVMVFMuTUFYX0lURVIsXG4gICAgICBub25aZXJvUGFyYW06IE5FTERFUl9NRUFEX0RFRkFVTFRTLk5PTl9aRVJPX1BBUkFNLFxuICAgICAgaW5pdGlhbFNjYWxlOiBORUxERVJfTUVBRF9ERUZBVUxUUy5JTklUSUFMX1NDQUxFLFxuICAgICAgc2NhbGVSZWZsZWN0aW9uOiBORUxERVJfTUVBRF9ERUZBVUxUUy5TQ0FMRV9SRUZMRUNUSU9OLFxuICAgICAgc2NhbGVFeHBhbnNpb246IE5FTERFUl9NRUFEX0RFRkFVTFRTLlNDQUxFX0VYUEFOU0lPTixcbiAgICAgIHNjYWxlQ29udHJhY3Rpb246IE5FTERFUl9NRUFEX0RFRkFVTFRTLlNDQUxFX0NPTlRSQUNUSU9OLFxuICAgIH0sIDEwLCBwYXJhbVZhbHVlcyk7XG5cbiAgICBtaW5JZHggPSAwO1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgb3B0aW1pemF0aW9uLmV4dHJlbXVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKG9wdGltaXphdGlvbi5leHRyZW11bXNbaV0uY29zdCA8IG9wdGltaXphdGlvbi5leHRyZW11bXNbbWluSWR4XS5jb3N0KVxuICAgICAgICBtaW5JZHggPSBpO1xuICAgIH1cblxuICAgIGNvbnN0IG5ld1N0YXRpc3RpY3MgPSBnZXRDb25zaXN0ZW5jeShvcHRpbWl6YXRpb24uZXh0cmVtdW1zW21pbklkeF0pO1xuICAgIGlmIChzdGF0aXN0aWNzID09PSBudWxsKVxuICAgICAgc3RhdGlzdGljcyA9IG5ld1N0YXRpc3RpY3M7XG4gICAgZWxzZSBpZiAobmV3U3RhdGlzdGljcyA8IHN0YXRpc3RpY3MpIHtcbiAgICAgIHN0YXRpc3RpY3MgPSBuZXdTdGF0aXN0aWNzO1xuICAgICAgY29udGludWVPcHRpbWl6YXRpb24gPSAwO1xuICAgIH1cbiAgICBlbHNlXG4gICAgICBjb250aW51ZU9wdGltaXphdGlvbisrO1xuXG4gICAgcGFyYW1WYWx1ZXMgPSBvcHRpbWl6YXRpb24uZXh0cmVtdW1zW21pbklkeF0ucG9pbnQ7XG5cbiAgICBpZiAoaXRlciA+IDQwIHx8IGNvbnRpbnVlT3B0aW1pemF0aW9uID09PSAzKVxuICAgICAgYnJlYWs7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpdEZ1bmN0aW9uLnBhcmFtZXRlck5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoIXBhcmFtZXRlckJvdW5kc0JpdHNldC5nZXQoaSAqIDIpKVxuICAgICAgICBib3R0b21QYXJhbUJvdW5kc1tpXSA9IHBhcmFtVmFsdWVzW2ldIC0gTWF0aC5hYnMocGFyYW1WYWx1ZXNbaV0gKiAoY29udGludWVPcHRpbWl6YXRpb24gKyAwLjUpKTtcbiAgICAgIGlmICghcGFyYW1ldGVyQm91bmRzQml0c2V0LmdldChpICogMiArIDEpKVxuICAgICAgICB0b3BQYXJhbUJvdW5kc1tpXSA9IHBhcmFtVmFsdWVzW2ldICsgTWF0aC5hYnMocGFyYW1WYWx1ZXNbaV0gKiAoY29udGludWVPcHRpbWl6YXRpb24gKyAwLjUpKTtcbiAgICB9XG5cbiAgICBpdGVyKys7XG4gIH0gd2hpbGUgKHRydWUpO1xuXG4gIGNvbnN0IGZpdHRlZEN1cnZlID0gZ2V0Rml0dGVkQ3VydmUoY3VydmVGdW5jdGlvbiwgcGFyYW1WYWx1ZXMpO1xuXG4gIHJldHVybiB7XG4gICAgZml0dGVkQ3VydmU6IGZpdHRlZEN1cnZlLFxuICAgIHBhcmFtZXRlcnM6IHBhcmFtVmFsdWVzLFxuICB9O1xufVxuXG5cbmZ1bmN0aW9uIG9iamVjdGl2ZUZhY3RvcnkodGFyZ2V0RnVuYzogKHBhcmFtczogRmxvYXQzMkFycmF5LCB4OiBudW1iZXIpID0+IG51bWJlcixcbiAgZGF0YToge3k6IG51bWJlcltdLCB4OiBudW1iZXJbXX0sIGVycm9yTW9kZWw6IEZpdEVycm9yTW9kZWxUeXBlKTpcbiAgICAocGFyYW1zOiBGbG9hdDMyQXJyYXkpID0+IHtsaWtlbGlob29kOiBudW1iZXIsIHJlc2lkdWFsczogbnVtYmVyW119IHtcbiAgcmV0dXJuIChwYXJhbXM6IEZsb2F0MzJBcnJheSkgPT4ge1xuICAgIGxldCBsaWtlbGlob29kID0gMDtcbiAgICBsZXQgc2lnbWFBID0gMDtcbiAgICBsZXQgc2lnbWFCID0gMDtcblxuICAgIGNvbnN0IG9icyA9IGRhdGEueTtcbiAgICBjb25zdCBwcmVkID0gZGF0YS54Lm1hcCgoeCkgPT4gdGFyZ2V0RnVuYyhwYXJhbXMsIHgpKTtcbiAgICBjb25zdCByZXNpZHVhbHMgPSBvYnMubWFwKChvYnMsIGkpID0+IG9icyAtIHByZWRbaV0pO1xuICAgIGNvbnN0IHJlc2lkdWVzU3F1YXJlcyA9IHJlc2lkdWFscy5tYXAoKHJlcykgPT4gTWF0aC5wb3cocmVzLCAyKSk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc2lkdWVzU3F1YXJlcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKFtGaXRFcnJvck1vZGVsLkNPTlNUQU5ULCBGaXRFcnJvck1vZGVsLkNPTUJJTkVEXS5pbmNsdWRlcyhlcnJvck1vZGVsKSlcbiAgICAgICAgc2lnbWFBICs9IHJlc2lkdWVzU3F1YXJlc1tpXTtcbiAgICAgIGVsc2UgaWYgKGVycm9yTW9kZWwgPT09IEZpdEVycm9yTW9kZWwuUFJPUE9SVElPTkFMKVxuICAgICAgICBzaWdtYUIgKz0gcmVzaWR1ZXNTcXVhcmVzW2ldIC8gKHByZWRbaV0gKiBwcmVkW2ldKTtcbiAgICB9XG4gICAgc2lnbWFBID0gTWF0aC5zcXJ0KHNpZ21hQSAvIHJlc2lkdWVzU3F1YXJlcy5sZW5ndGgpO1xuICAgIHNpZ21hQiA9IE1hdGguc3FydChzaWdtYUIgLyByZXNpZHVlc1NxdWFyZXMubGVuZ3RoKTtcblxuICAgIGlmIChlcnJvck1vZGVsID09PSBGaXRFcnJvck1vZGVsLkNPTUJJTkVEKVxuICAgICAgKHtzaWdtYUEsIHNpZ21hQn0gPSBnZXRTaWdtYXNGb3JDb21iaW5lZEVycm9yTW9kZWwoc2lnbWFBLCBzaWdtYUIsIHJlc2lkdWVzU3F1YXJlcywgcHJlZCkpO1xuXG4gICAgY29uc3Qgc2lnbWFTcUk6IG51bWJlcltdID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXNpZHVlc1NxdWFyZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHNpZ21hU3FJW2ldID0gTWF0aC5wb3coc2lnbWFBICsgc2lnbWFCICogcHJlZFtpXSwgMik7XG4gICAgICBsaWtlbGlob29kICs9IHJlc2lkdWVzU3F1YXJlc1tpXSAvIHNpZ21hU3FJW2ldICsgTWF0aC5sb2coMiAqIE1hdGguUEkgKiBzaWdtYVNxSVtpXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtsaWtlbGlob29kLCByZXNpZHVhbHN9O1xuICB9O1xufVxuXG5cbmZ1bmN0aW9uIGdldFNpZ21hKHRhcmdldEZ1bmM6IChwYXJhbXM6IEZsb2F0MzJBcnJheSwgeDogbnVtYmVyKSA9PiBudW1iZXIsXG4gIGRhdGE6IHt5OiBudW1iZXJbXSwgeDogbnVtYmVyW119LCBlcnJvck1vZGVsOiBGaXRFcnJvck1vZGVsVHlwZSwgcGFyYW1zOiBGbG9hdDMyQXJyYXkpOiB7c2lnbWFBOiBudW1iZXIsIHNpZ21hQjogbnVtYmVyfSB7XG4gIGxldCBzaWdtYUEgPSAwO1xuICBsZXQgc2lnbWFCID0gMDtcblxuICBjb25zdCBvYnMgPSBkYXRhLnk7XG4gIGNvbnN0IHByZWQgPSBkYXRhLngubWFwKCh4KSA9PiB0YXJnZXRGdW5jKHBhcmFtcywgeCkpO1xuICBjb25zdCByZXNpZHVhbHMgPSBvYnMubWFwKChvYnMsIGkpID0+IG9icyAtIHByZWRbaV0pO1xuICBjb25zdCByZXNpZHVlc1NxdWFyZXMgPSByZXNpZHVhbHMubWFwKChyZXMpID0+IE1hdGgucG93KHJlcywgMikpO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcmVzaWR1ZXNTcXVhcmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKFtGaXRFcnJvck1vZGVsLkNPTlNUQU5ULCBGaXRFcnJvck1vZGVsLkNPTUJJTkVEXS5pbmNsdWRlcyhlcnJvck1vZGVsKSlcbiAgICAgIHNpZ21hQSArPSByZXNpZHVlc1NxdWFyZXNbaV07XG4gICAgZWxzZSBpZiAoZXJyb3JNb2RlbCA9PT0gRml0RXJyb3JNb2RlbC5QUk9QT1JUSU9OQUwpXG4gICAgICBzaWdtYUIgKz0gTWF0aC5wb3cocmVzaWR1YWxzW2ldIC8gTWF0aC5hYnMocHJlZFtpXSksIDIpO1xuICB9XG4gIHNpZ21hQSA9IE1hdGguc3FydChzaWdtYUEgLyByZXNpZHVlc1NxdWFyZXMubGVuZ3RoKTtcbiAgc2lnbWFCID0gTWF0aC5zcXJ0KHNpZ21hQiAvIHJlc2lkdWVzU3F1YXJlcy5sZW5ndGgpO1xuXG4gIGlmIChlcnJvck1vZGVsID09PSBGaXRFcnJvck1vZGVsLkNPTUJJTkVEKVxuICAgICh7c2lnbWFBLCBzaWdtYUJ9ID0gZ2V0U2lnbWFzRm9yQ29tYmluZWRFcnJvck1vZGVsKHNpZ21hQSwgc2lnbWFCLCByZXNpZHVlc1NxdWFyZXMsIHByZWQpKTtcblxuICByZXR1cm4ge3NpZ21hQSwgc2lnbWFCfTtcbn1cblxuZnVuY3Rpb24gZ2V0U2lnbWFzRm9yQ29tYmluZWRFcnJvck1vZGVsKHNpZ21hQTogbnVtYmVyLCBzaWdtYUI6IG51bWJlciwgcmVzaWR1ZXNTcXVhcmVzOiBudW1iZXJbXSwgcHJlZDogbnVtYmVyW10pOlxuICB7c2lnbWFBOiBudW1iZXIsIHNpZ21hQjogbnVtYmVyfSB7XG4gIGxldCBsaWtlbGlob29kQ29tYmluZWQgPSBOdW1iZXIuTUFYX1ZBTFVFO1xuICBsZXQgZmluYWxQcm9wb3J0aW9uID0gMDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPD0gMTA7IGkrKykge1xuICAgIGxldCBsaWtlbGlob29kQ29tYmluZWRMb2NhbCA9IDA7XG4gICAgY29uc3QgcHJvcG9ydGlvbiA9IGkgLyAxMDtcbiAgICBjb25zdCBzaWdtYUFDb21iaW5lZCA9IHNpZ21hQSAqIHByb3BvcnRpb247XG4gICAgY29uc3Qgc2lnbWFCQ29tYmluZWQgPSBzaWdtYUEgKiAoMSAtIHByb3BvcnRpb24pO1xuICAgIGNvbnN0IHNpZ21hU3FJQ29tYmluZWQ6IG51bWJlcltdID0gW107XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCByZXNpZHVlc1NxdWFyZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgIHNpZ21hU3FJQ29tYmluZWRbal0gPSBNYXRoLnBvdyhzaWdtYUFDb21iaW5lZCArIHNpZ21hQkNvbWJpbmVkICogcHJlZFtqXSwgMik7XG4gICAgICBsaWtlbGlob29kQ29tYmluZWRMb2NhbCArPSByZXNpZHVlc1NxdWFyZXNbal0gLyBzaWdtYVNxSUNvbWJpbmVkW2pdICsgTWF0aC5sb2coMiAqIE1hdGguUEkgKiBzaWdtYVNxSUNvbWJpbmVkW2pdKTtcbiAgICB9XG4gICAgaWYgKGxpa2VsaWhvb2RDb21iaW5lZExvY2FsIDwgbGlrZWxpaG9vZENvbWJpbmVkKSB7XG4gICAgICBsaWtlbGlob29kQ29tYmluZWQgPSBsaWtlbGlob29kQ29tYmluZWRMb2NhbDtcbiAgICAgIGZpbmFsUHJvcG9ydGlvbiA9IHByb3BvcnRpb247XG4gICAgfVxuICB9XG4gIHNpZ21hQiA9IHNpZ21hQSAqICgxIC0gZmluYWxQcm9wb3J0aW9uKTtcbiAgc2lnbWFBID0gc2lnbWFBICogZmluYWxQcm9wb3J0aW9uO1xuXG4gIHJldHVybiB7c2lnbWFBLCBzaWdtYUJ9O1xufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDdXJ2ZUNvbmZpZGVuY2VJbnRlcnZhbHMoZGF0YToge3g6IG51bWJlcltdLCB5OiBudW1iZXJbXX0sIHBhcmFtVmFsdWVzOiBGbG9hdDMyQXJyYXksXG4gIGN1cnZlRnVuY3Rpb246IChwYXJhbXM6IEZsb2F0MzJBcnJheSwgeDogbnVtYmVyKSA9PiBudW1iZXIsIGNvbmZpZGVuY2VMZXZlbDogbnVtYmVyID0gMC4wNSwgZXJyb3JNb2RlbDogRml0RXJyb3JNb2RlbFR5cGUpOlxuICBGaXRDb25maWRlbmNlSW50ZXJ2YWxzIHtcbiAgY29uc3QgZXJyb3IgPSBnZXRTaWdtYShjdXJ2ZUZ1bmN0aW9uLCBkYXRhLCBlcnJvck1vZGVsLCBwYXJhbVZhbHVlcyk7XG4gIGNvbnN0IHF1YW50aWxlID0galN0YXQubm9ybWFsLmludigxIC0gY29uZmlkZW5jZUxldmVsLzIsIDAsIDEpO1xuXG4gIGNvbnN0IHRvcCA9ICh4OiBudW1iZXIpID0+IHtcbiAgICBjb25zdCB2YWx1ZSA9IGN1cnZlRnVuY3Rpb24ocGFyYW1WYWx1ZXMsIHgpO1xuICAgIHJldHVybiB2YWx1ZSArIHF1YW50aWxlICogKGVycm9yLnNpZ21hQSArIE1hdGguYWJzKHZhbHVlKSAqIGVycm9yLnNpZ21hQik7XG4gIH07XG5cbiAgY29uc3QgYm90dG9tID0gKHg6IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IHZhbHVlID0gY3VydmVGdW5jdGlvbihwYXJhbVZhbHVlcywgeCk7XG4gICAgcmV0dXJuIHZhbHVlIC0gcXVhbnRpbGUgKiAoZXJyb3Iuc2lnbWFBICsgTWF0aC5hYnModmFsdWUpICogZXJyb3Iuc2lnbWFCKTtcbiAgfTtcblxuICByZXR1cm4ge2NvbmZpZGVuY2VUb3A6IHRvcCwgY29uZmlkZW5jZUJvdHRvbTogYm90dG9tfTtcbn1cblxuXG4vLyBjb25zdCBzZXJpZXM6IEZpdFNlcmllcyA9IG5ldyBGaXRTZXJpZXMoW1xuLy8gICB7J3gnOiAwLCAneSc6IDB9LFxuLy8gICB7J3gnOiAxLCAneSc6IDAuNX0sXG4vLyAgIHsneCc6IDIsICd5JzogMX0sXG4vLyAgIHsneCc6IDMsICd5JzogMTAsICdvdXRsaWVyJzogdHJ1ZX0sXG4vLyAgIHsneCc6IDQsICd5JzogMH0sXG4vLyBdKTtcblxuIl19
|
|
550
|
+
;
|
|
551
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV3LWZpdC1BUEkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJuZXctZml0LUFQSS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSw0QkFBNEI7QUFDNUIsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0QyxPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLE1BQU0sRUFHTixvQkFBb0IsRUFDcEIsT0FBTyxFQUNQLHVCQUF1QixFQUN2QixTQUFTLEVBQ1Qsd0JBQXdCLEVBQ3hCLFdBQVcsRUFDWCwyQkFBMkIsRUFDM0IsZ0JBQWdCLEVBTWEsTUFBTSxFQUFFLFdBQVcsRUFDaEQsZUFBZSxFQUNmLDhCQUE4QixFQUM5QixrQkFBa0IsRUFDbEIsU0FBUyxFQUNULGFBQWEsRUFFYixjQUFjLEdBQ2YsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFDLFNBQVMsRUFBRSxhQUFhLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDcEQsc0JBQXNCO0FBQ3RCLE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBRS9CLE9BQU8sRUFBQyw2QkFBNkIsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBQzVFLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLDJDQUEyQyxDQUFDO0FBRy9FLGtDQUFrQztBQUNsQyxNQUFNLE9BQWdCLFdBQVc7Q0FNaEM7QUFFRCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRztJQUM5QixPQUFPLEVBQUUsU0FBUztJQUNsQixNQUFNLEVBQUUsUUFBUTtJQUNoQixVQUFVLEVBQUUsWUFBWTtJQUN4QixXQUFXLEVBQUUsYUFBYTtJQUMxQixrQkFBa0IsRUFBRSxnQkFBZ0I7SUFDcEMscUJBQXFCLEVBQUUsbUJBQW1CO0NBQ2xDLENBQUM7QUFtQ1gsTUFBTSxPQUFnQixHQUFHO0lBT3ZCLFlBQXNCLE1BQVksRUFBRSxJQUFlO1FBQ2pELElBQUksQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQztRQUN0QixJ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T0FBTyxLQUFLLEdBQUcsUUFBUSxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM1RSxDQUFDLENBQUM7SUFFRixPQUFPLEVBQUMsYUFBYSxFQUFFLEdBQUcsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLEVBQUMsQ0FBQztBQUN4RCxDQUFDO0FBZ0JBLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuICovXG5pbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuaW1wb3J0IHtcbiAgRklUX0ZVTkNUSU9OX0xJTkVBUixcbiAgbGluZWFyLFxuICBJRml0U2VyaWVzLFxuICBJRml0UG9pbnQsXG4gIEZJVF9GVU5DVElPTl9TSUdNT0lELFxuICBzaWdtb2lkLFxuICBGSVRfRlVOQ1RJT05fTE9HX0xJTkVBUixcbiAgbG9nTGluZWFyLFxuICBGSVRfRlVOQ1RJT05fRVhQT05FTlRJQUwsXG4gIGV4cG9uZW50aWFsLFxuICBGSVRfRlVOQ1RJT05fNFBMX1JFR1JFU1NJT04sXG4gIGZvdXJQTFJlZ3Jlc3Npb24sXG4gIElGaXRGdW5jdGlvbkRlc2NyaXB0aW9uLFxuICBGaXRQYXJhbUJvdW5kcyxcbiAgRml0TWFya2VyVHlwZSxcbiAgRml0T3V0bGllck1hcmtlclR5cGUsXG4gIEZpdExpbmVTdHlsZSxcbiAgRml0RXJyb3JNb2RlbFR5cGUsIEZpdEN1cnZlLCBnZXRBdWMsIGdldERldENvZWZmLFxuICBGSVRfSlNfRlVOQ1RJT04sXG4gIEZJVF9GVU5DVElPTl80UExfRE9TRV9SRVNQT05TRSxcbiAgZm91clBMRG9zZVJlc3BvbnNlLFxuICBEUk9QTElORVMsXG4gIEZpdEVycm9yTW9kZWwsXG4gIEZpdENvbmZpZGVuY2VJbnRlcnZhbHMsXG4gIGdldEZpdHRlZEN1cnZlLFxufSBmcm9tICcuL2ZpdC1jdXJ2ZSc7XG5pbXBvcnQge2ZpdFNlcmllcywgZ2V0RGF0YVBvaW50c30gZnJvbSAnLi9maXQtZGF0YSc7XG4vL0B0cy1pZ25vcmU6IG5vIHR5cGVzXG5pbXBvcnQgKiBhcyBqU3RhdCBmcm9tICdqc3RhdCc7XG5pbXBvcnQge0V4dHJlbXVtLCBPcHRpbWl6YXRpb25SZXN1bHR9IGZyb20gJy4vZml0dGluZy1hbGdvcml0aG0vb3B0aW1pemVyLW1pc2MnO1xuaW1wb3J0IHtwZXJmb3JtTmVsZGVyTWVhZE9wdGltaXphdGlvbn0gZnJvbSAnLi9maXR0aW5nLWFsZ29yaXRobS9vcHRpbWl6ZXInO1xuaW1wb3J0IHtORUxERVJfTUVBRF9ERUZBVUxUU30gZnJvbSAnLi9maXR0aW5nLWFsZ29yaXRobS9vcHRpbWl6ZXItbmVsZGVyLW1lYWQnO1xuXG5cbi8qKiBDbGFzcyBmb3IgdGhlIGZpdCBmdW5jdGlvbnMgKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBGaXRGdW5jdGlvbjxUID0gRml0PiB7XG4gIGFic3RyYWN0IGdldCBuYW1lKCk6IHN0cmluZztcbiAgYWJzdHJhY3QgZ2V0IHBhcmFtZXRlck5hbWVzKCk6IHN0cmluZ1tdO1xuICBhYnN0cmFjdCBmaWxsUGFyYW1zKGZpdEN1cnZlOiBGaXRDdXJ2ZSwgZGF0YTogRml0U2VyaWVzKTogVDtcbiAgYWJzdHJhY3QgeShwYXJhbXM6IEZsb2F0MzJBcnJheSwgeDogbnVtYmVyKTogbnVtYmVyO1xuICBhYnN0cmFjdCBnZXRJbml0aWFsUGFyYW1ldGVycyh4OiBudW1iZXJbXSwgeTogbnVtYmVyW10pOiBGbG9hdDMyQXJyYXk7XG59XG5cbmV4cG9ydCBjb25zdCBGaXRGdW5jdGlvblR5cGVzID0ge1xuICBTSUdNT0lEOiAnc2lnbW9pZCcsXG4gIExJTkVBUjogJ2xpbmVhcicsXG4gIExPR19MSU5FQVI6ICdsb2ctbGluZWFyJyxcbiAgRVhQT05FTlRJQUw6ICdleHBvbmVudGlhbCcsXG4gIEZPVVJfUExfUkVHUkVTU0lPTjogJzRwbC1yZWdyZXNzaW9uJyxcbiAgRk9VUl9QTF9ET1NFX1JFU1BPTlNFOiAnNHBsLWRvc2UtcmVzcG9uc2UnLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IHR5cGUgRml0RnVuY3Rpb25UeXBlID0gdHlwZW9mIEZpdEZ1bmN0aW9uVHlwZXNba2V5b2YgdHlwZW9mIEZpdEZ1bmN0aW9uVHlwZXNdO1xuXG5pbnRlcmZhY2UgSUZpdCB7XG4gIGF1YzogbnVtYmVyO1xuICByU3F1YXJlZDogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgSUxpbmVhckZpdCBleHRlbmRzIElGaXQge1xuICBzbG9wZTogbnVtYmVyO1xuICBpbnRlcmNlcHQ6IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIElMb2dMaW5lYXJGaXQgZXh0ZW5kcyBJTGluZWFyRml0IHt9XG5cbmludGVyZmFjZSBJU2lnbW9pZEZpdCBleHRlbmRzIElGaXQge1xuICB0b3A6IG51bWJlcjtcbiAgc2xvcGU6IG51bWJlcjtcbiAgaWM1MDogbnVtYmVyO1xuICBib3R0b206IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIElFeHBvbmVudGlhbEZpdCBleHRlbmRzIElGaXQge1xuICBtYW50aXNzYTogbnVtYmVyO1xuICBwb3dlcjogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgSUZvdXJQTFJlZ3Jlc3Npb25GaXQgZXh0ZW5kcyBJRml0IHtcbiAgdG9wOiBudW1iZXI7XG4gIGJvdHRvbTogbnVtYmVyO1xuICBzbG9wZTogbnVtYmVyO1xuICBlYzUwOiBudW1iZXI7XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBGaXQgaW1wbGVtZW50cyBJRml0IHtcbiAgYXVjOiBudW1iZXI7XG4gIHJTcXVhcmVkOiBudW1iZXI7XG4gIHNlcmllczogRml0U2VyaWVzO1xuXG4gIGFic3RyYWN0IGdldCBuYW1lKCk6IHN0cmluZztcblxuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IodmFsdWVzOiBJRml0LCBkYXRhOiBGaXRTZXJpZXMpIHtcbiAgICB0aGlzLmF1YyA9IHZhbHVlcy5hdWM7XG4gICAgdGhpcy5yU3F1YXJlZCA9IHZhbHVlcy5yU3F1YXJlZDtcbiAgICB0aGlzLnNlcmllcyA9IGRhdGE7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEpTRnVuY3Rpb25GaXQgZXh0ZW5kcyBGaXQge1xuICBjb25zdHJ1Y3Rvcih2YWx1ZXM6IElGaXQsIGRhdGE6IEZpdFNlcmllcykge1xuICAgIHN1cGVyKHZhbHVlcywgZGF0YSk7XG4gIH1cbiAgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gRklUX0pTX0ZVTkNUSU9OO1xuICB9XG59XG5cbmNsYXNzIExpbmVhckZpdCBleHRlbmRzIEZpdCBpbXBsZW1lbnRzIElMaW5lYXJGaXQge1xuICBzbG9wZTogbnVtYmVyO1xuICBpbnRlcmNlcHQ6IG51bWJlcjtcblxuICBnZXQgbmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBGSVRfRlVOQ1RJT05fTElORUFSO1xuICB9XG5cbiAgY29uc3RydWN0b3IodmFsdWVzOiBJTGluZWFyRml0LCBkYXRhOiBGaXRTZXJpZXMpIHtcbiAgICBzdXBlcih2YWx1ZXMsIGRhdGEpO1xuICAgIHRoaXMuc2xvcGUgPSB2YWx1ZXMuc2xvcGU7XG4gICAgdGhpcy5pbnRlcmNlcHQgPSB2YWx1ZXMuaW50ZXJjZXB0O1xuICB9XG59XG5cbmNsYXNzIExvZ0xpbmVhckZpdCBleHRlbmRzIExpbmVhckZpdCBpbXBsZW1lbnRzIElMb2dMaW5lYXJGaXQge1xuICBnZXQgbmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBGSVRfRlVOQ1RJT05fTE9HX0xJTkVBUjtcbiAgfVxufVxuXG5jbGFzcyBTaWdtb2lkRml0IGV4dGVuZHMgRml0IGltcGxlbWVudHMgSVNpZ21vaWRGaXQge1xuICB0b3A6IG51bWJlcjtcbiAgc2xvcGU6IG51bWJlcjtcbiAgaWM1MDogbnVtYmVyO1xuICBib3R0b206IG51bWJlcjtcblxuICBnZXQgbmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBGSVRfRlVOQ1RJT05fU0lHTU9JRDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHZhbHVlczogSVNpZ21vaWRGaXQsIGRhdGE6IEZpdFNlcmllcykge1xuICAgIHN1cGVyKHZhbHVlcywgZGF0YSk7XG4gICAgdGhpcy50b3AgPSB2YWx1ZXMudG9wO1xuICAgIHRoaXMuc2xvcGUgPSB2YWx1ZXMuc2xvcGU7XG4gICAgdGhpcy5pYzUwID0gdmFsdWVzLmljNTA7XG4gICAgdGhpcy5ib3R0b20gPSB2YWx1ZXMuYm90dG9tO1xuICB9XG59XG5cbmNsYXNzIEV4cG9uZW50aWFsRml0IGV4dGVuZHMgRml0IGltcGxlbWVudHMgSUV4cG9uZW50aWFsRml0IHtcbiAgbWFudGlzc2E6IG51bWJlcjtcbiAgcG93ZXI6IG51bWJlcjtcblxuICBnZXQgbmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBGSVRfRlVOQ1RJT05fRVhQT05FTlRJQUw7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcih2YWx1ZXM6IElFeHBvbmVudGlhbEZpdCwgZGF0YTogRml0U2VyaWVzKSB7XG4gICAgc3VwZXIodmFsdWVzLCBkYXRhKTtcbiAgICB0aGlzLm1hbnRpc3NhID0gdmFsdWVzLm1hbnRpc3NhO1xuICAgIHRoaXMucG93ZXIgPSB2YWx1ZXMucG93ZXI7XG4gIH1cbn1cblxuY2xhc3MgRm91clBMUmVncmVzc2lvbkZpdCBleHRlbmRzIEZpdCBpbXBsZW1lbnRzIElGb3VyUExSZWdyZXNzaW9uRml0IHtcbiAgdG9wOiBudW1iZXI7XG4gIGJvdHRvbTogbnVtYmVyO1xuICBzbG9wZTogbnVtYmVyO1xuICBlYzUwOiBudW1iZXI7XG5cbiAgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gRklUX0ZVTkNUSU9OXzRQTF9SRUdSRVNTSU9OO1xuICB9XG5cbiAgY29uc3RydWN0b3IodmFsdWVzOiBJRm91clBMUmVncmVzc2lvbkZpdCwgZGF0YTogRml0U2VyaWVzKSB7XG4gICAgc3VwZXIodmFsdWVzLCBkYXRhKTtcbiAgICB0aGlzLnRvcCA9IHZhbHVlcy50b3A7XG4gICAgdGhpcy5ib3R0b20gPSB2YWx1ZXMuYm90dG9tO1xuICAgIHRoaXMuc2xvcGUgPSB2YWx1ZXMuc2xvcGU7XG4gICAgdGhpcy5lYzUwID0gdmFsdWVzLmVjNTA7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0QXVjQW5kUnNxdWFyZWQoZml0Q3VydmU6ICh4OiBudW1iZXIpID0+IG51bWJlciwgZGF0YToge3g6IG51bWJlcltdLCB5OiBudW1iZXJbXX0pOiBJRml0IHtcbiAgcmV0dXJuIHtcbiAgICBhdWM6IGdldEF1YyhmaXRDdXJ2ZSwgZGF0YSksXG4gICAgclNxdWFyZWQ6IGdldERldENvZWZmKGZpdEN1cnZlLCBkYXRhKSxcbiAgfTtcbn1cblxuLyoqIENsYXNzIHRoYXQgaW1wbGVtZW50cyB0aGUgbGluZWFyIGZ1bmN0aW9uICovXG5leHBvcnQgY2xhc3MgTGluZWFyRnVuY3Rpb24gZXh0ZW5kcyBGaXRGdW5jdGlvbjxMaW5lYXJGaXQ+IHtcbiAgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gRklUX0ZVTkNUSU9OX0xJTkVBUjtcbiAgfVxuXG4gIGdldCBwYXJhbWV0ZXJOYW1lcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFsnU2xvcGUnLCAnSW50ZXJjZXB0J107XG4gIH1cblxuICBmaWxsUGFyYW1zKGZpdEN1cnZlOiBGaXRDdXJ2ZSwgZGF0YTogRml0U2VyaWVzKTogTGluZWFyRml0IHtcbiAgICByZXR1cm4gbmV3IExpbmVhckZpdCh7XG4gICAgICAuLi5nZXRBdWNBbmRSc3F1YXJlZChmaXRDdXJ2ZS5maXR0ZWRDdXJ2ZSwgZ2V0RGF0YVBvaW50cyhkYXRhKSksXG4gICAgICBzbG9wZTogZml0Q3VydmUucGFyYW1ldGVyc1swXSxcbiAgICAgIGludGVyY2VwdDogZml0Q3VydmUucGFyYW1ldGVyc1sxXSxcbiAgICB9LCBkYXRhKTtcbiAgfVxuXG4gIHkocGFyYW1zOiBGbG9hdDMyQXJyYXksIHg6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIGxpbmVhcihwYXJhbXMsIHgpO1xuICB9XG5cbiAgZ2V0SW5pdGlhbFBhcmFtZXRlcnMoeDogbnVtYmVyW10sIHk6IG51bWJlcltdKTogRmxvYXQzMkFycmF5IHtcbiAgICBsZXQgbWluSW5kZXggPSAwO1xuICAgIGxldCBtYXhJbmRleCA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCB4Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoeFtpXSA8IHhbbWluSW5kZXhdKVxuICAgICAgICBtaW5JbmRleCA9IGk7XG4gICAgICBpZiAoeFtpXSA+IHhbbWF4SW5kZXhdKVxuICAgICAgICBtYXhJbmRleCA9IGk7XG4gICAgfVxuXG4gICAgY29uc3QgZGVsdGFYID0geFttYXhJbmRleF0gLSB4W21pbkluZGV4XTtcbiAgICBjb25zdCBkZWx0YVkgPSB5W21heEluZGV4XSAtIHlbbWluSW5kZXhdO1xuICAgIGNvbnN0IEEgPSBkZWx0YVkgLyBkZWx0YVg7XG4gICAgY29uc3QgQiA9IHlbbWF4SW5kZXhdIC0gQSAqIHhbbWF4SW5kZXhdO1xuICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBGbG9hdDMyQXJyYXkoMik7XG4gICAgcGFyYW1zLnNldChbQSwgQl0pO1xuICAgIHJldHVybiBwYXJhbXM7XG4gIH1cbn1cblxuLyoqIENsYXNzIHRoYXQgaW1wbGVtZW50cyB0aGUgc2lnbW9pZCBmdW5jdGlvbiAqL1xuZXhwb3J0IGNsYXNzIFNpZ21vaWRGdW5jdGlvbiBleHRlbmRzIEZpdEZ1bmN0aW9uPFNpZ21vaWRGaXQ+IHtcbiAgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gRklUX0ZVTkNUSU9OX1NJR01PSUQ7XG4gIH1cblxuICBnZXQgcGFyYW1ldGVyTmFtZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbJ1RvcCcsICdTbG9wZScsICdJQzUwJywgJ0JvdHRvbSddO1xuICB9XG5cbiAgZmlsbFBhcmFtcyhmaXRDdXJ2ZTogRml0Q3VydmUsIGRhdGE6IEZpdFNlcmllcyk6IFNpZ21vaWRGaXQge1xuICAgIHJldHVybiBuZXcgU2lnbW9pZEZpdCh7XG4gICAgICAuLi5nZXRBdWNBbmRSc3F1YXJlZChmaXRDdXJ2ZS5maXR0ZWRDdXJ2ZSwgZ2V0RGF0YVBvaW50cyhkYXRhKSksXG4gICAgICB0b3A6IGZpdEN1cnZlLnBhcmFtZXRlcnNbMF0sXG4gICAgICBzbG9wZTogZml0Q3VydmUucGFyYW1ldGVyc1sxXSxcbiAgICAgIGljNTA6IGZpdEN1cnZlLnBhcmFtZXRlcnNbMl0sXG4gICAgICBib3R0b206IGZpdEN1cnZlLnBhcmFtZXRlcnNbM10sXG4gICAgfSwgZGF0YSk7XG4gIH1cblxuICB5KHBhcmFtczogRmxvYXQzMkFycmF5LCB4OiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiBzaWdtb2lkKHBhcmFtcywgeCk7XG4gIH1cblxuICBnZXRJbml0aWFsUGFyYW1ldGVycyh4OiBudW1iZXJbXSwgeTogbnVtYmVyW10pOiBGbG9hdDMyQXJyYXkge1xuICAgIGNvbnN0IGRhdGFCb3VuZHMgPSBERy5SZWN0LmZyb21YWUFycmF5cyh4LCB5KTtcbiAgICBjb25zdCBtZWRZID0gKGRhdGFCb3VuZHMubWF4WSAtIGRhdGFCb3VuZHMubWluWSkgLyAyICsgZGF0YUJvdW5kcy5taW5ZO1xuICAgIGxldCBtYXhZSW50ZXJ2YWwgPSBkYXRhQm91bmRzLm1heFkgLSBkYXRhQm91bmRzLm1pblk7XG4gICAgbGV0IG5lYXJlc3RYSW5kZXggPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgeC5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgY3VycmVudEludGVydmFsID0gTWF0aC5hYnMoeVtpXSAtIG1lZFkpO1xuICAgICAgaWYgKGN1cnJlbnRJbnRlcnZhbCA8IG1heFlJbnRlcnZhbCkge1xuICAgICAgICBtYXhZSW50ZXJ2YWwgPSBjdXJyZW50SW50ZXJ2YWw7XG4gICAgICAgIG5lYXJlc3RYSW5kZXggPSBpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCB4QXRNZWRZID0geFtuZWFyZXN0WEluZGV4XTtcbiAgICBjb25zdCBzbG9wZSA9IHlbMF0gPiB5W3kubGVuZ3RoIC0gMV0gPyAxIDogLTE7XG5cbiAgICAvLyBwYXJhbXMgYXJlOiBbbWF4LCB0YW4sIElDNTAsIG1pbl1cbiAgICBjb25zdCBwYXJhbXMgPSBuZXcgRmxvYXQzMkFycmF5KDQpO1xuICAgIHBhcmFtcy5zZXQoW2RhdGFCb3VuZHMubWF4WSwgc2xvcGUsIHhBdE1lZFksIGRhdGFCb3VuZHMubWluWV0pO1xuICAgIHJldHVybiBwYXJhbXM7XG4gIH1cbn1cblxuLyoqIENsYXNzIHRoYXQgaW1wbGVtZW50cyB0aGUgbGluZWFyIGxvZ2FyaXRobWljIGZ1bmN0aW9uICovXG5leHBvcnQgY2xhc3MgTG9nTGluZWFyRnVuY3Rpb24gZXh0ZW5kcyBGaXRGdW5jdGlvbjxMb2dMaW5lYXJGaXQ+IHtcbiAgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gRklUX0ZVTkNUSU9OX0xPR19MSU5FQVI7XG4gIH1cblxuICBnZXQgcGFyYW1ldGVyTmFtZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbJ1Nsb3BlJywgJ0ludGVyY2VwdCddO1xuICB9XG5cbiAgZmlsbFBhcmFtcyhmaXRDdXJ2ZTogRml0Q3VydmUsIGRhdGE6IEZpdFNlcmllcyk6IExvZ0xpbmVhckZpdCB7XG4gICAgcmV0dXJuIG5ldyBMb2dMaW5lYXJGaXQoe1xuICAgICAgLi4uZ2V0QXVjQW5kUnNxdWFyZWQoZml0Q3VydmUuZml0dGVkQ3VydmUsIGdldERhdGFQb2ludHMoZGF0YSkpLFxuICAgICAgc2xvcGU6IGZpdEN1cnZlLnBhcmFtZXRlcnNbMF0sXG4gICAgICBpbnRlcmNlcHQ6IGZpdEN1cnZlLnBhcmFtZXRlcnNbMV0sXG4gICAgfSwgZGF0YSk7XG4gIH1cblxuICB5KHBhcmFtczogRmxvYXQzMkFycmF5LCB4OiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiBsb2dMaW5lYXIocGFyYW1zLCB4KTtcbiAgfVxuXG4gIGdldEluaXRpYWxQYXJhbWV0ZXJzKHg6IG51bWJlcltdLCB5OiBudW1iZXJbXSk6IEZsb2F0MzJBcnJheSB7XG4gICAgY29uc3QgcGFyYW1zID0gbmV3IEZsb2F0MzJBcnJheSgyKTtcbiAgICBwYXJhbXMuc2V0KFstNSwgMTAwXSk7XG4gICAgcmV0dXJuIHBhcmFtcztcbiAgfVxufVxuXG4vKiogQ2xhc3MgdGhhdCBpbXBsZW1lbnRzIHRoZSBleHBvbmVudGlhbCBmdW5jdGlvbiAqL1xuZXhwb3J0IGNsYXNzIEV4cG9uZW50aWFsRnVuY3Rpb24gZXh0ZW5kcyBGaXRGdW5jdGlvbjxFeHBvbmVudGlhbEZpdD4ge1xuICBnZXQgbmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBGSVRfRlVOQ1RJT05fRVhQT05FTlRJQUw7XG4gIH1cblxuICBnZXQgcGFyYW1ldGVyTmFtZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbJ01hbnRpc3NhJywgJ1Bvd2VyJ107XG4gIH1cblxuICBmaWxsUGFyYW1zKGZpdEN1cnZlOiBGaXRDdXJ2ZSwgZGF0YTogRml0U2VyaWVzKTogRXhwb25lbnRpYWxGaXQge1xuICAgIHJldHVybiBuZXcgRXhwb25lbnRpYWxGaXQoe1xuICAgICAgLi4uZ2V0QXVjQW5kUnNxdWFyZWQoZml0Q3VydmUuZml0dGVkQ3VydmUsIGdldERhdGFQb2ludHMoZGF0YSkpLFxuICAgICAgbWFudGlzc2E6IGZpdEN1cnZlLnBhcmFtZXRlcnNbMF0sXG4gICAgICBwb3dlcjogZml0Q3VydmUucGFyYW1ldGVyc1sxXSxcbiAgICB9LCBkYXRhKTtcbiAgfVxuXG4gIHkocGFyYW1zOiBGbG9hdDMyQXJyYXksIHg6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIGV4cG9uZW50aWFsKHBhcmFtcywgeCk7XG4gIH1cblxuICBnZXRJbml0aWFsUGFyYW1ldGVycyh4OiBudW1iZXJbXSwgeTogbnVtYmVyW10pOiBGbG9hdDMyQXJyYXkge1xuICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBGbG9hdDMyQXJyYXkoMik7XG4gICAgcGFyYW1zLnNldChbMTAwLCAtMl0pO1xuICAgIHJldHVybiBwYXJhbXM7XG4gIH1cbn1cblxuLyoqIENsYXNzIHRoYXQgaW1wbGVtZW50cyB0aGUgRm91ciBQYXJhbWV0ZXIgTG9naXN0aWMgUmVncmVzc2lvbiBmdW5jdGlvbiAqL1xuZXhwb3J0IGNsYXNzIEZvdXJQTFJlZ3Jlc3Npb25GdW5jdGlvbiBleHRlbmRzIEZpdEZ1bmN0aW9uPEZvdXJQTFJlZ3Jlc3Npb25GaXQ+IHtcbiAgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gRklUX0ZVTkNUSU9OXzRQTF9SRUdSRVNTSU9OO1xuICB9XG5cbiAgZ2V0IHBhcmFtZXRlck5hbWVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gWydUb3AnLCAnU2xvcGUnLCAnRUM1MCcsICdCb3R0b20nXTtcbiAgfVxuXG4gIGZpbGxQYXJhbXMoZml0Q3VydmU6IEZpdEN1cnZlLCBkYXRhOiBGaXRTZXJpZXMpOiBGb3VyUExSZWdyZXNzaW9uRml0IHtcbiAgICByZXR1cm4gbmV3IEZvdXJQTFJlZ3Jlc3Npb25GaXQoe1xuICAgICAgLi4uZ2V0QXVjQW5kUnNxdWFyZWQoZml0Q3VydmUuZml0dGVkQ3VydmUsIGdldERhdGFQb2ludHMoZGF0YSkpLFxuICAgICAgdG9wOiBmaXRDdXJ2ZS5wYXJhbWV0ZXJzWzBdLFxuICAgICAgc2xvcGU6IGZpdEN1cnZlLnBhcmFtZXRlcnNbMV0sXG4gICAgICBlYzUwOiBmaXRDdXJ2ZS5wYXJhbWV0ZXJzWzJdLFxuICAgICAgYm90dG9tOiBmaXRDdXJ2ZS5wYXJhbWV0ZXJzWzNdLFxuICAgIH0sIGRhdGEpO1xuICB9XG5cbiAgeShwYXJhbXM6IEZsb2F0MzJBcnJheSwgeDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gZm91clBMUmVncmVzc2lvbihwYXJhbXMsIHgpO1xuICB9XG5cbiAgZ2V0SW5pdGlhbFBhcmFtZXRlcnMoeDogbnVtYmVyW10sIHk6IG51bWJlcltdKTogRmxvYXQzMkFycmF5IHtcbiAgICBjb25zdCBwYXJhbXMgPSBuZXcgRmxvYXQzMkFycmF5KDQpO1xuICAgIGNvbnN0IGJvdHRvbSA9IE1hdGgubWluKC4uLnkpO1xuICAgIGNvbnN0IHRvcCA9IE1hdGgubWF4KC4uLnkpO1xuICAgIGNvbnN0IG1lZFkgPSAodG9wIC0gYm90dG9tKSAvIDIgKyBib3R0b207XG4gICAgbGV0IG1heFlJbnRlcnZhbCA9IHRvcCAtYm90dG9tO1xuICAgIGxldCBuZWFyZXN0WEluZGV4ID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHgubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRJbnRlcnZhbCA9IE1hdGguYWJzKHlbaV0gLSBtZWRZKTtcbiAgICAgIGlmIChjdXJyZW50SW50ZXJ2YWwgPCBtYXhZSW50ZXJ2YWwpIHtcbiAgICAgICAgbWF4WUludGVydmFsID0gY3VycmVudEludGVydmFsO1xuICAgICAgICBuZWFyZXN0WEluZGV4ID0gaTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgZWM1MCA9IHhbbmVhcmVzdFhJbmRleF07XG4gICAgY29uc3Qgc2xvcGUgPSB5WzBdID4geVt5Lmxlbmd0aCAtIDFdPyAtMTAgOiAxMDtcbiAgICBwYXJhbXMuc2V0KFt0b3AsIHNsb3BlLCBlYzUwLCBib3R0b21dKTtcbiAgICByZXR1cm4gcGFyYW1zO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBGb3VyUExEb3NlUmVzcG9uc2VGdW5jdGlvbiBleHRlbmRzIEZvdXJQTFJlZ3Jlc3Npb25GdW5jdGlvbiB7XG4gIG92ZXJyaWRlIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEZJVF9GVU5DVElPTl80UExfRE9TRV9SRVNQT05TRTtcbiAgfVxuXG4gIG92ZXJyaWRlIGdldCBwYXJhbWV0ZXJOYW1lcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFsnTWF4JywgJ0hpbGwnLCAnSUM1MCcsICdNaW4nXTtcbiAgfVxuXG4gIG92ZXJyaWRlIHkocGFyYW1zOiBGbG9hdDMyQXJyYXksIHg6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIGZvdXJQTERvc2VSZXNwb25zZShwYXJhbXMsIHgpO1xuICB9XG59XG5cbi8qKiBDbGFzcyB0aGF0IGltcGxlbWVudHMgdXNlciBKUyBmdW5jdGlvbnMgKi9cbmV4cG9ydCBjbGFzcyBKc0Z1bmN0aW9uIGV4dGVuZHMgRml0RnVuY3Rpb248Rml0PiB7XG4gIHByaXZhdGUgX25hbWU6IHN0cmluZztcbiAgcHJpdmF0ZSBfcGFyYW1ldGVyTmFtZXM6IHN0cmluZ1tdO1xuXG4gIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZywgeUZ1bmM6IChwYXJhbXM6IEZsb2F0MzJBcnJheSwgeDogbnVtYmVyKSA9PiBudW1iZXIsXG4gICAgZ2V0SW5pdFBhcmFtc0Z1bmM6ICh4OiBudW1iZXJbXSwgeTogbnVtYmVyW10pID0+IEZsb2F0MzJBcnJheSwgcGFyYW1ldGVyTmFtZXM6IHN0cmluZ1tdKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMuX25hbWUgPSBuYW1lO1xuICAgIHRoaXMuX3BhcmFtZXRlck5hbWVzID0gcGFyYW1ldGVyTmFtZXM7XG5cbiAgICB0aGlzLnkgPSB5RnVuYztcbiAgICB0aGlzLmdldEluaXRpYWxQYXJhbWV0ZXJzID0gZ2V0SW5pdFBhcmFtc0Z1bmM7XG4gIH1cblxuICBmaWxsUGFyYW1zKGZpdEN1cnZlOiBGaXRDdXJ2ZSwgZGF0YTogRml0U2VyaWVzKTogRml0IHtcbiAgICBjb25zdCBwYXJhbXMgPSBuZXcgRmxvYXQzMkFycmF5KHRoaXMuX3BhcmFtZXRlck5hbWVzLmxlbmd0aCk7XG4gICAgcGFyYW1zLnNldChmaXRDdXJ2ZS5wYXJhbWV0ZXJzKTtcbiAgICByZXR1cm4gbmV3IEpTRnVuY3Rpb25GaXQoey4uLmdldEF1Y0FuZFJzcXVhcmVkKGZpdEN1cnZlLmZpdHRlZEN1cnZlLCBnZXREYXRhUG9pbnRzKGRhdGEpKX0sIGRhdGEpO1xuICB9XG5cbiAgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fbmFtZTtcbiAgfVxuXG4gIGdldCBwYXJhbWV0ZXJOYW1lcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3BhcmFtZXRlck5hbWVzO1xuICB9XG5cbiAgeShwYXJhbXM6IEZsb2F0MzJBcnJheSwgeDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO1xuICB9XG5cbiAgZ2V0SW5pdGlhbFBhcmFtZXRlcnMoeDogbnVtYmVyW10sIHk6IG51bWJlcltdKTogRmxvYXQzMkFycmF5IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO1xuICB9XG59XG5cbi8vIE9iamVjdCB3aXRoIGZpdCBmdW5jdGlvbnNcbmV4cG9ydCBjb25zdCBmaXRGdW5jdGlvbnM6IHtba2V5OiBzdHJpbmddOiBGaXRGdW5jdGlvbjxhbnk+fSA9IHtcbiAgJ2xpbmVhcic6IG5ldyBMaW5lYXJGdW5jdGlvbigpLFxuICAnc2lnbW9pZCc6IG5ldyBTaWdtb2lkRnVuY3Rpb24oKSxcbiAgJ2xvZy1saW5lYXInOiBuZXcgTG9nTGluZWFyRnVuY3Rpb24oKSxcbiAgJ2V4cG9uZW50aWFsJzogbmV3IEV4cG9uZW50aWFsRnVuY3Rpb24oKSxcbiAgJzRwbC1yZWdyZXNzaW9uJzogbmV3IEZvdXJQTFJlZ3Jlc3Npb25GdW5jdGlvbigpLFxuICAnNHBsLWRvc2UtcmVzcG9uc2UnOiBuZXcgRm91clBMRG9zZVJlc3BvbnNlRnVuY3Rpb24oKSxcbn07XG5cbmNsYXNzIEZpdEZ1bmN0aW9ucyB7XG4gIHNlcmllczogRml0U2VyaWVzO1xuXG4gIGNvbnN0cnVjdG9yKHNlcmllczogRml0U2VyaWVzKSB7XG4gICAgdGhpcy5zZXJpZXMgPSBzZXJpZXM7XG4gIH1cblxuICBsaW5lYXIoKTogTGluZWFyRml0IHtcbiAgICByZXR1cm4gZml0RnVuY3Rpb25zW0ZJVF9GVU5DVElPTl9MSU5FQVJdXG4gICAgICAuZmlsbFBhcmFtcyhmaXRTZXJpZXModGhpcy5zZXJpZXMsIGZpdEZ1bmN0aW9uc1tGSVRfRlVOQ1RJT05fTElORUFSXSksIHRoaXMuc2VyaWVzKTtcbiAgfVxuXG4gIGxvZ0xpbmVhcigpOiBMb2dMaW5lYXJGaXQge1xuICAgIHJldHVybiBmaXRGdW5jdGlvbnNbRklUX0ZVTkNUSU9OX0xPR19MSU5FQVJdXG4gICAgICAuZmlsbFBhcmFtcyhmaXRTZXJpZXModGhpcy5zZXJpZXMsIGZpdEZ1bmN0aW9uc1tGSVRfRlVOQ1RJT05fTE9HX0xJTkVBUl0pLCB0aGlzLnNlcmllcyk7XG4gIH1cblxuICBzaWdtb2lkKCk6IFNpZ21vaWRGaXQge1xuICAgIHJldHVybiBmaXRGdW5jdGlvbnNbRklUX0ZVTkNUSU9OX1NJR01PSURdXG4gICAgICAuZmlsbFBhcmFtcyhmaXRTZXJpZXModGhpcy5zZXJpZXMsIGZpdEZ1bmN0aW9uc1tGSVRfRlVOQ1RJT05fU0lHTU9JRF0pLCB0aGlzLnNlcmllcyk7XG4gIH1cblxuICBleHBvbmVudGlhbCgpOiBFeHBvbmVudGlhbEZpdCB7XG4gICAgcmV0dXJuIGZpdEZ1bmN0aW9uc1tGSVRfRlVOQ1RJT05fRVhQT05FTlRJQUxdXG4gICAgICAuZmlsbFBhcmFtcyhmaXRTZXJpZXModGhpcy5zZXJpZXMsIGZpdEZ1bmN0aW9uc1tGSVRfRlVOQ1RJT05fRVhQT05FTlRJQUxdKSwgdGhpcy5zZXJpZXMpO1xuICB9XG5cbiAgZm91clBMKCk6IEZvdXJQTFJlZ3Jlc3Npb25GaXQge1xuICAgIHJldHVybiBmaXRGdW5jdGlvbnNbRklUX0ZVTkNUSU9OXzRQTF9SRUdSRVNTSU9OXVxuICAgICAgLmZpbGxQYXJhbXMoZml0U2VyaWVzKHRoaXMuc2VyaWVzLCBmaXRGdW5jdGlvbnNbRklUX0ZVTkNUSU9OXzRQTF9SRUdSRVNTSU9OXSksIHRoaXMuc2VyaWVzKTtcbiAgfVxuXG4gIGZvdXJQTERvc2VSZXNwb25zZSgpOiBGb3VyUExSZWdyZXNzaW9uRml0IHtcbiAgICByZXR1cm4gZml0RnVuY3Rpb25zW0ZJVF9GVU5DVElPTl80UExfRE9TRV9SRVNQT05TRV0uZmlsbFBhcmFtcyhmaXRTZXJpZXModGhpcy5zZXJpZXMsIGZpdEZ1bmN0aW9uc1tGSVRfRlVOQ1RJT05fNFBMX0RPU0VfUkVTUE9OU0VdKSwgdGhpcy5zZXJpZXMpO1xuICB9XG59XG5cblxuZXhwb3J0IGNsYXNzIEZpdFNlcmllcyBpbXBsZW1lbnRzIElGaXRTZXJpZXMge1xuICBba2V5OiBzdHJpbmddOiBhbnk7XG5cbiAgZml0OiBGaXRGdW5jdGlvbnM7XG4gIHBvaW50czogSUZpdFBvaW50W107XG5cbiAgY29uc3RydWN0b3IocG9pbnRzOiBJRml0UG9pbnRbXSkge1xuICAgIHRoaXMucG9pbnRzID0gcG9pbnRzO1xuICAgIHRoaXMuZml0ID0gbmV3IEZpdEZ1bmN0aW9ucyh0aGlzKTtcbiAgfVxuXG4gIG5hbWU/OiBzdHJpbmc7IC8vIGNvbnRyb2xzIHRoZSBzZXJpZXMgbmFtZVxuICBmaXRGdW5jdGlvbj86IHN0cmluZyB8IElGaXRGdW5jdGlvbkRlc2NyaXB0aW9uOyAvLyBjb250cm9scyB0aGUgc2VyaWVzIGZpdCBmdW5jdGlvblxuICBwYXJhbWV0ZXJzPzogbnVtYmVyW107IC8vIGNvbnRyb2xzIHRoZSBzZXJpZXMgcGFyYW1ldGVycywgYXV0by1maXR0aW5nIHdoZW4gbm90IGRlZmluZWRcbiAgcGFyYW1ldGVyQm91bmRzPzogRml0UGFyYW1Cb3VuZHNbXTsgLy8gZGVmaW5lcyB0aGUgYWNjZXB0YWJsZSByYW5nZSBvZiBlYWNoIHBhcmFtZXRlciwgd2hpY2ggaXMgdGFrZW4gaW50byBhY2NvdW50IGR1cmluZyB0aGUgZml0dGluZy4gU2VlIGFsc28gYHBhcmFtZXRlcnNgLlxuICBtYXJrZXJUeXBlPzogRml0TWFya2VyVHlwZTsgLy8gZGVmaW5lcyB0aGUgc2VyaWVzIG1hcmtlciB0eXBlXG4gIG91dGxpZXJNYXJrZXJUeXBlPzogRml0T3V0bGllck1hcmtlclR5cGU7IC8vIGRlZmluZXMgdGhlIHNlcmllcyBvdXRsaWVyIG1hcmtlciB0eXBlXG4gIGxpbmVTdHlsZT86IEZpdExpbmVTdHlsZTsgLy8gZGVmaW5lcyB0aGUgc2VyaWVzIGxpbmUgc3R5bGVcbiAgcG9pbnRDb2xvcj86IHN0cmluZzsgLy8gb3ZlcnJpZGVzIHRoZSBzdGFuZGFyZGl6ZWQgc2VyaWVzIHBvaW50IGNvbG9yXG4gIGZpdExpbmVDb2xvcj86IHN0cmluZzsgLy8gb3ZlcnJpZGVzIHRoZSBzdGFuZGFyZGl6ZWQgc2VyaWVzIGZpdCBsaW5lIGNvbG9yXG4gIGNvbmZpZGVuY2VJbnRlcnZhbENvbG9yPzogc3RyaW5nOyAvLyBvdmVycmlkZXMgdGhlIHN0YW5kYXJkaXplZCBzZXJpZXMgY29uZmlkZW5jZSBpbnRlcnZhbCBjb2xvclxuICBvdXRsaWVyQ29sb3I/OiBzdHJpbmc7IC8vIG92ZXJyaWRlcyB0aGUgc3RhbmRhcmRpemVkIHNlcmllcyBvdXRsaWVyIGNvbG9yXG4gIGNvbm5lY3REb3RzPzogYm9vbGVhbjsgLy8gZGVmaW5lcyB3aGV0aGVyIHRvIGNvbm5lY3QgdGhlIHBvaW50cyB3aXRoIGxpbmVzIG9yIG5vdC4gSWYgdHJ1ZSBhbmQgc2hvd0ZpdExpbmUgaXMgZmFsc2UgLSBmaXR0aW5nIGlzIGRpc2FibGVkIC0gb3RoZXJ3aXNlLCBpdCB3aWxsIGJlIHJlbmRlcmVkIGFjY29yZGluZ2x5IHRvIHRoZSBwYXJhbWV0ZXIgdmFsdWUuXG4gIHNob3dGaXRMaW5lPzogYm9vbGVhbjsgLy8gZGVmaW5lcyB3aGV0aGVyIHRvIHNob3cgdGhlIGZpdCBsaW5lIG9yIG5vdFxuICBzaG93UG9pbnRzPzogc3RyaW5nOyAvLyBkZWZpbmVzIHRoZSBkYXRhIGRpc3BsYXkgbW9kZVxuICBzaG93T3V0bGllcnM/OiBib29sZWFuOyAvLyBkZWZpbmVzIHdoZXRoZXIgdG8gc2hvdyB0aGUgb3V0bGllcnMgb3Igbm90XG4gIHNob3dDdXJ2ZUNvbmZpZGVuY2VJbnRlcnZhbD86IGJvb2xlYW47IC8vIGRlZmluZXMgd2hldGhlciB0byBzaG93IHRoZSBjb25maWRlbmNlIGludGVydmFscyBvciBub3RcbiAgZXJyb3JNb2RlbD86IEZpdEVycm9yTW9kZWxUeXBlOyAvLyBkZWZpbmVzIHRoZSBzZXJpZXMgZXJyb3IgbW9kZWxcbiAgY2xpY2tUb1RvZ2dsZT86IGJvb2xlYW47IC8vIGlmIHRydWUsIGNsaWNraW5nIG9uIHRoZSBwb2ludCB0b2dnbGVzIGl0cyBvdXRsaWVyIHN0YXR1cyBhbmQgY2F1c2VzIGN1cnZlIHJlZml0dGluZ1xuICBsYWJlbHM/OiB7W2tleTogc3RyaW5nXTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbn07IC8vIGNvbnRyb2xsZWQgYnkgSUZpdENoYXJ0RGF0YSBsYWJlbE9wdGlvbnMsIHNob3dzIGxhYmVsc1xuICBkcm9wbGluZXM/OiBzdHJpbmdbXTsgLy8gZGVmaW5lcyB0aGUgZHJvcGxpbmVzIHRoYXQgd291bGQgYmUgc2hvd24gb24gdGhlIHBsb3QgKElDNTApXG4gIGNvbHVtbk5hbWU/OiBzdHJpbmc7IC8vIGRlZmluZXMgdGhlIGNvbHVtbiBuYW1lIHdoZXJlIHRoZSBzZXJpZXMgaXMgc3RvcmVkXG59XG5cblxuLyoqIFByb3BlcnRpZXMgdGhhdCBkZXNjcmliZSB7QGxpbmsgSUZpdFNlcmllc09wdGlvbnN9LiBVc2VmdWwgZm9yIGVkaXRpbmcsIGluaXRpYWxpemF0aW9uLCB0cmFuc2Zvcm1hdGlvbnMsIGV0Yy4gKi9cbmV4cG9ydCBjb25zdCBmaXRTZXJpZXNQcm9wZXJ0aWVzOiBERy5Qcm9wZXJ0eVtdID0gW1xuICBERy5Qcm9wZXJ0eS5qcygnZml0RnVuY3Rpb24nLCBERy5UWVBFLlNUUklORyxcbiAgICB7Y2F0ZWdvcnk6ICdGaXR0aW5nJywgY2hvaWNlczogT2JqZWN0LmtleXMoZml0RnVuY3Rpb25zKSwgZGVmYXVsdFZhbHVlOiAnc2lnbW9pZCd9KSxcbiAgREcuUHJvcGVydHkuanMoJ3BvaW50Q29sb3InLCBERy5UWVBFLlNUUklORyxcbiAgICB7Y2F0ZWdvcnk6ICdSZW5kZXJpbmcnLCBudWxsYWJsZTogdHJ1ZSwgaW5wdXRUeXBlOiAnQ29sb3InfSksXG4gIERHLlByb3BlcnR5LmpzKCdmaXRMaW5lQ29sb3InLCBERy5UWVBFLlNUUklORyxcbiAgICB7Y2F0ZWdvcnk6ICdSZW5kZXJpbmcnLCBudWxsYWJsZTogdHJ1ZSwgaW5wdXRUeXBlOiAnQ29sb3InfSksXG4gIERHLlByb3BlcnR5LmpzKCdvdXRsaWVyQ29sb3InLCBERy5UWVBFLlNUUklORyxcbiAgICB7Y2F0ZWdvcnk6ICdSZW5kZXJpbmcnLCBudWxsYWJsZTogdHJ1ZSwgaW5wdXRUeXBlOiAnQ29sb3InfSksXG4gIERHLlByb3BlcnR5LmpzKCdlcnJvck1vZGVsJywgREcuVFlQRS5TVFJJTkcsIHtjYXRlZ29yeTogJ0ZpdHRpbmcnLCBkZWZhdWx0VmFsdWU6ICdjb25zdGFudCcsXG4gICAgY2hvaWNlczogWydjb25zdGFudCcsICdwcm9wb3J0aW9uYWwnLCAnY29tYmluZWQnXSwgbnVsbGFibGU6IGZhbHNlfSksXG4gIERHLlByb3BlcnR5LmpzKCdjb25uZWN0RG90cycsIERHLlRZUEUuQk9PTCwge2NhdGVnb3J5OiAnRml0dGluZycsIGRlZmF1bHRWYWx1ZTogZmFsc2V9KSxcbiAgREcuUHJvcGVydHkuanMoJ2NsaWNrVG9Ub2dnbGUnLCBERy5UWVBFLkJPT0wsIHtjYXRlZ29yeTogJ0ZpdHRpbmcnLCBkZXNjcmlwdGlvbjpcbiAgICAnQ2xpY2sgb24gYSBwb2ludCB0byBtYXJrIGl0IGFzIG91dGxpZXIgYW5kIHJlZml0JywgbnVsbGFibGU6IHRydWUsIGRlZmF1bHRWYWx1ZTogZmFsc2V9KSxcbiAgREcuUHJvcGVydHkuanMoJ3Nob3dGaXRMaW5lJywgREcuVFlQRS5CT09MLCB7Y2F0ZWdvcnk6ICdGaXR0aW5nJywgZGVmYXVsdFZhbHVlOiB0cnVlfSksXG4gIERHLlByb3BlcnR5LmpzKCdzaG93UG9pbnRzJywgREcuVFlQRS5TVFJJTkcsIC8vIHJld3JpdGUgZGVzY3JpcHRpb25cbiAgICB7Y2F0ZWdvcnk6ICdGaXR0aW5nJywgZGVzY3JpcHRpb246ICdXaGV0aGVyIHBvaW50cy9jYW5kbGVzdGlja3Mvbm9uZSBzaG91bGQgYmUgcmVuZGVyZWQnLFxuICAgICAgZGVmYXVsdFZhbHVlOiAncG9pbnRzJywgY2hvaWNlczogWydwb2ludHMnLCAnY2FuZGxlc3RpY2tzJywgJ2JvdGgnXX0pLFxuICBERy5Qcm9wZXJ0eS5qcygnc2hvd091dGxpZXJzJywgREcuVFlQRS5CT09MLCB7Y2F0ZWdvcnk6ICdGaXR0aW5nJywgZGVmYXVsdFZhbHVlOiB0cnVlfSksXG4gIERHLlByb3BlcnR5LmpzKCdzaG93Q3VydmVDb25maWRlbmNlSW50ZXJ2YWwnLCBERy5UWVBFLkJPT0wsXG4gICAge2NhdGVnb3J5OiAnRml0dGluZycsIGRlc2NyaXB0aW9uOiAnV2hldGhlciBjb25maWRlbmNlIGludGVydmFscyBzaG91bGQgYmUgcmVuZGVyZWQnLCBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICAgICAgLy9AdHMtaWdub3JlXG4gICAgICBmcmllbmRseU5hbWU6ICdDb25maWRlbmNlIEludGVydmFsJ30pLFxuICBERy5Qcm9wZXJ0eS5qcygnbWFya2VyVHlwZScsIERHLlRZUEUuU1RSSU5HLCB7Y2F0ZWdvcnk6ICdSZW5kZXJpbmcnLCBkZWZhdWx0VmFsdWU6ICdjaXJjbGUnLFxuICAgIGNob2ljZXM6IFsnYXN0ZXJpc2snLCAnY2lyY2xlJywgJ2Nyb3NzIGJvcmRlcicsICdkaWFtb25kJywgJ3NxdWFyZScsICdzdGFyJyxcbiAgICAgICd0cmlhbmdsZSBib3R0b20nLCAndHJpYW5nbGUgbGVmdCcsICd0cmlhbmdsZSByaWdodCcsICd0cmlhbmdsZSB0b3AnXSwgbnVsbGFibGU6IGZhbHNlLFxuICAgIC8vQHRzLWlnbm9yZVxuICAgIGZyaWVuZGx5TmFtZTogJ01hcmtlcid9KSxcbiAgREcuUHJvcGVydHkuanMoJ291dGxpZXJNYXJrZXJUeXBlJywgREcuVFlQRS5TVFJJTkcsIHtjYXRlZ29yeTogJ1JlbmRlcmluZycsIGRlZmF1bHRWYWx1ZTogJ291dGxpZXInLFxuICAgIGNob2ljZXM6IFsnYXN0ZXJpc2snLCAnY2lyY2xlJywgJ2Nyb3NzIGJvcmRlcicsICdkaWFtb25kJywgJ291dGxpZXInLCAnc3F1YXJlJywgJ3N0YXInLFxuICAgICAgJ3RyaWFuZ2xlIGJvdHRvbScsICd0cmlhbmdsZSBsZWZ0JywgJ3RyaWFuZ2xlIHJpZ2h0JywgJ3RyaWFuZ2xlIHRvcCddLCBudWxsYWJsZTogZmFsc2UsXG4gICAgLy9AdHMtaWdub3JlXG4gICAgZnJpZW5kbHlOYW1lOiAnT3V0bGllciBNYXJrZXInfSksXG4gIERHLlByb3BlcnR5LmpzKCdsaW5lU3R5bGUnLCBERy5UWVBFLlNUUklORywge2NhdGVnb3J5OiAnUmVuZGVyaW5nJywgZGVmYXVsdFZhbHVlOiAnc29saWQnLFxuICAgIGNob2ljZXM6IFsnc29saWQnLCAnZG90dGVkJywgJ2Rhc2hlZCcsICdkYXNoZG90dGVkJ10sIG51bGxhYmxlOiBmYWxzZX0pLFxuICBERy5Qcm9wZXJ0eS5qcygnZHJvcGxpbmVzJywgREcuVFlQRS5TVFJJTkdfTElTVCwge2Rlc2NyaXB0aW9uOiAnV2hldGhlciBzcGVjaWZpYyBkcm9wbGluZXMgc2hvdWxkIGJlIHJlbmRlcmVkJyxcbiAgICBjaG9pY2VzOiBEUk9QTElORVMsIGlucHV0VHlwZTogJ011bHRpQ2hvaWNlJ30pLFxuICBERy5Qcm9wZXJ0eS5qcygnY29sdW1uTmFtZScsIERHLlRZUEUuU1RSSU5HLCB7ZGVzY3JpcHRpb246ICdDb2x1bW4gbmFtZSB3aGVyZSB0aGUgc2VyaWVzIGlzIHN0b3JlZCcsIGRlZmF1bHRWYWx1ZTogJyd9KSxcbl07XG5cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE9yQ3JlYXRlRml0RnVuY3Rpb24oc2VyaWVzRml0RnVuYzogc3RyaW5nIHwgSUZpdEZ1bmN0aW9uRGVzY3JpcHRpb24pOiBGaXRGdW5jdGlvbjxGaXQ+IHtcbiAgaWYgKHR5cGVvZiBzZXJpZXNGaXRGdW5jID09PSAnc3RyaW5nJylcbiAgICByZXR1cm4gZml0RnVuY3Rpb25zW3Nlcmllc0ZpdEZ1bmNdO1xuICBlbHNlIGlmICghZml0RnVuY3Rpb25zW3Nlcmllc0ZpdEZ1bmMubmFtZV0pIHtcbiAgICBjb25zdCBuYW1lID0gc2VyaWVzRml0RnVuYy5uYW1lO1xuICAgIGNvbnN0IHBhcmFtTmFtZXMgPSBzZXJpZXNGaXRGdW5jLnBhcmFtZXRlck5hbWVzO1xuICAgIGNvbnN0IGZpdEZ1bmN0aW9uUGFydHMgPSBzZXJpZXNGaXRGdW5jLmZ1bmN0aW9uLnNwbGl0KCc9PicpLm1hcCgoZWxlbSkgPT4gZWxlbS50cmltKCkpO1xuICAgIGNvbnN0IGdldEluaXRQYXJhbXNQYXJ0cyA9IHNlcmllc0ZpdEZ1bmMuZ2V0SW5pdGlhbFBhcmFtZXRlcnMuc3BsaXQoJz0+JykubWFwKChlbGVtKSA9PiBlbGVtLnRyaW0oKSk7XG4gICAgY29uc3QgZml0RnVuY3Rpb24gPSBuZXcgRnVuY3Rpb24oZml0RnVuY3Rpb25QYXJ0c1swXS5zbGljZSgxLCBmaXRGdW5jdGlvblBhcnRzWzBdLmxlbmd0aCAtIDEpLFxuICAgICAgYCR7Zml0RnVuY3Rpb25QYXJ0c1sxXS5pbmNsdWRlcygnOycpID8gJycgOiAncmV0dXJuICd9JHtmaXRGdW5jdGlvblBhcnRzWzFdfWApO1xuICAgIGNvbnN0IGdldEluaXRQYXJhbXNGdW5jID0gbmV3IEZ1bmN0aW9uKGdldEluaXRQYXJhbXNQYXJ0c1swXS5zbGljZSgxLCBnZXRJbml0UGFyYW1zUGFydHNbMF0ubGVuZ3RoIC0gMSksXG4gICAgICBgcmV0dXJuICR7Z2V0SW5pdFBhcmFtc1BhcnRzWzFdfWApO1xuICAgIGNvbnN0IGZpdEZ1bmMgPSBuZXcgSnNGdW5jdGlvbihuYW1lLCAoZml0RnVuY3Rpb24gYXMgKHBhcmFtczogRmxvYXQzMkFycmF5LCB4OiBudW1iZXIpID0+IG51bWJlciksXG4gICAgICAoZ2V0SW5pdFBhcmFtc0Z1bmMgYXMgKHg6IG51bWJlcltdLCB5OiBudW1iZXJbXSkgPT4gRmxvYXQzMkFycmF5KSwgcGFyYW1OYW1lcyk7XG4gICAgZml0RnVuY3Rpb25zW25hbWVdID0gZml0RnVuYztcbiAgfVxuXG4gIHJldHVybiBmaXRGdW5jdGlvbnNbc2VyaWVzRml0RnVuYy5uYW1lXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpdERhdGEoZGF0YToge3g6IG51bWJlcltdLCB5OiBudW1iZXJbXX0sIGZpdEZ1bmN0aW9uOiBGaXRGdW5jdGlvbjxGaXQ+LCBlcnJvck1vZGVsPzogRml0RXJyb3JNb2RlbFR5cGUsXG4gIHBhcmFtZXRlckJvdW5kcz86IEZpdFBhcmFtQm91bmRzW10pOiBGaXRDdXJ2ZSB7XG4gIGVycm9yTW9kZWwgPz89IEZpdEVycm9yTW9kZWwuQ09OU1RBTlQgYXMgRml0RXJyb3JNb2RlbFR5cGU7XG4gIGNvbnN0IGN1cnZlRnVuY3Rpb24gPSBmaXRGdW5jdGlvbi55O1xuICBsZXQgcGFyYW1WYWx1ZXMgPSBmaXRGdW5jdGlvbi5nZXRJbml0aWFsUGFyYW1ldGVycyhkYXRhLngsIGRhdGEueSk7XG5cbiAgY29uc3Qgb2YgPSBvYmplY3RpdmVGYWN0b3J5KGN1cnZlRnVuY3Rpb24sIGRhdGEsIGVycm9yTW9kZWwpO1xuICBjb25zdCBib3R0b21QYXJhbUJvdW5kcyA9IG5ldyBGbG9hdDMyQXJyYXkoZml0RnVuY3Rpb24ucGFyYW1ldGVyTmFtZXMubGVuZ3RoKTtcbiAgY29uc3QgdG9wUGFyYW1Cb3VuZHMgPSBuZXcgRmxvYXQzMkFycmF5KGZpdEZ1bmN0aW9uLnBhcmFtZXRlck5hbWVzLmxlbmd0aCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZml0RnVuY3Rpb24ucGFyYW1ldGVyTmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICBib3R0b21QYXJhbUJvdW5kc1tpXSA9IHBhcmFtVmFsdWVzW2ldID09PSAwID8gLTEgOiBwYXJhbVZhbHVlc1tpXSAtIE1hdGguYWJzKHBhcmFtVmFsdWVzW2ldICogMC41KTtcbiAgICB0b3BQYXJhbUJvdW5kc1tpXSA9IHBhcmFtVmFsdWVzW2ldID09PSAwID8gMSA6IHBhcmFtVmFsdWVzW2ldICsgTWF0aC5hYnMocGFyYW1WYWx1ZXNbaV0gKiAwLjUpO1xuICB9XG4gIGNvbnN0IHBhcmFtZXRlckJvdW5kc0JpdHNldDogREcuQml0U2V0ID0gREcuQml0U2V0LmNyZWF0ZShmaXRGdW5jdGlvbi5wYXJhbWV0ZXJOYW1lcy5sZW5ndGggKiAyKTtcbiAgaWYgKHBhcmFtZXRlckJvdW5kcyAmJiBwYXJhbWV0ZXJCb3VuZHMubGVuZ3RoICE9PSAwKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJhbWV0ZXJCb3VuZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChwYXJhbWV0ZXJCb3VuZHNbaV0ubWluICE9PSB1bmRlZmluZWQgJiYgcGFyYW1ldGVyQm91bmRzW2ldLm1pbiAhPT0gbnVsbCkge1xuICAgICAgICBib3R0b21QYXJhbUJvdW5kc1tpXSA9IHBhcmFtZXRlckJvdW5kc1tpXS5taW4hO1xuICAgICAgICBwYXJhbWV0ZXJCb3VuZHNCaXRzZXQuc2V0KGkgKiAyLCB0cnVlKTtcbiAgICAgIH1cbiAgICAgIGlmIChwYXJhbWV0ZXJCb3VuZHNbaV0ubWF4ICE9PSB1bmRlZmluZWQgJiYgcGFyYW1ldGVyQm91bmRzW2ldLm1heCAhPT0gbnVsbCkge1xuICAgICAgICB0b3BQYXJhbUJvdW5kc1tpXSA9IHBhcmFtZXRlckJvdW5kc1tpXS5tYXghO1xuICAgICAgICBwYXJhbWV0ZXJCb3VuZHNCaXRzZXQuc2V0KGkgKiAyICsgMSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNvbnN0IGdldENvbnNpc3RlbmN5ID0gKGV4dHJlbXVtOiBFeHRyZW11bSkgPT4ge1xuICAgIGNvbnN0IHJlc2lkdWFscyA9IG9mKGV4dHJlbXVtLnBvaW50KS5yZXNpZHVhbHM7XG4gICAgbGV0IHExcTQgPSAwO1xuICAgIGxldCBxMnEzID0gMDtcbiAgICAvLyBUT0RPOiByZXdyaXRlIHF1YXJ0aWxlcyB0byBhIGJldHRlciBjb25kaXRpb25cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc2lkdWFscy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHJlc2lkdWFscy5sZW5ndGggLyA0ID4gaSlcbiAgICAgICAgcTFxNCArPSBNYXRoLnBvdyhyZXNpZHVhbHNbaV0sIDIpO1xuICAgICAgZWxzZSBpZiAoMyAqIHJlc2lkdWFscy5sZW5ndGggLyA0ID4gaSlcbiAgICAgICAgcTJxMyArPSBNYXRoLnBvdyhyZXNpZHVhbHNbaV0sIDIpO1xuICAgICAgZWxzZVxuICAgICAgICBxMXE0ICs9IE1hdGgucG93KHJlc2lkdWFsc1tpXSwgMik7XG4gICAgfVxuICAgIHJldHVybiBxMXE0IC8gcTJxMztcbiAgfTtcblxuICBsZXQgaXRlciA9IC0xO1xuICBsZXQgY29udGludWVPcHRpbWl6YXRpb24gPSAwO1xuICBsZXQgc3RhdGlzdGljczogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIGxldCBvcHRpbWl6YXRpb246IE9wdGltaXphdGlvblJlc3VsdDtcbiAgbGV0IG1pbklkeCA9IDA7XG4gIGRvIHtcbiAgICBvcHRpbWl6YXRpb24gPSBwZXJmb3JtTmVsZGVyTWVhZE9wdGltaXphdGlvbihvZiwgYm90dG9tUGFyYW1Cb3VuZHMsIHRvcFBhcmFtQm91bmRzLCB7XG4gICAgICB0b2xlcmFuY2U6IE5FTERFUl9NRUFEX0RFRkFVTFRTLlRPTEVSQU5DRSxcbiAgICAgIG1heEl0ZXI6IE5FTERFUl9NRUFEX0RFRkFVTFRTLk1BWF9JVEVSLFxuICAgICAgbm9uWmVyb1BhcmFtOiBORUxERVJfTUVBRF9ERUZBVUxUUy5OT05fWkVST19QQVJBTSxcbiAgICAgIGluaXRpYWxTY2FsZTogTkVMREVSX01FQURfREVGQVVMVFMuSU5JVElBTF9TQ0FMRSxcbiAgICAgIHNjYWxlUmVmbGVjdGlvbjogTkVMREVSX01FQURfREVGQVVMVFMuU0NBTEVfUkVGTEVDVElPTixcbiAgICAgIHNjYWxlRXhwYW5zaW9uOiBORUxERVJfTUVBRF9ERUZBVUxUUy5TQ0FMRV9FWFBBTlNJT04sXG4gICAgICBzY2FsZUNvbnRyYWN0aW9uOiBORUxERVJfTUVBRF9ERUZBVUxUUy5TQ0FMRV9DT05UUkFDVElPTixcbiAgICB9LCAxMCwgcGFyYW1WYWx1ZXMpO1xuXG4gICAgbWluSWR4ID0gMDtcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IG9wdGltaXphdGlvbi5leHRyZW11bXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChvcHRpbWl6YXRpb24uZXh0cmVtdW1zW2ldLmNvc3QgPCBvcHRpbWl6YXRpb24uZXh0cmVtdW1zW21pbklkeF0uY29zdClcbiAgICAgICAgbWluSWR4ID0gaTtcbiAgICB9XG5cbiAgICBjb25zdCBuZXdTdGF0aXN0aWNzID0gZ2V0Q29uc2lzdGVuY3kob3B0aW1pemF0aW9uLmV4dHJlbXVtc1ttaW5JZHhdKTtcbiAgICBpZiAoc3RhdGlzdGljcyA9PT0gbnVsbClcbiAgICAgIHN0YXRpc3RpY3MgPSBuZXdTdGF0aXN0aWNzO1xuICAgIGVsc2UgaWYgKG5ld1N0YXRpc3RpY3MgPCBzdGF0aXN0aWNzKSB7XG4gICAgICBzdGF0aXN0aWNzID0gbmV3U3RhdGlzdGljcztcbiAgICAgIGNvbnRpbnVlT3B0aW1pemF0aW9uID0gMDtcbiAgICB9XG4gICAgZWxzZVxuICAgICAgY29udGludWVPcHRpbWl6YXRpb24rKztcblxuICAgIHBhcmFtVmFsdWVzID0gb3B0aW1pemF0aW9uLmV4dHJlbXVtc1ttaW5JZHhdLnBvaW50O1xuXG4gICAgaWYgKGl0ZXIgPiA0MCB8fCBjb250aW51ZU9wdGltaXphdGlvbiA9PT0gMylcbiAgICAgIGJyZWFrO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaXRGdW5jdGlvbi5wYXJhbWV0ZXJOYW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKCFwYXJhbWV0ZXJCb3VuZHNCaXRzZXQuZ2V0KGkgKiAyKSlcbiAgICAgICAgYm90dG9tUGFyYW1Cb3VuZHNbaV0gPSBwYXJhbVZhbHVlc1tpXSAtIE1hdGguYWJzKHBhcmFtVmFsdWVzW2ldICogKGNvbnRpbnVlT3B0aW1pemF0aW9uICsgMC41KSk7XG4gICAgICBpZiAoIXBhcmFtZXRlckJvdW5kc0JpdHNldC5nZXQoaSAqIDIgKyAxKSlcbiAgICAgICAgdG9wUGFyYW1Cb3VuZHNbaV0gPSBwYXJhbVZhbHVlc1tpXSArIE1hdGguYWJzKHBhcmFtVmFsdWVzW2ldICogKGNvbnRpbnVlT3B0aW1pemF0aW9uICsgMC41KSk7XG4gICAgfVxuXG4gICAgaXRlcisrO1xuICB9IHdoaWxlICh0cnVlKTtcblxuICBjb25zdCBmaXR0ZWRDdXJ2ZSA9IGdldEZpdHRlZEN1cnZlKGN1cnZlRnVuY3Rpb24sIHBhcmFtVmFsdWVzKTtcblxuICByZXR1cm4ge1xuICAgIGZpdHRlZEN1cnZlOiBmaXR0ZWRDdXJ2ZSxcbiAgICBwYXJhbWV0ZXJzOiBwYXJhbVZhbHVlcyxcbiAgfTtcbn1cblxuXG5mdW5jdGlvbiBvYmplY3RpdmVGYWN0b3J5KHRhcmdldEZ1bmM6IChwYXJhbXM6IEZsb2F0MzJBcnJheSwgeDogbnVtYmVyKSA9PiBudW1iZXIsXG4gIGRhdGE6IHt5OiBudW1iZXJbXSwgeDogbnVtYmVyW119LCBlcnJvck1vZGVsOiBGaXRFcnJvck1vZGVsVHlwZSk6XG4gICAgKHBhcmFtczogRmxvYXQzMkFycmF5KSA9PiB7bGlrZWxpaG9vZDogbnVtYmVyLCByZXNpZHVhbHM6IG51bWJlcltdfSB7XG4gIHJldHVybiAocGFyYW1zOiBGbG9hdDMyQXJyYXkpID0+IHtcbiAgICBsZXQgbGlrZWxpaG9vZCA9IDA7XG4gICAgbGV0IHNpZ21hQSA9IDA7XG4gICAgbGV0IHNpZ21hQiA9IDA7XG5cbiAgICBjb25zdCBvYnMgPSBkYXRhLnk7XG4gICAgY29uc3QgcHJlZCA9IGRhdGEueC5tYXAoKHgpID0+IHRhcmdldEZ1bmMocGFyYW1zLCB4KSk7XG4gICAgY29uc3QgcmVzaWR1YWxzID0gb2JzLm1hcCgob2JzLCBpKSA9PiBvYnMgLSBwcmVkW2ldKTtcbiAgICBjb25zdCByZXNpZHVlc1NxdWFyZXMgPSByZXNpZHVhbHMubWFwKChyZXMpID0+IE1hdGgucG93KHJlcywgMikpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXNpZHVlc1NxdWFyZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChbRml0RXJyb3JNb2RlbC5DT05TVEFOVCwgRml0RXJyb3JNb2RlbC5DT01CSU5FRF0uaW5jbHVkZXMoZXJyb3JNb2RlbCkpXG4gICAgICAgIHNpZ21hQSArPSByZXNpZHVlc1NxdWFyZXNbaV07XG4gICAgICBlbHNlIGlmIChlcnJvck1vZGVsID09PSBGaXRFcnJvck1vZGVsLlBST1BPUlRJT05BTClcbiAgICAgICAgc2lnbWFCICs9IHJlc2lkdWVzU3F1YXJlc1tpXSAvIChwcmVkW2ldICogcHJlZFtpXSk7XG4gICAgfVxuICAgIHNpZ21hQSA9IE1hdGguc3FydChzaWdtYUEgLyByZXNpZHVlc1NxdWFyZXMubGVuZ3RoKTtcbiAgICBzaWdtYUIgPSBNYXRoLnNxcnQoc2lnbWFCIC8gcmVzaWR1ZXNTcXVhcmVzLmxlbmd0aCk7XG5cbiAgICBpZiAoZXJyb3JNb2RlbCA9PT0gRml0RXJyb3JNb2RlbC5DT01CSU5FRClcbiAgICAgICh7c2lnbWFBLCBzaWdtYUJ9ID0gZ2V0U2lnbWFzRm9yQ29tYmluZWRFcnJvck1vZGVsKHNpZ21hQSwgc2lnbWFCLCByZXNpZHVlc1NxdWFyZXMsIHByZWQpKTtcblxuICAgIGNvbnN0IHNpZ21hU3FJOiBudW1iZXJbXSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVzaWR1ZXNTcXVhcmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBzaWdtYVNxSVtpXSA9IE1hdGgucG93KHNpZ21hQSArIHNpZ21hQiAqIHByZWRbaV0sIDIpO1xuICAgICAgbGlrZWxpaG9vZCArPSByZXNpZHVlc1NxdWFyZXNbaV0gLyBzaWdtYVNxSVtpXSArIE1hdGgubG9nKDIgKiBNYXRoLlBJICogc2lnbWFTcUlbaV0pO1xuICAgIH1cblxuICAgIHJldHVybiB7bGlrZWxpaG9vZCwgcmVzaWR1YWxzfTtcbiAgfTtcbn1cblxuXG5mdW5jdGlvbiBnZXRTaWdtYSh0YXJnZXRGdW5jOiAocGFyYW1zOiBGbG9hdDMyQXJyYXksIHg6IG51bWJlcikgPT4gbnVtYmVyLFxuICBkYXRhOiB7eTogbnVtYmVyW10sIHg6IG51bWJlcltdfSwgZXJyb3JNb2RlbDogRml0RXJyb3JNb2RlbFR5cGUsIHBhcmFtczogRmxvYXQzMkFycmF5KToge3NpZ21hQTogbnVtYmVyLCBzaWdtYUI6IG51bWJlcn0ge1xuICBsZXQgc2lnbWFBID0gMDtcbiAgbGV0IHNpZ21hQiA9IDA7XG5cbiAgY29uc3Qgb2JzID0gZGF0YS55O1xuICBjb25zdCBwcmVkID0gZGF0YS54Lm1hcCgoeCkgPT4gdGFyZ2V0RnVuYyhwYXJhbXMsIHgpKTtcbiAgY29uc3QgcmVzaWR1YWxzID0gb2JzLm1hcCgob2JzLCBpKSA9PiBvYnMgLSBwcmVkW2ldKTtcbiAgY29uc3QgcmVzaWR1ZXNTcXVhcmVzID0gcmVzaWR1YWxzLm1hcCgocmVzKSA9PiBNYXRoLnBvdyhyZXMsIDIpKTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc2lkdWVzU3F1YXJlcy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChbRml0RXJyb3JNb2RlbC5DT05TVEFOVCwgRml0RXJyb3JNb2RlbC5DT01CSU5FRF0uaW5jbHVkZXMoZXJyb3JNb2RlbCkpXG4gICAgICBzaWdtYUEgKz0gcmVzaWR1ZXNTcXVhcmVzW2ldO1xuICAgIGVsc2UgaWYgKGVycm9yTW9kZWwgPT09IEZpdEVycm9yTW9kZWwuUFJPUE9SVElPTkFMKVxuICAgICAgc2lnbWFCICs9IE1hdGgucG93KHJlc2lkdWFsc1tpXSAvIE1hdGguYWJzKHByZWRbaV0pLCAyKTtcbiAgfVxuICBzaWdtYUEgPSBNYXRoLnNxcnQoc2lnbWFBIC8gcmVzaWR1ZXNTcXVhcmVzLmxlbmd0aCk7XG4gIHNpZ21hQiA9IE1hdGguc3FydChzaWdtYUIgLyByZXNpZHVlc1NxdWFyZXMubGVuZ3RoKTtcblxuICBpZiAoZXJyb3JNb2RlbCA9PT0gRml0RXJyb3JNb2RlbC5DT01CSU5FRClcbiAgICAoe3NpZ21hQSwgc2lnbWFCfSA9IGdldFNpZ21hc0ZvckNvbWJpbmVkRXJyb3JNb2RlbChzaWdtYUEsIHNpZ21hQiwgcmVzaWR1ZXNTcXVhcmVzLCBwcmVkKSk7XG5cbiAgcmV0dXJuIHtzaWdtYUEsIHNpZ21hQn07XG59XG5cbmZ1bmN0aW9uIGdldFNpZ21hc0ZvckNvbWJpbmVkRXJyb3JNb2RlbChzaWdtYUE6IG51bWJlciwgc2lnbWFCOiBudW1iZXIsIHJlc2lkdWVzU3F1YXJlczogbnVtYmVyW10sIHByZWQ6IG51bWJlcltdKTpcbiAge3NpZ21hQTogbnVtYmVyLCBzaWdtYUI6IG51bWJlcn0ge1xuICBsZXQgbGlrZWxpaG9vZENvbWJpbmVkID0gTnVtYmVyLk1BWF9WQUxVRTtcbiAgbGV0IGZpbmFsUHJvcG9ydGlvbiA9IDA7XG4gIGZvciAobGV0IGkgPSAwOyBpIDw9IDEwOyBpKyspIHtcbiAgICBsZXQgbGlrZWxpaG9vZENvbWJpbmVkTG9jYWwgPSAwO1xuICAgIGNvbnN0IHByb3BvcnRpb24gPSBpIC8gMTA7XG4gICAgY29uc3Qgc2lnbWFBQ29tYmluZWQgPSBzaWdtYUEgKiBwcm9wb3J0aW9uO1xuICAgIGNvbnN0IHNpZ21hQkNvbWJpbmVkID0gc2lnbWFBICogKDEgLSBwcm9wb3J0aW9uKTtcbiAgICBjb25zdCBzaWdtYVNxSUNvbWJpbmVkOiBudW1iZXJbXSA9IFtdO1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgcmVzaWR1ZXNTcXVhcmVzLmxlbmd0aDsgaisrKSB7XG4gICAgICBzaWdtYVNxSUNvbWJpbmVkW2pdID0gTWF0aC5wb3coc2lnbWFBQ29tYmluZWQgKyBzaWdtYUJDb21iaW5lZCAqIHByZWRbal0sIDIpO1xuICAgICAgbGlrZWxpaG9vZENvbWJpbmVkTG9jYWwgKz0gcmVzaWR1ZXNTcXVhcmVzW2pdIC8gc2lnbWFTcUlDb21iaW5lZFtqXSArIE1hdGgubG9nKDIgKiBNYXRoLlBJICogc2lnbWFTcUlDb21iaW5lZFtqXSk7XG4gICAgfVxuICAgIGlmIChsaWtlbGlob29kQ29tYmluZWRMb2NhbCA8IGxpa2VsaWhvb2RDb21iaW5lZCkge1xuICAgICAgbGlrZWxpaG9vZENvbWJpbmVkID0gbGlrZWxpaG9vZENvbWJpbmVkTG9jYWw7XG4gICAgICBmaW5hbFByb3BvcnRpb24gPSBwcm9wb3J0aW9uO1xuICAgIH1cbiAgfVxuICBzaWdtYUIgPSBzaWdtYUEgKiAoMSAtIGZpbmFsUHJvcG9ydGlvbik7XG4gIHNpZ21hQSA9IHNpZ21hQSAqIGZpbmFsUHJvcG9ydGlvbjtcblxuICByZXR1cm4ge3NpZ21hQSwgc2lnbWFCfTtcbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3VydmVDb25maWRlbmNlSW50ZXJ2YWxzKGRhdGE6IHt4OiBudW1iZXJbXSwgeTogbnVtYmVyW119LCBwYXJhbVZhbHVlczogRmxvYXQzMkFycmF5LFxuICBjdXJ2ZUZ1bmN0aW9uOiAocGFyYW1zOiBGbG9hdDMyQXJyYXksIHg6IG51bWJlcikgPT4gbnVtYmVyLCBjb25maWRlbmNlTGV2ZWw6IG51bWJlciA9IDAuMDUsIGVycm9yTW9kZWw6IEZpdEVycm9yTW9kZWxUeXBlKTpcbiAgRml0Q29uZmlkZW5jZUludGVydmFscyB7XG4gIGNvbnN0IGVycm9yID0gZ2V0U2lnbWEoY3VydmVGdW5jdGlvbiwgZGF0YSwgZXJyb3JNb2RlbCwgcGFyYW1WYWx1ZXMpO1xuICBjb25zdCBxdWFudGlsZSA9IGpTdGF0Lm5vcm1hbC5pbnYoMSAtIGNvbmZpZGVuY2VMZXZlbC8yLCAwLCAxKTtcblxuICBjb25zdCB0b3AgPSAoeDogbnVtYmVyKSA9PiB7XG4gICAgY29uc3QgdmFsdWUgPSBjdXJ2ZUZ1bmN0aW9uKHBhcmFtVmFsdWVzLCB4KTtcbiAgICByZXR1cm4gdmFsdWUgKyBxdWFudGlsZSAqIChlcnJvci5zaWdtYUEgKyBNYXRoLmFicyh2YWx1ZSkgKiBlcnJvci5zaWdtYUIpO1xuICB9O1xuXG4gIGNvbnN0IGJvdHRvbSA9ICh4OiBudW1iZXIpID0+IHtcbiAgICBjb25zdCB2YWx1ZSA9IGN1cnZlRnVuY3Rpb24ocGFyYW1WYWx1ZXMsIHgpO1xuICAgIHJldHVybiB2YWx1ZSAtIHF1YW50aWxlICogKGVycm9yLnNpZ21hQSArIE1hdGguYWJzKHZhbHVlKSAqIGVycm9yLnNpZ21hQik7XG4gIH07XG5cbiAgcmV0dXJuIHtjb25maWRlbmNlVG9wOiB0b3AsIGNvbmZpZGVuY2VCb3R0b206IGJvdHRvbX07XG59XG5cblxuLy8gY29uc3Qgc2VyaWVzOiBGaXRTZXJpZXMgPSBuZXcgRml0U2VyaWVzKFtcbi8vICAgeyd4JzogMCwgJ3knOiAwfSxcbi8vICAgeyd4JzogMSwgJ3knOiAwLjV9LFxuLy8gICB7J3gnOiAyLCAneSc6IDF9LFxuLy8gICB7J3gnOiAzLCAneSc6IDEwLCAnb3V0bGllcic6IHRydWV9LFxuLy8gICB7J3gnOiA0LCAneSc6IDB9LFxuLy8gXSk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRml0Q2VsbE91dGxpZXJUb2dnbGVBcmdzIHtcbiAgZ3JpZENlbGw6IERHLkdyaWRDZWxsO1xuICBzZXJpZXM6IElGaXRTZXJpZXM7XG4gIHNlcmllc0lkeDogbnVtYmVyO1xuICBwb2ludElkeDogbnVtYmVyO1xufTtcbiJdfQ==
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import * as DG from 'datagrok-api/dg';
|
|
2
|
+
import { PropertyDesirability } from '../mpo';
|
|
3
|
+
export declare class DesirabilityModeDialog {
|
|
4
|
+
private propertyName;
|
|
5
|
+
private prop;
|
|
6
|
+
private onUpdate;
|
|
7
|
+
private onTypeChanged?;
|
|
8
|
+
private mappedCol?;
|
|
9
|
+
constructor(propertyName: string, prop: PropertyDesirability, onUpdate: (patch: Partial<PropertyDesirability>) => void, onTypeChanged?: ((newProp: PropertyDesirability) => void) | undefined, mappedCol?: DG.Column<any, any> | null | undefined);
|
|
10
|
+
private static strategyToLabel;
|
|
11
|
+
private buildDefaultScoreInput;
|
|
12
|
+
show(): void;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=desirability-mode-dialog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"desirability-mode-dialog.d.ts","sourceRoot":"","sources":["desirability-mode-dialog.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAGtC,OAAO,EACL,oBAAoB,EAErB,MAAM,QAAQ,CAAC;AAkBhB,qBAAa,sBAAsB;IAE/B,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,aAAa,CAAC;IACtB,OAAO,CAAC,SAAS,CAAC;gBAJV,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,oBAAoB,EAC1B,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,oBAAoB,CAAC,KAAK,IAAI,EACxD,aAAa,CAAC,aAAY,oBAAoB,KAAK,IAAI,aAAA,EACvD,SAAS,CAAC,wCAAkB;IAGtC,OAAO,CAAC,MAAM,CAAC,eAAe;IAQ9B,OAAO,CAAC,sBAAsB;IAmC9B,IAAI,IAAI,IAAI;CAsKb"}
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
/* eslint-disable max-len */
|
|
2
|
+
import * as ui from 'datagrok-api/ui';
|
|
3
|
+
import { createDefaultCategorical, createDefaultNumerical, isNumerical, } from '../mpo';
|
|
4
|
+
import { MpoDesirabilityLineEditor } from '../editors/mpo-line-editor';
|
|
5
|
+
import { MpoCategoricalEditor } from '../editors/mpo-categorical-editor';
|
|
6
|
+
const DESIRABILITY_MODES = ['freeform', 'gaussian', 'sigmoid'];
|
|
7
|
+
const PROPERTY_TYPES = ['numerical', 'categorical'];
|
|
8
|
+
function sectionHeader(text) {
|
|
9
|
+
return ui.divText(text, 'statistics-mpo-section-header');
|
|
10
|
+
}
|
|
11
|
+
export class DesirabilityModeDialog {
|
|
12
|
+
constructor(propertyName, prop, onUpdate, onTypeChanged, mappedCol) {
|
|
13
|
+
this.propertyName = propertyName;
|
|
14
|
+
this.prop = prop;
|
|
15
|
+
this.onUpdate = onUpdate;
|
|
16
|
+
this.onTypeChanged = onTypeChanged;
|
|
17
|
+
this.mappedCol = mappedCol;
|
|
18
|
+
}
|
|
19
|
+
static strategyToLabel(strategy) {
|
|
20
|
+
switch (strategy) {
|
|
21
|
+
case 'default': return 'Use default score';
|
|
22
|
+
case 'skip': return 'Skip property';
|
|
23
|
+
default: return 'Exclude row';
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
buildDefaultScoreInput(prop) {
|
|
27
|
+
const mv = prop.missingValues;
|
|
28
|
+
const scoreInput = ui.input.float('Default score', { value: (mv === null || mv === void 0 ? void 0 : mv.strategy) === 'default' ? mv.score : 0, min: 0, max: 1, format: '#0.000',
|
|
29
|
+
onValueChanged: (v) => {
|
|
30
|
+
prop.missingValues = { strategy: 'default', score: v };
|
|
31
|
+
this.onUpdate({ missingValues: prop.missingValues });
|
|
32
|
+
}, });
|
|
33
|
+
scoreInput.root.style.display = (mv === null || mv === void 0 ? void 0 : mv.strategy) === 'default' ? '' : 'none';
|
|
34
|
+
const choiceInput = ui.input.choice('If missing', {
|
|
35
|
+
items: ['Exclude row', 'Use default score', 'Skip property'],
|
|
36
|
+
value: DesirabilityModeDialog.strategyToLabel(mv === null || mv === void 0 ? void 0 : mv.strategy),
|
|
37
|
+
onValueChanged: (v) => {
|
|
38
|
+
var _a;
|
|
39
|
+
const use = v === 'Use default score';
|
|
40
|
+
if (v === 'Skip property')
|
|
41
|
+
prop.missingValues = { strategy: 'skip' };
|
|
42
|
+
else if (use)
|
|
43
|
+
prop.missingValues = { strategy: 'default', score: (_a = scoreInput.value) !== null && _a !== void 0 ? _a : 0 };
|
|
44
|
+
else
|
|
45
|
+
prop.missingValues = { strategy: 'exclude' };
|
|
46
|
+
scoreInput.root.style.display = use ? '' : 'none';
|
|
47
|
+
this.onUpdate({ missingValues: prop.missingValues });
|
|
48
|
+
},
|
|
49
|
+
});
|
|
50
|
+
choiceInput.setTooltip('How to handle missing values:<br>' +
|
|
51
|
+
'• <b>Exclude row</b> — assign an MPO score of 0 to the row<br>' +
|
|
52
|
+
'• <b>Use default score</b> — use a fixed fallback desirability value<br>' +
|
|
53
|
+
'• <b>Skip property</b> — calculate the score from the remaining properties');
|
|
54
|
+
scoreInput.setTooltip('Desirability score (0–1) to use as fallback.');
|
|
55
|
+
return ui.form([choiceInput, scoreInput]);
|
|
56
|
+
}
|
|
57
|
+
show() {
|
|
58
|
+
const original = structuredClone(this.prop);
|
|
59
|
+
const dialog = ui.dialog({
|
|
60
|
+
title: this.propertyName,
|
|
61
|
+
});
|
|
62
|
+
dialog.root.classList.add('statistics-mpo-desirability-dialog');
|
|
63
|
+
const contentPanel = ui.divV([]);
|
|
64
|
+
const cached = { [original.functionType]: structuredClone(original) };
|
|
65
|
+
const subs = [];
|
|
66
|
+
let modeInputRoot;
|
|
67
|
+
const typeInput = ui.input.choice('Type', { items: [...PROPERTY_TYPES], value: this.prop.functionType, onValueChanged: (v) => {
|
|
68
|
+
var _a;
|
|
69
|
+
if (v === this.prop.functionType)
|
|
70
|
+
return;
|
|
71
|
+
cached[this.prop.functionType] = structuredClone(this.prop);
|
|
72
|
+
if (cached[v])
|
|
73
|
+
this.prop = structuredClone(cached[v]);
|
|
74
|
+
else if (v === 'categorical') {
|
|
75
|
+
const cats = ((_a = this.mappedCol) === null || _a === void 0 ? void 0 : _a.isCategorical) ?
|
|
76
|
+
this.mappedCol.categories.map((c) => ({ name: c, desirability: 1 })) : undefined;
|
|
77
|
+
this.prop = createDefaultCategorical(original.weight, cats);
|
|
78
|
+
}
|
|
79
|
+
else
|
|
80
|
+
this.prop = createDefaultNumerical(original.weight);
|
|
81
|
+
buildContent();
|
|
82
|
+
} });
|
|
83
|
+
const buildNumericalContent = () => {
|
|
84
|
+
var _a, _b, _c;
|
|
85
|
+
const prop = this.prop;
|
|
86
|
+
(_a = prop.mode) !== null && _a !== void 0 ? _a : (prop.mode = 'freeform');
|
|
87
|
+
const previewEditor = new MpoDesirabilityLineEditor(prop, 355, 103);
|
|
88
|
+
if ((_b = this.mappedCol) === null || _b === void 0 ? void 0 : _b.isNumerical)
|
|
89
|
+
previewEditor.setColumn(this.mappedCol);
|
|
90
|
+
const modeInput = ui.input.choice('Mode', { items: DESIRABILITY_MODES, value: prop.mode, onValueChanged: (v) => {
|
|
91
|
+
prop.mode = v;
|
|
92
|
+
this.onUpdate({ mode: prop.mode });
|
|
93
|
+
updateParams();
|
|
94
|
+
previewEditor.redrawAll(false);
|
|
95
|
+
} });
|
|
96
|
+
const configs = [
|
|
97
|
+
{ key: 'min', label: 'Min', fallback: () => previewEditor.getMinX() },
|
|
98
|
+
{ key: 'max', label: 'Max', fallback: () => previewEditor.getMaxX() },
|
|
99
|
+
{ key: 'mean', label: 'Mean', fallback: () => previewEditor.getDefaultMean() },
|
|
100
|
+
{ key: 'sigma', label: 'Sigma', fallback: () => previewEditor.getDefaultSigma(), transform: (v) => Math.max(0.01, v) },
|
|
101
|
+
{ key: 'x0', label: 'x0', fallback: () => previewEditor.getDefaultX0() },
|
|
102
|
+
{ key: 'k', label: 'k', fallback: () => previewEditor.getDefaultK(), transform: (v) => Math.max(0.1, v) },
|
|
103
|
+
];
|
|
104
|
+
const inputs = new Map();
|
|
105
|
+
for (const cfg of configs) {
|
|
106
|
+
inputs.set(cfg.key, ui.input.float(cfg.label, { value: (_c = prop[cfg.key]) !== null && _c !== void 0 ? _c : cfg.fallback(), format: '#0.000', onValueChanged: (v) => {
|
|
107
|
+
const value = cfg.transform ? cfg.transform(v !== null && v !== void 0 ? v : cfg.fallback()) : (v !== null && v !== void 0 ? v : cfg.fallback());
|
|
108
|
+
prop[cfg.key] = value;
|
|
109
|
+
this.onUpdate({ [cfg.key]: value });
|
|
110
|
+
previewEditor.redrawAll(false);
|
|
111
|
+
} }));
|
|
112
|
+
}
|
|
113
|
+
const syncInputs = () => {
|
|
114
|
+
var _a;
|
|
115
|
+
for (const cfg of configs)
|
|
116
|
+
inputs.get(cfg.key).value = (_a = prop[cfg.key]) !== null && _a !== void 0 ? _a : cfg.fallback();
|
|
117
|
+
};
|
|
118
|
+
inputs.get('min').setTooltip('Minimum property value');
|
|
119
|
+
inputs.get('max').setTooltip('Maximum property value');
|
|
120
|
+
const paramForm = ui.form([
|
|
121
|
+
inputs.get('min'), inputs.get('max'),
|
|
122
|
+
inputs.get('mean'), inputs.get('sigma'),
|
|
123
|
+
inputs.get('x0'), inputs.get('k'),
|
|
124
|
+
]);
|
|
125
|
+
paramForm.classList.add('statistics-mpo-param-grid');
|
|
126
|
+
const updateParams = () => {
|
|
127
|
+
inputs.get('mean').root.classList.toggle('statistics-mpo-hidden', prop.mode !== 'gaussian');
|
|
128
|
+
inputs.get('sigma').root.classList.toggle('statistics-mpo-hidden', prop.mode !== 'gaussian');
|
|
129
|
+
inputs.get('x0').root.classList.toggle('statistics-mpo-hidden', prop.mode !== 'sigmoid');
|
|
130
|
+
inputs.get('k').root.classList.toggle('statistics-mpo-hidden', prop.mode !== 'sigmoid');
|
|
131
|
+
};
|
|
132
|
+
updateParams();
|
|
133
|
+
previewEditor.onParamsChanged = (p) => {
|
|
134
|
+
Object.assign(prop, p);
|
|
135
|
+
syncInputs();
|
|
136
|
+
this.onUpdate(p);
|
|
137
|
+
};
|
|
138
|
+
subs.push(previewEditor.onChanged.subscribe((line) => {
|
|
139
|
+
prop.line = line;
|
|
140
|
+
if (prop.mode === 'freeform')
|
|
141
|
+
this.onUpdate({ line });
|
|
142
|
+
}));
|
|
143
|
+
modeInputRoot = modeInput.root;
|
|
144
|
+
previewEditor.root.classList.add('statistics-mpo-plot');
|
|
145
|
+
contentPanel.append(previewEditor.root, sectionHeader('PARAMETERS'), paramForm);
|
|
146
|
+
};
|
|
147
|
+
const buildCategoricalContent = () => {
|
|
148
|
+
var _a;
|
|
149
|
+
const prop = this.prop;
|
|
150
|
+
const catEditor = new MpoCategoricalEditor(prop, true, true);
|
|
151
|
+
if ((_a = this.mappedCol) === null || _a === void 0 ? void 0 : _a.isCategorical)
|
|
152
|
+
catEditor.setChoices([...this.mappedCol.categories]);
|
|
153
|
+
subs.push(catEditor.onChanged.subscribe(() => this.onUpdate(this.prop)));
|
|
154
|
+
contentPanel.append(sectionHeader('CATEGORIES'), catEditor.root);
|
|
155
|
+
};
|
|
156
|
+
const dispose = () => {
|
|
157
|
+
for (const s of subs)
|
|
158
|
+
s.unsubscribe();
|
|
159
|
+
subs.length = 0;
|
|
160
|
+
};
|
|
161
|
+
const buildContent = () => {
|
|
162
|
+
dispose();
|
|
163
|
+
ui.empty(contentPanel);
|
|
164
|
+
modeInputRoot = undefined;
|
|
165
|
+
if (isNumerical(this.prop))
|
|
166
|
+
buildNumericalContent();
|
|
167
|
+
else
|
|
168
|
+
buildCategoricalContent();
|
|
169
|
+
const headerItems = [];
|
|
170
|
+
if (!this.mappedCol)
|
|
171
|
+
headerItems.push(typeInput.root);
|
|
172
|
+
if (modeInputRoot)
|
|
173
|
+
headerItems.push(modeInputRoot);
|
|
174
|
+
if (headerItems.length > 0)
|
|
175
|
+
contentPanel.prepend(ui.divH(headerItems, 'statistics-mpo-dialog-header-row'));
|
|
176
|
+
contentPanel.append(sectionHeader('MISSING VALUES'), this.buildDefaultScoreInput(this.prop));
|
|
177
|
+
};
|
|
178
|
+
buildContent();
|
|
179
|
+
dialog.add(contentPanel);
|
|
180
|
+
dialog.onOK(() => {
|
|
181
|
+
var _a;
|
|
182
|
+
dispose();
|
|
183
|
+
if (this.prop.functionType !== original.functionType)
|
|
184
|
+
(_a = this.onTypeChanged) === null || _a === void 0 ? void 0 : _a.call(this, this.prop);
|
|
185
|
+
else
|
|
186
|
+
this.onUpdate(this.prop);
|
|
187
|
+
dialog.close();
|
|
188
|
+
});
|
|
189
|
+
dialog.onCancel(() => {
|
|
190
|
+
dispose();
|
|
191
|
+
this.prop = original;
|
|
192
|
+
this.onUpdate(original);
|
|
193
|
+
dialog.close();
|
|
194
|
+
});
|
|
195
|
+
dialog.show();
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzaXJhYmlsaXR5LW1vZGUtZGlhbG9nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZGVzaXJhYmlsaXR5LW1vZGUtZGlhbG9nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDRCQUE0QjtBQUM1QixPQUFPLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBSXRDLE9BQU8sRUFFTCx3QkFBd0IsRUFBRSxzQkFBc0IsRUFBRSxXQUFXLEdBQzlELE1BQU0sUUFBUSxDQUFDO0FBQ2hCLE9BQU8sRUFBQyx5QkFBeUIsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQ3JFLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLG1DQUFtQyxDQUFDO0FBRXZFLE1BQU0sa0JBQWtCLEdBQXVCLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUNuRixNQUFNLGNBQWMsR0FBRyxDQUFDLFdBQVcsRUFBRSxhQUFhLENBQVUsQ0FBQztBQVM3RCxTQUFTLGFBQWEsQ0FBQyxJQUFZO0lBQ2pDLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsK0JBQStCLENBQUMsQ0FBQztBQUMzRCxDQUFDO0FBRUQsTUFBTSxPQUFPLHNCQUFzQjtJQUNqQyxZQUNVLFlBQW9CLEVBQ3BCLElBQTBCLEVBQzFCLFFBQXdELEVBQ3hELGFBQXVELEVBQ3ZELFNBQTRCO1FBSjVCLGlCQUFZLEdBQVosWUFBWSxDQUFRO1FBQ3BCLFNBQUksR0FBSixJQUFJLENBQXNCO1FBQzFCLGFBQVEsR0FBUixRQUFRLENBQWdEO1FBQ3hELGtCQUFhLEdBQWIsYUFBYSxDQUEwQztRQUN2RCxjQUFTLEdBQVQsU0FBUyxDQUFtQjtJQUNuQyxDQUFDO0lBRUksTUFBTSxDQUFDLGVBQWUsQ0FBQyxRQUFpQjtRQUM5QyxRQUFRLFFBQVEsRUFBRTtZQUNsQixLQUFLLFNBQVMsQ0FBQyxDQUFDLE9BQU8sbUJBQW1CLENBQUM7WUFDM0MsS0FBSyxNQUFNLENBQUMsQ0FB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RSxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDL0YsQ0FBQyxDQUFDO1FBRUYsWUFBWSxFQUFFLENBQUM7UUFFZixNQUFNLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRXpCLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFOztZQUNmLE9BQU8sRUFBRSxDQUFDO1lBQ1YsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksS0FBSyxRQUFRLENBQUMsWUFBWTtnQkFDbEQsTUFBQSxJQUFJLENBQUMsYUFBYSxxREFBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7O2dCQUVoQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMzQixNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDakIsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUNuQixPQUFPLEVBQUUsQ0FBQztZQUNWLElBQUksQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDeEIsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2pCLENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2hCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi9cbmltcG9ydCAqIGFzIHVpIGZyb20gJ2RhdGFncm9rLWFwaS91aSc7XG5pbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuXG5pbXBvcnQge1N1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBQcm9wZXJ0eURlc2lyYWJpbGl0eSwgTnVtZXJpY2FsRGVzaXJhYmlsaXR5LCBDYXRlZ29yaWNhbERlc2lyYWJpbGl0eSwgRGVzaXJhYmlsaXR5TW9kZSxcbiAgY3JlYXRlRGVmYXVsdENhdGVnb3JpY2FsLCBjcmVhdGVEZWZhdWx0TnVtZXJpY2FsLCBpc051bWVyaWNhbCxcbn0gZnJvbSAnLi4vbXBvJztcbmltcG9ydCB7TXBvRGVzaXJhYmlsaXR5TGluZUVkaXRvcn0gZnJvbSAnLi4vZWRpdG9ycy9tcG8tbGluZS1lZGl0b3InO1xuaW1wb3J0IHtNcG9DYXRlZ29yaWNhbEVkaXRvcn0gZnJvbSAnLi4vZWRpdG9ycy9tcG8tY2F0ZWdvcmljYWwtZWRpdG9yJztcblxuY29uc3QgREVTSVJBQklMSVRZX01PREVTOiBEZXNpcmFiaWxpdHlNb2RlW10gPSBbJ2ZyZWVmb3JtJywgJ2dhdXNzaWFuJywgJ3NpZ21vaWQnXTtcbmNvbnN0IFBST1BFUlRZX1RZUEVTID0gWydudW1lcmljYWwnLCAnY2F0ZWdvcmljYWwnXSBhcyBjb25zdDtcblxudHlwZSBQYXJhbUNvbmZpZyA9IHtcbiAga2V5OiAnbWluJyB8ICdtYXgnIHwgJ21lYW4nIHwgJ3NpZ21hJyB8ICd4MCcgfCAnayc7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIGZhbGxiYWNrOiAoKSA9PiBudW1iZXI7XG4gIHRyYW5zZm9ybT86ICh2OiBudW1iZXIpID0+IG51bWJlcjtcbn07XG5cbmZ1bmN0aW9uIHNlY3Rpb25IZWFkZXIodGV4dDogc3RyaW5nKTogSFRNTEVsZW1lbnQge1xuICByZXR1cm4gdWkuZGl2VGV4dCh0ZXh0LCAnc3RhdGlzdGljcy1tcG8tc2VjdGlvbi1oZWFkZXInKTtcbn1cblxuZXhwb3J0IGNsYXNzIERlc2lyYWJpbGl0eU1vZGVEaWFsb2cge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHByb3BlcnR5TmFtZTogc3RyaW5nLFxuICAgIHByaXZhdGUgcHJvcDogUHJvcGVydHlEZXNpcmFiaWxpdHksXG4gICAgcHJpdmF0ZSBvblVwZGF0ZTogKHBhdGNoOiBQYXJ0aWFsPFByb3BlcnR5RGVzaXJhYmlsaXR5PikgPT4gdm9pZCxcbiAgICBwcml2YXRlIG9uVHlwZUNoYW5nZWQ/OiAobmV3UHJvcDogUHJvcGVydHlEZXNpcmFiaWxpdHkpID0+IHZvaWQsXG4gICAgcHJpdmF0ZSBtYXBwZWRDb2w/OiBERy5Db2x1bW4gfCBudWxsLFxuICApIHt9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgc3RyYXRlZ3lUb0xhYmVsKHN0cmF0ZWd5Pzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBzd2l0Y2ggKHN0cmF0ZWd5KSB7XG4gICAgY2FzZSAnZGVmYXVsdCc6IHJldHVybiAnVXNlIGRlZmF1bHQgc2NvcmUnO1xuICAgIGNhc2UgJ3NraXAnOiByZXR1cm4gJ1NraXAgcHJvcGVydHknO1xuICAgIGRlZmF1bHQ6IHJldHVybiAnRXhjbHVkZSByb3cnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYnVpbGREZWZhdWx0U2NvcmVJbnB1dChwcm9wOiBQcm9wZXJ0eURlc2lyYWJpbGl0eSk6IEhUTUxFbGVtZW50IHtcbiAgICBjb25zdCBtdiA9IHByb3AubWlzc2luZ1ZhbHVlcztcbiAgICBjb25zdCBzY29yZUlucHV0ID0gdWkuaW5wdXQuZmxvYXQoJ0RlZmF1bHQgc2NvcmUnLCB7dmFsdWU6IG12Py5zdHJhdGVneSA9PT0gJ2RlZmF1bHQnID8gbXYuc2NvcmUgOiAwLCBtaW46IDAsIG1heDogMSwgZm9ybWF0OiAnIzAuMDAwJyxcbiAgICAgIG9uVmFsdWVDaGFuZ2VkOiAodikgPT4ge1xuICAgICAgICBwcm9wLm1pc3NpbmdWYWx1ZXMgPSB7c3RyYXRlZ3k6ICdkZWZhdWx0Jywgc2NvcmU6IHZ9O1xuICAgICAgICB0aGlzLm9uVXBkYXRlKHttaXNzaW5nVmFsdWVzOiBwcm9wLm1pc3NpbmdWYWx1ZXN9KTtcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgc2NvcmVJbnB1dC5yb290LnN0eWxlLmRpc3BsYXkgPSBtdj8uc3RyYXRlZ3kgPT09ICdkZWZhdWx0JyA/ICcnIDogJ25vbmUnO1xuXG4gICAgY29uc3QgY2hvaWNlSW5wdXQgPSB1aS5pbnB1dC5jaG9pY2UoJ0lmIG1pc3NpbmcnLCB7XG4gICAgICBpdGVtczogWydFeGNsdWRlIHJvdycsICdVc2UgZGVmYXVsdCBzY29yZScsICdTa2lwIHByb3BlcnR5J10sXG4gICAgICB2YWx1ZTogRGVzaXJhYmlsaXR5TW9kZURpYWxvZy5zdHJhdGVneVRvTGFiZWwobXY/LnN0cmF0ZWd5KSxcbiAgICAgIG9uVmFsdWVDaGFuZ2VkOiAodikgPT4ge1xuICAgICAgICBjb25zdCB1c2UgPSB2ID09PSAnVXNlIGRlZmF1bHQgc2NvcmUnO1xuICAgICAgICBpZiAodiA9PT0gJ1NraXAgcHJvcGVydHknKVxuICAgICAgICAgIHByb3AubWlzc2luZ1ZhbHVlcyA9IHtzdHJhdGVneTogJ3NraXAnfTtcbiAgICAgICAgZWxzZSBpZiAodXNlKVxuICAgICAgICAgIHByb3AubWlzc2luZ1ZhbHVlcyA9IHtzdHJhdGVneTogJ2RlZmF1bHQnLCBzY29yZTogc2NvcmVJbnB1dC52YWx1ZSA/PyAwfTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIHByb3AubWlzc2luZ1ZhbHVlcyA9IHtzdHJhdGVneTogJ2V4Y2x1ZGUnfTtcbiAgICAgICAgc2NvcmVJbnB1dC5yb290LnN0eWxlLmRpc3BsYXkgPSB1c2UgPyAnJyA6ICdub25lJztcbiAgICAgICAgdGhpcy5vblVwZGF0ZSh7bWlzc2luZ1ZhbHVlczogcHJvcC5taXNzaW5nVmFsdWVzfSBhcyBhbnkpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgICBjaG9pY2VJbnB1dC5zZXRUb29sdGlwKFxuICAgICAgJ0hvdyB0byBoYW5kbGUgbWlzc2luZyB2YWx1ZXM6PGJyPicgK1xuICAgICAgJ+KAoiA8Yj5FeGNsdWRlIHJvdzwvYj4g4oCUIGFzc2lnbiBhbiBNUE8gc2NvcmUgb2YgMCB0byB0aGUgcm93PGJyPicgK1xuICAgICAgJ+KAoiA8Yj5Vc2UgZGVmYXVsdCBzY29yZTwvYj4g4oCUIHVzZSBhIGZpeGVkIGZhbGxiYWNrIGRlc2lyYWJpbGl0eSB2YWx1ZTxicj4nICtcbiAgICAgICfigKIgPGI+U2tpcCBwcm9wZXJ0eTwvYj4g4oCUIGNhbGN1bGF0ZSB0aGUgc2NvcmUgZnJvbSB0aGUgcmVtYWluaW5nIHByb3BlcnRpZXMnLFxuICAgICk7XG4gICAgc2NvcmVJbnB1dC5zZXRUb29sdGlwKCdEZXNpcmFiaWxpdHkgc2NvcmUgKDDigJMxKSB0byB1c2UgYXMgZmFsbGJhY2suJyk7XG4gICAgcmV0dXJuIHVpLmZvcm0oW2Nob2ljZUlucHV0LCBzY29yZUlucHV0XSk7XG4gIH1cblxuICBzaG93KCk6IHZvaWQge1xuICAgIGNvbnN0IG9yaWdpbmFsID0gc3RydWN0dXJlZENsb25lKHRoaXMucHJvcCk7XG5cbiAgICBjb25zdCBkaWFsb2cgPSB1aS5kaWFsb2coe1xuICAgICAgdGl0bGU6IHRoaXMucHJvcGVydHlOYW1lLFxuICAgIH0pO1xuICAgIGRpYWxvZy5yb290LmNsYXNzTGlzdC5hZGQoJ3N0YXRpc3RpY3MtbXBvLWRlc2lyYWJpbGl0eS1kaWFsb2cnKTtcblxuICAgIGNvbnN0IGNvbnRlbnRQYW5lbCA9IHVpLmRpdlYoW10pO1xuICAgIGNvbnN0IGNhY2hlZDogUmVjb3JkPHN0cmluZywgUHJvcGVydHlEZXNpcmFiaWxpdHk+ID0ge1tvcmlnaW5hbC5mdW5jdGlvblR5cGVdOiBzdHJ1Y3R1cmVkQ2xvbmUob3JpZ2luYWwpfTtcbiAgICBjb25zdCBzdWJzOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuXG4gICAgbGV0IG1vZGVJbnB1dFJvb3Q6IEhUTUxFbGVtZW50IHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgdHlwZUlucHV0ID0gdWkuaW5wdXQuY2hvaWNlKCdUeXBlJywge2l0ZW1zOiBbLi4uUFJPUEVSVFlfVFlQRVNdLCB2YWx1ZTogdGhpcy5wcm9wLmZ1bmN0aW9uVHlwZSwgb25WYWx1ZUNoYW5nZWQ6ICh2KSA9PiB7XG4gICAgICBpZiAodiA9PT0gdGhpcy5wcm9wLmZ1bmN0aW9uVHlwZSlcbiAgICAgICAgcmV0dXJuO1xuXG4gICAgICBjYWNoZWRbdGhpcy5wcm9wLmZ1bmN0aW9uVHlwZV0gPSBzdHJ1Y3R1cmVkQ2xvbmUodGhpcy5wcm9wKTtcblxuICAgICAgaWYgKGNhY2hlZFt2XSlcbiAgICAgICAgdGhpcy5wcm9wID0gc3RydWN0dXJlZENsb25lKGNhY2hlZFt2XSk7XG4gICAgICBlbHNlIGlmICh2ID09PSAnY2F0ZWdvcmljYWwnKSB7XG4gICAgICAgIGNvbnN0IGNhdHMgPSB0aGlzLm1hcHBlZENvbD8uaXNDYXRlZ29yaWNhbCA/XG4gICAgICAgICAgdGhpcy5tYXBwZWRDb2wuY2F0ZWdvcmllcy5tYXAoKGM6IHN0cmluZykgPT4gKHtuYW1lOiBjLCBkZXNpcmFiaWxpdHk6IDF9KSkgOiB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMucHJvcCA9IGNyZWF0ZURlZmF1bHRDYXRlZ29yaWNhbChvcmlnaW5hbC53ZWlnaHQsIGNhdHMpO1xuICAgICAgfVxuICAgICAgZWxzZVxuICAgICAgICB0aGlzLnByb3AgPSBjcmVhdGVEZWZhdWx0TnVtZXJpY2FsKG9yaWdpbmFsLndlaWdodCk7XG5cbiAgICAgIGJ1aWxkQ29udGVudCgpO1xuICAgIH19KTtcblxuICAgIGNvbnN0IGJ1aWxkTnVtZXJpY2FsQ29udGVudCA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHByb3AgPSB0aGlzLnByb3AgYXMgTnVtZXJpY2FsRGVzaXJhYmlsaXR5O1xuICAgICAgcHJvcC5tb2RlID8/PSAnZnJlZWZvcm0nO1xuXG4gICAgICBjb25zdCBwcmV2aWV3RWRpdG9yID0gbmV3IE1wb0Rlc2lyYWJpbGl0eUxpbmVFZGl0b3IocHJvcCwgMzU1LCAxMDMpO1xuICAgICAgaWYgKHRoaXMubWFwcGVkQ29sPy5pc051bWVyaWNhbClcbiAgICAgICAgcHJldmlld0VkaXRvci5zZXRDb2x1bW4odGhpcy5tYXBwZWRDb2wpO1xuXG4gICAgICBjb25zdCBtb2RlSW5wdXQgPSB1aS5pbnB1dC5jaG9pY2UoJ01vZGUnLCB7aXRlbXM6IERFU0lSQUJJTElUWV9NT0RFUywgdmFsdWU6IHByb3AubW9kZSwgb25WYWx1ZUNoYW5nZWQ6ICh2KSA9PiB7XG4gICAgICAgIHByb3AubW9kZSA9IHYgYXMgRGVzaXJhYmlsaXR5TW9kZTtcbiAgICAgICAgdGhpcy5vblVwZGF0ZSh7bW9kZTogcHJvcC5tb2RlfSBhcyBhbnkpO1xuICAgICAgICB1cGRhdGVQYXJhbXMoKTtcbiAgICAgICAgcHJldmlld0VkaXRvci5yZWRyYXdBbGwoZmFsc2UpO1xuICAgICAgfX0pO1xuXG4gICAgICBjb25zdCBjb25maWdzOiBQYXJhbUNvbmZpZ1tdID0gW1xuICAgICAgICB7a2V5OiAnbWluJywgbGFiZWw6ICdNaW4nLCBmYWxsYmFjazogKCkgPT4gcHJldmlld0VkaXRvci5nZXRNaW5YKCl9LFxuICAgICAgICB7a2V5OiAnbWF4JywgbGFiZWw6ICdNYXgnLCBmYWxsYmFjazogKCkgPT4gcHJldmlld0VkaXRvci5nZXRNYXhYKCl9LFxuICAgICAgICB7a2V5OiAnbWVhbicsIGxhYmVsOiAnTWVhbicsIGZhbGxiYWNrOiAoKSA9PiBwcmV2aWV3RWRpdG9yLmdldERlZmF1bHRNZWFuKCl9LFxuICAgICAgICB7a2V5OiAnc2lnbWEnLCBsYWJlbDogJ1NpZ21hJywgZmFsbGJhY2s6ICgpID0+IHByZXZpZXdFZGl0b3IuZ2V0RGVmYXVsdFNpZ21hKCksIHRyYW5zZm9ybTogKHYpID0+IE1hdGgubWF4KDAuMDEsIHYpfSxcbiAgICAgICAge2tleTogJ3gwJywgbGFiZWw6ICd4MCcsIGZhbGxiYWNrOiAoKSA9PiBwcmV2aWV3RWRpdG9yLmdldERlZmF1bHRYMCgpfSxcbiAgICAgICAge2tleTogJ2snLCBsYWJlbDogJ2snLCBmYWxsYmFjazogKCkgPT4gcHJldmlld0VkaXRvci5nZXREZWZhdWx0SygpLCB0cmFuc2Zvcm06ICh2KSA9PiBNYXRoLm1heCgwLjEsIHYpfSxcbiAgICAgIF07XG5cbiAgICAgIGNvbnN0IGlucHV0cyA9IG5ldyBNYXA8c3RyaW5nLCBERy5JbnB1dEJhc2U+KCk7XG4gICAgICBmb3IgKGNvbnN0IGNmZyBvZiBjb25maWdzKSB7XG4gICAgICAgIGlucHV0cy5zZXQoY2ZnLmtleSwgdWkuaW5wdXQuZmxvYXQoY2ZnLmxhYmVsLCB7dmFsdWU6IHByb3BbY2ZnLmtleV0gPz8gY2ZnLmZhbGxiYWNrKCksIGZvcm1hdDogJyMwLjAwMCcsIG9uVmFsdWVDaGFuZ2VkOiAodikgPT4ge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gY2ZnLnRyYW5zZm9ybSA/IGNmZy50cmFuc2Zvcm0odiA/PyBjZmcuZmFsbGJhY2soKSkgOiAodiA/PyBjZmcuZmFsbGJhY2soKSk7XG4gICAgICAgICAgcHJvcFtjZmcua2V5XSA9IHZhbHVlO1xuICAgICAgICAgIHRoaXMub25VcGRhdGUoe1tjZmcua2V5XTogdmFsdWV9IGFzIGFueSk7XG4gICAgICAgICAgcHJldmlld0VkaXRvci5yZWRyYXdBbGwoZmFsc2UpO1xuICAgICAgICB9fSkpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzeW5jSW5wdXRzID0gKCkgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IGNmZyBvZiBjb25maWdzKVxuICAgICAgICAgIGlucHV0cy5nZXQoY2ZnLmtleSkhLnZhbHVlID0gcHJvcFtjZmcua2V5XSA/PyBjZmcuZmFsbGJhY2soKTtcbiAgICAgIH07XG5cbiAgICAgIGlucHV0cy5nZXQoJ21pbicpIS5zZXRUb29sdGlwKCdNaW5pbXVtIHByb3BlcnR5IHZhbHVlJyk7XG4gICAgICBpbnB1dHMuZ2V0KCdtYXgnKSEuc2V0VG9vbHRpcCgnTWF4aW11bSBwcm9wZXJ0eSB2YWx1ZScpO1xuXG4gICAgICBjb25zdCBwYXJhbUZvcm0gPSB1aS5mb3JtKFtcbiAgICAgICAgaW5wdXRzLmdldCgnbWluJykhLCBpbnB1dHMuZ2V0KCdtYXgnKSEsXG4gICAgICAgIGlucHV0cy5nZXQoJ21lYW4nKSEsIGlucHV0cy5nZXQoJ3NpZ21hJykhLFxuICAgICAgICBpbnB1dHMuZ2V0KCd4MCcpISwgaW5wdXRzLmdldCgnaycpISxcbiAgICAgIF0pO1xuICAgICAgcGFyYW1Gb3JtLmNsYXNzTGlzdC5hZGQoJ3N0YXRpc3RpY3MtbXBvLXBhcmFtLWdyaWQnKTtcblxuICAgICAgY29uc3QgdXBkYXRlUGFyYW1zID0gKCkgPT4ge1xuICAgICAgICBpbnB1dHMuZ2V0KCdtZWFuJykhLnJvb3QuY2xhc3NMaXN0LnRvZ2dsZSgnc3RhdGlzdGljcy1tcG8taGlkZGVuJywgcHJvcC5tb2RlICE9PSAnZ2F1c3NpYW4nKTtcbiAgICAgICAgaW5wdXRzLmdldCgnc2lnbWEnKSEucm9vdC5jbGFzc0xpc3QudG9nZ2xlKCdzdGF0aXN0aWNzLW1wby1oaWRkZW4nLCBwcm9wLm1vZGUgIT09ICdnYXVzc2lhbicpO1xuICAgICAgICBpbnB1dHMuZ2V0KCd4MCcpIS5yb290LmNsYXNzTGlzdC50b2dnbGUoJ3N0YXRpc3RpY3MtbXBvLWhpZGRlbicsIHByb3AubW9kZSAhPT0gJ3NpZ21vaWQnKTtcbiAgICAgICAgaW5wdXRzLmdldCgnaycpIS5yb290LmNsYXNzTGlzdC50b2dnbGUoJ3N0YXRpc3RpY3MtbXBvLWhpZGRlbicsIHByb3AubW9kZSAhPT0gJ3NpZ21vaWQnKTtcbiAgICAgIH07XG5cbiAgICAgIHVwZGF0ZVBhcmFtcygpO1xuXG4gICAgICBwcmV2aWV3RWRpdG9yLm9uUGFyYW1zQ2hhbmdlZCA9IChwKSA9PiB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24ocHJvcCwgcCk7XG4gICAgICAgIHN5bmNJbnB1dHMoKTtcbiAgICAgICAgdGhpcy5vblVwZGF0ZShwIGFzIGFueSk7XG4gICAgICB9O1xuXG4gICAgICBzdWJzLnB1c2gocHJldmlld0VkaXRvci5vbkNoYW5nZWQuc3Vic2NyaWJlKChsaW5lKSA9PiB7XG4gICAgICAgIHByb3AubGluZSA9IGxpbmU7XG4gICAgICAgIGlmIChwcm9wLm1vZGUgPT09ICdmcmVlZm9ybScpXG4gICAgICAgICAgdGhpcy5vblVwZGF0ZSh7bGluZX0gYXMgYW55KTtcbiAgICAgIH0pKTtcblxuICAgICAgbW9kZUlucHV0Um9vdCA9IG1vZGVJbnB1dC5yb290O1xuICAgICAgcHJldmlld0VkaXRvci5yb290LmNsYXNzTGlzdC5hZGQoJ3N0YXRpc3RpY3MtbXBvLXBsb3QnKTtcbiAgICAgIGNvbnRlbnRQYW5lbC5hcHBlbmQocHJldmlld0VkaXRvci5yb290LCBzZWN0aW9uSGVhZGVyKCdQQVJBTUVURVJTJyksIHBhcmFtRm9ybSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGJ1aWxkQ2F0ZWdvcmljYWxDb250ZW50ID0gKCkgPT4ge1xuICAgICAgY29uc3QgcHJvcCA9IHRoaXMucHJvcCBhcyBDYXRlZ29yaWNhbERlc2lyYWJpbGl0eTtcbiAgICAgIGNvbnN0IGNhdEVkaXRvciA9IG5ldyBNcG9DYXRlZ29yaWNhbEVkaXRvcihwcm9wLCB0cnVlLCB0cnVlKTtcbiAgICAgIGlmICh0aGlzLm1hcHBlZENvbD8uaXNDYXRlZ29yaWNhbClcbiAgICAgICAgY2F0RWRpdG9yLnNldENob2ljZXMoWy4uLnRoaXMubWFwcGVkQ29sLmNhdGVnb3JpZXNdKTtcbiAgICAgIHN1YnMucHVzaChjYXRFZGl0b3Iub25DaGFuZ2VkLnN1YnNjcmliZSgoKSA9PiB0aGlzLm9uVXBkYXRlKHRoaXMucHJvcCkpKTtcbiAgICAgIGNvbnRlbnRQYW5lbC5hcHBlbmQoc2VjdGlvbkhlYWRlcignQ0FURUdPUklFUycpLCBjYXRFZGl0b3Iucm9vdCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGRpc3Bvc2UgPSAoKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IHMgb2Ygc3VicylcbiAgICAgICAgcy51bnN1YnNjcmliZSgpO1xuICAgICAgc3Vicy5sZW5ndGggPSAwO1xuICAgIH07XG5cbiAgICBjb25zdCBidWlsZENvbnRlbnQgPSAoKSA9PiB7XG4gICAgICBkaXNwb3NlKCk7XG4gICAgICB1aS5lbXB0eShjb250ZW50UGFuZWwpO1xuICAgICAgbW9kZUlucHV0Um9vdCA9IHVuZGVmaW5lZDtcblxuICAgICAgaWYgKGlzTnVtZXJpY2FsKHRoaXMucHJvcCkpXG4gICAgICAgIGJ1aWxkTnVtZXJpY2FsQ29udGVudCgpO1xuICAgICAgZWxzZVxuICAgICAgICBidWlsZENhdGVnb3JpY2FsQ29udGVudCgpO1xuXG4gICAgICBjb25zdCBoZWFkZXJJdGVtczogSFRNTEVsZW1lbnRbXSA9IFtdO1xuICAgICAgaWYgKCF0aGlzLm1hcHBlZENvbClcbiAgICAgICAgaGVhZGVySXRlbXMucHVzaCh0eXBlSW5wdXQucm9vdCk7XG4gICAgICBpZiAobW9kZUlucHV0Um9vdClcbiAgICAgICAgaGVhZGVySXRlbXMucHVzaChtb2RlSW5wdXRSb290KTtcbiAgICAgIGlmIChoZWFkZXJJdGVtcy5sZW5ndGggPiAwKVxuICAgICAgICBjb250ZW50UGFuZWwucHJlcGVuZCh1aS5kaXZIKGhlYWRlckl0ZW1zLCAnc3RhdGlzdGljcy1tcG8tZGlhbG9nLWhlYWRlci1yb3cnKSk7XG5cbiAgICAgIGNvbnRlbnRQYW5lbC5hcHBlbmQoc2VjdGlvbkhlYWRlcignTUlTU0lORyBWQUxVRVMnKSwgdGhpcy5idWlsZERlZmF1bHRTY29yZUlucHV0KHRoaXMucHJvcCkpO1xuICAgIH07XG5cbiAgICBidWlsZENvbnRlbnQoKTtcblxuICAgIGRpYWxvZy5hZGQoY29udGVudFBhbmVsKTtcblxuICAgIGRpYWxvZy5vbk9LKCgpID0+IHtcbiAgICAgIGRpc3Bvc2UoKTtcbiAgICAgIGlmICh0aGlzLnByb3AuZnVuY3Rpb25UeXBlICE9PSBvcmlnaW5hbC5mdW5jdGlvblR5cGUpXG4gICAgICAgIHRoaXMub25UeXBlQ2hhbmdlZD8uKHRoaXMucHJvcCk7XG4gICAgICBlbHNlXG4gICAgICAgIHRoaXMub25VcGRhdGUodGhpcy5wcm9wKTtcbiAgICAgIGRpYWxvZy5jbG9zZSgpO1xuICAgIH0pO1xuXG4gICAgZGlhbG9nLm9uQ2FuY2VsKCgpID0+IHtcbiAgICAgIGRpc3Bvc2UoKTtcbiAgICAgIHRoaXMucHJvcCA9IG9yaWdpbmFsO1xuICAgICAgdGhpcy5vblVwZGF0ZShvcmlnaW5hbCk7XG4gICAgICBkaWFsb2cuY2xvc2UoKTtcbiAgICB9KTtcblxuICAgIGRpYWxvZy5zaG93KCk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import * as DG from 'datagrok-api/dg';
|
|
2
|
+
import { Subject } from 'rxjs';
|
|
3
|
+
import { PropertyDesirability } from '../mpo';
|
|
4
|
+
export interface DesirabilityEditor<T = any> {
|
|
5
|
+
supportsModeDialog: boolean;
|
|
6
|
+
root: HTMLElement;
|
|
7
|
+
onChanged: Subject<T>;
|
|
8
|
+
redrawAll(): void;
|
|
9
|
+
setRange?(min: number, max: number): void;
|
|
10
|
+
setColumn?(col: DG.Column | null): void;
|
|
11
|
+
}
|
|
12
|
+
export declare class DesirabilityEditorFactory {
|
|
13
|
+
static create(prop: PropertyDesirability, width?: number, height?: number, design?: boolean): DesirabilityEditor;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=desirability-editor-factory.d.ts.map
|