@recursyve/nestjs-data-filter 8.8.0 → 8.8.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -290,6 +290,12 @@ let FilterService = FilterService_1 = class FilterService {
|
|
|
290
290
|
if (orders.every(order => !order.direction)) {
|
|
291
291
|
return;
|
|
292
292
|
}
|
|
293
|
+
if (this.model.defaultOrderRule) {
|
|
294
|
+
const defaultOrders = Array.isArray(this.model.defaultOrderRule.order)
|
|
295
|
+
? this.model.defaultOrderRule.order
|
|
296
|
+
: [this.model.defaultOrderRule.order];
|
|
297
|
+
orders = [...defaultOrders, ...orders];
|
|
298
|
+
}
|
|
293
299
|
for (const order of orders) {
|
|
294
300
|
const rule = this.definitions[order.column];
|
|
295
301
|
const includes = rule && order_rule_1.OrderRule.validate(rule) ?
|
|
@@ -547,4 +553,4 @@ FilterService = FilterService_1 = __decorate([
|
|
|
547
553
|
], FilterService);
|
|
548
554
|
exports.FilterService = FilterService;
|
|
549
555
|
|
|
550
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9maWx0ZXIvZmlsdGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUFBLDJDQUFrRDtBQUNsRCx5Q0FVbUI7QUFHbkIsK0VBQTBFO0FBQzFFLHFFQUFpRTtBQUNqRSxzRUFBaUU7QUFDakUsZ0VBQTJEO0FBRzNELGlGQUE0RTtBQUM1RSx3REFBdUQ7QUFDdkQsK0NBQTJDO0FBQzNDLGlEQUE2QztBQUM3Qyx1Q0FPbUI7QUFDbkIsK0VBQTBFO0FBQzFFLHlEQUE0RTtBQUs1RSx5REFBMEU7QUFHMUUsSUFBYSxhQUFhLHFCQUExQixNQUFhLGFBQWE7SUFLdEIsWUFDWSxvQkFBMEMsRUFDMUMsZ0JBQWtDLEVBQ2xDLEtBQXVCLEVBQ3ZCLHFCQUE0QyxFQUM1QyxVQUE2QixFQUM3QixPQUE0QztRQUw1Qyx5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXNCO1FBQzFDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsVUFBSyxHQUFMLEtBQUssQ0FBa0I7UUFDdkIsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF1QjtRQUM1QyxlQUFVLEdBQVYsVUFBVSxDQUFtQjtRQUM3QixZQUFPLEdBQVAsT0FBTyxDQUFxQztRQUVwRCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDaEIsQ0FBQztJQUVNLE9BQU8sQ0FBSSxPQUFnQjtRQUM5QixPQUFPLElBQUksZUFBYSxDQUNwQixJQUFJLENBQUMsb0JBQW9CLEVBQ3pCLElBQUksQ0FBQyxnQkFBZ0IsRUFDckI7WUFDSSxHQUFHLElBQUksQ0FBQyxLQUFLO1lBQ2IsY0FBYyxFQUFFLE9BQU87U0FDRSxFQUM3QixJQUFJLENBQUMscUJBQXFCLEVBQzFCLElBQUksQ0FBQyxVQUFVLEVBQ2YsSUFBSSxDQUFDLE9BQU8sQ0FDZixDQUFDO0lBQ04sQ0FBQztJQUVNLEtBQUssQ0FBQyxTQUFTLENBQUMsT0FBWSxFQUFFLElBQTBCO1FBQzNELE1BQU0sTUFBTSxHQUErQixF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Q0FBQztJQUVPLHdCQUF3QixDQUFDLE1BQW9CO1FBQ2pELE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMxRyxDQUFDO0NBQ0osQ0FBQTtBQXRuQlksYUFBYTtJQUR6QixJQUFBLG1CQUFVLEdBQUU7cUNBT3lCLDZDQUFvQjtRQUN4QixvQ0FBZ0I7UUFDM0Isd0JBQVU7UUFDTSwrQ0FBcUI7UUFDaEMsdUNBQWlCO0dBVmhDLGFBQWEsQ0FzbkJ6QjtBQXRuQlksc0NBQWEiLCJmaWxlIjoibGliL2ZpbHRlci9maWx0ZXIuc2VydmljZS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIFR5cGUgfSBmcm9tIFwiQG5lc3Rqcy9jb21tb25cIjtcbmltcG9ydCB7XG4gICAgQ291bnRPcHRpb25zLFxuICAgIEZpbmRPcHRpb25zLFxuICAgIEluY2x1ZGVhYmxlLFxuICAgIEluY2x1ZGVPcHRpb25zLFxuICAgIGxpdGVyYWwsXG4gICAgT3AsXG4gICAgT3JkZXIsXG4gICAgT3JkZXJJdGVtLFxuICAgIFdoZXJlT3B0aW9uc1xufSBmcm9tIFwic2VxdWVsaXplXCI7XG5pbXBvcnQgeyBQcm9qZWN0aW9uQWxpYXMgfSBmcm9tIFwic2VxdWVsaXplL3R5cGVzL21vZGVsXCI7XG5pbXBvcnQgeyBFeHBvcnRUeXBlcywgRmlsdGVyUXVlcnlNb2RlbCwgRmlsdGVyUmVzdWx0TW9kZWwsIEZpbHRlclNlYXJjaE1vZGVsLCBPcmRlck1vZGVsIH0gZnJvbSBcIi4uL1wiO1xuaW1wb3J0IHsgQWNjZXNzQ29udHJvbEFkYXB0ZXIgfSBmcm9tIFwiLi4vYWRhcHRlcnMvYWNjZXNzLWNvbnRyb2wuYWRhcHRlclwiO1xuaW1wb3J0IHsgVHJhbnNsYXRlQWRhcHRlciB9IGZyb20gXCIuLi9hZGFwdGVycy90cmFuc2xhdGUuYWRhcHRlclwiO1xuaW1wb3J0IHsgRGF0YUZpbHRlclJlcG9zaXRvcnkgfSBmcm9tIFwiLi4vZGF0YS1maWx0ZXIucmVwb3NpdG9yeVwiO1xuaW1wb3J0IHsgRGF0YUZpbHRlclNlcnZpY2UgfSBmcm9tIFwiLi4vZGF0YS1maWx0ZXIuc2VydmljZVwiO1xuaW1wb3J0IHsgSW5jbHVkZVdoZXJlTW9kZWwgfSBmcm9tIFwiLi4vbW9kZWxzL2luY2x1ZGUubW9kZWxcIjtcbmltcG9ydCB7IERhdGFGaWx0ZXJVc2VyTW9kZWwgfSBmcm9tIFwiLi4vbW9kZWxzL3VzZXIubW9kZWxcIjtcbmltcG9ydCB7IFNlcXVlbGl6ZU1vZGVsU2Nhbm5lciB9IGZyb20gXCIuLi9zY2FubmVycy9zZXF1ZWxpemUtbW9kZWwuc2Nhbm5lclwiO1xuaW1wb3J0IHsgTSwgU2VxdWVsaXplVXRpbHMgfSBmcm9tIFwiLi4vc2VxdWVsaXplLnV0aWxzXCI7XG5pbXBvcnQgeyBCYXNlRmlsdGVyIH0gZnJvbSBcIi4vYmFzZS1maWx0ZXJcIjtcbmltcG9ydCB7IEZpbHRlclV0aWxzIH0gZnJvbSBcIi4vZmlsdGVyLnV0aWxzXCI7XG5pbXBvcnQge1xuICAgIEZpbHRlcixcbiAgICBGaWx0ZXJDb25kaXRpb24sXG4gICAgRmlsdGVyQ29uZGl0aW9uUnVsZSxcbiAgICBGaWx0ZXJEZWZpbml0aW9uLFxuICAgIFNlbGVjdEZpbHRlcixcbiAgICBTZWxlY3RGaWx0ZXJWYWx1ZVxufSBmcm9tIFwiLi9maWx0ZXJzXCI7XG5pbXBvcnQgeyBHZW9Mb2NhbGl6YXRpb25GaWx0ZXIgfSBmcm9tIFwiLi9maWx0ZXJzL2dlby1sb2NhbGl6YXRpb24uZmlsdGVyXCI7XG5pbXBvcnQgeyBHcm91cEZpbHRlciwgR3JvdXBGaWx0ZXJEZWZpbml0aW9uIH0gZnJvbSBcIi4vZmlsdGVycy9ncm91cC5maWx0ZXJcIjtcbmltcG9ydCB7IFF1ZXJ5TW9kZWwsIFF1ZXJ5UnVsZU1vZGVsIH0gZnJvbSBcIi4vbW9kZWxzXCI7XG5pbXBvcnQgeyBGaWx0ZXJDb25maWd1cmF0aW9uU2VhcmNoTW9kZWwgfSBmcm9tIFwiLi9tb2RlbHMvZmlsdGVyLWNvbmZpZ3VyYXRpb24tc2VhcmNoLm1vZGVsXCI7XG5pbXBvcnQgeyBGaWx0ZXJDb25maWd1cmF0aW9uTW9kZWwgfSBmcm9tIFwiLi9tb2RlbHMvZmlsdGVyLWNvbmZpZ3VyYXRpb24ubW9kZWxcIjtcbmltcG9ydCB7IEZpbHRlclJlc291cmNlVmFsdWVNb2RlbCB9IGZyb20gXCIuL21vZGVscy9maWx0ZXItcmVzb3VyY2UtdmFsdWUubW9kZWxcIjtcbmltcG9ydCB7IE9yZGVyUnVsZSwgT3JkZXJSdWxlRGVmaW5pdGlvbiB9IGZyb20gXCIuL29yZGVyLXJ1bGVzL29yZGVyLXJ1bGVcIjtcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEZpbHRlclNlcnZpY2U8RGF0YT4ge1xuICAgIHByaXZhdGUgZGVmaW5pdGlvbnM6IHsgW25hbWU6IHN0cmluZ106IEZpbHRlckRlZmluaXRpb24gfCBHcm91cEZpbHRlckRlZmluaXRpb24gfCBPcmRlclJ1bGVEZWZpbml0aW9uIH07XG4gICAgcHJpdmF0ZSByZXBvc2l0b3J5OiBEYXRhRmlsdGVyUmVwb3NpdG9yeTxEYXRhPjtcbiAgICBwcml2YXRlIGV4cG9ydFJlcG9zaXRvcnk6IERhdGFGaWx0ZXJSZXBvc2l0b3J5PERhdGE+O1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgYWNjZXNzQ29udHJvbEFkYXB0ZXI6IEFjY2Vzc0NvbnRyb2xBZGFwdGVyLFxuICAgICAgICBwcml2YXRlIHRyYW5zbGF0ZUFkYXB0ZXI6IFRyYW5zbGF0ZUFkYXB0ZXIsXG4gICAgICAgIHByaXZhdGUgbW9kZWw6IEJhc2VGaWx0ZXI8RGF0YT4sXG4gICAgICAgIHByaXZhdGUgc2VxdWVsaXplTW9kZWxTY2FubmVyOiBTZXF1ZWxpemVNb2RlbFNjYW5uZXIsXG4gICAgICAgIHByaXZhdGUgZGF0YUZpbHRlcjogRGF0YUZpbHRlclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgb3B0aW9ucz86IHsgZGlzYWJsZUFjY2Vzc0NvbnRyb2w/OiBib29sZWFuIH1cbiAgICApIHtcbiAgICAgICAgdGhpcy5pbml0KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGZvckRhdGE8VD4oZGF0YURlZjogVHlwZTxUPik6IEZpbHRlclNlcnZpY2U8VD4ge1xuICAgICAgICByZXR1cm4gbmV3IEZpbHRlclNlcnZpY2UoXG4gICAgICAgICAgICB0aGlzLmFjY2Vzc0NvbnRyb2xBZGFwdGVyLFxuICAgICAgICAgICAgdGhpcy50cmFuc2xhdGVBZGFwdGVyLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC4uLnRoaXMubW9kZWwsXG4gICAgICAgICAgICAgICAgZGF0YURlZmluaXRpb246IGRhdGFEZWZcbiAgICAgICAgICAgIH0gYXMgdW5rbm93biBhcyBCYXNlRmlsdGVyPFQ+LFxuICAgICAgICAgICAgdGhpcy5zZXF1ZWxpemVNb2RlbFNjYW5uZXIsXG4gICAgICAgICAgICB0aGlzLmRhdGFGaWx0ZXIsXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnNcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0Q29uZmlnKHJlcXVlc3Q6IGFueSwgdXNlcj86IERhdGFGaWx0ZXJVc2VyTW9kZWwpOiBQcm9taXNlPEZpbHRlckNvbmZpZ3VyYXRpb25Nb2RlbFtdPiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdDogRmlsdGVyQ29uZmlndXJhdGlvbk1vZGVsW10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5kZWZpbml0aW9ucykge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmRlZmluaXRpb25zLmhhc093blByb3BlcnR5KGtleSkgfHwgT3JkZXJSdWxlLnZhbGlkYXRlKHRoaXMuZGVmaW5pdGlvbnNba2V5XSBhcyBPcmRlclJ1bGVEZWZpbml0aW9uKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBjb25maWcgPSBhd2FpdCAodGhpcy5kZWZpbml0aW9uc1trZXldIGFzIEZpbHRlckRlZmluaXRpb24pLmdldENvbmZpZyhrZXksIHJlcXVlc3QsIHVzZXIpO1xuICAgICAgICAgICAgaWYgKCFjb25maWcpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgICAgICAgICAuLi5jb25maWcsXG4gICAgICAgICAgICAgICAgaWQ6IGtleSxcbiAgICAgICAgICAgICAgICBuYW1lOiBhd2FpdCB0aGlzLnRyYW5zbGF0ZUFkYXB0ZXIuZ2V0VHJhbnNsYXRpb24odXNlci5sYW5ndWFnZSwgRmlsdGVyVXRpbHMuZ2V0RmlsdGVyVHJhbnNsYXRpb25LZXkoa2V5KSlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc2VhcmNoQ29uZmlnVmFsdWVzKFxuICAgICAgICByZXF1ZXN0OiBhbnksXG4gICAgICAgIHNlYXJjaDogRmlsdGVyQ29uZmlndXJhdGlvblNlYXJjaE1vZGVsLFxuICAgICAgICB1c2VyPzogRGF0YUZpbHRlclVzZXJNb2RlbFxuICAgICk6IFByb21pc2U8U2VsZWN0RmlsdGVyVmFsdWVbXT4ge1xuICAgICAgICBpZiAoIXRoaXMuZGVmaW5pdGlvbnMuaGFzT3duUHJvcGVydHkoc2VhcmNoLmlkKSkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlsdGVyID0gdGhpcy5kZWZpbml0aW9uc1tzZWFyY2guaWRdO1xuICAgICAgICBpZiAoZmlsdGVyIGluc3RhbmNlb2YgU2VsZWN0RmlsdGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgZmlsdGVyLnZhbHVlcyh7IHZhbHVlOiBzZWFyY2gudmFsdWUsIHVzZXIsIHJlcXVlc3QgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGZpbmRSZXNvdXJjZVZhbHVlQnlJZChyZXF1ZXN0OiBhbnksIHNlYXJjaDogRmlsdGVyUmVzb3VyY2VWYWx1ZU1vZGVsLCB1c2VyPzogRGF0YUZpbHRlclVzZXJNb2RlbCk6IFByb21pc2U8U2VsZWN0RmlsdGVyVmFsdWUgfCBudWxsPiB7XG4gICAgICAgIGlmICghdGhpcy5kZWZpbml0aW9ucy5oYXNPd25Qcm9wZXJ0eShzZWFyY2guaWQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLmRlZmluaXRpb25zW3NlYXJjaC5pZF07XG4gICAgICAgIGlmIChmaWx0ZXIgaW5zdGFuY2VvZiBTZWxlY3RGaWx0ZXIgJiYgZmlsdGVyLmdldFJlc291cmNlQnlJZCkge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IGZpbHRlci5nZXRSZXNvdXJjZUJ5SWQoeyBpZDogc2VhcmNoLnJlc291cmNlSWQsIHVzZXIsIHJlcXVlc3QgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGNvdW50KHVzZXI6IERhdGFGaWx0ZXJVc2VyTW9kZWwsIG9wdGlvbnM6IEZpbHRlclF1ZXJ5TW9kZWwpOiBQcm9taXNlPG51bWJlcj47XG4gICAgcHVibGljIGFzeW5jIGNvdW50KG9wdGlvbnM6IEZpbHRlclF1ZXJ5TW9kZWwpOiBQcm9taXNlPG51bWJlcj47XG4gICAgcHVibGljIGFzeW5jIGNvdW50KC4uLmFyZ3M6IFtEYXRhRmlsdGVyVXNlck1vZGVsIHwgRmlsdGVyUXVlcnlNb2RlbCwgRmlsdGVyUXVlcnlNb2RlbD9dKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICAgICAgY29uc3QgW3VzZXJPck9wdCwgb3B0XSA9IGFyZ3M7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBvcHQgPyBvcHQgOiB1c2VyT3JPcHQgYXMgRmlsdGVyUXVlcnlNb2RlbDtcbiAgICAgICAgY29uc3QgdXNlciA9IG9wdCA/IHVzZXJPck9wdCBhcyBEYXRhRmlsdGVyVXNlck1vZGVsIDogbnVsbDtcblxuICAgICAgICBjb25zdCBjb3VudE9wdGlvbnMgPSBhd2FpdCB0aGlzLmdldEZpbmRPcHRpb25zKHRoaXMucmVwb3NpdG9yeS5tb2RlbCwgb3B0aW9ucy5xdWVyeSk7XG4gICAgICAgIHRoaXMuYWRkU2VhcmNoQ29uZGl0aW9uKG9wdGlvbnMuc2VhcmNoLCBjb3VudE9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gdXNlciA/IHRoaXMuY291bnRUb3RhbFZhbHVlcyh1c2VyLCBjb3VudE9wdGlvbnMpIDogdGhpcy5jb3VudFRvdGFsVmFsdWVzKGNvdW50T3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGZpbHRlcih1c2VyOiBEYXRhRmlsdGVyVXNlck1vZGVsLCBvcHRpb25zOiBGaWx0ZXJRdWVyeU1vZGVsKTogUHJvbWlzZTxGaWx0ZXJSZXN1bHRNb2RlbDxEYXRhPj47XG4gICAgcHVibGljIGFzeW5jIGZpbHRlcihvcHRpb25zOiBGaWx0ZXJRdWVyeU1vZGVsKTogUHJvbWlzZTxGaWx0ZXJSZXN1bHRNb2RlbDxEYXRhPj47XG4gICAgcHVibGljIGFzeW5jIGZpbHRlciguLi5hcmdzOiBbRGF0YUZpbHRlclVzZXJNb2RlbCB8IEZpbHRlclF1ZXJ5TW9kZWwsIEZpbHRlclF1ZXJ5TW9kZWw/XSk6IFByb21pc2U8RmlsdGVyUmVzdWx0TW9kZWw8RGF0YT4+IHtcbiAgICAgICAgY29uc3QgW3VzZXJPck9wdCwgb3B0XSA9IGFyZ3M7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBvcHQgPyBvcHQgOiB1c2VyT3JPcHQgYXMgRmlsdGVyUXVlcnlNb2RlbDtcbiAgICAgICAgY29uc3QgdXNlciA9IG9wdCA/IHVzZXJPck9wdCBhcyBEYXRhRmlsdGVyVXNlck1vZGVsIDogbnVsbDtcblxuICAgICAgICBvcHRpb25zLm9yZGVyID0gdGhpcy5ub3JtYWxpemVPcmRlcihvcHRpb25zLm9yZGVyKTtcblxuICAgICAgICBjb25zdCBjb3VudE9wdGlvbnMgPSBhd2FpdCB0aGlzLmdldEZpbmRPcHRpb25zKHRoaXMucmVwb3NpdG9yeS5tb2RlbCwgb3B0aW9ucy5xdWVyeSwgb3B0aW9ucy5kYXRhKTtcbiAgICAgICAgdGhpcy5hZGRTZWFyY2hDb25kaXRpb24ob3B0aW9ucy5zZWFyY2gsIGNvdW50T3B0aW9ucyk7XG4gICAgICAgIHRoaXMuYWRkT3JkZXJDb25kaXRpb24ob3B0aW9ucy5vcmRlciwgY291bnRPcHRpb25zKTtcbiAgICAgICAgdGhpcy5hZGRHcm91cE9wdGlvbihvcHRpb25zLm9yZGVyLCBjb3VudE9wdGlvbnMpO1xuXG4gICAgICAgIGNvbnN0IHRvdGFsID0gYXdhaXQgKHVzZXIgPyB0aGlzLmNvdW50VG90YWxWYWx1ZXModXNlciwgY291bnRPcHRpb25zKSA6IHRoaXMuY291bnRUb3RhbFZhbHVlcyhjb3VudE9wdGlvbnMpKTtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gYXdhaXQgKHVzZXIgPyB0aGlzLmZpbmRWYWx1ZXModXNlciwgb3B0aW9ucywgY291bnRPcHRpb25zKSA6IHRoaXMuZmluZFZhbHVlcyhvcHRpb25zLCBjb3VudE9wdGlvbnMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRvdGFsLFxuICAgICAgICAgICAgcGFnZTogb3B0aW9ucy5wYWdlLFxuICAgICAgICAgICAgdmFsdWVzXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGRvd25sb2FkRGF0YShcbiAgICAgICAgdXNlcjogRGF0YUZpbHRlclVzZXJNb2RlbCxcbiAgICAgICAgdHlwZTogRXhwb3J0VHlwZXMsXG4gICAgICAgIG9wdGlvbnM6IEZpbHRlclF1ZXJ5TW9kZWwsXG4gICAgICAgIGV4cG9ydE9wdGlvbnM/OiBvYmplY3RcbiAgICApOiBQcm9taXNlPEJ1ZmZlciB8IHN0cmluZz4ge1xuICAgICAgICBjb25zdCBmaW5kT3B0aW9ucyA9IGF3YWl0IHRoaXMuZ2V0RmluZE9wdGlvbnModGhpcy5leHBvcnRSZXBvc2l0b3J5Lm1vZGVsLCBvcHRpb25zLnF1ZXJ5KTtcblxuICAgICAgICBvcHRpb25zLm9yZGVyID0gdGhpcy5ub3JtYWxpemVPcmRlcihvcHRpb25zLm9yZGVyKTtcblxuICAgICAgICB0aGlzLmFkZFNlYXJjaENvbmRpdGlvbihvcHRpb25zLnNlYXJjaCwgZmluZE9wdGlvbnMpO1xuICAgICAgICB0aGlzLmFkZE9yZGVyQ29uZGl0aW9uKG9wdGlvbnMub3JkZXIsIGZpbmRPcHRpb25zKTtcbiAgICAgICAgZGVsZXRlIG9wdGlvbnMucGFnZTtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gYXdhaXQgKHVzZXIgPyB0aGlzLmZpbmRWYWx1ZXModXNlciwgb3B0aW9ucywgZmluZE9wdGlvbnMsIHRoaXMuZXhwb3J0UmVwb3NpdG9yeSkgOiB0aGlzLmZpbmRWYWx1ZXMob3B0aW9ucywgZmluZE9wdGlvbnMsIHRoaXMuZXhwb3J0UmVwb3NpdG9yeSkpO1xuICAgICAgICBjb25zdCBoZWFkZXJzID0gYXdhaXQgdGhpcy5tb2RlbC5nZXRFeHBvcnRlZEZpZWxkc0tleXModHlwZSk7XG4gICAgICAgIGlmIChoZWFkZXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IFByb21pc2UuYWxsKHZhbHVlcy5tYXAoKHZhbHVlKSA9PiB0aGlzLm1vZGVsLmdldEV4cG9ydGVkRmllbGRzKHZhbHVlLCB1c2VyPy5sYW5ndWFnZSA/PyBcImZyXCIsIHR5cGUpKSk7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5yZXBvc2l0b3J5LmRvd25sb2FkRGF0YShoZWFkZXJzLCBkYXRhLCB0eXBlLCB1c2VyPy5sYW5ndWFnZSA/PyBcImZyXCIsIGV4cG9ydE9wdGlvbnMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMucmVwb3NpdG9yeS5kb3dubG9hZERhdGEodmFsdWVzLCB0eXBlLCB1c2VyPy5sYW5ndWFnZSA/PyBcImZyXCIsIGV4cG9ydE9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEZpbmRPcHRpb25zKG1vZGVsOiB0eXBlb2YgTSwgcXVlcnk6IFF1ZXJ5TW9kZWwsIGRhdGE/OiBvYmplY3QpOiBQcm9taXNlPEZpbmRPcHRpb25zPiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXNldCBHZW8gbG9jYWxpemF0aW9uIGZpbHRlciBzdGF0ZVxuICAgICAgICAgKi9cbiAgICAgICAgR2VvTG9jYWxpemF0aW9uRmlsdGVyLnJlc2V0KCk7XG5cbiAgICAgICAgcXVlcnkgPSB0aGlzLmFkZERlZmF1bHRGaWx0ZXIocXVlcnkpO1xuICAgICAgICBsZXQgb3B0aW9uOiBGaW5kT3B0aW9ucyA9IHt9O1xuICAgICAgICBpZiAocXVlcnkpIHtcbiAgICAgICAgICAgIGNvbnN0IHdoZXJlQ29uZGl0aW9ucyA9IFtdO1xuICAgICAgICAgICAgY29uc3QgaGF2aW5nQ29uZGl0aW9ucyA9IFtdO1xuXG4gICAgICAgICAgICBvcHRpb24gPSB7XG4gICAgICAgICAgICAgICAgLi4ub3B0aW9uLFxuICAgICAgICAgICAgICAgIGluY2x1ZGU6IGF3YWl0IHRoaXMuZ2V0SW5jbHVkZShtb2RlbCwgcXVlcnksIGRhdGEpLFxuICAgICAgICAgICAgICAgIHdoZXJlOiBxdWVyeS5jb25kaXRpb24gPT09IFwiYW5kXCIgPyB7IFtPcC5hbmRdOiB3aGVyZUNvbmRpdGlvbnMgfSA6IHsgW09wLm9yXTogd2hlcmVDb25kaXRpb25zIH0sXG4gICAgICAgICAgICAgICAgaGF2aW5nOiBxdWVyeS5jb25kaXRpb24gPT09IFwiYW5kXCIgPyB7IFtPcC5hbmRdOiBoYXZpbmdDb25kaXRpb25zIH0gOiB7IFtPcC5vcl06IGhhdmluZ0NvbmRpdGlvbnMgfVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgcGFyYW5vaWQgPSBhd2FpdCB0aGlzLmdlbmVyYXRlV2hlcmVPcHRpb25zKHF1ZXJ5LCB3aGVyZUNvbmRpdGlvbnMpO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5nZW5lcmF0ZUhhdmluZ09wdGlvbnMocXVlcnksIGhhdmluZ0NvbmRpdGlvbnMpO1xuXG4gICAgICAgICAgICBpZiAoIXBhcmFub2lkKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9uLnBhcmFub2lkID0gcGFyYW5vaWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghaGF2aW5nQ29uZGl0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgb3B0aW9uLmhhdmluZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvcHRpb247XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0KCkge1xuICAgICAgICB0aGlzLnJlcG9zaXRvcnkgPSB0aGlzLmRhdGFGaWx0ZXIuZm9yKHRoaXMubW9kZWwuZGF0YURlZmluaXRpb24pO1xuICAgICAgICB0aGlzLmV4cG9ydFJlcG9zaXRvcnkgPSB0aGlzLmRhdGFGaWx0ZXIuZm9yKHRoaXMubW9kZWwuZXhwb3J0RGF0YURlZmluaXRpb24gPz8gdGhpcy5tb2RlbC5kYXRhRGVmaW5pdGlvbik7XG4gICAgICAgIHRoaXMubW9kZWwudHJhbnNsYXRlU2VydmljZSA9IHRoaXMudHJhbnNsYXRlQWRhcHRlcjtcblxuICAgICAgICB0aGlzLmRlZmluaXRpb25zID0ge307XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMubW9kZWwpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5tb2RlbC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAhRmlsdGVyLnZhbGlkYXRlKHRoaXMubW9kZWxba2V5XSBhcyBGaWx0ZXJEZWZpbml0aW9uKSAmJlxuICAgICAgICAgICAgICAgICFHcm91cEZpbHRlci52YWxpZGF0ZSh0aGlzLm1vZGVsW2tleV0gYXMgR3JvdXBGaWx0ZXJEZWZpbml0aW9uKSAmJlxuICAgICAgICAgICAgICAgICFPcmRlclJ1bGUudmFsaWRhdGUodGhpcy5tb2RlbFtrZXldIGFzIE9yZGVyUnVsZURlZmluaXRpb24pXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5kZWZpbml0aW9uc1trZXldID0gdGhpcy5tb2RlbFtrZXldIGFzIEZpbHRlckRlZmluaXRpb247XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGdldEluY2x1ZGUobW9kZWw6IHR5cGVvZiBNLCBxdWVyeTogUXVlcnlNb2RlbCwgZGF0YT86IG9iamVjdCk6IFByb21pc2U8SW5jbHVkZWFibGVbXT4ge1xuICAgICAgICBpZiAoIXF1ZXJ5LnJ1bGVzKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpbmNsdWRlczogSW5jbHVkZU9wdGlvbnNbXVtdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgcnVsZSBvZiBxdWVyeS5ydWxlcykge1xuICAgICAgICAgICAgY29uc3QgbSA9IHJ1bGUgYXMgUXVlcnlNb2RlbDtcbiAgICAgICAgICAgIGlmIChtLmNvbmRpdGlvbikge1xuICAgICAgICAgICAgICAgIGluY2x1ZGVzLnB1c2goYXdhaXQgdGhpcy5nZXRJbmNsdWRlKG1vZGVsLCBtLCBkYXRhKSBhcyBJbmNsdWRlT3B0aW9uc1tdKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgciA9IHJ1bGUgYXMgUXVlcnlSdWxlTW9kZWw7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZGVmaW5pdGlvbnMuaGFzT3duUHJvcGVydHkoci5pZCkpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZmlsdGVyID0gdGhpcy5kZWZpbml0aW9uc1tyLmlkXTtcbiAgICAgICAgICAgIGlmICgoZmlsdGVyIGFzIEdyb3VwRmlsdGVyRGVmaW5pdGlvbikucm9vdEZpbHRlcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGYgPSBmaWx0ZXIgYXMgR3JvdXBGaWx0ZXJEZWZpbml0aW9uO1xuICAgICAgICAgICAgICAgIGluY2x1ZGVzLnB1c2goLi4udGhpcy5nZXRGaWx0ZXJJbmNsdWRlKG1vZGVsLCBmLnJvb3RGaWx0ZXIsIGRhdGEpKTtcblxuICAgICAgICAgICAgICAgIGlmICghZi5sYXp5TG9hZGluZykge1xuICAgICAgICAgICAgICAgICAgICBpbmNsdWRlcy5wdXNoKC4uLnRoaXMuZ2V0RmlsdGVySW5jbHVkZShtb2RlbCwgZi52YWx1ZUZpbHRlciwgZGF0YSkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlRmlsZXIgPSBhd2FpdCBmLmdldFZhbHVlRmlsdGVyKHIudmFsdWVbMF0pO1xuICAgICAgICAgICAgICAgICAgICBpbmNsdWRlcy5wdXNoKC4uLnRoaXMuZ2V0RmlsdGVySW5jbHVkZShtb2RlbCwgdmFsdWVGaWxlciBhcyBGaWx0ZXJEZWZpbml0aW9uLCBkYXRhKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpbmNsdWRlcy5wdXNoKC4uLnRoaXMuZ2V0RmlsdGVySW5jbHVkZShtb2RlbCwgZmlsdGVyIGFzIEZpbHRlckRlZmluaXRpb24sIGRhdGEpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gU2VxdWVsaXplVXRpbHMucmVkdWNlSW5jbHVkZXMoaW5jbHVkZXMsIHRydWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Q29uZGl0aW9uSW5jbHVkZShtb2RlbDogdHlwZW9mIE0sIGNvbmRpdGlvbjogRmlsdGVyQ29uZGl0aW9uKTogSW5jbHVkZU9wdGlvbnNbXSB7XG4gICAgICAgIGlmICghY29uZGl0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpbmNsdWRlczogSW5jbHVkZU9wdGlvbnNbXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHJ1bGUgb2YgY29uZGl0aW9uLnJ1bGVzKSB7XG4gICAgICAgICAgICBjb25zdCBjID0gcnVsZSBhcyBGaWx0ZXJDb25kaXRpb247XG4gICAgICAgICAgICBpZiAoYy5jb25kaXRpb24pIHtcbiAgICAgICAgICAgICAgICBpbmNsdWRlcy5wdXNoKC4uLnRoaXMuZ2V0Q29uZGl0aW9uSW5jbHVkZShtb2RlbCwgY29uZGl0aW9uKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCByID0gcnVsZSBhcyBGaWx0ZXJDb25kaXRpb25SdWxlO1xuICAgICAgICAgICAgaWYgKHIucGF0aCkge1xuICAgICAgICAgICAgICAgIGluY2x1ZGVzLnB1c2goLi4udGhpcy5zZXF1ZWxpemVNb2RlbFNjYW5uZXIuZ2V0SW5jbHVkZXMobW9kZWwsIHsgcGF0aDogci5wYXRoIH0sIFtdLCB7IGluY2x1ZGU6IFtdIH0sIHRydWUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW5jbHVkZXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBnZW5lcmF0ZVdoZXJlT3B0aW9ucyhxdWVyeTogUXVlcnlNb2RlbCwgb3B0aW9uczogV2hlcmVPcHRpb25zW10pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgaWYgKCFxdWVyeS5ydWxlcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHBhcmFub2lkID0gdHJ1ZTtcbiAgICAgICAgZm9yIChjb25zdCBydWxlIG9mIHF1ZXJ5LnJ1bGVzKSB7XG4gICAgICAgICAgICBjb25zdCBjID0gcnVsZSBhcyBRdWVyeU1vZGVsO1xuICAgICAgICAgICAgaWYgKGMuY29uZGl0aW9uKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29uZGl0aW9ucyA9IFtdO1xuICAgICAgICAgICAgICAgIGNvbnN0IG9wID0gYy5jb25kaXRpb24gPT09IFwiYW5kXCIgPyBPcC5hbmQgOiBPcC5vcjtcbiAgICAgICAgICAgICAgICBjb25zdCB3aGVyZSA9IHsgW29wXTogY29uZGl0aW9ucyB9O1xuICAgICAgICAgICAgICAgIHBhcmFub2lkID0gcGFyYW5vaWQgJiYgYXdhaXQgdGhpcy5nZW5lcmF0ZVdoZXJlT3B0aW9ucyhjLCBjb25kaXRpb25zKTtcblxuICAgICAgICAgICAgICAgIGlmICh3aGVyZVtvcCBhcyBhbnldLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnB1c2god2hlcmUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCByID0gcnVsZSBhcyBRdWVyeVJ1bGVNb2RlbDtcbiAgICAgICAgICAgIGlmICghdGhpcy5kZWZpbml0aW9ucy5oYXNPd25Qcm9wZXJ0eShyLmlkKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLmRlZmluaXRpb25zW3IuaWRdIGFzIEZpbHRlckRlZmluaXRpb247XG4gICAgICAgICAgICBpZiAoIU9yZGVyUnVsZS52YWxpZGF0ZShmaWx0ZXIpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyT3B0aW9ucyA9IGF3YWl0IGZpbHRlci5nZXRXaGVyZU9wdGlvbnMocik7XG5cbiAgICAgICAgICAgICAgICBpZiAoZmlsdGVyT3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnB1c2goZmlsdGVyT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcGFyYW5vaWQgPSBmaWx0ZXIucGFyYW5vaWQgPz8gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwYXJhbm9pZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGdlbmVyYXRlSGF2aW5nT3B0aW9ucyhxdWVyeTogUXVlcnlNb2RlbCwgb3B0aW9uczogV2hlcmVPcHRpb25zW10pIHtcbiAgICAgICAgaWYgKCFxdWVyeS5ydWxlcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBydWxlIG9mIHF1ZXJ5LnJ1bGVzKSB7XG4gICAgICAgICAgICBjb25zdCBjID0gcnVsZSBhcyBRdWVyeU1vZGVsO1xuICAgICAgICAgICAgaWYgKGMuY29uZGl0aW9uKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29uZGl0aW9ucyA9IFtdO1xuICAgICAgICAgICAgICAgIGNvbnN0IG9wID0gYy5jb25kaXRpb24gPT09IFwiYW5kXCIgPyBPcC5hbmQgOiBPcC5vcjtcbiAgICAgICAgICAgICAgICBjb25zdCBoYXZpbmcgPSB7IFtvcF06IGNvbmRpdGlvbnMgfTtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmdlbmVyYXRlSGF2aW5nT3B0aW9ucyhjLCBjb25kaXRpb25zKTtcblxuICAgICAgICAgICAgICAgIGlmIChoYXZpbmdbb3AgYXMgYW55XS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5wdXNoKGhhdmluZyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHIgPSBydWxlIGFzIFF1ZXJ5UnVsZU1vZGVsO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmRlZmluaXRpb25zLmhhc093blByb3BlcnR5KHIuaWQpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGZpbHRlciA9IHRoaXMuZGVmaW5pdGlvbnNbci5pZF0gYXMgRmlsdGVyRGVmaW5pdGlvbjtcbiAgICAgICAgICAgIGlmICghT3JkZXJSdWxlLnZhbGlkYXRlKGZpbHRlcikpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJPcHRpb25zID0gYXdhaXQgZmlsdGVyLmdldEhhdmluZ09wdGlvbnMocik7XG4gICAgICAgICAgICAgICAgaWYgKGZpbHRlck9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5wdXNoKGZpbHRlck9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYWRkU2VhcmNoQ29uZGl0aW9uKHNlYXJjaDogRmlsdGVyU2VhcmNoTW9kZWwsIG9wdGlvbnM6IENvdW50T3B0aW9ucyk6IHZvaWQge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHNlYXJjaD8udmFsdWU/LnRvU3RyaW5nKCk7XG4gICAgICAgIGlmICghdmFsdWU/Lmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yZXBvc2l0b3J5LmFkZFNlYXJjaENvbmRpdGlvbihzZWFyY2gudmFsdWUsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWRkT3JkZXJDb25kaXRpb24ob3JkZXJzOiBPcmRlck1vZGVsW10sIG9wdGlvbnM6IENvdW50T3B0aW9ucyk6IHZvaWQge1xuICAgICAgICBpZiAob3JkZXJzLmV2ZXJ5KG9yZGVyID0+ICFvcmRlci5kaXJlY3Rpb24pKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IG9yZGVyIG9mIG9yZGVycykge1xuICAgICAgICAgICAgY29uc3QgcnVsZSA9IHRoaXMuZGVmaW5pdGlvbnNbb3JkZXIuY29sdW1uXSBhcyBPcmRlclJ1bGVEZWZpbml0aW9uO1xuICAgICAgICAgICAgY29uc3QgaW5jbHVkZXMgPSBydWxlICYmIE9yZGVyUnVsZS52YWxpZGF0ZShydWxlKSA/XG4gICAgICAgICAgICAgICAgdGhpcy5zZXF1ZWxpemVNb2RlbFNjYW5uZXIuZ2V0SW5jbHVkZXModGhpcy5yZXBvc2l0b3J5Lm1vZGVsLCB7IHBhdGg6IHJ1bGUucGF0aCB9LCBbXSkgOlxuICAgICAgICAgICAgICAgIHRoaXMucmVwb3NpdG9yeS5nZW5lcmF0ZU9yZGVySW5jbHVkZShvcmRlcik7XG5cbiAgICAgICAgICAgIGlmICghaW5jbHVkZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG9wdGlvbnMuaW5jbHVkZSA9IFNlcXVlbGl6ZVV0aWxzLm1lcmdlSW5jbHVkZXMoXG4gICAgICAgICAgICAgICAgb3B0aW9ucy5pbmNsdWRlIGFzIEluY2x1ZGVPcHRpb25zIHwgSW5jbHVkZU9wdGlvbnNbXSxcbiAgICAgICAgICAgICAgICBpbmNsdWRlc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG5cbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZEdyb3VwT3B0aW9uKG9yZGVyczogT3JkZXJNb2RlbFtdLCBvcHRpb25zOiBDb3VudE9wdGlvbnMpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbW9kZWwgPSB0aGlzLnJlcG9zaXRvcnkubW9kZWw7XG4gICAgICAgIG9wdGlvbnMuZ3JvdXAgPSBbYCR7bW9kZWwubmFtZX0uaWRgXTtcblxuICAgICAgICBmb3IgKGNvbnN0IG9yZGVyIG9mIG9yZGVycykge1xuICAgICAgICAgICAgY29uc3QgcnVsZSA9IHRoaXMuZGVmaW5pdGlvbnNbb3JkZXIuY29sdW1uXSBhcyBPcmRlclJ1bGVEZWZpbml0aW9uO1xuICAgICAgICAgICAgaWYgKHJ1bGUgJiYgT3JkZXJSdWxlLnZhbGlkYXRlKHJ1bGUpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnJlcG9zaXRvcnkuaGFzQ3VzdG9tQXR0cmlidXRlKG9yZGVyLmNvbHVtbikpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgdmFsdWVzID0gb3JkZXIuY29sdW1uLnNwbGl0KFwiLlwiKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbHVtbiA9IHZhbHVlcy5wb3AoKTtcbiAgICAgICAgICAgIGlmICghdmFsdWVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMuZ3JvdXAucHVzaChgJHttb2RlbC5uYW1lfS4ke1NlcXVlbGl6ZVV0aWxzLmZpbmRDb2x1bW5GaWVsZE5hbWUobW9kZWwsIGNvbHVtbil9YCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMuZ3JvdXAucHVzaCguLi50aGlzLnNlcXVlbGl6ZU1vZGVsU2Nhbm5lci5nZXRHcm91cChtb2RlbCwgb3JkZXIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgY291bnRUb3RhbFZhbHVlcyh1c2VyOiBEYXRhRmlsdGVyVXNlck1vZGVsLCBvcHRpb25zOiBGaW5kT3B0aW9ucyk6IFByb21pc2U8bnVtYmVyPjtcbiAgICBwcml2YXRlIGFzeW5jIGNvdW50VG90YWxWYWx1ZXMob3B0aW9uczogRmluZE9wdGlvbnMpOiBQcm9taXNlPG51bWJlcj47XG4gICAgcHJpdmF0ZSBhc3luYyBjb3VudFRvdGFsVmFsdWVzKC4uLmFyZ3M6IFtEYXRhRmlsdGVyVXNlck1vZGVsIHwgRmluZE9wdGlvbnMsIEZpbmRPcHRpb25zP10pOiBQcm9taXNlPG51bWJlcj4ge1xuICAgICAgICBjb25zdCBbdXNlck9yT3B0LCBvcHRdID0gYXJncztcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IG9wdCA/IG9wdCA6IHVzZXJPck9wdCBhcyBGaW5kT3B0aW9ucztcblxuICAgICAgICAvKipcbiAgICAgICAgICogVGhpcyBtZWFucyB0aGF0IGNvdW50VG90YWxWYWx1ZXMgd2FzIGNhbGxlZCB3aXRoIGEgdXNlclxuICAgICAgICAgKi9cbiAgICAgICAgaWYgKG9wdCkge1xuICAgICAgICAgICAgb3B0aW9ucy53aGVyZSA9IGF3YWl0IHRoaXMuZ2V0QWNjZXNzQ29udHJvbFdoZXJlQ29uZGl0aW9uKG9wdGlvbnMud2hlcmUsIHVzZXJPck9wdCBhcyBEYXRhRmlsdGVyVXNlck1vZGVsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLmhhdmluZykge1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMucmVwb3NpdG9yeS5tb2RlbC5maW5kQWxsKHtcbiAgICAgICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgICAgIHN1YlF1ZXJ5OiBmYWxzZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gZGF0YS5sZW5ndGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGF3YWl0IHRoaXMucmVwb3NpdG9yeS5tb2RlbC5jb3VudCh7XG4gICAgICAgICAgICAgICAgLi4ub3B0aW9uc1xuICAgICAgICAgICAgfSkgYXMgYW55O1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgZmluZFZhbHVlczxVc2VycyBleHRlbmRzIERhdGFGaWx0ZXJVc2VyTW9kZWw+KHVzZXI6IFVzZXJzLCBmaWx0ZXI6IEZpbHRlclF1ZXJ5TW9kZWwsIG9wdGlvbnM6IEZpbmRPcHRpb25zLCByZXBvc2l0b3J5PzogRGF0YUZpbHRlclJlcG9zaXRvcnk8RGF0YT4pOiBQcm9taXNlPERhdGFbXT47XG4gICAgcHJpdmF0ZSBhc3luYyBmaW5kVmFsdWVzPFVzZXJzIGV4dGVuZHMgRGF0YUZpbHRlclVzZXJNb2RlbD4oZmlsdGVyOiBGaWx0ZXJRdWVyeU1vZGVsLCBvcHRpb25zOiBGaW5kT3B0aW9ucywgcmVwb3NpdG9yeT86IERhdGFGaWx0ZXJSZXBvc2l0b3J5PERhdGE+KTogUHJvbWlzZTxEYXRhW10+O1xuICAgIHByaXZhdGUgYXN5bmMgZmluZFZhbHVlczxVc2VycyBleHRlbmRzIERhdGFGaWx0ZXJVc2VyTW9kZWw+KC4uLmFyZ3M6IFtVc2VycyB8IEZpbHRlclF1ZXJ5TW9kZWwsIEZpbHRlclF1ZXJ5TW9kZWwgfCBGaW5kT3B0aW9ucywgRmluZE9wdGlvbnMgfCBEYXRhRmlsdGVyUmVwb3NpdG9yeTxEYXRhPiwgRGF0YUZpbHRlclJlcG9zaXRvcnk8RGF0YT4/XSk6IFByb21pc2U8RGF0YVtdPiB7XG4gICAgICAgIGNvbnN0IFt1c2VyT3JPRmlsdGVyLCBmaWx0ZXJPck9wdCwgb3B0T3JSZXBvLCByZXBvXSA9IGFyZ3M7XG4gICAgICAgIGNvbnN0IG9wdE9yUmVwb0lzUmVwbyA9IG9wdE9yUmVwbyBpbnN0YW5jZW9mIERhdGFGaWx0ZXJSZXBvc2l0b3J5O1xuXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBvcHRPclJlcG8gJiYgIW9wdE9yUmVwb0lzUmVwbyA/IG9wdE9yUmVwbyA6IGZpbHRlck9yT3B0IGFzIEZpbmRPcHRpb25zO1xuICAgICAgICBjb25zdCBmaWx0ZXIgPSBvcHRPclJlcG8gJiYgIW9wdE9yUmVwb0lzUmVwbyA/IGZpbHRlck9yT3B0IGFzIEZpbHRlclF1ZXJ5TW9kZWwgOiB1c2VyT3JPRmlsdGVyIGFzIEZpbHRlclF1ZXJ5TW9kZWw7XG5cbiAgICAgICAgY29uc3QgcmVwb3NpdG9yeSA9IHJlcG8gPz8gKG9wdE9yUmVwb0lzUmVwbyA/IG9wdE9yUmVwbyA6IHRoaXMucmVwb3NpdG9yeSk7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoaXMgbWVhbnMgdGhhdCBmaW5kVmFsdWVzIHdhcyBjYWxsZWQgd2l0aCBhIHVzZXJcbiAgICAgICAgICovXG4gICAgICAgIGlmIChyZXBvKSB7XG4gICAgICAgICAgICBvcHRpb25zLndoZXJlID0gYXdhaXQgdGhpcy5nZXRBY2Nlc3NDb250cm9sV2hlcmVDb25kaXRpb24ob3B0aW9ucy53aGVyZSwgdXNlck9yT0ZpbHRlciBhcyBVc2Vycyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBvcmRlciA9IHRoaXMuZ2V0T3JkZXJPcHRpb25zKGZpbHRlci5vcmRlciBhcyBPcmRlck1vZGVsW10pO1xuXG4gICAgICAgIGNvbnN0IG5vbk5lc3RlZE9yZGVyQ29sdW1ucyA9IChmaWx0ZXIub3JkZXIgYXMgT3JkZXJNb2RlbFtdKVxuICAgICAgICAgICAgLm1hcChvcmRlciA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcnVsZSA9IHRoaXMuZGVmaW5pdGlvbnNbb3JkZXIuY29sdW1uXSBhcyBPcmRlclJ1bGVEZWZpbml0aW9uO1xuICAgICAgICAgICAgICAgIGlmICghcnVsZSB8fCAhT3JkZXJSdWxlLnZhbGlkYXRlKHJ1bGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvcmRlci5jb2x1bW47XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtydWxlLnBhdGggPz8gXCJcIiwgcnVsZS5hdHRyaWJ1dGVdLmpvaW4oXCIuXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4gJiYgIWNvbHVtbi5pbmNsdWRlcyhcIi5cIikgJiYgIXJlcG9zaXRvcnkuaGFzQ3VzdG9tQXR0cmlidXRlKGNvbHVtbikpO1xuICAgICAgICBjb25zdCBjdXN0b21BdHRyaWJ1dGVzID0gdGhpcy5nZXRPcmRlckN1c3RvbUF0dHJpYnV0ZShmaWx0ZXIub3JkZXIgYXMgT3JkZXJNb2RlbFtdLCBmaWx0ZXIuZGF0YSk7XG5cbiAgICAgICAgY29uc3QgdmFsdWVzID0gYXdhaXQgcmVwb3NpdG9yeS5tb2RlbC5maW5kQWxsKHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBhdHRyaWJ1dGVzOiBbXCJpZFwiLCAuLi5ub25OZXN0ZWRPcmRlckNvbHVtbnMsIC4uLmN1c3RvbUF0dHJpYnV0ZXNdLFxuICAgICAgICAgICAgbGltaXQ6IGZpbHRlci5wYWdlID8gZmlsdGVyLnBhZ2Uuc2l6ZSA6IG51bGwsXG4gICAgICAgICAgICBvZmZzZXQ6IGZpbHRlci5wYWdlID8gZmlsdGVyLnBhZ2UubnVtYmVyICogZmlsdGVyLnBhZ2Uuc2l6ZSArIChmaWx0ZXIucGFnZS5vZmZzZXQgPz8gMCkgOiBudWxsLFxuICAgICAgICAgICAgc3ViUXVlcnk6IGZhbHNlLFxuICAgICAgICAgICAgb3JkZXJcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgZ3JvdXAgPSBmaWx0ZXIuZ3JvdXBCeSA/IFtTZXF1ZWxpemVVdGlscy5nZXRHcm91cExpdGVyYWwocmVwb3NpdG9yeS5tb2RlbCwgZmlsdGVyLmdyb3VwQnkpXSA6IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHJlcG9zaXRvcnkuZmluZEFsbCh7XG4gICAgICAgICAgICB3aGVyZToge1xuICAgICAgICAgICAgICAgIGlkOiB2YWx1ZXMubWFwKHggPT4geC5pZClcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvcmRlcixcbiAgICAgICAgICAgIHBhcmFub2lkOiBvcHRpb25zLnBhcmFub2lkLFxuICAgICAgICAgICAgZ3JvdXBcbiAgICAgICAgfSwgZmlsdGVyLmRhdGEgPz8ge30pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgZ2V0QWNjZXNzQ29udHJvbFdoZXJlQ29uZGl0aW9uKHdoZXJlOiBXaGVyZU9wdGlvbnMsIHVzZXI6IERhdGFGaWx0ZXJVc2VyTW9kZWwpOiBQcm9taXNlPFdoZXJlT3B0aW9ucz4ge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zPy5kaXNhYmxlQWNjZXNzQ29udHJvbCkge1xuICAgICAgICAgICAgcmV0dXJuIHdoZXJlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF1c2VyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyB1c2VyIGZvdW5kXCIpO1xuICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLmFjY2Vzc0NvbnRyb2xBZGFwdGVyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBY2Nlc3NDb250cm9sIGlzbid0IGVuYWJsZSBpbiB5b3VyIHByb2plY3RcIik7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXNvdXJjZXMgPSBhd2FpdCB0aGlzLmFjY2Vzc0NvbnRyb2xBZGFwdGVyLmdldFJlc291cmNlcyh0aGlzLnJlcG9zaXRvcnkubW9kZWwsIHVzZXIpO1xuICAgICAgICBpZiAocmVzb3VyY2VzLmlkcykge1xuICAgICAgICAgICAgcmV0dXJuIFNlcXVlbGl6ZVV0aWxzLm1lcmdlV2hlcmUoeyBpZDogcmVzb3VyY2VzLmlkcyB9LCB3aGVyZSA/PyB7fSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlc291cmNlcy53aGVyZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBbT3AuYW5kXTogW1xuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZXMud2hlcmUsXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlID8/IHt9XG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB3aGVyZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdlbmVyYXRlV2hlcmVDb25kaXRpb25zKG1vZGVsOiBJbmNsdWRlV2hlcmVNb2RlbCwgZGF0YT86IG9iamVjdCk6IFdoZXJlT3B0aW9ucyB7XG4gICAgICAgIGlmICghbW9kZWwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHdoZXJlID0ge307XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIG1vZGVsKSB7XG4gICAgICAgICAgICBpZiAoIW1vZGVsLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBtb2RlbFtrZXldKGRhdGEpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgICAgIHdoZXJlW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB3aGVyZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEZpbHRlckluY2x1ZGUobW9kZWw6IHR5cGVvZiBNLCBmaWx0ZXI6IEZpbHRlckRlZmluaXRpb24sIGRhdGE/OiBvYmplY3QpOiBJbmNsdWRlT3B0aW9uc1tdW10ge1xuICAgICAgICBpZiAoIWZpbHRlci5wYXRoKSB7XG4gICAgICAgICAgICByZXR1cm4gW3RoaXMuZ2V0Q29uZGl0aW9uSW5jbHVkZShtb2RlbCwgZmlsdGVyLmNvbmRpdGlvbildO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHRoaXMuc2VxdWVsaXplTW9kZWxTY2FubmVyLmdldEluY2x1ZGVzKG1vZGVsLCB7XG4gICAgICAgICAgICAgICAgcGF0aDogZmlsdGVyLnBhdGgsXG4gICAgICAgICAgICAgICAgcGFyYW5vaWQ6IGZpbHRlci5wYXJhbm9pZCxcbiAgICAgICAgICAgICAgICB3aGVyZTogdGhpcy5nZW5lcmF0ZVdoZXJlQ29uZGl0aW9ucyhmaWx0ZXIud2hlcmUsIGRhdGEpXG4gICAgICAgICAgICB9LCBbXSwgW10sIHRydWUpLFxuICAgICAgICAgICAgdGhpcy5nZXRDb25kaXRpb25JbmNsdWRlKG1vZGVsLCBmaWx0ZXIuY29uZGl0aW9uKVxuICAgICAgICBdO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0T3JkZXJPcHRpb25zKG9yZGVyczogT3JkZXJNb2RlbCB8IE9yZGVyTW9kZWxbXSk6IE9yZGVyIHtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG9yZGVycykpIHtcbiAgICAgICAgICAgIG9yZGVycyA9IFtvcmRlcnNdO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubW9kZWwuZGVmYXVsdE9yZGVyUnVsZSkge1xuICAgICAgICAgICAgY29uc3QgZGVmYXVsdE9yZGVycyA9IEFycmF5LmlzQXJyYXkodGhpcy5tb2RlbC5kZWZhdWx0T3JkZXJSdWxlLm9yZGVyKVxuICAgICAgICAgICAgICAgID8gdGhpcy5tb2RlbC5kZWZhdWx0T3JkZXJSdWxlLm9yZGVyXG4gICAgICAgICAgICAgICAgOiBbdGhpcy5tb2RlbC5kZWZhdWx0T3JkZXJSdWxlLm9yZGVyXTtcblxuICAgICAgICAgICAgb3JkZXJzID0gWy4uLmRlZmF1bHRPcmRlcnMsIC4uLm9yZGVyc107XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBnZW5lcmF0ZWRPcmRlcjogT3JkZXIgPSBbXTtcblxuICAgICAgICBmb3IgKGNvbnN0IG9yZGVyIG9mIG9yZGVycykge1xuICAgICAgICAgICAgaWYgKCFvcmRlcj8uY29sdW1uIHx8ICFvcmRlci5kaXJlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMucmVwb3NpdG9yeS5oYXNDdXN0b21BdHRyaWJ1dGUob3JkZXIuY29sdW1uKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtbiA9IG9yZGVyLm51bGxMYXN0ID8gYC0ke29yZGVyLmNvbHVtbn1gIDogb3JkZXIuY29sdW1uO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IG9yZGVyLm51bGxMYXN0ID8gb3JkZXIuZGlyZWN0aW9uID09PSBcImFzY1wiID8gXCJkZXNjXCIgOiBcImFzY1wiIDogb3JkZXIuZGlyZWN0aW9uO1xuICAgICAgICAgICAgICAgIGdlbmVyYXRlZE9yZGVyLnB1c2goW2xpdGVyYWwoY29sdW1uKSwgZGlyZWN0aW9uLnRvVXBwZXJDYXNlKCldKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcnVsZSA9IHRoaXMuZGVmaW5pdGlvbnNbb3JkZXIuY29sdW1uXSBhcyBPcmRlclJ1bGVEZWZpbml0aW9uO1xuICAgICAgICAgICAgaWYgKCFydWxlIHx8ICFPcmRlclJ1bGUudmFsaWRhdGUocnVsZSkpIHtcbiAgICAgICAgICAgICAgICBnZW5lcmF0ZWRPcmRlci5wdXNoKHRoaXMuc2VxdWVsaXplTW9kZWxTY2FubmVyLmdldE9yZGVyKHRoaXMucmVwb3NpdG9yeS5tb2RlbCwgb3JkZXIpIGFzIE9yZGVySXRlbSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGdlbmVyYXRlZE9yZGVyLnB1c2goW3J1bGUuZ2V0T3JkZXJPcHRpb24odGhpcy5yZXBvc2l0b3J5Lm1vZGVsKSwgb3JkZXIuZGlyZWN0aW9uLnRvVXBwZXJDYXNlKCldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBnZW5lcmF0ZWRPcmRlcjtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE9yZGVyQ3VzdG9tQXR0cmlidXRlKG9yZGVyczogT3JkZXJNb2RlbCB8IE9yZGVyTW9kZWxbXSwgZGF0YT86IG9iamVjdCk6IFByb2plY3Rpb25BbGlhc1tdIHtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG9yZGVycykpIHtcbiAgICAgICAgICAgIG9yZGVycyA9IFtvcmRlcnNdO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYXR0cmlidXRlczogUHJvamVjdGlvbkFsaWFzW10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBvcmRlciBvZiBvcmRlcnMpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5yZXBvc2l0b3J5Lmhhc0N1c3RvbUF0dHJpYnV0ZShvcmRlci5jb2x1bW4pKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGN1c3RvbUF0dHJpYnV0ZSA9IHRoaXMucmVwb3NpdG9yeS5nZXRDdXN0b21BdHRyaWJ1dGUob3JkZXIuY29sdW1uKTtcbiAgICAgICAgICAgIGNvbnN0IGF0dHJpYnV0ZSA9IGN1c3RvbUF0dHJpYnV0ZS50cmFuc2Zvcm0oZGF0YSkgYXMgUHJvamVjdGlvbkFsaWFzO1xuICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZSkge1xuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMucHVzaChhdHRyaWJ1dGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhdHRyaWJ1dGVzO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWRkRGVmYXVsdEZpbHRlcihxdWVyeTogUXVlcnlNb2RlbCk6IFF1ZXJ5TW9kZWwge1xuICAgICAgICBpZiAoIXRoaXMubW9kZWwuZGVmYXVsdEZpbHRlcikge1xuICAgICAgICAgICAgcmV0dXJuIHF1ZXJ5O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubW9kZWwuZGVmYXVsdEZpbHRlci5yZXF1aXJlZCkge1xuICAgICAgICAgICAgaWYgKHF1ZXJ5Py5jb25kaXRpb24gIT09IFwiYW5kXCIpIHtcbiAgICAgICAgICAgICAgICBxdWVyeSA9IHtcbiAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uOiBcImFuZFwiLFxuICAgICAgICAgICAgICAgICAgICBydWxlczogW3F1ZXJ5XVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAocXVlcnk/LmNvbmRpdGlvbiAhPT0gXCJvclwiKSB7XG4gICAgICAgICAgICAgICAgcXVlcnkgPSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbjogXCJvclwiLFxuICAgICAgICAgICAgICAgICAgICBydWxlczogW3F1ZXJ5XVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcXVlcnkucnVsZXMucHVzaCh0aGlzLm1vZGVsLmRlZmF1bHRGaWx0ZXIuZmlsdGVyKTtcbiAgICAgICAgcmV0dXJuIHF1ZXJ5O1xuICAgIH1cblxuICAgIHByaXZhdGUgbm9ybWFsaXplT3JkZXIob3JkZXJzOiBPcmRlck1vZGVsIHwgT3JkZXJNb2RlbFtdKTogT3JkZXJNb2RlbFtdIHtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG9yZGVycykpIHtcbiAgICAgICAgICAgIG9yZGVycyA9IFtvcmRlcnNdO1xuICAgICAgICB9XG5cbiAgICAgICAgb3JkZXJzID0gb3JkZXJzPy5maWx0ZXIob3JkZXIgPT4gb3JkZXI/LmNvbHVtbik7XG5cbiAgICAgICAgaWYgKCFvcmRlcnM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgb3JkZXJzID0gW3tcbiAgICAgICAgICAgICAgICBjb2x1bW46IFwiaWRcIixcbiAgICAgICAgICAgICAgICBkaXJlY3Rpb246IFwiYXNjXCJcbiAgICAgICAgICAgIH1dO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG9yZGVycztcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE5vbk5lc3RlZE9yZGVyQ29sdW1ucyhvcmRlcnM6IE9yZGVyTW9kZWxbXSk6IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIG9yZGVycy5maWx0ZXIob3JkZXIgPT4gb3JkZXIuY29sdW1uICYmICFvcmRlci5jb2x1bW4uaW5jbHVkZXMoXCIuXCIpKS5tYXAob3JkZXIgPT4gb3JkZXIuY29sdW1uKTtcbiAgICB9XG59XG4iXX0=
|
|
556
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9maWx0ZXIvZmlsdGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUFBLDJDQUFrRDtBQUNsRCx5Q0FVbUI7QUFHbkIsK0VBQTBFO0FBQzFFLHFFQUFpRTtBQUNqRSxzRUFBaUU7QUFDakUsZ0VBQTJEO0FBRzNELGlGQUE0RTtBQUM1RSx3REFBdUQ7QUFDdkQsK0NBQTJDO0FBQzNDLGlEQUE2QztBQUM3Qyx1Q0FPbUI7QUFDbkIsK0VBQTBFO0FBQzFFLHlEQUE0RTtBQUs1RSx5REFBMEU7QUFHMUUsSUFBYSxhQUFhLHFCQUExQixNQUFhLGFBQWE7SUFLdEIsWUFDWSxvQkFBMEMsRUFDMUMsZ0JBQWtDLEVBQ2xDLEtBQXVCLEVBQ3ZCLHFCQUE0QyxFQUM1QyxVQUE2QixFQUM3QixPQUE0QztRQUw1Qyx5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXNCO1FBQzFDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsVUFBSyxHQUFMLEtBQUssQ0FBa0I7UUFDdkIsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF1QjtRQUM1QyxlQUFVLEdBQVYsVUFBVSxDQUFtQjtRQUM3QixZQUFPLEdBQVAsT0FBTyxDQUFxQztRQUVwRCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDaEIsQ0FBQztJQUVNLE9BQU8sQ0FBSSxPQUFnQjtRQUM5QixPQUFPLElBQUksZUFBYSxDQUNwQixJQUFJLENBQUMsb0JBQW9CLEVBQ3pCLElBQUksQ0FBQyxnQkFBZ0IsRUFDckI7WUFDSSxHQUFHLElBQUksQ0FBQyxLQUFLO1lBQ2IsY0FBYyxFQUFFLE9BQU87U0FDRSxFQUM3QixJQUFJLENBQUMscUJBQXFCLEVBQzFCLElBQUksQ0FBQyxVQUFVLEVBQ2YsSUFBSSxDQUFDLE9BQU8sQ0FDZixDQUFDO0lBQ04sQ0FBQztJQUVNLEtBQUssQ0FBQyxTQUFTLENBQUMsT0FBWSxFQUFFLElBQTBCO1FBQzNELE1BQU0sTUFBTSxHQUErQixF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QUFDO1NBQ3JCO1FBRUQsTUFBTSxHQUFHLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsTUFBTSxDQUFDLENBQUM7UUFFaEQsSUFBSSxDQUFDLENBQUEsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLE1BQU0sQ0FBQSxFQUFFO1lBQ2pCLE1BQU0sR0FBRyxDQUFDO29CQUNOLE1BQU0sRUFBRSxJQUFJO29CQUNaLFNBQVMsRUFBRSxLQUFLO2lCQUNuQixDQUFDLENBQUM7U0FDTjtRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7SUFFTyx3QkFBd0IsQ0FBQyxNQUFvQjtRQUNqRCxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDMUcsQ0FBQztDQUNKLENBQUE7QUE5bkJZLGFBQWE7SUFEekIsSUFBQSxtQkFBVSxHQUFFO3FDQU95Qiw2Q0FBb0I7UUFDeEIsb0NBQWdCO1FBQzNCLHdCQUFVO1FBQ00sK0NBQXFCO1FBQ2hDLHVDQUFpQjtHQVZoQyxhQUFhLENBOG5CekI7QUE5bkJZLHNDQUFhIiwiZmlsZSI6ImxpYi9maWx0ZXIvZmlsdGVyLnNlcnZpY2UuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBUeXBlIH0gZnJvbSBcIkBuZXN0anMvY29tbW9uXCI7XG5pbXBvcnQge1xuICAgIENvdW50T3B0aW9ucyxcbiAgICBGaW5kT3B0aW9ucyxcbiAgICBJbmNsdWRlYWJsZSxcbiAgICBJbmNsdWRlT3B0aW9ucyxcbiAgICBsaXRlcmFsLFxuICAgIE9wLFxuICAgIE9yZGVyLFxuICAgIE9yZGVySXRlbSxcbiAgICBXaGVyZU9wdGlvbnNcbn0gZnJvbSBcInNlcXVlbGl6ZVwiO1xuaW1wb3J0IHsgUHJvamVjdGlvbkFsaWFzIH0gZnJvbSBcInNlcXVlbGl6ZS90eXBlcy9tb2RlbFwiO1xuaW1wb3J0IHsgRXhwb3J0VHlwZXMsIEZpbHRlclF1ZXJ5TW9kZWwsIEZpbHRlclJlc3VsdE1vZGVsLCBGaWx0ZXJTZWFyY2hNb2RlbCwgT3JkZXJNb2RlbCB9IGZyb20gXCIuLi9cIjtcbmltcG9ydCB7IEFjY2Vzc0NvbnRyb2xBZGFwdGVyIH0gZnJvbSBcIi4uL2FkYXB0ZXJzL2FjY2Vzcy1jb250cm9sLmFkYXB0ZXJcIjtcbmltcG9ydCB7IFRyYW5zbGF0ZUFkYXB0ZXIgfSBmcm9tIFwiLi4vYWRhcHRlcnMvdHJhbnNsYXRlLmFkYXB0ZXJcIjtcbmltcG9ydCB7IERhdGFGaWx0ZXJSZXBvc2l0b3J5IH0gZnJvbSBcIi4uL2RhdGEtZmlsdGVyLnJlcG9zaXRvcnlcIjtcbmltcG9ydCB7IERhdGFGaWx0ZXJTZXJ2aWNlIH0gZnJvbSBcIi4uL2RhdGEtZmlsdGVyLnNlcnZpY2VcIjtcbmltcG9ydCB7IEluY2x1ZGVXaGVyZU1vZGVsIH0gZnJvbSBcIi4uL21vZGVscy9pbmNsdWRlLm1vZGVsXCI7XG5pbXBvcnQgeyBEYXRhRmlsdGVyVXNlck1vZGVsIH0gZnJvbSBcIi4uL21vZGVscy91c2VyLm1vZGVsXCI7XG5pbXBvcnQgeyBTZXF1ZWxpemVNb2RlbFNjYW5uZXIgfSBmcm9tIFwiLi4vc2Nhbm5lcnMvc2VxdWVsaXplLW1vZGVsLnNjYW5uZXJcIjtcbmltcG9ydCB7IE0sIFNlcXVlbGl6ZVV0aWxzIH0gZnJvbSBcIi4uL3NlcXVlbGl6ZS51dGlsc1wiO1xuaW1wb3J0IHsgQmFzZUZpbHRlciB9IGZyb20gXCIuL2Jhc2UtZmlsdGVyXCI7XG5pbXBvcnQgeyBGaWx0ZXJVdGlscyB9IGZyb20gXCIuL2ZpbHRlci51dGlsc1wiO1xuaW1wb3J0IHtcbiAgICBGaWx0ZXIsXG4gICAgRmlsdGVyQ29uZGl0aW9uLFxuICAgIEZpbHRlckNvbmRpdGlvblJ1bGUsXG4gICAgRmlsdGVyRGVmaW5pdGlvbixcbiAgICBTZWxlY3RGaWx0ZXIsXG4gICAgU2VsZWN0RmlsdGVyVmFsdWVcbn0gZnJvbSBcIi4vZmlsdGVyc1wiO1xuaW1wb3J0IHsgR2VvTG9jYWxpemF0aW9uRmlsdGVyIH0gZnJvbSBcIi4vZmlsdGVycy9nZW8tbG9jYWxpemF0aW9uLmZpbHRlclwiO1xuaW1wb3J0IHsgR3JvdXBGaWx0ZXIsIEdyb3VwRmlsdGVyRGVmaW5pdGlvbiB9IGZyb20gXCIuL2ZpbHRlcnMvZ3JvdXAuZmlsdGVyXCI7XG5pbXBvcnQgeyBRdWVyeU1vZGVsLCBRdWVyeVJ1bGVNb2RlbCB9IGZyb20gXCIuL21vZGVsc1wiO1xuaW1wb3J0IHsgRmlsdGVyQ29uZmlndXJhdGlvblNlYXJjaE1vZGVsIH0gZnJvbSBcIi4vbW9kZWxzL2ZpbHRlci1jb25maWd1cmF0aW9uLXNlYXJjaC5tb2RlbFwiO1xuaW1wb3J0IHsgRmlsdGVyQ29uZmlndXJhdGlvbk1vZGVsIH0gZnJvbSBcIi4vbW9kZWxzL2ZpbHRlci1jb25maWd1cmF0aW9uLm1vZGVsXCI7XG5pbXBvcnQgeyBGaWx0ZXJSZXNvdXJjZVZhbHVlTW9kZWwgfSBmcm9tIFwiLi9tb2RlbHMvZmlsdGVyLXJlc291cmNlLXZhbHVlLm1vZGVsXCI7XG5pbXBvcnQgeyBPcmRlclJ1bGUsIE9yZGVyUnVsZURlZmluaXRpb24gfSBmcm9tIFwiLi9vcmRlci1ydWxlcy9vcmRlci1ydWxlXCI7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBGaWx0ZXJTZXJ2aWNlPERhdGE+IHtcbiAgICBwcml2YXRlIGRlZmluaXRpb25zOiB7IFtuYW1lOiBzdHJpbmddOiBGaWx0ZXJEZWZpbml0aW9uIHwgR3JvdXBGaWx0ZXJEZWZpbml0aW9uIHwgT3JkZXJSdWxlRGVmaW5pdGlvbiB9O1xuICAgIHByaXZhdGUgcmVwb3NpdG9yeTogRGF0YUZpbHRlclJlcG9zaXRvcnk8RGF0YT47XG4gICAgcHJpdmF0ZSBleHBvcnRSZXBvc2l0b3J5OiBEYXRhRmlsdGVyUmVwb3NpdG9yeTxEYXRhPjtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGFjY2Vzc0NvbnRyb2xBZGFwdGVyOiBBY2Nlc3NDb250cm9sQWRhcHRlcixcbiAgICAgICAgcHJpdmF0ZSB0cmFuc2xhdGVBZGFwdGVyOiBUcmFuc2xhdGVBZGFwdGVyLFxuICAgICAgICBwcml2YXRlIG1vZGVsOiBCYXNlRmlsdGVyPERhdGE+LFxuICAgICAgICBwcml2YXRlIHNlcXVlbGl6ZU1vZGVsU2Nhbm5lcjogU2VxdWVsaXplTW9kZWxTY2FubmVyLFxuICAgICAgICBwcml2YXRlIGRhdGFGaWx0ZXI6IERhdGFGaWx0ZXJTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIG9wdGlvbnM/OiB7IGRpc2FibGVBY2Nlc3NDb250cm9sPzogYm9vbGVhbiB9XG4gICAgKSB7XG4gICAgICAgIHRoaXMuaW5pdCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBmb3JEYXRhPFQ+KGRhdGFEZWY6IFR5cGU8VD4pOiBGaWx0ZXJTZXJ2aWNlPFQ+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBGaWx0ZXJTZXJ2aWNlKFxuICAgICAgICAgICAgdGhpcy5hY2Nlc3NDb250cm9sQWRhcHRlcixcbiAgICAgICAgICAgIHRoaXMudHJhbnNsYXRlQWRhcHRlcixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLm1vZGVsLFxuICAgICAgICAgICAgICAgIGRhdGFEZWZpbml0aW9uOiBkYXRhRGVmXG4gICAgICAgICAgICB9IGFzIHVua25vd24gYXMgQmFzZUZpbHRlcjxUPixcbiAgICAgICAgICAgIHRoaXMuc2VxdWVsaXplTW9kZWxTY2FubmVyLFxuICAgICAgICAgICAgdGhpcy5kYXRhRmlsdGVyLFxuICAgICAgICAgICAgdGhpcy5vcHRpb25zXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldENvbmZpZyhyZXF1ZXN0OiBhbnksIHVzZXI/OiBEYXRhRmlsdGVyVXNlck1vZGVsKTogUHJvbWlzZTxGaWx0ZXJDb25maWd1cmF0aW9uTW9kZWxbXT4ge1xuICAgICAgICBjb25zdCByZXN1bHQ6IEZpbHRlckNvbmZpZ3VyYXRpb25Nb2RlbFtdID0gW107XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMuZGVmaW5pdGlvbnMpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5kZWZpbml0aW9ucy5oYXNPd25Qcm9wZXJ0eShrZXkpIHx8IE9yZGVyUnVsZS52YWxpZGF0ZSh0aGlzLmRlZmluaXRpb25zW2tleV0gYXMgT3JkZXJSdWxlRGVmaW5pdGlvbikpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgY29uZmlnID0gYXdhaXQgKHRoaXMuZGVmaW5pdGlvbnNba2V5XSBhcyBGaWx0ZXJEZWZpbml0aW9uKS5nZXRDb25maWcoa2V5LCByZXF1ZXN0LCB1c2VyKTtcbiAgICAgICAgICAgIGlmICghY29uZmlnKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgICAgICAgICAgLi4uY29uZmlnLFxuICAgICAgICAgICAgICAgIGlkOiBrZXksXG4gICAgICAgICAgICAgICAgbmFtZTogYXdhaXQgdGhpcy50cmFuc2xhdGVBZGFwdGVyLmdldFRyYW5zbGF0aW9uKHVzZXIubGFuZ3VhZ2UsIEZpbHRlclV0aWxzLmdldEZpbHRlclRyYW5zbGF0aW9uS2V5KGtleSkpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHNlYXJjaENvbmZpZ1ZhbHVlcyhcbiAgICAgICAgcmVxdWVzdDogYW55LFxuICAgICAgICBzZWFyY2g6IEZpbHRlckNvbmZpZ3VyYXRpb25TZWFyY2hNb2RlbCxcbiAgICAgICAgdXNlcj86IERhdGFGaWx0ZXJVc2VyTW9kZWxcbiAgICApOiBQcm9taXNlPFNlbGVjdEZpbHRlclZhbHVlW10+IHtcbiAgICAgICAgaWYgKCF0aGlzLmRlZmluaXRpb25zLmhhc093blByb3BlcnR5KHNlYXJjaC5pZCkpIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpbHRlciA9IHRoaXMuZGVmaW5pdGlvbnNbc2VhcmNoLmlkXTtcbiAgICAgICAgaWYgKGZpbHRlciBpbnN0YW5jZW9mIFNlbGVjdEZpbHRlcikge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IGZpbHRlci52YWx1ZXMoeyB2YWx1ZTogc2VhcmNoLnZhbHVlLCB1c2VyLCByZXF1ZXN0IH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBmaW5kUmVzb3VyY2VWYWx1ZUJ5SWQocmVxdWVzdDogYW55LCBzZWFyY2g6IEZpbHRlclJlc291cmNlVmFsdWVNb2RlbCwgdXNlcj86IERhdGFGaWx0ZXJVc2VyTW9kZWwpOiBQcm9taXNlPFNlbGVjdEZpbHRlclZhbHVlIHwgbnVsbD4ge1xuICAgICAgICBpZiAoIXRoaXMuZGVmaW5pdGlvbnMuaGFzT3duUHJvcGVydHkoc2VhcmNoLmlkKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlsdGVyID0gdGhpcy5kZWZpbml0aW9uc1tzZWFyY2guaWRdO1xuICAgICAgICBpZiAoZmlsdGVyIGluc3RhbmNlb2YgU2VsZWN0RmlsdGVyICYmIGZpbHRlci5nZXRSZXNvdXJjZUJ5SWQpIHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCBmaWx0ZXIuZ2V0UmVzb3VyY2VCeUlkKHsgaWQ6IHNlYXJjaC5yZXNvdXJjZUlkLCB1c2VyLCByZXF1ZXN0IH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjb3VudCh1c2VyOiBEYXRhRmlsdGVyVXNlck1vZGVsLCBvcHRpb25zOiBGaWx0ZXJRdWVyeU1vZGVsKTogUHJvbWlzZTxudW1iZXI+O1xuICAgIHB1YmxpYyBhc3luYyBjb3VudChvcHRpb25zOiBGaWx0ZXJRdWVyeU1vZGVsKTogUHJvbWlzZTxudW1iZXI+O1xuICAgIHB1YmxpYyBhc3luYyBjb3VudCguLi5hcmdzOiBbRGF0YUZpbHRlclVzZXJNb2RlbCB8IEZpbHRlclF1ZXJ5TW9kZWwsIEZpbHRlclF1ZXJ5TW9kZWw/XSk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgICAgIGNvbnN0IFt1c2VyT3JPcHQsIG9wdF0gPSBhcmdzO1xuICAgICAgICBjb25zdCBvcHRpb25zID0gb3B0ID8gb3B0IDogdXNlck9yT3B0IGFzIEZpbHRlclF1ZXJ5TW9kZWw7XG4gICAgICAgIGNvbnN0IHVzZXIgPSBvcHQgPyB1c2VyT3JPcHQgYXMgRGF0YUZpbHRlclVzZXJNb2RlbCA6IG51bGw7XG5cbiAgICAgICAgY29uc3QgY291bnRPcHRpb25zID0gYXdhaXQgdGhpcy5nZXRGaW5kT3B0aW9ucyh0aGlzLnJlcG9zaXRvcnkubW9kZWwsIG9wdGlvbnMucXVlcnkpO1xuICAgICAgICB0aGlzLmFkZFNlYXJjaENvbmRpdGlvbihvcHRpb25zLnNlYXJjaCwgY291bnRPcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIHVzZXIgPyB0aGlzLmNvdW50VG90YWxWYWx1ZXModXNlciwgY291bnRPcHRpb25zKSA6IHRoaXMuY291bnRUb3RhbFZhbHVlcyhjb3VudE9wdGlvbnMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBmaWx0ZXIodXNlcjogRGF0YUZpbHRlclVzZXJNb2RlbCwgb3B0aW9uczogRmlsdGVyUXVlcnlNb2RlbCk6IFByb21pc2U8RmlsdGVyUmVzdWx0TW9kZWw8RGF0YT4+O1xuICAgIHB1YmxpYyBhc3luYyBmaWx0ZXIob3B0aW9uczogRmlsdGVyUXVlcnlNb2RlbCk6IFByb21pc2U8RmlsdGVyUmVzdWx0TW9kZWw8RGF0YT4+O1xuICAgIHB1YmxpYyBhc3luYyBmaWx0ZXIoLi4uYXJnczogW0RhdGFGaWx0ZXJVc2VyTW9kZWwgfCBGaWx0ZXJRdWVyeU1vZGVsLCBGaWx0ZXJRdWVyeU1vZGVsP10pOiBQcm9taXNlPEZpbHRlclJlc3VsdE1vZGVsPERhdGE+PiB7XG4gICAgICAgIGNvbnN0IFt1c2VyT3JPcHQsIG9wdF0gPSBhcmdzO1xuICAgICAgICBjb25zdCBvcHRpb25zID0gb3B0ID8gb3B0IDogdXNlck9yT3B0IGFzIEZpbHRlclF1ZXJ5TW9kZWw7XG4gICAgICAgIGNvbnN0IHVzZXIgPSBvcHQgPyB1c2VyT3JPcHQgYXMgRGF0YUZpbHRlclVzZXJNb2RlbCA6IG51bGw7XG5cbiAgICAgICAgb3B0aW9ucy5vcmRlciA9IHRoaXMubm9ybWFsaXplT3JkZXIob3B0aW9ucy5vcmRlcik7XG5cbiAgICAgICAgY29uc3QgY291bnRPcHRpb25zID0gYXdhaXQgdGhpcy5nZXRGaW5kT3B0aW9ucyh0aGlzLnJlcG9zaXRvcnkubW9kZWwsIG9wdGlvbnMucXVlcnksIG9wdGlvbnMuZGF0YSk7XG4gICAgICAgIHRoaXMuYWRkU2VhcmNoQ29uZGl0aW9uKG9wdGlvbnMuc2VhcmNoLCBjb3VudE9wdGlvbnMpO1xuICAgICAgICB0aGlzLmFkZE9yZGVyQ29uZGl0aW9uKG9wdGlvbnMub3JkZXIsIGNvdW50T3B0aW9ucyk7XG4gICAgICAgIHRoaXMuYWRkR3JvdXBPcHRpb24ob3B0aW9ucy5vcmRlciwgY291bnRPcHRpb25zKTtcblxuICAgICAgICBjb25zdCB0b3RhbCA9IGF3YWl0ICh1c2VyID8gdGhpcy5jb3VudFRvdGFsVmFsdWVzKHVzZXIsIGNvdW50T3B0aW9ucykgOiB0aGlzLmNvdW50VG90YWxWYWx1ZXMoY291bnRPcHRpb25zKSk7XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IGF3YWl0ICh1c2VyID8gdGhpcy5maW5kVmFsdWVzKHVzZXIsIG9wdGlvbnMsIGNvdW50T3B0aW9ucykgOiB0aGlzLmZpbmRWYWx1ZXMob3B0aW9ucywgY291bnRPcHRpb25zKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0b3RhbCxcbiAgICAgICAgICAgIHBhZ2U6IG9wdGlvbnMucGFnZSxcbiAgICAgICAgICAgIHZhbHVlc1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBkb3dubG9hZERhdGEoXG4gICAgICAgIHVzZXI6IERhdGFGaWx0ZXJVc2VyTW9kZWwsXG4gICAgICAgIHR5cGU6IEV4cG9ydFR5cGVzLFxuICAgICAgICBvcHRpb25zOiBGaWx0ZXJRdWVyeU1vZGVsLFxuICAgICAgICBleHBvcnRPcHRpb25zPzogb2JqZWN0XG4gICAgKTogUHJvbWlzZTxCdWZmZXIgfCBzdHJpbmc+IHtcbiAgICAgICAgY29uc3QgZmluZE9wdGlvbnMgPSBhd2FpdCB0aGlzLmdldEZpbmRPcHRpb25zKHRoaXMuZXhwb3J0UmVwb3NpdG9yeS5tb2RlbCwgb3B0aW9ucy5xdWVyeSk7XG5cbiAgICAgICAgb3B0aW9ucy5vcmRlciA9IHRoaXMubm9ybWFsaXplT3JkZXIob3B0aW9ucy5vcmRlcik7XG5cbiAgICAgICAgdGhpcy5hZGRTZWFyY2hDb25kaXRpb24ob3B0aW9ucy5zZWFyY2gsIGZpbmRPcHRpb25zKTtcbiAgICAgICAgdGhpcy5hZGRPcmRlckNvbmRpdGlvbihvcHRpb25zLm9yZGVyLCBmaW5kT3B0aW9ucyk7XG4gICAgICAgIGRlbGV0ZSBvcHRpb25zLnBhZ2U7XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IGF3YWl0ICh1c2VyID8gdGhpcy5maW5kVmFsdWVzKHVzZXIsIG9wdGlvbnMsIGZpbmRPcHRpb25zLCB0aGlzLmV4cG9ydFJlcG9zaXRvcnkpIDogdGhpcy5maW5kVmFsdWVzKG9wdGlvbnMsIGZpbmRPcHRpb25zLCB0aGlzLmV4cG9ydFJlcG9zaXRvcnkpKTtcbiAgICAgICAgY29uc3QgaGVhZGVycyA9IGF3YWl0IHRoaXMubW9kZWwuZ2V0RXhwb3J0ZWRGaWVsZHNLZXlzKHR5cGUpO1xuICAgICAgICBpZiAoaGVhZGVycy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBQcm9taXNlLmFsbCh2YWx1ZXMubWFwKCh2YWx1ZSkgPT4gdGhpcy5tb2RlbC5nZXRFeHBvcnRlZEZpZWxkcyh2YWx1ZSwgdXNlcj8ubGFuZ3VhZ2UgPz8gXCJmclwiLCB0eXBlKSkpO1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMucmVwb3NpdG9yeS5kb3dubG9hZERhdGEoaGVhZGVycywgZGF0YSwgdHlwZSwgdXNlcj8ubGFuZ3VhZ2UgPz8gXCJmclwiLCBleHBvcnRPcHRpb25zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnJlcG9zaXRvcnkuZG93bmxvYWREYXRhKHZhbHVlcywgdHlwZSwgdXNlcj8ubGFuZ3VhZ2UgPz8gXCJmclwiLCBleHBvcnRPcHRpb25zKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRGaW5kT3B0aW9ucyhtb2RlbDogdHlwZW9mIE0sIHF1ZXJ5OiBRdWVyeU1vZGVsLCBkYXRhPzogb2JqZWN0KTogUHJvbWlzZTxGaW5kT3B0aW9ucz4ge1xuICAgICAgICAvKipcbiAgICAgICAgICogUmVzZXQgR2VvIGxvY2FsaXphdGlvbiBmaWx0ZXIgc3RhdGVcbiAgICAgICAgICovXG4gICAgICAgIEdlb0xvY2FsaXphdGlvbkZpbHRlci5yZXNldCgpO1xuXG4gICAgICAgIHF1ZXJ5ID0gdGhpcy5hZGREZWZhdWx0RmlsdGVyKHF1ZXJ5KTtcbiAgICAgICAgbGV0IG9wdGlvbjogRmluZE9wdGlvbnMgPSB7fTtcbiAgICAgICAgaWYgKHF1ZXJ5KSB7XG4gICAgICAgICAgICBjb25zdCB3aGVyZUNvbmRpdGlvbnMgPSBbXTtcbiAgICAgICAgICAgIGNvbnN0IGhhdmluZ0NvbmRpdGlvbnMgPSBbXTtcblxuICAgICAgICAgICAgb3B0aW9uID0ge1xuICAgICAgICAgICAgICAgIC4uLm9wdGlvbixcbiAgICAgICAgICAgICAgICBpbmNsdWRlOiBhd2FpdCB0aGlzLmdldEluY2x1ZGUobW9kZWwsIHF1ZXJ5LCBkYXRhKSxcbiAgICAgICAgICAgICAgICB3aGVyZTogcXVlcnkuY29uZGl0aW9uID09PSBcImFuZFwiID8geyBbT3AuYW5kXTogd2hlcmVDb25kaXRpb25zIH0gOiB7IFtPcC5vcl06IHdoZXJlQ29uZGl0aW9ucyB9LFxuICAgICAgICAgICAgICAgIGhhdmluZzogcXVlcnkuY29uZGl0aW9uID09PSBcImFuZFwiID8geyBbT3AuYW5kXTogaGF2aW5nQ29uZGl0aW9ucyB9IDogeyBbT3Aub3JdOiBoYXZpbmdDb25kaXRpb25zIH1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IHBhcmFub2lkID0gYXdhaXQgdGhpcy5nZW5lcmF0ZVdoZXJlT3B0aW9ucyhxdWVyeSwgd2hlcmVDb25kaXRpb25zKTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZ2VuZXJhdGVIYXZpbmdPcHRpb25zKHF1ZXJ5LCBoYXZpbmdDb25kaXRpb25zKTtcblxuICAgICAgICAgICAgaWYgKCFwYXJhbm9pZCkge1xuICAgICAgICAgICAgICAgIG9wdGlvbi5wYXJhbm9pZCA9IHBhcmFub2lkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIWhhdmluZ0NvbmRpdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIG9wdGlvbi5oYXZpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gb3B0aW9uO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdCgpIHtcbiAgICAgICAgdGhpcy5yZXBvc2l0b3J5ID0gdGhpcy5kYXRhRmlsdGVyLmZvcih0aGlzLm1vZGVsLmRhdGFEZWZpbml0aW9uKTtcbiAgICAgICAgdGhpcy5leHBvcnRSZXBvc2l0b3J5ID0gdGhpcy5kYXRhRmlsdGVyLmZvcih0aGlzLm1vZGVsLmV4cG9ydERhdGFEZWZpbml0aW9uID8/IHRoaXMubW9kZWwuZGF0YURlZmluaXRpb24pO1xuICAgICAgICB0aGlzLm1vZGVsLnRyYW5zbGF0ZVNlcnZpY2UgPSB0aGlzLnRyYW5zbGF0ZUFkYXB0ZXI7XG5cbiAgICAgICAgdGhpcy5kZWZpbml0aW9ucyA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLm1vZGVsKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMubW9kZWwuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgIUZpbHRlci52YWxpZGF0ZSh0aGlzLm1vZGVsW2tleV0gYXMgRmlsdGVyRGVmaW5pdGlvbikgJiZcbiAgICAgICAgICAgICAgICAhR3JvdXBGaWx0ZXIudmFsaWRhdGUodGhpcy5tb2RlbFtrZXldIGFzIEdyb3VwRmlsdGVyRGVmaW5pdGlvbikgJiZcbiAgICAgICAgICAgICAgICAhT3JkZXJSdWxlLnZhbGlkYXRlKHRoaXMubW9kZWxba2V5XSBhcyBPcmRlclJ1bGVEZWZpbml0aW9uKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuZGVmaW5pdGlvbnNba2V5XSA9IHRoaXMubW9kZWxba2V5XSBhcyBGaWx0ZXJEZWZpbml0aW9uO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBnZXRJbmNsdWRlKG1vZGVsOiB0eXBlb2YgTSwgcXVlcnk6IFF1ZXJ5TW9kZWwsIGRhdGE/OiBvYmplY3QpOiBQcm9taXNlPEluY2x1ZGVhYmxlW10+IHtcbiAgICAgICAgaWYgKCFxdWVyeS5ydWxlcykge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaW5jbHVkZXM6IEluY2x1ZGVPcHRpb25zW11bXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHJ1bGUgb2YgcXVlcnkucnVsZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IG0gPSBydWxlIGFzIFF1ZXJ5TW9kZWw7XG4gICAgICAgICAgICBpZiAobS5jb25kaXRpb24pIHtcbiAgICAgICAgICAgICAgICBpbmNsdWRlcy5wdXNoKGF3YWl0IHRoaXMuZ2V0SW5jbHVkZShtb2RlbCwgbSwgZGF0YSkgYXMgSW5jbHVkZU9wdGlvbnNbXSk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHIgPSBydWxlIGFzIFF1ZXJ5UnVsZU1vZGVsO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmRlZmluaXRpb25zLmhhc093blByb3BlcnR5KHIuaWQpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGZpbHRlciA9IHRoaXMuZGVmaW5pdGlvbnNbci5pZF07XG4gICAgICAgICAgICBpZiAoKGZpbHRlciBhcyBHcm91cEZpbHRlckRlZmluaXRpb24pLnJvb3RGaWx0ZXIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmID0gZmlsdGVyIGFzIEdyb3VwRmlsdGVyRGVmaW5pdGlvbjtcbiAgICAgICAgICAgICAgICBpbmNsdWRlcy5wdXNoKC4uLnRoaXMuZ2V0RmlsdGVySW5jbHVkZShtb2RlbCwgZi5yb290RmlsdGVyLCBkYXRhKSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoIWYubGF6eUxvYWRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5jbHVkZXMucHVzaCguLi50aGlzLmdldEZpbHRlckluY2x1ZGUobW9kZWwsIGYudmFsdWVGaWx0ZXIsIGRhdGEpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZUZpbGVyID0gYXdhaXQgZi5nZXRWYWx1ZUZpbHRlcihyLnZhbHVlWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgaW5jbHVkZXMucHVzaCguLi50aGlzLmdldEZpbHRlckluY2x1ZGUobW9kZWwsIHZhbHVlRmlsZXIgYXMgRmlsdGVyRGVmaW5pdGlvbiwgZGF0YSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaW5jbHVkZXMucHVzaCguLi50aGlzLmdldEZpbHRlckluY2x1ZGUobW9kZWwsIGZpbHRlciBhcyBGaWx0ZXJEZWZpbml0aW9uLCBkYXRhKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFNlcXVlbGl6ZVV0aWxzLnJlZHVjZUluY2x1ZGVzKGluY2x1ZGVzLCB0cnVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldENvbmRpdGlvbkluY2x1ZGUobW9kZWw6IHR5cGVvZiBNLCBjb25kaXRpb246IEZpbHRlckNvbmRpdGlvbik6IEluY2x1ZGVPcHRpb25zW10ge1xuICAgICAgICBpZiAoIWNvbmRpdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaW5jbHVkZXM6IEluY2x1ZGVPcHRpb25zW10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBydWxlIG9mIGNvbmRpdGlvbi5ydWxlcykge1xuICAgICAgICAgICAgY29uc3QgYyA9IHJ1bGUgYXMgRmlsdGVyQ29uZGl0aW9uO1xuICAgICAgICAgICAgaWYgKGMuY29uZGl0aW9uKSB7XG4gICAgICAgICAgICAgICAgaW5jbHVkZXMucHVzaCguLi50aGlzLmdldENvbmRpdGlvbkluY2x1ZGUobW9kZWwsIGNvbmRpdGlvbikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgciA9IHJ1bGUgYXMgRmlsdGVyQ29uZGl0aW9uUnVsZTtcbiAgICAgICAgICAgIGlmIChyLnBhdGgpIHtcbiAgICAgICAgICAgICAgICBpbmNsdWRlcy5wdXNoKC4uLnRoaXMuc2VxdWVsaXplTW9kZWxTY2FubmVyLmdldEluY2x1ZGVzKG1vZGVsLCB7IHBhdGg6IHIucGF0aCB9LCBbXSwgeyBpbmNsdWRlOiBbXSB9LCB0cnVlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGluY2x1ZGVzO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgZ2VuZXJhdGVXaGVyZU9wdGlvbnMocXVlcnk6IFF1ZXJ5TW9kZWwsIG9wdGlvbnM6IFdoZXJlT3B0aW9uc1tdKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIGlmICghcXVlcnkucnVsZXMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBwYXJhbm9pZCA9IHRydWU7XG4gICAgICAgIGZvciAoY29uc3QgcnVsZSBvZiBxdWVyeS5ydWxlcykge1xuICAgICAgICAgICAgY29uc3QgYyA9IHJ1bGUgYXMgUXVlcnlNb2RlbDtcbiAgICAgICAgICAgIGlmIChjLmNvbmRpdGlvbikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbmRpdGlvbnMgPSBbXTtcbiAgICAgICAgICAgICAgICBjb25zdCBvcCA9IGMuY29uZGl0aW9uID09PSBcImFuZFwiID8gT3AuYW5kIDogT3Aub3I7XG4gICAgICAgICAgICAgICAgY29uc3Qgd2hlcmUgPSB7IFtvcF06IGNvbmRpdGlvbnMgfTtcbiAgICAgICAgICAgICAgICBwYXJhbm9pZCA9IHBhcmFub2lkICYmIGF3YWl0IHRoaXMuZ2VuZXJhdGVXaGVyZU9wdGlvbnMoYywgY29uZGl0aW9ucyk7XG5cbiAgICAgICAgICAgICAgICBpZiAod2hlcmVbb3AgYXMgYW55XS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5wdXNoKHdoZXJlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgciA9IHJ1bGUgYXMgUXVlcnlSdWxlTW9kZWw7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZGVmaW5pdGlvbnMuaGFzT3duUHJvcGVydHkoci5pZCkpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZmlsdGVyID0gdGhpcy5kZWZpbml0aW9uc1tyLmlkXSBhcyBGaWx0ZXJEZWZpbml0aW9uO1xuICAgICAgICAgICAgaWYgKCFPcmRlclJ1bGUudmFsaWRhdGUoZmlsdGVyKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlck9wdGlvbnMgPSBhd2FpdCBmaWx0ZXIuZ2V0V2hlcmVPcHRpb25zKHIpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGZpbHRlck9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5wdXNoKGZpbHRlck9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhcmFub2lkID0gZmlsdGVyLnBhcmFub2lkID8/IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcGFyYW5vaWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBnZW5lcmF0ZUhhdmluZ09wdGlvbnMocXVlcnk6IFF1ZXJ5TW9kZWwsIG9wdGlvbnM6IFdoZXJlT3B0aW9uc1tdKSB7XG4gICAgICAgIGlmICghcXVlcnkucnVsZXMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgcnVsZSBvZiBxdWVyeS5ydWxlcykge1xuICAgICAgICAgICAgY29uc3QgYyA9IHJ1bGUgYXMgUXVlcnlNb2RlbDtcbiAgICAgICAgICAgIGlmIChjLmNvbmRpdGlvbikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbmRpdGlvbnMgPSBbXTtcbiAgICAgICAgICAgICAgICBjb25zdCBvcCA9IGMuY29uZGl0aW9uID09PSBcImFuZFwiID8gT3AuYW5kIDogT3Aub3I7XG4gICAgICAgICAgICAgICAgY29uc3QgaGF2aW5nID0geyBbb3BdOiBjb25kaXRpb25zIH07XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5nZW5lcmF0ZUhhdmluZ09wdGlvbnMoYywgY29uZGl0aW9ucyk7XG5cbiAgICAgICAgICAgICAgICBpZiAoaGF2aW5nW29wIGFzIGFueV0ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMucHVzaChoYXZpbmcpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCByID0gcnVsZSBhcyBRdWVyeVJ1bGVNb2RlbDtcbiAgICAgICAgICAgIGlmICghdGhpcy5kZWZpbml0aW9ucy5oYXNPd25Qcm9wZXJ0eShyLmlkKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLmRlZmluaXRpb25zW3IuaWRdIGFzIEZpbHRlckRlZmluaXRpb247XG4gICAgICAgICAgICBpZiAoIU9yZGVyUnVsZS52YWxpZGF0ZShmaWx0ZXIpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyT3B0aW9ucyA9IGF3YWl0IGZpbHRlci5nZXRIYXZpbmdPcHRpb25zKHIpO1xuICAgICAgICAgICAgICAgIGlmIChmaWx0ZXJPcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMucHVzaChmaWx0ZXJPcHRpb25zKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZFNlYXJjaENvbmRpdGlvbihzZWFyY2g6IEZpbHRlclNlYXJjaE1vZGVsLCBvcHRpb25zOiBDb3VudE9wdGlvbnMpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBzZWFyY2g/LnZhbHVlPy50b1N0cmluZygpO1xuICAgICAgICBpZiAoIXZhbHVlPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVwb3NpdG9yeS5hZGRTZWFyY2hDb25kaXRpb24oc2VhcmNoLnZhbHVlLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZE9yZGVyQ29uZGl0aW9uKG9yZGVyczogT3JkZXJNb2RlbFtdLCBvcHRpb25zOiBDb3VudE9wdGlvbnMpOiB2b2lkIHtcbiAgICAgICAgaWYgKG9yZGVycy5ldmVyeShvcmRlciA9PiAhb3JkZXIuZGlyZWN0aW9uKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubW9kZWwuZGVmYXVsdE9yZGVyUnVsZSkge1xuICAgICAgICAgICAgY29uc3QgZGVmYXVsdE9yZGVycyA9IEFycmF5LmlzQXJyYXkodGhpcy5tb2RlbC5kZWZhdWx0T3JkZXJSdWxlLm9yZGVyKVxuICAgICAgICAgICAgICAgID8gdGhpcy5tb2RlbC5kZWZhdWx0T3JkZXJSdWxlLm9yZGVyXG4gICAgICAgICAgICAgICAgOiBbdGhpcy5tb2RlbC5kZWZhdWx0T3JkZXJSdWxlLm9yZGVyXTtcblxuICAgICAgICAgICAgb3JkZXJzID0gWy4uLmRlZmF1bHRPcmRlcnMsIC4uLm9yZGVyc107XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IG9yZGVyIG9mIG9yZGVycykge1xuICAgICAgICAgICAgY29uc3QgcnVsZSA9IHRoaXMuZGVmaW5pdGlvbnNbb3JkZXIuY29sdW1uXSBhcyBPcmRlclJ1bGVEZWZpbml0aW9uO1xuICAgICAgICAgICAgY29uc3QgaW5jbHVkZXMgPSBydWxlICYmIE9yZGVyUnVsZS52YWxpZGF0ZShydWxlKSA/XG4gICAgICAgICAgICAgICAgdGhpcy5zZXF1ZWxpemVNb2RlbFNjYW5uZXIuZ2V0SW5jbHVkZXModGhpcy5yZXBvc2l0b3J5Lm1vZGVsLCB7IHBhdGg6IHJ1bGUucGF0aCB9LCBbXSkgOlxuICAgICAgICAgICAgICAgIHRoaXMucmVwb3NpdG9yeS5nZW5lcmF0ZU9yZGVySW5jbHVkZShvcmRlcik7XG5cbiAgICAgICAgICAgIGlmICghaW5jbHVkZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG9wdGlvbnMuaW5jbHVkZSA9IFNlcXVlbGl6ZVV0aWxzLm1lcmdlSW5jbHVkZXMoXG4gICAgICAgICAgICAgICAgb3B0aW9ucy5pbmNsdWRlIGFzIEluY2x1ZGVPcHRpb25zIHwgSW5jbHVkZU9wdGlvbnNbXSxcbiAgICAgICAgICAgICAgICBpbmNsdWRlc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG5cbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZEdyb3VwT3B0aW9uKG9yZGVyczogT3JkZXJNb2RlbFtdLCBvcHRpb25zOiBDb3VudE9wdGlvbnMpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbW9kZWwgPSB0aGlzLnJlcG9zaXRvcnkubW9kZWw7XG4gICAgICAgIG9wdGlvbnMuZ3JvdXAgPSBbYCR7bW9kZWwubmFtZX0uaWRgXTtcblxuICAgICAgICBmb3IgKGNvbnN0IG9yZGVyIG9mIG9yZGVycykge1xuICAgICAgICAgICAgY29uc3QgcnVsZSA9IHRoaXMuZGVmaW5pdGlvbnNbb3JkZXIuY29sdW1uXSBhcyBPcmRlclJ1bGVEZWZpbml0aW9uO1xuICAgICAgICAgICAgaWYgKHJ1bGUgJiYgT3JkZXJSdWxlLnZhbGlkYXRlKHJ1bGUpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnJlcG9zaXRvcnkuaGFzQ3VzdG9tQXR0cmlidXRlKG9yZGVyLmNvbHVtbikpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgdmFsdWVzID0gb3JkZXIuY29sdW1uLnNwbGl0KFwiLlwiKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbHVtbiA9IHZhbHVlcy5wb3AoKTtcbiAgICAgICAgICAgIGlmICghdmFsdWVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMuZ3JvdXAucHVzaChgJHttb2RlbC5uYW1lfS4ke1NlcXVlbGl6ZVV0aWxzLmZpbmRDb2x1bW5GaWVsZE5hbWUobW9kZWwsIGNvbHVtbil9YCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMuZ3JvdXAucHVzaCguLi50aGlzLnNlcXVlbGl6ZU1vZGVsU2Nhbm5lci5nZXRHcm91cChtb2RlbCwgb3JkZXIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgY291bnRUb3RhbFZhbHVlcyh1c2VyOiBEYXRhRmlsdGVyVXNlck1vZGVsLCBvcHRpb25zOiBGaW5kT3B0aW9ucyk6IFByb21pc2U8bnVtYmVyPjtcbiAgICBwcml2YXRlIGFzeW5jIGNvdW50VG90YWxWYWx1ZXMob3B0aW9uczogRmluZE9wdGlvbnMpOiBQcm9taXNlPG51bWJlcj47XG4gICAgcHJpdmF0ZSBhc3luYyBjb3VudFRvdGFsVmFsdWVzKC4uLmFyZ3M6IFtEYXRhRmlsdGVyVXNlck1vZGVsIHwgRmluZE9wdGlvbnMsIEZpbmRPcHRpb25zP10pOiBQcm9taXNlPG51bWJlcj4ge1xuICAgICAgICBjb25zdCBbdXNlck9yT3B0LCBvcHRdID0gYXJncztcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IG9wdCA/IG9wdCA6IHVzZXJPck9wdCBhcyBGaW5kT3B0aW9ucztcblxuICAgICAgICAvKipcbiAgICAgICAgICogVGhpcyBtZWFucyB0aGF0IGNvdW50VG90YWxWYWx1ZXMgd2FzIGNhbGxlZCB3aXRoIGEgdXNlclxuICAgICAgICAgKi9cbiAgICAgICAgaWYgKG9wdCkge1xuICAgICAgICAgICAgb3B0aW9ucy53aGVyZSA9IGF3YWl0IHRoaXMuZ2V0QWNjZXNzQ29udHJvbFdoZXJlQ29uZGl0aW9uKG9wdGlvbnMud2hlcmUsIHVzZXJPck9wdCBhcyBEYXRhRmlsdGVyVXNlck1vZGVsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLmhhdmluZykge1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMucmVwb3NpdG9yeS5tb2RlbC5maW5kQWxsKHtcbiAgICAgICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgICAgIHN1YlF1ZXJ5OiBmYWxzZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gZGF0YS5sZW5ndGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGF3YWl0IHRoaXMucmVwb3NpdG9yeS5tb2RlbC5jb3VudCh7XG4gICAgICAgICAgICAgICAgLi4ub3B0aW9uc1xuICAgICAgICAgICAgfSkgYXMgYW55O1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgZmluZFZhbHVlczxVc2VycyBleHRlbmRzIERhdGFGaWx0ZXJVc2VyTW9kZWw+KHVzZXI6IFVzZXJzLCBmaWx0ZXI6IEZpbHRlclF1ZXJ5TW9kZWwsIG9wdGlvbnM6IEZpbmRPcHRpb25zLCByZXBvc2l0b3J5PzogRGF0YUZpbHRlclJlcG9zaXRvcnk8RGF0YT4pOiBQcm9taXNlPERhdGFbXT47XG4gICAgcHJpdmF0ZSBhc3luYyBmaW5kVmFsdWVzPFVzZXJzIGV4dGVuZHMgRGF0YUZpbHRlclVzZXJNb2RlbD4oZmlsdGVyOiBGaWx0ZXJRdWVyeU1vZGVsLCBvcHRpb25zOiBGaW5kT3B0aW9ucywgcmVwb3NpdG9yeT86IERhdGFGaWx0ZXJSZXBvc2l0b3J5PERhdGE+KTogUHJvbWlzZTxEYXRhW10+O1xuICAgIHByaXZhdGUgYXN5bmMgZmluZFZhbHVlczxVc2VycyBleHRlbmRzIERhdGFGaWx0ZXJVc2VyTW9kZWw+KC4uLmFyZ3M6IFtVc2VycyB8IEZpbHRlclF1ZXJ5TW9kZWwsIEZpbHRlclF1ZXJ5TW9kZWwgfCBGaW5kT3B0aW9ucywgRmluZE9wdGlvbnMgfCBEYXRhRmlsdGVyUmVwb3NpdG9yeTxEYXRhPiwgRGF0YUZpbHRlclJlcG9zaXRvcnk8RGF0YT4/XSk6IFByb21pc2U8RGF0YVtdPiB7XG4gICAgICAgIGNvbnN0IFt1c2VyT3JPRmlsdGVyLCBmaWx0ZXJPck9wdCwgb3B0T3JSZXBvLCByZXBvXSA9IGFyZ3M7XG4gICAgICAgIGNvbnN0IG9wdE9yUmVwb0lzUmVwbyA9IG9wdE9yUmVwbyBpbnN0YW5jZW9mIERhdGFGaWx0ZXJSZXBvc2l0b3J5O1xuXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBvcHRPclJlcG8gJiYgIW9wdE9yUmVwb0lzUmVwbyA/IG9wdE9yUmVwbyA6IGZpbHRlck9yT3B0IGFzIEZpbmRPcHRpb25zO1xuICAgICAgICBjb25zdCBmaWx0ZXIgPSBvcHRPclJlcG8gJiYgIW9wdE9yUmVwb0lzUmVwbyA/IGZpbHRlck9yT3B0IGFzIEZpbHRlclF1ZXJ5TW9kZWwgOiB1c2VyT3JPRmlsdGVyIGFzIEZpbHRlclF1ZXJ5TW9kZWw7XG5cbiAgICAgICAgY29uc3QgcmVwb3NpdG9yeSA9IHJlcG8gPz8gKG9wdE9yUmVwb0lzUmVwbyA/IG9wdE9yUmVwbyA6IHRoaXMucmVwb3NpdG9yeSk7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoaXMgbWVhbnMgdGhhdCBmaW5kVmFsdWVzIHdhcyBjYWxsZWQgd2l0aCBhIHVzZXJcbiAgICAgICAgICovXG4gICAgICAgIGlmIChyZXBvKSB7XG4gICAgICAgICAgICBvcHRpb25zLndoZXJlID0gYXdhaXQgdGhpcy5nZXRBY2Nlc3NDb250cm9sV2hlcmVDb25kaXRpb24ob3B0aW9ucy53aGVyZSwgdXNlck9yT0ZpbHRlciBhcyBVc2Vycyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBvcmRlciA9IHRoaXMuZ2V0T3JkZXJPcHRpb25zKGZpbHRlci5vcmRlciBhcyBPcmRlck1vZGVsW10pO1xuXG4gICAgICAgIGNvbnN0IG5vbk5lc3RlZE9yZGVyQ29sdW1ucyA9IChmaWx0ZXIub3JkZXIgYXMgT3JkZXJNb2RlbFtdKVxuICAgICAgICAgICAgLm1hcChvcmRlciA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcnVsZSA9IHRoaXMuZGVmaW5pdGlvbnNbb3JkZXIuY29sdW1uXSBhcyBPcmRlclJ1bGVEZWZpbml0aW9uO1xuICAgICAgICAgICAgICAgIGlmICghcnVsZSB8fCAhT3JkZXJSdWxlLnZhbGlkYXRlKHJ1bGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvcmRlci5jb2x1bW47XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtydWxlLnBhdGggPz8gXCJcIiwgcnVsZS5hdHRyaWJ1dGVdLmpvaW4oXCIuXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4gJiYgIWNvbHVtbi5pbmNsdWRlcyhcIi5cIikgJiYgIXJlcG9zaXRvcnkuaGFzQ3VzdG9tQXR0cmlidXRlKGNvbHVtbikpO1xuICAgICAgICBjb25zdCBjdXN0b21BdHRyaWJ1dGVzID0gdGhpcy5nZXRPcmRlckN1c3RvbUF0dHJpYnV0ZShmaWx0ZXIub3JkZXIgYXMgT3JkZXJNb2RlbFtdLCBmaWx0ZXIuZGF0YSk7XG5cbiAgICAgICAgY29uc3QgdmFsdWVzID0gYXdhaXQgcmVwb3NpdG9yeS5tb2RlbC5maW5kQWxsKHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBhdHRyaWJ1dGVzOiBbXCJpZFwiLCAuLi5ub25OZXN0ZWRPcmRlckNvbHVtbnMsIC4uLmN1c3RvbUF0dHJpYnV0ZXNdLFxuICAgICAgICAgICAgbGltaXQ6IGZpbHRlci5wYWdlID8gZmlsdGVyLnBhZ2Uuc2l6ZSA6IG51bGwsXG4gICAgICAgICAgICBvZmZzZXQ6IGZpbHRlci5wYWdlID8gZmlsdGVyLnBhZ2UubnVtYmVyICogZmlsdGVyLnBhZ2Uuc2l6ZSArIChmaWx0ZXIucGFnZS5vZmZzZXQgPz8gMCkgOiBudWxsLFxuICAgICAgICAgICAgc3ViUXVlcnk6IGZhbHNlLFxuICAgICAgICAgICAgb3JkZXJcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgZ3JvdXAgPSBmaWx0ZXIuZ3JvdXBCeSA/IFtTZXF1ZWxpemVVdGlscy5nZXRHcm91cExpdGVyYWwocmVwb3NpdG9yeS5tb2RlbCwgZmlsdGVyLmdyb3VwQnkpXSA6IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHJlcG9zaXRvcnkuZmluZEFsbCh7XG4gICAgICAgICAgICB3aGVyZToge1xuICAgICAgICAgICAgICAgIGlkOiB2YWx1ZXMubWFwKHggPT4geC5pZClcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvcmRlcixcbiAgICAgICAgICAgIHBhcmFub2lkOiBvcHRpb25zLnBhcmFub2lkLFxuICAgICAgICAgICAgZ3JvdXBcbiAgICAgICAgfSwgZmlsdGVyLmRhdGEgPz8ge30pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgZ2V0QWNjZXNzQ29udHJvbFdoZXJlQ29uZGl0aW9uKHdoZXJlOiBXaGVyZU9wdGlvbnMsIHVzZXI6IERhdGFGaWx0ZXJVc2VyTW9kZWwpOiBQcm9taXNlPFdoZXJlT3B0aW9ucz4ge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zPy5kaXNhYmxlQWNjZXNzQ29udHJvbCkge1xuICAgICAgICAgICAgcmV0dXJuIHdoZXJlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF1c2VyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyB1c2VyIGZvdW5kXCIpO1xuICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLmFjY2Vzc0NvbnRyb2xBZGFwdGVyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBY2Nlc3NDb250cm9sIGlzbid0IGVuYWJsZSBpbiB5b3VyIHByb2plY3RcIik7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXNvdXJjZXMgPSBhd2FpdCB0aGlzLmFjY2Vzc0NvbnRyb2xBZGFwdGVyLmdldFJlc291cmNlcyh0aGlzLnJlcG9zaXRvcnkubW9kZWwsIHVzZXIpO1xuICAgICAgICBpZiAocmVzb3VyY2VzLmlkcykge1xuICAgICAgICAgICAgcmV0dXJuIFNlcXVlbGl6ZVV0aWxzLm1lcmdlV2hlcmUoeyBpZDogcmVzb3VyY2VzLmlkcyB9LCB3aGVyZSA/PyB7fSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlc291cmNlcy53aGVyZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBbT3AuYW5kXTogW1xuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZXMud2hlcmUsXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlID8/IHt9XG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB3aGVyZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdlbmVyYXRlV2hlcmVDb25kaXRpb25zKG1vZGVsOiBJbmNsdWRlV2hlcmVNb2RlbCwgZGF0YT86IG9iamVjdCk6IFdoZXJlT3B0aW9ucyB7XG4gICAgICAgIGlmICghbW9kZWwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHdoZXJlID0ge307XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIG1vZGVsKSB7XG4gICAgICAgICAgICBpZiAoIW1vZGVsLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBtb2RlbFtrZXldKGRhdGEpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgICAgIHdoZXJlW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB3aGVyZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEZpbHRlckluY2x1ZGUobW9kZWw6IHR5cGVvZiBNLCBmaWx0ZXI6IEZpbHRlckRlZmluaXRpb24sIGRhdGE/OiBvYmplY3QpOiBJbmNsdWRlT3B0aW9uc1tdW10ge1xuICAgICAgICBpZiAoIWZpbHRlci5wYXRoKSB7XG4gICAgICAgICAgICByZXR1cm4gW3RoaXMuZ2V0Q29uZGl0aW9uSW5jbHVkZShtb2RlbCwgZmlsdGVyLmNvbmRpdGlvbildO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHRoaXMuc2VxdWVsaXplTW9kZWxTY2FubmVyLmdldEluY2x1ZGVzKG1vZGVsLCB7XG4gICAgICAgICAgICAgICAgcGF0aDogZmlsdGVyLnBhdGgsXG4gICAgICAgICAgICAgICAgcGFyYW5vaWQ6IGZpbHRlci5wYXJhbm9pZCxcbiAgICAgICAgICAgICAgICB3aGVyZTogdGhpcy5nZW5lcmF0ZVdoZXJlQ29uZGl0aW9ucyhmaWx0ZXIud2hlcmUsIGRhdGEpXG4gICAgICAgICAgICB9LCBbXSwgW10sIHRydWUpLFxuICAgICAgICAgICAgdGhpcy5nZXRDb25kaXRpb25JbmNsdWRlKG1vZGVsLCBmaWx0ZXIuY29uZGl0aW9uKVxuICAgICAgICBdO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0T3JkZXJPcHRpb25zKG9yZGVyczogT3JkZXJNb2RlbCB8IE9yZGVyTW9kZWxbXSk6IE9yZGVyIHtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG9yZGVycykpIHtcbiAgICAgICAgICAgIG9yZGVycyA9IFtvcmRlcnNdO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubW9kZWwuZGVmYXVsdE9yZGVyUnVsZSkge1xuICAgICAgICAgICAgY29uc3QgZGVmYXVsdE9yZGVycyA9IEFycmF5LmlzQXJyYXkodGhpcy5tb2RlbC5kZWZhdWx0T3JkZXJSdWxlLm9yZGVyKVxuICAgICAgICAgICAgICAgID8gdGhpcy5tb2RlbC5kZWZhdWx0T3JkZXJSdWxlLm9yZGVyXG4gICAgICAgICAgICAgICAgOiBbdGhpcy5tb2RlbC5kZWZhdWx0T3JkZXJSdWxlLm9yZGVyXTtcblxuICAgICAgICAgICAgb3JkZXJzID0gWy4uLmRlZmF1bHRPcmRlcnMsIC4uLm9yZGVyc107XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBnZW5lcmF0ZWRPcmRlcjogT3JkZXIgPSBbXTtcblxuICAgICAgICBmb3IgKGNvbnN0IG9yZGVyIG9mIG9yZGVycykge1xuICAgICAgICAgICAgaWYgKCFvcmRlcj8uY29sdW1uIHx8ICFvcmRlci5kaXJlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMucmVwb3NpdG9yeS5oYXNDdXN0b21BdHRyaWJ1dGUob3JkZXIuY29sdW1uKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtbiA9IG9yZGVyLm51bGxMYXN0ID8gYC0ke29yZGVyLmNvbHVtbn1gIDogb3JkZXIuY29sdW1uO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IG9yZGVyLm51bGxMYXN0ID8gb3JkZXIuZGlyZWN0aW9uID09PSBcImFzY1wiID8gXCJkZXNjXCIgOiBcImFzY1wiIDogb3JkZXIuZGlyZWN0aW9uO1xuICAgICAgICAgICAgICAgIGdlbmVyYXRlZE9yZGVyLnB1c2goW2xpdGVyYWwoY29sdW1uKSwgZGlyZWN0aW9uLnRvVXBwZXJDYXNlKCldKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcnVsZSA9IHRoaXMuZGVmaW5pdGlvbnNbb3JkZXIuY29sdW1uXSBhcyBPcmRlclJ1bGVEZWZpbml0aW9uO1xuICAgICAgICAgICAgaWYgKCFydWxlIHx8ICFPcmRlclJ1bGUudmFsaWRhdGUocnVsZSkpIHtcbiAgICAgICAgICAgICAgICBnZW5lcmF0ZWRPcmRlci5wdXNoKHRoaXMuc2VxdWVsaXplTW9kZWxTY2FubmVyLmdldE9yZGVyKHRoaXMucmVwb3NpdG9yeS5tb2RlbCwgb3JkZXIpIGFzIE9yZGVySXRlbSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGdlbmVyYXRlZE9yZGVyLnB1c2goW3J1bGUuZ2V0T3JkZXJPcHRpb24odGhpcy5yZXBvc2l0b3J5Lm1vZGVsKSwgb3JkZXIuZGlyZWN0aW9uLnRvVXBwZXJDYXNlKCldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBnZW5lcmF0ZWRPcmRlcjtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE9yZGVyQ3VzdG9tQXR0cmlidXRlKG9yZGVyczogT3JkZXJNb2RlbCB8IE9yZGVyTW9kZWxbXSwgZGF0YT86IG9iamVjdCk6IFByb2plY3Rpb25BbGlhc1tdIHtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG9yZGVycykpIHtcbiAgICAgICAgICAgIG9yZGVycyA9IFtvcmRlcnNdO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYXR0cmlidXRlczogUHJvamVjdGlvbkFsaWFzW10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBvcmRlciBvZiBvcmRlcnMpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5yZXBvc2l0b3J5Lmhhc0N1c3RvbUF0dHJpYnV0ZShvcmRlci5jb2x1bW4pKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGN1c3RvbUF0dHJpYnV0ZSA9IHRoaXMucmVwb3NpdG9yeS5nZXRDdXN0b21BdHRyaWJ1dGUob3JkZXIuY29sdW1uKTtcbiAgICAgICAgICAgIGNvbnN0IGF0dHJpYnV0ZSA9IGN1c3RvbUF0dHJpYnV0ZS50cmFuc2Zvcm0oZGF0YSkgYXMgUHJvamVjdGlvbkFsaWFzO1xuICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZSkge1xuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMucHVzaChhdHRyaWJ1dGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhdHRyaWJ1dGVzO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWRkRGVmYXVsdEZpbHRlcihxdWVyeTogUXVlcnlNb2RlbCk6IFF1ZXJ5TW9kZWwge1xuICAgICAgICBpZiAoIXRoaXMubW9kZWwuZGVmYXVsdEZpbHRlcikge1xuICAgICAgICAgICAgcmV0dXJuIHF1ZXJ5O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubW9kZWwuZGVmYXVsdEZpbHRlci5yZXF1aXJlZCkge1xuICAgICAgICAgICAgaWYgKHF1ZXJ5Py5jb25kaXRpb24gIT09IFwiYW5kXCIpIHtcbiAgICAgICAgICAgICAgICBxdWVyeSA9IHtcbiAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uOiBcImFuZFwiLFxuICAgICAgICAgICAgICAgICAgICBydWxlczogW3F1ZXJ5XVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAocXVlcnk/LmNvbmRpdGlvbiAhPT0gXCJvclwiKSB7XG4gICAgICAgICAgICAgICAgcXVlcnkgPSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbjogXCJvclwiLFxuICAgICAgICAgICAgICAgICAgICBydWxlczogW3F1ZXJ5XVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcXVlcnkucnVsZXMucHVzaCh0aGlzLm1vZGVsLmRlZmF1bHRGaWx0ZXIuZmlsdGVyKTtcbiAgICAgICAgcmV0dXJuIHF1ZXJ5O1xuICAgIH1cblxuICAgIHByaXZhdGUgbm9ybWFsaXplT3JkZXIob3JkZXJzOiBPcmRlck1vZGVsIHwgT3JkZXJNb2RlbFtdKTogT3JkZXJNb2RlbFtdIHtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG9yZGVycykpIHtcbiAgICAgICAgICAgIG9yZGVycyA9IFtvcmRlcnNdO1xuICAgICAgICB9XG5cbiAgICAgICAgb3JkZXJzID0gb3JkZXJzPy5maWx0ZXIob3JkZXIgPT4gb3JkZXI/LmNvbHVtbik7XG5cbiAgICAgICAgaWYgKCFvcmRlcnM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgb3JkZXJzID0gW3tcbiAgICAgICAgICAgICAgICBjb2x1bW46IFwiaWRcIixcbiAgICAgICAgICAgICAgICBkaXJlY3Rpb246IFwiYXNjXCJcbiAgICAgICAgICAgIH1dO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG9yZGVycztcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE5vbk5lc3RlZE9yZGVyQ29sdW1ucyhvcmRlcnM6IE9yZGVyTW9kZWxbXSk6IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIG9yZGVycy5maWx0ZXIob3JkZXIgPT4gb3JkZXIuY29sdW1uICYmICFvcmRlci5jb2x1bW4uaW5jbHVkZXMoXCIuXCIpKS5tYXAob3JkZXIgPT4gb3JkZXIuY29sdW1uKTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -13,5 +13,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
13
13
|
__exportStar(require("./enum.order-rule"), exports);
|
|
14
14
|
__exportStar(require("./if.order-rule"), exports);
|
|
15
15
|
__exportStar(require("./is-null.order-rule"), exports);
|
|
16
|
+
__exportStar(require("./default.order-rule"), exports);
|
|
16
17
|
|
|
17
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,
|
|
18
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9maWx0ZXIvb3JkZXItcnVsZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsb0RBQWtDO0FBQ2xDLGtEQUFnQztBQUNoQyx1REFBcUM7QUFDckMsdURBQXFDIiwiZmlsZSI6ImxpYi9maWx0ZXIvb3JkZXItcnVsZXMvaW5kZXguanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9lbnVtLm9yZGVyLXJ1bGVcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2lmLm9yZGVyLXJ1bGVcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2lzLW51bGwub3JkZXItcnVsZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vZGVmYXVsdC5vcmRlci1ydWxlXCI7XG4iXX0=
|