@colijnit/sharedcomponents 1.0.18 → 1.0.20
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.
- package/bundles/colijnit-sharedcomponents.umd.js +560 -83
- package/bundles/colijnit-sharedcomponents.umd.js.map +1 -1
- package/colijnit-sharedcomponents.d.ts +9 -7
- package/colijnit-sharedcomponents.metadata.json +1 -1
- package/esm2015/colijnit-sharedcomponents.js +10 -8
- package/esm2015/lib/assets/dictionary/text.properties.js +11 -0
- package/esm2015/lib/components/layout-switcher/layout-switcher.component.js +74 -0
- package/esm2015/lib/components/layout-switcher/layout-switcher.module.js +21 -0
- package/esm2015/lib/components/send-method-dialog/send-method-dialog.component.js +87 -17
- package/esm2015/lib/components/stock/stock.component.js +17 -4
- package/esm2015/lib/components/stock/stock.module.js +3 -3
- package/esm2015/lib/enum/icon.enum.js +4 -1
- package/esm2015/lib/enum/language-code.enum.js +8 -0
- package/esm2015/lib/model/icon-svg.js +4 -1
- package/esm2015/lib/service/dictionary.service.js +76 -0
- package/esm2015/lib/service/options.service.js +71 -0
- package/esm2015/lib/service/shared-connector.service.js +262 -0
- package/esm2015/lib/service/shared.service.js +30 -0
- package/esm2015/lib/service/stock.service.js +21 -26
- package/esm2015/lib/utils/string-utils.js +64 -0
- package/esm2015/public-api.js +4 -1
- package/fesm2015/colijnit-sharedcomponents.js +462 -58
- package/fesm2015/colijnit-sharedcomponents.js.map +1 -1
- package/lib/assets/dictionary/text.properties.d.ts +3 -0
- package/lib/components/layout-switcher/layout-switcher.component.d.ts +16 -0
- package/lib/components/layout-switcher/layout-switcher.module.d.ts +2 -0
- package/lib/components/layout-switcher/style/_layout.scss +96 -0
- package/lib/components/layout-switcher/style/_material-definition.scss +16 -0
- package/lib/components/layout-switcher/style/_theme.scss +6 -0
- package/lib/components/layout-switcher/style/material.scss +5 -0
- package/lib/components/send-method-dialog/send-method-dialog.component.d.ts +23 -6
- package/lib/components/send-method-dialog/style/_layout.scss +5 -0
- package/lib/components/stock/stock.component.d.ts +5 -1
- package/lib/enum/icon.enum.d.ts +3 -0
- package/lib/enum/language-code.enum.d.ts +6 -0
- package/lib/service/dictionary.service.d.ts +21 -0
- package/lib/service/options.service.d.ts +13 -0
- package/lib/service/{ione-connector-adapter.service.d.ts → shared-connector.service.d.ts} +5 -5
- package/lib/service/shared.service.d.ts +8 -0
- package/lib/service/stock.service.d.ts +2 -5
- package/lib/utils/string-utils.d.ts +22 -0
- package/package.json +1 -1
- package/public-api.d.ts +3 -0
- package/esm2015/lib/service/ione-connector-adapter.service.js +0 -265
|
@@ -1,265 +0,0 @@
|
|
|
1
|
-
import { __awaiter } from "tslib";
|
|
2
|
-
import { Articles } from "@colijnit/articleapi/build/articles";
|
|
3
|
-
import { Sharedapi } from "@colijnit/sharedapi/build/sharedapi";
|
|
4
|
-
import { Printer } from "@colijnit/sharedapi/build/model/report/printer.bo";
|
|
5
|
-
import { Injectable } from "@angular/core";
|
|
6
|
-
import { BusinessObjectFactory } from "../factory/business-object-factory";
|
|
7
|
-
import { PrintStockStickers } from "@colijnit/sharedapi/build/model/print-stock-stickers";
|
|
8
|
-
import { ArticleStock as ArticleStockBo } from "@colijnit/articleapi/build/model/article-stock.bo";
|
|
9
|
-
import { StockHistoryBo } from "@colijnit/articleapi/build/model/stock-history.bo";
|
|
10
|
-
import { StockStickersPrintLayoutsBo } from "@colijnit/sharedapi/build/model/report/stock-stickers-print-layouts.bo";
|
|
11
|
-
import { ArticleDetailsBo } from "@colijnit/articleapi/build/model/article-details.bo";
|
|
12
|
-
import { StockStatus } from "@colijnit/articleapi/build/model/stock-status.bo";
|
|
13
|
-
import { StockManagementWarehouses } from "@colijnit/articleapi/build/model/stock-management-warehouses.bo";
|
|
14
|
-
import { StockLocation } from "@colijnit/articleapi/build/model/stock-location.bo";
|
|
15
|
-
import { ArticleTransaction as ArticleTransactionBo } from "@colijnit/articleapi/build/model/article-transaction.bo";
|
|
16
|
-
import * as i0 from "@angular/core";
|
|
17
|
-
export class IoneConnectorAdapterService {
|
|
18
|
-
constructor() {
|
|
19
|
-
this._boFactory = new BusinessObjectFactory();
|
|
20
|
-
}
|
|
21
|
-
connect(options) {
|
|
22
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
23
|
-
if (this.options === undefined) {
|
|
24
|
-
this.options = options;
|
|
25
|
-
this.connector = new Articles(options);
|
|
26
|
-
this.sharedConnector = new Sharedapi(options);
|
|
27
|
-
this.options.session = this.connector.session && this.sharedConnector.session;
|
|
28
|
-
}
|
|
29
|
-
});
|
|
30
|
-
}
|
|
31
|
-
disconnect() {
|
|
32
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
33
|
-
this.options = undefined;
|
|
34
|
-
});
|
|
35
|
-
}
|
|
36
|
-
getAllPrinters(showAll = true) {
|
|
37
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
38
|
-
return new Promise((resolve, reject) => {
|
|
39
|
-
return this.sharedConnector.listAllPrinters(showAll).then((result) => {
|
|
40
|
-
if (result.validationResult && result.validationResult.success) {
|
|
41
|
-
if (result.resultObject) {
|
|
42
|
-
resolve(this._boFactory.makeBOArrayFromRawBackendDataArray(Printer, result.resultObject));
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
else {
|
|
46
|
-
reject(result.validationMessagesAsString);
|
|
47
|
-
}
|
|
48
|
-
});
|
|
49
|
-
});
|
|
50
|
-
});
|
|
51
|
-
}
|
|
52
|
-
getPrintStockStickers(request) {
|
|
53
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
54
|
-
return new Promise((resolve, reject) => {
|
|
55
|
-
return this.sharedConnector.getPrintStockStickers(request).then((result) => {
|
|
56
|
-
if (result.validationResult && result.validationResult.success) {
|
|
57
|
-
if (result.resultObject) {
|
|
58
|
-
resolve(this._boFactory.makeWithRawBackendData(PrintStockStickers, result.resultObject));
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
else {
|
|
62
|
-
reject(result.validationMessagesAsString);
|
|
63
|
-
}
|
|
64
|
-
});
|
|
65
|
-
});
|
|
66
|
-
});
|
|
67
|
-
}
|
|
68
|
-
// public async getStockStickerPrintLayouts(stockStickersPrintLayoutsBo: StockStickersPrintLayoutsBo): Promise<StockStickersPrintLayoutsBo[]> {
|
|
69
|
-
// return new Promise((resolve: Function, reject: Function) => {
|
|
70
|
-
// return this.sharedConnector.getStockStickerPrintLayouts(stockStickersPrintLayoutsBo).then((result: DataServiceResponse) => {
|
|
71
|
-
// if (result.validationResult && result.validationResult.success) {
|
|
72
|
-
// if (result.resultObject) {
|
|
73
|
-
// resolve(this._boFactory.makeWithRawBackendData(stockStickersPrintLayoutsBo, result.resultObject));
|
|
74
|
-
// }
|
|
75
|
-
// } else {
|
|
76
|
-
// reject(result.validationMessagesAsString);
|
|
77
|
-
// }
|
|
78
|
-
// })
|
|
79
|
-
// })
|
|
80
|
-
// }
|
|
81
|
-
getArticleFullObject(goodId) {
|
|
82
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
83
|
-
return new Promise((resolve, reject) => {
|
|
84
|
-
return this.connector.getArticleFullObject(goodId).then((result) => {
|
|
85
|
-
// if (result.validationResult && result.validationResult.success) {
|
|
86
|
-
// if (result.resultObject) {
|
|
87
|
-
// resolve(this._boFactory.makeWithRawBackendData(ArticleExtended, result.resultObject));
|
|
88
|
-
// }
|
|
89
|
-
// } else {
|
|
90
|
-
// reject(result.validationMessagesAsString);
|
|
91
|
-
// }
|
|
92
|
-
});
|
|
93
|
-
});
|
|
94
|
-
});
|
|
95
|
-
}
|
|
96
|
-
getStockHistory(request) {
|
|
97
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
98
|
-
return new Promise((resolve, reject) => {
|
|
99
|
-
return this.connector.getStockHistory(request).then((result) => {
|
|
100
|
-
if (result.validationResult && result.validationResult.success) {
|
|
101
|
-
if (result.resultObject && result.resultObject.hasOwnProperty("stockHistory")) {
|
|
102
|
-
resolve(this._boFactory.makeBOArrayFromRawBackendDataArray(StockHistoryBo, result.resultObject.stockHistory));
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
else {
|
|
106
|
-
reject(result.validationMessagesAsString);
|
|
107
|
-
}
|
|
108
|
-
});
|
|
109
|
-
});
|
|
110
|
-
});
|
|
111
|
-
}
|
|
112
|
-
getStockInformation(data) {
|
|
113
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
114
|
-
return new Promise((resolve, reject) => {
|
|
115
|
-
return this.connector.getStockInformation(data).then((result) => {
|
|
116
|
-
if (result.validationResult && result.validationResult.success) {
|
|
117
|
-
if (result.resultObjects) {
|
|
118
|
-
resolve(this._boFactory.makeBOArrayFromRawBackendDataArray(ArticleStockBo, result.resultObjects));
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
else {
|
|
122
|
-
reject(result.validationMessagesAsString);
|
|
123
|
-
}
|
|
124
|
-
});
|
|
125
|
-
});
|
|
126
|
-
});
|
|
127
|
-
}
|
|
128
|
-
getStockManagementWarehouses() {
|
|
129
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
130
|
-
return new Promise((resolve, reject) => {
|
|
131
|
-
return this.connector.getStockManagementWarehouses().then((result) => {
|
|
132
|
-
if (result.validationResult && result.validationResult.success) {
|
|
133
|
-
if (result.resultObjects) {
|
|
134
|
-
resolve(this._boFactory.makeBOArrayFromRawBackendDataArray(StockManagementWarehouses, result.resultObjects));
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
else {
|
|
138
|
-
reject(result.validationMessagesAsString);
|
|
139
|
-
}
|
|
140
|
-
});
|
|
141
|
-
});
|
|
142
|
-
});
|
|
143
|
-
}
|
|
144
|
-
getStockManagementLocations(warehouseNo) {
|
|
145
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
146
|
-
return new Promise((resolve, reject) => {
|
|
147
|
-
return this.connector.getStockManagementLocations(warehouseNo).then((result) => {
|
|
148
|
-
if (result.validationResult && result.validationResult.success) {
|
|
149
|
-
if (result.resultObjects) {
|
|
150
|
-
resolve(this._boFactory.makeBOArrayFromRawBackendDataArray(StockLocation, result.resultObjects));
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
else {
|
|
154
|
-
reject(result.validationMessagesAsString);
|
|
155
|
-
}
|
|
156
|
-
});
|
|
157
|
-
});
|
|
158
|
-
});
|
|
159
|
-
}
|
|
160
|
-
getArticleDetails(data) {
|
|
161
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
162
|
-
return new Promise((resolve, reject) => {
|
|
163
|
-
return this.connector.getArticleDetails(data).then((result) => {
|
|
164
|
-
if (result.validationResult && result.validationResult.success) {
|
|
165
|
-
if (result.resultObjects) {
|
|
166
|
-
resolve(this._boFactory.makeBOArrayFromRawBackendDataArray(ArticleDetailsBo, result.resultObjects));
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
else {
|
|
170
|
-
reject(result.validationMessagesAsString);
|
|
171
|
-
}
|
|
172
|
-
});
|
|
173
|
-
});
|
|
174
|
-
});
|
|
175
|
-
}
|
|
176
|
-
updateArticleDetails(data) {
|
|
177
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
178
|
-
return new Promise((resolve, reject) => {
|
|
179
|
-
return this.connector.updateArticleDetails(data).then((result) => __awaiter(this, void 0, void 0, function* () {
|
|
180
|
-
if (result.validationResult && result.validationResult.success) {
|
|
181
|
-
yield this.commit();
|
|
182
|
-
resolve(true);
|
|
183
|
-
}
|
|
184
|
-
else {
|
|
185
|
-
reject(result.validationMessagesAsString);
|
|
186
|
-
}
|
|
187
|
-
}));
|
|
188
|
-
});
|
|
189
|
-
});
|
|
190
|
-
}
|
|
191
|
-
lockArticleDetails(data) {
|
|
192
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
193
|
-
return new Promise((resolve, reject) => {
|
|
194
|
-
return this.connector.lockArticleDetails(data).then((result) => __awaiter(this, void 0, void 0, function* () {
|
|
195
|
-
if (result.validationResult && result.validationResult.success) {
|
|
196
|
-
yield this.commit();
|
|
197
|
-
resolve(true);
|
|
198
|
-
}
|
|
199
|
-
else {
|
|
200
|
-
reject(result.validationMessagesAsString);
|
|
201
|
-
}
|
|
202
|
-
}));
|
|
203
|
-
});
|
|
204
|
-
});
|
|
205
|
-
}
|
|
206
|
-
getStockStatus() {
|
|
207
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
208
|
-
return new Promise((resolve, reject) => {
|
|
209
|
-
return this.connector.getStockState().then((result) => {
|
|
210
|
-
if (result.validationResult && result.validationResult.success) {
|
|
211
|
-
if (result.resultObjects) {
|
|
212
|
-
resolve(this._boFactory.makeBOArrayFromRawBackendDataArray(StockStatus, result.resultObjects));
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
else {
|
|
216
|
-
reject(result.validationMessagesAsString);
|
|
217
|
-
}
|
|
218
|
-
});
|
|
219
|
-
});
|
|
220
|
-
});
|
|
221
|
-
}
|
|
222
|
-
getStockStickerTemplates(data) {
|
|
223
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
224
|
-
return new Promise((resolve, reject) => {
|
|
225
|
-
return this.sharedConnector.getStockStickerPrintLayouts(data).then((result) => {
|
|
226
|
-
if (result.validationResult && result.validationResult.success) {
|
|
227
|
-
if (result.resultObject) {
|
|
228
|
-
resolve(this._boFactory.makeBOArrayFromRawBackendDataArray(StockStickersPrintLayoutsBo, result.resultObject));
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
else {
|
|
232
|
-
reject(result.validationMessagesAsString);
|
|
233
|
-
}
|
|
234
|
-
});
|
|
235
|
-
});
|
|
236
|
-
});
|
|
237
|
-
}
|
|
238
|
-
getArticleTransaction(data) {
|
|
239
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
240
|
-
return new Promise((resolve, reject) => {
|
|
241
|
-
return this.connector.getArticleTransaction(data).then((result) => {
|
|
242
|
-
if (result.validationResult && result.validationResult.success) {
|
|
243
|
-
if (result.resultObjects) {
|
|
244
|
-
resolve(this._boFactory.makeBOArrayFromRawBackendDataArray(ArticleTransactionBo, result.resultObjects));
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
else {
|
|
248
|
-
reject(result.validationMessagesAsString);
|
|
249
|
-
}
|
|
250
|
-
});
|
|
251
|
-
});
|
|
252
|
-
});
|
|
253
|
-
}
|
|
254
|
-
commit() {
|
|
255
|
-
return this.connector.commit();
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
IoneConnectorAdapterService.ɵprov = i0.ɵɵdefineInjectable({ factory: function IoneConnectorAdapterService_Factory() { return new IoneConnectorAdapterService(); }, token: IoneConnectorAdapterService, providedIn: "root" });
|
|
259
|
-
IoneConnectorAdapterService.decorators = [
|
|
260
|
-
{ type: Injectable, args: [{
|
|
261
|
-
providedIn: "root"
|
|
262
|
-
},] }
|
|
263
|
-
];
|
|
264
|
-
IoneConnectorAdapterService.ctorParameters = () => [];
|
|
265
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW9uZS1jb25uZWN0b3ItYWRhcHRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2hhcmVkY29tcG9uZW50cy9zcmMvbGliL3NlcnZpY2UvaW9uZS1jb25uZWN0b3ItYWRhcHRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0scUNBQXFDLENBQUM7QUFDN0QsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLHFDQUFxQyxDQUFDO0FBQzlELE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxtREFBbUQsQ0FBQztBQUMxRSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBSXpDLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLG9DQUFvQyxDQUFDO0FBQ3pFLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLHNEQUFzRCxDQUFDO0FBRXhGLE9BQU8sRUFBQyxZQUFZLElBQUksY0FBYyxFQUFDLE1BQU0sbURBQW1ELENBQUM7QUFFakcsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG1EQUFtRCxDQUFDO0FBQ2pGLE9BQU8sRUFBQywyQkFBMkIsRUFBQyxNQUFNLHdFQUF3RSxDQUFDO0FBRW5ILE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHFEQUFxRCxDQUFDO0FBQ3JGLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxrREFBa0QsQ0FBQztBQUM3RSxPQUFPLEVBQUMseUJBQXlCLEVBQUMsTUFBTSxpRUFBaUUsQ0FBQztBQUMxRyxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sb0RBQW9ELENBQUM7QUFFakYsT0FBTyxFQUFDLGtCQUFrQixJQUFJLG9CQUFvQixFQUFDLE1BQU0seURBQXlELENBQUM7O0FBT25ILE1BQU0sT0FBTywyQkFBMkI7SUFRdEM7UUFIUSxlQUFVLEdBQTBCLElBQUkscUJBQXFCLEVBQUUsQ0FBQztJQUl4RSxDQUFDO0lBRVksT0FBTyxDQUFDLE9BQVk7O1lBQy9CLElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxTQUFTLEVBQUU7Z0JBQzlCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO2dCQUN2QixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUN2QyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUM5QyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQzthQUMvRTtRQUNILENBQUM7S0FBQTtJQUVZLFVBQVU7O1lBQ3JCLElBQUksQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFDO1FBQzNCLENBQUM7S0FBQTtJQUVZLGNBQWMsQ0FBQyxVQUFtQixJQUFJOztZQUNqRCxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBaUIsRUFBRSxNQUFnQixFQUFFLEVBQUU7Z0JBQ3pELE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBMkIsRUFBRSxFQUFFO29CQUN4RixJQUFJLE1BQU0sQ0FBQyxnQkFBZ0IsSUFBSSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFO3dCQUM5RCxJQUFJLE1BQU0sQ0FBQyxZQUFZLEVBQUU7NEJBQ3ZCLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGtDQUFrQyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQzt5QkFDM0Y7cUJBQ0Y7eUJBQU07d0JBQ0wsTUFBTSxDQUFDLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO3FCQUMzQztnQkFDSCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztLQUFBO0lBRVkscUJBQXFCLENBQUMsT0FBMkI7O1lBQzVELE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFpQixFQUFFLE1BQWdCLEVBQUUsRUFBRTtnQkFDekQsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQTJCLEVBQUUsRUFBRTtvQkFDOUYsSUFBSSxNQUFNLENBQUMsZ0JBQWdCLElBQUksTUFBTSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRTt3QkFDOUQsSUFBSSxNQUFNLENBQUMsWUFBWSxFQUFFOzRCQUN2QixPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxzQkFBc0IsQ0FBQyxrQkFBa0IsRUFBRSxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQzt5QkFDMUY7cUJBQ0Y7eUJBQU07d0JBQ0wsTUFBTSxDQUFDLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO3FCQUMzQztnQkFDSCxDQUFDLENBQUMsQ0FBQTtZQUNKLENBQUMsQ0FBQyxDQUFBO1FBQ0osQ0FBQztLQUFBO0lBRUQsK0lBQStJO0lBQy9JLGtFQUFrRTtJQUNsRSxtSUFBbUk7SUFDbkksMEVBQTBFO0lBQzFFLHFDQUFxQztJQUNyQywrR0FBK0c7SUFDL0csWUFBWTtJQUNaLGlCQUFpQjtJQUNqQixxREFBcUQ7SUFDckQsVUFBVTtJQUNWLFNBQVM7SUFDVCxPQUFPO0lBQ1AsSUFBSTtJQUVTLG9CQUFvQixDQUFDLE1BQWM7O1lBQzlDLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFpQixFQUFFLE1BQWdCLEVBQUUsRUFBRTtnQkFDekQsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQStCLEVBQUUsRUFBRTtvQkFDMUYsb0VBQW9FO29CQUNwRSwrQkFBK0I7b0JBQy9CLDZGQUE2RjtvQkFDN0YsTUFBTTtvQkFDTixXQUFXO29CQUNYLCtDQUErQztvQkFDL0MsSUFBSTtnQkFDTixDQUFDLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztLQUFBO0lBRVksZUFBZSxDQUFDLE9BQStCOztZQUMxRCxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBaUIsRUFBRSxNQUFnQixFQUFFLEVBQUU7Z0JBQ3pELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBK0IsRUFBRSxFQUFFO29CQUN0RixJQUFJLE1BQU0sQ0FBQyxnQkFBZ0IsSUFBSSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFO3dCQUM5RCxJQUFJLE1BQU0sQ0FBQyxZQUFZLElBQUksTUFBTSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLEVBQUU7NEJBQzdFLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGtDQUFrQyxDQUFDLGNBQWMsRUFBRSxNQUFNLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7eUJBQy9HO3FCQUNGO3lCQUFNO3dCQUNMLE1BQU0sQ0FBQyxNQUFNLENBQUMsMEJBQTBCLENBQUMsQ0FBQztxQkFDM0M7Z0JBQ0gsQ0FBQyxDQUFDLENBQUE7WUFDSixDQUFDLENBQUMsQ0FBQTtRQUNKLENBQUM7S0FBQTtJQUVZLG1CQUFtQixDQUFDLElBQWtCOztZQUNqRCxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBaUIsRUFBRSxNQUFnQixFQUFFLEVBQUU7Z0JBQ3pELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUErQixFQUFFLEVBQUU7b0JBQ3ZGLElBQUksTUFBTSxDQUFDLGdCQUFnQixJQUFJLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUU7d0JBQzlELElBQUksTUFBTSxDQUFDLGFBQWEsRUFBRTs0QkFDeEIsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsa0NBQWtDLENBQUMsY0FBYyxFQUFFLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO3lCQUNuRztxQkFDRjt5QkFBTTt3QkFDTCxNQUFNLENBQUMsTUFBTSxDQUFDLDBCQUEwQixDQUFDLENBQUM7cUJBQzNDO2dCQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0tBQUE7SUFFWSw0QkFBNEI7O1lBQ3ZDLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFpQixFQUFFLE1BQWdCLEVBQUUsRUFBRTtnQkFDekQsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLDRCQUE0QixFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBK0IsRUFBRSxFQUFFO29CQUM1RixJQUFJLE1BQU0sQ0FBQyxnQkFBZ0IsSUFBSSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFO3dCQUM5RCxJQUFJLE1BQU0sQ0FBQyxhQUFhLEVBQUU7NEJBQ3hCLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGtDQUFrQyxDQUFDLHlCQUF5QixFQUFFLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO3lCQUM5RztxQkFDRjt5QkFBTTt3QkFDTCxNQUFNLENBQUMsTUFBTSxDQUFDLDBCQUEwQixDQUFDLENBQUM7cUJBQzNDO2dCQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0tBQUE7SUFFWSwyQkFBMkIsQ0FBQyxXQUFtQjs7WUFDMUQsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQWlCLEVBQUUsTUFBZ0IsRUFBRSxFQUFFO2dCQUN6RCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsMkJBQTJCLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBK0IsRUFBRSxFQUFFO29CQUN0RyxJQUFJLE1BQU0sQ0FBQyxnQkFBZ0IsSUFBSSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFO3dCQUM5RCxJQUFJLE1BQU0sQ0FBQyxhQUFhLEVBQUU7NEJBQ3hCLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGtDQUFrQyxDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQzt5QkFDbEc7cUJBQ0Y7eUJBQU07d0JBQ0wsTUFBTSxDQUFDLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO3FCQUMzQztnQkFDSCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztLQUFBO0lBRVksaUJBQWlCLENBQUMsSUFBNEI7O1lBQ3pELE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFpQixFQUFFLE1BQWdCLEVBQUUsRUFBRTtnQkFDekQsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQStCLEVBQUUsRUFBRTtvQkFDckYsSUFBSSxNQUFNLENBQUMsZ0JBQWdCLElBQUksTUFBTSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRTt3QkFDOUQsSUFBSSxNQUFNLENBQUMsYUFBYSxFQUFFOzRCQUN4QixPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxrQ0FBa0MsQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQzt5QkFDckc7cUJBQ0Y7eUJBQU07d0JBQ0wsTUFBTSxDQUFDLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO3FCQUMzQztnQkFDSCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztLQUFBO0lBRVksb0JBQW9CLENBQUMsSUFBc0I7O1lBQ3RELE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFpQixFQUFFLE1BQWdCLEVBQUUsRUFBRTtnQkFDekQsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFPLE1BQStCLEVBQUUsRUFBRTtvQkFDOUYsSUFBSSxNQUFNLENBQUMsZ0JBQWdCLElBQUksTUFBTSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRTt3QkFDOUQsTUFBTSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7d0JBQ3BCLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztxQkFDZjt5QkFBTTt3QkFDTCxNQUFNLENBQUMsTUFBTSxDQUFDLDBCQUEwQixDQUFDLENBQUM7cUJBQzNDO2dCQUNILENBQUMsQ0FBQSxDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7S0FBQTtJQUNZLGtCQUFrQixDQUFDLElBQTRCOztZQUMxRCxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBaUIsRUFBRSxNQUFnQixFQUFFLEVBQUU7Z0JBQ3pELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBTyxNQUErQixFQUFFLEVBQUU7b0JBQzVGLElBQUksTUFBTSxDQUFDLGdCQUFnQixJQUFJLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUU7d0JBQzlELE1BQU0sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO3dCQUNwQixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7cUJBQ2Y7eUJBQU07d0JBQ0wsTUFBTSxDQUFDLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO3FCQUMzQztnQkFDSCxDQUFDLENBQUEsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0tBQUE7SUFHWSxjQUFjOztZQUN6QixPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBaUIsRUFBRSxNQUFnQixFQUFFLEVBQUU7Z0JBQ3pELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUErQixFQUFFLEVBQUU7b0JBQzdFLElBQUksTUFBTSxDQUFDLGdCQUFnQixJQUFJLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUU7d0JBQzlELElBQUksTUFBTSxDQUFDLGFBQWEsRUFBRTs0QkFDeEIsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsa0NBQWtDLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO3lCQUNoRztxQkFDRjt5QkFBTTt3QkFDTCxNQUFNLENBQUMsTUFBTSxDQUFDLDBCQUEwQixDQUFDLENBQUM7cUJBQzNDO2dCQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0tBQUE7SUFFWSx3QkFBd0IsQ0FBQyxJQUFpQzs7WUFDckUsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQWlCLEVBQUUsTUFBZ0IsRUFBRSxFQUFFO2dCQUN6RCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsMkJBQTJCLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBMkIsRUFBRSxFQUFFO29CQUNqRyxJQUFJLE1BQU0sQ0FBQyxnQkFBZ0IsSUFBSSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFO3dCQUM5RCxJQUFJLE1BQU0sQ0FBQyxZQUFZLEVBQUU7NEJBQ3ZCLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGtDQUFrQyxDQUFDLDJCQUEyQixFQUFFLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO3lCQUMvRztxQkFDRjt5QkFBTTt3QkFDTCxNQUFNLENBQUMsTUFBTSxDQUFDLDBCQUEwQixDQUFDLENBQUM7cUJBQzNDO2dCQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0tBQUE7SUFFWSxxQkFBcUIsQ0FBQyxJQUF3Qjs7WUFDekQsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQWlCLEVBQUUsTUFBZ0IsRUFBRSxFQUFFO2dCQUN6RCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBK0IsRUFBRSxFQUFFO29CQUN6RixJQUFJLE1BQU0sQ0FBQyxnQkFBZ0IsSUFBSSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFO3dCQUM5RCxJQUFJLE1BQU0sQ0FBQyxhQUFhLEVBQUU7NEJBQ3hCLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGtDQUFrQyxDQUFDLG9CQUFvQixFQUFFLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO3lCQUN6RztxQkFDRjt5QkFBTTt3QkFDTCxNQUFNLENBQUMsTUFBTSxDQUFDLDBCQUEwQixDQUFDLENBQUM7cUJBQzNDO2dCQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0tBQUE7SUFFTSxNQUFNO1FBQ1gsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ2pDLENBQUM7Ozs7WUFoT0YsVUFBVSxTQUFDO2dCQUNWLFVBQVUsRUFBRSxNQUFNO2FBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtBcnRpY2xlc30gZnJvbSBcIkBjb2xpam5pdC9hcnRpY2xlYXBpL2J1aWxkL2FydGljbGVzXCI7XHJcbmltcG9ydCB7U2hhcmVkYXBpfSBmcm9tIFwiQGNvbGlqbml0L3NoYXJlZGFwaS9idWlsZC9zaGFyZWRhcGlcIjtcclxuaW1wb3J0IHtQcmludGVyfSBmcm9tIFwiQGNvbGlqbml0L3NoYXJlZGFwaS9idWlsZC9tb2RlbC9yZXBvcnQvcHJpbnRlci5ib1wiO1xyXG5pbXBvcnQge0luamVjdGFibGV9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7QXJ0aWNsZUV4dGVuZGVkfSBmcm9tIFwiQGNvbGlqbml0L2FydGljbGVhcGkvYnVpbGQvbW9kZWwvYXJ0aWNsZS1leHRlbmRlZC5ib1wiO1xyXG5pbXBvcnQge0RhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhfSBmcm9tIFwiQGNvbGlqbml0L2FydGljbGVhcGkvYnVpbGQvbW9kZWwvZGF0YS1zZXJ2aWNlLXJlc3BvbnNlLWRhdGFcIjtcclxuaW1wb3J0IHtEYXRhU2VydmljZVJlc3BvbnNlRGF0YSBhcyBEYXRhU2VydmljZVJlc3BvbnNlfSBmcm9tIFwiQGNvbGlqbml0L3NoYXJlZGFwaS9idWlsZC9tb2RlbC9kYXRhLXNlcnZpY2UtcmVzcG9uc2UtZGF0YVwiO1xyXG5pbXBvcnQge0J1c2luZXNzT2JqZWN0RmFjdG9yeX0gZnJvbSBcIi4uL2ZhY3RvcnkvYnVzaW5lc3Mtb2JqZWN0LWZhY3RvcnlcIjtcclxuaW1wb3J0IHtQcmludFN0b2NrU3RpY2tlcnN9IGZyb20gXCJAY29saWpuaXQvc2hhcmVkYXBpL2J1aWxkL21vZGVsL3ByaW50LXN0b2NrLXN0aWNrZXJzXCI7XHJcbmltcG9ydCB7R2V0U3RvY2tIaXN0b3J5UmVxdWVzdH0gZnJvbSBcIkBjb2xpam5pdC9hcnRpY2xlYXBpL2J1aWxkL21vZGVsL2dldC1zdG9jay1oaXN0b3J5LXJlcXVlc3RcIjtcclxuaW1wb3J0IHtBcnRpY2xlU3RvY2sgYXMgQXJ0aWNsZVN0b2NrQm99IGZyb20gXCJAY29saWpuaXQvYXJ0aWNsZWFwaS9idWlsZC9tb2RlbC9hcnRpY2xlLXN0b2NrLmJvXCI7XHJcbmltcG9ydCB7QXJ0aWNsZVN0b2NrfSBmcm9tIFwiQGNvbGlqbml0L2FydGljbGVhcGkvYnVpbGQvbW9kZWwvYXJ0aWNsZS1zdG9ja1wiO1xyXG5pbXBvcnQge1N0b2NrSGlzdG9yeUJvfSBmcm9tIFwiQGNvbGlqbml0L2FydGljbGVhcGkvYnVpbGQvbW9kZWwvc3RvY2staGlzdG9yeS5ib1wiO1xyXG5pbXBvcnQge1N0b2NrU3RpY2tlcnNQcmludExheW91dHNCb30gZnJvbSBcIkBjb2xpam5pdC9zaGFyZWRhcGkvYnVpbGQvbW9kZWwvcmVwb3J0L3N0b2NrLXN0aWNrZXJzLXByaW50LWxheW91dHMuYm9cIjtcclxuaW1wb3J0IHtBcnRpY2xlU3RvY2tNYW5hZ2VtZW50fSBmcm9tIFwiQGNvbGlqbml0L2FydGljbGVhcGkvYnVpbGQvbW9kZWwvYXJ0aWNsZS1zdG9jay1tYW5hZ2VtZW50XCI7XHJcbmltcG9ydCB7QXJ0aWNsZURldGFpbHNCb30gZnJvbSBcIkBjb2xpam5pdC9hcnRpY2xlYXBpL2J1aWxkL21vZGVsL2FydGljbGUtZGV0YWlscy5ib1wiO1xyXG5pbXBvcnQge1N0b2NrU3RhdHVzfSBmcm9tIFwiQGNvbGlqbml0L2FydGljbGVhcGkvYnVpbGQvbW9kZWwvc3RvY2stc3RhdHVzLmJvXCI7XHJcbmltcG9ydCB7U3RvY2tNYW5hZ2VtZW50V2FyZWhvdXNlc30gZnJvbSBcIkBjb2xpam5pdC9hcnRpY2xlYXBpL2J1aWxkL21vZGVsL3N0b2NrLW1hbmFnZW1lbnQtd2FyZWhvdXNlcy5ib1wiO1xyXG5pbXBvcnQge1N0b2NrTG9jYXRpb259IGZyb20gXCJAY29saWpuaXQvYXJ0aWNsZWFwaS9idWlsZC9tb2RlbC9zdG9jay1sb2NhdGlvbi5ib1wiO1xyXG5pbXBvcnQge0FydGljbGVUcmFuc2FjdGlvbn0gZnJvbSBcIkBjb2xpam5pdC9hcnRpY2xlYXBpL2J1aWxkL21vZGVsL2FydGljbGUtdHJhbnNhY3Rpb25cIjtcclxuaW1wb3J0IHtBcnRpY2xlVHJhbnNhY3Rpb24gYXMgQXJ0aWNsZVRyYW5zYWN0aW9uQm99IGZyb20gXCJAY29saWpuaXQvYXJ0aWNsZWFwaS9idWlsZC9tb2RlbC9hcnRpY2xlLXRyYW5zYWN0aW9uLmJvXCI7XHJcblxyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46IFwicm9vdFwiXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgSW9uZUNvbm5lY3RvckFkYXB0ZXJTZXJ2aWNlIHtcclxuICBwdWJsaWMgb3B0aW9uczogYW55O1xyXG4gIHB1YmxpYyBjb25uZWN0b3I6IEFydGljbGVzO1xyXG4gIHB1YmxpYyBzaGFyZWRDb25uZWN0b3I6IFNoYXJlZGFwaTtcclxuXHJcbiAgcHJpdmF0ZSBfYm9GYWN0b3J5OiBCdXNpbmVzc09iamVjdEZhY3RvcnkgPSBuZXcgQnVzaW5lc3NPYmplY3RGYWN0b3J5KCk7XHJcblxyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBjb25uZWN0KG9wdGlvbnM6IGFueSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKHRoaXMub3B0aW9ucyA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XHJcbiAgICAgIHRoaXMuY29ubmVjdG9yID0gbmV3IEFydGljbGVzKG9wdGlvbnMpO1xyXG4gICAgICB0aGlzLnNoYXJlZENvbm5lY3RvciA9IG5ldyBTaGFyZWRhcGkob3B0aW9ucyk7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5zZXNzaW9uID0gdGhpcy5jb25uZWN0b3Iuc2Vzc2lvbiAmJiB0aGlzLnNoYXJlZENvbm5lY3Rvci5zZXNzaW9uO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGRpc2Nvbm5lY3QoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLm9wdGlvbnMgPSB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0QWxsUHJpbnRlcnMoc2hvd0FsbDogYm9vbGVhbiA9IHRydWUpOiBQcm9taXNlPFByaW50ZXJbXT4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlOiBGdW5jdGlvbiwgcmVqZWN0OiBGdW5jdGlvbikgPT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5zaGFyZWRDb25uZWN0b3IubGlzdEFsbFByaW50ZXJzKHNob3dBbGwpLnRoZW4oKHJlc3VsdDogRGF0YVNlcnZpY2VSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXN1bHQudmFsaWRhdGlvblJlc3VsdCAmJiByZXN1bHQudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgICAgICBpZiAocmVzdWx0LnJlc3VsdE9iamVjdCkge1xyXG4gICAgICAgICAgICByZXNvbHZlKHRoaXMuX2JvRmFjdG9yeS5tYWtlQk9BcnJheUZyb21SYXdCYWNrZW5kRGF0YUFycmF5KFByaW50ZXIsIHJlc3VsdC5yZXN1bHRPYmplY3QpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmVqZWN0KHJlc3VsdC52YWxpZGF0aW9uTWVzc2FnZXNBc1N0cmluZyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldFByaW50U3RvY2tTdGlja2VycyhyZXF1ZXN0OiBQcmludFN0b2NrU3RpY2tlcnMpOiBQcm9taXNlPFByaW50U3RvY2tTdGlja2Vycz4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlOiBGdW5jdGlvbiwgcmVqZWN0OiBGdW5jdGlvbikgPT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5zaGFyZWRDb25uZWN0b3IuZ2V0UHJpbnRTdG9ja1N0aWNrZXJzKHJlcXVlc3QpLnRoZW4oKHJlc3VsdDogRGF0YVNlcnZpY2VSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXN1bHQudmFsaWRhdGlvblJlc3VsdCAmJiByZXN1bHQudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgICAgICBpZiAocmVzdWx0LnJlc3VsdE9iamVjdCkge1xyXG4gICAgICAgICAgICByZXNvbHZlKHRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKFByaW50U3RvY2tTdGlja2VycywgcmVzdWx0LnJlc3VsdE9iamVjdCkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZWplY3QocmVzdWx0LnZhbGlkYXRpb25NZXNzYWdlc0FzU3RyaW5nKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgLy8gcHVibGljIGFzeW5jIGdldFN0b2NrU3RpY2tlclByaW50TGF5b3V0cyhzdG9ja1N0aWNrZXJzUHJpbnRMYXlvdXRzQm86IFN0b2NrU3RpY2tlcnNQcmludExheW91dHNCbyk6IFByb21pc2U8U3RvY2tTdGlja2Vyc1ByaW50TGF5b3V0c0JvW10+IHtcclxuICAvLyAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogRnVuY3Rpb24sIHJlamVjdDogRnVuY3Rpb24pID0+IHtcclxuICAvLyAgICAgcmV0dXJuIHRoaXMuc2hhcmVkQ29ubmVjdG9yLmdldFN0b2NrU3RpY2tlclByaW50TGF5b3V0cyhzdG9ja1N0aWNrZXJzUHJpbnRMYXlvdXRzQm8pLnRoZW4oKHJlc3VsdDogRGF0YVNlcnZpY2VSZXNwb25zZSkgPT4ge1xyXG4gIC8vICAgICAgIGlmIChyZXN1bHQudmFsaWRhdGlvblJlc3VsdCAmJiByZXN1bHQudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgLy8gICAgICAgICBpZiAocmVzdWx0LnJlc3VsdE9iamVjdCkge1xyXG4gIC8vICAgICAgICAgICByZXNvbHZlKHRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKHN0b2NrU3RpY2tlcnNQcmludExheW91dHNCbywgcmVzdWx0LnJlc3VsdE9iamVjdCkpO1xyXG4gIC8vICAgICAgICAgfVxyXG4gIC8vICAgICAgIH0gZWxzZSB7XHJcbiAgLy8gICAgICAgICByZWplY3QocmVzdWx0LnZhbGlkYXRpb25NZXNzYWdlc0FzU3RyaW5nKTtcclxuICAvLyAgICAgICB9XHJcbiAgLy8gICAgIH0pXHJcbiAgLy8gICB9KVxyXG4gIC8vIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldEFydGljbGVGdWxsT2JqZWN0KGdvb2RJZDogbnVtYmVyKTogUHJvbWlzZTxBcnRpY2xlRXh0ZW5kZWQ+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogRnVuY3Rpb24sIHJlamVjdDogRnVuY3Rpb24pID0+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmdldEFydGljbGVGdWxsT2JqZWN0KGdvb2RJZCkudGhlbigocmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSkgPT4ge1xyXG4gICAgICAgIC8vIGlmIChyZXN1bHQudmFsaWRhdGlvblJlc3VsdCAmJiByZXN1bHQudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgICAgLy8gICBpZiAocmVzdWx0LnJlc3VsdE9iamVjdCkge1xyXG4gICAgICAgIC8vICAgICByZXNvbHZlKHRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKEFydGljbGVFeHRlbmRlZCwgcmVzdWx0LnJlc3VsdE9iamVjdCkpO1xyXG4gICAgICAgIC8vICAgfVxyXG4gICAgICAgIC8vIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gICByZWplY3QocmVzdWx0LnZhbGlkYXRpb25NZXNzYWdlc0FzU3RyaW5nKTtcclxuICAgICAgICAvLyB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0U3RvY2tIaXN0b3J5KHJlcXVlc3Q6IEdldFN0b2NrSGlzdG9yeVJlcXVlc3QpOiBQcm9taXNlPFN0b2NrSGlzdG9yeUJvW10+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogRnVuY3Rpb24sIHJlamVjdDogRnVuY3Rpb24pID0+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmdldFN0b2NrSGlzdG9yeShyZXF1ZXN0KS50aGVuKChyZXN1bHQ6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgICAgIGlmIChyZXN1bHQucmVzdWx0T2JqZWN0ICYmIHJlc3VsdC5yZXN1bHRPYmplY3QuaGFzT3duUHJvcGVydHkoXCJzdG9ja0hpc3RvcnlcIikpIHtcclxuICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLl9ib0ZhY3RvcnkubWFrZUJPQXJyYXlGcm9tUmF3QmFja2VuZERhdGFBcnJheShTdG9ja0hpc3RvcnlCbywgcmVzdWx0LnJlc3VsdE9iamVjdC5zdG9ja0hpc3RvcnkpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmVqZWN0KHJlc3VsdC52YWxpZGF0aW9uTWVzc2FnZXNBc1N0cmluZyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRTdG9ja0luZm9ybWF0aW9uKGRhdGE6IEFydGljbGVTdG9jayk6IFByb21pc2U8QXJ0aWNsZVN0b2NrQm9bXT4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlOiBGdW5jdGlvbiwgcmVqZWN0OiBGdW5jdGlvbikgPT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuZ2V0U3RvY2tJbmZvcm1hdGlvbihkYXRhKS50aGVuKChyZXN1bHQ6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgICAgIGlmIChyZXN1bHQucmVzdWx0T2JqZWN0cykge1xyXG4gICAgICAgICAgICByZXNvbHZlKHRoaXMuX2JvRmFjdG9yeS5tYWtlQk9BcnJheUZyb21SYXdCYWNrZW5kRGF0YUFycmF5KEFydGljbGVTdG9ja0JvLCByZXN1bHQucmVzdWx0T2JqZWN0cykpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZWplY3QocmVzdWx0LnZhbGlkYXRpb25NZXNzYWdlc0FzU3RyaW5nKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0U3RvY2tNYW5hZ2VtZW50V2FyZWhvdXNlcygpOiBQcm9taXNlPFN0b2NrTWFuYWdlbWVudFdhcmVob3VzZXNbXT4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlOiBGdW5jdGlvbiwgcmVqZWN0OiBGdW5jdGlvbikgPT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuZ2V0U3RvY2tNYW5hZ2VtZW50V2FyZWhvdXNlcygpLnRoZW4oKHJlc3VsdDogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEpID0+IHtcclxuICAgICAgICBpZiAocmVzdWx0LnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzdWx0LnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICAgICAgaWYgKHJlc3VsdC5yZXN1bHRPYmplY3RzKSB7XHJcbiAgICAgICAgICAgIHJlc29sdmUodGhpcy5fYm9GYWN0b3J5Lm1ha2VCT0FycmF5RnJvbVJhd0JhY2tlbmREYXRhQXJyYXkoU3RvY2tNYW5hZ2VtZW50V2FyZWhvdXNlcywgcmVzdWx0LnJlc3VsdE9iamVjdHMpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmVqZWN0KHJlc3VsdC52YWxpZGF0aW9uTWVzc2FnZXNBc1N0cmluZyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldFN0b2NrTWFuYWdlbWVudExvY2F0aW9ucyh3YXJlaG91c2VObzogbnVtYmVyKTogUHJvbWlzZTxTdG9ja0xvY2F0aW9uW10+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogRnVuY3Rpb24sIHJlamVjdDogRnVuY3Rpb24pID0+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmdldFN0b2NrTWFuYWdlbWVudExvY2F0aW9ucyh3YXJlaG91c2VObykudGhlbigocmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXN1bHQudmFsaWRhdGlvblJlc3VsdCAmJiByZXN1bHQudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgICAgICBpZiAocmVzdWx0LnJlc3VsdE9iamVjdHMpIHtcclxuICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLl9ib0ZhY3RvcnkubWFrZUJPQXJyYXlGcm9tUmF3QmFja2VuZERhdGFBcnJheShTdG9ja0xvY2F0aW9uLCByZXN1bHQucmVzdWx0T2JqZWN0cykpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZWplY3QocmVzdWx0LnZhbGlkYXRpb25NZXNzYWdlc0FzU3RyaW5nKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0QXJ0aWNsZURldGFpbHMoZGF0YTogQXJ0aWNsZVN0b2NrTWFuYWdlbWVudCk6IFByb21pc2U8QXJ0aWNsZURldGFpbHNCb1tdPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9uKSA9PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5nZXRBcnRpY2xlRGV0YWlscyhkYXRhKS50aGVuKChyZXN1bHQ6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgICAgIGlmIChyZXN1bHQucmVzdWx0T2JqZWN0cykge1xyXG4gICAgICAgICAgICByZXNvbHZlKHRoaXMuX2JvRmFjdG9yeS5tYWtlQk9BcnJheUZyb21SYXdCYWNrZW5kRGF0YUFycmF5KEFydGljbGVEZXRhaWxzQm8sIHJlc3VsdC5yZXN1bHRPYmplY3RzKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJlamVjdChyZXN1bHQudmFsaWRhdGlvbk1lc3NhZ2VzQXNTdHJpbmcpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVBcnRpY2xlRGV0YWlscyhkYXRhOiBBcnRpY2xlRGV0YWlsc0JvKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9uKSA9PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci51cGRhdGVBcnRpY2xlRGV0YWlscyhkYXRhKS50aGVuKGFzeW5jIChyZXN1bHQ6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgICAgIGF3YWl0IHRoaXMuY29tbWl0KCk7XHJcbiAgICAgICAgICByZXNvbHZlKHRydWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZWplY3QocmVzdWx0LnZhbGlkYXRpb25NZXNzYWdlc0FzU3RyaW5nKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHB1YmxpYyBhc3luYyBsb2NrQXJ0aWNsZURldGFpbHMoZGF0YTogQXJ0aWNsZVN0b2NrTWFuYWdlbWVudCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlOiBGdW5jdGlvbiwgcmVqZWN0OiBGdW5jdGlvbikgPT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IubG9ja0FydGljbGVEZXRhaWxzKGRhdGEpLnRoZW4oYXN5bmMgKHJlc3VsdDogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEpID0+IHtcclxuICAgICAgICBpZiAocmVzdWx0LnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzdWx0LnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy5jb21taXQoKTtcclxuICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJlamVjdChyZXN1bHQudmFsaWRhdGlvbk1lc3NhZ2VzQXNTdHJpbmcpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0U3RvY2tTdGF0dXMoKTogUHJvbWlzZTxTdG9ja1N0YXR1c1tdPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9uKSA9PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5nZXRTdG9ja1N0YXRlKCkudGhlbigocmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXN1bHQudmFsaWRhdGlvblJlc3VsdCAmJiByZXN1bHQudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgICAgICBpZiAocmVzdWx0LnJlc3VsdE9iamVjdHMpIHtcclxuICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLl9ib0ZhY3RvcnkubWFrZUJPQXJyYXlGcm9tUmF3QmFja2VuZERhdGFBcnJheShTdG9ja1N0YXR1cywgcmVzdWx0LnJlc3VsdE9iamVjdHMpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmVqZWN0KHJlc3VsdC52YWxpZGF0aW9uTWVzc2FnZXNBc1N0cmluZyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldFN0b2NrU3RpY2tlclRlbXBsYXRlcyhkYXRhOiBTdG9ja1N0aWNrZXJzUHJpbnRMYXlvdXRzQm8pOiBQcm9taXNlPFN0b2NrU3RpY2tlcnNQcmludExheW91dHNCb1tdPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9uKSA9PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLnNoYXJlZENvbm5lY3Rvci5nZXRTdG9ja1N0aWNrZXJQcmludExheW91dHMoZGF0YSkudGhlbigocmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgICAgIGlmIChyZXN1bHQucmVzdWx0T2JqZWN0KSB7XHJcbiAgICAgICAgICAgIHJlc29sdmUodGhpcy5fYm9GYWN0b3J5Lm1ha2VCT0FycmF5RnJvbVJhd0JhY2tlbmREYXRhQXJyYXkoU3RvY2tTdGlja2Vyc1ByaW50TGF5b3V0c0JvLCByZXN1bHQucmVzdWx0T2JqZWN0KSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJlamVjdChyZXN1bHQudmFsaWRhdGlvbk1lc3NhZ2VzQXNTdHJpbmcpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRBcnRpY2xlVHJhbnNhY3Rpb24oZGF0YTogQXJ0aWNsZVRyYW5zYWN0aW9uKTogUHJvbWlzZTxBcnRpY2xlVHJhbnNhY3Rpb25Cb1tdPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9uKSA9PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5nZXRBcnRpY2xlVHJhbnNhY3Rpb24oZGF0YSkudGhlbigocmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXN1bHQudmFsaWRhdGlvblJlc3VsdCAmJiByZXN1bHQudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgICAgICBpZiAocmVzdWx0LnJlc3VsdE9iamVjdHMpIHtcclxuICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLl9ib0ZhY3RvcnkubWFrZUJPQXJyYXlGcm9tUmF3QmFja2VuZERhdGFBcnJheShBcnRpY2xlVHJhbnNhY3Rpb25CbywgcmVzdWx0LnJlc3VsdE9iamVjdHMpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmVqZWN0KHJlc3VsdC52YWxpZGF0aW9uTWVzc2FnZXNBc1N0cmluZyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNvbW1pdCgpOiBQcm9taXNlPERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhPiB7XHJcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuY29tbWl0KCk7XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=
|