igniteui-angular 18.0.2 → 18.0.4
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/esm2022/lib/combo/combo.common.mjs +38 -19
- package/esm2022/lib/core/utils.mjs +1 -9
- package/esm2022/lib/grids/pivot-grid/pivot-grid.component.mjs +2 -1
- package/esm2022/lib/grids/state.directive.mjs +3 -3
- package/esm2022/lib/services/exporter-common/base-export-service.mjs +1 -1
- package/esm2022/lib/simple-combo/simple-combo.component.mjs +33 -8
- package/fesm2022/igniteui-angular.mjs +71 -35
- package/fesm2022/igniteui-angular.mjs.map +1 -1
- package/lib/combo/combo.common.d.ts +3 -1
- package/lib/core/styles/components/icon-button/_icon-button-theme.scss +1 -0
- package/lib/core/utils.d.ts +0 -8
- package/lib/grids/pivot-grid/pivot-grid.component.d.ts +1 -0
- package/lib/services/exporter-common/base-export-service.d.ts +2 -2
- package/package.json +1 -1
- package/styles/maps/igniteui-angular-dark.css.map +1 -1
- package/styles/maps/igniteui-angular.css.map +1 -1
- package/styles/maps/igniteui-bootstrap-dark.css.map +1 -1
- package/styles/maps/igniteui-bootstrap-light.css.map +1 -1
- package/styles/maps/igniteui-dark-green.css.map +1 -1
- package/styles/maps/igniteui-fluent-dark-excel.css.map +1 -1
- package/styles/maps/igniteui-fluent-dark-word.css.map +1 -1
- package/styles/maps/igniteui-fluent-dark.css.map +1 -1
- package/styles/maps/igniteui-fluent-light-excel.css.map +1 -1
- package/styles/maps/igniteui-fluent-light-word.css.map +1 -1
- package/styles/maps/igniteui-fluent-light.css.map +1 -1
- package/styles/maps/igniteui-indigo-dark.css.map +1 -1
- package/styles/maps/igniteui-indigo-light.css.map +1 -1
|
@@ -126,6 +126,7 @@ export class IgxPivotGridComponent extends IgxGridBaseDirective {
|
|
|
126
126
|
set superCompactMode(value) {
|
|
127
127
|
this._superCompactMode = value;
|
|
128
128
|
}
|
|
129
|
+
/** @hidden @internal */
|
|
129
130
|
get gridSize() {
|
|
130
131
|
if (this.superCompactMode) {
|
|
131
132
|
return Size.Small;
|
|
@@ -2073,4 +2074,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.1", ngImpor
|
|
|
2073
2074
|
}], emptyPivotGridTemplate: [{
|
|
2074
2075
|
type: Input
|
|
2075
2076
|
}] } });
|
|
2076
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGl2b3QtZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvcGl2b3QtZ3JpZC9waXZvdC1ncmlkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9ncmlkcy9waXZvdC1ncmlkL3Bpdm90LWdyaWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFHSCx1QkFBdUIsRUFFdkIsU0FBUyxFQUNULFlBQVksRUFFWixXQUFXLEVBQ1gsTUFBTSxFQUNOLEtBQUssRUFFTCxTQUFTLEVBR1QsTUFBTSxFQUNOLFFBQVEsRUFFUixXQUFXLEVBQ1gsU0FBUyxFQUNULFlBQVksRUFHWixZQUFZLEVBQ1osZUFBZSxFQUVmLHNCQUFzQixFQUN0QixnQkFBZ0IsRUFDbkIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUU1RixPQUFPLEVBQUUsS0FBSyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDOUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDMUUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDekUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLHlCQUF5QixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDN0csT0FBTyxFQUF3QixhQUFhLEVBQXFDLE1BQU0sMEJBQTBCLENBQUM7QUFDbEgsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JB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Z0JBQWdCLEVBQUU7Z0JBWWxCLElBQUk7c0JBRHZCLEtBQUs7Z0JBWWMsT0FBTztzQkFEMUIsS0FBSztnQkErQ2MsZ0JBQWdCO3NCQURuQyxLQUFLO2dCQWdDYyxXQUFXO3NCQUQ5QixLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQVlsQixPQUFPO3NCQUQxQixLQUFLO2dCQVdjLGVBQWU7c0JBRGxDLEtBQUs7Z0JBWWMsc0JBQXNCO3NCQUR6QyxLQUFLO2dCQVljLHFCQUFxQjtzQkFEeEMsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkEwQmxCLFlBQVk7c0JBRC9CLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBa0wzQixFQUFFO3NCQUZaLFdBQVc7dUJBQUMsU0FBUzs7c0JBQ3JCLEtBQUs7Z0JBZUssSUFBSTtzQkFEZCxLQUFLO2dCQStMYyxZQUFZO3NCQUQvQixLQUFLO2dCQWcvQkMsNkJBQTZCO3NCQURuQyxTQUFTO3VCQUFDLHdCQUF3QixFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQVlqRSxzQkFBc0I7c0JBRDVCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIEl0ZXJhYmxlRGlmZmVycyxcbiAgICBMT0NBTEVfSUQsXG4gICAgTmdab25lLFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgT3B0aW9uYWwsXG4gICAgUXVlcnlMaXN0LFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3Q2hpbGRyZW4sXG4gICAgVmlld0NvbnRhaW5lclJlZixcbiAgICBJbmplY3RvcixcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgY3JlYXRlQ29tcG9uZW50LFxuICAgIEVudmlyb25tZW50SW5qZWN0b3IsXG4gICAgQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQSxcbiAgICBib29sZWFuQXR0cmlidXRlXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRE9DVU1FTlQsIE5nVGVtcGxhdGVPdXRsZXQsIE5nSWYsIE5nQ2xhc3MsIE5nU3R5bGUsIE5nRm9yIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuaW1wb3J0IHsgZmlyc3R9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IElneEdyaWRCYXNlRGlyZWN0aXZlIH0gZnJvbSAnLi4vZ3JpZC1iYXNlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJZ3hGaWx0ZXJpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vZmlsdGVyaW5nL2dyaWQtZmlsdGVyaW5nLnNlcnZpY2UnO1xuaW1wb3J0IHsgSWd4R3JpZFNlbGVjdGlvblNlcnZpY2UgfSBmcm9tICcuLi9zZWxlY3Rpb24vc2VsZWN0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgSWd4Rm9yT2ZTeW5jU2VydmljZSwgSWd4Rm9yT2ZTY3JvbGxTeW5jU2VydmljZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvZm9yLW9mL2Zvcl9vZi5zeW5jLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29sdW1uVHlwZSwgR3JpZFR5cGUsIElHWF9HUklEX0JBU0UsIElneENvbHVtblRlbXBsYXRlQ29udGV4dCwgUm93VHlwZSB9IGZyb20gJy4uL2NvbW1vbi9ncmlkLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJZ3hHcmlkQ1JVRFNlcnZpY2UgfSBmcm9tICcuLi9jb21tb24vY3J1ZC5zZXJ2aWNlJztcbmltcG9ydCB7IElneEdyaWRTdW1tYXJ5U2VydmljZSB9IGZyb20gJy4uL3N1bW1hcmllcy9ncmlkLXN1bW1hcnkuc2VydmljZSc7XG5pbXBvcnQgeyBERUZBVUxUX1BJVk9UX0tFWVMsIElEaW1lbnNpb25zQ2hhbmdlLCBJZ3hQaXZvdEdyaWRWYWx1ZVRlbXBsYXRlQ29udGV4dCwgSVBpdm90Q29uZmlndXJhdGlvbiwgSVBpdm90Q29uZmlndXJhdGlvbkNoYW5nZWRFdmVudEFyZ3MsIElQaXZvdERpbWVuc2lvbiwgSVBpdm90VmFsdWUsIElWYWx1ZXNDaGFuZ2UsIFBpdm90RGltZW5zaW9uVHlwZSwgSVBpdm90VUlTZXR0aW5ncyB9IGZyb20gJy4vcGl2b3QtZ3JpZC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSWd4UGl2b3RIZWFkZXJSb3dDb21wb25lbnQgfSBmcm9tICcuL3Bpdm90LWhlYWRlci1yb3cuY29tcG9uZW50JztcbmltcG9ydCB7IElneENvbHVtbkdyb3VwQ29tcG9uZW50IH0gZnJvbSAnLi4vY29sdW1ucy9jb2x1bW4tZ3JvdXAuY29tcG9uZW50JztcbmltcG9ydCB7IElneENvbHVtbkNvbXBvbmVudCB9IGZyb20gJy4uL2NvbHVtbnMvY29sdW1uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQaXZvdFV0aWwgfSBmcm9tICcuL3Bpdm90LXV0aWwnO1xuaW1wb3J0IHsgRmlsdGVyTW9kZSwgR3JpZFBhZ2luZ01vZGUsIEdyaWRTdW1tYXJ5Q2FsY3VsYXRpb25Nb2RlLCBHcmlkU3VtbWFyeVBvc2l0aW9uLCBTaXplIH0gZnJvbSAnLi4vY29tbW9uL2VudW1zJztcbmltcG9ydCB7IFdhdGNoQ2hhbmdlcyB9IGZyb20gJy4uL3dhdGNoLWNoYW5nZXMnO1xuaW1wb3J0IHsgT3ZlcmxheVNldHRpbmdzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcHVibGljX2FwaSc7XG5pbXBvcnQge1xuICAgIElHcmlkRWRpdEV2ZW50QXJncyxcbiAgICBJQ2VsbFBvc2l0aW9uLFxuICAgIElDb2x1bW5Nb3ZpbmdFbmRFdmVudEFyZ3MsIElDb2x1bW5Nb3ZpbmdFdmVudEFyZ3MsIElDb2x1bW5Nb3ZpbmdTdGFydEV2ZW50QXJncyxcbiAgICBJQ29sdW1uVmlzaWJpbGl0eUNoYW5nZWRFdmVudEFyZ3MsXG4gICAgSUdyaWRFZGl0RG9uZUV2ZW50QXJncyxcbiAgICBJR3JpZFRvb2xiYXJFeHBvcnRFdmVudEFyZ3MsXG4gICAgSVBpbkNvbHVtbkNhbmNlbGxhYmxlRXZlbnRBcmdzLFxuICAgIElQaW5Db2x1bW5FdmVudEFyZ3MsXG4gICAgSVBpblJvd0V2ZW50QXJncyxcbiAgICBJUm93RGF0YUNhbmNlbGFibGVFdmVudEFyZ3MsXG4gICAgSVJvd0RhdGFFdmVudEFyZ3MsXG4gICAgSVJvd0RyYWdFbmRFdmVudEFyZ3MsXG4gICAgSVJvd0RyYWdTdGFydEV2ZW50QXJnc1xufSBmcm9tICcuLi9jb21tb24vZXZlbnRzJztcbmltcG9ydCB7IElneEdyaWRSb3dDb21wb25lbnQgfSBmcm9tICcuLi9ncmlkL2dyaWQtcm93LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEcm9wUG9zaXRpb24gfSBmcm9tICcuLi9tb3ZpbmcvbW92aW5nLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGltZW5zaW9uVmFsdWVzRmlsdGVyaW5nU3RyYXRlZ3ksIE5vb3BQaXZvdERpbWVuc2lvbnNTdHJhdGVneSB9IGZyb20gJy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9waXZvdC1zdHJhdGVneSc7XG5pbXBvcnQgeyBJZ3hHcmlkRXhjZWxTdHlsZUZpbHRlcmluZ0NvbXBvbmVudCwgSWd4RXhjZWxTdHlsZUNvbHVtbk9wZXJhdGlvbnNUZW1wbGF0ZURpcmVjdGl2ZSwgSWd4RXhjZWxTdHlsZUZpbHRlck9wZXJhdGlvbnNUZW1wbGF0ZURpcmVjdGl2ZSB9IGZyb20gJy4uL2ZpbHRlcmluZy9leGNlbC1zdHlsZS9leGNlbC1zdHlsZS1maWx0ZXJpbmcuY29tcG9uZW50JztcbmltcG9ydCB7IElneFBpdm90R3JpZE5hdmlnYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9waXZvdC1ncmlkLW5hdmlnYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBJZ3hQaXZvdENvbHVtblJlc2l6aW5nU2VydmljZSB9IGZyb20gJy4uL3Jlc2l6aW5nL3Bpdm90LWdyaWQvcGl2b3QtcmVzaXppbmcuc2VydmljZSc7XG5pbXBvcnQgeyBJZ3hGbGF0VHJhbnNhY3Rpb25GYWN0b3J5LCBJZ3hPdmVybGF5U2VydmljZSwgU3RhdGUsIFRyYW5zYWN0aW9uLCBUcmFuc2FjdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wdWJsaWNfYXBpJztcbmltcG9ydCB7IGNsb25lQXJyYXksIFBsYXRmb3JtVXRpbCB9IGZyb20gJy4uLy4uL2NvcmUvdXRpbHMnO1xuaW1wb3J0IHsgSWd4UGl2b3RGaWx0ZXJpbmdTZXJ2aWNlIH0gZnJvbSAnLi9waXZvdC1maWx0ZXJpbmcuc2VydmljZSc7XG5pbXBvcnQgeyBEYXRhVXRpbCB9IGZyb20gJy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9kYXRhLXV0aWwnO1xuaW1wb3J0IHsgSUZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSB9IGZyb20gJy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9maWx0ZXJpbmctZXhwcmVzc2lvbnMtdHJlZSc7XG5pbXBvcnQgeyBJZ3hHcmlkVHJhbnNhY3Rpb24gfSBmcm9tICcuLi9jb21tb24vdHlwZXMnO1xuaW1wb3J0IHsgR3JpZEJhc2VBUElTZXJ2aWNlIH0gZnJvbSAnLi4vYXBpLnNlcnZpY2UnO1xuaW1wb3J0IHsgSWd4R3JpZEZvck9mRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9mb3Itb2YvZm9yX29mLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJZ3hQaXZvdFJvd0RpbWVuc2lvbkNvbnRlbnRDb21wb25lbnQgfSBmcm9tICcuL3Bpdm90LXJvdy1kaW1lbnNpb24tY29udGVudC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4UGl2b3RHcmlkQ29sdW1uUmVzaXplckNvbXBvbmVudCB9IGZyb20gJy4uL3Jlc2l6aW5nL3Bpdm90LWdyaWQvcGl2b3QtcmVzaXplci5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4QWN0aW9uU3RyaXBUb2tlbiB9IGZyb20gJy4uLy4uL2FjdGlvbi1zdHJpcC90b2tlbic7XG5pbXBvcnQgeyBJU29ydGluZ0V4cHJlc3Npb24sIFNvcnRpbmdEaXJlY3Rpb24gfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvc29ydGluZy1zdHJhdGVneSc7XG5pbXBvcnQgeyBQaXZvdFNvcnRVdGlsIH0gZnJvbSAnLi9waXZvdC1zb3J0LXV0aWwnO1xuaW1wb3J0IHsgSUZpbHRlcmluZ1N0cmF0ZWd5IH0gZnJvbSAnLi4vLi4vZGF0YS1vcGVyYXRpb25zL2ZpbHRlcmluZy1zdHJhdGVneSc7XG5pbXBvcnQgeyBJZ3hQaXZvdFJvd0RpbWVuc2lvbkhlYWRlclRlbXBsYXRlRGlyZWN0aXZlLCBJZ3hQaXZvdFZhbHVlQ2hpcFRlbXBsYXRlRGlyZWN0aXZlIH0gZnJvbSAnLi9waXZvdC1ncmlkLmRpcmVjdGl2ZXMnO1xuaW1wb3J0IHsgSUZpbHRlcmluZ09wZXJhdGlvbiB9IGZyb20gJy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9maWx0ZXJpbmctY29uZGl0aW9uJztcbmltcG9ydCB7IElneEdyaWRWYWxpZGF0aW9uU2VydmljZSB9IGZyb20gJy4uL2dyaWQvZ3JpZC12YWxpZGF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgSWd4UGl2b3RSb3dQaXBlLCBJZ3hQaXZvdFJvd0V4cGFuc2lvblBpcGUsIElneFBpdm90QXV0b1RyYW5zZm9ybSwgSWd4UGl2b3RDb2x1bW5QaXBlLCBJZ3hQaXZvdEdyaWRGaWx0ZXJQaXBlLCBJZ3hQaXZvdEdyaWRTb3J0aW5nUGlwZSwgSWd4UGl2b3RHcmlkQ29sdW1uU29ydGluZ1BpcGUsIElneFBpdm90Q2VsbE1lcmdpbmdQaXBlIH0gZnJvbSAnLi9waXZvdC1ncmlkLnBpcGVzJztcbmltcG9ydCB7IElneEdyaWRSb3dDbGFzc2VzUGlwZSwgSWd4R3JpZFJvd1N0eWxlc1BpcGUgfSBmcm9tICcuLi9jb21tb24vcGlwZXMnO1xuaW1wb3J0IHsgSWd4RXhjZWxTdHlsZVNlYXJjaENvbXBvbmVudCB9IGZyb20gJy4uL2ZpbHRlcmluZy9leGNlbC1zdHlsZS9leGNlbC1zdHlsZS1zZWFyY2guY29tcG9uZW50JztcbmltcG9ydCB7IElneEljb25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9pY29uL2ljb24uY29tcG9uZW50JztcbmltcG9ydCB7IElneFNuYWNrYmFyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vc25hY2tiYXIvc25hY2tiYXIuY29tcG9uZW50JztcbmltcG9ydCB7IElneENpcmN1bGFyUHJvZ3Jlc3NCYXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9wcm9ncmVzc2Jhci9wcm9ncmVzc2Jhci5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4VG9nZ2xlRGlyZWN0aXZlLCBJZ3hPdmVybGF5T3V0bGV0RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy90b2dnbGUvdG9nZ2xlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJZ3hQaXZvdFJvd0NvbXBvbmVudCB9IGZyb20gJy4vcGl2b3Qtcm93LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hUZW1wbGF0ZU91dGxldERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvdGVtcGxhdGUtb3V0bGV0L3RlbXBsYXRlX291dGxldC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSWd4Q29sdW1uTW92aW5nRHJvcERpcmVjdGl2ZSB9IGZyb20gJy4uL21vdmluZy9tb3ZpbmcuZHJvcC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSWd4R3JpZERyYWdTZWxlY3REaXJlY3RpdmUgfSBmcm9tICcuLi9zZWxlY3Rpb24vZHJhZy1zZWxlY3QuZGlyZWN0aXZlJztcbmltcG9ydCB7IElneEdyaWRCb2R5RGlyZWN0aXZlIH0gZnJvbSAnLi4vZ3JpZC5jb21tb24nO1xuaW1wb3J0IHsgSWd4Q29sdW1uUmVzaXppbmdTZXJ2aWNlIH0gZnJvbSAnLi4vcmVzaXppbmcvcmVzaXppbmcuc2VydmljZSc7XG5pbXBvcnQgeyBEZWZhdWx0RGF0YUNsb25lU3RyYXRlZ3ksIElEYXRhQ2xvbmVTdHJhdGVneSB9IGZyb20gJy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9kYXRhLWNsb25lLXN0cmF0ZWd5JztcbmltcG9ydCB7IElneFRleHRIaWdobGlnaHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy90ZXh0LWhpZ2hsaWdodC90ZXh0LWhpZ2hsaWdodC5zZXJ2aWNlJztcbmltcG9ydCB7IElneFBpdm90Um93SGVhZGVyR3JvdXBDb21wb25lbnQgfSBmcm9tICcuL3Bpdm90LXJvdy1oZWFkZXItZ3JvdXAuY29tcG9uZW50JztcbmltcG9ydCB7IElneFBpdm90RGF0ZURpbWVuc2lvbiB9IGZyb20gJy4vcGl2b3QtZ3JpZC1kaW1lbnNpb25zJztcblxubGV0IE5FWFRfSUQgPSAwO1xuY29uc3QgTUlOSU1VTV9DT0xVTU5fV0lEVEggPSAyMDA7XG5jb25zdCBNSU5JTVVNX0NPTFVNTl9XSURUSF9TVVBFUl9DT01QQUNUID0gMTA0O1xuXG4vKipcbiAqIFBpdm90IEdyaWQgcHJvdmlkZXMgYSB3YXkgdG8gcHJlc2VudCBhbmQgbWFuaXB1bGF0ZSBkYXRhIGluIGEgcGl2b3QgdGFibGUgdmlldy5cbiAqXG4gKiBAaWd4TW9kdWxlIElneFBpdm90R3JpZE1vZHVsZVxuICogQGlneEdyb3VwIEdyaWRzICYgTGlzdHNcbiAqIEBpZ3hLZXl3b3JkcyBwaXZvdCwgZ3JpZCwgdGFibGVcbiAqIEBpZ3hUaGVtZSBpZ3gtZ3JpZC10aGVtZVxuICogQHJlbWFya3NcbiAqIFRoZSBJZ25pdGUgVUkgUGl2b3QgR3JpZCBpcyB1c2VkIGZvciBncm91cGluZyBhbmQgYWdncmVnYXRpbmcgc2ltcGxlIGZsYXQgZGF0YSBpbnRvIGEgcGl2b3QgdGFibGUuICBPbmNlIGRhdGFcbiAqIGhhcyBiZWVuIGJvdW5kIGFuZCB0aGUgZGltZW5zaW9ucyBhbmQgdmFsdWVzIGNvbmZpZ3VyZWQgaXQgY2FuIGJlIG1hbmlwdWxhdGVkIHZpYSBzb3J0aW5nIGFuZCBmaWx0ZXJpbmcuXG4gKiBAZXhhbXBsZVxuICogYGBgaHRtbFxuICogPGlneC1waXZvdC1ncmlkIFtkYXRhXT1cImRhdGFcIiBbcGl2b3RDb25maWd1cmF0aW9uXT1cImNvbmZpZ3VyYXRpb25cIj5cbiAqIDwvaWd4LXBpdm90LWdyaWQ+XG4gKiBgYGBcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgcHJlc2VydmVXaGl0ZXNwYWNlczogZmFsc2UsXG4gICAgc2VsZWN0b3I6ICdpZ3gtcGl2b3QtZ3JpZCcsXG4gICAgdGVtcGxhdGVVcmw6ICdwaXZvdC1ncmlkLmNvbXBvbmVudC5odG1sJyxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgSWd4R3JpZENSVURTZXJ2aWNlLFxuICAgICAgICBJZ3hHcmlkVmFsaWRhdGlvblNlcnZpY2UsXG4gICAgICAgIElneEdyaWRTdW1tYXJ5U2VydmljZSxcbiAgICAgICAgSWd4R3JpZFNlbGVjdGlvblNlcnZpY2UsXG4gICAgICAgIElneENvbHVtblJlc2l6aW5nU2VydmljZSxcbiAgICAgICAgR3JpZEJhc2VBUElTZXJ2aWNlLFxuICAgICAgICB7IHByb3ZpZGU6IElHWF9HUklEX0JBU0UsIHVzZUV4aXN0aW5nOiBJZ3hQaXZvdEdyaWRDb21wb25lbnQgfSxcbiAgICAgICAgeyBwcm92aWRlOiBJZ3hGaWx0ZXJpbmdTZXJ2aWNlLCB1c2VDbGFzczogSWd4UGl2b3RGaWx0ZXJpbmdTZXJ2aWNlIH0sXG4gICAgICAgIElneFBpdm90R3JpZE5hdmlnYXRpb25TZXJ2aWNlLFxuICAgICAgICBJZ3hQaXZvdENvbHVtblJlc2l6aW5nU2VydmljZSxcbiAgICAgICAgSWd4Rm9yT2ZTeW5jU2VydmljZSxcbiAgICAgICAgSWd4Rm9yT2ZTY3JvbGxTeW5jU2VydmljZVxuICAgIF0sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIE5nSWYsXG4gICAgICAgIE5nRm9yLFxuICAgICAgICBOZ0NsYXNzLFxuICAgICAgICBOZ1N0eWxlLFxuICAgICAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgICAgICBJZ3hQaXZvdEhlYWRlclJvd0NvbXBvbmVudCxcbiAgICAgICAgSWd4R3JpZEJvZHlEaXJlY3RpdmUsXG4gICAgICAgIElneEdyaWREcmFnU2VsZWN0RGlyZWN0aXZlLFxuICAgICAgICBJZ3hDb2x1bW5Nb3ZpbmdEcm9wRGlyZWN0aXZlLFxuICAgICAgICBJZ3hHcmlkRm9yT2ZEaXJlY3RpdmUsXG4gICAgICAgIElneFRlbXBsYXRlT3V0bGV0RGlyZWN0aXZlLFxuICAgICAgICBJZ3hQaXZvdFJvd0NvbXBvbmVudCxcbiAgICAgICAgSWd4VG9nZ2xlRGlyZWN0aXZlLFxuICAgICAgICBJZ3hDaXJjdWxhclByb2dyZXNzQmFyQ29tcG9uZW50LFxuICAgICAgICBJZ3hTbmFja2JhckNvbXBvbmVudCxcbiAgICAgICAgSWd4T3ZlcmxheU91dGxldERpcmVjdGl2ZSxcbiAgICAgICAgSWd4UGl2b3RHcmlkQ29sdW1uUmVzaXplckNvbXBvbmVudCxcbiAgICAgICAgSWd4SWNvbkNvbXBvbmVudCxcbiAgICAgICAgSWd4UGl2b3RSb3dEaW1lbnNpb25Db250ZW50Q29tcG9uZW50LFxuICAgICAgICBJZ3hHcmlkRXhjZWxTdHlsZUZpbHRlcmluZ0NvbXBvbmVudCxcbiAgICAgICAgSWd4RXhjZWxTdHlsZUNvbHVtbk9wZXJhdGlvbnNUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICAgICAgSWd4RXhjZWxTdHlsZUZpbHRlck9wZXJhdGlvbnNUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICAgICAgSWd4RXhjZWxTdHlsZVNlYXJjaENvbXBvbmVudCxcbiAgICAgICAgSWd4R3JpZFJvd0NsYXNzZXNQaXBlLFxuICAgICAgICBJZ3hHcmlkUm93U3R5bGVzUGlwZSxcbiAgICAgICAgSWd4UGl2b3RSb3dQaXBlLFxuICAgICAgICBJZ3hQaXZvdFJvd0V4cGFuc2lvblBpcGUsXG4gICAgICAgIElneFBpdm90QXV0b1RyYW5zZm9ybSxcbiAgICAgICAgSWd4UGl2b3RDb2x1bW5QaXBlLFxuICAgICAgICBJZ3hQaXZvdEdyaWRGaWx0ZXJQaXBlLFxuICAgICAgICBJZ3hQaXZvdEdyaWRTb3J0aW5nUGlwZSxcbiAgICAgICAgSWd4UGl2b3RHcmlkQ29sdW1uU29ydGluZ1BpcGUsXG4gICAgICAgIElneFBpdm90Q2VsbE1lcmdpbmdQaXBlXG4gICAgXSxcbiAgICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV1cbn0pXG5leHBvcnQgY2xhc3MgSWd4UGl2b3RHcmlkQ29tcG9uZW50IGV4dGVuZHMgSWd4R3JpZEJhc2VEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyQ29udGVudEluaXQsXG4gICAgR3JpZFR5cGUsIEFmdGVyVmlld0luaXQge1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCB3aGVuIHRoZSBkaW1lbnNpb24gY29sbGVjdGlvbiBpcyBjaGFuZ2VkIHZpYSB0aGUgZ3JpZCBjaGlwIGFyZWEuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIFJldHVybnMgdGhlIG5ldyBkaW1lbnNpb24gY29sbGVjdGlvbiBhbmQgaXRzIHR5cGU6XG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1waXZvdC1ncmlkICNncmlkIFtkYXRhXT1cImxvY2FsRGF0YVwiIFtoZWlnaHRdPVwiJzMwNXB4J1wiXG4gICAgICogICAgICAgICAgICAgIChkaW1lbnNpb25zQ2hhbmdlKT1cImRpbWVuc2lvbnNDaGFuZ2UoJGV2ZW50KVwiPjwvaWd4LWdyaWQ+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGRpbWVuc2lvbnNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPElEaW1lbnNpb25zQ2hhbmdlPigpO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCB3aGVuIGFueSBvZiB0aGUgcGl2b3RDb25maWd1cmF0aW9uIHByb3BlcnRpZXMgaXMgY2hhbmdlZCB2aWEgdGhlIGdyaWQgY2hpcCBhcmVhLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1waXZvdC1ncmlkICNncmlkIFtkYXRhXT1cImxvY2FsRGF0YVwiIFtoZWlnaHRdPVwiJzMwNXB4J1wiXG4gICAgICogICAgICAgICAgICAgIChwaXZvdENvbmZpZ3VyYXRpb25DaGFuZ2VkKT1cImNvbmZpZ3VyYXRpb25DaGFuZ2VkKCRldmVudClcIj48L2lneC1ncmlkPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBwaXZvdENvbmZpZ3VyYXRpb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPElQaXZvdENvbmZpZ3VyYXRpb25DaGFuZ2VkRXZlbnRBcmdzPigpO1xuXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIGRpbWVuc2lvbiBpcyBpbml0aWFsaXplZC5cbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIEVtaXRzIHRoZSBkaW1lbnNpb24gdGhhdCBpcyBhYm91dCB0byBiZSBpbml0aWFsaXplZC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXBpdm90LWdyaWQgI2dyaWQgW2RhdGFdPVwibG9jYWxEYXRhXCIgW2hlaWdodF09XCInMzA1cHgnXCJcbiAgICAgKiAgICAgICAgICAgICAgKGRpbWVuc2lvbkluaXQpPVwiZGltZW5zaW9uSW5pdCgkZXZlbnQpXCI+PC9pZ3gtcGl2b3QtZ3JpZD5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgZGltZW5zaW9uSW5pdCA9IG5ldyBFdmVudEVtaXR0ZXI8SVBpdm90RGltZW5zaW9uPigpO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCB3aGVuIHRoZSB2YWx1ZSBpcyBpbml0aWFsaXplZC5cbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIEVtaXRzIHRoZSB2YWx1ZSB0aGF0IGlzIGFib3V0IHRvIGJlIGluaXRpYWxpemVkLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtcGl2b3QtZ3JpZCAjZ3JpZCBbZGF0YV09XCJsb2NhbERhdGFcIiBbaGVpZ2h0XT1cIiczMDVweCdcIlxuICAgICAqICAgICAgICAgICAgICAodmFsdWVJbml0KT1cInZhbHVlSW5pdCgkZXZlbnQpXCI+PC9pZ3gtcGl2b3QtZ3JpZD5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgdmFsdWVJbml0ID0gbmV3IEV2ZW50RW1pdHRlcjxJUGl2b3RWYWx1ZT4oKTtcblxuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCB3aGVuIGEgZGltZW5zaW9uIGlzIHNvcnRlZC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtcGl2b3QtZ3JpZCAjZ3JpZCBbZGF0YV09XCJsb2NhbERhdGFcIiBbaGVpZ2h0XT1cIiczMDVweCdcIlxuICAgICAqICAgICAgICAgICAgICAoZGltZW5zaW9uc1NvcnRpbmdFeHByZXNzaW9uc0NoYW5nZSk9XCJkaW1lbnNpb25zU29ydGluZ0V4cHJlc3Npb25zQ2hhbmdlKCRldmVudClcIj48L2lneC1waXZvdC1ncmlkPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBkaW1lbnNpb25zU29ydGluZ0V4cHJlc3Npb25zQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxJU29ydGluZ0V4cHJlc3Npb25bXT4oKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiB0aGUgdmFsdWVzIGNvbGxlY3Rpb24gaXMgY2hhbmdlZCB2aWEgdGhlIGdyaWQgY2hpcCBhcmVhLlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBSZXR1cm5zIHRoZSBuZXcgZGltZW5zaW9uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1waXZvdC1ncmlkICNncmlkIFtkYXRhXT1cImxvY2FsRGF0YVwiIFtoZWlnaHRdPVwiJzMwNXB4J1wiXG4gICAgICogICAgICAgICAgICAgICh2YWx1ZXNDaGFuZ2UpPVwidmFsdWVzQ2hhbmdlKCRldmVudClcIj48L2lneC1ncmlkPlxuICAgICAqIGBgYFxuICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHZhbHVlc0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8SVZhbHVlc0NoYW5nZT4oKTtcblxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgc29ydGluZyBleHByZXNzaW9ucyBnZW5lcmF0ZWQgZm9yIHRoZSBkaW1lbnNpb25zLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogY29uc3QgZXhwcmVzc2lvbnMgPSB0aGlzLmdyaWQuZGltZW5zaW9uc1NvcnRpbmdFeHByZXNzaW9ucztcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGRpbWVuc2lvbnNTb3J0aW5nRXhwcmVzc2lvbnMoKSB7XG4gICAgICAgIGNvbnN0IGFsbEVuYWJsZWREaW1lbnNpb25zID0gdGhpcy5yb3dEaW1lbnNpb25zLmNvbmNhdCh0aGlzLmNvbHVtbkRpbWVuc2lvbnMpO1xuICAgICAgICBjb25zdCBkaW1lbnNpb25zU29ydGluZ0V4cHJlc3Npb25zID0gUGl2b3RTb3J0VXRpbC5nZW5lcmF0ZURpbWVuc2lvblNvcnRpbmdFeHByZXNzaW9ucyhhbGxFbmFibGVkRGltZW5zaW9ucyk7XG4gICAgICAgIHJldHVybiBkaW1lbnNpb25zU29ydGluZ0V4cHJlc3Npb25zO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIEBWaWV3Q2hpbGQoSWd4UGl2b3RIZWFkZXJSb3dDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pXG4gICAgcHVibGljIG92ZXJyaWRlIHRoZWFkUm93OiBJZ3hQaXZvdEhlYWRlclJvd0NvbXBvbmVudDtcblxuICAgIC8qKlxuICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAqL1xuICAgIEBDb250ZW50Q2hpbGQoSWd4UGl2b3RWYWx1ZUNoaXBUZW1wbGF0ZURpcmVjdGl2ZSwgeyByZWFkOiBJZ3hQaXZvdFZhbHVlQ2hpcFRlbXBsYXRlRGlyZWN0aXZlIH0pXG4gICAgcHJvdGVjdGVkIHZhbHVlQ2hpcFRlbXBsYXRlRGlyZWN0aXZlOiBJZ3hQaXZvdFZhbHVlQ2hpcFRlbXBsYXRlRGlyZWN0aXZlO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkKElneFBpdm90Um93RGltZW5zaW9uSGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUsIHsgcmVhZDogSWd4UGl2b3RSb3dEaW1lbnNpb25IZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZSB9KVxuICAgIHByb3RlY3RlZCByb3dEaW1lbnNpb25IZWFkZXJEaXJlY3RpdmU6IElneFBpdm90Um93RGltZW5zaW9uSGVhZGVyVGVtcGxhdGVEaXJlY3RpdmU7XG5cbiAgICAvKipcbiAgICAgKiBHZXRzL1NldHMgYSBjdXN0b20gdGVtcGxhdGUgZm9yIHRoZSB2YWx1ZSBjaGlwcy5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtcGl2b3QtZ3JpZCBbdmFsdWVDaGlwVGVtcGxhdGVdPVwibXlUZW1wbGF0ZVwiPjxpZ3gtcGl2b3QtZ3JpZD5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyB2YWx1ZUNoaXBUZW1wbGF0ZTogVGVtcGxhdGVSZWY8SWd4UGl2b3RHcmlkVmFsdWVUZW1wbGF0ZUNvbnRleHQ+O1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgcm93RGltZW5zaW9uSGVhZGVyVGVtcGxhdGU6IFRlbXBsYXRlUmVmPElneENvbHVtblRlbXBsYXRlQ29udGV4dD47XG5cbiAgICBASW5wdXQoKVxuICAgIC8qKlxuICAgICAqIEdldHMvU2V0cyB0aGUgcGl2b3QgY29uZmlndXJhdGlvbiB3aXRoIGFsbCByZWxhdGVkIGRpbWVuc2lvbnMgYW5kIHZhbHVlcy5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtcGl2b3QtZ3JpZCBbcGl2b3RDb25maWd1cmF0aW9uXT1cImNvbmZpZ1wiPjwvaWd4LXBpdm90LWdyaWQ+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIHNldCBwaXZvdENvbmZpZ3VyYXRpb24odmFsdWU6IElQaXZvdENvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgdGhpcy5fcGl2b3RDb25maWd1cmF0aW9uID0gdmFsdWU7XG4gICAgICAgIHRoaXMuZW1pdEluaXRFdmVudHModGhpcy5fcGl2b3RDb25maWd1cmF0aW9uKTtcbiAgICAgICAgdGhpcy5maWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUgPSBQaXZvdFV0aWwuYnVpbGRFeHByZXNzaW9uVHJlZSh2YWx1ZSk7XG4gICAgICAgIGlmICghdGhpcy5faW5pdCkge1xuICAgICAgICAgICAgdGhpcy5zZXR1cENvbHVtbnMoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm5vdGlmeUNoYW5nZXModHJ1ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBwaXZvdENvbmZpZ3VyYXRpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9waXZvdENvbmZpZ3VyYXRpb24gfHwgeyByb3dzOiBudWxsLCBjb2x1bW5zOiBudWxsLCB2YWx1ZXM6IG51bGwsIGZpbHRlcnM6IG51bGwgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzL1NldHMgd2hldGhlciB0byBhdXRvLWdlbmVyYXRlIHRoZSBwaXZvdCBjb25maWd1cmF0aW9uIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBkYXRhLlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBmYWxzZS4gV2hlbiBzZXQgdG8gdHJ1ZSwgaXQgd2lsbCBvdmVycmlkZSBhbGwgZGltZW5zaW9ucyBhbmQgdmFsdWVzIGluIHRoZSBwaXZvdENvbmZpZ3VyYXRpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1waXZvdC1ncmlkIFtkYXRhXT1cIkRhdGFcIiBbYXV0b0dlbmVyYXRlQ29uZmlnXT1cInRydWVcIj48L2lneC1waXZvdC1ncmlkPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICAgIHB1YmxpYyBhdXRvR2VuZXJhdGVDb25maWcgPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpXG4gICAgLyoqXG4gICAgICogR2V0cy9TZXRzIHRoZSBwaXZvdCB1aSBzZXR0aW5ncyBmb3IgdGhlIHBpdm90IGdyaWQgLSBjaGlwcyBhbmQgdGhlaXJcbiAgICAgKiBjb3JyZXNwb25kaW5nIGNvbnRhaW5lcnMgZm9yIHJvdywgZmlsdGVyLCBjb2x1bW4gZGltZW5zaW9ucyBhbmQgdmFsdWVzXG4gICAgICogYXMgd2VsbCBhcyBoZWFkZXJzIGZvciB0aGUgcm93IGRpbWVuc2lvbnMgdmFsdWVzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtcGl2b3QtZ3JpZCBbcGl2b3RVSV09XCJ7IHNob3dSb3dIZWFkZXJzOiB0cnVlIH1cIj48L2lneC1waXZvdC1ncmlkPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBzZXQgcGl2b3RVSSh2YWx1ZTogSVBpdm90VUlTZXR0aW5ncykge1xuICAgICAgICB0aGlzLl9waXZvdFVJID0gT2JqZWN0LmFzc2lnbih0aGlzLl9waXZvdFVJLCB2YWx1ZSB8fCB7fSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBwaXZvdFVJKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGl2b3RVSTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5yb2xlJylcbiAgICBwdWJsaWMgcm9sZSA9ICdncmlkJztcblxuXG4gICAgLyoqXG4gICAgICogRW5hYmxlcyBhIHN1cGVyIGNvbXBhY3QgdGhlbWUgZm9yIHRoZSBjb21wb25lbnQuXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBPdmVycmlkZXMgdGhlIGdyaWQgc2l6ZSBvcHRpb24gaWYgb25lIGlzIHNldC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXBpdm90LWdyaWQgW3N1cGVyQ29tcGFjdE1vZGVdPVwidHJ1ZVwiPjwvaWd4LXBpdm90LWdyaWQ+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtZ3JpZF9fcGl2b3QtLXN1cGVyLWNvbXBhY3QnKVxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBzdXBlckNvbXBhY3RNb2RlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc3VwZXJDb21wYWN0TW9kZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IHN1cGVyQ29tcGFjdE1vZGUodmFsdWUpIHtcbiAgICAgICAgdGhpcy5fc3VwZXJDb21wYWN0TW9kZSA9IHZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgZ3JpZFNpemUoKSB7XG4gICAgICAgIGlmICh0aGlzLnN1cGVyQ29tcGFjdE1vZGUpIHtcbiAgICAgICAgICAgIHJldHVybiBTaXplLlNtYWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdXBlci5ncmlkU2l6ZTtcbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIEdldHMvU2V0cyB0aGUgdmFsdWVzIGNsb25lIHN0cmF0ZWd5IG9mIHRoZSBwaXZvdCBncmlkIHdoZW4gYXNzaWduaW5nIHRoZW0gdG8gZGlmZmVyZW50IGRpbWVuc2lvbnMuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiAgPGlneC1waXZvdC1ncmlkICNncmlkIFtkYXRhXT1cImxvY2FsRGF0YVwiIFtwaXZvdFZhbHVlQ2xvbmVTdHJhdGVneV09XCJjdXN0b21DbG9uZVN0cmF0ZWd5XCI+PC9pZ3gtcGl2b3QtZ3JpZD5cbiAgICAgKiBgYGBcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBwaXZvdFZhbHVlQ2xvbmVTdHJhdGVneSgpOiBJRGF0YUNsb25lU3RyYXRlZ3kge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGl2b3RWYWx1ZUNsb25lU3RyYXRlZ3k7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBwaXZvdFZhbHVlQ2xvbmVTdHJhdGVneShzdHJhdGVneTogSURhdGFDbG9uZVN0cmF0ZWd5KSB7XG4gICAgICAgIGlmIChzdHJhdGVneSkge1xuICAgICAgICAgICAgdGhpcy5fcGl2b3RWYWx1ZUNsb25lU3RyYXRlZ3kgPSBzdHJhdGVneTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQFZpZXdDaGlsZCgncmVjb3JkX3RlbXBsYXRlJywgeyByZWFkOiBUZW1wbGF0ZVJlZiwgc3RhdGljOiB0cnVlIH0pXG4gICAgcHVibGljIHJlY29yZFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAVmlld0NoaWxkKCdoZWFkZXJUZW1wbGF0ZScsIHsgcmVhZDogVGVtcGxhdGVSZWYsIHN0YXRpYzogdHJ1ZSB9KVxuICAgIHB1YmxpYyBoZWFkZXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQFZpZXdDaGlsZChJZ3hQaXZvdEdyaWRDb2x1bW5SZXNpemVyQ29tcG9uZW50KVxuICAgIHB1YmxpYyBvdmVycmlkZSByZXNpemVMaW5lOiBJZ3hQaXZvdEdyaWRDb2x1bW5SZXNpemVyQ29tcG9uZW50O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAVmlld0NoaWxkcmVuKElneEdyaWRFeGNlbFN0eWxlRmlsdGVyaW5nQ29tcG9uZW50LCB7IHJlYWQ6IElneEdyaWRFeGNlbFN0eWxlRmlsdGVyaW5nQ29tcG9uZW50IH0pXG4gICAgcHVibGljIG92ZXJyaWRlIGV4Y2VsU3R5bGVGaWx0ZXJpbmdDb21wb25lbnRzOiBRdWVyeUxpc3Q8SWd4R3JpZEV4Y2VsU3R5bGVGaWx0ZXJpbmdDb21wb25lbnQ+O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAVmlld0NoaWxkcmVuKElneFBpdm90Um93RGltZW5zaW9uQ29udGVudENvbXBvbmVudClcbiAgICBwcm90ZWN0ZWQgcm93RGltZW5zaW9uQ29udGVudENvbGxlY3Rpb246IFF1ZXJ5TGlzdDxJZ3hQaXZvdFJvd0RpbWVuc2lvbkNvbnRlbnRDb21wb25lbnQ+O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZ2V0IG1pbkNvbHVtbldpZHRoKCkge1xuICAgICAgICBpZiAodGhpcy5zdXBlckNvbXBhY3RNb2RlKSB7XG4gICAgICAgICAgICByZXR1cm4gTUlOSU1VTV9DT0xVTU5fV0lEVEhfU1VQRVJfQ09NUEFDVDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBNSU5JTVVNX0NPTFVNTl9XSURUSDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQFZpZXdDaGlsZHJlbigndmVydGljYWxSb3dEaW1TY3JvbGxDb250YWluZXInLCB7IHJlYWQ6IElneEdyaWRGb3JPZkRpcmVjdGl2ZSB9KVxuICAgIHB1YmxpYyB2ZXJ0aWNhbFJvd0RpbVNjcm9sbENvbnRhaW5lcnM6IFF1ZXJ5TGlzdDxJZ3hHcmlkRm9yT2ZEaXJlY3RpdmU8YW55LCBhbnlbXT4+O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBvdmVycmlkZSBhZGRSb3dFbXB0eVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjx2b2lkPjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgb3ZlcnJpZGUgYXV0b0dlbmVyYXRlRXhjbHVkZTogc3RyaW5nW10gPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgb3ZlcnJpZGUgc25hY2tiYXJEaXNwbGF5VGltZSA9IDYwMDA7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBvdmVycmlkZSBjZWxsRWRpdCA9IG5ldyBFdmVudEVtaXR0ZXI8SUdyaWRFZGl0RXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgb3ZlcnJpZGUgY2VsbEVkaXREb25lID0gbmV3IEV2ZW50RW1pdHRlcjxJR3JpZEVkaXREb25lRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgb3ZlcnJpZGUgY2VsbEVkaXRFbnRlciA9IG5ldyBFdmVudEVtaXR0ZXI8SUdyaWRFZGl0RXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgb3ZlcnJpZGUgY2VsbEVkaXRFeGl0ID0gbmV3IEV2ZW50RW1pdHRlcjxJR3JpZEVkaXREb25lRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgb3ZlcnJpZGUgY29sdW1uTW92aW5nU3RhcnQgPSBuZXcgRXZlbnRFbWl0dGVyPElDb2x1bW5Nb3ZpbmdTdGFydEV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIGNvbHVtbk1vdmluZyA9IG5ldyBFdmVudEVtaXR0ZXI8SUNvbHVtbk1vdmluZ0V2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIGNvbHVtbk1vdmluZ0VuZCA9IG5ldyBFdmVudEVtaXR0ZXI8SUNvbHVtbk1vdmluZ0VuZEV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIGNvbHVtblBpbiA9IG5ldyBFdmVudEVtaXR0ZXI8SVBpbkNvbHVtbkNhbmNlbGxhYmxlRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgb3ZlcnJpZGUgY29sdW1uUGlubmVkID0gbmV3IEV2ZW50RW1pdHRlcjxJUGluQ29sdW1uRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgb3ZlcnJpZGUgcm93QWRkID0gbmV3IEV2ZW50RW1pdHRlcjxJUm93RGF0YUNhbmNlbGFibGVFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBvdmVycmlkZSByb3dBZGRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8SVJvd0RhdGFFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBvdmVycmlkZSByb3dEZWxldGVkID0gbmV3IEV2ZW50RW1pdHRlcjxJUm93RGF0YUV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIHJvd0RlbGV0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8SVJvd0RhdGFDYW5jZWxhYmxlRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgb3ZlcnJpZGUgcm93RHJhZ1N0YXJ0ID0gbmV3IEV2ZW50RW1pdHRlcjxJUm93RHJhZ1N0YXJ0RXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgb3ZlcnJpZGUgcm93RHJhZ0VuZCA9IG5ldyBFdmVudEVtaXR0ZXI8SVJvd0RyYWdFbmRFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBvdmVycmlkZSByb3dFZGl0RW50ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPElHcmlkRWRpdEV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIHJvd0VkaXQgPSBuZXcgRXZlbnRFbWl0dGVyPElHcmlkRWRpdEV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIHJvd0VkaXREb25lID0gbmV3IEV2ZW50RW1pdHRlcjxJR3JpZEVkaXREb25lRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgb3ZlcnJpZGUgcm93RWRpdEV4aXQgPSBuZXcgRXZlbnRFbWl0dGVyPElHcmlkRWRpdERvbmVFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBvdmVycmlkZSByb3dQaW5uaW5nID0gbmV3IEV2ZW50RW1pdHRlcjxJUGluUm93RXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgb3ZlcnJpZGUgcm93UGlubmVkID0gbmV3IEV2ZW50RW1pdHRlcjxJUGluUm93RXZlbnRBcmdzPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGNvbHVtbkdyb3VwU3RhdGVzID0gbmV3IE1hcDxzdHJpbmcsIGJvb2xlYW4+KCk7XG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGRpbWVuc2lvbkRhdGFDb2x1bW5zO1xuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgcGl2b3RLZXlzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5waXZvdENvbmZpZ3VyYXRpb24ucGl2b3RLZXlzIHx8IERFRkFVTFRfUElWT1RfS0VZUztcbiAgICB9XG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIG92ZXJyaWRlIGlzUGl2b3QgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZHJhZ1Jvd0lEID0gbnVsbDtcblxuICAgIC8qKlxuICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgcm9vdFN1bW1hcmllc0VuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyByb3dEaW1lbnNpb25SZXNpemluZyA9IHRydWU7XG5cbiAgICBwcml2YXRlIF9lbXB0eVJvd0RpbWVuc2lvbjogSVBpdm90RGltZW5zaW9uID0geyBtZW1iZXJOYW1lOiAnJywgZW5hYmxlZDogdHJ1ZSwgbGV2ZWw6IDAgfTtcbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgZW1wdHlSb3dEaW1lbnNpb24oKTogSVBpdm90RGltZW5zaW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VtcHR5Um93RGltZW5zaW9uO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBfcGl2b3RWYWx1ZUNsb25lU3RyYXRlZ3k6IElEYXRhQ2xvbmVTdHJhdGVneSA9IG5ldyBEZWZhdWx0RGF0YUNsb25lU3RyYXRlZ3koKTtcbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgX2RlZmF1bHRFeHBhbmRTdGF0ZSA9IGZhbHNlO1xuICAgIHByb3RlY3RlZCBvdmVycmlkZSBfZmlsdGVyU3RyYXRlZ3k6IElGaWx0ZXJpbmdTdHJhdGVneSA9IG5ldyBEaW1lbnNpb25WYWx1ZXNGaWx0ZXJpbmdTdHJhdGVneSgpO1xuICAgIHByaXZhdGUgX2RhdGE7XG4gICAgcHJpdmF0ZSBfcGl2b3RDb25maWd1cmF0aW9uOiBJUGl2b3RDb25maWd1cmF0aW9uID0geyByb3dzOiBudWxsLCBjb2x1bW5zOiBudWxsLCB2YWx1ZXM6IG51bGwsIGZpbHRlcnM6IG51bGwgfTtcbiAgICBwcml2YXRlIHBfaWQgPSBgaWd4LXBpdm90LWdyaWQtJHtORVhUX0lEKyt9YDtcbiAgICBwcml2YXRlIF9zdXBlckNvbXBhY3RNb2RlID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfcGl2b3RVSTogSVBpdm90VUlTZXR0aW5ncyA9IHsgc2hvd0NvbmZpZ3VyYXRpb246IHRydWUsIHNob3dSb3dIZWFkZXJzOiBmYWxzZSB9O1xuICAgIHByaXZhdGUgX3NvcnRhYmxlQ29sdW1ucyA9IHRydWU7XG5cbiAgICAvKipcbiAgICAqIEdldHMvU2V0cyB0aGUgZGVmYXVsdCBleHBhbmQgc3RhdGUgZm9yIGFsbCByb3dzLlxuICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gICAgcHVibGljIGdldCBkZWZhdWx0RXhwYW5kU3RhdGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWZhdWx0RXhwYW5kU3RhdGU7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBkZWZhdWx0RXhwYW5kU3RhdGUodmFsOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2RlZmF1bHRFeHBhbmRTdGF0ZSA9IHZhbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBwYWdpbmdNb2RlKCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIHNldCBwYWdpbmdNb2RlKF92YWw6IEdyaWRQYWdpbmdNb2RlKSB7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAV2F0Y2hDaGFuZ2VzKClcbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IGhpZGVSb3dTZWxlY3RvcnMoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgc2V0IGhpZGVSb3dTZWxlY3RvcnMoX3ZhbHVlOiBib29sZWFuKSB7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgYXV0b0dlbmVyYXRlID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGFjdGlvblN0cmlwOiBJZ3hBY3Rpb25TdHJpcFRva2VuO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgc2hvdWxkR2VuZXJhdGU6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBtb3ZpbmcgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIHRvb2xiYXJFeHBvcnRpbmcgPSBuZXcgRXZlbnRFbWl0dGVyPElHcmlkVG9vbGJhckV4cG9ydEV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCByb3dEcmFnZ2FibGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cblxuICAgIHB1YmxpYyBvdmVycmlkZSBzZXQgcm93RHJhZ2dhYmxlKF92YWw6IGJvb2xlYW4pIHtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgYWxsb3dBZHZhbmNlZEZpbHRlcmluZygpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBzZXQgYWxsb3dBZHZhbmNlZEZpbHRlcmluZyhfdmFsdWUpIHtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBmaWx0ZXJNb2RlKCkge1xuICAgICAgICByZXR1cm4gRmlsdGVyTW9kZS5xdWlja0ZpbHRlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgc2V0IGZpbHRlck1vZGUoX3ZhbHVlOiBGaWx0ZXJNb2RlKSB7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IGFsbG93RmlsdGVyaW5nKCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIHNldCBhbGxvd0ZpbHRlcmluZyhfdmFsdWUpIHtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBwYWdlKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBzZXQgcGFnZShfdmFsOiBudW1iZXIpIHtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBwZXJQYWdlKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgc2V0IHBlclBhZ2UoX3ZhbDogbnVtYmVyKSB7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IHBpbm5lZENvbHVtbnMoKTogSWd4Q29sdW1uQ29tcG9uZW50W10ge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCB1bnBpbm5lZENvbHVtbnMoKTogSWd4Q29sdW1uQ29tcG9uZW50W10ge1xuICAgICAgICByZXR1cm4gc3VwZXIudW5waW5uZWRDb2x1bW5zO1xuICAgIH1cblxuICAgIC8qKlxuICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgdW5waW5uZWREYXRhVmlldygpOiBhbnlbXSB7XG4gICAgICAgIHJldHVybiBzdXBlci51bnBpbm5lZERhdGFWaWV3O1xuICAgIH1cblxuICAgIC8qKlxuICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgdW5waW5uZWRXaWR0aCgpIHtcbiAgICAgICAgcmV0dXJuIHN1cGVyLnVucGlubmVkV2lkdGg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IHBpbm5lZFdpZHRoKCkge1xuICAgICAgICByZXR1cm4gc3VwZXIucGlubmVkV2lkdGg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBvdmVycmlkZSBzZXQgc3VtbWFyeVJvd0hlaWdodChfdmFsdWU6IG51bWJlcikge1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgc3VtbWFyeVJvd0hlaWdodCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgdHJhbnNhY3Rpb25zKCk6IFRyYW5zYWN0aW9uU2VydmljZTxUcmFuc2FjdGlvbiwgU3RhdGU+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zYWN0aW9ucztcbiAgICB9XG5cblxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IGRyYWdJbmRpY2F0b3JJY29uVGVtcGxhdGUoKTogVGVtcGxhdGVSZWY8YW55PiB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgc2V0IGRyYWdJbmRpY2F0b3JJY29uVGVtcGxhdGUoX3ZhbDogVGVtcGxhdGVSZWY8YW55Pikge1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQFdhdGNoQ2hhbmdlcygpXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCByb3dFZGl0YWJsZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBzZXQgcm93RWRpdGFibGUoX3ZhbDogYm9vbGVhbikge1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IHBpbm5pbmcoKSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgcHVibGljIG92ZXJyaWRlIHNldCBwaW5uaW5nKF92YWx1ZSkge1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IHN1bW1hcnlQb3NpdGlvbigpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBzZXQgc3VtbWFyeVBvc2l0aW9uKF92YWx1ZTogR3JpZFN1bW1hcnlQb3NpdGlvbikge1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVyYWxcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgc3VtbWFyeUNhbGN1bGF0aW9uTW9kZSgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBzZXQgc3VtbWFyeUNhbGN1bGF0aW9uTW9kZShfdmFsdWU6IEdyaWRTdW1tYXJ5Q2FsY3VsYXRpb25Nb2RlKSB7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJhbFxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgc2hvd1N1bW1hcnlPbkNvbGxhcHNlKCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIHNldCBzaG93U3VtbWFyeU9uQ29sbGFwc2UoX3ZhbHVlOiBib29sZWFuKSB7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IGhpZGRlbkNvbHVtbnNDb3VudCgpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IHBpbm5lZENvbHVtbnNDb3VudCgpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IGJhdGNoRWRpdGluZygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBzZXQgYmF0Y2hFZGl0aW5nKF92YWw6IGJvb2xlYW4pIHtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IHNlbGVjdGVkUm93cygpOiBhbnlbXSB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvblNlcnZpY2UuZ2V0U2VsZWN0ZWRSb3dzKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRSb3dJZHMgPSBbXTtcbiAgICAgICAgdGhpcy5kYXRhVmlldy5mb3JFYWNoKHJlY29yZCA9PiB7XG4gICAgICAgICAgICBjb25zdCBwcmV2ID0gW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGRpbSBvZiB0aGlzLnJvd0RpbWVuc2lvbnMpIHtcbiAgICAgICAgICAgICAgICBsZXQgY3VyckRpbSA9IGRpbTtcbiAgICAgICAgICAgICAgICBsZXQgc2hvdWxkQnJlYWsgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IFBpdm90VXRpbC5nZXRSZWNvcmRLZXkocmVjb3JkLCBjdXJyRGltKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uU2VydmljZS5pc1Bpdm90Um93U2VsZWN0ZWQoa2V5KSAmJiAhc2VsZWN0ZWRSb3dJZHMuZmluZCh4ID0+IHggPT09IHJlY29yZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkUm93SWRzLnB1c2gocmVjb3JkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZEJyZWFrID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGN1cnJEaW0gPSBjdXJyRGltLmNoaWxkTGV2ZWw7XG4gICAgICAgICAgICAgICAgfSB3aGlsZSAoY3VyckRpbSk7XG4gICAgICAgICAgICAgICAgcHJldi5wdXNoKGRpbSk7XG4gICAgICAgICAgICAgICAgaWYgKHNob3VsZEJyZWFrKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gc2VsZWN0ZWRSb3dJZHM7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHZhbGlkYXRpb25TZXJ2aWNlOiBJZ3hHcmlkVmFsaWRhdGlvblNlcnZpY2UsXG4gICAgICAgIHNlbGVjdGlvblNlcnZpY2U6IElneEdyaWRTZWxlY3Rpb25TZXJ2aWNlLFxuICAgICAgICBjb2xSZXNpemluZ1NlcnZpY2U6IElneFBpdm90Q29sdW1uUmVzaXppbmdTZXJ2aWNlLFxuICAgICAgICBncmlkQVBJOiBHcmlkQmFzZUFQSVNlcnZpY2U8SWd4R3JpZEJhc2VEaXJlY3RpdmUgJiBHcmlkVHlwZT4sXG4gICAgICAgIHRyYW5zYWN0aW9uRmFjdG9yeTogSWd4RmxhdFRyYW5zYWN0aW9uRmFjdG9yeSxcbiAgICAgICAgZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgICAgIHpvbmU6IE5nWm9uZSxcbiAgICAgICAgQEluamVjdChET0NVTUVOVCkgZG9jdW1lbnQsXG4gICAgICAgIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIGRpZmZlcnM6IEl0ZXJhYmxlRGlmZmVycyxcbiAgICAgICAgdmlld1JlZjogVmlld0NvbnRhaW5lclJlZixcbiAgICAgICAgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBlbnZJbmplY3RvcjogRW52aXJvbm1lbnRJbmplY3RvcixcbiAgICAgICAgbmF2aWdhdGlvbjogSWd4UGl2b3RHcmlkTmF2aWdhdGlvblNlcnZpY2UsXG4gICAgICAgIGZpbHRlcmluZ1NlcnZpY2U6IElneEZpbHRlcmluZ1NlcnZpY2UsXG4gICAgICAgIHRleHRIaWdobGlnaHRTZXJ2aWNlOiBJZ3hUZXh0SGlnaGxpZ2h0U2VydmljZSxcbiAgICAgICAgQEluamVjdChJZ3hPdmVybGF5U2VydmljZSkgb3ZlcmxheVNlcnZpY2U6IElneE92ZXJsYXlTZXJ2aWNlLFxuICAgICAgICBzdW1tYXJ5U2VydmljZTogSWd4R3JpZFN1bW1hcnlTZXJ2aWNlLFxuICAgICAgICBASW5qZWN0KExPQ0FMRV9JRCkgbG9jYWxlSWQ6IHN0cmluZyxcbiAgICAgICAgcGxhdGZvcm06IFBsYXRmb3JtVXRpbCxcbiAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChJZ3hHcmlkVHJhbnNhY3Rpb24pIF9kaVRyYW5zYWN0aW9ucz86IFRyYW5zYWN0aW9uU2VydmljZTxUcmFuc2FjdGlvbiwgU3RhdGU+KSB7XG4gICAgICAgIHN1cGVyKFxuICAgICAgICAgICAgdmFsaWRhdGlvblNlcnZpY2UsXG4gICAgICAgICAgICBzZWxlY3Rpb25TZXJ2aWNlLFxuICAgICAgICAgICAgY29sUmVzaXppbmdTZXJ2aWNlLFxuICAgICAgICAgICAgZ3JpZEFQSSxcbiAgICAgICAgICAgIHRyYW5zYWN0aW9uRmFjdG9yeSxcbiAgICAgICAgICAgIGVsZW1lbnRSZWYsXG4gICAgICAgICAgICB6b25lLFxuICAgICAgICAgICAgZG9jdW1lbnQsXG4gICAgICAgICAgICBjZHIsXG4gICAgICAgICAgICBkaWZmZXJzLFxuICAgICAgICAgICAgdmlld1JlZixcbiAgICAgICAgICAgIGluamVjdG9yLFxuICAgICAgICAgICAgZW52SW5qZWN0b3IsXG4gICAgICAgICAgICBuYXZpZ2F0aW9uLFxuICAgICAgICAgICAgZmlsdGVyaW5nU2VydmljZSxcbiAgICAgICAgICAgIHRleHRIaWdobGlnaHRTZXJ2aWNlLFxuICAgICAgICAgICAgb3ZlcmxheVNlcnZpY2UsXG4gICAgICAgICAgICBzdW1tYXJ5U2VydmljZSxcbiAgICAgICAgICAgIGxvY2FsZUlkLFxuICAgICAgICAgICAgcGxhdGZvcm0sXG4gICAgICAgICAgICBfZGlUcmFuc2FjdGlvbnMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgbmdPbkluaXQoKSB7XG4gICAgICAgIC8vIHBpdm90IGdyaWQgYWx3YXlzIGdlbmVyYXRlcyBjb2x1bW5zIGF1dG9tYXRpY2FsbHkuXG4gICAgICAgIHRoaXMuYXV0b0dlbmVyYXRlID0gdHJ1ZTtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICAgICAgLy8gaWdub3JlIGFueSB1c2VyIGRlZmluZWQgY29sdW1ucyBhbmQgYXV0by1nZW5lcmF0ZSBiYXNlZCBvbiBwaXZvdCBjb25maWcuXG4gICAgICAgIHRoaXMudXBkYXRlQ29sdW1ucyhbXSk7XG4gICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuYXV0b0dlbmVyYXRlQ29uZmlnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZUNvbmZpZygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zZXR1cENvbHVtbnMoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICh0aGlzLnZhbHVlQ2hpcFRlbXBsYXRlRGlyZWN0aXZlKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlQ2hpcFRlbXBsYXRlID0gdGhpcy52YWx1ZUNoaXBUZW1wbGF0ZURpcmVjdGl2ZS50ZW1wbGF0ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5yb3dEaW1lbnNpb25IZWFkZXJEaXJlY3RpdmUpIHtcbiAgICAgICAgICAgIHRoaXMucm93RGltZW5zaW9uSGVhZGVyVGVtcGxhdGUgPSB0aGlzLnJvd0RpbWVuc2lvbkhlYWRlckRpcmVjdGl2ZS50ZW1wbGF0ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBzdXBlci5uZ0FmdGVyVmlld0luaXQoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTm90aWZpZXMgZm9yIGRpbWVuc2lvbiBjaGFuZ2UuXG4gICAgICovXG4gICAgcHVibGljIG5vdGlmeURpbWVuc2lvbkNoYW5nZShyZWdlbmVyYXRlQ29sdW1ucyA9IGZhbHNlKSB7XG4gICAgICAgIGlmIChyZWdlbmVyYXRlQ29sdW1ucykge1xuICAgICAgICAgICAgdGhpcy5zZXR1cENvbHVtbnMoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBpcGVUcmlnZ2VyKys7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBmdWxsIGxpc3Qgb2YgZGltZW5zaW9ucy5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IGRpbWVuc2lvbnMgPSB0aGlzLmdyaWQuYWxsRGltZW5zaW9ucztcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGFsbERpbWVuc2lvbnMoKSB7XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuX3Bpdm90Q29uZmlndXJhdGlvbjtcbiAgICAgICAgaWYgKCFjb25maWcpIHJldHVybiBbXTtcbiAgICAgICAgcmV0dXJuIChjb25maWcucm93cyB8fCBbXSkuY29uY2F0KChjb25maWcuY29sdW1ucyB8fCBbXSkpLmNvbmNhdChjb25maWcuZmlsdGVycyB8fCBbXSkuZmlsdGVyKHggPT4geCAhPT0gbnVsbCAmJiB4ICE9PSB1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBjcmVhdGVGaWx0ZXJFU0YoZHJvcGRvd246IGFueSwgY29sdW1uOiBDb2x1bW5UeXBlLCBvcHRpb25zOiBPdmVybGF5U2V0dGluZ3MsIHNob3VsZFJlYXRhY2g6IGJvb2xlYW4pIHtcbiAgICAgICAgb3B0aW9ucy5vdXRsZXQgPSB0aGlzLm91dGxldDtcbiAgICAgICAgaWYgKGRyb3Bkb3duKSB7XG4gICAgICAgICAgICBkcm9wZG93bi5pbml0aWFsaXplKGNvbHVtbiwgdGhpcy5vdmVybGF5U2VydmljZSk7XG4gICAgICAgICAgICBpZiAoc2hvdWxkUmVhdGFjaCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlkID0gdGhpcy5vdmVybGF5U2VydmljZS5hdHRhY2goZHJvcGRvd24uZWxlbWVudCwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgZHJvcGRvd24ub3ZlcmxheUNvbXBvbmVudElkID0gaWQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgaWQsIHJlZjogdW5kZWZpbmVkIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4geyBpZDogZHJvcGRvd24ub3ZlcmxheUNvbXBvbmVudElkLCByZWY6IHVuZGVmaW5lZCB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZmVhdHVyZUNvbHVtbnNXaWR0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGl2b3RSb3dXaWR0aHM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cy9TZXRzIHRoZSB2YWx1ZSBvZiB0aGUgYGlkYCBhdHRyaWJ1dGUuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIElmIG5vdCBwcm92aWRlZCBpdCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtcGl2b3QtZ3JpZCBbaWRdPVwiJ2lneC1waXZvdC0xJ1wiIFtkYXRhXT1cIkRhdGFcIj48L2lneC1waXZvdC1ncmlkPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5pZCcpXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IGlkKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnBfaWQ7XG4gICAgfVxuICAgIHB1YmxpYyBzZXQgaWQodmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLnBfaWQgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzL1NldHMgdGhlIGFycmF5IG9mIGRhdGEgdGhhdCBwb3B1bGF0ZXMgdGhlIGNvbXBvbmVudC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1waXZvdC1ncmlkIFtkYXRhXT1cIkRhdGFcIj48L2lneC1waXZvdC1ncmlkPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBkYXRhKHZhbHVlOiBhbnlbXSB8IG51bGwpIHtcbiAgICAgICAgdGhpcy5fZGF0YSA9IHZhbHVlIHx8IFtdO1xuICAgICAgICBpZiAoIXRoaXMuX2luaXQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmF1dG9HZW5lcmF0ZUNvbmZpZykge1xuICAgICAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVDb25maWcoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2V0dXBDb2x1bW5zKCk7XG4gICAgICAgICAgICB0aGlzLnJlZmxvdygpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICBpZiAodGhpcy5oZWlnaHQgPT09IG51bGwgfHwgdGhpcy5oZWlnaHQuaW5kZXhPZignJScpICE9PSAtMSkge1xuICAgICAgICAgICAgLy8gSWYgdGhlIGhlaWdodCB3aWxsIGNoYW5nZSBiYXNlZCBvbiBob3cgbXVjaCBkYXRhIHRoZXJlIGlzLCByZWNhbGN1bGF0ZSBzaXplcyBpbiBpZ3hGb3JPZi5cbiAgICAgICAgICAgIHRoaXMubm90aWZ5Q2hhbmdlcyh0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYW4gYXJyYXkgb2YgZGF0YSBzZXQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGRhdGEgPSB0aGlzLmdyaWQuZGF0YTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGRhdGEoKTogYW55W10gfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGE7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRDb250ZXh0KHJvd0RhdGEsIHJvd0luZGV4KTogYW55IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICRpbXBsaWNpdDogcm93RGF0YSxcbiAgICAgICAgICAgIHRlbXBsYXRlSUQ6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnZGF0YVJvdycsXG4gICAgICAgICAgICAgICAgaWQ6IG51bGxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpbmRleDogdGhpcy5nZXREYXRhVmlld0luZGV4KHJvd0luZGV4LCBmYWxzZSlcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgcGl2b3RSb3dXaWR0aHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJvd0RpbWVuc2lvbnMubGVuZ3RoID8gdGhpcy5yb3dEaW1lbnNpb25zLnJlZHVjZSgoYWNjdW11bGF0b3IsIGRpbSkgPT4gYWNjdW11bGF0b3IgKyB0aGlzLnJvd0RpbWVuc2lvbldpZHRoVG9QaXhlbHMoZGltKSwgMCkgOlxuICAgICAgICAgICAgdGhpcy5yb3dEaW1lbnNpb25XaWR0aFRvUGl4ZWxzKHRoaXMuZW1wdHlSb3dEaW1lbnNpb24pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIHJvd0RpbWVuc2lvbldpZHRoKGRpbSwgaWdub3JlQmVmb3JlSW5pdCA9IGZhbHNlICk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGlzQXV0byA9IGRpbS53aWR0aCAmJiBkaW0ud2lkdGguaW5kZXhPZignYXV0bycpICE9PSAtMTtcbiAgICAgICAgaWYgKGlzQXV0bykge1xuICAgICAgICAgICAgcmV0dXJuIGRpbS5hdXRvV2lkdGggPyBkaW0uYXV0b1dpZHRoICsgJ3B4JyA6ICdmaXQtY29udGVudCc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yb3dEaW1lbnNpb25XaWR0aFRvUGl4ZWxzKGRpbSwgaWdub3JlQmVmb3JlSW5pdCkgKyAncHgnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgcm93RGltZW5zaW9uV2lkdGhUb1BpeGVscyhkaW06IElQaXZvdERpbWVuc2lvbiwgaWdub3JlQmVmb3JlSW5pdCA9IGZhbHNlKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKCFpZ25vcmVCZWZvcmVJbml0ICYmIHRoaXMuc2hvdWxkR2VuZXJhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFkaW0/LndpZHRoKSB7XG4gICAgICAgICAgICByZXR1cm4gTUlOSU1VTV9DT0xVTU5fV0lEVEg7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXNQZXJjZW50ID0gZGltLndpZHRoICYmIGRpbS53aWR0aC5pbmRleE9mKCclJykgIT09IC0xO1xuICAgICAgICBjb25zdCBpc0F1dG8gPSBkaW0ud2lkdGggJiYgZGltLndpZHRoLmluZGV4T2YoJ2F1dG8nKSAhPT0gLTE7XG4gICAgICAgIGlmIChpc1BlcmNlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJzZUZsb2F0KGRpbS53aWR0aCkgLyAxMDAgKiB0aGlzLmNhbGNXaWR0aDtcbiAgICAgICAgfSBlbHNlIGlmIChpc0F1dG8pIHtcbiAgICAgICAgICAgIHJldHVybiBkaW0uYXV0b1dpZHRoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KGRpbS53aWR0aCwgMTApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgcmV2ZXJzZURpbWVuc2lvbldpZHRoVG9QZXJjZW50KHdpZHRoOiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gKHdpZHRoICogMTAwIC8gdGhpcy5jYWxjV2lkdGgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgcGl2b3RDb250ZW50Q2FsY1dpZHRoKCkge1xuICAgICAgICBjb25zdCB0b3RhbERpbVdpZHRoID0gdGhpcy5yb3dEaW1lbnNpb25zLmxlbmd0aCA+IDAgP1xuICAgICAgICAgICAgdGhpcy5yb3dEaW1lbnNpb25zLm1hcCgoZGltKSA9PiB0aGlzLnJvd0RpbWVuc2lvbldpZHRoVG9QaXhlbHMoZGltKSkucmVkdWNlKChwcmV2LCBjdXIpID0+IHByZXYgKyBjdXIpIDpcbiAgICAgICAgICAgIDA7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbGNXaWR0aCAtIHRvdGFsRGltV2lkdGg7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGdldCBwaXZvdFBpbm5lZFdpZHRoKCkge1xuICAgICAgICByZXR1cm4gIXRoaXMuc2hvdWxkR2VuZXJhdGUgPyAodGhpcy5pc1Bpbm5pbmdUb1N0YXJ0ID8gdGhpcy5waW5uZWRXaWR0aCA6IHRoaXMuaGVhZGVyRmVhdHVyZXNXaWR0aCkgOiAwO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgcGl2b3RVbnBpbm5lZFdpZHRoKCkge1xuICAgICAgICByZXR1cm4gIXRoaXMuc2hvdWxkR2VuZXJhdGUgPyB0aGlzLnVucGlubmVkV2lkdGggOiAwO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgcm93RGltZW5zaW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGl2b3RDb25maWd1cmF0aW9uLnJvd3M/LmZpbHRlcih4ID0+IHguZW5hYmxlZCkgfHwgW107XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGdldCBjb2x1bW5EaW1lbnNpb25zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5waXZvdENvbmZpZ3VyYXRpb24uY29sdW1ucz8uZmlsdGVyKHggPT4geC5lbmFibGVkKSB8fCBbXTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IGZpbHRlckRpbWVuc2lvbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBpdm90Q29uZmlndXJhdGlvbi5maWx0ZXJzPy5maWx0ZXIoeCA9PiB4LmVuYWJsZWQpIHx8IFtdO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgdmFsdWVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5waXZvdENvbmZpZ3VyYXRpb24udmFsdWVzPy5maWx0ZXIoeCA9PiB4LmVuYWJsZWQpIHx8IFtdO1xuICAgIH1cblxuICAgIHB1YmxpYyB0b2dnbGVDb2x1bW4oY29sOiBJZ3hDb2x1bW5Db21wb25lbnQpIHtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLmNvbHVtbkdyb3VwU3RhdGVzLmdldChjb2wuZmllbGQpO1xuICAgICAgICBjb25zdCBuZXdTdGF0ZSA9ICFzdGF0ZTtcbiAgICAgICAgdGhpcy5jb2x1bW5Hcm91cFN0YXRlcy5zZXQoY29sLmZpZWxkLCBuZXdTdGF0ZSk7XG4gICAgICAgIHRoaXMudG9nZ2xlUm93R3JvdXAoY29sLCBuZXdTdGF0ZSk7XG4gICAgICAgIHRoaXMucmVmbG93KCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGdldENvbHVtbldpZHRoU3VtKCk6IG51bWJlciB7XG4gICAgICAgIGxldCBjb2xTdW0gPSBzdXBlci5nZXRDb2x1bW5XaWR0aFN1bSgpO1xuICAgICAgICBjb2xTdW0gKz0gdGhpcy5yb3dEaW1lbnNpb25zLm1hcChkaW0gPT4gdGhpcy5yb3dEaW1lbnNpb25XaWR0aFRvUGl4ZWxzKGRpbSwgdHJ1ZSkpLnJlZHVjZSgocHJldiwgY3VyKSA9PiBwcmV2ICsgY3VyLCAwKTtcbiAgICAgICAgcmV0dXJuIGNvbFN1bTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBpc1JlY29yZFBpbm5lZEJ5SW5kZXgoX3Jvd0luZGV4OiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgdG9nZ2xlQ29sdW1uVmlzaWJpbGl0eShfYXJnczogSUNvbHVtblZpc2liaWxpdHlDaGFuZ2VkRXZlbnRBcmdzKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBleHBhbmRBbGwoKSB7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgY29sbGFwc2VBbGwoKSB7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZXhwYW5kUm93KF9yb3dJRDogYW55KSB7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgY29sbGFwc2VSb3coX3Jvd0lEOiBhbnkpIHtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgcGlubmVkUm93cygpOiBJZ3hHcmlkUm93Q29tcG9uZW50W10ge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgdG90YWxSZWNvcmRzKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgc2V0IHRvdGFsUmVjb3JkcyhfdG90YWw6IG51bWJlcikge1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIG1vdmVDb2x1bW4oX2NvbHVtbjogSWd4Q29sdW1uQ29tcG9uZW50LCBfdGFyZ2V0OiBJZ3hDb2x1bW5Db21wb25lbnQsIF9wb3M6IERyb3BQb3NpdGlvbiA9IERyb3BQb3NpdGlvbi5BZnRlckRyb3BUYXJnZXQpIHtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBhZGRSb3coX2RhdGE6IGFueSk6IHZvaWQge1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGRlbGV0ZVJvdyhfcm93U2VsZWN0b3I6IGFueSk6IGFueSB7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgdXBkYXRlQ2VsbChfdmFsdWU6IGFueSwgX3Jvd1NlbGVjdG9yOiBhbnksIF9jb2x1bW46IHN0cmluZyk6IHZvaWQge1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIHVwZGF0ZVJvdyhfdmFsdWU6IGFueSwgX3Jvd1NlbGVjdG9yOiBhbnkpOiB2b2lkIHtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBlbmFibGVTdW1tYXJpZXMoLi4uX3Jlc3QpIHtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBkaXNhYmxlU3VtbWFyaWVzKC4uLl9yZXN0KSB7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgcGluQ29sdW1uKF9jb2x1bW5OYW1lOiBzdHJpbmcgfCBJZ3hDb2x1bW5Db21wb25lbnQsIF9pbmRleD8pOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIHVucGluQ29sdW1uKF9jb2x1bW5OYW1lOiBzdHJpbmcgfCBJZ3hDb2x1bW5Db21wb25lbnQsIF9pbmRleD8pOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIHBpblJvdyhfcm93SUQ6IGFueSwgX2luZGV4PzogbnVtYmVyLCBfcm93PzogUm93VHlwZSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgdW5waW5Sb3coX3Jvd0lEOiBhbnksIF9yb3c/OiBSb3dUeXBlKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgcGlubmVkUm93SGVpZ2h0KCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IGhhc0VkaXRhYmxlQ29sdW1ucygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBoYXNTdW1tYXJpemVkQ29sdW1ucygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBoYXNNb3ZhYmxlQ29sdW1ucygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBwaW5uZWREYXRhVmlldygpOiBhbnlbXSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBvcGVuQWR2YW5jZWRGaWx0ZXJpbmdEaWFsb2coX292ZXJsYXlTZXR0aW5ncz86IE92ZXJsYXlTZXR0aW5ncykge1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGNsb3NlQWR2YW5jZWRGaWx0ZXJpbmdEaWFsb2coX2FwcGx5Q2hhbmdlczogYm9vbGVhbikge1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGVuZEVkaXQoX2NvbW1pdCA9IHRydWUsIF9ldmVudD86IEV2ZW50KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBiZWdpbkFkZFJvd0J5SWQoX3Jvd0lEOiBhbnksIF9hc0NoaWxkPzogYm9vbGVhbik6IHZvaWQge1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGJlZ2luQWRkUm93QnlJbmRleChfaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGNsZWFyU2VhcmNoKCkgeyB9XG5cbiAgICAvKipcbiAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgcmVmcmVzaFNlYXJjaChfdXBkYXRlQWN0aXZlSW5mbz86IGJvb2xlYW4sIF9lbmRFZGl0ID0gdHJ1ZSk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBmaW5kTmV4dChfdGV4dDogc3RyaW5nLCBfY2FzZVNlbnNpdGl2ZT86IGJvb2xlYW4sIF9leGFjdE1hdGNoPzogYm9vbGVhbik6IG51bWJlciB7XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBmaW5kUHJldihfdGV4dDogc3RyaW5nLCBfY2FzZVNlbnNpdGl2ZT86IGJvb2xlYW4sIF9leGFjdE1hdGNoPzogYm9vbGVhbik6IG51bWJlciB7XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBnZXROZXh0Q2VsbChjdXJyUm93SW5kZXg6IG51bWJlciwgY3VyVmlzaWJsZUNvbEluZGV4OiBudW1iZXIsXG4gICAgICAgIGNhbGxiYWNrOiAoSWd4Q29sdW1uQ29tcG9uZW50KSA9PiBib29sZWFuID0gbnVsbCk6IElDZWxsUG9zaXRpb24ge1xuICAgICAgICByZXR1cm4gc3VwZXIuZ2V0TmV4dENlbGwoY3VyclJvd0luZGV4LCBjdXJWaXNpYmxlQ29sSW5kZXgsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0UHJldmlvdXNDZWxsKGN1cnJSb3dJbmRleDogbnVtYmVyLCBjdXJWaXNpYmxlQ29sSW5kZXg6IG51bWJlcixcbiAgICAgICAgY2FsbGJhY2s6IChJZ3hDb2x1bW5Db21wb25lbnQpID0+IGJvb2xlYW4gPSBudWxsKTogSUNlbGxQb3NpdGlvbiB7XG4gICAgICAgIHJldHVybiBzdXBlci5nZXRQcmV2aW91c0NlbGwoY3VyclJvd0luZGV4LCBjdXJWaXNpYmxlQ29sSW5kZXgsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0UGlubmVkV2lkdGgodGFrZUhpZGRlbiA9IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBzdXBlci5nZXRQaW5uZWRXaWR0aCh0YWtlSGlkZGVuKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgdG90YWxIZWlnaHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbGNIZWlnaHQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldENvbHVtbkdyb3VwRXhwYW5kU3RhdGUoY29sOiBJZ3hDb2x1bW5Db21wb25lbnQpIHtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLmNvbHVtbkdyb3VwU3RhdGVzLmdldChjb2wuZmllbGQpO1xuICAgICAgICAvLyBjb2x1bW5zIGFyZSBleHBhbmRlZCBieSBkZWZhdWx0P1xuICAgICAgICByZXR1cm4gc3RhdGUgIT09IHVuZGVmaW5lZCAmJiBzdGF0ZSAhPT0gbnVsbCA/IHN0YXRlIDogZmFsc2U7XG4gICAgfVxuXG4gICAgcHVibGljIHRvZ2dsZVJvd0dyb3VwKGNvbDogSWd4Q29sdW1uQ29tcG9uZW50LCBuZXdTdGF0ZTogYm9vbGVhbikge1xuICAgICAgICBpZiAoIWNvbCkgcmV0dXJuO1xuICAgICAgICBpZiAodGhpcy5oYXNNdWx0aXBsZVZhbHVlcykge1xuICAgICAgICAgICAgY29uc3QgcGFyZW50Q29scyA9IGNvbC5wYXJlbnQgPyBjb2wucGFyZW50LmNoaWxkcmVuLnRvQXJyYXkoKSA6IHRoaXMuX2F1dG9HZW5lcmF0ZWRDb2xzLmZpbHRlcih4ID0+IHgubGV2ZWwgPT09IDApO1xuICAgICAgICAgICAgY29uc3Qgc2libGluZ0NvbCA9IHBhcmVudENvbHMuZmlsdGVyKHggPT4geC5oZWFkZXIgPT09IGNvbC5oZWFkZXIgJiYgeCAhPT0gY29sKVswXTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJJbmRleCA9IHBhcmVudENvbHMuaW5kZXhPZihjb2wpO1xuICAgICAgICAgICAgY29uc3Qgc2libGluZ0luZGV4ID0gcGFyZW50Q29scy5pbmRleE9mKHNpYmxpbmdDb2wpO1xuICAgICAgICAgICAgaWYgKGN1cnJJbmRleCA8IHNpYmxpbmdJbmRleCkge1xuICAgICAgICAgICAgICAgIC8vIGNsaWNrZWQgb24gdGhlIGZ1bGwgaGllcmFyY2h5IGhlYWRlclxuICAgICAgICAgICAgICAgIHRoaXMucmVzb2x2ZVRvZ2dsZShjb2wsIG5ld1N0YXRlKTtcbiAgICAgICAgICAgICAgICBzaWJsaW5nQ29sLmhlYWRlclRlbXBsYXRlID0gdGhpcy5oZWFkZXJUZW1wbGF0ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gY2xpY2tlZCBvbiBzdW1tYXJ5IHBhcmVudCBjb2x1bW4gdGhhdCBjb250YWlucyBqdXN0IHRoZSBtZWFzdXJlc1xuICAgICAgICAgICAgICAgIGNvbC5oZWFkZXJUZW1wbGF0ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc29sdmVUb2dnbGUoc2libGluZ0NvbCwgbmV3U3RhdGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgcGFyZW50Q29scyA9IGNvbC5wYXJlbnQgPyBjb2wucGFyZW50LmNoaWxkcmVuIDogdGhpcy5fYXV0b0dlbmVyYXRlZENvbHMuZmlsdGVyKHggPT4geC5sZXZlbCA9PT0gMCk7XG4gICAgICAgICAgICBjb25zdCBmaWVsZENvbHVtbiA9IHBhcmVudENvbHMuZmlsdGVyKHggPT4geC5oZWFkZXIgPT09IGNvbC5oZWFkZXIgJiYgIXguY29sdW1uR3JvdXApWzBdO1xuICAgICAgICAgICAgY29uc3QgZ3JvdXBDb2x1bW4gPSBwYXJlbnRDb2xzLmZpbHRlcih4ID0+IHguaGVhZGVyID09PSBjb2wuaGVhZGVyICYmIHguY29sdW1uR3JvdXApWzBdO1xuICAgICAgICAgICAgdGhpcy5yZXNvbHZlVG9nZ2xlKGdyb3VwQ29sdW1uLCBuZXdTdGF0ZSk7XG4gICAgICAgICAgICBpZiAobmV3U3RhdGUpIHtcbiAgICAgICAgICAgICAgICBmaWVsZENvbHVtbi5oZWFkZXJUZW1wbGF0ZSA9IHRoaXMuaGVhZGVyVGVtcGxhdGU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZpZWxkQ29sdW1uLmhlYWRlclRlbXBsYXRlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIHNldHVwQ29sdW1ucygpIHtcbiAgICAgICAgc3VwZXIuc2V0dXBDb2x1bW5zKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQXV0by1zaXplcyByb3cgZGltZW5zaW9uIGNlbGxzLlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBPbmx5IHNpemVzIGJhc2VkIG9uIHRoZSBkaW1lbnNpb24gY2VsbHMgaW4gdmlldy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLmdyaWQuYXV0b1NpemVSb3dEaW1lbnNpb24oZGltZW5zaW9uKTtcbiAgICAgKiBgYGBcbiAgICAgKiBAcGFyYW0gZGltZW5zaW9uIFRoZSByb3cgZGltZW5zaW9uIHRvIHNpemUuXG4gICAgICovXG4gICAgcHVibGljIGF1dG9TaXplUm93RGltZW5zaW9uKGRpbWVuc2lvbjogSVBpdm90RGltZW5zaW9uKSB7XG4gICAgICAgIGlmICh0aGlzLmdldERpbWVuc2lvblR5cGUoZGltZW5zaW9uKSA9PT0gUGl2b3REaW1lbnNpb25UeXBlLlJvdykge1xuICAgICAgICAgICAgY29uc3QgcmVsYXRlZERpbXMgPSBQaXZvdFV0aWwuZmxhdHRlbihbZGltZW5zaW9uXSkubWFwKHggPT4geC5tZW1iZXJOYW1lKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLnJvd0RpbWVuc2lvbkNvbnRlbnRDb2xsZWN0aW9uLmZpbHRlcih4ID0+IHJlbGF0ZWREaW1zLmluZGV4T2YoeC5kaW1lbnNpb24ubWVtYmVyTmFtZSkgIT09IC0xKTtcbiAgICAgICAgICAgIGNvbnN0IGhlYWRlcnMgPSBjb250ZW50Lm1hcCh4ID0+IHguaGVhZGVyR3JvdXBzLnRvQXJyYXkoKSkuZmxhdCgpLm1hcCh4ID0+IHguaGVhZGVyICYmIHguaGVhZGVyLnJlZkluc3RhbmNlKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnBpdm90VUkuc2hvd1Jvd0hlYWRlcnMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkaW1lbnNpb25IZWFkZXIgPSB0aGlzLnRoZWFkUm93LnJvd0RpbWVuc2lvbkhlYWRlcnMuZmluZCh4ID0+IHguY29sdW1uLmZpZWxkID09PSBkaW1lbnNpb24ubWVtYmVyTmFtZSk7XG4gICAgICAgICAgICAgICAgaGVhZGVycy5wdXNoKGRpbWVuc2lvbkhlYWRlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBhdXRvV2lkdGggPSB0aGlzLmdldExhcmdlc0NvbnRlbnRXaWR0aChoZWFkZXJzKTtcbiAgICAgICAgICAgIGRpbWVuc2lvbi53aWR0aCA9IGF1dG9XaWR0aDtcbiAgICAgICAgICAgIHRoaXMucGlwZVRyaWdnZXIrKztcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEluc2VydHMgZGltZW5zaW9uIGluIHRhcmdldCBjb2xsZWN0aW9uIGJ5IHR5cGUgYXQgc3BlY2lmaWVkIGluZGV4IG9yIGF0IHRoZSBjb2xsZWN0aW9uJ3MgZW5kLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5ncmlkLmluc2VydERpbWVuc2lvbkF0KGRpbWVuc2lvbiwgUGl2b3REaW1lbnNpb25UeXBlLlJvdywgMSk7XG4gICAgICogYGBgXG4gICAgICogQHBhcmFtIGRpbWVuc2lvbiBUaGUgZGltZW5zaW9uIHRoYXQgd2lsbCBiZSBhZGRlZC5cbiAgICAgKiBAcGFyYW0gdGFyZ2V0Q29sbGVjdGlvblR5cGUgVGhlIHRhcmdldCBjb2xsZWN0aW9uIHR5cGUgdG8gYWRkIHRvLiBDYW4gYmUgUm93LCBDb2x1bW4gb3IgRmlsdGVyLlxuICAgICAqIEBwYXJhbSBpbmRleCBUaGUgaW5kZXggaW4gdGhlIGNvbGxlY3Rpb24gYXQgd2hpY2ggdG8gYWRkLlxuICAgICAqIFRoaXMgcGFyYW1ldGVyIGlzIG9wdGlvbmFsLiBJZiBub3Qgc2V0IGl0IHdpbGwgYWRkIGl0IHRvIHRoZSBlbmQgb2YgdGhlIGNvbGxlY3Rpb24uXG4gICAgICovXG4gICAgcHVibGljIGluc2VydERpbWVuc2lvbkF0KGRpbWVuc2lvbjogSVBpdm90RGltZW5zaW9uLCB0YXJnZXRDb2xsZWN0aW9uVHlwZTogUGl2b3REaW1lbnNpb25UeXBlLCBpbmRleD86IG51bWJlcikge1xuICAgICAgICBjb25zdCB0YXJnZXRDb2xsZWN0aW9uID0gdGhpcy5nZXREaW1lbnNpb25zQnlUeXBlKHRhcmdldENvbGxlY3Rpb25UeXBlKTtcbiAgICAgICAgaWYgKGluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRhcmdldENvbGxlY3Rpb24uc3BsaWNlKGluZGV4LCAwLCBkaW1lbnNpb24pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGFyZ2V0Q29sbGVjdGlvbi5wdXNoKGRpbWVuc2lvbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRhcmdldENvbGxlY3Rpb25UeXBlID09PSBQaXZvdERpbWVuc2lvblR5cGUuQ29sdW1uKSB7XG4gICAgICAgICAgICB0aGlzLnNldHVwQ29sdW1ucygpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucGlwZVRyaWdnZXIrKztcbiAgICAgICAgdGhpcy5kaW1lbnNpb25zQ2hhbmdlLmVtaXQoeyBkaW1lbnNpb25zOiB0YXJnZXRDb2xsZWN0aW9uLCBkaW1lbnNpb25Db2xsZWN0aW9uVHlwZTogdGFyZ2V0Q29sbGVjdGlvblR5cGUgfSk7XG4gICAgICAgIGlmICh0YXJnZXRDb2xsZWN0aW9uVHlwZSA9PT0gUGl2b3REaW1lbnNpb25UeXBlLkZpbHRlcikge1xuICAgICAgICAgICAgdGhpcy5kaW1lbnNpb25EYXRhQ29sdW1ucyA9IHRoaXMuZ2VuZXJhdGVEaW1lbnNpb25Db2x1bW5zKCk7XG4gICAgICAgICAgICB0aGlzLnJlZmxvdygpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucGl2b3RDb25maWd1cmF0aW9uQ2hhbmdlLmVtaXQoeyBwaXZvdENvbmZpZ3VyYXRpb246IHRoaXMucGl2b3RDb25maWd1cmF0aW9uIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1vdmUgZGltZW5zaW9uIGZyb20gaXRzIGN1cnJlbnRseSBjb2xsZWN0aW9uIHRvIHRoZSBzcGVjaWZpZWQgdGFyZ2V0IGNvbGxlY3Rpb24gYnkgdHlwZSBhdCBzcGVjaWZpZWQgaW5kZXggb3IgYXQgdGhlIGNvbGxlY3Rpb24ncyBlbmQuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLmdyaWQubW92ZURpbWVuc2lvbihkaW1lbnNpb24sIFBpdm90RGltZW5zaW9uVHlwZS5Sb3csIDEpO1xuICAgICAqIGBgYFxuICAgICAqIEBwYXJhbSBkaW1lbnNpb24gVGhlIGRpbWVuc2lvbiB0aGF0IHdpbGwgYmUgbW92ZWQuXG4gICAgICogQHBhcmFtIHRhcmdldENvbGxlY3Rpb25UeXBlIFRoZSB0YXJnZXQgY29sbGVjdGlvbiB0eXBlIHRvIG1vdmUgaXQgdG8uIENhbiBiZSBSb3csIENvbHVtbiBvciBGaWx0ZXIuXG4gICAgICogQHBhcmFtIGluZGV4IFRoZSBpbmRleCBpbiB0aGUgY29sbGVjdGlvbiBhdCB3aGljaCB0byBhZGQuXG4gICAgICogVGhpcyBwYXJhbWV0ZXIgaXMgb3B0aW9uYWwuIElmIG5vdCBzZXQgaXQgd2lsbCBhZGQgaXQgdG8gdGhlIGVuZCBvZiB0aGUgY29sbGVjdGlvbi5cbiAgICAgKi9cbiAgICBwdWJsaWMgbW92ZURpbWVuc2lvbihkaW1lbnNpb246IElQaXZvdERpbWVuc2lvbiwgdGFyZ2V0Q29sbGVjdGlvblR5cGU6IFBpdm90RGltZW5zaW9uVHlwZSwgaW5kZXg/OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgcHJldkNvbGxlY3Rpb25UeXBlID0gdGhpcy5nZXREaW1lbnNpb25UeXBlKGRpbWVuc2lvbik7XG4gICAgICAgIGlmIChwcmV2Q29sbGVjdGlvblR5cGUgPT09IG51bGwpIHJldHVybjtcbiAgICAgICAgLy8gcmVtb3ZlIGZyb20gb2xkIGNvbGxlY3Rpb25cbiAgICAgICAgdGhpcy5fcmVtb3ZlRGltZW5zaW9uSW50ZXJuYWwoZGltZW5zaW9uKTtcbiAgICAgICAgLy8gYWRkIHRvIHRhcmdldFxuICAgICAgICB0aGlzLmluc2VydERpbWVuc2lvbkF0KGRpbWVuc2lvbiwgdGFyZ2V0Q29sbGVjdGlvblR5cGUsIGluZGV4KTtcblxuICAgICAgICBpZiAocHJldkNvbGxlY3Rpb25UeXBlID09PSBQaXZvdERpbWVuc2lvblR5cGUuQ29sdW1uKSB7XG4gICAgICAgICAgICB0aGlzLnNldHVwQ29sdW1ucygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBkaW1lbnNpb24gZnJvbSBpdHMgY3VycmVudGx5IGNvbGxlY3Rpb24uXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBUaGlzIGlzIGRpZmZlcmVudCB0aGFuIHRvZ2dsZURpbWVuc2lvbiB0aGF0IGVuYWJsZWQvZGlzYWJsZXMgdGhlIGRpbWVuc2lvbi5cbiAgICAgKiBUaGlzIGNvbXBsZXRlbHkgcmVtb3ZlcyB0aGUgc3BlY2lmaWVkIGRpbWVuc2lvbiBmcm9tIHRoZSBjb2xsZWN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuZ3JpZC5yZW1vdmVEaW1lbnNpb24oZGltZW5zaW9uKTtcbiAgICAgKiBgYGBcbiAgICAgKiBAcGFyYW0gZGltZW5zaW9uIFRoZSBkaW1lbnNpb24gdG8gYmUgcmVtb3ZlZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVtb3ZlRGltZW5zaW9uKGRpbWVuc2lvbjogSVBpdm90RGltZW5zaW9uKSB7XG4gICAgICAgIGNvbnN0IHByZXZDb2xsZWN0aW9uVHlwZSA9IHRoaXMuZ2V0RGltZW5zaW9uVHlwZShkaW1lbnNpb24pO1xuICAgICAgICB0aGlzLl9yZW1vdmVEaW1lbnNpb25JbnRlcm5hbChkaW1lbnNpb24pO1xuICAgICAgICBpZiAocHJldkNvbGxlY3Rpb25UeXBlID09PSBQaXZvdERpbWVuc2lvblR5cGUuQ29sdW1uKSB7XG4gICAgICAgICAgICB0aGlzLnNldHVwQ29sdW1ucygpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcmV2Q29sbGVjdGlvblR5cGUgPT09IFBpdm90RGltZW5zaW9uVHlwZS5GaWx0ZXIpIHtcbiAgICAgICAgICAgIHRoaXMucmVmbG93KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5waXBlVHJpZ2dlcisrO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVG9nZ2xlcyB0aGUgZGltZW5zaW9uJ3MgZW5hYmxlZCBzdGF0ZSBvbiBvciBvZmYuXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBUaGUgZGltZW5zaW9uIHJlbWFpbnMgaW4gaXRzIGN1cnJlbnQgY29sbGVjdGlvbi4gVGhpcyBqdXN0IGNoYW5nZXMgaXRzIGVuYWJsZWQgc3RhdGUuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5ncmlkLnRvZ2dsZURpbWVuc2lvbihkaW1lbnNpb24pO1xuICAgICAqIGBgYFxuICAgICAqIEBwYXJhbSBkaW1lbnNpb24gVGhlIGRpbWVuc2lvbiB0byBiZSB0b2dnbGVkLlxuICAgICAqL1xuICAgIHB1YmxpYyB0b2dnbGVEaW1lbnNpb24oZGltZW5zaW9uOiBJUGl2b3REaW1lbnNpb24pIHtcbiAgICAgICAgY29uc3QgZGltVHlwZSA9IHRoaXMuZ2V0RGltZW5zaW9uVHlwZShkaW1lbnNpb24pO1xuICAgICAgICBpZiAoZGltVHlwZSA9PT0gbnVsbCkgcmV0dXJuO1xuICAgICAgICBjb25zdCBjb2xsZWN0aW9uID0gdGhpcy5nZXREaW1lbnNpb25zQnlUeXBlKGRpbVR5cGUpO1xuICAgICAgICBkaW1lbnNpb24uZW5hYmxlZCA9ICFkaW1lbnNpb24uZW5hYmxlZDtcbiAgICAgICAgaWYgKGRpbVR5cGUgPT09IFBpdm90RGltZW5zaW9uVHlwZS5Db2x1bW4pIHtcbiAgICAgICAgICAgIHRoaXMuc2V0dXBDb2x1bW5zKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFkaW1lbnNpb24uZW5hYmxlZCAmJiBkaW1lbnNpb24uZmlsdGVyKSB7XG4gICAgICAgICAgICB0aGlzLmZpbHRlcmluZ1NlcnZpY2UuY2xlYXJGaWx0ZXIoZGltZW5zaW9uLm1lbWJlck5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucGlwZVRyaWdnZXIrKztcbiAgICAgICAgdGhpcy5kaW1lbnNpb25zQ2hhbmdlLmVtaXQoeyBkaW1lbnNpb25zOiBjb2xsZWN0aW9uLCBkaW1lbnNpb25Db2xsZWN0aW9uVHlwZTogZGltVHlwZSB9KTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICBpZiAoZGltVHlwZSA9PT0gUGl2b3REaW1lbnNpb25UeXBlLkZpbHRlcikge1xuICAgICAgICAgICAgdGhpcy5yZWZsb3coKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBpdm90Q29uZmlndXJhdGlvbkNoYW5nZS5lbWl0KHsgcGl2b3RDb25maWd1cmF0aW9uOiB0aGlzLnBpdm90Q29uZmlndXJhdGlvbiB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbnNlcnRzIHZhbHVlIGF0IHNwZWNpZmllZCBpbmRleCBvciBhdCB0aGUgZW5kLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5ncmlkLmluc2VydFZhbHVlQXQodmFsdWUsIDEpO1xuICAgICAqIGBgYFxuICAgICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgZGVmaW5pdGlvbiB0aGF0IHdpbGwgYmUgYWRkZWQuXG4gICAgICogQHBhcmFtIGluZGV4IFRoZSBpbmRleCBpbiB0aGUgY29sbGVjdGlvbiBhdCB3aGljaCB0byBhZGQuXG4gICAgICogVGhpcyBwYXJhbWV0ZXIgaXMgb3B0aW9uYWwuIElmIG5vdCBzZXQgaXQgd2lsbCBhZGQgaXQgdG8gdGhlIGVuZCBvZiB0aGUgY29sbGVjdGlvbi5cbiAgICAgKi9cbiAgICBwdWJsaWMgaW5zZXJ0VmFsdWVBdCh2YWx1ZTogSVBpdm90VmFsdWUsIGluZGV4PzogbnVtYmVyKSB7XG4gICAgICAgIGlmICghdGhpcy5waXZvdENvbmZpZ3VyYXRpb24udmFsdWVzKSB7XG4gICAgICAgICAgICB0aGlzLnBpdm90Q29uZmlndXJhdGlvbi52YWx1ZXMgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLnBpdm90Q29uZmlndXJhdGlvbi52YWx1ZXM7XG4gICAgICAgIGlmIChpbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB2YWx1ZXMuc3BsaWNlKGluZGV4LCAwLCB2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YWx1ZXMucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXR1cENvbHVtbnMoKTtcbiAgICAgICAgdGhpcy5waXBlVHJpZ2dlcisrO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIHRoaXMudmFsdWVzQ2hhbmdlLmVtaXQoeyB2YWx1ZXMgfSk7XG4gICAgICAgIHRoaXMucGl2b3RDb25maWd1cmF0aW9uQ2hhbmdlLmVtaXQoeyBwaXZvdENvbmZpZ3VyYXRpb246IHRoaXMucGl2b3RDb25maWd1cmF0aW9uIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1vdmUgdmFsdWUgZnJvbSBpdHMgY3VycmVudGx5IGF0IHNwZWNpZmllZCBpbmRleCBvciBhdCB0aGUgZW5kLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5ncmlkLm1vdmVWYWx1ZSh2YWx1ZSwgMSk7XG4gICAgICogYGBgXG4gICAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSB0aGF0IHdpbGwgYmUgbW92ZWQuXG4gICAgICogQHBhcmFtIGluZGV4IFRoZSBpbmRleCBpbiB0aGUgY29sbGVjdGlvbiBhdCB3aGljaCB0byBhZGQuXG4gICAgICogVGhpcyBwYXJhbWV0ZXIgaXMgb3B0aW9uYWwuIElmIG5vdCBzZXQgaXQgd2lsbCBhZGQgaXQgdG8gdGhlIGVuZCBvZiB0aGUgY29sbGVjdGlvbi5cbiAgICAgKi9cbiAgICBwdWJsaWMgbW92ZVZhbHVlKHZhbHVlOiBJUGl2b3RWYWx1ZSwgaW5kZXg/OiBudW1iZXIpIHtcbiAgICAgICAgaWYgKHRoaXMucGl2b3RDb25maWd1cmF0aW9uLnZhbHVlcy5pbmRleE9mKHZhbHVlKSA9PT0gLTEpIHJldHVybjtcbiAgICAgICAgLy8gcmVtb3ZlIGZyb20gb2xkIGluZGV4XG4gICAgICAgIHRoaXMucmVtb3ZlVmFsdWUodmFsdWUpO1xuICAgICAgICAvLyBhZGQgdG8gbmV3XG4gICAgICAgIHRoaXMuaW5zZXJ0VmFsdWVBdCh2YWx1ZSwgaW5kZXgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgdmFsdWUgZnJvbSBjb2xsZWN0aW9uLlxuICAgICAqIEByZW1hcmtzXG4gICAgICogVGhpcyBpcyBkaWZmZXJlbnQgdGhhbiB0b2dnbGVWYWx1ZSB0aGF0IGVuYWJsZWQvZGlzYWJsZXMgdGhlIHZhbHVlLlxuICAgICAqIFRoaXMgY29tcGxldGVseSByZW1vdmVzIHRoZSBzcGVjaWZpZWQgdmFsdWUgZnJvbSB0aGUgY29sbGVjdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLmdyaWQucmVtb3ZlVmFsdWUoZGltZW5zaW9uKTtcbiAgICAgKiBgYGBcbiAgICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIGJlIHJlbW92ZWQuXG4gICAgICovXG4gICAgcHVibGljIHJlbW92ZVZhbHVlKHZhbHVlOiBJUGl2b3RWYWx1ZSwpIHtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gdGhpcy5waXZvdENvbmZpZ3VyYXRpb24udmFsdWVzO1xuICAgICAgICBjb25zdCBjdXJyZW50SW5kZXggPSB2YWx1ZXMuaW5kZXhPZih2YWx1ZSk7XG4gICAgICAgIGlmIChjdXJyZW50SW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICB2YWx1ZXMuc3BsaWNlKGN1cnJlbnRJbmRleCwgMSk7XG4gICAgICAgICAgICB0aGlzLnNldHVwQ29sdW1ucygpO1xuICAgICAgICAgICAgdGhpcy5waXBlVHJpZ2dlcisrO1xuICAgICAgICAgICAgdGhpcy52YWx1ZXNDaGFuZ2UuZW1pdCh7IHZhbHVlcyB9KTtcbiAgICAgICAgICAgIHRoaXMucGl2b3RDb25maWd1cmF0aW9uQ2hhbmdlLmVtaXQoeyBwaXZvdENvbmZpZ3VyYXRpb246IHRoaXMucGl2b3RDb25maWd1cmF0aW9uIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVG9nZ2xlcyB0aGUgdmFsdWUncyBlbmFibGVkIHN0YXRlIG9uIG9yIG9mZi5cbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIFRoZSB2YWx1ZSByZW1haW5zIGluIGl0cyBjdXJyZW50IGNvbGxlY3Rpb24uIFRoaXMganVzdCBjaGFuZ2VzIGl0cyBlbmFibGVkIHN0YXRlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuZ3JpZC50b2dnbGVWYWx1ZSh2YWx1ZSk7XG4gICAgICogYGBgXG4gICAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSB0byBiZSB0b2dnbGVkLlxuICAgICAqL1xuICAgIHB1YmxpYyB0b2dnbGVWYWx1ZSh2YWx1ZTogSVBpdm90VmFsdWUpIHtcbiAgICAgICAgaWYgKHRoaXMucGl2b3RDb25maWd1cmF0aW9uLnZhbHVlcy5pbmRleE9mKHZhbHVlKSA9PT0gLTEpIHJldHVybjtcbiAgICAgICAgdmFsdWUuZW5hYmxlZCA9ICF2YWx1ZS5lbmFibGVkO1xuICAgICAgICB0aGlzLnNldHVwQ29sdW1ucygpO1xuICAgICAgICB0aGlzLnBpcGVUcmlnZ2VyKys7XG4gICAgICAgIHRoaXMudmFsdWVzQ2hhbmdlLmVtaXQoeyB2YWx1ZXM6IHRoaXMucGl2b3RDb25maWd1cmF0aW9uLnZhbHVlcyB9KTtcbiAgICAgICAgdGhpcy5yZWZsb3coKTtcbiAgICAgICAgdGhpcy5waXZvdENvbmZpZ3VyYXRpb25DaGFuZ2UuZW1pdCh7IHBpdm90Q29uZmlndXJhdGlvbjogdGhpcy5waXZvdENvbmZpZ3VyYXRpb24gfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU29ydCB0aGUgZGltZW5zaW9uIGFuZCBpdHMgY2hpbGRyZW4gaW4gdGhlIHByb3ZpZGVkIGRpcmVjdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLmdyaWQuc29ydERpbWVuc2lvbihkaW1lbnNpb24sIFNvcnRpbmdEaXJlY3Rpb24uQXNjKTtcbiAgICAgKiBgYGBcbiAgICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIGJlIHRvZ2dsZWQuXG4gICAgICovXG4gICAgcHVibGljIHNvcnREaW1lbnNpb24oZGltZW5zaW9uOiBJUGl2b3REaW1lbnNpb24sIHNvcnREaXJlY3Rpb246IFNvcnRpbmdEaXJlY3Rpb24pIHtcbiAgICAgICAgY29uc3QgZGltZW5zaW9uVHlwZSA9IHRoaXMuZ2V0RGltZW5zaW9uVHlwZShkaW1lbnNpb24pO1xuICAgICAgICBkaW1lbnNpb24uc29ydERpcmVjdGlvbiA9IHNvcnREaXJlY3Rpb247XG4gICAgICAgIC8vIGFwcGx5IHNhbWUgc29ydCBkaXJlY3Rpb24gdG8gY2hpbGRyZW4uXG4gICAgICAgIGxldCBkaW0gPSBkaW1lbnNpb247XG4gICAgICAgIHdoaWxlIChkaW0uY2hpbGRMZXZlbCkge1xuICAgICAgICAgICAgZGltLmNoaWxkTGV2ZWwuc29ydERpcmVjdGlvbiA9IGRpbWVuc2lvbi5zb3J0RGlyZWN0aW9uO1xuICAgICAgICAgICAgZGltID0gZGltLmNoaWxkTGV2ZWw7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5waXBlVHJpZ2dlcisrO1xuICAgICAgICB0aGlzLmRpbWVuc2lvbnNTb3J0aW5nRXhwcmVzc2lvbnNDaGFuZ2UuZW1pdCh0aGlzLmRpbWVuc2lvbnNTb3J0aW5nRXhwcmVzc2lvbnMpO1xuICAgICAgICBpZiAoZGltZW5zaW9uVHlwZSA9PT0gUGl2b3REaW1lbnNpb25UeXBlLkNvbHVtbikge1xuICAgICAgICAgICAgdGhpcy5zZXR1cENvbHVtbnMoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIHRoaXMucGl2b3RDb25maWd1cmF0aW9uQ2hhbmdlLmVtaXQoeyBwaXZvdENvbmZpZ3VyYXRpb246IHRoaXMucGl2b3RDb25maWd1cmF0aW9uIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpbHRlcnMgYSBzaW5nbGUgYElQaXZvdERpbWVuc2lvbmAuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBwdWJsaWMgZmlsdGVyKCkge1xuICAgICAqICAgICAgY29uc3Qgc2V0ID0gbmV3IFNldCgpO1xuICAgICAqICAgICAgc2V0LmFkZCgnVmFsdWUgMScpO1xuICAgICAqICAgICAgc2V0LmFkZCgnVmFsdWUgMicpO1xuICAgICAqICAgICAgdGhpcy5ncmlkMS5maWx0ZXJEaW1lbnNpb24odGhpcy5waXZvdENvbmZpZ0hpZXJhcmNoeS5yb3dzWzBdLCBzZXQsIElneFN0cmluZ0ZpbHRlcmluZ09wZXJhbmQuaW5zdGFuY2UoKS5jb25kaXRpb24oJ2luJykpO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZmlsdGVyRGltZW5zaW9uKGRpbWVuc2lvbjogSVBpdm90RGltZW5zaW9uLCB2YWx1ZTogYW55LCBjb25kaXRpb25PckV4cHJlc3Npb25UcmVlPzogSUZpbHRlcmluZ09wZXJhdGlvbiB8IElGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUpIHtcbiAgICAgICAgdGhpcy5maWx0ZXJpbmdTZXJ2aWNlLmZpbHRlcihkaW1lbnNpb24ubWVtYmVyTmFtZSwgdmFsdWUsIGNvbmRpdGlvbk9yRXhwcmVzc2lvblRyZWUpO1xuICAgICAgICBjb25zdCBkaW1lbnNpb25UeXBlID0gdGhpcy5nZXREaW1lbnNpb25UeXBlKGRpbWVuc2lvbik7XG4gICAgICAgIGlmIChkaW1lbnNpb25UeXBlID09PSBQaXZvdERpbWVuc2lvblR5cGUuQ29sdW1uKSB7XG4gICAgICAgICAgICB0aGlzLnNldHVwQ29sdW1ucygpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXREaW1lbnNpb25zQnlUeXBlKGRpbWVuc2lvbjogUGl2b3REaW1lbnNpb25UeXBlKSB7XG4gICAgICAgIHN3aXRjaCAoZGltZW5zaW9uKSB7XG4gICAgICAgICAgICBjYXNlIFBpdm90RGltZW5zaW9uVHlwZS5Sb3c6XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnBpdm90Q29uZmlndXJhdGlvbi5yb3dzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGl2b3RDb25maWd1cmF0aW9uLnJvd3MgPSBbXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGl2b3RDb25maWd1cmF0aW9uLnJvd3M7XG4gICAgICAgICAgICBjYXNlIFBpdm90RGltZW5zaW9uVHlwZS5Db2x1bW46XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnBpdm90Q29uZmlndXJhdGlvbi5jb2x1bW5zKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGl2b3RDb25maWd1cmF0aW9uLmNvbHVtbnMgPSBbXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGl2b3RDb25maWd1cmF0aW9uLmNvbHVtbnM7XG4gICAgICAgICAgICBjYXNlIFBpdm90RGltZW5zaW9uVHlwZS5GaWx0ZXI6XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnBpdm90Q29uZmlndXJhdGlvbi5maWx0ZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGl2b3RDb25maWd1cmF0aW9uLmZpbHRlcnMgPSBbXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGl2b3RDb25maWd1cmF0aW9uLmZpbHRlcnM7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgcmVzaXplUm93RGltZW5zaW9uUGl4ZWxzKGRpbWVuc2lvbjogSVBpdm90RGltZW5zaW9uLCBuZXdXaWR0aDogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGlzUGVyY2VudGFnZVdpZHRoID0gZGltZW5zaW9uLndpZHRoICYmIHR5cGVvZiBkaW1lbnNpb24ud2lkdGggPT09ICdzdHJpbmcnICYmIGRpbWVuc2lvbi53aWR0aC5pbmRleE9mKCclJykgIT09IC0xO1xuICAgICAgICBpZiAoaXNQZXJjZW50YWdlV2lkdGgpIHtcbiAgICAgICAgICAgIGRpbWVuc2lvbi53aWR0aCA9IHRoaXMucmV2ZXJzZURpbWVuc2lvbldpZHRoVG9QZXJjZW50KG5ld1dpZHRoKS50b0ZpeGVkKDIpICsgJyUnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGltZW5zaW9uLndpZHRoID0gbmV3V2lkdGggKyAncHgnO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTm90aWZ5IHRoZSBncmlkIHRvIHJlZmxvdywgdG8gdXBkYXRlIGlmIGhvcml6b250YWwgc2Nyb2xsYmFyIG5lZWRzIHRvIGJlIHJlbmRlcmVkL3JlbW92ZWQuXG4gICAgICAgIHRoaXMucGlwZVRyaWdnZXIrKztcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qXG4gICAgKiBAaGlkZGVuXG4gICAgKiBAaW50ZXJuYWxcbiAgICAqL1xuICAgIHByb3RlY3RlZCBfcmVtb3ZlRGltZW5zaW9uSW50ZXJuYWwoZGltZW5zaW9uKSB7XG4gICAgICAgIGNvbnN0IHByZXZDb2xsZWN0aW9uVHlwZSA9IHRoaXMuZ2V0RGltZW5zaW9uVHlwZShkaW1lbnNpb24pO1xuICAgICAgICBpZiAocHJldkNvbGxlY3Rpb25UeXBlID09PSBudWxsKSByZXR1cm47XG4gICAgICAgIGNvbnN0IHByZXZDb2xsZWN0aW9uID0gdGhpcy5nZXREaW1lbnNpb25zQnlUeXBlKHByZXZDb2xsZWN0aW9uVHlwZSk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IHByZXZDb2xsZWN0aW9uLmluZGV4T2YoZGltZW5zaW9uKTtcbiAgICAgICAgcHJldkNvbGxlY3Rpb24uc3BsaWNlKGN1cnJlbnRJbmRleCwgMSk7XG4gICAgICAgIHRoaXMucGlwZVRyaWdnZXIrKztcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXREaW1lbnNpb25UeXBlKGRpbWVuc2lvbjogSVBpdm90RGltZW5zaW9uKTogUGl2b3REaW1lbnNpb25UeXBlIHtcbiAgICAgICAgcmV0dXJuIFBpdm90VXRpbC5mbGF0dGVuKHRoaXMucGl2b3RDb25maWd1cmF0aW9uLnJvd3MpLmluZGV4T2YoZGltZW5zaW9uKSAhPT0gLTEgPyBQaXZvdERpbWVuc2lvblR5cGUuUm93IDpcbiAgICAgICAgICAgIFBpdm90VXRpbC5mbGF0dGVuKHRoaXMucGl2b3RDb25maWd1cmF0aW9uLmNvbHVtbnMpLmluZGV4T2YoZGltZW5zaW9uKSAhPT0gLTEgPyBQaXZvdERpbWVuc2lvblR5cGUuQ29sdW1uIDpcbiAgICAgICAgICAgICAgICAoISF0aGlzLnBpdm90Q29uZmlndXJhdGlvbi5maWx0ZXJzICYmIFBpdm90VXRpbC5mbGF0dGVuKHRoaXMucGl2b3RDb25maWd1cmF0aW9uLmZpbHRlcnMpLmluZGV4T2YoZGltZW5zaW9uKSAhPT0gLTEpID9cbiAgICAgICAgICAgICAgICAgICAgUGl2b3REaW1lbnNpb25UeXBlLkZpbHRlciA6IG51bGw7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldFBpdm90Um93SGVhZGVDb250ZW50V2lkdGgoaGVhZGVyR3JvdXA6IElneFBpdm90Um93SGVhZGVyR3JvdXBDb21wb25lbnQpIHtcbiAgICAgICAgY29uc3QgaGVhZGVyU3R5bGUgPSB0aGlzLmRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoaGVhZGVyR3JvdXAubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIGNvbnN0IGhlYWRlclBhZGRpbmcgPSBwYXJzZUZsb2F0KGhlYWRlclN0eWxlLnBhZGRpbmdMZWZ0KSArIHBhcnNlRmxvYXQoaGVhZGVyU3R5bGUucGFkZGluZ1JpZ2h0KSArXG4gICAgICAgICAgICBwYXJzZUZsb2F0KGhlYWRlclN0eWxlLmJvcmRlclJpZ2h0V2lkdGgpO1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRIZWFkZXJDZWxsV2lkdGgoaGVhZGVyR3JvdXAuaGVhZGVyLnJlZkluc3RhbmNlLm5hdGl2ZUVsZW1lbnQpLndpZHRoICsgaGVhZGVyUGFkZGluZztcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0TGFyZ2VzQ29udGVudFdpZHRoKGNvbnRlbnRzOiBFbGVtZW50UmVmW10pOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBsYXJnZXN0ID0gbmV3IE1hcDxudW1iZXIsIG51bWJlcj4oKTtcbiAgICAgICAgaWYgKGNvbnRlbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGNlbGxzQ29udGVudFdpZHRocyA9IFtdO1xuICAgICAgICAgICAgY29udGVudHMuZm9yRWFjaCgoZWxlbSkgPT4ge1xuICAgICAgICAgICAgICAgIGVsZW0gaW5zdGFuY2VvZiBJZ3hQaXZvdFJvd0hlYWRlckdyb3VwQ29tcG9uZW50ID9cbiAgICAgICAgICAgICAgICAgICAgY2VsbHNDb250ZW50V2lkdGhzLnB1c2godGhpcy5nZXRQaXZvdFJvd0hlYWRlQ29udGVudFdpZHRoKGVsZW0pKSA6XG4gICAgICAgICAgICAgICAgICAgIGNlbGxzQ29udGVudFdpZHRocy5wdXNoKHRoaXMuZ2V0SGVhZGVyQ2VsbFdpZHRoKGVsZW0ubmF0aXZlRWxlbWVudCkud2lkdGgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IGNlbGxzQ29udGVudFdpZHRocy5pbmRleE9mKE1hdGgubWF4KC4uLmNlbGxzQ29udGVudFdpZHRocykpO1xuICAgICAgICAgICAgY29uc3QgY2VsbFN0eWxlID0gdGhpcy5kb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKGNvbnRlbnRzW2luZGV4XS5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgICAgIGNvbnN0IGNlbGxQYWRkaW5nID0gcGFyc2VGbG9hdChjZWxsU3R5bGUucGFkZGluZ0xlZnQpICsgcGFyc2VGbG9hdChjZWxsU3R5bGUucGFkZGluZ1JpZ2h0KSArXG4gICAgICAgICAgICAgICAgcGFyc2VGbG9hdChjZWxsU3R5bGUuYm9yZGVyTGVmdFdpZHRoKSArIHBhcnNlRmxvYXQoY2VsbFN0eWxlLmJvcmRlclJpZ2h0V2lkdGgpO1xuICAgICAgICAgICAgbGFyZ2VzdC5zZXQoTWF0aC5tYXgoLi4uY2VsbHNDb250ZW50V2lkdGhzKSwgY2VsbFBhZGRpbmcpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxhcmdlc3RDZWxsID0gTWF0aC5tYXgoLi4uQXJyYXkuZnJvbShsYXJnZXN0LmtleXMoKSkpO1xuICAgICAgICBjb25zdCB3aWR0aCA9IE1hdGguY2VpbChsYXJnZXN0Q2VsbCArIGxhcmdlc3QuZ2V0KGxhcmdlc3RDZWxsKSk7XG5cbiAgICAgICAgaWYgKE51bWJlci5pc05hTih3aWR0aCkpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHdpZHRoICsgJ3B4JztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICogQGhpZGRlblxuICAgICovXG4gICAgcHVibGljIGdldCBoYXNNdWx0aXBsZVZhbHVlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzLmxlbmd0aCA+IDE7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgKiBAaGlkZGVuXG4gICAgKi9cbiAgICBwdWJsaWMgZ2V0IGV4Y2VsU3R5bGVGaWx0ZXJNYXhIZWlnaHQoKSB7XG4gICAgICAgIC8vIG1heCAxMCByb3dzLCByb3cgc2l6ZSBkZXBlbmRzIG9uIGdyaWQgc2l6ZVxuICAgICAgICBjb25zdCBtYXhIZWlnaHQgPSB0aGlzLnJlbmRlcmVkUm93SGVpZ2h0ICogMTA7XG4gICAgICAgIHJldHVybiBgJHttYXhIZWlnaHR9cHhgO1xuICAgIH1cblxuICAgIC8qKlxuICAgICogQGhpZGRlblxuICAgICovXG4gICAgcHVibGljIGdldCBleGNlbFN0eWxlRmlsdGVyTWluSGVpZ2h0KCk6IHN0cmluZyB7XG4gICAgICAgIC8vIG1pbiA1IHJvd3MsIHJvdyBzaXplIGRlcGVuZHMgb24gZ3JpZCBzaXplXG4gICAgICAgIGNvbnN0IG1pbkhlaWdodCA9IHRoaXMucmVuZGVyZWRSb3dIZWlnaHQgKiA1O1xuICAgICAgICByZXR1cm4gYCR7bWluSGVpZ2h0fXB4YDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcmVzb2x2ZVRvZ2dsZShncm91cENvbHVtbjogSWd4Q29sdW1uQ29tcG9uZW50LCBzdGF0ZTogYm9vbGVhbikge1xuICAgICAgICBpZiAoIWdyb3VwQ29sdW1uKSByZXR1cm47XG4gICAgICAgIGdyb3VwQ29sdW1uLmhpZGRlbiA9IHN0YXRlO1xuICAgICAgICB0aGlzLmNvbHVtbkdyb3VwU3RhdGVzLnNldChncm91cENvbHVtbi5maWVsZCwgc3RhdGUpO1xuICAgICAgICBjb25zdCBjaGlsZHJlblRvdGFsID0gdGhpcy5oYXNNdWx0aXBsZVZhbHVlcyA/XG4gICAgICAgICAgICBncm91cENvbHVtbi5jaGlsZHJlbi5maWx0ZXIoeCA9PiB4LmNvbHVtbkdyb3VwICYmIHguY2hpbGRyZW4uZmlsdGVyKHkgPT4gIXkuY29sdW1uR3JvdXApLmxlbmd0aCA9PT0gdGhpcy52YWx1ZXMubGVuZ3RoKSA6XG4gICAgICAgICAgICBncm91cENvbHVtbi5jaGlsZHJlbi5maWx0ZXIoeCA9PiAheC5jb2x1bW5Hcm91cCk7XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuU3ViZ3JvdXBzID0gdGhpcy5oYXNNdWx0aXBsZVZhbHVlcyA/XG4gICAgICAgICAgICBncm91cENvbHVtbi5jaGlsZHJlbi5maWx0ZXIoeCA9PiB4LmNvbHVtbkdyb3VwICYmIHguY2hpbGRyZW4uZmlsdGVyKHkgPT4gIXkuY29sdW1uR3JvdXApLmxlbmd0aCA9PT0gMCkgOlxuICAgICAgICAgICAgZ3JvdXBDb2x1bW4uY2hpbGRyZW4uZmlsdGVyKHggPT4geC5jb2x1bW5Hcm91cCk7XG4gICAgICAgIGNoaWxkcmVuVG90YWwuZm9yRWFjaChncm91cCA9PiB7XG4gICAgICAgICAgICBjb25zdCBuZXdTdGF0ZSA9IHRoaXMuY29sdW1uR3JvdXBTdGF0ZXMuZ2V0KGdyb3VwLmZpZWxkKSB8fCBzdGF0ZTtcbiAgICAgICAgICAgIGlmIChuZXdTdGF0ZSkge1xuICAgICAgICAgICAgICAgIGdyb3VwLmhlYWRlclRlbXBsYXRlID0gdGhpcy5oZWFkZXJUZW1wbGF0ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZ3JvdXAuaGVhZGVyVGVtcGxhdGUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIWdyb3VwQ29sdW1uLmhpZGRlbiAmJiBjaGlsZHJlblN1Ymdyb3Vwcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjaGlsZHJlblN1Ymdyb3Vwcy5mb3JFYWNoKGdyb3VwID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdTdGF0ZSA9IHRoaXMuY29sdW1uR3JvdXBTdGF0ZXMuZ2V0KGdyb3VwLmZpZWxkKSB8fCBzdGF0ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc29sdmVUb2dnbGUoZ3JvdXAsIG5ld1N0YXRlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBvdmVycmlkZSBjYWxjR3JpZEhlYWRSb3coKSB7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGJ1aWxkRGF0YVZpZXcoZGF0YTogYW55W10pIHtcbiAgICAgICAgdGhpcy5fZGF0YVZpZXcgPSBkYXRhO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGdldERhdGFCYXNlZEJvZHlIZWlnaHQoKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgZHZsID0gdGhpcy5kYXRhVmlldz8ubGVuZ3RoIHx8IDA7XG4gICAgICAgIHJldHVybiBkdmwgPCB0aGlzLl9kZWZhdWx0VGFyZ2V0UmVjb3JkTnVtYmVyID8gMCA6IHRoaXMuZGVmYXVsdFRhcmdldEJvZHlIZWlnaHQ7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGhvcml6b250YWxTY3JvbGxIYW5kbGVyKGV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHNjcm9sbExlZnQgPSBldmVudC50YXJnZXQuc2Nyb2xsTGVmdDtcbiAgICAgICAgdGhpcy50aGVhZFJvdy5oZWFkZXJDb250YWluZXJzLmZvckVhY2goaGVhZGVyRm9yT2YgPT4ge1xuICAgICAgICAgICAgaGVhZGVyRm9yT2Yub25IU2Nyb2xsKHNjcm9sbExlZnQpO1xuICAgICAgICB9KTtcbiAgICAgICAgc3VwZXIuaG9yaXpvbnRhbFNjcm9sbEhhbmRsZXIoZXZlbnQpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvdmVycmlkZSB2ZXJ0aWNhbFNjcm9sbEhhbmRsZXIoZXZlbnQpIHtcbiAgICAgICAgdGhpcy52ZXJ0aWNhbFJvd0RpbVNjcm9sbENvbnRhaW5lcnMuZm9yRWFjaCh4ID0+IHtcbiAgICAgICAgICAgIHgub25TY3JvbGwoZXZlbnQpO1xuICAgICAgICB9KTtcbiAgICAgICAgc3VwZXIudmVydGljYWxTY3JvbGxIYW5kbGVyKGV2ZW50KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGF1dG9nZW5lcmF0ZUNvbHVtbnMoKSB7XG4gICAgICAgIGxldCBjb2x1bW5zID0gW107XG4gICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmdyaWRBUEkuZmlsdGVyRGF0YUJ5RXhwcmVzc2lvbnModGhpcy5maWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUpO1xuICAgICAgICB0aGlzLmRpbWVuc2lvbkRhdGFDb2x1bW5zID0gdGhpcy5nZW5lcmF0ZURpbWVuc2lvbkNvbHVtbnMoKTtcbiAgICAgICAgY29uc3QgZmxhdHRlbmVkQ29sdW1uc1dpdGhTb3J0aW5nID0gUGl2b3RVdGlsLmZsYXR0ZW4odGhpcy5jb2x1bW5EaW1lbnNpb25zKS5maWx0ZXIoZGltID0+IGRpbS5zb3J0RGlyZWN0aW9uKTtcbiAgICAgICAgY29uc3QgZXhwcmVzc2lvbnMgPSBmbGF0dGVuZWRDb2x1bW5zV2l0aFNvcnRpbmcubGVuZ3RoID4gMCA/IFBpdm90U29ydFV0aWwuZ2VuZXJhdGVEaW1lbnNpb25Tb3J0aW5nRXhwcmVzc2lvbnMoZmxhdHRlbmVkQ29sdW1uc1dpdGhTb3J0aW5nKSA6IFtdO1xuICAgICAgICBsZXQgc29ydGVkRGF0YSA9IGRhdGE7XG4gICAgICAgIGlmIChleHByZXNzaW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBzb3J0ZWREYXRhID0gRGF0YVV0aWwuc29ydChjbG9uZUFycmF5KGRhdGEpLCBleHByZXNzaW9ucywgdGhpcy5zb3J0U3RyYXRlZ3ksIHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBmaWVsZHNNYXA7XG4gICAgICAgIGlmICh0aGlzLnBpdm90Q29uZmlndXJhdGlvbi5jb2x1bW5TdHJhdGVneSAmJiB0aGlzLnBpdm90Q29uZmlndXJhdGlvbi5jb2x1bW5TdHJhdGVneSBpbnN0YW5jZW9mIE5vb3BQaXZvdERpbWVuc2lvbnNTdHJhdGVneSkge1xuICAgICAgICAgICAgY29uc3QgZmllbGRzID0gdGhpcy5nZW5lcmF0ZURhdGFGaWVsZHMoc29ydGVkRGF0YSk7XG4gICAgICAgICAgICBpZiAoZmllbGRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3Qgcm93RmllbGRzID0gUGl2b3RVdGlsLmZsYXR0ZW4odGhpcy5waXZvdENvbmZpZ3VyYXRpb24ucm93cykubWFwKHggPT4geC5tZW1iZXJOYW1lKTtcbiAgICAgICAgICAgIGNvbnN0IGtleUZpZWxkcyA9IE9iamVjdC52YWx1ZXModGhpcy5waXZvdEtleXMpO1xuICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRGaWVsZHMgPSBmaWVsZHMuZmlsdGVyKHggPT4gcm93RmllbGRzLmluZGV4T2YoeCkgPT09IC0xICYmIGtleUZpZWxkcy5pbmRleE9mKHgpID09PSAtMSAmJlxuICAgICAgICAgICAgICAgIHguaW5kZXhPZih0aGlzLnBpdm90S2V5cy5yb3dEaW1lbnNpb25TZXBhcmF0b3IgKyB0aGlzLnBpdm90S2V5cy5sZXZlbCkgPT09IC0xICYmXG4gICAgICAgICAgICAgICAgeC5pbmRleE9mKHRoaXMucGl2b3RLZXlzLnJvd0RpbWVuc2lvblNlcGFyYXRvciArIHRoaXMucGl2b3RLZXlzLnJlY29yZHMpID09PSAtMSk7XG4gICAgICAgICAgICBmaWVsZHNNYXAgPSB0aGlzLmdlbmVyYXRlRnJvbURhdGEoZmlsdGVyZWRGaWVsZHMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZmllbGRzTWFwID0gUGl2b3RVdGlsLmdldEZpZWxkc0hpZXJhcmNoeShcbiAgICAgICAgICAgICAgICBzb3J0ZWREYXRhLFxuICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uRGltZW5zaW9ucyxcbiAgICAgICAgICAgICAgICBQaXZvdERpbWVuc2lvblR5cGUuQ29sdW1uLFxuICAgICAgICAgICAgICAgIHRoaXMucGl2b3RLZXlzLFxuICAgICAgICAgICAgICAgIHRoaXMucGl2b3RWYWx1ZUNsb25lU3RyYXRlZ3lcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgY29sdW1ucyA9IHRoaXMuZ2VuZXJhdGVDb2x1bW5IaWVyYXJjaHkoZmllbGRzTWFwLCBzb3J0ZWREYXRhKTtcbiAgICAgICAgdGhpcy5fYXV0b0dlbmVyYXRlZENvbHMgPSBjb2x1bW5zO1xuICAgICAgICAvLyByZXNldCBleHBhbnNpb24gc3RhdGVzIGlmIGFueSBhcmUgc3RvcmVkLlxuICAgICAgICB0aGlzLmNvbHVtbkdyb3VwU3RhdGVzLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHByaW1hcnlDb2x1bW4gPSBjb2x1bW5zLmZpbmQoeCA9PiB4LmZpZWxkID09PSBrZXkgJiYgeC5oZWFkZXJUZW1wbGF0ZSA9PT0gdGhpcy5oZWFkZXJUZW1wbGF0ZSk7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JvdXBTdW1tYXJ5Q29sdW1uID0gY29sdW1ucy5maW5kKHggPT4geC5maWVsZCA9PT0ga2V5ICYmIHguaGVhZGVyVGVtcGxhdGUgIT09IHRoaXMuaGVhZGVyVGVtcGxhdGUpO1xuICAgICAgICAgICAgICAgIHRoaXMudG9nZ2xlUm93R3JvdXAocHJpbWFyeUNvbHVtbiwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmIChncm91cFN1bW1hcnlDb2x1bW4pIHtcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXBTdW1tYXJ5Q29sdW1uLmhlYWRlclRlbXBsYXRlID0gdGhpcy5oZWFkZXJUZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMudXBkYXRlQ29sdW1ucyhjb2x1bW5zKTtcbiAgICAgICAgdGhpcy5yZWZsb3coKTtcbiAgICAgICAgaWYgKGRhdGEgJiYgZGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLnNob3VsZEdlbmVyYXRlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIHByb3RlY3RlZCBnZW5lcmF0ZURpbWVuc2lvbkNvbHVtbnMoKTogSWd4Q29sdW1uQ29tcG9uZW50W10ge1xuICAgICAgICBjb25zdCBjb2x1bW5zID0gW107XG4gICAgICAgIHRoaXMuYWxsRGltZW5zaW9ucy5mb3JFYWNoKChkaW0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlZiA9IGNyZWF0ZUNvbXBvbmVudChJZ3hDb2x1bW5Db21wb25lbnQsIHsgZW52aXJvbm1lbnRJbmplY3RvcjogdGhpcy5lbnZJbmplY3RvciwgZWxlbWVudEluamVjdG9yOiB0aGlzLmluamVjdG9yIH0pO1xuICAgICAgICAgICAgcmVmLmluc3RhbmNlLmZpZWxkID0gZGltLm1lbWJlck5hbWU7XG4gICAgICAgICAgICByZWYuaW5zdGFuY2UuaGVhZGVyID0gZGltLmRpc3BsYXlOYW1lIHx8IGRpbS5tZW1iZXJOYW1lO1xuICAgICAgICAgICAgcmVmLmluc3RhbmNlLmhlYWRlclRlbXBsYXRlID0gdGhpcy5yb3dEaW1lbnNpb25IZWFkZXJUZW1wbGF0ZTtcbiAgICAgICAgICAgIHJlZi5pbnN0YW5jZS5yZXNpemFibGUgPSB0aGlzLnJvd0RpbWVuc2lvblJlc2l6aW5nO1xuICAgICAgICAgICAgcmVmLmluc3RhbmNlLnNvcnRhYmxlID0gZGltLnNvcnRhYmxlID09PSB1bmRlZmluZWQgPyB0cnVlIDogZGltLnNvcnRhYmxlO1xuICAgICAgICAgICAgcmVmLmluc3RhbmNlLndpZHRoID0gdGhpcy5yb3dEaW1lbnNpb25XaWR0aFRvUGl4ZWxzKGRpbSkgKyAncHgnO1xuICAgICAgICAgICAgcmVmLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIGNvbHVtbnMucHVzaChyZWYuaW5zdGFuY2UpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNvbHVtbnM7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGNhbGN1bGF0ZUdyaWRTaXplcyhyZWNhbGNGZWF0dXJlV2lkdGggPSB0cnVlKSB7XG4gICAgICAgIHN1cGVyLmNhbGN1bGF0ZUdyaWRTaXplcyhyZWNhbGNGZWF0dXJlV2lkdGgpO1xuICAgICAgICBpZiAodGhpcy5oYXNEaW1lbnNpb25zVG9BdXRvc2l6ZSkge1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgdGhpcy56b25lLm9uU3RhYmxlLnBpcGUoZmlyc3QoKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmF1dG9TaXplRGltZW5zaW9uc0luVmlldygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYXV0b1NpemVEaW1lbnNpb25zSW5WaWV3KCkge1xuICAgICAgICBpZiAoIXRoaXMuaGFzRGltZW5zaW9uc1RvQXV0b3NpemUpIHJldHVybjtcbiAgICAgICAgZm9yIChjb25zdCBkaW0gb2YgdGhpcy5yb3dEaW1lbnNpb25zKSB7XG4gICAgICAgICAgICBpZiAoZGltLndpZHRoID09PSAnYXV0bycpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb250ZW50V2lkdGhzID0gW107XG4gICAgICAgICAgICAgICAgY29uc3QgcmVsYXRlZERpbXMgPSBQaXZvdFV0aWwuZmxhdHRlbihbZGltXSkubWFwKHggPT4geC5tZW1iZXJOYW1lKTtcbiAgICAgICAgICAgICAgICBjb25zdCBjb250ZW50ID0gdGhpcy5yb3dEaW1lbnNpb25Db250ZW50Q29sbGVjdGlvbi5maWx0ZXIoeCA9PiByZWxhdGVkRGltcy5pbmRleE9mKHguZGltZW5zaW9uLm1lbWJlck5hbWUpICE9PSAtMSk7XG4gICAgICAgICAgICAgICAgY29uc3QgaGVhZGVycyA9IGNvbnRlbnQubWFwKHggPT4geC5oZWFkZXJHcm91cHMudG9BcnJheSgpKS5mbGF0KCkubWFwKHggPT4geC5oZWFkZXIgJiYgeC5oZWFkZXIucmVmSW5zdGFuY2UpO1xuICAgICAgICAgICAgICAgIGhlYWRlcnMuZm9yRWFjaCgoaGVhZGVyKSA9PiBjb250ZW50V2lkdGhzLnB1c2goaGVhZGVyPy5uYXRpdmVFbGVtZW50Py5vZmZzZXRXaWR0aCB8fCAwKSk7XG4gICAgICAgICAgICAgICAgY29uc3QgbWF4ID0gTWF0aC5tYXgoLi4uY29udGVudFdpZHRocyk7XG4gICAgICAgICAgICAgICAgaWYgKG1heCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBjZWxscyBub3QgaW4gRE9NIHlldC4uLlxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgbWF4U2l6ZSA9IE1hdGguY2VpbChNYXRoLm1heCguLi5jb250ZW50V2lkdGhzKSk7XG4gICAgICAgICAgICAgICAgZGltLmF1dG9XaWR0aCA9IG1heFNpemU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAgICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgICAgIHB1YmxpYyBnZXQgaGFzRGltZW5zaW9uc1RvQXV0b3NpemUoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yb3dEaW1lbnNpb25zLnNvbWUoeCA9PiB4LndpZHRoID09PSAnYXV0bycgJiYgIXguYXV0b1dpZHRoKTtcbiAgICAgICAgfVxuXG4gICAgcHJvdGVjdGVkIGdlbmVyYXRlRnJvbURhdGEoZmllbGRzOiBzdHJpbmdbXSkge1xuICAgICAgICBjb25zdCBzZXBhcmF0b3IgPSB0aGlzLnBpdm90S2V5cy5jb2x1bW5EaW1lbnNpb25TZXBhcmF0b3I7XG4gICAgICAgIGNvbnN0IGRhdGFBcnIgPSBmaWVsZHMubWFwKHggPT4geC5zcGxpdChzZXBhcmF0b3IpKS5zb3J0KHggPT4geC5sZW5ndGgpO1xuICAgICAgICBjb25zdCBoaWVyYXJjaHkgPSBuZXcgTWFwPHN0cmluZywgYW55PigpO1xuICAgICAgICBjb25zdCBjb2x1bW5EaW1lbnNpb25zID0gIFBpdm90VXRpbC5mbGF0dGVuKHRoaXMuY29sdW1uRGltZW5zaW9ucyk7XG4gICAgICAgIGRhdGFBcnIuZm9yRWFjaChhcnIgPT4ge1xuICAgICAgICAgICAgbGV0IGN1cnJlbnRIaWVyYXJjaHkgPSBoaWVyYXJjaHk7XG4gICAgICAgICAgICBjb25zdCBwYXRoID0gW107XG4gICAgICAgICAgICBsZXQgaW5kZXggPSAwO1xuICAgICAgICAgICAgZm9yIChjb25zdCB2YWwgb2YgYXJyKSB7XG4gICAgICAgICAgICAgICAgcGF0aC5wdXNoKHZhbCk7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3UGF0aCA9IHBhdGguam9pbihzZXBhcmF0b3IpO1xuICAgICAgICAgICAgICAgIGxldCB0YXJnZXRIaWVyYXJjaHkgPSBjdXJyZW50SGllcmFyY2h5LmdldChuZXdQYXRoKTtcbiAgICAgICAgICAgICAgICBpZiAoIXRhcmdldEhpZXJhcmNoeSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50Q29sdW1uRGltZW5zaW9uID0gY29sdW1uRGltZW5zaW9uc1tpbmRleF07XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRIaWVyYXJjaHkuc2V0KG5ld1BhdGgsIHsgdmFsdWU6IG5ld1BhdGgsIGV4cGFuZGFibGU6ICEhY3VycmVudENvbHVtbkRpbWVuc2lvbi5jaGlsZExldmVsLCBjaGlsZHJlbjogbmV3IE1hcDxzdHJpbmcsIGFueT4oKSwgZGltZW5zaW9uOiBjdXJyZW50Q29sdW1uRGltZW5zaW9uIH0pO1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXRIaWVyYXJjaHkgPSBjdXJyZW50SGllcmFyY2h5LmdldChuZXdQYXRoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY3VycmVudEhpZXJhcmNoeSA9IHRhcmdldEhpZXJhcmNoeS5jaGlsZHJlbjtcbiAgICAgICAgICAgICAgICBpbmRleCsrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGhpZXJhcmNoeTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2VuZXJhdGVDb2x1bW5IaWVyYXJjaHkoZmllbGRzOiBNYXA8c3RyaW5nLCBhbnk+LCBkYXRhLCBwYXJlbnQgPSBudWxsKTogSWd4Q29sdW1uQ29tcG9uZW50W10ge1xuICAgICAgICBsZXQgY29sdW1ucyA9IFtdO1xuICAgICAgICBpZiAoZmllbGRzLnNpemUgPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWVzLmZvckVhY2goKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVmID0gY3JlYXRlQ29tcG9uZW50KElneENvbHVtbkNvbXBvbmVudCwgeyBlbnZpcm9ubWVudEluamVjdG9yOiB0aGlzLmVudkluamVjdG9yLCBlbGVtZW50SW5qZWN0b3I6IHRoaXMuaW5qZWN0b3IgfSk7XG4gICAgICAgICAgICAgICAgcmVmLmluc3RhbmNlLmhlYWRlciA9IHZhbHVlLmRpc3BsYXlOYW1lO1xuICAgICAgICAgICAgICAgIHJlZi5pbnN0YW5jZS5maWVsZCA9IHZhbHVlLm1lbWJlcjtcbiAgICAgICAgICAgICAgICByZWYuaW5zdGFuY2UucGFyZW50ID0gcGFyZW50O1xuICAgICAgICAgICAgICAgIHJlZi5pbnN0YW5jZS5zb3J0YWJsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmVmLmluc3RhbmNlLmRhdGFUeXBlID0gdmFsdWUuZGF0YVR5cGUgfHwgdGhpcy5yZXNvbHZlRGF0YVR5cGVzKGRhdGFbMF1bdmFsdWUubWVtYmVyXSk7XG4gICAgICAgICAgICAgICAgcmVmLmluc3RhbmNlLmZvcm1hdHRlciA9IHZhbHVlLmZvcm1hdHRlcjtcbiAgICAgICAgICAgICAgICBjb2x1bW5zLnB1c2gocmVmLmluc3RhbmNlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIGNvbHVtbnM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY3VycmVudEZpZWxkcyA9IGZpZWxkcztcbiAgICAgICAgY3VycmVudEZpZWxkcy5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgbGV0IHNob3VsZEdlbmVyYXRlID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHNob3VsZEdlbmVyYXRlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2hvdWxkR2VuZXJhdGUgJiYgKHZhbHVlLmNoaWxkcmVuID09IG51bGwgfHwgdmFsdWUuY2hpbGRyZW4ubGVuZ3RoID09PSAwIHx8IHZhbHVlLmNoaWxkcmVuLnNpemUgPT09IDApKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29sID0gdGhpcy5jcmVhdGVDb2x1bW5Gb3JEaW1lbnNpb24odmFsdWUsIGRhdGEsIHBhcmVudCwgdGhpcy5oYXNNdWx0aXBsZVZhbHVlcyk7XG4gICAgICAgICAgICAgICAgY29sdW1ucy5wdXNoKGNvbCk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaGFzTXVsdGlwbGVWYWx1ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWVhc3VyZUNoaWxkcmVuID0gdGhpcy5nZXRNZWFzdXJlQ2hpbGRyZW4oZGF0YSwgY29sLCBmYWxzZSwgdmFsdWUuZGltZW5zaW9uLndpZHRoKTtcbiAgICAgICAgICAgICAgICAgICAgY29sLmNoaWxkcmVuLnJlc2V0KG1lYXN1cmVDaGlsZHJlbik7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbnMgPSBjb2x1bW5zLmNvbmNhdChtZWFzdXJlQ2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSBlbHNlIGlmIChzaG91bGRHZW5lcmF0ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbCA9IHRoaXMuY3JlYXRlQ29sdW1uRm9yRGltZW5zaW9uKHZhbHVlLCBkYXRhLCBwYXJlbnQsIHRydWUpO1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5leHBhbmRhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbC5oZWFkZXJUZW1wbGF0ZSA9IHRoaXMuaGVhZGVyVGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5nZW5lcmF0ZUNvbHVtbkhpZXJhcmNoeSh2YWx1ZS5jaGlsZHJlbiwgZGF0YSwgY29sKTtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJlZENoaWxkcmVuID0gY2hpbGRyZW4uZmlsdGVyKHggPT4geC5sZXZlbCA9PT0gY29sLmxldmVsICsgMSk7XG4gICAgICAgICAgICAgICAgY29sdW1ucy5wdXNoKGNvbCk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaGFzTXVsdGlwbGVWYWx1ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IG1lYXN1cmVDaGlsZHJlbiA9IHRoaXMuZ2V0TWVhc3VyZUNoaWxkcmVuKGRhdGEsIGNvbCwgdHJ1ZSwgdmFsdWUuZGltZW5zaW9uLndpZHRoKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmVzdGVkQ2hpbGRyZW4gPSBmaWx0ZXJlZENoaWxkcmVuO1xuICAgICAgICAgICAgICAgICAgICAvL2NvbnN0IGFsbENoaWxkcmVuID0gY2hpbGRyZW4uY29uY2F0KG1lYXN1cmVDaGlsZHJlbik7XG4gICAgICAgICAgICAgICAgICAgIGNvbC5jaGlsZHJlbi5yZXNldChuZXN0ZWRDaGlsZHJlbik7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbnMgPSBjb2x1bW5zLmNvbmNhdChjaGlsZHJlbik7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5kaW1lbnNpb24uY2hpbGRMZXZlbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2libGluZyA9IHRoaXMuY3JlYXRlQ29sdW1uRm9yRGltZW5zaW9uKHZhbHVlLCBkYXRhLCBwYXJlbnQsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1ucy5wdXNoKHNpYmxpbmcpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBtZWFzdXJlQ2hpbGRyZW4gPSB0aGlzLmdldE1lYXN1cmVDaGlsZHJlbihkYXRhLCBzaWJsaW5nLCBmYWxzZSwgdmFsdWUuZGltZW5zaW9uPy53aWR0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaWJsaW5nLmNoaWxkcmVuLnJlc2V0KG1lYXN1cmVDaGlsZHJlbik7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5zID0gY29sdW1ucy5jb25jYXQobWVhc3VyZUNoaWxkcmVuKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29sLmNoaWxkcmVuLnJlc2V0KGZpbHRlcmVkQ2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW5zID0gY29sdW1ucy5jb25jYXQoY2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUuZGltZW5zaW9uLmNoaWxkTGV2ZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpYmxpbmcgPSB0aGlzLmNyZWF0ZUNvbHVtbkZvckRpbWVuc2lvbih2YWx1ZSwgZGF0YSwgcGFyZW50LCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5zLnB1c2goc2libGluZyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBjb2x1bW5zO1xuICAgIH1cblxuXG4gICAgcHJvdGVjdGVkIGdlbmVyYXRlQ29uZmlnKCkge1xuICAgICAgICBpZiAoIXRoaXMuZGF0YSkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmRhdGE7XG4gICAgICAgIGNvbnN0IGZpZWxkcyA9IHRoaXMuZ2VuZXJhdGVEYXRhRmllbGRzKGRhdGEpO1xuICAgICAgICBjb25zdCBjb2x1bW5EaW1lbnNpb25zOiBJUGl2b3REaW1lbnNpb25bXSA9IFtdO1xuICAgICAgICBjb25zdCByb3dEaW1lbnNpb25zOiBJUGl2b3REaW1lbnNpb25bXSA9IFtdO1xuICAgICAgICBjb25zdCB2YWx1ZXM6IElQaXZvdFZhbHVlW10gPSBbXTtcbiAgICAgICAgbGV0IGlzRmlyc3REYXRlID0gdHJ1ZTtcbiAgICAgICAgZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkYXRhVHlwZSA9IHRoaXMucmVzb2x2ZURhdGFUeXBlcyhkYXRhWzBdW2ZpZWxkXSk7XG4gICAgICAgICAgICBzd2l0Y2ggKGRhdGFUeXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZTogSVBpdm90VmFsdWUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtYmVyOiBmaWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5TmFtZTogZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGU6IGRhdGFUeXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFnZ3JlZ2F0ZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICdzdW0nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ1N1bScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFnZ3JlZ2F0b3JOYW1lOiBcIlNVTVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVkOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzLnB1c2godmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcImRhdGVcIjpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkaW1lbnNpb246IElQaXZvdERpbWVuc2lvbiA9IG5ldyBJZ3hQaXZvdERhdGVEaW1lbnNpb24oXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lbWJlck5hbWU6IGZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlZDogaXNGaXJzdERhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZTogZGF0YVR5cGVcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICByb3dEaW1lbnNpb25zLnB1c2goZGltZW5zaW9uKTtcbiAgICAgICAgICAgICAgICBpc0ZpcnN0RGF0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGltZW5zaW9uOiBJUGl2b3REaW1lbnNpb24gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZW1iZXJOYW1lOiBmaWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGU6IGRhdGFUeXBlXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbkRpbWVuc2lvbnMucHVzaChkaW1lbnNpb24pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBjb25maWc6IElQaXZvdENvbmZpZ3VyYXRpb24gPSB7XG4gICAgICAgICAgICBjb2x1bW5zOiBjb2x1bW5EaW1lbnNpb25zLFxuICAgICAgICAgICAgcm93czogcm93RGltZW5zaW9ucyxcbiAgICAgICAgICAgIHZhbHVlczogdmFsdWVzXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMucGl2b3RDb25maWd1cmF0aW9uID0gY29uZmlnO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBjcmVhdGVDb2x1bW5Gb3JEaW1lbnNpb24odmFsdWU6IGFueSwgZGF0YTogYW55LCBwYXJlbnQ6IENvbHVtblR5cGUsIGlzR3JvdXA6IGJvb2xlYW4pIHtcbiAgICAgICAgY29uc3Qga2V5ID0gdmFsdWUudmFsdWU7XG4gICAgICAgIGNvbnN0IHJlZiA9IGlzR3JvdXAgP1xuICAgICAgICAgICAgY3JlYXRlQ29tcG9uZW50KElneENvbHVtbkdyb3VwQ29tcG9uZW50LCB7IGVudmlyb25tZW50SW5qZWN0b3I6IHRoaXMuZW52SW5qZWN0b3IsIGVsZW1lbnRJbmplY3RvcjogdGhpcy5pbmplY3RvciB9KSA6XG4gICAgICAgICAgICBjcmVhdGVDb21wb25lbnQoSWd4Q29sdW1uQ29tcG9uZW50LCB7IGVudmlyb25tZW50SW5qZWN0b3I6IHRoaXMuZW52SW5qZWN0b3IsIGVsZW1lbnRJbmplY3RvcjogdGhpcy5pbmplY3RvciB9KTtcbiAgICAgICAgcmVmLmluc3RhbmNlLmhlYWRlciA9IHBhcmVudCAhPSBudWxsID8ga2V5LnNwbGl0KHBhcmVudC5oZWFkZXIgKyB0aGlzLnBpdm90S2V5cy5jb2x1bW5EaW1lbnNpb25TZXBhcmF0b3IpWzFdIDoga2V5O1xuICAgICAgICByZWYuaW5zdGFuY2UuZmllbGQgPSBrZXk7XG4gICAgICAgIHJlZi5pbnN0YW5jZS5wYXJlbnQgPSBwYXJlbnQ7XG4gICAgICAgIGlmICh2YWx1ZS5kaW1lbnNpb24ud2lkdGgpIHtcbiAgICAgICAgICAgIHJlZi5pbnN0YW5jZS53aWR0aCA9IHZhbHVlLmRpbWVuc2lvbi53aWR0aDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB2YWx1ZURlZmluaXRpb24gPSB0aGlzLnZhbHVlc1swXTtcbiAgICAgICAgcmVmLmluc3RhbmNlLmRhdGFUeXBlID0gdmFsdWVEZWZpbml0aW9uPy5kYXRhVHlwZSB8fCB0aGlzLnJlc29sdmVEYXRhVHlwZXMoZGF0YVswXVt2YWx1ZURlZmluaXRpb24/Lm1lbWJlcl0pO1xuICAgICAgICByZWYuaW5zdGFuY2UuZm9ybWF0dGVyID0gdmFsdWVEZWZpbml0aW9uPy5mb3JtYXR0ZXI7XG4gICAgICAgIHJlZi5pbnN0YW5jZS5zb3J0YWJsZSA9IHRydWU7XG4gICAgICAgIHJlZi5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIHJldHVybiByZWYuaW5zdGFuY2U7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHJlc29sdmVDb2x1bW5EaW1lbnNpb25XaWR0aChkaW06IElQaXZvdERpbWVuc2lvbikge1xuICAgICAgICBpZiAoZGltLndpZHRoKSB7XG4gICAgICAgICAgICByZXR1cm4gZGltLndpZHRoO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLm1pbkNvbHVtbldpZHRoICsgJ3B4JztcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0TWVhc3VyZUNoaWxkcmVuKGRhdGEsIHBhcmVudCwgaGlkZGVuLCBwYXJlbnRXaWR0aCkge1xuICAgICAgICBjb25zdCBjb2xzID0gW107XG4gICAgICAgIGNvbnN0IGNvdW50ID0gdGhpcy52YWx1ZXMubGVuZ3RoO1xuICAgICAgICBjb25zdCBjaGlsZFdpZHRoID0gcGFyc2VJbnQocGFyZW50V2lkdGgsIDEwKSAvIGNvdW50O1xuICAgICAgICBjb25zdCBpc1BlcmNlbnQgPSBwYXJlbnRXaWR0aCAmJiBwYXJlbnRXaWR0aC5pbmRleE9mKCclJykgIT09IC0xO1xuICAgICAgICBjb25zdCBpc0F1dG8gPSBwYXJlbnRXaWR0aCAmJiBwYXJlbnRXaWR0aC5pbmRleE9mKCdhdXRvJykgIT09IC0xO1xuICAgICAgICB0aGlzLnZhbHVlcy5mb3JFYWNoKHZhbCA9PiB7XG4gICAgICAgICAgICBjb25zdCByZWYgPSBjcmVhdGVDb21wb25lbnQoSWd4Q29sdW1uQ29tcG9uZW50LCB7IGVudmlyb25tZW50SW5qZWN0b3I6IHRoaXMuZW52SW5qZWN0b3IsIGVsZW1lbnRJbmplY3RvcjogdGhpcy5pbmplY3RvciB9KTtcbiAgICAgICAgICAgIHJlZi5pbnN0YW5jZS5oZWFkZXIgPSB2YWwuZGlzcGxheU5hbWUgfHwgdmFsLm1lbWJlcjtcbiAgICAgICAgICAgIHJlZi5pbnN0YW5jZS5maWVsZCA9IHBhcmVudC5maWVsZCArIHRoaXMucGl2b3RLZXlzLmNvbHVtbkRpbWVuc2lvblNlcGFyYXRvciArIHZhbC5tZW1iZXI7XG4gICAgICAgICAgICByZWYuaW5zdGFuY2UucGFyZW50ID0gcGFyZW50O1xuICAgICAgICAgICAgaWYgKHBhcmVudFdpZHRoKSB7XG4gICAgICAgICAgICAgICAgcmVmLmluc3RhbmNlLndpZHRoID0gaXNBdXRvID8gJ2F1dG8nIDogaXNQZXJjZW50ID8gY2hpbGRXaWR0aCArICclJyA6IGNoaWxkV2lkdGggKyAncHgnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVmLmluc3RhbmNlLmhpZGRlbiA9IGhpZGRlbjtcbiAgICAgICAgICAgIHJlZi5pbnN0YW5jZS5zb3J0YWJsZSA9IHRoaXMuX3NvcnRhYmxlQ29sdW1ucztcbiAgICAgICAgICAgIHJlZi5pbnN0YW5jZS5kYXRhVHlwZSA9IHZhbC5kYXRhVHlwZSB8fCB0aGlzLnJlc29sdmVEYXRhVHlwZXMoZGF0YVswXVt2YWwubWVtYmVyXSk7XG4gICAgICAgICAgICByZWYuaW5zdGFuY2UuZm9ybWF0dGVyID0gdmFsLmZvcm1hdHRlcjtcbiAgICAgICAgICAgIHJlZi5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICBjb2xzLnB1c2gocmVmLmluc3RhbmNlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBjb2xzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAqL1xuICAgIEBWaWV3Q2hpbGQoJ2VtcHR5UGl2b3RHcmlkVGVtcGxhdGUnLCB7IHJlYWQ6IFRlbXBsYXRlUmVmLCBzdGF0aWM6IHRydWUgfSlcbiAgICBwdWJsaWMgZGVmYXVsdEVtcHR5UGl2b3RHcmlkVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKipcbiAgICAgKiBHZXRzL1NldHMgYSBjdXN0b20gdGVtcGxhdGUgd2hlbiBwaXZvdCBncmlkIGlzIGVtcHR5LlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1waXZvdC1ncmlkIFtlbXB0eVBpdm90R3JpZFRlbXBsYXRlXT1cIm15VGVtcGxhdGVcIj48aWd4LXBpdm90LWdyaWQ+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZW1wdHlQaXZvdEdyaWRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8dm9pZD47XG5cbiAgICAvKipcbiAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IHRlbXBsYXRlKCk6IFRlbXBsYXRlUmVmPGFueT4ge1xuICAgICAgICBjb25zdCBhbGxFbmFibGVkRGltZW5zaW9ucyA9IHRoaXMucm93RGltZW5zaW9ucy5jb25jYXQodGhpcy5jb2x1bW5EaW1lbnNpb25zKTtcbiAgICAgICAgaWYgKGFsbEVuYWJsZWREaW1lbnNpb25zLmxlbmd0aCA9PT0gMCAmJiB0aGlzLnZhbHVlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIC8vIG5vIGVuYWJsZWQgdmFsdWVzIGFuZCBkaW1lbnNpb25zXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lbXB0eVBpdm90R3JpZFRlbXBsYXRlIHx8IHRoaXMuZGVmYXVsdEVtcHR5UGl2b3RHcmlkVGVtcGxhdGU7XG4gICAgICAgIH1cbiAgICAgICAgc3VwZXIudGVtcGxhdGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBlbWl0SW5pdEV2ZW50cyhwaXZvdENvbmZpZzogSVBpdm90Q29uZmlndXJhdGlvbikge1xuICAgICAgICBjb25zdCBkaW1lbnNpb25zID0gUGl2b3RVdGlsLmZsYXR0ZW4odGhpcy5hbGxEaW1lbnNpb25zKTtcbiAgICAgICAgZGltZW5zaW9ucy5mb3JFYWNoKGRpbSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRpbWVuc2lvbkluaXQuZW1pdChkaW0pO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gcGl2b3RDb25maWc/LnZhbHVlcztcbiAgICAgICAgdmFsdWVzPy5mb3JFYWNoKHZhbCA9PiB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlSW5pdC5lbWl0KHZhbCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCByb3dEaW1lbnNpb25CeU5hbWUobWVtYmVyTmFtZTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJvd0RpbWVuc2lvbnMuZmluZCgocm93RGltKSA9PiByb3dEaW0ubWVtYmVyTmFtZSA9PT0gbWVtYmVyTmFtZSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGNhbGN1bGF0ZVJlc2l6ZXJUb3AoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBpdm90VUkuc2hvd1Jvd0hlYWRlcnMgP1xuICAgICAgICAgICAgKHRoaXMudGhlYWRSb3cucGl2b3RGaWx0ZXJDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0IHx8IDApICsgKHRoaXMudGhlYWRSb3cucGl2b3RSb3dDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0IHx8IDApIDpcbiAgICAgICAgICAgIHRoaXMudGhlYWRSb3cubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQ7XG4gICAgfVxufVxuIiwiPCEtLSBUb29sYmFyIGFyZWEgLS0+XG48bmctY29udGVudCBzZWxlY3Q9XCJpZ3gtZ3JpZC10b29sYmFyXCI+PC9uZy1jb250ZW50PlxuXG48IS0tIEdyaWQgdGFibGUgaGVhZCByb3cgYXJlYSAtLT5cbjxpZ3gtcGl2b3QtaGVhZGVyLXJvdyBjbGFzcz1cImlneC1ncmlkLXRoZWFkIGlneC1ncmlkLXRoZWFkLS1waXZvdFwiIHRhYmluZGV4PVwiMFwiXG4gICAgW2dyaWRdPVwidGhpc1wiXG4gICAgW2hhc01STF09XCJoYXNDb2x1bW5MYXlvdXRzXCJcbiAgICBbYWN0aXZlRGVzY2VuZGFudF09XCJhY3RpdmVEZXNjZW5kYW50XCJcbiAgICBbd2lkdGhdPVwiY2FsY1dpZHRoXCJcbiAgICBbcGlubmVkQ29sdW1uQ29sbGVjdGlvbl09XCJwaW5uZWRDb2x1bW5zXCJcbiAgICBbdW5waW5uZWRDb2x1bW5Db2xsZWN0aW9uXT1cInVucGlubmVkQ29sdW1uc1wiXG4gICAgKGtleWRvd24ubWV0YS5jKT1cImNvcHlIYW5kbGVyKCRldmVudClcIlxuICAgIChrZXlkb3duLmNvbnRyb2wuYyk9XCJjb3B5SGFuZGxlcigkZXZlbnQpXCJcbiAgICAoY29weSk9XCJjb3B5SGFuZGxlcigkZXZlbnQpXCJcbiAgICAoa2V5ZG93bik9XCJuYXZpZ2F0aW9uLmhlYWRlck5hdmlnYXRpb24oJGV2ZW50KVwiXG4gICAgKHNjcm9sbCk9XCJwcmV2ZW50SGVhZGVyU2Nyb2xsKCRldmVudClcIlxuPlxuPC9pZ3gtcGl2b3QtaGVhZGVyLXJvdz5cblxuPGRpdiBpZ3hHcmlkQm9keSAoa2V5ZG93bi5jb250cm9sLmMpPVwiY29weUhhbmRsZXIoJGV2ZW50KVwiIChjb3B5KT1cImNvcHlIYW5kbGVyKCRldmVudClcIiBjbGFzcz1cImlneC1ncmlkX190Ym9keVwiIHJvbGU9XCJyb3dncm91cFwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJyb3dEaW1lbnNpb25zLmxlbmd0aCA/IGRlZmF1bHRSb3dEaW1lbnNpb25zVGVtcGxhdGUgOiBlbXB0eVJvd0RpbWVuc2lvbnNUZW1wbGF0ZTsgY29udGV4dDogdGhpc1wiPjwvbmctY29udGFpbmVyPlxuICAgIDxkaXYgY2xhc3M9XCJpZ3gtZ3JpZF9fdGJvZHktY29udGVudFwiIHRhYmluZGV4PVwiMFwiIFthdHRyLnJvbGVdPVwiZGF0YVZpZXcubGVuZ3RoID8gbnVsbCA6ICdyb3cnXCIgKGtleWRvd24pPVwibmF2aWdhdGlvbi5oYW5kbGVOYXZpZ2F0aW9uKCRldmVudClcIiAoZm9jdXMpPVwibmF2aWdhdGlvbi5mb2N1c1Rib2R5KCRldmVudClcIlxuICAgICAgICAoZHJhZ1N0b3ApPVwic2VsZWN0aW9uU2VydmljZS5kcmFnTW9kZSA9ICRldmVudFwiIChzY3JvbGwpPVwicHJldmVudENvbnRhaW5lclNjcm9sbCgkZXZlbnQpXCJcbiAgICAgICAgKGRyYWdTY3JvbGwpPVwiZHJhZ1Njcm9sbCgkZXZlbnQpXCIgW2lneEdyaWREcmFnU2VsZWN0XT1cInNlbGVjdGlvblNlcnZpY2UuZHJhZ01vZGVcIlxuICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cInRvdGFsSGVpZ2h0XCIgW3N0eWxlLndpZHRoLnB4XT1cInBpdm90Q29udGVudENhbGNXaWR0aCB8fCBudWxsXCIgI3Rib2R5IFthdHRyLmFyaWEtYWN0aXZlZGVzY2VuZGFudF09XCJhY3RpdmVEZXNjZW5kYW50XCI+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwiaGFzTW92YWJsZUNvbHVtbnMgJiYgY29sdW1uSW5EcmFnICYmIHBpbm5lZENvbHVtbnMubGVuZ3RoIDw9IDBcIlxuICAgICAgICAgICAgW2lneENvbHVtbk1vdmluZ0Ryb3BdPVwiaGVhZGVyQ29udGFpbmVyXCIgW2F0dHIuZHJvcHBhYmxlXT1cInRydWVcIiBpZD1cImxlZnRcIlxuICAgICAgICAgICAgY2xhc3M9XCJpZ3gtZ3JpZF9fc2Nyb2xsLW9uLWRyYWctbGVmdFwiPjwvc3Bhbj5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJoYXNNb3ZhYmxlQ29sdW1ucyAmJiBjb2x1bW5JbkRyYWcgJiYgcGlubmVkQ29sdW1ucy5sZW5ndGggPiAwXCJcbiAgICAgICAgICAgIFtpZ3hDb2x1bW5Nb3ZpbmdEcm9wXT1cImhlYWRlckNvbnRhaW5lclwiIFthdHRyLmRyb3BwYWJsZV09XCJ0cnVlXCIgaWQ9XCJsZWZ0XCJcbiAgICAgICAgICAgIGNsYXNzPVwiaWd4LWdyaWRfX3Njcm9sbC1vbi1kcmFnLXBpbm5lZFwiIFtzdHlsZS5sZWZ0LnB4XT1cInBpbm5lZFdpZHRoXCI+PC9zcGFuPlxuICAgICAgICA8bmctdGVtcGxhdGUgaWd4R3JpZEZvciBsZXQtcm93RGF0YSBbaWd4R3JpZEZvck9mXT1cImRhdGFcbiAgICAgICAgfCBwaXZvdEdyaWRGaWx0ZXI6cGl2b3RDb25maWd1cmF0aW9uOmZpbHRlclN0cmF0ZWd5OmFkdmFuY2VkRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlOmZpbHRlcmluZ1BpcGVUcmlnZ2VyOnBpcGVUcmlnZ2VyXG4gICAgICAgIHwgcGl2b3RHcmlkU29ydDpwaXZvdENvbmZpZ3VyYXRpb246c29ydFN0cmF0ZWd5OnBpcGVUcmlnZ2VyXG4gICAgICAgIHwgcGl2b3RHcmlkUm93OnBpdm90Q29uZmlndXJhdGlvbjpwaXZvdFZhbHVlQ2xvbmVTdHJhdGVneTpleHBhbnNpb25TdGF0ZXM6cGlwZVRyaWdnZXI6c29ydGluZ0V4cHJlc3Npb25zXG4gICAgICAgIHwgcGl2b3RHcmlkQ29sdW1uOnBpdm90Q29uZmlndXJhdGlvbjpwaXZvdFZhbHVlQ2xvbmVTdHJhdGVneTpleHBhbnNpb25TdGF0ZXM6cGlwZVRyaWdnZXI6c29ydGluZ0V4cHJlc3Npb25zXG4gICAgICAgIHwgcGl2b3RHcmlkQXV0b1RyYW5zZm9ybTpwaXZvdENvbmZpZ3VyYXRpb246cGlwZVRyaWdnZXJcbiAgICAgICAgfCBwaXZvdEdyaWRDb2x1bW5Tb3J0OnNvcnRpbmdFeHByZXNzaW9uczpzb3J0U3RyYXRlZ3k6cGlwZVRyaWdnZXJcbiAgICAgICAgfCBwaXZvdEdyaWRSb3dFeHBhbnNpb246cGl2b3RDb25maWd1cmF0aW9uOmV4cGFuc2lvblN0YXRlczpkZWZhdWx0RXhwYW5kU3RhdGU6cGlwZVRyaWdnZXJcIlxuICAgICAgICAgICAgbGV0LXJvd0luZGV4PVwiaW5kZXhcIiBbaWd4Rm9yU2Nyb2xsT3JpZW50YXRpb25dPVwiJ3ZlcnRpY2FsJ1wiIFtpZ3hGb3JTY3JvbGxDb250YWluZXJdPVwidmVydGljYWxTY3JvbGxcIlxuICAgICAgICAgICAgW2lneEZvckNvbnRhaW5lclNpemVdPVwiY2FsY0hlaWdodFwiXG4gICAgICAgICAgICBbaWd4Rm9ySXRlbVNpemVdPVwiaGFzQ29sdW1uTGF5b3V0cyA/IHJvd0hlaWdodCAqIG11bHRpUm93TGF5b3V0Um93U2l6ZSArIDEgOiByZW5kZXJlZFJvd0hlaWdodFwiXG4gICAgICAgICAgICBbaWd4R3JpZEZvck9mVmFyaWFibGVTaXplc109XCJmYWxzZVwiXG4gICAgICAgICAgICAjdmVydGljYWxTY3JvbGxDb250YWluZXIgKGRhdGFDaGFuZ2luZyk9XCJkYXRhUmViaW5kaW5nKCRldmVudClcIiAoZGF0YUNoYW5nZWQpPVwiZGF0YVJlYm91bmQoJGV2ZW50KVwiPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgW2lneFRlbXBsYXRlT3V0bGV0XT1cInJlY29yZFRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICBbaWd4VGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cImdldENvbnRleHQocm93RGF0YSwgcm93SW5kZXgpXCJcbiAgICAgICAgICAgICAgICAoY2FjaGVkVmlld0xvYWRlZCk9XCJjYWNoZWRWaWV3TG9hZGVkKCRldmVudClcIj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjcmVjb3JkX3RlbXBsYXRlIGxldC1yb3dJbmRleD1cImluZGV4XCIgbGV0LXJvd0RhdGE+XG4gICAgICAgICAgICA8aWd4LXBpdm90LXJvdyBbc3R5bGUuaGVpZ2h0LnB4XT1cInJlbmRlcmVkUm93SGVpZ2h0XCIgW2dyaWRJRF09XCJpZFwiIFtpbmRleF09XCJyb3dJbmRleFwiIFtkYXRhXT1cInJvd0RhdGFcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInJvd0NsYXNzZXMgfCBpZ3hHcmlkUm93Q2xhc3Nlczpyb3c6cm93LmluRWRpdE1vZGU6cm93LnNlbGVjdGVkOnJvdy5kaXJ0eTpyb3cuZGVsZXRlZDpyb3cuZHJhZ2dpbmc6cm93SW5kZXg6aGFzQ29sdW1uTGF5b3V0czpmYWxzZTpyb3dEYXRhOnBpcGVUcmlnZ2VyXCJcbiAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJyb3dTdHlsZXMgfCBpZ3hHcmlkUm93U3R5bGVzOnJvd0RhdGE6cm93SW5kZXg6cGlwZVRyaWdnZXJcIiAjcm93PlxuICAgICAgICAgICAgPC9pZ3gtcGl2b3Qtcm93PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IHRoaXMgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8aWdjLXRyaWFsLXdhdGVybWFyaz48L2lnYy10cmlhbC13YXRlcm1hcms+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBpZ3hUb2dnbGUgI2xvYWRpbmdPdmVybGF5PlxuICAgICAgICA8aWd4LWNpcmN1bGFyLWJhciBbaW5kZXRlcm1pbmF0ZV09XCJ0cnVlXCIgKm5nSWY9XCJzaG91bGRPdmVybGF5TG9hZGluZ1wiPlxuICAgICAgICA8L2lneC1jaXJjdWxhci1iYXI+XG4gICAgPC9kaXY+XG4gICAgPHNwYW4gKm5nSWY9XCJoYXNNb3ZhYmxlQ29sdW1ucyAmJiBjb2x1bW5JbkRyYWdcIiBbaWd4Q29sdW1uTW92aW5nRHJvcF09XCJoZWFkZXJDb250YWluZXJcIiBbYXR0ci5kcm9wcGFibGVdPVwidHJ1ZVwiXG4gICAgICAgIGlkPVwicmlnaHRcIiBjbGFzcz1cImlneC1ncmlkX19zY3JvbGwtb24tZHJhZy1yaWdodFwiPjwvc3Bhbj5cbiAgICA8ZGl2IFtoaWRkZW5dPVwiIWhhc1ZlcnRpY2FsU2Nyb2xsKClcIiBjbGFzcz1cImlneC1ncmlkX190Ym9keS1zY3JvbGxiYXJcIiBbc3R5bGUud2lkdGgucHhdPVwic2Nyb2xsU2l6ZVwiIChwb2ludGVyZG93bik9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaWd4LWdyaWRfX3Rib2R5LXNjcm9sbGJhci1zdGFydFwiIFtzdHlsZS5oZWlnaHQucHhdPVwiIGlzUm93UGlubmluZ1RvVG9wID8gcGlubmVkUm93SGVpZ2h0IDogMFwiPjwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaWd4LWdyaWRfX3Rib2R5LXNjcm9sbGJhci1tYWluXCIgW3N0eWxlLmhlaWdodC5weF09XCJjYWxjSGVpZ2h0XCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgaWd4R3JpZEZvciBbaWd4R3JpZEZvck9mXT1cIltdXCIgI3ZlcnRpY2FsU2Nyb2xsSG9sZGVyPjwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaWd4LWdyaWRfX3Rib2R5LXNjcm9sbGJhci1lbmRcIiBbc3R5bGUuaGVpZ2h0LnB4XT1cIiFpc1Jvd1Bpbm5pbmdUb1RvcCA/IHBpbm5lZFJvd0hlaWdodCA6IDBcIj48L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJpZ3gtZ3JpZF9fYWRkcm93LXNuYWNrYmFyXCI+XG4gICAgICAgIDxpZ3gtc25hY2tiYXIgI2FkZFJvd1NuYWNrYmFyIFtvdXRsZXRdPVwiaWd4Qm9keU92ZXJsYXlPdXRsZXRcIiBbYWN0aW9uVGV4dF09XCJyZXNvdXJjZVN0cmluZ3MuaWd4X2dyaWRfc25hY2tiYXJfYWRkcm93X2FjdGlvbnRleHRcIiBbZGlzcGxheVRpbWVdPVwic25hY2tiYXJEaXNwbGF5VGltZVwiPnt7cmVzb3VyY2VTdHJpbmdzLmlneF9ncmlkX3NuYWNrYmFyX2FkZHJvd19sYWJlbH19PC9pZ3gtc25hY2tiYXI+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2ICNpZ3hCb2R5T3ZlcmxheU91dGxldD1cIm92ZXJsYXktb3V0bGV0XCIgaWd4T3ZlcmxheU91dGxldD48L2Rpdj5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwiaWd4LWdyaWRfX3Njcm9sbFwiIFtzdHlsZS5oZWlnaHQucHhdPVwic2Nyb2xsU2l6ZVwiICNzY3IgW2hpZGRlbl09XCJpc0hvcml6b250YWxTY3JvbGxIaWRkZW5cIiAocG9pbnRlcmRvd24pPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIj5cbiAgICA8ZGl2IGNsYXNzPVwiaWd4LWdyaWRfX3Njcm9sbC1zdGFydFwiIFtzdHlsZS53aWR0aC5weF09XCJwaXZvdFBpbm5lZFdpZHRoXCIgW3N0eWxlLm1pbi13aWR0aC5weF09XCJwaXZvdFBpbm5lZFdpZHRoXCI+PC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImlneC1ncmlkX19zY3JvbGwtbWFpblwiIFtzdHlsZS53aWR0aC5weF09XCJwaXZvdFVucGlubmVkV2lkdGhcIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlIGlneEdyaWRGb3IgW2lneEdyaWRGb3JPZl09XCJFTVBUWV9EQVRBXCIgI3Njcm9sbENvbnRhaW5lcj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiaWd4LWdyaWRfX3Njcm9sbC1lbmRcIiBbc3R5bGUud2lkdGgucHhdPVwicGl2b3RQaW5uZWRXaWR0aFwiIFtzdHlsZS5taW4td2lkdGgucHhdPVwicGl2b3RQaW5uZWRXaWR0aFwiIFtoaWRkZW5dPVwicGl2b3RQaW5uZWRXaWR0aCA9PT0gMCB8fCBpc1Bpbm5pbmdUb1N0YXJ0XCI+PC9kaXY+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cImlneC1ncmlkX190Zm9vdFwiIHJvbGU9XCJyb3dncm91cFwiICN0Zm9vdD5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwiaWd4LWdyaWRfX2Zvb3RlclwiICNmb290ZXI+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiaWd4LWdyaWQtZm9vdGVyXCI+PC9uZy1jb250ZW50PlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjZW1wdHlGaWx0ZXJlZEdyaWQ+XG4gICAgPHNwYW4gY2xhc3M9XCJpZ3gtZ3JpZF9fdGJvZHktbWVzc2FnZVwiIHJvbGU9XCJjZWxsXCI+XG4gICAgICAgIDxzcGFuPnt7ZW1wdHlGaWx0ZXJlZEdyaWRNZXNzYWdlfX08L3NwYW4+XG4gICAgPC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNkZWZhdWx0RW1wdHlHcmlkPlxuICAgIDxzcGFuIGNsYXNzPVwiaWd4LWdyaWRfX3Rib2R5LW1lc3NhZ2VcIiByb2xlPVwiY2VsbFwiPlxuICAgICAgICA8c3Bhbj57e2VtcHR5R3JpZE1lc3NhZ2V9fTwvc3Bhbj5cbiAgICA8L3NwYW4+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2RlZmF1bHRMb2FkaW5nR3JpZD5cbiAgICA8ZGl2IGNsYXNzPVwiaWd4LWdyaWRfX2xvYWRpbmdcIj5cbiAgICAgICAgPGlneC1jaXJjdWxhci1iYXIgW2luZGV0ZXJtaW5hdGVdPVwidHJ1ZVwiPlxuICAgICAgICA8L2lneC1jaXJjdWxhci1iYXI+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuPGlneC1waXZvdC1ncmlkLWNvbHVtbi1yZXNpemVyIFtyZXN0cmljdFJlc2l6ZXJUb3BdPVwiY2FsY3VsYXRlUmVzaXplclRvcCgpXCIgKm5nSWY9XCJjb2xSZXNpemluZ1NlcnZpY2Uuc2hvd1Jlc2l6ZXJcIj48L2lneC1waXZvdC1ncmlkLWNvbHVtbi1yZXNpemVyPlxuPGRpdiBjbGFzcz1cImlneC1ncmlkX19sb2FkaW5nLW91dGxldFwiICNpZ3hMb2FkaW5nT3ZlcmxheU91dGxldCBpZ3hPdmVybGF5T3V0bGV0PjwvZGl2PlxuPGRpdiBjbGFzcz1cImlneC1ncmlkX19vdXRsZXRcIiAjaWd4RmlsdGVyaW5nT3ZlcmxheU91dGxldCBpZ3hPdmVybGF5T3V0bGV0PjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI2hlYWRlclRlbXBsYXRlIGxldC1jb2x1bW4+XG4gICAgPGRpdiBjbGFzcz1cImlneC1ncmlkX190ci0taGVhZGVyXCI+XG4gICAgICAgIDxpZ3gtaWNvbiBbYXR0ci5kcmFnZ2FibGVdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUNvbHVtbihjb2x1bW4pXCI+XG4gICAgICAgICAgICAgICAgICB7e2dldENvbHVtbkdyb3VwRXhwYW5kU3RhdGUoY29sdW1uKSA/IFwiY2hldnJvbl9yaWdodFwiIDogXCJleHBhbmRfbW9yZVwifX08L2lneC1pY29uPlxuICAgICAgICB7e2NvbHVtbi5oZWFkZXJ9fVxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNkZWZhdWx0Um93RGltZW5zaW9uc1RlbXBsYXRlPlxuICAgIDxkaXYgdGFiaW5kZXg9XCIwXCIgW3N0eWxlLmhlaWdodC5weF09XCJ0b3RhbEhlaWdodFwiICpuZ0Zvcj1cImxldCBkaW0gb2Ygcm93RGltZW5zaW9uczsgbGV0IGRpbUluZGV4ID0gaW5kZXg7XCIgI3Jvd0RpbWVuc2lvbkNvbnRhaW5lciByb2xlPVwicm93Z3JvdXBcIiBjbGFzcz1cImlneC1ncmlkX190Ym9keS1waXZvdC1kaW1lbnNpb25cIiAoZm9jdXMpPVwibmF2aWdhdGlvbi5mb2N1c1Rib2R5KCRldmVudClcIiAoa2V5ZG93bik9XCJuYXZpZ2F0aW9uLmhhbmRsZU5hdmlnYXRpb24oJGV2ZW50KVwiPlxuICAgICAgICA8bmctdGVtcGxhdGUgaWd4R3JpZEZvciBsZXQtcm93RGF0YSBbaWd4R3JpZEZvck9mXT1cImRhdGFWaWV3XG4gICAgICAgIHwgcGl2b3RHcmlkQ2VsbE1lcmdpbmc6cGl2b3RDb25maWd1cmF0aW9uOmRpbTpwaXBlVHJpZ2dlclwiXG4gICAgICAgICAgICAgICAgICAgICBsZXQtcm93SW5kZXg9XCJpbmRleFwiIFtpZ3hGb3JTY3JvbGxPcmllbnRhdGlvbl09XCIndmVydGljYWwnXCIgW2lneEZvclNjcm9sbENvbnRhaW5lcl09XCJ2ZXJ0aWNhbFNjcm9sbFwiXG4gICAgICAgICAgICAgICAgICAgICBbaWd4Rm9yQ29udGFpbmVyU2l6ZV09XCJjYWxjSGVpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgIFtpZ3hGb3JJdGVtU2l6ZV09XCJyZW5kZXJlZFJvd0hlaWdodFwiXG4gICAgICAgICAgICAgICAgICAgICBbaWd4Rm9yU2l6ZVByb3BOYW1lXT1cIidoZWlnaHQnXCJcbiAgICAgICAgICAgICAgICAgICAgICN2ZXJ0aWNhbFJvd0RpbVNjcm9sbENvbnRhaW5lcj5cbiAgICAgICAgICAgIDxpZ3gtcGl2b3Qtcm93LWRpbWVuc2lvbi1jb250ZW50IHJvbGU9XCJyb3dcIiBjbGFzcz1cImlneC1ncmlkLXRoZWFkXCIgW2dyaWRdPVwidGhpc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGltZW5zaW9uXT1cInJvd0RhdGEuZGltZW5zaW9uc1tkaW1JbmRleF1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jvb3REaW1lbnNpb25dPVwiZGltXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwicmVuZGVyZWRSb3dIZWlnaHQgKiAocm93RGF0YS5yb3dTcGFuIHx8IDEpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3dJbmRleF09XCJyb3dJbmRleFwiIFtyb3dEYXRhXT1cInJvd0RhdGFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3dpZHRoXT1cInJvd0RpbWVuc2lvbldpZHRoVG9QaXhlbHMoZGltKVwiPlxuICAgICAgICAgICAgPC9pZ3gtcGl2b3Qtcm93LWRpbWVuc2lvbi1jb250ZW50PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjZW1wdHlSb3dEaW1lbnNpb25zVGVtcGxhdGU+XG4gICAgPGRpdiB0YWJpbmRleD1cIjBcIiAqbmdJZj1cImNvbHVtbkRpbWVuc2lvbnMubGVuZ3RoID4gMCB8fCB2YWx1ZXMubGVuZ3RoID4gMFwiICNyb3dEaW1lbnNpb25Db250YWluZXIgcm9sZT1cInJvd2dyb3VwXCIgY2xhc3M9XCJpZ3gtZ3JpZF9fdGJvZHktcGl2b3QtZGltZW5zaW9uXCIgKGZvY3VzKT1cIm5hdmlnYXRpb24uZm9jdXNUYm9keSgkZXZlbnQpXCIgKGtleWRvd24pPVwibmF2aWdhdGlvbi5oYW5kbGVOYXZpZ2F0aW9uKCRldmVudClcIj5cbiAgICAgICAgPGlneC1waXZvdC1yb3ctZGltZW5zaW9uLWNvbnRlbnQgcm9sZT1cInJvd1wiIGNsYXNzPVwiaWd4LWdyaWQtdGhlYWRcIiBbZ3JpZF09XCJ0aGlzXCJcbiAgICAgICAgICAgIFtkaW1lbnNpb25dPVwiZW1wdHlSb3dEaW1lbnNpb25cIlxuICAgICAgICAgICAgW3Jvb3REaW1lbnNpb25dPVwiZW1wdHlSb3dEaW1lbnNpb25cIlxuICAgICAgICAgICAgW3Jvd0luZGV4XT1cIjBcIiBbcm93RGF0YV09XCJkYXRhVmlld1swXVwiXG4gICAgICAgICAgICBbd2lkdGhdPVwicm93RGltZW5zaW9uV2lkdGhUb1BpeGVscyhlbXB0eVJvd0RpbWVuc2lvbilcIj5cbiAgICAgICAgPC9pZ3gtcGl2b3Qtcm93LWRpbWVuc2lvbi1jb250ZW50PlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNlbXB0eVBpdm90R3JpZFRlbXBsYXRlPlxuICAgIDxzcGFuIGNsYXNzPVwiaWd4LWdyaWRfX3Rib2R5LW1lc3NhZ2VcIiByb2xlPVwiY2VsbFwiPlxuICAgICAgICA8c3Bhbj57e3Jlc291cmNlU3RyaW5ncy5pZ3hfZ3JpZF9waXZvdF9lbXB0eV9tZXNzYWdlfX08L3NwYW4+XG4gICAgPC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cblxuPGRpdiBbaGlkZGVuXT1cInRydWVcIj5cbiAgICA8aWd4LWdyaWQtZXhjZWwtc3R5bGUtZmlsdGVyaW5nIFttYXhIZWlnaHRdPVwiZXhjZWxTdHlsZUZpbHRlck1heEhlaWdodFwiIFttaW5IZWlnaHRdPVwiZXhjZWxTdHlsZUZpbHRlck1pbkhlaWdodFwiPlxuICAgICAgICA8ZGl2IGlneEV4Y2VsU3R5bGVDb2x1bW5PcGVyYXRpb25zIFtoaWRkZW5dPVwidHJ1ZVwiPjwvZGl2PlxuICAgICAgICA8aWd4LWV4Y2VsLXN0eWxlLWZpbHRlci1vcGVyYXRpb25zPlxuICAgICAgICAgICAgPGlneC1leGNlbC1zdHlsZS1zZWFyY2g+PC9pZ3gtZXhjZWwtc3R5bGUtc2VhcmNoPlxuICAgICAgICA8L2lneC1leGNlbC1zdHlsZS1maWx0ZXItb3BlcmF0aW9ucz5cbiAgICA8L2lneC1ncmlkLWV4Y2VsLXN0eWxlLWZpbHRlcmluZz5cbjwvZGl2PlxuIl19
|
|
2077
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGl2b3QtZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvcGl2b3QtZ3JpZC9waXZvdC1ncmlkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9ncmlkcy9waXZvdC1ncmlkL3Bpdm90LWdyaWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFHSCx1QkFBdUIsRUFFdkIsU0FBUyxFQUNULFlBQVksRUFFWixXQUFXLEVBQ1gsTUFBTSxFQUNOLEtBQUssRUFFTCxTQUFTLEVBR1QsTUFBTSxFQUNOLFFBQVEsRUFFUixXQUFXLEVBQ1gsU0FBUyxFQUNULFlBQVksRUFHWixZQUFZLEVBQ1osZUFBZSxFQUVmLHNCQUFzQixFQUN0QixnQkFBZ0IsRUFDbkIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUU1RixPQUFPLEVBQUUsS0FBSyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDOUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDMUUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDekUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLHlCQUF5QixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDN0csT0FBTyxFQUF3QixhQUFhLEVBQXFDLE1BQU0sMEJBQTBCLENBQUM7QUFDbEgsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JB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QUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQVlsQixJQUFJO3NCQUR2QixLQUFLO2dCQVljLE9BQU87c0JBRDFCLEtBQUs7Z0JBK0NjLGdCQUFnQjtzQkFEbkMsS0FBSztnQkFnQ2MsV0FBVztzQkFEOUIsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFZbEIsT0FBTztzQkFEMUIsS0FBSztnQkFXYyxlQUFlO3NCQURsQyxLQUFLO2dCQVljLHNCQUFzQjtzQkFEekMsS0FBSztnQkFZYyxxQkFBcUI7c0JBRHhDLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBMEJsQixZQUFZO3NCQUQvQixLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQWtMM0IsRUFBRTtzQkFGWixXQUFXO3VCQUFDLFNBQVM7O3NCQUNyQixLQUFLO2dCQWVLLElBQUk7c0JBRGQsS0FBSztnQkErTGMsWUFBWTtzQkFEL0IsS0FBSztnQkFnL0JDLDZCQUE2QjtzQkFEbkMsU0FBUzt1QkFBQyx3QkFBd0IsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFZakUsc0JBQXNCO3NCQUQ1QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlckNvbnRlbnRJbml0LFxuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBFbGVtZW50UmVmLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBJdGVyYWJsZURpZmZlcnMsXG4gICAgTE9DQUxFX0lELFxuICAgIE5nWm9uZSxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIE9wdGlvbmFsLFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0NoaWxkcmVuLFxuICAgIFZpZXdDb250YWluZXJSZWYsXG4gICAgSW5qZWN0b3IsXG4gICAgQ29udGVudENoaWxkLFxuICAgIGNyZWF0ZUNvbXBvbmVudCxcbiAgICBFbnZpcm9ubWVudEluamVjdG9yLFxuICAgIENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsXG4gICAgYm9vbGVhbkF0dHJpYnV0ZVxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERPQ1VNRU5ULCBOZ1RlbXBsYXRlT3V0bGV0LCBOZ0lmLCBOZ0NsYXNzLCBOZ1N0eWxlLCBOZ0ZvciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbmltcG9ydCB7IGZpcnN0fSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBJZ3hHcmlkQmFzZURpcmVjdGl2ZSB9IGZyb20gJy4uL2dyaWQtYmFzZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSWd4RmlsdGVyaW5nU2VydmljZSB9IGZyb20gJy4uL2ZpbHRlcmluZy9ncmlkLWZpbHRlcmluZy5zZXJ2aWNlJztcbmltcG9ydCB7IElneEdyaWRTZWxlY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vc2VsZWN0aW9uL3NlbGVjdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IElneEZvck9mU3luY1NlcnZpY2UsIElneEZvck9mU2Nyb2xsU3luY1NlcnZpY2UgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL2Zvci1vZi9mb3Jfb2Yuc3luYy5zZXJ2aWNlJztcbmltcG9ydCB7IENvbHVtblR5cGUsIEdyaWRUeXBlLCBJR1hfR1JJRF9CQVNFLCBJZ3hDb2x1bW5UZW1wbGF0ZUNvbnRleHQsIFJvd1R5cGUgfSBmcm9tICcuLi9jb21tb24vZ3JpZC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSWd4R3JpZENSVURTZXJ2aWNlIH0gZnJvbSAnLi4vY29tbW9uL2NydWQuc2VydmljZSc7XG5pbXBvcnQgeyBJZ3hHcmlkU3VtbWFyeVNlcnZpY2UgfSBmcm9tICcuLi9zdW1tYXJpZXMvZ3JpZC1zdW1tYXJ5LnNlcnZpY2UnO1xuaW1wb3J0IHsgREVGQVVMVF9QSVZPVF9LRVlTLCBJRGltZW5zaW9uc0NoYW5nZSwgSWd4UGl2b3RHcmlkVmFsdWVUZW1wbGF0ZUNvbnRleHQsIElQaXZvdENvbmZpZ3VyYXRpb24sIElQaXZvdENvbmZpZ3VyYXRpb25DaGFuZ2VkRXZlbnRBcmdzLCBJUGl2b3REaW1lbnNpb24sIElQaXZvdFZhbHVlLCBJVmFsdWVzQ2hhbmdlLCBQaXZvdERpbWVuc2lvblR5cGUsIElQaXZvdFVJU2V0dGluZ3MgfSBmcm9tICcuL3Bpdm90LWdyaWQuaW50ZXJmYWNlJztcbmltcG9ydCB7IElneFBpdm90SGVhZGVyUm93Q29tcG9uZW50IH0gZnJvbSAnLi9waXZvdC1oZWFkZXItcm93LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hDb2x1bW5Hcm91cENvbXBvbmVudCB9IGZyb20gJy4uL2NvbHVtbnMvY29sdW1uLWdyb3VwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hDb2x1bW5Db21wb25lbnQgfSBmcm9tICcuLi9jb2x1bW5zL2NvbHVtbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgUGl2b3RVdGlsIH0gZnJvbSAnLi9waXZvdC11dGlsJztcbmltcG9ydCB7IEZpbHRlck1vZGUsIEdyaWRQYWdpbmdNb2RlLCBHcmlkU3VtbWFyeUNhbGN1bGF0aW9uTW9kZSwgR3JpZFN1bW1hcnlQb3NpdGlvbiwgU2l6ZSB9IGZyb20gJy4uL2NvbW1vbi9lbnVtcyc7XG5pbXBvcnQgeyBXYXRjaENoYW5nZXMgfSBmcm9tICcuLi93YXRjaC1jaGFuZ2VzJztcbmltcG9ydCB7IE92ZXJsYXlTZXR0aW5ncyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3B1YmxpY19hcGknO1xuaW1wb3J0IHtcbiAgICBJR3JpZEVkaXRFdmVudEFyZ3MsXG4gICAgSUNlbGxQb3NpdGlvbixcbiAgICBJQ29sdW1uTW92aW5nRW5kRXZlbnRBcmdzLCBJQ29sdW1uTW92aW5nRXZlbnRBcmdzLCBJQ29sdW1uTW92aW5nU3RhcnRFdmVudEFyZ3MsXG4gICAgSUNvbHVtblZpc2liaWxpdHlDaGFuZ2VkRXZlbnRBcmdzLFxuICAgIElHcmlkRWRpdERvbmVFdmVudEFyZ3MsXG4gICAgSUdyaWRUb29sYmFyRXhwb3J0RXZlbnRBcmdzLFxuICAgIElQaW5Db2x1bW5DYW5jZWxsYWJsZUV2ZW50QXJncyxcbiAgICBJUGluQ29sdW1uRXZlbnRBcmdzLFxuICAgIElQaW5Sb3dFdmVudEFyZ3MsXG4gICAgSVJvd0RhdGFDYW5jZWxhYmxlRXZlbnRBcmdzLFxuICAgIElSb3dEYXRhRXZlbnRBcmdzLFxuICAgIElSb3dEcmFnRW5kRXZlbnRBcmdzLFxuICAgIElSb3dEcmFnU3RhcnRFdmVudEFyZ3Ncbn0gZnJvbSAnLi4vY29tbW9uL2V2ZW50cyc7XG5pbXBvcnQgeyBJZ3hHcmlkUm93Q29tcG9uZW50IH0gZnJvbSAnLi4vZ3JpZC9ncmlkLXJvdy5jb21wb25lbnQnO1xuaW1wb3J0IHsgRHJvcFBvc2l0aW9uIH0gZnJvbSAnLi4vbW92aW5nL21vdmluZy5zZXJ2aWNlJztcbmltcG9ydCB7IERpbWVuc2lvblZhbHVlc0ZpbHRlcmluZ1N0cmF0ZWd5LCBOb29wUGl2b3REaW1lbnNpb25zU3RyYXRlZ3kgfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvcGl2b3Qtc3RyYXRlZ3knO1xuaW1wb3J0IHsgSWd4R3JpZEV4Y2VsU3R5bGVGaWx0ZXJpbmdDb21wb25lbnQsIElneEV4Y2VsU3R5bGVDb2x1bW5PcGVyYXRpb25zVGVtcGxhdGVEaXJlY3RpdmUsIElneEV4Y2VsU3R5bGVGaWx0ZXJPcGVyYXRpb25zVGVtcGxhdGVEaXJlY3RpdmUgfSBmcm9tICcuLi9maWx0ZXJpbmcvZXhjZWwtc3R5bGUvZXhjZWwtc3R5bGUtZmlsdGVyaW5nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hQaXZvdEdyaWROYXZpZ2F0aW9uU2VydmljZSB9IGZyb20gJy4vcGl2b3QtZ3JpZC1uYXZpZ2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgSWd4UGl2b3RDb2x1bW5SZXNpemluZ1NlcnZpY2UgfSBmcm9tICcuLi9yZXNpemluZy9waXZvdC1ncmlkL3Bpdm90LXJlc2l6aW5nLnNlcnZpY2UnO1xuaW1wb3J0IHsgSWd4RmxhdFRyYW5zYWN0aW9uRmFjdG9yeSwgSWd4T3ZlcmxheVNlcnZpY2UsIFN0YXRlLCBUcmFuc2FjdGlvbiwgVHJhbnNhY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcHVibGljX2FwaSc7XG5pbXBvcnQgeyBjbG9uZUFycmF5LCBQbGF0Zm9ybVV0aWwgfSBmcm9tICcuLi8uLi9jb3JlL3V0aWxzJztcbmltcG9ydCB7IElneFBpdm90RmlsdGVyaW5nU2VydmljZSB9IGZyb20gJy4vcGl2b3QtZmlsdGVyaW5nLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGF0YVV0aWwgfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvZGF0YS11dGlsJztcbmltcG9ydCB7IElGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUgfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvZmlsdGVyaW5nLWV4cHJlc3Npb25zLXRyZWUnO1xuaW1wb3J0IHsgSWd4R3JpZFRyYW5zYWN0aW9uIH0gZnJvbSAnLi4vY29tbW9uL3R5cGVzJztcbmltcG9ydCB7IEdyaWRCYXNlQVBJU2VydmljZSB9IGZyb20gJy4uL2FwaS5zZXJ2aWNlJztcbmltcG9ydCB7IElneEdyaWRGb3JPZkRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvZm9yLW9mL2Zvcl9vZi5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSWd4UGl2b3RSb3dEaW1lbnNpb25Db250ZW50Q29tcG9uZW50IH0gZnJvbSAnLi9waXZvdC1yb3ctZGltZW5zaW9uLWNvbnRlbnQuY29tcG9uZW50JztcbmltcG9ydCB7IElneFBpdm90R3JpZENvbHVtblJlc2l6ZXJDb21wb25lbnQgfSBmcm9tICcuLi9yZXNpemluZy9waXZvdC1ncmlkL3Bpdm90LXJlc2l6ZXIuY29tcG9uZW50JztcbmltcG9ydCB7IElneEFjdGlvblN0cmlwVG9rZW4gfSBmcm9tICcuLi8uLi9hY3Rpb24tc3RyaXAvdG9rZW4nO1xuaW1wb3J0IHsgSVNvcnRpbmdFeHByZXNzaW9uLCBTb3J0aW5nRGlyZWN0aW9uIH0gZnJvbSAnLi4vLi4vZGF0YS1vcGVyYXRpb25zL3NvcnRpbmctc3RyYXRlZ3knO1xuaW1wb3J0IHsgUGl2b3RTb3J0VXRpbCB9IGZyb20gJy4vcGl2b3Qtc29ydC11dGlsJztcbmltcG9ydCB7IElGaWx0ZXJpbmdTdHJhdGVneSB9IGZyb20gJy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9maWx0ZXJpbmctc3RyYXRlZ3knO1xuaW1wb3J0IHsgSWd4UGl2b3RSb3dEaW1lbnNpb25IZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZSwgSWd4UGl2b3RWYWx1ZUNoaXBUZW1wbGF0ZURpcmVjdGl2ZSB9IGZyb20gJy4vcGl2b3QtZ3JpZC5kaXJlY3RpdmVzJztcbmltcG9ydCB7IElGaWx0ZXJpbmdPcGVyYXRpb24gfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvZmlsdGVyaW5nLWNvbmRpdGlvbic7XG5pbXBvcnQgeyBJZ3hHcmlkVmFsaWRhdGlvblNlcnZpY2UgfSBmcm9tICcuLi9ncmlkL2dyaWQtdmFsaWRhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IElneFBpdm90Um93UGlwZSwgSWd4UGl2b3RSb3dFeHBhbnNpb25QaXBlLCBJZ3hQaXZvdEF1dG9UcmFuc2Zvcm0sIElneFBpdm90Q29sdW1uUGlwZSwgSWd4UGl2b3RHcmlkRmlsdGVyUGlwZSwgSWd4UGl2b3RHcmlkU29ydGluZ1BpcGUsIElneFBpdm90R3JpZENvbHVtblNvcnRpbmdQaXBlLCBJZ3hQaXZvdENlbGxNZXJnaW5nUGlwZSB9IGZyb20gJy4vcGl2b3QtZ3JpZC5waXBlcyc7XG5pbXBvcnQgeyBJZ3hHcmlkUm93Q2xhc3Nlc1BpcGUsIElneEdyaWRSb3dTdHlsZXNQaXBlIH0gZnJvbSAnLi4vY29tbW9uL3BpcGVzJztcbmltcG9ydCB7IElneEV4Y2VsU3R5bGVTZWFyY2hDb21wb25lbnQgfSBmcm9tICcuLi9maWx0ZXJpbmcvZXhjZWwtc3R5bGUvZXhjZWwtc3R5bGUtc2VhcmNoLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hJY29uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vaWNvbi9pY29uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hTbmFja2JhckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3NuYWNrYmFyL3NuYWNrYmFyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hDaXJjdWxhclByb2dyZXNzQmFyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vcHJvZ3Jlc3NiYXIvcHJvZ3Jlc3NiYXIuY29tcG9uZW50JztcbmltcG9ydCB7IElneFRvZ2dsZURpcmVjdGl2ZSwgSWd4T3ZlcmxheU91dGxldERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvdG9nZ2xlL3RvZ2dsZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSWd4UGl2b3RSb3dDb21wb25lbnQgfSBmcm9tICcuL3Bpdm90LXJvdy5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4VGVtcGxhdGVPdXRsZXREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL3RlbXBsYXRlLW91dGxldC90ZW1wbGF0ZV9vdXRsZXQuZGlyZWN0aXZlJztcbmltcG9ydCB7IElneENvbHVtbk1vdmluZ0Ryb3BEaXJlY3RpdmUgfSBmcm9tICcuLi9tb3ZpbmcvbW92aW5nLmRyb3AuZGlyZWN0aXZlJztcbmltcG9ydCB7IElneEdyaWREcmFnU2VsZWN0RGlyZWN0aXZlIH0gZnJvbSAnLi4vc2VsZWN0aW9uL2RyYWctc2VsZWN0LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJZ3hHcmlkQm9keURpcmVjdGl2ZSB9IGZyb20gJy4uL2dyaWQuY29tbW9uJztcbmltcG9ydCB7IElneENvbHVtblJlc2l6aW5nU2VydmljZSB9IGZyb20gJy4uL3Jlc2l6aW5nL3Jlc2l6aW5nLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGVmYXVsdERhdGFDbG9uZVN0cmF0ZWd5LCBJRGF0YUNsb25lU3RyYXRlZ3kgfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvZGF0YS1jbG9uZS1zdHJhdGVneSc7XG5pbXBvcnQgeyBJZ3hUZXh0SGlnaGxpZ2h0U2VydmljZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvdGV4dC1oaWdobGlnaHQvdGV4dC1oaWdobGlnaHQuc2VydmljZSc7XG5pbXBvcnQgeyBJZ3hQaXZvdFJvd0hlYWRlckdyb3VwQ29tcG9uZW50IH0gZnJvbSAnLi9waXZvdC1yb3ctaGVhZGVyLWdyb3VwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hQaXZvdERhdGVEaW1lbnNpb24gfSBmcm9tICcuL3Bpdm90LWdyaWQtZGltZW5zaW9ucyc7XG5cbmxldCBORVhUX0lEID0gMDtcbmNvbnN0IE1JTklNVU1fQ09MVU1OX1dJRFRIID0gMjAwO1xuY29uc3QgTUlOSU1VTV9DT0xVTU5fV0lEVEhfU1VQRVJfQ09NUEFDVCA9IDEwNDtcblxuLyoqXG4gKiBQaXZvdCBHcmlkIHByb3ZpZGVzIGEgd2F5IHRvIHByZXNlbnQgYW5kIG1hbmlwdWxhdGUgZGF0YSBpbiBhIHBpdm90IHRhYmxlIHZpZXcuXG4gKlxuICogQGlneE1vZHVsZSBJZ3hQaXZvdEdyaWRNb2R1bGVcbiAqIEBpZ3hHcm91cCBHcmlkcyAmIExpc3RzXG4gKiBAaWd4S2V5d29yZHMgcGl2b3QsIGdyaWQsIHRhYmxlXG4gKiBAaWd4VGhlbWUgaWd4LWdyaWQtdGhlbWVcbiAqIEByZW1hcmtzXG4gKiBUaGUgSWduaXRlIFVJIFBpdm90IEdyaWQgaXMgdXNlZCBmb3IgZ3JvdXBpbmcgYW5kIGFnZ3JlZ2F0aW5nIHNpbXBsZSBmbGF0IGRhdGEgaW50byBhIHBpdm90IHRhYmxlLiAgT25jZSBkYXRhXG4gKiBoYXMgYmVlbiBib3VuZCBhbmQgdGhlIGRpbWVuc2lvbnMgYW5kIHZhbHVlcyBjb25maWd1cmVkIGl0IGNhbiBiZSBtYW5pcHVsYXRlZCB2aWEgc29ydGluZyBhbmQgZmlsdGVyaW5nLlxuICogQGV4YW1wbGVcbiAqIGBgYGh0bWxcbiAqIDxpZ3gtcGl2b3QtZ3JpZCBbZGF0YV09XCJkYXRhXCIgW3Bpdm90Q29uZmlndXJhdGlvbl09XCJjb25maWd1cmF0aW9uXCI+XG4gKiA8L2lneC1waXZvdC1ncmlkPlxuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHByZXNlcnZlV2hpdGVzcGFjZXM6IGZhbHNlLFxuICAgIHNlbGVjdG9yOiAnaWd4LXBpdm90LWdyaWQnLFxuICAgIHRlbXBsYXRlVXJsOiAncGl2b3QtZ3JpZC5jb21wb25lbnQuaHRtbCcsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIElneEdyaWRDUlVEU2VydmljZSxcbiAgICAgICAgSWd4R3JpZFZhbGlkYXRpb25TZXJ2aWNlLFxuICAgICAgICBJZ3hHcmlkU3VtbWFyeVNlcnZpY2UsXG4gICAgICAgIElneEdyaWRTZWxlY3Rpb25TZXJ2aWNlLFxuICAgICAgICBJZ3hDb2x1bW5SZXNpemluZ1NlcnZpY2UsXG4gICAgICAgIEdyaWRCYXNlQVBJU2VydmljZSxcbiAgICAgICAgeyBwcm92aWRlOiBJR1hfR1JJRF9CQVNFLCB1c2VFeGlzdGluZzogSWd4UGl2b3RHcmlkQ29tcG9uZW50IH0sXG4gICAgICAgIHsgcHJvdmlkZTogSWd4RmlsdGVyaW5nU2VydmljZSwgdXNlQ2xhc3M6IElneFBpdm90RmlsdGVyaW5nU2VydmljZSB9LFxuICAgICAgICBJZ3hQaXZvdEdyaWROYXZpZ2F0aW9uU2VydmljZSxcbiAgICAgICAgSWd4UGl2b3RDb2x1bW5SZXNpemluZ1NlcnZpY2UsXG4gICAgICAgIElneEZvck9mU3luY1NlcnZpY2UsXG4gICAgICAgIElneEZvck9mU2Nyb2xsU3luY1NlcnZpY2VcbiAgICBdLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBOZ0lmLFxuICAgICAgICBOZ0ZvcixcbiAgICAgICAgTmdDbGFzcyxcbiAgICAgICAgTmdTdHlsZSxcbiAgICAgICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICAgICAgSWd4UGl2b3RIZWFkZXJSb3dDb21wb25lbnQsXG4gICAgICAgIElneEdyaWRCb2R5RGlyZWN0aXZlLFxuICAgICAgICBJZ3hHcmlkRHJhZ1NlbGVjdERpcmVjdGl2ZSxcbiAgICAgICAgSWd4Q29sdW1uTW92aW5nRHJvcERpcmVjdGl2ZSxcbiAgICAgICAgSWd4R3JpZEZvck9mRGlyZWN0aXZlLFxuICAgICAgICBJZ3hUZW1wbGF0ZU91dGxldERpcmVjdGl2ZSxcbiAgICAgICAgSWd4UGl2b3RSb3dDb21wb25lbnQsXG4gICAgICAgIElneFRvZ2dsZURpcmVjdGl2ZSxcbiAgICAgICAgSWd4Q2lyY3VsYXJQcm9ncmVzc0JhckNvbXBvbmVudCxcbiAgICAgICAgSWd4U25hY2tiYXJDb21wb25lbnQsXG4gICAgICAgIElneE92ZXJsYXlPdXRsZXREaXJlY3RpdmUsXG4gICAgICAgIElneFBpdm90R3JpZENvbHVtblJlc2l6ZXJDb21wb25lbnQsXG4gICAgICAgIElneEljb25Db21wb25lbnQsXG4gICAgICAgIElneFBpdm90Um93RGltZW5zaW9uQ29udGVudENvbXBvbmVudCxcbiAgICAgICAgSWd4R3JpZEV4Y2VsU3R5bGVGaWx0ZXJpbmdDb21wb25lbnQsXG4gICAgICAgIElneEV4Y2VsU3R5bGVDb2x1bW5PcGVyYXRpb25zVGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgICAgIElneEV4Y2VsU3R5bGVGaWx0ZXJPcGVyYXRpb25zVGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgICAgIElneEV4Y2VsU3R5bGVTZWFyY2hDb21wb25lbnQsXG4gICAgICAgIElneEdyaWRSb3dDbGFzc2VzUGlwZSxcbiAgICAgICAgSWd4R3JpZFJvd1N0eWxlc1BpcGUsXG4gICAgICAgIElneFBpdm90Um93UGlwZSxcbiAgICAgICAgSWd4UGl2b3RSb3dFeHBhbnNpb25QaXBlLFxuICAgICAgICBJZ3hQaXZvdEF1dG9UcmFuc2Zvcm0sXG4gICAgICAgIElneFBpdm90Q29sdW1uUGlwZSxcbiAgICAgICAgSWd4UGl2b3RHcmlkRmlsdGVyUGlwZSxcbiAgICAgICAgSWd4UGl2b3RHcmlkU29ydGluZ1BpcGUsXG4gICAgICAgIElneFBpdm90R3JpZENvbHVtblNvcnRpbmdQaXBlLFxuICAgICAgICBJZ3hQaXZvdENlbGxNZXJnaW5nUGlwZVxuICAgIF0sXG4gICAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdXG59KVxuZXhwb3J0IGNsYXNzIElneFBpdm90R3JpZENvbXBvbmVudCBleHRlbmRzIElneEdyaWRCYXNlRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBBZnRlckNvbnRlbnRJbml0LFxuICAgIEdyaWRUeXBlLCBBZnRlclZpZXdJbml0IHtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiB0aGUgZGltZW5zaW9uIGNvbGxlY3Rpb24gaXMgY2hhbmdlZCB2aWEgdGhlIGdyaWQgY2hpcCBhcmVhLlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBSZXR1cm5zIHRoZSBuZXcgZGltZW5zaW9uIGNvbGxlY3Rpb24gYW5kIGl0cyB0eXBlOlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtcGl2b3QtZ3JpZCAjZ3JpZCBbZGF0YV09XCJsb2NhbERhdGFcIiBbaGVpZ2h0XT1cIiczMDVweCdcIlxuICAgICAqICAgICAgICAgICAgICAoZGltZW5zaW9uc0NoYW5nZSk9XCJkaW1lbnNpb25zQ2hhbmdlKCRldmVudClcIj48L2lneC1ncmlkPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBkaW1lbnNpb25zQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxJRGltZW5zaW9uc0NoYW5nZT4oKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiBhbnkgb2YgdGhlIHBpdm90Q29uZmlndXJhdGlvbiBwcm9wZXJ0aWVzIGlzIGNoYW5nZWQgdmlhIHRoZSBncmlkIGNoaXAgYXJlYS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtcGl2b3QtZ3JpZCAjZ3JpZCBbZGF0YV09XCJsb2NhbERhdGFcIiBbaGVpZ2h0XT1cIiczMDVweCdcIlxuICAgICAqICAgICAgICAgICAgICAocGl2b3RDb25maWd1cmF0aW9uQ2hhbmdlZCk9XCJjb25maWd1cmF0aW9uQ2hhbmdlZCgkZXZlbnQpXCI+PC9pZ3gtZ3JpZD5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgcGl2b3RDb25maWd1cmF0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxJUGl2b3RDb25maWd1cmF0aW9uQ2hhbmdlZEV2ZW50QXJncz4oKTtcblxuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCB3aGVuIHRoZSBkaW1lbnNpb24gaXMgaW5pdGlhbGl6ZWQuXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBFbWl0cyB0aGUgZGltZW5zaW9uIHRoYXQgaXMgYWJvdXQgdG8gYmUgaW5pdGlhbGl6ZWQuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1waXZvdC1ncmlkICNncmlkIFtkYXRhXT1cImxvY2FsRGF0YVwiIFtoZWlnaHRdPVwiJzMwNXB4J1wiXG4gICAgICogICAgICAgICAgICAgIChkaW1lbnNpb25Jbml0KT1cImRpbWVuc2lvbkluaXQoJGV2ZW50KVwiPjwvaWd4LXBpdm90LWdyaWQ+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGRpbWVuc2lvbkluaXQgPSBuZXcgRXZlbnRFbWl0dGVyPElQaXZvdERpbWVuc2lvbj4oKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiB0aGUgdmFsdWUgaXMgaW5pdGlhbGl6ZWQuXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBFbWl0cyB0aGUgdmFsdWUgdGhhdCBpcyBhYm91dCB0byBiZSBpbml0aWFsaXplZC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXBpdm90LWdyaWQgI2dyaWQgW2RhdGFdPVwibG9jYWxEYXRhXCIgW2hlaWdodF09XCInMzA1cHgnXCJcbiAgICAgKiAgICAgICAgICAgICAgKHZhbHVlSW5pdCk9XCJ2YWx1ZUluaXQoJGV2ZW50KVwiPjwvaWd4LXBpdm90LWdyaWQ+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHZhbHVlSW5pdCA9IG5ldyBFdmVudEVtaXR0ZXI8SVBpdm90VmFsdWU+KCk7XG5cblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiBhIGRpbWVuc2lvbiBpcyBzb3J0ZWQuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXBpdm90LWdyaWQgI2dyaWQgW2RhdGFdPVwibG9jYWxEYXRhXCIgW2hlaWdodF09XCInMzA1cHgnXCJcbiAgICAgKiAgICAgICAgICAgICAgKGRpbWVuc2lvbnNTb3J0aW5nRXhwcmVzc2lvbnNDaGFuZ2UpPVwiZGltZW5zaW9uc1NvcnRpbmdFeHByZXNzaW9uc0NoYW5nZSgkZXZlbnQpXCI+PC9pZ3gtcGl2b3QtZ3JpZD5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgZGltZW5zaW9uc1NvcnRpbmdFeHByZXNzaW9uc0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8SVNvcnRpbmdFeHByZXNzaW9uW10+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIHZhbHVlcyBjb2xsZWN0aW9uIGlzIGNoYW5nZWQgdmlhIHRoZSBncmlkIGNoaXAgYXJlYS5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogUmV0dXJucyB0aGUgbmV3IGRpbWVuc2lvblxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtcGl2b3QtZ3JpZCAjZ3JpZCBbZGF0YV09XCJsb2NhbERhdGFcIiBbaGVpZ2h0XT1cIiczMDVweCdcIlxuICAgICAqICAgICAgICAgICAgICAodmFsdWVzQ2hhbmdlKT1cInZhbHVlc0NoYW5nZSgkZXZlbnQpXCI+PC9pZ3gtZ3JpZD5cbiAgICAgKiBgYGBcbiAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyB2YWx1ZXNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPElWYWx1ZXNDaGFuZ2U+KCk7XG5cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHNvcnRpbmcgZXhwcmVzc2lvbnMgZ2VuZXJhdGVkIGZvciB0aGUgZGltZW5zaW9ucy5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IGV4cHJlc3Npb25zID0gdGhpcy5ncmlkLmRpbWVuc2lvbnNTb3J0aW5nRXhwcmVzc2lvbnM7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldCBkaW1lbnNpb25zU29ydGluZ0V4cHJlc3Npb25zKCkge1xuICAgICAgICBjb25zdCBhbGxFbmFibGVkRGltZW5zaW9ucyA9IHRoaXMucm93RGltZW5zaW9ucy5jb25jYXQodGhpcy5jb2x1bW5EaW1lbnNpb25zKTtcbiAgICAgICAgY29uc3QgZGltZW5zaW9uc1NvcnRpbmdFeHByZXNzaW9ucyA9IFBpdm90U29ydFV0aWwuZ2VuZXJhdGVEaW1lbnNpb25Tb3J0aW5nRXhwcmVzc2lvbnMoYWxsRW5hYmxlZERpbWVuc2lvbnMpO1xuICAgICAgICByZXR1cm4gZGltZW5zaW9uc1NvcnRpbmdFeHByZXNzaW9ucztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBAVmlld0NoaWxkKElneFBpdm90SGVhZGVyUm93Q29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KVxuICAgIHB1YmxpYyBvdmVycmlkZSB0aGVhZFJvdzogSWd4UGl2b3RIZWFkZXJSb3dDb21wb25lbnQ7XG5cbiAgICAvKipcbiAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgKi9cbiAgICBAQ29udGVudENoaWxkKElneFBpdm90VmFsdWVDaGlwVGVtcGxhdGVEaXJlY3RpdmUsIHsgcmVhZDogSWd4UGl2b3RWYWx1ZUNoaXBUZW1wbGF0ZURpcmVjdGl2ZSB9KVxuICAgIHByb3RlY3RlZCB2YWx1ZUNoaXBUZW1wbGF0ZURpcmVjdGl2ZTogSWd4UGl2b3RWYWx1ZUNoaXBUZW1wbGF0ZURpcmVjdGl2ZTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZChJZ3hQaXZvdFJvd0RpbWVuc2lvbkhlYWRlclRlbXBsYXRlRGlyZWN0aXZlLCB7IHJlYWQ6IElneFBpdm90Um93RGltZW5zaW9uSGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUgfSlcbiAgICBwcm90ZWN0ZWQgcm93RGltZW5zaW9uSGVhZGVyRGlyZWN0aXZlOiBJZ3hQaXZvdFJvd0RpbWVuc2lvbkhlYWRlclRlbXBsYXRlRGlyZWN0aXZlO1xuXG4gICAgLyoqXG4gICAgICogR2V0cy9TZXRzIGEgY3VzdG9tIHRlbXBsYXRlIGZvciB0aGUgdmFsdWUgY2hpcHMuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXBpdm90LWdyaWQgW3ZhbHVlQ2hpcFRlbXBsYXRlXT1cIm15VGVtcGxhdGVcIj48aWd4LXBpdm90LWdyaWQ+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgdmFsdWVDaGlwVGVtcGxhdGU6IFRlbXBsYXRlUmVmPElneFBpdm90R3JpZFZhbHVlVGVtcGxhdGVDb250ZXh0PjtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHJvd0RpbWVuc2lvbkhlYWRlclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxJZ3hDb2x1bW5UZW1wbGF0ZUNvbnRleHQ+O1xuXG4gICAgQElucHV0KClcbiAgICAvKipcbiAgICAgKiBHZXRzL1NldHMgdGhlIHBpdm90IGNvbmZpZ3VyYXRpb24gd2l0aCBhbGwgcmVsYXRlZCBkaW1lbnNpb25zIGFuZCB2YWx1ZXMuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXBpdm90LWdyaWQgW3Bpdm90Q29uZmlndXJhdGlvbl09XCJjb25maWdcIj48L2lneC1waXZvdC1ncmlkPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBzZXQgcGl2b3RDb25maWd1cmF0aW9uKHZhbHVlOiBJUGl2b3RDb25maWd1cmF0aW9uKSB7XG4gICAgICAgIHRoaXMuX3Bpdm90Q29uZmlndXJhdGlvbiA9IHZhbHVlO1xuICAgICAgICB0aGlzLmVtaXRJbml0RXZlbnRzKHRoaXMuX3Bpdm90Q29uZmlndXJhdGlvbik7XG4gICAgICAgIHRoaXMuZmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlID0gUGl2b3RVdGlsLmJ1aWxkRXhwcmVzc2lvblRyZWUodmFsdWUpO1xuICAgICAgICBpZiAoIXRoaXMuX2luaXQpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0dXBDb2x1bW5zKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ub3RpZnlDaGFuZ2VzKHRydWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcGl2b3RDb25maWd1cmF0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGl2b3RDb25maWd1cmF0aW9uIHx8IHsgcm93czogbnVsbCwgY29sdW1uczogbnVsbCwgdmFsdWVzOiBudWxsLCBmaWx0ZXJzOiBudWxsIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cy9TZXRzIHdoZXRoZXIgdG8gYXV0by1nZW5lcmF0ZSB0aGUgcGl2b3QgY29uZmlndXJhdGlvbiBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgZGF0YS5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgZmFsc2UuIFdoZW4gc2V0IHRvIHRydWUsIGl0IHdpbGwgb3ZlcnJpZGUgYWxsIGRpbWVuc2lvbnMgYW5kIHZhbHVlcyBpbiB0aGUgcGl2b3RDb25maWd1cmF0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtcGl2b3QtZ3JpZCBbZGF0YV09XCJEYXRhXCIgW2F1dG9HZW5lcmF0ZUNvbmZpZ109XCJ0cnVlXCI+PC9pZ3gtcGl2b3QtZ3JpZD5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgICBwdWJsaWMgYXV0b0dlbmVyYXRlQ29uZmlnID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKVxuICAgIC8qKlxuICAgICAqIEdldHMvU2V0cyB0aGUgcGl2b3QgdWkgc2V0dGluZ3MgZm9yIHRoZSBwaXZvdCBncmlkIC0gY2hpcHMgYW5kIHRoZWlyXG4gICAgICogY29ycmVzcG9uZGluZyBjb250YWluZXJzIGZvciByb3csIGZpbHRlciwgY29sdW1uIGRpbWVuc2lvbnMgYW5kIHZhbHVlc1xuICAgICAqIGFzIHdlbGwgYXMgaGVhZGVycyBmb3IgdGhlIHJvdyBkaW1lbnNpb25zIHZhbHVlcy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXBpdm90LWdyaWQgW3Bpdm90VUldPVwieyBzaG93Um93SGVhZGVyczogdHJ1ZSB9XCI+PC9pZ3gtcGl2b3QtZ3JpZD5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0IHBpdm90VUkodmFsdWU6IElQaXZvdFVJU2V0dGluZ3MpIHtcbiAgICAgICAgdGhpcy5fcGl2b3RVSSA9IE9iamVjdC5hc3NpZ24odGhpcy5fcGl2b3RVSSwgdmFsdWUgfHwge30pO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcGl2b3RVSSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Bpdm90VUk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIucm9sZScpXG4gICAgcHVibGljIHJvbGUgPSAnZ3JpZCc7XG5cblxuICAgIC8qKlxuICAgICAqIEVuYWJsZXMgYSBzdXBlciBjb21wYWN0IHRoZW1lIGZvciB0aGUgY29tcG9uZW50LlxuICAgICAqIEByZW1hcmtzXG4gICAgICogT3ZlcnJpZGVzIHRoZSBncmlkIHNpemUgb3B0aW9uIGlmIG9uZSBpcyBzZXQuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1waXZvdC1ncmlkIFtzdXBlckNvbXBhY3RNb2RlXT1cInRydWVcIj48L2lneC1waXZvdC1ncmlkPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWdyaWRfX3Bpdm90LS1zdXBlci1jb21wYWN0JylcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgc3VwZXJDb21wYWN0TW9kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N1cGVyQ29tcGFjdE1vZGU7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBzdXBlckNvbXBhY3RNb2RlKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuX3N1cGVyQ29tcGFjdE1vZGUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IGdyaWRTaXplKCkge1xuICAgICAgICBpZiAodGhpcy5zdXBlckNvbXBhY3RNb2RlKSB7XG4gICAgICAgICAgICByZXR1cm4gU2l6ZS5TbWFsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3VwZXIuZ3JpZFNpemU7XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiBHZXRzL1NldHMgdGhlIHZhbHVlcyBjbG9uZSBzdHJhdGVneSBvZiB0aGUgcGl2b3QgZ3JpZCB3aGVuIGFzc2lnbmluZyB0aGVtIHRvIGRpZmZlcmVudCBkaW1lbnNpb25zLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogIDxpZ3gtcGl2b3QtZ3JpZCAjZ3JpZCBbZGF0YV09XCJsb2NhbERhdGFcIiBbcGl2b3RWYWx1ZUNsb25lU3RyYXRlZ3ldPVwiY3VzdG9tQ2xvbmVTdHJhdGVneVwiPjwvaWd4LXBpdm90LWdyaWQ+XG4gICAgICogYGBgXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgcGl2b3RWYWx1ZUNsb25lU3RyYXRlZ3koKTogSURhdGFDbG9uZVN0cmF0ZWd5IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Bpdm90VmFsdWVDbG9uZVN0cmF0ZWd5O1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgcGl2b3RWYWx1ZUNsb25lU3RyYXRlZ3koc3RyYXRlZ3k6IElEYXRhQ2xvbmVTdHJhdGVneSkge1xuICAgICAgICBpZiAoc3RyYXRlZ3kpIHtcbiAgICAgICAgICAgIHRoaXMuX3Bpdm90VmFsdWVDbG9uZVN0cmF0ZWd5ID0gc3RyYXRlZ3k7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoJ3JlY29yZF90ZW1wbGF0ZScsIHsgcmVhZDogVGVtcGxhdGVSZWYsIHN0YXRpYzogdHJ1ZSB9KVxuICAgIHB1YmxpYyByZWNvcmRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQFZpZXdDaGlsZCgnaGVhZGVyVGVtcGxhdGUnLCB7IHJlYWQ6IFRlbXBsYXRlUmVmLCBzdGF0aWM6IHRydWUgfSlcbiAgICBwdWJsaWMgaGVhZGVyVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoSWd4UGl2b3RHcmlkQ29sdW1uUmVzaXplckNvbXBvbmVudClcbiAgICBwdWJsaWMgb3ZlcnJpZGUgcmVzaXplTGluZTogSWd4UGl2b3RHcmlkQ29sdW1uUmVzaXplckNvbXBvbmVudDtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQFZpZXdDaGlsZHJlbihJZ3hHcmlkRXhjZWxTdHlsZUZpbHRlcmluZ0NvbXBvbmVudCwgeyByZWFkOiBJZ3hHcmlkRXhjZWxTdHlsZUZpbHRlcmluZ0NvbXBvbmVudCB9KVxuICAgIHB1YmxpYyBvdmVycmlkZSBleGNlbFN0eWxlRmlsdGVyaW5nQ29tcG9uZW50czogUXVlcnlMaXN0PElneEdyaWRFeGNlbFN0eWxlRmlsdGVyaW5nQ29tcG9uZW50PjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQFZpZXdDaGlsZHJlbihJZ3hQaXZvdFJvd0RpbWVuc2lvbkNvbnRlbnRDb21wb25lbnQpXG4gICAgcHJvdGVjdGVkIHJvd0RpbWVuc2lvbkNvbnRlbnRDb2xsZWN0aW9uOiBRdWVyeUxpc3Q8SWd4UGl2b3RSb3dEaW1lbnNpb25Db250ZW50Q29tcG9uZW50PjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGdldCBtaW5Db2x1bW5XaWR0aCgpIHtcbiAgICAgICAgaWYgKHRoaXMuc3VwZXJDb21wYWN0TW9kZSkge1xuICAgICAgICAgICAgcmV0dXJuIE1JTklNVU1fQ09MVU1OX1dJRFRIX1NVUEVSX0NPTVBBQ1Q7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gTUlOSU1VTV9DT0xVTU5fV0lEVEg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGRyZW4oJ3ZlcnRpY2FsUm93RGltU2Nyb2xsQ29udGFpbmVyJywgeyByZWFkOiBJZ3hHcmlkRm9yT2ZEaXJlY3RpdmUgfSlcbiAgICBwdWJsaWMgdmVydGljYWxSb3dEaW1TY3JvbGxDb250YWluZXJzOiBRdWVyeUxpc3Q8SWd4R3JpZEZvck9mRGlyZWN0aXZlPGFueSwgYW55W10+PjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgb3ZlcnJpZGUgYWRkUm93RW1wdHlUZW1wbGF0ZTogVGVtcGxhdGVSZWY8dm9pZD47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIGF1dG9HZW5lcmF0ZUV4Y2x1ZGU6IHN0cmluZ1tdID0gW107XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIHNuYWNrYmFyRGlzcGxheVRpbWUgPSA2MDAwO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgb3ZlcnJpZGUgY2VsbEVkaXQgPSBuZXcgRXZlbnRFbWl0dGVyPElHcmlkRWRpdEV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIGNlbGxFZGl0RG9uZSA9IG5ldyBFdmVudEVtaXR0ZXI8SUdyaWRFZGl0RG9uZUV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIGNlbGxFZGl0RW50ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPElHcmlkRWRpdEV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIGNlbGxFZGl0RXhpdCA9IG5ldyBFdmVudEVtaXR0ZXI8SUdyaWRFZGl0RG9uZUV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIGNvbHVtbk1vdmluZ1N0YXJ0ID0gbmV3IEV2ZW50RW1pdHRlcjxJQ29sdW1uTW92aW5nU3RhcnRFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBvdmVycmlkZSBjb2x1bW5Nb3ZpbmcgPSBuZXcgRXZlbnRFbWl0dGVyPElDb2x1bW5Nb3ZpbmdFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBvdmVycmlkZSBjb2x1bW5Nb3ZpbmdFbmQgPSBuZXcgRXZlbnRFbWl0dGVyPElDb2x1bW5Nb3ZpbmdFbmRFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBvdmVycmlkZSBjb2x1bW5QaW4gPSBuZXcgRXZlbnRFbWl0dGVyPElQaW5Db2x1bW5DYW5jZWxsYWJsZUV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIGNvbHVtblBpbm5lZCA9IG5ldyBFdmVudEVtaXR0ZXI8SVBpbkNvbHVtbkV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIHJvd0FkZCA9IG5ldyBFdmVudEVtaXR0ZXI8SVJvd0RhdGFDYW5jZWxhYmxlRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgb3ZlcnJpZGUgcm93QWRkZWQgPSBuZXcgRXZlbnRFbWl0dGVyPElSb3dEYXRhRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgb3ZlcnJpZGUgcm93RGVsZXRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8SVJvd0RhdGFFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBvdmVycmlkZSByb3dEZWxldGUgPSBuZXcgRXZlbnRFbWl0dGVyPElSb3dEYXRhQ2FuY2VsYWJsZUV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIHJvd0RyYWdTdGFydCA9IG5ldyBFdmVudEVtaXR0ZXI8SVJvd0RyYWdTdGFydEV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIHJvd0RyYWdFbmQgPSBuZXcgRXZlbnRFbWl0dGVyPElSb3dEcmFnRW5kRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgb3ZlcnJpZGUgcm93RWRpdEVudGVyID0gbmV3IEV2ZW50RW1pdHRlcjxJR3JpZEVkaXRFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBvdmVycmlkZSByb3dFZGl0ID0gbmV3IEV2ZW50RW1pdHRlcjxJR3JpZEVkaXRFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBvdmVycmlkZSByb3dFZGl0RG9uZSA9IG5ldyBFdmVudEVtaXR0ZXI8SUdyaWRFZGl0RG9uZUV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIHJvd0VkaXRFeGl0ID0gbmV3IEV2ZW50RW1pdHRlcjxJR3JpZEVkaXREb25lRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgb3ZlcnJpZGUgcm93UGlubmluZyA9IG5ldyBFdmVudEVtaXR0ZXI8SVBpblJvd0V2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIHJvd1Bpbm5lZCA9IG5ldyBFdmVudEVtaXR0ZXI8SVBpblJvd0V2ZW50QXJncz4oKTtcblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBjb2x1bW5Hcm91cFN0YXRlcyA9IG5ldyBNYXA8c3RyaW5nLCBib29sZWFuPigpO1xuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBkaW1lbnNpb25EYXRhQ29sdW1ucztcbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IHBpdm90S2V5cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGl2b3RDb25maWd1cmF0aW9uLnBpdm90S2V5cyB8fCBERUZBVUxUX1BJVk9UX0tFWVM7XG4gICAgfVxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBpc1Bpdm90ID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGRyYWdSb3dJRCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IHJvb3RTdW1tYXJpZXNFbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgcm93RGltZW5zaW9uUmVzaXppbmcgPSB0cnVlO1xuXG4gICAgcHJpdmF0ZSBfZW1wdHlSb3dEaW1lbnNpb246IElQaXZvdERpbWVuc2lvbiA9IHsgbWVtYmVyTmFtZTogJycsIGVuYWJsZWQ6IHRydWUsIGxldmVsOiAwIH07XG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGVtcHR5Um93RGltZW5zaW9uKCk6IElQaXZvdERpbWVuc2lvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbXB0eVJvd0RpbWVuc2lvbjtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgX3Bpdm90VmFsdWVDbG9uZVN0cmF0ZWd5OiBJRGF0YUNsb25lU3RyYXRlZ3kgPSBuZXcgRGVmYXVsdERhdGFDbG9uZVN0cmF0ZWd5KCk7XG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIF9kZWZhdWx0RXhwYW5kU3RhdGUgPSBmYWxzZTtcbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgX2ZpbHRlclN0cmF0ZWd5OiBJRmlsdGVyaW5nU3RyYXRlZ3kgPSBuZXcgRGltZW5zaW9uVmFsdWVzRmlsdGVyaW5nU3RyYXRlZ3koKTtcbiAgICBwcml2YXRlIF9kYXRhO1xuICAgIHByaXZhdGUgX3Bpdm90Q29uZmlndXJhdGlvbjogSVBpdm90Q29uZmlndXJhdGlvbiA9IHsgcm93czogbnVsbCwgY29sdW1uczogbnVsbCwgdmFsdWVzOiBudWxsLCBmaWx0ZXJzOiBudWxsIH07XG4gICAgcHJpdmF0ZSBwX2lkID0gYGlneC1waXZvdC1ncmlkLSR7TkVYVF9JRCsrfWA7XG4gICAgcHJpdmF0ZSBfc3VwZXJDb21wYWN0TW9kZSA9IGZhbHNlO1xuICAgIHByaXZhdGUgX3Bpdm90VUk6IElQaXZvdFVJU2V0dGluZ3MgPSB7IHNob3dDb25maWd1cmF0aW9uOiB0cnVlLCBzaG93Um93SGVhZGVyczogZmFsc2UgfTtcbiAgICBwcml2YXRlIF9zb3J0YWJsZUNvbHVtbnMgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgKiBHZXRzL1NldHMgdGhlIGRlZmF1bHQgZXhwYW5kIHN0YXRlIGZvciBhbGwgcm93cy5cbiAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICAgIHB1YmxpYyBnZXQgZGVmYXVsdEV4cGFuZFN0YXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmYXVsdEV4cGFuZFN0YXRlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgZGVmYXVsdEV4cGFuZFN0YXRlKHZhbDogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9kZWZhdWx0RXhwYW5kU3RhdGUgPSB2YWw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgcGFnaW5nTW9kZSgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBzZXQgcGFnaW5nTW9kZShfdmFsOiBHcmlkUGFnaW5nTW9kZSkge1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQFdhdGNoQ2hhbmdlcygpXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBoaWRlUm93U2VsZWN0b3JzKCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIHNldCBoaWRlUm93U2VsZWN0b3JzKF92YWx1ZTogYm9vbGVhbikge1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGF1dG9HZW5lcmF0ZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBhY3Rpb25TdHJpcDogSWd4QWN0aW9uU3RyaXBUb2tlbjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIHNob3VsZEdlbmVyYXRlOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgbW92aW5nID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSB0b29sYmFyRXhwb3J0aW5nID0gbmV3IEV2ZW50RW1pdHRlcjxJR3JpZFRvb2xiYXJFeHBvcnRFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgcm93RHJhZ2dhYmxlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgc2V0IHJvd0RyYWdnYWJsZShfdmFsOiBib29sZWFuKSB7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IGFsbG93QWR2YW5jZWRGaWx0ZXJpbmcoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgc2V0IGFsbG93QWR2YW5jZWRGaWx0ZXJpbmcoX3ZhbHVlKSB7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgZmlsdGVyTW9kZSgpIHtcbiAgICAgICAgcmV0dXJuIEZpbHRlck1vZGUucXVpY2tGaWx0ZXI7XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIHNldCBmaWx0ZXJNb2RlKF92YWx1ZTogRmlsdGVyTW9kZSkge1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBhbGxvd0ZpbHRlcmluZygpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBzZXQgYWxsb3dGaWx0ZXJpbmcoX3ZhbHVlKSB7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgcGFnZSgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgc2V0IHBhZ2UoX3ZhbDogbnVtYmVyKSB7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgcGVyUGFnZSgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIHNldCBwZXJQYWdlKF92YWw6IG51bWJlcikge1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBwaW5uZWRDb2x1bW5zKCk6IElneENvbHVtbkNvbXBvbmVudFtdIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgdW5waW5uZWRDb2x1bW5zKCk6IElneENvbHVtbkNvbXBvbmVudFtdIHtcbiAgICAgICAgcmV0dXJuIHN1cGVyLnVucGlubmVkQ29sdW1ucztcbiAgICB9XG5cbiAgICAvKipcbiAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IHVucGlubmVkRGF0YVZpZXcoKTogYW55W10ge1xuICAgICAgICByZXR1cm4gc3VwZXIudW5waW5uZWREYXRhVmlldztcbiAgICB9XG5cbiAgICAvKipcbiAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IHVucGlubmVkV2lkdGgoKSB7XG4gICAgICAgIHJldHVybiBzdXBlci51bnBpbm5lZFdpZHRoO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBwaW5uZWRXaWR0aCgpIHtcbiAgICAgICAgcmV0dXJuIHN1cGVyLnBpbm5lZFdpZHRoO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgb3ZlcnJpZGUgc2V0IHN1bW1hcnlSb3dIZWlnaHQoX3ZhbHVlOiBudW1iZXIpIHtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IHN1bW1hcnlSb3dIZWlnaHQoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IHRyYW5zYWN0aW9ucygpOiBUcmFuc2FjdGlvblNlcnZpY2U8VHJhbnNhY3Rpb24sIFN0YXRlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl90cmFuc2FjdGlvbnM7XG4gICAgfVxuXG5cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBkcmFnSW5kaWNhdG9ySWNvblRlbXBsYXRlKCk6IFRlbXBsYXRlUmVmPGFueT4ge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIHNldCBkcmFnSW5kaWNhdG9ySWNvblRlbXBsYXRlKF92YWw6IFRlbXBsYXRlUmVmPGFueT4pIHtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBXYXRjaENoYW5nZXMoKVxuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgcm93RWRpdGFibGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgc2V0IHJvd0VkaXRhYmxlKF92YWw6IGJvb2xlYW4pIHtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBwaW5uaW5nKCkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIHB1YmxpYyBvdmVycmlkZSBzZXQgcGlubmluZyhfdmFsdWUpIHtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBzdW1tYXJ5UG9zaXRpb24oKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgc2V0IHN1bW1hcnlQb3NpdGlvbihfdmFsdWU6IEdyaWRTdW1tYXJ5UG9zaXRpb24pIHtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcmFsXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IHN1bW1hcnlDYWxjdWxhdGlvbk1vZGUoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgc2V0IHN1bW1hcnlDYWxjdWxhdGlvbk1vZGUoX3ZhbHVlOiBHcmlkU3VtbWFyeUNhbGN1bGF0aW9uTW9kZSkge1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVyYWxcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IHNob3dTdW1tYXJ5T25Db2xsYXBzZSgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBzZXQgc2hvd1N1bW1hcnlPbkNvbGxhcHNlKF92YWx1ZTogYm9vbGVhbikge1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBoaWRkZW5Db2x1bW5zQ291bnQoKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBwaW5uZWRDb2x1bW5zQ291bnQoKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBiYXRjaEVkaXRpbmcoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgc2V0IGJhdGNoRWRpdGluZyhfdmFsOiBib29sZWFuKSB7XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBzZWxlY3RlZFJvd3MoKTogYW55W10ge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25TZXJ2aWNlLmdldFNlbGVjdGVkUm93cygpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkUm93SWRzID0gW107XG4gICAgICAgIHRoaXMuZGF0YVZpZXcuZm9yRWFjaChyZWNvcmQgPT4ge1xuICAgICAgICAgICAgY29uc3QgcHJldiA9IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBkaW0gb2YgdGhpcy5yb3dEaW1lbnNpb25zKSB7XG4gICAgICAgICAgICAgICAgbGV0IGN1cnJEaW0gPSBkaW07XG4gICAgICAgICAgICAgICAgbGV0IHNob3VsZEJyZWFrID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSBQaXZvdFV0aWwuZ2V0UmVjb3JkS2V5KHJlY29yZCwgY3VyckRpbSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGlvblNlcnZpY2UuaXNQaXZvdFJvd1NlbGVjdGVkKGtleSkgJiYgIXNlbGVjdGVkUm93SWRzLmZpbmQoeCA9PiB4ID09PSByZWNvcmQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZFJvd0lkcy5wdXNoKHJlY29yZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaG91bGRCcmVhayA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjdXJyRGltID0gY3VyckRpbS5jaGlsZExldmVsO1xuICAgICAgICAgICAgICAgIH0gd2hpbGUgKGN1cnJEaW0pO1xuICAgICAgICAgICAgICAgIHByZXYucHVzaChkaW0pO1xuICAgICAgICAgICAgICAgIGlmIChzaG91bGRCcmVhaykge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHNlbGVjdGVkUm93SWRzO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICB2YWxpZGF0aW9uU2VydmljZTogSWd4R3JpZFZhbGlkYXRpb25TZXJ2aWNlLFxuICAgICAgICBzZWxlY3Rpb25TZXJ2aWNlOiBJZ3hHcmlkU2VsZWN0aW9uU2VydmljZSxcbiAgICAgICAgY29sUmVzaXppbmdTZXJ2aWNlOiBJZ3hQaXZvdENvbHVtblJlc2l6aW5nU2VydmljZSxcbiAgICAgICAgZ3JpZEFQSTogR3JpZEJhc2VBUElTZXJ2aWNlPElneEdyaWRCYXNlRGlyZWN0aXZlICYgR3JpZFR5cGU+LFxuICAgICAgICB0cmFuc2FjdGlvbkZhY3Rvcnk6IElneEZsYXRUcmFuc2FjdGlvbkZhY3RvcnksXG4gICAgICAgIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgICAgICB6b25lOiBOZ1pvbmUsXG4gICAgICAgIEBJbmplY3QoRE9DVU1FTlQpIGRvY3VtZW50LFxuICAgICAgICBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBkaWZmZXJzOiBJdGVyYWJsZURpZmZlcnMsXG4gICAgICAgIHZpZXdSZWY6IFZpZXdDb250YWluZXJSZWYsXG4gICAgICAgIGluamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgZW52SW5qZWN0b3I6IEVudmlyb25tZW50SW5qZWN0b3IsXG4gICAgICAgIG5hdmlnYXRpb246IElneFBpdm90R3JpZE5hdmlnYXRpb25TZXJ2aWNlLFxuICAgICAgICBmaWx0ZXJpbmdTZXJ2aWNlOiBJZ3hGaWx0ZXJpbmdTZXJ2aWNlLFxuICAgICAgICB0ZXh0SGlnaGxpZ2h0U2VydmljZTogSWd4VGV4dEhpZ2hsaWdodFNlcnZpY2UsXG4gICAgICAgIEBJbmplY3QoSWd4T3ZlcmxheVNlcnZpY2UpIG92ZXJsYXlTZXJ2aWNlOiBJZ3hPdmVybGF5U2VydmljZSxcbiAgICAgICAgc3VtbWFyeVNlcnZpY2U6IElneEdyaWRTdW1tYXJ5U2VydmljZSxcbiAgICAgICAgQEluamVjdChMT0NBTEVfSUQpIGxvY2FsZUlkOiBzdHJpbmcsXG4gICAgICAgIHBsYXRmb3JtOiBQbGF0Zm9ybVV0aWwsXG4gICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoSWd4R3JpZFRyYW5zYWN0aW9uKSBfZGlUcmFuc2FjdGlvbnM/OiBUcmFuc2FjdGlvblNlcnZpY2U8VHJhbnNhY3Rpb24sIFN0YXRlPikge1xuICAgICAgICBzdXBlcihcbiAgICAgICAgICAgIHZhbGlkYXRpb25TZXJ2aWNlLFxuICAgICAgICAgICAgc2VsZWN0aW9uU2VydmljZSxcbiAgICAgICAgICAgIGNvbFJlc2l6aW5nU2VydmljZSxcbiAgICAgICAgICAgIGdyaWRBUEksXG4gICAgICAgICAgICB0cmFuc2FjdGlvbkZhY3RvcnksXG4gICAgICAgICAgICBlbGVtZW50UmVmLFxuICAgICAgICAgICAgem9uZSxcbiAgICAgICAgICAgIGRvY3VtZW50LFxuICAgICAgICAgICAgY2RyLFxuICAgICAgICAgICAgZGlmZmVycyxcbiAgICAgICAgICAgIHZpZXdSZWYsXG4gICAgICAgICAgICBpbmplY3RvcixcbiAgICAgICAgICAgIGVudkluamVjdG9yLFxuICAgICAgICAgICAgbmF2aWdhdGlvbixcbiAgICAgICAgICAgIGZpbHRlcmluZ1NlcnZpY2UsXG4gICAgICAgICAgICB0ZXh0SGlnaGxpZ2h0U2VydmljZSxcbiAgICAgICAgICAgIG92ZXJsYXlTZXJ2aWNlLFxuICAgICAgICAgICAgc3VtbWFyeVNlcnZpY2UsXG4gICAgICAgICAgICBsb2NhbGVJZCxcbiAgICAgICAgICAgIHBsYXRmb3JtLFxuICAgICAgICAgICAgX2RpVHJhbnNhY3Rpb25zKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIG5nT25Jbml0KCkge1xuICAgICAgICAvLyBwaXZvdCBncmlkIGFsd2F5cyBnZW5lcmF0ZXMgY29sdW1ucyBhdXRvbWF0aWNhbGx5LlxuICAgICAgICB0aGlzLmF1dG9HZW5lcmF0ZSA9IHRydWU7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgICAgIC8vIGlnbm9yZSBhbnkgdXNlciBkZWZpbmVkIGNvbHVtbnMgYW5kIGF1dG8tZ2VuZXJhdGUgYmFzZWQgb24gcGl2b3QgY29uZmlnLlxuICAgICAgICB0aGlzLnVwZGF0ZUNvbHVtbnMoW10pO1xuICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmF1dG9HZW5lcmF0ZUNvbmZpZykge1xuICAgICAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVDb25maWcoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2V0dXBDb2x1bW5zKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodGhpcy52YWx1ZUNoaXBUZW1wbGF0ZURpcmVjdGl2ZSkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZUNoaXBUZW1wbGF0ZSA9IHRoaXMudmFsdWVDaGlwVGVtcGxhdGVEaXJlY3RpdmUudGVtcGxhdGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucm93RGltZW5zaW9uSGVhZGVyRGlyZWN0aXZlKSB7XG4gICAgICAgICAgICB0aGlzLnJvd0RpbWVuc2lvbkhlYWRlclRlbXBsYXRlID0gdGhpcy5yb3dEaW1lbnNpb25IZWFkZXJEaXJlY3RpdmUudGVtcGxhdGU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgc3VwZXIubmdBZnRlclZpZXdJbml0KCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE5vdGlmaWVzIGZvciBkaW1lbnNpb24gY2hhbmdlLlxuICAgICAqL1xuICAgIHB1YmxpYyBub3RpZnlEaW1lbnNpb25DaGFuZ2UocmVnZW5lcmF0ZUNvbHVtbnMgPSBmYWxzZSkge1xuICAgICAgICBpZiAocmVnZW5lcmF0ZUNvbHVtbnMpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0dXBDb2x1bW5zKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5waXBlVHJpZ2dlcisrO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgZnVsbCBsaXN0IG9mIGRpbWVuc2lvbnMuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjb25zdCBkaW1lbnNpb25zID0gdGhpcy5ncmlkLmFsbERpbWVuc2lvbnM7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldCBhbGxEaW1lbnNpb25zKCkge1xuICAgICAgICBjb25zdCBjb25maWcgPSB0aGlzLl9waXZvdENvbmZpZ3VyYXRpb247XG4gICAgICAgIGlmICghY29uZmlnKSByZXR1cm4gW107XG4gICAgICAgIHJldHVybiAoY29uZmlnLnJvd3MgfHwgW10pLmNvbmNhdCgoY29uZmlnLmNvbHVtbnMgfHwgW10pKS5jb25jYXQoY29uZmlnLmZpbHRlcnMgfHwgW10pLmZpbHRlcih4ID0+IHggIT09IG51bGwgJiYgeCAhPT0gdW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgY3JlYXRlRmlsdGVyRVNGKGRyb3Bkb3duOiBhbnksIGNvbHVtbjogQ29sdW1uVHlwZSwgb3B0aW9uczogT3ZlcmxheVNldHRpbmdzLCBzaG91bGRSZWF0YWNoOiBib29sZWFuKSB7XG4gICAgICAgIG9wdGlvbnMub3V0bGV0ID0gdGhpcy5vdXRsZXQ7XG4gICAgICAgIGlmIChkcm9wZG93bikge1xuICAgICAgICAgICAgZHJvcGRvd24uaW5pdGlhbGl6ZShjb2x1bW4sIHRoaXMub3ZlcmxheVNlcnZpY2UpO1xuICAgICAgICAgICAgaWYgKHNob3VsZFJlYXRhY2gpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpZCA9IHRoaXMub3ZlcmxheVNlcnZpY2UuYXR0YWNoKGRyb3Bkb3duLmVsZW1lbnQsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIGRyb3Bkb3duLm92ZXJsYXlDb21wb25lbnRJZCA9IGlkO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IGlkLCByZWY6IHVuZGVmaW5lZCB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHsgaWQ6IGRyb3Bkb3duLm92ZXJsYXlDb21wb25lbnRJZCwgcmVmOiB1bmRlZmluZWQgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHVibGljIG92ZXJyaWRlIGZlYXR1cmVDb2x1bW5zV2lkdGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBpdm90Um93V2lkdGhzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMvU2V0cyB0aGUgdmFsdWUgb2YgdGhlIGBpZGAgYXR0cmlidXRlLlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBJZiBub3QgcHJvdmlkZWQgaXQgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXBpdm90LWdyaWQgW2lkXT1cIidpZ3gtcGl2b3QtMSdcIiBbZGF0YV09XCJEYXRhXCI+PC9pZ3gtcGl2b3QtZ3JpZD5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuaWQnKVxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBpZCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5wX2lkO1xuICAgIH1cbiAgICBwdWJsaWMgc2V0IGlkKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5wX2lkID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cy9TZXRzIHRoZSBhcnJheSBvZiBkYXRhIHRoYXQgcG9wdWxhdGVzIHRoZSBjb21wb25lbnQuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtcGl2b3QtZ3JpZCBbZGF0YV09XCJEYXRhXCI+PC9pZ3gtcGl2b3QtZ3JpZD5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgZGF0YSh2YWx1ZTogYW55W10gfCBudWxsKSB7XG4gICAgICAgIHRoaXMuX2RhdGEgPSB2YWx1ZSB8fCBbXTtcbiAgICAgICAgaWYgKCF0aGlzLl9pbml0KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5hdXRvR2VuZXJhdGVDb25maWcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdlbmVyYXRlQ29uZmlnKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNldHVwQ29sdW1ucygpO1xuICAgICAgICAgICAgdGhpcy5yZWZsb3coKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgaWYgKHRoaXMuaGVpZ2h0ID09PSBudWxsIHx8IHRoaXMuaGVpZ2h0LmluZGV4T2YoJyUnKSAhPT0gLTEpIHtcbiAgICAgICAgICAgIC8vIElmIHRoZSBoZWlnaHQgd2lsbCBjaGFuZ2UgYmFzZWQgb24gaG93IG11Y2ggZGF0YSB0aGVyZSBpcywgcmVjYWxjdWxhdGUgc2l6ZXMgaW4gaWd4Rm9yT2YuXG4gICAgICAgICAgICB0aGlzLm5vdGlmeUNoYW5nZXModHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIGFycmF5IG9mIGRhdGEgc2V0IHRvIHRoZSBjb21wb25lbnQuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBkYXRhID0gdGhpcy5ncmlkLmRhdGE7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldCBkYXRhKCk6IGFueVtdIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0Q29udGV4dChyb3dEYXRhLCByb3dJbmRleCk6IGFueSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAkaW1wbGljaXQ6IHJvd0RhdGEsXG4gICAgICAgICAgICB0ZW1wbGF0ZUlEOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ2RhdGFSb3cnLFxuICAgICAgICAgICAgICAgIGlkOiBudWxsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaW5kZXg6IHRoaXMuZ2V0RGF0YVZpZXdJbmRleChyb3dJbmRleCwgZmFsc2UpXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHBpdm90Um93V2lkdGhzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yb3dEaW1lbnNpb25zLmxlbmd0aCA/IHRoaXMucm93RGltZW5zaW9ucy5yZWR1Y2UoKGFjY3VtdWxhdG9yLCBkaW0pID0+IGFjY3VtdWxhdG9yICsgdGhpcy5yb3dEaW1lbnNpb25XaWR0aFRvUGl4ZWxzKGRpbSksIDApIDpcbiAgICAgICAgICAgIHRoaXMucm93RGltZW5zaW9uV2lkdGhUb1BpeGVscyh0aGlzLmVtcHR5Um93RGltZW5zaW9uKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyByb3dEaW1lbnNpb25XaWR0aChkaW0sIGlnbm9yZUJlZm9yZUluaXQgPSBmYWxzZSApOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBpc0F1dG8gPSBkaW0ud2lkdGggJiYgZGltLndpZHRoLmluZGV4T2YoJ2F1dG8nKSAhPT0gLTE7XG4gICAgICAgIGlmIChpc0F1dG8pIHtcbiAgICAgICAgICAgIHJldHVybiBkaW0uYXV0b1dpZHRoID8gZGltLmF1dG9XaWR0aCArICdweCcgOiAnZml0LWNvbnRlbnQnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucm93RGltZW5zaW9uV2lkdGhUb1BpeGVscyhkaW0sIGlnbm9yZUJlZm9yZUluaXQpICsgJ3B4JztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIHJvd0RpbWVuc2lvbldpZHRoVG9QaXhlbHMoZGltOiBJUGl2b3REaW1lbnNpb24sIGlnbm9yZUJlZm9yZUluaXQgPSBmYWxzZSk6IG51bWJlciB7XG4gICAgICAgIGlmICghaWdub3JlQmVmb3JlSW5pdCAmJiB0aGlzLnNob3VsZEdlbmVyYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZGltPy53aWR0aCkge1xuICAgICAgICAgICAgcmV0dXJuIE1JTklNVU1fQ09MVU1OX1dJRFRIO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlzUGVyY2VudCA9IGRpbS53aWR0aCAmJiBkaW0ud2lkdGguaW5kZXhPZignJScpICE9PSAtMTtcbiAgICAgICAgY29uc3QgaXNBdXRvID0gZGltLndpZHRoICYmIGRpbS53aWR0aC5pbmRleE9mKCdhdXRvJykgIT09IC0xO1xuICAgICAgICBpZiAoaXNQZXJjZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VGbG9hdChkaW0ud2lkdGgpIC8gMTAwICogdGhpcy5jYWxjV2lkdGg7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNBdXRvKSB7XG4gICAgICAgICAgICByZXR1cm4gZGltLmF1dG9XaWR0aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJzZUludChkaW0ud2lkdGgsIDEwKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIHJldmVyc2VEaW1lbnNpb25XaWR0aFRvUGVyY2VudCh3aWR0aDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuICh3aWR0aCAqIDEwMCAvIHRoaXMuY2FsY1dpZHRoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IHBpdm90Q29udGVudENhbGNXaWR0aCgpIHtcbiAgICAgICAgY29uc3QgdG90YWxEaW1XaWR0aCA9IHRoaXMucm93RGltZW5zaW9ucy5sZW5ndGggPiAwID9cbiAgICAgICAgICAgIHRoaXMucm93RGltZW5zaW9ucy5tYXAoKGRpbSkgPT4gdGhpcy5yb3dEaW1lbnNpb25XaWR0aFRvUGl4ZWxzKGRpbSkpLnJlZHVjZSgocHJldiwgY3VyKSA9PiBwcmV2ICsgY3VyKSA6XG4gICAgICAgICAgICAwO1xuICAgICAgICByZXR1cm4gdGhpcy5jYWxjV2lkdGggLSB0b3RhbERpbVdpZHRoO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgcGl2b3RQaW5uZWRXaWR0aCgpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLnNob3VsZEdlbmVyYXRlID8gKHRoaXMuaXNQaW5uaW5nVG9TdGFydCA/IHRoaXMucGlubmVkV2lkdGggOiB0aGlzLmhlYWRlckZlYXR1cmVzV2lkdGgpIDogMDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IHBpdm90VW5waW5uZWRXaWR0aCgpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLnNob3VsZEdlbmVyYXRlID8gdGhpcy51bnBpbm5lZFdpZHRoIDogMDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IHJvd0RpbWVuc2lvbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBpdm90Q29uZmlndXJhdGlvbi5yb3dzPy5maWx0ZXIoeCA9PiB4LmVuYWJsZWQpIHx8IFtdO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgY29sdW1uRGltZW5zaW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGl2b3RDb25maWd1cmF0aW9uLmNvbHVtbnM/LmZpbHRlcih4ID0+IHguZW5hYmxlZCkgfHwgW107XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGdldCBmaWx0ZXJEaW1lbnNpb25zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5waXZvdENvbmZpZ3VyYXRpb24uZmlsdGVycz8uZmlsdGVyKHggPT4geC5lbmFibGVkKSB8fCBbXTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IHZhbHVlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGl2b3RDb25maWd1cmF0aW9uLnZhbHVlcz8uZmlsdGVyKHggPT4geC5lbmFibGVkKSB8fCBbXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdG9nZ2xlQ29sdW1uKGNvbDogSWd4Q29sdW1uQ29tcG9uZW50KSB7XG4gICAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy5jb2x1bW5Hcm91cFN0YXRlcy5nZXQoY29sLmZpZWxkKTtcbiAgICAgICAgY29uc3QgbmV3U3RhdGUgPSAhc3RhdGU7XG4gICAgICAgIHRoaXMuY29sdW1uR3JvdXBTdGF0ZXMuc2V0KGNvbC5maWVsZCwgbmV3U3RhdGUpO1xuICAgICAgICB0aGlzLnRvZ2dsZVJvd0dyb3VwKGNvbCwgbmV3U3RhdGUpO1xuICAgICAgICB0aGlzLnJlZmxvdygpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBnZXRDb2x1bW5XaWR0aFN1bSgpOiBudW1iZXIge1xuICAgICAgICBsZXQgY29sU3VtID0gc3VwZXIuZ2V0Q29sdW1uV2lkdGhTdW0oKTtcbiAgICAgICAgY29sU3VtICs9IHRoaXMucm93RGltZW5zaW9ucy5tYXAoZGltID0+IHRoaXMucm93RGltZW5zaW9uV2lkdGhUb1BpeGVscyhkaW0sIHRydWUpKS5yZWR1Y2UoKHByZXYsIGN1cikgPT4gcHJldiArIGN1ciwgMCk7XG4gICAgICAgIHJldHVybiBjb2xTdW07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgaXNSZWNvcmRQaW5uZWRCeUluZGV4KF9yb3dJbmRleDogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIHRvZ2dsZUNvbHVtblZpc2liaWxpdHkoX2FyZ3M6IElDb2x1bW5WaXNpYmlsaXR5Q2hhbmdlZEV2ZW50QXJncykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZXhwYW5kQWxsKCkge1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGNvbGxhcHNlQWxsKCkge1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGV4cGFuZFJvdyhfcm93SUQ6IGFueSkge1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGNvbGxhcHNlUm93KF9yb3dJRDogYW55KSB7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IHBpbm5lZFJvd3MoKTogSWd4R3JpZFJvd0NvbXBvbmVudFtdIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IHRvdGFsUmVjb3JkcygpOiBudW1iZXIge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIHNldCB0b3RhbFJlY29yZHMoX3RvdGFsOiBudW1iZXIpIHtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBtb3ZlQ29sdW1uKF9jb2x1bW46IElneENvbHVtbkNvbXBvbmVudCwgX3RhcmdldDogSWd4Q29sdW1uQ29tcG9uZW50LCBfcG9zOiBEcm9wUG9zaXRpb24gPSBEcm9wUG9zaXRpb24uQWZ0ZXJEcm9wVGFyZ2V0KSB7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgYWRkUm93KF9kYXRhOiBhbnkpOiB2b2lkIHtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBkZWxldGVSb3coX3Jvd1NlbGVjdG9yOiBhbnkpOiBhbnkge1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIHVwZGF0ZUNlbGwoX3ZhbHVlOiBhbnksIF9yb3dTZWxlY3RvcjogYW55LCBfY29sdW1uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSB1cGRhdGVSb3coX3ZhbHVlOiBhbnksIF9yb3dTZWxlY3RvcjogYW55KTogdm9pZCB7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZW5hYmxlU3VtbWFyaWVzKC4uLl9yZXN0KSB7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZGlzYWJsZVN1bW1hcmllcyguLi5fcmVzdCkge1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIHBpbkNvbHVtbihfY29sdW1uTmFtZTogc3RyaW5nIHwgSWd4Q29sdW1uQ29tcG9uZW50LCBfaW5kZXg/KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSB1bnBpbkNvbHVtbihfY29sdW1uTmFtZTogc3RyaW5nIHwgSWd4Q29sdW1uQ29tcG9uZW50LCBfaW5kZXg/KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBwaW5Sb3coX3Jvd0lEOiBhbnksIF9pbmRleD86IG51bWJlciwgX3Jvdz86IFJvd1R5cGUpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIHVucGluUm93KF9yb3dJRDogYW55LCBfcm93PzogUm93VHlwZSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IHBpbm5lZFJvd0hlaWdodCgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBoYXNFZGl0YWJsZUNvbHVtbnMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgaGFzU3VtbWFyaXplZENvbHVtbnMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgaGFzTW92YWJsZUNvbHVtbnMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgcGlubmVkRGF0YVZpZXcoKTogYW55W10ge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgb3BlbkFkdmFuY2VkRmlsdGVyaW5nRGlhbG9nKF9vdmVybGF5U2V0dGluZ3M/OiBPdmVybGF5U2V0dGluZ3MpIHtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBjbG9zZUFkdmFuY2VkRmlsdGVyaW5nRGlhbG9nKF9hcHBseUNoYW5nZXM6IGJvb2xlYW4pIHtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBlbmRFZGl0KF9jb21taXQgPSB0cnVlLCBfZXZlbnQ/OiBFdmVudCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgYmVnaW5BZGRSb3dCeUlkKF9yb3dJRDogYW55LCBfYXNDaGlsZD86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBiZWdpbkFkZFJvd0J5SW5kZXgoX2luZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBjbGVhclNlYXJjaCgpIHsgfVxuXG4gICAgLyoqXG4gICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIHJlZnJlc2hTZWFyY2goX3VwZGF0ZUFjdGl2ZUluZm8/OiBib29sZWFuLCBfZW5kRWRpdCA9IHRydWUpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZmluZE5leHQoX3RleHQ6IHN0cmluZywgX2Nhc2VTZW5zaXRpdmU/OiBib29sZWFuLCBfZXhhY3RNYXRjaD86IGJvb2xlYW4pOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZmluZFByZXYoX3RleHQ6IHN0cmluZywgX2Nhc2VTZW5zaXRpdmU/OiBib29sZWFuLCBfZXhhY3RNYXRjaD86IGJvb2xlYW4pOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0TmV4dENlbGwoY3VyclJvd0luZGV4OiBudW1iZXIsIGN1clZpc2libGVDb2xJbmRleDogbnVtYmVyLFxuICAgICAgICBjYWxsYmFjazogKElneENvbHVtbkNvbXBvbmVudCkgPT4gYm9vbGVhbiA9IG51bGwpOiBJQ2VsbFBvc2l0aW9uIHtcbiAgICAgICAgcmV0dXJuIHN1cGVyLmdldE5leHRDZWxsKGN1cnJSb3dJbmRleCwgY3VyVmlzaWJsZUNvbEluZGV4LCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGdldFByZXZpb3VzQ2VsbChjdXJyUm93SW5kZXg6IG51bWJlciwgY3VyVmlzaWJsZUNvbEluZGV4OiBudW1iZXIsXG4gICAgICAgIGNhbGxiYWNrOiAoSWd4Q29sdW1uQ29tcG9uZW50KSA9PiBib29sZWFuID0gbnVsbCk6IElDZWxsUG9zaXRpb24ge1xuICAgICAgICByZXR1cm4gc3VwZXIuZ2V0UHJldmlvdXNDZWxsKGN1cnJSb3dJbmRleCwgY3VyVmlzaWJsZUNvbEluZGV4LCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGdldFBpbm5lZFdpZHRoKHRha2VIaWRkZW4gPSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gc3VwZXIuZ2V0UGlubmVkV2lkdGgodGFrZUhpZGRlbik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IHRvdGFsSGVpZ2h0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jYWxjSGVpZ2h0O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDb2x1bW5Hcm91cEV4cGFuZFN0YXRlKGNvbDogSWd4Q29sdW1uQ29tcG9uZW50KSB7XG4gICAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy5jb2x1bW5Hcm91cFN0YXRlcy5nZXQoY29sLmZpZWxkKTtcbiAgICAgICAgLy8gY29sdW1ucyBhcmUgZXhwYW5kZWQgYnkgZGVmYXVsdD9cbiAgICAgICAgcmV0dXJuIHN0YXRlICE9PSB1bmRlZmluZWQgJiYgc3RhdGUgIT09IG51bGwgPyBzdGF0ZSA6IGZhbHNlO1xuICAgIH1cblxuICAgIHB1YmxpYyB0b2dnbGVSb3dHcm91cChjb2w6IElneENvbHVtbkNvbXBvbmVudCwgbmV3U3RhdGU6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKCFjb2wpIHJldHVybjtcbiAgICAgICAgaWYgKHRoaXMuaGFzTXVsdGlwbGVWYWx1ZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudENvbHMgPSBjb2wucGFyZW50ID8gY29sLnBhcmVudC5jaGlsZHJlbi50b0FycmF5KCkgOiB0aGlzLl9hdXRvR2VuZXJhdGVkQ29scy5maWx0ZXIoeCA9PiB4LmxldmVsID09PSAwKTtcbiAgICAgICAgICAgIGNvbnN0IHNpYmxpbmdDb2wgPSBwYXJlbnRDb2xzLmZpbHRlcih4ID0+IHguaGVhZGVyID09PSBjb2wuaGVhZGVyICYmIHggIT09IGNvbClbMF07XG4gICAgICAgICAgICBjb25zdCBjdXJySW5kZXggPSBwYXJlbnRDb2xzLmluZGV4T2YoY29sKTtcbiAgICAgICAgICAgIGNvbnN0IHNpYmxpbmdJbmRleCA9IHBhcmVudENvbHMuaW5kZXhPZihzaWJsaW5nQ29sKTtcbiAgICAgICAgICAgIGlmIChjdXJySW5kZXggPCBzaWJsaW5nSW5kZXgpIHtcbiAgICAgICAgICAgICAgICAvLyBjbGlja2VkIG9uIHRoZSBmdWxsIGhpZXJhcmNoeSBoZWFkZXJcbiAgICAgICAgICAgICAgICB0aGlzLnJlc29sdmVUb2dnbGUoY29sLCBuZXdTdGF0ZSk7XG4gICAgICAgICAgICAgICAgc2libGluZ0NvbC5oZWFkZXJUZW1wbGF0ZSA9IHRoaXMuaGVhZGVyVGVtcGxhdGU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGNsaWNrZWQgb24gc3VtbWFyeSBwYXJlbnQgY29sdW1uIHRoYXQgY29udGFpbnMganVzdCB0aGUgbWVhc3VyZXNcbiAgICAgICAgICAgICAgICBjb2wuaGVhZGVyVGVtcGxhdGUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNvbHZlVG9nZ2xlKHNpYmxpbmdDb2wsIG5ld1N0YXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudENvbHMgPSBjb2wucGFyZW50ID8gY29sLnBhcmVudC5jaGlsZHJlbiA6IHRoaXMuX2F1dG9HZW5lcmF0ZWRDb2xzLmZpbHRlcih4ID0+IHgubGV2ZWwgPT09IDApO1xuICAgICAgICAgICAgY29uc3QgZmllbGRDb2x1bW4gPSBwYXJlbnRDb2xzLmZpbHRlcih4ID0+IHguaGVhZGVyID09PSBjb2wuaGVhZGVyICYmICF4LmNvbHVtbkdyb3VwKVswXTtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwQ29sdW1uID0gcGFyZW50Q29scy5maWx0ZXIoeCA9PiB4LmhlYWRlciA9PT0gY29sLmhlYWRlciAmJiB4LmNvbHVtbkdyb3VwKVswXTtcbiAgICAgICAgICAgIHRoaXMucmVzb2x2ZVRvZ2dsZShncm91cENvbHVtbiwgbmV3U3RhdGUpO1xuICAgICAgICAgICAgaWYgKG5ld1N0YXRlKSB7XG4gICAgICAgICAgICAgICAgZmllbGRDb2x1bW4uaGVhZGVyVGVtcGxhdGUgPSB0aGlzLmhlYWRlclRlbXBsYXRlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmaWVsZENvbHVtbi5oZWFkZXJUZW1wbGF0ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBzZXR1cENvbHVtbnMoKSB7XG4gICAgICAgIHN1cGVyLnNldHVwQ29sdW1ucygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEF1dG8tc2l6ZXMgcm93IGRpbWVuc2lvbiBjZWxscy5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogT25seSBzaXplcyBiYXNlZCBvbiB0aGUgZGltZW5zaW9uIGNlbGxzIGluIHZpZXcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5ncmlkLmF1dG9TaXplUm93RGltZW5zaW9uKGRpbWVuc2lvbik7XG4gICAgICogYGBgXG4gICAgICogQHBhcmFtIGRpbWVuc2lvbiBUaGUgcm93IGRpbWVuc2lvbiB0byBzaXplLlxuICAgICAqL1xuICAgIHB1YmxpYyBhdXRvU2l6ZVJvd0RpbWVuc2lvbihkaW1lbnNpb246IElQaXZvdERpbWVuc2lvbikge1xuICAgICAgICBpZiAodGhpcy5nZXREaW1lbnNpb25UeXBlKGRpbWVuc2lvbikgPT09IFBpdm90RGltZW5zaW9uVHlwZS5Sb3cpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlbGF0ZWREaW1zID0gUGl2b3RVdGlsLmZsYXR0ZW4oW2RpbWVuc2lvbl0pLm1hcCh4ID0+IHgubWVtYmVyTmFtZSk7XG4gICAgICAgICAgICBjb25zdCBjb250ZW50ID0gdGhpcy5yb3dEaW1lbnNpb25Db250ZW50Q29sbGVjdGlvbi5maWx0ZXIoeCA9PiByZWxhdGVkRGltcy5pbmRleE9mKHguZGltZW5zaW9uLm1lbWJlck5hbWUpICE9PSAtMSk7XG4gICAgICAgICAgICBjb25zdCBoZWFkZXJzID0gY29udGVudC5tYXAoeCA9PiB4LmhlYWRlckdyb3Vwcy50b0FycmF5KCkpLmZsYXQoKS5tYXAoeCA9PiB4LmhlYWRlciAmJiB4LmhlYWRlci5yZWZJbnN0YW5jZSk7XG4gICAgICAgICAgICBpZiAodGhpcy5waXZvdFVJLnNob3dSb3dIZWFkZXJzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGltZW5zaW9uSGVhZGVyID0gdGhpcy50aGVhZFJvdy5yb3dEaW1lbnNpb25IZWFkZXJzLmZpbmQoeCA9PiB4LmNvbHVtbi5maWVsZCA9PT0gZGltZW5zaW9uLm1lbWJlck5hbWUpO1xuICAgICAgICAgICAgICAgIGhlYWRlcnMucHVzaChkaW1lbnNpb25IZWFkZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYXV0b1dpZHRoID0gdGhpcy5nZXRMYXJnZXNDb250ZW50V2lkdGgoaGVhZGVycyk7XG4gICAgICAgICAgICBkaW1lbnNpb24ud2lkdGggPSBhdXRvV2lkdGg7XG4gICAgICAgICAgICB0aGlzLnBpcGVUcmlnZ2VyKys7XG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbnNlcnRzIGRpbWVuc2lvbiBpbiB0YXJnZXQgY29sbGVjdGlvbiBieSB0eXBlIGF0IHNwZWNpZmllZCBpbmRleCBvciBhdCB0aGUgY29sbGVjdGlvbidzIGVuZC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuZ3JpZC5pbnNlcnREaW1lbnNpb25BdChkaW1lbnNpb24sIFBpdm90RGltZW5zaW9uVHlwZS5Sb3csIDEpO1xuICAgICAqIGBgYFxuICAgICAqIEBwYXJhbSBkaW1lbnNpb24gVGhlIGRpbWVuc2lvbiB0aGF0IHdpbGwgYmUgYWRkZWQuXG4gICAgICogQHBhcmFtIHRhcmdldENvbGxlY3Rpb25UeXBlIFRoZSB0YXJnZXQgY29sbGVjdGlvbiB0eXBlIHRvIGFkZCB0by4gQ2FuIGJlIFJvdywgQ29sdW1uIG9yIEZpbHRlci5cbiAgICAgKiBAcGFyYW0gaW5kZXggVGhlIGluZGV4IGluIHRoZSBjb2xsZWN0aW9uIGF0IHdoaWNoIHRvIGFkZC5cbiAgICAgKiBUaGlzIHBhcmFtZXRlciBpcyBvcHRpb25hbC4gSWYgbm90IHNldCBpdCB3aWxsIGFkZCBpdCB0byB0aGUgZW5kIG9mIHRoZSBjb2xsZWN0aW9uLlxuICAgICAqL1xuICAgIHB1YmxpYyBpbnNlcnREaW1lbnNpb25BdChkaW1lbnNpb246IElQaXZvdERpbWVuc2lvbiwgdGFyZ2V0Q29sbGVjdGlvblR5cGU6IFBpdm90RGltZW5zaW9uVHlwZSwgaW5kZXg/OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0Q29sbGVjdGlvbiA9IHRoaXMuZ2V0RGltZW5zaW9uc0J5VHlwZSh0YXJnZXRDb2xsZWN0aW9uVHlwZSk7XG4gICAgICAgIGlmIChpbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0YXJnZXRDb2xsZWN0aW9uLnNwbGljZShpbmRleCwgMCwgZGltZW5zaW9uKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRhcmdldENvbGxlY3Rpb24ucHVzaChkaW1lbnNpb24pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0YXJnZXRDb2xsZWN0aW9uVHlwZSA9PT0gUGl2b3REaW1lbnNpb25UeXBlLkNvbHVtbikge1xuICAgICAgICAgICAgdGhpcy5zZXR1cENvbHVtbnMoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBpcGVUcmlnZ2VyKys7XG4gICAgICAgIHRoaXMuZGltZW5zaW9uc0NoYW5nZS5lbWl0KHsgZGltZW5zaW9uczogdGFyZ2V0Q29sbGVjdGlvbiwgZGltZW5zaW9uQ29sbGVjdGlvblR5cGU6IHRhcmdldENvbGxlY3Rpb25UeXBlIH0pO1xuICAgICAgICBpZiAodGFyZ2V0Q29sbGVjdGlvblR5cGUgPT09IFBpdm90RGltZW5zaW9uVHlwZS5GaWx0ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuZGltZW5zaW9uRGF0YUNvbHVtbnMgPSB0aGlzLmdlbmVyYXRlRGltZW5zaW9uQ29sdW1ucygpO1xuICAgICAgICAgICAgdGhpcy5yZWZsb3coKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBpdm90Q29uZmlndXJhdGlvbkNoYW5nZS5lbWl0KHsgcGl2b3RDb25maWd1cmF0aW9uOiB0aGlzLnBpdm90Q29uZmlndXJhdGlvbiB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNb3ZlIGRpbWVuc2lvbiBmcm9tIGl0cyBjdXJyZW50bHkgY29sbGVjdGlvbiB0byB0aGUgc3BlY2lmaWVkIHRhcmdldCBjb2xsZWN0aW9uIGJ5IHR5cGUgYXQgc3BlY2lmaWVkIGluZGV4IG9yIGF0IHRoZSBjb2xsZWN0aW9uJ3MgZW5kLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5ncmlkLm1vdmVEaW1lbnNpb24oZGltZW5zaW9uLCBQaXZvdERpbWVuc2lvblR5cGUuUm93LCAxKTtcbiAgICAgKiBgYGBcbiAgICAgKiBAcGFyYW0gZGltZW5zaW9uIFRoZSBkaW1lbnNpb24gdGhhdCB3aWxsIGJlIG1vdmVkLlxuICAgICAqIEBwYXJhbSB0YXJnZXRDb2xsZWN0aW9uVHlwZSBUaGUgdGFyZ2V0IGNvbGxlY3Rpb24gdHlwZSB0byBtb3ZlIGl0IHRvLiBDYW4gYmUgUm93LCBDb2x1bW4gb3IgRmlsdGVyLlxuICAgICAqIEBwYXJhbSBpbmRleCBUaGUgaW5kZXggaW4gdGhlIGNvbGxlY3Rpb24gYXQgd2hpY2ggdG8gYWRkLlxuICAgICAqIFRoaXMgcGFyYW1ldGVyIGlzIG9wdGlvbmFsLiBJZiBub3Qgc2V0IGl0IHdpbGwgYWRkIGl0IHRvIHRoZSBlbmQgb2YgdGhlIGNvbGxlY3Rpb24uXG4gICAgICovXG4gICAgcHVibGljIG1vdmVEaW1lbnNpb24oZGltZW5zaW9uOiBJUGl2b3REaW1lbnNpb24sIHRhcmdldENvbGxlY3Rpb25UeXBlOiBQaXZvdERpbWVuc2lvblR5cGUsIGluZGV4PzogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IHByZXZDb2xsZWN0aW9uVHlwZSA9IHRoaXMuZ2V0RGltZW5zaW9uVHlwZShkaW1lbnNpb24pO1xuICAgICAgICBpZiAocHJldkNvbGxlY3Rpb25UeXBlID09PSBudWxsKSByZXR1cm47XG4gICAgICAgIC8vIHJlbW92ZSBmcm9tIG9sZCBjb2xsZWN0aW9uXG4gICAgICAgIHRoaXMuX3JlbW92ZURpbWVuc2lvbkludGVybmFsKGRpbWVuc2lvbik7XG4gICAgICAgIC8vIGFkZCB0byB0YXJnZXRcbiAgICAgICAgdGhpcy5pbnNlcnREaW1lbnNpb25BdChkaW1lbnNpb24sIHRhcmdldENvbGxlY3Rpb25UeXBlLCBpbmRleCk7XG5cbiAgICAgICAgaWYgKHByZXZDb2xsZWN0aW9uVHlwZSA9PT0gUGl2b3REaW1lbnNpb25UeXBlLkNvbHVtbikge1xuICAgICAgICAgICAgdGhpcy5zZXR1cENvbHVtbnMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgZGltZW5zaW9uIGZyb20gaXRzIGN1cnJlbnRseSBjb2xsZWN0aW9uLlxuICAgICAqIEByZW1hcmtzXG4gICAgICogVGhpcyBpcyBkaWZmZXJlbnQgdGhhbiB0b2dnbGVEaW1lbnNpb24gdGhhdCBlbmFibGVkL2Rpc2FibGVzIHRoZSBkaW1lbnNpb24uXG4gICAgICogVGhpcyBjb21wbGV0ZWx5IHJlbW92ZXMgdGhlIHNwZWNpZmllZCBkaW1lbnNpb24gZnJvbSB0aGUgY29sbGVjdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLmdyaWQucmVtb3ZlRGltZW5zaW9uKGRpbWVuc2lvbik7XG4gICAgICogYGBgXG4gICAgICogQHBhcmFtIGRpbWVuc2lvbiBUaGUgZGltZW5zaW9uIHRvIGJlIHJlbW92ZWQuXG4gICAgICovXG4gICAgcHVibGljIHJlbW92ZURpbWVuc2lvbihkaW1lbnNpb246IElQaXZvdERpbWVuc2lvbikge1xuICAgICAgICBjb25zdCBwcmV2Q29sbGVjdGlvblR5cGUgPSB0aGlzLmdldERpbWVuc2lvblR5cGUoZGltZW5zaW9uKTtcbiAgICAgICAgdGhpcy5fcmVtb3ZlRGltZW5zaW9uSW50ZXJuYWwoZGltZW5zaW9uKTtcbiAgICAgICAgaWYgKHByZXZDb2xsZWN0aW9uVHlwZSA9PT0gUGl2b3REaW1lbnNpb25UeXBlLkNvbHVtbikge1xuICAgICAgICAgICAgdGhpcy5zZXR1cENvbHVtbnMoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJldkNvbGxlY3Rpb25UeXBlID09PSBQaXZvdERpbWVuc2lvblR5cGUuRmlsdGVyKSB7XG4gICAgICAgICAgICB0aGlzLnJlZmxvdygpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucGlwZVRyaWdnZXIrKztcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRvZ2dsZXMgdGhlIGRpbWVuc2lvbidzIGVuYWJsZWQgc3RhdGUgb24gb3Igb2ZmLlxuICAgICAqIEByZW1hcmtzXG4gICAgICogVGhlIGRpbWVuc2lvbiByZW1haW5zIGluIGl0cyBjdXJyZW50IGNvbGxlY3Rpb24uIFRoaXMganVzdCBjaGFuZ2VzIGl0cyBlbmFibGVkIHN0YXRlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuZ3JpZC50b2dnbGVEaW1lbnNpb24oZGltZW5zaW9uKTtcbiAgICAgKiBgYGBcbiAgICAgKiBAcGFyYW0gZGltZW5zaW9uIFRoZSBkaW1lbnNpb24gdG8gYmUgdG9nZ2xlZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgdG9nZ2xlRGltZW5zaW9uKGRpbWVuc2lvbjogSVBpdm90RGltZW5zaW9uKSB7XG4gICAgICAgIGNvbnN0IGRpbVR5cGUgPSB0aGlzLmdldERpbWVuc2lvblR5cGUoZGltZW5zaW9uKTtcbiAgICAgICAgaWYgKGRpbVR5cGUgPT09IG51bGwpIHJldHVybjtcbiAgICAgICAgY29uc3QgY29sbGVjdGlvbiA9IHRoaXMuZ2V0RGltZW5zaW9uc0J5VHlwZShkaW1UeXBlKTtcbiAgICAgICAgZGltZW5zaW9uLmVuYWJsZWQgPSAhZGltZW5zaW9uLmVuYWJsZWQ7XG4gICAgICAgIGlmIChkaW1UeXBlID09PSBQaXZvdERpbWVuc2lvblR5cGUuQ29sdW1uKSB7XG4gICAgICAgICAgICB0aGlzLnNldHVwQ29sdW1ucygpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZGltZW5zaW9uLmVuYWJsZWQgJiYgZGltZW5zaW9uLmZpbHRlcikge1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJpbmdTZXJ2aWNlLmNsZWFyRmlsdGVyKGRpbWVuc2lvbi5tZW1iZXJOYW1lKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBpcGVUcmlnZ2VyKys7XG4gICAgICAgIHRoaXMuZGltZW5zaW9uc0NoYW5nZS5lbWl0KHsgZGltZW5zaW9uczogY29sbGVjdGlvbiwgZGltZW5zaW9uQ29sbGVjdGlvblR5cGU6IGRpbVR5cGUgfSk7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgaWYgKGRpbVR5cGUgPT09IFBpdm90RGltZW5zaW9uVHlwZS5GaWx0ZXIpIHtcbiAgICAgICAgICAgIHRoaXMucmVmbG93KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5waXZvdENvbmZpZ3VyYXRpb25DaGFuZ2UuZW1pdCh7IHBpdm90Q29uZmlndXJhdGlvbjogdGhpcy5waXZvdENvbmZpZ3VyYXRpb24gfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW5zZXJ0cyB2YWx1ZSBhdCBzcGVjaWZpZWQgaW5kZXggb3IgYXQgdGhlIGVuZC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuZ3JpZC5pbnNlcnRWYWx1ZUF0KHZhbHVlLCAxKTtcbiAgICAgKiBgYGBcbiAgICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIGRlZmluaXRpb24gdGhhdCB3aWxsIGJlIGFkZGVkLlxuICAgICAqIEBwYXJhbSBpbmRleCBUaGUgaW5kZXggaW4gdGhlIGNvbGxlY3Rpb24gYXQgd2hpY2ggdG8gYWRkLlxuICAgICAqIFRoaXMgcGFyYW1ldGVyIGlzIG9wdGlvbmFsLiBJZiBub3Qgc2V0IGl0IHdpbGwgYWRkIGl0IHRvIHRoZSBlbmQgb2YgdGhlIGNvbGxlY3Rpb24uXG4gICAgICovXG4gICAgcHVibGljIGluc2VydFZhbHVlQXQodmFsdWU6IElQaXZvdFZhbHVlLCBpbmRleD86IG51bWJlcikge1xuICAgICAgICBpZiAoIXRoaXMucGl2b3RDb25maWd1cmF0aW9uLnZhbHVlcykge1xuICAgICAgICAgICAgdGhpcy5waXZvdENvbmZpZ3VyYXRpb24udmFsdWVzID0gW107XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdmFsdWVzID0gdGhpcy5waXZvdENvbmZpZ3VyYXRpb24udmFsdWVzO1xuICAgICAgICBpZiAoaW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdmFsdWVzLnNwbGljZShpbmRleCwgMCwgdmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFsdWVzLnB1c2godmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0dXBDb2x1bW5zKCk7XG4gICAgICAgIHRoaXMucGlwZVRyaWdnZXIrKztcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB0aGlzLnZhbHVlc0NoYW5nZS5lbWl0KHsgdmFsdWVzIH0pO1xuICAgICAgICB0aGlzLnBpdm90Q29uZmlndXJhdGlvbkNoYW5nZS5lbWl0KHsgcGl2b3RDb25maWd1cmF0aW9uOiB0aGlzLnBpdm90Q29uZmlndXJhdGlvbiB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNb3ZlIHZhbHVlIGZyb20gaXRzIGN1cnJlbnRseSBhdCBzcGVjaWZpZWQgaW5kZXggb3IgYXQgdGhlIGVuZC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuZ3JpZC5tb3ZlVmFsdWUodmFsdWUsIDEpO1xuICAgICAqIGBgYFxuICAgICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdGhhdCB3aWxsIGJlIG1vdmVkLlxuICAgICAqIEBwYXJhbSBpbmRleCBUaGUgaW5kZXggaW4gdGhlIGNvbGxlY3Rpb24gYXQgd2hpY2ggdG8gYWRkLlxuICAgICAqIFRoaXMgcGFyYW1ldGVyIGlzIG9wdGlvbmFsLiBJZiBub3Qgc2V0IGl0IHdpbGwgYWRkIGl0IHRvIHRoZSBlbmQgb2YgdGhlIGNvbGxlY3Rpb24uXG4gICAgICovXG4gICAgcHVibGljIG1vdmVWYWx1ZSh2YWx1ZTogSVBpdm90VmFsdWUsIGluZGV4PzogbnVtYmVyKSB7XG4gICAgICAgIGlmICh0aGlzLnBpdm90Q29uZmlndXJhdGlvbi52YWx1ZXMuaW5kZXhPZih2YWx1ZSkgPT09IC0xKSByZXR1cm47XG4gICAgICAgIC8vIHJlbW92ZSBmcm9tIG9sZCBpbmRleFxuICAgICAgICB0aGlzLnJlbW92ZVZhbHVlKHZhbHVlKTtcbiAgICAgICAgLy8gYWRkIHRvIG5ld1xuICAgICAgICB0aGlzLmluc2VydFZhbHVlQXQodmFsdWUsIGluZGV4KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIHZhbHVlIGZyb20gY29sbGVjdGlvbi5cbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIFRoaXMgaXMgZGlmZmVyZW50IHRoYW4gdG9nZ2xlVmFsdWUgdGhhdCBlbmFibGVkL2Rpc2FibGVzIHRoZSB2YWx1ZS5cbiAgICAgKiBUaGlzIGNvbXBsZXRlbHkgcmVtb3ZlcyB0aGUgc3BlY2lmaWVkIHZhbHVlIGZyb20gdGhlIGNvbGxlY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5ncmlkLnJlbW92ZVZhbHVlKGRpbWVuc2lvbik7XG4gICAgICogYGBgXG4gICAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSB0byBiZSByZW1vdmVkLlxuICAgICAqL1xuICAgIHB1YmxpYyByZW1vdmVWYWx1ZSh2YWx1ZTogSVBpdm90VmFsdWUsKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMucGl2b3RDb25maWd1cmF0aW9uLnZhbHVlcztcbiAgICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gdmFsdWVzLmluZGV4T2YodmFsdWUpO1xuICAgICAgICBpZiAoY3VycmVudEluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgdmFsdWVzLnNwbGljZShjdXJyZW50SW5kZXgsIDEpO1xuICAgICAgICAgICAgdGhpcy5zZXR1cENvbHVtbnMoKTtcbiAgICAgICAgICAgIHRoaXMucGlwZVRyaWdnZXIrKztcbiAgICAgICAgICAgIHRoaXMudmFsdWVzQ2hhbmdlLmVtaXQoeyB2YWx1ZXMgfSk7XG4gICAgICAgICAgICB0aGlzLnBpdm90Q29uZmlndXJhdGlvbkNoYW5nZS5lbWl0KHsgcGl2b3RDb25maWd1cmF0aW9uOiB0aGlzLnBpdm90Q29uZmlndXJhdGlvbiB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRvZ2dsZXMgdGhlIHZhbHVlJ3MgZW5hYmxlZCBzdGF0ZSBvbiBvciBvZmYuXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBUaGUgdmFsdWUgcmVtYWlucyBpbiBpdHMgY3VycmVudCBjb2xsZWN0aW9uLiBUaGlzIGp1c3QgY2hhbmdlcyBpdHMgZW5hYmxlZCBzdGF0ZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLmdyaWQudG9nZ2xlVmFsdWUodmFsdWUpO1xuICAgICAqIGBgYFxuICAgICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gYmUgdG9nZ2xlZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgdG9nZ2xlVmFsdWUodmFsdWU6IElQaXZvdFZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLnBpdm90Q29uZmlndXJhdGlvbi52YWx1ZXMuaW5kZXhPZih2YWx1ZSkgPT09IC0xKSByZXR1cm47XG4gICAgICAgIHZhbHVlLmVuYWJsZWQgPSAhdmFsdWUuZW5hYmxlZDtcbiAgICAgICAgdGhpcy5zZXR1cENvbHVtbnMoKTtcbiAgICAgICAgdGhpcy5waXBlVHJpZ2dlcisrO1xuICAgICAgICB0aGlzLnZhbHVlc0NoYW5nZS5lbWl0KHsgdmFsdWVzOiB0aGlzLnBpdm90Q29uZmlndXJhdGlvbi52YWx1ZXMgfSk7XG4gICAgICAgIHRoaXMucmVmbG93KCk7XG4gICAgICAgIHRoaXMucGl2b3RDb25maWd1cmF0aW9uQ2hhbmdlLmVtaXQoeyBwaXZvdENvbmZpZ3VyYXRpb246IHRoaXMucGl2b3RDb25maWd1cmF0aW9uIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNvcnQgdGhlIGRpbWVuc2lvbiBhbmQgaXRzIGNoaWxkcmVuIGluIHRoZSBwcm92aWRlZCBkaXJlY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5ncmlkLnNvcnREaW1lbnNpb24oZGltZW5zaW9uLCBTb3J0aW5nRGlyZWN0aW9uLkFzYyk7XG4gICAgICogYGBgXG4gICAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSB0byBiZSB0b2dnbGVkLlxuICAgICAqL1xuICAgIHB1YmxpYyBzb3J0RGltZW5zaW9uKGRpbWVuc2lvbjogSVBpdm90RGltZW5zaW9uLCBzb3J0RGlyZWN0aW9uOiBTb3J0aW5nRGlyZWN0aW9uKSB7XG4gICAgICAgIGNvbnN0IGRpbWVuc2lvblR5cGUgPSB0aGlzLmdldERpbWVuc2lvblR5cGUoZGltZW5zaW9uKTtcbiAgICAgICAgZGltZW5zaW9uLnNvcnREaXJlY3Rpb24gPSBzb3J0RGlyZWN0aW9uO1xuICAgICAgICAvLyBhcHBseSBzYW1lIHNvcnQgZGlyZWN0aW9uIHRvIGNoaWxkcmVuLlxuICAgICAgICBsZXQgZGltID0gZGltZW5zaW9uO1xuICAgICAgICB3aGlsZSAoZGltLmNoaWxkTGV2ZWwpIHtcbiAgICAgICAgICAgIGRpbS5jaGlsZExldmVsLnNvcnREaXJlY3Rpb24gPSBkaW1lbnNpb24uc29ydERpcmVjdGlvbjtcbiAgICAgICAgICAgIGRpbSA9IGRpbS5jaGlsZExldmVsO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucGlwZVRyaWdnZXIrKztcbiAgICAgICAgdGhpcy5kaW1lbnNpb25zU29ydGluZ0V4cHJlc3Npb25zQ2hhbmdlLmVtaXQodGhpcy5kaW1lbnNpb25zU29ydGluZ0V4cHJlc3Npb25zKTtcbiAgICAgICAgaWYgKGRpbWVuc2lvblR5cGUgPT09IFBpdm90RGltZW5zaW9uVHlwZS5Db2x1bW4pIHtcbiAgICAgICAgICAgIHRoaXMuc2V0dXBDb2x1bW5zKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB0aGlzLnBpdm90Q29uZmlndXJhdGlvbkNoYW5nZS5lbWl0KHsgcGl2b3RDb25maWd1cmF0aW9uOiB0aGlzLnBpdm90Q29uZmlndXJhdGlvbiB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaWx0ZXJzIGEgc2luZ2xlIGBJUGl2b3REaW1lbnNpb25gLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogcHVibGljIGZpbHRlcigpIHtcbiAgICAgKiAgICAgIGNvbnN0IHNldCA9IG5ldyBTZXQoKTtcbiAgICAgKiAgICAgIHNldC5hZGQoJ1ZhbHVlIDEnKTtcbiAgICAgKiAgICAgIHNldC5hZGQoJ1ZhbHVlIDInKTtcbiAgICAgKiAgICAgIHRoaXMuZ3JpZDEuZmlsdGVyRGltZW5zaW9uKHRoaXMucGl2b3RDb25maWdIaWVyYXJjaHkucm93c1swXSwgc2V0LCBJZ3hTdHJpbmdGaWx0ZXJpbmdPcGVyYW5kLmluc3RhbmNlKCkuY29uZGl0aW9uKCdpbicpKTtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGZpbHRlckRpbWVuc2lvbihkaW1lbnNpb246IElQaXZvdERpbWVuc2lvbiwgdmFsdWU6IGFueSwgY29uZGl0aW9uT3JFeHByZXNzaW9uVHJlZT86IElGaWx0ZXJpbmdPcGVyYXRpb24gfCBJRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlKSB7XG4gICAgICAgIHRoaXMuZmlsdGVyaW5nU2VydmljZS5maWx0ZXIoZGltZW5zaW9uLm1lbWJlck5hbWUsIHZhbHVlLCBjb25kaXRpb25PckV4cHJlc3Npb25UcmVlKTtcbiAgICAgICAgY29uc3QgZGltZW5zaW9uVHlwZSA9IHRoaXMuZ2V0RGltZW5zaW9uVHlwZShkaW1lbnNpb24pO1xuICAgICAgICBpZiAoZGltZW5zaW9uVHlwZSA9PT0gUGl2b3REaW1lbnNpb25UeXBlLkNvbHVtbikge1xuICAgICAgICAgICAgdGhpcy5zZXR1cENvbHVtbnMoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0RGltZW5zaW9uc0J5VHlwZShkaW1lbnNpb246IFBpdm90RGltZW5zaW9uVHlwZSkge1xuICAgICAgICBzd2l0Y2ggKGRpbWVuc2lvbikge1xuICAgICAgICAgICAgY2FzZSBQaXZvdERpbWVuc2lvblR5cGUuUm93OlxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5waXZvdENvbmZpZ3VyYXRpb24ucm93cykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBpdm90Q29uZmlndXJhdGlvbi5yb3dzID0gW107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBpdm90Q29uZmlndXJhdGlvbi5yb3dzO1xuICAgICAgICAgICAgY2FzZSBQaXZvdERpbWVuc2lvblR5cGUuQ29sdW1uOlxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5waXZvdENvbmZpZ3VyYXRpb24uY29sdW1ucykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBpdm90Q29uZmlndXJhdGlvbi5jb2x1bW5zID0gW107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBpdm90Q29uZmlndXJhdGlvbi5jb2x1bW5zO1xuICAgICAgICAgICAgY2FzZSBQaXZvdERpbWVuc2lvblR5cGUuRmlsdGVyOlxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5waXZvdENvbmZpZ3VyYXRpb24uZmlsdGVycykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBpdm90Q29uZmlndXJhdGlvbi5maWx0ZXJzID0gW107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBpdm90Q29uZmlndXJhdGlvbi5maWx0ZXJzO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIHJlc2l6ZVJvd0RpbWVuc2lvblBpeGVscyhkaW1lbnNpb246IElQaXZvdERpbWVuc2lvbiwgbmV3V2lkdGg6IG51bWJlcikge1xuICAgICAgICBjb25zdCBpc1BlcmNlbnRhZ2VXaWR0aCA9IGRpbWVuc2lvbi53aWR0aCAmJiB0eXBlb2YgZGltZW5zaW9uLndpZHRoID09PSAnc3RyaW5nJyAmJiBkaW1lbnNpb24ud2lkdGguaW5kZXhPZignJScpICE9PSAtMTtcbiAgICAgICAgaWYgKGlzUGVyY2VudGFnZVdpZHRoKSB7XG4gICAgICAgICAgICBkaW1lbnNpb24ud2lkdGggPSB0aGlzLnJldmVyc2VEaW1lbnNpb25XaWR0aFRvUGVyY2VudChuZXdXaWR0aCkudG9GaXhlZCgyKSArICclJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRpbWVuc2lvbi53aWR0aCA9IG5ld1dpZHRoICsgJ3B4JztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE5vdGlmeSB0aGUgZ3JpZCB0byByZWZsb3csIHRvIHVwZGF0ZSBpZiBob3Jpem9udGFsIHNjcm9sbGJhciBuZWVkcyB0byBiZSByZW5kZXJlZC9yZW1vdmVkLlxuICAgICAgICB0aGlzLnBpcGVUcmlnZ2VyKys7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKlxuICAgICogQGhpZGRlblxuICAgICogQGludGVybmFsXG4gICAgKi9cbiAgICBwcm90ZWN0ZWQgX3JlbW92ZURpbWVuc2lvbkludGVybmFsKGRpbWVuc2lvbikge1xuICAgICAgICBjb25zdCBwcmV2Q29sbGVjdGlvblR5cGUgPSB0aGlzLmdldERpbWVuc2lvblR5cGUoZGltZW5zaW9uKTtcbiAgICAgICAgaWYgKHByZXZDb2xsZWN0aW9uVHlwZSA9PT0gbnVsbCkgcmV0dXJuO1xuICAgICAgICBjb25zdCBwcmV2Q29sbGVjdGlvbiA9IHRoaXMuZ2V0RGltZW5zaW9uc0J5VHlwZShwcmV2Q29sbGVjdGlvblR5cGUpO1xuICAgICAgICBjb25zdCBjdXJyZW50SW5kZXggPSBwcmV2Q29sbGVjdGlvbi5pbmRleE9mKGRpbWVuc2lvbik7XG4gICAgICAgIHByZXZDb2xsZWN0aW9uLnNwbGljZShjdXJyZW50SW5kZXgsIDEpO1xuICAgICAgICB0aGlzLnBpcGVUcmlnZ2VyKys7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0RGltZW5zaW9uVHlwZShkaW1lbnNpb246IElQaXZvdERpbWVuc2lvbik6IFBpdm90RGltZW5zaW9uVHlwZSB7XG4gICAgICAgIHJldHVybiBQaXZvdFV0aWwuZmxhdHRlbih0aGlzLnBpdm90Q29uZmlndXJhdGlvbi5yb3dzKS5pbmRleE9mKGRpbWVuc2lvbikgIT09IC0xID8gUGl2b3REaW1lbnNpb25UeXBlLlJvdyA6XG4gICAgICAgICAgICBQaXZvdFV0aWwuZmxhdHRlbih0aGlzLnBpdm90Q29uZmlndXJhdGlvbi5jb2x1bW5zKS5pbmRleE9mKGRpbWVuc2lvbikgIT09IC0xID8gUGl2b3REaW1lbnNpb25UeXBlLkNvbHVtbiA6XG4gICAgICAgICAgICAgICAgKCEhdGhpcy5waXZvdENvbmZpZ3VyYXRpb24uZmlsdGVycyAmJiBQaXZvdFV0aWwuZmxhdHRlbih0aGlzLnBpdm90Q29uZmlndXJhdGlvbi5maWx0ZXJzKS5pbmRleE9mKGRpbWVuc2lvbikgIT09IC0xKSA/XG4gICAgICAgICAgICAgICAgICAgIFBpdm90RGltZW5zaW9uVHlwZS5GaWx0ZXIgOiBudWxsO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXRQaXZvdFJvd0hlYWRlQ29udGVudFdpZHRoKGhlYWRlckdyb3VwOiBJZ3hQaXZvdFJvd0hlYWRlckdyb3VwQ29tcG9uZW50KSB7XG4gICAgICAgIGNvbnN0IGhlYWRlclN0eWxlID0gdGhpcy5kb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKGhlYWRlckdyb3VwLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICBjb25zdCBoZWFkZXJQYWRkaW5nID0gcGFyc2VGbG9hdChoZWFkZXJTdHlsZS5wYWRkaW5nTGVmdCkgKyBwYXJzZUZsb2F0KGhlYWRlclN0eWxlLnBhZGRpbmdSaWdodCkgK1xuICAgICAgICAgICAgcGFyc2VGbG9hdChoZWFkZXJTdHlsZS5ib3JkZXJSaWdodFdpZHRoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0SGVhZGVyQ2VsbFdpZHRoKGhlYWRlckdyb3VwLmhlYWRlci5yZWZJbnN0YW5jZS5uYXRpdmVFbGVtZW50KS53aWR0aCArIGhlYWRlclBhZGRpbmc7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldExhcmdlc0NvbnRlbnRXaWR0aChjb250ZW50czogRWxlbWVudFJlZltdKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgbGFyZ2VzdCA9IG5ldyBNYXA8bnVtYmVyLCBudW1iZXI+KCk7XG4gICAgICAgIGlmIChjb250ZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBjZWxsc0NvbnRlbnRXaWR0aHMgPSBbXTtcbiAgICAgICAgICAgIGNvbnRlbnRzLmZvckVhY2goKGVsZW0pID0+IHtcbiAgICAgICAgICAgICAgICBlbGVtIGluc3RhbmNlb2YgSWd4UGl2b3RSb3dIZWFkZXJHcm91cENvbXBvbmVudCA/XG4gICAgICAgICAgICAgICAgICAgIGNlbGxzQ29udGVudFdpZHRocy5wdXNoKHRoaXMuZ2V0UGl2b3RSb3dIZWFkZUNvbnRlbnRXaWR0aChlbGVtKSkgOlxuICAgICAgICAgICAgICAgICAgICBjZWxsc0NvbnRlbnRXaWR0aHMucHVzaCh0aGlzLmdldEhlYWRlckNlbGxXaWR0aChlbGVtLm5hdGl2ZUVsZW1lbnQpLndpZHRoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBjZWxsc0NvbnRlbnRXaWR0aHMuaW5kZXhPZihNYXRoLm1heCguLi5jZWxsc0NvbnRlbnRXaWR0aHMpKTtcbiAgICAgICAgICAgIGNvbnN0IGNlbGxTdHlsZSA9IHRoaXMuZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShjb250ZW50c1tpbmRleF0ubmF0aXZlRWxlbWVudCk7XG4gICAgICAgICAgICBjb25zdCBjZWxsUGFkZGluZyA9IHBhcnNlRmxvYXQoY2VsbFN0eWxlLnBhZGRpbmdMZWZ0KSArIHBhcnNlRmxvYXQoY2VsbFN0eWxlLnBhZGRpbmdSaWdodCkgK1xuICAgICAgICAgICAgICAgIHBhcnNlRmxvYXQoY2VsbFN0eWxlLmJvcmRlckxlZnRXaWR0aCkgKyBwYXJzZUZsb2F0KGNlbGxTdHlsZS5ib3JkZXJSaWdodFdpZHRoKTtcbiAgICAgICAgICAgIGxhcmdlc3Quc2V0KE1hdGgubWF4KC4uLmNlbGxzQ29udGVudFdpZHRocyksIGNlbGxQYWRkaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsYXJnZXN0Q2VsbCA9IE1hdGgubWF4KC4uLkFycmF5LmZyb20obGFyZ2VzdC5rZXlzKCkpKTtcbiAgICAgICAgY29uc3Qgd2lkdGggPSBNYXRoLmNlaWwobGFyZ2VzdENlbGwgKyBsYXJnZXN0LmdldChsYXJnZXN0Q2VsbCkpO1xuXG4gICAgICAgIGlmIChOdW1iZXIuaXNOYU4od2lkdGgpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB3aWR0aCArICdweCc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAqIEBoaWRkZW5cbiAgICAqL1xuICAgIHB1YmxpYyBnZXQgaGFzTXVsdGlwbGVWYWx1ZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlcy5sZW5ndGggPiAxO1xuICAgIH1cblxuICAgIC8qKlxuICAgICogQGhpZGRlblxuICAgICovXG4gICAgcHVibGljIGdldCBleGNlbFN0eWxlRmlsdGVyTWF4SGVpZ2h0KCkge1xuICAgICAgICAvLyBtYXggMTAgcm93cywgcm93IHNpemUgZGVwZW5kcyBvbiBncmlkIHNpemVcbiAgICAgICAgY29uc3QgbWF4SGVpZ2h0ID0gdGhpcy5yZW5kZXJlZFJvd0hlaWdodCAqIDEwO1xuICAgICAgICByZXR1cm4gYCR7bWF4SGVpZ2h0fXB4YDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAqIEBoaWRkZW5cbiAgICAqL1xuICAgIHB1YmxpYyBnZXQgZXhjZWxTdHlsZUZpbHRlck1pbkhlaWdodCgpOiBzdHJpbmcge1xuICAgICAgICAvLyBtaW4gNSByb3dzLCByb3cgc2l6ZSBkZXBlbmRzIG9uIGdyaWQgc2l6ZVxuICAgICAgICBjb25zdCBtaW5IZWlnaHQgPSB0aGlzLnJlbmRlcmVkUm93SGVpZ2h0ICogNTtcbiAgICAgICAgcmV0dXJuIGAke21pbkhlaWdodH1weGA7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHJlc29sdmVUb2dnbGUoZ3JvdXBDb2x1bW46IElneENvbHVtbkNvbXBvbmVudCwgc3RhdGU6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKCFncm91cENvbHVtbikgcmV0dXJuO1xuICAgICAgICBncm91cENvbHVtbi5oaWRkZW4gPSBzdGF0ZTtcbiAgICAgICAgdGhpcy5jb2x1bW5Hcm91cFN0YXRlcy5zZXQoZ3JvdXBDb2x1bW4uZmllbGQsIHN0YXRlKTtcbiAgICAgICAgY29uc3QgY2hpbGRyZW5Ub3RhbCA9IHRoaXMuaGFzTXVsdGlwbGVWYWx1ZXMgP1xuICAgICAgICAgICAgZ3JvdXBDb2x1bW4uY2hpbGRyZW4uZmlsdGVyKHggPT4geC5jb2x1bW5Hcm91cCAmJiB4LmNoaWxkcmVuLmZpbHRlcih5ID0+ICF5LmNvbHVtbkdyb3VwKS5sZW5ndGggPT09IHRoaXMudmFsdWVzLmxlbmd0aCkgOlxuICAgICAgICAgICAgZ3JvdXBDb2x1bW4uY2hpbGRyZW4uZmlsdGVyKHggPT4gIXguY29sdW1uR3JvdXApO1xuICAgICAgICBjb25zdCBjaGlsZHJlblN1Ymdyb3VwcyA9IHRoaXMuaGFzTXVsdGlwbGVWYWx1ZXMgP1xuICAgICAgICAgICAgZ3JvdXBDb2x1bW4uY2hpbGRyZW4uZmlsdGVyKHggPT4geC5jb2x1bW5Hcm91cCAmJiB4LmNoaWxkcmVuLmZpbHRlcih5ID0+ICF5LmNvbHVtbkdyb3VwKS5sZW5ndGggPT09IDApIDpcbiAgICAgICAgICAgIGdyb3VwQ29sdW1uLmNoaWxkcmVuLmZpbHRlcih4ID0+IHguY29sdW1uR3JvdXApO1xuICAgICAgICBjaGlsZHJlblRvdGFsLmZvckVhY2goZ3JvdXAgPT4ge1xuICAgICAgICAgICAgY29uc3QgbmV3U3RhdGUgPSB0aGlzLmNvbHVtbkdyb3VwU3RhdGVzLmdldChncm91cC5maWVsZCkgfHwgc3RhdGU7XG4gICAgICAgICAgICBpZiAobmV3U3RhdGUpIHtcbiAgICAgICAgICAgICAgICBncm91cC5oZWFkZXJUZW1wbGF0ZSA9IHRoaXMuaGVhZGVyVGVtcGxhdGU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGdyb3VwLmhlYWRlclRlbXBsYXRlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFncm91cENvbHVtbi5oaWRkZW4gJiYgY2hpbGRyZW5TdWJncm91cHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY2hpbGRyZW5TdWJncm91cHMuZm9yRWFjaChncm91cCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3U3RhdGUgPSB0aGlzLmNvbHVtbkdyb3VwU3RhdGVzLmdldChncm91cC5maWVsZCkgfHwgc3RhdGU7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNvbHZlVG9nZ2xlKGdyb3VwLCBuZXdTdGF0ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgY2FsY0dyaWRIZWFkUm93KCkge1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBidWlsZERhdGFWaWV3KGRhdGE6IGFueVtdKSB7XG4gICAgICAgIHRoaXMuX2RhdGFWaWV3ID0gZGF0YTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBvdmVycmlkZSBnZXREYXRhQmFzZWRCb2R5SGVpZ2h0KCk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IGR2bCA9IHRoaXMuZGF0YVZpZXc/Lmxlbmd0aCB8fCAwO1xuICAgICAgICByZXR1cm4gZHZsIDwgdGhpcy5fZGVmYXVsdFRhcmdldFJlY29yZE51bWJlciA/IDAgOiB0aGlzLmRlZmF1bHRUYXJnZXRCb2R5SGVpZ2h0O1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBob3Jpem9udGFsU2Nyb2xsSGFuZGxlcihldmVudCkge1xuICAgICAgICBjb25zdCBzY3JvbGxMZWZ0ID0gZXZlbnQudGFyZ2V0LnNjcm9sbExlZnQ7XG4gICAgICAgIHRoaXMudGhlYWRSb3cuaGVhZGVyQ29udGFpbmVycy5mb3JFYWNoKGhlYWRlckZvck9mID0+IHtcbiAgICAgICAgICAgIGhlYWRlckZvck9mLm9uSFNjcm9sbChzY3JvbGxMZWZ0KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHN1cGVyLmhvcml6b250YWxTY3JvbGxIYW5kbGVyKGV2ZW50KTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgdmVydGljYWxTY3JvbGxIYW5kbGVyKGV2ZW50KSB7XG4gICAgICAgIHRoaXMudmVydGljYWxSb3dEaW1TY3JvbGxDb250YWluZXJzLmZvckVhY2goeCA9PiB7XG4gICAgICAgICAgICB4Lm9uU2Nyb2xsKGV2ZW50KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHN1cGVyLnZlcnRpY2FsU2Nyb2xsSGFuZGxlcihldmVudCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByb3RlY3RlZCBvdmVycmlkZSBhdXRvZ2VuZXJhdGVDb2x1bW5zKCkge1xuICAgICAgICBsZXQgY29sdW1ucyA9IFtdO1xuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5ncmlkQVBJLmZpbHRlckRhdGFCeUV4cHJlc3Npb25zKHRoaXMuZmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlKTtcbiAgICAgICAgdGhpcy5kaW1lbnNpb25EYXRhQ29sdW1ucyA9IHRoaXMuZ2VuZXJhdGVEaW1lbnNpb25Db2x1bW5zKCk7XG4gICAgICAgIGNvbnN0IGZsYXR0ZW5lZENvbHVtbnNXaXRoU29ydGluZyA9IFBpdm90VXRpbC5mbGF0dGVuKHRoaXMuY29sdW1uRGltZW5zaW9ucykuZmlsdGVyKGRpbSA9PiBkaW0uc29ydERpcmVjdGlvbik7XG4gICAgICAgIGNvbnN0IGV4cHJlc3Npb25zID0gZmxhdHRlbmVkQ29sdW1uc1dpdGhTb3J0aW5nLmxlbmd0aCA+IDAgPyBQaXZvdFNvcnRVdGlsLmdlbmVyYXRlRGltZW5zaW9uU29ydGluZ0V4cHJlc3Npb25zKGZsYXR0ZW5lZENvbHVtbnNXaXRoU29ydGluZykgOiBbXTtcbiAgICAgICAgbGV0IHNvcnRlZERhdGEgPSBkYXRhO1xuICAgICAgICBpZiAoZXhwcmVzc2lvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgc29ydGVkRGF0YSA9IERhdGFVdGlsLnNvcnQoY2xvbmVBcnJheShkYXRhKSwgZXhwcmVzc2lvbnMsIHRoaXMuc29ydFN0cmF0ZWd5LCB0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgZmllbGRzTWFwO1xuICAgICAgICBpZiAodGhpcy5waXZvdENvbmZpZ3VyYXRpb24uY29sdW1uU3RyYXRlZ3kgJiYgdGhpcy5waXZvdENvbmZpZ3VyYXRpb24uY29sdW1uU3RyYXRlZ3kgaW5zdGFuY2VvZiBOb29wUGl2b3REaW1lbnNpb25zU3RyYXRlZ3kpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkcyA9IHRoaXMuZ2VuZXJhdGVEYXRhRmllbGRzKHNvcnRlZERhdGEpO1xuICAgICAgICAgICAgaWYgKGZpZWxkcy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IHJvd0ZpZWxkcyA9IFBpdm90VXRpbC5mbGF0dGVuKHRoaXMucGl2b3RDb25maWd1cmF0aW9uLnJvd3MpLm1hcCh4ID0+IHgubWVtYmVyTmFtZSk7XG4gICAgICAgICAgICBjb25zdCBrZXlGaWVsZHMgPSBPYmplY3QudmFsdWVzKHRoaXMucGl2b3RLZXlzKTtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkRmllbGRzID0gZmllbGRzLmZpbHRlcih4ID0+IHJvd0ZpZWxkcy5pbmRleE9mKHgpID09PSAtMSAmJiBrZXlGaWVsZHMuaW5kZXhPZih4KSA9PT0gLTEgJiZcbiAgICAgICAgICAgICAgICB4LmluZGV4T2YodGhpcy5waXZvdEtleXMucm93RGltZW5zaW9uU2VwYXJhdG9yICsgdGhpcy5waXZvdEtleXMubGV2ZWwpID09PSAtMSAmJlxuICAgICAgICAgICAgICAgIHguaW5kZXhPZih0aGlzLnBpdm90S2V5cy5yb3dEaW1lbnNpb25TZXBhcmF0b3IgKyB0aGlzLnBpdm90S2V5cy5yZWNvcmRzKSA9PT0gLTEpO1xuICAgICAgICAgICAgZmllbGRzTWFwID0gdGhpcy5nZW5lcmF0ZUZyb21EYXRhKGZpbHRlcmVkRmllbGRzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZpZWxkc01hcCA9IFBpdm90VXRpbC5nZXRGaWVsZHNIaWVyYXJjaHkoXG4gICAgICAgICAgICAgICAgc29ydGVkRGF0YSxcbiAgICAgICAgICAgICAgICB0aGlzLmNvbHVtbkRpbWVuc2lvbnMsXG4gICAgICAgICAgICAgICAgUGl2b3REaW1lbnNpb25UeXBlLkNvbHVtbixcbiAgICAgICAgICAgICAgICB0aGlzLnBpdm90S2V5cyxcbiAgICAgICAgICAgICAgICB0aGlzLnBpdm90VmFsdWVDbG9uZVN0cmF0ZWd5XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNvbHVtbnMgPSB0aGlzLmdlbmVyYXRlQ29sdW1uSGllcmFyY2h5KGZpZWxkc01hcCwgc29ydGVkRGF0YSk7XG4gICAgICAgIHRoaXMuX2F1dG9HZW5lcmF0ZWRDb2xzID0gY29sdW1ucztcbiAgICAgICAgLy8gcmVzZXQgZXhwYW5zaW9uIHN0YXRlcyBpZiBhbnkgYXJlIHN0b3JlZC5cbiAgICAgICAgdGhpcy5jb2x1bW5Hcm91cFN0YXRlcy5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcmltYXJ5Q29sdW1uID0gY29sdW1ucy5maW5kKHggPT4geC5maWVsZCA9PT0ga2V5ICYmIHguaGVhZGVyVGVtcGxhdGUgPT09IHRoaXMuaGVhZGVyVGVtcGxhdGUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwU3VtbWFyeUNvbHVtbiA9IGNvbHVtbnMuZmluZCh4ID0+IHguZmllbGQgPT09IGtleSAmJiB4LmhlYWRlclRlbXBsYXRlICE9PSB0aGlzLmhlYWRlclRlbXBsYXRlKTtcbiAgICAgICAgICAgICAgICB0aGlzLnRvZ2dsZVJvd0dyb3VwKHByaW1hcnlDb2x1bW4sIHZhbHVlKTtcbiAgICAgICAgICAgICAgICBpZiAoZ3JvdXBTdW1tYXJ5Q29sdW1uKSB7XG4gICAgICAgICAgICAgICAgICAgIGdyb3VwU3VtbWFyeUNvbHVtbi5oZWFkZXJUZW1wbGF0ZSA9IHRoaXMuaGVhZGVyVGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnVwZGF0ZUNvbHVtbnMoY29sdW1ucyk7XG4gICAgICAgIHRoaXMucmVmbG93KCk7XG4gICAgICAgIGlmIChkYXRhICYmIGRhdGEubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5zaG91bGRHZW5lcmF0ZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICBwcm90ZWN0ZWQgZ2VuZXJhdGVEaW1lbnNpb25Db2x1bW5zKCk6IElneENvbHVtbkNvbXBvbmVudFtdIHtcbiAgICAgICAgY29uc3QgY29sdW1ucyA9IFtdO1xuICAgICAgICB0aGlzLmFsbERpbWVuc2lvbnMuZm9yRWFjaCgoZGltKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZWYgPSBjcmVhdGVDb21wb25lbnQoSWd4Q29sdW1uQ29tcG9uZW50LCB7IGVudmlyb25tZW50SW5qZWN0b3I6IHRoaXMuZW52SW5qZWN0b3IsIGVsZW1lbnRJbmplY3RvcjogdGhpcy5pbmplY3RvciB9KTtcbiAgICAgICAgICAgIHJlZi5pbnN0YW5jZS5maWVsZCA9IGRpbS5tZW1iZXJOYW1lO1xuICAgICAgICAgICAgcmVmLmluc3RhbmNlLmhlYWRlciA9IGRpbS5kaXNwbGF5TmFtZSB8fCBkaW0ubWVtYmVyTmFtZTtcbiAgICAgICAgICAgIHJlZi5pbnN0YW5jZS5oZWFkZXJUZW1wbGF0ZSA9IHRoaXMucm93RGltZW5zaW9uSGVhZGVyVGVtcGxhdGU7XG4gICAgICAgICAgICByZWYuaW5zdGFuY2UucmVzaXphYmxlID0gdGhpcy5yb3dEaW1lbnNpb25SZXNpemluZztcbiAgICAgICAgICAgIHJlZi5pbnN0YW5jZS5zb3J0YWJsZSA9IGRpbS5zb3J0YWJsZSA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IGRpbS5zb3J0YWJsZTtcbiAgICAgICAgICAgIHJlZi5pbnN0YW5jZS53aWR0aCA9IHRoaXMucm93RGltZW5zaW9uV2lkdGhUb1BpeGVscyhkaW0pICsgJ3B4JztcbiAgICAgICAgICAgIHJlZi5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICBjb2x1bW5zLnB1c2gocmVmLmluc3RhbmNlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBjb2x1bW5zO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBjYWxjdWxhdGVHcmlkU2l6ZXMocmVjYWxjRmVhdHVyZVdpZHRoID0gdHJ1ZSkge1xuICAgICAgICBzdXBlci5jYWxjdWxhdGVHcmlkU2l6ZXMocmVjYWxjRmVhdHVyZVdpZHRoKTtcbiAgICAgICAgaWYgKHRoaXMuaGFzRGltZW5zaW9uc1RvQXV0b3NpemUpIHtcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIHRoaXMuem9uZS5vblN0YWJsZS5waXBlKGZpcnN0KCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5hdXRvU2l6ZURpbWVuc2lvbnNJblZpZXcoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGF1dG9TaXplRGltZW5zaW9uc0luVmlldygpIHtcbiAgICAgICAgaWYgKCF0aGlzLmhhc0RpbWVuc2lvbnNUb0F1dG9zaXplKSByZXR1cm47XG4gICAgICAgIGZvciAoY29uc3QgZGltIG9mIHRoaXMucm93RGltZW5zaW9ucykge1xuICAgICAgICAgICAgaWYgKGRpbS53aWR0aCA9PT0gJ2F1dG8nKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29udGVudFdpZHRocyA9IFtdO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlbGF0ZWREaW1zID0gUGl2b3RVdGlsLmZsYXR0ZW4oW2RpbV0pLm1hcCh4ID0+IHgubWVtYmVyTmFtZSk7XG4gICAgICAgICAgICAgICAgY29uc3QgY29udGVudCA9IHRoaXMucm93RGltZW5zaW9uQ29udGVudENvbGxlY3Rpb24uZmlsdGVyKHggPT4gcmVsYXRlZERpbXMuaW5kZXhPZih4LmRpbWVuc2lvbi5tZW1iZXJOYW1lKSAhPT0gLTEpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGhlYWRlcnMgPSBjb250ZW50Lm1hcCh4ID0+IHguaGVhZGVyR3JvdXBzLnRvQXJyYXkoKSkuZmxhdCgpLm1hcCh4ID0+IHguaGVhZGVyICYmIHguaGVhZGVyLnJlZkluc3RhbmNlKTtcbiAgICAgICAgICAgICAgICBoZWFkZXJzLmZvckVhY2goKGhlYWRlcikgPT4gY29udGVudFdpZHRocy5wdXNoKGhlYWRlcj8ubmF0aXZlRWxlbWVudD8ub2Zmc2V0V2lkdGggfHwgMCkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG1heCA9IE1hdGgubWF4KC4uLmNvbnRlbnRXaWR0aHMpO1xuICAgICAgICAgICAgICAgIGlmIChtYXggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gY2VsbHMgbm90IGluIERPTSB5ZXQuLi5cbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IG1heFNpemUgPSBNYXRoLmNlaWwoTWF0aC5tYXgoLi4uY29udGVudFdpZHRocykpO1xuICAgICAgICAgICAgICAgIGRpbS5hdXRvV2lkdGggPSBtYXhTaXplO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgICAgICBwdWJsaWMgZ2V0IGhhc0RpbWVuc2lvbnNUb0F1dG9zaXplKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucm93RGltZW5zaW9ucy5zb21lKHggPT4geC53aWR0aCA9PT0gJ2F1dG8nICYmICF4LmF1dG9XaWR0aCk7XG4gICAgICAgIH1cblxuICAgIHByb3RlY3RlZCBnZW5lcmF0ZUZyb21EYXRhKGZpZWxkczogc3RyaW5nW10pIHtcbiAgICAgICAgY29uc3Qgc2VwYXJhdG9yID0gdGhpcy5waXZvdEtleXMuY29sdW1uRGltZW5zaW9uU2VwYXJhdG9yO1xuICAgICAgICBjb25zdCBkYXRhQXJyID0gZmllbGRzLm1hcCh4ID0+IHguc3BsaXQoc2VwYXJhdG9yKSkuc29ydCh4ID0+IHgubGVuZ3RoKTtcbiAgICAgICAgY29uc3QgaGllcmFyY2h5ID0gbmV3IE1hcDxzdHJpbmcsIGFueT4oKTtcbiAgICAgICAgY29uc3QgY29sdW1uRGltZW5zaW9ucyA9ICBQaXZvdFV0aWwuZmxhdHRlbih0aGlzLmNvbHVtbkRpbWVuc2lvbnMpO1xuICAgICAgICBkYXRhQXJyLmZvckVhY2goYXJyID0+IHtcbiAgICAgICAgICAgIGxldCBjdXJyZW50SGllcmFyY2h5ID0gaGllcmFyY2h5O1xuICAgICAgICAgICAgY29uc3QgcGF0aCA9IFtdO1xuICAgICAgICAgICAgbGV0IGluZGV4ID0gMDtcbiAgICAgICAgICAgIGZvciAoY29uc3QgdmFsIG9mIGFycikge1xuICAgICAgICAgICAgICAgIHBhdGgucHVzaCh2YWwpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1BhdGggPSBwYXRoLmpvaW4oc2VwYXJhdG9yKTtcbiAgICAgICAgICAgICAgICBsZXQgdGFyZ2V0SGllcmFyY2h5ID0gY3VycmVudEhpZXJhcmNoeS5nZXQobmV3UGF0aCk7XG4gICAgICAgICAgICAgICAgaWYgKCF0YXJnZXRIaWVyYXJjaHkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudENvbHVtbkRpbWVuc2lvbiA9IGNvbHVtbkRpbWVuc2lvbnNbaW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50SGllcmFyY2h5LnNldChuZXdQYXRoLCB7IHZhbHVlOiBuZXdQYXRoLCBleHBhbmRhYmxlOiAhIWN1cnJlbnRDb2x1bW5EaW1lbnNpb24uY2hpbGRMZXZlbCwgY2hpbGRyZW46IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCksIGRpbWVuc2lvbjogY3VycmVudENvbHVtbkRpbWVuc2lvbiB9KTtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0SGllcmFyY2h5ID0gY3VycmVudEhpZXJhcmNoeS5nZXQobmV3UGF0aCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGN1cnJlbnRIaWVyYXJjaHkgPSB0YXJnZXRIaWVyYXJjaHkuY2hpbGRyZW47XG4gICAgICAgICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBoaWVyYXJjaHk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdlbmVyYXRlQ29sdW1uSGllcmFyY2h5KGZpZWxkczogTWFwPHN0cmluZywgYW55PiwgZGF0YSwgcGFyZW50ID0gbnVsbCk6IElneENvbHVtbkNvbXBvbmVudFtdIHtcbiAgICAgICAgbGV0IGNvbHVtbnMgPSBbXTtcbiAgICAgICAgaWYgKGZpZWxkcy5zaXplID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlcy5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlZiA9IGNyZWF0ZUNvbXBvbmVudChJZ3hDb2x1bW5Db21wb25lbnQsIHsgZW52aXJvbm1lbnRJbmplY3RvcjogdGhpcy5lbnZJbmplY3RvciwgZWxlbWVudEluamVjdG9yOiB0aGlzLmluamVjdG9yIH0pO1xuICAgICAgICAgICAgICAgIHJlZi5pbnN0YW5jZS5oZWFkZXIgPSB2YWx1ZS5kaXNwbGF5TmFtZTtcbiAgICAgICAgICAgICAgICByZWYuaW5zdGFuY2UuZmllbGQgPSB2YWx1ZS5tZW1iZXI7XG4gICAgICAgICAgICAgICAgcmVmLmluc3RhbmNlLnBhcmVudCA9IHBhcmVudDtcbiAgICAgICAgICAgICAgICByZWYuaW5zdGFuY2Uuc29ydGFibGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJlZi5pbnN0YW5jZS5kYXRhVHlwZSA9IHZhbHVlLmRhdGFUeXBlIHx8IHRoaXMucmVzb2x2ZURhdGFUeXBlcyhkYXRhWzBdW3ZhbHVlLm1lbWJlcl0pO1xuICAgICAgICAgICAgICAgIHJlZi5pbnN0YW5jZS5mb3JtYXR0ZXIgPSB2YWx1ZS5mb3JtYXR0ZXI7XG4gICAgICAgICAgICAgICAgY29sdW1ucy5wdXNoKHJlZi5pbnN0YW5jZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBjb2x1bW5zO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGN1cnJlbnRGaWVsZHMgPSBmaWVsZHM7XG4gICAgICAgIGN1cnJlbnRGaWVsZHMuZm9yRWFjaCgodmFsdWUpID0+IHtcbiAgICAgICAgICAgIGxldCBzaG91bGRHZW5lcmF0ZSA9IHRydWU7XG4gICAgICAgICAgICBpZiAoZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICBzaG91bGRHZW5lcmF0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNob3VsZEdlbmVyYXRlICYmICh2YWx1ZS5jaGlsZHJlbiA9PSBudWxsIHx8IHZhbHVlLmNoaWxkcmVuLmxlbmd0aCA9PT0gMCB8fCB2YWx1ZS5jaGlsZHJlbi5zaXplID09PSAwKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbCA9IHRoaXMuY3JlYXRlQ29sdW1uRm9yRGltZW5zaW9uKHZhbHVlLCBkYXRhLCBwYXJlbnQsIHRoaXMuaGFzTXVsdGlwbGVWYWx1ZXMpO1xuICAgICAgICAgICAgICAgIGNvbHVtbnMucHVzaChjb2wpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmhhc011bHRpcGxlVmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1lYXN1cmVDaGlsZHJlbiA9IHRoaXMuZ2V0TWVhc3VyZUNoaWxkcmVuKGRhdGEsIGNvbCwgZmFsc2UsIHZhbHVlLmRpbWVuc2lvbi53aWR0aCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbC5jaGlsZHJlbi5yZXNldChtZWFzdXJlQ2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW5zID0gY29sdW1ucy5jb25jYXQobWVhc3VyZUNoaWxkcmVuKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkR2VuZXJhdGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb2wgPSB0aGlzLmNyZWF0ZUNvbHVtbkZvckRpbWVuc2lvbih2YWx1ZSwgZGF0YSwgcGFyZW50LCB0cnVlKTtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUuZXhwYW5kYWJsZSkge1xuICAgICAgICAgICAgICAgICAgICBjb2wuaGVhZGVyVGVtcGxhdGUgPSB0aGlzLmhlYWRlclRlbXBsYXRlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuZ2VuZXJhdGVDb2x1bW5IaWVyYXJjaHkodmFsdWUuY2hpbGRyZW4sIGRhdGEsIGNvbCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRDaGlsZHJlbiA9IGNoaWxkcmVuLmZpbHRlcih4ID0+IHgubGV2ZWwgPT09IGNvbC5sZXZlbCArIDEpO1xuICAgICAgICAgICAgICAgIGNvbHVtbnMucHVzaChjb2wpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmhhc011bHRpcGxlVmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBtZWFzdXJlQ2hpbGRyZW4gPSB0aGlzLmdldE1lYXN1cmVDaGlsZHJlbihkYXRhLCBjb2wsIHRydWUsIHZhbHVlLmRpbWVuc2lvbi53aWR0aCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5lc3RlZENoaWxkcmVuID0gZmlsdGVyZWRDaGlsZHJlbjtcbiAgICAgICAgICAgICAgICAgICAgLy9jb25zdCBhbGxDaGlsZHJlbiA9IGNoaWxkcmVuLmNvbmNhdChtZWFzdXJlQ2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgICAgICBjb2wuY2hpbGRyZW4ucmVzZXQobmVzdGVkQ2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW5zID0gY29sdW1ucy5jb25jYXQoY2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUuZGltZW5zaW9uLmNoaWxkTGV2ZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpYmxpbmcgPSB0aGlzLmNyZWF0ZUNvbHVtbkZvckRpbWVuc2lvbih2YWx1ZSwgZGF0YSwgcGFyZW50LCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbnMucHVzaChzaWJsaW5nKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgbWVhc3VyZUNoaWxkcmVuID0gdGhpcy5nZXRNZWFzdXJlQ2hpbGRyZW4oZGF0YSwgc2libGluZywgZmFsc2UsIHZhbHVlLmRpbWVuc2lvbj8ud2lkdGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2libGluZy5jaGlsZHJlbi5yZXNldChtZWFzdXJlQ2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1ucyA9IGNvbHVtbnMuY29uY2F0KG1lYXN1cmVDaGlsZHJlbik7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbC5jaGlsZHJlbi5yZXNldChmaWx0ZXJlZENoaWxkcmVuKTtcbiAgICAgICAgICAgICAgICAgICAgY29sdW1ucyA9IGNvbHVtbnMuY29uY2F0KGNoaWxkcmVuKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLmRpbWVuc2lvbi5jaGlsZExldmVsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaWJsaW5nID0gdGhpcy5jcmVhdGVDb2x1bW5Gb3JEaW1lbnNpb24odmFsdWUsIGRhdGEsIHBhcmVudCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1ucy5wdXNoKHNpYmxpbmcpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gY29sdW1ucztcbiAgICB9XG5cblxuICAgIHByb3RlY3RlZCBnZW5lcmF0ZUNvbmZpZygpIHtcbiAgICAgICAgaWYgKCF0aGlzLmRhdGEpIHJldHVybjtcblxuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5kYXRhO1xuICAgICAgICBjb25zdCBmaWVsZHMgPSB0aGlzLmdlbmVyYXRlRGF0YUZpZWxkcyhkYXRhKTtcbiAgICAgICAgY29uc3QgY29sdW1uRGltZW5zaW9uczogSVBpdm90RGltZW5zaW9uW10gPSBbXTtcbiAgICAgICAgY29uc3Qgcm93RGltZW5zaW9uczogSVBpdm90RGltZW5zaW9uW10gPSBbXTtcbiAgICAgICAgY29uc3QgdmFsdWVzOiBJUGl2b3RWYWx1ZVtdID0gW107XG4gICAgICAgIGxldCBpc0ZpcnN0RGF0ZSA9IHRydWU7XG4gICAgICAgIGZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGF0YVR5cGUgPSB0aGlzLnJlc29sdmVEYXRhVHlwZXMoZGF0YVswXVtmaWVsZF0pO1xuICAgICAgICAgICAgc3dpdGNoIChkYXRhVHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWU6IElQaXZvdFZhbHVlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbWJlcjogZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheU5hbWU6IGZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiBkYXRhVHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZ2dyZWdhdGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAnc3VtJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdTdW0nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZ2dyZWdhdG9yTmFtZTogXCJTVU1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlZDogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcy5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJkYXRlXCI6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGltZW5zaW9uOiBJUGl2b3REaW1lbnNpb24gPSBuZXcgSWd4UGl2b3REYXRlRGltZW5zaW9uKFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZW1iZXJOYW1lOiBmaWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZWQ6IGlzRmlyc3REYXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGU6IGRhdGFUeXBlXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgcm93RGltZW5zaW9ucy5wdXNoKGRpbWVuc2lvbik7XG4gICAgICAgICAgICAgICAgaXNGaXJzdERhdGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRpbWVuc2lvbjogSVBpdm90RGltZW5zaW9uID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWVtYmVyTmFtZTogZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiBkYXRhVHlwZVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW5EaW1lbnNpb25zLnB1c2goZGltZW5zaW9uKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgY29uZmlnOiBJUGl2b3RDb25maWd1cmF0aW9uID0ge1xuICAgICAgICAgICAgY29sdW1uczogY29sdW1uRGltZW5zaW9ucyxcbiAgICAgICAgICAgIHJvd3M6IHJvd0RpbWVuc2lvbnMsXG4gICAgICAgICAgICB2YWx1ZXM6IHZhbHVlc1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLnBpdm90Q29uZmlndXJhdGlvbiA9IGNvbmZpZztcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgY3JlYXRlQ29sdW1uRm9yRGltZW5zaW9uKHZhbHVlOiBhbnksIGRhdGE6IGFueSwgcGFyZW50OiBDb2x1bW5UeXBlLCBpc0dyb3VwOiBib29sZWFuKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IHZhbHVlLnZhbHVlO1xuICAgICAgICBjb25zdCByZWYgPSBpc0dyb3VwID9cbiAgICAgICAgICAgIGNyZWF0ZUNvbXBvbmVudChJZ3hDb2x1bW5Hcm91cENvbXBvbmVudCwgeyBlbnZpcm9ubWVudEluamVjdG9yOiB0aGlzLmVudkluamVjdG9yLCBlbGVtZW50SW5qZWN0b3I6IHRoaXMuaW5qZWN0b3IgfSkgOlxuICAgICAgICAgICAgY3JlYXRlQ29tcG9uZW50KElneENvbHVtbkNvbXBvbmVudCwgeyBlbnZpcm9ubWVudEluamVjdG9yOiB0aGlzLmVudkluamVjdG9yLCBlbGVtZW50SW5qZWN0b3I6IHRoaXMuaW5qZWN0b3IgfSk7XG4gICAgICAgIHJlZi5pbnN0YW5jZS5oZWFkZXIgPSBwYXJlbnQgIT0gbnVsbCA/IGtleS5zcGxpdChwYXJlbnQuaGVhZGVyICsgdGhpcy5waXZvdEtleXMuY29sdW1uRGltZW5zaW9uU2VwYXJhdG9yKVsxXSA6IGtleTtcbiAgICAgICAgcmVmLmluc3RhbmNlLmZpZWxkID0ga2V5O1xuICAgICAgICByZWYuaW5zdGFuY2UucGFyZW50ID0gcGFyZW50O1xuICAgICAgICBpZiAodmFsdWUuZGltZW5zaW9uLndpZHRoKSB7XG4gICAgICAgICAgICByZWYuaW5zdGFuY2Uud2lkdGggPSB2YWx1ZS5kaW1lbnNpb24ud2lkdGg7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdmFsdWVEZWZpbml0aW9uID0gdGhpcy52YWx1ZXNbMF07XG4gICAgICAgIHJlZi5pbnN0YW5jZS5kYXRhVHlwZSA9IHZhbHVlRGVmaW5pdGlvbj8uZGF0YVR5cGUgfHwgdGhpcy5yZXNvbHZlRGF0YVR5cGVzKGRhdGFbMF1bdmFsdWVEZWZpbml0aW9uPy5tZW1iZXJdKTtcbiAgICAgICAgcmVmLmluc3RhbmNlLmZvcm1hdHRlciA9IHZhbHVlRGVmaW5pdGlvbj8uZm9ybWF0dGVyO1xuICAgICAgICByZWYuaW5zdGFuY2Uuc29ydGFibGUgPSB0cnVlO1xuICAgICAgICByZWYuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICByZXR1cm4gcmVmLmluc3RhbmNlO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCByZXNvbHZlQ29sdW1uRGltZW5zaW9uV2lkdGgoZGltOiBJUGl2b3REaW1lbnNpb24pIHtcbiAgICAgICAgaWYgKGRpbS53aWR0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGRpbS53aWR0aDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5taW5Db2x1bW5XaWR0aCArICdweCc7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldE1lYXN1cmVDaGlsZHJlbihkYXRhLCBwYXJlbnQsIGhpZGRlbiwgcGFyZW50V2lkdGgpIHtcbiAgICAgICAgY29uc3QgY29scyA9IFtdO1xuICAgICAgICBjb25zdCBjb3VudCA9IHRoaXMudmFsdWVzLmxlbmd0aDtcbiAgICAgICAgY29uc3QgY2hpbGRXaWR0aCA9IHBhcnNlSW50KHBhcmVudFdpZHRoLCAxMCkgLyBjb3VudDtcbiAgICAgICAgY29uc3QgaXNQZXJjZW50ID0gcGFyZW50V2lkdGggJiYgcGFyZW50V2lkdGguaW5kZXhPZignJScpICE9PSAtMTtcbiAgICAgICAgY29uc3QgaXNBdXRvID0gcGFyZW50V2lkdGggJiYgcGFyZW50V2lkdGguaW5kZXhPZignYXV0bycpICE9PSAtMTtcbiAgICAgICAgdGhpcy52YWx1ZXMuZm9yRWFjaCh2YWwgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVmID0gY3JlYXRlQ29tcG9uZW50KElneENvbHVtbkNvbXBvbmVudCwgeyBlbnZpcm9ubWVudEluamVjdG9yOiB0aGlzLmVudkluamVjdG9yLCBlbGVtZW50SW5qZWN0b3I6IHRoaXMuaW5qZWN0b3IgfSk7XG4gICAgICAgICAgICByZWYuaW5zdGFuY2UuaGVhZGVyID0gdmFsLmRpc3BsYXlOYW1lIHx8IHZhbC5tZW1iZXI7XG4gICAgICAgICAgICByZWYuaW5zdGFuY2UuZmllbGQgPSBwYXJlbnQuZmllbGQgKyB0aGlzLnBpdm90S2V5cy5jb2x1bW5EaW1lbnNpb25TZXBhcmF0b3IgKyB2YWwubWVtYmVyO1xuICAgICAgICAgICAgcmVmLmluc3RhbmNlLnBhcmVudCA9IHBhcmVudDtcbiAgICAgICAgICAgIGlmIChwYXJlbnRXaWR0aCkge1xuICAgICAgICAgICAgICAgIHJlZi5pbnN0YW5jZS53aWR0aCA9IGlzQXV0byA/ICdhdXRvJyA6IGlzUGVyY2VudCA/IGNoaWxkV2lkdGggKyAnJScgOiBjaGlsZFdpZHRoICsgJ3B4JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlZi5pbnN0YW5jZS5oaWRkZW4gPSBoaWRkZW47XG4gICAgICAgICAgICByZWYuaW5zdGFuY2Uuc29ydGFibGUgPSB0aGlzLl9zb3J0YWJsZUNvbHVtbnM7XG4gICAgICAgICAgICByZWYuaW5zdGFuY2UuZGF0YVR5cGUgPSB2YWwuZGF0YVR5cGUgfHwgdGhpcy5yZXNvbHZlRGF0YVR5cGVzKGRhdGFbMF1bdmFsLm1lbWJlcl0pO1xuICAgICAgICAgICAgcmVmLmluc3RhbmNlLmZvcm1hdHRlciA9IHZhbC5mb3JtYXR0ZXI7XG4gICAgICAgICAgICByZWYuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgY29scy5wdXNoKHJlZi5pbnN0YW5jZSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gY29scztcbiAgICB9XG5cbiAgICAvKipcbiAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgKi9cbiAgICBAVmlld0NoaWxkKCdlbXB0eVBpdm90R3JpZFRlbXBsYXRlJywgeyByZWFkOiBUZW1wbGF0ZVJlZiwgc3RhdGljOiB0cnVlIH0pXG4gICAgcHVibGljIGRlZmF1bHRFbXB0eVBpdm90R3JpZFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqXG4gICAgICogR2V0cy9TZXRzIGEgY3VzdG9tIHRlbXBsYXRlIHdoZW4gcGl2b3QgZ3JpZCBpcyBlbXB0eS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtcGl2b3QtZ3JpZCBbZW1wdHlQaXZvdEdyaWRUZW1wbGF0ZV09XCJteVRlbXBsYXRlXCI+PGlneC1waXZvdC1ncmlkPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGVtcHR5UGl2b3RHcmlkVGVtcGxhdGU6IFRlbXBsYXRlUmVmPHZvaWQ+O1xuXG4gICAgLyoqXG4gICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCB0ZW1wbGF0ZSgpOiBUZW1wbGF0ZVJlZjxhbnk+IHtcbiAgICAgICAgY29uc3QgYWxsRW5hYmxlZERpbWVuc2lvbnMgPSB0aGlzLnJvd0RpbWVuc2lvbnMuY29uY2F0KHRoaXMuY29sdW1uRGltZW5zaW9ucyk7XG4gICAgICAgIGlmIChhbGxFbmFibGVkRGltZW5zaW9ucy5sZW5ndGggPT09IDAgJiYgdGhpcy52YWx1ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAvLyBubyBlbmFibGVkIHZhbHVlcyBhbmQgZGltZW5zaW9uc1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW1wdHlQaXZvdEdyaWRUZW1wbGF0ZSB8fCB0aGlzLmRlZmF1bHRFbXB0eVBpdm90R3JpZFRlbXBsYXRlO1xuICAgICAgICB9XG4gICAgICAgIHN1cGVyLnRlbXBsYXRlO1xuICAgIH1cblxuICAgIHByaXZhdGUgZW1pdEluaXRFdmVudHMocGl2b3RDb25maWc6IElQaXZvdENvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgY29uc3QgZGltZW5zaW9ucyA9IFBpdm90VXRpbC5mbGF0dGVuKHRoaXMuYWxsRGltZW5zaW9ucyk7XG4gICAgICAgIGRpbWVuc2lvbnMuZm9yRWFjaChkaW0gPT4ge1xuICAgICAgICAgICAgdGhpcy5kaW1lbnNpb25Jbml0LmVtaXQoZGltKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IHBpdm90Q29uZmlnPy52YWx1ZXM7XG4gICAgICAgIHZhbHVlcz8uZm9yRWFjaCh2YWwgPT4ge1xuICAgICAgICAgICAgdGhpcy52YWx1ZUluaXQuZW1pdCh2YWwpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcm93RGltZW5zaW9uQnlOYW1lKG1lbWJlck5hbWU6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5yb3dEaW1lbnNpb25zLmZpbmQoKHJvd0RpbSkgPT4gcm93RGltLm1lbWJlck5hbWUgPT09IG1lbWJlck5hbWUpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBjYWxjdWxhdGVSZXNpemVyVG9wKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5waXZvdFVJLnNob3dSb3dIZWFkZXJzID9cbiAgICAgICAgICAgICh0aGlzLnRoZWFkUm93LnBpdm90RmlsdGVyQ29udGFpbmVyPy5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodCB8fCAwKSArICh0aGlzLnRoZWFkUm93LnBpdm90Um93Q29udGFpbmVyPy5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodCB8fCAwKSA6XG4gICAgICAgICAgICB0aGlzLnRoZWFkUm93Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xuICAgIH1cbn1cbiIsIjwhLS0gVG9vbGJhciBhcmVhIC0tPlxuPG5nLWNvbnRlbnQgc2VsZWN0PVwiaWd4LWdyaWQtdG9vbGJhclwiPjwvbmctY29udGVudD5cblxuPCEtLSBHcmlkIHRhYmxlIGhlYWQgcm93IGFyZWEgLS0+XG48aWd4LXBpdm90LWhlYWRlci1yb3cgY2xhc3M9XCJpZ3gtZ3JpZC10aGVhZCBpZ3gtZ3JpZC10aGVhZC0tcGl2b3RcIiB0YWJpbmRleD1cIjBcIlxuICAgIFtncmlkXT1cInRoaXNcIlxuICAgIFtoYXNNUkxdPVwiaGFzQ29sdW1uTGF5b3V0c1wiXG4gICAgW2FjdGl2ZURlc2NlbmRhbnRdPVwiYWN0aXZlRGVzY2VuZGFudFwiXG4gICAgW3dpZHRoXT1cImNhbGNXaWR0aFwiXG4gICAgW3Bpbm5lZENvbHVtbkNvbGxlY3Rpb25dPVwicGlubmVkQ29sdW1uc1wiXG4gICAgW3VucGlubmVkQ29sdW1uQ29sbGVjdGlvbl09XCJ1bnBpbm5lZENvbHVtbnNcIlxuICAgIChrZXlkb3duLm1ldGEuYyk9XCJjb3B5SGFuZGxlcigkZXZlbnQpXCJcbiAgICAoa2V5ZG93bi5jb250cm9sLmMpPVwiY29weUhhbmRsZXIoJGV2ZW50KVwiXG4gICAgKGNvcHkpPVwiY29weUhhbmRsZXIoJGV2ZW50KVwiXG4gICAgKGtleWRvd24pPVwibmF2aWdhdGlvbi5oZWFkZXJOYXZpZ2F0aW9uKCRldmVudClcIlxuICAgIChzY3JvbGwpPVwicHJldmVudEhlYWRlclNjcm9sbCgkZXZlbnQpXCJcbj5cbjwvaWd4LXBpdm90LWhlYWRlci1yb3c+XG5cbjxkaXYgaWd4R3JpZEJvZHkgKGtleWRvd24uY29udHJvbC5jKT1cImNvcHlIYW5kbGVyKCRldmVudClcIiAoY29weSk9XCJjb3B5SGFuZGxlcigkZXZlbnQpXCIgY2xhc3M9XCJpZ3gtZ3JpZF9fdGJvZHlcIiByb2xlPVwicm93Z3JvdXBcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicm93RGltZW5zaW9ucy5sZW5ndGggPyBkZWZhdWx0Um93RGltZW5zaW9uc1RlbXBsYXRlIDogZW1wdHlSb3dEaW1lbnNpb25zVGVtcGxhdGU7IGNvbnRleHQ6IHRoaXNcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8ZGl2IGNsYXNzPVwiaWd4LWdyaWRfX3Rib2R5LWNvbnRlbnRcIiB0YWJpbmRleD1cIjBcIiBbYXR0ci5yb2xlXT1cImRhdGFWaWV3Lmxlbmd0aCA/IG51bGwgOiAncm93J1wiIChrZXlkb3duKT1cIm5hdmlnYXRpb24uaGFuZGxlTmF2aWdhdGlvbigkZXZlbnQpXCIgKGZvY3VzKT1cIm5hdmlnYXRpb24uZm9jdXNUYm9keSgkZXZlbnQpXCJcbiAgICAgICAgKGRyYWdTdG9wKT1cInNlbGVjdGlvblNlcnZpY2UuZHJhZ01vZGUgPSAkZXZlbnRcIiAoc2Nyb2xsKT1cInByZXZlbnRDb250YWluZXJTY3JvbGwoJGV2ZW50KVwiXG4gICAgICAgIChkcmFnU2Nyb2xsKT1cImRyYWdTY3JvbGwoJGV2ZW50KVwiIFtpZ3hHcmlkRHJhZ1NlbGVjdF09XCJzZWxlY3Rpb25TZXJ2aWNlLmRyYWdNb2RlXCJcbiAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJ0b3RhbEhlaWdodFwiIFtzdHlsZS53aWR0aC5weF09XCJwaXZvdENvbnRlbnRDYWxjV2lkdGggfHwgbnVsbFwiICN0Ym9keSBbYXR0ci5hcmlhLWFjdGl2ZWRlc2NlbmRhbnRdPVwiYWN0aXZlRGVzY2VuZGFudFwiPlxuICAgICAgICA8c3BhbiAqbmdJZj1cImhhc01vdmFibGVDb2x1bW5zICYmIGNvbHVtbkluRHJhZyAmJiBwaW5uZWRDb2x1bW5zLmxlbmd0aCA8PSAwXCJcbiAgICAgICAgICAgIFtpZ3hDb2x1bW5Nb3ZpbmdEcm9wXT1cImhlYWRlckNvbnRhaW5lclwiIFthdHRyLmRyb3BwYWJsZV09XCJ0cnVlXCIgaWQ9XCJsZWZ0XCJcbiAgICAgICAgICAgIGNsYXNzPVwiaWd4LWdyaWRfX3Njcm9sbC1vbi1kcmFnLWxlZnRcIj48L3NwYW4+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwiaGFzTW92YWJsZUNvbHVtbnMgJiYgY29sdW1uSW5EcmFnICYmIHBpbm5lZENvbHVtbnMubGVuZ3RoID4gMFwiXG4gICAgICAgICAgICBbaWd4Q29sdW1uTW92aW5nRHJvcF09XCJoZWFkZXJDb250YWluZXJcIiBbYXR0ci5kcm9wcGFibGVdPVwidHJ1ZVwiIGlkPVwibGVmdFwiXG4gICAgICAgICAgICBjbGFzcz1cImlneC1ncmlkX19zY3JvbGwtb24tZHJhZy1waW5uZWRcIiBbc3R5bGUubGVmdC5weF09XCJwaW5uZWRXaWR0aFwiPjwvc3Bhbj5cbiAgICAgICAgPG5nLXRlbXBsYXRlIGlneEdyaWRGb3IgbGV0LXJvd0RhdGEgW2lneEdyaWRGb3JPZl09XCJkYXRhXG4gICAgICAgIHwgcGl2b3RHcmlkRmlsdGVyOnBpdm90Q29uZmlndXJhdGlvbjpmaWx0ZXJTdHJhdGVneTphZHZhbmNlZEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZTpmaWx0ZXJpbmdQaXBlVHJpZ2dlcjpwaXBlVHJpZ2dlclxuICAgICAgICB8IHBpdm90R3JpZFNvcnQ6cGl2b3RDb25maWd1cmF0aW9uOnNvcnRTdHJhdGVneTpwaXBlVHJpZ2dlclxuICAgICAgICB8IHBpdm90R3JpZFJvdzpwaXZvdENvbmZpZ3VyYXRpb246cGl2b3RWYWx1ZUNsb25lU3RyYXRlZ3k6ZXhwYW5zaW9uU3RhdGVzOnBpcGVUcmlnZ2VyOnNvcnRpbmdFeHByZXNzaW9uc1xuICAgICAgICB8IHBpdm90R3JpZENvbHVtbjpwaXZvdENvbmZpZ3VyYXRpb246cGl2b3RWYWx1ZUNsb25lU3RyYXRlZ3k6ZXhwYW5zaW9uU3RhdGVzOnBpcGVUcmlnZ2VyOnNvcnRpbmdFeHByZXNzaW9uc1xuICAgICAgICB8IHBpdm90R3JpZEF1dG9UcmFuc2Zvcm06cGl2b3RDb25maWd1cmF0aW9uOnBpcGVUcmlnZ2VyXG4gICAgICAgIHwgcGl2b3RHcmlkQ29sdW1uU29ydDpzb3J0aW5nRXhwcmVzc2lvbnM6c29ydFN0cmF0ZWd5OnBpcGVUcmlnZ2VyXG4gICAgICAgIHwgcGl2b3RHcmlkUm93RXhwYW5zaW9uOnBpdm90Q29uZmlndXJhdGlvbjpleHBhbnNpb25TdGF0ZXM6ZGVmYXVsdEV4cGFuZFN0YXRlOnBpcGVUcmlnZ2VyXCJcbiAgICAgICAgICAgIGxldC1yb3dJbmRleD1cImluZGV4XCIgW2lneEZvclNjcm9sbE9yaWVudGF0aW9uXT1cIid2ZXJ0aWNhbCdcIiBbaWd4Rm9yU2Nyb2xsQ29udGFpbmVyXT1cInZlcnRpY2FsU2Nyb2xsXCJcbiAgICAgICAgICAgIFtpZ3hGb3JDb250YWluZXJTaXplXT1cImNhbGNIZWlnaHRcIlxuICAgICAgICAgICAgW2lneEZvckl0ZW1TaXplXT1cImhhc0NvbHVtbkxheW91dHMgPyByb3dIZWlnaHQgKiBtdWx0aVJvd0xheW91dFJvd1NpemUgKyAxIDogcmVuZGVyZWRSb3dIZWlnaHRcIlxuICAgICAgICAgICAgW2lneEdyaWRGb3JPZlZhcmlhYmxlU2l6ZXNdPVwiZmFsc2VcIlxuICAgICAgICAgICAgI3ZlcnRpY2FsU2Nyb2xsQ29udGFpbmVyIChkYXRhQ2hhbmdpbmcpPVwiZGF0YVJlYmluZGluZygkZXZlbnQpXCIgKGRhdGFDaGFuZ2VkKT1cImRhdGFSZWJvdW5kKCRldmVudClcIj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgIFtpZ3hUZW1wbGF0ZU91dGxldF09XCJyZWNvcmRUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgW2lneFRlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJnZXRDb250ZXh0KHJvd0RhdGEsIHJvd0luZGV4KVwiXG4gICAgICAgICAgICAgICAgKGNhY2hlZFZpZXdMb2FkZWQpPVwiY2FjaGVkVmlld0xvYWRlZCgkZXZlbnQpXCI+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8bmctdGVtcGxhdGUgI3JlY29yZF90ZW1wbGF0ZSBsZXQtcm93SW5kZXg9XCJpbmRleFwiIGxldC1yb3dEYXRhPlxuICAgICAgICAgICAgPGlneC1waXZvdC1yb3cgW3N0eWxlLmhlaWdodC5weF09XCJyZW5kZXJlZFJvd0hlaWdodFwiIFtncmlkSURdPVwiaWRcIiBbaW5kZXhdPVwicm93SW5kZXhcIiBbZGF0YV09XCJyb3dEYXRhXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJyb3dDbGFzc2VzIHwgaWd4R3JpZFJvd0NsYXNzZXM6cm93OnJvdy5pbkVkaXRNb2RlOnJvdy5zZWxlY3RlZDpyb3cuZGlydHk6cm93LmRlbGV0ZWQ6cm93LmRyYWdnaW5nOnJvd0luZGV4Omhhc0NvbHVtbkxheW91dHM6ZmFsc2U6cm93RGF0YTpwaXBlVHJpZ2dlclwiXG4gICAgICAgICAgICAgICAgW25nU3R5bGVdPVwicm93U3R5bGVzIHwgaWd4R3JpZFJvd1N0eWxlczpyb3dEYXRhOnJvd0luZGV4OnBpcGVUcmlnZ2VyXCIgI3Jvdz5cbiAgICAgICAgICAgIDwvaWd4LXBpdm90LXJvdz5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGVtcGxhdGU7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiB0aGlzIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPGlnYy10cmlhbC13YXRlcm1hcms+PC9pZ2MtdHJpYWwtd2F0ZXJtYXJrPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgaWd4VG9nZ2xlICNsb2FkaW5nT3ZlcmxheT5cbiAgICAgICAgPGlneC1jaXJjdWxhci1iYXIgW2luZGV0ZXJtaW5hdGVdPVwidHJ1ZVwiICpuZ0lmPVwic2hvdWxkT3ZlcmxheUxvYWRpbmdcIj5cbiAgICAgICAgPC9pZ3gtY2lyY3VsYXItYmFyPlxuICAgIDwvZGl2PlxuICAgIDxzcGFuICpuZ0lmPVwiaGFzTW92YWJsZUNvbHVtbnMgJiYgY29sdW1uSW5EcmFnXCIgW2lneENvbHVtbk1vdmluZ0Ryb3BdPVwiaGVhZGVyQ29udGFpbmVyXCIgW2F0dHIuZHJvcHBhYmxlXT1cInRydWVcIlxuICAgICAgICBpZD1cInJpZ2h0XCIgY2xhc3M9XCJpZ3gtZ3JpZF9fc2Nyb2xsLW9uLWRyYWctcmlnaHRcIj48L3NwYW4+XG4gICAgPGRpdiBbaGlkZGVuXT1cIiFoYXNWZXJ0aWNhbFNjcm9sbCgpXCIgY2xhc3M9XCJpZ3gtZ3JpZF9fdGJvZHktc2Nyb2xsYmFyXCIgW3N0eWxlLndpZHRoLnB4XT1cInNjcm9sbFNpemVcIiAocG9pbnRlcmRvd24pPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlneC1ncmlkX190Ym9keS1zY3JvbGxiYXItc3RhcnRcIiBbc3R5bGUuaGVpZ2h0LnB4XT1cIiBpc1Jvd1Bpbm5pbmdUb1RvcCA/IHBpbm5lZFJvd0hlaWdodCA6IDBcIj48L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlneC1ncmlkX190Ym9keS1zY3JvbGxiYXItbWFpblwiIFtzdHlsZS5oZWlnaHQucHhdPVwiY2FsY0hlaWdodFwiPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGlneEdyaWRGb3IgW2lneEdyaWRGb3JPZl09XCJbXVwiICN2ZXJ0aWNhbFNjcm9sbEhvbGRlcj48L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlneC1ncmlkX190Ym9keS1zY3JvbGxiYXItZW5kXCIgW3N0eWxlLmhlaWdodC5weF09XCIhaXNSb3dQaW5uaW5nVG9Ub3AgPyBwaW5uZWRSb3dIZWlnaHQgOiAwXCI+PC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiaWd4LWdyaWRfX2FkZHJvdy1zbmFja2JhclwiPlxuICAgICAgICA8aWd4LXNuYWNrYmFyICNhZGRSb3dTbmFja2JhciBbb3V0bGV0XT1cImlneEJvZHlPdmVybGF5T3V0bGV0XCIgW2FjdGlvblRleHRdPVwicmVzb3VyY2VTdHJpbmdzLmlneF9ncmlkX3NuYWNrYmFyX2FkZHJvd19hY3Rpb250ZXh0XCIgW2Rpc3BsYXlUaW1lXT1cInNuYWNrYmFyRGlzcGxheVRpbWVcIj57e3Jlc291cmNlU3RyaW5ncy5pZ3hfZ3JpZF9zbmFja2Jhcl9hZGRyb3dfbGFiZWx9fTwvaWd4LXNuYWNrYmFyPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiAjaWd4Qm9keU92ZXJsYXlPdXRsZXQ9XCJvdmVybGF5LW91dGxldFwiIGlneE92ZXJsYXlPdXRsZXQ+PC9kaXY+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cImlneC1ncmlkX19zY3JvbGxcIiBbc3R5bGUuaGVpZ2h0LnB4XT1cInNjcm9sbFNpemVcIiAjc2NyIFtoaWRkZW5dPVwiaXNIb3Jpem9udGFsU2Nyb2xsSGlkZGVuXCIgKHBvaW50ZXJkb3duKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCI+XG4gICAgPGRpdiBjbGFzcz1cImlneC1ncmlkX19zY3JvbGwtc3RhcnRcIiBbc3R5bGUud2lkdGgucHhdPVwicGl2b3RQaW5uZWRXaWR0aFwiIFtzdHlsZS5taW4td2lkdGgucHhdPVwicGl2b3RQaW5uZWRXaWR0aFwiPjwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJpZ3gtZ3JpZF9fc2Nyb2xsLW1haW5cIiBbc3R5bGUud2lkdGgucHhdPVwicGl2b3RVbnBpbm5lZFdpZHRoXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBpZ3hHcmlkRm9yIFtpZ3hHcmlkRm9yT2ZdPVwiRU1QVFlfREFUQVwiICNzY3JvbGxDb250YWluZXI+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImlneC1ncmlkX19zY3JvbGwtZW5kXCIgW3N0eWxlLndpZHRoLnB4XT1cInBpdm90UGlubmVkV2lkdGhcIiBbc3R5bGUubWluLXdpZHRoLnB4XT1cInBpdm90UGlubmVkV2lkdGhcIiBbaGlkZGVuXT1cInBpdm90UGlubmVkV2lkdGggPT09IDAgfHwgaXNQaW5uaW5nVG9TdGFydFwiPjwvZGl2PlxuPC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJpZ3gtZ3JpZF9fdGZvb3RcIiByb2xlPVwicm93Z3JvdXBcIiAjdGZvb3Q+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cImlneC1ncmlkX19mb290ZXJcIiAjZm9vdGVyPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImlneC1ncmlkLWZvb3RlclwiPjwvbmctY29udGVudD5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI2VtcHR5RmlsdGVyZWRHcmlkPlxuICAgIDxzcGFuIGNsYXNzPVwiaWd4LWdyaWRfX3Rib2R5LW1lc3NhZ2VcIiByb2xlPVwiY2VsbFwiPlxuICAgICAgICA8c3Bhbj57e2VtcHR5RmlsdGVyZWRHcmlkTWVzc2FnZX19PC9zcGFuPlxuICAgIDwvc3Bhbj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdEVtcHR5R3JpZD5cbiAgICA8c3BhbiBjbGFzcz1cImlneC1ncmlkX190Ym9keS1tZXNzYWdlXCIgcm9sZT1cImNlbGxcIj5cbiAgICAgICAgPHNwYW4+e3tlbXB0eUdyaWRNZXNzYWdlfX08L3NwYW4+XG4gICAgPC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNkZWZhdWx0TG9hZGluZ0dyaWQ+XG4gICAgPGRpdiBjbGFzcz1cImlneC1ncmlkX19sb2FkaW5nXCI+XG4gICAgICAgIDxpZ3gtY2lyY3VsYXItYmFyIFtpbmRldGVybWluYXRlXT1cInRydWVcIj5cbiAgICAgICAgPC9pZ3gtY2lyY3VsYXItYmFyPlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbjxpZ3gtcGl2b3QtZ3JpZC1jb2x1bW4tcmVzaXplciBbcmVzdHJpY3RSZXNpemVyVG9wXT1cImNhbGN1bGF0ZVJlc2l6ZXJUb3AoKVwiICpuZ0lmPVwiY29sUmVzaXppbmdTZXJ2aWNlLnNob3dSZXNpemVyXCI+PC9pZ3gtcGl2b3QtZ3JpZC1jb2x1bW4tcmVzaXplcj5cbjxkaXYgY2xhc3M9XCJpZ3gtZ3JpZF9fbG9hZGluZy1vdXRsZXRcIiAjaWd4TG9hZGluZ092ZXJsYXlPdXRsZXQgaWd4T3ZlcmxheU91dGxldD48L2Rpdj5cbjxkaXYgY2xhc3M9XCJpZ3gtZ3JpZF9fb3V0bGV0XCIgI2lneEZpbHRlcmluZ092ZXJsYXlPdXRsZXQgaWd4T3ZlcmxheU91dGxldD48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNoZWFkZXJUZW1wbGF0ZSBsZXQtY29sdW1uPlxuICAgIDxkaXYgY2xhc3M9XCJpZ3gtZ3JpZF9fdHItLWhlYWRlclwiPlxuICAgICAgICA8aWd4LWljb24gW2F0dHIuZHJhZ2dhYmxlXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVDb2x1bW4oY29sdW1uKVwiPlxuICAgICAgICAgICAgICAgICAge3tnZXRDb2x1bW5Hcm91cEV4cGFuZFN0YXRlKGNvbHVtbikgPyBcImNoZXZyb25fcmlnaHRcIiA6IFwiZXhwYW5kX21vcmVcIn19PC9pZ3gtaWNvbj5cbiAgICAgICAge3tjb2x1bW4uaGVhZGVyfX1cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdFJvd0RpbWVuc2lvbnNUZW1wbGF0ZT5cbiAgICA8ZGl2IHRhYmluZGV4PVwiMFwiIFtzdHlsZS5oZWlnaHQucHhdPVwidG90YWxIZWlnaHRcIiAqbmdGb3I9XCJsZXQgZGltIG9mIHJvd0RpbWVuc2lvbnM7IGxldCBkaW1JbmRleCA9IGluZGV4O1wiICNyb3dEaW1lbnNpb25Db250YWluZXIgcm9sZT1cInJvd2dyb3VwXCIgY2xhc3M9XCJpZ3gtZ3JpZF9fdGJvZHktcGl2b3QtZGltZW5zaW9uXCIgKGZvY3VzKT1cIm5hdmlnYXRpb24uZm9jdXNUYm9keSgkZXZlbnQpXCIgKGtleWRvd24pPVwibmF2aWdhdGlvbi5oYW5kbGVOYXZpZ2F0aW9uKCRldmVudClcIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlIGlneEdyaWRGb3IgbGV0LXJvd0RhdGEgW2lneEdyaWRGb3JPZl09XCJkYXRhVmlld1xuICAgICAgICB8IHBpdm90R3JpZENlbGxNZXJnaW5nOnBpdm90Q29uZmlndXJhdGlvbjpkaW06cGlwZVRyaWdnZXJcIlxuICAgICAgICAgICAgICAgICAgICAgbGV0LXJvd0luZGV4PVwiaW5kZXhcIiBbaWd4Rm9yU2Nyb2xsT3JpZW50YXRpb25dPVwiJ3ZlcnRpY2FsJ1wiIFtpZ3hGb3JTY3JvbGxDb250YWluZXJdPVwidmVydGljYWxTY3JvbGxcIlxuICAgICAgICAgICAgICAgICAgICAgW2lneEZvckNvbnRhaW5lclNpemVdPVwiY2FsY0hlaWdodFwiXG4gICAgICAgICAgICAgICAgICAgICBbaWd4Rm9ySXRlbVNpemVdPVwicmVuZGVyZWRSb3dIZWlnaHRcIlxuICAgICAgICAgICAgICAgICAgICAgW2lneEZvclNpemVQcm9wTmFtZV09XCInaGVpZ2h0J1wiXG4gICAgICAgICAgICAgICAgICAgICAjdmVydGljYWxSb3dEaW1TY3JvbGxDb250YWluZXI+XG4gICAgICAgICAgICA8aWd4LXBpdm90LXJvdy1kaW1lbnNpb24tY29udGVudCByb2xlPVwicm93XCIgY2xhc3M9XCJpZ3gtZ3JpZC10aGVhZFwiIFtncmlkXT1cInRoaXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RpbWVuc2lvbl09XCJyb3dEYXRhLmRpbWVuc2lvbnNbZGltSW5kZXhdXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb290RGltZW5zaW9uXT1cImRpbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cInJlbmRlcmVkUm93SGVpZ2h0ICogKHJvd0RhdGEucm93U3BhbiB8fCAxKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm93SW5kZXhdPVwicm93SW5kZXhcIiBbcm93RGF0YV09XCJyb3dEYXRhXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt3aWR0aF09XCJyb3dEaW1lbnNpb25XaWR0aFRvUGl4ZWxzKGRpbSlcIj5cbiAgICAgICAgICAgIDwvaWd4LXBpdm90LXJvdy1kaW1lbnNpb24tY29udGVudD5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2VtcHR5Um93RGltZW5zaW9uc1RlbXBsYXRlPlxuICAgIDxkaXYgdGFiaW5kZXg9XCIwXCIgKm5nSWY9XCJjb2x1bW5EaW1lbnNpb25zLmxlbmd0aCA+IDAgfHwgdmFsdWVzLmxlbmd0aCA+IDBcIiAjcm93RGltZW5zaW9uQ29udGFpbmVyIHJvbGU9XCJyb3dncm91cFwiIGNsYXNzPVwiaWd4LWdyaWRfX3Rib2R5LXBpdm90LWRpbWVuc2lvblwiIChmb2N1cyk9XCJuYXZpZ2F0aW9uLmZvY3VzVGJvZHkoJGV2ZW50KVwiIChrZXlkb3duKT1cIm5hdmlnYXRpb24uaGFuZGxlTmF2aWdhdGlvbigkZXZlbnQpXCI+XG4gICAgICAgIDxpZ3gtcGl2b3Qtcm93LWRpbWVuc2lvbi1jb250ZW50IHJvbGU9XCJyb3dcIiBjbGFzcz1cImlneC1ncmlkLXRoZWFkXCIgW2dyaWRdPVwidGhpc1wiXG4gICAgICAgICAgICBbZGltZW5zaW9uXT1cImVtcHR5Um93RGltZW5zaW9uXCJcbiAgICAgICAgICAgIFtyb290RGltZW5zaW9uXT1cImVtcHR5Um93RGltZW5zaW9uXCJcbiAgICAgICAgICAgIFtyb3dJbmRleF09XCIwXCIgW3Jvd0RhdGFdPVwiZGF0YVZpZXdbMF1cIlxuICAgICAgICAgICAgW3dpZHRoXT1cInJvd0RpbWVuc2lvbldpZHRoVG9QaXhlbHMoZW1wdHlSb3dEaW1lbnNpb24pXCI+XG4gICAgICAgIDwvaWd4LXBpdm90LXJvdy1kaW1lbnNpb24tY29udGVudD5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZW1wdHlQaXZvdEdyaWRUZW1wbGF0ZT5cbiAgICA8c3BhbiBjbGFzcz1cImlneC1ncmlkX190Ym9keS1tZXNzYWdlXCIgcm9sZT1cImNlbGxcIj5cbiAgICAgICAgPHNwYW4+e3tyZXNvdXJjZVN0cmluZ3MuaWd4X2dyaWRfcGl2b3RfZW1wdHlfbWVzc2FnZX19PC9zcGFuPlxuICAgIDwvc3Bhbj5cbjwvbmctdGVtcGxhdGU+XG5cbjxkaXYgW2hpZGRlbl09XCJ0cnVlXCI+XG4gICAgPGlneC1ncmlkLWV4Y2VsLXN0eWxlLWZpbHRlcmluZyBbbWF4SGVpZ2h0XT1cImV4Y2VsU3R5bGVGaWx0ZXJNYXhIZWlnaHRcIiBbbWluSGVpZ2h0XT1cImV4Y2VsU3R5bGVGaWx0ZXJNaW5IZWlnaHRcIj5cbiAgICAgICAgPGRpdiBpZ3hFeGNlbFN0eWxlQ29sdW1uT3BlcmF0aW9ucyBbaGlkZGVuXT1cInRydWVcIj48L2Rpdj5cbiAgICAgICAgPGlneC1leGNlbC1zdHlsZS1maWx0ZXItb3BlcmF0aW9ucz5cbiAgICAgICAgICAgIDxpZ3gtZXhjZWwtc3R5bGUtc2VhcmNoPjwvaWd4LWV4Y2VsLXN0eWxlLXNlYXJjaD5cbiAgICAgICAgPC9pZ3gtZXhjZWwtc3R5bGUtZmlsdGVyLW9wZXJhdGlvbnM+XG4gICAgPC9pZ3gtZ3JpZC1leGNlbC1zdHlsZS1maWx0ZXJpbmc+XG48L2Rpdj5cbiJdfQ==
|