@hitsoft/abp.kadooglu 1.0.0

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 (182) hide show
  1. package/README.md +24 -0
  2. package/config/enums/index.d.ts +1 -0
  3. package/config/enums/route-names.d.ts +12 -0
  4. package/config/index.d.ts +5 -0
  5. package/config/kadooglu-config.module.d.ts +8 -0
  6. package/config/providers/hit-providers/hit-carrier-person-route.provider.d.ts +9 -0
  7. package/config/providers/hit-providers/hit-entry-weighing-route.provider.d.ts +9 -0
  8. package/config/providers/hit-providers/hit-factory-entry-route.provider.d.ts +9 -0
  9. package/config/providers/hit-providers/hit-gate-route.provider.d.ts +9 -0
  10. package/config/providers/hit-providers/hit-knt-item-esl-route.provider.d.ts +9 -0
  11. package/config/providers/hit-providers/hit-plate-route.provider.d.ts +9 -0
  12. package/config/providers/hit-providers/hit-route.provider.d.ts +8 -0
  13. package/config/providers/hit-providers/hit-scale-route.provider.d.ts +9 -0
  14. package/config/providers/hit-providers/hit-tanimlamalar-route.provider.d.ts +9 -0
  15. package/config/providers/hit-providers/hit-vehicle-type-route.provider.d.ts +9 -0
  16. package/config/providers/index.d.ts +1 -0
  17. package/config/providers/route.provider.d.ts +8 -0
  18. package/config/public-api.d.ts +3 -0
  19. package/esm2020/config/enums/index.mjs +2 -0
  20. package/esm2020/config/enums/route-names.mjs +2 -0
  21. package/esm2020/config/hitsoft-abp.kadooglu-config.mjs +5 -0
  22. package/esm2020/config/kadooglu-config.module.mjs +40 -0
  23. package/esm2020/config/providers/hit-providers/hit-carrier-person-route.provider.mjs +20 -0
  24. package/esm2020/config/providers/hit-providers/hit-entry-weighing-route.provider.mjs +20 -0
  25. package/esm2020/config/providers/hit-providers/hit-factory-entry-route.provider.mjs +20 -0
  26. package/esm2020/config/providers/hit-providers/hit-gate-route.provider.mjs +20 -0
  27. package/esm2020/config/providers/hit-providers/hit-knt-item-esl-route.provider.mjs +20 -0
  28. package/esm2020/config/providers/hit-providers/hit-plate-route.provider.mjs +20 -0
  29. package/esm2020/config/providers/hit-providers/hit-route.provider.mjs +24 -0
  30. package/esm2020/config/providers/hit-providers/hit-scale-route.provider.mjs +20 -0
  31. package/esm2020/config/providers/hit-providers/hit-tanimlamalar-route.provider.mjs +20 -0
  32. package/esm2020/config/providers/hit-providers/hit-vehicle-type-route.provider.mjs +20 -0
  33. package/esm2020/config/providers/index.mjs +2 -0
  34. package/esm2020/config/providers/route.provider.mjs +24 -0
  35. package/esm2020/config/public-api.mjs +4 -0
  36. package/esm2020/hitsoft-abp.kadooglu.mjs +5 -0
  37. package/esm2020/lib/components/kadooglu.component.mjs +18 -0
  38. package/esm2020/lib/hit-components/hit-carrier-person/hit-carrier-person-form/hit-carrier-person-form.component.mjs +160 -0
  39. package/esm2020/lib/hit-components/hit-carrier-person/hit-carrier-person-list/hit-carrier-person-list.component.mjs +101 -0
  40. package/esm2020/lib/hit-components/hit-carrier-person/hit-carrier-person-routing.module.mjs +21 -0
  41. package/esm2020/lib/hit-components/hit-carrier-person/hit-carrier-person.module.mjs +68 -0
  42. package/esm2020/lib/hit-components/hit-entry-weighing/hit-entry-weighing-form/hit-entry-weighing-form.component.mjs +544 -0
  43. package/esm2020/lib/hit-components/hit-entry-weighing/hit-entry-weighing-list/hit-entry-weighing-list.component.mjs +202 -0
  44. package/esm2020/lib/hit-components/hit-entry-weighing/hit-entry-weighing-routing.module.mjs +24 -0
  45. package/esm2020/lib/hit-components/hit-entry-weighing/hit-entry-weighing.module.mjs +77 -0
  46. package/esm2020/lib/hit-components/hit-factory-entry/hit-factory-entry-form/hit-factory-entry-form.component.mjs +380 -0
  47. package/esm2020/lib/hit-components/hit-factory-entry/hit-factory-entry-list/hit-factory-entry-list.component.mjs +115 -0
  48. package/esm2020/lib/hit-components/hit-factory-entry/hit-factory-entry-routing.module.mjs +21 -0
  49. package/esm2020/lib/hit-components/hit-factory-entry/hit-factory-entry.module.mjs +83 -0
  50. package/esm2020/lib/hit-components/hit-gate/hit-gate-form/hit-gate-form.component.mjs +148 -0
  51. package/esm2020/lib/hit-components/hit-gate/hit-gate-list/hit-gate-list.component.mjs +93 -0
  52. package/esm2020/lib/hit-components/hit-gate/hit-gate-routing.module.mjs +21 -0
  53. package/esm2020/lib/hit-components/hit-gate/hit-gate.module.mjs +71 -0
  54. package/esm2020/lib/hit-components/hit-knt-item-esl/hit-knt-item-esl-form/hit-knt-item-esl-form.component.mjs +140 -0
  55. package/esm2020/lib/hit-components/hit-knt-item-esl/hit-knt-item-esl-list/hit-knt-item-esl-list.component.mjs +78 -0
  56. package/esm2020/lib/hit-components/hit-knt-item-esl/hit-knt-item-esl-routing.module.mjs +21 -0
  57. package/esm2020/lib/hit-components/hit-knt-item-esl/hit-knt-item-esl.module.mjs +68 -0
  58. package/esm2020/lib/hit-components/hit-plate/hit-plate-form/hit-plate-form.component.mjs +102 -0
  59. package/esm2020/lib/hit-components/hit-plate/hit-plate-list/hit-plate-list.component.mjs +101 -0
  60. package/esm2020/lib/hit-components/hit-plate/hit-plate-routing.module.mjs +21 -0
  61. package/esm2020/lib/hit-components/hit-plate/hit-plate.module.mjs +68 -0
  62. package/esm2020/lib/hit-components/hit-scale/hit-scale-form/hit-scale-form.component.mjs +127 -0
  63. package/esm2020/lib/hit-components/hit-scale/hit-scale-list/hit-scale-list.component.mjs +106 -0
  64. package/esm2020/lib/hit-components/hit-scale/hit-scale-routing.module.mjs +21 -0
  65. package/esm2020/lib/hit-components/hit-scale/hit-scale.module.mjs +71 -0
  66. package/esm2020/lib/hit-components/hit-vehicle-type/hit-vehicle-type-form/hit-vehicle-type-form.component.mjs +143 -0
  67. package/esm2020/lib/hit-components/hit-vehicle-type/hit-vehicle-type-list/hit-vehicle-type-list.component.mjs +96 -0
  68. package/esm2020/lib/hit-components/hit-vehicle-type/hit-vehicle-type-routing.module.mjs +21 -0
  69. package/esm2020/lib/hit-components/hit-vehicle-type/hit-vehicle-type.module.mjs +68 -0
  70. package/esm2020/lib/hit-proxy/hit-business-partner/hit-business-partner.service.mjs +22 -0
  71. package/esm2020/lib/hit-proxy/hit-business-partner/models.mjs +2 -0
  72. package/esm2020/lib/hit-proxy/hit-carrier-person/hit-carrier-person.service.mjs +33 -0
  73. package/esm2020/lib/hit-proxy/hit-carrier-person/models.mjs +2 -0
  74. package/esm2020/lib/hit-proxy/hit-entry-weighing/hit-entry-weighing.service.mjs +95 -0
  75. package/esm2020/lib/hit-proxy/hit-entry-weighing/models.mjs +2 -0
  76. package/esm2020/lib/hit-proxy/hit-factory-entry/hit-factory-entry.service.mjs +34 -0
  77. package/esm2020/lib/hit-proxy/hit-factory-entry/models.mjs +2 -0
  78. package/esm2020/lib/hit-proxy/hit-gate/hit-gate.service.mjs +33 -0
  79. package/esm2020/lib/hit-proxy/hit-gate/models.mjs +2 -0
  80. package/esm2020/lib/hit-proxy/hit-item/hit-item.service.mjs +22 -0
  81. package/esm2020/lib/hit-proxy/hit-item/models.mjs +2 -0
  82. package/esm2020/lib/hit-proxy/hit-knt-item-esl/hit-knt-item-esl.service.mjs +33 -0
  83. package/esm2020/lib/hit-proxy/hit-knt-item-esl/models.mjs +2 -0
  84. package/esm2020/lib/hit-proxy/hit-plate/hit-plate.service.mjs +33 -0
  85. package/esm2020/lib/hit-proxy/hit-plate/models.mjs +2 -0
  86. package/esm2020/lib/hit-proxy/hit-purchase-delivery-note/hit-purchase-delivery-note.service.mjs +22 -0
  87. package/esm2020/lib/hit-proxy/hit-purchase-delivery-note/models.mjs +2 -0
  88. package/esm2020/lib/hit-proxy/hit-scale/hit-scale.service.mjs +33 -0
  89. package/esm2020/lib/hit-proxy/hit-scale/models.mjs +2 -0
  90. package/esm2020/lib/hit-proxy/hit-stock-transfer/hit-stock-transfer.service.mjs +22 -0
  91. package/esm2020/lib/hit-proxy/hit-stock-transfer/models.mjs +2 -0
  92. package/esm2020/lib/hit-proxy/hit-user-gate/hit-user-gate.service.mjs +31 -0
  93. package/esm2020/lib/hit-proxy/hit-user-gate/models.mjs +2 -0
  94. package/esm2020/lib/hit-proxy/hit-vehicle-type/hit-vehicle-type.service.mjs +33 -0
  95. package/esm2020/lib/hit-proxy/hit-vehicle-type/models.mjs +2 -0
  96. package/esm2020/lib/hit-proxy/hit-warehouse/hit-warehouse.service.mjs +21 -0
  97. package/esm2020/lib/hit-proxy/hit-warehouse/models.mjs +2 -0
  98. package/esm2020/lib/hit-proxy/models.mjs +2 -0
  99. package/esm2020/lib/kadooglu-routing.module.mjs +41 -0
  100. package/esm2020/lib/kadooglu.module.mjs +49 -0
  101. package/esm2020/lib/services/kadooglu.service.mjs +21 -0
  102. package/esm2020/lib/shared/hit-modal/hit-modal.component.mjs +110 -0
  103. package/esm2020/lib/shared/hit-modal/hit-ui.module.mjs +35 -0
  104. package/esm2020/public-api.mjs +9 -0
  105. package/fesm2015/hitsoft-abp.kadooglu-config.mjs +243 -0
  106. package/fesm2015/hitsoft-abp.kadooglu-config.mjs.map +1 -0
  107. package/fesm2015/hitsoft-abp.kadooglu.mjs +3774 -0
  108. package/fesm2015/hitsoft-abp.kadooglu.mjs.map +1 -0
  109. package/fesm2020/hitsoft-abp.kadooglu-config.mjs +243 -0
  110. package/fesm2020/hitsoft-abp.kadooglu-config.mjs.map +1 -0
  111. package/fesm2020/hitsoft-abp.kadooglu.mjs +3728 -0
  112. package/fesm2020/hitsoft-abp.kadooglu.mjs.map +1 -0
  113. package/index.d.ts +5 -0
  114. package/lib/components/kadooglu.component.d.ts +10 -0
  115. package/lib/hit-components/hit-carrier-person/hit-carrier-person-form/hit-carrier-person-form.component.d.ts +49 -0
  116. package/lib/hit-components/hit-carrier-person/hit-carrier-person-list/hit-carrier-person-list.component.d.ts +30 -0
  117. package/lib/hit-components/hit-carrier-person/hit-carrier-person-routing.module.d.ts +7 -0
  118. package/lib/hit-components/hit-carrier-person/hit-carrier-person.module.d.ts +19 -0
  119. package/lib/hit-components/hit-entry-weighing/hit-entry-weighing-form/hit-entry-weighing-form.component.d.ts +200 -0
  120. package/lib/hit-components/hit-entry-weighing/hit-entry-weighing-list/hit-entry-weighing-list.component.d.ts +46 -0
  121. package/lib/hit-components/hit-entry-weighing/hit-entry-weighing-routing.module.d.ts +7 -0
  122. package/lib/hit-components/hit-entry-weighing/hit-entry-weighing.module.d.ts +19 -0
  123. package/lib/hit-components/hit-factory-entry/hit-factory-entry-form/hit-factory-entry-form.component.d.ts +119 -0
  124. package/lib/hit-components/hit-factory-entry/hit-factory-entry-list/hit-factory-entry-list.component.d.ts +32 -0
  125. package/lib/hit-components/hit-factory-entry/hit-factory-entry-routing.module.d.ts +7 -0
  126. package/lib/hit-components/hit-factory-entry/hit-factory-entry.module.d.ts +19 -0
  127. package/lib/hit-components/hit-gate/hit-gate-form/hit-gate-form.component.d.ts +42 -0
  128. package/lib/hit-components/hit-gate/hit-gate-list/hit-gate-list.component.d.ts +29 -0
  129. package/lib/hit-components/hit-gate/hit-gate-routing.module.d.ts +7 -0
  130. package/lib/hit-components/hit-gate/hit-gate.module.d.ts +19 -0
  131. package/lib/hit-components/hit-knt-item-esl/hit-knt-item-esl-form/hit-knt-item-esl-form.component.d.ts +46 -0
  132. package/lib/hit-components/hit-knt-item-esl/hit-knt-item-esl-list/hit-knt-item-esl-list.component.d.ts +27 -0
  133. package/lib/hit-components/hit-knt-item-esl/hit-knt-item-esl-routing.module.d.ts +7 -0
  134. package/lib/hit-components/hit-knt-item-esl/hit-knt-item-esl.module.d.ts +19 -0
  135. package/lib/hit-components/hit-plate/hit-plate-form/hit-plate-form.component.d.ts +29 -0
  136. package/lib/hit-components/hit-plate/hit-plate-list/hit-plate-list.component.d.ts +30 -0
  137. package/lib/hit-components/hit-plate/hit-plate-routing.module.d.ts +7 -0
  138. package/lib/hit-components/hit-plate/hit-plate.module.d.ts +19 -0
  139. package/lib/hit-components/hit-scale/hit-scale-form/hit-scale-form.component.d.ts +44 -0
  140. package/lib/hit-components/hit-scale/hit-scale-list/hit-scale-list.component.d.ts +41 -0
  141. package/lib/hit-components/hit-scale/hit-scale-routing.module.d.ts +7 -0
  142. package/lib/hit-components/hit-scale/hit-scale.module.d.ts +19 -0
  143. package/lib/hit-components/hit-vehicle-type/hit-vehicle-type-form/hit-vehicle-type-form.component.d.ts +46 -0
  144. package/lib/hit-components/hit-vehicle-type/hit-vehicle-type-list/hit-vehicle-type-list.component.d.ts +29 -0
  145. package/lib/hit-components/hit-vehicle-type/hit-vehicle-type-routing.module.d.ts +7 -0
  146. package/lib/hit-components/hit-vehicle-type/hit-vehicle-type.module.d.ts +19 -0
  147. package/lib/hit-proxy/hit-business-partner/hit-business-partner.service.d.ts +13 -0
  148. package/lib/hit-proxy/hit-business-partner/models.d.ts +5 -0
  149. package/lib/hit-proxy/hit-carrier-person/hit-carrier-person.service.d.ts +17 -0
  150. package/lib/hit-proxy/hit-carrier-person/models.d.ts +22 -0
  151. package/lib/hit-proxy/hit-entry-weighing/hit-entry-weighing.service.d.ts +49 -0
  152. package/lib/hit-proxy/hit-entry-weighing/models.d.ts +107 -0
  153. package/lib/hit-proxy/hit-factory-entry/hit-factory-entry.service.d.ts +17 -0
  154. package/lib/hit-proxy/hit-factory-entry/models.d.ts +40 -0
  155. package/lib/hit-proxy/hit-gate/hit-gate.service.d.ts +17 -0
  156. package/lib/hit-proxy/hit-gate/models.d.ts +10 -0
  157. package/lib/hit-proxy/hit-item/hit-item.service.d.ts +13 -0
  158. package/lib/hit-proxy/hit-item/models.d.ts +4 -0
  159. package/lib/hit-proxy/hit-knt-item-esl/hit-knt-item-esl.service.d.ts +21 -0
  160. package/lib/hit-proxy/hit-knt-item-esl/models.d.ts +16 -0
  161. package/lib/hit-proxy/hit-plate/hit-plate.service.d.ts +17 -0
  162. package/lib/hit-proxy/hit-plate/models.d.ts +14 -0
  163. package/lib/hit-proxy/hit-purchase-delivery-note/hit-purchase-delivery-note.service.d.ts +13 -0
  164. package/lib/hit-proxy/hit-purchase-delivery-note/models.d.ts +9 -0
  165. package/lib/hit-proxy/hit-scale/hit-scale.service.d.ts +17 -0
  166. package/lib/hit-proxy/hit-scale/models.d.ts +20 -0
  167. package/lib/hit-proxy/hit-stock-transfer/hit-stock-transfer.service.d.ts +13 -0
  168. package/lib/hit-proxy/hit-stock-transfer/models.d.ts +15 -0
  169. package/lib/hit-proxy/hit-user-gate/hit-user-gate.service.d.ts +18 -0
  170. package/lib/hit-proxy/hit-user-gate/models.d.ts +7 -0
  171. package/lib/hit-proxy/hit-vehicle-type/hit-vehicle-type.service.d.ts +17 -0
  172. package/lib/hit-proxy/hit-vehicle-type/models.d.ts +18 -0
  173. package/lib/hit-proxy/hit-warehouse/hit-warehouse.service.d.ts +13 -0
  174. package/lib/hit-proxy/hit-warehouse/models.d.ts +4 -0
  175. package/lib/hit-proxy/models.d.ts +8 -0
  176. package/lib/kadooglu-routing.module.d.ts +7 -0
  177. package/lib/kadooglu.module.d.ts +17 -0
  178. package/lib/services/kadooglu.service.d.ts +10 -0
  179. package/lib/shared/hit-modal/hit-modal.component.d.ts +30 -0
  180. package/lib/shared/hit-modal/hit-ui.module.d.ts +11 -0
  181. package/package.json +41 -0
  182. package/public-api.d.ts +4 -0
