@rivet-health/design-system 31.3.2 → 31.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/input/button/button.component.mjs +2 -1
- package/esm2020/lib/input/mentions-input/mentions-input.component.mjs +98 -3
- package/esm2020/lib/input/select/state.mjs +2 -1
- package/esm2020/lib/input/simple-select/simple-select.component.mjs +2 -1
- package/esm2020/lib/table/table/state.mjs +4 -1
- package/esm2020/lib/visualization/chart/chart.mjs +2 -1
- package/fesm2015/rivet-health-design-system.mjs +104 -2
- package/fesm2015/rivet-health-design-system.mjs.map +1 -1
- package/fesm2020/rivet-health-design-system.mjs +104 -2
- package/fesm2020/rivet-health-design-system.mjs.map +1 -1
- package/lib/input/mentions-input/mentions-input.component.d.ts +4 -0
- package/package.json +1 -1
|
@@ -77,6 +77,7 @@ export class ButtonComponent {
|
|
|
77
77
|
const currentOrVariantChange = !!changes['current'] || !!changes['variant'];
|
|
78
78
|
if (currentOrVariantChange) {
|
|
79
79
|
if (this.current !== undefined && this.variant !== 'stateful') {
|
|
80
|
+
// eslint-disable-next-line no-console
|
|
80
81
|
console.warn(`ButtonComponent: The 'current' input is only valid when variant is 'stateful'. Variant: '${this.variant}'`);
|
|
81
82
|
}
|
|
82
83
|
}
|
|
@@ -129,4 +130,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
129
130
|
];
|
|
130
131
|
ButtonComponent.IconPositions = ['first', 'last', 'stacked'];
|
|
131
132
|
})(ButtonComponent || (ButtonComponent = {}));
|
|
132
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnV0dG9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Jpdi9zcmMvbGliL2lucHV0L2J1dHRvbi9idXR0b24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvaW5wdXQvYnV0dG9uL2J1dHRvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFFVCxXQUFXLEVBQ1gsS0FBSyxFQUVMLFFBQVEsR0FHVCxNQUFNLGVBQWUsQ0FBQzs7Ozs7O0FBV3ZCLE1BQU0sT0FBTyxlQUFlO0lBQzFCLFlBQ21CLEVBQWMsRUFDZCxRQUFtQixFQUNQLEtBQTJCO1FBRnZDLE9BQUUsR0FBRixFQUFFLENBQVk7UUFDZCxhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQ1AsVUFBSyxHQUFMLEtBQUssQ0FBc0I7UUFnQjFELFNBQUksR0FBeUIsUUFBUSxDQUFDO1FBR3RDLFlBQU8sR0FBNEIsT0FBTyxDQUFDO1FBTTNDLGlCQUFZLEdBQWlDLE9BQU8sQ0FBQztRQWtEN0MseUJBQW9CLEdBQVksS0FBSyxDQUFDO1FBQ3RDLHNCQUFpQixHQUFZLEtBQUssQ0FBQztJQTNFeEMsQ0FBQztJQTZCSixJQUNJLE9BQU87UUFDVCxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUM7WUFDcEIsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU07WUFDdEMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2YsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ3JCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLElBQUk7WUFDcEIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSTtZQUNqQixPQUFPLEVBQUUsSUFBSSxDQUFDLFlBQVksS0FBSyxTQUFT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Q0gsQ0FBQzs7NEdBN0dVLGVBQWU7Z0dBQWYsZUFBZSxtVENyQjVCLDBpQkFxQkE7MkZEQWEsZUFBZTtrQkFOM0IsU0FBUzsrQkFDRSxhQUFhLG1CQUdOLHVCQUF1QixDQUFDLE1BQU07OzBCQU01QyxRQUFROzRDQUlYLE1BQU07c0JBREwsS0FBSztnQkFJTixRQUFRO3NCQURQLEtBQUs7Z0JBSU4sT0FBTztzQkFETixLQUFLO2dCQUlOLElBQUk7c0JBREgsS0FBSztnQkFJTixJQUFJO3NCQURILEtBQUs7Z0JBSU4sT0FBTztzQkFETixLQUFLO2dCQUlOLElBQUk7c0JBREgsS0FBSztnQkFJTixZQUFZO3NCQURYLEtBQUs7Z0JBSU4sT0FBTztzQkFETixLQUFLO2dCQUlGLE9BQU87c0JBRFYsV0FBVzt1QkFBQyxPQUFPOztBQThFdEIsV0FBaUIsZUFBZTtJQUNqQixxQkFBSyxHQUFHO1FBQ25CLFFBQVE7UUFDUixPQUFPO1FBQ1AsUUFBUTtRQUNSLE9BQU87UUFDUCxRQUFRO0tBQ0EsQ0FBQztJQUdFLHdCQUFRLEdBQUc7UUFDdEIsT0FBTztRQUNQLE9BQU87UUFDUCxTQUFTO1FBQ1QsUUFBUTtRQUNSLFNBQVM7UUFDVCxVQUFVO0tBQ0YsQ0FBQztJQUdFLDZCQUFhLEdBQUcsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsQ0FBVSxDQUFDO0FBRXJFLENBQUMsRUF0QmdCLGVBQWUsS0FBZixlQUFlLFFBc0IvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEhvc3RCaW5kaW5nLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPcHRpb25hbCxcbiAgUmVuZGVyZXIyLFxuICBTaW1wbGVDaGFuZ2VzLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEljb25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9pY29uL2ljb24uY29tcG9uZW50JztcbmltcG9ydCB7IExvYWRpbmdDb21wb25lbnQgfSBmcm9tICcuLi8uLi9sb2FkL2xvYWRpbmcvbG9hZGluZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQnV0dG9uR3JvdXBDb21wb25lbnQgfSBmcm9tICcuLi9idXR0b24tZ3JvdXAvYnV0dG9uLWdyb3VwLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ1tyaXZCdXR0b25dJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2J1dHRvbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2J1dHRvbi5jb21wb25lbnQuY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBCdXR0b25Db21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGVsOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHJlYWRvbmx5IGdyb3VwOiBCdXR0b25Hcm91cENvbXBvbmVudCxcbiAgKSB7fVxuXG4gIEBJbnB1dCgpXG4gIGxvY2tlZD86IGJvb2xlYW47XG5cbiAgQElucHV0KClcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuXG4gIEBJbnB1dCgpXG4gIGxvYWRpbmc/OiBib29sZWFuO1xuXG4gIEBJbnB1dCgpXG4gIGZ1bGw/OiBib29sZWFuO1xuXG4gIEBJbnB1dCgpXG4gIHNpemU6IEJ1dHRvbkNvbXBvbmVudC5TaXplID0gJ21lZGl1bSc7XG5cbiAgQElucHV0KClcbiAgdmFyaWFudDogQnV0dG9uQ29tcG9uZW50LlZhcmlhbnQgPSAnYmFzaWMnO1xuXG4gIEBJbnB1dCgpXG4gIGljb24/OiBJY29uQ29tcG9uZW50Lk5hbWU7XG5cbiAgQElucHV0KClcbiAgaWNvblBvc2l0aW9uOiBCdXR0b25Db21wb25lbnQuSWNvblBvc2l0aW9uID0gJ2ZpcnN0JztcblxuICBASW5wdXQoKVxuICBjdXJyZW50PzogYm9vbGVhbjtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzJylcbiAgZ2V0IGNsYXNzZXMoKSB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHtcbiAgICAgIGRpc2FibGVkOiB0aGlzLmRpc2FibGVkIHx8IHRoaXMubG9ja2VkLFxuICAgICAgZnVsbDogdGhpcy5mdWxsLFxuICAgICAgbG9hZGluZzogdGhpcy5sb2FkaW5nLFxuICAgICAgW3RoaXMudmFyaWFudF06IHRydWUsXG4gICAgICBbdGhpcy5zaXplXTogdHJ1ZSxcbiAgICAgIHN0YWNrZWQ6IHRoaXMuaWNvblBvc2l0aW9uID09PSAnc3RhY2tlZCcsXG4gICAgICBncm91cGVkOiAhIXRoaXMuZ3JvdXAsXG4gICAgICBmaXJzdDogISF0aGlzLmdyb3VwPy5pc0ZpcnN0KHRoaXMuZWwpLFxuICAgICAgbGFzdDogISF0aGlzLmdyb3VwPy5pc0xhc3QodGhpcy5lbCksXG4gICAgICBjdXJyZW50OiAhIXRoaXMuY3VycmVudCxcbiAgICB9KVxuICAgICAgLmZpbHRlcigoW18sIHZdKSA9PiB2KVxuICAgICAgLm1hcCgoW2tdKSA9PiBrKVxuICAgICAgLmpvaW4oJyAnKTtcbiAgfVxuXG4gIGdldExvYWRpbmdWYXJpYW50KCk6IExvYWRpbmdDb21wb25lbnQuVmFyaWFudCB7XG4gICAgc3dpdGNoICh0aGlzLnZhcmlhbnQpIHtcbiAgICAgIGNhc2UgJ2Jhc2ljJzpcbiAgICAgIGNhc2UgJ2NhdXRpb24nOlxuICAgICAgY2FzZSAnZ2hvc3QnOlxuICAgICAgY2FzZSAnc3RhdGVmdWwnOlxuICAgICAgICByZXR1cm4gJ2RhcmsnO1xuICAgICAgY2FzZSAnZGFuZ2VyJzpcbiAgICAgIGNhc2UgJ3ByaW1hcnknOlxuICAgICAgICByZXR1cm4gdGhpcy5kaXNhYmxlZCA/ICdkYXJrJyA6ICdsaWdodCc7XG4gICAgfVxuICB9XG5cbiAgZ2V0SWNvblNpemUoKTogSWNvbkNvbXBvbmVudC5TaXplIHtcbiAgICBzd2l0Y2ggKHRoaXMuc2l6ZSkge1xuICAgICAgY2FzZSAneHNtYWxsJzpcbiAgICAgIGNhc2UgJ3NtYWxsJzpcbiAgICAgICAgcmV0dXJuIDE2O1xuICAgICAgY2FzZSAnbWVkaXVtJzpcbiAgICAgICAgcmV0dXJuIDIwO1xuICAgICAgY2FzZSAnbGFyZ2UnOlxuICAgICAgY2FzZSAneGxhcmdlJzpcbiAgICAgICAgcmV0dXJuIDI0O1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZGlzYWJsZU5hdGl2ZUVsZW1lbnQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBsb2NrTmF0aXZlRWxlbWVudDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBjb25zdCBhY2Nlc3NDaGFuZ2U6IGJvb2xlYW4gPSAhIWNoYW5nZXNbJ2Rpc2FibGVkJ10gfHwgISFjaGFuZ2VzWydsb2NrZWQnXTtcbiAgICBpZiAoYWNjZXNzQ2hhbmdlKSB7XG4gICAgICBpZiAoY2hhbmdlc1snZGlzYWJsZWQnXSkge1xuICAgICAgICB0aGlzLmRpc2FibGVOYXRpdmVFbGVtZW50ID0gY2hhbmdlc1snZGlzYWJsZWQnXS5jdXJyZW50VmFsdWU7XG4gICAgICB9XG4gICAgICBpZiAoY2hhbmdlc1snbG9ja2VkJ10pIHtcbiAgICAgICAgdGhpcy5sb2NrTmF0aXZlRWxlbWVudCA9IGNoYW5nZXNbJ2xvY2tlZCddLmN1cnJlbnRWYWx1ZTtcbiAgICAgIH1cbiAgICAgIGlmICgnZGlzYWJsZWQnIGluIHRoaXMuZWwubmF0aXZlRWxlbWVudCkge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlTmF0aXZlRWxlbWVudCB8fCB0aGlzLmxvY2tOYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCAnZGlzYWJsZWQnLCAndHJ1ZScpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQXR0cmlidXRlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwgJ2Rpc2FibGVkJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50T3JWYXJpYW50Q2hhbmdlOiBib29sZWFuID1cbiAgICAgICEhY2hhbmdlc1snY3VycmVudCddIHx8ICEhY2hhbmdlc1sndmFyaWFudCddO1xuICAgIGlmIChjdXJyZW50T3JWYXJpYW50Q2hhbmdlKSB7XG4gICAgICBpZiAodGhpcy5jdXJyZW50ICE9PSB1bmRlZmluZWQgJiYgdGhpcy52YXJpYW50ICE9PSAnc3RhdGVmdWwnKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBgQnV0dG9uQ29tcG9uZW50OiBUaGUgJ2N1cnJlbnQnIGlucHV0IGlzIG9ubHkgdmFsaWQgd2hlbiB2YXJpYW50IGlzICdzdGF0ZWZ1bCcuIFZhcmlhbnQ6ICcke3RoaXMudmFyaWFudH0nYCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBCdXR0b25Db21wb25lbnQge1xuICBleHBvcnQgY29uc3QgU2l6ZXMgPSBbXG4gICAgJ3hzbWFsbCcsXG4gICAgJ3NtYWxsJyxcbiAgICAnbWVkaXVtJyxcbiAgICAnbGFyZ2UnLFxuICAgICd4bGFyZ2UnLFxuICBdIGFzIGNvbnN0O1xuICBleHBvcnQgdHlwZSBTaXplID0gKHR5cGVvZiBTaXplcylbbnVtYmVyXTtcblxuICBleHBvcnQgY29uc3QgVmFyaWFudHMgPSBbXG4gICAgJ2Jhc2ljJyxcbiAgICAnZ2hvc3QnLFxuICAgICdwcmltYXJ5JyxcbiAgICAnZGFuZ2VyJyxcbiAgICAnY2F1dGlvbicsXG4gICAgJ3N0YXRlZnVsJyxcbiAgXSBhcyBjb25zdDtcbiAgZXhwb3J0IHR5cGUgVmFyaWFudCA9ICh0eXBlb2YgVmFyaWFudHMpW251bWJlcl07XG5cbiAgZXhwb3J0IGNvbnN0IEljb25Qb3NpdGlvbnMgPSBbJ2ZpcnN0JywgJ2xhc3QnLCAnc3RhY2tlZCddIGFzIGNvbnN0O1xuICBleHBvcnQgdHlwZSBJY29uUG9zaXRpb24gPSAodHlwZW9mIEljb25Qb3NpdGlvbnMpW251bWJlcl07XG59XG4iLCI8cml2LWljb25cbiAgKm5nSWY9XCJpY29uICYmIChpY29uUG9zaXRpb24gPT09ICdmaXJzdCcgfHwgaWNvblBvc2l0aW9uID09PSAnc3RhY2tlZCcpXCJcbiAgW25hbWVdPVwibG9ja2VkID8gJ0xvY2snIDogaWNvblwiXG4gIFtzaXplXT1cImdldEljb25TaXplKClcIlxuPjwvcml2LWljb24+XG48c3Bhbj48bmctY29udGVudD48L25nLWNvbnRlbnQ+PC9zcGFuPlxuPHJpdi1pY29uXG4gICpuZ0lmPVwibG9ja2VkICYmICFpY29uXCJcbiAgW25hbWVdPVwiJ0xvY2snXCJcbiAgW3NpemVdPVwiZ2V0SWNvblNpemUoKVwiXG4+PC9yaXYtaWNvbj5cbjxyaXYtaWNvblxuICAqbmdJZj1cImljb24gJiYgaWNvblBvc2l0aW9uID09PSAnbGFzdCdcIlxuICBbbmFtZV09XCJsb2NrZWQgPyAnTG9jaycgOiBpY29uXCJcbiAgW3NpemVdPVwiZ2V0SWNvblNpemUoKVwiXG4+PC9yaXYtaWNvbj5cbjxyaXYtbG9hZGluZ1xuICAqbmdJZj1cImxvYWRpbmdcIlxuICBbc2l6ZV09XCIxNlwiXG4gIFt2YXJpYW50XT1cImdldExvYWRpbmdWYXJpYW50KClcIlxuPjwvcml2LWxvYWRpbmc+XG4iXX0=
|
|
133
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnV0dG9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Jpdi9zcmMvbGliL2lucHV0L2J1dHRvbi9idXR0b24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvaW5wdXQvYnV0dG9uL2J1dHRvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFFVCxXQUFXLEVBQ1gsS0FBSyxFQUVMLFFBQVEsR0FHVCxNQUFNLGVBQWUsQ0FBQzs7Ozs7O0FBV3ZCLE1BQU0sT0FBTyxlQUFlO0lBQzFCLFlBQ21CLEVBQWMsRUFDZCxRQUFtQixFQUNQLEtBQTJCO1FBRnZDLE9BQUUsR0FBRixFQUFFLENBQVk7UUFDZCxhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQ1AsVUFBSyxHQUFMLEtBQUssQ0FBc0I7UUFnQjFELFNBQUksR0FBeUIsUUFBUSxDQUFDO1FBR3RDLFlBQU8sR0FBNEIsT0FBTyxDQUFDO1FBTTNDLGlCQUFZLEdBQWlDLE9BQU8sQ0FBQztRQWtEN0MseUJBQW9CLEdBQVksS0FBSyxDQUFDO1FBQ3RDLHNCQUFpQixHQUFZLEtBQUssQ0FBQztJQTNFeEMsQ0FBQztJQTZCSixJQUNJLE9BQU87UUFDVCxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUM7WUFDcEIsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU07WUFDdEMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2YsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ3JCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLElBQUk7WUFDcEIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSTtZQUNqQixPQUFPLEVBQUUsSUFBSSxDQUFDLFlBQVksS0FBSyxTQUFT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QzthQUNIO1NBQ0Y7SUFDSCxDQUFDOzs0R0E5R1UsZUFBZTtnR0FBZixlQUFlLG1UQ3JCNUIsMGlCQXFCQTsyRkRBYSxlQUFlO2tCQU4zQixTQUFTOytCQUNFLGFBQWEsbUJBR04sdUJBQXVCLENBQUMsTUFBTTs7MEJBTTVDLFFBQVE7NENBSVgsTUFBTTtzQkFETCxLQUFLO2dCQUlOLFFBQVE7c0JBRFAsS0FBSztnQkFJTixPQUFPO3NCQUROLEtBQUs7Z0JBSU4sSUFBSTtzQkFESCxLQUFLO2dCQUlOLElBQUk7c0JBREgsS0FBSztnQkFJTixPQUFPO3NCQUROLEtBQUs7Z0JBSU4sSUFBSTtzQkFESCxLQUFLO2dCQUlOLFlBQVk7c0JBRFgsS0FBSztnQkFJTixPQUFPO3NCQUROLEtBQUs7Z0JBSUYsT0FBTztzQkFEVixXQUFXO3VCQUFDLE9BQU87O0FBK0V0QixXQUFpQixlQUFlO0lBQ2pCLHFCQUFLLEdBQUc7UUFDbkIsUUFBUTtRQUNSLE9BQU87UUFDUCxRQUFRO1FBQ1IsT0FBTztRQUNQLFFBQVE7S0FDQSxDQUFDO0lBR0Usd0JBQVEsR0FBRztRQUN0QixPQUFPO1FBQ1AsT0FBTztRQUNQLFNBQVM7UUFDVCxRQUFRO1FBQ1IsU0FBUztRQUNULFVBQVU7S0FDRixDQUFDO0lBR0UsNkJBQWEsR0FBRyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxDQUFVLENBQUM7QUFFckUsQ0FBQyxFQXRCZ0IsZUFBZSxLQUFmLGVBQWUsUUFzQi9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgSG9zdEJpbmRpbmcsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9wdGlvbmFsLFxuICBSZW5kZXJlcjIsXG4gIFNpbXBsZUNoYW5nZXMsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSWNvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2ljb24vaWNvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgTG9hZGluZ0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL2xvYWQvbG9hZGluZy9sb2FkaW5nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCdXR0b25Hcm91cENvbXBvbmVudCB9IGZyb20gJy4uL2J1dHRvbi1ncm91cC9idXR0b24tZ3JvdXAuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnW3JpdkJ1dHRvbl0nLFxuICB0ZW1wbGF0ZVVybDogJy4vYnV0dG9uLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYnV0dG9uLmNvbXBvbmVudC5jc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIEJ1dHRvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZWw6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSByZWFkb25seSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgcmVhZG9ubHkgZ3JvdXA6IEJ1dHRvbkdyb3VwQ29tcG9uZW50LFxuICApIHt9XG5cbiAgQElucHV0KClcbiAgbG9ja2VkPzogYm9vbGVhbjtcblxuICBASW5wdXQoKVxuICBkaXNhYmxlZD86IGJvb2xlYW47XG5cbiAgQElucHV0KClcbiAgbG9hZGluZz86IGJvb2xlYW47XG5cbiAgQElucHV0KClcbiAgZnVsbD86IGJvb2xlYW47XG5cbiAgQElucHV0KClcbiAgc2l6ZTogQnV0dG9uQ29tcG9uZW50LlNpemUgPSAnbWVkaXVtJztcblxuICBASW5wdXQoKVxuICB2YXJpYW50OiBCdXR0b25Db21wb25lbnQuVmFyaWFudCA9ICdiYXNpYyc7XG5cbiAgQElucHV0KClcbiAgaWNvbj86IEljb25Db21wb25lbnQuTmFtZTtcblxuICBASW5wdXQoKVxuICBpY29uUG9zaXRpb246IEJ1dHRvbkNvbXBvbmVudC5JY29uUG9zaXRpb24gPSAnZmlyc3QnO1xuXG4gIEBJbnB1dCgpXG4gIGN1cnJlbnQ/OiBib29sZWFuO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MnKVxuICBnZXQgY2xhc3NlcygpIHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoe1xuICAgICAgZGlzYWJsZWQ6IHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5sb2NrZWQsXG4gICAgICBmdWxsOiB0aGlzLmZ1bGwsXG4gICAgICBsb2FkaW5nOiB0aGlzLmxvYWRpbmcsXG4gICAgICBbdGhpcy52YXJpYW50XTogdHJ1ZSxcbiAgICAgIFt0aGlzLnNpemVdOiB0cnVlLFxuICAgICAgc3RhY2tlZDogdGhpcy5pY29uUG9zaXRpb24gPT09ICdzdGFja2VkJyxcbiAgICAgIGdyb3VwZWQ6ICEhdGhpcy5ncm91cCxcbiAgICAgIGZpcnN0OiAhIXRoaXMuZ3JvdXA/LmlzRmlyc3QodGhpcy5lbCksXG4gICAgICBsYXN0OiAhIXRoaXMuZ3JvdXA/LmlzTGFzdCh0aGlzLmVsKSxcbiAgICAgIGN1cnJlbnQ6ICEhdGhpcy5jdXJyZW50LFxuICAgIH0pXG4gICAgICAuZmlsdGVyKChbXywgdl0pID0+IHYpXG4gICAgICAubWFwKChba10pID0+IGspXG4gICAgICAuam9pbignICcpO1xuICB9XG5cbiAgZ2V0TG9hZGluZ1ZhcmlhbnQoKTogTG9hZGluZ0NvbXBvbmVudC5WYXJpYW50IHtcbiAgICBzd2l0Y2ggKHRoaXMudmFyaWFudCkge1xuICAgICAgY2FzZSAnYmFzaWMnOlxuICAgICAgY2FzZSAnY2F1dGlvbic6XG4gICAgICBjYXNlICdnaG9zdCc6XG4gICAgICBjYXNlICdzdGF0ZWZ1bCc6XG4gICAgICAgIHJldHVybiAnZGFyayc7XG4gICAgICBjYXNlICdkYW5nZXInOlxuICAgICAgY2FzZSAncHJpbWFyeSc6XG4gICAgICAgIHJldHVybiB0aGlzLmRpc2FibGVkID8gJ2RhcmsnIDogJ2xpZ2h0JztcbiAgICB9XG4gIH1cblxuICBnZXRJY29uU2l6ZSgpOiBJY29uQ29tcG9uZW50LlNpemUge1xuICAgIHN3aXRjaCAodGhpcy5zaXplKSB7XG4gICAgICBjYXNlICd4c21hbGwnOlxuICAgICAgY2FzZSAnc21hbGwnOlxuICAgICAgICByZXR1cm4gMTY7XG4gICAgICBjYXNlICdtZWRpdW0nOlxuICAgICAgICByZXR1cm4gMjA7XG4gICAgICBjYXNlICdsYXJnZSc6XG4gICAgICBjYXNlICd4bGFyZ2UnOlxuICAgICAgICByZXR1cm4gMjQ7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBkaXNhYmxlTmF0aXZlRWxlbWVudDogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIGxvY2tOYXRpdmVFbGVtZW50OiBib29sZWFuID0gZmFsc2U7XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGNvbnN0IGFjY2Vzc0NoYW5nZTogYm9vbGVhbiA9ICEhY2hhbmdlc1snZGlzYWJsZWQnXSB8fCAhIWNoYW5nZXNbJ2xvY2tlZCddO1xuICAgIGlmIChhY2Nlc3NDaGFuZ2UpIHtcbiAgICAgIGlmIChjaGFuZ2VzWydkaXNhYmxlZCddKSB7XG4gICAgICAgIHRoaXMuZGlzYWJsZU5hdGl2ZUVsZW1lbnQgPSBjaGFuZ2VzWydkaXNhYmxlZCddLmN1cnJlbnRWYWx1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChjaGFuZ2VzWydsb2NrZWQnXSkge1xuICAgICAgICB0aGlzLmxvY2tOYXRpdmVFbGVtZW50ID0gY2hhbmdlc1snbG9ja2VkJ10uY3VycmVudFZhbHVlO1xuICAgICAgfVxuICAgICAgaWYgKCdkaXNhYmxlZCcgaW4gdGhpcy5lbC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVOYXRpdmVFbGVtZW50IHx8IHRoaXMubG9ja05hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsICdkaXNhYmxlZCcsICd0cnVlJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVBdHRyaWJ1dGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCAnZGlzYWJsZWQnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGN1cnJlbnRPclZhcmlhbnRDaGFuZ2U6IGJvb2xlYW4gPVxuICAgICAgISFjaGFuZ2VzWydjdXJyZW50J10gfHwgISFjaGFuZ2VzWyd2YXJpYW50J107XG4gICAgaWYgKGN1cnJlbnRPclZhcmlhbnRDaGFuZ2UpIHtcbiAgICAgIGlmICh0aGlzLmN1cnJlbnQgIT09IHVuZGVmaW5lZCAmJiB0aGlzLnZhcmlhbnQgIT09ICdzdGF0ZWZ1bCcpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgIGBCdXR0b25Db21wb25lbnQ6IFRoZSAnY3VycmVudCcgaW5wdXQgaXMgb25seSB2YWxpZCB3aGVuIHZhcmlhbnQgaXMgJ3N0YXRlZnVsJy4gVmFyaWFudDogJyR7dGhpcy52YXJpYW50fSdgLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgbmFtZXNwYWNlIEJ1dHRvbkNvbXBvbmVudCB7XG4gIGV4cG9ydCBjb25zdCBTaXplcyA9IFtcbiAgICAneHNtYWxsJyxcbiAgICAnc21hbGwnLFxuICAgICdtZWRpdW0nLFxuICAgICdsYXJnZScsXG4gICAgJ3hsYXJnZScsXG4gIF0gYXMgY29uc3Q7XG4gIGV4cG9ydCB0eXBlIFNpemUgPSAodHlwZW9mIFNpemVzKVtudW1iZXJdO1xuXG4gIGV4cG9ydCBjb25zdCBWYXJpYW50cyA9IFtcbiAgICAnYmFzaWMnLFxuICAgICdnaG9zdCcsXG4gICAgJ3ByaW1hcnknLFxuICAgICdkYW5nZXInLFxuICAgICdjYXV0aW9uJyxcbiAgICAnc3RhdGVmdWwnLFxuICBdIGFzIGNvbnN0O1xuICBleHBvcnQgdHlwZSBWYXJpYW50ID0gKHR5cGVvZiBWYXJpYW50cylbbnVtYmVyXTtcblxuICBleHBvcnQgY29uc3QgSWNvblBvc2l0aW9ucyA9IFsnZmlyc3QnLCAnbGFzdCcsICdzdGFja2VkJ10gYXMgY29uc3Q7XG4gIGV4cG9ydCB0eXBlIEljb25Qb3NpdGlvbiA9ICh0eXBlb2YgSWNvblBvc2l0aW9ucylbbnVtYmVyXTtcbn1cbiIsIjxyaXYtaWNvblxuICAqbmdJZj1cImljb24gJiYgKGljb25Qb3NpdGlvbiA9PT0gJ2ZpcnN0JyB8fCBpY29uUG9zaXRpb24gPT09ICdzdGFja2VkJylcIlxuICBbbmFtZV09XCJsb2NrZWQgPyAnTG9jaycgOiBpY29uXCJcbiAgW3NpemVdPVwiZ2V0SWNvblNpemUoKVwiXG4+PC9yaXYtaWNvbj5cbjxzcGFuPjxuZy1jb250ZW50PjwvbmctY29udGVudD48L3NwYW4+XG48cml2LWljb25cbiAgKm5nSWY9XCJsb2NrZWQgJiYgIWljb25cIlxuICBbbmFtZV09XCInTG9jaydcIlxuICBbc2l6ZV09XCJnZXRJY29uU2l6ZSgpXCJcbj48L3Jpdi1pY29uPlxuPHJpdi1pY29uXG4gICpuZ0lmPVwiaWNvbiAmJiBpY29uUG9zaXRpb24gPT09ICdsYXN0J1wiXG4gIFtuYW1lXT1cImxvY2tlZCA/ICdMb2NrJyA6IGljb25cIlxuICBbc2l6ZV09XCJnZXRJY29uU2l6ZSgpXCJcbj48L3Jpdi1pY29uPlxuPHJpdi1sb2FkaW5nXG4gICpuZ0lmPVwibG9hZGluZ1wiXG4gIFtzaXplXT1cIjE2XCJcbiAgW3ZhcmlhbnRdPVwiZ2V0TG9hZGluZ1ZhcmlhbnQoKVwiXG4+PC9yaXYtbG9hZGluZz5cbiJdfQ==
|
|
@@ -122,6 +122,101 @@ export class MentionsInputComponent {
|
|
|
122
122
|
break;
|
|
123
123
|
}
|
|
124
124
|
}
|
|
125
|
+
onPaste(event) {
|
|
126
|
+
event.preventDefault();
|
|
127
|
+
if (!event.clipboardData) {
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
//Look for HTML first
|
|
131
|
+
const html = event.clipboardData.getData('text/html');
|
|
132
|
+
const plainText = event.clipboardData.getData('text/plain');
|
|
133
|
+
if (html) {
|
|
134
|
+
const sanitizedNodes = this.parsePastedHtml(html);
|
|
135
|
+
this.insertNodesAtCursor(sanitizedNodes);
|
|
136
|
+
}
|
|
137
|
+
else if (plainText) {
|
|
138
|
+
// Insert plain text
|
|
139
|
+
this.insertTextAtCursor(plainText);
|
|
140
|
+
}
|
|
141
|
+
this.emitContentChange();
|
|
142
|
+
}
|
|
143
|
+
parsePastedHtml(html) {
|
|
144
|
+
// Create a temporary container to parse the HTML
|
|
145
|
+
const tempContainer = document.createElement('div');
|
|
146
|
+
tempContainer.innerHTML = html;
|
|
147
|
+
const nodes = [];
|
|
148
|
+
const walkNodes = (node) => {
|
|
149
|
+
if (node.nodeType === Node.ELEMENT_NODE) {
|
|
150
|
+
const element = node;
|
|
151
|
+
// DAHNE NOTE - we only want mention spans and text for now
|
|
152
|
+
if (element.tagName === 'SPAN' &&
|
|
153
|
+
element.getAttribute('data-type') === 'mention' &&
|
|
154
|
+
element.hasAttribute('data-id')) {
|
|
155
|
+
//Create mention to ultimately insert into the DOM
|
|
156
|
+
const mentionSpan = document.createElement('span');
|
|
157
|
+
mentionSpan.className = this.readonly
|
|
158
|
+
? 'readonly-mention'
|
|
159
|
+
: 'mention';
|
|
160
|
+
mentionSpan.setAttribute('data-id', element.getAttribute('data-id'));
|
|
161
|
+
mentionSpan.setAttribute('data-type', 'mention');
|
|
162
|
+
mentionSpan.setAttribute('contenteditable', 'false');
|
|
163
|
+
mentionSpan.textContent = element.textContent;
|
|
164
|
+
nodes.push(mentionSpan);
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
//Recursively look for nested children
|
|
168
|
+
for (const child of Array.from(element.childNodes)) {
|
|
169
|
+
walkNodes(child);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
else if (node.nodeType === Node.TEXT_NODE) {
|
|
174
|
+
const text = node.textContent || '';
|
|
175
|
+
if (text) {
|
|
176
|
+
nodes.push(document.createTextNode(text));
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
};
|
|
180
|
+
for (const child of Array.from(tempContainer.childNodes)) {
|
|
181
|
+
walkNodes(child);
|
|
182
|
+
}
|
|
183
|
+
//DAHNE NOTE - the result here should be an array of text/span-mention nodes
|
|
184
|
+
return nodes;
|
|
185
|
+
}
|
|
186
|
+
insertNodesAtCursor(nodes) {
|
|
187
|
+
//Get selection object, representing user cursor position/selection
|
|
188
|
+
//Get Range object at start of selection, which should represent cursor position
|
|
189
|
+
//If there is a selection, delete it
|
|
190
|
+
//Insert the parsed nodes from above, move range ends to after node
|
|
191
|
+
//Then remove the range and reset it to move the cursor position to the end
|
|
192
|
+
const selection = window.getSelection();
|
|
193
|
+
if (!selection || !selection.rangeCount) {
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
196
|
+
const range = selection.getRangeAt(0);
|
|
197
|
+
range.deleteContents();
|
|
198
|
+
for (const node of nodes) {
|
|
199
|
+
range.insertNode(node);
|
|
200
|
+
range.setStartAfter(node);
|
|
201
|
+
range.setEndAfter(node);
|
|
202
|
+
}
|
|
203
|
+
selection.removeAllRanges();
|
|
204
|
+
selection.addRange(range);
|
|
205
|
+
}
|
|
206
|
+
insertTextAtCursor(text) {
|
|
207
|
+
const selection = window.getSelection();
|
|
208
|
+
if (!selection || !selection.rangeCount) {
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
211
|
+
const range = selection.getRangeAt(0);
|
|
212
|
+
range.deleteContents();
|
|
213
|
+
const textNode = document.createTextNode(text);
|
|
214
|
+
range.insertNode(textNode);
|
|
215
|
+
range.setStartAfter(textNode);
|
|
216
|
+
range.setEndAfter(textNode);
|
|
217
|
+
selection.removeAllRanges();
|
|
218
|
+
selection.addRange(range);
|
|
219
|
+
}
|
|
125
220
|
checkForMentionTrigger() {
|
|
126
221
|
const selection = window.getSelection();
|
|
127
222
|
if (!selection || !selection.rangeCount || !this.inputElement) {
|
|
@@ -333,10 +428,10 @@ export class MentionsInputComponent {
|
|
|
333
428
|
}
|
|
334
429
|
}
|
|
335
430
|
MentionsInputComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: MentionsInputComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
336
|
-
MentionsInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: MentionsInputComponent, selector: "riv-mentions-input", inputs: { content: "content", users: "users", readonly: "readonly", placeholder: "placeholder" }, outputs: { contentChange: "contentChange" }, viewQueries: [{ propertyName: "inputElement", first: true, predicate: ["input"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"mentions-container\" #container>\n <div\n *ngIf=\"!readonly\"\n #input\n class=\"text-content editable\"\n contenteditable=\"true\"\n [attr.data-placeholder]=\"placeholder\"\n (input)=\"onInput()\"\n (keydown)=\"onKeyDown($event)\"\n ></div>\n\n <div *ngIf=\"readonly\" #input class=\"text-content\"></div>\n\n <riv-callout\n *ngIf=\"!readonly && mentionsVisible && mentionAnchor\"\n [anchor]=\"mentionAnchor\"\n [isModal]=\"false\"\n [showCaret]=\"false\"\n [preferredPosition]=\"'bottom-right'\"\n [theme]=\"'light'\"\n (close)=\"onCalloutClose()\"\n >\n <div class=\"mentions-content\">\n <div class=\"mentions-header\">Mention someone</div>\n <
|
|
431
|
+
MentionsInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: MentionsInputComponent, selector: "riv-mentions-input", inputs: { content: "content", users: "users", readonly: "readonly", placeholder: "placeholder" }, outputs: { contentChange: "contentChange" }, viewQueries: [{ propertyName: "inputElement", first: true, predicate: ["input"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"mentions-container\" #container>\n <div\n *ngIf=\"!readonly\"\n #input\n class=\"text-content editable\"\n contenteditable=\"true\"\n [attr.data-placeholder]=\"placeholder\"\n (input)=\"onInput()\"\n (keydown)=\"onKeyDown($event)\"\n (paste)=\"onPaste($event)\"\n ></div>\n\n <div *ngIf=\"readonly\" #input class=\"text-content\"></div>\n\n <riv-callout\n *ngIf=\"!readonly && mentionsVisible && mentionAnchor\"\n [anchor]=\"mentionAnchor\"\n [isModal]=\"false\"\n [showCaret]=\"false\"\n [preferredPosition]=\"'bottom-right'\"\n [theme]=\"'light'\"\n (close)=\"onCalloutClose()\"\n >\n <div class=\"mentions-content\">\n <div class=\"mentions-header\">Mention someone</div>\n <div class=\"mentions-list\">\n <button\n *ngFor=\"let user of getFilteredUsers(); let i = index\"\n [class.selected]=\"i === selectedUserIndex\"\n (click)=\"selectUser(user)\"\n >\n {{ user.name }}\n </button>\n </div>\n </div>\n </riv-callout>\n</div>\n", styles: [".mentions-container{position:relative;width:100%}.mentions-input{width:100%;border:var(--border-width) solid var(--border-light);border-radius:var(--border-radius-small);color:var(--type-light-high-contrast);overflow-y:auto;white-space:pre-wrap;word-wrap:break-word}.mentions-input:empty:before{content:attr(data-placeholder);color:var(--type-light-disabled);pointer-events:none}.mentions-input:focus{outline:none;border:var(--border-width) solid var(--purp-60)}.mentions-input[contenteditable=false]{color:var(--type-light-disabled);background-color:var(--surface-light-1);cursor:not-allowed}span.mention{color:var(--type-light-link);font-weight:var(--font-weight-heavy)}span.readonly-mention{font-weight:var(--font-weight-heavy)}.mentions-input.warning{border-color:var(--surface-dark-caution)}.mentions-input.error{border-color:var(--surface-dark-danger);box-shadow:inset 0 0 0 var(--border-width-large) var(--surface-dark-danger)}.mentions-input.large{font:var(--input-large);padding:var(--size-medium)}.mentions-list{margin:0;padding:0;max-height:calc(var(--base-grid-size) * 50);overflow-y:auto;display:flex;flex-direction:column;gap:var(--size-xxsmall)}.mentions-list button{padding:var(--size-small) var(--size-small);border-radius:var(--border-radius-medium);cursor:pointer;transition:background-color .2s;font:var(--input-medium);text-align:left}.mentions-list button:hover,.mentions-list button.selected{background-color:var(--surface-light-2)}.mentions-content{max-height:50vh;min-width:calc(var(--base-grid-size) * 62);max-width:50vw;padding:var(--size-large);display:flex;flex-direction:column}.mentions-header{padding:var(--size-small) var(--size-small);font:var(--input-medium);color:var(--type-light-low-contrast)}.text-content{width:100%;min-height:9em;border-radius:var(--border-radius-small);font:var(--input-medium);color:var(--type-light-high-contrast);padding:var(--size-large);resize:vertical}.editable{border:var(--border-width) solid var(--border-light);background-color:var(--surface-light-0)}.text-content::placeholder{color:var(--type-light-disabled)}.text-content.editable[data-placeholder]:empty:before{content:attr(data-placeholder);color:var(--type-light-disabled)}.text-content:disabled{color:var(--type-light-disabled);background-color:var(--surface-light-1)}.text-content:focus{outline:none;border:var(--border-width) solid var(--purp-60)}.text-content.warning{border-color:var(--surface-dark-caution)}.text-content.error{border-color:var(--surface-dark-danger);box-shadow:inset 0 0 0 var(--border-width-large) var(--surface-dark-danger)}.text-content.large{font:var(--input-large);padding:var(--size-medium)}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.CalloutComponent, selector: "riv-callout", inputs: ["anchor", "isModal", "preferredPosition", "allowedPositions", "fallbackDirection", "showCaret", "theme"], outputs: ["close"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
337
432
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: MentionsInputComponent, decorators: [{
|
|
338
433
|
type: Component,
|
|
339
|
-
args: [{ selector: 'riv-mentions-input', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"mentions-container\" #container>\n <div\n *ngIf=\"!readonly\"\n #input\n class=\"text-content editable\"\n contenteditable=\"true\"\n [attr.data-placeholder]=\"placeholder\"\n (input)=\"onInput()\"\n (keydown)=\"onKeyDown($event)\"\n ></div>\n\n <div *ngIf=\"readonly\" #input class=\"text-content\"></div>\n\n <riv-callout\n *ngIf=\"!readonly && mentionsVisible && mentionAnchor\"\n [anchor]=\"mentionAnchor\"\n [isModal]=\"false\"\n [showCaret]=\"false\"\n [preferredPosition]=\"'bottom-right'\"\n [theme]=\"'light'\"\n (close)=\"onCalloutClose()\"\n >\n <div class=\"mentions-content\">\n <div class=\"mentions-header\">Mention someone</div>\n <
|
|
434
|
+
args: [{ selector: 'riv-mentions-input', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"mentions-container\" #container>\n <div\n *ngIf=\"!readonly\"\n #input\n class=\"text-content editable\"\n contenteditable=\"true\"\n [attr.data-placeholder]=\"placeholder\"\n (input)=\"onInput()\"\n (keydown)=\"onKeyDown($event)\"\n (paste)=\"onPaste($event)\"\n ></div>\n\n <div *ngIf=\"readonly\" #input class=\"text-content\"></div>\n\n <riv-callout\n *ngIf=\"!readonly && mentionsVisible && mentionAnchor\"\n [anchor]=\"mentionAnchor\"\n [isModal]=\"false\"\n [showCaret]=\"false\"\n [preferredPosition]=\"'bottom-right'\"\n [theme]=\"'light'\"\n (close)=\"onCalloutClose()\"\n >\n <div class=\"mentions-content\">\n <div class=\"mentions-header\">Mention someone</div>\n <div class=\"mentions-list\">\n <button\n *ngFor=\"let user of getFilteredUsers(); let i = index\"\n [class.selected]=\"i === selectedUserIndex\"\n (click)=\"selectUser(user)\"\n >\n {{ user.name }}\n </button>\n </div>\n </div>\n </riv-callout>\n</div>\n", styles: [".mentions-container{position:relative;width:100%}.mentions-input{width:100%;border:var(--border-width) solid var(--border-light);border-radius:var(--border-radius-small);color:var(--type-light-high-contrast);overflow-y:auto;white-space:pre-wrap;word-wrap:break-word}.mentions-input:empty:before{content:attr(data-placeholder);color:var(--type-light-disabled);pointer-events:none}.mentions-input:focus{outline:none;border:var(--border-width) solid var(--purp-60)}.mentions-input[contenteditable=false]{color:var(--type-light-disabled);background-color:var(--surface-light-1);cursor:not-allowed}span.mention{color:var(--type-light-link);font-weight:var(--font-weight-heavy)}span.readonly-mention{font-weight:var(--font-weight-heavy)}.mentions-input.warning{border-color:var(--surface-dark-caution)}.mentions-input.error{border-color:var(--surface-dark-danger);box-shadow:inset 0 0 0 var(--border-width-large) var(--surface-dark-danger)}.mentions-input.large{font:var(--input-large);padding:var(--size-medium)}.mentions-list{margin:0;padding:0;max-height:calc(var(--base-grid-size) * 50);overflow-y:auto;display:flex;flex-direction:column;gap:var(--size-xxsmall)}.mentions-list button{padding:var(--size-small) var(--size-small);border-radius:var(--border-radius-medium);cursor:pointer;transition:background-color .2s;font:var(--input-medium);text-align:left}.mentions-list button:hover,.mentions-list button.selected{background-color:var(--surface-light-2)}.mentions-content{max-height:50vh;min-width:calc(var(--base-grid-size) * 62);max-width:50vw;padding:var(--size-large);display:flex;flex-direction:column}.mentions-header{padding:var(--size-small) var(--size-small);font:var(--input-medium);color:var(--type-light-low-contrast)}.text-content{width:100%;min-height:9em;border-radius:var(--border-radius-small);font:var(--input-medium);color:var(--type-light-high-contrast);padding:var(--size-large);resize:vertical}.editable{border:var(--border-width) solid var(--border-light);background-color:var(--surface-light-0)}.text-content::placeholder{color:var(--type-light-disabled)}.text-content.editable[data-placeholder]:empty:before{content:attr(data-placeholder);color:var(--type-light-disabled)}.text-content:disabled{color:var(--type-light-disabled);background-color:var(--surface-light-1)}.text-content:focus{outline:none;border:var(--border-width) solid var(--purp-60)}.text-content.warning{border-color:var(--surface-dark-caution)}.text-content.error{border-color:var(--surface-dark-danger);box-shadow:inset 0 0 0 var(--border-width-large) var(--surface-dark-danger)}.text-content.large{font:var(--input-large);padding:var(--size-medium)}\n"] }]
|
|
340
435
|
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { content: [{
|
|
341
436
|
type: Input
|
|
342
437
|
}], users: [{
|
|
@@ -367,4 +462,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
367
462
|
}
|
|
368
463
|
MentionsInputComponent.contentToPlainText = contentToPlainText;
|
|
369
464
|
})(MentionsInputComponent || (MentionsInputComponent = {}));
|
|
370
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudGlvbnMtaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvaW5wdXQvbWVudGlvbnMtaW5wdXQvbWVudGlvbnMtaW5wdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvaW5wdXQvbWVudGlvbnMtaW5wdXQvbWVudGlvbnMtaW5wdXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLHVCQUF1QixFQUV2QixTQUFTLEVBRVQsWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBRU4sU0FBUyxFQUNULGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQzs7OztBQUV2Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUNHO0FBUUgsTUFBTSxPQUFPLHNCQUFzQjtJQUNqQyxZQUE2QixHQUFzQjtRQUF0QixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUUxQyxZQUFPLEdBQXlDLEVBQUUsQ0FBQztRQUNuRCxVQUFLLEdBQWtDLEVBQUUsQ0FBQztRQUMxQyxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLGdCQUFXLEdBQVcsZUFBZSxDQUFDO1FBRTVCLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBRWhELENBQUM7UUFLSixvQkFBZSxHQUFHLEtBQUssQ0FBQztRQUN4QixzQkFBaUIsR0FBRyxFQUFFLENBQUM7UUFDdkIsa0JBQWEsR0FBbUIsSUFBSSxDQUFDO1FBQ3JDLHNCQUFpQixHQUFHLENBQUMsQ0FBQztRQUNkLGVBQVUsR0FBaUIsSUFBSSxDQUFDO0lBbEJjLENBQUM7SUFvQnZELGVBQWU7UUFDYixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVELDZJQUE2STtJQUM3SSx3SUFBd0k7SUFDeEksV0FBVyxDQUFDLE9BQXNCO1FBQ2hD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QUtVLFlBQVk7c0JBRDVCLFNBQVM7dUJBQUMsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTs7QUFzWHZDLFdBQWlCLHNCQUFzQjtJQUN4QixtQ0FBWSxHQUFHLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBVSxDQUFDO0lBY3pELFNBQWdCLGtCQUFrQixDQUFDLE9BQXNCO1FBQ3ZELE9BQU8sT0FBTzthQUNYLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNWLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRTtnQkFDakIsS0FBSyxTQUFTO29CQUNaLE9BQU8sSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ3pCLEtBQUssTUFBTTtvQkFDVCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7YUFDcEI7UUFDSCxDQUFDLENBQUM7YUFDRCxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDZCxDQUFDO0lBWGUseUNBQWtCLHFCQVdqQyxDQUFBO0FBQ0gsQ0FBQyxFQTNCZ0Isc0JBQXNCLEtBQXRCLHNCQUFzQixRQTJCdEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vKipcbiAqIEEgcmljaCB0ZXh0IGlucHV0IGNvbXBvbmVudCB0aGF0IGFsbG93cyB1c2VycyB0byB0eXBlIHRleHQgYW5kIG1lbnRpb24gb3RoZXIgdXNlcnMgYnkgdHlwaW5nIGBAYCBmb2xsb3dlZCBieSBhIG5hbWUuXG4gKiBVc2VzIGEgYGNvbnRlbnRlZGl0YWJsZWAgZGl2IGluc3RlYWQgb2YgYSB0cmFkaXRpb25hbCBpbnB1dC90ZXh0YXJlYS5cbiAqXG4gKiAjIyBEYXRhIE1vZGVsXG4gKiBXb3JrcyB3aXRoIGEgc3RydWN0dXJlZCBjb250ZW50IG1vZGVsIHJhdGhlciB0aGFuIHBsYWluIHN0cmluZ3M6XG4gKiAtICoqSW5wdXQvT3V0cHV0Kio6IGBDb250ZW50SXRlbVtdYCAtIGFuIGFycmF5IG9mIGNvbnRlbnQgcGllY2VzXG4gKiAtICoqQ29udGVudEl0ZW0gdHlwZXMqKjpcbiAqICAgLSBgVXNlck1lbnRpb25gOiBgeyB0eXBlOiAnbWVudGlvbicsIGlkOiBudW1iZXIsIG5hbWU6IHN0cmluZyB9YFxuICogICAtIGBUZXh0YDogYHsgdHlwZTogJ3RleHQnLCB0ZXh0OiBzdHJpbmcgfWBcbiAqXG4gKiAjIyBSZW5kZXJpbmcgRmxvd1xuICogMS4gKipDb250ZW50IOKGkiBET00qKjogYHJlbmRlckNvbnRlbnQoKWAgY29udmVydHMgdGhlIGNvbnRlbnQgaW5wdXQgYXJyYXkgdG8gSFRNTC4gTWVudGlvbnMgYmVjb21lIGA8c3Bhbj5gIGVsZW1lbnRzIHdpdGggYGRhdGEtaWRgIGFuZCBgZGF0YS10eXBlYCBhdHRyaWJ1dGVzLiBUZXh0IGlzIGVzY2FwZWQgYW5kIHJlbmRlcmVkIGFzIHBsYWluIHRleHQuXG4gKiAyLiAqKkRPTSDihpIgQ29udGVudCoqOiBgZG9tVG9Db250ZW50SXRlbXMoKWAgcGFyc2VzIHRoZSBET00gYmFjayBpbnRvIGBDb250ZW50SXRlbVtdYCwgd2Fsa2luZyB0aHJvdWdoIGNoaWxkIG5vZGVzIGV4dHJhY3RpbmcgbWVudGlvbnMgYW5kIHRleHQuIEVtaXR0ZWQgdmlhIGBjb250ZW50Q2hhbmdlYCBldmVudCBvbiBpbnB1dC5cbiAqXG4gKiAjIyBVc2VyIEludGVyYWN0aW9uXG4gKiAtICoqVHlwaW5nIGBAYCB0cmlnZ2VycyBtZW50aW9ucyoqOiBNb25pdG9ycyBpbnB1dCBmb3IgYEBgIGNoYXJhY3RlciwgZXh0cmFjdHMgdGV4dCBhZnRlciBgQGAgKHVwIHRvIGZpcnN0IHNwYWNlKSBhcyBzZWFyY2ggdGV4dCwgcG9zaXRpb25zIGEgY2FsbG91dCBkcm9wZG93biBhdCB0aGUgY3Vyc29yIGxvY2F0aW9uXG4gKiAtICoqS2V5Ym9hcmQgbmF2aWdhdGlvbioqOiBBcnJvdyBrZXlzIG5hdmlnYXRlIGZpbHRlcmVkIHVzZXJzIGxpc3QsIEVudGVyIHNlbGVjdHMgaGlnaGxpZ2h0ZWQgdXNlciwgRXNjYXBlIGNsb3NlcyBtZW50aW9ucyBkcm9wZG93blxuICogLSAqKlNlbGVjdGluZyBhIG1lbnRpb24qKjogRGVsZXRlcyB0aGUgYEBgIGFuZCBzZWFyY2ggdGV4dCBmcm9tIERPTSwgY3JlYXRlcyBhIG5vbi1lZGl0YWJsZSBgPHNwYW4+YCBlbGVtZW50IGZvciB0aGUgbWVudGlvbiwgaW5zZXJ0cyBhdCBjdXJzb3IgcG9zaXRpb24sIHJlcG9zaXRpb25zIGN1cnNvciBhZnRlciB0aGUgbWVudGlvblxuICpcbiAqICMjIFRlY2huaWNhbCBEZXRhaWxzXG4gKiAtICoqQ3Vyc29yIG1hbmFnZW1lbnQqKjogVXNlcyBTZWxlY3Rpb24gQVBJIGFuZCBSYW5nZSBvYmplY3RzIHRvIHRyYWNrL21hbmlwdWxhdGUgY3Vyc29yIHBvc2l0aW9uXG4gKiAtICoqVGV4dCBleHRyYWN0aW9uKio6IGBnZXRUZXh0QmVmb3JlQ3Vyc29yKClgIGdldHMgcGxhaW4gdGV4dCBiZWZvcmUgY3Vyc29yLCB0cmVhdGluZyBtZW50aW9uIHNwYW5zIGFzIGBAbmFtZWBcbiAqIC0gKipDaGFyYWN0ZXIgcG9zaXRpb24gbWFwcGluZyoqOiBgZmluZERvbVBvc2l0aW9uQXRDaGFySW5kZXgoKWAgY29udmVydHMgY2hhcmFjdGVyIGluZGljZXMgdG8gRE9NIG5vZGUgcG9zaXRpb25zIHVzaW5nIFRyZWVXYWxrZXJcbiAqIC0gKipDaGFuZ2UgZGV0ZWN0aW9uKio6IFVzZXMgT25QdXNoIHdpdGggbWFudWFsIGBtYXJrRm9yQ2hlY2soKWAgY2FsbHNcbiAqIC0gKipSZWFkb25seSBtb2RlKio6IFN3YXBzIGJldHdlZW4gY29udGVudGVkaXRhYmxlIGFuZCBub24tZWRpdGFibGUgZGl2cywgc3R5bGVzIG1lbnRpb25zIGRpZmZlcmVudGx5XG4gKlxuICogIyMgU3RhdGVcbiAqIC0gYG1lbnRpb25zVmlzaWJsZWA6IGNvbnRyb2xzIGRyb3Bkb3duIHZpc2liaWxpdHlcbiAqIC0gYG1lbnRpb25TZWFyY2hUZXh0YDogY3VycmVudCBmaWx0ZXIgdGV4dCBhZnRlciBAXG4gKiAtIGBtZW50aW9uQW5jaG9yYDogRE9NUmVjdCBmb3IgcG9zaXRpb25pbmcgZHJvcGRvd25cbiAqIC0gYHNlbGVjdGVkVXNlckluZGV4YDoga2V5Ym9hcmQgbmF2aWdhdGlvbiBzdGF0ZVxuICogLSBgc2F2ZWRSYW5nZWA6IHByZXNlcnZlcyBjdXJzb3IgcG9zaXRpb24gZm9yIGNsaWNrLWJhc2VkIHNlbGVjdGlvblxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdyaXYtbWVudGlvbnMtaW5wdXQnLFxuICB0ZW1wbGF0ZVVybDogYC4vbWVudGlvbnMtaW5wdXQuY29tcG9uZW50Lmh0bWxgLFxuICBzdHlsZVVybHM6IFsnLi9tZW50aW9ucy1pbnB1dC5jb21wb25lbnQuY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBNZW50aW9uc0lucHV0Q29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0IHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7fVxuXG4gIEBJbnB1dCgpIGNvbnRlbnQ6IE1lbnRpb25zSW5wdXRDb21wb25lbnQuQ29udGVudEl0ZW1bXSA9IFtdO1xuICBASW5wdXQoKSB1c2VyczogTWVudGlvbnNJbnB1dENvbXBvbmVudC5Vc2VyW10gPSBbXTtcbiAgQElucHV0KCkgcmVhZG9ubHkgPSBmYWxzZTtcbiAgQElucHV0KCkgcGxhY2Vob2xkZXI6IHN0cmluZyA9ICdBZGQgYSBjb21tZW50JztcblxuICBAT3V0cHV0KCkgcmVhZG9ubHkgY29udGVudENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8XG4gICAgTWVudGlvbnNJbnB1dENvbXBvbmVudC5Db250ZW50SXRlbVtdXG4gID4oKTtcblxuICBAVmlld0NoaWxkKCdpbnB1dCcsIHsgc3RhdGljOiBmYWxzZSB9KVxuICBwcml2YXRlIHJlYWRvbmx5IGlucHV0RWxlbWVudD86IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuXG4gIG1lbnRpb25zVmlzaWJsZSA9IGZhbHNlO1xuICBtZW50aW9uU2VhcmNoVGV4dCA9ICcnO1xuICBtZW50aW9uQW5jaG9yOiBET01SZWN0IHwgbnVsbCA9IG51bGw7XG4gIHNlbGVjdGVkVXNlckluZGV4ID0gMDtcbiAgcHJpdmF0ZSBzYXZlZFJhbmdlOiBSYW5nZSB8IG51bGwgPSBudWxsO1xuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnJlbmRlckNvbnRlbnQoKTtcbiAgfVxuXG4gIC8vREFITkUgTk9URSAtIG5nT25DaGFuZ2VzIGlzIGNhbGxlZCB3aGVuZXZlciBhbnkgQElucHV0KCkgcHJvcGVydHkgY2hhbmdlcywgd2hlcmUgdGhlIGNoYW5nZWQgaW5wdXQgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhvc2UgY2hhbmdlc1xuICAvL1NvIGlmIEBJbnB1dCgpIGNvbnRlbnQgY2hhbmdlcyBhbmQgaXQncyBub3QgdGhlIGZpcnN0IGNoYW5nZSAodGhlIGZpcnN0IHJlbmRlciBpcyBoYW5kbGVkIGJ5IG5nQWZ0ZXJWaWV3SW5pdCgpKSwgd2UgcmVuZGVyIHRoZSBjb250ZW50XG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1snY29udGVudCddICYmICFjaGFuZ2VzWydjb250ZW50J10uZmlyc3RDaGFuZ2UpIHtcbiAgICAgIHRoaXMucmVuZGVyQ29udGVudCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyQ29udGVudCgpOiB2b2lkIHtcbiAgICAvL1RoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlIEBWaWV3Q2hpbGQgcmVmZXJlbmNlIGlzbid0IGF2YWlsYWJsZSB1bnRpbCBhZnRlciB0aGUgdmlldyBpbml0aWFsaXplc1xuICAgIGlmICghdGhpcy5pbnB1dEVsZW1lbnQ/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBodG1sID0gdGhpcy5jb250ZW50XG4gICAgICAubWFwKGl0ZW0gPT5cbiAgICAgICAgTWVudGlvbnNJbnB1dENvbXBvbmVudC5jb250ZW50SXRlbVRvSHRtbChpdGVtLCB0aGlzLnJlYWRvbmx5KSxcbiAgICAgIClcbiAgICAgIC5qb2luKCcnKTtcbiAgICB0aGlzLmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IGh0bWw7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBjb250ZW50SXRlbVRvSHRtbChcbiAgICBpdGVtOiBNZW50aW9uc0lucHV0Q29tcG9uZW50LkNvbnRlbnRJdGVtLFxuICAgIHJlYWRvbmx5OiBib29sZWFuLFxuICApOiBzdHJpbmcge1xuICAgIHN3aXRjaCAoaXRlbS50eXBlKSB7XG4gICAgICAvL0RBSE5FIFRPRE8gLSBtYXliZSB3ZSBlc2NhcGUgSFRNTCBoZXJlIHRvbz8gQWx0aG91Z2ggSSBkb24ndCB0aGluayBpdCB3aWxsIGJlIHBvc3NpYmxlIGZvciB1c2VycyB0byBpbnB1dCBhbiBYU1MgYXR0YWNrIGluIGl0ZW0ubmFtZVxuICAgICAgY2FzZSAnbWVudGlvbic6XG4gICAgICAgIHJldHVybiBgPHNwYW4gY2xhc3M9XCIke1xuICAgICAgICAgIHJlYWRvbmx5ID8gJ3JlYWRvbmx5LW1lbnRpb24nIDogJ21lbnRpb24nXG4gICAgICAgIH1cIiBkYXRhLWlkPVwiJHtcbiAgICAgICAgICBpdGVtLmlkXG4gICAgICAgIH1cIiBkYXRhLXR5cGU9XCJtZW50aW9uXCIgY29udGVudGVkaXRhYmxlPVwiZmFsc2VcIj5AJHtNZW50aW9uc0lucHV0Q29tcG9uZW50LmVzY2FwZUh0bWwoXG4gICAgICAgICAgaXRlbS5uYW1lLFxuICAgICAgICApfTwvc3Bhbj5gO1xuICAgICAgY2FzZSAndGV4dCc6XG4gICAgICAgIHJldHVybiBNZW50aW9uc0lucHV0Q29tcG9uZW50LmVzY2FwZUh0bWwoaXRlbS50ZXh0KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBlc2NhcGVIdG1sKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgZGl2LnRleHRDb250ZW50ID0gdGV4dDtcbiAgICByZXR1cm4gZGl2LmlubmVySFRNTDtcbiAgfVxuXG4gIG9uSW5wdXQoKTogdm9pZCB7XG4gICAgdGhpcy5jaGVja0Zvck1lbnRpb25UcmlnZ2VyKCk7XG4gICAgdGhpcy5lbWl0Q29udGVudENoYW5nZSgpO1xuICB9XG5cbiAgb25LZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLm1lbnRpb25zVmlzaWJsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGZpbHRlcmVkVXNlcnMgPSB0aGlzLmdldEZpbHRlcmVkVXNlcnMoKTtcblxuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICBjYXNlICdBcnJvd0Rvd24nOlxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkVXNlckluZGV4ID0gTWF0aC5taW4oXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFVzZXJJbmRleCArIDEsXG4gICAgICAgICAgZmlsdGVyZWRVc2Vycy5sZW5ndGggLSAxLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdBcnJvd1VwJzpcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFVzZXJJbmRleCA9IE1hdGgubWF4KHRoaXMuc2VsZWN0ZWRVc2VySW5kZXggLSAxLCAwKTtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnRW50ZXInOlxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBpZiAoZmlsdGVyZWRVc2Vyc1t0aGlzLnNlbGVjdGVkVXNlckluZGV4XSkge1xuICAgICAgICAgIHRoaXMuc2VsZWN0VXNlcihmaWx0ZXJlZFVzZXJzW3RoaXMuc2VsZWN0ZWRVc2VySW5kZXhdKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ1RhYic6XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGlmIChmaWx0ZXJlZFVzZXJzW3RoaXMuc2VsZWN0ZWRVc2VySW5kZXhdKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RVc2VyKGZpbHRlcmVkVXNlcnNbdGhpcy5zZWxlY3RlZFVzZXJJbmRleF0pO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnRXNjYXBlJzpcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5jbG9zZU1lbnRpb25zKCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tGb3JNZW50aW9uVHJpZ2dlcigpOiB2b2lkIHtcbiAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgaWYgKCFzZWxlY3Rpb24gfHwgIXNlbGVjdGlvbi5yYW5nZUNvdW50IHx8ICF0aGlzLmlucHV0RWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHJhbmdlID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCk7XG4gICAgY29uc3QgdGV4dEJlZm9yZUN1cnNvciA9IHRoaXMuZ2V0VGV4dEJlZm9yZUN1cnNvcihyYW5nZSk7XG5cbiAgICBjb25zdCBsYXN0QXRJbmRleCA9IHRleHRCZWZvcmVDdXJzb3IubGFzdEluZGV4T2YoJ0AnKTtcblxuICAgIGlmIChsYXN0QXRJbmRleCA9PT0gLTEpIHtcbiAgICAgIHRoaXMuY2xvc2VNZW50aW9ucygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vSWYgd2UgYWxsb3cgZm9yIGEgc2luZ2xlIHNwYWNlLCB3ZSBuZWVkIHRvIGNoZWNrIHRvIG1ha2Ugc3VyZSB0aGF0IHRoaXMgbG9naWMgd29uJ3QgcGljayB1cCBwcmV2aW91c1xuICAgIC8vJ0AnIG1lbnRpb25zIGFuZCBrZWVwIHRoZSBtZW50aW9uIGRyb3Bkb3duIG9wZW5cbiAgICBjb25zdCBhdFBvc2l0aW9uID0gdGhpcy5maW5kRG9tUG9zaXRpb25BdENoYXJJbmRleChsYXN0QXRJbmRleCk7XG4gICAgaWYgKGF0UG9zaXRpb24gJiYgdGhpcy5pc0luc2lkZU1lbnRpb25TcGFuKGF0UG9zaXRpb24ubm9kZSkpIHtcbiAgICAgIHRoaXMuY2xvc2VNZW50aW9ucygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHRleHRBZnRlckF0ID0gdGV4dEJlZm9yZUN1cnNvci5zdWJzdHJpbmcobGFzdEF0SW5kZXggKyAxKTtcbiAgICBjb25zdCBjaGFyMSA9IHRleHRBZnRlckF0LmNoYXJDb2RlQXQoMCk7XG4gICAgY29uc3QgY2hhck4gPSB0ZXh0QWZ0ZXJBdC5jaGFyQ29kZUF0KHRleHRBZnRlckF0Lmxlbmd0aCAtIDEpO1xuICAgIGNvbnN0IGNoYXJOXzEgPSB0ZXh0QWZ0ZXJBdC5jaGFyQ29kZUF0KHRleHRBZnRlckF0Lmxlbmd0aCAtIDIpO1xuICAgIC8vVGhlc2UgYXJlIHRoZSBVbmljb2RlIHJlcHJlc2VudGF0aW9ucyBvZiBub3JtYWwgc3BhY2UgYW5kIG5vbi1icmVha2luZyBzcGFjZVxuICAgIGNvbnN0IHVuaWNvZGVTcGFjZUNoYXJzID0gWzMyLCAxNjBdO1xuXG4gICAgLy8gQ2xvc2UgbWVudGlvbnMgaWY6XG4gICAgLy8gLSBUaGVyZSdzIGEgZG91YmxlIHNwYWNlIChhbGxvd3Mgc2luZ2xlIHNwYWNlcyBpbiB0aGUgbWlkZGxlIG9mIHNlYXJjaClcbiAgICAvLyAtIFRoZSB0ZXh0IHN0YXJ0cyB3aXRoIGEgc3BhY2UgKHR5cGluZyBcIkAgXCIgc2hvdWxkIG5vdCB0cmlnZ2VyIG1lbnRpb25zKVxuICAgIGlmIChcbiAgICAgIHRleHRBZnRlckF0LmluY2x1ZGVzKCcgICcpIHx8XG4gICAgICB0ZXh0QWZ0ZXJBdC5zdGFydHNXaXRoKCcgJykgfHxcbiAgICAgIGNoYXIxID09IDE2MCB8fFxuICAgICAgKHVuaWNvZGVTcGFjZUNoYXJzLmluY2x1ZGVzKGNoYXJOKSAmJiB1bmljb2RlU3BhY2VDaGFycy5pbmNsdWRlcyhjaGFyTl8xKSlcbiAgICApIHtcbiAgICAgIHRoaXMuY2xvc2VNZW50aW9ucygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFRyaW0gdHJhaWxpbmcvbGVhZGluZyBzcGFjZXMgZnJvbSBzZWFyY2ggdGV4dCB3aGlsZSBwcmVzZXJ2aW5nIHNwYWNlcyBpbiB0aGUgbWlkZGxlXG4gICAgdGhpcy5tZW50aW9uU2VhcmNoVGV4dCA9IHRleHRBZnRlckF0LnRyaW0oKTtcbiAgICB0aGlzLm1lbnRpb25zVmlzaWJsZSA9IHRydWU7XG4gICAgdGhpcy5zZWxlY3RlZFVzZXJJbmRleCA9IDA7XG5cbiAgICAvL1NhdmUgdGhlIGN1cnJlbnQgcmFuZ2UgZm9yIGxhdGVyIHJlc3RvcmF0aW9uIChuZWVkZWQgZm9yIGNsaWNrIHNlbGVjdGlvbilcbiAgICAvL0RBSE5FIE5PVEUgLSB0aGlzIGlzIGFubm95aW5nbHkgbmVjZWVzc2FyeSBiZWNhdXNlIGNsaWNrcyBhbmQgZW50ZXIga2V5cyBoYXZlIGRpZmZlcmVudCBlZmZlY3RzIG9uIHRoZVxuICAgIC8vZm9jdXMgb2YgdGhlIGNvbnRlbnRlZGl0YWJsZSBkaXZcbiAgICB0aGlzLnNhdmVkUmFuZ2UgPSByYW5nZS5jbG9uZVJhbmdlKCk7XG5cbiAgICAvL1RoaXMgaXMgaG93IHdlIGNhbGNsdWF0ZSB0aGUgY2FsbG91dCBwb3NpdGlvblxuICAgIGNvbnN0IGN1cnNvclJlY3QgPSByYW5nZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICB0aGlzLm1lbnRpb25BbmNob3IgPSBjdXJzb3JSZWN0O1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRUZXh0QmVmb3JlQ3Vyc29yKHJhbmdlOiBSYW5nZSk6IHN0cmluZyB7XG4gICAgY29uc3QgY2xvbmVkUmFuZ2UgPSByYW5nZS5jbG9uZVJhbmdlKCk7XG4gICAgLy9XZSBzZWxlY3QgYWxsIG9mIHRoZSBpbnB1dCBjb250ZW50cywgYW5kIHRoZW4gbW92ZSB0aGUgZW5kIHBvaW50IHRvIHRoZSBjdXJyZW50IGN1cnNvciBwb3NpdGlvblxuICAgIGNsb25lZFJhbmdlLnNlbGVjdE5vZGVDb250ZW50cyh0aGlzLmlucHV0RWxlbWVudCEubmF0aXZlRWxlbWVudCk7XG4gICAgY2xvbmVkUmFuZ2Uuc2V0RW5kKHJhbmdlLmVuZENvbnRhaW5lciwgcmFuZ2UuZW5kT2Zmc2V0KTtcblxuICAgIC8vQ3JlYXRlIGEgdGVtcG9yYXJ5IGRpdiBzbyB0aGF0IHdlIGNhbiBleHRyYWN0IHRleHQgY29udGVudCBmcm9tIGl0XG4gICAgY29uc3QgZnJhZ21lbnQgPSBjbG9uZWRSYW5nZS5jbG9uZUNvbnRlbnRzKCk7XG4gICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgZGl2LmFwcGVuZENoaWxkKGZyYWdtZW50KTtcblxuICAgIC8vR2V0IHRleHQgY29udGVudCwgcmVwbGFjaW5nIG1lbnRpb24gc3BhbnMgd2l0aCBAbmFtZVxuICAgIHJldHVybiBkaXYudGV4dENvbnRlbnQgfHwgJyc7XG4gIH1cblxuICBnZXRGaWx0ZXJlZFVzZXJzKCk6IE1lbnRpb25zSW5wdXRDb21wb25lbnQuVXNlcltdIHtcbiAgICBjb25zdCB1c2VycyA9ICF0aGlzLm1lbnRpb25TZWFyY2hUZXh0XG4gICAgICA/IHRoaXMudXNlcnNcbiAgICAgIDogdGhpcy51c2Vycy5maWx0ZXIodXNlciA9PlxuICAgICAgICAgIHVzZXIubmFtZVxuICAgICAgICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgIC5pbmNsdWRlcyh0aGlzLm1lbnRpb25TZWFyY2hUZXh0LnRvTG93ZXJDYXNlKCkpLFxuICAgICAgICApO1xuXG4gICAgcmV0dXJuIHVzZXJzLnNsaWNlKCkuc29ydCgoYSwgYikgPT4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKSk7XG4gIH1cblxuICBzZWxlY3RVc2VyKHVzZXI6IE1lbnRpb25zSW5wdXRDb21wb25lbnQuVXNlcik6IHZvaWQge1xuICAgIGlmICghdGhpcy5pbnB1dEVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvL1RoaXMgZ2V0cyBET00gaW5mbyBmcm9tIHVzZXIgKGUuZy4gaGlnaGxpZ2h0ZWQgc2VsZWN0aW9ucywgYW5kIGN1cnNvciBwb3NpdGlvbilcbiAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgaWYgKCFzZWxlY3Rpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBSZXN0b3JlIHRoZSBzYXZlZCByYW5nZSBpZiBhdmFpbGFibGUgKG5lZWRlZCB3aGVuIHNlbGVjdGluZyB2aWEgY2xpY2spXG4gICAgaWYgKHRoaXMuc2F2ZWRSYW5nZSkge1xuICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpO1xuICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHRoaXMuc2F2ZWRSYW5nZSk7XG4gICAgfVxuXG4gICAgaWYgKCFzZWxlY3Rpb24ucmFuZ2VDb3VudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIERlbGV0ZSB0aGUgXCJAXCIgYW5kIHNlYXJjaCB0ZXh0XG4gICAgdGhpcy5kZWxldGVBdE1lbnRpb25TZWFyY2goKTtcblxuICAgIC8vREFITkUgTk9URSAtIHRoaXMgd291bGQgaWRlYWxseSBiZSB0aGUgc2FtZSBhcyBjb250ZW50SXRlbVRvSFRNTCwgYnV0IHdlIG5lZWQgYW4gYWN0dWFsIGVsZW1lbnQgcmVmZXJlbmNlIGhlcmUgaW4gb3JkZXIgdG8gYXBwZW5kIGl0IHRvIHRoZSBET01cbiAgICBjb25zdCBtZW50aW9uU3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgICBtZW50aW9uU3Bhbi5jbGFzc05hbWUgPSB0aGlzLnJlYWRvbmx5ID8gJ3JlYWRvbmx5LW1lbnRpb24nIDogJ21lbnRpb24nO1xuICAgIG1lbnRpb25TcGFuLnNldEF0dHJpYnV0ZSgnZGF0YS1pZCcsIFN0cmluZyh1c2VyLmlkKSk7XG4gICAgbWVudGlvblNwYW4uc2V0QXR0cmlidXRlKCdkYXRhLXR5cGUnLCAnbWVudGlvbicpO1xuICAgIG1lbnRpb25TcGFuLnNldEF0dHJpYnV0ZSgnY29udGVudGVkaXRhYmxlJywgJ2ZhbHNlJyk7XG4gICAgbWVudGlvblNwYW4udGV4dENvbnRlbnQgPSBgQCR7dXNlci5uYW1lfWA7XG5cbiAgICAvL0ZpbmQgY3VycmVudCBjdXJzb3IgcG9zaXRpb25cbiAgICBjb25zdCBuZXdSYW5nZSA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKT8uZ2V0UmFuZ2VBdCgwKTtcbiAgICBpZiAobmV3UmFuZ2UpIHtcbiAgICAgIG5ld1JhbmdlLmluc2VydE5vZGUobWVudGlvblNwYW4pO1xuICAgICAgLy9TZXQgdGhlIHJhbmdlIHN0YXJ0IGFuZCBlbmQgdG8gdGhlIHNhbWUgbG9jYXRpb24gKHJlbmRlcmluZyB0aGUgY3Vyc29yIGluIHRoZSByaWdodCBwb3NpdGlvbilcbiAgICAgIG5ld1JhbmdlLnNldFN0YXJ0QWZ0ZXIobWVudGlvblNwYW4pO1xuICAgICAgbmV3UmFuZ2Uuc2V0RW5kQWZ0ZXIobWVudGlvblNwYW4pO1xuICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpO1xuICAgICAgLy9BcHBseSB0aGlzIHJhbmdlIHRvIHRoZSBET01cbiAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShuZXdSYW5nZSk7XG4gICAgfVxuXG4gICAgdGhpcy5jbG9zZU1lbnRpb25zKCk7XG4gICAgdGhpcy5lbWl0Q29udGVudENoYW5nZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWxldGVBdE1lbnRpb25TZWFyY2goKTogdm9pZCB7XG4gICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgIGlmICghc2VsZWN0aW9uIHx8ICFzZWxlY3Rpb24ucmFuZ2VDb3VudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vVGhpcyByZXByZXNlbnRzIHRoZSBjdXJyZW50IHBvc2l0aW9uIG9mIHRoZSBjdXJzb3JcbiAgICBjb25zdCBjdXJzb3JSYW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApO1xuXG4gICAgLy9UaGlzIHdpbGwgcmV0dXJuIGFsbCBvZiB0aGUgcmF3IHRleHQgKEhUTUwtc3RyaXBwZWQpIGJlZm9yZSB0aGUgY3Vyc29yXG4gICAgY29uc3QgdGV4dEJlZm9yZUN1cnNvciA9IHRoaXMuZ2V0VGV4dEJlZm9yZUN1cnNvcihjdXJzb3JSYW5nZSk7XG4gICAgLy9XZSBkbyB0aGF0XiBzbyB0aGF0IHdlIGNhbiBmaW5kIHRoZSBjb3JyZWN0IGluZGV4IG9mIHRoZSBtb3N0IHJlY2VudCAnQCdcbiAgICBjb25zdCBsYXN0QXRJbmRleCA9IHRleHRCZWZvcmVDdXJzb3IubGFzdEluZGV4T2YoJ0AnKTtcblxuICAgIGlmIChsYXN0QXRJbmRleCA9PT0gLTEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvL0tub3dpbmcgdGhlIHBvc2l0aW9uIG9mIHRoZSBsYXN0ICdAJyBjaGFyYWN0ZXIgd2UgY2FuIG5vdyBmaW5kIHRoZSBhY3R1YWwgRE9NIG5vZGUgKyBvZmZzZXQgd2hlcmUgXCJAXCIgbGl2ZXNcbiAgICBjb25zdCBhdFBvc2l0aW9uID0gdGhpcy5maW5kRG9tUG9zaXRpb25BdENoYXJJbmRleChsYXN0QXRJbmRleCk7XG5cbiAgICBpZiAoIWF0UG9zaXRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgcmFuZ2UgZnJvbSBcIkBcIiB0byBjdXJzb3IgYW5kIGRlbGV0ZSBpdFxuICAgIGNvbnN0IGRlbGV0ZVJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcbiAgICBkZWxldGVSYW5nZS5zZXRTdGFydChhdFBvc2l0aW9uLm5vZGUsIGF0UG9zaXRpb24ub2Zmc2V0KTtcbiAgICBkZWxldGVSYW5nZS5zZXRFbmQoY3Vyc29yUmFuZ2UuZW5kQ29udGFpbmVyLCBjdXJzb3JSYW5nZS5lbmRPZmZzZXQpO1xuICAgIGRlbGV0ZVJhbmdlLmRlbGV0ZUNvbnRlbnRzKCk7XG4gIH1cblxuICBwcml2YXRlIGlzSW5zaWRlTWVudGlvblNwYW4obm9kZTogTm9kZSk6IGJvb2xlYW4ge1xuICAgIGxldCBjdXJyZW50Tm9kZTogTm9kZSB8IG51bGwgPSBub2RlO1xuICAgIHdoaWxlIChjdXJyZW50Tm9kZSAmJiBjdXJyZW50Tm9kZSAhPT0gdGhpcy5pbnB1dEVsZW1lbnQ/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIGlmIChcbiAgICAgICAgY3VycmVudE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFICYmXG4gICAgICAgIChjdXJyZW50Tm9kZSBhcyBIVE1MRWxlbWVudCkuZ2V0QXR0cmlidXRlKCdkYXRhLXR5cGUnKSA9PT0gJ21lbnRpb24nXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLnBhcmVudE5vZGU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vVGhpcyB3aWxsIGdvIHRleHQgbm9kZSBieSBub2RlIGxvb2tpbmcgZm9yIHRoZVxuICAvL0AgbWVudGlvbiBhbmQgZ2l2ZSBpdHMgcG9zaXRpb24gaW4gdGhlIGNvbnRleHQgb2YgdGhhdCBub2RlXG4gIHByaXZhdGUgZmluZERvbVBvc2l0aW9uQXRDaGFySW5kZXgoXG4gICAgY2hhckluZGV4OiBudW1iZXIsXG4gICk6IHsgbm9kZTogTm9kZTsgb2Zmc2V0OiBudW1iZXIgfSB8IG51bGwge1xuICAgIGlmICghdGhpcy5pbnB1dEVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIFdhbGsgdGhyb3VnaCBhbGwgdGV4dCBub2RlcyBpbiB0aGUgaW5wdXQsIGNvdW50aW5nIGNoYXJhY3RlcnNcbiAgICBjb25zdCB0cmVlV2Fsa2VyID0gZG9jdW1lbnQuY3JlYXRlVHJlZVdhbGtlcihcbiAgICAgIHRoaXMuaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQsXG4gICAgICBOb2RlRmlsdGVyLlNIT1dfVEVYVCxcbiAgICAgIG51bGwsXG4gICAgKTtcblxuICAgIGxldCBjaGFyQ291bnQgPSAwO1xuXG4gICAgd2hpbGUgKHRyZWVXYWxrZXIubmV4dE5vZGUoKSkge1xuICAgICAgY29uc3Qgbm9kZSA9IHRyZWVXYWxrZXIuY3VycmVudE5vZGU7XG4gICAgICBjb25zdCB0ZXh0ID0gbm9kZS50ZXh0Q29udGVudCB8fCAnJztcblxuICAgICAgLy8gQ2hlY2sgaWYgb3VyIHRhcmdldCBjaGFyYWN0ZXIgaXMgaW4gdGhpcyB0ZXh0IG5vZGVcbiAgICAgIGlmIChjaGFyQ291bnQgKyB0ZXh0Lmxlbmd0aCA+IGNoYXJJbmRleCkge1xuICAgICAgICAvLyBUaGUgY2hhcmFjdGVyIGF0IGNoYXJJbmRleCBpcyBpbiB0aGlzIG5vZGVcbiAgICAgICAgY29uc3Qgb2Zmc2V0SW5Ob2RlID0gY2hhckluZGV4IC0gY2hhckNvdW50O1xuICAgICAgICByZXR1cm4geyBub2RlLCBvZmZzZXQ6IG9mZnNldEluTm9kZSB9O1xuICAgICAgfVxuXG4gICAgICBjaGFyQ291bnQgKz0gdGV4dC5sZW5ndGg7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwcml2YXRlIGNsb3NlTWVudGlvbnMoKTogdm9pZCB7XG4gICAgdGhpcy5tZW50aW9uc1Zpc2libGUgPSBmYWxzZTtcbiAgICB0aGlzLm1lbnRpb25TZWFyY2hUZXh0ID0gJyc7XG4gICAgdGhpcy5tZW50aW9uQW5jaG9yID0gbnVsbDtcbiAgICB0aGlzLnNlbGVjdGVkVXNlckluZGV4ID0gMDtcbiAgICB0aGlzLnNhdmVkUmFuZ2UgPSBudWxsO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0Q29udGVudENoYW5nZSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaW5wdXRFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY29udGVudEl0ZW1zID0gdGhpcy5kb21Ub0NvbnRlbnRJdGVtcygpO1xuICAgIHRoaXMuY29udGVudENoYW5nZS5lbWl0KGNvbnRlbnRJdGVtcyk7XG4gIH1cblxuICBwcml2YXRlIGRvbVRvQ29udGVudEl0ZW1zKCk6IE1lbnRpb25zSW5wdXRDb21wb25lbnQuQ29udGVudEl0ZW1bXSB7XG4gICAgaWYgKCF0aGlzLmlucHV0RWxlbWVudD8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IGl0ZW1zOiBNZW50aW9uc0lucHV0Q29tcG9uZW50LkNvbnRlbnRJdGVtW10gPSBbXTtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC5jaGlsZE5vZGVzO1xuXG4gICAgZm9yIChjb25zdCBub2RlIG9mIEFycmF5LmZyb20oY2hpbGROb2RlcykpIHtcbiAgICAgIGlmIChub2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gbm9kZSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGVsZW1lbnQudGFnTmFtZSA9PT0gJ1NQQU4nICYmXG4gICAgICAgICAgZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtdHlwZScpID09PSAnbWVudGlvbidcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3QgaWQgPSBOdW1iZXIoZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtaWQnKSk7XG4gICAgICAgICAgY29uc3QgbmFtZSA9IGVsZW1lbnQudGV4dENvbnRlbnQ/LnJlcGxhY2UoJ0AnLCAnJykgfHwgJyc7XG4gICAgICAgICAgaXRlbXMucHVzaCh7IHR5cGU6ICdtZW50aW9uJywgaWQsIG5hbWUgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAobm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUpIHtcbiAgICAgICAgY29uc3QgdGV4dCA9IG5vZGUudGV4dENvbnRlbnQgfHwgJyc7XG4gICAgICAgIGlmICh0ZXh0KSB7XG4gICAgICAgICAgaXRlbXMucHVzaCh7IHR5cGU6ICd0ZXh0JywgdGV4dCB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBpdGVtcztcbiAgfVxuXG4gIG9uQ2FsbG91dENsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuY2xvc2VNZW50aW9ucygpO1xuICB9XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgTWVudGlvbnNJbnB1dENvbXBvbmVudCB7XG4gIGV4cG9ydCBjb25zdCBDb250ZW50VHlwZXMgPSBbJ21lbnRpb24nLCAndGV4dCddIGFzIGNvbnN0O1xuICBleHBvcnQgdHlwZSBDb250ZW50VHlwZSA9XG4gICAgKHR5cGVvZiBNZW50aW9uc0lucHV0Q29tcG9uZW50LkNvbnRlbnRUeXBlcylbbnVtYmVyXTtcbiAgZXhwb3J0IGludGVyZmFjZSBVc2VyIHtcbiAgICBpZDogbnVtYmVyO1xuICAgIG5hbWU6IHN0cmluZztcbiAgfVxuICBleHBvcnQgdHlwZSBDb250ZW50PFQgZXh0ZW5kcyBDb250ZW50VHlwZT4gPSB7IHR5cGU6IFQgfTtcblxuICBleHBvcnQgdHlwZSBVc2VyTWVudGlvbiA9IENvbnRlbnQ8J21lbnRpb24nPiAmIFVzZXI7XG4gIGV4cG9ydCB0eXBlIFRleHQgPSBDb250ZW50PCd0ZXh0Jz4gJiB7IHRleHQ6IHN0cmluZyB9O1xuXG4gIGV4cG9ydCB0eXBlIENvbnRlbnRJdGVtID0gVXNlck1lbnRpb24gfCBUZXh0O1xuXG4gIGV4cG9ydCBmdW5jdGlvbiBjb250ZW50VG9QbGFpblRleHQoY29udGVudDogQ29udGVudEl0ZW1bXSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGNvbnRlbnRcbiAgICAgIC5tYXAoaXRlbSA9PiB7XG4gICAgICAgIHN3aXRjaCAoaXRlbS50eXBlKSB7XG4gICAgICAgICAgY2FzZSAnbWVudGlvbic6XG4gICAgICAgICAgICByZXR1cm4gYEAke2l0ZW0ubmFtZX1gO1xuICAgICAgICAgIGNhc2UgJ3RleHQnOlxuICAgICAgICAgICAgcmV0dXJuIGl0ZW0udGV4dDtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIC5qb2luKCcnKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cIm1lbnRpb25zLWNvbnRhaW5lclwiICNjb250YWluZXI+XG4gIDxkaXZcbiAgICAqbmdJZj1cIiFyZWFkb25seVwiXG4gICAgI2lucHV0XG4gICAgY2xhc3M9XCJ0ZXh0LWNvbnRlbnQgZWRpdGFibGVcIlxuICAgIGNvbnRlbnRlZGl0YWJsZT1cInRydWVcIlxuICAgIFthdHRyLmRhdGEtcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgIChpbnB1dCk9XCJvbklucHV0KClcIlxuICAgIChrZXlkb3duKT1cIm9uS2V5RG93bigkZXZlbnQpXCJcbiAgPjwvZGl2PlxuXG4gIDxkaXYgKm5nSWY9XCJyZWFkb25seVwiICNpbnB1dCBjbGFzcz1cInRleHQtY29udGVudFwiPjwvZGl2PlxuXG4gIDxyaXYtY2FsbG91dFxuICAgICpuZ0lmPVwiIXJlYWRvbmx5ICYmIG1lbnRpb25zVmlzaWJsZSAmJiBtZW50aW9uQW5jaG9yXCJcbiAgICBbYW5jaG9yXT1cIm1lbnRpb25BbmNob3JcIlxuICAgIFtpc01vZGFsXT1cImZhbHNlXCJcbiAgICBbc2hvd0NhcmV0XT1cImZhbHNlXCJcbiAgICBbcHJlZmVycmVkUG9zaXRpb25dPVwiJ2JvdHRvbS1yaWdodCdcIlxuICAgIFt0aGVtZV09XCInbGlnaHQnXCJcbiAgICAoY2xvc2UpPVwib25DYWxsb3V0Q2xvc2UoKVwiXG4gID5cbiAgICA8ZGl2IGNsYXNzPVwibWVudGlvbnMtY29udGVudFwiPlxuICAgICAgPGRpdiBjbGFzcz1cIm1lbnRpb25zLWhlYWRlclwiPk1lbnRpb24gc29tZW9uZTwvZGl2PlxuICAgICAgPHVsIGNsYXNzPVwibWVudGlvbnMtbGlzdFwiPlxuICAgICAgICA8bGlcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgdXNlciBvZiBnZXRGaWx0ZXJlZFVzZXJzKCk7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICAgIFtjbGFzcy5zZWxlY3RlZF09XCJpID09PSBzZWxlY3RlZFVzZXJJbmRleFwiXG4gICAgICAgID5cbiAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJzZWxlY3RVc2VyKHVzZXIpXCI+e3sgdXNlci5uYW1lIH19PC9idXR0b24+XG4gICAgICAgIDwvbGk+XG4gICAgICA8L3VsPlxuICAgIDwvZGl2PlxuICA8L3Jpdi1jYWxsb3V0PlxuPC9kaXY+XG4iXX0=
|
|
465
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudGlvbnMtaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvaW5wdXQvbWVudGlvbnMtaW5wdXQvbWVudGlvbnMtaW5wdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvaW5wdXQvbWVudGlvbnMtaW5wdXQvbWVudGlvbnMtaW5wdXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLHVCQUF1QixFQUV2QixTQUFTLEVBRVQsWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBRU4sU0FBUyxFQUNULGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQzs7OztBQUV2Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUNHO0FBUUgsTUFBTSxPQUFPLHNCQUFzQjtJQUNqQyxZQUE2QixHQUFzQjtRQUF0QixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUUxQyxZQUFPLEdBQXlDLEVBQUUsQ0FBQztRQUNuRCxVQUFLLEdBQWtDLEVBQUUsQ0FBQztRQUMxQyxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLGdCQUFXLEdBQVcsZUFBZSxDQUFDO1FBRTVCLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBRWhELENBQUM7UUFLSixvQkFBZSxHQUFHLEtBQUssQ0FBQztRQUN4QixzQkFBaUIsR0FBRyxFQUFFLENBQUM7UUFDdkIsa0JBQWEsR0FBbUIsSUFBSSxDQUFDO1FBQ3JDLHNCQUFpQixHQUFHLENBQUMsQ0FBQztRQUNkLGVBQVUsR0FBaUIsSUFBSSxDQUFDO0lBbEJjLENBQUM7SUFvQnZELGVBQWU7UUFDYixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVELDZJQUE2STtJQUM3SSx3SUFBd0k7SUFDeEksV0FBVyxDQUFDLE9BQXNCO1FBQ2hD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QVBsQyxTQUFTOytCQUNFLG9CQUFvQixpQkFHZixpQkFBaUIsQ0FBQyxJQUFJLG1CQUNwQix1QkFBdUIsQ0FBQyxNQUFNO3dHQUt0QyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFFYSxhQUFhO3NCQUEvQixNQUFNO2dCQUtVLFlBQVk7c0JBRDVCLFNBQVM7dUJBQUMsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTs7QUFxZXZDLFdBQWlCLHNCQUFzQjtJQUN4QixtQ0FBWSxHQUFHLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBVSxDQUFDO0lBY3pELFNBQWdCLGtCQUFrQixDQUFDLE9BQXNCO1FBQ3ZELE9BQU8sT0FBTzthQUNYLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNWLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRTtnQkFDakIsS0FBSyxTQUFTO29CQUNaLE9BQU8sSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ3pCLEtBQUssTUFBTTtvQkFDVCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7YUFDcEI7UUFDSCxDQUFDLENBQUM7YUFDRCxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDZCxDQUFDO0lBWGUseUNBQWtCLHFCQVdqQyxDQUFBO0FBQ0gsQ0FBQyxFQTNCZ0Isc0JBQXNCLEtBQXRCLHNCQUFzQixRQTJCdEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vKipcbiAqIEEgcmljaCB0ZXh0IGlucHV0IGNvbXBvbmVudCB0aGF0IGFsbG93cyB1c2VycyB0byB0eXBlIHRleHQgYW5kIG1lbnRpb24gb3RoZXIgdXNlcnMgYnkgdHlwaW5nIGBAYCBmb2xsb3dlZCBieSBhIG5hbWUuXG4gKiBVc2VzIGEgYGNvbnRlbnRlZGl0YWJsZWAgZGl2IGluc3RlYWQgb2YgYSB0cmFkaXRpb25hbCBpbnB1dC90ZXh0YXJlYS5cbiAqXG4gKiAjIyBEYXRhIE1vZGVsXG4gKiBXb3JrcyB3aXRoIGEgc3RydWN0dXJlZCBjb250ZW50IG1vZGVsIHJhdGhlciB0aGFuIHBsYWluIHN0cmluZ3M6XG4gKiAtICoqSW5wdXQvT3V0cHV0Kio6IGBDb250ZW50SXRlbVtdYCAtIGFuIGFycmF5IG9mIGNvbnRlbnQgcGllY2VzXG4gKiAtICoqQ29udGVudEl0ZW0gdHlwZXMqKjpcbiAqICAgLSBgVXNlck1lbnRpb25gOiBgeyB0eXBlOiAnbWVudGlvbicsIGlkOiBudW1iZXIsIG5hbWU6IHN0cmluZyB9YFxuICogICAtIGBUZXh0YDogYHsgdHlwZTogJ3RleHQnLCB0ZXh0OiBzdHJpbmcgfWBcbiAqXG4gKiAjIyBSZW5kZXJpbmcgRmxvd1xuICogMS4gKipDb250ZW50IOKGkiBET00qKjogYHJlbmRlckNvbnRlbnQoKWAgY29udmVydHMgdGhlIGNvbnRlbnQgaW5wdXQgYXJyYXkgdG8gSFRNTC4gTWVudGlvbnMgYmVjb21lIGA8c3Bhbj5gIGVsZW1lbnRzIHdpdGggYGRhdGEtaWRgIGFuZCBgZGF0YS10eXBlYCBhdHRyaWJ1dGVzLiBUZXh0IGlzIGVzY2FwZWQgYW5kIHJlbmRlcmVkIGFzIHBsYWluIHRleHQuXG4gKiAyLiAqKkRPTSDihpIgQ29udGVudCoqOiBgZG9tVG9Db250ZW50SXRlbXMoKWAgcGFyc2VzIHRoZSBET00gYmFjayBpbnRvIGBDb250ZW50SXRlbVtdYCwgd2Fsa2luZyB0aHJvdWdoIGNoaWxkIG5vZGVzIGV4dHJhY3RpbmcgbWVudGlvbnMgYW5kIHRleHQuIEVtaXR0ZWQgdmlhIGBjb250ZW50Q2hhbmdlYCBldmVudCBvbiBpbnB1dC5cbiAqXG4gKiAjIyBVc2VyIEludGVyYWN0aW9uXG4gKiAtICoqVHlwaW5nIGBAYCB0cmlnZ2VycyBtZW50aW9ucyoqOiBNb25pdG9ycyBpbnB1dCBmb3IgYEBgIGNoYXJhY3RlciwgZXh0cmFjdHMgdGV4dCBhZnRlciBgQGAgKHVwIHRvIGZpcnN0IHNwYWNlKSBhcyBzZWFyY2ggdGV4dCwgcG9zaXRpb25zIGEgY2FsbG91dCBkcm9wZG93biBhdCB0aGUgY3Vyc29yIGxvY2F0aW9uXG4gKiAtICoqS2V5Ym9hcmQgbmF2aWdhdGlvbioqOiBBcnJvdyBrZXlzIG5hdmlnYXRlIGZpbHRlcmVkIHVzZXJzIGxpc3QsIEVudGVyIHNlbGVjdHMgaGlnaGxpZ2h0ZWQgdXNlciwgRXNjYXBlIGNsb3NlcyBtZW50aW9ucyBkcm9wZG93blxuICogLSAqKlNlbGVjdGluZyBhIG1lbnRpb24qKjogRGVsZXRlcyB0aGUgYEBgIGFuZCBzZWFyY2ggdGV4dCBmcm9tIERPTSwgY3JlYXRlcyBhIG5vbi1lZGl0YWJsZSBgPHNwYW4+YCBlbGVtZW50IGZvciB0aGUgbWVudGlvbiwgaW5zZXJ0cyBhdCBjdXJzb3IgcG9zaXRpb24sIHJlcG9zaXRpb25zIGN1cnNvciBhZnRlciB0aGUgbWVudGlvblxuICpcbiAqICMjIFRlY2huaWNhbCBEZXRhaWxzXG4gKiAtICoqQ3Vyc29yIG1hbmFnZW1lbnQqKjogVXNlcyBTZWxlY3Rpb24gQVBJIGFuZCBSYW5nZSBvYmplY3RzIHRvIHRyYWNrL21hbmlwdWxhdGUgY3Vyc29yIHBvc2l0aW9uXG4gKiAtICoqVGV4dCBleHRyYWN0aW9uKio6IGBnZXRUZXh0QmVmb3JlQ3Vyc29yKClgIGdldHMgcGxhaW4gdGV4dCBiZWZvcmUgY3Vyc29yLCB0cmVhdGluZyBtZW50aW9uIHNwYW5zIGFzIGBAbmFtZWBcbiAqIC0gKipDaGFyYWN0ZXIgcG9zaXRpb24gbWFwcGluZyoqOiBgZmluZERvbVBvc2l0aW9uQXRDaGFySW5kZXgoKWAgY29udmVydHMgY2hhcmFjdGVyIGluZGljZXMgdG8gRE9NIG5vZGUgcG9zaXRpb25zIHVzaW5nIFRyZWVXYWxrZXJcbiAqIC0gKipDaGFuZ2UgZGV0ZWN0aW9uKio6IFVzZXMgT25QdXNoIHdpdGggbWFudWFsIGBtYXJrRm9yQ2hlY2soKWAgY2FsbHNcbiAqIC0gKipSZWFkb25seSBtb2RlKio6IFN3YXBzIGJldHdlZW4gY29udGVudGVkaXRhYmxlIGFuZCBub24tZWRpdGFibGUgZGl2cywgc3R5bGVzIG1lbnRpb25zIGRpZmZlcmVudGx5XG4gKlxuICogIyMgU3RhdGVcbiAqIC0gYG1lbnRpb25zVmlzaWJsZWA6IGNvbnRyb2xzIGRyb3Bkb3duIHZpc2liaWxpdHlcbiAqIC0gYG1lbnRpb25TZWFyY2hUZXh0YDogY3VycmVudCBmaWx0ZXIgdGV4dCBhZnRlciBAXG4gKiAtIGBtZW50aW9uQW5jaG9yYDogRE9NUmVjdCBmb3IgcG9zaXRpb25pbmcgZHJvcGRvd25cbiAqIC0gYHNlbGVjdGVkVXNlckluZGV4YDoga2V5Ym9hcmQgbmF2aWdhdGlvbiBzdGF0ZVxuICogLSBgc2F2ZWRSYW5nZWA6IHByZXNlcnZlcyBjdXJzb3IgcG9zaXRpb24gZm9yIGNsaWNrLWJhc2VkIHNlbGVjdGlvblxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdyaXYtbWVudGlvbnMtaW5wdXQnLFxuICB0ZW1wbGF0ZVVybDogYC4vbWVudGlvbnMtaW5wdXQuY29tcG9uZW50Lmh0bWxgLFxuICBzdHlsZVVybHM6IFsnLi9tZW50aW9ucy1pbnB1dC5jb21wb25lbnQuY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBNZW50aW9uc0lucHV0Q29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0IHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7fVxuXG4gIEBJbnB1dCgpIGNvbnRlbnQ6IE1lbnRpb25zSW5wdXRDb21wb25lbnQuQ29udGVudEl0ZW1bXSA9IFtdO1xuICBASW5wdXQoKSB1c2VyczogTWVudGlvbnNJbnB1dENvbXBvbmVudC5Vc2VyW10gPSBbXTtcbiAgQElucHV0KCkgcmVhZG9ubHkgPSBmYWxzZTtcbiAgQElucHV0KCkgcGxhY2Vob2xkZXI6IHN0cmluZyA9ICdBZGQgYSBjb21tZW50JztcblxuICBAT3V0cHV0KCkgcmVhZG9ubHkgY29udGVudENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8XG4gICAgTWVudGlvbnNJbnB1dENvbXBvbmVudC5Db250ZW50SXRlbVtdXG4gID4oKTtcblxuICBAVmlld0NoaWxkKCdpbnB1dCcsIHsgc3RhdGljOiBmYWxzZSB9KVxuICBwcml2YXRlIHJlYWRvbmx5IGlucHV0RWxlbWVudD86IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuXG4gIG1lbnRpb25zVmlzaWJsZSA9IGZhbHNlO1xuICBtZW50aW9uU2VhcmNoVGV4dCA9ICcnO1xuICBtZW50aW9uQW5jaG9yOiBET01SZWN0IHwgbnVsbCA9IG51bGw7XG4gIHNlbGVjdGVkVXNlckluZGV4ID0gMDtcbiAgcHJpdmF0ZSBzYXZlZFJhbmdlOiBSYW5nZSB8IG51bGwgPSBudWxsO1xuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnJlbmRlckNvbnRlbnQoKTtcbiAgfVxuXG4gIC8vREFITkUgTk9URSAtIG5nT25DaGFuZ2VzIGlzIGNhbGxlZCB3aGVuZXZlciBhbnkgQElucHV0KCkgcHJvcGVydHkgY2hhbmdlcywgd2hlcmUgdGhlIGNoYW5nZWQgaW5wdXQgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhvc2UgY2hhbmdlc1xuICAvL1NvIGlmIEBJbnB1dCgpIGNvbnRlbnQgY2hhbmdlcyBhbmQgaXQncyBub3QgdGhlIGZpcnN0IGNoYW5nZSAodGhlIGZpcnN0IHJlbmRlciBpcyBoYW5kbGVkIGJ5IG5nQWZ0ZXJWaWV3SW5pdCgpKSwgd2UgcmVuZGVyIHRoZSBjb250ZW50XG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1snY29udGVudCddICYmICFjaGFuZ2VzWydjb250ZW50J10uZmlyc3RDaGFuZ2UpIHtcbiAgICAgIHRoaXMucmVuZGVyQ29udGVudCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyQ29udGVudCgpOiB2b2lkIHtcbiAgICAvL1RoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlIEBWaWV3Q2hpbGQgcmVmZXJlbmNlIGlzbid0IGF2YWlsYWJsZSB1bnRpbCBhZnRlciB0aGUgdmlldyBpbml0aWFsaXplc1xuICAgIGlmICghdGhpcy5pbnB1dEVsZW1lbnQ/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBodG1sID0gdGhpcy5jb250ZW50XG4gICAgICAubWFwKGl0ZW0gPT5cbiAgICAgICAgTWVudGlvbnNJbnB1dENvbXBvbmVudC5jb250ZW50SXRlbVRvSHRtbChpdGVtLCB0aGlzLnJlYWRvbmx5KSxcbiAgICAgIClcbiAgICAgIC5qb2luKCcnKTtcbiAgICB0aGlzLmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IGh0bWw7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBjb250ZW50SXRlbVRvSHRtbChcbiAgICBpdGVtOiBNZW50aW9uc0lucHV0Q29tcG9uZW50LkNvbnRlbnRJdGVtLFxuICAgIHJlYWRvbmx5OiBib29sZWFuLFxuICApOiBzdHJpbmcge1xuICAgIHN3aXRjaCAoaXRlbS50eXBlKSB7XG4gICAgICAvL0RBSE5FIFRPRE8gLSBtYXliZSB3ZSBlc2NhcGUgSFRNTCBoZXJlIHRvbz8gQWx0aG91Z2ggSSBkb24ndCB0aGluayBpdCB3aWxsIGJlIHBvc3NpYmxlIGZvciB1c2VycyB0byBpbnB1dCBhbiBYU1MgYXR0YWNrIGluIGl0ZW0ubmFtZVxuICAgICAgY2FzZSAnbWVudGlvbic6XG4gICAgICAgIHJldHVybiBgPHNwYW4gY2xhc3M9XCIke1xuICAgICAgICAgIHJlYWRvbmx5ID8gJ3JlYWRvbmx5LW1lbnRpb24nIDogJ21lbnRpb24nXG4gICAgICAgIH1cIiBkYXRhLWlkPVwiJHtcbiAgICAgICAgICBpdGVtLmlkXG4gICAgICAgIH1cIiBkYXRhLXR5cGU9XCJtZW50aW9uXCIgY29udGVudGVkaXRhYmxlPVwiZmFsc2VcIj5AJHtNZW50aW9uc0lucHV0Q29tcG9uZW50LmVzY2FwZUh0bWwoXG4gICAgICAgICAgaXRlbS5uYW1lLFxuICAgICAgICApfTwvc3Bhbj5gO1xuICAgICAgY2FzZSAndGV4dCc6XG4gICAgICAgIHJldHVybiBNZW50aW9uc0lucHV0Q29tcG9uZW50LmVzY2FwZUh0bWwoaXRlbS50ZXh0KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBlc2NhcGVIdG1sKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgZGl2LnRleHRDb250ZW50ID0gdGV4dDtcbiAgICByZXR1cm4gZGl2LmlubmVySFRNTDtcbiAgfVxuXG4gIG9uSW5wdXQoKTogdm9pZCB7XG4gICAgdGhpcy5jaGVja0Zvck1lbnRpb25UcmlnZ2VyKCk7XG4gICAgdGhpcy5lbWl0Q29udGVudENoYW5nZSgpO1xuICB9XG5cbiAgb25LZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLm1lbnRpb25zVmlzaWJsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGZpbHRlcmVkVXNlcnMgPSB0aGlzLmdldEZpbHRlcmVkVXNlcnMoKTtcblxuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICBjYXNlICdBcnJvd0Rvd24nOlxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkVXNlckluZGV4ID0gTWF0aC5taW4oXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFVzZXJJbmRleCArIDEsXG4gICAgICAgICAgZmlsdGVyZWRVc2Vycy5sZW5ndGggLSAxLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdBcnJvd1VwJzpcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFVzZXJJbmRleCA9IE1hdGgubWF4KHRoaXMuc2VsZWN0ZWRVc2VySW5kZXggLSAxLCAwKTtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnRW50ZXInOlxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBpZiAoZmlsdGVyZWRVc2Vyc1t0aGlzLnNlbGVjdGVkVXNlckluZGV4XSkge1xuICAgICAgICAgIHRoaXMuc2VsZWN0VXNlcihmaWx0ZXJlZFVzZXJzW3RoaXMuc2VsZWN0ZWRVc2VySW5kZXhdKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ1RhYic6XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGlmIChmaWx0ZXJlZFVzZXJzW3RoaXMuc2VsZWN0ZWRVc2VySW5kZXhdKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RVc2VyKGZpbHRlcmVkVXNlcnNbdGhpcy5zZWxlY3RlZFVzZXJJbmRleF0pO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnRXNjYXBlJzpcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5jbG9zZU1lbnRpb25zKCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIG9uUGFzdGUoZXZlbnQ6IENsaXBib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIGlmICghZXZlbnQuY2xpcGJvYXJkRGF0YSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vTG9vayBmb3IgSFRNTCBmaXJzdFxuICAgIGNvbnN0IGh0bWwgPSBldmVudC5jbGlwYm9hcmREYXRhLmdldERhdGEoJ3RleHQvaHRtbCcpO1xuICAgIGNvbnN0IHBsYWluVGV4dCA9IGV2ZW50LmNsaXBib2FyZERhdGEuZ2V0RGF0YSgndGV4dC9wbGFpbicpO1xuXG4gICAgaWYgKGh0bWwpIHtcbiAgICAgIGNvbnN0IHNhbml0aXplZE5vZGVzID0gdGhpcy5wYXJzZVBhc3RlZEh0bWwoaHRtbCk7XG4gICAgICB0aGlzLmluc2VydE5vZGVzQXRDdXJzb3Ioc2FuaXRpemVkTm9kZXMpO1xuICAgIH0gZWxzZSBpZiAocGxhaW5UZXh0KSB7XG4gICAgICAvLyBJbnNlcnQgcGxhaW4gdGV4dFxuICAgICAgdGhpcy5pbnNlcnRUZXh0QXRDdXJzb3IocGxhaW5UZXh0KTtcbiAgICB9XG5cbiAgICB0aGlzLmVtaXRDb250ZW50Q2hhbmdlKCk7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlUGFzdGVkSHRtbChodG1sOiBzdHJpbmcpOiBOb2RlW10ge1xuICAgIC8vIENyZWF0ZSBhIHRlbXBvcmFyeSBjb250YWluZXIgdG8gcGFyc2UgdGhlIEhUTUxcbiAgICBjb25zdCB0ZW1wQ29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgdGVtcENvbnRhaW5lci5pbm5lckhUTUwgPSBodG1sO1xuXG4gICAgY29uc3Qgbm9kZXM6IE5vZGVbXSA9IFtdO1xuXG4gICAgY29uc3Qgd2Fsa05vZGVzID0gKG5vZGU6IE5vZGUpOiB2b2lkID0+IHtcbiAgICAgIGlmIChub2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gbm9kZSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgLy8gREFITkUgTk9URSAtIHdlIG9ubHkgd2FudCBtZW50aW9uIHNwYW5zIGFuZCB0ZXh0IGZvciBub3dcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGVsZW1lbnQudGFnTmFtZSA9PT0gJ1NQQU4nICYmXG4gICAgICAgICAgZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtdHlwZScpID09PSAnbWVudGlvbicgJiZcbiAgICAgICAgICBlbGVtZW50Lmhhc0F0dHJpYnV0ZSgnZGF0YS1pZCcpXG4gICAgICAgICkge1xuICAgICAgICAgIC8vQ3JlYXRlIG1lbnRpb24gdG8gdWx0aW1hdGVseSBpbnNlcnQgaW50byB0aGUgRE9NXG4gICAgICAgICAgY29uc3QgbWVudGlvblNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gICAgICAgICAgbWVudGlvblNwYW4uY2xhc3NOYW1lID0gdGhpcy5yZWFkb25seVxuICAgICAgICAgICAgPyAncmVhZG9ubHktbWVudGlvbidcbiAgICAgICAgICAgIDogJ21lbnRpb24nO1xuICAgICAgICAgIG1lbnRpb25TcGFuLnNldEF0dHJpYnV0ZSgnZGF0YS1pZCcsIGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLWlkJykhKTtcbiAgICAgICAgICBtZW50aW9uU3Bhbi5zZXRBdHRyaWJ1dGUoJ2RhdGEtdHlwZScsICdtZW50aW9uJyk7XG4gICAgICAgICAgbWVudGlvblNwYW4uc2V0QXR0cmlidXRlKCdjb250ZW50ZWRpdGFibGUnLCAnZmFsc2UnKTtcbiAgICAgICAgICBtZW50aW9uU3Bhbi50ZXh0Q29udGVudCA9IGVsZW1lbnQudGV4dENvbnRlbnQ7XG4gICAgICAgICAgbm9kZXMucHVzaChtZW50aW9uU3Bhbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy9SZWN1cnNpdmVseSBsb29rIGZvciBuZXN0ZWQgY2hpbGRyZW5cbiAgICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIEFycmF5LmZyb20oZWxlbWVudC5jaGlsZE5vZGVzKSkge1xuICAgICAgICAgICAgd2Fsa05vZGVzKGNoaWxkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAobm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUpIHtcbiAgICAgICAgY29uc3QgdGV4dCA9IG5vZGUudGV4dENvbnRlbnQgfHwgJyc7XG4gICAgICAgIGlmICh0ZXh0KSB7XG4gICAgICAgICAgbm9kZXMucHVzaChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0ZXh0KSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBBcnJheS5mcm9tKHRlbXBDb250YWluZXIuY2hpbGROb2RlcykpIHtcbiAgICAgIHdhbGtOb2RlcyhjaGlsZCk7XG4gICAgfVxuXG4gICAgLy9EQUhORSBOT1RFIC0gdGhlIHJlc3VsdCBoZXJlIHNob3VsZCBiZSBhbiBhcnJheSBvZiB0ZXh0L3NwYW4tbWVudGlvbiBub2Rlc1xuICAgIHJldHVybiBub2RlcztcbiAgfVxuXG4gIHByaXZhdGUgaW5zZXJ0Tm9kZXNBdEN1cnNvcihub2RlczogTm9kZVtdKTogdm9pZCB7XG4gICAgLy9HZXQgc2VsZWN0aW9uIG9iamVjdCwgcmVwcmVzZW50aW5nIHVzZXIgY3Vyc29yIHBvc2l0aW9uL3NlbGVjdGlvblxuICAgIC8vR2V0IFJhbmdlIG9iamVjdCBhdCBzdGFydCBvZiBzZWxlY3Rpb24sIHdoaWNoIHNob3VsZCByZXByZXNlbnQgY3Vyc29yIHBvc2l0aW9uXG4gICAgLy9JZiB0aGVyZSBpcyBhIHNlbGVjdGlvbiwgZGVsZXRlIGl0XG4gICAgLy9JbnNlcnQgdGhlIHBhcnNlZCBub2RlcyBmcm9tIGFib3ZlLCBtb3ZlIHJhbmdlIGVuZHMgdG8gYWZ0ZXIgbm9kZVxuICAgIC8vVGhlbiByZW1vdmUgdGhlIHJhbmdlIGFuZCByZXNldCBpdCB0byBtb3ZlIHRoZSBjdXJzb3IgcG9zaXRpb24gdG8gdGhlIGVuZFxuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICBpZiAoIXNlbGVjdGlvbiB8fCAhc2VsZWN0aW9uLnJhbmdlQ291bnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCByYW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApO1xuICAgIHJhbmdlLmRlbGV0ZUNvbnRlbnRzKCk7XG5cbiAgICBmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZXMpIHtcbiAgICAgIHJhbmdlLmluc2VydE5vZGUobm9kZSk7XG4gICAgICByYW5nZS5zZXRTdGFydEFmdGVyKG5vZGUpO1xuICAgICAgcmFuZ2Uuc2V0RW5kQWZ0ZXIobm9kZSk7XG4gICAgfVxuXG4gICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpO1xuICAgIHNlbGVjdGlvbi5hZGRSYW5nZShyYW5nZSk7XG4gIH1cblxuICBwcml2YXRlIGluc2VydFRleHRBdEN1cnNvcih0ZXh0OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgaWYgKCFzZWxlY3Rpb24gfHwgIXNlbGVjdGlvbi5yYW5nZUNvdW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcmFuZ2UgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTtcbiAgICByYW5nZS5kZWxldGVDb250ZW50cygpO1xuXG4gICAgY29uc3QgdGV4dE5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0ZXh0KTtcbiAgICByYW5nZS5pbnNlcnROb2RlKHRleHROb2RlKTtcbiAgICByYW5nZS5zZXRTdGFydEFmdGVyKHRleHROb2RlKTtcbiAgICByYW5nZS5zZXRFbmRBZnRlcih0ZXh0Tm9kZSk7XG5cbiAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgc2VsZWN0aW9uLmFkZFJhbmdlKHJhbmdlKTtcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tGb3JNZW50aW9uVHJpZ2dlcigpOiB2b2lkIHtcbiAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgaWYgKCFzZWxlY3Rpb24gfHwgIXNlbGVjdGlvbi5yYW5nZUNvdW50IHx8ICF0aGlzLmlucHV0RWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHJhbmdlID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCk7XG4gICAgY29uc3QgdGV4dEJlZm9yZUN1cnNvciA9IHRoaXMuZ2V0VGV4dEJlZm9yZUN1cnNvcihyYW5nZSk7XG5cbiAgICBjb25zdCBsYXN0QXRJbmRleCA9IHRleHRCZWZvcmVDdXJzb3IubGFzdEluZGV4T2YoJ0AnKTtcblxuICAgIGlmIChsYXN0QXRJbmRleCA9PT0gLTEpIHtcbiAgICAgIHRoaXMuY2xvc2VNZW50aW9ucygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vSWYgd2UgYWxsb3cgZm9yIGEgc2luZ2xlIHNwYWNlLCB3ZSBuZWVkIHRvIGNoZWNrIHRvIG1ha2Ugc3VyZSB0aGF0IHRoaXMgbG9naWMgd29uJ3QgcGljayB1cCBwcmV2aW91c1xuICAgIC8vJ0AnIG1lbnRpb25zIGFuZCBrZWVwIHRoZSBtZW50aW9uIGRyb3Bkb3duIG9wZW5cbiAgICBjb25zdCBhdFBvc2l0aW9uID0gdGhpcy5maW5kRG9tUG9zaXRpb25BdENoYXJJbmRleChsYXN0QXRJbmRleCk7XG4gICAgaWYgKGF0UG9zaXRpb24gJiYgdGhpcy5pc0luc2lkZU1lbnRpb25TcGFuKGF0UG9zaXRpb24ubm9kZSkpIHtcbiAgICAgIHRoaXMuY2xvc2VNZW50aW9ucygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHRleHRBZnRlckF0ID0gdGV4dEJlZm9yZUN1cnNvci5zdWJzdHJpbmcobGFzdEF0SW5kZXggKyAxKTtcbiAgICBjb25zdCBjaGFyMSA9IHRleHRBZnRlckF0LmNoYXJDb2RlQXQoMCk7XG4gICAgY29uc3QgY2hhck4gPSB0ZXh0QWZ0ZXJBdC5jaGFyQ29kZUF0KHRleHRBZnRlckF0Lmxlbmd0aCAtIDEpO1xuICAgIGNvbnN0IGNoYXJOXzEgPSB0ZXh0QWZ0ZXJBdC5jaGFyQ29kZUF0KHRleHRBZnRlckF0Lmxlbmd0aCAtIDIpO1xuICAgIC8vVGhlc2UgYXJlIHRoZSBVbmljb2RlIHJlcHJlc2VudGF0aW9ucyBvZiBub3JtYWwgc3BhY2UgYW5kIG5vbi1icmVha2luZyBzcGFjZVxuICAgIGNvbnN0IHVuaWNvZGVTcGFjZUNoYXJzID0gWzMyLCAxNjBdO1xuXG4gICAgLy8gQ2xvc2UgbWVudGlvbnMgaWY6XG4gICAgLy8gLSBUaGVyZSdzIGEgZG91YmxlIHNwYWNlIChhbGxvd3Mgc2luZ2xlIHNwYWNlcyBpbiB0aGUgbWlkZGxlIG9mIHNlYXJjaClcbiAgICAvLyAtIFRoZSB0ZXh0IHN0YXJ0cyB3aXRoIGEgc3BhY2UgKHR5cGluZyBcIkAgXCIgc2hvdWxkIG5vdCB0cmlnZ2VyIG1lbnRpb25zKVxuICAgIGlmIChcbiAgICAgIHRleHRBZnRlckF0LmluY2x1ZGVzKCcgICcpIHx8XG4gICAgICB0ZXh0QWZ0ZXJBdC5zdGFydHNXaXRoKCcgJykgfHxcbiAgICAgIGNoYXIxID09IDE2MCB8fFxuICAgICAgKHVuaWNvZGVTcGFjZUNoYXJzLmluY2x1ZGVzKGNoYXJOKSAmJiB1bmljb2RlU3BhY2VDaGFycy5pbmNsdWRlcyhjaGFyTl8xKSlcbiAgICApIHtcbiAgICAgIHRoaXMuY2xvc2VNZW50aW9ucygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFRyaW0gdHJhaWxpbmcvbGVhZGluZyBzcGFjZXMgZnJvbSBzZWFyY2ggdGV4dCB3aGlsZSBwcmVzZXJ2aW5nIHNwYWNlcyBpbiB0aGUgbWlkZGxlXG4gICAgdGhpcy5tZW50aW9uU2VhcmNoVGV4dCA9IHRleHRBZnRlckF0LnRyaW0oKTtcbiAgICB0aGlzLm1lbnRpb25zVmlzaWJsZSA9IHRydWU7XG4gICAgdGhpcy5zZWxlY3RlZFVzZXJJbmRleCA9IDA7XG5cbiAgICAvL1NhdmUgdGhlIGN1cnJlbnQgcmFuZ2UgZm9yIGxhdGVyIHJlc3RvcmF0aW9uIChuZWVkZWQgZm9yIGNsaWNrIHNlbGVjdGlvbilcbiAgICAvL0RBSE5FIE5PVEUgLSB0aGlzIGlzIGFubm95aW5nbHkgbmVjZWVzc2FyeSBiZWNhdXNlIGNsaWNrcyBhbmQgZW50ZXIga2V5cyBoYXZlIGRpZmZlcmVudCBlZmZlY3RzIG9uIHRoZVxuICAgIC8vZm9jdXMgb2YgdGhlIGNvbnRlbnRlZGl0YWJsZSBkaXZcbiAgICB0aGlzLnNhdmVkUmFuZ2UgPSByYW5nZS5jbG9uZVJhbmdlKCk7XG5cbiAgICAvL1RoaXMgaXMgaG93IHdlIGNhbGNsdWF0ZSB0aGUgY2FsbG91dCBwb3NpdGlvblxuICAgIGNvbnN0IGN1cnNvclJlY3QgPSByYW5nZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICB0aGlzLm1lbnRpb25BbmNob3IgPSBjdXJzb3JSZWN0O1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRUZXh0QmVmb3JlQ3Vyc29yKHJhbmdlOiBSYW5nZSk6IHN0cmluZyB7XG4gICAgY29uc3QgY2xvbmVkUmFuZ2UgPSByYW5nZS5jbG9uZVJhbmdlKCk7XG4gICAgLy9XZSBzZWxlY3QgYWxsIG9mIHRoZSBpbnB1dCBjb250ZW50cywgYW5kIHRoZW4gbW92ZSB0aGUgZW5kIHBvaW50IHRvIHRoZSBjdXJyZW50IGN1cnNvciBwb3NpdGlvblxuICAgIGNsb25lZFJhbmdlLnNlbGVjdE5vZGVDb250ZW50cyh0aGlzLmlucHV0RWxlbWVudCEubmF0aXZlRWxlbWVudCk7XG4gICAgY2xvbmVkUmFuZ2Uuc2V0RW5kKHJhbmdlLmVuZENvbnRhaW5lciwgcmFuZ2UuZW5kT2Zmc2V0KTtcblxuICAgIC8vQ3JlYXRlIGEgdGVtcG9yYXJ5IGRpdiBzbyB0aGF0IHdlIGNhbiBleHRyYWN0IHRleHQgY29udGVudCBmcm9tIGl0XG4gICAgY29uc3QgZnJhZ21lbnQgPSBjbG9uZWRSYW5nZS5jbG9uZUNvbnRlbnRzKCk7XG4gICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgZGl2LmFwcGVuZENoaWxkKGZyYWdtZW50KTtcblxuICAgIC8vR2V0IHRleHQgY29udGVudCwgcmVwbGFjaW5nIG1lbnRpb24gc3BhbnMgd2l0aCBAbmFtZVxuICAgIHJldHVybiBkaXYudGV4dENvbnRlbnQgfHwgJyc7XG4gIH1cblxuICBnZXRGaWx0ZXJlZFVzZXJzKCk6IE1lbnRpb25zSW5wdXRDb21wb25lbnQuVXNlcltdIHtcbiAgICBjb25zdCB1c2VycyA9ICF0aGlzLm1lbnRpb25TZWFyY2hUZXh0XG4gICAgICA/IHRoaXMudXNlcnNcbiAgICAgIDogdGhpcy51c2Vycy5maWx0ZXIodXNlciA9PlxuICAgICAgICAgIHVzZXIubmFtZVxuICAgICAgICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgIC5pbmNsdWRlcyh0aGlzLm1lbnRpb25TZWFyY2hUZXh0LnRvTG93ZXJDYXNlKCkpLFxuICAgICAgICApO1xuXG4gICAgcmV0dXJuIHVzZXJzLnNsaWNlKCkuc29ydCgoYSwgYikgPT4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKSk7XG4gIH1cblxuICBzZWxlY3RVc2VyKHVzZXI6IE1lbnRpb25zSW5wdXRDb21wb25lbnQuVXNlcik6IHZvaWQge1xuICAgIGlmICghdGhpcy5pbnB1dEVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvL1RoaXMgZ2V0cyBET00gaW5mbyBmcm9tIHVzZXIgKGUuZy4gaGlnaGxpZ2h0ZWQgc2VsZWN0aW9ucywgYW5kIGN1cnNvciBwb3NpdGlvbilcbiAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgaWYgKCFzZWxlY3Rpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBSZXN0b3JlIHRoZSBzYXZlZCByYW5nZSBpZiBhdmFpbGFibGUgKG5lZWRlZCB3aGVuIHNlbGVjdGluZyB2aWEgY2xpY2spXG4gICAgaWYgKHRoaXMuc2F2ZWRSYW5nZSkge1xuICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpO1xuICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHRoaXMuc2F2ZWRSYW5nZSk7XG4gICAgfVxuXG4gICAgaWYgKCFzZWxlY3Rpb24ucmFuZ2VDb3VudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIERlbGV0ZSB0aGUgXCJAXCIgYW5kIHNlYXJjaCB0ZXh0XG4gICAgdGhpcy5kZWxldGVBdE1lbnRpb25TZWFyY2goKTtcblxuICAgIC8vREFITkUgTk9URSAtIHRoaXMgd291bGQgaWRlYWxseSBiZSB0aGUgc2FtZSBhcyBjb250ZW50SXRlbVRvSFRNTCwgYnV0IHdlIG5lZWQgYW4gYWN0dWFsIGVsZW1lbnQgcmVmZXJlbmNlIGhlcmUgaW4gb3JkZXIgdG8gYXBwZW5kIGl0IHRvIHRoZSBET01cbiAgICBjb25zdCBtZW50aW9uU3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgICBtZW50aW9uU3Bhbi5jbGFzc05hbWUgPSB0aGlzLnJlYWRvbmx5ID8gJ3JlYWRvbmx5LW1lbnRpb24nIDogJ21lbnRpb24nO1xuICAgIG1lbnRpb25TcGFuLnNldEF0dHJpYnV0ZSgnZGF0YS1pZCcsIFN0cmluZyh1c2VyLmlkKSk7XG4gICAgbWVudGlvblNwYW4uc2V0QXR0cmlidXRlKCdkYXRhLXR5cGUnLCAnbWVudGlvbicpO1xuICAgIG1lbnRpb25TcGFuLnNldEF0dHJpYnV0ZSgnY29udGVudGVkaXRhYmxlJywgJ2ZhbHNlJyk7XG4gICAgbWVudGlvblNwYW4udGV4dENvbnRlbnQgPSBgQCR7dXNlci5uYW1lfWA7XG5cbiAgICAvL0ZpbmQgY3VycmVudCBjdXJzb3IgcG9zaXRpb25cbiAgICBjb25zdCBuZXdSYW5nZSA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKT8uZ2V0UmFuZ2VBdCgwKTtcbiAgICBpZiAobmV3UmFuZ2UpIHtcbiAgICAgIG5ld1JhbmdlLmluc2VydE5vZGUobWVudGlvblNwYW4pO1xuICAgICAgLy9TZXQgdGhlIHJhbmdlIHN0YXJ0IGFuZCBlbmQgdG8gdGhlIHNhbWUgbG9jYXRpb24gKHJlbmRlcmluZyB0aGUgY3Vyc29yIGluIHRoZSByaWdodCBwb3NpdGlvbilcbiAgICAgIG5ld1JhbmdlLnNldFN0YXJ0QWZ0ZXIobWVudGlvblNwYW4pO1xuICAgICAgbmV3UmFuZ2Uuc2V0RW5kQWZ0ZXIobWVudGlvblNwYW4pO1xuICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpO1xuICAgICAgLy9BcHBseSB0aGlzIHJhbmdlIHRvIHRoZSBET01cbiAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShuZXdSYW5nZSk7XG4gICAgfVxuXG4gICAgdGhpcy5jbG9zZU1lbnRpb25zKCk7XG4gICAgdGhpcy5lbWl0Q29udGVudENoYW5nZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWxldGVBdE1lbnRpb25TZWFyY2goKTogdm9pZCB7XG4gICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgIGlmICghc2VsZWN0aW9uIHx8ICFzZWxlY3Rpb24ucmFuZ2VDb3VudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vVGhpcyByZXByZXNlbnRzIHRoZSBjdXJyZW50IHBvc2l0aW9uIG9mIHRoZSBjdXJzb3JcbiAgICBjb25zdCBjdXJzb3JSYW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApO1xuXG4gICAgLy9UaGlzIHdpbGwgcmV0dXJuIGFsbCBvZiB0aGUgcmF3IHRleHQgKEhUTUwtc3RyaXBwZWQpIGJlZm9yZSB0aGUgY3Vyc29yXG4gICAgY29uc3QgdGV4dEJlZm9yZUN1cnNvciA9IHRoaXMuZ2V0VGV4dEJlZm9yZUN1cnNvcihjdXJzb3JSYW5nZSk7XG4gICAgLy9XZSBkbyB0aGF0XiBzbyB0aGF0IHdlIGNhbiBmaW5kIHRoZSBjb3JyZWN0IGluZGV4IG9mIHRoZSBtb3N0IHJlY2VudCAnQCdcbiAgICBjb25zdCBsYXN0QXRJbmRleCA9IHRleHRCZWZvcmVDdXJzb3IubGFzdEluZGV4T2YoJ0AnKTtcblxuICAgIGlmIChsYXN0QXRJbmRleCA9PT0gLTEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvL0tub3dpbmcgdGhlIHBvc2l0aW9uIG9mIHRoZSBsYXN0ICdAJyBjaGFyYWN0ZXIgd2UgY2FuIG5vdyBmaW5kIHRoZSBhY3R1YWwgRE9NIG5vZGUgKyBvZmZzZXQgd2hlcmUgXCJAXCIgbGl2ZXNcbiAgICBjb25zdCBhdFBvc2l0aW9uID0gdGhpcy5maW5kRG9tUG9zaXRpb25BdENoYXJJbmRleChsYXN0QXRJbmRleCk7XG5cbiAgICBpZiAoIWF0UG9zaXRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgcmFuZ2UgZnJvbSBcIkBcIiB0byBjdXJzb3IgYW5kIGRlbGV0ZSBpdFxuICAgIGNvbnN0IGRlbGV0ZVJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcbiAgICBkZWxldGVSYW5nZS5zZXRTdGFydChhdFBvc2l0aW9uLm5vZGUsIGF0UG9zaXRpb24ub2Zmc2V0KTtcbiAgICBkZWxldGVSYW5nZS5zZXRFbmQoY3Vyc29yUmFuZ2UuZW5kQ29udGFpbmVyLCBjdXJzb3JSYW5nZS5lbmRPZmZzZXQpO1xuICAgIGRlbGV0ZVJhbmdlLmRlbGV0ZUNvbnRlbnRzKCk7XG4gIH1cblxuICBwcml2YXRlIGlzSW5zaWRlTWVudGlvblNwYW4obm9kZTogTm9kZSk6IGJvb2xlYW4ge1xuICAgIGxldCBjdXJyZW50Tm9kZTogTm9kZSB8IG51bGwgPSBub2RlO1xuICAgIHdoaWxlIChjdXJyZW50Tm9kZSAmJiBjdXJyZW50Tm9kZSAhPT0gdGhpcy5pbnB1dEVsZW1lbnQ/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIGlmIChcbiAgICAgICAgY3VycmVudE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFICYmXG4gICAgICAgIChjdXJyZW50Tm9kZSBhcyBIVE1MRWxlbWVudCkuZ2V0QXR0cmlidXRlKCdkYXRhLXR5cGUnKSA9PT0gJ21lbnRpb24nXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLnBhcmVudE5vZGU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vVGhpcyB3aWxsIGdvIHRleHQgbm9kZSBieSBub2RlIGxvb2tpbmcgZm9yIHRoZVxuICAvL0AgbWVudGlvbiBhbmQgZ2l2ZSBpdHMgcG9zaXRpb24gaW4gdGhlIGNvbnRleHQgb2YgdGhhdCBub2RlXG4gIHByaXZhdGUgZmluZERvbVBvc2l0aW9uQXRDaGFySW5kZXgoXG4gICAgY2hhckluZGV4OiBudW1iZXIsXG4gICk6IHsgbm9kZTogTm9kZTsgb2Zmc2V0OiBudW1iZXIgfSB8IG51bGwge1xuICAgIGlmICghdGhpcy5pbnB1dEVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIFdhbGsgdGhyb3VnaCBhbGwgdGV4dCBub2RlcyBpbiB0aGUgaW5wdXQsIGNvdW50aW5nIGNoYXJhY3RlcnNcbiAgICBjb25zdCB0cmVlV2Fsa2VyID0gZG9jdW1lbnQuY3JlYXRlVHJlZVdhbGtlcihcbiAgICAgIHRoaXMuaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQsXG4gICAgICBOb2RlRmlsdGVyLlNIT1dfVEVYVCxcbiAgICAgIG51bGwsXG4gICAgKTtcblxuICAgIGxldCBjaGFyQ291bnQgPSAwO1xuXG4gICAgd2hpbGUgKHRyZWVXYWxrZXIubmV4dE5vZGUoKSkge1xuICAgICAgY29uc3Qgbm9kZSA9IHRyZWVXYWxrZXIuY3VycmVudE5vZGU7XG4gICAgICBjb25zdCB0ZXh0ID0gbm9kZS50ZXh0Q29udGVudCB8fCAnJztcblxuICAgICAgLy8gQ2hlY2sgaWYgb3VyIHRhcmdldCBjaGFyYWN0ZXIgaXMgaW4gdGhpcyB0ZXh0IG5vZGVcbiAgICAgIGlmIChjaGFyQ291bnQgKyB0ZXh0Lmxlbmd0aCA+IGNoYXJJbmRleCkge1xuICAgICAgICAvLyBUaGUgY2hhcmFjdGVyIGF0IGNoYXJJbmRleCBpcyBpbiB0aGlzIG5vZGVcbiAgICAgICAgY29uc3Qgb2Zmc2V0SW5Ob2RlID0gY2hhckluZGV4IC0gY2hhckNvdW50O1xuICAgICAgICByZXR1cm4geyBub2RlLCBvZmZzZXQ6IG9mZnNldEluTm9kZSB9O1xuICAgICAgfVxuXG4gICAgICBjaGFyQ291bnQgKz0gdGV4dC5sZW5ndGg7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwcml2YXRlIGNsb3NlTWVudGlvbnMoKTogdm9pZCB7XG4gICAgdGhpcy5tZW50aW9uc1Zpc2libGUgPSBmYWxzZTtcbiAgICB0aGlzLm1lbnRpb25TZWFyY2hUZXh0ID0gJyc7XG4gICAgdGhpcy5tZW50aW9uQW5jaG9yID0gbnVsbDtcbiAgICB0aGlzLnNlbGVjdGVkVXNlckluZGV4ID0gMDtcbiAgICB0aGlzLnNhdmVkUmFuZ2UgPSBudWxsO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0Q29udGVudENoYW5nZSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaW5wdXRFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY29udGVudEl0ZW1zID0gdGhpcy5kb21Ub0NvbnRlbnRJdGVtcygpO1xuICAgIHRoaXMuY29udGVudENoYW5nZS5lbWl0KGNvbnRlbnRJdGVtcyk7XG4gIH1cblxuICBwcml2YXRlIGRvbVRvQ29udGVudEl0ZW1zKCk6IE1lbnRpb25zSW5wdXRDb21wb25lbnQuQ29udGVudEl0ZW1bXSB7XG4gICAgaWYgKCF0aGlzLmlucHV0RWxlbWVudD8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IGl0ZW1zOiBNZW50aW9uc0lucHV0Q29tcG9uZW50LkNvbnRlbnRJdGVtW10gPSBbXTtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC5jaGlsZE5vZGVzO1xuXG4gICAgZm9yIChjb25zdCBub2RlIG9mIEFycmF5LmZyb20oY2hpbGROb2RlcykpIHtcbiAgICAgIGlmIChub2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gbm9kZSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGVsZW1lbnQudGFnTmFtZSA9PT0gJ1NQQU4nICYmXG4gICAgICAgICAgZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtdHlwZScpID09PSAnbWVudGlvbidcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3QgaWQgPSBOdW1iZXIoZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtaWQnKSk7XG4gICAgICAgICAgY29uc3QgbmFtZSA9IGVsZW1lbnQudGV4dENvbnRlbnQ/LnJlcGxhY2UoJ0AnLCAnJykgfHwgJyc7XG4gICAgICAgICAgaXRlbXMucHVzaCh7IHR5cGU6ICdtZW50aW9uJywgaWQsIG5hbWUgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAobm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUpIHtcbiAgICAgICAgY29uc3QgdGV4dCA9IG5vZGUudGV4dENvbnRlbnQgfHwgJyc7XG4gICAgICAgIGlmICh0ZXh0KSB7XG4gICAgICAgICAgaXRlbXMucHVzaCh7IHR5cGU6ICd0ZXh0JywgdGV4dCB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaXRlbXM7XG4gIH1cblxuICBvbkNhbGxvdXRDbG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLmNsb3NlTWVudGlvbnMoKTtcbiAgfVxufVxuXG5leHBvcnQgbmFtZXNwYWNlIE1lbnRpb25zSW5wdXRDb21wb25lbnQge1xuICBleHBvcnQgY29uc3QgQ29udGVudFR5cGVzID0gWydtZW50aW9uJywgJ3RleHQnXSBhcyBjb25zdDtcbiAgZXhwb3J0IHR5cGUgQ29udGVudFR5cGUgPVxuICAgICh0eXBlb2YgTWVudGlvbnNJbnB1dENvbXBvbmVudC5Db250ZW50VHlwZXMpW251bWJlcl07XG4gIGV4cG9ydCBpbnRlcmZhY2UgVXNlciB7XG4gICAgaWQ6IG51bWJlcjtcbiAgICBuYW1lOiBzdHJpbmc7XG4gIH1cbiAgZXhwb3J0IHR5cGUgQ29udGVudDxUIGV4dGVuZHMgQ29udGVudFR5cGU+ID0geyB0eXBlOiBUIH07XG5cbiAgZXhwb3J0IHR5cGUgVXNlck1lbnRpb24gPSBDb250ZW50PCdtZW50aW9uJz4gJiBVc2VyO1xuICBleHBvcnQgdHlwZSBUZXh0ID0gQ29udGVudDwndGV4dCc+ICYgeyB0ZXh0OiBzdHJpbmcgfTtcblxuICBleHBvcnQgdHlwZSBDb250ZW50SXRlbSA9IFVzZXJNZW50aW9uIHwgVGV4dDtcblxuICBleHBvcnQgZnVuY3Rpb24gY29udGVudFRvUGxhaW5UZXh0KGNvbnRlbnQ6IENvbnRlbnRJdGVtW10pOiBzdHJpbmcge1xuICAgIHJldHVybiBjb250ZW50XG4gICAgICAubWFwKGl0ZW0gPT4ge1xuICAgICAgICBzd2l0Y2ggKGl0ZW0udHlwZSkge1xuICAgICAgICAgIGNhc2UgJ21lbnRpb24nOlxuICAgICAgICAgICAgcmV0dXJuIGBAJHtpdGVtLm5hbWV9YDtcbiAgICAgICAgICBjYXNlICd0ZXh0JzpcbiAgICAgICAgICAgIHJldHVybiBpdGVtLnRleHQ7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICAuam9pbignJyk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJtZW50aW9ucy1jb250YWluZXJcIiAjY29udGFpbmVyPlxuICA8ZGl2XG4gICAgKm5nSWY9XCIhcmVhZG9ubHlcIlxuICAgICNpbnB1dFxuICAgIGNsYXNzPVwidGV4dC1jb250ZW50IGVkaXRhYmxlXCJcbiAgICBjb250ZW50ZWRpdGFibGU9XCJ0cnVlXCJcbiAgICBbYXR0ci5kYXRhLXBsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICAoaW5wdXQpPVwib25JbnB1dCgpXCJcbiAgICAoa2V5ZG93bik9XCJvbktleURvd24oJGV2ZW50KVwiXG4gICAgKHBhc3RlKT1cIm9uUGFzdGUoJGV2ZW50KVwiXG4gID48L2Rpdj5cblxuICA8ZGl2ICpuZ0lmPVwicmVhZG9ubHlcIiAjaW5wdXQgY2xhc3M9XCJ0ZXh0LWNvbnRlbnRcIj48L2Rpdj5cblxuICA8cml2LWNhbGxvdXRcbiAgICAqbmdJZj1cIiFyZWFkb25seSAmJiBtZW50aW9uc1Zpc2libGUgJiYgbWVudGlvbkFuY2hvclwiXG4gICAgW2FuY2hvcl09XCJtZW50aW9uQW5jaG9yXCJcbiAgICBbaXNNb2RhbF09XCJmYWxzZVwiXG4gICAgW3Nob3dDYXJldF09XCJmYWxzZVwiXG4gICAgW3ByZWZlcnJlZFBvc2l0aW9uXT1cIidib3R0b20tcmlnaHQnXCJcbiAgICBbdGhlbWVdPVwiJ2xpZ2h0J1wiXG4gICAgKGNsb3NlKT1cIm9uQ2FsbG91dENsb3NlKClcIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cIm1lbnRpb25zLWNvbnRlbnRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtZW50aW9ucy1oZWFkZXJcIj5NZW50aW9uIHNvbWVvbmU8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtZW50aW9ucy1saXN0XCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAqbmdGb3I9XCJsZXQgdXNlciBvZiBnZXRGaWx0ZXJlZFVzZXJzKCk7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICAgIFtjbGFzcy5zZWxlY3RlZF09XCJpID09PSBzZWxlY3RlZFVzZXJJbmRleFwiXG4gICAgICAgICAgKGNsaWNrKT1cInNlbGVjdFVzZXIodXNlcilcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgdXNlci5uYW1lIH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvcml2LWNhbGxvdXQ+XG48L2Rpdj5cbiJdfQ==
|