@hitsoft/abp.kadooglu 1.0.11 → 1.0.13

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 (34) hide show
  1. package/esm2020/lib/hit-components/hit-carrier-person/hit-carrier-person-form/hit-carrier-person-form.component.mjs +4 -3
  2. package/esm2020/lib/hit-components/hit-entry-weighing/hit-entry-weighing-form/hit-entry-weighing-form.component.mjs +278 -109
  3. package/esm2020/lib/hit-components/hit-entry-weighing/hit-entry-weighing-list/hit-entry-weighing-list.component.mjs +40 -29
  4. package/esm2020/lib/hit-components/hit-factory-entry/hit-factory-entry-form/hit-factory-entry-form.component.mjs +52 -6
  5. package/esm2020/lib/hit-components/hit-factory-entry/hit-factory-entry-list/hit-factory-entry-list.component.mjs +3 -3
  6. package/esm2020/lib/hit-components/hit-knt-item-esl/hit-knt-item-esl-form/hit-knt-item-esl-form.component.mjs +4 -4
  7. package/esm2020/lib/hit-components/hit-vehicle-type/hit-vehicle-type-form/hit-vehicle-type-form.component.mjs +1 -1
  8. package/esm2020/lib/hit-proxy/hit-carrier-person/models.mjs +1 -1
  9. package/esm2020/lib/hit-proxy/hit-entry-weighing/hit-entry-weighing.service.mjs +2 -2
  10. package/esm2020/lib/hit-proxy/hit-entry-weighing/models.mjs +1 -1
  11. package/esm2020/lib/hit-proxy/hit-factory-entry/models.mjs +1 -1
  12. package/esm2020/lib/hit-proxy/hit-purchase-delivery-note/hit-purchase-delivery-note.service.mjs +4 -1
  13. package/esm2020/lib/hit-proxy/hit-purchase-delivery-note/models.mjs +1 -1
  14. package/esm2020/lib/hit-proxy/hit-stock-transfer/hit-stock-transfer.service.mjs +4 -1
  15. package/esm2020/lib/hit-proxy/hit-stock-transfer/models.mjs +1 -1
  16. package/esm2020/lib/services/scale-signalr.service.mjs +4 -1
  17. package/esm2020/lib/shared/hit-modal/hit-modal.component.mjs +68 -16
  18. package/fesm2015/hitsoft-abp.kadooglu.mjs +456 -166
  19. package/fesm2015/hitsoft-abp.kadooglu.mjs.map +1 -1
  20. package/fesm2020/hitsoft-abp.kadooglu.mjs +444 -160
  21. package/fesm2020/hitsoft-abp.kadooglu.mjs.map +1 -1
  22. package/lib/hit-components/hit-entry-weighing/hit-entry-weighing-form/hit-entry-weighing-form.component.d.ts +20 -7
  23. package/lib/hit-components/hit-entry-weighing/hit-entry-weighing-list/hit-entry-weighing-list.component.d.ts +8 -1
  24. package/lib/hit-components/hit-factory-entry/hit-factory-entry-form/hit-factory-entry-form.component.d.ts +2 -0
  25. package/lib/hit-proxy/hit-carrier-person/models.d.ts +2 -0
  26. package/lib/hit-proxy/hit-entry-weighing/models.d.ts +5 -0
  27. package/lib/hit-proxy/hit-factory-entry/models.d.ts +13 -4
  28. package/lib/hit-proxy/hit-purchase-delivery-note/hit-purchase-delivery-note.service.d.ts +1 -0
  29. package/lib/hit-proxy/hit-purchase-delivery-note/models.d.ts +6 -0
  30. package/lib/hit-proxy/hit-stock-transfer/hit-stock-transfer.service.d.ts +1 -0
  31. package/lib/hit-proxy/hit-stock-transfer/models.d.ts +2 -0
  32. package/lib/services/scale-signalr.service.d.ts +2 -0
  33. package/lib/shared/hit-modal/hit-modal.component.d.ts +25 -2
  34. package/package.json +1 -1
