@hitsoft/uretim-yonetimi 1.0.37 → 1.0.38
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/components/hit-filling-control/hit-filling-control.component.mjs +6 -3
- package/esm2020/lib/components/hit-filling-receipt-from-production/hit-filling-receipt-from-production.component.mjs +3 -3
- package/esm2020/lib/hit-proxy/hit-filling-control/models.mjs +1 -1
- package/esm2020/lib/hit-proxy/hit-filling-receipt-from-production/hit-filling-receipt-from-production.service.mjs +1 -1
- package/fesm2015/hitsoft-uretim-yonetimi.mjs +7 -4
- package/fesm2015/hitsoft-uretim-yonetimi.mjs.map +1 -1
- package/fesm2020/hitsoft-uretim-yonetimi.mjs +7 -4
- package/fesm2020/hitsoft-uretim-yonetimi.mjs.map +1 -1
- package/lib/components/hit-filling-control/hit-filling-control.component.d.ts +1 -0
- package/lib/hit-proxy/hit-filling-control/models.d.ts +1 -0
- package/lib/hit-proxy/hit-filling-receipt-from-production/hit-filling-receipt-from-production.service.d.ts +1 -0
- package/package.json +1 -1
|
@@ -18,6 +18,7 @@ export class HitFillingControlComponent {
|
|
|
18
18
|
this.isLoading = false;
|
|
19
19
|
this.isSaving = false;
|
|
20
20
|
this.hatBilgisi = '';
|
|
21
|
+
this.ambalajLot = '';
|
|
21
22
|
this.qrCode = '';
|
|
22
23
|
this.lines = [];
|
|
23
24
|
this.isDataLoadedFromDb = false; // DB'den veri mi geldi yoksa yeni mi
|
|
@@ -50,6 +51,7 @@ export class HitFillingControlComponent {
|
|
|
50
51
|
return;
|
|
51
52
|
}
|
|
52
53
|
this.hatBilgisi = response.items.u_Hat;
|
|
54
|
+
this.ambalajLot = response.items.u_TRKAMBALAJLOT;
|
|
53
55
|
this.lines = response.items.lines;
|
|
54
56
|
this.isEmriBarkoduGecerliMi = true;
|
|
55
57
|
// DB'den veri gelip gelmediğini kontrol et (en az bir satırda batchNumber varsa DB'den gelmiştir)
|
|
@@ -258,6 +260,7 @@ export class HitFillingControlComponent {
|
|
|
258
260
|
this.searchBasildiMi = false;
|
|
259
261
|
this.isEmriNo = null;
|
|
260
262
|
this.hatBilgisi = '';
|
|
263
|
+
this.ambalajLot = '';
|
|
261
264
|
this.qrCode = '';
|
|
262
265
|
this.lines = [];
|
|
263
266
|
this.isDataLoadedFromDb = false;
|
|
@@ -341,10 +344,10 @@ export class HitFillingControlComponent {
|
|
|
341
344
|
}
|
|
342
345
|
}
|
|
343
346
|
HitFillingControlComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: HitFillingControlComponent, deps: [{ token: i1.HitFillingControlService }, { token: i2.ConfirmationService }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
|
|
344
|
-
HitFillingControlComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: HitFillingControlComponent, selector: "lib-hit-filling-control", viewQueries: [{ propertyName: "nmbBoxIsEmriNo", first: true, predicate: ["isEmriNoRef"], descendants: true }, { propertyName: "txtBoxQrCode", first: true, predicate: ["qrCodeRef"], descendants: true }, { propertyName: "dataGrid", first: true, predicate: ["gridLines"], descendants: true }], ngImport: i0, template: "<abp-page [breadcrumb]=\"false\">\r\n <abp-page-toolbar-container class=\"col\">\r\n <div class=\"row\">\r\n <h3 class=\"page-title\">\r\n {{ 'UretimYonetimi::FillingControl.Title' | abpLocalization }}\r\n </h3>\r\n </div>\r\n <div class=\"row text-lg-end pt-2\">\r\n <div class=\"col-6\">\r\n <button class=\"btn btn-success btn-sm\" type=\"button\" (click)=\"save()\" [disabled]=\"isSaveButtonDisabled\">\r\n <i class=\"fa fa-save me-1\"></i>\r\n {{ 'UretimYonetimi::FillingControl.Save' | abpLocalization }}\r\n </button>\r\n </div>\r\n <div class=\"col-3\" *ngIf=\"showKazanDegisimiButton\">\r\n <button class=\"btn btn-info btn-sm\" type=\"button\" (click)=\"kazanDegisimi()\">\r\n <i class=\"fa fa-recycle me-1\"></i>\r\n Kazan De\u011Fi\u015Fimi\r\n </button>\r\n </div>\r\n <div class=\"col-3\">\r\n <button class=\"btn btn-warning btn-sm\" type=\"button\" (click)=\"clearAll()\">\r\n <i class=\"fa fa-broom me-1\"></i>\r\n {{ 'UretimYonetimi::FillingControl.Clean' | abpLocalization }}\r\n </button>\r\n </div>\r\n </div>\r\n </abp-page-toolbar-container>\r\n <div class=\"card mt-2\">\r\n <div class=\"card-body\" style=\"height: calc(100vh - 241px); overflow: auto;\">\r\n <div style=\"display: flex; align-items: center;\">\r\n <dx-number-box #isEmriNoRef class=\"me-1\" style=\"width:100%;\"\r\n [label]=\"'UretimYonetimi::FillingControl.WorkOrderNo' | abpLocalization\"\r\n [(value)]=\"isEmriNo\"\r\n (onChange)=\"getProductionOrder()\" \r\n (onEnterKey)=\"getProductionOrder()\"\r\n [disabled]=\"searchBasildiMi || isEmriBarkoduGecerliMi\">\r\n </dx-number-box>\r\n <dx-button style=\"margin-top: 7.5px;\" \r\n icon=\"search\" \r\n type=\"default\" \r\n (onClick)=\"getProductionOrder()\"\r\n [disabled]=\"searchBasildiMi || isEmriBarkoduGecerliMi\">\r\n </dx-button>\r\n </div>\r\n\r\n <div class=\"mt-3\" *ngIf=\"isEmriBarkoduGecerliMi\">\r\n <dx-text-box style=\"width:100%;\" \r\n [label]=\"'UretimYonetimi::FillingControl.LineInfo' | abpLocalization\"\r\n [(value)]=\"hatBilgisi\" \r\n [disabled]=\"true\">\r\n </dx-text-box>\r\n\r\n <div class=\"mt-3\" style=\"display: flex; align-items: center;\">\r\n <dx-text-box #qrCodeRef \r\n style=\"width:100%;\" \r\n class=\"me-1\"\r\n [label]=\"'UretimYonetimi::FillingControl.QRCode' | abpLocalization\"\r\n [(value)]=\"qrCode\"\r\n (onEnterKey)=\"onQrCodeChange()\"\r\n [placeholder]=\"'UretimYonetimi::FillingControl.QRCode.Placeholder' | abpLocalization\">\r\n </dx-text-box>\r\n <dx-button style=\"margin-top: 7.5px;\" icon=\"plus\" type=\"default\" (onClick)=\"onQrCodeChange()\">\r\n </dx-button>\r\n </div>\r\n\r\n <dx-data-grid #gridLines \r\n class=\"mt-3\" \r\n [dataSource]=\"lines\" \r\n [columnAutoWidth]=\"true\"\r\n [showBorders]=\"true\">\r\n <dxi-column dataField=\"itemCode\"\r\n [caption]=\"'UretimYonetimi::FillingControl.ItemCode' | abpLocalization\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"itemName\"\r\n [caption]=\"'UretimYonetimi::FillingControl.ItemName' | abpLocalization\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"isControlled\"\r\n [caption]=\"'UretimYonetimi::FillingControl.IsControlled' | abpLocalization\"\r\n dataType=\"boolean\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"batchNumber\"\r\n [caption]=\"'UretimYonetimi::FillingControl.BatchNumber' | abpLocalization\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n </dx-data-grid>\r\n </div>\r\n </div>\r\n </div>\r\n</abp-page>\r\n", styles: [""], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.PageComponent, selector: "abp-page", inputs: ["title", "toolbar", "breadcrumb"] }, { kind: "component", type: i4.PageToolbarContainerComponent, selector: "abp-page-toolbar-container" }, { kind: "component", type: i5.DxButtonComponent, selector: "dx-button", inputs: ["accessKey", "activeStateEnabled", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "icon", "rtlEnabled", "stylingMode", "tabIndex", "template", "text", "type", "useSubmitBehavior", "validationGroup", "visible", "width"], outputs: ["onClick", "onContentReady", "onDisposing", "onInitialized", "onOptionChanged", "accessKeyChange", "activeStateEnabledChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "iconChange", "rtlEnabledChange", "stylingModeChange", "tabIndexChange", "templateChange", "textChange", "typeChange", "useSubmitBehaviorChange", "validationGroupChange", "visibleChange", "widthChange"] }, { kind: "component", type: i5.DxNumberBoxComponent, selector: "dx-number-box", inputs: ["accessKey", "activeStateEnabled", "buttons", "disabled", "elementAttr", "focusStateEnabled", "format", "height", "hint", "hoverStateEnabled", "inputAttr", "invalidValueMessage", "isValid", "label", "labelMode", "max", "min", "mode", "name", "placeholder", "readOnly", "rtlEnabled", "showClearButton", "showSpinButtons", "step", "stylingMode", "tabIndex", "text", "useLargeSpinButtons", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "valueChangeEvent", "visible", "width"], outputs: ["onChange", "onContentReady", "onCopy", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onKeyDown", "onKeyUp", "onOptionChanged", "onPaste", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "formatChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "invalidValueMessageChange", "isValidChange", "labelChange", "labelModeChange", "maxChange", "minChange", "modeChange", "nameChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "showClearButtonChange", "showSpinButtonsChange", "stepChange", "stylingModeChange", "tabIndexChange", "textChange", "useLargeSpinButtonsChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "component", type: i5.DxTextBoxComponent, selector: "dx-text-box", inputs: ["accessKey", "activeStateEnabled", "buttons", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "inputAttr", "isValid", "label", "labelMode", "mask", "maskChar", "maskInvalidMessage", "maskRules", "maxLength", "mode", "name", "placeholder", "readOnly", "rtlEnabled", "showClearButton", "showMaskMode", "spellcheck", "stylingMode", "tabIndex", "text", "useMaskedValue", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "valueChangeEvent", "visible", "width"], outputs: ["onChange", "onContentReady", "onCopy", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onKeyDown", "onKeyUp", "onOptionChanged", "onPaste", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isValidChange", "labelChange", "labelModeChange", "maskChange", "maskCharChange", "maskInvalidMessageChange", "maskRulesChange", "maxLengthChange", "modeChange", "nameChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "showClearButtonChange", "showMaskModeChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "useMaskedValueChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "component", type: i5.DxDataGridComponent, selector: "dx-data-grid", inputs: ["accessKey", "activeStateEnabled", "allowColumnReordering", "allowColumnResizing", "autoNavigateToFocusedRow", "cacheEnabled", "cellHintEnabled", "columnAutoWidth", "columnChooser", "columnFixing", "columnHidingEnabled", "columnMinWidth", "columnResizingMode", "columns", "columnWidth", "customizeColumns", "dataRowTemplate", "dataSource", "dateSerializationFormat", "disabled", "editing", "elementAttr", "errorRowEnabled", "export", "filterBuilder", "filterBuilderPopup", "filterPanel", "filterRow", "filterSyncEnabled", "filterValue", "focusedColumnIndex", "focusedRowEnabled", "focusedRowIndex", "focusedRowKey", "grouping", "groupPanel", "headerFilter", "height", "highlightChanges", "hint", "hoverStateEnabled", "keyboardNavigation", "keyExpr", "loadPanel", "masterDetail", "noDataText", "pager", "paging", "remoteOperations", "renderAsync", "repaintChangesOnly", "rowAlternationEnabled", "rowDragging", "rowTemplate", "rtlEnabled", "scrolling", "searchPanel", "selectedRowKeys", "selection", "selectionFilter", "showBorders", "showColumnHeaders", "showColumnLines", "showRowLines", "sortByGroupSummaryInfo", "sorting", "stateStoring", "summary", "syncLookupFilterValues", "tabIndex", "toolbar", "twoWayBindingEnabled", "visible", "width", "wordWrapEnabled"], outputs: ["onAdaptiveDetailRowPreparing", "onCellClick", "onCellDblClick", "onCellHoverChanged", "onCellPrepared", "onContentReady", "onContextMenuPreparing", "onDataErrorOccurred", "onDisposing", "onEditCanceled", "onEditCanceling", "onEditingStart", "onEditorPrepared", "onEditorPreparing", "onExporting", "onFocusedCellChanged", "onFocusedCellChanging", "onFocusedRowChanged", "onFocusedRowChanging", "onInitialized", "onInitNewRow", "onKeyDown", "onOptionChanged", "onRowClick", "onRowCollapsed", "onRowCollapsing", "onRowDblClick", "onRowExpanded", "onRowExpanding", "onRowInserted", "onRowInserting", "onRowPrepared", "onRowRemoved", "onRowRemoving", "onRowUpdated", "onRowUpdating", "onRowValidating", "onSaved", "onSaving", "onSelectionChanged", "onToolbarPreparing", "accessKeyChange", "activeStateEnabledChange", "allowColumnReorderingChange", "allowColumnResizingChange", "autoNavigateToFocusedRowChange", "cacheEnabledChange", "cellHintEnabledChange", "columnAutoWidthChange", "columnChooserChange", "columnFixingChange", "columnHidingEnabledChange", "columnMinWidthChange", "columnResizingModeChange", "columnsChange", "columnWidthChange", "customizeColumnsChange", "dataRowTemplateChange", "dataSourceChange", "dateSerializationFormatChange", "disabledChange", "editingChange", "elementAttrChange", "errorRowEnabledChange", "exportChange", "filterBuilderChange", "filterBuilderPopupChange", "filterPanelChange", "filterRowChange", "filterSyncEnabledChange", "filterValueChange", "focusedColumnIndexChange", "focusedRowEnabledChange", "focusedRowIndexChange", "focusedRowKeyChange", "groupingChange", "groupPanelChange", "headerFilterChange", "heightChange", "highlightChangesChange", "hintChange", "hoverStateEnabledChange", "keyboardNavigationChange", "keyExprChange", "loadPanelChange", "masterDetailChange", "noDataTextChange", "pagerChange", "pagingChange", "remoteOperationsChange", "renderAsyncChange", "repaintChangesOnlyChange", "rowAlternationEnabledChange", "rowDraggingChange", "rowTemplateChange", "rtlEnabledChange", "scrollingChange", "searchPanelChange", "selectedRowKeysChange", "selectionChange", "selectionFilterChange", "showBordersChange", "showColumnHeadersChange", "showColumnLinesChange", "showRowLinesChange", "sortByGroupSummaryInfoChange", "sortingChange", "stateStoringChange", "summaryChange", "syncLookupFilterValuesChange", "tabIndexChange", "toolbarChange", "twoWayBindingEnabledChange", "visibleChange", "widthChange", "wordWrapEnabledChange"] }, { kind: "component", type: i6.DxiColumnComponent, selector: "dxi-column", inputs: ["alignment", "allowEditing", "allowExporting", "allowFiltering", "allowFixing", "allowGrouping", "allowHeaderFiltering", "allowHiding", "allowReordering", "allowResizing", "allowSearch", "allowSorting", "autoExpandGroup", "buttons", "calculateCellValue", "calculateDisplayValue", "calculateFilterExpression", "calculateGroupValue", "calculateSortValue", "caption", "cellTemplate", "columns", "cssClass", "customizeText", "dataField", "dataType", "editCellTemplate", "editorOptions", "encodeHtml", "falseText", "filterOperations", "filterType", "filterValue", "filterValues", "fixed", "fixedPosition", "format", "formItem", "groupCellTemplate", "groupIndex", "headerCellTemplate", "headerFilter", "hidingPriority", "isBand", "lookup", "minWidth", "name", "ownerBand", "renderAsync", "selectedFilterOperation", "setCellValue", "showEditorAlways", "showInColumnChooser", "showWhenGrouped", "sortIndex", "sortingMethod", "sortOrder", "trueText", "type", "validationRules", "visible", "visibleIndex", "width"], outputs: ["filterValueChange", "filterValuesChange", "groupIndexChange", "selectedFilterOperationChange", "sortIndexChange", "sortOrderChange", "visibleChange", "visibleIndexChange"] }, { kind: "pipe", type: i7.LocalizationPipe, name: "abpLocalization" }] });
|
|
347
|
+
HitFillingControlComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: HitFillingControlComponent, selector: "lib-hit-filling-control", viewQueries: [{ propertyName: "nmbBoxIsEmriNo", first: true, predicate: ["isEmriNoRef"], descendants: true }, { propertyName: "txtBoxQrCode", first: true, predicate: ["qrCodeRef"], descendants: true }, { propertyName: "dataGrid", first: true, predicate: ["gridLines"], descendants: true }], ngImport: i0, template: "<abp-page [breadcrumb]=\"false\">\r\n <abp-page-toolbar-container class=\"col\">\r\n <div class=\"row\">\r\n <h3 class=\"page-title\">\r\n {{ 'UretimYonetimi::FillingControl.Title' | abpLocalization }}\r\n </h3>\r\n </div>\r\n <div class=\"row text-lg-end pt-2\">\r\n <div class=\"col-6\">\r\n <button class=\"btn btn-success btn-sm\" type=\"button\" (click)=\"save()\" [disabled]=\"isSaveButtonDisabled\">\r\n <i class=\"fa fa-save me-1\"></i>\r\n {{ 'UretimYonetimi::FillingControl.Save' | abpLocalization }}\r\n </button>\r\n </div>\r\n <div class=\"col-3\" *ngIf=\"showKazanDegisimiButton\">\r\n <button class=\"btn btn-info btn-sm\" type=\"button\" (click)=\"kazanDegisimi()\">\r\n <i class=\"fa fa-recycle me-1\"></i>\r\n Kazan De\u011Fi\u015Fimi\r\n </button>\r\n </div>\r\n <div class=\"col-3\">\r\n <button class=\"btn btn-warning btn-sm\" type=\"button\" (click)=\"clearAll()\">\r\n <i class=\"fa fa-broom me-1\"></i>\r\n {{ 'UretimYonetimi::FillingControl.Clean' | abpLocalization }}\r\n </button>\r\n </div>\r\n </div>\r\n </abp-page-toolbar-container>\r\n <div class=\"card mt-2\">\r\n <div class=\"card-body\" style=\"height: calc(100vh - 241px); overflow: auto;\">\r\n <div style=\"display: flex; align-items: center;\">\r\n <dx-number-box #isEmriNoRef class=\"me-1\" style=\"width:100%;\"\r\n [label]=\"'UretimYonetimi::FillingControl.WorkOrderNo' | abpLocalization\"\r\n [(value)]=\"isEmriNo\"\r\n (onChange)=\"getProductionOrder()\" \r\n (onEnterKey)=\"getProductionOrder()\"\r\n [disabled]=\"searchBasildiMi || isEmriBarkoduGecerliMi\">\r\n </dx-number-box>\r\n <dx-button style=\"margin-top: 7.5px;\" \r\n icon=\"search\" \r\n type=\"default\" \r\n (onClick)=\"getProductionOrder()\"\r\n [disabled]=\"searchBasildiMi || isEmriBarkoduGecerliMi\">\r\n </dx-button>\r\n </div>\r\n\r\n <div class=\"mt-3\" *ngIf=\"isEmriBarkoduGecerliMi\">\r\n <dx-text-box style=\"width:100%;\" \r\n [label]=\"'UretimYonetimi::FillingControl.LineInfo' | abpLocalization\"\r\n [(value)]=\"hatBilgisi\" \r\n [disabled]=\"true\">\r\n </dx-text-box>\r\n\r\n <dx-text-box style=\"width:100%;\" \r\n label=\"Ambalaj Lot\"\r\n [(value)]=\"ambalajLot\" \r\n [disabled]=\"true\">\r\n </dx-text-box>\r\n\r\n <div class=\"mt-3\" style=\"display: flex; align-items: center;\">\r\n <dx-text-box #qrCodeRef \r\n style=\"width:100%;\" \r\n class=\"me-1\"\r\n [label]=\"'UretimYonetimi::FillingControl.QRCode' | abpLocalization\"\r\n [(value)]=\"qrCode\"\r\n (onEnterKey)=\"onQrCodeChange()\"\r\n [placeholder]=\"'UretimYonetimi::FillingControl.QRCode.Placeholder' | abpLocalization\">\r\n </dx-text-box>\r\n <dx-button style=\"margin-top: 7.5px;\" icon=\"plus\" type=\"default\" (onClick)=\"onQrCodeChange()\">\r\n </dx-button>\r\n </div>\r\n\r\n <dx-data-grid #gridLines \r\n class=\"mt-3\" \r\n [dataSource]=\"lines\" \r\n [columnAutoWidth]=\"true\"\r\n [showBorders]=\"true\">\r\n <dxi-column dataField=\"itemCode\"\r\n [caption]=\"'UretimYonetimi::FillingControl.ItemCode' | abpLocalization\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"itemName\"\r\n [caption]=\"'UretimYonetimi::FillingControl.ItemName' | abpLocalization\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"isControlled\"\r\n [caption]=\"'UretimYonetimi::FillingControl.IsControlled' | abpLocalization\"\r\n dataType=\"boolean\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"batchNumber\"\r\n [caption]=\"'UretimYonetimi::FillingControl.BatchNumber' | abpLocalization\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n </dx-data-grid>\r\n </div>\r\n </div>\r\n </div>\r\n</abp-page>\r\n", styles: [""], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.PageComponent, selector: "abp-page", inputs: ["title", "toolbar", "breadcrumb"] }, { kind: "component", type: i4.PageToolbarContainerComponent, selector: "abp-page-toolbar-container" }, { kind: "component", type: i5.DxButtonComponent, selector: "dx-button", inputs: ["accessKey", "activeStateEnabled", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "icon", "rtlEnabled", "stylingMode", "tabIndex", "template", "text", "type", "useSubmitBehavior", "validationGroup", "visible", "width"], outputs: ["onClick", "onContentReady", "onDisposing", "onInitialized", "onOptionChanged", "accessKeyChange", "activeStateEnabledChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "iconChange", "rtlEnabledChange", "stylingModeChange", "tabIndexChange", "templateChange", "textChange", "typeChange", "useSubmitBehaviorChange", "validationGroupChange", "visibleChange", "widthChange"] }, { kind: "component", type: i5.DxNumberBoxComponent, selector: "dx-number-box", inputs: ["accessKey", "activeStateEnabled", "buttons", "disabled", "elementAttr", "focusStateEnabled", "format", "height", "hint", "hoverStateEnabled", "inputAttr", "invalidValueMessage", "isValid", "label", "labelMode", "max", "min", "mode", "name", "placeholder", "readOnly", "rtlEnabled", "showClearButton", "showSpinButtons", "step", "stylingMode", "tabIndex", "text", "useLargeSpinButtons", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "valueChangeEvent", "visible", "width"], outputs: ["onChange", "onContentReady", "onCopy", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onKeyDown", "onKeyUp", "onOptionChanged", "onPaste", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "formatChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "invalidValueMessageChange", "isValidChange", "labelChange", "labelModeChange", "maxChange", "minChange", "modeChange", "nameChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "showClearButtonChange", "showSpinButtonsChange", "stepChange", "stylingModeChange", "tabIndexChange", "textChange", "useLargeSpinButtonsChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "component", type: i5.DxTextBoxComponent, selector: "dx-text-box", inputs: ["accessKey", "activeStateEnabled", "buttons", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "inputAttr", "isValid", "label", "labelMode", "mask", "maskChar", "maskInvalidMessage", "maskRules", "maxLength", "mode", "name", "placeholder", "readOnly", "rtlEnabled", "showClearButton", "showMaskMode", "spellcheck", "stylingMode", "tabIndex", "text", "useMaskedValue", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "valueChangeEvent", "visible", "width"], outputs: ["onChange", "onContentReady", "onCopy", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onKeyDown", "onKeyUp", "onOptionChanged", "onPaste", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isValidChange", "labelChange", "labelModeChange", "maskChange", "maskCharChange", "maskInvalidMessageChange", "maskRulesChange", "maxLengthChange", "modeChange", "nameChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "showClearButtonChange", "showMaskModeChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "useMaskedValueChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "component", type: i5.DxDataGridComponent, selector: "dx-data-grid", inputs: ["accessKey", "activeStateEnabled", "allowColumnReordering", "allowColumnResizing", "autoNavigateToFocusedRow", "cacheEnabled", "cellHintEnabled", "columnAutoWidth", "columnChooser", "columnFixing", "columnHidingEnabled", "columnMinWidth", "columnResizingMode", "columns", "columnWidth", "customizeColumns", "dataRowTemplate", "dataSource", "dateSerializationFormat", "disabled", "editing", "elementAttr", "errorRowEnabled", "export", "filterBuilder", "filterBuilderPopup", "filterPanel", "filterRow", "filterSyncEnabled", "filterValue", "focusedColumnIndex", "focusedRowEnabled", "focusedRowIndex", "focusedRowKey", "grouping", "groupPanel", "headerFilter", "height", "highlightChanges", "hint", "hoverStateEnabled", "keyboardNavigation", "keyExpr", "loadPanel", "masterDetail", "noDataText", "pager", "paging", "remoteOperations", "renderAsync", "repaintChangesOnly", "rowAlternationEnabled", "rowDragging", "rowTemplate", "rtlEnabled", "scrolling", "searchPanel", "selectedRowKeys", "selection", "selectionFilter", "showBorders", "showColumnHeaders", "showColumnLines", "showRowLines", "sortByGroupSummaryInfo", "sorting", "stateStoring", "summary", "syncLookupFilterValues", "tabIndex", "toolbar", "twoWayBindingEnabled", "visible", "width", "wordWrapEnabled"], outputs: ["onAdaptiveDetailRowPreparing", "onCellClick", "onCellDblClick", "onCellHoverChanged", "onCellPrepared", "onContentReady", "onContextMenuPreparing", "onDataErrorOccurred", "onDisposing", "onEditCanceled", "onEditCanceling", "onEditingStart", "onEditorPrepared", "onEditorPreparing", "onExporting", "onFocusedCellChanged", "onFocusedCellChanging", "onFocusedRowChanged", "onFocusedRowChanging", "onInitialized", "onInitNewRow", "onKeyDown", "onOptionChanged", "onRowClick", "onRowCollapsed", "onRowCollapsing", "onRowDblClick", "onRowExpanded", "onRowExpanding", "onRowInserted", "onRowInserting", "onRowPrepared", "onRowRemoved", "onRowRemoving", "onRowUpdated", "onRowUpdating", "onRowValidating", "onSaved", "onSaving", "onSelectionChanged", "onToolbarPreparing", "accessKeyChange", "activeStateEnabledChange", "allowColumnReorderingChange", "allowColumnResizingChange", "autoNavigateToFocusedRowChange", "cacheEnabledChange", "cellHintEnabledChange", "columnAutoWidthChange", "columnChooserChange", "columnFixingChange", "columnHidingEnabledChange", "columnMinWidthChange", "columnResizingModeChange", "columnsChange", "columnWidthChange", "customizeColumnsChange", "dataRowTemplateChange", "dataSourceChange", "dateSerializationFormatChange", "disabledChange", "editingChange", "elementAttrChange", "errorRowEnabledChange", "exportChange", "filterBuilderChange", "filterBuilderPopupChange", "filterPanelChange", "filterRowChange", "filterSyncEnabledChange", "filterValueChange", "focusedColumnIndexChange", "focusedRowEnabledChange", "focusedRowIndexChange", "focusedRowKeyChange", "groupingChange", "groupPanelChange", "headerFilterChange", "heightChange", "highlightChangesChange", "hintChange", "hoverStateEnabledChange", "keyboardNavigationChange", "keyExprChange", "loadPanelChange", "masterDetailChange", "noDataTextChange", "pagerChange", "pagingChange", "remoteOperationsChange", "renderAsyncChange", "repaintChangesOnlyChange", "rowAlternationEnabledChange", "rowDraggingChange", "rowTemplateChange", "rtlEnabledChange", "scrollingChange", "searchPanelChange", "selectedRowKeysChange", "selectionChange", "selectionFilterChange", "showBordersChange", "showColumnHeadersChange", "showColumnLinesChange", "showRowLinesChange", "sortByGroupSummaryInfoChange", "sortingChange", "stateStoringChange", "summaryChange", "syncLookupFilterValuesChange", "tabIndexChange", "toolbarChange", "twoWayBindingEnabledChange", "visibleChange", "widthChange", "wordWrapEnabledChange"] }, { kind: "component", type: i6.DxiColumnComponent, selector: "dxi-column", inputs: ["alignment", "allowEditing", "allowExporting", "allowFiltering", "allowFixing", "allowGrouping", "allowHeaderFiltering", "allowHiding", "allowReordering", "allowResizing", "allowSearch", "allowSorting", "autoExpandGroup", "buttons", "calculateCellValue", "calculateDisplayValue", "calculateFilterExpression", "calculateGroupValue", "calculateSortValue", "caption", "cellTemplate", "columns", "cssClass", "customizeText", "dataField", "dataType", "editCellTemplate", "editorOptions", "encodeHtml", "falseText", "filterOperations", "filterType", "filterValue", "filterValues", "fixed", "fixedPosition", "format", "formItem", "groupCellTemplate", "groupIndex", "headerCellTemplate", "headerFilter", "hidingPriority", "isBand", "lookup", "minWidth", "name", "ownerBand", "renderAsync", "selectedFilterOperation", "setCellValue", "showEditorAlways", "showInColumnChooser", "showWhenGrouped", "sortIndex", "sortingMethod", "sortOrder", "trueText", "type", "validationRules", "visible", "visibleIndex", "width"], outputs: ["filterValueChange", "filterValuesChange", "groupIndexChange", "selectedFilterOperationChange", "sortIndexChange", "sortOrderChange", "visibleChange", "visibleIndexChange"] }, { kind: "pipe", type: i7.LocalizationPipe, name: "abpLocalization" }] });
|
|
345
348
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: HitFillingControlComponent, decorators: [{
|
|
346
349
|
type: Component,
|
|
347
|
-
args: [{ selector: 'lib-hit-filling-control', template: "<abp-page [breadcrumb]=\"false\">\r\n <abp-page-toolbar-container class=\"col\">\r\n <div class=\"row\">\r\n <h3 class=\"page-title\">\r\n {{ 'UretimYonetimi::FillingControl.Title' | abpLocalization }}\r\n </h3>\r\n </div>\r\n <div class=\"row text-lg-end pt-2\">\r\n <div class=\"col-6\">\r\n <button class=\"btn btn-success btn-sm\" type=\"button\" (click)=\"save()\" [disabled]=\"isSaveButtonDisabled\">\r\n <i class=\"fa fa-save me-1\"></i>\r\n {{ 'UretimYonetimi::FillingControl.Save' | abpLocalization }}\r\n </button>\r\n </div>\r\n <div class=\"col-3\" *ngIf=\"showKazanDegisimiButton\">\r\n <button class=\"btn btn-info btn-sm\" type=\"button\" (click)=\"kazanDegisimi()\">\r\n <i class=\"fa fa-recycle me-1\"></i>\r\n Kazan De\u011Fi\u015Fimi\r\n </button>\r\n </div>\r\n <div class=\"col-3\">\r\n <button class=\"btn btn-warning btn-sm\" type=\"button\" (click)=\"clearAll()\">\r\n <i class=\"fa fa-broom me-1\"></i>\r\n {{ 'UretimYonetimi::FillingControl.Clean' | abpLocalization }}\r\n </button>\r\n </div>\r\n </div>\r\n </abp-page-toolbar-container>\r\n <div class=\"card mt-2\">\r\n <div class=\"card-body\" style=\"height: calc(100vh - 241px); overflow: auto;\">\r\n <div style=\"display: flex; align-items: center;\">\r\n <dx-number-box #isEmriNoRef class=\"me-1\" style=\"width:100%;\"\r\n [label]=\"'UretimYonetimi::FillingControl.WorkOrderNo' | abpLocalization\"\r\n [(value)]=\"isEmriNo\"\r\n (onChange)=\"getProductionOrder()\" \r\n (onEnterKey)=\"getProductionOrder()\"\r\n [disabled]=\"searchBasildiMi || isEmriBarkoduGecerliMi\">\r\n </dx-number-box>\r\n <dx-button style=\"margin-top: 7.5px;\" \r\n icon=\"search\" \r\n type=\"default\" \r\n (onClick)=\"getProductionOrder()\"\r\n [disabled]=\"searchBasildiMi || isEmriBarkoduGecerliMi\">\r\n </dx-button>\r\n </div>\r\n\r\n <div class=\"mt-3\" *ngIf=\"isEmriBarkoduGecerliMi\">\r\n <dx-text-box style=\"width:100%;\" \r\n [label]=\"'UretimYonetimi::FillingControl.LineInfo' | abpLocalization\"\r\n [(value)]=\"hatBilgisi\" \r\n [disabled]=\"true\">\r\n </dx-text-box>\r\n\r\n <div class=\"mt-3\" style=\"display: flex; align-items: center;\">\r\n <dx-text-box #qrCodeRef \r\n style=\"width:100%;\" \r\n class=\"me-1\"\r\n [label]=\"'UretimYonetimi::FillingControl.QRCode' | abpLocalization\"\r\n [(value)]=\"qrCode\"\r\n (onEnterKey)=\"onQrCodeChange()\"\r\n [placeholder]=\"'UretimYonetimi::FillingControl.QRCode.Placeholder' | abpLocalization\">\r\n </dx-text-box>\r\n <dx-button style=\"margin-top: 7.5px;\" icon=\"plus\" type=\"default\" (onClick)=\"onQrCodeChange()\">\r\n </dx-button>\r\n </div>\r\n\r\n <dx-data-grid #gridLines \r\n class=\"mt-3\" \r\n [dataSource]=\"lines\" \r\n [columnAutoWidth]=\"true\"\r\n [showBorders]=\"true\">\r\n <dxi-column dataField=\"itemCode\"\r\n [caption]=\"'UretimYonetimi::FillingControl.ItemCode' | abpLocalization\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"itemName\"\r\n [caption]=\"'UretimYonetimi::FillingControl.ItemName' | abpLocalization\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"isControlled\"\r\n [caption]=\"'UretimYonetimi::FillingControl.IsControlled' | abpLocalization\"\r\n dataType=\"boolean\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"batchNumber\"\r\n [caption]=\"'UretimYonetimi::FillingControl.BatchNumber' | abpLocalization\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n </dx-data-grid>\r\n </div>\r\n </div>\r\n </div>\r\n</abp-page>\r\n" }]
|
|
350
|
+
args: [{ selector: 'lib-hit-filling-control', template: "<abp-page [breadcrumb]=\"false\">\r\n <abp-page-toolbar-container class=\"col\">\r\n <div class=\"row\">\r\n <h3 class=\"page-title\">\r\n {{ 'UretimYonetimi::FillingControl.Title' | abpLocalization }}\r\n </h3>\r\n </div>\r\n <div class=\"row text-lg-end pt-2\">\r\n <div class=\"col-6\">\r\n <button class=\"btn btn-success btn-sm\" type=\"button\" (click)=\"save()\" [disabled]=\"isSaveButtonDisabled\">\r\n <i class=\"fa fa-save me-1\"></i>\r\n {{ 'UretimYonetimi::FillingControl.Save' | abpLocalization }}\r\n </button>\r\n </div>\r\n <div class=\"col-3\" *ngIf=\"showKazanDegisimiButton\">\r\n <button class=\"btn btn-info btn-sm\" type=\"button\" (click)=\"kazanDegisimi()\">\r\n <i class=\"fa fa-recycle me-1\"></i>\r\n Kazan De\u011Fi\u015Fimi\r\n </button>\r\n </div>\r\n <div class=\"col-3\">\r\n <button class=\"btn btn-warning btn-sm\" type=\"button\" (click)=\"clearAll()\">\r\n <i class=\"fa fa-broom me-1\"></i>\r\n {{ 'UretimYonetimi::FillingControl.Clean' | abpLocalization }}\r\n </button>\r\n </div>\r\n </div>\r\n </abp-page-toolbar-container>\r\n <div class=\"card mt-2\">\r\n <div class=\"card-body\" style=\"height: calc(100vh - 241px); overflow: auto;\">\r\n <div style=\"display: flex; align-items: center;\">\r\n <dx-number-box #isEmriNoRef class=\"me-1\" style=\"width:100%;\"\r\n [label]=\"'UretimYonetimi::FillingControl.WorkOrderNo' | abpLocalization\"\r\n [(value)]=\"isEmriNo\"\r\n (onChange)=\"getProductionOrder()\" \r\n (onEnterKey)=\"getProductionOrder()\"\r\n [disabled]=\"searchBasildiMi || isEmriBarkoduGecerliMi\">\r\n </dx-number-box>\r\n <dx-button style=\"margin-top: 7.5px;\" \r\n icon=\"search\" \r\n type=\"default\" \r\n (onClick)=\"getProductionOrder()\"\r\n [disabled]=\"searchBasildiMi || isEmriBarkoduGecerliMi\">\r\n </dx-button>\r\n </div>\r\n\r\n <div class=\"mt-3\" *ngIf=\"isEmriBarkoduGecerliMi\">\r\n <dx-text-box style=\"width:100%;\" \r\n [label]=\"'UretimYonetimi::FillingControl.LineInfo' | abpLocalization\"\r\n [(value)]=\"hatBilgisi\" \r\n [disabled]=\"true\">\r\n </dx-text-box>\r\n\r\n <dx-text-box style=\"width:100%;\" \r\n label=\"Ambalaj Lot\"\r\n [(value)]=\"ambalajLot\" \r\n [disabled]=\"true\">\r\n </dx-text-box>\r\n\r\n <div class=\"mt-3\" style=\"display: flex; align-items: center;\">\r\n <dx-text-box #qrCodeRef \r\n style=\"width:100%;\" \r\n class=\"me-1\"\r\n [label]=\"'UretimYonetimi::FillingControl.QRCode' | abpLocalization\"\r\n [(value)]=\"qrCode\"\r\n (onEnterKey)=\"onQrCodeChange()\"\r\n [placeholder]=\"'UretimYonetimi::FillingControl.QRCode.Placeholder' | abpLocalization\">\r\n </dx-text-box>\r\n <dx-button style=\"margin-top: 7.5px;\" icon=\"plus\" type=\"default\" (onClick)=\"onQrCodeChange()\">\r\n </dx-button>\r\n </div>\r\n\r\n <dx-data-grid #gridLines \r\n class=\"mt-3\" \r\n [dataSource]=\"lines\" \r\n [columnAutoWidth]=\"true\"\r\n [showBorders]=\"true\">\r\n <dxi-column dataField=\"itemCode\"\r\n [caption]=\"'UretimYonetimi::FillingControl.ItemCode' | abpLocalization\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"itemName\"\r\n [caption]=\"'UretimYonetimi::FillingControl.ItemName' | abpLocalization\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"isControlled\"\r\n [caption]=\"'UretimYonetimi::FillingControl.IsControlled' | abpLocalization\"\r\n dataType=\"boolean\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n <dxi-column dataField=\"batchNumber\"\r\n [caption]=\"'UretimYonetimi::FillingControl.BatchNumber' | abpLocalization\"\r\n [allowEditing]=\"false\"></dxi-column>\r\n </dx-data-grid>\r\n </div>\r\n </div>\r\n </div>\r\n</abp-page>\r\n" }]
|
|
348
351
|
}], ctorParameters: function () { return [{ type: i1.HitFillingControlService }, { type: i2.ConfirmationService }, { type: i0.NgZone }]; }, propDecorators: { nmbBoxIsEmriNo: [{
|
|
349
352
|
type: ViewChild,
|
|
350
353
|
args: ['isEmriNoRef', { static: false }]
|
|
@@ -355,4 +358,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
355
358
|
type: ViewChild,
|
|
356
359
|
args: ['gridLines', { static: false }]
|
|
357
360
|
}] } });
|
|
358
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGl0LWZpbGxpbmctY29udHJvbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91cmV0aW0teW9uZXRpbWkvc3JjL2xpYi9jb21wb25lbnRzL2hpdC1maWxsaW5nLWNvbnRyb2wvaGl0LWZpbGxpbmctY29udHJvbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91cmV0aW0teW9uZXRpbWkvc3JjL2xpYi9jb21wb25lbnRzL2hpdC1maWxsaW5nLWNvbnRyb2wvaGl0LWZpbGxpbmctY29udHJvbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUs3RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7Ozs7OztBQU9uRCxNQUFNLE9BQU8sMEJBQTBCO0lBZXJDLFlBQ1UsT0FBaUMsRUFDakMsWUFBaUMsRUFDakMsTUFBYztRQUZkLFlBQU8sR0FBUCxPQUFPLENBQTBCO1FBQ2pDLGlCQUFZLEdBQVosWUFBWSxDQUFxQjtRQUNqQyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBWnhCLG9CQUFlLEdBQVksS0FBSyxDQUFDO1FBQ2pDLDJCQUFzQixHQUFZLEtBQUssQ0FBQztRQUN4QyxjQUFTLEdBQVksS0FBSyxDQUFDO1FBQzNCLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFDMUIsZUFBVSxHQUFXLEVBQUUsQ0FBQztRQUN4QixXQUFNLEdBQVcsRUFBRSxDQUFDO1FBQ3BCLFVBQUssR0FBeUIsRUFBRSxDQUFDO1FBQ2pDLHVCQUFrQixHQUFZLEtBQUssQ0FBQyxDQUFDLHFDQUFxQztJQU12RSxDQUFDO0lBRUosUUFBUTtRQUNOLHVCQUF1QjtJQUN6QixDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUN6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QUFDO0lBQ0wsQ0FBQztJQUVELFlBQVk7UUFDVixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDbkIsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDZCxJQUFJLENBQUMsWUFBWSxFQUFFLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUN0QyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDUixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7O3VIQXBYVSwwQkFBMEI7MkdBQTFCLDBCQUEwQixrV0NadkMsKzFJQXlGQTsyRkQ3RWEsMEJBQTBCO2tCQUx0QyxTQUFTOytCQUNFLHlCQUF5QjtzS0FLVSxjQUFjO3NCQUExRCxTQUFTO3VCQUFDLGFBQWEsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBQ0EsWUFBWTtzQkFBdEQsU0FBUzt1QkFBQyxXQUFXLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUNFLFFBQVE7c0JBQWxELFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgVmlld0NoaWxkLCBOZ1pvbmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRHhOdW1iZXJCb3hDb21wb25lbnQsIER4VGV4dEJveENvbXBvbmVudCwgRHhEYXRhR3JpZENvbXBvbmVudCB9IGZyb20gJ2RldmV4dHJlbWUtYW5ndWxhcic7XHJcbmltcG9ydCB7IEhpdEZpbGxpbmdDb250cm9sU2VydmljZSB9IGZyb20gJy4uLy4uL2hpdC1wcm94eS9oaXQtZmlsbGluZy1jb250cm9sL2hpdC1maWxsaW5nLWNvbnRyb2wuc2VydmljZSc7XHJcbmltcG9ydCB7IEZpbGxpbmdDb250cm9sTGluZSB9IGZyb20gJy4uLy4uL2hpdC1wcm94eS9oaXQtZmlsbGluZy1jb250cm9sL21vZGVscyc7XHJcbmltcG9ydCB7IENvbmZpcm1hdGlvblNlcnZpY2UgfSBmcm9tICdAYWJwL25nLnRoZW1lLnNoYXJlZCc7XHJcbmltcG9ydCB7IEhpdEhlbHBlciB9IGZyb20gJy4uLy4uL2hpdC1wcm94eS9tb2RlbHMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItaGl0LWZpbGxpbmctY29udHJvbCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2hpdC1maWxsaW5nLWNvbnRyb2wuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2hpdC1maWxsaW5nLWNvbnRyb2wuY29tcG9uZW50LmNzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgSGl0RmlsbGluZ0NvbnRyb2xDb21wb25lbnQge1xyXG4gIEBWaWV3Q2hpbGQoJ2lzRW1yaU5vUmVmJywgeyBzdGF0aWM6IGZhbHNlIH0pIG5tYkJveElzRW1yaU5vOiBEeE51bWJlckJveENvbXBvbmVudDtcclxuICBAVmlld0NoaWxkKCdxckNvZGVSZWYnLCB7IHN0YXRpYzogZmFsc2UgfSkgdHh0Qm94UXJDb2RlOiBEeFRleHRCb3hDb21wb25lbnQ7XHJcbiAgQFZpZXdDaGlsZCgnZ3JpZExpbmVzJywgeyBzdGF0aWM6IGZhbHNlIH0pIGRhdGFHcmlkOiBEeERhdGFHcmlkQ29tcG9uZW50O1xyXG5cclxuICBpc0VtcmlObzogbnVtYmVyO1xyXG4gIHNlYXJjaEJhc2lsZGlNaTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlzRW1yaUJhcmtvZHVHZWNlcmxpTWk6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc0xvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc1NhdmluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGhhdEJpbGdpc2k6IHN0cmluZyA9ICcnO1xyXG4gIHFyQ29kZTogc3RyaW5nID0gJyc7XHJcbiAgbGluZXM6IEZpbGxpbmdDb250cm9sTGluZVtdID0gW107XHJcbiAgaXNEYXRhTG9hZGVkRnJvbURiOiBib29sZWFuID0gZmFsc2U7IC8vIERCJ2RlbiB2ZXJpIG1pIGdlbGRpIHlva3NhIHllbmkgbWlcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHNlcnZpY2U6IEhpdEZpbGxpbmdDb250cm9sU2VydmljZSxcclxuICAgIHByaXZhdGUgY29uZmlybWF0aW9uOiBDb25maXJtYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZVxyXG4gICkge31cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICAvLyBJbml0aWFsaXphdGlvbiBsb2dpY1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgdGhpcy5mb2N1c09uSXNFbXJpTm8oKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGdldFByb2R1Y3Rpb25PcmRlcigpIHtcclxuICAgIGlmICghdGhpcy5pc0VtcmlObykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5pc0VtcmlCYXJrb2R1R2VjZXJsaU1pID0gZmFsc2U7XHJcbiAgICB0aGlzLnNlYXJjaEJhc2lsZGlNaSA9IHRydWU7XHJcblxyXG4gICAgdGhpcy5zZXJ2aWNlLmdldEZpbGxpbmdDb250cm9sSW5mbyh0aGlzLmlzRW1yaU5vKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiByZXNwb25zZSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlPy5pc1N1Y2Nlc3NmdWwpIHtcclxuICAgICAgICAgIGNvbnN0IHN0YXR1cyA9IChyZXNwb25zZS5pdGVtcz8uc3RhdHVzIHx8ICcnKS50b1N0cmluZygpLnRvVXBwZXJDYXNlKCk7XHJcbiAgICAgICAgICBpZiAoc3RhdHVzID09PSAnUCcpIHtcclxuICAgICAgICAgICAgdGhpcy5jb25maXJtYXRpb24ud2FybignJywgJ0J1IMO8cmV0aW0gc2lwYXJpxZ9pIG9uYXlsYW5tYW3EscWfdMSxciwga29udHJvbCB5YXDEsWxhbWF6LicsIHtcclxuICAgICAgICAgICAgICBoaWRlWWVzQnRuOiB0cnVlLFxyXG4gICAgICAgICAgICAgIGNhbmNlbFRleHQ6ICdLYXBhdCcsXHJcbiAgICAgICAgICAgICAgZGlzbWlzc2libGU6IGZhbHNlLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy5jbGVhckFsbCgpO1xyXG4gICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgdGhpcy5oYXRCaWxnaXNpID0gcmVzcG9uc2UuaXRlbXMudV9IYXQ7XHJcbiAgICAgICAgICB0aGlzLmxpbmVzID0gcmVzcG9uc2UuaXRlbXMubGluZXM7XHJcbiAgICAgICAgICB0aGlzLmlzRW1yaUJhcmtvZHVHZWNlcmxpTWkgPSB0cnVlO1xyXG4gICAgICAgICAgXHJcbiAgICAgICAgICAvLyBEQidkZW4gdmVyaSBnZWxpcCBnZWxtZWRpxJ9pbmkga29udHJvbCBldCAoZW4gYXogYmlyIHNhdMSxcmRhIGJhdGNoTnVtYmVyIHZhcnNhIERCJ2RlbiBnZWxtacWfdGlyKVxyXG4gICAgICAgICAgdGhpcy5pc0RhdGFMb2FkZWRGcm9tRGIgPSB0aGlzLmxpbmVzLnNvbWUoeCA9PiB4LmJhdGNoTnVtYmVyICYmIHguYmF0Y2hOdW1iZXIudHJpbSgpICE9PSAnJyk7XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmZvY3VzT25RckNvZGUoKTtcclxuICAgICAgICAgIH0sIDEwMCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuaXNFbXJpQmFya29kdUdlY2VybGlNaSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogZSA9PiB7XHJcbiAgICAgICAgdGhpcy5pc0VtcmlCYXJrb2R1R2VjZXJsaU1pID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hCYXNpbGRpTWkgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5jb25maXJtYXRpb24uc3RhdHVzJC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgbmV4dDogKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNsZWFyQWxsKCk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBvblFyQ29kZUNoYW5nZSgpIHtcclxuICAgIGlmICghdGhpcy5xckNvZGUgfHwgdGhpcy5xckNvZGUudHJpbSgpID09PSAnJykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgZGVidWdnZXI7XHJcblxyXG4gICAgY29uc3QgcGFyc2VkID0gSGl0SGVscGVyLnBhcnNlUVIodGhpcy5xckNvZGUpO1xyXG4gICAgaWYgKCFwYXJzZWQpIHtcclxuICAgICAgdGhpcy5jb25maXJtYXRpb24uZXJyb3IoJycsICdHZcOnZXJzaXogUVIga29kIGZvcm1hdMSxIScsIHtcclxuICAgICAgICBoaWRlWWVzQnRuOiB0cnVlLFxyXG4gICAgICAgIGNhbmNlbFRleHQ6ICdLYXBhdCcsXHJcbiAgICAgICAgZGlzbWlzc2libGU6IGZhbHNlLFxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5xckNvZGUgPSAnJztcclxuICAgICAgdGhpcy5mb2N1c1FSSW5wdXQoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEdyaWQnZGUgYnUgaXRlbSfEsSBidWxcclxuICAgIGNvbnN0IGxpbmUgPSB0aGlzLmxpbmVzLmZpbmQoeCA9PiB4Lml0ZW1Db2RlID09PSBwYXJzZWQuY2hlbWljYWxDb2RlKTtcclxuICAgIGlmICghbGluZSkge1xyXG4gICAgICB0aGlzLmNvbmZpcm1hdGlvbi5lcnJvcignJywgYCR7cGFyc2VkLmNoZW1pY2FsQ29kZX0ga29kbHUgw7xyw7xuIGJ1IGnFnyBlbXJpbmRlIGJ1bHVuYW1hZMSxIWAsIHtcclxuICAgICAgICBoaWRlWWVzQnRuOiB0cnVlLFxyXG4gICAgICAgIGNhbmNlbFRleHQ6ICdLYXBhdCcsXHJcbiAgICAgICAgZGlzbWlzc2libGU6IGZhbHNlLFxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5xckNvZGUgPSAnJztcclxuICAgICAgdGhpcy5mb2N1c1FSSW5wdXQoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIMSwbGsgb2t1dG1hIGtvbnRyb2zDvCAtIEhpw6cga29udHJvbCBlZGlsbWVtacWfIHNhdMSxciB2YXJzYSwgYnUgaWxrIG9rdXRtYSBkZW1la3RpclxyXG4gICAgY29uc3QgaXNGaXJzdFNjYW4gPSAhdGhpcy5saW5lcy5zb21lKHggPT4geC5pc0NvbnRyb2xsZWQpO1xyXG4gICAgaWYgKGlzRmlyc3RTY2FuKSB7XHJcbiAgICAgIC8vIMSwbGsgb2t1dG1hIGnDp2luIMO8csO8biBhxJ9hY8SxIHZlIGthbGl0ZSBrb250cm9sw7wgeWFwXHJcbiAgICAgIGNvbnNvbGUubG9nKCfEsGxrIG9rdXRtYSB0ZXNwaXQgZWRpbGRpLCDDvHLDvG4gYcSfYWPEsSBrb250cm9sw7wgeWFwxLFsxLF5b3I6JywgcGFyc2VkLmNoZW1pY2FsQ29kZSk7XHJcbiAgICAgIHRoaXMuc2VydmljZS5oYXNQcm9kdWN0aW9uVHJlZShwYXJzZWQuY2hlbWljYWxDb2RlLCB0aGlzLmlzRW1yaU5vKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdIYXNQcm9kdWN0aW9uVHJlZSByZXNwb25zZTonLCByZXNwb25zZSk7XHJcbiAgICAgICAgICBpZiAocmVzcG9uc2U/LmlzU3VjY2Vzc2Z1bCAmJiByZXNwb25zZS5pdGVtcyA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAvLyDDnHLDvG4gYcSfYWPEsSB2YXIsIGthbGl0ZSBrb250cm9sw7wgeWFwXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCfDnHLDvG4gYcSfYWPEsSBidWx1bmR1LCBrYWxpdGUga29udHJvbMO8IHlhcMSxbMSxeW9yJyk7XHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2tRdWFsaXR5QW5kUHJvY2VzcyhsaW5lLCBwYXJzZWQubG90TnVtYmVyLCBpc0ZpcnN0U2Nhbik7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyDDnHLDvG4gYcSfYWPEsSB5b2ssIGhhdGEgZ8O2c3RlclxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnw5xyw7xuIGHEn2FjxLEgYnVsdW5hbWFkxLEhJyk7XHJcbiAgICAgICAgICAgIHRoaXMuY29uZmlybWF0aW9uLmVycm9yKCcnLCAnxLBsayBva3V0bWEgacWfbGVtaSB5YXLEsSBtYW3DvGwgacOnaW4geWFwxLFsbWFsxLEhJywge1xyXG4gICAgICAgICAgICAgIGhpZGVZZXNCdG46IHRydWUsXHJcbiAgICAgICAgICAgICAgY2FuY2VsVGV4dDogJ0thcGF0JyxcclxuICAgICAgICAgICAgICBkaXNtaXNzaWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLnFyQ29kZSA9ICcnO1xyXG4gICAgICAgICAgICB0aGlzLmZvY3VzUVJJbnB1dCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0hhc1Byb2R1Y3Rpb25UcmVlIGVycm9yOicsIGVycik7XHJcbiAgICAgICAgICB0aGlzLmNvbmZpcm1hdGlvbi5lcnJvcignJywgJ8OccsO8biBhxJ9hY8SxIGtvbnRyb2zDvCB5YXDEsWzEsXJrZW4gaGF0YSBvbHXFn3R1IScsIHtcclxuICAgICAgICAgICAgaGlkZVllc0J0bjogdHJ1ZSxcclxuICAgICAgICAgICAgY2FuY2VsVGV4dDogJ0thcGF0JyxcclxuICAgICAgICAgICAgZGlzbWlzc2libGU6IGZhbHNlLFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICB0aGlzLnFyQ29kZSA9ICcnO1xyXG4gICAgICAgICAgdGhpcy5mb2N1c1FSSW5wdXQoKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIMSwbGsgb2t1dG1hIGRlxJ9pbHNlIGRpcmVrdCBpxZ9sZVxyXG4gICAgICBjb25zb2xlLmxvZygnxLBsayBva3V0bWEgZGXEn2lsLCBkaXJla3QgacWfbGVuaXlvcicpO1xyXG4gICAgICB0aGlzLnByb2Nlc3NRclNjYW4obGluZSwgcGFyc2VkLmxvdE51bWJlcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNoZWNrUXVhbGl0eUFuZFByb2Nlc3MobGluZTogRmlsbGluZ0NvbnRyb2xMaW5lLCBiYXRjaE51bWJlcjogc3RyaW5nLCBpc0ZpcnN0U2NhbjogYm9vbGVhbikge1xyXG4gICAgLy8gS2FsaXRlIGR1cnVtdSBrb250cm9sw7wgeWFwXHJcbiAgICB0aGlzLnNlcnZpY2UuY2hlY2tRdWFsaXR5U3RhdHVzKGJhdGNoTnVtYmVyLCB0aGlzLmlzRW1yaU5vLCBsaW5lLml0ZW1Db2RlKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiByZXNwb25zZSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ0NoZWNrUXVhbGl0eVN0YXR1cyByZXNwb25zZTonLCByZXNwb25zZSk7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlPy5pc1N1Y2Nlc3NmdWwgJiYgcmVzcG9uc2UuaXRlbXMpIHtcclxuICAgICAgICAgIGlmIChyZXNwb25zZS5pdGVtcy5pc0FwcHJvdmVkKSB7XHJcbiAgICAgICAgICAgIC8vIEthbGl0ZSBvbmF5bGFuZMSxLCBva3V0bWF5YSBkZXZhbSBldFxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnS2FsaXRlIGtvbnRyb2zDvCBvbmF5bGFuZMSxLCBva3V0bWF5YSBkZXZhbSBlZGlsaXlvcicpO1xyXG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NRclNjYW4obGluZSwgYmF0Y2hOdW1iZXIsIGlzRmlyc3RTY2FuKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIEthbGl0ZSBSRUQsIGhhdGEgZ8O2c3RlclxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnS2FsaXRlIGtvbnRyb2zDvCByZWRkZWRpbGRpOicsIHJlc3BvbnNlLml0ZW1zLmVycm9yTWVzc2FnZSk7XHJcbiAgICAgICAgICAgIHRoaXMuY29uZmlybWF0aW9uLmVycm9yKCcnLCByZXNwb25zZS5pdGVtcy5lcnJvck1lc3NhZ2UgfHwgJ0thbGl0ZSBrb250cm9sw7wgcmVkZGVkaWxkaSEnLCB7XHJcbiAgICAgICAgICAgICAgaGlkZVllc0J0bjogdHJ1ZSxcclxuICAgICAgICAgICAgICBjYW5jZWxUZXh0OiAnS2FwYXQnLFxyXG4gICAgICAgICAgICAgIGRpc21pc3NpYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMucXJDb2RlID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMuZm9jdXNRUklucHV0KCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vIFNvcmd1IHNvbnVjdSBudWxsIGdlbGRpIHZleWEgYmHFn2FyxLFzxLF6XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnS2FsaXRlIGtvbnRyb2zDvCBzb3JndXN1IHNvbnXDpyBkw7ZuZMO8cm1lZGknKTtcclxuICAgICAgICAgIHRoaXMuY29uZmlybWF0aW9uLmVycm9yKCcnLCAnQnUgbG90IG51bWFyYXPEsSBpw6dpbiBrYWxpdGUgYmlsZ2lzaSBidWx1bmFtYWTEsSEnLCB7XHJcbiAgICAgICAgICAgIGhpZGVZZXNCdG46IHRydWUsXHJcbiAgICAgICAgICAgIGNhbmNlbFRleHQ6ICdLYXBhdCcsXHJcbiAgICAgICAgICAgIGRpc21pc3NpYmxlOiBmYWxzZSxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgdGhpcy5xckNvZGUgPSAnJztcclxuICAgICAgICAgIHRoaXMuZm9jdXNRUklucHV0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0NoZWNrUXVhbGl0eVN0YXR1cyBlcnJvcjonLCBlcnIpO1xyXG4gICAgICAgIHRoaXMuY29uZmlybWF0aW9uLmVycm9yKCcnLCAnS2FsaXRlIGtvbnRyb2zDvCB5YXDEsWzEsXJrZW4gaGF0YSBvbHXFn3R1IScsIHtcclxuICAgICAgICAgIGhpZGVZZXNCdG46IHRydWUsXHJcbiAgICAgICAgICBjYW5jZWxUZXh0OiAnS2FwYXQnLFxyXG4gICAgICAgICAgZGlzbWlzc2libGU6IGZhbHNlLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMucXJDb2RlID0gJyc7XHJcbiAgICAgICAgdGhpcy5mb2N1c1FSSW5wdXQoKTtcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBwcm9jZXNzUXJTY2FuKGxpbmU6IEZpbGxpbmdDb250cm9sTGluZSwgYmF0Y2hOdW1iZXI6IHN0cmluZywgaXNGaXJzdFNjYW46IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgLy8gS29udHJvbCBlZGlsZGkgb2xhcmFrIGnFn2FyZXRsZSB2ZSBwYXJ0aSBudW1hcmFzxLFuxLEgc2V0IGV0XHJcbiAgICBsaW5lLmlzQ29udHJvbGxlZCA9IHRydWU7XHJcbiAgICBpZiAoaXNGaXJzdFNjYW4pIHtcclxuICAgICAgbGluZS5iYXRjaE51bWJlciA9IGJhdGNoTnVtYmVyO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEdyaWQnaSByZWZyZXNoIGV0XHJcbiAgICB0aGlzLmRhdGFHcmlkLmluc3RhbmNlLnJlZnJlc2goKTtcclxuXHJcbiAgICAvLyBRUiBpbnB1dCd1IHRlbWl6bGUgdmUgZm9jdXMgZXRcclxuICAgIHRoaXMucXJDb2RlID0gJyc7XHJcbiAgICB0aGlzLmZvY3VzUVJJbnB1dCgpO1xyXG4gIH1cclxuXHJcbiAgc2F2ZSgpIHtcclxuICAgIGlmICghdGhpcy5pc0VtcmlObyB8fCB0aGlzLmxpbmVzLmxlbmd0aCA9PT0gMCB8fCB0aGlzLmlzU2F2aW5nKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBUw7xtIGtvbnRyb2xsZXIgdGFtYW1sYW5txLHFnyBtxLEga29udHJvbMO8XHJcbiAgICBpZiAoIXRoaXMubGluZXMuZXZlcnkoeCA9PiB4LmlzQ29udHJvbGxlZCkpIHtcclxuICAgICAgdGhpcy5jb25maXJtYXRpb24ud2FybignJywgJ1TDvG0ga29udHJvbGxlciB0YW1hbWxhbm1hZGFuIGthecSxdCBpxZ9sZW1pIHlhcMSxbGFtYXouJywge1xyXG4gICAgICAgIGhpZGVZZXNCdG46IHRydWUsXHJcbiAgICAgICAgY2FuY2VsVGV4dDogJ0thcGF0JyxcclxuICAgICAgICBkaXNtaXNzaWJsZTogZmFsc2UsXHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc2F2ZURhdGEgPSB7XHJcbiAgICAgIHdvcmtPcmRlck5vOiB0aGlzLmlzRW1yaU5vLFxyXG4gICAgICBsaW5lczogdGhpcy5saW5lcy5tYXAobGluZSA9PiAoe1xyXG4gICAgICAgIGxpbmVOdW06IGxpbmUubGluZU51bSxcclxuICAgICAgICBpdGVtQ29kZTogbGluZS5pdGVtQ29kZSxcclxuICAgICAgICBpc0NvbnRyb2xsZWQ6IGxpbmUuaXNDb250cm9sbGVkLFxyXG4gICAgICAgIGJhdGNoTnVtYmVyOiBsaW5lLmJhdGNoTnVtYmVyIHx8ICcnXHJcbiAgICAgIH0pKVxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLmlzU2F2aW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuc2VydmljZS5zYXZlRmlsbGluZ0NvbnRyb2woc2F2ZURhdGEpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IHJlc3BvbnNlID0+IHtcclxuICAgICAgICBpZiAocmVzcG9uc2U/LmlzU3VjY2Vzc2Z1bCkge1xyXG4gICAgICAgICAgdGhpcy5jb25maXJtYXRpb24uc3VjY2VzcygnJywgJ0thecSxdCBiYcWfYXLEsWzEsSEnLCB7XHJcbiAgICAgICAgICAgIGhpZGVZZXNCdG46IHRydWUsXHJcbiAgICAgICAgICAgIGNhbmNlbFRleHQ6ICdLYXBhdCcsXHJcbiAgICAgICAgICAgIGRpc21pc3NpYmxlOiBmYWxzZSxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgdGhpcy5jbGVhckFsbCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmlzU2F2aW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IGUgPT4ge1xyXG4gICAgICAgIHRoaXMuaXNTYXZpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuY29uZmlybWF0aW9uLnN0YXR1cyQuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6ICgpID0+IHtcclxuICAgICAgICAgICAgLy8gSGF0YSBzb25yYXPEsSBpxZ9sZW1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNsZWFyQWxsKCkge1xyXG4gICAgdGhpcy5pc0VtcmlCYXJrb2R1R2VjZXJsaU1pID0gZmFsc2U7XHJcbiAgICB0aGlzLnNlYXJjaEJhc2lsZGlNaSA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc0VtcmlObyA9IG51bGw7XHJcbiAgICB0aGlzLmhhdEJpbGdpc2kgPSAnJztcclxuICAgIHRoaXMucXJDb2RlID0gJyc7XHJcbiAgICB0aGlzLmxpbmVzID0gW107XHJcbiAgICB0aGlzLmlzRGF0YUxvYWRlZEZyb21EYiA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1NhdmluZyA9IGZhbHNlO1xyXG4gICAgdGhpcy5mb2N1c09uSXNFbXJpTm8oKTtcclxuICB9XHJcblxyXG4gIGdldCBzaG93S2F6YW5EZWdpc2ltaUJ1dHRvbigpOiBib29sZWFuIHtcclxuICAgIC8vIFNhZGVjZSBEQidkZW4gdmVyaSBnZWxtacWfc2UsIGnFnyBlbXJpIG9rdXR1bG11xZ8gdmUgdMO8bSBzYXTEsXJsYXIga29udHJvbCBlZGlsbWnFnyBpc2UgZ8O2c3RlclxyXG4gICAgcmV0dXJuIHRoaXMuaXNEYXRhTG9hZGVkRnJvbURiICYmXHJcbiAgICAgICAgICAgdGhpcy5pc0VtcmlCYXJrb2R1R2VjZXJsaU1pICYmIFxyXG4gICAgICAgICAgIHRoaXMubGluZXMubGVuZ3RoID4gMCAmJiBcclxuICAgICAgICAgICB0aGlzLmxpbmVzLmV2ZXJ5KHggPT4geC5pc0NvbnRyb2xsZWQpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGlzU2F2ZUJ1dHRvbkRpc2FibGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgLy8gxLDFnyBlbXJpIHlva3NhIHZleWEgc2F0xLFyIHlva3NhIHZleWEgdMO8bSBzYXTEsXJsYXIga29udHJvbCBlZGlsbWVtacWfc2UgdmV5YSBrYXlkZXRtZSBpxZ9sZW1pIGRldmFtIGVkaXlvcnNhIGRpc2FibGVcclxuICAgIHJldHVybiAhdGhpcy5pc0VtcmlObyB8fCBcclxuICAgICAgICAgICB0aGlzLmxpbmVzLmxlbmd0aCA9PT0gMCB8fCBcclxuICAgICAgICAgICAhdGhpcy5saW5lcy5ldmVyeSh4ID0+IHguaXNDb250cm9sbGVkKSB8fFxyXG4gICAgICAgICAgIHRoaXMuaXNTYXZpbmc7XHJcbiAgfVxyXG5cclxuICBrYXphbkRlZ2lzaW1pKCkge1xyXG4gICAgLy8gxLBsayBzb3J1OiBCdSBrYXphbmEgYWl0IHTDvG0gw7xyZXRpbWRlbiBnaXJpxZ9sZXJpIHRhbWFtbGFkxLFuxLF6IG3EsT9cclxuICAgIHRoaXMuY29uZmlybWF0aW9uLndhcm4oXHJcbiAgICAgICcnLFxyXG4gICAgICAnQnUga2F6YW5hIGFpdCB0w7xtIMO8cmV0aW1kZW4gZ2lyacWfbGVyaSB0YW1hbWxhZMSxbsSxeiBtxLE/JyxcclxuICAgICAge1xyXG4gICAgICAgIHllc1RleHQ6ICdFdmV0JyxcclxuICAgICAgICBjYW5jZWxUZXh0OiAnSGF5xLFyJ1xyXG4gICAgICB9XHJcbiAgICApLnN1YnNjcmliZShzdGF0dXMgPT4ge1xyXG4gICAgICBpZiAoc3RhdHVzID09PSAnY29uZmlybScpIHtcclxuICAgICAgICAvLyDEsGtpbmNpIHNvcnU6IEthemFuIGRlxJ9pxZ9pbWkgw7ZuY2VzaW5kZSBrYXphbiBZTSBmaXJlIMOnxLFrxLHFn8SxIGdlcsOnZWtsZcWfdGlyaWxkaSBtaT9cclxuICAgICAgICB0aGlzLmNvbmZpcm1hdGlvbi53YXJuKFxyXG4gICAgICAgICAgJycsXHJcbiAgICAgICAgICAnS2F6YW4gZGXEn2nFn2ltaSDDtm5jZXNpbmRlIGthemFuIFlNIGZpcmUgw6fEsWvEscWfxLEgZ2Vyw6dla2xlxZ90aXJpbGRpIG1pPycsXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIHllc1RleHQ6ICdFdmV0JyxcclxuICAgICAgICAgICAgY2FuY2VsVGV4dDogJ0hhecSxcidcclxuICAgICAgICAgIH1cclxuICAgICAgICApLnN1YnNjcmliZShzdGF0dXMyID0+IHtcclxuICAgICAgICAgIGlmIChzdGF0dXMyID09PSAnY29uZmlybScpIHtcclxuICAgICAgICAgICAgLy8gw5zDp8O8bmPDvCBzb3J1OiBCaWxlxZ9lbiBmaXJlIMOnxLFrxLHFn8SxIGdlcsOnZWtsZcWfdGlyaWxkaSBtaT9cclxuICAgICAgICAgICAgdGhpcy5jb25maXJtYXRpb24ud2FybihcclxuICAgICAgICAgICAgICAnJyxcclxuICAgICAgICAgICAgICAnQmlsZcWfZW4gZmlyZSDDp8Sxa8SxxZ/EsSBnZXLDp2VrbGXFn3RpcmlsZGkgbWk/JyxcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB5ZXNUZXh0OiAnRXZldCcsXHJcbiAgICAgICAgICAgICAgICBjYW5jZWxUZXh0OiAnSGF5xLFyJ1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKS5zdWJzY3JpYmUoc3RhdHVzMyA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKHN0YXR1czMgPT09ICdjb25maXJtJykge1xyXG4gICAgICAgICAgICAgICAgLy8gVMO8bSBvbmF5bGFyIHZlcmlsZGksIGthemFuIGRlxJ9pxZ9pbWkgacWfbGVtaW5pIGdlcsOnZWtsZcWfdGlyXHJcbiAgICAgICAgICAgICAgICAvLyBUw7xtIHNhdMSxcmxhcsSxbiBJc0NvbnRyb2xsZWQgYWxhbsSxbsSxIGZhbHNlIHlhcFxyXG4gICAgICAgICAgICAgICAgdGhpcy5saW5lcy5mb3JFYWNoKGxpbmUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBsaW5lLmlzQ29udHJvbGxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICBsaW5lLmJhdGNoTnVtYmVyID0gJyc7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgLy8gR3JpZCdpIHJlZnJlc2ggZXRcclxuICAgICAgICAgICAgICAgIHRoaXMuZGF0YUdyaWQuaW5zdGFuY2UucmVmcmVzaCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0RhdGFMb2FkZWRGcm9tRGIgPSBmYWxzZTsgLy8gQXJ0xLFrIHllbmkgdmVyaSBnaXJpbGVjZWtcclxuICAgICAgICAgICAgICAgIC8vIFFSIGlucHV0J2EgZm9jdXMgZXRcclxuICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNPblFyQ29kZSgpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAvLyBzdGF0dXMzICE9PSAnY29uZmlybScgaXNlIMO8w6fDvG5jw7wgc29ydXlhIGhhecSxciBkZW5kaSwgacWfbGVtIGlwdGFsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gc3RhdHVzMiAhPT0gJ2NvbmZpcm0nIGlzZSBpa2luY2kgc29ydXlhIGhhecSxciBkZW5kaSwgacWfbGVtIGlwdGFsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgLy8gc3RhdHVzICE9PSAnY29uZmlybScgaXNlIGlsayBzb3J1eWEgaGF5xLFyIGRlbmRpLCBpxZ9sZW0gaXB0YWxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZm9jdXNPbklzRW1yaU5vKCkge1xyXG4gICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5ubWJCb3hJc0VtcmlObz8uaW5zdGFuY2UuZm9jdXMoKTtcclxuICAgICAgfSwgMCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGZvY3VzT25RckNvZGUoKSB7XHJcbiAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLnR4dEJveFFyQ29kZT8uaW5zdGFuY2UuZm9jdXMoKTtcclxuICAgICAgfSwgMCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGZvY3VzUVJJbnB1dCgpIHtcclxuICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMudHh0Qm94UXJDb2RlPy5pbnN0YW5jZS5mb2N1cygpO1xyXG4gICAgICB9LCAwKTtcclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG4iLCI8YWJwLXBhZ2UgW2JyZWFkY3J1bWJdPVwiZmFsc2VcIj5cclxuICA8YWJwLXBhZ2UtdG9vbGJhci1jb250YWluZXIgY2xhc3M9XCJjb2xcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgPGgzIGNsYXNzPVwicGFnZS10aXRsZVwiPlxyXG4gICAgICAgIHt7ICdVcmV0aW1Zb25ldGltaTo6RmlsbGluZ0NvbnRyb2wuVGl0bGUnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgIDwvaDM+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3cgdGV4dC1sZy1lbmQgcHQtMlwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zdWNjZXNzIGJ0bi1zbVwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwic2F2ZSgpXCIgW2Rpc2FibGVkXT1cImlzU2F2ZUJ1dHRvbkRpc2FibGVkXCI+XHJcbiAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXNhdmUgbWUtMVwiPjwvaT5cclxuICAgICAgICAgIHt7ICdVcmV0aW1Zb25ldGltaTo6RmlsbGluZ0NvbnRyb2wuU2F2ZScgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtM1wiICpuZ0lmPVwic2hvd0themFuRGVnaXNpbWlCdXR0b25cIj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1pbmZvIGJ0bi1zbVwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwia2F6YW5EZWdpc2ltaSgpXCI+XHJcbiAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXJlY3ljbGUgbWUtMVwiPjwvaT5cclxuICAgICAgICAgIEthemFuIERlxJ9pxZ9pbWlcclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtM1wiPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXdhcm5pbmcgYnRuLXNtXCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJjbGVhckFsbCgpXCI+XHJcbiAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWJyb29tIG1lLTFcIj48L2k+XHJcbiAgICAgICAgICB7eyAnVXJldGltWW9uZXRpbWk6OkZpbGxpbmdDb250cm9sLkNsZWFuJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvYWJwLXBhZ2UtdG9vbGJhci1jb250YWluZXI+XHJcbiAgPGRpdiBjbGFzcz1cImNhcmQgbXQtMlwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiIHN0eWxlPVwiaGVpZ2h0OiBjYWxjKDEwMHZoIC0gMjQxcHgpOyBvdmVyZmxvdzogYXV0bztcIj5cclxuICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7XCI+XHJcbiAgICAgICAgPGR4LW51bWJlci1ib3ggI2lzRW1yaU5vUmVmIGNsYXNzPVwibWUtMVwiIHN0eWxlPVwid2lkdGg6MTAwJTtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInVXJldGltWW9uZXRpbWk6OkZpbGxpbmdDb250cm9sLldvcmtPcmRlck5vJyB8IGFicExvY2FsaXphdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgWyh2YWx1ZSldPVwiaXNFbXJpTm9cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIChvbkNoYW5nZSk9XCJnZXRQcm9kdWN0aW9uT3JkZXIoKVwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgIChvbkVudGVyS2V5KT1cImdldFByb2R1Y3Rpb25PcmRlcigpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwic2VhcmNoQmFzaWxkaU1pIHx8IGlzRW1yaUJhcmtvZHVHZWNlcmxpTWlcIj5cclxuICAgICAgICA8L2R4LW51bWJlci1ib3g+XHJcbiAgICAgICAgPGR4LWJ1dHRvbiBzdHlsZT1cIm1hcmdpbi10b3A6IDcuNXB4O1wiIFxyXG4gICAgICAgICAgICAgICAgICAgaWNvbj1cInNlYXJjaFwiIFxyXG4gICAgICAgICAgICAgICAgICAgdHlwZT1cImRlZmF1bHRcIiBcclxuICAgICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cImdldFByb2R1Y3Rpb25PcmRlcigpXCJcclxuICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJzZWFyY2hCYXNpbGRpTWkgfHwgaXNFbXJpQmFya29kdUdlY2VybGlNaVwiPlxyXG4gICAgICAgIDwvZHgtYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtdC0zXCIgKm5nSWY9XCJpc0VtcmlCYXJrb2R1R2VjZXJsaU1pXCI+XHJcbiAgICAgICAgPGR4LXRleHQtYm94IHN0eWxlPVwid2lkdGg6MTAwJTtcIiBcclxuICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidVcmV0aW1Zb25ldGltaTo6RmlsbGluZ0NvbnRyb2wuTGluZUluZm8nIHwgYWJwTG9jYWxpemF0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgWyh2YWx1ZSldPVwiaGF0QmlsZ2lzaVwiIFxyXG4gICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwidHJ1ZVwiPlxyXG4gICAgICAgIDwvZHgtdGV4dC1ib3g+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtdC0zXCIgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyO1wiPlxyXG4gICAgICAgICAgPGR4LXRleHQtYm94ICNxckNvZGVSZWYgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDoxMDAlO1wiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWUtMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidVcmV0aW1Zb25ldGltaTo6RmlsbGluZ0NvbnRyb2wuUVJDb2RlJyB8IGFicExvY2FsaXphdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgWyh2YWx1ZSldPVwicXJDb2RlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAob25FbnRlcktleSk9XCJvblFyQ29kZUNoYW5nZSgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1VyZXRpbVlvbmV0aW1pOjpGaWxsaW5nQ29udHJvbC5RUkNvZGUuUGxhY2Vob2xkZXInIHwgYWJwTG9jYWxpemF0aW9uXCI+XHJcbiAgICAgICAgICA8L2R4LXRleHQtYm94PlxyXG4gICAgICAgICAgPGR4LWJ1dHRvbiBzdHlsZT1cIm1hcmdpbi10b3A6IDcuNXB4O1wiIGljb249XCJwbHVzXCIgdHlwZT1cImRlZmF1bHRcIiAob25DbGljayk9XCJvblFyQ29kZUNoYW5nZSgpXCI+XHJcbiAgICAgICAgICA8L2R4LWJ1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGR4LWRhdGEtZ3JpZCAjZ3JpZExpbmVzIFxyXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtdC0zXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICBbZGF0YVNvdXJjZV09XCJsaW5lc1wiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgW2NvbHVtbkF1dG9XaWR0aF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtzaG93Qm9yZGVyc109XCJ0cnVlXCI+XHJcbiAgICAgICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJpdGVtQ29kZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbY2FwdGlvbl09XCInVXJldGltWW9uZXRpbWk6OkZpbGxpbmdDb250cm9sLkl0ZW1Db2RlJyB8IGFicExvY2FsaXphdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbYWxsb3dFZGl0aW5nXT1cImZhbHNlXCI+PC9keGktY29sdW1uPlxyXG4gICAgICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwiaXRlbU5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2NhcHRpb25dPVwiJ1VyZXRpbVlvbmV0aW1pOjpGaWxsaW5nQ29udHJvbC5JdGVtTmFtZScgfCBhYnBMb2NhbGl6YXRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2FsbG93RWRpdGluZ109XCJmYWxzZVwiPjwvZHhpLWNvbHVtbj5cclxuICAgICAgICAgIDxkeGktY29sdW1uIGRhdGFGaWVsZD1cImlzQ29udHJvbGxlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbY2FwdGlvbl09XCInVXJldGltWW9uZXRpbWk6OkZpbGxpbmdDb250cm9sLklzQ29udHJvbGxlZCcgfCBhYnBMb2NhbGl6YXRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGU9XCJib29sZWFuXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFthbGxvd0VkaXRpbmddPVwiZmFsc2VcIj48L2R4aS1jb2x1bW4+XHJcbiAgICAgICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJiYXRjaE51bWJlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbY2FwdGlvbl09XCInVXJldGltWW9uZXRpbWk6OkZpbGxpbmdDb250cm9sLkJhdGNoTnVtYmVyJyB8IGFicExvY2FsaXphdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbYWxsb3dFZGl0aW5nXT1cImZhbHNlXCI+PC9keGktY29sdW1uPlxyXG4gICAgICAgIDwvZHgtZGF0YS1ncmlkPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2FicC1wYWdlPlxyXG4iXX0=
|
|
361
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGl0LWZpbGxpbmctY29udHJvbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91cmV0aW0teW9uZXRpbWkvc3JjL2xpYi9jb21wb25lbnRzL2hpdC1maWxsaW5nLWNvbnRyb2wvaGl0LWZpbGxpbmctY29udHJvbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91cmV0aW0teW9uZXRpbWkvc3JjL2xpYi9jb21wb25lbnRzL2hpdC1maWxsaW5nLWNvbnRyb2wvaGl0LWZpbGxpbmctY29udHJvbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUs3RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7Ozs7OztBQU9uRCxNQUFNLE9BQU8sMEJBQTBCO0lBZ0JyQyxZQUNVLE9BQWlDLEVBQ2pDLFlBQWlDLEVBQ2pDLE1BQWM7UUFGZCxZQUFPLEdBQVAsT0FBTyxDQUEwQjtRQUNqQyxpQkFBWSxHQUFaLFlBQVksQ0FBcUI7UUFDakMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQWJ4QixvQkFBZSxHQUFZLEtBQUssQ0FBQztRQUNqQywyQkFBc0IsR0FBWSxLQUFLLENBQUM7UUFDeEMsY0FBUyxHQUFZLEtBQUssQ0FBQztRQUMzQixhQUFRLEdBQVksS0FBSyxDQUFDO1FBQzFCLGVBQVUsR0FBVyxFQUFFLENBQUM7UUFDeEIsZUFBVSxHQUFXLEVBQUUsQ0FBQztRQUN4QixXQUFNLEdBQVcsRUFBRSxDQUFDO1FBQ3BCLFVBQUssR0FBeUIsRUFBRSxDQUFDO1FBQ2pDLHVCQUFrQixHQUFZLEtBQUssQ0FBQyxDQUFDLHFDQUFxQztJQU12RSxDQUFDO0lBRUosUUFBUTtRQUNOLHVCQUF1QjtJQUN6QixDQUFDO0lBRUQsZUFBZTtRQUNiLElB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QixVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNkLElBQUksQ0FBQyxZQUFZLEVBQUUsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3RDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNSLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFlBQVk7UUFDVixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDbkIsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDZCxJQUFJLENBQUMsWUFBWSxFQUFFLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUN0QyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDUixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7O3VIQXZYVSwwQkFBMEI7MkdBQTFCLDBCQUEwQixrV0NadkMsMmpKQStGQTsyRkRuRmEsMEJBQTBCO2tCQUx0QyxTQUFTOytCQUNFLHlCQUF5QjtzS0FLVSxjQUFjO3NCQUExRCxTQUFTO3VCQUFDLGFBQWEsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBQ0EsWUFBWTtzQkFBdEQsU0FBUzt1QkFBQyxXQUFXLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUNFLFFBQVE7c0JBQWxELFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgVmlld0NoaWxkLCBOZ1pvbmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRHhOdW1iZXJCb3hDb21wb25lbnQsIER4VGV4dEJveENvbXBvbmVudCwgRHhEYXRhR3JpZENvbXBvbmVudCB9IGZyb20gJ2RldmV4dHJlbWUtYW5ndWxhcic7XHJcbmltcG9ydCB7IEhpdEZpbGxpbmdDb250cm9sU2VydmljZSB9IGZyb20gJy4uLy4uL2hpdC1wcm94eS9oaXQtZmlsbGluZy1jb250cm9sL2hpdC1maWxsaW5nLWNvbnRyb2wuc2VydmljZSc7XHJcbmltcG9ydCB7IEZpbGxpbmdDb250cm9sTGluZSB9IGZyb20gJy4uLy4uL2hpdC1wcm94eS9oaXQtZmlsbGluZy1jb250cm9sL21vZGVscyc7XHJcbmltcG9ydCB7IENvbmZpcm1hdGlvblNlcnZpY2UgfSBmcm9tICdAYWJwL25nLnRoZW1lLnNoYXJlZCc7XHJcbmltcG9ydCB7IEhpdEhlbHBlciB9IGZyb20gJy4uLy4uL2hpdC1wcm94eS9tb2RlbHMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItaGl0LWZpbGxpbmctY29udHJvbCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2hpdC1maWxsaW5nLWNvbnRyb2wuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2hpdC1maWxsaW5nLWNvbnRyb2wuY29tcG9uZW50LmNzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgSGl0RmlsbGluZ0NvbnRyb2xDb21wb25lbnQge1xyXG4gIEBWaWV3Q2hpbGQoJ2lzRW1yaU5vUmVmJywgeyBzdGF0aWM6IGZhbHNlIH0pIG5tYkJveElzRW1yaU5vOiBEeE51bWJlckJveENvbXBvbmVudDtcclxuICBAVmlld0NoaWxkKCdxckNvZGVSZWYnLCB7IHN0YXRpYzogZmFsc2UgfSkgdHh0Qm94UXJDb2RlOiBEeFRleHRCb3hDb21wb25lbnQ7XHJcbiAgQFZpZXdDaGlsZCgnZ3JpZExpbmVzJywgeyBzdGF0aWM6IGZhbHNlIH0pIGRhdGFHcmlkOiBEeERhdGFHcmlkQ29tcG9uZW50O1xyXG5cclxuICBpc0VtcmlObzogbnVtYmVyO1xyXG4gIHNlYXJjaEJhc2lsZGlNaTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlzRW1yaUJhcmtvZHVHZWNlcmxpTWk6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc0xvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc1NhdmluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGhhdEJpbGdpc2k6IHN0cmluZyA9ICcnO1xyXG4gIGFtYmFsYWpMb3Q6IHN0cmluZyA9ICcnO1xyXG4gIHFyQ29kZTogc3RyaW5nID0gJyc7XHJcbiAgbGluZXM6IEZpbGxpbmdDb250cm9sTGluZVtdID0gW107XHJcbiAgaXNEYXRhTG9hZGVkRnJvbURiOiBib29sZWFuID0gZmFsc2U7IC8vIERCJ2RlbiB2ZXJpIG1pIGdlbGRpIHlva3NhIHllbmkgbWlcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHNlcnZpY2U6IEhpdEZpbGxpbmdDb250cm9sU2VydmljZSxcclxuICAgIHByaXZhdGUgY29uZmlybWF0aW9uOiBDb25maXJtYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZVxyXG4gICkge31cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICAvLyBJbml0aWFsaXphdGlvbiBsb2dpY1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgdGhpcy5mb2N1c09uSXNFbXJpTm8oKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGdldFByb2R1Y3Rpb25PcmRlcigpIHtcclxuICAgIGlmICghdGhpcy5pc0VtcmlObykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5pc0VtcmlCYXJrb2R1R2VjZXJsaU1pID0gZmFsc2U7XHJcbiAgICB0aGlzLnNlYXJjaEJhc2lsZGlNaSA9IHRydWU7XHJcblxyXG4gICAgdGhpcy5zZXJ2aWNlLmdldEZpbGxpbmdDb250cm9sSW5mbyh0aGlzLmlzRW1yaU5vKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiByZXNwb25zZSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlPy5pc1N1Y2Nlc3NmdWwpIHtcclxuICAgICAgICAgIGNvbnN0IHN0YXR1cyA9IChyZXNwb25zZS5pdGVtcz8uc3RhdHVzIHx8ICcnKS50b1N0cmluZygpLnRvVXBwZXJDYXNlKCk7XHJcbiAgICAgICAgICBpZiAoc3RhdHVzID09PSAnUCcpIHtcclxuICAgICAgICAgICAgdGhpcy5jb25maXJtYXRpb24ud2FybignJywgJ0J1IMO8cmV0aW0gc2lwYXJpxZ9pIG9uYXlsYW5tYW3EscWfdMSxciwga29udHJvbCB5YXDEsWxhbWF6LicsIHtcclxuICAgICAgICAgICAgICBoaWRlWWVzQnRuOiB0cnVlLFxyXG4gICAgICAgICAgICAgIGNhbmNlbFRleHQ6ICdLYXBhdCcsXHJcbiAgICAgICAgICAgICAgZGlzbWlzc2libGU6IGZhbHNlLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy5jbGVhckFsbCgpO1xyXG4gICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgdGhpcy5oYXRCaWxnaXNpID0gcmVzcG9uc2UuaXRlbXMudV9IYXQ7XHJcbiAgICAgICAgICB0aGlzLmFtYmFsYWpMb3QgPSByZXNwb25zZS5pdGVtcy51X1RSS0FNQkFMQUpMT1Q7XHJcbiAgICAgICAgICB0aGlzLmxpbmVzID0gcmVzcG9uc2UuaXRlbXMubGluZXM7XHJcbiAgICAgICAgICB0aGlzLmlzRW1yaUJhcmtvZHVHZWNlcmxpTWkgPSB0cnVlO1xyXG4gICAgICAgICAgXHJcbiAgICAgICAgICAvLyBEQidkZW4gdmVyaSBnZWxpcCBnZWxtZWRpxJ9pbmkga29udHJvbCBldCAoZW4gYXogYmlyIHNhdMSxcmRhIGJhdGNoTnVtYmVyIHZhcnNhIERCJ2RlbiBnZWxtacWfdGlyKVxyXG4gICAgICAgICAgdGhpcy5pc0RhdGFMb2FkZWRGcm9tRGIgPSB0aGlzLmxpbmVzLnNvbWUoeCA9PiB4LmJhdGNoTnVtYmVyICYmIHguYmF0Y2hOdW1iZXIudHJpbSgpICE9PSAnJyk7XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmZvY3VzT25RckNvZGUoKTtcclxuICAgICAgICAgIH0sIDEwMCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuaXNFbXJpQmFya29kdUdlY2VybGlNaSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogZSA9PiB7XHJcbiAgICAgICAgdGhpcy5pc0VtcmlCYXJrb2R1R2VjZXJsaU1pID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hCYXNpbGRpTWkgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5jb25maXJtYXRpb24uc3RhdHVzJC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgbmV4dDogKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNsZWFyQWxsKCk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBvblFyQ29kZUNoYW5nZSgpIHtcclxuICAgIGlmICghdGhpcy5xckNvZGUgfHwgdGhpcy5xckNvZGUudHJpbSgpID09PSAnJykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgZGVidWdnZXI7XHJcblxyXG4gICAgY29uc3QgcGFyc2VkID0gSGl0SGVscGVyLnBhcnNlUVIodGhpcy5xckNvZGUpO1xyXG4gICAgaWYgKCFwYXJzZWQpIHtcclxuICAgICAgdGhpcy5jb25maXJtYXRpb24uZXJyb3IoJycsICdHZcOnZXJzaXogUVIga29kIGZvcm1hdMSxIScsIHtcclxuICAgICAgICBoaWRlWWVzQnRuOiB0cnVlLFxyXG4gICAgICAgIGNhbmNlbFRleHQ6ICdLYXBhdCcsXHJcbiAgICAgICAgZGlzbWlzc2libGU6IGZhbHNlLFxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5xckNvZGUgPSAnJztcclxuICAgICAgdGhpcy5mb2N1c1FSSW5wdXQoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEdyaWQnZGUgYnUgaXRlbSfEsSBidWxcclxuICAgIGNvbnN0IGxpbmUgPSB0aGlzLmxpbmVzLmZpbmQoeCA9PiB4Lml0ZW1Db2RlID09PSBwYXJzZWQuY2hlbWljYWxDb2RlKTtcclxuICAgIGlmICghbGluZSkge1xyXG4gICAgICB0aGlzLmNvbmZpcm1hdGlvbi5lcnJvcignJywgYCR7cGFyc2VkLmNoZW1pY2FsQ29kZX0ga29kbHUgw7xyw7xuIGJ1IGnFnyBlbXJpbmRlIGJ1bHVuYW1hZMSxIWAsIHtcclxuICAgICAgICBoaWRlWWVzQnRuOiB0cnVlLFxyXG4gICAgICAgIGNhbmNlbFRleHQ6ICdLYXBhdCcsXHJcbiAgICAgICAgZGlzbWlzc2libGU6IGZhbHNlLFxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5xckNvZGUgPSAnJztcclxuICAgICAgdGhpcy5mb2N1c1FSSW5wdXQoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIMSwbGsgb2t1dG1hIGtvbnRyb2zDvCAtIEhpw6cga29udHJvbCBlZGlsbWVtacWfIHNhdMSxciB2YXJzYSwgYnUgaWxrIG9rdXRtYSBkZW1la3RpclxyXG4gICAgY29uc3QgaXNGaXJzdFNjYW4gPSAhdGhpcy5saW5lcy5zb21lKHggPT4geC5pc0NvbnRyb2xsZWQpO1xyXG4gICAgaWYgKGlzRmlyc3RTY2FuKSB7XHJcbiAgICAgIC8vIMSwbGsgb2t1dG1hIGnDp2luIMO8csO8biBhxJ9hY8SxIHZlIGthbGl0ZSBrb250cm9sw7wgeWFwXHJcbiAgICAgIGNvbnNvbGUubG9nKCfEsGxrIG9rdXRtYSB0ZXNwaXQgZWRpbGRpLCDDvHLDvG4gYcSfYWPEsSBrb250cm9sw7wgeWFwxLFsxLF5b3I6JywgcGFyc2VkLmNoZW1pY2FsQ29kZSk7XHJcbiAgICAgIHRoaXMuc2VydmljZS5oYXNQcm9kdWN0aW9uVHJlZShwYXJzZWQuY2hlbWljYWxDb2RlLCB0aGlzLmlzRW1yaU5vKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdIYXNQcm9kdWN0aW9uVHJlZSByZXNwb25zZTonLCByZXNwb25zZSk7XHJcbiAgICAgICAgICBpZiAocmVzcG9uc2U/LmlzU3VjY2Vzc2Z1bCAmJiByZXNwb25zZS5pdGVtcyA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAvLyDDnHLDvG4gYcSfYWPEsSB2YXIsIGthbGl0ZSBrb250cm9sw7wgeWFwXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCfDnHLDvG4gYcSfYWPEsSBidWx1bmR1LCBrYWxpdGUga29udHJvbMO8IHlhcMSxbMSxeW9yJyk7XHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2tRdWFsaXR5QW5kUHJvY2VzcyhsaW5lLCBwYXJzZWQubG90TnVtYmVyLCBpc0ZpcnN0U2Nhbik7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyDDnHLDvG4gYcSfYWPEsSB5b2ssIGhhdGEgZ8O2c3RlclxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnw5xyw7xuIGHEn2FjxLEgYnVsdW5hbWFkxLEhJyk7XHJcbiAgICAgICAgICAgIHRoaXMuY29uZmlybWF0aW9uLmVycm9yKCcnLCAnxLBsayBva3V0bWEgacWfbGVtaSB5YXLEsSBtYW3DvGwgacOnaW4geWFwxLFsbWFsxLEhJywge1xyXG4gICAgICAgICAgICAgIGhpZGVZZXNCdG46IHRydWUsXHJcbiAgICAgICAgICAgICAgY2FuY2VsVGV4dDogJ0thcGF0JyxcclxuICAgICAgICAgICAgICBkaXNtaXNzaWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLnFyQ29kZSA9ICcnO1xyXG4gICAgICAgICAgICB0aGlzLmZvY3VzUVJJbnB1dCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0hhc1Byb2R1Y3Rpb25UcmVlIGVycm9yOicsIGVycik7XHJcbiAgICAgICAgICB0aGlzLmNvbmZpcm1hdGlvbi5lcnJvcignJywgJ8OccsO8biBhxJ9hY8SxIGtvbnRyb2zDvCB5YXDEsWzEsXJrZW4gaGF0YSBvbHXFn3R1IScsIHtcclxuICAgICAgICAgICAgaGlkZVllc0J0bjogdHJ1ZSxcclxuICAgICAgICAgICAgY2FuY2VsVGV4dDogJ0thcGF0JyxcclxuICAgICAgICAgICAgZGlzbWlzc2libGU6IGZhbHNlLFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICB0aGlzLnFyQ29kZSA9ICcnO1xyXG4gICAgICAgICAgdGhpcy5mb2N1c1FSSW5wdXQoKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIMSwbGsgb2t1dG1hIGRlxJ9pbHNlIGRpcmVrdCBpxZ9sZVxyXG4gICAgICBjb25zb2xlLmxvZygnxLBsayBva3V0bWEgZGXEn2lsLCBkaXJla3QgacWfbGVuaXlvcicpO1xyXG4gICAgICB0aGlzLnByb2Nlc3NRclNjYW4obGluZSwgcGFyc2VkLmxvdE51bWJlcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNoZWNrUXVhbGl0eUFuZFByb2Nlc3MobGluZTogRmlsbGluZ0NvbnRyb2xMaW5lLCBiYXRjaE51bWJlcjogc3RyaW5nLCBpc0ZpcnN0U2NhbjogYm9vbGVhbikge1xyXG4gICAgLy8gS2FsaXRlIGR1cnVtdSBrb250cm9sw7wgeWFwXHJcbiAgICB0aGlzLnNlcnZpY2UuY2hlY2tRdWFsaXR5U3RhdHVzKGJhdGNoTnVtYmVyLCB0aGlzLmlzRW1yaU5vLCBsaW5lLml0ZW1Db2RlKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiByZXNwb25zZSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ0NoZWNrUXVhbGl0eVN0YXR1cyByZXNwb25zZTonLCByZXNwb25zZSk7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlPy5pc1N1Y2Nlc3NmdWwgJiYgcmVzcG9uc2UuaXRlbXMpIHtcclxuICAgICAgICAgIGlmIChyZXNwb25zZS5pdGVtcy5pc0FwcHJvdmVkKSB7XHJcbiAgICAgICAgICAgIC8vIEthbGl0ZSBvbmF5bGFuZMSxLCBva3V0bWF5YSBkZXZhbSBldFxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnS2FsaXRlIGtvbnRyb2zDvCBvbmF5bGFuZMSxLCBva3V0bWF5YSBkZXZhbSBlZGlsaXlvcicpO1xyXG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NRclNjYW4obGluZSwgYmF0Y2hOdW1iZXIsIGlzRmlyc3RTY2FuKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIEthbGl0ZSBSRUQsIGhhdGEgZ8O2c3RlclxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnS2FsaXRlIGtvbnRyb2zDvCByZWRkZWRpbGRpOicsIHJlc3BvbnNlLml0ZW1zLmVycm9yTWVzc2FnZSk7XHJcbiAgICAgICAgICAgIHRoaXMuY29uZmlybWF0aW9uLmVycm9yKCcnLCByZXNwb25zZS5pdGVtcy5lcnJvck1lc3NhZ2UgfHwgJ0thbGl0ZSBrb250cm9sw7wgcmVkZGVkaWxkaSEnLCB7XHJcbiAgICAgICAgICAgICAgaGlkZVllc0J0bjogdHJ1ZSxcclxuICAgICAgICAgICAgICBjYW5jZWxUZXh0OiAnS2FwYXQnLFxyXG4gICAgICAgICAgICAgIGRpc21pc3NpYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMucXJDb2RlID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMuZm9jdXNRUklucHV0KCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vIFNvcmd1IHNvbnVjdSBudWxsIGdlbGRpIHZleWEgYmHFn2FyxLFzxLF6XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnS2FsaXRlIGtvbnRyb2zDvCBzb3JndXN1IHNvbnXDpyBkw7ZuZMO8cm1lZGknKTtcclxuICAgICAgICAgIHRoaXMuY29uZmlybWF0aW9uLmVycm9yKCcnLCAnQnUgbG90IG51bWFyYXPEsSBpw6dpbiBrYWxpdGUgYmlsZ2lzaSBidWx1bmFtYWTEsSEnLCB7XHJcbiAgICAgICAgICAgIGhpZGVZZXNCdG46IHRydWUsXHJcbiAgICAgICAgICAgIGNhbmNlbFRleHQ6ICdLYXBhdCcsXHJcbiAgICAgICAgICAgIGRpc21pc3NpYmxlOiBmYWxzZSxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgdGhpcy5xckNvZGUgPSAnJztcclxuICAgICAgICAgIHRoaXMuZm9jdXNRUklucHV0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0NoZWNrUXVhbGl0eVN0YXR1cyBlcnJvcjonLCBlcnIpO1xyXG4gICAgICAgIHRoaXMuY29uZmlybWF0aW9uLmVycm9yKCcnLCAnS2FsaXRlIGtvbnRyb2zDvCB5YXDEsWzEsXJrZW4gaGF0YSBvbHXFn3R1IScsIHtcclxuICAgICAgICAgIGhpZGVZZXNCdG46IHRydWUsXHJcbiAgICAgICAgICBjYW5jZWxUZXh0OiAnS2FwYXQnLFxyXG4gICAgICAgICAgZGlzbWlzc2libGU6IGZhbHNlLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMucXJDb2RlID0gJyc7XHJcbiAgICAgICAgdGhpcy5mb2N1c1FSSW5wdXQoKTtcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBwcm9jZXNzUXJTY2FuKGxpbmU6IEZpbGxpbmdDb250cm9sTGluZSwgYmF0Y2hOdW1iZXI6IHN0cmluZywgaXNGaXJzdFNjYW46IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgLy8gS29udHJvbCBlZGlsZGkgb2xhcmFrIGnFn2FyZXRsZSB2ZSBwYXJ0aSBudW1hcmFzxLFuxLEgc2V0IGV0XHJcbiAgICBsaW5lLmlzQ29udHJvbGxlZCA9IHRydWU7XHJcbiAgICBpZiAoaXNGaXJzdFNjYW4pIHtcclxuICAgICAgbGluZS5iYXRjaE51bWJlciA9IGJhdGNoTnVtYmVyO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEdyaWQnaSByZWZyZXNoIGV0XHJcbiAgICB0aGlzLmRhdGFHcmlkLmluc3RhbmNlLnJlZnJlc2goKTtcclxuXHJcbiAgICAvLyBRUiBpbnB1dCd1IHRlbWl6bGUgdmUgZm9jdXMgZXRcclxuICAgIHRoaXMucXJDb2RlID0gJyc7XHJcbiAgICB0aGlzLmZvY3VzUVJJbnB1dCgpO1xyXG4gIH1cclxuXHJcbiAgc2F2ZSgpIHtcclxuICAgIGlmICghdGhpcy5pc0VtcmlObyB8fCB0aGlzLmxpbmVzLmxlbmd0aCA9PT0gMCB8fCB0aGlzLmlzU2F2aW5nKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBUw7xtIGtvbnRyb2xsZXIgdGFtYW1sYW5txLHFnyBtxLEga29udHJvbMO8XHJcbiAgICBpZiAoIXRoaXMubGluZXMuZXZlcnkoeCA9PiB4LmlzQ29udHJvbGxlZCkpIHtcclxuICAgICAgdGhpcy5jb25maXJtYXRpb24ud2FybignJywgJ1TDvG0ga29udHJvbGxlciB0YW1hbWxhbm1hZGFuIGthecSxdCBpxZ9sZW1pIHlhcMSxbGFtYXouJywge1xyXG4gICAgICAgIGhpZGVZZXNCdG46IHRydWUsXHJcbiAgICAgICAgY2FuY2VsVGV4dDogJ0thcGF0JyxcclxuICAgICAgICBkaXNtaXNzaWJsZTogZmFsc2UsXHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc2F2ZURhdGEgPSB7XHJcbiAgICAgIHdvcmtPcmRlck5vOiB0aGlzLmlzRW1yaU5vLFxyXG4gICAgICBsaW5lczogdGhpcy5saW5lcy5tYXAobGluZSA9PiAoe1xyXG4gICAgICAgIGxpbmVOdW06IGxpbmUubGluZU51bSxcclxuICAgICAgICBpdGVtQ29kZTogbGluZS5pdGVtQ29kZSxcclxuICAgICAgICBpc0NvbnRyb2xsZWQ6IGxpbmUuaXNDb250cm9sbGVkLFxyXG4gICAgICAgIGJhdGNoTnVtYmVyOiBsaW5lLmJhdGNoTnVtYmVyIHx8ICcnXHJcbiAgICAgIH0pKVxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLmlzU2F2aW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuc2VydmljZS5zYXZlRmlsbGluZ0NvbnRyb2woc2F2ZURhdGEpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IHJlc3BvbnNlID0+IHtcclxuICAgICAgICBpZiAocmVzcG9uc2U/LmlzU3VjY2Vzc2Z1bCkge1xyXG4gICAgICAgICAgdGhpcy5jb25maXJtYXRpb24uc3VjY2VzcygnJywgJ0thecSxdCBiYcWfYXLEsWzEsSEnLCB7XHJcbiAgICAgICAgICAgIGhpZGVZZXNCdG46IHRydWUsXHJcbiAgICAgICAgICAgIGNhbmNlbFRleHQ6ICdLYXBhdCcsXHJcbiAgICAgICAgICAgIGRpc21pc3NpYmxlOiBmYWxzZSxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgdGhpcy5jbGVhckFsbCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmlzU2F2aW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IGUgPT4ge1xyXG4gICAgICAgIHRoaXMuaXNTYXZpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuY29uZmlybWF0aW9uLnN0YXR1cyQuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6ICgpID0+IHtcclxuICAgICAgICAgICAgLy8gSGF0YSBzb25yYXPEsSBpxZ9sZW1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNsZWFyQWxsKCkge1xyXG4gICAgdGhpcy5pc0VtcmlCYXJrb2R1R2VjZXJsaU1pID0gZmFsc2U7XHJcbiAgICB0aGlzLnNlYXJjaEJhc2lsZGlNaSA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc0VtcmlObyA9IG51bGw7XHJcbiAgICB0aGlzLmhhdEJpbGdpc2kgPSAnJztcclxuICAgIHRoaXMuYW1iYWxhakxvdCA9ICcnO1xyXG4gICAgdGhpcy5xckNvZGUgPSAnJztcclxuICAgIHRoaXMubGluZXMgPSBbXTtcclxuICAgIHRoaXMuaXNEYXRhTG9hZGVkRnJvbURiID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzU2F2aW5nID0gZmFsc2U7XHJcbiAgICB0aGlzLmZvY3VzT25Jc0VtcmlObygpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHNob3dLYXphbkRlZ2lzaW1pQnV0dG9uKCk6IGJvb2xlYW4ge1xyXG4gICAgLy8gU2FkZWNlIERCJ2RlbiB2ZXJpIGdlbG1pxZ9zZSwgacWfIGVtcmkgb2t1dHVsbXXFnyB2ZSB0w7xtIHNhdMSxcmxhciBrb250cm9sIGVkaWxtacWfIGlzZSBnw7ZzdGVyXHJcbiAgICByZXR1cm4gdGhpcy5pc0RhdGFMb2FkZWRGcm9tRGIgJiZcclxuICAgICAgICAgICB0aGlzLmlzRW1yaUJhcmtvZHVHZWNlcmxpTWkgJiYgXHJcbiAgICAgICAgICAgdGhpcy5saW5lcy5sZW5ndGggPiAwICYmIFxyXG4gICAgICAgICAgIHRoaXMubGluZXMuZXZlcnkoeCA9PiB4LmlzQ29udHJvbGxlZCk7XHJcbiAgfVxyXG5cclxuICBnZXQgaXNTYXZlQnV0dG9uRGlzYWJsZWQoKTogYm9vbGVhbiB7XHJcbiAgICAvLyDEsMWfIGVtcmkgeW9rc2EgdmV5YSBzYXTEsXIgeW9rc2EgdmV5YSB0w7xtIHNhdMSxcmxhciBrb250cm9sIGVkaWxtZW1pxZ9zZSB2ZXlhIGtheWRldG1lIGnFn2xlbWkgZGV2YW0gZWRpeW9yc2EgZGlzYWJsZVxyXG4gICAgcmV0dXJuICF0aGlzLmlzRW1yaU5vIHx8IFxyXG4gICAgICAgICAgIHRoaXMubGluZXMubGVuZ3RoID09PSAwIHx8IFxyXG4gICAgICAgICAgICF0aGlzLmxpbmVzLmV2ZXJ5KHggPT4geC5pc0NvbnRyb2xsZWQpIHx8XHJcbiAgICAgICAgICAgdGhpcy5pc1NhdmluZztcclxuICB9XHJcblxyXG4gIGthemFuRGVnaXNpbWkoKSB7XHJcbiAgICAvLyDEsGxrIHNvcnU6IEJ1IGthemFuYSBhaXQgdMO8bSDDvHJldGltZGVuIGdpcmnFn2xlcmkgdGFtYW1sYWTEsW7EsXogbcSxP1xyXG4gICAgdGhpcy5jb25maXJtYXRpb24ud2FybihcclxuICAgICAgJycsXHJcbiAgICAgICdCdSBrYXphbmEgYWl0IHTDvG0gw7xyZXRpbWRlbiBnaXJpxZ9sZXJpIHRhbWFtbGFkxLFuxLF6IG3EsT8nLFxyXG4gICAgICB7XHJcbiAgICAgICAgeWVzVGV4dDogJ0V2ZXQnLFxyXG4gICAgICAgIGNhbmNlbFRleHQ6ICdIYXnEsXInXHJcbiAgICAgIH1cclxuICAgICkuc3Vic2NyaWJlKHN0YXR1cyA9PiB7XHJcbiAgICAgIGlmIChzdGF0dXMgPT09ICdjb25maXJtJykge1xyXG4gICAgICAgIC8vIMSwa2luY2kgc29ydTogS2F6YW4gZGXEn2nFn2ltaSDDtm5jZXNpbmRlIGthemFuIFlNIGZpcmUgw6fEsWvEscWfxLEgZ2Vyw6dla2xlxZ90aXJpbGRpIG1pP1xyXG4gICAgICAgIHRoaXMuY29uZmlybWF0aW9uLndhcm4oXHJcbiAgICAgICAgICAnJyxcclxuICAgICAgICAgICdLYXphbiBkZcSfacWfaW1pIMO2bmNlc2luZGUga2F6YW4gWU0gZmlyZSDDp8Sxa8SxxZ/EsSBnZXLDp2VrbGXFn3RpcmlsZGkgbWk/JyxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgeWVzVGV4dDogJ0V2ZXQnLFxyXG4gICAgICAgICAgICBjYW5jZWxUZXh0OiAnSGF5xLFyJ1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICkuc3Vic2NyaWJlKHN0YXR1czIgPT4ge1xyXG4gICAgICAgICAgaWYgKHN0YXR1czIgPT09ICdjb25maXJtJykge1xyXG4gICAgICAgICAgICAvLyDDnMOnw7xuY8O8IHNvcnU6IEJpbGXFn2VuIGZpcmUgw6fEsWvEscWfxLEgZ2Vyw6dla2xlxZ90aXJpbGRpIG1pP1xyXG4gICAgICAgICAgICB0aGlzLmNvbmZpcm1hdGlvbi53YXJuKFxyXG4gICAgICAgICAgICAgICcnLFxyXG4gICAgICAgICAgICAgICdCaWxlxZ9lbiBmaXJlIMOnxLFrxLHFn8SxIGdlcsOnZWtsZcWfdGlyaWxkaSBtaT8nLFxyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHllc1RleHQ6ICdFdmV0JyxcclxuICAgICAgICAgICAgICAgIGNhbmNlbFRleHQ6ICdIYXnEsXInXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApLnN1YnNjcmliZShzdGF0dXMzID0+IHtcclxuICAgICAgICAgICAgICBpZiAoc3RhdHVzMyA9PT0gJ2NvbmZpcm0nKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBUw7xtIG9uYXlsYXIgdmVyaWxkaSwga2F6YW4gZGXEn2nFn2ltaSBpxZ9sZW1pbmkgZ2Vyw6dla2xlxZ90aXJcclxuICAgICAgICAgICAgICAgIC8vIFTDvG0gc2F0xLFybGFyxLFuIElzQ29udHJvbGxlZCBhbGFuxLFuxLEgZmFsc2UgeWFwXHJcbiAgICAgICAgICAgICAgICB0aGlzLmxpbmVzLmZvckVhY2gobGluZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGxpbmUuaXNDb250cm9sbGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgIGxpbmUuYmF0Y2hOdW1iZXIgPSAnJztcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAvLyBHcmlkJ2kgcmVmcmVzaCBldFxyXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhR3JpZC5pbnN0YW5jZS5yZWZyZXNoKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzRGF0YUxvYWRlZEZyb21EYiA9IGZhbHNlOyAvLyBBcnTEsWsgeWVuaSB2ZXJpIGdpcmlsZWNla1xyXG4gICAgICAgICAgICAgICAgLy8gUVIgaW5wdXQnYSBmb2N1cyBldFxyXG4gICAgICAgICAgICAgICAgdGhpcy5mb2N1c09uUXJDb2RlKCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIC8vIHN0YXR1czMgIT09ICdjb25maXJtJyBpc2Ugw7zDp8O8bmPDvCBzb3J1eWEgaGF5xLFyIGRlbmRpLCBpxZ9sZW0gaXB0YWxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAvLyBzdGF0dXMyICE9PSAnY29uZmlybScgaXNlIGlraW5jaSBzb3J1eWEgaGF5xLFyIGRlbmRpLCBpxZ9sZW0gaXB0YWxcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICAvLyBzdGF0dXMgIT09ICdjb25maXJtJyBpc2UgaWxrIHNvcnV5YSBoYXnEsXIgZGVuZGksIGnFn2xlbSBpcHRhbFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBmb2N1c09uSXNFbXJpTm8oKSB7XHJcbiAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLm5tYkJveElzRW1yaU5vPy5pbnN0YW5jZS5mb2N1cygpO1xyXG4gICAgICB9LCAwKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZm9jdXNPblFyQ29kZSgpIHtcclxuICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMudHh0Qm94UXJDb2RlPy5pbnN0YW5jZS5mb2N1cygpO1xyXG4gICAgICB9LCAwKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZm9jdXNRUklucHV0KCkge1xyXG4gICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy50eHRCb3hRckNvZGU/Lmluc3RhbmNlLmZvY3VzKCk7XHJcbiAgICAgIH0sIDApO1xyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcbiIsIjxhYnAtcGFnZSBbYnJlYWRjcnVtYl09XCJmYWxzZVwiPlxyXG4gIDxhYnAtcGFnZS10b29sYmFyLWNvbnRhaW5lciBjbGFzcz1cImNvbFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICA8aDMgY2xhc3M9XCJwYWdlLXRpdGxlXCI+XHJcbiAgICAgICAge3sgJ1VyZXRpbVlvbmV0aW1pOjpGaWxsaW5nQ29udHJvbC5UaXRsZScgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgPC9oMz5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cInJvdyB0ZXh0LWxnLWVuZCBwdC0yXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3MgYnRuLXNtXCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJzYXZlKClcIiBbZGlzYWJsZWRdPVwiaXNTYXZlQnV0dG9uRGlzYWJsZWRcIj5cclxuICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtc2F2ZSBtZS0xXCI+PC9pPlxyXG4gICAgICAgICAge3sgJ1VyZXRpbVlvbmV0aW1pOjpGaWxsaW5nQ29udHJvbC5TYXZlJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0zXCIgKm5nSWY9XCJzaG93S2F6YW5EZWdpc2ltaUJ1dHRvblwiPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWluZm8gYnRuLXNtXCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJrYXphbkRlZ2lzaW1pKClcIj5cclxuICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtcmVjeWNsZSBtZS0xXCI+PC9pPlxyXG4gICAgICAgICAgS2F6YW4gRGXEn2nFn2ltaVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0zXCI+XHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4td2FybmluZyBidG4tc21cIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImNsZWFyQWxsKClcIj5cclxuICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtYnJvb20gbWUtMVwiPjwvaT5cclxuICAgICAgICAgIHt7ICdVcmV0aW1Zb25ldGltaTo6RmlsbGluZ0NvbnRyb2wuQ2xlYW4nIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9hYnAtcGFnZS10b29sYmFyLWNvbnRhaW5lcj5cclxuICA8ZGl2IGNsYXNzPVwiY2FyZCBtdC0yXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5XCIgc3R5bGU9XCJoZWlnaHQ6IGNhbGMoMTAwdmggLSAyNDFweCk7IG92ZXJmbG93OiBhdXRvO1wiPlxyXG4gICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjtcIj5cclxuICAgICAgICA8ZHgtbnVtYmVyLWJveCAjaXNFbXJpTm9SZWYgY2xhc3M9XCJtZS0xXCIgc3R5bGU9XCJ3aWR0aDoxMDAlO1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidVcmV0aW1Zb25ldGltaTo6RmlsbGluZ0NvbnRyb2wuV29ya09yZGVyTm8nIHwgYWJwTG9jYWxpemF0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICBbKHZhbHVlKV09XCJpc0VtcmlOb1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgKG9uQ2hhbmdlKT1cImdldFByb2R1Y3Rpb25PcmRlcigpXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgKG9uRW50ZXJLZXkpPVwiZ2V0UHJvZHVjdGlvbk9yZGVyKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJzZWFyY2hCYXNpbGRpTWkgfHwgaXNFbXJpQmFya29kdUdlY2VybGlNaVwiPlxyXG4gICAgICAgIDwvZHgtbnVtYmVyLWJveD5cclxuICAgICAgICA8ZHgtYnV0dG9uIHN0eWxlPVwibWFyZ2luLXRvcDogNy41cHg7XCIgXHJcbiAgICAgICAgICAgICAgICAgICBpY29uPVwic2VhcmNoXCIgXHJcbiAgICAgICAgICAgICAgICAgICB0eXBlPVwiZGVmYXVsdFwiIFxyXG4gICAgICAgICAgICAgICAgICAgKG9uQ2xpY2spPVwiZ2V0UHJvZHVjdGlvbk9yZGVyKClcIlxyXG4gICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInNlYXJjaEJhc2lsZGlNaSB8fCBpc0VtcmlCYXJrb2R1R2VjZXJsaU1pXCI+XHJcbiAgICAgICAgPC9keC1idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cIm10LTNcIiAqbmdJZj1cImlzRW1yaUJhcmtvZHVHZWNlcmxpTWlcIj5cclxuICAgICAgICA8ZHgtdGV4dC1ib3ggc3R5bGU9XCJ3aWR0aDoxMDAlO1wiIFxyXG4gICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ1VyZXRpbVlvbmV0aW1pOjpGaWxsaW5nQ29udHJvbC5MaW5lSW5mbycgfCBhYnBMb2NhbGl6YXRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICBbKHZhbHVlKV09XCJoYXRCaWxnaXNpXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ0cnVlXCI+XHJcbiAgICAgICAgPC9keC10ZXh0LWJveD5cclxuXHJcbiAgICAgICAgICA8ZHgtdGV4dC1ib3ggc3R5bGU9XCJ3aWR0aDoxMDAlO1wiIFxyXG4gICAgICAgICAgICAgICAgICAgICBsYWJlbD1cIkFtYmFsYWogTG90XCJcclxuICAgICAgICAgICAgICAgICAgICAgWyh2YWx1ZSldPVwiYW1iYWxhakxvdFwiIFxyXG4gICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwidHJ1ZVwiPlxyXG4gICAgICAgIDwvZHgtdGV4dC1ib3g+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtdC0zXCIgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyO1wiPlxyXG4gICAgICAgICAgPGR4LXRleHQtYm94ICNxckNvZGVSZWYgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDoxMDAlO1wiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWUtMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidVcmV0aW1Zb25ldGltaTo6RmlsbGluZ0NvbnRyb2wuUVJDb2RlJyB8IGFicExvY2FsaXphdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgWyh2YWx1ZSldPVwicXJDb2RlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAob25FbnRlcktleSk9XCJvblFyQ29kZUNoYW5nZSgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1VyZXRpbVlvbmV0aW1pOjpGaWxsaW5nQ29udHJvbC5RUkNvZGUuUGxhY2Vob2xkZXInIHwgYWJwTG9jYWxpemF0aW9uXCI+XHJcbiAgICAgICAgICA8L2R4LXRleHQtYm94PlxyXG4gICAgICAgICAgPGR4LWJ1dHRvbiBzdHlsZT1cIm1hcmdpbi10b3A6IDcuNXB4O1wiIGljb249XCJwbHVzXCIgdHlwZT1cImRlZmF1bHRcIiAob25DbGljayk9XCJvblFyQ29kZUNoYW5nZSgpXCI+XHJcbiAgICAgICAgICA8L2R4LWJ1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGR4LWRhdGEtZ3JpZCAjZ3JpZExpbmVzIFxyXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtdC0zXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICBbZGF0YVNvdXJjZV09XCJsaW5lc1wiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgW2NvbHVtbkF1dG9XaWR0aF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtzaG93Qm9yZGVyc109XCJ0cnVlXCI+XHJcbiAgICAgICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJpdGVtQ29kZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbY2FwdGlvbl09XCInVXJldGltWW9uZXRpbWk6OkZpbGxpbmdDb250cm9sLkl0ZW1Db2RlJyB8IGFicExvY2FsaXphdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbYWxsb3dFZGl0aW5nXT1cImZhbHNlXCI+PC9keGktY29sdW1uPlxyXG4gICAgICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwiaXRlbU5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2NhcHRpb25dPVwiJ1VyZXRpbVlvbmV0aW1pOjpGaWxsaW5nQ29udHJvbC5JdGVtTmFtZScgfCBhYnBMb2NhbGl6YXRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2FsbG93RWRpdGluZ109XCJmYWxzZVwiPjwvZHhpLWNvbHVtbj5cclxuICAgICAgICAgIDxkeGktY29sdW1uIGRhdGFGaWVsZD1cImlzQ29udHJvbGxlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbY2FwdGlvbl09XCInVXJldGltWW9uZXRpbWk6OkZpbGxpbmdDb250cm9sLklzQ29udHJvbGxlZCcgfCBhYnBMb2NhbGl6YXRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGU9XCJib29sZWFuXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFthbGxvd0VkaXRpbmddPVwiZmFsc2VcIj48L2R4aS1jb2x1bW4+XHJcbiAgICAgICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJiYXRjaE51bWJlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbY2FwdGlvbl09XCInVXJldGltWW9uZXRpbWk6OkZpbGxpbmdDb250cm9sLkJhdGNoTnVtYmVyJyB8IGFicExvY2FsaXphdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbYWxsb3dFZGl0aW5nXT1cImZhbHNlXCI+PC9keGktY29sdW1uPlxyXG4gICAgICAgIDwvZHgtZGF0YS1ncmlkPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2FicC1wYWdlPlxyXG4iXX0=
|