@pmcretail/mapper-library 0.0.28 → 0.0.29
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/pmcretail-mapper-library.umd.js +1052 -5
- package/bundles/pmcretail-mapper-library.umd.js.map +1 -1
- package/bundles/pmcretail-mapper-library.umd.min.js +1 -1
- package/bundles/pmcretail-mapper-library.umd.min.js.map +1 -1
- package/esm2015/lib/WebReturnSalesforceMapper.class.js +479 -0
- package/esm2015/lib/mapper-library.model.js +435 -6
- package/esm2015/pmcretail-mapper-library.js +2 -2
- package/esm2015/public-api.js +2 -1
- package/esm5/lib/WebReturnSalesforceMapper.class.js +621 -0
- package/esm5/lib/mapper-library.model.js +435 -6
- package/esm5/pmcretail-mapper-library.js +2 -2
- package/esm5/public-api.js +2 -1
- package/fesm2015/pmcretail-mapper-library.js +911 -6
- package/fesm2015/pmcretail-mapper-library.js.map +1 -1
- package/fesm5/pmcretail-mapper-library.js +1052 -6
- package/fesm5/pmcretail-mapper-library.js.map +1 -1
- package/lib/WebReturnSalesforceMapper.class.d.ts +25 -0
- package/lib/mapper-library.model.d.ts +209 -10
- package/package.json +1 -1
- package/pmcretail-mapper-library.d.ts +1 -1
- package/pmcretail-mapper-library.metadata.json +1 -1
- package/public-api.d.ts +1 -0
|
@@ -0,0 +1,621 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview added by tsickle
|
|
3
|
+
* Generated from: lib/WebReturnSalesforceMapper.class.ts
|
|
4
|
+
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
|
|
5
|
+
*/
|
|
6
|
+
import { DELIVERY_METHODS, INITIATING_MODULE, PROVIDERS, TRANSACTION_TYPE } from "./mapper-library.model";
|
|
7
|
+
var WebReturnSalesforceMapperBuilderClass = /** @class */ (function () {
|
|
8
|
+
function WebReturnSalesforceMapperBuilderClass(orderDetails) {
|
|
9
|
+
this.webReturnObject = {
|
|
10
|
+
id: '',
|
|
11
|
+
orgCode: "",
|
|
12
|
+
storeId: "",
|
|
13
|
+
storeNodeId: "",
|
|
14
|
+
storeNodeStructure: "",
|
|
15
|
+
deviceId: "",
|
|
16
|
+
terminalId: "",
|
|
17
|
+
initiatingModule: "",
|
|
18
|
+
export: false,
|
|
19
|
+
basket: {},
|
|
20
|
+
basketSummary: {},
|
|
21
|
+
baseCurrency: "",
|
|
22
|
+
customer: {
|
|
23
|
+
id: '',
|
|
24
|
+
email: '',
|
|
25
|
+
firstName: '',
|
|
26
|
+
lastName: '',
|
|
27
|
+
billingAddress: [],
|
|
28
|
+
shippingAddress: [],
|
|
29
|
+
shipmentDetails: [],
|
|
30
|
+
telephone: '',
|
|
31
|
+
postCode: '',
|
|
32
|
+
noCustomerSelected: false
|
|
33
|
+
},
|
|
34
|
+
currentTransactionDetails: (/** @type {?} */ ({}))
|
|
35
|
+
};
|
|
36
|
+
if (orderDetails) {
|
|
37
|
+
this.orderDetails = orderDetails;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* @template THIS
|
|
42
|
+
* @this {THIS}
|
|
43
|
+
* @return {THIS}
|
|
44
|
+
*/
|
|
45
|
+
WebReturnSalesforceMapperBuilderClass.prototype.webReturnCommonMapper = /**
|
|
46
|
+
* @template THIS
|
|
47
|
+
* @this {THIS}
|
|
48
|
+
* @return {THIS}
|
|
49
|
+
*/
|
|
50
|
+
function () {
|
|
51
|
+
console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: webReturnCommonMapper started...");
|
|
52
|
+
(/** @type {?} */ (this)).webReturnObject['type'] = TRANSACTION_TYPE.WEB_RETURNS;
|
|
53
|
+
(/** @type {?} */ (this)).webReturnObject['datetime'] = (/** @type {?} */ (this)).getUTCDateTime((/** @type {?} */ (this)).orderDetails.last_modified);
|
|
54
|
+
(/** @type {?} */ (this)).webReturnObject.baseCurrency = (/** @type {?} */ (this)).orderDetails.currency;
|
|
55
|
+
(/** @type {?} */ (this)).webReturnObject.subsidiaryId = '1';
|
|
56
|
+
(/** @type {?} */ (this)).webReturnObject.export = true;
|
|
57
|
+
(/** @type {?} */ (this)).webReturnObject.initiatingModule = INITIATING_MODULE.EBASKET;
|
|
58
|
+
(/** @type {?} */ (this)).webReturnObject.createdAt = (/** @type {?} */ (this)).getUTCDateTime((/** @type {?} */ (this)).orderDetails.creation_date);
|
|
59
|
+
(/** @type {?} */ (this)).webReturnObject.updatedAt = (/** @type {?} */ (this)).getUTCDateTime((/** @type {?} */ (this)).orderDetails.last_modified);
|
|
60
|
+
(/** @type {?} */ (this)).webReturnObject.transCompletedAt = (/** @type {?} */ (this)).getUTCDateTime((/** @type {?} */ (this)).orderDetails.last_modified);
|
|
61
|
+
(/** @type {?} */ (this)).webReturnObject['externalTransactionId'] = (/** @type {?} */ (this)).orderDetails.order_no;
|
|
62
|
+
console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: webReturnCommonMapper ended...");
|
|
63
|
+
return (/** @type {?} */ (this));
|
|
64
|
+
};
|
|
65
|
+
// export(status, details) {
|
|
66
|
+
// console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: export mapping started...");
|
|
67
|
+
// console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: status:", status);
|
|
68
|
+
// console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: details:", JSON.stringify(details));
|
|
69
|
+
// if (status && details && details.providers && details.providers.length > 0) {
|
|
70
|
+
// details.providers.forEach(
|
|
71
|
+
// providerObj => {
|
|
72
|
+
// if (providerObj.provider && providerObj.provider === PROVIDERS.SALESFORCE) {
|
|
73
|
+
// this.webReturnObject.export = true;
|
|
74
|
+
// } else {
|
|
75
|
+
// this.webReturnObject.export = false;
|
|
76
|
+
// }
|
|
77
|
+
// }
|
|
78
|
+
// );
|
|
79
|
+
// } else {
|
|
80
|
+
// this.webReturnObject.export = false;
|
|
81
|
+
// }
|
|
82
|
+
// console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: export mapping end...")
|
|
83
|
+
// return this;
|
|
84
|
+
// }
|
|
85
|
+
// export(status, details) {
|
|
86
|
+
// console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: export mapping started...");
|
|
87
|
+
// console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: status:", status);
|
|
88
|
+
// console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: details:", JSON.stringify(details));
|
|
89
|
+
// if (status && details && details.providers && details.providers.length > 0) {
|
|
90
|
+
// details.providers.forEach(
|
|
91
|
+
// providerObj => {
|
|
92
|
+
// if (providerObj.provider && providerObj.provider === PROVIDERS.SALESFORCE) {
|
|
93
|
+
// this.webReturnObject.export = true;
|
|
94
|
+
// } else {
|
|
95
|
+
// this.webReturnObject.export = false;
|
|
96
|
+
// }
|
|
97
|
+
// }
|
|
98
|
+
// );
|
|
99
|
+
// } else {
|
|
100
|
+
// this.webReturnObject.export = false;
|
|
101
|
+
// }
|
|
102
|
+
// console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: export mapping end...")
|
|
103
|
+
// return this;
|
|
104
|
+
// }
|
|
105
|
+
/**
|
|
106
|
+
* @return {?}
|
|
107
|
+
*/
|
|
108
|
+
WebReturnSalesforceMapperBuilderClass.prototype.getDeliveryMethod =
|
|
109
|
+
// export(status, details) {
|
|
110
|
+
// console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: export mapping started...");
|
|
111
|
+
// console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: status:", status);
|
|
112
|
+
// console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: details:", JSON.stringify(details));
|
|
113
|
+
// if (status && details && details.providers && details.providers.length > 0) {
|
|
114
|
+
// details.providers.forEach(
|
|
115
|
+
// providerObj => {
|
|
116
|
+
// if (providerObj.provider && providerObj.provider === PROVIDERS.SALESFORCE) {
|
|
117
|
+
// this.webReturnObject.export = true;
|
|
118
|
+
// } else {
|
|
119
|
+
// this.webReturnObject.export = false;
|
|
120
|
+
// }
|
|
121
|
+
// }
|
|
122
|
+
// );
|
|
123
|
+
// } else {
|
|
124
|
+
// this.webReturnObject.export = false;
|
|
125
|
+
// }
|
|
126
|
+
// console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: export mapping end...")
|
|
127
|
+
// return this;
|
|
128
|
+
// }
|
|
129
|
+
/**
|
|
130
|
+
* @return {?}
|
|
131
|
+
*/
|
|
132
|
+
function () {
|
|
133
|
+
if (this.orderDetails.shipments && this.orderDetails.shipments.length > 0) {
|
|
134
|
+
/** @type {?} */
|
|
135
|
+
var shipToStoreShipment = this.orderDetails.shipments.find((/**
|
|
136
|
+
* @param {?} shipment
|
|
137
|
+
* @return {?}
|
|
138
|
+
*/
|
|
139
|
+
function (shipment) { return shipment.c_fromStoreId; }));
|
|
140
|
+
if (shipToStoreShipment)
|
|
141
|
+
return DELIVERY_METHODS.SHIP_TO_STORE;
|
|
142
|
+
else
|
|
143
|
+
return DELIVERY_METHODS.DELIVERY;
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
return '';
|
|
147
|
+
}
|
|
148
|
+
};
|
|
149
|
+
/**
|
|
150
|
+
* @template THIS
|
|
151
|
+
* @this {THIS}
|
|
152
|
+
* @return {THIS}
|
|
153
|
+
*/
|
|
154
|
+
WebReturnSalesforceMapperBuilderClass.prototype.product = /**
|
|
155
|
+
* @template THIS
|
|
156
|
+
* @this {THIS}
|
|
157
|
+
* @return {THIS}
|
|
158
|
+
*/
|
|
159
|
+
function () {
|
|
160
|
+
var _this = this;
|
|
161
|
+
console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: product mapping started...");
|
|
162
|
+
(/** @type {?} */ (this)).webReturnObject.basket['products'] = [];
|
|
163
|
+
if ((/** @type {?} */ (this)).orderDetails.product_items && (/** @type {?} */ (this)).orderDetails.product_items.length > 0) {
|
|
164
|
+
(/** @type {?} */ (this)).orderDetails.product_items.forEach((/**
|
|
165
|
+
* @param {?} product
|
|
166
|
+
* @param {?} index
|
|
167
|
+
* @return {?}
|
|
168
|
+
*/
|
|
169
|
+
function (product, index) {
|
|
170
|
+
/** @type {?} */
|
|
171
|
+
var productObj = {
|
|
172
|
+
description: product.item_text ? product.item_text : '',
|
|
173
|
+
SKU: product.product_id ? product.product_id : '',
|
|
174
|
+
quantity: product.quantity ? product.quantity : 0,
|
|
175
|
+
refundedQuantity: 0,
|
|
176
|
+
price: product.price ? product.price : 0,
|
|
177
|
+
itemLineId: index + 1,
|
|
178
|
+
deliveryMethod: (/** @type {?} */ (_this)).getDeliveryMethod().toString(),
|
|
179
|
+
totalLinePrice: product.price_after_order_discount || product.price_after_item_discount || product.price ? product.price_after_order_discount * product.quantity || product.price_after_item_discount * product.quantity || product.price * product.quantity : 0
|
|
180
|
+
};
|
|
181
|
+
if (product && product.price != 0) {
|
|
182
|
+
(/** @type {?} */ (_this)).webReturnObject.basket['products'].push(productObj);
|
|
183
|
+
}
|
|
184
|
+
}));
|
|
185
|
+
}
|
|
186
|
+
console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: product mapping ended...");
|
|
187
|
+
return (/** @type {?} */ (this));
|
|
188
|
+
};
|
|
189
|
+
/**
|
|
190
|
+
* @template THIS
|
|
191
|
+
* @this {THIS}
|
|
192
|
+
* @return {THIS}
|
|
193
|
+
*/
|
|
194
|
+
WebReturnSalesforceMapperBuilderClass.prototype.linePromotion = /**
|
|
195
|
+
* @template THIS
|
|
196
|
+
* @this {THIS}
|
|
197
|
+
* @return {THIS}
|
|
198
|
+
*/
|
|
199
|
+
function () {
|
|
200
|
+
console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: linePromotion mapping started...");
|
|
201
|
+
(/** @type {?} */ (this)).webReturnObject.basket.linePromotion = (/** @type {?} */ ([]));
|
|
202
|
+
/** @type {?} */
|
|
203
|
+
var linePromotionArray = (/** @type {?} */ ([]));
|
|
204
|
+
if ((/** @type {?} */ (this)).orderDetails.product_items && (/** @type {?} */ (this)).orderDetails.product_items.length > 0) {
|
|
205
|
+
(/** @type {?} */ (this)).orderDetails.product_items.forEach((/**
|
|
206
|
+
* @param {?} product
|
|
207
|
+
* @param {?} index
|
|
208
|
+
* @return {?}
|
|
209
|
+
*/
|
|
210
|
+
function (product, index) {
|
|
211
|
+
product.item_id = (index + 1).toString();
|
|
212
|
+
if (product.price_adjustments && product.price_adjustments.length > 0) {
|
|
213
|
+
product.price_adjustments.forEach((/**
|
|
214
|
+
* @param {?} promotion
|
|
215
|
+
* @return {?}
|
|
216
|
+
*/
|
|
217
|
+
function (promotion) {
|
|
218
|
+
/** @type {?} */
|
|
219
|
+
var linePromotionObj = (/** @type {?} */ ({}));
|
|
220
|
+
/** @type {?} */
|
|
221
|
+
var trigger = (/** @type {?} */ ({}));
|
|
222
|
+
trigger.itemLineId = product.item_id;
|
|
223
|
+
trigger.quantity = product.quantity ? product.quantity : 0;
|
|
224
|
+
linePromotionObj.trigger = (/** @type {?} */ ([]));
|
|
225
|
+
linePromotionObj.trigger.push(trigger);
|
|
226
|
+
linePromotionObj.itemLineId = index + 1;
|
|
227
|
+
linePromotionObj.promotionId = promotion.promotion_id ? promotion.promotion_id : '';
|
|
228
|
+
linePromotionObj.displayText = promotion.item_text ? promotion.item_text : '';
|
|
229
|
+
linePromotionObj.promotionType = promotion.applied_discount && promotion.applied_discount.type ? promotion.applied_discount.type : '';
|
|
230
|
+
linePromotionObj.promotionAmount = promotion.price ? Math.abs(promotion.price) : 0;
|
|
231
|
+
linePromotionObj.name = promotion.item_text ? promotion.item_text : '';
|
|
232
|
+
linePromotionObj.promotionInfo = promotion.item_text ? promotion.item_text : '';
|
|
233
|
+
linePromotionObj.promotionLinePrice = product.price_after_item_discount ? product.price_after_item_discount : 0;
|
|
234
|
+
linePromotionArray.push(linePromotionObj);
|
|
235
|
+
}));
|
|
236
|
+
}
|
|
237
|
+
}));
|
|
238
|
+
}
|
|
239
|
+
(/** @type {?} */ (this)).webReturnObject.basket.linePromotion = linePromotionArray;
|
|
240
|
+
console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: linePromotion mapping ended...");
|
|
241
|
+
return (/** @type {?} */ (this));
|
|
242
|
+
};
|
|
243
|
+
/**
|
|
244
|
+
* @template THIS
|
|
245
|
+
* @this {THIS}
|
|
246
|
+
* @return {THIS}
|
|
247
|
+
*/
|
|
248
|
+
WebReturnSalesforceMapperBuilderClass.prototype.transactionPromotion = /**
|
|
249
|
+
* @template THIS
|
|
250
|
+
* @this {THIS}
|
|
251
|
+
* @return {THIS}
|
|
252
|
+
*/
|
|
253
|
+
function () {
|
|
254
|
+
var _this = this;
|
|
255
|
+
console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: transactionPromotion mapping started...");
|
|
256
|
+
/** @type {?} */
|
|
257
|
+
var transactionPromotionArray = (/** @type {?} */ ([]));
|
|
258
|
+
(/** @type {?} */ (this)).webReturnObject.basket.transactionPromotion = (/** @type {?} */ ([]));
|
|
259
|
+
if ((/** @type {?} */ (this)).orderDetails.order_price_adjustments && (/** @type {?} */ (this)).orderDetails.order_price_adjustments.length > 0) {
|
|
260
|
+
(/** @type {?} */ (this)).orderDetails.order_price_adjustments.forEach((/**
|
|
261
|
+
* @param {?} transactionPromotion
|
|
262
|
+
* @return {?}
|
|
263
|
+
*/
|
|
264
|
+
function (transactionPromotion) {
|
|
265
|
+
/** @type {?} */
|
|
266
|
+
var transactionPromotionObj = (/** @type {?} */ ({}));
|
|
267
|
+
transactionPromotionObj.displayText = transactionPromotion.item_text ? transactionPromotion.item_text : '';
|
|
268
|
+
transactionPromotionObj.name = transactionPromotion.item_text ? transactionPromotion.item_text : '';
|
|
269
|
+
transactionPromotionObj.promotionAmount = transactionPromotion.price ? Math.abs(transactionPromotion.price) : 0;
|
|
270
|
+
transactionPromotionObj.promotionId = transactionPromotion.promotion_id ? transactionPromotion.promotion_id : '';
|
|
271
|
+
transactionPromotionObj.promotionInfo = transactionPromotion.item_text ? transactionPromotion.item_text : '';
|
|
272
|
+
transactionPromotionObj.promotionType = transactionPromotion.applied_discount && transactionPromotion.applied_discount.type ? transactionPromotion.applied_discount.type : '';
|
|
273
|
+
transactionPromotionObj.itemLineIds = (/** @type {?} */ (_this)).orderDetails.product_items.map((/**
|
|
274
|
+
* @param {?} product
|
|
275
|
+
* @param {?} index
|
|
276
|
+
* @return {?}
|
|
277
|
+
*/
|
|
278
|
+
function (product, index) { return index + 1; }));
|
|
279
|
+
transactionPromotionArray.push(transactionPromotionObj);
|
|
280
|
+
}));
|
|
281
|
+
}
|
|
282
|
+
(/** @type {?} */ (this)).webReturnObject.basket.transactionPromotion = transactionPromotionArray;
|
|
283
|
+
console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: transactionPromotion mapping ended...");
|
|
284
|
+
return (/** @type {?} */ (this));
|
|
285
|
+
};
|
|
286
|
+
/**
|
|
287
|
+
* @template THIS
|
|
288
|
+
* @this {THIS}
|
|
289
|
+
* @return {THIS}
|
|
290
|
+
*/
|
|
291
|
+
WebReturnSalesforceMapperBuilderClass.prototype.customer = /**
|
|
292
|
+
* @template THIS
|
|
293
|
+
* @this {THIS}
|
|
294
|
+
* @return {THIS}
|
|
295
|
+
*/
|
|
296
|
+
function () {
|
|
297
|
+
console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: customer mapping started...");
|
|
298
|
+
/** @type {?} */
|
|
299
|
+
var customerObj = (/** @type {?} */ ({}));
|
|
300
|
+
customerObj.email = (/** @type {?} */ (this)).orderDetails.customer_info && (/** @type {?} */ (this)).orderDetails.customer_info.email ? (/** @type {?} */ (this)).orderDetails.customer_info.email : '';
|
|
301
|
+
customerObj.firstName = (/** @type {?} */ (this)).orderDetails.billing_address && (/** @type {?} */ (this)).orderDetails.billing_address.first_name ? (/** @type {?} */ (this)).orderDetails.billing_address.first_name : '';
|
|
302
|
+
customerObj.lastName = (/** @type {?} */ (this)).orderDetails.billing_address && (/** @type {?} */ (this)).orderDetails.billing_address.last_name ? (/** @type {?} */ (this)).orderDetails.billing_address.last_name : '';
|
|
303
|
+
/** @type {?} */
|
|
304
|
+
var shippingAddress = (/** @type {?} */ ([]));
|
|
305
|
+
(/** @type {?} */ (this)).orderDetails.shipments.forEach((/**
|
|
306
|
+
* @param {?} shipment
|
|
307
|
+
* @return {?}
|
|
308
|
+
*/
|
|
309
|
+
function (shipment) {
|
|
310
|
+
/** @type {?} */
|
|
311
|
+
var shippingAddressObj = (/** @type {?} */ ({}));
|
|
312
|
+
shippingAddressObj.id = shipment.shipping_address && shipment.shipping_address.id ? shipment.shipping_address.id : '';
|
|
313
|
+
shippingAddressObj.countryCode = shipment.shipping_address && shipment.shipping_address.country_code ? shipment.shipping_address.country_code : '';
|
|
314
|
+
shippingAddressObj.address1 = shipment.shipping_address && shipment.shipping_address.address1 ? shipment.shipping_address.address1 : '';
|
|
315
|
+
shippingAddressObj.city = shipment.shipping_address && shipment.shipping_address.city ? shipment.shipping_address.city : '';
|
|
316
|
+
shippingAddressObj.country = '';
|
|
317
|
+
shippingAddressObj.postCode = shipment.shipping_address && shipment.shipping_address.postal_code ? shipment.shipping_address.postal_code : '';
|
|
318
|
+
shippingAddress.push(shippingAddressObj);
|
|
319
|
+
}));
|
|
320
|
+
customerObj.shippingAddress = shippingAddress;
|
|
321
|
+
/** @type {?} */
|
|
322
|
+
var billingAddress = (/** @type {?} */ ([]));
|
|
323
|
+
/** @type {?} */
|
|
324
|
+
var billingAddressObj = (/** @type {?} */ ({}));
|
|
325
|
+
billingAddressObj.id = (/** @type {?} */ (this)).orderDetails.billing_address && (/** @type {?} */ (this)).orderDetails.billing_address.id ? (/** @type {?} */ (this)).orderDetails.billing_address.id : '';
|
|
326
|
+
billingAddressObj.countryCode = (/** @type {?} */ (this)).orderDetails.billing_address && (/** @type {?} */ (this)).orderDetails.billing_address.country_code ? (/** @type {?} */ (this)).orderDetails.billing_address.country_code : '';
|
|
327
|
+
billingAddressObj.address1 = (/** @type {?} */ (this)).orderDetails.billing_address && (/** @type {?} */ (this)).orderDetails.billing_address.address1 ? (/** @type {?} */ (this)).orderDetails.billing_address.address1 : '';
|
|
328
|
+
billingAddressObj.city = (/** @type {?} */ (this)).orderDetails.billing_address && (/** @type {?} */ (this)).orderDetails.billing_address.city ? (/** @type {?} */ (this)).orderDetails.billing_address.city : '';
|
|
329
|
+
billingAddressObj.country = '';
|
|
330
|
+
billingAddressObj.postCode = '';
|
|
331
|
+
billingAddress.push(billingAddressObj);
|
|
332
|
+
customerObj.billingAddress = billingAddress;
|
|
333
|
+
/** @type {?} */
|
|
334
|
+
var shipmentDetails = (/** @type {?} */ ([]));
|
|
335
|
+
(/** @type {?} */ (this)).orderDetails.shipments.forEach((/**
|
|
336
|
+
* @param {?} shipment
|
|
337
|
+
* @return {?}
|
|
338
|
+
*/
|
|
339
|
+
function (shipment) {
|
|
340
|
+
/** @type {?} */
|
|
341
|
+
var shipmentDetailsObj = (/** @type {?} */ ({}));
|
|
342
|
+
shipmentDetailsObj.id = shipment.shipment_id ? shipment.shipment_id : '';
|
|
343
|
+
shipmentDetailsObj.deliveryGroup = shipment.shipment_id ? shipment.shipment_id : '';
|
|
344
|
+
shipmentDetails.push(shipmentDetailsObj);
|
|
345
|
+
}));
|
|
346
|
+
customerObj.shipmentDetails = shipmentDetails;
|
|
347
|
+
(/** @type {?} */ (this)).webReturnObject.customer = customerObj;
|
|
348
|
+
console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: customer mapping ended...");
|
|
349
|
+
return (/** @type {?} */ (this));
|
|
350
|
+
};
|
|
351
|
+
/**
|
|
352
|
+
* @template THIS
|
|
353
|
+
* @this {THIS}
|
|
354
|
+
* @return {THIS}
|
|
355
|
+
*/
|
|
356
|
+
WebReturnSalesforceMapperBuilderClass.prototype.externalTransactionDetails = /**
|
|
357
|
+
* @template THIS
|
|
358
|
+
* @this {THIS}
|
|
359
|
+
* @return {THIS}
|
|
360
|
+
*/
|
|
361
|
+
function () {
|
|
362
|
+
var _this = this;
|
|
363
|
+
console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: externalTransactionDetails mapping started...");
|
|
364
|
+
/** @type {?} */
|
|
365
|
+
var externalTransactionDetails = (/** @type {?} */ ([]));
|
|
366
|
+
if ((/** @type {?} */ (this)).orderDetails.shipments && (/** @type {?} */ (this)).orderDetails.shipments.length > 0) {
|
|
367
|
+
(/** @type {?} */ (this)).orderDetails.shipments.forEach((/**
|
|
368
|
+
* @param {?} shipment
|
|
369
|
+
* @return {?}
|
|
370
|
+
*/
|
|
371
|
+
function (shipment) {
|
|
372
|
+
/** @type {?} */
|
|
373
|
+
var externalTransactionDetailsObj = (/** @type {?} */ ({}));
|
|
374
|
+
/** @type {?} */
|
|
375
|
+
var transactionInfo = (/** @type {?} */ ({}));
|
|
376
|
+
externalTransactionDetailsObj.uniqueId = (/** @type {?} */ (_this)).orderDetails.order_no ? (/** @type {?} */ (_this)).orderDetails.order_no : '';
|
|
377
|
+
externalTransactionDetailsObj.providerType = PROVIDERS.SALESFORCE;
|
|
378
|
+
transactionInfo.shippingId = shipment.shipping_method && shipment.shipping_method.id ? shipment.shipping_method.id : '';
|
|
379
|
+
transactionInfo.externalShippingId = shipment.shipment_id ? shipment.shipment_id : '';
|
|
380
|
+
externalTransactionDetailsObj.details = transactionInfo;
|
|
381
|
+
externalTransactionDetails.push(externalTransactionDetailsObj);
|
|
382
|
+
}));
|
|
383
|
+
}
|
|
384
|
+
(/** @type {?} */ (this)).webReturnObject.externalTransactionDetails = externalTransactionDetails;
|
|
385
|
+
console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: externalTransactionDetails mapping ended...");
|
|
386
|
+
return (/** @type {?} */ (this));
|
|
387
|
+
};
|
|
388
|
+
/**
|
|
389
|
+
* @template THIS
|
|
390
|
+
* @this {THIS}
|
|
391
|
+
* @return {THIS}
|
|
392
|
+
*/
|
|
393
|
+
WebReturnSalesforceMapperBuilderClass.prototype.basketSummary = /**
|
|
394
|
+
* @template THIS
|
|
395
|
+
* @this {THIS}
|
|
396
|
+
* @return {THIS}
|
|
397
|
+
*/
|
|
398
|
+
function () {
|
|
399
|
+
console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: basketSummary mapping started...");
|
|
400
|
+
/** @type {?} */
|
|
401
|
+
var basketSummary = (/** @type {?} */ ({}));
|
|
402
|
+
/** @type {?} */
|
|
403
|
+
var basketSummaryWebOrder = (/** @type {?} */ ({}));
|
|
404
|
+
/** @type {?} */
|
|
405
|
+
var linePromotionTotal = (/** @type {?} */ (this)).webReturnObject.basket.linePromotion.map((/**
|
|
406
|
+
* @param {?} linePromotion
|
|
407
|
+
* @return {?}
|
|
408
|
+
*/
|
|
409
|
+
function (linePromotion) { return linePromotion.promotionAmount; })).reduce((/**
|
|
410
|
+
* @param {?} accumulator
|
|
411
|
+
* @param {?} currentValue
|
|
412
|
+
* @return {?}
|
|
413
|
+
*/
|
|
414
|
+
function (accumulator, currentValue) { return accumulator + currentValue; }), 0);
|
|
415
|
+
/** @type {?} */
|
|
416
|
+
var transactionPromotionTotal = (/** @type {?} */ (this)).webReturnObject.basket.transactionPromotion.map((/**
|
|
417
|
+
* @param {?} transactionPromotion
|
|
418
|
+
* @return {?}
|
|
419
|
+
*/
|
|
420
|
+
function (transactionPromotion) { return transactionPromotion.promotionAmount; })).reduce((/**
|
|
421
|
+
* @param {?} accumulator
|
|
422
|
+
* @param {?} currentValue
|
|
423
|
+
* @return {?}
|
|
424
|
+
*/
|
|
425
|
+
function (accumulator, currentValue) { return accumulator + currentValue; }), 0);
|
|
426
|
+
basketSummary.discountTotal = linePromotionTotal + transactionPromotionTotal;
|
|
427
|
+
basketSummary.VATTotal = (/** @type {?} */ (this)).orderDetails.tax_total ? (/** @type {?} */ (this)).orderDetails.tax_total : 0;
|
|
428
|
+
basketSummary.saleTotal = (/** @type {?} */ (this)).orderDetails.order_total ? (/** @type {?} */ (this)).orderDetails.order_total : 0;
|
|
429
|
+
basketSummary.basketTotal = (/** @type {?} */ (this)).orderDetails.order_total ? (/** @type {?} */ (this)).orderDetails.order_total : 0;
|
|
430
|
+
basketSummary.totalItems = (/** @type {?} */ (this)).orderDetails.product_items && (/** @type {?} */ (this)).orderDetails.product_items.length > 0 ? (/** @type {?} */ (this)).orderDetails.product_items.length : 0;
|
|
431
|
+
basketSummary.basketTotalWithShippingTotal = (/** @type {?} */ (this)).orderDetails.order_total ? (/** @type {?} */ (this)).orderDetails.order_total : 0;
|
|
432
|
+
basketSummaryWebOrder.shippingTotal = (/** @type {?} */ (this)).orderDetails.shipping_total ? (/** @type {?} */ (this)).orderDetails.shipping_total : 0;
|
|
433
|
+
basketSummaryWebOrder.basketTotalWithShippingTotal = (/** @type {?} */ (this)).orderDetails.order_total ? (/** @type {?} */ (this)).orderDetails.order_total : 0;
|
|
434
|
+
basketSummary.webOrder = basketSummaryWebOrder;
|
|
435
|
+
(/** @type {?} */ (this)).webReturnObject.basketSummary = basketSummary;
|
|
436
|
+
console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: basketSummary mapping ended...");
|
|
437
|
+
return (/** @type {?} */ (this));
|
|
438
|
+
};
|
|
439
|
+
/**
|
|
440
|
+
* @template THIS
|
|
441
|
+
* @this {THIS}
|
|
442
|
+
* @param {?} deviceId
|
|
443
|
+
* @return {THIS}
|
|
444
|
+
*/
|
|
445
|
+
WebReturnSalesforceMapperBuilderClass.prototype.deviceId = /**
|
|
446
|
+
* @template THIS
|
|
447
|
+
* @this {THIS}
|
|
448
|
+
* @param {?} deviceId
|
|
449
|
+
* @return {THIS}
|
|
450
|
+
*/
|
|
451
|
+
function (deviceId) {
|
|
452
|
+
(/** @type {?} */ (this)).webReturnObject.deviceId = deviceId;
|
|
453
|
+
return (/** @type {?} */ (this));
|
|
454
|
+
};
|
|
455
|
+
/**
|
|
456
|
+
* @template THIS
|
|
457
|
+
* @this {THIS}
|
|
458
|
+
* @param {?} terminalId
|
|
459
|
+
* @return {THIS}
|
|
460
|
+
*/
|
|
461
|
+
WebReturnSalesforceMapperBuilderClass.prototype.terminalId = /**
|
|
462
|
+
* @template THIS
|
|
463
|
+
* @this {THIS}
|
|
464
|
+
* @param {?} terminalId
|
|
465
|
+
* @return {THIS}
|
|
466
|
+
*/
|
|
467
|
+
function (terminalId) {
|
|
468
|
+
(/** @type {?} */ (this)).webReturnObject.terminalId = terminalId;
|
|
469
|
+
return (/** @type {?} */ (this));
|
|
470
|
+
};
|
|
471
|
+
/**
|
|
472
|
+
* @template THIS
|
|
473
|
+
* @this {THIS}
|
|
474
|
+
* @param {?} orgCode
|
|
475
|
+
* @return {THIS}
|
|
476
|
+
*/
|
|
477
|
+
WebReturnSalesforceMapperBuilderClass.prototype.orgCode = /**
|
|
478
|
+
* @template THIS
|
|
479
|
+
* @this {THIS}
|
|
480
|
+
* @param {?} orgCode
|
|
481
|
+
* @return {THIS}
|
|
482
|
+
*/
|
|
483
|
+
function (orgCode) {
|
|
484
|
+
(/** @type {?} */ (this)).webReturnObject.orgCode = orgCode;
|
|
485
|
+
return (/** @type {?} */ (this));
|
|
486
|
+
};
|
|
487
|
+
/**
|
|
488
|
+
* @template THIS
|
|
489
|
+
* @this {THIS}
|
|
490
|
+
* @param {?} storeId
|
|
491
|
+
* @return {THIS}
|
|
492
|
+
*/
|
|
493
|
+
WebReturnSalesforceMapperBuilderClass.prototype.storeId = /**
|
|
494
|
+
* @template THIS
|
|
495
|
+
* @this {THIS}
|
|
496
|
+
* @param {?} storeId
|
|
497
|
+
* @return {THIS}
|
|
498
|
+
*/
|
|
499
|
+
function (storeId) {
|
|
500
|
+
(/** @type {?} */ (this)).webReturnObject.storeId = storeId;
|
|
501
|
+
return (/** @type {?} */ (this));
|
|
502
|
+
};
|
|
503
|
+
/**
|
|
504
|
+
* @template THIS
|
|
505
|
+
* @this {THIS}
|
|
506
|
+
* @param {?} storeNodeId
|
|
507
|
+
* @return {THIS}
|
|
508
|
+
*/
|
|
509
|
+
WebReturnSalesforceMapperBuilderClass.prototype.storeNodeId = /**
|
|
510
|
+
* @template THIS
|
|
511
|
+
* @this {THIS}
|
|
512
|
+
* @param {?} storeNodeId
|
|
513
|
+
* @return {THIS}
|
|
514
|
+
*/
|
|
515
|
+
function (storeNodeId) {
|
|
516
|
+
(/** @type {?} */ (this)).webReturnObject.storeNodeId = storeNodeId;
|
|
517
|
+
return (/** @type {?} */ (this));
|
|
518
|
+
};
|
|
519
|
+
/**
|
|
520
|
+
* @template THIS
|
|
521
|
+
* @this {THIS}
|
|
522
|
+
* @param {?} storeNodeStructure
|
|
523
|
+
* @return {THIS}
|
|
524
|
+
*/
|
|
525
|
+
WebReturnSalesforceMapperBuilderClass.prototype.storeNodeStructure = /**
|
|
526
|
+
* @template THIS
|
|
527
|
+
* @this {THIS}
|
|
528
|
+
* @param {?} storeNodeStructure
|
|
529
|
+
* @return {THIS}
|
|
530
|
+
*/
|
|
531
|
+
function (storeNodeStructure) {
|
|
532
|
+
(/** @type {?} */ (this)).webReturnObject.storeNodeStructure = storeNodeStructure;
|
|
533
|
+
return (/** @type {?} */ (this));
|
|
534
|
+
};
|
|
535
|
+
/**
|
|
536
|
+
* @template THIS
|
|
537
|
+
* @this {THIS}
|
|
538
|
+
* @param {?} docId
|
|
539
|
+
* @return {THIS}
|
|
540
|
+
*/
|
|
541
|
+
WebReturnSalesforceMapperBuilderClass.prototype.docId = /**
|
|
542
|
+
* @template THIS
|
|
543
|
+
* @this {THIS}
|
|
544
|
+
* @param {?} docId
|
|
545
|
+
* @return {THIS}
|
|
546
|
+
*/
|
|
547
|
+
function (docId) {
|
|
548
|
+
(/** @type {?} */ (this)).webReturnObject.id = docId;
|
|
549
|
+
return (/** @type {?} */ (this));
|
|
550
|
+
};
|
|
551
|
+
/**
|
|
552
|
+
* @template THIS
|
|
553
|
+
* @this {THIS}
|
|
554
|
+
* @param {?} userID
|
|
555
|
+
* @return {THIS}
|
|
556
|
+
*/
|
|
557
|
+
WebReturnSalesforceMapperBuilderClass.prototype.updateUserID = /**
|
|
558
|
+
* @template THIS
|
|
559
|
+
* @this {THIS}
|
|
560
|
+
* @param {?} userID
|
|
561
|
+
* @return {THIS}
|
|
562
|
+
*/
|
|
563
|
+
function (userID) {
|
|
564
|
+
(/** @type {?} */ (this)).webReturnObject.userId = userID;
|
|
565
|
+
return (/** @type {?} */ (this));
|
|
566
|
+
};
|
|
567
|
+
/**
|
|
568
|
+
* @template THIS
|
|
569
|
+
* @this {THIS}
|
|
570
|
+
* @param {?} name
|
|
571
|
+
* @return {THIS}
|
|
572
|
+
*/
|
|
573
|
+
WebReturnSalesforceMapperBuilderClass.prototype.updateUserName = /**
|
|
574
|
+
* @template THIS
|
|
575
|
+
* @this {THIS}
|
|
576
|
+
* @param {?} name
|
|
577
|
+
* @return {THIS}
|
|
578
|
+
*/
|
|
579
|
+
function (name) {
|
|
580
|
+
(/** @type {?} */ (this)).webReturnObject.userName = name;
|
|
581
|
+
return (/** @type {?} */ (this));
|
|
582
|
+
};
|
|
583
|
+
/**
|
|
584
|
+
* @return {?}
|
|
585
|
+
*/
|
|
586
|
+
WebReturnSalesforceMapperBuilderClass.prototype.build = /**
|
|
587
|
+
* @return {?}
|
|
588
|
+
*/
|
|
589
|
+
function () {
|
|
590
|
+
console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: mapping done...");
|
|
591
|
+
return this.webReturnObject;
|
|
592
|
+
};
|
|
593
|
+
/**
|
|
594
|
+
* @param {?} date
|
|
595
|
+
* @return {?}
|
|
596
|
+
*/
|
|
597
|
+
WebReturnSalesforceMapperBuilderClass.prototype.getUTCDateTime = /**
|
|
598
|
+
* @param {?} date
|
|
599
|
+
* @return {?}
|
|
600
|
+
*/
|
|
601
|
+
function (date) {
|
|
602
|
+
if (date) {
|
|
603
|
+
return new Date(date).toISOString();
|
|
604
|
+
}
|
|
605
|
+
};
|
|
606
|
+
return WebReturnSalesforceMapperBuilderClass;
|
|
607
|
+
}());
|
|
608
|
+
export { WebReturnSalesforceMapperBuilderClass };
|
|
609
|
+
if (false) {
|
|
610
|
+
/**
|
|
611
|
+
* @type {?}
|
|
612
|
+
* @private
|
|
613
|
+
*/
|
|
614
|
+
WebReturnSalesforceMapperBuilderClass.prototype.orderDetails;
|
|
615
|
+
/**
|
|
616
|
+
* @type {?}
|
|
617
|
+
* @private
|
|
618
|
+
*/
|
|
619
|
+
WebReturnSalesforceMapperBuilderClass.prototype.webReturnObject;
|
|
620
|
+
}
|
|
621
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiV2ViUmV0dXJuU2FsZXNmb3JjZU1hcHBlci5jbGFzcy5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BwbWNyZXRhaWwvbWFwcGVyLWxpYnJhcnkvIiwic291cmNlcyI6WyJsaWIvV2ViUmV0dXJuU2FsZXNmb3JjZU1hcHBlci5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBcUYsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQWdDLFNBQVMsRUFBbUIsZ0JBQWdCLEVBQW1HLE1BQU0sd0JBQXdCLENBQUM7QUFFN1U7SUErQkksK0NBQVksWUFBMEI7UUE1QjlCLG9CQUFlLEdBQXdCO1lBQzNDLEVBQUUsRUFBRSxFQUFFO1lBQ04sT0FBTyxFQUFFLEVBQUU7WUFDWCxPQUFPLEVBQUUsRUFBRTtZQUNYLFdBQVcsRUFBRSxFQUFFO1lBQ2Ysa0JBQWtCLEVBQUUsRUFBRTtZQUN0QixRQUFRLEVBQUUsRUFBRTtZQUNaLFVBQVUsRUFBRSxFQUFFO1lBQ2QsZ0JBQWdCLEVBQUUsRUFBRTtZQUNwQixNQUFNLEVBQUUsS0FBSztZQUNiLE1BQU0sRUFBRSxFQUFFO1lBQ1YsYUFBYSxFQUFFLEVBQUU7WUFDakIsWUFBWSxFQUFFLEVBQUU7WUFDaEIsUUFBUSxFQUFFO2dCQUNOLEVBQUUsRUFBRSxFQUFFO2dCQUNOLEtBQUssRUFBRSxFQUFFO2dCQUNULFNBQVMsRUFBRSxFQUFFO2dCQUNiLFFBQVEsRUFBRSxFQUFFO2dCQUNaLGNBQWMsRUFBRSxFQUFFO2dCQUNsQixlQUFlLEVBQUUsRUFBRTtnQkFDbkIsZUFBZSxFQUFFLEVBQUU7Z0JBQ25CLFNBQVMsRUFBRSxFQUFFO2dCQUNiLFFBQVEsRUFBRSxFQUFFO2dCQUNaLGtCQUFrQixFQUFFLEtBQUs7YUFDNUI7WUFDRCx5QkFBeUIsRUFBRSxtQkFBQSxFQUFFLEVBQTZCO1NBQzdELENBQUE7UUFHRyxJQUFJLFlBQVksRUFBRTtZQUNkLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO1NBQ3BD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QSxDQUFDLGVBQWUsQ0FBQyxrQkFBa0IsR0FBRyxrQkFBa0IsQ0FBQztRQUM3RCxPQUFPLG1CQUFBLElBQUksRUFBQSxDQUFDO0lBQ2hCLENBQUM7Ozs7Ozs7SUFFRCxxREFBSzs7Ozs7O0lBQUwsVUFBTSxLQUFLO1FBQ1AsbUJBQUEsSUFBSSxFQUFBLENBQUMsZUFBZSxDQUFDLEVBQUUsR0FBRyxLQUFLLENBQUM7UUFDaEMsT0FBTyxtQkFBQSxJQUFJLEVBQUEsQ0FBQztJQUNoQixDQUFDOzs7Ozs7O0lBRUQsNERBQVk7Ozs7OztJQUFaLFVBQWEsTUFBYztRQUN2QixtQkFBQSxJQUFJLEVBQUEsQ0FBQyxlQUFlLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQyxPQUFPLG1CQUFBLElBQUksRUFBQSxDQUFDO0lBQ2hCLENBQUM7Ozs7Ozs7SUFFRCw4REFBYzs7Ozs7O0lBQWQsVUFBZSxJQUFJO1FBQ2YsbUJBQUEsSUFBSSxFQUFBLENBQUMsZUFBZSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDckMsT0FBTyxtQkFBQSxJQUFJLEVBQUEsQ0FBQztJQUNoQixDQUFDOzs7O0lBRUQscURBQUs7OztJQUFMO1FBQ0ksT0FBTyxDQUFDLEdBQUcsQ0FBQyx3RUFBd0UsQ0FBQyxDQUFDO1FBQ3RGLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUNoQyxDQUFDOzs7OztJQUVELDhEQUFjOzs7O0lBQWQsVUFBZSxJQUFJO1FBQ2YsSUFBSSxJQUFJLEVBQUU7WUFDTixPQUFPLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQ3ZDO0lBQ0wsQ0FBQztJQUNMLDRDQUFDO0FBQUQsQ0FBQyxBQTlURCxJQThUQzs7Ozs7OztJQTVURyw2REFBbUM7Ozs7O0lBQ25DLGdFQTBCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFkZHJlc3MsIEJhc2tldFN1bW1hcnksIEJhc2tldFN1bW1hcnlEZXRhaWxzLCBDdXJyZW50VHJhbnNhY3Rpb25EZXRhaWxzLCBDdXN0b21lciwgREVMSVZFUllfTUVUSE9EUywgSU5JVElBVElOR19NT0RVTEUsIExpbmVQcm9tb3Rpb25zLCBPcmRlckRldGFpbHMsIFBST1ZJREVSUywgU2hpcG1lbnREZXRhaWxzLCBUUkFOU0FDVElPTl9UWVBFLCBUcmFuc2FjdGlvbkRvY3VtZW50LCBUcmFuc2FjdGlvbkluZm8sIFRyYW5zYWN0aW9uUHJvbW90aW9uLCBUcmlnZ2VyLCBleHRlcm5hbFRyYW5zYWN0aW9uRGV0YWlscyB9IGZyb20gXCIuL21hcHBlci1saWJyYXJ5Lm1vZGVsXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgV2ViUmV0dXJuU2FsZXNmb3JjZU1hcHBlckJ1aWxkZXJDbGFzcyB7XHJcblxyXG4gICAgcHJpdmF0ZSBvcmRlckRldGFpbHM6IE9yZGVyRGV0YWlscztcclxuICAgIHByaXZhdGUgd2ViUmV0dXJuT2JqZWN0OiBUcmFuc2FjdGlvbkRvY3VtZW50ID0ge1xyXG4gICAgICAgIGlkOiAnJyxcclxuICAgICAgICBvcmdDb2RlOiBcIlwiLFxyXG4gICAgICAgIHN0b3JlSWQ6IFwiXCIsXHJcbiAgICAgICAgc3RvcmVOb2RlSWQ6IFwiXCIsXHJcbiAgICAgICAgc3RvcmVOb2RlU3RydWN0dXJlOiBcIlwiLFxyXG4gICAgICAgIGRldmljZUlkOiBcIlwiLFxyXG4gICAgICAgIHRlcm1pbmFsSWQ6IFwiXCIsXHJcbiAgICAgICAgaW5pdGlhdGluZ01vZHVsZTogXCJcIixcclxuICAgICAgICBleHBvcnQ6IGZhbHNlLFxyXG4gICAgICAgIGJhc2tldDoge30sXHJcbiAgICAgICAgYmFza2V0U3VtbWFyeToge30sXHJcbiAgICAgICAgYmFzZUN1cnJlbmN5OiBcIlwiLFxyXG4gICAgICAgIGN1c3RvbWVyOiB7XHJcbiAgICAgICAgICAgIGlkOiAnJyxcclxuICAgICAgICAgICAgZW1haWw6ICcnLFxyXG4gICAgICAgICAgICBmaXJzdE5hbWU6ICcnLFxyXG4gICAgICAgICAgICBsYXN0TmFtZTogJycsXHJcbiAgICAgICAgICAgIGJpbGxpbmdBZGRyZXNzOiBbXSxcclxuICAgICAgICAgICAgc2hpcHBpbmdBZGRyZXNzOiBbXSxcclxuICAgICAgICAgICAgc2hpcG1lbnREZXRhaWxzOiBbXSxcclxuICAgICAgICAgICAgdGVsZXBob25lOiAnJyxcclxuICAgICAgICAgICAgcG9zdENvZGU6ICcnLFxyXG4gICAgICAgICAgICBub0N1c3RvbWVyU2VsZWN0ZWQ6IGZhbHNlXHJcbiAgICAgICAgfSxcclxuICAgICAgICBjdXJyZW50VHJhbnNhY3Rpb25EZXRhaWxzOiB7fSBhcyBDdXJyZW50VHJhbnNhY3Rpb25EZXRhaWxzXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3RydWN0b3Iob3JkZXJEZXRhaWxzOiBPcmRlckRldGFpbHMpIHtcclxuICAgICAgICBpZiAob3JkZXJEZXRhaWxzKSB7XHJcbiAgICAgICAgICAgIHRoaXMub3JkZXJEZXRhaWxzID0gb3JkZXJEZXRhaWxzO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB3ZWJSZXR1cm5Db21tb25NYXBwZXIoKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJNYXBwZXIgbGlicmFyeTogV2ViUmV0dXJuU2FsZXNmb3JjZU1hcHBlckJ1aWxkZXJDbGFzczogd2ViUmV0dXJuQ29tbW9uTWFwcGVyIHN0YXJ0ZWQuLi5cIik7XHJcbiAgICAgICAgdGhpcy53ZWJSZXR1cm5PYmplY3RbJ3R5cGUnXSA9IFRSQU5TQUNUSU9OX1RZUEUuV0VCX1JFVFVSTlM7XHJcbiAgICAgICAgdGhpcy53ZWJSZXR1cm5PYmplY3RbJ2RhdGV0aW1lJ10gPSB0aGlzLmdldFVUQ0RhdGVUaW1lKHRoaXMub3JkZXJEZXRhaWxzLmxhc3RfbW9kaWZpZWQpO1xyXG4gICAgICAgIHRoaXMud2ViUmV0dXJuT2JqZWN0LmJhc2VDdXJyZW5jeSA9IHRoaXMub3JkZXJEZXRhaWxzLmN1cnJlbmN5O1xyXG4gICAgICAgIHRoaXMud2ViUmV0dXJuT2JqZWN0LnN1YnNpZGlhcnlJZCA9ICcxJztcclxuICAgICAgICB0aGlzLndlYlJldHVybk9iamVjdC5leHBvcnQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMud2ViUmV0dXJuT2JqZWN0LmluaXRpYXRpbmdNb2R1bGUgPSBJTklUSUFUSU5HX01PRFVMRS5FQkFTS0VUO1xyXG4gICAgICAgIHRoaXMud2ViUmV0dXJuT2JqZWN0LmNyZWF0ZWRBdCA9IHRoaXMuZ2V0VVRDRGF0ZVRpbWUodGhpcy5vcmRlckRldGFpbHMuY3JlYXRpb25fZGF0ZSk7XHJcbiAgICAgICAgdGhpcy53ZWJSZXR1cm5PYmplY3QudXBkYXRlZEF0ID0gdGhpcy5nZXRVVENEYXRlVGltZSh0aGlzLm9yZGVyRGV0YWlscy5sYXN0X21vZGlmaWVkKTtcclxuICAgICAgICB0aGlzLndlYlJldHVybk9iamVjdC50cmFuc0NvbXBsZXRlZEF0ID0gdGhpcy5nZXRVVENEYXRlVGltZSh0aGlzLm9yZGVyRGV0YWlscy5sYXN0X21vZGlmaWVkKTtcclxuICAgICAgICB0aGlzLndlYlJldHVybk9iamVjdFsnZXh0ZXJuYWxUcmFuc2FjdGlvbklkJ10gPSB0aGlzLm9yZGVyRGV0YWlscy5vcmRlcl9ubztcclxuICAgICAgICBjb25zb2xlLmxvZyhcIk1hcHBlciBsaWJyYXJ5OiBXZWJSZXR1cm5TYWxlc2ZvcmNlTWFwcGVyQnVpbGRlckNsYXNzOiB3ZWJSZXR1cm5Db21tb25NYXBwZXIgZW5kZWQuLi5cIik7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZXhwb3J0KHN0YXR1cywgZGV0YWlscykge1xyXG4gICAgLy8gICAgIGNvbnNvbGUubG9nKFwiTWFwcGVyIGxpYnJhcnk6IFdlYlJldHVyblNhbGVzZm9yY2VNYXBwZXJCdWlsZGVyQ2xhc3M6IGV4cG9ydCBtYXBwaW5nIHN0YXJ0ZWQuLi5cIik7XHJcbiAgICAvLyAgICAgY29uc29sZS5sb2coXCJNYXBwZXIgbGlicmFyeTogV2ViUmV0dXJuU2FsZXNmb3JjZU1hcHBlckJ1aWxkZXJDbGFzczogc3RhdHVzOlwiLCBzdGF0dXMpO1xyXG4gICAgLy8gICAgIGNvbnNvbGUubG9nKFwiTWFwcGVyIGxpYnJhcnk6IFdlYlJldHVyblNhbGVzZm9yY2VNYXBwZXJCdWlsZGVyQ2xhc3M6IGRldGFpbHM6XCIsIEpTT04uc3RyaW5naWZ5KGRldGFpbHMpKTtcclxuICAgIC8vICAgICBpZiAoc3RhdHVzICYmIGRldGFpbHMgJiYgZGV0YWlscy5wcm92aWRlcnMgJiYgZGV0YWlscy5wcm92aWRlcnMubGVuZ3RoID4gMCkge1xyXG4gICAgLy8gICAgICAgICBkZXRhaWxzLnByb3ZpZGVycy5mb3JFYWNoKFxyXG4gICAgLy8gICAgICAgICAgICAgcHJvdmlkZXJPYmogPT4ge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIGlmIChwcm92aWRlck9iai5wcm92aWRlciAmJiBwcm92aWRlck9iai5wcm92aWRlciA9PT0gUFJPVklERVJTLlNBTEVTRk9SQ0UpIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy53ZWJSZXR1cm5PYmplY3QuZXhwb3J0ID0gdHJ1ZTtcclxuICAgIC8vICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLndlYlJldHVybk9iamVjdC5leHBvcnQgPSBmYWxzZTtcclxuICAgIC8vICAgICAgICAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICk7XHJcbiAgICAvLyAgICAgfSBlbHNlIHtcclxuICAgIC8vICAgICAgICAgdGhpcy53ZWJSZXR1cm5PYmplY3QuZXhwb3J0ID0gZmFsc2U7XHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gICAgIGNvbnNvbGUubG9nKFwiTWFwcGVyIGxpYnJhcnk6IFdlYlJldHVyblNhbGVzZm9yY2VNYXBwZXJCdWlsZGVyQ2xhc3M6IGV4cG9ydCBtYXBwaW5nIGVuZC4uLlwiKVxyXG4gICAgLy8gICAgIHJldHVybiB0aGlzO1xyXG4gICAgLy8gfVxyXG5cclxuICAgIGdldERlbGl2ZXJ5TWV0aG9kKCkge1xyXG4gICAgICAgIGlmKHRoaXMub3JkZXJEZXRhaWxzLnNoaXBtZW50cyAmJiB0aGlzLm9yZGVyRGV0YWlscy5zaGlwbWVudHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBjb25zdCBzaGlwVG9TdG9yZVNoaXBtZW50ID0gdGhpcy5vcmRlckRldGFpbHMuc2hpcG1lbnRzLmZpbmQoc2hpcG1lbnQgPT4gc2hpcG1lbnQuY19mcm9tU3RvcmVJZCk7XHJcbiAgICAgICAgICAgIGlmKHNoaXBUb1N0b3JlU2hpcG1lbnQpIHJldHVybiBERUxJVkVSWV9NRVRIT0RTLlNISVBfVE9fU1RPUkU7XHJcbiAgICAgICAgICAgIGVsc2UgcmV0dXJuIERFTElWRVJZX01FVEhPRFMuREVMSVZFUlk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcm9kdWN0KCkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiTWFwcGVyIGxpYnJhcnk6IFdlYlJldHVyblNhbGVzZm9yY2VNYXBwZXJCdWlsZGVyQ2xhc3M6IHByb2R1Y3QgbWFwcGluZyBzdGFydGVkLi4uXCIpO1xyXG4gICAgICAgIHRoaXMud2ViUmV0dXJuT2JqZWN0LmJhc2tldFsncHJvZHVjdHMnXSA9IFtdO1xyXG4gICAgICAgIGlmICh0aGlzLm9yZGVyRGV0YWlscy5wcm9kdWN0X2l0ZW1zICYmIHRoaXMub3JkZXJEZXRhaWxzLnByb2R1Y3RfaXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLm9yZGVyRGV0YWlscy5wcm9kdWN0X2l0ZW1zLmZvckVhY2goXHJcbiAgICAgICAgICAgICAgICAocHJvZHVjdCwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwcm9kdWN0T2JqID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogcHJvZHVjdC5pdGVtX3RleHQgPyBwcm9kdWN0Lml0ZW1fdGV4dCA6ICcnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBTS1U6IHByb2R1Y3QucHJvZHVjdF9pZCA/IHByb2R1Y3QucHJvZHVjdF9pZCA6ICcnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBxdWFudGl0eTogcHJvZHVjdC5xdWFudGl0eSA/IHByb2R1Y3QucXVhbnRpdHkgOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZ1bmRlZFF1YW50aXR5OiAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmljZTogcHJvZHVjdC5wcmljZSA/IHByb2R1Y3QucHJpY2UgOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtTGluZUlkOiBpbmRleCArIDEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGl2ZXJ5TWV0aG9kOiB0aGlzLmdldERlbGl2ZXJ5TWV0aG9kKCkudG9TdHJpbmcoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxMaW5lUHJpY2U6IHByb2R1Y3QucHJpY2VfYWZ0ZXJfb3JkZXJfZGlzY291bnQgfHwgcHJvZHVjdC5wcmljZV9hZnRlcl9pdGVtX2Rpc2NvdW50IHx8IHByb2R1Y3QucHJpY2UgPyBwcm9kdWN0LnByaWNlX2FmdGVyX29yZGVyX2Rpc2NvdW50ICogcHJvZHVjdC5xdWFudGl0eSB8fCBwcm9kdWN0LnByaWNlX2FmdGVyX2l0ZW1fZGlzY291bnQgKiBwcm9kdWN0LnF1YW50aXR5IHx8IHByb2R1Y3QucHJpY2UgKiBwcm9kdWN0LnF1YW50aXR5IDogMFxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAocHJvZHVjdCAmJiBwcm9kdWN0LnByaWNlICE9IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy53ZWJSZXR1cm5PYmplY3QuYmFza2V0Wydwcm9kdWN0cyddLnB1c2gocHJvZHVjdE9iaik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zb2xlLmxvZyhcIk1hcHBlciBsaWJyYXJ5OiBXZWJSZXR1cm5TYWxlc2ZvcmNlTWFwcGVyQnVpbGRlckNsYXNzOiBwcm9kdWN0IG1hcHBpbmcgZW5kZWQuLi5cIik7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgbGluZVByb21vdGlvbigpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIk1hcHBlciBsaWJyYXJ5OiBXZWJSZXR1cm5TYWxlc2ZvcmNlTWFwcGVyQnVpbGRlckNsYXNzOiBsaW5lUHJvbW90aW9uIG1hcHBpbmcgc3RhcnRlZC4uLlwiKTtcclxuICAgICAgICB0aGlzLndlYlJldHVybk9iamVjdC5iYXNrZXQubGluZVByb21vdGlvbiA9IFtdIGFzIExpbmVQcm9tb3Rpb25zW107XHJcbiAgICAgICAgbGV0IGxpbmVQcm9tb3Rpb25BcnJheSA9IFtdIGFzIExpbmVQcm9tb3Rpb25zW107XHJcbiAgICAgICAgaWYgKHRoaXMub3JkZXJEZXRhaWxzLnByb2R1Y3RfaXRlbXMgJiYgdGhpcy5vcmRlckRldGFpbHMucHJvZHVjdF9pdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMub3JkZXJEZXRhaWxzLnByb2R1Y3RfaXRlbXMuZm9yRWFjaChcclxuICAgICAgICAgICAgICAgIChwcm9kdWN0LCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHByb2R1Y3QuaXRlbV9pZCA9IChpbmRleCArIDEpLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb2R1Y3QucHJpY2VfYWRqdXN0bWVudHMgJiYgcHJvZHVjdC5wcmljZV9hZGp1c3RtZW50cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3QucHJpY2VfYWRqdXN0bWVudHMuZm9yRWFjaChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwcm9tb3Rpb24pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbGluZVByb21vdGlvbk9iaiA9IHt9IGFzIExpbmVQcm9tb3Rpb25zO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0cmlnZ2VyID0ge30gYXMgVHJpZ2dlcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyLml0ZW1MaW5lSWQgPSBwcm9kdWN0Lml0ZW1faWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlci5xdWFudGl0eSA9IHByb2R1Y3QucXVhbnRpdHkgPyBwcm9kdWN0LnF1YW50aXR5IDogMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lUHJvbW90aW9uT2JqLnRyaWdnZXIgPSBbXSBhcyBUcmlnZ2VyW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZVByb21vdGlvbk9iai50cmlnZ2VyLnB1c2godHJpZ2dlcik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVQcm9tb3Rpb25PYmouaXRlbUxpbmVJZCA9IGluZGV4ICsgMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lUHJvbW90aW9uT2JqLnByb21vdGlvbklkID0gcHJvbW90aW9uLnByb21vdGlvbl9pZCA/IHByb21vdGlvbi5wcm9tb3Rpb25faWQgOiAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lUHJvbW90aW9uT2JqLmRpc3BsYXlUZXh0ID0gcHJvbW90aW9uLml0ZW1fdGV4dCA/IHByb21vdGlvbi5pdGVtX3RleHQgOiAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lUHJvbW90aW9uT2JqLnByb21vdGlvblR5cGUgPSBwcm9tb3Rpb24uYXBwbGllZF9kaXNjb3VudCAmJiBwcm9tb3Rpb24uYXBwbGllZF9kaXNjb3VudC50eXBlID8gcHJvbW90aW9uLmFwcGxpZWRfZGlzY291bnQudHlwZSA6ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVQcm9tb3Rpb25PYmoucHJvbW90aW9uQW1vdW50ID0gcHJvbW90aW9uLnByaWNlID8gTWF0aC5hYnMocHJvbW90aW9uLnByaWNlKSA6IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZVByb21vdGlvbk9iai5uYW1lID0gcHJvbW90aW9uLml0ZW1fdGV4dCA/IHByb21vdGlvbi5pdGVtX3RleHQgOiAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lUHJvbW90aW9uT2JqLnByb21vdGlvbkluZm8gPSBwcm9tb3Rpb24uaXRlbV90ZXh0ID8gcHJvbW90aW9uLml0ZW1fdGV4dCA6ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVQcm9tb3Rpb25PYmoucHJvbW90aW9uTGluZVByaWNlID0gcHJvZHVjdC5wcmljZV9hZnRlcl9pdGVtX2Rpc2NvdW50ID8gcHJvZHVjdC5wcmljZV9hZnRlcl9pdGVtX2Rpc2NvdW50IDogMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lUHJvbW90aW9uQXJyYXkucHVzaChsaW5lUHJvbW90aW9uT2JqKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMud2ViUmV0dXJuT2JqZWN0LmJhc2tldC5saW5lUHJvbW90aW9uID0gbGluZVByb21vdGlvbkFycmF5O1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiTWFwcGVyIGxpYnJhcnk6IFdlYlJldHVyblNhbGVzZm9yY2VNYXBwZXJCdWlsZGVyQ2xhc3M6IGxpbmVQcm9tb3Rpb24gbWFwcGluZyBlbmRlZC4uLlwiKTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICB0cmFuc2FjdGlvblByb21vdGlvbigpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIk1hcHBlciBsaWJyYXJ5OiBXZWJSZXR1cm5TYWxlc2ZvcmNlTWFwcGVyQnVpbGRlckNsYXNzOiB0cmFuc2FjdGlvblByb21vdGlvbiBtYXBwaW5nIHN0YXJ0ZWQuLi5cIik7XHJcbiAgICAgICAgbGV0IHRyYW5zYWN0aW9uUHJvbW90aW9uQXJyYXkgPSBbXSBhcyBUcmFuc2FjdGlvblByb21vdGlvbltdO1xyXG4gICAgICAgIHRoaXMud2ViUmV0dXJuT2JqZWN0LmJhc2tldC50cmFuc2FjdGlvblByb21vdGlvbiA9IFtdIGFzIFRyYW5zYWN0aW9uUHJvbW90aW9uW107XHJcbiAgICAgICAgaWYgKHRoaXMub3JkZXJEZXRhaWxzLm9yZGVyX3ByaWNlX2FkanVzdG1lbnRzICYmIHRoaXMub3JkZXJEZXRhaWxzLm9yZGVyX3ByaWNlX2FkanVzdG1lbnRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5vcmRlckRldGFpbHMub3JkZXJfcHJpY2VfYWRqdXN0bWVudHMuZm9yRWFjaChcclxuICAgICAgICAgICAgICAgICh0cmFuc2FjdGlvblByb21vdGlvbikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCB0cmFuc2FjdGlvblByb21vdGlvbk9iaiA9IHt9IGFzIFRyYW5zYWN0aW9uUHJvbW90aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uUHJvbW90aW9uT2JqLmRpc3BsYXlUZXh0ID0gdHJhbnNhY3Rpb25Qcm9tb3Rpb24uaXRlbV90ZXh0ID8gdHJhbnNhY3Rpb25Qcm9tb3Rpb24uaXRlbV90ZXh0IDogJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNhY3Rpb25Qcm9tb3Rpb25PYmoubmFtZSA9IHRyYW5zYWN0aW9uUHJvbW90aW9uLml0ZW1fdGV4dCA/IHRyYW5zYWN0aW9uUHJvbW90aW9uLml0ZW1fdGV4dCA6ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uUHJvbW90aW9uT2JqLnByb21vdGlvbkFtb3VudCA9IHRyYW5zYWN0aW9uUHJvbW90aW9uLnByaWNlID8gTWF0aC5hYnModHJhbnNhY3Rpb25Qcm9tb3Rpb24ucHJpY2UpIDogMDtcclxuICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvblByb21vdGlvbk9iai5wcm9tb3Rpb25JZCA9IHRyYW5zYWN0aW9uUHJvbW90aW9uLnByb21vdGlvbl9pZCA/IHRyYW5zYWN0aW9uUHJvbW90aW9uLnByb21vdGlvbl9pZCA6ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uUHJvbW90aW9uT2JqLnByb21vdGlvbkluZm8gPSB0cmFuc2FjdGlvblByb21vdGlvbi5pdGVtX3RleHQgPyB0cmFuc2FjdGlvblByb21vdGlvbi5pdGVtX3RleHQgOiAnJztcclxuICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvblByb21vdGlvbk9iai5wcm9tb3Rpb25UeXBlID0gdHJhbnNhY3Rpb25Qcm9tb3Rpb24uYXBwbGllZF9kaXNjb3VudCAmJiB0cmFuc2FjdGlvblByb21vdGlvbi5hcHBsaWVkX2Rpc2NvdW50LnR5cGUgPyB0cmFuc2FjdGlvblByb21vdGlvbi5hcHBsaWVkX2Rpc2NvdW50LnR5cGUgOiAnJztcclxuICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvblByb21vdGlvbk9iai5pdGVtTGluZUlkcyA9IHRoaXMub3JkZXJEZXRhaWxzLnByb2R1Y3RfaXRlbXMubWFwKChwcm9kdWN0LCBpbmRleCkgPT4gaW5kZXggKyAxKTtcclxuICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvblByb21vdGlvbkFycmF5LnB1c2godHJhbnNhY3Rpb25Qcm9tb3Rpb25PYmopO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLndlYlJldHVybk9iamVjdC5iYXNrZXQudHJhbnNhY3Rpb25Qcm9tb3Rpb24gPSB0cmFuc2FjdGlvblByb21vdGlvbkFycmF5O1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiTWFwcGVyIGxpYnJhcnk6IFdlYlJldHVyblNhbGVzZm9yY2VNYXBwZXJCdWlsZGVyQ2xhc3M6IHRyYW5zYWN0aW9uUHJvbW90aW9uIG1hcHBpbmcgZW5kZWQuLi5cIik7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgY3VzdG9tZXIoKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJNYXBwZXIgbGlicmFyeTogV2ViUmV0dXJuU2FsZXNmb3JjZU1hcHBlckJ1aWxkZXJDbGFzczogY3VzdG9tZXIgbWFwcGluZyBzdGFydGVkLi4uXCIpO1xyXG4gICAgICAgIGxldCBjdXN0b21lck9iaiA9IHt9IGFzIEN1c3RvbWVyO1xyXG4gICAgICAgIGN1c3RvbWVyT2JqLmVtYWlsID0gdGhpcy5vcmRlckRldGFpbHMuY3VzdG9tZXJfaW5mbyAmJiB0aGlzLm9yZGVyRGV0YWlscy5jdXN0b21lcl9pbmZvLmVtYWlsID8gdGhpcy5vcmRlckRldGFpbHMuY3VzdG9tZXJfaW5mby5lbWFpbCA6ICcnO1xyXG4gICAgICAgIGN1c3RvbWVyT2JqLmZpcnN0TmFtZSA9IHRoaXMub3JkZXJEZXRhaWxzLmJpbGxpbmdfYWRkcmVzcyAmJiB0aGlzLm9yZGVyRGV0YWlscy5iaWxsaW5nX2FkZHJlc3MuZmlyc3RfbmFtZSA/IHRoaXMub3JkZXJEZXRhaWxzLmJpbGxpbmdfYWRkcmVzcy5maXJzdF9uYW1lIDogJyc7XHJcbiAgICAgICAgY3VzdG9tZXJPYmoubGFzdE5hbWUgPSB0aGlzLm9yZGVyRGV0YWlscy5iaWxsaW5nX2FkZHJlc3MgJiYgdGhpcy5vcmRlckRldGFpbHMuYmlsbGluZ19hZGRyZXNzLmxhc3RfbmFtZSA/IHRoaXMub3JkZXJEZXRhaWxzLmJpbGxpbmdfYWRkcmVzcy5sYXN0X25hbWUgOiAnJztcclxuXHJcbiAgICAgICAgbGV0IHNoaXBwaW5nQWRkcmVzcyA9IFtdIGFzIEFkZHJlc3NbXTtcclxuICAgICAgICB0aGlzLm9yZGVyRGV0YWlscy5zaGlwbWVudHMuZm9yRWFjaChcclxuICAgICAgICAgICAgc2hpcG1lbnQgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IHNoaXBwaW5nQWRkcmVzc09iaiA9IHt9IGFzIEFkZHJlc3M7XHJcbiAgICAgICAgICAgICAgICBzaGlwcGluZ0FkZHJlc3NPYmouaWQgPSBzaGlwbWVudC5zaGlwcGluZ19hZGRyZXNzICYmIHNoaXBtZW50LnNoaXBwaW5nX2FkZHJlc3MuaWQgPyBzaGlwbWVudC5zaGlwcGluZ19hZGRyZXNzLmlkIDogJyc7XHJcbiAgICAgICAgICAgICAgICBzaGlwcGluZ0FkZHJlc3NPYmouY291bnRyeUNvZGUgPSBzaGlwbWVudC5zaGlwcGluZ19hZGRyZXNzICYmIHNoaXBtZW50LnNoaXBwaW5nX2FkZHJlc3MuY291bnRyeV9jb2RlID8gc2hpcG1lbnQuc2hpcHBpbmdfYWRkcmVzcy5jb3VudHJ5X2NvZGUgOiAnJztcclxuICAgICAgICAgICAgICAgIHNoaXBwaW5nQWRkcmVzc09iai5hZGRyZXNzMSA9IHNoaXBtZW50LnNoaXBwaW5nX2FkZHJlc3MgJiYgc2hpcG1lbnQuc2hpcHBpbmdfYWRkcmVzcy5hZGRyZXNzMSA/IHNoaXBtZW50LnNoaXBwaW5nX2FkZHJlc3MuYWRkcmVzczEgOiAnJztcclxuICAgICAgICAgICAgICAgIHNoaXBwaW5nQWRkcmVzc09iai5jaXR5ID0gc2hpcG1lbnQuc2hpcHBpbmdfYWRkcmVzcyAmJiBzaGlwbWVudC5zaGlwcGluZ19hZGRyZXNzLmNpdHkgPyBzaGlwbWVudC5zaGlwcGluZ19hZGRyZXNzLmNpdHkgOiAnJztcclxuICAgICAgICAgICAgICAgIHNoaXBwaW5nQWRkcmVzc09iai5jb3VudHJ5ID0gJyc7XHJcbiAgICAgICAgICAgICAgICBzaGlwcGluZ0FkZHJlc3NPYmoucG9zdENvZGUgPSBzaGlwbWVudC5zaGlwcGluZ19hZGRyZXNzICYmIHNoaXBtZW50LnNoaXBwaW5nX2FkZHJlc3MucG9zdGFsX2NvZGUgPyBzaGlwbWVudC5zaGlwcGluZ19hZGRyZXNzLnBvc3RhbF9jb2RlIDogJyc7XHJcbiAgICAgICAgICAgICAgICBzaGlwcGluZ0FkZHJlc3MucHVzaChzaGlwcGluZ0FkZHJlc3NPYmopO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKVxyXG4gICAgICAgIGN1c3RvbWVyT2JqLnNoaXBwaW5nQWRkcmVzcyA9IHNoaXBwaW5nQWRkcmVzcztcclxuXHJcbiAgICAgICAgbGV0IGJpbGxpbmdBZGRyZXNzID0gW10gYXMgQWRkcmVzc1tdO1xyXG4gICAgICAgIGxldCBiaWxsaW5nQWRkcmVzc09iaiA9IHt9IGFzIEFkZHJlc3M7XHJcbiAgICAgICAgYmlsbGluZ0FkZHJlc3NPYmouaWQgPSB0aGlzLm9yZGVyRGV0YWlscy5iaWxsaW5nX2FkZHJlc3MgJiYgdGhpcy5vcmRlckRldGFpbHMuYmlsbGluZ19hZGRyZXNzLmlkID8gdGhpcy5vcmRlckRldGFpbHMuYmlsbGluZ19hZGRyZXNzLmlkIDogJyc7XHJcbiAgICAgICAgYmlsbGluZ0FkZHJlc3NPYmouY291bnRyeUNvZGUgPSB0aGlzLm9yZGVyRGV0YWlscy5iaWxsaW5nX2FkZHJlc3MgJiYgdGhpcy5vcmRlckRldGFpbHMuYmlsbGluZ19hZGRyZXNzLmNvdW50cnlfY29kZSA/IHRoaXMub3JkZXJEZXRhaWxzLmJpbGxpbmdfYWRkcmVzcy5jb3VudHJ5X2NvZGUgOiAnJztcclxuICAgICAgICBiaWxsaW5nQWRkcmVzc09iai5hZGRyZXNzMSA9IHRoaXMub3JkZXJEZXRhaWxzLmJpbGxpbmdfYWRkcmVzcyAmJiB0aGlzLm9yZGVyRGV0YWlscy5iaWxsaW5nX2FkZHJlc3MuYWRkcmVzczEgPyB0aGlzLm9yZGVyRGV0YWlscy5iaWxsaW5nX2FkZHJlc3MuYWRkcmVzczEgOiAnJztcclxuICAgICAgICBiaWxsaW5nQWRkcmVzc09iai5jaXR5ID0gdGhpcy5vcmRlckRldGFpbHMuYmlsbGluZ19hZGRyZXNzICYmIHRoaXMub3JkZXJEZXRhaWxzLmJpbGxpbmdfYWRkcmVzcy5jaXR5ID8gdGhpcy5vcmRlckRldGFpbHMuYmlsbGluZ19hZGRyZXNzLmNpdHkgOiAnJztcclxuICAgICAgICBiaWxsaW5nQWRkcmVzc09iai5jb3VudHJ5ID0gJyc7XHJcbiAgICAgICAgYmlsbGluZ0FkZHJlc3NPYmoucG9zdENvZGUgPSAnJztcclxuICAgICAgICBiaWxsaW5nQWRkcmVzcy5wdXNoKGJpbGxpbmdBZGRyZXNzT2JqKTtcclxuICAgICAgICBjdXN0b21lck9iai5iaWxsaW5nQWRkcmVzcyA9IGJpbGxpbmdBZGRyZXNzO1xyXG5cclxuICAgICAgICBsZXQgc2hpcG1lbnREZXRhaWxzID0gW10gYXMgU2hpcG1lbnREZXRhaWxzW107XHJcbiAgICAgICAgdGhpcy5vcmRlckRldGFpbHMuc2hpcG1lbnRzLmZvckVhY2goXHJcbiAgICAgICAgICAgIHNoaXBtZW50ID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCBzaGlwbWVudERldGFpbHNPYmogPSB7fSBhcyBTaGlwbWVudERldGFpbHM7XHJcbiAgICAgICAgICAgICAgICBzaGlwbWVudERldGFpbHNPYmouaWQgPSBzaGlwbWVudC5zaGlwbWVudF9pZCA/IHNoaXBtZW50LnNoaXBtZW50X2lkIDogJyc7XHJcbiAgICAgICAgICAgICAgICBzaGlwbWVudERldGFpbHNPYmouZGVsaXZlcnlHcm91cCA9IHNoaXBtZW50LnNoaXBtZW50X2lkID8gc2hpcG1lbnQuc2hpcG1lbnRfaWQgOiAnJztcclxuICAgICAgICAgICAgICAgIHNoaXBtZW50RGV0YWlscy5wdXNoKHNoaXBtZW50RGV0YWlsc09iaik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICAgIGN1c3RvbWVyT2JqLnNoaXBtZW50RGV0YWlscyA9IHNoaXBtZW50RGV0YWlscztcclxuXHJcbiAgICAgICAgdGhpcy53ZWJSZXR1cm5PYmplY3QuY3VzdG9tZXIgPSBjdXN0b21lck9iajtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIk1hcHBlciBsaWJyYXJ5OiBXZWJSZXR1cm5TYWxlc2ZvcmNlTWFwcGVyQnVpbGRlckNsYXNzOiBjdXN0b21lciBtYXBwaW5nIGVuZGVkLi4uXCIpO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIGV4dGVybmFsVHJhbnNhY3Rpb25EZXRhaWxzKCkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiTWFwcGVyIGxpYnJhcnk6IFdlYlJldHVyblNhbGVzZm9yY2VNYXBwZXJCdWlsZGVyQ2xhc3M6IGV4dGVybmFsVHJhbnNhY3Rpb25EZXRhaWxzIG1hcHBpbmcgc3RhcnRlZC4uLlwiKTtcclxuICAgICAgICBsZXQgZXh0ZXJuYWxUcmFuc2FjdGlvbkRldGFpbHMgPSBbXSBhcyBleHRlcm5hbFRyYW5zYWN0aW9uRGV0YWlsc1tdO1xyXG4gICAgICAgIGlmICh0aGlzLm9yZGVyRGV0YWlscy5zaGlwbWVudHMgJiYgdGhpcy5vcmRlckRldGFpbHMuc2hpcG1lbnRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5vcmRlckRldGFpbHMuc2hpcG1lbnRzLmZvckVhY2goXHJcbiAgICAgICAgICAgICAgICBzaGlwbWVudCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGV4dGVybmFsVHJhbnNhY3Rpb25EZXRhaWxzT2JqID0ge30gYXMgZXh0ZXJuYWxUcmFuc2FjdGlvbkRldGFpbHM7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHRyYW5zYWN0aW9uSW5mbyA9IHt9IGFzIFRyYW5zYWN0aW9uSW5mbztcclxuICAgICAgICAgICAgICAgICAgICBleHRlcm5hbFRyYW5zYWN0aW9uRGV0YWlsc09iai51bmlxdWVJZCA9IHRoaXMub3JkZXJEZXRhaWxzLm9yZGVyX25vID8gdGhpcy5vcmRlckRldGFpbHMub3JkZXJfbm8gOiAnJztcclxuICAgICAgICAgICAgICAgICAgICBleHRlcm5hbFRyYW5zYWN0aW9uRGV0YWlsc09iai5wcm92aWRlclR5cGUgPSBQUk9WSURFUlMuU0FMRVNGT1JDRTtcclxuICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbkluZm8uc2hpcHBpbmdJZCA9IHNoaXBtZW50LnNoaXBwaW5nX21ldGhvZCAmJiBzaGlwbWVudC5zaGlwcGluZ19tZXRob2QuaWQgPyBzaGlwbWVudC5zaGlwcGluZ19tZXRob2QuaWQgOiAnJztcclxuICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbkluZm8uZXh0ZXJuYWxTaGlwcGluZ0lkID0gc2hpcG1lbnQuc2hpcG1lbnRfaWQgPyBzaGlwbWVudC5zaGlwbWVudF9pZCA6ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgIGV4dGVybmFsVHJhbnNhY3Rpb25EZXRhaWxzT2JqLmRldGFpbHMgPSB0cmFuc2FjdGlvbkluZm87XHJcbiAgICAgICAgICAgICAgICAgICAgZXh0ZXJuYWxUcmFuc2FjdGlvbkRldGFpbHMucHVzaChleHRlcm5hbFRyYW5zYWN0aW9uRGV0YWlsc09iaik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMud2ViUmV0dXJuT2JqZWN0LmV4dGVybmFsVHJhbnNhY3Rpb25EZXRhaWxzID0gZXh0ZXJuYWxUcmFuc2FjdGlvbkRldGFpbHM7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJNYXBwZXIgbGlicmFyeTogV2ViUmV0dXJuU2FsZXNmb3JjZU1hcHBlckJ1aWxkZXJDbGFzczogZXh0ZXJuYWxUcmFuc2FjdGlvbkRldGFpbHMgbWFwcGluZyBlbmRlZC4uLlwiKTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBiYXNrZXRTdW1tYXJ5KCkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiTWFwcGVyIGxpYnJhcnk6IFdlYlJldHVyblNhbGVzZm9yY2VNYXBwZXJCdWlsZGVyQ2xhc3M6IGJhc2tldFN1bW1hcnkgbWFwcGluZyBzdGFydGVkLi4uXCIpO1xyXG4gICAgICAgIGxldCBiYXNrZXRTdW1tYXJ5ID0ge30gYXMgQmFza2V0U3VtbWFyeTtcclxuICAgICAgICBsZXQgYmFza2V0U3VtbWFyeVdlYk9yZGVyID0ge30gYXMgQmFza2V0U3VtbWFyeURldGFpbHM7XHJcbiAgICAgICAgY29uc3QgbGluZVByb21vdGlvblRvdGFsID0gdGhpcy53ZWJSZXR1cm5PYmplY3QuYmFza2V0LmxpbmVQcm9tb3Rpb24ubWFwKGxpbmVQcm9tb3Rpb24gPT4gbGluZVByb21vdGlvbi5wcm9tb3Rpb25BbW91bnQpLnJlZHVjZSgoYWNjdW11bGF0b3IsIGN1cnJlbnRWYWx1ZSkgPT4gYWNjdW11bGF0b3IgKyBjdXJyZW50VmFsdWUsIDApO1xyXG4gICAgICAgIGNvbnN0IHRyYW5zYWN0aW9uUHJvbW90aW9uVG90YWwgPSB0aGlzLndlYlJldHVybk9iamVjdC5iYXNrZXQudHJhbnNhY3Rpb25Qcm9tb3Rpb24ubWFwKHRyYW5zYWN0aW9uUHJvbW90aW9uID0+IHRyYW5zYWN0aW9uUHJvbW90aW9uLnByb21vdGlvbkFtb3VudCkucmVkdWNlKChhY2N1bXVsYXRvciwgY3VycmVudFZhbHVlKSA9PiBhY2N1bXVsYXRvciArIGN1cnJlbnRWYWx1ZSwgMCk7XHJcbiAgICAgICAgYmFza2V0U3VtbWFyeS5kaXNjb3VudFRvdGFsID0gbGluZVByb21vdGlvblRvdGFsICsgdHJhbnNhY3Rpb25Qcm9tb3Rpb25Ub3RhbDtcclxuICAgICAgICBiYXNrZXRTdW1tYXJ5LlZBVFRvdGFsID0gdGhpcy5vcmRlckRldGFpbHMudGF4X3RvdGFsID8gdGhpcy5vcmRlckRldGFpbHMudGF4X3RvdGFsIDogMDtcclxuICAgICAgICBiYXNrZXRTdW1tYXJ5LnNhbGVUb3RhbCA9IHRoaXMub3JkZXJEZXRhaWxzLm9yZGVyX3RvdGFsID8gdGhpcy5vcmRlckRldGFpbHMub3JkZXJfdG90YWwgOiAwO1xyXG4gICAgICAgIGJhc2tldFN1bW1hcnkuYmFza2V0VG90YWwgPSB0aGlzLm9yZGVyRGV0YWlscy5vcmRlcl90b3RhbCA/IHRoaXMub3JkZXJEZXRhaWxzLm9yZGVyX3RvdGFsIDogMDtcclxuICAgICAgICBiYXNrZXRTdW1tYXJ5LnRvdGFsSXRlbXMgPSB0aGlzLm9yZGVyRGV0YWlscy5wcm9kdWN0X2l0ZW1zICYmIHRoaXMub3JkZXJEZXRhaWxzLnByb2R1Y3RfaXRlbXMubGVuZ3RoID4gMCA/IHRoaXMub3JkZXJEZXRhaWxzLnByb2R1Y3RfaXRlbXMubGVuZ3RoIDogMDtcclxuICAgICAgICBiYXNrZXRTdW1tYXJ5LmJhc2tldFRvdGFsV2l0aFNoaXBwaW5nVG90YWwgPSB0aGlzLm9yZGVyRGV0YWlscy5vcmRlcl90b3RhbCA/IHRoaXMub3JkZXJEZXRhaWxzLm9yZGVyX3RvdGFsIDogMDtcclxuICAgICAgICBiYXNrZXRTdW1tYXJ5V2ViT3JkZXIuc2hpcHBpbmdUb3RhbCA9IHRoaXMub3JkZXJEZXRhaWxzLnNoaXBwaW5nX3RvdGFsID8gdGhpcy5vcmRlckRldGFpbHMuc2hpcHBpbmdfdG90YWwgOiAwO1xyXG4gICAgICAgIGJhc2tldFN1bW1hcnlXZWJPcmRlci5iYXNrZXRUb3RhbFdpdGhTaGlwcGluZ1RvdGFsID0gdGhpcy5vcmRlckRldGFpbHMub3JkZXJfdG90YWwgPyB0aGlzLm9yZGVyRGV0YWlscy5vcmRlcl90b3RhbCA6IDA7XHJcbiAgICAgICAgYmFza2V0U3VtbWFyeS53ZWJPcmRlciA9IGJhc2tldFN1bW1hcnlXZWJPcmRlcjtcclxuICAgICAgICB0aGlzLndlYlJldHVybk9iamVjdC5iYXNrZXRTdW1tYXJ5ID0gYmFza2V0U3VtbWFyeTtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIk1hcHBlciBsaWJyYXJ5OiBXZWJSZXR1cm5TYWxlc2ZvcmNlTWFwcGVyQnVpbGRlckNsYXNzOiBiYXNrZXRTdW1tYXJ5IG1hcHBpbmcgZW5kZWQuLi5cIik7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgZGV2aWNlSWQoZGV2aWNlSWQpIHtcclxuICAgICAgICB0aGlzLndlYlJldHVybk9iamVjdC5kZXZpY2VJZCA9IGRldmljZUlkO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIHRlcm1pbmFsSWQodGVybWluYWxJZCkge1xyXG4gICAgICAgIHRoaXMud2ViUmV0dXJuT2JqZWN0LnRlcm1pbmFsSWQgPSB0ZXJtaW5hbElkO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIG9yZ0NvZGUob3JnQ29kZSkge1xyXG4gICAgICAgIHRoaXMud2ViUmV0dXJuT2JqZWN0Lm9yZ0NvZGUgPSBvcmdDb2RlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIHN0b3JlSWQoc3RvcmVJZCkge1xyXG4gICAgICAgIHRoaXMud2ViUmV0dXJuT2JqZWN0LnN0b3JlSWQgPSBzdG9yZUlkO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIHN0b3JlTm9kZUlkKHN0b3JlTm9kZUlkOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLndlYlJldHVybk9iamVjdC5zdG9yZU5vZGVJZCA9IHN0b3JlTm9kZUlkO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIHN0b3JlTm9kZVN0cnVjdHVyZShzdG9yZU5vZGVTdHJ1Y3R1cmU6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMud2ViUmV0dXJuT2JqZWN0LnN0b3JlTm9kZVN0cnVjdHVyZSA9IHN0b3JlTm9kZVN0cnVjdHVyZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBkb2NJZChkb2NJZCkge1xyXG4gICAgICAgIHRoaXMud2ViUmV0dXJuT2JqZWN0LmlkID0gZG9jSWQ7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlVXNlcklEKHVzZXJJRDogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy53ZWJSZXR1cm5PYmplY3QudXNlcklkID0gdXNlcklEO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVVzZXJOYW1lKG5hbWUpIHtcclxuICAgICAgICB0aGlzLndlYlJldHVybk9iamVjdC51c2VyTmFtZSA9IG5hbWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgYnVpbGQoKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJNYXBwZXIgbGlicmFyeTogV2ViUmV0dXJuU2FsZXNmb3JjZU1hcHBlckJ1aWxkZXJDbGFzczogbWFwcGluZyBkb25lLi4uXCIpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLndlYlJldHVybk9iamVjdDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRVVENEYXRlVGltZShkYXRlKSB7XHJcbiAgICAgICAgaWYgKGRhdGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKGRhdGUpLnRvSVNPU3RyaW5nKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiJdfQ==
|