@hitsoft/abp.kadooglu 1.0.4 → 1.0.6

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.
Files changed (23) hide show
  1. package/esm2020/lib/hit-components/hit-carrier-person/hit-carrier-person-form/hit-carrier-person-form.component.mjs +1 -1
  2. package/esm2020/lib/hit-components/hit-entry-weighing/hit-entry-weighing-form/hit-entry-weighing-form.component.mjs +112 -59
  3. package/esm2020/lib/hit-components/hit-entry-weighing/hit-entry-weighing-list/hit-entry-weighing-list.component.mjs +3 -21
  4. package/esm2020/lib/hit-components/hit-factory-entry/hit-factory-entry-form/hit-factory-entry-form.component.mjs +1 -1
  5. package/esm2020/lib/hit-components/hit-knt-item-esl/hit-knt-item-esl-form/hit-knt-item-esl-form.component.mjs +1 -1
  6. package/esm2020/lib/hit-components/hit-vehicle-type/hit-vehicle-type-form/hit-vehicle-type-form.component.mjs +1 -1
  7. package/esm2020/lib/hit-proxy/hit-entry-weighing/hit-entry-weighing.service.mjs +1 -4
  8. package/esm2020/lib/hit-proxy/hit-stock-transfer/models.mjs +1 -1
  9. package/esm2020/lib/services/scale-signalr.service.mjs +36 -8
  10. package/esm2020/lib/shared/hit-modal/hit-modal.component.mjs +75 -14
  11. package/esm2020/lib/shared/hit-modal/hit-ui.module.mjs +5 -2
  12. package/fesm2015/hitsoft-abp.kadooglu.mjs +271 -146
  13. package/fesm2015/hitsoft-abp.kadooglu.mjs.map +1 -1
  14. package/fesm2020/hitsoft-abp.kadooglu.mjs +269 -145
  15. package/fesm2020/hitsoft-abp.kadooglu.mjs.map +1 -1
  16. package/lib/hit-components/hit-entry-weighing/hit-entry-weighing-form/hit-entry-weighing-form.component.d.ts +16 -91
  17. package/lib/hit-components/hit-entry-weighing/hit-entry-weighing-list/hit-entry-weighing-list.component.d.ts +0 -1
  18. package/lib/hit-proxy/hit-entry-weighing/hit-entry-weighing.service.d.ts +0 -3
  19. package/lib/hit-proxy/hit-stock-transfer/models.d.ts +4 -0
  20. package/lib/services/scale-signalr.service.d.ts +5 -0
  21. package/lib/shared/hit-modal/hit-modal.component.d.ts +15 -3
  22. package/lib/shared/hit-modal/hit-ui.module.d.ts +1 -1
  23. package/package.json +1 -1
@@ -36,52 +36,22 @@ export class HitEntryWeighingFormComponent {
36
36
  this.loadDrivers = () => this.service.getDrivers();
37
37
  this.loadAccounts = () => this.service.getAccounts();
38
38
  this.loadStockItems = () => this.service.getStockItems();
39
- this.loadWaybills = () => this.stockTransferService.getList();
39
+ this.waybillDefaultDateFrom = (() => { const d = new Date(); d.setDate(d.getDate() - 3); return d; })();
40
+ this.waybillDefaultDateTo = new Date();
41
+ this.loadWaybills = (params) => this.stockTransferService.getList(params);
40
42
  this.loadGates = () => this.service.getGates();
41
43
  this.loadVehicleTypes = () => this.service.getVehicleTypes();
42
44
  // Column configs
43
- this.documentColumns = [
44
- { dataField: 'code', caption: 'Belge No', width: 120 },
45
- { dataField: 'name', caption: 'Cari Adı' },
46
- ];
47
- this.scaleColumns = [
48
- { dataField: 'code', caption: 'Kod', width: 80 },
49
- { dataField: 'name', caption: 'Kantar Adı' },
50
- ];
51
- this.truckPlateColumns = [
52
- { dataField: 'code', caption: 'Kod', width: 100 },
53
- { dataField: 'plateNo', caption: 'Plaka' },
54
- ];
55
- this.trailerPlateColumns = [
56
- { dataField: 'code', caption: 'Kod', width: 100 },
57
- { dataField: 'plateNo', caption: 'Plaka' },
58
- ];
59
- this.driverColumns = [
60
- { dataField: 'code', caption: 'Kod', width: 100 },
61
- { dataField: 'name', caption: 'Ad Soyad' },
62
- ];
63
- this.accountColumns = [
64
- { dataField: 'code', caption: 'Kod', width: 100 },
65
- { dataField: 'title', caption: 'Unvan' },
66
- ];
67
- this.stockItemColumns = [
68
- { dataField: 'code', caption: 'Kod', width: 100 },
69
- { dataField: 'name', caption: 'Stok Adı' },
70
- ];
71
- this.waybillColumns = [
72
- { dataField: 'docNum', caption: 'Belge No', width: 120 },
73
- { dataField: 'cardName', caption: 'Cari Adı' },
74
- { dataField: 'fromWarehouse', caption: 'Çıkış Deposu', width: 140 },
75
- { dataField: 'comments', caption: 'Açıklama' },
76
- ];
77
- this.gateColumns = [
78
- { dataField: 'code', caption: 'Kod', width: 80 },
79
- { dataField: 'name', caption: 'Kapı Adı' },
80
- ];
81
- this.vehicleTypeColumns = [
82
- { dataField: 'code', caption: 'Kod', width: 80 },
83
- { dataField: 'name', caption: 'Giriş Tipi' },
84
- ];
45
+ this.documentColumns = [];
46
+ this.scaleColumns = [];
47
+ this.truckPlateColumns = [];
48
+ this.trailerPlateColumns = [];
49
+ this.driverColumns = [];
50
+ this.accountColumns = [];
51
+ this.stockItemColumns = [];
52
+ this.waybillColumns = [];
53
+ this.gateColumns = [];
54
+ this.vehicleTypeColumns = [];
85
55
  // Form fields
86
56
  this.documentCode = '';
87
57
  this.documentName = '';
@@ -126,8 +96,11 @@ export class HitEntryWeighingFormComponent {
126
96
  this.entryTypeTrtmYpilck = false;
127
97
  this.entryTypeMalGC = false;
128
98
  this.isDoingGoodsMovement = false;
99
+ this.isScaleConnecting = false;
100
+ this.isScaleReconnecting = false;
101
+ this.scaleConnectionFailed = false;
129
102
  this.scaleSub = null;
130
- this.scaleApiUrl = 'https://localhost:44389';
103
+ this.scaleApiUrl = 'http://192.168.10.95:5100';
131
104
  this.scaleId = 'KANTAR-01';
132
105
  }
133
106
  /** SAP response camelCase/PascalCase farkını handle eder */
@@ -137,6 +110,53 @@ export class HitEntryWeighingFormComponent {
137
110
  return rec.docEntry ?? rec.docEntry;
138
111
  }
139
112
  ngOnInit() {
113
+ const l = (key) => this.localizationService.instant('Kadooglu::' + key);
114
+ this.documentColumns = [
115
+ { dataField: 'code', caption: l('DocumentNo'), width: 120 },
116
+ { dataField: 'name', caption: l('CardName') },
117
+ ];
118
+ this.scaleColumns = [
119
+ { dataField: 'code', caption: l('Code'), width: 80 },
120
+ { dataField: 'name', caption: l('ScaleName') },
121
+ ];
122
+ this.truckPlateColumns = [
123
+ { dataField: 'code', caption: l('Code'), width: 100 },
124
+ { dataField: 'plateNo', caption: l('Plate') },
125
+ ];
126
+ this.trailerPlateColumns = [
127
+ { dataField: 'code', caption: l('Code'), width: 100 },
128
+ { dataField: 'plateNo', caption: l('Plate') },
129
+ ];
130
+ this.driverColumns = [
131
+ { dataField: 'code', caption: l('Code'), width: 100 },
132
+ { dataField: 'name', caption: l('FullName') },
133
+ ];
134
+ this.accountColumns = [
135
+ { dataField: 'code', caption: l('Code'), width: 100 },
136
+ { dataField: 'title', caption: l('AccountTitle') },
137
+ ];
138
+ this.stockItemColumns = [
139
+ { dataField: 'code', caption: l('Code'), width: 100 },
140
+ { dataField: 'name', caption: l('StockName') },
141
+ ];
142
+ this.waybillColumns = [
143
+ { dataField: 'docNum', caption: l('DocumentNo'), width: 100 },
144
+ { dataField: 'U_EFATNO', caption: l('WaybillNo'), width: 120 },
145
+ { dataField: 'cardName', caption: l('CardName') },
146
+ { dataField: 'fromWarehouse', caption: l('ExitWarehouse'), width: 140 },
147
+ { dataField: 'U_AracPlakasi', caption: l('VehiclePlate'), width: 110 },
148
+ { dataField: 'U_SoforAd', caption: l('DriverName') },
149
+ { dataField: 'U_SoforSoyadi', caption: l('DriverSurname') },
150
+ { dataField: 'comments', caption: l('Description') },
151
+ ];
152
+ this.gateColumns = [
153
+ { dataField: 'code', caption: l('Code'), width: 80 },
154
+ { dataField: 'name', caption: l('GateName') },
155
+ ];
156
+ this.vehicleTypeColumns = [
157
+ { dataField: 'code', caption: l('Code'), width: 80 },
158
+ { dataField: 'name', caption: l('EntryTypeName') },
159
+ ];
140
160
  // Read weighing mode from query params
141
161
  const mode = this.route.snapshot.queryParamMap.get('mode');
142
162
  if (mode === 'first' || mode === 'last') {
@@ -549,16 +569,25 @@ export class HitEntryWeighingFormComponent {
549
569
  const docEntry = this.getDocEntry(this.record);
550
570
  if (!docEntry)
551
571
  return;
552
- this.isDoingGoodsMovement = true;
553
- this.service.doGoodsMovement(docEntry).subscribe({
554
- next: updated => {
555
- this.record = updated;
556
- this.isDoingGoodsMovement = false;
557
- this.toaster.success(this.localizationService.instant('Kadooglu::GoodsMovementSuccess'));
558
- },
559
- error: () => {
560
- this.isDoingGoodsMovement = false;
561
- },
572
+ this.confirmation
573
+ .warn(this.localizationService.instant('Kadooglu::MalGcConfirmMessage', String(this.record?.u_Plate || docEntry)), '', {
574
+ yesText: this.localizationService.instant('Kadooglu::Yes'),
575
+ cancelText: this.localizationService.instant('Kadooglu::No'),
576
+ })
577
+ .subscribe(status => {
578
+ if (status !== 'confirm')
579
+ return;
580
+ this.isDoingGoodsMovement = true;
581
+ this.service.doGoodsMovement(docEntry).subscribe({
582
+ next: updated => {
583
+ this.record = updated;
584
+ this.isDoingGoodsMovement = false;
585
+ this.toaster.success(this.localizationService.instant('Kadooglu::GoodsMovementSuccess'));
586
+ },
587
+ error: () => {
588
+ this.isDoingGoodsMovement = false;
589
+ },
590
+ });
562
591
  });
563
592
  }
564
593
  sabitle() {
@@ -568,12 +597,36 @@ export class HitEntryWeighingFormComponent {
568
597
  this._stopScale();
569
598
  }
570
599
  _startScale() {
600
+ this.isScaleConnecting = true;
601
+ this.scaleConnectionFailed = false;
571
602
  this.scaleSub = this.scaleSignalRService.weight$.subscribe(w => {
572
- if (w !== null)
603
+ if (w !== null) {
604
+ this.isScaleReconnecting = false;
573
605
  this.currentScaleValue = w;
606
+ }
574
607
  });
608
+ this.scaleSub.add(this.scaleSignalRService.reconnecting$.subscribe(() => {
609
+ this.isScaleReconnecting = true;
610
+ this.currentScaleValue = null;
611
+ }));
612
+ this.scaleSub.add(this.scaleSignalRService.connectionLost$.subscribe(() => {
613
+ this.isScaleConnecting = false;
614
+ this.isScaleReconnecting = false;
615
+ this.scaleConnectionFailed = true;
616
+ this.confirmation.error(this.localizationService.instant('Kadooglu::ScaleConnectionFailed'), this.localizationService.instant('Kadooglu::ScaleConnectionFailedTitle'), { hideYesBtn: true, cancelText: this.localizationService.instant('Kadooglu::Cancel') });
617
+ }));
575
618
  this.scaleSignalRService.start(this.scaleApiUrl, this.scaleId)
576
- .catch(e => console.error('SignalR bağlantı hatası:', e));
619
+ .then(() => { this.isScaleConnecting = false; })
620
+ .catch(e => {
621
+ this.isScaleConnecting = false;
622
+ if (e?.message === 'ScaleConnectionMaxRetriesReached') {
623
+ this.scaleConnectionFailed = true;
624
+ this.confirmation.error(this.localizationService.instant('Kadooglu::ScaleConnectionFailed'), this.localizationService.instant('Kadooglu::ScaleConnectionFailedTitle'), { hideYesBtn: true, cancelText: this.localizationService.instant('Kadooglu::Cancel') });
625
+ }
626
+ else {
627
+ console.error('SignalR bağlantı hatası:', e);
628
+ }
629
+ });
577
630
  }
578
631
  _stopScale() {
579
632
  this.scaleSub?.unsubscribe();
@@ -601,9 +654,9 @@ export class HitEntryWeighingFormComponent {
601
654
  }
602
655
  }
603
656
  HitEntryWeighingFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: HitEntryWeighingFormComponent, deps: [{ token: i1.HitEntryWeighingService }, { token: i2.HitStockTransferService }, { token: i3.ConfirmationService }, { token: i3.ToasterService }, { token: i4.ActivatedRoute }, { token: i4.Router }, { token: i5.LocalizationService }, { token: i6.ScaleSignalRService }], target: i0.ɵɵFactoryTarget.Component });
604
- HitEntryWeighingFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: HitEntryWeighingFormComponent, selector: "lib-hit-entry-weighing-form", ngImport: i0, template: "<abp-page [breadcrumb]=\"false\">\r\n <abp-page-toolbar-container class=\"col\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col\">\r\n <h3 class=\"page-title\">\r\n {{ 'Kadooglu::EntryWeighingTitle' | abpLocalization }}\r\n <span *ngIf=\"weighingMode\" class=\"badge ms-2 fs-6\"\r\n [ngClass]=\"{\r\n 'bg-warning text-dark': weighingMode === 'first',\r\n 'bg-primary': weighingMode === 'last'\r\n }\">\r\n {{ weighingModeLabel }}\r\n </span>\r\n <span *ngIf=\"!weighingMode\" class=\"badge ms-2 fs-6\"\r\n [ngClass]=\"{\r\n 'bg-secondary': weighingStep === 1,\r\n 'bg-info': weighingStep === 2,\r\n 'bg-success': weighingStep === 3\r\n }\">\r\n {{ (weighingStep === 1 ? 'Kadooglu::RecordStep' : weighingStep === 2 ? 'Kadooglu::FirstWeighing' : 'Kadooglu::Completed') | abpLocalization }}\r\n </span>\r\n </h3>\r\n </div>\r\n </div>\r\n </abp-page-toolbar-container>\r\n\r\n <!-- Step Indicator -->\r\n <div class=\"card mb-3\">\r\n <div class=\"card-body py-3\">\r\n <div class=\"d-flex align-items-center justify-content-center\">\r\n\r\n <!-- Step 1: Ara\u00E7 & Belge -->\r\n <div class=\"d-flex flex-column align-items-center\">\r\n <div class=\"rounded-circle d-flex align-items-center justify-content-center fw-bold text-white\"\r\n style=\"width:40px; height:40px; font-size:1rem;\"\r\n [style.background-color]=\"formPhase > 1 || isFullyCompleted ? '#198754' : (formPhase === 1 ? '#0d6efd' : '#6c757d')\">\r\n <i *ngIf=\"formPhase > 1 || isFullyCompleted\" class=\"fa fa-check\"></i>\r\n <span *ngIf=\"formPhase <= 1 && !isFullyCompleted\">1</span>\r\n </div>\r\n <small class=\"mt-1 fw-semibold\" [class.text-success]=\"formPhase > 1 || isFullyCompleted\" [class.text-primary]=\"formPhase === 1 && !isFullyCompleted\">{{ 'Kadooglu::VehicleAndDocument' | abpLocalization }}</small>\r\n </div>\r\n\r\n <div class=\"flex-grow-1 mx-2\" style=\"height:3px; max-width:120px;\"\r\n [style.background-color]=\"formPhase > 1 ? '#198754' : '#dee2e6'\"></div>\r\n\r\n <!-- Step 2: Tart\u0131m -->\r\n <div class=\"d-flex flex-column align-items-center\">\r\n <div class=\"rounded-circle d-flex align-items-center justify-content-center fw-bold text-white\"\r\n style=\"width:40px; height:40px; font-size:1rem;\"\r\n [style.background-color]=\"weighingStep === 3 ? '#198754' : (formPhase === 2 ? '#0d6efd' : '#6c757d')\">\r\n <i *ngIf=\"weighingStep === 3\" class=\"fa fa-check\"></i>\r\n <span *ngIf=\"weighingStep < 3\">2</span>\r\n </div>\r\n <small class=\"mt-1 fw-semibold\" [class.text-success]=\"weighingStep === 3\" [class.text-primary]=\"formPhase === 2 && weighingStep < 3\" [class.text-muted]=\"formPhase < 2 && weighingStep < 3\">{{ 'Kadooglu::WeighingStep' | abpLocalization }}</small>\r\n </div>\r\n\r\n <div class=\"flex-grow-1 mx-2\" style=\"height:3px; max-width:120px;\"\r\n [style.background-color]=\"weighingStep === 3 ? '#198754' : '#dee2e6'\"></div>\r\n\r\n <!-- Step 3: Tamamland\u0131 -->\r\n <div class=\"d-flex flex-column align-items-center\">\r\n <div class=\"rounded-circle d-flex align-items-center justify-content-center fw-bold text-white\"\r\n style=\"width:40px; height:40px; font-size:1rem;\"\r\n [style.background-color]=\"weighingStep === 3 ? '#198754' : '#6c757d'\">\r\n <i *ngIf=\"weighingStep === 3\" class=\"fa fa-check\"></i>\r\n <span *ngIf=\"weighingStep < 3\">3</span>\r\n </div>\r\n <small class=\"mt-1 fw-semibold\" [class.text-success]=\"weighingStep === 3\" [class.text-muted]=\"weighingStep < 3\">{{ 'Kadooglu::Completed' | abpLocalization }}</small>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- ========== PHASE 1: Ara\u00E7 & Belge ========== -->\r\n <div *ngIf=\"formPhase === 1 && !isFullyCompleted\">\r\n <div class=\"card\">\r\n <div class=\"card-body\">\r\n <div class=\"row\">\r\n\r\n <!-- Sol s\u00FCtun: Giri\u015F/\u00C7\u0131k\u0131\u015F + Ara\u00E7 & S\u00FCr\u00FCc\u00FC -->\r\n <div class=\"col-md-6\">\r\n\r\n <!-- Grup 1: Giri\u015F / \u00C7\u0131k\u0131\u015F Bilgileri -->\r\n <div class=\"border rounded p-3 mb-3\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-sign-in-alt me-2\"></i>{{ 'Kadooglu::EntryExitInfo' | abpLocalization }}\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::GateSelection' | abpLocalization }}</label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadGates\"\r\n [columns]=\"gateColumns\"\r\n displayName=\"name\"\r\n [editingData]=\"gateName\"\r\n [readOnly]=\"isUpdateMode\"\r\n (selected)=\"onGateSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">Ara\u00E7 Hareket T\u00FCr\u00FC</label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadVehicleTypes\"\r\n [columns]=\"vehicleTypeColumns\"\r\n displayName=\"name\"\r\n [editingData]=\"entryTypeName\"\r\n [readOnly]=\"isUpdateMode\"\r\n (selected)=\"onVehicleTypeSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::EntryDate' | abpLocalization }}</label>\r\n <dx-date-box\r\n [value]=\"entryDateTime\"\r\n type=\"datetime\"\r\n displayFormat=\"dd.MM.yyyy HH:mm\"\r\n [readOnly]=\"isUpdateMode\"\r\n width=\"100%\">\r\n </dx-date-box>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::ExitDate' | abpLocalization }}</label>\r\n <dx-date-box\r\n [value]=\"exitDateTime\"\r\n type=\"datetime\"\r\n displayFormat=\"dd.MM.yyyy HH:mm\"\r\n [readOnly]=\"isUpdateMode\"\r\n width=\"100%\">\r\n </dx-date-box>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Grup 2: Ara\u00E7 & S\u00FCr\u00FCc\u00FC Bilgileri -->\r\n <div class=\"border rounded p-3 mb-3\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-truck me-2\"></i>{{ 'Kadooglu::VehicleDriverInfo' | abpLocalization }}\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::TruckPlate' | abpLocalization }}\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadTruckPlates\"\r\n [columns]=\"truckPlateColumns\"\r\n displayName=\"plateNo\"\r\n [editingData]=\"truckPlateNo\"\r\n [readOnly]=\"isFormLocked\"\r\n (selected)=\"onTruckPlateSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n <div class=\"col-md-6 mb-3\" *ngIf=\"trailerPlateNo\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::TrailerPlate' | abpLocalization }}</label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadTrailerPlates\"\r\n [columns]=\"trailerPlateColumns\"\r\n displayName=\"plateNo\"\r\n [editingData]=\"trailerPlateNo\"\r\n [readOnly]=\"isFormLocked\"\r\n (selected)=\"onTrailerPlateSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::DriverName' | abpLocalization }}</label>\r\n <dx-text-box\r\n [(value)]=\"driverFullName\"\r\n [placeholder]=\"'Kadooglu::EnterDriverName' | abpLocalization\"\r\n [readOnly]=\"true\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <div class=\"d-flex align-items-center gap-2 mb-1\">\r\n <label class=\"form-label mb-0 small fw-semibold text-muted\">{{ isTcCitizen ? ('Kadooglu::TcIdentityNo' | abpLocalization) : 'Kimlik No' }}</label>\r\n <dx-check-box [(value)]=\"isTcCitizen\" [readOnly]=\"isUpdateMode\" text=\"T.C. Vatanda\u015F\u0131\"></dx-check-box>\r\n </div>\r\n <dx-text-box\r\n [(value)]=\"tcNo\"\r\n [placeholder]=\"isTcCitizen ? ('Kadooglu::TcIdentityNo' | abpLocalization) : 'Kimlik No'\"\r\n [readOnly]=\"true\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n <!-- Sa\u011F s\u00FCtun: Belge & Y\u00FCk -->\r\n <div class=\"col-md-6\">\r\n\r\n <!-- Grup 3: Belge & Y\u00FCk Bilgileri -->\r\n <div class=\"border rounded p-3 mb-3\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-file-alt me-2\"></i>{{ 'Kadooglu::DocumentCargoInfo' | abpLocalization }}\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::BusinessPartner' | abpLocalization }}</label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadAccounts\"\r\n [columns]=\"accountColumns\"\r\n displayName=\"title\"\r\n [editingData]=\"accountTitle\"\r\n [readOnly]=\"isFormLocked\"\r\n (selected)=\"onAccountSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::WaybillNumber' | abpLocalization }}</label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadWaybills\"\r\n [columns]=\"waybillColumns\"\r\n displayName=\"docNum\"\r\n keyExpr=\"docEntry\"\r\n [editingData]=\"waybillNo\"\r\n (selected)=\"onWaybillSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::ItemCode' | abpLocalization }}</label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadStockItems\"\r\n [columns]=\"stockItemColumns\"\r\n displayName=\"name\"\r\n [editingData]=\"stockName\"\r\n (selected)=\"onStockItemSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::ContainerNo' | abpLocalization }}</label>\r\n <dx-text-box\r\n [(value)]=\"containerNo\"\r\n [placeholder]=\"'Kadooglu::ManualEntry' | abpLocalization\"\r\n [readOnly]=\"isFormLocked\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::DeparturePlace' | abpLocalization }}</label>\r\n <dx-text-box\r\n [(value)]=\"departureLocation\"\r\n [disabled]=\"true\"\r\n [placeholder]=\"'Kadooglu::AutoFilledFromWaybill' | abpLocalization\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::ArrivalPlace' | abpLocalization }}</label>\r\n <dx-text-box\r\n [(value)]=\"arrivalLocation\"\r\n [disabled]=\"true\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n <div class=\"col-md-12 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::Description' | abpLocalization }}</label>\r\n <dx-text-area\r\n [(value)]=\"description\"\r\n [height]=\"70\"\r\n [readOnly]=\"isFormLocked\"\r\n width=\"100%\">\r\n </dx-text-area>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n </div>\r\n </div>\r\n <!-- Phase 1 Alt Butonlar -->\r\n <div class=\"d-flex justify-content-between mt-3 mb-3\">\r\n <button class=\"btn btn-secondary\" (click)=\"goBack()\">\r\n <i class=\"fa fa-arrow-left me-1\"></i> {{ 'Kadooglu::Back' | abpLocalization }}\r\n </button>\r\n <div class=\"d-flex gap-2\">\r\n <abp-button\r\n *ngIf=\"!weighingMode && !isFormLocked\"\r\n iconClass=\"fa fa-save\"\r\n buttonType=\"button\"\r\n [loading]=\"isSaving\"\r\n (click)=\"save()\">\r\n {{ 'Kadooglu::Save' | abpLocalization }}\r\n </abp-button>\r\n <button class=\"btn btn-primary\" (click)=\"ileriGit()\">\r\n {{ 'Kadooglu::Next' | abpLocalization }} <i class=\"fa fa-arrow-right ms-1\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- ========== PHASE 2: Tart\u0131m Paneli ========== -->\r\n <div *ngIf=\"formPhase === 2 && !isFullyCompleted\">\r\n <div class=\"row\">\r\n <div class=\"col-12\">\r\n <div class=\"card\">\r\n <div class=\"card-header fw-bold\">\r\n <i class=\"fa fa-balance-scale me-2\"></i>{{ 'Kadooglu::WeighingPanel' | abpLocalization }}\r\n <span *ngIf=\"weighingMode\" class=\"badge ms-2\"\r\n [ngClass]=\"weighingMode === 'first' ? 'bg-warning text-dark' : 'bg-primary'\">\r\n {{ weighingModeLabel }}\r\n </span>\r\n </div>\r\n <div class=\"card-body\">\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-6 mx-auto\">\r\n\r\n <!-- Canl\u0131 Tart\u0131m ve Sabitlenmi\u015F De\u011Fer \u2014 \u0130ki S\u00FCtun -->\r\n <div class=\"row g-3 mb-4\">\r\n\r\n <!-- Sol S\u00FCtun: Canl\u0131 Tart\u0131m -->\r\n <div class=\"col-6\" style=\"display: grid;\">\r\n <div class=\"card bg-light h-100\">\r\n <div class=\"card-body text-center py-4\">\r\n <div class=\"text-muted small mb-1 fw-semibold text-uppercase\">\r\n {{ 'Kadooglu::LiveWeighing' | abpLocalization }}\r\n </div>\r\n <div style=\"font-size: 2.5rem; font-weight: bold; letter-spacing: 0.05em;\">\r\n {{ currentScaleValue != null ? (currentScaleValue | number:'1.0-0') + ' kg' : '\u2014 kg' }}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Sa\u011F S\u00FCtun: Sabitlenmi\u015F De\u011Fer -->\r\n <div class=\"col-6\" style=\"display: grid;\">\r\n <div class=\"card h-100\"\r\n [ngClass]=\"fixedScaleValue != null ? 'border-success' : 'bg-light'\"\r\n [style.background-color]=\"fixedScaleValue != null ? 'rgba(25,135,84,0.08)' : ''\">\r\n <div class=\"card-body text-center py-4\">\r\n <div class=\"small mb-1 fw-semibold text-uppercase\"\r\n [ngClass]=\"fixedScaleValue != null ? 'text-success' : 'text-muted'\">\r\n {{ 'Kadooglu::FixedValue' | abpLocalization }}\r\n </div>\r\n <div style=\"font-size: 2.5rem; font-weight: bold; letter-spacing: 0.05em;\"\r\n [ngClass]=\"fixedScaleValue != null ? 'text-success' : ''\">\r\n {{ fixedScaleValue != null ? (fixedScaleValue | number:'1.0-0') + ' kg' : '\u2014 kg' }}\r\n </div>\r\n </div>\r\n </div>\r\n <button\r\n *ngIf=\"!isFullyCompleted\"\r\n class=\"btn btn-success btn-lg w-100 mt-2\"\r\n [disabled]=\"currentScaleValue == null\"\r\n (click)=\"sabitle()\">\r\n <i class=\"fa fa-lock me-2\"></i>\r\n {{ 'Kadooglu::Fix' | abpLocalization }}\r\n </button>\r\n </div>\r\n\r\n </div>\r\n\r\n <!-- \u0130lk Tart\u0131m -->\r\n <div class=\"mb-3\">\r\n <div class=\"text-muted small fw-semibold text-uppercase mb-1\">{{ 'Kadooglu::FirstWeighing' | abpLocalization }}</div>\r\n <div *ngIf=\"firstWeighingValue != null; else noFirstWeighing\" class=\"card card-body p-2\">\r\n <div class=\"d-flex justify-content-between align-items-center\">\r\n <span class=\"fw-bold fs-5\">{{ firstWeighingValue | number:'1.0-0' }} kg</span>\r\n <span class=\"text-muted small\">{{ 'Kadooglu::Operator' | abpLocalization }}: {{ firstOperatorCode }}</span>\r\n </div>\r\n </div>\r\n <ng-template #noFirstWeighing>\r\n <div class=\"card card-body p-2 text-muted text-center fst-italic\">{{ 'Kadooglu::NotYetDone' | abpLocalization }}</div>\r\n </ng-template>\r\n </div>\r\n\r\n <!-- Son Tart\u0131m -->\r\n <div class=\"mb-3\">\r\n <div class=\"text-muted small fw-semibold text-uppercase mb-1\">{{ 'Kadooglu::LastWeighing' | abpLocalization }}</div>\r\n <div *ngIf=\"lastWeighingValue != null; else noLastWeighing\" class=\"card card-body p-2\">\r\n <div class=\"d-flex justify-content-between align-items-center\">\r\n <span class=\"fw-bold fs-5\">{{ lastWeighingValue | number:'1.0-0' }} kg</span>\r\n <span class=\"text-muted small\">{{ 'Kadooglu::Operator' | abpLocalization }}: {{ lastOperatorCode }}</span>\r\n </div>\r\n </div>\r\n <ng-template #noLastWeighing>\r\n <div class=\"card card-body p-2 text-muted text-center fst-italic\">{{ 'Kadooglu::NotYetDone' | abpLocalization }}</div>\r\n </ng-template>\r\n </div>\r\n\r\n <!-- Net Y\u00FCk (sadece step=3'te g\u00F6ster) -->\r\n <div *ngIf=\"weighingStep === 3 && netWeight != null\" class=\"card border-success mb-3\">\r\n <div class=\"card-body text-center py-3\" style=\"background-color: rgba(25,135,84,0.08);\">\r\n <div class=\"text-success small fw-semibold text-uppercase mb-1\">{{ 'Kadooglu::NetWeight' | abpLocalization }}</div>\r\n <div class=\"text-success fw-bold\" style=\"font-size: 2rem;\">\r\n {{ netWeight | number:'1.0-0' }} kg\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Phase 2 Alt Butonlar -->\r\n <div class=\"d-flex justify-content-between mt-3 mb-3\">\r\n <button class=\"btn btn-secondary\" (click)=\"geriGitPhase()\">\r\n <i class=\"fa fa-arrow-left me-1\"></i> {{ 'Kadooglu::Back' | abpLocalization }}\r\n </button>\r\n <abp-button\r\n *ngIf=\"!isFullyCompleted\"\r\n iconClass=\"fa fa-save\"\r\n buttonType=\"button\"\r\n [loading]=\"isSaving\"\r\n (click)=\"save()\">\r\n {{ 'Kadooglu::Save' | abpLocalization }}\r\n </abp-button>\r\n </div>\r\n </div>\r\n\r\n <!-- ========== SUMMARY: Tamamland\u0131 G\u00F6r\u00FCn\u00FCm\u00FC ========== -->\r\n <div *ngIf=\"isFullyCompleted\">\r\n\r\n <!-- \u00DCst B\u00F6l\u00FCm \u2014 Tart\u0131m Sonu\u00E7 Kartlar\u0131 -->\r\n <div class=\"row mb-4\">\r\n <!-- \u0130lk Tart\u0131m -->\r\n <div class=\"col-md-4 mb-3 mb-md-0\">\r\n <div class=\"bg-white shadow-sm rounded py-3 px-4 h-100\" style=\"border-left: 4px solid #0d6efd;\">\r\n <div class=\"text-uppercase text-muted small fw-semibold mb-1\">{{ 'Kadooglu::FirstWeighing' | abpLocalization }}</div>\r\n <div class=\"fw-bold\" style=\"font-size: 1.75rem; letter-spacing: 0.02em;\">\r\n {{ firstWeighingValue != null ? (firstWeighingValue | number:'1.0-0') + ' kg' : '\u2014 kg' }}\r\n </div>\r\n <div class=\"text-muted small mt-1\">{{ 'Kadooglu::Operator' | abpLocalization }}: {{ firstOperatorCode || '\u2014' }}</div>\r\n </div>\r\n </div>\r\n <!-- Son Tart\u0131m -->\r\n <div class=\"col-md-4 mb-3 mb-md-0\">\r\n <div class=\"bg-white shadow-sm rounded py-3 px-4 h-100\" style=\"border-left: 4px solid #6f42c1;\">\r\n <div class=\"text-uppercase text-muted small fw-semibold mb-1\">{{ 'Kadooglu::LastWeighing' | abpLocalization }}</div>\r\n <div class=\"fw-bold\" style=\"font-size: 1.75rem; letter-spacing: 0.02em;\">\r\n {{ lastWeighingValue != null ? (lastWeighingValue | number:'1.0-0') + ' kg' : '\u2014 kg' }}\r\n </div>\r\n <div class=\"text-muted small mt-1\">{{ 'Kadooglu::Operator' | abpLocalization }}: {{ lastOperatorCode || '\u2014' }}</div>\r\n </div>\r\n </div>\r\n <!-- Net Y\u00FCk -->\r\n <div class=\"col-md-4\">\r\n <div class=\"shadow-sm rounded py-3 px-4 h-100\" style=\"border-left: 4px solid #198754; background: rgba(25,135,84,0.06);\">\r\n <div class=\"text-uppercase text-muted small fw-semibold mb-1\">{{ 'Kadooglu::NetWeight' | abpLocalization }}</div>\r\n <div class=\"fw-bold\" style=\"font-size: 1.75rem; letter-spacing: 0.02em; color: #198754;\">\r\n {{ netWeight != null ? (netWeight | number:'1.0-0') + ' kg' : '\u2014 kg' }}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Alt B\u00F6l\u00FCm \u2014 Detay Bilgileri -->\r\n <div class=\"card shadow-sm\">\r\n <div class=\"card-header fw-bold\">\r\n <i class=\"fa fa-file-text me-2\"></i>{{ 'Kadooglu::RecordDetails' | abpLocalization }}\r\n </div>\r\n <div class=\"card-body\">\r\n <div class=\"row\">\r\n <!-- Sol S\u00FCtun -->\r\n <div class=\"col-md-6\">\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::Gate' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ gateName || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">Ara\u00E7 Hareket T\u00FCr\u00FC</div>\r\n <div class=\"col-7 fw-medium\">{{ entryTypeName || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::EntryDate' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ entryDate ? (entryDate | date:'dd.MM.yyyy') : '\u2014' }} {{ entryTime || '' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::ExitDate' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ exitDate ? (exitDate | date:'dd.MM.yyyy') : '\u2014' }} {{ exitTime || '' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::TruckPlate' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ truckPlateNo || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::TrailerPlate' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ trailerPlateNo || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::DriverName' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ driverFullName || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::TcIdentityNo' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ tcNo || '\u2014' }}</div>\r\n </div>\r\n </div>\r\n <!-- Sa\u011F S\u00FCtun -->\r\n <div class=\"col-md-6\">\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::DriverCode' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ driverName || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::BusinessPartner' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ accountTitle || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::WaybillNumber' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ waybillNo || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::ScaleCode' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ scaleName || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::ItemCode' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ stockName || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::ContainerNo' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ containerNo || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::DepartureToArrival' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ (departureLocation || '\u2014') + ' \u2192 ' + (arrivalLocation || '\u2014') }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::Description' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ description || '\u2014' }}</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Alt Butonlar -->\r\n <div class=\"d-flex justify-content-between mt-3 mb-3\">\r\n <button class=\"btn btn-secondary\" (click)=\"goBack()\">\r\n <i class=\"fa fa-arrow-left me-1\"></i> {{ 'Kadooglu::BackToList' | abpLocalization }}\r\n </button>\r\n <button\r\n *ngIf=\"entryTypeMalGC && record?.u_Status === '2'\"\r\n class=\"btn btn-warning\"\r\n type=\"button\"\r\n [disabled]=\"isDoingGoodsMovement\"\r\n (click)=\"doGoodsMovement()\">\r\n <i [class]=\"isDoingGoodsMovement ? 'fa fa-spinner fa-spin me-1' : 'fa fa-exchange me-1'\" aria-hidden=\"true\"></i>\r\n {{ 'Kadooglu::MalGcYap' | abpLocalization }}\r\n </button>\r\n </div>\r\n </div>\r\n\r\n</abp-page>\r\n", dependencies: [{ kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.ButtonComponent, selector: "abp-button", inputs: ["buttonId", "buttonClass", "buttonType", "formName", "iconClass", "loading", "disabled", "attributes"], outputs: ["click", "focus", "blur", "abpClick", "abpFocus", "abpBlur"] }, { kind: "component", type: i8.PageComponent, selector: "abp-page", inputs: ["title", "toolbar", "breadcrumb"] }, { kind: "component", type: i8.PageToolbarContainerComponent, selector: "abp-page-toolbar-container" }, { kind: "component", type: i9.HitModalComponent, selector: "hit-lookup-select", inputs: ["displayName", "keyExpr", "modalSize", "getFn", "loadFn", "columns", "isVisible", "disabled", "readOnly", "editingData"], outputs: ["selected"] }, { kind: "component", type: i10.DxDateBoxComponent, selector: "dx-date-box", inputs: ["acceptCustomValue", "accessKey", "activeStateEnabled", "adaptivityEnabled", "applyButtonText", "applyValueMode", "buttons", "calendarOptions", "cancelButtonText", "dateOutOfRangeMessage", "dateSerializationFormat", "deferRendering", "disabled", "disabledDates", "displayFormat", "dropDownButtonTemplate", "dropDownOptions", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "inputAttr", "interval", "invalidDateMessage", "isValid", "label", "labelMode", "max", "maxLength", "min", "name", "opened", "openOnFieldClick", "pickerType", "placeholder", "readOnly", "rtlEnabled", "showAnalogClock", "showClearButton", "showDropDownButton", "spellcheck", "stylingMode", "tabIndex", "text", "todayButtonText", "type", "useMaskBehavior", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "valueChangeEvent", "visible", "width"], outputs: ["onChange", "onClosed", "onContentReady", "onCopy", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onKeyDown", "onKeyUp", "onOpened", "onOptionChanged", "onPaste", "onValueChanged", "acceptCustomValueChange", "accessKeyChange", "activeStateEnabledChange", "adaptivityEnabledChange", "applyButtonTextChange", "applyValueModeChange", "buttonsChange", "calendarOptionsChange", "cancelButtonTextChange", "dateOutOfRangeMessageChange", "dateSerializationFormatChange", "deferRenderingChange", "disabledChange", "disabledDatesChange", "displayFormatChange", "dropDownButtonTemplateChange", "dropDownOptionsChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "intervalChange", "invalidDateMessageChange", "isValidChange", "labelChange", "labelModeChange", "maxChange", "maxLengthChange", "minChange", "nameChange", "openedChange", "openOnFieldClickChange", "pickerTypeChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "showAnalogClockChange", "showClearButtonChange", "showDropDownButtonChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "todayButtonTextChange", "typeChange", "useMaskBehaviorChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "component", type: i10.DxTextBoxComponent, selector: "dx-text-box", inputs: ["accessKey", "activeStateEnabled", "buttons", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "inputAttr", "isValid", "label", "labelMode", "mask", "maskChar", "maskInvalidMessage", "maskRules", "maxLength", "mode", "name", "placeholder", "readOnly", "rtlEnabled", "showClearButton", "showMaskMode", "spellcheck", "stylingMode", "tabIndex", "text", "useMaskedValue", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "valueChangeEvent", "visible", "width"], outputs: ["onChange", "onContentReady", "onCopy", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onKeyDown", "onKeyUp", "onOptionChanged", "onPaste", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isValidChange", "labelChange", "labelModeChange", "maskChange", "maskCharChange", "maskInvalidMessageChange", "maskRulesChange", "maxLengthChange", "modeChange", "nameChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "showClearButtonChange", "showMaskModeChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "useMaskedValueChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "component", type: i10.DxTextAreaComponent, selector: "dx-text-area", inputs: ["accessKey", "activeStateEnabled", "autoResizeEnabled", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "inputAttr", "isValid", "label", "labelMode", "maxHeight", "maxLength", "minHeight", "name", "placeholder", "readOnly", "rtlEnabled", "spellcheck", "stylingMode", "tabIndex", "text", "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", "autoResizeEnabledChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isValidChange", "labelChange", "labelModeChange", "maxHeightChange", "maxLengthChange", "minHeightChange", "nameChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "component", type: i10.DxCheckBoxComponent, selector: "dx-check-box", inputs: ["accessKey", "activeStateEnabled", "disabled", "elementAttr", "enableThreeStateBehavior", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "iconSize", "isValid", "name", "readOnly", "rtlEnabled", "tabIndex", "text", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "visible", "width"], outputs: ["onContentReady", "onDisposing", "onInitialized", "onOptionChanged", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "disabledChange", "elementAttrChange", "enableThreeStateBehaviorChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "iconSizeChange", "isValidChange", "nameChange", "readOnlyChange", "rtlEnabledChange", "tabIndexChange", "textChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "pipe", type: i7.DecimalPipe, name: "number" }, { kind: "pipe", type: i7.DatePipe, name: "date" }, { kind: "pipe", type: i5.LocalizationPipe, name: "abpLocalization" }] });
657
+ HitEntryWeighingFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: HitEntryWeighingFormComponent, selector: "lib-hit-entry-weighing-form", ngImport: i0, template: "<abp-page [breadcrumb]=\"false\">\r\n <abp-page-toolbar-container class=\"col\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col\">\r\n <h3 class=\"page-title\">\r\n {{ 'Kadooglu::EntryWeighingTitle' | abpLocalization }}\r\n <span *ngIf=\"weighingMode\" class=\"badge ms-2 fs-6\"\r\n [ngClass]=\"{\r\n 'bg-warning text-dark': weighingMode === 'first',\r\n 'bg-primary': weighingMode === 'last'\r\n }\">\r\n {{ weighingModeLabel }}\r\n </span>\r\n <span *ngIf=\"!weighingMode\" class=\"badge ms-2 fs-6\"\r\n [ngClass]=\"{\r\n 'bg-secondary': weighingStep === 1,\r\n 'bg-info': weighingStep === 2,\r\n 'bg-success': weighingStep === 3\r\n }\">\r\n {{ (weighingStep === 1 ? 'Kadooglu::RecordStep' : weighingStep === 2 ? 'Kadooglu::FirstWeighing' : 'Kadooglu::Completed') | abpLocalization }}\r\n </span>\r\n </h3>\r\n </div>\r\n </div>\r\n </abp-page-toolbar-container>\r\n\r\n <!-- Step Indicator -->\r\n <div class=\"card mb-3\">\r\n <div class=\"card-body py-3\">\r\n <div class=\"d-flex align-items-center justify-content-center\">\r\n\r\n <!-- Step 1: Ara\u00E7 & Belge -->\r\n <div class=\"d-flex flex-column align-items-center\">\r\n <div class=\"rounded-circle d-flex align-items-center justify-content-center fw-bold text-white\"\r\n style=\"width:40px; height:40px; font-size:1rem;\"\r\n [style.background-color]=\"formPhase > 1 || isFullyCompleted ? '#198754' : (formPhase === 1 ? '#0d6efd' : '#6c757d')\">\r\n <i *ngIf=\"formPhase > 1 || isFullyCompleted\" class=\"fa fa-check\"></i>\r\n <span *ngIf=\"formPhase <= 1 && !isFullyCompleted\">1</span>\r\n </div>\r\n <small class=\"mt-1 fw-semibold\" [class.text-success]=\"formPhase > 1 || isFullyCompleted\" [class.text-primary]=\"formPhase === 1 && !isFullyCompleted\">{{ 'Kadooglu::VehicleAndDocument' | abpLocalization }}</small>\r\n </div>\r\n\r\n <div class=\"flex-grow-1 mx-2\" style=\"height:3px; max-width:120px;\"\r\n [style.background-color]=\"formPhase > 1 ? '#198754' : '#dee2e6'\"></div>\r\n\r\n <!-- Step 2: Tart\u0131m -->\r\n <div class=\"d-flex flex-column align-items-center\">\r\n <div class=\"rounded-circle d-flex align-items-center justify-content-center fw-bold text-white\"\r\n style=\"width:40px; height:40px; font-size:1rem;\"\r\n [style.background-color]=\"weighingStep === 3 ? '#198754' : (formPhase === 2 ? '#0d6efd' : '#6c757d')\">\r\n <i *ngIf=\"weighingStep === 3\" class=\"fa fa-check\"></i>\r\n <span *ngIf=\"weighingStep < 3\">2</span>\r\n </div>\r\n <small class=\"mt-1 fw-semibold\" [class.text-success]=\"weighingStep === 3\" [class.text-primary]=\"formPhase === 2 && weighingStep < 3\" [class.text-muted]=\"formPhase < 2 && weighingStep < 3\">{{ 'Kadooglu::WeighingStep' | abpLocalization }}</small>\r\n </div>\r\n\r\n <div class=\"flex-grow-1 mx-2\" style=\"height:3px; max-width:120px;\"\r\n [style.background-color]=\"weighingStep === 3 ? '#198754' : '#dee2e6'\"></div>\r\n\r\n <!-- Step 3: Tamamland\u0131 -->\r\n <div class=\"d-flex flex-column align-items-center\">\r\n <div class=\"rounded-circle d-flex align-items-center justify-content-center fw-bold text-white\"\r\n style=\"width:40px; height:40px; font-size:1rem;\"\r\n [style.background-color]=\"weighingStep === 3 ? '#198754' : '#6c757d'\">\r\n <i *ngIf=\"weighingStep === 3\" class=\"fa fa-check\"></i>\r\n <span *ngIf=\"weighingStep < 3\">3</span>\r\n </div>\r\n <small class=\"mt-1 fw-semibold\" [class.text-success]=\"weighingStep === 3\" [class.text-muted]=\"weighingStep < 3\">{{ 'Kadooglu::Completed' | abpLocalization }}</small>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- ========== PHASE 1: Ara\u00E7 & Belge ========== -->\r\n <div *ngIf=\"formPhase === 1 && !isFullyCompleted\">\r\n <div class=\"card\">\r\n <div class=\"card-body\">\r\n <div class=\"row\">\r\n\r\n <!-- Sol s\u00FCtun: Giri\u015F/\u00C7\u0131k\u0131\u015F + Ara\u00E7 & S\u00FCr\u00FCc\u00FC -->\r\n <div class=\"col-md-6\">\r\n\r\n <!-- Grup 1: Giri\u015F / \u00C7\u0131k\u0131\u015F Bilgileri -->\r\n <div class=\"border rounded p-3 mb-3\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-sign-in-alt me-2\"></i>{{ 'Kadooglu::EntryExitInfo' | abpLocalization }}\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::GateSelection' | abpLocalization }}</label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadGates\"\r\n [columns]=\"gateColumns\"\r\n displayName=\"name\"\r\n [editingData]=\"gateName\"\r\n [readOnly]=\"isUpdateMode\"\r\n (selected)=\"onGateSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">Ara\u00E7 Hareket T\u00FCr\u00FC</label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadVehicleTypes\"\r\n [columns]=\"vehicleTypeColumns\"\r\n displayName=\"name\"\r\n [editingData]=\"entryTypeName\"\r\n [readOnly]=\"isUpdateMode\"\r\n (selected)=\"onVehicleTypeSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::EntryDate' | abpLocalization }}</label>\r\n <dx-date-box\r\n [value]=\"entryDateTime\"\r\n type=\"datetime\"\r\n displayFormat=\"dd.MM.yyyy HH:mm\"\r\n [readOnly]=\"isUpdateMode\"\r\n width=\"100%\">\r\n </dx-date-box>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::ExitDate' | abpLocalization }}</label>\r\n <dx-date-box\r\n [value]=\"exitDateTime\"\r\n type=\"datetime\"\r\n displayFormat=\"dd.MM.yyyy HH:mm\"\r\n [readOnly]=\"isUpdateMode\"\r\n width=\"100%\">\r\n </dx-date-box>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Grup 2: Ara\u00E7 & S\u00FCr\u00FCc\u00FC Bilgileri -->\r\n <div class=\"border rounded p-3 mb-3\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-truck me-2\"></i>{{ 'Kadooglu::VehicleDriverInfo' | abpLocalization }}\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::TruckPlate' | abpLocalization }}\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadTruckPlates\"\r\n [columns]=\"truckPlateColumns\"\r\n displayName=\"plateNo\"\r\n [editingData]=\"truckPlateNo\"\r\n [readOnly]=\"isFormLocked\"\r\n (selected)=\"onTruckPlateSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n <div class=\"col-md-6 mb-3\" *ngIf=\"trailerPlateNo\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::TrailerPlate' | abpLocalization }}</label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadTrailerPlates\"\r\n [columns]=\"trailerPlateColumns\"\r\n displayName=\"plateNo\"\r\n [editingData]=\"trailerPlateNo\"\r\n [readOnly]=\"isFormLocked\"\r\n (selected)=\"onTrailerPlateSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::DriverName' | abpLocalization }}</label>\r\n <dx-text-box\r\n [(value)]=\"driverFullName\"\r\n [placeholder]=\"'Kadooglu::EnterDriverName' | abpLocalization\"\r\n [readOnly]=\"true\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <div class=\"d-flex align-items-center gap-2 mb-1\">\r\n <label class=\"form-label mb-0 small fw-semibold text-muted\">{{ isTcCitizen ? ('Kadooglu::TcIdentityNo' | abpLocalization) : 'Kimlik No' }}</label>\r\n <dx-check-box [(value)]=\"isTcCitizen\" [readOnly]=\"isUpdateMode\" text=\"T.C. Vatanda\u015F\u0131\"></dx-check-box>\r\n </div>\r\n <dx-text-box\r\n [(value)]=\"tcNo\"\r\n [placeholder]=\"isTcCitizen ? ('Kadooglu::TcIdentityNo' | abpLocalization) : 'Kimlik No'\"\r\n [readOnly]=\"true\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n <!-- Sa\u011F s\u00FCtun: Belge & Y\u00FCk -->\r\n <div class=\"col-md-6\">\r\n\r\n <!-- Grup 3: Belge & Y\u00FCk Bilgileri -->\r\n <div class=\"border rounded p-3 mb-3\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-file-alt me-2\"></i>{{ 'Kadooglu::DocumentCargoInfo' | abpLocalization }}\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::BusinessPartner' | abpLocalization }}</label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadAccounts\"\r\n [columns]=\"accountColumns\"\r\n displayName=\"title\"\r\n [editingData]=\"accountTitle\"\r\n [readOnly]=\"isFormLocked\"\r\n (selected)=\"onAccountSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::WaybillNumber' | abpLocalization }}</label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadWaybills\"\r\n [columns]=\"waybillColumns\"\r\n displayName=\"docNum\"\r\n keyExpr=\"docEntry\"\r\n [editingData]=\"waybillNo\"\r\n [showDateFilter]=\"true\"\r\n [defaultDateFrom]=\"waybillDefaultDateFrom\"\r\n [defaultDateTo]=\"waybillDefaultDateTo\"\r\n (selected)=\"onWaybillSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::ItemCode' | abpLocalization }}</label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadStockItems\"\r\n [columns]=\"stockItemColumns\"\r\n displayName=\"name\"\r\n [editingData]=\"stockName\"\r\n (selected)=\"onStockItemSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::ContainerNo' | abpLocalization }}</label>\r\n <dx-text-box\r\n [(value)]=\"containerNo\"\r\n [placeholder]=\"'Kadooglu::ManualEntry' | abpLocalization\"\r\n [readOnly]=\"isFormLocked\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::DeparturePlace' | abpLocalization }}</label>\r\n <dx-text-box\r\n [(value)]=\"departureLocation\"\r\n [disabled]=\"true\"\r\n [placeholder]=\"'Kadooglu::AutoFilledFromWaybill' | abpLocalization\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::ArrivalPlace' | abpLocalization }}</label>\r\n <dx-text-box\r\n [(value)]=\"arrivalLocation\"\r\n [disabled]=\"true\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n <div class=\"col-md-12 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::Description' | abpLocalization }}</label>\r\n <dx-text-area\r\n [(value)]=\"description\"\r\n [height]=\"70\"\r\n [readOnly]=\"isFormLocked\"\r\n width=\"100%\">\r\n </dx-text-area>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n </div>\r\n </div>\r\n <!-- Phase 1 Alt Butonlar -->\r\n <div class=\"d-flex justify-content-between mt-3 mb-3\">\r\n <button class=\"btn btn-secondary\" (click)=\"goBack()\">\r\n <i class=\"fa fa-arrow-left me-1\"></i> {{ 'Kadooglu::Back' | abpLocalization }}\r\n </button>\r\n <div class=\"d-flex gap-2\">\r\n <abp-button\r\n *ngIf=\"!weighingMode && !isFormLocked\"\r\n iconClass=\"fa fa-save\"\r\n buttonType=\"button\"\r\n [loading]=\"isSaving\"\r\n (click)=\"save()\">\r\n {{ 'Kadooglu::Save' | abpLocalization }}\r\n </abp-button>\r\n <button class=\"btn btn-primary\" (click)=\"ileriGit()\">\r\n {{ 'Kadooglu::Next' | abpLocalization }} <i class=\"fa fa-arrow-right ms-1\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- ========== PHASE 2: Tart\u0131m Paneli ========== -->\r\n <div *ngIf=\"formPhase === 2 && !isFullyCompleted\">\r\n <div class=\"card\">\r\n <div class=\"card-body\">\r\n <div class=\"row\">\r\n <div class=\"col-12\">\r\n\r\n <!-- Grup 1: Terazi -->\r\n <div class=\"border rounded p-3 mb-3\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary d-flex align-items-center justify-content-between\">\r\n <span>\r\n <i class=\"fa fa-balance-scale me-2\"></i>{{ 'Kadooglu::WeighingPanel' | abpLocalization }}\r\n </span>\r\n <span *ngIf=\"weighingMode\" class=\"badge\"\r\n [ngClass]=\"weighingMode === 'first' ? 'bg-warning text-dark' : 'bg-primary'\">\r\n {{ weighingModeLabel }}\r\n </span>\r\n </div>\r\n\r\n <div class=\"row g-3 align-items-stretch\">\r\n\r\n <!-- Sol: Canl\u0131 Tart\u0131m -->\r\n <div class=\"col-md-5\" style=\"display: grid;\">\r\n <div class=\"card bg-light h-100\">\r\n <div class=\"card-body text-center py-4\">\r\n <div class=\"text-muted small mb-1 fw-semibold text-uppercase\">\r\n {{ 'Kadooglu::LiveWeighing' | abpLocalization }}\r\n </div>\r\n <div *ngIf=\"isScaleConnecting || isScaleReconnecting\" class=\"my-2\">\r\n <div class=\"spinner-border text-secondary\" role=\"status\">\r\n <span class=\"visually-hidden\">{{ (isScaleReconnecting ? 'Kadooglu::Reconnecting' : 'Kadooglu::Connecting') | abpLocalization }}</span>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!isScaleConnecting && !isScaleReconnecting && !scaleConnectionFailed\" style=\"font-size: 2.5rem; font-weight: bold; letter-spacing: 0.05em;\">\r\n {{ currentScaleValue != null ? (currentScaleValue | number:'1.0-0') + ' kg' : '\u2014 kg' }}\r\n </div>\r\n <div *ngIf=\"scaleConnectionFailed\" class=\"text-center py-1\">\r\n <i class=\"fa fa-chain-broken fa-2x text-secondary mb-2 d-block\"></i>\r\n <span class=\"text-secondary fw-semibold d-block\" style=\"font-size: 0.95rem; line-height: 1.5;\">\r\n {{ 'Kadooglu::ScaleConnectionFailedInline' | abpLocalization }}\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Orta: Ak\u0131\u015F oku -->\r\n <div class=\"col-md-2 d-flex align-items-center justify-content-center\">\r\n <i class=\"fa fa-arrow-right fa-2x text-muted\"></i>\r\n </div>\r\n\r\n <!-- Sa\u011F: Sabitlenmi\u015F De\u011Fer + Sabitle butonu -->\r\n <div class=\"col-md-5\" style=\"display: grid;\">\r\n <div class=\"card h-100\"\r\n [ngClass]=\"fixedScaleValue != null ? 'border-success' : 'bg-light'\"\r\n [style.background-color]=\"fixedScaleValue != null ? 'rgba(25,135,84,0.08)' : ''\">\r\n <div class=\"card-body text-center py-4\">\r\n <div class=\"small mb-1 fw-semibold text-uppercase\"\r\n [ngClass]=\"fixedScaleValue != null ? 'text-success' : 'text-muted'\">\r\n {{ 'Kadooglu::FixedValue' | abpLocalization }}\r\n </div>\r\n <div style=\"font-size: 2.5rem; font-weight: bold; letter-spacing: 0.05em;\"\r\n [ngClass]=\"fixedScaleValue != null ? 'text-success' : ''\">\r\n {{ fixedScaleValue != null ? (fixedScaleValue | number:'1.0-0') + ' kg' : '\u2014 kg' }}\r\n </div>\r\n </div>\r\n </div>\r\n <button\r\n *ngIf=\"!isFullyCompleted\"\r\n class=\"btn btn-success btn-lg w-100 mt-2\"\r\n [disabled]=\"currentScaleValue == null\"\r\n (click)=\"sabitle()\">\r\n <i class=\"fa fa-lock me-2\"></i>\r\n {{ 'Kadooglu::Fix' | abpLocalization }}\r\n </button>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n <!-- Grup 2: Tart\u0131m Kay\u0131tlar\u0131 -->\r\n <div class=\"border rounded p-3 mb-3\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-history me-2\"></i>{{ 'Kadooglu::WeighingRecords' | abpLocalization }}\r\n </div>\r\n\r\n <div class=\"row g-3\">\r\n\r\n <!-- \u0130lk Tart\u0131m -->\r\n <div class=\"col-md-4\">\r\n <div class=\"h-100 rounded py-3 px-4\" style=\"border-left: 4px solid #0d6efd; background: #fff;\">\r\n <div class=\"text-uppercase text-muted small fw-semibold mb-1\">\r\n {{ 'Kadooglu::FirstWeighing' | abpLocalization }}\r\n </div>\r\n <div *ngIf=\"firstWeighingValue != null; else noFirstWeighing\">\r\n <div class=\"fw-bold\" style=\"font-size: 1.75rem; letter-spacing: 0.02em;\">\r\n {{ firstWeighingValue | number:'1.0-0' }} kg\r\n </div>\r\n <div class=\"text-muted small mt-1\">\r\n {{ 'Kadooglu::Operator' | abpLocalization }}: {{ firstOperatorCode }}\r\n </div>\r\n </div>\r\n <ng-template #noFirstWeighing>\r\n <div class=\"text-muted fst-italic mt-2\">{{ 'Kadooglu::NotYetDone' | abpLocalization }}</div>\r\n </ng-template>\r\n </div>\r\n </div>\r\n\r\n <!-- Son Tart\u0131m -->\r\n <div class=\"col-md-4\">\r\n <div class=\"h-100 rounded py-3 px-4\" style=\"border-left: 4px solid #6f42c1; background: #fff;\">\r\n <div class=\"text-uppercase text-muted small fw-semibold mb-1\">\r\n {{ 'Kadooglu::LastWeighing' | abpLocalization }}\r\n </div>\r\n <div *ngIf=\"lastWeighingValue != null; else noLastWeighing\">\r\n <div class=\"fw-bold\" style=\"font-size: 1.75rem; letter-spacing: 0.02em;\">\r\n {{ lastWeighingValue | number:'1.0-0' }} kg\r\n </div>\r\n <div class=\"text-muted small mt-1\">\r\n {{ 'Kadooglu::Operator' | abpLocalization }}: {{ lastOperatorCode }}\r\n </div>\r\n </div>\r\n <ng-template #noLastWeighing>\r\n <div class=\"text-muted fst-italic mt-2\">{{ 'Kadooglu::NotYetDone' | abpLocalization }}</div>\r\n </ng-template>\r\n </div>\r\n </div>\r\n\r\n <!-- Net Y\u00FCk (sadece weighingStep===3'te) -->\r\n <div class=\"col-md-4\" *ngIf=\"weighingStep === 3 && netWeight != null\">\r\n <div class=\"h-100 rounded py-3 px-4\" style=\"border-left: 4px solid #198754; background: rgba(25,135,84,0.06);\">\r\n <div class=\"text-uppercase text-muted small fw-semibold mb-1\">\r\n {{ 'Kadooglu::NetWeight' | abpLocalization }}\r\n </div>\r\n <div class=\"fw-bold\" style=\"font-size: 1.75rem; letter-spacing: 0.02em; color: #198754;\">\r\n {{ netWeight | number:'1.0-0' }} kg\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Phase 2 Alt Butonlar -->\r\n <div class=\"d-flex justify-content-between mt-3 mb-3\">\r\n <button class=\"btn btn-secondary\" (click)=\"geriGitPhase()\">\r\n <i class=\"fa fa-arrow-left me-1\"></i> {{ 'Kadooglu::Back' | abpLocalization }}\r\n </button>\r\n <abp-button\r\n *ngIf=\"!isFullyCompleted\"\r\n iconClass=\"fa fa-save\"\r\n buttonType=\"button\"\r\n [loading]=\"isSaving\"\r\n (click)=\"save()\">\r\n {{ 'Kadooglu::Save' | abpLocalization }}\r\n </abp-button>\r\n </div>\r\n </div>\r\n\r\n <!-- ========== SUMMARY: Tamamland\u0131 G\u00F6r\u00FCn\u00FCm\u00FC ========== -->\r\n <div *ngIf=\"isFullyCompleted\">\r\n <div class=\"card\">\r\n <div class=\"card-body\">\r\n <div class=\"row\">\r\n\r\n <!-- Tam geni\u015Flik: Tart\u0131m Sonu\u00E7lar\u0131 -->\r\n <div class=\"col-12\">\r\n <div class=\"border rounded p-3 mb-3\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-balance-scale me-2\"></i>{{ 'Kadooglu::WeighingResults' | abpLocalization }}\r\n </div>\r\n <div class=\"row g-3\">\r\n\r\n <!-- \u0130lk Tart\u0131m -->\r\n <div class=\"col-md-4\">\r\n <div class=\"bg-white shadow-sm rounded py-3 px-4 h-100\" style=\"border-left: 4px solid #0d6efd;\">\r\n <div class=\"text-uppercase text-muted small fw-semibold mb-1\">{{ 'Kadooglu::FirstWeighing' | abpLocalization }}</div>\r\n <div class=\"fw-bold\" style=\"font-size: 1.75rem; letter-spacing: 0.02em;\">\r\n {{ firstWeighingValue != null ? (firstWeighingValue | number:'1.0-0') + ' kg' : '\u2014 kg' }}\r\n </div>\r\n <div class=\"text-muted small mt-1\">{{ 'Kadooglu::Operator' | abpLocalization }}: {{ firstOperatorCode || '\u2014' }}</div>\r\n </div>\r\n </div>\r\n\r\n <!-- Son Tart\u0131m -->\r\n <div class=\"col-md-4\">\r\n <div class=\"bg-white shadow-sm rounded py-3 px-4 h-100\" style=\"border-left: 4px solid #6f42c1;\">\r\n <div class=\"text-uppercase text-muted small fw-semibold mb-1\">{{ 'Kadooglu::LastWeighing' | abpLocalization }}</div>\r\n <div class=\"fw-bold\" style=\"font-size: 1.75rem; letter-spacing: 0.02em;\">\r\n {{ lastWeighingValue != null ? (lastWeighingValue | number:'1.0-0') + ' kg' : '\u2014 kg' }}\r\n </div>\r\n <div class=\"text-muted small mt-1\">{{ 'Kadooglu::Operator' | abpLocalization }}: {{ lastOperatorCode || '\u2014' }}</div>\r\n </div>\r\n </div>\r\n\r\n <!-- Net Y\u00FCk -->\r\n <div class=\"col-md-4\">\r\n <div class=\"shadow-sm rounded py-3 px-4 h-100\" style=\"border-left: 4px solid #198754; background: rgba(25,135,84,0.06);\">\r\n <div class=\"text-uppercase text-muted small fw-semibold mb-1\">{{ 'Kadooglu::NetWeight' | abpLocalization }}</div>\r\n <div class=\"fw-bold\" style=\"font-size: 1.75rem; letter-spacing: 0.02em; color: #198754;\">\r\n {{ netWeight != null ? (netWeight | number:'1.0-0') + ' kg' : '\u2014 kg' }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Sol s\u00FCtun: Giri\u015F/\u00C7\u0131k\u0131\u015F + Ara\u00E7 & S\u00FCr\u00FCc\u00FC -->\r\n <div class=\"col-md-6\">\r\n\r\n <!-- Grup: Giri\u015F / \u00C7\u0131k\u0131\u015F Bilgileri -->\r\n <div class=\"border rounded p-3 mb-3\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-sign-in-alt me-2\"></i>{{ 'Kadooglu::EntryExitInfo' | abpLocalization }}\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::Gate' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ gateName || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">Ara\u00E7 Hareket T\u00FCr\u00FC</div>\r\n <div class=\"col-7 fw-medium\">{{ entryTypeName || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::EntryDate' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ entryDate ? (entryDate | date:'dd.MM.yyyy') : '\u2014' }} {{ entryTime || '' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::ExitDate' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ exitDate ? (exitDate | date:'dd.MM.yyyy') : '\u2014' }} {{ exitTime || '' }}</div>\r\n </div>\r\n </div>\r\n\r\n <!-- Grup: Ara\u00E7 & S\u00FCr\u00FCc\u00FC Bilgileri -->\r\n <div class=\"border rounded p-3 mb-3\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-truck me-2\"></i>{{ 'Kadooglu::VehicleDriverInfo' | abpLocalization }}\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::TruckPlate' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ truckPlateNo || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::TrailerPlate' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ trailerPlateNo || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::DriverName' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ driverFullName || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::TcIdentityNo' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ tcNo || '\u2014' }}</div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n <!-- Sa\u011F s\u00FCtun: Belge & Y\u00FCk -->\r\n <div class=\"col-md-6\">\r\n\r\n <!-- Grup: Belge & Y\u00FCk Bilgileri -->\r\n <div class=\"border rounded p-3 mb-3\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-file-alt me-2\"></i>{{ 'Kadooglu::DocumentCargoInfo' | abpLocalization }}\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::DriverCode' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ driverName || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::BusinessPartner' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ accountTitle || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::WaybillNumber' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ waybillNo || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::ScaleCode' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ scaleName || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::ItemCode' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ stockName || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::ContainerNo' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ containerNo || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::DepartureToArrival' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ (departureLocation || '\u2014') + ' \u2192 ' + (arrivalLocation || '\u2014') }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::Description' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ description || '\u2014' }}</div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Alt Butonlar -->\r\n <div class=\"d-flex justify-content-between mt-3 mb-3\">\r\n <button class=\"btn btn-secondary\" (click)=\"goBack()\">\r\n <i class=\"fa fa-arrow-left me-1\"></i> {{ 'Kadooglu::BackToList' | abpLocalization }}\r\n </button>\r\n <button\r\n *ngIf=\"entryTypeMalGC && record?.u_Status === '2'\"\r\n class=\"btn btn-warning\"\r\n type=\"button\"\r\n [disabled]=\"isDoingGoodsMovement\"\r\n (click)=\"doGoodsMovement()\">\r\n <i [class]=\"isDoingGoodsMovement ? 'fa fa-spinner fa-spin me-1' : 'fa fa-exchange me-1'\" aria-hidden=\"true\"></i>\r\n {{ 'Kadooglu::MalGcYap' | abpLocalization }}\r\n </button>\r\n </div>\r\n </div>\r\n\r\n</abp-page>\r\n", dependencies: [{ kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.ButtonComponent, selector: "abp-button", inputs: ["buttonId", "buttonClass", "buttonType", "formName", "iconClass", "loading", "disabled", "attributes"], outputs: ["click", "focus", "blur", "abpClick", "abpFocus", "abpBlur"] }, { kind: "component", type: i8.PageComponent, selector: "abp-page", inputs: ["title", "toolbar", "breadcrumb"] }, { kind: "component", type: i8.PageToolbarContainerComponent, selector: "abp-page-toolbar-container" }, { kind: "component", type: i9.HitModalComponent, selector: "hit-lookup-select", inputs: ["displayName", "keyExpr", "modalSize", "getFn", "loadFn", "columns", "isVisible", "disabled", "readOnly", "showDateFilter", "defaultDateFrom", "defaultDateTo", "editingData"], outputs: ["selected"] }, { kind: "component", type: i10.DxDateBoxComponent, selector: "dx-date-box", inputs: ["acceptCustomValue", "accessKey", "activeStateEnabled", "adaptivityEnabled", "applyButtonText", "applyValueMode", "buttons", "calendarOptions", "cancelButtonText", "dateOutOfRangeMessage", "dateSerializationFormat", "deferRendering", "disabled", "disabledDates", "displayFormat", "dropDownButtonTemplate", "dropDownOptions", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "inputAttr", "interval", "invalidDateMessage", "isValid", "label", "labelMode", "max", "maxLength", "min", "name", "opened", "openOnFieldClick", "pickerType", "placeholder", "readOnly", "rtlEnabled", "showAnalogClock", "showClearButton", "showDropDownButton", "spellcheck", "stylingMode", "tabIndex", "text", "todayButtonText", "type", "useMaskBehavior", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "valueChangeEvent", "visible", "width"], outputs: ["onChange", "onClosed", "onContentReady", "onCopy", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onKeyDown", "onKeyUp", "onOpened", "onOptionChanged", "onPaste", "onValueChanged", "acceptCustomValueChange", "accessKeyChange", "activeStateEnabledChange", "adaptivityEnabledChange", "applyButtonTextChange", "applyValueModeChange", "buttonsChange", "calendarOptionsChange", "cancelButtonTextChange", "dateOutOfRangeMessageChange", "dateSerializationFormatChange", "deferRenderingChange", "disabledChange", "disabledDatesChange", "displayFormatChange", "dropDownButtonTemplateChange", "dropDownOptionsChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "intervalChange", "invalidDateMessageChange", "isValidChange", "labelChange", "labelModeChange", "maxChange", "maxLengthChange", "minChange", "nameChange", "openedChange", "openOnFieldClickChange", "pickerTypeChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "showAnalogClockChange", "showClearButtonChange", "showDropDownButtonChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "todayButtonTextChange", "typeChange", "useMaskBehaviorChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "component", type: i10.DxTextBoxComponent, selector: "dx-text-box", inputs: ["accessKey", "activeStateEnabled", "buttons", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "inputAttr", "isValid", "label", "labelMode", "mask", "maskChar", "maskInvalidMessage", "maskRules", "maxLength", "mode", "name", "placeholder", "readOnly", "rtlEnabled", "showClearButton", "showMaskMode", "spellcheck", "stylingMode", "tabIndex", "text", "useMaskedValue", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "valueChangeEvent", "visible", "width"], outputs: ["onChange", "onContentReady", "onCopy", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onKeyDown", "onKeyUp", "onOptionChanged", "onPaste", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isValidChange", "labelChange", "labelModeChange", "maskChange", "maskCharChange", "maskInvalidMessageChange", "maskRulesChange", "maxLengthChange", "modeChange", "nameChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "showClearButtonChange", "showMaskModeChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "useMaskedValueChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "component", type: i10.DxTextAreaComponent, selector: "dx-text-area", inputs: ["accessKey", "activeStateEnabled", "autoResizeEnabled", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "inputAttr", "isValid", "label", "labelMode", "maxHeight", "maxLength", "minHeight", "name", "placeholder", "readOnly", "rtlEnabled", "spellcheck", "stylingMode", "tabIndex", "text", "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", "autoResizeEnabledChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isValidChange", "labelChange", "labelModeChange", "maxHeightChange", "maxLengthChange", "minHeightChange", "nameChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "component", type: i10.DxCheckBoxComponent, selector: "dx-check-box", inputs: ["accessKey", "activeStateEnabled", "disabled", "elementAttr", "enableThreeStateBehavior", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "iconSize", "isValid", "name", "readOnly", "rtlEnabled", "tabIndex", "text", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "visible", "width"], outputs: ["onContentReady", "onDisposing", "onInitialized", "onOptionChanged", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "disabledChange", "elementAttrChange", "enableThreeStateBehaviorChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "iconSizeChange", "isValidChange", "nameChange", "readOnlyChange", "rtlEnabledChange", "tabIndexChange", "textChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "pipe", type: i7.DecimalPipe, name: "number" }, { kind: "pipe", type: i7.DatePipe, name: "date" }, { kind: "pipe", type: i5.LocalizationPipe, name: "abpLocalization" }] });
605
658
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: HitEntryWeighingFormComponent, decorators: [{
606
659
  type: Component,
607
- args: [{ selector: 'lib-hit-entry-weighing-form', template: "<abp-page [breadcrumb]=\"false\">\r\n <abp-page-toolbar-container class=\"col\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col\">\r\n <h3 class=\"page-title\">\r\n {{ 'Kadooglu::EntryWeighingTitle' | abpLocalization }}\r\n <span *ngIf=\"weighingMode\" class=\"badge ms-2 fs-6\"\r\n [ngClass]=\"{\r\n 'bg-warning text-dark': weighingMode === 'first',\r\n 'bg-primary': weighingMode === 'last'\r\n }\">\r\n {{ weighingModeLabel }}\r\n </span>\r\n <span *ngIf=\"!weighingMode\" class=\"badge ms-2 fs-6\"\r\n [ngClass]=\"{\r\n 'bg-secondary': weighingStep === 1,\r\n 'bg-info': weighingStep === 2,\r\n 'bg-success': weighingStep === 3\r\n }\">\r\n {{ (weighingStep === 1 ? 'Kadooglu::RecordStep' : weighingStep === 2 ? 'Kadooglu::FirstWeighing' : 'Kadooglu::Completed') | abpLocalization }}\r\n </span>\r\n </h3>\r\n </div>\r\n </div>\r\n </abp-page-toolbar-container>\r\n\r\n <!-- Step Indicator -->\r\n <div class=\"card mb-3\">\r\n <div class=\"card-body py-3\">\r\n <div class=\"d-flex align-items-center justify-content-center\">\r\n\r\n <!-- Step 1: Ara\u00E7 & Belge -->\r\n <div class=\"d-flex flex-column align-items-center\">\r\n <div class=\"rounded-circle d-flex align-items-center justify-content-center fw-bold text-white\"\r\n style=\"width:40px; height:40px; font-size:1rem;\"\r\n [style.background-color]=\"formPhase > 1 || isFullyCompleted ? '#198754' : (formPhase === 1 ? '#0d6efd' : '#6c757d')\">\r\n <i *ngIf=\"formPhase > 1 || isFullyCompleted\" class=\"fa fa-check\"></i>\r\n <span *ngIf=\"formPhase <= 1 && !isFullyCompleted\">1</span>\r\n </div>\r\n <small class=\"mt-1 fw-semibold\" [class.text-success]=\"formPhase > 1 || isFullyCompleted\" [class.text-primary]=\"formPhase === 1 && !isFullyCompleted\">{{ 'Kadooglu::VehicleAndDocument' | abpLocalization }}</small>\r\n </div>\r\n\r\n <div class=\"flex-grow-1 mx-2\" style=\"height:3px; max-width:120px;\"\r\n [style.background-color]=\"formPhase > 1 ? '#198754' : '#dee2e6'\"></div>\r\n\r\n <!-- Step 2: Tart\u0131m -->\r\n <div class=\"d-flex flex-column align-items-center\">\r\n <div class=\"rounded-circle d-flex align-items-center justify-content-center fw-bold text-white\"\r\n style=\"width:40px; height:40px; font-size:1rem;\"\r\n [style.background-color]=\"weighingStep === 3 ? '#198754' : (formPhase === 2 ? '#0d6efd' : '#6c757d')\">\r\n <i *ngIf=\"weighingStep === 3\" class=\"fa fa-check\"></i>\r\n <span *ngIf=\"weighingStep < 3\">2</span>\r\n </div>\r\n <small class=\"mt-1 fw-semibold\" [class.text-success]=\"weighingStep === 3\" [class.text-primary]=\"formPhase === 2 && weighingStep < 3\" [class.text-muted]=\"formPhase < 2 && weighingStep < 3\">{{ 'Kadooglu::WeighingStep' | abpLocalization }}</small>\r\n </div>\r\n\r\n <div class=\"flex-grow-1 mx-2\" style=\"height:3px; max-width:120px;\"\r\n [style.background-color]=\"weighingStep === 3 ? '#198754' : '#dee2e6'\"></div>\r\n\r\n <!-- Step 3: Tamamland\u0131 -->\r\n <div class=\"d-flex flex-column align-items-center\">\r\n <div class=\"rounded-circle d-flex align-items-center justify-content-center fw-bold text-white\"\r\n style=\"width:40px; height:40px; font-size:1rem;\"\r\n [style.background-color]=\"weighingStep === 3 ? '#198754' : '#6c757d'\">\r\n <i *ngIf=\"weighingStep === 3\" class=\"fa fa-check\"></i>\r\n <span *ngIf=\"weighingStep < 3\">3</span>\r\n </div>\r\n <small class=\"mt-1 fw-semibold\" [class.text-success]=\"weighingStep === 3\" [class.text-muted]=\"weighingStep < 3\">{{ 'Kadooglu::Completed' | abpLocalization }}</small>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- ========== PHASE 1: Ara\u00E7 & Belge ========== -->\r\n <div *ngIf=\"formPhase === 1 && !isFullyCompleted\">\r\n <div class=\"card\">\r\n <div class=\"card-body\">\r\n <div class=\"row\">\r\n\r\n <!-- Sol s\u00FCtun: Giri\u015F/\u00C7\u0131k\u0131\u015F + Ara\u00E7 & S\u00FCr\u00FCc\u00FC -->\r\n <div class=\"col-md-6\">\r\n\r\n <!-- Grup 1: Giri\u015F / \u00C7\u0131k\u0131\u015F Bilgileri -->\r\n <div class=\"border rounded p-3 mb-3\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-sign-in-alt me-2\"></i>{{ 'Kadooglu::EntryExitInfo' | abpLocalization }}\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::GateSelection' | abpLocalization }}</label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadGates\"\r\n [columns]=\"gateColumns\"\r\n displayName=\"name\"\r\n [editingData]=\"gateName\"\r\n [readOnly]=\"isUpdateMode\"\r\n (selected)=\"onGateSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">Ara\u00E7 Hareket T\u00FCr\u00FC</label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadVehicleTypes\"\r\n [columns]=\"vehicleTypeColumns\"\r\n displayName=\"name\"\r\n [editingData]=\"entryTypeName\"\r\n [readOnly]=\"isUpdateMode\"\r\n (selected)=\"onVehicleTypeSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::EntryDate' | abpLocalization }}</label>\r\n <dx-date-box\r\n [value]=\"entryDateTime\"\r\n type=\"datetime\"\r\n displayFormat=\"dd.MM.yyyy HH:mm\"\r\n [readOnly]=\"isUpdateMode\"\r\n width=\"100%\">\r\n </dx-date-box>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::ExitDate' | abpLocalization }}</label>\r\n <dx-date-box\r\n [value]=\"exitDateTime\"\r\n type=\"datetime\"\r\n displayFormat=\"dd.MM.yyyy HH:mm\"\r\n [readOnly]=\"isUpdateMode\"\r\n width=\"100%\">\r\n </dx-date-box>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Grup 2: Ara\u00E7 & S\u00FCr\u00FCc\u00FC Bilgileri -->\r\n <div class=\"border rounded p-3 mb-3\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-truck me-2\"></i>{{ 'Kadooglu::VehicleDriverInfo' | abpLocalization }}\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::TruckPlate' | abpLocalization }}\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadTruckPlates\"\r\n [columns]=\"truckPlateColumns\"\r\n displayName=\"plateNo\"\r\n [editingData]=\"truckPlateNo\"\r\n [readOnly]=\"isFormLocked\"\r\n (selected)=\"onTruckPlateSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n <div class=\"col-md-6 mb-3\" *ngIf=\"trailerPlateNo\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::TrailerPlate' | abpLocalization }}</label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadTrailerPlates\"\r\n [columns]=\"trailerPlateColumns\"\r\n displayName=\"plateNo\"\r\n [editingData]=\"trailerPlateNo\"\r\n [readOnly]=\"isFormLocked\"\r\n (selected)=\"onTrailerPlateSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::DriverName' | abpLocalization }}</label>\r\n <dx-text-box\r\n [(value)]=\"driverFullName\"\r\n [placeholder]=\"'Kadooglu::EnterDriverName' | abpLocalization\"\r\n [readOnly]=\"true\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <div class=\"d-flex align-items-center gap-2 mb-1\">\r\n <label class=\"form-label mb-0 small fw-semibold text-muted\">{{ isTcCitizen ? ('Kadooglu::TcIdentityNo' | abpLocalization) : 'Kimlik No' }}</label>\r\n <dx-check-box [(value)]=\"isTcCitizen\" [readOnly]=\"isUpdateMode\" text=\"T.C. Vatanda\u015F\u0131\"></dx-check-box>\r\n </div>\r\n <dx-text-box\r\n [(value)]=\"tcNo\"\r\n [placeholder]=\"isTcCitizen ? ('Kadooglu::TcIdentityNo' | abpLocalization) : 'Kimlik No'\"\r\n [readOnly]=\"true\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n <!-- Sa\u011F s\u00FCtun: Belge & Y\u00FCk -->\r\n <div class=\"col-md-6\">\r\n\r\n <!-- Grup 3: Belge & Y\u00FCk Bilgileri -->\r\n <div class=\"border rounded p-3 mb-3\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-file-alt me-2\"></i>{{ 'Kadooglu::DocumentCargoInfo' | abpLocalization }}\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::BusinessPartner' | abpLocalization }}</label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadAccounts\"\r\n [columns]=\"accountColumns\"\r\n displayName=\"title\"\r\n [editingData]=\"accountTitle\"\r\n [readOnly]=\"isFormLocked\"\r\n (selected)=\"onAccountSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::WaybillNumber' | abpLocalization }}</label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadWaybills\"\r\n [columns]=\"waybillColumns\"\r\n displayName=\"docNum\"\r\n keyExpr=\"docEntry\"\r\n [editingData]=\"waybillNo\"\r\n (selected)=\"onWaybillSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::ItemCode' | abpLocalization }}</label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadStockItems\"\r\n [columns]=\"stockItemColumns\"\r\n displayName=\"name\"\r\n [editingData]=\"stockName\"\r\n (selected)=\"onStockItemSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::ContainerNo' | abpLocalization }}</label>\r\n <dx-text-box\r\n [(value)]=\"containerNo\"\r\n [placeholder]=\"'Kadooglu::ManualEntry' | abpLocalization\"\r\n [readOnly]=\"isFormLocked\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::DeparturePlace' | abpLocalization }}</label>\r\n <dx-text-box\r\n [(value)]=\"departureLocation\"\r\n [disabled]=\"true\"\r\n [placeholder]=\"'Kadooglu::AutoFilledFromWaybill' | abpLocalization\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::ArrivalPlace' | abpLocalization }}</label>\r\n <dx-text-box\r\n [(value)]=\"arrivalLocation\"\r\n [disabled]=\"true\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n <div class=\"col-md-12 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::Description' | abpLocalization }}</label>\r\n <dx-text-area\r\n [(value)]=\"description\"\r\n [height]=\"70\"\r\n [readOnly]=\"isFormLocked\"\r\n width=\"100%\">\r\n </dx-text-area>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n </div>\r\n </div>\r\n <!-- Phase 1 Alt Butonlar -->\r\n <div class=\"d-flex justify-content-between mt-3 mb-3\">\r\n <button class=\"btn btn-secondary\" (click)=\"goBack()\">\r\n <i class=\"fa fa-arrow-left me-1\"></i> {{ 'Kadooglu::Back' | abpLocalization }}\r\n </button>\r\n <div class=\"d-flex gap-2\">\r\n <abp-button\r\n *ngIf=\"!weighingMode && !isFormLocked\"\r\n iconClass=\"fa fa-save\"\r\n buttonType=\"button\"\r\n [loading]=\"isSaving\"\r\n (click)=\"save()\">\r\n {{ 'Kadooglu::Save' | abpLocalization }}\r\n </abp-button>\r\n <button class=\"btn btn-primary\" (click)=\"ileriGit()\">\r\n {{ 'Kadooglu::Next' | abpLocalization }} <i class=\"fa fa-arrow-right ms-1\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- ========== PHASE 2: Tart\u0131m Paneli ========== -->\r\n <div *ngIf=\"formPhase === 2 && !isFullyCompleted\">\r\n <div class=\"row\">\r\n <div class=\"col-12\">\r\n <div class=\"card\">\r\n <div class=\"card-header fw-bold\">\r\n <i class=\"fa fa-balance-scale me-2\"></i>{{ 'Kadooglu::WeighingPanel' | abpLocalization }}\r\n <span *ngIf=\"weighingMode\" class=\"badge ms-2\"\r\n [ngClass]=\"weighingMode === 'first' ? 'bg-warning text-dark' : 'bg-primary'\">\r\n {{ weighingModeLabel }}\r\n </span>\r\n </div>\r\n <div class=\"card-body\">\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-6 mx-auto\">\r\n\r\n <!-- Canl\u0131 Tart\u0131m ve Sabitlenmi\u015F De\u011Fer \u2014 \u0130ki S\u00FCtun -->\r\n <div class=\"row g-3 mb-4\">\r\n\r\n <!-- Sol S\u00FCtun: Canl\u0131 Tart\u0131m -->\r\n <div class=\"col-6\" style=\"display: grid;\">\r\n <div class=\"card bg-light h-100\">\r\n <div class=\"card-body text-center py-4\">\r\n <div class=\"text-muted small mb-1 fw-semibold text-uppercase\">\r\n {{ 'Kadooglu::LiveWeighing' | abpLocalization }}\r\n </div>\r\n <div style=\"font-size: 2.5rem; font-weight: bold; letter-spacing: 0.05em;\">\r\n {{ currentScaleValue != null ? (currentScaleValue | number:'1.0-0') + ' kg' : '\u2014 kg' }}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Sa\u011F S\u00FCtun: Sabitlenmi\u015F De\u011Fer -->\r\n <div class=\"col-6\" style=\"display: grid;\">\r\n <div class=\"card h-100\"\r\n [ngClass]=\"fixedScaleValue != null ? 'border-success' : 'bg-light'\"\r\n [style.background-color]=\"fixedScaleValue != null ? 'rgba(25,135,84,0.08)' : ''\">\r\n <div class=\"card-body text-center py-4\">\r\n <div class=\"small mb-1 fw-semibold text-uppercase\"\r\n [ngClass]=\"fixedScaleValue != null ? 'text-success' : 'text-muted'\">\r\n {{ 'Kadooglu::FixedValue' | abpLocalization }}\r\n </div>\r\n <div style=\"font-size: 2.5rem; font-weight: bold; letter-spacing: 0.05em;\"\r\n [ngClass]=\"fixedScaleValue != null ? 'text-success' : ''\">\r\n {{ fixedScaleValue != null ? (fixedScaleValue | number:'1.0-0') + ' kg' : '\u2014 kg' }}\r\n </div>\r\n </div>\r\n </div>\r\n <button\r\n *ngIf=\"!isFullyCompleted\"\r\n class=\"btn btn-success btn-lg w-100 mt-2\"\r\n [disabled]=\"currentScaleValue == null\"\r\n (click)=\"sabitle()\">\r\n <i class=\"fa fa-lock me-2\"></i>\r\n {{ 'Kadooglu::Fix' | abpLocalization }}\r\n </button>\r\n </div>\r\n\r\n </div>\r\n\r\n <!-- \u0130lk Tart\u0131m -->\r\n <div class=\"mb-3\">\r\n <div class=\"text-muted small fw-semibold text-uppercase mb-1\">{{ 'Kadooglu::FirstWeighing' | abpLocalization }}</div>\r\n <div *ngIf=\"firstWeighingValue != null; else noFirstWeighing\" class=\"card card-body p-2\">\r\n <div class=\"d-flex justify-content-between align-items-center\">\r\n <span class=\"fw-bold fs-5\">{{ firstWeighingValue | number:'1.0-0' }} kg</span>\r\n <span class=\"text-muted small\">{{ 'Kadooglu::Operator' | abpLocalization }}: {{ firstOperatorCode }}</span>\r\n </div>\r\n </div>\r\n <ng-template #noFirstWeighing>\r\n <div class=\"card card-body p-2 text-muted text-center fst-italic\">{{ 'Kadooglu::NotYetDone' | abpLocalization }}</div>\r\n </ng-template>\r\n </div>\r\n\r\n <!-- Son Tart\u0131m -->\r\n <div class=\"mb-3\">\r\n <div class=\"text-muted small fw-semibold text-uppercase mb-1\">{{ 'Kadooglu::LastWeighing' | abpLocalization }}</div>\r\n <div *ngIf=\"lastWeighingValue != null; else noLastWeighing\" class=\"card card-body p-2\">\r\n <div class=\"d-flex justify-content-between align-items-center\">\r\n <span class=\"fw-bold fs-5\">{{ lastWeighingValue | number:'1.0-0' }} kg</span>\r\n <span class=\"text-muted small\">{{ 'Kadooglu::Operator' | abpLocalization }}: {{ lastOperatorCode }}</span>\r\n </div>\r\n </div>\r\n <ng-template #noLastWeighing>\r\n <div class=\"card card-body p-2 text-muted text-center fst-italic\">{{ 'Kadooglu::NotYetDone' | abpLocalization }}</div>\r\n </ng-template>\r\n </div>\r\n\r\n <!-- Net Y\u00FCk (sadece step=3'te g\u00F6ster) -->\r\n <div *ngIf=\"weighingStep === 3 && netWeight != null\" class=\"card border-success mb-3\">\r\n <div class=\"card-body text-center py-3\" style=\"background-color: rgba(25,135,84,0.08);\">\r\n <div class=\"text-success small fw-semibold text-uppercase mb-1\">{{ 'Kadooglu::NetWeight' | abpLocalization }}</div>\r\n <div class=\"text-success fw-bold\" style=\"font-size: 2rem;\">\r\n {{ netWeight | number:'1.0-0' }} kg\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Phase 2 Alt Butonlar -->\r\n <div class=\"d-flex justify-content-between mt-3 mb-3\">\r\n <button class=\"btn btn-secondary\" (click)=\"geriGitPhase()\">\r\n <i class=\"fa fa-arrow-left me-1\"></i> {{ 'Kadooglu::Back' | abpLocalization }}\r\n </button>\r\n <abp-button\r\n *ngIf=\"!isFullyCompleted\"\r\n iconClass=\"fa fa-save\"\r\n buttonType=\"button\"\r\n [loading]=\"isSaving\"\r\n (click)=\"save()\">\r\n {{ 'Kadooglu::Save' | abpLocalization }}\r\n </abp-button>\r\n </div>\r\n </div>\r\n\r\n <!-- ========== SUMMARY: Tamamland\u0131 G\u00F6r\u00FCn\u00FCm\u00FC ========== -->\r\n <div *ngIf=\"isFullyCompleted\">\r\n\r\n <!-- \u00DCst B\u00F6l\u00FCm \u2014 Tart\u0131m Sonu\u00E7 Kartlar\u0131 -->\r\n <div class=\"row mb-4\">\r\n <!-- \u0130lk Tart\u0131m -->\r\n <div class=\"col-md-4 mb-3 mb-md-0\">\r\n <div class=\"bg-white shadow-sm rounded py-3 px-4 h-100\" style=\"border-left: 4px solid #0d6efd;\">\r\n <div class=\"text-uppercase text-muted small fw-semibold mb-1\">{{ 'Kadooglu::FirstWeighing' | abpLocalization }}</div>\r\n <div class=\"fw-bold\" style=\"font-size: 1.75rem; letter-spacing: 0.02em;\">\r\n {{ firstWeighingValue != null ? (firstWeighingValue | number:'1.0-0') + ' kg' : '\u2014 kg' }}\r\n </div>\r\n <div class=\"text-muted small mt-1\">{{ 'Kadooglu::Operator' | abpLocalization }}: {{ firstOperatorCode || '\u2014' }}</div>\r\n </div>\r\n </div>\r\n <!-- Son Tart\u0131m -->\r\n <div class=\"col-md-4 mb-3 mb-md-0\">\r\n <div class=\"bg-white shadow-sm rounded py-3 px-4 h-100\" style=\"border-left: 4px solid #6f42c1;\">\r\n <div class=\"text-uppercase text-muted small fw-semibold mb-1\">{{ 'Kadooglu::LastWeighing' | abpLocalization }}</div>\r\n <div class=\"fw-bold\" style=\"font-size: 1.75rem; letter-spacing: 0.02em;\">\r\n {{ lastWeighingValue != null ? (lastWeighingValue | number:'1.0-0') + ' kg' : '\u2014 kg' }}\r\n </div>\r\n <div class=\"text-muted small mt-1\">{{ 'Kadooglu::Operator' | abpLocalization }}: {{ lastOperatorCode || '\u2014' }}</div>\r\n </div>\r\n </div>\r\n <!-- Net Y\u00FCk -->\r\n <div class=\"col-md-4\">\r\n <div class=\"shadow-sm rounded py-3 px-4 h-100\" style=\"border-left: 4px solid #198754; background: rgba(25,135,84,0.06);\">\r\n <div class=\"text-uppercase text-muted small fw-semibold mb-1\">{{ 'Kadooglu::NetWeight' | abpLocalization }}</div>\r\n <div class=\"fw-bold\" style=\"font-size: 1.75rem; letter-spacing: 0.02em; color: #198754;\">\r\n {{ netWeight != null ? (netWeight | number:'1.0-0') + ' kg' : '\u2014 kg' }}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Alt B\u00F6l\u00FCm \u2014 Detay Bilgileri -->\r\n <div class=\"card shadow-sm\">\r\n <div class=\"card-header fw-bold\">\r\n <i class=\"fa fa-file-text me-2\"></i>{{ 'Kadooglu::RecordDetails' | abpLocalization }}\r\n </div>\r\n <div class=\"card-body\">\r\n <div class=\"row\">\r\n <!-- Sol S\u00FCtun -->\r\n <div class=\"col-md-6\">\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::Gate' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ gateName || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">Ara\u00E7 Hareket T\u00FCr\u00FC</div>\r\n <div class=\"col-7 fw-medium\">{{ entryTypeName || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::EntryDate' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ entryDate ? (entryDate | date:'dd.MM.yyyy') : '\u2014' }} {{ entryTime || '' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::ExitDate' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ exitDate ? (exitDate | date:'dd.MM.yyyy') : '\u2014' }} {{ exitTime || '' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::TruckPlate' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ truckPlateNo || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::TrailerPlate' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ trailerPlateNo || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::DriverName' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ driverFullName || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::TcIdentityNo' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ tcNo || '\u2014' }}</div>\r\n </div>\r\n </div>\r\n <!-- Sa\u011F S\u00FCtun -->\r\n <div class=\"col-md-6\">\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::DriverCode' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ driverName || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::BusinessPartner' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ accountTitle || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::WaybillNumber' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ waybillNo || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::ScaleCode' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ scaleName || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::ItemCode' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ stockName || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::ContainerNo' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ containerNo || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::DepartureToArrival' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ (departureLocation || '\u2014') + ' \u2192 ' + (arrivalLocation || '\u2014') }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::Description' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ description || '\u2014' }}</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Alt Butonlar -->\r\n <div class=\"d-flex justify-content-between mt-3 mb-3\">\r\n <button class=\"btn btn-secondary\" (click)=\"goBack()\">\r\n <i class=\"fa fa-arrow-left me-1\"></i> {{ 'Kadooglu::BackToList' | abpLocalization }}\r\n </button>\r\n <button\r\n *ngIf=\"entryTypeMalGC && record?.u_Status === '2'\"\r\n class=\"btn btn-warning\"\r\n type=\"button\"\r\n [disabled]=\"isDoingGoodsMovement\"\r\n (click)=\"doGoodsMovement()\">\r\n <i [class]=\"isDoingGoodsMovement ? 'fa fa-spinner fa-spin me-1' : 'fa fa-exchange me-1'\" aria-hidden=\"true\"></i>\r\n {{ 'Kadooglu::MalGcYap' | abpLocalization }}\r\n </button>\r\n </div>\r\n </div>\r\n\r\n</abp-page>\r\n" }]
660
+ args: [{ selector: 'lib-hit-entry-weighing-form', template: "<abp-page [breadcrumb]=\"false\">\r\n <abp-page-toolbar-container class=\"col\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col\">\r\n <h3 class=\"page-title\">\r\n {{ 'Kadooglu::EntryWeighingTitle' | abpLocalization }}\r\n <span *ngIf=\"weighingMode\" class=\"badge ms-2 fs-6\"\r\n [ngClass]=\"{\r\n 'bg-warning text-dark': weighingMode === 'first',\r\n 'bg-primary': weighingMode === 'last'\r\n }\">\r\n {{ weighingModeLabel }}\r\n </span>\r\n <span *ngIf=\"!weighingMode\" class=\"badge ms-2 fs-6\"\r\n [ngClass]=\"{\r\n 'bg-secondary': weighingStep === 1,\r\n 'bg-info': weighingStep === 2,\r\n 'bg-success': weighingStep === 3\r\n }\">\r\n {{ (weighingStep === 1 ? 'Kadooglu::RecordStep' : weighingStep === 2 ? 'Kadooglu::FirstWeighing' : 'Kadooglu::Completed') | abpLocalization }}\r\n </span>\r\n </h3>\r\n </div>\r\n </div>\r\n </abp-page-toolbar-container>\r\n\r\n <!-- Step Indicator -->\r\n <div class=\"card mb-3\">\r\n <div class=\"card-body py-3\">\r\n <div class=\"d-flex align-items-center justify-content-center\">\r\n\r\n <!-- Step 1: Ara\u00E7 & Belge -->\r\n <div class=\"d-flex flex-column align-items-center\">\r\n <div class=\"rounded-circle d-flex align-items-center justify-content-center fw-bold text-white\"\r\n style=\"width:40px; height:40px; font-size:1rem;\"\r\n [style.background-color]=\"formPhase > 1 || isFullyCompleted ? '#198754' : (formPhase === 1 ? '#0d6efd' : '#6c757d')\">\r\n <i *ngIf=\"formPhase > 1 || isFullyCompleted\" class=\"fa fa-check\"></i>\r\n <span *ngIf=\"formPhase <= 1 && !isFullyCompleted\">1</span>\r\n </div>\r\n <small class=\"mt-1 fw-semibold\" [class.text-success]=\"formPhase > 1 || isFullyCompleted\" [class.text-primary]=\"formPhase === 1 && !isFullyCompleted\">{{ 'Kadooglu::VehicleAndDocument' | abpLocalization }}</small>\r\n </div>\r\n\r\n <div class=\"flex-grow-1 mx-2\" style=\"height:3px; max-width:120px;\"\r\n [style.background-color]=\"formPhase > 1 ? '#198754' : '#dee2e6'\"></div>\r\n\r\n <!-- Step 2: Tart\u0131m -->\r\n <div class=\"d-flex flex-column align-items-center\">\r\n <div class=\"rounded-circle d-flex align-items-center justify-content-center fw-bold text-white\"\r\n style=\"width:40px; height:40px; font-size:1rem;\"\r\n [style.background-color]=\"weighingStep === 3 ? '#198754' : (formPhase === 2 ? '#0d6efd' : '#6c757d')\">\r\n <i *ngIf=\"weighingStep === 3\" class=\"fa fa-check\"></i>\r\n <span *ngIf=\"weighingStep < 3\">2</span>\r\n </div>\r\n <small class=\"mt-1 fw-semibold\" [class.text-success]=\"weighingStep === 3\" [class.text-primary]=\"formPhase === 2 && weighingStep < 3\" [class.text-muted]=\"formPhase < 2 && weighingStep < 3\">{{ 'Kadooglu::WeighingStep' | abpLocalization }}</small>\r\n </div>\r\n\r\n <div class=\"flex-grow-1 mx-2\" style=\"height:3px; max-width:120px;\"\r\n [style.background-color]=\"weighingStep === 3 ? '#198754' : '#dee2e6'\"></div>\r\n\r\n <!-- Step 3: Tamamland\u0131 -->\r\n <div class=\"d-flex flex-column align-items-center\">\r\n <div class=\"rounded-circle d-flex align-items-center justify-content-center fw-bold text-white\"\r\n style=\"width:40px; height:40px; font-size:1rem;\"\r\n [style.background-color]=\"weighingStep === 3 ? '#198754' : '#6c757d'\">\r\n <i *ngIf=\"weighingStep === 3\" class=\"fa fa-check\"></i>\r\n <span *ngIf=\"weighingStep < 3\">3</span>\r\n </div>\r\n <small class=\"mt-1 fw-semibold\" [class.text-success]=\"weighingStep === 3\" [class.text-muted]=\"weighingStep < 3\">{{ 'Kadooglu::Completed' | abpLocalization }}</small>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- ========== PHASE 1: Ara\u00E7 & Belge ========== -->\r\n <div *ngIf=\"formPhase === 1 && !isFullyCompleted\">\r\n <div class=\"card\">\r\n <div class=\"card-body\">\r\n <div class=\"row\">\r\n\r\n <!-- Sol s\u00FCtun: Giri\u015F/\u00C7\u0131k\u0131\u015F + Ara\u00E7 & S\u00FCr\u00FCc\u00FC -->\r\n <div class=\"col-md-6\">\r\n\r\n <!-- Grup 1: Giri\u015F / \u00C7\u0131k\u0131\u015F Bilgileri -->\r\n <div class=\"border rounded p-3 mb-3\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-sign-in-alt me-2\"></i>{{ 'Kadooglu::EntryExitInfo' | abpLocalization }}\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::GateSelection' | abpLocalization }}</label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadGates\"\r\n [columns]=\"gateColumns\"\r\n displayName=\"name\"\r\n [editingData]=\"gateName\"\r\n [readOnly]=\"isUpdateMode\"\r\n (selected)=\"onGateSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">Ara\u00E7 Hareket T\u00FCr\u00FC</label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadVehicleTypes\"\r\n [columns]=\"vehicleTypeColumns\"\r\n displayName=\"name\"\r\n [editingData]=\"entryTypeName\"\r\n [readOnly]=\"isUpdateMode\"\r\n (selected)=\"onVehicleTypeSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::EntryDate' | abpLocalization }}</label>\r\n <dx-date-box\r\n [value]=\"entryDateTime\"\r\n type=\"datetime\"\r\n displayFormat=\"dd.MM.yyyy HH:mm\"\r\n [readOnly]=\"isUpdateMode\"\r\n width=\"100%\">\r\n </dx-date-box>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::ExitDate' | abpLocalization }}</label>\r\n <dx-date-box\r\n [value]=\"exitDateTime\"\r\n type=\"datetime\"\r\n displayFormat=\"dd.MM.yyyy HH:mm\"\r\n [readOnly]=\"isUpdateMode\"\r\n width=\"100%\">\r\n </dx-date-box>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Grup 2: Ara\u00E7 & S\u00FCr\u00FCc\u00FC Bilgileri -->\r\n <div class=\"border rounded p-3 mb-3\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-truck me-2\"></i>{{ 'Kadooglu::VehicleDriverInfo' | abpLocalization }}\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::TruckPlate' | abpLocalization }}\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadTruckPlates\"\r\n [columns]=\"truckPlateColumns\"\r\n displayName=\"plateNo\"\r\n [editingData]=\"truckPlateNo\"\r\n [readOnly]=\"isFormLocked\"\r\n (selected)=\"onTruckPlateSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n <div class=\"col-md-6 mb-3\" *ngIf=\"trailerPlateNo\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::TrailerPlate' | abpLocalization }}</label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadTrailerPlates\"\r\n [columns]=\"trailerPlateColumns\"\r\n displayName=\"plateNo\"\r\n [editingData]=\"trailerPlateNo\"\r\n [readOnly]=\"isFormLocked\"\r\n (selected)=\"onTrailerPlateSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::DriverName' | abpLocalization }}</label>\r\n <dx-text-box\r\n [(value)]=\"driverFullName\"\r\n [placeholder]=\"'Kadooglu::EnterDriverName' | abpLocalization\"\r\n [readOnly]=\"true\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <div class=\"d-flex align-items-center gap-2 mb-1\">\r\n <label class=\"form-label mb-0 small fw-semibold text-muted\">{{ isTcCitizen ? ('Kadooglu::TcIdentityNo' | abpLocalization) : 'Kimlik No' }}</label>\r\n <dx-check-box [(value)]=\"isTcCitizen\" [readOnly]=\"isUpdateMode\" text=\"T.C. Vatanda\u015F\u0131\"></dx-check-box>\r\n </div>\r\n <dx-text-box\r\n [(value)]=\"tcNo\"\r\n [placeholder]=\"isTcCitizen ? ('Kadooglu::TcIdentityNo' | abpLocalization) : 'Kimlik No'\"\r\n [readOnly]=\"true\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n <!-- Sa\u011F s\u00FCtun: Belge & Y\u00FCk -->\r\n <div class=\"col-md-6\">\r\n\r\n <!-- Grup 3: Belge & Y\u00FCk Bilgileri -->\r\n <div class=\"border rounded p-3 mb-3\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-file-alt me-2\"></i>{{ 'Kadooglu::DocumentCargoInfo' | abpLocalization }}\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::BusinessPartner' | abpLocalization }}</label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadAccounts\"\r\n [columns]=\"accountColumns\"\r\n displayName=\"title\"\r\n [editingData]=\"accountTitle\"\r\n [readOnly]=\"isFormLocked\"\r\n (selected)=\"onAccountSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::WaybillNumber' | abpLocalization }}</label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadWaybills\"\r\n [columns]=\"waybillColumns\"\r\n displayName=\"docNum\"\r\n keyExpr=\"docEntry\"\r\n [editingData]=\"waybillNo\"\r\n [showDateFilter]=\"true\"\r\n [defaultDateFrom]=\"waybillDefaultDateFrom\"\r\n [defaultDateTo]=\"waybillDefaultDateTo\"\r\n (selected)=\"onWaybillSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::ItemCode' | abpLocalization }}</label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadStockItems\"\r\n [columns]=\"stockItemColumns\"\r\n displayName=\"name\"\r\n [editingData]=\"stockName\"\r\n (selected)=\"onStockItemSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::ContainerNo' | abpLocalization }}</label>\r\n <dx-text-box\r\n [(value)]=\"containerNo\"\r\n [placeholder]=\"'Kadooglu::ManualEntry' | abpLocalization\"\r\n [readOnly]=\"isFormLocked\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::DeparturePlace' | abpLocalization }}</label>\r\n <dx-text-box\r\n [(value)]=\"departureLocation\"\r\n [disabled]=\"true\"\r\n [placeholder]=\"'Kadooglu::AutoFilledFromWaybill' | abpLocalization\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::ArrivalPlace' | abpLocalization }}</label>\r\n <dx-text-box\r\n [(value)]=\"arrivalLocation\"\r\n [disabled]=\"true\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n <div class=\"col-md-12 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::Description' | abpLocalization }}</label>\r\n <dx-text-area\r\n [(value)]=\"description\"\r\n [height]=\"70\"\r\n [readOnly]=\"isFormLocked\"\r\n width=\"100%\">\r\n </dx-text-area>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n </div>\r\n </div>\r\n <!-- Phase 1 Alt Butonlar -->\r\n <div class=\"d-flex justify-content-between mt-3 mb-3\">\r\n <button class=\"btn btn-secondary\" (click)=\"goBack()\">\r\n <i class=\"fa fa-arrow-left me-1\"></i> {{ 'Kadooglu::Back' | abpLocalization }}\r\n </button>\r\n <div class=\"d-flex gap-2\">\r\n <abp-button\r\n *ngIf=\"!weighingMode && !isFormLocked\"\r\n iconClass=\"fa fa-save\"\r\n buttonType=\"button\"\r\n [loading]=\"isSaving\"\r\n (click)=\"save()\">\r\n {{ 'Kadooglu::Save' | abpLocalization }}\r\n </abp-button>\r\n <button class=\"btn btn-primary\" (click)=\"ileriGit()\">\r\n {{ 'Kadooglu::Next' | abpLocalization }} <i class=\"fa fa-arrow-right ms-1\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- ========== PHASE 2: Tart\u0131m Paneli ========== -->\r\n <div *ngIf=\"formPhase === 2 && !isFullyCompleted\">\r\n <div class=\"card\">\r\n <div class=\"card-body\">\r\n <div class=\"row\">\r\n <div class=\"col-12\">\r\n\r\n <!-- Grup 1: Terazi -->\r\n <div class=\"border rounded p-3 mb-3\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary d-flex align-items-center justify-content-between\">\r\n <span>\r\n <i class=\"fa fa-balance-scale me-2\"></i>{{ 'Kadooglu::WeighingPanel' | abpLocalization }}\r\n </span>\r\n <span *ngIf=\"weighingMode\" class=\"badge\"\r\n [ngClass]=\"weighingMode === 'first' ? 'bg-warning text-dark' : 'bg-primary'\">\r\n {{ weighingModeLabel }}\r\n </span>\r\n </div>\r\n\r\n <div class=\"row g-3 align-items-stretch\">\r\n\r\n <!-- Sol: Canl\u0131 Tart\u0131m -->\r\n <div class=\"col-md-5\" style=\"display: grid;\">\r\n <div class=\"card bg-light h-100\">\r\n <div class=\"card-body text-center py-4\">\r\n <div class=\"text-muted small mb-1 fw-semibold text-uppercase\">\r\n {{ 'Kadooglu::LiveWeighing' | abpLocalization }}\r\n </div>\r\n <div *ngIf=\"isScaleConnecting || isScaleReconnecting\" class=\"my-2\">\r\n <div class=\"spinner-border text-secondary\" role=\"status\">\r\n <span class=\"visually-hidden\">{{ (isScaleReconnecting ? 'Kadooglu::Reconnecting' : 'Kadooglu::Connecting') | abpLocalization }}</span>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!isScaleConnecting && !isScaleReconnecting && !scaleConnectionFailed\" style=\"font-size: 2.5rem; font-weight: bold; letter-spacing: 0.05em;\">\r\n {{ currentScaleValue != null ? (currentScaleValue | number:'1.0-0') + ' kg' : '\u2014 kg' }}\r\n </div>\r\n <div *ngIf=\"scaleConnectionFailed\" class=\"text-center py-1\">\r\n <i class=\"fa fa-chain-broken fa-2x text-secondary mb-2 d-block\"></i>\r\n <span class=\"text-secondary fw-semibold d-block\" style=\"font-size: 0.95rem; line-height: 1.5;\">\r\n {{ 'Kadooglu::ScaleConnectionFailedInline' | abpLocalization }}\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Orta: Ak\u0131\u015F oku -->\r\n <div class=\"col-md-2 d-flex align-items-center justify-content-center\">\r\n <i class=\"fa fa-arrow-right fa-2x text-muted\"></i>\r\n </div>\r\n\r\n <!-- Sa\u011F: Sabitlenmi\u015F De\u011Fer + Sabitle butonu -->\r\n <div class=\"col-md-5\" style=\"display: grid;\">\r\n <div class=\"card h-100\"\r\n [ngClass]=\"fixedScaleValue != null ? 'border-success' : 'bg-light'\"\r\n [style.background-color]=\"fixedScaleValue != null ? 'rgba(25,135,84,0.08)' : ''\">\r\n <div class=\"card-body text-center py-4\">\r\n <div class=\"small mb-1 fw-semibold text-uppercase\"\r\n [ngClass]=\"fixedScaleValue != null ? 'text-success' : 'text-muted'\">\r\n {{ 'Kadooglu::FixedValue' | abpLocalization }}\r\n </div>\r\n <div style=\"font-size: 2.5rem; font-weight: bold; letter-spacing: 0.05em;\"\r\n [ngClass]=\"fixedScaleValue != null ? 'text-success' : ''\">\r\n {{ fixedScaleValue != null ? (fixedScaleValue | number:'1.0-0') + ' kg' : '\u2014 kg' }}\r\n </div>\r\n </div>\r\n </div>\r\n <button\r\n *ngIf=\"!isFullyCompleted\"\r\n class=\"btn btn-success btn-lg w-100 mt-2\"\r\n [disabled]=\"currentScaleValue == null\"\r\n (click)=\"sabitle()\">\r\n <i class=\"fa fa-lock me-2\"></i>\r\n {{ 'Kadooglu::Fix' | abpLocalization }}\r\n </button>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n <!-- Grup 2: Tart\u0131m Kay\u0131tlar\u0131 -->\r\n <div class=\"border rounded p-3 mb-3\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-history me-2\"></i>{{ 'Kadooglu::WeighingRecords' | abpLocalization }}\r\n </div>\r\n\r\n <div class=\"row g-3\">\r\n\r\n <!-- \u0130lk Tart\u0131m -->\r\n <div class=\"col-md-4\">\r\n <div class=\"h-100 rounded py-3 px-4\" style=\"border-left: 4px solid #0d6efd; background: #fff;\">\r\n <div class=\"text-uppercase text-muted small fw-semibold mb-1\">\r\n {{ 'Kadooglu::FirstWeighing' | abpLocalization }}\r\n </div>\r\n <div *ngIf=\"firstWeighingValue != null; else noFirstWeighing\">\r\n <div class=\"fw-bold\" style=\"font-size: 1.75rem; letter-spacing: 0.02em;\">\r\n {{ firstWeighingValue | number:'1.0-0' }} kg\r\n </div>\r\n <div class=\"text-muted small mt-1\">\r\n {{ 'Kadooglu::Operator' | abpLocalization }}: {{ firstOperatorCode }}\r\n </div>\r\n </div>\r\n <ng-template #noFirstWeighing>\r\n <div class=\"text-muted fst-italic mt-2\">{{ 'Kadooglu::NotYetDone' | abpLocalization }}</div>\r\n </ng-template>\r\n </div>\r\n </div>\r\n\r\n <!-- Son Tart\u0131m -->\r\n <div class=\"col-md-4\">\r\n <div class=\"h-100 rounded py-3 px-4\" style=\"border-left: 4px solid #6f42c1; background: #fff;\">\r\n <div class=\"text-uppercase text-muted small fw-semibold mb-1\">\r\n {{ 'Kadooglu::LastWeighing' | abpLocalization }}\r\n </div>\r\n <div *ngIf=\"lastWeighingValue != null; else noLastWeighing\">\r\n <div class=\"fw-bold\" style=\"font-size: 1.75rem; letter-spacing: 0.02em;\">\r\n {{ lastWeighingValue | number:'1.0-0' }} kg\r\n </div>\r\n <div class=\"text-muted small mt-1\">\r\n {{ 'Kadooglu::Operator' | abpLocalization }}: {{ lastOperatorCode }}\r\n </div>\r\n </div>\r\n <ng-template #noLastWeighing>\r\n <div class=\"text-muted fst-italic mt-2\">{{ 'Kadooglu::NotYetDone' | abpLocalization }}</div>\r\n </ng-template>\r\n </div>\r\n </div>\r\n\r\n <!-- Net Y\u00FCk (sadece weighingStep===3'te) -->\r\n <div class=\"col-md-4\" *ngIf=\"weighingStep === 3 && netWeight != null\">\r\n <div class=\"h-100 rounded py-3 px-4\" style=\"border-left: 4px solid #198754; background: rgba(25,135,84,0.06);\">\r\n <div class=\"text-uppercase text-muted small fw-semibold mb-1\">\r\n {{ 'Kadooglu::NetWeight' | abpLocalization }}\r\n </div>\r\n <div class=\"fw-bold\" style=\"font-size: 1.75rem; letter-spacing: 0.02em; color: #198754;\">\r\n {{ netWeight | number:'1.0-0' }} kg\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Phase 2 Alt Butonlar -->\r\n <div class=\"d-flex justify-content-between mt-3 mb-3\">\r\n <button class=\"btn btn-secondary\" (click)=\"geriGitPhase()\">\r\n <i class=\"fa fa-arrow-left me-1\"></i> {{ 'Kadooglu::Back' | abpLocalization }}\r\n </button>\r\n <abp-button\r\n *ngIf=\"!isFullyCompleted\"\r\n iconClass=\"fa fa-save\"\r\n buttonType=\"button\"\r\n [loading]=\"isSaving\"\r\n (click)=\"save()\">\r\n {{ 'Kadooglu::Save' | abpLocalization }}\r\n </abp-button>\r\n </div>\r\n </div>\r\n\r\n <!-- ========== SUMMARY: Tamamland\u0131 G\u00F6r\u00FCn\u00FCm\u00FC ========== -->\r\n <div *ngIf=\"isFullyCompleted\">\r\n <div class=\"card\">\r\n <div class=\"card-body\">\r\n <div class=\"row\">\r\n\r\n <!-- Tam geni\u015Flik: Tart\u0131m Sonu\u00E7lar\u0131 -->\r\n <div class=\"col-12\">\r\n <div class=\"border rounded p-3 mb-3\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-balance-scale me-2\"></i>{{ 'Kadooglu::WeighingResults' | abpLocalization }}\r\n </div>\r\n <div class=\"row g-3\">\r\n\r\n <!-- \u0130lk Tart\u0131m -->\r\n <div class=\"col-md-4\">\r\n <div class=\"bg-white shadow-sm rounded py-3 px-4 h-100\" style=\"border-left: 4px solid #0d6efd;\">\r\n <div class=\"text-uppercase text-muted small fw-semibold mb-1\">{{ 'Kadooglu::FirstWeighing' | abpLocalization }}</div>\r\n <div class=\"fw-bold\" style=\"font-size: 1.75rem; letter-spacing: 0.02em;\">\r\n {{ firstWeighingValue != null ? (firstWeighingValue | number:'1.0-0') + ' kg' : '\u2014 kg' }}\r\n </div>\r\n <div class=\"text-muted small mt-1\">{{ 'Kadooglu::Operator' | abpLocalization }}: {{ firstOperatorCode || '\u2014' }}</div>\r\n </div>\r\n </div>\r\n\r\n <!-- Son Tart\u0131m -->\r\n <div class=\"col-md-4\">\r\n <div class=\"bg-white shadow-sm rounded py-3 px-4 h-100\" style=\"border-left: 4px solid #6f42c1;\">\r\n <div class=\"text-uppercase text-muted small fw-semibold mb-1\">{{ 'Kadooglu::LastWeighing' | abpLocalization }}</div>\r\n <div class=\"fw-bold\" style=\"font-size: 1.75rem; letter-spacing: 0.02em;\">\r\n {{ lastWeighingValue != null ? (lastWeighingValue | number:'1.0-0') + ' kg' : '\u2014 kg' }}\r\n </div>\r\n <div class=\"text-muted small mt-1\">{{ 'Kadooglu::Operator' | abpLocalization }}: {{ lastOperatorCode || '\u2014' }}</div>\r\n </div>\r\n </div>\r\n\r\n <!-- Net Y\u00FCk -->\r\n <div class=\"col-md-4\">\r\n <div class=\"shadow-sm rounded py-3 px-4 h-100\" style=\"border-left: 4px solid #198754; background: rgba(25,135,84,0.06);\">\r\n <div class=\"text-uppercase text-muted small fw-semibold mb-1\">{{ 'Kadooglu::NetWeight' | abpLocalization }}</div>\r\n <div class=\"fw-bold\" style=\"font-size: 1.75rem; letter-spacing: 0.02em; color: #198754;\">\r\n {{ netWeight != null ? (netWeight | number:'1.0-0') + ' kg' : '\u2014 kg' }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Sol s\u00FCtun: Giri\u015F/\u00C7\u0131k\u0131\u015F + Ara\u00E7 & S\u00FCr\u00FCc\u00FC -->\r\n <div class=\"col-md-6\">\r\n\r\n <!-- Grup: Giri\u015F / \u00C7\u0131k\u0131\u015F Bilgileri -->\r\n <div class=\"border rounded p-3 mb-3\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-sign-in-alt me-2\"></i>{{ 'Kadooglu::EntryExitInfo' | abpLocalization }}\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::Gate' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ gateName || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">Ara\u00E7 Hareket T\u00FCr\u00FC</div>\r\n <div class=\"col-7 fw-medium\">{{ entryTypeName || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::EntryDate' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ entryDate ? (entryDate | date:'dd.MM.yyyy') : '\u2014' }} {{ entryTime || '' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::ExitDate' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ exitDate ? (exitDate | date:'dd.MM.yyyy') : '\u2014' }} {{ exitTime || '' }}</div>\r\n </div>\r\n </div>\r\n\r\n <!-- Grup: Ara\u00E7 & S\u00FCr\u00FCc\u00FC Bilgileri -->\r\n <div class=\"border rounded p-3 mb-3\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-truck me-2\"></i>{{ 'Kadooglu::VehicleDriverInfo' | abpLocalization }}\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::TruckPlate' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ truckPlateNo || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::TrailerPlate' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ trailerPlateNo || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::DriverName' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ driverFullName || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::TcIdentityNo' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ tcNo || '\u2014' }}</div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n <!-- Sa\u011F s\u00FCtun: Belge & Y\u00FCk -->\r\n <div class=\"col-md-6\">\r\n\r\n <!-- Grup: Belge & Y\u00FCk Bilgileri -->\r\n <div class=\"border rounded p-3 mb-3\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-file-alt me-2\"></i>{{ 'Kadooglu::DocumentCargoInfo' | abpLocalization }}\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::DriverCode' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ driverName || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::BusinessPartner' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ accountTitle || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::WaybillNumber' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ waybillNo || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::ScaleCode' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ scaleName || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::ItemCode' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ stockName || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::ContainerNo' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ containerNo || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::DepartureToArrival' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ (departureLocation || '\u2014') + ' \u2192 ' + (arrivalLocation || '\u2014') }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::Description' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ description || '\u2014' }}</div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Alt Butonlar -->\r\n <div class=\"d-flex justify-content-between mt-3 mb-3\">\r\n <button class=\"btn btn-secondary\" (click)=\"goBack()\">\r\n <i class=\"fa fa-arrow-left me-1\"></i> {{ 'Kadooglu::BackToList' | abpLocalization }}\r\n </button>\r\n <button\r\n *ngIf=\"entryTypeMalGC && record?.u_Status === '2'\"\r\n class=\"btn btn-warning\"\r\n type=\"button\"\r\n [disabled]=\"isDoingGoodsMovement\"\r\n (click)=\"doGoodsMovement()\">\r\n <i [class]=\"isDoingGoodsMovement ? 'fa fa-spinner fa-spin me-1' : 'fa fa-exchange me-1'\" aria-hidden=\"true\"></i>\r\n {{ 'Kadooglu::MalGcYap' | abpLocalization }}\r\n </button>\r\n </div>\r\n </div>\r\n\r\n</abp-page>\r\n" }]
608
661
  }], ctorParameters: function () { return [{ type: i1.HitEntryWeighingService }, { type: i2.HitStockTransferService }, { type: i3.ConfirmationService }, { type: i3.ToasterService }, { type: i4.ActivatedRoute }, { type: i4.Router }, { type: i5.LocalizationService }, { type: i6.ScaleSignalRService }]; } });
609
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGl0LWVudHJ5LXdlaWdoaW5nLWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2Fkb29nbHUvc3JjL2xpYi9oaXQtY29tcG9uZW50cy9oaXQtZW50cnktd2VpZ2hpbmcvaGl0LWVudHJ5LXdlaWdoaW5nLWZvcm0vaGl0LWVudHJ5LXdlaWdoaW5nLWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2Fkb29nbHUvc3JjL2xpYi9oaXQtY29tcG9uZW50cy9oaXQtZW50cnktd2VpZ2hpbmcvaGl0LWVudHJ5LXdlaWdoaW5nLWZvcm0vaGl0LWVudHJ5LXdlaWdoaW5nLWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFJN0QsT0FBTyxFQUE0QixRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7Ozs7QUF1QjNDLE1BQU0sT0FBTyw2QkFBNkI7SUEySHhDLFlBQ1UsT0FBZ0MsRUFDaEMsb0JBQTZDLEVBQzdDLFlBQWlDLEVBQ2pDLE9BQXVCLEVBQ3ZCLEtBQXFCLEVBQ3JCLE1BQWMsRUFDZCxtQkFBd0MsRUFDeEMsbUJBQXdDO1FBUHhDLFlBQU8sR0FBUCxPQUFPLENBQXlCO1FBQ2hDLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBeUI7UUFDN0MsaUJBQVksR0FBWixZQUFZLENBQXFCO1FBQ2pDLFlBQU8sR0FBUCxPQUFPLENBQWdCO1FBQ3ZCLFVBQUssR0FBTCxLQUFLLENBQWdCO1FBQ3JCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBQ3hDLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFsSWxE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QUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN4RixJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDL0IsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDM0QsT0FBTyxHQUFHLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7OzBIQW5tQlUsNkJBQTZCOzhHQUE3Qiw2QkFBNkIsbUVDNUIxQyx1aDdCQTZpQkE7MkZEamhCYSw2QkFBNkI7a0JBSnpDLFNBQVM7K0JBQ0UsNkJBQTZCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgQ29uZmlybWF0aW9uU2VydmljZSwgVG9hc3RlclNlcnZpY2UgfSBmcm9tICdAYWJwL25nLnRoZW1lLnNoYXJlZCc7XHJcbmltcG9ydCB7IExvY2FsaXphdGlvblNlcnZpY2UgfSBmcm9tICdAYWJwL25nLmNvcmUnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24sIGZvcmtKb2luIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgU2NhbGVTaWduYWxSU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3NjYWxlLXNpZ25hbHIuc2VydmljZSc7XHJcbmltcG9ydCB7IEhpdEVudHJ5V2VpZ2hpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vaGl0LXByb3h5L2hpdC1lbnRyeS13ZWlnaGluZy9oaXQtZW50cnktd2VpZ2hpbmcuc2VydmljZSc7XHJcbmltcG9ydCB7IEhpdFN0b2NrVHJhbnNmZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vaGl0LXByb3h5L2hpdC1zdG9jay10cmFuc2Zlci9oaXQtc3RvY2stdHJhbnNmZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IFN0b2NrVHJhbnNmZXIgfSBmcm9tICcuLi8uLi8uLi9oaXQtcHJveHkvaGl0LXN0b2NrLXRyYW5zZmVyL21vZGVscyc7XHJcbmltcG9ydCB7XHJcbiAgRW50cnlXZWlnaGluZyxcclxuICBFbnRyeVdlaWdoaW5nQWNjb3VudCxcclxuICBFbnRyeVdlaWdoaW5nRG9jdW1lbnQsXHJcbiAgRW50cnlXZWlnaGluZ0RyaXZlcixcclxuICBFbnRyeVdlaWdoaW5nR2F0ZSxcclxuICBFbnRyeVdlaWdoaW5nU2NhbGUsXHJcbiAgRW50cnlXZWlnaGluZ1N0b2NrSXRlbSxcclxuICBFbnRyeVdlaWdoaW5nVHJhaWxlclBsYXRlLFxyXG4gIEVudHJ5V2VpZ2hpbmdUcnVja1BsYXRlLFxyXG4gIEVudHJ5V2VpZ2hpbmdWZWhpY2xlVHlwZSxcclxuICBTYXZlRW50cnlXZWlnaGluZ0R0byxcclxufSBmcm9tICcuLi8uLi8uLi9oaXQtcHJveHkvaGl0LWVudHJ5LXdlaWdoaW5nL21vZGVscyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1oaXQtZW50cnktd2VpZ2hpbmctZm9ybScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2hpdC1lbnRyeS13ZWlnaGluZy1mb3JtLmNvbXBvbmVudC5odG1sJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIEhpdEVudHJ5V2VpZ2hpbmdGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIHJlY29yZDogRW50cnlXZWlnaGluZyB8IG51bGwgPSBudWxsO1xyXG4gIGlzVXBkYXRlTW9kZSA9IGZhbHNlO1xyXG5cclxuICAvLyBXaXphcmQgcGhhc2U6IDEgPSBBcmHDpyAmIEJlbGdlLCAyID0gVGFydMSxbSBQYW5lbGlcclxuICBmb3JtUGhhc2U6IDEgfCAyID0gMTtcclxuICAvLyBXZWlnaGluZyBtb2RlIGZyb20gcXVlcnkgcGFyYW06ICdmaXJzdCcgfCAnbGFzdCcgfCBudWxsIChudWxsID0gbm9ybWFsIG5ldy9lZGl0KVxyXG4gIHdlaWdoaW5nTW9kZTogJ2ZpcnN0JyB8ICdsYXN0JyB8IG51bGwgPSBudWxsO1xyXG5cclxuICAvLyBMb29rdXAgbG9hZGVyIGZ1bmN0aW9ucyAoY2FsbGVkIGxhemlseSB3aGVuIG1vZGFsIG9wZW5zKVxyXG4gIGxvYWREb2N1bWVudHMgPSAoKSA9PiB0aGlzLnNlcnZpY2UuZ2V0RG9jdW1lbnRzKCk7XHJcbiAgbG9hZFNjYWxlcyA9ICgpID0+IHRoaXMuc2VydmljZS5nZXRTY2FsZXMoKTtcclxuICBsb2FkVHJ1Y2tQbGF0ZXMgPSAoKSA9PiB0aGlzLnNlcnZpY2UuZ2V0VHJ1Y2tQbGF0ZXMoKTtcclxuICBsb2FkVHJhaWxlclBsYXRlcyA9ICgpID0+IHRoaXMuc2VydmljZS5nZXRUcmFpbGVyUGxhdGVzKCk7XHJcbiAgbG9hZERyaXZlcnMgPSAoKSA9PiB0aGlzLnNlcnZpY2UuZ2V0RHJpdmVycygpO1xyXG4gIGxvYWRBY2NvdW50cyA9ICgpID0+IHRoaXMuc2VydmljZS5nZXRBY2NvdW50cygpO1xyXG4gIGxvYWRTdG9ja0l0ZW1zID0gKCkgPT4gdGhpcy5zZXJ2aWNlLmdldFN0b2NrSXRlbXMoKTtcclxuICBsb2FkV2F5YmlsbHMgPSAoKSA9PiB0aGlzLnN0b2NrVHJhbnNmZXJTZXJ2aWNlLmdldExpc3QoKTtcclxuICBsb2FkR2F0ZXMgPSAoKSA9PiB0aGlzLnNlcnZpY2UuZ2V0R2F0ZXMoKTtcclxuICBsb2FkVmVoaWNsZVR5cGVzID0gKCkgPT4gdGhpcy5zZXJ2aWNlLmdldFZlaGljbGVUeXBlcygpO1xyXG5cclxuICAvLyBDb2x1bW4gY29uZmlnc1xyXG4gIGRvY3VtZW50Q29sdW1ucyA9IFtcclxuICAgIHsgZGF0YUZpZWxkOiAnY29kZScsIGNhcHRpb246ICdCZWxnZSBObycsIHdpZHRoOiAxMjAgfSxcclxuICAgIHsgZGF0YUZpZWxkOiAnbmFtZScsIGNhcHRpb246ICdDYXJpIEFkxLEnIH0sXHJcbiAgXTtcclxuICBzY2FsZUNvbHVtbnMgPSBbXHJcbiAgICB7IGRhdGFGaWVsZDogJ2NvZGUnLCBjYXB0aW9uOiAnS29kJywgd2lkdGg6IDgwIH0sXHJcbiAgICB7IGRhdGFGaWVsZDogJ25hbWUnLCBjYXB0aW9uOiAnS2FudGFyIEFkxLEnIH0sXHJcbiAgXTtcclxuICB0cnVja1BsYXRlQ29sdW1ucyA9IFtcclxuICAgIHsgZGF0YUZpZWxkOiAnY29kZScsIGNhcHRpb246ICdLb2QnLCB3aWR0aDogMTAwIH0sXHJcbiAgICB7IGRhdGFGaWVsZDogJ3BsYXRlTm8nLCBjYXB0aW9uOiAnUGxha2EnIH0sXHJcbiAgXTtcclxuICB0cmFpbGVyUGxhdGVDb2x1bW5zID0gW1xyXG4gICAgeyBkYXRhRmllbGQ6ICdjb2RlJywgY2FwdGlvbjogJ0tvZCcsIHdpZHRoOiAxMDAgfSxcclxuICAgIHsgZGF0YUZpZWxkOiAncGxhdGVObycsIGNhcHRpb246ICdQbGFrYScgfSxcclxuICBdO1xyXG4gIGRyaXZlckNvbHVtbnMgPSBbXHJcbiAgICB7IGRhdGFGaWVsZDogJ2NvZGUnLCBjYXB0aW9uOiAnS29kJywgd2lkdGg6IDEwMCB9LFxyXG4gICAgeyBkYXRhRmllbGQ6ICduYW1lJywgY2FwdGlvbjogJ0FkIFNveWFkJyB9LFxyXG4gIF07XHJcbiAgYWNjb3VudENvbHVtbnMgPSBbXHJcbiAgICB7IGRhdGFGaWVsZDogJ2NvZGUnLCBjYXB0aW9uOiAnS29kJywgd2lkdGg6IDEwMCB9LFxyXG4gICAgeyBkYXRhRmllbGQ6ICd0aXRsZScsIGNhcHRpb246ICdVbnZhbicgfSxcclxuICBdO1xyXG4gIHN0b2NrSXRlbUNvbHVtbnMgPSBbXHJcbiAgICB7IGRhdGFGaWVsZDogJ2NvZGUnLCBjYXB0aW9uOiAnS29kJywgd2lkdGg6IDEwMCB9LFxyXG4gICAgeyBkYXRhRmllbGQ6ICduYW1lJywgY2FwdGlvbjogJ1N0b2sgQWTEsScgfSxcclxuICBdO1xyXG4gIHdheWJpbGxDb2x1bW5zID0gW1xyXG4gICAgeyBkYXRhRmllbGQ6ICdkb2NOdW0nLCBjYXB0aW9uOiAnQmVsZ2UgTm8nLCB3aWR0aDogMTIwIH0sXHJcbiAgICB7IGRhdGFGaWVsZDogJ2NhcmROYW1lJywgY2FwdGlvbjogJ0NhcmkgQWTEsScgfSxcclxuICAgIHsgZGF0YUZpZWxkOiAnZnJvbVdhcmVob3VzZScsIGNhcHRpb246ICfDh8Sxa8SxxZ8gRGVwb3N1Jywgd2lkdGg6IDE0MCB9LFxyXG4gICAgeyBkYXRhRmllbGQ6ICdjb21tZW50cycsIGNhcHRpb246ICdBw6fEsWtsYW1hJyB9LFxyXG4gIF07XHJcbiAgZ2F0ZUNvbHVtbnMgPSBbXHJcbiAgICB7IGRhdGFGaWVsZDogJ2NvZGUnLCBjYXB0aW9uOiAnS29kJywgd2lkdGg6IDgwIH0sXHJcbiAgICB7IGRhdGFGaWVsZDogJ25hbWUnLCBjYXB0aW9uOiAnS2FwxLEgQWTEsScgfSxcclxuICBdO1xyXG4gIHZlaGljbGVUeXBlQ29sdW1ucyA9IFtcclxuICAgIHsgZGF0YUZpZWxkOiAnY29kZScsIGNhcHRpb246ICdLb2QnLCB3aWR0aDogODAgfSxcclxuICAgIHsgZGF0YUZpZWxkOiAnbmFtZScsIGNhcHRpb246ICdHaXJpxZ8gVGlwaScgfSxcclxuICBdO1xyXG5cclxuICAvLyBGb3JtIGZpZWxkc1xyXG4gIGRvY3VtZW50Q29kZSA9ICcnO1xyXG4gIGRvY3VtZW50TmFtZSA9ICcnO1xyXG4gIHNjYWxlQ29kZSA9ICcxJztcclxuICBzY2FsZU5hbWUgPSAnS2FudGFyIDEnO1xyXG4gIGFjY291bnRDb2RlID0gJyc7XHJcbiAgYWNjb3VudFRpdGxlID0gJyc7XHJcbiAgdHJ1Y2tQbGF0ZUNvZGUgPSAnJztcclxuICB0cnVja1BsYXRlTm8gPSAnJztcclxuICB0cmFpbGVyUGxhdGVDb2RlID0gJyc7XHJcbiAgdHJhaWxlclBsYXRlTm8gPSAnJztcclxuICBkcml2ZXJDb2RlID0gJyc7XHJcbiAgZHJpdmVyTmFtZSA9ICcnO1xyXG4gIHN0b2NrQ29kZSA9ICcnO1xyXG4gIHN0b2NrTmFtZSA9ICcnO1xyXG4gIGNvbnRhaW5lck5vID0gJyc7XHJcbiAgZGVzY3JpcHRpb24gPSAnJztcclxuICB3YXliaWxsTm8gPSAnJztcclxuICBkZXBhcnR1cmVMb2NhdGlvbiA9ICcnO1xyXG4gIGFycml2YWxMb2NhdGlvbiA9ICdGYWJyaWthJztcclxuXHJcbiAgLy8gWlpaX1RFU1QyIHllbmkgYWxhbmxhclxyXG4gIGdhdGVDb2RlID0gJyc7XHJcbiAgZ2F0ZU5hbWUgPSAnJztcclxuICBlbnRyeURhdGU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gIGVudHJ5VGltZSA9ICcnO1xyXG4gIGV4aXREYXRlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuICBleGl0VGltZSA9ICcnO1xyXG4gIGVudHJ5VHlwZUNvZGUgPSAnJztcclxuICBlbnRyeVR5cGVOYW1lID0gJyc7XHJcbiAgZHJpdmVyRnVsbE5hbWUgPSAnJztcclxuICB0Y05vID0gJyc7XHJcbiAgaXNUY0NpdGl6ZW4gPSB0cnVlO1xyXG5cclxuICAvLyBUYXJ0xLFtIGJpbGdpbGVyaSAocmVhZG9ubHkpXHJcbiAgZmlyc3RPcGVyYXRvckNvZGUgPSAnJztcclxuICBmaXJzdFdlaWdoaW5nVmFsdWU6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG4gIGxhc3RPcGVyYXRvckNvZGUgPSAnJztcclxuICBsYXN0V2VpZ2hpbmdWYWx1ZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcbiAgY3VycmVudFNjYWxlVmFsdWU6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG4gIGZpeGVkU2NhbGVWYWx1ZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIGlzU2F2aW5nID0gZmFsc2U7XHJcbiAgaXNXZWlnaGluZyA9IGZhbHNlO1xyXG4gIGVudHJ5VHlwZVRydG1ZcGlsY2sgPSBmYWxzZTtcclxuICBlbnRyeVR5cGVNYWxHQyA9IGZhbHNlO1xyXG4gIGlzRG9pbmdHb29kc01vdmVtZW50ID0gZmFsc2U7XHJcblxyXG4gIHByaXZhdGUgc2NhbGVTdWI6IFN1YnNjcmlwdGlvbiB8IG51bGwgPSBudWxsO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgc2NhbGVBcGlVcmwgPSAnaHR0cHM6Ly9sb2NhbGhvc3Q6NDQzODknO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgc2NhbGVJZCA9ICdLQU5UQVItMDEnO1xyXG5cclxuICAvKiogU0FQIHJlc3BvbnNlIGNhbWVsQ2FzZS9QYXNjYWxDYXNlIGZhcmvEsW7EsSBoYW5kbGUgZWRlciAqL1xyXG4gIHByaXZhdGUgZ2V0RG9jRW50cnkocmVjOiBFbnRyeVdlaWdoaW5nIHwgbnVsbCk6IG51bWJlciB8IHVuZGVmaW5lZCB7XHJcbiAgICBpZiAoIXJlYykgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIHJldHVybiByZWMuZG9jRW50cnkgPz8gKHJlYyBhcyBhbnkpLmRvY0VudHJ5O1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHNlcnZpY2U6IEhpdEVudHJ5V2VpZ2hpbmdTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzdG9ja1RyYW5zZmVyU2VydmljZTogSGl0U3RvY2tUcmFuc2ZlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNvbmZpcm1hdGlvbjogQ29uZmlybWF0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgdG9hc3RlcjogVG9hc3RlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIGxvY2FsaXphdGlvblNlcnZpY2U6IExvY2FsaXphdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHNjYWxlU2lnbmFsUlNlcnZpY2U6IFNjYWxlU2lnbmFsUlNlcnZpY2VcclxuICApIHt9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgLy8gUmVhZCB3ZWlnaGluZyBtb2RlIGZyb20gcXVlcnkgcGFyYW1zXHJcbiAgICBjb25zdCBtb2RlID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtTWFwLmdldCgnbW9kZScpO1xyXG4gICAgaWYgKG1vZGUgPT09ICdmaXJzdCcgfHwgbW9kZSA9PT0gJ2xhc3QnKSB7XHJcbiAgICAgIHRoaXMud2VpZ2hpbmdNb2RlID0gbW9kZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyDDlm5jZSByb3V0ZXIgc3RhdGUnZGVuIHNhdMSxciB2ZXJpc2luaSBva3UgKGxpc3RlIGVrcmFuxLFuZGFuIGFrdGFyxLFsYW4pXHJcbiAgICBjb25zdCBzdGF0ZURhdGEgPSBoaXN0b3J5LnN0YXRlPy5yb3dEYXRhO1xyXG4gICAgY29uc3QgaWQgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtTWFwLmdldCgnaWQnKTtcclxuXHJcbiAgICBpZiAoc3RhdGVEYXRhKSB7XHJcbiAgICAgIC8vIFN0YXRlJ2RlbiBnZWxlbiB2ZXJpeWkga3VsbGFuIChBUEkgw6dhxJ9yxLFzxLEgb2xtYWRhbilcclxuICAgICAgdGhpcy5pc1VwZGF0ZU1vZGUgPSB0cnVlO1xyXG4gICAgICB0aGlzLnJlY29yZCA9IHN0YXRlRGF0YTtcclxuICAgICAgdGhpcy5pbml0Rm9ybSgpO1xyXG4gICAgICAvLyBTb24gdGFydMSxbSBtb2R1bmRheXNhIGRpcmVrdCB0YXJ0xLFtIHBhbmVsaW5pIGHDp1xyXG4gICAgICBpZiAodGhpcy53ZWlnaGluZ01vZGUgPT09ICdsYXN0Jykge1xyXG4gICAgICAgIHRoaXMuZm9ybVBoYXNlID0gMjtcclxuICAgICAgICB0aGlzLl9zdGFydFNjYWxlKCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoaWQpIHtcclxuICAgICAgLy8gRmFsbGJhY2s6IHN0YXRlIHlva3NhIEFQSSdkZW4gecO8a2xlXHJcbiAgICAgIHRoaXMuaXNVcGRhdGVNb2RlID0gdHJ1ZTtcclxuICAgICAgdGhpcy5zZXJ2aWNlLmdldCgraWQpLnN1YnNjcmliZShyZWNvcmQgPT4ge1xyXG4gICAgICAgIHRoaXMucmVjb3JkID0gcmVjb3JkO1xyXG4gICAgICAgIHRoaXMuaW5pdEZvcm0oKTtcclxuICAgICAgICAvLyBTb24gdGFydMSxbSBtb2R1bmRheXNhIGRpcmVrdCB0YXJ0xLFtIHBhbmVsaW5pIGHDp1xyXG4gICAgICAgIGlmICh0aGlzLndlaWdoaW5nTW9kZSA9PT0gJ2xhc3QnKSB7XHJcbiAgICAgICAgICB0aGlzLmZvcm1QaGFzZSA9IDI7XHJcbiAgICAgICAgICB0aGlzLl9zdGFydFNjYWxlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCB3ZWlnaGluZ1N0ZXAoKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IHN0YXR1cyA9ICh0aGlzLnJlY29yZCBhcyBhbnkpPy51X1N0YXR1cztcclxuICAgIGlmICh0aGlzLmxhc3RXZWlnaGluZ1ZhbHVlICE9PSBudWxsIHx8IHN0YXR1cyA9PT0gJzInIHx8IHN0YXR1cyA9PT0gJzMnIHx8IHN0YXR1cyA9PT0gJzQnKSByZXR1cm4gMztcclxuICAgIGlmICh0aGlzLmZpcnN0V2VpZ2hpbmdWYWx1ZSAhPT0gbnVsbCB8fCBzdGF0dXMgPT09ICcxJykgcmV0dXJuIDI7XHJcbiAgICByZXR1cm4gMTtcclxuICB9XHJcblxyXG4gIC8qKiDEsGxrIHRhcnTEsW0geWFwxLFsZMSxeXNhIChzdGVwID49IDIpIGRldGF5IGFsYW5sYXLEsW7EsSBraWxpdGxlICovXHJcbiAgZ2V0IGlzRm9ybUxvY2tlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLndlaWdoaW5nU3RlcCA+PSAyO1xyXG4gIH1cclxuXHJcbiAgLyoqIEhlciBpa2kgdGFydMSxbSBkYSB0YW1hbWxhbmTEsXlzYSAoc3RlcCA9PT0gMykgdMO8bSBla3JhbsSxIGtpbGl0bGUgKi9cclxuICBnZXQgaXNGdWxseUNvbXBsZXRlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLndlaWdoaW5nU3RlcCA9PT0gMztcclxuICB9XHJcblxyXG4gIGdldCBlbnRyeURhdGVUaW1lKCk6IERhdGUgfCBudWxsIHtcclxuICAgIHJldHVybiB0aGlzLmJ1aWxkRGF0ZVRpbWUodGhpcy5lbnRyeURhdGUsIHRoaXMuZW50cnlUaW1lKTtcclxuICB9XHJcblxyXG4gIGdldCBleGl0RGF0ZVRpbWUoKTogRGF0ZSB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMuYnVpbGREYXRlVGltZSh0aGlzLmV4aXREYXRlLCB0aGlzLmV4aXRUaW1lKTtcclxuICB9XHJcblxyXG4gIC8qKiBUYXJpaCBzdHJpbmcgKyBzYXnEsXNhbCBzYWF0ICjDtnIuIDgzMCA9IDA4OjMwKSBkZcSfZXJpbmRlbiBEYXRlIG9sdcWfdHVydXIgKi9cclxuICBwcml2YXRlIGJ1aWxkRGF0ZVRpbWUoZGF0ZVN0cjogc3RyaW5nIHwgbnVsbCwgdGltZVZhbDogc3RyaW5nIHwgbnVtYmVyIHwgbnVsbCk6IERhdGUgfCBudWxsIHtcclxuICAgIGlmICghZGF0ZVN0cikgcmV0dXJuIG51bGw7XHJcbiAgICBjb25zdCBkID0gbmV3IERhdGUoZGF0ZVN0cik7XHJcbiAgICBpZiAoaXNOYU4oZC5nZXRUaW1lKCkpKSByZXR1cm4gbnVsbDtcclxuICAgIGNvbnN0IHQgPSBOdW1iZXIodGltZVZhbCk7XHJcbiAgICBpZiAoIWlzTmFOKHQpKSB7XHJcbiAgICAgIGQuc2V0SG91cnMoTWF0aC5mbG9vcih0IC8gMTAwKSwgdCAlIDEwMCwgMCwgMCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZDtcclxuICB9XHJcblxyXG4gIGdldCBuZXRXZWlnaHQoKTogbnVtYmVyIHwgbnVsbCB7XHJcbiAgICBpZiAodGhpcy5maXJzdFdlaWdoaW5nVmFsdWUgIT09IG51bGwgJiYgdGhpcy5sYXN0V2VpZ2hpbmdWYWx1ZSAhPT0gbnVsbCkge1xyXG4gICAgICByZXR1cm4gTWF0aC5hYnModGhpcy5maXJzdFdlaWdoaW5nVmFsdWUgLSB0aGlzLmxhc3RXZWlnaGluZ1ZhbHVlKTtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHdlaWdoaW5nTW9kZUxhYmVsKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy53ZWlnaGluZ01vZGUgPT09ICdmaXJzdCdcclxuICAgICAgPyB0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudCgnS2Fkb29nbHU6OkZpcnN0V2VpZ2hpbmcnKVxyXG4gICAgICA6IHRoaXMubG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KCdLYWRvb2dsdTo6TGFzdFdlaWdoaW5nJyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXRGb3JtKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMucmVjb3JkKSB7XHJcbiAgICAgIGNvbnN0IHIgPSB0aGlzLnJlY29yZCBhcyBhbnk7IC8vIFNBUCBjYW1lbENhc2UgZmFsbGJhY2tcclxuICAgICAgdGhpcy5zY2FsZUNvZGUgPSByLnVfU2NhbGVDb2RlID8/IHIudV9TY2FsZUNvZGUgPz8gJyc7XHJcbiAgICAgIHRoaXMuYWNjb3VudENvZGUgPSByLnVfQ2FyZENvZGUgPz8gci51X0NhcmRDb2RlID8/ICcnO1xyXG4gICAgICB0aGlzLnRydWNrUGxhdGVDb2RlID0gci51X1BsYXRlID8/IHIudV9QbGF0ZSA/PyAnJztcclxuICAgICAgdGhpcy50cnVja1BsYXRlTm8gPSByLnVfUGxhdGUgPz8gci51X1BsYXRlID8/ICcnO1xyXG4gICAgICB0aGlzLnRyYWlsZXJQbGF0ZUNvZGUgPSByLnVfRG9yc2VQbGF0ZSA/PyAnJztcclxuICAgICAgdGhpcy50cmFpbGVyUGxhdGVObyA9IHIudV9Eb3JzZVBsYXRlID8/ICcnO1xyXG4gICAgICB0aGlzLmRyaXZlckNvZGUgPSByLnVfRHJpdmVyQ29kZSA/PyByLnVfRHJpdmVyQ29kZSA/PyAnJztcclxuICAgICAgdGhpcy5zdG9ja0NvZGUgPSByLnVfSXRlbUNvZGUgPz8gci51X0l0ZW1Db2RlID8/ICcnO1xyXG4gICAgICB0aGlzLmNvbnRhaW5lck5vID0gci51X0NvbnRhaW5lck5vID8/IHIudV9Db250YWluZXJObyA/PyAnJztcclxuICAgICAgdGhpcy53YXliaWxsTm8gPSByLnVfRGVzcGF0Y2hBZHZpY2VObyA/PyByLnVfRGVzcGF0Y2hBZHZpY2VObyA/PyAnJztcclxuICAgICAgdGhpcy5kZXBhcnR1cmVMb2NhdGlvbiA9IHIudV9TaGlwUGxhY2UgPz8gci51X1NoaXBQbGFjZSA/PyAnJztcclxuICAgICAgdGhpcy5hcnJpdmFsTG9jYXRpb24gPSByLnVfU2hpcFRvID8/IHIudV9TaGlwVG8gPz8gJ0ZhYnJpa2EnO1xyXG4gICAgICB0aGlzLmZpcnN0T3BlcmF0b3JDb2RlID0gci51X0ZpcnN0T3B0ID8/IHIudV9GaXJzdE9wdCA/PyAnJztcclxuICAgICAgdGhpcy5sYXN0T3BlcmF0b3JDb2RlID0gci51X0xhc3RPcHQgPz8gci51X0xhc3RPcHQgPz8gJyc7XHJcbiAgICAgIGNvbnN0IHJhd0ZpcnN0ID0gci51X0ZpcnN0V2VpZ2hpbmcgPz8gci51X0ZpcnN0V2VpZ2hpbmcgPz8gbnVsbDtcclxuICAgICAgdGhpcy5maXJzdFdlaWdoaW5nVmFsdWUgPSAocmF3Rmlyc3QgIT0gbnVsbCAmJiByYXdGaXJzdCAhPT0gMCkgPyByYXdGaXJzdCA6IG51bGw7XHJcbiAgICAgIGNvbnN0IHJhd0xhc3QgPSByLnVfTGFzdFdlaWdoaW5nID8/IHIudV9MYXN0V2VpZ2hpbmcgPz8gbnVsbDtcclxuICAgICAgdGhpcy5sYXN0V2VpZ2hpbmdWYWx1ZSA9IChyYXdMYXN0ICE9IG51bGwgJiYgcmF3TGFzdCAhPT0gMCkgPyByYXdMYXN0IDogbnVsbDtcclxuICAgICAgdGhpcy5kZXNjcmlwdGlvbiA9IHIudV9EZXNjcmlwdGlvbiA/PyByLnVfRGVzY3JpcHRpb24gPz8gJyc7XHJcblxyXG4gICAgICAvLyBaWlpfVEVTVDIgeWVuaSBhbGFubGFyXHJcbiAgICAgIHRoaXMuZ2F0ZUNvZGUgPSByLnVfR2F0ZUNvZGUgPz8gci51X0dhdGVDb2RlID8/ICcnO1xyXG4gICAgICB0aGlzLmVudHJ5RGF0ZSA9IHIudV9FbnRyeURhdGUgPz8gci51X0VudHJ5RGF0ZSA/PyBudWxsO1xyXG4gICAgICB0aGlzLmVudHJ5VGltZSA9IHIudV9FbnRyeVRpbWUgPz8gci51X0VudHJ5VGltZSA/PyAnJztcclxuICAgICAgdGhpcy5leGl0RGF0ZSA9IHIudV9FeGl0RGF0ZSA/PyByLnVfRXhpdERhdGUgPz8gbnVsbDtcclxuICAgICAgdGhpcy5leGl0VGltZSA9IHIudV9FeGl0VGltZSA/PyByLnVfRXhpdFRpbWUgPz8gJyc7XHJcbiAgICAgIHRoaXMuZW50cnlUeXBlQ29kZSA9IHIudV9FbnRyeVR5cGUgPz8gci51X0VudHJ5VHlwZSA/PyAnJztcclxuICAgICAgdGhpcy5kcml2ZXJGdWxsTmFtZSA9IHIudV9Ecml2ZXIgPz8gci51X0RyaXZlciA/PyAnJztcclxuICAgICAgdGhpcy50Y05vID0gci51X1RjTm8gPz8gci51X1RjTm8gPz8gJyc7XHJcbiAgICAgIHRoaXMuaXNUY0NpdGl6ZW4gPSB0cnVlO1xyXG5cclxuICAgICAgLy8gTG9va3VwIGFsYW5sYXLEsW7EsW4gZ8O2csO8bmVuIGlzaW1sZXJpbmkgw6fDtnrDvG1sZVxyXG4gICAgICB0aGlzLnJlc29sdmVEaXNwbGF5TmFtZXMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiBLYXnEsXR0YWtpIGtvZCBhbGFubGFyxLFuYSBrYXLFn8SxbMSxayBnZWxlbiBnw7Zyw7xuZW4gaXNpbWxlcmkgbG9va3VwIHNlcnZpc2xlcmluZGVuIMOnw7Z6w7xtbGVyICovXHJcbiAgcHJpdmF0ZSByZXNvbHZlRGlzcGxheU5hbWVzKCk6IHZvaWQge1xyXG4gICAgY29uc3QgbG9va3VwczogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xyXG5cclxuICAgIGlmICh0aGlzLmdhdGVDb2RlKSB7XHJcbiAgICAgIGxvb2t1cHNbJ2dhdGVzJ10gPSB0aGlzLmxvYWRHYXRlcygpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZW50cnlUeXBlQ29kZSkge1xyXG4gICAgICBsb29rdXBzWyd2ZWhpY2xlVHlwZXMnXSA9IHRoaXMubG9hZFZlaGljbGVUeXBlcygpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc2NhbGVDb2RlKSB7XHJcbiAgICAgIGxvb2t1cHNbJ3NjYWxlcyddID0gdGhpcy5sb2FkU2NhbGVzKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5hY2NvdW50Q29kZSkge1xyXG4gICAgICBsb29rdXBzWydhY2NvdW50cyddID0gdGhpcy5sb2FkQWNjb3VudHMoKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmRyaXZlckNvZGUpIHtcclxuICAgICAgbG9va3Vwc1snZHJpdmVycyddID0gdGhpcy5sb2FkRHJpdmVycygpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc3RvY2tDb2RlKSB7XHJcbiAgICAgIGxvb2t1cHNbJ3N0b2NrSXRlbXMnXSA9IHRoaXMubG9hZFN0b2NrSXRlbXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMobG9va3Vwcyk7XHJcbiAgICBpZiAoa2V5cy5sZW5ndGggPT09IDApIHJldHVybjtcclxuXHJcbiAgICBmb3JrSm9pbihsb29rdXBzKS5zdWJzY3JpYmUoKHJlc3VsdHM6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmVzdWx0cy5nYXRlcykge1xyXG4gICAgICAgIGNvbnN0IGdhdGUgPSByZXN1bHRzLmdhdGVzLmZpbmQoKGc6IGFueSkgPT4gZy5jb2RlID09PSB0aGlzLmdhdGVDb2RlKTtcclxuICAgICAgICBpZiAoZ2F0ZSkgdGhpcy5nYXRlTmFtZSA9IGdhdGUubmFtZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAocmVzdWx0cy52ZWhpY2xlVHlwZXMpIHtcclxuICAgICAgICBjb25zdCB2dCA9IHJlc3VsdHMudmVoaWNsZVR5cGVzLmZpbmQoKHQ6IGFueSkgPT4gdC5jb2RlID09PSB0aGlzLmVudHJ5VHlwZUNvZGUpO1xyXG4gICAgICAgIGlmICh2dCkge1xyXG4gICAgICAgICAgdGhpcy5lbnRyeVR5cGVOYW1lID0gdnQubmFtZTtcclxuICAgICAgICAgIHRoaXMuZW50cnlUeXBlVHJ0bVlwaWxjayA9IHZ0LnVfVHJ0bVlwaWxjayA9PT0gJ1knO1xyXG4gICAgICAgICAgdGhpcy5lbnRyeVR5cGVNYWxHQyA9IHZ0LnVfTWFsR0MgPT09ICdZJztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHJlc3VsdHMuc2NhbGVzKSB7XHJcbiAgICAgICAgY29uc3Qgc2NhbGUgPSByZXN1bHRzLnNjYWxlcy5maW5kKChzOiBhbnkpID0+IHMuY29kZSA9PT0gdGhpcy5zY2FsZUNvZGUpO1xyXG4gICAgICAgIGlmIChzY2FsZSkgdGhpcy5zY2FsZU5hbWUgPSBzY2FsZS5uYW1lO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChyZXN1bHRzLmFjY291bnRzKSB7XHJcbiAgICAgICAgY29uc3QgYWNjb3VudCA9IHJlc3VsdHMuYWNjb3VudHMuZmluZCgoYTogYW55KSA9PiBhLmNvZGUgPT09IHRoaXMuYWNjb3VudENvZGUpO1xyXG4gICAgICAgIGlmIChhY2NvdW50KSB0aGlzLmFjY291bnRUaXRsZSA9IGFjY291bnQudGl0bGU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHJlc3VsdHMuZHJpdmVycykge1xyXG4gICAgICAgIGNvbnN0IGRyaXZlciA9IHJlc3VsdHMuZHJpdmVycy5maW5kKChkOiBhbnkpID0+IGQuY29kZSA9PT0gdGhpcy5kcml2ZXJDb2RlKTtcclxuICAgICAgICBpZiAoZHJpdmVyKSB0aGlzLmRyaXZlck5hbWUgPSBkcml2ZXIubmFtZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAocmVzdWx0cy5zdG9ja0l0ZW1zKSB7XHJcbiAgICAgICAgY29uc3QgaXRlbSA9IHJlc3VsdHMuc3RvY2tJdGVtcy5maW5kKChpOiBhbnkpID0+IGkuY29kZSA9PT0gdGhpcy5zdG9ja0NvZGUpO1xyXG4gICAgICAgIGlmIChpdGVtKSB0aGlzLnN0b2NrTmFtZSA9IGl0ZW0ubmFtZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBvbkRvY3VtZW50U2VsZWN0ZWQoZTogRW50cnlXZWlnaGluZ0RvY3VtZW50KTogdm9pZCB7XHJcbiAgICBpZiAoIWUpIHJldHVybjtcclxuICAgIHRoaXMuZG9jdW1lbnRDb2RlID0gZS5jb2RlO1xyXG4gICAgdGhpcy5kb2N1bWVudE5hbWUgPSBlLm5hbWU7XHJcbiAgfVxyXG5cclxuICBvblNjYWxlU2VsZWN0ZWQoZTogRW50cnlXZWlnaGluZ1NjYWxlKTogdm9pZCB7XHJcbiAgICBpZiAoIWUpIHJldHVybjtcclxuICAgIHRoaXMuc2NhbGVDb2RlID0gZS5jb2RlO1xyXG4gICAgdGhpcy5zY2FsZU5hbWUgPSBlLm5hbWU7XHJcbiAgfVxyXG5cclxuICBvbkFjY291bnRTZWxlY3RlZChlOiBFbnRyeVdlaWdoaW5nQWNjb3VudCk6IHZvaWQge1xyXG4gICAgaWYgKCFlKSByZXR1cm47XHJcbiAgICB0aGlzLmFjY291bnRDb2RlID0gZS5jb2RlO1xyXG4gICAgdGhpcy5hY2NvdW50VGl0bGUgPSBlLnRpdGxlO1xyXG4gIH1cclxuXHJcblxyXG4gIG9uVHJ1Y2tQbGF0ZVNlbGVjdGVkKGU6IEVudHJ5V2VpZ2hpbmdUcnVja1BsYXRlKTogdm9pZCB7XHJcbiAgICBpZiAoIWUpIHJldHVybjtcclxuICAgIHRoaXMudHJ1Y2tQbGF0ZUNvZGUgPSBlLmNvZGU7XHJcbiAgICB0aGlzLnRydWNrUGxhdGVObyA9IGUucGxhdGVObztcclxuICB9XHJcblxyXG4gIG9uVHJhaWxlclBsYXRlU2VsZWN0ZWQoZTogRW50cnlXZWlnaGluZ1RyYWlsZXJQbGF0ZSk6IHZvaWQge1xyXG4gICAgaWYgKCFlKSByZXR1cm47XHJcbiAgICB0aGlzLnRyYWlsZXJQbGF0ZUNvZGUgPSBlLmNvZGU7XHJcbiAgICB0aGlzLnRyYWlsZXJQbGF0ZU5vID0gZS5wbGF0ZU5vO1xyXG4gIH1cclxuXHJcbiAgb25Ecml2ZXJTZWxlY3RlZChlOiBFbnRyeVdlaWdoaW5nRHJpdmVyKTogdm9pZCB7XHJcbiAgICBpZiAoIWUpIHJldHVybjtcclxuICAgIHRoaXMuZHJpdmVyQ29kZSA9IGUuY29kZTtcclxuICAgIHRoaXMuZHJpdmVyTmFtZSA9IGUubmFtZTtcclxuICB9XHJcblxyXG4gIG9uU3RvY2tJdGVtU2VsZWN0ZWQoZTogRW50cnlXZWlnaGluZ1N0b2NrSXRlbSk6IHZvaWQge1xyXG4gICAgaWYgKCFlKSByZXR1cm47XHJcbiAgICB0aGlzLnN0b2NrQ29kZSA9IGUuY29kZTtcclxuICAgIHRoaXMuc3RvY2tOYW1lID0gZS5uYW1lO1xyXG4gIH1cclxuXHJcbiAgb25HYXRlU2VsZWN0ZWQoZTogRW50cnlXZWlnaGluZ0dhdGUpOiB2b2lkIHtcclxuICAgIGlmICghZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5nYXRlQ29kZSA9IGUuY29kZTtcclxuICAgIHRoaXMuZ2F0ZU5hbWUgPSBlLm5hbWU7XHJcbiAgfVxyXG5cclxuICBvblZlaGljbGVUeXBlU2VsZWN0ZWQoZTogRW50cnlXZWlnaGluZ1ZlaGljbGVUeXBlKTogdm9pZCB7XHJcbiAgICBpZiAoIWUpIHJldHVybjtcclxuICAgIHRoaXMuZW50cnlUeXBlQ29kZSA9IGUuY29kZTtcclxuICAgIHRoaXMuZW50cnlUeXBlTmFtZSA9IGUubmFtZTtcclxuICAgIHRoaXMuZW50cnlUeXBlVHJ0bVlwaWxjayA9IGUudV9UcnRtWXBpbGNrID09PSAnWSc7XHJcbiAgICB0aGlzLmVudHJ5VHlwZU1hbEdDID0gZS51X01hbEdDID09PSAnWSc7XHJcbiAgfVxyXG5cclxuICBvbldheWJpbGxTZWxlY3RlZChlOiBTdG9ja1RyYW5zZmVyKTogdm9pZCB7XHJcbiAgICBpZiAoIWUpIHJldHVybjtcclxuICAgIHRoaXMud2F5YmlsbE5vID0gZS5kb2NOdW0udG9TdHJpbmcoKTtcclxuICAgIGlmIChlLmNhcmRDb2RlKSB7IHRoaXMuYWNjb3VudENvZGUgPSBlLmNhcmRDb2RlOyB0aGlzLmFjY291bnRUaXRsZSA9IGUuY2FyZE5hbWU7IH1cclxuICAgIGlmIChlLmZyb21XYXJlaG91c2UpIHsgdGhpcy5kZXBhcnR1cmVMb2NhdGlvbiA9IGUuZnJvbVdhcmVob3VzZTsgfVxyXG4gICAgaWYgKGUuY29tbWVudHMpIHsgdGhpcy5kZXNjcmlwdGlvbiA9IGUuY29tbWVudHM7IH1cclxuXHJcbiAgICBjb25zdCBsaW5lcyA9IGUuc3RvY2tUcmFuc2ZlckxpbmVzID8/IFtdO1xyXG4gICAgY29uc3QgdW5pcXVlQ29kZXMgPSBbLi4ubmV3IFNldChsaW5lcy5tYXAobCA9PiBsLml0ZW1Db2RlKS5maWx0ZXIoYyA9PiAhIWMpKV07XHJcbiAgICBpZiAodW5pcXVlQ29kZXMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgIHRoaXMuc3RvY2tDb2RlID0gdW5pcXVlQ29kZXNbMF07XHJcbiAgICAgIHRoaXMuc3RvY2tOYW1lID0gbGluZXMuZmluZChsID0+IGwuaXRlbUNvZGUgPT09IHVuaXF1ZUNvZGVzWzBdKT8uaXRlbURlc2NyaXB0aW9uID8/ICcnO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zdG9ja0NvZGUgPSAnJztcclxuICAgICAgdGhpcy5zdG9ja05hbWUgPSAnJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiBQaGFzZSAxIOKGkiBQaGFzZSAyIGdlw6dpxZ9pICovXHJcbiAgaWxlcmlHaXQoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMudHJ1Y2tQbGF0ZUNvZGUpIHtcclxuICAgICAgdGhpcy5jb25maXJtYXRpb24ud2Fybih0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudCgnS2Fkb29nbHU6OlNlbGVjdFRydWNrUGxhdGUnKSwgJycsIHtcclxuICAgICAgICBoaWRlWWVzQnRuOiB0cnVlLFxyXG4gICAgICAgIGNhbmNlbFRleHQ6IHRoaXMubG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KCdLYWRvb2dsdTo6Q2FuY2VsJyksXHJcbiAgICAgICAgZGlzbWlzc2libGU6IGZhbHNlLFxyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZW50cnlUeXBlVHJ0bVlwaWxjayAmJiAhdGhpcy5zdG9ja0NvZGUpIHtcclxuICAgICAgdGhpcy5jb25maXJtYXRpb24ud2Fybih0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudCgnS2Fkb29nbHU6OlN0b2NrQ29kZVJlcXVpcmVkJyksICcnLCB7XHJcbiAgICAgICAgaGlkZVllc0J0bjogdHJ1ZSxcclxuICAgICAgICBjYW5jZWxUZXh0OiB0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudCgnS2Fkb29nbHU6OkNhbmNlbCcpLFxyXG4gICAgICAgIGRpc21pc3NpYmxlOiBmYWxzZSxcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuZm9ybVBoYXNlID0gMjtcclxuICAgIHRoaXMuX3N0YXJ0U2NhbGUoKTtcclxuICB9XHJcblxyXG4gIC8qKiBQaGFzZSAyIOKGkiBQaGFzZSAxIGdlcmkgZMO2biAqL1xyXG4gIGdlcmlHaXRQaGFzZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3N0b3BTY2FsZSgpO1xyXG4gICAgdGhpcy5mb3JtUGhhc2UgPSAxO1xyXG4gIH1cclxuXHJcbiAgc2F2ZSgpOiB2b2lkIHtcclxuICAgIC8vIFRhcnTEsW0gbW9kdW5kYXlzYSBkb1dlaWdoaW5nIEFQSSDDp2HEn8SxclxyXG4gICAgY29uc3QgZG9jRW50cnkgPSB0aGlzLmdldERvY0VudHJ5KHRoaXMucmVjb3JkKTtcclxuICAgIGlmICh0aGlzLndlaWdoaW5nTW9kZSAmJiBkb2NFbnRyeSkge1xyXG4gICAgICBpZiAodGhpcy5maXhlZFNjYWxlVmFsdWUgPT0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuY29uZmlybWF0aW9uLndhcm4odGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoJ0thZG9vZ2x1OjpEb0ZpeEZpcnN0JyksICcnLCB7XHJcbiAgICAgICAgICBoaWRlWWVzQnRuOiB0cnVlLFxyXG4gICAgICAgICAgY2FuY2VsVGV4dDogdGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoJ0thZG9vZ2x1OjpDYW5jZWwnKSxcclxuICAgICAgICAgIGRpc21pc3NpYmxlOiBmYWxzZSxcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IGRvV2VpZ2gkID0gdGhpcy5zZXJ2aWNlLmRvV2VpZ2hpbmcoZG9jRW50cnksIHtcclxuICAgICAgICB3ZWlnaGluZ1ZhbHVlOiB0aGlzLmZpeGVkU2NhbGVWYWx1ZSEsXHJcbiAgICAgICAgb3BlcmF0b3JDb2RlOiAnJ1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIC8vIMSwTEsgdGFydMSxbWRhIGZvcm0gYWxhbmxhcsSxbsSxIChzdG9rIGtvZHUsIGlyc2FsaXllIHZiLikgw7ZuY2Uga2F5ZGV0LCBzb25yYSB0YXJ0xLFtIHlhcC5cclxuICAgICAgLy8gU09OIHRhcnTEsW1kYSBzYWRlY2UgdGFydMSxbSB5YXAg4oCUIGRpxJ9lciBhbGFubGFyIGlsayB0YXJ0xLFtZGFuIHNvbnJhIGRlxJ9pxZ90aXJpbGVtZXouXHJcbiAgICAgIGxldCBvYnMkOiBPYnNlcnZhYmxlPEVudHJ5V2VpZ2hpbmc+O1xyXG4gICAgICBpZiAodGhpcy53ZWlnaGluZ01vZGUgPT09ICdmaXJzdCcpIHtcclxuICAgICAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnREYXRlID0gbm93LnRvSVNPU3RyaW5nKCkuc3BsaXQoJ1QnKVswXTtcclxuICAgICAgICBjb25zdCBjdXJyZW50VGltZSA9IG5vdy50b1RpbWVTdHJpbmcoKS5zcGxpdCgnICcpWzBdO1xyXG4gICAgICAgIGNvbnN0IGR0bzogU2F2ZUVudHJ5V2VpZ2hpbmdEdG8gPSB7XHJcbiAgICAgICAgICB1X0dhdGVDb2RlOiB0aGlzLmdhdGVDb2RlIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgIHVfRW50cnlEYXRlOiB0aGlzLmVudHJ5RGF0ZSB8fCBjdXJyZW50RGF0ZSxcclxuICAgICAgICAgIHVfRW50cnlUaW1lOiB0aGlzLmVudHJ5VGltZSB8fCBjdXJyZW50VGltZSxcclxuICAgICAgICAgIHVfRXhpdERhdGU6IHRoaXMuZXhpdERhdGUgfHwgbnVsbCxcclxuICAgICAgICAgIHVfRXhpdFRpbWU6IHRoaXMuZXhpdFRpbWUgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgdV9QbGF0ZTogdGhpcy50cnVja1BsYXRlQ29kZSxcclxuICAgICAgICAgIHVfRG9yc2VQbGF0ZTogdGhpcy50cmFpbGVyUGxhdGVDb2RlIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgIHVfRW50cnlUeXBlOiB0aGlzLmVudHJ5VHlwZUNvZGUgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgdV9EZXNjcmlwdGlvbjogdGhpcy5kZXNjcmlwdGlvbiB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICB1X0RyaXZlcjogdGhpcy5kcml2ZXJGdWxsTmFtZSB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICB1X0RyaXZlckNvZGU6IHRoaXMuZHJpdmVyQ29kZSB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICB1X1RjTm86IHRoaXMudGNObyB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICB1X0NhcmRDb2RlOiB0aGlzLmFjY291bnRDb2RlIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgIHVfU2NhbGVDb2RlOiB0aGlzLnNjYWxlQ29kZSB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICB1X0l0ZW1Db2RlOiB0aGlzLnN0b2NrQ29kZSB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICB1X0Rlc3BhdGNoQWR2aWNlTm86IHRoaXMud2F5YmlsbE5vIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgIHVfRGVzcGF0Y2hFeGlzdDogJ04nLFxyXG4gICAgICAgICAgdV9TaGlwVG86IHRoaXMuYXJyaXZhbExvY2F0aW9uIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgIHVfQ29udGFpbmVyTm86IHRoaXMuY29udGFpbmVyTm8gfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgdV9TaGlwUGxhY2U6IHRoaXMuZGVwYXJ0dXJlTG9jYXRpb24gfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgb2JzJCA9IHRoaXMuc2VydmljZS51cGRhdGUoZG9jRW50cnksIGR0bykucGlwZShzd2l0Y2hNYXAoKCkgPT4gZG9XZWlnaCQpKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBvYnMkID0gZG9XZWlnaCQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuaXNTYXZpbmcgPSB0cnVlO1xyXG4gICAgICBvYnMkLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKCkgPT4ge1xyXG4gICAgICAgICAgLy8gVGFydMSxbSBkZcSfZXJsZXJpbmkgd2VpZ2hpbmdNb2RlJ2EgZ8O2cmUgZ8O8bmNlbGxlXHJcbiAgICAgICAgICBpZiAodGhpcy53ZWlnaGluZ01vZGUgPT09ICdmaXJzdCcpIHtcclxuICAgICAgICAgICAgdGhpcy5maXJzdFdlaWdoaW5nVmFsdWUgPSB0aGlzLmZpeGVkU2NhbGVWYWx1ZTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMubGFzdFdlaWdoaW5nVmFsdWUgPSB0aGlzLmZpeGVkU2NhbGVWYWx1ZTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB0aGlzLmlzU2F2aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0ZXIuc3VjY2VzcyhcclxuICAgICAgICAgICAgdGhpcy53ZWlnaGluZ01vZGUgPT09ICdmaXJzdCdcclxuICAgICAgICAgICAgICA/IHRoaXMubG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KCdLYWRvb2dsdTo6Rmlyc3RXZWlnaGluZ1NhdmVkJylcclxuICAgICAgICAgICAgICA6IHRoaXMubG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KCdLYWRvb2dsdTo6TGFzdFdlaWdoaW5nU2F2ZWQnKVxyXG4gICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAvLyBLxLFzYSBiaXIgZ2VjaWttZSBpbGUgbGlzdGV5ZSBkw7ZuIChrdWxsYW7EsWPEsSBwcm9ncmVzcyBiYXIgZGXEn2nFn2ltaW5pIGfDtnJzw7xuKVxyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2thZG9vZ2x1L2VudHJ5LXdlaWdoaW5nJ10pO1xyXG4gICAgICAgICAgfSwgdGhpcy53ZWlnaGluZ01vZGUgPT0gJ2xhc3QnID8gODAwMCA6IDE1MDApO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuaXNTYXZpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMudG9hc3Rlci5lcnJvcih0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudCgnS2Fkb29nbHU6OldlaWdoaW5nUmVjb3JkRXJyb3InKSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBOb3JtYWwga2F5xLF0IG1vZHUgKHllbmkga2F5xLF0IHZleWEgZMO8emVubGVtZSlcclxuICAgIGlmICghdGhpcy50cnVja1BsYXRlQ29kZSkge1xyXG4gICAgICB0aGlzLmNvbmZpcm1hdGlvbi53YXJuKHRoaXMubG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KCdLYWRvb2dsdTo6U2VsZWN0VHJ1Y2tQbGF0ZScpLCAnJywge1xyXG4gICAgICAgIGhpZGVZZXNCdG46IHRydWUsXHJcbiAgICAgICAgY2FuY2VsVGV4dDogdGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoJ0thZG9vZ2x1OjpDYW5jZWwnKSxcclxuICAgICAgICBkaXNtaXNzaWJsZTogZmFsc2UsXHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcclxuICAgIGNvbnN0IGN1cnJlbnREYXRlID0gbm93LnRvSVNPU3RyaW5nKCkuc3BsaXQoJ1QnKVswXTtcclxuICAgIGNvbnN0IGN1cnJlbnRUaW1lID0gbm93LnRvVGltZVN0cmluZygpLnNwbGl0KCcgJylbMF07IC8vIEhIOm1tOnNzXHJcblxyXG4gICAgY29uc3QgZHRvOiBTYXZlRW50cnlXZWlnaGluZ0R0byA9IHtcclxuICAgICAgdV9HYXRlQ29kZTogdGhpcy5nYXRlQ29kZSB8fCB1bmRlZmluZWQsXHJcbiAgICAgIHVfRW50cnlEYXRlOiB0aGlzLmVudHJ5RGF0ZSB8fCBjdXJyZW50RGF0ZSxcclxuICAgICAgdV9FbnRyeVRpbWU6IHRoaXMuZW50cnlUaW1lIHx8IGN1cnJlbnRUaW1lLFxyXG4gICAgICB1X0V4aXREYXRlOiB0aGlzLmV4aXREYXRlIHx8IG51bGwsXHJcbiAgICAgIHVfRXhpdFRpbWU6IHRoaXMuZXhpdFRpbWUgfHwgdW5kZWZpbmVkLFxyXG4gICAgICB1X1BsYXRlOiB0aGlzLnRydWNrUGxhdGVDb2RlLFxyXG4gICAgICB1X0RvcnNlUGxhdGU6IHRoaXMudHJhaWxlclBsYXRlQ29kZSB8fCB1bmRlZmluZWQsXHJcbiAgICAgIHVfRW50cnlUeXBlOiB0aGlzLmVudHJ5VHlwZUNvZGUgfHwgdW5kZWZpbmVkLFxyXG4gICAgICB1X0Rlc2NyaXB0aW9uOiB0aGlzLmRlc2NyaXB0aW9uIHx8IHVuZGVmaW5lZCxcclxuICAgICAgdV9Ecml2ZXI6IHRoaXMuZHJpdmVyRnVsbE5hbWUgfHwgdW5kZWZpbmVkLFxyXG4gICAgICB1X0RyaXZlckNvZGU6IHRoaXMuZHJpdmVyQ29kZSB8fCB1bmRlZmluZWQsXHJcbiAgICAgIHVfVGNObzogdGhpcy50Y05vIHx8IHVuZGVmaW5lZCxcclxuICAgICAgdV9DYXJkQ29kZTogdGhpcy5hY2NvdW50Q29kZSB8fCB1bmRlZmluZWQsXHJcbiAgICAgIHVfU2NhbGVDb2RlOiB0aGlzLnNjYWxlQ29kZSB8fCB1bmRlZmluZWQsXHJcbiAgICAgIHVfSXRlbUNvZGU6IHRoaXMuc3RvY2tDb2RlIHx8IHVuZGVmaW5lZCxcclxuICAgICAgdV9EZXNwYXRjaEFkdmljZU5vOiB0aGlzLndheWJpbGxObyB8fCB1bmRlZmluZWQsXHJcbiAgICAgIHVfRGVzcGF0Y2hFeGlzdDogJ04nLFxyXG4gICAgICB1X1NoaXBUbzogdGhpcy5hcnJpdmFsTG9jYXRpb24gfHwgdW5kZWZpbmVkLFxyXG4gICAgICB1X0NvbnRhaW5lck5vOiB0aGlzLmNvbnRhaW5lck5vIHx8IHVuZGVmaW5lZCxcclxuICAgICAgdV9TaGlwUGxhY2U6IHRoaXMuZGVwYXJ0dXJlTG9jYXRpb24gfHwgdW5kZWZpbmVkLFxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBvYnMkID0gZG9jRW50cnlcclxuICAgICAgPyB0aGlzLnNlcnZpY2UudXBkYXRlKGRvY0VudHJ5LCBkdG8pXHJcbiAgICAgIDogdGhpcy5zZXJ2aWNlLmNyZWF0ZShkdG8pO1xyXG5cclxuICAgIHRoaXMuaXNTYXZpbmcgPSB0cnVlO1xyXG4gICAgb2JzJC5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5pc1NhdmluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMudG9hc3Rlci5zdWNjZXNzKHRoaXMubG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KCdLYWRvb2dsdTo6UmVjb3JkU2F2ZWRTdWNjZXNzJykpO1xyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2thZG9vZ2x1L2VudHJ5LXdlaWdoaW5nJ10pO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuaXNTYXZpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnRvYXN0ZXIuZXJyb3IodGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoJ0thZG9vZ2x1OjpSZWNvcmRTYXZlRXJyb3InKSk7XHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGRvR29vZHNNb3ZlbWVudCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IGRvY0VudHJ5ID0gdGhpcy5nZXREb2NFbnRyeSh0aGlzLnJlY29yZCk7XHJcbiAgICBpZiAoIWRvY0VudHJ5KSByZXR1cm47XHJcblxyXG4gICAgdGhpcy5pc0RvaW5nR29vZHNNb3ZlbWVudCA9IHRydWU7XHJcbiAgICB0aGlzLnNlcnZpY2UuZG9Hb29kc01vdmVtZW50KGRvY0VudHJ5KS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiB1cGRhdGVkID0+IHtcclxuICAgICAgICB0aGlzLnJlY29yZCA9IHVwZGF0ZWQ7XHJcbiAgICAgICAgdGhpcy5pc0RvaW5nR29vZHNNb3ZlbWVudCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMudG9hc3Rlci5zdWNjZXNzKHRoaXMubG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KCdLYWRvb2dsdTo6R29vZHNNb3ZlbWVudFN1Y2Nlc3MnKSk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5pc0RvaW5nR29vZHNNb3ZlbWVudCA9IGZhbHNlO1xyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzYWJpdGxlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5maXhlZFNjYWxlVmFsdWUgPSB0aGlzLmN1cnJlbnRTY2FsZVZhbHVlO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLl9zdG9wU2NhbGUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3N0YXJ0U2NhbGUoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNjYWxlU3ViID0gdGhpcy5zY2FsZVNpZ25hbFJTZXJ2aWNlLndlaWdodCQuc3Vic2NyaWJlKHcgPT4ge1xyXG4gICAgICBpZiAodyAhPT0gbnVsbCkgdGhpcy5jdXJyZW50U2NhbGVWYWx1ZSA9IHc7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuc2NhbGVTaWduYWxSU2VydmljZS5zdGFydCh0aGlzLnNjYWxlQXBpVXJsLCB0aGlzLnNjYWxlSWQpXHJcbiAgICAgIC5jYXRjaChlID0+IGNvbnNvbGUuZXJyb3IoJ1NpZ25hbFIgYmHEn2xhbnTEsSBoYXRhc8SxOicsIGUpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3N0b3BTY2FsZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuc2NhbGVTdWI/LnVuc3Vic2NyaWJlKCk7XHJcbiAgICB0aGlzLnNjYWxlU3ViID0gbnVsbDtcclxuICAgIHRoaXMuc2NhbGVTaWduYWxSU2VydmljZS5zdG9wKHRoaXMuc2NhbGVJZClcclxuICAgICAgLmNhdGNoKGUgPT4gY29uc29sZS5lcnJvcignU2lnbmFsUiBrYXBhdG1hIGhhdGFzxLE6JywgZSkpO1xyXG4gIH1cclxuXHJcbiAgZ29CYWNrKCk6IHZvaWQge1xyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycva2Fkb29nbHUvZW50cnktd2VpZ2hpbmcnXSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHZhbGlkYXRlVENLTih2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCB0YyA9IHZhbHVlPy50cmltKCk7XHJcbiAgICBpZiAoIXRjIHx8IHRjLmxlbmd0aCAhPT0gMTEpIHJldHVybiBmYWxzZTtcclxuICAgIGlmICghL15cXGR7MTF9JC8udGVzdCh0YykpIHJldHVybiBmYWxzZTtcclxuICAgIGlmICh0Y1swXSA9PT0gJzAnKSByZXR1cm4gZmFsc2U7XHJcbiAgICBjb25zdCBkID0gdGMuc3BsaXQoJycpLm1hcChOdW1iZXIpO1xyXG4gICAgY29uc3QgZDEwID0gKChkWzBdICsgZFsyXSArIGRbNF0gKyBkWzZdICsgZFs4XSkgKiA3IC0gKGRbMV0gKyBkWzNdICsgZFs1XSArIGRbN10pKSAlIDEwO1xyXG4gICAgaWYgKGQxMCAhPT0gZFs5XSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgY29uc3QgZDExID0gZC5zbGljZSgwLCAxMCkucmVkdWNlKChhLCBiKSA9PiBhICsgYiwgMCkgJSAxMDtcclxuICAgIHJldHVybiBkMTEgPT09IGRbMTBdO1xyXG4gIH1cclxufVxyXG4iLCI8YWJwLXBhZ2UgW2JyZWFkY3J1bWJdPVwiZmFsc2VcIj5cclxuICA8YWJwLXBhZ2UtdG9vbGJhci1jb250YWluZXIgY2xhc3M9XCJjb2xcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3cgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICA8aDMgY2xhc3M9XCJwYWdlLXRpdGxlXCI+XHJcbiAgICAgICAgICB7eyAnS2Fkb29nbHU6OkVudHJ5V2VpZ2hpbmdUaXRsZScgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwid2VpZ2hpbmdNb2RlXCIgY2xhc3M9XCJiYWRnZSBtcy0yIGZzLTZcIlxyXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAgJ2JnLXdhcm5pbmcgdGV4dC1kYXJrJzogd2VpZ2hpbmdNb2RlID09PSAnZmlyc3QnLFxyXG4gICAgICAgICAgICAgICdiZy1wcmltYXJ5Jzogd2VpZ2hpbmdNb2RlID09PSAnbGFzdCdcclxuICAgICAgICAgICAgfVwiPlxyXG4gICAgICAgICAgICB7eyB3ZWlnaGluZ01vZGVMYWJlbCB9fVxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCIhd2VpZ2hpbmdNb2RlXCIgY2xhc3M9XCJiYWRnZSBtcy0yIGZzLTZcIlxyXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAgJ2JnLXNlY29uZGFyeSc6IHdlaWdoaW5nU3RlcCA9PT0gMSxcclxuICAgICAgICAgICAgICAnYmctaW5mbyc6IHdlaWdoaW5nU3RlcCA9PT0gMixcclxuICAgICAgICAgICAgICAnYmctc3VjY2Vzcyc6IHdlaWdoaW5nU3RlcCA9PT0gM1xyXG4gICAgICAgICAgICB9XCI+XHJcbiAgICAgICAgICAgIHt7ICh3ZWlnaGluZ1N0ZXAgPT09IDEgPyAnS2Fkb29nbHU6OlJlY29yZFN0ZXAnIDogd2VpZ2hpbmdTdGVwID09PSAyID8gJ0thZG9vZ2x1OjpGaXJzdFdlaWdoaW5nJyA6ICdLYWRvb2dsdTo6Q29tcGxldGVkJykgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L2gzPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvYWJwLXBhZ2UtdG9vbGJhci1jb250YWluZXI+XHJcblxyXG4gIDwhLS0gU3RlcCBJbmRpY2F0b3IgLS0+XHJcbiAgPGRpdiBjbGFzcz1cImNhcmQgbWItM1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBweS0zXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIj5cclxuXHJcbiAgICAgICAgPCEtLSBTdGVwIDE6IEFyYcOnICYgQmVsZ2UgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3VuZGVkLWNpcmNsZSBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgZnctYm9sZCB0ZXh0LXdoaXRlXCJcclxuICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDo0MHB4OyBoZWlnaHQ6NDBweDsgZm9udC1zaXplOjFyZW07XCJcclxuICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiZm9ybVBoYXNlID4gMSB8fCBpc0Z1bGx5Q29tcGxldGVkID8gJyMxOTg3NTQnIDogKGZvcm1QaGFzZSA9PT0gMSA/ICcjMGQ2ZWZkJyA6ICcjNmM3NTdkJylcIj5cclxuICAgICAgICAgICAgPGkgKm5nSWY9XCJmb3JtUGhhc2UgPiAxIHx8IGlzRnVsbHlDb21wbGV0ZWRcIiBjbGFzcz1cImZhIGZhLWNoZWNrXCI+PC9pPlxyXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImZvcm1QaGFzZSA8PSAxICYmICFpc0Z1bGx5Q29tcGxldGVkXCI+MTwvc3Bhbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPHNtYWxsIGNsYXNzPVwibXQtMSBmdy1zZW1pYm9sZFwiIFtjbGFzcy50ZXh0LXN1Y2Nlc3NdPVwiZm9ybVBoYXNlID4gMSB8fCBpc0Z1bGx5Q29tcGxldGVkXCIgW2NsYXNzLnRleHQtcHJpbWFyeV09XCJmb3JtUGhhc2UgPT09IDEgJiYgIWlzRnVsbHlDb21wbGV0ZWRcIj57eyAnS2Fkb29nbHU6OlZlaGljbGVBbmREb2N1bWVudCcgfCBhYnBMb2NhbGl6YXRpb24gfX08L3NtYWxsPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC1ncm93LTEgbXgtMlwiIHN0eWxlPVwiaGVpZ2h0OjNweDsgbWF4LXdpZHRoOjEyMHB4O1wiXHJcbiAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJmb3JtUGhhc2UgPiAxID8gJyMxOTg3NTQnIDogJyNkZWUyZTYnXCI+PC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gU3RlcCAyOiBUYXJ0xLFtIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm91bmRlZC1jaXJjbGUgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGZ3LWJvbGQgdGV4dC13aGl0ZVwiXHJcbiAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6NDBweDsgaGVpZ2h0OjQwcHg7IGZvbnQtc2l6ZToxcmVtO1wiXHJcbiAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cIndlaWdoaW5nU3RlcCA9PT0gMyA/ICcjMTk4NzU0JyA6IChmb3JtUGhhc2UgPT09IDIgPyAnIzBkNmVmZCcgOiAnIzZjNzU3ZCcpXCI+XHJcbiAgICAgICAgICAgIDxpICpuZ0lmPVwid2VpZ2hpbmdTdGVwID09PSAzXCIgY2xhc3M9XCJmYSBmYS1jaGVja1wiPjwvaT5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ3ZWlnaGluZ1N0ZXAgPCAzXCI+Mjwvc3Bhbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPHNtYWxsIGNsYXNzPVwibXQtMSBmdy1zZW1pYm9sZFwiIFtjbGFzcy50ZXh0LXN1Y2Nlc3NdPVwid2VpZ2hpbmdTdGVwID09PSAzXCIgW2NsYXNzLnRleHQtcHJpbWFyeV09XCJmb3JtUGhhc2UgPT09IDIgJiYgd2VpZ2hpbmdTdGVwIDwgM1wiIFtjbGFzcy50ZXh0LW11dGVkXT1cImZvcm1QaGFzZSA8IDIgJiYgd2VpZ2hpbmdTdGVwIDwgM1wiPnt7ICdLYWRvb2dsdTo6V2VpZ2hpbmdTdGVwJyB8IGFicExvY2FsaXphdGlvbiB9fTwvc21hbGw+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LWdyb3ctMSBteC0yXCIgc3R5bGU9XCJoZWlnaHQ6M3B4OyBtYXgtd2lkdGg6MTIwcHg7XCJcclxuICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cIndlaWdoaW5nU3RlcCA9PT0gMyA/ICcjMTk4NzU0JyA6ICcjZGVlMmU2J1wiPjwvZGl2PlxyXG5cclxuICAgICAgICA8IS0tIFN0ZXAgMzogVGFtYW1sYW5kxLEgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3VuZGVkLWNpcmNsZSBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgZnctYm9sZCB0ZXh0LXdoaXRlXCJcclxuICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDo0MHB4OyBoZWlnaHQ6NDBweDsgZm9udC1zaXplOjFyZW07XCJcclxuICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwid2VpZ2hpbmdTdGVwID09PSAzID8gJyMxOTg3NTQnIDogJyM2Yzc1N2QnXCI+XHJcbiAgICAgICAgICAgIDxpICpuZ0lmPVwid2VpZ2hpbmdTdGVwID09PSAzXCIgY2xhc3M9XCJmYSBmYS1jaGVja1wiPjwvaT5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ3ZWlnaGluZ1N0ZXAgPCAzXCI+Mzwvc3Bhbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPHNtYWxsIGNsYXNzPVwibXQtMSBmdy1zZW1pYm9sZFwiIFtjbGFzcy50ZXh0LXN1Y2Nlc3NdPVwid2VpZ2hpbmdTdGVwID09PSAzXCIgW2NsYXNzLnRleHQtbXV0ZWRdPVwid2VpZ2hpbmdTdGVwIDwgM1wiPnt7ICdLYWRvb2dsdTo6Q29tcGxldGVkJyB8IGFicExvY2FsaXphdGlvbiB9fTwvc21hbGw+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8IS0tID09PT09PT09PT0gUEhBU0UgMTogQXJhw6cgJiBCZWxnZSA9PT09PT09PT09IC0tPlxyXG4gIDxkaXYgKm5nSWY9XCJmb3JtUGhhc2UgPT09IDEgJiYgIWlzRnVsbHlDb21wbGV0ZWRcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjYXJkXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHlcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuXHJcbiAgICAgIDwhLS0gU29sIHPDvHR1bjogR2lyacWfL8OHxLFrxLHFnyArIEFyYcOnICYgU8O8csO8Y8O8IC0tPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cclxuXHJcbiAgICAgICAgPCEtLSBHcnVwIDE6IEdpcmnFnyAvIMOHxLFrxLHFnyBCaWxnaWxlcmkgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlciByb3VuZGVkIHAtMyBtYi0zXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyLWJvdHRvbSBwYi0yIG1iLTMgZnctYm9sZCB0ZXh0LXNlY29uZGFyeVwiPlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXNpZ24taW4tYWx0IG1lLTJcIj48L2k+e3sgJ0thZG9vZ2x1OjpFbnRyeUV4aXRJbmZvJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xIHNtYWxsIGZ3LXNlbWlib2xkIHRleHQtbXV0ZWRcIj57eyAnS2Fkb29nbHU6OkdhdGVTZWxlY3Rpb24nIHwgYWJwTG9jYWxpemF0aW9uIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICA8aGl0LWxvb2t1cC1zZWxlY3RcclxuICAgICAgICAgICAgICAgIFtsb2FkRm5dPVwibG9hZEdhdGVzXCJcclxuICAgICAgICAgICAgICAgIFtjb2x1bW5zXT1cImdhdGVDb2x1bW5zXCJcclxuICAgICAgICAgICAgICAgIGRpc3BsYXlOYW1lPVwibmFtZVwiXHJcbiAgICAgICAgICAgICAgICBbZWRpdGluZ0RhdGFdPVwiZ2F0ZU5hbWVcIlxyXG4gICAgICAgICAgICAgICAgW3JlYWRPbmx5XT1cImlzVXBkYXRlTW9kZVwiXHJcbiAgICAgICAgICAgICAgICAoc2VsZWN0ZWQpPVwib25HYXRlU2VsZWN0ZWQoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgIDwvaGl0LWxvb2t1cC1zZWxlY3Q+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgbWItM1wiPlxyXG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgbWItMSBzbWFsbCBmdy1zZW1pYm9sZCB0ZXh0LW11dGVkXCI+QXJhw6cgSGFyZWtldCBUw7xyw7w8L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDxoaXQtbG9va3VwLXNlbGVjdFxyXG4gICAgICAgICAgICAgICAgW2xvYWRGbl09XCJsb2FkVmVoaWNsZVR5cGVzXCJcclxuICAgICAgICAgICAgICAgIFtjb2x1bW5zXT1cInZlaGljbGVUeXBlQ29sdW1uc1wiXHJcbiAgICAgICAgICAgICAgICBkaXNwbGF5TmFtZT1cIm5hbWVcIlxyXG4gICAgICAgICAgICAgICAgW2VkaXRpbmdEYXRhXT1cImVudHJ5VHlwZU5hbWVcIlxyXG4gICAgICAgICAgICAgICAgW3JlYWRPbmx5XT1cImlzVXBkYXRlTW9kZVwiXHJcbiAgICAgICAgICAgICAgICAoc2VsZWN0ZWQpPVwib25WZWhpY2xlVHlwZVNlbGVjdGVkKCRldmVudClcIj5cclxuICAgICAgICAgICAgICA8L2hpdC1sb29rdXAtc2VsZWN0PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IG1iLTNcIj5cclxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIG1iLTEgc21hbGwgZnctc2VtaWJvbGQgdGV4dC1tdXRlZFwiPnt7ICdLYWRvb2dsdTo6RW50cnlEYXRlJyB8IGFicExvY2FsaXphdGlvbiB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGR4LWRhdGUtYm94XHJcbiAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZW50cnlEYXRlVGltZVwiXHJcbiAgICAgICAgICAgICAgICB0eXBlPVwiZGF0ZXRpbWVcIlxyXG4gICAgICAgICAgICAgICAgZGlzcGxheUZvcm1hdD1cImRkLk1NLnl5eXkgSEg6bW1cIlxyXG4gICAgICAgICAgICAgICAgW3JlYWRPbmx5XT1cImlzVXBkYXRlTW9kZVwiXHJcbiAgICAgICAgICAgICAgICB3aWR0aD1cIjEwMCVcIj5cclxuICAgICAgICAgICAgICA8L2R4LWRhdGUtYm94PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IG1iLTNcIj5cclxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIG1iLTEgc21hbGwgZnctc2VtaWJvbGQgdGV4dC1tdXRlZFwiPnt7ICdLYWRvb2dsdTo6RXhpdERhdGUnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICA8ZHgtZGF0ZS1ib3hcclxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJleGl0RGF0ZVRpbWVcIlxyXG4gICAgICAgICAgICAgICAgdHlwZT1cImRhdGV0aW1lXCJcclxuICAgICAgICAgICAgICAgIGRpc3BsYXlGb3JtYXQ9XCJkZC5NTS55eXl5IEhIOm1tXCJcclxuICAgICAgICAgICAgICAgIFtyZWFkT25seV09XCJpc1VwZGF0ZU1vZGVcIlxyXG4gICAgICAgICAgICAgICAgd2lkdGg9XCIxMDAlXCI+XHJcbiAgICAgICAgICAgICAgPC9keC1kYXRlLWJveD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPCEtLSBHcnVwIDI6IEFyYcOnICYgU8O8csO8Y8O8IEJpbGdpbGVyaSAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyIHJvdW5kZWQgcC0zIG1iLTNcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJib3JkZXItYm90dG9tIHBiLTIgbWItMyBmdy1ib2xkIHRleHQtc2Vjb25kYXJ5XCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtdHJ1Y2sgbWUtMlwiPjwvaT57eyAnS2Fkb29nbHU6OlZlaGljbGVEcml2ZXJJbmZvJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xIHNtYWxsIGZ3LXNlbWlib2xkIHRleHQtbXV0ZWRcIj5cclxuICAgICAgICAgICAgICAgIHt7ICdLYWRvb2dsdTo6VHJ1Y2tQbGF0ZScgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIj4qPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGhpdC1sb29rdXAtc2VsZWN0XHJcbiAgICAgICAgICAgICAgICBbbG9hZEZuXT1cImxvYWRUcnVja1BsYXRlc1wiXHJcbiAgICAgICAgICAgICAgICBbY29sdW1uc109XCJ0cnVja1BsYXRlQ29sdW1uc1wiXHJcbiAgICAgICAgICAgICAgICBkaXNwbGF5TmFtZT1cInBsYXRlTm9cIlxyXG4gICAgICAgICAgICAgICAgW2VkaXRpbmdEYXRhXT1cInRydWNrUGxhdGVOb1wiXHJcbiAgICAgICAgICAgICAgICBbcmVhZE9ubHldPVwiaXNGb3JtTG9ja2VkXCJcclxuICAgICAgICAgICAgICAgIChzZWxlY3RlZCk9XCJvblRydWNrUGxhdGVTZWxlY3RlZCgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgPC9oaXQtbG9va3VwLXNlbGVjdD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBtYi0zXCIgKm5nSWY9XCJ0cmFpbGVyUGxhdGVOb1wiPlxyXG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgbWItMSBzbWFsbCBmdy1zZW1pYm9sZCB0ZXh0LW11dGVkXCI+e3sgJ0thZG9vZ2x1OjpUcmFpbGVyUGxhdGUnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICA8aGl0LWxvb2t1cC1zZWxlY3RcclxuICAgICAgICAgICAgICAgIFtsb2FkRm5dPVwibG9hZFRyYWlsZXJQbGF0ZXNcIlxyXG4gICAgICAgICAgICAgICAgW2NvbHVtbnNdPVwidHJhaWxlclBsYXRlQ29sdW1uc1wiXHJcbiAgICAgICAgICAgICAgICBkaXNwbGF5TmFtZT1cInBsYXRlTm9cIlxyXG4gICAgICAgICAgICAgICAgW2VkaXRpbmdEYXRhXT1cInRyYWlsZXJQbGF0ZU5vXCJcclxuICAgICAgICAgICAgICAgIFtyZWFkT25seV09XCJpc0Zvcm1Mb2NrZWRcIlxyXG4gICAgICAgICAgICAgICAgKHNlbGVjdGVkKT1cIm9uVHJhaWxlclBsYXRlU2VsZWN0ZWQoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgIDwvaGl0LWxvb2t1cC1zZWxlY3Q+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgbWItM1wiPlxyXG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgbWItMSBzbWFsbCBmdy1zZW1pYm9sZCB0ZXh0LW11dGVkXCI+e3sgJ0thZG9vZ2x1OjpEcml2ZXJOYW1lJyB8IGFicExvY2FsaXphdGlvbiB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGR4LXRleHQtYm94XHJcbiAgICAgICAgICAgICAgICBbKHZhbHVlKV09XCJkcml2ZXJGdWxsTmFtZVwiXHJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0thZG9vZ2x1OjpFbnRlckRyaXZlck5hbWUnIHwgYWJwTG9jYWxpemF0aW9uXCJcclxuICAgICAgICAgICAgICAgIFtyZWFkT25seV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiPlxyXG4gICAgICAgICAgICAgIDwvZHgtdGV4dC1ib3g+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgbWItM1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yIG1iLTFcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgbWItMCBzbWFsbCBmdy1zZW1pYm9sZCB0ZXh0LW11dGVkXCI+e3sgaXNUY0NpdGl6ZW4gPyAoJ0thZG9vZ2x1OjpUY0lkZW50aXR5Tm8nIHwgYWJwTG9jYWxpemF0aW9uKSA6ICdLaW1saWsgTm8nIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxkeC1jaGVjay1ib3ggWyh2YWx1ZSldPVwiaXNUY0NpdGl6ZW5cIiBbcmVhZE9ubHldPVwiaXNVcGRhdGVNb2RlXCIgdGV4dD1cIlQuQy4gVmF0YW5kYcWfxLFcIj48L2R4LWNoZWNrLWJveD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZHgtdGV4dC1ib3hcclxuICAgICAgICAgICAgICAgIFsodmFsdWUpXT1cInRjTm9cIlxyXG4gICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImlzVGNDaXRpemVuID8gKCdLYWRvb2dsdTo6VGNJZGVudGl0eU5vJyB8IGFicExvY2FsaXphdGlvbikgOiAnS2ltbGlrIE5vJ1wiXHJcbiAgICAgICAgICAgICAgICBbcmVhZE9ubHldPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICB3aWR0aD1cIjEwMCVcIj5cclxuICAgICAgICAgICAgICA8L2R4LXRleHQtYm94PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8IS0tIFNhxJ8gc8O8dHVuOiBCZWxnZSAmIFnDvGsgLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG5cclxuICAgICAgICA8IS0tIEdydXAgMzogQmVsZ2UgJiBZw7xrIEJpbGdpbGVyaSAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyIHJvdW5kZWQgcC0zIG1iLTNcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJib3JkZXItYm90dG9tIHBiLTIgbWItMyBmdy1ib2xkIHRleHQtc2Vjb25kYXJ5XCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZmlsZS1hbHQgbWUtMlwiPjwvaT57eyAnS2Fkb29nbHU6OkRvY3VtZW50Q2FyZ29JbmZvJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xIHNtYWxsIGZ3LXNlbWlib2xkIHRleHQtbXV0ZWRcIj57eyAnS2Fkb29nbHU6OkJ1c2luZXNzUGFydG5lcicgfCBhYnBMb2NhbGl6YXRpb24gfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDxoaXQtbG9va3VwLXNlbGVjdFxyXG4gICAgICAgICAgICAgICAgW2xvYWRGbl09XCJsb2FkQWNjb3VudHNcIlxyXG4gICAgICAgICAgICAgICAgW2NvbHVtbnNdPVwiYWNjb3VudENvbHVtbnNcIlxyXG4gICAgICAgICAgICAgICAgZGlzcGxheU5hbWU9XCJ0aXRsZVwiXHJcbiAgICAgICAgICAgICAgICBbZWRpdGluZ0RhdGFdPVwiYWNjb3VudFRpdGxlXCJcclxuICAgICAgICAgICAgICAgIFtyZWFkT25seV09XCJpc0Zvcm1Mb2NrZWRcIlxyXG4gICAgICAgICAgICAgICAgKHNlbGVjdGVkKT1cIm9uQWNjb3VudFNlbGVjdGVkKCRldmVudClcIj5cclxuICAgICAgICAgICAgICA8L2hpdC1sb29rdXAtc2VsZWN0PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IG1iLTNcIj5cclxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIG1iLTEgc21hbGwgZnctc2VtaWJvbGQgdGV4dC1tdXRlZFwiPnt7ICdLYWRvb2dsdTo6V2F5YmlsbE51bWJlcicgfCBhYnBMb2NhbGl6YXRpb24gfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDxoaXQtbG9va3VwLXNlbGVjdFxyXG4gICAgICAgICAgICAgICAgW2xvYWRGbl09XCJsb2FkV2F5YmlsbHNcIlxyXG4gICAgICAgICAgICAgICAgW2NvbHVtbnNdPVwid2F5YmlsbENvbHVtbnNcIlxyXG4gICAgICAgICAgICAgICAgZGlzcGxheU5hbWU9XCJkb2NOdW1cIlxyXG4gICAgICAgICAgICAgICAga2V5RXhwcj1cImRvY0VudHJ5XCJcclxuICAgICAgICAgICAgICAgIFtlZGl0aW5nRGF0YV09XCJ3YXliaWxsTm9cIlxyXG4gICAgICAgICAgICAgICAgKHNlbGVjdGVkKT1cIm9uV2F5YmlsbFNlbGVjdGVkKCRldmVudClcIj5cclxuICAgICAgICAgICAgICA8L2hpdC1sb29rdXAtc2VsZWN0PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IG1iLTNcIj5cclxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIG1iLTEgc21hbGwgZnctc2VtaWJvbGQgdGV4dC1tdXRlZFwiPnt7ICdLYWRvb2dsdTo6SXRlbUNvZGUnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICA8aGl0LWxvb2t1cC1zZWxlY3RcclxuICAgICAgICAgICAgICAgIFtsb2FkRm5dPVwibG9hZFN0b2NrSXRlbXNcIlxyXG4gICAgICAgICAgICAgICAgW2NvbHVtbnNdPVwic3RvY2tJdGVtQ29sdW1uc1wiXHJcbiAgICAgICAgICAgICAgICBkaXNwbGF5TmFtZT1cIm5hbWVcIlxyXG4gICAgICAgICAgICAgICAgW2VkaXRpbmdEYXRhXT1cInN0b2NrTmFtZVwiXHJcbiAgICAgICAgICAgICAgICAoc2VsZWN0ZWQpPVwib25TdG9ja0l0ZW1TZWxlY3RlZCgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgPC9oaXQtbG9va3VwLXNlbGVjdD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xIHNtYWxsIGZ3LXNlbWlib2xkIHRleHQtbXV0ZWRcIj57eyAnS2Fkb29nbHU6OkNvbnRhaW5lck5vJyB8IGFicExvY2FsaXphdGlvbiB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGR4LXRleHQtYm94XHJcbiAgICAgICAgICAgICAgICBbKHZhbHVlKV09XCJjb250YWluZXJOb1wiXHJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0thZG9vZ2x1OjpNYW51YWxFbnRyeScgfCBhYnBMb2NhbGl6YXRpb25cIlxyXG4gICAgICAgICAgICAgICAgW3JlYWRPbmx5XT1cImlzRm9ybUxvY2tlZFwiXHJcbiAgICAgICAgICAgICAgICB3aWR0aD1cIjEwMCVcIj5cclxuICAgICAgICAgICAgICA8L2R4LXRleHQtYm94PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IG1iLTNcIj5cclxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIG1iLTEgc21hbGwgZnctc2VtaWJvbGQgdGV4dC1tdXRlZFwiPnt7ICdLYWRvb2dsdTo6RGVwYXJ0dXJlUGxhY2UnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICA8ZHgtdGV4dC1ib3hcclxuICAgICAgICAgICAgICAgIFsodmFsdWUpXT1cImRlcGFydHVyZUxvY2F0aW9uXCJcclxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInS2Fkb29nbHU6OkF1dG9GaWxsZWRGcm9tV2F5YmlsbCcgfCBhYnBMb2NhbGl6YXRpb25cIlxyXG4gICAgICAgICAgICAgICAgd2lkdGg9XCIxMDAlXCI+XHJcbiAgICAgICAgICAgICAgPC9keC10ZXh0LWJveD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xIHNtYWxsIGZ3LXNlbWlib2xkIHRleHQtbXV0ZWRcIj57eyAnS2Fkb29nbHU6OkFycml2YWxQbGFjZScgfCBhYnBMb2NhbGl6YXRpb24gfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDxkeC10ZXh0LWJveFxyXG4gICAgICAgICAgICAgICAgWyh2YWx1ZSldPVwiYXJyaXZhbExvY2F0aW9uXCJcclxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiPlxyXG4gICAgICAgICAgICAgIDwvZHgtdGV4dC1ib3g+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyIG1iLTNcIj5cclxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIG1iLTEgc21hbGwgZnctc2VtaWJvbGQgdGV4dC1tdXRlZFwiPnt7ICdLYWRvb2dsdTo6RGVzY3JpcHRpb24nIHwgYWJwTG9jYWxpemF0aW9uIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICA8ZHgtdGV4dC1hcmVhXHJcbiAgICAgICAgICAgICAgICBbKHZhbHVlKV09XCJkZXNjcmlwdGlvblwiXHJcbiAgICAgICAgICAgICAgICBbaGVpZ2h0XT1cIjcwXCJcclxuICAgICAgICAgICAgICAgIFtyZWFkT25seV09XCJpc0Zvcm1Mb2NrZWRcIlxyXG4gICAgICAgICAgICAgICAgd2lkdGg9XCIxMDAlXCI+XHJcbiAgICAgICAgICAgICAgPC9keC10ZXh0LWFyZWE+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICA8L2Rpdj5cclxuXHJcblxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSBQaGFzZSAxIEFsdCBCdXRvbmxhciAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gbXQtMyBtYi0zXCI+XHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeVwiIChjbGljayk9XCJnb0JhY2soKVwiPlxyXG4gICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtYXJyb3ctbGVmdCBtZS0xXCI+PC9pPiB7eyAnS2Fkb29nbHU6OkJhY2snIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0yXCI+XHJcbiAgICAgICAgPGFicC1idXR0b25cclxuICAgICAgICAgICpuZ0lmPVwiIXdlaWdoaW5nTW9kZSAmJiAhaXNGb3JtTG9ja2VkXCJcclxuICAgICAgICAgIGljb25DbGFzcz1cImZhIGZhLXNhdmVcIlxyXG4gICAgICAgICAgYnV0dG9uVHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICBbbG9hZGluZ109XCJpc1NhdmluZ1wiXHJcbiAgICAgICAgICAoY2xpY2spPVwic2F2ZSgpXCI+XHJcbiAgICAgICAgICB7eyAnS2Fkb29nbHU6OlNhdmUnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgPC9hYnAtYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiAoY2xpY2spPVwiaWxlcmlHaXQoKVwiPlxyXG4gICAgICAgICAge3sgJ0thZG9vZ2x1OjpOZXh0JyB8IGFicExvY2FsaXphdGlvbiB9fSA8aSBjbGFzcz1cImZhIGZhLWFycm93LXJpZ2h0IG1zLTFcIj48L2k+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDwhLS0gPT09PT09PT09PSBQSEFTRSAyOiBUYXJ0xLFtIFBhbmVsaSA9PT09PT09PT09IC0tPlxyXG4gIDxkaXYgKm5nSWY9XCJmb3JtUGhhc2UgPT09IDIgJiYgIWlzRnVsbHlDb21wbGV0ZWRcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgZnctYm9sZFwiPlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWJhbGFuY2Utc2NhbGUgbWUtMlwiPjwvaT57eyAnS2Fkb29nbHU6OldlaWdoaW5nUGFuZWwnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwid2VpZ2hpbmdNb2RlXCIgY2xhc3M9XCJiYWRnZSBtcy0yXCJcclxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ3ZWlnaGluZ01vZGUgPT09ICdmaXJzdCcgPyAnYmctd2FybmluZyB0ZXh0LWRhcmsnIDogJ2JnLXByaW1hcnknXCI+XHJcbiAgICAgICAgICAgICAge3sgd2VpZ2hpbmdNb2RlTGFiZWwgfX1cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5XCI+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IG14LWF1dG9cIj5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIENhbmzEsSBUYXJ0xLFtIHZlIFNhYml0bGVubWnFnyBEZcSfZXIg4oCUIMSwa2kgU8O8dHVuIC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBnLTMgbWItNFwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgPCEtLSBTb2wgU8O8dHVuOiBDYW5sxLEgVGFydMSxbSAtLT5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02XCIgc3R5bGU9XCJkaXNwbGF5OiBncmlkO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkIGJnLWxpZ2h0IGgtMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IHRleHQtY2VudGVyIHB5LTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWQgc21hbGwgbWItMSBmdy1zZW1pYm9sZCB0ZXh0LXVwcGVyY2FzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdLYWRvb2dsdTo6TGl2ZVdlaWdoaW5nJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cImZvbnQtc2l6ZTogMi41cmVtOyBmb250LXdlaWdodDogYm9sZDsgbGV0dGVyLXNwYWNpbmc6IDAuMDVlbTtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjdXJyZW50U2NhbGVWYWx1ZSAhPSBudWxsID8gKGN1cnJlbnRTY2FsZVZhbHVlIHwgbnVtYmVyOicxLjAtMCcpICsgJyBrZycgOiAn4oCUIGtnJyB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgIDwhLS0gU2HEnyBTw7x0dW46IFNhYml0bGVubWnFnyBEZcSfZXIgLS0+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiIHN0eWxlPVwiZGlzcGxheTogZ3JpZDtcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBoLTEwMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJmaXhlZFNjYWxlVmFsdWUgIT0gbnVsbCA/ICdib3JkZXItc3VjY2VzcycgOiAnYmctbGlnaHQnXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cImZpeGVkU2NhbGVWYWx1ZSAhPSBudWxsID8gJ3JnYmEoMjUsMTM1LDg0LDAuMDgpJyA6ICcnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IHRleHQtY2VudGVyIHB5LTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNtYWxsIG1iLTEgZnctc2VtaWJvbGQgdGV4dC11cHBlcmNhc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImZpeGVkU2NhbGVWYWx1ZSAhPSBudWxsID8gJ3RleHQtc3VjY2VzcycgOiAndGV4dC1tdXRlZCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAnS2Fkb29nbHU6OkZpeGVkVmFsdWUnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwiZm9udC1zaXplOiAyLjVyZW07IGZvbnQtd2VpZ2h0OiBib2xkOyBsZXR0ZXItc3BhY2luZzogMC4wNWVtO1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZml4ZWRTY2FsZVZhbHVlICE9IG51bGwgPyAndGV4dC1zdWNjZXNzJyA6ICcnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZml4ZWRTY2FsZVZhbHVlICE9IG51bGwgPyAoZml4ZWRTY2FsZVZhbHVlIHwgbnVtYmVyOicxLjAtMCcpICsgJyBrZycgOiAn4oCUIGtnJyB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWlzRnVsbHlDb21wbGV0ZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3MgYnRuLWxnIHctMTAwIG10LTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImN1cnJlbnRTY2FsZVZhbHVlID09IG51bGxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNhYml0bGUoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1sb2NrIG1lLTJcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7eyAnS2Fkb29nbHU6OkZpeCcgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSDEsGxrIFRhcnTEsW0gLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZCBzbWFsbCBmdy1zZW1pYm9sZCB0ZXh0LXVwcGVyY2FzZSBtYi0xXCI+e3sgJ0thZG9vZ2x1OjpGaXJzdFdlaWdoaW5nJyB8IGFicExvY2FsaXphdGlvbiB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZmlyc3RXZWlnaGluZ1ZhbHVlICE9IG51bGw7IGVsc2Ugbm9GaXJzdFdlaWdoaW5nXCIgY2xhc3M9XCJjYXJkIGNhcmQtYm9keSBwLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmdy1ib2xkIGZzLTVcIj57eyBmaXJzdFdlaWdoaW5nVmFsdWUgfCBudW1iZXI6JzEuMC0wJyB9fSBrZzwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1tdXRlZCBzbWFsbFwiPnt7ICdLYWRvb2dsdTo6T3BlcmF0b3InIHwgYWJwTG9jYWxpemF0aW9uIH19OiB7eyBmaXJzdE9wZXJhdG9yQ29kZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9GaXJzdFdlaWdoaW5nPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkIGNhcmQtYm9keSBwLTIgdGV4dC1tdXRlZCB0ZXh0LWNlbnRlciBmc3QtaXRhbGljXCI+e3sgJ0thZG9vZ2x1OjpOb3RZZXREb25lJyB8IGFicExvY2FsaXphdGlvbiB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSBTb24gVGFydMSxbSAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkIHNtYWxsIGZ3LXNlbWlib2xkIHRleHQtdXBwZXJjYXNlIG1iLTFcIj57eyAnS2Fkb29nbHU6Okxhc3RXZWlnaGluZycgfCBhYnBMb2NhbGl6YXRpb24gfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImxhc3RXZWlnaGluZ1ZhbHVlICE9IG51bGw7IGVsc2Ugbm9MYXN0V2VpZ2hpbmdcIiBjbGFzcz1cImNhcmQgY2FyZC1ib2R5IHAtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZ3LWJvbGQgZnMtNVwiPnt7IGxhc3RXZWlnaGluZ1ZhbHVlIHwgbnVtYmVyOicxLjAtMCcgfX0ga2c8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtbXV0ZWQgc21hbGxcIj57eyAnS2Fkb29nbHU6Ok9wZXJhdG9yJyB8IGFicExvY2FsaXphdGlvbiB9fToge3sgbGFzdE9wZXJhdG9yQ29kZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9MYXN0V2VpZ2hpbmc+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgY2FyZC1ib2R5IHAtMiB0ZXh0LW11dGVkIHRleHQtY2VudGVyIGZzdC1pdGFsaWNcIj57eyAnS2Fkb29nbHU6Ok5vdFlldERvbmUnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIE5ldCBZw7xrIChzYWRlY2Ugc3RlcD0zJ3RlIGfDtnN0ZXIpIC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIndlaWdoaW5nU3RlcCA9PT0gMyAmJiBuZXRXZWlnaHQgIT0gbnVsbFwiIGNsYXNzPVwiY2FyZCBib3JkZXItc3VjY2VzcyBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgdGV4dC1jZW50ZXIgcHktM1wiIHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNSwxMzUsODQsMC4wOCk7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtc3VjY2VzcyBzbWFsbCBmdy1zZW1pYm9sZCB0ZXh0LXVwcGVyY2FzZSBtYi0xXCI+e3sgJ0thZG9vZ2x1OjpOZXRXZWlnaHQnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtc3VjY2VzcyBmdy1ib2xkXCIgc3R5bGU9XCJmb250LXNpemU6IDJyZW07XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7eyBuZXRXZWlnaHQgfCBudW1iZXI6JzEuMC0wJyB9fSBrZ1xyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPCEtLSBQaGFzZSAyIEFsdCBCdXRvbmxhciAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gbXQtMyBtYi0zXCI+XHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeVwiIChjbGljayk9XCJnZXJpR2l0UGhhc2UoKVwiPlxyXG4gICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtYXJyb3ctbGVmdCBtZS0xXCI+PC9pPiB7eyAnS2Fkb29nbHU6OkJhY2snIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YWJwLWJ1dHRvblxyXG4gICAgICAgICpuZ0lmPVwiIWlzRnVsbHlDb21wbGV0ZWRcIlxyXG4gICAgICAgIGljb25DbGFzcz1cImZhIGZhLXNhdmVcIlxyXG4gICAgICAgIGJ1dHRvblR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgIFtsb2FkaW5nXT1cImlzU2F2aW5nXCJcclxuICAgICAgICAoY2xpY2spPVwic2F2ZSgpXCI+XHJcbiAgICAgICAge3sgJ0thZG9vZ2x1OjpTYXZlJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICA8L2FicC1idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPCEtLSA9PT09PT09PT09IFNVTU1BUlk6IFRhbWFtbGFuZMSxIEfDtnLDvG7DvG3DvCA9PT09PT09PT09IC0tPlxyXG4gIDxkaXYgKm5nSWY9XCJpc0Z1bGx5Q29tcGxldGVkXCI+XHJcblxyXG4gICAgPCEtLSDDnHN0IELDtmzDvG0g4oCUIFRhcnTEsW0gU29udcOnIEthcnRsYXLEsSAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItNFwiPlxyXG4gICAgICA8IS0tIMSwbGsgVGFydMSxbSAtLT5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00IG1iLTMgbWItbWQtMFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJiZy13aGl0ZSBzaGFkb3ctc20gcm91bmRlZCBweS0zIHB4LTQgaC0xMDBcIiBzdHlsZT1cImJvcmRlci1sZWZ0OiA0cHggc29saWQgIzBkNmVmZDtcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXVwcGVyY2FzZSB0ZXh0LW11dGVkIHNtYWxsIGZ3LXNlbWlib2xkIG1iLTFcIj57eyAnS2Fkb29nbHU6OkZpcnN0V2VpZ2hpbmcnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnctYm9sZFwiIHN0eWxlPVwiZm9udC1zaXplOiAxLjc1cmVtOyBsZXR0ZXItc3BhY2luZzogMC4wMmVtO1wiPlxyXG4gICAgICAgICAgICB7eyBmaXJzdFdlaWdoaW5nVmFsdWUgIT0gbnVsbCA/IChmaXJzdFdlaWdoaW5nVmFsdWUgfCBudW1iZXI6JzEuMC0wJykgKyAnIGtnJyA6ICfigJQga2cnIH19XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkIHNtYWxsIG10LTFcIj57eyAnS2Fkb29nbHU6Ok9wZXJhdG9yJyB8IGFicExvY2FsaXphdGlvbiB9fToge3sgZmlyc3RPcGVyYXRvckNvZGUgfHwgJ+KAlCcgfX08L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDwhLS0gU29uIFRhcnTEsW0gLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNCBtYi0zIG1iLW1kLTBcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYmctd2hpdGUgc2hhZG93LXNtIHJvdW5kZWQgcHktMyBweC00IGgtMTAwXCIgc3R5bGU9XCJib3JkZXItbGVmdDogNHB4IHNvbGlkICM2ZjQyYzE7XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC11cHBlcmNhc2UgdGV4dC1tdXRlZCBzbWFsbCBmdy1zZW1pYm9sZCBtYi0xXCI+e3sgJ0thZG9vZ2x1OjpMYXN0V2VpZ2hpbmcnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnctYm9sZFwiIHN0eWxlPVwiZm9udC1zaXplOiAxLjc1cmVtOyBsZXR0ZXItc3BhY2luZzogMC4wMmVtO1wiPlxyXG4gICAgICAgICAgICB7eyBsYXN0V2VpZ2hpbmdWYWx1ZSAhPSBudWxsID8gKGxhc3RXZWlnaGluZ1ZhbHVlIHwgbnVtYmVyOicxLjAtMCcpICsgJyBrZycgOiAn4oCUIGtnJyB9fVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZCBzbWFsbCBtdC0xXCI+e3sgJ0thZG9vZ2x1OjpPcGVyYXRvcicgfCBhYnBMb2NhbGl6YXRpb24gfX06IHt7IGxhc3RPcGVyYXRvckNvZGUgfHwgJ+KAlCcgfX08L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDwhLS0gTmV0IFnDvGsgLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzaGFkb3ctc20gcm91bmRlZCBweS0zIHB4LTQgaC0xMDBcIiBzdHlsZT1cImJvcmRlci1sZWZ0OiA0cHggc29saWQgIzE5ODc1NDsgYmFja2dyb3VuZDogcmdiYSgyNSwxMzUsODQsMC4wNik7XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC11cHBlcmNhc2UgdGV4dC1tdXRlZCBzbWFsbCBmdy1zZW1pYm9sZCBtYi0xXCI+e3sgJ0thZG9vZ2x1OjpOZXRXZWlnaHQnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnctYm9sZFwiIHN0eWxlPVwiZm9udC1zaXplOiAxLjc1cmVtOyBsZXR0ZXItc3BhY2luZzogMC4wMmVtOyBjb2xvcjogIzE5ODc1NDtcIj5cclxuICAgICAgICAgICAge3sgbmV0V2VpZ2h0ICE9IG51bGwgPyAobmV0V2VpZ2h0IHwgbnVtYmVyOicxLjAtMCcpICsgJyBrZycgOiAn4oCUIGtnJyB9fVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPCEtLSBBbHQgQsO2bMO8bSDigJQgRGV0YXkgQmlsZ2lsZXJpIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImNhcmQgc2hhZG93LXNtXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlciBmdy1ib2xkXCI+XHJcbiAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1maWxlLXRleHQgbWUtMlwiPjwvaT57eyAnS2Fkb29nbHU6OlJlY29yZERldGFpbHMnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgPCEtLSBTb2wgU8O8dHVuIC0tPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItMiBweS0xXCIgc3R5bGU9XCJib3JkZXItYm90dG9tOiAxcHggc29saWQgI2YwZjBmMDtcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTUgdGV4dC1tdXRlZCBzbWFsbCBmdy1zZW1pYm9sZFwiPnt7ICdLYWRvb2dsdTo6R2F0ZScgfCBhYnBMb2NhbGl6YXRpb24gfX08L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTcgZnctbWVkaXVtXCI+e3sgZ2F0ZU5hbWUgfHwgJ+KAlCcgfX08L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItMiBweS0xXCIgc3R5bGU9XCJib3JkZXItYm90dG9tOiAxcHggc29saWQgI2YwZjBmMDtcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTUgdGV4dC1tdXRlZCBzbWFsbCBmdy1zZW1pYm9sZFwiPkFyYcOnIEhhcmVrZXQgVMO8csO8PC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC03IGZ3LW1lZGl1bVwiPnt7IGVudHJ5VHlwZU5hbWUgfHwgJ+KAlCcgfX08L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItMiBweS0xXCIgc3R5bGU9XCJib3JkZXItYm90dG9tOiAxcHggc29saWQgI2YwZjBmMDtcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTUgdGV4dC1tdXRlZCBzbWFsbCBmdy1zZW1pYm9sZFwiPnt7ICdLYWRvb2dsdTo6RW50cnlEYXRlJyB8IGFicExvY2FsaXphdGlvbiB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNyBmdy1tZWRpdW1cIj57eyBlbnRyeURhdGUgPyAoZW50cnlEYXRlIHwgZGF0ZTonZGQuTU0ueXl5eScpIDogJ+KAlCcgfX0ge3sgZW50cnlUaW1lIHx8ICcnIH19PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTIgcHktMVwiIHN0eWxlPVwiYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNmMGYwZjA7XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC01IHRleHQtbXV0ZWQgc21hbGwgZnctc2VtaWJvbGRcIj57eyAnS2Fkb29nbHU6OkV4aXREYXRlJyB8IGFicExvY2FsaXphdGlvbiB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNyBmdy1tZWRpdW1cIj57eyBleGl0RGF0ZSA/IChleGl0RGF0ZSB8IGRhdGU6J2RkLk1NLnl5eXknKSA6ICfigJQnIH19IHt7IGV4aXRUaW1lIHx8ICcnIH19PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTIgcHktMVwiIHN0eWxlPVwiYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNmMGYwZjA7XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC01IHRleHQtbXV0ZWQgc21hbGwgZnctc2VtaWJvbGRcIj57eyAnS2Fkb29nbHU6OlRydWNrUGxhdGUnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC03IGZ3LW1lZGl1bVwiPnt7IHRydWNrUGxhdGVObyB8fCAn4oCUJyB9fTwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtYi0yIHB5LTFcIiBzdHlsZT1cImJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZjBmMGYwO1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNSB0ZXh0LW11dGVkIHNtYWxsIGZ3LXNlbWlib2xkXCI+e3sgJ0thZG9vZ2x1OjpUcmFpbGVyUGxhdGUnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC03IGZ3LW1lZGl1bVwiPnt7IHRyYWlsZXJQbGF0ZU5vIHx8ICfigJQnIH19PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTIgcHktMVwiIHN0eWxlPVwiYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNmMGYwZjA7XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC01IHRleHQtbXV0ZWQgc21hbGwgZnctc2VtaWJvbGRcIj57eyAnS2Fkb29nbHU6OkRyaXZlck5hbWUnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC03IGZ3LW1lZGl1bVwiPnt7IGRyaXZlckZ1bGxOYW1lIHx8ICfigJQnIH19PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTIgcHktMVwiIHN0eWxlPVwiYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNmMGYwZjA7XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC01IHRleHQtbXV0ZWQgc21hbGwgZnctc2VtaWJvbGRcIj57eyAnS2Fkb29nbHU6OlRjSWRlbnRpdHlObycgfCBhYnBMb2NhbGl6YXRpb24gfX08L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTcgZnctbWVkaXVtXCI+e3sgdGNObyB8fCAn4oCUJyB9fTwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPCEtLSBTYcSfIFPDvHR1biAtLT5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTIgcHktMVwiIHN0eWxlPVwiYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNmMGYwZjA7XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC01IHRleHQtbXV0ZWQgc21hbGwgZnctc2VtaWJvbGRcIj57eyAnS2Fkb29nbHU6OkRyaXZlckNvZGUnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC03IGZ3LW1lZGl1bVwiPnt7IGRyaXZlck5hbWUgfHwgJ+KAlCcgfX08L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItMiBweS0xXCIgc3R5bGU9XCJib3JkZXItYm90dG9tOiAxcHggc29saWQgI2YwZjBmMDtcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTUgdGV4dC1tdXRlZCBzbWFsbCBmdy1zZW1pYm9sZFwiPnt7ICdLYWRvb2dsdTo6QnVzaW5lc3NQYXJ0bmVyJyB8IGFicExvY2FsaXphdGlvbiB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNyBmdy1tZWRpdW1cIj57eyBhY2NvdW50VGl0bGUgfHwgJ+KAlCcgfX08L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItMiBweS0xXCIgc3R5bGU9XCJib3JkZXItYm90dG9tOiAxcHggc29saWQgI2YwZjBmMDtcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTUgdGV4dC1tdXRlZCBzbWFsbCBmdy1zZW1pYm9sZFwiPnt7ICdLYWRvb2dsdTo6V2F5YmlsbE51bWJlcicgfCBhYnBMb2NhbGl6YXRpb24gfX08L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTcgZnctbWVkaXVtXCI+e3sgd2F5YmlsbE5vIHx8ICfigJQnIH19PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTIgcHktMVwiIHN0eWxlPVwiYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNmMGYwZjA7XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC01IHRleHQtbXV0ZWQgc21hbGwgZnctc2VtaWJvbGRcIj57eyAnS2Fkb29nbHU6OlNjYWxlQ29kZScgfCBhYnBMb2NhbGl6YXRpb24gfX08L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTcgZnctbWVkaXVtXCI+e3sgc2NhbGVOYW1lIHx8ICfigJQnIH19PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTIgcHktMVwiIHN0eWxlPVwiYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNmMGYwZjA7XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC01IHRleHQtbXV0ZWQgc21hbGwgZnctc2VtaWJvbGRcIj57eyAnS2Fkb29nbHU6Okl0ZW1Db2RlJyB8IGFicExvY2FsaXphdGlvbiB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNyBmdy1tZWRpdW1cIj57eyBzdG9ja05hbWUgfHwgJ+KAlCcgfX08L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItMiBweS0xXCIgc3R5bGU9XCJib3JkZXItYm90dG9tOiAxcHggc29saWQgI2YwZjBmMDtcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTUgdGV4dC1tdXRlZCBzbWFsbCBmdy1zZW1pYm9sZFwiPnt7ICdLYWRvb2dsdTo6Q29udGFpbmVyTm8nIHwgYWJwTG9jYWxpemF0aW9uIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC03IGZ3LW1lZGl1bVwiPnt7IGNvbnRhaW5lck5vIHx8ICfigJQnIH19PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTIgcHktMVwiIHN0eWxlPVwiYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNmMGYwZjA7XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC01IHRleHQtbXV0ZWQgc21hbGwgZnctc2VtaWJvbGRcIj57eyAnS2Fkb29nbHU6OkRlcGFydHVyZVRvQXJyaXZhbCcgfCBhYnBMb2NhbGl6YXRpb24gfX08L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTcgZnctbWVkaXVtXCI+e3sgKGRlcGFydHVyZUxvY2F0aW9uIHx8ICfigJQnKSArICcg4oaSICcgKyAoYXJyaXZhbExvY2F0aW9uIHx8ICfigJQnKSB9fTwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtYi0yIHB5LTFcIiBzdHlsZT1cImJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZjBmMGYwO1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNSB0ZXh0LW11dGVkIHNtYWxsIGZ3LXNlbWlib2xkXCI+e3sgJ0thZG9vZ2x1OjpEZXNjcmlwdGlvbicgfCBhYnBMb2NhbGl6YXRpb24gfX08L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTcgZnctbWVkaXVtXCI+e3sgZGVzY3JpcHRpb24gfHwgJ+KAlCcgfX08L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIEFsdCBCdXRvbmxhciAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gbXQtMyBtYi0zXCI+XHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeVwiIChjbGljayk9XCJnb0JhY2soKVwiPlxyXG4gICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtYXJyb3ctbGVmdCBtZS0xXCI+PC9pPiB7eyAnS2Fkb29nbHU6OkJhY2tUb0xpc3QnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgKm5nSWY9XCJlbnRyeVR5cGVNYWxHQyAmJiByZWNvcmQ/LnVfU3RhdHVzID09PSAnMidcIlxyXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi13YXJuaW5nXCJcclxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICBbZGlzYWJsZWRdPVwiaXNEb2luZ0dvb2RzTW92ZW1lbnRcIlxyXG4gICAgICAgIChjbGljayk9XCJkb0dvb2RzTW92ZW1lbnQoKVwiPlxyXG4gICAgICAgIDxpIFtjbGFzc109XCJpc0RvaW5nR29vZHNNb3ZlbWVudCA/ICdmYSBmYS1zcGlubmVyIGZhLXNwaW4gbWUtMScgOiAnZmEgZmEtZXhjaGFuZ2UgbWUtMSdcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XHJcbiAgICAgICAge3sgJ0thZG9vZ2x1OjpNYWxHY1lhcCcgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbjwvYWJwLXBhZ2U+XHJcbiJdfQ==
662
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGl0LWVudHJ5LXdlaWdoaW5nLWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2Fkb29nbHUvc3JjL2xpYi9oaXQtY29tcG9uZW50cy9oaXQtZW50cnktd2VpZ2hpbmcvaGl0LWVudHJ5LXdlaWdoaW5nLWZvcm0vaGl0LWVudHJ5LXdlaWdoaW5nLWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2Fkb29nbHUvc3JjL2xpYi9oaXQtY29tcG9uZW50cy9oaXQtZW50cnktd2VpZ2hpbmcvaGl0LWVudHJ5LXdlaWdoaW5nLWZvcm0vaGl0LWVudHJ5LXdlaWdoaW5nLWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFJN0QsT0FBTyxFQUE0QixRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7Ozs7QUF1QjNDLE1BQU0sT0FBTyw2QkFBNkI7SUFnR3hDLFlBQ1UsT0FBZ0MsRUFDaEMsb0JBQTZDLEVBQzdDLFlBQWlDLEVBQ2pDLE9BQXVCLEVBQ3ZCLEtBQXFCLEVBQ3JCLE1BQWMsRUFDZCxtQkFBd0MsRUFDeEMsbUJBQXdDO1FBUHhDLFlBQU8sR0FBUCxPQUFPLENBQXlCO1FBQ2hDLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBeUI7UUFDN0MsaUJBQVksR0FBWixZQUFZLENBQXFCO1FBQ2pDLFlBQU8sR0FBUCxPQUFPLENBQWdCO1FBQ3ZCLFVBQUssR0FBTCxLQUFLLENBQWdCO1FBQ3JCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBQ3hDLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUF2R2xE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QU8sS0FBSyxDQUFDO1FBQ2hDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ25DLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDeEYsSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQy9CLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzNELE9BQU8sR0FBRyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN2QixDQUFDOzswSEF4cUJVLDZCQUE2Qjs4R0FBN0IsNkJBQTZCLG1FQzVCMUMsa3ppQ0F3bkJBOzJGRDVsQmEsNkJBQTZCO2tCQUp6QyxTQUFTOytCQUNFLDZCQUE2QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IENvbmZpcm1hdGlvblNlcnZpY2UsIFRvYXN0ZXJTZXJ2aWNlIH0gZnJvbSAnQGFicC9uZy50aGVtZS5zaGFyZWQnO1xyXG5pbXBvcnQgeyBMb2NhbGl6YXRpb25TZXJ2aWNlIH0gZnJvbSAnQGFicC9uZy5jb3JlJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uLCBmb3JrSm9pbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IFNjYWxlU2lnbmFsUlNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9zY2FsZS1zaWduYWxyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBIaXRFbnRyeVdlaWdoaW5nU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2hpdC1wcm94eS9oaXQtZW50cnktd2VpZ2hpbmcvaGl0LWVudHJ5LXdlaWdoaW5nLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBIaXRTdG9ja1RyYW5zZmVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2hpdC1wcm94eS9oaXQtc3RvY2stdHJhbnNmZXIvaGl0LXN0b2NrLXRyYW5zZmVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTdG9ja1RyYW5zZmVyIH0gZnJvbSAnLi4vLi4vLi4vaGl0LXByb3h5L2hpdC1zdG9jay10cmFuc2Zlci9tb2RlbHMnO1xyXG5pbXBvcnQge1xyXG4gIEVudHJ5V2VpZ2hpbmcsXHJcbiAgRW50cnlXZWlnaGluZ0FjY291bnQsXHJcbiAgRW50cnlXZWlnaGluZ0RvY3VtZW50LFxyXG4gIEVudHJ5V2VpZ2hpbmdEcml2ZXIsXHJcbiAgRW50cnlXZWlnaGluZ0dhdGUsXHJcbiAgRW50cnlXZWlnaGluZ1NjYWxlLFxyXG4gIEVudHJ5V2VpZ2hpbmdTdG9ja0l0ZW0sXHJcbiAgRW50cnlXZWlnaGluZ1RyYWlsZXJQbGF0ZSxcclxuICBFbnRyeVdlaWdoaW5nVHJ1Y2tQbGF0ZSxcclxuICBFbnRyeVdlaWdoaW5nVmVoaWNsZVR5cGUsXHJcbiAgU2F2ZUVudHJ5V2VpZ2hpbmdEdG8sXHJcbn0gZnJvbSAnLi4vLi4vLi4vaGl0LXByb3h5L2hpdC1lbnRyeS13ZWlnaGluZy9tb2RlbHMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItaGl0LWVudHJ5LXdlaWdoaW5nLWZvcm0nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9oaXQtZW50cnktd2VpZ2hpbmctZm9ybS5jb21wb25lbnQuaHRtbCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBIaXRFbnRyeVdlaWdoaW5nRm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICByZWNvcmQ6IEVudHJ5V2VpZ2hpbmcgfCBudWxsID0gbnVsbDtcclxuICBpc1VwZGF0ZU1vZGUgPSBmYWxzZTtcclxuXHJcbiAgLy8gV2l6YXJkIHBoYXNlOiAxID0gQXJhw6cgJiBCZWxnZSwgMiA9IFRhcnTEsW0gUGFuZWxpXHJcbiAgZm9ybVBoYXNlOiAxIHwgMiA9IDE7XHJcbiAgLy8gV2VpZ2hpbmcgbW9kZSBmcm9tIHF1ZXJ5IHBhcmFtOiAnZmlyc3QnIHwgJ2xhc3QnIHwgbnVsbCAobnVsbCA9IG5vcm1hbCBuZXcvZWRpdClcclxuICB3ZWlnaGluZ01vZGU6ICdmaXJzdCcgfCAnbGFzdCcgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgLy8gTG9va3VwIGxvYWRlciBmdW5jdGlvbnMgKGNhbGxlZCBsYXppbHkgd2hlbiBtb2RhbCBvcGVucylcclxuICBsb2FkRG9jdW1lbnRzID0gKCkgPT4gdGhpcy5zZXJ2aWNlLmdldERvY3VtZW50cygpO1xyXG4gIGxvYWRTY2FsZXMgPSAoKSA9PiB0aGlzLnNlcnZpY2UuZ2V0U2NhbGVzKCk7XHJcbiAgbG9hZFRydWNrUGxhdGVzID0gKCkgPT4gdGhpcy5zZXJ2aWNlLmdldFRydWNrUGxhdGVzKCk7XHJcbiAgbG9hZFRyYWlsZXJQbGF0ZXMgPSAoKSA9PiB0aGlzLnNlcnZpY2UuZ2V0VHJhaWxlclBsYXRlcygpO1xyXG4gIGxvYWREcml2ZXJzID0gKCkgPT4gdGhpcy5zZXJ2aWNlLmdldERyaXZlcnMoKTtcclxuICBsb2FkQWNjb3VudHMgPSAoKSA9PiB0aGlzLnNlcnZpY2UuZ2V0QWNjb3VudHMoKTtcclxuICBsb2FkU3RvY2tJdGVtcyA9ICgpID0+IHRoaXMuc2VydmljZS5nZXRTdG9ja0l0ZW1zKCk7XHJcbiAgd2F5YmlsbERlZmF1bHREYXRlRnJvbTogRGF0ZSA9ICgoKSA9PiB7IGNvbnN0IGQgPSBuZXcgRGF0ZSgpOyBkLnNldERhdGUoZC5nZXREYXRlKCkgLSAzKTsgcmV0dXJuIGQ7IH0pKCk7XHJcbiAgd2F5YmlsbERlZmF1bHREYXRlVG86IERhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gIGxvYWRXYXliaWxscyA9IChwYXJhbXM/OiBhbnkpID0+IHRoaXMuc3RvY2tUcmFuc2ZlclNlcnZpY2UuZ2V0TGlzdChwYXJhbXMpO1xyXG4gIGxvYWRHYXRlcyA9ICgpID0+IHRoaXMuc2VydmljZS5nZXRHYXRlcygpO1xyXG4gIGxvYWRWZWhpY2xlVHlwZXMgPSAoKSA9PiB0aGlzLnNlcnZpY2UuZ2V0VmVoaWNsZVR5cGVzKCk7XHJcblxyXG4gIC8vIENvbHVtbiBjb25maWdzXHJcbiAgZG9jdW1lbnRDb2x1bW5zOiBhbnlbXSA9IFtdO1xyXG4gIHNjYWxlQ29sdW1uczogYW55W10gPSBbXTtcclxuICB0cnVja1BsYXRlQ29sdW1uczogYW55W10gPSBbXTtcclxuICB0cmFpbGVyUGxhdGVDb2x1bW5zOiBhbnlbXSA9IFtdO1xyXG4gIGRyaXZlckNvbHVtbnM6IGFueVtdID0gW107XHJcbiAgYWNjb3VudENvbHVtbnM6IGFueVtdID0gW107XHJcbiAgc3RvY2tJdGVtQ29sdW1uczogYW55W10gPSBbXTtcclxuICB3YXliaWxsQ29sdW1uczogYW55W10gPSBbXTtcclxuICBnYXRlQ29sdW1uczogYW55W10gPSBbXTtcclxuICB2ZWhpY2xlVHlwZUNvbHVtbnM6IGFueVtdID0gW107XHJcblxyXG4gIC8vIEZvcm0gZmllbGRzXHJcbiAgZG9jdW1lbnRDb2RlID0gJyc7XHJcbiAgZG9jdW1lbnROYW1lID0gJyc7XHJcbiAgc2NhbGVDb2RlID0gJzEnO1xyXG4gIHNjYWxlTmFtZSA9ICdLYW50YXIgMSc7XHJcbiAgYWNjb3VudENvZGUgPSAnJztcclxuICBhY2NvdW50VGl0bGUgPSAnJztcclxuICB0cnVja1BsYXRlQ29kZSA9ICcnO1xyXG4gIHRydWNrUGxhdGVObyA9ICcnO1xyXG4gIHRyYWlsZXJQbGF0ZUNvZGUgPSAnJztcclxuICB0cmFpbGVyUGxhdGVObyA9ICcnO1xyXG4gIGRyaXZlckNvZGUgPSAnJztcclxuICBkcml2ZXJOYW1lID0gJyc7XHJcbiAgc3RvY2tDb2RlID0gJyc7XHJcbiAgc3RvY2tOYW1lID0gJyc7XHJcbiAgY29udGFpbmVyTm8gPSAnJztcclxuICBkZXNjcmlwdGlvbiA9ICcnO1xyXG4gIHdheWJpbGxObyA9ICcnO1xyXG4gIGRlcGFydHVyZUxvY2F0aW9uID0gJyc7XHJcbiAgYXJyaXZhbExvY2F0aW9uID0gJ0ZhYnJpa2EnO1xyXG5cclxuICAvLyBaWlpfVEVTVDIgeWVuaSBhbGFubGFyXHJcbiAgZ2F0ZUNvZGUgPSAnJztcclxuICBnYXRlTmFtZSA9ICcnO1xyXG4gIGVudHJ5RGF0ZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcbiAgZW50cnlUaW1lID0gJyc7XHJcbiAgZXhpdERhdGU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gIGV4aXRUaW1lID0gJyc7XHJcbiAgZW50cnlUeXBlQ29kZSA9ICcnO1xyXG4gIGVudHJ5VHlwZU5hbWUgPSAnJztcclxuICBkcml2ZXJGdWxsTmFtZSA9ICcnO1xyXG4gIHRjTm8gPSAnJztcclxuICBpc1RjQ2l0aXplbiA9IHRydWU7XHJcblxyXG4gIC8vIFRhcnTEsW0gYmlsZ2lsZXJpIChyZWFkb25seSlcclxuICBmaXJzdE9wZXJhdG9yQ29kZSA9ICcnO1xyXG4gIGZpcnN0V2VpZ2hpbmdWYWx1ZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcbiAgbGFzdE9wZXJhdG9yQ29kZSA9ICcnO1xyXG4gIGxhc3RXZWlnaGluZ1ZhbHVlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuICBjdXJyZW50U2NhbGVWYWx1ZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcbiAgZml4ZWRTY2FsZVZhbHVlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgaXNTYXZpbmcgPSBmYWxzZTtcclxuICBpc1dlaWdoaW5nID0gZmFsc2U7XHJcbiAgZW50cnlUeXBlVHJ0bVlwaWxjayA9IGZhbHNlO1xyXG4gIGVudHJ5VHlwZU1hbEdDID0gZmFsc2U7XHJcbiAgaXNEb2luZ0dvb2RzTW92ZW1lbnQgPSBmYWxzZTtcclxuXHJcbiAgaXNTY2FsZUNvbm5lY3RpbmcgPSBmYWxzZTtcclxuICBpc1NjYWxlUmVjb25uZWN0aW5nID0gZmFsc2U7XHJcbiAgc2NhbGVDb25uZWN0aW9uRmFpbGVkID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBzY2FsZVN1YjogU3Vic2NyaXB0aW9uIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBzY2FsZUFwaVVybCA9ICdodHRwOi8vMTkyLjE2OC4xMC45NTo1MTAwJztcclxuICBwcml2YXRlIHJlYWRvbmx5IHNjYWxlSWQgPSAnS0FOVEFSLTAxJztcclxuXHJcbiAgLyoqIFNBUCByZXNwb25zZSBjYW1lbENhc2UvUGFzY2FsQ2FzZSBmYXJrxLFuxLEgaGFuZGxlIGVkZXIgKi9cclxuICBwcml2YXRlIGdldERvY0VudHJ5KHJlYzogRW50cnlXZWlnaGluZyB8IG51bGwpOiBudW1iZXIgfCB1bmRlZmluZWQge1xyXG4gICAgaWYgKCFyZWMpIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICByZXR1cm4gcmVjLmRvY0VudHJ5ID8/IChyZWMgYXMgYW55KS5kb2NFbnRyeTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBzZXJ2aWNlOiBIaXRFbnRyeVdlaWdoaW5nU2VydmljZSxcclxuICAgIHByaXZhdGUgc3RvY2tUcmFuc2ZlclNlcnZpY2U6IEhpdFN0b2NrVHJhbnNmZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb25maXJtYXRpb246IENvbmZpcm1hdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHRvYXN0ZXI6IFRvYXN0ZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHJpdmF0ZSBsb2NhbGl6YXRpb25TZXJ2aWNlOiBMb2NhbGl6YXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzY2FsZVNpZ25hbFJTZXJ2aWNlOiBTY2FsZVNpZ25hbFJTZXJ2aWNlXHJcbiAgKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IGwgPSAoa2V5OiBzdHJpbmcpID0+IHRoaXMubG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KCdLYWRvb2dsdTo6JyArIGtleSk7XHJcbiAgICB0aGlzLmRvY3VtZW50Q29sdW1ucyA9IFtcclxuICAgICAgeyBkYXRhRmllbGQ6ICdjb2RlJywgY2FwdGlvbjogbCgnRG9jdW1lbnRObycpLCB3aWR0aDogMTIwIH0sXHJcbiAgICAgIHsgZGF0YUZpZWxkOiAnbmFtZScsIGNhcHRpb246IGwoJ0NhcmROYW1lJykgfSxcclxuICAgIF07XHJcbiAgICB0aGlzLnNjYWxlQ29sdW1ucyA9IFtcclxuICAgICAgeyBkYXRhRmllbGQ6ICdjb2RlJywgY2FwdGlvbjogbCgnQ29kZScpLCB3aWR0aDogODAgfSxcclxuICAgICAgeyBkYXRhRmllbGQ6ICduYW1lJywgY2FwdGlvbjogbCgnU2NhbGVOYW1lJykgfSxcclxuICAgIF07XHJcbiAgICB0aGlzLnRydWNrUGxhdGVDb2x1bW5zID0gW1xyXG4gICAgICB7IGRhdGFGaWVsZDogJ2NvZGUnLCBjYXB0aW9uOiBsKCdDb2RlJyksIHdpZHRoOiAxMDAgfSxcclxuICAgICAgeyBkYXRhRmllbGQ6ICdwbGF0ZU5vJywgY2FwdGlvbjogbCgnUGxhdGUnKSB9LFxyXG4gICAgXTtcclxuICAgIHRoaXMudHJhaWxlclBsYXRlQ29sdW1ucyA9IFtcclxuICAgICAgeyBkYXRhRmllbGQ6ICdjb2RlJywgY2FwdGlvbjogbCgnQ29kZScpLCB3aWR0aDogMTAwIH0sXHJcbiAgICAgIHsgZGF0YUZpZWxkOiAncGxhdGVObycsIGNhcHRpb246IGwoJ1BsYXRlJykgfSxcclxuICAgIF07XHJcbiAgICB0aGlzLmRyaXZlckNvbHVtbnMgPSBbXHJcbiAgICAgIHsgZGF0YUZpZWxkOiAnY29kZScsIGNhcHRpb246IGwoJ0NvZGUnKSwgd2lkdGg6IDEwMCB9LFxyXG4gICAgICB7IGRhdGFGaWVsZDogJ25hbWUnLCBjYXB0aW9uOiBsKCdGdWxsTmFtZScpIH0sXHJcbiAgICBdO1xyXG4gICAgdGhpcy5hY2NvdW50Q29sdW1ucyA9IFtcclxuICAgICAgeyBkYXRhRmllbGQ6ICdjb2RlJywgY2FwdGlvbjogbCgnQ29kZScpLCB3aWR0aDogMTAwIH0sXHJcbiAgICAgIHsgZGF0YUZpZWxkOiAndGl0bGUnLCBjYXB0aW9uOiBsKCdBY2NvdW50VGl0bGUnKSB9LFxyXG4gICAgXTtcclxuICAgIHRoaXMuc3RvY2tJdGVtQ29sdW1ucyA9IFtcclxuICAgICAgeyBkYXRhRmllbGQ6ICdjb2RlJywgY2FwdGlvbjogbCgnQ29kZScpLCB3aWR0aDogMTAwIH0sXHJcbiAgICAgIHsgZGF0YUZpZWxkOiAnbmFtZScsIGNhcHRpb246IGwoJ1N0b2NrTmFtZScpIH0sXHJcbiAgICBdO1xyXG4gICAgdGhpcy53YXliaWxsQ29sdW1ucyA9IFtcclxuICAgICAgeyBkYXRhRmllbGQ6ICdkb2NOdW0nLCBjYXB0aW9uOiBsKCdEb2N1bWVudE5vJyksIHdpZHRoOiAxMDAgfSxcclxuICAgICAgeyBkYXRhRmllbGQ6ICdVX0VGQVROTycsIGNhcHRpb246IGwoJ1dheWJpbGxObycpLCB3aWR0aDogMTIwIH0sXHJcbiAgICAgIHsgZGF0YUZpZWxkOiAnY2FyZE5hbWUnLCBjYXB0aW9uOiBsKCdDYXJkTmFtZScpIH0sXHJcbiAgICAgIHsgZGF0YUZpZWxkOiAnZnJvbVdhcmVob3VzZScsIGNhcHRpb246IGwoJ0V4aXRXYXJlaG91c2UnKSwgd2lkdGg6IDE0MCB9LFxyXG4gICAgICB7IGRhdGFGaWVsZDogJ1VfQXJhY1BsYWthc2knLCBjYXB0aW9uOiBsKCdWZWhpY2xlUGxhdGUnKSwgd2lkdGg6IDExMCB9LFxyXG4gICAgICB7IGRhdGFGaWVsZDogJ1VfU29mb3JBZCcsIGNhcHRpb246IGwoJ0RyaXZlck5hbWUnKSB9LFxyXG4gICAgICB7IGRhdGFGaWVsZDogJ1VfU29mb3JTb3lhZGknLCBjYXB0aW9uOiBsKCdEcml2ZXJTdXJuYW1lJykgfSxcclxuICAgICAgeyBkYXRhRmllbGQ6ICdjb21tZW50cycsIGNhcHRpb246IGwoJ0Rlc2NyaXB0aW9uJykgfSxcclxuICAgIF07XHJcbiAgICB0aGlzLmdhdGVDb2x1bW5zID0gW1xyXG4gICAgICB7IGRhdGFGaWVsZDogJ2NvZGUnLCBjYXB0aW9uOiBsKCdDb2RlJyksIHdpZHRoOiA4MCB9LFxyXG4gICAgICB7IGRhdGFGaWVsZDogJ25hbWUnLCBjYXB0aW9uOiBsKCdHYXRlTmFtZScpIH0sXHJcbiAgICBdO1xyXG4gICAgdGhpcy52ZWhpY2xlVHlwZUNvbHVtbnMgPSBbXHJcbiAgICAgIHsgZGF0YUZpZWxkOiAnY29kZScsIGNhcHRpb246IGwoJ0NvZGUnKSwgd2lkdGg6IDgwIH0sXHJcbiAgICAgIHsgZGF0YUZpZWxkOiAnbmFtZScsIGNhcHRpb246IGwoJ0VudHJ5VHlwZU5hbWUnKSB9LFxyXG4gICAgXTtcclxuXHJcbiAgICAvLyBSZWFkIHdlaWdoaW5nIG1vZGUgZnJvbSBxdWVyeSBwYXJhbXNcclxuICAgIGNvbnN0IG1vZGUgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1NYXAuZ2V0KCdtb2RlJyk7XHJcbiAgICBpZiAobW9kZSA9PT0gJ2ZpcnN0JyB8fCBtb2RlID09PSAnbGFzdCcpIHtcclxuICAgICAgdGhpcy53ZWlnaGluZ01vZGUgPSBtb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIMOWbmNlIHJvdXRlciBzdGF0ZSdkZW4gc2F0xLFyIHZlcmlzaW5pIG9rdSAobGlzdGUgZWtyYW7EsW5kYW4gYWt0YXLEsWxhbilcclxuICAgIGNvbnN0IHN0YXRlRGF0YSA9IGhpc3Rvcnkuc3RhdGU/LnJvd0RhdGE7XHJcbiAgICBjb25zdCBpZCA9IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1NYXAuZ2V0KCdpZCcpO1xyXG5cclxuICAgIGlmIChzdGF0ZURhdGEpIHtcclxuICAgICAgLy8gU3RhdGUnZGVuIGdlbGVuIHZlcml5aSBrdWxsYW4gKEFQSSDDp2HEn3LEsXPEsSBvbG1hZGFuKVxyXG4gICAgICB0aGlzLmlzVXBkYXRlTW9kZSA9IHRydWU7XHJcbiAgICAgIHRoaXMucmVjb3JkID0gc3RhdGVEYXRhO1xyXG4gICAgICB0aGlzLmluaXRGb3JtKCk7XHJcbiAgICAgIC8vIFNvbiB0YXJ0xLFtIG1vZHVuZGF5c2EgZGlyZWt0IHRhcnTEsW0gcGFuZWxpbmkgYcOnXHJcbiAgICAgIGlmICh0aGlzLndlaWdoaW5nTW9kZSA9PT0gJ2xhc3QnKSB7XHJcbiAgICAgICAgdGhpcy5mb3JtUGhhc2UgPSAyO1xyXG4gICAgICAgIHRoaXMuX3N0YXJ0U2NhbGUoKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChpZCkge1xyXG4gICAgICAvLyBGYWxsYmFjazogc3RhdGUgeW9rc2EgQVBJJ2RlbiB5w7xrbGVcclxuICAgICAgdGhpcy5pc1VwZGF0ZU1vZGUgPSB0cnVlO1xyXG4gICAgICB0aGlzLnNlcnZpY2UuZ2V0KCtpZCkuc3Vic2NyaWJlKHJlY29yZCA9PiB7XHJcbiAgICAgICAgdGhpcy5yZWNvcmQgPSByZWNvcmQ7XHJcbiAgICAgICAgdGhpcy5pbml0Rm9ybSgpO1xyXG4gICAgICAgIC8vIFNvbiB0YXJ0xLFtIG1vZHVuZGF5c2EgZGlyZWt0IHRhcnTEsW0gcGFuZWxpbmkgYcOnXHJcbiAgICAgICAgaWYgKHRoaXMud2VpZ2hpbmdNb2RlID09PSAnbGFzdCcpIHtcclxuICAgICAgICAgIHRoaXMuZm9ybVBoYXNlID0gMjtcclxuICAgICAgICAgIHRoaXMuX3N0YXJ0U2NhbGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IHdlaWdoaW5nU3RlcCgpOiBudW1iZXIge1xyXG4gICAgY29uc3Qgc3RhdHVzID0gKHRoaXMucmVjb3JkIGFzIGFueSk/LnVfU3RhdHVzO1xyXG4gICAgaWYgKHRoaXMubGFzdFdlaWdoaW5nVmFsdWUgIT09IG51bGwgfHwgc3RhdHVzID09PSAnMicgfHwgc3RhdHVzID09PSAnMycgfHwgc3RhdHVzID09PSAnNCcpIHJldHVybiAzO1xyXG4gICAgaWYgKHRoaXMuZmlyc3RXZWlnaGluZ1ZhbHVlICE9PSBudWxsIHx8IHN0YXR1cyA9PT0gJzEnKSByZXR1cm4gMjtcclxuICAgIHJldHVybiAxO1xyXG4gIH1cclxuXHJcbiAgLyoqIMSwbGsgdGFydMSxbSB5YXDEsWxkxLF5c2EgKHN0ZXAgPj0gMikgZGV0YXkgYWxhbmxhcsSxbsSxIGtpbGl0bGUgKi9cclxuICBnZXQgaXNGb3JtTG9ja2VkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMud2VpZ2hpbmdTdGVwID49IDI7XHJcbiAgfVxyXG5cclxuICAvKiogSGVyIGlraSB0YXJ0xLFtIGRhIHRhbWFtbGFuZMSxeXNhIChzdGVwID09PSAzKSB0w7xtIGVrcmFuxLEga2lsaXRsZSAqL1xyXG4gIGdldCBpc0Z1bGx5Q29tcGxldGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMud2VpZ2hpbmdTdGVwID09PSAzO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGVudHJ5RGF0ZVRpbWUoKTogRGF0ZSB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMuYnVpbGREYXRlVGltZSh0aGlzLmVudHJ5RGF0ZSwgdGhpcy5lbnRyeVRpbWUpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGV4aXREYXRlVGltZSgpOiBEYXRlIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy5idWlsZERhdGVUaW1lKHRoaXMuZXhpdERhdGUsIHRoaXMuZXhpdFRpbWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqIFRhcmloIHN0cmluZyArIHNhecSxc2FsIHNhYXQgKMO2ci4gODMwID0gMDg6MzApIGRlxJ9lcmluZGVuIERhdGUgb2x1xZ90dXJ1ciAqL1xyXG4gIHByaXZhdGUgYnVpbGREYXRlVGltZShkYXRlU3RyOiBzdHJpbmcgfCBudWxsLCB0aW1lVmFsOiBzdHJpbmcgfCBudW1iZXIgfCBudWxsKTogRGF0ZSB8IG51bGwge1xyXG4gICAgaWYgKCFkYXRlU3RyKSByZXR1cm4gbnVsbDtcclxuICAgIGNvbnN0IGQgPSBuZXcgRGF0ZShkYXRlU3RyKTtcclxuICAgIGlmIChpc05hTihkLmdldFRpbWUoKSkpIHJldHVybiBudWxsO1xyXG4gICAgY29uc3QgdCA9IE51bWJlcih0aW1lVmFsKTtcclxuICAgIGlmICghaXNOYU4odCkpIHtcclxuICAgICAgZC5zZXRIb3VycyhNYXRoLmZsb29yKHQgLyAxMDApLCB0ICUgMTAwLCAwLCAwKTtcclxuICAgIH1cclxuICAgIHJldHVybiBkO1xyXG4gIH1cclxuXHJcbiAgZ2V0IG5ldFdlaWdodCgpOiBudW1iZXIgfCBudWxsIHtcclxuICAgIGlmICh0aGlzLmZpcnN0V2VpZ2hpbmdWYWx1ZSAhPT0gbnVsbCAmJiB0aGlzLmxhc3RXZWlnaGluZ1ZhbHVlICE9PSBudWxsKSB7XHJcbiAgICAgIHJldHVybiBNYXRoLmFicyh0aGlzLmZpcnN0V2VpZ2hpbmdWYWx1ZSAtIHRoaXMubGFzdFdlaWdoaW5nVmFsdWUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBnZXQgd2VpZ2hpbmdNb2RlTGFiZWwoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLndlaWdoaW5nTW9kZSA9PT0gJ2ZpcnN0J1xyXG4gICAgICA/IHRoaXMubG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KCdLYWRvb2dsdTo6Rmlyc3RXZWlnaGluZycpXHJcbiAgICAgIDogdGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoJ0thZG9vZ2x1OjpMYXN0V2VpZ2hpbmcnKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdEZvcm0oKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5yZWNvcmQpIHtcclxuICAgICAgY29uc3QgciA9IHRoaXMucmVjb3JkIGFzIGFueTsgLy8gU0FQIGNhbWVsQ2FzZSBmYWxsYmFja1xyXG4gICAgICB0aGlzLnNjYWxlQ29kZSA9IHIudV9TY2FsZUNvZGUgPz8gci51X1NjYWxlQ29kZSA/PyAnJztcclxuICAgICAgdGhpcy5hY2NvdW50Q29kZSA9IHIudV9DYXJkQ29kZSA/PyByLnVfQ2FyZENvZGUgPz8gJyc7XHJcbiAgICAgIHRoaXMudHJ1Y2tQbGF0ZUNvZGUgPSByLnVfUGxhdGUgPz8gci51X1BsYXRlID8/ICcnO1xyXG4gICAgICB0aGlzLnRydWNrUGxhdGVObyA9IHIudV9QbGF0ZSA/PyByLnVfUGxhdGUgPz8gJyc7XHJcbiAgICAgIHRoaXMudHJhaWxlclBsYXRlQ29kZSA9IHIudV9Eb3JzZVBsYXRlID8/ICcnO1xyXG4gICAgICB0aGlzLnRyYWlsZXJQbGF0ZU5vID0gci51X0RvcnNlUGxhdGUgPz8gJyc7XHJcbiAgICAgIHRoaXMuZHJpdmVyQ29kZSA9IHIudV9Ecml2ZXJDb2RlID8/IHIudV9Ecml2ZXJDb2RlID8/ICcnO1xyXG4gICAgICB0aGlzLnN0b2NrQ29kZSA9IHIudV9JdGVtQ29kZSA/PyByLnVfSXRlbUNvZGUgPz8gJyc7XHJcbiAgICAgIHRoaXMuY29udGFpbmVyTm8gPSByLnVfQ29udGFpbmVyTm8gPz8gci51X0NvbnRhaW5lck5vID8/ICcnO1xyXG4gICAgICB0aGlzLndheWJpbGxObyA9IHIudV9EZXNwYXRjaEFkdmljZU5vID8/IHIudV9EZXNwYXRjaEFkdmljZU5vID8/ICcnO1xyXG4gICAgICB0aGlzLmRlcGFydHVyZUxvY2F0aW9uID0gci51X1NoaXBQbGFjZSA/PyByLnVfU2hpcFBsYWNlID8/ICcnO1xyXG4gICAgICB0aGlzLmFycml2YWxMb2NhdGlvbiA9IHIudV9TaGlwVG8gPz8gci51X1NoaXBUbyA/PyAnRmFicmlrYSc7XHJcbiAgICAgIHRoaXMuZmlyc3RPcGVyYXRvckNvZGUgPSByLnVfRmlyc3RPcHQgPz8gci51X0ZpcnN0T3B0ID8/ICcnO1xyXG4gICAgICB0aGlzLmxhc3RPcGVyYXRvckNvZGUgPSByLnVfTGFzdE9wdCA/PyByLnVfTGFzdE9wdCA/PyAnJztcclxuICAgICAgY29uc3QgcmF3Rmlyc3QgPSByLnVfRmlyc3RXZWlnaGluZyA/PyByLnVfRmlyc3RXZWlnaGluZyA/PyBudWxsO1xyXG4gICAgICB0aGlzLmZpcnN0V2VpZ2hpbmdWYWx1ZSA9IChyYXdGaXJzdCAhPSBudWxsICYmIHJhd0ZpcnN0ICE9PSAwKSA/IHJhd0ZpcnN0IDogbnVsbDtcclxuICAgICAgY29uc3QgcmF3TGFzdCA9IHIudV9MYXN0V2VpZ2hpbmcgPz8gci51X0xhc3RXZWlnaGluZyA/PyBudWxsO1xyXG4gICAgICB0aGlzLmxhc3RXZWlnaGluZ1ZhbHVlID0gKHJhd0xhc3QgIT0gbnVsbCAmJiByYXdMYXN0ICE9PSAwKSA/IHJhd0xhc3QgOiBudWxsO1xyXG4gICAgICB0aGlzLmRlc2NyaXB0aW9uID0gci51X0Rlc2NyaXB0aW9uID8/IHIudV9EZXNjcmlwdGlvbiA/PyAnJztcclxuXHJcbiAgICAgIC8vIFpaWl9URVNUMiB5ZW5pIGFsYW5sYXJcclxuICAgICAgdGhpcy5nYXRlQ29kZSA9IHIudV9HYXRlQ29kZSA/PyByLnVfR2F0ZUNvZGUgPz8gJyc7XHJcbiAgICAgIHRoaXMuZW50cnlEYXRlID0gci51X0VudHJ5RGF0ZSA/PyByLnVfRW50cnlEYXRlID8/IG51bGw7XHJcbiAgICAgIHRoaXMuZW50cnlUaW1lID0gci51X0VudHJ5VGltZSA/PyByLnVfRW50cnlUaW1lID8/ICcnO1xyXG4gICAgICB0aGlzLmV4aXREYXRlID0gci51X0V4aXREYXRlID8/IHIudV9FeGl0RGF0ZSA/PyBudWxsO1xyXG4gICAgICB0aGlzLmV4aXRUaW1lID0gci51X0V4aXRUaW1lID8/IHIudV9FeGl0VGltZSA/PyAnJztcclxuICAgICAgdGhpcy5lbnRyeVR5cGVDb2RlID0gci51X0VudHJ5VHlwZSA/PyByLnVfRW50cnlUeXBlID8/ICcnO1xyXG4gICAgICB0aGlzLmRyaXZlckZ1bGxOYW1lID0gci51X0RyaXZlciA/PyByLnVfRHJpdmVyID8/ICcnO1xyXG4gICAgICB0aGlzLnRjTm8gPSByLnVfVGNObyA/PyByLnVfVGNObyA/PyAnJztcclxuICAgICAgdGhpcy5pc1RjQ2l0aXplbiA9IHRydWU7XHJcblxyXG4gICAgICAvLyBMb29rdXAgYWxhbmxhcsSxbsSxbiBnw7Zyw7xuZW4gaXNpbWxlcmluaSDDp8O2esO8bWxlXHJcbiAgICAgIHRoaXMucmVzb2x2ZURpc3BsYXlOYW1lcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqIEthecSxdHRha2kga29kIGFsYW5sYXLEsW5hIGthcsWfxLFsxLFrIGdlbGVuIGfDtnLDvG5lbiBpc2ltbGVyaSBsb29rdXAgc2VydmlzbGVyaW5kZW4gw6fDtnrDvG1sZXIgKi9cclxuICBwcml2YXRlIHJlc29sdmVEaXNwbGF5TmFtZXMoKTogdm9pZCB7XHJcbiAgICBjb25zdCBsb29rdXBzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XHJcblxyXG4gICAgaWYgKHRoaXMuZ2F0ZUNvZGUpIHtcclxuICAgICAgbG9va3Vwc1snZ2F0ZXMnXSA9IHRoaXMubG9hZEdhdGVzKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5lbnRyeVR5cGVDb2RlKSB7XHJcbiAgICAgIGxvb2t1cHNbJ3ZlaGljbGVUeXBlcyddID0gdGhpcy5sb2FkVmVoaWNsZVR5cGVzKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5zY2FsZUNvZGUpIHtcclxuICAgICAgbG9va3Vwc1snc2NhbGVzJ10gPSB0aGlzLmxvYWRTY2FsZXMoKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmFjY291bnRDb2RlKSB7XHJcbiAgICAgIGxvb2t1cHNbJ2FjY291bnRzJ10gPSB0aGlzLmxvYWRBY2NvdW50cygpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZHJpdmVyQ29kZSkge1xyXG4gICAgICBsb29rdXBzWydkcml2ZXJzJ10gPSB0aGlzLmxvYWREcml2ZXJzKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5zdG9ja0NvZGUpIHtcclxuICAgICAgbG9va3Vwc1snc3RvY2tJdGVtcyddID0gdGhpcy5sb2FkU3RvY2tJdGVtcygpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhsb29rdXBzKTtcclxuICAgIGlmIChrZXlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xyXG5cclxuICAgIGZvcmtKb2luKGxvb2t1cHMpLnN1YnNjcmliZSgocmVzdWx0czogYW55KSA9PiB7XHJcbiAgICAgIGlmIChyZXN1bHRzLmdhdGVzKSB7XHJcbiAgICAgICAgY29uc3QgZ2F0ZSA9IHJlc3VsdHMuZ2F0ZXMuZmluZCgoZzogYW55KSA9PiBnLmNvZGUgPT09IHRoaXMuZ2F0ZUNvZGUpO1xyXG4gICAgICAgIGlmIChnYXRlKSB0aGlzLmdhdGVOYW1lID0gZ2F0ZS5uYW1lO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChyZXN1bHRzLnZlaGljbGVUeXBlcykge1xyXG4gICAgICAgIGNvbnN0IHZ0ID0gcmVzdWx0cy52ZWhpY2xlVHlwZXMuZmluZCgodDogYW55KSA9PiB0LmNvZGUgPT09IHRoaXMuZW50cnlUeXBlQ29kZSk7XHJcbiAgICAgICAgaWYgKHZ0KSB7XHJcbiAgICAgICAgICB0aGlzLmVudHJ5VHlwZU5hbWUgPSB2dC5uYW1lO1xyXG4gICAgICAgICAgdGhpcy5lbnRyeVR5cGVUcnRtWXBpbGNrID0gdnQudV9UcnRtWXBpbGNrID09PSAnWSc7XHJcbiAgICAgICAgICB0aGlzLmVudHJ5VHlwZU1hbEdDID0gdnQudV9NYWxHQyA9PT0gJ1knO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAocmVzdWx0cy5zY2FsZXMpIHtcclxuICAgICAgICBjb25zdCBzY2FsZSA9IHJlc3VsdHMuc2NhbGVzLmZpbmQoKHM6IGFueSkgPT4gcy5jb2RlID09PSB0aGlzLnNjYWxlQ29kZSk7XHJcbiAgICAgICAgaWYgKHNjYWxlKSB0aGlzLnNjYWxlTmFtZSA9IHNjYWxlLm5hbWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHJlc3VsdHMuYWNjb3VudHMpIHtcclxuICAgICAgICBjb25zdCBhY2NvdW50ID0gcmVzdWx0cy5hY2NvdW50cy5maW5kKChhOiBhbnkpID0+IGEuY29kZSA9PT0gdGhpcy5hY2NvdW50Q29kZSk7XHJcbiAgICAgICAgaWYgKGFjY291bnQpIHRoaXMuYWNjb3VudFRpdGxlID0gYWNjb3VudC50aXRsZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAocmVzdWx0cy5kcml2ZXJzKSB7XHJcbiAgICAgICAgY29uc3QgZHJpdmVyID0gcmVzdWx0cy5kcml2ZXJzLmZpbmQoKGQ6IGFueSkgPT4gZC5jb2RlID09PSB0aGlzLmRyaXZlckNvZGUpO1xyXG4gICAgICAgIGlmIChkcml2ZXIpIHRoaXMuZHJpdmVyTmFtZSA9IGRyaXZlci5uYW1lO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChyZXN1bHRzLnN0b2NrSXRlbXMpIHtcclxuICAgICAgICBjb25zdCBpdGVtID0gcmVzdWx0cy5zdG9ja0l0ZW1zLmZpbmQoKGk6IGFueSkgPT4gaS5jb2RlID09PSB0aGlzLnN0b2NrQ29kZSk7XHJcbiAgICAgICAgaWYgKGl0ZW0pIHRoaXMuc3RvY2tOYW1lID0gaXRlbS5uYW1lO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uRG9jdW1lbnRTZWxlY3RlZChlOiBFbnRyeVdlaWdoaW5nRG9jdW1lbnQpOiB2b2lkIHtcclxuICAgIGlmICghZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5kb2N1bWVudENvZGUgPSBlLmNvZGU7XHJcbiAgICB0aGlzLmRvY3VtZW50TmFtZSA9IGUubmFtZTtcclxuICB9XHJcblxyXG4gIG9uU2NhbGVTZWxlY3RlZChlOiBFbnRyeVdlaWdoaW5nU2NhbGUpOiB2b2lkIHtcclxuICAgIGlmICghZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5zY2FsZUNvZGUgPSBlLmNvZGU7XHJcbiAgICB0aGlzLnNjYWxlTmFtZSA9IGUubmFtZTtcclxuICB9XHJcblxyXG4gIG9uQWNjb3VudFNlbGVjdGVkKGU6IEVudHJ5V2VpZ2hpbmdBY2NvdW50KTogdm9pZCB7XHJcbiAgICBpZiAoIWUpIHJldHVybjtcclxuICAgIHRoaXMuYWNjb3VudENvZGUgPSBlLmNvZGU7XHJcbiAgICB0aGlzLmFjY291bnRUaXRsZSA9IGUudGl0bGU7XHJcbiAgfVxyXG5cclxuXHJcbiAgb25UcnVja1BsYXRlU2VsZWN0ZWQoZTogRW50cnlXZWlnaGluZ1RydWNrUGxhdGUpOiB2b2lkIHtcclxuICAgIGlmICghZSkgcmV0dXJuO1xyXG4gICAgdGhpcy50cnVja1BsYXRlQ29kZSA9IGUuY29kZTtcclxuICAgIHRoaXMudHJ1Y2tQbGF0ZU5vID0gZS5wbGF0ZU5vO1xyXG4gIH1cclxuXHJcbiAgb25UcmFpbGVyUGxhdGVTZWxlY3RlZChlOiBFbnRyeVdlaWdoaW5nVHJhaWxlclBsYXRlKTogdm9pZCB7XHJcbiAgICBpZiAoIWUpIHJldHVybjtcclxuICAgIHRoaXMudHJhaWxlclBsYXRlQ29kZSA9IGUuY29kZTtcclxuICAgIHRoaXMudHJhaWxlclBsYXRlTm8gPSBlLnBsYXRlTm87XHJcbiAgfVxyXG5cclxuICBvbkRyaXZlclNlbGVjdGVkKGU6IEVudHJ5V2VpZ2hpbmdEcml2ZXIpOiB2b2lkIHtcclxuICAgIGlmICghZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5kcml2ZXJDb2RlID0gZS5jb2RlO1xyXG4gICAgdGhpcy5kcml2ZXJOYW1lID0gZS5uYW1lO1xyXG4gIH1cclxuXHJcbiAgb25TdG9ja0l0ZW1TZWxlY3RlZChlOiBFbnRyeVdlaWdoaW5nU3RvY2tJdGVtKTogdm9pZCB7XHJcbiAgICBpZiAoIWUpIHJldHVybjtcclxuICAgIHRoaXMuc3RvY2tDb2RlID0gZS5jb2RlO1xyXG4gICAgdGhpcy5zdG9ja05hbWUgPSBlLm5hbWU7XHJcbiAgfVxyXG5cclxuICBvbkdhdGVTZWxlY3RlZChlOiBFbnRyeVdlaWdoaW5nR2F0ZSk6IHZvaWQge1xyXG4gICAgaWYgKCFlKSByZXR1cm47XHJcbiAgICB0aGlzLmdhdGVDb2RlID0gZS5jb2RlO1xyXG4gICAgdGhpcy5nYXRlTmFtZSA9IGUubmFtZTtcclxuICB9XHJcblxyXG4gIG9uVmVoaWNsZVR5cGVTZWxlY3RlZChlOiBFbnRyeVdlaWdoaW5nVmVoaWNsZVR5cGUpOiB2b2lkIHtcclxuICAgIGlmICghZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5lbnRyeVR5cGVDb2RlID0gZS5jb2RlO1xyXG4gICAgdGhpcy5lbnRyeVR5cGVOYW1lID0gZS5uYW1lO1xyXG4gICAgdGhpcy5lbnRyeVR5cGVUcnRtWXBpbGNrID0gZS51X1RydG1ZcGlsY2sgPT09ICdZJztcclxuICAgIHRoaXMuZW50cnlUeXBlTWFsR0MgPSBlLnVfTWFsR0MgPT09ICdZJztcclxuICB9XHJcblxyXG4gIG9uV2F5YmlsbFNlbGVjdGVkKGU6IFN0b2NrVHJhbnNmZXIpOiB2b2lkIHtcclxuICAgIGlmICghZSkgcmV0dXJuO1xyXG4gICAgdGhpcy53YXliaWxsTm8gPSBlLmRvY051bS50b1N0cmluZygpO1xyXG4gICAgaWYgKGUuY2FyZENvZGUpIHsgdGhpcy5hY2NvdW50Q29kZSA9IGUuY2FyZENvZGU7IHRoaXMuYWNjb3VudFRpdGxlID0gZS5jYXJkTmFtZTsgfVxyXG4gICAgaWYgKGUuZnJvbVdhcmVob3VzZSkgeyB0aGlzLmRlcGFydHVyZUxvY2F0aW9uID0gZS5mcm9tV2FyZWhvdXNlOyB9XHJcbiAgICBpZiAoZS5jb21tZW50cykgeyB0aGlzLmRlc2NyaXB0aW9uID0gZS5jb21tZW50czsgfVxyXG5cclxuICAgIGNvbnN0IGxpbmVzID0gZS5zdG9ja1RyYW5zZmVyTGluZXMgPz8gW107XHJcbiAgICBjb25zdCB1bmlxdWVDb2RlcyA9IFsuLi5uZXcgU2V0KGxpbmVzLm1hcChsID0+IGwuaXRlbUNvZGUpLmZpbHRlcihjID0+ICEhYykpXTtcclxuICAgIGlmICh1bmlxdWVDb2Rlcy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgdGhpcy5zdG9ja0NvZGUgPSB1bmlxdWVDb2Rlc1swXTtcclxuICAgICAgdGhpcy5zdG9ja05hbWUgPSBsaW5lcy5maW5kKGwgPT4gbC5pdGVtQ29kZSA9PT0gdW5pcXVlQ29kZXNbMF0pPy5pdGVtRGVzY3JpcHRpb24gPz8gJyc7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnN0b2NrQ29kZSA9ICcnO1xyXG4gICAgICB0aGlzLnN0b2NrTmFtZSA9ICcnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqIFBoYXNlIDEg4oaSIFBoYXNlIDIgZ2XDp2nFn2kgKi9cclxuICBpbGVyaUdpdCgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy50cnVja1BsYXRlQ29kZSkge1xyXG4gICAgICB0aGlzLmNvbmZpcm1hdGlvbi53YXJuKHRoaXMubG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KCdLYWRvb2dsdTo6U2VsZWN0VHJ1Y2tQbGF0ZScpLCAnJywge1xyXG4gICAgICAgIGhpZGVZZXNCdG46IHRydWUsXHJcbiAgICAgICAgY2FuY2VsVGV4dDogdGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoJ0thZG9vZ2x1OjpDYW5jZWwnKSxcclxuICAgICAgICBkaXNtaXNzaWJsZTogZmFsc2UsXHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5lbnRyeVR5cGVUcnRtWXBpbGNrICYmICF0aGlzLnN0b2NrQ29kZSkge1xyXG4gICAgICB0aGlzLmNvbmZpcm1hdGlvbi53YXJuKHRoaXMubG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KCdLYWRvb2dsdTo6U3RvY2tDb2RlUmVxdWlyZWQnKSwgJycsIHtcclxuICAgICAgICBoaWRlWWVzQnRuOiB0cnVlLFxyXG4gICAgICAgIGNhbmNlbFRleHQ6IHRoaXMubG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KCdLYWRvb2dsdTo6Q2FuY2VsJyksXHJcbiAgICAgICAgZGlzbWlzc2libGU6IGZhbHNlLFxyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5mb3JtUGhhc2UgPSAyO1xyXG4gICAgdGhpcy5fc3RhcnRTY2FsZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqIFBoYXNlIDIg4oaSIFBoYXNlIDEgZ2VyaSBkw7ZuICovXHJcbiAgZ2VyaUdpdFBoYXNlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fc3RvcFNjYWxlKCk7XHJcbiAgICB0aGlzLmZvcm1QaGFzZSA9IDE7XHJcbiAgfVxyXG5cclxuICBzYXZlKCk6IHZvaWQge1xyXG4gICAgLy8gVGFydMSxbSBtb2R1bmRheXNhIGRvV2VpZ2hpbmcgQVBJIMOnYcSfxLFyXHJcbiAgICBjb25zdCBkb2NFbnRyeSA9IHRoaXMuZ2V0RG9jRW50cnkodGhpcy5yZWNvcmQpO1xyXG4gICAgaWYgKHRoaXMud2VpZ2hpbmdNb2RlICYmIGRvY0VudHJ5KSB7XHJcbiAgICAgIGlmICh0aGlzLmZpeGVkU2NhbGVWYWx1ZSA9PSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5jb25maXJtYXRpb24ud2Fybih0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudCgnS2Fkb29nbHU6OkRvRml4Rmlyc3QnKSwgJycsIHtcclxuICAgICAgICAgIGhpZGVZZXNCdG46IHRydWUsXHJcbiAgICAgICAgICBjYW5jZWxUZXh0OiB0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudCgnS2Fkb29nbHU6OkNhbmNlbCcpLFxyXG4gICAgICAgICAgZGlzbWlzc2libGU6IGZhbHNlLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgZG9XZWlnaCQgPSB0aGlzLnNlcnZpY2UuZG9XZWlnaGluZyhkb2NFbnRyeSwge1xyXG4gICAgICAgIHdlaWdoaW5nVmFsdWU6IHRoaXMuZml4ZWRTY2FsZVZhbHVlISxcclxuICAgICAgICBvcGVyYXRvckNvZGU6ICcnXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgLy8gxLBMSyB0YXJ0xLFtZGEgZm9ybSBhbGFubGFyxLFuxLEgKHN0b2sga29kdSwgaXJzYWxpeWUgdmIuKSDDtm5jZSBrYXlkZXQsIHNvbnJhIHRhcnTEsW0geWFwLlxyXG4gICAgICAvLyBTT04gdGFydMSxbWRhIHNhZGVjZSB0YXJ0xLFtIHlhcCDigJQgZGnEn2VyIGFsYW5sYXIgaWxrIHRhcnTEsW1kYW4gc29ucmEgZGXEn2nFn3RpcmlsZW1lei5cclxuICAgICAgbGV0IG9icyQ6IE9ic2VydmFibGU8RW50cnlXZWlnaGluZz47XHJcbiAgICAgIGlmICh0aGlzLndlaWdoaW5nTW9kZSA9PT0gJ2ZpcnN0Jykge1xyXG4gICAgICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgY29uc3QgY3VycmVudERhdGUgPSBub3cudG9JU09TdHJpbmcoKS5zcGxpdCgnVCcpWzBdO1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRUaW1lID0gbm93LnRvVGltZVN0cmluZygpLnNwbGl0KCcgJylbMF07XHJcbiAgICAgICAgY29uc3QgZHRvOiBTYXZlRW50cnlXZWlnaGluZ0R0byA9IHtcclxuICAgICAgICAgIHVfR2F0ZUNvZGU6IHRoaXMuZ2F0ZUNvZGUgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgdV9FbnRyeURhdGU6IHRoaXMuZW50cnlEYXRlIHx8IGN1cnJlbnREYXRlLFxyXG4gICAgICAgICAgdV9FbnRyeVRpbWU6IHRoaXMuZW50cnlUaW1lIHx8IGN1cnJlbnRUaW1lLFxyXG4gICAgICAgICAgdV9FeGl0RGF0ZTogdGhpcy5leGl0RGF0ZSB8fCBudWxsLFxyXG4gICAgICAgICAgdV9FeGl0VGltZTogdGhpcy5leGl0VGltZSB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICB1X1BsYXRlOiB0aGlzLnRydWNrUGxhdGVDb2RlLFxyXG4gICAgICAgICAgdV9Eb3JzZVBsYXRlOiB0aGlzLnRyYWlsZXJQbGF0ZUNvZGUgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgdV9FbnRyeVR5cGU6IHRoaXMuZW50cnlUeXBlQ29kZSB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICB1X0Rlc2NyaXB0aW9uOiB0aGlzLmRlc2NyaXB0aW9uIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgIHVfRHJpdmVyOiB0aGlzLmRyaXZlckZ1bGxOYW1lIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgIHVfRHJpdmVyQ29kZTogdGhpcy5kcml2ZXJDb2RlIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgIHVfVGNObzogdGhpcy50Y05vIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgIHVfQ2FyZENvZGU6IHRoaXMuYWNjb3VudENvZGUgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgdV9TY2FsZUNvZGU6IHRoaXMuc2NhbGVDb2RlIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgIHVfSXRlbUNvZGU6IHRoaXMuc3RvY2tDb2RlIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgIHVfRGVzcGF0Y2hBZHZpY2VObzogdGhpcy53YXliaWxsTm8gfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgdV9EZXNwYXRjaEV4aXN0OiAnTicsXHJcbiAgICAgICAgICB1X1NoaXBUbzogdGhpcy5hcnJpdmFsTG9jYXRpb24gfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgdV9Db250YWluZXJObzogdGhpcy5jb250YWluZXJObyB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICB1X1NoaXBQbGFjZTogdGhpcy5kZXBhcnR1cmVMb2NhdGlvbiB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgfTtcclxuICAgICAgICBvYnMkID0gdGhpcy5zZXJ2aWNlLnVwZGF0ZShkb2NFbnRyeSwgZHRvKS5waXBlKHN3aXRjaE1hcCgoKSA9PiBkb1dlaWdoJCkpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG9icyQgPSBkb1dlaWdoJDtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5pc1NhdmluZyA9IHRydWU7XHJcbiAgICAgIG9icyQuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAoKSA9PiB7XHJcbiAgICAgICAgICAvLyBUYXJ0xLFtIGRlxJ9lcmxlcmluaSB3ZWlnaGluZ01vZGUnYSBnw7ZyZSBnw7xuY2VsbGVcclxuICAgICAgICAgIGlmICh0aGlzLndlaWdoaW5nTW9kZSA9PT0gJ2ZpcnN0Jykge1xyXG4gICAgICAgICAgICB0aGlzLmZpcnN0V2VpZ2hpbmdWYWx1ZSA9IHRoaXMuZml4ZWRTY2FsZVZhbHVlO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5sYXN0V2VpZ2hpbmdWYWx1ZSA9IHRoaXMuZml4ZWRTY2FsZVZhbHVlO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHRoaXMuaXNTYXZpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMudG9hc3Rlci5zdWNjZXNzKFxyXG4gICAgICAgICAgICB0aGlzLndlaWdoaW5nTW9kZSA9PT0gJ2ZpcnN0J1xyXG4gICAgICAgICAgICAgID8gdGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoJ0thZG9vZ2x1OjpGaXJzdFdlaWdoaW5nU2F2ZWQnKVxyXG4gICAgICAgICAgICAgIDogdGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoJ0thZG9vZ2x1OjpMYXN0V2VpZ2hpbmdTYXZlZCcpXHJcbiAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgIC8vIEvEsXNhIGJpciBnZWNpa21lIGlsZSBsaXN0ZXllIGTDtm4gKGt1bGxhbsSxY8SxIHByb2dyZXNzIGJhciBkZcSfacWfaW1pbmkgZ8O2cnPDvG4pXHJcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycva2Fkb29nbHUvZW50cnktd2VpZ2hpbmcnXSk7XHJcbiAgICAgICAgICB9LCB0aGlzLndlaWdoaW5nTW9kZSA9PSAnbGFzdCcgPyA4MDAwIDogMTUwMCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5pc1NhdmluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy50b2FzdGVyLmVycm9yKHRoaXMubG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KCdLYWRvb2dsdTo6V2VpZ2hpbmdSZWNvcmRFcnJvcicpKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIE5vcm1hbCBrYXnEsXQgbW9kdSAoeWVuaSBrYXnEsXQgdmV5YSBkw7x6ZW5sZW1lKVxyXG4gICAgaWYgKCF0aGlzLnRydWNrUGxhdGVDb2RlKSB7XHJcbiAgICAgIHRoaXMuY29uZmlybWF0aW9uLndhcm4odGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoJ0thZG9vZ2x1OjpTZWxlY3RUcnVja1BsYXRlJyksICcnLCB7XHJcbiAgICAgICAgaGlkZVllc0J0bjogdHJ1ZSxcclxuICAgICAgICBjYW5jZWxUZXh0OiB0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudCgnS2Fkb29nbHU6OkNhbmNlbCcpLFxyXG4gICAgICAgIGRpc21pc3NpYmxlOiBmYWxzZSxcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xyXG4gICAgY29uc3QgY3VycmVudERhdGUgPSBub3cudG9JU09TdHJpbmcoKS5zcGxpdCgnVCcpWzBdO1xyXG4gICAgY29uc3QgY3VycmVudFRpbWUgPSBub3cudG9UaW1lU3RyaW5nKCkuc3BsaXQoJyAnKVswXTsgLy8gSEg6bW06c3NcclxuXHJcbiAgICBjb25zdCBkdG86IFNhdmVFbnRyeVdlaWdoaW5nRHRvID0ge1xyXG4gICAgICB1X0dhdGVDb2RlOiB0aGlzLmdhdGVDb2RlIHx8IHVuZGVmaW5lZCxcclxuICAgICAgdV9FbnRyeURhdGU6IHRoaXMuZW50cnlEYXRlIHx8IGN1cnJlbnREYXRlLFxyXG4gICAgICB1X0VudHJ5VGltZTogdGhpcy5lbnRyeVRpbWUgfHwgY3VycmVudFRpbWUsXHJcbiAgICAgIHVfRXhpdERhdGU6IHRoaXMuZXhpdERhdGUgfHwgbnVsbCxcclxuICAgICAgdV9FeGl0VGltZTogdGhpcy5leGl0VGltZSB8fCB1bmRlZmluZWQsXHJcbiAgICAgIHVfUGxhdGU6IHRoaXMudHJ1Y2tQbGF0ZUNvZGUsXHJcbiAgICAgIHVfRG9yc2VQbGF0ZTogdGhpcy50cmFpbGVyUGxhdGVDb2RlIHx8IHVuZGVmaW5lZCxcclxuICAgICAgdV9FbnRyeVR5cGU6IHRoaXMuZW50cnlUeXBlQ29kZSB8fCB1bmRlZmluZWQsXHJcbiAgICAgIHVfRGVzY3JpcHRpb246IHRoaXMuZGVzY3JpcHRpb24gfHwgdW5kZWZpbmVkLFxyXG4gICAgICB1X0RyaXZlcjogdGhpcy5kcml2ZXJGdWxsTmFtZSB8fCB1bmRlZmluZWQsXHJcbiAgICAgIHVfRHJpdmVyQ29kZTogdGhpcy5kcml2ZXJDb2RlIHx8IHVuZGVmaW5lZCxcclxuICAgICAgdV9UY05vOiB0aGlzLnRjTm8gfHwgdW5kZWZpbmVkLFxyXG4gICAgICB1X0NhcmRDb2RlOiB0aGlzLmFjY291bnRDb2RlIHx8IHVuZGVmaW5lZCxcclxuICAgICAgdV9TY2FsZUNvZGU6IHRoaXMuc2NhbGVDb2RlIHx8IHVuZGVmaW5lZCxcclxuICAgICAgdV9JdGVtQ29kZTogdGhpcy5zdG9ja0NvZGUgfHwgdW5kZWZpbmVkLFxyXG4gICAgICB1X0Rlc3BhdGNoQWR2aWNlTm86IHRoaXMud2F5YmlsbE5vIHx8IHVuZGVmaW5lZCxcclxuICAgICAgdV9EZXNwYXRjaEV4aXN0OiAnTicsXHJcbiAgICAgIHVfU2hpcFRvOiB0aGlzLmFycml2YWxMb2NhdGlvbiB8fCB1bmRlZmluZWQsXHJcbiAgICAgIHVfQ29udGFpbmVyTm86IHRoaXMuY29udGFpbmVyTm8gfHwgdW5kZWZpbmVkLFxyXG4gICAgICB1X1NoaXBQbGFjZTogdGhpcy5kZXBhcnR1cmVMb2NhdGlvbiB8fCB1bmRlZmluZWQsXHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IG9icyQgPSBkb2NFbnRyeVxyXG4gICAgICA/IHRoaXMuc2VydmljZS51cGRhdGUoZG9jRW50cnksIGR0bylcclxuICAgICAgOiB0aGlzLnNlcnZpY2UuY3JlYXRlKGR0byk7XHJcblxyXG4gICAgdGhpcy5pc1NhdmluZyA9IHRydWU7XHJcbiAgICBvYnMkLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6ICgpID0+IHtcclxuICAgICAgICB0aGlzLmlzU2F2aW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy50b2FzdGVyLnN1Y2Nlc3ModGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoJ0thZG9vZ2x1OjpSZWNvcmRTYXZlZFN1Y2Nlc3MnKSk7XHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycva2Fkb29nbHUvZW50cnktd2VpZ2hpbmcnXSk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5pc1NhdmluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMudG9hc3Rlci5lcnJvcih0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudCgnS2Fkb29nbHU6OlJlY29yZFNhdmVFcnJvcicpKTtcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZG9Hb29kc01vdmVtZW50KCk6IHZvaWQge1xyXG4gICAgY29uc3QgZG9jRW50cnkgPSB0aGlzLmdldERvY0VudHJ5KHRoaXMucmVjb3JkKTtcclxuICAgIGlmICghZG9jRW50cnkpIHJldHVybjtcclxuXHJcbiAgICB0aGlzLmNvbmZpcm1hdGlvblxyXG4gICAgICAud2FybihcclxuICAgICAgICB0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudCgnS2Fkb29nbHU6Ok1hbEdjQ29uZmlybU1lc3NhZ2UnLCBTdHJpbmcodGhpcy5yZWNvcmQ/LnVfUGxhdGUgfHwgZG9jRW50cnkpKSxcclxuICAgICAgICAnJyxcclxuICAgICAgICB7XHJcbiAgICAgICAgICB5ZXNUZXh0OiB0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudCgnS2Fkb29nbHU6OlllcycpLFxyXG4gICAgICAgICAgY2FuY2VsVGV4dDogdGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoJ0thZG9vZ2x1OjpObycpLFxyXG4gICAgICAgIH1cclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKHN0YXR1cyA9PiB7XHJcbiAgICAgICAgaWYgKHN0YXR1cyAhPT0gJ2NvbmZpcm0nKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5pc0RvaW5nR29vZHNNb3ZlbWVudCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zZXJ2aWNlLmRvR29vZHNNb3ZlbWVudChkb2NFbnRyeSkuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6IHVwZGF0ZWQgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnJlY29yZCA9IHVwZGF0ZWQ7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEb2luZ0dvb2RzTW92ZW1lbnQgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy50b2FzdGVyLnN1Y2Nlc3ModGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoJ0thZG9vZ2x1OjpHb29kc01vdmVtZW50U3VjY2VzcycpKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBlcnJvcjogKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmlzRG9pbmdHb29kc01vdmVtZW50ID0gZmFsc2U7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHNhYml0bGUoKTogdm9pZCB7XHJcbiAgICB0aGlzLmZpeGVkU2NhbGVWYWx1ZSA9IHRoaXMuY3VycmVudFNjYWxlVmFsdWU7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3N0b3BTY2FsZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc3RhcnRTY2FsZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuaXNTY2FsZUNvbm5lY3RpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5zY2FsZUNvbm5lY3Rpb25GYWlsZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuc2NhbGVTdWIgPSB0aGlzLnNjYWxlU2lnbmFsUlNlcnZpY2Uud2VpZ2h0JC5zdWJzY3JpYmUodyA9PiB7XHJcbiAgICAgIGlmICh3ICE9PSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5pc1NjYWxlUmVjb25uZWN0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50U2NhbGVWYWx1ZSA9IHc7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5zY2FsZVN1Yi5hZGQoXHJcbiAgICAgIHRoaXMuc2NhbGVTaWduYWxSU2VydmljZS5yZWNvbm5lY3RpbmckLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5pc1NjYWxlUmVjb25uZWN0aW5nID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRTY2FsZVZhbHVlID0gbnVsbDtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgICB0aGlzLnNjYWxlU3ViLmFkZChcclxuICAgICAgdGhpcy5zY2FsZVNpZ25hbFJTZXJ2aWNlLmNvbm5lY3Rpb25Mb3N0JC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuaXNTY2FsZUNvbm5lY3RpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzU2NhbGVSZWNvbm5lY3RpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNjYWxlQ29ubmVjdGlvbkZhaWxlZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5jb25maXJtYXRpb24uZXJyb3IoXHJcbiAgICAgICAgICB0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudCgnS2Fkb29nbHU6OlNjYWxlQ29ubmVjdGlvbkZhaWxlZCcpLFxyXG4gICAgICAgICAgdGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoJ0thZG9vZ2x1OjpTY2FsZUNvbm5lY3Rpb25GYWlsZWRUaXRsZScpLFxyXG4gICAgICAgICAgeyBoaWRlWWVzQnRuOiB0cnVlLCBjYW5jZWxUZXh0OiB0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudCgnS2Fkb29nbHU6OkNhbmNlbCcpIH1cclxuICAgICAgICApO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICAgIHRoaXMuc2NhbGVTaWduYWxSU2VydmljZS5zdGFydCh0aGlzLnNjYWxlQXBpVXJsLCB0aGlzLnNjYWxlSWQpXHJcbiAgICAgIC50aGVuKCgpID0+IHsgdGhpcy5pc1NjYWxlQ29ubmVjdGluZyA9IGZhbHNlOyB9KVxyXG4gICAgICAuY2F0Y2goZSA9PiB7XHJcbiAgICAgICAgdGhpcy5pc1NjYWxlQ29ubmVjdGluZyA9IGZhbHNlO1xyXG4gICAgICAgIGlmIChlPy5tZXNzYWdlID09PSAnU2NhbGVDb25uZWN0aW9uTWF4UmV0cmllc1JlYWNoZWQnKSB7XHJcbiAgICAgICAgICB0aGlzLnNjYWxlQ29ubmVjdGlvbkZhaWxlZCA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmNvbmZpcm1hdGlvbi5lcnJvcihcclxuICAgICAgICAgICAgdGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoJ0thZG9vZ2x1OjpTY2FsZUNvbm5lY3Rpb25GYWlsZWQnKSxcclxuICAgICAgICAgICAgdGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoJ0thZG9vZ2x1OjpTY2FsZUNvbm5lY3Rpb25GYWlsZWRUaXRsZScpLFxyXG4gICAgICAgICAgICB7IGhpZGVZZXNCdG46IHRydWUsIGNhbmNlbFRleHQ6IHRoaXMubG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KCdLYWRvb2dsdTo6Q2FuY2VsJykgfVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignU2lnbmFsUiBiYcSfbGFudMSxIGhhdGFzxLE6JywgZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3N0b3BTY2FsZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuc2NhbGVTdWI/LnVuc3Vic2NyaWJlKCk7XHJcbiAgICB0aGlzLnNjYWxlU3ViID0gbnVsbDtcclxuICAgIHRoaXMuc2NhbGVTaWduYWxSU2VydmljZS5zdG9wKHRoaXMuc2NhbGVJZClcclxuICAgICAgLmNhdGNoKGUgPT4gY29uc29sZS5lcnJvcignU2lnbmFsUiBrYXBhdG1hIGhhdGFzxLE6JywgZSkpO1xyXG4gIH1cclxuXHJcbiAgZ29CYWNrKCk6IHZvaWQge1xyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycva2Fkb29nbHUvZW50cnktd2VpZ2hpbmcnXSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHZhbGlkYXRlVENLTih2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCB0YyA9IHZhbHVlPy50cmltKCk7XHJcbiAgICBpZiAoIXRjIHx8IHRjLmxlbmd0aCAhPT0gMTEpIHJldHVybiBmYWxzZTtcclxuICAgIGlmICghL15cXGR7MTF9JC8udGVzdCh0YykpIHJldHVybiBmYWxzZTtcclxuICAgIGlmICh0Y1swXSA9PT0gJzAnKSByZXR1cm4gZmFsc2U7XHJcbiAgICBjb25zdCBkID0gdGMuc3BsaXQoJycpLm1hcChOdW1iZXIpO1xyXG4gICAgY29uc3QgZDEwID0gKChkWzBdICsgZFsyXSArIGRbNF0gKyBkWzZdICsgZFs4XSkgKiA3IC0gKGRbMV0gKyBkWzNdICsgZFs1XSArIGRbN10pKSAlIDEwO1xyXG4gICAgaWYgKGQxMCAhPT0gZFs5XSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgY29uc3QgZDExID0gZC5zbGljZSgwLCAxMCkucmVkdWNlKChhLCBiKSA9PiBhICsgYiwgMCkgJSAxMDtcclxuICAgIHJldHVybiBkMTEgPT09IGRbMTBdO1xyXG4gIH1cclxufVxyXG4iLCI8YWJwLXBhZ2UgW2JyZWFkY3J1bWJdPVwiZmFsc2VcIj5cclxuICA8YWJwLXBhZ2UtdG9vbGJhci1jb250YWluZXIgY2xhc3M9XCJjb2xcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3cgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICA8aDMgY2xhc3M9XCJwYWdlLXRpdGxlXCI+XHJcbiAgICAgICAgICB7eyAnS2Fkb29nbHU6OkVudHJ5V2VpZ2hpbmdUaXRsZScgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwid2VpZ2hpbmdNb2RlXCIgY2xhc3M9XCJiYWRnZSBtcy0yIGZzLTZcIlxyXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAgJ2JnLXdhcm5pbmcgdGV4dC1kYXJrJzogd2VpZ2hpbmdNb2RlID09PSAnZmlyc3QnLFxyXG4gICAgICAgICAgICAgICdiZy1wcmltYXJ5Jzogd2VpZ2hpbmdNb2RlID09PSAnbGFzdCdcclxuICAgICAgICAgICAgfVwiPlxyXG4gICAgICAgICAgICB7eyB3ZWlnaGluZ01vZGVMYWJlbCB9fVxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCIhd2VpZ2hpbmdNb2RlXCIgY2xhc3M9XCJiYWRnZSBtcy0yIGZzLTZcIlxyXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAgJ2JnLXNlY29uZGFyeSc6IHdlaWdoaW5nU3RlcCA9PT0gMSxcclxuICAgICAgICAgICAgICAnYmctaW5mbyc6IHdlaWdoaW5nU3RlcCA9PT0gMixcclxuICAgICAgICAgICAgICAnYmctc3VjY2Vzcyc6IHdlaWdoaW5nU3RlcCA9PT0gM1xyXG4gICAgICAgICAgICB9XCI+XHJcbiAgICAgICAgICAgIHt7ICh3ZWlnaGluZ1N0ZXAgPT09IDEgPyAnS2Fkb29nbHU6OlJlY29yZFN0ZXAnIDogd2VpZ2hpbmdTdGVwID09PSAyID8gJ0thZG9vZ2x1OjpGaXJzdFdlaWdoaW5nJyA6ICdLYWRvb2dsdTo6Q29tcGxldGVkJykgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L2gzPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvYWJwLXBhZ2UtdG9vbGJhci1jb250YWluZXI+XHJcblxyXG4gIDwhLS0gU3RlcCBJbmRpY2F0b3IgLS0+XHJcbiAgPGRpdiBjbGFzcz1cImNhcmQgbWItM1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBweS0zXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIj5cclxuXHJcbiAgICAgICAgPCEtLSBTdGVwIDE6IEFyYcOnICYgQmVsZ2UgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3VuZGVkLWNpcmNsZSBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgZnctYm9sZCB0ZXh0LXdoaXRlXCJcclxuICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDo0MHB4OyBoZWlnaHQ6NDBweDsgZm9udC1zaXplOjFyZW07XCJcclxuICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiZm9ybVBoYXNlID4gMSB8fCBpc0Z1bGx5Q29tcGxldGVkID8gJyMxOTg3NTQnIDogKGZvcm1QaGFzZSA9PT0gMSA/ICcjMGQ2ZWZkJyA6ICcjNmM3NTdkJylcIj5cclxuICAgICAgICAgICAgPGkgKm5nSWY9XCJmb3JtUGhhc2UgPiAxIHx8IGlzRnVsbHlDb21wbGV0ZWRcIiBjbGFzcz1cImZhIGZhLWNoZWNrXCI+PC9pPlxyXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImZvcm1QaGFzZSA8PSAxICYmICFpc0Z1bGx5Q29tcGxldGVkXCI+MTwvc3Bhbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPHNtYWxsIGNsYXNzPVwibXQtMSBmdy1zZW1pYm9sZFwiIFtjbGFzcy50ZXh0LXN1Y2Nlc3NdPVwiZm9ybVBoYXNlID4gMSB8fCBpc0Z1bGx5Q29tcGxldGVkXCIgW2NsYXNzLnRleHQtcHJpbWFyeV09XCJmb3JtUGhhc2UgPT09IDEgJiYgIWlzRnVsbHlDb21wbGV0ZWRcIj57eyAnS2Fkb29nbHU6OlZlaGljbGVBbmREb2N1bWVudCcgfCBhYnBMb2NhbGl6YXRpb24gfX08L3NtYWxsPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC1ncm93LTEgbXgtMlwiIHN0eWxlPVwiaGVpZ2h0OjNweDsgbWF4LXdpZHRoOjEyMHB4O1wiXHJcbiAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJmb3JtUGhhc2UgPiAxID8gJyMxOTg3NTQnIDogJyNkZWUyZTYnXCI+PC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gU3RlcCAyOiBUYXJ0xLFtIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm91bmRlZC1jaXJjbGUgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGZ3LWJvbGQgdGV4dC13aGl0ZVwiXHJcbiAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6NDBweDsgaGVpZ2h0OjQwcHg7IGZvbnQtc2l6ZToxcmVtO1wiXHJcbiAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cIndlaWdoaW5nU3RlcCA9PT0gMyA/ICcjMTk4NzU0JyA6IChmb3JtUGhhc2UgPT09IDIgPyAnIzBkNmVmZCcgOiAnIzZjNzU3ZCcpXCI+XHJcbiAgICAgICAgICAgIDxpICpuZ0lmPVwid2VpZ2hpbmdTdGVwID09PSAzXCIgY2xhc3M9XCJmYSBmYS1jaGVja1wiPjwvaT5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ3ZWlnaGluZ1N0ZXAgPCAzXCI+Mjwvc3Bhbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPHNtYWxsIGNsYXNzPVwibXQtMSBmdy1zZW1pYm9sZFwiIFtjbGFzcy50ZXh0LXN1Y2Nlc3NdPVwid2VpZ2hpbmdTdGVwID09PSAzXCIgW2NsYXNzLnRleHQtcHJpbWFyeV09XCJmb3JtUGhhc2UgPT09IDIgJiYgd2VpZ2hpbmdTdGVwIDwgM1wiIFtjbGFzcy50ZXh0LW11dGVkXT1cImZvcm1QaGFzZSA8IDIgJiYgd2VpZ2hpbmdTdGVwIDwgM1wiPnt7ICdLYWRvb2dsdTo6V2VpZ2hpbmdTdGVwJyB8IGFicExvY2FsaXphdGlvbiB9fTwvc21hbGw+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LWdyb3ctMSBteC0yXCIgc3R5bGU9XCJoZWlnaHQ6M3B4OyBtYXgtd2lkdGg6MTIwcHg7XCJcclxuICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cIndlaWdoaW5nU3RlcCA9PT0gMyA/ICcjMTk4NzU0JyA6ICcjZGVlMmU2J1wiPjwvZGl2PlxyXG5cclxuICAgICAgICA8IS0tIFN0ZXAgMzogVGFtYW1sYW5kxLEgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3VuZGVkLWNpcmNsZSBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgZnctYm9sZCB0ZXh0LXdoaXRlXCJcclxuICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDo0MHB4OyBoZWlnaHQ6NDBweDsgZm9udC1zaXplOjFyZW07XCJcclxuICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwid2VpZ2hpbmdTdGVwID09PSAzID8gJyMxOTg3NTQnIDogJyM2Yzc1N2QnXCI+XHJcbiAgICAgICAgICAgIDxpICpuZ0lmPVwid2VpZ2hpbmdTdGVwID09PSAzXCIgY2xhc3M9XCJmYSBmYS1jaGVja1wiPjwvaT5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ3ZWlnaGluZ1N0ZXAgPCAzXCI+Mzwvc3Bhbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPHNtYWxsIGNsYXNzPVwibXQtMSBmdy1zZW1pYm9sZFwiIFtjbGFzcy50ZXh0LXN1Y2Nlc3NdPVwid2VpZ2hpbmdTdGVwID09PSAzXCIgW2NsYXNzLnRleHQtbXV0ZWRdPVwid2VpZ2hpbmdTdGVwIDwgM1wiPnt7ICdLYWRvb2dsdTo6Q29tcGxldGVkJyB8IGFicExvY2FsaXphdGlvbiB9fTwvc21hbGw+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8IS0tID09PT09PT09PT0gUEhBU0UgMTogQXJhw6cgJiBCZWxnZSA9PT09PT09PT09IC0tPlxyXG4gIDxkaXYgKm5nSWY9XCJmb3JtUGhhc2UgPT09IDEgJiYgIWlzRnVsbHlDb21wbGV0ZWRcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjYXJkXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHlcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuXHJcbiAgICAgIDwhLS0gU29sIHPDvHR1bjogR2lyacWfL8OHxLFrxLHFnyArIEFyYcOnICYgU8O8csO8Y8O8IC0tPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cclxuXHJcbiAgICAgICAgPCEtLSBHcnVwIDE6IEdpcmnFnyAvIMOHxLFrxLHFnyBCaWxnaWxlcmkgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlciByb3VuZGVkIHAtMyBtYi0zXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyLWJvdHRvbSBwYi0yIG1iLTMgZnctYm9sZCB0ZXh0LXNlY29uZGFyeVwiPlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXNpZ24taW4tYWx0IG1lLTJcIj48L2k+e3sgJ0thZG9vZ2x1OjpFbnRyeUV4aXRJbmZvJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xIHNtYWxsIGZ3LXNlbWlib2xkIHRleHQtbXV0ZWRcIj57eyAnS2Fkb29nbHU6OkdhdGVTZWxlY3Rpb24nIHwgYWJwTG9jYWxpemF0aW9uIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICA8aGl0LWxvb2t1cC1zZWxlY3RcclxuICAgICAgICAgICAgICAgIFtsb2FkRm5dPVwibG9hZEdhdGVzXCJcclxuICAgICAgICAgICAgICAgIFtjb2x1bW5zXT1cImdhdGVDb2x1bW5zXCJcclxuICAgICAgICAgICAgICAgIGRpc3BsYXlOYW1lPVwibmFtZVwiXHJcbiAgICAgICAgICAgICAgICBbZWRpdGluZ0RhdGFdPVwiZ2F0ZU5hbWVcIlxyXG4gICAgICAgICAgICAgICAgW3JlYWRPbmx5XT1cImlzVXBkYXRlTW9kZVwiXHJcbiAgICAgICAgICAgICAgICAoc2VsZWN0ZWQpPVwib25HYXRlU2VsZWN0ZWQoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgIDwvaGl0LWxvb2t1cC1zZWxlY3Q+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgbWItM1wiPlxyXG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgbWItMSBzbWFsbCBmdy1zZW1pYm9sZCB0ZXh0LW11dGVkXCI+QXJhw6cgSGFyZWtldCBUw7xyw7w8L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDxoaXQtbG9va3VwLXNlbGVjdFxyXG4gICAgICAgICAgICAgICAgW2xvYWRGbl09XCJsb2FkVmVoaWNsZVR5cGVzXCJcclxuICAgICAgICAgICAgICAgIFtjb2x1bW5zXT1cInZlaGljbGVUeXBlQ29sdW1uc1wiXHJcbiAgICAgICAgICAgICAgICBkaXNwbGF5TmFtZT1cIm5hbWVcIlxyXG4gICAgICAgICAgICAgICAgW2VkaXRpbmdEYXRhXT1cImVudHJ5VHlwZU5hbWVcIlxyXG4gICAgICAgICAgICAgICAgW3JlYWRPbmx5XT1cImlzVXBkYXRlTW9kZVwiXHJcbiAgICAgICAgICAgICAgICAoc2VsZWN0ZWQpPVwib25WZWhpY2xlVHlwZVNlbGVjdGVkKCRldmVudClcIj5cclxuICAgICAgICAgICAgICA8L2hpdC1sb29rdXAtc2VsZWN0PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IG1iLTNcIj5cclxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIG1iLTEgc21hbGwgZnctc2VtaWJvbGQgdGV4dC1tdXRlZFwiPnt7ICdLYWRvb2dsdTo6RW50cnlEYXRlJyB8IGFicExvY2FsaXphdGlvbiB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGR4LWRhdGUtYm94XHJcbiAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZW50cnlEYXRlVGltZVwiXHJcbiAgICAgICAgICAgICAgICB0eXBlPVwiZGF0ZXRpbWVcIlxyXG4gICAgICAgICAgICAgICAgZGlzcGxheUZvcm1hdD1cImRkLk1NLnl5eXkgSEg6bW1cIlxyXG4gICAgICAgICAgICAgICAgW3JlYWRPbmx5XT1cImlzVXBkYXRlTW9kZVwiXHJcbiAgICAgICAgICAgICAgICB3aWR0aD1cIjEwMCVcIj5cclxuICAgICAgICAgICAgICA8L2R4LWRhdGUtYm94PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IG1iLTNcIj5cclxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIG1iLTEgc21hbGwgZnctc2VtaWJvbGQgdGV4dC1tdXRlZFwiPnt7ICdLYWRvb2dsdTo6RXhpdERhdGUnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICA8ZHgtZGF0ZS1ib3hcclxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJleGl0RGF0ZVRpbWVcIlxyXG4gICAgICAgICAgICAgICAgdHlwZT1cImRhdGV0aW1lXCJcclxuICAgICAgICAgICAgICAgIGRpc3BsYXlGb3JtYXQ9XCJkZC5NTS55eXl5IEhIOm1tXCJcclxuICAgICAgICAgICAgICAgIFtyZWFkT25seV09XCJpc1VwZGF0ZU1vZGVcIlxyXG4gICAgICAgICAgICAgICAgd2lkdGg9XCIxMDAlXCI+XHJcbiAgICAgICAgICAgICAgPC9keC1kYXRlLWJveD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPCEtLSBHcnVwIDI6IEFyYcOnICYgU8O8csO8Y8O8IEJpbGdpbGVyaSAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyIHJvdW5kZWQgcC0zIG1iLTNcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJib3JkZXItYm90dG9tIHBiLTIgbWItMyBmdy1ib2xkIHRleHQtc2Vjb25kYXJ5XCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtdHJ1Y2sgbWUtMlwiPjwvaT57eyAnS2Fkb29nbHU6OlZlaGljbGVEcml2ZXJJbmZvJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xIHNtYWxsIGZ3LXNlbWlib2xkIHRleHQtbXV0ZWRcIj5cclxuICAgICAgICAgICAgICAgIHt7ICdLYWRvb2dsdTo6VHJ1Y2tQbGF0ZScgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIj4qPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGhpdC1sb29rdXAtc2VsZWN0XHJcbiAgICAgICAgICAgICAgICBbbG9hZEZuXT1cImxvYWRUcnVja1BsYXRlc1wiXHJcbiAgICAgICAgICAgICAgICBbY29sdW1uc109XCJ0cnVja1BsYXRlQ29sdW1uc1wiXHJcbiAgICAgICAgICAgICAgICBkaXNwbGF5TmFtZT1cInBsYXRlTm9cIlxyXG4gICAgICAgICAgICAgICAgW2VkaXRpbmdEYXRhXT1cInRydWNrUGxhdGVOb1wiXHJcbiAgICAgICAgICAgICAgICBbcmVhZE9ubHldPVwiaXNGb3JtTG9ja2VkXCJcclxuICAgICAgICAgICAgICAgIChzZWxlY3RlZCk9XCJvblRydWNrUGxhdGVTZWxlY3RlZCgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgPC9oaXQtbG9va3VwLXNlbGVjdD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBtYi0zXCIgKm5nSWY9XCJ0cmFpbGVyUGxhdGVOb1wiPlxyXG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgbWItMSBzbWFsbCBmdy1zZW1pYm9sZCB0ZXh0LW11dGVkXCI+e3sgJ0thZG9vZ2x1OjpUcmFpbGVyUGxhdGUnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICA8aGl0LWxvb2t1cC1zZWxlY3RcclxuICAgICAgICAgICAgICAgIFtsb2FkRm5dPVwibG9hZFRyYWlsZXJQbGF0ZXNcIlxyXG4gICAgICAgICAgICAgICAgW2NvbHVtbnNdPVwidHJhaWxlclBsYXRlQ29sdW1uc1wiXHJcbiAgICAgICAgICAgICAgICBkaXNwbGF5TmFtZT1cInBsYXRlTm9cIlxyXG4gICAgICAgICAgICAgICAgW2VkaXRpbmdEYXRhXT1cInRyYWlsZXJQbGF0ZU5vXCJcclxuICAgICAgICAgICAgICAgIFtyZWFkT25seV09XCJpc0Zvcm1Mb2NrZWRcIlxyXG4gICAgICAgICAgICAgICAgKHNlbGVjdGVkKT1cIm9uVHJhaWxlclBsYXRlU2VsZWN0ZWQoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgIDwvaGl0LWxvb2t1cC1zZWxlY3Q+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgbWItM1wiPlxyXG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgbWItMSBzbWFsbCBmdy1zZW1pYm9sZCB0ZXh0LW11dGVkXCI+e3sgJ0thZG9vZ2x1OjpEcml2ZXJOYW1lJyB8IGFicExvY2FsaXphdGlvbiB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGR4LXRleHQtYm94XHJcbiAgICAgICAgICAgICAgICBbKHZhbHVlKV09XCJkcml2ZXJGdWxsTmFtZVwiXHJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0thZG9vZ2x1OjpFbnRlckRyaXZlck5hbWUnIHwgYWJwTG9jYWxpemF0aW9uXCJcclxuICAgICAgICAgICAgICAgIFtyZWFkT25seV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiPlxyXG4gICAgICAgICAgICAgIDwvZHgtdGV4dC1ib3g+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgbWItM1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yIG1iLTFcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgbWItMCBzbWFsbCBmdy1zZW1pYm9sZCB0ZXh0LW11dGVkXCI+e3sgaXNUY0NpdGl6ZW4gPyAoJ0thZG9vZ2x1OjpUY0lkZW50aXR5Tm8nIHwgYWJwTG9jYWxpemF0aW9uKSA6ICdLaW1saWsgTm8nIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxkeC1jaGVjay1ib3ggWyh2YWx1ZSldPVwiaXNUY0NpdGl6ZW5cIiBbcmVhZE9ubHldPVwiaXNVcGRhdGVNb2RlXCIgdGV4dD1cIlQuQy4gVmF0YW5kYcWfxLFcIj48L2R4LWNoZWNrLWJveD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZHgtdGV4dC1ib3hcclxuICAgICAgICAgICAgICAgIFsodmFsdWUpXT1cInRjTm9cIlxyXG4gICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImlzVGNDaXRpemVuID8gKCdLYWRvb2dsdTo6VGNJZGVudGl0eU5vJyB8IGFicExvY2FsaXphdGlvbikgOiAnS2ltbGlrIE5vJ1wiXHJcbiAgICAgICAgICAgICAgICBbcmVhZE9ubHldPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICB3aWR0aD1cIjEwMCVcIj5cclxuICAgICAgICAgICAgICA8L2R4LXRleHQtYm94PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8IS0tIFNhxJ8gc8O8dHVuOiBCZWxnZSAmIFnDvGsgLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG5cclxuICAgICAgICA8IS0tIEdydXAgMzogQmVsZ2UgJiBZw7xrIEJpbGdpbGVyaSAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyIHJvdW5kZWQgcC0zIG1iLTNcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJib3JkZXItYm90dG9tIHBiLTIgbWItMyBmdy1ib2xkIHRleHQtc2Vjb25kYXJ5XCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZmlsZS1hbHQgbWUtMlwiPjwvaT57eyAnS2Fkb29nbHU6OkRvY3VtZW50Q2FyZ29JbmZvJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xIHNtYWxsIGZ3LXNlbWlib2xkIHRleHQtbXV0ZWRcIj57eyAnS2Fkb29nbHU6OkJ1c2luZXNzUGFydG5lcicgfCBhYnBMb2NhbGl6YXRpb24gfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDxoaXQtbG9va3VwLXNlbGVjdFxyXG4gICAgICAgICAgICAgICAgW2xvYWRGbl09XCJsb2FkQWNjb3VudHNcIlxyXG4gICAgICAgICAgICAgICAgW2NvbHVtbnNdPVwiYWNjb3VudENvbHVtbnNcIlxyXG4gICAgICAgICAgICAgICAgZGlzcGxheU5hbWU9XCJ0aXRsZVwiXHJcbiAgICAgICAgICAgICAgICBbZWRpdGluZ0RhdGFdPVwiYWNjb3VudFRpdGxlXCJcclxuICAgICAgICAgICAgICAgIFtyZWFkT25seV09XCJpc0Zvcm1Mb2NrZWRcIlxyXG4gICAgICAgICAgICAgICAgKHNlbGVjdGVkKT1cIm9uQWNjb3VudFNlbGVjdGVkKCRldmVudClcIj5cclxuICAgICAgICAgICAgICA8L2hpdC1sb29rdXAtc2VsZWN0PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IG1iLTNcIj5cclxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIG1iLTEgc21hbGwgZnctc2VtaWJvbGQgdGV4dC1tdXRlZFwiPnt7ICdLYWRvb2dsdTo6V2F5YmlsbE51bWJlcicgfCBhYnBMb2NhbGl6YXRpb24gfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDxoaXQtbG9va3VwLXNlbGVjdFxyXG4gICAgICAgICAgICAgICAgW2xvYWRGbl09XCJsb2FkV2F5YmlsbHNcIlxyXG4gICAgICAgICAgICAgICAgW2NvbHVtbnNdPVwid2F5YmlsbENvbHVtbnNcIlxyXG4gICAgICAgICAgICAgICAgZGlzcGxheU5hbWU9XCJkb2NOdW1cIlxyXG4gICAgICAgICAgICAgICAga2V5RXhwcj1cImRvY0VudHJ5XCJcclxuICAgICAgICAgICAgICAgIFtlZGl0aW5nRGF0YV09XCJ3YXliaWxsTm9cIlxyXG4gICAgICAgICAgICAgICAgW3Nob3dEYXRlRmlsdGVyXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgW2RlZmF1bHREYXRlRnJvbV09XCJ3YXliaWxsRGVmYXVsdERhdGVGcm9tXCJcclxuICAgICAgICAgICAgICAgIFtkZWZhdWx0RGF0ZVRvXT1cIndheWJpbGxEZWZhdWx0RGF0ZVRvXCJcclxuICAgICAgICAgICAgICAgIChzZWxlY3RlZCk9XCJvbldheWJpbGxTZWxlY3RlZCgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgPC9oaXQtbG9va3VwLXNlbGVjdD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xIHNtYWxsIGZ3LXNlbWlib2xkIHRleHQtbXV0ZWRcIj57eyAnS2Fkb29nbHU6Okl0ZW1Db2RlJyB8IGFicExvY2FsaXphdGlvbiB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGhpdC1sb29rdXAtc2VsZWN0XHJcbiAgICAgICAgICAgICAgICBbbG9hZEZuXT1cImxvYWRTdG9ja0l0ZW1zXCJcclxuICAgICAgICAgICAgICAgIFtjb2x1bW5zXT1cInN0b2NrSXRlbUNvbHVtbnNcIlxyXG4gICAgICAgICAgICAgICAgZGlzcGxheU5hbWU9XCJuYW1lXCJcclxuICAgICAgICAgICAgICAgIFtlZGl0aW5nRGF0YV09XCJzdG9ja05hbWVcIlxyXG4gICAgICAgICAgICAgICAgKHNlbGVjdGVkKT1cIm9uU3RvY2tJdGVtU2VsZWN0ZWQoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgIDwvaGl0LWxvb2t1cC1zZWxlY3Q+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgbWItM1wiPlxyXG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgbWItMSBzbWFsbCBmdy1zZW1pYm9sZCB0ZXh0LW11dGVkXCI+e3sgJ0thZG9vZ2x1OjpDb250YWluZXJObycgfCBhYnBMb2NhbGl6YXRpb24gfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDxkeC10ZXh0LWJveFxyXG4gICAgICAgICAgICAgICAgWyh2YWx1ZSldPVwiY29udGFpbmVyTm9cIlxyXG4gICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidLYWRvb2dsdTo6TWFudWFsRW50cnknIHwgYWJwTG9jYWxpemF0aW9uXCJcclxuICAgICAgICAgICAgICAgIFtyZWFkT25seV09XCJpc0Zvcm1Mb2NrZWRcIlxyXG4gICAgICAgICAgICAgICAgd2lkdGg9XCIxMDAlXCI+XHJcbiAgICAgICAgICAgICAgPC9keC10ZXh0LWJveD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xIHNtYWxsIGZ3LXNlbWlib2xkIHRleHQtbXV0ZWRcIj57eyAnS2Fkb29nbHU6OkRlcGFydHVyZVBsYWNlJyB8IGFicExvY2FsaXphdGlvbiB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGR4LXRleHQtYm94XHJcbiAgICAgICAgICAgICAgICBbKHZhbHVlKV09XCJkZXBhcnR1cmVMb2NhdGlvblwiXHJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0thZG9vZ2x1OjpBdXRvRmlsbGVkRnJvbVdheWJpbGwnIHwgYWJwTG9jYWxpemF0aW9uXCJcclxuICAgICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiPlxyXG4gICAgICAgICAgICAgIDwvZHgtdGV4dC1ib3g+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgbWItM1wiPlxyXG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgbWItMSBzbWFsbCBmdy1zZW1pYm9sZCB0ZXh0LW11dGVkXCI+e3sgJ0thZG9vZ2x1OjpBcnJpdmFsUGxhY2UnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICA8ZHgtdGV4dC1ib3hcclxuICAgICAgICAgICAgICAgIFsodmFsdWUpXT1cImFycml2YWxMb2NhdGlvblwiXHJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICB3aWR0aD1cIjEwMCVcIj5cclxuICAgICAgICAgICAgICA8L2R4LXRleHQtYm94PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMiBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xIHNtYWxsIGZ3LXNlbWlib2xkIHRleHQtbXV0ZWRcIj57eyAnS2Fkb29nbHU6OkRlc2NyaXB0aW9uJyB8IGFicExvY2FsaXphdGlvbiB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGR4LXRleHQtYXJlYVxyXG4gICAgICAgICAgICAgICAgWyh2YWx1ZSldPVwiZGVzY3JpcHRpb25cIlxyXG4gICAgICAgICAgICAgICAgW2hlaWdodF09XCI3MFwiXHJcbiAgICAgICAgICAgICAgICBbcmVhZE9ubHldPVwiaXNGb3JtTG9ja2VkXCJcclxuICAgICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiPlxyXG4gICAgICAgICAgICAgIDwvZHgtdGV4dC1hcmVhPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgPC9kaXY+XHJcblxyXG5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0gUGhhc2UgMSBBbHQgQnV0b25sYXIgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIG10LTMgbWItM1wiPlxyXG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnlcIiAoY2xpY2spPVwiZ29CYWNrKClcIj5cclxuICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWFycm93LWxlZnQgbWUtMVwiPjwvaT4ge3sgJ0thZG9vZ2x1OjpCYWNrJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtMlwiPlxyXG4gICAgICAgIDxhYnAtYnV0dG9uXHJcbiAgICAgICAgICAqbmdJZj1cIiF3ZWlnaGluZ01vZGUgJiYgIWlzRm9ybUxvY2tlZFwiXHJcbiAgICAgICAgICBpY29uQ2xhc3M9XCJmYSBmYS1zYXZlXCJcclxuICAgICAgICAgIGJ1dHRvblR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgW2xvYWRpbmddPVwiaXNTYXZpbmdcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cInNhdmUoKVwiPlxyXG4gICAgICAgICAge3sgJ0thZG9vZ2x1OjpTYXZlJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgIDwvYWJwLWJ1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgKGNsaWNrKT1cImlsZXJpR2l0KClcIj5cclxuICAgICAgICAgIHt7ICdLYWRvb2dsdTo6TmV4dCcgfCBhYnBMb2NhbGl6YXRpb24gfX0gPGkgY2xhc3M9XCJmYSBmYS1hcnJvdy1yaWdodCBtcy0xXCI+PC9pPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8IS0tID09PT09PT09PT0gUEhBU0UgMjogVGFydMSxbSBQYW5lbGkgPT09PT09PT09PSAtLT5cclxuICA8ZGl2ICpuZ0lmPVwiZm9ybVBoYXNlID09PSAyICYmICFpc0Z1bGx5Q29tcGxldGVkXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2FyZFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiPlxyXG5cclxuICAgICAgICAgICAgPCEtLSBHcnVwIDE6IFRlcmF6aSAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlciByb3VuZGVkIHAtMyBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlci1ib3R0b20gcGItMiBtYi0zIGZ3LWJvbGQgdGV4dC1zZWNvbmRhcnkgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtYmFsYW5jZS1zY2FsZSBtZS0yXCI+PC9pPnt7ICdLYWRvb2dsdTo6V2VpZ2hpbmdQYW5lbCcgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwid2VpZ2hpbmdNb2RlXCIgY2xhc3M9XCJiYWRnZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIndlaWdoaW5nTW9kZSA9PT0gJ2ZpcnN0JyA/ICdiZy13YXJuaW5nIHRleHQtZGFyaycgOiAnYmctcHJpbWFyeSdcIj5cclxuICAgICAgICAgICAgICAgICAge3sgd2VpZ2hpbmdNb2RlTGFiZWwgfX1cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBnLTMgYWxpZ24taXRlbXMtc3RyZXRjaFwiPlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gU29sOiBDYW5sxLEgVGFydMSxbSAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNVwiIHN0eWxlPVwiZGlzcGxheTogZ3JpZDtcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgYmctbGlnaHQgaC0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IHRleHQtY2VudGVyIHB5LTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkIHNtYWxsIG1iLTEgZnctc2VtaWJvbGQgdGV4dC11cHBlcmNhc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgJ0thZG9vZ2x1OjpMaXZlV2VpZ2hpbmcnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc1NjYWxlQ29ubmVjdGluZyB8fCBpc1NjYWxlUmVjb25uZWN0aW5nXCIgY2xhc3M9XCJteS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzcGlubmVyLWJvcmRlciB0ZXh0LXNlY29uZGFyeVwiIHJvbGU9XCJzdGF0dXNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZpc3VhbGx5LWhpZGRlblwiPnt7IChpc1NjYWxlUmVjb25uZWN0aW5nID8gJ0thZG9vZ2x1OjpSZWNvbm5lY3RpbmcnIDogJ0thZG9vZ2x1OjpDb25uZWN0aW5nJykgfCBhYnBMb2NhbGl6YXRpb24gfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWlzU2NhbGVDb25uZWN0aW5nICYmICFpc1NjYWxlUmVjb25uZWN0aW5nICYmICFzY2FsZUNvbm5lY3Rpb25GYWlsZWRcIiBzdHlsZT1cImZvbnQtc2l6ZTogMi41cmVtOyBmb250LXdlaWdodDogYm9sZDsgbGV0dGVyLXNwYWNpbmc6IDAuMDVlbTtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgY3VycmVudFNjYWxlVmFsdWUgIT0gbnVsbCA/IChjdXJyZW50U2NhbGVWYWx1ZSB8IG51bWJlcjonMS4wLTAnKSArICcga2cnIDogJ+KAlCBrZycgfX1cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNjYWxlQ29ubmVjdGlvbkZhaWxlZFwiIGNsYXNzPVwidGV4dC1jZW50ZXIgcHktMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWNoYWluLWJyb2tlbiBmYS0yeCB0ZXh0LXNlY29uZGFyeSBtYi0yIGQtYmxvY2tcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1zZWNvbmRhcnkgZnctc2VtaWJvbGQgZC1ibG9ja1wiIHN0eWxlPVwiZm9udC1zaXplOiAwLjk1cmVtOyBsaW5lLWhlaWdodDogMS41O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdLYWRvb2dsdTo6U2NhbGVDb25uZWN0aW9uRmFpbGVkSW5saW5lJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIE9ydGE6IEFrxLHFnyBva3UgLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTIgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtYXJyb3ctcmlnaHQgZmEtMnggdGV4dC1tdXRlZFwiPjwvaT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gU2HEnzogU2FiaXRsZW5tacWfIERlxJ9lciArIFNhYml0bGUgYnV0b251IC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC01XCIgc3R5bGU9XCJkaXNwbGF5OiBncmlkO1wiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBoLTEwMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZml4ZWRTY2FsZVZhbHVlICE9IG51bGwgPyAnYm9yZGVyLXN1Y2Nlc3MnIDogJ2JnLWxpZ2h0J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiZml4ZWRTY2FsZVZhbHVlICE9IG51bGwgPyAncmdiYSgyNSwxMzUsODQsMC4wOCknIDogJydcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IHRleHQtY2VudGVyIHB5LTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzbWFsbCBtYi0xIGZ3LXNlbWlib2xkIHRleHQtdXBwZXJjYXNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZml4ZWRTY2FsZVZhbHVlICE9IG51bGwgPyAndGV4dC1zdWNjZXNzJyA6ICd0ZXh0LW11dGVkJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyAnS2Fkb29nbHU6OkZpeGVkVmFsdWUnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJmb250LXNpemU6IDIuNXJlbTsgZm9udC13ZWlnaHQ6IGJvbGQ7IGxldHRlci1zcGFjaW5nOiAwLjA1ZW07XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZml4ZWRTY2FsZVZhbHVlICE9IG51bGwgPyAndGV4dC1zdWNjZXNzJyA6ICcnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGZpeGVkU2NhbGVWYWx1ZSAhPSBudWxsID8gKGZpeGVkU2NhbGVWYWx1ZSB8IG51bWJlcjonMS4wLTAnKSArICcga2cnIDogJ+KAlCBrZycgfX1cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWlzRnVsbHlDb21wbGV0ZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1zdWNjZXNzIGJ0bi1sZyB3LTEwMCBtdC0yXCJcclxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY3VycmVudFNjYWxlVmFsdWUgPT0gbnVsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNhYml0bGUoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtbG9jayBtZS0yXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7ICdLYWRvb2dsdTo6Rml4JyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8IS0tIEdydXAgMjogVGFydMSxbSBLYXnEsXRsYXLEsSAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlciByb3VuZGVkIHAtMyBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlci1ib3R0b20gcGItMiBtYi0zIGZ3LWJvbGQgdGV4dC1zZWNvbmRhcnlcIj5cclxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtaGlzdG9yeSBtZS0yXCI+PC9pPnt7ICdLYWRvb2dsdTo6V2VpZ2hpbmdSZWNvcmRzJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGctM1wiPlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gxLBsayBUYXJ0xLFtIC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoLTEwMCByb3VuZGVkIHB5LTMgcHgtNFwiIHN0eWxlPVwiYm9yZGVyLWxlZnQ6IDRweCBzb2xpZCAjMGQ2ZWZkOyBiYWNrZ3JvdW5kOiAjZmZmO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXVwcGVyY2FzZSB0ZXh0LW11dGVkIHNtYWxsIGZ3LXNlbWlib2xkIG1iLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7ICdLYWRvb2dsdTo6Rmlyc3RXZWlnaGluZycgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZmlyc3RXZWlnaGluZ1ZhbHVlICE9IG51bGw7IGVsc2Ugbm9GaXJzdFdlaWdoaW5nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnctYm9sZFwiIHN0eWxlPVwiZm9udC1zaXplOiAxLjc1cmVtOyBsZXR0ZXItc3BhY2luZzogMC4wMmVtO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBmaXJzdFdlaWdoaW5nVmFsdWUgfCBudW1iZXI6JzEuMC0wJyB9fSBrZ1xyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZCBzbWFsbCBtdC0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdLYWRvb2dsdTo6T3BlcmF0b3InIHwgYWJwTG9jYWxpemF0aW9uIH19OiB7eyBmaXJzdE9wZXJhdG9yQ29kZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub0ZpcnN0V2VpZ2hpbmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZCBmc3QtaXRhbGljIG10LTJcIj57eyAnS2Fkb29nbHU6Ok5vdFlldERvbmUnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIFNvbiBUYXJ0xLFtIC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoLTEwMCByb3VuZGVkIHB5LTMgcHgtNFwiIHN0eWxlPVwiYm9yZGVyLWxlZnQ6IDRweCBzb2xpZCAjNmY0MmMxOyBiYWNrZ3JvdW5kOiAjZmZmO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXVwcGVyY2FzZSB0ZXh0LW11dGVkIHNtYWxsIGZ3LXNlbWlib2xkIG1iLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7ICdLYWRvb2dsdTo6TGFzdFdlaWdoaW5nJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJsYXN0V2VpZ2hpbmdWYWx1ZSAhPSBudWxsOyBlbHNlIG5vTGFzdFdlaWdoaW5nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnctYm9sZFwiIHN0eWxlPVwiZm9udC1zaXplOiAxLjc1cmVtOyBsZXR0ZXItc3BhY2luZzogMC4wMmVtO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBsYXN0V2VpZ2hpbmdWYWx1ZSB8IG51bWJlcjonMS4wLTAnIH19IGtnXHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkIHNtYWxsIG10LTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgJ0thZG9vZ2x1OjpPcGVyYXRvcicgfCBhYnBMb2NhbGl6YXRpb24gfX06IHt7IGxhc3RPcGVyYXRvckNvZGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9MYXN0V2VpZ2hpbmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZCBmc3QtaXRhbGljIG10LTJcIj57eyAnS2Fkb29nbHU6Ok5vdFlldERvbmUnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIE5ldCBZw7xrIChzYWRlY2Ugd2VpZ2hpbmdTdGVwPT09Myd0ZSkgLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIiAqbmdJZj1cIndlaWdoaW5nU3RlcCA9PT0gMyAmJiBuZXRXZWlnaHQgIT0gbnVsbFwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaC0xMDAgcm91bmRlZCBweS0zIHB4LTRcIiBzdHlsZT1cImJvcmRlci1sZWZ0OiA0cHggc29saWQgIzE5ODc1NDsgYmFja2dyb3VuZDogcmdiYSgyNSwxMzUsODQsMC4wNik7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtdXBwZXJjYXNlIHRleHQtbXV0ZWQgc21hbGwgZnctc2VtaWJvbGQgbWItMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3sgJ0thZG9vZ2x1OjpOZXRXZWlnaHQnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZ3LWJvbGRcIiBzdHlsZT1cImZvbnQtc2l6ZTogMS43NXJlbTsgbGV0dGVyLXNwYWNpbmc6IDAuMDJlbTsgY29sb3I6ICMxOTg3NTQ7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7eyBuZXRXZWlnaHQgfCBudW1iZXI6JzEuMC0wJyB9fSBrZ1xyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPCEtLSBQaGFzZSAyIEFsdCBCdXRvbmxhciAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gbXQtMyBtYi0zXCI+XHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeVwiIChjbGljayk9XCJnZXJpR2l0UGhhc2UoKVwiPlxyXG4gICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtYXJyb3ctbGVmdCBtZS0xXCI+PC9pPiB7eyAnS2Fkb29nbHU6OkJhY2snIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YWJwLWJ1dHRvblxyXG4gICAgICAgICpuZ0lmPVwiIWlzRnVsbHlDb21wbGV0ZWRcIlxyXG4gICAgICAgIGljb25DbGFzcz1cImZhIGZhLXNhdmVcIlxyXG4gICAgICAgIGJ1dHRvblR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgIFtsb2FkaW5nXT1cImlzU2F2aW5nXCJcclxuICAgICAgICAoY2xpY2spPVwic2F2ZSgpXCI+XHJcbiAgICAgICAge3sgJ0thZG9vZ2x1OjpTYXZlJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICA8L2FicC1idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPCEtLSA9PT09PT09PT09IFNVTU1BUlk6IFRhbWFtbGFuZMSxIEfDtnLDvG7DvG3DvCA9PT09PT09PT09IC0tPlxyXG4gIDxkaXYgKm5nSWY9XCJpc0Z1bGx5Q29tcGxldGVkXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2FyZFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG5cclxuICAgICAgICAgIDwhLS0gVGFtIGdlbmnFn2xpazogVGFydMSxbSBTb251w6dsYXLEsSAtLT5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlciByb3VuZGVkIHAtMyBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlci1ib3R0b20gcGItMiBtYi0zIGZ3LWJvbGQgdGV4dC1zZWNvbmRhcnlcIj5cclxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtYmFsYW5jZS1zY2FsZSBtZS0yXCI+PC9pPnt7ICdLYWRvb2dsdTo6V2VpZ2hpbmdSZXN1bHRzJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgZy0zXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSDEsGxrIFRhcnTEsW0gLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJnLXdoaXRlIHNoYWRvdy1zbSByb3VuZGVkIHB5LTMgcHgtNCBoLTEwMFwiIHN0eWxlPVwiYm9yZGVyLWxlZnQ6IDRweCBzb2xpZCAjMGQ2ZWZkO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXVwcGVyY2FzZSB0ZXh0LW11dGVkIHNtYWxsIGZ3LXNlbWlib2xkIG1iLTFcIj57eyAnS2Fkb29nbHU6OkZpcnN0V2VpZ2hpbmcnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZ3LWJvbGRcIiBzdHlsZT1cImZvbnQtc2l6ZTogMS43NXJlbTsgbGV0dGVyLXNwYWNpbmc6IDAuMDJlbTtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7IGZpcnN0V2VpZ2hpbmdWYWx1ZSAhPSBudWxsID8gKGZpcnN0V2VpZ2hpbmdWYWx1ZSB8IG51bWJlcjonMS4wLTAnKSArICcga2cnIDogJ+KAlCBrZycgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZCBzbWFsbCBtdC0xXCI+e3sgJ0thZG9vZ2x1OjpPcGVyYXRvcicgfCBhYnBMb2NhbGl6YXRpb24gfX06IHt7IGZpcnN0T3BlcmF0b3JDb2RlIHx8ICfigJQnIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSBTb24gVGFydMSxbSAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmctd2hpdGUgc2hhZG93LXNtIHJvdW5kZWQgcHktMyBweC00IGgtMTAwXCIgc3R5bGU9XCJib3JkZXItbGVmdDogNHB4IHNvbGlkICM2ZjQyYzE7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtdXBwZXJjYXNlIHRleHQtbXV0ZWQgc21hbGwgZnctc2VtaWJvbGQgbWItMVwiPnt7ICdLYWRvb2dsdTo6TGFzdFdlaWdoaW5nJyB8IGFicExvY2FsaXphdGlvbiB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmdy1ib2xkXCIgc3R5bGU9XCJmb250LXNpemU6IDEuNzVyZW07IGxldHRlci1zcGFjaW5nOiAwLjAyZW07XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7eyBsYXN0V2VpZ2hpbmdWYWx1ZSAhPSBudWxsID8gKGxhc3RXZWlnaGluZ1ZhbHVlIHwgbnVtYmVyOicxLjAtMCcpICsgJyBrZycgOiAn4oCUIGtnJyB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkIHNtYWxsIG10LTFcIj57eyAnS2Fkb29nbHU6Ok9wZXJhdG9yJyB8IGFicExvY2FsaXphdGlvbiB9fToge3sgbGFzdE9wZXJhdG9yQ29kZSB8fCAn4oCUJyB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gTmV0IFnDvGsgLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNoYWRvdy1zbSByb3VuZGVkIHB5LTMgcHgtNCBoLTEwMFwiIHN0eWxlPVwiYm9yZGVyLWxlZnQ6IDRweCBzb2xpZCAjMTk4NzU0OyBiYWNrZ3JvdW5kOiByZ2JhKDI1LDEzNSw4NCwwLjA2KTtcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC11cHBlcmNhc2UgdGV4dC1tdXRlZCBzbWFsbCBmdy1zZW1pYm9sZCBtYi0xXCI+e3sgJ0thZG9vZ2x1OjpOZXRXZWlnaHQnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZ3LWJvbGRcIiBzdHlsZT1cImZvbnQtc2l6ZTogMS43NXJlbTsgbGV0dGVyLXNwYWNpbmc6IDAuMDJlbTsgY29sb3I6ICMxOTg3NTQ7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7eyBuZXRXZWlnaHQgIT0gbnVsbCA/IChuZXRXZWlnaHQgfCBudW1iZXI6JzEuMC0wJykgKyAnIGtnJyA6ICfigJQga2cnIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDwhLS0gU29sIHPDvHR1bjogR2lyacWfL8OHxLFrxLHFnyArIEFyYcOnICYgU8O8csO8Y8O8IC0tPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcblxyXG4gICAgICAgICAgICA8IS0tIEdydXA6IEdpcmnFnyAvIMOHxLFrxLHFnyBCaWxnaWxlcmkgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJib3JkZXIgcm91bmRlZCBwLTMgbWItM1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJib3JkZXItYm90dG9tIHBiLTIgbWItMyBmdy1ib2xkIHRleHQtc2Vjb25kYXJ5XCI+XHJcbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXNpZ24taW4tYWx0IG1lLTJcIj48L2k+e3sgJ0thZG9vZ2x1OjpFbnRyeUV4aXRJbmZvJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItMiBweS0xXCIgc3R5bGU9XCJib3JkZXItYm90dG9tOiAxcHggc29saWQgI2YwZjBmMDtcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNSB0ZXh0LW11dGVkIHNtYWxsIGZ3LXNlbWlib2xkXCI+e3sgJ0thZG9vZ2x1OjpHYXRlJyB8IGFicExvY2FsaXphdGlvbiB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC03IGZ3LW1lZGl1bVwiPnt7IGdhdGVOYW1lIHx8ICfigJQnIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtYi0yIHB5LTFcIiBzdHlsZT1cImJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZjBmMGYwO1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC01IHRleHQtbXV0ZWQgc21hbGwgZnctc2VtaWJvbGRcIj5BcmHDpyBIYXJla2V0IFTDvHLDvDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC03IGZ3LW1lZGl1bVwiPnt7IGVudHJ5VHlwZU5hbWUgfHwgJ+KAlCcgfX08L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTIgcHktMVwiIHN0eWxlPVwiYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNmMGYwZjA7XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTUgdGV4dC1tdXRlZCBzbWFsbCBmdy1zZW1pYm9sZFwiPnt7ICdLYWRvb2dsdTo6RW50cnlEYXRlJyB8IGFicExvY2FsaXphdGlvbiB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC03IGZ3LW1lZGl1bVwiPnt7IGVudHJ5RGF0ZSA/IChlbnRyeURhdGUgfCBkYXRlOidkZC5NTS55eXl5JykgOiAn4oCUJyB9fSB7eyBlbnRyeVRpbWUgfHwgJycgfX08L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTIgcHktMVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC01IHRleHQtbXV0ZWQgc21hbGwgZnctc2VtaWJvbGRcIj57eyAnS2Fkb29nbHU6OkV4aXREYXRlJyB8IGFicExvY2FsaXphdGlvbiB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC03IGZ3LW1lZGl1bVwiPnt7IGV4aXREYXRlID8gKGV4aXREYXRlIHwgZGF0ZTonZGQuTU0ueXl5eScpIDogJ+KAlCcgfX0ge3sgZXhpdFRpbWUgfHwgJycgfX08L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8IS0tIEdydXA6IEFyYcOnICYgU8O8csO8Y8O8IEJpbGdpbGVyaSAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlciByb3VuZGVkIHAtMyBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlci1ib3R0b20gcGItMiBtYi0zIGZ3LWJvbGQgdGV4dC1zZWNvbmRhcnlcIj5cclxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtdHJ1Y2sgbWUtMlwiPjwvaT57eyAnS2Fkb29nbHU6OlZlaGljbGVEcml2ZXJJbmZvJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItMiBweS0xXCIgc3R5bGU9XCJib3JkZXItYm90dG9tOiAxcHggc29saWQgI2YwZjBmMDtcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNSB0ZXh0LW11dGVkIHNtYWxsIGZ3LXNlbWlib2xkXCI+e3sgJ0thZG9vZ2x1OjpUcnVja1BsYXRlJyB8IGFicExvY2FsaXphdGlvbiB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC03IGZ3LW1lZGl1bVwiPnt7IHRydWNrUGxhdGVObyB8fCAn4oCUJyB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItMiBweS0xXCIgc3R5bGU9XCJib3JkZXItYm90dG9tOiAxcHggc29saWQgI2YwZjBmMDtcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNSB0ZXh0LW11dGVkIHNtYWxsIGZ3LXNlbWlib2xkXCI+e3sgJ0thZG9vZ2x1OjpUcmFpbGVyUGxhdGUnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTcgZnctbWVkaXVtXCI+e3sgdHJhaWxlclBsYXRlTm8gfHwgJ+KAlCcgfX08L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTIgcHktMVwiIHN0eWxlPVwiYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNmMGYwZjA7XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTUgdGV4dC1tdXRlZCBzbWFsbCBmdy1zZW1pYm9sZFwiPnt7ICdLYWRvb2dsdTo6RHJpdmVyTmFtZScgfCBhYnBMb2NhbGl6YXRpb24gfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNyBmdy1tZWRpdW1cIj57eyBkcml2ZXJGdWxsTmFtZSB8fCAn4oCUJyB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItMiBweS0xXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTUgdGV4dC1tdXRlZCBzbWFsbCBmdy1zZW1pYm9sZFwiPnt7ICdLYWRvb2dsdTo6VGNJZGVudGl0eU5vJyB8IGFicExvY2FsaXphdGlvbiB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC03IGZ3LW1lZGl1bVwiPnt7IHRjTm8gfHwgJ+KAlCcgfX08L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPCEtLSBTYcSfIHPDvHR1bjogQmVsZ2UgJiBZw7xrIC0tPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcblxyXG4gICAgICAgICAgICA8IS0tIEdydXA6IEJlbGdlICYgWcO8ayBCaWxnaWxlcmkgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJib3JkZXIgcm91bmRlZCBwLTMgbWItM1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJib3JkZXItYm90dG9tIHBiLTIgbWItMyBmdy1ib2xkIHRleHQtc2Vjb25kYXJ5XCI+XHJcbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWZpbGUtYWx0IG1lLTJcIj48L2k+e3sgJ0thZG9vZ2x1OjpEb2N1bWVudENhcmdvSW5mbycgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTIgcHktMVwiIHN0eWxlPVwiYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNmMGYwZjA7XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTUgdGV4dC1tdXRlZCBzbWFsbCBmdy1zZW1pYm9sZFwiPnt7ICdLYWRvb2dsdTo6RHJpdmVyQ29kZScgfCBhYnBMb2NhbGl6YXRpb24gfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNyBmdy1tZWRpdW1cIj57eyBkcml2ZXJOYW1lIHx8ICfigJQnIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtYi0yIHB5LTFcIiBzdHlsZT1cImJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZjBmMGYwO1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC01IHRleHQtbXV0ZWQgc21hbGwgZnctc2VtaWJvbGRcIj57eyAnS2Fkb29nbHU6OkJ1c2luZXNzUGFydG5lcicgfCBhYnBMb2NhbGl6YXRpb24gfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNyBmdy1tZWRpdW1cIj57eyBhY2NvdW50VGl0bGUgfHwgJ+KAlCcgfX08L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTIgcHktMVwiIHN0eWxlPVwiYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNmMGYwZjA7XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTUgdGV4dC1tdXRlZCBzbWFsbCBmdy1zZW1pYm9sZFwiPnt7ICdLYWRvb2dsdTo6V2F5YmlsbE51bWJlcicgfCBhYnBMb2NhbGl6YXRpb24gfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNyBmdy1tZWRpdW1cIj57eyB3YXliaWxsTm8gfHwgJ+KAlCcgfX08L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTIgcHktMVwiIHN0eWxlPVwiYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNmMGYwZjA7XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTUgdGV4dC1tdXRlZCBzbWFsbCBmdy1zZW1pYm9sZFwiPnt7ICdLYWRvb2dsdTo6U2NhbGVDb2RlJyB8IGFicExvY2FsaXphdGlvbiB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC03IGZ3LW1lZGl1bVwiPnt7IHNjYWxlTmFtZSB8fCAn4oCUJyB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItMiBweS0xXCIgc3R5bGU9XCJib3JkZXItYm90dG9tOiAxcHggc29saWQgI2YwZjBmMDtcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNSB0ZXh0LW11dGVkIHNtYWxsIGZ3LXNlbWlib2xkXCI+e3sgJ0thZG9vZ2x1OjpJdGVtQ29kZScgfCBhYnBMb2NhbGl6YXRpb24gfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNyBmdy1tZWRpdW1cIj57eyBzdG9ja05hbWUgfHwgJ+KAlCcgfX08L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTIgcHktMVwiIHN0eWxlPVwiYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNmMGYwZjA7XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTUgdGV4dC1tdXRlZCBzbWFsbCBmdy1zZW1pYm9sZFwiPnt7ICdLYWRvb2dsdTo6Q29udGFpbmVyTm8nIHwgYWJwTG9jYWxpemF0aW9uIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTcgZnctbWVkaXVtXCI+e3sgY29udGFpbmVyTm8gfHwgJ+KAlCcgfX08L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTIgcHktMVwiIHN0eWxlPVwiYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNmMGYwZjA7XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTUgdGV4dC1tdXRlZCBzbWFsbCBmdy1zZW1pYm9sZFwiPnt7ICdLYWRvb2dsdTo6RGVwYXJ0dXJlVG9BcnJpdmFsJyB8IGFicExvY2FsaXphdGlvbiB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC03IGZ3LW1lZGl1bVwiPnt7IChkZXBhcnR1cmVMb2NhdGlvbiB8fCAn4oCUJykgKyAnIOKGkiAnICsgKGFycml2YWxMb2NhdGlvbiB8fCAn4oCUJykgfX08L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTIgcHktMVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC01IHRleHQtbXV0ZWQgc21hbGwgZnctc2VtaWJvbGRcIj57eyAnS2Fkb29nbHU6OkRlc2NyaXB0aW9uJyB8IGFicExvY2FsaXphdGlvbiB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC03IGZ3LW1lZGl1bVwiPnt7IGRlc2NyaXB0aW9uIHx8ICfigJQnIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIEFsdCBCdXRvbmxhciAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gbXQtMyBtYi0zXCI+XHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeVwiIChjbGljayk9XCJnb0JhY2soKVwiPlxyXG4gICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtYXJyb3ctbGVmdCBtZS0xXCI+PC9pPiB7eyAnS2Fkb29nbHU6OkJhY2tUb0xpc3QnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgKm5nSWY9XCJlbnRyeVR5cGVNYWxHQyAmJiByZWNvcmQ/LnVfU3RhdHVzID09PSAnMidcIlxyXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi13YXJuaW5nXCJcclxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICBbZGlzYWJsZWRdPVwiaXNEb2luZ0dvb2RzTW92ZW1lbnRcIlxyXG4gICAgICAgIChjbGljayk9XCJkb0dvb2RzTW92ZW1lbnQoKVwiPlxyXG4gICAgICAgIDxpIFtjbGFzc109XCJpc0RvaW5nR29vZHNNb3ZlbWVudCA/ICdmYSBmYS1zcGlubmVyIGZhLXNwaW4gbWUtMScgOiAnZmEgZmEtZXhjaGFuZ2UgbWUtMSdcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XHJcbiAgICAgICAge3sgJ0thZG9vZ2x1OjpNYWxHY1lhcCcgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbjwvYWJwLXBhZ2U+XHJcbiJdfQ==