@hitsoft/fbdocumentflow 0.0.1 → 0.0.2

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.
@@ -7,18 +7,19 @@ import * as i1 from "../../../proxy/document-transfers";
7
7
  import * as i2 from "../../../proxy/sap-company-profiles";
8
8
  import * as i3 from "@angular/router";
9
9
  import * as i4 from "@abp/ng.theme.shared";
10
- import * as i5 from "@angular/common";
11
- import * as i6 from "@angular/forms";
12
- import * as i7 from "devextreme-angular";
13
- import * as i8 from "devextreme-angular/ui/nested";
14
- import * as i9 from "devextreme-angular/core";
15
- import * as i10 from "@abp/ng.core";
10
+ import * as i5 from "@abp/ng.core";
11
+ import * as i6 from "@angular/common";
12
+ import * as i7 from "@angular/forms";
13
+ import * as i8 from "devextreme-angular";
14
+ import * as i9 from "devextreme-angular/ui/nested";
15
+ import * as i10 from "devextreme-angular/core";
16
16
  export class HitDocumentTransferComponent {
17
- constructor(service, companyService, router, confirmation) {
17
+ constructor(service, companyService, router, confirmation, localization) {
18
18
  this.service = service;
19
19
  this.companyService = companyService;
20
20
  this.router = router;
21
21
  this.confirmation = confirmation;
22
+ this.localization = localization;
22
23
  this.companies = [];
23
24
  // Aktarıma uygun müşteri faturaları - Proje/NumAtCard/Belge No vb. daraltma tablonun kendi sütun
24
25
  // filtreleriyle yapılır.
@@ -33,24 +34,15 @@ export class HitDocumentTransferComponent {
33
34
  // Kaynak HER ZAMAN bir Müşteri Faturasıdır (OINV) - etiket bunu netleştirir (kullanıcı geri
34
35
  // bildirimiyle netleştirildi). İşlem Geçmişi tablosundaki "Hedef Belge Durumu" sütununda da (kullanıcı
35
36
  // isteğiyle) AYNI etiketler kullanılır.
36
- this.sourceDocumentLifecycleOptions = [
37
- { value: SapDocumentLifecycle.Posted, label: 'Kayıtlı Müşteri Faturası' },
38
- { value: SapDocumentLifecycle.Draft, label: 'Taslak Müşteri Faturası' },
39
- ];
37
+ this.sourceDocumentLifecycleOptions = [];
40
38
  // İşlem Geçmişi - daha önce başlatılmış (işlem bekliyor/devam eden/tamamlanan/hatalı/iptal edilen) aktarımlar.
41
39
  // "Kapat"/"Listeye Dön" sonrası kullanıcının bir zincire tekrar dönüp bakabilmesi için.
42
40
  this.isTransfersLoading = false;
43
41
  this.transfers = [];
44
42
  this.isHistoryExpanded = true;
45
- // Durum sütununun header-filter/filter-row açılır listesinde okunabilir Türkçe etiketler gösterebilmesi
43
+ // Durum sütununun header-filter/filter-row açılır listesinde okunabilir etiketler gösterebilmesi
46
44
  // için (aksi halde DevExtreme ham sayısal enum değerlerini - 0/1/2/3/4 - listeler).
47
- this.transferStatusLookup = [
48
- { value: 0, text: 'İşlem Bekliyor' },
49
- { value: 1, text: 'Devam Ediyor' },
50
- { value: 2, text: 'Tamamlandı' },
51
- { value: 3, text: 'Hatalı' },
52
- { value: 4, text: 'İptal Edildi' },
53
- ];
45
+ this.transferStatusLookup = [];
54
46
  this.eligibleInvoicesRequestId = 0;
55
47
  this.transfersRequestId = 0;
56
48
  // Bu menü için üç farklı yaklaşım denendi ve hepsi DevExtreme grid hücresi içinde başarısız oldu:
@@ -65,6 +57,17 @@ export class HitDocumentTransferComponent {
65
57
  // kanıtlanmış tekli "İşlemler" butonuyla (actionsTemplate) birebir aynı, basit (click) mekanizması.
66
58
  this.openActionsRow = null;
67
59
  this.actionsMenuPosition = { top: 0, left: 0 };
60
+ this.sourceDocumentLifecycleOptions = [
61
+ { value: SapDocumentLifecycle.Posted, label: this.localization.instant('FBDocumentFlow::DocumentLifecycle:Posted') },
62
+ { value: SapDocumentLifecycle.Draft, label: this.localization.instant('FBDocumentFlow::DocumentLifecycle:Draft') },
63
+ ];
64
+ this.transferStatusLookup = [
65
+ { value: 0, text: this.localization.instant('FBDocumentFlow::TransferStatus:Pending') },
66
+ { value: 1, text: this.localization.instant('FBDocumentFlow::TransferStatus:InProgress') },
67
+ { value: 2, text: this.localization.instant('FBDocumentFlow::TransferStatus:Completed') },
68
+ { value: 3, text: this.localization.instant('FBDocumentFlow::TransferStatus:Failed') },
69
+ { value: 4, text: this.localization.instant('FBDocumentFlow::TransferStatus:Cancelled') },
70
+ ];
68
71
  }
69
72
  ngOnInit() {
70
73
  this.companyService.getList({ maxResultCount: 1000, skipCount: 0, isActive: true }).subscribe(result => {
@@ -119,11 +122,21 @@ export class HitDocumentTransferComponent {
119
122
  this.transfers = result.items;
120
123
  });
121
124
  }
122
- invoiceStatusLabel(row) {
125
+ invoiceStatusVariant(row) {
123
126
  if (row.targetHasDuplicateNumAtCard) {
124
- return 'Hedefte mevcut';
127
+ return 'duplicate';
128
+ }
129
+ return row.isResolved ? 'resolved' : 'unresolved';
130
+ }
131
+ invoiceStatusLabel(row) {
132
+ switch (this.invoiceStatusVariant(row)) {
133
+ case 'duplicate':
134
+ return this.localization.instant('FBDocumentFlow::InvoiceStatus:AlreadyAtTarget');
135
+ case 'resolved':
136
+ return this.localization.instant('FBDocumentFlow::InvoiceStatus:Transferable');
137
+ default:
138
+ return this.localization.instant('FBDocumentFlow::InvoiceStatus:NoMapping');
125
139
  }
126
- return row.isResolved ? 'Aktarılabilir' : 'Eşleştirme yok';
127
140
  }
128
141
  transferStatusLabel(status) {
129
142
  return this.transferStatusLookup.find(s => s.value === status)?.text ?? String(status);
@@ -135,9 +148,10 @@ export class HitDocumentTransferComponent {
135
148
  if (existing) {
136
149
  const creationDate = existing.creationTime ? new Date(existing.creationTime).toLocaleString('tr-TR') : '';
137
150
  this.confirmation
138
- .warn(`Bu belge (${row.docNum}) için zaten bir taslak aktarım var (oluşturulma: ${creationDate}).`, 'FBDocumentFlow::AreYouSure', {
139
- yesText: 'Evet, Aç',
140
- cancelText: 'Hayır, Yeni Oluştur',
151
+ .warn('FBDocumentFlow::ExistingDraftTransferFound', 'FBDocumentFlow::AreYouSure', {
152
+ messageLocalizationParams: [String(row.docNum), creationDate],
153
+ yesText: 'FBDocumentFlow::YesOpenIt',
154
+ cancelText: 'FBDocumentFlow::NoCreateNew',
141
155
  })
142
156
  .subscribe(status => {
143
157
  if (status === Confirmation.Status.confirm) {
@@ -229,13 +243,13 @@ export class HitDocumentTransferComponent {
229
243
  this.isHistoryExpanded = !this.isHistoryExpanded;
230
244
  }
231
245
  }
232
- HitDocumentTransferComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: HitDocumentTransferComponent, deps: [{ token: i1.DocumentTransferService }, { token: i2.SapCompanyProfileService }, { token: i3.Router }, { token: i4.ConfirmationService }], target: i0.ɵɵFactoryTarget.Component });
233
- HitDocumentTransferComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: HitDocumentTransferComponent, selector: "hit-document-transfer", host: { listeners: { "document:click": "closeActionsMenu()" } }, ngImport: i0, template: "<div class=\"card mb-3\">\n <div class=\"card-header py-3\">\n <h5 class=\"card-title mb-0\">{{ 'FBDocumentFlow::Menu:DocumentTransfers' | abpLocalization }}</h5>\n </div>\n <div class=\"card-body pt-3\">\n <div class=\"row g-3 align-items-end mb-3\">\n <div class=\"col-md-4\">\n <label class=\"form-label\">Kaynak \u015Eirket</label>\n <select class=\"form-select\" [(ngModel)]=\"filterSourceCompanyId\" (ngModelChange)=\"search()\">\n <option *ngFor=\"let c of companies\" [ngValue]=\"c.id\">{{ c.companyName }}</option>\n </select>\n </div>\n <div class=\"col-md-3\">\n <label class=\"form-label\">Kaynak Belge Durumu</label>\n <select class=\"form-select\" [(ngModel)]=\"sourceDocumentLifecycle\" (ngModelChange)=\"search()\">\n <option *ngFor=\"let o of sourceDocumentLifecycleOptions\" [ngValue]=\"o.value\">{{ o.label }}</option>\n </select>\n </div>\n <div class=\"col-auto\">\n <button class=\"btn btn-outline-primary\" (click)=\"search()\" [disabled]=\"isListLoading || isTransfersLoading\" title=\"Listeyi yenile\">\n <i class=\"fa fa-refresh me-1\"></i>Yenile\n </button>\n </div>\n </div>\n\n <h6 class=\"mb-2\">Aktar\u0131ma Uygun M\u00FC\u015Fteri Faturalar\u0131</h6>\n <small class=\"text-muted d-block mb-2\">Belge No, NumAtCard, Proje vb. ile daraltmak i\u00E7in tablo ba\u015Fl\u0131klar\u0131ndaki arama kutular\u0131n\u0131 kullan\u0131n.</small>\n\n <div *ngIf=\"isListLoading\" class=\"text-center py-5\">\n <div class=\"spinner-border text-primary\" role=\"status\"></div>\n <div class=\"mt-2 text-muted\">Faturalar SAP'tan y\u00FCkleniyor...</div>\n </div>\n\n <dx-data-grid\n *ngIf=\"!isListLoading\"\n [dataSource]=\"eligibleInvoices\"\n [showBorders]=\"true\"\n [showRowLines]=\"true\"\n [columnAutoWidth]=\"true\"\n [height]=\"'45vh'\"\n [keyboardNavigation]=\"{ enabled: false }\"\n >\n <dxo-paging [pageSize]=\"50\"></dxo-paging>\n <dxo-pager [visible]=\"true\" [showInfo]=\"true\" [showNavigationButtons]=\"true\"></dxo-pager>\n <dxo-filter-row [visible]=\"true\"></dxo-filter-row>\n <dxo-header-filter [visible]=\"true\"></dxo-header-filter>\n\n <dxi-column caption=\"\u0130\u015Flemler\" cellTemplate=\"actionsTemplate\" [width]=\"100\" [allowFiltering]=\"false\" [allowSorting]=\"false\"></dxi-column>\n <dxi-column dataField=\"docNum\" caption=\"Belge No\" dataType=\"number\" sortOrder=\"desc\" [width]=\"100\"></dxi-column>\n <dxi-column dataField=\"numAtCard\" caption=\"NumAtCard\" [width]=\"140\"></dxi-column>\n <dxi-column dataField=\"projectCode\" caption=\"Proje\" [width]=\"90\"></dxi-column>\n <dxi-column dataField=\"cardCode\" caption=\"OINV.CardCode\" [width]=\"140\"></dxi-column>\n <dxi-column dataField=\"targetCompanyName\" caption=\"Hedef \u015Eirket\"></dxi-column>\n <dxi-column dataField=\"currency\" caption=\"D\u00F6viz\" [width]=\"80\"></dxi-column>\n <dxi-column dataField=\"statusLabel\" caption=\"Durum\" cellTemplate=\"statusTemplate\" [width]=\"130\"></dxi-column>\n\n <div *dxTemplate=\"let cell of 'actionsTemplate'\">\n <button\n class=\"btn btn-sm btn-outline-primary\"\n (click)=\"openTransferPage(cell.data); $event.target.blur()\"\n [disabled]=\"!cell.data.isResolved || cell.data.targetHasDuplicateNumAtCard\"\n >\n \u0130\u015Flemler\n </button>\n </div>\n\n <div *dxTemplate=\"let cell of 'statusTemplate'\" class=\"d-flex flex-column align-items-start py-2\">\n <span\n class=\"badge\"\n [class.bg-success]=\"invoiceStatusLabel(cell.data) === 'Aktar\u0131labilir'\"\n [class.bg-secondary]=\"invoiceStatusLabel(cell.data) === 'Hedefte mevcut'\"\n [class.bg-warning]=\"invoiceStatusLabel(cell.data) === 'E\u015Fle\u015Ftirme yok'\"\n >\n {{ invoiceStatusLabel(cell.data) }}\n </span>\n <button\n *ngIf=\"!cell.data.isResolved\"\n type=\"button\"\n class=\"btn btn-outline-warning btn-sm mt-2 py-0 px-2\"\n style=\"font-size: 0.72rem\"\n (click)=\"goToPartnerMapping(cell.data.cardCode, cell.data.cardName)\"\n title=\"Muhatap E\u015Fle\u015Ftirmeleri ekran\u0131na git\"\n >\n <i class=\"fa fa-link me-1\"></i>E\u015Fle\u015Ftir\n </button>\n </div>\n </dx-data-grid>\n\n <small class=\"text-muted d-block mt-2\">\n \"Hedefte mevcut\" bilgisi, kaynak OINV.NumAtCard de\u011Ferinin hedef \u015Firkette OPCH.NumAtCard alan\u0131nda bulunmas\u0131 halinde g\u00F6sterilir.\n </small>\n </div>\n</div>\n\n<div class=\"card\">\n <div class=\"card-header py-3\" role=\"button\" (click)=\"toggleHistory()\">\n <div class=\"d-flex justify-content-between align-items-center\">\n <h5 class=\"card-title mb-0\">\u0130\u015Flem Ge\u00E7mi\u015Fi</h5>\n <i class=\"fa\" [class.fa-chevron-up]=\"isHistoryExpanded\" [class.fa-chevron-down]=\"!isHistoryExpanded\"></i>\n </div>\n </div>\n <div class=\"card-body pt-3\" [hidden]=\"!isHistoryExpanded\">\n <small class=\"text-muted d-block mb-2\">Se\u00E7ili kaynak \u015Firket i\u00E7in daha \u00F6nce ba\u015Flat\u0131lm\u0131\u015F aktar\u0131mlar (i\u015Flem bekliyor, devam eden, tamamlanan, hatal\u0131, iptal edilen).</small>\n\n <div *ngIf=\"isTransfersLoading\" class=\"text-center py-5\">\n <div class=\"spinner-border text-primary\" role=\"status\"></div>\n <div class=\"mt-2 text-muted\">Y\u00FCkleniyor...</div>\n </div>\n\n <dx-data-grid\n *ngIf=\"!isTransfersLoading\"\n [dataSource]=\"transfers\"\n [showBorders]=\"true\"\n [showRowLines]=\"true\"\n [columnAutoWidth]=\"true\"\n [height]=\"'40vh'\"\n [keyboardNavigation]=\"{ enabled: false }\"\n >\n <dxo-paging [pageSize]=\"50\"></dxo-paging>\n <dxo-pager [visible]=\"true\" [showInfo]=\"true\" [showNavigationButtons]=\"true\"></dxo-pager>\n <dxo-filter-row [visible]=\"true\"></dxo-filter-row>\n <dxo-header-filter [visible]=\"true\"></dxo-header-filter>\n\n <dxi-column caption=\"\u0130\u015Flemler\" cellTemplate=\"viewTemplate\" [width]=\"120\" [allowFiltering]=\"false\" [allowSorting]=\"false\" alignment=\"center\"></dxi-column>\n <dxi-column dataField=\"sourceOinvDocNum\" caption=\"Kaynak Belge\" [width]=\"110\"></dxi-column>\n <dxi-column dataField=\"projectCode\" caption=\"Proje\" [width]=\"90\"></dxi-column>\n <dxi-column dataField=\"intercompanyId\" caption=\"Intercompany Id\"></dxi-column>\n <!-- Kullan\u0131c\u0131 geri bildirimiyle tespit edildi: \u0130\u015Flem Ge\u00E7mi\u015Fi'nde bir kayd\u0131n normal (Kay\u0131tl\u0131) mi\n yoksa Taslak m\u0131 oldu\u011Fu hi\u00E7 g\u00F6r\u00FCnm\u00FCyordu - Aktar\u0131m Durumu (Durum s\u00FCtunu) ile kar\u0131\u015Ft\u0131r\u0131lmas\u0131n diye\n Kaynak/Hedef Belge Durumu ayr\u0131 s\u00FCtunlar olarak eklendi (bkz. spec \u00A714). -->\n <dxi-column dataField=\"sourceDocumentLifecycle\" caption=\"Kaynak Belge Durumu\" [width]=\"140\">\n <dxo-lookup [dataSource]=\"sourceDocumentLifecycleOptions\" valueExpr=\"value\" displayExpr=\"label\"></dxo-lookup>\n </dxi-column>\n <dxi-column dataField=\"targetDocumentLifecycle\" caption=\"Hedef Belge Durumu\" [width]=\"140\">\n <dxo-lookup [dataSource]=\"sourceDocumentLifecycleOptions\" valueExpr=\"value\" displayExpr=\"label\"></dxo-lookup>\n </dxi-column>\n <dxi-column dataField=\"status\" caption=\"Durum\" cellTemplate=\"transferStatusTemplate\" [width]=\"130\">\n <dxo-lookup [dataSource]=\"transferStatusLookup\" valueExpr=\"value\" displayExpr=\"text\"></dxo-lookup>\n </dxi-column>\n <dxi-column\n dataField=\"creationTime\"\n caption=\"Olu\u015Fturma Tarihi\"\n dataType=\"datetime\"\n format=\"dd.MM.yyyy HH:mm\"\n [width]=\"150\"\n sortOrder=\"desc\"\n ></dxi-column>\n\n <div *dxTemplate=\"let cell of 'viewTemplate'\">\n <button class=\"btn btn-sm btn-outline-secondary\" type=\"button\" (click)=\"toggleActions(cell.data, $event)\">\n \u0130\u015Flemler <i class=\"fa fa-caret-down ms-1\"></i>\n </button>\n </div>\n\n <div *dxTemplate=\"let cell of 'transferStatusTemplate'\">\n <span\n class=\"badge\"\n [class.bg-secondary]=\"cell.value === 0\"\n [class.bg-primary]=\"cell.value === 1\"\n [class.bg-success]=\"cell.value === 2\"\n [class.bg-danger]=\"cell.value === 3\"\n [class.bg-warning]=\"cell.value === 4\"\n >\n {{ transferStatusLabel(cell.value) }}\n </span>\n </div>\n </dx-data-grid>\n </div>\n</div>\n\n<!-- Grid'in DI\u015EINDA: dx-data-grid h\u00FCcrelerinin overflow:hidden k\u0131rpmas\u0131 ve *dxTemplate i\u00E7i olay ba\u011Flama\n sorunlar\u0131 ya\u015Fanmas\u0131n diye \"\u0130\u015Flemler\" men\u00FCs\u00FC buraya, component \u015Fablonunun en \u00FCst seviyesine ta\u015F\u0131nd\u0131. -->\n<ul\n *ngIf=\"openActionsRow as row\"\n class=\"list-unstyled m-0 bg-white border rounded shadow-sm\"\n [style.position]=\"'absolute'\"\n [style.top.px]=\"actionsMenuPosition.top\"\n [style.left.px]=\"actionsMenuPosition.left\"\n style=\"z-index: 1050; min-width: 140px; padding: 4px 0\"\n (click)=\"$event.stopPropagation()\"\n>\n <li>\n <button type=\"button\" class=\"d-block w-100 text-start border-0 bg-white px-3 py-1\" (click)=\"selectAction('view', row)\">\n <i class=\"fa fa-eye me-2\"></i>G\u00F6r\u00FCnt\u00FCle\n </button>\n </li>\n <li *ngIf=\"canDeleteTransfer(row)\">\n <button type=\"button\" class=\"d-block w-100 text-start border-0 bg-white px-3 py-1 text-danger\" (click)=\"selectAction('delete', row)\">\n <i class=\"fa fa-trash me-2\"></i>Sil\n </button>\n </li>\n</ul>\n", dependencies: [{ kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i6.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i6.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i7.DxDataGridComponent, selector: "dx-data-grid", inputs: ["accessKey", "activeStateEnabled", "allowColumnReordering", "allowColumnResizing", "autoNavigateToFocusedRow", "cacheEnabled", "cellHintEnabled", "columnAutoWidth", "columnChooser", "columnFixing", "columnHidingEnabled", "columnMinWidth", "columnResizingMode", "columns", "columnWidth", "customizeColumns", "customizeExportData", "dataRowTemplate", "dataSource", "dateSerializationFormat", "disabled", "editing", "elementAttr", "errorRowEnabled", "export", "filterBuilder", "filterBuilderPopup", "filterPanel", "filterRow", "filterSyncEnabled", "filterValue", "focusedColumnIndex", "focusedRowEnabled", "focusedRowIndex", "focusedRowKey", "focusStateEnabled", "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", "onExported", "onExporting", "onFileSaving", "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", "customizeExportDataChange", "dataRowTemplateChange", "dataSourceChange", "dateSerializationFormatChange", "disabledChange", "editingChange", "elementAttrChange", "errorRowEnabledChange", "exportChange", "filterBuilderChange", "filterBuilderPopupChange", "filterPanelChange", "filterRowChange", "filterSyncEnabledChange", "filterValueChange", "focusedColumnIndexChange", "focusedRowEnabledChange", "focusedRowIndexChange", "focusedRowKeyChange", "focusStateEnabledChange", "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: i8.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: "component", type: i8.DxoHeaderFilterComponent, selector: "dxo-header-filter", inputs: ["allowSearch", "dataSource", "groupInterval", "height", "searchMode", "width", "searchTimeout", "texts", "visible", "showRelevantValues"] }, { kind: "component", type: i8.DxoLookupComponent, selector: "dxo-lookup", inputs: ["allowClearing", "calculateCellValue", "dataSource", "displayExpr", "valueExpr"] }, { kind: "component", type: i8.DxoFilterRowComponent, selector: "dxo-filter-row", inputs: ["applyFilter", "applyFilterText", "betweenEndText", "betweenStartText", "operationDescriptions", "resetOperationText", "showAllText", "showOperationChooser", "visible"] }, { kind: "component", type: i8.DxoPagerComponent, selector: "dxo-pager", inputs: ["allowedPageSizes", "displayMode", "infoText", "showInfo", "showNavigationButtons", "showPageSizeSelector", "visible"] }, { kind: "component", type: i8.DxoPagingComponent, selector: "dxo-paging", inputs: ["enabled", "pageIndex", "pageSize"], outputs: ["pageIndexChange", "pageSizeChange"] }, { kind: "directive", type: i9.DxTemplateDirective, selector: "[dxTemplate]", inputs: ["dxTemplateOf"] }, { kind: "pipe", type: i10.LocalizationPipe, name: "abpLocalization" }] });
246
+ HitDocumentTransferComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: HitDocumentTransferComponent, deps: [{ token: i1.DocumentTransferService }, { token: i2.SapCompanyProfileService }, { token: i3.Router }, { token: i4.ConfirmationService }, { token: i5.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });
247
+ HitDocumentTransferComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: HitDocumentTransferComponent, selector: "hit-document-transfer", host: { listeners: { "document:click": "closeActionsMenu()" } }, ngImport: i0, template: "<div class=\"card mb-3\">\n <div class=\"card-header py-3\">\n <h5 class=\"card-title mb-0\">{{ 'FBDocumentFlow::Menu:DocumentTransfers' | abpLocalization }}</h5>\n </div>\n <div class=\"card-body pt-3\">\n <div class=\"row g-3 align-items-end mb-3\">\n <div class=\"col-md-4\">\n <label class=\"form-label\">{{ 'FBDocumentFlow::SourceCompany' | abpLocalization }}</label>\n <select class=\"form-select\" [(ngModel)]=\"filterSourceCompanyId\" (ngModelChange)=\"search()\">\n <option *ngFor=\"let c of companies\" [ngValue]=\"c.id\">{{ c.companyName }}</option>\n </select>\n </div>\n <div class=\"col-md-3\">\n <label class=\"form-label\">{{ 'FBDocumentFlow::SourceDocumentLifecycle' | abpLocalization }}</label>\n <select class=\"form-select\" [(ngModel)]=\"sourceDocumentLifecycle\" (ngModelChange)=\"search()\">\n <option *ngFor=\"let o of sourceDocumentLifecycleOptions\" [ngValue]=\"o.value\">{{ o.label }}</option>\n </select>\n </div>\n <div class=\"col-auto\">\n <button\n class=\"btn btn-outline-primary\"\n (click)=\"search()\"\n [disabled]=\"isListLoading || isTransfersLoading\"\n [title]=\"'FBDocumentFlow::RefreshListTooltip' | abpLocalization\"\n >\n <i class=\"fa fa-refresh me-1\"></i>{{ 'AbpUi::Refresh' | abpLocalization }}\n </button>\n </div>\n </div>\n\n <h6 class=\"mb-2\">{{ 'FBDocumentFlow::EligibleInvoicesTitle' | abpLocalization }}</h6>\n <small class=\"text-muted d-block mb-2\">{{ 'FBDocumentFlow::GridFilterHint' | abpLocalization }}</small>\n\n <div *ngIf=\"isListLoading\" class=\"text-center py-5\">\n <div class=\"spinner-border text-primary\" role=\"status\"></div>\n <div class=\"mt-2 text-muted\">{{ 'FBDocumentFlow::LoadingInvoices' | abpLocalization }}</div>\n </div>\n\n <dx-data-grid\n *ngIf=\"!isListLoading\"\n [dataSource]=\"eligibleInvoices\"\n [showBorders]=\"true\"\n [showRowLines]=\"true\"\n [columnAutoWidth]=\"true\"\n [height]=\"'45vh'\"\n [keyboardNavigation]=\"{ enabled: false }\"\n >\n <dxo-paging [pageSize]=\"50\"></dxo-paging>\n <dxo-pager [visible]=\"true\" [showInfo]=\"true\" [showNavigationButtons]=\"true\"></dxo-pager>\n <dxo-filter-row [visible]=\"true\"></dxo-filter-row>\n <dxo-header-filter [visible]=\"true\"></dxo-header-filter>\n\n <dxi-column [caption]=\"'FBDocumentFlow::Actions' | abpLocalization\" cellTemplate=\"actionsTemplate\" [width]=\"100\" [allowFiltering]=\"false\" [allowSorting]=\"false\"></dxi-column>\n <dxi-column dataField=\"docNum\" [caption]=\"'FBDocumentFlow::DocNum' | abpLocalization\" dataType=\"number\" sortOrder=\"desc\" [width]=\"100\"></dxi-column>\n <dxi-column dataField=\"numAtCard\" [caption]=\"'FBDocumentFlow::NumAtCard' | abpLocalization\" [width]=\"140\"></dxi-column>\n <dxi-column dataField=\"projectCode\" [caption]=\"'FBDocumentFlow::Project' | abpLocalization\" [width]=\"90\"></dxi-column>\n <dxi-column dataField=\"cardCode\" [caption]=\"'FBDocumentFlow::OinvCardCode' | abpLocalization\" [width]=\"140\"></dxi-column>\n <dxi-column dataField=\"targetCompanyName\" [caption]=\"'FBDocumentFlow::TargetCompany' | abpLocalization\"></dxi-column>\n <dxi-column dataField=\"currency\" [caption]=\"'FBDocumentFlow::Currency' | abpLocalization\" [width]=\"80\"></dxi-column>\n <dxi-column dataField=\"statusLabel\" [caption]=\"'FBDocumentFlow::Status' | abpLocalization\" cellTemplate=\"statusTemplate\" [width]=\"130\"></dxi-column>\n\n <div *dxTemplate=\"let cell of 'actionsTemplate'\">\n <button\n class=\"btn btn-sm btn-outline-primary\"\n (click)=\"openTransferPage(cell.data); $event.target.blur()\"\n [disabled]=\"!cell.data.isResolved || cell.data.targetHasDuplicateNumAtCard\"\n >\n {{ 'FBDocumentFlow::Actions' | abpLocalization }}\n </button>\n </div>\n\n <div *dxTemplate=\"let cell of 'statusTemplate'\" class=\"d-flex flex-column align-items-start py-2\">\n <span\n class=\"badge\"\n [class.bg-success]=\"invoiceStatusVariant(cell.data) === 'resolved'\"\n [class.bg-secondary]=\"invoiceStatusVariant(cell.data) === 'duplicate'\"\n [class.bg-warning]=\"invoiceStatusVariant(cell.data) === 'unresolved'\"\n >\n {{ invoiceStatusLabel(cell.data) }}\n </span>\n <button\n *ngIf=\"!cell.data.isResolved\"\n type=\"button\"\n class=\"btn btn-outline-warning btn-sm mt-2 py-0 px-2\"\n style=\"font-size: 0.72rem\"\n (click)=\"goToPartnerMapping(cell.data.cardCode, cell.data.cardName)\"\n [title]=\"'FBDocumentFlow::GoToPartnerMappingTooltip' | abpLocalization\"\n >\n <i class=\"fa fa-link me-1\"></i>{{ 'FBDocumentFlow::Match' | abpLocalization }}\n </button>\n </div>\n </dx-data-grid>\n\n <small class=\"text-muted d-block mt-2\">\n {{ 'FBDocumentFlow::AlreadyExistsHint' | abpLocalization }}\n </small>\n </div>\n</div>\n\n<div class=\"card\">\n <div class=\"card-header py-3\" role=\"button\" (click)=\"toggleHistory()\">\n <div class=\"d-flex justify-content-between align-items-center\">\n <h5 class=\"card-title mb-0\">{{ 'FBDocumentFlow::TransactionHistory' | abpLocalization }}</h5>\n <i class=\"fa\" [class.fa-chevron-up]=\"isHistoryExpanded\" [class.fa-chevron-down]=\"!isHistoryExpanded\"></i>\n </div>\n </div>\n <div class=\"card-body pt-3\" [hidden]=\"!isHistoryExpanded\">\n <small class=\"text-muted d-block mb-2\">{{ 'FBDocumentFlow::TransferHistoryHint' | abpLocalization }}</small>\n\n <div *ngIf=\"isTransfersLoading\" class=\"text-center py-5\">\n <div class=\"spinner-border text-primary\" role=\"status\"></div>\n <div class=\"mt-2 text-muted\">{{ 'FBDocumentFlow::Loading' | abpLocalization }}</div>\n </div>\n\n <dx-data-grid\n *ngIf=\"!isTransfersLoading\"\n [dataSource]=\"transfers\"\n [showBorders]=\"true\"\n [showRowLines]=\"true\"\n [columnAutoWidth]=\"true\"\n [height]=\"'40vh'\"\n [keyboardNavigation]=\"{ enabled: false }\"\n >\n <dxo-paging [pageSize]=\"50\"></dxo-paging>\n <dxo-pager [visible]=\"true\" [showInfo]=\"true\" [showNavigationButtons]=\"true\"></dxo-pager>\n <dxo-filter-row [visible]=\"true\"></dxo-filter-row>\n <dxo-header-filter [visible]=\"true\"></dxo-header-filter>\n\n <dxi-column [caption]=\"'FBDocumentFlow::Actions' | abpLocalization\" cellTemplate=\"viewTemplate\" [width]=\"120\" [allowFiltering]=\"false\" [allowSorting]=\"false\" alignment=\"center\"></dxi-column>\n <dxi-column dataField=\"sourceOinvDocNum\" [caption]=\"'FBDocumentFlow::SourceDocument' | abpLocalization\" [width]=\"110\"></dxi-column>\n <dxi-column dataField=\"projectCode\" [caption]=\"'FBDocumentFlow::Project' | abpLocalization\" [width]=\"90\"></dxi-column>\n <dxi-column dataField=\"intercompanyId\" [caption]=\"'FBDocumentFlow::IntercompanyId' | abpLocalization\"></dxi-column>\n <!-- Kullan\u0131c\u0131 geri bildirimiyle tespit edildi: \u0130\u015Flem Ge\u00E7mi\u015Fi'nde bir kayd\u0131n normal (Kay\u0131tl\u0131) mi\n yoksa Taslak m\u0131 oldu\u011Fu hi\u00E7 g\u00F6r\u00FCnm\u00FCyordu - Aktar\u0131m Durumu (Durum s\u00FCtunu) ile kar\u0131\u015Ft\u0131r\u0131lmas\u0131n diye\n Kaynak/Hedef Belge Durumu ayr\u0131 s\u00FCtunlar olarak eklendi (bkz. spec \u00A714). -->\n <dxi-column dataField=\"sourceDocumentLifecycle\" [caption]=\"'FBDocumentFlow::SourceDocumentLifecycle' | abpLocalization\" [width]=\"140\">\n <dxo-lookup [dataSource]=\"sourceDocumentLifecycleOptions\" valueExpr=\"value\" displayExpr=\"label\"></dxo-lookup>\n </dxi-column>\n <dxi-column dataField=\"targetDocumentLifecycle\" [caption]=\"'FBDocumentFlow::TargetDocumentLifecycle' | abpLocalization\" [width]=\"140\">\n <dxo-lookup [dataSource]=\"sourceDocumentLifecycleOptions\" valueExpr=\"value\" displayExpr=\"label\"></dxo-lookup>\n </dxi-column>\n <dxi-column dataField=\"status\" [caption]=\"'FBDocumentFlow::Status' | abpLocalization\" cellTemplate=\"transferStatusTemplate\" [width]=\"130\">\n <dxo-lookup [dataSource]=\"transferStatusLookup\" valueExpr=\"value\" displayExpr=\"text\"></dxo-lookup>\n </dxi-column>\n <dxi-column\n dataField=\"creationTime\"\n [caption]=\"'FBDocumentFlow::CreationTime' | abpLocalization\"\n dataType=\"datetime\"\n format=\"dd.MM.yyyy HH:mm\"\n [width]=\"150\"\n sortOrder=\"desc\"\n ></dxi-column>\n\n <div *dxTemplate=\"let cell of 'viewTemplate'\">\n <button class=\"btn btn-sm btn-outline-secondary\" type=\"button\" (click)=\"toggleActions(cell.data, $event)\">\n {{ 'FBDocumentFlow::Actions' | abpLocalization }} <i class=\"fa fa-caret-down ms-1\"></i>\n </button>\n </div>\n\n <div *dxTemplate=\"let cell of 'transferStatusTemplate'\">\n <span\n class=\"badge\"\n [class.bg-secondary]=\"cell.value === 0\"\n [class.bg-primary]=\"cell.value === 1\"\n [class.bg-success]=\"cell.value === 2\"\n [class.bg-danger]=\"cell.value === 3\"\n [class.bg-warning]=\"cell.value === 4\"\n >\n {{ transferStatusLabel(cell.value) }}\n </span>\n </div>\n </dx-data-grid>\n </div>\n</div>\n\n<!-- Grid'in DI\u015EINDA: dx-data-grid h\u00FCcrelerinin overflow:hidden k\u0131rpmas\u0131 ve *dxTemplate i\u00E7i olay ba\u011Flama\n sorunlar\u0131 ya\u015Fanmas\u0131n diye \"\u0130\u015Flemler\" men\u00FCs\u00FC buraya, component \u015Fablonunun en \u00FCst seviyesine ta\u015F\u0131nd\u0131. -->\n<ul\n *ngIf=\"openActionsRow as row\"\n class=\"list-unstyled m-0 bg-white border rounded shadow-sm\"\n [style.position]=\"'absolute'\"\n [style.top.px]=\"actionsMenuPosition.top\"\n [style.left.px]=\"actionsMenuPosition.left\"\n style=\"z-index: 1050; min-width: 140px; padding: 4px 0\"\n (click)=\"$event.stopPropagation()\"\n>\n <li>\n <button type=\"button\" class=\"d-block w-100 text-start border-0 bg-white px-3 py-1\" (click)=\"selectAction('view', row)\">\n <i class=\"fa fa-eye me-2\"></i>{{ 'FBDocumentFlow::View' | abpLocalization }}\n </button>\n </li>\n <li *ngIf=\"canDeleteTransfer(row)\">\n <button type=\"button\" class=\"d-block w-100 text-start border-0 bg-white px-3 py-1 text-danger\" (click)=\"selectAction('delete', row)\">\n <i class=\"fa fa-trash me-2\"></i>{{ 'FBDocumentFlow::Delete' | abpLocalization }}\n </button>\n </li>\n</ul>\n", dependencies: [{ kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i7.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i7.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i8.DxDataGridComponent, selector: "dx-data-grid", inputs: ["accessKey", "activeStateEnabled", "allowColumnReordering", "allowColumnResizing", "autoNavigateToFocusedRow", "cacheEnabled", "cellHintEnabled", "columnAutoWidth", "columnChooser", "columnFixing", "columnHidingEnabled", "columnMinWidth", "columnResizingMode", "columns", "columnWidth", "customizeColumns", "customizeExportData", "dataRowTemplate", "dataSource", "dateSerializationFormat", "disabled", "editing", "elementAttr", "errorRowEnabled", "export", "filterBuilder", "filterBuilderPopup", "filterPanel", "filterRow", "filterSyncEnabled", "filterValue", "focusedColumnIndex", "focusedRowEnabled", "focusedRowIndex", "focusedRowKey", "focusStateEnabled", "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", "onExported", "onExporting", "onFileSaving", "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", "customizeExportDataChange", "dataRowTemplateChange", "dataSourceChange", "dateSerializationFormatChange", "disabledChange", "editingChange", "elementAttrChange", "errorRowEnabledChange", "exportChange", "filterBuilderChange", "filterBuilderPopupChange", "filterPanelChange", "filterRowChange", "filterSyncEnabledChange", "filterValueChange", "focusedColumnIndexChange", "focusedRowEnabledChange", "focusedRowIndexChange", "focusedRowKeyChange", "focusStateEnabledChange", "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: i9.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: "component", type: i9.DxoHeaderFilterComponent, selector: "dxo-header-filter", inputs: ["allowSearch", "dataSource", "groupInterval", "height", "searchMode", "width", "searchTimeout", "texts", "visible", "showRelevantValues"] }, { kind: "component", type: i9.DxoLookupComponent, selector: "dxo-lookup", inputs: ["allowClearing", "calculateCellValue", "dataSource", "displayExpr", "valueExpr"] }, { kind: "component", type: i9.DxoFilterRowComponent, selector: "dxo-filter-row", inputs: ["applyFilter", "applyFilterText", "betweenEndText", "betweenStartText", "operationDescriptions", "resetOperationText", "showAllText", "showOperationChooser", "visible"] }, { kind: "component", type: i9.DxoPagerComponent, selector: "dxo-pager", inputs: ["allowedPageSizes", "displayMode", "infoText", "showInfo", "showNavigationButtons", "showPageSizeSelector", "visible"] }, { kind: "component", type: i9.DxoPagingComponent, selector: "dxo-paging", inputs: ["enabled", "pageIndex", "pageSize"], outputs: ["pageIndexChange", "pageSizeChange"] }, { kind: "directive", type: i10.DxTemplateDirective, selector: "[dxTemplate]", inputs: ["dxTemplateOf"] }, { kind: "pipe", type: i5.LocalizationPipe, name: "abpLocalization" }] });
234
248
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: HitDocumentTransferComponent, decorators: [{
235
249
  type: Component,
236
- args: [{ selector: 'hit-document-transfer', template: "<div class=\"card mb-3\">\n <div class=\"card-header py-3\">\n <h5 class=\"card-title mb-0\">{{ 'FBDocumentFlow::Menu:DocumentTransfers' | abpLocalization }}</h5>\n </div>\n <div class=\"card-body pt-3\">\n <div class=\"row g-3 align-items-end mb-3\">\n <div class=\"col-md-4\">\n <label class=\"form-label\">Kaynak \u015Eirket</label>\n <select class=\"form-select\" [(ngModel)]=\"filterSourceCompanyId\" (ngModelChange)=\"search()\">\n <option *ngFor=\"let c of companies\" [ngValue]=\"c.id\">{{ c.companyName }}</option>\n </select>\n </div>\n <div class=\"col-md-3\">\n <label class=\"form-label\">Kaynak Belge Durumu</label>\n <select class=\"form-select\" [(ngModel)]=\"sourceDocumentLifecycle\" (ngModelChange)=\"search()\">\n <option *ngFor=\"let o of sourceDocumentLifecycleOptions\" [ngValue]=\"o.value\">{{ o.label }}</option>\n </select>\n </div>\n <div class=\"col-auto\">\n <button class=\"btn btn-outline-primary\" (click)=\"search()\" [disabled]=\"isListLoading || isTransfersLoading\" title=\"Listeyi yenile\">\n <i class=\"fa fa-refresh me-1\"></i>Yenile\n </button>\n </div>\n </div>\n\n <h6 class=\"mb-2\">Aktar\u0131ma Uygun M\u00FC\u015Fteri Faturalar\u0131</h6>\n <small class=\"text-muted d-block mb-2\">Belge No, NumAtCard, Proje vb. ile daraltmak i\u00E7in tablo ba\u015Fl\u0131klar\u0131ndaki arama kutular\u0131n\u0131 kullan\u0131n.</small>\n\n <div *ngIf=\"isListLoading\" class=\"text-center py-5\">\n <div class=\"spinner-border text-primary\" role=\"status\"></div>\n <div class=\"mt-2 text-muted\">Faturalar SAP'tan y\u00FCkleniyor...</div>\n </div>\n\n <dx-data-grid\n *ngIf=\"!isListLoading\"\n [dataSource]=\"eligibleInvoices\"\n [showBorders]=\"true\"\n [showRowLines]=\"true\"\n [columnAutoWidth]=\"true\"\n [height]=\"'45vh'\"\n [keyboardNavigation]=\"{ enabled: false }\"\n >\n <dxo-paging [pageSize]=\"50\"></dxo-paging>\n <dxo-pager [visible]=\"true\" [showInfo]=\"true\" [showNavigationButtons]=\"true\"></dxo-pager>\n <dxo-filter-row [visible]=\"true\"></dxo-filter-row>\n <dxo-header-filter [visible]=\"true\"></dxo-header-filter>\n\n <dxi-column caption=\"\u0130\u015Flemler\" cellTemplate=\"actionsTemplate\" [width]=\"100\" [allowFiltering]=\"false\" [allowSorting]=\"false\"></dxi-column>\n <dxi-column dataField=\"docNum\" caption=\"Belge No\" dataType=\"number\" sortOrder=\"desc\" [width]=\"100\"></dxi-column>\n <dxi-column dataField=\"numAtCard\" caption=\"NumAtCard\" [width]=\"140\"></dxi-column>\n <dxi-column dataField=\"projectCode\" caption=\"Proje\" [width]=\"90\"></dxi-column>\n <dxi-column dataField=\"cardCode\" caption=\"OINV.CardCode\" [width]=\"140\"></dxi-column>\n <dxi-column dataField=\"targetCompanyName\" caption=\"Hedef \u015Eirket\"></dxi-column>\n <dxi-column dataField=\"currency\" caption=\"D\u00F6viz\" [width]=\"80\"></dxi-column>\n <dxi-column dataField=\"statusLabel\" caption=\"Durum\" cellTemplate=\"statusTemplate\" [width]=\"130\"></dxi-column>\n\n <div *dxTemplate=\"let cell of 'actionsTemplate'\">\n <button\n class=\"btn btn-sm btn-outline-primary\"\n (click)=\"openTransferPage(cell.data); $event.target.blur()\"\n [disabled]=\"!cell.data.isResolved || cell.data.targetHasDuplicateNumAtCard\"\n >\n \u0130\u015Flemler\n </button>\n </div>\n\n <div *dxTemplate=\"let cell of 'statusTemplate'\" class=\"d-flex flex-column align-items-start py-2\">\n <span\n class=\"badge\"\n [class.bg-success]=\"invoiceStatusLabel(cell.data) === 'Aktar\u0131labilir'\"\n [class.bg-secondary]=\"invoiceStatusLabel(cell.data) === 'Hedefte mevcut'\"\n [class.bg-warning]=\"invoiceStatusLabel(cell.data) === 'E\u015Fle\u015Ftirme yok'\"\n >\n {{ invoiceStatusLabel(cell.data) }}\n </span>\n <button\n *ngIf=\"!cell.data.isResolved\"\n type=\"button\"\n class=\"btn btn-outline-warning btn-sm mt-2 py-0 px-2\"\n style=\"font-size: 0.72rem\"\n (click)=\"goToPartnerMapping(cell.data.cardCode, cell.data.cardName)\"\n title=\"Muhatap E\u015Fle\u015Ftirmeleri ekran\u0131na git\"\n >\n <i class=\"fa fa-link me-1\"></i>E\u015Fle\u015Ftir\n </button>\n </div>\n </dx-data-grid>\n\n <small class=\"text-muted d-block mt-2\">\n \"Hedefte mevcut\" bilgisi, kaynak OINV.NumAtCard de\u011Ferinin hedef \u015Firkette OPCH.NumAtCard alan\u0131nda bulunmas\u0131 halinde g\u00F6sterilir.\n </small>\n </div>\n</div>\n\n<div class=\"card\">\n <div class=\"card-header py-3\" role=\"button\" (click)=\"toggleHistory()\">\n <div class=\"d-flex justify-content-between align-items-center\">\n <h5 class=\"card-title mb-0\">\u0130\u015Flem Ge\u00E7mi\u015Fi</h5>\n <i class=\"fa\" [class.fa-chevron-up]=\"isHistoryExpanded\" [class.fa-chevron-down]=\"!isHistoryExpanded\"></i>\n </div>\n </div>\n <div class=\"card-body pt-3\" [hidden]=\"!isHistoryExpanded\">\n <small class=\"text-muted d-block mb-2\">Se\u00E7ili kaynak \u015Firket i\u00E7in daha \u00F6nce ba\u015Flat\u0131lm\u0131\u015F aktar\u0131mlar (i\u015Flem bekliyor, devam eden, tamamlanan, hatal\u0131, iptal edilen).</small>\n\n <div *ngIf=\"isTransfersLoading\" class=\"text-center py-5\">\n <div class=\"spinner-border text-primary\" role=\"status\"></div>\n <div class=\"mt-2 text-muted\">Y\u00FCkleniyor...</div>\n </div>\n\n <dx-data-grid\n *ngIf=\"!isTransfersLoading\"\n [dataSource]=\"transfers\"\n [showBorders]=\"true\"\n [showRowLines]=\"true\"\n [columnAutoWidth]=\"true\"\n [height]=\"'40vh'\"\n [keyboardNavigation]=\"{ enabled: false }\"\n >\n <dxo-paging [pageSize]=\"50\"></dxo-paging>\n <dxo-pager [visible]=\"true\" [showInfo]=\"true\" [showNavigationButtons]=\"true\"></dxo-pager>\n <dxo-filter-row [visible]=\"true\"></dxo-filter-row>\n <dxo-header-filter [visible]=\"true\"></dxo-header-filter>\n\n <dxi-column caption=\"\u0130\u015Flemler\" cellTemplate=\"viewTemplate\" [width]=\"120\" [allowFiltering]=\"false\" [allowSorting]=\"false\" alignment=\"center\"></dxi-column>\n <dxi-column dataField=\"sourceOinvDocNum\" caption=\"Kaynak Belge\" [width]=\"110\"></dxi-column>\n <dxi-column dataField=\"projectCode\" caption=\"Proje\" [width]=\"90\"></dxi-column>\n <dxi-column dataField=\"intercompanyId\" caption=\"Intercompany Id\"></dxi-column>\n <!-- Kullan\u0131c\u0131 geri bildirimiyle tespit edildi: \u0130\u015Flem Ge\u00E7mi\u015Fi'nde bir kayd\u0131n normal (Kay\u0131tl\u0131) mi\n yoksa Taslak m\u0131 oldu\u011Fu hi\u00E7 g\u00F6r\u00FCnm\u00FCyordu - Aktar\u0131m Durumu (Durum s\u00FCtunu) ile kar\u0131\u015Ft\u0131r\u0131lmas\u0131n diye\n Kaynak/Hedef Belge Durumu ayr\u0131 s\u00FCtunlar olarak eklendi (bkz. spec \u00A714). -->\n <dxi-column dataField=\"sourceDocumentLifecycle\" caption=\"Kaynak Belge Durumu\" [width]=\"140\">\n <dxo-lookup [dataSource]=\"sourceDocumentLifecycleOptions\" valueExpr=\"value\" displayExpr=\"label\"></dxo-lookup>\n </dxi-column>\n <dxi-column dataField=\"targetDocumentLifecycle\" caption=\"Hedef Belge Durumu\" [width]=\"140\">\n <dxo-lookup [dataSource]=\"sourceDocumentLifecycleOptions\" valueExpr=\"value\" displayExpr=\"label\"></dxo-lookup>\n </dxi-column>\n <dxi-column dataField=\"status\" caption=\"Durum\" cellTemplate=\"transferStatusTemplate\" [width]=\"130\">\n <dxo-lookup [dataSource]=\"transferStatusLookup\" valueExpr=\"value\" displayExpr=\"text\"></dxo-lookup>\n </dxi-column>\n <dxi-column\n dataField=\"creationTime\"\n caption=\"Olu\u015Fturma Tarihi\"\n dataType=\"datetime\"\n format=\"dd.MM.yyyy HH:mm\"\n [width]=\"150\"\n sortOrder=\"desc\"\n ></dxi-column>\n\n <div *dxTemplate=\"let cell of 'viewTemplate'\">\n <button class=\"btn btn-sm btn-outline-secondary\" type=\"button\" (click)=\"toggleActions(cell.data, $event)\">\n \u0130\u015Flemler <i class=\"fa fa-caret-down ms-1\"></i>\n </button>\n </div>\n\n <div *dxTemplate=\"let cell of 'transferStatusTemplate'\">\n <span\n class=\"badge\"\n [class.bg-secondary]=\"cell.value === 0\"\n [class.bg-primary]=\"cell.value === 1\"\n [class.bg-success]=\"cell.value === 2\"\n [class.bg-danger]=\"cell.value === 3\"\n [class.bg-warning]=\"cell.value === 4\"\n >\n {{ transferStatusLabel(cell.value) }}\n </span>\n </div>\n </dx-data-grid>\n </div>\n</div>\n\n<!-- Grid'in DI\u015EINDA: dx-data-grid h\u00FCcrelerinin overflow:hidden k\u0131rpmas\u0131 ve *dxTemplate i\u00E7i olay ba\u011Flama\n sorunlar\u0131 ya\u015Fanmas\u0131n diye \"\u0130\u015Flemler\" men\u00FCs\u00FC buraya, component \u015Fablonunun en \u00FCst seviyesine ta\u015F\u0131nd\u0131. -->\n<ul\n *ngIf=\"openActionsRow as row\"\n class=\"list-unstyled m-0 bg-white border rounded shadow-sm\"\n [style.position]=\"'absolute'\"\n [style.top.px]=\"actionsMenuPosition.top\"\n [style.left.px]=\"actionsMenuPosition.left\"\n style=\"z-index: 1050; min-width: 140px; padding: 4px 0\"\n (click)=\"$event.stopPropagation()\"\n>\n <li>\n <button type=\"button\" class=\"d-block w-100 text-start border-0 bg-white px-3 py-1\" (click)=\"selectAction('view', row)\">\n <i class=\"fa fa-eye me-2\"></i>G\u00F6r\u00FCnt\u00FCle\n </button>\n </li>\n <li *ngIf=\"canDeleteTransfer(row)\">\n <button type=\"button\" class=\"d-block w-100 text-start border-0 bg-white px-3 py-1 text-danger\" (click)=\"selectAction('delete', row)\">\n <i class=\"fa fa-trash me-2\"></i>Sil\n </button>\n </li>\n</ul>\n" }]
237
- }], ctorParameters: function () { return [{ type: i1.DocumentTransferService }, { type: i2.SapCompanyProfileService }, { type: i3.Router }, { type: i4.ConfirmationService }]; }, propDecorators: { closeActionsMenu: [{
250
+ args: [{ selector: 'hit-document-transfer', template: "<div class=\"card mb-3\">\n <div class=\"card-header py-3\">\n <h5 class=\"card-title mb-0\">{{ 'FBDocumentFlow::Menu:DocumentTransfers' | abpLocalization }}</h5>\n </div>\n <div class=\"card-body pt-3\">\n <div class=\"row g-3 align-items-end mb-3\">\n <div class=\"col-md-4\">\n <label class=\"form-label\">{{ 'FBDocumentFlow::SourceCompany' | abpLocalization }}</label>\n <select class=\"form-select\" [(ngModel)]=\"filterSourceCompanyId\" (ngModelChange)=\"search()\">\n <option *ngFor=\"let c of companies\" [ngValue]=\"c.id\">{{ c.companyName }}</option>\n </select>\n </div>\n <div class=\"col-md-3\">\n <label class=\"form-label\">{{ 'FBDocumentFlow::SourceDocumentLifecycle' | abpLocalization }}</label>\n <select class=\"form-select\" [(ngModel)]=\"sourceDocumentLifecycle\" (ngModelChange)=\"search()\">\n <option *ngFor=\"let o of sourceDocumentLifecycleOptions\" [ngValue]=\"o.value\">{{ o.label }}</option>\n </select>\n </div>\n <div class=\"col-auto\">\n <button\n class=\"btn btn-outline-primary\"\n (click)=\"search()\"\n [disabled]=\"isListLoading || isTransfersLoading\"\n [title]=\"'FBDocumentFlow::RefreshListTooltip' | abpLocalization\"\n >\n <i class=\"fa fa-refresh me-1\"></i>{{ 'AbpUi::Refresh' | abpLocalization }}\n </button>\n </div>\n </div>\n\n <h6 class=\"mb-2\">{{ 'FBDocumentFlow::EligibleInvoicesTitle' | abpLocalization }}</h6>\n <small class=\"text-muted d-block mb-2\">{{ 'FBDocumentFlow::GridFilterHint' | abpLocalization }}</small>\n\n <div *ngIf=\"isListLoading\" class=\"text-center py-5\">\n <div class=\"spinner-border text-primary\" role=\"status\"></div>\n <div class=\"mt-2 text-muted\">{{ 'FBDocumentFlow::LoadingInvoices' | abpLocalization }}</div>\n </div>\n\n <dx-data-grid\n *ngIf=\"!isListLoading\"\n [dataSource]=\"eligibleInvoices\"\n [showBorders]=\"true\"\n [showRowLines]=\"true\"\n [columnAutoWidth]=\"true\"\n [height]=\"'45vh'\"\n [keyboardNavigation]=\"{ enabled: false }\"\n >\n <dxo-paging [pageSize]=\"50\"></dxo-paging>\n <dxo-pager [visible]=\"true\" [showInfo]=\"true\" [showNavigationButtons]=\"true\"></dxo-pager>\n <dxo-filter-row [visible]=\"true\"></dxo-filter-row>\n <dxo-header-filter [visible]=\"true\"></dxo-header-filter>\n\n <dxi-column [caption]=\"'FBDocumentFlow::Actions' | abpLocalization\" cellTemplate=\"actionsTemplate\" [width]=\"100\" [allowFiltering]=\"false\" [allowSorting]=\"false\"></dxi-column>\n <dxi-column dataField=\"docNum\" [caption]=\"'FBDocumentFlow::DocNum' | abpLocalization\" dataType=\"number\" sortOrder=\"desc\" [width]=\"100\"></dxi-column>\n <dxi-column dataField=\"numAtCard\" [caption]=\"'FBDocumentFlow::NumAtCard' | abpLocalization\" [width]=\"140\"></dxi-column>\n <dxi-column dataField=\"projectCode\" [caption]=\"'FBDocumentFlow::Project' | abpLocalization\" [width]=\"90\"></dxi-column>\n <dxi-column dataField=\"cardCode\" [caption]=\"'FBDocumentFlow::OinvCardCode' | abpLocalization\" [width]=\"140\"></dxi-column>\n <dxi-column dataField=\"targetCompanyName\" [caption]=\"'FBDocumentFlow::TargetCompany' | abpLocalization\"></dxi-column>\n <dxi-column dataField=\"currency\" [caption]=\"'FBDocumentFlow::Currency' | abpLocalization\" [width]=\"80\"></dxi-column>\n <dxi-column dataField=\"statusLabel\" [caption]=\"'FBDocumentFlow::Status' | abpLocalization\" cellTemplate=\"statusTemplate\" [width]=\"130\"></dxi-column>\n\n <div *dxTemplate=\"let cell of 'actionsTemplate'\">\n <button\n class=\"btn btn-sm btn-outline-primary\"\n (click)=\"openTransferPage(cell.data); $event.target.blur()\"\n [disabled]=\"!cell.data.isResolved || cell.data.targetHasDuplicateNumAtCard\"\n >\n {{ 'FBDocumentFlow::Actions' | abpLocalization }}\n </button>\n </div>\n\n <div *dxTemplate=\"let cell of 'statusTemplate'\" class=\"d-flex flex-column align-items-start py-2\">\n <span\n class=\"badge\"\n [class.bg-success]=\"invoiceStatusVariant(cell.data) === 'resolved'\"\n [class.bg-secondary]=\"invoiceStatusVariant(cell.data) === 'duplicate'\"\n [class.bg-warning]=\"invoiceStatusVariant(cell.data) === 'unresolved'\"\n >\n {{ invoiceStatusLabel(cell.data) }}\n </span>\n <button\n *ngIf=\"!cell.data.isResolved\"\n type=\"button\"\n class=\"btn btn-outline-warning btn-sm mt-2 py-0 px-2\"\n style=\"font-size: 0.72rem\"\n (click)=\"goToPartnerMapping(cell.data.cardCode, cell.data.cardName)\"\n [title]=\"'FBDocumentFlow::GoToPartnerMappingTooltip' | abpLocalization\"\n >\n <i class=\"fa fa-link me-1\"></i>{{ 'FBDocumentFlow::Match' | abpLocalization }}\n </button>\n </div>\n </dx-data-grid>\n\n <small class=\"text-muted d-block mt-2\">\n {{ 'FBDocumentFlow::AlreadyExistsHint' | abpLocalization }}\n </small>\n </div>\n</div>\n\n<div class=\"card\">\n <div class=\"card-header py-3\" role=\"button\" (click)=\"toggleHistory()\">\n <div class=\"d-flex justify-content-between align-items-center\">\n <h5 class=\"card-title mb-0\">{{ 'FBDocumentFlow::TransactionHistory' | abpLocalization }}</h5>\n <i class=\"fa\" [class.fa-chevron-up]=\"isHistoryExpanded\" [class.fa-chevron-down]=\"!isHistoryExpanded\"></i>\n </div>\n </div>\n <div class=\"card-body pt-3\" [hidden]=\"!isHistoryExpanded\">\n <small class=\"text-muted d-block mb-2\">{{ 'FBDocumentFlow::TransferHistoryHint' | abpLocalization }}</small>\n\n <div *ngIf=\"isTransfersLoading\" class=\"text-center py-5\">\n <div class=\"spinner-border text-primary\" role=\"status\"></div>\n <div class=\"mt-2 text-muted\">{{ 'FBDocumentFlow::Loading' | abpLocalization }}</div>\n </div>\n\n <dx-data-grid\n *ngIf=\"!isTransfersLoading\"\n [dataSource]=\"transfers\"\n [showBorders]=\"true\"\n [showRowLines]=\"true\"\n [columnAutoWidth]=\"true\"\n [height]=\"'40vh'\"\n [keyboardNavigation]=\"{ enabled: false }\"\n >\n <dxo-paging [pageSize]=\"50\"></dxo-paging>\n <dxo-pager [visible]=\"true\" [showInfo]=\"true\" [showNavigationButtons]=\"true\"></dxo-pager>\n <dxo-filter-row [visible]=\"true\"></dxo-filter-row>\n <dxo-header-filter [visible]=\"true\"></dxo-header-filter>\n\n <dxi-column [caption]=\"'FBDocumentFlow::Actions' | abpLocalization\" cellTemplate=\"viewTemplate\" [width]=\"120\" [allowFiltering]=\"false\" [allowSorting]=\"false\" alignment=\"center\"></dxi-column>\n <dxi-column dataField=\"sourceOinvDocNum\" [caption]=\"'FBDocumentFlow::SourceDocument' | abpLocalization\" [width]=\"110\"></dxi-column>\n <dxi-column dataField=\"projectCode\" [caption]=\"'FBDocumentFlow::Project' | abpLocalization\" [width]=\"90\"></dxi-column>\n <dxi-column dataField=\"intercompanyId\" [caption]=\"'FBDocumentFlow::IntercompanyId' | abpLocalization\"></dxi-column>\n <!-- Kullan\u0131c\u0131 geri bildirimiyle tespit edildi: \u0130\u015Flem Ge\u00E7mi\u015Fi'nde bir kayd\u0131n normal (Kay\u0131tl\u0131) mi\n yoksa Taslak m\u0131 oldu\u011Fu hi\u00E7 g\u00F6r\u00FCnm\u00FCyordu - Aktar\u0131m Durumu (Durum s\u00FCtunu) ile kar\u0131\u015Ft\u0131r\u0131lmas\u0131n diye\n Kaynak/Hedef Belge Durumu ayr\u0131 s\u00FCtunlar olarak eklendi (bkz. spec \u00A714). -->\n <dxi-column dataField=\"sourceDocumentLifecycle\" [caption]=\"'FBDocumentFlow::SourceDocumentLifecycle' | abpLocalization\" [width]=\"140\">\n <dxo-lookup [dataSource]=\"sourceDocumentLifecycleOptions\" valueExpr=\"value\" displayExpr=\"label\"></dxo-lookup>\n </dxi-column>\n <dxi-column dataField=\"targetDocumentLifecycle\" [caption]=\"'FBDocumentFlow::TargetDocumentLifecycle' | abpLocalization\" [width]=\"140\">\n <dxo-lookup [dataSource]=\"sourceDocumentLifecycleOptions\" valueExpr=\"value\" displayExpr=\"label\"></dxo-lookup>\n </dxi-column>\n <dxi-column dataField=\"status\" [caption]=\"'FBDocumentFlow::Status' | abpLocalization\" cellTemplate=\"transferStatusTemplate\" [width]=\"130\">\n <dxo-lookup [dataSource]=\"transferStatusLookup\" valueExpr=\"value\" displayExpr=\"text\"></dxo-lookup>\n </dxi-column>\n <dxi-column\n dataField=\"creationTime\"\n [caption]=\"'FBDocumentFlow::CreationTime' | abpLocalization\"\n dataType=\"datetime\"\n format=\"dd.MM.yyyy HH:mm\"\n [width]=\"150\"\n sortOrder=\"desc\"\n ></dxi-column>\n\n <div *dxTemplate=\"let cell of 'viewTemplate'\">\n <button class=\"btn btn-sm btn-outline-secondary\" type=\"button\" (click)=\"toggleActions(cell.data, $event)\">\n {{ 'FBDocumentFlow::Actions' | abpLocalization }} <i class=\"fa fa-caret-down ms-1\"></i>\n </button>\n </div>\n\n <div *dxTemplate=\"let cell of 'transferStatusTemplate'\">\n <span\n class=\"badge\"\n [class.bg-secondary]=\"cell.value === 0\"\n [class.bg-primary]=\"cell.value === 1\"\n [class.bg-success]=\"cell.value === 2\"\n [class.bg-danger]=\"cell.value === 3\"\n [class.bg-warning]=\"cell.value === 4\"\n >\n {{ transferStatusLabel(cell.value) }}\n </span>\n </div>\n </dx-data-grid>\n </div>\n</div>\n\n<!-- Grid'in DI\u015EINDA: dx-data-grid h\u00FCcrelerinin overflow:hidden k\u0131rpmas\u0131 ve *dxTemplate i\u00E7i olay ba\u011Flama\n sorunlar\u0131 ya\u015Fanmas\u0131n diye \"\u0130\u015Flemler\" men\u00FCs\u00FC buraya, component \u015Fablonunun en \u00FCst seviyesine ta\u015F\u0131nd\u0131. -->\n<ul\n *ngIf=\"openActionsRow as row\"\n class=\"list-unstyled m-0 bg-white border rounded shadow-sm\"\n [style.position]=\"'absolute'\"\n [style.top.px]=\"actionsMenuPosition.top\"\n [style.left.px]=\"actionsMenuPosition.left\"\n style=\"z-index: 1050; min-width: 140px; padding: 4px 0\"\n (click)=\"$event.stopPropagation()\"\n>\n <li>\n <button type=\"button\" class=\"d-block w-100 text-start border-0 bg-white px-3 py-1\" (click)=\"selectAction('view', row)\">\n <i class=\"fa fa-eye me-2\"></i>{{ 'FBDocumentFlow::View' | abpLocalization }}\n </button>\n </li>\n <li *ngIf=\"canDeleteTransfer(row)\">\n <button type=\"button\" class=\"d-block w-100 text-start border-0 bg-white px-3 py-1 text-danger\" (click)=\"selectAction('delete', row)\">\n <i class=\"fa fa-trash me-2\"></i>{{ 'FBDocumentFlow::Delete' | abpLocalization }}\n </button>\n </li>\n</ul>\n" }]
251
+ }], ctorParameters: function () { return [{ type: i1.DocumentTransferService }, { type: i2.SapCompanyProfileService }, { type: i3.Router }, { type: i4.ConfirmationService }, { type: i5.LocalizationService }]; }, propDecorators: { closeActionsMenu: [{
238
252
  type: HostListener,
239
253
  args: ['document:click']
240
254
  }] } });
241
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGl0LWRvY3VtZW50LXRyYW5zZmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ZiZG9jdW1lbnRmbG93L3NyYy9saWIvY29tcG9uZW50cy9oaXQtZG9jdW1lbnQtdHJhbnNmZXJzL2NvbXBvbmVudHMvaGl0LWRvY3VtZW50LXRyYW5zZmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ZiZG9jdW1lbnRmbG93L3NyYy9saWIvY29tcG9uZW50cy9oaXQtZG9jdW1lbnQtdHJhbnNmZXJzL2NvbXBvbmVudHMvaGl0LWRvY3VtZW50LXRyYW5zZmVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBRWhFLE9BQU8sRUFBRSxZQUFZLEVBQXVCLE1BQU0sc0JBQXNCLENBQUM7QUFFekUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzFDLE9BQU8sRUFJTCxvQkFBb0IsR0FDckIsTUFBTSxtQ0FBbUMsQ0FBQzs7Ozs7Ozs7Ozs7O0FBYTNDLE1BQU0sT0FBTyw0QkFBNEI7SUFzQ3ZDLFlBQ1UsT0FBZ0MsRUFDaEMsY0FBd0MsRUFDeEMsTUFBYyxFQUNkLFlBQWlDO1FBSGpDLFlBQU8sR0FBUCxPQUFPLENBQXlCO1FBQ2hDLG1CQUFjLEdBQWQsY0FBYyxDQUEwQjtRQUN4QyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsaUJBQVksR0FBWixZQUFZLENBQXFCO1FBekMzQyxjQUFTLEdBQTJCLEVBQUUsQ0FBQztRQUV2QyxpR0FBaUc7UUFDakcseUJBQXlCO1FBQ3pCLDBCQUFxQixHQUFHLEVBQUUsQ0FBQztRQUMzQixrQkFBYSxHQUFHLEtBQUssQ0FBQztRQUN0QixxQkFBZ0IsR0FBK0IsRUFBRSxDQUFDO1FBRWxE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LENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQzFCO0lBQ0gsQ0FBQztJQUVELCtGQUErRjtJQUMvRiwwRkFBMEY7SUFDMUYsMkZBQTJGO0lBQzNGLDhFQUE4RTtJQUM5RSw0RkFBNEY7SUFDNUYsZ0ZBQWdGO0lBQ2hGLGtCQUFrQixDQUFDLGdCQUF5QixFQUFFLGdCQUF5QjtRQUNyRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLGtDQUFrQyxDQUFDLEVBQUU7WUFDekQsS0FBSyxFQUFFLEVBQUUsZUFBZSxFQUFFLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRTtTQUMzRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsYUFBYTtRQUNYLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztJQUNuRCxDQUFDOzt5SEFoUVUsNEJBQTRCOzZHQUE1Qiw0QkFBNEIsOEhDdkJ6QyxtelRBZ01BOzJGRHpLYSw0QkFBNEI7a0JBSnhDLFNBQVM7K0JBQ0UsdUJBQXVCOzRNQXdPakMsZ0JBQWdCO3NCQURmLFlBQVk7dUJBQUMsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBIb3N0TGlzdGVuZXIsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IENvbmZpcm1hdGlvbiwgQ29uZmlybWF0aW9uU2VydmljZSB9IGZyb20gJ0BhYnAvbmcudGhlbWUuc2hhcmVkJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmluYWxpemUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuICBEb2N1bWVudFRyYW5zZmVyRHRvLFxuICBEb2N1bWVudFRyYW5zZmVyU2VydmljZSxcbiAgRWxpZ2libGVTb3VyY2VJbnZvaWNlRHRvLFxuICBTYXBEb2N1bWVudExpZmVjeWNsZSxcbn0gZnJvbSAnLi4vLi4vLi4vcHJveHkvZG9jdW1lbnQtdHJhbnNmZXJzJztcbmltcG9ydCB7IFNhcENvbXBhbnlQcm9maWxlRHRvLCBTYXBDb21wYW55UHJvZmlsZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9wcm94eS9zYXAtY29tcGFueS1wcm9maWxlcyc7XG5cbi8vIFwiRHVydW1cIiBzw7x0dW51IEFrdGFyxLFtYSBVeWd1biBGYXR1cmFsYXIgdGFibG9zdW5kYSB0ZWsgYmlyIFNBUCBhbGFuxLEgZGXEn2lsLCBiaXJkZW4gZmF6bGEgYWxhbmRhblxuLy8gKGlzUmVzb2x2ZWQsIHRhcmdldEhhc0R1cGxpY2F0ZU51bUF0Q2FyZCkgaGVzYXBsYW5hbiBiaXIgZXRpa2V0LiBEZXZFeHRyZW1lIGZpbHRyZS9iYcWfbMSxay1maWx0cmVzaVxuLy8geWFsbsSxemNhIGdlcsOnZWsgYmlyIGRhdGFGaWVsZCDDvHplcmluZGVuIMOnYWzEscWfYWJpbGRpxJ9pbmRlbiwgYnUgaGVzYXBsYW5hbiBldGlrZXQgc2F0xLFyIHZlcmlzaW5lIGF5csSxXG4vLyBiaXIgYWxhbiBvbGFyYWsgZWtsZW5peW9yIC0gYWtzaSBoYWxkZSBcIkR1cnVtXCIgc8O8dHVudW5kYSBoacOnIGZpbHRyZWxlbWUgeWFwxLFsYW3EsXlvcmR1LlxudHlwZSBFbGlnaWJsZVNvdXJjZUludm9pY2VSb3cgPSBFbGlnaWJsZVNvdXJjZUludm9pY2VEdG8gJiB7IHN0YXR1c0xhYmVsOiBzdHJpbmcgfTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaGl0LWRvY3VtZW50LXRyYW5zZmVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2hpdC1kb2N1bWVudC10cmFuc2Zlci5jb21wb25lbnQuaHRtbCcsXG59KVxuZXhwb3J0IGNsYXNzIEhpdERvY3VtZW50VHJhbnNmZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBjb21wYW5pZXM6IFNhcENvbXBhbnlQcm9maWxlRHRvW10gPSBbXTtcblxuICAvLyBBa3RhcsSxbWEgdXlndW4gbcO8xZ90ZXJpIGZhdHVyYWxhcsSxIC0gUHJvamUvTnVtQXRDYXJkL0JlbGdlIE5vIHZiLiBkYXJhbHRtYSB0YWJsb251biBrZW5kaSBzw7x0dW5cbiAgLy8gZmlsdHJlbGVyaXlsZSB5YXDEsWzEsXIuXG4gIGZpbHRlclNvdXJjZUNvbXBhbnlJZCA9ICcnO1xuICBpc0xpc3RMb2FkaW5nID0gZmFsc2U7XG4gIGVsaWdpYmxlSW52b2ljZXM6IEVsaWdpYmxlU291cmNlSW52b2ljZVJvd1tdID0gW107XG5cbiAgLy8gU3BlYyDCpzE0ICgxOC4wOS4yMDI2IGthcmFyxLEpIC0gc8O8cmXDpyBwYXJhbWV0cmlrOiBUYXNsYWsgc2XDp2lsaXJzZSB0YXNsYWsgZmF0dXJhbGFyLCBLYXnEsXRsxLFcbiAgLy8gc2XDp2lsaXJzZSAodmFyc2F5xLFsYW4sIG1ldmN1dC9lc2tpIGRhdnJhbsSxxZ9sYSB1eXVtbHUpIGthecSxdGzEsSBmYXR1cmFsYXIgbGlzdGVsZW5pci4gQnUgeWFsbsSxemNhXG4gIC8vIEtBWU5BSyBmYXR1cmFuxLFuIG1vZHVkdXIgLSBoZWRlZnRlIG9sdcWfYWNhayBiZWxnZWxlcmluIG1vZHUgKHRhcmdldERvY3VtZW50TGlmZWN5Y2xlKSBidW5kYW5cbiAgLy8gQkHEnklNU0laRElSIHZlIGFrdGFyxLFtIG9sdcWfdHVybWEgZWtyYW7EsW5kYSBheXLEsWNhIHNlw6dpbGlyIChrdWxsYW7EsWPEsSBnZXJpIGJpbGRpcmltaXlsZSBuZXRsZcWfdGlyaWxkaSkuXG4gIHNvdXJjZURvY3VtZW50TGlmZWN5Y2xlID0gU2FwRG9jdW1lbnRMaWZlY3ljbGUuUG9zdGVkO1xuICAvLyBLYXluYWsgSEVSIFpBTUFOIGJpciBNw7zFn3RlcmkgRmF0dXJhc8SxZMSxciAoT0lOVikgLSBldGlrZXQgYnVudSBuZXRsZcWfdGlyaXIgKGt1bGxhbsSxY8SxIGdlcmlcbiAgLy8gYmlsZGlyaW1peWxlIG5ldGxlxZ90aXJpbGRpKS4gxLDFn2xlbSBHZcOnbWnFn2kgdGFibG9zdW5kYWtpIFwiSGVkZWYgQmVsZ2UgRHVydW11XCIgc8O8dHVudW5kYSBkYSAoa3VsbGFuxLFjxLFcbiAgLy8gaXN0ZcSfaXlsZSkgQVlOSSBldGlrZXRsZXIga3VsbGFuxLFsxLFyLlxuICBzb3VyY2VEb2N1bWVudExpZmVjeWNsZU9wdGlvbnMgPSBbXG4gICAgeyB2YWx1ZTogU2FwRG9jdW1lbnRMaWZlY3ljbGUuUG9zdGVkLCBsYWJlbDogJ0thecSxdGzEsSBNw7zFn3RlcmkgRmF0dXJhc8SxJyB9LFxuICAgIHsgdmFsdWU6IFNhcERvY3VtZW50TGlmZWN5Y2xlLkRyYWZ0LCBsYWJlbDogJ1Rhc2xhayBNw7zFn3RlcmkgRmF0dXJhc8SxJyB9LFxuICBdO1xuXG4gIC8vIMSwxZ9sZW0gR2XDp21pxZ9pIC0gZGFoYSDDtm5jZSBiYcWfbGF0xLFsbcSxxZ8gKGnFn2xlbSBiZWtsaXlvci9kZXZhbSBlZGVuL3RhbWFtbGFuYW4vaGF0YWzEsS9pcHRhbCBlZGlsZW4pIGFrdGFyxLFtbGFyLlxuICAvLyBcIkthcGF0XCIvXCJMaXN0ZXllIETDtm5cIiBzb25yYXPEsSBrdWxsYW7EsWPEsW7EsW4gYmlyIHppbmNpcmUgdGVrcmFyIGTDtm7DvHAgYmFrYWJpbG1lc2kgacOnaW4uXG4gIGlzVHJhbnNmZXJzTG9hZGluZyA9IGZhbHNlO1xuICB0cmFuc2ZlcnM6IERvY3VtZW50VHJhbnNmZXJEdG9bXSA9IFtdO1xuICBpc0hpc3RvcnlFeHBhbmRlZCA9IHRydWU7XG5cbiAgLy8gRHVydW0gc8O8dHVudW51biBoZWFkZXItZmlsdGVyL2ZpbHRlci1yb3cgYcOnxLFsxLFyIGxpc3Rlc2luZGUgb2t1bmFiaWxpciBUw7xya8OnZSBldGlrZXRsZXIgZ8O2c3RlcmViaWxtZXNpXG4gIC8vIGnDp2luIChha3NpIGhhbGRlIERldkV4dHJlbWUgaGFtIHNhecSxc2FsIGVudW0gZGXEn2VybGVyaW5pIC0gMC8xLzIvMy80IC0gbGlzdGVsZXIpLlxuICB0cmFuc2ZlclN0YXR1c0xvb2t1cCA9IFtcbiAgICB7IHZhbHVlOiAwLCB0ZXh0OiAnxLDFn2xlbSBCZWtsaXlvcicgfSxcbiAgICB7IHZhbHVlOiAxLCB0ZXh0OiAnRGV2YW0gRWRpeW9yJyB9LFxuICAgIHsgdmFsdWU6IDIsIHRleHQ6ICdUYW1hbWxhbmTEsScgfSxcbiAgICB7IHZhbHVlOiAzLCB0ZXh0OiAnSGF0YWzEsScgfSxcbiAgICB7IHZhbHVlOiA0LCB0ZXh0OiAnxLBwdGFsIEVkaWxkaScgfSxcbiAgXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHNlcnZpY2U6IERvY3VtZW50VHJhbnNmZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29tcGFueVNlcnZpY2U6IFNhcENvbXBhbnlQcm9maWxlU2VydmljZSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgY29uZmlybWF0aW9uOiBDb25maXJtYXRpb25TZXJ2aWNlXG4gICkge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmNvbXBhbnlTZXJ2aWNlLmdldExpc3QoeyBtYXhSZXN1bHRDb3VudDogMTAwMCwgc2tpcENvdW50OiAwLCBpc0FjdGl2ZTogdHJ1ZSB9KS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgIHRoaXMuY29tcGFuaWVzID0gcmVzdWx0Lml0ZW1zO1xuXG4gICAgICAvLyBEZXRheSBzYXlmYXPEsW5kYW4gXCJMaXN0ZXllIETDtm5cIi9cIkthcGF0XCIgaWxlIGdlcmkgZ2VsaW5kacSfaW5kZSwga3VsbGFuxLFjxLFuxLFuIG8gYW4gw7x6ZXJpbmRlXG4gICAgICAvLyDDp2FsxLHFn3TEscSfxLEgxZ9pcmtldCBrYXlib2xtYXPEsW4gZGl5ZSByb3V0ZXIgc3RhdGUndGVraSDFn2lya2V0IMO2bmNlbGlrbGlkaXIuXG4gICAgICBjb25zdCByZXR1cm5lZENvbXBhbnlJZCA9IChoaXN0b3J5LnN0YXRlIGFzIHsgc291cmNlQ29tcGFueUlkPzogc3RyaW5nIH0gfCB1bmRlZmluZWQpPy5zb3VyY2VDb21wYW55SWQ7XG4gICAgICBjb25zdCBwcmVmZXJyZWRDb21wYW55SWQgPVxuICAgICAgICByZXR1cm5lZENvbXBhbnlJZCAmJiB0aGlzLmNvbXBhbmllcy5zb21lKGMgPT4gYy5pZCA9PT0gcmV0dXJuZWRDb21wYW55SWQpID8gcmV0dXJuZWRDb21wYW55SWQgOiB1bmRlZmluZWQ7XG5cbiAgICAgIGlmICh0aGlzLmNvbXBhbmllcy5sZW5ndGggPiAwICYmICF0aGlzLmZpbHRlclNvdXJjZUNvbXBhbnlJZCkge1xuICAgICAgICB0aGlzLmZpbHRlclNvdXJjZUNvbXBhbnlJZCA9IHByZWZlcnJlZENvbXBhbnlJZCA/PyB0aGlzLmNvbXBhbmllc1swXS5pZDtcbiAgICAgICAgdGhpcy5zZWFyY2goKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGNvbXBhbnlOYW1lKGlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmNvbXBhbmllcy5maW5kKGMgPT4gYy5pZCA9PT0gaWQpPy5jb21wYW55TmFtZSA/PyBpZDtcbiAgfVxuXG4gIHNlYXJjaCgpIHtcbiAgICBpZiAoIXRoaXMuZmlsdGVyU291cmNlQ29tcGFueUlkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2FkRWxpZ2libGVJbnZvaWNlcygpO1xuICAgIHRoaXMubG9hZFRyYW5zZmVycygpO1xuICB9XG5cbiAgLy8gXCJCZWxnZSBEdXJ1bXVcIiAoVGFzbGFrL0thecSxdGzEsSkgdmV5YSBrYXluYWsgxZ9pcmtldCBkZcSfacWfdGlyaWxkacSfaW5kZSDDtm5jZWtpIGlzdGVrIHVuc3Vic2NyaWJlIGlsZVxuICAvLyBpcHRhbCBlZGlsaXlvciAtIGFuY2FrIGJ1IFRFSyBCQcWeSU5BIHlldGVybGkgb2xtYWTEscSfxLEgZ2Vyw6dlayBvcnRhbWRhIGfDtnpsZW1sZW5kaSAoa3VsbGFuxLFjxLEgZ2VyaVxuICAvLyBiaWxkaXJpbWl5bGUgdGVzcGl0IGVkaWxkaTogXCJUYXNsYWtcIiBzZcOnaWxpeWtlbiBla3JhbmRhIGjDomzDoiBLYXnEsXRsxLEgbW9kdW5kYW4ga2FsbWEgdmVyaVxuICAvLyBnw7Zyw7xuZWJpbGl5b3JkdSAtIHVuc3Vic2NyaWJlIGhlciBrb8WfdWxkYSB0YXJhecSxY8SxIGlzdGXEn2luaSBhbsSxbmRhIGlwdGFsIGV0bWV5ZWJpbGl5b3IveWFuxLF0IHphdGVuXG4gIC8vIHlvbGEgw6fEsWttxLHFnyBvbGFiaWxpeW9yKS4gQnUgecO8emRlbiBBWVJJQ0EgaGVyIGlzdGXEn2UgYXJ0YW4gYmlyIHPEsXJhIG51bWFyYXPEsSAocmVxdWVzdElkKSB2ZXJpbGl5b3I7XG4gIC8vIHlhbsSxdCBnZWxkacSfaW5kZSBidSBudW1hcmEgaMOibMOiIFwic29udW5jdXN1XCIgZGXEn2lsc2UgKGFyYWRhbiB5ZW5pIGJpciBpc3RlayBiYcWfbGFkxLF5c2EpIHNvbnXDpyBzZXNzaXpjZVxuICAvLyBhdMSxbMSxeW9yIC0gZXNraSB5YW7EsXQgaGFuZ2kgc2ViZXBsZSBnZWxpcnNlIGdlbHNpbiBla3JhbmEgYXNsYSB5YW5zxLFtYXouXG4gIHByaXZhdGUgZWxpZ2libGVJbnZvaWNlc1N1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSB0cmFuc2ZlcnNTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgZWxpZ2libGVJbnZvaWNlc1JlcXVlc3RJZCA9IDA7XG4gIHByaXZhdGUgdHJhbnNmZXJzUmVxdWVzdElkID0gMDtcblxuICBwcml2YXRlIGxvYWRFbGlnaWJsZUludm9pY2VzKCkge1xuICAgIHRoaXMuZWxpZ2libGVJbnZvaWNlc1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmVsaWdpYmxlSW52b2ljZXMgPSBbXTtcbiAgICBjb25zdCByZXF1ZXN0SWQgPSArK3RoaXMuZWxpZ2libGVJbnZvaWNlc1JlcXVlc3RJZDtcblxuICAgIHRoaXMuaXNMaXN0TG9hZGluZyA9IHRydWU7XG4gICAgdGhpcy5lbGlnaWJsZUludm9pY2VzU3Vic2NyaXB0aW9uID0gdGhpcy5zZXJ2aWNlXG4gICAgICAuZ2V0RWxpZ2libGVTb3VyY2VJbnZvaWNlcyh7IHNvdXJjZUNvbXBhbnlJZDogdGhpcy5maWx0ZXJTb3VyY2VDb21wYW55SWQsIHNvdXJjZURvY3VtZW50TGlmZWN5Y2xlOiB0aGlzLnNvdXJjZURvY3VtZW50TGlmZWN5Y2xlIH0pXG4gICAgICAucGlwZShmaW5hbGl6ZSgoKSA9PiAodGhpcy5pc0xpc3RMb2FkaW5nID0gZmFsc2UpKSlcbiAgICAgIC5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgICAgaWYgKHJlcXVlc3RJZCAhPT0gdGhpcy5lbGlnaWJsZUludm9pY2VzUmVxdWVzdElkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZWxpZ2libGVJbnZvaWNlcyA9IHJlc3VsdC5pdGVtcy5tYXAoaXRlbSA9PiAoeyAuLi5pdGVtLCBzdGF0dXNMYWJlbDogdGhpcy5pbnZvaWNlU3RhdHVzTGFiZWwoaXRlbSkgfSkpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGxvYWRUcmFuc2ZlcnMoKSB7XG4gICAgdGhpcy50cmFuc2ZlcnNTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy50cmFuc2ZlcnMgPSBbXTtcbiAgICBjb25zdCByZXF1ZXN0SWQgPSArK3RoaXMudHJhbnNmZXJzUmVxdWVzdElkO1xuXG4gICAgdGhpcy5pc1RyYW5zZmVyc0xvYWRpbmcgPSB0cnVlO1xuICAgIHRoaXMudHJhbnNmZXJzU3Vic2NyaXB0aW9uID0gdGhpcy5zZXJ2aWNlXG4gICAgICAuZ2V0TGlzdCh7IHNvdXJjZUNvbXBhbnlJZDogdGhpcy5maWx0ZXJTb3VyY2VDb21wYW55SWQsIG1heFJlc3VsdENvdW50OiA1MCwgc2tpcENvdW50OiAwLCBzb3J0aW5nOiAnY3JlYXRpb25UaW1lIGRlc2MnIH0pXG4gICAgICAucGlwZShmaW5hbGl6ZSgoKSA9PiAodGhpcy5pc1RyYW5zZmVyc0xvYWRpbmcgPSBmYWxzZSkpKVxuICAgICAgLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgICBpZiAocmVxdWVzdElkICE9PSB0aGlzLnRyYW5zZmVyc1JlcXVlc3RJZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRyYW5zZmVycyA9IHJlc3VsdC5pdGVtcztcbiAgICAgIH0pO1xuICB9XG5cbiAgaW52b2ljZVN0YXR1c0xhYmVsKHJvdzogRWxpZ2libGVTb3VyY2VJbnZvaWNlRHRvKTogc3RyaW5nIHtcbiAgICBpZiAocm93LnRhcmdldEhhc0R1cGxpY2F0ZU51bUF0Q2FyZCkge1xuICAgICAgcmV0dXJuICdIZWRlZnRlIG1ldmN1dCc7XG4gICAgfVxuICAgIHJldHVybiByb3cuaXNSZXNvbHZlZCA/ICdBa3RhcsSxbGFiaWxpcicgOiAnRcWfbGXFn3Rpcm1lIHlvayc7XG4gIH1cblxuICB0cmFuc2ZlclN0YXR1c0xhYmVsKHN0YXR1czogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50cmFuc2ZlclN0YXR1c0xvb2t1cC5maW5kKHMgPT4gcy52YWx1ZSA9PT0gc3RhdHVzKT8udGV4dCA/PyBTdHJpbmcoc3RhdHVzKTtcbiAgfVxuXG4gIC8vIEF5bsSxIGtheW5hayBiZWxnZSBpw6dpbiBkYWhhIMO2bmNlIGJhxZ9sYXTEsWxtxLHFnyBhbWEgaGVuw7x6IMOnYWzEscWfdMSxcsSxbG1hbcSxxZ8gYmlyIHRhc2xhayB2YXJzYSwgXCLEsMWfbGVtbGVyXCJcbiAgLy8gaGVyIHNlZmVyaW5kZSBDcmVhdGVBc3luYyDDp2HEn8SxcsSxcCBtw7xrZXJyZXIgYmlyIHRhc2xhayBkYWhhIG9sdcWfdHVybWFzxLFuIGRpeWUgw7ZuY2Uga29udHJvbCBlZGlsaXIuXG4gIG9wZW5UcmFuc2ZlclBhZ2Uocm93OiBFbGlnaWJsZVNvdXJjZUludm9pY2VEdG8pIHtcbiAgICB0aGlzLnNlcnZpY2UuZmluZEV4aXN0aW5nRHJhZnQodGhpcy5maWx0ZXJTb3VyY2VDb21wYW55SWQsIHJvdy5kb2NFbnRyeSwgdGhpcy5zb3VyY2VEb2N1bWVudExpZmVjeWNsZSkuc3Vic2NyaWJlKGV4aXN0aW5nID0+IHtcbiAgICAgIGlmIChleGlzdGluZykge1xuICAgICAgICBjb25zdCBjcmVhdGlvbkRhdGUgPSBleGlzdGluZy5jcmVhdGlvblRpbWUgPyBuZXcgRGF0ZShleGlzdGluZy5jcmVhdGlvblRpbWUpLnRvTG9jYWxlU3RyaW5nKCd0ci1UUicpIDogJyc7XG4gICAgICAgIHRoaXMuY29uZmlybWF0aW9uXG4gICAgICAgICAgLndhcm4oXG4gICAgICAgICAgICBgQnUgYmVsZ2UgKCR7cm93LmRvY051bX0pIGnDp2luIHphdGVuIGJpciB0YXNsYWsgYWt0YXLEsW0gdmFyIChvbHXFn3R1cnVsbWE6ICR7Y3JlYXRpb25EYXRlfSkuYCxcbiAgICAgICAgICAgICdGQkRvY3VtZW50Rmxvdzo6QXJlWW91U3VyZScsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHllc1RleHQ6ICdFdmV0LCBBw6cnLFxuICAgICAgICAgICAgICBjYW5jZWxUZXh0OiAnSGF5xLFyLCBZZW5pIE9sdcWfdHVyJyxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApXG4gICAgICAgICAgLnN1YnNjcmliZShzdGF0dXMgPT4ge1xuICAgICAgICAgICAgaWYgKHN0YXR1cyA9PT0gQ29uZmlybWF0aW9uLlN0YXR1cy5jb25maXJtKSB7XG4gICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2ZiZG9jdW1lbnRmbG93L2RvY3VtZW50LXRyYW5zZmVycycsIGV4aXN0aW5nLmlkXSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyA9PT0gQ29uZmlybWF0aW9uLlN0YXR1cy5yZWplY3QpIHtcbiAgICAgICAgICAgICAgLy8gS3VsbGFuxLFjxLEgXCJIYXnEsXIsIFllbmkgVGFzbGFrIE9sdcWfdHVyXCIgYnV0b251bmEgYmFzdMSxOiDDtm5jZWtpIHRhc2xhayBoacOnIMOnYWzEscWfdMSxcsSxbG1hZMSxxJ/EsW5kYW5cbiAgICAgICAgICAgICAgLy8gKGhlbsO8eiBoacOnYmlyIFNBUCBiZWxnZXNpIHlvaykgc2Vzc2l6Y2Ugc2lsaW5peW9yIC0gYWtzaSBoYWxkZSBoZXIgXCJIYXnEsXJcIiBiaXIgdGFzbGFrIGRhaGFcbiAgICAgICAgICAgICAgLy8gYmlyaWt0aXJpciB2ZSBrdWxsYW7EsWPEsSB6YXRlbiB5YWxuxLF6Y2EgZW4gc29uIG9sdcWfdHVyZHXEn3UgdGFzbGFrbGEgaWxnaWxlbml5b3IuXG4gICAgICAgICAgICAgIHRoaXMuc2VydmljZS5kZWxldGVEcmFmdChleGlzdGluZy5pZCkuc3Vic2NyaWJlKCgpID0+IHRoaXMubmF2aWdhdGVUb05ld1RyYW5zZmVyKHJvdykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gc3RhdHVzID09PSBkaXNtaXNzOiBrdWxsYW7EsWPEsSBkaXlhbG/En3Uga2FwYXR0xLEgKMO2ci4gZMSxxZ9hcsSxIHTEsWtsYWTEsSkgLSBoacOnYmlyIMWfZXkgeWFwxLFsbWF6LFxuICAgICAgICAgICAgLy8gbmUgbWV2Y3V0IHRhc2xhayBhw6fEsWzEsXIgbmUgZGUgc2lsaW5pcjsgw7ZuY2VraSBkYXZyYW7EscWfdGEgYnUgZHVydW0geWFubMSxxZ9sxLFrbGEgc2lsbWVcbiAgICAgICAgICAgIC8vIGRhbMSxbmEgZMO8xZ/DvHlvcmR1LlxuICAgICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvTmV3VHJhbnNmZXIocm93KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgbmF2aWdhdGVUb05ld1RyYW5zZmVyKHJvdzogRWxpZ2libGVTb3VyY2VJbnZvaWNlRHRvKSB7XG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvZmJkb2N1bWVudGZsb3cvZG9jdW1lbnQtdHJhbnNmZXJzJywgJ25ldyddLCB7XG4gICAgICBzdGF0ZToge1xuICAgICAgICBzb3VyY2VDb21wYW55SWQ6IHRoaXMuZmlsdGVyU291cmNlQ29tcGFueUlkLFxuICAgICAgICBzb3VyY2VDb21wYW55TmFtZTogdGhpcy5jb21wYW55TmFtZSh0aGlzLmZpbHRlclNvdXJjZUNvbXBhbnlJZCksXG4gICAgICAgIGRvY0VudHJ5OiByb3cuZG9jRW50cnksXG4gICAgICAgIGRvY051bTogcm93LmRvY051bSxcbiAgICAgICAgbnVtQXRDYXJkOiByb3cubnVtQXRDYXJkLFxuICAgICAgICBwcm9qZWN0Q29kZTogcm93LnByb2plY3RDb2RlLFxuICAgICAgICB0YXJnZXRDb21wYW55SWQ6IHJvdy50YXJnZXRDb21wYW55SWQsXG4gICAgICAgIHRhcmdldENvbXBhbnlOYW1lOiByb3cudGFyZ2V0Q29tcGFueU5hbWUsXG4gICAgICAgIGN1cnJlbmN5OiByb3cuY3VycmVuY3ksXG4gICAgICAgIHNvdXJjZURvY3VtZW50TGlmZWN5Y2xlOiB0aGlzLnNvdXJjZURvY3VtZW50TGlmZWN5Y2xlLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIG9wZW5UcmFuc2ZlckRldGFpbChyb3c6IERvY3VtZW50VHJhbnNmZXJEdG8pIHtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9mYmRvY3VtZW50Zmxvdy9kb2N1bWVudC10cmFuc2ZlcnMnLCByb3cuaWRdKTtcbiAgfVxuXG4gIC8vIFRhbWFtbGFubcSxxZ8vRGV2YW0gRWRlbiBrYXnEsXRsYXIgc2lsaW5lbWV6IChiYWNrZW5kIHphdGVuIFRyYW5zZmVyTm90RWRpdGFibGUgaWxlIHJlZGRlZGVyKTsgXCJTaWxcIlxuICAvLyBzZcOnZW5lxJ9pIHlhbG7EsXpjYSBUYXNsYWsvSGF0YWzEsS/EsHB0YWwgRWRpbGRpIGthecSxdGxhcmRhIGfDtnLDvG7DvHIuXG4gIGNhbkRlbGV0ZVRyYW5zZmVyKHJvdzogRG9jdW1lbnRUcmFuc2ZlckR0byk6IGJvb2xlYW4ge1xuICAgIHJldHVybiByb3cuc3RhdHVzICE9PSAxICYmIHJvdy5zdGF0dXMgIT09IDI7IC8vIDE9RGV2YW0gRWRpeW9yLCAyPVRhbWFtbGFuZMSxXG4gIH1cblxuICBkZWxldGVUcmFuc2Zlcihyb3c6IERvY3VtZW50VHJhbnNmZXJEdG8pIHtcbiAgICB0aGlzLmNvbmZpcm1hdGlvblxuICAgICAgLndhcm4oJ0ZCRG9jdW1lbnRGbG93OjpEZWxldGVDb25maXJtYXRpb25NZXNzYWdlJywgJ0ZCRG9jdW1lbnRGbG93OjpBcmVZb3VTdXJlJylcbiAgICAgIC5zdWJzY3JpYmUoc3RhdHVzID0+IHtcbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gQ29uZmlybWF0aW9uLlN0YXR1cy5jb25maXJtKSB7XG4gICAgICAgICAgdGhpcy5zZXJ2aWNlLmRlbGV0ZShyb3cuaWQpLnN1YnNjcmliZSgoKSA9PiB0aGlzLmxvYWRUcmFuc2ZlcnMoKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgLy8gQnUgbWVuw7wgacOnaW4gw7zDpyBmYXJrbMSxIHlha2xhxZ/EsW0gZGVuZW5kaSB2ZSBoZXBzaSBEZXZFeHRyZW1lIGdyaWQgaMO8Y3Jlc2kgacOnaW5kZSBiYcWfYXLEsXPEsXogb2xkdTpcbiAgLy8gKDEpIEJvb3RzdHJhcCfEsW4gZGF0YS1icy10b2dnbGU9XCJkcm9wZG93blwiJ8SxIC0gQm9vdHN0cmFwIEpTIGJ1bmRsZSfEsSB5w7xrbMO8IGRlxJ9pbCwgaGnDpyB0ZXBraSB2ZXJtZWRpLlxuICAvLyAoMikgU2FmIEFuZ3VsYXIgKm5nSWYgZHJvcGRvd24nxLEgLSBET00nZGEgZG/En3J1IGHDp8SxbMSxcCBrYXBhbsSxeW9yZHUgYW1hIGjDvGNyZW5pbi9yb3dzdmlldyfEsW5cbiAgLy8gICAgIG92ZXJmbG93OmhpZGRlbifEsSB5w7x6w7xuZGVuIGfDtnLDvG5tw7x5b3JkdSAoei1pbmRleCBidW51IGHFn2FtYXosIGdlcsOnZWsgb3J0YW1kYSBkb8SfcnVsYW5kxLEpLlxuICAvLyAoMykgZHgtZHJvcC1kb3duLWJ1dHRvbiAtIGfDtnJzZWwgb2xhcmFrIGdyaWQnaW4gZMSxxZ/EsW5hIHRhxZ/EsXAgZG/En3J1IGfDtnLDvG7DvHlvcmR1LCBhbWEgb25JdGVtQ2xpY2tcbiAgLy8gICAgIG9sYXnEsSBidSBvcnRhbWRhIGfDvHZlbmlsaXIgdGV0aWtsZW5tZWRpIChnZXLDp2VrIG9ydGFtZGEgZG/En3J1bGFuZMSxOiBoacOnYmlyIHTEsWtsYW1hIGhhbmRsZXInxLFcbiAgLy8gICAgIMOnYcSfxLFybWFkxLEpLlxuICAvLyDDh8O2esO8bTogbWVuw7x5w7wgZ3JpZCdpbiBUQU1BTUVOIERJxZ5JTkEsIGNvbXBvbmVudCDFn2FibG9udW51biBlbiDDvHN0IHNldml5ZXNpbmUgdGHFn8SxbWFrIC0gYsO2eWxlY2UgbmVcbiAgLy8gb3ZlcmZsb3c6aGlkZGVuIGvEsXJwbWFzxLEgbmUgZGUgKmR4VGVtcGxhdGUgacOnaSBvbGF5IGJhxJ9sYW1hIHNvcnVubGFyxLEgeWHFn2FuxLFyLiBaYXRlbiDDp2FsxLHFn3TEscSfxLFcbiAgLy8ga2FuxLF0bGFubcSxxZ8gdGVrbGkgXCLEsMWfbGVtbGVyXCIgYnV0b251eWxhIChhY3Rpb25zVGVtcGxhdGUpIGJpcmViaXIgYXluxLEsIGJhc2l0IChjbGljaykgbWVrYW5pem1hc8SxLlxuICBvcGVuQWN0aW9uc1JvdzogRG9jdW1lbnRUcmFuc2ZlckR0byB8IG51bGwgPSBudWxsO1xuICBhY3Rpb25zTWVudVBvc2l0aW9uID0geyB0b3A6IDAsIGxlZnQ6IDAgfTtcblxuICB0b2dnbGVBY3Rpb25zKHJvdzogRG9jdW1lbnRUcmFuc2ZlckR0bywgZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBpZiAodGhpcy5vcGVuQWN0aW9uc1JvdyA9PT0gcm93KSB7XG4gICAgICB0aGlzLm9wZW5BY3Rpb25zUm93ID0gbnVsbDtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCByZWN0ID0gKGV2ZW50LmN1cnJlbnRUYXJnZXQgYXMgSFRNTEVsZW1lbnQpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIHRoaXMuYWN0aW9uc01lbnVQb3NpdGlvbiA9IHsgdG9wOiByZWN0LmJvdHRvbSArIHdpbmRvdy5zY3JvbGxZLCBsZWZ0OiByZWN0LmxlZnQgKyB3aW5kb3cuc2Nyb2xsWCB9O1xuICAgIHRoaXMub3BlbkFjdGlvbnNSb3cgPSByb3c7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpjbGljaycpXG4gIGNsb3NlQWN0aW9uc01lbnUoKSB7XG4gICAgdGhpcy5vcGVuQWN0aW9uc1JvdyA9IG51bGw7XG4gIH1cblxuICBzZWxlY3RBY3Rpb24oYWN0aW9uOiAndmlldycgfCAnZGVsZXRlJywgcm93OiBEb2N1bWVudFRyYW5zZmVyRHRvKSB7XG4gICAgdGhpcy5vcGVuQWN0aW9uc1JvdyA9IG51bGw7XG4gICAgaWYgKGFjdGlvbiA9PT0gJ3ZpZXcnKSB7XG4gICAgICB0aGlzLm9wZW5UcmFuc2ZlckRldGFpbChyb3cpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRlbGV0ZVRyYW5zZmVyKHJvdyk7XG4gICAgfVxuICB9XG5cbiAgLy8gU3BlYyDCpzUgLSBtdWhhdGFwIGXFn2xlxZ90aXJtZXNpIGJ1bHVuYW1heWFuIGR1cnVtZGEga3VsbGFuxLFjxLFkYW4gaGVkZWYgU0FQIMWfaXJrZXRpbmRla2kgZG/En3J1XG4gIC8vIE3DvMWfdGVyaS9TYXTEsWPEsSBDYXJkQ29kZSBzZcOnaW1pIGlzdGVuZWNla3RpcjsgYnUgc2XDp2ltaW4gTXVoYXRhcCBFxZ9sZcWfdGlybWVsZXJpIGVrcmFuxLFuYVxuICAvLyB5w7ZubGVuZGlyaWxlcmVrIHlhcHTEsXLEsWxtYXPEsSBzcGVjIHRhcmFmxLFuZGFuIGHDp8Sxa8OnYSBpemluIHZlcmlsZW4gYmlyIGFyYXnDvHogc2XDp2VuZcSfaWRpci5cbiAgLy8gTcO8xZ90ZXJpIENhcmRDb2RlIGJ1cmFkYSB0YWhtaW4gZGXEn2lsZGlyOiBSZXNvbHZlRmlyc3RUYXJnZXRBc3luYyB0YW0gb2xhcmFrXG4gIC8vIFwiU291cmNlQ29tcGFueUlkICsgQ3VzdG9tZXJDYXJkQ29kZSA9PSBPSU5WLkNhcmRDb2RlXCIgZcWfbGXFn21lc2luaSBhcmFkxLHEn8SxbmRhbiwgZWtzaWsgb2xhblxuICAvLyBlxZ9sZcWfdGlybWVuaW4gQ3VzdG9tZXJDYXJkQ29kZSBkZcSfZXJpIHphdGVuIGJ1IGZhdHVyYW7EsW4ga2VuZGkgQ2FyZENvZGUndWR1ci5cbiAgZ29Ub1BhcnRuZXJNYXBwaW5nKGN1c3RvbWVyQ2FyZENvZGU/OiBzdHJpbmcsIGN1c3RvbWVyQ2FyZE5hbWU/OiBzdHJpbmcpIHtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9mYmRvY3VtZW50Zmxvdy9wYXJ0bmVyLW1hcHBpbmdzJ10sIHtcbiAgICAgIHN0YXRlOiB7IHNvdXJjZUNvbXBhbnlJZDogdGhpcy5maWx0ZXJTb3VyY2VDb21wYW55SWQsIGN1c3RvbWVyQ2FyZENvZGUsIGN1c3RvbWVyQ2FyZE5hbWUgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHRvZ2dsZUhpc3RvcnkoKSB7XG4gICAgdGhpcy5pc0hpc3RvcnlFeHBhbmRlZCA9ICF0aGlzLmlzSGlzdG9yeUV4cGFuZGVkO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiY2FyZCBtYi0zXCI+XG4gIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlciBweS0zXCI+XG4gICAgPGg1IGNsYXNzPVwiY2FyZC10aXRsZSBtYi0wXCI+e3sgJ0ZCRG9jdW1lbnRGbG93OjpNZW51OkRvY3VtZW50VHJhbnNmZXJzJyB8IGFicExvY2FsaXphdGlvbiB9fTwvaDU+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IHB0LTNcIj5cbiAgICA8ZGl2IGNsYXNzPVwicm93IGctMyBhbGlnbi1pdGVtcy1lbmQgbWItM1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWxcIj5LYXluYWsgxZ5pcmtldDwvbGFiZWw+XG4gICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdFwiIFsobmdNb2RlbCldPVwiZmlsdGVyU291cmNlQ29tcGFueUlkXCIgKG5nTW9kZWxDaGFuZ2UpPVwic2VhcmNoKClcIj5cbiAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBjIG9mIGNvbXBhbmllc1wiIFtuZ1ZhbHVlXT1cImMuaWRcIj57eyBjLmNvbXBhbnlOYW1lIH19PC9vcHRpb24+XG4gICAgICAgIDwvc2VsZWN0PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTNcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiPktheW5hayBCZWxnZSBEdXJ1bXU8L2xhYmVsPlxuICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIiBbKG5nTW9kZWwpXT1cInNvdXJjZURvY3VtZW50TGlmZWN5Y2xlXCIgKG5nTW9kZWxDaGFuZ2UpPVwic2VhcmNoKClcIj5cbiAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBvIG9mIHNvdXJjZURvY3VtZW50TGlmZWN5Y2xlT3B0aW9uc1wiIFtuZ1ZhbHVlXT1cIm8udmFsdWVcIj57eyBvLmxhYmVsIH19PC9vcHRpb24+XG4gICAgICAgIDwvc2VsZWN0PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLWF1dG9cIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5XCIgKGNsaWNrKT1cInNlYXJjaCgpXCIgW2Rpc2FibGVkXT1cImlzTGlzdExvYWRpbmcgfHwgaXNUcmFuc2ZlcnNMb2FkaW5nXCIgdGl0bGU9XCJMaXN0ZXlpIHllbmlsZVwiPlxuICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtcmVmcmVzaCBtZS0xXCI+PC9pPlllbmlsZVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGg2IGNsYXNzPVwibWItMlwiPkFrdGFyxLFtYSBVeWd1biBNw7zFn3RlcmkgRmF0dXJhbGFyxLE8L2g2PlxuICAgIDxzbWFsbCBjbGFzcz1cInRleHQtbXV0ZWQgZC1ibG9jayBtYi0yXCI+QmVsZ2UgTm8sIE51bUF0Q2FyZCwgUHJvamUgdmIuIGlsZSBkYXJhbHRtYWsgacOnaW4gdGFibG8gYmHFn2zEsWtsYXLEsW5kYWtpIGFyYW1hIGt1dHVsYXLEsW7EsSBrdWxsYW7EsW4uPC9zbWFsbD5cblxuICAgIDxkaXYgKm5nSWY9XCJpc0xpc3RMb2FkaW5nXCIgY2xhc3M9XCJ0ZXh0LWNlbnRlciBweS01XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwic3Bpbm5lci1ib3JkZXIgdGV4dC1wcmltYXJ5XCIgcm9sZT1cInN0YXR1c1wiPjwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cIm10LTIgdGV4dC1tdXRlZFwiPkZhdHVyYWxhciBTQVAndGFuIHnDvGtsZW5peW9yLi4uPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZHgtZGF0YS1ncmlkXG4gICAgICAqbmdJZj1cIiFpc0xpc3RMb2FkaW5nXCJcbiAgICAgIFtkYXRhU291cmNlXT1cImVsaWdpYmxlSW52b2ljZXNcIlxuICAgICAgW3Nob3dCb3JkZXJzXT1cInRydWVcIlxuICAgICAgW3Nob3dSb3dMaW5lc109XCJ0cnVlXCJcbiAgICAgIFtjb2x1bW5BdXRvV2lkdGhdPVwidHJ1ZVwiXG4gICAgICBbaGVpZ2h0XT1cIic0NXZoJ1wiXG4gICAgICBba2V5Ym9hcmROYXZpZ2F0aW9uXT1cInsgZW5hYmxlZDogZmFsc2UgfVwiXG4gICAgPlxuICAgICAgPGR4by1wYWdpbmcgW3BhZ2VTaXplXT1cIjUwXCI+PC9keG8tcGFnaW5nPlxuICAgICAgPGR4by1wYWdlciBbdmlzaWJsZV09XCJ0cnVlXCIgW3Nob3dJbmZvXT1cInRydWVcIiBbc2hvd05hdmlnYXRpb25CdXR0b25zXT1cInRydWVcIj48L2R4by1wYWdlcj5cbiAgICAgIDxkeG8tZmlsdGVyLXJvdyBbdmlzaWJsZV09XCJ0cnVlXCI+PC9keG8tZmlsdGVyLXJvdz5cbiAgICAgIDxkeG8taGVhZGVyLWZpbHRlciBbdmlzaWJsZV09XCJ0cnVlXCI+PC9keG8taGVhZGVyLWZpbHRlcj5cblxuICAgICAgPGR4aS1jb2x1bW4gY2FwdGlvbj1cIsSwxZ9sZW1sZXJcIiBjZWxsVGVtcGxhdGU9XCJhY3Rpb25zVGVtcGxhdGVcIiBbd2lkdGhdPVwiMTAwXCIgW2FsbG93RmlsdGVyaW5nXT1cImZhbHNlXCIgW2FsbG93U29ydGluZ109XCJmYWxzZVwiPjwvZHhpLWNvbHVtbj5cbiAgICAgIDxkeGktY29sdW1uIGRhdGFGaWVsZD1cImRvY051bVwiIGNhcHRpb249XCJCZWxnZSBOb1wiIGRhdGFUeXBlPVwibnVtYmVyXCIgc29ydE9yZGVyPVwiZGVzY1wiIFt3aWR0aF09XCIxMDBcIj48L2R4aS1jb2x1bW4+XG4gICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJudW1BdENhcmRcIiBjYXB0aW9uPVwiTnVtQXRDYXJkXCIgW3dpZHRoXT1cIjE0MFwiPjwvZHhpLWNvbHVtbj5cbiAgICAgIDxkeGktY29sdW1uIGRhdGFGaWVsZD1cInByb2plY3RDb2RlXCIgY2FwdGlvbj1cIlByb2plXCIgW3dpZHRoXT1cIjkwXCI+PC9keGktY29sdW1uPlxuICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwiY2FyZENvZGVcIiBjYXB0aW9uPVwiT0lOVi5DYXJkQ29kZVwiIFt3aWR0aF09XCIxNDBcIj48L2R4aS1jb2x1bW4+XG4gICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJ0YXJnZXRDb21wYW55TmFtZVwiIGNhcHRpb249XCJIZWRlZiDFnmlya2V0XCI+PC9keGktY29sdW1uPlxuICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwiY3VycmVuY3lcIiBjYXB0aW9uPVwiRMO2dml6XCIgW3dpZHRoXT1cIjgwXCI+PC9keGktY29sdW1uPlxuICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwic3RhdHVzTGFiZWxcIiBjYXB0aW9uPVwiRHVydW1cIiBjZWxsVGVtcGxhdGU9XCJzdGF0dXNUZW1wbGF0ZVwiIFt3aWR0aF09XCIxMzBcIj48L2R4aS1jb2x1bW4+XG5cbiAgICAgIDxkaXYgKmR4VGVtcGxhdGU9XCJsZXQgY2VsbCBvZiAnYWN0aW9uc1RlbXBsYXRlJ1wiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLXByaW1hcnlcIlxuICAgICAgICAgIChjbGljayk9XCJvcGVuVHJhbnNmZXJQYWdlKGNlbGwuZGF0YSk7ICRldmVudC50YXJnZXQuYmx1cigpXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiIWNlbGwuZGF0YS5pc1Jlc29sdmVkIHx8IGNlbGwuZGF0YS50YXJnZXRIYXNEdXBsaWNhdGVOdW1BdENhcmRcIlxuICAgICAgICA+XG4gICAgICAgICAgxLDFn2xlbWxlclxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2ICpkeFRlbXBsYXRlPVwibGV0IGNlbGwgb2YgJ3N0YXR1c1RlbXBsYXRlJ1wiIGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLXN0YXJ0IHB5LTJcIj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBjbGFzcz1cImJhZGdlXCJcbiAgICAgICAgICBbY2xhc3MuYmctc3VjY2Vzc109XCJpbnZvaWNlU3RhdHVzTGFiZWwoY2VsbC5kYXRhKSA9PT0gJ0FrdGFyxLFsYWJpbGlyJ1wiXG4gICAgICAgICAgW2NsYXNzLmJnLXNlY29uZGFyeV09XCJpbnZvaWNlU3RhdHVzTGFiZWwoY2VsbC5kYXRhKSA9PT0gJ0hlZGVmdGUgbWV2Y3V0J1wiXG4gICAgICAgICAgW2NsYXNzLmJnLXdhcm5pbmddPVwiaW52b2ljZVN0YXR1c0xhYmVsKGNlbGwuZGF0YSkgPT09ICdFxZ9sZcWfdGlybWUgeW9rJ1wiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBpbnZvaWNlU3RhdHVzTGFiZWwoY2VsbC5kYXRhKSB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAqbmdJZj1cIiFjZWxsLmRhdGEuaXNSZXNvbHZlZFwiXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtd2FybmluZyBidG4tc20gbXQtMiBweS0wIHB4LTJcIlxuICAgICAgICAgIHN0eWxlPVwiZm9udC1zaXplOiAwLjcycmVtXCJcbiAgICAgICAgICAoY2xpY2spPVwiZ29Ub1BhcnRuZXJNYXBwaW5nKGNlbGwuZGF0YS5jYXJkQ29kZSwgY2VsbC5kYXRhLmNhcmROYW1lKVwiXG4gICAgICAgICAgdGl0bGU9XCJNdWhhdGFwIEXFn2xlxZ90aXJtZWxlcmkgZWtyYW7EsW5hIGdpdFwiXG4gICAgICAgID5cbiAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWxpbmsgbWUtMVwiPjwvaT5FxZ9sZcWfdGlyXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9keC1kYXRhLWdyaWQ+XG5cbiAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LW11dGVkIGQtYmxvY2sgbXQtMlwiPlxuICAgICAgXCJIZWRlZnRlIG1ldmN1dFwiIGJpbGdpc2ksIGtheW5hayBPSU5WLk51bUF0Q2FyZCBkZcSfZXJpbmluIGhlZGVmIMWfaXJrZXR0ZSBPUENILk51bUF0Q2FyZCBhbGFuxLFuZGEgYnVsdW5tYXPEsSBoYWxpbmRlIGfDtnN0ZXJpbGlyLlxuICAgIDwvc21hbGw+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJjYXJkXCI+XG4gIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlciBweS0zXCIgcm9sZT1cImJ1dHRvblwiIChjbGljayk9XCJ0b2dnbGVIaXN0b3J5KClcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgPGg1IGNsYXNzPVwiY2FyZC10aXRsZSBtYi0wXCI+xLDFn2xlbSBHZcOnbWnFn2k8L2g1PlxuICAgICAgPGkgY2xhc3M9XCJmYVwiIFtjbGFzcy5mYS1jaGV2cm9uLXVwXT1cImlzSGlzdG9yeUV4cGFuZGVkXCIgW2NsYXNzLmZhLWNoZXZyb24tZG93bl09XCIhaXNIaXN0b3J5RXhwYW5kZWRcIj48L2k+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IHB0LTNcIiBbaGlkZGVuXT1cIiFpc0hpc3RvcnlFeHBhbmRlZFwiPlxuICAgIDxzbWFsbCBjbGFzcz1cInRleHQtbXV0ZWQgZC1ibG9jayBtYi0yXCI+U2XDp2lsaSBrYXluYWsgxZ9pcmtldCBpw6dpbiBkYWhhIMO2bmNlIGJhxZ9sYXTEsWxtxLHFnyBha3RhcsSxbWxhciAoacWfbGVtIGJla2xpeW9yLCBkZXZhbSBlZGVuLCB0YW1hbWxhbmFuLCBoYXRhbMSxLCBpcHRhbCBlZGlsZW4pLjwvc21hbGw+XG5cbiAgICA8ZGl2ICpuZ0lmPVwiaXNUcmFuc2ZlcnNMb2FkaW5nXCIgY2xhc3M9XCJ0ZXh0LWNlbnRlciBweS01XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwic3Bpbm5lci1ib3JkZXIgdGV4dC1wcmltYXJ5XCIgcm9sZT1cInN0YXR1c1wiPjwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cIm10LTIgdGV4dC1tdXRlZFwiPlnDvGtsZW5peW9yLi4uPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZHgtZGF0YS1ncmlkXG4gICAgICAqbmdJZj1cIiFpc1RyYW5zZmVyc0xvYWRpbmdcIlxuICAgICAgW2RhdGFTb3VyY2VdPVwidHJhbnNmZXJzXCJcbiAgICAgIFtzaG93Qm9yZGVyc109XCJ0cnVlXCJcbiAgICAgIFtzaG93Um93TGluZXNdPVwidHJ1ZVwiXG4gICAgICBbY29sdW1uQXV0b1dpZHRoXT1cInRydWVcIlxuICAgICAgW2hlaWdodF09XCInNDB2aCdcIlxuICAgICAgW2tleWJvYXJkTmF2aWdhdGlvbl09XCJ7IGVuYWJsZWQ6IGZhbHNlIH1cIlxuICAgID5cbiAgICAgIDxkeG8tcGFnaW5nIFtwYWdlU2l6ZV09XCI1MFwiPjwvZHhvLXBhZ2luZz5cbiAgICAgIDxkeG8tcGFnZXIgW3Zpc2libGVdPVwidHJ1ZVwiIFtzaG93SW5mb109XCJ0cnVlXCIgW3Nob3dOYXZpZ2F0aW9uQnV0dG9uc109XCJ0cnVlXCI+PC9keG8tcGFnZXI+XG4gICAgICA8ZHhvLWZpbHRlci1yb3cgW3Zpc2libGVdPVwidHJ1ZVwiPjwvZHhvLWZpbHRlci1yb3c+XG4gICAgICA8ZHhvLWhlYWRlci1maWx0ZXIgW3Zpc2libGVdPVwidHJ1ZVwiPjwvZHhvLWhlYWRlci1maWx0ZXI+XG5cbiAgICAgIDxkeGktY29sdW1uIGNhcHRpb249XCLEsMWfbGVtbGVyXCIgY2VsbFRlbXBsYXRlPVwidmlld1RlbXBsYXRlXCIgW3dpZHRoXT1cIjEyMFwiIFthbGxvd0ZpbHRlcmluZ109XCJmYWxzZVwiIFthbGxvd1NvcnRpbmddPVwiZmFsc2VcIiBhbGlnbm1lbnQ9XCJjZW50ZXJcIj48L2R4aS1jb2x1bW4+XG4gICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJzb3VyY2VPaW52RG9jTnVtXCIgY2FwdGlvbj1cIktheW5hayBCZWxnZVwiIFt3aWR0aF09XCIxMTBcIj48L2R4aS1jb2x1bW4+XG4gICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJwcm9qZWN0Q29kZVwiIGNhcHRpb249XCJQcm9qZVwiIFt3aWR0aF09XCI5MFwiPjwvZHhpLWNvbHVtbj5cbiAgICAgIDxkeGktY29sdW1uIGRhdGFGaWVsZD1cImludGVyY29tcGFueUlkXCIgY2FwdGlvbj1cIkludGVyY29tcGFueSBJZFwiPjwvZHhpLWNvbHVtbj5cbiAgICAgIDwhLS0gS3VsbGFuxLFjxLEgZ2VyaSBiaWxkaXJpbWl5bGUgdGVzcGl0IGVkaWxkaTogxLDFn2xlbSBHZcOnbWnFn2knbmRlIGJpciBrYXlkxLFuIG5vcm1hbCAoS2F5xLF0bMSxKSBtaVxuICAgICAgICAgICB5b2tzYSBUYXNsYWsgbcSxIG9sZHXEn3UgaGnDpyBnw7Zyw7xubcO8eW9yZHUgLSBBa3RhcsSxbSBEdXJ1bXUgKER1cnVtIHPDvHR1bnUpIGlsZSBrYXLEscWfdMSxcsSxbG1hc8SxbiBkaXllXG4gICAgICAgICAgIEtheW5hay9IZWRlZiBCZWxnZSBEdXJ1bXUgYXlyxLEgc8O8dHVubGFyIG9sYXJhayBla2xlbmRpIChia3ouIHNwZWMgwqcxNCkuIC0tPlxuICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwic291cmNlRG9jdW1lbnRMaWZlY3ljbGVcIiBjYXB0aW9uPVwiS2F5bmFrIEJlbGdlIER1cnVtdVwiIFt3aWR0aF09XCIxNDBcIj5cbiAgICAgICAgPGR4by1sb29rdXAgW2RhdGFTb3VyY2VdPVwic291cmNlRG9jdW1lbnRMaWZlY3ljbGVPcHRpb25zXCIgdmFsdWVFeHByPVwidmFsdWVcIiBkaXNwbGF5RXhwcj1cImxhYmVsXCI+PC9keG8tbG9va3VwPlxuICAgICAgPC9keGktY29sdW1uPlxuICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwidGFyZ2V0RG9jdW1lbnRMaWZlY3ljbGVcIiBjYXB0aW9uPVwiSGVkZWYgQmVsZ2UgRHVydW11XCIgW3dpZHRoXT1cIjE0MFwiPlxuICAgICAgICA8ZHhvLWxvb2t1cCBbZGF0YVNvdXJjZV09XCJzb3VyY2VEb2N1bWVudExpZmVjeWNsZU9wdGlvbnNcIiB2YWx1ZUV4cHI9XCJ2YWx1ZVwiIGRpc3BsYXlFeHByPVwibGFiZWxcIj48L2R4by1sb29rdXA+XG4gICAgICA8L2R4aS1jb2x1bW4+XG4gICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJzdGF0dXNcIiBjYXB0aW9uPVwiRHVydW1cIiBjZWxsVGVtcGxhdGU9XCJ0cmFuc2ZlclN0YXR1c1RlbXBsYXRlXCIgW3dpZHRoXT1cIjEzMFwiPlxuICAgICAgICA8ZHhvLWxvb2t1cCBbZGF0YVNvdXJjZV09XCJ0cmFuc2ZlclN0YXR1c0xvb2t1cFwiIHZhbHVlRXhwcj1cInZhbHVlXCIgZGlzcGxheUV4cHI9XCJ0ZXh0XCI+PC9keG8tbG9va3VwPlxuICAgICAgPC9keGktY29sdW1uPlxuICAgICAgPGR4aS1jb2x1bW5cbiAgICAgICAgZGF0YUZpZWxkPVwiY3JlYXRpb25UaW1lXCJcbiAgICAgICAgY2FwdGlvbj1cIk9sdcWfdHVybWEgVGFyaWhpXCJcbiAgICAgICAgZGF0YVR5cGU9XCJkYXRldGltZVwiXG4gICAgICAgIGZvcm1hdD1cImRkLk1NLnl5eXkgSEg6bW1cIlxuICAgICAgICBbd2lkdGhdPVwiMTUwXCJcbiAgICAgICAgc29ydE9yZGVyPVwiZGVzY1wiXG4gICAgICA+PC9keGktY29sdW1uPlxuXG4gICAgICA8ZGl2ICpkeFRlbXBsYXRlPVwibGV0IGNlbGwgb2YgJ3ZpZXdUZW1wbGF0ZSdcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gYnRuLW91dGxpbmUtc2Vjb25kYXJ5XCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJ0b2dnbGVBY3Rpb25zKGNlbGwuZGF0YSwgJGV2ZW50KVwiPlxuICAgICAgICAgIMSwxZ9sZW1sZXIgPGkgY2xhc3M9XCJmYSBmYS1jYXJldC1kb3duIG1zLTFcIj48L2k+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgKmR4VGVtcGxhdGU9XCJsZXQgY2VsbCBvZiAndHJhbnNmZXJTdGF0dXNUZW1wbGF0ZSdcIj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBjbGFzcz1cImJhZGdlXCJcbiAgICAgICAgICBbY2xhc3MuYmctc2Vjb25kYXJ5XT1cImNlbGwudmFsdWUgPT09IDBcIlxuICAgICAgICAgIFtjbGFzcy5iZy1wcmltYXJ5XT1cImNlbGwudmFsdWUgPT09IDFcIlxuICAgICAgICAgIFtjbGFzcy5iZy1zdWNjZXNzXT1cImNlbGwudmFsdWUgPT09IDJcIlxuICAgICAgICAgIFtjbGFzcy5iZy1kYW5nZXJdPVwiY2VsbC52YWx1ZSA9PT0gM1wiXG4gICAgICAgICAgW2NsYXNzLmJnLXdhcm5pbmddPVwiY2VsbC52YWx1ZSA9PT0gNFwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyB0cmFuc2ZlclN0YXR1c0xhYmVsKGNlbGwudmFsdWUpIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZHgtZGF0YS1ncmlkPlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48IS0tIEdyaWQnaW4gREnFnklOREE6IGR4LWRhdGEtZ3JpZCBow7xjcmVsZXJpbmluIG92ZXJmbG93OmhpZGRlbiBrxLFycG1hc8SxIHZlICpkeFRlbXBsYXRlIGnDp2kgb2xheSBiYcSfbGFtYVxuICAgICBzb3J1bmxhcsSxIHlhxZ9hbm1hc8SxbiBkaXllIFwixLDFn2xlbWxlclwiIG1lbsO8c8O8IGJ1cmF5YSwgY29tcG9uZW50IMWfYWJsb251bnVuIGVuIMO8c3Qgc2V2aXllc2luZSB0YcWfxLFuZMSxLiAtLT5cbjx1bFxuICAqbmdJZj1cIm9wZW5BY3Rpb25zUm93IGFzIHJvd1wiXG4gIGNsYXNzPVwibGlzdC11bnN0eWxlZCBtLTAgYmctd2hpdGUgYm9yZGVyIHJvdW5kZWQgc2hhZG93LXNtXCJcbiAgW3N0eWxlLnBvc2l0aW9uXT1cIidhYnNvbHV0ZSdcIlxuICBbc3R5bGUudG9wLnB4XT1cImFjdGlvbnNNZW51UG9zaXRpb24udG9wXCJcbiAgW3N0eWxlLmxlZnQucHhdPVwiYWN0aW9uc01lbnVQb3NpdGlvbi5sZWZ0XCJcbiAgc3R5bGU9XCJ6LWluZGV4OiAxMDUwOyBtaW4td2lkdGg6IDE0MHB4OyBwYWRkaW5nOiA0cHggMFwiXG4gIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuPlxuICA8bGk+XG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJkLWJsb2NrIHctMTAwIHRleHQtc3RhcnQgYm9yZGVyLTAgYmctd2hpdGUgcHgtMyBweS0xXCIgKGNsaWNrKT1cInNlbGVjdEFjdGlvbigndmlldycsIHJvdylcIj5cbiAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZXllIG1lLTJcIj48L2k+R8O2csO8bnTDvGxlXG4gICAgPC9idXR0b24+XG4gIDwvbGk+XG4gIDxsaSAqbmdJZj1cImNhbkRlbGV0ZVRyYW5zZmVyKHJvdylcIj5cbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImQtYmxvY2sgdy0xMDAgdGV4dC1zdGFydCBib3JkZXItMCBiZy13aGl0ZSBweC0zIHB5LTEgdGV4dC1kYW5nZXJcIiAoY2xpY2spPVwic2VsZWN0QWN0aW9uKCdkZWxldGUnLCByb3cpXCI+XG4gICAgICA8aSBjbGFzcz1cImZhIGZhLXRyYXNoIG1lLTJcIj48L2k+U2lsXG4gICAgPC9idXR0b24+XG4gIDwvbGk+XG48L3VsPlxuIl19
255
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGl0LWRvY3VtZW50LXRyYW5zZmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ZiZG9jdW1lbnRmbG93L3NyYy9saWIvY29tcG9uZW50cy9oaXQtZG9jdW1lbnQtdHJhbnNmZXJzL2NvbXBvbmVudHMvaGl0LWRvY3VtZW50LXRyYW5zZmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ZiZG9jdW1lbnRmbG93L3NyYy9saWIvY29tcG9uZW50cy9oaXQtZG9jdW1lbnQtdHJhbnNmZXJzL2NvbXBvbmVudHMvaGl0LWRvY3VtZW50LXRyYW5zZmVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBR2hFLE9BQU8sRUFBRSxZQUFZLEVBQXVCLE1BQU0sc0JBQXNCLENBQUM7QUFFekUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzFDLE9BQU8sRUFJTCxvQkFBb0IsR0FDckIsTUFBTSxtQ0FBbUMsQ0FBQzs7Ozs7Ozs7Ozs7O0FBa0IzQyxNQUFNLE9BQU8sNEJBQTRCO0lBNkJ2QyxZQUNVLE9BQWdDLEVBQ2hDLGNBQXdDLEVBQ3hDLE1BQWMsRUFDZCxZQUFpQyxFQUNqQyxZQUFpQztRQUpqQyxZQUFPLEdBQVAsT0FBTyxDQUF5QjtRQUNoQyxtQkFBYyxHQUFkLGNBQWMsQ0FBMEI7UUFDeEMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLGlCQUFZLEdBQVosWUFBWSxDQUFxQjtRQUNqQyxpQkFBWSxHQUFaLFlBQVksQ0FBcUI7UUFqQzNDLGNBQVMsR0FBMkIsRUFBRSxDQUFDO1FBRXZDLGlHQUFpRztRQUNqRyx5QkFBeUI7UUFDekIsMEJBQXFCLEdBQUcsRUFBRSxDQUFDO1FBQzNCLGtCQUFhLEdBQUcsS0FB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QUFDLENBQUMsa0NBQWtDLENBQUMsRUFBRTtZQUN6RCxLQUFLLEVBQUUsRUFBRSxlQUFlLEVBQUUsSUFBSSxDQUFDLHFCQUFxQixFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFO1NBQzNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxhQUFhO1FBQ1gsSUFBSSxDQUFDLGlCQUFpQixHQUFHLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDO0lBQ25ELENBQUM7O3lIQTVRVSw0QkFBNEI7NkdBQTVCLDRCQUE0Qiw4SEM3QnpDLDhoVkFxTUE7MkZEeEthLDRCQUE0QjtrQkFKeEMsU0FBUzsrQkFDRSx1QkFBdUI7OE9Bb1BqQyxnQkFBZ0I7c0JBRGYsWUFBWTt1QkFBQyxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEhvc3RMaXN0ZW5lciwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgTG9jYWxpemF0aW9uU2VydmljZSB9IGZyb20gJ0BhYnAvbmcuY29yZSc7XG5pbXBvcnQgeyBDb25maXJtYXRpb24sIENvbmZpcm1hdGlvblNlcnZpY2UgfSBmcm9tICdAYWJwL25nLnRoZW1lLnNoYXJlZCc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbmFsaXplIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtcbiAgRG9jdW1lbnRUcmFuc2ZlckR0byxcbiAgRG9jdW1lbnRUcmFuc2ZlclNlcnZpY2UsXG4gIEVsaWdpYmxlU291cmNlSW52b2ljZUR0byxcbiAgU2FwRG9jdW1lbnRMaWZlY3ljbGUsXG59IGZyb20gJy4uLy4uLy4uL3Byb3h5L2RvY3VtZW50LXRyYW5zZmVycyc7XG5pbXBvcnQgeyBTYXBDb21wYW55UHJvZmlsZUR0bywgU2FwQ29tcGFueVByb2ZpbGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vcHJveHkvc2FwLWNvbXBhbnktcHJvZmlsZXMnO1xuXG4vLyBcIkR1cnVtXCIgc8O8dHVudSBBa3RhcsSxbWEgVXlndW4gRmF0dXJhbGFyIHRhYmxvc3VuZGEgdGVrIGJpciBTQVAgYWxhbsSxIGRlxJ9pbCwgYmlyZGVuIGZhemxhIGFsYW5kYW5cbi8vIChpc1Jlc29sdmVkLCB0YXJnZXRIYXNEdXBsaWNhdGVOdW1BdENhcmQpIGhlc2FwbGFuYW4gYmlyIGV0aWtldC4gRGV2RXh0cmVtZSBmaWx0cmUvYmHFn2zEsWstZmlsdHJlc2lcbi8vIHlhbG7EsXpjYSBnZXLDp2VrIGJpciBkYXRhRmllbGQgw7x6ZXJpbmRlbiDDp2FsxLHFn2FiaWxkacSfaW5kZW4sIGJ1IGhlc2FwbGFuYW4gZXRpa2V0IHNhdMSxciB2ZXJpc2luZSBheXLEsVxuLy8gYmlyIGFsYW4gb2xhcmFrIGVrbGVuaXlvciAtIGFrc2kgaGFsZGUgXCJEdXJ1bVwiIHPDvHR1bnVuZGEgaGnDpyBmaWx0cmVsZW1lIHlhcMSxbGFtxLF5b3JkdS5cbnR5cGUgRWxpZ2libGVTb3VyY2VJbnZvaWNlUm93ID0gRWxpZ2libGVTb3VyY2VJbnZvaWNlRHRvICYgeyBzdGF0dXNMYWJlbDogc3RyaW5nIH07XG5cbi8vIGludm9pY2VTdGF0dXNMYWJlbCgpIGxvY2FsaXplIGVkaWxtacWfIG1ldGluIGTDtm5kw7xyZMO8xJ/DvCBpw6dpbiAoYWt0aWYgZGlsZSBnw7ZyZSBkZcSfacWfaXIpLCBiYWRnZSByZW5naW5pXG4vLyBzZcOnZW4gdGVtcGxhdGUgYXJ0xLFrIGJ1IG1ldGlubGUgREXEnsSwTCwgYXluxLEgYWx0dGFraSBkdXJ1bWEga2FyxZ/EsWzEsWsgZ2VsZW4gc2FiaXQgYmlyIFwidmFyaWFudFwiIGtvZHV5bGFcbi8vIGthcsWfxLFsYcWfdMSxcm1hIHlhcGFyIC0gYWtzaSBoYWxkZSBkaWwgVMO8cmvDp2UgZMSxxZ/EsW5hIGTDtm5kw7zEn8O8bmRlIHJlbmsgZcWfbGXFn21lc2kgYm96dWx1cmR1LlxudHlwZSBJbnZvaWNlU3RhdHVzVmFyaWFudCA9ICdyZXNvbHZlZCcgfCAnZHVwbGljYXRlJyB8ICd1bnJlc29sdmVkJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaGl0LWRvY3VtZW50LXRyYW5zZmVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2hpdC1kb2N1bWVudC10cmFuc2Zlci5jb21wb25lbnQuaHRtbCcsXG59KVxuZXhwb3J0IGNsYXNzIEhpdERvY3VtZW50VHJhbnNmZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBjb21wYW5pZXM6IFNhcENvbXBhbnlQcm9maWxlRHRvW10gPSBbXTtcblxuICAvLyBBa3RhcsSxbWEgdXlndW4gbcO8xZ90ZXJpIGZhdHVyYWxhcsSxIC0gUHJvamUvTnVtQXRDYXJkL0JlbGdlIE5vIHZiLiBkYXJhbHRtYSB0YWJsb251biBrZW5kaSBzw7x0dW5cbiAgLy8gZmlsdHJlbGVyaXlsZSB5YXDEsWzEsXIuXG4gIGZpbHRlclNvdXJjZUNvbXBhbnlJZCA9ICcnO1xuICBpc0xpc3RMb2FkaW5nID0gZmFsc2U7XG4gIGVsaWdpYmxlSW52b2ljZXM6IEVsaWdpYmxlU291cmNlSW52b2ljZVJvd1tdID0gW107XG5cbiAgLy8gU3BlYyDCpzE0ICgxOC4wOS4yMDI2IGthcmFyxLEpIC0gc8O8cmXDpyBwYXJhbWV0cmlrOiBUYXNsYWsgc2XDp2lsaXJzZSB0YXNsYWsgZmF0dXJhbGFyLCBLYXnEsXRsxLFcbiAgLy8gc2XDp2lsaXJzZSAodmFyc2F5xLFsYW4sIG1ldmN1dC9lc2tpIGRhdnJhbsSxxZ9sYSB1eXVtbHUpIGthecSxdGzEsSBmYXR1cmFsYXIgbGlzdGVsZW5pci4gQnUgeWFsbsSxemNhXG4gIC8vIEtBWU5BSyBmYXR1cmFuxLFuIG1vZHVkdXIgLSBoZWRlZnRlIG9sdcWfYWNhayBiZWxnZWxlcmluIG1vZHUgKHRhcmdldERvY3VtZW50TGlmZWN5Y2xlKSBidW5kYW5cbiAgLy8gQkHEnklNU0laRElSIHZlIGFrdGFyxLFtIG9sdcWfdHVybWEgZWtyYW7EsW5kYSBheXLEsWNhIHNlw6dpbGlyIChrdWxsYW7EsWPEsSBnZXJpIGJpbGRpcmltaXlsZSBuZXRsZcWfdGlyaWxkaSkuXG4gIHNvdXJjZURvY3VtZW50TGlmZWN5Y2xlID0gU2FwRG9jdW1lbnRMaWZlY3ljbGUuUG9zdGVkO1xuICAvLyBLYXluYWsgSEVSIFpBTUFOIGJpciBNw7zFn3RlcmkgRmF0dXJhc8SxZMSxciAoT0lOVikgLSBldGlrZXQgYnVudSBuZXRsZcWfdGlyaXIgKGt1bGxhbsSxY8SxIGdlcmlcbiAgLy8gYmlsZGlyaW1peWxlIG5ldGxlxZ90aXJpbGRpKS4gxLDFn2xlbSBHZcOnbWnFn2kgdGFibG9zdW5kYWtpIFwiSGVkZWYgQmVsZ2UgRHVydW11XCIgc8O8dHVudW5kYSBkYSAoa3VsbGFuxLFjxLFcbiAgLy8gaXN0ZcSfaXlsZSkgQVlOSSBldGlrZXRsZXIga3VsbGFuxLFsxLFyLlxuICBzb3VyY2VEb2N1bWVudExpZmVjeWNsZU9wdGlvbnM6IHsgdmFsdWU6IFNhcERvY3VtZW50TGlmZWN5Y2xlOyBsYWJlbDogc3RyaW5nIH1bXSA9IFtdO1xuXG4gIC8vIMSwxZ9sZW0gR2XDp21pxZ9pIC0gZGFoYSDDtm5jZSBiYcWfbGF0xLFsbcSxxZ8gKGnFn2xlbSBiZWtsaXlvci9kZXZhbSBlZGVuL3RhbWFtbGFuYW4vaGF0YWzEsS9pcHRhbCBlZGlsZW4pIGFrdGFyxLFtbGFyLlxuICAvLyBcIkthcGF0XCIvXCJMaXN0ZXllIETDtm5cIiBzb25yYXPEsSBrdWxsYW7EsWPEsW7EsW4gYmlyIHppbmNpcmUgdGVrcmFyIGTDtm7DvHAgYmFrYWJpbG1lc2kgacOnaW4uXG4gIGlzVHJhbnNmZXJzTG9hZGluZyA9IGZhbHNlO1xuICB0cmFuc2ZlcnM6IERvY3VtZW50VHJhbnNmZXJEdG9bXSA9IFtdO1xuICBpc0hpc3RvcnlFeHBhbmRlZCA9IHRydWU7XG5cbiAgLy8gRHVydW0gc8O8dHVudW51biBoZWFkZXItZmlsdGVyL2ZpbHRlci1yb3cgYcOnxLFsxLFyIGxpc3Rlc2luZGUgb2t1bmFiaWxpciBldGlrZXRsZXIgZ8O2c3RlcmViaWxtZXNpXG4gIC8vIGnDp2luIChha3NpIGhhbGRlIERldkV4dHJlbWUgaGFtIHNhecSxc2FsIGVudW0gZGXEn2VybGVyaW5pIC0gMC8xLzIvMy80IC0gbGlzdGVsZXIpLlxuICB0cmFuc2ZlclN0YXR1c0xvb2t1cDogeyB2YWx1ZTogbnVtYmVyOyB0ZXh0OiBzdHJpbmcgfVtdID0gW107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBzZXJ2aWNlOiBEb2N1bWVudFRyYW5zZmVyU2VydmljZSxcbiAgICBwcml2YXRlIGNvbXBhbnlTZXJ2aWNlOiBTYXBDb21wYW55UHJvZmlsZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIGNvbmZpcm1hdGlvbjogQ29uZmlybWF0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIGxvY2FsaXphdGlvbjogTG9jYWxpemF0aW9uU2VydmljZVxuICApIHtcbiAgICB0aGlzLnNvdXJjZURvY3VtZW50TGlmZWN5Y2xlT3B0aW9ucyA9IFtcbiAgICAgIHsgdmFsdWU6IFNhcERvY3VtZW50TGlmZWN5Y2xlLlBvc3RlZCwgbGFiZWw6IHRoaXMubG9jYWxpemF0aW9uLmluc3RhbnQoJ0ZCRG9jdW1lbnRGbG93OjpEb2N1bWVudExpZmVjeWNsZTpQb3N0ZWQnKSB9LFxuICAgICAgeyB2YWx1ZTogU2FwRG9jdW1lbnRMaWZlY3ljbGUuRHJhZnQsIGxhYmVsOiB0aGlzLmxvY2FsaXphdGlvbi5pbnN0YW50KCdGQkRvY3VtZW50Rmxvdzo6RG9jdW1lbnRMaWZlY3ljbGU6RHJhZnQnKSB9LFxuICAgIF07XG4gICAgdGhpcy50cmFuc2ZlclN0YXR1c0xvb2t1cCA9IFtcbiAgICAgIHsgdmFsdWU6IDAsIHRleHQ6IHRoaXMubG9jYWxpemF0aW9uLmluc3RhbnQoJ0ZCRG9jdW1lbnRGbG93OjpUcmFuc2ZlclN0YXR1czpQZW5kaW5nJykgfSxcbiAgICAgIHsgdmFsdWU6IDEsIHRleHQ6IHRoaXMubG9jYWxpemF0aW9uLmluc3RhbnQoJ0ZCRG9jdW1lbnRGbG93OjpUcmFuc2ZlclN0YXR1czpJblByb2dyZXNzJykgfSxcbiAgICAgIHsgdmFsdWU6IDIsIHRleHQ6IHRoaXMubG9jYWxpemF0aW9uLmluc3RhbnQoJ0ZCRG9jdW1lbnRGbG93OjpUcmFuc2ZlclN0YXR1czpDb21wbGV0ZWQnKSB9LFxuICAgICAgeyB2YWx1ZTogMywgdGV4dDogdGhpcy5sb2NhbGl6YXRpb24uaW5zdGFudCgnRkJEb2N1bWVudEZsb3c6OlRyYW5zZmVyU3RhdHVzOkZhaWxlZCcpIH0sXG4gICAgICB7IHZhbHVlOiA0LCB0ZXh0OiB0aGlzLmxvY2FsaXphdGlvbi5pbnN0YW50KCdGQkRvY3VtZW50Rmxvdzo6VHJhbnNmZXJTdGF0dXM6Q2FuY2VsbGVkJykgfSxcbiAgICBdO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5jb21wYW55U2VydmljZS5nZXRMaXN0KHsgbWF4UmVzdWx0Q291bnQ6IDEwMDAsIHNraXBDb3VudDogMCwgaXNBY3RpdmU6IHRydWUgfSkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICB0aGlzLmNvbXBhbmllcyA9IHJlc3VsdC5pdGVtcztcblxuICAgICAgLy8gRGV0YXkgc2F5ZmFzxLFuZGFuIFwiTGlzdGV5ZSBEw7ZuXCIvXCJLYXBhdFwiIGlsZSBnZXJpIGdlbGluZGnEn2luZGUsIGt1bGxhbsSxY8SxbsSxbiBvIGFuIMO8emVyaW5kZVxuICAgICAgLy8gw6dhbMSxxZ90xLHEn8SxIMWfaXJrZXQga2F5Ym9sbWFzxLFuIGRpeWUgcm91dGVyIHN0YXRlJ3Rla2kgxZ9pcmtldCDDtm5jZWxpa2xpZGlyLlxuICAgICAgY29uc3QgcmV0dXJuZWRDb21wYW55SWQgPSAoaGlzdG9yeS5zdGF0ZSBhcyB7IHNvdXJjZUNvbXBhbnlJZD86IHN0cmluZyB9IHwgdW5kZWZpbmVkKT8uc291cmNlQ29tcGFueUlkO1xuICAgICAgY29uc3QgcHJlZmVycmVkQ29tcGFueUlkID1cbiAgICAgICAgcmV0dXJuZWRDb21wYW55SWQgJiYgdGhpcy5jb21wYW5pZXMuc29tZShjID0+IGMuaWQgPT09IHJldHVybmVkQ29tcGFueUlkKSA/IHJldHVybmVkQ29tcGFueUlkIDogdW5kZWZpbmVkO1xuXG4gICAgICBpZiAodGhpcy5jb21wYW5pZXMubGVuZ3RoID4gMCAmJiAhdGhpcy5maWx0ZXJTb3VyY2VDb21wYW55SWQpIHtcbiAgICAgICAgdGhpcy5maWx0ZXJTb3VyY2VDb21wYW55SWQgPSBwcmVmZXJyZWRDb21wYW55SWQgPz8gdGhpcy5jb21wYW5pZXNbMF0uaWQ7XG4gICAgICAgIHRoaXMuc2VhcmNoKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBjb21wYW55TmFtZShpZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jb21wYW5pZXMuZmluZChjID0+IGMuaWQgPT09IGlkKT8uY29tcGFueU5hbWUgPz8gaWQ7XG4gIH1cblxuICBzZWFyY2goKSB7XG4gICAgaWYgKCF0aGlzLmZpbHRlclNvdXJjZUNvbXBhbnlJZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG9hZEVsaWdpYmxlSW52b2ljZXMoKTtcbiAgICB0aGlzLmxvYWRUcmFuc2ZlcnMoKTtcbiAgfVxuXG4gIC8vIFwiQmVsZ2UgRHVydW11XCIgKFRhc2xhay9LYXnEsXRsxLEpIHZleWEga2F5bmFrIMWfaXJrZXQgZGXEn2nFn3RpcmlsZGnEn2luZGUgw7ZuY2VraSBpc3RlayB1bnN1YnNjcmliZSBpbGVcbiAgLy8gaXB0YWwgZWRpbGl5b3IgLSBhbmNhayBidSBURUsgQkHFnklOQSB5ZXRlcmxpIG9sbWFkxLHEn8SxIGdlcsOnZWsgb3J0YW1kYSBnw7Z6bGVtbGVuZGkgKGt1bGxhbsSxY8SxIGdlcmlcbiAgLy8gYmlsZGlyaW1peWxlIHRlc3BpdCBlZGlsZGk6IFwiVGFzbGFrXCIgc2XDp2lsaXlrZW4gZWtyYW5kYSBow6Jsw6IgS2F5xLF0bMSxIG1vZHVuZGFuIGthbG1hIHZlcmlcbiAgLy8gZ8O2csO8bmViaWxpeW9yZHUgLSB1bnN1YnNjcmliZSBoZXIga2/Fn3VsZGEgdGFyYXnEsWPEsSBpc3RlxJ9pbmkgYW7EsW5kYSBpcHRhbCBldG1leWViaWxpeW9yL3lhbsSxdCB6YXRlblxuICAvLyB5b2xhIMOnxLFrbcSxxZ8gb2xhYmlsaXlvcikuIEJ1IHnDvHpkZW4gQVlSSUNBIGhlciBpc3RlxJ9lIGFydGFuIGJpciBzxLFyYSBudW1hcmFzxLEgKHJlcXVlc3RJZCkgdmVyaWxpeW9yO1xuICAvLyB5YW7EsXQgZ2VsZGnEn2luZGUgYnUgbnVtYXJhIGjDomzDoiBcInNvbnVuY3VzdVwiIGRlxJ9pbHNlIChhcmFkYW4geWVuaSBiaXIgaXN0ZWsgYmHFn2xhZMSxeXNhKSBzb251w6cgc2Vzc2l6Y2VcbiAgLy8gYXTEsWzEsXlvciAtIGVza2kgeWFuxLF0IGhhbmdpIHNlYmVwbGUgZ2VsaXJzZSBnZWxzaW4gZWtyYW5hIGFzbGEgeWFuc8SxbWF6LlxuICBwcml2YXRlIGVsaWdpYmxlSW52b2ljZXNTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgdHJhbnNmZXJzU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIGVsaWdpYmxlSW52b2ljZXNSZXF1ZXN0SWQgPSAwO1xuICBwcml2YXRlIHRyYW5zZmVyc1JlcXVlc3RJZCA9IDA7XG5cbiAgcHJpdmF0ZSBsb2FkRWxpZ2libGVJbnZvaWNlcygpIHtcbiAgICB0aGlzLmVsaWdpYmxlSW52b2ljZXNTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5lbGlnaWJsZUludm9pY2VzID0gW107XG4gICAgY29uc3QgcmVxdWVzdElkID0gKyt0aGlzLmVsaWdpYmxlSW52b2ljZXNSZXF1ZXN0SWQ7XG5cbiAgICB0aGlzLmlzTGlzdExvYWRpbmcgPSB0cnVlO1xuICAgIHRoaXMuZWxpZ2libGVJbnZvaWNlc1N1YnNjcmlwdGlvbiA9IHRoaXMuc2VydmljZVxuICAgICAgLmdldEVsaWdpYmxlU291cmNlSW52b2ljZXMoeyBzb3VyY2VDb21wYW55SWQ6IHRoaXMuZmlsdGVyU291cmNlQ29tcGFueUlkLCBzb3VyY2VEb2N1bWVudExpZmVjeWNsZTogdGhpcy5zb3VyY2VEb2N1bWVudExpZmVjeWNsZSB9KVxuICAgICAgLnBpcGUoZmluYWxpemUoKCkgPT4gKHRoaXMuaXNMaXN0TG9hZGluZyA9IGZhbHNlKSkpXG4gICAgICAuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICAgIGlmIChyZXF1ZXN0SWQgIT09IHRoaXMuZWxpZ2libGVJbnZvaWNlc1JlcXVlc3RJZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVsaWdpYmxlSW52b2ljZXMgPSByZXN1bHQuaXRlbXMubWFwKGl0ZW0gPT4gKHsgLi4uaXRlbSwgc3RhdHVzTGFiZWw6IHRoaXMuaW52b2ljZVN0YXR1c0xhYmVsKGl0ZW0pIH0pKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkVHJhbnNmZXJzKCkge1xuICAgIHRoaXMudHJhbnNmZXJzU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMudHJhbnNmZXJzID0gW107XG4gICAgY29uc3QgcmVxdWVzdElkID0gKyt0aGlzLnRyYW5zZmVyc1JlcXVlc3RJZDtcblxuICAgIHRoaXMuaXNUcmFuc2ZlcnNMb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLnRyYW5zZmVyc1N1YnNjcmlwdGlvbiA9IHRoaXMuc2VydmljZVxuICAgICAgLmdldExpc3QoeyBzb3VyY2VDb21wYW55SWQ6IHRoaXMuZmlsdGVyU291cmNlQ29tcGFueUlkLCBtYXhSZXN1bHRDb3VudDogNTAsIHNraXBDb3VudDogMCwgc29ydGluZzogJ2NyZWF0aW9uVGltZSBkZXNjJyB9KVxuICAgICAgLnBpcGUoZmluYWxpemUoKCkgPT4gKHRoaXMuaXNUcmFuc2ZlcnNMb2FkaW5nID0gZmFsc2UpKSlcbiAgICAgIC5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgICAgaWYgKHJlcXVlc3RJZCAhPT0gdGhpcy50cmFuc2ZlcnNSZXF1ZXN0SWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50cmFuc2ZlcnMgPSByZXN1bHQuaXRlbXM7XG4gICAgICB9KTtcbiAgfVxuXG4gIGludm9pY2VTdGF0dXNWYXJpYW50KHJvdzogRWxpZ2libGVTb3VyY2VJbnZvaWNlRHRvKTogSW52b2ljZVN0YXR1c1ZhcmlhbnQge1xuICAgIGlmIChyb3cudGFyZ2V0SGFzRHVwbGljYXRlTnVtQXRDYXJkKSB7XG4gICAgICByZXR1cm4gJ2R1cGxpY2F0ZSc7XG4gICAgfVxuICAgIHJldHVybiByb3cuaXNSZXNvbHZlZCA/ICdyZXNvbHZlZCcgOiAndW5yZXNvbHZlZCc7XG4gIH1cblxuICBpbnZvaWNlU3RhdHVzTGFiZWwocm93OiBFbGlnaWJsZVNvdXJjZUludm9pY2VEdG8pOiBzdHJpbmcge1xuICAgIHN3aXRjaCAodGhpcy5pbnZvaWNlU3RhdHVzVmFyaWFudChyb3cpKSB7XG4gICAgICBjYXNlICdkdXBsaWNhdGUnOlxuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGl6YXRpb24uaW5zdGFudCgnRkJEb2N1bWVudEZsb3c6Okludm9pY2VTdGF0dXM6QWxyZWFkeUF0VGFyZ2V0Jyk7XG4gICAgICBjYXNlICdyZXNvbHZlZCc6XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsaXphdGlvbi5pbnN0YW50KCdGQkRvY3VtZW50Rmxvdzo6SW52b2ljZVN0YXR1czpUcmFuc2ZlcmFibGUnKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsaXphdGlvbi5pbnN0YW50KCdGQkRvY3VtZW50Rmxvdzo6SW52b2ljZVN0YXR1czpOb01hcHBpbmcnKTtcbiAgICB9XG4gIH1cblxuICB0cmFuc2ZlclN0YXR1c0xhYmVsKHN0YXR1czogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50cmFuc2ZlclN0YXR1c0xvb2t1cC5maW5kKHMgPT4gcy52YWx1ZSA9PT0gc3RhdHVzKT8udGV4dCA/PyBTdHJpbmcoc3RhdHVzKTtcbiAgfVxuXG4gIC8vIEF5bsSxIGtheW5hayBiZWxnZSBpw6dpbiBkYWhhIMO2bmNlIGJhxZ9sYXTEsWxtxLHFnyBhbWEgaGVuw7x6IMOnYWzEscWfdMSxcsSxbG1hbcSxxZ8gYmlyIHRhc2xhayB2YXJzYSwgXCLEsMWfbGVtbGVyXCJcbiAgLy8gaGVyIHNlZmVyaW5kZSBDcmVhdGVBc3luYyDDp2HEn8SxcsSxcCBtw7xrZXJyZXIgYmlyIHRhc2xhayBkYWhhIG9sdcWfdHVybWFzxLFuIGRpeWUgw7ZuY2Uga29udHJvbCBlZGlsaXIuXG4gIG9wZW5UcmFuc2ZlclBhZ2Uocm93OiBFbGlnaWJsZVNvdXJjZUludm9pY2VEdG8pIHtcbiAgICB0aGlzLnNlcnZpY2UuZmluZEV4aXN0aW5nRHJhZnQodGhpcy5maWx0ZXJTb3VyY2VDb21wYW55SWQsIHJvdy5kb2NFbnRyeSwgdGhpcy5zb3VyY2VEb2N1bWVudExpZmVjeWNsZSkuc3Vic2NyaWJlKGV4aXN0aW5nID0+IHtcbiAgICAgIGlmIChleGlzdGluZykge1xuICAgICAgICBjb25zdCBjcmVhdGlvbkRhdGUgPSBleGlzdGluZy5jcmVhdGlvblRpbWUgPyBuZXcgRGF0ZShleGlzdGluZy5jcmVhdGlvblRpbWUpLnRvTG9jYWxlU3RyaW5nKCd0ci1UUicpIDogJyc7XG4gICAgICAgIHRoaXMuY29uZmlybWF0aW9uXG4gICAgICAgICAgLndhcm4oJ0ZCRG9jdW1lbnRGbG93OjpFeGlzdGluZ0RyYWZ0VHJhbnNmZXJGb3VuZCcsICdGQkRvY3VtZW50Rmxvdzo6QXJlWW91U3VyZScsIHtcbiAgICAgICAgICAgIG1lc3NhZ2VMb2NhbGl6YXRpb25QYXJhbXM6IFtTdHJpbmcocm93LmRvY051bSksIGNyZWF0aW9uRGF0ZV0sXG4gICAgICAgICAgICB5ZXNUZXh0OiAnRkJEb2N1bWVudEZsb3c6Olllc09wZW5JdCcsXG4gICAgICAgICAgICBjYW5jZWxUZXh0OiAnRkJEb2N1bWVudEZsb3c6Ok5vQ3JlYXRlTmV3JyxcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5zdWJzY3JpYmUoc3RhdHVzID0+IHtcbiAgICAgICAgICAgIGlmIChzdGF0dXMgPT09IENvbmZpcm1hdGlvbi5TdGF0dXMuY29uZmlybSkge1xuICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9mYmRvY3VtZW50Zmxvdy9kb2N1bWVudC10cmFuc2ZlcnMnLCBleGlzdGluZy5pZF0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgPT09IENvbmZpcm1hdGlvbi5TdGF0dXMucmVqZWN0KSB7XG4gICAgICAgICAgICAgIC8vIEt1bGxhbsSxY8SxIFwiSGF5xLFyLCBZZW5pIFRhc2xhayBPbHXFn3R1clwiIGJ1dG9udW5hIGJhc3TEsTogw7ZuY2VraSB0YXNsYWsgaGnDpyDDp2FsxLHFn3TEsXLEsWxtYWTEscSfxLFuZGFuXG4gICAgICAgICAgICAgIC8vIChoZW7DvHogaGnDp2JpciBTQVAgYmVsZ2VzaSB5b2spIHNlc3NpemNlIHNpbGluaXlvciAtIGFrc2kgaGFsZGUgaGVyIFwiSGF5xLFyXCIgYmlyIHRhc2xhayBkYWhhXG4gICAgICAgICAgICAgIC8vIGJpcmlrdGlyaXIgdmUga3VsbGFuxLFjxLEgemF0ZW4geWFsbsSxemNhIGVuIHNvbiBvbHXFn3R1cmR1xJ91IHRhc2xha2xhIGlsZ2lsZW5peW9yLlxuICAgICAgICAgICAgICB0aGlzLnNlcnZpY2UuZGVsZXRlRHJhZnQoZXhpc3RpbmcuaWQpLnN1YnNjcmliZSgoKSA9PiB0aGlzLm5hdmlnYXRlVG9OZXdUcmFuc2Zlcihyb3cpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHN0YXR1cyA9PT0gZGlzbWlzczoga3VsbGFuxLFjxLEgZGl5YWxvxJ91IGthcGF0dMSxICjDtnIuIGTEscWfYXLEsSB0xLFrbGFkxLEpIC0gaGnDp2JpciDFn2V5IHlhcMSxbG1heixcbiAgICAgICAgICAgIC8vIG5lIG1ldmN1dCB0YXNsYWsgYcOnxLFsxLFyIG5lIGRlIHNpbGluaXI7IMO2bmNla2kgZGF2cmFuxLHFn3RhIGJ1IGR1cnVtIHlhbmzEscWfbMSxa2xhIHNpbG1lXG4gICAgICAgICAgICAvLyBkYWzEsW5hIGTDvMWfw7x5b3JkdS5cbiAgICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubmF2aWdhdGVUb05ld1RyYW5zZmVyKHJvdyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIG5hdmlnYXRlVG9OZXdUcmFuc2Zlcihyb3c6IEVsaWdpYmxlU291cmNlSW52b2ljZUR0bykge1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2ZiZG9jdW1lbnRmbG93L2RvY3VtZW50LXRyYW5zZmVycycsICduZXcnXSwge1xuICAgICAgc3RhdGU6IHtcbiAgICAgICAgc291cmNlQ29tcGFueUlkOiB0aGlzLmZpbHRlclNvdXJjZUNvbXBhbnlJZCxcbiAgICAgICAgc291cmNlQ29tcGFueU5hbWU6IHRoaXMuY29tcGFueU5hbWUodGhpcy5maWx0ZXJTb3VyY2VDb21wYW55SWQpLFxuICAgICAgICBkb2NFbnRyeTogcm93LmRvY0VudHJ5LFxuICAgICAgICBkb2NOdW06IHJvdy5kb2NOdW0sXG4gICAgICAgIG51bUF0Q2FyZDogcm93Lm51bUF0Q2FyZCxcbiAgICAgICAgcHJvamVjdENvZGU6IHJvdy5wcm9qZWN0Q29kZSxcbiAgICAgICAgdGFyZ2V0Q29tcGFueUlkOiByb3cudGFyZ2V0Q29tcGFueUlkLFxuICAgICAgICB0YXJnZXRDb21wYW55TmFtZTogcm93LnRhcmdldENvbXBhbnlOYW1lLFxuICAgICAgICBjdXJyZW5jeTogcm93LmN1cnJlbmN5LFxuICAgICAgICBzb3VyY2VEb2N1bWVudExpZmVjeWNsZTogdGhpcy5zb3VyY2VEb2N1bWVudExpZmVjeWNsZSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBvcGVuVHJhbnNmZXJEZXRhaWwocm93OiBEb2N1bWVudFRyYW5zZmVyRHRvKSB7XG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvZmJkb2N1bWVudGZsb3cvZG9jdW1lbnQtdHJhbnNmZXJzJywgcm93LmlkXSk7XG4gIH1cblxuICAvLyBUYW1hbWxhbm3EscWfL0RldmFtIEVkZW4ga2F5xLF0bGFyIHNpbGluZW1leiAoYmFja2VuZCB6YXRlbiBUcmFuc2Zlck5vdEVkaXRhYmxlIGlsZSByZWRkZWRlcik7IFwiU2lsXCJcbiAgLy8gc2XDp2VuZcSfaSB5YWxuxLF6Y2EgVGFzbGFrL0hhdGFsxLEvxLBwdGFsIEVkaWxkaSBrYXnEsXRsYXJkYSBnw7Zyw7xuw7xyLlxuICBjYW5EZWxldGVUcmFuc2Zlcihyb3c6IERvY3VtZW50VHJhbnNmZXJEdG8pOiBib29sZWFuIHtcbiAgICByZXR1cm4gcm93LnN0YXR1cyAhPT0gMSAmJiByb3cuc3RhdHVzICE9PSAyOyAvLyAxPURldmFtIEVkaXlvciwgMj1UYW1hbWxhbmTEsVxuICB9XG5cbiAgZGVsZXRlVHJhbnNmZXIocm93OiBEb2N1bWVudFRyYW5zZmVyRHRvKSB7XG4gICAgdGhpcy5jb25maXJtYXRpb25cbiAgICAgIC53YXJuKCdGQkRvY3VtZW50Rmxvdzo6RGVsZXRlQ29uZmlybWF0aW9uTWVzc2FnZScsICdGQkRvY3VtZW50Rmxvdzo6QXJlWW91U3VyZScpXG4gICAgICAuc3Vic2NyaWJlKHN0YXR1cyA9PiB7XG4gICAgICAgIGlmIChzdGF0dXMgPT09IENvbmZpcm1hdGlvbi5TdGF0dXMuY29uZmlybSkge1xuICAgICAgICAgIHRoaXMuc2VydmljZS5kZWxldGUocm93LmlkKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5sb2FkVHJhbnNmZXJzKCkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIC8vIEJ1IG1lbsO8IGnDp2luIMO8w6cgZmFya2zEsSB5YWtsYcWfxLFtIGRlbmVuZGkgdmUgaGVwc2kgRGV2RXh0cmVtZSBncmlkIGjDvGNyZXNpIGnDp2luZGUgYmHFn2FyxLFzxLF6IG9sZHU6XG4gIC8vICgxKSBCb290c3RyYXAnxLFuIGRhdGEtYnMtdG9nZ2xlPVwiZHJvcGRvd25cIifEsSAtIEJvb3RzdHJhcCBKUyBidW5kbGUnxLEgecO8a2zDvCBkZcSfaWwsIGhpw6cgdGVwa2kgdmVybWVkaS5cbiAgLy8gKDIpIFNhZiBBbmd1bGFyICpuZ0lmIGRyb3Bkb3duJ8SxIC0gRE9NJ2RhIGRvxJ9ydSBhw6fEsWzEsXAga2FwYW7EsXlvcmR1IGFtYSBow7xjcmVuaW4vcm93c3ZpZXcnxLFuXG4gIC8vICAgICBvdmVyZmxvdzpoaWRkZW4nxLEgecO8esO8bmRlbiBnw7Zyw7xubcO8eW9yZHUgKHotaW5kZXggYnVudSBhxZ9hbWF6LCBnZXLDp2VrIG9ydGFtZGEgZG/En3J1bGFuZMSxKS5cbiAgLy8gKDMpIGR4LWRyb3AtZG93bi1idXR0b24gLSBnw7Zyc2VsIG9sYXJhayBncmlkJ2luIGTEscWfxLFuYSB0YcWfxLFwIGRvxJ9ydSBnw7Zyw7xuw7x5b3JkdSwgYW1hIG9uSXRlbUNsaWNrXG4gIC8vICAgICBvbGF5xLEgYnUgb3J0YW1kYSBnw7x2ZW5pbGlyIHRldGlrbGVubWVkaSAoZ2Vyw6dlayBvcnRhbWRhIGRvxJ9ydWxhbmTEsTogaGnDp2JpciB0xLFrbGFtYSBoYW5kbGVyJ8SxXG4gIC8vICAgICDDp2HEn8Sxcm1hZMSxKS5cbiAgLy8gw4fDtnrDvG06IG1lbsO8ecO8IGdyaWQnaW4gVEFNQU1FTiBEScWeSU5BLCBjb21wb25lbnQgxZ9hYmxvbnVudW4gZW4gw7xzdCBzZXZpeWVzaW5lIHRhxZ/EsW1hayAtIGLDtnlsZWNlIG5lXG4gIC8vIG92ZXJmbG93OmhpZGRlbiBrxLFycG1hc8SxIG5lIGRlICpkeFRlbXBsYXRlIGnDp2kgb2xheSBiYcSfbGFtYSBzb3J1bmxhcsSxIHlhxZ9hbsSxci4gWmF0ZW4gw6dhbMSxxZ90xLHEn8SxXG4gIC8vIGthbsSxdGxhbm3EscWfIHRla2xpIFwixLDFn2xlbWxlclwiIGJ1dG9udXlsYSAoYWN0aW9uc1RlbXBsYXRlKSBiaXJlYmlyIGF5bsSxLCBiYXNpdCAoY2xpY2spIG1la2FuaXptYXPEsS5cbiAgb3BlbkFjdGlvbnNSb3c6IERvY3VtZW50VHJhbnNmZXJEdG8gfCBudWxsID0gbnVsbDtcbiAgYWN0aW9uc01lbnVQb3NpdGlvbiA9IHsgdG9wOiAwLCBsZWZ0OiAwIH07XG5cbiAgdG9nZ2xlQWN0aW9ucyhyb3c6IERvY3VtZW50VHJhbnNmZXJEdG8sIGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKHRoaXMub3BlbkFjdGlvbnNSb3cgPT09IHJvdykge1xuICAgICAgdGhpcy5vcGVuQWN0aW9uc1JvdyA9IG51bGw7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcmVjdCA9IChldmVudC5jdXJyZW50VGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICB0aGlzLmFjdGlvbnNNZW51UG9zaXRpb24gPSB7IHRvcDogcmVjdC5ib3R0b20gKyB3aW5kb3cuc2Nyb2xsWSwgbGVmdDogcmVjdC5sZWZ0ICsgd2luZG93LnNjcm9sbFggfTtcbiAgICB0aGlzLm9wZW5BY3Rpb25zUm93ID0gcm93O1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Y2xpY2snKVxuICBjbG9zZUFjdGlvbnNNZW51KCkge1xuICAgIHRoaXMub3BlbkFjdGlvbnNSb3cgPSBudWxsO1xuICB9XG5cbiAgc2VsZWN0QWN0aW9uKGFjdGlvbjogJ3ZpZXcnIHwgJ2RlbGV0ZScsIHJvdzogRG9jdW1lbnRUcmFuc2ZlckR0bykge1xuICAgIHRoaXMub3BlbkFjdGlvbnNSb3cgPSBudWxsO1xuICAgIGlmIChhY3Rpb24gPT09ICd2aWV3Jykge1xuICAgICAgdGhpcy5vcGVuVHJhbnNmZXJEZXRhaWwocm93KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kZWxldGVUcmFuc2Zlcihyb3cpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFNwZWMgwqc1IC0gbXVoYXRhcCBlxZ9sZcWfdGlybWVzaSBidWx1bmFtYXlhbiBkdXJ1bWRhIGt1bGxhbsSxY8SxZGFuIGhlZGVmIFNBUCDFn2lya2V0aW5kZWtpIGRvxJ9ydVxuICAvLyBNw7zFn3RlcmkvU2F0xLFjxLEgQ2FyZENvZGUgc2XDp2ltaSBpc3RlbmVjZWt0aXI7IGJ1IHNlw6dpbWluIE11aGF0YXAgRcWfbGXFn3Rpcm1lbGVyaSBla3JhbsSxbmFcbiAgLy8gecO2bmxlbmRpcmlsZXJlayB5YXB0xLFyxLFsbWFzxLEgc3BlYyB0YXJhZsSxbmRhbiBhw6fEsWvDp2EgaXppbiB2ZXJpbGVuIGJpciBhcmF5w7x6IHNlw6dlbmXEn2lkaXIuXG4gIC8vIE3DvMWfdGVyaSBDYXJkQ29kZSBidXJhZGEgdGFobWluIGRlxJ9pbGRpcjogUmVzb2x2ZUZpcnN0VGFyZ2V0QXN5bmMgdGFtIG9sYXJha1xuICAvLyBcIlNvdXJjZUNvbXBhbnlJZCArIEN1c3RvbWVyQ2FyZENvZGUgPT0gT0lOVi5DYXJkQ29kZVwiIGXFn2xlxZ9tZXNpbmkgYXJhZMSxxJ/EsW5kYW4sIGVrc2lrIG9sYW5cbiAgLy8gZcWfbGXFn3Rpcm1lbmluIEN1c3RvbWVyQ2FyZENvZGUgZGXEn2VyaSB6YXRlbiBidSBmYXR1cmFuxLFuIGtlbmRpIENhcmRDb2RlJ3VkdXIuXG4gIGdvVG9QYXJ0bmVyTWFwcGluZyhjdXN0b21lckNhcmRDb2RlPzogc3RyaW5nLCBjdXN0b21lckNhcmROYW1lPzogc3RyaW5nKSB7XG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvZmJkb2N1bWVudGZsb3cvcGFydG5lci1tYXBwaW5ncyddLCB7XG4gICAgICBzdGF0ZTogeyBzb3VyY2VDb21wYW55SWQ6IHRoaXMuZmlsdGVyU291cmNlQ29tcGFueUlkLCBjdXN0b21lckNhcmRDb2RlLCBjdXN0b21lckNhcmROYW1lIH0sXG4gICAgfSk7XG4gIH1cblxuICB0b2dnbGVIaXN0b3J5KCkge1xuICAgIHRoaXMuaXNIaXN0b3J5RXhwYW5kZWQgPSAhdGhpcy5pc0hpc3RvcnlFeHBhbmRlZDtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNhcmQgbWItM1wiPlxuICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgcHktM1wiPlxuICAgIDxoNSBjbGFzcz1cImNhcmQtdGl0bGUgbWItMFwiPnt7ICdGQkRvY3VtZW50Rmxvdzo6TWVudTpEb2N1bWVudFRyYW5zZmVycycgfCBhYnBMb2NhbGl6YXRpb24gfX08L2g1PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBwdC0zXCI+XG4gICAgPGRpdiBjbGFzcz1cInJvdyBnLTMgYWxpZ24taXRlbXMtZW5kIG1iLTNcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCI+e3sgJ0ZCRG9jdW1lbnRGbG93OjpTb3VyY2VDb21wYW55JyB8IGFicExvY2FsaXphdGlvbiB9fTwvbGFiZWw+XG4gICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdFwiIFsobmdNb2RlbCldPVwiZmlsdGVyU291cmNlQ29tcGFueUlkXCIgKG5nTW9kZWxDaGFuZ2UpPVwic2VhcmNoKClcIj5cbiAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBjIG9mIGNvbXBhbmllc1wiIFtuZ1ZhbHVlXT1cImMuaWRcIj57eyBjLmNvbXBhbnlOYW1lIH19PC9vcHRpb24+XG4gICAgICAgIDwvc2VsZWN0PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTNcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiPnt7ICdGQkRvY3VtZW50Rmxvdzo6U291cmNlRG9jdW1lbnRMaWZlY3ljbGUnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9sYWJlbD5cbiAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0XCIgWyhuZ01vZGVsKV09XCJzb3VyY2VEb2N1bWVudExpZmVjeWNsZVwiIChuZ01vZGVsQ2hhbmdlKT1cInNlYXJjaCgpXCI+XG4gICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgbyBvZiBzb3VyY2VEb2N1bWVudExpZmVjeWNsZU9wdGlvbnNcIiBbbmdWYWx1ZV09XCJvLnZhbHVlXCI+e3sgby5sYWJlbCB9fTwvb3B0aW9uPlxuICAgICAgICA8L3NlbGVjdD5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1hdXRvXCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5XCJcbiAgICAgICAgICAoY2xpY2spPVwic2VhcmNoKClcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0xpc3RMb2FkaW5nIHx8IGlzVHJhbnNmZXJzTG9hZGluZ1wiXG4gICAgICAgICAgW3RpdGxlXT1cIidGQkRvY3VtZW50Rmxvdzo6UmVmcmVzaExpc3RUb29sdGlwJyB8IGFicExvY2FsaXphdGlvblwiXG4gICAgICAgID5cbiAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXJlZnJlc2ggbWUtMVwiPjwvaT57eyAnQWJwVWk6OlJlZnJlc2gnIHwgYWJwTG9jYWxpemF0aW9uIH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8aDYgY2xhc3M9XCJtYi0yXCI+e3sgJ0ZCRG9jdW1lbnRGbG93OjpFbGlnaWJsZUludm9pY2VzVGl0bGUnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9oNj5cbiAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LW11dGVkIGQtYmxvY2sgbWItMlwiPnt7ICdGQkRvY3VtZW50Rmxvdzo6R3JpZEZpbHRlckhpbnQnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9zbWFsbD5cblxuICAgIDxkaXYgKm5nSWY9XCJpc0xpc3RMb2FkaW5nXCIgY2xhc3M9XCJ0ZXh0LWNlbnRlciBweS01XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwic3Bpbm5lci1ib3JkZXIgdGV4dC1wcmltYXJ5XCIgcm9sZT1cInN0YXR1c1wiPjwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cIm10LTIgdGV4dC1tdXRlZFwiPnt7ICdGQkRvY3VtZW50Rmxvdzo6TG9hZGluZ0ludm9pY2VzJyB8IGFicExvY2FsaXphdGlvbiB9fTwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGR4LWRhdGEtZ3JpZFxuICAgICAgKm5nSWY9XCIhaXNMaXN0TG9hZGluZ1wiXG4gICAgICBbZGF0YVNvdXJjZV09XCJlbGlnaWJsZUludm9pY2VzXCJcbiAgICAgIFtzaG93Qm9yZGVyc109XCJ0cnVlXCJcbiAgICAgIFtzaG93Um93TGluZXNdPVwidHJ1ZVwiXG4gICAgICBbY29sdW1uQXV0b1dpZHRoXT1cInRydWVcIlxuICAgICAgW2hlaWdodF09XCInNDV2aCdcIlxuICAgICAgW2tleWJvYXJkTmF2aWdhdGlvbl09XCJ7IGVuYWJsZWQ6IGZhbHNlIH1cIlxuICAgID5cbiAgICAgIDxkeG8tcGFnaW5nIFtwYWdlU2l6ZV09XCI1MFwiPjwvZHhvLXBhZ2luZz5cbiAgICAgIDxkeG8tcGFnZXIgW3Zpc2libGVdPVwidHJ1ZVwiIFtzaG93SW5mb109XCJ0cnVlXCIgW3Nob3dOYXZpZ2F0aW9uQnV0dG9uc109XCJ0cnVlXCI+PC9keG8tcGFnZXI+XG4gICAgICA8ZHhvLWZpbHRlci1yb3cgW3Zpc2libGVdPVwidHJ1ZVwiPjwvZHhvLWZpbHRlci1yb3c+XG4gICAgICA8ZHhvLWhlYWRlci1maWx0ZXIgW3Zpc2libGVdPVwidHJ1ZVwiPjwvZHhvLWhlYWRlci1maWx0ZXI+XG5cbiAgICAgIDxkeGktY29sdW1uIFtjYXB0aW9uXT1cIidGQkRvY3VtZW50Rmxvdzo6QWN0aW9ucycgfCBhYnBMb2NhbGl6YXRpb25cIiBjZWxsVGVtcGxhdGU9XCJhY3Rpb25zVGVtcGxhdGVcIiBbd2lkdGhdPVwiMTAwXCIgW2FsbG93RmlsdGVyaW5nXT1cImZhbHNlXCIgW2FsbG93U29ydGluZ109XCJmYWxzZVwiPjwvZHhpLWNvbHVtbj5cbiAgICAgIDxkeGktY29sdW1uIGRhdGFGaWVsZD1cImRvY051bVwiIFtjYXB0aW9uXT1cIidGQkRvY3VtZW50Rmxvdzo6RG9jTnVtJyB8IGFicExvY2FsaXphdGlvblwiIGRhdGFUeXBlPVwibnVtYmVyXCIgc29ydE9yZGVyPVwiZGVzY1wiIFt3aWR0aF09XCIxMDBcIj48L2R4aS1jb2x1bW4+XG4gICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJudW1BdENhcmRcIiBbY2FwdGlvbl09XCInRkJEb2N1bWVudEZsb3c6Ok51bUF0Q2FyZCcgfCBhYnBMb2NhbGl6YXRpb25cIiBbd2lkdGhdPVwiMTQwXCI+PC9keGktY29sdW1uPlxuICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwicHJvamVjdENvZGVcIiBbY2FwdGlvbl09XCInRkJEb2N1bWVudEZsb3c6OlByb2plY3QnIHwgYWJwTG9jYWxpemF0aW9uXCIgW3dpZHRoXT1cIjkwXCI+PC9keGktY29sdW1uPlxuICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwiY2FyZENvZGVcIiBbY2FwdGlvbl09XCInRkJEb2N1bWVudEZsb3c6Ok9pbnZDYXJkQ29kZScgfCBhYnBMb2NhbGl6YXRpb25cIiBbd2lkdGhdPVwiMTQwXCI+PC9keGktY29sdW1uPlxuICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwidGFyZ2V0Q29tcGFueU5hbWVcIiBbY2FwdGlvbl09XCInRkJEb2N1bWVudEZsb3c6OlRhcmdldENvbXBhbnknIHwgYWJwTG9jYWxpemF0aW9uXCI+PC9keGktY29sdW1uPlxuICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwiY3VycmVuY3lcIiBbY2FwdGlvbl09XCInRkJEb2N1bWVudEZsb3c6OkN1cnJlbmN5JyB8IGFicExvY2FsaXphdGlvblwiIFt3aWR0aF09XCI4MFwiPjwvZHhpLWNvbHVtbj5cbiAgICAgIDxkeGktY29sdW1uIGRhdGFGaWVsZD1cInN0YXR1c0xhYmVsXCIgW2NhcHRpb25dPVwiJ0ZCRG9jdW1lbnRGbG93OjpTdGF0dXMnIHwgYWJwTG9jYWxpemF0aW9uXCIgY2VsbFRlbXBsYXRlPVwic3RhdHVzVGVtcGxhdGVcIiBbd2lkdGhdPVwiMTMwXCI+PC9keGktY29sdW1uPlxuXG4gICAgICA8ZGl2ICpkeFRlbXBsYXRlPVwibGV0IGNlbGwgb2YgJ2FjdGlvbnNUZW1wbGF0ZSdcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1wcmltYXJ5XCJcbiAgICAgICAgICAoY2xpY2spPVwib3BlblRyYW5zZmVyUGFnZShjZWxsLmRhdGEpOyAkZXZlbnQudGFyZ2V0LmJsdXIoKVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cIiFjZWxsLmRhdGEuaXNSZXNvbHZlZCB8fCBjZWxsLmRhdGEudGFyZ2V0SGFzRHVwbGljYXRlTnVtQXRDYXJkXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7ICdGQkRvY3VtZW50Rmxvdzo6QWN0aW9ucycgfCBhYnBMb2NhbGl6YXRpb24gfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiAqZHhUZW1wbGF0ZT1cImxldCBjZWxsIG9mICdzdGF0dXNUZW1wbGF0ZSdcIiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1zdGFydCBweS0yXCI+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3M9XCJiYWRnZVwiXG4gICAgICAgICAgW2NsYXNzLmJnLXN1Y2Nlc3NdPVwiaW52b2ljZVN0YXR1c1ZhcmlhbnQoY2VsbC5kYXRhKSA9PT0gJ3Jlc29sdmVkJ1wiXG4gICAgICAgICAgW2NsYXNzLmJnLXNlY29uZGFyeV09XCJpbnZvaWNlU3RhdHVzVmFyaWFudChjZWxsLmRhdGEpID09PSAnZHVwbGljYXRlJ1wiXG4gICAgICAgICAgW2NsYXNzLmJnLXdhcm5pbmddPVwiaW52b2ljZVN0YXR1c1ZhcmlhbnQoY2VsbC5kYXRhKSA9PT0gJ3VucmVzb2x2ZWQnXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IGludm9pY2VTdGF0dXNMYWJlbChjZWxsLmRhdGEpIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICpuZ0lmPVwiIWNlbGwuZGF0YS5pc1Jlc29sdmVkXCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBjbGFzcz1cImJ0biBidG4tb3V0bGluZS13YXJuaW5nIGJ0bi1zbSBtdC0yIHB5LTAgcHgtMlwiXG4gICAgICAgICAgc3R5bGU9XCJmb250LXNpemU6IDAuNzJyZW1cIlxuICAgICAgICAgIChjbGljayk9XCJnb1RvUGFydG5lck1hcHBpbmcoY2VsbC5kYXRhLmNhcmRDb2RlLCBjZWxsLmRhdGEuY2FyZE5hbWUpXCJcbiAgICAgICAgICBbdGl0bGVdPVwiJ0ZCRG9jdW1lbnRGbG93OjpHb1RvUGFydG5lck1hcHBpbmdUb29sdGlwJyB8IGFicExvY2FsaXphdGlvblwiXG4gICAgICAgID5cbiAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWxpbmsgbWUtMVwiPjwvaT57eyAnRkJEb2N1bWVudEZsb3c6Ok1hdGNoJyB8IGFicExvY2FsaXphdGlvbiB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZHgtZGF0YS1ncmlkPlxuXG4gICAgPHNtYWxsIGNsYXNzPVwidGV4dC1tdXRlZCBkLWJsb2NrIG10LTJcIj5cbiAgICAgIHt7ICdGQkRvY3VtZW50Rmxvdzo6QWxyZWFkeUV4aXN0c0hpbnQnIHwgYWJwTG9jYWxpemF0aW9uIH19XG4gICAgPC9zbWFsbD5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cImNhcmRcIj5cbiAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIHB5LTNcIiByb2xlPVwiYnV0dG9uXCIgKGNsaWNrKT1cInRvZ2dsZUhpc3RvcnkoKVwiPlxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICA8aDUgY2xhc3M9XCJjYXJkLXRpdGxlIG1iLTBcIj57eyAnRkJEb2N1bWVudEZsb3c6OlRyYW5zYWN0aW9uSGlzdG9yeScgfCBhYnBMb2NhbGl6YXRpb24gfX08L2g1PlxuICAgICAgPGkgY2xhc3M9XCJmYVwiIFtjbGFzcy5mYS1jaGV2cm9uLXVwXT1cImlzSGlzdG9yeUV4cGFuZGVkXCIgW2NsYXNzLmZhLWNoZXZyb24tZG93bl09XCIhaXNIaXN0b3J5RXhwYW5kZWRcIj48L2k+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IHB0LTNcIiBbaGlkZGVuXT1cIiFpc0hpc3RvcnlFeHBhbmRlZFwiPlxuICAgIDxzbWFsbCBjbGFzcz1cInRleHQtbXV0ZWQgZC1ibG9jayBtYi0yXCI+e3sgJ0ZCRG9jdW1lbnRGbG93OjpUcmFuc2Zlckhpc3RvcnlIaW50JyB8IGFicExvY2FsaXphdGlvbiB9fTwvc21hbGw+XG5cbiAgICA8ZGl2ICpuZ0lmPVwiaXNUcmFuc2ZlcnNMb2FkaW5nXCIgY2xhc3M9XCJ0ZXh0LWNlbnRlciBweS01XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwic3Bpbm5lci1ib3JkZXIgdGV4dC1wcmltYXJ5XCIgcm9sZT1cInN0YXR1c1wiPjwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cIm10LTIgdGV4dC1tdXRlZFwiPnt7ICdGQkRvY3VtZW50Rmxvdzo6TG9hZGluZycgfCBhYnBMb2NhbGl6YXRpb24gfX08L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkeC1kYXRhLWdyaWRcbiAgICAgICpuZ0lmPVwiIWlzVHJhbnNmZXJzTG9hZGluZ1wiXG4gICAgICBbZGF0YVNvdXJjZV09XCJ0cmFuc2ZlcnNcIlxuICAgICAgW3Nob3dCb3JkZXJzXT1cInRydWVcIlxuICAgICAgW3Nob3dSb3dMaW5lc109XCJ0cnVlXCJcbiAgICAgIFtjb2x1bW5BdXRvV2lkdGhdPVwidHJ1ZVwiXG4gICAgICBbaGVpZ2h0XT1cIic0MHZoJ1wiXG4gICAgICBba2V5Ym9hcmROYXZpZ2F0aW9uXT1cInsgZW5hYmxlZDogZmFsc2UgfVwiXG4gICAgPlxuICAgICAgPGR4by1wYWdpbmcgW3BhZ2VTaXplXT1cIjUwXCI+PC9keG8tcGFnaW5nPlxuICAgICAgPGR4by1wYWdlciBbdmlzaWJsZV09XCJ0cnVlXCIgW3Nob3dJbmZvXT1cInRydWVcIiBbc2hvd05hdmlnYXRpb25CdXR0b25zXT1cInRydWVcIj48L2R4by1wYWdlcj5cbiAgICAgIDxkeG8tZmlsdGVyLXJvdyBbdmlzaWJsZV09XCJ0cnVlXCI+PC9keG8tZmlsdGVyLXJvdz5cbiAgICAgIDxkeG8taGVhZGVyLWZpbHRlciBbdmlzaWJsZV09XCJ0cnVlXCI+PC9keG8taGVhZGVyLWZpbHRlcj5cblxuICAgICAgPGR4aS1jb2x1bW4gW2NhcHRpb25dPVwiJ0ZCRG9jdW1lbnRGbG93OjpBY3Rpb25zJyB8IGFicExvY2FsaXphdGlvblwiIGNlbGxUZW1wbGF0ZT1cInZpZXdUZW1wbGF0ZVwiIFt3aWR0aF09XCIxMjBcIiBbYWxsb3dGaWx0ZXJpbmddPVwiZmFsc2VcIiBbYWxsb3dTb3J0aW5nXT1cImZhbHNlXCIgYWxpZ25tZW50PVwiY2VudGVyXCI+PC9keGktY29sdW1uPlxuICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwic291cmNlT2ludkRvY051bVwiIFtjYXB0aW9uXT1cIidGQkRvY3VtZW50Rmxvdzo6U291cmNlRG9jdW1lbnQnIHwgYWJwTG9jYWxpemF0aW9uXCIgW3dpZHRoXT1cIjExMFwiPjwvZHhpLWNvbHVtbj5cbiAgICAgIDxkeGktY29sdW1uIGRhdGFGaWVsZD1cInByb2plY3RDb2RlXCIgW2NhcHRpb25dPVwiJ0ZCRG9jdW1lbnRGbG93OjpQcm9qZWN0JyB8IGFicExvY2FsaXphdGlvblwiIFt3aWR0aF09XCI5MFwiPjwvZHhpLWNvbHVtbj5cbiAgICAgIDxkeGktY29sdW1uIGRhdGFGaWVsZD1cImludGVyY29tcGFueUlkXCIgW2NhcHRpb25dPVwiJ0ZCRG9jdW1lbnRGbG93OjpJbnRlcmNvbXBhbnlJZCcgfCBhYnBMb2NhbGl6YXRpb25cIj48L2R4aS1jb2x1bW4+XG4gICAgICA8IS0tIEt1bGxhbsSxY8SxIGdlcmkgYmlsZGlyaW1peWxlIHRlc3BpdCBlZGlsZGk6IMSwxZ9sZW0gR2XDp21pxZ9pJ25kZSBiaXIga2F5ZMSxbiBub3JtYWwgKEthecSxdGzEsSkgbWlcbiAgICAgICAgICAgeW9rc2EgVGFzbGFrIG3EsSBvbGR1xJ91IGhpw6cgZ8O2csO8bm3DvHlvcmR1IC0gQWt0YXLEsW0gRHVydW11IChEdXJ1bSBzw7x0dW51KSBpbGUga2FyxLHFn3TEsXLEsWxtYXPEsW4gZGl5ZVxuICAgICAgICAgICBLYXluYWsvSGVkZWYgQmVsZ2UgRHVydW11IGF5csSxIHPDvHR1bmxhciBvbGFyYWsgZWtsZW5kaSAoYmt6LiBzcGVjIMKnMTQpLiAtLT5cbiAgICAgIDxkeGktY29sdW1uIGRhdGFGaWVsZD1cInNvdXJjZURvY3VtZW50TGlmZWN5Y2xlXCIgW2NhcHRpb25dPVwiJ0ZCRG9jdW1lbnRGbG93OjpTb3VyY2VEb2N1bWVudExpZmVjeWNsZScgfCBhYnBMb2NhbGl6YXRpb25cIiBbd2lkdGhdPVwiMTQwXCI+XG4gICAgICAgIDxkeG8tbG9va3VwIFtkYXRhU291cmNlXT1cInNvdXJjZURvY3VtZW50TGlmZWN5Y2xlT3B0aW9uc1wiIHZhbHVlRXhwcj1cInZhbHVlXCIgZGlzcGxheUV4cHI9XCJsYWJlbFwiPjwvZHhvLWxvb2t1cD5cbiAgICAgIDwvZHhpLWNvbHVtbj5cbiAgICAgIDxkeGktY29sdW1uIGRhdGFGaWVsZD1cInRhcmdldERvY3VtZW50TGlmZWN5Y2xlXCIgW2NhcHRpb25dPVwiJ0ZCRG9jdW1lbnRGbG93OjpUYXJnZXREb2N1bWVudExpZmVjeWNsZScgfCBhYnBMb2NhbGl6YXRpb25cIiBbd2lkdGhdPVwiMTQwXCI+XG4gICAgICAgIDxkeG8tbG9va3VwIFtkYXRhU291cmNlXT1cInNvdXJjZURvY3VtZW50TGlmZWN5Y2xlT3B0aW9uc1wiIHZhbHVlRXhwcj1cInZhbHVlXCIgZGlzcGxheUV4cHI9XCJsYWJlbFwiPjwvZHhvLWxvb2t1cD5cbiAgICAgIDwvZHhpLWNvbHVtbj5cbiAgICAgIDxkeGktY29sdW1uIGRhdGFGaWVsZD1cInN0YXR1c1wiIFtjYXB0aW9uXT1cIidGQkRvY3VtZW50Rmxvdzo6U3RhdHVzJyB8IGFicExvY2FsaXphdGlvblwiIGNlbGxUZW1wbGF0ZT1cInRyYW5zZmVyU3RhdHVzVGVtcGxhdGVcIiBbd2lkdGhdPVwiMTMwXCI+XG4gICAgICAgIDxkeG8tbG9va3VwIFtkYXRhU291cmNlXT1cInRyYW5zZmVyU3RhdHVzTG9va3VwXCIgdmFsdWVFeHByPVwidmFsdWVcIiBkaXNwbGF5RXhwcj1cInRleHRcIj48L2R4by1sb29rdXA+XG4gICAgICA8L2R4aS1jb2x1bW4+XG4gICAgICA8ZHhpLWNvbHVtblxuICAgICAgICBkYXRhRmllbGQ9XCJjcmVhdGlvblRpbWVcIlxuICAgICAgICBbY2FwdGlvbl09XCInRkJEb2N1bWVudEZsb3c6OkNyZWF0aW9uVGltZScgfCBhYnBMb2NhbGl6YXRpb25cIlxuICAgICAgICBkYXRhVHlwZT1cImRhdGV0aW1lXCJcbiAgICAgICAgZm9ybWF0PVwiZGQuTU0ueXl5eSBISDptbVwiXG4gICAgICAgIFt3aWR0aF09XCIxNTBcIlxuICAgICAgICBzb3J0T3JkZXI9XCJkZXNjXCJcbiAgICAgID48L2R4aS1jb2x1bW4+XG5cbiAgICAgIDxkaXYgKmR4VGVtcGxhdGU9XCJsZXQgY2VsbCBvZiAndmlld1RlbXBsYXRlJ1wiPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1zZWNvbmRhcnlcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cInRvZ2dsZUFjdGlvbnMoY2VsbC5kYXRhLCAkZXZlbnQpXCI+XG4gICAgICAgICAge3sgJ0ZCRG9jdW1lbnRGbG93OjpBY3Rpb25zJyB8IGFicExvY2FsaXphdGlvbiB9fSA8aSBjbGFzcz1cImZhIGZhLWNhcmV0LWRvd24gbXMtMVwiPjwvaT5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiAqZHhUZW1wbGF0ZT1cImxldCBjZWxsIG9mICd0cmFuc2ZlclN0YXR1c1RlbXBsYXRlJ1wiPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIGNsYXNzPVwiYmFkZ2VcIlxuICAgICAgICAgIFtjbGFzcy5iZy1zZWNvbmRhcnldPVwiY2VsbC52YWx1ZSA9PT0gMFwiXG4gICAgICAgICAgW2NsYXNzLmJnLXByaW1hcnldPVwiY2VsbC52YWx1ZSA9PT0gMVwiXG4gICAgICAgICAgW2NsYXNzLmJnLXN1Y2Nlc3NdPVwiY2VsbC52YWx1ZSA9PT0gMlwiXG4gICAgICAgICAgW2NsYXNzLmJnLWRhbmdlcl09XCJjZWxsLnZhbHVlID09PSAzXCJcbiAgICAgICAgICBbY2xhc3MuYmctd2FybmluZ109XCJjZWxsLnZhbHVlID09PSA0XCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IHRyYW5zZmVyU3RhdHVzTGFiZWwoY2VsbC52YWx1ZSkgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgPC9keC1kYXRhLWdyaWQ+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjwhLS0gR3JpZCdpbiBEScWeSU5EQTogZHgtZGF0YS1ncmlkIGjDvGNyZWxlcmluaW4gb3ZlcmZsb3c6aGlkZGVuIGvEsXJwbWFzxLEgdmUgKmR4VGVtcGxhdGUgacOnaSBvbGF5IGJhxJ9sYW1hXG4gICAgIHNvcnVubGFyxLEgeWHFn2FubWFzxLFuIGRpeWUgXCLEsMWfbGVtbGVyXCIgbWVuw7xzw7wgYnVyYXlhLCBjb21wb25lbnQgxZ9hYmxvbnVudW4gZW4gw7xzdCBzZXZpeWVzaW5lIHRhxZ/EsW5kxLEuIC0tPlxuPHVsXG4gICpuZ0lmPVwib3BlbkFjdGlvbnNSb3cgYXMgcm93XCJcbiAgY2xhc3M9XCJsaXN0LXVuc3R5bGVkIG0tMCBiZy13aGl0ZSBib3JkZXIgcm91bmRlZCBzaGFkb3ctc21cIlxuICBbc3R5bGUucG9zaXRpb25dPVwiJ2Fic29sdXRlJ1wiXG4gIFtzdHlsZS50b3AucHhdPVwiYWN0aW9uc01lbnVQb3NpdGlvbi50b3BcIlxuICBbc3R5bGUubGVmdC5weF09XCJhY3Rpb25zTWVudVBvc2l0aW9uLmxlZnRcIlxuICBzdHlsZT1cInotaW5kZXg6IDEwNTA7IG1pbi13aWR0aDogMTQwcHg7IHBhZGRpbmc6IDRweCAwXCJcbiAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4+XG4gIDxsaT5cbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImQtYmxvY2sgdy0xMDAgdGV4dC1zdGFydCBib3JkZXItMCBiZy13aGl0ZSBweC0zIHB5LTFcIiAoY2xpY2spPVwic2VsZWN0QWN0aW9uKCd2aWV3Jywgcm93KVwiPlxuICAgICAgPGkgY2xhc3M9XCJmYSBmYS1leWUgbWUtMlwiPjwvaT57eyAnRkJEb2N1bWVudEZsb3c6OlZpZXcnIHwgYWJwTG9jYWxpemF0aW9uIH19XG4gICAgPC9idXR0b24+XG4gIDwvbGk+XG4gIDxsaSAqbmdJZj1cImNhbkRlbGV0ZVRyYW5zZmVyKHJvdylcIj5cbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImQtYmxvY2sgdy0xMDAgdGV4dC1zdGFydCBib3JkZXItMCBiZy13aGl0ZSBweC0zIHB5LTEgdGV4dC1kYW5nZXJcIiAoY2xpY2spPVwic2VsZWN0QWN0aW9uKCdkZWxldGUnLCByb3cpXCI+XG4gICAgICA8aSBjbGFzcz1cImZhIGZhLXRyYXNoIG1lLTJcIj48L2k+e3sgJ0ZCRG9jdW1lbnRGbG93OjpEZWxldGUnIHwgYWJwTG9jYWxpemF0aW9uIH19XG4gICAgPC9idXR0b24+XG4gIDwvbGk+XG48L3VsPlxuIl19