UNPKG

e5core-angular-ui

Version:

e5 Anywhere Angular UI

479 lines 46.5 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import * as tslib_1 from "tslib"; import { Component, EventEmitter, Input, Output, ViewChildren, QueryList, Inject, LOCALE_ID } from '@angular/core'; import { DiariseUnit } from '../../enums/diarise-unit'; import { BehaviorSubject } from 'rxjs'; import { WorkMenuItemFoundationService, WorkItemFoundationService } from 'e5core-angular-services'; import { DatePipe } from '@angular/common'; import { DiariseReasonModel } from '../../models/diarise-reason.model'; var E5coreUiWorkDiariseComponent = /** @class */ (function () { function E5coreUiWorkDiariseComponent(workItemFoundationService, workMenuItemService, locale, datePipe) { this.workItemFoundationService = workItemFoundationService; this.workMenuItemService = workMenuItemService; this.locale = locale; this.datePipe = datePipe; this.dateChange = new EventEmitter(); this.reasonTextChange = new EventEmitter(); this.reasonChange = new EventEmitter(); this.diariseWork = new EventEmitter(); this.timeChange = new EventEmitter(); this.diariseReasonOption = ''; this.showDiariseTime = true; this.showDiariseButton = true; this.showDiariseReasonDropdown = true; } Object.defineProperty(E5coreUiWorkDiariseComponent.prototype, "diariseDate", { get: /** * @return {?} */ function () { return this._diariseDate; }, set: /** * @param {?} value * @return {?} */ function (value) { this._diariseDate = value; }, enumerable: true, configurable: true }); /** * @return {?} */ E5coreUiWorkDiariseComponent.prototype.ngOnInit = /** * @return {?} */ function () { var _this = this; if (typeof this.workItem$ === 'undefined') { console.error('e5core-ui-work-diarise [workItem$] must have a BehaviorSubject<WorkItemModel>'); return; } if (this.displayedTime == null) { /** @type {?} */ var currentTime = this.formatAMPM(new Date()); this.displayedTime = currentTime; } if (this.displayedDate == null) { this.displayedDate = new Date(); } if (typeof this.workItem$ != null) { this.workItem$.subscribe(function (w) { _this.workId = w.workId; if (_this.showDiariseReasonDropdown) { _this.reasons = new Array(); if (_this.workId !== '00000000-0000-0000-0000-000000000000') { _this.GetDiariseReasons(); } } }); } }; /** * @private * @param {?} clickedDiariseOption * @return {?} */ E5coreUiWorkDiariseComponent.prototype.calculateDiariseDate = /** * @private * @param {?} clickedDiariseOption * @return {?} */ function (clickedDiariseOption) { /** @type {?} */ var unit = parseInt(DiariseUnit[clickedDiariseOption.diariseUnit], 10); /** @type {?} */ var increment = parseInt(clickedDiariseOption.value.toString(), 10); this.diariseDate = new Date(); switch (unit) { case DiariseUnit.Tomorrow: { this.diariseDate.setDate(this.diariseDate.getDate() + 1); break; } case DiariseUnit.Days: { this.diariseDate.setDate(this.diariseDate.getDate() + increment); break; } case DiariseUnit.Months: { this.diariseDate.setMonth(this.diariseDate.getMonth() + increment); break; } case DiariseUnit.Weeks: { this.diariseDate.setDate(this.diariseDate.getDate() + increment * 7); break; } case DiariseUnit.Year: { this.diariseDate.setFullYear(this.diariseDate.getFullYear() + increment); break; } } }; /** * @private * @return {?} */ E5coreUiWorkDiariseComponent.prototype.setDatePickerDate = /** * @private * @return {?} */ function () { // for(let datePicker of this.datePickerComponents.toArray()){ // datePicker.displayedDate = this.diariseDate; this.displayedDate = this.diariseDate; }; /** * @private * @param {?} tempDate * @return {?} */ E5coreUiWorkDiariseComponent.prototype.formatAMPM = /** * @private * @param {?} tempDate * @return {?} */ function (tempDate) { /** @type {?} */ var minuteString; /** @type {?} */ var hours = tempDate.getHours(); /** @type {?} */ var minutes = tempDate.getMinutes(); /** @type {?} */ var ampm = hours >= 12 ? 'pm' : 'am'; hours = hours % 12; hours = hours ? hours : 12; // the hour '0' should be '12' minuteString = minutes < 10 ? '0' + minutes.toString() : minutes.toString(); /** @type {?} */ var strTime = hours.toString() + ':' + minuteString + ' ' + ampm; return strTime; }; /** * @param {?} $event * @return {?} */ E5coreUiWorkDiariseComponent.prototype.onDiarisePeriodOptionClick = /** * @param {?} $event * @return {?} */ function ($event) { this.calculateDiariseDate($event.diariseOption); this.setDatePickerDate(); this.diarisePeriodOption = $event.diariseOption; }; /** * @param {?} $event * @return {?} */ E5coreUiWorkDiariseComponent.prototype.onDiariseButtonClick = /** * @param {?} $event * @return {?} */ function ($event) { // ---Working Code------------------------------------------ // let temp = {"AssessmentExplanationcode":"This is a test"}; // let menuData = { // "WorkItemChanges": WorkItemChanges, // "TaskChanges": null, // "AdditionalProperties": { // "result": "ok", // "DiariseReason": this.diariseReasonOption, // "DiariseUntilDate": formattedDiariseUntilDate, // "DiariseUntilHours": diariseHours, // "DiariseUntilMinutes": diariseMinutes // } // } // _let diariseEvent : WorkDiariseEvent = {diariseOption:this.diarisePeriodOption, // diariseUntilDate:diariseUntilDate, diariseUntilHours : diariseHours, // diariseUntilMinutes : diariseMinutes, diariseTextReason : this.diariseReasonTextValue, // diariseReasonOption : this.diariseReasonOption, menuData:menuData, source:"button"} ; // ---Working Code------------------------------------------ this.diariseWorkEvent = this.ConstructWorkDiariseEvent('button'); this.DiariseWorkItem(); }; /** * @param {?} $event * @return {?} */ E5coreUiWorkDiariseComponent.prototype.onDiariseDateChange = /** * @param {?} $event * @return {?} */ function ($event) { this.displayedDate = $event; this.diariseWorkEvent = this.ConstructWorkDiariseEvent('date'); this.dateChange.emit(this.diariseWorkEvent); }; /** * @param {?} $event * @return {?} */ E5coreUiWorkDiariseComponent.prototype.onDiariseReasonTextChange = /** * @param {?} $event * @return {?} */ function ($event) { this.diariseReasonTextValue = $event; this.diariseReasonOption = $event; this.diariseWorkEvent = this.ConstructWorkDiariseEvent('reasonText'); this.reasonTextChange.emit(this.diariseWorkEvent); }; /** * @param {?} $event * @return {?} */ E5coreUiWorkDiariseComponent.prototype.onDiariseReasonChange = /** * @param {?} $event * @return {?} */ function ($event) { this.diariseReasonOption = $event.value; this.diariseWorkEvent = this.ConstructWorkDiariseEvent('reasonDropdown'); this.reasonChange.emit(this.diariseWorkEvent); }; /** * @param {?} time * @return {?} */ E5coreUiWorkDiariseComponent.prototype.onTimeChange = /** * @param {?} time * @return {?} */ function (time) { this.displayedTime = time; /** @type {?} */ var diariseWorkEvent = this.ConstructWorkDiariseEvent('time'); this.timeChange.emit(diariseWorkEvent); }; /** * @return {?} */ E5coreUiWorkDiariseComponent.prototype.GetDiariseReasons = /** * @return {?} */ function () { var _this = this; this.workItemFoundationService.getDiariseReasons(this.workId).subscribe(function (s) { /** @type {?} */ var tempReasons = s.map(function (item) { return new DiariseReasonModel(item); }); _this.reasons = tempReasons; }, function (error) { console.error(error); }); }; /** * @return {?} */ E5coreUiWorkDiariseComponent.prototype.DiariseWorkItem = /** * @return {?} */ function () { var _this = this; this.diariseWorkEvent = this.ConstructWorkDiariseEvent('diariseWorkItem'); /** @type {?} */ var options = { menuItemCode: "diarise" }; this.workMenuItemService.invokeMenuItem(this.workId, -1, this.diariseWorkEvent.menuData, options).subscribe(function (s) { _this.diariseWork.emit(_this.diariseWorkEvent); }, function (error) { console.error(error); }); }; /** * @param {?} eventSource * @return {?} */ E5coreUiWorkDiariseComponent.prototype.ConstructWorkDiariseEvent = /** * @param {?} eventSource * @return {?} */ function (eventSource) { /** @type {?} */ var WorkItemChanges = {}; if (this.diariseReasonPropertyId != null && this.diariseReasonTextValue != null) { WorkItemChanges[this.diariseReasonPropertyId] = this.diariseReasonTextValue; } /** @type {?} */ var diariseUntilTime = this.ConvertTime12to24(this.displayedTime).split(':'); /** @type {?} */ var diariseHours = parseInt(diariseUntilTime[0], 10); /** @type {?} */ var diariseMinutes = parseInt(diariseUntilTime[1], 10); /** @type {?} */ var diariseUntilDate = this.datePipe.transform(this.displayedDate, 'dd/MM/yyyy'); /** @type {?} */ var additionalProperties = { result: 'ok', DiariseReason: this.diariseReasonOption, DiariseUntilDate: diariseUntilDate, DiaiseUntilHours: diariseHours, DiariseUntilMinutes: diariseMinutes }; /** @type {?} */ var menuData = { 'WorkItemChanges': WorkItemChanges, 'TaskChanges': null, 'AdditionalProperties': { 'result': 'ok', 'DiariseReason': this.diariseReasonOption, 'DiariseUntilDate': diariseUntilDate, 'DiariseUntilHours': diariseHours, 'DiariseUntilMinutes': diariseMinutes } }; // let additionalProperties: AdditionalProperties = {result:"ok", DiariseReason:this.diariseReasonOption, // DiariseUntilDate:formattedDiariseUntilDate,DiaiseUntilHours:diariseHours, DiariseUntilMinutes:diariseMinutes}; // let menuData:DiariseMenuDataModel = {WorkItemChanges: WorkItemChanges, TaskChanges : null, // AdditionalProperties:additionalProperties }; /** @type {?} */ var diariseEvent = { diariseOption: this.diarisePeriodOption, diariseUntilDate: diariseUntilDate, diariseUntilHours: diariseHours, diariseUntilMinutes: diariseMinutes, diariseTextReason: this.diariseReasonTextValue, diariseReasonOption: this.diariseReasonOption, menuData: menuData, source: eventSource }; return diariseEvent; }; /** * @param {?} time12h * @return {?} */ E5coreUiWorkDiariseComponent.prototype.ConvertTime12to24 = /** * @param {?} time12h * @return {?} */ function (time12h) { var _a = tslib_1.__read(time12h.split(' '), 2), time = _a[0], modifier = _a[1]; // tslint:disable-next-line:prefer-const var _b = tslib_1.__read(time.split(':'), 2), hours = _b[0], minutes = _b[1]; if (hours === '12') { hours = '00'; } if (modifier.toUpperCase() === 'PM') { hours = parseInt(hours, 10) + 12; } return hours + ':' + minutes; }; E5coreUiWorkDiariseComponent.decorators = [ { type: Component, args: [{ selector: 'e5core-ui-work-diarise', template: "<e5core-ui-work-diarise-material\n [periodOptions]='periodOptions'\n [reasons]='reasons'\n [displayedDate] ='displayedDate'\n [displayedTime] = 'displayedTime'\n [diariseReasonPropertyId] ='diariseReasonPropertyId'\n [diariseReasonPlaceHolder] ='diariseReasonPlaceHolder'\n [diariseReasonTextValue]='diariseReasonTextValue'\n [showDiariseButton]='showDiariseButton'\n [showDiariseTime]='showDiariseTime'\n (diariseWork)='onDiariseButtonClick($event)'\n (reasonTextChange)='onDiariseReasonTextChange($event)'\n (reasonChange)='onDiariseReasonChange($event)'\n (dateChange)='onDiariseDateChange($event)'\n (timeChange)=\"onTimeChange($event)\"\n (periodChange)=\"onDiarisePeriodOptionClick($event)\"\n [showDiariseReasonDropdown]='showDiariseReasonDropdown'\n >\n </e5core-ui-work-diarise-material>" }] } ]; /** @nocollapse */ E5coreUiWorkDiariseComponent.ctorParameters = function () { return [ { type: WorkItemFoundationService }, { type: WorkMenuItemFoundationService }, { type: String, decorators: [{ type: Inject, args: [LOCALE_ID,] }] }, { type: DatePipe } ]; }; E5coreUiWorkDiariseComponent.propDecorators = { workItem$: [{ type: Input }], diariseReasons$: [{ type: Input }], dateChange: [{ type: Output }], reasonTextChange: [{ type: Output }], reasonChange: [{ type: Output }], diariseWork: [{ type: Output }], timeChange: [{ type: Output }], periodOptions: [{ type: Input }], reasons: [{ type: Input }], diariseReasonPropertyId: [{ type: Input }], displayedDate: [{ type: Input }], displayedTime: [{ type: Input }], diariseReasonPlaceHolder: [{ type: Input }], diariseReasonTextValue: [{ type: Input }], diariseReasonOption: [{ type: Input }], showDiariseTime: [{ type: Input }], showDiariseButton: [{ type: Input }], showDiariseReasonDropdown: [{ type: Input }], datePickerComponents: [{ type: ViewChildren, args: ['datepicker',] }] }; return E5coreUiWorkDiariseComponent; }()); export { E5coreUiWorkDiariseComponent }; if (false) { /** @type {?} */ E5coreUiWorkDiariseComponent.prototype.workItem$; /** @type {?} */ E5coreUiWorkDiariseComponent.prototype.diariseReasons$; /** @type {?} */ E5coreUiWorkDiariseComponent.prototype.dateChange; /** @type {?} */ E5coreUiWorkDiariseComponent.prototype.reasonTextChange; /** @type {?} */ E5coreUiWorkDiariseComponent.prototype.reasonChange; /** @type {?} */ E5coreUiWorkDiariseComponent.prototype.diariseWork; /** @type {?} */ E5coreUiWorkDiariseComponent.prototype.timeChange; /** @type {?} */ E5coreUiWorkDiariseComponent.prototype.periodOptions; /** @type {?} */ E5coreUiWorkDiariseComponent.prototype.reasons; /** @type {?} */ E5coreUiWorkDiariseComponent.prototype.diariseReasonPropertyId; /** @type {?} */ E5coreUiWorkDiariseComponent.prototype.displayedDate; /** @type {?} */ E5coreUiWorkDiariseComponent.prototype.displayedTime; /** @type {?} */ E5coreUiWorkDiariseComponent.prototype.diariseReasonPlaceHolder; /** @type {?} */ E5coreUiWorkDiariseComponent.prototype.diariseReasonTextValue; /** @type {?} */ E5coreUiWorkDiariseComponent.prototype.diariseReasonOption; /** @type {?} */ E5coreUiWorkDiariseComponent.prototype.showDiariseTime; /** @type {?} */ E5coreUiWorkDiariseComponent.prototype.showDiariseButton; /** @type {?} */ E5coreUiWorkDiariseComponent.prototype.showDiariseReasonDropdown; /** @type {?} */ E5coreUiWorkDiariseComponent.prototype.workItemModel; /** @type {?} */ E5coreUiWorkDiariseComponent.prototype.workId; /** @type {?} */ E5coreUiWorkDiariseComponent.prototype.diarisePeriodOption; /** @type {?} */ E5coreUiWorkDiariseComponent.prototype.diariseWorkEvent; /** * @type {?} * @private */ E5coreUiWorkDiariseComponent.prototype._diariseDate; /** @type {?} */ E5coreUiWorkDiariseComponent.prototype.datePickerComponents; /** * @type {?} * @private */ E5coreUiWorkDiariseComponent.prototype.workItemFoundationService; /** * @type {?} * @private */ E5coreUiWorkDiariseComponent.prototype.workMenuItemService; /** * @type {?} * @private */ E5coreUiWorkDiariseComponent.prototype.locale; /** * @type {?} * @private */ E5coreUiWorkDiariseComponent.prototype.datePipe; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZTVjb3JlLXVpLXdvcmstZGlhcmlzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9lNWNvcmUtYW5ndWxhci11aS8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL2U1Y29yZS11aS13b3JrLWRpYXJpc2UvZTVjb3JlLXVpLXdvcmstZGlhcmlzZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUkzSCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFdkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV2QyxPQUFPLEVBQUUsNkJBQTZCLEVBQUUseUJBQXlCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNuRyxPQUFPLEVBQWMsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFJdkU7SUF5REksc0NBQ1kseUJBQW9ELEVBQ3BELG1CQUFrRCxFQUMvQixNQUFjLEVBQ2pDLFFBQWtCO1FBSGxCLDhCQUF5QixHQUF6Qix5QkFBeUIsQ0FBMkI7UUFDcEQsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUErQjtRQUMvQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2pDLGFBQVEsR0FBUixRQUFRLENBQVU7UUFwQ3BCLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ3JDLHFCQUFnQixHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDM0MsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ3ZDLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQW9CLENBQUM7UUFDbkQsZUFBVSxHQUFHLElBQUks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Z0JBclNKLFNBQVMsU0FBQztvQkFDUCxRQUFRLEVBQUUsd0JBQXdCO29CQUNsQyxRQUFRLEVBQUUsdWhDQWtCa0M7aUJBQy9DOzs7O2dCQTNCdUMseUJBQXlCO2dCQUF4RCw2QkFBNkI7NkNBa0U3QixNQUFNLFNBQUMsU0FBUztnQkFqRUosUUFBUTs7OzRCQTRCeEIsS0FBSztrQ0FDTCxLQUFLOzZCQUNMLE1BQU07bUNBQ04sTUFBTTsrQkFDTixNQUFNOzhCQUNOLE1BQU07NkJBQ04sTUFBTTtnQ0FFTixLQUFLOzBCQUNMLEtBQUs7MENBQ0wsS0FBSztnQ0FDTCxLQUFLO2dDQUNMLEtBQUs7MkNBQ0wsS0FBSzt5Q0FDTCxLQUFLO3NDQUNMLEtBQUs7a0NBQ0wsS0FBSztvQ0FDTCxLQUFLOzRDQUNMLEtBQUs7dUNBY0wsWUFBWSxTQUFDLFlBQVk7O0lBK085QixtQ0FBQztDQUFBLEFBdFNELElBc1NDO1NBaFJZLDRCQUE0Qjs7O0lBQ3JDLGlEQUFtRDs7SUFDbkQsdURBQStEOztJQUMvRCxrREFBK0M7O0lBQy9DLHdEQUFxRDs7SUFDckQsb0RBQWlEOztJQUNqRCxtREFBNkQ7O0lBQzdELGtEQUErQzs7SUFFL0MscURBQTZDOztJQUM3QywrQ0FBdUM7O0lBQ3ZDLCtEQUF5Qzs7SUFDekMscURBQTZCOztJQUM3QixxREFBK0I7O0lBQy9CLGdFQUEwQzs7SUFDMUMsOERBQXlDOztJQUN6QywyREFBa0M7O0lBQ2xDLHVEQUFnQzs7SUFDaEMseURBQWtDOztJQUNsQyxpRUFBMEM7O0lBRTFDLHFEQUE2Qjs7SUFDN0IsOENBQWU7O0lBQ2YsMkRBQXdDOztJQUN4Qyx3REFBbUM7Ozs7O0lBQ25DLG9EQUEyQjs7SUFRM0IsNERBQ29FOzs7OztJQUVoRSxpRUFBNEQ7Ozs7O0lBQzVELDJEQUEwRDs7Ozs7SUFDMUQsOENBQXlDOzs7OztJQUN6QyxnREFBMEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0LCBWaWV3Q2hpbGRyZW4sIFF1ZXJ5TGlzdCwgSW5qZWN0LCBMT0NBTEVfSUQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEU1Y29yZVVpV29ya0RpYXJpc2VCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnQvZTVjb3JlLXVpLXdvcmstZGlhcmlzZS1iYXNlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEaWFyaXNlT3B0aW9uTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZGlhcmlzZS1vcHRpb24ubW9kZWwnO1xuaW1wb3J0IHsgRGlhcmlzZU9wdGlvbkNsaWNrRXZlbnQgfSBmcm9tICcuLi8uLi9ldmVudHMvZGlhcmlzZS1vcHRpb24tY2xpY2stZXZlbnQnO1xuaW1wb3J0IHsgRGlhcmlzZVVuaXQgfSBmcm9tICcuLi8uLi9lbnVtcy9kaWFyaXNlLXVuaXQnO1xuaW1wb3J0IHsgRTVjb3JlVWlEYXRlcGlja2VyQ29tcG9uZW50IH0gZnJvbSAnLi4vZTVjb3JlLXVpLWRhdGVwaWNrZXIvZTVjb3JlLXVpLWRhdGVwaWNrZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgV29ya0l0ZW1Nb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy93b3JrLWl0ZW0nO1xuaW1wb3J0IHsgV29ya01lbnVJdGVtRm91bmRhdGlvblNlcnZpY2UsIFdvcmtJdGVtRm91bmRhdGlvblNlcnZpY2UgfSBmcm9tICdlNWNvcmUtYW5ndWxhci1zZXJ2aWNlcyc7XG5pbXBvcnQgeyBmb3JtYXREYXRlLCBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBEaWFyaXNlUmVhc29uTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZGlhcmlzZS1yZWFzb24ubW9kZWwnO1xuaW1wb3J0IHsgRGlhcmlzZU1lbnVEYXRhTW9kZWwsIEFkZGl0aW9uYWxQcm9wZXJ0aWVzIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2RpYXJpc2UtbWVudS1kYXRhLW1vZGVsJztcbmltcG9ydCB7IERpYXJpc2VXb3JrRXZlbnQgfSBmcm9tICcuLi8uLi9ldmVudHMvZGlhcmlzZS13b3JrLWV2ZW50JztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdlNWNvcmUtdWktd29yay1kaWFyaXNlJyxcbiAgICB0ZW1wbGF0ZTogYDxlNWNvcmUtdWktd29yay1kaWFyaXNlLW1hdGVyaWFsXG4gICAgICAgICAgICAgICBbcGVyaW9kT3B0aW9uc109J3BlcmlvZE9wdGlvbnMnXG4gICAgICAgICAgICAgICBbcmVhc29uc109J3JlYXNvbnMnXG4gICAgICAgICAgICAgICBbZGlzcGxheWVkRGF0ZV0gPSdkaXNwbGF5ZWREYXRlJ1xuICAgICAgICAgICAgICAgW2Rpc3BsYXllZFRpbWVdID0gJ2Rpc3BsYXllZFRpbWUnXG4gICAgICAgICAgICAgICBbZGlhcmlzZVJlYXNvblByb3BlcnR5SWRdID0nZGlhcmlzZVJlYXNvblByb3BlcnR5SWQnXG4gICAgICAgICAgICAgICBbZGlhcmlzZVJlYXNvblBsYWNlSG9sZGVyXSA9J2RpYXJpc2VSZWFzb25QbGFjZUhvbGRlcidcbiAgICAgICAgICAgICAgIFtkaWFyaXNlUmVhc29uVGV4dFZhbHVlXT0nZGlhcmlzZVJlYXNvblRleHRWYWx1ZSdcbiAgICAgICAgICAgICAgIFtzaG93RGlhcmlzZUJ1dHRvbl09J3Nob3dEaWFyaXNlQnV0dG9uJ1xuICAgICAgICAgICAgICAgW3Nob3dEaWFyaXNlVGltZV09J3Nob3dEaWFyaXNlVGltZSdcbiAgICAgICAgICAgICAgIChkaWFyaXNlV29yayk9J29uRGlhcmlzZUJ1dHRvbkNsaWNrKCRldmVudCknXG4gICAgICAgICAgICAgICAocmVhc29uVGV4dENoYW5nZSk9J29uRGlhcmlzZVJlYXNvblRleHRDaGFuZ2UoJGV2ZW50KSdcbiAgICAgICAgICAgICAgIChyZWFzb25DaGFuZ2UpPSdvbkRpYXJpc2VSZWFzb25DaGFuZ2UoJGV2ZW50KSdcbiAgICAgICAgICAgICAgIChkYXRlQ2hhbmdlKT0nb25EaWFyaXNlRGF0ZUNoYW5nZSgkZXZlbnQpJ1xuICAgICAgICAgICAgICAgKHRpbWVDaGFuZ2UpPVwib25UaW1lQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICAgKHBlcmlvZENoYW5nZSk9XCJvbkRpYXJpc2VQZXJpb2RPcHRpb25DbGljaygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgIFtzaG93RGlhcmlzZVJlYXNvbkRyb3Bkb3duXT0nc2hvd0RpYXJpc2VSZWFzb25Ecm9wZG93bidcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgIDwvZTVjb3JlLXVpLXdvcmstZGlhcmlzZS1tYXRlcmlhbD5gXG59KVxuZXhwb3J0IGNsYXNzIEU1Y29yZVVpV29ya0RpYXJpc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIEBJbnB1dCgpIHdvcmtJdGVtJDogQmVoYXZpb3JTdWJqZWN0PFdvcmtJdGVtTW9kZWw+O1xuICAgIEBJbnB1dCgpIGRpYXJpc2VSZWFzb25zJDogQmVoYXZpb3JTdWJqZWN0PERpYXJpc2VSZWFzb25Nb2RlbD4gO1xuICAgIEBPdXRwdXQoKSBkYXRlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIHJlYXNvblRleHRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgcmVhc29uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIGRpYXJpc2VXb3JrID0gbmV3IEV2ZW50RW1pdHRlcjxEaWFyaXNlV29ya0V2ZW50PigpO1xuICAgIEBPdXRwdXQoKSB0aW1lQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgICBASW5wdXQoKSBwZXJpb2RPcHRpb25zOiBEaWFyaXNlT3B0aW9uTW9kZWxbXTtcbiAgICBASW5wdXQoKSByZWFzb25zOiBEaWFyaXNlUmVhc29uTW9kZWxbXTtcbiAgICBASW5wdXQoKSBkaWFyaXNlUmVhc29uUHJvcGVydHlJZDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGRpc3BsYXllZERhdGU6IERhdGU7XG4gICAgQElucHV0KCkgZGlzcGxheWVkVGltZTogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGRpYXJpc2VSZWFzb25QbGFjZUhvbGRlcjogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGRpYXJpc2VSZWFzb25UZXh0VmFsdWU6IHN0cmluZyA7XG4gICAgQElucHV0KCkgZGlhcmlzZVJlYXNvbk9wdGlvbiA9ICcnO1xuICAgIEBJbnB1dCgpIHNob3dEaWFyaXNlVGltZSA9IHRydWU7XG4gICAgQElucHV0KCkgc2hvd0RpYXJpc2VCdXR0b24gPSB0cnVlO1xuICAgIEBJbnB1dCgpIHNob3dEaWFyaXNlUmVhc29uRHJvcGRvd24gPSB0cnVlO1xuXG4gICAgd29ya0l0ZW1Nb2RlbDogV29ya0l0ZW1Nb2RlbDtcbiAgICB3b3JrSWQ6IHN0cmluZztcbiAgICBkaWFyaXNlUGVyaW9kT3B0aW9uOiBEaWFyaXNlT3B0aW9uTW9kZWw7XG4gICAgZGlhcmlzZVdvcmtFdmVudDogRGlhcmlzZVdvcmtFdmVudDtcbiAgICBwcml2YXRlIF9kaWFyaXNlRGF0ZTogRGF0ZTtcbiAgICBwdWJsaWMgZ2V0IGRpYXJpc2VEYXRlKCk6IERhdGUge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGlhcmlzZURhdGU7XG4gICAgfVxuICAgIHB1YmxpYyBzZXQgZGlhcmlzZURhdGUodmFsdWU6IERhdGUpIHtcbiAgICAgICAgdGhpcy5fZGlhcmlzZURhdGUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBAVmlld0NoaWxkcmVuKCdkYXRlcGlja2VyJylcbiAgICBwdWJsaWMgZGF0ZVBpY2tlckNvbXBvbmVudHM6IFF1ZXJ5TGlzdDxFNWNvcmVVaURhdGVwaWNrZXJDb21wb25lbnQ+O1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHdvcmtJdGVtRm91bmRhdGlvblNlcnZpY2U6IFdvcmtJdGVtRm91bmRhdGlvblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgd29ya01lbnVJdGVtU2VydmljZTogV29ya01lbnVJdGVtRm91bmRhdGlvblNlcnZpY2UsXG4gICAgICAgIEBJbmplY3QoTE9DQUxFX0lEKSBwcml2YXRlIGxvY2FsZTogc3RyaW5nLFxuICAgICAgICBwcml2YXRlIGRhdGVQaXBlOiBEYXRlUGlwZSkge1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuXG4gICAgICAgIGlmwqAgKHR5cGVvZsKgdGhpcy53b3JrSXRlbSTCoD09PcKgJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2U1Y29yZS11aS13b3JrLWRpYXJpc2UgW3dvcmtJdGVtJF0gbXVzdCBoYXZlIGEgQmVoYXZpb3JTdWJqZWN0PFdvcmtJdGVtTW9kZWw+Jyk7XG4gICAgICAgICAgICByZXR1cm7CoDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmRpc3BsYXllZFRpbWUgPT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudFRpbWUgPSB0aGlzLmZvcm1hdEFNUE0obmV3IERhdGUoKSk7XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXllZFRpbWUgPSBjdXJyZW50VGltZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmRpc3BsYXllZERhdGUgPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5kaXNwbGF5ZWREYXRlID0gbmV3IERhdGUoKTtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgaWbCoCAodHlwZW9mwqB0aGlzLndvcmtJdGVtJMKgIT3CoG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMud29ya0l0ZW0kLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgICB3ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53b3JrSWQgPSB3LndvcmtJZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2hvd0RpYXJpc2VSZWFzb25Ecm9wZG93bikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWFzb25zID0gbmV3IEFycmF5PERpYXJpc2VSZWFzb25Nb2RlbD4oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLndvcmtJZCAhPT0gJzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLkdldERpYXJpc2VSZWFzb25zKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApIDtcbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjYWxjdWxhdGVEaWFyaXNlRGF0ZShjbGlja2VkRGlhcmlzZU9wdGlvbjogRGlhcmlzZU9wdGlvbk1vZGVsKTogdm9pZCB7XG5cbiAgICAgICAgY29uc3QgdW5pdCA9IHBhcnNlSW50KERpYXJpc2VVbml0W2NsaWNrZWREaWFyaXNlT3B0aW9uLmRpYXJpc2VVbml0XSwgMTApO1xuICAgICAgICBjb25zdCBpbmNyZW1lbnQgPSBwYXJzZUludChjbGlja2VkRGlhcmlzZU9wdGlvbi52YWx1ZS50b1N0cmluZygpLCAxMCk7XG4gICAgICAgIHRoaXMuZGlhcmlzZURhdGUgPSBuZXcgRGF0ZSgpO1xuICAgICAgICBzd2l0Y2ggKHVuaXQpIHtcbiAgICAgICAgICAgIGNhc2UgRGlhcmlzZVVuaXQuVG9tb3Jyb3c6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYXJpc2VEYXRlLnNldERhdGUodGhpcy5kaWFyaXNlRGF0ZS5nZXREYXRlKCkgKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBEaWFyaXNlVW5pdC5EYXlzOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFyaXNlRGF0ZS5zZXREYXRlKHRoaXMuZGlhcmlzZURhdGUuZ2V0RGF0ZSgpICsgaW5jcmVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBEaWFyaXNlVW5pdC5Nb250aHM6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYXJpc2VEYXRlLnNldE1vbnRoKHRoaXMuZGlhcmlzZURhdGUuZ2V0TW9udGgoKSArIGluY3JlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgRGlhcmlzZVVuaXQuV2Vla3M6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYXJpc2VEYXRlLnNldERhdGUodGhpcy5kaWFyaXNlRGF0ZS5nZXREYXRlKCkgKyBpbmNyZW1lbnQgKiA3KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBEaWFyaXNlVW5pdC5ZZWFyOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFyaXNlRGF0ZS5zZXRGdWxsWWVhcih0aGlzLmRpYXJpc2VEYXRlLmdldEZ1bGxZZWFyKCkgKyBpbmNyZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0RGF0ZVBpY2tlckRhdGUoKSB7XG4gICAgICAgIC8vIGZvcihsZXQgZGF0ZVBpY2tlciBvZiB0aGlzLmRhdGVQaWNrZXJDb21wb25lbnRzLnRvQXJyYXkoKSl7XG4gICAgICAgIC8vICAgZGF0ZVBpY2tlci5kaXNwbGF5ZWREYXRlID0gdGhpcy5kaWFyaXNlRGF0ZTtcbiAgICAgICAgdGhpcy5kaXNwbGF5ZWREYXRlID0gdGhpcy5kaWFyaXNlRGF0ZTtcblxuICAgIH1cblxuICAgIHByaXZhdGUgZm9ybWF0QU1QTSh0ZW1wRGF0ZTogRGF0ZSk6IHN0cmluZyB7XG4gICAgICAgIGxldCBtaW51dGVTdHJpbmc6IHN0cmluZztcbiAgICAgICAgbGV0IGhvdXJzID0gdGVtcERhdGUuZ2V0SG91cnMoKTtcbiAgICAgICAgY29uc3QgbWludXRlcyA9IHRlbXBEYXRlLmdldE1pbnV0ZXMoKTtcbiAgICAgICAgY29uc3QgYW1wbSA9IGhvdXJzID49IDEyID8gJ3BtJyA6ICdhbSc7XG4gICAgICAgIGhvdXJzID0gaG91cnMgJSAxMjtcbiAgICAgICAgaG91cnMgPSBob3VycyA/IGhvdXJzIDogMTI7IC8vIHRoZSBob3VyICcwJyBzaG91bGQgYmUgJzEyJ1xuICAgICAgICBtaW51dGVTdHJpbmcgPSBtaW51dGVzIDwgMTAgPyAnMCcgKyBtaW51dGVzLnRvU3RyaW5nKCkgOiBtaW51dGVzLnRvU3RyaW5nKCk7XG4gICAgICAgIGNvbnN0IHN0clRpbWUgPSBob3Vycy50b1N0cmluZygpICsgJzonICsgbWludXRlU3RyaW5nICsgJyAnICsgYW1wbTtcbiAgICAgICAgcmV0dXJuIHN0clRpbWU7XG4gICAgfVxuXG4gICAgb25EaWFyaXNlUGVyaW9kT3B0aW9uQ2xpY2soJGV2ZW50OiBhbnkpIHtcbiAgICAgICAgdGhpcy5jYWxjdWxhdGVEaWFyaXNlRGF0ZSgkZXZlbnQuZGlhcmlzZU9wdGlvbik7XG4gICAgICAgIHRoaXMuc2V0RGF0ZVBpY2tlckRhdGUoKTtcbiAgICAgICAgdGhpcy5kaWFyaXNlUGVyaW9kT3B0aW9uID0gJGV2ZW50LmRpYXJpc2VPcHRpb247XG4gICAgfVxuXG4gICAgb25EaWFyaXNlQnV0dG9uQ2xpY2soJGV2ZW50OiBEaWFyaXNlV29ya0V2ZW50KSB7XG5cbiAgICAgICAgLy8gIC0tLVdvcmtpbmcgQ29kZS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICAvLyBcdGxldCB0ZW1wID0ge1wiQXNzZXNzbWVudEV4cGxhbmF0aW9uY29kZVwiOlwiVGhpcyBpcyBhIHRlc3RcIn07XG4gICAgICAgIC8vICAgbGV0IG1lbnVEYXRhID0ge1xuICAgICAgICAvLyBcdFwiV29ya0l0ZW1DaGFuZ2VzXCI6IFdvcmtJdGVtQ2hhbmdlcyxcbiAgICAgICAgLy8gXHRcIlRhc2tDaGFuZ2VzXCI6IG51bGwsXG4gICAgICAgIC8vIFx0XCJBZGRpdGlvbmFsUHJvcGVydGllc1wiOiB7XG4gICAgICAgIC8vIFx0XHRcInJlc3VsdFwiOiBcIm9rXCIsXG4gICAgICAgIC8vIFx0XHRcIkRpYXJpc2VSZWFzb25cIjogdGhpcy5kaWFyaXNlUmVhc29uT3B0aW9uLFxuICAgICAgICAvLyBcdFx0XCJEaWFyaXNlVW50aWxEYXRlXCI6IGZvcm1hdHRlZERpYXJpc2VVbnRpbERhdGUsXG4gICAgICAgIC8vIFx0XHRcIkRpYXJpc2VVbnRpbEhvdXJzXCI6IGRpYXJpc2VIb3VycyxcbiAgICAgICAgLy8gXHRcdFwiRGlhcmlzZVVudGlsTWludXRlc1wiOiBkaWFyaXNlTWludXRlc1xuICAgICAgICAvLyBcdH1cbiAgICAgICAgLy8gfVxuICAgICAgICAvLyAgX2xldCBkaWFyaXNlRXZlbnQgOiBXb3JrRGlhcmlzZUV2ZW50ID0ge2RpYXJpc2VPcHRpb246dGhpcy5kaWFyaXNlUGVyaW9kT3B0aW9uLFxuICAgICAgICAvLyAgZGlhcmlzZVVudGlsRGF0ZTpkaWFyaXNlVW50aWxEYXRlLCBkaWFyaXNlVW50aWxIb3VycyA6IGRpYXJpc2VIb3VycyxcbiAgICAgICAgLy8gIGRpYXJpc2VVbnRpbE1pbnV0ZXMgOiBkaWFyaXNlTWludXRlcywgZGlhcmlzZVRleHRSZWFzb24gOiB0aGlzLmRpYXJpc2VSZWFzb25UZXh0VmFsdWUsXG4gICAgICAgIC8vICBkaWFyaXNlUmVhc29uT3B0aW9uIDogdGhpcy5kaWFyaXNlUmVhc29uT3B0aW9uLCBtZW51RGF0YTptZW51RGF0YSwgc291cmNlOlwiYnV0dG9uXCJ9IDtcbiAgICAgICAgLy8gIC0tLVdvcmtpbmcgQ29kZS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gICAgICAgIHRoaXMuZGlhcmlzZVdvcmtFdmVudCA9ICB0aGlzLkNvbnN0cnVjdFdvcmtEaWFyaXNlRXZlbnQoJ2J1dHRvbicpO1xuICAgICAgICB0aGlzLkRpYXJpc2VXb3JrSXRlbSgpO1xuICAgIH1cblxuICAgIG9uRGlhcmlzZURhdGVDaGFuZ2UoJGV2ZW50OiBhbnkpIHtcbiAgICAgICAgdGhpcy5kaXNwbGF5ZWREYXRlID0gJGV2ZW50O1xuICAgICAgICB0aGlzLmRpYXJpc2VXb3JrRXZlbnQgPSAgdGhpcy5Db25zdHJ1Y3RXb3JrRGlhcmlzZUV2ZW50KCdkYXRlJykgO1xuICAgICAgICB0aGlzLmRhdGVDaGFuZ2UuZW1pdCh0aGlzLmRpYXJpc2VXb3JrRXZlbnQpO1xuICAgIH1cblxuICAgIG9uRGlhcmlzZVJlYXNvblRleHRDaGFuZ2UoJGV2ZW50OiBhbnkpIHtcbiAgICAgICAgdGhpcy5kaWFyaXNlUmVhc29uVGV4dFZhbHVlID0gJGV2ZW50O1xuICAgICAgICB0aGlzLmRpYXJpc2VSZWFzb25PcHRpb24gPSAkZXZlbnQ7XG4gICAgICAgIHRoaXMuZGlhcmlzZVdvcmtFdmVudCA9ICB0aGlzLkNvbnN0cnVjdFdvcmtEaWFyaXNlRXZlbnQoJ3JlYXNvblRleHQnKSA7XG4gICAgICAgIHRoaXMucmVhc29uVGV4dENoYW5nZS5lbWl0KHRoaXMuZGlhcmlzZVdvcmtFdmVudCk7XG4gICAgfVxuXG4gICAgb25EaWFyaXNlUmVhc29uQ2hhbmdlKCRldmVudDogYW55KSB7XG4gICAgICAgIHRoaXMuZGlhcmlzZVJlYXNvbk9wdGlvbiA9ICRldmVudC52YWx1ZTtcbiAgICAgICAgdGhpcy5kaWFyaXNlV29ya0V2ZW50ID0gIHRoaXMuQ29uc3RydWN0V29ya0RpYXJpc2VFdmVudCgncmVhc29uRHJvcGRvd24nKSA7XG4gICAgICAgIHRoaXMucmVhc29uQ2hhbmdlLmVtaXQodGhpcy5kaWFyaXNlV29ya0V2ZW50KTtcbiAgICB9XG5cbiAgICBvblRpbWVDaGFuZ2UodGltZTogYW55KSB7XG4gICAgICAgIHRoaXMuZGlzcGxheWVkVGltZSA9IHRpbWU7XG4gICAgICAgIGNvbnN0IGRpYXJpc2VXb3JrRXZlbnQ6IERpYXJpc2VXb3JrRXZlbnQgPSB0aGlzLkNvbnN0cnVjdFdvcmtEaWFyaXNlRXZlbnQoJ3RpbWUnKSA7XG4gICAgICAgIHRoaXMudGltZUNoYW5nZS5lbWl0KGRpYXJpc2VXb3JrRXZlbnQpO1xuICAgIH1cblxuICAgIEdldERpYXJpc2VSZWFzb25zKCk6IHZvaWQge1xuXG4gICAgICAgIHRoaXMud29ya0l0ZW1Gb3VuZGF0aW9uU2VydmljZS5nZXREaWFyaXNlUmVhc29ucyh0aGlzLndvcmtJZCkuc3Vic2NyaWJlKFxuICAgICAgICAgICAgcyA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGVtcFJlYXNvbnM6IGFueSA9IHMubWFwKGl0ZW0gPT4gbmV3IERpYXJpc2VSZWFzb25Nb2RlbChpdGVtKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWFzb25zID0gdGVtcFJlYXNvbnM7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICApIDtcbiAgICB9XG5cbiAgICBwdWJsaWMgRGlhcmlzZVdvcmtJdGVtKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRpYXJpc2VXb3JrRXZlbnQgPSAgdGhpcy5Db25zdHJ1Y3RXb3JrRGlhcmlzZUV2ZW50KCdkaWFyaXNlV29ya0l0ZW0nKTtcbiAgICAgICAgdmFyIG9wdGlvbnMgPSB7bWVudUl0ZW1Db2RlOiBcImRpYXJpc2VcIn07XG4gICAgICAgIHRoaXMud29ya01lbnVJdGVtU2VydmljZS5pbnZva2VNZW51SXRlbSh0aGlzLndvcmtJZCwgLTEsIHRoaXMuZGlhcmlzZVdvcmtFdmVudC5tZW51RGF0YSwgb3B0aW9ucykuc3Vic2NyaWJlKFxuICAgICAgICAgICAgcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlhcmlzZVdvcmsuZW1pdCh0aGlzLmRpYXJpc2VXb3JrRXZlbnQpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKSA7XG4gICAgfVxuXG4gICAgcHVibGljIENvbnN0cnVjdFdvcmtEaWFyaXNlRXZlbnQoZXZlbnRTb3VyY2U6IGFueSk6IERpYXJpc2VXb3JrRXZlbnQge1xuICAgICAgICBjb25zdCBXb3JrSXRlbUNoYW5nZXMgPSB7fTtcbiAgICAgICAgaWYgKHRoaXMuZGlhcmlzZVJlYXNvblByb3BlcnR5SWQgIT0gbnVsbCAmJiB0aGlzLmRpYXJpc2VSZWFzb25UZXh0VmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgV29ya0l0ZW1DaGFuZ2VzW3RoaXMuZGlhcmlzZVJlYXNvblByb3BlcnR5SWRdID0gdGhpcy5kaWFyaXNlUmVhc29uVGV4dFZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGlhcmlzZVVudGlsVGltZSA9IHRoaXMuQ29udmVydFRpbWUxMnRvMjQodGhpcy5kaXNwbGF5ZWRUaW1lKS5zcGxpdCgnOicpO1xuICAgICAgICBjb25zdCBkaWFyaXNlSG91cnMgPSBwYXJzZUludChkaWFyaXNlVW50aWxUaW1lWzBdLCAxMCk7XG4gICAgICAgIGNvbnN0IGRpYXJpc2VNaW51dGVzID0gcGFyc2VJbnQoZGlhcmlzZVVudGlsVGltZVsxXSwgMTApO1xuICAgICAgICBjb25zdCBkaWFyaXNlVW50aWxEYXRlID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0odGhpcy5kaXNwbGF5ZWREYXRlLCAnZGQvTU0veXl5eScpIDtcblxuICAgICAgICBjb25zdCBhZGRpdGlvbmFsUHJvcGVydGllczogQWRkaXRpb25hbFByb3BlcnRpZXMgPSB7XG4gICAgICAgICAgICByZXN1bHQ6ICdvaycsXG4gICAgICAgICAgICBEaWFyaXNlUmVhc29uOiB0aGlzLmRpYXJpc2VSZWFzb25PcHRpb24sXG4gICAgICAgICAgICBEaWFyaXNlVW50aWxEYXRlOiBkaWFyaXNlVW50aWxEYXRlLFxuICAgICAgICAgICAgRGlhaXNlVW50aWxIb3VyczogZGlhcmlzZUhvdXJzLFxuICAgICAgICAgICAgRGlhcmlzZVVudGlsTWludXRlczogZGlhcmlzZU1pbnV0ZXNcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgbWVudURhdGEgPSB7XG4gICAgICAgICAgICAnV29ya0l0ZW1DaGFuZ2VzJzogV29ya0l0ZW1DaGFuZ2VzLFxuICAgICAgICAgICAgJ1Rhc2tDaGFuZ2VzJzogbnVsbCxcbiAgICAgICAgICAgICdBZGRpdGlvbmFsUHJvcGVydGllcyc6IHtcbiAgICAgICAgICAgICAgICAncmVzdWx0JzogJ29rJyxcbiAgICAgICAgICAgICAgICAnRGlhcmlzZVJlYXNvbic6IHRoaXMuZGlhcmlzZVJlYXNvbk9wdGlvbixcbiAgICAgICAgICAgICAgICAnRGlhcmlzZVVudGlsRGF0ZSc6IGRpYXJpc2VVbnRpbERhdGUsXG4gICAgICAgICAgICAgICAgJ0RpYXJpc2VVbnRpbEhvdXJzJzogZGlhcmlzZUhvdXJzLFxuICAgICAgICAgICAgICAgICdEaWFyaXNlVW50aWxNaW51dGVzJzogZGlhcmlzZU1pbnV0ZXNcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSA7XG5cbiAgICAgICAgLy8gbGV0IGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBBZGRpdGlvbmFsUHJvcGVydGllcyA9IHtyZXN1bHQ6XCJva1wiLCBEaWFyaXNlUmVhc29uOnRoaXMuZGlhcmlzZVJlYXNvbk9wdGlvbixcbiAgICAgICAgLy8gIERpYXJpc2VVbnRpbERhdGU6Zm9ybWF0dGVkRGlhcmlzZVVudGlsRGF0ZSxEaWFpc2VVbnRpbEhvdXJzOmRpYXJpc2VIb3VycywgRGlhcmlzZVVudGlsTWludXRlczpkaWFyaXNlTWludXRlc307XG4gICAgICAgIC8vIGxldCBtZW51RGF0YTpEaWFyaXNlTWVudURhdGFNb2RlbCA9IHtXb3JrSXRlbUNoYW5nZXM6IFdvcmtJdGVtQ2hhbmdlcywgVGFza0NoYW5nZXMgOiBudWxsLFxuICAgICAgICAvLyAgQWRkaXRpb25hbFByb3BlcnRpZXM6YWRkaXRpb25hbFByb3BlcnRpZXMgfTtcblxuICAgICAgICBjb25zdCBkaWFyaXNlRXZlbnQ6IERpYXJpc2VXb3JrRXZlbnQgPSB7XG4gICAgICAgICAgICBkaWFyaXNlT3B0aW9uOiB0aGlzLmRpYXJpc2VQZXJpb2RPcHRpb24sXG4gICAgICAgICAgICBkaWFyaXNlVW50aWxEYXRlOiBkaWFyaXNlVW50aWxEYXRlLFxuICAgICAgICAgICAgZGlhcmlzZVVudGlsSG91cnMgOiBkaWFyaXNlSG91cnMsXG4gICAgICAgICAgICBkaWFyaXNlVW50aWxNaW51dGVzIDogZGlhcmlzZU1pbnV0ZXMsXG4gICAgICAgICAgICBkaWFyaXNlVGV4dFJlYXNvbiA6IHRoaXMuZGlhcmlzZVJlYXNvblRleHRWYWx1ZSxcbiAgICAgICAgICAgIGRpYXJpc2VSZWFzb25PcHRpb24gOiB0aGlzLmRpYXJpc2VSZWFzb25PcHRpb24sXG4gICAgICAgICAgICBtZW51RGF0YTogbWVudURhdGEsXG4gICAgICAgICAgICBzb3VyY2U6IGV2ZW50U291cmNlXG4gICAgICAgIH0gO1xuICAgICAgICByZXR1cm4gZGlhcmlzZUV2ZW50O1xuICAgIH1cblxuICAgIENvbnZlcnRUaW1lMTJ0bzI0KHRpbWUxMmgpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBbdGltZSwgbW9kaWZpZXJdID0gdGltZTEyaC5zcGxpdCgnICcpO1xuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6cHJlZmVyLWNvbnN0XG4gICAgICAgIGxldCBbaG91cnMsIG1pbnV0ZXNdID0gdGltZS5zcGxpdCgnOicpO1xuICAgICAgICBpZiAoaG91cnMgPT09ICcxMicpIHtcbiAgICAgICAgICAgIGhvdXJzID0gJzAwJztcbiAgICAgICAgfVxuICAgICAgICBpZiAobW9kaWZpZXIudG9VcHBlckNhc2UoKSA9PT0gJ1BNJykge1xuICAgICAgICAgICAgaG91cnMgPSBwYXJzZUludChob3VycywgMTApICsgMTI7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaG91cnMgKyAnOicgKyBtaW51dGVzO1xuICAgIH1cbn1cbiJdfQ==