@colijnit/transaction 1.9.31 → 12.0.1
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/app/component/common/icon/icon.component.d.ts +1 -2
- package/bundles/colijnit-transaction.umd.js +950 -983
- package/bundles/colijnit-transaction.umd.js.map +1 -1
- package/colijnit-transaction.d.ts +14 -14
- package/colijnit-transaction.metadata.json +1 -1
- package/esm2015/app/component/checkout/checkout/checkout.component.js +22 -26
- package/esm2015/app/component/checkout/checkout-login/checkout-login.component.js +18 -27
- package/esm2015/app/component/checkout/checkout-overview/checkout-overview.component.js +26 -49
- package/esm2015/app/component/checkout/checkout-overview-block/checkout-overview-block.component.js +17 -24
- package/esm2015/app/component/checkout/checkout-overview-delivery-address/checkout-overview-delivery-address.component.js +18 -24
- package/esm2015/app/component/checkout/checkout-overview-delivery-edit/checkout-overview-delivery-edit.component.js +27 -42
- package/esm2015/app/component/checkout/checkout-overview-relation-address/checkout-overview-relation-address.component.js +19 -22
- package/esm2015/app/component/checkout/checkout-overview-relation-edit/checkout-overview-relation-edit.component.js +25 -36
- package/esm2015/app/component/checkout/checkout-relation-suggestions-list/checkout-relation-suggestions-list.component.js +18 -24
- package/esm2015/app/component/checkout/checkout-relation-suggestions-list-item/checkout-relation-suggestions-list-item.component.js +16 -21
- package/esm2015/app/component/checkout/ione-checkout.component.js +27 -34
- package/esm2015/app/component/checkout/ione-checkout.module.js +55 -58
- package/esm2015/app/component/checkout/retail-transaction-checkout/retail-transaction-checkout.component.js +16 -18
- package/esm2015/app/component/common/icon/icon.component.js +14 -18
- package/esm2015/app/component/common/image-display/image-display.component.js +19 -36
- package/esm2015/app/component/common/no-image-display/no-image-display.component.js +14 -20
- package/esm2015/app/component/core/core.module.js +32 -34
- package/esm2015/app/component/shopping-cart/characteristic-answer/characteristic-answer.component.js +20 -27
- package/esm2015/app/component/shopping-cart/ione-shopping-cart.component.js +31 -48
- package/esm2015/app/component/shopping-cart/ione-shopping-cart.module.js +51 -52
- package/esm2015/app/component/shopping-cart/shopping-cart/shopping-cart.component.js +29 -49
- package/esm2015/app/component/shopping-cart/shopping-cart-line/shopping-cart-line.component.js +25 -38
- package/esm2015/app/component/shopping-cart/shopping-cart-manager/shopping-cart-manager.component.js +27 -38
- package/esm2015/app/component/shopping-cart/stock-status-indicator/stock-status-indicator.component.js +13 -17
- package/esm2015/app/enum/checkout-steps.enum.js +1 -1
- package/esm2015/app/enum/content-view-mode.enum.js +1 -1
- package/esm2015/app/enum/direction.enum.js +1 -1
- package/esm2015/app/enum/language-code.enum.js +1 -1
- package/esm2015/app/enum/order-discount-type.enum.js +1 -1
- package/esm2015/app/enum/time-size.type.js +1 -1
- package/esm2015/app/model/business-object.js +6 -6
- package/esm2015/app/model/text-value-container.js +1 -1
- package/esm2015/app/pipe/append.pipe.js +6 -8
- package/esm2015/app/pipe/co-currency.pipe.js +8 -11
- package/esm2015/app/pipe/date-duration.pipe.js +6 -8
- package/esm2015/app/pipe/delivery-time.pipe.js +6 -8
- package/esm2015/app/pipe/localize.pipe.js +9 -13
- package/esm2015/app/pipe/safe-style-pipe.js +9 -11
- package/esm2015/app/service/dictionary.service.js +10 -10
- package/esm2015/app/service/ione-connector-adapter.service.js +8 -8
- package/esm2015/app/service/options.service.js +8 -8
- package/esm2015/app/service/transaction-event.service.js +6 -8
- package/esm2015/app/service/transaction.service.js +11 -12
- package/esm2015/app/utils/string-utils.js +1 -1
- package/esm2015/assets/dictionary/text.properties.js +1 -1
- package/esm2015/colijnit-transaction.js +15 -15
- package/esm2015/factory/business-object-factory.js +1 -1
- package/esm2015/factory/decorators/boolean.decorator.js +1 -1
- package/esm2015/factory/decorators/complex-array.decorator.js +1 -1
- package/esm2015/factory/decorators/complex-field.decorator.js +2 -2
- package/esm2015/factory/decorators/date-field.decorator.js +1 -1
- package/esm2015/factory/decorators/string-number.decorator.js +1 -1
- package/esm2015/public_api.js +1 -1
- package/esm2015/utils/array-utils.js +1 -1
- package/esm2015/utils/is-nill.function.js +1 -1
- package/fesm2015/colijnit-transaction.js +640 -799
- package/fesm2015/colijnit-transaction.js.map +1 -1
- package/package.json +33 -23
- package/bundles/colijnit-transaction.umd.min.js +0 -16
- package/bundles/colijnit-transaction.umd.min.js.map +0 -1
- package/enum/icon.enum.d.ts +0 -281
- package/esm2015/enum/icon.enum.js +0 -283
- package/esm5/app/component/checkout/checkout/checkout.component.js +0 -196
- package/esm5/app/component/checkout/checkout-login/checkout-login.component.js +0 -62
- package/esm5/app/component/checkout/checkout-overview/checkout-overview.component.js +0 -183
- package/esm5/app/component/checkout/checkout-overview-block/checkout-overview-block.component.js +0 -48
- package/esm5/app/component/checkout/checkout-overview-delivery-address/checkout-overview-delivery-address.component.js +0 -34
- package/esm5/app/component/checkout/checkout-overview-delivery-edit/checkout-overview-delivery-edit.component.js +0 -298
- package/esm5/app/component/checkout/checkout-overview-relation-address/checkout-overview-relation-address.component.js +0 -98
- package/esm5/app/component/checkout/checkout-overview-relation-edit/checkout-overview-relation-edit.component.js +0 -303
- package/esm5/app/component/checkout/checkout-relation-suggestions-list/checkout-relation-suggestions-list.component.js +0 -33
- package/esm5/app/component/checkout/checkout-relation-suggestions-list-item/checkout-relation-suggestions-list-item.component.js +0 -48
- package/esm5/app/component/checkout/ione-checkout.component.js +0 -163
- package/esm5/app/component/checkout/ione-checkout.module.js +0 -82
- package/esm5/app/component/checkout/retail-transaction-checkout/retail-transaction-checkout.component.js +0 -62
- package/esm5/app/component/common/icon/icon.component.js +0 -40
- package/esm5/app/component/common/image-display/image-display.component.js +0 -57
- package/esm5/app/component/common/no-image-display/no-image-display.component.js +0 -29
- package/esm5/app/component/core/core.module.js +0 -48
- package/esm5/app/component/shopping-cart/characteristic-answer/characteristic-answer.component.js +0 -66
- package/esm5/app/component/shopping-cart/ione-shopping-cart.component.js +0 -169
- package/esm5/app/component/shopping-cart/ione-shopping-cart.module.js +0 -70
- package/esm5/app/component/shopping-cart/shopping-cart/shopping-cart.component.js +0 -179
- package/esm5/app/component/shopping-cart/shopping-cart-line/shopping-cart-line.component.js +0 -208
- package/esm5/app/component/shopping-cart/shopping-cart-manager/shopping-cart-manager.component.js +0 -563
- package/esm5/app/component/shopping-cart/stock-status-indicator/stock-status-indicator.component.js +0 -28
- package/esm5/app/enum/checkout-steps.enum.js +0 -10
- package/esm5/app/enum/content-view-mode.enum.js +0 -10
- package/esm5/app/enum/direction.enum.js +0 -9
- package/esm5/app/enum/language-code.enum.js +0 -8
- package/esm5/app/enum/order-discount-type.enum.js +0 -7
- package/esm5/app/enum/time-size.type.js +0 -10
- package/esm5/app/model/business-object.js +0 -85
- package/esm5/app/model/text-value-container.js +0 -7
- package/esm5/app/pipe/append.pipe.js +0 -22
- package/esm5/app/pipe/co-currency.pipe.js +0 -55
- package/esm5/app/pipe/date-duration.pipe.js +0 -61
- package/esm5/app/pipe/delivery-time.pipe.js +0 -38
- package/esm5/app/pipe/localize.pipe.js +0 -34
- package/esm5/app/pipe/safe-style-pipe.js +0 -22
- package/esm5/app/service/dictionary.service.js +0 -83
- package/esm5/app/service/ione-connector-adapter.service.js +0 -549
- package/esm5/app/service/options.service.js +0 -108
- package/esm5/app/service/transaction-event.service.js +0 -21
- package/esm5/app/service/transaction.service.js +0 -690
- package/esm5/app/utils/string-utils.js +0 -73
- package/esm5/assets/dictionary/text.properties.js +0 -282
- package/esm5/colijnit-transaction.js +0 -36
- package/esm5/enum/icon.enum.js +0 -283
- package/esm5/factory/business-object-factory.js +0 -122
- package/esm5/factory/decorators/boolean.decorator.js +0 -106
- package/esm5/factory/decorators/complex-array.decorator.js +0 -59
- package/esm5/factory/decorators/complex-field.decorator.js +0 -61
- package/esm5/factory/decorators/date-field.decorator.js +0 -40
- package/esm5/factory/decorators/string-number.decorator.js +0 -47
- package/esm5/public_api.js +0 -8
- package/esm5/utils/array-utils.js +0 -188
- package/esm5/utils/is-nill.function.js +0 -5
- package/fesm5/colijnit-transaction.js +0 -5620
- package/fesm5/colijnit-transaction.js.map +0 -1
|
@@ -1,549 +0,0 @@
|
|
|
1
|
-
import { __awaiter, __decorate, __generator } from "tslib";
|
|
2
|
-
import { Injectable } from "@angular/core";
|
|
3
|
-
import { CustomerFullObject } from "@colijnit/transactionapi/build/model/customer-full-object.bo";
|
|
4
|
-
import { TransactionInfoResponse } from "@colijnit/transactionapi/build/model/transaction-info-response.bo";
|
|
5
|
-
import { RelationPrivacySetting } from "@colijnit/transactionapi/build/model/relation-privacy-setting.bo";
|
|
6
|
-
import { GetPostalCodeRetrievalOutputParams } from "@colijnit/transactionapi/build/model/get-postal-code-retrieval-output-params";
|
|
7
|
-
import { ArticleFullObject } from "@colijnit/transactionapi/build/model/article-full-object";
|
|
8
|
-
import { LineOperationResponse } from "@colijnit/transactionapi/build/model/line-operation-response.bo";
|
|
9
|
-
import { Transaction } from "@colijnit/transactionapi/build/transaction";
|
|
10
|
-
import { BusinessObjectFactory } from "../../factory/business-object-factory";
|
|
11
|
-
import { ImageUtils } from "@colijnit/transactionapi/build/utils/image-utils";
|
|
12
|
-
var IOneConnectorAdapterService = /** @class */ (function () {
|
|
13
|
-
function IOneConnectorAdapterService() {
|
|
14
|
-
this._boFactory = new BusinessObjectFactory();
|
|
15
|
-
this._countryList = [];
|
|
16
|
-
}
|
|
17
|
-
IOneConnectorAdapterService.prototype.connect = function (options) {
|
|
18
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
19
|
-
return __generator(this, function (_a) {
|
|
20
|
-
this.options = options;
|
|
21
|
-
this.connector = new Transaction(options);
|
|
22
|
-
this.options.session = this.connector.session;
|
|
23
|
-
return [2 /*return*/];
|
|
24
|
-
});
|
|
25
|
-
});
|
|
26
|
-
};
|
|
27
|
-
IOneConnectorAdapterService.prototype.getArticleFullObject = function (goodId) {
|
|
28
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
29
|
-
var _this = this;
|
|
30
|
-
return __generator(this, function (_a) {
|
|
31
|
-
return [2 /*return*/, new Promise(function (resolve, reject) {
|
|
32
|
-
return _this.connector.getArticleFullObject(goodId).then(function (result) {
|
|
33
|
-
if (result.validationResult && result.validationResult.success) {
|
|
34
|
-
if (result.resultObject) {
|
|
35
|
-
resolve(_this._boFactory.makeWithRawBackendData(ArticleFullObject, result.resultObject));
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
else {
|
|
39
|
-
reject(result.validationMessagesAsString);
|
|
40
|
-
}
|
|
41
|
-
});
|
|
42
|
-
})];
|
|
43
|
-
});
|
|
44
|
-
});
|
|
45
|
-
};
|
|
46
|
-
IOneConnectorAdapterService.prototype.getGoodIdFromArticleNr = function (articleNr) {
|
|
47
|
-
var _this = this;
|
|
48
|
-
return new Promise(function (resolve, reject) {
|
|
49
|
-
return _this.connector.getGoodIdFromArticleNr(articleNr).then(function (result) {
|
|
50
|
-
if (result.validationResult && result.validationResult.success) {
|
|
51
|
-
resolve(result.resultObject);
|
|
52
|
-
}
|
|
53
|
-
else {
|
|
54
|
-
reject(result.validationMessagesAsString);
|
|
55
|
-
}
|
|
56
|
-
});
|
|
57
|
-
});
|
|
58
|
-
};
|
|
59
|
-
IOneConnectorAdapterService.prototype.getSingleImage = function (nodeId, publication, includeMimetype, thumb) {
|
|
60
|
-
var _this = this;
|
|
61
|
-
return new Promise(function (resolve, reject) {
|
|
62
|
-
return _this.connector.getSingleImage(nodeId, publication, includeMimetype, thumb).then(function (result) {
|
|
63
|
-
if (result.validationResult && result.validationResult.success) {
|
|
64
|
-
if (result.resultObject.filePath !== null && result.resultObject.filePath !== "") {
|
|
65
|
-
return resolve(ImageUtils.getFixedImageFilepathUrl(result.resultObject.filePath));
|
|
66
|
-
}
|
|
67
|
-
else {
|
|
68
|
-
if (includeMimetype) {
|
|
69
|
-
return resolve(ImageUtils.getDocBodyWithMimeTypeDefinition(result.resultObject.fileName, thumb ? result.resultObject.thumbnailBody : result.resultObject.documentBody));
|
|
70
|
-
}
|
|
71
|
-
return resolve(thumb ? result.resultObject.thumbnailBody : result.resultObject.documentBody);
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
else {
|
|
75
|
-
reject(result.validationMessagesAsString);
|
|
76
|
-
}
|
|
77
|
-
});
|
|
78
|
-
});
|
|
79
|
-
};
|
|
80
|
-
IOneConnectorAdapterService.prototype.getDocumentContent = function (id, thumbnail) {
|
|
81
|
-
var _this = this;
|
|
82
|
-
return new Promise(function (resolve, reject) {
|
|
83
|
-
return _this.connector.getDocumentContent(id, thumbnail).then(function (result) {
|
|
84
|
-
if (result.validationResult && result.validationResult.success) {
|
|
85
|
-
resolve(result.resultObject.documentContent);
|
|
86
|
-
}
|
|
87
|
-
else {
|
|
88
|
-
reject(result.validationMessagesAsString);
|
|
89
|
-
}
|
|
90
|
-
});
|
|
91
|
-
});
|
|
92
|
-
};
|
|
93
|
-
IOneConnectorAdapterService.prototype.getCountries = function () {
|
|
94
|
-
var _this = this;
|
|
95
|
-
if (this._countryList.length > 0) {
|
|
96
|
-
return new Promise(function (resolve) {
|
|
97
|
-
resolve(_this._countryList);
|
|
98
|
-
});
|
|
99
|
-
}
|
|
100
|
-
return new Promise(function (resolve, reject) {
|
|
101
|
-
return _this.connector.getCountries().then(function (result) {
|
|
102
|
-
if (result.validationResult && result.validationResult.success) {
|
|
103
|
-
_this._countryList = result.resultObjects;
|
|
104
|
-
resolve(result.resultObjects);
|
|
105
|
-
}
|
|
106
|
-
else {
|
|
107
|
-
reject(result.validationMessagesAsString);
|
|
108
|
-
}
|
|
109
|
-
});
|
|
110
|
-
});
|
|
111
|
-
};
|
|
112
|
-
IOneConnectorAdapterService.prototype.getCountry = function (countryCode) {
|
|
113
|
-
this.getCountries();
|
|
114
|
-
return this._countryList.find(function (country) { return country.code === countryCode; });
|
|
115
|
-
};
|
|
116
|
-
IOneConnectorAdapterService.prototype.getPrivacySettings = function () {
|
|
117
|
-
var _this = this;
|
|
118
|
-
return new Promise(function (resolve, reject) {
|
|
119
|
-
return _this.connector.getPrivacySettings().then(function (result) {
|
|
120
|
-
if (result.validationResult && result.validationResult.success) {
|
|
121
|
-
resolve(result.resultObjects);
|
|
122
|
-
}
|
|
123
|
-
else {
|
|
124
|
-
reject(result.validationMessagesAsString);
|
|
125
|
-
}
|
|
126
|
-
});
|
|
127
|
-
});
|
|
128
|
-
};
|
|
129
|
-
IOneConnectorAdapterService.prototype.getRelationPrivacySettings = function () {
|
|
130
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
131
|
-
var privacySettings, basePrivacySettings, i, len, basePrivSetting, newRelPrivSet;
|
|
132
|
-
return __generator(this, function (_a) {
|
|
133
|
-
switch (_a.label) {
|
|
134
|
-
case 0:
|
|
135
|
-
privacySettings = [];
|
|
136
|
-
return [4 /*yield*/, this.getPrivacySettings()];
|
|
137
|
-
case 1:
|
|
138
|
-
basePrivacySettings = _a.sent();
|
|
139
|
-
for (i = 0, len = basePrivacySettings.length; i < len; i++) {
|
|
140
|
-
basePrivSetting = basePrivacySettings[i];
|
|
141
|
-
newRelPrivSet = this._boFactory.instantiateNewBo(RelationPrivacySetting);
|
|
142
|
-
newRelPrivSet.applyBasePrivacySettingValues(basePrivSetting);
|
|
143
|
-
privacySettings.push(newRelPrivSet);
|
|
144
|
-
}
|
|
145
|
-
return [2 /*return*/, privacySettings];
|
|
146
|
-
}
|
|
147
|
-
});
|
|
148
|
-
});
|
|
149
|
-
};
|
|
150
|
-
IOneConnectorAdapterService.prototype.getMarketingCodes = function () {
|
|
151
|
-
var _this = this;
|
|
152
|
-
return new Promise(function (resolve, reject) {
|
|
153
|
-
return _this.connector.getMarketingCodes().then(function (result) {
|
|
154
|
-
if (result.validationResult && result.validationResult.success) {
|
|
155
|
-
resolve(result.resultObjects);
|
|
156
|
-
}
|
|
157
|
-
else {
|
|
158
|
-
reject(result.validationMessagesAsString);
|
|
159
|
-
}
|
|
160
|
-
});
|
|
161
|
-
});
|
|
162
|
-
};
|
|
163
|
-
IOneConnectorAdapterService.prototype.createTransaction = function (kind, branchNr) {
|
|
164
|
-
var _this = this;
|
|
165
|
-
return new Promise(function (resolve, reject) {
|
|
166
|
-
return _this.connector.createTransaction(kind, branchNr).then(function (result) {
|
|
167
|
-
if (result.validationResult && result.validationResult.success) {
|
|
168
|
-
resolve(_this._boFactory.makeWithRawBackendData(TransactionInfoResponse, result.resultObject));
|
|
169
|
-
}
|
|
170
|
-
else {
|
|
171
|
-
reject(result.validationMessagesAsString);
|
|
172
|
-
}
|
|
173
|
-
});
|
|
174
|
-
});
|
|
175
|
-
};
|
|
176
|
-
IOneConnectorAdapterService.prototype.getTransactionByNrAndKind = function (kind, transactionNo) {
|
|
177
|
-
var _this = this;
|
|
178
|
-
return new Promise(function (resolve, reject) {
|
|
179
|
-
return _this.connector.getTransactionByNrAndKind(kind, transactionNo).then(function (result) {
|
|
180
|
-
if (result.validationResult && result.validationResult.success) {
|
|
181
|
-
resolve(_this._boFactory.makeWithRawBackendData(TransactionInfoResponse, result.resultObject));
|
|
182
|
-
}
|
|
183
|
-
else {
|
|
184
|
-
reject(result.validationMessagesAsString);
|
|
185
|
-
}
|
|
186
|
-
});
|
|
187
|
-
});
|
|
188
|
-
};
|
|
189
|
-
IOneConnectorAdapterService.prototype.saveTransaction = function (uuid) {
|
|
190
|
-
var _this = this;
|
|
191
|
-
return new Promise(function (resolve, reject) {
|
|
192
|
-
return _this.connector.saveTransaction(uuid).then(function (result) {
|
|
193
|
-
if (result.validationResult && result.validationResult.success) {
|
|
194
|
-
resolve(_this._boFactory.makeWithRawBackendData(TransactionInfoResponse, result.resultObject));
|
|
195
|
-
}
|
|
196
|
-
else {
|
|
197
|
-
reject(result.validationMessagesAsString);
|
|
198
|
-
}
|
|
199
|
-
});
|
|
200
|
-
});
|
|
201
|
-
};
|
|
202
|
-
IOneConnectorAdapterService.prototype.getCustomerFullObject = function (relationNo) {
|
|
203
|
-
var _this = this;
|
|
204
|
-
return new Promise(function (resolve, reject) {
|
|
205
|
-
return _this.connector.getCustomerFullObject(relationNo).then(function (result) {
|
|
206
|
-
if (result.validationResult && result.validationResult.success) {
|
|
207
|
-
resolve(_this._boFactory.makeWithRawBackendData(CustomerFullObject, result.resultObject));
|
|
208
|
-
}
|
|
209
|
-
else {
|
|
210
|
-
reject(result.validationMessagesAsString);
|
|
211
|
-
}
|
|
212
|
-
});
|
|
213
|
-
});
|
|
214
|
-
};
|
|
215
|
-
IOneConnectorAdapterService.prototype.getRelationNumber = function (relationId) {
|
|
216
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
217
|
-
var _this = this;
|
|
218
|
-
return __generator(this, function (_a) {
|
|
219
|
-
return [2 /*return*/, new Promise(function (resolve, reject) {
|
|
220
|
-
return _this.connector.getRelationNumber(relationId).then(function (result) {
|
|
221
|
-
if (result.validationResult && result.validationResult.success) {
|
|
222
|
-
resolve(result.resultObject);
|
|
223
|
-
}
|
|
224
|
-
else {
|
|
225
|
-
reject(result.validationMessagesAsString);
|
|
226
|
-
}
|
|
227
|
-
});
|
|
228
|
-
})];
|
|
229
|
-
});
|
|
230
|
-
});
|
|
231
|
-
};
|
|
232
|
-
IOneConnectorAdapterService.prototype.getSequenceValue = function (sequenceName) {
|
|
233
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
234
|
-
var _this = this;
|
|
235
|
-
return __generator(this, function (_a) {
|
|
236
|
-
return [2 /*return*/, new Promise(function (resolve, reject) {
|
|
237
|
-
return _this.connector.getSequenceValue(sequenceName).then(function (result) {
|
|
238
|
-
if (result.validationResult && result.validationResult.success) {
|
|
239
|
-
resolve(result.resultObject);
|
|
240
|
-
}
|
|
241
|
-
else {
|
|
242
|
-
reject(result.validationMessagesAsString);
|
|
243
|
-
}
|
|
244
|
-
});
|
|
245
|
-
})];
|
|
246
|
-
});
|
|
247
|
-
});
|
|
248
|
-
};
|
|
249
|
-
IOneConnectorAdapterService.prototype.insertCustomer = function (relation) {
|
|
250
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
251
|
-
var _this = this;
|
|
252
|
-
return __generator(this, function (_a) {
|
|
253
|
-
return [2 /*return*/, new Promise(function (resolve, reject) {
|
|
254
|
-
return _this.connector.insertCustomer(relation).then(function (result) {
|
|
255
|
-
if (result.validationResult && result.validationResult.success) {
|
|
256
|
-
resolve(_this._boFactory.makeWithRawBackendData(CustomerFullObject, result.resultObject));
|
|
257
|
-
}
|
|
258
|
-
else {
|
|
259
|
-
reject(result.validationMessagesAsString);
|
|
260
|
-
}
|
|
261
|
-
});
|
|
262
|
-
})];
|
|
263
|
-
});
|
|
264
|
-
});
|
|
265
|
-
};
|
|
266
|
-
IOneConnectorAdapterService.prototype.updateCustomer = function (relation) {
|
|
267
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
268
|
-
var _this = this;
|
|
269
|
-
return __generator(this, function (_a) {
|
|
270
|
-
return [2 /*return*/, new Promise(function (resolve, reject) {
|
|
271
|
-
return _this.connector.updateCustomer(relation).then(function (result) {
|
|
272
|
-
if (result.validationResult && result.validationResult.success) {
|
|
273
|
-
resolve(_this._boFactory.makeWithRawBackendData(CustomerFullObject, result.resultObject));
|
|
274
|
-
}
|
|
275
|
-
else {
|
|
276
|
-
reject(result.validationMessagesAsString);
|
|
277
|
-
}
|
|
278
|
-
});
|
|
279
|
-
})];
|
|
280
|
-
});
|
|
281
|
-
});
|
|
282
|
-
};
|
|
283
|
-
IOneConnectorAdapterService.prototype.getDeliveryMethods = function () {
|
|
284
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
285
|
-
var _this = this;
|
|
286
|
-
return __generator(this, function (_a) {
|
|
287
|
-
return [2 /*return*/, new Promise(function (resolve, reject) {
|
|
288
|
-
return _this.connector.getDeliveryMethods().then(function (result) {
|
|
289
|
-
if (result.validationResult && result.validationResult.success) {
|
|
290
|
-
resolve(result.resultObjects);
|
|
291
|
-
}
|
|
292
|
-
else {
|
|
293
|
-
reject(result.validationMessagesAsString);
|
|
294
|
-
}
|
|
295
|
-
});
|
|
296
|
-
})];
|
|
297
|
-
});
|
|
298
|
-
});
|
|
299
|
-
};
|
|
300
|
-
IOneConnectorAdapterService.prototype.getDeliveryOptions = function () {
|
|
301
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
302
|
-
var _this = this;
|
|
303
|
-
return __generator(this, function (_a) {
|
|
304
|
-
return [2 /*return*/, new Promise(function (resolve, reject) {
|
|
305
|
-
return _this.connector.getDeliveryOptions().then(function (result) {
|
|
306
|
-
if (result.validationResult && result.validationResult.success) {
|
|
307
|
-
resolve(result.resultObjects);
|
|
308
|
-
}
|
|
309
|
-
else {
|
|
310
|
-
reject(result.validationMessagesAsString);
|
|
311
|
-
}
|
|
312
|
-
});
|
|
313
|
-
})];
|
|
314
|
-
});
|
|
315
|
-
});
|
|
316
|
-
};
|
|
317
|
-
IOneConnectorAdapterService.prototype.addRelationToTransaction = function (uuid, relationId) {
|
|
318
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
319
|
-
var _this = this;
|
|
320
|
-
return __generator(this, function (_a) {
|
|
321
|
-
return [2 /*return*/, new Promise(function (resolve, reject) {
|
|
322
|
-
return _this.connector.addRelationToTransaction(uuid, relationId).then(function (result) {
|
|
323
|
-
if (result.validationResult && result.validationResult.success) {
|
|
324
|
-
resolve(result.validationResult.success);
|
|
325
|
-
}
|
|
326
|
-
else {
|
|
327
|
-
reject(result.validationMessagesAsString);
|
|
328
|
-
}
|
|
329
|
-
});
|
|
330
|
-
})];
|
|
331
|
-
});
|
|
332
|
-
});
|
|
333
|
-
};
|
|
334
|
-
IOneConnectorAdapterService.prototype.setTransactionDeliveryOptions = function (transactionDeliveryOptionsRequest) {
|
|
335
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
336
|
-
var _this = this;
|
|
337
|
-
return __generator(this, function (_a) {
|
|
338
|
-
return [2 /*return*/, new Promise(function (resolve, reject) {
|
|
339
|
-
return _this.connector.setTransactionDeliveryOptions(transactionDeliveryOptionsRequest).then(function (result) {
|
|
340
|
-
if (result.validationResult && result.validationResult.success) {
|
|
341
|
-
resolve(result.resultObjects);
|
|
342
|
-
}
|
|
343
|
-
else {
|
|
344
|
-
reject(result.validationMessagesAsString);
|
|
345
|
-
}
|
|
346
|
-
});
|
|
347
|
-
})];
|
|
348
|
-
});
|
|
349
|
-
});
|
|
350
|
-
};
|
|
351
|
-
IOneConnectorAdapterService.prototype.getPostalCodeRetrieval = function (postcalCode, houseNo) {
|
|
352
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
353
|
-
var _this = this;
|
|
354
|
-
return __generator(this, function (_a) {
|
|
355
|
-
return [2 /*return*/, new Promise(function (resolve, reject) {
|
|
356
|
-
return _this.connector.getPostalCodeRetrieval(postcalCode, houseNo).then(function (result) {
|
|
357
|
-
if (result.validationResult && result.validationResult.success) {
|
|
358
|
-
var outputParams = new GetPostalCodeRetrievalOutputParams();
|
|
359
|
-
outputParams.city = result.resultObject.city;
|
|
360
|
-
outputParams.street = result.resultObject.street;
|
|
361
|
-
outputParams.status = result.resultObject.status;
|
|
362
|
-
outputParams.netNumber = result.resultObject.netNumber;
|
|
363
|
-
resolve(outputParams);
|
|
364
|
-
}
|
|
365
|
-
else {
|
|
366
|
-
reject(result.validationMessagesAsString);
|
|
367
|
-
}
|
|
368
|
-
});
|
|
369
|
-
})];
|
|
370
|
-
});
|
|
371
|
-
});
|
|
372
|
-
};
|
|
373
|
-
IOneConnectorAdapterService.prototype.getRelationListObjects = function (relationRequest) {
|
|
374
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
375
|
-
var _this = this;
|
|
376
|
-
return __generator(this, function (_a) {
|
|
377
|
-
return [2 /*return*/, new Promise(function (resolve, reject) {
|
|
378
|
-
return _this.connector.getRelationListObjects(relationRequest).then(function (result) {
|
|
379
|
-
if (result.validationResult && result.validationResult.success) {
|
|
380
|
-
resolve(result.resultObjects);
|
|
381
|
-
}
|
|
382
|
-
else {
|
|
383
|
-
reject(result.validationMessagesAsString);
|
|
384
|
-
}
|
|
385
|
-
});
|
|
386
|
-
})];
|
|
387
|
-
});
|
|
388
|
-
});
|
|
389
|
-
};
|
|
390
|
-
IOneConnectorAdapterService.prototype.addTransactionLine = function (uuid, articleLine, articleNo, amount, warehouseNo, commissionCode, isReturn) {
|
|
391
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
392
|
-
var _this = this;
|
|
393
|
-
return __generator(this, function (_a) {
|
|
394
|
-
return [2 /*return*/, new Promise(function (resolve, reject) {
|
|
395
|
-
return _this.connector.addTransactionLine(uuid, articleLine, articleNo, amount, warehouseNo, commissionCode, isReturn).then(function (result) {
|
|
396
|
-
if (result.validationResult && result.validationResult.success) {
|
|
397
|
-
resolve(_this._boFactory.makeWithRawBackendData(LineOperationResponse, result.resultObject));
|
|
398
|
-
}
|
|
399
|
-
else {
|
|
400
|
-
reject(result.validationMessagesAsString);
|
|
401
|
-
}
|
|
402
|
-
});
|
|
403
|
-
})];
|
|
404
|
-
});
|
|
405
|
-
});
|
|
406
|
-
};
|
|
407
|
-
IOneConnectorAdapterService.prototype.cancelAddTransactionLine = function (lineUuid) {
|
|
408
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
409
|
-
var _this = this;
|
|
410
|
-
return __generator(this, function (_a) {
|
|
411
|
-
return [2 /*return*/, new Promise(function (resolve, reject) {
|
|
412
|
-
return _this.connector.cancelAddTransactionLine(lineUuid).then(function (result) {
|
|
413
|
-
if (result.validationResult && result.validationResult.success) {
|
|
414
|
-
resolve(_this._boFactory.makeWithRawBackendData(TransactionInfoResponse, result.resultObject));
|
|
415
|
-
}
|
|
416
|
-
else {
|
|
417
|
-
reject(result.validationMessagesAsString);
|
|
418
|
-
}
|
|
419
|
-
});
|
|
420
|
-
})];
|
|
421
|
-
});
|
|
422
|
-
});
|
|
423
|
-
};
|
|
424
|
-
IOneConnectorAdapterService.prototype.deleteTransactionLine = function (uuid, lineUuid) {
|
|
425
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
426
|
-
var _this = this;
|
|
427
|
-
return __generator(this, function (_a) {
|
|
428
|
-
return [2 /*return*/, new Promise(function (resolve, reject) {
|
|
429
|
-
return _this.connector.deleteTransactionLine(uuid, lineUuid).then(function (result) {
|
|
430
|
-
if (result.validationResult && result.validationResult.success) {
|
|
431
|
-
resolve(_this._boFactory.makeWithRawBackendData(TransactionInfoResponse, result.resultObject));
|
|
432
|
-
}
|
|
433
|
-
else {
|
|
434
|
-
reject(result.validationMessagesAsString);
|
|
435
|
-
}
|
|
436
|
-
});
|
|
437
|
-
})];
|
|
438
|
-
});
|
|
439
|
-
});
|
|
440
|
-
};
|
|
441
|
-
IOneConnectorAdapterService.prototype.changeTransactionLineQuantity = function (uuid, lineUuid, newQuantity) {
|
|
442
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
443
|
-
var _this = this;
|
|
444
|
-
return __generator(this, function (_a) {
|
|
445
|
-
return [2 /*return*/, new Promise(function (resolve, reject) {
|
|
446
|
-
return _this.connector.changeTransactionLineQuantity(uuid, lineUuid, newQuantity).then(function (result) {
|
|
447
|
-
if (result.validationResult && result.validationResult.success) {
|
|
448
|
-
resolve(_this._boFactory.makeWithRawBackendData(TransactionInfoResponse, result.resultObject));
|
|
449
|
-
}
|
|
450
|
-
else {
|
|
451
|
-
reject(result.validationMessagesAsString);
|
|
452
|
-
}
|
|
453
|
-
});
|
|
454
|
-
})];
|
|
455
|
-
});
|
|
456
|
-
});
|
|
457
|
-
};
|
|
458
|
-
IOneConnectorAdapterService.prototype.resolvePendingLineReason = function (pendingLineValues) {
|
|
459
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
460
|
-
var _this = this;
|
|
461
|
-
return __generator(this, function (_a) {
|
|
462
|
-
return [2 /*return*/, new Promise(function (resolve, reject) {
|
|
463
|
-
return _this.connector.resolvePendingLineReason(pendingLineValues).then(function (result) {
|
|
464
|
-
if (result.validationResult && result.validationResult.success) {
|
|
465
|
-
resolve(_this._boFactory.makeWithRawBackendData(TransactionInfoResponse, result.resultObject));
|
|
466
|
-
}
|
|
467
|
-
else {
|
|
468
|
-
reject(result.validationMessagesAsString);
|
|
469
|
-
}
|
|
470
|
-
});
|
|
471
|
-
})];
|
|
472
|
-
});
|
|
473
|
-
});
|
|
474
|
-
};
|
|
475
|
-
IOneConnectorAdapterService.prototype.getCommissionCodes = function (languageCode) {
|
|
476
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
477
|
-
var _this = this;
|
|
478
|
-
return __generator(this, function (_a) {
|
|
479
|
-
return [2 /*return*/, new Promise(function (resolve, reject) {
|
|
480
|
-
return _this.connector.getCommissionCodes(languageCode).then(function (result) {
|
|
481
|
-
if (result.validationResult && result.validationResult.success) {
|
|
482
|
-
resolve(result.resultObjects);
|
|
483
|
-
}
|
|
484
|
-
else {
|
|
485
|
-
reject(result.validationMessagesAsString);
|
|
486
|
-
}
|
|
487
|
-
});
|
|
488
|
-
})];
|
|
489
|
-
});
|
|
490
|
-
});
|
|
491
|
-
};
|
|
492
|
-
IOneConnectorAdapterService.prototype.getInOutCollection = function (languageCode) {
|
|
493
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
494
|
-
var _this = this;
|
|
495
|
-
return __generator(this, function (_a) {
|
|
496
|
-
return [2 /*return*/, new Promise(function (resolve, reject) {
|
|
497
|
-
return _this.connector.getInOutCollection(languageCode).then(function (result) {
|
|
498
|
-
if (result.validationResult && result.validationResult.success) {
|
|
499
|
-
resolve(result.resultObjects);
|
|
500
|
-
}
|
|
501
|
-
else {
|
|
502
|
-
reject(result.validationMessagesAsString);
|
|
503
|
-
}
|
|
504
|
-
});
|
|
505
|
-
})];
|
|
506
|
-
});
|
|
507
|
-
});
|
|
508
|
-
};
|
|
509
|
-
IOneConnectorAdapterService.prototype.getTransactionArticleWarehouses = function (goodId) {
|
|
510
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
511
|
-
var _this = this;
|
|
512
|
-
return __generator(this, function (_a) {
|
|
513
|
-
return [2 /*return*/, new Promise(function (resolve, reject) {
|
|
514
|
-
return _this.connector.getTransactionArticleWarehouses(goodId).then(function (result) {
|
|
515
|
-
if (result.validationResult && result.validationResult.success) {
|
|
516
|
-
resolve(result.resultObjects);
|
|
517
|
-
}
|
|
518
|
-
else {
|
|
519
|
-
reject(result.validationMessagesAsString);
|
|
520
|
-
}
|
|
521
|
-
});
|
|
522
|
-
})];
|
|
523
|
-
});
|
|
524
|
-
});
|
|
525
|
-
};
|
|
526
|
-
IOneConnectorAdapterService.prototype.setRelationByUser = function (uuid, username, password) {
|
|
527
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
528
|
-
var _this = this;
|
|
529
|
-
return __generator(this, function (_a) {
|
|
530
|
-
return [2 /*return*/, new Promise(function (resolve, reject) {
|
|
531
|
-
return _this.connector.setRelationByUser(uuid, username, password).then(function (result) {
|
|
532
|
-
if (result.validationResult && result.validationResult.success) {
|
|
533
|
-
resolve(result.validationResult.success);
|
|
534
|
-
}
|
|
535
|
-
else {
|
|
536
|
-
reject(result.validationMessagesAsString);
|
|
537
|
-
}
|
|
538
|
-
});
|
|
539
|
-
})];
|
|
540
|
-
});
|
|
541
|
-
});
|
|
542
|
-
};
|
|
543
|
-
IOneConnectorAdapterService = __decorate([
|
|
544
|
-
Injectable()
|
|
545
|
-
], IOneConnectorAdapterService);
|
|
546
|
-
return IOneConnectorAdapterService;
|
|
547
|
-
}());
|
|
548
|
-
export { IOneConnectorAdapterService };
|
|
549
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW9uZS1jb25uZWN0b3ItYWRhcHRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGNvbGlqbml0L3RyYW5zYWN0aW9uLyIsInNvdXJjZXMiOlsiYXBwL3NlcnZpY2UvaW9uZS1jb25uZWN0b3ItYWRhcHRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXpDLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLDhEQUE4RCxDQUFDO0FBQ2hHLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLG1FQUFtRSxDQUFDO0FBSTFHLE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLGtFQUFrRSxDQUFDO0FBS3hHLE9BQU8sRUFBQyxrQ0FBa0MsRUFBQyxNQUFNLDhFQUE4RSxDQUFDO0FBT2hJLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLDBEQUEwRCxDQUFDO0FBQzNGLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLGlFQUFpRSxDQUFDO0FBRXRHLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSw0Q0FBNEMsQ0FBQztBQUV2RSxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSx1Q0FBdUMsQ0FBQztBQUU1RSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sa0RBQWtELENBQUM7QUFHNUU7SUFRRTtRQUhRLGVBQVUsR0FBMEIsSUFBSSxxQkFBcUIsRUFBRSxDQUFDO1FBQ2hFLGlCQUFZLEdBQWMsRUFBRSxDQUFDO0lBRXRCLENBQUM7SUFFSCw2Q0FBTyxHQUFwQixVQUFxQixPQUFnQjs7O2dCQUNuQyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztnQkFDdkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDMUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUM7Ozs7S0FDL0M7SUFFWSwwREFBb0IsR0FBakMsVUFBa0MsTUFBYzs7OztnQkFDOUMsc0JBQU8sSUFBSSxPQUFPLENBQUMsVUFBQyxPQUFpQixFQUFFLE1BQWdCO3dCQUNyRCxPQUFPLEtBQUksQ0FBQyxTQUFTLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQUMsTUFBK0I7NEJBQ3RGLElBQUksTUFBTSxDQUFDLGdCQUFnQixJQUFJLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUU7Z0NBQzlELElBQUksTUFBTSxDQUFDLFlBQVksRUFBRTtvQ0FDdkIsT0FBTyxDQUFDLEtBQUksQ0FBQyxVQUFVLENBQUMsc0JBQXNCLENBQUMsaUJBQWlCLEVBQUUsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7aUNBQ3pGOzZCQUNGO2lDQUFNO2dDQUNILE1BQU0sQ0FBQyxNQUFNLENBQUMsMEJBQTBCLENBQUMsQ0FBQzs2QkFDN0M7d0JBQ0gsQ0FBQyxDQUFDLENBQUM7b0JBQ0wsQ0FBQyxDQUFDLEVBQUM7OztLQUNKO0lBRU0sNERBQXNCLEdBQTdCLFVBQThCLFNBQWlCO1FBQS9DLGlCQVVDO1FBVEMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxVQUFDLE9BQWlCLEVBQUUsTUFBZ0I7WUFDckQsT0FBTyxLQUFJLENBQUMsU0FBUyxDQUFDLHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFDLE1BQStCO2dCQUMzRixJQUFJLE1BQU0sQ0FBQyxnQkFBZ0IsSUFBSSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFO29CQUM5RCxPQUFPLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO2lCQUM5QjtxQkFBTTtvQkFDTCxNQUFNLENBQUMsTUFBTSxDQUFDLDBCQUEwQixDQUFDLENBQUM7aUJBQzNDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxvREFBYyxHQUFyQixVQUFzQixNQUF1QixFQUFFLFdBQW1CLEVBQUUsZUFBd0IsRUFBRSxLQUFjO1FBQTVHLGlCQWtCQztRQWpCQyxPQUFPLElBQUksT0FBTyxDQUFDLFVBQUMsT0FBaUIsRUFBRSxNQUFnQjtZQUNyRCxPQUFPLEtBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFDLE1BQStCO2dCQUNySCxJQUFJLE1BQU0sQ0FBQyxnQkFBZ0IsSUFBSSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFO29CQUM5RCxJQUFJLE1BQU0sQ0FBQyxZQUFZLENBQUMsUUFBUSxLQUFLLElBQUksSUFBSSxNQUFNLENBQUMsWUFBWSxDQUFDLFFBQVEsS0FBSyxFQUFFLEVBQUU7d0JBQ2hGLE9BQU8sT0FBTyxDQUFDLFVBQVUsQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7cUJBQ25GO3lCQUFNO3dCQUNMLElBQUksZUFBZSxFQUFFOzRCQUNuQixPQUFPLE9BQU8sQ0FBQyxVQUFVLENBQUMsZ0NBQWdDLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQ3JGLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQzt5QkFDbEY7d0JBQ0QsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQztxQkFDOUY7aUJBQ0Y7cUJBQU07b0JBQ0wsTUFBTSxDQUFDLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO2lCQUMzQztZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sd0RBQWtCLEdBQXpCLFVBQTBCLEVBQVUsRUFBRSxTQUFrQjtRQUF4RCxpQkFVQztRQVRDLE9BQU8sSUFBSSxPQUFPLENBQUMsVUFBQyxPQUFpQixFQUFFLE1BQWdCO1lBQ3JELE9BQU8sS0FBSSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQUMsTUFBK0I7Z0JBQzNGLElBQUksTUFBTSxDQUFDLGdCQUFnQixJQUFJLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUU7b0JBQzlELE9BQU8sQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQyxDQUFDO2lCQUM5QztxQkFBTTtvQkFDTCxNQUFNLENBQUMsTUFBTSxDQUFDLDBCQUEwQixDQUFDLENBQUM7aUJBQzNDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxrREFBWSxHQUFuQjtRQUFBLGlCQWlCQztRQWhCQyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNoQyxPQUFPLElBQUksT0FBTyxDQUFDLFVBQUMsT0FBaUI7Z0JBQ25DLE9BQU8sQ0FBQyxLQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDN0IsQ0FBQyxDQUFDLENBQUM7U0FDSjtRQUVELE9BQU8sSUFBSSxPQUFPLENBQUMsVUFBQyxPQUFpQixFQUFFLE1BQWdCO1lBQ3JELE9BQU8sS0FBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBQyxNQUErQjtnQkFDeEUsSUFBSSxNQUFNLENBQUMsZ0JBQWdCLElBQUksTUFBTSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRTtvQkFDOUQsS0FBSSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDO29CQUN6QyxPQUFPLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2lCQUMvQjtxQkFBTTtvQkFDTCxNQUFNLENBQUMsTUFBTSxDQUFDLDBCQUEwQixDQUFDLENBQUM7aUJBQzNDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxnREFBVSxHQUFqQixVQUFrQixXQUFtQjtRQUNuQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDcEIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxVQUFBLE9BQU8sSUFBSSxPQUFBLE9BQU8sQ0FBQyxJQUFJLEtBQUssV0FBVyxFQUE1QixDQUE0QixDQUFDLENBQUM7SUFDekUsQ0FBQztJQUVNLHdEQUFrQixHQUF6QjtRQUFBLGlCQVVDO1FBVEMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxVQUFDLE9BQWlCLEVBQUUsTUFBZ0I7WUFDckQsT0FBTyxLQUFJLENBQUMsU0FBUyxDQUFDLGtCQUFrQixFQUFFLENBQUMsSUFBSSxDQUFDLFVBQUMsTUFBK0I7Z0JBQzlFLElBQUksTUFBTSxDQUFDLGdCQUFnQixJQUFJLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUU7b0JBQzlELE9BQU8sQ0FBbUIsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2lCQUNqRDtxQkFBTTtvQkFDTCxNQUFNLENBQUMsTUFBTSxDQUFDLDBCQUEwQixDQUFDLENBQUM7aUJBQzNDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFWSxnRUFBMEIsR0FBdkM7Ozs7Ozt3QkFDUSxlQUFlLEdBQTZCLEVBQUUsQ0FBQzt3QkFFUCxxQkFBTSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsRUFBQTs7d0JBQXZFLG1CQUFtQixHQUFxQixTQUErQjt3QkFDN0UsS0FBUyxDQUFDLEdBQVcsQ0FBQyxFQUFFLEdBQUcsR0FBVyxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTs0QkFDeEUsZUFBZSxHQUFtQixtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQzs0QkFDekQsYUFBYSxHQUE0RCxJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLHNCQUFzQixDQUFDLENBQUM7NEJBQ3hJLGFBQWEsQ0FBQyw2QkFBNkIsQ0FBQyxlQUFlLENBQUMsQ0FBQzs0QkFDN0QsZUFBZSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQzt5QkFDckM7d0JBQ0Qsc0JBQU8sZUFBZSxFQUFDOzs7O0tBQ3hCO0lBRU0sdURBQWlCLEdBQXhCO1FBQUEsaUJBVUM7UUFUQyxPQUFPLElBQUksT0FBTyxDQUFDLFVBQUMsT0FBaUIsRUFBRSxNQUFnQjtZQUNyRCxPQUFPLEtBQUksQ0FBQyxTQUFTLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBQyxNQUErQjtnQkFDN0UsSUFBSSxNQUFNLENBQUMsZ0JBQWdCLElBQUksTUFBTSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRTtvQkFDOUQsT0FBTyxDQUFrQixNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7aUJBQ2hEO3FCQUFNO29CQUNMLE1BQU0sQ0FBQyxNQUFNLENBQUMsMEJBQTBCLENBQUMsQ0FBQztpQkFDM0M7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLHVEQUFpQixHQUF4QixVQUF5QixJQUFxQixFQUFFLFFBQWdCO1FBQWhFLGlCQVVDO1FBVEMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxVQUFDLE9BQWlCLEVBQUUsTUFBZ0I7WUFDckQsT0FBTyxLQUFJLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBQyxNQUErQjtnQkFDM0YsSUFBSSxNQUFNLENBQUMsZ0JBQWdCLElBQUksTUFBTSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRTtvQkFDOUQsT0FBTyxDQUFDLEtBQUksQ0FBQyxVQUFVLENBQUMsc0JBQXNCLENBQUMsdUJBQXVCLEVBQUUsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7aUJBQy9GO3FCQUFNO29CQUNMLE1BQU0sQ0FBQyxNQUFNLENBQUMsMEJBQTBCLENBQUMsQ0FBQztpQkFDM0M7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLCtEQUF5QixHQUFoQyxVQUFpQyxJQUFxQixFQUFFLGFBQXFCO1FBQTdFLGlCQVVDO1FBVEMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxVQUFDLE9BQWlCLEVBQUUsTUFBZ0I7WUFDckQsT0FBTyxLQUFJLENBQUMsU0FBUyxDQUFDLHlCQUF5QixDQUFDLElBQUksRUFBRSxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBQyxNQUErQjtnQkFDeEcsSUFBSSxNQUFNLENBQUMsZ0JBQWdCLElBQUksTUFBTSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRTtvQkFDOUQsT0FBTyxDQUFDLEtBQUksQ0FBQyxVQUFVLENBQUMsc0JBQXNCLENBQUMsdUJBQXVCLEVBQUUsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7aUJBQy9GO3FCQUFNO29CQUNMLE1BQU0sQ0FBQyxNQUFNLENBQUMsMEJBQTBCLENBQUMsQ0FBQztpQkFDM0M7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLHFEQUFlLEdBQXRCLFVBQXVCLElBQVk7UUFBbkMsaUJBVUM7UUFUQyxPQUFPLElBQUksT0FBTyxDQUFDLFVBQUMsT0FBaUIsRUFBRSxNQUFnQjtZQUNyRCxPQUFPLEtBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFDLE1BQStCO2dCQUMvRSxJQUFJLE1BQU0sQ0FBQyxnQkFBZ0IsSUFBSSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFO29CQUM5RCxPQUFPLENBQUMsS0FBSSxDQUFDLFVBQVUsQ0FBQyxzQkFBc0IsQ0FBQyx1QkFBdUIsRUFBRSxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztpQkFDL0Y7cUJBQU07b0JBQ0wsTUFBTSxDQUFDLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO2lCQUMzQztZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sMkRBQXFCLEdBQTVCLFVBQTZCLFVBQWtCO1FBQS9DLGlCQVVDO1FBVEMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxVQUFDLE9BQWlCLEVBQUUsTUFBZ0I7WUFDckQsT0FBTyxLQUFJLENBQUMsU0FBUyxDQUFDLHFCQUFxQixDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFDLE1BQStCO2dCQUMzRixJQUFJLE1BQU0sQ0FBQyxnQkFBZ0IsSUFBSSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFO29CQUM5RCxPQUFPLENBQUMsS0FBSSxDQUFDLFVBQVUsQ0FBQyxzQkFBc0IsQ0FBQyxrQkFBa0IsRUFBRSxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztpQkFDMUY7cUJBQU07b0JBQ0wsTUFBTSxDQUFDLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO2lCQUMzQztZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRVksdURBQWlCLEdBQTlCLFVBQStCLFVBQWtCOzs7O2dCQUMvQyxzQkFBTyxJQUFJLE9BQU8sQ0FBQyxVQUFDLE9BQWlCLEVBQUUsTUFBZ0I7d0JBQ3JELE9BQU8sS0FBSSxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBQyxNQUErQjs0QkFDdkYsSUFBSSxNQUFNLENBQUMsZ0JBQWdCLElBQUksTUFBTSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRTtnQ0FDOUQsT0FBTyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQzs2QkFDOUI7aUNBQU07Z0NBQ0wsTUFBTSxDQUFDLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxDQUFDOzZCQUMzQzt3QkFDSCxDQUFDLENBQUMsQ0FBQztvQkFDTCxDQUFDLENBQUMsRUFBQzs7O0tBQ0o7SUFFWSxzREFBZ0IsR0FBN0IsVUFBOEIsWUFBMEI7Ozs7Z0JBQ3RELHNCQUFPLElBQUksT0FBTyxDQUFDLFVBQUMsT0FBaUIsRUFBRSxNQUFnQjt3QkFDckQsT0FBTyxLQUFJLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFDLE1BQStCOzRCQUN4RixJQUFJLE1BQU0sQ0FBQyxnQkFBZ0IsSUFBSSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFO2dDQUM5RCxPQUFPLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDOzZCQUM5QjtpQ0FBTTtnQ0FDTCxNQUFNLENBQUMsTUFBTSxDQUFDLDBCQUEwQixDQUFDLENBQUM7NkJBQzNDO3dCQUNILENBQUMsQ0FBQyxDQUFDO29CQUNMLENBQUMsQ0FBQyxFQUFDOzs7S0FDSjtJQUVZLG9EQUFjLEdBQTNCLFVBQTRCLFFBQTRCOzs7O2dCQUN0RCxzQkFBTyxJQUFJLE9BQU8sQ0FBQyxVQUFDLE9BQWlCLEVBQUUsTUFBZ0I7d0JBQ3JELE9BQU8sS0FBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQUMsTUFBK0I7NEJBQ2xGLElBQUksTUFBTSxDQUFDLGdCQUFnQixJQUFJLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUU7Z0NBQzlELE9BQU8sQ0FBQyxLQUFJLENBQUMsVUFBVSxDQUFDLHNCQUFzQixDQUFDLGtCQUFrQixFQUFFLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDOzZCQUMxRjtpQ0FBTTtnQ0FDTCxNQUFNLENBQUMsTUFBTSxDQUFDLDBCQUEwQixDQUFDLENBQUM7NkJBQzNDO3dCQUNILENBQUMsQ0FBQyxDQUFDO29CQUNMLENBQUMsQ0FBQyxFQUFDOzs7S0FDSjtJQUVZLG9EQUFjLEdBQTNCLFVBQTRCLFFBQTRCOzs7O2dCQUN0RCxzQkFBTyxJQUFJLE9BQU8sQ0FBQyxVQUFDLE9BQWlCLEVBQUUsTUFBZ0I7d0JBQ3JELE9BQU8sS0FBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQUMsTUFBK0I7NEJBQ2xGLElBQUksTUFBTSxDQUFDLGdCQUFnQixJQUFJLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUU7Z0NBQzlELE9BQU8sQ0FBQyxLQUFJLENBQUMsVUFBVSxDQUFDLHNCQUFzQixDQUFDLGtCQUFrQixFQUFFLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDOzZCQUMxRjtpQ0FBTTtnQ0FDTCxNQUFNLENBQUMsTUFBTSxDQUFDLDBCQUEwQixDQUFDLENBQUM7NkJBQzNDO3dCQUNILENBQUMsQ0FBQyxDQUFDO29CQUNMLENBQUMsQ0FBQyxFQUFDOzs7S0FDSjtJQUVZLHdEQUFrQixHQUEvQjs7OztnQkFDRSxzQkFBTyxJQUFJLE9BQU8sQ0FBQyxVQUFDLE9BQWlCLEVBQUUsTUFBZ0I7d0JBQ3JELE9BQU8sS0FBSSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFDLE1BQStCOzRCQUM5RSxJQUFJLE1BQU0sQ0FBQyxnQkFBZ0IsSUFBSSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFO2dDQUM5RCxPQUFPLENBQW1CLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQzs2QkFDakQ7aUNBQU07Z0NBQ0wsTUFBTSxDQUFDLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxDQUFDOzZCQUMzQzt3QkFDSCxDQUFDLENBQUMsQ0FBQztvQkFDTCxDQUFDLENBQUMsRUFBQzs7O0tBQ0o7SUFFWSx3REFBa0IsR0FBL0I7Ozs7Z0JBQ0Usc0JBQU8sSUFBSSxPQUFPLENBQUMsVUFBQyxPQUFpQixFQUFFLE1BQWdCO3dCQUNyRCxPQUFPLEtBQUksQ0FBQyxTQUFTLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBQyxNQUErQjs0QkFDOUUsSUFBSSxNQUFNLENBQUMsZ0JBQWdCLElBQUksTUFBTSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRTtnQ0FDOUQsT0FBTyxDQUFtQixNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7NkJBQ2pEO2lDQUFNO2dDQUNMLE1BQU0sQ0FBQyxNQUFNLENBQUMsMEJBQTBCLENBQUMsQ0FBQzs2QkFDM0M7d0JBQ0gsQ0FBQyxDQUFDLENBQUM7b0JBQ0wsQ0FBQyxDQUFDLEVBQUM7OztLQUNKO0lBRVksOERBQXdCLEdBQXJDLFVBQXNDLElBQVksRUFBRSxVQUFrQjs7OztnQkFDcEUsc0JBQU8sSUFBSSxPQUFPLENBQUMsVUFBQyxPQUFpQixFQUFFLE1BQWdCO3dCQUNyRCxPQUFPLEtBQUksQ0FBQyxTQUFTLENBQUMsd0JBQXdCLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFDLE1BQStCOzRCQUNwRyxJQUFJLE1BQU0sQ0FBQyxnQkFBZ0IsSUFBSSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFO2dDQUM5RCxPQUFPLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDOzZCQUMxQztpQ0FBTTtnQ0FDTCxNQUFNLENBQUMsTUFBTSxDQUFDLDBCQUEwQixDQUFDLENBQUM7NkJBQzNDO3dCQUNILENBQUMsQ0FBQyxDQUFDO29CQUNMLENBQUMsQ0FBQyxFQUFDOzs7S0FDSjtJQUVZLG1FQUE2QixHQUExQyxVQUEyQyxpQ0FBdUU7Ozs7Z0JBQ2hILHNCQUFPLElBQUksT0FBTyxDQUFDLFVBQUMsT0FBaUIsRUFBRSxNQUFnQjt3QkFDckQsT0FBTyxLQUFJLENBQUMsU0FBUyxDQUFDLDZCQUE2QixDQUFDLGlDQUFpQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQUMsTUFBK0I7NEJBQzFILElBQUksTUFBTSxDQUFDLGdCQUFnQixJQUFJLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUU7Z0NBQzlELE9BQU8sQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7NkJBQy9CO2lDQUFNO2dDQUNMLE1BQU0sQ0FBQyxNQUFNLENBQUMsMEJBQTBCLENBQUMsQ0FBQzs2QkFDM0M7d0JBQ0gsQ0FBQyxDQUFDLENBQUM7b0JBQ0wsQ0FBQyxDQUFDLEVBQUM7OztLQUNKO0lBRVksNERBQXNCLEdBQW5DLFVBQW9DLFdBQW1CLEVBQUUsT0FBZTs7OztnQkFDdEUsc0JBQU8sSUFBSSxPQUFPLENBQUMsVUFBQyxPQUFpQixFQUFFLE1BQWdCO3dCQUNyRCxPQUFPLEtBQUksQ0FBQyxTQUFTLENBQUMsc0JBQXNCLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFDLE1BQStCOzRCQUN0RyxJQUFJLE1BQU0sQ0FBQyxnQkFBZ0IsSUFBSSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFO2dDQUM5RCxJQUFNLFlBQVksR0FBdUMsSUFBSSxrQ0FBa0MsRUFBRSxDQUFDO2dDQUNsRyxZQUFZLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDO2dDQUM3QyxZQUFZLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDO2dDQUNqRCxZQUFZLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDO2dDQUNqRCxZQUFZLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDO2dDQUN2RCxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7NkJBQ3ZCO2lDQUFNO2dDQUNMLE1BQU0sQ0FBQyxNQUFNLENBQUMsMEJBQTBCLENBQUMsQ0FBQzs2QkFDM0M7d0JBQ0gsQ0FBQyxDQUFDLENBQUM7b0JBQ0wsQ0FBQyxDQUFDLEVBQUM7OztLQUNKO0lBRVksNERBQXNCLEdBQW5DLFVBQW9DLGVBQWdDOzs7O2dCQUNsRSxzQkFBTyxJQUFJLE9BQU8sQ0FBQyxVQUFDLE9BQWlCLEVBQUUsTUFBZ0I7d0JBQ3JELE9BQU8sS0FBSSxDQUFDLFNBQVMsQ0FBQyxzQkFBc0IsQ0FBQyxlQUFlLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBQyxNQUErQjs0QkFDakcsSUFBSSxNQUFNLENBQUMsZ0JBQWdCLElBQUksTUFBTSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRTtnQ0FDOUQsT0FBTyxDQUF1QixNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7NkJBQ3JEO2lDQUFNO2dDQUNMLE1BQU0sQ0FBQyxNQUFNLENBQUMsMEJBQTBCLENBQUMsQ0FBQzs2QkFDM0M7d0JBQ0gsQ0FBQyxDQUFDLENBQUM7b0JBQ0wsQ0FBQyxDQUFDLEVBQUM7OztLQUNKO0lBRVksd0RBQWtCLEdBQS9CLFVBQWdDLElBQVksRUFBRSxXQUFnQyxFQUFFLFNBQWlCLEVBQUUsTUFBYyxFQUFFLFdBQW1CLEVBQUUsY0FBc0IsRUFBRSxRQUFpQjs7OztnQkFFL0ssc0JBQU8sSUFBSSxPQUFPLENBQUMsVUFBQyxPQUFpQixFQUFFLE1BQWdCO3dCQUNyRCxPQUFPLEtBQUksQ0FBQyxTQUFTLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQUMsTUFBK0I7NEJBQ3pKLElBQUksTUFBTSxDQUFDLGdCQUFnQixJQUFJLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUU7Z0NBQzlELE9BQU8sQ0FBQyxLQUFJLENBQUMsVUFBVSxDQUFDLHNCQUFzQixDQUFDLHFCQUFxQixFQUFFLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDOzZCQUM3RjtpQ0FBTTtnQ0FDTCxNQUFNLENBQUMsTUFBTSxDQUFDLDBCQUEwQixDQUFDLENBQUM7NkJBQzNDO3dCQUNILENBQUMsQ0FBQyxDQUFDO29CQUNMLENBQUMsQ0FBQyxFQUFDOzs7S0FDSjtJQUVZLDhEQUF3QixHQUFyQyxVQUFzQyxRQUFnQjs7OztnQkFDcEQsc0JBQU8sSUFBSSxPQUFPLENBQUMsVUFBQyxPQUFpQixFQUFFLE1BQWdCO3dCQUNyRCxPQUFPLEtBQUksQ0FBQyxTQUFTLENBQUMsd0JBQXdCLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQUMsTUFBK0I7NEJBQzVGLElBQUksTUFBTSxDQUFDLGdCQUFnQixJQUFJLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUU7Z0NBQzlELE9BQU8sQ0FBQyxLQUFJLENBQUMsVUFBVSxDQUFDLHNCQUFzQixDQUFDLHVCQUF1QixFQUFFLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDOzZCQUMvRjtpQ0FBTTtnQ0FDTCxNQUFNLENBQUMsTUFBTSxDQUFDLDBCQUEwQixDQUFDLENBQUM7NkJBQzNDO3dCQUNILENBQUMsQ0FBQyxDQUFDO29CQUNMLENBQUMsQ0FBQyxFQUFDOzs7S0FFSjtJQUVZLDJEQUFxQixHQUFsQyxVQUFtQyxJQUFZLEVBQUUsUUFBZ0I7Ozs7Z0JBQy9ELHNCQUFPLElBQUksT0FBTyxDQUFDLFVBQUMsT0FBaUIsRUFBRSxNQUFnQjt3QkFDckQsT0FBTyxLQUFJLENBQUMsU0FBUyxDQUFDLHFCQUFxQixDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBQyxNQUErQjs0QkFDL0YsSUFBSSxNQUFNLENBQUMsZ0JBQWdCLElBQUksTUFBTSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRTtnQ0FDOUQsT0FBTyxDQUFDLEtBQUksQ0FBQyxVQUFVLENBQUMsc0JBQXNCLENBQUMsdUJBQXVCLEVBQUUsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7NkJBQy9GO2lDQUFNO2dDQUNMLE1BQU0sQ0FBQyxNQUFNLENBQUMsMEJBQTBCLENBQUMsQ0FBQzs2QkFDM0M7d0JBQ0gsQ0FBQyxDQUFDLENBQUM7b0JBQ0wsQ0FBQyxDQUFDLEVBQUM7OztLQUNKO0lBR1ksbUVBQTZCLEdBQTFDLFVBQTJDLElBQVksRUFBRSxRQUFnQixFQUFFLFdBQW1COzs7O2dCQUM1RixzQkFBTyxJQUFJLE9BQU8sQ0FBQyxVQUFDLE9BQWlCLEVBQUUsTUFBZ0I7d0JBQ3JELE9BQU8sS0FBSSxDQUFDLFNBQVMsQ0FBQyw2QkFBNkIsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFDLE1BQStCOzRCQUNwSCxJQUFJLE1BQU0sQ0FBQyxnQkFBZ0IsSUFBSSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFO2dDQUM5RCxPQUFPLENBQUMsS0FBSSxDQUFDLFVBQVUsQ0FBQyxzQkFBc0IsQ0FBQyx1QkFBdUIsRUFBRSxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQzs2QkFDL0Y7aUNBQU07Z0NBQ0wsTUFBTSxDQUFDLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxDQUFDOzZCQUMzQzt3QkFDSCxDQUFDLENBQUMsQ0FBQztvQkFDTCxDQUFDLENBQUMsRUFBQzs7O0tBQ0o7SUFFWSw4REFBd0IsR0FBckMsVUFBc0MsaUJBQWtEOzs7O2dCQUN0RixzQkFBTyxJQUFJLE9BQU8sQ0FBQyxVQUFDLE9BQWlCLEVBQUUsTUFBZ0I7d0JBQ3JELE9BQU8sS0FBSSxDQUFDLFNBQVMsQ0FBQyx3QkFBd0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFDLE1BQStCOzRCQUNyRyxJQUFJLE1BQU0sQ0FBQyxnQkFBZ0IsSUFBSSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFO2dDQUM5RCxPQUFPLENBQUMsS0FBSSxDQUFDLFVBQVUsQ0FBQyxzQkFBc0IsQ0FBQyx1QkFBdUIsRUFBRSxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQzs2QkFDL0Y7aUNBQU07Z0NBQ0wsTUFBTSxDQUFDLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxDQUFDOzZCQUMzQzt3QkFDSCxDQUFDLENBQUMsQ0FBQztvQkFDTCxDQUFDLENBQUMsRUFBQzs7O0tBQ0o7SUFFWSx3REFBa0IsR0FBL0IsVUFBZ0MsWUFBb0I7Ozs7Z0JBQ2xELHNCQUFPLElBQUksT0FBTyxDQUFDLFVBQUMsT0FBaUIsRUFBRSxNQUFnQjt3QkFDckQsT0FBTyxLQUFJLENBQUMsU0FBUyxDQUFDLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFDLE1BQStCOzRCQUMxRixJQUFJLE1BQU0sQ0FBQyxnQkFBZ0IsSUFBSSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFO2dDQUM5RCxPQUFPLENBQWtCLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQzs2QkFDaEQ7aUNBQU07Z0NBQ0wsTUFBTSxDQUFDLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxDQUFDOzZCQUMzQzt3QkFDSCxDQUFDLENBQUMsQ0FBQztvQkFDTCxDQUFDLENBQUMsRUFBQzs7O0tBRUo7SUFFWSx3REFBa0IsR0FBL0IsVUFBZ0MsWUFBb0I7Ozs7Z0JBQ2xELHNCQUFPLElBQUksT0FBTyxDQUFDLFVBQUMsT0FBaUIsRUFBRSxNQUFnQjt3QkFDckQsT0FBTyxLQUFJLENBQUMsU0FBUyxDQUFDLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFDLE1BQStCOzRCQUMxRixJQUFJLE1BQU0sQ0FBQyxnQkFBZ0IsSUFBSSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFO2dDQUM5RCxPQUFPLENBQWtCLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQzs2QkFDaEQ7aUNBQU07Z0NBQ0wsTUFBTSxDQUFDLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxDQUFDOzZCQUMzQzt3QkFDSCxDQUFDLENBQUMsQ0FBQztvQkFDTCxDQUFDLENBQUMsRUFBQzs7O0tBQ0o7SUFFWSxxRUFBK0IsR0FBNUMsVUFBNkMsTUFBYzs7OztnQkFDekQsc0JBQU8sSUFBSSxPQUFPLENBQUMsVUFBQyxPQUFpQixFQUFFLE1BQWdCO3dCQUNyRCxPQUFPLEtBQUksQ0FBQyxTQUFTLENBQUMsK0JBQStCLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQUMsTUFBK0I7NEJBQ2pHLElBQUksTUFBTSxDQUFDLGdCQUFnQixJQUFJLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUU7Z0NBQzlELE9BQU8sQ0FBZ0MsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDOzZCQUM5RDtpQ0FBTTtnQ0FDTCxNQUFNLENBQUMsTUFBTSxDQUFDLDBCQUEwQixDQUFDLENBQUM7NkJBQzNDO3dCQUNILENBQUMsQ0FBQyxDQUFDO29CQUNMLENBQUMsQ0FBQyxFQUFDOzs7S0FDSjtJQUVZLHVEQUFpQixHQUE5QixVQUErQixJQUFZLEVBQUUsUUFBZ0IsRUFBRSxRQUFnQjs7OztnQkFDN0Usc0JBQU8sSUFBSSxPQUFPLENBQUMsVUFBQyxPQUFpQixFQUFFLE1BQWdCO3dCQUNyRCxPQUFPLEtBQUksQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBQyxNQUErQjs0QkFDckcsSUFBSSxNQUFNLENBQUMsZ0JBQWdCLElBQUksTUFBTSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRTtnQ0FDOUQsT0FBTyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQzs2QkFDMUM7aUNBQU07Z0NBQ0wsTUFBTSxDQUFDLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxDQUFDOzZCQUMzQzt3QkFDSCxDQUFDLENBQUMsQ0FBQztvQkFDTCxDQUFDLENBQUMsRUFBQzs7O0tBQ0o7SUFsYVUsMkJBQTJCO1FBRHZDLFVBQVUsRUFBRTtPQUNBLDJCQUEyQixDQW1hdkM7SUFBRCxrQ0FBQztDQUFBLEFBbmFELElBbWFDO1NBbmFZLDJCQUEyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7TWFya2V0aW5nfSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL21hcmtldGluZy5ib1wiO1xuaW1wb3J0IHtDdXN0b21lckZ1bGxPYmplY3R9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvY3VzdG9tZXItZnVsbC1vYmplY3QuYm9cIjtcbmltcG9ydCB7VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2V9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvdHJhbnNhY3Rpb24taW5mby1yZXNwb25zZS5ib1wiO1xuaW1wb3J0IHtUcmFuc2FjdGlvbktpbmR9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvZW51bS90cmFuc2FjdGlvbi1raW5kLmVudW1cIjtcbmltcG9ydCB7Q291bnRyeX0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9jb3VudHJ5LmJvXCI7XG5pbXBvcnQge1ByaXZhY3lTZXR0aW5nfSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3ByaXZhY3ktc2V0dGluZy5ib1wiO1xuaW1wb3J0IHtSZWxhdGlvblByaXZhY3lTZXR0aW5nfSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3JlbGF0aW9uLXByaXZhY3ktc2V0dGluZy5ib1wiO1xuaW1wb3J0IHtTZXF1ZW5jZU5hbWV9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvZW51bS9zZXF1ZW5jZS1uYW1lLmVudW1cIjtcbmltcG9ydCB7RGVsaXZlcnlNZXRob2R9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvZGVsaXZlcnktbWV0aG9kLmJvXCI7XG5pbXBvcnQge0RlbGl2ZXJ5T3B0aW9ufSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2RlbGl2ZXJ5LW9wdGlvbi5ib1wiO1xuaW1wb3J0IHtTZXRUcmFuc2FjdGlvbkRlbGl2ZXJ5T3B0aW9uc1JlcXVlc3R9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvc2V0LXRyYW5zYWN0aW9uLWRlbGl2ZXJ5LW9wdGlvbnMtcmVxdWVzdC5ib1wiO1xuaW1wb3J0IHtHZXRQb3N0YWxDb2RlUmV0cmlldmFsT3V0cHV0UGFyYW1zfSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2dldC1wb3N0YWwtY29kZS1yZXRyaWV2YWwtb3V0cHV0LXBhcmFtc1wiO1xuaW1wb3J0IHtSZWxhdGlvbkxpc3RPYmplY3R9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvcmVsYXRpb24tbGlzdC1vYmplY3QuYm9cIjtcbmltcG9ydCB7UmVsYXRpb25SZXF1ZXN0fSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3JlbGF0aW9uLXJlcXVlc3RcIjtcbmltcG9ydCB7VHJhbnNhY3Rpb25MaW5lVHlwZX0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9lbnVtL3RyYW5zYWN0aW9uLWxpbmUtdHlwZS5lbnVtXCI7XG5pbXBvcnQge1Jlc29sdmVQZW5kaW5nTGluZVJlYXNvblJlcXVlc3R9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvcmVzb2x2ZS1wZW5kaW5nLXJlYXNvbi1yZXF1ZXN0LmJvXCI7XG5pbXBvcnQge0NvRG9tYWluVmFsdWV9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvY28tZG9tYWluLXZhbHVlLmJvXCI7XG5pbXBvcnQge1RyYW5zYWN0aW9uQXJ0aWNsZVdhcmVob3VzZX0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC90cmFuc2FjdGlvbi1hcnRpY2xlLXdhcmVob3VzZS5ib1wiO1xuaW1wb3J0IHtBcnRpY2xlRnVsbE9iamVjdH0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9hcnRpY2xlLWZ1bGwtb2JqZWN0XCI7XG5pbXBvcnQge0xpbmVPcGVyYXRpb25SZXNwb25zZX0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9saW5lLW9wZXJhdGlvbi1yZXNwb25zZS5ib1wiO1xuaW1wb3J0IHtUcmFuc2FjdGlvblJlc3BvbnNlQmFzZX0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC90cmFuc2FjdGlvbi1yZXNwb25zZS1iYXNlLmJvXCI7XG5pbXBvcnQge1RyYW5zYWN0aW9ufSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL3RyYW5zYWN0aW9uXCI7XG5pbXBvcnQge0RhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhfSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2RhdGEtc2VydmljZS1yZXNwb25zZS1kYXRhXCI7XG5pbXBvcnQge0J1c2luZXNzT2JqZWN0RmFjdG9yeX0gZnJvbSBcIi4uLy4uL2ZhY3RvcnkvYnVzaW5lc3Mtb2JqZWN0LWZhY3RvcnlcIjtcbmltcG9ydCB7T3B0aW9uc30gZnJvbSBcIkBjb2xpam5pdC9pb25lY29ubmVjdG9yL2J1aWxkL21vZGVsL29wdGlvbnNcIjtcbmltcG9ydCB7SW1hZ2VVdGlsc30gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC91dGlscy9pbWFnZS11dGlsc1wiO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgSU9uZUNvbm5lY3RvckFkYXB0ZXJTZXJ2aWNlIHtcbiAgcHVibGljIG9wdGlvbnM6IGFueTtcblxuICBwdWJsaWMgY29ubmVjdG9yOiBUcmFuc2FjdGlvbjtcblxuICBwcml2YXRlIF9ib0ZhY3Rvcnk6IEJ1c2luZXNzT2JqZWN0RmFjdG9yeSA9IG5ldyBCdXNpbmVzc09iamVjdEZhY3RvcnkoKTtcbiAgcHJpdmF0ZSBfY291bnRyeUxpc3Q6IENvdW50cnlbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKCkge31cblxuICBwdWJsaWMgYXN5bmMgY29ubmVjdChvcHRpb25zOiBPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB0aGlzLmNvbm5lY3RvciA9IG5ldyBUcmFuc2FjdGlvbihvcHRpb25zKTtcbiAgICB0aGlzLm9wdGlvbnMuc2Vzc2lvbiA9IHRoaXMuY29ubmVjdG9yLnNlc3Npb247XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0QXJ0aWNsZUZ1bGxPYmplY3QoZ29vZElkOiBudW1iZXIpOiBQcm9taXNlPEFydGljbGVGdWxsT2JqZWN0PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlOiBGdW5jdGlvbiwgcmVqZWN0OiBGdW5jdGlvbikgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmdldEFydGljbGVGdWxsT2JqZWN0KGdvb2RJZCkudGhlbigocmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSkgPT4ge1xuICAgICAgICBpZiAocmVzdWx0LnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzdWx0LnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICAgIGlmIChyZXN1bHQucmVzdWx0T2JqZWN0KSB7XG4gICAgICAgICAgICByZXNvbHZlKHRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKEFydGljbGVGdWxsT2JqZWN0LCByZXN1bHQucmVzdWx0T2JqZWN0KSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVqZWN0KHJlc3VsdC52YWxpZGF0aW9uTWVzc2FnZXNBc1N0cmluZyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldEdvb2RJZEZyb21BcnRpY2xlTnIoYXJ0aWNsZU5yOiBzdHJpbmcpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogRnVuY3Rpb24sIHJlamVjdDogRnVuY3Rpb24pID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5nZXRHb29kSWRGcm9tQXJ0aWNsZU5yKGFydGljbGVOcikudGhlbigocmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSkgPT4ge1xuICAgICAgICBpZiAocmVzdWx0LnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzdWx0LnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICAgIHJlc29sdmUocmVzdWx0LnJlc3VsdE9iamVjdCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVqZWN0KHJlc3VsdC52YWxpZGF0aW9uTWVzc2FnZXNBc1N0cmluZyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldFNpbmdsZUltYWdlKG5vZGVJZDogbnVtYmVyIHwgc3RyaW5nLCBwdWJsaWNhdGlvbjogbnVtYmVyLCBpbmNsdWRlTWltZXR5cGU6IGJvb2xlYW4sIHRodW1iOiBib29sZWFuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9uKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuZ2V0U2luZ2xlSW1hZ2Uobm9kZUlkLCBwdWJsaWNhdGlvbiwgaW5jbHVkZU1pbWV0eXBlLCB0aHVtYikudGhlbigocmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSkgPT4ge1xuICAgICAgICBpZiAocmVzdWx0LnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzdWx0LnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICAgIGlmIChyZXN1bHQucmVzdWx0T2JqZWN0LmZpbGVQYXRoICE9PSBudWxsICYmIHJlc3VsdC5yZXN1bHRPYmplY3QuZmlsZVBhdGggIT09IFwiXCIpIHtcbiAgICAgICAgICAgIHJldHVybiByZXNvbHZlKEltYWdlVXRpbHMuZ2V0Rml4ZWRJbWFnZUZpbGVwYXRoVXJsKHJlc3VsdC5yZXN1bHRPYmplY3QuZmlsZVBhdGgpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGluY2x1ZGVNaW1ldHlwZSkge1xuICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShJbWFnZVV0aWxzLmdldERvY0JvZHlXaXRoTWltZVR5cGVEZWZpbml0aW9uKHJlc3VsdC5yZXN1bHRPYmplY3QuZmlsZU5hbWUsXG4gICAgICAgICAgICAgICAgdGh1bWIgPyByZXN1bHQucmVzdWx0T2JqZWN0LnRodW1ibmFpbEJvZHkgOiByZXN1bHQucmVzdWx0T2JqZWN0LmRvY3VtZW50Qm9keSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUodGh1bWIgPyByZXN1bHQucmVzdWx0T2JqZWN0LnRodW1ibmFpbEJvZHkgOiByZXN1bHQucmVzdWx0T2JqZWN0LmRvY3VtZW50Qm9keSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlamVjdChyZXN1bHQudmFsaWRhdGlvbk1lc3NhZ2VzQXNTdHJpbmcpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXREb2N1bWVudENvbnRlbnQoaWQ6IG51bWJlciwgdGh1bWJuYWlsOiBib29sZWFuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9uKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuZ2V0RG9jdW1lbnRDb250ZW50KGlkLCB0aHVtYm5haWwpLnRoZW4oKHJlc3VsdDogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEpID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgICByZXNvbHZlKHJlc3VsdC5yZXN1bHRPYmplY3QuZG9jdW1lbnRDb250ZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWplY3QocmVzdWx0LnZhbGlkYXRpb25NZXNzYWdlc0FzU3RyaW5nKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q291bnRyaWVzKCk6IFByb21pc2U8Q291bnRyeVtdPiB7XG4gICAgaWYgKHRoaXMuX2NvdW50cnlMaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogRnVuY3Rpb24pID0+IHtcbiAgICAgICAgcmVzb2x2ZSh0aGlzLl9jb3VudHJ5TGlzdCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9uKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuZ2V0Q291bnRyaWVzKCkudGhlbigocmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSkgPT4ge1xuICAgICAgICBpZiAocmVzdWx0LnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzdWx0LnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICAgIHRoaXMuX2NvdW50cnlMaXN0ID0gcmVzdWx0LnJlc3VsdE9iamVjdHM7XG4gICAgICAgICAgcmVzb2x2ZShyZXN1bHQucmVzdWx0T2JqZWN0cyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVqZWN0KHJlc3VsdC52YWxpZGF0aW9uTWVzc2FnZXNBc1N0cmluZyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldENvdW50cnkoY291bnRyeUNvZGU6IHN0cmluZyk6IENvdW50cnkge1xuICAgIHRoaXMuZ2V0Q291bnRyaWVzKCk7XG4gICAgcmV0dXJuIHRoaXMuX2NvdW50cnlMaXN0LmZpbmQoY291bnRyeSA9PiBjb3VudHJ5LmNvZGUgPT09IGNvdW50cnlDb2RlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRQcml2YWN5U2V0dGluZ3MoKTogUHJvbWlzZTxQcml2YWN5U2V0dGluZ1tdPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlOiBGdW5jdGlvbiwgcmVqZWN0OiBGdW5jdGlvbikgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmdldFByaXZhY3lTZXR0aW5ncygpLnRoZW4oKHJlc3VsdDogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEpID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgICByZXNvbHZlKDxQcml2YWN5U2V0dGluZ1tdPnJlc3VsdC5yZXN1bHRPYmplY3RzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWplY3QocmVzdWx0LnZhbGlkYXRpb25NZXNzYWdlc0FzU3RyaW5nKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0UmVsYXRpb25Qcml2YWN5U2V0dGluZ3MoKTogUHJvbWlzZTxSZWxhdGlvblByaXZhY3lTZXR0aW5nW10+IHtcbiAgICBjb25zdCBwcml2YWN5U2V0dGluZ3M6IFJlbGF0aW9uUHJpdmFjeVNldHRpbmdbXSA9IFtdO1xuXG4gICAgY29uc3QgYmFzZVByaXZhY3lTZXR0aW5nczogUHJpdmFjeVNldHRpbmdbXSA9IGF3YWl0IHRoaXMuZ2V0UHJpdmFjeVNldHRpbmdzKCk7XG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gMCwgbGVuOiBudW1iZXIgPSBiYXNlUHJpdmFjeVNldHRpbmdzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBjb25zdCBiYXNlUHJpdlNldHRpbmc6IFByaXZhY3lTZXR0aW5nID0gYmFzZVByaXZhY3lTZXR0aW5nc1tpXTtcbiAgICAgIGNvbnN0IG5ld1JlbFByaXZTZXQ6IFJlbGF0aW9uUHJpdmFjeVNldHRpbmcgPSA8UmVsYXRpb25Qcml2YWN5U2V0dGluZz48dW5rbm93bj50aGlzLl9ib0ZhY3RvcnkuaW5zdGFudGlhdGVOZXdCbyhSZWxhdGlvblByaXZhY3lTZXR0aW5nKTtcbiAgICAgIG5ld1JlbFByaXZTZXQuYXBwbHlCYXNlUHJpdmFjeVNldHRpbmdWYWx1ZXMoYmFzZVByaXZTZXR0aW5nKTtcbiAgICAgIHByaXZhY3lTZXR0aW5ncy5wdXNoKG5ld1JlbFByaXZTZXQpO1xuICAgIH1cbiAgICByZXR1cm4gcHJpdmFjeVNldHRpbmdzO1xuICB9XG5cbiAgcHVibGljIGdldE1hcmtldGluZ0NvZGVzKCk6IFByb21pc2U8TWFya2V0aW5nW10+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9uKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuZ2V0TWFya2V0aW5nQ29kZXMoKS50aGVuKChyZXN1bHQ6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhKSA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQudmFsaWRhdGlvblJlc3VsdCAmJiByZXN1bHQudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgICAgcmVzb2x2ZSg8Q29Eb21haW5WYWx1ZVtdPnJlc3VsdC5yZXN1bHRPYmplY3RzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWplY3QocmVzdWx0LnZhbGlkYXRpb25NZXNzYWdlc0FzU3RyaW5nKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgY3JlYXRlVHJhbnNhY3Rpb24oa2luZDogVHJhbnNhY3Rpb25LaW5kLCBicmFuY2hOcjogc3RyaW5nKTogUHJvbWlzZTxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogRnVuY3Rpb24sIHJlamVjdDogRnVuY3Rpb24pID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5jcmVhdGVUcmFuc2FjdGlvbihraW5kLCBicmFuY2hOcikudGhlbigocmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSkgPT4ge1xuICAgICAgICBpZiAocmVzdWx0LnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzdWx0LnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICAgIHJlc29sdmUodGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UsIHJlc3VsdC5yZXN1bHRPYmplY3QpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWplY3QocmVzdWx0LnZhbGlkYXRpb25NZXNzYWdlc0FzU3RyaW5nKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0VHJhbnNhY3Rpb25CeU5yQW5kS2luZChraW5kOiBUcmFuc2FjdGlvbktpbmQsIHRyYW5zYWN0aW9uTm86IG51bWJlcik6IFByb21pc2U8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9uKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuZ2V0VHJhbnNhY3Rpb25CeU5yQW5kS2luZChraW5kLCB0cmFuc2FjdGlvbk5vKS50aGVuKChyZXN1bHQ6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhKSA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQudmFsaWRhdGlvblJlc3VsdCAmJiByZXN1bHQudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgICAgcmVzb2x2ZSh0aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShUcmFuc2FjdGlvbkluZm9SZXNwb25zZSwgcmVzdWx0LnJlc3VsdE9iamVjdCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlamVjdChyZXN1bHQudmFsaWRhdGlvbk1lc3NhZ2VzQXNTdHJpbmcpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzYXZlVHJhbnNhY3Rpb24odXVpZDogc3RyaW5nKTogUHJvbWlzZTxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogRnVuY3Rpb24sIHJlamVjdDogRnVuY3Rpb24pID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5zYXZlVHJhbnNhY3Rpb24odXVpZCkudGhlbigocmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSkgPT4ge1xuICAgICAgICBpZiAocmVzdWx0LnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzdWx0LnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICAgIHJlc29sdmUodGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UsIHJlc3VsdC5yZXN1bHRPYmplY3QpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWplY3QocmVzdWx0LnZhbGlkYXRpb25NZXNzYWdlc0FzU3RyaW5nKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q3VzdG9tZXJGdWxsT2JqZWN0KHJlbGF0aW9uTm86IG51bWJlcik6IFByb21pc2U8Q3VzdG9tZXJGdWxsT2JqZWN0PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlOiBGdW5jdGlvbiwgcmVqZWN0OiBGdW5jdGlvbikgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmdldEN1c3RvbWVyRnVsbE9iamVjdChyZWxhdGlvbk5vKS50aGVuKChyZXN1bHQ6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhKSA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQudmFsaWRhdGlvblJlc3VsdCAmJiByZXN1bHQudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgICAgcmVzb2x2ZSh0aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShDdXN0b21lckZ1bGxPYmplY3QsIHJlc3VsdC5yZXN1bHRPYmplY3QpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWplY3QocmVzdWx0LnZhbGlkYXRpb25NZXNzYWdlc0FzU3RyaW5nKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0UmVsYXRpb25OdW1iZXIocmVsYXRpb25JZDogbnVtYmVyKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9uKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuZ2V0UmVsYXRpb25OdW1iZXIocmVsYXRpb25JZCkudGhlbigocmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSkgPT4ge1xuICAgICAgICBpZiAocmVzdWx0LnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzdWx0LnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICAgIHJlc29sdmUocmVzdWx0LnJlc3VsdE9iamVjdCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVqZWN0KHJlc3VsdC52YWxpZGF0aW9uTWVzc2FnZXNBc1N0cmluZyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFNlcXVlbmNlVmFsdWUoc2VxdWVuY2VOYW1lOiBTZXF1ZW5jZU5hbWUpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogRnVuY3Rpb24sIHJlamVjdDogRnVuY3Rpb24pID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5nZXRTZXF1ZW5jZVZhbHVlKHNlcXVlbmNlTmFtZSkudGhlbigocmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSkgPT4ge1xuICAgICAgICBpZiAocmVzdWx0LnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzdWx0LnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICAgIHJlc29sdmUocmVzdWx0LnJlc3VsdE9iamVjdCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVqZWN0KHJlc3VsdC52YWxpZGF0aW9uTWVzc2FnZXNBc1N0cmluZyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGluc2VydEN1c3RvbWVyKHJlbGF0aW9uOiBDdXN0b21lckZ1bGxPYmplY3QpOiBQcm9taXNlPEN1c3RvbWVyRnVsbE9iamVjdD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogRnVuY3Rpb24sIHJlamVjdDogRnVuY3Rpb24pID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5pbnNlcnRDdXN0b21lcihyZWxhdGlvbikudGhlbigocmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSkgPT4ge1xuICAgICAgICBpZiAocmVzdWx0LnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzdWx0LnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICAgIHJlc29sdmUodGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoQ3VzdG9tZXJGdWxsT2JqZWN0LCByZXN1bHQucmVzdWx0T2JqZWN0KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVqZWN0KHJlc3VsdC52YWxpZGF0aW9uTWVzc2FnZXNBc1N0cmluZyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZUN1c3RvbWVyKHJlbGF0aW9uOiBDdXN0b21lckZ1bGxPYmplY3QpOiBQcm9taXNlPEN1c3RvbWVyRnVsbE9iamVjdD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogRnVuY3Rpb24sIHJlamVjdDogRnVuY3Rpb24pID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci51cGRhdGVDdXN0b21lcihyZWxhdGlvbikudGhlbigocmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSkgPT4ge1xuICAgICAgICBpZiAocmVzdWx0LnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzdWx0LnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICAgIHJlc29sdmUodGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoQ3VzdG9tZXJGdWxsT2JqZWN0LCByZXN1bHQucmVzdWx0T2JqZWN0KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVqZWN0KHJlc3VsdC52YWxpZGF0aW9uTWVzc2FnZXNBc1N0cmluZyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldERlbGl2ZXJ5TWV0aG9kcygpOiBQcm9taXNlPERlbGl2ZXJ5TWV0aG9kW10+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9uKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuZ2V0RGVsaXZlcnlNZXRob2RzKCkudGhlbigocmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSkgPT4ge1xuICAgICAgICBpZiAocmVzdWx0LnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzdWx0LnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICAgIHJlc29sdmUoPERlbGl2ZXJ5TWV0aG9kW10+cmVzdWx0LnJlc3VsdE9iamVjdHMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlamVjdChyZXN1bHQudmFsaWRhdGlvbk1lc3NhZ2VzQXNTdHJpbmcpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXREZWxpdmVyeU9wdGlvbnMoKTogUHJvbWlzZTxEZWxpdmVyeU9wdGlvbltdPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlOiBGdW5jdGlvbiwgcmVqZWN0OiBGdW5jdGlvbikgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmdldERlbGl2ZXJ5T3B0aW9ucygpLnRoZW4oKHJlc3VsdDogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEpID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgICByZXNvbHZlKDxEZWxpdmVyeU1ldGhvZFtdPnJlc3VsdC5yZXN1bHRPYmplY3RzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWplY3QocmVzdWx0LnZhbGlkYXRpb25NZXNzYWdlc0FzU3RyaW5nKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgYWRkUmVsYXRpb25Ub1RyYW5zYWN0aW9uKHV1aWQ6IHN0cmluZywgcmVsYXRpb25JZDogbnVtYmVyKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlOiBGdW5jdGlvbiwgcmVqZWN0OiBGdW5jdGlvbikgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmFkZFJlbGF0aW9uVG9UcmFuc2FjdGlvbih1dWlkLCByZWxhdGlvbklkKS50aGVuKChyZXN1bHQ6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhKSA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQudmFsaWRhdGlvblJlc3VsdCAmJiByZXN1bHQudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgICAgcmVzb2x2ZShyZXN1bHQudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWplY3QocmVzdWx0LnZhbGlkYXRpb25NZXNzYWdlc0FzU3RyaW5nKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgc2V0VHJhbnNhY3Rpb25EZWxpdmVyeU9wdGlvbnModHJhbnNhY3Rpb25EZWxpdmVyeU9wdGlvbnNSZXF1ZXN0OiBTZXRUcmFuc2FjdGlvbkRlbGl2ZXJ5T3B0aW9uc1JlcXVlc3QpOiBQcm9taXNlPFRyYW5zYWN0aW9uUmVzcG9uc2VCYXNlPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlOiBGdW5jdGlvbiwgcmVqZWN0OiBGdW5jdGlvbikgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLnNldFRyYW5zYWN0aW9uRGVsaXZlcnlPcHRpb25zKHRyYW5zYWN0aW9uRGVsaXZlcnlPcHRpb25zUmVxdWVzdCkudGhlbigocmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSkgPT4ge1xuICAgICAgICBpZiAocmVzdWx0LnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzdWx0LnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICAgIHJlc29sdmUocmVzdWx0LnJlc3VsdE9iamVjdHMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlamVjdChyZXN1bHQudmFsaWRhdGlvbk1lc3NhZ2VzQXNTdHJpbmcpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRQb3N0YWxDb2RlUmV0cmlldmFsKHBvc3RjYWxDb2RlOiBzdHJpbmcsIGhvdXNlTm86IHN0cmluZyk6IFByb21pc2U8R2V0UG9zdGFsQ29kZVJldHJpZXZhbE91dHB1dFBhcmFtcz4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogRnVuY3Rpb24sIHJlamVjdDogRnVuY3Rpb24pID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5nZXRQb3N0YWxDb2RlUmV0cmlldmFsKHBvc3RjYWxDb2RlLCBob3VzZU5vKS50aGVuKChyZXN1bHQ6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhKSA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQudmFsaWRhdGlvblJlc3VsdCAmJiByZXN1bHQudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgICAgY29uc3Qgb3V0cHV0UGFyYW1zOiBHZXRQb3N0YWxDb2RlUmV0cmlldmFsT3V0cHV0UGFyYW1zID0gbmV3IEdldFBvc3RhbENvZGVSZXRyaWV2YWxPdXRwdXRQYXJhbXMoKTtcbiAgICAgICAgICBvdXRwdXRQYXJhbXMuY2l0eSA9IHJlc3VsdC5yZXN1bHRPYmplY3QuY2l0eTtcbiAgICAgICAgICBvdXRwdXRQYXJhbXMuc3RyZWV0ID0gcmVzdWx0LnJlc3VsdE9iamVjdC5zdHJlZXQ7XG4gICAgICAgICAgb3V0cHV0UGFyYW1zLnN0YXR1cyA9IHJlc3VsdC5yZXN1bHRPYmplY3Quc3RhdHVzO1xuICAgICAgICAgIG91dHB1dFBhcmFtcy5uZXROdW1iZXIgPSByZXN1bHQucmVzdWx0T2JqZWN0Lm5ldE51bWJlcjtcbiAgICAgICAgICByZXNvbHZlKG91dHB1dFBhcmFtcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVqZWN0KHJlc3VsdC52YWxpZGF0aW9uTWVzc2FnZXNBc1N0cmluZyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFJlbGF0aW9uTGlzdE9iamVjdHMocmVsYXRpb25SZXF1ZXN0OiBSZWxhdGlvblJlcXVlc3QpOiBQcm9taXNlPFJlbGF0aW9uTGlzdE9iamVjdFtdPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlOiBGdW5jdGlvbiwgcmVqZWN0OiBGdW5jdGlvbikgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmdldFJlbGF0aW9uTGlzdE9iamVjdHMocmVsYXRpb25SZXF1ZXN0KS50aGVuKChyZXN1bHQ6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhKSA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQudmFsaWRhdGlvblJlc3VsdCAmJiByZXN1bHQudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgICAgcmVzb2x2ZSg8UmVsYXRpb25MaXN0T2JqZWN0W10+cmVzdWx0LnJlc3VsdE9iamVjdHMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlamVjdChyZXN1bHQudmFsaWRhdGlvbk1lc3NhZ2VzQXNTdHJpbmcpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBhZGRUcmFuc2FjdGlvbkxpbmUodXVpZDogc3RyaW5nLCBhcnRpY2xlTGluZTogVHJhbnNhY3Rpb25MaW5lVHlwZSwgYXJ0aWNsZU5vOiBzdHJpbmcsIGFtb3VudDogbnVtYmVyLCB3YXJlaG91c2VObzogbnVtYmVyLCBjb21taXNzaW9uQ29kZTogc3RyaW5nLCBpc1JldHVybjogYm9vbGVhbik6XG4gICAgUHJvbWlzZTxMaW5lT3BlcmF0aW9uUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9uKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuYWRkVHJhbnNhY3Rpb25MaW5lKHV1aWQsIGFydGljbGVMaW5lLCBhcnRpY2xlTm8sIGFtb3VudCwgd2FyZWhvdXNlTm8sIGNvbW1pc3Npb25Db2RlLCBpc1JldHVybikudGhlbigocmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSkgPT4ge1xuICAgICAgICBpZiAocmVzdWx0LnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzdWx0LnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICAgIHJlc29sdmUodGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoTGluZU9wZXJhdGlvblJlc3BvbnNlLCByZXN1bHQucmVzdWx0T2JqZWN0KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVqZWN0KHJlc3VsdC52YWxpZGF0aW9uTWVzc2FnZXNBc1N0cmluZyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGNhbmNlbEFkZFRyYW5zYWN0aW9uTGluZShsaW5lVXVpZDogc3RyaW5nKTogUHJvbWlzZTxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogRnVuY3Rpb24sIHJlamVjdDogRnVuY3Rpb24pID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5jYW5jZWxBZGRUcmFuc2FjdGlvbkxpbmUobGluZVV1aWQpLnRoZW4oKHJlc3VsdDogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEpID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgICByZXNvbHZlKHRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlLCByZXN1bHQucmVzdWx0T2JqZWN0KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVqZWN0KHJlc3VsdC52YWxpZGF0aW9uTWVzc2FnZXNBc1N0cmluZyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZGVsZXRlVHJhbnNhY3Rpb25MaW5lKHV1aWQ6IHN0cmluZywgbGluZVV1aWQ6IHN0cmluZyk6IFByb21pc2U8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9uKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuZGVsZXRlVHJhbnNhY3Rpb25MaW5lKHV1aWQsIGxpbmVVdWlkKS50aGVuKChyZXN1bHQ6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhKSA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQudmFsaWRhdGlvblJlc3VsdCAmJiByZXN1bHQudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgICAgcmVzb2x2ZSh0aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShUcmFuc2FjdGlvbkluZm9SZXNwb25zZSwgcmVzdWx0LnJlc3VsdE9iamVjdCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlamVjdChyZXN1bHQudmFsaWRhdGlvbk1lc3NhZ2VzQXNTdHJpbmcpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG5cbiAgcHVibGljIGFzeW5jIGNoYW5nZVRyYW5zYWN0aW9uTGluZVF1YW50aXR5KHV1aWQ6IHN0cmluZywgbGluZVV1aWQ6IHN0cmluZywgbmV3UXVhbnRpdHk6IG51bWJlcik6IFByb21pc2U8TGluZU9wZXJhdGlvblJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlOiBGdW5jdGlvbiwgcmVqZWN0OiBGdW5jdGlvbikgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmNoYW5nZVRyYW5zYWN0aW9uTGluZVF1YW50aXR5KHV1aWQsIGxpbmVVdWlkLCBuZXdRdWFudGl0eSkudGhlbigocmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSkgPT4ge1xuICAgICAgICBpZiAocmVzdWx0LnZhbGlkYXRpb25SZXN1bHQgJiYgcmVzdWx0LnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICAgIHJlc29sdmUodGhpcy5fYm9GYWN0b3J5Lm1ha2VXaXRoUmF3QmFja2VuZERhdGEoVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UsIHJlc3VsdC5yZXN1bHRPYmplY3QpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWplY3QocmVzdWx0LnZhbGlkYXRpb25NZXNzYWdlc0FzU3RyaW5nKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcmVzb2x2ZVBlbmRpbmdMaW5lUmVhc29uKHBlbmRpbmdMaW5lVmFsdWVzOiBSZXNvbHZlUGVuZGluZ0xpbmVSZWFzb25SZXF1ZXN0KTogUHJvbWlzZTxMaW5lT3BlcmF0aW9uUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9uKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IucmVzb2x2ZVBlbmRpbmdMaW5lUmVhc29uKHBlbmRpbmdMaW5lVmFsdWVzKS50aGVuKChyZXN1bHQ6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhKSA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQudmFsaWRhdGlvblJlc3VsdCAmJiByZXN1bHQudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgICAgcmVzb2x2ZSh0aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShUcmFuc2FjdGlvbkluZm9SZXNwb25zZSwgcmVzdWx0LnJlc3VsdE9iamVjdCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlamVjdChyZXN1bHQudmFsaWRhdGlvbk1lc3NhZ2VzQXNTdHJpbmcpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRDb21taXNzaW9uQ29kZXMobGFuZ3VhZ2VDb2RlOiBzdHJpbmcpOiBQcm9taXNlPENvRG9tYWluVmFsdWVbXT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogRnVuY3Rpb24sIHJlamVjdDogRnVuY3Rpb24pID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5nZXRDb21taXNzaW9uQ29kZXMobGFuZ3VhZ2VDb2RlKS50aGVuKChyZXN1bHQ6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhKSA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQudmFsaWRhdGlvblJlc3VsdCAmJiByZXN1bHQudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgICAgcmVzb2x2ZSg8Q29Eb21haW5WYWx1ZVtdPnJlc3VsdC5yZXN1bHRPYmplY3RzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWplY3QocmVzdWx0LnZhbGlkYXRpb25NZXNzYWdlc0FzU3RyaW5nKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRJbk91dENvbGxlY3Rpb24obGFuZ3VhZ2VDb2RlOiBzdHJpbmcpOiBQcm9taXNlPENvRG9tYWluVmFsdWVbXT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogRnVuY3Rpb24sIHJlamVjdDogRnVuY3Rpb24pID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5nZXRJbk91dENvbGxlY3Rpb24obGFuZ3VhZ2VDb2RlKS50aGVuKChyZXN1bHQ6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhKSA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQudmFsaWRhdGlvblJlc3VsdCAmJiByZXN1bHQudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgICAgcmVzb2x2ZSg8Q29Eb21haW5WYWx1ZVtdPnJlc3VsdC5yZXN1bHRPYmplY3RzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWplY3QocmVzdWx0LnZhbGlkYXRpb25NZXNzYWdlc0FzU3RyaW5nKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0VHJhbnNhY3Rpb25BcnRpY2xlV2FyZWhvdXNlcyhnb29kSWQ6IG51bWJlcik6IFByb21pc2U8VHJhbnNhY3Rpb25BcnRpY2xlV2FyZWhvdXNlW10+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9uKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuZ2V0VHJhbnNhY3Rpb25BcnRpY2xlV2FyZWhvdXNlcyhnb29kSWQpLnRoZW4oKHJlc3VsdDogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEpID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgICByZXNvbHZlKDxUcmFuc2FjdGlvbkFydGljbGVXYXJlaG91c2VbXT5yZXN1bHQucmVzdWx0T2JqZWN0cyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVqZWN0KHJlc3VsdC52YWxpZGF0aW9uTWVzc2FnZXNBc1N0cmluZyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHNldFJlbGF0aW9uQnlVc2VyKHV1aWQ6IHN0cmluZywgdXNlcm5hbWU6IHN0cmluZywgcGFzc3dvcmQ6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogRnVuY3Rpb24sIHJlamVjdDogRnVuY3Rpb24pID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5zZXRSZWxhdGlvbkJ5VXNlcih1dWlkLCB1c2VybmFtZSwgcGFzc3dvcmQpLnRoZW4oKHJlc3VsdDogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEpID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgICByZXNvbHZlKHJlc3VsdC52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlamVjdChyZXN1bHQudmFsaWRhdGlvbk1lc3NhZ2VzQXNTdHJpbmcpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxufVxuIl19
|