@pmcretail/mapper-library 0.0.1 → 0.0.2
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/README.md +2 -2
- package/bundles/pmcretail-mapper-library.umd.js +6133 -0
- package/bundles/pmcretail-mapper-library.umd.js.map +1 -0
- package/bundles/pmcretail-mapper-library.umd.min.js +16 -0
- package/bundles/pmcretail-mapper-library.umd.min.js.map +1 -0
- package/esm2015/lib/RJ-mapper.class.js +1061 -0
- package/esm2015/lib/TransactionDocumentBuilder.js +1535 -0
- package/esm2015/lib/basket.service.js +851 -0
- package/esm2015/lib/mapper-library.component.js +27 -0
- package/esm2015/lib/mapper-library.model.js +974 -0
- package/esm2015/lib/mapper-library.module.js +21 -0
- package/esm2015/lib/number-util.service.js +77 -0
- package/esm2015/pmcretail-mapper-library.js +10 -0
- package/esm2015/public-api.js +12 -0
- package/esm5/lib/RJ-mapper.class.js +1262 -0
- package/esm5/lib/TransactionDocumentBuilder.js +2469 -0
- package/esm5/lib/basket.service.js +1076 -0
- package/esm5/lib/mapper-library.component.js +29 -0
- package/esm5/lib/mapper-library.model.js +974 -0
- package/esm5/lib/mapper-library.module.js +25 -0
- package/esm5/lib/number-util.service.js +94 -0
- package/esm5/pmcretail-mapper-library.js +10 -0
- package/esm5/public-api.js +12 -0
- package/{fesm2020/pmcretail-mapper-library.mjs → fesm2015/pmcretail-mapper-library.js} +2627 -602
- package/fesm2015/pmcretail-mapper-library.js.map +1 -0
- package/fesm5/pmcretail-mapper-library.js +5919 -0
- package/fesm5/pmcretail-mapper-library.js.map +1 -0
- package/lib/TransactionDocumentBuilder.d.ts +1 -1
- package/lib/basket.service.d.ts +1 -5
- package/lib/mapper-library.component.d.ts +0 -3
- package/lib/mapper-library.module.d.ts +0 -5
- package/lib/number-util.service.d.ts +2 -4
- package/package.json +16 -26
- package/pmcretail-mapper-library.d.ts +1 -1
- package/pmcretail-mapper-library.metadata.json +1 -0
- package/public-api.d.ts +0 -1
- package/esm2020/lib/RJ-mapper.class.mjs +0 -597
- package/esm2020/lib/TransactionDocumentBuilder.mjs +0 -1240
- package/esm2020/lib/basket.service.mjs +0 -527
- package/esm2020/lib/mapper-library.component.mjs +0 -26
- package/esm2020/lib/mapper-library.model.mjs +0 -20
- package/esm2020/lib/mapper-library.module.mjs +0 -21
- package/esm2020/lib/mapper-library.service.mjs +0 -56
- package/esm2020/lib/number-util.service.mjs +0 -41
- package/esm2020/pmcretail-mapper-library.mjs +0 -5
- package/esm2020/public-api.mjs +0 -8
- package/fesm2015/pmcretail-mapper-library.mjs +0 -2526
- package/fesm2015/pmcretail-mapper-library.mjs.map +0 -1
- package/fesm2020/pmcretail-mapper-library.mjs.map +0 -1
- package/lib/mapper-library.service.d.ts +0 -9
|
@@ -0,0 +1,1262 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview added by tsickle
|
|
3
|
+
* Generated from: lib/RJ-mapper.class.ts
|
|
4
|
+
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
|
|
5
|
+
*/
|
|
6
|
+
import { DISCOUNTTYPE, TRANSACTION_TYPE } from "./mapper-library.model";
|
|
7
|
+
import { TransactionDocumentBuilder } from "./TransactionDocumentBuilder";
|
|
8
|
+
var RJMapperBuilderClass = /** @class */ (function () {
|
|
9
|
+
function RJMapperBuilderClass(transactionDoc) {
|
|
10
|
+
this.productQuantity = 0;
|
|
11
|
+
this.itemCount = 0;
|
|
12
|
+
this.largestNumber = 0;
|
|
13
|
+
this.rjObject = {};
|
|
14
|
+
this.paymentTypes = [
|
|
15
|
+
{
|
|
16
|
+
paymentType: 'Card',
|
|
17
|
+
type: 'SEPAY',
|
|
18
|
+
tenderType: '5',
|
|
19
|
+
tenderSubType: '8',
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
paymentType: 'Cash',
|
|
23
|
+
type: 'TMC_CASH',
|
|
24
|
+
tenderType: '1',
|
|
25
|
+
tenderSubType: '0'
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
paymentType: 'PDQ',
|
|
29
|
+
type: 'Unintegrated',
|
|
30
|
+
tenderType: '2',
|
|
31
|
+
tenderSubType: '8'
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
paymentType: 'Gift Card',
|
|
35
|
+
type: 'TMC_GIFTCARD',
|
|
36
|
+
tenderType: '5',
|
|
37
|
+
tenderSubType: '8'
|
|
38
|
+
}
|
|
39
|
+
];
|
|
40
|
+
if (transactionDoc) {
|
|
41
|
+
this.transactionDocument = transactionDoc;
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
this.transactionDocument = {
|
|
45
|
+
transactionId: "",
|
|
46
|
+
offlineTransactionId: "",
|
|
47
|
+
transactionRef: "",
|
|
48
|
+
dateTime: "",
|
|
49
|
+
orgCode: "",
|
|
50
|
+
storeId: "",
|
|
51
|
+
storeNodeId: "",
|
|
52
|
+
storeNodeStructure: "",
|
|
53
|
+
deviceId: "",
|
|
54
|
+
terminalId: "",
|
|
55
|
+
userId: "",
|
|
56
|
+
initiatingModule: "eBasket",
|
|
57
|
+
export: false,
|
|
58
|
+
basket: (/** @type {?} */ ({})),
|
|
59
|
+
basketSummary: (/** @type {?} */ ({})),
|
|
60
|
+
baseCurrency: "",
|
|
61
|
+
type: "",
|
|
62
|
+
operationStatus: "",
|
|
63
|
+
createdAt: "",
|
|
64
|
+
updatedAt: "",
|
|
65
|
+
id: "",
|
|
66
|
+
currentTransactionDetails: (/** @type {?} */ ({})),
|
|
67
|
+
saleTotal: 0,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
this.initilizeItemCount();
|
|
71
|
+
this.setLineNumberForProducts();
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* @template THIS
|
|
75
|
+
* @this {THIS}
|
|
76
|
+
* @return {THIS}
|
|
77
|
+
*/
|
|
78
|
+
RJMapperBuilderClass.prototype.getPosbasketInfo = /**
|
|
79
|
+
* @template THIS
|
|
80
|
+
* @this {THIS}
|
|
81
|
+
* @return {THIS}
|
|
82
|
+
*/
|
|
83
|
+
function () {
|
|
84
|
+
(/** @type {?} */ (this)).rjObject['Keyword'] = (/** @type {?} */ (this)).generateKeyword();
|
|
85
|
+
(/** @type {?} */ (this)).rjObject['ID'] = (/** @type {?} */ (this)).generateId((/** @type {?} */ (this)).transactionDocument.createdAt);
|
|
86
|
+
(/** @type {?} */ (this)).rjObject['XMLSchemaVersion'] = '2';
|
|
87
|
+
(/** @type {?} */ (this)).rjObject['LastUpdated'] = (/** @type {?} */ (this)).transactionDocument.updatedAt;
|
|
88
|
+
(/** @type {?} */ (this)).rjObject['MajorVersion'] = (/** @type {?} */ (this)).majorVersion;
|
|
89
|
+
(/** @type {?} */ (this)).rjObject['MinorVersion'] = (/** @type {?} */ (this)).minorVersion;
|
|
90
|
+
(/** @type {?} */ (this)).rjObject['ManifestVersion'] = (/** @type {?} */ (this)).manifestVersion;
|
|
91
|
+
(/** @type {?} */ (this)).rjObject['DatabaseSchemaVersion'] = (/** @type {?} */ (this)).databaseSchemaVersion;
|
|
92
|
+
(/** @type {?} */ (this)).rjObject['BasketType'] = (/** @type {?} */ (this)).basketType;
|
|
93
|
+
(/** @type {?} */ (this)).rjObject['State'] = (/** @type {?} */ (this)).getState();
|
|
94
|
+
(/** @type {?} */ (this)).rjObject['ExternalState'] = (/** @type {?} */ (this)).externalState;
|
|
95
|
+
return (/** @type {?} */ (this));
|
|
96
|
+
};
|
|
97
|
+
/**
|
|
98
|
+
* @template THIS
|
|
99
|
+
* @this {THIS}
|
|
100
|
+
* @return {THIS}
|
|
101
|
+
*/
|
|
102
|
+
RJMapperBuilderClass.prototype.getheaderInfo = /**
|
|
103
|
+
* @template THIS
|
|
104
|
+
* @this {THIS}
|
|
105
|
+
* @return {THIS}
|
|
106
|
+
*/
|
|
107
|
+
function () {
|
|
108
|
+
(/** @type {?} */ (this)).rjObject['Header'] = {};
|
|
109
|
+
(/** @type {?} */ (this)).rjObject['Header'].TimeZoneOffset = (/** @type {?} */ (this)).convertToString((/** @type {?} */ (this)).generateTimezoneoffset((/** @type {?} */ (this)).transactionDocument.createdAt));
|
|
110
|
+
(/** @type {?} */ (this)).rjObject['Header'].DateTimeCreated = (/** @type {?} */ (this)).transactionDocument.createdAt;
|
|
111
|
+
(/** @type {?} */ (this)).rjObject['Header'].OriginatedBy = {};
|
|
112
|
+
(/** @type {?} */ (this)).rjObject['Header'].OriginatedBy.DeviceID = (/** @type {?} */ (this)).deviceId;
|
|
113
|
+
(/** @type {?} */ (this)).rjObject['Header'].OriginatedBy.CashierID = (/** @type {?} */ (this)).cashierId;
|
|
114
|
+
(/** @type {?} */ (this)).rjObject['Header'].OriginatedBy.CompanyID = (/** @type {?} */ (this)).companyId;
|
|
115
|
+
(/** @type {?} */ (this)).rjObject['Header'].OriginatedBy.StoreID = (/** @type {?} */ (this)).transactionDocument.storeId;
|
|
116
|
+
(/** @type {?} */ (this)).rjObject['Header'].OriginatedBy.BranchID = (/** @type {?} */ (this)).transactionDocument.storeId;
|
|
117
|
+
(/** @type {?} */ (this)).rjObject['Header'].OriginatedBy.TerminalNumber = (/** @type {?} */ (this)).terminalNumber;
|
|
118
|
+
(/** @type {?} */ (this)).rjObject['Header'].OriginatedBy.TransactionNumber = (/** @type {?} */ (this)).transactionNumber;
|
|
119
|
+
(/** @type {?} */ (this)).rjObject['Header'].TaxMethodID = (/** @type {?} */ (this)).taxMethodId;
|
|
120
|
+
(/** @type {?} */ (this)).rjObject['Header'].DynamicStockLookup = (/** @type {?} */ (this)).generateDynamicStockLookUp(); //todo
|
|
121
|
+
(/** @type {?} */ (this)).rjObject['Header'].BasketLanguageID = (/** @type {?} */ (this)).basketLanguageId; //todo
|
|
122
|
+
(/** @type {?} */ (this)).rjObject['Header'].BasketCountryID = (/** @type {?} */ (this)).basketCountryId; //todo
|
|
123
|
+
(/** @type {?} */ (this)).rjObject['Header'].BasketCurrencyID = (/** @type {?} */ (this)).transactionDocument.baseCurrency;
|
|
124
|
+
(/** @type {?} */ (this)).rjObject['Header'].TradingRegionID = (/** @type {?} */ (this)).tradingRegionId;
|
|
125
|
+
(/** @type {?} */ (this)).rjObject['Header'].Eurozone = " "; //unknown
|
|
126
|
+
(/** @type {?} */ (this)).rjObject['Header'].EuroBaseExchangeRate = ""; //unknown
|
|
127
|
+
(/** @type {?} */ (this)).rjObject['Header'].PrintableName = ""; //unknown
|
|
128
|
+
return (/** @type {?} */ (this));
|
|
129
|
+
};
|
|
130
|
+
/**
|
|
131
|
+
* @template THIS
|
|
132
|
+
* @this {THIS}
|
|
133
|
+
* @return {THIS}
|
|
134
|
+
*/
|
|
135
|
+
RJMapperBuilderClass.prototype.rjMapper = /**
|
|
136
|
+
* @template THIS
|
|
137
|
+
* @this {THIS}
|
|
138
|
+
* @return {THIS}
|
|
139
|
+
*/
|
|
140
|
+
function () {
|
|
141
|
+
var _this = this;
|
|
142
|
+
if ((/** @type {?} */ (this)).transactionDocument.type === TRANSACTION_TYPE.SALE) {
|
|
143
|
+
(/** @type {?} */ (this)).rjObject['ProductSale'] = [];
|
|
144
|
+
(/** @type {?} */ (this)).rjObject['ModifierItem'] = [];
|
|
145
|
+
(/** @type {?} */ (this)).transactionDocument.basket.products.forEach((/**
|
|
146
|
+
* @param {?} element
|
|
147
|
+
* @return {?}
|
|
148
|
+
*/
|
|
149
|
+
function (element) {
|
|
150
|
+
/** @type {?} */
|
|
151
|
+
var lineDiscount = [];
|
|
152
|
+
if ((/** @type {?} */ (_this)).transactionDocument.basket.lineDiscount && (/** @type {?} */ (_this)).transactionDocument.basket.lineDiscount.length > 0) {
|
|
153
|
+
lineDiscount = (/** @type {?} */ (_this)).transactionDocument.basket.lineDiscount.filter((/**
|
|
154
|
+
* @param {?} x
|
|
155
|
+
* @return {?}
|
|
156
|
+
*/
|
|
157
|
+
function (x) { return x.itemLineId === element.itemLineId; }));
|
|
158
|
+
if (lineDiscount.length > 0) {
|
|
159
|
+
/** @type {?} */
|
|
160
|
+
var index = (/** @type {?} */ (_this)).transactionDocument.basket.lineDiscount.indexOf(lineDiscount[0]);
|
|
161
|
+
if (index > -1) {
|
|
162
|
+
(/** @type {?} */ (_this)).transactionDocument.basket.lineDiscount.splice(index, 1);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
/** @type {?} */
|
|
167
|
+
var data = (/** @type {?} */ (_this)).addProduct(element, (lineDiscount.length > 0 ? lineDiscount[0] : null));
|
|
168
|
+
(/** @type {?} */ (_this)).rjObject['ProductSale'].push(data);
|
|
169
|
+
(/** @type {?} */ (_this)).getModifierItem(lineDiscount.length > 0 ? lineDiscount[0] : null, element.itemLineId);
|
|
170
|
+
}));
|
|
171
|
+
}
|
|
172
|
+
else if ((/** @type {?} */ (this)).transactionDocument.type === TRANSACTION_TYPE.REFUND) {
|
|
173
|
+
(/** @type {?} */ (this)).rjObject['ProductReturn'] = [];
|
|
174
|
+
(/** @type {?} */ (this)).rjObject['ModifierItem'] = [];
|
|
175
|
+
(/** @type {?} */ (this)).transactionDocument.basket.products.forEach((/**
|
|
176
|
+
* @param {?} element
|
|
177
|
+
* @return {?}
|
|
178
|
+
*/
|
|
179
|
+
function (element) {
|
|
180
|
+
/** @type {?} */
|
|
181
|
+
var data = (/** @type {?} */ (_this)).returnProduct(element, (element.hasOwnProperty('lineDiscount') ? element.lineDiscount : null));
|
|
182
|
+
(/** @type {?} */ (_this)).rjObject['ProductReturn'].push(data);
|
|
183
|
+
(/** @type {?} */ (_this)).getModifierItem(element.lineDiscount, element.itemLineId);
|
|
184
|
+
}));
|
|
185
|
+
}
|
|
186
|
+
else if ((/** @type {?} */ (this)).transactionDocument.type === TRANSACTION_TYPE.SALE_REFUND) {
|
|
187
|
+
(/** @type {?} */ (this)).rjObject['ProductReturn'] = [];
|
|
188
|
+
(/** @type {?} */ (this)).rjObject['ModifierItem'] = [];
|
|
189
|
+
/** @type {?} */
|
|
190
|
+
var transactionDoc = new TransactionDocumentBuilder().basket((/** @type {?} */ (this)).transactionDocument.currentTransactionDetails).build();
|
|
191
|
+
transactionDoc.basket.products.forEach((/**
|
|
192
|
+
* @param {?} element
|
|
193
|
+
* @return {?}
|
|
194
|
+
*/
|
|
195
|
+
function (element) {
|
|
196
|
+
/** @type {?} */
|
|
197
|
+
var data = (/** @type {?} */ (_this)).returnProduct(element, (element.hasOwnProperty('lineDiscount') ? element.lineDiscount : null));
|
|
198
|
+
(/** @type {?} */ (_this)).rjObject['ProductReturn'].push(data);
|
|
199
|
+
(/** @type {?} */ (_this)).getModifierItem(element.lineDiscount, element.itemLineId);
|
|
200
|
+
}));
|
|
201
|
+
}
|
|
202
|
+
else if ((/** @type {?} */ (this)).transactionDocument.type === TRANSACTION_TYPE.SALE_EXCHANGE) {
|
|
203
|
+
(/** @type {?} */ (this)).rjObject['ProductReturn'] = [];
|
|
204
|
+
(/** @type {?} */ (this)).rjObject['ProductSale'] = [];
|
|
205
|
+
(/** @type {?} */ (this)).rjObject['ModifierItem'] = [];
|
|
206
|
+
/** @type {?} */
|
|
207
|
+
var transactionDoc = new TransactionDocumentBuilder().basket((/** @type {?} */ (this)).transactionDocument.currentTransactionDetails).build();
|
|
208
|
+
transactionDoc.basket.products.forEach((/**
|
|
209
|
+
* @param {?} element
|
|
210
|
+
* @return {?}
|
|
211
|
+
*/
|
|
212
|
+
function (element) {
|
|
213
|
+
if (element.refundedQuantity > 0) {
|
|
214
|
+
/** @type {?} */
|
|
215
|
+
var returnProduct = (/** @type {?} */ (_this)).returnProduct(element, (element.hasOwnProperty('lineDiscount') ? element.lineDiscount : null));
|
|
216
|
+
(/** @type {?} */ (_this)).rjObject['ProductReturn'].push(returnProduct);
|
|
217
|
+
}
|
|
218
|
+
else {
|
|
219
|
+
/** @type {?} */
|
|
220
|
+
var addProduct = (/** @type {?} */ (_this)).addProduct(element, (element.hasOwnProperty('lineDiscount') ? element.lineDiscount : null));
|
|
221
|
+
(/** @type {?} */ (_this)).rjObject['ProductSale'].push(addProduct);
|
|
222
|
+
}
|
|
223
|
+
(/** @type {?} */ (_this)).getModifierItem(element.lineDiscount, element.itemLineId);
|
|
224
|
+
}));
|
|
225
|
+
}
|
|
226
|
+
return (/** @type {?} */ (this));
|
|
227
|
+
};
|
|
228
|
+
/**
|
|
229
|
+
* @template THIS
|
|
230
|
+
* @this {THIS}
|
|
231
|
+
* @return {THIS}
|
|
232
|
+
*/
|
|
233
|
+
RJMapperBuilderClass.prototype.getBasketDiscount = /**
|
|
234
|
+
* @template THIS
|
|
235
|
+
* @this {THIS}
|
|
236
|
+
* @return {THIS}
|
|
237
|
+
*/
|
|
238
|
+
function () {
|
|
239
|
+
var _this = this;
|
|
240
|
+
(/** @type {?} */ (this)).rjObject['BasketDiscount'] = [];
|
|
241
|
+
if (!(/** @type {?} */ (this)).transactionDocument.basket.transactionDiscount)
|
|
242
|
+
return (/** @type {?} */ (this));
|
|
243
|
+
(/** @type {?} */ (this)).transactionDocument.basket.transactionDiscount.forEach((/**
|
|
244
|
+
* @param {?} element
|
|
245
|
+
* @return {?}
|
|
246
|
+
*/
|
|
247
|
+
function (element) {
|
|
248
|
+
/** @type {?} */
|
|
249
|
+
var obj = {};
|
|
250
|
+
obj['XMLSchemaVersion'] = 1;
|
|
251
|
+
obj['NetValue'] = element.discountAmount < 0 ? element.discountAmount : -element.discountAmount;
|
|
252
|
+
obj['EffectiveNetValue'] = element.discountAmount < 0 ? element.discountAmount : -element.discountAmount;
|
|
253
|
+
obj['Description'] = element.reasonCode;
|
|
254
|
+
obj['UserID'] = (/** @type {?} */ (_this)).transactionDocument.basket.userId;
|
|
255
|
+
obj['ReasonCodeID'] = element.reasonCode;
|
|
256
|
+
obj['DiscountType'] = element.discountType.toUpperCase() == DISCOUNTTYPE.PERCENT.toUpperCase() ? 0 : 1; // todo - compare values
|
|
257
|
+
obj['RoundingRule'] = 2;
|
|
258
|
+
obj['ModifiedLineNumber '] = [];
|
|
259
|
+
element.itemLineIds.forEach((/**
|
|
260
|
+
* @param {?} element
|
|
261
|
+
* @return {?}
|
|
262
|
+
*/
|
|
263
|
+
function (element) {
|
|
264
|
+
obj['ModifiedLineNumber'].push(element);
|
|
265
|
+
}));
|
|
266
|
+
obj['LineNumber'] = (/** @type {?} */ (_this)).generateLineNumber();
|
|
267
|
+
// obj['DiscountedValue'] = obj['discountAmount'] // todo - confirm value before discount;
|
|
268
|
+
// obj['DiscountPercentage'] = obj['discountAmount'] / 100 ; // todo - optional
|
|
269
|
+
(/** @type {?} */ (_this)).rjObject['BasketDiscount'].push(obj);
|
|
270
|
+
}));
|
|
271
|
+
return (/** @type {?} */ (this));
|
|
272
|
+
};
|
|
273
|
+
/**
|
|
274
|
+
* @param {?} data
|
|
275
|
+
* @param {?} lineNo
|
|
276
|
+
* @return {?}
|
|
277
|
+
*/
|
|
278
|
+
RJMapperBuilderClass.prototype.getModifierItem = /**
|
|
279
|
+
* @param {?} data
|
|
280
|
+
* @param {?} lineNo
|
|
281
|
+
* @return {?}
|
|
282
|
+
*/
|
|
283
|
+
function (data, lineNo) {
|
|
284
|
+
if (data && lineNo) {
|
|
285
|
+
/** @type {?} */
|
|
286
|
+
var obj = {};
|
|
287
|
+
obj.XMLSchemaVersion = 1;
|
|
288
|
+
obj.LineNumber = this.generateLineNumber();
|
|
289
|
+
obj.NetValue = 0;
|
|
290
|
+
obj.EffectiveNetValue = 0;
|
|
291
|
+
obj.Description = data.percentageDiscountReasonName ? data.percentageDiscountReasonName : data.priceOverrideReasonName;
|
|
292
|
+
obj.DeviceID = this.deviceId;
|
|
293
|
+
obj.UserID = this.userId;
|
|
294
|
+
obj.DateTimeCreated = this.transactionDocument.updatedAt;
|
|
295
|
+
obj.AuthorisingUserID = this.userId;
|
|
296
|
+
obj.ReasonCodeID = data.percentageDiscountReasonCode ? data.percentageDiscountReasonCode : data.priceOverrideReasonCode;
|
|
297
|
+
obj.ModifiedLineNumber = lineNo;
|
|
298
|
+
obj.ModifiedIndex = 1;
|
|
299
|
+
this.rjObject['ModifierItem'].push(obj);
|
|
300
|
+
}
|
|
301
|
+
};
|
|
302
|
+
/**
|
|
303
|
+
* @template THIS
|
|
304
|
+
* @this {THIS}
|
|
305
|
+
* @return {THIS}
|
|
306
|
+
*/
|
|
307
|
+
RJMapperBuilderClass.prototype.getTrailerInfo = /**
|
|
308
|
+
* @template THIS
|
|
309
|
+
* @this {THIS}
|
|
310
|
+
* @return {THIS}
|
|
311
|
+
*/
|
|
312
|
+
function () {
|
|
313
|
+
var _this = this;
|
|
314
|
+
(/** @type {?} */ (this)).rjObject['Trailer'] = {};
|
|
315
|
+
(/** @type {?} */ (this)).rjObject.Trailer.DateTimeCompleted = (/** @type {?} */ (this)).transactionDocument.updatedAt;
|
|
316
|
+
(/** @type {?} */ (this)).rjObject.Trailer.CompletedBy = {};
|
|
317
|
+
(/** @type {?} */ (this)).rjObject.Trailer.CompletedBy.DeviceID = (/** @type {?} */ (this)).deviceId; //todo
|
|
318
|
+
(/** @type {?} */ (this)).rjObject.Trailer.CompletedBy.CashierID = (/** @type {?} */ (this)).cashierId; //todo
|
|
319
|
+
(/** @type {?} */ (this)).rjObject.Trailer.CompletedBy.StoreID = (/** @type {?} */ (this)).transactionDocument.storeId;
|
|
320
|
+
(/** @type {?} */ (this)).rjObject.Trailer.CompletedBy.BranchID = (/** @type {?} */ (this)).transactionDocument.storeId;
|
|
321
|
+
(/** @type {?} */ (this)).rjObject.Trailer.CompletedBy.TerminalNumber = (/** @type {?} */ (this)).transactionDocument.terminalId;
|
|
322
|
+
(/** @type {?} */ (this)).rjObject.Trailer.Total = (/** @type {?} */ (this)).convertToString((/** @type {?} */ (this)).transactionDocument.basketSummary.basketTotal * 100);
|
|
323
|
+
(/** @type {?} */ (this)).rjObject.Trailer.ItemCount = (/** @type {?} */ (this)).itemCount; //gives total count for product
|
|
324
|
+
(/** @type {?} */ (this)).rjObject.Trailer.ItemQuantity = (/** @type {?} */ (this)).convertToString((/** @type {?} */ (this)).transactionDocument.basketSummary.totalItems);
|
|
325
|
+
(/** @type {?} */ (this)).rjObject.Trailer.NetItemQuantity = (/** @type {?} */ (this)).convertToString((/** @type {?} */ (this)).transactionDocument.basketSummary.totalItems);
|
|
326
|
+
(/** @type {?} */ (this)).rjObject.Trailer.TaxTotal = (/** @type {?} */ (this)).convertToString((/** @type {?} */ (this)).transactionDocument.basketSummary.VATTotal);
|
|
327
|
+
(/** @type {?} */ (this)).rjObject.Trailer.SequenceDeviceID = (/** @type {?} */ (this)).deviceId;
|
|
328
|
+
(/** @type {?} */ (this)).rjObject.Trailer.SequenceNumber = 'snsn'; //static for now
|
|
329
|
+
(/** @type {?} */ (this)).rjObject['Trailer']['TaxItem'] = [];
|
|
330
|
+
(/** @type {?} */ (this)).transactionDocument.basket.taxBreakdown.taxLines.forEach((/**
|
|
331
|
+
* @param {?} element
|
|
332
|
+
* @return {?}
|
|
333
|
+
*/
|
|
334
|
+
function (element) {
|
|
335
|
+
/** @type {?} */
|
|
336
|
+
var obj = {};
|
|
337
|
+
obj['XMLSchemaVersion'] = (/** @type {?} */ (_this)).xmlSchemaVersion;
|
|
338
|
+
obj['TaxRate'] = element.VAT;
|
|
339
|
+
obj['TaxableTotal'] = (/** @type {?} */ (_this)).convertToString(element.taxableAmount);
|
|
340
|
+
obj['TaxTotal'] = (/** @type {?} */ (_this)).convertToString(element.taxLineTotal);
|
|
341
|
+
obj['TaxDescription'] = (/** @type {?} */ (_this)).convertToString(element.VATCode);
|
|
342
|
+
obj['TaxIncluded'] = '1';
|
|
343
|
+
obj['TaxPercentage'] = element.VAT; // todo
|
|
344
|
+
(/** @type {?} */ (_this)).rjObject['Trailer']['TaxItem'].push(obj);
|
|
345
|
+
}));
|
|
346
|
+
// TODO: make Trailer object from promotion
|
|
347
|
+
(/** @type {?} */ (this)).rjObject['Trailer']['PromotionItem'] = [];
|
|
348
|
+
(/** @type {?} */ (this)).transactionDocument.basket.linePromotion.forEach((/**
|
|
349
|
+
* @param {?} element
|
|
350
|
+
* @return {?}
|
|
351
|
+
*/
|
|
352
|
+
function (element) {
|
|
353
|
+
/** @type {?} */
|
|
354
|
+
var obj = {};
|
|
355
|
+
obj['PromotionID'] = element.promotionId;
|
|
356
|
+
obj['PromotionSaving'] = element.promotionAmount < 0 ? element.promotionAmount : -element.promotionAmount;
|
|
357
|
+
obj['PromotionQuantity'] = ""; // todo - not avaialble
|
|
358
|
+
obj['PromotionDescription'] = element.displayText;
|
|
359
|
+
obj['PromotionHit']['XMLSchemaVersion'] = (/** @type {?} */ (_this)).transactionDocument.storeId;
|
|
360
|
+
obj['PromotionHit']['HitNumber'] = ""; // todo;
|
|
361
|
+
obj['PromotionHit']['HitQuantity'] = ""; // todo;
|
|
362
|
+
obj['PromotionHit']['HitSaving'] = ""; // todo;
|
|
363
|
+
obj['PromotionHit']['PromotionTrigger'] = [];
|
|
364
|
+
element.trigger.forEach((/**
|
|
365
|
+
* @param {?} subElement
|
|
366
|
+
* @return {?}
|
|
367
|
+
*/
|
|
368
|
+
function (subElement) {
|
|
369
|
+
/** @type {?} */
|
|
370
|
+
var objSub = {};
|
|
371
|
+
/** @type {?} */
|
|
372
|
+
var product = (/** @type {?} */ (_this)).transactionDocument.basket.products.find((/**
|
|
373
|
+
* @param {?} item
|
|
374
|
+
* @return {?}
|
|
375
|
+
*/
|
|
376
|
+
function (item) { return item.lineItemId == subElement.itemLineId; }));
|
|
377
|
+
objSub['XMLSchemaVersion'] = (/** @type {?} */ (_this)).xmlSchemaVersion;
|
|
378
|
+
objSub['ProductID'] = (/** @type {?} */ (_this)).transactionDocument.basket.products.find((/**
|
|
379
|
+
* @param {?} item
|
|
380
|
+
* @return {?}
|
|
381
|
+
*/
|
|
382
|
+
function (item) { return item.itemLineId === subElement.itemLineId; })).SKU;
|
|
383
|
+
objSub['UnitValue'] = (/** @type {?} */ (_this)).convertToString(element.promotionLinePrice / product.quantity);
|
|
384
|
+
objSub['LineNumber'] = (/** @type {?} */ (_this)).convertToString(subElement.itemLineId);
|
|
385
|
+
objSub['Quantity'] = (/** @type {?} */ (_this)).convertToString(subElement.quantity.toFixed(1));
|
|
386
|
+
objSub['TaxCode'] = (/** @type {?} */ (_this)).transactionDocument.basket.taxBreakdown.taxLines.find((/**
|
|
387
|
+
* @param {?} item
|
|
388
|
+
* @return {?}
|
|
389
|
+
*/
|
|
390
|
+
function (item) { return item.itemLineId == element.itemLineId; })).VATCode; // todo
|
|
391
|
+
obj['PromotionHit']['PromotionTrigger'].push(objSub);
|
|
392
|
+
}));
|
|
393
|
+
(/** @type {?} */ (_this)).rjObject['Trailer']['PromotionItem'].push(obj);
|
|
394
|
+
}));
|
|
395
|
+
//console.log(this.rjObject);
|
|
396
|
+
return (/** @type {?} */ (this));
|
|
397
|
+
};
|
|
398
|
+
/**
|
|
399
|
+
* @template THIS
|
|
400
|
+
* @this {THIS}
|
|
401
|
+
* @return {THIS}
|
|
402
|
+
*/
|
|
403
|
+
RJMapperBuilderClass.prototype.getTenderInfo = /**
|
|
404
|
+
* @template THIS
|
|
405
|
+
* @this {THIS}
|
|
406
|
+
* @return {THIS}
|
|
407
|
+
*/
|
|
408
|
+
function () {
|
|
409
|
+
var _this = this;
|
|
410
|
+
(/** @type {?} */ (this)).rjObject['CashTender'] = [];
|
|
411
|
+
if ((/** @type {?} */ (this)).transactionDocument.paymentDetails && (/** @type {?} */ (this)).transactionDocument.paymentDetails.length > 0) {
|
|
412
|
+
(/** @type {?} */ (this)).transactionDocument.paymentDetails.forEach((/**
|
|
413
|
+
* @param {?} element
|
|
414
|
+
* @return {?}
|
|
415
|
+
*/
|
|
416
|
+
function (element) {
|
|
417
|
+
/** @type {?} */
|
|
418
|
+
var value = (/** @type {?} */ (_this)).paymentTypes.filter((/**
|
|
419
|
+
* @param {?} x
|
|
420
|
+
* @return {?}
|
|
421
|
+
*/
|
|
422
|
+
function (x) { return x.paymentType.toUpperCase() === element.paymentType.toUpperCase(); }));
|
|
423
|
+
if (element.paymentType.toUpperCase() === 'GIFT CARD') {
|
|
424
|
+
/** @type {?} */
|
|
425
|
+
var obj = {
|
|
426
|
+
XMLSchemaVersion: (/** @type {?} */ (_this)).xmlSchemaVersion,
|
|
427
|
+
LineNumber: (/** @type {?} */ (_this)).generateLineNumber(),
|
|
428
|
+
NetValue: (/** @type {?} */ (_this)).convertToString(-1 * (Math.round(element.amount))),
|
|
429
|
+
EffectiveNetValue: (/** @type {?} */ (_this)).convertToString(-1 * (Math.round(element.amount))),
|
|
430
|
+
Description: (/** @type {?} */ (_this)).getDescription(value[0].paymentType, element),
|
|
431
|
+
//todo
|
|
432
|
+
DeviceID: (/** @type {?} */ (_this)).deviceId,
|
|
433
|
+
//todo
|
|
434
|
+
UserID: (/** @type {?} */ (_this)).userId,
|
|
435
|
+
//todo
|
|
436
|
+
DateTimeCreated: (/** @type {?} */ (_this)).transactionDocument.updatedAt,
|
|
437
|
+
TenderType: value[0].tenderType,
|
|
438
|
+
TenderSubType: value[0].tenderSubType,
|
|
439
|
+
TenderAmount: (/** @type {?} */ (_this)).convertToString(-1 * (Math.round(element.amount))),
|
|
440
|
+
CurrencyID: (/** @type {?} */ (_this)).transactionDocument.baseCurrency,
|
|
441
|
+
CurrencyDescription: (/** @type {?} */ (_this)).transactionDocument.baseCurrency,
|
|
442
|
+
GiftVoucherSalesAllowed: '',
|
|
443
|
+
//todo
|
|
444
|
+
AllowRechargeableVoucherSales: '',
|
|
445
|
+
//todo
|
|
446
|
+
GiftVoucherID: ''
|
|
447
|
+
};
|
|
448
|
+
(/** @type {?} */ (_this)).rjObject['CashTender'].push(obj);
|
|
449
|
+
}
|
|
450
|
+
else {
|
|
451
|
+
/** @type {?} */
|
|
452
|
+
var obj1 = {
|
|
453
|
+
XMLSchemaVersion: "1",
|
|
454
|
+
LineNumber: (/** @type {?} */ (_this)).generateLineNumber(),
|
|
455
|
+
//todo
|
|
456
|
+
NetValue: JSON.stringify(-1 * (Math.round(element.amount))),
|
|
457
|
+
EffectiveNetValue: JSON.stringify(-1 * (Math.round(element.amount))),
|
|
458
|
+
Description: (/** @type {?} */ (_this)).getDescription(value[0].paymentType, element),
|
|
459
|
+
//todo
|
|
460
|
+
DeviceID: (/** @type {?} */ (_this)).deviceId,
|
|
461
|
+
//todo
|
|
462
|
+
UserID: (/** @type {?} */ (_this)).userId,
|
|
463
|
+
//todo
|
|
464
|
+
DateTimeCreated: (/** @type {?} */ (_this)).transactionDocument.updatedAt,
|
|
465
|
+
TenderType: value[0].tenderType,
|
|
466
|
+
TenderSubType: value[0].tenderSubType,
|
|
467
|
+
TenderAmount: JSON.stringify(-1 * (Math.round(element.amount))),
|
|
468
|
+
CurrencyID: (/** @type {?} */ (_this)).transactionDocument.baseCurrency,
|
|
469
|
+
CurrencyDescription: (/** @type {?} */ (_this)).transactionDocument.baseCurrency,
|
|
470
|
+
IncludeInTransactionTotalCheck: "1",
|
|
471
|
+
AllowRechargeableVoucherSales: "1",
|
|
472
|
+
OpenDrawerAtEnd: "1"
|
|
473
|
+
};
|
|
474
|
+
(/** @type {?} */ (_this)).rjObject['CashTender'].push(obj1);
|
|
475
|
+
}
|
|
476
|
+
}));
|
|
477
|
+
}
|
|
478
|
+
return (/** @type {?} */ (this));
|
|
479
|
+
};
|
|
480
|
+
/**
|
|
481
|
+
* @return {?}
|
|
482
|
+
*/
|
|
483
|
+
RJMapperBuilderClass.prototype.setLineNumberForProducts = /**
|
|
484
|
+
* @return {?}
|
|
485
|
+
*/
|
|
486
|
+
function () {
|
|
487
|
+
/** @type {?} */
|
|
488
|
+
var itemLineIdArray = [];
|
|
489
|
+
itemLineIdArray = this.transactionDocument.basket.products.map((/**
|
|
490
|
+
* @param {?} product
|
|
491
|
+
* @return {?}
|
|
492
|
+
*/
|
|
493
|
+
function (product) {
|
|
494
|
+
return parseInt(product.itemLineId);
|
|
495
|
+
}));
|
|
496
|
+
this.largestNumber = itemLineIdArray.reduce((/**
|
|
497
|
+
* @param {?} a
|
|
498
|
+
* @param {?} b
|
|
499
|
+
* @return {?}
|
|
500
|
+
*/
|
|
501
|
+
function (a, b) { return Math.max(a, b); }));
|
|
502
|
+
};
|
|
503
|
+
/**
|
|
504
|
+
* @return {?}
|
|
505
|
+
*/
|
|
506
|
+
RJMapperBuilderClass.prototype.generateLineNumber = /**
|
|
507
|
+
* @return {?}
|
|
508
|
+
*/
|
|
509
|
+
function () {
|
|
510
|
+
this.largestNumber += 1;
|
|
511
|
+
this.itemCount += 1;
|
|
512
|
+
return this.largestNumber;
|
|
513
|
+
};
|
|
514
|
+
/**
|
|
515
|
+
* @return {?}
|
|
516
|
+
*/
|
|
517
|
+
RJMapperBuilderClass.prototype.initilizeItemCount = /**
|
|
518
|
+
* @return {?}
|
|
519
|
+
*/
|
|
520
|
+
function () {
|
|
521
|
+
this.itemCount = this.transactionDocument.basket.products.length;
|
|
522
|
+
};
|
|
523
|
+
/**
|
|
524
|
+
* @return {?}
|
|
525
|
+
*/
|
|
526
|
+
RJMapperBuilderClass.prototype.build = /**
|
|
527
|
+
* @return {?}
|
|
528
|
+
*/
|
|
529
|
+
function () {
|
|
530
|
+
return this.rjObject;
|
|
531
|
+
};
|
|
532
|
+
/**
|
|
533
|
+
* @param {?} paymentType
|
|
534
|
+
* @param {?} element
|
|
535
|
+
* @return {?}
|
|
536
|
+
*/
|
|
537
|
+
RJMapperBuilderClass.prototype.getDescription = /**
|
|
538
|
+
* @param {?} paymentType
|
|
539
|
+
* @param {?} element
|
|
540
|
+
* @return {?}
|
|
541
|
+
*/
|
|
542
|
+
function (paymentType, element) {
|
|
543
|
+
if (paymentType.toUpperCase() === 'CARD') {
|
|
544
|
+
return element.cardType;
|
|
545
|
+
}
|
|
546
|
+
else {
|
|
547
|
+
return paymentType;
|
|
548
|
+
}
|
|
549
|
+
};
|
|
550
|
+
/**
|
|
551
|
+
* @template THIS
|
|
552
|
+
* @this {THIS}
|
|
553
|
+
* @param {?} id
|
|
554
|
+
* @return {THIS}
|
|
555
|
+
*/
|
|
556
|
+
RJMapperBuilderClass.prototype.setDeviceInfo = /**
|
|
557
|
+
* @template THIS
|
|
558
|
+
* @this {THIS}
|
|
559
|
+
* @param {?} id
|
|
560
|
+
* @return {THIS}
|
|
561
|
+
*/
|
|
562
|
+
function (id) {
|
|
563
|
+
(/** @type {?} */ (this)).deviceId = id;
|
|
564
|
+
return (/** @type {?} */ (this));
|
|
565
|
+
};
|
|
566
|
+
/**
|
|
567
|
+
* @template THIS
|
|
568
|
+
* @this {THIS}
|
|
569
|
+
* @param {?} id
|
|
570
|
+
* @return {THIS}
|
|
571
|
+
*/
|
|
572
|
+
RJMapperBuilderClass.prototype.setUserInfo = /**
|
|
573
|
+
* @template THIS
|
|
574
|
+
* @this {THIS}
|
|
575
|
+
* @param {?} id
|
|
576
|
+
* @return {THIS}
|
|
577
|
+
*/
|
|
578
|
+
function (id) {
|
|
579
|
+
(/** @type {?} */ (this)).userId = id;
|
|
580
|
+
return (/** @type {?} */ (this));
|
|
581
|
+
};
|
|
582
|
+
/**
|
|
583
|
+
* @param {?} value
|
|
584
|
+
* @return {?}
|
|
585
|
+
*/
|
|
586
|
+
RJMapperBuilderClass.prototype.removeDecimal = /**
|
|
587
|
+
* @param {?} value
|
|
588
|
+
* @return {?}
|
|
589
|
+
*/
|
|
590
|
+
function (value) {
|
|
591
|
+
return value * 100;
|
|
592
|
+
};
|
|
593
|
+
/**
|
|
594
|
+
* @template THIS
|
|
595
|
+
* @this {THIS}
|
|
596
|
+
* @param {?} value
|
|
597
|
+
* @return {THIS}
|
|
598
|
+
*/
|
|
599
|
+
RJMapperBuilderClass.prototype.setTransactionNumber = /**
|
|
600
|
+
* @template THIS
|
|
601
|
+
* @this {THIS}
|
|
602
|
+
* @param {?} value
|
|
603
|
+
* @return {THIS}
|
|
604
|
+
*/
|
|
605
|
+
function (value) {
|
|
606
|
+
(/** @type {?} */ (this)).transactionNumber = value;
|
|
607
|
+
return (/** @type {?} */ (this));
|
|
608
|
+
};
|
|
609
|
+
/**
|
|
610
|
+
* @template THIS
|
|
611
|
+
* @this {THIS}
|
|
612
|
+
* @param {?} value
|
|
613
|
+
* @return {THIS}
|
|
614
|
+
*/
|
|
615
|
+
RJMapperBuilderClass.prototype.setManifestVersion = /**
|
|
616
|
+
* @template THIS
|
|
617
|
+
* @this {THIS}
|
|
618
|
+
* @param {?} value
|
|
619
|
+
* @return {THIS}
|
|
620
|
+
*/
|
|
621
|
+
function (value) {
|
|
622
|
+
(/** @type {?} */ (this)).manifestVersion = value;
|
|
623
|
+
return (/** @type {?} */ (this));
|
|
624
|
+
};
|
|
625
|
+
/**
|
|
626
|
+
* @template THIS
|
|
627
|
+
* @this {THIS}
|
|
628
|
+
* @param {?} value
|
|
629
|
+
* @return {THIS}
|
|
630
|
+
*/
|
|
631
|
+
RJMapperBuilderClass.prototype.setDatabaseSchemaVersion = /**
|
|
632
|
+
* @template THIS
|
|
633
|
+
* @this {THIS}
|
|
634
|
+
* @param {?} value
|
|
635
|
+
* @return {THIS}
|
|
636
|
+
*/
|
|
637
|
+
function (value) {
|
|
638
|
+
(/** @type {?} */ (this)).databaseSchemaVersion = value;
|
|
639
|
+
return (/** @type {?} */ (this));
|
|
640
|
+
};
|
|
641
|
+
/**
|
|
642
|
+
* @template THIS
|
|
643
|
+
* @this {THIS}
|
|
644
|
+
* @param {?} value
|
|
645
|
+
* @return {THIS}
|
|
646
|
+
*/
|
|
647
|
+
RJMapperBuilderClass.prototype.setBasketType = /**
|
|
648
|
+
* @template THIS
|
|
649
|
+
* @this {THIS}
|
|
650
|
+
* @param {?} value
|
|
651
|
+
* @return {THIS}
|
|
652
|
+
*/
|
|
653
|
+
function (value) {
|
|
654
|
+
(/** @type {?} */ (this)).basketType = value;
|
|
655
|
+
return (/** @type {?} */ (this));
|
|
656
|
+
};
|
|
657
|
+
/**
|
|
658
|
+
* @template THIS
|
|
659
|
+
* @this {THIS}
|
|
660
|
+
* @param {?} value
|
|
661
|
+
* @return {THIS}
|
|
662
|
+
*/
|
|
663
|
+
RJMapperBuilderClass.prototype.setTradingRegionID = /**
|
|
664
|
+
* @template THIS
|
|
665
|
+
* @this {THIS}
|
|
666
|
+
* @param {?} value
|
|
667
|
+
* @return {THIS}
|
|
668
|
+
*/
|
|
669
|
+
function (value) {
|
|
670
|
+
(/** @type {?} */ (this)).tradingRegionId = value;
|
|
671
|
+
return (/** @type {?} */ (this));
|
|
672
|
+
};
|
|
673
|
+
/**
|
|
674
|
+
* @template THIS
|
|
675
|
+
* @this {THIS}
|
|
676
|
+
* @param {?} value
|
|
677
|
+
* @return {THIS}
|
|
678
|
+
*/
|
|
679
|
+
RJMapperBuilderClass.prototype.setCompanyID = /**
|
|
680
|
+
* @template THIS
|
|
681
|
+
* @this {THIS}
|
|
682
|
+
* @param {?} value
|
|
683
|
+
* @return {THIS}
|
|
684
|
+
*/
|
|
685
|
+
function (value) {
|
|
686
|
+
(/** @type {?} */ (this)).companyId = value;
|
|
687
|
+
return (/** @type {?} */ (this));
|
|
688
|
+
};
|
|
689
|
+
/**
|
|
690
|
+
* @template THIS
|
|
691
|
+
* @this {THIS}
|
|
692
|
+
* @param {?} value
|
|
693
|
+
* @return {THIS}
|
|
694
|
+
*/
|
|
695
|
+
RJMapperBuilderClass.prototype.setTaxMethodID = /**
|
|
696
|
+
* @template THIS
|
|
697
|
+
* @this {THIS}
|
|
698
|
+
* @param {?} value
|
|
699
|
+
* @return {THIS}
|
|
700
|
+
*/
|
|
701
|
+
function (value) {
|
|
702
|
+
(/** @type {?} */ (this)).taxMethodId = value;
|
|
703
|
+
return (/** @type {?} */ (this));
|
|
704
|
+
};
|
|
705
|
+
/**
|
|
706
|
+
* @template THIS
|
|
707
|
+
* @this {THIS}
|
|
708
|
+
* @param {?} value
|
|
709
|
+
* @return {THIS}
|
|
710
|
+
*/
|
|
711
|
+
RJMapperBuilderClass.prototype.setMajorVersion = /**
|
|
712
|
+
* @template THIS
|
|
713
|
+
* @this {THIS}
|
|
714
|
+
* @param {?} value
|
|
715
|
+
* @return {THIS}
|
|
716
|
+
*/
|
|
717
|
+
function (value) {
|
|
718
|
+
(/** @type {?} */ (this)).majorVersion = value;
|
|
719
|
+
return (/** @type {?} */ (this));
|
|
720
|
+
};
|
|
721
|
+
/**
|
|
722
|
+
* @template THIS
|
|
723
|
+
* @this {THIS}
|
|
724
|
+
* @param {?} value
|
|
725
|
+
* @return {THIS}
|
|
726
|
+
*/
|
|
727
|
+
RJMapperBuilderClass.prototype.setMinorVersion = /**
|
|
728
|
+
* @template THIS
|
|
729
|
+
* @this {THIS}
|
|
730
|
+
* @param {?} value
|
|
731
|
+
* @return {THIS}
|
|
732
|
+
*/
|
|
733
|
+
function (value) {
|
|
734
|
+
(/** @type {?} */ (this)).minorVersion = value;
|
|
735
|
+
return (/** @type {?} */ (this));
|
|
736
|
+
};
|
|
737
|
+
/**
|
|
738
|
+
* @template THIS
|
|
739
|
+
* @this {THIS}
|
|
740
|
+
* @param {?} value
|
|
741
|
+
* @return {THIS}
|
|
742
|
+
*/
|
|
743
|
+
RJMapperBuilderClass.prototype.setXMLSchemaVersion = /**
|
|
744
|
+
* @template THIS
|
|
745
|
+
* @this {THIS}
|
|
746
|
+
* @param {?} value
|
|
747
|
+
* @return {THIS}
|
|
748
|
+
*/
|
|
749
|
+
function (value) {
|
|
750
|
+
(/** @type {?} */ (this)).xmlSchemaVersion = value;
|
|
751
|
+
return (/** @type {?} */ (this));
|
|
752
|
+
};
|
|
753
|
+
/**
|
|
754
|
+
* @template THIS
|
|
755
|
+
* @this {THIS}
|
|
756
|
+
* @param {?} value
|
|
757
|
+
* @return {THIS}
|
|
758
|
+
*/
|
|
759
|
+
RJMapperBuilderClass.prototype.setExternalState = /**
|
|
760
|
+
* @template THIS
|
|
761
|
+
* @this {THIS}
|
|
762
|
+
* @param {?} value
|
|
763
|
+
* @return {THIS}
|
|
764
|
+
*/
|
|
765
|
+
function (value) {
|
|
766
|
+
(/** @type {?} */ (this)).externalState = value;
|
|
767
|
+
return (/** @type {?} */ (this));
|
|
768
|
+
};
|
|
769
|
+
/**
|
|
770
|
+
* @template THIS
|
|
771
|
+
* @this {THIS}
|
|
772
|
+
* @param {?} value
|
|
773
|
+
* @return {THIS}
|
|
774
|
+
*/
|
|
775
|
+
RJMapperBuilderClass.prototype.setCashierID = /**
|
|
776
|
+
* @template THIS
|
|
777
|
+
* @this {THIS}
|
|
778
|
+
* @param {?} value
|
|
779
|
+
* @return {THIS}
|
|
780
|
+
*/
|
|
781
|
+
function (value) {
|
|
782
|
+
(/** @type {?} */ (this)).cashierId = value;
|
|
783
|
+
return (/** @type {?} */ (this));
|
|
784
|
+
};
|
|
785
|
+
/**
|
|
786
|
+
* @template THIS
|
|
787
|
+
* @this {THIS}
|
|
788
|
+
* @param {?} value
|
|
789
|
+
* @return {THIS}
|
|
790
|
+
*/
|
|
791
|
+
RJMapperBuilderClass.prototype.setTerminalNumber = /**
|
|
792
|
+
* @template THIS
|
|
793
|
+
* @this {THIS}
|
|
794
|
+
* @param {?} value
|
|
795
|
+
* @return {THIS}
|
|
796
|
+
*/
|
|
797
|
+
function (value) {
|
|
798
|
+
(/** @type {?} */ (this)).terminalNumber = value;
|
|
799
|
+
return (/** @type {?} */ (this));
|
|
800
|
+
};
|
|
801
|
+
/**
|
|
802
|
+
* @template THIS
|
|
803
|
+
* @this {THIS}
|
|
804
|
+
* @param {?} value
|
|
805
|
+
* @return {THIS}
|
|
806
|
+
*/
|
|
807
|
+
RJMapperBuilderClass.prototype.setBasketLanguageID = /**
|
|
808
|
+
* @template THIS
|
|
809
|
+
* @this {THIS}
|
|
810
|
+
* @param {?} value
|
|
811
|
+
* @return {THIS}
|
|
812
|
+
*/
|
|
813
|
+
function (value) {
|
|
814
|
+
(/** @type {?} */ (this)).basketLanguageId = value;
|
|
815
|
+
return (/** @type {?} */ (this));
|
|
816
|
+
};
|
|
817
|
+
/**
|
|
818
|
+
* @template THIS
|
|
819
|
+
* @this {THIS}
|
|
820
|
+
* @param {?} value
|
|
821
|
+
* @return {THIS}
|
|
822
|
+
*/
|
|
823
|
+
RJMapperBuilderClass.prototype.setBasketCountryID = /**
|
|
824
|
+
* @template THIS
|
|
825
|
+
* @this {THIS}
|
|
826
|
+
* @param {?} value
|
|
827
|
+
* @return {THIS}
|
|
828
|
+
*/
|
|
829
|
+
function (value) {
|
|
830
|
+
(/** @type {?} */ (this)).basketCountryId = value;
|
|
831
|
+
return (/** @type {?} */ (this));
|
|
832
|
+
};
|
|
833
|
+
/**
|
|
834
|
+
* @template THIS
|
|
835
|
+
* @this {THIS}
|
|
836
|
+
* @param {?} value
|
|
837
|
+
* @return {THIS}
|
|
838
|
+
*/
|
|
839
|
+
RJMapperBuilderClass.prototype.setBasketCurrencyID = /**
|
|
840
|
+
* @template THIS
|
|
841
|
+
* @this {THIS}
|
|
842
|
+
* @param {?} value
|
|
843
|
+
* @return {THIS}
|
|
844
|
+
*/
|
|
845
|
+
function (value) {
|
|
846
|
+
(/** @type {?} */ (this)).basketCurrencyId = value;
|
|
847
|
+
return (/** @type {?} */ (this));
|
|
848
|
+
};
|
|
849
|
+
/**
|
|
850
|
+
* @param {?} date
|
|
851
|
+
* @return {?}
|
|
852
|
+
*/
|
|
853
|
+
RJMapperBuilderClass.prototype.generateId = /**
|
|
854
|
+
* @param {?} date
|
|
855
|
+
* @return {?}
|
|
856
|
+
*/
|
|
857
|
+
function (date) {
|
|
858
|
+
/** @type {?} */
|
|
859
|
+
var newDateTime = date.replace(/[^0-9]/g, '');
|
|
860
|
+
/** @type {?} */
|
|
861
|
+
var id = (this.deviceId + '|' + newDateTime + '|' + this.transactionNumber).toString();
|
|
862
|
+
return id;
|
|
863
|
+
};
|
|
864
|
+
/**
|
|
865
|
+
* @param {?} date
|
|
866
|
+
* @return {?}
|
|
867
|
+
*/
|
|
868
|
+
RJMapperBuilderClass.prototype.generateTimezoneoffset = /**
|
|
869
|
+
* @param {?} date
|
|
870
|
+
* @return {?}
|
|
871
|
+
*/
|
|
872
|
+
function (date) {
|
|
873
|
+
/** @type {?} */
|
|
874
|
+
var x = date ? date : '';
|
|
875
|
+
return new Date(x).getTimezoneOffset();
|
|
876
|
+
};
|
|
877
|
+
/**
|
|
878
|
+
* @return {?}
|
|
879
|
+
*/
|
|
880
|
+
RJMapperBuilderClass.prototype.generateKeyword = /**
|
|
881
|
+
* @return {?}
|
|
882
|
+
*/
|
|
883
|
+
function () {
|
|
884
|
+
/** @type {?} */
|
|
885
|
+
var x = (this.companyId + '|' + this.transactionDocument.storeId + '|' + this.terminalNumber + '|' + this.transactionNumber).toString();
|
|
886
|
+
return x;
|
|
887
|
+
};
|
|
888
|
+
/**
|
|
889
|
+
* @return {?}
|
|
890
|
+
*/
|
|
891
|
+
RJMapperBuilderClass.prototype.getState = /**
|
|
892
|
+
* @return {?}
|
|
893
|
+
*/
|
|
894
|
+
function () {
|
|
895
|
+
if (this.transactionDocument.operationStatus === 'PAY_SUCCESS') {
|
|
896
|
+
return 'Completed';
|
|
897
|
+
}
|
|
898
|
+
else {
|
|
899
|
+
return 'Cancelled';
|
|
900
|
+
}
|
|
901
|
+
};
|
|
902
|
+
/**
|
|
903
|
+
* @param {?} element
|
|
904
|
+
* @param {?} lineDiscount
|
|
905
|
+
* @return {?}
|
|
906
|
+
*/
|
|
907
|
+
RJMapperBuilderClass.prototype.returnProduct = /**
|
|
908
|
+
* @param {?} element
|
|
909
|
+
* @param {?} lineDiscount
|
|
910
|
+
* @return {?}
|
|
911
|
+
*/
|
|
912
|
+
function (element, lineDiscount) {
|
|
913
|
+
/** @type {?} */
|
|
914
|
+
var obj = {};
|
|
915
|
+
obj['LineNumber'] = element['itemLineId'];
|
|
916
|
+
obj['NetValue'] = this.removeDecimal(element['refundedTotal']);
|
|
917
|
+
obj['EffectiveNetValue'] = this.removeDecimal(element['refundedTotal']);
|
|
918
|
+
obj['Description'] = element['description'];
|
|
919
|
+
obj['DeviceID'] = this.transactionDocument['terminalId'];
|
|
920
|
+
obj['UserID'] = this.userId;
|
|
921
|
+
obj['DateTimeCreated'] = this.transactionDocument['createdAt'];
|
|
922
|
+
obj['ExtendedValue'] = this.removeDecimal(element['totalLinePrice']);
|
|
923
|
+
obj['UnitPrice'] = this.removeDecimal(element['price']);
|
|
924
|
+
obj['Quantity'] = element['refundedQuantity'] < 0 ? element['refundedQuantity'].toFixed(1) : -element['refundedQuantity'].toFixed(1);
|
|
925
|
+
obj['OriginalTaxAmountSet'] = 1;
|
|
926
|
+
obj['ProductID'] = element['SKU'];
|
|
927
|
+
obj['HandKeyed'] = 1;
|
|
928
|
+
obj['LongDescription'] = element['description'];
|
|
929
|
+
obj['Return'] = {};
|
|
930
|
+
obj['Return']['ReturnReasonID'] = element['refundedReason'];
|
|
931
|
+
obj['Return']['ReturnDescription'] = element['refundedReasonDescription'];
|
|
932
|
+
obj['Return']['ReturnToStock'] = element['refundedQuantity'] > 0 ? element['refundedQuantity'] : -1 * element['refundedQuantity'];
|
|
933
|
+
obj['TaxCode'] = this.transactionDocument.basket['taxBreakdown']['taxLines'].find((/**
|
|
934
|
+
* @param {?} item
|
|
935
|
+
* @return {?}
|
|
936
|
+
*/
|
|
937
|
+
function (item) { return item.itemLineId == element['itemLineId']; })).VATCode;
|
|
938
|
+
obj['DisplayTaxCode'] = ''; // todo
|
|
939
|
+
obj['ProductAttributes'] = ''; //todo - not required
|
|
940
|
+
obj['Perishable'] = this.getAttributes();
|
|
941
|
+
obj['MMGroupID'] = this.getAttributes();
|
|
942
|
+
obj['CustomerDetails'] = ""; // todo - blank
|
|
943
|
+
obj['TotalPromotionSaving'] = element['promotionAmount'] || -1; // TODO
|
|
944
|
+
// TODO
|
|
945
|
+
/** @type {?} */
|
|
946
|
+
var taxTotal = this.transactionDocument.basket['taxBreakdown']['taxLines'].find((/**
|
|
947
|
+
* @param {?} item
|
|
948
|
+
* @return {?}
|
|
949
|
+
*/
|
|
950
|
+
function (item) { return item.itemLineId == element['itemLineId']; }));
|
|
951
|
+
obj['OriginalTaxAmount'] = taxTotal.taxLineTotal < 0 ? this.removeDecimal(taxTotal.taxLineTotal) : this.removeDecimal(-taxTotal.taxLineTotal); //todo
|
|
952
|
+
obj['taxAmount'] = taxTotal.taxLineTotal < 0 ? this.removeDecimal(taxTotal.taxLineTotal) : this.removeDecimal(-taxTotal.taxLineTotal);
|
|
953
|
+
if (lineDiscount) {
|
|
954
|
+
if (lineDiscount.percentageDiscountReasonName && lineDiscount.percentageDiscountReasonCode) {
|
|
955
|
+
// line discount
|
|
956
|
+
obj['Discount'] = {};
|
|
957
|
+
obj['Discount'].ModifierValue = this.removeDecimal(lineDiscount.unitPrice) * -1;
|
|
958
|
+
obj['Discount'].ModifierDateTime = obj.DateTimeCreated;
|
|
959
|
+
obj['Discount'].ModifierReasonID = lineDiscount.percentageDiscountReasonCode;
|
|
960
|
+
obj['Discount'].ModifierDescription = lineDiscount.percentageDiscountReasonName;
|
|
961
|
+
obj['Discount'].AuthorisingUserID = this.userId;
|
|
962
|
+
obj['Discount'].DiscountType = lineDiscount.discountType;
|
|
963
|
+
obj['Discount'].XMLSchemaVersion = 1;
|
|
964
|
+
obj['Discount'].OriginalPrice = this.removeDecimal(lineDiscount.discountAmount + (lineDiscount.discountedLinePrice || 0));
|
|
965
|
+
obj['Discount'].DiscountedValue = this.removeDecimal(lineDiscount.unitPrice);
|
|
966
|
+
obj['Discount'].DiscountPercentage = lineDiscount.percentageDiscountValue;
|
|
967
|
+
obj['Discount'].RoundingRule = 2;
|
|
968
|
+
}
|
|
969
|
+
if (lineDiscount.priceOverrideReasonCode && lineDiscount.priceOverrideReasonName) {
|
|
970
|
+
//price override
|
|
971
|
+
obj['PriceOverride'] = {};
|
|
972
|
+
obj['PriceOverride'].ModifierValue = this.removeDecimal(lineDiscount.discountAmount) * -1;
|
|
973
|
+
obj['PriceOverride'].ModifierDateTime = obj.DateTimeCreated;
|
|
974
|
+
obj['PriceOverride'].ModifierReasonID = lineDiscount.priceOverrideReasonCode;
|
|
975
|
+
obj['PriceOverride'].ModifierReasonDescription = lineDiscount.priceOverrideReasonName;
|
|
976
|
+
obj['PriceOverride'].AuthorisingUserID = this.userId;
|
|
977
|
+
obj['PriceOverride'].XMLSchemaVersion = 1;
|
|
978
|
+
obj['PriceOverride'].NewPrice = this.removeDecimal(lineDiscount.unitPrice);
|
|
979
|
+
obj['PriceOverride'].OriginalPrice = this.removeDecimal(lineDiscount.discountedLinePrice || 0 + lineDiscount.discountAmount);
|
|
980
|
+
}
|
|
981
|
+
//update the product price
|
|
982
|
+
obj.NetValue = ((lineDiscount.discountedLinePrice || 0) + lineDiscount.discountAmount) * -1;
|
|
983
|
+
obj.EffectiveNetValue = ((lineDiscount.discountedLinePrice || 0) + lineDiscount.discountAmount) * -1;
|
|
984
|
+
obj.ExtendedValue = ((lineDiscount.discountedLinePrice || 0) + lineDiscount.discountAmount) * -1;
|
|
985
|
+
obj.UnitPrice = ((lineDiscount.discountedLinePrice || 0) + lineDiscount.discountAmount) * -1;
|
|
986
|
+
}
|
|
987
|
+
return obj;
|
|
988
|
+
};
|
|
989
|
+
/**
|
|
990
|
+
* @param {?} element
|
|
991
|
+
* @param {?} lineDiscount
|
|
992
|
+
* @return {?}
|
|
993
|
+
*/
|
|
994
|
+
RJMapperBuilderClass.prototype.addProduct = /**
|
|
995
|
+
* @param {?} element
|
|
996
|
+
* @param {?} lineDiscount
|
|
997
|
+
* @return {?}
|
|
998
|
+
*/
|
|
999
|
+
function (element, lineDiscount) {
|
|
1000
|
+
/** @type {?} */
|
|
1001
|
+
var obj = {
|
|
1002
|
+
XMLSchemaVersion: this.xmlSchemaVersion,
|
|
1003
|
+
LineNumber: element.itemLineId,
|
|
1004
|
+
NetValue: this.removeDecimal(element.totalLinePrice),
|
|
1005
|
+
EffectiveNetValue: this.removeDecimal(element.totalLinePrice),
|
|
1006
|
+
Description: element.description,
|
|
1007
|
+
DeviceID: this.deviceId,
|
|
1008
|
+
//to do
|
|
1009
|
+
UserID: this.userId,
|
|
1010
|
+
//to do,
|
|
1011
|
+
DateTimeCreated: this.transactionDocument.createdAt,
|
|
1012
|
+
ExtendedValue: this.removeDecimal(element.price),
|
|
1013
|
+
UnitPrice: this.removeDecimal(element.price),
|
|
1014
|
+
MMGroupID: this.getAttributes(),
|
|
1015
|
+
//todo
|
|
1016
|
+
Quantity: element.quantity.toFixed(1),
|
|
1017
|
+
SalespersonID: this.transactionDocument.userId,
|
|
1018
|
+
SalespersonName: this.transactionDocument.userName,
|
|
1019
|
+
TaxCode: 0,
|
|
1020
|
+
//todo
|
|
1021
|
+
TaxModifiable: 1,
|
|
1022
|
+
//todo
|
|
1023
|
+
TaxAmount: 0,
|
|
1024
|
+
//todo
|
|
1025
|
+
OriginalTaxAmount: 0,
|
|
1026
|
+
//todo
|
|
1027
|
+
OriginalTaxAmountSet: 1,
|
|
1028
|
+
//todo
|
|
1029
|
+
ProductID: element.SKU,
|
|
1030
|
+
HandKeyed: 1,
|
|
1031
|
+
//todo
|
|
1032
|
+
CustomerDetails: "",
|
|
1033
|
+
Perishable: this.getAttributes()
|
|
1034
|
+
};
|
|
1035
|
+
if (lineDiscount) {
|
|
1036
|
+
if (lineDiscount.percentageDiscountReasonName && lineDiscount.percentageDiscountReasonCode) {
|
|
1037
|
+
// line discount
|
|
1038
|
+
obj['Discount'] = {};
|
|
1039
|
+
obj['Discount'].ModifierValue = this.removeDecimal(lineDiscount.unitPrice) * -1;
|
|
1040
|
+
obj['Discount'].ModifierDateTime = obj.DateTimeCreated;
|
|
1041
|
+
obj['Discount'].ModifierReasonID = lineDiscount.percentageDiscountReasonCode;
|
|
1042
|
+
obj['Discount'].ModifierDescription = lineDiscount.percentageDiscountReasonName;
|
|
1043
|
+
obj['Discount'].AuthorisingUserID = this.userId;
|
|
1044
|
+
obj['Discount'].DiscountType = lineDiscount.discountType;
|
|
1045
|
+
obj['Discount'].XMLSchemaVersion = 1;
|
|
1046
|
+
obj['Discount'].OriginalPrice = this.removeDecimal(lineDiscount.discountAmount + (lineDiscount.discountedLinePrice || 0));
|
|
1047
|
+
obj['Discount'].DiscountedValue = this.removeDecimal(lineDiscount.unitPrice);
|
|
1048
|
+
obj['Discount'].DiscountPercentage = lineDiscount.percentageDiscountValue;
|
|
1049
|
+
obj['Discount'].RoundingRule = 2;
|
|
1050
|
+
}
|
|
1051
|
+
if (lineDiscount.priceOverrideReasonCode && lineDiscount.priceOverrideReasonName) {
|
|
1052
|
+
//price override
|
|
1053
|
+
obj['PriceOverride'] = {};
|
|
1054
|
+
obj['PriceOverride'].ModifierValue = this.removeDecimal(lineDiscount.discountAmount) * -1;
|
|
1055
|
+
obj['PriceOverride'].ModifierDateTime = obj.DateTimeCreated;
|
|
1056
|
+
obj['PriceOverride'].ModifierReasonID = lineDiscount.priceOverrideReasonCode;
|
|
1057
|
+
obj['PriceOverride'].ModifierReasonDescription = lineDiscount.priceOverrideReasonName;
|
|
1058
|
+
obj['PriceOverride'].AuthorisingUserID = this.userId;
|
|
1059
|
+
obj['PriceOverride'].XMLSchemaVersion = 1;
|
|
1060
|
+
obj['PriceOverride'].NewPrice = this.removeDecimal(lineDiscount.unitPrice);
|
|
1061
|
+
obj['PriceOverride'].OriginalPrice = this.removeDecimal(lineDiscount.discountedLinePrice || 0 + lineDiscount.discountAmount);
|
|
1062
|
+
}
|
|
1063
|
+
//update the product price
|
|
1064
|
+
obj['NetValue'] = ((lineDiscount.discountedLinePrice || 0) + lineDiscount.discountAmount);
|
|
1065
|
+
obj['EffectiveNetValue'] = ((lineDiscount.discountedLinePrice || 0) + lineDiscount.discountAmount);
|
|
1066
|
+
obj['ExtendedValue'] = ((lineDiscount.discountedLinePrice || 0) + lineDiscount.discountAmount);
|
|
1067
|
+
obj['UnitPrice'] = ((lineDiscount.discountedLinePrice || 0) + lineDiscount.discountAmount);
|
|
1068
|
+
}
|
|
1069
|
+
return obj;
|
|
1070
|
+
};
|
|
1071
|
+
/**
|
|
1072
|
+
* @param {?} value
|
|
1073
|
+
* @return {?}
|
|
1074
|
+
*/
|
|
1075
|
+
RJMapperBuilderClass.prototype.convertToString = /**
|
|
1076
|
+
* @param {?} value
|
|
1077
|
+
* @return {?}
|
|
1078
|
+
*/
|
|
1079
|
+
function (value) {
|
|
1080
|
+
try {
|
|
1081
|
+
value = JSON.stringify(value);
|
|
1082
|
+
return value;
|
|
1083
|
+
}
|
|
1084
|
+
catch (e) {
|
|
1085
|
+
console.log(value, ' can not be converted in string', e);
|
|
1086
|
+
}
|
|
1087
|
+
};
|
|
1088
|
+
/**
|
|
1089
|
+
* @return {?}
|
|
1090
|
+
*/
|
|
1091
|
+
RJMapperBuilderClass.prototype.generateDynamicStockLookUp = /**
|
|
1092
|
+
* @return {?}
|
|
1093
|
+
*/
|
|
1094
|
+
function () {
|
|
1095
|
+
/** @type {?} */
|
|
1096
|
+
var x = '0';
|
|
1097
|
+
this.transactionDocument.basket.products.forEach((/**
|
|
1098
|
+
* @param {?} element
|
|
1099
|
+
* @return {?}
|
|
1100
|
+
*/
|
|
1101
|
+
function (element) {
|
|
1102
|
+
if (element.deliveryMethod === '1' || element.deliveryMethod === '2') {
|
|
1103
|
+
x = '1';
|
|
1104
|
+
}
|
|
1105
|
+
}));
|
|
1106
|
+
return x;
|
|
1107
|
+
};
|
|
1108
|
+
/**
|
|
1109
|
+
* @return {?}
|
|
1110
|
+
*/
|
|
1111
|
+
RJMapperBuilderClass.prototype.getAttributes = /**
|
|
1112
|
+
* @return {?}
|
|
1113
|
+
*/
|
|
1114
|
+
function () {
|
|
1115
|
+
/** @type {?} */
|
|
1116
|
+
var name = [];
|
|
1117
|
+
this.transactionDocument.basket.products.forEach((/**
|
|
1118
|
+
* @param {?} element
|
|
1119
|
+
* @return {?}
|
|
1120
|
+
*/
|
|
1121
|
+
function (element) {
|
|
1122
|
+
if (element.attributes && element.attributes.length > 0) {
|
|
1123
|
+
name = element.attributes.filter((/**
|
|
1124
|
+
* @param {?} x
|
|
1125
|
+
* @return {?}
|
|
1126
|
+
*/
|
|
1127
|
+
function (x) { return x.name.toUpperCase() === element.name.toUpperCase(); }));
|
|
1128
|
+
}
|
|
1129
|
+
}));
|
|
1130
|
+
if (name.length > 0) {
|
|
1131
|
+
return name[0].value;
|
|
1132
|
+
}
|
|
1133
|
+
else {
|
|
1134
|
+
return "";
|
|
1135
|
+
}
|
|
1136
|
+
};
|
|
1137
|
+
return RJMapperBuilderClass;
|
|
1138
|
+
}());
|
|
1139
|
+
export { RJMapperBuilderClass };
|
|
1140
|
+
if (false) {
|
|
1141
|
+
/**
|
|
1142
|
+
* @type {?}
|
|
1143
|
+
* @private
|
|
1144
|
+
*/
|
|
1145
|
+
RJMapperBuilderClass.prototype.transactionDocument;
|
|
1146
|
+
/**
|
|
1147
|
+
* @type {?}
|
|
1148
|
+
* @private
|
|
1149
|
+
*/
|
|
1150
|
+
RJMapperBuilderClass.prototype.productQuantity;
|
|
1151
|
+
/**
|
|
1152
|
+
* @type {?}
|
|
1153
|
+
* @private
|
|
1154
|
+
*/
|
|
1155
|
+
RJMapperBuilderClass.prototype.userId;
|
|
1156
|
+
/**
|
|
1157
|
+
* @type {?}
|
|
1158
|
+
* @private
|
|
1159
|
+
*/
|
|
1160
|
+
RJMapperBuilderClass.prototype.deviceId;
|
|
1161
|
+
/**
|
|
1162
|
+
* @type {?}
|
|
1163
|
+
* @private
|
|
1164
|
+
*/
|
|
1165
|
+
RJMapperBuilderClass.prototype.transactionNumber;
|
|
1166
|
+
/**
|
|
1167
|
+
* @type {?}
|
|
1168
|
+
* @private
|
|
1169
|
+
*/
|
|
1170
|
+
RJMapperBuilderClass.prototype.manifestVersion;
|
|
1171
|
+
/**
|
|
1172
|
+
* @type {?}
|
|
1173
|
+
* @private
|
|
1174
|
+
*/
|
|
1175
|
+
RJMapperBuilderClass.prototype.databaseSchemaVersion;
|
|
1176
|
+
/**
|
|
1177
|
+
* @type {?}
|
|
1178
|
+
* @private
|
|
1179
|
+
*/
|
|
1180
|
+
RJMapperBuilderClass.prototype.basketType;
|
|
1181
|
+
/**
|
|
1182
|
+
* @type {?}
|
|
1183
|
+
* @private
|
|
1184
|
+
*/
|
|
1185
|
+
RJMapperBuilderClass.prototype.xmlSchemaVersion;
|
|
1186
|
+
/**
|
|
1187
|
+
* @type {?}
|
|
1188
|
+
* @private
|
|
1189
|
+
*/
|
|
1190
|
+
RJMapperBuilderClass.prototype.majorVersion;
|
|
1191
|
+
/**
|
|
1192
|
+
* @type {?}
|
|
1193
|
+
* @private
|
|
1194
|
+
*/
|
|
1195
|
+
RJMapperBuilderClass.prototype.minorVersion;
|
|
1196
|
+
/**
|
|
1197
|
+
* @type {?}
|
|
1198
|
+
* @private
|
|
1199
|
+
*/
|
|
1200
|
+
RJMapperBuilderClass.prototype.externalState;
|
|
1201
|
+
/**
|
|
1202
|
+
* @type {?}
|
|
1203
|
+
* @private
|
|
1204
|
+
*/
|
|
1205
|
+
RJMapperBuilderClass.prototype.cashierId;
|
|
1206
|
+
/**
|
|
1207
|
+
* @type {?}
|
|
1208
|
+
* @private
|
|
1209
|
+
*/
|
|
1210
|
+
RJMapperBuilderClass.prototype.companyId;
|
|
1211
|
+
/**
|
|
1212
|
+
* @type {?}
|
|
1213
|
+
* @private
|
|
1214
|
+
*/
|
|
1215
|
+
RJMapperBuilderClass.prototype.terminalNumber;
|
|
1216
|
+
/**
|
|
1217
|
+
* @type {?}
|
|
1218
|
+
* @private
|
|
1219
|
+
*/
|
|
1220
|
+
RJMapperBuilderClass.prototype.taxMethodId;
|
|
1221
|
+
/**
|
|
1222
|
+
* @type {?}
|
|
1223
|
+
* @private
|
|
1224
|
+
*/
|
|
1225
|
+
RJMapperBuilderClass.prototype.tradingRegionId;
|
|
1226
|
+
/**
|
|
1227
|
+
* @type {?}
|
|
1228
|
+
* @private
|
|
1229
|
+
*/
|
|
1230
|
+
RJMapperBuilderClass.prototype.basketCurrencyId;
|
|
1231
|
+
/**
|
|
1232
|
+
* @type {?}
|
|
1233
|
+
* @private
|
|
1234
|
+
*/
|
|
1235
|
+
RJMapperBuilderClass.prototype.basketCountryId;
|
|
1236
|
+
/**
|
|
1237
|
+
* @type {?}
|
|
1238
|
+
* @private
|
|
1239
|
+
*/
|
|
1240
|
+
RJMapperBuilderClass.prototype.basketLanguageId;
|
|
1241
|
+
/**
|
|
1242
|
+
* @type {?}
|
|
1243
|
+
* @private
|
|
1244
|
+
*/
|
|
1245
|
+
RJMapperBuilderClass.prototype.itemCount;
|
|
1246
|
+
/**
|
|
1247
|
+
* @type {?}
|
|
1248
|
+
* @private
|
|
1249
|
+
*/
|
|
1250
|
+
RJMapperBuilderClass.prototype.largestNumber;
|
|
1251
|
+
/**
|
|
1252
|
+
* @type {?}
|
|
1253
|
+
* @private
|
|
1254
|
+
*/
|
|
1255
|
+
RJMapperBuilderClass.prototype.rjObject;
|
|
1256
|
+
/**
|
|
1257
|
+
* @type {?}
|
|
1258
|
+
* @private
|
|
1259
|
+
*/
|
|
1260
|
+
RJMapperBuilderClass.prototype.paymentTypes;
|
|
1261
|
+
}
|
|
1262
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUkotbWFwcGVyLmNsYXNzLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHBtY3JldGFpbC9tYXBwZXItbGlicmFyeS8iLCJzb3VyY2VzIjpbImxpYi9SSi1tYXBwZXIuY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsWUFBWSxFQUErQyxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFBO0FBQ3BILE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzFFO0lBeURJLDhCQUFZLGNBQW9DO1FBckR4QyxvQkFBZSxHQUFHLENBQUMsQ0FBQztRQW1CcEIsY0FBUyxHQUFHLENBQUMsQ0FBQztRQUNkLGtCQUFhLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLGFBQVEsR0FBUSxFQUFFLENBQUE7UUFFbEIsaUJBQVksR0FBRztZQUNuQjtnQkFDSSxXQUFXLEVBQUUsTUFBTTtnQkFDbkIsSUFBSSxFQUFFLE9BQU87Z0JBQ2IsVUFBVSxFQUFFLEdBQUc7Z0JBQ2YsYUFBYSxFQUFFLEdBQUc7YUFFckI7WUFDRDtnQkFDSSxXQUFXLEVBQUUsTUFBTTtnQkFDbkIsSUFBSSxFQUFFLFVBQVU7Z0JBQ2hCLFVBQVUsRUFBRSxHQUFHO2dCQUNmLGFBQWEsRUFBRSxHQUFHO2FBRXJCO1lBQ0Q7Z0JBQ0ksV0FBVyxFQUFFLEtBQUs7Z0JBQ2xCLElBQUksRUFBRSxjQUFjO2dCQUNwQixVQUFVLEVBQUUsR0FBRztnQkFDZixhQUFhLEVBQUUsR0FBRzthQUVyQjtZQUNEO2dCQUNJLFdBQVcsRUFBRSxXQUFXO2dCQUN4QixJQUFJLEVBQUUsY0FBYztnQkFDcEIsVUFBVSxFQUFFLEdBQUc7Z0JBQ2YsYUFBYSxFQUFFLEdBQUc7YUFDckI7U0FDSixDQUFBO1FBR0csSUFBSSxjQUFjLEVBQUU7WUFDaEIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLGNBQWMsQ0FBQztTQUM3QzthQUFNO1lBQ0gsSUFBSSxDQUFDLG1CQUFtQixHQUFHO2dCQUN2QixhQUFhLEVBQUUsRUFBRTtnQkFDakIsb0JBQW9CLEVBQUUsRUFBRTtnQkFDeEIsY0FBYyxFQUFFLEVBQUU7Z0JBQ2xCLFFBQVEsRUFBRSxFQUFFO2dCQUNaLE9BQU8sRUFBRSxFQUFFO2dCQUNYLE9BQU8sRUFBRSxFQUFFO2dCQUNYLFdBQVcsRUFBRSxFQUFFO2dCQUNmLGtCQUFrQixFQUFFLEVBQUU7Z0JBQ3RCLFFBQVEsRUFBRSxFQUFFO2dCQUNaLFVBQVUsRUFBRSxFQUFFO2dCQUNkLE1BQU0sRUFBRSxFQUFFO2dCQUNWLGdCQUFnQixFQUFFLFNBQVM7Z0JBQzNCLE1BQU0sRUFBRSxLQUFLO2dCQUNiLE1BQU0sRUFBRSxtQkFBQSxFQUFFLEVBQU87Z0JBQ2pCLGFBQWEsRUFBRSxtQkFBQSxFQUFFLEVBQU87Z0JBQ3hCLFlBQVksRUFBRSxFQUFFO2dCQUNoQixJQUFJLEVBQUUsRUFBRTtnQkFDUixlQUFlLEVBQUUsRUFBRTtnQkFDbkIsU0FBUyxFQUFFLEVBQUU7Z0JBQ2IsU0FBUyxFQUFFLEVBQUU7Z0JBQ2IsRUFBRSxFQUFFLEVBQUU7Z0JBQ04seUJBQXlCLEVBQUUsbUJBQUEsRUFBRSxFQUFPO2dCQUNwQyxTQUFTLEVBQUUsQ0FBQzthQUNmLENBQUM7U0FDTDtRQUNELElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO0lBQ3BDLENBQUM7Ozs7OztJQUVELCtDQUFnQjs7Ozs7SUFBaEI7UUFDSSxtQkFBQSxJQUFJLEVBQUEsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsbUJBQUEsSUFBSSxFQUFBLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDbEQsbUJBQUEsSUFBSSxFQUFBLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLG1CQUFBLElBQUksRUFBQSxDQUFDLFVBQVUsQ0FBQyxtQkFBQSxJQUFJLEVBQUEsQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMxRSxtQkFBQSxJQUFJLEVBQUEsQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDeEMsbUJBQUEsSUFBSSxFQUFBLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxHQUFHLG1CQUFBLElBQUksRUFBQSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQztRQUNsRSxtQkFBQSxJQUFJLEVBQUEsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLEdBQUcsbUJBQUEsSUFBSSxFQUFBLENBQUMsWUFBWSxDQUFDO1FBQ2xELG1CQUFBLElBQUksRUFBQSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsR0FBRyxtQkFBQSxJQUFJLEVBQUEsQ0FBQyxZQUFZLENBQUM7UUFDbEQsbUJBQUEsSUFBSSxFQUFBLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsbUJBQUEsSUFBSSxFQUFBLENBQUMsZUFBZSxDQUFDO1FBQ3hELG1CQUFBLElBQUksRUFBQSxDQUFDLFFBQVEsQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLG1CQUFBLElBQUksRUFBQSxDQUFDLHFCQUFxQixDQUFDO1FBQ3BFLG1CQUFBLElBQUksRUFBQSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsR0FBRyxtQkFBQSxJQUFJLEVBQUEsQ0FBQyxVQUFVLENBQUM7UUFDOUMsbUJBQUEsSUFBSSxFQUFBLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLG1CQUFBLElBQUksRUFBQSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3pDLG1CQUFBLElBQUksRUFBQSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsR0FBRyxtQkFBQSxJQUFJLEVBQUEsQ0FBQyxhQUFhLENBQUM7UUFFcEQsT0FBTyxtQkFBQSxJQUFJLEVBQUEsQ0FBQztJQUNoQixDQUFDOzs7Ozs7SUFHRCw0Q0FBYTs7Ozs7SUFBYjtRQUNJLG1CQUFBLElBQUksRUFBQSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDN0IsbUJBQUEsSUFBSSxFQUFBLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLGNBQWMsR0FBRyxtQkFBQSxJQUFJLEVBQUEsQ0FBQyxlQUFlLENBQUMsbUJBQUEsSUFBSSxFQUFBLENBQUMsc0JBQXNCLENBQUMsbUJBQUEsSUFBSSxFQUFBLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUMvSCxtQkFBQSxJQUFJLEVBQUEsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsZUFBZSxHQUFHLG1CQUFBLElBQUksRUFBQSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQztRQUM3RSxtQkFBQSxJQUFJLEVBQUEsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUMxQyxtQkFBQSxJQUFJLEVBQUEsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsWUFBWSxDQUFDLFFBQVEsR0FBRyxtQkFBQSxJQUFJLEVBQUEsQ0FBQyxRQUFRLENBQUM7UUFDOUQsbUJBQUEsSUFBSSxFQUFBLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFlBQVksQ0FBQyxTQUFTLEdBQUcsbUJBQUEsSUFBSSxFQUFBLENBQUMsU0FBUyxDQUFDO1FBQ2hFLG1CQUFBLElBQUksRUFBQSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxZQUFZLENBQUMsU0FBUyxHQUFHLG1CQUFBLElBQUksRUFBQSxDQUFDLFNBQVMsQ0FBQztRQUNoRSxtQkFBQSxJQUFJLEVBQUEsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsWUFBWSxDQUFDLE9BQU8sR0FBRyxtQkFBQSxJQUFJLEVBQUEsQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUM7UUFDaEYsbUJBQUEsSUFBSSxFQUFBLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFlBQVksQ0FBQyxRQUFRLEdBQUcsbUJBQUEsSUFBSSxFQUFBLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDO1FBQ2pGLG1CQUFBLElBQUksRUFBQSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxZQUFZLENBQUMsY0FBYyxHQUFHLG1CQUFBLElBQUksRUFBQSxDQUFDLGNBQWMsQ0FBQztRQUMxRSxtQkFBQSxJQUFJLEVBQUEsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsWUFBWSxDQUFDLGlCQUFpQixHQUFHLG1CQUFBLElBQUksRUFBQSxDQUFDLGlCQUFpQixDQUFDO1FBQ2hGLG1CQUFBLElBQUksRUFBQSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxXQUFXLEdBQUcsbUJBQUEsSUFBSSxFQUFBLENBQUMsV0FBVyxDQUFDO1FBQ3ZELG1CQUFBLElBQUksRUFBQSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxrQkFBa0IsR0FBRyxtQkFBQSxJQUFJLEVBQUEsQ0FBQywwQkFBMEIsRUFBRSxDQUFDLENBQUEsTUFBTTtRQUNyRixtQkFBQSxJQUFJLEVBQUEsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsZ0JBQWdCLEdBQUcsbUJBQUEsSUFBSSxFQUFBLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxNQUFNO1FBQ3hFLG1CQUFBLElBQUksRUFBQSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxlQUFlLEdBQUcsbUJBQUEsSUFBSSxFQUFBLENBQUMsZUFBZSxDQUFDLENBQUMsTUFBTTtRQUN0RSxtQkFBQSxJQUFJLEVBQUEsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsZ0JBQWdCLEdBQUcsbUJBQUEsSUFBSSxFQUFBLENBQUMsbUJBQW1CLENBQUMsWUFBWSxDQUFDO1FBQ2pGLG1CQUFBLElBQUksRUFBQSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxlQUFlLEdBQUcsbUJBQUEsSUFBSSxFQUFBLENBQUMsZUFBZSxDQUFDO1FBQy9ELG1CQUFBLElBQUksRUFBQSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDLENBQUEsU0FBUztRQUNoRCxtQkFBQSxJQUFJLEVBQUEsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsb0JBQW9CLEdBQUcsRUFBRSxDQUFDLENBQUMsU0FBUztRQUM1RCxtQkFBQSxJQUFJLEVBQUEsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQyxDQUFDLFNBQVM7UUFFckQsT0FBTyxtQkFBQSxJQUFJLEVBQUEsQ0FBQztJQUNoQixDQUFDOzs7Ozs7SUFFRCx1Q0FBUTs7Ozs7SUFBUjtRQUFBLGlCQXlEQztRQXhERyxJQUFJLG1CQUFBLElBQUksRUFBQSxDQUFDLG1CQUFtQixDQUFDLElBQUksS0FBSyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUU7WUFDekQsbUJBQUEsSUFBSSxFQUFBLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNsQyxtQkFBQSxJQUFJLEVBQUEsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBRW5DLG1CQUFBLElBQUksRUFBQSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTzs7OztZQUFDLFVBQUMsT0FBWTs7b0JBQ3RELFlBQVksR0FBRyxFQUFFO2dCQUNyQixJQUFJLG1CQUFBLEtBQUksRUFBQSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxZQUFZLElBQUksbUJBQUEsS0FBSSxFQUFBLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO29CQUN6RyxZQUFZLEdBQUcsbUJBQUEsS0FBSSxFQUFBLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxNQUFNOzs7O29CQUFDLFVBQUMsQ0FBTSxJQUFLLE9BQUEsQ0FBQyxDQUFDLFVBQVUsS0FBSyxPQUFPLENBQUMsVUFBVSxFQUFuQyxDQUFtQyxFQUFDLENBQUM7b0JBQ3BILElBQUksWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7OzRCQUNuQixLQUFLLEdBQUcsbUJBQUEsS0FBSSxFQUFBLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUNuRixJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRTs0QkFDWixtQkFBQSxLQUFJLEVBQUEsQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7eUJBQ2pFO3FCQUNKO2lCQUNKOztvQkFDRyxJQUFJLEdBQUcsbUJBQUEsS0FBSSxFQUFBLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN2RixtQkFBQSxLQUFJLEVBQUEsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN4QyxtQkFBQSxLQUFJLEVBQUEsQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUMvRixDQUFDLEVBQUMsQ0FBQztTQUNOO2FBQU0sSUFBSSxtQkFBQSxJQUFJLEVBQUEsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEtBQUssZ0JBQWdCLENBQUMsTUFBTSxFQUFFO1lBQ2xFLG1CQUFBLElBQUksRUFBQSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDcEMsbUJBQUEsSUFBSSxFQUFBLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNuQyxtQkFBQSxJQUFJLEVBQUEsQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU87Ozs7WUFBQyxVQUFDLE9BQVk7O29CQUN0RCxJQUFJLEdBQUcsbUJBQUEsS0FBSSxFQUFBLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUM5RyxtQkFBQSxLQUFJLEVBQUEsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUMxQyxtQkFBQSxLQUFJLEVBQUEsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDbkUsQ0FBQyxFQUFDLENBQUM7U0FDTjthQUFNLElBQUksbUJBQUEsSUFBSSxFQUFBLENBQUMsbUJBQW1CLENBQUMsSUFBSSxLQUFLLGdCQUFnQixDQUFDLFdBQVcsRUFBRTtZQUN2RSxtQkFBQSxJQUFJLEVBQUEsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ3BDLG1CQUFBLElBQUksRUFBQSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLENBQUM7O2dCQUUvQixjQUFjLEdBQVEsSUFBSSwwQkFBMEIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxtQkFBQSxJQUFJLEVBQUEsQ0FBQyxtQkFBbUIsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLEtBQUssRUFBRTtZQUM3SCxjQUFjLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPOzs7O1lBQUMsVUFBQyxPQUFZOztvQkFDNUMsSUFBSSxHQUFHLG1CQUFBLEtBQUksRUFBQSxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDOUcsbUJBQUEsS0FBSSxFQUFBLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDMUMsbUJBQUEsS0FBSSxFQUFBLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ25FLENBQUMsRUFBQyxDQUFBO1NBQ0w7YUFBTSxJQUFJLG1CQUFBLElBQUksRUFBQSxDQUFDLG1CQUFtQixDQUFDLElBQUksS0FBSyxnQkFBZ0IsQ0FBQyxhQUFhLEVBQUU7WUFDekUsbUJBQUEsSUFBSSxFQUFBLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNwQyxtQkFBQSxJQUFJLEVBQUEsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ2xDLG1CQUFBLElBQUksRUFBQSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLENBQUM7O2dCQUUvQixjQUFjLEdBQVEsSUFBSSwwQkFBMEIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxtQkFBQSxJQUFJLEVBQUEsQ0FBQyxtQkFBbUIsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLEtBQUssRUFBRTtZQUM3SCxjQUFjLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPOzs7O1lBQUMsVUFBQyxPQUFZO2dCQUNoRCxJQUFJLE9BQU8sQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLEVBQUU7O3dCQUMxQixhQUFhLEdBQUcsbUJBQUEsS0FBSSxFQUFBLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUN2SCxtQkFBQSxLQUFJLEVBQUEsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2lCQUN0RDtxQkFBTTs7d0JBQ0MsVUFBVSxHQUFHLG1CQUFBLEtBQUksRUFBQSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDakgsbUJBQUEsS0FBSSxFQUFBLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztpQkFDakQ7Z0JBQ0QsbUJBQUEsS0FBSSxFQUFBLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ25FLENBQUMsRUFBQyxDQUFBO1NBRUw7UUFDRCxPQUFPLG1CQUFBLElBQUksRUFBQSxDQUFDO0lBQ2hCLENBQUM7Ozs7OztJQUVELGdEQUFpQjs7Ozs7SUFBakI7UUFBQSxpQkEyQkM7UUExQkcsbUJBQUEsSUFBSSxFQUFBLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxtQkFBQSxJQUFJLEVBQUEsQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsbUJBQW1CO1lBQUUsT0FBTyxtQkFBQSxJQUFJLEVBQUEsQ0FBQztRQUV0RSxtQkFBQSxJQUFJLEVBQUEsQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsT0FBTzs7OztRQUFDLFVBQUMsT0FBWTs7Z0JBQ2pFLEdBQUcsR0FBUSxFQUFFO1lBQ2pCLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM1QixHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsT0FBTyxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQztZQUNoRyxHQUFHLENBQUMsbUJBQW1CLENBQUMsR0FBRyxPQUFPLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDO1lBQ3pHLEdBQUcsQ0FBQyxhQUFhLENBQUMsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDO1lBQ3hDLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxtQkFBQSxLQUFJLEVBQUEsQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO1lBQ3ZELEdBQUcsQ0FBQyxjQUFjLENBQUMsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDO1lBQ3pDLEdBQUcsQ0FBQyxjQUFjLENBQUMsR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxJQUFJLFlBQVksQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMseUJBQXlCO1lBQ2pJLEdBQUcsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDeEIsR0FBRyxDQUFDLHFCQUFxQixDQUFDLEdBQUcsRUFBRSxDQUFDO1lBRWhDLE9BQU8sQ0FBQyxXQUFXLENBQUMsT0FBTzs7OztZQUFDLFVBQUMsT0FBWTtnQkFDckMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzVDLENBQUMsRUFBQyxDQUFDO1lBQ0gsR0FBRyxDQUFDLFlBQVksQ0FBQyxHQUFHLG1CQUFBLEtBQUksRUFBQSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFFOUMsMEZBQTBGO1lBQzFGLCtFQUErRTtZQUUvRSxtQkFBQSxLQUFJLEVBQUEsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDOUMsQ0FBQyxFQUFDLENBQUM7UUFDSCxPQUFPLG1CQUFBLElBQUksRUFBQSxDQUFDO0lBQ2hCLENBQUM7Ozs7OztJQUVELDhDQUFlOzs7OztJQUFmLFVBQWdCLElBQVMsRUFBRSxNQUFXO1FBQ2xDLElBQUksSUFBSSxJQUFJLE1BQU0sRUFBRTs7Z0JBQ1osR0FBRyxHQUFRLEVBQUU7WUFDakIsR0FBRyxDQUFDLGdCQUFnQixHQUFHLENBQUMsQ0FBQztZQUN6QixHQUFHLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQzNDLEdBQUcsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO1lBQ2pCLEdBQUcsQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLENBQUM7WUFDMUIsR0FBRyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsNEJBQTRCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDO1lBQ3ZILEdBQUcsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUM3QixHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDekIsR0FBRyxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDO1lBQ3pELEdBQUcsQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQ3BDLEdBQUcsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLDRCQUE0QixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsNEJBQTRCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQztZQUN4SCxHQUFHLENBQUMsa0JBQWtCLEdBQUcsTUFBTSxDQUFDO1lBQ2hDLEdBQUcsQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDO1lBRXRCLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQzNDO0lBQ0wsQ0FBQzs7Ozs7O0lBRUQsNkNBQWM7Ozs7O0lBQWQ7UUFBQSxpQkFtRUM7UUFsRUcsbUJBQUEsSUFBSSxFQUFBLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUM5QixtQkFBQSxJQUFJLEVBQUEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLGlCQUFpQixHQUFHLG1CQUFBLElBQUksRUFBQSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQztRQUM3RSxtQkFBQSxJQUFJLEVBQUEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDdkMsbUJBQUEsSUFBSSxFQUFBLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsUUFBUSxHQUFHLG1CQUFBLElBQUksRUFBQSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU07UUFDbEUsbUJBQUEsSUFBSSxFQUFBLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsU0FBUyxHQUFHLG1CQUFBLElBQUksRUFBQSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU07UUFDcEUsbUJBQUEsSUFBSSxFQUFBLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsT0FBTyxHQUFHLG1CQUFBLElBQUksRUFBQSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQztRQUM3RSxtQkFBQSxJQUFJLEVBQUEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxRQUFRLEdBQUcsbUJBQUEsSUFBSSxFQUFBLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDO1FBQzlFLG1CQUFBLElBQUksRUFBQSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLGNBQWMsR0FBRyxtQkFBQSxJQUFJLEVBQUEsQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUM7UUFDdkYsbUJBQUEsSUFBSSxFQUFBLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsbUJBQUEsSUFBSSxFQUFBLENBQUMsZUFBZSxDQUFDLG1CQUFBLElBQUksRUFBQSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDN0csbUJBQUEsSUFBSSxFQUFBLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEdBQUcsbUJBQUEsSUFBSSxFQUFBLENBQUMsU0FBUyxDQUFDLENBQUMsK0JBQStCO1FBQ2pGLG1CQUFBLElBQUksRUFBQSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsWUFBWSxHQUFHLG1CQUFBLElBQUksRUFBQSxDQUFDLGVBQWUsQ0FBQyxtQkFBQSxJQUFJLEVBQUEsQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDN0csbUJBQUEsSUFBSSxFQUFBLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxlQUFlLEdBQUcsbUJBQUEsSUFBSSxFQUFBLENBQUMsZUFBZSxDQUFDLG1CQUFBLElBQUksRUFBQSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNoSCxtQkFBQSxJQUFJLEVBQUEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsR0FBRyxtQkFBQSxJQUFJLEVBQUEsQ0FBQyxlQUFlLENBQUMsbUJBQUEsSUFBSSxFQUFBLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3ZHLG1CQUFBLElBQUksRUFBQSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEdBQUcsbUJBQUEsSUFBSSxFQUFBLENBQUMsUUFBUSxDQUFDO1FBQ3ZELG1CQUFBLElBQUksRUFBQSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsY0FBYyxHQUFHLE1BQU0sQ0FBQSxDQUFDLGdCQUFnQjtRQUU5RCxtQkFBQSxJQUFJLEVBQUEsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3pDLG1CQUFBLElBQUksRUFBQSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLE9BQU87Ozs7UUFBQyxVQUFDLE9BQVk7O2dCQUNuRSxHQUFHLEdBQVEsRUFBRTtZQUVqQixHQUFHLENBQUMsa0JBQWtCLENBQUMsR0FBRyxtQkFBQSxLQUFJLEVBQUEsQ0FBQyxnQkFBZ0IsQ0FBQztZQUNoRCxHQUFHLENBQUMsU0FBUyxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQztZQUM3QixHQUFHLENBQUMsY0FBYyxDQUFDLEdBQUcsbUJBQUEsS0FBSSxFQUFBLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUNsRSxHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsbUJBQUEsS0FBSSxFQUFBLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUM3RCxHQUFHLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxtQkFBQSxLQUFJLEVBQUEsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzlELEdBQUcsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7WUFDekIsR0FBRyxDQUFDLGVBQWUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPO1lBRTNDLG1CQUFBLEtBQUksRUFBQSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDakQsQ0FBQyxFQUFDLENBQUM7UUFFSCwyQ0FBMkM7UUFDM0MsbUJBQUEsSUFBSSxFQUFBLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUMvQyxtQkFBQSxJQUFJLEVBQUEsQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLE9BQU87Ozs7UUFBQyxVQUFDLE9BQVk7O2dCQUMzRCxHQUFHLEdBQVEsRUFBRTtZQUVqQixHQUFHLENBQUMsYUFBYSxDQUFDLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQztZQUN6QyxHQUFHLENBQUMsaUJBQWlCLENBQUMsR0FBRyxPQUFPLENBQUMsZUFBZSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDO1lBQzFHLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLHVCQUF1QjtZQUN0RCxHQUFHLENBQUMsc0JBQXNCLENBQUMsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDO1lBRWxELEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLG1CQUFBLEtBQUksRUFBQSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQztZQUMzRSxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxDQUFBLENBQUMsUUFBUTtZQUM5QyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxDQUFBLENBQUMsUUFBUTtZQUNoRCxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxDQUFBLENBQUMsUUFBUTtZQUU5QyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUMsa0JBQWtCLENBQUMsR0FBRyxFQUFFLENBQUM7WUFFN0MsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPOzs7O1lBQUMsVUFBQyxVQUFlOztvQkFDaEMsTUFBTSxHQUFRLEVBQUU7O29CQUVoQixPQUFPLEdBQUcsbUJBQUEsS0FBSSxFQUFBLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJOzs7O2dCQUFDLFVBQUMsSUFBUyxJQUFLLE9BQUEsSUFBSSxDQUFDLFVBQVUsSUFBSSxVQUFVLENBQUMsVUFBVSxFQUF4QyxDQUF3QyxFQUFDO2dCQUNwSCxNQUFNLENBQUMsa0JBQWtCLENBQUMsR0FBRyxtQkFBQSxLQUFJLEVBQUEsQ0FBQyxnQkFBZ0IsQ0FBQztnQkFDbkQsTUFBTSxDQUFDLFdBQVcsQ0FBQyxHQUFHLG1CQUFBLEtBQUksRUFBQSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSTs7OztnQkFBQyxVQUFDLElBQVMsSUFBSyxPQUFBLElBQUksQ0FBQyxVQUFVLEtBQUssVUFBVSxDQUFDLFVBQVUsRUFBekMsQ0FBeUMsRUFBQyxDQUFDLEdBQUcsQ0FBQztnQkFDbEksTUFBTSxDQUFDLFdBQVcsQ0FBQyxHQUFHLG1CQUFBLEtBQUksRUFBQSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUMxRixNQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsbUJBQUEsS0FBSSxFQUFBLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDbkUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLG1CQUFBLEtBQUksRUFBQSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMxRSxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsbUJBQUEsS0FBSSxFQUFBLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsSUFBSTs7OztnQkFBQyxVQUFDLElBQVMsSUFBSyxPQUFBLElBQUksQ0FBQyxVQUFVLElBQUksT0FBTyxDQUFDLFVBQVUsRUFBckMsQ0FBcUMsRUFBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU87Z0JBQ3JKLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN6RCxDQUFDLEVBQUMsQ0FBQztZQUVILG1CQUFBLEtBQUksRUFBQSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDeEQsQ0FBQyxFQUFDLENBQUM7UUFFSCw2QkFBNkI7UUFDN0IsT0FBTyxtQkFBQSxJQUFJLEVBQUEsQ0FBQztJQUNoQixDQUFDOzs7Ozs7SUFFRCw0Q0FBYTs7Ozs7SUFBYjtRQUFBLGlCQWtEQztRQWpERyxtQkFBQSxJQUFJLEVBQUEsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ2pDLElBQUksbUJBQUEsSUFBSSxFQUFBLENBQUMsbUJBQW1CLENBQUMsY0FBYyxJQUFJLG1CQUFBLElBQUksRUFBQSxDQUFDLG1CQUFtQixDQUFDLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQy9GLG1CQUFBLElBQUksRUFBQSxDQUFDLG1CQUFtQixDQUFDLGNBQWMsQ0FBQyxPQUFPOzs7O1lBQUMsVUFBQyxPQUFZOztvQkFDckQsS0FBSyxHQUFHLG1CQUFBLEtBQUksRUFBQSxDQUFDLFlBQVksQ0FBQyxNQUFNOzs7O2dCQUFDLFVBQUEsQ0FBQyxJQUFJLE9BQUEsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsS0FBSyxPQUFPLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxFQUFqRSxDQUFpRSxFQUFDO2dCQUM1RyxJQUFJLE9BQU8sQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLEtBQUssV0FBVyxFQUFFOzt3QkFDL0MsR0FBRyxHQUFHO3dCQUNOLGdCQUFnQixFQUFFLG1CQUFBLEtBQUksRUFBQSxDQUFDLGdCQUFnQjt3QkFDdkMsVUFBVSxFQUFFLG1CQUFBLEtBQUksRUFBQSxDQUFDLGtCQUFrQixFQUFFO3dCQUNyQyxRQUFRLEVBQUUsbUJBQUEsS0FBSSxFQUFBLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQzt3QkFDakUsaUJBQWlCLEVBQUUsbUJBQUEsS0FBSSxFQUFBLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQzt3QkFDMUUsV0FBVyxFQUFFLG1CQUFBLEtBQUksRUFBQSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQzs7d0JBQy9ELFFBQVEsRUFBRSxtQkFBQSxLQUFJLEVBQUEsQ0FBQyxRQUFROzt3QkFDdkIsTUFBTSxFQUFFLG1CQUFBLEtBQUksRUFBQSxDQUFDLE1BQU07O3dCQUNuQixlQUFlLEVBQUUsbUJBQUEsS0FBSSxFQUFBLENBQUMsbUJBQW1CLENBQUMsU0FBUzt3QkFDbkQsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVO3dCQUMvQixhQUFhLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWE7d0JBQ3JDLFlBQVksRUFBRSxtQkFBQSxLQUFJLEVBQUEsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO3dCQUNyRSxVQUFVLEVBQUUsbUJBQUEsS0FBSSxFQUFBLENBQUMsbUJBQW1CLENBQUMsWUFBWTt3QkFDakQsbUJBQW1CLEVBQUUsbUJBQUEsS0FBSSxFQUFBLENBQUMsbUJBQW1CLENBQUMsWUFBWTt3QkFDMUQsdUJBQXVCLEVBQUUsRUFBRTs7d0JBQzNCLDZCQUE2QixFQUFFLEVBQUU7O3dCQUNqQyxhQUFhLEVBQUUsRUFBRTtxQkFDcEI7b0JBQ0QsbUJBQUEsS0FBSSxFQUFBLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtpQkFDeEM7cUJBQ0k7O3dCQUNHLElBQUksR0FBRzt3QkFDUCxnQkFBZ0IsRUFBRSxHQUFHO3dCQUNyQixVQUFVLEVBQUUsbUJBQUEsS0FBSSxFQUFBLENBQUMsa0JBQWtCLEVBQUU7O3dCQUNyQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7d0JBQzNELGlCQUFpQixFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO3dCQUNwRSxXQUFXLEVBQUUsbUJBQUEsS0FBSSxFQUFBLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDOzt3QkFDL0QsUUFBUSxFQUFFLG1CQUFBLEtBQUksRUFBQSxDQUFDLFFBQVE7O3dCQUN2QixNQUFNLEVBQUUsbUJBQUEsS0FBSSxFQUFBLENBQUMsTUFBTTs7d0JBQ25CLGVBQWUsRUFBRSxtQkFBQSxLQUFJLEVBQUEsQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTO3dCQUNuRCxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVU7d0JBQy9CLGFBQWEsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYTt3QkFDckMsWUFBWSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO3dCQUMvRCxVQUFVLEVBQUUsbUJBQUEsS0FBSSxFQUFBLENBQUMsbUJBQW1CLENBQUMsWUFBWTt3QkFDakQsbUJBQW1CLEVBQUUsbUJBQUEsS0FBSSxFQUFBLENBQUMsbUJBQW1CLENBQUMsWUFBWTt3QkFDMUQsOEJBQThCLEVBQUUsR0FBRzt3QkFDbkMsNkJBQTZCLEVBQUUsR0FBRzt3QkFDbEMsZUFBZSxFQUFFLEdBQUc7cUJBQ3ZCO29CQUNELG1CQUFBLEtBQUksRUFBQSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7aUJBQ3pDO1lBQ0wsQ0FBQyxFQUFDLENBQUM7U0FDTjtRQUNELE9BQU8sbUJBQUEsSUFBSSxFQUFBLENBQUM7SUFDaEIsQ0FBQzs7OztJQUVELHVEQUF3Qjs7O0lBQXhCOztZQUNRLGVBQWUsR0FBRyxFQUFFO1FBQ3hCLGVBQWUsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHOzs7O1FBQUMsVUFBQyxPQUFZO1lBQ3hFLE9BQU8sUUFBUSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN4QyxDQUFDLEVBQUMsQ0FBQTtRQUNGLElBQUksQ0FBQyxhQUFhLEdBQUcsZUFBZSxDQUFDLE1BQU07Ozs7O1FBQUMsVUFBQyxDQUFNLEVBQUUsQ0FBTSxJQUFLLE9BQUEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQWQsQ0FBYyxFQUFDLENBQUM7SUFDcEYsQ0FBQzs7OztJQUVELGlEQUFrQjs7O0lBQWxCO1FBQ0ksSUFBSSxDQUFDLGFBQWEsSUFBSSxDQUFDLENBQUM7UUFDeEIsSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUM7UUFDcEIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzlCLENBQUM7Ozs7SUFFRCxpREFBa0I7OztJQUFsQjtRQUNJLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO0lBQ3JFLENBQUM7Ozs7SUFFRCxvQ0FBSzs7O0lBQUw7UUFDSSxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDekIsQ0FBQzs7Ozs7O0lBRUQsNkNBQWM7Ozs7O0lBQWQsVUFBZSxXQUFtQixFQUFFLE9BQVk7UUFDNUMsSUFBSSxXQUFXLENBQUMsV0FBVyxFQUFFLEtBQUssTUFBTSxFQUFFO1lBQ3RDLE9BQU8sT0FBTyxDQUFDLFFBQVEsQ0FBQTtTQUMxQjthQUNJO1lBQ0QsT0FBTyxXQUFXLENBQUE7U0FDckI7SUFDTCxDQUFDOzs7Ozs7O0lBRUQsNENBQWE7Ozs7OztJQUFiLFVBQWMsRUFBTztRQUNqQixtQkFBQSxJQUFJLEVBQUEsQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFBO1FBQ2xCLE9BQU8sbUJBQUEsSUFBSSxFQUFBLENBQUE7SUFDZixDQUFDOzs7Ozs7O0lBRUQsMENBQVc7Ozs7OztJQUFYLFVBQVksRUFBTztRQUNmLG1CQUFBLElBQUksRUFBQSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDakIsT0FBTyxtQkFBQSxJQUFJLEVBQUEsQ0FBQTtJQUNmLENBQUM7Ozs7O0lBRUQsNENBQWE7Ozs7SUFBYixVQUFjLEtBQWE7UUFDdkIsT0FBTyxLQUFLLEdBQUcsR0FBRyxDQUFDO0lBQ3ZCLENBQUM7Ozs7Ozs7SUFFRCxtREFBb0I7Ozs7OztJQUFwQixVQUFxQixLQUFVO1FBQzNCLG1CQUFBLElBQUksRUFBQSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQztRQUMvQixPQUFPLG1CQUFBLElBQUksRUFBQSxDQUFBO0lBQ2YsQ0FBQzs7Ozs7OztJQUVELGlEQUFrQjs7Ozs7O0lBQWxCLFVBQW1CLEtBQVU7UUFDekIsbUJBQUEsSUFBSSxFQUFBLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztRQUM3QixPQUFPLG1CQUFBLElBQUksRUFBQSxDQUFBO0lBQ2YsQ0FBQzs7Ozs7OztJQUVELHVEQUF3Qjs7Ozs7O0lBQXhCLFVBQXlCLEtBQVU7UUFDL0IsbUJBQUEsSUFBSSxFQUFBLENBQUMscUJBQXFCLEdBQUcsS0FBSyxDQUFDO1FBQ25DLE9BQU8sbUJBQUEsSUFBSSxFQUFBLENBQUE7SUFDZixDQUFDOzs7Ozs7O0lBRUQsNENBQWE7Ozs7OztJQUFiLFVBQWMsS0FBVTtRQUNwQixtQkFBQSxJQUFJLEVBQUEsQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLE9BQU8sbUJBQUEsSUFBSSxFQUFBLENBQUE7SUFDZixDQUFDOzs7Ozs7O0lBRUQsaURBQWtCOzs7Ozs7SUFBbEIsVUFBbUIsS0FBVTtRQUN6QixtQkFBQSxJQUFJLEVBQUEsQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFBO1FBQzVCLE9BQU8sbUJBQUEsSUFBSSxFQUFBLENBQUE7SUFDZixDQUFDOzs7Ozs7O0lBRUQsMkNBQVk7Ozs7OztJQUFaLFVBQWEsS0FBVTtRQUNuQixtQkFBQSxJQUFJLEVBQUEsQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFBO1FBQ3RCLE9BQU8sbUJBQUEsSUFBSSxFQUFBLENBQUE7SUFDZixDQUFDOzs7Ozs7O0lBRUQsNkNBQWM7Ozs7OztJQUFkLFVBQWUsS0FBVTtRQUNyQixtQkFBQSxJQUFJLEVBQUEsQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFBO1FBQ3hCLE9BQU8sbUJBQUEsSUFBSSxFQUFBLENBQUE7SUFDZixDQUFDOzs7Ozs7O0lBRUQsOENBQWU7Ozs7OztJQUFmLFVBQWdCLEtBQVU7UUFDdEIsbUJBQUEsSUFBSSxFQUFBLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQTtRQUN6QixPQUFPLG1CQUFBLElBQUksRUFBQSxDQUFBO0lBQ2YsQ0FBQzs7Ozs7OztJQUVELDhDQUFlOzs7Ozs7SUFBZixVQUFnQixLQUFVO1FBQ3RCLG1CQUFBLElBQUksRUFBQSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUE7UUFDekIsT0FBTyxtQkFBQSxJQUFJLEVBQUEsQ0FBQTtJQUNmLENBQUM7Ozs7Ozs7SUFFRCxrREFBbUI7Ozs7OztJQUFuQixVQUFvQixLQUFVO1FBQzFCLG1CQUFBLElBQUksRUFBQSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQTtRQUM3QixPQUFPLG1CQUFBLElBQUksRUFBQSxDQUFBO0lBQ2YsQ0FBQzs7Ozs7OztJQUVELCtDQUFnQjs7Ozs7O0lBQWhCLFVBQWlCLEtBQVU7UUFDdkIsbUJBQUEsSUFBSSxFQUFBLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQTtRQUMxQixPQUFPLG1CQUFBLElBQUksRUFBQSxDQUFBO0lBQ2YsQ0FBQzs7Ozs7OztJQUVELDJDQUFZOzs7Ozs7SUFBWixVQUFhLEtBQVU7UUFDbkIsbUJBQUEsSUFBSSxFQUFBLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN2QixPQUFPLG1CQUFBLElBQUksRUFBQSxDQUFBO0lBQ2YsQ0FBQzs7Ozs7OztJQUVELGdEQUFpQjs7Ozs7O0lBQWpCLFVBQWtCLEtBQVU7UUFDeEIsbUJBQUEsSUFBSSxFQUFBLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztRQUM1QixPQUFPLG1CQUFBLElBQUksRUFBQSxDQUFDO0lBQ2hCLENBQUM7Ozs7Ozs7SUFFRCxrREFBbUI7Ozs7OztJQUFuQixVQUFvQixLQUFVO1FBQzFCLG1CQUFBLElBQUksRUFBQSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztRQUM5QixPQUFPLG1CQUFBLElBQUksRUFBQSxDQUFDO0lBQ2hCLENBQUM7Ozs7Ozs7SUFDRCxpREFBa0I7Ozs7OztJQUFsQixVQUFtQixLQUFVO1FBQ3pCLG1CQUFBLElBQUksRUFBQSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7UUFDN0IsT0FBTyxtQkFBQSxJQUFJLEVBQUEsQ0FBQztJQUNoQixDQUFDOzs7Ozs7O0lBRUQsa0RBQW1COzs7Ozs7SUFBbkIsVUFBb0IsS0FBVTtRQUMxQixtQkFBQSxJQUFJLEVBQUEsQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFDOUIsT0FBTyxtQkFBQSxJQUFJLEVBQUEsQ0FBQztJQUNoQixDQUFDOzs7OztJQUVELHlDQUFVOzs7O0lBQVYsVUFBVyxJQUFTOztZQUNaLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUM7O1lBQ3pDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsR0FBRyxHQUFHLFdBQVcsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsUUFBUSxFQUFFO1FBQ3RGLE9BQU8sRUFBRSxDQUFDO0lBQ2QsQ0FBQzs7Ozs7SUFFRCxxREFBc0I7Ozs7SUFBdEIsVUFBdUIsSUFBUzs7WUFDeEIsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQ3hCLE9BQU8sSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUMzQyxDQUFDOzs7O0lBRUQsOENBQWU7OztJQUFmOztZQUNRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxjQUFjLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLFFBQVEsRUFBRTtRQUN2SSxPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7Ozs7SUFFRCx1Q0FBUTs7O0lBQVI7UUFDSSxJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxlQUFlLEtBQUssYUFBYSxFQUFFO1lBQzVELE9BQU8sV0FBVyxDQUFDO1NBQ3RCO2FBQ0k7WUFDRCxPQUFPLFdBQVcsQ0FBQztTQUN0QjtJQUNMLENBQUM7Ozs7OztJQUVELDRDQUFhOzs7OztJQUFiLFVBQWMsT0FBWSxFQUFFLFlBQTBCOztZQUM5QyxHQUFHLEdBQVEsRUFBRTtRQUVqQixHQUFHLENBQUMsWUFBWSxDQUFDLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO1FBQy9ELEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7UUFDeEUsR0FBRyxDQUFDLGFBQWEsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUM1QyxHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3pELEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQzVCLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMvRCxHQUFHLENBQUMsZUFBZSxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO1FBQ3JFLEdBQUcsQ0FBQyxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ3hELEdBQUcsQ0FBQyxVQUFVLENBQUMsR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckksR0FBRyxDQUFDLHNCQUFzQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2hDLEdBQUcsQ0FBQyxXQUFXLENBQUMsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNyQixHQUFHLENBQUMsaUJBQWlCLENBQUMsR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDaEQsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNuQixHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUM1RCxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsbUJBQW1CLENBQUMsR0FBRyxPQUFPLENBQUMsMkJBQTJCLENBQUMsQ0FBQztRQUMxRSxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsT0FBTyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDbEksR0FBRyxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSTs7OztRQUFDLFVBQUMsSUFBUyxJQUFLLE9BQUEsSUFBSSxDQUFDLFVBQVUsSUFBSSxPQUFPLENBQUMsWUFBWSxDQUFDLEVBQXhDLENBQXdDLEVBQUMsQ0FBQyxPQUFPLENBQUM7UUFFbkosR0FBRyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsT0FBTztRQUNuQyxHQUFHLENBQUMsbUJBQW1CLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxxQkFBcUI7UUFDcEQsR0FBRyxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN6QyxHQUFHLENBQUMsV0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3hDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLGVBQWU7UUFDNUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLEdBQUcsT0FBTyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPOzs7WUFDbkUsUUFBUSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSTs7OztRQUFDLFVBQUMsSUFBUyxJQUFLLE9BQUEsSUFBSSxDQUFDLFVBQVUsSUFBSSxPQUFPLENBQUMsWUFBWSxDQUFDLEVBQXhDLENBQXdDLEVBQUM7UUFDeEksR0FBRyxDQUFDLG1CQUFtQixDQUFDLEdBQUcsUUFBUSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsTUFBTTtRQUNySixHQUFHLENBQUMsV0FBVyxDQUFDLEdBQUcsUUFBUSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRXRJLElBQUksWUFBWSxFQUFFO1lBQ2QsSUFBSSxZQUFZLENBQUMsNEJBQTRCLElBQUksWUFBWSxDQUFDLDRCQUE0QixFQUFFO2dCQUN4RixnQkFBZ0I7Z0JBQ2hCLEdBQUcsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQ3JCLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hGLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxnQkFBZ0IsR0FBRyxHQUFHLENBQUMsZUFBZSxDQUFDO2dCQUN2RCxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsZ0JBQWdCLEdBQUcsWUFBWSxDQUFDLDRCQUE0QixDQUFDO2dCQUM3RSxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsbUJBQW1CLEdBQUcsWUFBWSxDQUFDLDRCQUE0QixDQUFDO2dCQUNoRixHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztnQkFDaEQsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUMsWUFBWSxDQUFDO2dCQUN6RCxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO2dCQUNyQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLGNBQWMsR0FBRyxDQUFDLFlBQVksQ0FBQyxtQkFBbUIsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMxSCxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUM3RSxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsa0JBQWtCLEdBQUcsWUFBWSxDQUFDLHVCQUF1QixDQUFDO2dCQUMxRSxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQzthQUNwQztZQUVELElBQUksWUFBWSxDQUFDLHVCQUF1QixJQUFJLFlBQVksQ0FBQyx1QkFBdUIsRUFBRTtnQkFDOUUsZ0JBQWdCO2dCQUNoQixHQUFHLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUMxQixHQUFHLENBQUMsZUFBZSxDQUFDLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUMxRixHQUFHLENBQUMsZUFBZSxDQUFDLENBQUMsZ0JBQWdCLEdBQUcsR0FBRyxDQUFDLGVBQWUsQ0FBQztnQkFDNUQsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDLGdCQUFnQixHQUFHLFlBQVksQ0FBQyx1QkFBdUIsQ0FBQztnQkFDN0UsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDLHlCQUF5QixHQUFHLFlBQVksQ0FBQyx1QkFBdUIsQ0FBQztnQkFDdEYsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7Z0JBQ3JELEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7Z0JBQzFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQzNFLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsbUJBQW1CLElBQUksQ0FBQyxHQUFHLFlBQVksQ0FBQyxjQUFjLENBQUMsQ0FBQzthQUNoSTtZQUVELDBCQUEwQjtZQUMxQixHQUFHLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxZQUFZLENBQUMsbUJBQW1CLElBQUksQ0FBQyxDQUFDLEdBQUcsWUFBWSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzVGLEdBQUcsQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLENBQUMsWUFBWSxDQUFDLG1CQUFtQixJQUFJLENBQUMsQ0FBQyxHQUFHLFlBQVksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNyRyxHQUFHLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxZQUFZLENBQUMsbUJBQW1CLElBQUksQ0FBQyxDQUFDLEdBQUcsWUFBWSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ2pHLEdBQUcsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFlBQVksQ0FBQyxtQkFBbUIsSUFBSSxDQUFDLENBQUMsR0FBRyxZQUFZLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDaEc7UUFFRCxPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7Ozs7OztJQUVELHlDQUFVOzs7OztJQUFWLFVBQVcsT0FBaUIsRUFBRSxZQUEwQjs7WUFFaEQsR0FBRyxHQUFRO1lBQ1gsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtZQUN2QyxVQUFVLEVBQUUsT0FBTyxDQUFDLFVBQVU7WUFDOUIsUUFBUSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQztZQUNwRCxpQkFBaUIsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUM7WUFDN0QsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXO1lBQ2hDLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTs7WUFDdkIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNOztZQUNuQixlQUFlLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFNBQVM7WUFDbkQsYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztZQUNoRCxTQUFTLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1lBQzVDLFNBQVMsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFOztZQUMvQixRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQ3JDLGFBQWEsRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTTtZQUM5QyxlQUFlLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVE7WUFDbEQsT0FBTyxFQUFFLENBQUM7O1lBQ1YsYUFBYSxFQUFFLENBQUM7O1lBQ2hCLFNBQVMsRUFBRSxDQUFDOztZQUNaLGlCQUFpQixFQUFFLENBQUM7O1lBQ3BCLG9CQUFvQixFQUFFLENBQUM7O1lBQ3ZCLFNBQVMsRUFBRSxPQUFPLENBQUMsR0FBRztZQUN0QixTQUFTLEVBQUUsQ0FBQzs7WUFDWixlQUFlLEVBQUUsRUFBRTtZQUNuQixVQUFVLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRTtTQUNuQztRQUNELElBQUksWUFBWSxFQUFFO1lBQ2QsSUFBSSxZQUFZLENBQUMsNEJBQTRCLElBQUksWUFBWSxDQUFDLDRCQUE0QixFQUFFO2dCQUN4RixnQkFBZ0I7Z0JBQ2hCLEdBQUcsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQ3JCLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hGLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxnQkFBZ0IsR0FBRyxHQUFHLENBQUMsZUFBZSxDQUFDO2dCQUN2RCxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsZ0JBQWdCLEdBQUcsWUFBWSxDQUFDLDRCQUE0QixDQUFDO2dCQUM3RSxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsbUJBQW1CLEdBQUcsWUFBWSxDQUFDLDRCQUE0QixDQUFDO2dCQUNoRixHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztnQkFDaEQsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUMsWUFBWSxDQUFDO2dCQUN6RCxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO2dCQUNyQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLGNBQWMsR0FBRyxDQUFDLFlBQVksQ0FBQyxtQkFBbUIsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMxSCxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUM3RSxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsa0JBQWtCLEdBQUcsWUFBWSxDQUFDLHVCQUF1QixDQUFDO2dCQUMxRSxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQzthQUNwQztZQUVELElBQUksWUFBWSxDQUFDLHVCQUF1QixJQUFJLFlBQVksQ0FBQyx1QkFBdUIsRUFBRTtnQkFDOUUsZ0JBQWdCO2dCQUNoQixHQUFHLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUMxQixHQUFHLENBQUMsZUFBZSxDQUFDLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUMxRixHQUFHLENBQUMsZUFBZSxDQUFDLENBQUMsZ0JBQWdCLEdBQUcsR0FBRyxDQUFDLGVBQWUsQ0FBQztnQkFDNUQsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDLGdCQUFnQixHQUFHLFlBQVksQ0FBQyx1QkFBdUIsQ0FBQztnQkFDN0UsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDLHlCQUF5QixHQUFHLFlBQVksQ0FBQyx1QkFBdUIsQ0FBQztnQkFDdEYsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7Z0JBQ3JELEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7Z0JBQzFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQzNFLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsbUJBQW1CLElBQUksQ0FBQyxHQUFHLFlBQVksQ0FBQyxjQUFjLENBQUMsQ0FBQzthQUNoSTtZQUVELDBCQUEwQjtZQUMxQixHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFlBQVksQ0FBQyxtQkFBbUIsSUFBSSxDQUFDLENBQUMsR0FBRyxZQUFZLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDMUYsR0FBRyxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxDQUFDLFlBQVksQ0FBQyxtQkFBbUIsSUFBSSxDQUFDLENBQUMsR0FBRyxZQUFZLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDbkcsR0FBRyxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxZQUFZLENBQUMsbUJBQW1CLElBQUksQ0FBQyxDQUFDLEdBQUcsWUFBWSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQy9GLEdBQUcsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsWUFBWSxDQUFDLG1CQUFtQixJQUFJLENBQUMsQ0FBQyxHQUFHLFlBQVksQ0FBQyxjQUFjLENBQUMsQ0FBQztTQUM5RjtRQUVELE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQzs7Ozs7SUFFRCw4Q0FBZTs7OztJQUFmLFVBQWdCLEtBQVU7UUFDdEIsSUFBSTtZQUNBLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzlCLE9BQU8sS0FBSyxDQUFDO1NBQ2hCO1FBQ0QsT0FBTyxDQUFDLEVBQUU7WUFDTixPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxpQ0FBaUMsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUM1RDtJQUNMLENBQUM7Ozs7SUFFRCx5REFBMEI7OztJQUExQjs7WUFDUSxDQUFDLEdBQUcsR0FBRztRQUNYLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU87Ozs7UUFBQyxVQUFDLE9BQVk7WUFDMUQsSUFBSSxPQUFPLENBQUMsY0FBYyxLQUFLLEdBQUcsSUFBSSxPQUFPLENBQUMsY0FBYyxLQUFLLEdBQUcsRUFBRTtnQkFDbEUsQ0FBQyxHQUFHLEdBQUcsQ0FBQzthQUNYO1FBQ0wsQ0FBQyxFQUFDLENBQUM7UUFDSCxPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7Ozs7SUFFRCw0Q0FBYTs7O0lBQWI7O1lBQ1EsSUFBSSxHQUFtQixFQUFFO1FBQzdCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU87Ozs7UUFBQyxVQUFDLE9BQVk7WUFDMUQsSUFBSyxPQUFPLENBQUMsVUFBVSxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDdEQsSUFBSSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsTUFBTTs7OztnQkFBQyxVQUFDLENBQU0sSUFBSyxPQUFBLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEtBQUssT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBbkQsQ0FBbUQsRUFBQyxDQUFDO2FBQ3JHO1FBQ0wsQ0FBQyxFQUFDLENBQUM7UUFDSCxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ2pCLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQTtTQUN2QjthQUNHO1lBQ0EsT0FBTyxFQUFFLENBQUE7U0FDWjtJQUNMLENBQUM7SUFDTCwyQkFBQztBQUFELENBQUMsQUE3cUJELElBNnFCQzs7Ozs7OztJQTFxQkcsbURBQWlEOzs7OztJQUNqRCwrQ0FBNEI7Ozs7O0lBQzVCLHNDQUFvQjs7Ozs7SUFDcEIsd0NBQXNCOzs7OztJQUN0QixpREFBK0I7Ozs7O0lBQy9CLCtDQUE2Qjs7Ozs7SUFDN0IscURBQW1DOzs7OztJQUNuQywwQ0FBd0I7Ozs7O0lBQ3hCLGdEQUE4Qjs7Ozs7SUFDOUIsNENBQTBCOzs7OztJQUMxQiw0Q0FBMEI7Ozs7O0lBQzFCLDZDQUEyQjs7Ozs7SUFDM0IseUNBQXVCOzs7OztJQUN2Qix5Q0FBdUI7Ozs7O0lBQ3ZCLDhDQUE0Qjs7Ozs7SUFDNUIsMkNBQXlCOzs7OztJQUN6QiwrQ0FBNkI7Ozs7O0lBQzdCLGdEQUE4Qjs7Ozs7SUFDOUIsK0NBQTZCOzs7OztJQUM3QixnREFBOEI7Ozs7O0lBQzlCLHlDQUFzQjs7Ozs7SUFDdEIsNkNBQTBCOzs7OztJQUMxQix3Q0FBMEI7Ozs7O0lBRTFCLDRDQTRCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERJU0NPVU5UVFlQRSwgTGluZURpc2NvdW50LCBUUHJvZHVjdCwgVHJhbnNhY3Rpb25Eb2N1bWVudCwgVFJBTlNBQ1RJT05fVFlQRSB9IGZyb20gXCIuL21hcHBlci1saWJyYXJ5Lm1vZGVsXCJcclxuaW1wb3J0IHsgVHJhbnNhY3Rpb25Eb2N1bWVudEJ1aWxkZXIgfSBmcm9tIFwiLi9UcmFuc2FjdGlvbkRvY3VtZW50QnVpbGRlclwiO1xyXG5leHBvcnQgY2xhc3MgUkpNYXBwZXJCdWlsZGVyQ2xhc3Mge1xyXG5cclxuXHJcbiAgICBwcml2YXRlIHRyYW5zYWN0aW9uRG9jdW1lbnQ6IFRyYW5zYWN0aW9uRG9jdW1lbnQ7XHJcbiAgICBwcml2YXRlIHByb2R1Y3RRdWFudGl0eSA9IDA7XHJcbiAgICBwcml2YXRlIHVzZXJJZDogYW55O1xyXG4gICAgcHJpdmF0ZSBkZXZpY2VJZDogYW55O1xyXG4gICAgcHJpdmF0ZSB0cmFuc2FjdGlvbk51bWJlcjogYW55O1xyXG4gICAgcHJpdmF0ZSBtYW5pZmVzdFZlcnNpb246IGFueTtcclxuICAgIHByaXZhdGUgZGF0YWJhc2VTY2hlbWFWZXJzaW9uOiBhbnk7XHJcbiAgICBwcml2YXRlIGJhc2tldFR5cGU6IGFueTtcclxuICAgIHByaXZhdGUgeG1sU2NoZW1hVmVyc2lvbjogYW55O1xyXG4gICAgcHJpdmF0ZSBtYWpvclZlcnNpb246IGFueTtcclxuICAgIHByaXZhdGUgbWlub3JWZXJzaW9uOiBhbnk7XHJcbiAgICBwcml2YXRlIGV4dGVybmFsU3RhdGU6IGFueTtcclxuICAgIHByaXZhdGUgY2FzaGllcklkOiBhbnk7XHJcbiAgICBwcml2YXRlIGNvbXBhbnlJZDogYW55O1xyXG4gICAgcHJpdmF0ZSB0ZXJtaW5hbE51bWJlcjogYW55O1xyXG4gICAgcHJpdmF0ZSB0YXhNZXRob2RJZDogYW55O1xyXG4gICAgcHJpdmF0ZSB0cmFkaW5nUmVnaW9uSWQ6IGFueTtcclxuICAgIHByaXZhdGUgYmFza2V0Q3VycmVuY3lJZDogYW55O1xyXG4gICAgcHJpdmF0ZSBiYXNrZXRDb3VudHJ5SWQ6IGFueTtcclxuICAgIHByaXZhdGUgYmFza2V0TGFuZ3VhZ2VJZDogYW55O1xyXG4gICAgcHJpdmF0ZSBpdGVtQ291bnQgPSAwO1xyXG4gICAgcHJpdmF0ZSBsYXJnZXN0TnVtYmVyID0gMDtcclxuICAgIHByaXZhdGUgcmpPYmplY3Q6IGFueSA9IHt9XHJcblxyXG4gICAgcHJpdmF0ZSBwYXltZW50VHlwZXMgPSBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBwYXltZW50VHlwZTogJ0NhcmQnLFxyXG4gICAgICAgICAgICB0eXBlOiAnU0VQQVknLFxyXG4gICAgICAgICAgICB0ZW5kZXJUeXBlOiAnNScsXHJcbiAgICAgICAgICAgIHRlbmRlclN1YlR5cGU6ICc4JyxcclxuXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHBheW1lbnRUeXBlOiAnQ2FzaCcsXHJcbiAgICAgICAgICAgIHR5cGU6ICdUTUNfQ0FTSCcsXHJcbiAgICAgICAgICAgIHRlbmRlclR5cGU6ICcxJyxcclxuICAgICAgICAgICAgdGVuZGVyU3ViVHlwZTogJzAnXHJcblxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBwYXltZW50VHlwZTogJ1BEUScsXHJcbiAgICAgICAgICAgIHR5cGU6ICdVbmludGVncmF0ZWQnLFxyXG4gICAgICAgICAgICB0ZW5kZXJUeXBlOiAnMicsXHJcbiAgICAgICAgICAgIHRlbmRlclN1YlR5cGU6ICc4J1xyXG5cclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcGF5bWVudFR5cGU6ICdHaWZ0IENhcmQnLFxyXG4gICAgICAgICAgICB0eXBlOiAnVE1DX0dJRlRDQVJEJyxcclxuICAgICAgICAgICAgdGVuZGVyVHlwZTogJzUnLFxyXG4gICAgICAgICAgICB0ZW5kZXJTdWJUeXBlOiAnOCdcclxuICAgICAgICB9XHJcbiAgICBdXHJcblxyXG4gICAgY29uc3RydWN0b3IodHJhbnNhY3Rpb25Eb2M/OiBUcmFuc2FjdGlvbkRvY3VtZW50KSB7XHJcbiAgICAgICAgaWYgKHRyYW5zYWN0aW9uRG9jKSB7XHJcbiAgICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudCA9IHRyYW5zYWN0aW9uRG9jO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudCA9IHtcclxuICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uSWQ6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICBvZmZsaW5lVHJhbnNhY3Rpb25JZDogXCJcIixcclxuICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uUmVmOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgZGF0ZVRpbWU6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICBvcmdDb2RlOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgc3RvcmVJZDogXCJcIixcclxuICAgICAgICAgICAgICAgIHN0b3JlTm9kZUlkOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgc3RvcmVOb2RlU3RydWN0dXJlOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgZGV2aWNlSWQ6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICB0ZXJtaW5hbElkOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgdXNlcklkOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgaW5pdGlhdGluZ01vZHVsZTogXCJlQmFza2V0XCIsXHJcbiAgICAgICAgICAgICAgICBleHBvcnQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgYmFza2V0OiB7fSBhcyBhbnksXHJcbiAgICAgICAgICAgICAgICBiYXNrZXRTdW1tYXJ5OiB7fSBhcyBhbnksXHJcbiAgICAgICAgICAgICAgICBiYXNlQ3VycmVuY3k6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgb3BlcmF0aW9uU3RhdHVzOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgY3JlYXRlZEF0OiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgdXBkYXRlZEF0OiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgaWQ6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICBjdXJyZW50VHJhbnNhY3Rpb25EZXRhaWxzOiB7fSBhcyBhbnksXHJcbiAgICAgICAgICAgICAgICBzYWxlVG90YWw6IDAsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaW5pdGlsaXplSXRlbUNvdW50KCk7XHJcbiAgICAgICAgdGhpcy5zZXRMaW5lTnVtYmVyRm9yUHJvZHVjdHMoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRQb3NiYXNrZXRJbmZvKCkge1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ0tleXdvcmQnXSA9IHRoaXMuZ2VuZXJhdGVLZXl3b3JkKCk7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnSUQnXSA9IHRoaXMuZ2VuZXJhdGVJZCh0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuY3JlYXRlZEF0KTtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydYTUxTY2hlbWFWZXJzaW9uJ10gPSAnMic7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnTGFzdFVwZGF0ZWQnXSA9IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC51cGRhdGVkQXQ7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnTWFqb3JWZXJzaW9uJ10gPSB0aGlzLm1ham9yVmVyc2lvbjtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydNaW5vclZlcnNpb24nXSA9IHRoaXMubWlub3JWZXJzaW9uO1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ01hbmlmZXN0VmVyc2lvbiddID0gdGhpcy5tYW5pZmVzdFZlcnNpb247XHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnRGF0YWJhc2VTY2hlbWFWZXJzaW9uJ10gPSB0aGlzLmRhdGFiYXNlU2NoZW1hVmVyc2lvbjtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydCYXNrZXRUeXBlJ10gPSB0aGlzLmJhc2tldFR5cGU7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnU3RhdGUnXSA9IHRoaXMuZ2V0U3RhdGUoKTtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydFeHRlcm5hbFN0YXRlJ10gPSB0aGlzLmV4dGVybmFsU3RhdGU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBnZXRoZWFkZXJJbmZvKCkge1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ0hlYWRlciddID0ge307XHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnSGVhZGVyJ10uVGltZVpvbmVPZmZzZXQgPSB0aGlzLmNvbnZlcnRUb1N0cmluZyh0aGlzLmdlbmVyYXRlVGltZXpvbmVvZmZzZXQodGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmNyZWF0ZWRBdCkpO1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ0hlYWRlciddLkRhdGVUaW1lQ3JlYXRlZCA9IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5jcmVhdGVkQXQ7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnSGVhZGVyJ10uT3JpZ2luYXRlZEJ5ID0ge307XHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnSGVhZGVyJ10uT3JpZ2luYXRlZEJ5LkRldmljZUlEID0gdGhpcy5kZXZpY2VJZDtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydIZWFkZXInXS5PcmlnaW5hdGVkQnkuQ2FzaGllcklEID0gdGhpcy5jYXNoaWVySWQ7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnSGVhZGVyJ10uT3JpZ2luYXRlZEJ5LkNvbXBhbnlJRCA9IHRoaXMuY29tcGFueUlkO1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ0hlYWRlciddLk9yaWdpbmF0ZWRCeS5TdG9yZUlEID0gdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnN0b3JlSWQ7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnSGVhZGVyJ10uT3JpZ2luYXRlZEJ5LkJyYW5jaElEID0gdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnN0b3JlSWQ7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnSGVhZGVyJ10uT3JpZ2luYXRlZEJ5LlRlcm1pbmFsTnVtYmVyID0gdGhpcy50ZXJtaW5hbE51bWJlcjtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydIZWFkZXInXS5PcmlnaW5hdGVkQnkuVHJhbnNhY3Rpb25OdW1iZXIgPSB0aGlzLnRyYW5zYWN0aW9uTnVtYmVyO1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ0hlYWRlciddLlRheE1ldGhvZElEID0gdGhpcy50YXhNZXRob2RJZDtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydIZWFkZXInXS5EeW5hbWljU3RvY2tMb29rdXAgPSB0aGlzLmdlbmVyYXRlRHluYW1pY1N0b2NrTG9va1VwKCk7Ly90b2RvXHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnSGVhZGVyJ10uQmFza2V0TGFuZ3VhZ2VJRCA9IHRoaXMuYmFza2V0TGFuZ3VhZ2VJZDsgLy90b2RvXHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnSGVhZGVyJ10uQmFza2V0Q291bnRyeUlEID0gdGhpcy5iYXNrZXRDb3VudHJ5SWQ7IC8vdG9kb1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ0hlYWRlciddLkJhc2tldEN1cnJlbmN5SUQgPSB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFzZUN1cnJlbmN5O1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ0hlYWRlciddLlRyYWRpbmdSZWdpb25JRCA9IHRoaXMudHJhZGluZ1JlZ2lvbklkO1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ0hlYWRlciddLkV1cm96b25lID0gXCIgXCI7Ly91bmtub3duXHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnSGVhZGVyJ10uRXVyb0Jhc2VFeGNoYW5nZVJhdGUgPSBcIlwiOyAvL3Vua25vd25cclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydIZWFkZXInXS5QcmludGFibGVOYW1lID0gXCJcIjsgLy91bmtub3duXHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIHJqTWFwcGVyKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQudHlwZSA9PT0gVFJBTlNBQ1RJT05fVFlQRS5TQUxFKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmpPYmplY3RbJ1Byb2R1Y3RTYWxlJ10gPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnTW9kaWZpZXJJdGVtJ10gPSBbXTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQucHJvZHVjdHMuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgbGluZURpc2NvdW50ID0gW107XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC5saW5lRGlzY291bnQgJiYgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC5saW5lRGlzY291bnQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxpbmVEaXNjb3VudCA9IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQubGluZURpc2NvdW50LmZpbHRlcigoeDogYW55KSA9PiB4Lml0ZW1MaW5lSWQgPT09IGVsZW1lbnQuaXRlbUxpbmVJZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxpbmVEaXNjb3VudC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC5saW5lRGlzY291bnQuaW5kZXhPZihsaW5lRGlzY291bnRbMF0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC5saW5lRGlzY291bnQuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGxldCBkYXRhID0gdGhpcy5hZGRQcm9kdWN0KGVsZW1lbnQsIChsaW5lRGlzY291bnQubGVuZ3RoID4gMCA/IGxpbmVEaXNjb3VudFswXSA6IG51bGwpKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmpPYmplY3RbJ1Byb2R1Y3RTYWxlJ10ucHVzaChkYXRhKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0TW9kaWZpZXJJdGVtKGxpbmVEaXNjb3VudC5sZW5ndGggPiAwID8gbGluZURpc2NvdW50WzBdIDogbnVsbCwgZWxlbWVudC5pdGVtTGluZUlkKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQudHlwZSA9PT0gVFJBTlNBQ1RJT05fVFlQRS5SRUZVTkQpIHtcclxuICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnUHJvZHVjdFJldHVybiddID0gW107XHJcbiAgICAgICAgICAgIHRoaXMucmpPYmplY3RbJ01vZGlmaWVySXRlbSddID0gW107XHJcbiAgICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQucHJvZHVjdHMuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgZGF0YSA9IHRoaXMucmV0dXJuUHJvZHVjdChlbGVtZW50LCAoZWxlbWVudC5oYXNPd25Qcm9wZXJ0eSgnbGluZURpc2NvdW50JykgPyBlbGVtZW50LmxpbmVEaXNjb3VudCA6IG51bGwpKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmpPYmplY3RbJ1Byb2R1Y3RSZXR1cm4nXS5wdXNoKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRNb2RpZmllckl0ZW0oZWxlbWVudC5saW5lRGlzY291bnQsIGVsZW1lbnQuaXRlbUxpbmVJZCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnR5cGUgPT09IFRSQU5TQUNUSU9OX1RZUEUuU0FMRV9SRUZVTkQpIHtcclxuICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnUHJvZHVjdFJldHVybiddID0gW107XHJcbiAgICAgICAgICAgIHRoaXMucmpPYmplY3RbJ01vZGlmaWVySXRlbSddID0gW107XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBsZXQgdHJhbnNhY3Rpb25Eb2M6IGFueSA9IG5ldyBUcmFuc2FjdGlvbkRvY3VtZW50QnVpbGRlcigpLmJhc2tldCh0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuY3VycmVudFRyYW5zYWN0aW9uRGV0YWlscykuYnVpbGQoKTtcclxuICAgICAgICAgICAgdHJhbnNhY3Rpb25Eb2MuYmFza2V0LnByb2R1Y3RzLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IGRhdGEgPSB0aGlzLnJldHVyblByb2R1Y3QoZWxlbWVudCwgKGVsZW1lbnQuaGFzT3duUHJvcGVydHkoJ2xpbmVEaXNjb3VudCcpID8gZWxlbWVudC5saW5lRGlzY291bnQgOiBudWxsKSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJqT2JqZWN0WydQcm9kdWN0UmV0dXJuJ10ucHVzaChkYXRhKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0TW9kaWZpZXJJdGVtKGVsZW1lbnQubGluZURpc2NvdW50LCBlbGVtZW50Lml0ZW1MaW5lSWQpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnR5cGUgPT09IFRSQU5TQUNUSU9OX1RZUEUuU0FMRV9FWENIQU5HRSkge1xyXG4gICAgICAgICAgICB0aGlzLnJqT2JqZWN0WydQcm9kdWN0UmV0dXJuJ10gPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnUHJvZHVjdFNhbGUnXSA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLnJqT2JqZWN0WydNb2RpZmllckl0ZW0nXSA9IFtdO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgbGV0IHRyYW5zYWN0aW9uRG9jOiBhbnkgPSBuZXcgVHJhbnNhY3Rpb25Eb2N1bWVudEJ1aWxkZXIoKS5iYXNrZXQodGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmN1cnJlbnRUcmFuc2FjdGlvbkRldGFpbHMpLmJ1aWxkKCk7XHJcbiAgICAgICAgICAgIHRyYW5zYWN0aW9uRG9jLmJhc2tldC5wcm9kdWN0cy5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LnJlZnVuZGVkUXVhbnRpdHkgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJldHVyblByb2R1Y3QgPSB0aGlzLnJldHVyblByb2R1Y3QoZWxlbWVudCwgKGVsZW1lbnQuaGFzT3duUHJvcGVydHkoJ2xpbmVEaXNjb3VudCcpID8gZWxlbWVudC5saW5lRGlzY291bnQgOiBudWxsKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnUHJvZHVjdFJldHVybiddLnB1c2gocmV0dXJuUHJvZHVjdCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBhZGRQcm9kdWN0ID0gdGhpcy5hZGRQcm9kdWN0KGVsZW1lbnQsIChlbGVtZW50Lmhhc093blByb3BlcnR5KCdsaW5lRGlzY291bnQnKSA/IGVsZW1lbnQubGluZURpc2NvdW50IDogbnVsbCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmpPYmplY3RbJ1Byb2R1Y3RTYWxlJ10ucHVzaChhZGRQcm9kdWN0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0TW9kaWZpZXJJdGVtKGVsZW1lbnQubGluZURpc2NvdW50LCBlbGVtZW50Lml0ZW1MaW5lSWQpO1xyXG4gICAgICAgICAgICB9KVxyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QmFza2V0RGlzY291bnQoKSB7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnQmFza2V0RGlzY291bnQnXSA9IFtdO1xyXG4gICAgICAgIGlmICghdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC50cmFuc2FjdGlvbkRpc2NvdW50KSByZXR1cm4gdGhpcztcclxuXHJcbiAgICAgICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC50cmFuc2FjdGlvbkRpc2NvdW50LmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgb2JqOiBhbnkgPSB7fVxyXG4gICAgICAgICAgICBvYmpbJ1hNTFNjaGVtYVZlcnNpb24nXSA9IDE7XHJcbiAgICAgICAgICAgIG9ialsnTmV0VmFsdWUnXSA9IGVsZW1lbnQuZGlzY291bnRBbW91bnQgPCAwID8gZWxlbWVudC5kaXNjb3VudEFtb3VudCA6IC1lbGVtZW50LmRpc2NvdW50QW1vdW50O1xyXG4gICAgICAgICAgICBvYmpbJ0VmZmVjdGl2ZU5ldFZhbHVlJ10gPSBlbGVtZW50LmRpc2NvdW50QW1vdW50IDwgMCA/IGVsZW1lbnQuZGlzY291bnRBbW91bnQgOiAtZWxlbWVudC5kaXNjb3VudEFtb3VudDtcclxuICAgICAgICAgICAgb2JqWydEZXNjcmlwdGlvbiddID0gZWxlbWVudC5yZWFzb25Db2RlO1xyXG4gICAgICAgICAgICBvYmpbJ1VzZXJJRCddID0gdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC51c2VySWQ7XHJcbiAgICAgICAgICAgIG9ialsnUmVhc29uQ29kZUlEJ10gPSBlbGVtZW50LnJlYXNvbkNvZGU7XHJcbiAgICAgICAgICAgIG9ialsnRGlzY291bnRUeXBlJ10gPSBlbGVtZW50LmRpc2NvdW50VHlwZS50b1VwcGVyQ2FzZSgpID09IERJU0NPVU5UVFlQRS5QRVJDRU5ULnRvVXBwZXJDYXNlKCkgPyAwIDogMTsgLy8gdG9kbyAtIGNvbXBhcmUgdmFsdWVzIFxyXG4gICAgICAgICAgICBvYmpbJ1JvdW5kaW5nUnVsZSddID0gMjtcclxuICAgICAgICAgICAgb2JqWydNb2RpZmllZExpbmVOdW1iZXIgJ10gPSBbXTtcclxuXHJcbiAgICAgICAgICAgIGVsZW1lbnQuaXRlbUxpbmVJZHMuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ01vZGlmaWVkTGluZU51bWJlciddLnB1c2goZWxlbWVudCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBvYmpbJ0xpbmVOdW1iZXInXSA9IHRoaXMuZ2VuZXJhdGVMaW5lTnVtYmVyKCk7XHJcblxyXG4gICAgICAgICAgICAvLyBvYmpbJ0Rpc2NvdW50ZWRWYWx1ZSddID0gb2JqWydkaXNjb3VudEFtb3VudCddIC8vIHRvZG8gLSBjb25maXJtIHZhbHVlIGJlZm9yZSBkaXNjb3VudDtcclxuICAgICAgICAgICAgLy8gb2JqWydEaXNjb3VudFBlcmNlbnRhZ2UnXSA9IG9ialsnZGlzY291bnRBbW91bnQnXSAvIDEwMCA7IC8vIHRvZG8gLSBvcHRpb25hbFxyXG5cclxuICAgICAgICAgICAgdGhpcy5yak9iamVjdFsnQmFza2V0RGlzY291bnQnXS5wdXNoKG9iaik7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TW9kaWZpZXJJdGVtKGRhdGE6IGFueSwgbGluZU5vOiBhbnkpIHtcclxuICAgICAgICBpZiAoZGF0YSAmJiBsaW5lTm8pIHtcclxuICAgICAgICAgICAgbGV0IG9iajogYW55ID0ge307XHJcbiAgICAgICAgICAgIG9iai5YTUxTY2hlbWFWZXJzaW9uID0gMTtcclxuICAgICAgICAgICAgb2JqLkxpbmVOdW1iZXIgPSB0aGlzLmdlbmVyYXRlTGluZU51bWJlcigpO1xyXG4gICAgICAgICAgICBvYmouTmV0VmFsdWUgPSAwO1xyXG4gICAgICAgICAgICBvYmouRWZmZWN0aXZlTmV0VmFsdWUgPSAwO1xyXG4gICAgICAgICAgICBvYmouRGVzY3JpcHRpb24gPSBkYXRhLnBlcmNlbnRhZ2VEaXNjb3VudFJlYXNvbk5hbWUgPyBkYXRhLnBlcmNlbnRhZ2VEaXNjb3VudFJlYXNvbk5hbWUgOiBkYXRhLnByaWNlT3ZlcnJpZGVSZWFzb25OYW1lO1xyXG4gICAgICAgICAgICBvYmouRGV2aWNlSUQgPSB0aGlzLmRldmljZUlkO1xyXG4gICAgICAgICAgICBvYmouVXNlcklEID0gdGhpcy51c2VySWQ7XHJcbiAgICAgICAgICAgIG9iai5EYXRlVGltZUNyZWF0ZWQgPSB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQudXBkYXRlZEF0O1xyXG4gICAgICAgICAgICBvYmouQXV0aG9yaXNpbmdVc2VySUQgPSB0aGlzLnVzZXJJZDtcclxuICAgICAgICAgICAgb2JqLlJlYXNvbkNvZGVJRCA9IGRhdGEucGVyY2VudGFnZURpc2NvdW50UmVhc29uQ29kZSA/IGRhdGEucGVyY2VudGFnZURpc2NvdW50UmVhc29uQ29kZSA6IGRhdGEucHJpY2VPdmVycmlkZVJlYXNvbkNvZGU7XHJcbiAgICAgICAgICAgIG9iai5Nb2RpZmllZExpbmVOdW1iZXIgPSBsaW5lTm87XHJcbiAgICAgICAgICAgIG9iai5Nb2RpZmllZEluZGV4ID0gMTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMucmpPYmplY3RbJ01vZGlmaWVySXRlbSddLnB1c2gob2JqKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VHJhaWxlckluZm8oKSB7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnVHJhaWxlciddID0ge307XHJcbiAgICAgICAgdGhpcy5yak9iamVjdC5UcmFpbGVyLkRhdGVUaW1lQ29tcGxldGVkID0gdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnVwZGF0ZWRBdDtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0LlRyYWlsZXIuQ29tcGxldGVkQnkgPSB7fTtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0LlRyYWlsZXIuQ29tcGxldGVkQnkuRGV2aWNlSUQgPSB0aGlzLmRldmljZUlkOyAvL3RvZG9cclxuICAgICAgICB0aGlzLnJqT2JqZWN0LlRyYWlsZXIuQ29tcGxldGVkQnkuQ2FzaGllcklEID0gdGhpcy5jYXNoaWVySWQ7IC8vdG9kb1xyXG4gICAgICAgIHRoaXMucmpPYmplY3QuVHJhaWxlci5Db21wbGV0ZWRCeS5TdG9yZUlEID0gdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnN0b3JlSWQ7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdC5UcmFpbGVyLkNvbXBsZXRlZEJ5LkJyYW5jaElEID0gdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnN0b3JlSWQ7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdC5UcmFpbGVyLkNvbXBsZXRlZEJ5LlRlcm1pbmFsTnVtYmVyID0gdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnRlcm1pbmFsSWQ7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdC5UcmFpbGVyLlRvdGFsID0gdGhpcy5jb252ZXJ0VG9TdHJpbmcodGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldFN1bW1hcnkuYmFza2V0VG90YWwgKiAxMDApO1xyXG4gICAgICAgIHRoaXMucmpPYmplY3QuVHJhaWxlci5JdGVtQ291bnQgPSB0aGlzLml0ZW1Db3VudDsgLy9naXZlcyB0b3RhbCBjb3VudCBmb3IgcHJvZHVjdFxyXG4gICAgICAgIHRoaXMucmpPYmplY3QuVHJhaWxlci5JdGVtUXVhbnRpdHkgPSB0aGlzLmNvbnZlcnRUb1N0cmluZyh0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0U3VtbWFyeS50b3RhbEl0ZW1zKTtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0LlRyYWlsZXIuTmV0SXRlbVF1YW50aXR5ID0gdGhpcy5jb252ZXJ0VG9TdHJpbmcodGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldFN1bW1hcnkudG90YWxJdGVtcyk7XHJcbiAgICAgICAgdGhpcy5yak9iamVjdC5UcmFpbGVyLlRheFRvdGFsID0gdGhpcy5jb252ZXJ0VG9TdHJpbmcodGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldFN1bW1hcnkuVkFUVG90YWwpO1xyXG4gICAgICAgIHRoaXMucmpPYmplY3QuVHJhaWxlci5TZXF1ZW5jZURldmljZUlEID0gdGhpcy5kZXZpY2VJZDtcclxuICAgICAgICB0aGlzLnJqT2JqZWN0LlRyYWlsZXIuU2VxdWVuY2VOdW1iZXIgPSAnc25zbicgLy9zdGF0aWMgZm9yIG5vd1xyXG5cclxuICAgICAgICB0aGlzLnJqT2JqZWN0WydUcmFpbGVyJ11bJ1RheEl0ZW0nXSA9IFtdO1xyXG4gICAgICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQudGF4QnJlYWtkb3duLnRheExpbmVzLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgb2JqOiBhbnkgPSB7fTtcclxuXHJcbiAgICAgICAgICAgIG9ialsnWE1MU2NoZW1hVmVyc2lvbiddID0gdGhpcy54bWxTY2hlbWFWZXJzaW9uO1xyXG4gICAgICAgICAgICBvYmpbJ1RheFJhdGUnXSA9IGVsZW1lbnQuVkFUO1xyXG4gICAgICAgICAgICBvYmpbJ1RheGFibGVUb3RhbCddID0gdGhpcy5jb252ZXJ0VG9TdHJpbmcoZWxlbWVudC50YXhhYmxlQW1vdW50KTtcclxuICAgICAgICAgICAgb2JqWydUYXhUb3RhbCddID0gdGhpcy5jb252ZXJ0VG9TdHJpbmcoZWxlbWVudC50YXhMaW5lVG90YWwpO1xyXG4gICAgICAgICAgICBvYmpbJ1RheERlc2NyaXB0aW9uJ10gPSB0aGlzLmNvbnZlcnRUb1N0cmluZyhlbGVtZW50LlZBVENvZGUpO1xyXG4gICAgICAgICAgICBvYmpbJ1RheEluY2x1ZGVkJ10gPSAnMSc7XHJcbiAgICAgICAgICAgIG9ialsnVGF4UGVyY2VudGFnZSddID0gZWxlbWVudC5WQVQ7IC8vIHRvZG9cclxuXHJcbiAgICAgICAgICAgIHRoaXMucmpPYmplY3RbJ1RyYWlsZXInXVsnVGF4SXRlbSddLnB1c2gob2JqKVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyBUT0RPOiBtYWtlIFRyYWlsZXIgb2JqZWN0IGZyb20gcHJvbW90aW9uXHJcbiAgICAgICAgdGhpcy5yak9iamVjdFsnVHJhaWxlciddWydQcm9tb3Rpb25JdGVtJ10gPSBbXTtcclxuICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LmxpbmVQcm9tb3Rpb24uZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBvYmo6IGFueSA9IHt9O1xyXG5cclxuICAgICAgICAgICAgb2JqWydQcm9tb3Rpb25JRCddID0gZWxlbWVudC5wcm9tb3Rpb25JZDtcclxuICAgICAgICAgICAgb2JqWydQcm9tb3Rpb25TYXZpbmcnXSA9IGVsZW1lbnQucHJvbW90aW9uQW1vdW50IDwgMCA/IGVsZW1lbnQucHJvbW90aW9uQW1vdW50IDogLWVsZW1lbnQucHJvbW90aW9uQW1vdW50O1xyXG4gICAgICAgICAgICBvYmpbJ1Byb21vdGlvblF1YW50aXR5J10gPSBcIlwiOyAvLyB0b2RvIC0gbm90IGF2YWlhbGJsZVxyXG4gICAgICAgICAgICBvYmpbJ1Byb21vdGlvbkRlc2NyaXB0aW9uJ10gPSBlbGVtZW50LmRpc3BsYXlUZXh0O1xyXG5cclxuICAgICAgICAgICAgb2JqWydQcm9tb3Rpb25IaXQnXVsnWE1MU2NoZW1hVmVyc2lvbiddID0gdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnN0b3JlSWQ7XHJcbiAgICAgICAgICAgIG9ialsnUHJvbW90aW9uSGl0J11bJ0hpdE51bWJlciddID0gXCJcIiAvLyB0b2RvO1xyXG4gICAgICAgICAgICBvYmpbJ1Byb21vdGlvbkhpdCddWydIaXRRdWFudGl0eSddID0gXCJcIiAvLyB0b2RvO1xyXG4gICAgICAgICAgICBvYmpbJ1Byb21vdGlvbkhpdCddWydIaXRTYXZpbmcnXSA9IFwiXCIgLy8gdG9kbztcclxuXHJcbiAgICAgICAgICAgIG9ialsnUHJvbW90aW9uSGl0J11bJ1Byb21vdGlvblRyaWdnZXInXSA9IFtdO1xyXG5cclxuICAgICAgICAgICAgZWxlbWVudC50cmlnZ2VyLmZvckVhY2goKHN1YkVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IG9ialN1YjogYW55ID0ge307XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IHByb2R1Y3QgPSB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LnByb2R1Y3RzLmZpbmQoKGl0ZW06IGFueSkgPT4gaXRlbS5saW5lSXRlbUlkID09IHN1YkVsZW1lbnQuaXRlbUxpbmVJZCk7XHJcbiAgICAgICAgICAgICAgICBvYmpTdWJbJ1hNTFNjaGVtYVZlcnNpb24nXSA9IHRoaXMueG1sU2NoZW1hVmVyc2lvbjtcclxuICAgICAgICAgICAgICAgIG9ialN1YlsnUHJvZHVjdElEJ10gPSB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LnByb2R1Y3RzLmZpbmQoKGl0ZW06IGFueSkgPT4gaXRlbS5pdGVtTGluZUlkID09PSBzdWJFbGVtZW50Lml0ZW1MaW5lSWQpLlNLVTtcclxuICAgICAgICAgICAgICAgIG9ialN1YlsnVW5pdFZhbHVlJ10gPSB0aGlzLmNvbnZlcnRUb1N0cmluZyhlbGVtZW50LnByb21vdGlvbkxpbmVQcmljZSAvIHByb2R1Y3QucXVhbnRpdHkpO1xyXG4gICAgICAgICAgICAgICAgb2JqU3ViWydMaW5lTnVtYmVyJ10gPSB0aGlzLmNvbnZlcnRUb1N0cmluZyhzdWJFbGVtZW50Lml0ZW1MaW5lSWQpO1xyXG4gICAgICAgICAgICAgICAgb2JqU3ViWydRdWFudGl0eSddID0gdGhpcy5jb252ZXJ0VG9TdHJpbmcoc3ViRWxlbWVudC5xdWFudGl0eS50b0ZpeGVkKDEpKTtcclxuICAgICAgICAgICAgICAgIG9ialN1YlsnVGF4Q29kZSddID0gdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LmJhc2tldC50YXhCcmVha2Rvd24udGF4TGluZXMuZmluZCgoaXRlbTogYW55KSA9PiBpdGVtLml0ZW1MaW5lSWQgPT0gZWxlbWVudC5pdGVtTGluZUlkKS5WQVRDb2RlOyAvLyB0b2RvXHJcbiAgICAgICAgICAgICAgICBvYmpbJ1Byb21vdGlvbkhpdCddWydQcm9tb3Rpb25UcmlnZ2VyJ10ucHVzaChvYmpTdWIpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMucmpPYmplY3RbJ1RyYWlsZXInXVsnUHJvbW90aW9uSXRlbSddLnB1c2gob2JqKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLnJqT2JqZWN0KTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBnZXRUZW5kZXJJbmZvKCkge1xyXG4gICAgICAgIHRoaXMucmpPYmplY3RbJ0Nhc2hUZW5kZXInXSA9IFtdO1xyXG4gICAgICAgIGlmICh0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQucGF5bWVudERldGFpbHMgJiYgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnBheW1lbnREZXRhaWxzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50LnBheW1lbnREZXRhaWxzLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gdGhpcy5wYXltZW50VHlwZXMuZmlsdGVyKHggPT4geC5wYXltZW50VHlwZS50b1VwcGVyQ2FzZSgpID09PSBlbGVtZW50LnBheW1lbnRUeXBlLnRvVXBwZXJDYXNlKCkpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQucGF5bWVudFR5cGUudG9VcHBlckNhc2UoKSA9PT0gJ0dJRlQgQ0FSRCcpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgb2JqID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBYTUxTY2hlbWFWZXJzaW9uOiB0aGlzLnhtbFNjaGVtYVZlcnNpb24sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExpbmVOdW1iZXI6IHRoaXMuZ2VuZXJhdGVMaW5lTnVtYmVyKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIE5ldFZhbHVlOiB0aGlzLmNvbnZlcnRUb1N0cmluZygtMSAqIChNYXRoLnJvdW5kKGVsZW1lbnQuYW1vdW50KSkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBFZmZlY3RpdmVOZXRWYWx1ZTogdGhpcy5jb252ZXJ0VG9TdHJpbmcoLTEgKiAoTWF0aC5yb3VuZChlbGVtZW50LmFtb3VudCkpKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpcHRpb246IHRoaXMuZ2V0RGVzY3JpcHRpb24odmFsdWVbMF0ucGF5bWVudFR5cGUsIGVsZW1lbnQpLC8vdG9kb1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBEZXZpY2VJRDogdGhpcy5kZXZpY2VJZCwvL3RvZG9cclxuICAgICAgICAgICAgICAgICAgICAgICAgVXNlcklEOiB0aGlzLnVzZXJJZCwvL3RvZG9cclxuICAgICAgICAgICAgICAgICAgICAgICAgRGF0ZVRpbWVDcmVhdGVkOiB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQudXBkYXRlZEF0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBUZW5kZXJUeXBlOiB2YWx1ZVswXS50ZW5kZXJUeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBUZW5kZXJTdWJUeXBlOiB2YWx1ZVswXS50ZW5kZXJTdWJUeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBUZW5kZXJBbW91bnQ6IHRoaXMuY29udmVydFRvU3RyaW5nKC0xICogKE1hdGgucm91bmQoZWxlbWVudC5hbW91bnQpKSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEN1cnJlbmN5SUQ6IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNlQ3VycmVuY3ksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEN1cnJlbmN5RGVzY3JpcHRpb246IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNlQ3VycmVuY3ksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEdpZnRWb3VjaGVyU2FsZXNBbGxvd2VkOiAnJywvL3RvZG9cclxuICAgICAgICAgICAgICAgICAgICAgICAgQWxsb3dSZWNoYXJnZWFibGVWb3VjaGVyU2FsZXM6ICcnLC8vdG9kb1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBHaWZ0Vm91Y2hlcklEOiAnJ1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJqT2JqZWN0WydDYXNoVGVuZGVyJ10ucHVzaChvYmopXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgb2JqMSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgWE1MU2NoZW1hVmVyc2lvbjogXCIxXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExpbmVOdW1iZXI6IHRoaXMuZ2VuZXJhdGVMaW5lTnVtYmVyKCksLy90b2RvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIE5ldFZhbHVlOiBKU09OLnN0cmluZ2lmeSgtMSAqIChNYXRoLnJvdW5kKGVsZW1lbnQuYW1vdW50KSkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBFZmZlY3RpdmVOZXRWYWx1ZTogSlNPTi5zdHJpbmdpZnkoLTEgKiAoTWF0aC5yb3VuZChlbGVtZW50LmFtb3VudCkpKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpcHRpb246IHRoaXMuZ2V0RGVzY3JpcHRpb24odmFsdWVbMF0ucGF5bWVudFR5cGUsIGVsZW1lbnQpLC8vdG9kb1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBEZXZpY2VJRDogdGhpcy5kZXZpY2VJZCwvL3RvZG9cclxuICAgICAgICAgICAgICAgICAgICAgICAgVXNlcklEOiB0aGlzLnVzZXJJZCwvL3RvZG9cclxuICAgICAgICAgICAgICAgICAgICAgICAgRGF0ZVRpbWVDcmVhdGVkOiB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQudXBkYXRlZEF0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBUZW5kZXJUeXBlOiB2YWx1ZVswXS50ZW5kZXJUeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBUZW5kZXJTdWJUeXBlOiB2YWx1ZVswXS50ZW5kZXJTdWJUeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBUZW5kZXJBbW91bnQ6IEpTT04uc3RyaW5naWZ5KC0xICogKE1hdGgucm91bmQoZWxlbWVudC5hbW91bnQpKSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEN1cnJlbmN5SUQ6IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNlQ3VycmVuY3ksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEN1cnJlbmN5RGVzY3JpcHRpb246IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNlQ3VycmVuY3ksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEluY2x1ZGVJblRyYW5zYWN0aW9uVG90YWxDaGVjazogXCIxXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEFsbG93UmVjaGFyZ2VhYmxlVm91Y2hlclNhbGVzOiBcIjFcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgT3BlbkRyYXdlckF0RW5kOiBcIjFcIlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJqT2JqZWN0WydDYXNoVGVuZGVyJ10ucHVzaChvYmoxKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0TGluZU51bWJlckZvclByb2R1Y3RzKCkge1xyXG4gICAgICAgIGxldCBpdGVtTGluZUlkQXJyYXkgPSBbXTtcclxuICAgICAgICBpdGVtTGluZUlkQXJyYXkgPSB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LnByb2R1Y3RzLm1hcCgocHJvZHVjdDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBwYXJzZUludChwcm9kdWN0Lml0ZW1MaW5lSWQpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5sYXJnZXN0TnVtYmVyID0gaXRlbUxpbmVJZEFycmF5LnJlZHVjZSgoYTogYW55LCBiOiBhbnkpID0+IE1hdGgubWF4KGEsIGIpKTtcclxuICAgIH1cclxuXHJcbiAgICBnZW5lcmF0ZUxpbmVOdW1iZXIoKSB7XHJcbiAgICAgICAgdGhpcy5sYXJnZXN0TnVtYmVyICs9IDE7XHJcbiAgICAgICAgdGhpcy5pdGVtQ291bnQgKz0gMTtcclxuICAgICAgICByZXR1cm4gdGhpcy5sYXJnZXN0TnVtYmVyO1xyXG4gICAgfVxyXG5cclxuICAgIGluaXRpbGl6ZUl0ZW1Db3VudCgpIHtcclxuICAgICAgICB0aGlzLml0ZW1Db3VudCA9IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQucHJvZHVjdHMubGVuZ3RoO1xyXG4gICAgfVxyXG5cclxuICAgIGJ1aWxkKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJqT2JqZWN0O1xyXG4gICAgfVxyXG5cclxuICAgIGdldERlc2NyaXB0aW9uKHBheW1lbnRUeXBlOiBzdHJpbmcsIGVsZW1lbnQ6IGFueSkge1xyXG4gICAgICAgIGlmIChwYXltZW50VHlwZS50b1VwcGVyQ2FzZSgpID09PSAnQ0FSRCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQuY2FyZFR5cGVcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBwYXltZW50VHlwZVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzZXREZXZpY2VJbmZvKGlkOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmRldmljZUlkID0gaWRcclxuICAgICAgICByZXR1cm4gdGhpc1xyXG4gICAgfVxyXG5cclxuICAgIHNldFVzZXJJbmZvKGlkOiBhbnkpIHtcclxuICAgICAgICB0aGlzLnVzZXJJZCA9IGlkO1xyXG4gICAgICAgIHJldHVybiB0aGlzXHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlRGVjaW1hbCh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlICogMTAwO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFRyYW5zYWN0aW9uTnVtYmVyKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLnRyYW5zYWN0aW9uTnVtYmVyID0gdmFsdWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuICAgIH1cclxuXHJcbiAgICBzZXRNYW5pZmVzdFZlcnNpb24odmFsdWU6IGFueSkge1xyXG4gICAgICAgIHRoaXMubWFuaWZlc3RWZXJzaW9uID0gdmFsdWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuICAgIH1cclxuXHJcbiAgICBzZXREYXRhYmFzZVNjaGVtYVZlcnNpb24odmFsdWU6IGFueSkge1xyXG4gICAgICAgIHRoaXMuZGF0YWJhc2VTY2hlbWFWZXJzaW9uID0gdmFsdWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuICAgIH1cclxuXHJcbiAgICBzZXRCYXNrZXRUeXBlKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmJhc2tldFR5cGUgPSB2YWx1ZTtcclxuICAgICAgICByZXR1cm4gdGhpc1xyXG4gICAgfVxyXG5cclxuICAgIHNldFRyYWRpbmdSZWdpb25JRCh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy50cmFkaW5nUmVnaW9uSWQgPSB2YWx1ZVxyXG4gICAgICAgIHJldHVybiB0aGlzXHJcbiAgICB9XHJcblxyXG4gICAgc2V0Q29tcGFueUlEKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmNvbXBhbnlJZCA9IHZhbHVlXHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuICAgIH1cclxuXHJcbiAgICBzZXRUYXhNZXRob2RJRCh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy50YXhNZXRob2RJZCA9IHZhbHVlXHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuICAgIH1cclxuXHJcbiAgICBzZXRNYWpvclZlcnNpb24odmFsdWU6IGFueSkge1xyXG4gICAgICAgIHRoaXMubWFqb3JWZXJzaW9uID0gdmFsdWVcclxuICAgICAgICByZXR1cm4gdGhpc1xyXG4gICAgfVxyXG5cclxuICAgIHNldE1pbm9yVmVyc2lvbih2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5taW5vclZlcnNpb24gPSB2YWx1ZVxyXG4gICAgICAgIHJldHVybiB0aGlzXHJcbiAgICB9XHJcblxyXG4gICAgc2V0WE1MU2NoZW1hVmVyc2lvbih2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy54bWxTY2hlbWFWZXJzaW9uID0gdmFsdWVcclxuICAgICAgICByZXR1cm4gdGhpc1xyXG4gICAgfVxyXG5cclxuICAgIHNldEV4dGVybmFsU3RhdGUodmFsdWU6IGFueSkge1xyXG4gICAgICAgIHRoaXMuZXh0ZXJuYWxTdGF0ZSA9IHZhbHVlXHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuICAgIH1cclxuXHJcbiAgICBzZXRDYXNoaWVySUQodmFsdWU6IGFueSkge1xyXG4gICAgICAgIHRoaXMuY2FzaGllcklkID0gdmFsdWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuICAgIH1cclxuXHJcbiAgICBzZXRUZXJtaW5hbE51bWJlcih2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy50ZXJtaW5hbE51bWJlciA9IHZhbHVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIHNldEJhc2tldExhbmd1YWdlSUQodmFsdWU6IGFueSkge1xyXG4gICAgICAgIHRoaXMuYmFza2V0TGFuZ3VhZ2VJZCA9IHZhbHVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgc2V0QmFza2V0Q291bnRyeUlEKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmJhc2tldENvdW50cnlJZCA9IHZhbHVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIHNldEJhc2tldEN1cnJlbmN5SUQodmFsdWU6IGFueSkge1xyXG4gICAgICAgIHRoaXMuYmFza2V0Q3VycmVuY3lJZCA9IHZhbHVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIGdlbmVyYXRlSWQoZGF0ZTogYW55KSB7XHJcbiAgICAgICAgbGV0IG5ld0RhdGVUaW1lID0gZGF0ZS5yZXBsYWNlKC9bXjAtOV0vZywgJycpXHJcbiAgICAgICAgbGV0IGlkID0gKHRoaXMuZGV2aWNlSWQgKyAnfCcgKyBuZXdEYXRlVGltZSArICd8JyArIHRoaXMudHJhbnNhY3Rpb25OdW1iZXIpLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgcmV0dXJuIGlkO1xyXG4gICAgfVxyXG5cclxuICAgIGdlbmVyYXRlVGltZXpvbmVvZmZzZXQoZGF0ZTogYW55KSB7XHJcbiAgICAgICAgbGV0IHggPSBkYXRlID8gZGF0ZSA6ICcnO1xyXG4gICAgICAgIHJldHVybiBuZXcgRGF0ZSh4KS5nZXRUaW1lem9uZU9mZnNldCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGdlbmVyYXRlS2V5d29yZCgpIHtcclxuICAgICAgICBsZXQgeCA9ICh0aGlzLmNvbXBhbnlJZCArICd8JyArIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5zdG9yZUlkICsgJ3wnICsgdGhpcy50ZXJtaW5hbE51bWJlciArICd8JyArIHRoaXMudHJhbnNhY3Rpb25OdW1iZXIpLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgcmV0dXJuIHg7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U3RhdGUoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5vcGVyYXRpb25TdGF0dXMgPT09ICdQQVlfU1VDQ0VTUycpIHtcclxuICAgICAgICAgICAgcmV0dXJuICdDb21wbGV0ZWQnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuICdDYW5jZWxsZWQnO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm5Qcm9kdWN0KGVsZW1lbnQ6IGFueSwgbGluZURpc2NvdW50OiBMaW5lRGlzY291bnQpIHtcclxuICAgICAgICBsZXQgb2JqOiBhbnkgPSB7fVxyXG5cclxuICAgICAgICBvYmpbJ0xpbmVOdW1iZXInXSA9IGVsZW1lbnRbJ2l0ZW1MaW5lSWQnXTtcclxuICAgICAgICBvYmpbJ05ldFZhbHVlJ10gPSB0aGlzLnJlbW92ZURlY2ltYWwoZWxlbWVudFsncmVmdW5kZWRUb3RhbCddKTtcclxuICAgICAgICBvYmpbJ0VmZmVjdGl2ZU5ldFZhbHVlJ10gPSB0aGlzLnJlbW92ZURlY2ltYWwoZWxlbWVudFsncmVmdW5kZWRUb3RhbCddKTtcclxuICAgICAgICBvYmpbJ0Rlc2NyaXB0aW9uJ10gPSBlbGVtZW50WydkZXNjcmlwdGlvbiddO1xyXG4gICAgICAgIG9ialsnRGV2aWNlSUQnXSA9IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudFsndGVybWluYWxJZCddO1xyXG4gICAgICAgIG9ialsnVXNlcklEJ10gPSB0aGlzLnVzZXJJZDtcclxuICAgICAgICBvYmpbJ0RhdGVUaW1lQ3JlYXRlZCddID0gdGhpcy50cmFuc2FjdGlvbkRvY3VtZW50WydjcmVhdGVkQXQnXTtcclxuICAgICAgICBvYmpbJ0V4dGVuZGVkVmFsdWUnXSA9IHRoaXMucmVtb3ZlRGVjaW1hbChlbGVtZW50Wyd0b3RhbExpbmVQcmljZSddKTtcclxuICAgICAgICBvYmpbJ1VuaXRQcmljZSddID0gdGhpcy5yZW1vdmVEZWNpbWFsKGVsZW1lbnRbJ3ByaWNlJ10pO1xyXG4gICAgICAgIG9ialsnUXVhbnRpdHknXSA9IGVsZW1lbnRbJ3JlZnVuZGVkUXVhbnRpdHknXSA8IDAgPyBlbGVtZW50WydyZWZ1bmRlZFF1YW50aXR5J10udG9GaXhlZCgxKSA6IC1lbGVtZW50WydyZWZ1bmRlZFF1YW50aXR5J10udG9GaXhlZCgxKTtcclxuICAgICAgICBvYmpbJ09yaWdpbmFsVGF4QW1vdW50U2V0J10gPSAxO1xyXG4gICAgICAgIG9ialsnUHJvZHVjdElEJ10gPSBlbGVtZW50WydTS1UnXTtcclxuICAgICAgICBvYmpbJ0hhbmRLZXllZCddID0gMTtcclxuICAgICAgICBvYmpbJ0xvbmdEZXNjcmlwdGlvbiddID0gZWxlbWVudFsnZGVzY3JpcHRpb24nXTtcclxuICAgICAgICBvYmpbJ1JldHVybiddID0ge307XHJcbiAgICAgICAgb2JqWydSZXR1cm4nXVsnUmV0dXJuUmVhc29uSUQnXSA9IGVsZW1lbnRbJ3JlZnVuZGVkUmVhc29uJ107XHJcbiAgICAgICAgb2JqWydSZXR1cm4nXVsnUmV0dXJuRGVzY3JpcHRpb24nXSA9IGVsZW1lbnRbJ3JlZnVuZGVkUmVhc29uRGVzY3JpcHRpb24nXTtcclxuICAgICAgICBvYmpbJ1JldHVybiddWydSZXR1cm5Ub1N0b2NrJ10gPSBlbGVtZW50WydyZWZ1bmRlZFF1YW50aXR5J10gPiAwID8gZWxlbWVudFsncmVmdW5kZWRRdWFudGl0eSddIDogLTEgKiBlbGVtZW50WydyZWZ1bmRlZFF1YW50aXR5J107XHJcbiAgICAgICAgb2JqWydUYXhDb2RlJ10gPSB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0Wyd0YXhCcmVha2Rvd24nXVsndGF4TGluZXMnXS5maW5kKChpdGVtOiBhbnkpID0+IGl0ZW0uaXRlbUxpbmVJZCA9PSBlbGVtZW50WydpdGVtTGluZUlkJ10pLlZBVENvZGU7XHJcblxyXG4gICAgICAgIG9ialsnRGlzcGxheVRheENvZGUnXSA9ICcnOyAvLyB0b2RvXHJcbiAgICAgICAgb2JqWydQcm9kdWN0QXR0cmlidXRlcyddID0gJyc7IC8vdG9kbyAtIG5vdCByZXF1aXJlZFxyXG4gICAgICAgIG9ialsnUGVyaXNoYWJsZSddID0gdGhpcy5nZXRBdHRyaWJ1dGVzKCk7XHJcbiAgICAgICAgb2JqWydNTUdyb3VwSUQnXSA9IHRoaXMuZ2V0QXR0cmlidXRlcygpO1xyXG4gICAgICAgIG9ialsnQ3VzdG9tZXJEZXRhaWxzJ10gPSBcIlwiOyAvLyB0b2RvIC0gYmxhbmtcclxuICAgICAgICBvYmpbJ1RvdGFsUHJvbW90aW9uU2F2aW5nJ10gPSBlbGVtZW50Wydwcm9tb3Rpb25BbW91bnQnXSB8fCAtMTsgLy8gVE9ET1xyXG4gICAgICAgIGxldCB0YXhUb3RhbCA9IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXRbJ3RheEJyZWFrZG93biddWyd0YXhMaW5lcyddLmZpbmQoKGl0ZW06IGFueSkgPT4gaXRlbS5pdGVtTGluZUlkID09IGVsZW1lbnRbJ2l0ZW1MaW5lSWQnXSk7XHJcbiAgICAgICAgb2JqWydPcmlnaW5hbFRheEFtb3VudCddID0gdGF4VG90YWwudGF4TGluZVRvdGFsIDwgMCA/IHRoaXMucmVtb3ZlRGVjaW1hbCh0YXhUb3RhbC50YXhMaW5lVG90YWwpIDogdGhpcy5yZW1vdmVEZWNpbWFsKC10YXhUb3RhbC50YXhMaW5lVG90YWwpOyAvL3RvZG9cclxuICAgICAgICBvYmpbJ3RheEFtb3VudCddID0gdGF4VG90YWwudGF4TGluZVRvdGFsIDwgMCA/IHRoaXMucmVtb3ZlRGVjaW1hbCh0YXhUb3RhbC50YXhMaW5lVG90YWwpIDogdGhpcy5yZW1vdmVEZWNpbWFsKC10YXhUb3RhbC50YXhMaW5lVG90YWwpO1xyXG5cclxuICAgICAgICBpZiAobGluZURpc2NvdW50KSB7XHJcbiAgICAgICAgICAgIGlmIChsaW5lRGlzY291bnQucGVyY2VudGFnZURpc2NvdW50UmVhc29uTmFtZSAmJiBsaW5lRGlzY291bnQucGVyY2VudGFnZURpc2NvdW50UmVhc29uQ29kZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gbGluZSBkaXNjb3VudFxyXG4gICAgICAgICAgICAgICAgb2JqWydEaXNjb3VudCddID0ge307XHJcbiAgICAgICAgICAgICAgICBvYmpbJ0Rpc2NvdW50J10uTW9kaWZpZXJWYWx1ZSA9IHRoaXMucmVtb3ZlRGVjaW1hbChsaW5lRGlzY291bnQudW5pdFByaWNlKSAqIC0xO1xyXG4gICAgICAgICAgICAgICAgb2JqWydEaXNjb3VudCddLk1vZGlmaWVyRGF0ZVRpbWUgPSBvYmouRGF0ZVRpbWVDcmVhdGVkO1xyXG4gICAgICAgICAgICAgICAgb2JqWydEaXNjb3VudCddLk1vZGlmaWVyUmVhc29uSUQgPSBsaW5lRGlzY291bnQucGVyY2VudGFnZURpc2NvdW50UmVhc29uQ29kZTtcclxuICAgICAgICAgICAgICAgIG9ialsnRGlzY291bnQnXS5Nb2RpZmllckRlc2NyaXB0aW9uID0gbGluZURpc2NvdW50LnBlcmNlbnRhZ2VEaXNjb3VudFJlYXNvbk5hbWU7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ0Rpc2NvdW50J10uQXV0aG9yaXNpbmdVc2VySUQgPSB0aGlzLnVzZXJJZDtcclxuICAgICAgICAgICAgICAgIG9ialsnRGlzY291bnQnXS5EaXNjb3VudFR5cGUgPSBsaW5lRGlzY291bnQuZGlzY291bnRUeXBlO1xyXG4gICAgICAgICAgICAgICAgb2JqWydEaXNjb3VudCddLlhNTFNjaGVtYVZlcnNpb24gPSAxO1xyXG4gICAgICAgICAgICAgICAgb2JqWydEaXNjb3VudCddLk9yaWdpbmFsUHJpY2UgPSB0aGlzLnJlbW92ZURlY2ltYWwobGluZURpc2NvdW50LmRpc2NvdW50QW1vdW50ICsgKGxpbmVEaXNjb3VudC5kaXNjb3VudGVkTGluZVByaWNlIHx8IDApKTtcclxuICAgICAgICAgICAgICAgIG9ialsnRGlzY291bnQnXS5EaXNjb3VudGVkVmFsdWUgPSB0aGlzLnJlbW92ZURlY2ltYWwobGluZURpc2NvdW50LnVuaXRQcmljZSk7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ0Rpc2NvdW50J10uRGlzY291bnRQZXJjZW50YWdlID0gbGluZURpc2NvdW50LnBlcmNlbnRhZ2VEaXNjb3VudFZhbHVlO1xyXG4gICAgICAgICAgICAgICAgb2JqWydEaXNjb3VudCddLlJvdW5kaW5nUnVsZSA9IDI7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChsaW5lRGlzY291bnQucHJpY2VPdmVycmlkZVJlYXNvbkNvZGUgJiYgbGluZURpc2NvdW50LnByaWNlT3ZlcnJpZGVSZWFzb25OYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAvL3ByaWNlIG92ZXJyaWRlXHJcbiAgICAgICAgICAgICAgICBvYmpbJ1ByaWNlT3ZlcnJpZGUnXSA9IHt9O1xyXG4gICAgICAgICAgICAgICAgb2JqWydQcmljZU92ZXJyaWRlJ10uTW9kaWZpZXJWYWx1ZSA9IHRoaXMucmVtb3ZlRGVjaW1hbChsaW5lRGlzY291bnQuZGlzY291bnRBbW91bnQpICogLTE7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ1ByaWNlT3ZlcnJpZGUnXS5Nb2RpZmllckRhdGVUaW1lID0gb2JqLkRhdGVUaW1lQ3JlYXRlZDtcclxuICAgICAgICAgICAgICAgIG9ialsnUHJpY2VPdmVycmlkZSddLk1vZGlmaWVyUmVhc29uSUQgPSBsaW5lRGlzY291bnQucHJpY2VPdmVycmlkZVJlYXNvbkNvZGU7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ1ByaWNlT3ZlcnJpZGUnXS5Nb2RpZmllclJlYXNvbkRlc2NyaXB0aW9uID0gbGluZURpc2NvdW50LnByaWNlT3ZlcnJpZGVSZWFzb25OYW1lO1xyXG4gICAgICAgICAgICAgICAgb2JqWydQcmljZU92ZXJyaWRlJ10uQXV0aG9yaXNpbmdVc2VySUQgPSB0aGlzLnVzZXJJZDtcclxuICAgICAgICAgICAgICAgIG9ialsnUHJpY2VPdmVycmlkZSddLlhNTFNjaGVtYVZlcnNpb24gPSAxO1xyXG4gICAgICAgICAgICAgICAgb2JqWydQcmljZU92ZXJyaWRlJ10uTmV3UHJpY2UgPSB0aGlzLnJlbW92ZURlY2ltYWwobGluZURpc2NvdW50LnVuaXRQcmljZSk7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ1ByaWNlT3ZlcnJpZGUnXS5PcmlnaW5hbFByaWNlID0gdGhpcy5yZW1vdmVEZWNpbWFsKGxpbmVEaXNjb3VudC5kaXNjb3VudGVkTGluZVByaWNlIHx8IDAgKyBsaW5lRGlzY291bnQuZGlzY291bnRBbW91bnQpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvL3VwZGF0ZSB0aGUgcHJvZHVjdCBwcmljZVxyXG4gICAgICAgICAgICBvYmouTmV0VmFsdWUgPSAoKGxpbmVEaXNjb3VudC5kaXNjb3VudGVkTGluZVByaWNlIHx8IDApICsgbGluZURpc2NvdW50LmRpc2NvdW50QW1vdW50KSAqIC0xO1xyXG4gICAgICAgICAgICBvYmouRWZmZWN0aXZlTmV0VmFsdWUgPSAoKGxpbmVEaXNjb3VudC5kaXNjb3VudGVkTGluZVByaWNlIHx8IDApICsgbGluZURpc2NvdW50LmRpc2NvdW50QW1vdW50KSAqIC0xO1xyXG4gICAgICAgICAgICBvYmouRXh0ZW5kZWRWYWx1ZSA9ICgobGluZURpc2NvdW50LmRpc2NvdW50ZWRMaW5lUHJpY2UgfHwgMCkgKyBsaW5lRGlzY291bnQuZGlzY291bnRBbW91bnQpICogLTE7XHJcbiAgICAgICAgICAgIG9iai5Vbml0UHJpY2UgPSAoKGxpbmVEaXNjb3VudC5kaXNjb3VudGVkTGluZVByaWNlIHx8IDApICsgbGluZURpc2NvdW50LmRpc2NvdW50QW1vdW50KSAqIC0xO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG9iajtcclxuICAgIH1cclxuXHJcbiAgICBhZGRQcm9kdWN0KGVsZW1lbnQ6IFRQcm9kdWN0LCBsaW5lRGlzY291bnQ6IExpbmVEaXNjb3VudCkge1xyXG5cclxuICAgICAgICBsZXQgb2JqOiBhbnkgPSB7XHJcbiAgICAgICAgICAgIFhNTFNjaGVtYVZlcnNpb246IHRoaXMueG1sU2NoZW1hVmVyc2lvbixcclxuICAgICAgICAgICAgTGluZU51bWJlcjogZWxlbWVudC5pdGVtTGluZUlkLFxyXG4gICAgICAgICAgICBOZXRWYWx1ZTogdGhpcy5yZW1vdmVEZWNpbWFsKGVsZW1lbnQudG90YWxMaW5lUHJpY2UpLFxyXG4gICAgICAgICAgICBFZmZlY3RpdmVOZXRWYWx1ZTogdGhpcy5yZW1vdmVEZWNpbWFsKGVsZW1lbnQudG90YWxMaW5lUHJpY2UpLFxyXG4gICAgICAgICAgICBEZXNjcmlwdGlvbjogZWxlbWVudC5kZXNjcmlwdGlvbixcclxuICAgICAgICAgICAgRGV2aWNlSUQ6IHRoaXMuZGV2aWNlSWQsIC8vdG8gZG9cclxuICAgICAgICAgICAgVXNlcklEOiB0aGlzLnVzZXJJZCwvL3RvIGRvLFxyXG4gICAgICAgICAgICBEYXRlVGltZUNyZWF0ZWQ6IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5jcmVhdGVkQXQsXHJcbiAgICAgICAgICAgIEV4dGVuZGVkVmFsdWU6IHRoaXMucmVtb3ZlRGVjaW1hbChlbGVtZW50LnByaWNlKSxcclxuICAgICAgICAgICAgVW5pdFByaWNlOiB0aGlzLnJlbW92ZURlY2ltYWwoZWxlbWVudC5wcmljZSksXHJcbiAgICAgICAgICAgIE1NR3JvdXBJRDogdGhpcy5nZXRBdHRyaWJ1dGVzKCksIC8vdG9kb1xyXG4gICAgICAgICAgICBRdWFudGl0eTogZWxlbWVudC5xdWFudGl0eS50b0ZpeGVkKDEpLFxyXG4gICAgICAgICAgICBTYWxlc3BlcnNvbklEOiB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQudXNlcklkLFxyXG4gICAgICAgICAgICBTYWxlc3BlcnNvbk5hbWU6IHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC51c2VyTmFtZSxcclxuICAgICAgICAgICAgVGF4Q29kZTogMCwgLy90b2RvXHJcbiAgICAgICAgICAgIFRheE1vZGlmaWFibGU6IDEsIC8vdG9kb1xyXG4gICAgICAgICAgICBUYXhBbW91bnQ6IDAsLy90b2RvXHJcbiAgICAgICAgICAgIE9yaWdpbmFsVGF4QW1vdW50OiAwLC8vdG9kb1xyXG4gICAgICAgICAgICBPcmlnaW5hbFRheEFtb3VudFNldDogMSwvL3RvZG9cclxuICAgICAgICAgICAgUHJvZHVjdElEOiBlbGVtZW50LlNLVSxcclxuICAgICAgICAgICAgSGFuZEtleWVkOiAxLC8vdG9kb1xyXG4gICAgICAgICAgICBDdXN0b21lckRldGFpbHM6IFwiXCIsXHJcbiAgICAgICAgICAgIFBlcmlzaGFibGU6IHRoaXMuZ2V0QXR0cmlidXRlcygpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChsaW5lRGlzY291bnQpIHtcclxuICAgICAgICAgICAgaWYgKGxpbmVEaXNjb3VudC5wZXJjZW50YWdlRGlzY291bnRSZWFzb25OYW1lICYmIGxpbmVEaXNjb3VudC5wZXJjZW50YWdlRGlzY291bnRSZWFzb25Db2RlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBsaW5lIGRpc2NvdW50XHJcbiAgICAgICAgICAgICAgICBvYmpbJ0Rpc2NvdW50J10gPSB7fTtcclxuICAgICAgICAgICAgICAgIG9ialsnRGlzY291bnQnXS5Nb2RpZmllclZhbHVlID0gdGhpcy5yZW1vdmVEZWNpbWFsKGxpbmVEaXNjb3VudC51bml0UHJpY2UpICogLTE7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ0Rpc2NvdW50J10uTW9kaWZpZXJEYXRlVGltZSA9IG9iai5EYXRlVGltZUNyZWF0ZWQ7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ0Rpc2NvdW50J10uTW9kaWZpZXJSZWFzb25JRCA9IGxpbmVEaXNjb3VudC5wZXJjZW50YWdlRGlzY291bnRSZWFzb25Db2RlO1xyXG4gICAgICAgICAgICAgICAgb2JqWydEaXNjb3VudCddLk1vZGlmaWVyRGVzY3JpcHRpb24gPSBsaW5lRGlzY291bnQucGVyY2VudGFnZURpc2NvdW50UmVhc29uTmFtZTtcclxuICAgICAgICAgICAgICAgIG9ialsnRGlzY291bnQnXS5BdXRob3Jpc2luZ1VzZXJJRCA9IHRoaXMudXNlcklkO1xyXG4gICAgICAgICAgICAgICAgb2JqWydEaXNjb3VudCddLkRpc2NvdW50VHlwZSA9IGxpbmVEaXNjb3VudC5kaXNjb3VudFR5cGU7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ0Rpc2NvdW50J10uWE1MU2NoZW1hVmVyc2lvbiA9IDE7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ0Rpc2NvdW50J10uT3JpZ2luYWxQcmljZSA9IHRoaXMucmVtb3ZlRGVjaW1hbChsaW5lRGlzY291bnQuZGlzY291bnRBbW91bnQgKyAobGluZURpc2NvdW50LmRpc2NvdW50ZWRMaW5lUHJpY2UgfHwgMCkpO1xyXG4gICAgICAgICAgICAgICAgb2JqWydEaXNjb3VudCddLkRpc2NvdW50ZWRWYWx1ZSA9IHRoaXMucmVtb3ZlRGVjaW1hbChsaW5lRGlzY291bnQudW5pdFByaWNlKTtcclxuICAgICAgICAgICAgICAgIG9ialsnRGlzY291bnQnXS5EaXNjb3VudFBlcmNlbnRhZ2UgPSBsaW5lRGlzY291bnQucGVyY2VudGFnZURpc2NvdW50VmFsdWU7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ0Rpc2NvdW50J10uUm91bmRpbmdSdWxlID0gMjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGxpbmVEaXNjb3VudC5wcmljZU92ZXJyaWRlUmVhc29uQ29kZSAmJiBsaW5lRGlzY291bnQucHJpY2VPdmVycmlkZVJlYXNvbk5hbWUpIHtcclxuICAgICAgICAgICAgICAgIC8vcHJpY2Ugb3ZlcnJpZGVcclxuICAgICAgICAgICAgICAgIG9ialsnUHJpY2VPdmVycmlkZSddID0ge307XHJcbiAgICAgICAgICAgICAgICBvYmpbJ1ByaWNlT3ZlcnJpZGUnXS5Nb2RpZmllclZhbHVlID0gdGhpcy5yZW1vdmVEZWNpbWFsKGxpbmVEaXNjb3VudC5kaXNjb3VudEFtb3VudCkgKiAtMTtcclxuICAgICAgICAgICAgICAgIG9ialsnUHJpY2VPdmVycmlkZSddLk1vZGlmaWVyRGF0ZVRpbWUgPSBvYmouRGF0ZVRpbWVDcmVhdGVkO1xyXG4gICAgICAgICAgICAgICAgb2JqWydQcmljZU92ZXJyaWRlJ10uTW9kaWZpZXJSZWFzb25JRCA9IGxpbmVEaXNjb3VudC5wcmljZU92ZXJyaWRlUmVhc29uQ29kZTtcclxuICAgICAgICAgICAgICAgIG9ialsnUHJpY2VPdmVycmlkZSddLk1vZGlmaWVyUmVhc29uRGVzY3JpcHRpb24gPSBsaW5lRGlzY291bnQucHJpY2VPdmVycmlkZVJlYXNvbk5hbWU7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ1ByaWNlT3ZlcnJpZGUnXS5BdXRob3Jpc2luZ1VzZXJJRCA9IHRoaXMudXNlcklkO1xyXG4gICAgICAgICAgICAgICAgb2JqWydQcmljZU92ZXJyaWRlJ10uWE1MU2NoZW1hVmVyc2lvbiA9IDE7XHJcbiAgICAgICAgICAgICAgICBvYmpbJ1ByaWNlT3ZlcnJpZGUnXS5OZXdQcmljZSA9IHRoaXMucmVtb3ZlRGVjaW1hbChsaW5lRGlzY291bnQudW5pdFByaWNlKTtcclxuICAgICAgICAgICAgICAgIG9ialsnUHJpY2VPdmVycmlkZSddLk9yaWdpbmFsUHJpY2UgPSB0aGlzLnJlbW92ZURlY2ltYWwobGluZURpc2NvdW50LmRpc2NvdW50ZWRMaW5lUHJpY2UgfHwgMCArIGxpbmVEaXNjb3VudC5kaXNjb3VudEFtb3VudCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vdXBkYXRlIHRoZSBwcm9kdWN0IHByaWNlXHJcbiAgICAgICAgICAgIG9ialsnTmV0VmFsdWUnXSA9ICgobGluZURpc2NvdW50LmRpc2NvdW50ZWRMaW5lUHJpY2UgfHwgMCkgKyBsaW5lRGlzY291bnQuZGlzY291bnRBbW91bnQpO1xyXG4gICAgICAgICAgICBvYmpbJ0VmZmVjdGl2ZU5ldFZhbHVlJ10gPSAoKGxpbmVEaXNjb3VudC5kaXNjb3VudGVkTGluZVByaWNlIHx8IDApICsgbGluZURpc2NvdW50LmRpc2NvdW50QW1vdW50KTtcclxuICAgICAgICAgICAgb2JqWydFeHRlbmRlZFZhbHVlJ10gPSAoKGxpbmVEaXNjb3VudC5kaXNjb3VudGVkTGluZVByaWNlIHx8IDApICsgbGluZURpc2NvdW50LmRpc2NvdW50QW1vdW50KTtcclxuICAgICAgICAgICAgb2JqWydVbml0UHJpY2UnXSA9ICgobGluZURpc2NvdW50LmRpc2NvdW50ZWRMaW5lUHJpY2UgfHwgMCkgKyBsaW5lRGlzY291bnQuZGlzY291bnRBbW91bnQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG9iajtcclxuICAgIH1cclxuXHJcbiAgICBjb252ZXJ0VG9TdHJpbmcodmFsdWU6IGFueSkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHZhbHVlLCAnIGNhbiBub3QgYmUgY29udmVydGVkIGluIHN0cmluZycsIGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZW5lcmF0ZUR5bmFtaWNTdG9ja0xvb2tVcCgpIHtcclxuICAgICAgICBsZXQgeCA9ICcwJztcclxuICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRG9jdW1lbnQuYmFza2V0LnByb2R1Y3RzLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudC5kZWxpdmVyeU1ldGhvZCA9PT0gJzEnIHx8IGVsZW1lbnQuZGVsaXZlcnlNZXRob2QgPT09ICcyJykge1xyXG4gICAgICAgICAgICAgICAgeCA9ICcxJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiB4O1xyXG4gICAgfVxyXG5cclxuICAgIGdldEF0dHJpYnV0ZXMoKXtcclxuICAgICAgICBsZXQgbmFtZTogc3RyaW5nIHwgYW55W10gPSBbXVxyXG4gICAgICAgIHRoaXMudHJhbnNhY3Rpb25Eb2N1bWVudC5iYXNrZXQucHJvZHVjdHMuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmICggZWxlbWVudC5hdHRyaWJ1dGVzICYmIGVsZW1lbnQuYXR0cmlidXRlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBuYW1lID0gZWxlbWVudC5hdHRyaWJ1dGVzLmZpbHRlcigoeDogYW55KSA9PiB4Lm5hbWUudG9VcHBlckNhc2UoKSA9PT0gZWxlbWVudC5uYW1lLnRvVXBwZXJDYXNlKCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKG5hbWUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmFtZVswXS52YWx1ZVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICByZXR1cm4gXCJcIlxyXG4gICAgICAgIH1cclxuICAgIH1cclxufSJdfQ==
|