@@ -0,0 +1,380 @@
1
+ import { Component, EventEmitter, Input, Output } from '@angular/core';
2
+ import { map } from 'rxjs/operators';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@abp/ng.theme.shared";
5
+ import * as i2 from "../../../hit-proxy/hit-factory-entry/hit-factory-entry.service";
6
+ import * as i3 from "../../../hit-proxy/hit-carrier-person/hit-carrier-person.service";
7
+ import * as i4 from "../../../hit-proxy/hit-plate/hit-plate.service";
8
+ import * as i5 from "../../../hit-proxy/hit-vehicle-type/hit-vehicle-type.service";
9
+ import * as i6 from "../../../hit-proxy/hit-business-partner/hit-business-partner.service";
10
+ import * as i7 from "../../../hit-proxy/hit-user-gate/hit-user-gate.service";
11
+ import * as i8 from "@abp/ng.core";
12
+ import * as i9 from "@angular/common";
13
+ import * as i10 from "../../../shared/hit-modal/hit-modal.component";
14
+ import * as i11 from "devextreme-angular";
15
+ export class HitFactoryEntryFormComponent {
16
+ constructor(confirmation, service, carrierPersonService, plateService, vehicleTypeService, businessPartnerService, userGateService, localizationService) {
17
+ this.confirmation = confirmation;
18
+ this.service = service;
19
+ this.carrierPersonService = carrierPersonService;
20
+ this.plateService = plateService;
21
+ this.vehicleTypeService = vehicleTypeService;
22
+ this.businessPartnerService = businessPartnerService;
23
+ this.userGateService = userGateService;
24
+ this.localizationService = localizationService;
25
+ this.visible = false;
26
+ this.visibleChange = new EventEmitter();
27
+ this.record = null;
28
+ this.saved = new EventEmitter();
29
+ this.cancelled = new EventEmitter();
30
+ // Lookup data arrays for modals
31
+ this.typeData = [];
32
+ this.carrierData = [];
33
+ // Lazy loaders for plate lookups — filtered by u_IsTrailer
34
+ this.loadVehiclePlates = () => this.plateService.getList().pipe(map(plates => plates.filter(p => p.u_IsTrailer !== 'Y')));
35
+ this.loadTrailerPlates = () => this.plateService.getList().pipe(map(plates => plates.filter(p => p.u_IsTrailer === 'Y')));
36
+ this.gateData = [];
37
+ this.defaultGateCode = '';
38
+ // Column configs for lookup modals
39
+ this.typeColumns = [
40
+ { dataField: 'code', caption: 'Kod', width: 100 },
41
+ { dataField: 'name', caption: 'Ad' },
42
+ ];
43
+ this.plateColumns = [
44
+ { dataField: 'code', caption: 'Plaka', width: 100 },
45
+ { dataField: 'name', caption: 'Name' },
46
+ ];
47
+ this.carrierColumns = [
48
+ { dataField: 'code', caption: 'T.C. Kimlik No', width: 140 },
49
+ { dataField: 'name', caption: 'Ad Soyad' },
50
+ ];
51
+ this.businessPartnerColumns = [
52
+ { dataField: 'cardCode', caption: 'Cari Kod', width: 120 },
53
+ { dataField: 'cardName', caption: 'Cari Unvan' },
54
+ ];
55
+ // Form fields
56
+ this.gateCode = '';
57
+ this.entryDateTime = null;
58
+ this.exitDateTime = null;
59
+ this.selectedTypeCode = '';
60
+ this.selectedTypeName = '';
61
+ this.selectedPlateNo = '';
62
+ this.tcNo = '';
63
+ this.selectedCarrierName = '';
64
+ this.businessPartnerData = [];
65
+ this.selectedBusinessPartnerCode = '';
66
+ this.selectedBusinessPartnerName = '';
67
+ this.description = '';
68
+ // Plate input mode
69
+ this.plateInputMode = 'lookup';
70
+ this.manualPlateNo = '';
71
+ // Trailer plate
72
+ this.trailerPlateInputMode = 'lookup';
73
+ this.selectedTrailerPlateNo = '';
74
+ this.manualTrailerPlateNo = '';
75
+ // Carrier TC mode
76
+ this.tcLookupMode = false;
77
+ this.isTcQuerying = false;
78
+ this.isNewCarrier = false;
79
+ // New carrier fields
80
+ this.newCarrierFirstname = '';
81
+ this.newCarrierLastname = '';
82
+ this.newCarrierTel = '';
83
+ this.isTcCitizen = true;
84
+ this.isLoading = false;
85
+ }
86
+ ngOnInit() {
87
+ this.vehicleTypeService.getList().subscribe(d => (this.typeData = d));
88
+ this.carrierPersonService.getList().subscribe(d => (this.carrierData = d));
89
+ this.businessPartnerService.getList().subscribe(d => (this.businessPartnerData = d));
90
+ this.userGateService.getMyGates().subscribe(d => (this.gateData = d));
91
+ this.userGateService.getMyDefaultGateCode().subscribe(d => (this.defaultGateCode = d ?? ''));
92
+ }
93
+ ngOnChanges(changes) {
94
+ if (changes['visible']?.currentValue === true) {
95
+ this.initForm();
96
+ }
97
+ }
98
+ initForm() {
99
+ this.isTcCitizen = true;
100
+ this.plateInputMode = 'lookup';
101
+ this.manualPlateNo = '';
102
+ this.trailerPlateInputMode = 'lookup';
103
+ this.selectedTrailerPlateNo = '';
104
+ this.manualTrailerPlateNo = '';
105
+ this.tcLookupMode = false;
106
+ this.isNewCarrier = false;
107
+ this.newCarrierFirstname = '';
108
+ this.newCarrierLastname = '';
109
+ this.newCarrierTel = '';
110
+ if (this.record) {
111
+ this.gateCode = this.record.u_GateCode ?? '';
112
+ this.entryDateTime = this.buildDateTime(this.record.u_EntryDate, this.record.u_EntryTime);
113
+ this.exitDateTime = this.buildDateTime(this.record.u_ExitDate, this.record.u_ExitTime);
114
+ this.selectedTypeCode = this.record.u_EntryType;
115
+ this.selectedTypeName = this.record.u_EntryType;
116
+ this.selectedPlateNo = this.formatPlate(this.record.u_Plate);
117
+ this.selectedTrailerPlateNo = this.formatPlate(this.record.u_DorsePlate ?? '');
118
+ this.tcNo = this.record.u_TcNo;
119
+ this.selectedCarrierName = this.record.u_Driver;
120
+ this.description = this.record.u_Description;
121
+ this.selectedBusinessPartnerCode = this.record.u_CardCode ?? '';
122
+ this.selectedBusinessPartnerName = this.businessPartnerData.find(p => p.cardCode === this.record.u_CardCode)?.cardName ?? this.record.u_CardCode ?? '';
123
+ }
124
+ else {
125
+ this.gateCode = this.defaultGateCode;
126
+ this.entryDateTime = new Date();
127
+ this.exitDateTime = null;
128
+ this.selectedTypeCode = '';
129
+ this.selectedTypeName = '';
130
+ this.selectedPlateNo = '';
131
+ this.tcNo = '';
132
+ this.selectedCarrierName = '';
133
+ this.description = '';
134
+ this.selectedBusinessPartnerCode = '';
135
+ this.selectedBusinessPartnerName = '';
136
+ }
137
+ }
138
+ buildDateTime(dateStr, timeNum) {
139
+ if (!dateStr)
140
+ return null;
141
+ const d = new Date(dateStr);
142
+ if (timeNum != null) {
143
+ d.setHours(Math.floor(timeNum / 100), timeNum % 100, 0, 0);
144
+ }
145
+ return d;
146
+ }
147
+ onTypeSelected(e) {
148
+ if (!e)
149
+ return;
150
+ this.selectedTypeCode = e.code;
151
+ this.selectedTypeName = e.name;
152
+ }
153
+ onPlateSelected(e) {
154
+ if (!e)
155
+ return;
156
+ this.selectedPlateNo = this.formatPlate(e.code);
157
+ }
158
+ onTrailerPlateSelected(e) {
159
+ if (!e)
160
+ return;
161
+ this.selectedTrailerPlateNo = this.formatPlate(e.code);
162
+ }
163
+ onManualPlateFocusOut() {
164
+ this.manualPlateNo = this.formatPlate(this.manualPlateNo);
165
+ }
166
+ onManualTrailerPlateFocusOut() {
167
+ this.manualTrailerPlateNo = this.formatPlate(this.manualTrailerPlateNo);
168
+ }
169
+ /** Türk plakasını "34 HMA 001" formatına dönüştürür */
170
+ formatPlate(value) {
171
+ if (!value)
172
+ return value;
173
+ const raw = value.replace(/[^A-Za-z0-9ÇĞİÖŞÜçğıöşü]/g, '').toUpperCase();
174
+ const match = raw.match(/^(\d{2})([A-ZÇĞİÖŞÜ]{1,3})(\d{1,4})$/);
175
+ if (match) {
176
+ return `${match[1]} ${match[2]} ${match[3]}`;
177
+ }
178
+ return value.trim().toUpperCase();
179
+ }
180
+ onCarrierLookupSelected(e) {
181
+ if (!e)
182
+ return;
183
+ this.selectedCarrierName = e.name;
184
+ this.tcNo = e.code;
185
+ this.isNewCarrier = false;
186
+ this.tcLookupMode = false;
187
+ }
188
+ onBusinessPartnerSelected(e) {
189
+ if (!e) {
190
+ this.selectedBusinessPartnerCode = '';
191
+ this.selectedBusinessPartnerName = '';
192
+ return;
193
+ }
194
+ this.selectedBusinessPartnerCode = e.cardCode;
195
+ this.selectedBusinessPartnerName = e.cardName;
196
+ }
197
+ queryCarrierByTcNo() {
198
+ const tc = this.tcNo?.trim();
199
+ if (!tc) {
200
+ this.confirmation.warn(this.localizationService.instant('Kadooglu::PleaseEnterTcNo'), '', {
201
+ hideYesBtn: true,
202
+ cancelText: this.localizationService.instant('Kadooglu::Cancel'),
203
+ dismissible: false,
204
+ });
205
+ return;
206
+ }
207
+ this.isTcQuerying = true;
208
+ this.carrierPersonService.get(tc).subscribe({
209
+ next: (carrier) => {
210
+ this.isTcQuerying = false;
211
+ if (carrier) {
212
+ this.selectedCarrierName = carrier.name;
213
+ this.isNewCarrier = false;
214
+ }
215
+ else {
216
+ this.selectedCarrierName = '';
217
+ this.isNewCarrier = true;
218
+ this.newCarrierFirstname = '';
219
+ this.newCarrierLastname = '';
220
+ this.newCarrierTel = '';
221
+ }
222
+ },
223
+ error: () => {
224
+ this.isTcQuerying = false;
225
+ this.isNewCarrier = true;
226
+ this.newCarrierFirstname = '';
227
+ this.newCarrierLastname = '';
228
+ this.newCarrierTel = '';
229
+ },
230
+ });
231
+ }
232
+ save() {
233
+ const effectivePlateNo = this.formatPlate(this.plateInputMode === 'manual'
234
+ ? this.manualPlateNo.trim().toUpperCase()
235
+ : this.selectedPlateNo);
236
+ const effectiveTrailerPlateNo = this.formatPlate(this.trailerPlateInputMode === 'manual'
237
+ ? this.manualTrailerPlateNo.trim().toUpperCase()
238
+ : this.selectedTrailerPlateNo);
239
+ if (!this.selectedTypeCode || !effectivePlateNo || !this.tcNo?.trim()) {
240
+ this.confirmation.warn(this.localizationService.instant('Kadooglu::FillRequiredFields'), '', {
241
+ hideYesBtn: true,
242
+ cancelText: this.localizationService.instant('Kadooglu::Cancel'),
243
+ dismissible: false,
244
+ });
245
+ return;
246
+ }
247
+ if (this.isTcCitizen && !this.validateTCKN(this.tcNo)) {
248
+ this.confirmation.warn('Geçersiz T.C. Kimlik No. Lütfen 11 haneli, geçerli bir TCKN giriniz.', '', {
249
+ hideYesBtn: true,
250
+ cancelText: this.localizationService.instant('Kadooglu::Cancel'),
251
+ dismissible: false,
252
+ });
253
+ return;
254
+ }
255
+ if (this.isNewCarrier && (!this.newCarrierFirstname?.trim() || !this.newCarrierLastname?.trim())) {
256
+ this.confirmation.warn(this.localizationService.instant('Kadooglu::EnterNewDriverName'), '', {
257
+ hideYesBtn: true,
258
+ cancelText: this.localizationService.instant('Kadooglu::Cancel'),
259
+ dismissible: false,
260
+ });
261
+ return;
262
+ }
263
+ const dto = {
264
+ u_GateCode: this.gateCode,
265
+ u_EntryDate: this.entryDateTime
266
+ ? this.entryDateTime.toISOString().split('T')[0]
267
+ : undefined,
268
+ u_EntryTime: this.entryDateTime
269
+ ? this.entryDateTime.getHours() * 100 + this.entryDateTime.getMinutes()
270
+ : undefined,
271
+ u_ExitDate: this.exitDateTime
272
+ ? this.exitDateTime.toISOString().split('T')[0]
273
+ : undefined,
274
+ u_ExitTime: this.exitDateTime
275
+ ? this.exitDateTime.getHours() * 100 + this.exitDateTime.getMinutes()
276
+ : undefined,
277
+ u_EntryType: this.selectedTypeCode,
278
+ u_Plate: effectivePlateNo,
279
+ u_DorsePlate: effectiveTrailerPlateNo || undefined,
280
+ u_TcNo: this.tcNo.trim(),
281
+ u_Driver: this.isNewCarrier
282
+ ? `${this.newCarrierFirstname.trim()} ${this.newCarrierLastname.trim()}`
283
+ : undefined,
284
+ u_DriverFirstname: this.isNewCarrier ? this.newCarrierFirstname.trim() : undefined,
285
+ u_DriverLastname: this.isNewCarrier ? this.newCarrierLastname.trim() : undefined,
286
+ u_DriverTel: this.isNewCarrier ? (this.newCarrierTel.trim() || undefined) : undefined,
287
+ u_CardCode: this.selectedBusinessPartnerCode,
288
+ u_Description: this.description,
289
+ };
290
+ const doSave = () => {
291
+ const obs$ = this.record?.docEntry
292
+ ? this.service.update(this.record.docEntry.toString(), dto)
293
+ : this.service.create(dto);
294
+ this.isLoading = true;
295
+ obs$.subscribe({
296
+ next: () => {
297
+ this.isLoading = false;
298
+ this.saved.emit();
299
+ },
300
+ error: () => {
301
+ this.isLoading = false;
302
+ },
303
+ });
304
+ };
305
+ const isManual = this.plateInputMode === 'manual' ||
306
+ (this.trailerPlateInputMode === 'manual' && !!effectiveTrailerPlateNo);
307
+ if (isManual) {
308
+ this.isLoading = true;
309
+ this.plateService.getList().subscribe(plates => {
310
+ this.isLoading = false;
311
+ // Manuel plaka duplicate kontrolü
312
+ if (this.plateInputMode === 'manual') {
313
+ const duplicate = plates.find(p => p.code.trim().toUpperCase() === effectivePlateNo);
314
+ if (duplicate) {
315
+ this.confirmation.warn(this.localizationService.instant('Kadooglu::PlateAlreadyExists', effectivePlateNo), '', { hideYesBtn: true, cancelText: this.localizationService.instant('Kadooglu::Cancel'), dismissible: false });
316
+ this.plateInputMode = 'lookup';
317
+ this.selectedPlateNo = duplicate.code;
318
+ return;
319
+ }
320
+ }
321
+ // Manuel dorse plaka duplicate kontrolü
322
+ if (this.trailerPlateInputMode === 'manual' && effectiveTrailerPlateNo) {
323
+ const trailerDuplicate = plates.find(p => p.code.trim().toUpperCase() === effectiveTrailerPlateNo);
324
+ if (trailerDuplicate) {
325
+ this.confirmation.warn(this.localizationService.instant('Kadooglu::PlateAlreadyExists', effectiveTrailerPlateNo), '', { hideYesBtn: true, cancelText: this.localizationService.instant('Kadooglu::Cancel'), dismissible: false });
326
+ this.trailerPlateInputMode = 'lookup';
327
+ this.selectedTrailerPlateNo = trailerDuplicate.code;
328
+ return;
329
+ }
330
+ }
331
+ doSave();
332
+ });
333
+ }
334
+ else {
335
+ doSave();
336
+ }
337
+ }
338
+ onModalVisibleChange(val) {
339
+ this.visible = val;
340
+ this.visibleChange.emit(val);
341
+ if (!val) {
342
+ this.cancelled.emit();
343
+ }
344
+ }
345
+ cancel() {
346
+ this.onModalVisibleChange(false);
347
+ }
348
+ validateTCKN(value) {
349
+ const tc = value?.trim();
350
+ if (!tc || tc.length !== 11)
351
+ return false;
352
+ if (!/^\d{11}$/.test(tc))
353
+ return false;
354
+ if (tc[0] === '0')
355
+ return false;
356
+ const d = tc.split('').map(Number);
357
+ const d10 = ((d[0] + d[2] + d[4] + d[6] + d[8]) * 7 - (d[1] + d[3] + d[5] + d[7])) % 10;
358
+ if (d10 !== d[9])
359
+ return false;
360
+ const d11 = d.slice(0, 10).reduce((a, b) => a + b, 0) % 10;
361
+ return d11 === d[10];
362
+ }
363
+ }
364
+ 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", "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
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: HitFactoryEntryFormComponent, decorators: [{
367
+ 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" }]
369
+ }], 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
+ type: Input
371
+ }], visibleChange: [{
372
+ type: Output
373
+ }], record: [{
374
+ type: Input
375
+ }], saved: [{
376
+ type: Output
377
+ }], cancelled: [{
378
+ type: Output
379
+ }] } });
380
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGl0LWZhY3RvcnktZW50cnktZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rYWRvb2dsdS9zcmMvbGliL2hpdC1jb21wb25lbnRzL2hpdC1mYWN0b3J5LWVudHJ5L2hpdC1mYWN0b3J5LWVudHJ5LWZvcm0vaGl0LWZhY3RvcnktZW50cnktZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rYWRvb2dsdS9zcmMvbGliL2hpdC1jb21wb25lbnRzL2hpdC1mYWN0b3J5LWVudHJ5L2hpdC1mYWN0b3J5LWVudHJ5LWZvcm0vaGl0LWZhY3RvcnktZW50cnktZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBZ0IsTUFBTSxlQUFlLENBQUM7QUFldkcsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7Ozs7O0FBTW5DLE1BQU0sT0FBTyw0QkFBNEI7SUEyRXJDLFlBQ1ksWUFBaUMsRUFDakMsT0FBK0IsRUFDL0Isb0JBQTZDLEVBQzdDLFlBQTZCLEVBQzdCLGtCQUF5QyxFQUN6QyxzQkFBaUQsRUFDakQsZUFBbUMsRUFDbkMsbUJBQXdDO1FBUHhDLGlCQUFZLEdBQVosWUFBWSxDQUFxQjtRQUNqQyxZQUFPLEdBQVAsT0FBTyxDQUF3QjtRQUMvQix5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXlCO1FBQzdDLGlCQUFZLEdBQVosWUFBWSxDQUFpQjtRQUM3Qix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQXVCO1FBQ3pDLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBMkI7UUFDakQsb0JBQWUsR0FBZixlQUFlLENBQW9CO1FBQ25DLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFsRjNDLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFDZixrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7UUFDN0MsV0FBTSxHQUF3QixJQUFJLENBQUM7UUFDbEMsVUFBSyxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFDakMsY0FBUyxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFFL0MsZ0NBQWdDO1FBQ2hDLGFBQVEsR0FBa0IsRUFBRSxDQUFDO1FBQzdCLGdCQUFXLEdBQW9CLEVBQUUsQ0FBQztRQUVsQywyREFBMkQ7UUFDM0Qsc0JBQWlCLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQ3RELEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQzNELENBQUM7UUFDRixzQkFBaUIsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FDdEQsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FDM0QsQ0FBQztRQUNGLGFBQVEsR0FBVyxFQUFFLENBQUM7UUFDdEIsb0JBQWUsR0FBRyxFQUFFLENBQUM7UUFFckIsbUNBQW1DO1FBQ25DLGdCQUFXLEdBQUc7WUFDVixFQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFDO1lBQy9DLEVBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFDO1NBQ3JDLENBQUM7UUFDRixpQkFBWSxHQUFHO1lBQ1gsRUFBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBQztZQUNqRCxFQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBQztTQUN2QyxDQUFDO1FBQ0YsbUJBQWMsR0FBRztZQUNiLEVBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBQztZQUMxRCxFQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBQztTQUMzQyxDQUFDO1FBQ0YsMkJBQXNCLEdBQUc7WUFDckIsRUFBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBQztZQUN4RCxFQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBQztTQUNqRCxDQUFDO1FBRUYsY0FBYztRQUNkLGFBQVEsR0FBRyxFQUFFLENBQUM7UUFDZCxrQkFBYSxHQUFnQixJQUFJLENBQUM7UUFDbEMsaUJBQVksR0FBZ0IsSUFBSSxDQUFDO1FBQ2pDLHFCQUFnQixHQUFHLEVBQUUsQ0FBQztRQUN0QixxQkFBZ0IsR0FBRyxFQUFFLENBQUM7UUFDdEIsb0JBQWUsR0FBRyxFQUFFLENBQUM7UUFDckIsU0FBSSxHQUFHLEVBQUUsQ0FBQztRQUNWLHdCQUFtQixHQUFHLEVBQUUsQ0FBQztRQUN6Qix3QkFBbUIsR0FBc0IsRUFBRSxDQUFDO1FBQzVDLGdDQUEyQixHQUFHLEVBQUUsQ0FBQztRQUNqQyxnQ0FBMkIsR0FBRyxFQUFFLENBQUM7UUFDakMsZ0JBQVcsR0FBRyxFQUFFLENBQUM7UUFFakIsbUJBQW1CO1FBQ25CLG1CQUFjLEdBQXdCLFFBQVEsQ0FBQztRQUMvQyxrQkFBYSxHQUFHLEVBQUUsQ0FBQztRQUVuQixnQkFBZ0I7UUFDaEIsMEJBQXFCLEdBQXdCLFFBQVEsQ0FBQztRQUN0RCwyQkFBc0IsR0FBRyxFQUFFLENBQUM7UUFDNUIseUJBQW9CLEdBQUcsRUFBRSxDQUFDO1FBRTFCLGtCQUFrQjtRQUNsQixpQkFBWSxHQUFHLEtBQUssQ0FBQztRQUNyQixpQkFBWSxHQUFHLEtBQUssQ0FBQztRQUNyQixpQkFBWSxHQUFHLEtBQUssQ0FBQztRQUVyQixxQkFBcUI7UUFDckIsd0JBQW1CLEdBQUcsRUFBRSxDQUFDO1FBQ3pCLHVCQUFrQixHQUFHLEVBQUUsQ0FBQztRQUN4QixrQkFBYSxHQUFHLEVBQUUsQ0FBQztRQUVuQixnQkFBVyxHQUFHLElBQUksQ0FBQztRQUNuQixjQUFTLEdBQUcsS0FBSyxDQUFDO0lBWWxCLENBQUM7SUFFRCxRQUFRO1FBQ0osSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzRSxJQUFJLENBQUMsc0JBQXNCLENBQUMsT0FBTyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyRixJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RFLElBQUksQ0FBQyxlQUFlLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDakcsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFzQjtRQUM5QixJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxZQUFZLEtBQUssSUFBSSxFQUFFO1lBQzNDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztTQUNuQjtJQUNMLENBQUM7SUFFTyxRQUFRO1FBQ1osSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFDeEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxRQUFRLENBQUM7UUFDL0IsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLHFCQUFxQixHQUFHLFFBQVEsQ0FBQztRQUN0QyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsRUFBRSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxFQUFFLENBQUM7UUFDL0IsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDMUIsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDMUIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEVBQUUsQ0FBQztRQUM5QixJQUFJLENBQUMsa0JBQWtCLEdBQUcsRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO1FBRXhCLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNiLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDO1lBQzdDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzFGLElBQUksQ0FBQyxZQUFZLEdBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3pGLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQztZQUNoRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUM7WUFDaEQsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDN0QsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLElBQUksRUFBRSxDQUFDLENBQUM7WUFDL0UsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztZQUMvQixJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7WUFDaEQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQztZQUM3QyxJQUFJLENBQUMsMkJBQTJCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDO1lBQ2hFLElBQUksQ0FBQywyQkFBMkIsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxFQUFFLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUM7U0FDMUo7YUFBTTtZQUNILElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztZQUNyQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7WUFDaEMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7WUFDekIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ2YsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsMkJBQTJCLEdBQUcsRUFBRSxDQUFDO1lBQ3RDLElBQUksQ0FBQywyQkFBMkIsR0FBRyxFQUFFLENBQUM7U0FDekM7SUFDTCxDQUFDO0lBRU8sYUFBYSxDQUFDLE9BQWdCLEVBQUUsT0FBZ0I7UUFDcEQsSUFBSSxDQUFDLE9BQU87WUFBRSxPQUFPLElBQUksQ0FBQztRQUMxQixNQUFNLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM1QixJQUFJLE9BQU8sSUFBSSxJQUFJLEVBQUU7WUFDakIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUMsRUFBRSxPQUFPLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUM5RDtRQUNELE9BQU8sQ0FBQyxDQUFDO0lBQ2IsQ0FBQztJQUVELGNBQWMsQ0FBQyxDQUFjO1FBQ3pCLElBQUksQ0FBQyxDQUFDO1lBQUUsT0FBTztRQUNmLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQy9CLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ25DLENBQUM7SUFFRCxlQUFlLENBQUMsQ0FBUTtRQUNwQixJQUFJLENBQUMsQ0FBQztZQUFFLE9BQU87UUFDZixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxDQUFRO1FBQzNCLElBQUksQ0FBQyxDQUFDO1lBQUUsT0FBTztRQUNmLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRUQscUJBQXFCO1FBQ2pCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVELDRCQUE0QjtRQUN4QixJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBRUQsdURBQXVEO0lBQ3ZELFdBQVcsQ0FBQyxLQUFhO1FBQ3JCLElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDekIsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQywyQkFBMkIsRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN6RSxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7UUFDaEUsSUFBSSxLQUFLLEVBQUU7WUFDUCxPQUFPLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztTQUNoRDtRQUNELE9BQU8sS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3RDLENBQUM7SUFFRCx1QkFBdUIsQ0FBQyxDQUFnQjtRQUNwQyxJQUFJLENBQUMsQ0FBQztZQUFFLE9BQU87UUFDZixJQUFJLENBQUMsbUJBQW1CLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNsQyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDbkIsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDMUIsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7SUFDOUIsQ0FBQztJQUVELHlCQUF5QixDQUFDLENBQWtCO1FBQ3hDLElBQUksQ0FBQyxDQUFDLEVBQUU7WUFDSixJQUFJLENBQUMsMkJBQTJCLEdBQUcsRUFBRSxDQUFDO1lBQ3RDLElBQUksQ0FBQywyQkFBMkIsR0FBRyxFQUFFLENBQUM7WUFDdEMsT0FBTztTQUNWO1FBQ0QsSUFBSSxDQUFDLDJCQUEyQixHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUM7UUFDOUMsSUFBSSxDQUFDLDJCQUEyQixHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUM7SUFDbEQsQ0FBQztJQUVELGtCQUFrQjtRQUNkLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLEVBQUUsRUFBRTtZQUNMLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsMkJBQTJCLENBQUMsRUFBRSxFQUFFLEVBQUU7Z0JBQ3RGLFVBQVUsRUFBRSxJQUFJO2dCQUNoQixVQUFVLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQztnQkFDaEUsV0FBVyxFQUFFLEtBQUs7YUFDckIsQ0FBQyxDQUFDO1lBQ0gsT0FBTztTQUNWO1FBQ0QsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDekIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDeEMsSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7Z0JBQzFCLElBQUksT0FBTyxFQUFFO29CQUNULElBQUksQ0FBQyxtQkFBbUIsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO29CQUN4QyxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztpQkFDN0I7cUJBQU07b0JBQ0gsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7b0JBQ3pCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxFQUFFLENBQUM7b0JBQzlCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUM7b0JBQzdCLElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO2lCQUMzQjtZQUNMLENBQUM7WUFDRCxLQUFLLEVBQUUsR0FBRyxFQUFFO2dCQUNSLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO2dCQUMxQixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztnQkFDekIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEVBQUUsQ0FBQztnQkFDOUIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztnQkFDN0IsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7WUFDNUIsQ0FBQztTQUNKLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxJQUFJO1FBQ0EsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUNyQyxJQUFJLENBQUMsY0FBYyxLQUFLLFFBQVE7WUFDNUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO1lBQ3pDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUM3QixDQUFDO1FBRUYsTUFBTSx1QkFBdUIsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUM1QyxJQUFJLENBQUMscUJBQXFCLEtBQUssUUFBUTtZQUNuQyxDQUFDLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRTtZQUNoRCxDQUFDLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUNwQyxDQUFDO1FBRUYsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxDQUFDLGdCQUFnQixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRTtZQUNuRSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLDhCQUE4QixDQUFDLEVBQUUsRUFBRSxFQUFFO2dCQUN6RixVQUFVLEVBQUUsSUFBSTtnQkFDaEIsVUFBVSxFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUM7Z0JBQ2hFLFdBQVcsRUFBRSxLQUFLO2FBQ3JCLENBQUMsQ0FBQztZQUNILE9BQU87U0FDVjtRQUVELElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ25ELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLHNFQUFzRSxFQUFFLEVBQUUsRUFBRTtnQkFDL0YsVUFBVSxFQUFFLElBQUk7Z0JBQ2hCLFVBQVUsRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDO2dCQUNoRSxXQUFXLEVBQUUsS0FBSzthQUNyQixDQUFDLENBQUM7WUFDSCxPQUFPO1NBQ1Y7UUFFRCxJQUFJLElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFO1lBQzlGLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsOEJBQThCLENBQUMsRUFBRSxFQUFFLEVBQUU7Z0JBQ3pGLFVBQVUsRUFBRSxJQUFJO2dCQUNoQixVQUFVLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQztnQkFDaEUsV0FBVyxFQUFFLEtBQUs7YUFDckIsQ0FBQyxDQUFDO1lBQ0gsT0FBTztTQUNWO1FBRUQsTUFBTSxHQUFHLEdBQXdCO1lBQzdCLFVBQVUsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN6QixXQUFXLEVBQUUsSUFBSSxDQUFDLGFBQWE7Z0JBQzNCLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hELENBQUMsQ0FBQyxTQUFTO1lBQ2YsV0FBVyxFQUFFLElBQUksQ0FBQyxhQUFhO2dCQUMzQixDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLEVBQUU7Z0JBQ3ZFLENBQUMsQ0FBQyxTQUFTO1lBQ2YsVUFBVSxFQUFFLElBQUksQ0FBQyxZQUFZO2dCQUN6QixDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMvQyxDQUFDLENBQUMsU0FBUztZQUNmLFVBQVUsRUFBRSxJQUFJLENBQUMsWUFBWTtnQkFDekIsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFO2dCQUNyRSxDQUFDLENBQUMsU0FBUztZQUNmLFdBQVcsRUFBRSxJQUFJLENBQUMsZ0JBQWdCO1lBQ2xDLE9BQU8sRUFBRSxnQkFBZ0I7WUFDekIsWUFBWSxFQUFFLHVCQUF1QixJQUFJLFNBQVM7WUFDbEQsTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ3hCLFFBQVEsRUFBRSxJQUFJLENBQUMsWUFBWTtnQkFDdkIsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksRUFBRSxJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDeEUsQ0FBQyxDQUFDLFNBQVM7WUFDZixpQkFBaUIsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVM7WUFDbEYsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTO1lBQ2hGLFdBQVcsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVM7WUFDckYsVUFBVSxFQUFFLElBQUksQ0FBQywyQkFBMkI7WUFDNUMsYUFBYSxFQUFFLElBQUksQ0FBQyxXQUFXO1NBQ2xDLENBQUM7UUFFRixNQUFNLE1BQU0sR0FBRyxHQUFHLEVBQUU7WUFDaEIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxRQUFRO2dCQUM5QixDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLEVBQUUsR0FBRyxDQUFDO2dCQUMzRCxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDL0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDdEIsSUFBSSxDQUFDLFNBQVMsQ0FBQztnQkFDWCxJQUFJLEVBQUUsR0FBRyxFQUFFO29CQUNQLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO29CQUN2QixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUN0QixDQUFDO2dCQUNELEtBQUssRUFBRSxHQUFHLEVBQUU7b0JBQ1IsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7Z0JBQzNCLENBQUM7YUFDSixDQUFDLENBQUM7UUFDUCxDQUFDLENBQUM7UUFFRixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsY0FBYyxLQUFLLFFBQVE7WUFDaEMsQ0FBQyxJQUFJLENBQUMscUJBQXFCLEtBQUssUUFBUSxJQUFJLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBRXhGLElBQUksUUFBUSxFQUFFO1lBQ1YsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDdEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQzNDLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO2dCQUV2QixrQ0FBa0M7Z0JBQ2xDLElBQUksSUFBSSxDQUFDLGNBQWMsS0FBSyxRQUFRLEVBQUU7b0JBQ2xDLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQ3pCLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsS0FBSyxnQkFBZ0IsQ0FDeEQsQ0FBQztvQkFDRixJQUFJLFNBQVMsRUFBRTt3QkFDWCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FDbEIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyw4QkFBOEIsRUFBRSxnQkFBZ0IsQ0FBQyxFQUNsRixFQUFFLEVBQ0YsRUFBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBQyxDQUMzRyxDQUFDO3dCQUNGLElBQUksQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDO3dCQUMvQixJQUFJLENBQUMsZUFBZSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUM7d0JBQ3RDLE9BQU87cUJBQ1Y7aUJBQ0o7Z0JBRUQsd0NBQXdDO2dCQUN4QyxJQUFJLElBQUksQ0FBQyxxQkFBcUIsS0FBSyxRQUFRLElBQUksdUJBQXVCLEVBQUU7b0JBQ3BFLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FDaEMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxLQUFLLHVCQUF1QixDQUMvRCxDQUFDO29CQUNGLElBQUksZ0JBQWdCLEVBQUU7d0JBQ2xCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUNsQixJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLDhCQUE4QixFQUFFLHVCQUF1QixDQUFDLEVBQ3pGLEVBQUUsRUFDRixFQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFDLENBQzNHLENBQUM7d0JBQ0YsSUFBSSxDQUFDLHFCQUFxQixHQUFHLFFBQVEsQ0FBQzt3QkFDdEMsSUFBSSxDQUFDLHNCQUFzQixHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQzt3QkFDcEQsT0FBTztxQkFDVjtpQkFDSjtnQkFFRCxNQUFNLEVBQUUsQ0FBQztZQUNiLENBQUMsQ0FBQyxDQUFDO1NBQ047YUFBTTtZQUNILE1BQU0sRUFBRSxDQUFDO1NBQ1o7SUFDTCxDQUFDO0lBRUQsb0JBQW9CLENBQUMsR0FBWTtRQUM3QixJQUFJLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQztRQUNuQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM3QixJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ04sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUN6QjtJQUNMLENBQUM7SUFFRCxNQUFNO1FBQ0YsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFTyxZQUFZLENBQUMsS0FBYTtRQUM5QixNQUFNLEVBQUUsR0FBRyxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsTUFBTSxLQUFLLEVBQUU7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUMxQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUN2QyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDaEMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbkMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN4RixJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDL0IsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDM0QsT0FBTyxHQUFHLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3pCLENBQUM7O3lIQTFZUSw0QkFBNEI7NkdBQTVCLDRCQUE0Qiw4TkNyQnpDLGc1WEF1UkE7MkZEbFFhLDRCQUE0QjtrQkFKeEMsU0FBUzsrQkFDSSw0QkFBNEI7a1dBSTdCLE9BQU87c0JBQWYsS0FBSztnQkFDSSxhQUFhO3NCQUF0QixNQUFNO2dCQUNFLE1BQU07c0JBQWQsS0FBSztnQkFDSSxLQUFLO3NCQUFkLE1BQU07Z0JBQ0csU0FBUztzQkFBbEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtDb25maXJtYXRpb25TZXJ2aWNlfSBmcm9tICdAYWJwL25nLnRoZW1lLnNoYXJlZCc7XHJcbmltcG9ydCB7TG9jYWxpemF0aW9uU2VydmljZX0gZnJvbSAnQGFicC9uZy5jb3JlJztcclxuaW1wb3J0IHtIaXRGYWN0b3J5RW50cnlTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9oaXQtcHJveHkvaGl0LWZhY3RvcnktZW50cnkvaGl0LWZhY3RvcnktZW50cnkuc2VydmljZSc7XHJcbmltcG9ydCB7SGl0VmVoaWNsZVR5cGVTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9oaXQtcHJveHkvaGl0LXZlaGljbGUtdHlwZS9oaXQtdmVoaWNsZS10eXBlLnNlcnZpY2UnO1xyXG5pbXBvcnQge1ZlaGljbGVUeXBlfSBmcm9tICcuLi8uLi8uLi9oaXQtcHJveHkvaGl0LXZlaGljbGUtdHlwZS9tb2RlbHMnO1xyXG5pbXBvcnQge1BsYXRlfSBmcm9tICcuLi8uLi8uLi9oaXQtcHJveHkvaGl0LXBsYXRlL21vZGVscyc7XHJcbmltcG9ydCB7Q2FycmllclBlcnNvbn0gZnJvbSAnLi4vLi4vLi4vaGl0LXByb3h5L2hpdC1jYXJyaWVyLXBlcnNvbi9tb2RlbHMnO1xyXG5pbXBvcnQge0hpdENhcnJpZXJQZXJzb25TZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9oaXQtcHJveHkvaGl0LWNhcnJpZXItcGVyc29uL2hpdC1jYXJyaWVyLXBlcnNvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHtIaXRQbGF0ZVNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2hpdC1wcm94eS9oaXQtcGxhdGUvaGl0LXBsYXRlLnNlcnZpY2UnO1xyXG5pbXBvcnQge0ZhY3RvcnlFbnRyeSwgU2F2ZUZhY3RvcnlFbnRyeUR0b30gZnJvbSBcIi4uLy4uLy4uL2hpdC1wcm94eS9oaXQtZmFjdG9yeS1lbnRyeS9tb2RlbHNcIjtcclxuaW1wb3J0IHtIaXRCdXNpbmVzc1BhcnRuZXJTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9oaXQtcHJveHkvaGl0LWJ1c2luZXNzLXBhcnRuZXIvaGl0LWJ1c2luZXNzLXBhcnRuZXIuc2VydmljZSc7XHJcbmltcG9ydCB7QnVzaW5lc3NQYXJ0bmVyfSBmcm9tICcuLi8uLi8uLi9oaXQtcHJveHkvaGl0LWJ1c2luZXNzLXBhcnRuZXIvbW9kZWxzJztcclxuaW1wb3J0IHtIaXRVc2VyR2F0ZVNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2hpdC1wcm94eS9oaXQtdXNlci1nYXRlL2hpdC11c2VyLWdhdGUuc2VydmljZSc7XHJcbmltcG9ydCB7R2F0ZX0gZnJvbSAnLi4vLi4vLi4vaGl0LXByb3h5L2hpdC1nYXRlL21vZGVscyc7XHJcbmltcG9ydCB7bWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnbGliLWhpdC1mYWN0b3J5LWVudHJ5LWZvcm0nLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2hpdC1mYWN0b3J5LWVudHJ5LWZvcm0uY29tcG9uZW50Lmh0bWwnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgSGl0RmFjdG9yeUVudHJ5Rm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcclxuICAgIEBJbnB1dCgpIHZpc2libGUgPSBmYWxzZTtcclxuICAgIEBPdXRwdXQoKSB2aXNpYmxlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG4gICAgQElucHV0KCkgcmVjb3JkOiBGYWN0b3J5RW50cnkgfCBudWxsID0gbnVsbDtcclxuICAgIEBPdXRwdXQoKSBzYXZlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuICAgIEBPdXRwdXQoKSBjYW5jZWxsZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+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==