@recursyve/nestjs-data-filter 9.3.1 → 9.4.0-beta.0
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/lib/data-filter.repository.d.ts +3 -1
- package/lib/data-filter.repository.js +12 -9
- package/lib/data-filter.service.d.ts +4 -4
- package/lib/data-filter.service.js +8 -7
- package/lib/filter/base-filter.d.ts +3 -0
- package/lib/filter/base-filter.js +19 -1
- package/lib/filter/filter.factory.d.ts +2 -1
- package/lib/filter/filter.factory.js +3 -3
- package/lib/filter/filter.provider.js +3 -2
- package/lib/filter/filter.service.d.ts +3 -1
- package/lib/filter/filter.service.js +19 -14
- package/lib/filter/filters/filter.d.ts +3 -0
- package/lib/filter/filters/filter.js +7 -4
- package/lib/filter/filters/geo-bounds.filter.js +2 -3
- package/lib/filter/filters/geo-localization.filter.js +2 -2
- package/lib/filter/filters/group.filter.d.ts +3 -0
- package/lib/filter/filters/group.filter.js +9 -2
- package/lib/filter/order-rules/enum.order-rule.js +2 -3
- package/lib/filter/order-rules/if.order-rule.js +2 -3
- package/lib/filter/order-rules/is-null.order-rule.js +2 -3
- package/lib/filter/order-rules/order-rule.d.ts +3 -0
- package/lib/filter/order-rules/order-rule.js +5 -2
- package/lib/index.js +4 -3
- package/lib/models/attributes.model.d.ts +8 -1
- package/lib/models/attributes.model.js +21 -11
- package/lib/models/count.model.d.ts +11 -4
- package/lib/models/count.model.js +25 -14
- package/lib/models/custom-attributes.model.d.ts +6 -2
- package/lib/models/custom-attributes.model.js +5 -1
- package/lib/models/data-filter.model.d.ts +9 -2
- package/lib/models/data-filter.model.js +40 -30
- package/lib/models/distance.model.d.ts +10 -3
- package/lib/models/distance.model.js +29 -18
- package/lib/models/sum.model.d.ts +10 -3
- package/lib/models/sum.model.js +19 -8
- package/lib/scanners/sequelize-model.scanner.d.ts +4 -2
- package/lib/scanners/sequelize-model.scanner.js +16 -8
- package/lib/sequelize.utils.d.ts +0 -3
- package/lib/sequelize.utils.js +1 -18
- package/lib/services/dialect-formatter.service.d.ts +10 -0
- package/lib/services/dialect-formatter.service.js +58 -0
- package/package.json +1 -1
package/lib/models/sum.model.js
CHANGED
|
@@ -1,24 +1,35 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.SumAttributesConfig = void 0;
|
|
3
|
+
exports.SumAttributesContext = exports.SumAttributesConfig = void 0;
|
|
4
4
|
const sequelize_1 = require("sequelize");
|
|
5
|
-
const
|
|
5
|
+
const custom_attributes_model_1 = require("./custom-attributes.model");
|
|
6
6
|
class SumAttributesConfig {
|
|
7
7
|
constructor(key, config) {
|
|
8
8
|
this.key = key;
|
|
9
9
|
this.config = config;
|
|
10
10
|
this.type = "sum";
|
|
11
11
|
}
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
? (0, sequelize_1.literal)(sequelize_utils_1.SequelizeUtils.getLiteralFullName(this.config.attribute, this.config.path))
|
|
15
|
-
: this.config.attribute;
|
|
16
|
-
return [(0, sequelize_1.fn)("SUM", attribute), this.key];
|
|
12
|
+
withContext(dialectFormatterService) {
|
|
13
|
+
return new SumAttributesContext(this, dialectFormatterService);
|
|
17
14
|
}
|
|
18
15
|
shouldGroupBy() {
|
|
19
16
|
return true;
|
|
20
17
|
}
|
|
21
18
|
}
|
|
22
19
|
exports.SumAttributesConfig = SumAttributesConfig;
|
|
20
|
+
class SumAttributesContext extends custom_attributes_model_1.CustomAttributesContext {
|
|
21
|
+
constructor(config, dialectFormatterService) {
|
|
22
|
+
super();
|
|
23
|
+
this.config = config;
|
|
24
|
+
this.dialectFormatterService = dialectFormatterService;
|
|
25
|
+
}
|
|
26
|
+
transform(options, path) {
|
|
27
|
+
const attribute = this.config.config.path
|
|
28
|
+
? (0, sequelize_1.literal)(this.dialectFormatterService.getLiteralFullName(this.config.config.attribute, this.config.config.path))
|
|
29
|
+
: this.config.config.attribute;
|
|
30
|
+
return [(0, sequelize_1.fn)("SUM", attribute), this.config.key];
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
exports.SumAttributesContext = SumAttributesContext;
|
|
23
34
|
|
|
24
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,
|
|
35
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9tb2RlbHMvc3VtLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHlDQUF5RDtBQUV6RCx1RUFJbUM7QUFNbkMsTUFBYSxtQkFBbUI7SUFHNUIsWUFBbUIsR0FBVyxFQUFTLE1BQWlCO1FBQXJDLFFBQUcsR0FBSCxHQUFHLENBQVE7UUFBUyxXQUFNLEdBQU4sTUFBTSxDQUFXO1FBRmpELFNBQUksR0FBRyxLQUFLLENBQUM7SUFFdUMsQ0FBQztJQUVyRCxXQUFXLENBQUMsdUJBQWdEO1FBQy9ELE9BQU8sSUFBSSxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRU0sYUFBYTtRQUNoQixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0NBQ0o7QUFaRCxrREFZQztBQUVELE1BQWEsb0JBQXFCLFNBQVEsaURBQXVCO0lBQzdELFlBQW9CLE1BQTJCLEVBQVUsdUJBQWdEO1FBQ3JHLEtBQUssRUFBRSxDQUFDO1FBRFEsV0FBTSxHQUFOLE1BQU0sQ0FBcUI7UUFBVSw0QkFBdUIsR0FBdkIsdUJBQXVCLENBQXlCO0lBRXpHLENBQUM7SUFFTSxTQUFTLENBQUMsT0FBZSxFQUFFLElBQWE7UUFDM0MsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSTtZQUNyQyxDQUFDLENBQUMsSUFBQSxtQkFBTyxFQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDakgsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQztRQUNuQyxPQUFPLENBQUMsSUFBQSxjQUFFLEVBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkQsQ0FBQztDQUNKO0FBWEQsb0RBV0MiLCJmaWxlIjoibGliL21vZGVscy9zdW0ubW9kZWwuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmbiwgbGl0ZXJhbCwgUHJvamVjdGlvbkFsaWFzIH0gZnJvbSBcInNlcXVlbGl6ZVwiO1xuaW1wb3J0IHsgRGlhbGVjdEZvcm1hdHRlclNlcnZpY2UgfSBmcm9tIFwiLi4vc2VydmljZXMvZGlhbGVjdC1mb3JtYXR0ZXIuc2VydmljZVwiO1xuaW1wb3J0IHtcbiAgICBDdXN0b21BdHRyaWJ1dGVzQ29uZmlnLFxuICAgIEN1c3RvbUF0dHJpYnV0ZXNDb250ZXh0LFxuICAgIEN1c3RvbUF0dHJpYnV0ZXNPcHRpb25Db25maWdcbn0gZnJvbSBcIi4vY3VzdG9tLWF0dHJpYnV0ZXMubW9kZWxcIjtcblxuZXhwb3J0IGludGVyZmFjZSBTdW1Db25maWcgZXh0ZW5kcyBDdXN0b21BdHRyaWJ1dGVzT3B0aW9uQ29uZmlnIHtcbiAgICBhdHRyaWJ1dGU6IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIFN1bUF0dHJpYnV0ZXNDb25maWcgaW1wbGVtZW50cyBDdXN0b21BdHRyaWJ1dGVzQ29uZmlnPFN1bUNvbmZpZywgU3VtQXR0cmlidXRlc0NvbnRleHQ+IHtcbiAgICBwdWJsaWMgdHlwZSA9IFwic3VtXCI7XG5cbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMga2V5OiBzdHJpbmcsIHB1YmxpYyBjb25maWc6IFN1bUNvbmZpZykge31cblxuICAgIHB1YmxpYyB3aXRoQ29udGV4dChkaWFsZWN0Rm9ybWF0dGVyU2VydmljZTogRGlhbGVjdEZvcm1hdHRlclNlcnZpY2UpOiBTdW1BdHRyaWJ1dGVzQ29udGV4dCB7XG4gICAgICAgIHJldHVybiBuZXcgU3VtQXR0cmlidXRlc0NvbnRleHQodGhpcywgZGlhbGVjdEZvcm1hdHRlclNlcnZpY2UpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzaG91bGRHcm91cEJ5KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdW1BdHRyaWJ1dGVzQ29udGV4dCBleHRlbmRzIEN1c3RvbUF0dHJpYnV0ZXNDb250ZXh0IHtcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNvbmZpZzogU3VtQXR0cmlidXRlc0NvbmZpZywgcHJpdmF0ZSBkaWFsZWN0Rm9ybWF0dGVyU2VydmljZTogRGlhbGVjdEZvcm1hdHRlclNlcnZpY2UpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdHJhbnNmb3JtKG9wdGlvbnM6IG9iamVjdCwgcGF0aD86IHN0cmluZyk6IHN0cmluZyB8IFByb2plY3Rpb25BbGlhcyB7XG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZSA9IHRoaXMuY29uZmlnLmNvbmZpZy5wYXRoXG4gICAgICAgICAgICA/IGxpdGVyYWwodGhpcy5kaWFsZWN0Rm9ybWF0dGVyU2VydmljZS5nZXRMaXRlcmFsRnVsbE5hbWUodGhpcy5jb25maWcuY29uZmlnLmF0dHJpYnV0ZSwgdGhpcy5jb25maWcuY29uZmlnLnBhdGgpKVxuICAgICAgICAgICAgOiB0aGlzLmNvbmZpZy5jb25maWcuYXR0cmlidXRlO1xuICAgICAgICByZXR1cm4gW2ZuKFwiU1VNXCIsIGF0dHJpYnV0ZSksIHRoaXMuY29uZmlnLmtleV07XG4gICAgfVxufSJdfQ==
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { FindAttributeOptions, IncludeOptions, Order } from "sequelize";
|
|
2
2
|
import { Model } from "sequelize-typescript";
|
|
3
|
-
import { OrderModel } from "..";
|
|
4
|
-
import { IncludeModel } from "..";
|
|
3
|
+
import { IncludeModel, OrderModel } from "..";
|
|
5
4
|
import { PathModel } from "../models/path.model";
|
|
6
5
|
import { SearchAttributesModel } from "../models/search-attributes.model";
|
|
6
|
+
import { DialectFormatterService } from "../services/dialect-formatter.service";
|
|
7
7
|
export declare class SequelizeModelScanner {
|
|
8
|
+
private dialectFormatterService;
|
|
9
|
+
constructor(dialectFormatterService: DialectFormatterService);
|
|
8
10
|
getIncludes(model: typeof Model, path: PathModel, additionalIncludes: IncludeModel[], attributes?: FindAttributeOptions, ignoreAttributes?: boolean): IncludeOptions[];
|
|
9
11
|
getAttributes(model: typeof Model, path: PathModel, additionalIncludes: IncludeModel[], attributes?: FindAttributeOptions): SearchAttributesModel[];
|
|
10
12
|
getOrder(model: typeof Model, orderObj: OrderModel): Order;
|
|
@@ -5,6 +5,9 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
5
5
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
6
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
7
|
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
8
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
12
|
exports.SequelizeModelScanner = void 0;
|
|
10
13
|
const common_1 = require("@nestjs/common");
|
|
@@ -12,7 +15,11 @@ const nestjs_common_1 = require("@recursyve/nestjs-common");
|
|
|
12
15
|
const sequelize_1 = require("sequelize");
|
|
13
16
|
const sequelize_typescript_1 = require("sequelize-typescript");
|
|
14
17
|
const sequelize_utils_1 = require("../sequelize.utils");
|
|
18
|
+
const dialect_formatter_service_1 = require("../services/dialect-formatter.service");
|
|
15
19
|
let SequelizeModelScanner = class SequelizeModelScanner {
|
|
20
|
+
constructor(dialectFormatterService) {
|
|
21
|
+
this.dialectFormatterService = dialectFormatterService;
|
|
22
|
+
}
|
|
16
23
|
getIncludes(model, path, additionalIncludes, attributes, ignoreAttributes = false) {
|
|
17
24
|
var _a;
|
|
18
25
|
const objects = (_a = path === null || path === void 0 ? void 0 : path.path) === null || _a === void 0 ? void 0 : _a.split(".");
|
|
@@ -88,7 +95,7 @@ let SequelizeModelScanner = class SequelizeModelScanner {
|
|
|
88
95
|
result.push(...attributes.map(a => ({
|
|
89
96
|
name: a,
|
|
90
97
|
key: sequelize_utils_1.SequelizeUtils.getAttributeFullName(a, path.path),
|
|
91
|
-
literalKey:
|
|
98
|
+
literalKey: this.dialectFormatterService.getLiteralFullName(a, path.path),
|
|
92
99
|
isJson: sequelize_utils_1.SequelizeUtils.isColumnJson(model, a)
|
|
93
100
|
})));
|
|
94
101
|
for (const include of additionalIncludes) {
|
|
@@ -100,7 +107,7 @@ let SequelizeModelScanner = class SequelizeModelScanner {
|
|
|
100
107
|
}, [], (_a = include.searchableAttributes) !== null && _a !== void 0 ? _a : include.attributes).map(a => ({
|
|
101
108
|
name: a.name,
|
|
102
109
|
key: sequelize_utils_1.SequelizeUtils.getAttributeFullName(a.name, [path.path, include.path].join(".")),
|
|
103
|
-
literalKey:
|
|
110
|
+
literalKey: this.dialectFormatterService.getLiteralFullName(a.name, [path.path, include.path].join(".")),
|
|
104
111
|
isJson: a.isJson
|
|
105
112
|
})));
|
|
106
113
|
}
|
|
@@ -118,8 +125,8 @@ let SequelizeModelScanner = class SequelizeModelScanner {
|
|
|
118
125
|
}
|
|
119
126
|
const col = sequelize_utils_1.SequelizeUtils.findColumnFieldName(model, column);
|
|
120
127
|
let literalOrder = values.length ?
|
|
121
|
-
|
|
122
|
-
|
|
128
|
+
this.dialectFormatterService.getLiteralFullName(col, values) :
|
|
129
|
+
this.dialectFormatterService.formatCol(model.name, col);
|
|
123
130
|
if (orderObj.nullLast) {
|
|
124
131
|
literalOrder = `-${literalOrder}`;
|
|
125
132
|
orderObj.direction = orderObj.direction === "asc" ? "desc" : "asc";
|
|
@@ -142,8 +149,8 @@ let SequelizeModelScanner = class SequelizeModelScanner {
|
|
|
142
149
|
group.push(value);
|
|
143
150
|
}
|
|
144
151
|
return [
|
|
145
|
-
|
|
146
|
-
|
|
152
|
+
this.dialectFormatterService.getOrderFullName("id", group),
|
|
153
|
+
this.dialectFormatterService.getOrderFullName(sequelize_utils_1.SequelizeUtils.findColumnFieldName(model, column), group)
|
|
147
154
|
];
|
|
148
155
|
}
|
|
149
156
|
getOrderIncludes(model, orderObj) {
|
|
@@ -189,7 +196,8 @@ let SequelizeModelScanner = class SequelizeModelScanner {
|
|
|
189
196
|
};
|
|
190
197
|
exports.SequelizeModelScanner = SequelizeModelScanner;
|
|
191
198
|
exports.SequelizeModelScanner = SequelizeModelScanner = __decorate([
|
|
192
|
-
(0, common_1.Injectable)()
|
|
199
|
+
(0, common_1.Injectable)(),
|
|
200
|
+
__metadata("design:paramtypes", [dialect_formatter_service_1.DialectFormatterService])
|
|
193
201
|
], SequelizeModelScanner);
|
|
194
202
|
|
|
195
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9zY2FubmVycy9zZXF1ZWxpemUtbW9kZWwuc2Nhbm5lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSwyQ0FBNEM7QUFDNUMsNERBQXFEO0FBQ3JELHlDQUFpRjtBQUNqRiwrREFBNEY7QUFLNUYsd0RBQXVEO0FBR2hELElBQU0scUJBQXFCLEdBQTNCLE1BQU0scUJBQXFCO0lBQ3ZCLFdBQVcsQ0FDZCxLQUFtQixFQUNuQixJQUFlLEVBQ2Ysa0JBQWtDLEVBQ2xDLFVBQWlDLEVBQ2pDLGdCQUFnQixHQUFHLEtBQUs7O1FBRXhCLE1BQU0sT0FBTyxHQUFHLE1BQUEsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLElBQUksMENBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxDQUFBLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxNQUFNLENBQUEsRUFBRTtZQUNsQixPQUFPLEVBQUUsQ0FBQztTQUNiO1FBRUQsTUFBTSxNQUFNLEdBQXFCLEVBQUUsQ0FBQztRQUNwQyxJQUFJLFFBQVEsR0FBcUIsTUFBTSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNWLEtBQUssTUFBTSxHQUFHLElBQUksT0FBTyxFQUFFO1lBQ3ZCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ3JELFFBQVEsQ0FBQyxJQUFJLENBQUM7Z0JBQ1YsRUFBRSxFQUFFLFdBQVcsQ0FBQyxLQUFLLEVBQVk7Z0JBQ2pDLEtBQUssRUFBRSxXQUFXLENBQUMsa0JBQWtCLEVBQUU7Z0JBQ3ZDLFVBQVUsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUU7Z0JBQ25ELE9BQU8sRUFBRSxFQUFFO2dCQUNYLFFBQVEsRUFBRSxLQUFLO2FBQ2xCLENBQUMsQ0FBQztZQUVILElBQUksQ0FBQyxFQUFFLEdBQUcsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQzFCLEtBQUssR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBZ0MsQ0FBQztnQkFDckQsUUFBUSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUEyQixDQUFDO2FBQ3REO1NBQ0o7UUFFRCxJQUFJLFVBQVUsRUFBRTtZQUNaLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsZ0NBQWMsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztTQUN2SDtRQUNELElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNaLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsZ0NBQWMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDN0UsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztTQUMxQztRQUNELElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNmLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1NBQy9CO1FBQ0QsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ1osUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1NBQ2xDO1FBRUQsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUN2QyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ3ZDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUUvQixJQUFJLHlCQUFTLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQy9DLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztTQUN4QztRQUVELE1BQU0sV0FBVyxHQUF1QixFQUFFLENBQUM7UUFDM0MsS0FBSyxNQUFNLE9BQU8sSUFBSSxrQkFBa0IsRUFBRTtZQUN0QyxXQUFXLENBQUMsSUFBSSxDQUNaLElBQUksQ0FBQyxXQUFXLENBQ1osUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQWdDLEVBQzVDO2dCQUNJLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTtnQkFDbEIsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLO2dCQUNwQixLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUs7Z0JBQ3BCLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUTtnQkFDMUIsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRO2dCQUMxQixRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVE7Z0JBQzFCLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUTtnQkFDMUIsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLO2FBQ3ZCLEVBQ0QsRUFBRSxFQUNGLE9BQU8sQ0FBQyxVQUFVLEVBQ2xCLGdCQUFnQixDQUNuQixDQUNKLENBQUM7U0FDTDtRQUVELFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsZ0NBQWMsQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLGdCQUFnQixDQUFDLENBQUMsQ0FBQztRQUUxRixPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBRU0sYUFBYSxDQUNoQixLQUFtQixFQUNuQixJQUFlLEVBQ2Ysa0JBQWtDLEVBQ2xDLFVBQWlDOztRQUVqQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRTtZQUNqQixPQUFPLEVBQUUsQ0FBQztTQUNiO1FBRUQsTUFBTSxNQUFNLEdBQTRCLEVBQUUsQ0FBQztRQUMzQyxLQUFLLE1BQU0sR0FBRyxJQUFJLE9BQU8sRUFBRTtZQUN2QixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNyRCxLQUFLLEdBQUcsV0FBVyxDQUFDLGtCQUFrQixFQUE2QixDQUFDO1NBQ3ZFO1FBQ0QsVUFBVSxHQUFHLFVBQVUsQ0FBQyxDQUFDO1lBQ3JCLGdDQUFjLENBQUMsaUNBQWlDLENBQUMsS0FBaUIsRUFBRSxVQUFzQixDQUFDLENBQUMsQ0FBQztZQUM3RixnQ0FBYyxDQUFDLDRCQUE0QixDQUFDLEtBQWlCLENBQUMsQ0FBQztRQUNuRSxNQUFNLENBQUMsSUFBSSxDQUNQLEdBQUksVUFBdUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2xDLElBQUksRUFBRSxDQUFDO1lBQ1AsR0FBRyxFQUFFLGdDQUFjLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDdEQsVUFBVSxFQUFFLGdDQUFjLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDM0QsTUFBTSxFQUFFLGdDQUFjLENBQUMsWUFBWSxDQUFDLEtBQWlCLEVBQUUsQ0FBQyxDQUFDO1NBQzVELENBQUMsQ0FBQyxDQUNOLENBQUM7UUFFRixLQUFLLE1BQU0sT0FBTyxJQUFJLGtCQUFrQixFQUFFO1lBQ3RDLElBQUksT0FBTyxDQUFDLGNBQWMsRUFBRTtnQkFDeEIsU0FBUzthQUNaO1lBRUQsTUFBTSxDQUFDLElBQUksQ0FDUCxHQUFHLElBQUksQ0FBQyxhQUFhLENBQ2pCLEtBQXFCLEVBQ3JCO2dCQUNJLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTthQUNyQixFQUNELEVBQUUsRUFDRixNQUFBLE9BQU8sQ0FBQyxvQkFBb0IsbUNBQUksT0FBTyxDQUFDLFVBQVUsQ0FDckQsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNSLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSTtnQkFDWixHQUFHLEVBQUUsZ0NBQWMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNyRixVQUFVLEVBQUUsZ0NBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUMxRixNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU07YUFDbkIsQ0FBQyxDQUFDLENBQ04sQ0FBQztTQUNMO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztJQUVNLFFBQVEsQ0FBQyxLQUFtQixFQUFFLFFBQW9CO1FBQ3JELElBQUksQ0FBQyxDQUFBLFFBQVEsYUFBUixRQUFRLHVCQUFSLFFBQVEsQ0FBRSxNQUFNLENBQUEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUU7WUFDMUMsT0FBTztTQUNWO1FBRUQsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDMUMsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzVCLEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxFQUFFO1lBQ3hCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3ZELEtBQUssR0FBRyxXQUFXLENBQUMsa0JBQWtCLEVBQTZCLENBQUM7U0FDdkU7UUFDRCxNQUFNLEdBQUcsR0FBRyxnQ0FBYyxDQUFDLG1CQUFtQixDQUFDLEtBQWlCLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDMUUsSUFBSSxZQUFZLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzlCLGdDQUFjLENBQUMsa0JBQWtCLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDaEQsS0FBSyxLQUFLLENBQUMsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBRW5DLElBQUksUUFBUSxDQUFDLFFBQVEsRUFBRTtZQUNuQixZQUFZLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUNsQyxRQUFRLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQyxTQUFTLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztTQUN0RTtRQUVELElBQUksUUFBUSxDQUFDLFNBQVMsS0FBSyxNQUFNLEVBQUU7WUFDL0IsWUFBWSxJQUFJLE9BQU8sQ0FBQztTQUMzQjtRQUNELE9BQU8sSUFBQSxtQkFBTyxFQUFDLFlBQVksQ0FBVSxDQUFDO0lBQzFDLENBQUM7SUFFTSxRQUFRLENBQUMsS0FBbUIsRUFBRSxRQUFvQjtRQUNyRCxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sSUFBSSxRQUFRLENBQUMsU0FBUyxLQUFLLEVBQUUsRUFBRTtZQUM1RCxPQUFPO1NBQ1Y7UUFFRCxNQUFNLEtBQUssR0FBYSxFQUFFLENBQUM7UUFDM0IsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDMUMsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzVCLEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxFQUFFO1lBQ3hCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3ZELEtBQUssR0FBRyxXQUFXLENBQUMsa0JBQWtCLEVBQTZCLENBQUM7WUFDcEUsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNyQjtRQUNELE9BQU87WUFDSCxnQ0FBYyxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxLQUFLLENBQUM7WUFDNUMsZ0NBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxnQ0FBYyxDQUFDLG1CQUFtQixDQUFDLEtBQWlCLEVBQUUsTUFBTSxDQUFDLEVBQUUsS0FBSyxDQUFDO1NBQ3hHLENBQUM7SUFDTixDQUFDO0lBRU0sZ0JBQWdCLENBQUMsS0FBbUIsRUFBRSxRQUFvQjtRQUM3RCxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sSUFBSSxRQUFRLENBQUMsU0FBUyxLQUFLLEVBQUUsRUFBRTtZQUM1RCxPQUFPLEVBQUUsQ0FBQztTQUNiO1FBRUQsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDMUMsSUFBSSxNQUFNLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtZQUNwQixPQUFPLEVBQUUsQ0FBQztTQUNiO1FBRUQsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzVCLE1BQU0sTUFBTSxHQUFxQixFQUFFLENBQUM7UUFDcEMsSUFBSSxRQUFRLEdBQXFCLE1BQU0sQ0FBQztRQUN4QyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDVixLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sRUFBRTtZQUN4QixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN2RCxRQUFRLENBQUMsSUFBSSxDQUFDO2dCQUNWLEVBQUUsRUFBRSxXQUFXLENBQUMsS0FBSyxFQUFZO2dCQUNqQyxLQUFLLEVBQUUsV0FBVyxDQUFDLGtCQUFrQixFQUFFO2dCQUN2QyxVQUFVLEVBQUUsRUFBRTtnQkFDZCxPQUFPLEVBQUUsRUFBRTtnQkFDWCxRQUFRLEVBQUUsS0FBSztnQkFDZixPQUFPLEVBQUUsV0FBVyxDQUFDLGNBQWMsRUFBRSxLQUFLLGtDQUFXLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztvQkFDbEUsVUFBVSxFQUFFLEVBQUU7aUJBQ2pCLENBQUMsQ0FBQyxDQUFDLFNBQVM7YUFDaEIsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDekIsS0FBSyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFnQyxDQUFDO2dCQUNyRCxRQUFRLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQTJCLENBQUM7YUFDdEQ7U0FDSjtRQUVELFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNsQyxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBRU8sZUFBZSxDQUFDLEtBQW1CLEVBQUUsR0FBVztRQUNwRCxNQUFNLFlBQVksR0FBRyxJQUFBLHNDQUFlLEVBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRXRELE1BQU0sV0FBVyxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDOUQsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNkLE1BQU0sSUFBSSxLQUFLLENBQUMsa0NBQWtDLEdBQUcsRUFBRSxDQUFDLENBQUM7U0FDNUQ7UUFDRCxPQUFPLFdBQVcsQ0FBQztJQUN2QixDQUFDO0NBQ0osQ0FBQTtBQWxPWSxzREFBcUI7Z0NBQXJCLHFCQUFxQjtJQURqQyxJQUFBLG1CQUFVLEdBQUU7R0FDQSxxQkFBcUIsQ0FrT2pDIiwiZmlsZSI6ImxpYi9zY2FubmVycy9zZXF1ZWxpemUtbW9kZWwuc2Nhbm5lci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQG5lc3Rqcy9jb21tb25cIjtcbmltcG9ydCB7IFR5cGVVdGlscyB9IGZyb20gXCJAcmVjdXJzeXZlL25lc3Rqcy1jb21tb25cIjtcbmltcG9ydCB7IEZpbmRBdHRyaWJ1dGVPcHRpb25zLCBJbmNsdWRlT3B0aW9ucywgbGl0ZXJhbCwgT3JkZXIgfSBmcm9tIFwic2VxdWVsaXplXCI7XG5pbXBvcnQgeyBBc3NvY2lhdGlvbiwgQmFzZUFzc29jaWF0aW9uLCBnZXRBc3NvY2lhdGlvbnMsIE1vZGVsIH0gZnJvbSBcInNlcXVlbGl6ZS10eXBlc2NyaXB0XCI7XG5pbXBvcnQgeyBPcmRlck1vZGVsIH0gZnJvbSBcIi4uXCI7XG5pbXBvcnQgeyBJbmNsdWRlTW9kZWwgfSBmcm9tIFwiLi5cIjtcbmltcG9ydCB7IFBhdGhNb2RlbCB9IGZyb20gXCIuLi9tb2RlbHMvcGF0aC5tb2RlbFwiO1xuaW1wb3J0IHsgU2VhcmNoQXR0cmlidXRlc01vZGVsIH0gZnJvbSBcIi4uL21vZGVscy9zZWFyY2gtYXR0cmlidXRlcy5tb2RlbFwiO1xuaW1wb3J0IHsgTSwgU2VxdWVsaXplVXRpbHMgfSBmcm9tIFwiLi4vc2VxdWVsaXplLnV0aWxzXCI7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBTZXF1ZWxpemVNb2RlbFNjYW5uZXIge1xuICAgIHB1YmxpYyBnZXRJbmNsdWRlcyhcbiAgICAgICAgbW9kZWw6IHR5cGVvZiBNb2RlbCxcbiAgICAgICAgcGF0aDogUGF0aE1vZGVsLFxuICAgICAgICBhZGRpdGlvbmFsSW5jbHVkZXM6IEluY2x1ZGVNb2RlbFtdLFxuICAgICAgICBhdHRyaWJ1dGVzPzogRmluZEF0dHJpYnV0ZU9wdGlvbnMsXG4gICAgICAgIGlnbm9yZUF0dHJpYnV0ZXMgPSBmYWxzZVxuICAgICk6IEluY2x1ZGVPcHRpb25zW10ge1xuICAgICAgICBjb25zdCBvYmplY3RzID0gcGF0aD8ucGF0aD8uc3BsaXQoXCIuXCIpO1xuICAgICAgICBpZiAoIW9iamVjdHM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzdWx0OiBJbmNsdWRlT3B0aW9uc1tdID0gW107XG4gICAgICAgIGxldCBpbmNsdWRlczogSW5jbHVkZU9wdGlvbnNbXSA9IHJlc3VsdDtcbiAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICBmb3IgKGNvbnN0IG9iaiBvZiBvYmplY3RzKSB7XG4gICAgICAgICAgICBjb25zdCBhc3NvY2lhdGlvbiA9IHRoaXMuZmluZEFzc29jaWF0aW9uKG1vZGVsLCBvYmopO1xuICAgICAgICAgICAgaW5jbHVkZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgYXM6IGFzc29jaWF0aW9uLmdldEFzKCkgYXMgc3RyaW5nLFxuICAgICAgICAgICAgICAgIG1vZGVsOiBhc3NvY2lhdGlvbi5nZXRBc3NvY2lhdGVkQ2xhc3MoKSxcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiBpZ25vcmVBdHRyaWJ1dGVzID8gW10gOiB7IGluY2x1ZGU6IFtdIH0sXG4gICAgICAgICAgICAgICAgaW5jbHVkZTogW10sXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKGkrKyA8IG9iamVjdHMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgIG1vZGVsID0gaW5jbHVkZXNbMF0ubW9kZWwgYXMgdW5rbm93biBhcyB0eXBlb2YgTW9kZWw7XG4gICAgICAgICAgICAgICAgaW5jbHVkZXMgPSBpbmNsdWRlc1swXS5pbmNsdWRlIGFzIEluY2x1ZGVPcHRpb25zW107XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYXR0cmlidXRlcykge1xuICAgICAgICAgICAgaW5jbHVkZXNbMF0uYXR0cmlidXRlcyA9IGlnbm9yZUF0dHJpYnV0ZXMgPyBbXSA6IFNlcXVlbGl6ZVV0aWxzLm1lcmdlQXR0cmlidXRlcyhpbmNsdWRlc1swXS5hdHRyaWJ1dGVzLCBhdHRyaWJ1dGVzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGF0aC53aGVyZSkge1xuICAgICAgICAgICAgaW5jbHVkZXNbMF0ud2hlcmUgPSBTZXF1ZWxpemVVdGlscy5tZXJnZVdoZXJlKGluY2x1ZGVzWzBdLndoZXJlLCBwYXRoLndoZXJlKTtcbiAgICAgICAgICAgIGluY2x1ZGVzWzBdLnJlcXVpcmVkID0gISFwYXRoLnJlcXVpcmVkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXRoLnJlcXVpcmVkKSB7XG4gICAgICAgICAgICBpbmNsdWRlc1swXS5yZXF1aXJlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhdGgubGltaXQpIHtcbiAgICAgICAgICAgIGluY2x1ZGVzWzBdLmxpbWl0ID0gcGF0aC5saW1pdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGluY2x1ZGVzWzBdLnBhcmFub2lkID0gISFwYXRoLnBhcmFub2lkO1xuICAgICAgICBpbmNsdWRlc1swXS5zZXBhcmF0ZSA9ICEhcGF0aC5zZXBhcmF0ZTtcbiAgICAgICAgaW5jbHVkZXNbMF0ub3JkZXIgPSBwYXRoLm9yZGVyO1xuXG4gICAgICAgIGlmIChUeXBlVXRpbHMuaXNOb3ROdWxsT3JVbmRlZmluZWQocGF0aC5zdWJRdWVyeSkpIHtcbiAgICAgICAgICAgIGluY2x1ZGVzWzBdLnN1YlF1ZXJ5ID0gcGF0aC5zdWJRdWVyeTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFkZEluY2x1ZGVzOiBJbmNsdWRlT3B0aW9uc1tdW10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBpbmNsdWRlIG9mIGFkZGl0aW9uYWxJbmNsdWRlcykge1xuICAgICAgICAgICAgYWRkSW5jbHVkZXMucHVzaChcbiAgICAgICAgICAgICAgICB0aGlzLmdldEluY2x1ZGVzKFxuICAgICAgICAgICAgICAgICAgICBpbmNsdWRlc1swXS5tb2RlbCBhcyB1bmtub3duIGFzIHR5cGVvZiBNb2RlbCxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGF0aDogaW5jbHVkZS5wYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgb3JkZXI6IGluY2x1ZGUub3JkZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGVyZTogaW5jbHVkZS53aGVyZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkOiBpbmNsdWRlLnJlcXVpcmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VwYXJhdGU6IGluY2x1ZGUuc2VwYXJhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbm9pZDogaW5jbHVkZS5wYXJhbm9pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YlF1ZXJ5OiBpbmNsdWRlLnN1YlF1ZXJ5LFxuICAgICAgICAgICAgICAgICAgICAgICAgbGltaXQ6IGluY2x1ZGUubGltaXRcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgW10sXG4gICAgICAgICAgICAgICAgICAgIGluY2x1ZGUuYXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICAgICAgaWdub3JlQXR0cmlidXRlc1xuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpbmNsdWRlc1swXS5pbmNsdWRlLnB1c2goLi4uU2VxdWVsaXplVXRpbHMucmVkdWNlSW5jbHVkZXMoYWRkSW5jbHVkZXMsIGlnbm9yZUF0dHJpYnV0ZXMpKTtcblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRBdHRyaWJ1dGVzKFxuICAgICAgICBtb2RlbDogdHlwZW9mIE1vZGVsLFxuICAgICAgICBwYXRoOiBQYXRoTW9kZWwsXG4gICAgICAgIGFkZGl0aW9uYWxJbmNsdWRlczogSW5jbHVkZU1vZGVsW10sXG4gICAgICAgIGF0dHJpYnV0ZXM/OiBGaW5kQXR0cmlidXRlT3B0aW9uc1xuICAgICk6IFNlYXJjaEF0dHJpYnV0ZXNNb2RlbFtdIHtcbiAgICAgICAgY29uc3Qgb2JqZWN0cyA9IHBhdGgucGF0aC5zcGxpdChcIi5cIik7XG4gICAgICAgIGlmICghb2JqZWN0cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3VsdDogU2VhcmNoQXR0cmlidXRlc01vZGVsW10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBvYmogb2Ygb2JqZWN0cykge1xuICAgICAgICAgICAgY29uc3QgYXNzb2NpYXRpb24gPSB0aGlzLmZpbmRBc3NvY2lhdGlvbihtb2RlbCwgb2JqKTtcbiAgICAgICAgICAgIG1vZGVsID0gYXNzb2NpYXRpb24uZ2V0QXNzb2NpYXRlZENsYXNzKCkgYXMgdW5rbm93biBhcyB0eXBlb2YgTW9kZWw7XG4gICAgICAgIH1cbiAgICAgICAgYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXMgP1xuICAgICAgICAgICAgU2VxdWVsaXplVXRpbHMuZ2V0TW9kZWxTZWFyY2hhYmxlRmllbGRBdHRyaWJ1dGVzKG1vZGVsIGFzIHR5cGVvZiBNLCBhdHRyaWJ1dGVzIGFzIHN0cmluZ1tdKSA6XG4gICAgICAgICAgICBTZXF1ZWxpemVVdGlscy5nZXRNb2RlbFNlYXJjaGFibGVBdHRyaWJ1dGVzKG1vZGVsIGFzIHR5cGVvZiBNKTtcbiAgICAgICAgcmVzdWx0LnB1c2goXG4gICAgICAgICAgICAuLi4oYXR0cmlidXRlcyBhcyBzdHJpbmdbXSkubWFwKGEgPT4gKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBhLFxuICAgICAgICAgICAgICAgIGtleTogU2VxdWVsaXplVXRpbHMuZ2V0QXR0cmlidXRlRnVsbE5hbWUoYSwgcGF0aC5wYXRoKSxcbiAgICAgICAgICAgICAgICBsaXRlcmFsS2V5OiBTZXF1ZWxpemVVdGlscy5nZXRMaXRlcmFsRnVsbE5hbWUoYSwgcGF0aC5wYXRoKSxcbiAgICAgICAgICAgICAgICBpc0pzb246IFNlcXVlbGl6ZVV0aWxzLmlzQ29sdW1uSnNvbihtb2RlbCBhcyB0eXBlb2YgTSwgYSlcbiAgICAgICAgICAgIH0pKVxuICAgICAgICApO1xuXG4gICAgICAgIGZvciAoY29uc3QgaW5jbHVkZSBvZiBhZGRpdGlvbmFsSW5jbHVkZXMpIHtcbiAgICAgICAgICAgIGlmIChpbmNsdWRlLmlnbm9yZUluU2VhcmNoKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKFxuICAgICAgICAgICAgICAgIC4uLnRoaXMuZ2V0QXR0cmlidXRlcyhcbiAgICAgICAgICAgICAgICAgICAgbW9kZWwgYXMgdHlwZW9mIE1vZGVsLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRoOiBpbmNsdWRlLnBhdGhcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgW10sXG4gICAgICAgICAgICAgICAgICAgIGluY2x1ZGUuc2VhcmNoYWJsZUF0dHJpYnV0ZXMgPz8gaW5jbHVkZS5hdHRyaWJ1dGVzXG4gICAgICAgICAgICAgICAgKS5tYXAoYSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBhLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGtleTogU2VxdWVsaXplVXRpbHMuZ2V0QXR0cmlidXRlRnVsbE5hbWUoYS5uYW1lLCBbcGF0aC5wYXRoLCBpbmNsdWRlLnBhdGhdLmpvaW4oXCIuXCIpKSxcbiAgICAgICAgICAgICAgICAgICAgbGl0ZXJhbEtleTogU2VxdWVsaXplVXRpbHMuZ2V0TGl0ZXJhbEZ1bGxOYW1lKGEubmFtZSwgW3BhdGgucGF0aCwgaW5jbHVkZS5wYXRoXS5qb2luKFwiLlwiKSksXG4gICAgICAgICAgICAgICAgICAgIGlzSnNvbjogYS5pc0pzb25cbiAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRPcmRlcihtb2RlbDogdHlwZW9mIE1vZGVsLCBvcmRlck9iajogT3JkZXJNb2RlbCk6IE9yZGVyIHtcbiAgICAgICAgaWYgKCFvcmRlck9iaj8uY29sdW1uIHx8ICFvcmRlck9iai5kaXJlY3Rpb24pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IG9yZGVyT2JqLmNvbHVtbi5zcGxpdChcIi5cIik7XG4gICAgICAgIGNvbnN0IGNvbHVtbiA9IHZhbHVlcy5wb3AoKTtcbiAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGFzc29jaWF0aW9uID0gdGhpcy5maW5kQXNzb2NpYXRpb24obW9kZWwsIHZhbHVlKTtcbiAgICAgICAgICAgIG1vZGVsID0gYXNzb2NpYXRpb24uZ2V0QXNzb2NpYXRlZENsYXNzKCkgYXMgdW5rbm93biBhcyB0eXBlb2YgTW9kZWw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29sID0gU2VxdWVsaXplVXRpbHMuZmluZENvbHVtbkZpZWxkTmFtZShtb2RlbCBhcyB0eXBlb2YgTSwgY29sdW1uKTtcbiAgICAgICAgbGV0IGxpdGVyYWxPcmRlciA9IHZhbHVlcy5sZW5ndGggP1xuICAgICAgICAgICAgU2VxdWVsaXplVXRpbHMuZ2V0TGl0ZXJhbEZ1bGxOYW1lKGNvbCwgdmFsdWVzKSA6XG4gICAgICAgICAgICBgXFxgJHttb2RlbC5uYW1lfVxcYC5cXGAke2NvbH1cXGBgO1xuXG4gICAgICAgIGlmIChvcmRlck9iai5udWxsTGFzdCkge1xuICAgICAgICAgICAgbGl0ZXJhbE9yZGVyID0gYC0ke2xpdGVyYWxPcmRlcn1gO1xuICAgICAgICAgICAgb3JkZXJPYmouZGlyZWN0aW9uID0gb3JkZXJPYmouZGlyZWN0aW9uID09PSBcImFzY1wiID8gXCJkZXNjXCIgOiBcImFzY1wiO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9yZGVyT2JqLmRpcmVjdGlvbiA9PT0gXCJkZXNjXCIpIHtcbiAgICAgICAgICAgIGxpdGVyYWxPcmRlciArPSBgIERFU0NgO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsaXRlcmFsKGxpdGVyYWxPcmRlcikgYXMgT3JkZXI7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEdyb3VwKG1vZGVsOiB0eXBlb2YgTW9kZWwsIG9yZGVyT2JqOiBPcmRlck1vZGVsKTogc3RyaW5nW10ge1xuICAgICAgICBpZiAoIW9yZGVyT2JqIHx8ICFvcmRlck9iai5jb2x1bW4gfHwgb3JkZXJPYmouZGlyZWN0aW9uID09PSBcIlwiKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBncm91cDogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gb3JkZXJPYmouY29sdW1uLnNwbGl0KFwiLlwiKTtcbiAgICAgICAgY29uc3QgY29sdW1uID0gdmFsdWVzLnBvcCgpO1xuICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgICAgICAgY29uc3QgYXNzb2NpYXRpb24gPSB0aGlzLmZpbmRBc3NvY2lhdGlvbihtb2RlbCwgdmFsdWUpO1xuICAgICAgICAgICAgbW9kZWwgPSBhc3NvY2lhdGlvbi5nZXRBc3NvY2lhdGVkQ2xhc3MoKSBhcyB1bmtub3duIGFzIHR5cGVvZiBNb2RlbDtcbiAgICAgICAgICAgIGdyb3VwLnB1c2godmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBTZXF1ZWxpemVVdGlscy5nZXRPcmRlckZ1bGxOYW1lKFwiaWRcIiwgZ3JvdXApLFxuICAgICAgICAgICAgU2VxdWVsaXplVXRpbHMuZ2V0T3JkZXJGdWxsTmFtZShTZXF1ZWxpemVVdGlscy5maW5kQ29sdW1uRmllbGROYW1lKG1vZGVsIGFzIHR5cGVvZiBNLCBjb2x1bW4pLCBncm91cClcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0T3JkZXJJbmNsdWRlcyhtb2RlbDogdHlwZW9mIE1vZGVsLCBvcmRlck9iajogT3JkZXJNb2RlbCk6IEluY2x1ZGVPcHRpb25zW10ge1xuICAgICAgICBpZiAoIW9yZGVyT2JqIHx8ICFvcmRlck9iai5jb2x1bW4gfHwgb3JkZXJPYmouZGlyZWN0aW9uID09PSBcIlwiKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB2YWx1ZXMgPSBvcmRlck9iai5jb2x1bW4uc3BsaXQoXCIuXCIpO1xuICAgICAgICBpZiAodmFsdWVzLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjb2x1bW4gPSB2YWx1ZXMucG9wKCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdDogSW5jbHVkZU9wdGlvbnNbXSA9IFtdO1xuICAgICAgICBsZXQgaW5jbHVkZXM6IEluY2x1ZGVPcHRpb25zW10gPSByZXN1bHQ7XG4gICAgICAgIGxldCBpID0gMDtcbiAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGFzc29jaWF0aW9uID0gdGhpcy5maW5kQXNzb2NpYXRpb24obW9kZWwsIHZhbHVlKTtcbiAgICAgICAgICAgIGluY2x1ZGVzLnB1c2goe1xuICAgICAgICAgICAgICAgIGFzOiBhc3NvY2lhdGlvbi5nZXRBcygpIGFzIHN0cmluZyxcbiAgICAgICAgICAgICAgICBtb2RlbDogYXNzb2NpYXRpb24uZ2V0QXNzb2NpYXRlZENsYXNzKCksXG4gICAgICAgICAgICAgICAgYXR0cmlidXRlczogW10sXG4gICAgICAgICAgICAgICAgaW5jbHVkZTogW10sXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHRocm91Z2g6IGFzc29jaWF0aW9uLmdldEFzc29jaWF0aW9uKCkgPT09IEFzc29jaWF0aW9uLkJlbG9uZ3NUb01hbnkgPyB7XG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IFtdXG4gICAgICAgICAgICAgICAgfSA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChpKysgPCB2YWx1ZXMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgIG1vZGVsID0gaW5jbHVkZXNbMF0ubW9kZWwgYXMgdW5rbm93biBhcyB0eXBlb2YgTW9kZWw7XG4gICAgICAgICAgICAgICAgaW5jbHVkZXMgPSBpbmNsdWRlc1swXS5pbmNsdWRlIGFzIEluY2x1ZGVPcHRpb25zW107XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpbmNsdWRlc1swXS5hdHRyaWJ1dGVzID0gW2NvbHVtbl07XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmaW5kQXNzb2NpYXRpb24obW9kZWw6IHR5cGVvZiBNb2RlbCwgb2JqOiBzdHJpbmcpOiBCYXNlQXNzb2NpYXRpb248YW55LCBhbnk+IHtcbiAgICAgICAgY29uc3QgYXNzb2NpYXRpb25zID0gZ2V0QXNzb2NpYXRpb25zKG1vZGVsLnByb3RvdHlwZSk7XG5cbiAgICAgICAgY29uc3QgYXNzb2NpYXRpb24gPSBhc3NvY2lhdGlvbnMuZmluZChhID0+IGEuZ2V0QXMoKSA9PT0gb2JqKTtcbiAgICAgICAgaWYgKCFhc3NvY2lhdGlvbikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gbG9hZCBhc3NvY2lhdGlvbiBmb3IgJHtvYmp9YCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFzc29jaWF0aW9uO1xuICAgIH1cbn1cbiJdfQ==
|
|
203
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9zY2FubmVycy9zZXF1ZWxpemUtbW9kZWwuc2Nhbm5lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQSwyQ0FBNEM7QUFDNUMsNERBQXFEO0FBQ3JELHlDQUFpRjtBQUNqRiwrREFBNEY7QUFJNUYsd0RBQXVEO0FBQ3ZELHFGQUFnRjtBQUd6RSxJQUFNLHFCQUFxQixHQUEzQixNQUFNLHFCQUFxQjtJQUM5QixZQUFvQix1QkFBZ0Q7UUFBaEQsNEJBQXVCLEdBQXZCLHVCQUF1QixDQUF5QjtJQUFHLENBQUM7SUFFakUsV0FBVyxDQUNkLEtBQW1CLEVBQ25CLElBQWUsRUFDZixrQkFBa0MsRUFDbEMsVUFBaUMsRUFDakMsZ0JBQWdCLEdBQUcsS0FBSzs7UUFFeEIsTUFBTSxPQUFPLEdBQUcsTUFBQSxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsSUFBSSwwQ0FBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLENBQUEsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLE1BQU0sQ0FBQSxFQUFFO1lBQ2xCLE9BQU8sRUFBRSxDQUFDO1NBQ2I7UUFFRCxNQUFNLE1BQU0sR0FBcUIsRUFBRSxDQUFDO1FBQ3BDLElBQUksUUFBUSxHQUFxQixNQUFNLENBQUM7UUFDeEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ1YsS0FBSyxNQUFNLEdBQUcsSUFBSSxPQUFPLEVBQUU7WUFDdkIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDckQsUUFBUSxDQUFDLElBQUksQ0FBQztnQkFDVixFQUFFLEVBQUUsV0FBVyxDQUFDLEtBQUssRUFBWTtnQkFDakMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxrQkFBa0IsRUFBRTtnQkFDdkMsVUFBVSxFQUFFLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFD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Q0FBQztJQUN2QixDQUFDO0NBQ0osQ0FBQTtBQXBPWSxzREFBcUI7Z0NBQXJCLHFCQUFxQjtJQURqQyxJQUFBLG1CQUFVLEdBQUU7cUNBRW9DLG1EQUF1QjtHQUQzRCxxQkFBcUIsQ0FvT2pDIiwiZmlsZSI6ImxpYi9zY2FubmVycy9zZXF1ZWxpemUtbW9kZWwuc2Nhbm5lci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQG5lc3Rqcy9jb21tb25cIjtcbmltcG9ydCB7IFR5cGVVdGlscyB9IGZyb20gXCJAcmVjdXJzeXZlL25lc3Rqcy1jb21tb25cIjtcbmltcG9ydCB7IEZpbmRBdHRyaWJ1dGVPcHRpb25zLCBJbmNsdWRlT3B0aW9ucywgbGl0ZXJhbCwgT3JkZXIgfSBmcm9tIFwic2VxdWVsaXplXCI7XG5pbXBvcnQgeyBBc3NvY2lhdGlvbiwgQmFzZUFzc29jaWF0aW9uLCBnZXRBc3NvY2lhdGlvbnMsIE1vZGVsIH0gZnJvbSBcInNlcXVlbGl6ZS10eXBlc2NyaXB0XCI7XG5pbXBvcnQgeyBJbmNsdWRlTW9kZWwsIE9yZGVyTW9kZWwgfSBmcm9tIFwiLi5cIjtcbmltcG9ydCB7IFBhdGhNb2RlbCB9IGZyb20gXCIuLi9tb2RlbHMvcGF0aC5tb2RlbFwiO1xuaW1wb3J0IHsgU2VhcmNoQXR0cmlidXRlc01vZGVsIH0gZnJvbSBcIi4uL21vZGVscy9zZWFyY2gtYXR0cmlidXRlcy5tb2RlbFwiO1xuaW1wb3J0IHsgTSwgU2VxdWVsaXplVXRpbHMgfSBmcm9tIFwiLi4vc2VxdWVsaXplLnV0aWxzXCI7XG5pbXBvcnQgeyBEaWFsZWN0Rm9ybWF0dGVyU2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy9kaWFsZWN0LWZvcm1hdHRlci5zZXJ2aWNlXCI7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBTZXF1ZWxpemVNb2RlbFNjYW5uZXIge1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgZGlhbGVjdEZvcm1hdHRlclNlcnZpY2U6IERpYWxlY3RGb3JtYXR0ZXJTZXJ2aWNlKSB7fVxuXG4gICAgcHVibGljIGdldEluY2x1ZGVzKFxuICAgICAgICBtb2RlbDogdHlwZW9mIE1vZGVsLFxuICAgICAgICBwYXRoOiBQYXRoTW9kZWwsXG4gICAgICAgIGFkZGl0aW9uYWxJbmNsdWRlczogSW5jbHVkZU1vZGVsW10sXG4gICAgICAgIGF0dHJpYnV0ZXM/OiBGaW5kQXR0cmlidXRlT3B0aW9ucyxcbiAgICAgICAgaWdub3JlQXR0cmlidXRlcyA9IGZhbHNlXG4gICAgKTogSW5jbHVkZU9wdGlvbnNbXSB7XG4gICAgICAgIGNvbnN0IG9iamVjdHMgPSBwYXRoPy5wYXRoPy5zcGxpdChcIi5cIik7XG4gICAgICAgIGlmICghb2JqZWN0cz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXN1bHQ6IEluY2x1ZGVPcHRpb25zW10gPSBbXTtcbiAgICAgICAgbGV0IGluY2x1ZGVzOiBJbmNsdWRlT3B0aW9uc1tdID0gcmVzdWx0O1xuICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgIGZvciAoY29uc3Qgb2JqIG9mIG9iamVjdHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGFzc29jaWF0aW9uID0gdGhpcy5maW5kQXNzb2NpYXRpb24obW9kZWwsIG9iaik7XG4gICAgICAgICAgICBpbmNsdWRlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBhczogYXNzb2NpYXRpb24uZ2V0QXMoKSBhcyBzdHJpbmcsXG4gICAgICAgICAgICAgICAgbW9kZWw6IGFzc29jaWF0aW9uLmdldEFzc29jaWF0ZWRDbGFzcygpLFxuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IGlnbm9yZUF0dHJpYnV0ZXMgPyBbXSA6IHsgaW5jbHVkZTogW10gfSxcbiAgICAgICAgICAgICAgICBpbmNsdWRlOiBbXSxcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogZmFsc2VcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAoaSsrIDwgb2JqZWN0cy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgbW9kZWwgPSBpbmNsdWRlc1swXS5tb2RlbCBhcyB1bmtub3duIGFzIHR5cGVvZiBNb2RlbDtcbiAgICAgICAgICAgICAgICBpbmNsdWRlcyA9IGluY2x1ZGVzWzBdLmluY2x1ZGUgYXMgSW5jbHVkZU9wdGlvbnNbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhdHRyaWJ1dGVzKSB7XG4gICAgICAgICAgICBpbmNsdWRlc1swXS5hdHRyaWJ1dGVzID0gaWdub3JlQXR0cmlidXRlcyA/IFtdIDogU2VxdWVsaXplVXRpbHMubWVyZ2VBdHRyaWJ1dGVzKGluY2x1ZGVzWzBdLmF0dHJpYnV0ZXMsIGF0dHJpYnV0ZXMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXRoLndoZXJlKSB7XG4gICAgICAgICAgICBpbmNsdWRlc1swXS53aGVyZSA9IFNlcXVlbGl6ZVV0aWxzLm1lcmdlV2hlcmUoaW5jbHVkZXNbMF0ud2hlcmUsIHBhdGgud2hlcmUpO1xuICAgICAgICAgICAgaW5jbHVkZXNbMF0ucmVxdWlyZWQgPSAhIXBhdGgucmVxdWlyZWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhdGgucmVxdWlyZWQpIHtcbiAgICAgICAgICAgIGluY2x1ZGVzWzBdLnJlcXVpcmVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGF0aC5saW1pdCkge1xuICAgICAgICAgICAgaW5jbHVkZXNbMF0ubGltaXQgPSBwYXRoLmxpbWl0O1xuICAgICAgICB9XG5cbiAgICAgICAgaW5jbHVkZXNbMF0ucGFyYW5vaWQgPSAhIXBhdGgucGFyYW5vaWQ7XG4gICAgICAgIGluY2x1ZGVzWzBdLnNlcGFyYXRlID0gISFwYXRoLnNlcGFyYXRlO1xuICAgICAgICBpbmNsdWRlc1swXS5vcmRlciA9IHBhdGgub3JkZXI7XG5cbiAgICAgICAgaWYgKFR5cGVVdGlscy5pc05vdE51bGxPclVuZGVmaW5lZChwYXRoLnN1YlF1ZXJ5KSkge1xuICAgICAgICAgICAgaW5jbHVkZXNbMF0uc3ViUXVlcnkgPSBwYXRoLnN1YlF1ZXJ5O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYWRkSW5jbHVkZXM6IEluY2x1ZGVPcHRpb25zW11bXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGluY2x1ZGUgb2YgYWRkaXRpb25hbEluY2x1ZGVzKSB7XG4gICAgICAgICAgICBhZGRJbmNsdWRlcy5wdXNoKFxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0SW5jbHVkZXMoXG4gICAgICAgICAgICAgICAgICAgIGluY2x1ZGVzWzBdLm1vZGVsIGFzIHVua25vd24gYXMgdHlwZW9mIE1vZGVsLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRoOiBpbmNsdWRlLnBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBvcmRlcjogaW5jbHVkZS5vcmRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlOiBpbmNsdWRlLndoZXJlLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ6IGluY2x1ZGUucmVxdWlyZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXBhcmF0ZTogaW5jbHVkZS5zZXBhcmF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFub2lkOiBpbmNsdWRlLnBhcmFub2lkLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3ViUXVlcnk6IGluY2x1ZGUuc3ViUXVlcnksXG4gICAgICAgICAgICAgICAgICAgICAgICBsaW1pdDogaW5jbHVkZS5saW1pdFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBbXSxcbiAgICAgICAgICAgICAgICAgICAgaW5jbHVkZS5hdHRyaWJ1dGVzLFxuICAgICAgICAgICAgICAgICAgICBpZ25vcmVBdHRyaWJ1dGVzXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGluY2x1ZGVzWzBdLmluY2x1ZGUucHVzaCguLi5TZXF1ZWxpemVVdGlscy5yZWR1Y2VJbmNsdWRlcyhhZGRJbmNsdWRlcywgaWdub3JlQXR0cmlidXRlcykpO1xuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEF0dHJpYnV0ZXMoXG4gICAgICAgIG1vZGVsOiB0eXBlb2YgTW9kZWwsXG4gICAgICAgIHBhdGg6IFBhdGhNb2RlbCxcbiAgICAgICAgYWRkaXRpb25hbEluY2x1ZGVzOiBJbmNsdWRlTW9kZWxbXSxcbiAgICAgICAgYXR0cmlidXRlcz86IEZpbmRBdHRyaWJ1dGVPcHRpb25zXG4gICAgKTogU2VhcmNoQXR0cmlidXRlc01vZGVsW10ge1xuICAgICAgICBjb25zdCBvYmplY3RzID0gcGF0aC5wYXRoLnNwbGl0KFwiLlwiKTtcbiAgICAgICAgaWYgKCFvYmplY3RzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzdWx0OiBTZWFyY2hBdHRyaWJ1dGVzTW9kZWxbXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IG9iaiBvZiBvYmplY3RzKSB7XG4gICAgICAgICAgICBjb25zdCBhc3NvY2lhdGlvbiA9IHRoaXMuZmluZEFzc29jaWF0aW9uKG1vZGVsLCBvYmopO1xuICAgICAgICAgICAgbW9kZWwgPSBhc3NvY2lhdGlvbi5nZXRBc3NvY2lhdGVkQ2xhc3MoKSBhcyB1bmtub3duIGFzIHR5cGVvZiBNb2RlbDtcbiAgICAgICAgfVxuICAgICAgICBhdHRyaWJ1dGVzID0gYXR0cmlidXRlcyA/XG4gICAgICAgICAgICBTZXF1ZWxpemVVdGlscy5nZXRNb2RlbFNlYXJjaGFibGVGaWVsZEF0dHJpYnV0ZXMobW9kZWwgYXMgdHlwZW9mIE0sIGF0dHJpYnV0ZXMgYXMgc3RyaW5nW10pIDpcbiAgICAgICAgICAgIFNlcXVlbGl6ZVV0aWxzLmdldE1vZGVsU2VhcmNoYWJsZUF0dHJpYnV0ZXMobW9kZWwgYXMgdHlwZW9mIE0pO1xuICAgICAgICByZXN1bHQucHVzaChcbiAgICAgICAgICAgIC4uLihhdHRyaWJ1dGVzIGFzIHN0cmluZ1tdKS5tYXAoYSA9PiAoe1xuICAgICAgICAgICAgICAgIG5hbWU6IGEsXG4gICAgICAgICAgICAgICAga2V5OiBTZXF1ZWxpemVVdGlscy5nZXRBdHRyaWJ1dGVGdWxsTmFtZShhLCBwYXRoLnBhdGgpLFxuICAgICAgICAgICAgICAgIGxpdGVyYWxLZXk6IHRoaXMuZGlhbGVjdEZvcm1hdHRlclNlcnZpY2UuZ2V0TGl0ZXJhbEZ1bGxOYW1lKGEsIHBhdGgucGF0aCksXG4gICAgICAgICAgICAgICAgaXNKc29uOiBTZXF1ZWxpemVVdGlscy5pc0NvbHVtbkpzb24obW9kZWwgYXMgdHlwZW9mIE0sIGEpXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgKTtcblxuICAgICAgICBmb3IgKGNvbnN0IGluY2x1ZGUgb2YgYWRkaXRpb25hbEluY2x1ZGVzKSB7XG4gICAgICAgICAgICBpZiAoaW5jbHVkZS5pZ25vcmVJblNlYXJjaCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXN1bHQucHVzaChcbiAgICAgICAgICAgICAgICAuLi50aGlzLmdldEF0dHJpYnV0ZXMoXG4gICAgICAgICAgICAgICAgICAgIG1vZGVsIGFzIHR5cGVvZiBNb2RlbCxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGF0aDogaW5jbHVkZS5wYXRoXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFtdLFxuICAgICAgICAgICAgICAgICAgICBpbmNsdWRlLnNlYXJjaGFibGVBdHRyaWJ1dGVzID8/IGluY2x1ZGUuYXR0cmlidXRlc1xuICAgICAgICAgICAgICAgICkubWFwKGEgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogYS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICBrZXk6IFNlcXVlbGl6ZVV0aWxzLmdldEF0dHJpYnV0ZUZ1bGxOYW1lKGEubmFtZSwgW3BhdGgucGF0aCwgaW5jbHVkZS5wYXRoXS5qb2luKFwiLlwiKSksXG4gICAgICAgICAgICAgICAgICAgIGxpdGVyYWxLZXk6IHRoaXMuZGlhbGVjdEZvcm1hdHRlclNlcnZpY2UuZ2V0TGl0ZXJhbEZ1bGxOYW1lKGEubmFtZSwgW3BhdGgucGF0aCwgaW5jbHVkZS5wYXRoXS5qb2luKFwiLlwiKSksXG4gICAgICAgICAgICAgICAgICAgIGlzSnNvbjogYS5pc0pzb25cbiAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRPcmRlcihtb2RlbDogdHlwZW9mIE1vZGVsLCBvcmRlck9iajogT3JkZXJNb2RlbCk6IE9yZGVyIHtcbiAgICAgICAgaWYgKCFvcmRlck9iaj8uY29sdW1uIHx8ICFvcmRlck9iai5kaXJlY3Rpb24pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IG9yZGVyT2JqLmNvbHVtbi5zcGxpdChcIi5cIik7XG4gICAgICAgIGNvbnN0IGNvbHVtbiA9IHZhbHVlcy5wb3AoKTtcbiAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGFzc29jaWF0aW9uID0gdGhpcy5maW5kQXNzb2NpYXRpb24obW9kZWwsIHZhbHVlKTtcbiAgICAgICAgICAgIG1vZGVsID0gYXNzb2NpYXRpb24uZ2V0QXNzb2NpYXRlZENsYXNzKCkgYXMgdW5rbm93biBhcyB0eXBlb2YgTW9kZWw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29sID0gU2VxdWVsaXplVXRpbHMuZmluZENvbHVtbkZpZWxkTmFtZShtb2RlbCBhcyB0eXBlb2YgTSwgY29sdW1uKTtcbiAgICAgICAgbGV0IGxpdGVyYWxPcmRlciA9IHZhbHVlcy5sZW5ndGggP1xuICAgICAgICAgICAgdGhpcy5kaWFsZWN0Rm9ybWF0dGVyU2VydmljZS5nZXRMaXRlcmFsRnVsbE5hbWUoY29sLCB2YWx1ZXMpIDpcbiAgICAgICAgICAgIHRoaXMuZGlhbGVjdEZvcm1hdHRlclNlcnZpY2UuZm9ybWF0Q29sKG1vZGVsLm5hbWUsIGNvbCk7XG5cbiAgICAgICAgaWYgKG9yZGVyT2JqLm51bGxMYXN0KSB7XG4gICAgICAgICAgICBsaXRlcmFsT3JkZXIgPSBgLSR7bGl0ZXJhbE9yZGVyfWA7XG4gICAgICAgICAgICBvcmRlck9iai5kaXJlY3Rpb24gPSBvcmRlck9iai5kaXJlY3Rpb24gPT09IFwiYXNjXCIgPyBcImRlc2NcIiA6IFwiYXNjXCI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3JkZXJPYmouZGlyZWN0aW9uID09PSBcImRlc2NcIikge1xuICAgICAgICAgICAgbGl0ZXJhbE9yZGVyICs9IGAgREVTQ2A7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxpdGVyYWwobGl0ZXJhbE9yZGVyKSBhcyBPcmRlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0R3JvdXAobW9kZWw6IHR5cGVvZiBNb2RlbCwgb3JkZXJPYmo6IE9yZGVyTW9kZWwpOiBzdHJpbmdbXSB7XG4gICAgICAgIGlmICghb3JkZXJPYmogfHwgIW9yZGVyT2JqLmNvbHVtbiB8fCBvcmRlck9iai5kaXJlY3Rpb24gPT09IFwiXCIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGdyb3VwOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSBvcmRlck9iai5jb2x1bW4uc3BsaXQoXCIuXCIpO1xuICAgICAgICBjb25zdCBjb2x1bW4gPSB2YWx1ZXMucG9wKCk7XG4gICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICAgICAgICBjb25zdCBhc3NvY2lhdGlvbiA9IHRoaXMuZmluZEFzc29jaWF0aW9uKG1vZGVsLCB2YWx1ZSk7XG4gICAgICAgICAgICBtb2RlbCA9IGFzc29jaWF0aW9uLmdldEFzc29jaWF0ZWRDbGFzcygpIGFzIHVua25vd24gYXMgdHlwZW9mIE1vZGVsO1xuICAgICAgICAgICAgZ3JvdXAucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHRoaXMuZGlhbGVjdEZvcm1hdHRlclNlcnZpY2UuZ2V0T3JkZXJGdWxsTmFtZShcImlkXCIsIGdyb3VwKSxcbiAgICAgICAgICAgIHRoaXMuZGlhbGVjdEZvcm1hdHRlclNlcnZpY2UuZ2V0T3JkZXJGdWxsTmFtZShTZXF1ZWxpemVVdGlscy5maW5kQ29sdW1uRmllbGROYW1lKG1vZGVsIGFzIHR5cGVvZiBNLCBjb2x1bW4pLCBncm91cClcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0T3JkZXJJbmNsdWRlcyhtb2RlbDogdHlwZW9mIE1vZGVsLCBvcmRlck9iajogT3JkZXJNb2RlbCk6IEluY2x1ZGVPcHRpb25zW10ge1xuICAgICAgICBpZiAoIW9yZGVyT2JqIHx8ICFvcmRlck9iai5jb2x1bW4gfHwgb3JkZXJPYmouZGlyZWN0aW9uID09PSBcIlwiKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB2YWx1ZXMgPSBvcmRlck9iai5jb2x1bW4uc3BsaXQoXCIuXCIpO1xuICAgICAgICBpZiAodmFsdWVzLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjb2x1bW4gPSB2YWx1ZXMucG9wKCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdDogSW5jbHVkZU9wdGlvbnNbXSA9IFtdO1xuICAgICAgICBsZXQgaW5jbHVkZXM6IEluY2x1ZGVPcHRpb25zW10gPSByZXN1bHQ7XG4gICAgICAgIGxldCBpID0gMDtcbiAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGFzc29jaWF0aW9uID0gdGhpcy5maW5kQXNzb2NpYXRpb24obW9kZWwsIHZhbHVlKTtcbiAgICAgICAgICAgIGluY2x1ZGVzLnB1c2goe1xuICAgICAgICAgICAgICAgIGFzOiBhc3NvY2lhdGlvbi5nZXRBcygpIGFzIHN0cmluZyxcbiAgICAgICAgICAgICAgICBtb2RlbDogYXNzb2NpYXRpb24uZ2V0QXNzb2NpYXRlZENsYXNzKCksXG4gICAgICAgICAgICAgICAgYXR0cmlidXRlczogW10sXG4gICAgICAgICAgICAgICAgaW5jbHVkZTogW10sXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHRocm91Z2g6IGFzc29jaWF0aW9uLmdldEFzc29jaWF0aW9uKCkgPT09IEFzc29jaWF0aW9uLkJlbG9uZ3NUb01hbnkgPyB7XG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IFtdXG4gICAgICAgICAgICAgICAgfSA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChpKysgPCB2YWx1ZXMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgIG1vZGVsID0gaW5jbHVkZXNbMF0ubW9kZWwgYXMgdW5rbm93biBhcyB0eXBlb2YgTW9kZWw7XG4gICAgICAgICAgICAgICAgaW5jbHVkZXMgPSBpbmNsdWRlc1swXS5pbmNsdWRlIGFzIEluY2x1ZGVPcHRpb25zW107XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpbmNsdWRlc1swXS5hdHRyaWJ1dGVzID0gW2NvbHVtbl07XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmaW5kQXNzb2NpYXRpb24obW9kZWw6IHR5cGVvZiBNb2RlbCwgb2JqOiBzdHJpbmcpOiBCYXNlQXNzb2NpYXRpb248YW55LCBhbnk+IHtcbiAgICAgICAgY29uc3QgYXNzb2NpYXRpb25zID0gZ2V0QXNzb2NpYXRpb25zKG1vZGVsLnByb3RvdHlwZSk7XG5cbiAgICAgICAgY29uc3QgYXNzb2NpYXRpb24gPSBhc3NvY2lhdGlvbnMuZmluZChhID0+IGEuZ2V0QXMoKSA9PT0gb2JqKTtcbiAgICAgICAgaWYgKCFhc3NvY2lhdGlvbikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gbG9hZCBhc3NvY2lhdGlvbiBmb3IgJHtvYmp9YCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFzc29jaWF0aW9uO1xuICAgIH1cbn1cbiJdfQ==
|
package/lib/sequelize.utils.d.ts
CHANGED
|
@@ -18,13 +18,10 @@ export declare class SequelizeUtils {
|
|
|
18
18
|
static mergeOrder(a: Order, b: Order): Order;
|
|
19
19
|
static generateWhereValue(rule: RuleModel): WhereAttributeHashValue<any>;
|
|
20
20
|
static getAttributeFullName(attribute: string, path: string): string;
|
|
21
|
-
static getLiteralFullName(attribute: string, path: string | string[]): string;
|
|
22
|
-
static getOrderFullName(attribute: string, path: string[]): string;
|
|
23
21
|
static getModelSearchableAttributes(model: typeof M): string[];
|
|
24
22
|
static getModelSearchableFieldAttributes(model: typeof M, fields: string[]): string[];
|
|
25
23
|
static reduceModelFromPath(model: M, path: string): any;
|
|
26
24
|
static findColumnFieldName(model: typeof M, name: string): string;
|
|
27
25
|
static isColumnJson(model: typeof M, name: string): boolean;
|
|
28
|
-
static getGroupLiteral(model: typeof M, group: string): string;
|
|
29
26
|
static generateWhereConditions(model: IncludeWhereModel, options?: object): WhereOptions;
|
|
30
27
|
}
|
package/lib/sequelize.utils.js
CHANGED
|
@@ -207,15 +207,6 @@ class SequelizeUtils {
|
|
|
207
207
|
static getAttributeFullName(attribute, path) {
|
|
208
208
|
return `$${path}.${attribute}$`;
|
|
209
209
|
}
|
|
210
|
-
static getLiteralFullName(attribute, path) {
|
|
211
|
-
if (typeof path === "string") {
|
|
212
|
-
path = path.split(".");
|
|
213
|
-
}
|
|
214
|
-
return `\`${path.join("->")}\`.\`${attribute}\``;
|
|
215
|
-
}
|
|
216
|
-
static getOrderFullName(attribute, path) {
|
|
217
|
-
return `${path.join("->")}.${attribute}`;
|
|
218
|
-
}
|
|
219
210
|
static getModelSearchableAttributes(model) {
|
|
220
211
|
return Object.keys(model.rawAttributes).filter(a => !["DATE", "DATEONLY", "VIRTUAL"].some(t => t === model.rawAttributes[a].type.key)).map(x => {
|
|
221
212
|
const attr = model.rawAttributes[x];
|
|
@@ -282,14 +273,6 @@ class SequelizeUtils {
|
|
|
282
273
|
const attr = (_a = model.rawAttributes[name]) !== null && _a !== void 0 ? _a : Object.values(model.rawAttributes).find((x) => x.field === name);
|
|
283
274
|
return ((_b = attr === null || attr === void 0 ? void 0 : attr.type) === null || _b === void 0 ? void 0 : _b.key) === "JSON";
|
|
284
275
|
}
|
|
285
|
-
static getGroupLiteral(model, group) {
|
|
286
|
-
const items = group.split(".");
|
|
287
|
-
if (items.length > 1) {
|
|
288
|
-
const column = items[items.length - 1];
|
|
289
|
-
return SequelizeUtils.getLiteralFullName(column, items.slice(0, items.length - 1));
|
|
290
|
-
}
|
|
291
|
-
return `\`${model.name}\`.\`${group}\``;
|
|
292
|
-
}
|
|
293
276
|
static generateWhereConditions(model, options) {
|
|
294
277
|
const where = {};
|
|
295
278
|
const keys = [
|
|
@@ -310,4 +293,4 @@ class SequelizeUtils {
|
|
|
310
293
|
}
|
|
311
294
|
exports.SequelizeUtils = SequelizeUtils;
|
|
312
295
|
|
|
313
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,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T0FBTyxjQUFjLENBQUMsa0JBQWtCLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN0RjtRQUVELE9BQU8sS0FBSyxLQUFLLENBQUMsSUFBSSxRQUFRLEtBQUssSUFBSSxDQUFDO0lBQzVDLENBQUM7SUFFTSxNQUFNLENBQUMsdUJBQXVCLENBQUMsS0FBd0IsRUFBRSxPQUFnQjtRQUM1RSxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDakIsTUFBTSxJQUFJLEdBQUc7WUFDVCxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO1lBQ3JCLEdBQUcsTUFBTSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQztTQUN6QyxDQUFDO1FBQ0YsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUU7WUFDcEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQzVCLFNBQVM7YUFDWjtZQUVELE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxHQUFVLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN6QyxJQUFJLE9BQU8sS0FBSyxLQUFLLFdBQVcsRUFBRTtnQkFDOUIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQzthQUN0QjtTQUNKO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztDQUNKO0FBNVdELHdDQTRXQyIsImZpbGUiOiJsaWIvc2VxdWVsaXplLnV0aWxzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXJyYXlVdGlscywgVHlwZVV0aWxzIH0gZnJvbSBcIkByZWN1cnN5dmUvbmVzdGpzLWNvbW1vblwiO1xuaW1wb3J0IHtcbiAgICBBYnN0cmFjdERhdGFUeXBlQ29uc3RydWN0b3IsXG4gICAgRmluZEF0dHJpYnV0ZU9wdGlvbnMsXG4gICAgSW5jbHVkZWFibGUsXG4gICAgSW5jbHVkZU9wdGlvbnMsXG4gICAgT3AsXG4gICAgT3JkZXIsXG4gICAgT3JkZXJJdGVtLFxuICAgIFdoZXJlT3B0aW9uc1xufSBmcm9tIFwic2VxdWVsaXplXCI7XG5pbXBvcnQgeyBNb2RlbCB9IGZyb20gXCJzZXF1ZWxpemUtdHlwZXNjcmlwdFwiO1xuaW1wb3J0IHsgUHJvamVjdGlvbkFsaWFzLCBXaGVyZUF0dHJpYnV0ZUhhc2hWYWx1ZSB9IGZyb20gXCJzZXF1ZWxpemUvdHlwZXMvbW9kZWxcIjtcbmltcG9ydCB7IFJ1bGVNb2RlbCB9IGZyb20gXCIuL2ZpbHRlclwiO1xuaW1wb3J0IHsgSW5jbHVkZVdoZXJlTW9kZWwgfSBmcm9tIFwiLi9tb2RlbHMvaW5jbHVkZS5tb2RlbFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEdlb1BvaW50IHtcbiAgICB0eXBlOiBcInBvaW50XCIsXG4gICAgY29vcmRpbmF0ZXM6IG51bWJlcltdO1xufVxuXG5leHBvcnQgY2xhc3MgTSBleHRlbmRzIE1vZGVsIHt9XG5cbmV4cG9ydCBjbGFzcyBTZXF1ZWxpemVVdGlscyB7XG4gICAgcHVibGljIHN0YXRpYyByZWR1Y2VJbmNsdWRlcyhpbmNsdWRlczogQXJyYXk8SW5jbHVkZU9wdGlvbnMgfCBJbmNsdWRlT3B0aW9uc1tdPiwgaWdub3JlQXR0cmlidXRlcyA9IGZhbHNlKTogSW5jbHVkZWFibGVbXSB7XG4gICAgICAgIGxldCBpbmNsdWRlOiBJbmNsdWRlT3B0aW9uc1tdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgaSBvZiBpbmNsdWRlcykge1xuICAgICAgICAgICAgaW5jbHVkZSA9IHRoaXMubWVyZ2VJbmNsdWRlcyhpbmNsdWRlLCBpLCBpZ25vcmVBdHRyaWJ1dGVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpbmNsdWRlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgbWVyZ2VJbmNsdWRlcyhhOiBJbmNsdWRlT3B0aW9ucyB8IEluY2x1ZGVPcHRpb25zW10gPSBbXSwgYjogSW5jbHVkZU9wdGlvbnMgfCBJbmNsdWRlT3B0aW9uc1tdID0gW10sIGlnbm9yZUF0dHJpYnV0ZXMgPSBmYWxzZSkge1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoYSkpIHtcbiAgICAgICAgICAgIGEgPSBbYV07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoYikpIHtcbiAgICAgICAgICAgIGIgPSBbYl07XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IGJDaGlsZCBvZiBiKSB7XG4gICAgICAgICAgICBjb25zdCBhQ2hpbGQgPSBhLmZpbmQodmFsdWUgPT4gdmFsdWUubW9kZWwgPT09IGJDaGlsZC5tb2RlbCAmJiB2YWx1ZS5hcyA9PT0gYkNoaWxkLmFzKTtcbiAgICAgICAgICAgIGlmIChhQ2hpbGQpIHtcbiAgICAgICAgICAgICAgICBhQ2hpbGQuaW5jbHVkZSA9IHRoaXMubWVyZ2VJbmNsdWRlcyhcbiAgICAgICAgICAgICAgICAgICAgKGFDaGlsZC5pbmNsdWRlIGFzIEluY2x1ZGVPcHRpb25zW10pID8/IFtdLFxuICAgICAgICAgICAgICAgICAgICAoYkNoaWxkLmluY2x1ZGUgYXMgSW5jbHVkZU9wdGlvbnNbXSkgPz8gW10sXG4gICAgICAgICAgICAgICAgICAgIGlnbm9yZUF0dHJpYnV0ZXNcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGlmICgoYUNoaWxkLmF0dHJpYnV0ZXMgfHwgYkNoaWxkLmF0dHJpYnV0ZXMpICYmICFpZ25vcmVBdHRyaWJ1dGVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGFDaGlsZC5hdHRyaWJ1dGVzID0gdGhpcy5tZXJnZUF0dHJpYnV0ZXMoYUNoaWxkLmF0dHJpYnV0ZXMsIGJDaGlsZC5hdHRyaWJ1dGVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3Qgd2hlcmUgPSB0aGlzLm1lcmdlV2hlcmUoYUNoaWxkLndoZXJlLCBiQ2hpbGQud2hlcmUpO1xuICAgICAgICAgICAgICAgIGlmICh3aGVyZSkge1xuICAgICAgICAgICAgICAgICAgICBhQ2hpbGQud2hlcmUgPSB3aGVyZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3Qgb3JkZXIgPSB0aGlzLm1lcmdlT3JkZXIoYUNoaWxkLm9yZGVyLCBiQ2hpbGQub3JkZXIpO1xuICAgICAgICAgICAgICAgIGlmIChvcmRlcikge1xuICAgICAgICAgICAgICAgICAgICBhQ2hpbGQub3JkZXIgPSBvcmRlcjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGFDaGlsZC5yZXF1aXJlZCB8fCBiQ2hpbGQucmVxdWlyZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgYUNoaWxkLnJlcXVpcmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGFDaGlsZC5zZXBhcmF0ZSB8fCBiQ2hpbGQuc2VwYXJhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgYUNoaWxkLnNlcGFyYXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGJDaGlsZC5saW1pdCkge1xuICAgICAgICAgICAgICAgICAgICBhQ2hpbGQubGltaXQgPz89IGJDaGlsZC5saW1pdDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYUNoaWxkLnBhcmFub2lkID0gIShhQ2hpbGQucGFyYW5vaWQgPT09IGZhbHNlIHx8IGJDaGlsZC5wYXJhbm9pZCA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgIGlmIChUeXBlVXRpbHMuaXNOb3ROdWxsT3JVbmRlZmluZWQoYUNoaWxkLnN1YlF1ZXJ5KSB8fCBUeXBlVXRpbHMuaXNOb3ROdWxsT3JVbmRlZmluZWQoYkNoaWxkLnN1YlF1ZXJ5KSkge1xuICAgICAgICAgICAgICAgICAgICBhQ2hpbGQuc3ViUXVlcnkgPSBhQ2hpbGQuc3ViUXVlcnkgPz8gYkNoaWxkLnN1YlF1ZXJ5O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYS5wdXNoKGJDaGlsZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIG1lcmdlQXR0cmlidXRlcyhhOiBGaW5kQXR0cmlidXRlT3B0aW9ucywgYjogRmluZEF0dHJpYnV0ZU9wdGlvbnMpOiBGaW5kQXR0cmlidXRlT3B0aW9ucyB7XG4gICAgICAgIHR5cGUgQXR0ciA9IHsgZXhjbHVkZT86IHN0cmluZ1tdOyBpbmNsdWRlPzogKHN0cmluZyB8IFByb2plY3Rpb25BbGlhcylbXTsgfTtcblxuICAgICAgICBpZiAoYSBpbnN0YW5jZW9mIEFycmF5ICYmIGIgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgICAgICAgcmV0dXJuIEFycmF5VXRpbHMudW5pcXVlVmFsdWVzKFsuLi5hLCAuLi5iLCBcImlkXCJdLCB4ID0+IHgpO1xuICAgICAgICB9IGVsc2UgaWYgKGEgfHwgYikge1xuICAgICAgICAgICAgY29uc3QgYUF0dHJpYnV0ZXMgPSAoYSA/PyB7fSkgYXMgQXR0cjtcbiAgICAgICAgICAgIGNvbnN0IGJBdHRyaWJ1dGVzID0gKGIgPz8ge30pIGFzIEF0dHI7XG5cbiAgICAgICAgICAgIGlmIChhQXR0cmlidXRlcy5pbmNsdWRlICYmICFiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGE7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChiQXR0cmlidXRlcy5pbmNsdWRlICYmICFhKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChhIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBiQXR0ciA9IChiID8/IHt9KSBhcyBBdHRyO1xuICAgICAgICAgICAgICAgIGlmIChiQXR0ci5pbmNsdWRlPy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFycmF5VXRpbHMudW5pcXVlVmFsdWVzKFsuLi5hLCAuLi5iQXR0ci5pbmNsdWRlLCBcImlkXCJdLCB4ID0+IHgpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBiID8gQXJyYXlVdGlscy51bmlxdWVWYWx1ZXMoWy4uLmEsIFwiaWRcIl0sIHggPT4geCkgOiBiO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoYiBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYUF0dHIgPSAoYSA/PyB7fSkgYXMgQXR0cjtcbiAgICAgICAgICAgICAgICBpZiAoYUF0dHIuaW5jbHVkZT8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBBcnJheVV0aWxzLnVuaXF1ZVZhbHVlcyhbLi4uYiwgLi4uYUF0dHIuaW5jbHVkZSwgXCJpZFwiXSwgeCA9PiB4KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gYSA/IEFycmF5VXRpbHMudW5pcXVlVmFsdWVzKFsuLi5iLCBcImlkXCJdLCB4ID0+IHgpIDogYTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcmVzdWx0OiBBdHRyID0ge307XG4gICAgICAgICAgICBpZiAoYUF0dHJpYnV0ZXMuaW5jbHVkZT8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LmluY2x1ZGUgPSBbLi4uYUF0dHJpYnV0ZXMuaW5jbHVkZV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYkF0dHJpYnV0ZXMuaW5jbHVkZT8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LmluY2x1ZGUgPSBbLi4uKHJlc3VsdC5pbmNsdWRlID8/IFtdKSwgLi4uYkF0dHJpYnV0ZXMuaW5jbHVkZV07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChhQXR0cmlidXRlcy5leGNsdWRlPy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQuZXhjbHVkZSA9IFsuLi5hQXR0cmlidXRlcy5leGNsdWRlXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChiQXR0cmlidXRlcy5leGNsdWRlPy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQuZXhjbHVkZSA9IFsuLi4ocmVzdWx0LmV4Y2x1ZGUgPz8gW10pLCAuLi5iQXR0cmlidXRlcy5leGNsdWRlXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHJlc3VsdC5pbmNsdWRlKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LmluY2x1ZGUgPSBBcnJheVV0aWxzLnVuaXF1ZVZhbHVlcyhyZXN1bHQuaW5jbHVkZSwgeCA9PiB4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXN1bHQuZXhjbHVkZSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5leGNsdWRlID0gQXJyYXlVdGlscy51bmlxdWVWYWx1ZXMocmVzdWx0LmV4Y2x1ZGUsIHggPT4geCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghcmVzdWx0LmluY2x1ZGUgJiYgIXJlc3VsdC5leGNsdWRlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCBhcyBGaW5kQXR0cmlidXRlT3B0aW9ucztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZW5zdXJlQXR0cmlidXRlc1ZhbGlkaXR5KGF0dHJpYnV0ZTogRmluZEF0dHJpYnV0ZU9wdGlvbnMpOiBGaW5kQXR0cmlidXRlT3B0aW9ucyB7XG4gICAgICAgIGlmIChhdHRyaWJ1dGUgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZS5maW5kKCh4KSA9PiB4ID09PSBcImlkXCIpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgXCJpZFwiLFxuICAgICAgICAgICAgICAgIC4uLmF0dHJpYnV0ZVxuICAgICAgICAgICAgXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhdHRyaWJ1dGUuZXhjbHVkZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBleGNsdWRlOiBhdHRyaWJ1dGUuZXhjbHVkZS5maWx0ZXIoKHgpID0+IHggIT09IFwiaWRcIilcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYXR0cmlidXRlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgbWVyZ2VXaGVyZShhOiBXaGVyZU9wdGlvbnMsIGI6IFdoZXJlT3B0aW9ucyk6IFdoZXJlT3B0aW9ucyB7XG4gICAgICAgIGlmICghYSAmJiAhYikge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oYSA/PyB7fSwgYiA/PyB7fSk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBtZXJnZU9yZGVyKGE6IE9yZGVyLCBiOiBPcmRlcik6IE9yZGVyIHtcbiAgICAgICAgaWYgKCFhICYmICFiKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYSAmJiAhYikge1xuICAgICAgICAgICAgcmV0dXJuIGE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFhICYmIGIpIHtcbiAgICAgICAgICAgIHJldHVybiBiO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzOiBPcmRlckl0ZW1bXSA9IFtdO1xuICAgICAgICBpZiAoYSBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICAgICAgICByZXMucHVzaCguLi5hKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlcy5wdXNoKGEpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChiIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgICAgICAgIHJlcy5wdXNoKC4uLmIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzLnB1c2goYik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGdlbmVyYXRlV2hlcmVWYWx1ZShydWxlOiBSdWxlTW9kZWwpOiBXaGVyZUF0dHJpYnV0ZUhhc2hWYWx1ZTxhbnk+IHtcbiAgICAgICAgc3dpdGNoIChydWxlLm9wZXJhdGlvbikge1xuICAgICAgICAgICAgY2FzZSBcImVxdWFsXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJ1bGUudmFsdWUgYXMgYW55O1xuXG4gICAgICAgICAgICBjYXNlIFwibm90X2VxdWFsXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgW09wLm5lXTogcnVsZS52YWx1ZSB9O1xuXG4gICAgICAgICAgICBjYXNlIFwiaW5cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4geyBbT3AuaW5dOiBydWxlLnZhbHVlIGFzIGFueVtdIH07XG5cbiAgICAgICAgICAgIGNhc2UgXCJub3RfaW5cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4geyBbT3Aubm90SW5dOiBydWxlLnZhbHVlIGFzIGFueVtdIH07XG5cbiAgICAgICAgICAgIGNhc2UgXCJsZXNzXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgW09wLmx0XTogcnVsZS52YWx1ZSBhcyBhbnkgfTtcblxuICAgICAgICAgICAgY2FzZSBcImxlc3Nfb3JfZXF1YWxcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4geyBbT3AubHRlXTogcnVsZS52YWx1ZSBhcyBhbnkgfTtcblxuICAgICAgICAgICAgY2FzZSBcImdyZWF0ZXJcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4geyBbT3AuZ3RdOiBydWxlLnZhbHVlIGFzIGFueSB9O1xuXG4gICAgICAgICAgICBjYXNlIFwiZ3JlYXRlcl9vcl9lcXVhbFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB7IFtPcC5ndGVdOiBydWxlLnZhbHVlIGFzIGFueSB9O1xuXG4gICAgICAgICAgICBjYXNlIFwiYmV0d2VlblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB7IFtPcC5iZXR3ZWVuXTogcnVsZS52YWx1ZSBhcyBhbnkgfTtcblxuICAgICAgICAgICAgY2FzZSBcIm5vdF9iZXR3ZWVuXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgW09wLm5vdEJldHdlZW5dOiBydWxlLnZhbHVlIGFzIGFueSB9O1xuXG4gICAgICAgICAgICBjYXNlIFwiaXNfbnVsbFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB7IFtPcC5lcV06IG51bGwgfTtcblxuICAgICAgICAgICAgY2FzZSBcImlzX25vdF9udWxsXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgW09wLm5lXTogbnVsbCB9O1xuXG4gICAgICAgICAgICBjYXNlIFwiYmVnaW5zX3dpdGhcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4geyBbT3AubGlrZV06IGAke3J1bGUudmFsdWV9JWAgfTtcblxuICAgICAgICAgICAgY2FzZSBcIm5vdF9iZWdpbnNfd2l0aFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB7IFtPcC5ub3RMaWtlXTogYCR7cnVsZS52YWx1ZX0lYCB9O1xuXG4gICAgICAgICAgICBjYXNlIFwiY29udGFpbnNcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4geyBbT3AubGlrZV06IGAlJHtydWxlLnZhbHVlfSVgIH07XG5cbiAgICAgICAgICAgIGNhc2UgXCJub3RfY29udGFpbnNcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4geyBbT3Aubm90TGlrZV06IGAlJHtydWxlLnZhbHVlfSVgIH07XG5cbiAgICAgICAgICAgIGNhc2UgXCJlbmRzX3dpdGhcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4geyBbT3AubGlrZV06IGAlJHtydWxlLnZhbHVlfWAgfTtcblxuICAgICAgICAgICAgY2FzZSBcIm5vdF9lbmRzX3dpdGhcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4geyBbT3Aubm90TGlrZV06IGAlJHtydWxlLnZhbHVlfWAgfTtcblxuICAgICAgICAgICAgY2FzZSBcImlzX2VtcHR5XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG5cbiAgICAgICAgICAgIGNhc2UgXCJpc19ub3RfZW1wdHlcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4geyBbT3AubmVdOiBcIlwiIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldEF0dHJpYnV0ZUZ1bGxOYW1lKGF0dHJpYnV0ZTogc3RyaW5nLCBwYXRoOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIGAkJHtwYXRofS4ke2F0dHJpYnV0ZX0kYDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldExpdGVyYWxGdWxsTmFtZShhdHRyaWJ1dGU6IHN0cmluZywgcGF0aDogc3RyaW5nIHwgc3RyaW5nW10pIHtcbiAgICAgICAgaWYgKHR5cGVvZiBwYXRoID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBwYXRoID0gcGF0aC5zcGxpdChcIi5cIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGBcXGAke3BhdGguam9pbihcIi0+XCIpfVxcYC5cXGAke2F0dHJpYnV0ZX1cXGBgO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0T3JkZXJGdWxsTmFtZShhdHRyaWJ1dGU6IHN0cmluZywgcGF0aDogc3RyaW5nW10pIHtcbiAgICAgICAgcmV0dXJuIGAke3BhdGguam9pbihcIi0+XCIpfS4ke2F0dHJpYnV0ZX1gO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0TW9kZWxTZWFyY2hhYmxlQXR0cmlidXRlcyhtb2RlbDogdHlwZW9mIE0pOiBzdHJpbmdbXSB7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhtb2RlbC5yYXdBdHRyaWJ1dGVzKS5maWx0ZXIoXG4gICAgICAgICAgICBhID0+ICFbXCJEQVRFXCIsIFwiREFURU9OTFlcIiwgXCJWSVJUVUFMXCJdLnNvbWUodCA9PiB0ID09PSAobW9kZWwucmF3QXR0cmlidXRlc1thXS50eXBlIGFzIEFic3RyYWN0RGF0YVR5cGVDb25zdHJ1Y3Rvcikua2V5KVxuICAgICAgICApLm1hcCh4ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGF0dHIgPSBtb2RlbC5yYXdBdHRyaWJ1dGVzW3hdO1xuICAgICAgICAgICAgaWYgKCFhdHRyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYXR0ci5maWVsZCA/IGF0dHIuZmllbGQgOiB4O1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldE1vZGVsU2VhcmNoYWJsZUZpZWxkQXR0cmlidXRlcyhtb2RlbDogdHlwZW9mIE0sIGZpZWxkczogc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBtb2RlbC5yYXdBdHRyaWJ1dGVzO1xuICAgICAgICByZXR1cm4gZmllbGRzXG4gICAgICAgICAgICAuZmlsdGVyKHggPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGF0dHIgPSBhdHRyaWJ1dGVzW3hdO1xuICAgICAgICAgICAgICAgIGlmICghYXR0cikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuICFbXCJEQVRFXCIsIFwiREFURU9OTFlcIiwgXCJWSVJUVUFMXCJdLnNvbWUodCA9PiB0ID09PSAoYXR0ci50eXBlIGFzIEFic3RyYWN0RGF0YVR5cGVDb25zdHJ1Y3Rvcikua2V5KTtcbiAgICAgICAgICAgIH0pLm1hcCh4ID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhdHRyID0gYXR0cmlidXRlc1t4XTtcbiAgICAgICAgICAgICAgICBpZiAoIWF0dHIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHg7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGF0dHIuZmllbGQgPyBhdHRyLmZpZWxkIDogeDtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgcmVkdWNlTW9kZWxGcm9tUGF0aChtb2RlbDogTSwgcGF0aDogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHN0ZXBzID0gcGF0aC5zcGxpdChcIi5cIik7XG5cbiAgICAgICAgbGV0IHN0ZXAgPSBzdGVwcy5zaGlmdCgpO1xuICAgICAgICB3aGlsZSAoc3RlcCkge1xuICAgICAgICAgICAgaWYgKG1vZGVsW3N0ZXBdIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXN0ZXBzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9kZWxbc3RlcF07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIChtb2RlbFtzdGVwXSBhcyBBcnJheTxhbnk+KVxuICAgICAgICAgICAgICAgICAgICAubWFwKHggPT4gdGhpcy5yZWR1Y2VNb2RlbEZyb21QYXRoKHgsIHN0ZXBzLmpvaW4oXCIuXCIpKSlcbiAgICAgICAgICAgICAgICAgICAgLnJlZHVjZSgoYWxsLCBjdXJyZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudCBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsuLi5hbGwsIC4uLmN1cnJlbnRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsuLi5hbGwsIGN1cnJlbnRdO1xuICAgICAgICAgICAgICAgICAgICB9LCBbXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG1vZGVsID0gbW9kZWxbc3RlcF07XG4gICAgICAgICAgICBpZiAoIW1vZGVsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3RlcCA9IHN0ZXBzLnNoaWZ0KCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbW9kZWw7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBmaW5kQ29sdW1uRmllbGROYW1lKG1vZGVsOiB0eXBlb2YgTSwgbmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgZmllbGQgPSBPYmplY3Qua2V5cyhtb2RlbC5yYXdBdHRyaWJ1dGVzKS5maW5kKChrZXkpID0+IHtcbiAgICAgICAgICAgIGlmIChrZXkgPT09IG5hbWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIG1vZGVsLnJhd0F0dHJpYnV0ZXNba2V5XS5maWVsZCA9PT0gbmFtZTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBtb2RlbC5yYXdBdHRyaWJ1dGVzW2ZpZWxkXS5maWVsZCA/PyBuYW1lO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgaXNDb2x1bW5Kc29uKG1vZGVsOiB0eXBlb2YgTSwgbmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGF0dHIgPSBtb2RlbC5yYXdBdHRyaWJ1dGVzW25hbWVdID8/IE9iamVjdC52YWx1ZXMobW9kZWwucmF3QXR0cmlidXRlcykuZmluZCgoeCkgPT4geC5maWVsZCA9PT0gbmFtZSk7XG4gICAgICAgIHJldHVybiAoYXR0cj8udHlwZSBhcyBBYnN0cmFjdERhdGFUeXBlQ29uc3RydWN0b3IpPy5rZXkgPT09IFwiSlNPTlwiO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0R3JvdXBMaXRlcmFsKG1vZGVsOiB0eXBlb2YgTSwgZ3JvdXA6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gZ3JvdXAuc3BsaXQoXCIuXCIpO1xuICAgICAgICBpZiAoaXRlbXMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgY29uc3QgY29sdW1uID0gaXRlbXNbaXRlbXMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICByZXR1cm4gU2VxdWVsaXplVXRpbHMuZ2V0TGl0ZXJhbEZ1bGxOYW1lKGNvbHVtbiwgaXRlbXMuc2xpY2UoMCwgaXRlbXMubGVuZ3RoIC0gMSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGBcXGAke21vZGVsLm5hbWV9XFxgLlxcYCR7Z3JvdXB9XFxgYDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGdlbmVyYXRlV2hlcmVDb25kaXRpb25zKG1vZGVsOiBJbmNsdWRlV2hlcmVNb2RlbCwgb3B0aW9ucz86IG9iamVjdCk6IFdoZXJlT3B0aW9ucyB7XG4gICAgICAgIGNvbnN0IHdoZXJlID0ge307XG4gICAgICAgIGNvbnN0IGtleXMgPSBbXG4gICAgICAgICAgICAuLi5PYmplY3Qua2V5cyhtb2RlbCksXG4gICAgICAgICAgICAuLi5PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG1vZGVsKVxuICAgICAgICBdO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgICAgICAgICBpZiAoIW1vZGVsLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBtb2RlbFtrZXkgYXMgYW55XShvcHRpb25zKTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgICAgICB3aGVyZVtrZXldID0gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gd2hlcmU7XG4gICAgfVxufVxuIl19
|
|
296
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,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ImltcG9ydCB7IEFycmF5VXRpbHMsIFR5cGVVdGlscyB9IGZyb20gXCJAcmVjdXJzeXZlL25lc3Rqcy1jb21tb25cIjtcbmltcG9ydCB7XG4gICAgQWJzdHJhY3REYXRhVHlwZUNvbnN0cnVjdG9yLFxuICAgIEZpbmRBdHRyaWJ1dGVPcHRpb25zLFxuICAgIEluY2x1ZGVhYmxlLFxuICAgIEluY2x1ZGVPcHRpb25zLFxuICAgIE9wLFxuICAgIE9yZGVyLFxuICAgIE9yZGVySXRlbSxcbiAgICBXaGVyZU9wdGlvbnNcbn0gZnJvbSBcInNlcXVlbGl6ZVwiO1xuaW1wb3J0IHsgTW9kZWwgfSBmcm9tIFwic2VxdWVsaXplLXR5cGVzY3JpcHRcIjtcbmltcG9ydCB7IFByb2plY3Rpb25BbGlhcywgV2hlcmVBdHRyaWJ1dGVIYXNoVmFsdWUgfSBmcm9tIFwic2VxdWVsaXplL3R5cGVzL21vZGVsXCI7XG5pbXBvcnQgeyBSdWxlTW9kZWwgfSBmcm9tIFwiLi9maWx0ZXJcIjtcbmltcG9ydCB7IEluY2x1ZGVXaGVyZU1vZGVsIH0gZnJvbSBcIi4vbW9kZWxzL2luY2x1ZGUubW9kZWxcIjtcblxuZXhwb3J0IGludGVyZmFjZSBHZW9Qb2ludCB7XG4gICAgdHlwZTogXCJwb2ludFwiLFxuICAgIGNvb3JkaW5hdGVzOiBudW1iZXJbXTtcbn1cblxuZXhwb3J0IGNsYXNzIE0gZXh0ZW5kcyBNb2RlbCB7fVxuXG5leHBvcnQgY2xhc3MgU2VxdWVsaXplVXRpbHMge1xuICAgIHB1YmxpYyBzdGF0aWMgcmVkdWNlSW5jbHVkZXMoaW5jbHVkZXM6IEFycmF5PEluY2x1ZGVPcHRpb25zIHwgSW5jbHVkZU9wdGlvbnNbXT4sIGlnbm9yZUF0dHJpYnV0ZXMgPSBmYWxzZSk6IEluY2x1ZGVhYmxlW10ge1xuICAgICAgICBsZXQgaW5jbHVkZTogSW5jbHVkZU9wdGlvbnNbXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGkgb2YgaW5jbHVkZXMpIHtcbiAgICAgICAgICAgIGluY2x1ZGUgPSB0aGlzLm1lcmdlSW5jbHVkZXMoaW5jbHVkZSwgaSwgaWdub3JlQXR0cmlidXRlcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaW5jbHVkZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIG1lcmdlSW5jbHVkZXMoYTogSW5jbHVkZU9wdGlvbnMgfCBJbmNsdWRlT3B0aW9uc1tdID0gW10sIGI6IEluY2x1ZGVPcHRpb25zIHwgSW5jbHVkZU9wdGlvbnNbXSA9IFtdLCBpZ25vcmVBdHRyaWJ1dGVzID0gZmFsc2UpIHtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGEpKSB7XG4gICAgICAgICAgICBhID0gW2FdO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGIpKSB7XG4gICAgICAgICAgICBiID0gW2JdO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBiQ2hpbGQgb2YgYikge1xuICAgICAgICAgICAgY29uc3QgYUNoaWxkID0gYS5maW5kKHZhbHVlID0+IHZhbHVlLm1vZGVsID09PSBiQ2hpbGQubW9kZWwgJiYgdmFsdWUuYXMgPT09IGJDaGlsZC5hcyk7XG4gICAgICAgICAgICBpZiAoYUNoaWxkKSB7XG4gICAgICAgICAgICAgICAgYUNoaWxkLmluY2x1ZGUgPSB0aGlzLm1lcmdlSW5jbHVkZXMoXG4gICAgICAgICAgICAgICAgICAgIChhQ2hpbGQuaW5jbHVkZSBhcyBJbmNsdWRlT3B0aW9uc1tdKSA/PyBbXSxcbiAgICAgICAgICAgICAgICAgICAgKGJDaGlsZC5pbmNsdWRlIGFzIEluY2x1ZGVPcHRpb25zW10pID8/IFtdLFxuICAgICAgICAgICAgICAgICAgICBpZ25vcmVBdHRyaWJ1dGVzXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBpZiAoKGFDaGlsZC5hdHRyaWJ1dGVzIHx8IGJDaGlsZC5hdHRyaWJ1dGVzKSAmJiAhaWdub3JlQXR0cmlidXRlcykge1xuICAgICAgICAgICAgICAgICAgICBhQ2hpbGQuYXR0cmlidXRlcyA9IHRoaXMubWVyZ2VBdHRyaWJ1dGVzKGFDaGlsZC5hdHRyaWJ1dGVzLCBiQ2hpbGQuYXR0cmlidXRlcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHdoZXJlID0gdGhpcy5tZXJnZVdoZXJlKGFDaGlsZC53aGVyZSwgYkNoaWxkLndoZXJlKTtcbiAgICAgICAgICAgICAgICBpZiAod2hlcmUpIHtcbiAgICAgICAgICAgICAgICAgICAgYUNoaWxkLndoZXJlID0gd2hlcmU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IG9yZGVyID0gdGhpcy5tZXJnZU9yZGVyKGFDaGlsZC5vcmRlciwgYkNoaWxkLm9yZGVyKTtcbiAgICAgICAgICAgICAgICBpZiAob3JkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgYUNoaWxkLm9yZGVyID0gb3JkZXI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChhQ2hpbGQucmVxdWlyZWQgfHwgYkNoaWxkLnJlcXVpcmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGFDaGlsZC5yZXF1aXJlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChhQ2hpbGQuc2VwYXJhdGUgfHwgYkNoaWxkLnNlcGFyYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIGFDaGlsZC5zZXBhcmF0ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChiQ2hpbGQubGltaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgYUNoaWxkLmxpbWl0ID8/PSBiQ2hpbGQubGltaXQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFDaGlsZC5wYXJhbm9pZCA9ICEoYUNoaWxkLnBhcmFub2lkID09PSBmYWxzZSB8fCBiQ2hpbGQucGFyYW5vaWQgPT09IGZhbHNlKTtcbiAgICAgICAgICAgICAgICBpZiAoVHlwZVV0aWxzLmlzTm90TnVsbE9yVW5kZWZpbmVkKGFDaGlsZC5zdWJRdWVyeSkgfHwgVHlwZVV0aWxzLmlzTm90TnVsbE9yVW5kZWZpbmVkKGJDaGlsZC5zdWJRdWVyeSkpIHtcbiAgICAgICAgICAgICAgICAgICAgYUNoaWxkLnN1YlF1ZXJ5ID0gYUNoaWxkLnN1YlF1ZXJ5ID8/IGJDaGlsZC5zdWJRdWVyeTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGEucHVzaChiQ2hpbGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGE7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBtZXJnZUF0dHJpYnV0ZXMoYTogRmluZEF0dHJpYnV0ZU9wdGlvbnMsIGI6IEZpbmRBdHRyaWJ1dGVPcHRpb25zKTogRmluZEF0dHJpYnV0ZU9wdGlvbnMge1xuICAgICAgICB0eXBlIEF0dHIgPSB7IGV4Y2x1ZGU/OiBzdHJpbmdbXTsgaW5jbHVkZT86IChzdHJpbmcgfCBQcm9qZWN0aW9uQWxpYXMpW107IH07XG5cbiAgICAgICAgaWYgKGEgaW5zdGFuY2VvZiBBcnJheSAmJiBiIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgICAgICAgIHJldHVybiBBcnJheVV0aWxzLnVuaXF1ZVZhbHVlcyhbLi4uYSwgLi4uYiwgXCJpZFwiXSwgeCA9PiB4KTtcbiAgICAgICAgfSBlbHNlIGlmIChhIHx8IGIpIHtcbiAgICAgICAgICAgIGNvbnN0IGFBdHRyaWJ1dGVzID0gKGEgPz8ge30pIGFzIEF0dHI7XG4gICAgICAgICAgICBjb25zdCBiQXR0cmlidXRlcyA9IChiID8/IHt9KSBhcyBBdHRyO1xuXG4gICAgICAgICAgICBpZiAoYUF0dHJpYnV0ZXMuaW5jbHVkZSAmJiAhYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoYkF0dHJpYnV0ZXMuaW5jbHVkZSAmJiAhYSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBiO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoYSBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYkF0dHIgPSAoYiA/PyB7fSkgYXMgQXR0cjtcbiAgICAgICAgICAgICAgICBpZiAoYkF0dHIuaW5jbHVkZT8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBBcnJheVV0aWxzLnVuaXF1ZVZhbHVlcyhbLi4uYSwgLi4uYkF0dHIuaW5jbHVkZSwgXCJpZFwiXSwgeCA9PiB4KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gYiA/IEFycmF5VXRpbHMudW5pcXVlVmFsdWVzKFsuLi5hLCBcImlkXCJdLCB4ID0+IHgpIDogYjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGIgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFBdHRyID0gKGEgPz8ge30pIGFzIEF0dHI7XG4gICAgICAgICAgICAgICAgaWYgKGFBdHRyLmluY2x1ZGU/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gQXJyYXlVdGlscy51bmlxdWVWYWx1ZXMoWy4uLmIsIC4uLmFBdHRyLmluY2x1ZGUsIFwiaWRcIl0sIHggPT4geCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGEgPyBBcnJheVV0aWxzLnVuaXF1ZVZhbHVlcyhbLi4uYiwgXCJpZFwiXSwgeCA9PiB4KSA6IGE7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdDogQXR0ciA9IHt9O1xuICAgICAgICAgICAgaWYgKGFBdHRyaWJ1dGVzLmluY2x1ZGU/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5pbmNsdWRlID0gWy4uLmFBdHRyaWJ1dGVzLmluY2x1ZGVdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGJBdHRyaWJ1dGVzLmluY2x1ZGU/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5pbmNsdWRlID0gWy4uLihyZXN1bHQuaW5jbHVkZSA/PyBbXSksIC4uLmJBdHRyaWJ1dGVzLmluY2x1ZGVdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoYUF0dHJpYnV0ZXMuZXhjbHVkZT8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LmV4Y2x1ZGUgPSBbLi4uYUF0dHJpYnV0ZXMuZXhjbHVkZV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYkF0dHJpYnV0ZXMuZXhjbHVkZT8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LmV4Y2x1ZGUgPSBbLi4uKHJlc3VsdC5leGNsdWRlID8/IFtdKSwgLi4uYkF0dHJpYnV0ZXMuZXhjbHVkZV07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChyZXN1bHQuaW5jbHVkZSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5pbmNsdWRlID0gQXJyYXlVdGlscy51bmlxdWVWYWx1ZXMocmVzdWx0LmluY2x1ZGUsIHggPT4geCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVzdWx0LmV4Y2x1ZGUpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQuZXhjbHVkZSA9IEFycmF5VXRpbHMudW5pcXVlVmFsdWVzKHJlc3VsdC5leGNsdWRlLCB4ID0+IHgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIXJlc3VsdC5pbmNsdWRlICYmICFyZXN1bHQuZXhjbHVkZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQgYXMgRmluZEF0dHJpYnV0ZU9wdGlvbnM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGVuc3VyZUF0dHJpYnV0ZXNWYWxpZGl0eShhdHRyaWJ1dGU6IEZpbmRBdHRyaWJ1dGVPcHRpb25zKTogRmluZEF0dHJpYnV0ZU9wdGlvbnMge1xuICAgICAgICBpZiAoYXR0cmlidXRlIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgICAgICAgIGlmIChhdHRyaWJ1dGUuZmluZCgoeCkgPT4geCA9PT0gXCJpZFwiKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhdHRyaWJ1dGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgIFwiaWRcIixcbiAgICAgICAgICAgICAgICAuLi5hdHRyaWJ1dGVcbiAgICAgICAgICAgIF07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYXR0cmlidXRlLmV4Y2x1ZGUpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZXhjbHVkZTogYXR0cmlidXRlLmV4Y2x1ZGUuZmlsdGVyKCh4KSA9PiB4ICE9PSBcImlkXCIpXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIG1lcmdlV2hlcmUoYTogV2hlcmVPcHRpb25zLCBiOiBXaGVyZU9wdGlvbnMpOiBXaGVyZU9wdGlvbnMge1xuICAgICAgICBpZiAoIWEgJiYgIWIpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKGEgPz8ge30sIGIgPz8ge30pO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgbWVyZ2VPcmRlcihhOiBPcmRlciwgYjogT3JkZXIpOiBPcmRlciB7XG4gICAgICAgIGlmICghYSAmJiAhYikge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGEgJiYgIWIpIHtcbiAgICAgICAgICAgIHJldHVybiBhO1xuICAgICAgICB9XG4gICAgICAgIGlmICghYSAmJiBiKSB7XG4gICAgICAgICAgICByZXR1cm4gYjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlczogT3JkZXJJdGVtW10gPSBbXTtcbiAgICAgICAgaWYgKGEgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgICAgICAgcmVzLnB1c2goLi4uYSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXMucHVzaChhKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYiBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICAgICAgICByZXMucHVzaCguLi5iKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlcy5wdXNoKGIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBnZW5lcmF0ZVdoZXJlVmFsdWUocnVsZTogUnVsZU1vZGVsKTogV2hlcmVBdHRyaWJ1dGVIYXNoVmFsdWU8YW55PiB7XG4gICAgICAgIHN3aXRjaCAocnVsZS5vcGVyYXRpb24pIHtcbiAgICAgICAgICAgIGNhc2UgXCJlcXVhbFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBydWxlLnZhbHVlIGFzIGFueTtcblxuICAgICAgICAgICAgY2FzZSBcIm5vdF9lcXVhbFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB7IFtPcC5uZV06IHJ1bGUudmFsdWUgfTtcblxuICAgICAgICAgICAgY2FzZSBcImluXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgW09wLmluXTogcnVsZS52YWx1ZSBhcyBhbnlbXSB9O1xuXG4gICAgICAgICAgICBjYXNlIFwibm90X2luXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgW09wLm5vdEluXTogcnVsZS52YWx1ZSBhcyBhbnlbXSB9O1xuXG4gICAgICAgICAgICBjYXNlIFwibGVzc1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiB7IFtPcC5sdF06IHJ1bGUudmFsdWUgYXMgYW55IH07XG5cbiAgICAgICAgICAgIGNhc2UgXCJsZXNzX29yX2VxdWFsXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgW09wLmx0ZV06IHJ1bGUudmFsdWUgYXMgYW55IH07XG5cbiAgICAgICAgICAgIGNhc2UgXCJncmVhdGVyXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgW09wLmd0XTogcnVsZS52YWx1ZSBhcyBhbnkgfTtcblxuICAgICAgICAgICAgY2FzZSBcImdyZWF0ZXJfb3JfZXF1YWxcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4geyBbT3AuZ3RlXTogcnVsZS52YWx1ZSBhcyBhbnkgfTtcblxuICAgICAgICAgICAgY2FzZSBcImJldHdlZW5cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4geyBbT3AuYmV0d2Vlbl06IHJ1bGUudmFsdWUgYXMgYW55IH07XG5cbiAgICAgICAgICAgIGNhc2UgXCJub3RfYmV0d2VlblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB7IFtPcC5ub3RCZXR3ZWVuXTogcnVsZS52YWx1ZSBhcyBhbnkgfTtcblxuICAgICAgICAgICAgY2FzZSBcImlzX251bGxcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4geyBbT3AuZXFdOiBudWxsIH07XG5cbiAgICAgICAgICAgIGNhc2UgXCJpc19ub3RfbnVsbFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB7IFtPcC5uZV06IG51bGwgfTtcblxuICAgICAgICAgICAgY2FzZSBcImJlZ2luc193aXRoXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgW09wLmxpa2VdOiBgJHtydWxlLnZhbHVlfSVgIH07XG5cbiAgICAgICAgICAgIGNhc2UgXCJub3RfYmVnaW5zX3dpdGhcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4geyBbT3Aubm90TGlrZV06IGAke3J1bGUudmFsdWV9JWAgfTtcblxuICAgICAgICAgICAgY2FzZSBcImNvbnRhaW5zXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgW09wLmxpa2VdOiBgJSR7cnVsZS52YWx1ZX0lYCB9O1xuXG4gICAgICAgICAgICBjYXNlIFwibm90X2NvbnRhaW5zXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgW09wLm5vdExpa2VdOiBgJSR7cnVsZS52YWx1ZX0lYCB9O1xuXG4gICAgICAgICAgICBjYXNlIFwiZW5kc193aXRoXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgW09wLmxpa2VdOiBgJSR7cnVsZS52YWx1ZX1gIH07XG5cbiAgICAgICAgICAgIGNhc2UgXCJub3RfZW5kc193aXRoXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgW09wLm5vdExpa2VdOiBgJSR7cnVsZS52YWx1ZX1gIH07XG5cbiAgICAgICAgICAgIGNhc2UgXCJpc19lbXB0eVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcIlwiO1xuXG4gICAgICAgICAgICBjYXNlIFwiaXNfbm90X2VtcHR5XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgW09wLm5lXTogXCJcIiB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBnZXRBdHRyaWJ1dGVGdWxsTmFtZShhdHRyaWJ1dGU6IHN0cmluZywgcGF0aDogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBgJCR7cGF0aH0uJHthdHRyaWJ1dGV9JGA7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBnZXRNb2RlbFNlYXJjaGFibGVBdHRyaWJ1dGVzKG1vZGVsOiB0eXBlb2YgTSk6IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKG1vZGVsLnJhd0F0dHJpYnV0ZXMpLmZpbHRlcihcbiAgICAgICAgICAgIGEgPT4gIVtcIkRBVEVcIiwgXCJEQVRFT05MWVwiLCBcIlZJUlRVQUxcIl0uc29tZSh0ID0+IHQgPT09IChtb2RlbC5yYXdBdHRyaWJ1dGVzW2FdLnR5cGUgYXMgQWJzdHJhY3REYXRhVHlwZUNvbnN0cnVjdG9yKS5rZXkpXG4gICAgICAgICkubWFwKHggPT4ge1xuICAgICAgICAgICAgY29uc3QgYXR0ciA9IG1vZGVsLnJhd0F0dHJpYnV0ZXNbeF07XG4gICAgICAgICAgICBpZiAoIWF0dHIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhdHRyLmZpZWxkID8gYXR0ci5maWVsZCA6IHg7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0TW9kZWxTZWFyY2hhYmxlRmllbGRBdHRyaWJ1dGVzKG1vZGVsOiB0eXBlb2YgTSwgZmllbGRzOiBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcbiAgICAgICAgY29uc3QgYXR0cmlidXRlcyA9IG1vZGVsLnJhd0F0dHJpYnV0ZXM7XG4gICAgICAgIHJldHVybiBmaWVsZHNcbiAgICAgICAgICAgIC5maWx0ZXIoeCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYXR0ciA9IGF0dHJpYnV0ZXNbeF07XG4gICAgICAgICAgICAgICAgaWYgKCFhdHRyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gIVtcIkRBVEVcIiwgXCJEQVRFT05MWVwiLCBcIlZJUlRVQUxcIl0uc29tZSh0ID0+IHQgPT09IChhdHRyLnR5cGUgYXMgQWJzdHJhY3REYXRhVHlwZUNvbnN0cnVjdG9yKS5rZXkpO1xuICAgICAgICAgICAgfSkubWFwKHggPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGF0dHIgPSBhdHRyaWJ1dGVzW3hdO1xuICAgICAgICAgICAgICAgIGlmICghYXR0cikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gYXR0ci5maWVsZCA/IGF0dHIuZmllbGQgOiB4O1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyByZWR1Y2VNb2RlbEZyb21QYXRoKG1vZGVsOiBNLCBwYXRoOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3Qgc3RlcHMgPSBwYXRoLnNwbGl0KFwiLlwiKTtcblxuICAgICAgICBsZXQgc3RlcCA9IHN0ZXBzLnNoaWZ0KCk7XG4gICAgICAgIHdoaWxlIChzdGVwKSB7XG4gICAgICAgICAgICBpZiAobW9kZWxbc3RlcF0gaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgICAgICAgICAgIGlmICghc3RlcHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtb2RlbFtzdGVwXTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gKG1vZGVsW3N0ZXBdIGFzIEFycmF5PGFueT4pXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoeCA9PiB0aGlzLnJlZHVjZU1vZGVsRnJvbVBhdGgoeCwgc3RlcHMuam9pbihcIi5cIikpKVxuICAgICAgICAgICAgICAgICAgICAucmVkdWNlKChhbGwsIGN1cnJlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50IGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWy4uLmFsbCwgLi4uY3VycmVudF07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWy4uLmFsbCwgY3VycmVudF07XG4gICAgICAgICAgICAgICAgICAgIH0sIFtdKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbW9kZWwgPSBtb2RlbFtzdGVwXTtcbiAgICAgICAgICAgIGlmICghbW9kZWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzdGVwID0gc3RlcHMuc2hpZnQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBtb2RlbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGZpbmRDb2x1bW5GaWVsZE5hbWUobW9kZWw6IHR5cGVvZiBNLCBuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBmaWVsZCA9IE9iamVjdC5rZXlzKG1vZGVsLnJhd0F0dHJpYnV0ZXMpLmZpbmQoKGtleSkgPT4ge1xuICAgICAgICAgICAgaWYgKGtleSA9PT0gbmFtZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gbW9kZWwucmF3QXR0cmlidXRlc1trZXldLmZpZWxkID09PSBuYW1lO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG1vZGVsLnJhd0F0dHJpYnV0ZXNbZmllbGRdLmZpZWxkID8/IG5hbWU7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBpc0NvbHVtbkpzb24obW9kZWw6IHR5cGVvZiBNLCBuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgYXR0ciA9IG1vZGVsLnJhd0F0dHJpYnV0ZXNbbmFtZV0gPz8gT2JqZWN0LnZhbHVlcyhtb2RlbC5yYXdBdHRyaWJ1dGVzKS5maW5kKCh4KSA9PiB4LmZpZWxkID09PSBuYW1lKTtcbiAgICAgICAgcmV0dXJuIChhdHRyPy50eXBlIGFzIEFic3RyYWN0RGF0YVR5cGVDb25zdHJ1Y3Rvcik/LmtleSA9PT0gXCJKU09OXCI7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBnZW5lcmF0ZVdoZXJlQ29uZGl0aW9ucyhtb2RlbDogSW5jbHVkZVdoZXJlTW9kZWwsIG9wdGlvbnM/OiBvYmplY3QpOiBXaGVyZU9wdGlvbnMge1xuICAgICAgICBjb25zdCB3aGVyZSA9IHt9O1xuICAgICAgICBjb25zdCBrZXlzID0gW1xuICAgICAgICAgICAgLi4uT2JqZWN0LmtleXMobW9kZWwpLFxuICAgICAgICAgICAgLi4uT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhtb2RlbClcbiAgICAgICAgXTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgICAgICAgaWYgKCFtb2RlbC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gbW9kZWxba2V5IGFzIGFueV0ob3B0aW9ucyk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgICAgd2hlcmVba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHdoZXJlO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Sequelize } from "sequelize-typescript";
|
|
2
|
+
import { M } from "../sequelize.utils";
|
|
3
|
+
export declare class DialectFormatterService {
|
|
4
|
+
private sequelize;
|
|
5
|
+
constructor(sequelize: Sequelize);
|
|
6
|
+
formatCol(model: string, column: string): string;
|
|
7
|
+
getGroupLiteral(model: typeof M, group: string): string;
|
|
8
|
+
getOrderFullName(attribute: string, path: string[]): string;
|
|
9
|
+
getLiteralFullName(attribute: string, path: string | string[]): string;
|
|
10
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.DialectFormatterService = void 0;
|
|
13
|
+
const common_1 = require("@nestjs/common");
|
|
14
|
+
const sequelize_typescript_1 = require("sequelize-typescript");
|
|
15
|
+
let DialectFormatterService = class DialectFormatterService {
|
|
16
|
+
constructor(sequelize) {
|
|
17
|
+
this.sequelize = sequelize;
|
|
18
|
+
}
|
|
19
|
+
formatCol(model, column) {
|
|
20
|
+
const dialect = this.sequelize.getDialect();
|
|
21
|
+
if (dialect === "mssql") {
|
|
22
|
+
return `[${model}].[${column}]`;
|
|
23
|
+
}
|
|
24
|
+
return `\`${model}\`.\`${column}\``;
|
|
25
|
+
}
|
|
26
|
+
getGroupLiteral(model, group) {
|
|
27
|
+
const items = group.split(".");
|
|
28
|
+
if (items.length > 1) {
|
|
29
|
+
const column = items[items.length - 1];
|
|
30
|
+
return this.getLiteralFullName(column, items.slice(0, items.length - 1));
|
|
31
|
+
}
|
|
32
|
+
return this.formatCol(model.name, group);
|
|
33
|
+
}
|
|
34
|
+
getOrderFullName(attribute, path) {
|
|
35
|
+
const dialect = this.sequelize.getDialect();
|
|
36
|
+
if (dialect === "mssql") {
|
|
37
|
+
return `[${path.join("->")}].[${attribute}]`;
|
|
38
|
+
}
|
|
39
|
+
return `${path.join("->")}.${attribute}`;
|
|
40
|
+
}
|
|
41
|
+
getLiteralFullName(attribute, path) {
|
|
42
|
+
if (typeof path === "string") {
|
|
43
|
+
path = path.split(".");
|
|
44
|
+
}
|
|
45
|
+
const dialect = this.sequelize.getDialect();
|
|
46
|
+
if (dialect === "mssql") {
|
|
47
|
+
return `[${path.join("->")}].[${attribute}]`;
|
|
48
|
+
}
|
|
49
|
+
return `\`${path.join("->")}\`.\`${attribute}\``;
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
exports.DialectFormatterService = DialectFormatterService;
|
|
53
|
+
exports.DialectFormatterService = DialectFormatterService = __decorate([
|
|
54
|
+
(0, common_1.Injectable)(),
|
|
55
|
+
__metadata("design:paramtypes", [sequelize_typescript_1.Sequelize])
|
|
56
|
+
], DialectFormatterService);
|
|
57
|
+
|
|
58
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9zZXJ2aWNlcy9kaWFsZWN0LWZvcm1hdHRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLDJDQUE0QztBQUM1QywrREFBaUQ7QUFJMUMsSUFBTSx1QkFBdUIsR0FBN0IsTUFBTSx1QkFBdUI7SUFDaEMsWUFBb0IsU0FBb0I7UUFBcEIsY0FBUyxHQUFULFNBQVMsQ0FBVztJQUFHLENBQUM7SUFFckMsU0FBUyxDQUFDLEtBQWEsRUFBRSxNQUFjO1FBQzFDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDNUMsSUFBSSxPQUFPLEtBQUssT0FBTyxFQUFFO1lBQ3JCLE9BQU8sSUFBSSxLQUFLLE1BQU0sTUFBTSxHQUFHLENBQUM7U0FDbkM7UUFFRCxPQUFPLEtBQUssS0FBSyxRQUFRLE1BQU0sSUFBSSxDQUFDO0lBQ3hDLENBQUM7SUFFTSxlQUFlLENBQUMsS0FBZSxFQUFFLEtBQWE7UUFDakQsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMvQixJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ2xCLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3ZDLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDNUU7UUFFRCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRU0sZ0JBQWdCLENBQUMsU0FBaUIsRUFBRSxJQUFjO1FBQ3JELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDNUMsSUFBSSxPQUFPLEtBQUssT0FBTyxFQUFFO1lBQ3JCLE9BQU8sSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLFNBQVMsR0FBRyxDQUFDO1NBQ2hEO1FBRUQsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksU0FBUyxFQUFFLENBQUM7SUFDN0MsQ0FBQztJQUVNLGtCQUFrQixDQUFDLFNBQWlCLEVBQUUsSUFBdUI7UUFDaEUsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUU7WUFDMUIsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDMUI7UUFFRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQzVDLElBQUksT0FBTyxLQUFLLE9BQU8sRUFBRTtZQUNyQixPQUFPLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxTQUFTLEdBQUcsQ0FBQztTQUNoRDtRQUVELE9BQU8sS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLFNBQVMsSUFBSSxDQUFDO0lBQ3JELENBQUM7Q0FDSixDQUFBO0FBM0NZLDBEQUF1QjtrQ0FBdkIsdUJBQXVCO0lBRG5DLElBQUEsbUJBQVUsR0FBRTtxQ0FFc0IsZ0NBQVM7R0FEL0IsdUJBQXVCLENBMkNuQyIsImZpbGUiOiJsaWIvc2VydmljZXMvZGlhbGVjdC1mb3JtYXR0ZXIuc2VydmljZS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQG5lc3Rqcy9jb21tb25cIjtcbmltcG9ydCB7IFNlcXVlbGl6ZSB9IGZyb20gXCJzZXF1ZWxpemUtdHlwZXNjcmlwdFwiO1xuaW1wb3J0IHsgTSB9IGZyb20gXCIuLi9zZXF1ZWxpemUudXRpbHNcIjtcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIERpYWxlY3RGb3JtYXR0ZXJTZXJ2aWNlIHtcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHNlcXVlbGl6ZTogU2VxdWVsaXplKSB7fVxuXG4gICAgcHVibGljIGZvcm1hdENvbChtb2RlbDogc3RyaW5nLCBjb2x1bW46IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGRpYWxlY3QgPSB0aGlzLnNlcXVlbGl6ZS5nZXREaWFsZWN0KCk7XG4gICAgICAgIGlmIChkaWFsZWN0ID09PSBcIm1zc3FsXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBgWyR7bW9kZWx9XS5bJHtjb2x1bW59XWA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYFxcYCR7bW9kZWx9XFxgLlxcYCR7Y29sdW1ufVxcYGA7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEdyb3VwTGl0ZXJhbChtb2RlbDogdHlwZW9mIE0sIGdyb3VwOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBpdGVtcyA9IGdyb3VwLnNwbGl0KFwiLlwiKTtcbiAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbHVtbiA9IGl0ZW1zW2l0ZW1zLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TGl0ZXJhbEZ1bGxOYW1lKGNvbHVtbiwgaXRlbXMuc2xpY2UoMCwgaXRlbXMubGVuZ3RoIC0gMSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0Q29sKG1vZGVsLm5hbWUsIGdyb3VwKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0T3JkZXJGdWxsTmFtZShhdHRyaWJ1dGU6IHN0cmluZywgcGF0aDogc3RyaW5nW10pIHtcbiAgICAgICAgY29uc3QgZGlhbGVjdCA9IHRoaXMuc2VxdWVsaXplLmdldERpYWxlY3QoKTtcbiAgICAgICAgaWYgKGRpYWxlY3QgPT09IFwibXNzcWxcIikge1xuICAgICAgICAgICAgcmV0dXJuIGBbJHtwYXRoLmpvaW4oXCItPlwiKX1dLlske2F0dHJpYnV0ZX1dYDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBgJHtwYXRoLmpvaW4oXCItPlwiKX0uJHthdHRyaWJ1dGV9YDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0TGl0ZXJhbEZ1bGxOYW1lKGF0dHJpYnV0ZTogc3RyaW5nLCBwYXRoOiBzdHJpbmcgfCBzdHJpbmdbXSkge1xuICAgICAgICBpZiAodHlwZW9mIHBhdGggPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHBhdGggPSBwYXRoLnNwbGl0KFwiLlwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRpYWxlY3QgPSB0aGlzLnNlcXVlbGl6ZS5nZXREaWFsZWN0KCk7XG4gICAgICAgIGlmIChkaWFsZWN0ID09PSBcIm1zc3FsXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBgWyR7cGF0aC5qb2luKFwiLT5cIil9XS5bJHthdHRyaWJ1dGV9XWA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYFxcYCR7cGF0aC5qb2luKFwiLT5cIil9XFxgLlxcYCR7YXR0cmlidXRlfVxcYGA7XG4gICAgfVxufVxuIl19
|