@@ -58,6 +58,7 @@ export class HitFactoryEntryFormComponent {
58
58
  this.exitDateTime = null;
59
59
  this.selectedTypeCode = '';
60
60
  this.selectedTypeName = '';
61
+ this.selectedType = null;
61
62
  this.selectedPlateNo = '';
62
63
  this.tcNo = '';
63
64
  this.selectedCarrierName = '';
@@ -84,7 +85,15 @@ export class HitFactoryEntryFormComponent {
84
85
  this.isLoading = false;
85
86
  }
86
87
  ngOnInit() {
87
- this.vehicleTypeService.getList().subscribe(d => (this.typeData = d));
88
+ this.vehicleTypeService.getList().subscribe(d => {
89
+ this.typeData = d;
90
+ // Form düzenleme modunda açıksa typeData yüklendikten sonra selectedType'ı çöz
91
+ if (this.record?.u_EntryType && !this.selectedType) {
92
+ const found = d.find(t => t.code === this.record.u_EntryType);
93
+ if (found)
94
+ this.selectedType = found;
95
+ }
96
+ });
88
97
  this.carrierPersonService.getList().subscribe(d => (this.carrierData = d));
89
98
  this.businessPartnerService.getList().subscribe(d => (this.businessPartnerData = d));
90
99
  this.userGateService.getMyGates().subscribe(d => (this.gateData = d));
@@ -97,6 +106,7 @@ export class HitFactoryEntryFormComponent {
97
106
  }
98
107
  initForm() {
99
108
  this.isTcCitizen = true;
109
+ this.selectedType = null;
100
110
  this.plateInputMode = 'lookup';
101
111
  this.manualPlateNo = '';
102
112
  this.trailerPlateInputMode = 'lookup';
@@ -120,6 +130,14 @@ export class HitFactoryEntryFormComponent {
120
130
  this.description = this.record.u_Description;
121
131
  this.selectedBusinessPartnerCode = this.record.u_CardCode ?? '';
122
132
  this.selectedBusinessPartnerName = this.businessPartnerData.find(p => p.cardCode === this.record.u_CardCode)?.cardName ?? this.record.u_CardCode ?? '';
133
+ // Carrier'dan TC vatandaşı bilgisini oku
134
+ const carrier = this.carrierData.find(c => c.code === this.record.u_TcNo);
135
+ this.isTcCitizen = carrier ? carrier.u_TcVtndsiMi !== 'N' : true;
136
+ // Seçili tipte Mal GÇ bilgisini çöz
137
+ const foundType = this.typeData.find(t => t.code === this.record.u_EntryType);
138
+ if (foundType) {
139
+ this.selectedType = foundType;
140
+ }
123
141
  }
124
142
  else {
125
143
  this.gateCode = this.defaultGateCode;
@@ -127,6 +145,7 @@ export class HitFactoryEntryFormComponent {
127
145
  this.exitDateTime = null;
128
146
  this.selectedTypeCode = '';
129
147
  this.selectedTypeName = '';
148
+ this.selectedType = null;
130
149
  this.selectedPlateNo = '';
131
150
  this.tcNo = '';
132
151
  this.selectedCarrierName = '';
@@ -145,10 +164,34 @@ export class HitFactoryEntryFormComponent {
145
164
  return d;
146
165
  }
147
166
  onTypeSelected(e) {
148
- if (!e)
167
+ if (!e) {
168
+ // Hareket tipi temizlendi — ilgili tüm alanları sıfırla ve gizle
169
+ this.selectedTypeCode = '';
170
+ this.selectedTypeName = '';
171
+ this.selectedType = null;
172
+ this.selectedPlateNo = '';
173
+ this.manualPlateNo = '';
174
+ this.plateInputMode = 'lookup';
175
+ this.selectedTrailerPlateNo = '';
176
+ this.manualTrailerPlateNo = '';
177
+ this.trailerPlateInputMode = 'lookup';
178
+ this.tcNo = '';
179
+ this.selectedCarrierName = '';
180
+ this.isNewCarrier = false;
181
+ this.newCarrierFirstname = '';
182
+ this.newCarrierLastname = '';
183
+ this.newCarrierTel = '';
184
+ this.tcLookupMode = false;
185
+ this.selectedBusinessPartnerCode = '';
186
+ this.selectedBusinessPartnerName = '';
149
187
  return;
188
+ }
150
189
  this.selectedTypeCode = e.code;
151
190
  this.selectedTypeName = e.name;
191
+ this.selectedType = e;
192
+ }
193
+ get showExtraFields() {
194
+ return !!this.selectedTypeCode;
152
195
  }
153
196
  onPlateSelected(e) {
154
197
  if (!e)
@@ -182,6 +225,7 @@ export class HitFactoryEntryFormComponent {
182
225
  return;
183
226
  this.selectedCarrierName = e.name;
184
227
  this.tcNo = e.code;
228
+ this.isTcCitizen = e.u_TcVtndsiMi !== 'N';
185
229
  this.isNewCarrier = false;
186
230
  this.tcLookupMode = false;
187
231
  }
@@ -210,6 +254,7 @@ export class HitFactoryEntryFormComponent {
210
254
  this.isTcQuerying = false;
211
255
  if (carrier) {
212
256
  this.selectedCarrierName = carrier.name;
257
+ this.isTcCitizen = carrier.u_TcVtndsiMi !== 'N';
213
258
  this.isNewCarrier = false;
214
259
  }
215
260
  else {
@@ -275,6 +320,8 @@ export class HitFactoryEntryFormComponent {
275
320
  ? this.exitDateTime.getHours() * 100 + this.exitDateTime.getMinutes()
276
321
  : undefined,
277
322
  u_EntryType: this.selectedTypeCode,
323
+ u_Description: this.description,
324
+ u_TcVtndsiMi: this.isTcCitizen ? 'Y' : 'N',
278
325
  u_Plate: effectivePlateNo,
279
326
  u_DorsePlate: effectiveTrailerPlateNo || undefined,
280
327
  u_TcNo: this.tcNo.trim(),
@@ -285,7 +332,6 @@ export class HitFactoryEntryFormComponent {
285
332
  u_DriverLastname: this.isNewCarrier ? this.newCarrierLastname.trim() : undefined,
286
333
  u_DriverTel: this.isNewCarrier ? (this.newCarrierTel.trim() || undefined) : undefined,
287
334
  u_CardCode: this.selectedBusinessPartnerCode,
288
- u_Description: this.description,
289
335
  };
290
336
  const doSave = () => {
291
337
  const obs$ = this.record?.docEntry
@@ -362,10 +408,10 @@ export class HitFactoryEntryFormComponent {
362
408
  }
363
409
  }
364
410
  HitFactoryEntryFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: HitFactoryEntryFormComponent, deps: [{ token: i1.ConfirmationService }, { token: i2.HitFactoryEntryService }, { token: i3.HitCarrierPersonService }, { token: i4.HitPlateService }, { token: i5.HitVehicleTypeService }, { token: i6.HitBusinessPartnerService }, { token: i7.HitUserGateService }, { token: i8.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });
365
- HitFactoryEntryFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: HitFactoryEntryFormComponent, selector: "lib-hit-factory-entry-form", inputs: { visible: "visible", record: "record" }, outputs: { visibleChange: "visibleChange", saved: "saved", cancelled: "cancelled" }, usesOnChanges: true, ngImport: i0, template: "<abp-modal [visible]=\"visible\" (visibleChange)=\"onModalVisibleChange($event)\" [options]=\"{ size: 'lg', backdrop: 'static' }\">\r\n <ng-template #abpHeader>\r\n <h3>{{ record?.docEntry ? ('AbpUi::Edit' | abpLocalization) : ('Kadooglu::NewRecord' | abpLocalization) }}</h3>\r\n </ng-template>\r\n\r\n <ng-template #abpBody>\r\n\r\n <!-- Giri\u015F / \u00C7\u0131k\u0131\u015F Bilgileri -->\r\n <div class=\"border rounded p-3 mb-2\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-clock me-2\"></i>{{ 'Kadooglu::EntryExitInfo' | abpLocalization }}\r\n </div>\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::EntryDateTime' | 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 width=\"100%\">\r\n </dx-date-box>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::ExitDateTime' | 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 [showClearButton]=\"true\"\r\n width=\"100%\">\r\n </dx-date-box>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-4\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::Gate' | abpLocalization }}</label>\r\n <dx-select-box\r\n [(value)]=\"gateCode\"\r\n [dataSource]=\"gateData\"\r\n displayExpr=\"name\"\r\n valueExpr=\"code\"\r\n [placeholder]=\"'Kadooglu::SelectGate' | abpLocalization\"\r\n width=\"100%\">\r\n </dx-select-box>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Ara\u00E7 Bilgileri -->\r\n <div class=\"border rounded p-3 mb-2\">\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::VehicleInfo' | abpLocalization }}\r\n </div>\r\n\r\n <div class=\"mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n Ara\u00E7 Hareket T\u00FCr\u00FC <span class=\"text-danger\">*</span>\r\n </label>\r\n <hit-lookup-select\r\n [getFn]=\"typeData\"\r\n [columns]=\"typeColumns\"\r\n displayName=\"name\"\r\n [editingData]=\"selectedTypeName\"\r\n (selected)=\"onTypeSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n\r\n <div class=\"mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::Plate' | abpLocalization }} <span class=\"text-danger\">*</span>\r\n </label>\r\n <ng-container *ngIf=\"plateInputMode === 'lookup'\">\r\n <hit-lookup-select\r\n [loadFn]=\"loadVehiclePlates\"\r\n [columns]=\"plateColumns\"\r\n displayName=\"code\"\r\n keyExpr=\"code\"\r\n [editingData]=\"selectedPlateNo\"\r\n (selected)=\"onPlateSelected($event)\">\r\n </hit-lookup-select>\r\n <div class=\"mt-1\">\r\n <a href=\"javascript:void(0)\" class=\"small text-primary\" (click)=\"plateInputMode = 'manual'\">\r\n <i class=\"fa fa-keyboard me-1\"></i> {{ 'Kadooglu::ManualEntry' | abpLocalization }}\r\n </a>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"plateInputMode === 'manual'\">\r\n <dx-text-box\r\n [(value)]=\"manualPlateNo\"\r\n [placeholder]=\"'Kadooglu::EnterPlate' | abpLocalization\"\r\n width=\"100%\"\r\n (onFocusOut)=\"onManualPlateFocusOut()\">\r\n </dx-text-box>\r\n <div class=\"mt-1\">\r\n <a href=\"javascript:void(0)\" class=\"small text-primary\" (click)=\"plateInputMode = 'lookup'\">\r\n <i class=\"fa fa-list me-1\"></i> {{ 'Kadooglu::SelectFromList' | abpLocalization }}\r\n </a>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <div class=\"mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::DorsePlate' | abpLocalization }}\r\n </label>\r\n <ng-container *ngIf=\"trailerPlateInputMode === 'lookup'\">\r\n <hit-lookup-select\r\n [loadFn]=\"loadTrailerPlates\"\r\n [columns]=\"plateColumns\"\r\n displayName=\"code\"\r\n keyExpr=\"code\"\r\n [editingData]=\"selectedTrailerPlateNo\"\r\n (selected)=\"onTrailerPlateSelected($event)\">\r\n </hit-lookup-select>\r\n <div class=\"mt-1\">\r\n <a href=\"javascript:void(0)\" class=\"small text-primary\" (click)=\"trailerPlateInputMode = 'manual'\">\r\n <i class=\"fa fa-keyboard me-1\"></i> {{ 'Kadooglu::ManualEntry' | abpLocalization }}\r\n </a>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"trailerPlateInputMode === 'manual'\">\r\n <dx-text-box\r\n [(value)]=\"manualTrailerPlateNo\"\r\n [placeholder]=\"'Kadooglu::EnterPlate' | abpLocalization\"\r\n width=\"100%\"\r\n (onFocusOut)=\"onManualTrailerPlateFocusOut()\">\r\n </dx-text-box>\r\n <div class=\"mt-1\">\r\n <a href=\"javascript:void(0)\" class=\"small text-primary\" (click)=\"trailerPlateInputMode = 'lookup'\">\r\n <i class=\"fa fa-list me-1\"></i> {{ 'Kadooglu::SelectFromList' | abpLocalization }}\r\n </a>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n\r\n <!-- S\u00FCr\u00FCc\u00FC & Firma -->\r\n <div class=\"border rounded p-3 mb-2\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-id-card me-2\"></i>{{ 'Kadooglu::DriverAndCompany' | abpLocalization }}\r\n </div>\r\n\r\n <div class=\"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\">\r\n {{ isTcCitizen ? ('Kadooglu::TcIdentityNo' | abpLocalization) : 'Kimlik No' }} <span class=\"text-danger\">*</span>\r\n </label>\r\n <dx-check-box [(value)]=\"isTcCitizen\" text=\"T.C. Vatanda\u015F\u0131\"></dx-check-box>\r\n </div>\r\n <ng-container *ngIf=\"!tcLookupMode\">\r\n <div class=\"d-flex gap-2\">\r\n <dx-text-box\r\n [(value)]=\"tcNo\"\r\n [placeholder]=\"isTcCitizen ? ('Kadooglu::TcIdentityNo' | abpLocalization) : 'Kimlik No'\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n <button type=\"button\" class=\"btn btn-outline-primary btn-sm text-nowrap\"\r\n [disabled]=\"isTcQuerying\"\r\n (click)=\"queryCarrierByTcNo()\">\r\n <i class=\"fa fa-search me-1\"></i>\r\n {{ (isTcQuerying ? 'Kadooglu::Querying' : 'Kadooglu::Query') | abpLocalization }}\r\n </button>\r\n </div>\r\n <div class=\"mt-1\">\r\n <a href=\"javascript:void(0)\" class=\"small text-primary\" (click)=\"tcLookupMode = true\">\r\n <i class=\"fa fa-list me-1\"></i> {{ 'Kadooglu::SelectFromList' | abpLocalization }}\r\n </a>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"tcLookupMode\">\r\n <hit-lookup-select\r\n [getFn]=\"carrierData\"\r\n [columns]=\"carrierColumns\"\r\n displayName=\"name\"\r\n [editingData]=\"selectedCarrierName\"\r\n (selected)=\"onCarrierLookupSelected($event)\">\r\n </hit-lookup-select>\r\n <div class=\"mt-1\">\r\n <a href=\"javascript:void(0)\" class=\"small text-primary\" (click)=\"tcLookupMode = false\">\r\n <i class=\"fa fa-keyboard me-1\"></i> {{ 'Kadooglu::QueryByTc' | abpLocalization }}\r\n </a>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <!-- Mevcut s\u00FCr\u00FCc\u00FC: sadece ad\u0131 g\u00F6ster (readonly) -->\r\n <ng-container *ngIf=\"!isNewCarrier\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::DriverNameSurname' | abpLocalization }}\r\n </label>\r\n <dx-text-box\r\n [(value)]=\"selectedCarrierName\"\r\n [disabled]=\"true\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n </ng-container>\r\n\r\n <!-- Yeni s\u00FCr\u00FCc\u00FC: Ad, Soyad, Telefon alanlar\u0131n\u0131 g\u00F6ster -->\r\n <ng-container *ngIf=\"isNewCarrier\">\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::FirstName' | abpLocalization }} <span class=\"text-danger\">*</span>\r\n </label>\r\n <dx-text-box\r\n [(value)]=\"newCarrierFirstname\"\r\n [placeholder]=\"'Kadooglu::FirstName' | abpLocalization\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::LastName' | abpLocalization }} <span class=\"text-danger\">*</span>\r\n </label>\r\n <dx-text-box\r\n [(value)]=\"newCarrierLastname\"\r\n [placeholder]=\"'Kadooglu::LastName' | abpLocalization\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n </div>\r\n <div class=\"mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::Phone' | abpLocalization }}\r\n </label>\r\n <dx-text-box\r\n [(value)]=\"newCarrierTel\"\r\n [placeholder]=\"'Kadooglu::Phone' | abpLocalization\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n <div class=\"alert alert-info small py-1 mb-3\">\r\n <i class=\"fa fa-info-circle me-1\"></i>\r\n {{ 'Kadooglu::NewDriverAlert' | abpLocalization }}\r\n </div>\r\n </ng-container>\r\n\r\n <div class=\"mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::BusinessPartner' | abpLocalization }}\r\n </label>\r\n <hit-lookup-select\r\n [getFn]=\"businessPartnerData\"\r\n [columns]=\"businessPartnerColumns\"\r\n displayName=\"cardName\"\r\n keyExpr=\"cardCode\"\r\n [editingData]=\"selectedBusinessPartnerName\"\r\n (selected)=\"onBusinessPartnerSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n </div>\r\n\r\n <!-- A\u00E7\u0131klama -->\r\n <div class=\"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]=\"80\"\r\n width=\"100%\">\r\n </dx-text-area>\r\n </div>\r\n\r\n </ng-template>\r\n\r\n <ng-template #abpFooter>\r\n <button type=\"button\" class=\"btn btn-secondary\" (click)=\"cancel()\">\r\n {{ 'AbpUi::Cancel' | abpLocalization }}\r\n </button>\r\n <abp-button\r\n iconClass=\"fa fa-save\"\r\n buttonType=\"button\"\r\n [loading]=\"isLoading\"\r\n (click)=\"save()\">\r\n {{ 'AbpUi::Save' | abpLocalization }}\r\n </abp-button>\r\n </ng-template>\r\n</abp-modal>\r\n", dependencies: [{ kind: "directive", type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i1.ButtonComponent, selector: "abp-button", inputs: ["buttonId", "buttonClass", "buttonType", "formName", "iconClass", "loading", "disabled", "attributes"], outputs: ["click", "focus", "blur", "abpClick", "abpFocus", "abpBlur"] }, { kind: "component", type: i1.ModalComponent, selector: "abp-modal", inputs: ["visible", "busy", "options", "suppressUnsavedChangesWarning"], outputs: ["visibleChange", "init", "appear", "disappear"] }, { kind: "component", type: i10.HitModalComponent, selector: "hit-lookup-select", inputs: ["displayName", "keyExpr", "modalSize", "getFn", "loadFn", "columns", "isVisible", "disabled", "readOnly", "showDateFilter", "defaultDateFrom", "defaultDateTo", "editingData"], outputs: ["selected"] }, { kind: "component", type: i11.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: i11.DxSelectBoxComponent, selector: "dx-select-box", inputs: ["acceptCustomValue", "accessKey", "activeStateEnabled", "buttons", "customItemCreateEvent", "dataSource", "deferRendering", "disabled", "displayExpr", "displayValue", "dropDownButtonTemplate", "dropDownOptions", "elementAttr", "fieldTemplate", "focusStateEnabled", "grouped", "groupTemplate", "height", "hint", "hoverStateEnabled", "inputAttr", "isValid", "items", "itemTemplate", "label", "labelMode", "maxLength", "minSearchLength", "name", "noDataText", "opened", "openOnFieldClick", "placeholder", "readOnly", "rtlEnabled", "searchEnabled", "searchExpr", "searchMode", "searchTimeout", "selectedItem", "showClearButton", "showDataBeforeSearch", "showDropDownButton", "showSelectionControls", "spellcheck", "stylingMode", "tabIndex", "text", "useItemTextAsTitle", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "valueChangeEvent", "valueExpr", "visible", "width", "wrapItemText"], outputs: ["onChange", "onClosed", "onContentReady", "onCopy", "onCustomItemCreating", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onItemClick", "onKeyDown", "onKeyUp", "onOpened", "onOptionChanged", "onPaste", "onSelectionChanged", "onValueChanged", "acceptCustomValueChange", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "customItemCreateEventChange", "dataSourceChange", "deferRenderingChange", "disabledChange", "displayExprChange", "displayValueChange", "dropDownButtonTemplateChange", "dropDownOptionsChange", "elementAttrChange", "fieldTemplateChange", "focusStateEnabledChange", "groupedChange", "groupTemplateChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isValidChange", "itemsChange", "itemTemplateChange", "labelChange", "labelModeChange", "maxLengthChange", "minSearchLengthChange", "nameChange", "noDataTextChange", "openedChange", "openOnFieldClickChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "searchEnabledChange", "searchExprChange", "searchModeChange", "searchTimeoutChange", "selectedItemChange", "showClearButtonChange", "showDataBeforeSearchChange", "showDropDownButtonChange", "showSelectionControlsChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "useItemTextAsTitleChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "valueExprChange", "visibleChange", "widthChange", "wrapItemTextChange", "onBlur"] }, { kind: "component", type: i11.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: i11.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: i11.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: i8.LocalizationPipe, name: "abpLocalization" }] });
411
+ HitFactoryEntryFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: HitFactoryEntryFormComponent, selector: "lib-hit-factory-entry-form", inputs: { visible: "visible", record: "record" }, outputs: { visibleChange: "visibleChange", saved: "saved", cancelled: "cancelled" }, usesOnChanges: true, ngImport: i0, template: "<abp-modal [visible]=\"visible\" (visibleChange)=\"onModalVisibleChange($event)\" [options]=\"{ size: 'xl', backdrop: 'static' }\">\r\n <ng-template #abpHeader>\r\n <h3>{{ record?.docEntry ? ('AbpUi::Edit' | abpLocalization) : ('Kadooglu::NewRecord' | abpLocalization) }}</h3>\r\n </ng-template>\r\n\r\n <ng-template #abpBody>\r\n\r\n <!-- Giri\u015F / \u00C7\u0131k\u0131\u015F Bilgileri -->\r\n <div class=\"border rounded p-3 mb-2\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-clock me-2\"></i>{{ 'Kadooglu::EntryExitInfo' | abpLocalization }}\r\n </div>\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::EntryDateTime' | 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 width=\"100%\">\r\n </dx-date-box>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::ExitDateTime' | 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 [showClearButton]=\"true\"\r\n width=\"100%\">\r\n </dx-date-box>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-4\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::Gate' | abpLocalization }}</label>\r\n <dx-select-box\r\n [(value)]=\"gateCode\"\r\n [dataSource]=\"gateData\"\r\n displayExpr=\"name\"\r\n valueExpr=\"code\"\r\n [placeholder]=\"'Kadooglu::SelectGate' | abpLocalization\"\r\n width=\"100%\">\r\n </dx-select-box>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Ara\u00E7 Bilgileri + S\u00FCr\u00FCc\u00FC & Firma Row -->\r\n <div class=\"row g-2\">\r\n\r\n <!-- Sol kolon: Ara\u00E7 Bilgileri -->\r\n <div class=\"col-6\">\r\n <div class=\"border rounded p-3 mb-2 h-100\">\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::VehicleInfo' | abpLocalization }}\r\n </div>\r\n\r\n <div class=\"mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n Ara\u00E7 Hareket T\u00FCr\u00FC <span class=\"text-danger\">*</span>\r\n </label>\r\n <hit-lookup-select\r\n [getFn]=\"typeData\"\r\n [columns]=\"typeColumns\"\r\n displayName=\"name\"\r\n [editingData]=\"selectedTypeName\"\r\n (selected)=\"onTypeSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n\r\n <div class=\"mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::Plate' | abpLocalization }} <span class=\"text-danger\">*</span>\r\n </label>\r\n <ng-container *ngIf=\"plateInputMode === 'lookup'\">\r\n <hit-lookup-select\r\n [loadFn]=\"loadVehiclePlates\"\r\n [columns]=\"plateColumns\"\r\n displayName=\"code\"\r\n keyExpr=\"code\"\r\n [editingData]=\"selectedPlateNo\"\r\n (selected)=\"onPlateSelected($event)\">\r\n </hit-lookup-select>\r\n <div class=\"mt-1\">\r\n <a href=\"javascript:void(0)\" class=\"small text-primary\" (click)=\"plateInputMode = 'manual'\">\r\n <i class=\"fa fa-keyboard me-1\"></i> {{ 'Kadooglu::ManualEntry' | abpLocalization }}\r\n </a>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"plateInputMode === 'manual'\">\r\n <dx-text-box\r\n [(value)]=\"manualPlateNo\"\r\n [placeholder]=\"'Kadooglu::EnterPlate' | abpLocalization\"\r\n width=\"100%\"\r\n (onFocusOut)=\"onManualPlateFocusOut()\">\r\n </dx-text-box>\r\n <div class=\"mt-1\">\r\n <a href=\"javascript:void(0)\" class=\"small text-primary\" (click)=\"plateInputMode = 'lookup'\">\r\n <i class=\"fa fa-list me-1\"></i> {{ 'Kadooglu::SelectFromList' | abpLocalization }}\r\n </a>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <div class=\"mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::DorsePlate' | abpLocalization }}\r\n </label>\r\n <ng-container *ngIf=\"trailerPlateInputMode === 'lookup'\">\r\n <hit-lookup-select\r\n [loadFn]=\"loadTrailerPlates\"\r\n [columns]=\"plateColumns\"\r\n displayName=\"code\"\r\n keyExpr=\"code\"\r\n [editingData]=\"selectedTrailerPlateNo\"\r\n (selected)=\"onTrailerPlateSelected($event)\">\r\n </hit-lookup-select>\r\n <div class=\"mt-1\">\r\n <a href=\"javascript:void(0)\" class=\"small text-primary\" (click)=\"trailerPlateInputMode = 'manual'\">\r\n <i class=\"fa fa-keyboard me-1\"></i> {{ 'Kadooglu::ManualEntry' | abpLocalization }}\r\n </a>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"trailerPlateInputMode === 'manual'\">\r\n <dx-text-box\r\n [(value)]=\"manualTrailerPlateNo\"\r\n [placeholder]=\"'Kadooglu::EnterPlate' | abpLocalization\"\r\n width=\"100%\"\r\n (onFocusOut)=\"onManualTrailerPlateFocusOut()\">\r\n </dx-text-box>\r\n <div class=\"mt-1\">\r\n <a href=\"javascript:void(0)\" class=\"small text-primary\" (click)=\"trailerPlateInputMode = 'lookup'\">\r\n <i class=\"fa fa-list me-1\"></i> {{ 'Kadooglu::SelectFromList' | abpLocalization }}\r\n </a>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Sa\u011F kolon: S\u00FCr\u00FCc\u00FC & Firma -->\r\n <div class=\"col-6\">\r\n <div class=\"border rounded p-3 mb-2 h-100\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-id-card me-2\"></i>{{ 'Kadooglu::DriverAndCompany' | abpLocalization }}\r\n </div>\r\n\r\n <div class=\"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\">\r\n {{ isTcCitizen ? ('Kadooglu::TcIdentityNo' | abpLocalization) : 'Kimlik No' }} <span class=\"text-danger\">*</span>\r\n </label>\r\n <dx-check-box [(value)]=\"isTcCitizen\" [disabled]=\"!!record\" text=\"T.C. Vatanda\u015F\u0131\"></dx-check-box>\r\n </div>\r\n <ng-container *ngIf=\"!tcLookupMode\">\r\n <div class=\"d-flex gap-2\">\r\n <dx-text-box\r\n [(value)]=\"tcNo\"\r\n [placeholder]=\"isTcCitizen ? ('Kadooglu::TcIdentityNo' | abpLocalization) : 'Kimlik No'\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n <button type=\"button\" class=\"btn btn-outline-primary btn-sm text-nowrap\"\r\n [disabled]=\"isTcQuerying\"\r\n (click)=\"queryCarrierByTcNo()\">\r\n <i class=\"fa fa-search me-1\"></i>\r\n {{ (isTcQuerying ? 'Kadooglu::Querying' : 'Kadooglu::Query') | abpLocalization }}\r\n </button>\r\n </div>\r\n <div class=\"mt-1\">\r\n <a href=\"javascript:void(0)\" class=\"small text-primary\" (click)=\"tcLookupMode = true\">\r\n <i class=\"fa fa-list me-1\"></i> {{ 'Kadooglu::SelectFromList' | abpLocalization }}\r\n </a>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"tcLookupMode\">\r\n <hit-lookup-select\r\n [getFn]=\"carrierData\"\r\n [columns]=\"carrierColumns\"\r\n displayName=\"name\"\r\n [editingData]=\"selectedCarrierName\"\r\n (selected)=\"onCarrierLookupSelected($event)\">\r\n </hit-lookup-select>\r\n <div class=\"mt-1\">\r\n <a href=\"javascript:void(0)\" class=\"small text-primary\" (click)=\"tcLookupMode = false\">\r\n <i class=\"fa fa-keyboard me-1\"></i> {{ 'Kadooglu::QueryByTc' | abpLocalization }}\r\n </a>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <!-- Mevcut s\u00FCr\u00FCc\u00FC: sadece ad\u0131 g\u00F6ster (readonly) -->\r\n <ng-container *ngIf=\"!isNewCarrier\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::DriverNameSurname' | abpLocalization }}\r\n </label>\r\n <dx-text-box\r\n [(value)]=\"selectedCarrierName\"\r\n [disabled]=\"true\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n </ng-container>\r\n\r\n <!-- Yeni s\u00FCr\u00FCc\u00FC: Ad, Soyad, Telefon alanlar\u0131n\u0131 g\u00F6ster -->\r\n <ng-container *ngIf=\"isNewCarrier\">\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::FirstName' | abpLocalization }} <span class=\"text-danger\">*</span>\r\n </label>\r\n <dx-text-box\r\n [(value)]=\"newCarrierFirstname\"\r\n [placeholder]=\"'Kadooglu::FirstName' | abpLocalization\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::LastName' | abpLocalization }} <span class=\"text-danger\">*</span>\r\n </label>\r\n <dx-text-box\r\n [(value)]=\"newCarrierLastname\"\r\n [placeholder]=\"'Kadooglu::LastName' | abpLocalization\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n </div>\r\n <div class=\"mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::Phone' | abpLocalization }}\r\n </label>\r\n <dx-text-box\r\n [(value)]=\"newCarrierTel\"\r\n [placeholder]=\"'Kadooglu::Phone' | abpLocalization\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n <div class=\"alert alert-info small py-1 mb-3\">\r\n <i class=\"fa fa-info-circle me-1\"></i>\r\n {{ 'Kadooglu::NewDriverAlert' | abpLocalization }}\r\n </div>\r\n </ng-container>\r\n\r\n <div class=\"mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::BusinessPartner' | abpLocalization }}\r\n </label>\r\n <hit-lookup-select\r\n [getFn]=\"businessPartnerData\"\r\n [columns]=\"businessPartnerColumns\"\r\n displayName=\"cardName\"\r\n keyExpr=\"cardCode\"\r\n [editingData]=\"selectedBusinessPartnerName\"\r\n (selected)=\"onBusinessPartnerSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- A\u00E7\u0131klama -->\r\n <div class=\"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]=\"80\"\r\n width=\"100%\">\r\n </dx-text-area>\r\n </div>\r\n\r\n </ng-template>\r\n\r\n <ng-template #abpFooter>\r\n <button type=\"button\" class=\"btn btn-secondary\" (click)=\"cancel()\">\r\n {{ 'AbpUi::Cancel' | abpLocalization }}\r\n </button>\r\n <abp-button\r\n iconClass=\"fa fa-save\"\r\n buttonType=\"button\"\r\n [loading]=\"isLoading\"\r\n (click)=\"save()\">\r\n {{ 'AbpUi::Save' | abpLocalization }}\r\n </abp-button>\r\n </ng-template>\r\n</abp-modal>\r\n", dependencies: [{ kind: "directive", type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i1.ButtonComponent, selector: "abp-button", inputs: ["buttonId", "buttonClass", "buttonType", "formName", "iconClass", "loading", "disabled", "attributes"], outputs: ["click", "focus", "blur", "abpClick", "abpFocus", "abpBlur"] }, { kind: "component", type: i1.ModalComponent, selector: "abp-modal", inputs: ["visible", "busy", "options", "suppressUnsavedChangesWarning"], outputs: ["visibleChange", "init", "appear", "disappear"] }, { kind: "component", type: i10.HitModalComponent, selector: "hit-lookup-select", inputs: ["displayName", "keyExpr", "modalSize", "getFn", "loadFn", "columns", "isVisible", "disabled", "readOnly", "showDateFilter", "defaultDateFrom", "defaultDateTo", "tabs", "editingData"], outputs: ["selected"] }, { kind: "component", type: i11.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: i11.DxSelectBoxComponent, selector: "dx-select-box", inputs: ["acceptCustomValue", "accessKey", "activeStateEnabled", "buttons", "customItemCreateEvent", "dataSource", "deferRendering", "disabled", "displayExpr", "displayValue", "dropDownButtonTemplate", "dropDownOptions", "elementAttr", "fieldTemplate", "focusStateEnabled", "grouped", "groupTemplate", "height", "hint", "hoverStateEnabled", "inputAttr", "isValid", "items", "itemTemplate", "label", "labelMode", "maxLength", "minSearchLength", "name", "noDataText", "opened", "openOnFieldClick", "placeholder", "readOnly", "rtlEnabled", "searchEnabled", "searchExpr", "searchMode", "searchTimeout", "selectedItem", "showClearButton", "showDataBeforeSearch", "showDropDownButton", "showSelectionControls", "spellcheck", "stylingMode", "tabIndex", "text", "useItemTextAsTitle", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "valueChangeEvent", "valueExpr", "visible", "width", "wrapItemText"], outputs: ["onChange", "onClosed", "onContentReady", "onCopy", "onCustomItemCreating", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onItemClick", "onKeyDown", "onKeyUp", "onOpened", "onOptionChanged", "onPaste", "onSelectionChanged", "onValueChanged", "acceptCustomValueChange", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "customItemCreateEventChange", "dataSourceChange", "deferRenderingChange", "disabledChange", "displayExprChange", "displayValueChange", "dropDownButtonTemplateChange", "dropDownOptionsChange", "elementAttrChange", "fieldTemplateChange", "focusStateEnabledChange", "groupedChange", "groupTemplateChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isValidChange", "itemsChange", "itemTemplateChange", "labelChange", "labelModeChange", "maxLengthChange", "minSearchLengthChange", "nameChange", "noDataTextChange", "openedChange", "openOnFieldClickChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "searchEnabledChange", "searchExprChange", "searchModeChange", "searchTimeoutChange", "selectedItemChange", "showClearButtonChange", "showDataBeforeSearchChange", "showDropDownButtonChange", "showSelectionControlsChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "useItemTextAsTitleChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "valueExprChange", "visibleChange", "widthChange", "wrapItemTextChange", "onBlur"] }, { kind: "component", type: i11.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: i11.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: i11.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: i8.LocalizationPipe, name: "abpLocalization" }] });
366
412
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: HitFactoryEntryFormComponent, decorators: [{
367
413
  type: Component,
368
- args: [{ selector: 'lib-hit-factory-entry-form', template: "<abp-modal [visible]=\"visible\" (visibleChange)=\"onModalVisibleChange($event)\" [options]=\"{ size: 'lg', backdrop: 'static' }\">\r\n <ng-template #abpHeader>\r\n <h3>{{ record?.docEntry ? ('AbpUi::Edit' | abpLocalization) : ('Kadooglu::NewRecord' | abpLocalization) }}</h3>\r\n </ng-template>\r\n\r\n <ng-template #abpBody>\r\n\r\n <!-- Giri\u015F / \u00C7\u0131k\u0131\u015F Bilgileri -->\r\n <div class=\"border rounded p-3 mb-2\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-clock me-2\"></i>{{ 'Kadooglu::EntryExitInfo' | abpLocalization }}\r\n </div>\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::EntryDateTime' | 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 width=\"100%\">\r\n </dx-date-box>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::ExitDateTime' | 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 [showClearButton]=\"true\"\r\n width=\"100%\">\r\n </dx-date-box>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-4\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::Gate' | abpLocalization }}</label>\r\n <dx-select-box\r\n [(value)]=\"gateCode\"\r\n [dataSource]=\"gateData\"\r\n displayExpr=\"name\"\r\n valueExpr=\"code\"\r\n [placeholder]=\"'Kadooglu::SelectGate' | abpLocalization\"\r\n width=\"100%\">\r\n </dx-select-box>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Ara\u00E7 Bilgileri -->\r\n <div class=\"border rounded p-3 mb-2\">\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::VehicleInfo' | abpLocalization }}\r\n </div>\r\n\r\n <div class=\"mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n Ara\u00E7 Hareket T\u00FCr\u00FC <span class=\"text-danger\">*</span>\r\n </label>\r\n <hit-lookup-select\r\n [getFn]=\"typeData\"\r\n [columns]=\"typeColumns\"\r\n displayName=\"name\"\r\n [editingData]=\"selectedTypeName\"\r\n (selected)=\"onTypeSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n\r\n <div class=\"mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::Plate' | abpLocalization }} <span class=\"text-danger\">*</span>\r\n </label>\r\n <ng-container *ngIf=\"plateInputMode === 'lookup'\">\r\n <hit-lookup-select\r\n [loadFn]=\"loadVehiclePlates\"\r\n [columns]=\"plateColumns\"\r\n displayName=\"code\"\r\n keyExpr=\"code\"\r\n [editingData]=\"selectedPlateNo\"\r\n (selected)=\"onPlateSelected($event)\">\r\n </hit-lookup-select>\r\n <div class=\"mt-1\">\r\n <a href=\"javascript:void(0)\" class=\"small text-primary\" (click)=\"plateInputMode = 'manual'\">\r\n <i class=\"fa fa-keyboard me-1\"></i> {{ 'Kadooglu::ManualEntry' | abpLocalization }}\r\n </a>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"plateInputMode === 'manual'\">\r\n <dx-text-box\r\n [(value)]=\"manualPlateNo\"\r\n [placeholder]=\"'Kadooglu::EnterPlate' | abpLocalization\"\r\n width=\"100%\"\r\n (onFocusOut)=\"onManualPlateFocusOut()\">\r\n </dx-text-box>\r\n <div class=\"mt-1\">\r\n <a href=\"javascript:void(0)\" class=\"small text-primary\" (click)=\"plateInputMode = 'lookup'\">\r\n <i class=\"fa fa-list me-1\"></i> {{ 'Kadooglu::SelectFromList' | abpLocalization }}\r\n </a>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <div class=\"mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::DorsePlate' | abpLocalization }}\r\n </label>\r\n <ng-container *ngIf=\"trailerPlateInputMode === 'lookup'\">\r\n <hit-lookup-select\r\n [loadFn]=\"loadTrailerPlates\"\r\n [columns]=\"plateColumns\"\r\n displayName=\"code\"\r\n keyExpr=\"code\"\r\n [editingData]=\"selectedTrailerPlateNo\"\r\n (selected)=\"onTrailerPlateSelected($event)\">\r\n </hit-lookup-select>\r\n <div class=\"mt-1\">\r\n <a href=\"javascript:void(0)\" class=\"small text-primary\" (click)=\"trailerPlateInputMode = 'manual'\">\r\n <i class=\"fa fa-keyboard me-1\"></i> {{ 'Kadooglu::ManualEntry' | abpLocalization }}\r\n </a>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"trailerPlateInputMode === 'manual'\">\r\n <dx-text-box\r\n [(value)]=\"manualTrailerPlateNo\"\r\n [placeholder]=\"'Kadooglu::EnterPlate' | abpLocalization\"\r\n width=\"100%\"\r\n (onFocusOut)=\"onManualTrailerPlateFocusOut()\">\r\n </dx-text-box>\r\n <div class=\"mt-1\">\r\n <a href=\"javascript:void(0)\" class=\"small text-primary\" (click)=\"trailerPlateInputMode = 'lookup'\">\r\n <i class=\"fa fa-list me-1\"></i> {{ 'Kadooglu::SelectFromList' | abpLocalization }}\r\n </a>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n\r\n <!-- S\u00FCr\u00FCc\u00FC & Firma -->\r\n <div class=\"border rounded p-3 mb-2\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-id-card me-2\"></i>{{ 'Kadooglu::DriverAndCompany' | abpLocalization }}\r\n </div>\r\n\r\n <div class=\"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\">\r\n {{ isTcCitizen ? ('Kadooglu::TcIdentityNo' | abpLocalization) : 'Kimlik No' }} <span class=\"text-danger\">*</span>\r\n </label>\r\n <dx-check-box [(value)]=\"isTcCitizen\" text=\"T.C. Vatanda\u015F\u0131\"></dx-check-box>\r\n </div>\r\n <ng-container *ngIf=\"!tcLookupMode\">\r\n <div class=\"d-flex gap-2\">\r\n <dx-text-box\r\n [(value)]=\"tcNo\"\r\n [placeholder]=\"isTcCitizen ? ('Kadooglu::TcIdentityNo' | abpLocalization) : 'Kimlik No'\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n <button type=\"button\" class=\"btn btn-outline-primary btn-sm text-nowrap\"\r\n [disabled]=\"isTcQuerying\"\r\n (click)=\"queryCarrierByTcNo()\">\r\n <i class=\"fa fa-search me-1\"></i>\r\n {{ (isTcQuerying ? 'Kadooglu::Querying' : 'Kadooglu::Query') | abpLocalization }}\r\n </button>\r\n </div>\r\n <div class=\"mt-1\">\r\n <a href=\"javascript:void(0)\" class=\"small text-primary\" (click)=\"tcLookupMode = true\">\r\n <i class=\"fa fa-list me-1\"></i> {{ 'Kadooglu::SelectFromList' | abpLocalization }}\r\n </a>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"tcLookupMode\">\r\n <hit-lookup-select\r\n [getFn]=\"carrierData\"\r\n [columns]=\"carrierColumns\"\r\n displayName=\"name\"\r\n [editingData]=\"selectedCarrierName\"\r\n (selected)=\"onCarrierLookupSelected($event)\">\r\n </hit-lookup-select>\r\n <div class=\"mt-1\">\r\n <a href=\"javascript:void(0)\" class=\"small text-primary\" (click)=\"tcLookupMode = false\">\r\n <i class=\"fa fa-keyboard me-1\"></i> {{ 'Kadooglu::QueryByTc' | abpLocalization }}\r\n </a>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <!-- Mevcut s\u00FCr\u00FCc\u00FC: sadece ad\u0131 g\u00F6ster (readonly) -->\r\n <ng-container *ngIf=\"!isNewCarrier\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::DriverNameSurname' | abpLocalization }}\r\n </label>\r\n <dx-text-box\r\n [(value)]=\"selectedCarrierName\"\r\n [disabled]=\"true\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n </ng-container>\r\n\r\n <!-- Yeni s\u00FCr\u00FCc\u00FC: Ad, Soyad, Telefon alanlar\u0131n\u0131 g\u00F6ster -->\r\n <ng-container *ngIf=\"isNewCarrier\">\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::FirstName' | abpLocalization }} <span class=\"text-danger\">*</span>\r\n </label>\r\n <dx-text-box\r\n [(value)]=\"newCarrierFirstname\"\r\n [placeholder]=\"'Kadooglu::FirstName' | abpLocalization\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::LastName' | abpLocalization }} <span class=\"text-danger\">*</span>\r\n </label>\r\n <dx-text-box\r\n [(value)]=\"newCarrierLastname\"\r\n [placeholder]=\"'Kadooglu::LastName' | abpLocalization\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n </div>\r\n <div class=\"mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::Phone' | abpLocalization }}\r\n </label>\r\n <dx-text-box\r\n [(value)]=\"newCarrierTel\"\r\n [placeholder]=\"'Kadooglu::Phone' | abpLocalization\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n <div class=\"alert alert-info small py-1 mb-3\">\r\n <i class=\"fa fa-info-circle me-1\"></i>\r\n {{ 'Kadooglu::NewDriverAlert' | abpLocalization }}\r\n </div>\r\n </ng-container>\r\n\r\n <div class=\"mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::BusinessPartner' | abpLocalization }}\r\n </label>\r\n <hit-lookup-select\r\n [getFn]=\"businessPartnerData\"\r\n [columns]=\"businessPartnerColumns\"\r\n displayName=\"cardName\"\r\n keyExpr=\"cardCode\"\r\n [editingData]=\"selectedBusinessPartnerName\"\r\n (selected)=\"onBusinessPartnerSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n </div>\r\n\r\n <!-- A\u00E7\u0131klama -->\r\n <div class=\"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]=\"80\"\r\n width=\"100%\">\r\n </dx-text-area>\r\n </div>\r\n\r\n </ng-template>\r\n\r\n <ng-template #abpFooter>\r\n <button type=\"button\" class=\"btn btn-secondary\" (click)=\"cancel()\">\r\n {{ 'AbpUi::Cancel' | abpLocalization }}\r\n </button>\r\n <abp-button\r\n iconClass=\"fa fa-save\"\r\n buttonType=\"button\"\r\n [loading]=\"isLoading\"\r\n (click)=\"save()\">\r\n {{ 'AbpUi::Save' | abpLocalization }}\r\n </abp-button>\r\n </ng-template>\r\n</abp-modal>\r\n" }]
414
+ args: [{ selector: 'lib-hit-factory-entry-form', template: "<abp-modal [visible]=\"visible\" (visibleChange)=\"onModalVisibleChange($event)\" [options]=\"{ size: 'xl', backdrop: 'static' }\">\r\n <ng-template #abpHeader>\r\n <h3>{{ record?.docEntry ? ('AbpUi::Edit' | abpLocalization) : ('Kadooglu::NewRecord' | abpLocalization) }}</h3>\r\n </ng-template>\r\n\r\n <ng-template #abpBody>\r\n\r\n <!-- Giri\u015F / \u00C7\u0131k\u0131\u015F Bilgileri -->\r\n <div class=\"border rounded p-3 mb-2\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-clock me-2\"></i>{{ 'Kadooglu::EntryExitInfo' | abpLocalization }}\r\n </div>\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::EntryDateTime' | 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 width=\"100%\">\r\n </dx-date-box>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::ExitDateTime' | 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 [showClearButton]=\"true\"\r\n width=\"100%\">\r\n </dx-date-box>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-4\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::Gate' | abpLocalization }}</label>\r\n <dx-select-box\r\n [(value)]=\"gateCode\"\r\n [dataSource]=\"gateData\"\r\n displayExpr=\"name\"\r\n valueExpr=\"code\"\r\n [placeholder]=\"'Kadooglu::SelectGate' | abpLocalization\"\r\n width=\"100%\">\r\n </dx-select-box>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Ara\u00E7 Bilgileri + S\u00FCr\u00FCc\u00FC & Firma Row -->\r\n <div class=\"row g-2\">\r\n\r\n <!-- Sol kolon: Ara\u00E7 Bilgileri -->\r\n <div class=\"col-6\">\r\n <div class=\"border rounded p-3 mb-2 h-100\">\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::VehicleInfo' | abpLocalization }}\r\n </div>\r\n\r\n <div class=\"mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n Ara\u00E7 Hareket T\u00FCr\u00FC <span class=\"text-danger\">*</span>\r\n </label>\r\n <hit-lookup-select\r\n [getFn]=\"typeData\"\r\n [columns]=\"typeColumns\"\r\n displayName=\"name\"\r\n [editingData]=\"selectedTypeName\"\r\n (selected)=\"onTypeSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n\r\n <div class=\"mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::Plate' | abpLocalization }} <span class=\"text-danger\">*</span>\r\n </label>\r\n <ng-container *ngIf=\"plateInputMode === 'lookup'\">\r\n <hit-lookup-select\r\n [loadFn]=\"loadVehiclePlates\"\r\n [columns]=\"plateColumns\"\r\n displayName=\"code\"\r\n keyExpr=\"code\"\r\n [editingData]=\"selectedPlateNo\"\r\n (selected)=\"onPlateSelected($event)\">\r\n </hit-lookup-select>\r\n <div class=\"mt-1\">\r\n <a href=\"javascript:void(0)\" class=\"small text-primary\" (click)=\"plateInputMode = 'manual'\">\r\n <i class=\"fa fa-keyboard me-1\"></i> {{ 'Kadooglu::ManualEntry' | abpLocalization }}\r\n </a>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"plateInputMode === 'manual'\">\r\n <dx-text-box\r\n [(value)]=\"manualPlateNo\"\r\n [placeholder]=\"'Kadooglu::EnterPlate' | abpLocalization\"\r\n width=\"100%\"\r\n (onFocusOut)=\"onManualPlateFocusOut()\">\r\n </dx-text-box>\r\n <div class=\"mt-1\">\r\n <a href=\"javascript:void(0)\" class=\"small text-primary\" (click)=\"plateInputMode = 'lookup'\">\r\n <i class=\"fa fa-list me-1\"></i> {{ 'Kadooglu::SelectFromList' | abpLocalization }}\r\n </a>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <div class=\"mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::DorsePlate' | abpLocalization }}\r\n </label>\r\n <ng-container *ngIf=\"trailerPlateInputMode === 'lookup'\">\r\n <hit-lookup-select\r\n [loadFn]=\"loadTrailerPlates\"\r\n [columns]=\"plateColumns\"\r\n displayName=\"code\"\r\n keyExpr=\"code\"\r\n [editingData]=\"selectedTrailerPlateNo\"\r\n (selected)=\"onTrailerPlateSelected($event)\">\r\n </hit-lookup-select>\r\n <div class=\"mt-1\">\r\n <a href=\"javascript:void(0)\" class=\"small text-primary\" (click)=\"trailerPlateInputMode = 'manual'\">\r\n <i class=\"fa fa-keyboard me-1\"></i> {{ 'Kadooglu::ManualEntry' | abpLocalization }}\r\n </a>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"trailerPlateInputMode === 'manual'\">\r\n <dx-text-box\r\n [(value)]=\"manualTrailerPlateNo\"\r\n [placeholder]=\"'Kadooglu::EnterPlate' | abpLocalization\"\r\n width=\"100%\"\r\n (onFocusOut)=\"onManualTrailerPlateFocusOut()\">\r\n </dx-text-box>\r\n <div class=\"mt-1\">\r\n <a href=\"javascript:void(0)\" class=\"small text-primary\" (click)=\"trailerPlateInputMode = 'lookup'\">\r\n <i class=\"fa fa-list me-1\"></i> {{ 'Kadooglu::SelectFromList' | abpLocalization }}\r\n </a>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Sa\u011F kolon: S\u00FCr\u00FCc\u00FC & Firma -->\r\n <div class=\"col-6\">\r\n <div class=\"border rounded p-3 mb-2 h-100\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-id-card me-2\"></i>{{ 'Kadooglu::DriverAndCompany' | abpLocalization }}\r\n </div>\r\n\r\n <div class=\"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\">\r\n {{ isTcCitizen ? ('Kadooglu::TcIdentityNo' | abpLocalization) : 'Kimlik No' }} <span class=\"text-danger\">*</span>\r\n </label>\r\n <dx-check-box [(value)]=\"isTcCitizen\" [disabled]=\"!!record\" text=\"T.C. Vatanda\u015F\u0131\"></dx-check-box>\r\n </div>\r\n <ng-container *ngIf=\"!tcLookupMode\">\r\n <div class=\"d-flex gap-2\">\r\n <dx-text-box\r\n [(value)]=\"tcNo\"\r\n [placeholder]=\"isTcCitizen ? ('Kadooglu::TcIdentityNo' | abpLocalization) : 'Kimlik No'\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n <button type=\"button\" class=\"btn btn-outline-primary btn-sm text-nowrap\"\r\n [disabled]=\"isTcQuerying\"\r\n (click)=\"queryCarrierByTcNo()\">\r\n <i class=\"fa fa-search me-1\"></i>\r\n {{ (isTcQuerying ? 'Kadooglu::Querying' : 'Kadooglu::Query') | abpLocalization }}\r\n </button>\r\n </div>\r\n <div class=\"mt-1\">\r\n <a href=\"javascript:void(0)\" class=\"small text-primary\" (click)=\"tcLookupMode = true\">\r\n <i class=\"fa fa-list me-1\"></i> {{ 'Kadooglu::SelectFromList' | abpLocalization }}\r\n </a>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"tcLookupMode\">\r\n <hit-lookup-select\r\n [getFn]=\"carrierData\"\r\n [columns]=\"carrierColumns\"\r\n displayName=\"name\"\r\n [editingData]=\"selectedCarrierName\"\r\n (selected)=\"onCarrierLookupSelected($event)\">\r\n </hit-lookup-select>\r\n <div class=\"mt-1\">\r\n <a href=\"javascript:void(0)\" class=\"small text-primary\" (click)=\"tcLookupMode = false\">\r\n <i class=\"fa fa-keyboard me-1\"></i> {{ 'Kadooglu::QueryByTc' | abpLocalization }}\r\n </a>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <!-- Mevcut s\u00FCr\u00FCc\u00FC: sadece ad\u0131 g\u00F6ster (readonly) -->\r\n <ng-container *ngIf=\"!isNewCarrier\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::DriverNameSurname' | abpLocalization }}\r\n </label>\r\n <dx-text-box\r\n [(value)]=\"selectedCarrierName\"\r\n [disabled]=\"true\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n </ng-container>\r\n\r\n <!-- Yeni s\u00FCr\u00FCc\u00FC: Ad, Soyad, Telefon alanlar\u0131n\u0131 g\u00F6ster -->\r\n <ng-container *ngIf=\"isNewCarrier\">\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::FirstName' | abpLocalization }} <span class=\"text-danger\">*</span>\r\n </label>\r\n <dx-text-box\r\n [(value)]=\"newCarrierFirstname\"\r\n [placeholder]=\"'Kadooglu::FirstName' | abpLocalization\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::LastName' | abpLocalization }} <span class=\"text-danger\">*</span>\r\n </label>\r\n <dx-text-box\r\n [(value)]=\"newCarrierLastname\"\r\n [placeholder]=\"'Kadooglu::LastName' | abpLocalization\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n </div>\r\n <div class=\"mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::Phone' | abpLocalization }}\r\n </label>\r\n <dx-text-box\r\n [(value)]=\"newCarrierTel\"\r\n [placeholder]=\"'Kadooglu::Phone' | abpLocalization\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n <div class=\"alert alert-info small py-1 mb-3\">\r\n <i class=\"fa fa-info-circle me-1\"></i>\r\n {{ 'Kadooglu::NewDriverAlert' | abpLocalization }}\r\n </div>\r\n </ng-container>\r\n\r\n <div class=\"mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::BusinessPartner' | abpLocalization }}\r\n </label>\r\n <hit-lookup-select\r\n [getFn]=\"businessPartnerData\"\r\n [columns]=\"businessPartnerColumns\"\r\n displayName=\"cardName\"\r\n keyExpr=\"cardCode\"\r\n [editingData]=\"selectedBusinessPartnerName\"\r\n (selected)=\"onBusinessPartnerSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- A\u00E7\u0131klama -->\r\n <div class=\"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]=\"80\"\r\n width=\"100%\">\r\n </dx-text-area>\r\n </div>\r\n\r\n </ng-template>\r\n\r\n <ng-template #abpFooter>\r\n <button type=\"button\" class=\"btn btn-secondary\" (click)=\"cancel()\">\r\n {{ 'AbpUi::Cancel' | abpLocalization }}\r\n </button>\r\n <abp-button\r\n iconClass=\"fa fa-save\"\r\n buttonType=\"button\"\r\n [loading]=\"isLoading\"\r\n (click)=\"save()\">\r\n {{ 'AbpUi::Save' | abpLocalization }}\r\n </abp-button>\r\n </ng-template>\r\n</abp-modal>\r\n" }]
369
415
  }], ctorParameters: function () { return [{ type: i1.ConfirmationService }, { type: i2.HitFactoryEntryService }, { type: i3.HitCarrierPersonService }, { type: i4.HitPlateService }, { type: i5.HitVehicleTypeService }, { type: i6.HitBusinessPartnerService }, { type: i7.HitUserGateService }, { type: i8.LocalizationService }]; }, propDecorators: { visible: [{
370
416
  type: Input
371
417
  }], visibleChange: [{
@@ -377,4 +423,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
377
423
  }], cancelled: [{
378
424
  type: Output
379
425
  }] } });
380
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGl0LWZhY3RvcnktZW50cnktZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rYWRvb2dsdS9zcmMvbGliL2hpdC1jb21wb25lbnRzL2hpdC1mYWN0b3J5LWVudHJ5L2hpdC1mYWN0b3J5LWVudHJ5LWZvcm0vaGl0LWZhY3RvcnktZW50cnktZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rYWRvb2dsdS9zcmMvbGliL2hpdC1jb21wb25lbnRzL2hpdC1mYWN0b3J5LWVudHJ5L2hpdC1mYWN0b3J5LWVudHJ5LWZvcm0vaGl0LWZhY3RvcnktZW50cnktZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBZ0IsTUFBTSxlQUFlLENBQUM7QUFldkcsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7Ozs7O0FBTW5DLE1BQU0sT0FBTyw0QkFBNEI7SUEyRXJDLFlBQ1ksWUFBaUMsRUFDakMsT0FBK0IsRUFDL0Isb0JBQTZDLEVBQzdDLFlBQTZCLEVBQzdCLGtCQUF5QyxFQUN6QyxzQkFBaUQsRUFDakQsZUFBbUMsRUFDbkMsbUJBQXdDO1FBUHhDLGlCQUFZLEdBQVosWUFBWSxDQUFxQjtRQUNqQyxZQUFPLEdBQVAsT0FBTyxDQUF3QjtRQUMvQix5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXlCO1FBQzdDLGlCQUFZLEdBQVosWUFBWSxDQUFpQjtRQUM3Qix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQXVCO1FBQ3pDLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBMkI7UUFDakQsb0JBQWUsR0FBZixlQUFlLENBQW9CO1FBQ25DLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFsRjNDLFlBQU8s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TSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtDb25maXJtYXRpb25TZXJ2aWNlfSBmcm9tICdAYWJwL25nLnRoZW1lLnNoYXJlZCc7XHJcbmltcG9ydCB7TG9jYWxpemF0aW9uU2VydmljZX0gZnJvbSAnQGFicC9uZy5jb3JlJztcclxuaW1wb3J0IHtIaXRGYWN0b3J5RW50cnlTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9oaXQtcHJveHkvaGl0LWZhY3RvcnktZW50cnkvaGl0LWZhY3RvcnktZW50cnkuc2VydmljZSc7XHJcbmltcG9ydCB7SGl0VmVoaWNsZVR5cGVTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9oaXQtcHJveHkvaGl0LXZlaGljbGUtdHlwZS9oaXQtdmVoaWNsZS10eXBlLnNlcnZpY2UnO1xyXG5pbXBvcnQge1ZlaGljbGVUeXBlfSBmcm9tICcuLi8uLi8uLi9oaXQtcHJveHkvaGl0LXZlaGljbGUtdHlwZS9tb2RlbHMnO1xyXG5pbXBvcnQge1BsYXRlfSBmcm9tICcuLi8uLi8uLi9oaXQtcHJveHkvaGl0LXBsYXRlL21vZGVscyc7XHJcbmltcG9ydCB7Q2FycmllclBlcnNvbn0gZnJvbSAnLi4vLi4vLi4vaGl0LXByb3h5L2hpdC1jYXJyaWVyLXBlcnNvbi9tb2RlbHMnO1xyXG5pbXBvcnQge0hpdENhcnJpZXJQZXJzb25TZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9oaXQtcHJveHkvaGl0LWNhcnJpZXItcGVyc29uL2hpdC1jYXJyaWVyLXBlcnNvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHtIaXRQbGF0ZVNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2hpdC1wcm94eS9oaXQtcGxhdGUvaGl0LXBsYXRlLnNlcnZpY2UnO1xyXG5pbXBvcnQge0ZhY3RvcnlFbnRyeSwgU2F2ZUZhY3RvcnlFbnRyeUR0b30gZnJvbSBcIi4uLy4uLy4uL2hpdC1wcm94eS9oaXQtZmFjdG9yeS1lbnRyeS9tb2RlbHNcIjtcclxuaW1wb3J0IHtIaXRCdXNpbmVzc1BhcnRuZXJTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9oaXQtcHJveHkvaGl0LWJ1c2luZXNzLXBhcnRuZXIvaGl0LWJ1c2luZXNzLXBhcnRuZXIuc2VydmljZSc7XHJcbmltcG9ydCB7QnVzaW5lc3NQYXJ0bmVyfSBmcm9tICcuLi8uLi8uLi9oaXQtcHJveHkvaGl0LWJ1c2luZXNzLXBhcnRuZXIvbW9kZWxzJztcclxuaW1wb3J0IHtIaXRVc2VyR2F0ZVNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2hpdC1wcm94eS9oaXQtdXNlci1nYXRlL2hpdC11c2VyLWdhdGUuc2VydmljZSc7XHJcbmltcG9ydCB7R2F0ZX0gZnJvbSAnLi4vLi4vLi4vaGl0LXByb3h5L2hpdC1nYXRlL21vZGVscyc7XHJcbmltcG9ydCB7bWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnbGliLWhpdC1mYWN0b3J5LWVudHJ5LWZvcm0nLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2hpdC1mYWN0b3J5LWVudHJ5LWZvcm0uY29tcG9uZW50Lmh0bWwnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgSGl0RmFjdG9yeUVudHJ5Rm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcclxuICAgIEBJbnB1dCgpIHZpc2libGUgPSBmYWxzZTtcclxuICAgIEBPdXRwdXQoKSB2aXNpYmxlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG4gICAgQElucHV0KCkgcmVjb3JkOiBGYWN0b3J5RW50cnkgfCBudWxsID0gbnVsbDtcclxuICAgIEBPdXRwdXQoKSBzYXZlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuICAgIEBPdXRwdXQoKSBjYW5jZWxsZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gICAgLy8gTG9va3VwIGRhdGEgYXJyYXlzIGZvciBtb2RhbHNcclxuICAgIHR5cGVEYXRhOiBWZWhpY2xlVHlwZVtdID0gW107XHJcbiAgICBjYXJyaWVyRGF0YTogQ2FycmllclBlcnNvbltdID0gW107XHJcblxyXG4gICAgLy8gTGF6eSBsb2FkZXJzIGZvciBwbGF0ZSBsb29rdXBzIOKAlCBmaWx0ZXJlZCBieSB1X0lzVHJhaWxlclxyXG4gICAgbG9hZFZlaGljbGVQbGF0ZXMgPSAoKSA9PiB0aGlzLnBsYXRlU2VydmljZS5nZXRMaXN0KCkucGlwZShcclxuICAgICAgICBtYXAocGxhdGVzID0+IHBsYXRlcy5maWx0ZXIocCA9PiBwLnVfSXNUcmFpbGVyICE9PSAnWScpKVxyXG4gICAgKTtcclxuICAgIGxvYWRUcmFpbGVyUGxhdGVzID0gKCkgPT4gdGhpcy5wbGF0ZVNlcnZpY2UuZ2V0TGlzdCgpLnBpcGUoXHJcbiAgICAgICAgbWFwKHBsYXRlcyA9PiBwbGF0ZXMuZmlsdGVyKHAgPT4gcC51X0lzVHJhaWxlciA9PT0gJ1knKSlcclxuICAgICk7XHJcbiAgICBnYXRlRGF0YTogR2F0ZVtdID0gW107XHJcbiAgICBkZWZhdWx0R2F0ZUNvZGUgPSAnJztcclxuXHJcbiAgICAvLyBDb2x1bW4gY29uZmlncyBmb3IgbG9va3VwIG1vZGFsc1xyXG4gICAgdHlwZUNvbHVtbnMgPSBbXHJcbiAgICAgICAge2RhdGFGaWVsZDogJ2NvZGUnLCBjYXB0aW9uOiAnS29kJywgd2lkdGg6IDEwMH0sXHJcbiAgICAgICAge2RhdGFGaWVsZDogJ25hbWUnLCBjYXB0aW9uOiAnQWQnfSxcclxuICAgIF07XHJcbiAgICBwbGF0ZUNvbHVtbnMgPSBbXHJcbiAgICAgICAge2RhdGFGaWVsZDogJ2NvZGUnLCBjYXB0aW9uOiAnUGxha2EnLCB3aWR0aDogMTAwfSxcclxuICAgICAgICB7ZGF0YUZpZWxkOiAnbmFtZScsIGNhcHRpb246ICdOYW1lJ30sXHJcbiAgICBdO1xyXG4gICAgY2FycmllckNvbHVtbnMgPSBbXHJcbiAgICAgICAge2RhdGFGaWVsZDogJ2NvZGUnLCBjYXB0aW9uOiAnVC5DLiBLaW1saWsgTm8nLCB3aWR0aDogMTQwfSxcclxuICAgICAgICB7ZGF0YUZpZWxkOiAnbmFtZScsIGNhcHRpb246ICdBZCBTb3lhZCd9LFxyXG4gICAgXTtcclxuICAgIGJ1c2luZXNzUGFydG5lckNvbHVtbnMgPSBbXHJcbiAgICAgICAge2RhdGFGaWVsZDogJ2NhcmRDb2RlJywgY2FwdGlvbjogJ0NhcmkgS29kJywgd2lkdGg6IDEyMH0sXHJcbiAgICAgICAge2RhdGFGaWVsZDogJ2NhcmROYW1lJywgY2FwdGlvbjogJ0NhcmkgVW52YW4nfSxcclxuICAgIF07XHJcblxyXG4gICAgLy8gRm9ybSBmaWVsZHNcclxuICAgIGdhdGVDb2RlID0gJyc7XHJcbiAgICBlbnRyeURhdGVUaW1lOiBEYXRlIHwgbnVsbCA9IG51bGw7XHJcbiAgICBleGl0RGF0ZVRpbWU6IERhdGUgfCBudWxsID0gbnVsbDtcclxuICAgIHNlbGVjdGVkVHlwZUNvZGUgPSAnJztcclxuICAgIHNlbGVjdGVkVHlwZU5hbWUgPSAnJztcclxuICAgIHNlbGVjdGVkUGxhdGVObyA9ICcnO1xyXG4gICAgdGNObyA9ICcnO1xyXG4gICAgc2VsZWN0ZWRDYXJyaWVyTmFtZSA9ICcnO1xyXG4gICAgYnVzaW5lc3NQYXJ0bmVyRGF0YTogQnVzaW5lc3NQYXJ0bmVyW10gPSBbXTtcclxuICAgIHNlbGVjdGVkQnVzaW5lc3NQYXJ0bmVyQ29kZSA9ICcnO1xyXG4gICAgc2VsZWN0ZWRCdXNpbmVzc1BhcnRuZXJOYW1lID0gJyc7XHJcbiAgICBkZXNjcmlwdGlvbiA9ICcnO1xyXG5cclxuICAgIC8vIFBsYXRlIGlucHV0IG1vZGVcclxuICAgIHBsYXRlSW5wdXRNb2RlOiAnbG9va3VwJyB8ICdtYW51YWwnID0gJ2xvb2t1cCc7XHJcbiAgICBtYW51YWxQbGF0ZU5vID0gJyc7XHJcblxyXG4gICAgLy8gVHJhaWxlciBwbGF0ZVxyXG4gICAgdHJhaWxlclBsYXRlSW5wdXRNb2RlOiAnbG9va3VwJyB8ICdtYW51YWwnID0gJ2xvb2t1cCc7XHJcbiAgICBzZWxlY3RlZFRyYWlsZXJQbGF0ZU5vID0gJyc7XHJcbiAgICBtYW51YWxUcmFpbGVyUGxhdGVObyA9ICcnO1xyXG5cclxuICAgIC8vIENhcnJpZXIgVEMgbW9kZVxyXG4gICAgdGNMb29rdXBNb2RlID0gZmFsc2U7XHJcbiAgICBpc1RjUXVlcnlpbmcgPSBmYWxzZTtcclxuICAgIGlzTmV3Q2FycmllciA9IGZhbHNlO1xyXG5cclxuICAgIC8vIE5ldyBjYXJyaWVyIGZpZWxkc1xyXG4gICAgbmV3Q2FycmllckZpcnN0bmFtZSA9ICcnO1xyXG4gICAgbmV3Q2Fycmllckxhc3RuYW1lID0gJyc7XHJcbiAgICBuZXdDYXJyaWVyVGVsID0gJyc7XHJcblxyXG4gICAgaXNUY0NpdGl6ZW4gPSB0cnVlO1xyXG4gICAgaXNMb2FkaW5nID0gZmFsc2U7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBjb25maXJtYXRpb246IENvbmZpcm1hdGlvblNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBzZXJ2aWNlOiBIaXRGYWN0b3J5RW50cnlTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgY2FycmllclBlcnNvblNlcnZpY2U6IEhpdENhcnJpZXJQZXJzb25TZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcGxhdGVTZXJ2aWNlOiBIaXRQbGF0ZVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSB2ZWhpY2xlVHlwZVNlcnZpY2U6IEhpdFZlaGljbGVUeXBlU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGJ1c2luZXNzUGFydG5lclNlcnZpY2U6IEhpdEJ1c2luZXNzUGFydG5lclNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSB1c2VyR2F0ZVNlcnZpY2U6IEhpdFVzZXJHYXRlU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGxvY2FsaXphdGlvblNlcnZpY2U6IExvY2FsaXphdGlvblNlcnZpY2VcclxuICAgICkge1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudmVoaWNsZVR5cGVTZXJ2aWNlLmdldExpc3QoKS5zdWJzY3JpYmUoZCA9PiAodGhpcy50eXBlRGF0YSA9IGQpKTtcclxuICAgICAgICB0aGlzLmNhcnJpZXJQZXJzb25TZXJ2aWNlLmdldExpc3QoKS5zdWJzY3JpYmUoZCA9PiAodGhpcy5jYXJyaWVyRGF0YSA9IGQpKTtcclxuICAgICAgICB0aGlzLmJ1c2luZXNzUGFydG5lclNlcnZpY2UuZ2V0TGlzdCgpLnN1YnNjcmliZShkID0+ICh0aGlzLmJ1c2luZXNzUGFydG5lckRhdGEgPSBkKSk7XHJcbiAgICAgICAgdGhpcy51c2VyR2F0ZVNlcnZpY2UuZ2V0TXlHYXRlcygpLnN1YnNjcmliZShkID0+ICh0aGlzLmdhdGVEYXRhID0gZCkpO1xyXG4gICAgICAgIHRoaXMudXNlckdhdGVTZXJ2aWNlLmdldE15RGVmYXVsdEdhdGVDb2RlKCkuc3Vic2NyaWJlKGQgPT4gKHRoaXMuZGVmYXVsdEdhdGVDb2RlID0gZCA/PyAnJykpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgICAgICBpZiAoY2hhbmdlc1sndmlzaWJsZSddPy5jdXJyZW50VmFsdWUgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgdGhpcy5pbml0Rm9ybSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGluaXRGb3JtKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaXNUY0NpdGl6ZW4gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMucGxhdGVJbnB1dE1vZGUgPSAnbG9va3VwJztcclxuICAgICAgICB0aGlzLm1hbnVhbFBsYXRlTm8gPSAnJztcclxuICAgICAgICB0aGlzLnRyYWlsZXJQbGF0ZUlucHV0TW9kZSA9ICdsb29rdXAnO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUcmFpbGVyUGxhdGVObyA9ICcnO1xyXG4gICAgICAgIHRoaXMubWFudWFsVHJhaWxlclBsYXRlTm8gPSAnJztcclxuICAgICAgICB0aGlzLnRjTG9va3VwTW9kZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaXNOZXdDYXJyaWVyID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5uZXdDYXJyaWVyRmlyc3RuYW1lID0gJyc7XHJcbiAgICAgICAgdGhpcy5uZXdDYXJyaWVyTGFzdG5hbWUgPSAnJztcclxuICAgICAgICB0aGlzLm5ld0NhcnJpZXJUZWwgPSAnJztcclxuXHJcbiAgICAgICAgaWYgKHRoaXMucmVjb3JkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2F0ZUNvZGUgPSB0aGlzLnJlY29yZC51X0dhdGVDb2RlID8/ICcnO1xyXG4gICAgICAgICAgICB0aGlzLmVudHJ5RGF0ZVRpbWUgPSB0aGlzLmJ1aWxkRGF0ZVRpbWUodGhpcy5yZWNvcmQudV9FbnRyeURhdGUsIHRoaXMucmVjb3JkLnVfRW50cnlUaW1lKTtcclxuICAgICAgICAgICAgdGhpcy5leGl0RGF0ZVRpbWUgID0gdGhpcy5idWlsZERhdGVUaW1lKHRoaXMucmVjb3JkLnVfRXhpdERhdGUsICB0aGlzLnJlY29yZC51X0V4aXRUaW1lKTtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFR5cGVDb2RlID0gdGhpcy5yZWNvcmQudV9FbnRyeVR5cGU7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUeXBlTmFtZSA9IHRoaXMucmVjb3JkLnVfRW50cnlUeXBlO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUGxhdGVObyA9IHRoaXMuZm9ybWF0UGxhdGUodGhpcy5yZWNvcmQudV9QbGF0ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUcmFpbGVyUGxhdGVObyA9IHRoaXMuZm9ybWF0UGxhdGUodGhpcy5yZWNvcmQudV9Eb3JzZVBsYXRlID8/ICcnKTtcclxuICAgICAgICAgICAgdGhpcy50Y05vID0gdGhpcy5yZWNvcmQudV9UY05vO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ2Fycmllck5hbWUgPSB0aGlzLnJlY29yZC51X0RyaXZlcjtcclxuICAgICAgICAgICAgdGhpcy5kZXNjcmlwdGlvbiA9IHRoaXMucmVjb3JkLnVfRGVzY3JpcHRpb247XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRCdXNpbmVzc1BhcnRuZXJDb2RlID0gdGhpcy5yZWNvcmQudV9DYXJkQ29kZSA/PyAnJztcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEJ1c2luZXNzUGFydG5lck5hbWUgPSB0aGlzLmJ1c2luZXNzUGFydG5lckRhdGEuZmluZChwID0+IHAuY2FyZENvZGUgPT09IHRoaXMucmVjb3JkLnVfQ2FyZENvZGUpPy5jYXJkTmFtZSA/PyB0aGlzLnJlY29yZC51X0NhcmRDb2RlID8/ICcnO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2F0ZUNvZGUgPSB0aGlzLmRlZmF1bHRHYXRlQ29kZTtcclxuICAgICAgICAgICAgdGhpcy5lbnRyeURhdGVUaW1lID0gbmV3IERhdGUoKTtcclxuICAgICAgICAgICAgdGhpcy5leGl0RGF0ZVRpbWUgPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVHlwZUNvZGUgPSAnJztcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFR5cGVOYW1lID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRQbGF0ZU5vID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMudGNObyA9ICcnO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ2Fycmllck5hbWUgPSAnJztcclxuICAgICAgICAgICAgdGhpcy5kZXNjcmlwdGlvbiA9ICcnO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQnVzaW5lc3NQYXJ0bmVyQ29kZSA9ICcnO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQnVzaW5lc3NQYXJ0bmVyTmFtZSA9ICcnO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGJ1aWxkRGF0ZVRpbWUoZGF0ZVN0cj86IHN0cmluZywgdGltZU51bT86IG51bWJlcik6IERhdGUgfCBudWxsIHtcclxuICAgICAgICBpZiAoIWRhdGVTdHIpIHJldHVybiBudWxsO1xyXG4gICAgICAgIGNvbnN0IGQgPSBuZXcgRGF0ZShkYXRlU3RyKTtcclxuICAgICAgICBpZiAodGltZU51bSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGQuc2V0SG91cnMoTWF0aC5mbG9vcih0aW1lTnVtIC8gMTAwKSwgdGltZU51bSAlIDEwMCwgMCwgMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBkO1xyXG4gICAgfVxyXG5cclxuICAgIG9uVHlwZVNlbGVjdGVkKGU6IFZlaGljbGVUeXBlKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCFlKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFR5cGVDb2RlID0gZS5jb2RlO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUeXBlTmFtZSA9IGUubmFtZTtcclxuICAgIH1cclxuXHJcbiAgICBvblBsYXRlU2VsZWN0ZWQoZTogUGxhdGUpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIWUpIHJldHVybjtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkUGxhdGVObyA9IHRoaXMuZm9ybWF0UGxhdGUoZS5jb2RlKTtcclxuICAgIH1cclxuXHJcbiAgICBvblRyYWlsZXJQbGF0ZVNlbGVjdGVkKGU6IFBsYXRlKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCFlKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRyYWlsZXJQbGF0ZU5vID0gdGhpcy5mb3JtYXRQbGF0ZShlLmNvZGUpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uTWFudWFsUGxhdGVGb2N1c091dCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm1hbnVhbFBsYXRlTm8gPSB0aGlzLmZvcm1hdFBsYXRlKHRoaXMubWFudWFsUGxhdGVObyk7XHJcbiAgICB9XHJcblxyXG4gICAgb25NYW51YWxUcmFpbGVyUGxhdGVGb2N1c091dCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm1hbnVhbFRyYWlsZXJQbGF0ZU5vID0gdGhpcy5mb3JtYXRQbGF0ZSh0aGlzLm1hbnVhbFRyYWlsZXJQbGF0ZU5vKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogVMO8cmsgcGxha2FzxLFuxLEgXCIzNCBITUEgMDAxXCIgZm9ybWF0xLFuYSBkw7Zuw7zFn3TDvHLDvHIgKi9cclxuICAgIGZvcm1hdFBsYXRlKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmICghdmFsdWUpIHJldHVybiB2YWx1ZTtcclxuICAgICAgICBjb25zdCByYXcgPSB2YWx1ZS5yZXBsYWNlKC9bXkEtWmEtejAtOcOHxJ7EsMOWxZ7DnMOnxJ/EscO2xZ/DvF0vZywgJycpLnRvVXBwZXJDYXNlKCk7XHJcbiAgICAgICAgY29uc3QgbWF0Y2ggPSByYXcubWF0Y2goL14oXFxkezJ9KShbQS1aw4fEnsSww5bFnsOcXXsxLDN9KShcXGR7MSw0fSkkLyk7XHJcbiAgICAgICAgaWYgKG1hdGNoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBgJHttYXRjaFsxXX0gJHttYXRjaFsyXX0gJHttYXRjaFszXX1gO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdmFsdWUudHJpbSgpLnRvVXBwZXJDYXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgb25DYXJyaWVyTG9va3VwU2VsZWN0ZWQoZTogQ2FycmllclBlcnNvbik6IHZvaWQge1xyXG4gICAgICAgIGlmICghZSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDYXJyaWVyTmFtZSA9IGUubmFtZTtcclxuICAgICAgICB0aGlzLnRjTm8gPSBlLmNvZGU7XHJcbiAgICAgICAgdGhpcy5pc05ld0NhcnJpZXIgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnRjTG9va3VwTW9kZSA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQnVzaW5lc3NQYXJ0bmVyU2VsZWN0ZWQoZTogQnVzaW5lc3NQYXJ0bmVyKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCFlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRCdXNpbmVzc1BhcnRuZXJDb2RlID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRCdXNpbmVzc1BhcnRuZXJOYW1lID0gJyc7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEJ1c2luZXNzUGFydG5lckNvZGUgPSBlLmNhcmRDb2RlO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRCdXNpbmVzc1BhcnRuZXJOYW1lID0gZS5jYXJkTmFtZTtcclxuICAgIH1cclxuXHJcbiAgICBxdWVyeUNhcnJpZXJCeVRjTm8oKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgdGMgPSB0aGlzLnRjTm8/LnRyaW0oKTtcclxuICAgICAgICBpZiAoIXRjKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29uZmlybWF0aW9uLndhcm4odGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoJ0thZG9vZ2x1OjpQbGVhc2VFbnRlclRjTm8nKSwgJycsIHtcclxuICAgICAgICAgICAgICAgIGhpZGVZZXNCdG46IHRydWUsXHJcbiAgICAgICAgICAgICAgICBjYW5jZWxUZXh0OiB0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudCgnS2Fkb29nbHU6OkNhbmNlbCcpLFxyXG4gICAgICAgICAgICAgICAgZGlzbWlzc2libGU6IGZhbHNlLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmlzVGNRdWVyeWluZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5jYXJyaWVyUGVyc29uU2VydmljZS5nZXQodGMpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgIG5leHQ6IChjYXJyaWVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzVGNRdWVyeWluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgaWYgKGNhcnJpZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ2Fycmllck5hbWUgPSBjYXJyaWVyLm5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc05ld0NhcnJpZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENhcnJpZXJOYW1lID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc05ld0NhcnJpZXIgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmV3Q2FycmllckZpcnN0bmFtZSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmV3Q2Fycmllckxhc3RuYW1lID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXdDYXJyaWVyVGVsID0gJyc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVycm9yOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzVGNRdWVyeWluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc05ld0NhcnJpZXIgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5uZXdDYXJyaWVyRmlyc3RuYW1lID0gJyc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5ld0NhcnJpZXJMYXN0bmFtZSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5uZXdDYXJyaWVyVGVsID0gJyc7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2F2ZSgpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBlZmZlY3RpdmVQbGF0ZU5vID0gdGhpcy5mb3JtYXRQbGF0ZShcclxuICAgICAgICAgICAgdGhpcy5wbGF0ZUlucHV0TW9kZSA9PT0gJ21hbnVhbCdcclxuICAgICAgICAgICAgICAgID8gdGhpcy5tYW51YWxQbGF0ZU5vLnRyaW0oKS50b1VwcGVyQ2FzZSgpXHJcbiAgICAgICAgICAgICAgICA6IHRoaXMuc2VsZWN0ZWRQbGF0ZU5vXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgY29uc3QgZWZmZWN0aXZlVHJhaWxlclBsYXRlTm8gPSB0aGlzLmZvcm1hdFBsYXRlKFxyXG4gICAgICAgICAgICB0aGlzLnRyYWlsZXJQbGF0ZUlucHV0TW9kZSA9PT0gJ21hbnVhbCdcclxuICAgICAgICAgICAgICAgID8gdGhpcy5tYW51YWxUcmFpbGVyUGxhdGVOby50cmltKCkudG9VcHBlckNhc2UoKVxyXG4gICAgICAgICAgICAgICAgOiB0aGlzLnNlbGVjdGVkVHJhaWxlclBsYXRlTm9cclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRUeXBlQ29kZSB8fCAhZWZmZWN0aXZlUGxhdGVObyB8fCAhdGhpcy50Y05vPy50cmltKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5jb25maXJtYXRpb24ud2Fybih0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudCgnS2Fkb29nbHU6OkZpbGxSZXF1aXJlZEZpZWxkcycpLCAnJywge1xyXG4gICAgICAgICAgICAgICAgaGlkZVllc0J0bjogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGNhbmNlbFRleHQ6IHRoaXMubG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KCdLYWRvb2dsdTo6Q2FuY2VsJyksXHJcbiAgICAgICAgICAgICAgICBkaXNtaXNzaWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5pc1RjQ2l0aXplbiAmJiAhdGhpcy52YWxpZGF0ZVRDS04odGhpcy50Y05vKSkge1xyXG4gICAgICAgICAgICB0aGlzLmNvbmZpcm1hdGlvbi53YXJuKCdHZcOnZXJzaXogVC5DLiBLaW1saWsgTm8uIEzDvHRmZW4gMTEgaGFuZWxpLCBnZcOnZXJsaSBiaXIgVENLTiBnaXJpbml6LicsICcnLCB7XHJcbiAgICAgICAgICAgICAgICBoaWRlWWVzQnRuOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgY2FuY2VsVGV4dDogdGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoJ0thZG9vZ2x1OjpDYW5jZWwnKSxcclxuICAgICAgICAgICAgICAgIGRpc21pc3NpYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmlzTmV3Q2FycmllciAmJiAoIXRoaXMubmV3Q2FycmllckZpcnN0bmFtZT8udHJpbSgpIHx8ICF0aGlzLm5ld0NhcnJpZXJMYXN0bmFtZT8udHJpbSgpKSkge1xyXG4gICAgICAgICAgICB0aGlzLmNvbmZpcm1hdGlvbi53YXJuKHRoaXMubG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KCdLYWRvb2dsdTo6RW50ZXJOZXdEcml2ZXJOYW1lJyksICcnLCB7XHJcbiAgICAgICAgICAgICAgICBoaWRlWWVzQnRuOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgY2FuY2VsVGV4dDogdGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoJ0thZG9vZ2x1OjpDYW5jZWwnKSxcclxuICAgICAgICAgICAgICAgIGRpc21pc3NpYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGR0bzogU2F2ZUZhY3RvcnlFbnRyeUR0byA9IHtcclxuICAgICAgICAgICAgdV9HYXRlQ29kZTogdGhpcy5nYXRlQ29kZSxcclxuICAgICAgICAgICAgdV9FbnRyeURhdGU6IHRoaXMuZW50cnlEYXRlVGltZVxyXG4gICAgICAgICAgICAgICAgPyB0aGlzLmVudHJ5RGF0ZVRpbWUudG9JU09TdHJpbmcoKS5zcGxpdCgnVCcpWzBdXHJcbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgdV9FbnRyeVRpbWU6IHRoaXMuZW50cnlEYXRlVGltZVxyXG4gICAgICAgICAgICAgICAgPyB0aGlzLmVudHJ5RGF0ZVRpbWUuZ2V0SG91cnMoKSAqIDEwMCArIHRoaXMuZW50cnlEYXRlVGltZS5nZXRNaW51dGVzKClcclxuICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICB1X0V4aXREYXRlOiB0aGlzLmV4aXREYXRlVGltZVxyXG4gICAgICAgICAgICAgICAgPyB0aGlzLmV4aXREYXRlVGltZS50b0lTT1N0cmluZygpLnNwbGl0KCdUJylbMF1cclxuICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICB1X0V4aXRUaW1lOiB0aGlzLmV4aXREYXRlVGltZVxyXG4gICAgICAgICAgICAgICAgPyB0aGlzLmV4aXREYXRlVGltZS5nZXRIb3VycygpICogMTAwICsgdGhpcy5leGl0RGF0ZVRpbWUuZ2V0TWludXRlcygpXHJcbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgdV9FbnRyeVR5cGU6IHRoaXMuc2VsZWN0ZWRUeXBlQ29kZSxcclxuICAgICAgICAgICAgdV9QbGF0ZTogZWZmZWN0aXZlUGxhdGVObyxcclxuICAgICAgICAgICAgdV9Eb3JzZVBsYXRlOiBlZmZlY3RpdmVUcmFpbGVyUGxhdGVObyB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgIHVfVGNObzogdGhpcy50Y05vLnRyaW0oKSxcclxuICAgICAgICAgICAgdV9Ecml2ZXI6IHRoaXMuaXNOZXdDYXJyaWVyXHJcbiAgICAgICAgICAgICAgICA/IGAke3RoaXMubmV3Q2FycmllckZpcnN0bmFtZS50cmltKCl9ICR7dGhpcy5uZXdDYXJyaWVyTGFzdG5hbWUudHJpbSgpfWBcclxuICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICB1X0RyaXZlckZpcnN0bmFtZTogdGhpcy5pc05ld0NhcnJpZXIgPyB0aGlzLm5ld0NhcnJpZXJGaXJzdG5hbWUudHJpbSgpIDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICB1X0RyaXZlckxhc3RuYW1lOiB0aGlzLmlzTmV3Q2FycmllciA/IHRoaXMubmV3Q2Fycmllckxhc3RuYW1lLnRyaW0oKSA6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgdV9Ecml2ZXJUZWw6IHRoaXMuaXNOZXdDYXJyaWVyID8gKHRoaXMubmV3Q2FycmllclRlbC50cmltKCkgfHwgdW5kZWZpbmVkKSA6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgdV9DYXJkQ29kZTogdGhpcy5zZWxlY3RlZEJ1c2luZXNzUGFydG5lckNvZGUsXHJcbiAgICAgICAgICAgIHVfRGVzY3JpcHRpb246IHRoaXMuZGVzY3JpcHRpb24sXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY29uc3QgZG9TYXZlID0gKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBvYnMkID0gdGhpcy5yZWNvcmQ/LmRvY0VudHJ5XHJcbiAgICAgICAgICAgICAgICA/IHRoaXMuc2VydmljZS51cGRhdGUodGhpcy5yZWNvcmQuZG9jRW50cnkudG9TdHJpbmcoKSwgZHRvKVxyXG4gICAgICAgICAgICAgICAgOiB0aGlzLnNlcnZpY2UuY3JlYXRlKGR0byk7XHJcbiAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgb2JzJC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgICAgbmV4dDogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zYXZlZC5lbWl0KCk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY29uc3QgaXNNYW51YWwgPSB0aGlzLnBsYXRlSW5wdXRNb2RlID09PSAnbWFudWFsJyB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMudHJhaWxlclBsYXRlSW5wdXRNb2RlID09PSAnbWFudWFsJyAmJiAhIWVmZmVjdGl2ZVRyYWlsZXJQbGF0ZU5vKTtcclxuXHJcbiAgICAgICAgaWYgKGlzTWFudWFsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5wbGF0ZVNlcnZpY2UuZ2V0TGlzdCgpLnN1YnNjcmliZShwbGF0ZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBNYW51ZWwgcGxha2EgZHVwbGljYXRlIGtvbnRyb2zDvFxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucGxhdGVJbnB1dE1vZGUgPT09ICdtYW51YWwnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZHVwbGljYXRlID0gcGxhdGVzLmZpbmQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHAgPT4gcC5jb2RlLnRyaW0oKS50b1VwcGVyQ2FzZSgpID09PSBlZmZlY3RpdmVQbGF0ZU5vXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZHVwbGljYXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29uZmlybWF0aW9uLndhcm4oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudCgnS2Fkb29nbHU6OlBsYXRlQWxyZWFkeUV4aXN0cycsIGVmZmVjdGl2ZVBsYXRlTm8pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7aGlkZVllc0J0bjogdHJ1ZSwgY2FuY2VsVGV4dDogdGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoJ0thZG9vZ2x1OjpDYW5jZWwnKSwgZGlzbWlzc2libGU6IGZhbHNlfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBsYXRlSW5wdXRNb2RlID0gJ2xvb2t1cCc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRQbGF0ZU5vID0gZHVwbGljYXRlLmNvZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gTWFudWVsIGRvcnNlIHBsYWthIGR1cGxpY2F0ZSBrb250cm9sw7xcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnRyYWlsZXJQbGF0ZUlucHV0TW9kZSA9PT0gJ21hbnVhbCcgJiYgZWZmZWN0aXZlVHJhaWxlclBsYXRlTm8pIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB0cmFpbGVyRHVwbGljYXRlID0gcGxhdGVzLmZpbmQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHAgPT4gcC5jb2RlLnRyaW0oKS50b1VwcGVyQ2FzZSgpID09PSBlZmZlY3RpdmVUcmFpbGVyUGxhdGVOb1xyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRyYWlsZXJEdXBsaWNhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25maXJtYXRpb24ud2FybihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KCdLYWRvb2dsdTo6UGxhdGVBbHJlYWR5RXhpc3RzJywgZWZmZWN0aXZlVHJhaWxlclBsYXRlTm8pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7aGlkZVllc0J0bjogdHJ1ZSwgY2FuY2VsVGV4dDogdGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoJ0thZG9vZ2x1OjpDYW5jZWwnKSwgZGlzbWlzc2libGU6IGZhbHNlfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYWlsZXJQbGF0ZUlucHV0TW9kZSA9ICdsb29rdXAnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVHJhaWxlclBsYXRlTm8gPSB0cmFpbGVyRHVwbGljYXRlLmNvZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgZG9TYXZlKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGRvU2F2ZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvbk1vZGFsVmlzaWJsZUNoYW5nZSh2YWw6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnZpc2libGUgPSB2YWw7XHJcbiAgICAgICAgdGhpcy52aXNpYmxlQ2hhbmdlLmVtaXQodmFsKTtcclxuICAgICAgICBpZiAoIXZhbCkge1xyXG4gICAgICAgICAgICB0aGlzLmNhbmNlbGxlZC5lbWl0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNhbmNlbCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm9uTW9kYWxWaXNpYmxlQ2hhbmdlKGZhbHNlKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHZhbGlkYXRlVENLTih2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgY29uc3QgdGMgPSB2YWx1ZT8udHJpbSgpO1xyXG4gICAgICAgIGlmICghdGMgfHwgdGMubGVuZ3RoICE9PSAxMSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGlmICghL15cXGR7MTF9JC8udGVzdCh0YykpIHJldHVybiBmYWxzZTtcclxuICAgICAgICBpZiAodGNbMF0gPT09ICcwJykgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGNvbnN0IGQgPSB0Yy5zcGxpdCgnJykubWFwKE51bWJlcik7XHJcbiAgICAgICAgY29uc3QgZDEwID0gKChkWzBdICsgZFsyXSArIGRbNF0gKyBkWzZdICsgZFs4XSkgKiA3IC0gKGRbMV0gKyBkWzNdICsgZFs1XSArIGRbN10pKSAlIDEwO1xyXG4gICAgICAgIGlmIChkMTAgIT09IGRbOV0pIHJldHVybiBmYWxzZTtcclxuICAgICAgICBjb25zdCBkMTEgPSBkLnNsaWNlKDAsIDEwKS5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKSAlIDEwO1xyXG4gICAgICAgIHJldHVybiBkMTEgPT09IGRbMTBdO1xyXG4gICAgfVxyXG59XHJcbiIsIjxhYnAtbW9kYWwgW3Zpc2libGVdPVwidmlzaWJsZVwiICh2aXNpYmxlQ2hhbmdlKT1cIm9uTW9kYWxWaXNpYmxlQ2hhbmdlKCRldmVudClcIiBbb3B0aW9uc109XCJ7IHNpemU6ICdsZycsIGJhY2tkcm9wOiAnc3RhdGljJyB9XCI+XHJcbiAgPG5nLXRlbXBsYXRlICNhYnBIZWFkZXI+XHJcbiAgICA8aDM+e3sgcmVjb3JkPy5kb2NFbnRyeSA/ICgnQWJwVWk6OkVkaXQnIHwgYWJwTG9jYWxpemF0aW9uKSA6ICgnS2Fkb29nbHU6Ok5ld1JlY29yZCcgfCBhYnBMb2NhbGl6YXRpb24pIH19PC9oMz5cclxuICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICA8bmctdGVtcGxhdGUgI2FicEJvZHk+XHJcblxyXG4gICAgPCEtLSBHaXJpxZ8gLyDDh8Sxa8SxxZ8gQmlsZ2lsZXJpIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImJvcmRlciByb3VuZGVkIHAtMyBtYi0yXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJib3JkZXItYm90dG9tIHBiLTIgbWItMyBmdy1ib2xkIHRleHQtc2Vjb25kYXJ5XCI+XHJcbiAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jbG9jayBtZS0yXCI+PC9pPnt7ICdLYWRvb2dsdTo6RW50cnlFeGl0SW5mbycgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItM1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xIHNtYWxsIGZ3LXNlbWlib2xkIHRleHQtbXV0ZWRcIj57eyAnS2Fkb29nbHU6OkVudHJ5RGF0ZVRpbWUnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9sYWJlbD5cclxuICAgICAgICAgIDxkeC1kYXRlLWJveFxyXG4gICAgICAgICAgICBbKHZhbHVlKV09XCJlbnRyeURhdGVUaW1lXCJcclxuICAgICAgICAgICAgdHlwZT1cImRhdGV0aW1lXCJcclxuICAgICAgICAgICAgZGlzcGxheUZvcm1hdD1cImRkLk1NLnl5eXkgSEg6bW1cIlxyXG4gICAgICAgICAgICB3aWR0aD1cIjEwMCVcIj5cclxuICAgICAgICAgIDwvZHgtZGF0ZS1ib3g+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIG1iLTEgc21hbGwgZnctc2VtaWJvbGQgdGV4dC1tdXRlZFwiPnt7ICdLYWRvb2dsdTo6RXhpdERhdGVUaW1lJyB8IGFicExvY2FsaXphdGlvbiB9fTwvbGFiZWw+XHJcbiAgICAgICAgICA8ZHgtZGF0ZS1ib3hcclxuICAgICAgICAgICAgWyh2YWx1ZSldPVwiZXhpdERhdGVUaW1lXCJcclxuICAgICAgICAgICAgdHlwZT1cImRhdGV0aW1lXCJcclxuICAgICAgICAgICAgZGlzcGxheUZvcm1hdD1cImRkLk1NLnl5eXkgSEg6bW1cIlxyXG4gICAgICAgICAgICBbc2hvd0NsZWFyQnV0dG9uXT1cInRydWVcIlxyXG4gICAgICAgICAgICB3aWR0aD1cIjEwMCVcIj5cclxuICAgICAgICAgIDwvZHgtZGF0ZS1ib3g+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XHJcbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIG1iLTEgc21hbGwgZnctc2VtaWJvbGQgdGV4dC1tdXRlZFwiPnt7ICdLYWRvb2dsdTo6R2F0ZScgfCBhYnBMb2NhbGl6YXRpb24gfX08L2xhYmVsPlxyXG4gICAgICAgICAgPGR4LXNlbGVjdC1ib3hcclxuICAgICAgICAgICAgWyh2YWx1ZSldPVwiZ2F0ZUNvZGVcIlxyXG4gICAgICAgICAgICBbZGF0YVNvdXJjZV09XCJnYXRlRGF0YVwiXHJcbiAgICAgICAgICAgIGRpc3BsYXlFeHByPVwibmFtZVwiXHJcbiAgICAgICAgICAgIHZhbHVlRXhwcj1cImNvZGVcIlxyXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0thZG9vZ2x1OjpTZWxlY3RHYXRlJyB8IGFicExvY2FsaXphdGlvblwiXHJcbiAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiPlxyXG4gICAgICAgICAgPC9keC1zZWxlY3QtYm94PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gQXJhw6cgQmlsZ2lsZXJpIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImJvcmRlciByb3VuZGVkIHAtMyBtYi0yXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJib3JkZXItYm90dG9tIHBiLTIgbWItMyBmdy1ib2xkIHRleHQtc2Vjb25kYXJ5XCI+XHJcbiAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS10cnVjayBtZS0yXCI+PC9pPnt7ICdLYWRvb2dsdTo6VmVoaWNsZUluZm8nIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIG1iLTEgc21hbGwgZnctc2VtaWJvbGQgdGV4dC1tdXRlZFwiPlxyXG4gICAgICAgICAgQXJhw6cgSGFyZWtldCBUw7xyw7wgPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPio8L3NwYW4+XHJcbiAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICA8aGl0LWxvb2t1cC1zZWxlY3RcclxuICAgICAgICAgIFtnZXRGbl09XCJ0eXBlRGF0YVwiXHJcbiAgICAgICAgICBbY29sdW1uc109XCJ0eXBlQ29sdW1uc1wiXHJcbiAgICAgICAgICBkaXNwbGF5TmFtZT1cIm5hbWVcIlxyXG4gICAgICAgICAgW2VkaXRpbmdEYXRhXT1cInNlbGVjdGVkVHlwZU5hbWVcIlxyXG4gICAgICAgICAgKHNlbGVjdGVkKT1cIm9uVHlwZVNlbGVjdGVkKCRldmVudClcIj5cclxuICAgICAgICA8L2hpdC1sb29rdXAtc2VsZWN0PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xIHNtYWxsIGZ3LXNlbWlib2xkIHRleHQtbXV0ZWRcIj5cclxuICAgICAgICAgIHt7ICdLYWRvb2dsdTo6UGxhdGUnIHwgYWJwTG9jYWxpemF0aW9uIH19IDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIj4qPC9zcGFuPlxyXG4gICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBsYXRlSW5wdXRNb2RlID09PSAnbG9va3VwJ1wiPlxyXG4gICAgICAgICAgPGhpdC1sb29rdXAtc2VsZWN0XHJcbiAgICAgICAgICAgIFtsb2FkRm5dPVwibG9hZFZlaGljbGVQbGF0ZXNcIlxyXG4gICAgICAgICAgICBbY29sdW1uc109XCJwbGF0ZUNvbHVtbnNcIlxyXG4gICAgICAgICAgICBkaXNwbGF5TmFtZT1cImNvZGVcIlxyXG4gICAgICAgICAgICBrZXlFeHByPVwiY29kZVwiXHJcbiAgICAgICAgICAgIFtlZGl0aW5nRGF0YV09XCJzZWxlY3RlZFBsYXRlTm9cIlxyXG4gICAgICAgICAgICAoc2VsZWN0ZWQpPVwib25QbGF0ZVNlbGVjdGVkKCRldmVudClcIj5cclxuICAgICAgICAgIDwvaGl0LWxvb2t1cC1zZWxlY3Q+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMVwiPlxyXG4gICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgY2xhc3M9XCJzbWFsbCB0ZXh0LXByaW1hcnlcIiAoY2xpY2spPVwicGxhdGVJbnB1dE1vZGUgPSAnbWFudWFsJ1wiPlxyXG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEta2V5Ym9hcmQgbWUtMVwiPjwvaT4ge3sgJ0thZG9vZ2x1OjpNYW51YWxFbnRyeScgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBsYXRlSW5wdXRNb2RlID09PSAnbWFudWFsJ1wiPlxyXG4gICAgICAgICAgPGR4LXRleHQtYm94XHJcbiAgICAgICAgICAgIFsodmFsdWUpXT1cIm1hbnVhbFBsYXRlTm9cIlxyXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0thZG9vZ2x1OjpFbnRlclBsYXRlJyB8IGFicExvY2FsaXphdGlvblwiXHJcbiAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXHJcbiAgICAgICAgICAgIChvbkZvY3VzT3V0KT1cIm9uTWFudWFsUGxhdGVGb2N1c091dCgpXCI+XHJcbiAgICAgICAgICA8L2R4LXRleHQtYm94PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTFcIj5cclxuICAgICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiIGNsYXNzPVwic21hbGwgdGV4dC1wcmltYXJ5XCIgKGNsaWNrKT1cInBsYXRlSW5wdXRNb2RlID0gJ2xvb2t1cCdcIj5cclxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWxpc3QgbWUtMVwiPjwvaT4ge3sgJ0thZG9vZ2x1OjpTZWxlY3RGcm9tTGlzdCcgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIG1iLTEgc21hbGwgZnctc2VtaWJvbGQgdGV4dC1tdXRlZFwiPlxyXG4gICAgICAgICAge3sgJ0thZG9vZ2x1OjpEb3JzZVBsYXRlJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRyYWlsZXJQbGF0ZUlucHV0TW9kZSA9PT0gJ2xvb2t1cCdcIj5cclxuICAgICAgICAgIDxoaXQtbG9va3VwLXNlbGVjdFxyXG4gICAgICAgICAgICBbbG9hZEZuXT1cImxvYWRUcmFpbGVyUGxhdGVzXCJcclxuICAgICAgICAgICAgW2NvbHVtbnNdPVwicGxhdGVDb2x1bW5zXCJcclxuICAgICAgICAgICAgZGlzcGxheU5hbWU9XCJjb2RlXCJcclxuICAgICAgICAgICAga2V5RXhwcj1cImNvZGVcIlxyXG4gICAgICAgICAgICBbZWRpdGluZ0RhdGFdPVwic2VsZWN0ZWRUcmFpbGVyUGxhdGVOb1wiXHJcbiAgICAgICAgICAgIChzZWxlY3RlZCk9XCJvblRyYWlsZXJQbGF0ZVNlbGVjdGVkKCRldmVudClcIj5cclxuICAgICAgICAgIDwvaGl0LWxvb2t1cC1zZWxlY3Q+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMVwiPlxyXG4gICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgY2xhc3M9XCJzbWFsbCB0ZXh0LXByaW1hcnlcIiAoY2xpY2spPVwidHJhaWxlclBsYXRlSW5wdXRNb2RlID0gJ21hbnVhbCdcIj5cclxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWtleWJvYXJkIG1lLTFcIj48L2k+IHt7ICdLYWRvb2dsdTo6TWFudWFsRW50cnknIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0cmFpbGVyUGxhdGVJbnB1dE1vZGUgPT09ICdtYW51YWwnXCI+XHJcbiAgICAgICAgICA8ZHgtdGV4dC1ib3hcclxuICAgICAgICAgICAgWyh2YWx1ZSldPVwibWFudWFsVHJhaWxlclBsYXRlTm9cIlxyXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0thZG9vZ2x1OjpFbnRlclBsYXRlJyB8IGFicExvY2FsaXphdGlvblwiXHJcbiAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXHJcbiAgICAgICAgICAgIChvbkZvY3VzT3V0KT1cIm9uTWFudWFsVHJhaWxlclBsYXRlRm9jdXNPdXQoKVwiPlxyXG4gICAgICAgICAgPC9keC10ZXh0LWJveD5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0xXCI+XHJcbiAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIiBjbGFzcz1cInNtYWxsIHRleHQtcHJpbWFyeVwiIChjbGljayk9XCJ0cmFpbGVyUGxhdGVJbnB1dE1vZGUgPSAnbG9va3VwJ1wiPlxyXG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtbGlzdCBtZS0xXCI+PC9pPiB7eyAnS2Fkb29nbHU6OlNlbGVjdEZyb21MaXN0JyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIFPDvHLDvGPDvCAmIEZpcm1hIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImJvcmRlciByb3VuZGVkIHAtMyBtYi0yXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJib3JkZXItYm90dG9tIHBiLTIgbWItMyBmdy1ib2xkIHRleHQtc2Vjb25kYXJ5XCI+XHJcbiAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1pZC1jYXJkIG1lLTJcIj48L2k+e3sgJ0thZG9vZ2x1OjpEcml2ZXJBbmRDb21wYW55JyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgbWItMVwiPlxyXG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0wIHNtYWxsIGZ3LXNlbWlib2xkIHRleHQtbXV0ZWRcIj5cclxuICAgICAgICAgICAge3sgaXNUY0NpdGl6ZW4gPyAoJ0thZG9vZ2x1OjpUY0lkZW50aXR5Tm8nIHwgYWJwTG9jYWxpemF0aW9uKSA6ICdLaW1saWsgTm8nIH19IDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIj4qPC9zcGFuPlxyXG4gICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgIDxkeC1jaGVjay1ib3ggWyh2YWx1ZSldPVwiaXNUY0NpdGl6ZW5cIiB0ZXh0PVwiVC5DLiBWYXRhbmRhxZ/EsVwiPjwvZHgtY2hlY2stYm94PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhdGNMb29rdXBNb2RlXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0yXCI+XHJcbiAgICAgICAgICAgIDxkeC10ZXh0LWJveFxyXG4gICAgICAgICAgICAgIFsodmFsdWUpXT1cInRjTm9cIlxyXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJpc1RjQ2l0aXplbiA/ICgnS2Fkb29nbHU6OlRjSWRlbnRpdHlObycgfCBhYnBMb2NhbGl6YXRpb24pIDogJ0tpbWxpayBObydcIlxyXG4gICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiPlxyXG4gICAgICAgICAgICA8L2R4LXRleHQtYm94PlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5IGJ0bi1zbSB0ZXh0LW5vd3JhcFwiXHJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzVGNRdWVyeWluZ1wiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInF1ZXJ5Q2FycmllckJ5VGNObygpXCI+XHJcbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1zZWFyY2ggbWUtMVwiPjwvaT5cclxuICAgICAgICAgICAgICB7eyAoaXNUY1F1ZXJ5aW5nID8gJ0thZG9vZ2x1OjpRdWVyeWluZycgOiAnS2Fkb29nbHU6OlF1ZXJ5JykgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0xXCI+XHJcbiAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIiBjbGFzcz1cInNtYWxsIHRleHQtcHJpbWFyeVwiIChjbGljayk9XCJ0Y0xvb2t1cE1vZGUgPSB0cnVlXCI+XHJcbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1saXN0IG1lLTFcIj48L2k+IHt7ICdLYWRvb2dsdTo6U2VsZWN0RnJvbUxpc3QnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0Y0xvb2t1cE1vZGVcIj5cclxuICAgICAgICAgIDxoaXQtbG9va3VwLXNlbGVjdFxyXG4gICAgICAgICAgICBbZ2V0Rm5dPVwiY2FycmllckRhdGFcIlxyXG4gICAgICAgICAgICBbY29sdW1uc109XCJjYXJyaWVyQ29sdW1uc1wiXHJcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lPVwibmFtZVwiXHJcbiAgICAgICAgICAgIFtlZGl0aW5nRGF0YV09XCJzZWxlY3RlZENhcnJpZXJOYW1lXCJcclxuICAgICAgICAgICAgKHNlbGVjdGVkKT1cIm9uQ2Fycmllckxvb2t1cFNlbGVjdGVkKCRldmVudClcIj5cclxuICAgICAgICAgIDwvaGl0LWxvb2t1cC1zZWxlY3Q+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMVwiPlxyXG4gICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgY2xhc3M9XCJzbWFsbCB0ZXh0LXByaW1hcnlcIiAoY2xpY2spPVwidGNMb29rdXBNb2RlID0gZmFsc2VcIj5cclxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWtleWJvYXJkIG1lLTFcIj48L2k+IHt7ICdLYWRvb2dsdTo6UXVlcnlCeVRjJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8IS0tIE1ldmN1dCBzw7xyw7xjw7w6IHNhZGVjZSBhZMSxIGfDtnN0ZXIgKHJlYWRvbmx5KSAtLT5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc05ld0NhcnJpZXJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xIHNtYWxsIGZ3LXNlbWlib2xkIHRleHQtbXV0ZWRcIj5cclxuICAgICAgICAgICAge3sgJ0thZG9vZ2x1OjpEcml2ZXJOYW1lU3VybmFtZScgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICA8ZHgtdGV4dC1ib3hcclxuICAgICAgICAgICAgWyh2YWx1ZSldPVwic2VsZWN0ZWRDYXJyaWVyTmFtZVwiXHJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgd2lkdGg9XCIxMDAlXCI+XHJcbiAgICAgICAgICA8L2R4LXRleHQtYm94PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgIDwhLS0gWWVuaSBzw7xyw7xjw7w6IEFkLCBTb3lhZCwgVGVsZWZvbiBhbGFubGFyxLFuxLEgZ8O2c3RlciAtLT5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzTmV3Q2FycmllclwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItM1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgbWItMSBzbWFsbCBmdy1zZW1pYm9sZCB0ZXh0LW11dGVkXCI+XHJcbiAgICAgICAgICAgICAge3sgJ0thZG9vZ2x1OjpGaXJzdE5hbWUnIHwgYWJwTG9jYWxpemF0aW9uIH19IDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIj4qPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICA8ZHgtdGV4dC1ib3hcclxuICAgICAgICAgICAgICBbKHZhbHVlKV09XCJuZXdDYXJyaWVyRmlyc3RuYW1lXCJcclxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0thZG9vZ2x1OjpGaXJzdE5hbWUnIHwgYWJwTG9jYWxpemF0aW9uXCJcclxuICAgICAgICAgICAgICB3aWR0aD1cIjEwMCVcIj5cclxuICAgICAgICAgICAgPC9keC10ZXh0LWJveD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgbWItMSBzbWFsbCBmdy1zZW1pYm9sZCB0ZXh0LW11dGVkXCI+XHJcbiAgICAgICAgICAgICAge3sgJ0thZG9vZ2x1OjpMYXN0TmFtZScgfCBhYnBMb2NhbGl6YXRpb24gfX0gPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPio8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgIDxkeC10ZXh0LWJveFxyXG4gICAgICAgICAgICAgIFsodmFsdWUpXT1cIm5ld0NhcnJpZXJMYXN0bmFtZVwiXHJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidLYWRvb2dsdTo6TGFzdE5hbWUnIHwgYWJwTG9jYWxpemF0aW9uXCJcclxuICAgICAgICAgICAgICB3aWR0aD1cIjEwMCVcIj5cclxuICAgICAgICAgICAgPC9keC10ZXh0LWJveD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIG1iLTEgc21hbGwgZnctc2VtaWJvbGQgdGV4dC1tdXRlZFwiPlxyXG4gICAgICAgICAgICB7eyAnS2Fkb29nbHU6OlBob25lJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgIDxkeC10ZXh0LWJveFxyXG4gICAgICAgICAgICBbKHZhbHVlKV09XCJuZXdDYXJyaWVyVGVsXCJcclxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidLYWRvb2dsdTo6UGhvbmUnIHwgYWJwTG9jYWxpemF0aW9uXCJcclxuICAgICAgICAgICAgd2lkdGg9XCIxMDAlXCI+XHJcbiAgICAgICAgICA8L2R4LXRleHQtYm94PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC1pbmZvIHNtYWxsIHB5LTEgbWItM1wiPlxyXG4gICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1pbmZvLWNpcmNsZSBtZS0xXCI+PC9pPlxyXG4gICAgICAgICAge3sgJ0thZG9vZ2x1OjpOZXdEcml2ZXJBbGVydCcgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgbWItMSBzbWFsbCBmdy1zZW1pYm9sZCB0ZXh0LW11dGVkXCI+XHJcbiAgICAgICAgICB7eyAnS2Fkb29nbHU6OkJ1c2luZXNzUGFydG5lcicgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgIDxoaXQtbG9va3VwLXNlbGVjdFxyXG4gICAgICAgICAgW2dldEZuXT1cImJ1c2luZXNzUGFydG5lckRhdGFcIlxyXG4gICAgICAgICAgW2NvbHVtbnNdPVwiYnVzaW5lc3NQYXJ0bmVyQ29sdW1uc1wiXHJcbiAgICAgICAgICBkaXNwbGF5TmFtZT1cImNhcmROYW1lXCJcclxuICAgICAgICAgIGtleUV4cHI9XCJjYXJkQ29kZVwiXHJcbiAgICAgICAgICBbZWRpdGluZ0RhdGFdPVwic2VsZWN0ZWRCdXNpbmVzc1BhcnRuZXJOYW1lXCJcclxuICAgICAgICAgIChzZWxlY3RlZCk9XCJvbkJ1c2luZXNzUGFydG5lclNlbGVjdGVkKCRldmVudClcIj5cclxuICAgICAgICA8L2hpdC1sb29rdXAtc2VsZWN0PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gQcOnxLFrbGFtYSAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgbWItMSBzbWFsbCBmdy1zZW1pYm9sZCB0ZXh0LW11dGVkXCI+e3sgJ0thZG9vZ2x1OjpEZXNjcmlwdGlvbicgfCBhYnBMb2NhbGl6YXRpb24gfX08L2xhYmVsPlxyXG4gICAgICA8ZHgtdGV4dC1hcmVhXHJcbiAgICAgICAgWyh2YWx1ZSldPVwiZGVzY3JpcHRpb25cIlxyXG4gICAgICAgIFtoZWlnaHRdPVwiODBcIlxyXG4gICAgICAgIHdpZHRoPVwiMTAwJVwiPlxyXG4gICAgICA8L2R4LXRleHQtYXJlYT5cclxuICAgIDwvZGl2PlxyXG5cclxuICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICA8bmctdGVtcGxhdGUgI2FicEZvb3Rlcj5cclxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnlcIiAoY2xpY2spPVwiY2FuY2VsKClcIj5cclxuICAgICAge3sgJ0FicFVpOjpDYW5jZWwnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDxhYnAtYnV0dG9uXHJcbiAgICAgIGljb25DbGFzcz1cImZhIGZhLXNhdmVcIlxyXG4gICAgICBidXR0b25UeXBlPVwiYnV0dG9uXCJcclxuICAgICAgW2xvYWRpbmddPVwiaXNMb2FkaW5nXCJcclxuICAgICAgKGNsaWNrKT1cInNhdmUoKVwiPlxyXG4gICAgICB7eyAnQWJwVWk6OlNhdmUnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICA8L2FicC1idXR0b24+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuPC9hYnAtbW9kYWw+XHJcbiJdfQ==
426
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGl0LWZhY3RvcnktZW50cnktZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rYWRvb2dsdS9zcmMvbGliL2hpdC1jb21wb25lbnRzL2hpdC1mYWN0b3J5LWVudHJ5L2hpdC1mYWN0b3J5LWVudHJ5LWZvcm0vaGl0LWZhY3RvcnktZW50cnktZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rYWRvb2dsdS9zcmMvbGliL2hpdC1jb21wb25lbnRzL2hpdC1mYWN0b3J5LWVudHJ5L2hpdC1mYWN0b3J5LWVudHJ5LWZvcm0vaGl0LWZhY3RvcnktZW50cnktZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBZ0IsTUFBTSxlQUFlLENBQUM7QUFldkcsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7Ozs7O0FBTW5DLE1BQU0sT0FBTyw0QkFBNEI7SUE0RXJDLFlBQ1ksWUFBaUMsRUFDakMsT0FBK0IsRUFDL0Isb0JBQTZDLEVBQzdDLFlBQTZCLEVBQzdCLGtCQUF5QyxFQUN6QyxzQkFBaUQsRUFDakQsZUFBbUMsRUFDbkMsbUJBQXdDO1FBUHhDLGlCQUFZLEdBQVosWUFBWSxDQUFxQjtRQUNqQyxZQUFPLEdBQVAsT0FBTyxDQUF3QjtRQUMvQix5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXlCO1FBQzdDLGlCQUFZLEdBQVosWUFBWSxDQUFpQjtRQUM3Qix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQXVCO1FBQ3pDLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBMkI7UUFDakQsb0JBQWUsR0FBZixlQUFlLENBQW9CO1FBQ25DLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFuRjNDLFlBQU8s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cnQge0NvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlc30gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7Q29uZmlybWF0aW9uU2VydmljZX0gZnJvbSAnQGFicC9uZy50aGVtZS5zaGFyZWQnO1xyXG5pbXBvcnQge0xvY2FsaXphdGlvblNlcnZpY2V9IGZyb20gJ0BhYnAvbmcuY29yZSc7XHJcbmltcG9ydCB7SGl0RmFjdG9yeUVudHJ5U2VydmljZX0gZnJvbSAnLi4vLi4vLi4vaGl0LXByb3h5L2hpdC1mYWN0b3J5LWVudHJ5L2hpdC1mYWN0b3J5LWVudHJ5LnNlcnZpY2UnO1xyXG5pbXBvcnQge0hpdFZlaGljbGVUeXBlU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vaGl0LXByb3h5L2hpdC12ZWhpY2xlLXR5cGUvaGl0LXZlaGljbGUtdHlwZS5zZXJ2aWNlJztcclxuaW1wb3J0IHtWZWhpY2xlVHlwZX0gZnJvbSAnLi4vLi4vLi4vaGl0LXByb3h5L2hpdC12ZWhpY2xlLXR5cGUvbW9kZWxzJztcclxuaW1wb3J0IHtQbGF0ZX0gZnJvbSAnLi4vLi4vLi4vaGl0LXByb3h5L2hpdC1wbGF0ZS9tb2RlbHMnO1xyXG5pbXBvcnQge0NhcnJpZXJQZXJzb259IGZyb20gJy4uLy4uLy4uL2hpdC1wcm94eS9oaXQtY2Fycmllci1wZXJzb24vbW9kZWxzJztcclxuaW1wb3J0IHtIaXRDYXJyaWVyUGVyc29uU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vaGl0LXByb3h5L2hpdC1jYXJyaWVyLXBlcnNvbi9oaXQtY2Fycmllci1wZXJzb24uc2VydmljZSc7XHJcbmltcG9ydCB7SGl0UGxhdGVTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9oaXQtcHJveHkvaGl0LXBsYXRlL2hpdC1wbGF0ZS5zZXJ2aWNlJztcclxuaW1wb3J0IHtGYWN0b3J5RW50cnksIFNhdmVGYWN0b3J5RW50cnlEdG99IGZyb20gXCIuLi8uLi8uLi9oaXQtcHJveHkvaGl0LWZhY3RvcnktZW50cnkvbW9kZWxzXCI7XHJcbmltcG9ydCB7SGl0QnVzaW5lc3NQYXJ0bmVyU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vaGl0LXByb3h5L2hpdC1idXNpbmVzcy1wYXJ0bmVyL2hpdC1idXNpbmVzcy1wYXJ0bmVyLnNlcnZpY2UnO1xyXG5pbXBvcnQge0J1c2luZXNzUGFydG5lcn0gZnJvbSAnLi4vLi4vLi4vaGl0LXByb3h5L2hpdC1idXNpbmVzcy1wYXJ0bmVyL21vZGVscyc7XHJcbmltcG9ydCB7SGl0VXNlckdhdGVTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9oaXQtcHJveHkvaGl0LXVzZXItZ2F0ZS9oaXQtdXNlci1nYXRlLnNlcnZpY2UnO1xyXG5pbXBvcnQge0dhdGV9IGZyb20gJy4uLy4uLy4uL2hpdC1wcm94eS9oaXQtZ2F0ZS9tb2RlbHMnO1xyXG5pbXBvcnQge21hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2xpYi1oaXQtZmFjdG9yeS1lbnRyeS1mb3JtJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9oaXQtZmFjdG9yeS1lbnRyeS1mb3JtLmNvbXBvbmVudC5odG1sJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIEhpdEZhY3RvcnlFbnRyeUZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XHJcbiAgICBASW5wdXQoKSB2aXNpYmxlID0gZmFsc2U7XHJcbiAgICBAT3V0cHV0KCkgdmlzaWJsZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuICAgIEBJbnB1dCgpIHJlY29yZDogRmFjdG9yeUVudHJ5IHwgbnVsbCA9IG51bGw7XHJcbiAgICBAT3V0cHV0KCkgc2F2ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcbiAgICBAT3V0cHV0KCkgY2FuY2VsbGVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuICAgIC8vIExvb2t1cCBkYXRhIGFycmF5cyBmb3IgbW9kYWxzXHJcbiAgICB0eXBlRGF0YTogVmVoaWNsZVR5cGVbXSA9IFtdO1xyXG4gICAgY2FycmllckRhdGE6IENhcnJpZXJQZXJzb25bXSA9IFtdO1xyXG5cclxuICAgIC8vIExhenkgbG9hZGVycyBmb3IgcGxhdGUgbG9va3VwcyDigJQgZmlsdGVyZWQgYnkgdV9Jc1RyYWlsZXJcclxuICAgIGxvYWRWZWhpY2xlUGxhdGVzID0gKCkgPT4gdGhpcy5wbGF0ZVNlcnZpY2UuZ2V0TGlzdCgpLnBpcGUoXHJcbiAgICAgICAgbWFwKHBsYXRlcyA9PiBwbGF0ZXMuZmlsdGVyKHAgPT4gcC51X0lzVHJhaWxlciAhPT0gJ1knKSlcclxuICAgICk7XHJcbiAgICBsb2FkVHJhaWxlclBsYXRlcyA9ICgpID0+IHRoaXMucGxhdGVTZXJ2aWNlLmdldExpc3QoKS5waXBlKFxyXG4gICAgICAgIG1hcChwbGF0ZXMgPT4gcGxhdGVzLmZpbHRlcihwID0+IHAudV9Jc1RyYWlsZXIgPT09ICdZJykpXHJcbiAgICApO1xyXG4gICAgZ2F0ZURhdGE6IEdhdGVbXSA9IFtdO1xyXG4gICAgZGVmYXVsdEdhdGVDb2RlID0gJyc7XHJcblxyXG4gICAgLy8gQ29sdW1uIGNvbmZpZ3MgZm9yIGxvb2t1cCBtb2RhbHNcclxuICAgIHR5cGVDb2x1bW5zID0gW1xyXG4gICAgICAgIHtkYXRhRmllbGQ6ICdjb2RlJywgY2FwdGlvbjogJ0tvZCcsIHdpZHRoOiAxMDB9LFxyXG4gICAgICAgIHtkYXRhRmllbGQ6ICduYW1lJywgY2FwdGlvbjogJ0FkJ30sXHJcbiAgICBdO1xyXG4gICAgcGxhdGVDb2x1bW5zID0gW1xyXG4gICAgICAgIHtkYXRhRmllbGQ6ICdjb2RlJywgY2FwdGlvbjogJ1BsYWthJywgd2lkdGg6IDEwMH0sXHJcbiAgICAgICAge2RhdGFGaWVsZDogJ25hbWUnLCBjYXB0aW9uOiAnTmFtZSd9LFxyXG4gICAgXTtcclxuICAgIGNhcnJpZXJDb2x1bW5zID0gW1xyXG4gICAgICAgIHtkYXRhRmllbGQ6ICdjb2RlJywgY2FwdGlvbjogJ1QuQy4gS2ltbGlrIE5vJywgd2lkdGg6IDE0MH0sXHJcbiAgICAgICAge2RhdGFGaWVsZDogJ25hbWUnLCBjYXB0aW9uOiAnQWQgU295YWQnfSxcclxuICAgIF07XHJcbiAgICBidXNpbmVzc1BhcnRuZXJDb2x1bW5zID0gW1xyXG4gICAgICAgIHtkYXRhRmllbGQ6ICdjYXJkQ29kZScsIGNhcHRpb246ICdDYXJpIEtvZCcsIHdpZHRoOiAxMjB9LFxyXG4gICAgICAgIHtkYXRhRmllbGQ6ICdjYXJkTmFtZScsIGNhcHRpb246ICdDYXJpIFVudmFuJ30sXHJcbiAgICBdO1xyXG5cclxuICAgIC8vIEZvcm0gZmllbGRzXHJcbiAgICBnYXRlQ29kZSA9ICcnO1xyXG4gICAgZW50cnlEYXRlVGltZTogRGF0ZSB8IG51bGwgPSBudWxsO1xyXG4gICAgZXhpdERhdGVUaW1lOiBEYXRlIHwgbnVsbCA9IG51bGw7XHJcbiAgICBzZWxlY3RlZFR5cGVDb2RlID0gJyc7XHJcbiAgICBzZWxlY3RlZFR5cGVOYW1lID0gJyc7XHJcbiAgICBzZWxlY3RlZFR5cGU6IFZlaGljbGVUeXBlIHwgbnVsbCA9IG51bGw7XHJcbiAgICBzZWxlY3RlZFBsYXRlTm8gPSAnJztcclxuICAgIHRjTm8gPSAnJztcclxuICAgIHNlbGVjdGVkQ2Fycmllck5hbWUgPSAnJztcclxuICAgIGJ1c2luZXNzUGFydG5lckRhdGE6IEJ1c2luZXNzUGFydG5lcltdID0gW107XHJcbiAgICBzZWxlY3RlZEJ1c2luZXNzUGFydG5lckNvZGUgPSAnJztcclxuICAgIHNlbGVjdGVkQnVzaW5lc3NQYXJ0bmVyTmFtZSA9ICcnO1xyXG4gICAgZGVzY3JpcHRpb24gPSAnJztcclxuXHJcbiAgICAvLyBQbGF0ZSBpbnB1dCBtb2RlXHJcbiAgICBwbGF0ZUlucHV0TW9kZTogJ2xvb2t1cCcgfCAnbWFudWFsJyA9ICdsb29rdXAnO1xyXG4gICAgbWFudWFsUGxhdGVObyA9ICcnO1xyXG5cclxuICAgIC8vIFRyYWlsZXIgcGxhdGVcclxuICAgIHRyYWlsZXJQbGF0ZUlucHV0TW9kZTogJ2xvb2t1cCcgfCAnbWFudWFsJyA9ICdsb29rdXAnO1xyXG4gICAgc2VsZWN0ZWRUcmFpbGVyUGxhdGVObyA9ICcnO1xyXG4gICAgbWFudWFsVHJhaWxlclBsYXRlTm8gPSAnJztcclxuXHJcbiAgICAvLyBDYXJyaWVyIFRDIG1vZGVcclxuICAgIHRjTG9va3VwTW9kZSA9IGZhbHNlO1xyXG4gICAgaXNUY1F1ZXJ5aW5nID0gZmFsc2U7XHJcbiAgICBpc05ld0NhcnJpZXIgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBOZXcgY2FycmllciBmaWVsZHNcclxuICAgIG5ld0NhcnJpZXJGaXJzdG5hbWUgPSAnJztcclxuICAgIG5ld0NhcnJpZXJMYXN0bmFtZSA9ICcnO1xyXG4gICAgbmV3Q2FycmllclRlbCA9ICcnO1xyXG5cclxuICAgIGlzVGNDaXRpemVuID0gdHJ1ZTtcclxuICAgIGlzTG9hZGluZyA9IGZhbHNlO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgY29uZmlybWF0aW9uOiBDb25maXJtYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgc2VydmljZTogSGl0RmFjdG9yeUVudHJ5U2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGNhcnJpZXJQZXJzb25TZXJ2aWNlOiBIaXRDYXJyaWVyUGVyc29uU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHBsYXRlU2VydmljZTogSGl0UGxhdGVTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgdmVoaWNsZVR5cGVTZXJ2aWNlOiBIaXRWZWhpY2xlVHlwZVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBidXNpbmVzc1BhcnRuZXJTZXJ2aWNlOiBIaXRCdXNpbmVzc1BhcnRuZXJTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgdXNlckdhdGVTZXJ2aWNlOiBIaXRVc2VyR2F0ZVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBsb2NhbGl6YXRpb25TZXJ2aWNlOiBMb2NhbGl6YXRpb25TZXJ2aWNlLFxyXG4gICAgKSB7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy52ZWhpY2xlVHlwZVNlcnZpY2UuZ2V0TGlzdCgpLnN1YnNjcmliZShkID0+IHtcclxuICAgICAgICAgICAgdGhpcy50eXBlRGF0YSA9IGQ7XHJcbiAgICAgICAgICAgIC8vIEZvcm0gZMO8emVubGVtZSBtb2R1bmRhIGHDp8Sxa3NhIHR5cGVEYXRhIHnDvGtsZW5kaWt0ZW4gc29ucmEgc2VsZWN0ZWRUeXBlJ8SxIMOnw7Z6XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnJlY29yZD8udV9FbnRyeVR5cGUgJiYgIXRoaXMuc2VsZWN0ZWRUeXBlKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmb3VuZCA9IGQuZmluZCh0ID0+IHQuY29kZSA9PT0gdGhpcy5yZWNvcmQudV9FbnRyeVR5cGUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGZvdW5kKSB0aGlzLnNlbGVjdGVkVHlwZSA9IGZvdW5kO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5jYXJyaWVyUGVyc29uU2VydmljZS5nZXRMaXN0KCkuc3Vic2NyaWJlKGQgPT4gKHRoaXMuY2FycmllckRhdGEgPSBkKSk7XHJcbiAgICAgICAgdGhpcy5idXNpbmVzc1BhcnRuZXJTZXJ2aWNlLmdldExpc3QoKS5zdWJzY3JpYmUoZCA9PiAodGhpcy5idXNpbmVzc1BhcnRuZXJEYXRhID0gZCkpO1xyXG4gICAgICAgIHRoaXMudXNlckdhdGVTZXJ2aWNlLmdldE15R2F0ZXMoKS5zdWJzY3JpYmUoZCA9PiAodGhpcy5nYXRlRGF0YSA9IGQpKTtcclxuICAgICAgICB0aGlzLnVzZXJHYXRlU2VydmljZS5nZXRNeURlZmF1bHRHYXRlQ29kZSgpLnN1YnNjcmliZShkID0+ICh0aGlzLmRlZmF1bHRHYXRlQ29kZSA9IGQgPz8gJycpKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKGNoYW5nZXNbJ3Zpc2libGUnXT8uY3VycmVudFZhbHVlID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdEZvcm0oKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpbml0Rm9ybSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmlzVGNDaXRpemVuID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkVHlwZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5wbGF0ZUlucHV0TW9kZSA9ICdsb29rdXAnO1xyXG4gICAgICAgIHRoaXMubWFudWFsUGxhdGVObyA9ICcnO1xyXG4gICAgICAgIHRoaXMudHJhaWxlclBsYXRlSW5wdXRNb2RlID0gJ2xvb2t1cCc7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRyYWlsZXJQbGF0ZU5vID0gJyc7XHJcbiAgICAgICAgdGhpcy5tYW51YWxUcmFpbGVyUGxhdGVObyA9ICcnO1xyXG4gICAgICAgIHRoaXMudGNMb29rdXBNb2RlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc05ld0NhcnJpZXIgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm5ld0NhcnJpZXJGaXJzdG5hbWUgPSAnJztcclxuICAgICAgICB0aGlzLm5ld0NhcnJpZXJMYXN0bmFtZSA9ICcnO1xyXG4gICAgICAgIHRoaXMubmV3Q2FycmllclRlbCA9ICcnO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5yZWNvcmQpIHtcclxuICAgICAgICAgICAgdGhpcy5nYXRlQ29kZSA9IHRoaXMucmVjb3JkLnVfR2F0ZUNvZGUgPz8gJyc7XHJcbiAgICAgICAgICAgIHRoaXMuZW50cnlEYXRlVGltZSA9IHRoaXMuYnVpbGREYXRlVGltZSh0aGlzLnJlY29yZC51X0VudHJ5RGF0ZSwgdGhpcy5yZWNvcmQudV9FbnRyeVRpbWUpO1xyXG4gICAgICAgICAgICB0aGlzLmV4aXREYXRlVGltZSAgPSB0aGlzLmJ1aWxkRGF0ZVRpbWUodGhpcy5yZWNvcmQudV9FeGl0RGF0ZSwgIHRoaXMucmVjb3JkLnVfRXhpdFRpbWUpO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVHlwZUNvZGUgPSB0aGlzLnJlY29yZC51X0VudHJ5VHlwZTtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFR5cGVOYW1lID0gdGhpcy5yZWNvcmQudV9FbnRyeVR5cGU7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRQbGF0ZU5vID0gdGhpcy5mb3JtYXRQbGF0ZSh0aGlzLnJlY29yZC51X1BsYXRlKTtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRyYWlsZXJQbGF0ZU5vID0gdGhpcy5mb3JtYXRQbGF0ZSh0aGlzLnJlY29yZC51X0RvcnNlUGxhdGUgPz8gJycpO1xyXG4gICAgICAgICAgICB0aGlzLnRjTm8gPSB0aGlzLnJlY29yZC51X1RjTm87XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDYXJyaWVyTmFtZSA9IHRoaXMucmVjb3JkLnVfRHJpdmVyO1xyXG4gICAgICAgICAgICB0aGlzLmRlc2NyaXB0aW9uID0gdGhpcy5yZWNvcmQudV9EZXNjcmlwdGlvbjtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEJ1c2luZXNzUGFydG5lckNvZGUgPSB0aGlzLnJlY29yZC51X0NhcmRDb2RlID8/ICcnO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQnVzaW5lc3NQYXJ0bmVyTmFtZSA9IHRoaXMuYnVzaW5lc3NQYXJ0bmVyRGF0YS5maW5kKHAgPT4gcC5jYXJkQ29kZSA9PT0gdGhpcy5yZWNvcmQudV9DYXJkQ29kZSk/LmNhcmROYW1lID8/IHRoaXMucmVjb3JkLnVfQ2FyZENvZGUgPz8gJyc7XHJcblxyXG4gICAgICAgICAgICAvLyBDYXJyaWVyJ2RhbiBUQyB2YXRhbmRhxZ/EsSBiaWxnaXNpbmkgb2t1XHJcbiAgICAgICAgICAgIGNvbnN0IGNhcnJpZXIgPSB0aGlzLmNhcnJpZXJEYXRhLmZpbmQoYyA9PiBjLmNvZGUgPT09IHRoaXMucmVjb3JkLnVfVGNObyk7XHJcbiAgICAgICAgICAgIHRoaXMuaXNUY0NpdGl6ZW4gPSBjYXJyaWVyID8gY2Fycmllci51X1RjVnRuZHNpTWkgIT09ICdOJyA6IHRydWU7XHJcblxyXG4gICAgICAgICAgICAvLyBTZcOnaWxpIHRpcHRlIE1hbCBHw4cgYmlsZ2lzaW5pIMOnw7Z6XHJcbiAgICAgICAgICAgIGNvbnN0IGZvdW5kVHlwZSA9IHRoaXMudHlwZURhdGEuZmluZCh0ID0+IHQuY29kZSA9PT0gdGhpcy5yZWNvcmQudV9FbnRyeVR5cGUpO1xyXG4gICAgICAgICAgICBpZiAoZm91bmRUeXBlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVHlwZSA9IGZvdW5kVHlwZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2F0ZUNvZGUgPSB0aGlzLmRlZmF1bHRHYXRlQ29kZTtcclxuICAgICAgICAgICAgdGhpcy5lbnRyeURhdGVUaW1lID0gbmV3IERhdGUoKTtcclxuICAgICAgICAgICAgdGhpcy5leGl0RGF0ZVRpbWUgPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVHlwZUNvZGUgPSAnJztcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFR5cGVOYW1lID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUeXBlID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFBsYXRlTm8gPSAnJztcclxuICAgICAgICAgICAgdGhpcy50Y05vID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDYXJyaWVyTmFtZSA9ICcnO1xyXG4gICAgICAgICAgICB0aGlzLmRlc2NyaXB0aW9uID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRCdXNpbmVzc1BhcnRuZXJDb2RlID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRCdXNpbmVzc1BhcnRuZXJOYW1lID0gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYnVpbGREYXRlVGltZShkYXRlU3RyPzogc3RyaW5nLCB0aW1lTnVtPzogbnVtYmVyKTogRGF0ZSB8IG51bGwge1xyXG4gICAgICAgIGlmICghZGF0ZVN0cikgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgY29uc3QgZCA9IG5ldyBEYXRlKGRhdGVTdHIpO1xyXG4gICAgICAgIGlmICh0aW1lTnVtICE9IG51bGwpIHtcclxuICAgICAgICAgICAgZC5zZXRIb3VycyhNYXRoLmZsb29yKHRpbWVOdW0gLyAxMDApLCB0aW1lTnVtICUgMTAwLCAwLCAwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGQ7XHJcbiAgICB9XHJcblxyXG4gICAgb25UeXBlU2VsZWN0ZWQoZTogVmVoaWNsZVR5cGUpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIWUpIHtcclxuICAgICAgICAgICAgLy8gSGFyZWtldCB0aXBpIHRlbWl6bGVuZGkg4oCUIGlsZ2lsaSB0w7xtIGFsYW5sYXLEsSBzxLFmxLFybGEgdmUgZ2l6bGVcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFR5cGVDb2RlID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUeXBlTmFtZSA9ICcnO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVHlwZSA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRQbGF0ZU5vID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMubWFudWFsUGxhdGVObyA9ICcnO1xyXG4gICAgICAgICAgICB0aGlzLnBsYXRlSW5wdXRNb2RlID0gJ2xvb2t1cCc7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUcmFpbGVyUGxhdGVObyA9ICcnO1xyXG4gICAgICAgICAgICB0aGlzLm1hbnVhbFRyYWlsZXJQbGF0ZU5vID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMudHJhaWxlclBsYXRlSW5wdXRNb2RlID0gJ2xvb2t1cCc7XHJcbiAgICAgICAgICAgIHRoaXMudGNObyA9ICcnO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ2Fycmllck5hbWUgPSAnJztcclxuICAgICAgICAgICAgdGhpcy5pc05ld0NhcnJpZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5uZXdDYXJyaWVyRmlyc3RuYW1lID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMubmV3Q2Fycmllckxhc3RuYW1lID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMubmV3Q2FycmllclRlbCA9ICcnO1xyXG4gICAgICAgICAgICB0aGlzLnRjTG9va3VwTW9kZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQnVzaW5lc3NQYXJ0bmVyQ29kZSA9ICcnO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQnVzaW5lc3NQYXJ0bmVyTmFtZSA9ICcnO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUeXBlQ29kZSA9IGUuY29kZTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkVHlwZU5hbWUgPSBlLm5hbWU7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFR5cGUgPSBlO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBzaG93RXh0cmFGaWVsZHMoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICEhdGhpcy5zZWxlY3RlZFR5cGVDb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIG9uUGxhdGVTZWxlY3RlZChlOiBQbGF0ZSk6IHZvaWQge1xyXG4gICAgICAgIGlmICghZSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRQbGF0ZU5vID0gdGhpcy5mb3JtYXRQbGF0ZShlLmNvZGUpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uVHJhaWxlclBsYXRlU2VsZWN0ZWQoZTogUGxhdGUpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIWUpIHJldHVybjtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkVHJhaWxlclBsYXRlTm8gPSB0aGlzLmZvcm1hdFBsYXRlKGUuY29kZSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25NYW51YWxQbGF0ZUZvY3VzT3V0KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMubWFudWFsUGxhdGVObyA9IHRoaXMuZm9ybWF0UGxhdGUodGhpcy5tYW51YWxQbGF0ZU5vKTtcclxuICAgIH1cclxuXHJcbiAgICBvbk1hbnVhbFRyYWlsZXJQbGF0ZUZvY3VzT3V0KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMubWFudWFsVHJhaWxlclBsYXRlTm8gPSB0aGlzLmZvcm1hdFBsYXRlKHRoaXMubWFudWFsVHJhaWxlclBsYXRlTm8pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBUw7xyayBwbGFrYXPEsW7EsSBcIjM0IEhNQSAwMDFcIiBmb3JtYXTEsW5hIGTDtm7DvMWfdMO8csO8ciAqL1xyXG4gICAgZm9ybWF0UGxhdGUodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKCF2YWx1ZSkgcmV0dXJuIHZhbHVlO1xyXG4gICAgICAgIGNvbnN0IHJhdyA9IHZhbHVlLnJlcGxhY2UoL1teQS1aYS16MC05w4fEnsSww5bFnsOcw6fEn8Sxw7bFn8O8XS9nLCAnJykudG9VcHBlckNhc2UoKTtcclxuICAgICAgICBjb25zdCBtYXRjaCA9IHJhdy5tYXRjaCgvXihcXGR7Mn0pKFtBLVrDh8SexLDDlsWew5xdezEsM30pKFxcZHsxLDR9KSQvKTtcclxuICAgICAgICBpZiAobWF0Y2gpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGAke21hdGNoWzFdfSAke21hdGNoWzJdfSAke21hdGNoWzNdfWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB2YWx1ZS50cmltKCkudG9VcHBlckNhc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkNhcnJpZXJMb29rdXBTZWxlY3RlZChlOiBDYXJyaWVyUGVyc29uKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCFlKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZENhcnJpZXJOYW1lID0gZS5uYW1lO1xyXG4gICAgICAgIHRoaXMudGNObyA9IGUuY29kZTtcclxuICAgICAgICB0aGlzLmlzVGNDaXRpemVuID0gZS51X1RjVnRuZHNpTWkgIT09ICdOJztcclxuICAgICAgICB0aGlzLmlzTmV3Q2FycmllciA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMudGNMb29rdXBNb2RlID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgb25CdXNpbmVzc1BhcnRuZXJTZWxlY3RlZChlOiBCdXNpbmVzc1BhcnRuZXIpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIWUpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEJ1c2luZXNzUGFydG5lckNvZGUgPSAnJztcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEJ1c2luZXNzUGFydG5lck5hbWUgPSAnJztcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNlbGVjdGVkQnVzaW5lc3NQYXJ0bmVyQ29kZSA9IGUuY2FyZENvZGU7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEJ1c2luZXNzUGFydG5lck5hbWUgPSBlLmNhcmROYW1lO1xyXG4gICAgfVxyXG5cclxuICAgIHF1ZXJ5Q2FycmllckJ5VGNObygpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCB0YyA9IHRoaXMudGNObz8udHJpbSgpO1xyXG4gICAgICAgIGlmICghdGMpIHtcclxuICAgICAgICAgICAgdGhpcy5jb25maXJtYXRpb24ud2Fybih0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudCgnS2Fkb29nbHU6OlBsZWFzZUVudGVyVGNObycpLCAnJywge1xyXG4gICAgICAgICAgICAgICAgaGlkZVllc0J0bjogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGNhbmNlbFRleHQ6IHRoaXMubG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KCdLYWRvb2dsdTo6Q2FuY2VsJyksXHJcbiAgICAgICAgICAgICAgICBkaXNtaXNzaWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaXNUY1F1ZXJ5aW5nID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmNhcnJpZXJQZXJzb25TZXJ2aWNlLmdldCh0Yykuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgbmV4dDogKGNhcnJpZXIpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNUY1F1ZXJ5aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBpZiAoY2Fycmllcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDYXJyaWVyTmFtZSA9IGNhcnJpZXIubmFtZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzVGNDaXRpemVuID0gY2Fycmllci51X1RjVnRuZHNpTWkgIT09ICdOJztcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzTmV3Q2FycmllciA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ2Fycmllck5hbWUgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzTmV3Q2FycmllciA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXdDYXJyaWVyRmlyc3RuYW1lID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXdDYXJyaWVyTGFzdG5hbWUgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5ld0NhcnJpZXJUZWwgPSAnJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNUY1F1ZXJ5aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzTmV3Q2FycmllciA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5ld0NhcnJpZXJGaXJzdG5hbWUgPSAnJztcclxuICAgICAgICAgICAgICAgIHRoaXMubmV3Q2Fycmllckxhc3RuYW1lID0gJyc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5ld0NhcnJpZXJUZWwgPSAnJztcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzYXZlKCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGVmZmVjdGl2ZVBsYXRlTm8gPSB0aGlzLmZvcm1hdFBsYXRlKFxyXG4gICAgICAgICAgICB0aGlzLnBsYXRlSW5wdXRNb2RlID09PSAnbWFudWFsJ1xyXG4gICAgICAgICAgICAgICAgPyB0aGlzLm1hbnVhbFBsYXRlTm8udHJpbSgpLnRvVXBwZXJDYXNlKClcclxuICAgICAgICAgICAgICAgIDogdGhpcy5zZWxlY3RlZFBsYXRlTm9cclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBjb25zdCBlZmZlY3RpdmVUcmFpbGVyUGxhdGVObyA9IHRoaXMuZm9ybWF0UGxhdGUoXHJcbiAgICAgICAgICAgIHRoaXMudHJhaWxlclBsYXRlSW5wdXRNb2RlID09PSAnbWFudWFsJ1xyXG4gICAgICAgICAgICAgICAgPyB0aGlzLm1hbnVhbFRyYWlsZXJQbGF0ZU5vLnRyaW0oKS50b1VwcGVyQ2FzZSgpXHJcbiAgICAgICAgICAgICAgICA6IHRoaXMuc2VsZWN0ZWRUcmFpbGVyUGxhdGVOb1xyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5zZWxlY3RlZFR5cGVDb2RlIHx8ICFlZmZlY3RpdmVQbGF0ZU5vIHx8ICF0aGlzLnRjTm8/LnRyaW0oKSkge1xyXG4gICAgICAgICAgICB0aGlzLmNvbmZpcm1hdGlvbi53YXJuKHRoaXMubG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KCdLYWRvb2dsdTo6RmlsbFJlcXVpcmVkRmllbGRzJyksICcnLCB7XHJcbiAgICAgICAgICAgICAgICBoaWRlWWVzQnRuOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgY2FuY2VsVGV4dDogdGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoJ0thZG9vZ2x1OjpDYW5jZWwnKSxcclxuICAgICAgICAgICAgICAgIGRpc21pc3NpYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmlzVGNDaXRpemVuICYmICF0aGlzLnZhbGlkYXRlVENLTih0aGlzLnRjTm8pKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29uZmlybWF0aW9uLndhcm4oJ0dlw6dlcnNpeiBULkMuIEtpbWxpayBOby4gTMO8dGZlbiAxMSBoYW5lbGksIGdlw6dlcmxpIGJpciBUQ0tOIGdpcmluaXouJywgJycsIHtcclxuICAgICAgICAgICAgICAgIGhpZGVZZXNCdG46IHRydWUsXHJcbiAgICAgICAgICAgICAgICBjYW5jZWxUZXh0OiB0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudCgnS2Fkb29nbHU6OkNhbmNlbCcpLFxyXG4gICAgICAgICAgICAgICAgZGlzbWlzc2libGU6IGZhbHNlLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaXNOZXdDYXJyaWVyICYmICghdGhpcy5uZXdDYXJyaWVyRmlyc3RuYW1lPy50cmltKCkgfHwgIXRoaXMubmV3Q2Fycmllckxhc3RuYW1lPy50cmltKCkpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29uZmlybWF0aW9uLndhcm4odGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoJ0thZG9vZ2x1OjpFbnRlck5ld0RyaXZlck5hbWUnKSwgJycsIHtcclxuICAgICAgICAgICAgICAgIGhpZGVZZXNCdG46IHRydWUsXHJcbiAgICAgICAgICAgICAgICBjYW5jZWxUZXh0OiB0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudCgnS2Fkb29nbHU6OkNhbmNlbCcpLFxyXG4gICAgICAgICAgICAgICAgZGlzbWlzc2libGU6IGZhbHNlLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgZHRvOiBTYXZlRmFjdG9yeUVudHJ5RHRvID0ge1xyXG4gICAgICAgICAgICB1X0dhdGVDb2RlOiB0aGlzLmdhdGVDb2RlLFxyXG4gICAgICAgICAgICB1X0VudHJ5RGF0ZTogdGhpcy5lbnRyeURhdGVUaW1lXHJcbiAgICAgICAgICAgICAgICA/IHRoaXMuZW50cnlEYXRlVGltZS50b0lTT1N0cmluZygpLnNwbGl0KCdUJylbMF1cclxuICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICB1X0VudHJ5VGltZTogdGhpcy5lbnRyeURhdGVUaW1lXHJcbiAgICAgICAgICAgICAgICA/IHRoaXMuZW50cnlEYXRlVGltZS5nZXRIb3VycygpICogMTAwICsgdGhpcy5lbnRyeURhdGVUaW1lLmdldE1pbnV0ZXMoKVxyXG4gICAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgIHVfRXhpdERhdGU6IHRoaXMuZXhpdERhdGVUaW1lXHJcbiAgICAgICAgICAgICAgICA/IHRoaXMuZXhpdERhdGVUaW1lLnRvSVNPU3RyaW5nKCkuc3BsaXQoJ1QnKVswXVxyXG4gICAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgIHVfRXhpdFRpbWU6IHRoaXMuZXhpdERhdGVUaW1lXHJcbiAgICAgICAgICAgICAgICA/IHRoaXMuZXhpdERhdGVUaW1lLmdldEhvdXJzKCkgKiAxMDAgKyB0aGlzLmV4aXREYXRlVGltZS5nZXRNaW51dGVzKClcclxuICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICB1X0VudHJ5VHlwZTogdGhpcy5zZWxlY3RlZFR5cGVDb2RlLFxyXG4gICAgICAgICAgICB1X0Rlc2NyaXB0aW9uOiB0aGlzLmRlc2NyaXB0aW9uLFxyXG4gICAgICAgICAgICB1X1RjVnRuZHNpTWk6IHRoaXMuaXNUY0NpdGl6ZW4gPyAnWScgOiAnTicsXHJcbiAgICAgICAgICAgIHVfUGxhdGU6IGVmZmVjdGl2ZVBsYXRlTm8sXHJcbiAgICAgICAgICAgIHVfRG9yc2VQbGF0ZTogZWZmZWN0aXZlVHJhaWxlclBsYXRlTm8gfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICB1X1RjTm86IHRoaXMudGNOby50cmltKCksXHJcbiAgICAgICAgICAgIHVfRHJpdmVyOiB0aGlzLmlzTmV3Q2FycmllclxyXG4gICAgICAgICAgICAgICAgPyBgJHt0aGlzLm5ld0NhcnJpZXJGaXJzdG5hbWUudHJpbSgpfSAke3RoaXMubmV3Q2Fycmllckxhc3RuYW1lLnRyaW0oKX1gXHJcbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgdV9Ecml2ZXJGaXJzdG5hbWU6IHRoaXMuaXNOZXdDYXJyaWVyID8gdGhpcy5uZXdDYXJyaWVyRmlyc3RuYW1lLnRyaW0oKSA6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgdV9Ecml2ZXJMYXN0bmFtZTogdGhpcy5pc05ld0NhcnJpZXIgPyB0aGlzLm5ld0NhcnJpZXJMYXN0bmFtZS50cmltKCkgOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgIHVfRHJpdmVyVGVsOiB0aGlzLmlzTmV3Q2FycmllciA/ICh0aGlzLm5ld0NhcnJpZXJUZWwudHJpbSgpIHx8IHVuZGVmaW5lZCkgOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgIHVfQ2FyZENvZGU6IHRoaXMuc2VsZWN0ZWRCdXNpbmVzc1BhcnRuZXJDb2RlLFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGNvbnN0IGRvU2F2ZSA9ICgpID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgb2JzJCA9IHRoaXMucmVjb3JkPy5kb2NFbnRyeVxyXG4gICAgICAgICAgICAgICAgPyB0aGlzLnNlcnZpY2UudXBkYXRlKHRoaXMucmVjb3JkLmRvY0VudHJ5LnRvU3RyaW5nKCksIGR0bylcclxuICAgICAgICAgICAgICAgIDogdGhpcy5zZXJ2aWNlLmNyZWF0ZShkdG8pO1xyXG4gICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgICAgIG9icyQuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICAgIG5leHQ6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2F2ZWQuZW1pdCgpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGVycm9yOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGNvbnN0IGlzTWFudWFsID0gdGhpcy5wbGF0ZUlucHV0TW9kZSA9PT0gJ21hbnVhbCcgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzLnRyYWlsZXJQbGF0ZUlucHV0TW9kZSA9PT0gJ21hbnVhbCcgJiYgISFlZmZlY3RpdmVUcmFpbGVyUGxhdGVObyk7XHJcblxyXG4gICAgICAgIGlmIChpc01hbnVhbCkge1xyXG4gICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMucGxhdGVTZXJ2aWNlLmdldExpc3QoKS5zdWJzY3JpYmUocGxhdGVzID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gTWFudWVsIHBsYWthIGR1cGxpY2F0ZSBrb250cm9sw7xcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnBsYXRlSW5wdXRNb2RlID09PSAnbWFudWFsJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGR1cGxpY2F0ZSA9IHBsYXRlcy5maW5kKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwID0+IHAuY29kZS50cmltKCkudG9VcHBlckNhc2UoKSA9PT0gZWZmZWN0aXZlUGxhdGVOb1xyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGR1cGxpY2F0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbmZpcm1hdGlvbi53YXJuKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoJ0thZG9vZ2x1OjpQbGF0ZUFscmVhZHlFeGlzdHMnLCBlZmZlY3RpdmVQbGF0ZU5vKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICcnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2hpZGVZZXNCdG46IHRydWUsIGNhbmNlbFRleHQ6IHRoaXMubG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KCdLYWRvb2dsdTo6Q2FuY2VsJyksIGRpc21pc3NpYmxlOiBmYWxzZX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wbGF0ZUlucHV0TW9kZSA9ICdsb29rdXAnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkUGxhdGVObyA9IGR1cGxpY2F0ZS5jb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIE1hbnVlbCBkb3JzZSBwbGFrYSBkdXBsaWNhdGUga29udHJvbMO8XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy50cmFpbGVyUGxhdGVJbnB1dE1vZGUgPT09ICdtYW51YWwnICYmIGVmZmVjdGl2ZVRyYWlsZXJQbGF0ZU5vKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdHJhaWxlckR1cGxpY2F0ZSA9IHBsYXRlcy5maW5kKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwID0+IHAuY29kZS50cmltKCkudG9VcHBlckNhc2UoKSA9PT0gZWZmZWN0aXZlVHJhaWxlclBsYXRlTm9cclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0cmFpbGVyRHVwbGljYXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29uZmlybWF0aW9uLndhcm4oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudCgnS2Fkb29nbHU6OlBsYXRlQWxyZWFkeUV4aXN0cycsIGVmZmVjdGl2ZVRyYWlsZXJQbGF0ZU5vKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICcnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2hpZGVZZXNCdG46IHRydWUsIGNhbmNlbFRleHQ6IHRoaXMubG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KCdLYWRvb2dsdTo6Q2FuY2VsJyksIGRpc21pc3NpYmxlOiBmYWxzZX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFpbGVyUGxhdGVJbnB1dE1vZGUgPSAnbG9va3VwJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRyYWlsZXJQbGF0ZU5vID0gdHJhaWxlckR1cGxpY2F0ZS5jb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGRvU2F2ZSgpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBkb1NhdmUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25Nb2RhbFZpc2libGVDaGFuZ2UodmFsOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy52aXNpYmxlID0gdmFsO1xyXG4gICAgICAgIHRoaXMudmlzaWJsZUNoYW5nZS5lbWl0KHZhbCk7XHJcbiAgICAgICAgaWYgKCF2YWwpIHtcclxuICAgICAgICAgICAgdGhpcy5jYW5jZWxsZWQuZW1pdCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjYW5jZWwoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5vbk1vZGFsVmlzaWJsZUNoYW5nZShmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB2YWxpZGF0ZVRDS04odmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNvbnN0IHRjID0gdmFsdWU/LnRyaW0oKTtcclxuICAgICAgICBpZiAoIXRjIHx8IHRjLmxlbmd0aCAhPT0gMTEpIHJldHVybiBmYWxzZTtcclxuICAgICAgICBpZiAoIS9eXFxkezExfSQvLnRlc3QodGMpKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgaWYgKHRjWzBdID09PSAnMCcpIHJldHVybiBmYWxzZTtcclxuICAgICAgICBjb25zdCBkID0gdGMuc3BsaXQoJycpLm1hcChOdW1iZXIpO1xyXG4gICAgICAgIGNvbnN0IGQxMCA9ICgoZFswXSArIGRbMl0gKyBkWzRdICsgZFs2XSArIGRbOF0pICogNyAtIChkWzFdICsgZFszXSArIGRbNV0gKyBkWzddKSkgJSAxMDtcclxuICAgICAgICBpZiAoZDEwICE9PSBkWzldKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgY29uc3QgZDExID0gZC5zbGljZSgwLCAxMCkucmVkdWNlKChhLCBiKSA9PiBhICsgYiwgMCkgJSAxMDtcclxuICAgICAgICByZXR1cm4gZDExID09PSBkWzEwXTtcclxuICAgIH1cclxufVxyXG5cclxuXHJcbiIsIjxhYnAtbW9kYWwgW3Zpc2libGVdPVwidmlzaWJsZVwiICh2aXNpYmxlQ2hhbmdlKT1cIm9uTW9kYWxWaXNpYmxlQ2hhbmdlKCRldmVudClcIiBbb3B0aW9uc109XCJ7IHNpemU6ICd4bCcsIGJhY2tkcm9wOiAnc3RhdGljJyB9XCI+XHJcbiAgPG5nLXRlbXBsYXRlICNhYnBIZWFkZXI+XHJcbiAgICA8aDM+e3sgcmVjb3JkPy5kb2NFbnRyeSA/ICgnQWJwVWk6OkVkaXQnIHwgYWJwTG9jYWxpemF0aW9uKSA6ICgnS2Fkb29nbHU6Ok5ld1JlY29yZCcgfCBhYnBMb2NhbGl6YXRpb24pIH19PC9oMz5cclxuICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICA8bmctdGVtcGxhdGUgI2FicEJvZHk+XHJcblxyXG4gICAgPCEtLSBHaXJpxZ8gLyDDh8Sxa8SxxZ8gQmlsZ2lsZXJpIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImJvcmRlciByb3VuZGVkIHAtMyBtYi0yXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJib3JkZXItYm90dG9tIHBiLTIgbWItMyBmdy1ib2xkIHRleHQtc2Vjb25kYXJ5XCI+XHJcbiAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jbG9jayBtZS0yXCI+PC9pPnt7ICdLYWRvb2dsdTo6RW50cnlFeGl0SW5mbycgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItM1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xIHNtYWxsIGZ3LXNlbWlib2xkIHRleHQtbXV0ZWRcIj57eyAnS2Fkb29nbHU6OkVudHJ5RGF0ZVRpbWUnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9sYWJlbD5cclxuICAgICAgICAgIDxkeC1kYXRlLWJveFxyXG4gICAgICAgICAgICBbKHZhbHVlKV09XCJlbnRyeURhdGVUaW1lXCJcclxuICAgICAgICAgICAgdHlwZT1cImRhdGV0aW1lXCJcclxuICAgICAgICAgICAgZGlzcGxheUZvcm1hdD1cImRkLk1NLnl5eXkgSEg6bW1cIlxyXG4gICAgICAgICAgICB3aWR0aD1cIjEwMCVcIj5cclxuICAgICAgICAgIDwvZHgtZGF0ZS1ib3g+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIG1iLTEgc21hbGwgZnctc2VtaWJvbGQgdGV4dC1tdXRlZFwiPnt7ICdLYWRvb2dsdTo6RXhpdERhdGVUaW1lJyB8IGFicExvY2FsaXphdGlvbiB9fTwvbGFiZWw+XHJcbiAgICAgICAgICA8ZHgtZGF0ZS1ib3hcclxuICAgICAgICAgICAgWyh2YWx1ZSldPVwiZXhpdERhdGVUaW1lXCJcclxuICAgICAgICAgICAgdHlwZT1cImRhdGV0aW1lXCJcclxuICAgICAgICAgICAgZGlzcGxheUZvcm1hdD1cImRkLk1NLnl5eXkgSEg6bW1cIlxyXG4gICAgICAgICAgICBbc2hvd0NsZWFyQnV0dG9uXT1cInRydWVcIlxyXG4gICAgICAgICAgICB3aWR0aD1cIjEwMCVcIj5cclxuICAgICAgICAgIDwvZHgtZGF0ZS1ib3g+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XHJcbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIG1iLTEgc21hbGwgZnctc2VtaWJvbGQgdGV4dC1tdXRlZFwiPnt7ICdLYWRvb2dsdTo6R2F0ZScgfCBhYnBMb2NhbGl6YXRpb24gfX08L2xhYmVsPlxyXG4gICAgICAgICAgPGR4LXNlbGVjdC1ib3hcclxuICAgICAgICAgICAgWyh2YWx1ZSldPVwiZ2F0ZUNvZGVcIlxyXG4gICAgICAgICAgICBbZGF0YVNvdXJjZV09XCJnYXRlRGF0YVwiXHJcbiAgICAgICAgICAgIGRpc3BsYXlFeHByPVwibmFtZVwiXHJcbiAgICAgICAgICAgIHZhbHVlRXhwcj1cImNvZGVcIlxyXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0thZG9vZ2x1OjpTZWxlY3RHYXRlJyB8IGFicExvY2FsaXphdGlvblwiXHJcbiAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiPlxyXG4gICAgICAgICAgPC9keC1zZWxlY3QtYm94PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gQXJhw6cgQmlsZ2lsZXJpICsgU8O8csO8Y8O8ICYgRmlybWEgUm93IC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cInJvdyBnLTJcIj5cclxuXHJcbiAgICAgIDwhLS0gU29sIGtvbG9uOiBBcmHDpyBCaWxnaWxlcmkgLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJib3JkZXIgcm91bmRlZCBwLTMgbWItMiBoLTEwMFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlci1ib3R0b20gcGItMiBtYi0zIGZ3LWJvbGQgdGV4dC1zZWNvbmRhcnlcIj5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS10cnVjayBtZS0yXCI+PC9pPnt7ICdLYWRvb2dsdTo6VmVoaWNsZUluZm8nIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIG1iLTEgc21hbGwgZnctc2VtaWJvbGQgdGV4dC1tdXRlZFwiPlxyXG4gICAgICAgICAgICAgIEFyYcOnIEhhcmVrZXQgVMO8csO8IDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIj4qPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICA8aGl0LWxvb2t1cC1zZWxlY3RcclxuICAgICAgICAgICAgICBbZ2V0Rm5dPVwidHlwZURhdGFcIlxyXG4gICAgICAgICAgICAgIFtjb2x1bW5zXT1cInR5cGVDb2x1bW5zXCJcclxuICAgICAgICAgICAgICBkaXNwbGF5TmFtZT1cIm5hbWVcIlxyXG4gICAgICAgICAgICAgIFtlZGl0aW5nRGF0YV09XCJzZWxlY3RlZFR5cGVOYW1lXCJcclxuICAgICAgICAgICAgICAoc2VsZWN0ZWQpPVwib25UeXBlU2VsZWN0ZWQoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICA8L2hpdC1sb29rdXAtc2VsZWN0PlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xIHNtYWxsIGZ3LXNlbWlib2xkIHRleHQtbXV0ZWRcIj5cclxuICAgICAgICAgICAgICB7eyAnS2Fkb29nbHU6OlBsYXRlJyB8IGFicExvY2FsaXphdGlvbiB9fSA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+Kjwvc3Bhbj5cclxuICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBsYXRlSW5wdXRNb2RlID09PSAnbG9va3VwJ1wiPlxyXG4gICAgICAgICAgICAgIDxoaXQtbG9va3VwLXNlbGVjdFxyXG4gICAgICAgICAgICAgICAgW2xvYWRGbl09XCJsb2FkVmVoaWNsZVBsYXRlc1wiXHJcbiAgICAgICAgICAgICAgICBbY29sdW1uc109XCJwbGF0ZUNvbHVtbnNcIlxyXG4gICAgICAgICAgICAgICAgZGlzcGxheU5hbWU9XCJjb2RlXCJcclxuICAgICAgICAgICAgICAgIGtleUV4cHI9XCJjb2RlXCJcclxuICAgICAgICAgICAgICAgIFtlZGl0aW5nRGF0YV09XCJzZWxlY3RlZFBsYXRlTm9cIlxyXG4gICAgICAgICAgICAgICAgKHNlbGVjdGVkKT1cIm9uUGxhdGVTZWxlY3RlZCgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgPC9oaXQtbG9va3VwLXNlbGVjdD5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMVwiPlxyXG4gICAgICAgICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiIGNsYXNzPVwic21hbGwgdGV4dC1wcmltYXJ5XCIgKGNsaWNrKT1cInBsYXRlSW5wdXRNb2RlID0gJ21hbnVhbCdcIj5cclxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1rZXlib2FyZCBtZS0xXCI+PC9pPiB7eyAnS2Fkb29nbHU6Ok1hbnVhbEVudHJ5JyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBsYXRlSW5wdXRNb2RlID09PSAnbWFudWFsJ1wiPlxyXG4gICAgICAgICAgICAgIDxkeC10ZXh0LWJveFxyXG4gICAgICAgICAgICAgICAgWyh2YWx1ZSldPVwibWFudWFsUGxhdGVOb1wiXHJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0thZG9vZ2x1OjpFbnRlclBsYXRlJyB8IGFicExvY2FsaXphdGlvblwiXHJcbiAgICAgICAgICAgICAgICB3aWR0aD1cIjEwMCVcIlxyXG4gICAgICAgICAgICAgICAgKG9uRm9jdXNPdXQpPVwib25NYW51YWxQbGF0ZUZvY3VzT3V0KClcIj5cclxuICAgICAgICAgICAgICA8L2R4LXRleHQtYm94PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0xXCI+XHJcbiAgICAgICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgY2xhc3M9XCJzbWFsbCB0ZXh0LXByaW1hcnlcIiAoY2xpY2spPVwicGxhdGVJbnB1dE1vZGUgPSAnbG9va3VwJ1wiPlxyXG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWxpc3QgbWUtMVwiPjwvaT4ge3sgJ0thZG9vZ2x1OjpTZWxlY3RGcm9tTGlzdCcgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIG1iLTEgc21hbGwgZnctc2VtaWJvbGQgdGV4dC1tdXRlZFwiPlxyXG4gICAgICAgICAgICAgIHt7ICdLYWRvb2dsdTo6RG9yc2VQbGF0ZScgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRyYWlsZXJQbGF0ZUlucHV0TW9kZSA9PT0gJ2xvb2t1cCdcIj5cclxuICAgICAgICAgICAgICA8aGl0LWxvb2t1cC1zZWxlY3RcclxuICAgICAgICAgICAgICAgIFtsb2FkRm5dPVwibG9hZFRyYWlsZXJQbGF0ZXNcIlxyXG4gICAgICAgICAgICAgICAgW2NvbHVtbnNdPVwicGxhdGVDb2x1bW5zXCJcclxuICAgICAgICAgICAgICAgIGRpc3BsYXlOYW1lPVwiY29kZVwiXHJcbiAgICAgICAgICAgICAgICBrZXlFeHByPVwiY29kZVwiXHJcbiAgICAgICAgICAgICAgICBbZWRpdGluZ0RhdGFdPVwic2VsZWN0ZWRUcmFpbGVyUGxhdGVOb1wiXHJcbiAgICAgICAgICAgICAgICAoc2VsZWN0ZWQpPVwib25UcmFpbGVyUGxhdGVTZWxlY3RlZCgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgPC9oaXQtbG9va3VwLXNlbGVjdD5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMVwiPlxyXG4gICAgICAgICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiIGNsYXNzPVwic21hbGwgdGV4dC1wcmltYXJ5XCIgKGNsaWNrKT1cInRyYWlsZXJQbGF0ZUlucHV0TW9kZSA9ICdtYW51YWwnXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEta2V5Ym9hcmQgbWUtMVwiPjwvaT4ge3sgJ0thZG9vZ2x1OjpNYW51YWxFbnRyeScgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0cmFpbGVyUGxhdGVJbnB1dE1vZGUgPT09ICdtYW51YWwnXCI+XHJcbiAgICAgICAgICAgICAgPGR4LXRleHQtYm94XHJcbiAgICAgICAgICAgICAgICBbKHZhbHVlKV09XCJtYW51YWxUcmFpbGVyUGxhdGVOb1wiXHJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0thZG9vZ2x1OjpFbnRlclBsYXRlJyB8IGFicExvY2FsaXphdGlvblwiXHJcbiAgICAgICAgICAgICAgICB3aWR0aD1cIjEwMCVcIlxyXG4gICAgICAgICAgICAgICAgKG9uRm9jdXNPdXQpPVwib25NYW51YWxUcmFpbGVyUGxhdGVGb2N1c091dCgpXCI+XHJcbiAgICAgICAgICAgICAgPC9keC10ZXh0LWJveD5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMVwiPlxyXG4gICAgICAgICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiIGNsYXNzPVwic21hbGwgdGV4dC1wcmltYXJ5XCIgKGNsaWNrKT1cInRyYWlsZXJQbGF0ZUlucHV0TW9kZSA9ICdsb29rdXAnXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtbGlzdCBtZS0xXCI+PC9pPiB7eyAnS2Fkb29nbHU6OlNlbGVjdEZyb21MaXN0JyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDwhLS0gU2HEnyBrb2xvbjogU8O8csO8Y8O8ICYgRmlybWEgLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJib3JkZXIgcm91bmRlZCBwLTMgbWItMiBoLTEwMFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyLWJvdHRvbSBwYi0yIG1iLTMgZnctYm9sZCB0ZXh0LXNlY29uZGFyeVwiPlxyXG4gICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtaWQtY2FyZCBtZS0yXCI+PC9pPnt7ICdLYWRvb2dsdTo6RHJpdmVyQW5kQ29tcGFueScgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yIG1iLTFcIj5cclxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgbWItMCBzbWFsbCBmdy1zZW1pYm9sZCB0ZXh0LW11dGVkXCI+XHJcbiAgICAgICAgICAgIHt7IGlzVGNDaXRpemVuID8gKCdLYWRvb2dsdTo6VGNJZGVudGl0eU5vJyB8IGFicExvY2FsaXphdGlvbikgOiAnS2ltbGlrIE5vJyB9fSA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+Kjwvc3Bhbj5cclxuICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICA8ZHgtY2hlY2stYm94IFsodmFsdWUpXT1cImlzVGNDaXRpemVuXCIgW2Rpc2FibGVkXT1cIiEhcmVjb3JkXCIgdGV4dD1cIlQuQy4gVmF0YW5kYcWfxLFcIj48L2R4LWNoZWNrLWJveD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXRjTG9va3VwTW9kZVwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtMlwiPlxyXG4gICAgICAgICAgICA8ZHgtdGV4dC1ib3hcclxuICAgICAgICAgICAgICBbKHZhbHVlKV09XCJ0Y05vXCJcclxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiaXNUY0NpdGl6ZW4gPyAoJ0thZG9vZ2x1OjpUY0lkZW50aXR5Tm8nIHwgYWJwTG9jYWxpemF0aW9uKSA6ICdLaW1saWsgTm8nXCJcclxuICAgICAgICAgICAgICB3aWR0aD1cIjEwMCVcIj5cclxuICAgICAgICAgICAgPC9keC10ZXh0LWJveD5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeSBidG4tc20gdGV4dC1ub3dyYXBcIlxyXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc1RjUXVlcnlpbmdcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJxdWVyeUNhcnJpZXJCeVRjTm8oKVwiPlxyXG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtc2VhcmNoIG1lLTFcIj48L2k+XHJcbiAgICAgICAgICAgICAge3sgKGlzVGNRdWVyeWluZyA/ICdLYWRvb2dsdTo6UXVlcnlpbmcnIDogJ0thZG9vZ2x1OjpRdWVyeScpIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMVwiPlxyXG4gICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgY2xhc3M9XCJzbWFsbCB0ZXh0LXByaW1hcnlcIiAoY2xpY2spPVwidGNMb29rdXBNb2RlID0gdHJ1ZVwiPlxyXG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtbGlzdCBtZS0xXCI+PC9pPiB7eyAnS2Fkb29nbHU6OlNlbGVjdEZyb21MaXN0JyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGNMb29rdXBNb2RlXCI+XHJcbiAgICAgICAgICA8aGl0LWxvb2t1cC1zZWxlY3RcclxuICAgICAgICAgICAgW2dldEZuXT1cImNhcnJpZXJEYXRhXCJcclxuICAgICAgICAgICAgW2NvbHVtbnNdPVwiY2FycmllckNvbHVtbnNcIlxyXG4gICAgICAgICAgICBkaXNwbGF5TmFtZT1cIm5hbWVcIlxyXG4gICAgICAgICAgICBbZWRpdGluZ0RhdGFdPVwic2VsZWN0ZWRDYXJyaWVyTmFtZVwiXHJcbiAgICAgICAgICAgIChzZWxlY3RlZCk9XCJvbkNhcnJpZXJMb29rdXBTZWxlY3RlZCgkZXZlbnQpXCI+XHJcbiAgICAgICAgICA8L2hpdC1sb29rdXAtc2VsZWN0PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTFcIj5cclxuICAgICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiIGNsYXNzPVwic21hbGwgdGV4dC1wcmltYXJ5XCIgKGNsaWNrKT1cInRjTG9va3VwTW9kZSA9IGZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1rZXlib2FyZCBtZS0xXCI+PC9pPiB7eyAnS2Fkb29nbHU6OlF1ZXJ5QnlUYycgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPCEtLSBNZXZjdXQgc8O8csO8Y8O8OiBzYWRlY2UgYWTEsSBnw7ZzdGVyIChyZWFkb25seSkgLS0+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNOZXdDYXJyaWVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgbWItMSBzbWFsbCBmdy1zZW1pYm9sZCB0ZXh0LW11dGVkXCI+XHJcbiAgICAgICAgICAgIHt7ICdLYWRvb2dsdTo6RHJpdmVyTmFtZVN1cm5hbWUnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgPGR4LXRleHQtYm94XHJcbiAgICAgICAgICAgIFsodmFsdWUpXT1cInNlbGVjdGVkQ2Fycmllck5hbWVcIlxyXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiPlxyXG4gICAgICAgICAgPC9keC10ZXh0LWJveD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICA8IS0tIFllbmkgc8O8csO8Y8O8OiBBZCwgU295YWQsIFRlbGVmb24gYWxhbmxhcsSxbsSxIGfDtnN0ZXIgLS0+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc05ld0NhcnJpZXJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTNcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIG1iLTEgc21hbGwgZnctc2VtaWJvbGQgdGV4dC1tdXRlZFwiPlxyXG4gICAgICAgICAgICAgIHt7ICdLYWRvb2dsdTo6Rmlyc3ROYW1lJyB8IGFicExvY2FsaXphdGlvbiB9fSA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+Kjwvc3Bhbj5cclxuICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgPGR4LXRleHQtYm94XHJcbiAgICAgICAgICAgICAgWyh2YWx1ZSldPVwibmV3Q2FycmllckZpcnN0bmFtZVwiXHJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidLYWRvb2dsdTo6Rmlyc3ROYW1lJyB8IGFicExvY2FsaXphdGlvblwiXHJcbiAgICAgICAgICAgICAgd2lkdGg9XCIxMDAlXCI+XHJcbiAgICAgICAgICAgIDwvZHgtdGV4dC1ib3g+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIG1iLTEgc21hbGwgZnctc2VtaWJvbGQgdGV4dC1tdXRlZFwiPlxyXG4gICAgICAgICAgICAgIHt7ICdLYWRvb2dsdTo6TGFzdE5hbWUnIHwgYWJwTG9jYWxpemF0aW9uIH19IDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIj4qPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICA8ZHgtdGV4dC1ib3hcclxuICAgICAgICAgICAgICBbKHZhbHVlKV09XCJuZXdDYXJyaWVyTGFzdG5hbWVcIlxyXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInS2Fkb29nbHU6Okxhc3ROYW1lJyB8IGFicExvY2FsaXphdGlvblwiXHJcbiAgICAgICAgICAgICAgd2lkdGg9XCIxMDAlXCI+XHJcbiAgICAgICAgICAgIDwvZHgtdGV4dC1ib3g+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xIHNtYWxsIGZ3LXNlbWlib2xkIHRleHQtbXV0ZWRcIj5cclxuICAgICAgICAgICAge3sgJ0thZG9vZ2x1OjpQaG9uZScgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICA8ZHgtdGV4dC1ib3hcclxuICAgICAgICAgICAgWyh2YWx1ZSldPVwibmV3Q2FycmllclRlbFwiXHJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInS2Fkb29nbHU6OlBob25lJyB8IGFicExvY2FsaXphdGlvblwiXHJcbiAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiPlxyXG4gICAgICAgICAgPC9keC10ZXh0LWJveD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtaW5mbyBzbWFsbCBweS0xIG1iLTNcIj5cclxuICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtaW5mby1jaXJjbGUgbWUtMVwiPjwvaT5cclxuICAgICAgICAgIHt7ICdLYWRvb2dsdTo6TmV3RHJpdmVyQWxlcnQnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIG1iLTEgc21hbGwgZnctc2VtaWJvbGQgdGV4dC1tdXRlZFwiPlxyXG4gICAgICAgICAge3sgJ0thZG9vZ2x1OjpCdXNpbmVzc1BhcnRuZXInIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICA8aGl0LWxvb2t1cC1zZWxlY3RcclxuICAgICAgICAgIFtnZXRGbl09XCJidXNpbmVzc1BhcnRuZXJEYXRhXCJcclxuICAgICAgICAgIFtjb2x1bW5zXT1cImJ1c2luZXNzUGFydG5lckNvbHVtbnNcIlxyXG4gICAgICAgICAgZGlzcGxheU5hbWU9XCJjYXJkTmFtZVwiXHJcbiAgICAgICAgICBrZXlFeHByPVwiY2FyZENvZGVcIlxyXG4gICAgICAgICAgW2VkaXRpbmdEYXRhXT1cInNlbGVjdGVkQnVzaW5lc3NQYXJ0bmVyTmFtZVwiXHJcbiAgICAgICAgICAoc2VsZWN0ZWQpPVwib25CdXNpbmVzc1BhcnRuZXJTZWxlY3RlZCgkZXZlbnQpXCI+XHJcbiAgICAgICAgPC9oaXQtbG9va3VwLXNlbGVjdD5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPCEtLSBBw6fEsWtsYW1hIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xIHNtYWxsIGZ3LXNlbWlib2xkIHRleHQtbXV0ZWRcIj57eyAnS2Fkb29nbHU6OkRlc2NyaXB0aW9uJyB8IGFicExvY2FsaXphdGlvbiB9fTwvbGFiZWw+XHJcbiAgICAgIDxkeC10ZXh0LWFyZWFcclxuICAgICAgICBbKHZhbHVlKV09XCJkZXNjcmlwdGlvblwiXHJcbiAgICAgICAgW2hlaWdodF09XCI4MFwiXHJcbiAgICAgICAgd2lkdGg9XCIxMDAlXCI+XHJcbiAgICAgIDwvZHgtdGV4dC1hcmVhPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gIDxuZy10ZW1wbGF0ZSAjYWJwRm9vdGVyPlxyXG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeVwiIChjbGljayk9XCJjYW5jZWwoKVwiPlxyXG4gICAgICB7eyAnQWJwVWk6OkNhbmNlbCcgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgPGFicC1idXR0b25cclxuICAgICAgaWNvbkNsYXNzPVwiZmEgZmEtc2F2ZVwiXHJcbiAgICAgIGJ1dHRvblR5cGU9XCJidXR0b25cIlxyXG4gICAgICBbbG9hZGluZ109XCJpc0xvYWRpbmdcIlxyXG4gICAgICAoY2xpY2spPVwic2F2ZSgpXCI+XHJcbiAgICAgIHt7ICdBYnBVaTo6U2F2ZScgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgIDwvYWJwLWJ1dHRvbj5cclxuICA8L25nLXRlbXBsYXRlPlxyXG48L2FicC1tb2RhbD5cclxuIl19