@hitsoft/smart-warehouse 1.0.4 → 1.0.5

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.
@@ -18,6 +18,12 @@ export class OrdersComponent {
18
18
  this.toasterService = toasterService;
19
19
  this.confirmationService = confirmationService;
20
20
  this.selectedOrders = [];
21
+ this.autoRefreshHandle = null;
22
+ this.onVisibilityChange = () => {
23
+ if (!document.hidden) {
24
+ this.autoRefreshTick();
25
+ }
26
+ };
21
27
  // Toolbar filters
22
28
  this.selectedWarehouse = '';
23
29
  this.selectedDate = new Date().toISOString().substring(0, 10);
@@ -45,6 +51,41 @@ export class OrdersComponent {
45
51
  ngOnInit() {
46
52
  this.loadWarehouses();
47
53
  this.setupDataSource();
54
+ this.startAutoRefresh();
55
+ }
56
+ ngOnDestroy() {
57
+ this.stopAutoRefresh();
58
+ }
59
+ startAutoRefresh() {
60
+ this.autoRefreshHandle = window.setInterval(() => this.autoRefreshTick(), OrdersComponent.AUTO_REFRESH_MS);
61
+ document.addEventListener('visibilitychange', this.onVisibilityChange);
62
+ }
63
+ stopAutoRefresh() {
64
+ if (this.autoRefreshHandle !== null) {
65
+ window.clearInterval(this.autoRefreshHandle);
66
+ this.autoRefreshHandle = null;
67
+ }
68
+ document.removeEventListener('visibilitychange', this.onVisibilityChange);
69
+ }
70
+ /**
71
+ * Kullanıcıyı rahatsız etmeyecek durumdaysak grid'i tazeler. Şu hallerde tur atlanır:
72
+ * sekme arka planda, kullanıcı satır seçmiş (toplu işlem yapmak üzere olabilir),
73
+ * bir istek/işlem sürüyor ya da bir popup açık.
74
+ */
75
+ autoRefreshTick() {
76
+ if (document.hidden)
77
+ return;
78
+ if (this.selectedOrders.length > 0)
79
+ return;
80
+ if (this.bosKasaPopupVisible)
81
+ return;
82
+ if (this.isLoadingWarehouses ||
83
+ this.isGorevBaslatLoading ||
84
+ this.isReservationLoading ||
85
+ this.isBeeCellLoading) {
86
+ return;
87
+ }
88
+ this.dxOrdersInstance?.instance?.refresh(true);
48
89
  }
49
90
  loadWarehouses() {
50
91
  this.isLoadingWarehouses = true;
@@ -172,6 +213,37 @@ export class OrdersComponent {
172
213
  // Görevi Tamamla: İşleniyor (2) durumundaki siparişleri BeeCell görevi bitmişse doğrudan
173
214
  // Tamamlandı'ya (3) götürür — eski "Görev Tamamla" + "Onay Ver" iki adımı, eski sistemin
174
215
  // tek-aksiyon davranışına uygun şekilde tek butonda birleştirir.
216
+ /**
217
+ * "Görevi Tamamla" yalnızca "İşleniyor" (2) durumundaki siparişlerde anlamlı — backend
218
+ * (ApproveTaskAsync) bu şartı arıyor. Normal akışta artık gerekmiyor: görev bitince stok nakli
219
+ * de fatura da otomatik yazılıyor ve sipariş kendiliğinden "Tamamlandı" oluyor. Buton yalnızca
220
+ * fatura hatası, BeeCell'e gitmemiş/iptal olmuş görev ve Depo Talepleri akışı için kalıyor.
221
+ */
222
+ get canOnayVer() {
223
+ return this.selectedOrders.length > 0
224
+ && this.selectedOrders.every(o => o.U_SWDurum === '2');
225
+ }
226
+ get onayVerTooltip() {
227
+ if (this.selectedOrders.length === 0)
228
+ return 'Önce sipariş seçin.';
229
+ if (this.canOnayVer)
230
+ return 'Seçili siparişlerin faturasını kesip kapatır.';
231
+ return 'Yalnızca "İşleniyor" durumundaki siparişlerde kullanılabilir. '
232
+ + 'Görev bitince fatura zaten otomatik kesilir.';
233
+ }
234
+ /** "Sipariş Kapat" aktif görevi olan (2) siparişte çalışmaz — CloseOrderAsync reddediyor. */
235
+ get canSiparisKapat() {
236
+ return this.selectedOrders.length > 0
237
+ && this.selectedOrders.every(o => o.U_SWDurum !== '2');
238
+ }
239
+ get siparisKapatTooltip() {
240
+ if (this.selectedOrders.length === 0)
241
+ return 'Önce sipariş seçin.';
242
+ if (this.canSiparisKapat)
243
+ return 'Siparişi sevkiyata sokmadan kapatır (belge oluşturulmaz).';
244
+ return '"İşleniyor" durumundaki sipariş kapatılamaz — önce görevi tamamlayın '
245
+ + 'ya da BeeCell\'de iptal edin.';
246
+ }
175
247
  onOnayVer() {
176
248
  if (!this.selectedOrders || this.selectedOrders.length === 0) {
177
249
  this.toasterService.warn('Lütfen en az bir sipariş seçiniz.');
@@ -186,7 +258,7 @@ export class OrdersComponent {
186
258
  }
187
259
  const docEntries = this.selectedOrders.map(o => o.DocEntry);
188
260
  this.confirmationService
189
- .warn('Seçili siparişler tamamlanacak. Stok nakli ve fatura oluşturulacaktır. Emin misiniz?', 'Görevi Tamamla')
261
+ .warn('Seçili siparişler için fatura kesilecek ve sipariş kapatılacaktır. Emin misiniz?', 'Görevi Tamamla')
190
262
  .subscribe((status) => {
191
263
  if (status === 'confirm') {
192
264
  this.orderService.approveTask(docEntries, this.activeListType).subscribe({
@@ -432,14 +504,18 @@ export class OrdersComponent {
432
504
  // TODO: Implement
433
505
  }
434
506
  }
507
+ // Otomatik yenileme: yeni sipariş / durum değişikliği arka plan Hangfire işlerinden geldiğinde
508
+ // kullanıcı sayfayı elle yenilemeden görsün diye grid periyodik olarak SESSİZCE tazelenir
509
+ // (repaintChangesOnly sayesinde yalnızca değişen satırlar boyanır, seçim DocEntry ile korunur).
510
+ OrdersComponent.AUTO_REFRESH_MS = 45000;
435
511
  OrdersComponent.MAX_SHORT_ITEMS_DETAILED = 5;
436
512
  OrdersComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: OrdersComponent, deps: [{ token: i1.OrderService }, { token: i2.WarehouseService }, { token: i3.ToasterService }, { token: i3.ConfirmationService }], target: i0.ɵɵFactoryTarget.Component });
437
- OrdersComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: OrdersComponent, selector: "lib-orders", viewQueries: [{ propertyName: "dxOrdersInstance", first: true, predicate: ["dxOrdersInstance"], descendants: true }], ngImport: i0, template: "<abp-page [title]=\"'SmartWarehouse::Orders' | abpLocalization\">\r\n\r\n <!-- Toolbar -->\r\n <div class=\"orders-toolbar\">\r\n <!-- Row 1: Filters -->\r\n <div class=\"toolbar-row\">\r\n <div class=\"toolbar-group\">\r\n <label>Sipari\u015F Grubu</label>\r\n <div class=\"status-group\">\r\n <span class=\"status-chip list-purchase\" [class.active]=\"activeListType === '1'\"\r\n (click)=\"toggleListType('1')\">\r\n <i class=\"fa fa-shopping-cart\"></i> Sanayi Sipari\u015Fleri\r\n </span>\r\n <span class=\"status-chip list-distribution\" [class.active]=\"activeListType === '2'\"\r\n (click)=\"toggleListType('2')\">\r\n <i class=\"fa fa-truck\"></i> Da\u011F\u0131t\u0131m Sipari\u015Fleri\r\n </span>\r\n <span class=\"status-chip list-warehouse\" [class.active]=\"activeListType === '3'\"\r\n (click)=\"toggleListType('3')\">\r\n <i class=\"fa fa-warehouse\"></i> Depo Talepleri\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"toolbar-group toolbar-group--durum\">\r\n <label>Durum</label>\r\n <div class=\"status-group\">\r\n <span class=\"status-chip pending\" [class.active]=\"activeStatus === 'beklemede'\"\r\n (click)=\"toggleStatus('beklemede')\">\r\n <i class=\"fa fa-clock\"></i> Beklemede\r\n </span>\r\n <span class=\"status-chip processing\" [class.active]=\"activeStatus === 'isleniyor'\"\r\n (click)=\"toggleStatus('isleniyor')\">\r\n <i class=\"fa fa-spinner\"></i> \u0130\u015Fleniyor\r\n </span>\r\n <span class=\"status-chip awaiting\" [class.active]=\"activeStatus === 'onayBekliyor'\"\r\n (click)=\"toggleStatus('onayBekliyor')\">\r\n <i class=\"fa fa-hourglass-half\"></i> Onay Bekliyor\r\n </span>\r\n <span class=\"status-chip completed\" [class.active]=\"activeStatus === 'tamamlandi'\"\r\n (click)=\"toggleStatus('tamamlandi')\">\r\n <i class=\"fa fa-check-circle\"></i> Tamamland\u0131\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"toolbar-group toolbar-group--depo\">\r\n <label>Depo</label>\r\n <select [(ngModel)]=\"selectedWarehouse\" class=\"form-select\">\r\n <option value=\"\">T\u00FCm\u00FC</option>\r\n <option *ngFor=\"let wh of warehouses\" [value]=\"wh.WhsCode\">{{ wh.WhsName }}</option>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <hr class=\"toolbar-divider\" />\r\n\r\n <!-- Row 3: Action input + related buttons | Reservation | Refresh/Excel -->\r\n <div class=\"toolbar-row\">\r\n <div class=\"action-group\">\r\n <button class=\"btn btn-action-primary btn-sm\" (click)=\"onGorevBaslat()\" [disabled]=\"isGorevBaslatLoading\">\r\n <i class=\"fa fa-plus-circle\"></i> G\u00F6rev Ba\u015Flat\r\n </button>\r\n <button class=\"btn btn-action-approve btn-sm\" (click)=\"onOnayVer()\">\r\n <i class=\"fa fa-thumbs-up\"></i> G\u00F6revi Tamamla\r\n </button>\r\n <button class=\"btn btn-action-danger btn-sm\" (click)=\"onSiparisKapat()\">\r\n <i class=\"fa fa-times-circle\"></i> Sipari\u015F Kapat\r\n </button>\r\n <button class=\"btn btn-action-sync btn-sm\" (click)=\"onDurumGuncelle()\" [disabled]=\"isBeeCellLoading\">\r\n <i class=\"fa fa-sync-alt\"></i> Durum G\u00FCncelle\r\n </button>\r\n <button class=\"btn btn-action-info btn-sm\" (click)=\"onBosKasaGetir()\" [disabled]=\"isBeeCellLoading\">\r\n <i class=\"fa fa-box-open\"></i> Bo\u015F Kasa Getir\r\n </button>\r\n <button class=\"btn btn-action-warning btn-sm\" (click)=\"onYarimKasa()\" [disabled]=\"isBeeCellLoading\">\r\n <i class=\"fa fa-box\"></i> Yar\u0131m Kasa Getir\r\n </button>\r\n <span class=\"action-divider\"></span>\r\n <button class=\"btn btn-action-reservation btn-sm\" (click)=\"onRezervasyonYap()\" [disabled]=\"isReservationLoading\">\r\n <i class=\"fa fa-lock\"></i> Rezervasyon Yap\r\n </button>\r\n <button class=\"btn btn-action-reservation-cancel btn-sm\" (click)=\"onRezervasyonSil()\" [disabled]=\"isReservationLoading\">\r\n <i class=\"fa fa-unlock\"></i> Rezervasyon Sil\r\n </button>\r\n <button class=\"btn btn-action-reservation-bulk btn-sm\" (click)=\"onTopluRezervasyonYap()\" [disabled]=\"isReservationLoading\">\r\n <i class=\"fa fa-lock\"></i> Toplu Rez. Yap\r\n </button>\r\n <button class=\"btn btn-action-reservation-bulk-cancel btn-sm\" (click)=\"onTumRezervasyonlariSil()\" [disabled]=\"isReservationLoading\">\r\n <i class=\"fa fa-unlock\"></i> Toplu Rez. Sil\r\n </button>\r\n <span class=\"action-divider\"></span>\r\n <button class=\"btn btn-action-secondary btn-sm\" (click)=\"onRefresh()\">\r\n <i class=\"fa fa-redo\"></i> Yenile\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Data Grid -->\r\n <div class=\"card orders-grid-card\">\r\n <div class=\"card-body\">\r\n <dx-data-grid\r\n #dxOrdersInstance\r\n [dataSource]=\"ordersDataSource\"\r\n [showRowLines]=\"true\"\r\n [showBorders]=\"true\"\r\n [remoteOperations]=\"true\"\r\n [hoverStateEnabled]=\"true\"\r\n [repaintChangesOnly]=\"true\"\r\n [allowColumnResizing]=\"true\"\r\n columnResizingMode=\"widget\"\r\n [allowColumnReordering]=\"true\"\r\n [columnAutoWidth]=\"true\"\r\n [columnHidingEnabled]=\"true\"\r\n (onRowClick)=\"onRowClick($event)\"\r\n (onSelectionChanged)=\"onSelectionChanged($event)\"\r\n (onRowPrepared)=\"onRowPrepared($event)\"\r\n style=\"height: 60vh\"\r\n >\r\n <dxo-pager\r\n [visible]=\"true\"\r\n [showInfo]=\"true\"\r\n [allowedPageSizes]=\"[5, 10, 20]\"\r\n [showNavigationButtons]=\"true\"\r\n [showPageSizeSelector]=\"true\"\r\n >\r\n </dxo-pager>\r\n <dxo-paging [pageSize]=\"10\"></dxo-paging>\r\n <dxo-column-chooser\r\n [allowSearch]=\"true\"\r\n [enabled]=\"true\"\r\n mode=\"select\"\r\n ></dxo-column-chooser>\r\n <dxo-column-fixing [enabled]=\"true\"></dxo-column-fixing>\r\n <dxo-header-filter [allowSearch]=\"true\" [visible]=\"true\"></dxo-header-filter>\r\n <dxo-filter-row [visible]=\"true\"></dxo-filter-row>\r\n <dxo-export [enabled]=\"true\" [allowExportSelectedData]=\"false\"></dxo-export>\r\n <dxo-filter-builder [allowHierarchicalFields]=\"true\"></dxo-filter-builder>\r\n <dxo-filter-panel [visible]=\"true\"></dxo-filter-panel>\r\n <dxo-sorting mode=\"single\"></dxo-sorting>\r\n <dxo-scrolling mode=\"standard\" showScrollbar=\"always\"></dxo-scrolling>\r\n <dxo-selection\r\n mode=\"multiple\"\r\n showCheckBoxesMode=\"always\"\r\n [allowSelectAll]=\"true\"\r\n ></dxo-selection>\r\n\r\n <dxi-column\r\n dataField=\"DocNum\"\r\n caption=\"{{ 'SmartWarehouse::Order:DocNum' | abpLocalization }}\"\r\n [width]=\"110\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"CardCode\"\r\n caption=\"{{ 'SmartWarehouse::Order:CardCode' | abpLocalization }}\"\r\n [width]=\"140\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"CardName\"\r\n caption=\"{{ 'SmartWarehouse::Order:CardName' | abpLocalization }}\"\r\n [width]=\"220\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"DocDate\"\r\n caption=\"{{ 'SmartWarehouse::Order:DocDate' | abpLocalization }}\"\r\n dataType=\"date\"\r\n format=\"dd.MM.yyyy\"\r\n [width]=\"120\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"DocDueDate\"\r\n caption=\"{{ 'SmartWarehouse::Order:DocDueDate' | abpLocalization }}\"\r\n dataType=\"date\"\r\n format=\"dd.MM.yyyy\"\r\n [width]=\"120\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"U_SWTalepTarihi\"\r\n caption=\"{{ 'SmartWarehouse::Order:U_SWTalepTarihi' | abpLocalization }}\"\r\n dataType=\"date\"\r\n format=\"dd.MM.yyyy\"\r\n [width]=\"130\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"U_SWDurum\"\r\n caption=\"{{ 'SmartWarehouse::Order:U_SWDurum' | abpLocalization }}\"\r\n [width]=\"110\"\r\n cellTemplate=\"swDurumTemplate\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"U_SWIsError\"\r\n caption=\"{{ 'SmartWarehouse::Order:U_SWIsError' | abpLocalization }}\"\r\n [width]=\"50\"\r\n cellTemplate=\"errorTemplate\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"U_SWErrorMessage\"\r\n caption=\"{{ 'SmartWarehouse::Order:U_SWErrorMessage' | abpLocalization }}\"\r\n [width]=\"260\"\r\n cellTemplate=\"errorMessageTemplate\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"OwnerCode\"\r\n caption=\"{{ 'SmartWarehouse::Order:OwnerCode' | abpLocalization }}\"\r\n [width]=\"120\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"Comments\"\r\n caption=\"{{ 'SmartWarehouse::Order:Comments' | abpLocalization }}\"\r\n [width]=\"200\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"U_SWGonderildi\"\r\n caption=\"{{ 'SmartWarehouse::Order:U_SWGonderildi' | abpLocalization }}\"\r\n [width]=\"110\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"U_SWStationCode\"\r\n caption=\"{{ 'SmartWarehouse::Order:U_SWStationCode' | abpLocalization }}\"\r\n [width]=\"120\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"U_SWEyeCode\"\r\n caption=\"{{ 'SmartWarehouse::Order:U_SWEyeCode' | abpLocalization }}\"\r\n [width]=\"140\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"U_SWOrderType\"\r\n caption=\"{{ 'SmartWarehouse::Order:U_SWOrderType' | abpLocalization }}\"\r\n [width]=\"160\"\r\n cellTemplate=\"orderTypeTemplate\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"NumAtCard\"\r\n caption=\"{{ 'SmartWarehouse::Order:NumAtCard' | abpLocalization }}\"\r\n [width]=\"140\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"DocTotal\"\r\n caption=\"{{ 'SmartWarehouse::Order:DocTotal' | abpLocalization }}\"\r\n dataType=\"number\"\r\n format=\"#,##0.00\"\r\n [width]=\"130\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"DocCur\"\r\n caption=\"{{ 'SmartWarehouse::Order:DocCur' | abpLocalization }}\"\r\n [width]=\"90\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"DocStatus\"\r\n caption=\"{{ 'SmartWarehouse::Order:DocStatus' | abpLocalization }}\"\r\n [width]=\"90\"\r\n cellTemplate=\"statusTemplate\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"DocEntry\"\r\n caption=\"{{ 'SmartWarehouse::Order:DocEntry' | abpLocalization }}\"\r\n [width]=\"100\"\r\n ></dxi-column>\r\n\r\n <div *dxTemplate=\"let cell of 'statusTemplate'\">\r\n <span\r\n class=\"badge\"\r\n [ngClass]=\"{\r\n 'bg-success': cell.value === 'O',\r\n 'bg-secondary': cell.value === 'C'\r\n }\"\r\n >\r\n {{ cell.value === 'O' ? 'A\u00E7\u0131k' : 'Kapal\u0131' }}\r\n </span>\r\n </div>\r\n\r\n <div *dxTemplate=\"let cell of 'swDurumTemplate'\">\r\n <span\r\n class=\"badge\"\r\n [ngClass]=\"{\r\n 'bg-warning': cell.value === '0' || !cell.value,\r\n 'bg-info': cell.value === '1',\r\n 'bg-primary': cell.value === '2',\r\n 'bg-success': cell.value === '3'\r\n }\"\r\n >\r\n {{\r\n cell.value === '1' ? 'Onay Bekliyor' :\r\n cell.value === '2' ? '\u0130\u015Fleniyor' :\r\n cell.value === '3' ? 'Tamamland\u0131' : 'Beklemede'\r\n }}\r\n </span>\r\n </div>\r\n\r\n <div *dxTemplate=\"let cell of 'errorTemplate'\">\r\n <i\r\n *ngIf=\"cell.value === 'Y'\"\r\n class=\"fa fa-exclamation-triangle text-danger\"\r\n [title]=\"cell.data.U_SWErrorMessage\"\r\n ></i>\r\n </div>\r\n\r\n <div *dxTemplate=\"let cell of 'errorMessageTemplate'\">\r\n <span\r\n *ngIf=\"cell.data.U_SWIsError === 'Y'\"\r\n class=\"error-message-cell\"\r\n [title]=\"cell.value\"\r\n >{{ cell.value }}</span>\r\n </div>\r\n\r\n <div *dxTemplate=\"let cell of 'orderTypeTemplate'\">\r\n <span class=\"badge bg-secondary\">\r\n {{\r\n cell.value === '1' ? 'Sanayi Sipari\u015Fleri' :\r\n cell.value === '2' ? 'Da\u011F\u0131t\u0131m Sipari\u015Fleri' :\r\n cell.value === '3' ? 'Depo Talepleri' : '-'\r\n }}\r\n </span>\r\n </div>\r\n\r\n <!-- Master-Detail: Sipari\u015F Sat\u0131rlar\u0131 -->\r\n <dxo-master-detail [enabled]=\"true\" template=\"orderLinesTemplate\"></dxo-master-detail>\r\n\r\n <div *dxTemplate=\"let detail of 'orderLinesTemplate'\">\r\n <div class=\"p-3\">\r\n <h6 class=\"mb-3\">\r\n <i class=\"fa fa-list me-1\"></i>\r\n {{ 'SmartWarehouse::Order:DocNum' | abpLocalization }}:\r\n {{ detail.data.DocNum }} - Sipari\u015F Sat\u0131rlar\u0131\r\n </h6>\r\n <dx-data-grid\r\n [dataSource]=\"detail.data.DocumentLines\"\r\n [showRowLines]=\"true\"\r\n [showBorders]=\"true\"\r\n [columnAutoWidth]=\"true\"\r\n [hoverStateEnabled]=\"true\"\r\n [rowAlternationEnabled]=\"true\"\r\n >\r\n <dxi-column\r\n dataField=\"LineNum\"\r\n caption=\"{{ 'SmartWarehouse::Order:LineNum' | abpLocalization }}\"\r\n [width]=\"70\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"ItemCode\"\r\n caption=\"{{ 'SmartWarehouse::Order:ItemCode' | abpLocalization }}\"\r\n [width]=\"140\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"ItemDescription\"\r\n caption=\"Kalem Ad\u0131\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"Quantity\"\r\n caption=\"{{ 'SmartWarehouse::Order:Quantity' | abpLocalization }}\"\r\n dataType=\"number\"\r\n format=\"#,##0.##\"\r\n [width]=\"100\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"U_SWTeslimMiktar\"\r\n caption=\"{{ 'SmartWarehouse::Order:U_SWTeslimMiktar' | abpLocalization }}\"\r\n dataType=\"number\"\r\n format=\"#,##0.##\"\r\n [width]=\"120\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"LineTotal\"\r\n caption=\"{{ 'SmartWarehouse::Order:LineTotal' | abpLocalization }}\"\r\n dataType=\"number\"\r\n format=\"#,##0.00\"\r\n [width]=\"120\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"WarehouseCode\"\r\n caption=\"{{ 'SmartWarehouse::Order:WhsCode' | abpLocalization }}\"\r\n [width]=\"100\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"ShipDate\"\r\n caption=\"{{ 'SmartWarehouse::Order:ShipDate' | abpLocalization }}\"\r\n dataType=\"date\"\r\n format=\"dd.MM.yyyy\"\r\n [width]=\"110\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"U_SonGorevId\"\r\n caption=\"{{ 'SmartWarehouse::Order:U_SonGorevId' | abpLocalization }}\"\r\n [width]=\"120\"\r\n ></dxi-column>\r\n\r\n <dxo-summary>\r\n <dxi-total-item\r\n column=\"lineTotal\"\r\n summaryType=\"sum\"\r\n displayFormat=\"Toplam: {0}\"\r\n valueFormat=\"#,##0.00\"\r\n ></dxi-total-item>\r\n <dxi-total-item\r\n column=\"quantity\"\r\n summaryType=\"sum\"\r\n displayFormat=\"Toplam: {0}\"\r\n valueFormat=\"#,##0.##\"\r\n ></dxi-total-item>\r\n </dxo-summary>\r\n </dx-data-grid>\r\n </div>\r\n </div>\r\n </dx-data-grid>\r\n </div>\r\n </div>\r\n\r\n <!-- Bo\u015F / Yar\u0131m Kasa Popup -->\r\n <dx-popup\r\n [visible]=\"bosKasaPopupVisible\"\r\n (onHidden)=\"bosKasaPopupVisible = false\"\r\n [width]=\"380\"\r\n [height]=\"'auto'\"\r\n [showTitle]=\"true\"\r\n [title]=\"bosKasaMode === 'empty' ? 'Bo\u015F Kasa Getir' : 'Yar\u0131m Kasa Getir'\"\r\n [dragEnabled]=\"true\"\r\n [resizeEnabled]=\"false\"\r\n [showCloseButton]=\"true\"\r\n [closeOnOutsideClick]=\"false\"\r\n >\r\n <div *dxTemplate=\"let data of 'content'\" class=\"p-3\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\">\u0130stasyon No</label>\r\n <dx-number-box [(value)]=\"bosKasaStationId\" [min]=\"1\" [showSpinButtons]=\"true\"></dx-number-box>\r\n </div>\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\">Raf No (Shelf ID)</label>\r\n <dx-number-box [(value)]=\"bosKasaShelfId\" [min]=\"1\" [showSpinButtons]=\"true\"></dx-number-box>\r\n </div>\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\">Kasa Adedi</label>\r\n <dx-number-box [(value)]=\"bosKasaBoxCount\" [min]=\"1\" [max]=\"50\" [showSpinButtons]=\"true\"></dx-number-box>\r\n </div>\r\n <div class=\"d-flex justify-content-end gap-2 mt-3\">\r\n <dx-button text=\"\u0130ptal\" (onClick)=\"bosKasaPopupVisible = false\" type=\"normal\"></dx-button>\r\n <dx-button\r\n [text]=\"bosKasaMode === 'empty' ? 'Bo\u015F Kasa G\u00F6nder' : 'Yar\u0131m Kasa G\u00F6nder'\"\r\n type=\"default\"\r\n (onClick)=\"onBosKasaGonder()\"\r\n ></dx-button>\r\n </div>\r\n </div>\r\n </dx-popup>\r\n\r\n</abp-page>\r\n", styles: [":host{display:block;max-width:100%;overflow-x:hidden}.orders-toolbar{background:#fff;border:1px solid #e0e0e0;border-radius:8px;padding:16px 20px;margin-bottom:16px;box-shadow:0 1px 3px #0000000f;max-width:100%;overflow:hidden}.toolbar-divider{border:none;border-top:1px solid #eee;margin:10px 0}.toolbar-row{display:flex;flex-wrap:wrap;align-items:center;gap:16px}.toolbar-group{display:flex;flex-direction:column;gap:4px}.toolbar-group--durum{margin-left:80px}.toolbar-group--depo{margin-left:auto}.toolbar-group label{font-size:11px;font-weight:600;color:#6c757d;text-transform:uppercase;letter-spacing:.5px}.toolbar-group select,.toolbar-group input[type=date]{height:36px;border:1px solid #ced4da;border-radius:6px;padding:0 10px;font-size:13px;background:#fff;transition:border-color .15s}.toolbar-group select:focus,.toolbar-group input[type=date]:focus{border-color:#556ee6;outline:none;box-shadow:0 0 0 2px #556ee626}.toolbar-group select{min-width:180px}.radio-group{display:flex;gap:12px;height:36px;align-items:center}.radio-group .form-check{margin:0;padding-left:22px}.radio-group .form-check-label{font-size:13px;cursor:pointer;white-space:nowrap}.status-group{display:flex;gap:10px;align-items:center}.status-chip{display:inline-flex;align-items:center;gap:6px;padding:4px 12px;border-radius:20px;font-size:12px;font-weight:500;cursor:pointer;border:1px solid transparent;transition:all .15s;-webkit-user-select:none;user-select:none}.status-chip.pending{background:#fff9e6;color:#c9a227;border-color:#ffe082}.status-chip.pending.active{background:#ffc107;color:#fff;border-color:#ffc107}.status-chip.processing{background:#e8f0fe;color:#7aadf5;border-color:#a8c8f7}.status-chip.processing.active{background:#0d6efd;color:#fff;border-color:#0d6efd}.status-chip.awaiting{background:#e6f9fc;color:#6ec6d8;border-color:#a0e1ed}.status-chip.awaiting.active{background:#0dcaf0;color:#fff;border-color:#0dcaf0}.status-chip.completed{background:#e8f5e9;color:#6db680;border-color:#a5d6a7}.status-chip.completed.active{background:#198754;color:#fff;border-color:#198754}.status-chip.list-purchase{background:#eef0fa;color:#9aa1d4;border-color:#b3b9e6}.status-chip.list-purchase.active{background:#5c6bc0;color:#fff;border-color:#5c6bc0}.status-chip.list-distribution{background:#fce8ee;color:#e87a9e;border-color:#f0a3bb}.status-chip.list-distribution.active{background:#e91e63;color:#fff;border-color:#e91e63}.status-chip.list-warehouse{background:#e5f5f4;color:#6db5ab;border-color:#a0d4cd}.status-chip.list-warehouse.active{background:#009688;color:#fff;border-color:#009688}.action-group{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.action-input{width:140px;height:32px;border:1px solid #ced4da;border-radius:6px;padding:0 10px;font-size:13px}.action-input:focus{border-color:#556ee6;outline:none;box-shadow:0 0 0 2px #556ee626}.toolbar-separator{width:1px;height:28px;background:#dee2e6;align-self:center}.reservation-group{display:flex;align-items:center;gap:8px}.toolbar-actions{display:flex;gap:8px;margin-left:auto;align-items:center}.action-group .btn,.reservation-group .btn,.toolbar-actions .btn{display:inline-flex;align-items:center;gap:5px;font-size:12px;padding:5px 12px;border-radius:6px;font-weight:500;white-space:nowrap;transition:all .15s}.btn-action-primary{background:#556ee6;color:#fff;border:none}.btn-action-primary:hover{background:#4458cb;color:#fff}.btn-action-success{background:#34c38f;color:#fff;border:none}.btn-action-success:hover{background:#2ca67a;color:#fff}.btn-action-approve{background:#6f42c1;color:#fff;border:none}.btn-action-approve:hover{background:#5a32a3;color:#fff}.btn-action-warning{background:#f1b44c;color:#fff;border:none}.btn-action-warning:hover{background:#d9a043;color:#fff}.btn-action-info{background:#50a5f1;color:#fff;border:none}.btn-action-info:hover{background:#3d8ed8;color:#fff}.btn-action-danger{background:#f46a6a;color:#fff;border:none}.btn-action-danger:hover{background:#e05555;color:#fff}.btn-action-outline{background:transparent;color:#556ee6;border:1px solid #556ee6}.btn-action-outline:hover{background:#556ee6;color:#fff}.btn-action-secondary{background:#74788d;color:#fff;border:none}.btn-action-secondary:hover{background:#5f6373;color:#fff}.btn-action-reservation{background:#7c4dff;color:#fff;border:none}.btn-action-reservation:hover{background:#651fff;color:#fff}.btn-action-reservation:disabled{background:#b39ddb;cursor:not-allowed}.btn-action-reservation-cancel{background:#ff6e40;color:#fff;border:none}.btn-action-reservation-cancel:hover{background:#ff3d00;color:#fff}.btn-action-reservation-cancel:disabled{background:#ffab91;cursor:not-allowed}.btn-action-reservation-bulk{background:#536dfe;color:#fff;border:none}.btn-action-reservation-bulk:hover{background:#304ffe;color:#fff}.btn-action-reservation-bulk:disabled{background:#8c9eff;cursor:not-allowed}.btn-action-reservation-bulk-cancel{background:#ff5252;color:#fff;border:none}.btn-action-reservation-bulk-cancel:hover{background:#ff1744;color:#fff}.btn-action-reservation-bulk-cancel:disabled{background:#ff8a80;cursor:not-allowed}.action-divider{width:1px;height:24px;background:#dee2e6;display:inline-block;vertical-align:middle;margin:0 4px}.orders-grid-card{border-radius:8px;border:1px solid #e0e0e0;box-shadow:0 1px 3px #0000000f;overflow:hidden;max-width:100%}.orders-grid-card .card-body{padding:12px;overflow-x:auto}::ng-deep .order-row-error{background-color:#fdecea!important}::ng-deep .order-row-error:hover{background-color:#fbd9d5!important}::ng-deep .error-message-cell{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#b02a37;font-size:12px}@media (max-width: 1200px){.toolbar-actions{margin-left:0}.radio-group{flex-wrap:wrap;height:auto}.action-group{width:100%}.toolbar-separator{display:none}}@media (max-width: 992px){.toolbar-group--durum,.toolbar-group--depo{margin-left:0}.toolbar-row{gap:12px}.toolbar-group select{min-width:0}.status-group{flex-wrap:wrap;gap:6px}.reservation-group{flex-wrap:wrap}}@media (max-width: 768px){.orders-toolbar{padding:12px}.toolbar-row{flex-direction:column;align-items:stretch;gap:10px}.toolbar-group,.toolbar-group select,.toolbar-group input[type=date]{width:100%}.radio-group{flex-direction:column;align-items:flex-start;gap:8px}.status-group{flex-wrap:wrap;gap:6px}.status-chip{font-size:11px;padding:3px 10px}.action-group,.reservation-group,.toolbar-actions{flex-wrap:wrap;gap:6px}.action-divider{display:none}.action-input{width:100%}.action-group .btn,.reservation-group .btn,.toolbar-actions .btn{font-size:11px;padding:5px 10px}}@media (max-width: 480px){.action-group .btn,.reservation-group .btn,.toolbar-actions .btn{flex:1 1 calc(50% - 6px);justify-content:center}.status-chip{font-size:10px;padding:2px 8px}}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i6.DxDataGridComponent, selector: "dx-data-grid", inputs: ["accessKey", "activeStateEnabled", "allowColumnReordering", "allowColumnResizing", "autoNavigateToFocusedRow", "cacheEnabled", "cellHintEnabled", "columnAutoWidth", "columnChooser", "columnFixing", "columnHidingEnabled", "columnMinWidth", "columnResizingMode", "columns", "columnWidth", "customizeColumns", "dataRowTemplate", "dataSource", "dateSerializationFormat", "disabled", "editing", "elementAttr", "errorRowEnabled", "export", "filterBuilder", "filterBuilderPopup", "filterPanel", "filterRow", "filterSyncEnabled", "filterValue", "focusedColumnIndex", "focusedRowEnabled", "focusedRowIndex", "focusedRowKey", "grouping", "groupPanel", "headerFilter", "height", "highlightChanges", "hint", "hoverStateEnabled", "keyboardNavigation", "keyExpr", "loadPanel", "masterDetail", "noDataText", "pager", "paging", "remoteOperations", "renderAsync", "repaintChangesOnly", "rowAlternationEnabled", "rowDragging", "rowTemplate", "rtlEnabled", "scrolling", "searchPanel", "selectedRowKeys", "selection", "selectionFilter", "showBorders", "showColumnHeaders", "showColumnLines", "showRowLines", "sortByGroupSummaryInfo", "sorting", "stateStoring", "summary", "syncLookupFilterValues", "tabIndex", "toolbar", "twoWayBindingEnabled", "visible", "width", "wordWrapEnabled"], outputs: ["onAdaptiveDetailRowPreparing", "onCellClick", "onCellDblClick", "onCellHoverChanged", "onCellPrepared", "onContentReady", "onContextMenuPreparing", "onDataErrorOccurred", "onDisposing", "onEditCanceled", "onEditCanceling", "onEditingStart", "onEditorPrepared", "onEditorPreparing", "onExporting", "onFocusedCellChanged", "onFocusedCellChanging", "onFocusedRowChanged", "onFocusedRowChanging", "onInitialized", "onInitNewRow", "onKeyDown", "onOptionChanged", "onRowClick", "onRowCollapsed", "onRowCollapsing", "onRowDblClick", "onRowExpanded", "onRowExpanding", "onRowInserted", "onRowInserting", "onRowPrepared", "onRowRemoved", "onRowRemoving", "onRowUpdated", "onRowUpdating", "onRowValidating", "onSaved", "onSaving", "onSelectionChanged", "onToolbarPreparing", "accessKeyChange", "activeStateEnabledChange", "allowColumnReorderingChange", "allowColumnResizingChange", "autoNavigateToFocusedRowChange", "cacheEnabledChange", "cellHintEnabledChange", "columnAutoWidthChange", "columnChooserChange", "columnFixingChange", "columnHidingEnabledChange", "columnMinWidthChange", "columnResizingModeChange", "columnsChange", "columnWidthChange", "customizeColumnsChange", "dataRowTemplateChange", "dataSourceChange", "dateSerializationFormatChange", "disabledChange", "editingChange", "elementAttrChange", "errorRowEnabledChange", "exportChange", "filterBuilderChange", "filterBuilderPopupChange", "filterPanelChange", "filterRowChange", "filterSyncEnabledChange", "filterValueChange", "focusedColumnIndexChange", "focusedRowEnabledChange", "focusedRowIndexChange", "focusedRowKeyChange", "groupingChange", "groupPanelChange", "headerFilterChange", "heightChange", "highlightChangesChange", "hintChange", "hoverStateEnabledChange", "keyboardNavigationChange", "keyExprChange", "loadPanelChange", "masterDetailChange", "noDataTextChange", "pagerChange", "pagingChange", "remoteOperationsChange", "renderAsyncChange", "repaintChangesOnlyChange", "rowAlternationEnabledChange", "rowDraggingChange", "rowTemplateChange", "rtlEnabledChange", "scrollingChange", "searchPanelChange", "selectedRowKeysChange", "selectionChange", "selectionFilterChange", "showBordersChange", "showColumnHeadersChange", "showColumnLinesChange", "showRowLinesChange", "sortByGroupSummaryInfoChange", "sortingChange", "stateStoringChange", "summaryChange", "syncLookupFilterValuesChange", "tabIndexChange", "toolbarChange", "twoWayBindingEnabledChange", "visibleChange", "widthChange", "wordWrapEnabledChange"] }, { kind: "component", type: i7.DxoColumnChooserComponent, selector: "dxo-column-chooser", inputs: ["allowSearch", "emptyPanelText", "enabled", "height", "mode", "searchTimeout", "sortOrder", "title", "width"] }, { kind: "component", type: i7.DxoColumnFixingComponent, selector: "dxo-column-fixing", inputs: ["enabled", "texts"] }, { kind: "component", type: i7.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: i7.DxoHeaderFilterComponent, selector: "dxo-header-filter", inputs: ["allowSearch", "dataSource", "groupInterval", "height", "searchMode", "width", "searchTimeout", "texts", "visible", "showRelevantValues"] }, { kind: "component", type: i7.DxoExportComponent, selector: "dxo-export", inputs: ["backgroundColor", "enabled", "fileName", "formats", "margin", "printingEnabled", "svgToCanvas", "allowExportSelectedData", "texts"] }, { kind: "component", type: i7.DxoFilterBuilderComponent, selector: "dxo-filter-builder", inputs: ["accessKey", "activeStateEnabled", "allowHierarchicalFields", "customOperations", "disabled", "elementAttr", "fields", "filterOperationDescriptions", "focusStateEnabled", "groupOperationDescriptions", "groupOperations", "height", "hint", "hoverStateEnabled", "maxGroupLevel", "onContentReady", "onDisposing", "onEditorPrepared", "onEditorPreparing", "onInitialized", "onOptionChanged", "onValueChanged", "rtlEnabled", "tabIndex", "value", "visible", "width"], outputs: ["valueChange"] }, { kind: "component", type: i7.DxoFilterPanelComponent, selector: "dxo-filter-panel", inputs: ["customizeText", "filterEnabled", "texts", "visible"], outputs: ["filterEnabledChange"] }, { kind: "component", type: i7.DxoFilterRowComponent, selector: "dxo-filter-row", inputs: ["applyFilter", "applyFilterText", "betweenEndText", "betweenStartText", "operationDescriptions", "resetOperationText", "showAllText", "showOperationChooser", "visible"] }, { kind: "component", type: i7.DxoMasterDetailComponent, selector: "dxo-master-detail", inputs: ["autoExpandAll", "enabled", "template"] }, { kind: "component", type: i7.DxoPagerComponent, selector: "dxo-pager", inputs: ["allowedPageSizes", "displayMode", "infoText", "label", "showInfo", "showNavigationButtons", "showPageSizeSelector", "visible"] }, { kind: "component", type: i7.DxoPagingComponent, selector: "dxo-paging", inputs: ["enabled", "pageIndex", "pageSize"], outputs: ["pageIndexChange", "pageSizeChange"] }, { kind: "component", type: i7.DxoScrollingComponent, selector: "dxo-scrolling", inputs: ["columnRenderingMode", "mode", "preloadEnabled", "renderAsync", "rowRenderingMode", "scrollByContent", "scrollByThumb", "showScrollbar", "useNative"] }, { kind: "component", type: i7.DxoSelectionComponent, selector: "dxo-selection", inputs: ["allowSelectAll", "deferred", "mode", "selectAllMode", "showCheckBoxesMode", "recursive"] }, { kind: "component", type: i7.DxoSortingComponent, selector: "dxo-sorting", inputs: ["ascendingText", "clearText", "descendingText", "mode", "showSortIndexes"] }, { kind: "component", type: i7.DxoSummaryComponent, selector: "dxo-summary", inputs: ["calculateCustomSummary", "groupItems", "recalculateWhileEditing", "skipEmptyValues", "texts", "totalItems"] }, { kind: "component", type: i7.DxiTotalItemComponent, selector: "dxi-total-item", inputs: ["alignment", "column", "cssClass", "customizeText", "displayFormat", "name", "showInColumn", "skipEmptyValues", "summaryType", "valueFormat"] }, { kind: "directive", type: i8.DxTemplateDirective, selector: "[dxTemplate]", inputs: ["dxTemplateOf"] }, { kind: "component", type: i6.DxPopupComponent, selector: "dx-popup", inputs: ["accessKey", "animation", "closeOnOutsideClick", "container", "contentTemplate", "copyRootClassesToWrapper", "deferRendering", "disabled", "dragAndResizeArea", "dragEnabled", "dragOutsideBoundary", "elementAttr", "focusStateEnabled", "fullScreen", "height", "hideOnOutsideClick", "hideOnParentScroll", "hint", "hoverStateEnabled", "maxHeight", "maxWidth", "minHeight", "minWidth", "position", "resizeEnabled", "restorePosition", "rtlEnabled", "shading", "shadingColor", "showCloseButton", "showTitle", "tabIndex", "title", "titleTemplate", "toolbarItems", "visible", "width", "wrapperAttr"], outputs: ["onContentReady", "onDisposing", "onHidden", "onHiding", "onInitialized", "onOptionChanged", "onResize", "onResizeEnd", "onResizeStart", "onShowing", "onShown", "onTitleRendered", "accessKeyChange", "animationChange", "closeOnOutsideClickChange", "containerChange", "contentTemplateChange", "copyRootClassesToWrapperChange", "deferRenderingChange", "disabledChange", "dragAndResizeAreaChange", "dragEnabledChange", "dragOutsideBoundaryChange", "elementAttrChange", "focusStateEnabledChange", "fullScreenChange", "heightChange", "hideOnOutsideClickChange", "hideOnParentScrollChange", "hintChange", "hoverStateEnabledChange", "maxHeightChange", "maxWidthChange", "minHeightChange", "minWidthChange", "positionChange", "resizeEnabledChange", "restorePositionChange", "rtlEnabledChange", "shadingChange", "shadingColorChange", "showCloseButtonChange", "showTitleChange", "tabIndexChange", "titleChange", "titleTemplateChange", "toolbarItemsChange", "visibleChange", "widthChange", "wrapperAttrChange"] }, { kind: "component", type: i6.DxNumberBoxComponent, selector: "dx-number-box", inputs: ["accessKey", "activeStateEnabled", "buttons", "disabled", "elementAttr", "focusStateEnabled", "format", "height", "hint", "hoverStateEnabled", "inputAttr", "invalidValueMessage", "isValid", "label", "labelMode", "max", "min", "mode", "name", "placeholder", "readOnly", "rtlEnabled", "showClearButton", "showSpinButtons", "step", "stylingMode", "tabIndex", "text", "useLargeSpinButtons", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "valueChangeEvent", "visible", "width"], outputs: ["onChange", "onContentReady", "onCopy", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onKeyDown", "onKeyUp", "onOptionChanged", "onPaste", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "formatChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "invalidValueMessageChange", "isValidChange", "labelChange", "labelModeChange", "maxChange", "minChange", "modeChange", "nameChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "showClearButtonChange", "showSpinButtonsChange", "stepChange", "stylingModeChange", "tabIndexChange", "textChange", "useLargeSpinButtonsChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "component", type: i6.DxButtonComponent, selector: "dx-button", inputs: ["accessKey", "activeStateEnabled", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "icon", "rtlEnabled", "stylingMode", "tabIndex", "template", "text", "type", "useSubmitBehavior", "validationGroup", "visible", "width"], outputs: ["onClick", "onContentReady", "onDisposing", "onInitialized", "onOptionChanged", "accessKeyChange", "activeStateEnabledChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "iconChange", "rtlEnabledChange", "stylingModeChange", "tabIndexChange", "templateChange", "textChange", "typeChange", "useSubmitBehaviorChange", "validationGroupChange", "visibleChange", "widthChange"] }, { kind: "component", type: i9.PageComponent, selector: "abp-page", inputs: ["title", "toolbar", "breadcrumb"] }, { kind: "pipe", type: i10.LocalizationPipe, name: "abpLocalization" }] });
513
+ OrdersComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: OrdersComponent, selector: "lib-orders", viewQueries: [{ propertyName: "dxOrdersInstance", first: true, predicate: ["dxOrdersInstance"], descendants: true }], ngImport: i0, template: "<abp-page [title]=\"'SmartWarehouse::Orders' | abpLocalization\">\r\n\r\n <!-- Toolbar -->\r\n <div class=\"orders-toolbar\">\r\n <!-- Row 1: Filters -->\r\n <div class=\"toolbar-row\">\r\n <div class=\"toolbar-group\">\r\n <label>Sipari\u015F Grubu</label>\r\n <div class=\"status-group\">\r\n <span class=\"status-chip list-purchase\" [class.active]=\"activeListType === '1'\"\r\n (click)=\"toggleListType('1')\">\r\n <i class=\"fa fa-shopping-cart\"></i> Sanayi Sipari\u015Fleri\r\n </span>\r\n <span class=\"status-chip list-distribution\" [class.active]=\"activeListType === '2'\"\r\n (click)=\"toggleListType('2')\">\r\n <i class=\"fa fa-truck\"></i> Da\u011F\u0131t\u0131m Sipari\u015Fleri\r\n </span>\r\n <span class=\"status-chip list-warehouse\" [class.active]=\"activeListType === '3'\"\r\n (click)=\"toggleListType('3')\">\r\n <i class=\"fa fa-warehouse\"></i> Depo Talepleri\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"toolbar-group toolbar-group--durum\">\r\n <label>Durum</label>\r\n <div class=\"status-group\">\r\n <span class=\"status-chip pending\" [class.active]=\"activeStatus === 'beklemede'\"\r\n (click)=\"toggleStatus('beklemede')\">\r\n <i class=\"fa fa-clock\"></i> Beklemede\r\n </span>\r\n <span class=\"status-chip processing\" [class.active]=\"activeStatus === 'isleniyor'\"\r\n (click)=\"toggleStatus('isleniyor')\">\r\n <i class=\"fa fa-spinner\"></i> \u0130\u015Fleniyor\r\n </span>\r\n <span class=\"status-chip awaiting\" [class.active]=\"activeStatus === 'onayBekliyor'\"\r\n (click)=\"toggleStatus('onayBekliyor')\">\r\n <i class=\"fa fa-hourglass-half\"></i> Onay Bekliyor\r\n </span>\r\n <span class=\"status-chip completed\" [class.active]=\"activeStatus === 'tamamlandi'\"\r\n (click)=\"toggleStatus('tamamlandi')\">\r\n <i class=\"fa fa-check-circle\"></i> Tamamland\u0131\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"toolbar-group toolbar-group--depo\">\r\n <label>Depo</label>\r\n <select [(ngModel)]=\"selectedWarehouse\" class=\"form-select\">\r\n <option value=\"\">T\u00FCm\u00FC</option>\r\n <option *ngFor=\"let wh of warehouses\" [value]=\"wh.WhsCode\">{{ wh.WhsName }}</option>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <hr class=\"toolbar-divider\" />\r\n\r\n <!-- Row 3: Action input + related buttons | Reservation | Refresh/Excel -->\r\n <div class=\"toolbar-row\">\r\n <div class=\"action-group\">\r\n <button class=\"btn btn-action-primary btn-sm\" (click)=\"onGorevBaslat()\" [disabled]=\"isGorevBaslatLoading\">\r\n <i class=\"fa fa-plus-circle\"></i> G\u00F6rev Ba\u015Flat\r\n </button>\r\n <button class=\"btn btn-action-approve btn-sm\" (click)=\"onOnayVer()\"\r\n [disabled]=\"!canOnayVer\" [title]=\"onayVerTooltip\">\r\n <i class=\"fa fa-thumbs-up\"></i> G\u00F6revi Tamamla\r\n </button>\r\n <button class=\"btn btn-action-danger btn-sm\" (click)=\"onSiparisKapat()\"\r\n [disabled]=\"!canSiparisKapat\" [title]=\"siparisKapatTooltip\">\r\n <i class=\"fa fa-times-circle\"></i> Sipari\u015F Kapat\r\n </button>\r\n <button class=\"btn btn-action-sync btn-sm\" (click)=\"onDurumGuncelle()\" [disabled]=\"isBeeCellLoading\">\r\n <i class=\"fa fa-sync-alt\"></i> Durum G\u00FCncelle\r\n </button>\r\n <button class=\"btn btn-action-info btn-sm\" (click)=\"onBosKasaGetir()\" [disabled]=\"isBeeCellLoading\">\r\n <i class=\"fa fa-box-open\"></i> Bo\u015F Kasa Getir\r\n </button>\r\n <button class=\"btn btn-action-warning btn-sm\" (click)=\"onYarimKasa()\" [disabled]=\"isBeeCellLoading\">\r\n <i class=\"fa fa-box\"></i> Yar\u0131m Kasa Getir\r\n </button>\r\n <span class=\"action-divider\"></span>\r\n <button class=\"btn btn-action-reservation btn-sm\" (click)=\"onRezervasyonYap()\" [disabled]=\"isReservationLoading\">\r\n <i class=\"fa fa-lock\"></i> Rezervasyon Yap\r\n </button>\r\n <button class=\"btn btn-action-reservation-cancel btn-sm\" (click)=\"onRezervasyonSil()\" [disabled]=\"isReservationLoading\">\r\n <i class=\"fa fa-unlock\"></i> Rezervasyon Sil\r\n </button>\r\n <button class=\"btn btn-action-reservation-bulk btn-sm\" (click)=\"onTopluRezervasyonYap()\" [disabled]=\"isReservationLoading\">\r\n <i class=\"fa fa-lock\"></i> Toplu Rez. Yap\r\n </button>\r\n <button class=\"btn btn-action-reservation-bulk-cancel btn-sm\" (click)=\"onTumRezervasyonlariSil()\" [disabled]=\"isReservationLoading\">\r\n <i class=\"fa fa-unlock\"></i> Toplu Rez. Sil\r\n </button>\r\n <span class=\"action-divider\"></span>\r\n <button class=\"btn btn-action-secondary btn-sm\" (click)=\"onRefresh()\">\r\n <i class=\"fa fa-redo\"></i> Yenile\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Data Grid -->\r\n <div class=\"card orders-grid-card\">\r\n <div class=\"card-body\">\r\n <dx-data-grid\r\n #dxOrdersInstance\r\n [dataSource]=\"ordersDataSource\"\r\n [showRowLines]=\"true\"\r\n [showBorders]=\"true\"\r\n [remoteOperations]=\"true\"\r\n [hoverStateEnabled]=\"true\"\r\n [repaintChangesOnly]=\"true\"\r\n [allowColumnResizing]=\"true\"\r\n columnResizingMode=\"widget\"\r\n [allowColumnReordering]=\"true\"\r\n [columnAutoWidth]=\"true\"\r\n [columnHidingEnabled]=\"true\"\r\n (onRowClick)=\"onRowClick($event)\"\r\n (onSelectionChanged)=\"onSelectionChanged($event)\"\r\n (onRowPrepared)=\"onRowPrepared($event)\"\r\n style=\"height: 60vh\"\r\n >\r\n <dxo-pager\r\n [visible]=\"true\"\r\n [showInfo]=\"true\"\r\n [allowedPageSizes]=\"[5, 10, 20]\"\r\n [showNavigationButtons]=\"true\"\r\n [showPageSizeSelector]=\"true\"\r\n >\r\n </dxo-pager>\r\n <dxo-paging [pageSize]=\"10\"></dxo-paging>\r\n <dxo-column-chooser\r\n [allowSearch]=\"true\"\r\n [enabled]=\"true\"\r\n mode=\"select\"\r\n ></dxo-column-chooser>\r\n <dxo-column-fixing [enabled]=\"true\"></dxo-column-fixing>\r\n <dxo-header-filter [allowSearch]=\"true\" [visible]=\"true\"></dxo-header-filter>\r\n <dxo-filter-row [visible]=\"true\"></dxo-filter-row>\r\n <dxo-export [enabled]=\"true\" [allowExportSelectedData]=\"false\"></dxo-export>\r\n <dxo-filter-builder [allowHierarchicalFields]=\"true\"></dxo-filter-builder>\r\n <dxo-filter-panel [visible]=\"true\"></dxo-filter-panel>\r\n <dxo-sorting mode=\"single\"></dxo-sorting>\r\n <dxo-scrolling mode=\"standard\" showScrollbar=\"always\"></dxo-scrolling>\r\n <dxo-selection\r\n mode=\"multiple\"\r\n showCheckBoxesMode=\"always\"\r\n [allowSelectAll]=\"true\"\r\n ></dxo-selection>\r\n\r\n <dxi-column\r\n dataField=\"DocNum\"\r\n caption=\"{{ 'SmartWarehouse::Order:DocNum' | abpLocalization }}\"\r\n [width]=\"110\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"CardCode\"\r\n caption=\"{{ 'SmartWarehouse::Order:CardCode' | abpLocalization }}\"\r\n [width]=\"140\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"CardName\"\r\n caption=\"{{ 'SmartWarehouse::Order:CardName' | abpLocalization }}\"\r\n [width]=\"220\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"DocDate\"\r\n caption=\"{{ 'SmartWarehouse::Order:DocDate' | abpLocalization }}\"\r\n dataType=\"date\"\r\n format=\"dd.MM.yyyy\"\r\n [width]=\"120\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"DocDueDate\"\r\n caption=\"{{ 'SmartWarehouse::Order:DocDueDate' | abpLocalization }}\"\r\n dataType=\"date\"\r\n format=\"dd.MM.yyyy\"\r\n [width]=\"120\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"U_SWTalepTarihi\"\r\n caption=\"{{ 'SmartWarehouse::Order:U_SWTalepTarihi' | abpLocalization }}\"\r\n dataType=\"date\"\r\n format=\"dd.MM.yyyy\"\r\n [width]=\"130\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"U_SWDurum\"\r\n caption=\"{{ 'SmartWarehouse::Order:U_SWDurum' | abpLocalization }}\"\r\n [width]=\"110\"\r\n cellTemplate=\"swDurumTemplate\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"U_SWIsError\"\r\n caption=\"{{ 'SmartWarehouse::Order:U_SWIsError' | abpLocalization }}\"\r\n [width]=\"50\"\r\n cellTemplate=\"errorTemplate\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"U_SWErrorMessage\"\r\n caption=\"{{ 'SmartWarehouse::Order:U_SWErrorMessage' | abpLocalization }}\"\r\n [width]=\"260\"\r\n cellTemplate=\"errorMessageTemplate\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"OwnerCode\"\r\n caption=\"{{ 'SmartWarehouse::Order:OwnerCode' | abpLocalization }}\"\r\n [width]=\"120\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"Comments\"\r\n caption=\"{{ 'SmartWarehouse::Order:Comments' | abpLocalization }}\"\r\n [width]=\"200\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"U_SWGonderildi\"\r\n caption=\"{{ 'SmartWarehouse::Order:U_SWGonderildi' | abpLocalization }}\"\r\n [width]=\"110\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"U_SWStationCode\"\r\n caption=\"{{ 'SmartWarehouse::Order:U_SWStationCode' | abpLocalization }}\"\r\n [width]=\"120\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"U_SWEyeCode\"\r\n caption=\"{{ 'SmartWarehouse::Order:U_SWEyeCode' | abpLocalization }}\"\r\n [width]=\"140\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"U_SWOrderType\"\r\n caption=\"{{ 'SmartWarehouse::Order:U_SWOrderType' | abpLocalization }}\"\r\n [width]=\"160\"\r\n cellTemplate=\"orderTypeTemplate\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"NumAtCard\"\r\n caption=\"{{ 'SmartWarehouse::Order:NumAtCard' | abpLocalization }}\"\r\n [width]=\"140\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"DocTotal\"\r\n caption=\"{{ 'SmartWarehouse::Order:DocTotal' | abpLocalization }}\"\r\n dataType=\"number\"\r\n format=\"#,##0.00\"\r\n [width]=\"130\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"DocCur\"\r\n caption=\"{{ 'SmartWarehouse::Order:DocCur' | abpLocalization }}\"\r\n [width]=\"90\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"DocStatus\"\r\n caption=\"{{ 'SmartWarehouse::Order:DocStatus' | abpLocalization }}\"\r\n [width]=\"90\"\r\n cellTemplate=\"statusTemplate\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"DocEntry\"\r\n caption=\"{{ 'SmartWarehouse::Order:DocEntry' | abpLocalization }}\"\r\n [width]=\"100\"\r\n ></dxi-column>\r\n\r\n <div *dxTemplate=\"let cell of 'statusTemplate'\">\r\n <span\r\n class=\"badge\"\r\n [ngClass]=\"{\r\n 'bg-success': cell.value === 'O',\r\n 'bg-secondary': cell.value === 'C'\r\n }\"\r\n >\r\n {{ cell.value === 'O' ? 'A\u00E7\u0131k' : 'Kapal\u0131' }}\r\n </span>\r\n </div>\r\n\r\n <div *dxTemplate=\"let cell of 'swDurumTemplate'\">\r\n <span\r\n class=\"badge\"\r\n [ngClass]=\"{\r\n 'bg-warning': cell.value === '0' || !cell.value,\r\n 'bg-info': cell.value === '1',\r\n 'bg-primary': cell.value === '2',\r\n 'bg-success': cell.value === '3'\r\n }\"\r\n >\r\n {{\r\n cell.value === '1' ? 'Onay Bekliyor' :\r\n cell.value === '2' ? '\u0130\u015Fleniyor' :\r\n cell.value === '3' ? 'Tamamland\u0131' : 'Beklemede'\r\n }}\r\n </span>\r\n </div>\r\n\r\n <div *dxTemplate=\"let cell of 'errorTemplate'\">\r\n <i\r\n *ngIf=\"cell.value === 'Y'\"\r\n class=\"fa fa-exclamation-triangle text-danger\"\r\n [title]=\"cell.data.U_SWErrorMessage\"\r\n ></i>\r\n </div>\r\n\r\n <div *dxTemplate=\"let cell of 'errorMessageTemplate'\">\r\n <span\r\n *ngIf=\"cell.data.U_SWIsError === 'Y'\"\r\n class=\"error-message-cell\"\r\n [title]=\"cell.value\"\r\n >{{ cell.value }}</span>\r\n </div>\r\n\r\n <div *dxTemplate=\"let cell of 'orderTypeTemplate'\">\r\n <span class=\"badge bg-secondary\">\r\n {{\r\n cell.value === '1' ? 'Sanayi Sipari\u015Fleri' :\r\n cell.value === '2' ? 'Da\u011F\u0131t\u0131m Sipari\u015Fleri' :\r\n cell.value === '3' ? 'Depo Talepleri' : '-'\r\n }}\r\n </span>\r\n </div>\r\n\r\n <!-- Master-Detail: Sipari\u015F Sat\u0131rlar\u0131 -->\r\n <dxo-master-detail [enabled]=\"true\" template=\"orderLinesTemplate\"></dxo-master-detail>\r\n\r\n <div *dxTemplate=\"let detail of 'orderLinesTemplate'\">\r\n <div class=\"p-3\">\r\n <h6 class=\"mb-3\">\r\n <i class=\"fa fa-list me-1\"></i>\r\n {{ 'SmartWarehouse::Order:DocNum' | abpLocalization }}:\r\n {{ detail.data.DocNum }} - Sipari\u015F Sat\u0131rlar\u0131\r\n </h6>\r\n <dx-data-grid\r\n [dataSource]=\"detail.data.DocumentLines\"\r\n [showRowLines]=\"true\"\r\n [showBorders]=\"true\"\r\n [columnAutoWidth]=\"true\"\r\n [hoverStateEnabled]=\"true\"\r\n [rowAlternationEnabled]=\"true\"\r\n >\r\n <dxi-column\r\n dataField=\"LineNum\"\r\n caption=\"{{ 'SmartWarehouse::Order:LineNum' | abpLocalization }}\"\r\n [width]=\"70\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"ItemCode\"\r\n caption=\"{{ 'SmartWarehouse::Order:ItemCode' | abpLocalization }}\"\r\n [width]=\"140\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"ItemDescription\"\r\n caption=\"Kalem Ad\u0131\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"Quantity\"\r\n caption=\"{{ 'SmartWarehouse::Order:Quantity' | abpLocalization }}\"\r\n dataType=\"number\"\r\n format=\"#,##0.##\"\r\n [width]=\"100\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"U_SWTeslimMiktar\"\r\n caption=\"{{ 'SmartWarehouse::Order:U_SWTeslimMiktar' | abpLocalization }}\"\r\n dataType=\"number\"\r\n format=\"#,##0.##\"\r\n [width]=\"120\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"LineTotal\"\r\n caption=\"{{ 'SmartWarehouse::Order:LineTotal' | abpLocalization }}\"\r\n dataType=\"number\"\r\n format=\"#,##0.00\"\r\n [width]=\"120\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"WarehouseCode\"\r\n caption=\"{{ 'SmartWarehouse::Order:WhsCode' | abpLocalization }}\"\r\n [width]=\"100\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"ShipDate\"\r\n caption=\"{{ 'SmartWarehouse::Order:ShipDate' | abpLocalization }}\"\r\n dataType=\"date\"\r\n format=\"dd.MM.yyyy\"\r\n [width]=\"110\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"U_SonGorevId\"\r\n caption=\"{{ 'SmartWarehouse::Order:U_SonGorevId' | abpLocalization }}\"\r\n [width]=\"120\"\r\n ></dxi-column>\r\n\r\n <dxo-summary>\r\n <dxi-total-item\r\n column=\"lineTotal\"\r\n summaryType=\"sum\"\r\n displayFormat=\"Toplam: {0}\"\r\n valueFormat=\"#,##0.00\"\r\n ></dxi-total-item>\r\n <dxi-total-item\r\n column=\"quantity\"\r\n summaryType=\"sum\"\r\n displayFormat=\"Toplam: {0}\"\r\n valueFormat=\"#,##0.##\"\r\n ></dxi-total-item>\r\n </dxo-summary>\r\n </dx-data-grid>\r\n </div>\r\n </div>\r\n </dx-data-grid>\r\n </div>\r\n </div>\r\n\r\n <!-- Bo\u015F / Yar\u0131m Kasa Popup -->\r\n <dx-popup\r\n [visible]=\"bosKasaPopupVisible\"\r\n (onHidden)=\"bosKasaPopupVisible = false\"\r\n [width]=\"380\"\r\n [height]=\"'auto'\"\r\n [showTitle]=\"true\"\r\n [title]=\"bosKasaMode === 'empty' ? 'Bo\u015F Kasa Getir' : 'Yar\u0131m Kasa Getir'\"\r\n [dragEnabled]=\"true\"\r\n [resizeEnabled]=\"false\"\r\n [showCloseButton]=\"true\"\r\n [closeOnOutsideClick]=\"false\"\r\n >\r\n <div *dxTemplate=\"let data of 'content'\" class=\"p-3\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\">\u0130stasyon No</label>\r\n <dx-number-box [(value)]=\"bosKasaStationId\" [min]=\"1\" [showSpinButtons]=\"true\"></dx-number-box>\r\n </div>\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\">Raf No (Shelf ID)</label>\r\n <dx-number-box [(value)]=\"bosKasaShelfId\" [min]=\"1\" [showSpinButtons]=\"true\"></dx-number-box>\r\n </div>\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\">Kasa Adedi</label>\r\n <dx-number-box [(value)]=\"bosKasaBoxCount\" [min]=\"1\" [max]=\"50\" [showSpinButtons]=\"true\"></dx-number-box>\r\n </div>\r\n <div class=\"d-flex justify-content-end gap-2 mt-3\">\r\n <dx-button text=\"\u0130ptal\" (onClick)=\"bosKasaPopupVisible = false\" type=\"normal\"></dx-button>\r\n <dx-button\r\n [text]=\"bosKasaMode === 'empty' ? 'Bo\u015F Kasa G\u00F6nder' : 'Yar\u0131m Kasa G\u00F6nder'\"\r\n type=\"default\"\r\n (onClick)=\"onBosKasaGonder()\"\r\n ></dx-button>\r\n </div>\r\n </div>\r\n </dx-popup>\r\n\r\n</abp-page>\r\n", styles: [":host{display:block;max-width:100%;overflow-x:hidden}.orders-toolbar{background:#fff;border:1px solid #e0e0e0;border-radius:8px;padding:16px 20px;margin-bottom:16px;box-shadow:0 1px 3px #0000000f;max-width:100%;overflow:hidden}.toolbar-divider{border:none;border-top:1px solid #eee;margin:10px 0}.toolbar-row{display:flex;flex-wrap:wrap;align-items:center;gap:16px}.toolbar-group{display:flex;flex-direction:column;gap:4px}.toolbar-group--durum{margin-left:80px}.toolbar-group--depo{margin-left:auto}.toolbar-group label{font-size:11px;font-weight:600;color:#6c757d;text-transform:uppercase;letter-spacing:.5px}.toolbar-group select,.toolbar-group input[type=date]{height:36px;border:1px solid #ced4da;border-radius:6px;padding:0 10px;font-size:13px;background:#fff;transition:border-color .15s}.toolbar-group select:focus,.toolbar-group input[type=date]:focus{border-color:#556ee6;outline:none;box-shadow:0 0 0 2px #556ee626}.toolbar-group select{min-width:180px}.radio-group{display:flex;gap:12px;height:36px;align-items:center}.radio-group .form-check{margin:0;padding-left:22px}.radio-group .form-check-label{font-size:13px;cursor:pointer;white-space:nowrap}.status-group{display:flex;gap:10px;align-items:center}.status-chip{display:inline-flex;align-items:center;gap:6px;padding:4px 12px;border-radius:20px;font-size:12px;font-weight:500;cursor:pointer;border:1px solid transparent;transition:all .15s;-webkit-user-select:none;user-select:none}.status-chip.pending{background:#fff9e6;color:#c9a227;border-color:#ffe082}.status-chip.pending.active{background:#ffc107;color:#fff;border-color:#ffc107}.status-chip.processing{background:#e8f0fe;color:#7aadf5;border-color:#a8c8f7}.status-chip.processing.active{background:#0d6efd;color:#fff;border-color:#0d6efd}.status-chip.awaiting{background:#e6f9fc;color:#6ec6d8;border-color:#a0e1ed}.status-chip.awaiting.active{background:#0dcaf0;color:#fff;border-color:#0dcaf0}.status-chip.completed{background:#e8f5e9;color:#6db680;border-color:#a5d6a7}.status-chip.completed.active{background:#198754;color:#fff;border-color:#198754}.status-chip.list-purchase{background:#eef0fa;color:#9aa1d4;border-color:#b3b9e6}.status-chip.list-purchase.active{background:#5c6bc0;color:#fff;border-color:#5c6bc0}.status-chip.list-distribution{background:#fce8ee;color:#e87a9e;border-color:#f0a3bb}.status-chip.list-distribution.active{background:#e91e63;color:#fff;border-color:#e91e63}.status-chip.list-warehouse{background:#e5f5f4;color:#6db5ab;border-color:#a0d4cd}.status-chip.list-warehouse.active{background:#009688;color:#fff;border-color:#009688}.action-group{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.action-input{width:140px;height:32px;border:1px solid #ced4da;border-radius:6px;padding:0 10px;font-size:13px}.action-input:focus{border-color:#556ee6;outline:none;box-shadow:0 0 0 2px #556ee626}.toolbar-separator{width:1px;height:28px;background:#dee2e6;align-self:center}.reservation-group{display:flex;align-items:center;gap:8px}.toolbar-actions{display:flex;gap:8px;margin-left:auto;align-items:center}.action-group .btn,.reservation-group .btn,.toolbar-actions .btn{display:inline-flex;align-items:center;gap:5px;font-size:12px;padding:5px 12px;border-radius:6px;font-weight:500;white-space:nowrap;transition:all .15s}.btn-action-primary{background:#556ee6;color:#fff;border:none}.btn-action-primary:hover{background:#4458cb;color:#fff}.btn-action-success{background:#34c38f;color:#fff;border:none}.btn-action-success:hover{background:#2ca67a;color:#fff}.btn-action-approve{background:#6f42c1;color:#fff;border:none}.btn-action-approve:hover{background:#5a32a3;color:#fff}.btn-action-warning{background:#f1b44c;color:#fff;border:none}.btn-action-warning:hover{background:#d9a043;color:#fff}.btn-action-info{background:#50a5f1;color:#fff;border:none}.btn-action-info:hover{background:#3d8ed8;color:#fff}.btn-action-danger{background:#f46a6a;color:#fff;border:none}.btn-action-danger:hover{background:#e05555;color:#fff}.btn-action-outline{background:transparent;color:#556ee6;border:1px solid #556ee6}.btn-action-outline:hover{background:#556ee6;color:#fff}.btn-action-secondary{background:#74788d;color:#fff;border:none}.btn-action-secondary:hover{background:#5f6373;color:#fff}.btn-action-reservation{background:#7c4dff;color:#fff;border:none}.btn-action-reservation:hover{background:#651fff;color:#fff}.btn-action-reservation:disabled{background:#b39ddb;cursor:not-allowed}.btn-action-reservation-cancel{background:#ff6e40;color:#fff;border:none}.btn-action-reservation-cancel:hover{background:#ff3d00;color:#fff}.btn-action-reservation-cancel:disabled{background:#ffab91;cursor:not-allowed}.btn-action-reservation-bulk{background:#536dfe;color:#fff;border:none}.btn-action-reservation-bulk:hover{background:#304ffe;color:#fff}.btn-action-reservation-bulk:disabled{background:#8c9eff;cursor:not-allowed}.btn-action-reservation-bulk-cancel{background:#ff5252;color:#fff;border:none}.btn-action-reservation-bulk-cancel:hover{background:#ff1744;color:#fff}.btn-action-reservation-bulk-cancel:disabled{background:#ff8a80;cursor:not-allowed}.action-divider{width:1px;height:24px;background:#dee2e6;display:inline-block;vertical-align:middle;margin:0 4px}.orders-grid-card{border-radius:8px;border:1px solid #e0e0e0;box-shadow:0 1px 3px #0000000f;overflow:hidden;max-width:100%}.orders-grid-card .card-body{padding:12px;overflow-x:auto}::ng-deep .order-row-error{background-color:#fdecea!important}::ng-deep .order-row-error:hover{background-color:#fbd9d5!important}::ng-deep .error-message-cell{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#b02a37;font-size:12px}@media (max-width: 1200px){.toolbar-actions{margin-left:0}.radio-group{flex-wrap:wrap;height:auto}.action-group{width:100%}.toolbar-separator{display:none}}@media (max-width: 992px){.toolbar-group--durum,.toolbar-group--depo{margin-left:0}.toolbar-row{gap:12px}.toolbar-group select{min-width:0}.status-group{flex-wrap:wrap;gap:6px}.reservation-group{flex-wrap:wrap}}@media (max-width: 768px){.orders-toolbar{padding:12px}.toolbar-row{flex-direction:column;align-items:stretch;gap:10px}.toolbar-group,.toolbar-group select,.toolbar-group input[type=date]{width:100%}.radio-group{flex-direction:column;align-items:flex-start;gap:8px}.status-group{flex-wrap:wrap;gap:6px}.status-chip{font-size:11px;padding:3px 10px}.action-group,.reservation-group,.toolbar-actions{flex-wrap:wrap;gap:6px}.action-divider{display:none}.action-input{width:100%}.action-group .btn,.reservation-group .btn,.toolbar-actions .btn{font-size:11px;padding:5px 10px}}@media (max-width: 480px){.action-group .btn,.reservation-group .btn,.toolbar-actions .btn{flex:1 1 calc(50% - 6px);justify-content:center}.status-chip{font-size:10px;padding:2px 8px}}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i6.DxDataGridComponent, selector: "dx-data-grid", inputs: ["accessKey", "activeStateEnabled", "allowColumnReordering", "allowColumnResizing", "autoNavigateToFocusedRow", "cacheEnabled", "cellHintEnabled", "columnAutoWidth", "columnChooser", "columnFixing", "columnHidingEnabled", "columnMinWidth", "columnResizingMode", "columns", "columnWidth", "customizeColumns", "dataRowTemplate", "dataSource", "dateSerializationFormat", "disabled", "editing", "elementAttr", "errorRowEnabled", "export", "filterBuilder", "filterBuilderPopup", "filterPanel", "filterRow", "filterSyncEnabled", "filterValue", "focusedColumnIndex", "focusedRowEnabled", "focusedRowIndex", "focusedRowKey", "grouping", "groupPanel", "headerFilter", "height", "highlightChanges", "hint", "hoverStateEnabled", "keyboardNavigation", "keyExpr", "loadPanel", "masterDetail", "noDataText", "pager", "paging", "remoteOperations", "renderAsync", "repaintChangesOnly", "rowAlternationEnabled", "rowDragging", "rowTemplate", "rtlEnabled", "scrolling", "searchPanel", "selectedRowKeys", "selection", "selectionFilter", "showBorders", "showColumnHeaders", "showColumnLines", "showRowLines", "sortByGroupSummaryInfo", "sorting", "stateStoring", "summary", "syncLookupFilterValues", "tabIndex", "toolbar", "twoWayBindingEnabled", "visible", "width", "wordWrapEnabled"], outputs: ["onAdaptiveDetailRowPreparing", "onCellClick", "onCellDblClick", "onCellHoverChanged", "onCellPrepared", "onContentReady", "onContextMenuPreparing", "onDataErrorOccurred", "onDisposing", "onEditCanceled", "onEditCanceling", "onEditingStart", "onEditorPrepared", "onEditorPreparing", "onExporting", "onFocusedCellChanged", "onFocusedCellChanging", "onFocusedRowChanged", "onFocusedRowChanging", "onInitialized", "onInitNewRow", "onKeyDown", "onOptionChanged", "onRowClick", "onRowCollapsed", "onRowCollapsing", "onRowDblClick", "onRowExpanded", "onRowExpanding", "onRowInserted", "onRowInserting", "onRowPrepared", "onRowRemoved", "onRowRemoving", "onRowUpdated", "onRowUpdating", "onRowValidating", "onSaved", "onSaving", "onSelectionChanged", "onToolbarPreparing", "accessKeyChange", "activeStateEnabledChange", "allowColumnReorderingChange", "allowColumnResizingChange", "autoNavigateToFocusedRowChange", "cacheEnabledChange", "cellHintEnabledChange", "columnAutoWidthChange", "columnChooserChange", "columnFixingChange", "columnHidingEnabledChange", "columnMinWidthChange", "columnResizingModeChange", "columnsChange", "columnWidthChange", "customizeColumnsChange", "dataRowTemplateChange", "dataSourceChange", "dateSerializationFormatChange", "disabledChange", "editingChange", "elementAttrChange", "errorRowEnabledChange", "exportChange", "filterBuilderChange", "filterBuilderPopupChange", "filterPanelChange", "filterRowChange", "filterSyncEnabledChange", "filterValueChange", "focusedColumnIndexChange", "focusedRowEnabledChange", "focusedRowIndexChange", "focusedRowKeyChange", "groupingChange", "groupPanelChange", "headerFilterChange", "heightChange", "highlightChangesChange", "hintChange", "hoverStateEnabledChange", "keyboardNavigationChange", "keyExprChange", "loadPanelChange", "masterDetailChange", "noDataTextChange", "pagerChange", "pagingChange", "remoteOperationsChange", "renderAsyncChange", "repaintChangesOnlyChange", "rowAlternationEnabledChange", "rowDraggingChange", "rowTemplateChange", "rtlEnabledChange", "scrollingChange", "searchPanelChange", "selectedRowKeysChange", "selectionChange", "selectionFilterChange", "showBordersChange", "showColumnHeadersChange", "showColumnLinesChange", "showRowLinesChange", "sortByGroupSummaryInfoChange", "sortingChange", "stateStoringChange", "summaryChange", "syncLookupFilterValuesChange", "tabIndexChange", "toolbarChange", "twoWayBindingEnabledChange", "visibleChange", "widthChange", "wordWrapEnabledChange"] }, { kind: "component", type: i7.DxoColumnChooserComponent, selector: "dxo-column-chooser", inputs: ["allowSearch", "emptyPanelText", "enabled", "height", "mode", "searchTimeout", "sortOrder", "title", "width"] }, { kind: "component", type: i7.DxoColumnFixingComponent, selector: "dxo-column-fixing", inputs: ["enabled", "texts"] }, { kind: "component", type: i7.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: i7.DxoHeaderFilterComponent, selector: "dxo-header-filter", inputs: ["allowSearch", "dataSource", "groupInterval", "height", "searchMode", "width", "searchTimeout", "texts", "visible", "showRelevantValues"] }, { kind: "component", type: i7.DxoExportComponent, selector: "dxo-export", inputs: ["backgroundColor", "enabled", "fileName", "formats", "margin", "printingEnabled", "svgToCanvas", "allowExportSelectedData", "texts"] }, { kind: "component", type: i7.DxoFilterBuilderComponent, selector: "dxo-filter-builder", inputs: ["accessKey", "activeStateEnabled", "allowHierarchicalFields", "customOperations", "disabled", "elementAttr", "fields", "filterOperationDescriptions", "focusStateEnabled", "groupOperationDescriptions", "groupOperations", "height", "hint", "hoverStateEnabled", "maxGroupLevel", "onContentReady", "onDisposing", "onEditorPrepared", "onEditorPreparing", "onInitialized", "onOptionChanged", "onValueChanged", "rtlEnabled", "tabIndex", "value", "visible", "width"], outputs: ["valueChange"] }, { kind: "component", type: i7.DxoFilterPanelComponent, selector: "dxo-filter-panel", inputs: ["customizeText", "filterEnabled", "texts", "visible"], outputs: ["filterEnabledChange"] }, { kind: "component", type: i7.DxoFilterRowComponent, selector: "dxo-filter-row", inputs: ["applyFilter", "applyFilterText", "betweenEndText", "betweenStartText", "operationDescriptions", "resetOperationText", "showAllText", "showOperationChooser", "visible"] }, { kind: "component", type: i7.DxoMasterDetailComponent, selector: "dxo-master-detail", inputs: ["autoExpandAll", "enabled", "template"] }, { kind: "component", type: i7.DxoPagerComponent, selector: "dxo-pager", inputs: ["allowedPageSizes", "displayMode", "infoText", "label", "showInfo", "showNavigationButtons", "showPageSizeSelector", "visible"] }, { kind: "component", type: i7.DxoPagingComponent, selector: "dxo-paging", inputs: ["enabled", "pageIndex", "pageSize"], outputs: ["pageIndexChange", "pageSizeChange"] }, { kind: "component", type: i7.DxoScrollingComponent, selector: "dxo-scrolling", inputs: ["columnRenderingMode", "mode", "preloadEnabled", "renderAsync", "rowRenderingMode", "scrollByContent", "scrollByThumb", "showScrollbar", "useNative"] }, { kind: "component", type: i7.DxoSelectionComponent, selector: "dxo-selection", inputs: ["allowSelectAll", "deferred", "mode", "selectAllMode", "showCheckBoxesMode", "recursive"] }, { kind: "component", type: i7.DxoSortingComponent, selector: "dxo-sorting", inputs: ["ascendingText", "clearText", "descendingText", "mode", "showSortIndexes"] }, { kind: "component", type: i7.DxoSummaryComponent, selector: "dxo-summary", inputs: ["calculateCustomSummary", "groupItems", "recalculateWhileEditing", "skipEmptyValues", "texts", "totalItems"] }, { kind: "component", type: i7.DxiTotalItemComponent, selector: "dxi-total-item", inputs: ["alignment", "column", "cssClass", "customizeText", "displayFormat", "name", "showInColumn", "skipEmptyValues", "summaryType", "valueFormat"] }, { kind: "directive", type: i8.DxTemplateDirective, selector: "[dxTemplate]", inputs: ["dxTemplateOf"] }, { kind: "component", type: i6.DxPopupComponent, selector: "dx-popup", inputs: ["accessKey", "animation", "closeOnOutsideClick", "container", "contentTemplate", "copyRootClassesToWrapper", "deferRendering", "disabled", "dragAndResizeArea", "dragEnabled", "dragOutsideBoundary", "elementAttr", "focusStateEnabled", "fullScreen", "height", "hideOnOutsideClick", "hideOnParentScroll", "hint", "hoverStateEnabled", "maxHeight", "maxWidth", "minHeight", "minWidth", "position", "resizeEnabled", "restorePosition", "rtlEnabled", "shading", "shadingColor", "showCloseButton", "showTitle", "tabIndex", "title", "titleTemplate", "toolbarItems", "visible", "width", "wrapperAttr"], outputs: ["onContentReady", "onDisposing", "onHidden", "onHiding", "onInitialized", "onOptionChanged", "onResize", "onResizeEnd", "onResizeStart", "onShowing", "onShown", "onTitleRendered", "accessKeyChange", "animationChange", "closeOnOutsideClickChange", "containerChange", "contentTemplateChange", "copyRootClassesToWrapperChange", "deferRenderingChange", "disabledChange", "dragAndResizeAreaChange", "dragEnabledChange", "dragOutsideBoundaryChange", "elementAttrChange", "focusStateEnabledChange", "fullScreenChange", "heightChange", "hideOnOutsideClickChange", "hideOnParentScrollChange", "hintChange", "hoverStateEnabledChange", "maxHeightChange", "maxWidthChange", "minHeightChange", "minWidthChange", "positionChange", "resizeEnabledChange", "restorePositionChange", "rtlEnabledChange", "shadingChange", "shadingColorChange", "showCloseButtonChange", "showTitleChange", "tabIndexChange", "titleChange", "titleTemplateChange", "toolbarItemsChange", "visibleChange", "widthChange", "wrapperAttrChange"] }, { kind: "component", type: i6.DxNumberBoxComponent, selector: "dx-number-box", inputs: ["accessKey", "activeStateEnabled", "buttons", "disabled", "elementAttr", "focusStateEnabled", "format", "height", "hint", "hoverStateEnabled", "inputAttr", "invalidValueMessage", "isValid", "label", "labelMode", "max", "min", "mode", "name", "placeholder", "readOnly", "rtlEnabled", "showClearButton", "showSpinButtons", "step", "stylingMode", "tabIndex", "text", "useLargeSpinButtons", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "valueChangeEvent", "visible", "width"], outputs: ["onChange", "onContentReady", "onCopy", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onKeyDown", "onKeyUp", "onOptionChanged", "onPaste", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "formatChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "invalidValueMessageChange", "isValidChange", "labelChange", "labelModeChange", "maxChange", "minChange", "modeChange", "nameChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "showClearButtonChange", "showSpinButtonsChange", "stepChange", "stylingModeChange", "tabIndexChange", "textChange", "useLargeSpinButtonsChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "component", type: i6.DxButtonComponent, selector: "dx-button", inputs: ["accessKey", "activeStateEnabled", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "icon", "rtlEnabled", "stylingMode", "tabIndex", "template", "text", "type", "useSubmitBehavior", "validationGroup", "visible", "width"], outputs: ["onClick", "onContentReady", "onDisposing", "onInitialized", "onOptionChanged", "accessKeyChange", "activeStateEnabledChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "iconChange", "rtlEnabledChange", "stylingModeChange", "tabIndexChange", "templateChange", "textChange", "typeChange", "useSubmitBehaviorChange", "validationGroupChange", "visibleChange", "widthChange"] }, { kind: "component", type: i9.PageComponent, selector: "abp-page", inputs: ["title", "toolbar", "breadcrumb"] }, { kind: "pipe", type: i10.LocalizationPipe, name: "abpLocalization" }] });
438
514
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: OrdersComponent, decorators: [{
439
515
  type: Component,
440
- args: [{ selector: 'lib-orders', template: "<abp-page [title]=\"'SmartWarehouse::Orders' | abpLocalization\">\r\n\r\n <!-- Toolbar -->\r\n <div class=\"orders-toolbar\">\r\n <!-- Row 1: Filters -->\r\n <div class=\"toolbar-row\">\r\n <div class=\"toolbar-group\">\r\n <label>Sipari\u015F Grubu</label>\r\n <div class=\"status-group\">\r\n <span class=\"status-chip list-purchase\" [class.active]=\"activeListType === '1'\"\r\n (click)=\"toggleListType('1')\">\r\n <i class=\"fa fa-shopping-cart\"></i> Sanayi Sipari\u015Fleri\r\n </span>\r\n <span class=\"status-chip list-distribution\" [class.active]=\"activeListType === '2'\"\r\n (click)=\"toggleListType('2')\">\r\n <i class=\"fa fa-truck\"></i> Da\u011F\u0131t\u0131m Sipari\u015Fleri\r\n </span>\r\n <span class=\"status-chip list-warehouse\" [class.active]=\"activeListType === '3'\"\r\n (click)=\"toggleListType('3')\">\r\n <i class=\"fa fa-warehouse\"></i> Depo Talepleri\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"toolbar-group toolbar-group--durum\">\r\n <label>Durum</label>\r\n <div class=\"status-group\">\r\n <span class=\"status-chip pending\" [class.active]=\"activeStatus === 'beklemede'\"\r\n (click)=\"toggleStatus('beklemede')\">\r\n <i class=\"fa fa-clock\"></i> Beklemede\r\n </span>\r\n <span class=\"status-chip processing\" [class.active]=\"activeStatus === 'isleniyor'\"\r\n (click)=\"toggleStatus('isleniyor')\">\r\n <i class=\"fa fa-spinner\"></i> \u0130\u015Fleniyor\r\n </span>\r\n <span class=\"status-chip awaiting\" [class.active]=\"activeStatus === 'onayBekliyor'\"\r\n (click)=\"toggleStatus('onayBekliyor')\">\r\n <i class=\"fa fa-hourglass-half\"></i> Onay Bekliyor\r\n </span>\r\n <span class=\"status-chip completed\" [class.active]=\"activeStatus === 'tamamlandi'\"\r\n (click)=\"toggleStatus('tamamlandi')\">\r\n <i class=\"fa fa-check-circle\"></i> Tamamland\u0131\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"toolbar-group toolbar-group--depo\">\r\n <label>Depo</label>\r\n <select [(ngModel)]=\"selectedWarehouse\" class=\"form-select\">\r\n <option value=\"\">T\u00FCm\u00FC</option>\r\n <option *ngFor=\"let wh of warehouses\" [value]=\"wh.WhsCode\">{{ wh.WhsName }}</option>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <hr class=\"toolbar-divider\" />\r\n\r\n <!-- Row 3: Action input + related buttons | Reservation | Refresh/Excel -->\r\n <div class=\"toolbar-row\">\r\n <div class=\"action-group\">\r\n <button class=\"btn btn-action-primary btn-sm\" (click)=\"onGorevBaslat()\" [disabled]=\"isGorevBaslatLoading\">\r\n <i class=\"fa fa-plus-circle\"></i> G\u00F6rev Ba\u015Flat\r\n </button>\r\n <button class=\"btn btn-action-approve btn-sm\" (click)=\"onOnayVer()\">\r\n <i class=\"fa fa-thumbs-up\"></i> G\u00F6revi Tamamla\r\n </button>\r\n <button class=\"btn btn-action-danger btn-sm\" (click)=\"onSiparisKapat()\">\r\n <i class=\"fa fa-times-circle\"></i> Sipari\u015F Kapat\r\n </button>\r\n <button class=\"btn btn-action-sync btn-sm\" (click)=\"onDurumGuncelle()\" [disabled]=\"isBeeCellLoading\">\r\n <i class=\"fa fa-sync-alt\"></i> Durum G\u00FCncelle\r\n </button>\r\n <button class=\"btn btn-action-info btn-sm\" (click)=\"onBosKasaGetir()\" [disabled]=\"isBeeCellLoading\">\r\n <i class=\"fa fa-box-open\"></i> Bo\u015F Kasa Getir\r\n </button>\r\n <button class=\"btn btn-action-warning btn-sm\" (click)=\"onYarimKasa()\" [disabled]=\"isBeeCellLoading\">\r\n <i class=\"fa fa-box\"></i> Yar\u0131m Kasa Getir\r\n </button>\r\n <span class=\"action-divider\"></span>\r\n <button class=\"btn btn-action-reservation btn-sm\" (click)=\"onRezervasyonYap()\" [disabled]=\"isReservationLoading\">\r\n <i class=\"fa fa-lock\"></i> Rezervasyon Yap\r\n </button>\r\n <button class=\"btn btn-action-reservation-cancel btn-sm\" (click)=\"onRezervasyonSil()\" [disabled]=\"isReservationLoading\">\r\n <i class=\"fa fa-unlock\"></i> Rezervasyon Sil\r\n </button>\r\n <button class=\"btn btn-action-reservation-bulk btn-sm\" (click)=\"onTopluRezervasyonYap()\" [disabled]=\"isReservationLoading\">\r\n <i class=\"fa fa-lock\"></i> Toplu Rez. Yap\r\n </button>\r\n <button class=\"btn btn-action-reservation-bulk-cancel btn-sm\" (click)=\"onTumRezervasyonlariSil()\" [disabled]=\"isReservationLoading\">\r\n <i class=\"fa fa-unlock\"></i> Toplu Rez. Sil\r\n </button>\r\n <span class=\"action-divider\"></span>\r\n <button class=\"btn btn-action-secondary btn-sm\" (click)=\"onRefresh()\">\r\n <i class=\"fa fa-redo\"></i> Yenile\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Data Grid -->\r\n <div class=\"card orders-grid-card\">\r\n <div class=\"card-body\">\r\n <dx-data-grid\r\n #dxOrdersInstance\r\n [dataSource]=\"ordersDataSource\"\r\n [showRowLines]=\"true\"\r\n [showBorders]=\"true\"\r\n [remoteOperations]=\"true\"\r\n [hoverStateEnabled]=\"true\"\r\n [repaintChangesOnly]=\"true\"\r\n [allowColumnResizing]=\"true\"\r\n columnResizingMode=\"widget\"\r\n [allowColumnReordering]=\"true\"\r\n [columnAutoWidth]=\"true\"\r\n [columnHidingEnabled]=\"true\"\r\n (onRowClick)=\"onRowClick($event)\"\r\n (onSelectionChanged)=\"onSelectionChanged($event)\"\r\n (onRowPrepared)=\"onRowPrepared($event)\"\r\n style=\"height: 60vh\"\r\n >\r\n <dxo-pager\r\n [visible]=\"true\"\r\n [showInfo]=\"true\"\r\n [allowedPageSizes]=\"[5, 10, 20]\"\r\n [showNavigationButtons]=\"true\"\r\n [showPageSizeSelector]=\"true\"\r\n >\r\n </dxo-pager>\r\n <dxo-paging [pageSize]=\"10\"></dxo-paging>\r\n <dxo-column-chooser\r\n [allowSearch]=\"true\"\r\n [enabled]=\"true\"\r\n mode=\"select\"\r\n ></dxo-column-chooser>\r\n <dxo-column-fixing [enabled]=\"true\"></dxo-column-fixing>\r\n <dxo-header-filter [allowSearch]=\"true\" [visible]=\"true\"></dxo-header-filter>\r\n <dxo-filter-row [visible]=\"true\"></dxo-filter-row>\r\n <dxo-export [enabled]=\"true\" [allowExportSelectedData]=\"false\"></dxo-export>\r\n <dxo-filter-builder [allowHierarchicalFields]=\"true\"></dxo-filter-builder>\r\n <dxo-filter-panel [visible]=\"true\"></dxo-filter-panel>\r\n <dxo-sorting mode=\"single\"></dxo-sorting>\r\n <dxo-scrolling mode=\"standard\" showScrollbar=\"always\"></dxo-scrolling>\r\n <dxo-selection\r\n mode=\"multiple\"\r\n showCheckBoxesMode=\"always\"\r\n [allowSelectAll]=\"true\"\r\n ></dxo-selection>\r\n\r\n <dxi-column\r\n dataField=\"DocNum\"\r\n caption=\"{{ 'SmartWarehouse::Order:DocNum' | abpLocalization }}\"\r\n [width]=\"110\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"CardCode\"\r\n caption=\"{{ 'SmartWarehouse::Order:CardCode' | abpLocalization }}\"\r\n [width]=\"140\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"CardName\"\r\n caption=\"{{ 'SmartWarehouse::Order:CardName' | abpLocalization }}\"\r\n [width]=\"220\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"DocDate\"\r\n caption=\"{{ 'SmartWarehouse::Order:DocDate' | abpLocalization }}\"\r\n dataType=\"date\"\r\n format=\"dd.MM.yyyy\"\r\n [width]=\"120\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"DocDueDate\"\r\n caption=\"{{ 'SmartWarehouse::Order:DocDueDate' | abpLocalization }}\"\r\n dataType=\"date\"\r\n format=\"dd.MM.yyyy\"\r\n [width]=\"120\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"U_SWTalepTarihi\"\r\n caption=\"{{ 'SmartWarehouse::Order:U_SWTalepTarihi' | abpLocalization }}\"\r\n dataType=\"date\"\r\n format=\"dd.MM.yyyy\"\r\n [width]=\"130\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"U_SWDurum\"\r\n caption=\"{{ 'SmartWarehouse::Order:U_SWDurum' | abpLocalization }}\"\r\n [width]=\"110\"\r\n cellTemplate=\"swDurumTemplate\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"U_SWIsError\"\r\n caption=\"{{ 'SmartWarehouse::Order:U_SWIsError' | abpLocalization }}\"\r\n [width]=\"50\"\r\n cellTemplate=\"errorTemplate\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"U_SWErrorMessage\"\r\n caption=\"{{ 'SmartWarehouse::Order:U_SWErrorMessage' | abpLocalization }}\"\r\n [width]=\"260\"\r\n cellTemplate=\"errorMessageTemplate\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"OwnerCode\"\r\n caption=\"{{ 'SmartWarehouse::Order:OwnerCode' | abpLocalization }}\"\r\n [width]=\"120\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"Comments\"\r\n caption=\"{{ 'SmartWarehouse::Order:Comments' | abpLocalization }}\"\r\n [width]=\"200\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"U_SWGonderildi\"\r\n caption=\"{{ 'SmartWarehouse::Order:U_SWGonderildi' | abpLocalization }}\"\r\n [width]=\"110\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"U_SWStationCode\"\r\n caption=\"{{ 'SmartWarehouse::Order:U_SWStationCode' | abpLocalization }}\"\r\n [width]=\"120\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"U_SWEyeCode\"\r\n caption=\"{{ 'SmartWarehouse::Order:U_SWEyeCode' | abpLocalization }}\"\r\n [width]=\"140\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"U_SWOrderType\"\r\n caption=\"{{ 'SmartWarehouse::Order:U_SWOrderType' | abpLocalization }}\"\r\n [width]=\"160\"\r\n cellTemplate=\"orderTypeTemplate\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"NumAtCard\"\r\n caption=\"{{ 'SmartWarehouse::Order:NumAtCard' | abpLocalization }}\"\r\n [width]=\"140\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"DocTotal\"\r\n caption=\"{{ 'SmartWarehouse::Order:DocTotal' | abpLocalization }}\"\r\n dataType=\"number\"\r\n format=\"#,##0.00\"\r\n [width]=\"130\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"DocCur\"\r\n caption=\"{{ 'SmartWarehouse::Order:DocCur' | abpLocalization }}\"\r\n [width]=\"90\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"DocStatus\"\r\n caption=\"{{ 'SmartWarehouse::Order:DocStatus' | abpLocalization }}\"\r\n [width]=\"90\"\r\n cellTemplate=\"statusTemplate\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"DocEntry\"\r\n caption=\"{{ 'SmartWarehouse::Order:DocEntry' | abpLocalization }}\"\r\n [width]=\"100\"\r\n ></dxi-column>\r\n\r\n <div *dxTemplate=\"let cell of 'statusTemplate'\">\r\n <span\r\n class=\"badge\"\r\n [ngClass]=\"{\r\n 'bg-success': cell.value === 'O',\r\n 'bg-secondary': cell.value === 'C'\r\n }\"\r\n >\r\n {{ cell.value === 'O' ? 'A\u00E7\u0131k' : 'Kapal\u0131' }}\r\n </span>\r\n </div>\r\n\r\n <div *dxTemplate=\"let cell of 'swDurumTemplate'\">\r\n <span\r\n class=\"badge\"\r\n [ngClass]=\"{\r\n 'bg-warning': cell.value === '0' || !cell.value,\r\n 'bg-info': cell.value === '1',\r\n 'bg-primary': cell.value === '2',\r\n 'bg-success': cell.value === '3'\r\n }\"\r\n >\r\n {{\r\n cell.value === '1' ? 'Onay Bekliyor' :\r\n cell.value === '2' ? '\u0130\u015Fleniyor' :\r\n cell.value === '3' ? 'Tamamland\u0131' : 'Beklemede'\r\n }}\r\n </span>\r\n </div>\r\n\r\n <div *dxTemplate=\"let cell of 'errorTemplate'\">\r\n <i\r\n *ngIf=\"cell.value === 'Y'\"\r\n class=\"fa fa-exclamation-triangle text-danger\"\r\n [title]=\"cell.data.U_SWErrorMessage\"\r\n ></i>\r\n </div>\r\n\r\n <div *dxTemplate=\"let cell of 'errorMessageTemplate'\">\r\n <span\r\n *ngIf=\"cell.data.U_SWIsError === 'Y'\"\r\n class=\"error-message-cell\"\r\n [title]=\"cell.value\"\r\n >{{ cell.value }}</span>\r\n </div>\r\n\r\n <div *dxTemplate=\"let cell of 'orderTypeTemplate'\">\r\n <span class=\"badge bg-secondary\">\r\n {{\r\n cell.value === '1' ? 'Sanayi Sipari\u015Fleri' :\r\n cell.value === '2' ? 'Da\u011F\u0131t\u0131m Sipari\u015Fleri' :\r\n cell.value === '3' ? 'Depo Talepleri' : '-'\r\n }}\r\n </span>\r\n </div>\r\n\r\n <!-- Master-Detail: Sipari\u015F Sat\u0131rlar\u0131 -->\r\n <dxo-master-detail [enabled]=\"true\" template=\"orderLinesTemplate\"></dxo-master-detail>\r\n\r\n <div *dxTemplate=\"let detail of 'orderLinesTemplate'\">\r\n <div class=\"p-3\">\r\n <h6 class=\"mb-3\">\r\n <i class=\"fa fa-list me-1\"></i>\r\n {{ 'SmartWarehouse::Order:DocNum' | abpLocalization }}:\r\n {{ detail.data.DocNum }} - Sipari\u015F Sat\u0131rlar\u0131\r\n </h6>\r\n <dx-data-grid\r\n [dataSource]=\"detail.data.DocumentLines\"\r\n [showRowLines]=\"true\"\r\n [showBorders]=\"true\"\r\n [columnAutoWidth]=\"true\"\r\n [hoverStateEnabled]=\"true\"\r\n [rowAlternationEnabled]=\"true\"\r\n >\r\n <dxi-column\r\n dataField=\"LineNum\"\r\n caption=\"{{ 'SmartWarehouse::Order:LineNum' | abpLocalization }}\"\r\n [width]=\"70\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"ItemCode\"\r\n caption=\"{{ 'SmartWarehouse::Order:ItemCode' | abpLocalization }}\"\r\n [width]=\"140\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"ItemDescription\"\r\n caption=\"Kalem Ad\u0131\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"Quantity\"\r\n caption=\"{{ 'SmartWarehouse::Order:Quantity' | abpLocalization }}\"\r\n dataType=\"number\"\r\n format=\"#,##0.##\"\r\n [width]=\"100\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"U_SWTeslimMiktar\"\r\n caption=\"{{ 'SmartWarehouse::Order:U_SWTeslimMiktar' | abpLocalization }}\"\r\n dataType=\"number\"\r\n format=\"#,##0.##\"\r\n [width]=\"120\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"LineTotal\"\r\n caption=\"{{ 'SmartWarehouse::Order:LineTotal' | abpLocalization }}\"\r\n dataType=\"number\"\r\n format=\"#,##0.00\"\r\n [width]=\"120\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"WarehouseCode\"\r\n caption=\"{{ 'SmartWarehouse::Order:WhsCode' | abpLocalization }}\"\r\n [width]=\"100\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"ShipDate\"\r\n caption=\"{{ 'SmartWarehouse::Order:ShipDate' | abpLocalization }}\"\r\n dataType=\"date\"\r\n format=\"dd.MM.yyyy\"\r\n [width]=\"110\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"U_SonGorevId\"\r\n caption=\"{{ 'SmartWarehouse::Order:U_SonGorevId' | abpLocalization }}\"\r\n [width]=\"120\"\r\n ></dxi-column>\r\n\r\n <dxo-summary>\r\n <dxi-total-item\r\n column=\"lineTotal\"\r\n summaryType=\"sum\"\r\n displayFormat=\"Toplam: {0}\"\r\n valueFormat=\"#,##0.00\"\r\n ></dxi-total-item>\r\n <dxi-total-item\r\n column=\"quantity\"\r\n summaryType=\"sum\"\r\n displayFormat=\"Toplam: {0}\"\r\n valueFormat=\"#,##0.##\"\r\n ></dxi-total-item>\r\n </dxo-summary>\r\n </dx-data-grid>\r\n </div>\r\n </div>\r\n </dx-data-grid>\r\n </div>\r\n </div>\r\n\r\n <!-- Bo\u015F / Yar\u0131m Kasa Popup -->\r\n <dx-popup\r\n [visible]=\"bosKasaPopupVisible\"\r\n (onHidden)=\"bosKasaPopupVisible = false\"\r\n [width]=\"380\"\r\n [height]=\"'auto'\"\r\n [showTitle]=\"true\"\r\n [title]=\"bosKasaMode === 'empty' ? 'Bo\u015F Kasa Getir' : 'Yar\u0131m Kasa Getir'\"\r\n [dragEnabled]=\"true\"\r\n [resizeEnabled]=\"false\"\r\n [showCloseButton]=\"true\"\r\n [closeOnOutsideClick]=\"false\"\r\n >\r\n <div *dxTemplate=\"let data of 'content'\" class=\"p-3\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\">\u0130stasyon No</label>\r\n <dx-number-box [(value)]=\"bosKasaStationId\" [min]=\"1\" [showSpinButtons]=\"true\"></dx-number-box>\r\n </div>\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\">Raf No (Shelf ID)</label>\r\n <dx-number-box [(value)]=\"bosKasaShelfId\" [min]=\"1\" [showSpinButtons]=\"true\"></dx-number-box>\r\n </div>\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\">Kasa Adedi</label>\r\n <dx-number-box [(value)]=\"bosKasaBoxCount\" [min]=\"1\" [max]=\"50\" [showSpinButtons]=\"true\"></dx-number-box>\r\n </div>\r\n <div class=\"d-flex justify-content-end gap-2 mt-3\">\r\n <dx-button text=\"\u0130ptal\" (onClick)=\"bosKasaPopupVisible = false\" type=\"normal\"></dx-button>\r\n <dx-button\r\n [text]=\"bosKasaMode === 'empty' ? 'Bo\u015F Kasa G\u00F6nder' : 'Yar\u0131m Kasa G\u00F6nder'\"\r\n type=\"default\"\r\n (onClick)=\"onBosKasaGonder()\"\r\n ></dx-button>\r\n </div>\r\n </div>\r\n </dx-popup>\r\n\r\n</abp-page>\r\n", styles: [":host{display:block;max-width:100%;overflow-x:hidden}.orders-toolbar{background:#fff;border:1px solid #e0e0e0;border-radius:8px;padding:16px 20px;margin-bottom:16px;box-shadow:0 1px 3px #0000000f;max-width:100%;overflow:hidden}.toolbar-divider{border:none;border-top:1px solid #eee;margin:10px 0}.toolbar-row{display:flex;flex-wrap:wrap;align-items:center;gap:16px}.toolbar-group{display:flex;flex-direction:column;gap:4px}.toolbar-group--durum{margin-left:80px}.toolbar-group--depo{margin-left:auto}.toolbar-group label{font-size:11px;font-weight:600;color:#6c757d;text-transform:uppercase;letter-spacing:.5px}.toolbar-group select,.toolbar-group input[type=date]{height:36px;border:1px solid #ced4da;border-radius:6px;padding:0 10px;font-size:13px;background:#fff;transition:border-color .15s}.toolbar-group select:focus,.toolbar-group input[type=date]:focus{border-color:#556ee6;outline:none;box-shadow:0 0 0 2px #556ee626}.toolbar-group select{min-width:180px}.radio-group{display:flex;gap:12px;height:36px;align-items:center}.radio-group .form-check{margin:0;padding-left:22px}.radio-group .form-check-label{font-size:13px;cursor:pointer;white-space:nowrap}.status-group{display:flex;gap:10px;align-items:center}.status-chip{display:inline-flex;align-items:center;gap:6px;padding:4px 12px;border-radius:20px;font-size:12px;font-weight:500;cursor:pointer;border:1px solid transparent;transition:all .15s;-webkit-user-select:none;user-select:none}.status-chip.pending{background:#fff9e6;color:#c9a227;border-color:#ffe082}.status-chip.pending.active{background:#ffc107;color:#fff;border-color:#ffc107}.status-chip.processing{background:#e8f0fe;color:#7aadf5;border-color:#a8c8f7}.status-chip.processing.active{background:#0d6efd;color:#fff;border-color:#0d6efd}.status-chip.awaiting{background:#e6f9fc;color:#6ec6d8;border-color:#a0e1ed}.status-chip.awaiting.active{background:#0dcaf0;color:#fff;border-color:#0dcaf0}.status-chip.completed{background:#e8f5e9;color:#6db680;border-color:#a5d6a7}.status-chip.completed.active{background:#198754;color:#fff;border-color:#198754}.status-chip.list-purchase{background:#eef0fa;color:#9aa1d4;border-color:#b3b9e6}.status-chip.list-purchase.active{background:#5c6bc0;color:#fff;border-color:#5c6bc0}.status-chip.list-distribution{background:#fce8ee;color:#e87a9e;border-color:#f0a3bb}.status-chip.list-distribution.active{background:#e91e63;color:#fff;border-color:#e91e63}.status-chip.list-warehouse{background:#e5f5f4;color:#6db5ab;border-color:#a0d4cd}.status-chip.list-warehouse.active{background:#009688;color:#fff;border-color:#009688}.action-group{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.action-input{width:140px;height:32px;border:1px solid #ced4da;border-radius:6px;padding:0 10px;font-size:13px}.action-input:focus{border-color:#556ee6;outline:none;box-shadow:0 0 0 2px #556ee626}.toolbar-separator{width:1px;height:28px;background:#dee2e6;align-self:center}.reservation-group{display:flex;align-items:center;gap:8px}.toolbar-actions{display:flex;gap:8px;margin-left:auto;align-items:center}.action-group .btn,.reservation-group .btn,.toolbar-actions .btn{display:inline-flex;align-items:center;gap:5px;font-size:12px;padding:5px 12px;border-radius:6px;font-weight:500;white-space:nowrap;transition:all .15s}.btn-action-primary{background:#556ee6;color:#fff;border:none}.btn-action-primary:hover{background:#4458cb;color:#fff}.btn-action-success{background:#34c38f;color:#fff;border:none}.btn-action-success:hover{background:#2ca67a;color:#fff}.btn-action-approve{background:#6f42c1;color:#fff;border:none}.btn-action-approve:hover{background:#5a32a3;color:#fff}.btn-action-warning{background:#f1b44c;color:#fff;border:none}.btn-action-warning:hover{background:#d9a043;color:#fff}.btn-action-info{background:#50a5f1;color:#fff;border:none}.btn-action-info:hover{background:#3d8ed8;color:#fff}.btn-action-danger{background:#f46a6a;color:#fff;border:none}.btn-action-danger:hover{background:#e05555;color:#fff}.btn-action-outline{background:transparent;color:#556ee6;border:1px solid #556ee6}.btn-action-outline:hover{background:#556ee6;color:#fff}.btn-action-secondary{background:#74788d;color:#fff;border:none}.btn-action-secondary:hover{background:#5f6373;color:#fff}.btn-action-reservation{background:#7c4dff;color:#fff;border:none}.btn-action-reservation:hover{background:#651fff;color:#fff}.btn-action-reservation:disabled{background:#b39ddb;cursor:not-allowed}.btn-action-reservation-cancel{background:#ff6e40;color:#fff;border:none}.btn-action-reservation-cancel:hover{background:#ff3d00;color:#fff}.btn-action-reservation-cancel:disabled{background:#ffab91;cursor:not-allowed}.btn-action-reservation-bulk{background:#536dfe;color:#fff;border:none}.btn-action-reservation-bulk:hover{background:#304ffe;color:#fff}.btn-action-reservation-bulk:disabled{background:#8c9eff;cursor:not-allowed}.btn-action-reservation-bulk-cancel{background:#ff5252;color:#fff;border:none}.btn-action-reservation-bulk-cancel:hover{background:#ff1744;color:#fff}.btn-action-reservation-bulk-cancel:disabled{background:#ff8a80;cursor:not-allowed}.action-divider{width:1px;height:24px;background:#dee2e6;display:inline-block;vertical-align:middle;margin:0 4px}.orders-grid-card{border-radius:8px;border:1px solid #e0e0e0;box-shadow:0 1px 3px #0000000f;overflow:hidden;max-width:100%}.orders-grid-card .card-body{padding:12px;overflow-x:auto}::ng-deep .order-row-error{background-color:#fdecea!important}::ng-deep .order-row-error:hover{background-color:#fbd9d5!important}::ng-deep .error-message-cell{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#b02a37;font-size:12px}@media (max-width: 1200px){.toolbar-actions{margin-left:0}.radio-group{flex-wrap:wrap;height:auto}.action-group{width:100%}.toolbar-separator{display:none}}@media (max-width: 992px){.toolbar-group--durum,.toolbar-group--depo{margin-left:0}.toolbar-row{gap:12px}.toolbar-group select{min-width:0}.status-group{flex-wrap:wrap;gap:6px}.reservation-group{flex-wrap:wrap}}@media (max-width: 768px){.orders-toolbar{padding:12px}.toolbar-row{flex-direction:column;align-items:stretch;gap:10px}.toolbar-group,.toolbar-group select,.toolbar-group input[type=date]{width:100%}.radio-group{flex-direction:column;align-items:flex-start;gap:8px}.status-group{flex-wrap:wrap;gap:6px}.status-chip{font-size:11px;padding:3px 10px}.action-group,.reservation-group,.toolbar-actions{flex-wrap:wrap;gap:6px}.action-divider{display:none}.action-input{width:100%}.action-group .btn,.reservation-group .btn,.toolbar-actions .btn{font-size:11px;padding:5px 10px}}@media (max-width: 480px){.action-group .btn,.reservation-group .btn,.toolbar-actions .btn{flex:1 1 calc(50% - 6px);justify-content:center}.status-chip{font-size:10px;padding:2px 8px}}\n"] }]
516
+ args: [{ selector: 'lib-orders', template: "<abp-page [title]=\"'SmartWarehouse::Orders' | abpLocalization\">\r\n\r\n <!-- Toolbar -->\r\n <div class=\"orders-toolbar\">\r\n <!-- Row 1: Filters -->\r\n <div class=\"toolbar-row\">\r\n <div class=\"toolbar-group\">\r\n <label>Sipari\u015F Grubu</label>\r\n <div class=\"status-group\">\r\n <span class=\"status-chip list-purchase\" [class.active]=\"activeListType === '1'\"\r\n (click)=\"toggleListType('1')\">\r\n <i class=\"fa fa-shopping-cart\"></i> Sanayi Sipari\u015Fleri\r\n </span>\r\n <span class=\"status-chip list-distribution\" [class.active]=\"activeListType === '2'\"\r\n (click)=\"toggleListType('2')\">\r\n <i class=\"fa fa-truck\"></i> Da\u011F\u0131t\u0131m Sipari\u015Fleri\r\n </span>\r\n <span class=\"status-chip list-warehouse\" [class.active]=\"activeListType === '3'\"\r\n (click)=\"toggleListType('3')\">\r\n <i class=\"fa fa-warehouse\"></i> Depo Talepleri\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"toolbar-group toolbar-group--durum\">\r\n <label>Durum</label>\r\n <div class=\"status-group\">\r\n <span class=\"status-chip pending\" [class.active]=\"activeStatus === 'beklemede'\"\r\n (click)=\"toggleStatus('beklemede')\">\r\n <i class=\"fa fa-clock\"></i> Beklemede\r\n </span>\r\n <span class=\"status-chip processing\" [class.active]=\"activeStatus === 'isleniyor'\"\r\n (click)=\"toggleStatus('isleniyor')\">\r\n <i class=\"fa fa-spinner\"></i> \u0130\u015Fleniyor\r\n </span>\r\n <span class=\"status-chip awaiting\" [class.active]=\"activeStatus === 'onayBekliyor'\"\r\n (click)=\"toggleStatus('onayBekliyor')\">\r\n <i class=\"fa fa-hourglass-half\"></i> Onay Bekliyor\r\n </span>\r\n <span class=\"status-chip completed\" [class.active]=\"activeStatus === 'tamamlandi'\"\r\n (click)=\"toggleStatus('tamamlandi')\">\r\n <i class=\"fa fa-check-circle\"></i> Tamamland\u0131\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"toolbar-group toolbar-group--depo\">\r\n <label>Depo</label>\r\n <select [(ngModel)]=\"selectedWarehouse\" class=\"form-select\">\r\n <option value=\"\">T\u00FCm\u00FC</option>\r\n <option *ngFor=\"let wh of warehouses\" [value]=\"wh.WhsCode\">{{ wh.WhsName }}</option>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <hr class=\"toolbar-divider\" />\r\n\r\n <!-- Row 3: Action input + related buttons | Reservation | Refresh/Excel -->\r\n <div class=\"toolbar-row\">\r\n <div class=\"action-group\">\r\n <button class=\"btn btn-action-primary btn-sm\" (click)=\"onGorevBaslat()\" [disabled]=\"isGorevBaslatLoading\">\r\n <i class=\"fa fa-plus-circle\"></i> G\u00F6rev Ba\u015Flat\r\n </button>\r\n <button class=\"btn btn-action-approve btn-sm\" (click)=\"onOnayVer()\"\r\n [disabled]=\"!canOnayVer\" [title]=\"onayVerTooltip\">\r\n <i class=\"fa fa-thumbs-up\"></i> G\u00F6revi Tamamla\r\n </button>\r\n <button class=\"btn btn-action-danger btn-sm\" (click)=\"onSiparisKapat()\"\r\n [disabled]=\"!canSiparisKapat\" [title]=\"siparisKapatTooltip\">\r\n <i class=\"fa fa-times-circle\"></i> Sipari\u015F Kapat\r\n </button>\r\n <button class=\"btn btn-action-sync btn-sm\" (click)=\"onDurumGuncelle()\" [disabled]=\"isBeeCellLoading\">\r\n <i class=\"fa fa-sync-alt\"></i> Durum G\u00FCncelle\r\n </button>\r\n <button class=\"btn btn-action-info btn-sm\" (click)=\"onBosKasaGetir()\" [disabled]=\"isBeeCellLoading\">\r\n <i class=\"fa fa-box-open\"></i> Bo\u015F Kasa Getir\r\n </button>\r\n <button class=\"btn btn-action-warning btn-sm\" (click)=\"onYarimKasa()\" [disabled]=\"isBeeCellLoading\">\r\n <i class=\"fa fa-box\"></i> Yar\u0131m Kasa Getir\r\n </button>\r\n <span class=\"action-divider\"></span>\r\n <button class=\"btn btn-action-reservation btn-sm\" (click)=\"onRezervasyonYap()\" [disabled]=\"isReservationLoading\">\r\n <i class=\"fa fa-lock\"></i> Rezervasyon Yap\r\n </button>\r\n <button class=\"btn btn-action-reservation-cancel btn-sm\" (click)=\"onRezervasyonSil()\" [disabled]=\"isReservationLoading\">\r\n <i class=\"fa fa-unlock\"></i> Rezervasyon Sil\r\n </button>\r\n <button class=\"btn btn-action-reservation-bulk btn-sm\" (click)=\"onTopluRezervasyonYap()\" [disabled]=\"isReservationLoading\">\r\n <i class=\"fa fa-lock\"></i> Toplu Rez. Yap\r\n </button>\r\n <button class=\"btn btn-action-reservation-bulk-cancel btn-sm\" (click)=\"onTumRezervasyonlariSil()\" [disabled]=\"isReservationLoading\">\r\n <i class=\"fa fa-unlock\"></i> Toplu Rez. Sil\r\n </button>\r\n <span class=\"action-divider\"></span>\r\n <button class=\"btn btn-action-secondary btn-sm\" (click)=\"onRefresh()\">\r\n <i class=\"fa fa-redo\"></i> Yenile\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Data Grid -->\r\n <div class=\"card orders-grid-card\">\r\n <div class=\"card-body\">\r\n <dx-data-grid\r\n #dxOrdersInstance\r\n [dataSource]=\"ordersDataSource\"\r\n [showRowLines]=\"true\"\r\n [showBorders]=\"true\"\r\n [remoteOperations]=\"true\"\r\n [hoverStateEnabled]=\"true\"\r\n [repaintChangesOnly]=\"true\"\r\n [allowColumnResizing]=\"true\"\r\n columnResizingMode=\"widget\"\r\n [allowColumnReordering]=\"true\"\r\n [columnAutoWidth]=\"true\"\r\n [columnHidingEnabled]=\"true\"\r\n (onRowClick)=\"onRowClick($event)\"\r\n (onSelectionChanged)=\"onSelectionChanged($event)\"\r\n (onRowPrepared)=\"onRowPrepared($event)\"\r\n style=\"height: 60vh\"\r\n >\r\n <dxo-pager\r\n [visible]=\"true\"\r\n [showInfo]=\"true\"\r\n [allowedPageSizes]=\"[5, 10, 20]\"\r\n [showNavigationButtons]=\"true\"\r\n [showPageSizeSelector]=\"true\"\r\n >\r\n </dxo-pager>\r\n <dxo-paging [pageSize]=\"10\"></dxo-paging>\r\n <dxo-column-chooser\r\n [allowSearch]=\"true\"\r\n [enabled]=\"true\"\r\n mode=\"select\"\r\n ></dxo-column-chooser>\r\n <dxo-column-fixing [enabled]=\"true\"></dxo-column-fixing>\r\n <dxo-header-filter [allowSearch]=\"true\" [visible]=\"true\"></dxo-header-filter>\r\n <dxo-filter-row [visible]=\"true\"></dxo-filter-row>\r\n <dxo-export [enabled]=\"true\" [allowExportSelectedData]=\"false\"></dxo-export>\r\n <dxo-filter-builder [allowHierarchicalFields]=\"true\"></dxo-filter-builder>\r\n <dxo-filter-panel [visible]=\"true\"></dxo-filter-panel>\r\n <dxo-sorting mode=\"single\"></dxo-sorting>\r\n <dxo-scrolling mode=\"standard\" showScrollbar=\"always\"></dxo-scrolling>\r\n <dxo-selection\r\n mode=\"multiple\"\r\n showCheckBoxesMode=\"always\"\r\n [allowSelectAll]=\"true\"\r\n ></dxo-selection>\r\n\r\n <dxi-column\r\n dataField=\"DocNum\"\r\n caption=\"{{ 'SmartWarehouse::Order:DocNum' | abpLocalization }}\"\r\n [width]=\"110\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"CardCode\"\r\n caption=\"{{ 'SmartWarehouse::Order:CardCode' | abpLocalization }}\"\r\n [width]=\"140\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"CardName\"\r\n caption=\"{{ 'SmartWarehouse::Order:CardName' | abpLocalization }}\"\r\n [width]=\"220\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"DocDate\"\r\n caption=\"{{ 'SmartWarehouse::Order:DocDate' | abpLocalization }}\"\r\n dataType=\"date\"\r\n format=\"dd.MM.yyyy\"\r\n [width]=\"120\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"DocDueDate\"\r\n caption=\"{{ 'SmartWarehouse::Order:DocDueDate' | abpLocalization }}\"\r\n dataType=\"date\"\r\n format=\"dd.MM.yyyy\"\r\n [width]=\"120\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"U_SWTalepTarihi\"\r\n caption=\"{{ 'SmartWarehouse::Order:U_SWTalepTarihi' | abpLocalization }}\"\r\n dataType=\"date\"\r\n format=\"dd.MM.yyyy\"\r\n [width]=\"130\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"U_SWDurum\"\r\n caption=\"{{ 'SmartWarehouse::Order:U_SWDurum' | abpLocalization }}\"\r\n [width]=\"110\"\r\n cellTemplate=\"swDurumTemplate\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"U_SWIsError\"\r\n caption=\"{{ 'SmartWarehouse::Order:U_SWIsError' | abpLocalization }}\"\r\n [width]=\"50\"\r\n cellTemplate=\"errorTemplate\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"U_SWErrorMessage\"\r\n caption=\"{{ 'SmartWarehouse::Order:U_SWErrorMessage' | abpLocalization }}\"\r\n [width]=\"260\"\r\n cellTemplate=\"errorMessageTemplate\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"OwnerCode\"\r\n caption=\"{{ 'SmartWarehouse::Order:OwnerCode' | abpLocalization }}\"\r\n [width]=\"120\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"Comments\"\r\n caption=\"{{ 'SmartWarehouse::Order:Comments' | abpLocalization }}\"\r\n [width]=\"200\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"U_SWGonderildi\"\r\n caption=\"{{ 'SmartWarehouse::Order:U_SWGonderildi' | abpLocalization }}\"\r\n [width]=\"110\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"U_SWStationCode\"\r\n caption=\"{{ 'SmartWarehouse::Order:U_SWStationCode' | abpLocalization }}\"\r\n [width]=\"120\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"U_SWEyeCode\"\r\n caption=\"{{ 'SmartWarehouse::Order:U_SWEyeCode' | abpLocalization }}\"\r\n [width]=\"140\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"U_SWOrderType\"\r\n caption=\"{{ 'SmartWarehouse::Order:U_SWOrderType' | abpLocalization }}\"\r\n [width]=\"160\"\r\n cellTemplate=\"orderTypeTemplate\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"NumAtCard\"\r\n caption=\"{{ 'SmartWarehouse::Order:NumAtCard' | abpLocalization }}\"\r\n [width]=\"140\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"DocTotal\"\r\n caption=\"{{ 'SmartWarehouse::Order:DocTotal' | abpLocalization }}\"\r\n dataType=\"number\"\r\n format=\"#,##0.00\"\r\n [width]=\"130\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"DocCur\"\r\n caption=\"{{ 'SmartWarehouse::Order:DocCur' | abpLocalization }}\"\r\n [width]=\"90\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"DocStatus\"\r\n caption=\"{{ 'SmartWarehouse::Order:DocStatus' | abpLocalization }}\"\r\n [width]=\"90\"\r\n cellTemplate=\"statusTemplate\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"DocEntry\"\r\n caption=\"{{ 'SmartWarehouse::Order:DocEntry' | abpLocalization }}\"\r\n [width]=\"100\"\r\n ></dxi-column>\r\n\r\n <div *dxTemplate=\"let cell of 'statusTemplate'\">\r\n <span\r\n class=\"badge\"\r\n [ngClass]=\"{\r\n 'bg-success': cell.value === 'O',\r\n 'bg-secondary': cell.value === 'C'\r\n }\"\r\n >\r\n {{ cell.value === 'O' ? 'A\u00E7\u0131k' : 'Kapal\u0131' }}\r\n </span>\r\n </div>\r\n\r\n <div *dxTemplate=\"let cell of 'swDurumTemplate'\">\r\n <span\r\n class=\"badge\"\r\n [ngClass]=\"{\r\n 'bg-warning': cell.value === '0' || !cell.value,\r\n 'bg-info': cell.value === '1',\r\n 'bg-primary': cell.value === '2',\r\n 'bg-success': cell.value === '3'\r\n }\"\r\n >\r\n {{\r\n cell.value === '1' ? 'Onay Bekliyor' :\r\n cell.value === '2' ? '\u0130\u015Fleniyor' :\r\n cell.value === '3' ? 'Tamamland\u0131' : 'Beklemede'\r\n }}\r\n </span>\r\n </div>\r\n\r\n <div *dxTemplate=\"let cell of 'errorTemplate'\">\r\n <i\r\n *ngIf=\"cell.value === 'Y'\"\r\n class=\"fa fa-exclamation-triangle text-danger\"\r\n [title]=\"cell.data.U_SWErrorMessage\"\r\n ></i>\r\n </div>\r\n\r\n <div *dxTemplate=\"let cell of 'errorMessageTemplate'\">\r\n <span\r\n *ngIf=\"cell.data.U_SWIsError === 'Y'\"\r\n class=\"error-message-cell\"\r\n [title]=\"cell.value\"\r\n >{{ cell.value }}</span>\r\n </div>\r\n\r\n <div *dxTemplate=\"let cell of 'orderTypeTemplate'\">\r\n <span class=\"badge bg-secondary\">\r\n {{\r\n cell.value === '1' ? 'Sanayi Sipari\u015Fleri' :\r\n cell.value === '2' ? 'Da\u011F\u0131t\u0131m Sipari\u015Fleri' :\r\n cell.value === '3' ? 'Depo Talepleri' : '-'\r\n }}\r\n </span>\r\n </div>\r\n\r\n <!-- Master-Detail: Sipari\u015F Sat\u0131rlar\u0131 -->\r\n <dxo-master-detail [enabled]=\"true\" template=\"orderLinesTemplate\"></dxo-master-detail>\r\n\r\n <div *dxTemplate=\"let detail of 'orderLinesTemplate'\">\r\n <div class=\"p-3\">\r\n <h6 class=\"mb-3\">\r\n <i class=\"fa fa-list me-1\"></i>\r\n {{ 'SmartWarehouse::Order:DocNum' | abpLocalization }}:\r\n {{ detail.data.DocNum }} - Sipari\u015F Sat\u0131rlar\u0131\r\n </h6>\r\n <dx-data-grid\r\n [dataSource]=\"detail.data.DocumentLines\"\r\n [showRowLines]=\"true\"\r\n [showBorders]=\"true\"\r\n [columnAutoWidth]=\"true\"\r\n [hoverStateEnabled]=\"true\"\r\n [rowAlternationEnabled]=\"true\"\r\n >\r\n <dxi-column\r\n dataField=\"LineNum\"\r\n caption=\"{{ 'SmartWarehouse::Order:LineNum' | abpLocalization }}\"\r\n [width]=\"70\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"ItemCode\"\r\n caption=\"{{ 'SmartWarehouse::Order:ItemCode' | abpLocalization }}\"\r\n [width]=\"140\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"ItemDescription\"\r\n caption=\"Kalem Ad\u0131\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"Quantity\"\r\n caption=\"{{ 'SmartWarehouse::Order:Quantity' | abpLocalization }}\"\r\n dataType=\"number\"\r\n format=\"#,##0.##\"\r\n [width]=\"100\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"U_SWTeslimMiktar\"\r\n caption=\"{{ 'SmartWarehouse::Order:U_SWTeslimMiktar' | abpLocalization }}\"\r\n dataType=\"number\"\r\n format=\"#,##0.##\"\r\n [width]=\"120\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"LineTotal\"\r\n caption=\"{{ 'SmartWarehouse::Order:LineTotal' | abpLocalization }}\"\r\n dataType=\"number\"\r\n format=\"#,##0.00\"\r\n [width]=\"120\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"WarehouseCode\"\r\n caption=\"{{ 'SmartWarehouse::Order:WhsCode' | abpLocalization }}\"\r\n [width]=\"100\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"ShipDate\"\r\n caption=\"{{ 'SmartWarehouse::Order:ShipDate' | abpLocalization }}\"\r\n dataType=\"date\"\r\n format=\"dd.MM.yyyy\"\r\n [width]=\"110\"\r\n ></dxi-column>\r\n <dxi-column\r\n dataField=\"U_SonGorevId\"\r\n caption=\"{{ 'SmartWarehouse::Order:U_SonGorevId' | abpLocalization }}\"\r\n [width]=\"120\"\r\n ></dxi-column>\r\n\r\n <dxo-summary>\r\n <dxi-total-item\r\n column=\"lineTotal\"\r\n summaryType=\"sum\"\r\n displayFormat=\"Toplam: {0}\"\r\n valueFormat=\"#,##0.00\"\r\n ></dxi-total-item>\r\n <dxi-total-item\r\n column=\"quantity\"\r\n summaryType=\"sum\"\r\n displayFormat=\"Toplam: {0}\"\r\n valueFormat=\"#,##0.##\"\r\n ></dxi-total-item>\r\n </dxo-summary>\r\n </dx-data-grid>\r\n </div>\r\n </div>\r\n </dx-data-grid>\r\n </div>\r\n </div>\r\n\r\n <!-- Bo\u015F / Yar\u0131m Kasa Popup -->\r\n <dx-popup\r\n [visible]=\"bosKasaPopupVisible\"\r\n (onHidden)=\"bosKasaPopupVisible = false\"\r\n [width]=\"380\"\r\n [height]=\"'auto'\"\r\n [showTitle]=\"true\"\r\n [title]=\"bosKasaMode === 'empty' ? 'Bo\u015F Kasa Getir' : 'Yar\u0131m Kasa Getir'\"\r\n [dragEnabled]=\"true\"\r\n [resizeEnabled]=\"false\"\r\n [showCloseButton]=\"true\"\r\n [closeOnOutsideClick]=\"false\"\r\n >\r\n <div *dxTemplate=\"let data of 'content'\" class=\"p-3\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\">\u0130stasyon No</label>\r\n <dx-number-box [(value)]=\"bosKasaStationId\" [min]=\"1\" [showSpinButtons]=\"true\"></dx-number-box>\r\n </div>\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\">Raf No (Shelf ID)</label>\r\n <dx-number-box [(value)]=\"bosKasaShelfId\" [min]=\"1\" [showSpinButtons]=\"true\"></dx-number-box>\r\n </div>\r\n <div class=\"mb-3\">\r\n <label class=\"form-label\">Kasa Adedi</label>\r\n <dx-number-box [(value)]=\"bosKasaBoxCount\" [min]=\"1\" [max]=\"50\" [showSpinButtons]=\"true\"></dx-number-box>\r\n </div>\r\n <div class=\"d-flex justify-content-end gap-2 mt-3\">\r\n <dx-button text=\"\u0130ptal\" (onClick)=\"bosKasaPopupVisible = false\" type=\"normal\"></dx-button>\r\n <dx-button\r\n [text]=\"bosKasaMode === 'empty' ? 'Bo\u015F Kasa G\u00F6nder' : 'Yar\u0131m Kasa G\u00F6nder'\"\r\n type=\"default\"\r\n (onClick)=\"onBosKasaGonder()\"\r\n ></dx-button>\r\n </div>\r\n </div>\r\n </dx-popup>\r\n\r\n</abp-page>\r\n", styles: [":host{display:block;max-width:100%;overflow-x:hidden}.orders-toolbar{background:#fff;border:1px solid #e0e0e0;border-radius:8px;padding:16px 20px;margin-bottom:16px;box-shadow:0 1px 3px #0000000f;max-width:100%;overflow:hidden}.toolbar-divider{border:none;border-top:1px solid #eee;margin:10px 0}.toolbar-row{display:flex;flex-wrap:wrap;align-items:center;gap:16px}.toolbar-group{display:flex;flex-direction:column;gap:4px}.toolbar-group--durum{margin-left:80px}.toolbar-group--depo{margin-left:auto}.toolbar-group label{font-size:11px;font-weight:600;color:#6c757d;text-transform:uppercase;letter-spacing:.5px}.toolbar-group select,.toolbar-group input[type=date]{height:36px;border:1px solid #ced4da;border-radius:6px;padding:0 10px;font-size:13px;background:#fff;transition:border-color .15s}.toolbar-group select:focus,.toolbar-group input[type=date]:focus{border-color:#556ee6;outline:none;box-shadow:0 0 0 2px #556ee626}.toolbar-group select{min-width:180px}.radio-group{display:flex;gap:12px;height:36px;align-items:center}.radio-group .form-check{margin:0;padding-left:22px}.radio-group .form-check-label{font-size:13px;cursor:pointer;white-space:nowrap}.status-group{display:flex;gap:10px;align-items:center}.status-chip{display:inline-flex;align-items:center;gap:6px;padding:4px 12px;border-radius:20px;font-size:12px;font-weight:500;cursor:pointer;border:1px solid transparent;transition:all .15s;-webkit-user-select:none;user-select:none}.status-chip.pending{background:#fff9e6;color:#c9a227;border-color:#ffe082}.status-chip.pending.active{background:#ffc107;color:#fff;border-color:#ffc107}.status-chip.processing{background:#e8f0fe;color:#7aadf5;border-color:#a8c8f7}.status-chip.processing.active{background:#0d6efd;color:#fff;border-color:#0d6efd}.status-chip.awaiting{background:#e6f9fc;color:#6ec6d8;border-color:#a0e1ed}.status-chip.awaiting.active{background:#0dcaf0;color:#fff;border-color:#0dcaf0}.status-chip.completed{background:#e8f5e9;color:#6db680;border-color:#a5d6a7}.status-chip.completed.active{background:#198754;color:#fff;border-color:#198754}.status-chip.list-purchase{background:#eef0fa;color:#9aa1d4;border-color:#b3b9e6}.status-chip.list-purchase.active{background:#5c6bc0;color:#fff;border-color:#5c6bc0}.status-chip.list-distribution{background:#fce8ee;color:#e87a9e;border-color:#f0a3bb}.status-chip.list-distribution.active{background:#e91e63;color:#fff;border-color:#e91e63}.status-chip.list-warehouse{background:#e5f5f4;color:#6db5ab;border-color:#a0d4cd}.status-chip.list-warehouse.active{background:#009688;color:#fff;border-color:#009688}.action-group{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.action-input{width:140px;height:32px;border:1px solid #ced4da;border-radius:6px;padding:0 10px;font-size:13px}.action-input:focus{border-color:#556ee6;outline:none;box-shadow:0 0 0 2px #556ee626}.toolbar-separator{width:1px;height:28px;background:#dee2e6;align-self:center}.reservation-group{display:flex;align-items:center;gap:8px}.toolbar-actions{display:flex;gap:8px;margin-left:auto;align-items:center}.action-group .btn,.reservation-group .btn,.toolbar-actions .btn{display:inline-flex;align-items:center;gap:5px;font-size:12px;padding:5px 12px;border-radius:6px;font-weight:500;white-space:nowrap;transition:all .15s}.btn-action-primary{background:#556ee6;color:#fff;border:none}.btn-action-primary:hover{background:#4458cb;color:#fff}.btn-action-success{background:#34c38f;color:#fff;border:none}.btn-action-success:hover{background:#2ca67a;color:#fff}.btn-action-approve{background:#6f42c1;color:#fff;border:none}.btn-action-approve:hover{background:#5a32a3;color:#fff}.btn-action-warning{background:#f1b44c;color:#fff;border:none}.btn-action-warning:hover{background:#d9a043;color:#fff}.btn-action-info{background:#50a5f1;color:#fff;border:none}.btn-action-info:hover{background:#3d8ed8;color:#fff}.btn-action-danger{background:#f46a6a;color:#fff;border:none}.btn-action-danger:hover{background:#e05555;color:#fff}.btn-action-outline{background:transparent;color:#556ee6;border:1px solid #556ee6}.btn-action-outline:hover{background:#556ee6;color:#fff}.btn-action-secondary{background:#74788d;color:#fff;border:none}.btn-action-secondary:hover{background:#5f6373;color:#fff}.btn-action-reservation{background:#7c4dff;color:#fff;border:none}.btn-action-reservation:hover{background:#651fff;color:#fff}.btn-action-reservation:disabled{background:#b39ddb;cursor:not-allowed}.btn-action-reservation-cancel{background:#ff6e40;color:#fff;border:none}.btn-action-reservation-cancel:hover{background:#ff3d00;color:#fff}.btn-action-reservation-cancel:disabled{background:#ffab91;cursor:not-allowed}.btn-action-reservation-bulk{background:#536dfe;color:#fff;border:none}.btn-action-reservation-bulk:hover{background:#304ffe;color:#fff}.btn-action-reservation-bulk:disabled{background:#8c9eff;cursor:not-allowed}.btn-action-reservation-bulk-cancel{background:#ff5252;color:#fff;border:none}.btn-action-reservation-bulk-cancel:hover{background:#ff1744;color:#fff}.btn-action-reservation-bulk-cancel:disabled{background:#ff8a80;cursor:not-allowed}.action-divider{width:1px;height:24px;background:#dee2e6;display:inline-block;vertical-align:middle;margin:0 4px}.orders-grid-card{border-radius:8px;border:1px solid #e0e0e0;box-shadow:0 1px 3px #0000000f;overflow:hidden;max-width:100%}.orders-grid-card .card-body{padding:12px;overflow-x:auto}::ng-deep .order-row-error{background-color:#fdecea!important}::ng-deep .order-row-error:hover{background-color:#fbd9d5!important}::ng-deep .error-message-cell{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#b02a37;font-size:12px}@media (max-width: 1200px){.toolbar-actions{margin-left:0}.radio-group{flex-wrap:wrap;height:auto}.action-group{width:100%}.toolbar-separator{display:none}}@media (max-width: 992px){.toolbar-group--durum,.toolbar-group--depo{margin-left:0}.toolbar-row{gap:12px}.toolbar-group select{min-width:0}.status-group{flex-wrap:wrap;gap:6px}.reservation-group{flex-wrap:wrap}}@media (max-width: 768px){.orders-toolbar{padding:12px}.toolbar-row{flex-direction:column;align-items:stretch;gap:10px}.toolbar-group,.toolbar-group select,.toolbar-group input[type=date]{width:100%}.radio-group{flex-direction:column;align-items:flex-start;gap:8px}.status-group{flex-wrap:wrap;gap:6px}.status-chip{font-size:11px;padding:3px 10px}.action-group,.reservation-group,.toolbar-actions{flex-wrap:wrap;gap:6px}.action-divider{display:none}.action-input{width:100%}.action-group .btn,.reservation-group .btn,.toolbar-actions .btn{font-size:11px;padding:5px 10px}}@media (max-width: 480px){.action-group .btn,.reservation-group .btn,.toolbar-actions .btn{flex:1 1 calc(50% - 6px);justify-content:center}.status-chip{font-size:10px;padding:2px 8px}}\n"] }]
441
517
  }], ctorParameters: function () { return [{ type: i1.OrderService }, { type: i2.WarehouseService }, { type: i3.ToasterService }, { type: i3.ConfirmationService }]; }, propDecorators: { dxOrdersInstance: [{
442
518
  type: ViewChild,
443
519
  args: ['dxOrdersInstance', { static: false }]
444
520
  }] } });
445
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JkZXJzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LXdhcmVob3VzZS9zcmMvbGliL2NvbXBvbmVudHMvb3JkZXJzL29yZGVycy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC13YXJlaG91c2Uvc3JjL2xpYi9jb21wb25lbnRzL29yZGVycy9vcmRlcnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFNN0QsT0FBTyxVQUFVLE1BQU0sNkJBQTZCLENBQUM7Ozs7Ozs7Ozs7OztBQU9yRCxNQUFNLE9BQU8sZUFBZTtJQW1DeEIsWUFDcUIsWUFBMEIsRUFDMUIsZ0JBQWtDLEVBQ2xDLGNBQThCLEVBQzlCLG1CQUF3QztRQUh4QyxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5Qix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBbkM3RCxtQkFBYyxHQUFrQixFQUFFLENBQUM7UUFFbkMsa0JBQWtCO1FBQ2xCLHNCQUFpQixHQUFXLEVBQUUsQ0FBQztRQUMvQixpQkFBWSxHQUFXLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNqRSxtQkFBYyxHQUFrQixJQUFJLENBQUMsQ0FBQywrQkFBK0I7UUFDckUsaUJBQVksR0FBa0IsSUFBSSxDQUFDLENBQUMseUZBQXlGO1FBRTVHLGNBQVMsR0FBOEI7WUFDcEQsU0FBUyxFQUFFLEdBQUc7WUFDZCxZQUFZLEVBQUUsR0FBRztZQUNqQixTQUFTLEVBQUUsR0FBRztZQUNkLFVBQVUsRUFBRSxH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Q0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLFlBQVksQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7cUJBQ3hHLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBRXhCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQzFDO0lBQ0wsQ0FBQztJQUVELFNBQVM7UUFDTCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDO0lBQy9DLENBQUM7SUFFRCxhQUFhO1FBQ1Qsa0JBQWtCO0lBQ3RCLENBQUM7O0FBbEN1Qix3Q0FBd0IsR0FBRyxDQUFDLENBQUM7NEdBNWQ1QyxlQUFlO2dHQUFmLGVBQWUsd0tDYjVCLGszbEJBZ2NBOzJGRG5iYSxlQUFlO2tCQUwzQixTQUFTOytCQUNJLFlBQVk7aU1BSzRCLGdCQUFnQjtzQkFBakUsU0FBUzt1QkFBQyxrQkFBa0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IER4RGF0YUdyaWRDb21wb25lbnQgfSBmcm9tICdkZXZleHRyZW1lLWFuZ3VsYXInO1xyXG5pbXBvcnQgeyBPcmRlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9oaXQtcHJveHkvb3JkZXJzL29yZGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTYXBPcmRlckR0bywgUmVzZXJ2YXRpb25SZXN1bHREdG8gfSBmcm9tICcuLi8uLi9oaXQtcHJveHkvb3JkZXJzL21vZGVsJztcclxuaW1wb3J0IHsgV2FyZWhvdXNlU2VydmljZSwgV2FyZWhvdXNlRHRvIH0gZnJvbSAnLi4vLi4vaGl0LXByb3h5L3dhcmVob3VzZS93YXJlaG91c2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbmZpcm1hdGlvblNlcnZpY2UsIFRvYXN0ZXJTZXJ2aWNlIH0gZnJvbSAnQGFicC9uZy50aGVtZS5zaGFyZWQnO1xyXG5pbXBvcnQgRGF0YVNvdXJjZSBmcm9tICdkZXZleHRyZW1lL2RhdGEvZGF0YV9zb3VyY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2xpYi1vcmRlcnMnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL29yZGVycy5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9vcmRlcnMuY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIE9yZGVyc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgICBAVmlld0NoaWxkKCdkeE9yZGVyc0luc3RhbmNlJywgeyBzdGF0aWM6IGZhbHNlIH0pIGR4T3JkZXJzSW5zdGFuY2U6IER4RGF0YUdyaWRDb21wb25lbnQ7XHJcblxyXG4gICAgb3JkZXJzRGF0YVNvdXJjZTogRGF0YVNvdXJjZTtcclxuICAgIHNlbGVjdGVkT3JkZXJzOiBTYXBPcmRlckR0b1tdID0gW107XHJcblxyXG4gICAgLy8gVG9vbGJhciBmaWx0ZXJzXHJcbiAgICBzZWxlY3RlZFdhcmVob3VzZTogc3RyaW5nID0gJyc7XHJcbiAgICBzZWxlY3RlZERhdGU6IHN0cmluZyA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zdWJzdHJpbmcoMCwgMTApO1xyXG4gICAgYWN0aXZlTGlzdFR5cGU6IHN0cmluZyB8IG51bGwgPSBudWxsOyAvLyBudWxsID0gdMO8bcO8LCAnMScgfCAnMicgfCAnMydcclxuICAgIGFjdGl2ZVN0YXR1czogc3RyaW5nIHwgbnVsbCA9IG51bGw7IC8vIG51bGwgPSB0w7xtw7wsICdiZWtsZW1lZGUnICgwKSB8ICdvbmF5QmVrbGl5b3InICgxKSB8ICdpc2xlbml5b3InICgyKSB8ICd0YW1hbWxhbmRpJyAoMylcclxuXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHN0YXR1c01hcDogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcclxuICAgICAgICBiZWtsZW1lZGU6ICcwJyxcclxuICAgICAgICBvbmF5QmVrbGl5b3I6ICcxJyxcclxuICAgICAgICBpc2xlbml5b3I6ICcyJyxcclxuICAgICAgICB0YW1hbWxhbmRpOiAnMycsXHJcbiAgICB9O1xyXG5cclxuICAgIC8vIEFkZGl0aW9uYWwgaW5wdXRzXHJcbiAgICBjdXN0b21JbnB1dFZhbHVlOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgICB3YXJlaG91c2VzOiBXYXJlaG91c2VEdG9bXSA9IFtdO1xyXG4gICAgaXNMb2FkaW5nV2FyZWhvdXNlczogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIGlzR29yZXZCYXNsYXRMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBpc1Jlc2VydmF0aW9uTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgaXNCZWVDZWxsTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIGJvc0thc2FQb3B1cFZpc2libGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGJvc0thc2FTdGF0aW9uSWQ6IG51bWJlciA9IDE7XHJcbiAgICBib3NLYXNhU2hlbGZJZDogbnVtYmVyID0gMTtcclxuICAgIGJvc0thc2FCb3hDb3VudDogbnVtYmVyID0gNTtcclxuICAgIGJvc0thc2FNb2RlOiAnZW1wdHknIHwgJ2hhbGYnID0gJ2VtcHR5JztcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IG9yZGVyU2VydmljZTogT3JkZXJTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgd2FyZWhvdXNlU2VydmljZTogV2FyZWhvdXNlU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHRvYXN0ZXJTZXJ2aWNlOiBUb2FzdGVyU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpcm1hdGlvblNlcnZpY2U6IENvbmZpcm1hdGlvblNlcnZpY2VcclxuICAgICkge31cclxuXHJcbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmxvYWRXYXJlaG91c2VzKCk7XHJcbiAgICAgICAgdGhpcy5zZXR1cERhdGFTb3VyY2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvYWRXYXJlaG91c2VzKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaXNMb2FkaW5nV2FyZWhvdXNlcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy53YXJlaG91c2VTZXJ2aWNlLmdldFNtYXJ0V2FyZWhvdXNlcygpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgIG5leHQ6IChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLndhcmVob3VzZXMgPSBkYXRhIHx8IFtdO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMud2FyZWhvdXNlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFdhcmVob3VzZSA9IHRoaXMud2FyZWhvdXNlc1swXS5XaHNDb2RlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmdXYXJlaG91c2VzID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdEZXBvbGFyIHnDvGtsZW5lbWVkaTonLCBlcnIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdGVyU2VydmljZS5lcnJvcignRGVwb2xhciB5w7xrbGVuZW1lZGkuJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzTG9hZGluZ1dhcmVob3VzZXMgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2V0dXBEYXRhU291cmNlKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMub3JkZXJzRGF0YVNvdXJjZSA9IG5ldyBEYXRhU291cmNlKHtcclxuICAgICAgICAgICAgc3RvcmU6IHRoaXMub3JkZXJTZXJ2aWNlLmxvYWRPcmRlcnMsXHJcbiAgICAgICAgICAgIGZpbHRlcjogdGhpcy5idWlsZENvbWJpbmVkRmlsdGVyKCksXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBidWlsZENvbWJpbmVkRmlsdGVyKCk6IGFueSB7XHJcbiAgICAgICAgY29uc3Qgc3RhdHVzRmlsdGVyID0gdGhpcy5idWlsZFN0YXR1c0ZpbHRlcigpO1xyXG4gICAgICAgIGNvbnN0IGxpc3RUeXBlRmlsdGVyID0gdGhpcy5idWlsZExpc3RUeXBlRmlsdGVyKCk7XHJcblxyXG4gICAgICAgIGlmIChzdGF0dXNGaWx0ZXIgJiYgbGlzdFR5cGVGaWx0ZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFtzdGF0dXNGaWx0ZXIsICdhbmQnLCBsaXN0VHlwZUZpbHRlcl07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzdGF0dXNGaWx0ZXIgfHwgbGlzdFR5cGVGaWx0ZXIgfHwgbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGJ1aWxkTGlzdFR5cGVGaWx0ZXIoKTogYW55IHtcclxuICAgICAgICBpZiAoIXRoaXMuYWN0aXZlTGlzdFR5cGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBbJ1VfU1dPcmRlclR5cGUnLCAnPScsIHRoaXMuYWN0aXZlTGlzdFR5cGVdO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYnVpbGRTdGF0dXNGaWx0ZXIoKTogYW55IHtcclxuICAgICAgICBpZiAoIXRoaXMuYWN0aXZlU3RhdHVzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlU3RhdHVzID09PSAnYmVrbGVtZWRlJykge1xyXG4gICAgICAgICAgICAvLyBTQVAnZGFuIGdlbGVuIFVfU1dEdXJ1bSBudWxsL2JvxZ8gZGXEn2VybGVyIGJhY2tlbmQnZGUgJzAnIG9sYXJhayBub3JtYWxpemUgZWRpbGl5b3JcclxuICAgICAgICAgICAgcmV0dXJuIFsnVV9TV0R1cnVtJywgJz0nLCAnMCddO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIFsnVV9TV0R1cnVtJywgJz0nLCB0aGlzLnN0YXR1c01hcFt0aGlzLmFjdGl2ZVN0YXR1c11dO1xyXG4gICAgfVxyXG5cclxuICAgIHRvZ2dsZVN0YXR1cyhrZXk6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuYWN0aXZlU3RhdHVzID0gdGhpcy5hY3RpdmVTdGF0dXMgPT09IGtleSA/IG51bGwgOiBrZXk7XHJcbiAgICAgICAgdGhpcy5hcHBseUZpbHRlcnMoKTtcclxuICAgIH1cclxuXHJcbiAgICB0b2dnbGVMaXN0VHlwZShrZXk6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuYWN0aXZlTGlzdFR5cGUgPSB0aGlzLmFjdGl2ZUxpc3RUeXBlID09PSBrZXkgPyBudWxsIDoga2V5O1xyXG4gICAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhcHBseUZpbHRlcnMoKTogdm9pZCB7XHJcbiAgICAgICAgLy8gRGVwbyBUYWxlcGxlcmkgZGUgZGFoaWwsIMO8w6cgY2hpcCBkZSBheW7EsSBTQVAgc2lwYXJpxZ9sZXJpIGtheW5hxJ/EsW7EsSAoVV9TV09yZGVyVHlwZSBmaWx0cmVzaXlsZSkga3VsbGFuxLFyLlxyXG4gICAgICAgIC8vIERhdGFTb3VyY2UgeWVuaWRlbiBvbHXFn3R1cnVsdXAgZ3JpZCdlIGF0YW7EsXlvcjsgbWV2Y3V0IERhdGFTb3VyY2Ugw7x6ZXJpbmRlIC5maWx0ZXIoKSsucmVsb2FkKClcclxuICAgICAgICAvLyDDp2HEn8Sxcm1hayBncmlkJ2UgeWFuc8SxbcSxeW9yZHUgw6fDvG5rw7wgQW5ndWxhciBiaW5kaW5nIHNhZGVjZSByZWZlcmFucyBkZcSfacWfaW5jZSB0ZXRpa2xlbml5b3IuXHJcbiAgICAgICAgdGhpcy5vcmRlcnNEYXRhU291cmNlID0gbmV3IERhdGFTb3VyY2Uoe1xyXG4gICAgICAgICAgICBzdG9yZTogdGhpcy5vcmRlclNlcnZpY2UubG9hZE9yZGVycyxcclxuICAgICAgICAgICAgZmlsdGVyOiB0aGlzLmJ1aWxkQ29tYmluZWRGaWx0ZXIoKSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBvblNlbGVjdGlvbkNoYW5nZWQoZTogYW55KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZE9yZGVycyA9IGUuc2VsZWN0ZWRSb3dzRGF0YSB8fCBbXTtcclxuICAgIH1cclxuXHJcbiAgICBvblJvd0NsaWNrKGU6IGFueSk6IHZvaWQge1xyXG4gICAgICAgIC8vIEXEn2VyIGV4cGFuZC9jb2xsYXBzZSBpY29uJ3VuYSB2ZXlhIGNoZWNrYm94J2EgdMSxa2xhbmTEsXlzYSwgRGV2RXh0cmVtZSdpbiBrZW5kaSBkYXZyYW7EscWfxLFuxLEga3VsbGFuXHJcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZS5ldmVudD8udGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICAgIGlmICh0YXJnZXQ/LmNsb3Nlc3QoJy5keC1jb21tYW5kLWV4cGFuZCcpIHx8IHRhcmdldD8uY2xvc2VzdCgnLmR4LW1hc3Rlci1kZXRhaWwtY2VsbCcpIHx8IHRhcmdldD8uY2xvc2VzdCgnLmR4LXNlbGVjdC1jaGVja2JveCcpIHx8IHRhcmdldD8uY2xvc2VzdCgnLmR4LWNvbW1hbmQtc2VsZWN0JykpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGUucm93VHlwZSA9PT0gJ2RhdGEnKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlzRXhwYW5kZWQgPSBlLmNvbXBvbmVudC5pc1Jvd0V4cGFuZGVkKGUua2V5KTtcclxuICAgICAgICAgICAgaWYgKGlzRXhwYW5kZWQpIHtcclxuICAgICAgICAgICAgICAgIGUuY29tcG9uZW50LmNvbGxhcHNlUm93KGUua2V5KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGUuY29tcG9uZW50LmV4cGFuZFJvdyhlLmtleSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25Sb3dQcmVwYXJlZChlOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICBpZiAoZS5yb3dUeXBlID09PSAnZGF0YScgJiYgZS5kYXRhPy5VX1NXSXNFcnJvciA9PT0gJ1knKSB7XHJcbiAgICAgICAgICAgIGUucm93RWxlbWVudC5jbGFzc0xpc3QuYWRkKCdvcmRlci1yb3ctZXJyb3InKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25Hb3JldkJhc2xhdCgpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRPcmRlcnMgfHwgdGhpcy5zZWxlY3RlZE9yZGVycy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdGVyU2VydmljZS53YXJuKCdMw7x0ZmVuIGVuIGF6IGJpciBzaXBhcmnFnyBzZcOnaW5pei4nKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gVmFsaWRhdGU6IFVfU1dEdXJ1bSBtdXN0IGJlIFwiMVwiIChPbmF5IEJla2xpeW9yKVxyXG4gICAgICAgIGNvbnN0IGludmFsaWRTdGF0dXMgPSB0aGlzLnNlbGVjdGVkT3JkZXJzLmZpbHRlcihcclxuICAgICAgICAgICAgbyA9PiBvLlVfU1dEdXJ1bSAhPT0gJzEnXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoaW52YWxpZFN0YXR1cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGRvY051bXMgPSBpbnZhbGlkU3RhdHVzLm1hcChvID0+IG8uRG9jTnVtKS5qb2luKCcsICcpO1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlLmVycm9yKFxyXG4gICAgICAgICAgICAgICAgYMWedSBzaXBhcmnFn2xlcmluIGR1cnVtdSBcIk9uYXkgQmVrbGl5b3JcIiBkZcSfaWw6ICR7ZG9jTnVtc30uIFNhZGVjZSBlxZ9sZW1lc2kgeWFwxLFsbcSxxZ8gc2lwYXJpxZ9sZXIgacOnaW4gZ8O2cmV2IGJhxZ9sYXTEsWxhYmlsaXIuYFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBWYWxpZGF0ZTogVV9TV1N0YXRpb25Db2RlIG11c3QgYmUgZmlsbGVkXHJcbiAgICAgICAgY29uc3Qgbm9TdGF0aW9uID0gdGhpcy5zZWxlY3RlZE9yZGVycy5maWx0ZXIoXHJcbiAgICAgICAgICAgIG8gPT4gIW8uVV9TV1N0YXRpb25Db2RlIHx8IG8uVV9TV1N0YXRpb25Db2RlLnRyaW0oKSA9PT0gJydcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChub1N0YXRpb24ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBjb25zdCBkb2NOdW1zID0gbm9TdGF0aW9uLm1hcChvID0+IG8uRG9jTnVtKS5qb2luKCcsICcpO1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlLmVycm9yKFxyXG4gICAgICAgICAgICAgICAgYMWedSBzaXBhcmnFn2xlcmluIGlzdGFzeW9uIGJpbGdpc2kgYm/FnzogJHtkb2NOdW1zfS4gxLBzdGFzeW9uIGFsYW7EsSBkb2x1IG9sbWFsxLFkxLFyLmBcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgZG9jRW50cmllcyA9IHRoaXMuc2VsZWN0ZWRPcmRlcnMubWFwKG8gPT4gby5Eb2NFbnRyeSk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNHb3JldkJhc2xhdExvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMub3JkZXJTZXJ2aWNlLnN0YXJ0VGFzayhkb2NFbnRyaWVzKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICBuZXh0OiAocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlLnN1Y2Nlc3MocmVzdWx0KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNHb3JldkJhc2xhdExvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZHhPcmRlcnNJbnN0YW5jZT8uaW5zdGFuY2U/LnJlZnJlc2goKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZHhPcmRlcnNJbnN0YW5jZT8uaW5zdGFuY2U/LmNsZWFyU2VsZWN0aW9uKCk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGVycm9yPy5lcnJvcj8uZXJyb3I/Lm1lc3NhZ2UgfHwgJ0fDtnJldiBiYcWfbGF0xLFsxLFya2VuIGJpciBoYXRhIG9sdcWfdHUuJztcclxuICAgICAgICAgICAgICAgIHRoaXMudG9hc3RlclNlcnZpY2UuZXJyb3IoZXJyb3JNZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNHb3JldkJhc2xhdExvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBHw7ZyZXZpIFRhbWFtbGE6IMSwxZ9sZW5peW9yICgyKSBkdXJ1bXVuZGFraSBzaXBhcmnFn2xlcmkgQmVlQ2VsbCBnw7ZyZXZpIGJpdG1pxZ9zZSBkb8SfcnVkYW5cclxuICAgIC8vIFRhbWFtbGFuZMSxJ3lhICgzKSBnw7Z0w7xyw7xyIOKAlCBlc2tpIFwiR8O2cmV2IFRhbWFtbGFcIiArIFwiT25heSBWZXJcIiBpa2kgYWTEsW3EsSwgZXNraSBzaXN0ZW1pblxyXG4gICAgLy8gdGVrLWFrc2l5b24gZGF2cmFuxLHFn8SxbmEgdXlndW4gxZ9la2lsZGUgdGVrIGJ1dG9uZGEgYmlybGXFn3RpcmlyLlxyXG4gICAgb25PbmF5VmVyKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICghdGhpcy5zZWxlY3RlZE9yZGVycyB8fCB0aGlzLnNlbGVjdGVkT3JkZXJzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlLndhcm4oJ0zDvHRmZW4gZW4gYXogYmlyIHNpcGFyacWfIHNlw6dpbml6LicpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBWYWxpZGF0ZTogVV9TV0R1cnVtIFwiMlwiICjEsMWfbGVuaXlvcikgb2xtYWzEsVxyXG4gICAgICAgIGNvbnN0IGludmFsaWRTdGF0dXMgPSB0aGlzLnNlbGVjdGVkT3JkZXJzLmZpbHRlcihcclxuICAgICAgICAgICAgbyA9PiAhby5VX1NXRHVydW0gfHwgby5VX1NXRHVydW0gIT09ICcyJ1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKGludmFsaWRTdGF0dXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBjb25zdCBkb2NOdW1zID0gaW52YWxpZFN0YXR1cy5tYXAobyA9PiBvLkRvY051bSkuam9pbignLCAnKTtcclxuICAgICAgICAgICAgdGhpcy50b2FzdGVyU2VydmljZS5lcnJvcihcclxuICAgICAgICAgICAgICAgIGDFnnUgc2lwYXJpxZ9sZXJpbiBkdXJ1bXUgXCLEsMWfbGVuaXlvclwiIGRlxJ9pbDogJHtkb2NOdW1zfS4gU2FkZWNlIGJ1IGR1cnVtZGFraSBzaXBhcmnFn2xlciB0YW1hbWxhbmFiaWxpci5gXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGRvY0VudHJpZXMgPSB0aGlzLnNlbGVjdGVkT3JkZXJzLm1hcChvID0+IG8uRG9jRW50cnkpO1xyXG5cclxuICAgICAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2VcclxuICAgICAgICAgICAgLndhcm4oJ1Nlw6dpbGkgc2lwYXJpxZ9sZXIgdGFtYW1sYW5hY2FrLiBTdG9rIG5ha2xpIHZlIGZhdHVyYSBvbHXFn3R1cnVsYWNha3TEsXIuIEVtaW4gbWlzaW5pej8nLCAnR8O2cmV2aSBUYW1hbWxhJylcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgoc3RhdHVzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc3RhdHVzID09PSAnY29uZmlybScpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9yZGVyU2VydmljZS5hcHByb3ZlVGFzayhkb2NFbnRyaWVzLCB0aGlzLmFjdGl2ZUxpc3RUeXBlKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0OiAocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlLnN1Y2Nlc3MocmVzdWx0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZHhPcmRlcnNJbnN0YW5jZT8uaW5zdGFuY2U/LnJlZnJlc2goKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZHhPcmRlcnNJbnN0YW5jZT8uaW5zdGFuY2U/LmNsZWFyU2VsZWN0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGVycm9yPy5lcnJvcj8uZXJyb3I/Lm1lc3NhZ2UgfHwgJ09uYXkgdmVyaWxpcmtlbiBiaXIgaGF0YSBvbHXFn3R1Lic7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlLmVycm9yKGVycm9yTWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIOKUgOKUgCBTaXBhcmnFnyhsZXIpaSBzZXZraXlhdGEgc29rbWFkYW4gZG/En3J1ZGFuIGthcGF0IOKUgOKUgFxyXG4gICAgb25TaXBhcmlzS2FwYXQoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkT3JkZXJzIHx8IHRoaXMuc2VsZWN0ZWRPcmRlcnMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RlclNlcnZpY2Uud2FybignTMO8dGZlbiBlbiBheiBiaXIgc2lwYXJpxZ8gc2XDp2luaXouJyk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFwixLDFn2xlbml5b3JcIiAoYWt0aWYgQmVlQ2VsbCBnw7ZyZXZpKSBkdXJ1bXVuZGFraSBzaXBhcmnFn2xlciBrYXBhdMSxbGFtYXpcclxuICAgICAgICBjb25zdCBpbnZhbGlkU3RhdHVzID0gdGhpcy5zZWxlY3RlZE9yZGVycy5maWx0ZXIobyA9PiBvLlVfU1dEdXJ1bSA9PT0gJzInKTtcclxuICAgICAgICBpZiAoaW52YWxpZFN0YXR1cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGRvY051bXMgPSBpbnZhbGlkU3RhdHVzLm1hcChvID0+IG8uRG9jTnVtKS5qb2luKCcsICcpO1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlLmVycm9yKFxyXG4gICAgICAgICAgICAgICAgYMWedSBzaXBhcmnFn2xlciBcIsSwxZ9sZW5peW9yXCIgZHVydW11bmRhIChha3RpZiBnw7ZyZXYgdmFyKTogJHtkb2NOdW1zfS4gw5ZuY2UgZ8O2cmV2aSB0YW1hbWxhecSxbiB5YSBkYSBCZWVDZWxsJ2RlIGlwdGFsIGVkaW4uYFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBkb2NFbnRyaWVzID0gdGhpcy5zZWxlY3RlZE9yZGVycy5tYXAobyA9PiBvLkRvY0VudHJ5KTtcclxuICAgICAgICBjb25zdCBkb2NOdW1zID0gdGhpcy5zZWxlY3RlZE9yZGVycy5tYXAobyA9PiBvLkRvY051bSkuam9pbignLCAnKTtcclxuXHJcbiAgICAgICAgdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlXHJcbiAgICAgICAgICAgIC53YXJuKFxyXG4gICAgICAgICAgICAgICAgYCR7ZG9jTnVtc30gbnVtYXJhbMSxIHNpcGFyacWfbGVyIHNldmtpeWF0YSBzb2t1bG1hZGFuIGRvxJ9ydWRhbiBcIlRhbWFtbGFuZMSxXCIgb2xhcmFrIGthcGF0xLFsYWNhay4gYCArXHJcbiAgICAgICAgICAgICAgICAgICAgJ0hpw6diaXIgc3RvayBoYXJla2V0aS9pcnNhbGl5ZS9mYXR1cmEgb2x1xZ90dXJ1bG1heWFjYWsuIEVtaW4gbWlzaW5pej8nLFxyXG4gICAgICAgICAgICAgICAgJ1NpcGFyacWfIEthcGF0J1xyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHN0YXR1cykgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHN0YXR1cyA9PT0gJ2NvbmZpcm0nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcmRlclNlcnZpY2UuY2xvc2VPcmRlcihkb2NFbnRyaWVzKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0OiAocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlLnN1Y2Nlc3MocmVzdWx0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZHhPcmRlcnNJbnN0YW5jZT8uaW5zdGFuY2U/LnJlZnJlc2goKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZHhPcmRlcnNJbnN0YW5jZT8uaW5zdGFuY2U/LmNsZWFyU2VsZWN0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGVycm9yPy5lcnJvcj8uZXJyb3I/Lm1lc3NhZ2UgfHwgJ1NpcGFyacWfIGthcGF0xLFsxLFya2VuIGJpciBoYXRhIG9sdcWfdHUuJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3RlclNlcnZpY2UuZXJyb3IoZXJyb3JNZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25Cb3NLYXNhR2V0aXIoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5ib3NLYXNhTW9kZSA9ICdlbXB0eSc7XHJcbiAgICAgICAgdGhpcy5ib3NLYXNhUG9wdXBWaXNpYmxlID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBvbllhcmltS2FzYSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmJvc0thc2FNb2RlID0gJ2hhbGYnO1xyXG4gICAgICAgIHRoaXMuYm9zS2FzYVBvcHVwVmlzaWJsZSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgb25Cb3NLYXNhR29uZGVyKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuYm9zS2FzYVBvcHVwVmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaXNCZWVDZWxsTG9hZGluZyA9IHRydWU7XHJcblxyXG4gICAgICAgIGNvbnN0IGNhbGwgPSB0aGlzLmJvc0thc2FNb2RlID09PSAnZW1wdHknXHJcbiAgICAgICAgICAgID8gdGhpcy5vcmRlclNlcnZpY2UuZ2V0RW1wdHlCb3hlcyh0aGlzLmJvc0thc2FTdGF0aW9uSWQsIHRoaXMuYm9zS2FzYVNoZWxmSWQsIHRoaXMuYm9zS2FzYUJveENvdW50LCB0aGlzLnNlbGVjdGVkV2FyZWhvdXNlKVxyXG4gICAgICAgICAgICA6IHRoaXMub3JkZXJTZXJ2aWNlLmdldEhhbGZCb3hlcyh0aGlzLmJvc0thc2FTdGF0aW9uSWQsIHRoaXMuYm9zS2FzYVNoZWxmSWQsIHRoaXMuYm9zS2FzYUJveENvdW50LCB0aGlzLnNlbGVjdGVkV2FyZWhvdXNlKTtcclxuXHJcbiAgICAgICAgY2FsbC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICBuZXh0OiAocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlLnN1Y2Nlc3MocmVzdWx0KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNCZWVDZWxsTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlcnJvcj8uZXJyb3I/LmVycm9yPy5tZXNzYWdlIHx8ICdCZWVDZWxsIGfDtnJldmkgb2x1xZ90dXJ1bHVya2VuIGhhdGEgb2x1xZ90dS4nO1xyXG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdGVyU2VydmljZS5lcnJvcihlcnJvck1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0JlZUNlbGxMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25EdXJ1bUd1bmNlbGxlKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICghdGhpcy5zZWxlY3RlZE9yZGVycyB8fCB0aGlzLnNlbGVjdGVkT3JkZXJzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlLndhcm4oJ0zDvHRmZW4gZW4gYXogYmlyIHNpcGFyacWfIHNlw6dpbml6LicpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBkb2NFbnRyaWVzID0gdGhpcy5zZWxlY3RlZE9yZGVycy5tYXAobyA9PiBvLkRvY0VudHJ5KTtcclxuICAgICAgICB0aGlzLmlzQmVlQ2VsbExvYWRpbmcgPSB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLm9yZGVyU2VydmljZS51cGRhdGVUYXNrU3RhdHVzKGRvY0VudHJpZXMpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgIG5leHQ6IChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMudG9hc3RlclNlcnZpY2Uuc3VjY2VzcyhyZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0JlZUNlbGxMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmR4T3JkZXJzSW5zdGFuY2U/Lmluc3RhbmNlPy5yZWZyZXNoKCk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGVycm9yPy5lcnJvcj8uZXJyb3I/Lm1lc3NhZ2UgfHwgJ0R1cnVtIGfDvG5jZWxsZW5pcmtlbiBoYXRhIG9sdcWfdHUuJztcclxuICAgICAgICAgICAgICAgIHRoaXMudG9hc3RlclNlcnZpY2UuZXJyb3IoZXJyb3JNZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNCZWVDZWxsTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIOKUgOKUgCBTZcOnaWxpIHNpcGFyacWfbGVyIGnDp2luIHJlemVydmFzeW9uIHlhcCDilIDilIBcclxuICAgIG9uUmV6ZXJ2YXN5b25ZYXAoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkT3JkZXJzIHx8IHRoaXMuc2VsZWN0ZWRPcmRlcnMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RlclNlcnZpY2Uud2FybignTMO8dGZlbiBlbiBheiBiaXIgc2lwYXJpxZ8gc2XDp2luaXouJyk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5zZWxlY3RlZFdhcmVob3VzZSkge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlLndhcm4oJ0zDvHRmZW4gYmlyIGRlcG8gc2XDp2luaXouJyk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFNhZGVjZSBCZWtsZW1lZGUgKDApIHNpcGFyacWfbGVyIGnDp2luIHJlemVydmFzeW9uIHlhcMSxbGFiaWxpclxyXG4gICAgICAgIGNvbnN0IGludmFsaWRTdGF0dXMgPSB0aGlzLnNlbGVjdGVkT3JkZXJzLmZpbHRlcihcclxuICAgICAgICAgICAgbyA9PiBvLlVfU1dEdXJ1bSAmJiBvLlVfU1dEdXJ1bSAhPT0gJzAnXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoaW52YWxpZFN0YXR1cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGRvY051bXMgPSBpbnZhbGlkU3RhdHVzLm1hcChvID0+IG8uRG9jTnVtKS5qb2luKCcsICcpO1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlLmVycm9yKFxyXG4gICAgICAgICAgICAgICAgYMWedSBzaXBhcmnFn2xlcmluIGR1cnVtdSBcIkJla2xlbWVkZVwiIGRlxJ9pbDogJHtkb2NOdW1zfS4gU2FkZWNlIGJla2xlbWVkZSBvbGFuIHNpcGFyacWfbGVyIGnDp2luIHJlemVydmFzeW9uIHlhcMSxbGFiaWxpci5gXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGRvY0VudHJpZXMgPSB0aGlzLnNlbGVjdGVkT3JkZXJzLm1hcChvID0+IG8uRG9jRW50cnkpO1xyXG4gICAgICAgIHRoaXMuaXNSZXNlcnZhdGlvbkxvYWRpbmcgPSB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLm9yZGVyU2VydmljZS5yZXNlcnZlT3JkZXJzKGRvY0VudHJpZXMsIHRoaXMuc2VsZWN0ZWRXYXJlaG91c2UpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgIG5leHQ6IChyZXN1bHQ6IFJlc2VydmF0aW9uUmVzdWx0RHRvKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVJlc2VydmF0aW9uUmVzdWx0KHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzUmVzZXJ2YXRpb25Mb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmR4T3JkZXJzSW5zdGFuY2U/Lmluc3RhbmNlPy5yZWZyZXNoKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmR4T3JkZXJzSW5zdGFuY2U/Lmluc3RhbmNlPy5jbGVhclNlbGVjdGlvbigpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlcnJvcj8uZXJyb3I/LmVycm9yPy5tZXNzYWdlIHx8ICdSZXplcnZhc3lvbiB5YXDEsWzEsXJrZW4gYmlyIGhhdGEgb2x1xZ90dS4nO1xyXG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdGVyU2VydmljZS5lcnJvcihlcnJvck1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1Jlc2VydmF0aW9uTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIOKUgOKUgCBTZcOnaWxpIHNpcGFyacWfbGVyaW4gcmV6ZXJ2YXN5b25sYXLEsW7EsSBzaWwg4pSA4pSAXHJcbiAgICBvblJlemVydmFzeW9uU2lsKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICghdGhpcy5zZWxlY3RlZE9yZGVycyB8fCB0aGlzLnNlbGVjdGVkT3JkZXJzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlLndhcm4oJ0zDvHRmZW4gZW4gYXogYmlyIHNpcGFyacWfIHNlw6dpbml6LicpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBkb2NFbnRyaWVzID0gdGhpcy5zZWxlY3RlZE9yZGVycy5tYXAobyA9PiBvLkRvY0VudHJ5KTtcclxuICAgICAgICBjb25zdCBkb2NOdW1zID0gdGhpcy5zZWxlY3RlZE9yZGVycy5tYXAobyA9PiBvLkRvY051bSkuam9pbignLCAnKTtcclxuXHJcbiAgICAgICAgdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlXHJcbiAgICAgICAgICAgIC53YXJuKGAke2RvY051bXN9IG51bWFyYWzEsSBzaXBhcmnFn2xlcmluIHJlemVydmFzeW9ubGFyxLEgaXB0YWwgZWRpbGVjZWt0aXIuIEVtaW4gbWlzaW5pej9gLCAnUmV6ZXJ2YXN5b24gxLBwdGFsJylcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgoc3RhdHVzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc3RhdHVzID09PSAnY29uZmlybScpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzUmVzZXJ2YXRpb25Mb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9yZGVyU2VydmljZS5jYW5jZWxSZXNlcnZhdGlvbnMoZG9jRW50cmllcykuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dDogKHJlc3VsdDogUmVzZXJ2YXRpb25SZXN1bHREdG8pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlUmVzZXJ2YXRpb25SZXN1bHQocmVzdWx0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNSZXNlcnZhdGlvbkxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZHhPcmRlcnNJbnN0YW5jZT8uaW5zdGFuY2U/LnJlZnJlc2goKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZHhPcmRlcnNJbnN0YW5jZT8uaW5zdGFuY2U/LmNsZWFyU2VsZWN0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGVycm9yPy5lcnJvcj8uZXJyb3I/Lm1lc3NhZ2UgfHwgJ1JlemVydmFzeW9uIGlwdGFsIGVkaWxpcmtlbiBiaXIgaGF0YSBvbHXFn3R1Lic7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlLmVycm9yKGVycm9yTWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzUmVzZXJ2YXRpb25Mb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIOKUgOKUgCBUb3BsdSByZXplcnZhc3lvbiB5YXAgKHTDvG0gdXlndW4gc2lwYXJpxZ9sZXIpIOKUgOKUgFxyXG4gICAgb25Ub3BsdVJlemVydmFzeW9uWWFwKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICghdGhpcy5zZWxlY3RlZFdhcmVob3VzZSkge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlLndhcm4oJ0zDvHRmZW4gYmlyIGRlcG8gc2XDp2luaXouJyk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFphdGVuIHJlemVydmFzeW9udSBvbGFuIHNpcGFyacWfbGVyIGnDp2luIGt1bGxhbsSxY8SxeWEgc2XDp2ltIHN1bjpcclxuICAgICAgICAvLyAgLSBcIlllbmlkZW4gSGVzYXBsYVwiIChjb25maXJtKSDihpIgbWV2Y3V0IHJlemVydmFzeW9ubGFyxLEgc2lsaXAgeWVuaWRlbiBrdXJhciAob3ZlcndyaXRlRXhpc3Rpbmc9dHJ1ZSlcclxuICAgICAgICAvLyAgLSBcIlNhZGVjZSBZZW5pIFNpcGFyacWfbGVyXCIgKHJlamVjdCkg4oaSIG1ldmN1dGxhcsSxIGtvcnVyLCB5YWxuxLF6Y2EgcmV6ZXJ2YXN5b25zdXpsYXLEsSBpxZ9sZXIgKGZhbHNlKVxyXG4gICAgICAgIC8vICAtIERpeWFsb8SfdSBrYXBhdG1hIChkaXNtaXNzKSDihpIgacWfbGVtaSBpcHRhbCBlZGVyXHJcbiAgICAgICAgdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlXHJcbiAgICAgICAgICAgIC53YXJuKFxyXG4gICAgICAgICAgICAgICAgJ1phdGVuIHJlemVydmFzeW9udSBvbGFuIHNpcGFyacWfbGVyIGnDp2luIG5lIHlhcMSxbHPEsW4/IFwiWWVuaWRlbiBIZXNhcGxhXCIgbWV2Y3V0IHJlemVydmFzeW9ubGFyxLEgc2lsaXAgeWVuaWRlbiBrdXJhcjsgJyArXHJcbiAgICAgICAgICAgICAgICAgICAgJ1wiU2FkZWNlIFllbmkgU2lwYXJpxZ9sZXJcIiBtZXZjdXRsYXLEsSBrb3J1ciB2ZSB5YWxuxLF6Y2EgcmV6ZXJ2YXN5b25zdXogc2lwYXJpxZ9sZXJpIGnFn2xlci4nLFxyXG4gICAgICAgICAgICAgICAgJ1RvcGx1IFJlemVydmFzeW9uJyxcclxuICAgICAgICAgICAgICAgIHsgeWVzVGV4dDogJ1llbmlkZW4gSGVzYXBsYScsIGNhbmNlbFRleHQ6ICdTYWRlY2UgWWVuaSBTaXBhcmnFn2xlcicsIGRpc21pc3NpYmxlOiB0cnVlIH1cclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChzdGF0dXMpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgPT09ICdkaXNtaXNzJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjsgLy8gaXB0YWxcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBvdmVyd3JpdGVFeGlzdGluZyA9IHN0YXR1cyA9PT0gJ2NvbmZpcm0nO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuaXNSZXNlcnZhdGlvbkxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vcmRlclNlcnZpY2UucmVzZXJ2ZUFsbE9yZGVycyh0aGlzLnNlbGVjdGVkV2FyZWhvdXNlLCB0aGlzLmFjdGl2ZUxpc3RUeXBlLCBvdmVyd3JpdGVFeGlzdGluZykuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICAgICAgICBuZXh0OiAocmVzdWx0OiBSZXNlcnZhdGlvblJlc3VsdER0bykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVJlc2VydmF0aW9uUmVzdWx0KHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNSZXNlcnZhdGlvbkxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5keE9yZGVyc0luc3RhbmNlPy5pbnN0YW5jZT8ucmVmcmVzaCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmR4T3JkZXJzSW5zdGFuY2U/Lmluc3RhbmNlPy5jbGVhclNlbGVjdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlcnJvcj8uZXJyb3I/LmVycm9yPy5tZXNzYWdlIHx8ICdUb3BsdSByZXplcnZhc3lvbiB5YXDEsWzEsXJrZW4gYmlyIGhhdGEgb2x1xZ90dS4nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlLmVycm9yKGVycm9yTWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNSZXNlcnZhdGlvbkxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIOKUgOKUgCBUb3BsdSByZXplcnZhc3lvbiBzaWwgKHTDvG0gYWt0aWYgcmV6ZXJ2YXN5b25sYXIpIOKUgOKUgFxyXG4gICAgb25UdW1SZXplcnZhc3lvbmxhcmlTaWwoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlXHJcbiAgICAgICAgICAgIC53YXJuKCdUw7xtIGFrdGlmIHJlemVydmFzeW9ubGFyIHNpbGluZWNla3Rpci4gRW1pbiBtaXNpbml6PycsICdUw7xtIFJlemVydmFzeW9ubGFyxLEgU2lsJylcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgoc3RhdHVzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc3RhdHVzID09PSAnY29uZmlybScpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzUmVzZXJ2YXRpb25Mb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9yZGVyU2VydmljZS5jYW5jZWxBbGxSZXNlcnZhdGlvbnModGhpcy5hY3RpdmVMaXN0VHlwZSkuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dDogKHJlc3VsdDogUmVzZXJ2YXRpb25SZXN1bHREdG8pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlUmVzZXJ2YXRpb25SZXN1bHQocmVzdWx0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNSZXNlcnZhdGlvbkxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZHhPcmRlcnNJbnN0YW5jZT8uaW5zdGFuY2U/LnJlZnJlc2goKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZHhPcmRlcnNJbnN0YW5jZT8uaW5zdGFuY2U/LmNsZWFyU2VsZWN0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGVycm9yPy5lcnJvcj8uZXJyb3I/Lm1lc3NhZ2UgfHwgJ1JlemVydmFzeW9ubGFyIHNpbGluaXJrZW4gYmlyIGhhdGEgb2x1xZ90dS4nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdGVyU2VydmljZS5lcnJvcihlcnJvck1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1Jlc2VydmF0aW9uTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBNQVhfU0hPUlRfSVRFTVNfREVUQUlMRUQgPSA1O1xyXG5cclxuICAgIHByaXZhdGUgaGFuZGxlUmVzZXJ2YXRpb25SZXN1bHQocmVzdWx0OiBSZXNlcnZhdGlvblJlc3VsdER0byk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHNob3J0c09yZGVycyA9IHJlc3VsdC5PcmRlclJlc3VsdHM/LmZpbHRlcihyID0+IHIuU2hvcnRzICYmIHIuU2hvcnRzLmxlbmd0aCA+IDApIHx8IFtdO1xyXG4gICAgICAgIGNvbnN0IGhhc1Nob3J0cyA9IHNob3J0c09yZGVycy5sZW5ndGggPiAwO1xyXG5cclxuICAgICAgICBpZiAocmVzdWx0LkZhaWxDb3VudCA9PT0gMCAmJiAhaGFzU2hvcnRzKSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RlclNlcnZpY2Uuc3VjY2VzcyhyZXN1bHQuU3VtbWFyeSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQuU3VjY2Vzc0NvdW50ID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlLndhcm4ocmVzdWx0LlN1bW1hcnkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RlclNlcnZpY2UuZXJyb3IocmVzdWx0LlN1bW1hcnkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gRWtzaWsga2FsZW1sZXIgdmFyc2EgZGV0YXkgZ8O2c3RlclxyXG4gICAgICAgIGlmIChoYXNTaG9ydHMpIHtcclxuICAgICAgICAgICAgY29uc3QgdG90YWxTaG9ydEl0ZW1zID0gc2hvcnRzT3JkZXJzLnJlZHVjZSgoc3VtLCBvKSA9PiBzdW0gKyBvLlNob3J0cy5sZW5ndGgsIDApO1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgc2hvcnRNZXNzYWdlID0gdG90YWxTaG9ydEl0ZW1zID4gT3JkZXJzQ29tcG9uZW50Lk1BWF9TSE9SVF9JVEVNU19ERVRBSUxFRFxyXG4gICAgICAgICAgICAgICAgPyBgS2FsZW0gbWlrdGFybGFyxLEgZWtzaWsgKCR7c2hvcnRzT3JkZXJzLmxlbmd0aH0gc2lwYXJpxZ8sICR7dG90YWxTaG9ydEl0ZW1zfSBrYWxlbSkuYFxyXG4gICAgICAgICAgICAgICAgOiBgRWtzaWsgS2FsZW1sZXI6XFxuJHtzaG9ydHNPcmRlcnNcclxuICAgICAgICAgICAgICAgICAgICAgIC5tYXAobyA9PiBgU2lwYXJpxZ8gJHtvLkRvY051bX06ICR7by5TaG9ydHMubWFwKHMgPT4gYCR7cy5JdGVtQ29kZX0gKGVrc2lrOiAke3MuU2hvcnRRdHl9KWApLmpvaW4oJywgJyl9YClcclxuICAgICAgICAgICAgICAgICAgICAgIC5qb2luKCdcXG4nKX1gO1xyXG5cclxuICAgICAgICAgICAgdGhpcy50b2FzdGVyU2VydmljZS53YXJuKHNob3J0TWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uUmVmcmVzaCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmR4T3JkZXJzSW5zdGFuY2U/Lmluc3RhbmNlPy5yZWZyZXNoKCk7XHJcbiAgICB9XHJcblxyXG4gICAgb25FeHBvcnRFeGNlbCgpOiB2b2lkIHtcclxuICAgICAgICAvLyBUT0RPOiBJbXBsZW1lbnRcclxuICAgIH1cclxufVxyXG4iLCI8YWJwLXBhZ2UgW3RpdGxlXT1cIidTbWFydFdhcmVob3VzZTo6T3JkZXJzJyB8IGFicExvY2FsaXphdGlvblwiPlxyXG5cclxuICA8IS0tIFRvb2xiYXIgLS0+XHJcbiAgPGRpdiBjbGFzcz1cIm9yZGVycy10b29sYmFyXCI+XHJcbiAgICA8IS0tIFJvdyAxOiBGaWx0ZXJzIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cInRvb2xiYXItcm93XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0b29sYmFyLWdyb3VwXCI+XHJcbiAgICAgICAgPGxhYmVsPlNpcGFyacWfIEdydWJ1PC9sYWJlbD5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic3RhdHVzLWdyb3VwXCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInN0YXR1cy1jaGlwIGxpc3QtcHVyY2hhc2VcIiBbY2xhc3MuYWN0aXZlXT1cImFjdGl2ZUxpc3RUeXBlID09PSAnMSdcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUxpc3RUeXBlKCcxJylcIj5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1zaG9wcGluZy1jYXJ0XCI+PC9pPiBTYW5heWkgU2lwYXJpxZ9sZXJpXHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInN0YXR1cy1jaGlwIGxpc3QtZGlzdHJpYnV0aW9uXCIgW2NsYXNzLmFjdGl2ZV09XCJhY3RpdmVMaXN0VHlwZSA9PT0gJzInXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVMaXN0VHlwZSgnMicpXCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtdHJ1Y2tcIj48L2k+IERhxJ/EsXTEsW0gU2lwYXJpxZ9sZXJpXHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInN0YXR1cy1jaGlwIGxpc3Qtd2FyZWhvdXNlXCIgW2NsYXNzLmFjdGl2ZV09XCJhY3RpdmVMaXN0VHlwZSA9PT0gJzMnXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVMaXN0VHlwZSgnMycpXCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtd2FyZWhvdXNlXCI+PC9pPiBEZXBvIFRhbGVwbGVyaVxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0b29sYmFyLWdyb3VwIHRvb2xiYXItZ3JvdXAtLWR1cnVtXCI+XHJcbiAgICAgICAgPGxhYmVsPkR1cnVtPC9sYWJlbD5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic3RhdHVzLWdyb3VwXCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInN0YXR1cy1jaGlwIHBlbmRpbmdcIiBbY2xhc3MuYWN0aXZlXT1cImFjdGl2ZVN0YXR1cyA9PT0gJ2Jla2xlbWVkZSdcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVN0YXR1cygnYmVrbGVtZWRlJylcIj5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jbG9ja1wiPjwvaT4gQmVrbGVtZWRlXHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInN0YXR1cy1jaGlwIHByb2Nlc3NpbmdcIiBbY2xhc3MuYWN0aXZlXT1cImFjdGl2ZVN0YXR1cyA9PT0gJ2lzbGVuaXlvcidcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVN0YXR1cygnaXNsZW5peW9yJylcIj5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1zcGlubmVyXCI+PC9pPiDEsMWfbGVuaXlvclxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdGF0dXMtY2hpcCBhd2FpdGluZ1wiIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlU3RhdHVzID09PSAnb25heUJla2xpeW9yJ1wiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlU3RhdHVzKCdvbmF5QmVrbGl5b3InKVwiPlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWhvdXJnbGFzcy1oYWxmXCI+PC9pPiBPbmF5IEJla2xpeW9yXHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInN0YXR1cy1jaGlwIGNvbXBsZXRlZFwiIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlU3RhdHVzID09PSAndGFtYW1sYW5kaSdcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVN0YXR1cygndGFtYW1sYW5kaScpXCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY2hlY2stY2lyY2xlXCI+PC9pPiBUYW1hbWxhbmTEsVxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0b29sYmFyLWdyb3VwIHRvb2xiYXItZ3JvdXAtLWRlcG9cIj5cclxuICAgICAgICA8bGFiZWw+RGVwbzwvbGFiZWw+XHJcbiAgICAgICAgPHNlbGVjdCBbKG5nTW9kZWwpXT1cInNlbGVjdGVkV2FyZWhvdXNlXCIgY2xhc3M9XCJmb3JtLXNlbGVjdFwiPlxyXG4gICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPlTDvG3DvDwvb3B0aW9uPlxyXG4gICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgd2ggb2Ygd2FyZWhvdXNlc1wiIFt2YWx1ZV09XCJ3aC5XaHNDb2RlXCI+e3sgd2guV2hzTmFtZSB9fTwvb3B0aW9uPlxyXG4gICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxociBjbGFzcz1cInRvb2xiYXItZGl2aWRlclwiIC8+XHJcblxyXG4gICAgPCEtLSBSb3cgMzogQWN0aW9uIGlucHV0ICsgcmVsYXRlZCBidXR0b25zIHwgUmVzZXJ2YXRpb24gfCBSZWZyZXNoL0V4Y2VsIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cInRvb2xiYXItcm93XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb24tZ3JvdXBcIj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1hY3Rpb24tcHJpbWFyeSBidG4tc21cIiAoY2xpY2spPVwib25Hb3JldkJhc2xhdCgpXCIgW2Rpc2FibGVkXT1cImlzR29yZXZCYXNsYXRMb2FkaW5nXCI+XHJcbiAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXBsdXMtY2lyY2xlXCI+PC9pPiBHw7ZyZXYgQmHFn2xhdFxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWFjdGlvbi1hcHByb3ZlIGJ0bi1zbVwiIChjbGljayk9XCJvbk9uYXlWZXIoKVwiPlxyXG4gICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS10aHVtYnMtdXBcIj48L2k+IEfDtnJldmkgVGFtYW1sYVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWFjdGlvbi1kYW5nZXIgYnRuLXNtXCIgKGNsaWNrKT1cIm9uU2lwYXJpc0thcGF0KClcIj5cclxuICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtdGltZXMtY2lyY2xlXCI+PC9pPiBTaXBhcmnFnyBLYXBhdFxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWFjdGlvbi1zeW5jIGJ0bi1zbVwiIChjbGljayk9XCJvbkR1cnVtR3VuY2VsbGUoKVwiIFtkaXNhYmxlZF09XCJpc0JlZUNlbGxMb2FkaW5nXCI+XHJcbiAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXN5bmMtYWx0XCI+PC9pPiBEdXJ1bSBHw7xuY2VsbGVcclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1hY3Rpb24taW5mbyBidG4tc21cIiAoY2xpY2spPVwib25Cb3NLYXNhR2V0aXIoKVwiIFtkaXNhYmxlZF09XCJpc0JlZUNlbGxMb2FkaW5nXCI+XHJcbiAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWJveC1vcGVuXCI+PC9pPiBCb8WfIEthc2EgR2V0aXJcclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1hY3Rpb24td2FybmluZyBidG4tc21cIiAoY2xpY2spPVwib25ZYXJpbUthc2EoKVwiIFtkaXNhYmxlZF09XCJpc0JlZUNlbGxMb2FkaW5nXCI+XHJcbiAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWJveFwiPjwvaT4gWWFyxLFtIEthc2EgR2V0aXJcclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImFjdGlvbi1kaXZpZGVyXCI+PC9zcGFuPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWFjdGlvbi1yZXNlcnZhdGlvbiBidG4tc21cIiAoY2xpY2spPVwib25SZXplcnZhc3lvbllhcCgpXCIgW2Rpc2FibGVkXT1cImlzUmVzZXJ2YXRpb25Mb2FkaW5nXCI+XHJcbiAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWxvY2tcIj48L2k+IFJlemVydmFzeW9uIFlhcFxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWFjdGlvbi1yZXNlcnZhdGlvbi1jYW5jZWwgYnRuLXNtXCIgKGNsaWNrKT1cIm9uUmV6ZXJ2YXN5b25TaWwoKVwiIFtkaXNhYmxlZF09XCJpc1Jlc2VydmF0aW9uTG9hZGluZ1wiPlxyXG4gICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS11bmxvY2tcIj48L2k+IFJlemVydmFzeW9uIFNpbFxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWFjdGlvbi1yZXNlcnZhdGlvbi1idWxrIGJ0bi1zbVwiIChjbGljayk9XCJvblRvcGx1UmV6ZXJ2YXN5b25ZYXAoKVwiIFtkaXNhYmxlZF09XCJpc1Jlc2VydmF0aW9uTG9hZGluZ1wiPlxyXG4gICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1sb2NrXCI+PC9pPiBUb3BsdSBSZXouIFlhcFxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWFjdGlvbi1yZXNlcnZhdGlvbi1idWxrLWNhbmNlbCBidG4tc21cIiAoY2xpY2spPVwib25UdW1SZXplcnZhc3lvbmxhcmlTaWwoKVwiIFtkaXNhYmxlZF09XCJpc1Jlc2VydmF0aW9uTG9hZGluZ1wiPlxyXG4gICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS11bmxvY2tcIj48L2k+IFRvcGx1IFJlei4gU2lsXHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJhY3Rpb24tZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1hY3Rpb24tc2Vjb25kYXJ5IGJ0bi1zbVwiIChjbGljayk9XCJvblJlZnJlc2goKVwiPlxyXG4gICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1yZWRvXCI+PC9pPiBZZW5pbGVcclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPCEtLSBEYXRhIEdyaWQgLS0+XHJcbiAgPGRpdiBjbGFzcz1cImNhcmQgb3JkZXJzLWdyaWQtY2FyZFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxyXG4gICAgICA8ZHgtZGF0YS1ncmlkXHJcbiAgICAgICAgI2R4T3JkZXJzSW5zdGFuY2VcclxuICAgICAgICBbZGF0YVNvdXJjZV09XCJvcmRlcnNEYXRhU291cmNlXCJcclxuICAgICAgICBbc2hvd1Jvd0xpbmVzXT1cInRydWVcIlxyXG4gICAgICAgIFtzaG93Qm9yZGVyc109XCJ0cnVlXCJcclxuICAgICAgICBbcmVtb3RlT3BlcmF0aW9uc109XCJ0cnVlXCJcclxuICAgICAgICBbaG92ZXJTdGF0ZUVuYWJsZWRdPVwidHJ1ZVwiXHJcbiAgICAgICAgW3JlcGFpbnRDaGFuZ2VzT25seV09XCJ0cnVlXCJcclxuICAgICAgICBbYWxsb3dDb2x1bW5SZXNpemluZ109XCJ0cnVlXCJcclxuICAgICAgICBjb2x1bW5SZXNpemluZ01vZGU9XCJ3aWRnZXRcIlxyXG4gICAgICAgIFthbGxvd0NvbHVtblJlb3JkZXJpbmddPVwidHJ1ZVwiXHJcbiAgICAgICAgW2NvbHVtbkF1dG9XaWR0aF09XCJ0cnVlXCJcclxuICAgICAgICBbY29sdW1uSGlkaW5nRW5hYmxlZF09XCJ0cnVlXCJcclxuICAgICAgICAob25Sb3dDbGljayk9XCJvblJvd0NsaWNrKCRldmVudClcIlxyXG4gICAgICAgIChvblNlbGVjdGlvbkNoYW5nZWQpPVwib25TZWxlY3Rpb25DaGFuZ2VkKCRldmVudClcIlxyXG4gICAgICAgIChvblJvd1ByZXBhcmVkKT1cIm9uUm93UHJlcGFyZWQoJGV2ZW50KVwiXHJcbiAgICAgICAgc3R5bGU9XCJoZWlnaHQ6IDYwdmhcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPGR4by1wYWdlclxyXG4gICAgICAgICAgW3Zpc2libGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICBbc2hvd0luZm9dPVwidHJ1ZVwiXHJcbiAgICAgICAgICBbYWxsb3dlZFBhZ2VTaXplc109XCJbNSwgMTAsIDIwXVwiXHJcbiAgICAgICAgICBbc2hvd05hdmlnYXRpb25CdXR0b25zXT1cInRydWVcIlxyXG4gICAgICAgICAgW3Nob3dQYWdlU2l6ZVNlbGVjdG9yXT1cInRydWVcIlxyXG4gICAgICAgID5cclxuICAgICAgICA8L2R4by1wYWdlcj5cclxuICAgICAgICA8ZHhvLXBhZ2luZyBbcGFnZVNpemVdPVwiMTBcIj48L2R4by1wYWdpbmc+XHJcbiAgICAgICAgPGR4by1jb2x1bW4tY2hvb3NlclxyXG4gICAgICAgICAgW2FsbG93U2VhcmNoXT1cInRydWVcIlxyXG4gICAgICAgICAgW2VuYWJsZWRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICBtb2RlPVwic2VsZWN0XCJcclxuICAgICAgICA+PC9keG8tY29sdW1uLWNob29zZXI+XHJcbiAgICAgICAgPGR4by1jb2x1bW4tZml4aW5nIFtlbmFibGVkXT1cInRydWVcIj48L2R4by1jb2x1bW4tZml4aW5nPlxyXG4gICAgICAgIDxkeG8taGVhZGVyLWZpbHRlciBbYWxsb3dTZWFyY2hdPVwidHJ1ZVwiIFt2aXNpYmxlXT1cInRydWVcIj48L2R4by1oZWFkZXItZmlsdGVyPlxyXG4gICAgICAgIDxkeG8tZmlsdGVyLXJvdyBbdmlzaWJsZV09XCJ0cnVlXCI+PC9keG8tZmlsdGVyLXJvdz5cclxuICAgICAgICA8ZHhvLWV4cG9ydCBbZW5hYmxlZF09XCJ0cnVlXCIgW2FsbG93RXhwb3J0U2VsZWN0ZWREYXRhXT1cImZhbHNlXCI+PC9keG8tZXhwb3J0PlxyXG4gICAgICAgIDxkeG8tZmlsdGVyLWJ1aWxkZXIgW2FsbG93SGllcmFyY2hpY2FsRmllbGRzXT1cInRydWVcIj48L2R4by1maWx0ZXItYnVpbGRlcj5cclxuICAgICAgICA8ZHhvLWZpbHRlci1wYW5lbCBbdmlzaWJsZV09XCJ0cnVlXCI+PC9keG8tZmlsdGVyLXBhbmVsPlxyXG4gICAgICAgIDxkeG8tc29ydGluZyBtb2RlPVwic2luZ2xlXCI+PC9keG8tc29ydGluZz5cclxuICAgICAgICA8ZHhvLXNjcm9sbGluZyBtb2RlPVwic3RhbmRhcmRcIiBzaG93U2Nyb2xsYmFyPVwiYWx3YXlzXCI+PC9keG8tc2Nyb2xsaW5nPlxyXG4gICAgICAgIDxkeG8tc2VsZWN0aW9uXHJcbiAgICAgICAgICBtb2RlPVwibXVsdGlwbGVcIlxyXG4gICAgICAgICAgc2hvd0NoZWNrQm94ZXNNb2RlPVwiYWx3YXlzXCJcclxuICAgICAgICAgIFthbGxvd1NlbGVjdEFsbF09XCJ0cnVlXCJcclxuICAgICAgICA+PC9keG8tc2VsZWN0aW9uPlxyXG5cclxuICAgICAgICA8ZHhpLWNvbHVtblxyXG4gICAgICAgICAgZGF0YUZpZWxkPVwiRG9jTnVtXCJcclxuICAgICAgICAgIGNhcHRpb249XCJ7eyAnU21hcnRXYXJlaG91c2U6Ok9yZGVyOkRvY051bScgfCBhYnBMb2NhbGl6YXRpb24gfX1cIlxyXG4gICAgICAgICAgW3dpZHRoXT1cIjExMFwiXHJcbiAgICAgICAgPjwvZHhpLWNvbHVtbj5cclxuICAgICAgICA8ZHhpLWNvbHVtblxyXG4gICAgICAgICAgZGF0YUZpZWxkPVwiQ2FyZENvZGVcIlxyXG4gICAgICAgICAgY2FwdGlvbj1cInt7ICdTbWFydFdhcmVob3VzZTo6T3JkZXI6Q2FyZENvZGUnIHwgYWJwTG9jYWxpemF0aW9uIH19XCJcclxuICAgICAgICAgIFt3aWR0aF09XCIxNDBcIlxyXG4gICAgICAgID48L2R4aS1jb2x1bW4+XHJcbiAgICAgICAgPGR4aS1jb2x1bW5cclxuICAgICAgICAgIGRhdGFGaWVsZD1cIkNhcmROYW1lXCJcclxuICAgICAgICAgIGNhcHRpb249XCJ7eyAnU21hcnRXYXJlaG91c2U6Ok9yZGVyOkNhcmROYW1lJyB8IGFicExvY2FsaXphdGlvbiB9fVwiXHJcbiAgICAgICAgICBbd2lkdGhdPVwiMjIwXCJcclxuICAgICAgICA+PC9keGktY29sdW1uPlxyXG4gICAgICAgIDxkeGktY29sdW1uXHJcbiAgICAgICAgICBkYXRhRmllbGQ9XCJEb2NEYXRlXCJcclxuICAgICAgICAgIGNhcHRpb249XCJ7eyAnU21hcnRXYXJlaG91c2U6Ok9yZGVyOkRvY0RhdGUnIHwgYWJwTG9jYWxpemF0aW9uIH19XCJcclxuICAgICAgICAgIGRhdGFUeXBlPVwiZGF0ZVwiXHJcbiAgICAgICAgICBmb3JtYXQ9XCJkZC5NTS55eXl5XCJcclxuICAgICAgICAgIFt3aWR0aF09XCIxMjBcIlxyXG4gICAgICAgID48L2R4aS1jb2x1bW4+XHJcbiAgICAgICAgPGR4aS1jb2x1bW5cclxuICAgICAgICAgIGRhdGFGaWVsZD1cIkRvY0R1ZURhdGVcIlxyXG4gICAgICAgICAgY2FwdGlvbj1cInt7ICdTbWFydFdhcmVob3VzZTo6T3JkZXI6RG9jRHVlRGF0ZScgfCBhYnBMb2NhbGl6YXRpb24gfX1cIlxyXG4gICAgICAgICAgZGF0YVR5cGU9XCJkYXRlXCJcclxuICAgICAgICAgIGZvcm1hdD1cImRkLk1NLnl5eXlcIlxyXG4gICAgICAgICAgW3dpZHRoXT1cIjEyMFwiXHJcbiAgICAgICAgPjwvZHhpLWNvbHVtbj5cclxuICAgICAgICA8ZHhpLWNvbHVtblxyXG4gICAgICAgICAgZGF0YUZpZWxkPVwiVV9TV1RhbGVwVGFyaWhpXCJcclxuICAgICAgICAgIGNhcHRpb249XCJ7eyAnU21hcnRXYXJlaG91c2U6Ok9yZGVyOlVfU1dUYWxlcFRhcmloaScgfCBhYnBMb2NhbGl6YXRpb24gfX1cIlxyXG4gICAgICAgICAgZGF0YVR5cGU9XCJkYXRlXCJcclxuICAgICAgICAgIGZvcm1hdD1cImRkLk1NLnl5eXlcIlxyXG4gICAgICAgICAgW3dpZHRoXT1cIjEzMFwiXHJcbiAgICAgICAgPjwvZHhpLWNvbHVtbj5cclxuICAgICAgICA8ZHhpLWNvbHVtblxyXG4gICAgICAgICAgZGF0YUZpZWxkPVwiVV9TV0R1cnVtXCJcclxuICAgICAgICAgIGNhcHRpb249XCJ7eyAnU21hcnRXYXJlaG91c2U6Ok9yZGVyOlVfU1dEdXJ1bScgfCBhYnBMb2NhbGl6YXRpb24gfX1cIlxyXG4gICAgICAgICAgW3dpZHRoXT1cIjExMFwiXHJcbiAgICAgICAgICBjZWxsVGVtcGxhdGU9XCJzd0R1cnVtVGVtcGxhdGVcIlxyXG4gICAgICAgID48L2R4aS1jb2x1bW4+XHJcbiAgICAgICAgPGR4aS1jb2x1bW5cclxuICAgICAgICAgIGRhdGFGaWVsZD1cIlVfU1dJc0Vycm9yXCJcclxuICAgICAgICAgIGNhcHRpb249XCJ7eyAnU21hcnRXYXJlaG91c2U6Ok9yZGVyOlVfU1dJc0Vycm9yJyB8IGFicExvY2FsaXphdGlvbiB9fVwiXHJcbiAgICAgICAgICBbd2lkdGhdPVwiNTBcIlxyXG4gICAgICAgICAgY2VsbFRlbXBsYXRlPVwiZXJyb3JUZW1wbGF0ZVwiXHJcbiAgICAgICAgPjwvZHhpLWNvbHVtbj5cclxuICAgICAgICA8ZHhpLWNvbHVtblxyXG4gICAgICAgICAgZGF0YUZpZWxkPVwiVV9TV0Vycm9yTWVzc2FnZVwiXHJcbiAgICAgICAgICBjYXB0aW9uPVwie3sgJ1NtYXJ0V2FyZWhvdXNlOjpPcmRlcjpVX1NXRXJyb3JNZXNzYWdlJyB8IGFicExvY2FsaXphdGlvbiB9fVwiXHJcbiAgICAgICAgICBbd2lkdGhdPVwiMjYwXCJcclxuICAgICAgICAgIGNlbGxUZW1wbGF0ZT1cImVycm9yTWVzc2FnZVRlbXBsYXRlXCJcclxuICAgICAgICA+PC9keGktY29sdW1uPlxyXG4gICAgICAgIDxkeGktY29sdW1uXHJcbiAgICAgICAgICBkYXRhRmllbGQ9XCJPd25lckNvZGVcIlxyXG4gICAgICAgICAgY2FwdGlvbj1cInt7ICdTbWFydFdhcmVob3VzZTo6T3JkZXI6T3duZXJDb2RlJyB8IGFicExvY2FsaXphdGlvbiB9fVwiXHJcbiAgICAgICAgICBbd2lkdGhdPVwiMTIwXCJcclxuICAgICAgICA+PC9keGktY29sdW1uPlxyXG4gICAgICAgIDxkeGktY29sdW1uXHJcbiAgICAgICAgICBkYXRhRmllbGQ9XCJDb21tZW50c1wiXHJcbiAgICAgICAgICBjYXB0aW9uPVwie3sgJ1NtYXJ0V2FyZWhvdXNlOjpPcmRlcjpDb21tZW50cycgfCBhYnBMb2NhbGl6YXRpb24gfX1cIlxyXG4gICAgICAgICAgW3dpZHRoXT1cIjIwMFwiXHJcbiAgICAgICAgPjwvZHhpLWNvbHVtbj5cclxuICAgICAgICA8ZHhpLWNvbHVtblxyXG4gICAgICAgICAgZGF0YUZpZWxkPVwiVV9TV0dvbmRlcmlsZGlcIlxyXG4gICAgICAgICAgY2FwdGlvbj1cInt7ICdTbWFydFdhcmVob3VzZTo6T3JkZXI6VV9TV0dvbmRlcmlsZGknIHwgYWJwTG9jYWxpemF0aW9uIH19XCJcclxuICAgICAgICAgIFt3aWR0aF09XCIxMTBcIlxyXG4gICAgICAgID48L2R4aS1jb2x1bW4+XHJcbiAgICAgICAgPGR4aS1jb2x1bW5cclxuICAgICAgICAgIGRhdGFGaWVsZD1cIlVfU1dTdGF0aW9uQ29kZVwiXHJcbiAgICAgICAgICBjYXB0aW9uPVwie3sgJ1NtYXJ0V2FyZWhvdXNlOjpPcmRlcjpVX1NXU3RhdGlvbkNvZGUnIHwgYWJwTG9jYWxpemF0aW9uIH19XCJcclxuICAgICAgICAgIFt3aWR0aF09XCIxMjBcIlxyXG4gICAgICAgID48L2R4aS1jb2x1bW4+XHJcbiAgICAgICAgPGR4aS1jb2x1bW5cclxuICAgICAgICAgIGRhdGFGaWVsZD1cIlVfU1dFeWVDb2RlXCJcclxuICAgICAgICAgIGNhcHRpb249XCJ7eyAnU21hcnRXYXJlaG91c2U6Ok9yZGVyOlVfU1dFeWVDb2RlJyB8IGFicExvY2FsaXphdGlvbiB9fVwiXHJcbiAgICAgICAgICBbd2lkdGhdPVwiMTQwXCJcclxuICAgICAgICA+PC9keGktY29sdW1uPlxyXG4gICAgICAgIDxkeGktY29sdW1uXHJcbiAgICAgICAgICBkYXRhRmllbGQ9XCJVX1NXT3JkZXJUeXBlXCJcclxuICAgICAgICAgIGNhcHRpb249XCJ7eyAnU21hcnRXYXJlaG91c2U6Ok9yZGVyOlVfU1dPcmRlclR5cGUnIHwgYWJwTG9jYWxpemF0aW9uIH19XCJcclxuICAgICAgICAgIFt3aWR0aF09XCIxNjBcIlxyXG4gICAgICAgICAgY2VsbFRlbXBsYXRlPVwib3JkZXJUeXBlVGVtcGxhdGVcIlxyXG4gICAgICAgID48L2R4aS1jb2x1bW4+XHJcbiAgICAgICAgPGR4aS1jb2x1bW5cclxuICAgICAgICAgIGRhdGFGaWVsZD1cIk51bUF0Q2FyZFwiXHJcbiAgICAgICAgICBjYXB0aW9uPVwie3sgJ1NtYXJ0V2FyZWhvdXNlOjpPcmRlcjpOdW1BdENhcmQnIHwgYWJwTG9jYWxpemF0aW9uIH19XCJcclxuICAgICAgICAgIFt3aWR0aF09XCIxNDBcIlxyXG4gICAgICAgID48L2R4aS1jb2x1bW4+XHJcbiAgICAgICAgPGR4aS1jb2x1bW5cclxuICAgICAgICAgIGRhdGFGaWVsZD1cIkRvY1RvdGFsXCJcclxuICAgICAgICAgIGNhcHRpb249XCJ7eyAnU21hcnRXYXJlaG91c2U6Ok9yZGVyOkRvY1RvdGFsJyB8IGFicExvY2FsaXphdGlvbiB9fVwiXHJcbiAgICAgICAgICBkYXRhVHlwZT1cIm51bWJlclwiXHJcbiAgICAgICAgICBmb3JtYXQ9XCIjLCMjMC4wMFwiXHJcbiAgICAgICAgICBbd2lkdGhdPVwiMTMwXCJcclxuICAgICAgICA+PC9keGktY29sdW1uPlxyXG4gICAgICAgIDxkeGktY29sdW1uXHJcbiAgICAgICAgICBkYXRhRmllbGQ9XCJEb2NDdXJcIlxyXG4gICAgICAgICAgY2FwdGlvbj1cInt7ICdTbWFydFdhcmVob3VzZTo6T3JkZXI6RG9jQ3VyJyB8IGFicExvY2FsaXphdGlvbiB9fVwiXHJcbiAgICAgICAgICBbd2lkdGhdPVwiOTBcIlxyXG4gICAgICAgID48L2R4aS1jb2x1bW4+XHJcbiAgICAgICAgPGR4aS1jb2x1bW5cclxuICAgICAgICAgIGRhdGFGaWVsZD1cIkRvY1N0YXR1c1wiXHJcbiAgICAgICAgICBjYXB0aW9uPVwie3sgJ1NtYXJ0V2FyZWhvdXNlOjpPcmRlcjpEb2NTdGF0dXMnIHwgYWJwTG9jYWxpemF0aW9uIH19XCJcclxuICAgICAgICAgIFt3aWR0aF09XCI5MFwiXHJcbiAgICAgICAgICBjZWxsVGVtcGxhdGU9XCJzdGF0dXNUZW1wbGF0ZVwiXHJcbiAgICAgICAgPjwvZHhpLWNvbHVtbj5cclxuICAgICAgICA8ZHhpLWNvbHVtblxyXG4gICAgICAgICAgZGF0YUZpZWxkPVwiRG9jRW50cnlcIlxyXG4gICAgICAgICAgY2FwdGlvbj1cInt7ICdTbWFydFdhcmVob3VzZTo6T3JkZXI6RG9jRW50cnknIHwgYWJwTG9jYWxpemF0aW9uIH19XCJcclxuICAgICAgICAgIFt3aWR0aF09XCIxMDBcIlxyXG4gICAgICAgID48L2R4aS1jb2x1bW4+XHJcblxyXG4gICAgICAgIDxkaXYgKmR4VGVtcGxhdGU9XCJsZXQgY2VsbCBvZiAnc3RhdHVzVGVtcGxhdGUnXCI+XHJcbiAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICBjbGFzcz1cImJhZGdlXCJcclxuICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgICAgICdiZy1zdWNjZXNzJzogY2VsbC52YWx1ZSA9PT0gJ08nLFxyXG4gICAgICAgICAgICAgICdiZy1zZWNvbmRhcnknOiBjZWxsLnZhbHVlID09PSAnQydcclxuICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIHt7IGNlbGwudmFsdWUgPT09ICdPJyA/ICdBw6fEsWsnIDogJ0thcGFsxLEnIH19XHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgKmR4VGVtcGxhdGU9XCJsZXQgY2VsbCBvZiAnc3dEdXJ1bVRlbXBsYXRlJ1wiPlxyXG4gICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgY2xhc3M9XCJiYWRnZVwiXHJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAgICAgICAnYmctd2FybmluZyc6IGNlbGwudmFsdWUgPT09ICcwJyB8fCAhY2VsbC52YWx1ZSxcclxuICAgICAgICAgICAgICAnYmctaW5mbyc6IGNlbGwudmFsdWUgPT09ICcxJyxcclxuICAgICAgICAgICAgICAnYmctcHJpbWFyeSc6IGNlbGwudmFsdWUgPT09ICcyJyxcclxuICAgICAgICAgICAgICAnYmctc3VjY2Vzcyc6IGNlbGwudmFsdWUgPT09ICczJ1xyXG4gICAgICAgICAgICB9XCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAge3tcclxuICAgICAgICAgICAgICBjZWxsLnZhbHVlID09PSAnMScgPyAnT25heSBCZWtsaXlvcicgOlxyXG4gICAgICAgICAgICAgIGNlbGwudmFsdWUgPT09ICcyJyA/ICfEsMWfbGVuaXlvcicgOlxyXG4gICAgICAgICAgICAgIGNlbGwudmFsdWUgPT09ICczJyA/ICdUYW1hbWxhbmTEsScgOiAnQmVrbGVtZWRlJ1xyXG4gICAgICAgICAgICB9fVxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2ICpkeFRlbXBsYXRlPVwibGV0IGNlbGwgb2YgJ2Vycm9yVGVtcGxhdGUnXCI+XHJcbiAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAqbmdJZj1cImNlbGwudmFsdWUgPT09ICdZJ1wiXHJcbiAgICAgICAgICAgIGNsYXNzPVwiZmEgZmEtZXhjbGFtYXRpb24tdHJpYW5nbGUgdGV4dC1kYW5nZXJcIlxyXG4gICAgICAgICAgICBbdGl0bGVdPVwiY2VsbC5kYXRhLlVfU1dFcnJvck1lc3NhZ2VcIlxyXG4gICAgICAgICAgPjwvaT5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiAqZHhUZW1wbGF0ZT1cImxldCBjZWxsIG9mICdlcnJvck1lc3NhZ2VUZW1wbGF0ZSdcIj5cclxuICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICpuZ0lmPVwiY2VsbC5kYXRhLlVfU1dJc0Vycm9yID09PSAnWSdcIlxyXG4gICAgICAgICAgICBjbGFzcz1cImVycm9yLW1lc3NhZ2UtY2VsbFwiXHJcbiAgICAgICAgICAgIFt0aXRsZV09XCJjZWxsLnZhbHVlXCJcclxuICAgICAgICAgID57eyBjZWxsLnZhbHVlIH19PC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2ICpkeFRlbXBsYXRlPVwibGV0IGNlbGwgb2YgJ29yZGVyVHlwZVRlbXBsYXRlJ1wiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBiZy1zZWNvbmRhcnlcIj5cclxuICAgICAgICAgICAge3tcclxuICAgICAgICAgICAgICBjZWxsLnZhbHVlID09PSAnMScgPyAnU2FuYXlpIFNpcGFyacWfbGVyaScgOlxyXG4gICAgICAgICAgICAgIGNlbGwudmFsdWUgPT09ICcyJyA/ICdEYcSfxLF0xLFtIFNpcGFyacWfbGVyaScgOlxyXG4gICAgICAgICAgICAgIGNlbGwudmFsdWUgPT09ICczJyA/ICdEZXBvIFRhbGVwbGVyaScgOiAnLSdcclxuICAgICAgICAgICAgfX1cclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPCEtLSBNYXN0ZXItRGV0YWlsOiBTaXBhcmnFnyBTYXTEsXJsYXLEsSAtLT5cclxuICAgICAgICA8ZHhvLW1hc3Rlci1kZXRhaWwgW2VuYWJsZWRdPVwidHJ1ZVwiIHRlbXBsYXRlPVwib3JkZXJMaW5lc1RlbXBsYXRlXCI+PC9keG8tbWFzdGVyLWRldGFpbD5cclxuXHJcbiAgICAgICAgPGRpdiAqZHhUZW1wbGF0ZT1cImxldCBkZXRhaWwgb2YgJ29yZGVyTGluZXNUZW1wbGF0ZSdcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLTNcIj5cclxuICAgICAgICAgICAgPGg2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtbGlzdCBtZS0xXCI+PC9pPlxyXG4gICAgICAgICAgICAgIHt7ICdTbWFydFdhcmVob3VzZTo6T3JkZXI6RG9jTnVtJyB8IGFicExvY2FsaXphdGlvbiB9fTpcclxuICAgICAgICAgICAgICB7eyBkZXRhaWwuZGF0YS5Eb2NOdW0gfX0gLSBTaXBhcmnFnyBTYXTEsXJsYXLEsVxyXG4gICAgICAgICAgICA8L2g2PlxyXG4gICAgICAgICAgICA8ZHgtZGF0YS1ncmlkXHJcbiAgICAgICAgICAgICAgW2RhdGFTb3VyY2VdPVwiZGV0YWlsLmRhdGEuRG9jdW1lbnRMaW5lc1wiXHJcbiAgICAgICAgICAgICAgW3Nob3dSb3dMaW5lc109XCJ0cnVlXCJcclxuICAgICAgICAgICAgICBbc2hvd0JvcmRlcnNdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgW2NvbHVtbkF1dG9XaWR0aF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICBbaG92ZXJTdGF0ZUVuYWJsZWRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgW3Jvd0FsdGVybmF0aW9uRW5hYmxlZF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxkeGktY29sdW1uXHJcbiAgICAgICAgICAgICAgICBkYXRhRmllbGQ9XCJMaW5lTnVtXCJcclxuICAgICAgICAgICAgICAgIGNhcHRpb249XCJ7eyAnU21hcnRXYXJlaG91c2U6Ok9yZGVyOkxpbmVOdW0nIHwgYWJwTG9jYWxpemF0aW9uIH19XCJcclxuICAgICAgICAgICAgICAgIFt3aWR0aF09XCI3MFwiXHJcbiAgICAgICAgICAgICAgPjwvZHhpLWNvbHVtbj5cclxuICAgICAgICAgICAgICA8ZHhpLWNvbHVtblxyXG4gICAgICAgICAgICAgICAgZGF0YUZpZWxkPVwiSXRlbUNvZGVcIlxyXG4gICAgICAgICAgICAgICAgY2FwdGlvbj1cInt7ICdTbWFydFdhcmVob3VzZTo6T3JkZXI6SXRlbUNvZGUnIHwgYWJwTG9jYWxpemF0aW9uIH19XCJcclxuICAgICAgICAgICAgICAgIFt3aWR0aF09XCIxNDBcIlxyXG4gICAgICAgICAgICAgID48L2R4aS1jb2x1bW4+XHJcbiAgICAgICAgICAgICAgPGR4aS1jb2x1bW5cclxuICAgICAgICAgICAgICAgIGRhdGFGaWVsZD1cIkl0ZW1EZXNjcmlwdGlvblwiXHJcbiAgICAgICAgICAgICAgICBjYXB0aW9uPVwiS2FsZW0gQWTEsVwiXHJcbiAgICAgICAgICAgICAgPjwvZHhpLWNvbHVtbj5cclxuICAgICAgICAgICAgICA8ZHhpLWNvbHVtblxyXG4gICAgICAgICAgICAgICAgZGF0YUZpZWxkPVwiUXVhbnRpdHlcIlxyXG4gICAgICAgICAgICAgICAgY2FwdGlvbj1cInt7ICdTbWFydFdhcmVob3VzZTo6T3JkZXI6UXVhbnRpdHknIHwgYWJwTG9jYWxpemF0aW9uIH19XCJcclxuICAgICAgICAgICAgICAgIGRhdGFUeXBlPVwibnVtYmVyXCJcclxuICAgICAgICAgICAgICAgIGZvcm1hdD1cIiMsIyMwLiMjXCJcclxuICAgICAgICAgICAgICAgIFt3aWR0aF09XCIxMDBcIlxyXG4gICAgICAgICAgICAgID48L2R4aS1jb2x1bW4+XHJcbiAgICAgICAgICAgICAgPGR4aS1jb2x1bW5cclxuICAgICAgICAgICAgICAgIGRhdGFGaWVsZD1cIlVfU1dUZXNsaW1NaWt0YXJcIlxyXG4gICAgICAgICAgICAgICAgY2FwdGlvbj1cInt7ICdTbWFydFdhcmVob3VzZTo6T3JkZXI6VV9TV1Rlc2xpbU1pa3RhcicgfCBhYnBMb2NhbGl6YXRpb24gfX1cIlxyXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU9XCJudW1iZXJcIlxyXG4gICAgICAgICAgICAgICAgZm9ybWF0PVwiIywjIzAuIyNcIlxyXG4gICAgICAgICAgICAgICAgW3dpZHRoXT1cIjEyMFwiXHJcbiAgICAgICAgICAgICAgPjwvZHhpLWNvbHVtbj5cclxuICAgICAgICAgICAgICA8ZHhpLWNvbHVtblxyXG4gICAgICAgICAgICAgICAgZGF0YUZpZWxkPVwiTGluZVRvdGFsXCJcclxuICAgICAgICAgICAgICAgIGNhcHRpb249XCJ7eyAnU21hcnRXYXJlaG91c2U6Ok9yZGVyOkxpbmVUb3RhbCcgfCBhYnBMb2NhbGl6YXRpb24gfX1cIlxyXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU9XCJudW1iZXJcIlxyXG4gICAgICAgICAgICAgICAgZm9ybWF0PVwiIywjIzAuMDBcIlxyXG4gICAgICAgICAgICAgICAgW3dpZHRoXT1cIjEyMFwiXHJcbiAgICAgICAgICAgICAgPjwvZHhpLWNvbHVtbj5cclxuICAgICAgICAgICAgICA8ZHhpLWNvbHVtblxyXG4gICAgICAgICAgICAgICAgZGF0YUZpZWxkPVwiV2FyZWhvdXNlQ29kZVwiXHJcbiAgICAgICAgICAgICAgICBjYXB0aW9uPVwie3sgJ1NtYXJ0V2FyZWhvdXNlOjpPcmRlcjpXaHNDb2RlJyB8IGFicExvY2FsaXphdGlvbiB9fVwiXHJcbiAgICAgICAgICAgICAgICBbd2lkdGhdPVwiMTAwXCJcclxuICAgICAgICAgICAgICA+PC9keGktY29sdW1uPlxyXG4gICAgICAgICAgICAgIDxkeGktY29sdW1uXHJcbiAgICAgICAgICAgICAgICBkYXRhRmllbGQ9XCJTaGlwRGF0ZVwiXHJcbiAgICAgICAgICAgICAgICBjYXB0aW9uPVwie3sgJ1NtYXJ0V2FyZWhvdXNlOjpPcmRlcjpTaGlwRGF0ZScgfCBhYnBMb2NhbGl6YXRpb24gfX1cIlxyXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU9XCJkYXRlXCJcclxuICAgICAgICAgICAgICAgIGZvcm1hdD1cImRkLk1NLnl5eXlcIlxyXG4gICAgICAgICAgICAgICAgW3dpZHRoXT1cIjExMFwiXHJcbiAgICAgICAgICAgICAgPjwvZHhpLWNvbHVtbj5cclxuICAgICAgICAgICAgICA8ZHhpLWNvbHVtblxyXG4gICAgICAgICAgICAgICAgZGF0YUZpZWxkPVwiVV9Tb25Hb3JldklkXCJcclxuICAgICAgICAgICAgICAgIGNhcHRpb249XCJ7eyAnU21hcnRXYXJlaG91c2U6Ok9yZGVyOlVfU29uR29yZXZJZCcgfCBhYnBMb2NhbGl6YXRpb24gfX1cIlxyXG4gICAgICAgICAgICAgICAgW3dpZHRoXT1cIjEyMFwiXHJcbiAgICAgICAgICAgICAgPjwvZHhpLWNvbHVtbj5cclxuXHJcbiAgICAgICAgICAgICAgPGR4by1zdW1tYXJ5PlxyXG4gICAgICAgICAgICAgICAgPGR4aS10b3RhbC1pdGVtXHJcbiAgICAgICAgICAgICAgICAgIGNvbHVtbj1cImxpbmVUb3RhbFwiXHJcbiAgICAgICAgICAgICAgICAgIHN1bW1hcnlUeXBlPVwic3VtXCJcclxuICAgICAgICAgICAgICAgICAgZGlzcGxheUZvcm1hdD1cIlRvcGxhbTogezB9XCJcclxuICAgICAgICAgICAgICAgICAgdmFsdWVGb3JtYXQ9XCIjLCMjMC4wMFwiXHJcbiAgICAgICAgICAgICAgICA+PC9keGktdG90YWwtaXRlbT5cclxuICAgICAgICAgICAgICAgIDxkeGktdG90YWwtaXRlbVxyXG4gICAgICAgICAgICAgICAgICBjb2x1bW49XCJxdWFudGl0eVwiXHJcbiAgICAgICAgICAgICAgICAgIHN1bW1hcnlUeXBlPVwic3VtXCJcclxuICAgICAgICAgICAgICAgICAgZGlzcGxheUZvcm1hdD1cIlRvcGxhbTogezB9XCJcclxuICAgICAgICAgICAgICAgICAgdmFsdWVGb3JtYXQ9XCIjLCMjMC4jI1wiXHJcbiAgICAgICAgICAgICAgICA+PC9keGktdG90YWwtaXRlbT5cclxuICAgICAgICAgICAgICA8L2R4by1zdW1tYXJ5PlxyXG4gICAgICAgICAgICA8L2R4LWRhdGEtZ3JpZD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2R4LWRhdGEtZ3JpZD5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8IS0tIEJvxZ8gLyBZYXLEsW0gS2FzYSBQb3B1cCAtLT5cclxuICA8ZHgtcG9wdXBcclxuICAgIFt2aXNpYmxlXT1cImJvc0thc2FQb3B1cFZpc2libGVcIlxyXG4gICAgKG9uSGlkZGVuKT1cImJvc0thc2FQb3B1cFZpc2libGUgPSBmYWxzZVwiXHJcbiAgICBbd2lkdGhdPVwiMzgwXCJcclxuICAgIFtoZWlnaHRdPVwiJ2F1dG8nXCJcclxuICAgIFtzaG93VGl0bGVdPVwidHJ1ZVwiXHJcbiAgICBbdGl0bGVdPVwiYm9zS2FzYU1vZGUgPT09ICdlbXB0eScgPyAnQm/FnyBLYXNhIEdldGlyJyA6ICdZYXLEsW0gS2FzYSBHZXRpcidcIlxyXG4gICAgW2RyYWdFbmFibGVkXT1cInRydWVcIlxyXG4gICAgW3Jlc2l6ZUVuYWJsZWRdPVwiZmFsc2VcIlxyXG4gICAgW3Nob3dDbG9zZUJ1dHRvbl09XCJ0cnVlXCJcclxuICAgIFtjbG9zZU9uT3V0c2lkZUNsaWNrXT1cImZhbHNlXCJcclxuICA+XHJcbiAgICA8ZGl2ICpkeFRlbXBsYXRlPVwibGV0IGRhdGEgb2YgJ2NvbnRlbnQnXCIgY2xhc3M9XCJwLTNcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCI+xLBzdGFzeW9uIE5vPC9sYWJlbD5cclxuICAgICAgICA8ZHgtbnVtYmVyLWJveCBbKHZhbHVlKV09XCJib3NLYXNhU3RhdGlvbklkXCIgW21pbl09XCIxXCIgW3Nob3dTcGluQnV0dG9uc109XCJ0cnVlXCI+PC9keC1udW1iZXItYm94PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCI+UmFmIE5vIChTaGVsZiBJRCk8L2xhYmVsPlxyXG4gICAgICAgIDxkeC1udW1iZXItYm94IFsodmFsdWUpXT1cImJvc0thc2FTaGVsZklkXCIgW21pbl09XCIxXCIgW3Nob3dTcGluQnV0dG9uc109XCJ0cnVlXCI+PC9keC1udW1iZXItYm94PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCI+S2FzYSBBZGVkaTwvbGFiZWw+XHJcbiAgICAgICAgPGR4LW51bWJlci1ib3ggWyh2YWx1ZSldPVwiYm9zS2FzYUJveENvdW50XCIgW21pbl09XCIxXCIgW21heF09XCI1MFwiIFtzaG93U3BpbkJ1dHRvbnNdPVwidHJ1ZVwiPjwvZHgtbnVtYmVyLWJveD5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZCBnYXAtMiBtdC0zXCI+XHJcbiAgICAgICAgPGR4LWJ1dHRvbiB0ZXh0PVwixLBwdGFsXCIgKG9uQ2xpY2spPVwiYm9zS2FzYVBvcHVwVmlzaWJsZSA9IGZhbHNlXCIgdHlwZT1cIm5vcm1hbFwiPjwvZHgtYnV0dG9uPlxyXG4gICAgICAgIDxkeC1idXR0b25cclxuICAgICAgICAgIFt0ZXh0XT1cImJvc0thc2FNb2RlID09PSAnZW1wdHknID8gJ0JvxZ8gS2FzYSBHw7ZuZGVyJyA6ICdZYXLEsW0gS2FzYSBHw7ZuZGVyJ1wiXHJcbiAgICAgICAgICB0eXBlPVwiZGVmYXVsdFwiXHJcbiAgICAgICAgICAob25DbGljayk9XCJvbkJvc0thc2FHb25kZXIoKVwiXHJcbiAgICAgICAgPjwvZHgtYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZHgtcG9wdXA+XHJcblxyXG48L2FicC1wYWdlPlxyXG4iXX0=
521
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JkZXJzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LXdhcmVob3VzZS9zcmMvbGliL2NvbXBvbmVudHMvb3JkZXJzL29yZGVycy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC13YXJlaG91c2Uvc3JjL2xpYi9jb21wb25lbnRzL29yZGVycy9vcmRlcnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBcUIsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBTXhFLE9BQU8sVUFBVSxNQUFNLDZCQUE2QixDQUFDOzs7Ozs7Ozs7Ozs7QUFPckQsTUFBTSxPQUFPLGVBQWU7SUE4Q3hCLFlBQ3FCLFlBQTBCLEVBQzFCLGdCQUFrQyxFQUNsQyxjQUE4QixFQUM5QixtQkFBd0M7UUFIeEMsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQTlDN0QsbUJBQWMsR0FBa0IsRUFBRSxDQUFDO1FBTTNCLHNCQUFpQixHQUFrQixJQUFJLENBQUM7UUFDL0IsdUJBQWtCLEdBQUcsR0FBUyxFQUFFO1lBQzdDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFO2dCQUNsQixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7YUFDMUI7UUFDTCxDQUFDLENBQUM7UUFFRixrQkFBa0I7UUFDbEIsc0JBQWlCLEdBQVcsRUFBRSxDQUFDO1FBQy9CLGlCQUFZLEdBQVcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2pFLG1CQUFjLEdBQWtCLElBQUksQ0FBQyxD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QUFDLENBQUMsUUFBUSxZQUFZLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO3FCQUN4RyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUV4QixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUMxQztJQUNMLENBQUM7SUFFRCxTQUFTO1FBQ0wsSUFBSSxDQUFDLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQztJQUMvQyxDQUFDO0lBRUQsYUFBYTtRQUNULGtCQUFrQjtJQUN0QixDQUFDOztBQTNrQkQsK0ZBQStGO0FBQy9GLDBGQUEwRjtBQUMxRixnR0FBZ0c7QUFDeEUsK0JBQWUsR0FBRyxLQUFLLENBQUM7QUFzaUJ4Qix3Q0FBd0IsR0FBRyxDQUFDLENBQUM7NEdBL2lCNUMsZUFBZTtnR0FBZixlQUFlLHdLQ2I1Qiw4Z21CQWtjQTsyRkRyYmEsZUFBZTtrQkFMM0IsU0FBUzsrQkFDSSxZQUFZO2lNQUs0QixnQkFBZ0I7c0JBQWpFLFNBQVM7dUJBQUMsa0JBQWtCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IER4RGF0YUdyaWRDb21wb25lbnQgfSBmcm9tICdkZXZleHRyZW1lLWFuZ3VsYXInO1xyXG5pbXBvcnQgeyBPcmRlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9oaXQtcHJveHkvb3JkZXJzL29yZGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTYXBPcmRlckR0bywgUmVzZXJ2YXRpb25SZXN1bHREdG8gfSBmcm9tICcuLi8uLi9oaXQtcHJveHkvb3JkZXJzL21vZGVsJztcclxuaW1wb3J0IHsgV2FyZWhvdXNlU2VydmljZSwgV2FyZWhvdXNlRHRvIH0gZnJvbSAnLi4vLi4vaGl0LXByb3h5L3dhcmVob3VzZS93YXJlaG91c2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbmZpcm1hdGlvblNlcnZpY2UsIFRvYXN0ZXJTZXJ2aWNlIH0gZnJvbSAnQGFicC9uZy50aGVtZS5zaGFyZWQnO1xyXG5pbXBvcnQgRGF0YVNvdXJjZSBmcm9tICdkZXZleHRyZW1lL2RhdGEvZGF0YV9zb3VyY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2xpYi1vcmRlcnMnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL29yZGVycy5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9vcmRlcnMuY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIE9yZGVyc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICAgIEBWaWV3Q2hpbGQoJ2R4T3JkZXJzSW5zdGFuY2UnLCB7IHN0YXRpYzogZmFsc2UgfSkgZHhPcmRlcnNJbnN0YW5jZTogRHhEYXRhR3JpZENvbXBvbmVudDtcclxuXHJcbiAgICBvcmRlcnNEYXRhU291cmNlOiBEYXRhU291cmNlO1xyXG4gICAgc2VsZWN0ZWRPcmRlcnM6IFNhcE9yZGVyRHRvW10gPSBbXTtcclxuXHJcbiAgICAvLyBPdG9tYXRpayB5ZW5pbGVtZTogeWVuaSBzaXBhcmnFnyAvIGR1cnVtIGRlxJ9pxZ9pa2xpxJ9pIGFya2EgcGxhbiBIYW5nZmlyZSBpxZ9sZXJpbmRlbiBnZWxkacSfaW5kZVxyXG4gICAgLy8ga3VsbGFuxLFjxLEgc2F5ZmF5xLEgZWxsZSB5ZW5pbGVtZWRlbiBnw7Zyc8O8biBkaXllIGdyaWQgcGVyaXlvZGlrIG9sYXJhayBTRVNTxLBaQ0UgdGF6ZWxlbmlyXHJcbiAgICAvLyAocmVwYWludENoYW5nZXNPbmx5IHNheWVzaW5kZSB5YWxuxLF6Y2EgZGXEn2nFn2VuIHNhdMSxcmxhciBib3lhbsSxciwgc2XDp2ltIERvY0VudHJ5IGlsZSBrb3J1bnVyKS5cclxuICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEFVVE9fUkVGUkVTSF9NUyA9IDQ1MDAwO1xyXG4gICAgcHJpdmF0ZSBhdXRvUmVmcmVzaEhhbmRsZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IG9uVmlzaWJpbGl0eUNoYW5nZSA9ICgpOiB2b2lkID0+IHtcclxuICAgICAgICBpZiAoIWRvY3VtZW50LmhpZGRlbikge1xyXG4gICAgICAgICAgICB0aGlzLmF1dG9SZWZyZXNoVGljaygpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgLy8gVG9vbGJhciBmaWx0ZXJzXHJcbiAgICBzZWxlY3RlZFdhcmVob3VzZTogc3RyaW5nID0gJyc7XHJcbiAgICBzZWxlY3RlZERhdGU6IHN0cmluZyA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zdWJzdHJpbmcoMCwgMTApO1xyXG4gICAgYWN0aXZlTGlzdFR5cGU6IHN0cmluZyB8IG51bGwgPSBudWxsOyAvLyBudWxsID0gdMO8bcO8LCAnMScgfCAnMicgfCAnMydcclxuICAgIGFjdGl2ZVN0YXR1czogc3RyaW5nIHwgbnVsbCA9IG51bGw7IC8vIG51bGwgPSB0w7xtw7wsICdiZWtsZW1lZGUnICgwKSB8ICdvbmF5QmVrbGl5b3InICgxKSB8ICdpc2xlbml5b3InICgyKSB8ICd0YW1hbWxhbmRpJyAoMylcclxuXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHN0YXR1c01hcDogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcclxuICAgICAgICBiZWtsZW1lZGU6ICcwJyxcclxuICAgICAgICBvbmF5QmVrbGl5b3I6ICcxJyxcclxuICAgICAgICBpc2xlbml5b3I6ICcyJyxcclxuICAgICAgICB0YW1hbWxhbmRpOiAnMycsXHJcbiAgICB9O1xyXG5cclxuICAgIC8vIEFkZGl0aW9uYWwgaW5wdXRzXHJcbiAgICBjdXN0b21JbnB1dFZhbHVlOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgICB3YXJlaG91c2VzOiBXYXJlaG91c2VEdG9bXSA9IFtdO1xyXG4gICAgaXNMb2FkaW5nV2FyZWhvdXNlczogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIGlzR29yZXZCYXNsYXRMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBpc1Jlc2VydmF0aW9uTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgaXNCZWVDZWxsTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIGJvc0thc2FQb3B1cFZpc2libGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGJvc0thc2FTdGF0aW9uSWQ6IG51bWJlciA9IDE7XHJcbiAgICBib3NLYXNhU2hlbGZJZDogbnVtYmVyID0gMTtcclxuICAgIGJvc0thc2FCb3hDb3VudDogbnVtYmVyID0gNTtcclxuICAgIGJvc0thc2FNb2RlOiAnZW1wdHknIHwgJ2hhbGYnID0gJ2VtcHR5JztcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IG9yZGVyU2VydmljZTogT3JkZXJTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgd2FyZWhvdXNlU2VydmljZTogV2FyZWhvdXNlU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHRvYXN0ZXJTZXJ2aWNlOiBUb2FzdGVyU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpcm1hdGlvblNlcnZpY2U6IENvbmZpcm1hdGlvblNlcnZpY2VcclxuICAgICkge31cclxuXHJcbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmxvYWRXYXJlaG91c2VzKCk7XHJcbiAgICAgICAgdGhpcy5zZXR1cERhdGFTb3VyY2UoKTtcclxuICAgICAgICB0aGlzLnN0YXJ0QXV0b1JlZnJlc2goKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnN0b3BBdXRvUmVmcmVzaCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc3RhcnRBdXRvUmVmcmVzaCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmF1dG9SZWZyZXNoSGFuZGxlID0gd2luZG93LnNldEludGVydmFsKFxyXG4gICAgICAgICAgICAoKSA9PiB0aGlzLmF1dG9SZWZyZXNoVGljaygpLFxyXG4gICAgICAgICAgICBPcmRlcnNDb21wb25lbnQuQVVUT19SRUZSRVNIX01TXHJcbiAgICAgICAgKTtcclxuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd2aXNpYmlsaXR5Y2hhbmdlJywgdGhpcy5vblZpc2liaWxpdHlDaGFuZ2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc3RvcEF1dG9SZWZyZXNoKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmF1dG9SZWZyZXNoSGFuZGxlICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5jbGVhckludGVydmFsKHRoaXMuYXV0b1JlZnJlc2hIYW5kbGUpO1xyXG4gICAgICAgICAgICB0aGlzLmF1dG9SZWZyZXNoSGFuZGxlID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsIHRoaXMub25WaXNpYmlsaXR5Q2hhbmdlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEt1bGxhbsSxY8SxecSxIHJhaGF0c8SxeiBldG1leWVjZWsgZHVydW1kYXlzYWsgZ3JpZCdpIHRhemVsZXIuIMWedSBoYWxsZXJkZSB0dXIgYXRsYW7EsXI6XHJcbiAgICAgKiBzZWttZSBhcmthIHBsYW5kYSwga3VsbGFuxLFjxLEgc2F0xLFyIHNlw6dtacWfICh0b3BsdSBpxZ9sZW0geWFwbWFrIMO8emVyZSBvbGFiaWxpciksXHJcbiAgICAgKiBiaXIgaXN0ZWsvacWfbGVtIHPDvHLDvHlvciB5YSBkYSBiaXIgcG9wdXAgYcOnxLFrLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGF1dG9SZWZyZXNoVGljaygpOiB2b2lkIHtcclxuICAgICAgICBpZiAoZG9jdW1lbnQuaGlkZGVuKSByZXR1cm47XHJcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRPcmRlcnMubGVuZ3RoID4gMCkgcmV0dXJuO1xyXG4gICAgICAgIGlmICh0aGlzLmJvc0thc2FQb3B1cFZpc2libGUpIHJldHVybjtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nV2FyZWhvdXNlcyB8fFxyXG4gICAgICAgICAgICB0aGlzLmlzR29yZXZCYXNsYXRMb2FkaW5nIHx8XHJcbiAgICAgICAgICAgIHRoaXMuaXNSZXNlcnZhdGlvbkxvYWRpbmcgfHxcclxuICAgICAgICAgICAgdGhpcy5pc0JlZUNlbGxMb2FkaW5nXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5keE9yZGVyc0luc3RhbmNlPy5pbnN0YW5jZT8ucmVmcmVzaCh0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvYWRXYXJlaG91c2VzKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaXNMb2FkaW5nV2FyZWhvdXNlcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy53YXJlaG91c2VTZXJ2aWNlLmdldFNtYXJ0V2FyZWhvdXNlcygpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgIG5leHQ6IChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLndhcmVob3VzZXMgPSBkYXRhIHx8IFtdO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMud2FyZWhvdXNlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFdhcmVob3VzZSA9IHRoaXMud2FyZWhvdXNlc1swXS5XaHNDb2RlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmdXYXJlaG91c2VzID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdEZXBvbGFyIHnDvGtsZW5lbWVkaTonLCBlcnIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdGVyU2VydmljZS5lcnJvcignRGVwb2xhciB5w7xrbGVuZW1lZGkuJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzTG9hZGluZ1dhcmVob3VzZXMgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2V0dXBEYXRhU291cmNlKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMub3JkZXJzRGF0YVNvdXJjZSA9IG5ldyBEYXRhU291cmNlKHtcclxuICAgICAgICAgICAgc3RvcmU6IHRoaXMub3JkZXJTZXJ2aWNlLmxvYWRPcmRlcnMsXHJcbiAgICAgICAgICAgIGZpbHRlcjogdGhpcy5idWlsZENvbWJpbmVkRmlsdGVyKCksXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBidWlsZENvbWJpbmVkRmlsdGVyKCk6IGFueSB7XHJcbiAgICAgICAgY29uc3Qgc3RhdHVzRmlsdGVyID0gdGhpcy5idWlsZFN0YXR1c0ZpbHRlcigpO1xyXG4gICAgICAgIGNvbnN0IGxpc3RUeXBlRmlsdGVyID0gdGhpcy5idWlsZExpc3RUeXBlRmlsdGVyKCk7XHJcblxyXG4gICAgICAgIGlmIChzdGF0dXNGaWx0ZXIgJiYgbGlzdFR5cGVGaWx0ZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFtzdGF0dXNGaWx0ZXIsICdhbmQnLCBsaXN0VHlwZUZpbHRlcl07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzdGF0dXNGaWx0ZXIgfHwgbGlzdFR5cGVGaWx0ZXIgfHwgbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGJ1aWxkTGlzdFR5cGVGaWx0ZXIoKTogYW55IHtcclxuICAgICAgICBpZiAoIXRoaXMuYWN0aXZlTGlzdFR5cGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBbJ1VfU1dPcmRlclR5cGUnLCAnPScsIHRoaXMuYWN0aXZlTGlzdFR5cGVdO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYnVpbGRTdGF0dXNGaWx0ZXIoKTogYW55IHtcclxuICAgICAgICBpZiAoIXRoaXMuYWN0aXZlU3RhdHVzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlU3RhdHVzID09PSAnYmVrbGVtZWRlJykge1xyXG4gICAgICAgICAgICAvLyBTQVAnZGFuIGdlbGVuIFVfU1dEdXJ1bSBudWxsL2JvxZ8gZGXEn2VybGVyIGJhY2tlbmQnZGUgJzAnIG9sYXJhayBub3JtYWxpemUgZWRpbGl5b3JcclxuICAgICAgICAgICAgcmV0dXJuIFsnVV9TV0R1cnVtJywgJz0nLCAnMCddO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIFsnVV9TV0R1cnVtJywgJz0nLCB0aGlzLnN0YXR1c01hcFt0aGlzLmFjdGl2ZVN0YXR1c11dO1xyXG4gICAgfVxyXG5cclxuICAgIHRvZ2dsZVN0YXR1cyhrZXk6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuYWN0aXZlU3RhdHVzID0gdGhpcy5hY3RpdmVTdGF0dXMgPT09IGtleSA/IG51bGwgOiBrZXk7XHJcbiAgICAgICAgdGhpcy5hcHBseUZpbHRlcnMoKTtcclxuICAgIH1cclxuXHJcbiAgICB0b2dnbGVMaXN0VHlwZShrZXk6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuYWN0aXZlTGlzdFR5cGUgPSB0aGlzLmFjdGl2ZUxpc3RUeXBlID09PSBrZXkgPyBudWxsIDoga2V5O1xyXG4gICAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhcHBseUZpbHRlcnMoKTogdm9pZCB7XHJcbiAgICAgICAgLy8gRGVwbyBUYWxlcGxlcmkgZGUgZGFoaWwsIMO8w6cgY2hpcCBkZSBheW7EsSBTQVAgc2lwYXJpxZ9sZXJpIGtheW5hxJ/EsW7EsSAoVV9TV09yZGVyVHlwZSBmaWx0cmVzaXlsZSkga3VsbGFuxLFyLlxyXG4gICAgICAgIC8vIERhdGFTb3VyY2UgeWVuaWRlbiBvbHXFn3R1cnVsdXAgZ3JpZCdlIGF0YW7EsXlvcjsgbWV2Y3V0IERhdGFTb3VyY2Ugw7x6ZXJpbmRlIC5maWx0ZXIoKSsucmVsb2FkKClcclxuICAgICAgICAvLyDDp2HEn8Sxcm1hayBncmlkJ2UgeWFuc8SxbcSxeW9yZHUgw6fDvG5rw7wgQW5ndWxhciBiaW5kaW5nIHNhZGVjZSByZWZlcmFucyBkZcSfacWfaW5jZSB0ZXRpa2xlbml5b3IuXHJcbiAgICAgICAgdGhpcy5vcmRlcnNEYXRhU291cmNlID0gbmV3IERhdGFTb3VyY2Uoe1xyXG4gICAgICAgICAgICBzdG9yZTogdGhpcy5vcmRlclNlcnZpY2UubG9hZE9yZGVycyxcclxuICAgICAgICAgICAgZmlsdGVyOiB0aGlzLmJ1aWxkQ29tYmluZWRGaWx0ZXIoKSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBvblNlbGVjdGlvbkNoYW5nZWQoZTogYW55KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZE9yZGVycyA9IGUuc2VsZWN0ZWRSb3dzRGF0YSB8fCBbXTtcclxuICAgIH1cclxuXHJcbiAgICBvblJvd0NsaWNrKGU6IGFueSk6IHZvaWQge1xyXG4gICAgICAgIC8vIEXEn2VyIGV4cGFuZC9jb2xsYXBzZSBpY29uJ3VuYSB2ZXlhIGNoZWNrYm94J2EgdMSxa2xhbmTEsXlzYSwgRGV2RXh0cmVtZSdpbiBrZW5kaSBkYXZyYW7EscWfxLFuxLEga3VsbGFuXHJcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZS5ldmVudD8udGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICAgIGlmICh0YXJnZXQ/LmNsb3Nlc3QoJy5keC1jb21tYW5kLWV4cGFuZCcpIHx8IHRhcmdldD8uY2xvc2VzdCgnLmR4LW1hc3Rlci1kZXRhaWwtY2VsbCcpIHx8IHRhcmdldD8uY2xvc2VzdCgnLmR4LXNlbGVjdC1jaGVja2JveCcpIHx8IHRhcmdldD8uY2xvc2VzdCgnLmR4LWNvbW1hbmQtc2VsZWN0JykpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGUucm93VHlwZSA9PT0gJ2RhdGEnKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlzRXhwYW5kZWQgPSBlLmNvbXBvbmVudC5pc1Jvd0V4cGFuZGVkKGUua2V5KTtcclxuICAgICAgICAgICAgaWYgKGlzRXhwYW5kZWQpIHtcclxuICAgICAgICAgICAgICAgIGUuY29tcG9uZW50LmNvbGxhcHNlUm93KGUua2V5KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGUuY29tcG9uZW50LmV4cGFuZFJvdyhlLmtleSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25Sb3dQcmVwYXJlZChlOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICBpZiAoZS5yb3dUeXBlID09PSAnZGF0YScgJiYgZS5kYXRhPy5VX1NXSXNFcnJvciA9PT0gJ1knKSB7XHJcbiAgICAgICAgICAgIGUucm93RWxlbWVudC5jbGFzc0xpc3QuYWRkKCdvcmRlci1yb3ctZXJyb3InKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25Hb3JldkJhc2xhdCgpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRPcmRlcnMgfHwgdGhpcy5zZWxlY3RlZE9yZGVycy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdGVyU2VydmljZS53YXJuKCdMw7x0ZmVuIGVuIGF6IGJpciBzaXBhcmnFnyBzZcOnaW5pei4nKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gVmFsaWRhdGU6IFVfU1dEdXJ1bSBtdXN0IGJlIFwiMVwiIChPbmF5IEJla2xpeW9yKVxyXG4gICAgICAgIGNvbnN0IGludmFsaWRTdGF0dXMgPSB0aGlzLnNlbGVjdGVkT3JkZXJzLmZpbHRlcihcclxuICAgICAgICAgICAgbyA9PiBvLlVfU1dEdXJ1bSAhPT0gJzEnXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoaW52YWxpZFN0YXR1cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGRvY051bXMgPSBpbnZhbGlkU3RhdHVzLm1hcChvID0+IG8uRG9jTnVtKS5qb2luKCcsICcpO1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlLmVycm9yKFxyXG4gICAgICAgICAgICAgICAgYMWedSBzaXBhcmnFn2xlcmluIGR1cnVtdSBcIk9uYXkgQmVrbGl5b3JcIiBkZcSfaWw6ICR7ZG9jTnVtc30uIFNhZGVjZSBlxZ9sZW1lc2kgeWFwxLFsbcSxxZ8gc2lwYXJpxZ9sZXIgacOnaW4gZ8O2cmV2IGJhxZ9sYXTEsWxhYmlsaXIuYFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBWYWxpZGF0ZTogVV9TV1N0YXRpb25Db2RlIG11c3QgYmUgZmlsbGVkXHJcbiAgICAgICAgY29uc3Qgbm9TdGF0aW9uID0gdGhpcy5zZWxlY3RlZE9yZGVycy5maWx0ZXIoXHJcbiAgICAgICAgICAgIG8gPT4gIW8uVV9TV1N0YXRpb25Db2RlIHx8IG8uVV9TV1N0YXRpb25Db2RlLnRyaW0oKSA9PT0gJydcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChub1N0YXRpb24ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBjb25zdCBkb2NOdW1zID0gbm9TdGF0aW9uLm1hcChvID0+IG8uRG9jTnVtKS5qb2luKCcsICcpO1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlLmVycm9yKFxyXG4gICAgICAgICAgICAgICAgYMWedSBzaXBhcmnFn2xlcmluIGlzdGFzeW9uIGJpbGdpc2kgYm/FnzogJHtkb2NOdW1zfS4gxLBzdGFzeW9uIGFsYW7EsSBkb2x1IG9sbWFsxLFkxLFyLmBcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgZG9jRW50cmllcyA9IHRoaXMuc2VsZWN0ZWRPcmRlcnMubWFwKG8gPT4gby5Eb2NFbnRyeSk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNHb3JldkJhc2xhdExvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMub3JkZXJTZXJ2aWNlLnN0YXJ0VGFzayhkb2NFbnRyaWVzKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICBuZXh0OiAocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlLnN1Y2Nlc3MocmVzdWx0KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNHb3JldkJhc2xhdExvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZHhPcmRlcnNJbnN0YW5jZT8uaW5zdGFuY2U/LnJlZnJlc2goKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZHhPcmRlcnNJbnN0YW5jZT8uaW5zdGFuY2U/LmNsZWFyU2VsZWN0aW9uKCk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGVycm9yPy5lcnJvcj8uZXJyb3I/Lm1lc3NhZ2UgfHwgJ0fDtnJldiBiYcWfbGF0xLFsxLFya2VuIGJpciBoYXRhIG9sdcWfdHUuJztcclxuICAgICAgICAgICAgICAgIHRoaXMudG9hc3RlclNlcnZpY2UuZXJyb3IoZXJyb3JNZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNHb3JldkJhc2xhdExvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBHw7ZyZXZpIFRhbWFtbGE6IMSwxZ9sZW5peW9yICgyKSBkdXJ1bXVuZGFraSBzaXBhcmnFn2xlcmkgQmVlQ2VsbCBnw7ZyZXZpIGJpdG1pxZ9zZSBkb8SfcnVkYW5cclxuICAgIC8vIFRhbWFtbGFuZMSxJ3lhICgzKSBnw7Z0w7xyw7xyIOKAlCBlc2tpIFwiR8O2cmV2IFRhbWFtbGFcIiArIFwiT25heSBWZXJcIiBpa2kgYWTEsW3EsSwgZXNraSBzaXN0ZW1pblxyXG4gICAgLy8gdGVrLWFrc2l5b24gZGF2cmFuxLHFn8SxbmEgdXlndW4gxZ9la2lsZGUgdGVrIGJ1dG9uZGEgYmlybGXFn3RpcmlyLlxyXG4gICAgLyoqXHJcbiAgICAgKiBcIkfDtnJldmkgVGFtYW1sYVwiIHlhbG7EsXpjYSBcIsSwxZ9sZW5peW9yXCIgKDIpIGR1cnVtdW5kYWtpIHNpcGFyacWfbGVyZGUgYW5sYW1sxLEg4oCUIGJhY2tlbmRcclxuICAgICAqIChBcHByb3ZlVGFza0FzeW5jKSBidSDFn2FydMSxIGFyxLF5b3IuIE5vcm1hbCBha8SxxZ90YSBhcnTEsWsgZ2VyZWttaXlvcjogZ8O2cmV2IGJpdGluY2Ugc3RvayBuYWtsaVxyXG4gICAgICogZGUgZmF0dXJhIGRhIG90b21hdGlrIHlhesSxbMSxeW9yIHZlIHNpcGFyacWfIGtlbmRpbGnEn2luZGVuIFwiVGFtYW1sYW5kxLFcIiBvbHV5b3IuIEJ1dG9uIHlhbG7EsXpjYVxyXG4gICAgICogZmF0dXJhIGhhdGFzxLEsIEJlZUNlbGwnZSBnaXRtZW1pxZ8vaXB0YWwgb2xtdcWfIGfDtnJldiB2ZSBEZXBvIFRhbGVwbGVyaSBha8SxxZ/EsSBpw6dpbiBrYWzEsXlvci5cclxuICAgICAqL1xyXG4gICAgZ2V0IGNhbk9uYXlWZXIoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRPcmRlcnMubGVuZ3RoID4gMFxyXG4gICAgICAgICAgICAmJiB0aGlzLnNlbGVjdGVkT3JkZXJzLmV2ZXJ5KG8gPT4gby5VX1NXRHVydW0gPT09ICcyJyk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IG9uYXlWZXJUb29sdGlwKCk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRPcmRlcnMubGVuZ3RoID09PSAwKSByZXR1cm4gJ8OWbmNlIHNpcGFyacWfIHNlw6dpbi4nO1xyXG4gICAgICAgIGlmICh0aGlzLmNhbk9uYXlWZXIpIHJldHVybiAnU2XDp2lsaSBzaXBhcmnFn2xlcmluIGZhdHVyYXPEsW7EsSBrZXNpcCBrYXBhdMSxci4nO1xyXG4gICAgICAgIHJldHVybiAnWWFsbsSxemNhIFwixLDFn2xlbml5b3JcIiBkdXJ1bXVuZGFraSBzaXBhcmnFn2xlcmRlIGt1bGxhbsSxbGFiaWxpci4gJ1xyXG4gICAgICAgICAgICArICdHw7ZyZXYgYml0aW5jZSBmYXR1cmEgemF0ZW4gb3RvbWF0aWsga2VzaWxpci4nO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBcIlNpcGFyacWfIEthcGF0XCIgYWt0aWYgZ8O2cmV2aSBvbGFuICgyKSBzaXBhcmnFn3RlIMOnYWzEscWfbWF6IOKAlCBDbG9zZU9yZGVyQXN5bmMgcmVkZGVkaXlvci4gKi9cclxuICAgIGdldCBjYW5TaXBhcmlzS2FwYXQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRPcmRlcnMubGVuZ3RoID4gMFxyXG4gICAgICAgICAgICAmJiB0aGlzLnNlbGVjdGVkT3JkZXJzLmV2ZXJ5KG8gPT4gby5VX1NXRHVydW0gIT09ICcyJyk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHNpcGFyaXNLYXBhdFRvb2x0aXAoKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZE9yZGVycy5sZW5ndGggPT09IDApIHJldHVybiAnw5ZuY2Ugc2lwYXJpxZ8gc2XDp2luLic7XHJcbiAgICAgICAgaWYgKHRoaXMuY2FuU2lwYXJpc0thcGF0KSByZXR1cm4gJ1NpcGFyacWfaSBzZXZraXlhdGEgc29rbWFkYW4ga2FwYXTEsXIgKGJlbGdlIG9sdcWfdHVydWxtYXopLic7XHJcbiAgICAgICAgcmV0dXJuICdcIsSwxZ9sZW5peW9yXCIgZHVydW11bmRha2kgc2lwYXJpxZ8ga2FwYXTEsWxhbWF6IOKAlCDDtm5jZSBnw7ZyZXZpIHRhbWFtbGF5xLFuICdcclxuICAgICAgICAgICAgKyAneWEgZGEgQmVlQ2VsbFxcJ2RlIGlwdGFsIGVkaW4uJztcclxuICAgIH1cclxuXHJcbiAgICBvbk9uYXlWZXIoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkT3JkZXJzIHx8IHRoaXMuc2VsZWN0ZWRPcmRlcnMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RlclNlcnZpY2Uud2FybignTMO8dGZlbiBlbiBheiBiaXIgc2lwYXJpxZ8gc2XDp2luaXouJyk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFZhbGlkYXRlOiBVX1NXRHVydW0gXCIyXCIgKMSwxZ9sZW5peW9yKSBvbG1hbMSxXHJcbiAgICAgICAgY29uc3QgaW52YWxpZFN0YXR1cyA9IHRoaXMuc2VsZWN0ZWRPcmRlcnMuZmlsdGVyKFxyXG4gICAgICAgICAgICBvID0+ICFvLlVfU1dEdXJ1bSB8fCBvLlVfU1dEdXJ1bSAhPT0gJzInXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoaW52YWxpZFN0YXR1cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGRvY051bXMgPSBpbnZhbGlkU3RhdHVzLm1hcChvID0+IG8uRG9jTnVtKS5qb2luKCcsICcpO1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlLmVycm9yKFxyXG4gICAgICAgICAgICAgICAgYMWedSBzaXBhcmnFn2xlcmluIGR1cnVtdSBcIsSwxZ9sZW5peW9yXCIgZGXEn2lsOiAke2RvY051bXN9LiBTYWRlY2UgYnUgZHVydW1kYWtpIHNpcGFyacWfbGVyIHRhbWFtbGFuYWJpbGlyLmBcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgZG9jRW50cmllcyA9IHRoaXMuc2VsZWN0ZWRPcmRlcnMubWFwKG8gPT4gby5Eb2NFbnRyeSk7XHJcblxyXG4gICAgICAgIHRoaXMuY29uZmlybWF0aW9uU2VydmljZVxyXG4gICAgICAgICAgICAud2FybignU2XDp2lsaSBzaXBhcmnFn2xlciBpw6dpbiBmYXR1cmEga2VzaWxlY2VrIHZlIHNpcGFyacWfIGthcGF0xLFsYWNha3TEsXIuIEVtaW4gbWlzaW5pej8nLCAnR8O2cmV2aSBUYW1hbWxhJylcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgoc3RhdHVzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc3RhdHVzID09PSAnY29uZmlybScpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9yZGVyU2VydmljZS5hcHByb3ZlVGFzayhkb2NFbnRyaWVzLCB0aGlzLmFjdGl2ZUxpc3RUeXBlKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0OiAocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlLnN1Y2Nlc3MocmVzdWx0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZHhPcmRlcnNJbnN0YW5jZT8uaW5zdGFuY2U/LnJlZnJlc2goKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZHhPcmRlcnNJbnN0YW5jZT8uaW5zdGFuY2U/LmNsZWFyU2VsZWN0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGVycm9yPy5lcnJvcj8uZXJyb3I/Lm1lc3NhZ2UgfHwgJ09uYXkgdmVyaWxpcmtlbiBiaXIgaGF0YSBvbHXFn3R1Lic7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlLmVycm9yKGVycm9yTWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIOKUgOKUgCBTaXBhcmnFnyhsZXIpaSBzZXZraXlhdGEgc29rbWFkYW4gZG/En3J1ZGFuIGthcGF0IOKUgOKUgFxyXG4gICAgb25TaXBhcmlzS2FwYXQoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkT3JkZXJzIHx8IHRoaXMuc2VsZWN0ZWRPcmRlcnMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RlclNlcnZpY2Uud2FybignTMO8dGZlbiBlbiBheiBiaXIgc2lwYXJpxZ8gc2XDp2luaXouJyk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFwixLDFn2xlbml5b3JcIiAoYWt0aWYgQmVlQ2VsbCBnw7ZyZXZpKSBkdXJ1bXVuZGFraSBzaXBhcmnFn2xlciBrYXBhdMSxbGFtYXpcclxuICAgICAgICBjb25zdCBpbnZhbGlkU3RhdHVzID0gdGhpcy5zZWxlY3RlZE9yZGVycy5maWx0ZXIobyA9PiBvLlVfU1dEdXJ1bSA9PT0gJzInKTtcclxuICAgICAgICBpZiAoaW52YWxpZFN0YXR1cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGRvY051bXMgPSBpbnZhbGlkU3RhdHVzLm1hcChvID0+IG8uRG9jTnVtKS5qb2luKCcsICcpO1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlLmVycm9yKFxyXG4gICAgICAgICAgICAgICAgYMWedSBzaXBhcmnFn2xlciBcIsSwxZ9sZW5peW9yXCIgZHVydW11bmRhIChha3RpZiBnw7ZyZXYgdmFyKTogJHtkb2NOdW1zfS4gw5ZuY2UgZ8O2cmV2aSB0YW1hbWxhecSxbiB5YSBkYSBCZWVDZWxsJ2RlIGlwdGFsIGVkaW4uYFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBkb2NFbnRyaWVzID0gdGhpcy5zZWxlY3RlZE9yZGVycy5tYXAobyA9PiBvLkRvY0VudHJ5KTtcclxuICAgICAgICBjb25zdCBkb2NOdW1zID0gdGhpcy5zZWxlY3RlZE9yZGVycy5tYXAobyA9PiBvLkRvY051bSkuam9pbignLCAnKTtcclxuXHJcbiAgICAgICAgdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlXHJcbiAgICAgICAgICAgIC53YXJuKFxyXG4gICAgICAgICAgICAgICAgYCR7ZG9jTnVtc30gbnVtYXJhbMSxIHNpcGFyacWfbGVyIHNldmtpeWF0YSBzb2t1bG1hZGFuIGRvxJ9ydWRhbiBcIlRhbWFtbGFuZMSxXCIgb2xhcmFrIGthcGF0xLFsYWNhay4gYCArXHJcbiAgICAgICAgICAgICAgICAgICAgJ0hpw6diaXIgc3RvayBoYXJla2V0aS9pcnNhbGl5ZS9mYXR1cmEgb2x1xZ90dXJ1bG1heWFjYWsuIEVtaW4gbWlzaW5pej8nLFxyXG4gICAgICAgICAgICAgICAgJ1NpcGFyacWfIEthcGF0J1xyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHN0YXR1cykgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHN0YXR1cyA9PT0gJ2NvbmZpcm0nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcmRlclNlcnZpY2UuY2xvc2VPcmRlcihkb2NFbnRyaWVzKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0OiAocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlLnN1Y2Nlc3MocmVzdWx0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZHhPcmRlcnNJbnN0YW5jZT8uaW5zdGFuY2U/LnJlZnJlc2goKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZHhPcmRlcnNJbnN0YW5jZT8uaW5zdGFuY2U/LmNsZWFyU2VsZWN0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGVycm9yPy5lcnJvcj8uZXJyb3I/Lm1lc3NhZ2UgfHwgJ1NpcGFyacWfIGthcGF0xLFsxLFya2VuIGJpciBoYXRhIG9sdcWfdHUuJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3RlclNlcnZpY2UuZXJyb3IoZXJyb3JNZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25Cb3NLYXNhR2V0aXIoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5ib3NLYXNhTW9kZSA9ICdlbXB0eSc7XHJcbiAgICAgICAgdGhpcy5ib3NLYXNhUG9wdXBWaXNpYmxlID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBvbllhcmltS2FzYSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmJvc0thc2FNb2RlID0gJ2hhbGYnO1xyXG4gICAgICAgIHRoaXMuYm9zS2FzYVBvcHVwVmlzaWJsZSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgb25Cb3NLYXNhR29uZGVyKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuYm9zS2FzYVBvcHVwVmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaXNCZWVDZWxsTG9hZGluZyA9IHRydWU7XHJcblxyXG4gICAgICAgIGNvbnN0IGNhbGwgPSB0aGlzLmJvc0thc2FNb2RlID09PSAnZW1wdHknXHJcbiAgICAgICAgICAgID8gdGhpcy5vcmRlclNlcnZpY2UuZ2V0RW1wdHlCb3hlcyh0aGlzLmJvc0thc2FTdGF0aW9uSWQsIHRoaXMuYm9zS2FzYVNoZWxmSWQsIHRoaXMuYm9zS2FzYUJveENvdW50LCB0aGlzLnNlbGVjdGVkV2FyZWhvdXNlKVxyXG4gICAgICAgICAgICA6IHRoaXMub3JkZXJTZXJ2aWNlLmdldEhhbGZCb3hlcyh0aGlzLmJvc0thc2FTdGF0aW9uSWQsIHRoaXMuYm9zS2FzYVNoZWxmSWQsIHRoaXMuYm9zS2FzYUJveENvdW50LCB0aGlzLnNlbGVjdGVkV2FyZWhvdXNlKTtcclxuXHJcbiAgICAgICAgY2FsbC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICBuZXh0OiAocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlLnN1Y2Nlc3MocmVzdWx0KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNCZWVDZWxsTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlcnJvcj8uZXJyb3I/LmVycm9yPy5tZXNzYWdlIHx8ICdCZWVDZWxsIGfDtnJldmkgb2x1xZ90dXJ1bHVya2VuIGhhdGEgb2x1xZ90dS4nO1xyXG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdGVyU2VydmljZS5lcnJvcihlcnJvck1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0JlZUNlbGxMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25EdXJ1bUd1bmNlbGxlKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICghdGhpcy5zZWxlY3RlZE9yZGVycyB8fCB0aGlzLnNlbGVjdGVkT3JkZXJzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlLndhcm4oJ0zDvHRmZW4gZW4gYXogYmlyIHNpcGFyacWfIHNlw6dpbml6LicpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBkb2NFbnRyaWVzID0gdGhpcy5zZWxlY3RlZE9yZGVycy5tYXAobyA9PiBvLkRvY0VudHJ5KTtcclxuICAgICAgICB0aGlzLmlzQmVlQ2VsbExvYWRpbmcgPSB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLm9yZGVyU2VydmljZS51cGRhdGVUYXNrU3RhdHVzKGRvY0VudHJpZXMpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgIG5leHQ6IChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMudG9hc3RlclNlcnZpY2Uuc3VjY2VzcyhyZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0JlZUNlbGxMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmR4T3JkZXJzSW5zdGFuY2U/Lmluc3RhbmNlPy5yZWZyZXNoKCk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGVycm9yPy5lcnJvcj8uZXJyb3I/Lm1lc3NhZ2UgfHwgJ0R1cnVtIGfDvG5jZWxsZW5pcmtlbiBoYXRhIG9sdcWfdHUuJztcclxuICAgICAgICAgICAgICAgIHRoaXMudG9hc3RlclNlcnZpY2UuZXJyb3IoZXJyb3JNZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNCZWVDZWxsTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIOKUgOKUgCBTZcOnaWxpIHNpcGFyacWfbGVyIGnDp2luIHJlemVydmFzeW9uIHlhcCDilIDilIBcclxuICAgIG9uUmV6ZXJ2YXN5b25ZYXAoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkT3JkZXJzIHx8IHRoaXMuc2VsZWN0ZWRPcmRlcnMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RlclNlcnZpY2Uud2FybignTMO8dGZlbiBlbiBheiBiaXIgc2lwYXJpxZ8gc2XDp2luaXouJyk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5zZWxlY3RlZFdhcmVob3VzZSkge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlLndhcm4oJ0zDvHRmZW4gYmlyIGRlcG8gc2XDp2luaXouJyk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFNhZGVjZSBCZWtsZW1lZGUgKDApIHNpcGFyacWfbGVyIGnDp2luIHJlemVydmFzeW9uIHlhcMSxbGFiaWxpclxyXG4gICAgICAgIGNvbnN0IGludmFsaWRTdGF0dXMgPSB0aGlzLnNlbGVjdGVkT3JkZXJzLmZpbHRlcihcclxuICAgICAgICAgICAgbyA9PiBvLlVfU1dEdXJ1bSAmJiBvLlVfU1dEdXJ1bSAhPT0gJzAnXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoaW52YWxpZFN0YXR1cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGRvY051bXMgPSBpbnZhbGlkU3RhdHVzLm1hcChvID0+IG8uRG9jTnVtKS5qb2luKCcsICcpO1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlLmVycm9yKFxyXG4gICAgICAgICAgICAgICAgYMWedSBzaXBhcmnFn2xlcmluIGR1cnVtdSBcIkJla2xlbWVkZVwiIGRlxJ9pbDogJHtkb2NOdW1zfS4gU2FkZWNlIGJla2xlbWVkZSBvbGFuIHNpcGFyacWfbGVyIGnDp2luIHJlemVydmFzeW9uIHlhcMSxbGFiaWxpci5gXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGRvY0VudHJpZXMgPSB0aGlzLnNlbGVjdGVkT3JkZXJzLm1hcChvID0+IG8uRG9jRW50cnkpO1xyXG4gICAgICAgIHRoaXMuaXNSZXNlcnZhdGlvbkxvYWRpbmcgPSB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLm9yZGVyU2VydmljZS5yZXNlcnZlT3JkZXJzKGRvY0VudHJpZXMsIHRoaXMuc2VsZWN0ZWRXYXJlaG91c2UpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgIG5leHQ6IChyZXN1bHQ6IFJlc2VydmF0aW9uUmVzdWx0RHRvKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVJlc2VydmF0aW9uUmVzdWx0KHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzUmVzZXJ2YXRpb25Mb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmR4T3JkZXJzSW5zdGFuY2U/Lmluc3RhbmNlPy5yZWZyZXNoKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmR4T3JkZXJzSW5zdGFuY2U/Lmluc3RhbmNlPy5jbGVhclNlbGVjdGlvbigpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlcnJvcj8uZXJyb3I/LmVycm9yPy5tZXNzYWdlIHx8ICdSZXplcnZhc3lvbiB5YXDEsWzEsXJrZW4gYmlyIGhhdGEgb2x1xZ90dS4nO1xyXG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdGVyU2VydmljZS5lcnJvcihlcnJvck1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1Jlc2VydmF0aW9uTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIOKUgOKUgCBTZcOnaWxpIHNpcGFyacWfbGVyaW4gcmV6ZXJ2YXN5b25sYXLEsW7EsSBzaWwg4pSA4pSAXHJcbiAgICBvblJlemVydmFzeW9uU2lsKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICghdGhpcy5zZWxlY3RlZE9yZGVycyB8fCB0aGlzLnNlbGVjdGVkT3JkZXJzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlLndhcm4oJ0zDvHRmZW4gZW4gYXogYmlyIHNpcGFyacWfIHNlw6dpbml6LicpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBkb2NFbnRyaWVzID0gdGhpcy5zZWxlY3RlZE9yZGVycy5tYXAobyA9PiBvLkRvY0VudHJ5KTtcclxuICAgICAgICBjb25zdCBkb2NOdW1zID0gdGhpcy5zZWxlY3RlZE9yZGVycy5tYXAobyA9PiBvLkRvY051bSkuam9pbignLCAnKTtcclxuXHJcbiAgICAgICAgdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlXHJcbiAgICAgICAgICAgIC53YXJuKGAke2RvY051bXN9IG51bWFyYWzEsSBzaXBhcmnFn2xlcmluIHJlemVydmFzeW9ubGFyxLEgaXB0YWwgZWRpbGVjZWt0aXIuIEVtaW4gbWlzaW5pej9gLCAnUmV6ZXJ2YXN5b24gxLBwdGFsJylcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgoc3RhdHVzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc3RhdHVzID09PSAnY29uZmlybScpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzUmVzZXJ2YXRpb25Mb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9yZGVyU2VydmljZS5jYW5jZWxSZXNlcnZhdGlvbnMoZG9jRW50cmllcykuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dDogKHJlc3VsdDogUmVzZXJ2YXRpb25SZXN1bHREdG8pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlUmVzZXJ2YXRpb25SZXN1bHQocmVzdWx0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNSZXNlcnZhdGlvbkxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZHhPcmRlcnNJbnN0YW5jZT8uaW5zdGFuY2U/LnJlZnJlc2goKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZHhPcmRlcnNJbnN0YW5jZT8uaW5zdGFuY2U/LmNsZWFyU2VsZWN0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGVycm9yPy5lcnJvcj8uZXJyb3I/Lm1lc3NhZ2UgfHwgJ1JlemVydmFzeW9uIGlwdGFsIGVkaWxpcmtlbiBiaXIgaGF0YSBvbHXFn3R1Lic7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlLmVycm9yKGVycm9yTWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzUmVzZXJ2YXRpb25Mb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIOKUgOKUgCBUb3BsdSByZXplcnZhc3lvbiB5YXAgKHTDvG0gdXlndW4gc2lwYXJpxZ9sZXIpIOKUgOKUgFxyXG4gICAgb25Ub3BsdVJlemVydmFzeW9uWWFwKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICghdGhpcy5zZWxlY3RlZFdhcmVob3VzZSkge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlLndhcm4oJ0zDvHRmZW4gYmlyIGRlcG8gc2XDp2luaXouJyk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFphdGVuIHJlemVydmFzeW9udSBvbGFuIHNpcGFyacWfbGVyIGnDp2luIGt1bGxhbsSxY8SxeWEgc2XDp2ltIHN1bjpcclxuICAgICAgICAvLyAgLSBcIlllbmlkZW4gSGVzYXBsYVwiIChjb25maXJtKSDihpIgbWV2Y3V0IHJlemVydmFzeW9ubGFyxLEgc2lsaXAgeWVuaWRlbiBrdXJhciAob3ZlcndyaXRlRXhpc3Rpbmc9dHJ1ZSlcclxuICAgICAgICAvLyAgLSBcIlNhZGVjZSBZZW5pIFNpcGFyacWfbGVyXCIgKHJlamVjdCkg4oaSIG1ldmN1dGxhcsSxIGtvcnVyLCB5YWxuxLF6Y2EgcmV6ZXJ2YXN5b25zdXpsYXLEsSBpxZ9sZXIgKGZhbHNlKVxyXG4gICAgICAgIC8vICAtIERpeWFsb8SfdSBrYXBhdG1hIChkaXNtaXNzKSDihpIgacWfbGVtaSBpcHRhbCBlZGVyXHJcbiAgICAgICAgdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlXHJcbiAgICAgICAgICAgIC53YXJuKFxyXG4gICAgICAgICAgICAgICAgJ1phdGVuIHJlemVydmFzeW9udSBvbGFuIHNpcGFyacWfbGVyIGnDp2luIG5lIHlhcMSxbHPEsW4/IFwiWWVuaWRlbiBIZXNhcGxhXCIgbWV2Y3V0IHJlemVydmFzeW9ubGFyxLEgc2lsaXAgeWVuaWRlbiBrdXJhcjsgJyArXHJcbiAgICAgICAgICAgICAgICAgICAgJ1wiU2FkZWNlIFllbmkgU2lwYXJpxZ9sZXJcIiBtZXZjdXRsYXLEsSBrb3J1ciB2ZSB5YWxuxLF6Y2EgcmV6ZXJ2YXN5b25zdXogc2lwYXJpxZ9sZXJpIGnFn2xlci4nLFxyXG4gICAgICAgICAgICAgICAgJ1RvcGx1IFJlemVydmFzeW9uJyxcclxuICAgICAgICAgICAgICAgIHsgeWVzVGV4dDogJ1llbmlkZW4gSGVzYXBsYScsIGNhbmNlbFRleHQ6ICdTYWRlY2UgWWVuaSBTaXBhcmnFn2xlcicsIGRpc21pc3NpYmxlOiB0cnVlIH1cclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChzdGF0dXMpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgPT09ICdkaXNtaXNzJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjsgLy8gaXB0YWxcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBvdmVyd3JpdGVFeGlzdGluZyA9IHN0YXR1cyA9PT0gJ2NvbmZpcm0nO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuaXNSZXNlcnZhdGlvbkxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vcmRlclNlcnZpY2UucmVzZXJ2ZUFsbE9yZGVycyh0aGlzLnNlbGVjdGVkV2FyZWhvdXNlLCB0aGlzLmFjdGl2ZUxpc3RUeXBlLCBvdmVyd3JpdGVFeGlzdGluZykuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICAgICAgICBuZXh0OiAocmVzdWx0OiBSZXNlcnZhdGlvblJlc3VsdER0bykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVJlc2VydmF0aW9uUmVzdWx0KHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNSZXNlcnZhdGlvbkxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5keE9yZGVyc0luc3RhbmNlPy5pbnN0YW5jZT8ucmVmcmVzaCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmR4T3JkZXJzSW5zdGFuY2U/Lmluc3RhbmNlPy5jbGVhclNlbGVjdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlcnJvcj8uZXJyb3I/LmVycm9yPy5tZXNzYWdlIHx8ICdUb3BsdSByZXplcnZhc3lvbiB5YXDEsWzEsXJrZW4gYmlyIGhhdGEgb2x1xZ90dS4nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlLmVycm9yKGVycm9yTWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNSZXNlcnZhdGlvbkxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIOKUgOKUgCBUb3BsdSByZXplcnZhc3lvbiBzaWwgKHTDvG0gYWt0aWYgcmV6ZXJ2YXN5b25sYXIpIOKUgOKUgFxyXG4gICAgb25UdW1SZXplcnZhc3lvbmxhcmlTaWwoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlXHJcbiAgICAgICAgICAgIC53YXJuKCdUw7xtIGFrdGlmIHJlemVydmFzeW9ubGFyIHNpbGluZWNla3Rpci4gRW1pbiBtaXNpbml6PycsICdUw7xtIFJlemVydmFzeW9ubGFyxLEgU2lsJylcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgoc3RhdHVzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc3RhdHVzID09PSAnY29uZmlybScpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzUmVzZXJ2YXRpb25Mb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9yZGVyU2VydmljZS5jYW5jZWxBbGxSZXNlcnZhdGlvbnModGhpcy5hY3RpdmVMaXN0VHlwZSkuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dDogKHJlc3VsdDogUmVzZXJ2YXRpb25SZXN1bHREdG8pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlUmVzZXJ2YXRpb25SZXN1bHQocmVzdWx0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNSZXNlcnZhdGlvbkxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZHhPcmRlcnNJbnN0YW5jZT8uaW5zdGFuY2U/LnJlZnJlc2goKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZHhPcmRlcnNJbnN0YW5jZT8uaW5zdGFuY2U/LmNsZWFyU2VsZWN0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGVycm9yPy5lcnJvcj8uZXJyb3I/Lm1lc3NhZ2UgfHwgJ1JlemVydmFzeW9ubGFyIHNpbGluaXJrZW4gYmlyIGhhdGEgb2x1xZ90dS4nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdGVyU2VydmljZS5lcnJvcihlcnJvck1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1Jlc2VydmF0aW9uTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBNQVhfU0hPUlRfSVRFTVNfREVUQUlMRUQgPSA1O1xyXG5cclxuICAgIHByaXZhdGUgaGFuZGxlUmVzZXJ2YXRpb25SZXN1bHQocmVzdWx0OiBSZXNlcnZhdGlvblJlc3VsdER0byk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHNob3J0c09yZGVycyA9IHJlc3VsdC5PcmRlclJlc3VsdHM/LmZpbHRlcihyID0+IHIuU2hvcnRzICYmIHIuU2hvcnRzLmxlbmd0aCA+IDApIHx8IFtdO1xyXG4gICAgICAgIGNvbnN0IGhhc1Nob3J0cyA9IHNob3J0c09yZGVycy5sZW5ndGggPiAwO1xyXG5cclxuICAgICAgICBpZiAocmVzdWx0LkZhaWxDb3VudCA9PT0gMCAmJiAhaGFzU2hvcnRzKSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RlclNlcnZpY2Uuc3VjY2VzcyhyZXN1bHQuU3VtbWFyeSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQuU3VjY2Vzc0NvdW50ID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlLndhcm4ocmVzdWx0LlN1bW1hcnkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RlclNlcnZpY2UuZXJyb3IocmVzdWx0LlN1bW1hcnkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gRWtzaWsga2FsZW1sZXIgdmFyc2EgZGV0YXkgZ8O2c3RlclxyXG4gICAgICAgIGlmIChoYXNTaG9ydHMpIHtcclxuICAgICAgICAgICAgY29uc3QgdG90YWxTaG9ydEl0ZW1zID0gc2hvcnRzT3JkZXJzLnJlZHVjZSgoc3VtLCBvKSA9PiBzdW0gKyBvLlNob3J0cy5sZW5ndGgsIDApO1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgc2hvcnRNZXNzYWdlID0gdG90YWxTaG9ydEl0ZW1zID4gT3JkZXJzQ29tcG9uZW50Lk1BWF9TSE9SVF9JVEVNU19ERVRBSUxFRFxyXG4gICAgICAgICAgICAgICAgPyBgS2FsZW0gbWlrdGFybGFyxLEgZWtzaWsgKCR7c2hvcnRzT3JkZXJzLmxlbmd0aH0gc2lwYXJpxZ8sICR7dG90YWxTaG9ydEl0ZW1zfSBrYWxlbSkuYFxyXG4gICAgICAgICAgICAgICAgOiBgRWtzaWsgS2FsZW1sZXI6XFxuJHtzaG9ydHNPcmRlcnNcclxuICAgICAgICAgICAgICAgICAgICAgIC5tYXAobyA9PiBgU2lwYXJpxZ8gJHtvLkRvY051bX06ICR7by5TaG9ydHMubWFwKHMgPT4gYCR7cy5JdGVtQ29kZX0gKGVrc2lrOiAke3MuU2hvcnRRdHl9KWApLmpvaW4oJywgJyl9YClcclxuICAgICAgICAgICAgICAgICAgICAgIC5qb2luKCdcXG4nKX1gO1xyXG5cclxuICAgICAgICAgICAgdGhpcy50b2FzdGVyU2VydmljZS53YXJuKHNob3J0TWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uUmVmcmVzaCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmR4T3JkZXJzSW5zdGFuY2U/Lmluc3RhbmNlPy5yZWZyZXNoKCk7XHJcbiAgICB9XHJcblxyXG4gICAgb25FeHBvcnRFeGNlbCgpOiB2b2lkIHtcclxuICAgICAgICAvLyBUT0RPOiBJbXBsZW1lbnRcclxuICAgIH1cclxufVxyXG4iLCI8YWJwLXBhZ2UgW3RpdGxlXT1cIidTbWFydFdhcmVob3VzZTo6T3JkZXJzJyB8IGFicExvY2FsaXphdGlvblwiPlxyXG5cclxuICA8IS0tIFRvb2xiYXIgLS0+XHJcbiAgPGRpdiBjbGFzcz1cIm9yZGVycy10b29sYmFyXCI+XHJcbiAgICA8IS0tIFJvdyAxOiBGaWx0ZXJzIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cInRvb2xiYXItcm93XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0b29sYmFyLWdyb3VwXCI+XHJcbiAgICAgICAgPGxhYmVsPlNpcGFyacWfIEdydWJ1PC9sYWJlbD5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic3RhdHVzLWdyb3VwXCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInN0YXR1cy1jaGlwIGxpc3QtcHVyY2hhc2VcIiBbY2xhc3MuYWN0aXZlXT1cImFjdGl2ZUxpc3RUeXBlID09PSAnMSdcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUxpc3RUeXBlKCcxJylcIj5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1zaG9wcGluZy1jYXJ0XCI+PC9pPiBTYW5heWkgU2lwYXJpxZ9sZXJpXHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInN0YXR1cy1jaGlwIGxpc3QtZGlzdHJpYnV0aW9uXCIgW2NsYXNzLmFjdGl2ZV09XCJhY3RpdmVMaXN0VHlwZSA9PT0gJzInXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVMaXN0VHlwZSgnMicpXCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtdHJ1Y2tcIj48L2k+IERhxJ/EsXTEsW0gU2lwYXJpxZ9sZXJpXHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInN0YXR1cy1jaGlwIGxpc3Qtd2FyZWhvdXNlXCIgW2NsYXNzLmFjdGl2ZV09XCJhY3RpdmVMaXN0VHlwZSA9PT0gJzMnXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVMaXN0VHlwZSgnMycpXCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtd2FyZWhvdXNlXCI+PC9pPiBEZXBvIFRhbGVwbGVyaVxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0b29sYmFyLWdyb3VwIHRvb2xiYXItZ3JvdXAtLWR1cnVtXCI+XHJcbiAgICAgICAgPGxhYmVsPkR1cnVtPC9sYWJlbD5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic3RhdHVzLWdyb3VwXCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInN0YXR1cy1jaGlwIHBlbmRpbmdcIiBbY2xhc3MuYWN0aXZlXT1cImFjdGl2ZVN0YXR1cyA9PT0gJ2Jla2xlbWVkZSdcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVN0YXR1cygnYmVrbGVtZWRlJylcIj5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jbG9ja1wiPjwvaT4gQmVrbGVtZWRlXHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInN0YXR1cy1jaGlwIHByb2Nlc3NpbmdcIiBbY2xhc3MuYWN0aXZlXT1cImFjdGl2ZVN0YXR1cyA9PT0gJ2lzbGVuaXlvcidcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVN0YXR1cygnaXNsZW5peW9yJylcIj5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1zcGlubmVyXCI+PC9pPiDEsMWfbGVuaXlvclxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdGF0dXMtY2hpcCBhd2FpdGluZ1wiIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlU3RhdHVzID09PSAnb25heUJla2xpeW9yJ1wiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlU3RhdHVzKCdvbmF5QmVrbGl5b3InKVwiPlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWhvdXJnbGFzcy1oYWxmXCI+PC9pPiBPbmF5IEJla2xpeW9yXHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInN0YXR1cy1jaGlwIGNvbXBsZXRlZFwiIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlU3RhdHVzID09PSAndGFtYW1sYW5kaSdcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVN0YXR1cygndGFtYW1sYW5kaScpXCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY2hlY2stY2lyY2xlXCI+PC9pPiBUYW1hbWxhbmTEsVxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0b29sYmFyLWdyb3VwIHRvb2xiYXItZ3JvdXAtLWRlcG9cIj5cclxuICAgICAgICA8bGFiZWw+RGVwbzwvbGFiZWw+XHJcbiAgICAgICAgPHNlbGVjdCBbKG5nTW9kZWwpXT1cInNlbGVjdGVkV2FyZWhvdXNlXCIgY2xhc3M9XCJmb3JtLXNlbGVjdFwiPlxyXG4gICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPlTDvG3DvDwvb3B0aW9uPlxyXG4gICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgd2ggb2Ygd2FyZWhvdXNlc1wiIFt2YWx1ZV09XCJ3aC5XaHNDb2RlXCI+e3sgd2guV2hzTmFtZSB9fTwvb3B0aW9uPlxyXG4gICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxociBjbGFzcz1cInRvb2xiYXItZGl2aWRlclwiIC8+XHJcblxyXG4gICAgPCEtLSBSb3cgMzogQWN0aW9uIGlucHV0ICsgcmVsYXRlZCBidXR0b25zIHwgUmVzZXJ2YXRpb24gfCBSZWZyZXNoL0V4Y2VsIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cInRvb2xiYXItcm93XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb24tZ3JvdXBcIj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1hY3Rpb24tcHJpbWFyeSBidG4tc21cIiAoY2xpY2spPVwib25Hb3JldkJhc2xhdCgpXCIgW2Rpc2FibGVkXT1cImlzR29yZXZCYXNsYXRMb2FkaW5nXCI+XHJcbiAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXBsdXMtY2lyY2xlXCI+PC9pPiBHw7ZyZXYgQmHFn2xhdFxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWFjdGlvbi1hcHByb3ZlIGJ0bi1zbVwiIChjbGljayk9XCJvbk9uYXlWZXIoKVwiXHJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWNhbk9uYXlWZXJcIiBbdGl0bGVdPVwib25heVZlclRvb2x0aXBcIj5cclxuICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtdGh1bWJzLXVwXCI+PC9pPiBHw7ZyZXZpIFRhbWFtbGFcclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1hY3Rpb24tZGFuZ2VyIGJ0bi1zbVwiIChjbGljayk9XCJvblNpcGFyaXNLYXBhdCgpXCJcclxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhY2FuU2lwYXJpc0thcGF0XCIgW3RpdGxlXT1cInNpcGFyaXNLYXBhdFRvb2x0aXBcIj5cclxuICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtdGltZXMtY2lyY2xlXCI+PC9pPiBTaXBhcmnFnyBLYXBhdFxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWFjdGlvbi1zeW5jIGJ0bi1zbVwiIChjbGljayk9XCJvbkR1cnVtR3VuY2VsbGUoKVwiIFtkaXNhYmxlZF09XCJpc0JlZUNlbGxMb2FkaW5nXCI+XHJcbiAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXN5bmMtYWx0XCI+PC9pPiBEdXJ1bSBHw7xuY2VsbGVcclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1hY3Rpb24taW5mbyBidG4tc21cIiAoY2xpY2spPVwib25Cb3NLYXNhR2V0aXIoKVwiIFtkaXNhYmxlZF09XCJpc0JlZUNlbGxMb2FkaW5nXCI+XHJcbiAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWJveC1vcGVuXCI+PC9pPiBCb8WfIEthc2EgR2V0aXJcclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1hY3Rpb24td2FybmluZyBidG4tc21cIiAoY2xpY2spPVwib25ZYXJpbUthc2EoKVwiIFtkaXNhYmxlZF09XCJpc0JlZUNlbGxMb2FkaW5nXCI+XHJcbiAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWJveFwiPjwvaT4gWWFyxLFtIEthc2EgR2V0aXJcclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImFjdGlvbi1kaXZpZGVyXCI+PC9zcGFuPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWFjdGlvbi1yZXNlcnZhdGlvbiBidG4tc21cIiAoY2xpY2spPVwib25SZXplcnZhc3lvbllhcCgpXCIgW2Rpc2FibGVkXT1cImlzUmVzZXJ2YXRpb25Mb2FkaW5nXCI+XHJcbiAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWxvY2tcIj48L2k+IFJlemVydmFzeW9uIFlhcFxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWFjdGlvbi1yZXNlcnZhdGlvbi1jYW5jZWwgYnRuLXNtXCIgKGNsaWNrKT1cIm9uUmV6ZXJ2YXN5b25TaWwoKVwiIFtkaXNhYmxlZF09XCJpc1Jlc2VydmF0aW9uTG9hZGluZ1wiPlxyXG4gICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS11bmxvY2tcIj48L2k+IFJlemVydmFzeW9uIFNpbFxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWFjdGlvbi1yZXNlcnZhdGlvbi1idWxrIGJ0bi1zbVwiIChjbGljayk9XCJvblRvcGx1UmV6ZXJ2YXN5b25ZYXAoKVwiIFtkaXNhYmxlZF09XCJpc1Jlc2VydmF0aW9uTG9hZGluZ1wiPlxyXG4gICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1sb2NrXCI+PC9pPiBUb3BsdSBSZXouIFlhcFxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWFjdGlvbi1yZXNlcnZhdGlvbi1idWxrLWNhbmNlbCBidG4tc21cIiAoY2xpY2spPVwib25UdW1SZXplcnZhc3lvbmxhcmlTaWwoKVwiIFtkaXNhYmxlZF09XCJpc1Jlc2VydmF0aW9uTG9hZGluZ1wiPlxyXG4gICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS11bmxvY2tcIj48L2k+IFRvcGx1IFJlei4gU2lsXHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJhY3Rpb24tZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1hY3Rpb24tc2Vjb25kYXJ5IGJ0bi1zbVwiIChjbGljayk9XCJvblJlZnJlc2goKVwiPlxyXG4gICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1yZWRvXCI+PC9pPiBZZW5pbGVcclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPCEtLSBEYXRhIEdyaWQgLS0+XHJcbiAgPGRpdiBjbGFzcz1cImNhcmQgb3JkZXJzLWdyaWQtY2FyZFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxyXG4gICAgICA8ZHgtZGF0YS1ncmlkXHJcbiAgICAgICAgI2R4T3JkZXJzSW5zdGFuY2VcclxuICAgICAgICBbZGF0YVNvdXJjZV09XCJvcmRlcnNEYXRhU291cmNlXCJcclxuICAgICAgICBbc2hvd1Jvd0xpbmVzXT1cInRydWVcIlxyXG4gICAgICAgIFtzaG93Qm9yZGVyc109XCJ0cnVlXCJcclxuICAgICAgICBbcmVtb3RlT3BlcmF0aW9uc109XCJ0cnVlXCJcclxuICAgICAgICBbaG92ZXJTdGF0ZUVuYWJsZWRdPVwidHJ1ZVwiXHJcbiAgICAgICAgW3JlcGFpbnRDaGFuZ2VzT25seV09XCJ0cnVlXCJcclxuICAgICAgICBbYWxsb3dDb2x1bW5SZXNpemluZ109XCJ0cnVlXCJcclxuICAgICAgICBjb2x1bW5SZXNpemluZ01vZGU9XCJ3aWRnZXRcIlxyXG4gICAgICAgIFthbGxvd0NvbHVtblJlb3JkZXJpbmddPVwidHJ1ZVwiXHJcbiAgICAgICAgW2NvbHVtbkF1dG9XaWR0aF09XCJ0cnVlXCJcclxuICAgICAgICBbY29sdW1uSGlkaW5nRW5hYmxlZF09XCJ0cnVlXCJcclxuICAgICAgICAob25Sb3dDbGljayk9XCJvblJvd0NsaWNrKCRldmVudClcIlxyXG4gICAgICAgIChvblNlbGVjdGlvbkNoYW5nZWQpPVwib25TZWxlY3Rpb25DaGFuZ2VkKCRldmVudClcIlxyXG4gICAgICAgIChvblJvd1ByZXBhcmVkKT1cIm9uUm93UHJlcGFyZWQoJGV2ZW50KVwiXHJcbiAgICAgICAgc3R5bGU9XCJoZWlnaHQ6IDYwdmhcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPGR4by1wYWdlclxyXG4gICAgICAgICAgW3Zpc2libGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICBbc2hvd0luZm9dPVwidHJ1ZVwiXHJcbiAgICAgICAgICBbYWxsb3dlZFBhZ2VTaXplc109XCJbNSwgMTAsIDIwXVwiXHJcbiAgICAgICAgICBbc2hvd05hdmlnYXRpb25CdXR0b25zXT1cInRydWVcIlxyXG4gICAgICAgICAgW3Nob3dQYWdlU2l6ZVNlbGVjdG9yXT1cInRydWVcIlxyXG4gICAgICAgID5cclxuICAgICAgICA8L2R4by1wYWdlcj5cclxuICAgICAgICA8ZHhvLXBhZ2luZyBbcGFnZVNpemVdPVwiMTBcIj48L2R4by1wYWdpbmc+XHJcbiAgICAgICAgPGR4by1jb2x1bW4tY2hvb3NlclxyXG4gICAgICAgICAgW2FsbG93U2VhcmNoXT1cInRydWVcIlxyXG4gICAgICAgICAgW2VuYWJsZWRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICBtb2RlPVwic2VsZWN0XCJcclxuICAgICAgICA+PC9keG8tY29sdW1uLWNob29zZXI+XHJcbiAgICAgICAgPGR4by1jb2x1bW4tZml4aW5nIFtlbmFibGVkXT1cInRydWVcIj48L2R4by1jb2x1bW4tZml4aW5nPlxyXG4gICAgICAgIDxkeG8taGVhZGVyLWZpbHRlciBbYWxsb3dTZWFyY2hdPVwidHJ1ZVwiIFt2aXNpYmxlXT1cInRydWVcIj48L2R4by1oZWFkZXItZmlsdGVyPlxyXG4gICAgICAgIDxkeG8tZmlsdGVyLXJvdyBbdmlzaWJsZV09XCJ0cnVlXCI+PC9keG8tZmlsdGVyLXJvdz5cclxuICAgICAgICA8ZHhvLWV4cG9ydCBbZW5hYmxlZF09XCJ0cnVlXCIgW2FsbG93RXhwb3J0U2VsZWN0ZWREYXRhXT1cImZhbHNlXCI+PC9keG8tZXhwb3J0PlxyXG4gICAgICAgIDxkeG8tZmlsdGVyLWJ1aWxkZXIgW2FsbG93SGllcmFyY2hpY2FsRmllbGRzXT1cInRydWVcIj48L2R4by1maWx0ZXItYnVpbGRlcj5cclxuICAgICAgICA8ZHhvLWZpbHRlci1wYW5lbCBbdmlzaWJsZV09XCJ0cnVlXCI+PC9keG8tZmlsdGVyLXBhbmVsPlxyXG4gICAgICAgIDxkeG8tc29ydGluZyBtb2RlPVwic2luZ2xlXCI+PC9keG8tc29ydGluZz5cclxuICAgICAgICA8ZHhvLXNjcm9sbGluZyBtb2RlPVwic3RhbmRhcmRcIiBzaG93U2Nyb2xsYmFyPVwiYWx3YXlzXCI+PC9keG8tc2Nyb2xsaW5nPlxyXG4gICAgICAgIDxkeG8tc2VsZWN0aW9uXHJcbiAgICAgICAgICBtb2RlPVwibXVsdGlwbGVcIlxyXG4gICAgICAgICAgc2hvd0NoZWNrQm94ZXNNb2RlPVwiYWx3YXlzXCJcclxuICAgICAgICAgIFthbGxvd1NlbGVjdEFsbF09XCJ0cnVlXCJcclxuICAgICAgICA+PC9keG8tc2VsZWN0aW9uPlxyXG5cclxuICAgICAgICA8ZHhpLWNvbHVtblxyXG4gICAgICAgICAgZGF0YUZpZWxkPVwiRG9jTnVtXCJcclxuICAgICAgICAgIGNhcHRpb249XCJ7eyAnU21hcnRXYXJlaG91c2U6Ok9yZGVyOkRvY051bScgfCBhYnBMb2NhbGl6YXRpb24gfX1cIlxyXG4gICAgICAgICAgW3dpZHRoXT1cIjExMFwiXHJcbiAgICAgICAgPjwvZHhpLWNvbHVtbj5cclxuICAgICAgICA8ZHhpLWNvbHVtblxyXG4gICAgICAgICAgZGF0YUZpZWxkPVwiQ2FyZENvZGVcIlxyXG4gICAgICAgICAgY2FwdGlvbj1cInt7ICdTbWFydFdhcmVob3VzZTo6T3JkZXI6Q2FyZENvZGUnIHwgYWJwTG9jYWxpemF0aW9uIH19XCJcclxuICAgICAgICAgIFt3aWR0aF09XCIxNDBcIlxyXG4gICAgICAgID48L2R4aS1jb2x1bW4+XHJcbiAgICAgICAgPGR4aS1jb2x1bW5cclxuICAgICAgICAgIGRhdGFGaWVsZD1cIkNhcmROYW1lXCJcclxuICAgICAgICAgIGNhcHRpb249XCJ7eyAnU21hcnRXYXJlaG91c2U6Ok9yZGVyOkNhcmROYW1lJyB8IGFicExvY2FsaXphdGlvbiB9fVwiXHJcbiAgICAgICAgICBbd2lkdGhdPVwiMjIwXCJcclxuICAgICAgICA+PC9keGktY29sdW1uPlxyXG4gICAgICAgIDxkeGktY29sdW1uXHJcbiAgICAgICAgICBkYXRhRmllbGQ9XCJEb2NEYXRlXCJcclxuICAgICAgICAgIGNhcHRpb249XCJ7eyAnU21hcnRXYXJlaG91c2U6Ok9yZGVyOkRvY0RhdGUnIHwgYWJwTG9jYWxpemF0aW9uIH19XCJcclxuICAgICAgICAgIGRhdGFUeXBlPVwiZGF0ZVwiXHJcbiAgICAgICAgICBmb3JtYXQ9XCJkZC5NTS55eXl5XCJcclxuICAgICAgICAgIFt3aWR0aF09XCIxMjBcIlxyXG4gICAgICAgID48L2R4aS1jb2x1bW4+XHJcbiAgICAgICAgPGR4aS1jb2x1bW5cclxuICAgICAgICAgIGRhdGFGaWVsZD1cIkRvY0R1ZURhdGVcIlxyXG4gICAgICAgICAgY2FwdGlvbj1cInt7ICdTbWFydFdhcmVob3VzZTo6T3JkZXI6RG9jRHVlRGF0ZScgfCBhYnBMb2NhbGl6YXRpb24gfX1cIlxyXG4gICAgICAgICAgZGF0YVR5cGU9XCJkYXRlXCJcclxuICAgICAgICAgIGZvcm1hdD1cImRkLk1NLnl5eXlcIlxyXG4gICAgICAgICAgW3dpZHRoXT1cIjEyMFwiXHJcbiAgICAgICAgPjwvZHhpLWNvbHVtbj5cclxuICAgICAgICA8ZHhpLWNvbHVtblxyXG4gICAgICAgICAgZGF0YUZpZWxkPVwiVV9TV1RhbGVwVGFyaWhpXCJcclxuICAgICAgICAgIGNhcHRpb249XCJ7eyAnU21hcnRXYXJlaG91c2U6Ok9yZGVyOlVfU1dUYWxlcFRhcmloaScgfCBhYnBMb2NhbGl6YXRpb24gfX1cIlxyXG4gICAgICAgICAgZGF0YVR5cGU9XCJkYXRlXCJcclxuICAgICAgICAgIGZvcm1hdD1cImRkLk1NLnl5eXlcIlxyXG4gICAgICAgICAgW3dpZHRoXT1cIjEzMFwiXHJcbiAgICAgICAgPjwvZHhpLWNvbHVtbj5cclxuICAgICAgICA8ZHhpLWNvbHVtblxyXG4gICAgICAgICAgZGF0YUZpZWxkPVwiVV9TV0R1cnVtXCJcclxuICAgICAgICAgIGNhcHRpb249XCJ7eyAnU21hcnRXYXJlaG91c2U6Ok9yZGVyOlVfU1dEdXJ1bScgfCBhYnBMb2NhbGl6YXRpb24gfX1cIlxyXG4gICAgICAgICAgW3dpZHRoXT1cIjExMFwiXHJcbiAgICAgICAgICBjZWxsVGVtcGxhdGU9XCJzd0R1cnVtVGVtcGxhdGVcIlxyXG4gICAgICAgID48L2R4aS1jb2x1bW4+XHJcbiAgICAgICAgPGR4aS1jb2x1bW5cclxuICAgICAgICAgIGRhdGFGaWVsZD1cIlVfU1dJc0Vycm9yXCJcclxuICAgICAgICAgIGNhcHRpb249XCJ7eyAnU21hcnRXYXJlaG91c2U6Ok9yZGVyOlVfU1dJc0Vycm9yJyB8IGFicExvY2FsaXphdGlvbiB9fVwiXHJcbiAgICAgICAgICBbd2lkdGhdPVwiNTBcIlxyXG4gICAgICAgICAgY2VsbFRlbXBsYXRlPVwiZXJyb3JUZW1wbGF0ZVwiXHJcbiAgICAgICAgPjwvZHhpLWNvbHVtbj5cclxuICAgICAgICA8ZHhpLWNvbHVtblxyXG4gICAgICAgICAgZGF0YUZpZWxkPVwiVV9TV0Vycm9yTWVzc2FnZVwiXHJcbiAgICAgICAgICBjYXB0aW9uPVwie3sgJ1NtYXJ0V2FyZWhvdXNlOjpPcmRlcjpVX1NXRXJyb3JNZXNzYWdlJyB8IGFicExvY2FsaXphdGlvbiB9fVwiXHJcbiAgICAgICAgICBbd2lkdGhdPVwiMjYwXCJcclxuICAgICAgICAgIGNlbGxUZW1wbGF0ZT1cImVycm9yTWVzc2FnZVRlbXBsYXRlXCJcclxuICAgICAgICA+PC9keGktY29sdW1uPlxyXG4gICAgICAgIDxkeGktY29sdW1uXHJcbiAgICAgICAgICBkYXRhRmllbGQ9XCJPd25lckNvZGVcIlxyXG4gICAgICAgICAgY2FwdGlvbj1cInt7ICdTbWFydFdhcmVob3VzZTo6T3JkZXI6T3duZXJDb2RlJyB8IGFicExvY2FsaXphdGlvbiB9fVwiXHJcbiAgICAgICAgICBbd2lkdGhdPVwiMTIwXCJcclxuICAgICAgICA+PC9keGktY29sdW1uPlxyXG4gICAgICAgIDxkeGktY29sdW1uXHJcbiAgICAgICAgICBkYXRhRmllbGQ9XCJDb21tZW50c1wiXHJcbiAgICAgICAgICBjYXB0aW9uPVwie3sgJ1NtYXJ0V2FyZWhvdXNlOjpPcmRlcjpDb21tZW50cycgfCBhYnBMb2NhbGl6YXRpb24gfX1cIlxyXG4gICAgICAgICAgW3dpZHRoXT1cIjIwMFwiXHJcbiAgICAgICAgPjwvZHhpLWNvbHVtbj5cclxuICAgICAgICA8ZHhpLWNvbHVtblxyXG4gICAgICAgICAgZGF0YUZpZWxkPVwiVV9TV0dvbmRlcmlsZGlcIlxyXG4gICAgICAgICAgY2FwdGlvbj1cInt7ICdTbWFydFdhcmVob3VzZTo6T3JkZXI6VV9TV0dvbmRlcmlsZGknIHwgYWJwTG9jYWxpemF0aW9uIH19XCJcclxuICAgICAgICAgIFt3aWR0aF09XCIxMTBcIlxyXG4gICAgICAgID48L2R4aS1jb2x1bW4+XHJcbiAgICAgICAgPGR4aS1jb2x1bW5cclxuICAgICAgICAgIGRhdGFGaWVsZD1cIlVfU1dTdGF0aW9uQ29kZVwiXHJcbiAgICAgICAgICBjYXB0aW9uPVwie3sgJ1NtYXJ0V2FyZWhvdXNlOjpPcmRlcjpVX1NXU3RhdGlvbkNvZGUnIHwgYWJwTG9jYWxpemF0aW9uIH19XCJcclxuICAgICAgICAgIFt3aWR0aF09XCIxMjBcIlxyXG4gICAgICAgID48L2R4aS1jb2x1bW4+XHJcbiAgICAgICAgPGR4aS1jb2x1bW5cclxuICAgICAgICAgIGRhdGFGaWVsZD1cIlVfU1dFeWVDb2RlXCJcclxuICAgICAgICAgIGNhcHRpb249XCJ7eyAnU21hcnRXYXJlaG91c2U6Ok9yZGVyOlVfU1dFeWVDb2RlJyB8IGFicExvY2FsaXphdGlvbiB9fVwiXHJcbiAgICAgICAgICBbd2lkdGhdPVwiMTQwXCJcclxuICAgICAgICA+PC9keGktY29sdW1uPlxyXG4gICAgICAgIDxkeGktY29sdW1uXHJcbiAgICAgICAgICBkYXRhRmllbGQ9XCJVX1NXT3JkZXJUeXBlXCJcclxuICAgICAgICAgIGNhcHRpb249XCJ7eyAnU21hcnRXYXJlaG91c2U6Ok9yZGVyOlVfU1dPcmRlclR5cGUnIHwgYWJwTG9jYWxpemF0aW9uIH19XCJcclxuICAgICAgICAgIFt3aWR0aF09XCIxNjBcIlxyXG4gICAgICAgICAgY2VsbFRlbXBsYXRlPVwib3JkZXJUeXBlVGVtcGxhdGVcIlxyXG4gICAgICAgID48L2R4aS1jb2x1bW4+XHJcbiAgICAgICAgPGR4aS1jb2x1bW5cclxuICAgICAgICAgIGRhdGFGaWVsZD1cIk51bUF0Q2FyZFwiXHJcbiAgICAgICAgICBjYXB0aW9uPVwie3sgJ1NtYXJ0V2FyZWhvdXNlOjpPcmRlcjpOdW1BdENhcmQnIHwgYWJwTG9jYWxpemF0aW9uIH19XCJcclxuICAgICAgICAgIFt3aWR0aF09XCIxNDBcIlxyXG4gICAgICAgID48L2R4aS1jb2x1bW4+XHJcbiAgICAgICAgPGR4aS1jb2x1bW5cclxuICAgICAgICAgIGRhdGFGaWVsZD1cIkRvY1RvdGFsXCJcclxuICAgICAgICAgIGNhcHRpb249XCJ7eyAnU21hcnRXYXJlaG91c2U6Ok9yZGVyOkRvY1RvdGFsJyB8IGFicExvY2FsaXphdGlvbiB9fVwiXHJcbiAgICAgICAgICBkYXRhVHlwZT1cIm51bWJlclwiXHJcbiAgICAgICAgICBmb3JtYXQ9XCIjLCMjMC4wMFwiXHJcbiAgICAgICAgICBbd2lkdGhdPVwiMTMwXCJcclxuICAgICAgICA+PC9keGktY29sdW1uPlxyXG4gICAgICAgIDxkeGktY29sdW1uXHJcbiAgICAgICAgICBkYXRhRmllbGQ9XCJEb2NDdXJcIlxyXG4gICAgICAgICAgY2FwdGlvbj1cInt7ICdTbWFydFdhcmVob3VzZTo6T3JkZXI6RG9jQ3VyJyB8IGFicExvY2FsaXphdGlvbiB9fVwiXHJcbiAgICAgICAgICBbd2lkdGhdPVwiOTBcIlxyXG4gICAgICAgID48L2R4aS1jb2x1bW4+XHJcbiAgICAgICAgPGR4aS1jb2x1bW5cclxuICAgICAgICAgIGRhdGFGaWVsZD1cIkRvY1N0YXR1c1wiXHJcbiAgICAgICAgICBjYXB0aW9uPVwie3sgJ1NtYXJ0V2FyZWhvdXNlOjpPcmRlcjpEb2NTdGF0dXMnIHwgYWJwTG9jYWxpemF0aW9uIH19XCJcclxuICAgICAgICAgIFt3aWR0aF09XCI5MFwiXHJcbiAgICAgICAgICBjZWxsVGVtcGxhdGU9XCJzdGF0dXNUZW1wbGF0ZVwiXHJcbiAgICAgICAgPjwvZHhpLWNvbHVtbj5cclxuICAgICAgICA8ZHhpLWNvbHVtblxyXG4gICAgICAgICAgZGF0YUZpZWxkPVwiRG9jRW50cnlcIlxyXG4gICAgICAgICAgY2FwdGlvbj1cInt7ICdTbWFydFdhcmVob3VzZTo6T3JkZXI6RG9jRW50cnknIHwgYWJwTG9jYWxpemF0aW9uIH19XCJcclxuICAgICAgICAgIFt3aWR0aF09XCIxMDBcIlxyXG4gICAgICAgID48L2R4aS1jb2x1bW4+XHJcblxyXG4gICAgICAgIDxkaXYgKmR4VGVtcGxhdGU9XCJsZXQgY2VsbCBvZiAnc3RhdHVzVGVtcGxhdGUnXCI+XHJcbiAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICBjbGFzcz1cImJhZGdlXCJcclxuICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgICAgICdiZy1zdWNjZXNzJzogY2VsbC52YWx1ZSA9PT0gJ08nLFxyXG4gICAgICAgICAgICAgICdiZy1zZWNvbmRhcnknOiBjZWxsLnZhbHVlID09PSAnQydcclxuICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIHt7IGNlbGwudmFsdWUgPT09ICdPJyA/ICdBw6fEsWsnIDogJ0thcGFsxLEnIH19XHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgKmR4VGVtcGxhdGU9XCJsZXQgY2VsbCBvZiAnc3dEdXJ1bVRlbXBsYXRlJ1wiPlxyXG4gICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgY2xhc3M9XCJiYWRnZVwiXHJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAgICAgICAnYmctd2FybmluZyc6IGNlbGwudmFsdWUgPT09ICcwJyB8fCAhY2VsbC52YWx1ZSxcclxuICAgICAgICAgICAgICAnYmctaW5mbyc6IGNlbGwudmFsdWUgPT09ICcxJyxcclxuICAgICAgICAgICAgICAnYmctcHJpbWFyeSc6IGNlbGwudmFsdWUgPT09ICcyJyxcclxuICAgICAgICAgICAgICAnYmctc3VjY2Vzcyc6IGNlbGwudmFsdWUgPT09ICczJ1xyXG4gICAgICAgICAgICB9XCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAge3tcclxuICAgICAgICAgICAgICBjZWxsLnZhbHVlID09PSAnMScgPyAnT25heSBCZWtsaXlvcicgOlxyXG4gICAgICAgICAgICAgIGNlbGwudmFsdWUgPT09ICcyJyA/ICfEsMWfbGVuaXlvcicgOlxyXG4gICAgICAgICAgICAgIGNlbGwudmFsdWUgPT09ICczJyA/ICdUYW1hbWxhbmTEsScgOiAnQmVrbGVtZWRlJ1xyXG4gICAgICAgICAgICB9fVxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2ICpkeFRlbXBsYXRlPVwibGV0IGNlbGwgb2YgJ2Vycm9yVGVtcGxhdGUnXCI+XHJcbiAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAqbmdJZj1cImNlbGwudmFsdWUgPT09ICdZJ1wiXHJcbiAgICAgICAgICAgIGNsYXNzPVwiZmEgZmEtZXhjbGFtYXRpb24tdHJpYW5nbGUgdGV4dC1kYW5nZXJcIlxyXG4gICAgICAgICAgICBbdGl0bGVdPVwiY2VsbC5kYXRhLlVfU1dFcnJvck1lc3NhZ2VcIlxyXG4gICAgICAgICAgPjwvaT5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiAqZHhUZW1wbGF0ZT1cImxldCBjZWxsIG9mICdlcnJvck1lc3NhZ2VUZW1wbGF0ZSdcIj5cclxuICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICpuZ0lmPVwiY2VsbC5kYXRhLlVfU1dJc0Vycm9yID09PSAnWSdcIlxyXG4gICAgICAgICAgICBjbGFzcz1cImVycm9yLW1lc3NhZ2UtY2VsbFwiXHJcbiAgICAgICAgICAgIFt0aXRsZV09XCJjZWxsLnZhbHVlXCJcclxuICAgICAgICAgID57eyBjZWxsLnZhbHVlIH19PC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2ICpkeFRlbXBsYXRlPVwibGV0IGNlbGwgb2YgJ29yZGVyVHlwZVRlbXBsYXRlJ1wiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBiZy1zZWNvbmRhcnlcIj5cclxuICAgICAgICAgICAge3tcclxuICAgICAgICAgICAgICBjZWxsLnZhbHVlID09PSAnMScgPyAnU2FuYXlpIFNpcGFyacWfbGVyaScgOlxyXG4gICAgICAgICAgICAgIGNlbGwudmFsdWUgPT09ICcyJyA/ICdEYcSfxLF0xLFtIFNpcGFyacWfbGVyaScgOlxyXG4gICAgICAgICAgICAgIGNlbGwudmFsdWUgPT09ICczJyA/ICdEZXBvIFRhbGVwbGVyaScgOiAnLSdcclxuICAgICAgICAgICAgfX1cclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPCEtLSBNYXN0ZXItRGV0YWlsOiBTaXBhcmnFnyBTYXTEsXJsYXLEsSAtLT5cclxuICAgICAgICA8ZHhvLW1hc3Rlci1kZXRhaWwgW2VuYWJsZWRdPVwidHJ1ZVwiIHRlbXBsYXRlPVwib3JkZXJMaW5lc1RlbXBsYXRlXCI+PC9keG8tbWFzdGVyLWRldGFpbD5cclxuXHJcbiAgICAgICAgPGRpdiAqZHhUZW1wbGF0ZT1cImxldCBkZXRhaWwgb2YgJ29yZGVyTGluZXNUZW1wbGF0ZSdcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLTNcIj5cclxuICAgICAgICAgICAgPGg2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtbGlzdCBtZS0xXCI+PC9pPlxyXG4gICAgICAgICAgICAgIHt7ICdTbWFydFdhcmVob3VzZTo6T3JkZXI6RG9jTnVtJyB8IGFicExvY2FsaXphdGlvbiB9fTpcclxuICAgICAgICAgICAgICB7eyBkZXRhaWwuZGF0YS5Eb2NOdW0gfX0gLSBTaXBhcmnFnyBTYXTEsXJsYXLEsVxyXG4gICAgICAgICAgICA8L2g2PlxyXG4gICAgICAgICAgICA8ZHgtZGF0YS1ncmlkXHJcbiAgICAgICAgICAgICAgW2RhdGFTb3VyY2VdPVwiZGV0YWlsLmRhdGEuRG9jdW1lbnRMaW5lc1wiXHJcbiAgICAgICAgICAgICAgW3Nob3dSb3dMaW5lc109XCJ0cnVlXCJcclxuICAgICAgICAgICAgICBbc2hvd0JvcmRlcnNdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgW2NvbHVtbkF1dG9XaWR0aF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICBbaG92ZXJTdGF0ZUVuYWJsZWRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgW3Jvd0FsdGVybmF0aW9uRW5hYmxlZF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxkeGktY29sdW1uXHJcbiAgICAgICAgICAgICAgICBkYXRhRmllbGQ9XCJMaW5lTnVtXCJcclxuICAgICAgICAgICAgICAgIGNhcHRpb249XCJ7eyAnU21hcnRXYXJlaG91c2U6Ok9yZGVyOkxpbmVOdW0nIHwgYWJwTG9jYWxpemF0aW9uIH19XCJcclxuICAgICAgICAgICAgICAgIFt3aWR0aF09XCI3MFwiXHJcbiAgICAgICAgICAgICAgPjwvZHhpLWNvbHVtbj5cclxuICAgICAgICAgICAgICA8ZHhpLWNvbHVtblxyXG4gICAgICAgICAgICAgICAgZGF0YUZpZWxkPVwiSXRlbUNvZGVcIlxyXG4gICAgICAgICAgICAgICAgY2FwdGlvbj1cInt7ICdTbWFydFdhcmVob3VzZTo6T3JkZXI6SXRlbUNvZGUnIHwgYWJwTG9jYWxpemF0aW9uIH19XCJcclxuICAgICAgICAgICAgICAgIFt3aWR0aF09XCIxNDBcIlxyXG4gICAgICAgICAgICAgID48L2R4aS1jb2x1bW4+XHJcbiAgICAgICAgICAgICAgPGR4aS1jb2x1bW5cclxuICAgICAgICAgICAgICAgIGRhdGFGaWVsZD1cIkl0ZW1EZXNjcmlwdGlvblwiXHJcbiAgICAgICAgICAgICAgICBjYXB0aW9uPVwiS2FsZW0gQWTEsVwiXHJcbiAgICAgICAgICAgICAgPjwvZHhpLWNvbHVtbj5cclxuICAgICAgICAgICAgICA8ZHhpLWNvbHVtblxyXG4gICAgICAgICAgICAgICAgZGF0YUZpZWxkPVwiUXVhbnRpdHlcIlxyXG4gICAgICAgICAgICAgICAgY2FwdGlvbj1cInt7ICdTbWFydFdhcmVob3VzZTo6T3JkZXI6UXVhbnRpdHknIHwgYWJwTG9jYWxpemF0aW9uIH19XCJcclxuICAgICAgICAgICAgICAgIGRhdGFUeXBlPVwibnVtYmVyXCJcclxuICAgICAgICAgICAgICAgIGZvcm1hdD1cIiMsIyMwLiMjXCJcclxuICAgICAgICAgICAgICAgIFt3aWR0aF09XCIxMDBcIlxyXG4gICAgICAgICAgICAgID48L2R4aS1jb2x1bW4+XHJcbiAgICAgICAgICAgICAgPGR4aS1jb2x1bW5cclxuICAgICAgICAgICAgICAgIGRhdGFGaWVsZD1cIlVfU1dUZXNsaW1NaWt0YXJcIlxyXG4gICAgICAgICAgICAgICAgY2FwdGlvbj1cInt7ICdTbWFydFdhcmVob3VzZTo6T3JkZXI6VV9TV1Rlc2xpbU1pa3RhcicgfCBhYnBMb2NhbGl6YXRpb24gfX1cIlxyXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU9XCJudW1iZXJcIlxyXG4gICAgICAgICAgICAgICAgZm9ybWF0PVwiIywjIzAuIyNcIlxyXG4gICAgICAgICAgICAgICAgW3dpZHRoXT1cIjEyMFwiXHJcbiAgICAgICAgICAgICAgPjwvZHhpLWNvbHVtbj5cclxuICAgICAgICAgICAgICA8ZHhpLWNvbHVtblxyXG4gICAgICAgICAgICAgICAgZGF0YUZpZWxkPVwiTGluZVRvdGFsXCJcclxuICAgICAgICAgICAgICAgIGNhcHRpb249XCJ7eyAnU21hcnRXYXJlaG91c2U6Ok9yZGVyOkxpbmVUb3RhbCcgfCBhYnBMb2NhbGl6YXRpb24gfX1cIlxyXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU9XCJudW1iZXJcIlxyXG4gICAgICAgICAgICAgICAgZm9ybWF0PVwiIywjIzAuMDBcIlxyXG4gICAgICAgICAgICAgICAgW3dpZHRoXT1cIjEyMFwiXHJcbiAgICAgICAgICAgICAgPjwvZHhpLWNvbHVtbj5cclxuICAgICAgICAgICAgICA8ZHhpLWNvbHVtblxyXG4gICAgICAgICAgICAgICAgZGF0YUZpZWxkPVwiV2FyZWhvdXNlQ29kZVwiXHJcbiAgICAgICAgICAgICAgICBjYXB0aW9uPVwie3sgJ1NtYXJ0V2FyZWhvdXNlOjpPcmRlcjpXaHNDb2RlJyB8IGFicExvY2FsaXphdGlvbiB9fVwiXHJcbiAgICAgICAgICAgICAgICBbd2lkdGhdPVwiMTAwXCJcclxuICAgICAgICAgICAgICA+PC9keGktY29sdW1uPlxyXG4gICAgICAgICAgICAgIDxkeGktY29sdW1uXHJcbiAgICAgICAgICAgICAgICBkYXRhRmllbGQ9XCJTaGlwRGF0ZVwiXHJcbiAgICAgICAgICAgICAgICBjYXB0aW9uPVwie3sgJ1NtYXJ0V2FyZWhvdXNlOjpPcmRlcjpTaGlwRGF0ZScgfCBhYnBMb2NhbGl6YXRpb24gfX1cIlxyXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU9XCJkYXRlXCJcclxuICAgICAgICAgICAgICAgIGZvcm1hdD1cImRkLk1NLnl5eXlcIlxyXG4gICAgICAgICAgICAgICAgW3dpZHRoXT1cIjExMFwiXHJcbiAgICAgICAgICAgICAgPjwvZHhpLWNvbHVtbj5cclxuICAgICAgICAgICAgICA8ZHhpLWNvbHVtblxyXG4gICAgICAgICAgICAgICAgZGF0YUZpZWxkPVwiVV9Tb25Hb3JldklkXCJcclxuICAgICAgICAgICAgICAgIGNhcHRpb249XCJ7eyAnU21hcnRXYXJlaG91c2U6Ok9yZGVyOlVfU29uR29yZXZJZCcgfCBhYnBMb2NhbGl6YXRpb24gfX1cIlxyXG4gICAgICAgICAgICAgICAgW3dpZHRoXT1cIjEyMFwiXHJcbiAgICAgICAgICAgICAgPjwvZHhpLWNvbHVtbj5cclxuXHJcbiAgICAgICAgICAgICAgPGR4by1zdW1tYXJ5PlxyXG4gICAgICAgICAgICAgICAgPGR4aS10b3RhbC1pdGVtXHJcbiAgICAgICAgICAgICAgICAgIGNvbHVtbj1cImxpbmVUb3RhbFwiXHJcbiAgICAgICAgICAgICAgICAgIHN1bW1hcnlUeXBlPVwic3VtXCJcclxuICAgICAgICAgICAgICAgICAgZGlzcGxheUZvcm1hdD1cIlRvcGxhbTogezB9XCJcclxuICAgICAgICAgICAgICAgICAgdmFsdWVGb3JtYXQ9XCIjLCMjMC4wMFwiXHJcbiAgICAgICAgICAgICAgICA+PC9keGktdG90YWwtaXRlbT5cclxuICAgICAgICAgICAgICAgIDxkeGktdG90YWwtaXRlbVxyXG4gICAgICAgICAgICAgICAgICBjb2x1bW49XCJxdWFudGl0eVwiXHJcbiAgICAgICAgICAgICAgICAgIHN1bW1hcnlUeXBlPVwic3VtXCJcclxuICAgICAgICAgICAgICAgICAgZGlzcGxheUZvcm1hdD1cIlRvcGxhbTogezB9XCJcclxuICAgICAgICAgICAgICAgICAgdmFsdWVGb3JtYXQ9XCIjLCMjMC4jI1wiXHJcbiAgICAgICAgICAgICAgICA+PC9keGktdG90YWwtaXRlbT5cclxuICAgICAgICAgICAgICA8L2R4by1zdW1tYXJ5PlxyXG4gICAgICAgICAgICA8L2R4LWRhdGEtZ3JpZD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2R4LWRhdGEtZ3JpZD5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8IS0tIEJvxZ8gLyBZYXLEsW0gS2FzYSBQb3B1cCAtLT5cclxuICA8ZHgtcG9wdXBcclxuICAgIFt2aXNpYmxlXT1cImJvc0thc2FQb3B1cFZpc2libGVcIlxyXG4gICAgKG9uSGlkZGVuKT1cImJvc0thc2FQb3B1cFZpc2libGUgPSBmYWxzZVwiXHJcbiAgICBbd2lkdGhdPVwiMzgwXCJcclxuICAgIFtoZWlnaHRdPVwiJ2F1dG8nXCJcclxuICAgIFtzaG93VGl0bGVdPVwidHJ1ZVwiXHJcbiAgICBbdGl0bGVdPVwiYm9zS2FzYU1vZGUgPT09ICdlbXB0eScgPyAnQm/FnyBLYXNhIEdldGlyJyA6ICdZYXLEsW0gS2FzYSBHZXRpcidcIlxyXG4gICAgW2RyYWdFbmFibGVkXT1cInRydWVcIlxyXG4gICAgW3Jlc2l6ZUVuYWJsZWRdPVwiZmFsc2VcIlxyXG4gICAgW3Nob3dDbG9zZUJ1dHRvbl09XCJ0cnVlXCJcclxuICAgIFtjbG9zZU9uT3V0c2lkZUNsaWNrXT1cImZhbHNlXCJcclxuICA+XHJcbiAgICA8ZGl2ICpkeFRlbXBsYXRlPVwibGV0IGRhdGEgb2YgJ2NvbnRlbnQnXCIgY2xhc3M9XCJwLTNcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCI+xLBzdGFzeW9uIE5vPC9sYWJlbD5cclxuICAgICAgICA8ZHgtbnVtYmVyLWJveCBbKHZhbHVlKV09XCJib3NLYXNhU3RhdGlvbklkXCIgW21pbl09XCIxXCIgW3Nob3dTcGluQnV0dG9uc109XCJ0cnVlXCI+PC9keC1udW1iZXItYm94PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCI+UmFmIE5vIChTaGVsZiBJRCk8L2xhYmVsPlxyXG4gICAgICAgIDxkeC1udW1iZXItYm94IFsodmFsdWUpXT1cImJvc0thc2FTaGVsZklkXCIgW21pbl09XCIxXCIgW3Nob3dTcGluQnV0dG9uc109XCJ0cnVlXCI+PC9keC1udW1iZXItYm94PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCI+S2FzYSBBZGVkaTwvbGFiZWw+XHJcbiAgICAgICAgPGR4LW51bWJlci1ib3ggWyh2YWx1ZSldPVwiYm9zS2FzYUJveENvdW50XCIgW21pbl09XCIxXCIgW21heF09XCI1MFwiIFtzaG93U3BpbkJ1dHRvbnNdPVwidHJ1ZVwiPjwvZHgtbnVtYmVyLWJveD5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZCBnYXAtMiBtdC0zXCI+XHJcbiAgICAgICAgPGR4LWJ1dHRvbiB0ZXh0PVwixLBwdGFsXCIgKG9uQ2xpY2spPVwiYm9zS2FzYVBvcHVwVmlzaWJsZSA9IGZhbHNlXCIgdHlwZT1cIm5vcm1hbFwiPjwvZHgtYnV0dG9uPlxyXG4gICAgICAgIDxkeC1idXR0b25cclxuICAgICAgICAgIFt0ZXh0XT1cImJvc0thc2FNb2RlID09PSAnZW1wdHknID8gJ0JvxZ8gS2FzYSBHw7ZuZGVyJyA6ICdZYXLEsW0gS2FzYSBHw7ZuZGVyJ1wiXHJcbiAgICAgICAgICB0eXBlPVwiZGVmYXVsdFwiXHJcbiAgICAgICAgICAob25DbGljayk9XCJvbkJvc0thc2FHb25kZXIoKVwiXHJcbiAgICAgICAgPjwvZHgtYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZHgtcG9wdXA+XHJcblxyXG48L2FicC1wYWdlPlxyXG4iXX0=