@netgrif/components-core 6.2.8 → 6.2.9-RC.1
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/esm2020/lib/search/models/operator/substring.mjs +2 -2
- package/esm2020/lib/search/search-service/search.service.mjs +2 -2
- package/fesm2015/netgrif-components-core.mjs +2 -2
- package/fesm2015/netgrif-components-core.mjs.map +1 -1
- package/fesm2020/netgrif-components-core.mjs +2 -2
- package/fesm2020/netgrif-components-core.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -14,7 +14,7 @@ export class Substring extends Operator {
|
|
|
14
14
|
// TODO IMPROVEMENT 27.4.2020 - we could use regular expressions to search for substrings which would solve the unintuitive
|
|
15
15
|
// behavior that occurs when we search for strings that contain spaces. We need to escape the input string in a special way
|
|
16
16
|
// if we choose to do this
|
|
17
|
-
const escapedValue = Operator.escapeInput(args[0]).value.replace(
|
|
17
|
+
const escapedValue = Operator.escapeInput(args[0]).value.replace(/ /g, '\\ ');
|
|
18
18
|
return Operator.forEachKeyword(elasticKeywords, keyword => new Query(`(${keyword}:*${escapedValue}*)`));
|
|
19
19
|
}
|
|
20
20
|
getOperatorNameTemplate() {
|
|
@@ -24,4 +24,4 @@ export class Substring extends Operator {
|
|
|
24
24
|
return Operators.SUBSTRING;
|
|
25
25
|
}
|
|
26
26
|
}
|
|
27
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Vic3RyaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmV0Z3JpZi1jb21wb25lbnRzLWNvcmUvc3JjL2xpYi9zZWFyY2gvbW9kZWxzL29wZXJhdG9yL3N1YnN0cmluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQ3BDLE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRXRDOzs7R0FHRztBQUNILE1BQU0sT0FBTyxTQUFVLFNBQVEsUUFBZ0I7SUFDM0M7UUFDSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDYixDQUFDO0lBRUQsV0FBVyxDQUFDLGVBQThCLEVBQUUsSUFBbUI7UUFDM0QsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9CLDJIQUEySDtRQUMzSCw0SEFBNEg7UUFDNUgsMkJBQTJCO1FBQzNCLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDOUUsT0FBTyxRQUFRLENBQUMsY0FBYyxDQUFDLGVBQWUsRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLElBQUksT0FBTyxLQUFLLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQztJQUM1RyxDQUFDO0lBRUQsdUJBQXVCO1FBQ25CLE9BQU8sQ0FBQywyQkFBMkIsRUFBRSxRQUFRLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRUQsU0FBUztRQUNMLE9BQU8sU0FBUyxDQUFDLFNBQVMsQ0FBQztJQUMvQixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge09wZXJhdG9yfSBmcm9tICcuL29wZXJhdG9yJztcbmltcG9ydCB7UXVlcnl9IGZyb20gJy4uL3F1ZXJ5L3F1ZXJ5JztcbmltcG9ydCB7T3BlcmF0b3JzfSBmcm9tICcuL29wZXJhdG9ycyc7XG5cbi8qKlxuICogT3BlcmF0b3IgdGhhdCBtYXRjaGVzIGlmIHRoZSBpbnB1dCBpcyBhIHN1YnN0cmluZyBvZiBzb21lIHZhbHVlLlxuICogQ2FuIG9ubHkgYmUgdXNlZCBvbiBmaWVsZHMgdGhhdCBhcmUgdGV4dHMgYW5kIGFyZSBub3QgaW5kZXhlZCBhcyBrZXl3b3Jkcy5cbiAqL1xuZXhwb3J0IGNsYXNzIFN1YnN0cmluZyBleHRlbmRzIE9wZXJhdG9yPHN0cmluZz4ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigxKTtcbiAgICB9XG5cbiAgICBjcmVhdGVRdWVyeShlbGFzdGljS2V5d29yZHM6IEFycmF5PHN0cmluZz4sIGFyZ3M6IEFycmF5PHN0cmluZz4pOiBRdWVyeSB7XG4gICAgICAgIHRoaXMuY2hlY2tBcmd1bWVudHNDb3VudChhcmdzKTtcbiAgICAgICAgLy8gVE9ETyBJTVBST1ZFTUVOVCAyNy40LjIwMjAgLSB3ZSBjb3VsZCB1c2UgcmVndWxhciBleHByZXNzaW9ucyB0byBzZWFyY2ggZm9yIHN1YnN0cmluZ3Mgd2hpY2ggd291bGQgc29sdmUgdGhlIHVuaW50dWl0aXZlXG4gICAgICAgIC8vICBiZWhhdmlvciB0aGF0IG9jY3VycyB3aGVuIHdlIHNlYXJjaCBmb3Igc3RyaW5ncyB0aGF0IGNvbnRhaW4gc3BhY2VzLiBXZSBuZWVkIHRvIGVzY2FwZSB0aGUgaW5wdXQgc3RyaW5nIGluIGEgc3BlY2lhbCB3YXlcbiAgICAgICAgLy8gIGlmIHdlIGNob29zZSB0byBkbyB0aGlzXG4gICAgICAgIGNvbnN0IGVzY2FwZWRWYWx1ZSA9IE9wZXJhdG9yLmVzY2FwZUlucHV0KGFyZ3NbMF0pLnZhbHVlLnJlcGxhY2UoLyAvZywgJ1xcXFwgJyk7XG4gICAgICAgIHJldHVybiBPcGVyYXRvci5mb3JFYWNoS2V5d29yZChlbGFzdGljS2V5d29yZHMsIGtleXdvcmQgPT4gbmV3IFF1ZXJ5KGAoJHtrZXl3b3JkfToqJHtlc2NhcGVkVmFsdWV9KilgKSk7XG4gICAgfVxuXG4gICAgZ2V0T3BlcmF0b3JOYW1lVGVtcGxhdGUoKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgICAgIHJldHVybiBbJ3NlYXJjaC5vcGVyYXRvci5zdWJzdHJpbmcnLCBPcGVyYXRvci5JTlBVVF9QTEFDRUhPTERFUl07XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCk6IE9wZXJhdG9ycyB8IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBPcGVyYXRvcnMuU1VCU1RSSU5HO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -196,7 +196,7 @@ export class SearchService {
|
|
|
196
196
|
* @param searchedSubstring value that should be searched on all full text fields
|
|
197
197
|
*/
|
|
198
198
|
setFullTextFilter(searchedSubstring) {
|
|
199
|
-
const whiteSpacedSubstring = searchedSubstring.replace(
|
|
199
|
+
const whiteSpacedSubstring = searchedSubstring.replace(/ /g, '\\ ');
|
|
200
200
|
this._fullTextFilter = new SimpleFilter('', this._baseFilter.type, { fullText: whiteSpacedSubstring });
|
|
201
201
|
this.updateActiveFilter();
|
|
202
202
|
}
|
|
@@ -304,4 +304,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
|
|
|
304
304
|
type: Inject,
|
|
305
305
|
args: [NAE_BASE_FILTER]
|
|
306
306
|
}] }]; } });
|
|
307
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZXRncmlmLWNvbXBvbmVudHMtY29yZS9zcmMvbGliL3NlYXJjaC9zZWFyY2gtc2VydmljZS9zZWFyY2guc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsTUFBTSxFQUFFLFVBQVUsRUFBYSxRQUFRLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDdEUsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQzNELE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUNsRCxPQUFPLEVBQUMsZUFBZSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFlLE1BQU0sTUFBTSxDQUFDO0FBRWxGLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxtQ0FBbUMsQ0FBQztBQUMvRCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFHakUsT0FBTyxFQUFDLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5RCxPQUFPLEVBQUMscUNBQXFDLEVBQUMsTUFBTSwrREFBK0QsQ0FBQztBQUdwSCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sdUNBQXVDLENBQUM7QUFLdEUsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLCtCQUErQixDQUFDOzs7O0FBSTdEOztHQUVHO0FBRUgsTUFBTSxPQUFPLGFBQWE7SUE2QnRCOzs7Ozs7O09BT0c7SUFDSCxZQUFzQixJQUFtQixFQUNQLGdCQUFpQyxFQUM5QixVQUFzQjtRQUZyQyxTQUFJLEdBQUosSUFBSSxDQUFlO1FBQ1AscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFpQjtRQUUvRCxJQUFJLFVBQVUsQ0FBQyxNQUFNLFlBQVksTUFBTSxFQUFFO1lBQ3JDLElBQUksQ0FBQyxX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QyxlQUFlLEVBQUUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDO3FCQUM5QyxtQkFBbUIsRUFDM0IsQ0FBQztnQkFDRixLQUFLLE1BQU0sU0FBUyxJQUFJLE1BQU0sRUFBRTtvQkFDNUIsTUFBTSxvQkFBb0IsR0FBRyxlQUFlLENBQUM7b0JBQzdDLG9CQUFvQixDQUFDLElBQUksQ0FDckIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFO3dCQUNsRSxvQkFBb0IsQ0FBQyw0QkFBNEIsQ0FBQyxTQUFTLENBQUMsQ0FBQztvQkFDakUsQ0FBQyxDQUFDLENBQUMsQ0FDTixDQUFDO2lCQUNMO2FBQ0o7U0FDSjtRQUVELFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDMUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzlCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVEOztPQUVHO0lBQ0ksd0JBQXdCO1FBQzNCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO0lBQzFELENBQUM7OzJHQXRWUSxhQUFhLDhGQXVDRixlQUFlOytHQXZDMUIsYUFBYTs0RkFBYixhQUFhO2tCQUR6QixVQUFVOzswQkF1Q00sUUFBUTs7MEJBQ1IsTUFBTTsyQkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3QsIEluamVjdGFibGUsIE9uRGVzdHJveSwgT3B0aW9uYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtCb29sZWFuT3BlcmF0b3J9IGZyb20gJy4uL21vZGVscy9ib29sZWFuLW9wZXJhdG9yJztcbmltcG9ydCB7RmlsdGVyfSBmcm9tICcuLi8uLi9maWx0ZXIvbW9kZWxzL2ZpbHRlcic7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgZm9ya0pvaW4sIE9ic2VydmFibGUsIFN1YmplY3QsIFN1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1ByZWRpY2F0ZX0gZnJvbSAnLi4vbW9kZWxzL3ByZWRpY2F0ZS9wcmVkaWNhdGUnO1xuaW1wb3J0IHtTaW1wbGVGaWx0ZXJ9IGZyb20gJy4uLy4uL2ZpbHRlci9tb2RlbHMvc2ltcGxlLWZpbHRlcic7XG5pbXBvcnQge01lcmdlT3BlcmF0b3J9IGZyb20gJy4uLy4uL2ZpbHRlci9tb2RlbHMvbWVyZ2Utb3BlcmF0b3InO1xuaW1wb3J0IHtQcmVkaWNhdGVSZW1vdmFsRXZlbnR9IGZyb20gJy4uL21vZGVscy9wcmVkaWNhdGUtcmVtb3ZhbC1ldmVudCc7XG5pbXBvcnQge1F1ZXJ5fSBmcm9tICcuLi9tb2RlbHMvcXVlcnkvcXVlcnknO1xuaW1wb3J0IHtkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwLCB0YXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7RWRpdGFibGVDbGF1c2VQcmVkaWNhdGVXaXRoR2VuZXJhdG9yc30gZnJvbSAnLi4vbW9kZWxzL3ByZWRpY2F0ZS9lZGl0YWJsZS1jbGF1c2UtcHJlZGljYXRlLXdpdGgtZ2VuZXJhdG9ycyc7XG5pbXBvcnQge0NhdGVnb3J5fSBmcm9tICcuLi9tb2RlbHMvY2F0ZWdvcnkvY2F0ZWdvcnknO1xuaW1wb3J0IHtQcmVkaWNhdGVUcmVlTWV0YWRhdGF9IGZyb20gJy4uL21vZGVscy9wZXJzaXN0YW5jZS9nZW5lcmF0b3ItbWV0YWRhdGEnO1xuaW1wb3J0IHtOQUVfQkFTRV9GSUxURVJ9IGZyb20gJy4uL21vZGVscy9iYXNlLWZpbHRlci1pbmplY3Rpb24tdG9rZW4nO1xuaW1wb3J0IHtCYXNlRmlsdGVyfSBmcm9tICcuLi9tb2RlbHMvYmFzZS1maWx0ZXInO1xuaW1wb3J0IHtMb2dnZXJTZXJ2aWNlfSBmcm9tICcuLi8uLi9sb2dnZXIvc2VydmljZXMvbG9nZ2VyLnNlcnZpY2UnO1xuaW1wb3J0IHtDYXRlZ29yeUZhY3Rvcnl9IGZyb20gJy4uL2NhdGVnb3J5LWZhY3RvcnkvY2F0ZWdvcnktZmFjdG9yeSc7XG5pbXBvcnQge0ZpbHRlclR5cGV9IGZyb20gJy4uLy4uL2ZpbHRlci9tb2RlbHMvZmlsdGVyLXR5cGUnO1xuaW1wb3J0IHtMb2FkaW5nRW1pdHRlcn0gZnJvbSAnLi4vLi4vdXRpbGl0eS9sb2FkaW5nLWVtaXR0ZXInO1xuaW1wb3J0IHtGaWx0ZXJNZXRhZGF0YX0gZnJvbSAnLi4vbW9kZWxzL3BlcnNpc3RhbmNlL2ZpbHRlci1tZXRhZGF0YSc7XG5pbXBvcnQge0ZpbHRlclRleHRTZWdtZW50fSBmcm9tICcuLi9tb2RlbHMvcGVyc2lzdGFuY2UvZmlsdGVyLXRleHQtc2VnbWVudCc7XG5cbi8qKlxuICogSG9sZHMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGZpbHRlciB0aGF0IGlzIGN1cnJlbnRseSBhcHBsaWVkIHRvIHRoZSB2aWV3IGNvbXBvbmVudCwgdGhhdCBwcm92aWRlcyB0aGlzIHNlcnZpY2VzLlxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgU2VhcmNoU2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG5cbiAgICAvKipcbiAgICAgKiB7QGxpbmsgRmlsdGVyfSB0aGF0IGlzIGFwcGxpZWQgdG8gdGhlIHZpZXcsIGV2ZW4gaWYgdGhlIHVzZXIgZG9lc24ndCBzZWFyY2ggYW55dGhpbmcuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIF9iYXNlRmlsdGVyOiBGaWx0ZXI7XG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIHtAbGluayBQcmVkaWNhdGV9IHRyZWUgcm9vdCBmb3IgdXNlciBzZWFyY2ggcXVlcmllcy5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgX3Jvb3RQcmVkaWNhdGU6IEVkaXRhYmxlQ2xhdXNlUHJlZGljYXRlV2l0aEdlbmVyYXRvcnM7XG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIHtAbGluayBGaWx0ZXJ9IHRoYXQgaXMgY3VycmVudGx5IGJlaW5nIGFwcGxpZWQgdG8gdGhlIHZpZXcuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIF9hY3RpdmVGaWx0ZXI6IEJlaGF2aW9yU3ViamVjdDxGaWx0ZXI+O1xuICAgIC8qKlxuICAgICAqIEhvbGRzIHRoZSBmdWxsIHRleHQge0BsaW5rIEZpbHRlcn0gaWYgc2V0LCBgdW5kZWZpbmVkYCBvdGhlcndpc2UuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIF9mdWxsVGV4dEZpbHRlcjogU2ltcGxlRmlsdGVyIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIFRoZSBpbmRleCBvZiBhIHJlbW92ZWQge0BsaW5rIFByZWRpY2F0ZX0gaXMgZW1taXRlZCBpbnRvIHRoaXMgc3RyZWFtXG4gICAgICovXG4gICAgcHJvdGVjdGVkIF9wcmVkaWNhdGVSZW1vdmVkJDogU3ViamVjdDxQcmVkaWNhdGVSZW1vdmFsRXZlbnQ+O1xuICAgIHByb3RlY3RlZCBfbG9hZGluZ0Zyb21NZXRhZGF0YSQ6IExvYWRpbmdFbWl0dGVyO1xuICAgIC8qKlxuICAgICAqIFRoZSBgcm9vdFByZWRpY2F0ZWAgdXNlcyB0aGlzIHN0cmVhbSB0byBub3RpZnkgdGhlIHNlYXJjaCBzZXJ2aWNlIGFib3V0IGNoYW5nZXMgdG8gdGhlIGhlbGQgcXVlcnlcbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9wcmVkaWNhdGVRdWVyeUNoYW5nZWQkOiBTdWJqZWN0PHZvaWQ+O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgc3ViRmlsdGVyOiBTdWJzY3JpcHRpb247XG5cbiAgICAvKipcbiAgICAgKiBUaGUge0BsaW5rIFByZWRpY2F0ZX0gdHJlZSByb290IHVzZXMgYW4gW0FORF17QGxpbmsgQm9vbGVhbk9wZXJhdG9yI0FORH0gb3BlcmF0b3IgdG8gY29tYmluZSB0aGUgUHJlZGljYXRlcy5cbiAgICAgKiBAcGFyYW0gX2xvZyB7QGxpbmsgTG9nZ2VyU2VydmljZX1cbiAgICAgKiBAcGFyYW0gX2NhdGVnb3J5RmFjdG9yeSBhIHtAbGluayBDYXRlZ29yeUZhY3Rvcnl9IGluc3RhbmNlLiBUaGlzIGRlcGVuZGVuY3kgaXMgb3B0aW9uYWwuXG4gICAgICogSXQgaXMgcmVxdWlyZWQgaWYgd2Ugd2FudCB0byBsb2FkIHByZWRpY2F0ZSBmaWx0ZXIgZnJvbSBzYXZlZCBtZXRhZGF0YVxuICAgICAqIEBwYXJhbSBiYXNlRmlsdGVyIEZpbHRlciB0aGF0IHNob3VsZCBiZSBhcHBsaWVkIHRvIHRoZSB2aWV3IHdoZW4gbm8gc2VhcmNoaW5nIGlzIGJlaW5nIHBlcmZvcm1lZC5cbiAgICAgKiBJbmplY3RlZCB0cm91Z2ggdGhlIHtAbGluayBOQUVfQkFTRV9GSUxURVJ9IGluamVjdGlvbiB0b2tlbi5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgX2xvZzogTG9nZ2VyU2VydmljZSxcbiAgICAgICAgICAgICAgICBAT3B0aW9uYWwoKSBwcm90ZWN0ZWQgX2NhdGVnb3J5RmFjdG9yeTogQ2F0ZWdvcnlGYWN0b3J5LFxuICAgICAgICAgICAgICAgIEBJbmplY3QoTkFFX0JBU0VfRklMVEVSKSBiYXNlRmlsdGVyOiBCYXNlRmlsdGVyKSB7XG4gICAgICAgIGlmIChiYXNlRmlsdGVyLmZpbHRlciBpbnN0YW5jZW9mIEZpbHRlcikge1xuICAgICAgICAgICAgdGhpcy5fYmFzZUZpbHRlciA9IGJhc2VGaWx0ZXIuZmlsdGVyLmNsb25lKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoYmFzZUZpbHRlci5maWx0ZXIgaW5zdGFuY2VvZiBPYnNlcnZhYmxlKSB7XG4gICAgICAgICAgICB0aGlzLl9iYXNlRmlsdGVyID0gbmV3IFNpbXBsZUZpbHRlcignJywgYmFzZUZpbHRlci5maWx0ZXJUeXBlLCB7cHJvY2Vzczoge2lkZW50aWZpZXI6ICdfX0VNUFRZX18nfX0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBCYXNlRmlsdGVyIGlucHV0ISBZb3UgbXVzdCBwcm92aWRlIHRoZSBOQUVfQkFTRV9GSUxURVIgaW5qZWN0aW9uIHRva2VuIHdpdGggcHJvcGVyIHZhbHVlcyEnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3ByZWRpY2F0ZVF1ZXJ5Q2hhbmdlZCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAgICAgICB0aGlzLl9yb290UHJlZGljYXRlID0gbmV3IEVkaXRhYmxlQ2xhdXNlUHJlZGljYXRlV2l0aEdlbmVyYXRvcnMoQm9vbGVhbk9wZXJhdG9yLkFORCwgdGhpcy5fcHJlZGljYXRlUXVlcnlDaGFuZ2VkJCwgdW5kZWZpbmVkLCB0cnVlKTtcbiAgICAgICAgdGhpcy5fYWN0aXZlRmlsdGVyID0gbmV3IEJlaGF2aW9yU3ViamVjdDxGaWx0ZXI+KHRoaXMuX2Jhc2VGaWx0ZXIpO1xuICAgICAgICB0aGlzLl9wcmVkaWNhdGVSZW1vdmVkJCA9IG5ldyBTdWJqZWN0PFByZWRpY2F0ZVJlbW92YWxFdmVudD4oKTtcbiAgICAgICAgdGhpcy5fbG9hZGluZ0Zyb21NZXRhZGF0YSQgPSBuZXcgTG9hZGluZ0VtaXR0ZXIoKTtcblxuICAgICAgICBpZiAoYmFzZUZpbHRlci5maWx0ZXIgaW5zdGFuY2VvZiBPYnNlcnZhYmxlKSB7XG4gICAgICAgICAgICB0aGlzLnN1YkZpbHRlciA9IGJhc2VGaWx0ZXIuZmlsdGVyLnN1YnNjcmliZSgoZmlsdGVyKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fYmFzZUZpbHRlciA9IGZpbHRlci5jbG9uZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQWN0aXZlRmlsdGVyKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucHJlZGljYXRlUXVlcnlDaGFuZ2VkJC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVBY3RpdmVGaWx0ZXIoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3ByZWRpY2F0ZVJlbW92ZWQkLmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMuX2FjdGl2ZUZpbHRlci5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLl9wcmVkaWNhdGVRdWVyeUNoYW5nZWQkLmNvbXBsZXRlKCk7XG4gICAgICAgIGlmICh0aGlzLnN1YkZpbHRlcikge1xuICAgICAgICAgICAgdGhpcy5zdWJGaWx0ZXIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9sb2FkaW5nRnJvbU1ldGFkYXRhJC5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLl9yb290UHJlZGljYXRlLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyB0aGUgRmlsdGVyIHRoYXQgaXMgY3VycmVudGx5IGFwcGxpZWQgdG8gdGhlIHZpZXdcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGFjdGl2ZUZpbHRlcigpOiBGaWx0ZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWN0aXZlRmlsdGVyLmdldFZhbHVlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHJldHVybnMgYW4gYE9ic2VydmFibGVgIHRoYXQgdXBkYXRlcyBldmVyeSB0aW1lIHRoZSBhY3RpdmUgRmlsdGVyIGNoYW5nZXMuXG4gICAgICovXG4gICAgcHVibGljIGdldCBhY3RpdmVGaWx0ZXIkKCk6IE9ic2VydmFibGU8RmlsdGVyPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hY3RpdmVGaWx0ZXIuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHJldHVybnMgYHRydWVgIGlmIGEgZmlsdGVyIG90aGVyIHRoYW4gdGhlIGJhc2UgZmlsdGVyIGlzIGN1cnJlbnRseSBhcHBsaWVkLlxuICAgICAqIFJldHVybnMgYGZhbHNlYCBpZiBvbmx5IHRoZSBiYXNlIGZpbHRlciBpcyBjdXJyZW50bHkgYXBwbGllZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGFkZGl0aW9uYWxGaWx0ZXJzQXBwbGllZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLl9yb290UHJlZGljYXRlLnF1ZXJ5LmlzRW1wdHkgfHwgISF0aGlzLl9mdWxsVGV4dEZpbHRlcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgYW55IHZpc2libGUgcHJlZGljYXRlcyBhcmUgYXBwbGllZC5cbiAgICAgKiBSZXR1cm5zIGBmYWxzZWAgaWYgdGhlcmUgYXJlIG5vIHByZWRpY2F0ZXMsIG9yIGlmIHRoZXJlIGFyZSBvbmx5IGhpZGRlbiBwcmVkaWNhdGVzIGFwcGxpZWRcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGhhc1Zpc2libGVQcmVkaWNhdGVzKCk6IGJvb2xlYW4ge1xuICAgICAgICBmb3IgKGNvbnN0IHByZWRpY2F0ZSBvZiB0aGlzLl9yb290UHJlZGljYXRlLmdldFByZWRpY2F0ZU1hcCgpLnZhbHVlcygpKSB7XG4gICAgICAgICAgICBpZiAocHJlZGljYXRlLmlzVmlzaWJsZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyBhIGNvcHkgb2YgdGhlIGJhc2UgZmlsdGVyXG4gICAgICovXG4gICAgcHVibGljIGdldCBiYXNlRmlsdGVyKCk6IEZpbHRlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9iYXNlRmlsdGVyLmNsb25lKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHJldHVybnMgYW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSBpbmRleCBvZiB0aGUgcmVtb3ZlZCBwcmVkaWNhdGUgd2hlbmV2ZXIgYSBwcmVkaWNhdGUgaXMgcmVtb3ZlZFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgcHJlZGljYXRlUmVtb3ZlZCQoKTogT2JzZXJ2YWJsZTxQcmVkaWNhdGVSZW1vdmFsRXZlbnQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ByZWRpY2F0ZVJlbW92ZWQkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEByZXR1cm5zIHRoZSByb290IHByZWRpY2F0ZSBvZiB0aGUgc2VhcmNoIHNlcnZpY2UsIHRoYXQgY2FuIGJlIHVzZWQgdG8gZ2VuZXJhdGUgc2VhcmNoIHJlcXVlc3RzIHdpdGggY3VzdG9tIHF1ZXJpZXNcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHJvb3RQcmVkaWNhdGUoKTogRWRpdGFibGVDbGF1c2VQcmVkaWNhdGVXaXRoR2VuZXJhdG9ycyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yb290UHJlZGljYXRlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEByZXR1cm5zIHRoZSB0eXBlIG9mIHRoZSBmaWx0ZXIgaGVsZCBpbiB0aGlzIHNlYXJjaCBzZXJ2aWNlIGluc3RhbmNlXG4gICAgICovXG4gICAgcHVibGljIGdldCBmaWx0ZXJUeXBlKCk6IEZpbHRlclR5cGUge1xuICAgICAgICByZXR1cm4gdGhpcy5iYXNlRmlsdGVyLnR5cGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHJldHVybnMgd2hldGhlciB0aGUgc2VhcmNoIHNlcnZpY2UgaXMgY3VycmVudGx5IGxvYWRpbmcgaXRzIHN0YXRlIGZyb20gbWV0YWRhdGEgb3Igbm90LlxuICAgICAqXG4gICAgICogU2VlIFtsb2FkRnJvbU1ldGFkYXRhKClde0BsaW5rIFNlYXJjaFNlcnZpY2UjbG9hZEZyb21NZXRhZGF0YX1cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGxvYWRpbmdGcm9tTWV0YWRhdGEoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sb2FkaW5nRnJvbU1ldGFkYXRhJC52YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyBhbiBgT2JzZXJ2YWJsZWAgdGhhdCBlbWl0cyBgdHJ1ZWAgaWYgdGhlIHNlYXJjaCBzZXJ2aWNlIGlzIGN1cnJlbnRseSBsb2FkaW5nIGl0cyBzdGF0ZSBmcm9tIG1ldGFkYXRhLFxuICAgICAqIGVtaXRzIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICAgICAqXG4gICAgICogU2VlIFtsb2FkRnJvbU1ldGFkYXRhKClde0BsaW5rIFNlYXJjaFNlcnZpY2UjbG9hZEZyb21NZXRhZGF0YX1cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGxvYWRpbmdGcm9tTWV0YWRhdGEkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9hZGluZ0Zyb21NZXRhZGF0YSQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHJldHVybnMgYW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHdoZW5ldmVyIHRoZSByb290IHByZWRpY2F0ZXMgcXVlcnkgY2hhbmdlc1xuICAgICAqL1xuICAgIHByb3RlY3RlZCBnZXQgcHJlZGljYXRlUXVlcnlDaGFuZ2VkJCgpOiBPYnNlcnZhYmxlPFF1ZXJ5PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wcmVkaWNhdGVRdWVyeUNoYW5nZWQkLmFzT2JzZXJ2YWJsZSgpLnBpcGUoXG4gICAgICAgICAgICBtYXAoKCkgPT4gdGhpcy5fcm9vdFByZWRpY2F0ZS5xdWVyeSksXG4gICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgocHJldiwgY3VycikgPT4gcHJldiAmJiBwcmV2LmVxdWFscyhjdXJyKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGEge0BsaW5rIFByZWRpY2F0ZX0gdG8gdGhlIFByZWRpY2F0ZSByb290IGFuZCB1cGRhdGVzIHRoZSBhY3RpdmUgRmlsdGVyLlxuICAgICAqXG4gICAgICogUHJlZGljYXRlcyBhZGRlZCB0aGlzIHdheSB3aWxsIG5vdCBiZSB2aXNpYmxlIGluIHRoZSBzZWFyY2ggR1VJLlxuICAgICAqIElmIHlvdSB3YW50IHRvIG1ha2Ugc3VyZSB5b3VyIHByZWRpY2F0ZXMgYXJlIHZpc2libGUgKGFuZCBlZGl0YWJsZSlcbiAgICAgKiB1c2UgdGhlIFthZGRHZW5lcmF0ZWRMZWFmUHJlZGljYXRlKClde0BsaW5rIFNlYXJjaFNlcnZpY2UjYWRkR2VuZXJhdGVkTGVhZlByZWRpY2F0ZX0gbWV0aG9kIGluc3RlYWQuXG4gICAgICogQHBhcmFtIG5ld1ByZWRpY2F0ZSBQcmVkaWNhdGUgdGhhdCBzaG91bGQgYmUgYWRkZWQgdG8gdGhlIHNlYXJjaCBxdWVyaWVzLlxuICAgICAqIEByZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgYWRkZWQgUHJlZGljYXRlXG4gICAgICovXG4gICAgcHVibGljIGFkZFByZWRpY2F0ZShuZXdQcmVkaWNhdGU6IFByZWRpY2F0ZSk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yb290UHJlZGljYXRlLmFkZFByZWRpY2F0ZShuZXdQcmVkaWNhdGUsIGZhbHNlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgbmV3IGhpZGRlbiBicmFuY2ggb2YgdGhlIHByZWRpY2F0ZSB0cmVlIHdpdGggYSBzaW5ndWxhciBsZWFmIG5vZGUgY29udGFpbmluZyB0aGUgcHJvdmlkZWQgUXVlcnkuXG4gICAgICpcbiAgICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGFkZCBwcmVkaWNhdGVzIHRvIHRoZSBzZWFyY2ggdHJlZSAodGhpbmsgaGVhZGVyIHNlYXJjaCksXG4gICAgICogd2hpY2ggY2FuIGJlIG1hZGUgdmlzaWJsZSBhbmQgZWRpdGFibGUgaW4gdGhlIHNlYXJjaCBHVUkgbGF0ZXIuXG4gICAgICogQHBhcmFtIGdlbmVyYXRvciB0aGUgZ2VuZXJhdG9yIHRoYXQgaXMgaW4gc3VjaCBzdGF0ZSwgdGhhdCBpdCBnZW5lcmF0ZXMgdGhlIFF1ZXJ5LCB0aGF0IHNob3VsZCBiZSBhZGRlZCBhcyBicmFuY2gvbGVhZi5cbiAgICAgKiBJZiB0aGUgZ2VuZXJhdG9yIGRvZXNuJ3QgY3VycmVudGx5IGdlbmVyYXRlIGEgcXVlcnkgYSBub2RlIHdpdGggYW4gZW1wdHkgcXVlcnkgd2lsbCBiZSBhZGRlZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkR2VuZXJhdGVkTGVhZlByZWRpY2F0ZShnZW5lcmF0b3I6IENhdGVnb3J5PGFueT4pOiBudW1iZXIge1xuICAgICAgICBjb25zdCBicmFuY2hJZCA9IHRoaXMuX3Jvb3RQcmVkaWNhdGUuYWRkTmV3Q2xhdXNlUHJlZGljYXRlKEJvb2xlYW5PcGVyYXRvci5PUiwgZmFsc2UpO1xuICAgICAgICBjb25zdCBicmFuY2ggPSAoXG4gICAgICAgICAgICB0aGlzLl9yb290UHJlZGljYXRlLmdldFByZWRpY2F0ZU1hcCgpLmdldChicmFuY2hJZCkuZ2V0V3JhcHBlZFByZWRpY2F0ZSgpIGFzIHVua25vd24gYXMgRWRpdGFibGVDbGF1c2VQcmVkaWNhdGVXaXRoR2VuZXJhdG9yc1xuICAgICAgICApO1xuICAgICAgICBicmFuY2guYWRkTmV3UHJlZGljYXRlRnJvbUdlbmVyYXRvcihnZW5lcmF0b3IpO1xuICAgICAgICByZXR1cm4gYnJhbmNoSWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyB0aGUge0BsaW5rIFByZWRpY2F0ZX0gb2JqZWN0IGZyb20gdGhlIHByb3ZpZGVkIGluZGV4LiBJZiB0aGUgaW5kZXggaXMgaW52YWxpZCBkb2VzIG5vdGhpbmcuXG4gICAgICogVXBkYXRlcyB0aGUgdGhlIGFjdGl2ZSBGaWx0ZXIgaWYgdGhlIFByZWRpY2F0ZSB0cmVlIHdhcyBhZmZlY3RlZC5cbiAgICAgKiBAcGFyYW0gaW5kZXggaW5kZXggb2YgdGhlIFByZWRpY2F0ZSB0aGF0IHNob3VsZCBiZSByZW1vdmVkXG4gICAgICogQHBhcmFtIGNsZWFySW5wdXQgd2hldGhlciB0aGUgaW5wdXQsIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIHByZWRpY2F0ZSBzaG91bGQgYmUgY2xlYXJlZFxuICAgICAqL1xuICAgIHB1YmxpYyByZW1vdmVQcmVkaWNhdGUoaW5kZXg6IG51bWJlciwgY2xlYXJJbnB1dCA9IHRydWUpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX3Jvb3RQcmVkaWNhdGUucmVtb3ZlUHJlZGljYXRlKGluZGV4KSkge1xuICAgICAgICAgICAgdGhpcy5fcHJlZGljYXRlUmVtb3ZlZCQubmV4dCh7aW5kZXgsIGNsZWFySW5wdXR9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYWxsIHtAbGluayBQcmVkaWNhdGV9IG9iamVjdHMgdGhhdCBjb250cmlidXRlIHRvIHRoZSBzZWFyY2guIFVwZGF0ZXMgdGhlIGFjdGl2ZSBGaWx0ZXIgaWYgaXQgd2FzIGFmZmVjdGVkLlxuICAgICAqXG4gICAgICogQHBhcmFtIGNsZWFySGlkZGVuIHdoZXRoZXIgdGhlIGhpZGRlbiBwcmVkaWNhdGVzIHNob3VsZCBiZSBjbGVhcmVkIGFzIHdlbGxcbiAgICAgKi9cbiAgICBwdWJsaWMgY2xlYXJQcmVkaWNhdGVzKGNsZWFySGlkZGVuID0gZmFsc2UpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX3Jvb3RQcmVkaWNhdGUuZ2V0UHJlZGljYXRlTWFwKCkuc2l6ZSA+IDApIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2lkLCBwcmVkaWNhdGVdIG9mIHRoaXMuX3Jvb3RQcmVkaWNhdGUuZ2V0UHJlZGljYXRlTWFwKCkuZW50cmllcygpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNsZWFySGlkZGVuIHx8IHByZWRpY2F0ZS5pc1Zpc2libGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVQcmVkaWNhdGUoaWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudXBkYXRlQWN0aXZlRmlsdGVyKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGEge0BsaW5rIEZpbHRlcn0gd2l0aCB0aGUgW2Z1bGxUZXh0XXtAbGluayBDYXNlU2VhcmNoUmVxdWVzdEJvZHkjZnVsbFRleHR9IGF0dHJpYnV0ZSBzZXQgdG8gdGhlIHByb3ZpZGVkIHZhbHVlLlxuICAgICAqIElmIGZ1bGwgdGV4dCBmaWx0ZXIgaXMgYWxyZWFkeSBzZXQsIGl0IHdpbGwgYmUgcmVwbGFjZWQuXG4gICAgICogQHBhcmFtIHNlYXJjaGVkU3Vic3RyaW5nIHZhbHVlIHRoYXQgc2hvdWxkIGJlIHNlYXJjaGVkIG9uIGFsbCBmdWxsIHRleHQgZmllbGRzXG4gICAgICovXG4gICAgcHVibGljIHNldEZ1bGxUZXh0RmlsdGVyKHNlYXJjaGVkU3Vic3RyaW5nOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgd2hpdGVTcGFjZWRTdWJzdHJpbmcgPSBzZWFyY2hlZFN1YnN0cmluZy5yZXBsYWNlKCcgJywgJ1xcXFwgJyk7XG4gICAgICAgIHRoaXMuX2Z1bGxUZXh0RmlsdGVyID0gbmV3IFNpbXBsZUZpbHRlcignJywgdGhpcy5fYmFzZUZpbHRlci50eXBlLCB7ZnVsbFRleHQ6IHdoaXRlU3BhY2VkU3Vic3RyaW5nfSk7XG4gICAgICAgIHRoaXMudXBkYXRlQWN0aXZlRmlsdGVyKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xlYXJzIHRoZSBmdWxsIHRleHQgZmlsdGVyIChpZiBzZXQpLiBJZiB0aGUgZnVsbCB0ZXh0IGZpbHRlciBpcyBub3Qgc2V0LCBkb2VzIG5vdGhpbmcuXG4gICAgICovXG4gICAgcHVibGljIGNsZWFyRnVsbFRleHRGaWx0ZXIoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHdhc0Z1bGx0ZXh0U2V0ID0gdGhpcy5fZnVsbFRleHRGaWx0ZXIgIT09IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5fZnVsbFRleHRGaWx0ZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmICh3YXNGdWxsdGV4dFNldCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVBY3RpdmVGaWx0ZXIoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNob3dzIHRoZSBwcmVkaWNhdGVzIHdpdGggdGhlIGdpdmVuIGlkcy4gU2tpcHMgaWRzIHRoYXQgZG9uJ3QgZXhpc3QuXG4gICAgICogQHBhcmFtIHByZWRpY2F0ZUlkcyB0aGUgaWRzIG9mIHRoZSBwcmVkaWNhdGVzIHRoYXQgc2hvdWxkIGJlIHNob3duLlxuICAgICAqL1xuICAgIHB1YmxpYyBzaG93KHByZWRpY2F0ZUlkczogQXJyYXk8bnVtYmVyPik6IHZvaWQge1xuICAgICAgICB0aGlzLl9yb290UHJlZGljYXRlLnNob3dQcmVkaWNhdGVzKHByZWRpY2F0ZUlkcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVhZHMgdGhlIGN1cnJlbnQgcXVlcnkgZnJvbSB0aGUgcHJlZGljYXRlIHRyZWUsIGNvbWJpbmVzIGl0IHdpdGggdGhlIGJhc2UgRmlsdGVyIGFuZCBmdWxsIHRleHQgRmlsdGVyIChpZiBzZXQpXG4gICAgICogYW5kIHVwZGF0ZXMgdGhlIGFjdGl2ZSBGaWx0ZXIuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHVwZGF0ZUFjdGl2ZUZpbHRlcigpOiB2b2lkIHtcbiAgICAgICAgbGV0IGFkZGl0aW9uYWxGaWx0ZXI6IEZpbHRlcjtcbiAgICAgICAgaWYgKCF0aGlzLl9yb290UHJlZGljYXRlLnF1ZXJ5LmlzRW1wdHkpIHtcbiAgICAgICAgICAgIGFkZGl0aW9uYWxGaWx0ZXIgPSBuZXcgU2ltcGxlRmlsdGVyKCcnLCB0aGlzLl9iYXNlRmlsdGVyLnR5cGUsIHtxdWVyeTogdGhpcy5fcm9vdFByZWRpY2F0ZS5xdWVyeS52YWx1ZX0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9mdWxsVGV4dEZpbHRlcikge1xuICAgICAgICAgICAgaWYgKGFkZGl0aW9uYWxGaWx0ZXIpIHtcbiAgICAgICAgICAgICAgICBhZGRpdGlvbmFsRmlsdGVyID0gYWRkaXRpb25hbEZpbHRlci5tZXJnZSh0aGlzLl9mdWxsVGV4dEZpbHRlciwgTWVyZ2VPcGVyYXRvci5BTkQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhZGRpdGlvbmFsRmlsdGVyID0gdGhpcy5fZnVsbFRleHRGaWx0ZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFkZGl0aW9uYWxGaWx0ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuX2FjdGl2ZUZpbHRlci5uZXh0KHRoaXMuX2Jhc2VGaWx0ZXIubWVyZ2UoYWRkaXRpb25hbEZpbHRlciwgTWVyZ2VPcGVyYXRvci5BTkQpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2FjdGl2ZUZpbHRlci5uZXh0KHRoaXMuX2Jhc2VGaWx0ZXIuY2xvbmUoKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyBgdW5kZWZpbmVkYCBpZiB0aGUgcHJlZGljYXRlIHRyZWUgY29udGFpbnMgbm8gY29tcGxldGUgcXVlcnkuXG4gICAgICogT3RoZXJ3aXNlIHJldHVybnMgdGhlIHNlcmlhbGl6ZWQgZm9ybSBvZiB0aGUgY29tcGxldGVkIHF1ZXJpZXMgaW4gdGhlIHByZWRpY2F0ZSB0cmVlLlxuICAgICAqL1xuICAgIHB1YmxpYyBjcmVhdGVQcmVkaWNhdGVNZXRhZGF0YSgpOiBQcmVkaWNhdGVUcmVlTWV0YWRhdGEgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5fcm9vdFByZWRpY2F0ZS5jcmVhdGVHZW5lcmF0b3JNZXRhZGF0YSgpIGFzIFByZWRpY2F0ZVRyZWVNZXRhZGF0YTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXBsYWNlcyB0aGUgY3VycmVudCBwcmVkaWNhdGUgZmlsdGVyIGJ5IHRoZSBvbmUgY29ycmVzcG9uZGluZyB0byB0aGUgcHJvdmlkZWQgZ2VuZXJhdG9yIG1ldGFkYXRhLlxuICAgICAqXG4gICAgICogVGhlIHtAbGluayBDYXRlZ29yeUZhY3Rvcnl9IGluc3RhbmNlIG11c3QgYmUgcHJvdmlkZWQgZm9yIHRoaXMgc2VydmljZSBpZiB3ZSB3YW50IHRvIHVzZSB0aGlzIG1ldGhvZC4gTG9ncyBhbiBlcnJvciBhbmQgZG9lcyBub3RoaW5nLlxuICAgICAqXG4gICAgICogVGhlIGBmaWx0ZXJUeXBlYCBvZiB0aGlzIHNlYXJjaCBzZXJ2aWNlIG11c3QgbWF0Y2ggdGhlIGBmaWx0ZXJUeXBlYCBvZiB0aGUgcHJvdmlkZWQgbWV0YWRhdGEuIE90aGVyd2lzZSBhbiBlcnJvciBpcyB0aHJvd24uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbWV0YWRhdGEgdGhlIHNlcmlhbGl6ZWQgc3RhdGUgb2YgdGhlIHByZWRpY2F0ZSB0cmVlIHRoYXQgc2hvdWxkIGJlIHJlc3RvcmVkIHRvIHRoaXMgc2VhcmNoIHNlcnZpY2VcbiAgICAgKi9cbiAgICBwdWJsaWMgbG9hZEZyb21NZXRhZGF0YShtZXRhZGF0YTogRmlsdGVyTWV0YWRhdGEpIHtcbiAgICAgICAgaWYgKHRoaXMuX2NhdGVnb3J5RmFjdG9yeSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5fbG9nLmVycm9yKCdBIENhdGVnb3J5RmFjdG9yeSBpbnN0YW5jZSBtdXN0IGJlIHByb3ZpZGVkIGZvciB0aGUgU2VhcmNoU2VydmljZSdcbiAgICAgICAgICAgICAgICArICcgaWYgeW91IHdhbnQgdG8gcmVjb25zdHJ1Y3QgYSBwcmVkaWNhdGUgZmlsdGVyIGZyb20gc2F2ZWQgbWV0YWRhdGEnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtZXRhZGF0YS5maWx0ZXJUeXBlICE9PSB0aGlzLmZpbHRlclR5cGUpIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKGBUaGUgZmlsdGVyIHR5cGUgb2YgdGhlIHByb3ZpZGVkIG1ldGFkYXRhICgke21ldGFkYXRhLmZpbHRlclR5cGVcbiAgICAgICAgICAgIH0pIGRvZXMgbm90IG1hdGNoIHRoZSBmaWx0ZXIgdHlwZSBvZiB0aGUgc2VhcmNoIHNlcnZpY2UgKCR7dGhpcy5maWx0ZXJUeXBlfSkhYCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNsZWFyUHJlZGljYXRlcyh0cnVlKTtcbiAgICAgICAgdGhpcy5fbG9hZGluZ0Zyb21NZXRhZGF0YSQub24oKTtcblxuICAgICAgICBjb25zdCBnZW5lcmF0b3JPYnNlcnZhYmxlcyA9IFtdO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShtZXRhZGF0YS5wcmVkaWNhdGVNZXRhZGF0YSkpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY2xhdXNlIG9mIG1ldGFkYXRhLnByZWRpY2F0ZU1ldGFkYXRhKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYnJhbmNoSWQgPSB0aGlzLl9yb290UHJlZGljYXRlLmFkZE5ld0NsYXVzZVByZWRpY2F0ZShCb29sZWFuT3BlcmF0b3IuT1IpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJyYW5jaFByZWRpY2F0ZSA9IChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcm9vdFByZWRpY2F0ZS5nZXRQcmVkaWNhdGVNYXAoKS5nZXQoYnJhbmNoSWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAuZ2V0V3JhcHBlZFByZWRpY2F0ZSgpIGFzIHVua25vd24gYXMgRWRpdGFibGVDbGF1c2VQcmVkaWNhdGVXaXRoR2VuZXJhdG9yc1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBwcmVkaWNhdGUgb2YgY2xhdXNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxvY2FsQnJhbmNoUmVmZXJlbmNlID0gYnJhbmNoUHJlZGljYXRlO1xuICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3JPYnNlcnZhYmxlcy5wdXNoKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2F0ZWdvcnlGYWN0b3J5LmdldEZyb21NZXRhZGF0YShwcmVkaWNhdGUpLnBpcGUodGFwKGdlbmVyYXRvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxCcmFuY2hSZWZlcmVuY2UuYWRkTmV3UHJlZGljYXRlRnJvbUdlbmVyYXRvcihnZW5lcmF0b3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9ya0pvaW4oZ2VuZXJhdG9yT2JzZXJ2YWJsZXMpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2FkaW5nRnJvbU1ldGFkYXRhJC5vZmYoKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQWN0aXZlRmlsdGVyKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEByZXR1cm5zIGFuIEFycmF5IG9mIGZpbHRlciB0ZXh0IHNlZ21lbnRzIHRoYXQgY29ycmVzcG9uZCB0byB0aGUgY3VycmVudGx5IGRpc3BsYXllZCBjb21wbGV0ZWQgcHJlZGljYXRlc1xuICAgICAqL1xuICAgIHB1YmxpYyBjcmVhdGVGaWx0ZXJUZXh0U2VnbWVudHMoKTogQXJyYXk8RmlsdGVyVGV4dFNlZ21lbnQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvb3RQcmVkaWNhdGUuY3JlYXRlRmlsdGVyVGV4dFNlZ21lbnRzKCk7XG4gICAgfVxufVxuIl19
|
|
307
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZXRncmlmLWNvbXBvbmVudHMtY29yZS9zcmMvbGliL3NlYXJjaC9zZWFyY2gtc2VydmljZS9zZWFyY2guc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsTUFBTSxFQUFFLFVBQVUsRUFBYSxRQUFRLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDdEUsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQzNELE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUNsRCxPQUFPLEVBQUMsZUFBZSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFlLE1BQU0sTUFBTSxDQUFDO0FBRWxGLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxtQ0FBbUMsQ0FBQztBQUMvRCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFHakUsT0FBTyxFQUFDLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5RCxPQUFPLEVBQUMscUNBQXFDLEVBQUMsTUFBTSwrREFBK0QsQ0FBQztBQUdwSCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sdUNBQXVDLENBQUM7QUFLdEUsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLCtCQUErQixDQUFDOzs7O0FBSTdEOztHQUVHO0FBRUgsTUFBTSxPQUFPLGFBQWE7SUE2QnRCOzs7Ozs7O09BT0c7SUFDSCxZQUFzQixJQUFtQixFQUNQLGdCQUFpQyxFQUM5QixVQUFzQjtRQUZyQyxTQUFJLEdBQUosSUFBSSxDQUFlO1FBQ1AscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFpQjtRQUUvRCxJQUFJLFVBQVUsQ0FBQyxNQUFNLFlBQVksTUFBTSxFQUFFO1lBQ3JDLElBQUksQ0FBQyxX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QyxlQUFlLEVBQUUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDO3FCQUM5QyxtQkFBbUIsRUFDM0IsQ0FBQztnQkFDRixLQUFLLE1BQU0sU0FBUyxJQUFJLE1BQU0sRUFBRTtvQkFDNUIsTUFBTSxvQkFBb0IsR0FBRyxlQUFlLENBQUM7b0JBQzdDLG9CQUFvQixDQUFDLElBQUksQ0FDckIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFO3dCQUNsRSxvQkFBb0IsQ0FBQyw0QkFBNEIsQ0FBQyxTQUFTLENBQUMsQ0FBQztvQkFDakUsQ0FBQyxDQUFDLENBQUMsQ0FDTixDQUFDO2lCQUNMO2FBQ0o7U0FDSjtRQUVELFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDMUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzlCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVEOztPQUVHO0lBQ0ksd0JBQXdCO1FBQzNCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO0lBQzFELENBQUM7OzJHQXRWUSxhQUFhLDhGQXVDRixlQUFlOytHQXZDMUIsYUFBYTs0RkFBYixhQUFhO2tCQUR6QixVQUFVOzswQkF1Q00sUUFBUTs7MEJBQ1IsTUFBTTsyQkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3QsIEluamVjdGFibGUsIE9uRGVzdHJveSwgT3B0aW9uYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtCb29sZWFuT3BlcmF0b3J9IGZyb20gJy4uL21vZGVscy9ib29sZWFuLW9wZXJhdG9yJztcbmltcG9ydCB7RmlsdGVyfSBmcm9tICcuLi8uLi9maWx0ZXIvbW9kZWxzL2ZpbHRlcic7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgZm9ya0pvaW4sIE9ic2VydmFibGUsIFN1YmplY3QsIFN1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1ByZWRpY2F0ZX0gZnJvbSAnLi4vbW9kZWxzL3ByZWRpY2F0ZS9wcmVkaWNhdGUnO1xuaW1wb3J0IHtTaW1wbGVGaWx0ZXJ9IGZyb20gJy4uLy4uL2ZpbHRlci9tb2RlbHMvc2ltcGxlLWZpbHRlcic7XG5pbXBvcnQge01lcmdlT3BlcmF0b3J9IGZyb20gJy4uLy4uL2ZpbHRlci9tb2RlbHMvbWVyZ2Utb3BlcmF0b3InO1xuaW1wb3J0IHtQcmVkaWNhdGVSZW1vdmFsRXZlbnR9IGZyb20gJy4uL21vZGVscy9wcmVkaWNhdGUtcmVtb3ZhbC1ldmVudCc7XG5pbXBvcnQge1F1ZXJ5fSBmcm9tICcuLi9tb2RlbHMvcXVlcnkvcXVlcnknO1xuaW1wb3J0IHtkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwLCB0YXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7RWRpdGFibGVDbGF1c2VQcmVkaWNhdGVXaXRoR2VuZXJhdG9yc30gZnJvbSAnLi4vbW9kZWxzL3ByZWRpY2F0ZS9lZGl0YWJsZS1jbGF1c2UtcHJlZGljYXRlLXdpdGgtZ2VuZXJhdG9ycyc7XG5pbXBvcnQge0NhdGVnb3J5fSBmcm9tICcuLi9tb2RlbHMvY2F0ZWdvcnkvY2F0ZWdvcnknO1xuaW1wb3J0IHtQcmVkaWNhdGVUcmVlTWV0YWRhdGF9IGZyb20gJy4uL21vZGVscy9wZXJzaXN0YW5jZS9nZW5lcmF0b3ItbWV0YWRhdGEnO1xuaW1wb3J0IHtOQUVfQkFTRV9GSUxURVJ9IGZyb20gJy4uL21vZGVscy9iYXNlLWZpbHRlci1pbmplY3Rpb24tdG9rZW4nO1xuaW1wb3J0IHtCYXNlRmlsdGVyfSBmcm9tICcuLi9tb2RlbHMvYmFzZS1maWx0ZXInO1xuaW1wb3J0IHtMb2dnZXJTZXJ2aWNlfSBmcm9tICcuLi8uLi9sb2dnZXIvc2VydmljZXMvbG9nZ2VyLnNlcnZpY2UnO1xuaW1wb3J0IHtDYXRlZ29yeUZhY3Rvcnl9IGZyb20gJy4uL2NhdGVnb3J5LWZhY3RvcnkvY2F0ZWdvcnktZmFjdG9yeSc7XG5pbXBvcnQge0ZpbHRlclR5cGV9IGZyb20gJy4uLy4uL2ZpbHRlci9tb2RlbHMvZmlsdGVyLXR5cGUnO1xuaW1wb3J0IHtMb2FkaW5nRW1pdHRlcn0gZnJvbSAnLi4vLi4vdXRpbGl0eS9sb2FkaW5nLWVtaXR0ZXInO1xuaW1wb3J0IHtGaWx0ZXJNZXRhZGF0YX0gZnJvbSAnLi4vbW9kZWxzL3BlcnNpc3RhbmNlL2ZpbHRlci1tZXRhZGF0YSc7XG5pbXBvcnQge0ZpbHRlclRleHRTZWdtZW50fSBmcm9tICcuLi9tb2RlbHMvcGVyc2lzdGFuY2UvZmlsdGVyLXRleHQtc2VnbWVudCc7XG5cbi8qKlxuICogSG9sZHMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGZpbHRlciB0aGF0IGlzIGN1cnJlbnRseSBhcHBsaWVkIHRvIHRoZSB2aWV3IGNvbXBvbmVudCwgdGhhdCBwcm92aWRlcyB0aGlzIHNlcnZpY2VzLlxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgU2VhcmNoU2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG5cbiAgICAvKipcbiAgICAgKiB7QGxpbmsgRmlsdGVyfSB0aGF0IGlzIGFwcGxpZWQgdG8gdGhlIHZpZXcsIGV2ZW4gaWYgdGhlIHVzZXIgZG9lc24ndCBzZWFyY2ggYW55dGhpbmcuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIF9iYXNlRmlsdGVyOiBGaWx0ZXI7XG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIHtAbGluayBQcmVkaWNhdGV9IHRyZWUgcm9vdCBmb3IgdXNlciBzZWFyY2ggcXVlcmllcy5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgX3Jvb3RQcmVkaWNhdGU6IEVkaXRhYmxlQ2xhdXNlUHJlZGljYXRlV2l0aEdlbmVyYXRvcnM7XG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIHtAbGluayBGaWx0ZXJ9IHRoYXQgaXMgY3VycmVudGx5IGJlaW5nIGFwcGxpZWQgdG8gdGhlIHZpZXcuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIF9hY3RpdmVGaWx0ZXI6IEJlaGF2aW9yU3ViamVjdDxGaWx0ZXI+O1xuICAgIC8qKlxuICAgICAqIEhvbGRzIHRoZSBmdWxsIHRleHQge0BsaW5rIEZpbHRlcn0gaWYgc2V0LCBgdW5kZWZpbmVkYCBvdGhlcndpc2UuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIF9mdWxsVGV4dEZpbHRlcjogU2ltcGxlRmlsdGVyIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIFRoZSBpbmRleCBvZiBhIHJlbW92ZWQge0BsaW5rIFByZWRpY2F0ZX0gaXMgZW1taXRlZCBpbnRvIHRoaXMgc3RyZWFtXG4gICAgICovXG4gICAgcHJvdGVjdGVkIF9wcmVkaWNhdGVSZW1vdmVkJDogU3ViamVjdDxQcmVkaWNhdGVSZW1vdmFsRXZlbnQ+O1xuICAgIHByb3RlY3RlZCBfbG9hZGluZ0Zyb21NZXRhZGF0YSQ6IExvYWRpbmdFbWl0dGVyO1xuICAgIC8qKlxuICAgICAqIFRoZSBgcm9vdFByZWRpY2F0ZWAgdXNlcyB0aGlzIHN0cmVhbSB0byBub3RpZnkgdGhlIHNlYXJjaCBzZXJ2aWNlIGFib3V0IGNoYW5nZXMgdG8gdGhlIGhlbGQgcXVlcnlcbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9wcmVkaWNhdGVRdWVyeUNoYW5nZWQkOiBTdWJqZWN0PHZvaWQ+O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgc3ViRmlsdGVyOiBTdWJzY3JpcHRpb247XG5cbiAgICAvKipcbiAgICAgKiBUaGUge0BsaW5rIFByZWRpY2F0ZX0gdHJlZSByb290IHVzZXMgYW4gW0FORF17QGxpbmsgQm9vbGVhbk9wZXJhdG9yI0FORH0gb3BlcmF0b3IgdG8gY29tYmluZSB0aGUgUHJlZGljYXRlcy5cbiAgICAgKiBAcGFyYW0gX2xvZyB7QGxpbmsgTG9nZ2VyU2VydmljZX1cbiAgICAgKiBAcGFyYW0gX2NhdGVnb3J5RmFjdG9yeSBhIHtAbGluayBDYXRlZ29yeUZhY3Rvcnl9IGluc3RhbmNlLiBUaGlzIGRlcGVuZGVuY3kgaXMgb3B0aW9uYWwuXG4gICAgICogSXQgaXMgcmVxdWlyZWQgaWYgd2Ugd2FudCB0byBsb2FkIHByZWRpY2F0ZSBmaWx0ZXIgZnJvbSBzYXZlZCBtZXRhZGF0YVxuICAgICAqIEBwYXJhbSBiYXNlRmlsdGVyIEZpbHRlciB0aGF0IHNob3VsZCBiZSBhcHBsaWVkIHRvIHRoZSB2aWV3IHdoZW4gbm8gc2VhcmNoaW5nIGlzIGJlaW5nIHBlcmZvcm1lZC5cbiAgICAgKiBJbmplY3RlZCB0cm91Z2ggdGhlIHtAbGluayBOQUVfQkFTRV9GSUxURVJ9IGluamVjdGlvbiB0b2tlbi5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgX2xvZzogTG9nZ2VyU2VydmljZSxcbiAgICAgICAgICAgICAgICBAT3B0aW9uYWwoKSBwcm90ZWN0ZWQgX2NhdGVnb3J5RmFjdG9yeTogQ2F0ZWdvcnlGYWN0b3J5LFxuICAgICAgICAgICAgICAgIEBJbmplY3QoTkFFX0JBU0VfRklMVEVSKSBiYXNlRmlsdGVyOiBCYXNlRmlsdGVyKSB7XG4gICAgICAgIGlmIChiYXNlRmlsdGVyLmZpbHRlciBpbnN0YW5jZW9mIEZpbHRlcikge1xuICAgICAgICAgICAgdGhpcy5fYmFzZUZpbHRlciA9IGJhc2VGaWx0ZXIuZmlsdGVyLmNsb25lKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoYmFzZUZpbHRlci5maWx0ZXIgaW5zdGFuY2VvZiBPYnNlcnZhYmxlKSB7XG4gICAgICAgICAgICB0aGlzLl9iYXNlRmlsdGVyID0gbmV3IFNpbXBsZUZpbHRlcignJywgYmFzZUZpbHRlci5maWx0ZXJUeXBlLCB7cHJvY2Vzczoge2lkZW50aWZpZXI6ICdfX0VNUFRZX18nfX0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBCYXNlRmlsdGVyIGlucHV0ISBZb3UgbXVzdCBwcm92aWRlIHRoZSBOQUVfQkFTRV9GSUxURVIgaW5qZWN0aW9uIHRva2VuIHdpdGggcHJvcGVyIHZhbHVlcyEnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3ByZWRpY2F0ZVF1ZXJ5Q2hhbmdlZCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAgICAgICB0aGlzLl9yb290UHJlZGljYXRlID0gbmV3IEVkaXRhYmxlQ2xhdXNlUHJlZGljYXRlV2l0aEdlbmVyYXRvcnMoQm9vbGVhbk9wZXJhdG9yLkFORCwgdGhpcy5fcHJlZGljYXRlUXVlcnlDaGFuZ2VkJCwgdW5kZWZpbmVkLCB0cnVlKTtcbiAgICAgICAgdGhpcy5fYWN0aXZlRmlsdGVyID0gbmV3IEJlaGF2aW9yU3ViamVjdDxGaWx0ZXI+KHRoaXMuX2Jhc2VGaWx0ZXIpO1xuICAgICAgICB0aGlzLl9wcmVkaWNhdGVSZW1vdmVkJCA9IG5ldyBTdWJqZWN0PFByZWRpY2F0ZVJlbW92YWxFdmVudD4oKTtcbiAgICAgICAgdGhpcy5fbG9hZGluZ0Zyb21NZXRhZGF0YSQgPSBuZXcgTG9hZGluZ0VtaXR0ZXIoKTtcblxuICAgICAgICBpZiAoYmFzZUZpbHRlci5maWx0ZXIgaW5zdGFuY2VvZiBPYnNlcnZhYmxlKSB7XG4gICAgICAgICAgICB0aGlzLnN1YkZpbHRlciA9IGJhc2VGaWx0ZXIuZmlsdGVyLnN1YnNjcmliZSgoZmlsdGVyKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fYmFzZUZpbHRlciA9IGZpbHRlci5jbG9uZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQWN0aXZlRmlsdGVyKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucHJlZGljYXRlUXVlcnlDaGFuZ2VkJC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVBY3RpdmVGaWx0ZXIoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3ByZWRpY2F0ZVJlbW92ZWQkLmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMuX2FjdGl2ZUZpbHRlci5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLl9wcmVkaWNhdGVRdWVyeUNoYW5nZWQkLmNvbXBsZXRlKCk7XG4gICAgICAgIGlmICh0aGlzLnN1YkZpbHRlcikge1xuICAgICAgICAgICAgdGhpcy5zdWJGaWx0ZXIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9sb2FkaW5nRnJvbU1ldGFkYXRhJC5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLl9yb290UHJlZGljYXRlLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyB0aGUgRmlsdGVyIHRoYXQgaXMgY3VycmVudGx5IGFwcGxpZWQgdG8gdGhlIHZpZXdcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGFjdGl2ZUZpbHRlcigpOiBGaWx0ZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWN0aXZlRmlsdGVyLmdldFZhbHVlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHJldHVybnMgYW4gYE9ic2VydmFibGVgIHRoYXQgdXBkYXRlcyBldmVyeSB0aW1lIHRoZSBhY3RpdmUgRmlsdGVyIGNoYW5nZXMuXG4gICAgICovXG4gICAgcHVibGljIGdldCBhY3RpdmVGaWx0ZXIkKCk6IE9ic2VydmFibGU8RmlsdGVyPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hY3RpdmVGaWx0ZXIuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHJldHVybnMgYHRydWVgIGlmIGEgZmlsdGVyIG90aGVyIHRoYW4gdGhlIGJhc2UgZmlsdGVyIGlzIGN1cnJlbnRseSBhcHBsaWVkLlxuICAgICAqIFJldHVybnMgYGZhbHNlYCBpZiBvbmx5IHRoZSBiYXNlIGZpbHRlciBpcyBjdXJyZW50bHkgYXBwbGllZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGFkZGl0aW9uYWxGaWx0ZXJzQXBwbGllZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLl9yb290UHJlZGljYXRlLnF1ZXJ5LmlzRW1wdHkgfHwgISF0aGlzLl9mdWxsVGV4dEZpbHRlcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgYW55IHZpc2libGUgcHJlZGljYXRlcyBhcmUgYXBwbGllZC5cbiAgICAgKiBSZXR1cm5zIGBmYWxzZWAgaWYgdGhlcmUgYXJlIG5vIHByZWRpY2F0ZXMsIG9yIGlmIHRoZXJlIGFyZSBvbmx5IGhpZGRlbiBwcmVkaWNhdGVzIGFwcGxpZWRcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGhhc1Zpc2libGVQcmVkaWNhdGVzKCk6IGJvb2xlYW4ge1xuICAgICAgICBmb3IgKGNvbnN0IHByZWRpY2F0ZSBvZiB0aGlzLl9yb290UHJlZGljYXRlLmdldFByZWRpY2F0ZU1hcCgpLnZhbHVlcygpKSB7XG4gICAgICAgICAgICBpZiAocHJlZGljYXRlLmlzVmlzaWJsZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyBhIGNvcHkgb2YgdGhlIGJhc2UgZmlsdGVyXG4gICAgICovXG4gICAgcHVibGljIGdldCBiYXNlRmlsdGVyKCk6IEZpbHRlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9iYXNlRmlsdGVyLmNsb25lKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHJldHVybnMgYW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSBpbmRleCBvZiB0aGUgcmVtb3ZlZCBwcmVkaWNhdGUgd2hlbmV2ZXIgYSBwcmVkaWNhdGUgaXMgcmVtb3ZlZFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgcHJlZGljYXRlUmVtb3ZlZCQoKTogT2JzZXJ2YWJsZTxQcmVkaWNhdGVSZW1vdmFsRXZlbnQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ByZWRpY2F0ZVJlbW92ZWQkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEByZXR1cm5zIHRoZSByb290IHByZWRpY2F0ZSBvZiB0aGUgc2VhcmNoIHNlcnZpY2UsIHRoYXQgY2FuIGJlIHVzZWQgdG8gZ2VuZXJhdGUgc2VhcmNoIHJlcXVlc3RzIHdpdGggY3VzdG9tIHF1ZXJpZXNcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHJvb3RQcmVkaWNhdGUoKTogRWRpdGFibGVDbGF1c2VQcmVkaWNhdGVXaXRoR2VuZXJhdG9ycyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yb290UHJlZGljYXRlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEByZXR1cm5zIHRoZSB0eXBlIG9mIHRoZSBmaWx0ZXIgaGVsZCBpbiB0aGlzIHNlYXJjaCBzZXJ2aWNlIGluc3RhbmNlXG4gICAgICovXG4gICAgcHVibGljIGdldCBmaWx0ZXJUeXBlKCk6IEZpbHRlclR5cGUge1xuICAgICAgICByZXR1cm4gdGhpcy5iYXNlRmlsdGVyLnR5cGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHJldHVybnMgd2hldGhlciB0aGUgc2VhcmNoIHNlcnZpY2UgaXMgY3VycmVudGx5IGxvYWRpbmcgaXRzIHN0YXRlIGZyb20gbWV0YWRhdGEgb3Igbm90LlxuICAgICAqXG4gICAgICogU2VlIFtsb2FkRnJvbU1ldGFkYXRhKClde0BsaW5rIFNlYXJjaFNlcnZpY2UjbG9hZEZyb21NZXRhZGF0YX1cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGxvYWRpbmdGcm9tTWV0YWRhdGEoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sb2FkaW5nRnJvbU1ldGFkYXRhJC52YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyBhbiBgT2JzZXJ2YWJsZWAgdGhhdCBlbWl0cyBgdHJ1ZWAgaWYgdGhlIHNlYXJjaCBzZXJ2aWNlIGlzIGN1cnJlbnRseSBsb2FkaW5nIGl0cyBzdGF0ZSBmcm9tIG1ldGFkYXRhLFxuICAgICAqIGVtaXRzIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICAgICAqXG4gICAgICogU2VlIFtsb2FkRnJvbU1ldGFkYXRhKClde0BsaW5rIFNlYXJjaFNlcnZpY2UjbG9hZEZyb21NZXRhZGF0YX1cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGxvYWRpbmdGcm9tTWV0YWRhdGEkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9hZGluZ0Zyb21NZXRhZGF0YSQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHJldHVybnMgYW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHdoZW5ldmVyIHRoZSByb290IHByZWRpY2F0ZXMgcXVlcnkgY2hhbmdlc1xuICAgICAqL1xuICAgIHByb3RlY3RlZCBnZXQgcHJlZGljYXRlUXVlcnlDaGFuZ2VkJCgpOiBPYnNlcnZhYmxlPFF1ZXJ5PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wcmVkaWNhdGVRdWVyeUNoYW5nZWQkLmFzT2JzZXJ2YWJsZSgpLnBpcGUoXG4gICAgICAgICAgICBtYXAoKCkgPT4gdGhpcy5fcm9vdFByZWRpY2F0ZS5xdWVyeSksXG4gICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgocHJldiwgY3VycikgPT4gcHJldiAmJiBwcmV2LmVxdWFscyhjdXJyKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGEge0BsaW5rIFByZWRpY2F0ZX0gdG8gdGhlIFByZWRpY2F0ZSByb290IGFuZCB1cGRhdGVzIHRoZSBhY3RpdmUgRmlsdGVyLlxuICAgICAqXG4gICAgICogUHJlZGljYXRlcyBhZGRlZCB0aGlzIHdheSB3aWxsIG5vdCBiZSB2aXNpYmxlIGluIHRoZSBzZWFyY2ggR1VJLlxuICAgICAqIElmIHlvdSB3YW50IHRvIG1ha2Ugc3VyZSB5b3VyIHByZWRpY2F0ZXMgYXJlIHZpc2libGUgKGFuZCBlZGl0YWJsZSlcbiAgICAgKiB1c2UgdGhlIFthZGRHZW5lcmF0ZWRMZWFmUHJlZGljYXRlKClde0BsaW5rIFNlYXJjaFNlcnZpY2UjYWRkR2VuZXJhdGVkTGVhZlByZWRpY2F0ZX0gbWV0aG9kIGluc3RlYWQuXG4gICAgICogQHBhcmFtIG5ld1ByZWRpY2F0ZSBQcmVkaWNhdGUgdGhhdCBzaG91bGQgYmUgYWRkZWQgdG8gdGhlIHNlYXJjaCBxdWVyaWVzLlxuICAgICAqIEByZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgYWRkZWQgUHJlZGljYXRlXG4gICAgICovXG4gICAgcHVibGljIGFkZFByZWRpY2F0ZShuZXdQcmVkaWNhdGU6IFByZWRpY2F0ZSk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yb290UHJlZGljYXRlLmFkZFByZWRpY2F0ZShuZXdQcmVkaWNhdGUsIGZhbHNlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgbmV3IGhpZGRlbiBicmFuY2ggb2YgdGhlIHByZWRpY2F0ZSB0cmVlIHdpdGggYSBzaW5ndWxhciBsZWFmIG5vZGUgY29udGFpbmluZyB0aGUgcHJvdmlkZWQgUXVlcnkuXG4gICAgICpcbiAgICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGFkZCBwcmVkaWNhdGVzIHRvIHRoZSBzZWFyY2ggdHJlZSAodGhpbmsgaGVhZGVyIHNlYXJjaCksXG4gICAgICogd2hpY2ggY2FuIGJlIG1hZGUgdmlzaWJsZSBhbmQgZWRpdGFibGUgaW4gdGhlIHNlYXJjaCBHVUkgbGF0ZXIuXG4gICAgICogQHBhcmFtIGdlbmVyYXRvciB0aGUgZ2VuZXJhdG9yIHRoYXQgaXMgaW4gc3VjaCBzdGF0ZSwgdGhhdCBpdCBnZW5lcmF0ZXMgdGhlIFF1ZXJ5LCB0aGF0IHNob3VsZCBiZSBhZGRlZCBhcyBicmFuY2gvbGVhZi5cbiAgICAgKiBJZiB0aGUgZ2VuZXJhdG9yIGRvZXNuJ3QgY3VycmVudGx5IGdlbmVyYXRlIGEgcXVlcnkgYSBub2RlIHdpdGggYW4gZW1wdHkgcXVlcnkgd2lsbCBiZSBhZGRlZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkR2VuZXJhdGVkTGVhZlByZWRpY2F0ZShnZW5lcmF0b3I6IENhdGVnb3J5PGFueT4pOiBudW1iZXIge1xuICAgICAgICBjb25zdCBicmFuY2hJZCA9IHRoaXMuX3Jvb3RQcmVkaWNhdGUuYWRkTmV3Q2xhdXNlUHJlZGljYXRlKEJvb2xlYW5PcGVyYXRvci5PUiwgZmFsc2UpO1xuICAgICAgICBjb25zdCBicmFuY2ggPSAoXG4gICAgICAgICAgICB0aGlzLl9yb290UHJlZGljYXRlLmdldFByZWRpY2F0ZU1hcCgpLmdldChicmFuY2hJZCkuZ2V0V3JhcHBlZFByZWRpY2F0ZSgpIGFzIHVua25vd24gYXMgRWRpdGFibGVDbGF1c2VQcmVkaWNhdGVXaXRoR2VuZXJhdG9yc1xuICAgICAgICApO1xuICAgICAgICBicmFuY2guYWRkTmV3UHJlZGljYXRlRnJvbUdlbmVyYXRvcihnZW5lcmF0b3IpO1xuICAgICAgICByZXR1cm4gYnJhbmNoSWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyB0aGUge0BsaW5rIFByZWRpY2F0ZX0gb2JqZWN0IGZyb20gdGhlIHByb3ZpZGVkIGluZGV4LiBJZiB0aGUgaW5kZXggaXMgaW52YWxpZCBkb2VzIG5vdGhpbmcuXG4gICAgICogVXBkYXRlcyB0aGUgdGhlIGFjdGl2ZSBGaWx0ZXIgaWYgdGhlIFByZWRpY2F0ZSB0cmVlIHdhcyBhZmZlY3RlZC5cbiAgICAgKiBAcGFyYW0gaW5kZXggaW5kZXggb2YgdGhlIFByZWRpY2F0ZSB0aGF0IHNob3VsZCBiZSByZW1vdmVkXG4gICAgICogQHBhcmFtIGNsZWFySW5wdXQgd2hldGhlciB0aGUgaW5wdXQsIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIHByZWRpY2F0ZSBzaG91bGQgYmUgY2xlYXJlZFxuICAgICAqL1xuICAgIHB1YmxpYyByZW1vdmVQcmVkaWNhdGUoaW5kZXg6IG51bWJlciwgY2xlYXJJbnB1dCA9IHRydWUpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX3Jvb3RQcmVkaWNhdGUucmVtb3ZlUHJlZGljYXRlKGluZGV4KSkge1xuICAgICAgICAgICAgdGhpcy5fcHJlZGljYXRlUmVtb3ZlZCQubmV4dCh7aW5kZXgsIGNsZWFySW5wdXR9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYWxsIHtAbGluayBQcmVkaWNhdGV9IG9iamVjdHMgdGhhdCBjb250cmlidXRlIHRvIHRoZSBzZWFyY2guIFVwZGF0ZXMgdGhlIGFjdGl2ZSBGaWx0ZXIgaWYgaXQgd2FzIGFmZmVjdGVkLlxuICAgICAqXG4gICAgICogQHBhcmFtIGNsZWFySGlkZGVuIHdoZXRoZXIgdGhlIGhpZGRlbiBwcmVkaWNhdGVzIHNob3VsZCBiZSBjbGVhcmVkIGFzIHdlbGxcbiAgICAgKi9cbiAgICBwdWJsaWMgY2xlYXJQcmVkaWNhdGVzKGNsZWFySGlkZGVuID0gZmFsc2UpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX3Jvb3RQcmVkaWNhdGUuZ2V0UHJlZGljYXRlTWFwKCkuc2l6ZSA+IDApIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2lkLCBwcmVkaWNhdGVdIG9mIHRoaXMuX3Jvb3RQcmVkaWNhdGUuZ2V0UHJlZGljYXRlTWFwKCkuZW50cmllcygpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNsZWFySGlkZGVuIHx8IHByZWRpY2F0ZS5pc1Zpc2libGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVQcmVkaWNhdGUoaWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudXBkYXRlQWN0aXZlRmlsdGVyKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGEge0BsaW5rIEZpbHRlcn0gd2l0aCB0aGUgW2Z1bGxUZXh0XXtAbGluayBDYXNlU2VhcmNoUmVxdWVzdEJvZHkjZnVsbFRleHR9IGF0dHJpYnV0ZSBzZXQgdG8gdGhlIHByb3ZpZGVkIHZhbHVlLlxuICAgICAqIElmIGZ1bGwgdGV4dCBmaWx0ZXIgaXMgYWxyZWFkeSBzZXQsIGl0IHdpbGwgYmUgcmVwbGFjZWQuXG4gICAgICogQHBhcmFtIHNlYXJjaGVkU3Vic3RyaW5nIHZhbHVlIHRoYXQgc2hvdWxkIGJlIHNlYXJjaGVkIG9uIGFsbCBmdWxsIHRleHQgZmllbGRzXG4gICAgICovXG4gICAgcHVibGljIHNldEZ1bGxUZXh0RmlsdGVyKHNlYXJjaGVkU3Vic3RyaW5nOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgd2hpdGVTcGFjZWRTdWJzdHJpbmcgPSBzZWFyY2hlZFN1YnN0cmluZy5yZXBsYWNlKC8gL2csICdcXFxcICcpO1xuICAgICAgICB0aGlzLl9mdWxsVGV4dEZpbHRlciA9IG5ldyBTaW1wbGVGaWx0ZXIoJycsIHRoaXMuX2Jhc2VGaWx0ZXIudHlwZSwge2Z1bGxUZXh0OiB3aGl0ZVNwYWNlZFN1YnN0cmluZ30pO1xuICAgICAgICB0aGlzLnVwZGF0ZUFjdGl2ZUZpbHRlcigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsZWFycyB0aGUgZnVsbCB0ZXh0IGZpbHRlciAoaWYgc2V0KS4gSWYgdGhlIGZ1bGwgdGV4dCBmaWx0ZXIgaXMgbm90IHNldCwgZG9lcyBub3RoaW5nLlxuICAgICAqL1xuICAgIHB1YmxpYyBjbGVhckZ1bGxUZXh0RmlsdGVyKCk6IHZvaWQge1xuICAgICAgICBjb25zdCB3YXNGdWxsdGV4dFNldCA9IHRoaXMuX2Z1bGxUZXh0RmlsdGVyICE9PSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuX2Z1bGxUZXh0RmlsdGVyID0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAod2FzRnVsbHRleHRTZXQpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQWN0aXZlRmlsdGVyKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTaG93cyB0aGUgcHJlZGljYXRlcyB3aXRoIHRoZSBnaXZlbiBpZHMuIFNraXBzIGlkcyB0aGF0IGRvbid0IGV4aXN0LlxuICAgICAqIEBwYXJhbSBwcmVkaWNhdGVJZHMgdGhlIGlkcyBvZiB0aGUgcHJlZGljYXRlcyB0aGF0IHNob3VsZCBiZSBzaG93bi5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2hvdyhwcmVkaWNhdGVJZHM6IEFycmF5PG51bWJlcj4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcm9vdFByZWRpY2F0ZS5zaG93UHJlZGljYXRlcyhwcmVkaWNhdGVJZHMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlYWRzIHRoZSBjdXJyZW50IHF1ZXJ5IGZyb20gdGhlIHByZWRpY2F0ZSB0cmVlLCBjb21iaW5lcyBpdCB3aXRoIHRoZSBiYXNlIEZpbHRlciBhbmQgZnVsbCB0ZXh0IEZpbHRlciAoaWYgc2V0KVxuICAgICAqIGFuZCB1cGRhdGVzIHRoZSBhY3RpdmUgRmlsdGVyLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCB1cGRhdGVBY3RpdmVGaWx0ZXIoKTogdm9pZCB7XG4gICAgICAgIGxldCBhZGRpdGlvbmFsRmlsdGVyOiBGaWx0ZXI7XG4gICAgICAgIGlmICghdGhpcy5fcm9vdFByZWRpY2F0ZS5xdWVyeS5pc0VtcHR5KSB7XG4gICAgICAgICAgICBhZGRpdGlvbmFsRmlsdGVyID0gbmV3IFNpbXBsZUZpbHRlcignJywgdGhpcy5fYmFzZUZpbHRlci50eXBlLCB7cXVlcnk6IHRoaXMuX3Jvb3RQcmVkaWNhdGUucXVlcnkudmFsdWV9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fZnVsbFRleHRGaWx0ZXIpIHtcbiAgICAgICAgICAgIGlmIChhZGRpdGlvbmFsRmlsdGVyKSB7XG4gICAgICAgICAgICAgICAgYWRkaXRpb25hbEZpbHRlciA9IGFkZGl0aW9uYWxGaWx0ZXIubWVyZ2UodGhpcy5fZnVsbFRleHRGaWx0ZXIsIE1lcmdlT3BlcmF0b3IuQU5EKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYWRkaXRpb25hbEZpbHRlciA9IHRoaXMuX2Z1bGxUZXh0RmlsdGVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChhZGRpdGlvbmFsRmlsdGVyKSB7XG4gICAgICAgICAgICB0aGlzLl9hY3RpdmVGaWx0ZXIubmV4dCh0aGlzLl9iYXNlRmlsdGVyLm1lcmdlKGFkZGl0aW9uYWxGaWx0ZXIsIE1lcmdlT3BlcmF0b3IuQU5EKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9hY3RpdmVGaWx0ZXIubmV4dCh0aGlzLl9iYXNlRmlsdGVyLmNsb25lKCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHJldHVybnMgYHVuZGVmaW5lZGAgaWYgdGhlIHByZWRpY2F0ZSB0cmVlIGNvbnRhaW5zIG5vIGNvbXBsZXRlIHF1ZXJ5LlxuICAgICAqIE90aGVyd2lzZSByZXR1cm5zIHRoZSBzZXJpYWxpemVkIGZvcm0gb2YgdGhlIGNvbXBsZXRlZCBxdWVyaWVzIGluIHRoZSBwcmVkaWNhdGUgdHJlZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgY3JlYXRlUHJlZGljYXRlTWV0YWRhdGEoKTogUHJlZGljYXRlVHJlZU1ldGFkYXRhIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvb3RQcmVkaWNhdGUuY3JlYXRlR2VuZXJhdG9yTWV0YWRhdGEoKSBhcyBQcmVkaWNhdGVUcmVlTWV0YWRhdGE7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVwbGFjZXMgdGhlIGN1cnJlbnQgcHJlZGljYXRlIGZpbHRlciBieSB0aGUgb25lIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHByb3ZpZGVkIGdlbmVyYXRvciBtZXRhZGF0YS5cbiAgICAgKlxuICAgICAqIFRoZSB7QGxpbmsgQ2F0ZWdvcnlGYWN0b3J5fSBpbnN0YW5jZSBtdXN0IGJlIHByb3ZpZGVkIGZvciB0aGlzIHNlcnZpY2UgaWYgd2Ugd2FudCB0byB1c2UgdGhpcyBtZXRob2QuIExvZ3MgYW4gZXJyb3IgYW5kIGRvZXMgbm90aGluZy5cbiAgICAgKlxuICAgICAqIFRoZSBgZmlsdGVyVHlwZWAgb2YgdGhpcyBzZWFyY2ggc2VydmljZSBtdXN0IG1hdGNoIHRoZSBgZmlsdGVyVHlwZWAgb2YgdGhlIHByb3ZpZGVkIG1ldGFkYXRhLiBPdGhlcndpc2UgYW4gZXJyb3IgaXMgdGhyb3duLlxuICAgICAqXG4gICAgICogQHBhcmFtIG1ldGFkYXRhIHRoZSBzZXJpYWxpemVkIHN0YXRlIG9mIHRoZSBwcmVkaWNhdGUgdHJlZSB0aGF0IHNob3VsZCBiZSByZXN0b3JlZCB0byB0aGlzIHNlYXJjaCBzZXJ2aWNlXG4gICAgICovXG4gICAgcHVibGljIGxvYWRGcm9tTWV0YWRhdGEobWV0YWRhdGE6IEZpbHRlck1ldGFkYXRhKSB7XG4gICAgICAgIGlmICh0aGlzLl9jYXRlZ29yeUZhY3RvcnkgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuX2xvZy5lcnJvcignQSBDYXRlZ29yeUZhY3RvcnkgaW5zdGFuY2UgbXVzdCBiZSBwcm92aWRlZCBmb3IgdGhlIFNlYXJjaFNlcnZpY2UnXG4gICAgICAgICAgICAgICAgKyAnIGlmIHlvdSB3YW50IHRvIHJlY29uc3RydWN0IGEgcHJlZGljYXRlIGZpbHRlciBmcm9tIHNhdmVkIG1ldGFkYXRhJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobWV0YWRhdGEuZmlsdGVyVHlwZSAhPT0gdGhpcy5maWx0ZXJUeXBlKSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcihgVGhlIGZpbHRlciB0eXBlIG9mIHRoZSBwcm92aWRlZCBtZXRhZGF0YSAoJHttZXRhZGF0YS5maWx0ZXJUeXBlXG4gICAgICAgICAgICB9KSBkb2VzIG5vdCBtYXRjaCB0aGUgZmlsdGVyIHR5cGUgb2YgdGhlIHNlYXJjaCBzZXJ2aWNlICgke3RoaXMuZmlsdGVyVHlwZX0pIWApO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jbGVhclByZWRpY2F0ZXModHJ1ZSk7XG4gICAgICAgIHRoaXMuX2xvYWRpbmdGcm9tTWV0YWRhdGEkLm9uKCk7XG5cbiAgICAgICAgY29uc3QgZ2VuZXJhdG9yT2JzZXJ2YWJsZXMgPSBbXTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobWV0YWRhdGEucHJlZGljYXRlTWV0YWRhdGEpKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNsYXVzZSBvZiBtZXRhZGF0YS5wcmVkaWNhdGVNZXRhZGF0YSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJyYW5jaElkID0gdGhpcy5fcm9vdFByZWRpY2F0ZS5hZGROZXdDbGF1c2VQcmVkaWNhdGUoQm9vbGVhbk9wZXJhdG9yLk9SKTtcbiAgICAgICAgICAgICAgICBjb25zdCBicmFuY2hQcmVkaWNhdGUgPSAoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Jvb3RQcmVkaWNhdGUuZ2V0UHJlZGljYXRlTWFwKCkuZ2V0KGJyYW5jaElkKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmdldFdyYXBwZWRQcmVkaWNhdGUoKSBhcyB1bmtub3duIGFzIEVkaXRhYmxlQ2xhdXNlUHJlZGljYXRlV2l0aEdlbmVyYXRvcnNcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcHJlZGljYXRlIG9mIGNsYXVzZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBsb2NhbEJyYW5jaFJlZmVyZW5jZSA9IGJyYW5jaFByZWRpY2F0ZTtcbiAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yT2JzZXJ2YWJsZXMucHVzaChcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NhdGVnb3J5RmFjdG9yeS5nZXRGcm9tTWV0YWRhdGEocHJlZGljYXRlKS5waXBlKHRhcChnZW5lcmF0b3IgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsQnJhbmNoUmVmZXJlbmNlLmFkZE5ld1ByZWRpY2F0ZUZyb21HZW5lcmF0b3IoZ2VuZXJhdG9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvcmtKb2luKGdlbmVyYXRvck9ic2VydmFibGVzKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9hZGluZ0Zyb21NZXRhZGF0YSQub2ZmKCk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUFjdGl2ZUZpbHRlcigpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyBhbiBBcnJheSBvZiBmaWx0ZXIgdGV4dCBzZWdtZW50cyB0aGF0IGNvcnJlc3BvbmQgdG8gdGhlIGN1cnJlbnRseSBkaXNwbGF5ZWQgY29tcGxldGVkIHByZWRpY2F0ZXNcbiAgICAgKi9cbiAgICBwdWJsaWMgY3JlYXRlRmlsdGVyVGV4dFNlZ21lbnRzKCk6IEFycmF5PEZpbHRlclRleHRTZWdtZW50PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yb290UHJlZGljYXRlLmNyZWF0ZUZpbHRlclRleHRTZWdtZW50cygpO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -9535,7 +9535,7 @@ class Substring extends Operator {
|
|
|
9535
9535
|
// TODO IMPROVEMENT 27.4.2020 - we could use regular expressions to search for substrings which would solve the unintuitive
|
|
9536
9536
|
// behavior that occurs when we search for strings that contain spaces. We need to escape the input string in a special way
|
|
9537
9537
|
// if we choose to do this
|
|
9538
|
-
const escapedValue = Operator.escapeInput(args[0]).value.replace(
|
|
9538
|
+
const escapedValue = Operator.escapeInput(args[0]).value.replace(/ /g, '\\ ');
|
|
9539
9539
|
return Operator.forEachKeyword(elasticKeywords, keyword => new Query(`(${keyword}:*${escapedValue}*)`));
|
|
9540
9540
|
}
|
|
9541
9541
|
getOperatorNameTemplate() {
|
|
@@ -12964,7 +12964,7 @@ class SearchService {
|
|
|
12964
12964
|
* @param searchedSubstring value that should be searched on all full text fields
|
|
12965
12965
|
*/
|
|
12966
12966
|
setFullTextFilter(searchedSubstring) {
|
|
12967
|
-
const whiteSpacedSubstring = searchedSubstring.replace(
|
|
12967
|
+
const whiteSpacedSubstring = searchedSubstring.replace(/ /g, '\\ ');
|
|
12968
12968
|
this._fullTextFilter = new SimpleFilter('', this._baseFilter.type, { fullText: whiteSpacedSubstring });
|
|
12969
12969
|
this.updateActiveFilter();
|
|
12970
12970
|
}
|