ng-easycommerce 0.0.685 → 0.0.686
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 +11 -0
- package/bundles/ng-easycommerce.umd.js +811 -641
- package/bundles/ng-easycommerce.umd.js.map +1 -1
- package/bundles/ng-easycommerce.umd.min.js +1 -1
- package/bundles/ng-easycommerce.umd.min.js.map +1 -1
- package/esm2015/lib/ec-component/checkout-ec/checkout-ec.component.js +22 -9
- package/esm2015/lib/ec-component/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.js +18 -5
- package/esm2015/lib/ec-component/checkout-ec/shipment-ec/shipment-ec.component.js +11 -6
- package/esm2015/lib/ec-component/checkout-ec/shipment-ec-single/shipment-ec-single.component.js +13 -4
- package/esm2015/lib/interfaces/shipping-option.js +1 -0
- package/esm2015/lib/services/checkout/checkout.service.js +25 -12
- package/esm2015/lib/services/checkout/shipment.service.js +36 -8
- package/esm2015/lib/utils/order-util.service.js +41 -1
- package/esm2015/lib/utils/shipping-price-display.service.js +47 -0
- package/esm2015/public-api.js +2 -1
- package/esm5/lib/ec-component/checkout-ec/checkout-ec.component.js +22 -9
- package/esm5/lib/ec-component/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.js +18 -5
- package/esm5/lib/ec-component/checkout-ec/shipment-ec/shipment-ec.component.js +13 -6
- package/esm5/lib/ec-component/checkout-ec/shipment-ec-single/shipment-ec-single.component.js +13 -4
- package/esm5/lib/interfaces/shipping-option.js +1 -0
- package/esm5/lib/services/checkout/checkout.service.js +27 -12
- package/esm5/lib/services/checkout/shipment.service.js +40 -10
- package/esm5/lib/utils/order-util.service.js +41 -1
- package/esm5/lib/utils/shipping-price-display.service.js +51 -0
- package/esm5/public-api.js +2 -1
- package/fesm2015/ng-easycommerce.js +775 -616
- package/fesm2015/ng-easycommerce.js.map +1 -1
- package/fesm5/ng-easycommerce.js +811 -642
- package/fesm5/ng-easycommerce.js.map +1 -1
- package/lib/ec-component/checkout-ec/checkout-ec.component.d.ts +5 -1
- package/lib/ec-component/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.d.ts +5 -1
- package/lib/ec-component/checkout-ec/shipment-ec/shipment-ec.component.d.ts +4 -1
- package/lib/ec-component/checkout-ec/shipment-ec-single/shipment-ec-single.component.d.ts +4 -0
- package/lib/interfaces/shipping-option.d.ts +53 -0
- package/lib/services/checkout/shipment.service.d.ts +6 -1
- package/lib/utils/order-util.service.d.ts +20 -0
- package/lib/utils/shipping-price-display.service.d.ts +16 -0
- package/ng-easycommerce.metadata.json +1 -1
- package/package.json +1 -1
- package/public-api.d.ts +2 -0
|
@@ -67,6 +67,10 @@ var __read = (this && this.__read) || function (o, n) {
|
|
|
67
67
|
}
|
|
68
68
|
return ar;
|
|
69
69
|
};
|
|
70
|
+
var __spread = (this && this.__spread) || function () {
|
|
71
|
+
for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));
|
|
72
|
+
return ar;
|
|
73
|
+
};
|
|
70
74
|
import { Injectable } from '@angular/core';
|
|
71
75
|
import { ConnectionService } from '../../api/connection.service';
|
|
72
76
|
import { CartService } from '../cart.service';
|
|
@@ -281,13 +285,14 @@ var CheckoutService = /** @class */ (function () {
|
|
|
281
285
|
});
|
|
282
286
|
}); };
|
|
283
287
|
this.updateAsociatedData = function (cart) {
|
|
284
|
-
var _a, _b
|
|
288
|
+
var _a, _b;
|
|
285
289
|
var result = _this.orderUtils.getSummaryPromotions(cart);
|
|
286
290
|
var totals = (_a = cart) === null || _a === void 0 ? void 0 : _a.totals;
|
|
287
291
|
if (!totals) {
|
|
288
292
|
_this.asociatedDataSubject.next(result);
|
|
289
293
|
return;
|
|
290
294
|
}
|
|
295
|
+
var shipmentAmount = _this.orderUtils.getSummaryShipmentAmount(cart);
|
|
291
296
|
if (totals.taxes != 0) {
|
|
292
297
|
var total = __assign({}, result[result.length - 1]);
|
|
293
298
|
result[result.length - 1] = {
|
|
@@ -297,16 +302,26 @@ var CheckoutService = /** @class */ (function () {
|
|
|
297
302
|
};
|
|
298
303
|
result.push(total);
|
|
299
304
|
}
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
305
|
+
if (shipmentAmount !== null && ((_b = result) === null || _b === void 0 ? void 0 : _b.length)) {
|
|
306
|
+
var shipmentIndex = result.findIndex(function (item) { return item.type === 'shipment'; });
|
|
307
|
+
var shipmentItem = {
|
|
308
|
+
type: 'shipment',
|
|
309
|
+
name: 'shipment',
|
|
310
|
+
amount: shipmentAmount
|
|
311
|
+
};
|
|
312
|
+
if (shipmentIndex !== -1) {
|
|
313
|
+
result[shipmentIndex] = shipmentItem;
|
|
314
|
+
}
|
|
315
|
+
else {
|
|
316
|
+
var totalIndex = result.findIndex(function (item) { return item.type === 'total'; });
|
|
317
|
+
if (totalIndex !== -1) {
|
|
318
|
+
result = __spread(result.slice(0, totalIndex), [
|
|
319
|
+
shipmentItem
|
|
320
|
+
], result.slice(totalIndex));
|
|
321
|
+
}
|
|
322
|
+
else {
|
|
323
|
+
result.push(shipmentItem);
|
|
324
|
+
}
|
|
310
325
|
}
|
|
311
326
|
}
|
|
312
327
|
_this.asociatedDataSubject.next(result);
|
|
@@ -356,4 +371,4 @@ var CheckoutService = /** @class */ (function () {
|
|
|
356
371
|
return CheckoutService;
|
|
357
372
|
}());
|
|
358
373
|
export { CheckoutService };
|
|
359
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tvdXQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLWVhc3ljb21tZXJjZS8iLCJzb3VyY2VzIjpbImxpYi9zZXJ2aWNlcy9jaGVja291dC9jaGVja291dC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDakUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVuRixPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFbkQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDckUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTlDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFRLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7Ozs7Ozs7QUFLbEQ7SUFpQ0ks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LGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbm5lY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vYXBpL2Nvbm5lY3Rpb24uc2VydmljZSc7XG5pbXBvcnQgeyBDYXJ0U2VydmljZSB9IGZyb20gJy4uL2NhcnQuc2VydmljZSc7XG5pbXBvcnQgeyBDb25zdGFudHMgfSBmcm9tICcuLi8uLi9jb3JlLmNvbnN0cyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFJlcGxheVN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIGZvcmtKb2luLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgU3RlcEksIFN0ZXBUeXBlSSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvc3RlcCc7XG5pbXBvcnQgeyBTdGVwIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9jaGVja291dC9zdGVwJztcbmltcG9ydCB7IENoZWNrb3V0RGF0YSwgQ2hlY2tvdXREYXRhVHlwZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvY2hlY2tvdXQtZGF0YSc7XG5pbXBvcnQgeyBPcmRlclV0aWxpdHlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vdXRpbHMvb3JkZXItdXRpbC5zZXJ2aWNlJztcbmltcG9ydCB7IEFuYWx5dGljc1NlcnZpY2UgfSBmcm9tICcuLi9hbmFseXRpY3Muc2VydmljZSc7XG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uL2F1dGguc2VydmljZSc7XG5pbXBvcnQgeyBVc2VyIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy91c2VyJztcbmltcG9ydCB7IEVycm9ySGFuZGxlclNlcnZpY2UgfSBmcm9tICcuL2Vycm9yLWhhbmRsZXIuc2VydmljZSc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBmaWx0ZXIsIHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vdXRpbHMvdG9hc3Quc2VydmljZSc7XG5pbXBvcnQgeyBJcFNlcnZpY2UgfSBmcm9tICcuLi9pcC1hZGRyZXNzLnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIENoZWNrb3V0U2VydmljZSBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgICBiYXNlQXBpID0gKCkgPT4gJ3Nob3AtYXBpLycgKyB0aGlzLmNvbnN0cy5nZXRDaGFubmVsKCkgKyAnL2NoZWNrb3V0LycgKyB0aGlzLmNhcnRTZXJ2aWNlLmdldENhcnRUb2tlbigpO1xuICAgIGdldFBheW1lbnRNZXRob2RzQXBpID0gKCkgPT4gdGhpcy5iYXNlQXBpKCkgKyAnL3BheW1lbnQnO1xuICAgIHB1dEFkZHJlc3NBcGkgPSAoKSA9PiB0aGlzLmJhc2VBcGkoKSArICcvYWRkcmVzcyc7XG4gICAgcHV0UGF5bWVudEFwaSA9IChtZXRob2QpID0+IHRoaXMuYmFzZUFwaSgpICsgJy9wYXltZW50LycgKyBtZXRob2Q7XG4gICAgY29tcGxldGVBcGkgPSAoKSA9PiB0aGlzLmJhc2VBcGkoKSArICcvY29tcGxldGUnO1xuICAgIHBlcnNpc3RTaGlwbWVudEFwaSA9ICgpID0+ICcnO1xuICAgIGdldFByZWZlcmVuY2VBcGkgPSAoKSA9PiAnc2hvcC1hcGkvJyArIHRoaXMuY29uc3RzLmdldENoYW5uZWwoKSArICcvbWVyY2Fkby1wYWdvLycgKyB0aGlzLmNhcnRTZXJ2aWNlLmdldENhcnRUb2tlbigpICsgJy9wcmVmZXJlbmNlJztcbiAgICBnZXRIYXNQdXJjaGFzZUNvbmRpdGlvbnMgPSAoKSA9PiAnc2hvcC1hcGkvJyArIHRoaXMuY29uc3RzLmdldENoYW5uZWwoKSArICcvY2FydHMvJyArIHRoaXMuY2FydFNlcnZpY2UuZ2V0Q2FydFRva2VuKCkgKyAnL2hhc19wdXJjaGFzZV9jb25kaXRpb25zJztcblxuICAgIHByaXZhdGUgY2FuQ2hlY2tvdXRTdWJqZWN0ID0gbmV3IFJlcGxheVN1YmplY3Q8Ym9vbGVhbj4oKTtcbiAgICBwcml2YXRlIG9uUmVhZHlTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgICBwcml2YXRlIHN0YXRlU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U3RlcFtdPihudWxsKTtcbiAgICBwcml2YXRlIHBheW1lbnRNZXRob2RzU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55W10+KFtdKTtcbiAgICBwcml2YXRlIGxvYWRpbmdTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgcHJpdmF0ZSBvcmRlclN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4obnVsbCk7XG4gICAgcHJpdmF0ZSBhc29jaWF0ZWREYXRhU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q2hlY2tvdXREYXRhW10+KG51bGwpO1xuICAgIHByaXZhdGUgb3JkZXI6IGFueTtcbiAgICBwcml2YXRlIGNoZWNrb3V0X2RhdGE6IGFueSA9IHt9O1xuICAgIHB1YmxpYyB0b3RhbDtcbiAgICBwcml2YXRlIGNhcnRMb2NhbDtcbiAgICBwcml2YXRlIHVzZXI6IFVzZXI7XG5cbiAgICBwdWJsaWMgb3JkZXIkID0gdGhpcy5vcmRlclN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgcHVibGljIHN0YXRlJCA9IHRoaXMuc3RhdGVTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIHB1YmxpYyBsb2FkaW5nJCA9IHRoaXMubG9hZGluZ1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgcHVibGljIGNhbkNoZWNrb3V0JCA9IHRoaXMuY2FuQ2hlY2tvdXRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIHB1YmxpYyBhc29jaWF0ZWREYXRhJCA9IHRoaXMuYXNvY2lhdGVkRGF0YVN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgcHVibGljIG9uUmVhZHkkID0gdGhpcy5vblJlYWR5U3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICBwdWJsaWMgcGF5bWVudE1ldGhvZHMkID0gdGhpcy5wYXltZW50TWV0aG9kc1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNvbm5lY3Rpb246IENvbm5lY3Rpb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGNhcnRTZXJ2aWNlOiBDYXJ0U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjb25zdHM6IENvbnN0YW50cyxcbiAgICAgICAgcHJpdmF0ZSB0b2FzdHJTZXJ2aWNlOiBUb2FzdFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgb3JkZXJVdGlsczogT3JkZXJVdGlsaXR5U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBhbmFseXRpY3NTZXJ2aWNlOiBBbmFseXRpY3NTZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgICAgICBwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVyU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBpcFNlcnZpY2U6IElwU2VydmljZSkge1xuXG4gICAgICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMuY2FydFNlcnZpY2UuY2FydEl0ZW1zLCB0aGlzLmNhcnRTZXJ2aWNlLmxvYWRpbmddKS5zdWJzY3JpYmUoKFtpdGVtcywgbG9hZGluZ10pID0+IHtcbiAgICAgICAgICAgIGlmICghbG9hZGluZyAmJiBpdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYW5DaGVja291dFN1YmplY3QubmV4dCh0cnVlKVxuICAgICAgICAgICAgICAgIHRoaXMuY2FydFNlcnZpY2UuZ2V0VG90YWxBbW91bnQoKS5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b3RhbCA9IHJlcztcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9KVxuICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLmNhcnQuc3Vic2NyaWJlKGNhcnQgPT4gY2FydCAmJiAodGhpcy5jYXJ0TG9jYWwgPSBjYXJ0KSAmJiB0aGlzLnVwZGF0ZUFzb2NpYXRlZERhdGEoY2FydCkpO1xuICAgICAgICB0aGlzLm9yZGVyJC5zdWJzY3JpYmUob3JkZXIgPT4gb3JkZXIgJiYgdGhpcy51cGRhdGVBc29jaWF0ZWREYXRhKG9yZGVyKSlcbiAgICAgICAgdGhpcy5hdXRoU2VydmljZS5nZXRVc2VyUHJvZmlsZSgpLnN1YnNjcmliZSh1c2VyID0+IHRoaXMudXNlciA9IHVzZXIpXG4gICAgICAgIHRoaXMuZXJyb3JIYW5kbGVyLmVycm9yJC5waXBlKGZpbHRlcihyZXMgPT4gcmVzICE9IG51bGwpKS5zdWJzY3JpYmUoXG4gICAgICAgICAgICByZXMgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyZXMuY29kZSA9PSAnb3V0X29mX3N0b2NrJyB8fCByZXMuY29kZSA9PSAnaXRlbXNfd2l0aF9wcm9kdWN0X29yX3Byb2R1Y3RfdmFyaWFudF9ub3RfZW5hYmxlZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ3JlZGlyZWN0LWNhcnQnKVxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoJy9jYXJ0JylcbiAgICAgICAgICAgICAgICAgICAgfSwgMjAwMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICApXG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgfVxuXG4gICAgdXBkYXRlT3JkZXIgPSAob3JkZXIpID0+IG9yZGVyICYmIHRoaXMub3JkZXJTdWJqZWN0Lm5leHQob3JkZXIpO1xuXG4gICAgc2V0Q2hlY2tvdXROb3RlcyA9IChub3Rlczogc3RyaW5nKSA9PiB7XG4gICAgICAgIHRoaXMuY2hlY2tvdXRfZGF0YS5ub3RlcyA9IG5vdGVzIHx8ICcnO1xuICAgIH1cblxuICAgIGdldENoZWNrb3V0Tm90ZXMgPSAoKSA9PiB0aGlzLmNoZWNrb3V0X2RhdGEubm90ZXMgfHwgJyc7XG5cbiAgICBzZXRQYXltZW50TWV0aG9kcyA9IChtZXRob2RzOiBhbnlbXSkgPT4ge1xuICAgICAgICB0aGlzLnBheW1lbnRNZXRob2RzU3ViamVjdC5uZXh0KG1ldGhvZHMgfHwgW10pO1xuICAgIH1cblxuICAgIHByZWZldGNoUGF5bWVudE1ldGhvZHMgPSBhc3luYyAoKSA9PlxuICAgICAgICB0aGlzLmNvbm5lY3Rpb24uZ2V0KHRoaXMuZ2V0UGF5bWVudE1ldGhvZHNBcGkoKSkudG9Qcm9taXNlKCkudGhlbihcbiAgICAgICAgICAgIHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWV0aG9kcyA9IHJlcy5wYXltZW50cz8ubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgID8gT2JqZWN0LmtleXMocmVzLnBheW1lbnRzWzBdLm1ldGhvZHMpLm1hcChrZXkgPT4gcmVzLnBheW1lbnRzWzBdLm1ldGhvZHNba2V5XSlcbiAgICAgICAgICAgICAgICAgICAgOiBbXTtcbiAgICAgICAgICAgICAgICBpZiAobWV0aG9kcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXltZW50TWV0aG9kc1N1YmplY3QubmV4dChtZXRob2RzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1ldGhvZHM7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnb3BlcmF0aW9uLWVycm9yJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuXG4gICAgZ2V0U3RlcERhdGEgPSAoc3RlcF9uYW1lOiBTdGVwVHlwZUkpID0+IHtcbiAgICAgICAgY29uc3Qgc3RlcHMgPSB0aGlzLnN0YXRlU3ViamVjdC5nZXRWYWx1ZSgpO1xuICAgICAgICBpZiAoIXN0ZXBzIHx8ICFzdGVwcy5sZW5ndGgpIHJldHVybiBudWxsO1xuICAgICAgICBjb25zdCBzdGVwX3Jlc3VsdCA9IHN0ZXBzLmZpbmQoc3RlcCA9PiBzdGVwLm5hbWUgPT0gc3RlcF9uYW1lKTtcbiAgICAgICAgcmV0dXJuIChzdGVwX3Jlc3VsdCAmJiBzdGVwX3Jlc3VsdC5kYXRhKSB8fCBudWxsO1xuICAgIH1cblxuICAgIHNldFN0ZXBzID0gKHN0ZXBzOiBTdGVwSVtdLCBhdXRvaGFuZGxlID0gdHJ1ZSkgPT4ge1xuICAgICAgICBsZXQgZmluYWxfc3RlcHMgPSBbXTtcbiAgICAgICAgc3RlcHMuZm9yRWFjaCgoc3RlcCwgaSkgPT4gZmluYWxfc3RlcHMucHVzaChuZXcgU3RlcChzdGVwLm5hbWUsIHN0ZXAucHJpb3JpdHkgfHwgKGkgKyAxKSkpKTtcbiAgICAgICAgdGhpcy5zdGF0ZVN1YmplY3QubmV4dChmaW5hbF9zdGVwcyk7XG5cbiAgICAgICAgLy8gT2J0ZW5lciBJUCB5IHViaWNhY2nDs25cbiAgICAgICAgZm9ya0pvaW4oe1xuICAgICAgICAgICAgaXA6IHRoaXMuaXBTZXJ2aWNlLmdldElwKCkucGlwZShjYXRjaEVycm9yKCgpID0+IG9mKG51bGwpKSksXG4gICAgICAgICAgICBsb2NhdGlvbjogdGhpcy5pcFNlcnZpY2UuZ2V0TG9jYXRpb24oKS5waXBlKGNhdGNoRXJyb3IoKCkgPT4gb2YobnVsbCkpKVxuICAgICAgICB9KS5zdWJzY3JpYmUocmVzdWx0cyA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgICAgICAgICAgaXA6IHJlc3VsdHMuaXA/LmlwIHx8ICd1bmtub3duJyxcbiAgICAgICAgICAgICAgICBjb3VudHJ5OiByZXN1bHRzLmxvY2F0aW9uPy5jb3VudHJ5IHx8ICd1bmtub3duJyxcbiAgICAgICAgICAgICAgICBjaXR5OiByZXN1bHRzLmxvY2F0aW9uPy5jaXR5IHx8ICd1bmtub3duJ1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgcXVlcnlTdHJpbmcgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHBhcmFtcykudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIGNvbnN0IHVybFdpdGhQYXJhbXMgPSBgJHt0aGlzLmdldEhhc1B1cmNoYXNlQ29uZGl0aW9ucygpfT8ke3F1ZXJ5U3RyaW5nfWA7XG5cbiAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvbi5nZXRFcnJvck5vdEhhbmRsZXIodXJsV2l0aFBhcmFtcykudG9Qcm9taXNlKCkudGhlbihcbiAgICAgICAgICAgICAgICByZXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFuYWx5dGljc1NlcnZpY2UuY2FsbEV2ZW50KCdjaGVja291dF9pbml0Jywge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5jYXJ0TG9jYWwsXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW5jeTogdGhpcy5jYXJ0TG9jYWw/LmN1cnJlbmN5LFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuY2FydExvY2FsPy50b3RhbFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzZXRTdGVwUmVhZHkgPSBhc3luYyAoc3RlcF9udW1iZXIsIGRhdGEsIG9yZGVyPywgYXV0b21hdGljPykgPT4ge1xuICAgICAgICBhd2FpdCB0aGlzLnJlc3RhcnRBbGxTdGVwc0Zyb20oc3RlcF9udW1iZXIpO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGxldCBzdGVwcyA9IHRoaXMuc3RhdGVTdWJqZWN0LmdldFZhbHVlKCk7XG4gICAgICAgICAgICBzdGVwcy5maW5kKHN0ZXAgPT4gc3RlcC5wcmlvcml0eSA9PSBzdGVwX251bWJlcikucmVhZHkoZGF0YSk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlU3ViamVjdC5uZXh0KHN0ZXBzKTtcblxuICAgICAgICAgICAgaWYgKG9yZGVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcmRlclN1YmplY3QubmV4dChvcmRlcik7XG4gICAgICAgICAgICAgICAgdGhpcy50b3RhbCA9IG9yZGVyLnRvdGFscy50b3RhbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuaXNDaGVja291dFJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICBpZiAoc3RlcHNbc3RlcHMubGVuZ3RoIC0gMV0ubmFtZSA9PSAnc2hpcG1lbnQnKSB7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uUmVhZHlTdWJqZWN0Lm5leHQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH0sIDUwMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0sIDE1MCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHNldFN0ZXBEb2luZyA9IGFzeW5jIChzdGVwX251bWJlcikgPT4ge1xuICAgICAgICBsZXQgc3RlcHMgPSB0aGlzLnN0YXRlU3ViamVjdC5nZXRWYWx1ZSgpO1xuICAgICAgICBzdGVwcyA9IGF3YWl0IHRoaXMucmVzdGFydEFsbFN0ZXBzRnJvbShzdGVwX251bWJlciwgZmFsc2UsIGZhbHNlKTtcbiAgICAgICAgc3RlcHMuZmluZChzdGVwID0+IHN0ZXAucHJpb3JpdHkgPT0gc3RlcF9udW1iZXIpLmRvaW5nKCk7XG4gICAgICAgIHRoaXMuc3RhdGVTdWJqZWN0Lm5leHQoc3RlcHMpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXN0YXJ0QWxsU3RlcHNGcm9tID0gKHN0ZXBfbnVtYmVyLCBpbmNsdWRlZCA9IHRydWUsIHVwZGF0ZSA9IHRydWUpID0+IHtcbiAgICAgICAgbGV0IHN0ZXBzID0gdGhpcy5zdGF0ZVN1YmplY3QuZ2V0VmFsdWUoKTtcbiAgICAgICAgc3RlcHMgPSBzdGVwcy5tYXAoKHN0ZXApID0+IHtcbiAgICAgICAgICAgIGluY2x1ZGVkXG4gICAgICAgICAgICAgICAgPyAoc3RlcC5wcmlvcml0eSA+PSBzdGVwX251bWJlcikgJiYgc3RlcC5yZXN0YXJ0KClcbiAgICAgICAgICAgICAgICA6IChzdGVwLnByaW9yaXR5ID4gc3RlcF9udW1iZXIpICYmIHN0ZXAucmVzdGFydCgpXG4gICAgICAgICAgICByZXR1cm4gc3RlcDtcbiAgICAgICAgfSlcbiAgICAgICAgdXBkYXRlICYmIHRoaXMuc3RhdGVTdWJqZWN0Lm5leHQoc3RlcHMpO1xuICAgICAgICByZXR1cm4gc3RlcHM7XG4gICAgfVxuXG4gICAgaXNDaGVja291dFJlYWR5ID0gKCkgPT4ge1xuICAgICAgICBsZXQgc3RlcHMgPSB0aGlzLnN0YXRlU3ViamVjdC52YWx1ZTtcbiAgICAgICAgY29uc3Qgc3RlcF9taXNzaW5nID0gc3RlcHMuZmluZChzdGVwID0+IHN0ZXAuaXNQZW5kaW5nKCkpO1xuICAgICAgICByZXR1cm4gIXN0ZXBfbWlzc2luZztcbiAgICB9XG5cbiAgICBpc1N0ZXBSZWFkeSA9IChzdGVwX25hbWUpID0+IHtcbiAgICAgICAgY29uc3Qgc3RlcHMgPSB0aGlzLnN0YXRlU3ViamVjdC5nZXRWYWx1ZSgpIHx8IFtdO1xuICAgICAgICBpZiAoIXN0ZXBzLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBjb25zdCBzdGVwID0gc3RlcHMuZmluZChzdGVwID0+IHN0ZXAubmFtZSA9PSBzdGVwX25hbWUpO1xuICAgICAgICBpZiAoIXN0ZXApIHJldHVybiB0cnVlO1xuICAgICAgICByZXR1cm4gc3RlcC5pc1JlYWR5KCk7XG4gICAgfTtcblxuICAgIHNldE9yZGVyID0gKG9yZGVyKSA9PiB7IHRoaXMub3JkZXIgPSBvcmRlciwgdGhpcy5vcmRlclN1YmplY3QubmV4dChvcmRlcikgfTtcbiAgICBnZXRPcmRlciA9ICgpID0+IHRoaXMub3JkZXIgfHwgdGhpcy5vcmRlclN1YmplY3QudmFsdWU7XG5cbiAgICBwcml2YXRlIGNvbXBsZXRlT3JkZXIgPSAoKSA9PiB0aGlzLmNvbm5lY3Rpb24ucHV0KHRoaXMuY29tcGxldGVBcGkoKSwgeyBlbWFpbDogdGhpcy5jaGVja291dF9kYXRhLmVtYWlsLCBub3RlczogdGhpcy5jaGVja291dF9kYXRhLm5vdGVzIHx8ICcnIH0pLnRvUHJvbWlzZSgpO1xuXG4gICAgY29tcGxldGUgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgIHRoaXMubG9hZGluZ1N1YmplY3QubmV4dCh0cnVlKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IHRoaXMuY29tcGxldGVPcmRlcigpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICAhcmVzdWx0IHx8XG4gICAgICAgICAgICByZXN1bHQuZXJyb3IgfHxcbiAgICAgICAgICAgIHJlc3VsdC5jb2RlID09PSAnaW5zdWZmaWNpZW50X2NyZWRpdCcgfHxcbiAgICAgICAgICAgIHJlc3VsdC5jb2RlID09PSAnZXJyb3InXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5jYXJ0U2VydmljZS5jaGFuZ2VIYXZlVG9VcGRhdGUoZmFsc2UpO1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdC5uZXh0KGZhbHNlKTtcbiAgICAgICAgICAgIHJldHVybiAoeyBvazogZmFsc2UsIHJlcXVpcmVfbG9naW46IHRydWUsIG1lc3NhZ2U6ICdub3QtY29tcGxldGVkJyB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldE9yZGVyKHJlc3VsdCk7XG4gICAgICAgIHRoaXMuYW5hbHl0aWNzU2VydmljZS5jYWxsRXZlbnQoJ3B1cmNoYXNlJywgeyAuLi5yZXN1bHQsIGN1cnJlbmN5OiByZXN1bHQuY3VycmVuY3ksIHZhbHVlOiByZXN1bHQudG90YWwgfSk7XG4gICAgICAgIHRoaXMuY2FydFNlcnZpY2UuY2xlYXJBbmRSZXNldENhcnQoKTtcbiAgICAgICAgdGhpcy5jYW5DaGVja291dFN1YmplY3QubmV4dChmYWxzZSk7XG4gICAgICAgIHRoaXMub25SZWFkeVN1YmplY3QubmV4dChmYWxzZSk7XG4gICAgICAgIHRoaXMubG9hZGluZ1N1YmplY3QubmV4dChmYWxzZSk7XG4gICAgICAgIHJldHVybiAoeyBvazogdHJ1ZSwgcmVxdWlyZV9sb2dpbjogZmFsc2UsIG1lc3NhZ2U6ICcnIH0pO1xuICAgIH1cblxuICAgIHVwZGF0ZUFzb2NpYXRlZERhdGEgPSAoY2FydDogYW55KSA9PiB7XG4gICAgICAgIGxldCByZXN1bHQgPSB0aGlzLm9yZGVyVXRpbHMuZ2V0U3VtbWFyeVByb21vdGlvbnMoY2FydCk7XG4gICAgICAgIGNvbnN0IHRvdGFscyA9IGNhcnQ/LnRvdGFscztcbiAgICAgICAgaWYgKCF0b3RhbHMpIHtcbiAgICAgICAgICAgIHRoaXMuYXNvY2lhdGVkRGF0YVN1YmplY3QubmV4dChyZXN1bHQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0b3RhbHMudGF4ZXMgIT0gMCkge1xuICAgICAgICAgICAgbGV0IHRvdGFsID0geyAuLi5yZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFdIH07XG4gICAgICAgICAgICByZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFdID0ge1xuICAgICAgICAgICAgICAgIHR5cGU6ICd0YXhlcycsXG4gICAgICAgICAgICAgICAgbmFtZTogJ3RheGVzJyxcbiAgICAgICAgICAgICAgICBhbW91bnQ6IHRvdGFscy50YXhlc1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0LnB1c2godG90YWwpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBzaGlwbWVudCA9IHJlc3VsdD8uZmluZChwcm9tb3Rpb24gPT4gcHJvbW90aW9uLnR5cGUgPT0gXCJzaGlwbWVudFwiKTtcbiAgICAgICAgaWYgKCFzaGlwbWVudCAmJiB0b3RhbHMuc2hpcHBpbmcgIT0gMCkge1xuXG4gICAgICAgICAgICBpZiAocmVzdWx0Py5sZW5ndGggJiYgIXJlc3VsdC5maW5kKGl0ZW0gPT4gaXRlbS50eXBlID09PSBcInNoaXBtZW50XCIpKSB7XG4gICAgICAgICAgICAgICAgbGV0IHRvdGFsID0geyAuLi5yZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFdIH07XG4gICAgICAgICAgICAgICAgcmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3NoaXBtZW50JyxcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ3NoaXBtZW50JyxcbiAgICAgICAgICAgICAgICAgICAgYW1vdW50OiB0b3RhbHMuc2hpcHBpbmdcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2godG90YWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuYXNvY2lhdGVkRGF0YVN1YmplY3QubmV4dChyZXN1bHQpO1xuICAgIH1cblxuICAgIHJlc3RhcnRDaGVja291dCA9ICgpID0+IHsgfVxuXG59XG4iXX0=
|
|
374
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tvdXQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLWVhc3ljb21tZXJjZS8iLCJzb3VyY2VzIjpbImxpYi9zZXJ2aWNlcy9jaGVja291dC9jaGVja291dC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFbkYsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRW5ELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUU5QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBUSxNQUFNLGdCQUFnQixDQUFDO0FBQzFELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7Ozs7O0FBS2xEO0lB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aEIsU0FBUztnQkFDRixZQUFZO2dCQUNmLG1CQUFtQjtnQkFDYixnQkFBZ0I7Z0JBQ3RCLFdBQVc7Z0JBQ2YsTUFBTTtnQkFDQSxtQkFBbUI7Z0JBQ3RCLFNBQVM7OztJQTFDdkIsZUFBZTtRQUgzQixVQUFVLENBQUM7WUFDUixVQUFVLEVBQUUsTUFBTTtTQUNyQixDQUFDO09BQ1csZUFBZSxDQTZRM0I7MEJBbFNEO0NBa1NDLEFBN1FELElBNlFDO1NBN1FZLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbm5lY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vYXBpL2Nvbm5lY3Rpb24uc2VydmljZSc7XG5pbXBvcnQgeyBDYXJ0U2VydmljZSB9IGZyb20gJy4uL2NhcnQuc2VydmljZSc7XG5pbXBvcnQgeyBDb25zdGFudHMgfSBmcm9tICcuLi8uLi9jb3JlLmNvbnN0cyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFJlcGxheVN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIGZvcmtKb2luLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgU3RlcEksIFN0ZXBUeXBlSSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvc3RlcCc7XG5pbXBvcnQgeyBTdGVwIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9jaGVja291dC9zdGVwJztcbmltcG9ydCB7IENoZWNrb3V0RGF0YSwgQ2hlY2tvdXREYXRhVHlwZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvY2hlY2tvdXQtZGF0YSc7XG5pbXBvcnQgeyBPcmRlclV0aWxpdHlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vdXRpbHMvb3JkZXItdXRpbC5zZXJ2aWNlJztcbmltcG9ydCB7IEFuYWx5dGljc1NlcnZpY2UgfSBmcm9tICcuLi9hbmFseXRpY3Muc2VydmljZSc7XG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uL2F1dGguc2VydmljZSc7XG5pbXBvcnQgeyBVc2VyIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy91c2VyJztcbmltcG9ydCB7IEVycm9ySGFuZGxlclNlcnZpY2UgfSBmcm9tICcuL2Vycm9yLWhhbmRsZXIuc2VydmljZSc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBmaWx0ZXIsIHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vdXRpbHMvdG9hc3Quc2VydmljZSc7XG5pbXBvcnQgeyBJcFNlcnZpY2UgfSBmcm9tICcuLi9pcC1hZGRyZXNzLnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIENoZWNrb3V0U2VydmljZSBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgICBiYXNlQXBpID0gKCkgPT4gJ3Nob3AtYXBpLycgKyB0aGlzLmNvbnN0cy5nZXRDaGFubmVsKCkgKyAnL2NoZWNrb3V0LycgKyB0aGlzLmNhcnRTZXJ2aWNlLmdldENhcnRUb2tlbigpO1xuICAgIGdldFBheW1lbnRNZXRob2RzQXBpID0gKCkgPT4gdGhpcy5iYXNlQXBpKCkgKyAnL3BheW1lbnQnO1xuICAgIHB1dEFkZHJlc3NBcGkgPSAoKSA9PiB0aGlzLmJhc2VBcGkoKSArICcvYWRkcmVzcyc7XG4gICAgcHV0UGF5bWVudEFwaSA9IChtZXRob2QpID0+IHRoaXMuYmFzZUFwaSgpICsgJy9wYXltZW50LycgKyBtZXRob2Q7XG4gICAgY29tcGxldGVBcGkgPSAoKSA9PiB0aGlzLmJhc2VBcGkoKSArICcvY29tcGxldGUnO1xuICAgIHBlcnNpc3RTaGlwbWVudEFwaSA9ICgpID0+ICcnO1xuICAgIGdldFByZWZlcmVuY2VBcGkgPSAoKSA9PiAnc2hvcC1hcGkvJyArIHRoaXMuY29uc3RzLmdldENoYW5uZWwoKSArICcvbWVyY2Fkby1wYWdvLycgKyB0aGlzLmNhcnRTZXJ2aWNlLmdldENhcnRUb2tlbigpICsgJy9wcmVmZXJlbmNlJztcbiAgICBnZXRIYXNQdXJjaGFzZUNvbmRpdGlvbnMgPSAoKSA9PiAnc2hvcC1hcGkvJyArIHRoaXMuY29uc3RzLmdldENoYW5uZWwoKSArICcvY2FydHMvJyArIHRoaXMuY2FydFNlcnZpY2UuZ2V0Q2FydFRva2VuKCkgKyAnL2hhc19wdXJjaGFzZV9jb25kaXRpb25zJztcblxuICAgIHByaXZhdGUgY2FuQ2hlY2tvdXRTdWJqZWN0ID0gbmV3IFJlcGxheVN1YmplY3Q8Ym9vbGVhbj4oKTtcbiAgICBwcml2YXRlIG9uUmVhZHlTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgICBwcml2YXRlIHN0YXRlU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U3RlcFtdPihudWxsKTtcbiAgICBwcml2YXRlIHBheW1lbnRNZXRob2RzU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55W10+KFtdKTtcbiAgICBwcml2YXRlIGxvYWRpbmdTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgcHJpdmF0ZSBvcmRlclN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4obnVsbCk7XG4gICAgcHJpdmF0ZSBhc29jaWF0ZWREYXRhU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q2hlY2tvdXREYXRhW10+KG51bGwpO1xuICAgIHByaXZhdGUgb3JkZXI6IGFueTtcbiAgICBwcml2YXRlIGNoZWNrb3V0X2RhdGE6IGFueSA9IHt9O1xuICAgIHB1YmxpYyB0b3RhbDtcbiAgICBwcml2YXRlIGNhcnRMb2NhbDtcbiAgICBwcml2YXRlIHVzZXI6IFVzZXI7XG5cbiAgICBwdWJsaWMgb3JkZXIkID0gdGhpcy5vcmRlclN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgcHVibGljIHN0YXRlJCA9IHRoaXMuc3RhdGVTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIHB1YmxpYyBsb2FkaW5nJCA9IHRoaXMubG9hZGluZ1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgcHVibGljIGNhbkNoZWNrb3V0JCA9IHRoaXMuY2FuQ2hlY2tvdXRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIHB1YmxpYyBhc29jaWF0ZWREYXRhJCA9IHRoaXMuYXNvY2lhdGVkRGF0YVN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgcHVibGljIG9uUmVhZHkkID0gdGhpcy5vblJlYWR5U3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICBwdWJsaWMgcGF5bWVudE1ldGhvZHMkID0gdGhpcy5wYXltZW50TWV0aG9kc1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNvbm5lY3Rpb246IENvbm5lY3Rpb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGNhcnRTZXJ2aWNlOiBDYXJ0U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjb25zdHM6IENvbnN0YW50cyxcbiAgICAgICAgcHJpdmF0ZSB0b2FzdHJTZXJ2aWNlOiBUb2FzdFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgb3JkZXJVdGlsczogT3JkZXJVdGlsaXR5U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBhbmFseXRpY3NTZXJ2aWNlOiBBbmFseXRpY3NTZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgICAgICBwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVyU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBpcFNlcnZpY2U6IElwU2VydmljZSkge1xuXG4gICAgICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMuY2FydFNlcnZpY2UuY2FydEl0ZW1zLCB0aGlzLmNhcnRTZXJ2aWNlLmxvYWRpbmddKS5zdWJzY3JpYmUoKFtpdGVtcywgbG9hZGluZ10pID0+IHtcbiAgICAgICAgICAgIGlmICghbG9hZGluZyAmJiBpdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYW5DaGVja291dFN1YmplY3QubmV4dCh0cnVlKVxuICAgICAgICAgICAgICAgIHRoaXMuY2FydFNlcnZpY2UuZ2V0VG90YWxBbW91bnQoKS5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b3RhbCA9IHJlcztcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9KVxuICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLmNhcnQuc3Vic2NyaWJlKGNhcnQgPT4gY2FydCAmJiAodGhpcy5jYXJ0TG9jYWwgPSBjYXJ0KSAmJiB0aGlzLnVwZGF0ZUFzb2NpYXRlZERhdGEoY2FydCkpO1xuICAgICAgICB0aGlzLm9yZGVyJC5zdWJzY3JpYmUob3JkZXIgPT4gb3JkZXIgJiYgdGhpcy51cGRhdGVBc29jaWF0ZWREYXRhKG9yZGVyKSlcbiAgICAgICAgdGhpcy5hdXRoU2VydmljZS5nZXRVc2VyUHJvZmlsZSgpLnN1YnNjcmliZSh1c2VyID0+IHRoaXMudXNlciA9IHVzZXIpXG4gICAgICAgIHRoaXMuZXJyb3JIYW5kbGVyLmVycm9yJC5waXBlKGZpbHRlcihyZXMgPT4gcmVzICE9IG51bGwpKS5zdWJzY3JpYmUoXG4gICAgICAgICAgICByZXMgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyZXMuY29kZSA9PSAnb3V0X29mX3N0b2NrJyB8fCByZXMuY29kZSA9PSAnaXRlbXNfd2l0aF9wcm9kdWN0X29yX3Byb2R1Y3RfdmFyaWFudF9ub3RfZW5hYmxlZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ3JlZGlyZWN0LWNhcnQnKVxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoJy9jYXJ0JylcbiAgICAgICAgICAgICAgICAgICAgfSwgMjAwMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICApXG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgfVxuXG4gICAgdXBkYXRlT3JkZXIgPSAob3JkZXIpID0+IG9yZGVyICYmIHRoaXMub3JkZXJTdWJqZWN0Lm5leHQob3JkZXIpO1xuXG4gICAgc2V0Q2hlY2tvdXROb3RlcyA9IChub3Rlczogc3RyaW5nKSA9PiB7XG4gICAgICAgIHRoaXMuY2hlY2tvdXRfZGF0YS5ub3RlcyA9IG5vdGVzIHx8ICcnO1xuICAgIH1cblxuICAgIGdldENoZWNrb3V0Tm90ZXMgPSAoKSA9PiB0aGlzLmNoZWNrb3V0X2RhdGEubm90ZXMgfHwgJyc7XG5cbiAgICBzZXRQYXltZW50TWV0aG9kcyA9IChtZXRob2RzOiBhbnlbXSkgPT4ge1xuICAgICAgICB0aGlzLnBheW1lbnRNZXRob2RzU3ViamVjdC5uZXh0KG1ldGhvZHMgfHwgW10pO1xuICAgIH1cblxuICAgIHByZWZldGNoUGF5bWVudE1ldGhvZHMgPSBhc3luYyAoKSA9PlxuICAgICAgICB0aGlzLmNvbm5lY3Rpb24uZ2V0KHRoaXMuZ2V0UGF5bWVudE1ldGhvZHNBcGkoKSkudG9Qcm9taXNlKCkudGhlbihcbiAgICAgICAgICAgIHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWV0aG9kcyA9IHJlcy5wYXltZW50cz8ubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgID8gT2JqZWN0LmtleXMocmVzLnBheW1lbnRzWzBdLm1ldGhvZHMpLm1hcChrZXkgPT4gcmVzLnBheW1lbnRzWzBdLm1ldGhvZHNba2V5XSlcbiAgICAgICAgICAgICAgICAgICAgOiBbXTtcbiAgICAgICAgICAgICAgICBpZiAobWV0aG9kcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXltZW50TWV0aG9kc1N1YmplY3QubmV4dChtZXRob2RzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1ldGhvZHM7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnb3BlcmF0aW9uLWVycm9yJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuXG4gICAgZ2V0U3RlcERhdGEgPSAoc3RlcF9uYW1lOiBTdGVwVHlwZUkpID0+IHtcbiAgICAgICAgY29uc3Qgc3RlcHMgPSB0aGlzLnN0YXRlU3ViamVjdC5nZXRWYWx1ZSgpO1xuICAgICAgICBpZiAoIXN0ZXBzIHx8ICFzdGVwcy5sZW5ndGgpIHJldHVybiBudWxsO1xuICAgICAgICBjb25zdCBzdGVwX3Jlc3VsdCA9IHN0ZXBzLmZpbmQoc3RlcCA9PiBzdGVwLm5hbWUgPT0gc3RlcF9uYW1lKTtcbiAgICAgICAgcmV0dXJuIChzdGVwX3Jlc3VsdCAmJiBzdGVwX3Jlc3VsdC5kYXRhKSB8fCBudWxsO1xuICAgIH1cblxuICAgIHNldFN0ZXBzID0gKHN0ZXBzOiBTdGVwSVtdLCBhdXRvaGFuZGxlID0gdHJ1ZSkgPT4ge1xuICAgICAgICBsZXQgZmluYWxfc3RlcHMgPSBbXTtcbiAgICAgICAgc3RlcHMuZm9yRWFjaCgoc3RlcCwgaSkgPT4gZmluYWxfc3RlcHMucHVzaChuZXcgU3RlcChzdGVwLm5hbWUsIHN0ZXAucHJpb3JpdHkgfHwgKGkgKyAxKSkpKTtcbiAgICAgICAgdGhpcy5zdGF0ZVN1YmplY3QubmV4dChmaW5hbF9zdGVwcyk7XG5cbiAgICAgICAgLy8gT2J0ZW5lciBJUCB5IHViaWNhY2nDs25cbiAgICAgICAgZm9ya0pvaW4oe1xuICAgICAgICAgICAgaXA6IHRoaXMuaXBTZXJ2aWNlLmdldElwKCkucGlwZShjYXRjaEVycm9yKCgpID0+IG9mKG51bGwpKSksXG4gICAgICAgICAgICBsb2NhdGlvbjogdGhpcy5pcFNlcnZpY2UuZ2V0TG9jYXRpb24oKS5waXBlKGNhdGNoRXJyb3IoKCkgPT4gb2YobnVsbCkpKVxuICAgICAgICB9KS5zdWJzY3JpYmUocmVzdWx0cyA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgICAgICAgICAgaXA6IHJlc3VsdHMuaXA/LmlwIHx8ICd1bmtub3duJyxcbiAgICAgICAgICAgICAgICBjb3VudHJ5OiByZXN1bHRzLmxvY2F0aW9uPy5jb3VudHJ5IHx8ICd1bmtub3duJyxcbiAgICAgICAgICAgICAgICBjaXR5OiByZXN1bHRzLmxvY2F0aW9uPy5jaXR5IHx8ICd1bmtub3duJ1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgcXVlcnlTdHJpbmcgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHBhcmFtcykudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIGNvbnN0IHVybFdpdGhQYXJhbXMgPSBgJHt0aGlzLmdldEhhc1B1cmNoYXNlQ29uZGl0aW9ucygpfT8ke3F1ZXJ5U3RyaW5nfWA7XG5cbiAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvbi5nZXRFcnJvck5vdEhhbmRsZXIodXJsV2l0aFBhcmFtcykudG9Qcm9taXNlKCkudGhlbihcbiAgICAgICAgICAgICAgICByZXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFuYWx5dGljc1NlcnZpY2UuY2FsbEV2ZW50KCdjaGVja291dF9pbml0Jywge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5jYXJ0TG9jYWwsXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW5jeTogdGhpcy5jYXJ0TG9jYWw/LmN1cnJlbmN5LFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuY2FydExvY2FsPy50b3RhbFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzZXRTdGVwUmVhZHkgPSBhc3luYyAoc3RlcF9udW1iZXIsIGRhdGEsIG9yZGVyPywgYXV0b21hdGljPykgPT4ge1xuICAgICAgICBhd2FpdCB0aGlzLnJlc3RhcnRBbGxTdGVwc0Zyb20oc3RlcF9udW1iZXIpO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGxldCBzdGVwcyA9IHRoaXMuc3RhdGVTdWJqZWN0LmdldFZhbHVlKCk7XG4gICAgICAgICAgICBzdGVwcy5maW5kKHN0ZXAgPT4gc3RlcC5wcmlvcml0eSA9PSBzdGVwX251bWJlcikucmVhZHkoZGF0YSk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlU3ViamVjdC5uZXh0KHN0ZXBzKTtcblxuICAgICAgICAgICAgaWYgKG9yZGVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcmRlclN1YmplY3QubmV4dChvcmRlcik7XG4gICAgICAgICAgICAgICAgdGhpcy50b3RhbCA9IG9yZGVyLnRvdGFscy50b3RhbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuaXNDaGVja291dFJlYWR5KCkpIHtcbiAgICAgICAgICAgICAgICBpZiAoc3RlcHNbc3RlcHMubGVuZ3RoIC0gMV0ubmFtZSA9PSAnc2hpcG1lbnQnKSB7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uUmVhZHlTdWJqZWN0Lm5leHQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH0sIDUwMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0sIDE1MCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHNldFN0ZXBEb2luZyA9IGFzeW5jIChzdGVwX251bWJlcikgPT4ge1xuICAgICAgICBsZXQgc3RlcHMgPSB0aGlzLnN0YXRlU3ViamVjdC5nZXRWYWx1ZSgpO1xuICAgICAgICBzdGVwcyA9IGF3YWl0IHRoaXMucmVzdGFydEFsbFN0ZXBzRnJvbShzdGVwX251bWJlciwgZmFsc2UsIGZhbHNlKTtcbiAgICAgICAgc3RlcHMuZmluZChzdGVwID0+IHN0ZXAucHJpb3JpdHkgPT0gc3RlcF9udW1iZXIpLmRvaW5nKCk7XG4gICAgICAgIHRoaXMuc3RhdGVTdWJqZWN0Lm5leHQoc3RlcHMpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXN0YXJ0QWxsU3RlcHNGcm9tID0gKHN0ZXBfbnVtYmVyLCBpbmNsdWRlZCA9IHRydWUsIHVwZGF0ZSA9IHRydWUpID0+IHtcbiAgICAgICAgbGV0IHN0ZXBzID0gdGhpcy5zdGF0ZVN1YmplY3QuZ2V0VmFsdWUoKTtcbiAgICAgICAgc3RlcHMgPSBzdGVwcy5tYXAoKHN0ZXApID0+IHtcbiAgICAgICAgICAgIGluY2x1ZGVkXG4gICAgICAgICAgICAgICAgPyAoc3RlcC5wcmlvcml0eSA+PSBzdGVwX251bWJlcikgJiYgc3RlcC5yZXN0YXJ0KClcbiAgICAgICAgICAgICAgICA6IChzdGVwLnByaW9yaXR5ID4gc3RlcF9udW1iZXIpICYmIHN0ZXAucmVzdGFydCgpXG4gICAgICAgICAgICByZXR1cm4gc3RlcDtcbiAgICAgICAgfSlcbiAgICAgICAgdXBkYXRlICYmIHRoaXMuc3RhdGVTdWJqZWN0Lm5leHQoc3RlcHMpO1xuICAgICAgICByZXR1cm4gc3RlcHM7XG4gICAgfVxuXG4gICAgaXNDaGVja291dFJlYWR5ID0gKCkgPT4ge1xuICAgICAgICBsZXQgc3RlcHMgPSB0aGlzLnN0YXRlU3ViamVjdC52YWx1ZTtcbiAgICAgICAgY29uc3Qgc3RlcF9taXNzaW5nID0gc3RlcHMuZmluZChzdGVwID0+IHN0ZXAuaXNQZW5kaW5nKCkpO1xuICAgICAgICByZXR1cm4gIXN0ZXBfbWlzc2luZztcbiAgICB9XG5cbiAgICBpc1N0ZXBSZWFkeSA9IChzdGVwX25hbWUpID0+IHtcbiAgICAgICAgY29uc3Qgc3RlcHMgPSB0aGlzLnN0YXRlU3ViamVjdC5nZXRWYWx1ZSgpIHx8IFtdO1xuICAgICAgICBpZiAoIXN0ZXBzLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBjb25zdCBzdGVwID0gc3RlcHMuZmluZChzdGVwID0+IHN0ZXAubmFtZSA9PSBzdGVwX25hbWUpO1xuICAgICAgICBpZiAoIXN0ZXApIHJldHVybiB0cnVlO1xuICAgICAgICByZXR1cm4gc3RlcC5pc1JlYWR5KCk7XG4gICAgfTtcblxuICAgIHNldE9yZGVyID0gKG9yZGVyKSA9PiB7IHRoaXMub3JkZXIgPSBvcmRlciwgdGhpcy5vcmRlclN1YmplY3QubmV4dChvcmRlcikgfTtcbiAgICBnZXRPcmRlciA9ICgpID0+IHRoaXMub3JkZXIgfHwgdGhpcy5vcmRlclN1YmplY3QudmFsdWU7XG5cbiAgICBwcml2YXRlIGNvbXBsZXRlT3JkZXIgPSAoKSA9PiB0aGlzLmNvbm5lY3Rpb24ucHV0KHRoaXMuY29tcGxldGVBcGkoKSwgeyBlbWFpbDogdGhpcy5jaGVja291dF9kYXRhLmVtYWlsLCBub3RlczogdGhpcy5jaGVja291dF9kYXRhLm5vdGVzIHx8ICcnIH0pLnRvUHJvbWlzZSgpO1xuXG4gICAgY29tcGxldGUgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgIHRoaXMubG9hZGluZ1N1YmplY3QubmV4dCh0cnVlKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IHRoaXMuY29tcGxldGVPcmRlcigpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICAhcmVzdWx0IHx8XG4gICAgICAgICAgICByZXN1bHQuZXJyb3IgfHxcbiAgICAgICAgICAgIHJlc3VsdC5jb2RlID09PSAnaW5zdWZmaWNpZW50X2NyZWRpdCcgfHxcbiAgICAgICAgICAgIHJlc3VsdC5jb2RlID09PSAnZXJyb3InXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5jYXJ0U2VydmljZS5jaGFuZ2VIYXZlVG9VcGRhdGUoZmFsc2UpO1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdC5uZXh0KGZhbHNlKTtcbiAgICAgICAgICAgIHJldHVybiAoeyBvazogZmFsc2UsIHJlcXVpcmVfbG9naW46IHRydWUsIG1lc3NhZ2U6ICdub3QtY29tcGxldGVkJyB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldE9yZGVyKHJlc3VsdCk7XG4gICAgICAgIHRoaXMuYW5hbHl0aWNzU2VydmljZS5jYWxsRXZlbnQoJ3B1cmNoYXNlJywgeyAuLi5yZXN1bHQsIGN1cnJlbmN5OiByZXN1bHQuY3VycmVuY3ksIHZhbHVlOiByZXN1bHQudG90YWwgfSk7XG4gICAgICAgIHRoaXMuY2FydFNlcnZpY2UuY2xlYXJBbmRSZXNldENhcnQoKTtcbiAgICAgICAgdGhpcy5jYW5DaGVja291dFN1YmplY3QubmV4dChmYWxzZSk7XG4gICAgICAgIHRoaXMub25SZWFkeVN1YmplY3QubmV4dChmYWxzZSk7XG4gICAgICAgIHRoaXMubG9hZGluZ1N1YmplY3QubmV4dChmYWxzZSk7XG4gICAgICAgIHJldHVybiAoeyBvazogdHJ1ZSwgcmVxdWlyZV9sb2dpbjogZmFsc2UsIG1lc3NhZ2U6ICcnIH0pO1xuICAgIH1cblxuICAgIHVwZGF0ZUFzb2NpYXRlZERhdGEgPSAoY2FydDogYW55KSA9PiB7XG4gICAgICAgIGxldCByZXN1bHQgPSB0aGlzLm9yZGVyVXRpbHMuZ2V0U3VtbWFyeVByb21vdGlvbnMoY2FydCk7XG4gICAgICAgIGNvbnN0IHRvdGFscyA9IGNhcnQ/LnRvdGFscztcbiAgICAgICAgaWYgKCF0b3RhbHMpIHtcbiAgICAgICAgICAgIHRoaXMuYXNvY2lhdGVkRGF0YVN1YmplY3QubmV4dChyZXN1bHQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNoaXBtZW50QW1vdW50ID0gdGhpcy5vcmRlclV0aWxzLmdldFN1bW1hcnlTaGlwbWVudEFtb3VudChjYXJ0KTtcbiAgICAgICAgaWYgKHRvdGFscy50YXhlcyAhPSAwKSB7XG4gICAgICAgICAgICBsZXQgdG90YWwgPSB7IC4uLnJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV0gfTtcbiAgICAgICAgICAgIHJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV0gPSB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ3RheGVzJyxcbiAgICAgICAgICAgICAgICBuYW1lOiAndGF4ZXMnLFxuICAgICAgICAgICAgICAgIGFtb3VudDogdG90YWxzLnRheGVzXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHQucHVzaCh0b3RhbCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNoaXBtZW50QW1vdW50ICE9PSBudWxsICYmIHJlc3VsdD8ubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBzaGlwbWVudEluZGV4ID0gcmVzdWx0LmZpbmRJbmRleChpdGVtID0+IGl0ZW0udHlwZSA9PT0gJ3NoaXBtZW50Jyk7XG4gICAgICAgICAgICBjb25zdCBzaGlwbWVudEl0ZW06IENoZWNrb3V0RGF0YSA9IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnc2hpcG1lbnQnLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdzaGlwbWVudCcsXG4gICAgICAgICAgICAgICAgYW1vdW50OiBzaGlwbWVudEFtb3VudFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgaWYgKHNoaXBtZW50SW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0W3NoaXBtZW50SW5kZXhdID0gc2hpcG1lbnRJdGVtO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0b3RhbEluZGV4ID0gcmVzdWx0LmZpbmRJbmRleChpdGVtID0+IGl0ZW0udHlwZSA9PT0gJ3RvdGFsJyk7XG4gICAgICAgICAgICAgICAgaWYgKHRvdGFsSW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnJlc3VsdC5zbGljZSgwLCB0b3RhbEluZGV4KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNoaXBtZW50SXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnJlc3VsdC5zbGljZSh0b3RhbEluZGV4KVxuICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHNoaXBtZW50SXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuYXNvY2lhdGVkRGF0YVN1YmplY3QubmV4dChyZXN1bHQpO1xuICAgIH1cblxuICAgIHJlc3RhcnRDaGVja291dCA9ICgpID0+IHsgfVxuXG59XG4iXX0=
|
|
@@ -64,6 +64,17 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
64
64
|
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
65
65
|
}
|
|
66
66
|
};
|
|
67
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
68
|
+
var t = {};
|
|
69
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
70
|
+
t[p] = s[p];
|
|
71
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
72
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
73
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
74
|
+
t[p[i]] = s[p[i]];
|
|
75
|
+
}
|
|
76
|
+
return t;
|
|
77
|
+
};
|
|
67
78
|
var __values = (this && this.__values) || function(o) {
|
|
68
79
|
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
|
|
69
80
|
if (m) return m.call(o);
|
|
@@ -86,12 +97,14 @@ import { StoresService } from '../stores.service';
|
|
|
86
97
|
import { CheckoutService } from './checkout.service';
|
|
87
98
|
import { StepService } from '../../classes/checkout/step-service';
|
|
88
99
|
import { AnalyticsService } from '../analytics.service';
|
|
100
|
+
import { ShippingPriceDisplayService } from '../../utils/shipping-price-display.service';
|
|
89
101
|
var ShipmentService = /** @class */ (function (_super) {
|
|
90
102
|
__extends(ShipmentService, _super);
|
|
91
|
-
function ShipmentService(connection, transformer, analyticsService, consts, cartService, storesService, checkoutService) {
|
|
103
|
+
function ShipmentService(connection, transformer, shippingPriceDisplay, analyticsService, consts, cartService, storesService, checkoutService) {
|
|
92
104
|
var _this = _super.call(this, checkoutService) || this;
|
|
93
105
|
_this.connection = connection;
|
|
94
106
|
_this.transformer = transformer;
|
|
107
|
+
_this.shippingPriceDisplay = shippingPriceDisplay;
|
|
95
108
|
_this.analyticsService = analyticsService;
|
|
96
109
|
_this.consts = consts;
|
|
97
110
|
_this.cartService = cartService;
|
|
@@ -224,7 +237,7 @@ var ShipmentService = /** @class */ (function (_super) {
|
|
|
224
237
|
_this.setShippingOption = function (payload, stepData) {
|
|
225
238
|
if (stepData === void 0) { stepData = payload; }
|
|
226
239
|
return __awaiter(_this, void 0, void 0, function () {
|
|
227
|
-
var res, err_3;
|
|
240
|
+
var sanitizedPayload, res, err_3;
|
|
228
241
|
return __generator(this, function (_a) {
|
|
229
242
|
switch (_a.label) {
|
|
230
243
|
case 0:
|
|
@@ -232,7 +245,8 @@ var ShipmentService = /** @class */ (function (_super) {
|
|
|
232
245
|
_a.label = 1;
|
|
233
246
|
case 1:
|
|
234
247
|
_a.trys.push([1, 3, , 4]);
|
|
235
|
-
|
|
248
|
+
sanitizedPayload = this.stripFrontendOnlyShippingFields(payload);
|
|
249
|
+
return [4 /*yield*/, this.connection.put(this.putShippingOptionApi(), sanitizedPayload).toPromise()];
|
|
236
250
|
case 2:
|
|
237
251
|
res = _a.sent();
|
|
238
252
|
this.checkoutService.updateAsociatedData(res);
|
|
@@ -251,16 +265,17 @@ var ShipmentService = /** @class */ (function (_super) {
|
|
|
251
265
|
_this.putShipment = function () { return _this.connection.put(_this.putShipmentApi(), { method: _this.stateSubject.getValue().data.method }).toPromise(); };
|
|
252
266
|
_this.getCalculatedCosts = function () { return _this.connection.get(_this.calculatedCostsApi()).toPromise(); };
|
|
253
267
|
_this.setContract = function (contract) { return __awaiter(_this, void 0, void 0, function () {
|
|
254
|
-
var data;
|
|
268
|
+
var stepData, data;
|
|
255
269
|
var _this = this;
|
|
256
270
|
return __generator(this, function (_a) {
|
|
257
271
|
switch (_a.label) {
|
|
258
272
|
case 0:
|
|
259
|
-
|
|
273
|
+
stepData = __assign(__assign({}, contract), this.otherParamsForContract(contract));
|
|
274
|
+
data = this.stripFrontendOnlyShippingFields(stepData);
|
|
260
275
|
return [4 /*yield*/, this.connection.put(this.putContractApi(), data)
|
|
261
276
|
.toPromise().then(function (order) {
|
|
262
277
|
// this.analyticsService.callEvent('shipping_info', order);
|
|
263
|
-
return _this.setStepReady(
|
|
278
|
+
return _this.setStepReady(stepData, order);
|
|
264
279
|
}, function (err) {
|
|
265
280
|
return new Promise(function (resolve, reject) { return reject(new Error(err.error)); });
|
|
266
281
|
}).catch(function (err) { return console.error(err); })];
|
|
@@ -294,6 +309,7 @@ var ShipmentService = /** @class */ (function (_super) {
|
|
|
294
309
|
}); };
|
|
295
310
|
_this.buildCostsFromResponse = function (response, method) { return __awaiter(_this, void 0, void 0, function () {
|
|
296
311
|
var result, branch_delivery, stores_1;
|
|
312
|
+
var _this = this;
|
|
297
313
|
var _a;
|
|
298
314
|
return __generator(this, function (_b) {
|
|
299
315
|
switch (_b.label) {
|
|
@@ -302,9 +318,10 @@ var ShipmentService = /** @class */ (function (_super) {
|
|
|
302
318
|
branch_delivery = result.findIndex(function (submethod) { return submethod.name == 'branch_delivery'; });
|
|
303
319
|
if (branch_delivery != -1) {
|
|
304
320
|
result[branch_delivery].contracts = result[branch_delivery].contracts.map(function (contract) {
|
|
321
|
+
var normalizedContract = _this.normalizeShippingContract(contract);
|
|
305
322
|
var branch_property = contract.branch_property || {};
|
|
306
323
|
var address_data = branch_property.address || {};
|
|
307
|
-
return __assign(__assign(__assign({ contract: 'branch_delivery', name:
|
|
324
|
+
return __assign(__assign(__assign({ contract: 'branch_delivery', name: normalizedContract.name, price: normalizedContract.price, originalPrice: normalizedContract.originalPrice }, address_data), branch_property), { computed: (address_data.street || '') + ' N° ' + (address_data.number || '') });
|
|
308
325
|
});
|
|
309
326
|
}
|
|
310
327
|
if (!method.includes('pickup_store')) return [3 /*break*/, 2];
|
|
@@ -393,6 +410,7 @@ var ShipmentService = /** @class */ (function (_super) {
|
|
|
393
410
|
return __awaiter(this, void 0, void 0, function () {
|
|
394
411
|
var list, stores, list_1, list_1_1, entry, methodCode, options, _loop_1, this_1, options_1, options_1_1, option, e_1_1, e_2_1;
|
|
395
412
|
var e_2, _f, e_1, _g;
|
|
413
|
+
var _this = this;
|
|
396
414
|
return __generator(this, function (_h) {
|
|
397
415
|
switch (_h.label) {
|
|
398
416
|
case 0:
|
|
@@ -416,13 +434,14 @@ var ShipmentService = /** @class */ (function (_super) {
|
|
|
416
434
|
contracts = ((_d = option) === null || _d === void 0 ? void 0 : _d.contracts) || [];
|
|
417
435
|
if (((_e = option) === null || _e === void 0 ? void 0 : _e.name) === 'branch_delivery') {
|
|
418
436
|
option.contracts = contracts.map(function (contract) {
|
|
419
|
-
var _a, _b, _c
|
|
437
|
+
var _a, _b, _c;
|
|
438
|
+
var normalizedContract = _this.normalizeShippingContract(contract);
|
|
420
439
|
var branch = ((_a = contract) === null || _a === void 0 ? void 0 : _a.branch_property) || {};
|
|
421
440
|
var address = branch.address || {};
|
|
422
441
|
var street = address.street || '';
|
|
423
442
|
var number = address.number || '';
|
|
424
443
|
var computed = [street, number ? "N\u00B0 " + number : ''].filter(Boolean).join(' ');
|
|
425
|
-
return __assign(__assign(__assign(__assign({}, contract), address), branch), { contract: ((_b = contract) === null || _b === void 0 ? void 0 : _b.contract) || option.name, name: (_c = contract) === null || _c === void 0 ? void 0 : _c.name, price:
|
|
444
|
+
return __assign(__assign(__assign(__assign(__assign({}, contract), normalizedContract), address), branch), { contract: ((_b = contract) === null || _b === void 0 ? void 0 : _b.contract) || option.name, name: (_c = contract) === null || _c === void 0 ? void 0 : _c.name, price: normalizedContract.price, originalPrice: normalizedContract.originalPrice, computed: computed || contract.computed });
|
|
426
445
|
});
|
|
427
446
|
}
|
|
428
447
|
if (!methodCode.includes('pickup_store')) return [3 /*break*/, 3];
|
|
@@ -491,6 +510,16 @@ var ShipmentService = /** @class */ (function (_super) {
|
|
|
491
510
|
});
|
|
492
511
|
});
|
|
493
512
|
};
|
|
513
|
+
ShipmentService.prototype.normalizeShippingContract = function (contract) {
|
|
514
|
+
var _a, _b, _c, _d;
|
|
515
|
+
var price = this.shippingPriceDisplay.normalizePriceValue((_a = contract) === null || _a === void 0 ? void 0 : _a.price);
|
|
516
|
+
var originalPrice = this.shippingPriceDisplay.normalizePriceValue((_b = contract) === null || _b === void 0 ? void 0 : _b.originalPrice);
|
|
517
|
+
return __assign(__assign({}, contract), { price: price !== null ? price : (_c = contract) === null || _c === void 0 ? void 0 : _c.price, originalPrice: originalPrice !== null ? originalPrice : (_d = contract) === null || _d === void 0 ? void 0 : _d.originalPrice });
|
|
518
|
+
};
|
|
519
|
+
ShipmentService.prototype.stripFrontendOnlyShippingFields = function (data) {
|
|
520
|
+
var _a = data || {}, originalPrice = _a.originalPrice, rest = __rest(_a, ["originalPrice"]);
|
|
521
|
+
return rest;
|
|
522
|
+
};
|
|
494
523
|
/**
|
|
495
524
|
* @param moreInfoInMethod por defecto su estado es false, si se desea que visualice información adicional de cada método de envió asignar true.
|
|
496
525
|
*/
|
|
@@ -498,6 +527,7 @@ var ShipmentService = /** @class */ (function (_super) {
|
|
|
498
527
|
ShipmentService.ctorParameters = function () { return [
|
|
499
528
|
{ type: ConnectionService },
|
|
500
529
|
{ type: ShipmentDataTransformer },
|
|
530
|
+
{ type: ShippingPriceDisplayService },
|
|
501
531
|
{ type: AnalyticsService },
|
|
502
532
|
{ type: Constants },
|
|
503
533
|
{ type: CartService },
|
|
@@ -510,4 +540,4 @@ var ShipmentService = /** @class */ (function (_super) {
|
|
|
510
540
|
return ShipmentService;
|
|
511
541
|
}(StepService));
|
|
512
542
|
export { ShipmentService };
|
|
513
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hpcG1lbnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLWVhc3ljb21tZXJjZS8iLCJzb3VyY2VzIjpbImxpYi9zZXJ2aWNlcy9jaGVja291dC9zaGlwbWVudC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZUFBZSxFQUFnQyxNQUFNLE1BQU0sQ0FBQztBQUNyRSxPQUFPLEVBQUUsSUFBSSxFQUFZLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUU5QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNuRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUVsRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUd4RDtJQUFxQyxtQ0FBVztJQWlDNUMseUJBQW9CLFVBQTZCLEVBQVUsV0FBb0MsRUFBVSxnQkFBa0MsRUFDL0gsTUFBaUIsRUFBVSxXQUF3QixFQUFVLGFBQTRCLEVBQVUsZUFBZ0M7UUFEL0ksWUFFSSxrQkFBTSxlQUFlLENBQUMsU0FDekI7UUFIbUIsZ0JBQVUsR0FBVixVQUFVLENBQW1CO1FBQVUsaUJBQVcsR0FBWCxXQUFXLENB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QUUsWUFBWSxDQUFDLElBQUksR0FBRyxLQUFLLEdBQUcsWUFBWSxDQUFDLE9BQU8sSUFBRzs0Q0FDckYsQ0FBQyxDQUFDLENBQUM7eUNBQ047Ozs7Ozs7Ozs7d0JBOUJZLDJCQUFBLFNBQUEsT0FBTyxDQUFBLENBQUE7Ozs7d0JBQWpCLE1BQU07c0RBQU4sTUFBTTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7NkJBa0NyQixzQkFBTyxJQUFJLEVBQUM7Ozs7S0FDZjtJQTVQRDs7T0FFRztJQUNXLGdDQUFnQixHQUFHLEtBQUssQ0FBQzs7Z0JBWVAsaUJBQWlCO2dCQUF1Qix1QkFBdUI7Z0JBQTRCLGdCQUFnQjtnQkFDdkgsU0FBUztnQkFBdUIsV0FBVztnQkFBeUIsYUFBYTtnQkFBMkIsZUFBZTs7SUFsQ3RJLGVBQWU7UUFEM0IsVUFBVSxFQUFFO09BQ0EsZUFBZSxDQThTM0I7SUFBRCxzQkFBQztDQUFBLEFBOVNELENBQXFDLFdBQVcsR0E4Uy9DO1NBOVNZLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIG9mLCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2UsIHRhcCwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQ2FydFNlcnZpY2UgfSBmcm9tICcuLi9jYXJ0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29uc3RhbnRzIH0gZnJvbSAnLi4vLi4vY29yZS5jb25zdHMnO1xuaW1wb3J0IHsgQ2hlY2tvdXRQcm9jZXNzU3RhdGUgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2NoZWNrb3V0LXByb2Nlc3Mtc3RhdGUnO1xuaW1wb3J0IHsgU2hpcG1lbnREYXRhVHJhbnNmb3JtZXIgfSBmcm9tICcuLi8uLi91dGlscy9zaGlwbWVudC10cmFuc2Zvcm1lci5zZXJ2aWNlJztcbmltcG9ydCB7IENvbm5lY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vYXBpL2Nvbm5lY3Rpb24uc2VydmljZSc7XG5pbXBvcnQgeyBTdG9yZXNTZXJ2aWNlIH0gZnJvbSAnLi4vc3RvcmVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2hlY2tvdXRTZXJ2aWNlIH0gZnJvbSAnLi9jaGVja291dC5zZXJ2aWNlJztcbmltcG9ydCB7IFN0ZXBTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9jaGVja291dC9zdGVwLXNlcnZpY2UnO1xuaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBBbmFseXRpY3NTZXJ2aWNlIH0gZnJvbSAnLi4vYW5hbHl0aWNzLnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgU2hpcG1lbnRTZXJ2aWNlIGV4dGVuZHMgU3RlcFNlcnZpY2Uge1xuXG4gICAgcHJpdmF0ZSBzdGF0ZVN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PENoZWNrb3V0UHJvY2Vzc1N0YXRlPih7IGRvaW5nOiBmYWxzZSwgb2s6IGZhbHNlLCBkYXRhOiBudWxsIH0pO1xuICAgIHByaXZhdGUgbWV0aG9kc1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4oW10pO1xuICAgIHByaXZhdGUgY29zdHNTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KFtdKTtcbiAgICBwcml2YXRlIGVycm9yU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gICAgcHJpdmF0ZSBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgICBwdWJsaWMgYnV0dG9uc0Rpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gICAgcHVibGljIG9yZGVyO1xuXG4gICAgcHJpdmF0ZSBiYXNlQXBpID0gKCkgPT4gJ3Nob3AtYXBpLycgKyB0aGlzLmNvbnN0cy5nZXRDaGFubmVsKCkgKyAnLycgKyAnY2hlY2tvdXQvJyArIHRoaXMuY2FydFNlcnZpY2UuZ2V0Q2FydFRva2VuKCk7XG5cbiAgICBwdWJsaWMgc3RhdGUgPSB0aGlzLnN0YXRlU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICBwdWJsaWMgbWV0aG9kcyA9IHRoaXMubWV0aG9kc1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgcHVibGljIGNvc3RzID0gdGhpcy5jb3N0c1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgcHVibGljIGVycm9yJCA9IHRoaXMuZXJyb3JTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gbW9yZUluZm9Jbk1ldGhvZCBwb3IgZGVmZWN0byBzdSBlc3RhZG8gZXMgZmFsc2UsIHNpIHNlIGRlc2VhIHF1ZSB2aXN1YWxpY2UgaW5mb3JtYWNpw7NuIGFkaWNpb25hbCBkZSBjYWRhIG3DqXRvZG8gZGUgZW52acOzIGFzaWduYXIgdHJ1ZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIG1vcmVJbmZvSW5NZXRob2QgPSBmYWxzZTtcblxuXG4gICAgcHVibGljIHNoaXBtZW50TWV0aG9kc0FwaSA9ICgpID0+IHRoaXMuYmFzZUFwaSgpICsgJy9zaGlwcGluZyc7XG4gICAgcHVibGljIHNoaXBwaW5nT3B0aW9uc0FwaSA9ICgpID0+IHRoaXMuYmFzZUFwaSgpICsgJy9zaGlwcGluZy1vcHRpb25zJztcbiAgICBwdWJsaWMgcHV0U2hpcHBpbmdPcHRpb25BcGkgPSAoKSA9PiB0aGlzLmJhc2VBcGkoKSArICcvc2hpcHBpbmctb3B0aW9uJztcblxuICAgIHB1YmxpYyBwZXJzaXN0U2hpcG1lbnRBcGkgPSAoKSA9PiAnc2hvcC1hcGkvJyArIHRoaXMuY29uc3RzLmdldENoYW5uZWwoKSArICcvYW5kcmVhbmkvJyArIHRoaXMuY2FydFNlcnZpY2UuZ2V0Q2FydFRva2VuKCkgKyAnL3NoaXAnO1xuICAgIHB1YmxpYyBwdXRTaGlwbWVudEFwaSA9ICgpID0+IHRoaXMuYmFzZUFwaSgpICsgJy9zaGlwcGluZy8nICsgdGhpcy5zdGF0ZVN1YmplY3QuZ2V0VmFsdWUoKS5kYXRhLm1ldGhvZDtcbiAgICBwdWJsaWMgcHV0Q29udHJhY3RBcGkgPSAoKSA9PiAnc2hvcC1hcGkvJyArIHRoaXMuY29uc3RzLmdldENoYW5uZWwoKSArICcvY2hlY2tvdXQvJyArIHRoaXMuY2FydFNlcnZpY2UuZ2V0Q2FydFRva2VuKCkgKyAnL3NoaXBwaW5nLWNvbnRyYWN0JztcbiAgICBwdWJsaWMgY2FsY3VsYXRlZENvc3RzQXBpID0gKCkgPT4gJ3Nob3AtYXBpLycgKyB0aGlzLmNvbnN0cy5nZXRDaGFubmVsKCkgKyAnL2NhcnRzLycgKyB0aGlzLmNhcnRTZXJ2aWNlLmdldENhcnRUb2tlbigpICsgJy9tdWx0aXBsZS1lc3RpbWF0ZWQtc2hpcHBpbmctY29zdCc7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNvbm5lY3Rpb246IENvbm5lY3Rpb25TZXJ2aWNlLCBwcml2YXRlIHRyYW5zZm9ybWVyOiBTaGlwbWVudERhdGFUcmFuc2Zvcm1lciwgcHJpdmF0ZSBhbmFseXRpY3NTZXJ2aWNlOiBBbmFseXRpY3NTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGNvbnN0czogQ29uc3RhbnRzLCBwcml2YXRlIGNhcnRTZXJ2aWNlOiBDYXJ0U2VydmljZSwgcHJpdmF0ZSBzdG9yZXNTZXJ2aWNlOiBTdG9yZXNTZXJ2aWNlLCBwcml2YXRlIGNoZWNrb3V0U2VydmljZTogQ2hlY2tvdXRTZXJ2aWNlKSB7XG4gICAgICAgIHN1cGVyKGNoZWNrb3V0U2VydmljZSk7XG4gICAgfVxuXG4gICAgZ2V0U2hpcG1lbnRNZXRob2RzID0gKCkgPT4ge1xuICAgICAgICAvLyB0aGlzLmNvbm5lY3Rpb24uZ2V0KHRoaXMuc2hpcG1lbnRNZXRob2RzQXBpKCkpLnRvUHJvbWlzZSgpLnRoZW4oXG4gICAgICAgIC8vICAgICByZXMgPT4gdGhpcy5tZXRob2RzU3ViamVjdC5uZXh0KHRoaXMucmVzcG9uc2VUb0xpc3QocmVzKSlcbiAgICAgICAgLy8gKS5jYXRjaChlcnIgPT4gdGhpcy5tZXRob2RzU3ViamVjdC5uZXh0KFtdKSlcbiAgICAgICAgdGhpcy5lcnJvclN1YmplY3QubmV4dChudWxsKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdGlvbi5nZXRFcnJvck5vdEhhbmRsZXIodGhpcy5zaGlwbWVudE1ldGhvZHNBcGkoKSkudG9Qcm9taXNlKCkudGhlbihcbiAgICAgICAgICAgIHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGlzdCA9IHRoaXMucmVzcG9uc2VUb0xpc3QocmVzKSB8fCBbXTtcbiAgICAgICAgICAgICAgICB0aGlzLm1ldGhvZHNTdWJqZWN0Lm5leHQobGlzdClcbiAgICAgICAgICAgICAgICByZXR1cm4gbGlzdDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnIgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3JTdWJqZWN0Lm5leHQoJ29wZXJhdGlvbi1lcnJvcicpO1xuICAgICAgICAgICAgICAgIHRoaXMubWV0aG9kc1N1YmplY3QubmV4dChbXSlcbiAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICkuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JTdWJqZWN0Lm5leHQoJ29wZXJhdGlvbi1lcnJvcicpO1xuICAgICAgICAgICAgdGhpcy5tZXRob2RzU3ViamVjdC5uZXh0KFtdKVxuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9KVxuICAgIH1cblxuICAgIGdldFNoaXBwaW5nT3B0aW9ucyA9ICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuY29uc3RzLmdldENoZWNrb3V0VmlldygpICE9PSAnc2luZ2xlJykge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lcnJvclN1YmplY3QubmV4dChudWxsKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdGlvbi5nZXRFcnJvck5vdEhhbmRsZXIodGhpcy5zaGlwcGluZ09wdGlvbnNBcGkoKSkudG9Qcm9taXNlKCkudGhlbihcbiAgICAgICAgICAgIGFzeW5jIHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGlzdCA9IGF3YWl0IHRoaXMubm9ybWFsaXplU2hpcHBpbmdPcHRpb25zKHJlcyk7XG4gICAgICAgICAgICAgICAgdGhpcy5tZXRob2RzU3ViamVjdC5uZXh0KGxpc3QubWFwKGVudHJ5ID0+IGVudHJ5Lm1ldGhvZCkuZmlsdGVyKEJvb2xlYW4pKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbGlzdDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnIgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3JTdWJqZWN0Lm5leHQoJ29wZXJhdGlvbi1lcnJvcicpO1xuICAgICAgICAgICAgICAgIHRoaXMubWV0aG9kc1N1YmplY3QubmV4dChbXSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICApLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICB0aGlzLmVycm9yU3ViamVjdC5uZXh0KCdvcGVyYXRpb24tZXJyb3InKTtcbiAgICAgICAgICAgIHRoaXMubWV0aG9kc1N1YmplY3QubmV4dChbXSk7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH0pXG4gICAgfVxuXG5cbiAgICBzZXRNZXRob2QgPSBhc3luYyAobWV0aG9kKSA9PiB7XG4gICAgICAgIC8vIERlc2hhYmlsaXRhciB0b2RvcyBsb3MgYm90b25lc1xuICAgICAgICB0aGlzLmJ1dHRvbnNEaXNhYmxlZCA9IHRydWU7XG5cbiAgICAgICAgdGhpcy5lcnJvclN1YmplY3QubmV4dChudWxsKTtcbiAgICAgICAgdGhpcy5jb3N0c1N1YmplY3QubmV4dChbXSk7XG4gICAgICAgIHRoaXMuc3RhdGVTdWJqZWN0Lm5leHQoeyBkb2luZzogdHJ1ZSwgb2s6IGZhbHNlLCBkYXRhOiB7IG1ldGhvZCB9IH0pO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLnB1dFNoaXBtZW50KCk7XG4gICAgICAgICAgICB0aGlzLmNoZWNrb3V0U2VydmljZS51cGRhdGVBc29jaWF0ZWREYXRhKHJlcyk7XG4gICAgICAgICAgICB0aGlzLm9yZGVyID0gcmVzO1xuICAgICAgICAgICAgY29uc3QgY29zdHMgPSBhd2FpdCB0aGlzLmdldENhbGN1bGF0ZWRDb3N0cygpO1xuICAgICAgICAgICAgdGhpcy5tb2RpZnlDb3N0c1Jlc3BvbnNlKGNvc3RzLCB0aGlzLmdldFVzZXJEYXRhKCk/LnNoaXBwaW5nQWRkcmVzcz8ucG9zdGNvZGUsIG1ldGhvZCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgdGhpcy5lcnJvclN1YmplY3QubmV4dCgnb3BlcmF0aW9uLWVycm9yJyk7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyLmVycm9yKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIC8vIEhhYmlsaXRhciB0b2RvcyBsb3MgYm90b25lc1xuICAgICAgICAgICAgdGhpcy5idXR0b25zRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldE1ldGhvZE9ubHkgPSBhc3luYyAobWV0aG9kKSA9PiB7XG4gICAgICAgIHRoaXMuZXJyb3JTdWJqZWN0Lm5leHQobnVsbCk7XG4gICAgICAgIHRoaXMuc3RhdGVTdWJqZWN0Lm5leHQoeyBkb2luZzogdHJ1ZSwgb2s6IGZhbHNlLCBkYXRhOiB7IG1ldGhvZCB9IH0pO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5wdXRTaGlwbWVudCgpO1xuICAgICAgICAgICAgdGhpcy5jaGVja291dFNlcnZpY2UudXBkYXRlQXNvY2lhdGVkRGF0YShyZXMpO1xuICAgICAgICAgICAgdGhpcy5vcmRlciA9IHJlcztcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgICAgICB0aGlzLmVycm9yU3ViamVjdC5uZXh0KCdvcGVyYXRpb24tZXJyb3InKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlcnIuZXJyb3IpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2V0U2hpcHBpbmdPcHRpb24gPSBhc3luYyAoXG4gICAgICAgIHBheWxvYWQ6IHsgbWV0aG9kOiBzdHJpbmc7IG9wdGlvbjogc3RyaW5nOyBjb250cmFjdDogc3RyaW5nOyBwcmljZTogbnVtYmVyIH0sXG4gICAgICAgIHN0ZXBEYXRhOiBhbnkgPSBwYXlsb2FkXG4gICAgKSA9PiB7XG4gICAgICAgIHRoaXMuZXJyb3JTdWJqZWN0Lm5leHQobnVsbCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmNvbm5lY3Rpb24ucHV0KHRoaXMucHV0U2hpcHBpbmdPcHRpb25BcGkoKSwgcGF5bG9hZCkudG9Qcm9taXNlKCk7XG4gICAgICAgICAgICB0aGlzLmNoZWNrb3V0U2VydmljZS51cGRhdGVBc29jaWF0ZWREYXRhKHJlcyk7XG4gICAgICAgICAgICB0aGlzLm9yZGVyID0gcmVzO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2V0U3RlcFJlYWR5KHN0ZXBEYXRhLCByZXMpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JTdWJqZWN0Lm5leHQoJ29wZXJhdGlvbi1lcnJvcicpO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVyci5lcnJvcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHB1dFNoaXBtZW50ID0gKCkgPT4gdGhpcy5jb25uZWN0aW9uLnB1dCh0aGlzLnB1dFNoaXBtZW50QXBpKCksIHsgbWV0aG9kOiB0aGlzLnN0YXRlU3ViamVjdC5nZXRWYWx1ZSgpLmRhdGEubWV0aG9kIH0pLnRvUHJvbWlzZSgpO1xuXG4gICAgZ2V0Q2FsY3VsYXRlZENvc3RzID0gKCkgPT4gdGhpcy5jb25uZWN0aW9uLmdldCh0aGlzLmNhbGN1bGF0ZWRDb3N0c0FwaSgpKS50b1Byb21pc2UoKTtcblxuICAgIHNldENvbnRyYWN0ID0gYXN5bmMgKGNvbnRyYWN0OiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgZGF0YSA9IHsgLi4uY29udHJhY3QsIC4uLnRoaXMub3RoZXJQYXJhbXNGb3JDb250cmFjdChjb250cmFjdCkgfTtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdGlvbi5wdXQodGhpcy5wdXRDb250cmFjdEFwaSgpLCBkYXRhKVxuICAgICAgICAudG9Qcm9taXNlKCkudGhlbihcbiAgICAgICAgICAgIG9yZGVyID0+IHtcbiAgICAgICAgICAgICAgIC8vICB0aGlzLmFuYWx5dGljc1NlcnZpY2UuY2FsbEV2ZW50KCdzaGlwcGluZ19pbmZvJywgb3JkZXIpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNldFN0ZXBSZWFkeShkYXRhLCBvcmRlcil9LFxuICAgICAgICAgICAgZXJyID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gcmVqZWN0KG5ldyBFcnJvcihlcnIuZXJyb3IpKSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgKS5jYXRjaChlcnIgPT4gY29uc29sZS5lcnJvcihlcnIpKVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbiAmJiB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIC8vIFVUSUxTXG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gcmVzcG9uc2UgRGUgYXBpIGRlIHNvbGljaXR1ZCBkZSBjb3N0b3MgcG9yIG1ldG9kbyBkZSBlbnbDrW8gc2VsZWNjaW9uYWRvXG4gICAgICogQHBhcmFtIHBvc3RfY29kZSBJbmRpY2FkbyBlbiBlbCBwYXNvIGRlIEFkZHJlc3NpbmcgKGRhdG9zIHBlcnNvbmFsZXMgeSBkZSBmYWN0dXJhY2nDs24pXG4gICAgICogQHBhcmFtIG1ldGhvZCBNZXRvZG8gZGUgZW52w61vIHNlbGVjY2lvbmFkb1xuICAgICAqL1xuICAgIG1vZGlmeUNvc3RzUmVzcG9uc2UgPSBhc3luYyAocmVzcG9uc2UsIHBvc3RfY29kZSwgbWV0aG9kKSA9PiB7XG4gICAgICAgIGlmICghcmVzcG9uc2UgfHwgIXJlc3BvbnNlLm11bHRpcGxlUHJpY2VzKSB7XG4gICAgICAgICAgICB0aGlzLmVycm9yU3ViamVjdC5uZXh0KCdvcGVyYXRpb24tZXJyb3InKTtcbiAgICAgICAgICAgIHRoaXMuY29zdHNTdWJqZWN0Lm5leHQoW10pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvc3RzID0gYXdhaXQgdGhpcy5idWlsZENvc3RzRnJvbVJlc3BvbnNlKHJlc3BvbnNlLCBtZXRob2QpO1xuICAgICAgICB0aGlzLmNvc3RzU3ViamVjdC5uZXh0KGNvc3RzKTtcbiAgICB9XG5cbiAgICBidWlsZENvc3RzRnJvbVJlc3BvbnNlID0gYXN5bmMgKHJlc3BvbnNlLCBtZXRob2QpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcmVzcG9uc2U/Lm11bHRpcGxlUHJpY2VzIHx8IFtdO1xuICAgICAgICBsZXQgYnJhbmNoX2RlbGl2ZXJ5ID0gcmVzdWx0LmZpbmRJbmRleChzdWJtZXRob2QgPT4gc3VibWV0aG9kLm5hbWUgPT0gJ2JyYW5jaF9kZWxpdmVyeScpO1xuICAgICAgICBpZiAoYnJhbmNoX2RlbGl2ZXJ5ICE9IC0xKSB7XG4gICAgICAgICAgICByZXN1bHRbYnJhbmNoX2RlbGl2ZXJ5XS5jb250cmFjdHMgPSByZXN1bHRbYnJhbmNoX2RlbGl2ZXJ5XS5jb250cmFjdHMubWFwKGNvbnRyYWN0ID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgYnJhbmNoX3Byb3BlcnR5ID0gY29udHJhY3QuYnJhbmNoX3Byb3BlcnR5IHx8IHt9O1xuICAgICAgICAgICAgICAgIGxldCBhZGRyZXNzX2RhdGEgPSBicmFuY2hfcHJvcGVydHkuYWRkcmVzcyB8fCB7fTtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBjb250cmFjdDogJ2JyYW5jaF9kZWxpdmVyeScsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IGNvbnRyYWN0Lm5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHByaWNlOiBjb250cmFjdC5wcmljZSxcbiAgICAgICAgICAgICAgICAgICAgLi4uYWRkcmVzc19kYXRhLFxuICAgICAgICAgICAgICAgICAgICAuLi5icmFuY2hfcHJvcGVydHksXG4gICAgICAgICAgICAgICAgICAgIGNvbXB1dGVkOiAoYWRkcmVzc19kYXRhLnN0cmVldCB8fCAnJykgKyAnIE7CsCAnICsgKGFkZHJlc3NfZGF0YS5udW1iZXIgfHwgJycpXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZXRob2QuaW5jbHVkZXMoJ3BpY2t1cF9zdG9yZScpKSB7XG4gICAgICAgICAgICBjb25zdCBzdG9yZXMgPSBhd2FpdCB0aGlzLnN0b3Jlc1NlcnZpY2Uuc3RvcmVzLnBpcGUodGFrZSgxKSkudG9Qcm9taXNlKCk7XG4gICAgICAgICAgICBpZiAoc3RvcmVzICYmIHN0b3Jlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQuZm9yRWFjaChwaWNrdXBfc3RvcmUgPT4ge1xuICAgICAgICAgICAgICAgICAgICBwaWNrdXBfc3RvcmUuY29udHJhY3RzLmZvckVhY2goY29udHJhY3QgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudF9zdG9yZSA9IHN0b3Jlcy5maW5kKHN0b3JlID0+IHN0b3JlLmNvZGUgPT0gY29udHJhY3QubmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWN1cnJlbnRfc3RvcmUpIGNvbnRyYWN0LmRldGFpbCA9ICdTaW4gaW5mb3JtYWNpw7NuJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgY29udHJhY3QuZGV0YWlsID0gY3VycmVudF9zdG9yZS5uYW1lICsgJyAtICcgKyBjdXJyZW50X3N0b3JlLmFkZHJlc3M7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udHJhY3Q7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGdldENvc3RzRm9yTWV0aG9kID0gYXN5bmMgKG1ldGhvZCkgPT4ge1xuICAgICAgICB0aGlzLnN0YXRlU3ViamVjdC5uZXh0KHsgZG9pbmc6IHRydWUsIG9rOiBmYWxzZSwgZGF0YTogeyBtZXRob2QgfSB9KTtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5wdXRTaGlwbWVudCgpO1xuICAgICAgICByZXMgJiYgdGhpcy5jaGVja291dFNlcnZpY2UudXBkYXRlQXNvY2lhdGVkRGF0YShyZXMpO1xuICAgICAgICBjb25zdCBjb3N0cyA9IGF3YWl0IHRoaXMuZ2V0Q2FsY3VsYXRlZENvc3RzKCk7XG4gICAgICAgIGlmICghY29zdHMgfHwgIWNvc3RzLm11bHRpcGxlUHJpY2VzKSB7XG4gICAgICAgICAgICB0aGlzLmVycm9yU3ViamVjdC5uZXh0KCdvcGVyYXRpb24tZXJyb3InKTtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5idWlsZENvc3RzRnJvbVJlc3BvbnNlKGNvc3RzLCBtZXRob2QpO1xuICAgIH1cblxuICAgIHJlc3BvbnNlVG9MaXN0ID0gKHJlc3BvbnNlKSA9PlxuICAgICAgICAocmVzcG9uc2Uuc2hpcG1lbnRzICYmIHJlc3BvbnNlLnNoaXBtZW50cy5sZW5ndGggPiAwKSAmJiBPYmplY3Qua2V5cyhyZXNwb25zZS5zaGlwbWVudHNbMF0ubWV0aG9kcykubWFwKGtleSA9PiByZXNwb25zZS5zaGlwbWVudHNbMF0ubWV0aG9kc1trZXldKTtcblxuICAgIHJlc3BvbnNlVG9TaGlwcGluZ09wdGlvbnMgPSAocmVzcG9uc2UpID0+XG4gICAgICAgIChyZXNwb25zZS5zaGlwbWVudHMgJiYgcmVzcG9uc2Uuc2hpcG1lbnRzLmxlbmd0aCA+IDApICYmIE9iamVjdC5rZXlzKHJlc3BvbnNlLnNoaXBtZW50c1swXS5tZXRob2RzKS5tYXAoa2V5ID0+IHJlc3BvbnNlLnNoaXBtZW50c1swXS5tZXRob2RzW2tleV0pO1xuXG4gICAgcHJpdmF0ZSBhc3luYyBub3JtYWxpemVTaGlwcGluZ09wdGlvbnMocmVzcG9uc2UpIHtcbiAgICAgICAgY29uc3QgbGlzdCA9IHRoaXMucmVzcG9uc2VUb1NoaXBwaW5nT3B0aW9ucyhyZXNwb25zZSkgfHwgW107XG4gICAgICAgIGxldCBzdG9yZXMgPSBudWxsO1xuICAgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGxpc3QpIHtcbiAgICAgICAgICAgIGNvbnN0IG1ldGhvZENvZGUgPSBlbnRyeT8ubWV0aG9kPy5jb2RlIHx8ICcnO1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IGVudHJ5Py5vcHRpb25zIHx8IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRyYWN0cyA9IG9wdGlvbj8uY29udHJhY3RzIHx8IFtdO1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb24/Lm5hbWUgPT09ICdicmFuY2hfZGVsaXZlcnknKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbi5jb250cmFjdHMgPSBjb250cmFjdHMubWFwKGNvbnRyYWN0ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJyYW5jaCA9IGNvbnRyYWN0Py5icmFuY2hfcHJvcGVydHkgfHwge307XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhZGRyZXNzID0gYnJhbmNoLmFkZHJlc3MgfHwge307XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJlZXQgPSBhZGRyZXNzLnN0cmVldCB8fCAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG51bWJlciA9IGFkZHJlc3MubnVtYmVyIHx8ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29tcHV0ZWQgPSBbc3RyZWV0LCBudW1iZXIgPyBgTsKwICR7bnVtYmVyfWAgOiAnJ10uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyAnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uY29udHJhY3QsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uYWRkcmVzcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5icmFuY2gsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJhY3Q6IGNvbnRyYWN0Py5jb250cmFjdCB8fCBvcHRpb24ubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBjb250cmFjdD8ubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmljZTogY29udHJhY3Q/LnByaWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXB1dGVkOiBjb21wdXRlZCB8fCBjb250cmFjdC5jb21wdXRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChtZXRob2RDb2RlLmluY2x1ZGVzKCdwaWNrdXBfc3RvcmUnKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXN0b3Jlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmVzID0gYXdhaXQgdGhpcy5zdG9yZXNTZXJ2aWNlLnN0b3Jlcy5waXBlKHRha2UoMSkpLnRvUHJvbWlzZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdG9yZXMgJiYgc3RvcmVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uLmNvbnRyYWN0cyA9IGNvbnRyYWN0cy5tYXAoY29udHJhY3QgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTdG9yZSA9IHN0b3Jlcy5maW5kKHN0b3JlID0+IHN0b3JlLmNvZGUgPT0gY29udHJhY3QubmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjdXJyZW50U3RvcmUpIHJldHVybiB7IC4uLmNvbnRyYWN0LCBkZXRhaWw6ICdTaW4gaW5mb3JtYWNpw7NuJyB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IC4uLmNvbnRyYWN0LCBkZXRhaWw6IGN1cnJlbnRTdG9yZS5uYW1lICsgJyAtICcgKyBjdXJyZW50U3RvcmUuYWRkcmVzcyB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxpc3Q7XG4gICAgfVxuXG4gICAgb3RoZXJQYXJhbXNGb3JDb250cmFjdCA9IChjb250cmFjdCkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2hpcHBpbmdfbWV0aG9kX2NvbnRyYWN0OlxuICAgICAgICAgICAgICAgIGNvbnRyYWN0LnNoaXBwaW5nX21ldGhvZF9jb250cmFjdFxuICAgICAgICAgICAgICAgICAgICA/IGNvbnRyYWN0LnNoaXBwaW5nX21ldGhvZF9jb250cmFjdFxuICAgICAgICAgICAgICAgICAgICA6IGNvbnRyYWN0LmNvbnRyYWN0ICsgJ18nICsgY29udHJhY3QubmFtZSxcbiAgICAgICAgICAgIHNoaXBwaW5nX21ldGhvZF9icmFuY2hfY29kZTpcbiAgICAgICAgICAgICAgICBjb250cmFjdC5zaGlwcGluZ19tZXRob2RfYnJhbmNoX2NvZGVcbiAgICAgICAgICAgICAgICAgICAgPyBjb250cmFjdC5zaGlwcGluZ19tZXRob2RfYnJhbmNoX2NvZGVcbiAgICAgICAgICAgICAgICAgICAgOiAoY29udHJhY3QuY29udHJhY3QgJiYgY29udHJhY3QuY29udHJhY3QgPT0gXCJicmFuY2hfZGVsaXZlcnlcIikgPyBjb250cmFjdC5udW1iZXIgOiBjb250cmFjdC5uYW1lXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRCcmFuY2hPZmZpY2VzID0gKG1ldGhvZCkgPT4gdGhpcy5jb25uZWN0aW9uLmdldE91dHNpZGVyKHRoaXMudHJhbnNmb3JtZXIuZ2V0QXBpKG1ldGhvZC50b0xvd2VyQ2FzZSgpKSkudG9Qcm9taXNlKCk7XG5cbiAgICBmb3JtYXRVbm5lY2VzYXJ5RG9jdW1lbnQgPSAoZGF0YSkgPT4ge1xuICAgICAgICBpZiAoZGF0YS5zaGlwcGluZ0FkZHJlc3M/LmRvY3VtZW50TnVtYmVyPy5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgZGF0YS5zaGlwcGluZ0FkZHJlc3MuZG9jdW1lbnROdW1iZXIgPSAnMDAwMDAwMDAnXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRhdGEuc2hpcHBpbmdBZGRyZXNzPy5kb2N1bWVudFR5cGU/Lmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICBkYXRhLnNoaXBwaW5nQWRkcmVzcy5kb2N1bWVudFR5cGUgPSAnWFhYJ1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXRhLmJpbGxpbmdBZGRyZXNzICYmIGRhdGEuYmlsbGluZ0FkZHJlc3MuZG9jdW1lbnROdW1iZXI/Lmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICBkYXRhLmJpbGxpbmdBZGRyZXNzLmRvY3VtZW50TnVtYmVyID0gJzAwMDAwMDAwJ1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXRhLmJpbGxpbmdBZGRyZXNzICYmIGRhdGEuYmlsbGluZ0FkZHJlc3MuZG9jdW1lbnRUeXBlPy5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgZGF0YS5iaWxsaW5nQWRkcmVzcy5kb2N1bWVudFR5cGUgPSAnWFhYJ1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRhXG4gICAgfVxufVxuIl19
|
|
543
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hpcG1lbnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLWVhc3ljb21tZXJjZS8iLCJzb3VyY2VzIjpbImxpYi9zZXJ2aWNlcy9jaGVja291dC9zaGlwbWVudC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxlQUFlLEVBQWdDLE1BQU0sTUFBTSxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxJQUFJLEVBQVksTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDOUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRTlDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ25GLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDckQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRWxFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXhELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBR3pGO0lBQXFDLG1DQUFXO0lBaUM1Qyx5QkFBb0IsVUFBNkIsRUFBVSxXQUFvQyxFQUFVLG9CQUFpRCxFQUFVLGdCQUFrQyxFQUMxTCxNQUFpQixFQUFVLFdBQXdCLEVBQVUsYUFBNEIsRUFBVSxlQUFnQztRQUQvSSxZQUVJLGtCQUFN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QyxPQUFDLFFBQVEsMENBQUUsS0FBSyxFQUMvQyxhQUFhLEVBQUUsYUFBYSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsT0FBQyxRQUFRLDBDQUFFLGFBQWEsSUFDakY7SUFDTixDQUFDO0lBRU8seURBQStCLEdBQXZDLFVBQTJFLElBQU87UUFDOUUsSUFBTSxlQUE4QyxFQUE1QyxnQ0FBYSxFQUFFLG9DQUE2QixDQUFDO1FBQ3JELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFsUkQ7O09BRUc7SUFDVyxnQ0FBZ0IsR0FBRyxLQUFLLENBQUM7O2dCQVlQLGlCQUFpQjtnQkFBdUIsdUJBQXVCO2dCQUFnQywyQkFBMkI7Z0JBQTRCLGdCQUFnQjtnQkFDbEwsU0FBUztnQkFBdUIsV0FBVztnQkFBeUIsYUFBYTtnQkFBMkIsZUFBZTs7SUFsQ3RJLGVBQWU7UUFEM0IsVUFBVSxFQUFFO09BQ0EsZUFBZSxDQW9VM0I7SUFBRCxzQkFBQztDQUFBLEFBcFVELENBQXFDLFdBQVcsR0FvVS9DO1NBcFVZLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIG9mLCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2UsIHRhcCwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQ2FydFNlcnZpY2UgfSBmcm9tICcuLi9jYXJ0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29uc3RhbnRzIH0gZnJvbSAnLi4vLi4vY29yZS5jb25zdHMnO1xuaW1wb3J0IHsgQ2hlY2tvdXRQcm9jZXNzU3RhdGUgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2NoZWNrb3V0LXByb2Nlc3Mtc3RhdGUnO1xuaW1wb3J0IHsgU2hpcG1lbnREYXRhVHJhbnNmb3JtZXIgfSBmcm9tICcuLi8uLi91dGlscy9zaGlwbWVudC10cmFuc2Zvcm1lci5zZXJ2aWNlJztcbmltcG9ydCB7IENvbm5lY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vYXBpL2Nvbm5lY3Rpb24uc2VydmljZSc7XG5pbXBvcnQgeyBTdG9yZXNTZXJ2aWNlIH0gZnJvbSAnLi4vc3RvcmVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2hlY2tvdXRTZXJ2aWNlIH0gZnJvbSAnLi9jaGVja291dC5zZXJ2aWNlJztcbmltcG9ydCB7IFN0ZXBTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9jaGVja291dC9zdGVwLXNlcnZpY2UnO1xuaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBBbmFseXRpY3NTZXJ2aWNlIH0gZnJvbSAnLi4vYW5hbHl0aWNzLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2hpcHBpbmdPcHRpb25Db250cmFjdCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvc2hpcHBpbmctb3B0aW9uJztcbmltcG9ydCB7IFNoaXBwaW5nUHJpY2VEaXNwbGF5U2VydmljZSB9IGZyb20gJy4uLy4uL3V0aWxzL3NoaXBwaW5nLXByaWNlLWRpc3BsYXkuc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBTaGlwbWVudFNlcnZpY2UgZXh0ZW5kcyBTdGVwU2VydmljZSB7XG5cbiAgICBwcml2YXRlIHN0YXRlU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q2hlY2tvdXRQcm9jZXNzU3RhdGU+KHsgZG9pbmc6IGZhbHNlLCBvazogZmFsc2UsIGRhdGE6IG51bGwgfSk7XG4gICAgcHJpdmF0ZSBtZXRob2RzU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55PihbXSk7XG4gICAgcHJpdmF0ZSBjb3N0c1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4oW10pO1xuICAgIHByaXZhdGUgZXJyb3JTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgICBwcml2YXRlIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICAgIHB1YmxpYyBidXR0b25zRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwdWJsaWMgb3JkZXI7XG5cbiAgICBwcml2YXRlIGJhc2VBcGkgPSAoKSA9PiAnc2hvcC1hcGkvJyArIHRoaXMuY29uc3RzLmdldENoYW5uZWwoKSArICcvJyArICdjaGVja291dC8nICsgdGhpcy5jYXJ0U2VydmljZS5nZXRDYXJ0VG9rZW4oKTtcblxuICAgIHB1YmxpYyBzdGF0ZSA9IHRoaXMuc3RhdGVTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIHB1YmxpYyBtZXRob2RzID0gdGhpcy5tZXRob2RzU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICBwdWJsaWMgY29zdHMgPSB0aGlzLmNvc3RzU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICBwdWJsaWMgZXJyb3IkID0gdGhpcy5lcnJvclN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSBtb3JlSW5mb0luTWV0aG9kIHBvciBkZWZlY3RvIHN1IGVzdGFkbyBlcyBmYWxzZSwgc2kgc2UgZGVzZWEgcXVlIHZpc3VhbGljZSBpbmZvcm1hY2nDs24gYWRpY2lvbmFsIGRlIGNhZGEgbcOpdG9kbyBkZSBlbnZpw7MgYXNpZ25hciB0cnVlLlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgbW9yZUluZm9Jbk1ldGhvZCA9IGZhbHNlO1xuXG5cbiAgICBwdWJsaWMgc2hpcG1lbnRNZXRob2RzQXBpID0gKCkgPT4gdGhpcy5iYXNlQXBpKCkgKyAnL3NoaXBwaW5nJztcbiAgICBwdWJsaWMgc2hpcHBpbmdPcHRpb25zQXBpID0gKCkgPT4gdGhpcy5iYXNlQXBpKCkgKyAnL3NoaXBwaW5nLW9wdGlvbnMnO1xuICAgIHB1YmxpYyBwdXRTaGlwcGluZ09wdGlvbkFwaSA9ICgpID0+IHRoaXMuYmFzZUFwaSgpICsgJy9zaGlwcGluZy1vcHRpb24nO1xuXG4gICAgcHVibGljIHBlcnNpc3RTaGlwbWVudEFwaSA9ICgpID0+ICdzaG9wLWFwaS8nICsgdGhpcy5jb25zdHMuZ2V0Q2hhbm5lbCgpICsgJy9hbmRyZWFuaS8nICsgdGhpcy5jYXJ0U2VydmljZS5nZXRDYXJ0VG9rZW4oKSArICcvc2hpcCc7XG4gICAgcHVibGljIHB1dFNoaXBtZW50QXBpID0gKCkgPT4gdGhpcy5iYXNlQXBpKCkgKyAnL3NoaXBwaW5nLycgKyB0aGlzLnN0YXRlU3ViamVjdC5nZXRWYWx1ZSgpLmRhdGEubWV0aG9kO1xuICAgIHB1YmxpYyBwdXRDb250cmFjdEFwaSA9ICgpID0+ICdzaG9wLWFwaS8nICsgdGhpcy5jb25zdHMuZ2V0Q2hhbm5lbCgpICsgJy9jaGVja291dC8nICsgdGhpcy5jYXJ0U2VydmljZS5nZXRDYXJ0VG9rZW4oKSArICcvc2hpcHBpbmctY29udHJhY3QnO1xuICAgIHB1YmxpYyBjYWxjdWxhdGVkQ29zdHNBcGkgPSAoKSA9PiAnc2hvcC1hcGkvJyArIHRoaXMuY29uc3RzLmdldENoYW5uZWwoKSArICcvY2FydHMvJyArIHRoaXMuY2FydFNlcnZpY2UuZ2V0Q2FydFRva2VuKCkgKyAnL211bHRpcGxlLWVzdGltYXRlZC1zaGlwcGluZy1jb3N0JztcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgY29ubmVjdGlvbjogQ29ubmVjdGlvblNlcnZpY2UsIHByaXZhdGUgdHJhbnNmb3JtZXI6IFNoaXBtZW50RGF0YVRyYW5zZm9ybWVyLCBwcml2YXRlIHNoaXBwaW5nUHJpY2VEaXNwbGF5OiBTaGlwcGluZ1ByaWNlRGlzcGxheVNlcnZpY2UsIHByaXZhdGUgYW5hbHl0aWNzU2VydmljZTogQW5hbHl0aWNzU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjb25zdHM6IENvbnN0YW50cywgcHJpdmF0ZSBjYXJ0U2VydmljZTogQ2FydFNlcnZpY2UsIHByaXZhdGUgc3RvcmVzU2VydmljZTogU3RvcmVzU2VydmljZSwgcHJpdmF0ZSBjaGVja291dFNlcnZpY2U6IENoZWNrb3V0U2VydmljZSkge1xuICAgICAgICBzdXBlcihjaGVja291dFNlcnZpY2UpO1xuICAgIH1cblxuICAgIGdldFNoaXBtZW50TWV0aG9kcyA9ICgpID0+IHtcbiAgICAgICAgLy8gdGhpcy5jb25uZWN0aW9uLmdldCh0aGlzLnNoaXBtZW50TWV0aG9kc0FwaSgpKS50b1Byb21pc2UoKS50aGVuKFxuICAgICAgICAvLyAgICAgcmVzID0+IHRoaXMubWV0aG9kc1N1YmplY3QubmV4dCh0aGlzLnJlc3BvbnNlVG9MaXN0KHJlcykpXG4gICAgICAgIC8vICkuY2F0Y2goZXJyID0+IHRoaXMubWV0aG9kc1N1YmplY3QubmV4dChbXSkpXG4gICAgICAgIHRoaXMuZXJyb3JTdWJqZWN0Lm5leHQobnVsbCk7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbm5lY3Rpb24uZ2V0RXJyb3JOb3RIYW5kbGVyKHRoaXMuc2hpcG1lbnRNZXRob2RzQXBpKCkpLnRvUHJvbWlzZSgpLnRoZW4oXG4gICAgICAgICAgICByZXMgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxpc3QgPSB0aGlzLnJlc3BvbnNlVG9MaXN0KHJlcykgfHwgW107XG4gICAgICAgICAgICAgICAgdGhpcy5tZXRob2RzU3ViamVjdC5uZXh0KGxpc3QpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGxpc3Q7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yU3ViamVjdC5uZXh0KCdvcGVyYXRpb24tZXJyb3InKTtcbiAgICAgICAgICAgICAgICB0aGlzLm1ldGhvZHNTdWJqZWN0Lm5leHQoW10pXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICApLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICB0aGlzLmVycm9yU3ViamVjdC5uZXh0KCdvcGVyYXRpb24tZXJyb3InKTtcbiAgICAgICAgICAgIHRoaXMubWV0aG9kc1N1YmplY3QubmV4dChbXSlcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBnZXRTaGlwcGluZ09wdGlvbnMgPSAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmNvbnN0cy5nZXRDaGVja291dFZpZXcoKSAhPT0gJ3NpbmdsZScpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZXJyb3JTdWJqZWN0Lm5leHQobnVsbCk7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbm5lY3Rpb24uZ2V0RXJyb3JOb3RIYW5kbGVyKHRoaXMuc2hpcHBpbmdPcHRpb25zQXBpKCkpLnRvUHJvbWlzZSgpLnRoZW4oXG4gICAgICAgICAgICBhc3luYyByZXMgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxpc3QgPSBhd2FpdCB0aGlzLm5vcm1hbGl6ZVNoaXBwaW5nT3B0aW9ucyhyZXMpO1xuICAgICAgICAgICAgICAgIHRoaXMubWV0aG9kc1N1YmplY3QubmV4dChsaXN0Lm1hcChlbnRyeSA9PiBlbnRyeS5tZXRob2QpLmZpbHRlcihCb29sZWFuKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxpc3Q7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yU3ViamVjdC5uZXh0KCdvcGVyYXRpb24tZXJyb3InKTtcbiAgICAgICAgICAgICAgICB0aGlzLm1ldGhvZHNTdWJqZWN0Lm5leHQoW10pO1xuICAgICAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKS5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgdGhpcy5lcnJvclN1YmplY3QubmV4dCgnb3BlcmF0aW9uLWVycm9yJyk7XG4gICAgICAgICAgICB0aGlzLm1ldGhvZHNTdWJqZWN0Lm5leHQoW10pO1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9KVxuICAgIH1cblxuXG4gICAgc2V0TWV0aG9kID0gYXN5bmMgKG1ldGhvZCkgPT4ge1xuICAgICAgICAvLyBEZXNoYWJpbGl0YXIgdG9kb3MgbG9zIGJvdG9uZXNcbiAgICAgICAgdGhpcy5idXR0b25zRGlzYWJsZWQgPSB0cnVlO1xuXG4gICAgICAgIHRoaXMuZXJyb3JTdWJqZWN0Lm5leHQobnVsbCk7XG4gICAgICAgIHRoaXMuY29zdHNTdWJqZWN0Lm5leHQoW10pO1xuICAgICAgICB0aGlzLnN0YXRlU3ViamVjdC5uZXh0KHsgZG9pbmc6IHRydWUsIG9rOiBmYWxzZSwgZGF0YTogeyBtZXRob2QgfSB9KTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5wdXRTaGlwbWVudCgpO1xuICAgICAgICAgICAgdGhpcy5jaGVja291dFNlcnZpY2UudXBkYXRlQXNvY2lhdGVkRGF0YShyZXMpO1xuICAgICAgICAgICAgdGhpcy5vcmRlciA9IHJlcztcbiAgICAgICAgICAgIGNvbnN0IGNvc3RzID0gYXdhaXQgdGhpcy5nZXRDYWxjdWxhdGVkQ29zdHMoKTtcbiAgICAgICAgICAgIHRoaXMubW9kaWZ5Q29zdHNSZXNwb25zZShjb3N0cywgdGhpcy5nZXRVc2VyRGF0YSgpPy5zaGlwcGluZ0FkZHJlc3M/LnBvc3Rjb2RlLCBtZXRob2QpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JTdWJqZWN0Lm5leHQoJ29wZXJhdGlvbi1lcnJvcicpO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVyci5lcnJvcik7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAvLyBIYWJpbGl0YXIgdG9kb3MgbG9zIGJvdG9uZXNcbiAgICAgICAgICAgIHRoaXMuYnV0dG9uc0Rpc2FibGVkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRNZXRob2RPbmx5ID0gYXN5bmMgKG1ldGhvZCkgPT4ge1xuICAgICAgICB0aGlzLmVycm9yU3ViamVjdC5uZXh0KG51bGwpO1xuICAgICAgICB0aGlzLnN0YXRlU3ViamVjdC5uZXh0KHsgZG9pbmc6IHRydWUsIG9rOiBmYWxzZSwgZGF0YTogeyBtZXRob2QgfSB9KTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMucHV0U2hpcG1lbnQoKTtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tvdXRTZXJ2aWNlLnVwZGF0ZUFzb2NpYXRlZERhdGEocmVzKTtcbiAgICAgICAgICAgIHRoaXMub3JkZXIgPSByZXM7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgdGhpcy5lcnJvclN1YmplY3QubmV4dCgnb3BlcmF0aW9uLWVycm9yJyk7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyLmVycm9yKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldFNoaXBwaW5nT3B0aW9uID0gYXN5bmMgKFxuICAgICAgICBwYXlsb2FkOiB7IG1ldGhvZDogc3RyaW5nOyBvcHRpb246IHN0cmluZzsgY29udHJhY3Q6IHN0cmluZzsgcHJpY2U6IG51bWJlcjsgb3JpZ2luYWxQcmljZT86IG51bWJlciB8IG51bGwgfSxcbiAgICAgICAgc3RlcERhdGE6IGFueSA9IHBheWxvYWRcbiAgICApID0+IHtcbiAgICAgICAgdGhpcy5lcnJvclN1YmplY3QubmV4dChudWxsKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHNhbml0aXplZFBheWxvYWQgPSB0aGlzLnN0cmlwRnJvbnRlbmRPbmx5U2hpcHBpbmdGaWVsZHMocGF5bG9hZCk7XG4gICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmNvbm5lY3Rpb24ucHV0KHRoaXMucHV0U2hpcHBpbmdPcHRpb25BcGkoKSwgc2FuaXRpemVkUGF5bG9hZCkudG9Qcm9taXNlKCk7XG4gICAgICAgICAgICB0aGlzLmNoZWNrb3V0U2VydmljZS51cGRhdGVBc29jaWF0ZWREYXRhKHJlcyk7XG4gICAgICAgICAgICB0aGlzLm9yZGVyID0gcmVzO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2V0U3RlcFJlYWR5KHN0ZXBEYXRhLCByZXMpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JTdWJqZWN0Lm5leHQoJ29wZXJhdGlvbi1lcnJvcicpO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVyci5lcnJvcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHB1dFNoaXBtZW50ID0gKCkgPT4gdGhpcy5jb25uZWN0aW9uLnB1dCh0aGlzLnB1dFNoaXBtZW50QXBpKCksIHsgbWV0aG9kOiB0aGlzLnN0YXRlU3ViamVjdC5nZXRWYWx1ZSgpLmRhdGEubWV0aG9kIH0pLnRvUHJvbWlzZSgpO1xuXG4gICAgZ2V0Q2FsY3VsYXRlZENvc3RzID0gKCkgPT4gdGhpcy5jb25uZWN0aW9uLmdldCh0aGlzLmNhbGN1bGF0ZWRDb3N0c0FwaSgpKS50b1Byb21pc2UoKTtcblxuICAgIHNldENvbnRyYWN0ID0gYXN5bmMgKGNvbnRyYWN0OiBhbnkpID0+IHtcbiAgICAgICAgY29uc3Qgc3RlcERhdGEgPSB7IC4uLmNvbnRyYWN0LCAuLi50aGlzLm90aGVyUGFyYW1zRm9yQ29udHJhY3QoY29udHJhY3QpIH07XG4gICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLnN0cmlwRnJvbnRlbmRPbmx5U2hpcHBpbmdGaWVsZHMoc3RlcERhdGEpO1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0aW9uLnB1dCh0aGlzLnB1dENvbnRyYWN0QXBpKCksIGRhdGEpXG4gICAgICAgIC50b1Byb21pc2UoKS50aGVuKFxuICAgICAgICAgICAgb3JkZXIgPT4ge1xuICAgICAgICAgICAgICAgLy8gIHRoaXMuYW5hbHl0aWNzU2VydmljZS5jYWxsRXZlbnQoJ3NoaXBwaW5nX2luZm8nLCBvcmRlcik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2V0U3RlcFJlYWR5KHN0ZXBEYXRhLCBvcmRlcil9LFxuICAgICAgICAgICAgZXJyID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gcmVqZWN0KG5ldyBFcnJvcihlcnIuZXJyb3IpKSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgKS5jYXRjaChlcnIgPT4gY29uc29sZS5lcnJvcihlcnIpKVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbiAmJiB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIC8vIFVUSUxTXG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gcmVzcG9uc2UgRGUgYXBpIGRlIHNvbGljaXR1ZCBkZSBjb3N0b3MgcG9yIG1ldG9kbyBkZSBlbnbDrW8gc2VsZWNjaW9uYWRvXG4gICAgICogQHBhcmFtIHBvc3RfY29kZSBJbmRpY2FkbyBlbiBlbCBwYXNvIGRlIEFkZHJlc3NpbmcgKGRhdG9zIHBlcnNvbmFsZXMgeSBkZSBmYWN0dXJhY2nDs24pXG4gICAgICogQHBhcmFtIG1ldGhvZCBNZXRvZG8gZGUgZW52w61vIHNlbGVjY2lvbmFkb1xuICAgICAqL1xuICAgIG1vZGlmeUNvc3RzUmVzcG9uc2UgPSBhc3luYyAocmVzcG9uc2UsIHBvc3RfY29kZSwgbWV0aG9kKSA9PiB7XG4gICAgICAgIGlmICghcmVzcG9uc2UgfHwgIXJlc3BvbnNlLm11bHRpcGxlUHJpY2VzKSB7XG4gICAgICAgICAgICB0aGlzLmVycm9yU3ViamVjdC5uZXh0KCdvcGVyYXRpb24tZXJyb3InKTtcbiAgICAgICAgICAgIHRoaXMuY29zdHNTdWJqZWN0Lm5leHQoW10pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvc3RzID0gYXdhaXQgdGhpcy5idWlsZENvc3RzRnJvbVJlc3BvbnNlKHJlc3BvbnNlLCBtZXRob2QpO1xuICAgICAgICB0aGlzLmNvc3RzU3ViamVjdC5uZXh0KGNvc3RzKTtcbiAgICB9XG5cbiAgICBidWlsZENvc3RzRnJvbVJlc3BvbnNlID0gYXN5bmMgKHJlc3BvbnNlLCBtZXRob2QpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcmVzcG9uc2U/Lm11bHRpcGxlUHJpY2VzIHx8IFtdO1xuICAgICAgICBsZXQgYnJhbmNoX2RlbGl2ZXJ5ID0gcmVzdWx0LmZpbmRJbmRleChzdWJtZXRob2QgPT4gc3VibWV0aG9kLm5hbWUgPT0gJ2JyYW5jaF9kZWxpdmVyeScpO1xuICAgICAgICBpZiAoYnJhbmNoX2RlbGl2ZXJ5ICE9IC0xKSB7XG4gICAgICAgICAgICByZXN1bHRbYnJhbmNoX2RlbGl2ZXJ5XS5jb250cmFjdHMgPSByZXN1bHRbYnJhbmNoX2RlbGl2ZXJ5XS5jb250cmFjdHMubWFwKGNvbnRyYWN0ID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBub3JtYWxpemVkQ29udHJhY3QgPSB0aGlzLm5vcm1hbGl6ZVNoaXBwaW5nQ29udHJhY3QoY29udHJhY3QpO1xuICAgICAgICAgICAgICAgIGxldCBicmFuY2hfcHJvcGVydHkgPSBjb250cmFjdC5icmFuY2hfcHJvcGVydHkgfHwge307XG4gICAgICAgICAgICAgICAgbGV0IGFkZHJlc3NfZGF0YSA9IGJyYW5jaF9wcm9wZXJ0eS5hZGRyZXNzIHx8IHt9O1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRyYWN0OiAnYnJhbmNoX2RlbGl2ZXJ5JyxcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogbm9ybWFsaXplZENvbnRyYWN0Lm5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHByaWNlOiBub3JtYWxpemVkQ29udHJhY3QucHJpY2UsXG4gICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsUHJpY2U6IG5vcm1hbGl6ZWRDb250cmFjdC5vcmlnaW5hbFByaWNlLFxuICAgICAgICAgICAgICAgICAgICAuLi5hZGRyZXNzX2RhdGEsXG4gICAgICAgICAgICAgICAgICAgIC4uLmJyYW5jaF9wcm9wZXJ0eSxcbiAgICAgICAgICAgICAgICAgICAgY29tcHV0ZWQ6IChhZGRyZXNzX2RhdGEuc3RyZWV0IHx8ICcnKSArICcgTsKwICcgKyAoYWRkcmVzc19kYXRhLm51bWJlciB8fCAnJylcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1ldGhvZC5pbmNsdWRlcygncGlja3VwX3N0b3JlJykpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0b3JlcyA9IGF3YWl0IHRoaXMuc3RvcmVzU2VydmljZS5zdG9yZXMucGlwZSh0YWtlKDEpKS50b1Byb21pc2UoKTtcbiAgICAgICAgICAgIGlmIChzdG9yZXMgJiYgc3RvcmVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5mb3JFYWNoKHBpY2t1cF9zdG9yZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHBpY2t1cF9zdG9yZS5jb250cmFjdHMuZm9yRWFjaChjb250cmFjdCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50X3N0b3JlID0gc3RvcmVzLmZpbmQoc3RvcmUgPT4gc3RvcmUuY29kZSA9PSBjb250cmFjdC5uYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY3VycmVudF9zdG9yZSkgY29udHJhY3QuZGV0YWlsID0gJ1NpbiBpbmZvcm1hY2nDs24nO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBjb250cmFjdC5kZXRhaWwgPSBjdXJyZW50X3N0b3JlLm5hbWUgKyAnIC0gJyArIGN1cnJlbnRfc3RvcmUuYWRkcmVzcztcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250cmFjdDtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgZ2V0Q29zdHNGb3JNZXRob2QgPSBhc3luYyAobWV0aG9kKSA9PiB7XG4gICAgICAgIHRoaXMuc3RhdGVTdWJqZWN0Lm5leHQoeyBkb2luZzogdHJ1ZSwgb2s6IGZhbHNlLCBkYXRhOiB7IG1ldGhvZCB9IH0pO1xuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLnB1dFNoaXBtZW50KCk7XG4gICAgICAgIHJlcyAmJiB0aGlzLmNoZWNrb3V0U2VydmljZS51cGRhdGVBc29jaWF0ZWREYXRhKHJlcyk7XG4gICAgICAgIGNvbnN0IGNvc3RzID0gYXdhaXQgdGhpcy5nZXRDYWxjdWxhdGVkQ29zdHMoKTtcbiAgICAgICAgaWYgKCFjb3N0cyB8fCAhY29zdHMubXVsdGlwbGVQcmljZXMpIHtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JTdWJqZWN0Lm5leHQoJ29wZXJhdGlvbi1lcnJvcicpO1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmJ1aWxkQ29zdHNGcm9tUmVzcG9uc2UoY29zdHMsIG1ldGhvZCk7XG4gICAgfVxuXG4gICAgcmVzcG9uc2VUb0xpc3QgPSAocmVzcG9uc2UpID0+XG4gICAgICAgIChyZXNwb25zZS5zaGlwbWVudHMgJiYgcmVzcG9uc2Uuc2hpcG1lbnRzLmxlbmd0aCA+IDApICYmIE9iamVjdC5rZXlzKHJlc3BvbnNlLnNoaXBtZW50c1swXS5tZXRob2RzKS5tYXAoa2V5ID0+IHJlc3BvbnNlLnNoaXBtZW50c1swXS5tZXRob2RzW2tleV0pO1xuXG4gICAgcmVzcG9uc2VUb1NoaXBwaW5nT3B0aW9ucyA9IChyZXNwb25zZSkgPT5cbiAgICAgICAgKHJlc3BvbnNlLnNoaXBtZW50cyAmJiByZXNwb25zZS5zaGlwbWVudHMubGVuZ3RoID4gMCkgJiYgT2JqZWN0LmtleXMocmVzcG9uc2Uuc2hpcG1lbnRzWzBdLm1ldGhvZHMpLm1hcChrZXkgPT4gcmVzcG9uc2Uuc2hpcG1lbnRzWzBdLm1ldGhvZHNba2V5XSk7XG5cbiAgICBwcml2YXRlIGFzeW5jIG5vcm1hbGl6ZVNoaXBwaW5nT3B0aW9ucyhyZXNwb25zZSkge1xuICAgICAgICBjb25zdCBsaXN0ID0gdGhpcy5yZXNwb25zZVRvU2hpcHBpbmdPcHRpb25zKHJlc3BvbnNlKSB8fCBbXTtcbiAgICAgICAgbGV0IHN0b3JlcyA9IG51bGw7XG4gICAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgbGlzdCkge1xuICAgICAgICAgICAgY29uc3QgbWV0aG9kQ29kZSA9IGVudHJ5Py5tZXRob2Q/LmNvZGUgfHwgJyc7XG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0gZW50cnk/Lm9wdGlvbnMgfHwgW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29udHJhY3RzID0gb3B0aW9uPy5jb250cmFjdHMgfHwgW107XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbj8ubmFtZSA9PT0gJ2JyYW5jaF9kZWxpdmVyeScpIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uLmNvbnRyYWN0cyA9IGNvbnRyYWN0cy5tYXAoY29udHJhY3QgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZENvbnRyYWN0ID0gdGhpcy5ub3JtYWxpemVTaGlwcGluZ0NvbnRyYWN0KGNvbnRyYWN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJyYW5jaCA9IGNvbnRyYWN0Py5icmFuY2hfcHJvcGVydHkgfHwge307XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhZGRyZXNzID0gYnJhbmNoLmFkZHJlc3MgfHwge307XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJlZXQgPSBhZGRyZXNzLnN0cmVldCB8fCAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG51bWJlciA9IGFkZHJlc3MubnVtYmVyIHx8ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29tcHV0ZWQgPSBbc3RyZWV0LCBudW1iZXIgPyBgTsKwICR7bnVtYmVyfWAgOiAnJ10uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyAnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uY29udHJhY3QsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ubm9ybWFsaXplZENvbnRyYWN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmFkZHJlc3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uYnJhbmNoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyYWN0OiBjb250cmFjdD8uY29udHJhY3QgfHwgb3B0aW9uLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogY29udHJhY3Q/Lm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpY2U6IG5vcm1hbGl6ZWRDb250cmFjdC5wcmljZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbFByaWNlOiBub3JtYWxpemVkQ29udHJhY3Qub3JpZ2luYWxQcmljZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wdXRlZDogY29tcHV0ZWQgfHwgY29udHJhY3QuY29tcHV0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAobWV0aG9kQ29kZS5pbmNsdWRlcygncGlja3VwX3N0b3JlJykpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFzdG9yZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlcyA9IGF3YWl0IHRoaXMuc3RvcmVzU2VydmljZS5zdG9yZXMucGlwZSh0YWtlKDEpKS50b1Byb21pc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoc3RvcmVzICYmIHN0b3Jlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbi5jb250cmFjdHMgPSBjb250cmFjdHMubWFwKGNvbnRyYWN0ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50U3RvcmUgPSBzdG9yZXMuZmluZChzdG9yZSA9PiBzdG9yZS5jb2RlID09IGNvbnRyYWN0Lm5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY3VycmVudFN0b3JlKSByZXR1cm4geyAuLi5jb250cmFjdCwgZGV0YWlsOiAnU2luIGluZm9ybWFjacOzbicgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyAuLi5jb250cmFjdCwgZGV0YWlsOiBjdXJyZW50U3RvcmUubmFtZSArICcgLSAnICsgY3VycmVudFN0b3JlLmFkZHJlc3MgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsaXN0O1xuICAgIH1cblxuICAgIHByaXZhdGUgbm9ybWFsaXplU2hpcHBpbmdDb250cmFjdChjb250cmFjdDogU2hpcHBpbmdPcHRpb25Db250cmFjdCB8IGFueSk6IFNoaXBwaW5nT3B0aW9uQ29udHJhY3Qge1xuICAgICAgICBjb25zdCBwcmljZSA9IHRoaXMuc2hpcHBpbmdQcmljZURpc3BsYXkubm9ybWFsaXplUHJpY2VWYWx1ZShjb250cmFjdD8ucHJpY2UpO1xuICAgICAgICBjb25zdCBvcmlnaW5hbFByaWNlID0gdGhpcy5zaGlwcGluZ1ByaWNlRGlzcGxheS5ub3JtYWxpemVQcmljZVZhbHVlKGNvbnRyYWN0Py5vcmlnaW5hbFByaWNlKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLmNvbnRyYWN0LFxuICAgICAgICAgICAgcHJpY2U6IHByaWNlICE9PSBudWxsID8gcHJpY2UgOiBjb250cmFjdD8ucHJpY2UsXG4gICAgICAgICAgICBvcmlnaW5hbFByaWNlOiBvcmlnaW5hbFByaWNlICE9PSBudWxsID8gb3JpZ2luYWxQcmljZSA6IGNvbnRyYWN0Py5vcmlnaW5hbFByaWNlXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdHJpcEZyb250ZW5kT25seVNoaXBwaW5nRmllbGRzPFQgZXh0ZW5kcyB7IG9yaWdpbmFsUHJpY2U/OiBhbnkgfT4oZGF0YTogVCk6IE9taXQ8VCwgJ29yaWdpbmFsUHJpY2UnPiB7XG4gICAgICAgIGNvbnN0IHsgb3JpZ2luYWxQcmljZSwgLi4ucmVzdCB9ID0gZGF0YSB8fCAoe30gYXMgVCk7XG4gICAgICAgIHJldHVybiByZXN0O1xuICAgIH1cblxuICAgIG90aGVyUGFyYW1zRm9yQ29udHJhY3QgPSAoY29udHJhY3QpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHNoaXBwaW5nX21ldGhvZF9jb250cmFjdDpcbiAgICAgICAgICAgICAgICBjb250cmFjdC5zaGlwcGluZ19tZXRob2RfY29udHJhY3RcbiAgICAgICAgICAgICAgICAgICAgPyBjb250cmFjdC5zaGlwcGluZ19tZXRob2RfY29udHJhY3RcbiAgICAgICAgICAgICAgICAgICAgOiBjb250cmFjdC5jb250cmFjdCArICdfJyArIGNvbnRyYWN0Lm5hbWUsXG4gICAgICAgICAgICBzaGlwcGluZ19tZXRob2RfYnJhbmNoX2NvZGU6XG4gICAgICAgICAgICAgICAgY29udHJhY3Quc2hpcHBpbmdfbWV0aG9kX2JyYW5jaF9jb2RlXG4gICAgICAgICAgICAgICAgICAgID8gY29udHJhY3Quc2hpcHBpbmdfbWV0aG9kX2JyYW5jaF9jb2RlXG4gICAgICAgICAgICAgICAgICAgIDogKGNvbnRyYWN0LmNvbnRyYWN0ICYmIGNvbnRyYWN0LmNvbnRyYWN0ID09IFwiYnJhbmNoX2RlbGl2ZXJ5XCIpID8gY29udHJhY3QubnVtYmVyIDogY29udHJhY3QubmFtZVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0QnJhbmNoT2ZmaWNlcyA9IChtZXRob2QpID0+IHRoaXMuY29ubmVjdGlvbi5nZXRPdXRzaWRlcih0aGlzLnRyYW5zZm9ybWVyLmdldEFwaShtZXRob2QudG9Mb3dlckNhc2UoKSkpLnRvUHJvbWlzZSgpO1xuXG4gICAgZm9ybWF0VW5uZWNlc2FyeURvY3VtZW50ID0gKGRhdGEpID0+IHtcbiAgICAgICAgaWYgKGRhdGEuc2hpcHBpbmdBZGRyZXNzPy5kb2N1bWVudE51bWJlcj8ubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgIGRhdGEuc2hpcHBpbmdBZGRyZXNzLmRvY3VtZW50TnVtYmVyID0gJzAwMDAwMDAwJ1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXRhLnNoaXBwaW5nQWRkcmVzcz8uZG9jdW1lbnRUeXBlPy5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgZGF0YS5zaGlwcGluZ0FkZHJlc3MuZG9jdW1lbnRUeXBlID0gJ1hYWCdcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGF0YS5iaWxsaW5nQWRkcmVzcyAmJiBkYXRhLmJpbGxpbmdBZGRyZXNzLmRvY3VtZW50TnVtYmVyPy5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgZGF0YS5iaWxsaW5nQWRkcmVzcy5kb2N1bWVudE51bWJlciA9ICcwMDAwMDAwMCdcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGF0YS5iaWxsaW5nQWRkcmVzcyAmJiBkYXRhLmJpbGxpbmdBZGRyZXNzLmRvY3VtZW50VHlwZT8ubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgIGRhdGEuYmlsbGluZ0FkZHJlc3MuZG9jdW1lbnRUeXBlID0gJ1hYWCdcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0YVxuICAgIH1cbn1cbiJdfQ==
|